tx · D1YkgGT9xcRUq8BLs89DPx7Mxy876dBv2Jfoxq3sduXp

3PEa9FHtMPHnuMy49sRkepXV12L1LVtckf8:  -0.06000000 Waves

2022.09.21 19:23 [3304566] smart account 3PEa9FHtMPHnuMy49sRkepXV12L1LVtckf8 > SELF 0.00000000 Waves

{ "type": 13, "id": "D1YkgGT9xcRUq8BLs89DPx7Mxy876dBv2Jfoxq3sduXp", "fee": 6000000, "feeAssetId": null, "timestamp": 1663777430940, "version": 2, "chainId": 87, "sender": "3PEa9FHtMPHnuMy49sRkepXV12L1LVtckf8", "senderPublicKey": "5uTkGBcBYJzxzmKDLPHVmo27q17aTotrkEYWVysrz44i", "proofs": [ "5W2rcSi4vUfRathGgdQLLwAPKkRm6xiWazYfkLBVbH3RnWANEb8rnyfYyNfdpxSDM8hHN7p7srdqaK3oXS6jPiZQ" ], "script": "base64:BgJvCAISABIAEgMKAQESAwoBARILCgkBAQEBAQEBAQESEAoOAQEBAQEBAQgICAEBAQESAwoBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESABIDCgEIEgASBAoCCAESAwoBARIDCgEIEgMKAQgSAwoBARIAiAEACWtfb3JhX2tleQIJa19vcmFfa2V5AA9rX29yYV9ibG9ja19rZXkCD2tfb3JhX2Jsb2NrX2tleQAFa19vcmECBWtfb3JhAAlrX2JhbGFuY2UCCWtfYmFsYW5jZQAOa19wb3NpdGlvblNpemUCDmtfcG9zaXRpb25TaXplABBrX3Bvc2l0aW9uTWFyZ2luAhBrX3Bvc2l0aW9uTWFyZ2luABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAhZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhJrX3Bvc2l0aW9uRnJhY3Rpb24AFGtfcG9zaXRpb25DbG9zZWREYXRlAhRrX3Bvc2l0aW9uQ2xvc2VkRGF0ZQANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAIa19wYXVzZWQCCGtfcGF1c2VkAAVrX2ZlZQIFa19mZWUAD2tfZnVuZGluZ1BlcmlvZAIPa19mdW5kaW5nUGVyaW9kABFrX2luaXRNYXJnaW5SYXRpbwIRa19pbml0TWFyZ2luUmF0aW8AGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwIFa19tbXIAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwIVa19saXF1aWRhdGlvbkZlZVJhdGlvABlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAhZrX3BhcnRMaXF1aWRhdGlvblJhdGlvAA1rX3NwcmVhZExpbWl0Ag1rX3NwcmVhZExpbWl0ABBrX21heFByaWNlSW1wYWN0AhBrX21heFByaWNlSW1wYWN0ABBrX21heFByaWNlU3ByZWFkAhBrX21heFByaWNlU3ByZWFkAA1rX2xhc3REYXRhU3RyAg1rX2xhc3REYXRhU3RyAA5rX2xhc3RNaW51dGVJZAIOa19sYXN0TWludXRlSWQAHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAh1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQATa190d2FwRGF0YUxhc3RQcmljZQITa190d2FwRGF0YUxhc3RQcmljZQAaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQCGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFGtfY3VtdWxhdGl2ZU5vdGlvbmFsAhRrX2N1bXVsYXRpdmVOb3Rpb25hbAAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzABNrX2luc3VyYW5jZV9hZGRyZXNzAhNrX2luc3VyYW5jZV9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAD2tfcXVvdGVfc3Rha2luZwIPa19xdW90ZV9zdGFraW5nABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzABBrX29yZGVyc19hZGRyZXNzAhBrX29yZGVyc19hZGRyZXNzABJrX3JlZmVycmFsX2FkZHJlc3MCEmtfcmVmZXJyYWxfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQ5hZG1pblB1YmxpY0tleQAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19hZG1pbl9wdWJsaWNfa2V5AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0ARFxdW90ZUFzc2V0U3Rha2luZwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3F1b3RlX3N0YWtpbmcCG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEQaW5zdXJhbmNlQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRNrX2luc3VyYW5jZV9hZGRyZXNzAhFJbnN1cmFuY2Ugbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAPT1JBQ0xFX0lOVEVSVkFMAA8AB1NFQ09ORFMA6AcADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAIQUxMX0ZFRVMAZAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEdm1heAICX3gCX3kDCQBnAgUCX3gFAl95BQJfeAUCX3kBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBCWxpc3RUb1N0cgEFX2xpc3QKAQVfam9pbgILYWNjdW11bGF0b3IDdmFsCQCsAgIJAKwCAgULYWNjdW11bGF0b3IFA3ZhbAIBLAQKbmV3TGlzdFN0cgoAAiRsBQVfbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFX2pvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQLbmV3TGlzdFN0clUJALMCAgUKbmV3TGlzdFN0cgABBAtuZXdMaXN0U3RyUgMJAAACCQCvAgIFC25ld0xpc3RTdHJVAAECASwJALACAgULbmV3TGlzdFN0clUAAQULbmV3TGlzdFN0clUFC25ld0xpc3RTdHJSAQlzdHJUb0xpc3QBBF9zdHIJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9pbml0TWFyZ2luUmF0aW8ACQEDaW50AQURa19pbml0TWFyZ2luUmF0aW8BBnF0QXN0UgAJAQNpbnQBBRNrX3F1b3RlQXNzZXRSZXNlcnZlAQZic0FzdFIACQEDaW50AQUSa19iYXNlQXNzZXRSZXNlcnZlARF0b3RhbFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRNrX3RvdGFsUG9zaXRpb25TaXplARJjdW11bGF0aXZlTm90aW9uYWwACQEDaW50AQUUa19jdW11bGF0aXZlTm90aW9uYWwBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAACQEDaW50AQUSa19uZXh0RnVuZGluZ0Jsb2NrARBmdW5kaW5nUGVyaW9kUmF3AAkBA2ludAEFD2tfZnVuZGluZ1BlcmlvZAEUZnVuZGluZ1BlcmlvZERlY2ltYWwACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQxERUNJTUFMX1VOSVQBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUHU0VDT05EUwEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAJAQNpbnQBBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8BE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQEDaW50AQUVa19saXF1aWRhdGlvbkZlZVJhdGlvARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAQNpbnQBBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAQtzcHJlYWRMaW1pdAAJAQNpbnQBBQ1rX3NwcmVhZExpbWl0AQ5tYXhQcmljZUltcGFjdAAJAQNpbnQBBRBrX21heFByaWNlSW1wYWN0AQ5tYXhQcmljZVNwcmVhZAAJAQNpbnQBBRBrX21heFByaWNlU3ByZWFkASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBD2dldEFjdHVhbENhbGxlcgEBaQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQENb3JkZXJzQWRkcmVzcwACCGtfc2VuZGVyCQClCAEIBQFpBmNhbGxlcgEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBAg5JbnZhbGlkIG1hcmdpbgMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBAg5JbnZhbGlkIG1hcmdpbgYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24BB190cmFkZXIED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHJG1hdGNoMAUPcG9zaXRpb25TaXplT3B0AwkAAQIFByRtYXRjaDACA0ludAQMcG9zaXRpb25TaXplBQckbWF0Y2gwCQCWCgQFDHBvc2l0aW9uU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgkAlgoEAAAAAAAAAAABE3JlcXVpcmVPcGVuUG9zaXRpb24BB190cmFkZXIDCQAAAggJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBBnBhdXNlZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUIa19wYXVzZWQHAQ11cGRhdGVSZXNlcnZlAwZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQQX2Jhc2VBc3NldEFtb3VudAMFBl9pc0FkZAQHbmV3QmFzZQkAZQIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50AwkAZwIAAAUHbmV3QmFzZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBhc3NldCByZXNlcnZlIDw9IDAsIHJldmVydAkAlgoECQBkAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50BQduZXdCYXNlCQBkAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAkAZAIJARJjdW11bGF0aXZlTm90aW9uYWwABRFfcXVvdGVBc3NldEFtb3VudAQIbmV3UXVvdGUJAGUCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQDCQBnAgAABQhuZXdRdW90ZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkAlgoEBQhuZXdRdW90ZQkAZAIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARJjdW11bGF0aXZlTm90aW9uYWwABRFfcXVvdGVBc3NldEFtb3VudAEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQBawkBBG11bGQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQEEZGl2ZAIFAWsFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIEGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBA2FicwEJAGUCBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFB19ic0FzdFIEFWFtb3VudEJhc2VBc3NldEJvdWdodAMFBl9pc0FkZAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEBLQEFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQNJHQwMTI4MTYxMzAwOQkBDXVwZGF0ZVJlc2VydmUDBQZfaXNBZGQFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTI4MTYxMzAwOQJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDEyODE2MTMwMDkCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTI4MTYxMzAwOQJfMwQYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCAUNJHQwMTI4MTYxMzAwOQJfNAQLcHJpY2VCZWZvcmUJAQRkaXZkAgUHX3F0QXN0UgUHX2JzQXN0UgQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCXCgUFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBRhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEEF9vbGRQb3NpdGlvblNpemUSX29sZFBvc2l0aW9uTWFyZ2luJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24MX21hcmdpbkRlbHRhBA5mdW5kaW5nUGF5bWVudAMJAQIhPQIFEF9vbGRQb3NpdGlvblNpemUAAAQgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUQX29sZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQBlAgUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FEF9vbGRQb3NpdGlvblNpemUAAAQMc2lnbmVkTWFyZ2luCQBkAgkAZQIFDF9tYXJnaW5EZWx0YQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTQ1MDAxNDYyNwMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxNDUwMDE0NjI3Al8xBAdiYWREZWJ0CAUNJHQwMTQ1MDAxNDYyNwJfMgkAlQoDBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50ARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBQZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdBJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUEC3ByaWNlQmVmb3JlCQEEZGl2ZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUDCQAAAgUQX2Jhc2VBc3NldEFtb3VudAAACQACAQIZSW52YWxpZCBiYXNlIGFzc2V0IGFtb3VudAQBawkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAQRkaXZkAgUBawUYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyBA5xdW90ZUFzc2V0U29sZAkBA2FicwEJAGUCBQ9xdW90ZUFzc2V0QWZ0ZXIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAQNJHQwMTU2MDQxNTc5NwkBDXVwZGF0ZVJlc2VydmUDCQEBIQEFBl9pc0FkZAUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTU2MDQxNTc5NwJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE1NjA0MTU3OTcCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTU2MDQxNTc5NwJfMwQYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCAUNJHQwMTU2MDQxNTc5NwJfNAQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCaCggFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEFGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkBASEBBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAFC3ByaWNlSW1wYWN0AQpzd2FwT3V0cHV0AwZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdAkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMFBQZfaXNBZGQFEF9iYXNlQXNzZXRBbW91bnQFFF9jaGVja01heFByaWNlSW1wYWN0CQEGcXRBc3RSAAkBBmJzQXN0UgABEmdldE9yYWNsZVR3YXBQcmljZQAEBm9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFBWtfb3JhAgAECHByaWNlS2V5CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrX29yYV9rZXkECGJsb2NrS2V5CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ9rX29yYV9ibG9ja19rZXkECWxhc3RWYWx1ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQUIcHJpY2VLZXkJAKwCAgkArAICCQCsAgICIkNhbiBub3QgZ2V0IG9yYWNsZSBwcmljZS4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFCHByaWNlS2V5BQlsYXN0VmFsdWUBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQLb3JhY2xlUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABApwcmljZUFmdGVyCQEEZGl2ZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEDGF2ZXJhZ2VQcmljZQkBBGRpdmQCCQBkAgULb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIFDGF2ZXJhZ2VQcmljZQMJAGYCBQxhYnNQcmljZURpZmYJAQ5tYXhQcmljZVNwcmVhZAAJAAIBCQCsAgIJAKwCAgkArAICAg1QcmljZSBzcHJlYWQgCQCkAwEFDGFic1ByaWNlRGlmZgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABAxjdXJyZW50UHJpY2UJAQxnZXRTcG90UHJpY2UACQBmAgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQxjdXJyZW50UHJpY2UFC29yYWNsZVByaWNlCQELc3ByZWFkTGltaXQAAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBA1fcG9zaXRpb25TaXplB19vcHRpb24SX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ1fcG9zaXRpb25TaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsAwkAAAIFB19vcHRpb24FD1BOTF9PUFRJT05fU1BPVAQNJHQwMTkwMTUxOTE4NgkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMFCQEBIQEFB2lzU2hvcnQFD3Bvc2l0aW9uU2l6ZUFicwcFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEE291dFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAxOTAxNTE5MTg2Al8xBAJ4MQgFDSR0MDE5MDE1MTkxODYCXzIEAngyCAUNJHQwMTkwMTUxOTE4NgJfMwQCeDMIBQ0kdDAxOTAxNTE5MTg2Al80BRNvdXRQb3NpdGlvbk5vdGlvbmFsCQEEbXVsZAIFD3Bvc2l0aW9uU2l6ZUFicwkBEmdldE9yYWNsZVR3YXBQcmljZQAFEHBvc2l0aW9uTm90aW9uYWwBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMFDV9wb3NpdGlvblNpemUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwEBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBA11bnJlYWxpemVkUG5sAwUHaXNTaG9ydAkAZQIFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAUQcG9zaXRpb25Ob3Rpb25hbAkAZQIFEHBvc2l0aW9uTm90aW9uYWwFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAkAlAoCBRBwb3NpdGlvbk5vdGlvbmFsBQ11bnJlYWxpemVkUG5sASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyMDUwMzIwNjMxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyMDUwMzIwNjMxAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDIwNTAzMjA2MzECXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjA1MDMyMDYzMQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyMDUwMzIwNjMxAl80CQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwUFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwJAQZxdEFzdFIACQEGYnNBc3RSAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMjExMTIyMTIyMwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjExMTIyMTIyMwJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyMTExMjIxMjIzAl8yBANwb24IBQ0kdDAyMTExMjIxMjIzAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDIxMTEyMjEyMjMCXzQEDSR0MDIxMjI5MjEzMjIJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyMTIyOTIxMzIyAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjEyMjkyMTMyMgJfMgQNJHQwMjEzMjcyMTQ5MwkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjEzMjcyMTQ5MwJfMQQHYmFkRGVidAgFDSR0MDIxMzI3MjE0OTMCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfOAMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRVleGNoYW5nZWRQb3NpdGlvblNpemUHAl8xBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50ARVpbnRlcm5hbENsb3NlUG9zaXRpb24CB190cmFkZXIUX2NoZWNrTWF4UHJpY2VJbXBhY3QEDSR0MDIyNzI2MjI4NTQJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDIyNzI2MjI4NTQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjI3MjYyMjg1NAJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyMjcyNjIyODU0Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDIyNzI2MjI4NTQCXzQEDXVucmVhbGl6ZWRQbmwICQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QCXzIEDSR0MDIyOTQ5MjMxMTcJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDIyOTQ5MjMxMTcCXzEEB2JhZERlYnQIBQ0kdDAyMjk0OTIzMTE3Al8yBBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQEtAQUMcG9zaXRpb25TaXplBAtyZWFsaXplZFBubAUNdW5yZWFsaXplZFBubAQNbWFyZ2luVG9WYXVsdAkBAS0BBQxyZW1haW5NYXJnaW4EDSR0MDIzMjQ0MjM1NTUJAQpzd2FwT3V0cHV0AwkAZgIFDHBvc2l0aW9uU2l6ZQAACQEDYWJzAQUMcG9zaXRpb25TaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDIzMjQ0MjM1NTUCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyMzI0NDIzNTU1Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyMzI0NDIzNTU1Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMjMyNDQyMzU1NQJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAyMzI0NDIzNTU1Al81BA50b3RhbExvbmdBZnRlcggFDSR0MDIzMjQ0MjM1NTUCXzYED3RvdGFsU2hvcnRBZnRlcggFDSR0MDIzMjQ0MjM1NTUCXzcEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkAngoMBRVleGNoYW5nZWRQb3NpdGlvblNpemUFB2JhZERlYnQFC3JlYWxpemVkUG5sBQ1tYXJnaW5Ub1ZhdWx0BRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyARBnZXRUd2FwU3BvdFByaWNlAAQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQNc3RhcnRNaW51dGVJZAkAZQIFCG1pbnV0ZUlkBQ1UV0FQX0lOVEVSVkFMBAdsaXN0U3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAQEbGlzdAkAtQkCBQdsaXN0U3RyAgEsCgEIZmlsdGVyRm4CC2FjY3VtdWxhdG9yBG5leHQDCQBnAgUNc3RhcnRNaW51dGVJZAkBDXBhcnNlSW50VmFsdWUBBQRuZXh0CQDNCAIFC2FjY3VtdWxhdG9yCQENcGFyc2VJbnRWYWx1ZQEFBG5leHQFC2FjY3VtdWxhdG9yBAVsaXN0RgoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmaWx0ZXJGbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAhtYXhJbmRleAMJAGYCCQCQAwEFBWxpc3RGAAAJAJYDAQUFbGlzdEYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsaXN0AAAEDGxhc3RNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAABBZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQMZW5kTGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABBJub3dDdW11bGF0aXZlUHJpY2UJAGQCBRZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFDGVuZExhc3RQcmljZQQYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABA5zdGFydExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABBRzdGFydEN1bXVsYXRpdmVQcmljZQkAZAIFGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQ1zdGFydE1pbnV0ZUlkBQhtYXhJbmRleAUOc3RhcnRMYXN0UHJpY2UJAGkCCQBlAgUSbm93Q3VtdWxhdGl2ZVByaWNlBRRzdGFydEN1bXVsYXRpdmVQcmljZQUNVFdBUF9JTlRFUlZBTAEQZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcCXzEEEGJhc2VBc3NldFJlc2VydmUJAQZic0FzdFIABBRuZXdRdW90ZUFzc2V0UmVzZXJ2ZQkBBG11bGQCBRBiYXNlQXNzZXRSZXNlcnZlBQZfcHJpY2UEBGNvc3QICQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwUFDV9wb3NpdGlvblNpemUFFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQUUbmV3UXVvdGVBc3NldFJlc2VydmUFEGJhc2VBc3NldFJlc2VydmUFD1BOTF9PUFRJT05fU1BPVAJfMgkAlAoCBRRuZXdRdW90ZUFzc2V0UmVzZXJ2ZQUEY29zdAEKZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDXNwb3RUd2FwUHJpY2UJARBnZXRUd2FwU3BvdFByaWNlAAQHcHJlbWl1bQkAZQIFDXNwb3RUd2FwUHJpY2UFD3VuZGVybHlpbmdQcmljZQMDCQAAAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAAAGCQAAAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAAAkAlAoCAAAAAAMJAGYCAAAFB3ByZW1pdW0EFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJARV0b3RhbExvbmdQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAQ51cGRhdGVTZXR0aW5ncwkQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkBQNuaWwBDXVwZGF0ZUZ1bmRpbmcFEV9uZXh0RnVuZGluZ0Jsb2NrJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sb25nRnVuZGluZ1JhdGURX3Nob3J0RnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfbmV4dEZ1bmRpbmdCbG9jawURX25leHRGdW5kaW5nQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbG9uZ0Z1bmRpbmdSYXRlBRBfbG9uZ0Z1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3Nob3J0RnVuZGluZ1JhdGUFEV9zaG9ydEZ1bmRpbmdSYXRlBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBQhfYWRkcmVzcwVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzBQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQNuaWwBCmFwcGVuZFR3YXABBXByaWNlBAhtaW51dGVJZAkAaQIJAGkCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcADoBwA8BBBwcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAADCQBmAgUQcHJldmlvdXNNaW51dGVJZAUIbWludXRlSWQJAAIBAhFUV0FQIG91dC1vZi1vcmRlcgQMbGFzdE1pbnV0ZUlkAwkAAAIFEHByZXZpb3VzTWludXRlSWQAAAUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQDCQBmAgUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQFBXByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQlwcmV2UHJpY2UEBGxpc3QJAQtwdXNoVG9RdWV1ZQMJAQlzdHJUb0xpc3QBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAUNVFdBUF9JTlRFUlZBTAkApAMBBQhtaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUIbWludXRlSWQFE2xhc3RDdW11bGF0aXZlUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUIbWludXRlSWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19sYXN0TWludXRlSWQFCG1pbnV0ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfbGFzdERhdGFTdHIJAQlsaXN0VG9TdHIBBQRsaXN0BQNuaWwEGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAAABBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFBXByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQlwcmV2UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQVwcmljZQUDbmlsARF1cGRhdGVBbW1SZXNlcnZlcwIHX3F0QXN0UgdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFIFA25pbAEJdXBkYXRlQW1tBwdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIYX2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyFV9vcGVuSW50ZXJlc3ROb3Rpb25hbBZfdG90YWxMb25nUG9zaXRpb25TaXplF190b3RhbFNob3J0UG9zaXRpb25TaXplAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRrX2N1bXVsYXRpdmVOb3Rpb25hbAUYX2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBQNuaWwJAQphcHBlbmRUd2FwAQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSAQ5kZWxldGVQb3NpdGlvbgEIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRRrX3Bvc2l0aW9uQ2xvc2VkRGF0ZQUIX2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwUAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhpJbnZhbGlkIHRvZ2dsZVBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIaSW52YWxpZCB0b2dnbGVQYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBwUDbmlsAWkBDGFkZExpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIbSW52YWxpZCBhZGRMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBXByaWNlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEFGJhc2VBc3NldEFtb3VudFRvQWRkCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGQCBQdfYnNBc3RSBRRiYXNlQXNzZXRBbW91bnRUb0FkZAkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBD3JlbW92ZUxpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIeSW52YWxpZCByZW1vdmVMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBXByaWNlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBDmNoYW5nZVNldHRpbmdzCRBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncwkFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkAWkBCmluaXRpYWxpemUOB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQdfb3JhY2xlCl9vcmFjbGVLZXkMX2Nvb3JkaW5hdG9yDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZAMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkBC2luaXRpYWxpemVkAAkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0HBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzCQUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQJAQ11cGRhdGVGdW5kaW5nBQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUFa19vcmEFB19vcmFjbGUJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa19vcmFfa2V5BQpfb3JhY2xlS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IFA25pbAFpARJzZXRJbml0TWFyZ2luUmF0aW8BEF9pbml0TWFyZ2luUmF0aW8DAwkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECJUludmFsaWQgc2V0SW5pdE1hcmdpblJhdGlvIHBhcmFtZXRlcnMJAQ51cGRhdGVTZXR0aW5ncwkFEF9pbml0TWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQEQZnVuZGluZ1BlcmlvZFJhdwAJAQNmZWUACQELc3ByZWFkTGltaXQACQEObWF4UHJpY2VJbXBhY3QACQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEObWF4UHJpY2VTcHJlYWQAAWkBEGRlY3JlYXNlUG9zaXRpb24DB19hbW91bnQJX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEGcGF1c2VkAAkAAgECI0ludmFsaWQgZGVjcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDAzNzMzMTM3NDgzCQELZ2V0UG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzczMzEzNzQ4MwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzNzMzMTM3NDgzAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDM3MzMxMzc0ODMCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzczMzEzNzQ4MwJfNAQKX2RpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUJRElSX1NIT1JUBQhESVJfTE9ORwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwMzc2NTYzNzc3MgkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDM3NjU2Mzc3NzICXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAzNzY1NjM3NzcyAl8yBA0kdDAzNzc3ODQwMzI3AwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAQNJHQwMzgxNTUzODM3NAkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDM4MTU1MzgzNzQCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzODE1NTM4Mzc0Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzODE1NTM4Mzc0Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzgxNTUzODM3NAJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAzODE1NTM4Mzc0Al81BBhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzBwkAAgEJAKwCAgkArAICCQCsAgICJVRvbyBsaXR0bGUgYmFzZSBhc3NldCBleGNoYW5nZWQsIGdvdCAJAKQDAQUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzAgogZXhwZWN0ZWQgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQEC3JlYWxpemVkUG5sCQEEZGl2ZAIJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDAzODgxMTM5MDU2CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMzg4MTEzOTA1NgJfMQQHYmFkRGVidAgFDSR0MDM4ODExMzkwNTYCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwMzg4MTEzOTA1NgJfMwQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUMb3Blbk5vdGlvbmFsBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQCdCgsFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDAzNzc3ODQwMzI3Al8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDM3Nzc4NDAzMjcCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzc3Nzg0MDMyNwJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDAzNzc3ODQwMzI3Al80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzNzc3ODQwMzI3Al81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzc3Nzg0MDMyNwJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDM3Nzc4NDAzMjcCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMzc3Nzg0MDMyNwJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDM3Nzc4NDAzMjcCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwMzc3Nzg0MDMyNwNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDM3Nzc4NDAzMjcDXzExBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQEOdXBkYXRlUG9zaXRpb24FCQClCAEIBQFpBmNhbGxlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBpbmNyZWFzZVBvc2l0aW9uBApfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rBApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnF1b3RlQXNzZXQABgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBAxyYXdGZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAkBA2ZlZQAEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAhVhY2NlcHRQYXltZW50V2l0aExpbmsJAMwIAgUHX3RyYWRlcgkAzAgCBQhfcmVmTGluawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDHJhd0ZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUEB19hbW91bnQJAGUCBQpfcmF3QW1vdW50BQxyYXdGZWVBbW91bnQECWZlZUFtb3VudAkAZQIFDHJhd0ZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDQxODU2NDE5OTYJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDQxODU2NDE5OTYCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNDE4NTY0MTk5NgJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA0MTg1NjQxOTk2Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDQxODU2NDE5OTYCXzQEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA0MjI4NTQ0ODUzAwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNDI3MDk0MjkxNQkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDQyNzA5NDI5MTUCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0MjcwOTQyOTE1Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0MjcwOTQyOTE1Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNDI3MDk0MjkxNQJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA0MjcwOTQyOTE1Al81AwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgMgPCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQEGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQJAQRkaXZkAgUMb3Blbk5vdGlvbmFsBQlfbGV2ZXJhZ2UEDSR0MDQzMjk2NDM1MzUJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQEDHJlbWFpbk1hcmdpbggFDSR0MDQzMjk2NDM1MzUCXzEEAngxCAUNJHQwNDMyOTY0MzUzNQJfMgQCeDIIBQ0kdDA0MzI5NjQzNTM1Al8zAwkBASEBCQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAAgECFU92ZXIgbWF4IHNwcmVhZCBsaW1pdAkAnQoLBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkAZAIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQBkAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBkAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAkAZAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAABAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA0NDU0NjQ0NjYyCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCCQClCAEIBQFpBmNhbGxlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNDQ1NDY0NDY2MgJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDQ0NTQ2NDQ2NjICXzIDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQACAQIuVXNlIGRlY3JlYXNlUG9zaXRpb24gdG8gZGVjcmVhc2UgcG9zaXRpb24gc2l6ZQkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDA0MjI4NTQ0ODUzAl8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDQyMjg1NDQ4NTMCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDIyODU0NDg1MwJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDA0MjI4NTQ0ODUzAl80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0MjI4NTQ0ODUzAl81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDIyODU0NDg1MwJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQyMjg1NDQ4NTMCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNDIyODU0NDg1MwJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDQyMjg1NDQ4NTMCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNDIyODU0NDg1MwNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDQyMjg1NDQ4NTMDXzExBAxmZWVUb1N0YWtlcnMJAGkCBQlmZWVBbW91bnQAAgQOZmVlVG9JbnN1cmFuY2UJAGUCBQlmZWVBbW91bnQFDGZlZVRvU3Rha2VycwQFc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIObG9ja05ldXRyaW5vU1AJAMwIAgkApQgBCQEOc3Rha2luZ0FkZHJlc3MACQDMCAIFCEFMTF9GRUVTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4ABApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDAwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnF1b3RlQXNzZXQABgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAhxJbnZhbGlkIGFkZE1hcmdpbiBwYXJhbWV0ZXJzBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQMcmF3RmVlQW1vdW50CQEEbXVsZAIFCl9yYXdBbW91bnQJAQNmZWUABA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAINYWNjZXB0UGF5bWVudAkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUMcmF3RmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUMcmF3RmVlQW1vdW50BQtyZWZlcnJlckZlZQQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFDHJhd0ZlZUFtb3VudAQNJHQwNDY3NDY0Njg4NgkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNDY3NDY0Njg4NgJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA0Njc0NjQ2ODg2Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQ2NzQ2NDY4ODYCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNDY3NDY0Njg4NgJfNAQMZmVlVG9TdGFrZXJzCQBpAgUJZmVlQW1vdW50AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUJZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMEBXN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDmxvY2tOZXV0cmlub1NQCQDMCAIJAKUIAQkBDnN0YWtpbmdBZGRyZXNzAAkAzAgCBQhBTExfRkVFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgURb2xkUG9zaXRpb25NYXJnaW4FB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgEHX2Ftb3VudAMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDQ3OTExNDgwNjMJAQtnZXRQb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0NzkxMTQ4MDYzAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQ3OTExNDgwNjMCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDc5MTE0ODA2MwJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0NzkxMTQ4MDYzAl80BAttYXJnaW5EZWx0YQkBAS0BBQdfYW1vdW50BA0kdDA0ODEwMDQ4Mjc5CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQttYXJnaW5EZWx0YQQMcmVtYWluTWFyZ2luCAUNJHQwNDgxMDA0ODI3OQJfMQQHYmFkRGVidAgFDSR0MDQ4MTAwNDgyNzkCXzIDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEB3Vuc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIOdW5sb2NrTmV1dHJpbm8JAMwIAgUHX2Ftb3VudAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUJAKUIAQgFAWkGY2FsbGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgAEBmNhbGxlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkEDWNhbGxlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQZjYWxsZXICDkludmFsaWQgY2FsbGVyAwMDCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNDk0ODI0OTg1OQkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFBmNhbGxlcgYEAngxCAUNJHQwNDk0ODI0OTg1OQJfMQQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNDk0ODI0OTg1OQJfMgQLcmVhbGl6ZWRQbmwIBQ0kdDA0OTQ4MjQ5ODU5Al8zBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNDk0ODI0OTg1OQJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ5NDgyNDk4NTkCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ5NDgyNDk4NTkCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0OTQ4MjQ5ODU5Al83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDQ5NDgyNDk4NTkCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA0OTQ4MjQ5ODU5Al85BAJ4MggFDSR0MDQ5NDgyNDk4NTkDXzEwBA50b3RhbExvbmdBZnRlcggFDSR0MDQ5NDgyNDk4NTkDXzExBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA0OTQ4MjQ5ODU5A18xMgMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAkAAgECJlVuYWJsZSB0byBjbG9zZSBwb3NpdGlvbiB3aXRoIGJhZCBkZWJ0BA53aXRoZHJhd0Ftb3VudAkBA2FicwEFDW1hcmdpblRvVmF1bHQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABQ53aXRoZHJhd0Ftb3VudAQNJHQwNTAwNjg1MDIxMAMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDWFtbU5ld0JhbGFuY2UIBQ0kdDA1MDA2ODUwMjEwAl8xBBBnZXRGcm9tSW5zdXJhbmNlCAUNJHQwNTAwNjg1MDIxMAJfMgQBeAMJAGYCBRBnZXRGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgUQZ2V0RnJvbUluc3VyYW5jZQUDbmlsBQNuaWwDCQAAAgURd2l0aGRyYXdJbnN1cmFuY2UFEXdpdGhkcmF3SW5zdXJhbmNlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQF4BQF4BAd1bnN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDnVubG9ja05ldXRyaW5vCQDMCAIJAGUCBQ53aXRoZHJhd0Ftb3VudAUQZ2V0RnJvbUluc3VyYW5jZQkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFBmNhbGxlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDmRlbGV0ZVBvc2l0aW9uAQUGY2FsbGVyCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBCHdpdGhkcmF3AgUNY2FsbGVyQWRkcmVzcwUOd2l0aGRyYXdBbW91bnQJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUBB190cmFkZXIED3Nwb3RNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEC21hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQMDAwkAZgIFD3Nwb3RNYXJnaW5SYXRpbwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABwkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAcEDSR0MDUyMjkwNTI0NDAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDUyMjkwNTI0NDACXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTIyOTA1MjQ0MAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1MjI5MDUyNDQwAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDUyMjkwNTI0NDACXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUEDSR0MDUyNjY1NTI3NjkJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDUyNjY1NTI3NjkCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA1MjY2NTUyNzY5Al8yBA0kdDA1Mjc3NzUzMDY3CQEJc3dhcElucHV0AgUFaXNBZGQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDUyNzc3NTMwNjcCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1Mjc3NzUzMDY3Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1Mjc3NzUzMDY3Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTI3Nzc1MzA2NwJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA1Mjc3NzUzMDY3Al81BAtyZWFsaXplZFBubAkBBGRpdmQCCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDUzMTc0NTM0MDcJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA1MzE3NDUzNDA3Al8xBAdiYWREZWJ0CAUNJHQwNTMxNzQ1MzQwNwJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA1MzE3NDUzNDA3Al8zBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBA5mZWVUb0luc3VyYW5jZQkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBBFuZXdQb3NpdGlvbk1hcmdpbgkAZQIFDHJlbWFpbk1hcmdpbgUSbGlxdWlkYXRpb25QZW5hbHR5BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDU0NTgwNTQ3MjMDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwNTQ1ODA1NDcyMwJfMQQRdGFrZUZyb21JbnN1cmFuY2UIBQ0kdDA1NDU4MDU0NzIzAl8yBAF4AwkAZgIFEXRha2VGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgURdGFrZUZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BRF0YWtlRnJvbUluc3VyYW5jZQkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDU2MTc5NTY2MzQJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQdfdHJhZGVyBwQCeDEIBQ0kdDA1NjE3OTU2NjM0Al8xBAdiYWREZWJ0CAUNJHQwNTYxNzk1NjYzNAJfMgQCeDIIBQ0kdDA1NjE3OTU2NjM0Al8zBAJ4MwgFDSR0MDU2MTc5NTY2MzQCXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjE3OTU2NjM0Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjE3OTU2NjM0Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTYxNzk1NjYzNAJfNwQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA1NjE3OTU2NjM0Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTYxNzk1NjYzNAJfOQQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDU2MTc5NTY2MzQDXzEwBA50b3RhbExvbmdBZnRlcggFDSR0MDU2MTc5NTY2MzQDXzExBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1NjE3OTU2NjM0A18xMgQSbGlxdWlkYXRpb25QZW5hbHR5CQEEbXVsZAIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDU3MDQ2NTcxODkDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwNTcwNDY1NzE4OQJfMQQRdGFrZUZyb21JbnN1cmFuY2UIBQ0kdDA1NzA0NjU3MTg5Al8yBAF4AwkAZgIFEXRha2VGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgURdGFrZUZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BRF0YWtlRnJvbUluc3VyYW5jZQkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAADAwMJAGYCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAIBQlsYXN0QmxvY2sJdGltZXN0YW1wBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXACAyA8IAkApAMBBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDSR0MDU4Njg0NTg3NDYJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA1ODY4NDU4NzQ2Al8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNTg2ODQ1ODc0NgJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQFpAQ5mb3JjZU1vdmVBc3NldAIHX3RyYWRlcgdfYW1vdW50AwMJAQIhPQIJAKcIAQkBDmFkbWluUHVibGljS2V5AAgFAWkGY2FsbGVyBgkAZgIAAAUHX2Ftb3VudAkAAgECIUludmFsaWQgZm9yY2VNb3ZlQXNzZXQgcGFyYW1ldGVycwQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCBQdfYW1vdW50CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJAQh3aXRoZHJhdwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB190cmFkZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRqdXN0UGVnAQZfcHJpY2UDAwkBAiE9AgkApwgBCQEOYWRtaW5QdWJsaWNLZXkACAUBaQZjYWxsZXIGCQBmAgAABQZfcHJpY2UJAAIBAhxJbnZhbGlkIGFkanVzdFBlZyBwYXJhbWV0ZXJzBA0kdDA1OTc0NjU5ODMyCQEQZ2V0UGVnQWRqdXN0Q29zdAEFBl9wcmljZQQUbmV3UXVvdGVBc3NldFJlc2VydmUIBQ0kdDA1OTc0NjU5ODMyAl8xBA1wZWdDaGFuZ2VDb3N0CAUNJHQwNTk3NDY1OTgzMgJfMgMJAAACBQ1wZWdDaGFuZ2VDb3N0AAAJAAIBAhFOb3RoaW5nIHRvIGFkanVzdAMJAGYCBQ1wZWdDaGFuZ2VDb3N0AAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgUNcGVnQ2hhbmdlQ29zdAUDbmlsBQNuaWwDCQAAAgURd2l0aGRyYXdJbnN1cmFuY2UFEXdpdGhkcmF3SW5zdXJhbmNlBAVzdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg5sb2NrTmV1dHJpbm9TUAkAzAgCCQClCAEJAQ5zdGFraW5nQWRkcmVzcwAJAMwIAgUIQUxMX0ZFRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ1wZWdDaGFuZ2VDb3N0BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlCQDOCAIJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFDXBlZ0NoYW5nZUNvc3QJARF1cGRhdGVBbW1SZXNlcnZlcwIFFG5ld1F1b3RlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCCQEDYWJzAQUNcGVnQ2hhbmdlQ29zdAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQACQEDYWJzAQUNcGVnQ2hhbmdlQ29zdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UJAM4IAgkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkBCGNiYWxhbmNlAAkBA2FicwEFDXBlZ0NoYW5nZUNvc3QJARF1cGRhdGVBbW1SZXNlcnZlcwIFFG5ld1F1b3RlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQV2X2dldAEHX3RyYWRlcgQNJHQwNjEwNTc2MTExNwkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIHBAJ4MQgFDSR0MDYxMDU3NjExMTcCXzEEAngyCAUNJHQwNjEwNTc2MTExNwJfMgQCeDMIBQ0kdDA2MTA1NzYxMTE3Al8zBAJ4NAgFDSR0MDYxMDU3NjExMTcCXzQJAAIBCQCsAgIJAKwCAgkArAICCQEBcwEFAngyCQEBcwEFAngzCQEBcwEFAng0CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AQdfdHJhZGVyBA0kdDA2MTI2NDYxMzc1CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDA2MTI2NDYxMzc1Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDYxMjY0NjEzNzUCXzIEA3BvbggFDSR0MDYxMjY0NjEzNzUCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjEyNjQ2MTM3NQJfNAQNJHQwNjEzODA2MTQ4MQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwNjEzODA2MTQ4MQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDYxMzgwNjE0ODECXzIEDSR0MDYxNDg2NjE2NjgJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDYxNDg2NjE2NjgCXzEEB2JhZERlYnQIBQ0kdDA2MTQ4NjYxNjY4Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDYxNDg2NjE2NjgCXzMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAFpARV2aWV3X2dldFBlZ0FkanVzdENvc3QBBl9wcmljZQQEY29zdAkBEGdldFBlZ0FkanVzdENvc3QBBQZfcHJpY2UJAAIBCQCkAwEIBQRjb3N0Al8yAWkBD3ZpZXdfZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDSR0MDYyMDU5NjIxMjEJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA2MjA1OTYyMTIxAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNjIwNTk2MjEyMQJfMgQLbG9uZ0Z1bmRpbmcJAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlBAxzaG9ydEZ1bmRpbmcJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgEJAKwCAgkArAICCQCsAgIJAQFzAQULbG9uZ0Z1bmRpbmcJAQFzAQUMc2hvcnRGdW5kaW5nCQEBcwEJARBnZXRUd2FwU3BvdFByaWNlAAkBAXMBCQESZ2V0T3JhY2xlVHdhcFByaWNlAAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQ5hZG1pblB1YmxpY0tleQAImkqf", "height": 3304566, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FwAW1vFaokWfPFPXEzWvovAB6CVTCAp3gyrnGjQ6M9QJ Next: CZrScXhttsa7yKGErE8yeB3Wy54yqmR34Q9KnWjmkLnV Diff:
OldNewDifferences
1717
1818 let h = "k_positionFraction"
1919
20-let i = "k_initialized"
20+let i = "k_positionClosedDate"
2121
22-let j = "k_paused"
22+let j = "k_initialized"
2323
24-let k = "k_fee"
24+let k = "k_paused"
2525
26-let l = "k_fundingPeriod"
26+let l = "k_fee"
2727
28-let m = "k_initMarginRatio"
28+let m = "k_fundingPeriod"
2929
30-let n = "k_mmr"
30+let n = "k_initMarginRatio"
3131
32-let o = "k_liquidationFeeRatio"
32+let o = "k_mmr"
3333
34-let p = "k_partLiquidationRatio"
34+let p = "k_liquidationFeeRatio"
3535
36-let q = "k_spreadLimit"
36+let q = "k_partLiquidationRatio"
3737
38-let r = "k_maxPriceImpact"
38+let r = "k_spreadLimit"
3939
40-let s = "k_maxPriceSpread"
40+let s = "k_maxPriceImpact"
4141
42-let t = "k_lastDataStr"
42+let t = "k_maxPriceSpread"
4343
44-let u = "k_lastMinuteId"
44+let u = "k_lastDataStr"
4545
46-let v = "k_twapDataLastCumulativePrice"
46+let v = "k_lastMinuteId"
4747
48-let w = "k_twapDataLastPrice"
48+let w = "k_twapDataLastCumulativePrice"
4949
50-let x = "k_twapDataPreviousMinuteId"
50+let x = "k_twapDataLastPrice"
5151
52-let y = "k_latestLongPremiumFraction"
52+let y = "k_twapDataPreviousMinuteId"
5353
54-let z = "k_latestShortPremiumFraction"
54+let z = "k_latestLongPremiumFraction"
5555
56-let A = "k_nextFundingBlockMinTimestamp"
56+let A = "k_latestShortPremiumFraction"
5757
58-let B = "k_longFundingRate"
58+let B = "k_nextFundingBlockMinTimestamp"
5959
60-let C = "k_shortFundingRate"
60+let C = "k_longFundingRate"
6161
62-let D = "k_qtAstR"
62+let D = "k_shortFundingRate"
6363
64-let E = "k_bsAstR"
64+let E = "k_qtAstR"
6565
66-let F = "k_totalPositionSize"
66+let F = "k_bsAstR"
6767
68-let G = "k_totalLongPositionSize"
68+let G = "k_totalPositionSize"
6969
70-let H = "k_totalShortPositionSize"
70+let H = "k_totalLongPositionSize"
7171
72-let I = "k_cumulativeNotional"
72+let I = "k_totalShortPositionSize"
7373
74-let J = "k_openInterestNotional"
74+let J = "k_cumulativeNotional"
7575
76-let K = "k_coordinatorAddress"
76+let K = "k_openInterestNotional"
7777
78-let L = "k_insurance_address"
78+let L = "k_coordinatorAddress"
7979
80-let M = "k_admin_address"
80+let M = "k_insurance_address"
8181
82-let N = "k_admin_public_key"
82+let N = "k_admin_address"
8383
84-let O = "k_quote_asset"
84+let O = "k_admin_public_key"
8585
86-let P = "k_quote_staking"
86+let P = "k_quote_asset"
8787
88-let Q = "k_staking_address"
88+let Q = "k_quote_staking"
8989
90-let R = "k_miner_address"
90+let R = "k_staking_address"
9191
92-func S () = valueOrErrorMessage(addressFromString(getStringValue(this, K)), "Coordinator not set")
92+let S = "k_miner_address"
93+
94+let T = "k_orders_address"
95+
96+let U = "k_referral_address"
97+
98+func V () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
9399
94100
95-func T () = addressFromString(getStringValue(S(), M))
101+func W () = addressFromString(getStringValue(V(), N))
96102
97103
98-func U () = fromBase58String(getStringValue(S(), N))
104+func X () = fromBase58String(getStringValue(V(), O))
99105
100106
101-func V () = fromBase58String(getStringValue(S(), O))
107+func Y () = fromBase58String(getStringValue(V(), P))
102108
103109
104-func W () = valueOrErrorMessage(addressFromString(getStringValue(S(), P)), "Quote asset staking not set")
110+func Z () = valueOrErrorMessage(addressFromString(getStringValue(V(), Q)), "Quote asset staking not set")
105111
106112
107-func X () = valueOrErrorMessage(addressFromString(getStringValue(S(), Q)), "Insurance not set")
113+func aa () = valueOrErrorMessage(addressFromString(getStringValue(V(), R)), "Staking not set")
108114
109115
110-func Y () = valueOrErrorMessage(addressFromString(getStringValue(S(), L)), "Insurance not set")
116+func ab () = valueOrErrorMessage(addressFromString(getStringValue(V(), M)), "Insurance not set")
111117
112118
113-func Z () = valueOrErrorMessage(addressFromString(getStringValue(S(), R)), "Insurance not set")
119+func ac () = valueOrErrorMessage(addressFromString(getStringValue(V(), S)), "Miner not set")
114120
115121
116-let aa = 1
117-
118-let ab = 2
119-
120-let ac = 15
121-
122-let ad = 15
123-
124-let ae = 1000
125-
126-let af = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
127-
128-let ag = (86400 * af)
129-
130-let ah = 100
131-
132-let ai = 1
133-
134-let aj = 2
135-
136-func ak (al) = (toString(al) + ",")
122+func ad () = valueOrErrorMessage(addressFromString(getStringValue(V(), T)), "Orders not set")
137123
138124
139-func am (al,an) = fraction(al, af, an, HALFEVEN)
125+func ae () = valueOrErrorMessage(addressFromString(getStringValue(V(), U)), "Referral not set")
140126
141127
142-func ao (al,an) = fraction(al, an, af, HALFEVEN)
128+let af = 1
129+
130+let ag = 2
131+
132+let ah = 15
133+
134+let ai = 15
135+
136+let aj = 1000
137+
138+let ak = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
139+
140+let al = (86400 * ak)
141+
142+let am = 100
143+
144+let an = 1
145+
146+let ao = 2
147+
148+func ap (aq) = (toString(aq) + ",")
143149
144150
145-func ap (al) = if ((al > 0))
146- then al
147- else -(al)
151+func ar (aq,as) = fraction(aq, ak, as, HALFEVEN)
148152
149153
150-func aq (al,an) = if ((al >= an))
151- then al
152- else an
154+func at (aq,as) = fraction(aq, as, ak, HALFEVEN)
153155
154156
155-func ar (as,at) = ((as + "_") + at)
157+func au (aq) = if ((aq > 0))
158+ then aq
159+ else -(aq)
156160
157161
158-func au (av) = {
159- func aw (ax,ay) = ((ax + ay) + ",")
162+func av (aq,as) = if ((aq >= as))
163+ then aq
164+ else as
160165
161- let az = {
162- let aA = av
163- let aB = size(aA)
164- let aC = ""
165- func aD (aE,aF) = if ((aF >= aB))
166- then aE
167- else aw(aE, aA[aF])
168166
169- func aG (aE,aF) = if ((aF >= aB))
170- then aE
167+func aw (ax,ay) = ((ax + "_") + ay)
168+
169+
170+func az (aA) = {
171+ func aB (aC,aD) = ((aC + aD) + ",")
172+
173+ let aE = {
174+ let aF = aA
175+ let aG = size(aF)
176+ let aH = ""
177+ func aI (aJ,aK) = if ((aK >= aG))
178+ then aJ
179+ else aB(aJ, aF[aK])
180+
181+ func aL (aJ,aK) = if ((aK >= aG))
182+ then aJ
171183 else throw("List size exceeds 20")
172184
173- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
185+ aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
174186 }
175- let aH = dropRight(az, 1)
176- let aI = if ((take(aH, 1) == ","))
177- then drop(aH, 1)
178- else aH
179- aI
187+ let aM = dropRight(aE, 1)
188+ let aN = if ((take(aM, 1) == ","))
189+ then drop(aM, 1)
190+ else aM
191+ aN
180192 }
181193
182194
183-func aJ (aK) = split(aK, ",")
195+func aO (aP) = split(aP, ",")
184196
185197
186-func aL (av,aM,aN) = if ((size(av) > aM))
187- then (removeByIndex(av, 0) :+ aN)
188- else (av :+ aN)
198+func aQ (aA,aR,aS) = if ((size(aA) > aR))
199+ then (removeByIndex(aA, 0) :+ aS)
200+ else (aA :+ aS)
189201
190202
191-func aO (aP) = valueOrErrorMessage(getInteger(this, aP), ("no value for " + aP))
203+func aT (aU) = valueOrErrorMessage(getInteger(this, aU), ("no value for " + aU))
192204
193205
194-func aQ () = aO(d)
206+func aV () = aT(d)
195207
196208
197-func aR () = aO(k)
209+func aW () = aT(l)
198210
199211
200-func aS () = aO(m)
212+func aX () = aT(n)
201213
202214
203-func aT () = aO(D)
215+func aY () = aT(E)
204216
205217
206-func aU () = aO(E)
218+func aZ () = aT(F)
207219
208220
209-func aV () = aO(F)
221+func ba () = aT(G)
210222
211223
212-func aW () = aO(I)
224+func bb () = aT(J)
213225
214226
215-func aX () = aO(J)
227+func bc () = aT(K)
216228
217229
218-func aY () = aO(A)
230+func bd () = aT(B)
219231
220232
221-func aZ () = aO(l)
233+func be () = aT(m)
222234
223235
224-func ba () = (aZ() * af)
236+func bf () = (be() * ak)
225237
226238
227-func bb () = (aZ() * ae)
239+func bg () = (be() * aj)
228240
229241
230-func bc () = aO(n)
242+func bh () = aT(o)
231243
232244
233-func bd () = aO(o)
245+func bi () = aT(p)
234246
235247
236-func be () = aO(p)
248+func bj () = aT(q)
237249
238250
239-func bf () = aO(q)
251+func bk () = aT(r)
240252
241253
242-func bg () = aO(r)
254+func bl () = aT(s)
243255
244256
245-func bh () = aO(s)
257+func bm () = aT(t)
246258
247259
248-func bi () = aO(y)
260+func bn () = aT(z)
249261
250262
251-func bj () = aO(z)
263+func bo () = aT(A)
252264
253265
254-func bk () = aO(H)
266+func bp () = aT(I)
255267
256268
257-func bl () = aO(G)
269+func bq () = aT(H)
258270
259271
260-func bm (bn,bo,bp) = {
261- let bq = (bn - bo)
262- if (if (bp)
263- then (0 > bq)
272+func br (bs) = valueOrElse(getString(ad(), "k_sender"), toString(bs.caller))
273+
274+
275+func bt (bu,bv,bw) = {
276+ let bx = (bu - bv)
277+ if (if (bw)
278+ then (0 > bx)
264279 else false)
265280 then throw("Invalid margin")
266- else if (if (!(bp))
267- then (bq >= 0)
281+ else if (if (!(bw))
282+ then (bx >= 0)
268283 else false)
269284 then throw("Invalid margin")
270285 else true
271286 }
272287
273288
274-func br (bs) = if ((bs == 0))
289+func by (bz) = if ((bz == 0))
275290 then throw("Should not be called with _positionSize == 0")
276- else if ((bs > 0))
277- then bi()
278- else bj()
291+ else if ((bz > 0))
292+ then bn()
293+ else bo()
279294
280295
281-func bt (bu) = {
282- let bv = getInteger(this, ar(e, bu))
283- let bw = bv
284- if ($isInstanceOf(bw, "Int"))
296+func bA (bB) = {
297+ let bC = getInteger(this, aw(e, bB))
298+ let bD = bC
299+ if ($isInstanceOf(bD, "Int"))
285300 then {
286- let bx = bw
287- $Tuple4(bx, getIntegerValue(this, ar(f, bu)), getIntegerValue(this, ar(g, bu)), getIntegerValue(this, ar(h, bu)))
301+ let bE = bD
302+ $Tuple4(bE, getIntegerValue(this, aw(f, bB)), getIntegerValue(this, aw(g, bB)), getIntegerValue(this, aw(h, bB)))
288303 }
289304 else $Tuple4(0, 0, 0, 0)
290305 }
291306
292307
293-func by (bu) = if ((bt(bu)._1 == 0))
308+func bF (bB) = if ((bA(bB)._1 == 0))
294309 then throw("No open position")
295310 else true
296311
297312
298-func bz () = valueOrElse(getBoolean(this, i), false)
313+func bG () = valueOrElse(getBoolean(this, j), false)
299314
300315
301-func bA () = valueOrElse(getBoolean(this, j), false)
316+func bH () = valueOrElse(getBoolean(this, k), false)
302317
303318
304-func bB (bC,bD,bE) = if (bC)
319+func bI (bJ,bK,bL) = if (bJ)
305320 then {
306- let bF = (aU() - bE)
307- if ((0 >= bF))
321+ let bM = (aZ() - bL)
322+ if ((0 >= bM))
308323 then throw("Tx lead to base asset reserve <= 0, revert")
309- else $Tuple4((aT() + bD), bF, (aV() + bE), (aW() + bD))
324+ else $Tuple4((aY() + bK), bM, (ba() + bL), (bb() + bK))
310325 }
311326 else {
312- let bG = (aT() - bD)
313- if ((0 >= bG))
327+ let bN = (aY() - bK)
328+ if ((0 >= bN))
314329 then throw("Tx lead to base quote reserve <= 0, revert")
315- else $Tuple4(bG, (aU() + bE), (aV() - bE), (aW() - bD))
330+ else $Tuple4(bN, (aZ() + bL), (ba() - bL), (bb() - bK))
316331 }
317332
318333
319-func bH (bC,bD) = {
320- let bI = aT()
321- let bJ = aU()
322- let aP = ao(bI, bJ)
323- let bK = if (bC)
324- then (bI + bD)
325- else (bI - bD)
326- let bL = am(aP, bK)
327- let bM = ap((bL - bJ))
328- let bN = if (bC)
329- then bM
330- else -(bM)
331- let bO = bB(bC, bD, bM)
332- let bP = bO._1
333- let bQ = bO._2
334- let bR = bO._3
335- let bS = bO._4
336- let bT = am(bI, bJ)
337- let bU = am(bD, bM)
338- let bV = ap((bT - bU))
339- let bW = (af - am(bT, (bT + bV)))
340- let bX = bg()
341- if ((bW > bX))
342- then throw(((((((((((((("Price impact " + toString(bW)) + " > max price impact ") + toString(bX)) + " before quote asset: ") + toString(bI)) + " before base asset: ") + toString(bJ)) + " quote asset amount to exchange: ") + toString(bD)) + " price before: ") + toString(bT)) + " marketPrice: ") + toString(bU)))
343- else $Tuple5(bN, bP, bQ, bR, bS)
334+func bO (bJ,bK) = {
335+ let bP = aY()
336+ let bQ = aZ()
337+ let aU = at(bP, bQ)
338+ let bR = if (bJ)
339+ then (bP + bK)
340+ else (bP - bK)
341+ let bS = ar(aU, bR)
342+ let bT = au((bS - bQ))
343+ let bU = if (bJ)
344+ then bT
345+ else -(bT)
346+ let bV = bI(bJ, bK, bT)
347+ let bW = bV._1
348+ let bX = bV._2
349+ let bY = bV._3
350+ let bZ = bV._4
351+ let ca = ar(bP, bQ)
352+ let cb = ar(bK, bT)
353+ let cc = au((ca - cb))
354+ let cd = (ak - ar(ca, (ca + cc)))
355+ let ce = bl()
356+ if ((cd > ce))
357+ then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(bP)) + " before base asset: ") + toString(bQ)) + " quote asset amount to exchange: ") + toString(bK)) + " price before: ") + toString(ca)) + " marketPrice: ") + toString(cb)))
358+ else $Tuple5(bU, bW, bX, bY, bZ)
344359 }
345360
346361
347-func bY (bZ,ca,cb,cc) = {
348- let cd = if ((bZ != 0))
362+func cf (cg,ch,ci,cj) = {
363+ let ck = if ((cg != 0))
349364 then {
350- let ce = br(bZ)
351- ao((ce - cb), bZ)
365+ let cl = by(cg)
366+ at((cl - ci), cg)
352367 }
353368 else 0
354- let cf = ((cc - cd) + ca)
355- let cg = if ((0 > cf))
356- then $Tuple2(0, ap(cf))
357- else $Tuple2(ap(cf), 0)
358- let ch = cg._1
359- let ci = cg._2
360- $Tuple3(ch, ci, cd)
369+ let cm = ((cj - ck) + ch)
370+ let cn = if ((0 > cm))
371+ then $Tuple2(0, au(cm))
372+ else $Tuple2(au(cm), 0)
373+ let co = cn._1
374+ let cp = cn._2
375+ $Tuple3(co, cp, ck)
361376 }
362377
363378
364-func cj (bC,bE,ck,cl,cm) = {
365- let bT = am(cl, cm)
366- if ((bE == 0))
379+func cq (bJ,bL,cr,cs,ct) = {
380+ let ca = ar(cs, ct)
381+ if ((bL == 0))
367382 then throw("Invalid base asset amount")
368383 else {
369- let aP = ao(cl, cm)
370- let cn = if (bC)
371- then (cm + bE)
372- else (cm - bE)
373- let co = am(aP, cn)
374- let cp = ap((co - cl))
375- let bX = bg()
376- let cq = bB(!(bC), cp, bE)
377- let bP = cq._1
378- let bQ = cq._2
379- let bR = cq._3
380- let bS = cq._4
381- let bU = am(cp, bE)
382- let bV = ap((bT - bU))
383- let bW = (af - am(bT, (bT + bV)))
384- if (if ((bW > bX))
385- then ck
384+ let aU = at(cs, ct)
385+ let cu = if (bJ)
386+ then (ct + bL)
387+ else (ct - bL)
388+ let cv = ar(aU, cu)
389+ let cw = au((cv - cs))
390+ let ce = bl()
391+ let cx = bI(!(bJ), cw, bL)
392+ let bW = cx._1
393+ let bX = cx._2
394+ let bY = cx._3
395+ let bZ = cx._4
396+ let cb = ar(cw, bL)
397+ let cc = au((ca - cb))
398+ let cd = (ak - ar(ca, (ca + cc)))
399+ if (if ((cd > ce))
400+ then cr
386401 else false)
387- then throw(((((((((((((("Price impact " + toString(bW)) + " > max price impact ") + toString(bX)) + " before quote asset: ") + toString(cl)) + " before base asset: ") + toString(cm)) + " base asset amount to exchange: ") + toString(bE)) + " price before: ") + toString(bT)) + " market price: ") + toString(bU)))
388- else $Tuple8(cp, bP, bQ, bR, bS, (bl() - (if (bC)
389- then ap(bE)
390- else 0)), (bk() - (if (!(bC))
391- then ap(bE)
392- else 0)), bW)
402+ then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(cs)) + " before base asset: ") + toString(ct)) + " base asset amount to exchange: ") + toString(bL)) + " price before: ") + toString(ca)) + " market price: ") + toString(cb)))
403+ else $Tuple8(cw, bW, bX, bY, bZ, (bq() - (if (bJ)
404+ then au(bL)
405+ else 0)), (bp() - (if (!(bJ))
406+ then au(bL)
407+ else 0)), cd)
393408 }
394409 }
395410
396411
397-func cr (bC,bE,ck) = cj(bC, bE, ck, aT(), aU())
412+func cy (bJ,bL,cr) = cq(bJ, bL, cr, aY(), aZ())
398413
399414
400-func cs () = {
401- let ct = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
402- let cu = getStringValue(this, a)
403- let cv = getStringValue(this, b)
404- let cw = valueOrErrorMessage(getInteger(ct, cu), ((("Can not get oracle price. Oracle: " + toString(ct)) + " key: ") + cu))
405- cw
415+func cz () = {
416+ let cA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
417+ let cB = getStringValue(this, a)
418+ let cC = getStringValue(this, b)
419+ let cD = valueOrErrorMessage(getInteger(cA, cB), ((("Can not get oracle price. Oracle: " + toString(cA)) + " key: ") + cB))
420+ cD
406421 }
407422
408423
409-func cx (cl,cm) = {
410- let cy = cs()
411- let cz = am(cl, cm)
412- let cA = am((cy + cz), (2 * af))
413- let cB = am(ap((cy - cz)), cA)
414- if ((cB > bh()))
415- then throw(((("Price spread " + toString(cB)) + " > max price spread ") + toString(bh())))
424+func cE (cs,ct) = {
425+ let cF = cz()
426+ let cG = ar(cs, ct)
427+ let cH = ar((cF + cG), (2 * ak))
428+ let cI = ar(au((cF - cG)), cH)
429+ if ((cI > bm()))
430+ then throw(((("Price spread " + toString(cI)) + " > max price spread ") + toString(bm())))
416431 else true
417432 }
418433
419434
420-func cC () = {
421- let cl = aT()
422- let cm = aU()
423- am(cl, cm)
435+func cJ () = {
436+ let cs = aY()
437+ let ct = aZ()
438+ ar(cs, ct)
424439 }
425440
426441
427-func cD () = {
428- let cy = cs()
429- let cE = cC()
430- (am(ap((cy - cE)), cy) > bf())
442+func cK () = {
443+ let cF = cz()
444+ let cL = cJ()
445+ (ar(au((cF - cL)), cF) > bk())
431446 }
432447
433448
434-func cF (bs,cG,cl,cm) = {
435- let cH = ap(bs)
436- let cI = (0 > bs)
437- let cJ = if ((cG == ai))
449+func cM (bz,cN,cs,ct) = {
450+ let cO = au(bz)
451+ let cP = (0 > bz)
452+ let cQ = if ((cN == an))
438453 then {
439- let cK = cj(!(cI), cH, false, cl, cm)
440- let cL = cK._1
441- let cM = cK._2
442- let cN = cK._3
443- let cO = cK._4
444- cL
454+ let cR = cq(!(cP), cO, false, cs, ct)
455+ let cS = cR._1
456+ let cT = cR._2
457+ let cU = cR._3
458+ let cV = cR._4
459+ cS
445460 }
446- else ao(cH, cs())
447- cJ
461+ else at(cO, cz())
462+ cQ
448463 }
449464
450465
451-func cP (bu,cG) = {
452- let cQ = bt(bu)
453- let bx = cQ._1
454- let cR = cQ._2
455- let cS = cQ._3
456- let cT = cQ._4
457- if ((bx == 0))
458- then throw("Invalid position size")
466+func cW (bz,cX,cs,ct,cN) = if ((bz == 0))
467+ then throw("Invalid position size")
468+ else {
469+ let cP = (0 > bz)
470+ let cQ = cM(bz, cN, cs, ct)
471+ let cY = if (cP)
472+ then (cX - cQ)
473+ else (cQ - cX)
474+ $Tuple2(cQ, cY)
475+ }
476+
477+
478+func cZ (bB,cN) = {
479+ let da = bA(bB)
480+ let bE = da._1
481+ let db = da._2
482+ let dc = da._3
483+ let dd = da._4
484+ cW(bE, dc, aY(), aZ(), cN)
485+ }
486+
487+
488+func de (df,dg,dh) = ar((df - dg), dh)
489+
490+
491+func di (bB,cN) = {
492+ let dj = bA(bB)
493+ let bE = dj._1
494+ let db = dj._2
495+ let dk = dj._3
496+ let dd = dj._4
497+ let dl = cZ(bB, cN)
498+ let cQ = dl._1
499+ let cY = dl._2
500+ let dm = cf(bE, db, dd, cY)
501+ let co = dm._1
502+ let cp = dm._2
503+ de(co, cp, cQ)
504+ }
505+
506+
507+func dn (bB) = di(bB, an)
508+
509+
510+func do (bB,bz) = {
511+ let dp = av(bj(), (ak - ar(dn(bB), bh())))
512+ let dq = at(au(bz), dp)
513+ let dr = cy((bz > 0), dq, false)
514+ let ds = dr._1
515+ let cd = dr._8
516+ if ((bl() > cd))
517+ then ds
459518 else {
460- let cI = (0 > bx)
461- let cJ = cF(bx, cG, aT(), aU())
462- let cU = if (cI)
463- then (cS - cJ)
464- else (cJ - cS)
465- $Tuple2(cJ, cU)
519+ let dt = at(au(bz), bj())
520+ let du = cy((bz > 0), dt, false)._1
521+ du
466522 }
467523 }
468524
469525
470-func cV (cW,cX,cY) = am((cW - cX), cY)
471-
472-
473-func cZ (bu,cG) = {
474- let da = bt(bu)
475- let bx = da._1
476- let cR = da._2
477- let db = da._3
478- let cT = da._4
479- let dc = cP(bu, cG)
480- let cJ = dc._1
481- let cU = dc._2
482- let dd = bY(bx, cR, cT, cU)
483- let ch = dd._1
484- let ci = dd._2
485- cV(ch, ci, cJ)
526+func dv (bB,cr) = {
527+ let dw = bA(bB)
528+ let bE = dw._1
529+ let db = dw._2
530+ let dc = dw._3
531+ let dd = dw._4
532+ let cY = cZ(bB, an)._2
533+ let dx = cf(bE, db, dd, cY)
534+ let co = dx._1
535+ let cp = dx._2
536+ let dt = -(bE)
537+ let dy = cY
538+ let dz = -(co)
539+ let dA = cy((bE > 0), au(bE), cr)
540+ let du = dA._1
541+ let bR = dA._2
542+ let bS = dA._3
543+ let dB = dA._4
544+ let dC = dA._5
545+ let dD = dA._6
546+ let dE = dA._7
547+ let dF = (bc() - dc)
548+ $Tuple12(dt, cp, dy, dz, bR, bS, dB, dC, dF, du, dD, dE)
486549 }
487550
488551
489-func de (bu) = cZ(bu, ai)
552+func dG () = {
553+ let dH = ((lastBlock.timestamp / 1000) / 60)
554+ let dI = (dH - ah)
555+ let dJ = valueOrElse(getString(this, u), "")
556+ let dK = split(dJ, ",")
557+ func dL (aC,dM) = if ((dI >= parseIntValue(dM)))
558+ then (aC :+ parseIntValue(dM))
559+ else aC
490560
561+ let dN = {
562+ let aF = dK
563+ let aG = size(aF)
564+ let aH = nil
565+ func aI (aJ,aK) = if ((aK >= aG))
566+ then aJ
567+ else dL(aJ, aF[aK])
491568
492-func df (bu,bs) = {
493- let dg = aq(be(), (af - am(de(bu), bc())))
494- let dh = ao(ap(bs), dg)
495- let di = cr((bs > 0), dh, false)
496- let dj = di._1
497- let bW = di._8
498- if ((bg() > bW))
499- then dj
500- else {
501- let dk = ao(ap(bs), be())
502- let dl = cr((bs > 0), dk, false)._1
503- dl
504- }
569+ func aL (aJ,aK) = if ((aK >= aG))
570+ then aJ
571+ else throw("List size exceeds 20")
572+
573+ aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
574+ }
575+ let dO = if ((size(dN) > 0))
576+ then max(dN)
577+ else parseIntValue(dK[0])
578+ let dP = valueOrElse(getInteger(this, v), 0)
579+ let dQ = valueOrElse(getInteger(this, ((w + "_") + toString(dP))), 0)
580+ let dR = valueOrElse(getInteger(this, ((x + "_") + toString(dP))), 0)
581+ let dS = (dQ + ((dH - dP) * dR))
582+ let dT = valueOrElse(getInteger(this, ((w + "_") + toString(dO))), 0)
583+ let dU = valueOrElse(getInteger(this, ((x + "_") + toString(dO))), 0)
584+ let dV = (dT + ((dI - dO) * dU))
585+ ((dS - dV) / ah)
505586 }
506587
507588
508-func dm (bu,ck) = {
509- let dn = bt(bu)
510- let bx = dn._1
511- let cR = dn._2
512- let cS = dn._3
513- let cT = dn._4
514- let cU = cP(bu, ai)._2
515- let do = bY(bx, cR, cT, cU)
516- let ch = do._1
517- let ci = do._2
518- let dk = -(bx)
519- let dp = cU
520- let dq = -(ch)
521- let dr = cr((bx > 0), ap(bx), ck)
522- let dl = dr._1
523- let bK = dr._2
524- let bL = dr._3
525- let ds = dr._4
526- let dt = dr._5
527- let du = dr._6
528- let dv = dr._7
529- let dw = (aX() - cS)
530- $Tuple12(dk, ci, dp, dq, bK, bL, ds, dt, dw, dl, du, dv)
589+func dW (dX) = {
590+ let bz = ba()
591+ let dY = (bz > 0)
592+ let dZ = cy(dY, au(bz), false)._1
593+ let ea = aZ()
594+ let eb = at(ea, dX)
595+ let ec = cW(bz, dZ, eb, ea, an)._2
596+ $Tuple2(eb, ec)
531597 }
532598
533599
534-func dx () = {
535- let dy = ((lastBlock.timestamp / 1000) / 60)
536- let dz = (dy - ac)
537- let dA = valueOrElse(getString(this, t), "")
538- let dB = split(dA, ",")
539- func dC (ax,dD) = if ((dz >= parseIntValue(dD)))
540- then (ax :+ parseIntValue(dD))
541- else ax
542-
543- let dE = {
544- let aA = dB
545- let aB = size(aA)
546- let aC = nil
547- func aD (aE,aF) = if ((aF >= aB))
548- then aE
549- else dC(aE, aA[aF])
550-
551- func aG (aE,aF) = if ((aF >= aB))
552- then aE
553- else throw("List size exceeds 20")
554-
555- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
556- }
557- let dF = if ((size(dE) > 0))
558- then max(dE)
559- else parseIntValue(dB[0])
560- let dG = valueOrElse(getInteger(this, u), 0)
561- let dH = valueOrElse(getInteger(this, ((v + "_") + toString(dG))), 0)
562- let dI = valueOrElse(getInteger(this, ((w + "_") + toString(dG))), 0)
563- let dJ = (dH + ((dy - dG) * dI))
564- let dK = valueOrElse(getInteger(this, ((v + "_") + toString(dF))), 0)
565- let dL = valueOrElse(getInteger(this, ((w + "_") + toString(dF))), 0)
566- let dM = (dK + ((dz - dF) * dL))
567- ((dJ - dM) / ac)
600+func ed () = {
601+ let ee = cz()
602+ let ef = dG()
603+ let eg = (ef - ee)
604+ if (if ((bp() == 0))
605+ then true
606+ else (bq() == 0))
607+ then $Tuple2(0, 0)
608+ else if ((0 > eg))
609+ then {
610+ let eh = ar(at(eg, bf()), al)
611+ let ei = ar(at(eh, bp()), bq())
612+ $Tuple2(eh, ei)
613+ }
614+ else {
615+ let ei = ar(at(eg, bf()), al)
616+ let eh = ar(at(ei, bq()), bp())
617+ $Tuple2(eh, ei)
618+ }
568619 }
569620
570621
571-func dN (dO,dP,dQ,dR,dS,dT,dU,dV,dW) = [IntegerEntry(m, dO), IntegerEntry(n, dP), IntegerEntry(o, dQ), IntegerEntry(l, dR), IntegerEntry(k, dS), IntegerEntry(q, dT), IntegerEntry(r, dU), IntegerEntry(p, dV), IntegerEntry(s, dW)]
622+func ej (ek,el,em,en,eo,ep,eq,er,es) = [IntegerEntry(n, ek), IntegerEntry(o, el), IntegerEntry(p, em), IntegerEntry(m, en), IntegerEntry(l, eo), IntegerEntry(r, ep), IntegerEntry(s, eq), IntegerEntry(q, er), IntegerEntry(t, es)]
572623
573624
574-func dX (dY,dZ,ea,eb,ec) = [IntegerEntry(A, dY), IntegerEntry(y, dZ), IntegerEntry(z, ea), IntegerEntry(B, eb), IntegerEntry(C, ec)]
625+func et (eu,ev,ew,ex,ey) = [IntegerEntry(B, eu), IntegerEntry(z, ev), IntegerEntry(A, ew), IntegerEntry(C, ex), IntegerEntry(D, ey)]
575626
576627
577-func ed (at,ee,ef,eg,ce) = [IntegerEntry(ar(e, at), ee), IntegerEntry(ar(f, at), ef), IntegerEntry(ar(g, at), eg), IntegerEntry(ar(h, at), ce)]
628+func ez (ay,eA,eB,eC,cl) = [IntegerEntry(aw(e, ay), eA), IntegerEntry(aw(f, ay), eB), IntegerEntry(aw(g, ay), eC), IntegerEntry(aw(h, ay), cl)]
578629
579630
580-func eh (ei) = {
581- let dy = ((lastBlock.timestamp / 1000) / 60)
582- let ej = valueOrElse(getInteger(this, u), 0)
583- if ((ej > dy))
631+func eD (eE) = {
632+ let dH = ((lastBlock.timestamp / 1000) / 60)
633+ let eF = valueOrElse(getInteger(this, v), 0)
634+ if ((eF > dH))
584635 then throw("TWAP out-of-order")
585636 else {
586- let dG = if ((ej == 0))
587- then dy
588- else ej
589- if ((dy > ej))
637+ let dP = if ((eF == 0))
638+ then dH
639+ else eF
640+ if ((dH > eF))
590641 then {
591- let ek = valueOrElse(getInteger(this, ((v + "_") + toString(ej))), 0)
592- let el = valueOrElse(getInteger(this, ((w + "_") + toString(ej))), ei)
593- let em = (ek + ((dy - dG) * el))
594- let dB = aL(aJ(valueOrElse(getString(this, t), "")), ac, toString(dy))
595-[IntegerEntry(ar(v, toString(dy)), em), IntegerEntry(ar(w, toString(dy)), ei), IntegerEntry(ar(x, toString(dy)), ej), IntegerEntry(u, dy), StringEntry(t, au(dB))]
642+ let eG = valueOrElse(getInteger(this, ((w + "_") + toString(eF))), 0)
643+ let eH = valueOrElse(getInteger(this, ((x + "_") + toString(eF))), eE)
644+ let eI = (eG + ((dH - dP) * eH))
645+ let dK = aQ(aO(valueOrElse(getString(this, u), "")), ah, toString(dH))
646+[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE), IntegerEntry(aw(y, toString(dH)), eF), IntegerEntry(v, dH), StringEntry(u, az(dK))]
596647 }
597648 else {
598- let en = valueOrElse(getInteger(this, ar(x, toString(dy))), 0)
599- let ek = valueOrElse(getInteger(this, ar(v, toString(en))), 0)
600- let el = valueOrElse(getInteger(this, ar(w, toString(en))), ei)
601- let em = (ek + ((dy - en) * el))
602-[IntegerEntry(ar(v, toString(dy)), em), IntegerEntry(ar(w, toString(dy)), ei)]
649+ let eJ = valueOrElse(getInteger(this, aw(y, toString(dH))), 0)
650+ let eG = valueOrElse(getInteger(this, aw(w, toString(eJ))), 0)
651+ let eH = valueOrElse(getInteger(this, aw(x, toString(eJ))), eE)
652+ let eI = (eG + ((dH - eJ) * eH))
653+[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE)]
603654 }
604655 }
605656 }
606657
607658
608-func eo (bI,bJ) = [IntegerEntry(D, bI), IntegerEntry(E, bJ)]
659+func eK (bP,bQ) = [IntegerEntry(E, bP), IntegerEntry(F, bQ)]
609660
610661
611-func ep (bI,bJ,eq,er,es,et,eu) = if (((et - eu) != eq))
612- then throw(((((("Invalid AMM state data: " + toString(et)) + " + ") + toString(eu)) + " != ") + toString(eq)))
613- else ((eo(bI, bJ) ++ [IntegerEntry(F, eq), IntegerEntry(I, er), IntegerEntry(J, es), IntegerEntry(G, et), IntegerEntry(H, eu)]) ++ eh(am(bI, bJ)))
662+func eL (bP,bQ,eM,eN,eO,eP,eQ) = if (((eP - eQ) != eM))
663+ then throw(((((("Invalid AMM state data: " + toString(eP)) + " + ") + toString(eQ)) + " != ") + toString(eM)))
664+ else ((eK(bP, bQ) ++ [IntegerEntry(G, eM), IntegerEntry(J, eN), IntegerEntry(K, eO), IntegerEntry(H, eP), IntegerEntry(I, eQ)]) ++ eD(ar(bP, bQ)))
614665
615666
616-func ev (at) = [DeleteEntry(ar(e, at)), DeleteEntry(ar(f, at)), DeleteEntry(ar(g, at)), DeleteEntry(ar(h, at))]
667+func eR (ay) = [DeleteEntry(aw(e, ay)), DeleteEntry(aw(f, ay)), DeleteEntry(aw(g, ay)), DeleteEntry(aw(h, ay)), IntegerEntry(aw(i, ay), lastBlock.timestamp)]
617668
618669
619-func ew (at,ex) = {
620- let ey = assetBalance(this, V())
621- if ((ex > ey))
622- then throw(((("Unable to withdraw " + toString(ex)) + " from contract balance ") + toString(ey)))
623- else [ScriptTransfer(at, ex, V())]
670+func eS (ay,eT) = {
671+ let eU = assetBalance(this, Y())
672+ if ((eT > eU))
673+ then throw(((("Unable to withdraw " + toString(eT)) + " from contract balance ") + toString(eU)))
674+ else [ScriptTransfer(ay, eT, Y())]
624675 }
625676
626677
627-func ez (eA) = if ((0 > eA))
678+func eV (bs) = if ((0 > bs))
628679 then throw("Balance")
629- else [IntegerEntry(d, eA)]
680+ else [IntegerEntry(d, bs)]
630681
631682
632-func eB (eA) = [ScriptTransfer(X(), eA, V())]
683+func eW (bs) = [ScriptTransfer(aa(), bs, Y())]
633684
634685
635-@Callable(eA)
636-func pause () = if ((eA.caller != T()))
686+@Callable(bs)
687+func pause () = if ((bs.caller != W()))
637688 then throw("Invalid togglePause params")
638- else [BooleanEntry(j, true)]
689+ else [BooleanEntry(k, true)]
639690
640691
641692
642-@Callable(eA)
643-func unpause () = if ((eA.caller != T()))
693+@Callable(bs)
694+func unpause () = if ((bs.caller != W()))
644695 then throw("Invalid togglePause params")
645- else [BooleanEntry(j, false)]
696+ else [BooleanEntry(k, false)]
646697
647698
648699
649-@Callable(eA)
650-func addLiquidity (bD) = if (if ((eA.caller != T()))
700+@Callable(bs)
701+func addLiquidity (bK) = if (if ((bs.caller != W()))
651702 then true
652- else (0 >= bD))
703+ else (0 >= bK))
653704 then throw("Invalid addLiquidity params")
654705 else {
655- let bI = aT()
656- let bJ = aU()
657- let ei = am(bI, bJ)
658- let eC = am(bD, ei)
659- let eD = (bI + bD)
660- let eE = (bJ + eC)
661- eo(eD, eE)
706+ let bP = aY()
707+ let bQ = aZ()
708+ let eE = ar(bP, bQ)
709+ let eX = ar(bK, eE)
710+ let eY = (bP + bK)
711+ let eZ = (bQ + eX)
712+ eK(eY, eZ)
662713 }
663714
664715
665716
666-@Callable(eA)
667-func removeLiquidity (bD) = if (if ((eA.caller != T()))
717+@Callable(bs)
718+func removeLiquidity (bK) = if (if ((bs.caller != W()))
668719 then true
669- else (0 >= bD))
720+ else (0 >= bK))
670721 then throw("Invalid removeLiquidity params")
671722 else {
672- let bI = aT()
673- let bJ = aU()
674- let ei = am(bI, bJ)
675- let eF = am(bD, ei)
676- let eD = (bI - bD)
677- let eE = (bJ - eF)
678- eo(eD, eE)
723+ let bP = aY()
724+ let bQ = aZ()
725+ let eE = ar(bP, bQ)
726+ let fa = ar(bK, eE)
727+ let eY = (bP - bK)
728+ let eZ = (bQ - fa)
729+ eK(eY, eZ)
679730 }
680731
681732
682733
683-@Callable(eA)
684-func changeSettings (dO,dP,dQ,dR,dS,dT,dU,dV,dW) = if ((eA.caller != T()))
734+@Callable(bs)
735+func changeSettings (ek,el,em,en,eo,ep,eq,er,es) = if ((bs.caller != W()))
685736 then throw("Invalid changeSettings params")
686- else dN(dO, dP, dQ, dR, dS, dT, dU, dV, dW)
737+ else ej(ek, el, em, en, eo, ep, eq, er, es)
687738
688739
689740
690-@Callable(eA)
691-func initialize (bI,bJ,dR,dO,dP,dQ,dS,eG,eH,eI,dT,dU,dV,dW) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bI))
741+@Callable(bs)
742+func initialize (bP,bQ,en,ek,el,em,eo,fb,fc,fd,ep,eq,er,es) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bP))
692743 then true
693- else (0 >= bJ))
744+ else (0 >= bQ))
694745 then true
695- else (0 >= dR))
746+ else (0 >= en))
696747 then true
697- else (0 >= dO))
748+ else (0 >= ek))
698749 then true
699- else (0 >= dP))
750+ else (0 >= el))
700751 then true
701- else (0 >= dQ))
752+ else (0 >= em))
702753 then true
703- else (0 >= dS))
754+ else (0 >= eo))
704755 then true
705- else (0 >= dT))
756+ else (0 >= ep))
706757 then true
707- else (0 >= dU))
758+ else (0 >= eq))
708759 then true
709- else (0 >= dV))
760+ else (0 >= er))
710761 then true
711- else (0 >= dW))
762+ else (0 >= es))
712763 then true
713- else bz())
764+ else bG())
714765 then throw("Invalid initialize parameters")
715- else ((((ep(bI, bJ, 0, 0, 0, 0, 0) ++ dN(dO, dP, dQ, dR, dS, dT, dU, dV, dW)) ++ dX((lastBlock.timestamp + dR), 0, 0, 0, 0)) ++ ez(0)) ++ [BooleanEntry(i, true), StringEntry(c, eG), StringEntry(a, eH), StringEntry(K, eI)])
766+ else ((((eL(bP, bQ, 0, 0, 0, 0, 0) ++ ej(ek, el, em, en, eo, ep, eq, er, es)) ++ et((lastBlock.timestamp + en), 0, 0, 0, 0)) ++ eV(0)) ++ [BooleanEntry(j, true), StringEntry(c, fb), StringEntry(a, fc), StringEntry(L, fd)])
716767
717768
718769
719-@Callable(eA)
720-func setInitMarginRatio (dO) = if (if ((0 >= dO))
770+@Callable(bs)
771+func setInitMarginRatio (ek) = if (if ((0 >= ek))
721772 then true
722- else !(bz()))
773+ else !(bG()))
723774 then throw("Invalid setInitMarginRatio parameters")
724- else dN(dO, bc(), bd(), aZ(), aR(), bf(), bg(), be(), bh())
775+ else ej(ek, bh(), bi(), be(), aW(), bk(), bl(), bj(), bm())
725776
726777
727778
728-@Callable(eA)
729-func decreasePosition (ex,eJ,eK) = if (if (if (if (if ((0 >= ex))
779+@Callable(bs)
780+func decreasePosition (eT,fe,ff) = if (if (if (if (if ((0 >= eT))
730781 then true
731- else !(bz()))
782+ else !(bG()))
732783 then true
733- else !(bm(am(af, eJ), aS(), true)))
784+ else !(bt(ar(ak, fe), aX(), true)))
734785 then true
735- else !(by(toString(eA.caller))))
786+ else !(bF(toString(bs.caller))))
736787 then true
737- else bA())
788+ else bH())
738789 then throw("Invalid decreasePosition parameters")
739790 else {
740- let eL = bt(toString(eA.caller))
741- let eM = eL._1
742- let eN = eL._2
743- let eO = eL._3
744- let eP = eL._4
745- let eQ = if ((eM > 0))
746- then ab
747- else aa
748- let eR = (eQ == aa)
749- let eS = ao(ex, eJ)
750- let eT = cP(toString(eA.caller), ai)
751- let eU = eT._1
752- let cU = eT._2
753- let eV = if ((eU > eS))
791+ let fg = bA(toString(bs.caller))
792+ let fh = fg._1
793+ let fi = fg._2
794+ let fj = fg._3
795+ let fk = fg._4
796+ let fl = if ((fh > 0))
797+ then ag
798+ else af
799+ let fm = (fl == af)
800+ let fn = at(eT, fe)
801+ let fo = cZ(toString(bs.caller), an)
802+ let fp = fo._1
803+ let cY = fo._2
804+ let fq = if ((fp > fn))
754805 then {
755- let eW = bH(eR, eS)
756- let dk = eW._1
757- let bK = eW._2
758- let bL = eW._3
759- let ds = eW._4
760- let dt = eW._5
761- let eX = ap(dk)
762- if (if ((eK != 0))
763- then (eK > eX)
806+ let fr = bO(fm, fn)
807+ let dt = fr._1
808+ let bR = fr._2
809+ let bS = fr._3
810+ let dB = fr._4
811+ let dC = fr._5
812+ let fs = au(dt)
813+ if (if ((ff != 0))
814+ then (ff > fs)
764815 else false)
765- then throw(((("Too little base asset exchanged, got " + toString(eX)) + " expected ") + toString(eK)))
816+ then throw(((("Too little base asset exchanged, got " + toString(fs)) + " expected ") + toString(ff)))
766817 else {
767- let dp = am(ao(cU, eX), ap(eM))
768- let eY = bY(eM, eN, eP, dp)
769- let ch = eY._1
770- let ci = eY._2
771- let cd = eY._3
772- let dl = eS
773- let eZ = (cU - dp)
774- let fa = if ((eM > 0))
775- then ((eU - dl) - eZ)
776- else ((eZ + eU) - dl)
777- let fb = (eM + dk)
778- $Tuple11(fb, ch, ap(fa), br(fb), bL, bK, ds, dt, (aX() - eS), (bl() - (if ((fb > 0))
779- then ap(dk)
780- else 0)), (bk() - (if ((0 > fb))
781- then ap(dk)
818+ let dy = ar(at(cY, fs), au(fh))
819+ let ft = cf(fh, fi, fk, dy)
820+ let co = ft._1
821+ let cp = ft._2
822+ let ck = ft._3
823+ let du = fn
824+ let fu = (cY - dy)
825+ let fv = if ((fh > 0))
826+ then ((fp - du) - fu)
827+ else ((fu + fp) - du)
828+ let fw = (fh + dt)
829+ $Tuple11(fw, co, au(fv), by(fw), bS, bR, dB, dC, (bc() - fn), (bq() - (if ((fw > 0))
830+ then au(dt)
831+ else 0)), (bp() - (if ((0 > fw))
832+ then au(dt)
782833 else 0)))
783834 }
784835 }
785836 else throw("Close position first")
786- let fb = eV._1
787- let fc = eV._2
788- let fd = eV._3
789- let fe = eV._4
790- let bL = eV._5
791- let bK = eV._6
792- let ds = eV._7
793- let dt = eV._8
794- let dw = eV._9
795- let du = eV._10
796- let dv = eV._11
797- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), fd], nil)
798- if ((ff == ff))
799- then (ed(toString(eA.caller), fb, fc, fd, fe) ++ ep(bK, bL, ds, dt, dw, du, dv))
837+ let fw = fq._1
838+ let fx = fq._2
839+ let fy = fq._3
840+ let fz = fq._4
841+ let bS = fq._5
842+ let bR = fq._6
843+ let dB = fq._7
844+ let dC = fq._8
845+ let dF = fq._9
846+ let dD = fq._10
847+ let dE = fq._11
848+ let fA = invoke(ac(), "notifyNotional", [toString(bs.caller), fy], nil)
849+ if ((fA == fA))
850+ then (ez(toString(bs.caller), fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE))
800851 else throw("Strict value is not equal to itself.")
801852 }
802853
803854
804855
805-@Callable(eA)
806-func increasePosition (eQ,eJ,eK) = {
807- let fg = eA.payments[0].amount
808- if (if (if (if (if (if (if ((eQ != aa))
809- then (eQ != ab)
856+@Callable(bs)
857+func increasePosition (fl,fe,ff,fB) = {
858+ let fC = bs.payments[0].amount
859+ if (if (if (if (if (if (if ((fl != af))
860+ then (fl != ag)
810861 else false)
811862 then true
812- else (0 >= fg))
863+ else (0 >= fC))
813864 then true
814- else !(bz()))
865+ else !(bG()))
815866 then true
816- else (eA.payments[0].assetId != V()))
867+ else (bs.payments[0].assetId != Y()))
817868 then true
818- else !(bm(am(af, eJ), aS(), true)))
869+ else !(bt(ar(ak, fe), aX(), true)))
819870 then true
820- else bA())
871+ else bH())
821872 then throw("Invalid increasePosition parameters")
822873 else {
823- let fh = ao(fg, aR())
824- let ex = (fg - fh)
825- let fi = bt(toString(eA.caller))
826- let eM = fi._1
827- let eN = fi._2
828- let eO = fi._3
829- let eP = fi._4
830- let fj = (eM == 0)
831- let fk = if ((eM > 0))
832- then (eQ == aa)
833- else (eQ == ab)
834- let fl = if (!(fj))
835- then fk
836- else false
837- let eR = (eQ == aa)
838- let fm = if (if (fj)
839- then true
840- else fl)
874+ let bB = toString(bs.caller)
875+ let fD = at(fC, aW())
876+ let fE = invoke(ae(), "acceptPaymentWithLink", [bB, fB], [AttachedPayment(Y(), fD)])
877+ if ((fE == fE))
841878 then {
842- let eS = ao(ex, eJ)
843- let fn = bH(eR, eS)
844- let bN = fn._1
845- let bK = fn._2
846- let bL = fn._3
847- let ds = fn._4
848- let dt = fn._5
849- if (if ((eK != 0))
850- then (eK > ap(bN))
851- else false)
852- then throw(((("Limit error: " + toString(ap(bN))) + " < ") + toString(eK)))
879+ let fF = {
880+ let bD = fE
881+ if ($isInstanceOf(bD, "Int"))
882+ then {
883+ let fG = bD
884+ fG
885+ }
886+ else throw("Invalid referrerFee")
887+ }
888+ let eT = (fC - fD)
889+ let fH = (fD - fF)
890+ let fI = bA(bB)
891+ let fh = fI._1
892+ let fi = fI._2
893+ let fj = fI._3
894+ let fk = fI._4
895+ let fJ = (fh == 0)
896+ let fK = if ((fh > 0))
897+ then (fl == af)
898+ else (fl == ag)
899+ let fL = if (!(fJ))
900+ then fK
901+ else false
902+ let fm = (fl == af)
903+ let fM = if (if (fJ)
904+ then true
905+ else fL)
906+ then {
907+ let fn = at(eT, fe)
908+ let fN = bO(fm, fn)
909+ let bU = fN._1
910+ let bR = fN._2
911+ let bS = fN._3
912+ let dB = fN._4
913+ let dC = fN._5
914+ if (if ((ff != 0))
915+ then (ff > au(bU))
916+ else false)
917+ then throw(((("Limit error: " + toString(au(bU))) + " < ") + toString(ff)))
918+ else {
919+ let fw = (fh + bU)
920+ let fO = ar(fn, fe)
921+ let fP = cf(fh, fi, fk, fO)
922+ let co = fP._1
923+ let cT = fP._2
924+ let cU = fP._3
925+ if (!(cE(bR, bS)))
926+ then throw("Over max spread limit")
927+ else $Tuple11(fw, co, (fj + fn), by(fw), bS, bR, dB, dC, (bc() + fn), (bq() + (if ((fw > 0))
928+ then au(bU)
929+ else 0)), (bp() + (if ((0 > fw))
930+ then au(bU)
931+ else 0)))
932+ }
933+ }
853934 else {
854- let fb = (eM + bN)
855- let fo = am(eS, eJ)
856- let fp = bY(eM, eN, eP, fo)
857- let ch = fp._1
858- let cM = fp._2
859- let cN = fp._3
860- if (!(cx(bK, bL)))
861- then throw("Over max spread limit")
862- else $Tuple11(fb, ch, (eO + eS), br(fb), bL, bK, ds, dt, (aX() + eS), (bl() + (if ((fb > 0))
863- then ap(bN)
864- else 0)), (bk() + (if ((0 > fb))
865- then ap(bN)
866- else 0)))
935+ let fn = at(eT, fe)
936+ let fQ = cZ(toString(bs.caller), an)
937+ let fp = fQ._1
938+ let cY = fQ._2
939+ if ((fp > fn))
940+ then throw("Use decreasePosition to decrease position size")
941+ else throw("Close position first")
867942 }
868- }
869- else {
870- let eS = ao(ex, eJ)
871- let fq = cP(toString(eA.caller), ai)
872- let eU = fq._1
873- let cU = fq._2
874- if ((eU > eS))
875- then throw("Use decreasePosition to decrease position size")
876- else throw("Close position first")
877- }
878- let fb = fm._1
879- let fc = fm._2
880- let fd = fm._3
881- let fe = fm._4
882- let bL = fm._5
883- let bK = fm._6
884- let ds = fm._7
885- let dt = fm._8
886- let dw = fm._9
887- let du = fm._10
888- let dv = fm._11
889- let fr = (fh / 2)
890- let fs = (fh - fr)
891- let ft = invoke(W(), "lockNeutrinoSP", [toString(X()), ah], [AttachedPayment(V(), ex)])
892- if ((ft == ft))
893- then {
894- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
895- if ((fu == fu))
943+ let fw = fM._1
944+ let fx = fM._2
945+ let fy = fM._3
946+ let fz = fM._4
947+ let bS = fM._5
948+ let bR = fM._6
949+ let dB = fM._7
950+ let dC = fM._8
951+ let dF = fM._9
952+ let dD = fM._10
953+ let dE = fM._11
954+ let fR = (fH / 2)
955+ let fS = (fH - fR)
956+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
957+ if ((fT == fT))
896958 then {
897- let fv = invoke(Z(), "notifyFees", [toString(eA.caller), fh], nil)
898- if ((fv == fv))
959+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
960+ if ((fU == fU))
899961 then {
900- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), fd], nil)
901- if ((ff == ff))
902- then (((ed(toString(eA.caller), fb, fc, fd, fe) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ eB(fr)) ++ ez((aQ() + ex)))
962+ let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
963+ if ((fV == fV))
964+ then {
965+ let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
966+ if ((fA == fA))
967+ then (((ez(bB, fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eW(fR)) ++ eV((aV() + eT)))
968+ else throw("Strict value is not equal to itself.")
969+ }
903970 else throw("Strict value is not equal to itself.")
904971 }
905972 else throw("Strict value is not equal to itself.")
912979
913980
914981
915-@Callable(eA)
982+@Callable(bs)
916983 func addMargin () = {
917- let fg = eA.payments[0].amount
918- if (if (if (if ((eA.payments[0].assetId != V()))
984+ let fC = bs.payments[0].amount
985+ if (if (if (if ((bs.payments[0].assetId != Y()))
919986 then true
920- else !(by(toString(eA.caller))))
987+ else !(bF(toString(bs.caller))))
921988 then true
922- else !(bz()))
989+ else !(bG()))
923990 then true
924- else bA())
991+ else bH())
925992 then throw("Invalid addMargin parameters")
926993 else {
927- let fh = ao(fg, aR())
928- let ex = (fg - fh)
929- let fw = bt(toString(eA.caller))
930- let eM = fw._1
931- let eN = fw._2
932- let eO = fw._3
933- let eP = fw._4
934- let fr = (fh / 2)
935- let fs = (fh - fr)
936- let ft = invoke(W(), "lockNeutrinoSP", [toString(X()), ah], [AttachedPayment(V(), ex)])
937- if ((ft == ft))
994+ let bB = toString(bs.caller)
995+ let fD = at(fC, aW())
996+ let fE = invoke(ae(), "acceptPayment", [bB], [AttachedPayment(Y(), fD)])
997+ if ((fE == fE))
938998 then {
939- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
940- if ((fu == fu))
999+ let fF = {
1000+ let bD = fE
1001+ if ($isInstanceOf(bD, "Int"))
1002+ then {
1003+ let fG = bD
1004+ fG
1005+ }
1006+ else throw("Invalid referrerFee")
1007+ }
1008+ let fH = (fD - fF)
1009+ let eT = (fC - fD)
1010+ let fW = bA(bB)
1011+ let fh = fW._1
1012+ let fi = fW._2
1013+ let fj = fW._3
1014+ let fk = fW._4
1015+ let fR = (fH / 2)
1016+ let fS = (fH - fR)
1017+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
1018+ if ((fT == fT))
9411019 then {
942- let fv = invoke(Z(), "notifyFees", [toString(eA.caller), fh], nil)
943- if ((fv == fv))
944- then ((ed(toString(eA.caller), eM, (eN + ex), eO, eP) ++ eB(fr)) ++ ez((aQ() + ex)))
1020+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1021+ if ((fU == fU))
1022+ then {
1023+ let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
1024+ if ((fV == fV))
1025+ then ((ez(bB, fh, (fi + eT), fj, fk) ++ eW(fR)) ++ eV((aV() + eT)))
1026+ else throw("Strict value is not equal to itself.")
1027+ }
9451028 else throw("Strict value is not equal to itself.")
9461029 }
9471030 else throw("Strict value is not equal to itself.")
9521035
9531036
9541037
955-@Callable(eA)
956-func removeMargin (ex) = if (if (if (if ((0 >= ex))
1038+@Callable(bs)
1039+func removeMargin (eT) = if (if (if (if ((0 >= eT))
9571040 then true
958- else !(by(toString(eA.caller))))
1041+ else !(bF(toString(bs.caller))))
9591042 then true
960- else !(bz()))
1043+ else !(bG()))
9611044 then true
962- else bA())
1045+ else bH())
9631046 then throw("Invalid removeMargin parameters")
9641047 else {
965- let fx = bt(toString(eA.caller))
966- let eM = fx._1
967- let eN = fx._2
968- let eO = fx._3
969- let eP = fx._4
970- let fy = -(ex)
971- let fz = bY(eM, eN, eP, fy)
972- let ch = fz._1
973- let ci = fz._2
974- if ((ci != 0))
1048+ let fX = bA(toString(bs.caller))
1049+ let fh = fX._1
1050+ let fi = fX._2
1051+ let fj = fX._3
1052+ let fk = fX._4
1053+ let fY = -(eT)
1054+ let fZ = cf(fh, fi, fk, fY)
1055+ let co = fZ._1
1056+ let cp = fZ._2
1057+ if ((cp != 0))
9751058 then throw("Invalid removed margin amount")
9761059 else {
977- let fA = cV(ch, ci, eO)
978- if (!(bm(fA, aS(), true)))
979- then throw(((("Too much margin removed: " + toString(fA)) + " < ") + toString(aS())))
1060+ let ga = de(co, cp, fj)
1061+ if (!(bt(ga, aX(), true)))
1062+ then throw(((("Too much margin removed: " + toString(ga)) + " < ") + toString(aX())))
9801063 else {
981- let fB = invoke(W(), "unlockNeutrino", [ex, toBase58String(V())], nil)
982- if ((fB == fB))
983- then ((ed(toString(eA.caller), eM, ch, eO, br(eM)) ++ ew(eA.caller, ex)) ++ ez((aQ() - ex)))
1064+ let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1065+ if ((gb == gb))
1066+ then ((ez(toString(bs.caller), fh, co, fj, by(fh)) ++ eS(bs.caller, eT)) ++ eV((aV() - eT)))
9841067 else throw("Strict value is not equal to itself.")
9851068 }
9861069 }
9881071
9891072
9901073
991-@Callable(eA)
992-func closePosition () = if (if (if (!(by(toString(eA.caller))))
993- then true
994- else !(bz()))
995- then true
996- else bA())
997- then throw("Invalid closePosition parameters")
998- else {
999- let fC = dm(toString(eA.caller), true)
1000- let cM = fC._1
1001- let fD = fC._2
1002- let dp = fC._3
1003- let dq = fC._4
1004- let bK = fC._5
1005- let bL = fC._6
1006- let ds = fC._7
1007- let dt = fC._8
1008- let dw = fC._9
1009- let cN = fC._10
1010- let du = fC._11
1011- let dv = fC._12
1012- if ((fD > 0))
1013- then throw("Unable to close position with bad debt")
1014- else {
1015- let fE = ap(dq)
1016- let fF = (aQ() - fE)
1017- let fG = if ((0 > fF))
1018- then $Tuple2(0, ap(fF))
1019- else $Tuple2(fF, 0)
1020- let fH = fG._1
1021- let fI = fG._2
1022- let fJ = if ((fI > 0))
1074+@Callable(bs)
1075+func closePosition () = {
1076+ let gc = br(bs)
1077+ let gd = valueOrErrorMessage(addressFromString(gc), "Invalid caller")
1078+ if (if (if (!(bF(gc)))
1079+ then true
1080+ else !(bG()))
1081+ then true
1082+ else bH())
1083+ then throw("Invalid closePosition parameters")
1084+ else {
1085+ let ge = dv(gc, true)
1086+ let cT = ge._1
1087+ let gf = ge._2
1088+ let dy = ge._3
1089+ let dz = ge._4
1090+ let bR = ge._5
1091+ let bS = ge._6
1092+ let dB = ge._7
1093+ let dC = ge._8
1094+ let dF = ge._9
1095+ let cU = ge._10
1096+ let dD = ge._11
1097+ let dE = ge._12
1098+ if ((gf > 0))
1099+ then throw("Unable to close position with bad debt")
1100+ else {
1101+ let gg = au(dz)
1102+ let gh = (aV() - gg)
1103+ let gi = if ((0 > gh))
1104+ then $Tuple2(0, au(gh))
1105+ else $Tuple2(gh, 0)
1106+ let gj = gi._1
1107+ let gk = gi._2
1108+ let fG = if ((gk > 0))
1109+ then {
1110+ let gl = invoke(ab(), "withdraw", [gk], nil)
1111+ if ((gl == gl))
1112+ then nil
1113+ else throw("Strict value is not equal to itself.")
1114+ }
1115+ else nil
1116+ if ((fG == fG))
1117+ then {
1118+ let gb = invoke(Z(), "unlockNeutrino", [(gg - gk), toBase58String(Y())], nil)
1119+ if ((gb == gb))
1120+ then {
1121+ let fA = invoke(ac(), "notifyNotional", [gc, 0], nil)
1122+ if ((fA == fA))
1123+ then (((eR(gc) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(gd, gg)) ++ eV(gj))
1124+ else throw("Strict value is not equal to itself.")
1125+ }
1126+ else throw("Strict value is not equal to itself.")
1127+ }
1128+ else throw("Strict value is not equal to itself.")
1129+ }
1130+ }
1131+ }
1132+
1133+
1134+
1135+@Callable(bs)
1136+func liquidate (bB) = {
1137+ let gm = di(bB, an)
1138+ let ga = if (cK())
1139+ then {
1140+ let gn = di(bB, ao)
1141+ av(gm, gn)
1142+ }
1143+ else gm
1144+ if (if (if (if (!(bt(ga, bh(), false)))
1145+ then true
1146+ else !(bF(bB)))
1147+ then true
1148+ else !(bG()))
1149+ then true
1150+ else bH())
1151+ then throw("Unable to liquidate")
1152+ else if (if (if ((gm > bi()))
1153+ then (bj() > 0)
1154+ else false)
1155+ then (ak > bj())
1156+ else false)
1157+ then {
1158+ let go = bA(bB)
1159+ let fh = go._1
1160+ let fi = go._2
1161+ let fj = go._3
1162+ let fk = go._4
1163+ let fl = if ((fh > 0))
1164+ then ag
1165+ else af
1166+ let fm = (fl == af)
1167+ let du = do(bB, fh)
1168+ let gp = cZ(bB, an)
1169+ let fp = gp._1
1170+ let cY = gp._2
1171+ let gq = bO(fm, du)
1172+ let dt = gq._1
1173+ let bR = gq._2
1174+ let bS = gq._3
1175+ let dB = gq._4
1176+ let dC = gq._5
1177+ let dy = ar(at(cY, au(dt)), au(fh))
1178+ let gr = cf(fh, fi, fk, dy)
1179+ let co = gr._1
1180+ let cp = gr._2
1181+ let ck = gr._3
1182+ let fu = (cY - dy)
1183+ let fv = if ((fh > 0))
1184+ then ((fp - du) - fu)
1185+ else ((fu + fp) - du)
1186+ let gs = at(du, bi())
1187+ let gt = (gs / 2)
1188+ let fS = (gs - gt)
1189+ let gu = (co - gs)
1190+ let fw = (fh + dt)
1191+ let fy = au(fv)
1192+ let gv = by(fw)
1193+ let dF = (bc() - du)
1194+ let gh = (aV() - gs)
1195+ let gw = if ((0 > gh))
1196+ then $Tuple2(0, au(gh))
1197+ else $Tuple2(gh, 0)
1198+ let gx = gw._1
1199+ let gy = gw._2
1200+ let fG = if ((gy > 0))
10231201 then {
1024- let fK = invoke(Y(), "withdraw", [fI], nil)
1025- if ((fK == fK))
1202+ let gl = invoke(ab(), "withdraw", [gy], nil)
1203+ if ((gl == gl))
10261204 then nil
10271205 else throw("Strict value is not equal to itself.")
10281206 }
10291207 else nil
1030- if ((fJ == fJ))
1208+ if ((fG == fG))
10311209 then {
1032- let fB = invoke(W(), "unlockNeutrino", [(fE - fI), toBase58String(V())], nil)
1033- if ((fB == fB))
1210+ let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1211+ if ((gb == gb))
10341212 then {
1035- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), 0], nil)
1036- if ((ff == ff))
1037- then (((ev(toString(eA.caller)) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ ew(eA.caller, fE)) ++ ez(fH))
1038- else throw("Strict value is not equal to itself.")
1039- }
1040- else throw("Strict value is not equal to itself.")
1041- }
1042- else throw("Strict value is not equal to itself.")
1043- }
1044- }
1045-
1046-
1047-
1048-@Callable(eA)
1049-func liquidate (bu) = {
1050- let fL = cZ(bu, ai)
1051- let fA = if (cD())
1052- then {
1053- let fM = cZ(bu, aj)
1054- aq(fL, fM)
1055- }
1056- else fL
1057- if (if (if (if (!(bm(fA, bc(), false)))
1058- then true
1059- else !(by(bu)))
1060- then true
1061- else !(bz()))
1062- then true
1063- else bA())
1064- then throw("Unable to liquidate")
1065- else if (if (if ((fL > bd()))
1066- then (be() > 0)
1067- else false)
1068- then (af > be())
1069- else false)
1070- then {
1071- let fN = bt(bu)
1072- let eM = fN._1
1073- let eN = fN._2
1074- let eO = fN._3
1075- let eP = fN._4
1076- let eQ = if ((eM > 0))
1077- then ab
1078- else aa
1079- let eR = (eQ == aa)
1080- let dl = df(bu, eM)
1081- let fO = cP(bu, ai)
1082- let eU = fO._1
1083- let cU = fO._2
1084- let fP = bH(eR, dl)
1085- let dk = fP._1
1086- let bK = fP._2
1087- let bL = fP._3
1088- let ds = fP._4
1089- let dt = fP._5
1090- let dp = am(ao(cU, ap(dk)), ap(eM))
1091- let fQ = bY(eM, eN, eP, dp)
1092- let ch = fQ._1
1093- let ci = fQ._2
1094- let cd = fQ._3
1095- let eZ = (cU - dp)
1096- let fa = if ((eM > 0))
1097- then ((eU - dl) - eZ)
1098- else ((eZ + eU) - dl)
1099- let fR = ao(dl, bd())
1100- let fS = (fR / 2)
1101- let fs = (fR - fS)
1102- let fT = (ch - fR)
1103- let fb = (eM + dk)
1104- let fd = ap(fa)
1105- let fU = br(fb)
1106- let dw = (aX() - dl)
1107- let fF = (aQ() - fR)
1108- let fV = if ((0 > fF))
1109- then $Tuple2(0, ap(fF))
1110- else $Tuple2(fF, 0)
1111- let fW = fV._1
1112- let fX = fV._2
1113- let fJ = if ((fX > 0))
1114- then {
1115- let fK = invoke(Y(), "withdraw", [fX], nil)
1116- if ((fK == fK))
1117- then nil
1118- else throw("Strict value is not equal to itself.")
1119- }
1120- else nil
1121- if ((fJ == fJ))
1122- then {
1123- let fB = invoke(W(), "unlockNeutrino", [(fR - fX), toBase58String(V())], nil)
1124- if ((fB == fB))
1125- then {
1126- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
1127- if ((fu == fu))
1213+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1214+ if ((fU == fU))
11281215 then {
1129- let ff = invoke(Z(), "notifyNotional", [bu, fd], nil)
1130- if ((ff == ff))
1131- then (((ed(bu, fb, fT, fd, fU) ++ ep(bK, bL, ds, dt, dw, (bl() - (if ((fb > 0))
1132- then ap(dk)
1133- else 0)), (bk() - (if ((0 > fb))
1134- then ap(dk)
1135- else 0)))) ++ ew(eA.caller, fS)) ++ ez(fW))
1216+ let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
1217+ if ((fA == fA))
1218+ then (((ez(bB, fw, gu, fy, gv) ++ eL(bR, bS, dB, dC, dF, (bq() - (if ((fw > 0))
1219+ then au(dt)
1220+ else 0)), (bp() - (if ((0 > fw))
1221+ then au(dt)
1222+ else 0)))) ++ eS(bs.caller, gt)) ++ eV(gx))
11361223 else throw("Strict value is not equal to itself.")
11371224 }
11381225 else throw("Strict value is not equal to itself.")
11421229 else throw("Strict value is not equal to itself.")
11431230 }
11441231 else {
1145- let fY = dm(bu, false)
1146- let cM = fY._1
1147- let ci = fY._2
1148- let cN = fY._3
1149- let cO = fY._4
1150- let bK = fY._5
1151- let bL = fY._6
1152- let ds = fY._7
1153- let dt = fY._8
1154- let dw = fY._9
1155- let dl = fY._10
1156- let du = fY._11
1157- let dv = fY._12
1158- let fR = ao(dl, bd())
1159- let fS = (fR / 2)
1160- let fs = (fR - fS)
1161- let fF = (aQ() - fR)
1162- let fZ = if ((0 > fF))
1163- then $Tuple2(0, ap(fF))
1164- else $Tuple2(fF, 0)
1165- let fW = fZ._1
1166- let fX = fZ._2
1167- let fJ = if ((fX > 0))
1232+ let gz = dv(bB, false)
1233+ let cT = gz._1
1234+ let cp = gz._2
1235+ let cU = gz._3
1236+ let cV = gz._4
1237+ let bR = gz._5
1238+ let bS = gz._6
1239+ let dB = gz._7
1240+ let dC = gz._8
1241+ let dF = gz._9
1242+ let du = gz._10
1243+ let dD = gz._11
1244+ let dE = gz._12
1245+ let gs = at(du, bi())
1246+ let gt = (gs / 2)
1247+ let fS = (gs - gt)
1248+ let gh = (aV() - gs)
1249+ let gA = if ((0 > gh))
1250+ then $Tuple2(0, au(gh))
1251+ else $Tuple2(gh, 0)
1252+ let gx = gA._1
1253+ let gy = gA._2
1254+ let fG = if ((gy > 0))
11681255 then {
1169- let fK = invoke(Y(), "withdraw", [fX], nil)
1170- if ((fK == fK))
1256+ let gl = invoke(ab(), "withdraw", [gy], nil)
1257+ if ((gl == gl))
11711258 then nil
11721259 else throw("Strict value is not equal to itself.")
11731260 }
11741261 else nil
1175- if ((fJ == fJ))
1262+ if ((fG == fG))
11761263 then {
1177- let fB = invoke(W(), "unlockNeutrino", [(fR - fX), toBase58String(V())], nil)
1178- if ((fB == fB))
1264+ let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1265+ if ((gb == gb))
11791266 then {
1180- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
1181- if ((fu == fu))
1267+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1268+ if ((fU == fU))
11821269 then {
1183- let ff = invoke(Z(), "notifyNotional", [bu, 0], nil)
1184- if ((ff == ff))
1185- then (((ev(bu) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ ew(eA.caller, fS)) ++ ez(fW))
1270+ let fA = invoke(ac(), "notifyNotional", [bB, 0], nil)
1271+ if ((fA == fA))
1272+ then (((eR(bB) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(bs.caller, gt)) ++ eV(gx))
11861273 else throw("Strict value is not equal to itself.")
11871274 }
11881275 else throw("Strict value is not equal to itself.")
11951282
11961283
11971284
1198-@Callable(eA)
1285+@Callable(bs)
11991286 func payFunding () = {
1200- let ga = aY()
1201- if (if (if ((ga > lastBlock.timestamp))
1287+ let gB = bd()
1288+ if (if (if ((gB > lastBlock.timestamp))
12021289 then true
1203- else !(bz()))
1290+ else !(bG()))
12041291 then true
1205- else bA())
1206- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(ga)))
1292+ else bH())
1293+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gB)))
12071294 else {
1208- let gb = cs()
1209- let gc = dx()
1210- let gd = (gc - gb)
1211- let ge = if (if ((bk() == 0))
1212- then true
1213- else (bl() == 0))
1214- then $Tuple2(0, 0)
1215- else if ((0 > gd))
1216- then {
1217- let gf = am(ao(gd, ba()), ag)
1218- let gg = am(ao(gf, bk()), bl())
1219- $Tuple2(gf, gg)
1220- }
1221- else {
1222- let gg = am(ao(gd, ba()), ag)
1223- let gf = am(ao(gg, bl()), bk())
1224- $Tuple2(gf, gg)
1225- }
1226- let gf = ge._1
1227- let gg = ge._2
1228- dX((ga + bb()), (bi() + gg), (bj() + gf), am(gg, gb), am(gf, gb))
1295+ let ee = cz()
1296+ let gC = ed()
1297+ let eh = gC._1
1298+ let ei = gC._2
1299+ et((gB + bg()), (bn() + ei), (bo() + eh), ar(ei, ee), ar(eh, ee))
12291300 }
12301301 }
12311302
12321303
12331304
1234-@Callable(eA)
1235-func v_get (bu) = {
1236- let gh = dm(bu, false)
1237- let cM = gh._1
1238- let cN = gh._2
1239- let cO = gh._3
1240- let gi = gh._4
1241- throw((((ak(cN) + ak(cO)) + ak(gi)) + ak(de(bu))))
1305+@Callable(bs)
1306+func forceMoveAsset (bB,eT) = if (if ((addressFromPublicKey(X()) != bs.caller))
1307+ then true
1308+ else (0 > eT))
1309+ then throw("Invalid forceMoveAsset parameters")
1310+ else {
1311+ let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1312+ if ((gb == gb))
1313+ then (eS(addressFromStringValue(bB), eT) ++ eV((aV() - eT)))
1314+ else throw("Strict value is not equal to itself.")
1315+ }
1316+
1317+
1318+
1319+@Callable(bs)
1320+func adjustPeg (dX) = if (if ((addressFromPublicKey(X()) != bs.caller))
1321+ then true
1322+ else (0 > dX))
1323+ then throw("Invalid adjustPeg parameters")
1324+ else {
1325+ let gD = dW(dX)
1326+ let eb = gD._1
1327+ let gE = gD._2
1328+ if ((gE == 0))
1329+ then throw("Nothing to adjust")
1330+ else if ((gE > 0))
1331+ then {
1332+ let gl = invoke(ab(), "withdraw", [gE], nil)
1333+ if ((gl == gl))
1334+ then {
1335+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), gE)])
1336+ if ((fT == fT))
1337+ then (eV((aV() + gE)) ++ eK(eb, aZ()))
1338+ else throw("Strict value is not equal to itself.")
1339+ }
1340+ else throw("Strict value is not equal to itself.")
1341+ }
1342+ else {
1343+ let gb = invoke(Z(), "unlockNeutrino", [au(gE), toBase58String(Y())], nil)
1344+ if ((gb == gb))
1345+ then {
1346+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), au(gE))])
1347+ if ((fU == fU))
1348+ then (eV((aV() - au(gE))) ++ eK(eb, aZ()))
1349+ else throw("Strict value is not equal to itself.")
1350+ }
1351+ else throw("Strict value is not equal to itself.")
1352+ }
1353+ }
1354+
1355+
1356+
1357+@Callable(bs)
1358+func v_get (bB) = {
1359+ let gF = dv(bB, false)
1360+ let cT = gF._1
1361+ let cU = gF._2
1362+ let cV = gF._3
1363+ let gG = gF._4
1364+ throw((((ap(cU) + ap(cV)) + ap(gG)) + ap(dn(bB))))
12421365 }
12431366
12441367
12451368
1246-@Callable(eA)
1247-func view_calcRemainMarginWithFundingPayment (bu) = {
1248- let gj = bt(bu)
1249- let bx = gj._1
1250- let cR = gj._2
1251- let db = gj._3
1252- let cT = gj._4
1253- let gk = cP(bu, ai)
1254- let cJ = gk._1
1255- let cU = gk._2
1256- let gl = bY(bx, cR, cT, cU)
1257- let ch = gl._1
1258- let ci = gl._2
1259- let cd = gl._3
1260- throw((((((ak(ch) + ak(cd)) + ak(de(bu))) + ak(cU)) + ak(ci)) + ak(cJ)))
1369+@Callable(bs)
1370+func view_calcRemainMarginWithFundingPayment (bB) = {
1371+ let gH = bA(bB)
1372+ let bE = gH._1
1373+ let db = gH._2
1374+ let dk = gH._3
1375+ let dd = gH._4
1376+ let gI = cZ(bB, an)
1377+ let cQ = gI._1
1378+ let cY = gI._2
1379+ let gJ = cf(bE, db, dd, cY)
1380+ let co = gJ._1
1381+ let cp = gJ._2
1382+ let ck = gJ._3
1383+ throw((((((ap(co) + ap(ck)) + ap(dn(bB))) + ap(cY)) + ap(cp)) + ap(cQ)))
12611384 }
12621385
12631386
12641387
1265-@Callable(eA)
1266-func forceMoveAsset (bu,ex) = if (if ((addressFromPublicKey(U()) != eA.caller))
1267- then true
1268- else (0 > ex))
1269- then throw("Invalid forceMoveAsset parameters")
1270- else {
1271- let fB = invoke(W(), "unlockNeutrino", [ex, toBase58String(V())], nil)
1272- if ((fB == fB))
1273- then (ew(addressFromStringValue(bu), ex) ++ ez((aQ() - ex)))
1274- else throw("Strict value is not equal to itself.")
1275- }
1388+@Callable(bs)
1389+func view_getPegAdjustCost (dX) = {
1390+ let ec = dW(dX)
1391+ throw(toString(ec._2))
1392+ }
12761393
12771394
1278-@Verifier(gm)
1279-func gn () = sigVerify(gm.bodyBytes, gm.proofs[0], U())
1395+
1396+@Callable(bs)
1397+func view_getFunding () = {
1398+ let ee = cz()
1399+ let gK = ed()
1400+ let eh = gK._1
1401+ let ei = gK._2
1402+ let gL = ar(ei, ee)
1403+ let gM = ar(eh, ee)
1404+ throw((((ap(gL) + ap(gM)) + ap(dG())) + ap(cz())))
1405+ }
1406+
1407+
1408+@Verifier(gN)
1409+func gO () = sigVerify(gN.bodyBytes, gN.proofs[0], X())
12801410
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
88 let c = "k_ora"
99
1010 let d = "k_balance"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
20-let i = "k_initialized"
20+let i = "k_positionClosedDate"
2121
22-let j = "k_paused"
22+let j = "k_initialized"
2323
24-let k = "k_fee"
24+let k = "k_paused"
2525
26-let l = "k_fundingPeriod"
26+let l = "k_fee"
2727
28-let m = "k_initMarginRatio"
28+let m = "k_fundingPeriod"
2929
30-let n = "k_mmr"
30+let n = "k_initMarginRatio"
3131
32-let o = "k_liquidationFeeRatio"
32+let o = "k_mmr"
3333
34-let p = "k_partLiquidationRatio"
34+let p = "k_liquidationFeeRatio"
3535
36-let q = "k_spreadLimit"
36+let q = "k_partLiquidationRatio"
3737
38-let r = "k_maxPriceImpact"
38+let r = "k_spreadLimit"
3939
40-let s = "k_maxPriceSpread"
40+let s = "k_maxPriceImpact"
4141
42-let t = "k_lastDataStr"
42+let t = "k_maxPriceSpread"
4343
44-let u = "k_lastMinuteId"
44+let u = "k_lastDataStr"
4545
46-let v = "k_twapDataLastCumulativePrice"
46+let v = "k_lastMinuteId"
4747
48-let w = "k_twapDataLastPrice"
48+let w = "k_twapDataLastCumulativePrice"
4949
50-let x = "k_twapDataPreviousMinuteId"
50+let x = "k_twapDataLastPrice"
5151
52-let y = "k_latestLongPremiumFraction"
52+let y = "k_twapDataPreviousMinuteId"
5353
54-let z = "k_latestShortPremiumFraction"
54+let z = "k_latestLongPremiumFraction"
5555
56-let A = "k_nextFundingBlockMinTimestamp"
56+let A = "k_latestShortPremiumFraction"
5757
58-let B = "k_longFundingRate"
58+let B = "k_nextFundingBlockMinTimestamp"
5959
60-let C = "k_shortFundingRate"
60+let C = "k_longFundingRate"
6161
62-let D = "k_qtAstR"
62+let D = "k_shortFundingRate"
6363
64-let E = "k_bsAstR"
64+let E = "k_qtAstR"
6565
66-let F = "k_totalPositionSize"
66+let F = "k_bsAstR"
6767
68-let G = "k_totalLongPositionSize"
68+let G = "k_totalPositionSize"
6969
70-let H = "k_totalShortPositionSize"
70+let H = "k_totalLongPositionSize"
7171
72-let I = "k_cumulativeNotional"
72+let I = "k_totalShortPositionSize"
7373
74-let J = "k_openInterestNotional"
74+let J = "k_cumulativeNotional"
7575
76-let K = "k_coordinatorAddress"
76+let K = "k_openInterestNotional"
7777
78-let L = "k_insurance_address"
78+let L = "k_coordinatorAddress"
7979
80-let M = "k_admin_address"
80+let M = "k_insurance_address"
8181
82-let N = "k_admin_public_key"
82+let N = "k_admin_address"
8383
84-let O = "k_quote_asset"
84+let O = "k_admin_public_key"
8585
86-let P = "k_quote_staking"
86+let P = "k_quote_asset"
8787
88-let Q = "k_staking_address"
88+let Q = "k_quote_staking"
8989
90-let R = "k_miner_address"
90+let R = "k_staking_address"
9191
92-func S () = valueOrErrorMessage(addressFromString(getStringValue(this, K)), "Coordinator not set")
92+let S = "k_miner_address"
93+
94+let T = "k_orders_address"
95+
96+let U = "k_referral_address"
97+
98+func V () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
9399
94100
95-func T () = addressFromString(getStringValue(S(), M))
101+func W () = addressFromString(getStringValue(V(), N))
96102
97103
98-func U () = fromBase58String(getStringValue(S(), N))
104+func X () = fromBase58String(getStringValue(V(), O))
99105
100106
101-func V () = fromBase58String(getStringValue(S(), O))
107+func Y () = fromBase58String(getStringValue(V(), P))
102108
103109
104-func W () = valueOrErrorMessage(addressFromString(getStringValue(S(), P)), "Quote asset staking not set")
110+func Z () = valueOrErrorMessage(addressFromString(getStringValue(V(), Q)), "Quote asset staking not set")
105111
106112
107-func X () = valueOrErrorMessage(addressFromString(getStringValue(S(), Q)), "Insurance not set")
113+func aa () = valueOrErrorMessage(addressFromString(getStringValue(V(), R)), "Staking not set")
108114
109115
110-func Y () = valueOrErrorMessage(addressFromString(getStringValue(S(), L)), "Insurance not set")
116+func ab () = valueOrErrorMessage(addressFromString(getStringValue(V(), M)), "Insurance not set")
111117
112118
113-func Z () = valueOrErrorMessage(addressFromString(getStringValue(S(), R)), "Insurance not set")
119+func ac () = valueOrErrorMessage(addressFromString(getStringValue(V(), S)), "Miner not set")
114120
115121
116-let aa = 1
117-
118-let ab = 2
119-
120-let ac = 15
121-
122-let ad = 15
123-
124-let ae = 1000
125-
126-let af = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
127-
128-let ag = (86400 * af)
129-
130-let ah = 100
131-
132-let ai = 1
133-
134-let aj = 2
135-
136-func ak (al) = (toString(al) + ",")
122+func ad () = valueOrErrorMessage(addressFromString(getStringValue(V(), T)), "Orders not set")
137123
138124
139-func am (al,an) = fraction(al, af, an, HALFEVEN)
125+func ae () = valueOrErrorMessage(addressFromString(getStringValue(V(), U)), "Referral not set")
140126
141127
142-func ao (al,an) = fraction(al, an, af, HALFEVEN)
128+let af = 1
129+
130+let ag = 2
131+
132+let ah = 15
133+
134+let ai = 15
135+
136+let aj = 1000
137+
138+let ak = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
139+
140+let al = (86400 * ak)
141+
142+let am = 100
143+
144+let an = 1
145+
146+let ao = 2
147+
148+func ap (aq) = (toString(aq) + ",")
143149
144150
145-func ap (al) = if ((al > 0))
146- then al
147- else -(al)
151+func ar (aq,as) = fraction(aq, ak, as, HALFEVEN)
148152
149153
150-func aq (al,an) = if ((al >= an))
151- then al
152- else an
154+func at (aq,as) = fraction(aq, as, ak, HALFEVEN)
153155
154156
155-func ar (as,at) = ((as + "_") + at)
157+func au (aq) = if ((aq > 0))
158+ then aq
159+ else -(aq)
156160
157161
158-func au (av) = {
159- func aw (ax,ay) = ((ax + ay) + ",")
162+func av (aq,as) = if ((aq >= as))
163+ then aq
164+ else as
160165
161- let az = {
162- let aA = av
163- let aB = size(aA)
164- let aC = ""
165- func aD (aE,aF) = if ((aF >= aB))
166- then aE
167- else aw(aE, aA[aF])
168166
169- func aG (aE,aF) = if ((aF >= aB))
170- then aE
167+func aw (ax,ay) = ((ax + "_") + ay)
168+
169+
170+func az (aA) = {
171+ func aB (aC,aD) = ((aC + aD) + ",")
172+
173+ let aE = {
174+ let aF = aA
175+ let aG = size(aF)
176+ let aH = ""
177+ func aI (aJ,aK) = if ((aK >= aG))
178+ then aJ
179+ else aB(aJ, aF[aK])
180+
181+ func aL (aJ,aK) = if ((aK >= aG))
182+ then aJ
171183 else throw("List size exceeds 20")
172184
173- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
185+ aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
174186 }
175- let aH = dropRight(az, 1)
176- let aI = if ((take(aH, 1) == ","))
177- then drop(aH, 1)
178- else aH
179- aI
187+ let aM = dropRight(aE, 1)
188+ let aN = if ((take(aM, 1) == ","))
189+ then drop(aM, 1)
190+ else aM
191+ aN
180192 }
181193
182194
183-func aJ (aK) = split(aK, ",")
195+func aO (aP) = split(aP, ",")
184196
185197
186-func aL (av,aM,aN) = if ((size(av) > aM))
187- then (removeByIndex(av, 0) :+ aN)
188- else (av :+ aN)
198+func aQ (aA,aR,aS) = if ((size(aA) > aR))
199+ then (removeByIndex(aA, 0) :+ aS)
200+ else (aA :+ aS)
189201
190202
191-func aO (aP) = valueOrErrorMessage(getInteger(this, aP), ("no value for " + aP))
203+func aT (aU) = valueOrErrorMessage(getInteger(this, aU), ("no value for " + aU))
192204
193205
194-func aQ () = aO(d)
206+func aV () = aT(d)
195207
196208
197-func aR () = aO(k)
209+func aW () = aT(l)
198210
199211
200-func aS () = aO(m)
212+func aX () = aT(n)
201213
202214
203-func aT () = aO(D)
215+func aY () = aT(E)
204216
205217
206-func aU () = aO(E)
218+func aZ () = aT(F)
207219
208220
209-func aV () = aO(F)
221+func ba () = aT(G)
210222
211223
212-func aW () = aO(I)
224+func bb () = aT(J)
213225
214226
215-func aX () = aO(J)
227+func bc () = aT(K)
216228
217229
218-func aY () = aO(A)
230+func bd () = aT(B)
219231
220232
221-func aZ () = aO(l)
233+func be () = aT(m)
222234
223235
224-func ba () = (aZ() * af)
236+func bf () = (be() * ak)
225237
226238
227-func bb () = (aZ() * ae)
239+func bg () = (be() * aj)
228240
229241
230-func bc () = aO(n)
242+func bh () = aT(o)
231243
232244
233-func bd () = aO(o)
245+func bi () = aT(p)
234246
235247
236-func be () = aO(p)
248+func bj () = aT(q)
237249
238250
239-func bf () = aO(q)
251+func bk () = aT(r)
240252
241253
242-func bg () = aO(r)
254+func bl () = aT(s)
243255
244256
245-func bh () = aO(s)
257+func bm () = aT(t)
246258
247259
248-func bi () = aO(y)
260+func bn () = aT(z)
249261
250262
251-func bj () = aO(z)
263+func bo () = aT(A)
252264
253265
254-func bk () = aO(H)
266+func bp () = aT(I)
255267
256268
257-func bl () = aO(G)
269+func bq () = aT(H)
258270
259271
260-func bm (bn,bo,bp) = {
261- let bq = (bn - bo)
262- if (if (bp)
263- then (0 > bq)
272+func br (bs) = valueOrElse(getString(ad(), "k_sender"), toString(bs.caller))
273+
274+
275+func bt (bu,bv,bw) = {
276+ let bx = (bu - bv)
277+ if (if (bw)
278+ then (0 > bx)
264279 else false)
265280 then throw("Invalid margin")
266- else if (if (!(bp))
267- then (bq >= 0)
281+ else if (if (!(bw))
282+ then (bx >= 0)
268283 else false)
269284 then throw("Invalid margin")
270285 else true
271286 }
272287
273288
274-func br (bs) = if ((bs == 0))
289+func by (bz) = if ((bz == 0))
275290 then throw("Should not be called with _positionSize == 0")
276- else if ((bs > 0))
277- then bi()
278- else bj()
291+ else if ((bz > 0))
292+ then bn()
293+ else bo()
279294
280295
281-func bt (bu) = {
282- let bv = getInteger(this, ar(e, bu))
283- let bw = bv
284- if ($isInstanceOf(bw, "Int"))
296+func bA (bB) = {
297+ let bC = getInteger(this, aw(e, bB))
298+ let bD = bC
299+ if ($isInstanceOf(bD, "Int"))
285300 then {
286- let bx = bw
287- $Tuple4(bx, getIntegerValue(this, ar(f, bu)), getIntegerValue(this, ar(g, bu)), getIntegerValue(this, ar(h, bu)))
301+ let bE = bD
302+ $Tuple4(bE, getIntegerValue(this, aw(f, bB)), getIntegerValue(this, aw(g, bB)), getIntegerValue(this, aw(h, bB)))
288303 }
289304 else $Tuple4(0, 0, 0, 0)
290305 }
291306
292307
293-func by (bu) = if ((bt(bu)._1 == 0))
308+func bF (bB) = if ((bA(bB)._1 == 0))
294309 then throw("No open position")
295310 else true
296311
297312
298-func bz () = valueOrElse(getBoolean(this, i), false)
313+func bG () = valueOrElse(getBoolean(this, j), false)
299314
300315
301-func bA () = valueOrElse(getBoolean(this, j), false)
316+func bH () = valueOrElse(getBoolean(this, k), false)
302317
303318
304-func bB (bC,bD,bE) = if (bC)
319+func bI (bJ,bK,bL) = if (bJ)
305320 then {
306- let bF = (aU() - bE)
307- if ((0 >= bF))
321+ let bM = (aZ() - bL)
322+ if ((0 >= bM))
308323 then throw("Tx lead to base asset reserve <= 0, revert")
309- else $Tuple4((aT() + bD), bF, (aV() + bE), (aW() + bD))
324+ else $Tuple4((aY() + bK), bM, (ba() + bL), (bb() + bK))
310325 }
311326 else {
312- let bG = (aT() - bD)
313- if ((0 >= bG))
327+ let bN = (aY() - bK)
328+ if ((0 >= bN))
314329 then throw("Tx lead to base quote reserve <= 0, revert")
315- else $Tuple4(bG, (aU() + bE), (aV() - bE), (aW() - bD))
330+ else $Tuple4(bN, (aZ() + bL), (ba() - bL), (bb() - bK))
316331 }
317332
318333
319-func bH (bC,bD) = {
320- let bI = aT()
321- let bJ = aU()
322- let aP = ao(bI, bJ)
323- let bK = if (bC)
324- then (bI + bD)
325- else (bI - bD)
326- let bL = am(aP, bK)
327- let bM = ap((bL - bJ))
328- let bN = if (bC)
329- then bM
330- else -(bM)
331- let bO = bB(bC, bD, bM)
332- let bP = bO._1
333- let bQ = bO._2
334- let bR = bO._3
335- let bS = bO._4
336- let bT = am(bI, bJ)
337- let bU = am(bD, bM)
338- let bV = ap((bT - bU))
339- let bW = (af - am(bT, (bT + bV)))
340- let bX = bg()
341- if ((bW > bX))
342- then throw(((((((((((((("Price impact " + toString(bW)) + " > max price impact ") + toString(bX)) + " before quote asset: ") + toString(bI)) + " before base asset: ") + toString(bJ)) + " quote asset amount to exchange: ") + toString(bD)) + " price before: ") + toString(bT)) + " marketPrice: ") + toString(bU)))
343- else $Tuple5(bN, bP, bQ, bR, bS)
334+func bO (bJ,bK) = {
335+ let bP = aY()
336+ let bQ = aZ()
337+ let aU = at(bP, bQ)
338+ let bR = if (bJ)
339+ then (bP + bK)
340+ else (bP - bK)
341+ let bS = ar(aU, bR)
342+ let bT = au((bS - bQ))
343+ let bU = if (bJ)
344+ then bT
345+ else -(bT)
346+ let bV = bI(bJ, bK, bT)
347+ let bW = bV._1
348+ let bX = bV._2
349+ let bY = bV._3
350+ let bZ = bV._4
351+ let ca = ar(bP, bQ)
352+ let cb = ar(bK, bT)
353+ let cc = au((ca - cb))
354+ let cd = (ak - ar(ca, (ca + cc)))
355+ let ce = bl()
356+ if ((cd > ce))
357+ then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(bP)) + " before base asset: ") + toString(bQ)) + " quote asset amount to exchange: ") + toString(bK)) + " price before: ") + toString(ca)) + " marketPrice: ") + toString(cb)))
358+ else $Tuple5(bU, bW, bX, bY, bZ)
344359 }
345360
346361
347-func bY (bZ,ca,cb,cc) = {
348- let cd = if ((bZ != 0))
362+func cf (cg,ch,ci,cj) = {
363+ let ck = if ((cg != 0))
349364 then {
350- let ce = br(bZ)
351- ao((ce - cb), bZ)
365+ let cl = by(cg)
366+ at((cl - ci), cg)
352367 }
353368 else 0
354- let cf = ((cc - cd) + ca)
355- let cg = if ((0 > cf))
356- then $Tuple2(0, ap(cf))
357- else $Tuple2(ap(cf), 0)
358- let ch = cg._1
359- let ci = cg._2
360- $Tuple3(ch, ci, cd)
369+ let cm = ((cj - ck) + ch)
370+ let cn = if ((0 > cm))
371+ then $Tuple2(0, au(cm))
372+ else $Tuple2(au(cm), 0)
373+ let co = cn._1
374+ let cp = cn._2
375+ $Tuple3(co, cp, ck)
361376 }
362377
363378
364-func cj (bC,bE,ck,cl,cm) = {
365- let bT = am(cl, cm)
366- if ((bE == 0))
379+func cq (bJ,bL,cr,cs,ct) = {
380+ let ca = ar(cs, ct)
381+ if ((bL == 0))
367382 then throw("Invalid base asset amount")
368383 else {
369- let aP = ao(cl, cm)
370- let cn = if (bC)
371- then (cm + bE)
372- else (cm - bE)
373- let co = am(aP, cn)
374- let cp = ap((co - cl))
375- let bX = bg()
376- let cq = bB(!(bC), cp, bE)
377- let bP = cq._1
378- let bQ = cq._2
379- let bR = cq._3
380- let bS = cq._4
381- let bU = am(cp, bE)
382- let bV = ap((bT - bU))
383- let bW = (af - am(bT, (bT + bV)))
384- if (if ((bW > bX))
385- then ck
384+ let aU = at(cs, ct)
385+ let cu = if (bJ)
386+ then (ct + bL)
387+ else (ct - bL)
388+ let cv = ar(aU, cu)
389+ let cw = au((cv - cs))
390+ let ce = bl()
391+ let cx = bI(!(bJ), cw, bL)
392+ let bW = cx._1
393+ let bX = cx._2
394+ let bY = cx._3
395+ let bZ = cx._4
396+ let cb = ar(cw, bL)
397+ let cc = au((ca - cb))
398+ let cd = (ak - ar(ca, (ca + cc)))
399+ if (if ((cd > ce))
400+ then cr
386401 else false)
387- then throw(((((((((((((("Price impact " + toString(bW)) + " > max price impact ") + toString(bX)) + " before quote asset: ") + toString(cl)) + " before base asset: ") + toString(cm)) + " base asset amount to exchange: ") + toString(bE)) + " price before: ") + toString(bT)) + " market price: ") + toString(bU)))
388- else $Tuple8(cp, bP, bQ, bR, bS, (bl() - (if (bC)
389- then ap(bE)
390- else 0)), (bk() - (if (!(bC))
391- then ap(bE)
392- else 0)), bW)
402+ then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(cs)) + " before base asset: ") + toString(ct)) + " base asset amount to exchange: ") + toString(bL)) + " price before: ") + toString(ca)) + " market price: ") + toString(cb)))
403+ else $Tuple8(cw, bW, bX, bY, bZ, (bq() - (if (bJ)
404+ then au(bL)
405+ else 0)), (bp() - (if (!(bJ))
406+ then au(bL)
407+ else 0)), cd)
393408 }
394409 }
395410
396411
397-func cr (bC,bE,ck) = cj(bC, bE, ck, aT(), aU())
412+func cy (bJ,bL,cr) = cq(bJ, bL, cr, aY(), aZ())
398413
399414
400-func cs () = {
401- let ct = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
402- let cu = getStringValue(this, a)
403- let cv = getStringValue(this, b)
404- let cw = valueOrErrorMessage(getInteger(ct, cu), ((("Can not get oracle price. Oracle: " + toString(ct)) + " key: ") + cu))
405- cw
415+func cz () = {
416+ let cA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
417+ let cB = getStringValue(this, a)
418+ let cC = getStringValue(this, b)
419+ let cD = valueOrErrorMessage(getInteger(cA, cB), ((("Can not get oracle price. Oracle: " + toString(cA)) + " key: ") + cB))
420+ cD
406421 }
407422
408423
409-func cx (cl,cm) = {
410- let cy = cs()
411- let cz = am(cl, cm)
412- let cA = am((cy + cz), (2 * af))
413- let cB = am(ap((cy - cz)), cA)
414- if ((cB > bh()))
415- then throw(((("Price spread " + toString(cB)) + " > max price spread ") + toString(bh())))
424+func cE (cs,ct) = {
425+ let cF = cz()
426+ let cG = ar(cs, ct)
427+ let cH = ar((cF + cG), (2 * ak))
428+ let cI = ar(au((cF - cG)), cH)
429+ if ((cI > bm()))
430+ then throw(((("Price spread " + toString(cI)) + " > max price spread ") + toString(bm())))
416431 else true
417432 }
418433
419434
420-func cC () = {
421- let cl = aT()
422- let cm = aU()
423- am(cl, cm)
435+func cJ () = {
436+ let cs = aY()
437+ let ct = aZ()
438+ ar(cs, ct)
424439 }
425440
426441
427-func cD () = {
428- let cy = cs()
429- let cE = cC()
430- (am(ap((cy - cE)), cy) > bf())
442+func cK () = {
443+ let cF = cz()
444+ let cL = cJ()
445+ (ar(au((cF - cL)), cF) > bk())
431446 }
432447
433448
434-func cF (bs,cG,cl,cm) = {
435- let cH = ap(bs)
436- let cI = (0 > bs)
437- let cJ = if ((cG == ai))
449+func cM (bz,cN,cs,ct) = {
450+ let cO = au(bz)
451+ let cP = (0 > bz)
452+ let cQ = if ((cN == an))
438453 then {
439- let cK = cj(!(cI), cH, false, cl, cm)
440- let cL = cK._1
441- let cM = cK._2
442- let cN = cK._3
443- let cO = cK._4
444- cL
454+ let cR = cq(!(cP), cO, false, cs, ct)
455+ let cS = cR._1
456+ let cT = cR._2
457+ let cU = cR._3
458+ let cV = cR._4
459+ cS
445460 }
446- else ao(cH, cs())
447- cJ
461+ else at(cO, cz())
462+ cQ
448463 }
449464
450465
451-func cP (bu,cG) = {
452- let cQ = bt(bu)
453- let bx = cQ._1
454- let cR = cQ._2
455- let cS = cQ._3
456- let cT = cQ._4
457- if ((bx == 0))
458- then throw("Invalid position size")
466+func cW (bz,cX,cs,ct,cN) = if ((bz == 0))
467+ then throw("Invalid position size")
468+ else {
469+ let cP = (0 > bz)
470+ let cQ = cM(bz, cN, cs, ct)
471+ let cY = if (cP)
472+ then (cX - cQ)
473+ else (cQ - cX)
474+ $Tuple2(cQ, cY)
475+ }
476+
477+
478+func cZ (bB,cN) = {
479+ let da = bA(bB)
480+ let bE = da._1
481+ let db = da._2
482+ let dc = da._3
483+ let dd = da._4
484+ cW(bE, dc, aY(), aZ(), cN)
485+ }
486+
487+
488+func de (df,dg,dh) = ar((df - dg), dh)
489+
490+
491+func di (bB,cN) = {
492+ let dj = bA(bB)
493+ let bE = dj._1
494+ let db = dj._2
495+ let dk = dj._3
496+ let dd = dj._4
497+ let dl = cZ(bB, cN)
498+ let cQ = dl._1
499+ let cY = dl._2
500+ let dm = cf(bE, db, dd, cY)
501+ let co = dm._1
502+ let cp = dm._2
503+ de(co, cp, cQ)
504+ }
505+
506+
507+func dn (bB) = di(bB, an)
508+
509+
510+func do (bB,bz) = {
511+ let dp = av(bj(), (ak - ar(dn(bB), bh())))
512+ let dq = at(au(bz), dp)
513+ let dr = cy((bz > 0), dq, false)
514+ let ds = dr._1
515+ let cd = dr._8
516+ if ((bl() > cd))
517+ then ds
459518 else {
460- let cI = (0 > bx)
461- let cJ = cF(bx, cG, aT(), aU())
462- let cU = if (cI)
463- then (cS - cJ)
464- else (cJ - cS)
465- $Tuple2(cJ, cU)
519+ let dt = at(au(bz), bj())
520+ let du = cy((bz > 0), dt, false)._1
521+ du
466522 }
467523 }
468524
469525
470-func cV (cW,cX,cY) = am((cW - cX), cY)
471-
472-
473-func cZ (bu,cG) = {
474- let da = bt(bu)
475- let bx = da._1
476- let cR = da._2
477- let db = da._3
478- let cT = da._4
479- let dc = cP(bu, cG)
480- let cJ = dc._1
481- let cU = dc._2
482- let dd = bY(bx, cR, cT, cU)
483- let ch = dd._1
484- let ci = dd._2
485- cV(ch, ci, cJ)
526+func dv (bB,cr) = {
527+ let dw = bA(bB)
528+ let bE = dw._1
529+ let db = dw._2
530+ let dc = dw._3
531+ let dd = dw._4
532+ let cY = cZ(bB, an)._2
533+ let dx = cf(bE, db, dd, cY)
534+ let co = dx._1
535+ let cp = dx._2
536+ let dt = -(bE)
537+ let dy = cY
538+ let dz = -(co)
539+ let dA = cy((bE > 0), au(bE), cr)
540+ let du = dA._1
541+ let bR = dA._2
542+ let bS = dA._3
543+ let dB = dA._4
544+ let dC = dA._5
545+ let dD = dA._6
546+ let dE = dA._7
547+ let dF = (bc() - dc)
548+ $Tuple12(dt, cp, dy, dz, bR, bS, dB, dC, dF, du, dD, dE)
486549 }
487550
488551
489-func de (bu) = cZ(bu, ai)
552+func dG () = {
553+ let dH = ((lastBlock.timestamp / 1000) / 60)
554+ let dI = (dH - ah)
555+ let dJ = valueOrElse(getString(this, u), "")
556+ let dK = split(dJ, ",")
557+ func dL (aC,dM) = if ((dI >= parseIntValue(dM)))
558+ then (aC :+ parseIntValue(dM))
559+ else aC
490560
561+ let dN = {
562+ let aF = dK
563+ let aG = size(aF)
564+ let aH = nil
565+ func aI (aJ,aK) = if ((aK >= aG))
566+ then aJ
567+ else dL(aJ, aF[aK])
491568
492-func df (bu,bs) = {
493- let dg = aq(be(), (af - am(de(bu), bc())))
494- let dh = ao(ap(bs), dg)
495- let di = cr((bs > 0), dh, false)
496- let dj = di._1
497- let bW = di._8
498- if ((bg() > bW))
499- then dj
500- else {
501- let dk = ao(ap(bs), be())
502- let dl = cr((bs > 0), dk, false)._1
503- dl
504- }
569+ func aL (aJ,aK) = if ((aK >= aG))
570+ then aJ
571+ else throw("List size exceeds 20")
572+
573+ aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
574+ }
575+ let dO = if ((size(dN) > 0))
576+ then max(dN)
577+ else parseIntValue(dK[0])
578+ let dP = valueOrElse(getInteger(this, v), 0)
579+ let dQ = valueOrElse(getInteger(this, ((w + "_") + toString(dP))), 0)
580+ let dR = valueOrElse(getInteger(this, ((x + "_") + toString(dP))), 0)
581+ let dS = (dQ + ((dH - dP) * dR))
582+ let dT = valueOrElse(getInteger(this, ((w + "_") + toString(dO))), 0)
583+ let dU = valueOrElse(getInteger(this, ((x + "_") + toString(dO))), 0)
584+ let dV = (dT + ((dI - dO) * dU))
585+ ((dS - dV) / ah)
505586 }
506587
507588
508-func dm (bu,ck) = {
509- let dn = bt(bu)
510- let bx = dn._1
511- let cR = dn._2
512- let cS = dn._3
513- let cT = dn._4
514- let cU = cP(bu, ai)._2
515- let do = bY(bx, cR, cT, cU)
516- let ch = do._1
517- let ci = do._2
518- let dk = -(bx)
519- let dp = cU
520- let dq = -(ch)
521- let dr = cr((bx > 0), ap(bx), ck)
522- let dl = dr._1
523- let bK = dr._2
524- let bL = dr._3
525- let ds = dr._4
526- let dt = dr._5
527- let du = dr._6
528- let dv = dr._7
529- let dw = (aX() - cS)
530- $Tuple12(dk, ci, dp, dq, bK, bL, ds, dt, dw, dl, du, dv)
589+func dW (dX) = {
590+ let bz = ba()
591+ let dY = (bz > 0)
592+ let dZ = cy(dY, au(bz), false)._1
593+ let ea = aZ()
594+ let eb = at(ea, dX)
595+ let ec = cW(bz, dZ, eb, ea, an)._2
596+ $Tuple2(eb, ec)
531597 }
532598
533599
534-func dx () = {
535- let dy = ((lastBlock.timestamp / 1000) / 60)
536- let dz = (dy - ac)
537- let dA = valueOrElse(getString(this, t), "")
538- let dB = split(dA, ",")
539- func dC (ax,dD) = if ((dz >= parseIntValue(dD)))
540- then (ax :+ parseIntValue(dD))
541- else ax
542-
543- let dE = {
544- let aA = dB
545- let aB = size(aA)
546- let aC = nil
547- func aD (aE,aF) = if ((aF >= aB))
548- then aE
549- else dC(aE, aA[aF])
550-
551- func aG (aE,aF) = if ((aF >= aB))
552- then aE
553- else throw("List size exceeds 20")
554-
555- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
556- }
557- let dF = if ((size(dE) > 0))
558- then max(dE)
559- else parseIntValue(dB[0])
560- let dG = valueOrElse(getInteger(this, u), 0)
561- let dH = valueOrElse(getInteger(this, ((v + "_") + toString(dG))), 0)
562- let dI = valueOrElse(getInteger(this, ((w + "_") + toString(dG))), 0)
563- let dJ = (dH + ((dy - dG) * dI))
564- let dK = valueOrElse(getInteger(this, ((v + "_") + toString(dF))), 0)
565- let dL = valueOrElse(getInteger(this, ((w + "_") + toString(dF))), 0)
566- let dM = (dK + ((dz - dF) * dL))
567- ((dJ - dM) / ac)
600+func ed () = {
601+ let ee = cz()
602+ let ef = dG()
603+ let eg = (ef - ee)
604+ if (if ((bp() == 0))
605+ then true
606+ else (bq() == 0))
607+ then $Tuple2(0, 0)
608+ else if ((0 > eg))
609+ then {
610+ let eh = ar(at(eg, bf()), al)
611+ let ei = ar(at(eh, bp()), bq())
612+ $Tuple2(eh, ei)
613+ }
614+ else {
615+ let ei = ar(at(eg, bf()), al)
616+ let eh = ar(at(ei, bq()), bp())
617+ $Tuple2(eh, ei)
618+ }
568619 }
569620
570621
571-func dN (dO,dP,dQ,dR,dS,dT,dU,dV,dW) = [IntegerEntry(m, dO), IntegerEntry(n, dP), IntegerEntry(o, dQ), IntegerEntry(l, dR), IntegerEntry(k, dS), IntegerEntry(q, dT), IntegerEntry(r, dU), IntegerEntry(p, dV), IntegerEntry(s, dW)]
622+func ej (ek,el,em,en,eo,ep,eq,er,es) = [IntegerEntry(n, ek), IntegerEntry(o, el), IntegerEntry(p, em), IntegerEntry(m, en), IntegerEntry(l, eo), IntegerEntry(r, ep), IntegerEntry(s, eq), IntegerEntry(q, er), IntegerEntry(t, es)]
572623
573624
574-func dX (dY,dZ,ea,eb,ec) = [IntegerEntry(A, dY), IntegerEntry(y, dZ), IntegerEntry(z, ea), IntegerEntry(B, eb), IntegerEntry(C, ec)]
625+func et (eu,ev,ew,ex,ey) = [IntegerEntry(B, eu), IntegerEntry(z, ev), IntegerEntry(A, ew), IntegerEntry(C, ex), IntegerEntry(D, ey)]
575626
576627
577-func ed (at,ee,ef,eg,ce) = [IntegerEntry(ar(e, at), ee), IntegerEntry(ar(f, at), ef), IntegerEntry(ar(g, at), eg), IntegerEntry(ar(h, at), ce)]
628+func ez (ay,eA,eB,eC,cl) = [IntegerEntry(aw(e, ay), eA), IntegerEntry(aw(f, ay), eB), IntegerEntry(aw(g, ay), eC), IntegerEntry(aw(h, ay), cl)]
578629
579630
580-func eh (ei) = {
581- let dy = ((lastBlock.timestamp / 1000) / 60)
582- let ej = valueOrElse(getInteger(this, u), 0)
583- if ((ej > dy))
631+func eD (eE) = {
632+ let dH = ((lastBlock.timestamp / 1000) / 60)
633+ let eF = valueOrElse(getInteger(this, v), 0)
634+ if ((eF > dH))
584635 then throw("TWAP out-of-order")
585636 else {
586- let dG = if ((ej == 0))
587- then dy
588- else ej
589- if ((dy > ej))
637+ let dP = if ((eF == 0))
638+ then dH
639+ else eF
640+ if ((dH > eF))
590641 then {
591- let ek = valueOrElse(getInteger(this, ((v + "_") + toString(ej))), 0)
592- let el = valueOrElse(getInteger(this, ((w + "_") + toString(ej))), ei)
593- let em = (ek + ((dy - dG) * el))
594- let dB = aL(aJ(valueOrElse(getString(this, t), "")), ac, toString(dy))
595-[IntegerEntry(ar(v, toString(dy)), em), IntegerEntry(ar(w, toString(dy)), ei), IntegerEntry(ar(x, toString(dy)), ej), IntegerEntry(u, dy), StringEntry(t, au(dB))]
642+ let eG = valueOrElse(getInteger(this, ((w + "_") + toString(eF))), 0)
643+ let eH = valueOrElse(getInteger(this, ((x + "_") + toString(eF))), eE)
644+ let eI = (eG + ((dH - dP) * eH))
645+ let dK = aQ(aO(valueOrElse(getString(this, u), "")), ah, toString(dH))
646+[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE), IntegerEntry(aw(y, toString(dH)), eF), IntegerEntry(v, dH), StringEntry(u, az(dK))]
596647 }
597648 else {
598- let en = valueOrElse(getInteger(this, ar(x, toString(dy))), 0)
599- let ek = valueOrElse(getInteger(this, ar(v, toString(en))), 0)
600- let el = valueOrElse(getInteger(this, ar(w, toString(en))), ei)
601- let em = (ek + ((dy - en) * el))
602-[IntegerEntry(ar(v, toString(dy)), em), IntegerEntry(ar(w, toString(dy)), ei)]
649+ let eJ = valueOrElse(getInteger(this, aw(y, toString(dH))), 0)
650+ let eG = valueOrElse(getInteger(this, aw(w, toString(eJ))), 0)
651+ let eH = valueOrElse(getInteger(this, aw(x, toString(eJ))), eE)
652+ let eI = (eG + ((dH - eJ) * eH))
653+[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE)]
603654 }
604655 }
605656 }
606657
607658
608-func eo (bI,bJ) = [IntegerEntry(D, bI), IntegerEntry(E, bJ)]
659+func eK (bP,bQ) = [IntegerEntry(E, bP), IntegerEntry(F, bQ)]
609660
610661
611-func ep (bI,bJ,eq,er,es,et,eu) = if (((et - eu) != eq))
612- then throw(((((("Invalid AMM state data: " + toString(et)) + " + ") + toString(eu)) + " != ") + toString(eq)))
613- else ((eo(bI, bJ) ++ [IntegerEntry(F, eq), IntegerEntry(I, er), IntegerEntry(J, es), IntegerEntry(G, et), IntegerEntry(H, eu)]) ++ eh(am(bI, bJ)))
662+func eL (bP,bQ,eM,eN,eO,eP,eQ) = if (((eP - eQ) != eM))
663+ then throw(((((("Invalid AMM state data: " + toString(eP)) + " + ") + toString(eQ)) + " != ") + toString(eM)))
664+ else ((eK(bP, bQ) ++ [IntegerEntry(G, eM), IntegerEntry(J, eN), IntegerEntry(K, eO), IntegerEntry(H, eP), IntegerEntry(I, eQ)]) ++ eD(ar(bP, bQ)))
614665
615666
616-func ev (at) = [DeleteEntry(ar(e, at)), DeleteEntry(ar(f, at)), DeleteEntry(ar(g, at)), DeleteEntry(ar(h, at))]
667+func eR (ay) = [DeleteEntry(aw(e, ay)), DeleteEntry(aw(f, ay)), DeleteEntry(aw(g, ay)), DeleteEntry(aw(h, ay)), IntegerEntry(aw(i, ay), lastBlock.timestamp)]
617668
618669
619-func ew (at,ex) = {
620- let ey = assetBalance(this, V())
621- if ((ex > ey))
622- then throw(((("Unable to withdraw " + toString(ex)) + " from contract balance ") + toString(ey)))
623- else [ScriptTransfer(at, ex, V())]
670+func eS (ay,eT) = {
671+ let eU = assetBalance(this, Y())
672+ if ((eT > eU))
673+ then throw(((("Unable to withdraw " + toString(eT)) + " from contract balance ") + toString(eU)))
674+ else [ScriptTransfer(ay, eT, Y())]
624675 }
625676
626677
627-func ez (eA) = if ((0 > eA))
678+func eV (bs) = if ((0 > bs))
628679 then throw("Balance")
629- else [IntegerEntry(d, eA)]
680+ else [IntegerEntry(d, bs)]
630681
631682
632-func eB (eA) = [ScriptTransfer(X(), eA, V())]
683+func eW (bs) = [ScriptTransfer(aa(), bs, Y())]
633684
634685
635-@Callable(eA)
636-func pause () = if ((eA.caller != T()))
686+@Callable(bs)
687+func pause () = if ((bs.caller != W()))
637688 then throw("Invalid togglePause params")
638- else [BooleanEntry(j, true)]
689+ else [BooleanEntry(k, true)]
639690
640691
641692
642-@Callable(eA)
643-func unpause () = if ((eA.caller != T()))
693+@Callable(bs)
694+func unpause () = if ((bs.caller != W()))
644695 then throw("Invalid togglePause params")
645- else [BooleanEntry(j, false)]
696+ else [BooleanEntry(k, false)]
646697
647698
648699
649-@Callable(eA)
650-func addLiquidity (bD) = if (if ((eA.caller != T()))
700+@Callable(bs)
701+func addLiquidity (bK) = if (if ((bs.caller != W()))
651702 then true
652- else (0 >= bD))
703+ else (0 >= bK))
653704 then throw("Invalid addLiquidity params")
654705 else {
655- let bI = aT()
656- let bJ = aU()
657- let ei = am(bI, bJ)
658- let eC = am(bD, ei)
659- let eD = (bI + bD)
660- let eE = (bJ + eC)
661- eo(eD, eE)
706+ let bP = aY()
707+ let bQ = aZ()
708+ let eE = ar(bP, bQ)
709+ let eX = ar(bK, eE)
710+ let eY = (bP + bK)
711+ let eZ = (bQ + eX)
712+ eK(eY, eZ)
662713 }
663714
664715
665716
666-@Callable(eA)
667-func removeLiquidity (bD) = if (if ((eA.caller != T()))
717+@Callable(bs)
718+func removeLiquidity (bK) = if (if ((bs.caller != W()))
668719 then true
669- else (0 >= bD))
720+ else (0 >= bK))
670721 then throw("Invalid removeLiquidity params")
671722 else {
672- let bI = aT()
673- let bJ = aU()
674- let ei = am(bI, bJ)
675- let eF = am(bD, ei)
676- let eD = (bI - bD)
677- let eE = (bJ - eF)
678- eo(eD, eE)
723+ let bP = aY()
724+ let bQ = aZ()
725+ let eE = ar(bP, bQ)
726+ let fa = ar(bK, eE)
727+ let eY = (bP - bK)
728+ let eZ = (bQ - fa)
729+ eK(eY, eZ)
679730 }
680731
681732
682733
683-@Callable(eA)
684-func changeSettings (dO,dP,dQ,dR,dS,dT,dU,dV,dW) = if ((eA.caller != T()))
734+@Callable(bs)
735+func changeSettings (ek,el,em,en,eo,ep,eq,er,es) = if ((bs.caller != W()))
685736 then throw("Invalid changeSettings params")
686- else dN(dO, dP, dQ, dR, dS, dT, dU, dV, dW)
737+ else ej(ek, el, em, en, eo, ep, eq, er, es)
687738
688739
689740
690-@Callable(eA)
691-func initialize (bI,bJ,dR,dO,dP,dQ,dS,eG,eH,eI,dT,dU,dV,dW) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bI))
741+@Callable(bs)
742+func initialize (bP,bQ,en,ek,el,em,eo,fb,fc,fd,ep,eq,er,es) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bP))
692743 then true
693- else (0 >= bJ))
744+ else (0 >= bQ))
694745 then true
695- else (0 >= dR))
746+ else (0 >= en))
696747 then true
697- else (0 >= dO))
748+ else (0 >= ek))
698749 then true
699- else (0 >= dP))
750+ else (0 >= el))
700751 then true
701- else (0 >= dQ))
752+ else (0 >= em))
702753 then true
703- else (0 >= dS))
754+ else (0 >= eo))
704755 then true
705- else (0 >= dT))
756+ else (0 >= ep))
706757 then true
707- else (0 >= dU))
758+ else (0 >= eq))
708759 then true
709- else (0 >= dV))
760+ else (0 >= er))
710761 then true
711- else (0 >= dW))
762+ else (0 >= es))
712763 then true
713- else bz())
764+ else bG())
714765 then throw("Invalid initialize parameters")
715- else ((((ep(bI, bJ, 0, 0, 0, 0, 0) ++ dN(dO, dP, dQ, dR, dS, dT, dU, dV, dW)) ++ dX((lastBlock.timestamp + dR), 0, 0, 0, 0)) ++ ez(0)) ++ [BooleanEntry(i, true), StringEntry(c, eG), StringEntry(a, eH), StringEntry(K, eI)])
766+ else ((((eL(bP, bQ, 0, 0, 0, 0, 0) ++ ej(ek, el, em, en, eo, ep, eq, er, es)) ++ et((lastBlock.timestamp + en), 0, 0, 0, 0)) ++ eV(0)) ++ [BooleanEntry(j, true), StringEntry(c, fb), StringEntry(a, fc), StringEntry(L, fd)])
716767
717768
718769
719-@Callable(eA)
720-func setInitMarginRatio (dO) = if (if ((0 >= dO))
770+@Callable(bs)
771+func setInitMarginRatio (ek) = if (if ((0 >= ek))
721772 then true
722- else !(bz()))
773+ else !(bG()))
723774 then throw("Invalid setInitMarginRatio parameters")
724- else dN(dO, bc(), bd(), aZ(), aR(), bf(), bg(), be(), bh())
775+ else ej(ek, bh(), bi(), be(), aW(), bk(), bl(), bj(), bm())
725776
726777
727778
728-@Callable(eA)
729-func decreasePosition (ex,eJ,eK) = if (if (if (if (if ((0 >= ex))
779+@Callable(bs)
780+func decreasePosition (eT,fe,ff) = if (if (if (if (if ((0 >= eT))
730781 then true
731- else !(bz()))
782+ else !(bG()))
732783 then true
733- else !(bm(am(af, eJ), aS(), true)))
784+ else !(bt(ar(ak, fe), aX(), true)))
734785 then true
735- else !(by(toString(eA.caller))))
786+ else !(bF(toString(bs.caller))))
736787 then true
737- else bA())
788+ else bH())
738789 then throw("Invalid decreasePosition parameters")
739790 else {
740- let eL = bt(toString(eA.caller))
741- let eM = eL._1
742- let eN = eL._2
743- let eO = eL._3
744- let eP = eL._4
745- let eQ = if ((eM > 0))
746- then ab
747- else aa
748- let eR = (eQ == aa)
749- let eS = ao(ex, eJ)
750- let eT = cP(toString(eA.caller), ai)
751- let eU = eT._1
752- let cU = eT._2
753- let eV = if ((eU > eS))
791+ let fg = bA(toString(bs.caller))
792+ let fh = fg._1
793+ let fi = fg._2
794+ let fj = fg._3
795+ let fk = fg._4
796+ let fl = if ((fh > 0))
797+ then ag
798+ else af
799+ let fm = (fl == af)
800+ let fn = at(eT, fe)
801+ let fo = cZ(toString(bs.caller), an)
802+ let fp = fo._1
803+ let cY = fo._2
804+ let fq = if ((fp > fn))
754805 then {
755- let eW = bH(eR, eS)
756- let dk = eW._1
757- let bK = eW._2
758- let bL = eW._3
759- let ds = eW._4
760- let dt = eW._5
761- let eX = ap(dk)
762- if (if ((eK != 0))
763- then (eK > eX)
806+ let fr = bO(fm, fn)
807+ let dt = fr._1
808+ let bR = fr._2
809+ let bS = fr._3
810+ let dB = fr._4
811+ let dC = fr._5
812+ let fs = au(dt)
813+ if (if ((ff != 0))
814+ then (ff > fs)
764815 else false)
765- then throw(((("Too little base asset exchanged, got " + toString(eX)) + " expected ") + toString(eK)))
816+ then throw(((("Too little base asset exchanged, got " + toString(fs)) + " expected ") + toString(ff)))
766817 else {
767- let dp = am(ao(cU, eX), ap(eM))
768- let eY = bY(eM, eN, eP, dp)
769- let ch = eY._1
770- let ci = eY._2
771- let cd = eY._3
772- let dl = eS
773- let eZ = (cU - dp)
774- let fa = if ((eM > 0))
775- then ((eU - dl) - eZ)
776- else ((eZ + eU) - dl)
777- let fb = (eM + dk)
778- $Tuple11(fb, ch, ap(fa), br(fb), bL, bK, ds, dt, (aX() - eS), (bl() - (if ((fb > 0))
779- then ap(dk)
780- else 0)), (bk() - (if ((0 > fb))
781- then ap(dk)
818+ let dy = ar(at(cY, fs), au(fh))
819+ let ft = cf(fh, fi, fk, dy)
820+ let co = ft._1
821+ let cp = ft._2
822+ let ck = ft._3
823+ let du = fn
824+ let fu = (cY - dy)
825+ let fv = if ((fh > 0))
826+ then ((fp - du) - fu)
827+ else ((fu + fp) - du)
828+ let fw = (fh + dt)
829+ $Tuple11(fw, co, au(fv), by(fw), bS, bR, dB, dC, (bc() - fn), (bq() - (if ((fw > 0))
830+ then au(dt)
831+ else 0)), (bp() - (if ((0 > fw))
832+ then au(dt)
782833 else 0)))
783834 }
784835 }
785836 else throw("Close position first")
786- let fb = eV._1
787- let fc = eV._2
788- let fd = eV._3
789- let fe = eV._4
790- let bL = eV._5
791- let bK = eV._6
792- let ds = eV._7
793- let dt = eV._8
794- let dw = eV._9
795- let du = eV._10
796- let dv = eV._11
797- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), fd], nil)
798- if ((ff == ff))
799- then (ed(toString(eA.caller), fb, fc, fd, fe) ++ ep(bK, bL, ds, dt, dw, du, dv))
837+ let fw = fq._1
838+ let fx = fq._2
839+ let fy = fq._3
840+ let fz = fq._4
841+ let bS = fq._5
842+ let bR = fq._6
843+ let dB = fq._7
844+ let dC = fq._8
845+ let dF = fq._9
846+ let dD = fq._10
847+ let dE = fq._11
848+ let fA = invoke(ac(), "notifyNotional", [toString(bs.caller), fy], nil)
849+ if ((fA == fA))
850+ then (ez(toString(bs.caller), fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE))
800851 else throw("Strict value is not equal to itself.")
801852 }
802853
803854
804855
805-@Callable(eA)
806-func increasePosition (eQ,eJ,eK) = {
807- let fg = eA.payments[0].amount
808- if (if (if (if (if (if (if ((eQ != aa))
809- then (eQ != ab)
856+@Callable(bs)
857+func increasePosition (fl,fe,ff,fB) = {
858+ let fC = bs.payments[0].amount
859+ if (if (if (if (if (if (if ((fl != af))
860+ then (fl != ag)
810861 else false)
811862 then true
812- else (0 >= fg))
863+ else (0 >= fC))
813864 then true
814- else !(bz()))
865+ else !(bG()))
815866 then true
816- else (eA.payments[0].assetId != V()))
867+ else (bs.payments[0].assetId != Y()))
817868 then true
818- else !(bm(am(af, eJ), aS(), true)))
869+ else !(bt(ar(ak, fe), aX(), true)))
819870 then true
820- else bA())
871+ else bH())
821872 then throw("Invalid increasePosition parameters")
822873 else {
823- let fh = ao(fg, aR())
824- let ex = (fg - fh)
825- let fi = bt(toString(eA.caller))
826- let eM = fi._1
827- let eN = fi._2
828- let eO = fi._3
829- let eP = fi._4
830- let fj = (eM == 0)
831- let fk = if ((eM > 0))
832- then (eQ == aa)
833- else (eQ == ab)
834- let fl = if (!(fj))
835- then fk
836- else false
837- let eR = (eQ == aa)
838- let fm = if (if (fj)
839- then true
840- else fl)
874+ let bB = toString(bs.caller)
875+ let fD = at(fC, aW())
876+ let fE = invoke(ae(), "acceptPaymentWithLink", [bB, fB], [AttachedPayment(Y(), fD)])
877+ if ((fE == fE))
841878 then {
842- let eS = ao(ex, eJ)
843- let fn = bH(eR, eS)
844- let bN = fn._1
845- let bK = fn._2
846- let bL = fn._3
847- let ds = fn._4
848- let dt = fn._5
849- if (if ((eK != 0))
850- then (eK > ap(bN))
851- else false)
852- then throw(((("Limit error: " + toString(ap(bN))) + " < ") + toString(eK)))
879+ let fF = {
880+ let bD = fE
881+ if ($isInstanceOf(bD, "Int"))
882+ then {
883+ let fG = bD
884+ fG
885+ }
886+ else throw("Invalid referrerFee")
887+ }
888+ let eT = (fC - fD)
889+ let fH = (fD - fF)
890+ let fI = bA(bB)
891+ let fh = fI._1
892+ let fi = fI._2
893+ let fj = fI._3
894+ let fk = fI._4
895+ let fJ = (fh == 0)
896+ let fK = if ((fh > 0))
897+ then (fl == af)
898+ else (fl == ag)
899+ let fL = if (!(fJ))
900+ then fK
901+ else false
902+ let fm = (fl == af)
903+ let fM = if (if (fJ)
904+ then true
905+ else fL)
906+ then {
907+ let fn = at(eT, fe)
908+ let fN = bO(fm, fn)
909+ let bU = fN._1
910+ let bR = fN._2
911+ let bS = fN._3
912+ let dB = fN._4
913+ let dC = fN._5
914+ if (if ((ff != 0))
915+ then (ff > au(bU))
916+ else false)
917+ then throw(((("Limit error: " + toString(au(bU))) + " < ") + toString(ff)))
918+ else {
919+ let fw = (fh + bU)
920+ let fO = ar(fn, fe)
921+ let fP = cf(fh, fi, fk, fO)
922+ let co = fP._1
923+ let cT = fP._2
924+ let cU = fP._3
925+ if (!(cE(bR, bS)))
926+ then throw("Over max spread limit")
927+ else $Tuple11(fw, co, (fj + fn), by(fw), bS, bR, dB, dC, (bc() + fn), (bq() + (if ((fw > 0))
928+ then au(bU)
929+ else 0)), (bp() + (if ((0 > fw))
930+ then au(bU)
931+ else 0)))
932+ }
933+ }
853934 else {
854- let fb = (eM + bN)
855- let fo = am(eS, eJ)
856- let fp = bY(eM, eN, eP, fo)
857- let ch = fp._1
858- let cM = fp._2
859- let cN = fp._3
860- if (!(cx(bK, bL)))
861- then throw("Over max spread limit")
862- else $Tuple11(fb, ch, (eO + eS), br(fb), bL, bK, ds, dt, (aX() + eS), (bl() + (if ((fb > 0))
863- then ap(bN)
864- else 0)), (bk() + (if ((0 > fb))
865- then ap(bN)
866- else 0)))
935+ let fn = at(eT, fe)
936+ let fQ = cZ(toString(bs.caller), an)
937+ let fp = fQ._1
938+ let cY = fQ._2
939+ if ((fp > fn))
940+ then throw("Use decreasePosition to decrease position size")
941+ else throw("Close position first")
867942 }
868- }
869- else {
870- let eS = ao(ex, eJ)
871- let fq = cP(toString(eA.caller), ai)
872- let eU = fq._1
873- let cU = fq._2
874- if ((eU > eS))
875- then throw("Use decreasePosition to decrease position size")
876- else throw("Close position first")
877- }
878- let fb = fm._1
879- let fc = fm._2
880- let fd = fm._3
881- let fe = fm._4
882- let bL = fm._5
883- let bK = fm._6
884- let ds = fm._7
885- let dt = fm._8
886- let dw = fm._9
887- let du = fm._10
888- let dv = fm._11
889- let fr = (fh / 2)
890- let fs = (fh - fr)
891- let ft = invoke(W(), "lockNeutrinoSP", [toString(X()), ah], [AttachedPayment(V(), ex)])
892- if ((ft == ft))
893- then {
894- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
895- if ((fu == fu))
943+ let fw = fM._1
944+ let fx = fM._2
945+ let fy = fM._3
946+ let fz = fM._4
947+ let bS = fM._5
948+ let bR = fM._6
949+ let dB = fM._7
950+ let dC = fM._8
951+ let dF = fM._9
952+ let dD = fM._10
953+ let dE = fM._11
954+ let fR = (fH / 2)
955+ let fS = (fH - fR)
956+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
957+ if ((fT == fT))
896958 then {
897- let fv = invoke(Z(), "notifyFees", [toString(eA.caller), fh], nil)
898- if ((fv == fv))
959+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
960+ if ((fU == fU))
899961 then {
900- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), fd], nil)
901- if ((ff == ff))
902- then (((ed(toString(eA.caller), fb, fc, fd, fe) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ eB(fr)) ++ ez((aQ() + ex)))
962+ let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
963+ if ((fV == fV))
964+ then {
965+ let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
966+ if ((fA == fA))
967+ then (((ez(bB, fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eW(fR)) ++ eV((aV() + eT)))
968+ else throw("Strict value is not equal to itself.")
969+ }
903970 else throw("Strict value is not equal to itself.")
904971 }
905972 else throw("Strict value is not equal to itself.")
906973 }
907974 else throw("Strict value is not equal to itself.")
908975 }
909976 else throw("Strict value is not equal to itself.")
910977 }
911978 }
912979
913980
914981
915-@Callable(eA)
982+@Callable(bs)
916983 func addMargin () = {
917- let fg = eA.payments[0].amount
918- if (if (if (if ((eA.payments[0].assetId != V()))
984+ let fC = bs.payments[0].amount
985+ if (if (if (if ((bs.payments[0].assetId != Y()))
919986 then true
920- else !(by(toString(eA.caller))))
987+ else !(bF(toString(bs.caller))))
921988 then true
922- else !(bz()))
989+ else !(bG()))
923990 then true
924- else bA())
991+ else bH())
925992 then throw("Invalid addMargin parameters")
926993 else {
927- let fh = ao(fg, aR())
928- let ex = (fg - fh)
929- let fw = bt(toString(eA.caller))
930- let eM = fw._1
931- let eN = fw._2
932- let eO = fw._3
933- let eP = fw._4
934- let fr = (fh / 2)
935- let fs = (fh - fr)
936- let ft = invoke(W(), "lockNeutrinoSP", [toString(X()), ah], [AttachedPayment(V(), ex)])
937- if ((ft == ft))
994+ let bB = toString(bs.caller)
995+ let fD = at(fC, aW())
996+ let fE = invoke(ae(), "acceptPayment", [bB], [AttachedPayment(Y(), fD)])
997+ if ((fE == fE))
938998 then {
939- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
940- if ((fu == fu))
999+ let fF = {
1000+ let bD = fE
1001+ if ($isInstanceOf(bD, "Int"))
1002+ then {
1003+ let fG = bD
1004+ fG
1005+ }
1006+ else throw("Invalid referrerFee")
1007+ }
1008+ let fH = (fD - fF)
1009+ let eT = (fC - fD)
1010+ let fW = bA(bB)
1011+ let fh = fW._1
1012+ let fi = fW._2
1013+ let fj = fW._3
1014+ let fk = fW._4
1015+ let fR = (fH / 2)
1016+ let fS = (fH - fR)
1017+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
1018+ if ((fT == fT))
9411019 then {
942- let fv = invoke(Z(), "notifyFees", [toString(eA.caller), fh], nil)
943- if ((fv == fv))
944- then ((ed(toString(eA.caller), eM, (eN + ex), eO, eP) ++ eB(fr)) ++ ez((aQ() + ex)))
1020+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1021+ if ((fU == fU))
1022+ then {
1023+ let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
1024+ if ((fV == fV))
1025+ then ((ez(bB, fh, (fi + eT), fj, fk) ++ eW(fR)) ++ eV((aV() + eT)))
1026+ else throw("Strict value is not equal to itself.")
1027+ }
9451028 else throw("Strict value is not equal to itself.")
9461029 }
9471030 else throw("Strict value is not equal to itself.")
9481031 }
9491032 else throw("Strict value is not equal to itself.")
9501033 }
9511034 }
9521035
9531036
9541037
955-@Callable(eA)
956-func removeMargin (ex) = if (if (if (if ((0 >= ex))
1038+@Callable(bs)
1039+func removeMargin (eT) = if (if (if (if ((0 >= eT))
9571040 then true
958- else !(by(toString(eA.caller))))
1041+ else !(bF(toString(bs.caller))))
9591042 then true
960- else !(bz()))
1043+ else !(bG()))
9611044 then true
962- else bA())
1045+ else bH())
9631046 then throw("Invalid removeMargin parameters")
9641047 else {
965- let fx = bt(toString(eA.caller))
966- let eM = fx._1
967- let eN = fx._2
968- let eO = fx._3
969- let eP = fx._4
970- let fy = -(ex)
971- let fz = bY(eM, eN, eP, fy)
972- let ch = fz._1
973- let ci = fz._2
974- if ((ci != 0))
1048+ let fX = bA(toString(bs.caller))
1049+ let fh = fX._1
1050+ let fi = fX._2
1051+ let fj = fX._3
1052+ let fk = fX._4
1053+ let fY = -(eT)
1054+ let fZ = cf(fh, fi, fk, fY)
1055+ let co = fZ._1
1056+ let cp = fZ._2
1057+ if ((cp != 0))
9751058 then throw("Invalid removed margin amount")
9761059 else {
977- let fA = cV(ch, ci, eO)
978- if (!(bm(fA, aS(), true)))
979- then throw(((("Too much margin removed: " + toString(fA)) + " < ") + toString(aS())))
1060+ let ga = de(co, cp, fj)
1061+ if (!(bt(ga, aX(), true)))
1062+ then throw(((("Too much margin removed: " + toString(ga)) + " < ") + toString(aX())))
9801063 else {
981- let fB = invoke(W(), "unlockNeutrino", [ex, toBase58String(V())], nil)
982- if ((fB == fB))
983- then ((ed(toString(eA.caller), eM, ch, eO, br(eM)) ++ ew(eA.caller, ex)) ++ ez((aQ() - ex)))
1064+ let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1065+ if ((gb == gb))
1066+ then ((ez(toString(bs.caller), fh, co, fj, by(fh)) ++ eS(bs.caller, eT)) ++ eV((aV() - eT)))
9841067 else throw("Strict value is not equal to itself.")
9851068 }
9861069 }
9871070 }
9881071
9891072
9901073
991-@Callable(eA)
992-func closePosition () = if (if (if (!(by(toString(eA.caller))))
993- then true
994- else !(bz()))
995- then true
996- else bA())
997- then throw("Invalid closePosition parameters")
998- else {
999- let fC = dm(toString(eA.caller), true)
1000- let cM = fC._1
1001- let fD = fC._2
1002- let dp = fC._3
1003- let dq = fC._4
1004- let bK = fC._5
1005- let bL = fC._6
1006- let ds = fC._7
1007- let dt = fC._8
1008- let dw = fC._9
1009- let cN = fC._10
1010- let du = fC._11
1011- let dv = fC._12
1012- if ((fD > 0))
1013- then throw("Unable to close position with bad debt")
1014- else {
1015- let fE = ap(dq)
1016- let fF = (aQ() - fE)
1017- let fG = if ((0 > fF))
1018- then $Tuple2(0, ap(fF))
1019- else $Tuple2(fF, 0)
1020- let fH = fG._1
1021- let fI = fG._2
1022- let fJ = if ((fI > 0))
1074+@Callable(bs)
1075+func closePosition () = {
1076+ let gc = br(bs)
1077+ let gd = valueOrErrorMessage(addressFromString(gc), "Invalid caller")
1078+ if (if (if (!(bF(gc)))
1079+ then true
1080+ else !(bG()))
1081+ then true
1082+ else bH())
1083+ then throw("Invalid closePosition parameters")
1084+ else {
1085+ let ge = dv(gc, true)
1086+ let cT = ge._1
1087+ let gf = ge._2
1088+ let dy = ge._3
1089+ let dz = ge._4
1090+ let bR = ge._5
1091+ let bS = ge._6
1092+ let dB = ge._7
1093+ let dC = ge._8
1094+ let dF = ge._9
1095+ let cU = ge._10
1096+ let dD = ge._11
1097+ let dE = ge._12
1098+ if ((gf > 0))
1099+ then throw("Unable to close position with bad debt")
1100+ else {
1101+ let gg = au(dz)
1102+ let gh = (aV() - gg)
1103+ let gi = if ((0 > gh))
1104+ then $Tuple2(0, au(gh))
1105+ else $Tuple2(gh, 0)
1106+ let gj = gi._1
1107+ let gk = gi._2
1108+ let fG = if ((gk > 0))
1109+ then {
1110+ let gl = invoke(ab(), "withdraw", [gk], nil)
1111+ if ((gl == gl))
1112+ then nil
1113+ else throw("Strict value is not equal to itself.")
1114+ }
1115+ else nil
1116+ if ((fG == fG))
1117+ then {
1118+ let gb = invoke(Z(), "unlockNeutrino", [(gg - gk), toBase58String(Y())], nil)
1119+ if ((gb == gb))
1120+ then {
1121+ let fA = invoke(ac(), "notifyNotional", [gc, 0], nil)
1122+ if ((fA == fA))
1123+ then (((eR(gc) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(gd, gg)) ++ eV(gj))
1124+ else throw("Strict value is not equal to itself.")
1125+ }
1126+ else throw("Strict value is not equal to itself.")
1127+ }
1128+ else throw("Strict value is not equal to itself.")
1129+ }
1130+ }
1131+ }
1132+
1133+
1134+
1135+@Callable(bs)
1136+func liquidate (bB) = {
1137+ let gm = di(bB, an)
1138+ let ga = if (cK())
1139+ then {
1140+ let gn = di(bB, ao)
1141+ av(gm, gn)
1142+ }
1143+ else gm
1144+ if (if (if (if (!(bt(ga, bh(), false)))
1145+ then true
1146+ else !(bF(bB)))
1147+ then true
1148+ else !(bG()))
1149+ then true
1150+ else bH())
1151+ then throw("Unable to liquidate")
1152+ else if (if (if ((gm > bi()))
1153+ then (bj() > 0)
1154+ else false)
1155+ then (ak > bj())
1156+ else false)
1157+ then {
1158+ let go = bA(bB)
1159+ let fh = go._1
1160+ let fi = go._2
1161+ let fj = go._3
1162+ let fk = go._4
1163+ let fl = if ((fh > 0))
1164+ then ag
1165+ else af
1166+ let fm = (fl == af)
1167+ let du = do(bB, fh)
1168+ let gp = cZ(bB, an)
1169+ let fp = gp._1
1170+ let cY = gp._2
1171+ let gq = bO(fm, du)
1172+ let dt = gq._1
1173+ let bR = gq._2
1174+ let bS = gq._3
1175+ let dB = gq._4
1176+ let dC = gq._5
1177+ let dy = ar(at(cY, au(dt)), au(fh))
1178+ let gr = cf(fh, fi, fk, dy)
1179+ let co = gr._1
1180+ let cp = gr._2
1181+ let ck = gr._3
1182+ let fu = (cY - dy)
1183+ let fv = if ((fh > 0))
1184+ then ((fp - du) - fu)
1185+ else ((fu + fp) - du)
1186+ let gs = at(du, bi())
1187+ let gt = (gs / 2)
1188+ let fS = (gs - gt)
1189+ let gu = (co - gs)
1190+ let fw = (fh + dt)
1191+ let fy = au(fv)
1192+ let gv = by(fw)
1193+ let dF = (bc() - du)
1194+ let gh = (aV() - gs)
1195+ let gw = if ((0 > gh))
1196+ then $Tuple2(0, au(gh))
1197+ else $Tuple2(gh, 0)
1198+ let gx = gw._1
1199+ let gy = gw._2
1200+ let fG = if ((gy > 0))
10231201 then {
1024- let fK = invoke(Y(), "withdraw", [fI], nil)
1025- if ((fK == fK))
1202+ let gl = invoke(ab(), "withdraw", [gy], nil)
1203+ if ((gl == gl))
10261204 then nil
10271205 else throw("Strict value is not equal to itself.")
10281206 }
10291207 else nil
1030- if ((fJ == fJ))
1208+ if ((fG == fG))
10311209 then {
1032- let fB = invoke(W(), "unlockNeutrino", [(fE - fI), toBase58String(V())], nil)
1033- if ((fB == fB))
1210+ let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1211+ if ((gb == gb))
10341212 then {
1035- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), 0], nil)
1036- if ((ff == ff))
1037- then (((ev(toString(eA.caller)) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ ew(eA.caller, fE)) ++ ez(fH))
1038- else throw("Strict value is not equal to itself.")
1039- }
1040- else throw("Strict value is not equal to itself.")
1041- }
1042- else throw("Strict value is not equal to itself.")
1043- }
1044- }
1045-
1046-
1047-
1048-@Callable(eA)
1049-func liquidate (bu) = {
1050- let fL = cZ(bu, ai)
1051- let fA = if (cD())
1052- then {
1053- let fM = cZ(bu, aj)
1054- aq(fL, fM)
1055- }
1056- else fL
1057- if (if (if (if (!(bm(fA, bc(), false)))
1058- then true
1059- else !(by(bu)))
1060- then true
1061- else !(bz()))
1062- then true
1063- else bA())
1064- then throw("Unable to liquidate")
1065- else if (if (if ((fL > bd()))
1066- then (be() > 0)
1067- else false)
1068- then (af > be())
1069- else false)
1070- then {
1071- let fN = bt(bu)
1072- let eM = fN._1
1073- let eN = fN._2
1074- let eO = fN._3
1075- let eP = fN._4
1076- let eQ = if ((eM > 0))
1077- then ab
1078- else aa
1079- let eR = (eQ == aa)
1080- let dl = df(bu, eM)
1081- let fO = cP(bu, ai)
1082- let eU = fO._1
1083- let cU = fO._2
1084- let fP = bH(eR, dl)
1085- let dk = fP._1
1086- let bK = fP._2
1087- let bL = fP._3
1088- let ds = fP._4
1089- let dt = fP._5
1090- let dp = am(ao(cU, ap(dk)), ap(eM))
1091- let fQ = bY(eM, eN, eP, dp)
1092- let ch = fQ._1
1093- let ci = fQ._2
1094- let cd = fQ._3
1095- let eZ = (cU - dp)
1096- let fa = if ((eM > 0))
1097- then ((eU - dl) - eZ)
1098- else ((eZ + eU) - dl)
1099- let fR = ao(dl, bd())
1100- let fS = (fR / 2)
1101- let fs = (fR - fS)
1102- let fT = (ch - fR)
1103- let fb = (eM + dk)
1104- let fd = ap(fa)
1105- let fU = br(fb)
1106- let dw = (aX() - dl)
1107- let fF = (aQ() - fR)
1108- let fV = if ((0 > fF))
1109- then $Tuple2(0, ap(fF))
1110- else $Tuple2(fF, 0)
1111- let fW = fV._1
1112- let fX = fV._2
1113- let fJ = if ((fX > 0))
1114- then {
1115- let fK = invoke(Y(), "withdraw", [fX], nil)
1116- if ((fK == fK))
1117- then nil
1118- else throw("Strict value is not equal to itself.")
1119- }
1120- else nil
1121- if ((fJ == fJ))
1122- then {
1123- let fB = invoke(W(), "unlockNeutrino", [(fR - fX), toBase58String(V())], nil)
1124- if ((fB == fB))
1125- then {
1126- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
1127- if ((fu == fu))
1213+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1214+ if ((fU == fU))
11281215 then {
1129- let ff = invoke(Z(), "notifyNotional", [bu, fd], nil)
1130- if ((ff == ff))
1131- then (((ed(bu, fb, fT, fd, fU) ++ ep(bK, bL, ds, dt, dw, (bl() - (if ((fb > 0))
1132- then ap(dk)
1133- else 0)), (bk() - (if ((0 > fb))
1134- then ap(dk)
1135- else 0)))) ++ ew(eA.caller, fS)) ++ ez(fW))
1216+ let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
1217+ if ((fA == fA))
1218+ then (((ez(bB, fw, gu, fy, gv) ++ eL(bR, bS, dB, dC, dF, (bq() - (if ((fw > 0))
1219+ then au(dt)
1220+ else 0)), (bp() - (if ((0 > fw))
1221+ then au(dt)
1222+ else 0)))) ++ eS(bs.caller, gt)) ++ eV(gx))
11361223 else throw("Strict value is not equal to itself.")
11371224 }
11381225 else throw("Strict value is not equal to itself.")
11391226 }
11401227 else throw("Strict value is not equal to itself.")
11411228 }
11421229 else throw("Strict value is not equal to itself.")
11431230 }
11441231 else {
1145- let fY = dm(bu, false)
1146- let cM = fY._1
1147- let ci = fY._2
1148- let cN = fY._3
1149- let cO = fY._4
1150- let bK = fY._5
1151- let bL = fY._6
1152- let ds = fY._7
1153- let dt = fY._8
1154- let dw = fY._9
1155- let dl = fY._10
1156- let du = fY._11
1157- let dv = fY._12
1158- let fR = ao(dl, bd())
1159- let fS = (fR / 2)
1160- let fs = (fR - fS)
1161- let fF = (aQ() - fR)
1162- let fZ = if ((0 > fF))
1163- then $Tuple2(0, ap(fF))
1164- else $Tuple2(fF, 0)
1165- let fW = fZ._1
1166- let fX = fZ._2
1167- let fJ = if ((fX > 0))
1232+ let gz = dv(bB, false)
1233+ let cT = gz._1
1234+ let cp = gz._2
1235+ let cU = gz._3
1236+ let cV = gz._4
1237+ let bR = gz._5
1238+ let bS = gz._6
1239+ let dB = gz._7
1240+ let dC = gz._8
1241+ let dF = gz._9
1242+ let du = gz._10
1243+ let dD = gz._11
1244+ let dE = gz._12
1245+ let gs = at(du, bi())
1246+ let gt = (gs / 2)
1247+ let fS = (gs - gt)
1248+ let gh = (aV() - gs)
1249+ let gA = if ((0 > gh))
1250+ then $Tuple2(0, au(gh))
1251+ else $Tuple2(gh, 0)
1252+ let gx = gA._1
1253+ let gy = gA._2
1254+ let fG = if ((gy > 0))
11681255 then {
1169- let fK = invoke(Y(), "withdraw", [fX], nil)
1170- if ((fK == fK))
1256+ let gl = invoke(ab(), "withdraw", [gy], nil)
1257+ if ((gl == gl))
11711258 then nil
11721259 else throw("Strict value is not equal to itself.")
11731260 }
11741261 else nil
1175- if ((fJ == fJ))
1262+ if ((fG == fG))
11761263 then {
1177- let fB = invoke(W(), "unlockNeutrino", [(fR - fX), toBase58String(V())], nil)
1178- if ((fB == fB))
1264+ let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1265+ if ((gb == gb))
11791266 then {
1180- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
1181- if ((fu == fu))
1267+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1268+ if ((fU == fU))
11821269 then {
1183- let ff = invoke(Z(), "notifyNotional", [bu, 0], nil)
1184- if ((ff == ff))
1185- then (((ev(bu) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ ew(eA.caller, fS)) ++ ez(fW))
1270+ let fA = invoke(ac(), "notifyNotional", [bB, 0], nil)
1271+ if ((fA == fA))
1272+ then (((eR(bB) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(bs.caller, gt)) ++ eV(gx))
11861273 else throw("Strict value is not equal to itself.")
11871274 }
11881275 else throw("Strict value is not equal to itself.")
11891276 }
11901277 else throw("Strict value is not equal to itself.")
11911278 }
11921279 else throw("Strict value is not equal to itself.")
11931280 }
11941281 }
11951282
11961283
11971284
1198-@Callable(eA)
1285+@Callable(bs)
11991286 func payFunding () = {
1200- let ga = aY()
1201- if (if (if ((ga > lastBlock.timestamp))
1287+ let gB = bd()
1288+ if (if (if ((gB > lastBlock.timestamp))
12021289 then true
1203- else !(bz()))
1290+ else !(bG()))
12041291 then true
1205- else bA())
1206- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(ga)))
1292+ else bH())
1293+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gB)))
12071294 else {
1208- let gb = cs()
1209- let gc = dx()
1210- let gd = (gc - gb)
1211- let ge = if (if ((bk() == 0))
1212- then true
1213- else (bl() == 0))
1214- then $Tuple2(0, 0)
1215- else if ((0 > gd))
1216- then {
1217- let gf = am(ao(gd, ba()), ag)
1218- let gg = am(ao(gf, bk()), bl())
1219- $Tuple2(gf, gg)
1220- }
1221- else {
1222- let gg = am(ao(gd, ba()), ag)
1223- let gf = am(ao(gg, bl()), bk())
1224- $Tuple2(gf, gg)
1225- }
1226- let gf = ge._1
1227- let gg = ge._2
1228- dX((ga + bb()), (bi() + gg), (bj() + gf), am(gg, gb), am(gf, gb))
1295+ let ee = cz()
1296+ let gC = ed()
1297+ let eh = gC._1
1298+ let ei = gC._2
1299+ et((gB + bg()), (bn() + ei), (bo() + eh), ar(ei, ee), ar(eh, ee))
12291300 }
12301301 }
12311302
12321303
12331304
1234-@Callable(eA)
1235-func v_get (bu) = {
1236- let gh = dm(bu, false)
1237- let cM = gh._1
1238- let cN = gh._2
1239- let cO = gh._3
1240- let gi = gh._4
1241- throw((((ak(cN) + ak(cO)) + ak(gi)) + ak(de(bu))))
1305+@Callable(bs)
1306+func forceMoveAsset (bB,eT) = if (if ((addressFromPublicKey(X()) != bs.caller))
1307+ then true
1308+ else (0 > eT))
1309+ then throw("Invalid forceMoveAsset parameters")
1310+ else {
1311+ let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1312+ if ((gb == gb))
1313+ then (eS(addressFromStringValue(bB), eT) ++ eV((aV() - eT)))
1314+ else throw("Strict value is not equal to itself.")
1315+ }
1316+
1317+
1318+
1319+@Callable(bs)
1320+func adjustPeg (dX) = if (if ((addressFromPublicKey(X()) != bs.caller))
1321+ then true
1322+ else (0 > dX))
1323+ then throw("Invalid adjustPeg parameters")
1324+ else {
1325+ let gD = dW(dX)
1326+ let eb = gD._1
1327+ let gE = gD._2
1328+ if ((gE == 0))
1329+ then throw("Nothing to adjust")
1330+ else if ((gE > 0))
1331+ then {
1332+ let gl = invoke(ab(), "withdraw", [gE], nil)
1333+ if ((gl == gl))
1334+ then {
1335+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), gE)])
1336+ if ((fT == fT))
1337+ then (eV((aV() + gE)) ++ eK(eb, aZ()))
1338+ else throw("Strict value is not equal to itself.")
1339+ }
1340+ else throw("Strict value is not equal to itself.")
1341+ }
1342+ else {
1343+ let gb = invoke(Z(), "unlockNeutrino", [au(gE), toBase58String(Y())], nil)
1344+ if ((gb == gb))
1345+ then {
1346+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), au(gE))])
1347+ if ((fU == fU))
1348+ then (eV((aV() - au(gE))) ++ eK(eb, aZ()))
1349+ else throw("Strict value is not equal to itself.")
1350+ }
1351+ else throw("Strict value is not equal to itself.")
1352+ }
1353+ }
1354+
1355+
1356+
1357+@Callable(bs)
1358+func v_get (bB) = {
1359+ let gF = dv(bB, false)
1360+ let cT = gF._1
1361+ let cU = gF._2
1362+ let cV = gF._3
1363+ let gG = gF._4
1364+ throw((((ap(cU) + ap(cV)) + ap(gG)) + ap(dn(bB))))
12421365 }
12431366
12441367
12451368
1246-@Callable(eA)
1247-func view_calcRemainMarginWithFundingPayment (bu) = {
1248- let gj = bt(bu)
1249- let bx = gj._1
1250- let cR = gj._2
1251- let db = gj._3
1252- let cT = gj._4
1253- let gk = cP(bu, ai)
1254- let cJ = gk._1
1255- let cU = gk._2
1256- let gl = bY(bx, cR, cT, cU)
1257- let ch = gl._1
1258- let ci = gl._2
1259- let cd = gl._3
1260- throw((((((ak(ch) + ak(cd)) + ak(de(bu))) + ak(cU)) + ak(ci)) + ak(cJ)))
1369+@Callable(bs)
1370+func view_calcRemainMarginWithFundingPayment (bB) = {
1371+ let gH = bA(bB)
1372+ let bE = gH._1
1373+ let db = gH._2
1374+ let dk = gH._3
1375+ let dd = gH._4
1376+ let gI = cZ(bB, an)
1377+ let cQ = gI._1
1378+ let cY = gI._2
1379+ let gJ = cf(bE, db, dd, cY)
1380+ let co = gJ._1
1381+ let cp = gJ._2
1382+ let ck = gJ._3
1383+ throw((((((ap(co) + ap(ck)) + ap(dn(bB))) + ap(cY)) + ap(cp)) + ap(cQ)))
12611384 }
12621385
12631386
12641387
1265-@Callable(eA)
1266-func forceMoveAsset (bu,ex) = if (if ((addressFromPublicKey(U()) != eA.caller))
1267- then true
1268- else (0 > ex))
1269- then throw("Invalid forceMoveAsset parameters")
1270- else {
1271- let fB = invoke(W(), "unlockNeutrino", [ex, toBase58String(V())], nil)
1272- if ((fB == fB))
1273- then (ew(addressFromStringValue(bu), ex) ++ ez((aQ() - ex)))
1274- else throw("Strict value is not equal to itself.")
1275- }
1388+@Callable(bs)
1389+func view_getPegAdjustCost (dX) = {
1390+ let ec = dW(dX)
1391+ throw(toString(ec._2))
1392+ }
12761393
12771394
1278-@Verifier(gm)
1279-func gn () = sigVerify(gm.bodyBytes, gm.proofs[0], U())
1395+
1396+@Callable(bs)
1397+func view_getFunding () = {
1398+ let ee = cz()
1399+ let gK = ed()
1400+ let eh = gK._1
1401+ let ei = gK._2
1402+ let gL = ar(ei, ee)
1403+ let gM = ar(eh, ee)
1404+ throw((((ap(gL) + ap(gM)) + ap(dG())) + ap(cz())))
1405+ }
1406+
1407+
1408+@Verifier(gN)
1409+func gO () = sigVerify(gN.bodyBytes, gN.proofs[0], X())
12801410

github/deemru/w8io/3ef1775 
378.71 ms