tx · 76rRPVtt1eTk9uhhRYZEn6uaPvdbeSnXR24x4QmSaUYZ

3N4SpfepyNLLb4Uc8e3xvkZew64HMcZ23oX:  -0.07500000 Waves

2023.01.18 17:19 [2410476] smart account 3N4SpfepyNLLb4Uc8e3xvkZew64HMcZ23oX > SELF 0.00000000 Waves

{ "type": 13, "id": "76rRPVtt1eTk9uhhRYZEn6uaPvdbeSnXR24x4QmSaUYZ", "fee": 7500000, "feeAssetId": null, "timestamp": 1674051566300, "version": 2, "chainId": 84, "sender": "3N4SpfepyNLLb4Uc8e3xvkZew64HMcZ23oX", "senderPublicKey": "Gqr4yqnGvyo3GmKz59Qs1qfyDm5XhT134DCjiBhmD8jW", "proofs": [ "5LHrJtXowgcaDfos9SRCCrAq9VgfAN9DCjCCSLMJ7kW1ehfb8opUKTbmx4K2n8eQ5B8t3oSikH34pjgSSxyrA5nA" ], "script": "base64:BgJ0CAISABIAEgASABIDCgEBEgMKAQESDgoMAQEBAQEBAQEBAQEBEhQKEgEBAQEBAQEICAgIAQEBAQEBARIGCgQBAQEIEgASAwoBARIFCgMBAQQSAwoBCBIAEgASAwoBCBIDCgEBEgASABIDCgEIEgASBAoCCAjGAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AA5rX29yYV9vcGVuX2tleQIOa19vcmFfb3Blbl9rZXkABWtfb3JhAgVrX29yYQAJa19iYWxhbmNlAglrX2JhbGFuY2UACmtfc2VxdWVuY2UCCmtfc2VxdWVuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19wb3NpdGlvbk1hcmdpbgIQa19wb3NpdGlvbk1hcmdpbgAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAIWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgISa19wb3NpdGlvbkZyYWN0aW9uABJrX3Bvc2l0aW9uU2VxdWVuY2UCEmtfcG9zaXRpb25TZXF1ZW5jZQAPa19wb3NpdGlvbkFzc2V0Ag9rX3Bvc2l0aW9uQXNzZXQADWtfcG9zaXRpb25GZWUCDWtfcG9zaXRpb25GZWUADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQACGtfcGF1c2VkAghrX3BhdXNlZAALa19jbG9zZU9ubHkCC2tfY2xvc2VPbmx5AAVrX2ZlZQIFa19mZWUAD2tfZnVuZGluZ1BlcmlvZAIPa19mdW5kaW5nUGVyaW9kABFrX2luaXRNYXJnaW5SYXRpbwIRa19pbml0TWFyZ2luUmF0aW8AGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwIFa19tbXIAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwIVa19saXF1aWRhdGlvbkZlZVJhdGlvABlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAhZrX3BhcnRMaXF1aWRhdGlvblJhdGlvAA1rX3NwcmVhZExpbWl0Ag1rX3NwcmVhZExpbWl0ABBrX21heFByaWNlSW1wYWN0AhBrX21heFByaWNlSW1wYWN0ABBrX21heFByaWNlU3ByZWFkAhBrX21heFByaWNlU3ByZWFkABFrX21heE9wZW5Ob3Rpb25hbAIRa19tYXhPcGVuTm90aW9uYWwAFWtfZmVlVG9TdGFrZXJzUGVyY2VudAIVa19mZWVUb1N0YWtlcnNQZXJjZW50ABBrX21heE9yYWNsZURlbGF5AhBrX21heE9yYWNsZURlbGF5AA1rX2xhc3REYXRhU3RyAg1rX2xhc3REYXRhU3RyAA5rX2xhc3RNaW51dGVJZAIOa19sYXN0TWludXRlSWQAHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAh1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQATa190d2FwRGF0YUxhc3RQcmljZQITa190d2FwRGF0YUxhc3RQcmljZQAaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQCGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAEmtfcXVvdGVBc3NldFdlaWdodAIIa19xdEFzdFcAEWtfYmFzZUFzc2V0V2VpZ2h0AghrX2JzQXN0VwATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAATa19vcGVuSW50ZXJlc3RTaG9ydAITa19vcGVuSW50ZXJlc3RTaG9ydAASa19vcGVuSW50ZXJlc3RMb25nAhJrX29wZW5JbnRlcmVzdExvbmcAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABRrX2NvbGxhdGVyYWxfYWRkcmVzcwIUa19jb2xsYXRlcmFsX2FkZHJlc3MAEmtfZXhjaGFuZ2VfYWRkcmVzcwISa19leGNoYW5nZV9hZGRyZXNzABVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwAga190cmFkZXJfbWFya2V0X2Fzc2V0X2NvbGxhdGVyYWwCIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsAQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzAQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAEMYWRtaW5BZGRyZXNzAAkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX2FkbWluX2FkZHJlc3MBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQBEXF1b3RlQXNzZXRTdGFraW5nAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfcXVvdGVfc3Rha2luZwIbUXVvdGUgYXNzZXQgc3Rha2luZyBub3Qgc2V0AQ5zdGFraW5nQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX3N0YWtpbmdfYWRkcmVzcwIPU3Rha2luZyBub3Qgc2V0AQx2YXVsdEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa192YXVsdF9hZGRyZXNzAg1WYXVsdCBub3Qgc2V0AQxtaW5lckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19taW5lcl9hZGRyZXNzAg1NaW5lciBub3Qgc2V0AQ1vcmRlcnNBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEGtfb3JkZXJzX2FkZHJlc3MCDk9yZGVycyBub3Qgc2V0AQ9yZWZlcnJhbEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19yZWZlcnJhbF9hZGRyZXNzAhBSZWZlcnJhbCBub3Qgc2V0ARFuZnRNYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCE05GVCBNYW5hZ2VyIG5vdCBzZXQBEWNvbGxhdGVyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFGtfY29sbGF0ZXJhbF9hZGRyZXNzAhpDb2xsYXRlcmFsIE1hbmFnZXIgbm90IHNldAELc3dhcEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEmtfZXhjaGFuZ2VfYWRkcmVzcwIPTm8gc3dhcCBhZGRyZXNzAhRJbnZhbGlkIHN3YXAgYWRkcmVzcwARa193aGl0ZWxpc3RfYXNzZXQCEWtfd2hpdGVsaXN0X2Fzc2V0ARBpc1doaXRlbGlzdEFzc2V0AQhfYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERY29sbGF0ZXJhbEFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBRFrX3doaXRlbGlzdF9hc3NldAUIX2Fzc2V0SWQHAA1rX3Rva2VuX3BhcmFtAg1rX3Rva2VuX3BhcmFtAAxrX3Rva2VuX3R5cGUCDGtfdG9rZW5fdHlwZQAYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFAg1mZWVfcmVkdWN0aW9uAAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgANVFdBUF9JTlRFUlZBTAAPAA9PUkFDTEVfSU5URVJWQUwADwAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAIQUxMX0ZFRVMAZAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFc3FydGQBAl94CQEEc3FydAQFAl94BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBHBvd2QCAl94Al95CQBsBgUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUCX3kFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBmJzcXJ0ZAECX3gJAQpzcXJ0QmlnSW50BAUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEFYnBvd2QCAl94Al95CQB2BgUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUCX3kFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEdm1heAICX3gCX3kDCQBnAgUCX3gFAl95BQJfeAUCX3kBCWxpc3RUb1N0cgEFX2xpc3QKAQVfam9pbgILYWNjdW11bGF0b3IDdmFsCQCsAgIJAKwCAgULYWNjdW11bGF0b3IFA3ZhbAIBLAQKbmV3TGlzdFN0cgoAAiRsBQVfbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFX2pvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQLbmV3TGlzdFN0clUJALMCAgUKbmV3TGlzdFN0cgABBAtuZXdMaXN0U3RyUgMJAAACCQCvAgIFC25ld0xpc3RTdHJVAAECASwJALACAgULbmV3TGlzdFN0clUAAQULbmV3TGlzdFN0clUFC25ld0xpc3RTdHJSAQlzdHJUb0xpc3QBBF9zdHIJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9pbml0TWFyZ2luUmF0aW8ACQEDaW50AQURa19pbml0TWFyZ2luUmF0aW8BBnF0QXN0UgAJAQNpbnQBBRNrX3F1b3RlQXNzZXRSZXNlcnZlAQZic0FzdFIACQEDaW50AQUSa19iYXNlQXNzZXRSZXNlcnZlAQZxdEFzdFcACQEFaW50T3ICBRJrX3F1b3RlQXNzZXRXZWlnaHQFDERFQ0lNQUxfVU5JVAEGYnNBc3RXAAkBBWludE9yAgURa19iYXNlQXNzZXRXZWlnaHQFDERFQ0lNQUxfVU5JVAERdG90YWxQb3NpdGlvblNpemUACQEDaW50AQUTa190b3RhbFBvc2l0aW9uU2l6ZQEUb3BlbkludGVyZXN0Tm90aW9uYWwACQEDaW50AQUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAERb3BlbkludGVyZXN0U2hvcnQACQEDaW50AQUTa19vcGVuSW50ZXJlc3RTaG9ydAEQb3BlbkludGVyZXN0TG9uZwAJAQNpbnQBBRJrX29wZW5JbnRlcmVzdExvbmcBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAACQEDaW50AQUSa19uZXh0RnVuZGluZ0Jsb2NrARBmdW5kaW5nUGVyaW9kUmF3AAkBA2ludAEFD2tfZnVuZGluZ1BlcmlvZAEUZnVuZGluZ1BlcmlvZERlY2ltYWwACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQxERUNJTUFMX1VOSVQBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUHU0VDT05EUwEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAJAQNpbnQBBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8BE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQEDaW50AQUVa19saXF1aWRhdGlvbkZlZVJhdGlvARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAQNpbnQBBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAQtzcHJlYWRMaW1pdAAJAQNpbnQBBQ1rX3NwcmVhZExpbWl0AQ5tYXhQcmljZUltcGFjdAAJAQNpbnQBBRBrX21heFByaWNlSW1wYWN0AQ5tYXhQcmljZVNwcmVhZAAJAQNpbnQBBRBrX21heFByaWNlU3ByZWFkAQ9tYXhPcGVuTm90aW9uYWwACQEDaW50AQURa19tYXhPcGVuTm90aW9uYWwBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAQNpbnQBBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQEMbGFzdFNlcXVlbmNlAAkBBWludE9yAgUKa19zZXF1ZW5jZQAAARNmZWVUb1N0YWtlcnNQZXJjZW50AAkBA2ludAEFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAEObWF4T3JhY2xlRGVsYXkACQEDaW50AQUQa19tYXhPcmFjbGVEZWxheQEPZ2V0QWN0dWFsQ2FsbGVyAQFpCQELdmFsdWVPckVsc2UCCQCdCAIJAQ1vcmRlcnNBZGRyZXNzAAIIa19zZW5kZXIJAKUIAQgFAWkGY2FsbGVyARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwxfbWFyZ2luUmF0aW8QX2Jhc2VNYXJnaW5SYXRpbxRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQUcmVtYWluaW5nTWFyZ2luUmF0aW8JAGUCBQxfbWFyZ2luUmF0aW8FEF9iYXNlTWFyZ2luUmF0aW8DAwUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGYCAAAFFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPCAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDID4gCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlgoEBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJAJYKBAAAAAAAAAAAARBnZXRQb3NpdGlvbkFzc2V0AQdfdHJhZGVyBBBwb3NpdGlvbkFzc2V0T3B0CQCdCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUHX3RyYWRlcgQHJG1hdGNoMAUQcG9zaXRpb25Bc3NldE9wdAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEDXBvc2l0aW9uQXNzZXQFByRtYXRjaDAFDXBvc2l0aW9uQXNzZXQJANgEAQkBCnF1b3RlQXNzZXQAAQ5nZXRQb3NpdGlvbkZlZQEHX3RyYWRlcgQOcG9zaXRpb25GZWVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUHX3RyYWRlcgQHJG1hdGNoMAUOcG9zaXRpb25GZWVPcHQDCQABAgUHJG1hdGNoMAIDSW50BAtwb3NpdGlvbkZlZQUHJG1hdGNoMAULcG9zaXRpb25GZWUJAQNmZWUAARNyZXF1aXJlT3BlblBvc2l0aW9uAQdfdHJhZGVyAwkAAAIICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAAAJAAIBAhBObyBvcGVuIHBvc2l0aW9uBgELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwEJY2xvc2VPbmx5AAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQtrX2Nsb3NlT25seQcBDXVwZGF0ZVJlc2VydmUDBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudBBfYmFzZUFzc2V0QW1vdW50AwUGX2lzQWRkBAduZXdCYXNlCQBlAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQDCQBnAgAABQduZXdCYXNlCQACAQIqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMJAGQCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQFB25ld0Jhc2UJAGQCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50BAhuZXdRdW90ZQkAZQIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAMJAGcCAAAFCG5ld1F1b3RlCQACAQIqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMFCG5ld1F1b3RlCQBkAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50AQ1jYWxjSW52YXJpYW50AgdfcXRBc3RSB19ic0FzdFIEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYmJzQXN0UgkAtgIBBQdfYnNBc3RSCQEFYm11bGQCBQdicXRBc3RSBQdiYnNBc3RSAQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUHX3F0QXN0VwQBawkBDWNhbGNJbnZhcmlhbnQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQBlAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE3MTM4MTczMDgJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNzEzODE3MzA4Al8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTcxMzgxNzMwOAJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNzEzODE3MzA4Al8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BBBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCBQxfbWFyZ2luRGVsdGEFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE4Nzk1MTg5MjIDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTg3OTUxODkyMgJfMQQHYmFkRGVidAgFDSR0MDE4Nzk1MTg5MjICXzIJAJUKAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgMFBl9pc0FkZAkAZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50CQBlAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQED3F1b3RlQXNzZXRBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQPcXVvdGVBc3NldERlbHRhCQEDYWJzAQkAZQIFD3F1b3RlQXNzZXRBZnRlcgUSX3F1b3RlQXNzZXRSZXNlcnZlBA5xdW90ZUFzc2V0U29sZAkBBG11bGQCBQ9xdW90ZUFzc2V0RGVsdGEFEV9xdW90ZUFzc2V0V2VpZ2h0BBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QABA0kdDAyMDA5MjIwMjU0CQENdXBkYXRlUmVzZXJ2ZQMJAQEhAQUGX2lzQWRkBQ9xdW90ZUFzc2V0RGVsdGEFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMjAwOTIyMDI1NAJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDIwMDkyMjAyNTQCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMjAwOTIyMDI1NAJfMwQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwABDmdldE9yYWNsZVByaWNlAAQGb3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUFa19vcmECAAQIcHJpY2VLZXkJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFCWtfb3JhX2tleQQJbGFzdFZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhwcmljZUtleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIHByaWNlLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIcHJpY2VLZXkECGJsb2NrS2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFD2tfb3JhX2Jsb2NrX2tleQIAAwkBAiE9AgUIYmxvY2tLZXkCAAQMY3VycmVudEJsb2NrCAUJbGFzdEJsb2NrBmhlaWdodAQPbGFzdE9yYWNsZUJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhibG9ja0tleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIGJsb2NrLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIYmxvY2tLZXkDCQBmAgkAZQIFDGN1cnJlbnRCbG9jawUPbGFzdE9yYWNsZUJsb2NrCQEObWF4T3JhY2xlRGVsYXkACQACAQkArAICCQCsAgIJAKwCAgImT3JhY2xlIHN0YWxlIGRhdGEuIExhc3Qgb3JhY2xlIGJsb2NrOiAJAKQDAQUPbGFzdE9yYWNsZUJsb2NrAhAgY3VycmVudCBibG9jazogCQCkAwEFDGN1cnJlbnRCbG9jawUJbGFzdFZhbHVlBQlsYXN0VmFsdWUBDmlzTWFya2V0Q2xvc2VkAAQGb3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUFa19vcmECAAQHb3BlbktleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ5rX29yYV9vcGVuX2tleQIAAwkBAiE9AgUHb3BlbktleQIABAZpc09wZW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmwgCBQZvcmFjbGUFB29wZW5LZXkJAKwCAgkArAICCQCsAgICK0NhbiBub3QgZ2V0IG9yYWNsZSBpcyBvcGVuL2Nsb3NlZC4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFB29wZW5LZXkJAQEhAQUGaXNPcGVuBwEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBJhYnNQcmljZURpZmZCZWZvcmUJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQkBBnF0QXN0UgAJAQZic0FzdFIABQdfcXRBc3RXBQdfYnNBc3RXBBFhYnNQcmljZURpZmZBZnRlcgkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBQdfcXRBc3RXBQdfYnNBc3RXAwMJAGYCBRFhYnNQcmljZURpZmZBZnRlcgkBDm1heFByaWNlU3ByZWFkAAkAZgIFEWFic1ByaWNlRGlmZkFmdGVyBRJhYnNQcmljZURpZmZCZWZvcmUHCQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBRFhYnNQcmljZURpZmZBZnRlcgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEDSR0MDI1MjA1MjU0MjUJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQTb3V0UG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI1MjA1MjU0MjUCXzEEAngxCAUNJHQwMjUyMDUyNTQyNQJfMgQCeDIIBQ0kdDAyNTIwNTI1NDI1Al8zBAJ4MwgFDSR0MDI1MjA1MjU0MjUCXzQFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEOZ2V0T3JhY2xlUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMjY4NDYyNjk3NAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjY4NDYyNjk3NAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNjg0NjI2OTc0Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDI2ODQ2MjY5NzQCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjY4NDYyNjk3NAJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMjc0ODcyNzU5OAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjc0ODcyNzU5OAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNzQ4NzI3NTk4Al8yBANwb24IBQ0kdDAyNzQ4NzI3NTk4Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI3NDg3Mjc1OTgCXzQEDSR0MDI3NjA0Mjc2OTcJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyNzYwNDI3Njk3Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjc2MDQyNzY5NwJfMgQNJHQwMjc3MDIyNzg2OAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjc3MDIyNzg2OAJfMQQHYmFkRGVidAgFDSR0MDI3NzAyMjc4NjgCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfNwMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRVleGNoYW5nZWRQb3NpdGlvblNpemUHAl8xBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50ARVpbnRlcm5hbENsb3NlUG9zaXRpb24CB190cmFkZXIUX2NoZWNrTWF4UHJpY2VJbXBhY3QEDSR0MDI5MTA4MjkyMzYJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI5MTA4MjkyMzYCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjkxMDgyOTIzNgJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyOTEwODI5MjM2Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI5MTA4MjkyMzYCXzQEDXVucmVhbGl6ZWRQbmwICQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QCXzIEDSR0MDI5MzMxMjk0OTkJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI5MzMxMjk0OTkCXzEEB2JhZERlYnQIBQ0kdDAyOTMzMTI5NDk5Al8yBBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQEtAQUMcG9zaXRpb25TaXplBAtyZWFsaXplZFBubAUNdW5yZWFsaXplZFBubAQNbWFyZ2luVG9WYXVsdAkBAS0BBQxyZW1haW5NYXJnaW4EDSR0MDI5NjI2Mjk5MDAJAQpzd2FwT3V0cHV0AwkAZgIFDHBvc2l0aW9uU2l6ZQAACQEDYWJzAQUMcG9zaXRpb25TaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDI5NjI2Mjk5MDACXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyOTYyNjI5OTAwAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyOTYyNjI5OTAwAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMjk2MjYyOTkwMAJfNAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAyOTYyNjI5OTAwAl81BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAyOTYyNjI5OTAwAl82BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUUcG9zaXRpb25PcGVuTm90aW9uYWwJAJ8KDQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQdiYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyCQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFDHBvc2l0aW9uU2l6ZQAABRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwAAAEQZ2V0VHdhcFNwb3RQcmljZQAECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbGlzdAAABAxsYXN0TWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAQWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEDGVuZExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQSbm93Q3VtdWxhdGl2ZVByaWNlCQBkAgUWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQxlbmRMYXN0UHJpY2UEGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQOc3RhcnRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQUc3RhcnRDdW11bGF0aXZlUHJpY2UJAGQCBRhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUNc3RhcnRNaW51dGVJZAUIbWF4SW5kZXgFDnN0YXJ0TGFzdFByaWNlCQBpAgkAZQIFEm5vd0N1bXVsYXRpdmVQcmljZQUUc3RhcnRDdW11bGF0aXZlUHJpY2UFDVRXQVBfSU5URVJWQUwBE2dldFRlcm1pbmFsQW1tU3RhdGUABA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAlAoCCQEGcXRBc3RSAAkBBmJzQXN0UgAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQNJHQwMzIwMjMzMjIwMgkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwQVY3VycmVudE5ldE1hcmtldFZhbHVlCAUNJHQwMzIwMjMzMjIwMgJfMQQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDMyMDIzMzIyMDICXzIEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDMyMDIzMzIyMDICXzMJAJQKAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlARNnZXRRdW90ZUFzc2V0V2VpZ2h0BBBiYXNlQXNzZXRSZXNlcnZlEXRvdGFsUG9zaXRpb25TaXplEXF1b3RlQXNzZXRSZXNlcnZlC3RhcmdldFByaWNlBAFiCQC2AgEFEGJhc2VBc3NldFJlc2VydmUEAnN6CQC2AgEFEXRvdGFsUG9zaXRpb25TaXplBAFxCQC2AgEFEXF1b3RlQXNzZXRSZXNlcnZlBAFwCQC2AgEFC3RhcmdldFByaWNlBAFrCQEFYm11bGQCBQFxBQFiBARuZXdCCQC3AgIFAWIFAnN6BARuZXdRCQEFYmRpdmQCBQFrBQRuZXdCBAF6CQEFYmRpdmQCBQRuZXdRBQRuZXdCBAZyZXN1bHQJAQViZGl2ZAIFAXAFAXoJAKADAQUGcmVzdWx0ARRnZXRTeW5jVGVybWluYWxQcmljZQMOX3Rlcm1pbmFsUHJpY2UHX3F0QXN0UgdfYnNBc3RSBA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAQJbmV3UXRBc3RXCQEEZGl2ZAIJAQRtdWxkAgUOX3Rlcm1pbmFsUHJpY2UFB19ic0FzdFIFB19xdEFzdFIJAJUKAwUJbmV3UXRBc3RXBQxERUNJTUFMX1VOSVQAAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBAluZXdRdEFzdFcJARNnZXRRdW90ZUFzc2V0V2VpZ2h0BAUHX2JzQXN0UgUNX3Bvc2l0aW9uU2l6ZQUHX3F0QXN0UgUOX3Rlcm1pbmFsUHJpY2UECW5ld0JzQXN0VwUMREVDSU1BTF9VTklUBA1tYXJnaW5Ub1ZhdWx0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFB19xdEFzdFIFCW5ld1F0QXN0VwUHX2JzQXN0UgUJbmV3QnNBc3RXBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJUKAwUJbmV3UXRBc3RXBQluZXdCc0FzdFcFDW1hcmdpblRvVmF1bHQBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDXNwb3RUd2FwUHJpY2UJARBnZXRUd2FwU3BvdFByaWNlAAQHcHJlbWl1bQkAZQIFDXNwb3RUd2FwUHJpY2UFD3VuZGVybHlpbmdQcmljZQMDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAGCQEOaXNNYXJrZXRDbG9zZWQACQCUCgIAAAAAAwkAZgIAAAUHcHJlbWl1bQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAJQKAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24EE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAJQKAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24BDmdldEFkanVzdGVkRmVlAgtfYXJ0aWZhY3RJZBBfYmFzZUZlZURpc2NvdW50BApiYXNlRmVlUmF3CQEDZmVlAAQHYmFzZUZlZQkBBG11bGQCBQpiYXNlRmVlUmF3BRBfYmFzZUZlZURpc2NvdW50BA0kdDAzNTA2MzM1NTU4AwkBAiE9AgULX2FydGlmYWN0SWQCAAQMYXJ0aWZhY3RLaW5kCQEEc3RyQQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdG9rZW5fdHlwZQULX2FydGlmYWN0SWQDCQAAAgUMYXJ0aWZhY3RLaW5kBRhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUECXJlZHVjdGlvbgkBBGludEECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Rva2VuX3BhcmFtBQtfYXJ0aWZhY3RJZAQLYWRqdXN0ZWRGZWUJAQRtdWxkAgUHYmFzZUZlZQUJcmVkdWN0aW9uCQCUCgIFC2FkanVzdGVkRmVlBgkAAgECGUludmFsaWQgYXR0YWNoZWQgYXJ0aWZhY3QJAJQKAgUHYmFzZUZlZQcEC2FkanVzdGVkRmVlCAUNJHQwMzUwNjMzNTU1OAJfMQQMYnVybkFydGlmYWN0CAUNJHQwMzUwNjMzNTU1OAJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0ARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIHX3RyYWRlcghfYXNzZXRJZAQPb2xkUG9zaXRpb25TaXplCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQMJAAACBQ9vbGRQb3NpdGlvblNpemUAAAYJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkAQtpc1NhbWVBc3NldAIHX3RyYWRlcghfYXNzZXRJZAkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMEX2FtbQhfYXNzZXRJZAdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBSBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAIBXwUEX2FtbQIBXwUIX2Fzc2V0SWQCAV8FB190cmFkZXIBE2dldEJvcnJvd2VkQnlUcmFkZXIBB190cmFkZXIEDXBvc2l0aW9uQXNzZXQJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgMJAAACBQ1wb3NpdGlvbkFzc2V0CQDYBAEJAQpxdW90ZUFzc2V0AAkAlAoCAAAFDXBvc2l0aW9uQXNzZXQEA2tleQkBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMJAKUIAQUEdGhpcwUNcG9zaXRpb25Bc3NldAUHX3RyYWRlcgQGYm9ycm93CQELdmFsdWVPckVsc2UCCQCaCAIJARFjb2xsYXRlcmFsQWRkcmVzcwAFA2tleQAACQCUCgIFBmJvcnJvdwUNcG9zaXRpb25Bc3NldAEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBBBkb0dldEZlZURpc2NvdW50CQD8BwQJAQxtaW5lckFkZHJlc3MAAhJjb21wdXRlRmVlRGlzY291bnQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUQZG9HZXRGZWVEaXNjb3VudAUQZG9HZXRGZWVEaXNjb3VudAQLZmVlRGlzY291bnQEByRtYXRjaDAFEGRvR2V0RmVlRGlzY291bnQDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIhSW52YWxpZCBjb21wdXRlRmVlRGlzY291bnQgcmVzdWx0BA0kdDAzNjc4OTM2ODYzCQEOZ2V0QWRqdXN0ZWRGZWUCBQtfYXJ0aWZhY3RJZAULZmVlRGlzY291bnQEC2FkanVzdGVkRmVlCAUNJHQwMzY3ODkzNjg2MwJfMQQMYnVybkFydGlmYWN0CAUNJHQwMzY3ODkzNjg2MwJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1nZXRBcnRpZmFjdElkAQFpBAphcnRpZmFjdElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAISSW52YWxpZCBhcnRpZmFjdElkAgAFCmFydGlmYWN0SWQBDWRpc3RyaWJ1dGVGZWUBCl9mZWVBbW91bnQEDGZlZVRvU3Rha2VycwkBBG11bGQCBQpfZmVlQW1vdW50CQETZmVlVG9TdGFrZXJzUGVyY2VudAAECmZlZVRvVmF1bHQJAGUCBQpfZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMJAJQKAgUMZmVlVG9TdGFrZXJzBQpmZWVUb1ZhdWx0AQ51cGRhdGVTZXR0aW5ncwwQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX21heE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19mZWVUb1N0YWtlcnNQZXJjZW50BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhPcmFjbGVEZWxheQUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFA25pbAENdXBkYXRlRnVuZGluZwURX25leHRGdW5kaW5nQmxvY2skX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xvbmdGdW5kaW5nUmF0ZRFfc2hvcnRGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19uZXh0RnVuZGluZ0Jsb2NrBRFfbmV4dEZ1bmRpbmdCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19sb25nRnVuZGluZ1JhdGUFEF9sb25nRnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfc2hvcnRGdW5kaW5nUmF0ZQURX3Nob3J0RnVuZGluZ1JhdGUFA25pbAETdXBkYXRlUG9zaXRpb25Bc3NldAIIX2FkZHJlc3MIX2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQhfYWRkcmVzcwUIX2Fzc2V0SWQFA25pbAEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIOX2lzTmV3UG9zaXRpb24IX2FkZHJlc3MDBQ5faXNOZXdQb3NpdGlvbgQPY3VycmVudFNlcXVlbmNlCQEMbGFzdFNlcXVlbmNlAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQhfYWRkcmVzcwkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprX3NlcXVlbmNlCQBkAgUPY3VycmVudFNlcXVlbmNlAAEFA25pbAUDbmlsARF1cGRhdGVQb3NpdGlvbkZlZQMOX2lzTmV3UG9zaXRpb24IX2FkZHJlc3MEX2ZlZQMFDl9pc05ld1Bvc2l0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQhfYWRkcmVzcwUEX2ZlZQUDbmlsBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBQhfYWRkcmVzcwVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzBQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQNuaWwBCmFwcGVuZFR3YXABBl9wcmljZQQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQQcHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAAAwkAZgIFEHByZXZpb3VzTWludXRlSWQFCG1pbnV0ZUlkCQACAQIRVFdBUCBvdXQtb2Ytb3JkZXIEDGxhc3RNaW51dGVJZAMJAAACBRBwcmV2aW91c01pbnV0ZUlkAAAFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkAwkAZgIFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkBBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkBQZfcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFCXByZXZQcmljZQQEbGlzdAkBC3B1c2hUb1F1ZXVlAwkBCXN0clRvTGlzdAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABQ1UV0FQX0lOVEVSVkFMCQCkAwEFCG1pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19sYXN0TWludXRlSWQFCG1pbnV0ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfbGFzdERhdGFTdHIJAQlsaXN0VG9TdHIBBQRsaXN0BQNuaWwEGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAAABBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUJcHJldlByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlBQNuaWwBEXVwZGF0ZUFtbVJlc2VydmVzAgdfcXRBc3RSB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsARB1cGRhdGVBbW1XZWlnaHRzAgdfcXRBc3RXB19ic0FzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfcXVvdGVBc3NldFdlaWdodAUHX3F0QXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19iYXNlQXNzZXRXZWlnaHQFB19ic0FzdFcFA25pbAEJdXBkYXRlQW1tCAdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbBdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcAAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX29wZW5JbnRlcmVzdExvbmcFFl90b3RhbExvbmdPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfb3BlbkludGVyZXN0U2hvcnQFF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBQNuaWwJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwEOZGVsZXRlUG9zaXRpb24BCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFCF9hZGRyZXNzBQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwBDmRvQnVybkFydGlmYWN0Ag1fYnVybkFydGlmYWN0AWkDBQ1fYnVybkFydGlmYWN0CQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEEludmFsaWQgYXJ0aWZhY3QAAQUDbmlsBQNuaWwWAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhRJbnZhbGlkIHBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIWSW52YWxpZCB1bnBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQHBQNuaWwBaQEMc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhtJbnZhbGlkIHNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BgUDbmlsAWkBDnVuc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIHVuc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkHBQNuaWwBaQEMYWRkTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAhtJbnZhbGlkIGFkZExpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQUYmFzZUFzc2V0QW1vdW50VG9BZGQJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZAIFB19ic0FzdFIFFGJhc2VBc3NldEFtb3VudFRvQWRkBA0kdDA0NjEwNzQ2MjU4CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA0NjEwNzQ2MjU4Al8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA0NjEwNzQ2MjU4Al8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNDYxMDc0NjI1OAJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgURX3F1b3RlQXNzZXRBbW91bnQAAAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBA2FicwEJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZQIFB19ic0FzdFIFF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlBA0kdDA0NzE5MDQ3MzQxCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA0NzE5MDQ3MzQxAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA0NzE5MDQ3MzQxAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNDcxOTA0NzM0MQJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jaGFuZ2VTZXR0aW5ncwwQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5AwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQEOdXBkYXRlU2V0dGluZ3MMBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQFpAQppbml0aWFsaXplEgdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUHX29yYWNsZQpfb3JhY2xlS2V5D19vcmFjbGVCbG9ja0tleQxfY29vcmRpbmF0b3IMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5AwMDAwMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkAZwIAAAUQX21heE9wZW5Ob3Rpb25hbAYJAGcCAAAFFF9mZWVUb1N0YWtlcnNQZXJjZW50BgkAZgIFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQxERUNJTUFMX1VOSVQGCQBnAgAABQ9fbWF4T3JhY2xlRGVsYXkGCQELaW5pdGlhbGl6ZWQACQACAQIdSW52YWxpZCBpbml0aWFsaXplIHBhcmFtZXRlcnMJAM4IAgkAzggCCQDOCAIJAM4IAgkBCXVwZGF0ZUFtbQgFB19xdEFzdFIFB19ic0FzdFIAAAAAAAAAAAAAAAAJAQ51cGRhdGVTZXR0aW5ncwwFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5CQENdXBkYXRlRnVuZGluZwUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUOX2Z1bmRpbmdQZXJpb2QAAAAAAAAAAAkBDXVwZGF0ZUJhbGFuY2UBAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtfb3JhBQdfb3JhY2xlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtfb3JhX2tleQUKX29yYWNsZUtleQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rX29yYV9ibG9ja19rZXkFD19vcmFjbGVCbG9ja0tleQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yBQNuaWwBaQEQaW5jcmVhc2VQb3NpdGlvbgQKX2RpcmVjdGlvbglfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAhfcmVmTGluawQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQABBFpc0NvbGxhdGVyYWxBc3NldAkBEGlzV2hpdGVsaXN0QXNzZXQBBQtfYXNzZXRJZFN0cgMDAwMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYDCQEBIQEFDGlzUXVvdGVBc3NldAkBASEBBRFpc0NvbGxhdGVyYWxBc3NldAcGCQEBIQEJARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIFB190cmFkZXIFC19hc3NldElkU3RyBgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDUxMDA5NTExNTgJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyCQENZ2V0QXJ0aWZhY3RJZAEFAWkEC2FkanVzdGVkRmVlCAUNJHQwNTEwMDk1MTE1OAJfMQQMYnVybkFydGlmYWN0CAUNJHQwNTEwMDk1MTE1OAJfMgQHX2Ftb3VudAkBBGRpdmQCBQpfcmF3QW1vdW50CQBkAgkBBG11bGQCBQthZGp1c3RlZEZlZQUJX2xldmVyYWdlBQxERUNJTUFMX1VOSVQEDHJhd0ZlZUFtb3VudAkAZQIFCl9yYXdBbW91bnQFB19hbW91bnQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQDBRFpc0NvbGxhdGVyYWxBc3NldAQIZG9Cb3Jyb3cJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIGYm9ycm93CQDMCAIFB190cmFkZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFB19hbW91bnQFA25pbAMJAAACBQhkb0JvcnJvdwUIZG9Cb3Jyb3cEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDWJhbGFuY2VCZWZvcmUFDWJhbGFuY2VCZWZvcmUEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUMcmF3RmVlQW1vdW50BQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAEDGJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUMYmFsYW5jZUFmdGVyBQxiYWxhbmNlQWZ0ZXIED2V4Y2hhbmdlZEFtb3VudAkAZQIFDGJhbGFuY2VBZnRlcgUNYmFsYW5jZUJlZm9yZQMJAAACBQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQxyYXdGZWVBbW91bnQDCQAAAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAUTZGlzdHJpYnV0ZUZlZUFtb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACFWFjY2VwdFBheW1lbnRXaXRoTGluawkAzAgCBQdfdHJhZGVyCQDMCAIFCF9yZWZMaW5rBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUTZGlzdHJpYnV0ZUZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUECWZlZUFtb3VudAkAZQIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFC3JlZmVycmVyRmVlBA0kdDA1MjUwMDUyNjQwCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA1MjUwMDUyNjQwAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDUyNTAwNTI2NDACXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTI1MDA1MjY0MAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA1MjUwMDUyNjQwAl80BA1pc05ld1Bvc2l0aW9uCQAAAgUPb2xkUG9zaXRpb25TaXplAAAED2lzU2FtZURpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQAAAgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBA5leHBhbmRFeGlzdGluZwMJAQEhAQUNaXNOZXdQb3NpdGlvbgUPaXNTYW1lRGlyZWN0aW9uBwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQNJHQwNTI5Mjk1NTg5MQMDBQ1pc05ld1Bvc2l0aW9uBgUOZXhwYW5kRXhpc3RpbmcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDUzMzkxNTM1NjQJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQIBQ0kdDA1MzM5MTUzNTY0Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTMzOTE1MzU2NAJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTMzOTE1MzU2NAJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDUzMzkxNTM1NjQCXzQDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQCAyA8IAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWFtb3VudEJhc2VBc3NldEJvdWdodAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIJAGQCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAABBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAGQCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBQxvcGVuTm90aW9uYWwAAAQNJHQwNTQxMTA1NDMzMQkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUHX2Ftb3VudAQMcmVtYWluTWFyZ2luCAUNJHQwNTQxMTA1NDMzMQJfMQQCeDEIBQ0kdDA1NDExMDU0MzMxAl8yBAJ4MggFDSR0MDU0MTEwNTQzMzECXzMDCQEBIQEJARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQACAQIVT3ZlciBtYXggc3ByZWFkIGxpbWl0AwkBASEBCQEdcmVxdWlyZU5vdE92ZXJNYXhPcGVuTm90aW9uYWwCBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQACAQIWT3ZlciBtYXggb3BlbiBub3Rpb25hbAkAngoMBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkAZAIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGQCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGQCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAACQBkAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDU1NTkxNTU3MDcJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIJAKUIAQgFAWkGY2FsbGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA1NTU5MTU1NzA3Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNTU1OTE1NTcwNwJfMgMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAAIBAi5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDUyOTI5NTU4OTECXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwNTI5Mjk1NTg5MQJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1MjkyOTU1ODkxAl8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDUyOTI5NTU4OTECXzQEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDUyOTI5NTU4OTECXzUEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1MjkyOTU1ODkxAl82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTI5Mjk1NTg5MQJfNwQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDUyOTI5NTU4OTECXzgEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNTI5Mjk1NTg5MQJfOQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNTI5Mjk1NTg5MQNfMTAEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTI5Mjk1NTg5MQNfMTEEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDUyOTI5NTU4OTEDXzEyBA0kdDA1NTg5NzU1OTU0CQENZGlzdHJpYnV0ZUZlZQEFCWZlZUFtb3VudAQMZmVlVG9TdGFrZXJzCAUNJHQwNTU4OTc1NTk1NAJfMQQKZmVlVG9WYXVsdAgFDSR0MDU1ODk3NTU5NTQCXzIEBXN0YWtlAwUMaXNRdW90ZUFzc2V0BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIFDWlzTmV3UG9zaXRpb24FB190cmFkZXIJARF1cGRhdGVQb3NpdGlvbkZlZQMFDWlzTmV3UG9zaXRpb24FB190cmFkZXIFC2FkanVzdGVkRmVlCQETdXBkYXRlUG9zaXRpb25Bc3NldAIFB190cmFkZXIFC19hc3NldElkU3RyCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4ABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBAdfYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQIX2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLX2Fzc2V0SWRTdHIJANgEAQkBBXZhbHVlAQUIX2Fzc2V0SWQEDGlzUXVvdGVBc3NldAkAAAIFCF9hc3NldElkCQEKcXVvdGVBc3NldAAEEWlzQ29sbGF0ZXJhbEFzc2V0CQEQaXNXaGl0ZWxpc3RBc3NldAEFC19hc3NldElkU3RyAwMDAwMDAwMJAQEhAQUMaXNRdW90ZUFzc2V0CQEBIQEFEWlzQ29sbGF0ZXJhbEFzc2V0BwYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgYJAQEhAQkBC2lzU2FtZUFzc2V0AgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECHEludmFsaWQgYWRkTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDU3OTg1NTgxMjUJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDU3OTg1NTgxMjUCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTc5ODU1ODEyNQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1Nzk4NTU4MTI1Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDU3OTg1NTgxMjUCXzQEBXN0YWtlAwUMaXNRdW90ZUFzc2V0BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQkAZAIFEW9sZFBvc2l0aW9uTWFyZ2luBQdfYW1vdW50BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUb2xkUG9zaXRpb25Mc3RVcGRDUEYJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVtb3ZlTWFyZ2luAQdfYW1vdW50BARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyAwMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDU4OTIwNTkwNjAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDU4OTIwNTkwNjACXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTg5MjA1OTA2MAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1ODkyMDU5MDYwAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDU4OTIwNTkwNjACXzQEC21hcmdpbkRlbHRhCQEBLQEFB19hbW91bnQEDSR0MDU5MDk3NTkyNzYJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC21hcmdpbkRlbHRhBAxyZW1haW5NYXJnaW4IBQ0kdDA1OTA5NzU5Mjc2Al8xBAdiYWREZWJ0CAUNJHQwNTkwOTc1OTI3NgJfMgMJAQIhPQIFB2JhZERlYnQAAAkAAgECHUludmFsaWQgcmVtb3ZlZCBtYXJnaW4gYW1vdW50BAttYXJnaW5SYXRpbwkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JAQ9pbml0TWFyZ2luUmF0aW8ABgkAAgEJAKwCAgkArAICCQCsAgICGVRvbyBtdWNoIG1hcmdpbiByZW1vdmVkOiAJAKQDAQULbWFyZ2luUmF0aW8CAyA8IAkApAMBCQEPaW5pdE1hcmdpblJhdGlvAAQNcXVvdGVBc3NldFN0cgkA2AQBCQEKcXVvdGVBc3NldAAEDSR0MDU5NzIwNTk3NzQJARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQUHX3RyYWRlcgQIYm9ycm93ZWQIBQ0kdDA1OTcyMDU5Nzc0Al8xBAdhc3NldElkCAUNJHQwNTk3MjA1OTc3NAJfMgQHdG9SZXBheQMJAGYCBQdfYW1vdW50BQhib3Jyb3dlZAUIYm9ycm93ZWQFB19hbW91bnQECnRvV2l0aGRyYXcDCQBmAgUIYm9ycm93ZWQFB19hbW91bnQAAAkAZQIFB19hbW91bnQFCGJvcnJvd2VkBAtmaW5hbEJvcnJvdwkAZQIFCGJvcnJvd2VkBQd0b1JlcGF5BBVzd2l0Y2hQb3NpdGlvblRvUXVvdGUDCQBmAgULZmluYWxCb3Jyb3cAAAUDbmlsCQETdXBkYXRlUG9zaXRpb25Bc3NldAIFB190cmFkZXIFDXF1b3RlQXNzZXRTdHIEDWRvU2FuaXR5Q2hlY2sDCQECIT0CCQBkAgUHdG9SZXBheQUKdG9XaXRoZHJhdwUHX2Ftb3VudAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgh0b1JlcGF5PQkApAMBBQd0b1JlcGF5Ag4gKyB0b1dpdGhkcmF3PQkApAMBBQp0b1dpdGhkcmF3AgQgIT0gCQCkAwEFB19hbW91bnQFA25pbAMJAAACBQ1kb1Nhbml0eUNoZWNrBQ1kb1Nhbml0eUNoZWNrBAlkb1Vuc3Rha2UDCQBmAgUKdG9XaXRoZHJhdwAABAlkb1Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFCnRvV2l0aGRyYXcFA25pbAUDbmlsAwkAAAIFCWRvVW5zdGFrZQUJZG9VbnN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQlkb1Vuc3Rha2UFCWRvVW5zdGFrZQQWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgMJAGYCBQd0b1JlcGF5AAAEB2RvUmVwYXkJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIFcmVwYXkJAMwIAgUHX3RyYWRlcgkAzAgCBQd0b1JlcGF5CQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFB2RvUmVwYXkFB2RvUmVwYXkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQd0b1JlcGF5CQDZBAEFB2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFnJldHVybkNvbGxhdGVyYWxBY3Rpb24FFnJldHVybkNvbGxhdGVyYWxBY3Rpb24JAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4FF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD29sZFBvc2l0aW9uU2l6ZQMJAGYCBQp0b1dpdGhkcmF3AAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUKdG9XaXRoZHJhdwUDbmlsCQENdXBkYXRlQmFsYW5jZQEJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50BRVzd2l0Y2hQb3NpdGlvblRvUXVvdGUFFnJldHVybkNvbGxhdGVyYWxBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgMFX3NpemUUX21pblF1b3RlQXNzZXRBbW91bnQMX2FkZFRvTWFyZ2luBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA5fdHJhZGVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB190cmFkZXICDkludmFsaWQgY2FsbGVyBAtwb3NpdGlvbkZlZQkBDmdldFBvc2l0aW9uRmVlAQUHX3RyYWRlcgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDYyMDExNjIxNTEJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDYyMDExNjIxNTECXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjIwMTE2MjE1MQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2MjAxMTYyMTUxAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDYyMDExNjIxNTECXzQEDSR0MDYyMTU3NjgwMzUDCQBmAgkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQUFX3NpemUECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDYyNzY4NjI5OTAJAQpzd2FwT3V0cHV0AwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQVfc2l6ZQYEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA2Mjc2ODYyOTkwAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjI3Njg2Mjk5MAJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjI3Njg2Mjk5MAJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDYyNzY4NjI5OTACXzQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkBAS0BBQVfc2l6ZQUFX3NpemUEDSR0MDYzMDgxNjMyMzUJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDYzMDgxNjMyMzUCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA2MzA4MTYzMjM1Al8yBAJtcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEDXJlYWxpemVkUmF0aW8JAQRkaXZkAgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUNcmVhbGl6ZWRSYXRpbwQLcmVhbGl6ZWRGZWUJAQRtdWxkAgkBBG11bGQCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQ1yZWFsaXplZFJhdGlvBQtwb3NpdGlvbkZlZQQScmVtYWluTWFyZ2luQmVmb3JlCAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAJfMQQPcG9zaXRpb25CYWREZWJ0CAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwCXzIEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBBRuZXdQb3NpdGlvbkxzdFVwZENQRgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAURb3Blbk5vdGlvbmFsRGVsdGEEEW5ld1Bvc2l0aW9uTWFyZ2luAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkBBG11bGQCCQBkAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFEnVucmVhbGl6ZWRQbmxBZnRlcgUCbXIFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAQRtdWxkAgkAZQIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFAm1yBRJ1bnJlYWxpemVkUG5sQWZ0ZXIEEW1hcmdpblRvVHJhZGVyUmF3CQBlAgkAZQIFEnJlbWFpbk1hcmdpbkJlZm9yZQkAZAIFEW5ld1Bvc2l0aW9uTWFyZ2luBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC3JlYWxpemVkRmVlBA5tYXJnaW5Ub1RyYWRlcgMJAGYCAAAFEW1hcmdpblRvVHJhZGVyUmF3CQACAQIlTWFyZ2luIGVycm9yOiB1bmFibGUgdG8gcGF5IGNsb3NlIGZlZQURbWFyZ2luVG9UcmFkZXJSYXcDAwkBAiE9AgUUX21pblF1b3RlQXNzZXRBbW91bnQAAAkAZgIFFF9taW5RdW90ZUFzc2V0QW1vdW50BRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAIDIDwgCQCkAwEFFF9taW5RdW90ZUFzc2V0QW1vdW50CQCiChAFD25ld1Bvc2l0aW9uU2l6ZQMFDF9hZGRUb01hcmdpbgkAZAIFEW5ld1Bvc2l0aW9uTWFyZ2luBQ5tYXJnaW5Ub1RyYWRlcgURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgUPcG9zaXRpb25CYWREZWJ0BQtyZWFsaXplZFBubAMFDF9hZGRUb01hcmdpbgAABQ5tYXJnaW5Ub1RyYWRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQURb3Blbk5vdGlvbmFsRGVsdGEAAAULcmVhbGl6ZWRGZWUDCQBmAgUFX3NpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNjY0NTQ2Njg4NAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIGBAJ4MggFDSR0MDY2NDU0NjY4ODQCXzEED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDY2NDU0NjY4ODQCXzIEC3JlYWxpemVkUG5sCAUNJHQwNjY0NTQ2Njg4NAJfMwQYbWFyZ2luVG9UcmFkZXJXaXRob3V0RmVlCAUNJHQwNjY0NTQ2Njg4NAJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDY2NDU0NjY4ODQCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDY2NDU0NjY4ODQCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2NjQ1NDY2ODg0Al83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNjY0NTQ2Njg4NAJfOAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDY2NDU0NjY4ODQCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNjY0NTQ2Njg4NANfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDY2NDU0NjY4ODQDXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDY2NDU0NjY4ODQDXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2NjQ1NDY2ODg0A18xMwQLcmVhbGl6ZWRGZWUJAQRtdWxkAgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAULcG9zaXRpb25GZWUEEW1hcmdpblRvVHJhZGVyUmF3CQBlAgkBA2FicwEFGG1hcmdpblRvVHJhZGVyV2l0aG91dEZlZQULcmVhbGl6ZWRGZWUEDm1hcmdpblRvVHJhZGVyAwkAZgIAAAURbWFyZ2luVG9UcmFkZXJSYXcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJ01hcmdpbiBlcnJvcjogdW5hYmxlIHRvIHBheSBjbG9zZSBmZWU6IAkApAMBBQtyZWFsaXplZEZlZQIJIG1hcmdpbjogCQCkAwEFGG1hcmdpblRvVHJhZGVyV2l0aG91dEZlZQIOIGZlZSBwZXJjZW50OiAJAKQDAQULcG9zaXRpb25GZWUCCyBub3Rpb25hbDogCQCkAwEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEW1hcmdpblRvVHJhZGVyUmF3AwMJAQIhPQIFFF9taW5RdW90ZUFzc2V0QW1vdW50AAAJAGYCBRRfbWluUXVvdGVBc3NldEFtb3VudAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQCAyA8IAkApAMBBRRfbWluUXVvdGVBc3NldEFtb3VudAkAogoQAAAAAAAAAAAFD3Bvc2l0aW9uQmFkRGVidAULcmVhbGl6ZWRQbmwFDm1hcmdpblRvVHJhZGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIFC3JlYWxpemVkRmVlBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA2MjE1NzY4MDM1Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDYyMTU3NjgwMzUCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjIxNTc2ODAzNQJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2MjE1NzY4MDM1Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA2MjE1NzY4MDM1Al81BAtyZWFsaXplZFBubAgFDSR0MDYyMTU3NjgwMzUCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNjIxNTc2ODAzNQJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDYyMTU3NjgwMzUCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDYyMTU3NjgwMzUCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2MjE1NzY4MDM1A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDYyMTU3NjgwMzUDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDYyMTU3NjgwMzUDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA2MjE1NzY4MDM1A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2MjE1NzY4MDM1A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjIxNTc2ODAzNQNfMTUEC3JlYWxpemVkRmVlCAUNJHQwNjIxNTc2ODAzNQNfMTYDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAiZVbmFibGUgdG8gY2xvc2UgcG9zaXRpb24gd2l0aCBiYWQgZGVidAQOaXNQYXJ0aWFsQ2xvc2UJAQIhPQIFD25ld1Bvc2l0aW9uU2l6ZQAABA53aXRoZHJhd0Ftb3VudAkAZAIFDm1hcmdpblRvVHJhZGVyBQtyZWFsaXplZEZlZQQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFDndpdGhkcmF3QW1vdW50BA0kdDA2ODMwMjY4NTA5AwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNYW1tTmV3QmFsYW5jZQgFDSR0MDY4MzAyNjg1MDkCXzEEA3gxMQgFDSR0MDY4MzAyNjg1MDkCXzIEDSR0MDY4NTE2Njg1NzAJARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQUHX3RyYWRlcgQIYm9ycm93ZWQIBQ0kdDA2ODUxNjY4NTcwAl8xBAdhc3NldElkCAUNJHQwNjg1MTY2ODU3MAJfMgQNJHQwNjg1Nzg2OTQzOAMJAGYCBQhib3Jyb3dlZAAAAwkAZwIFDndpdGhkcmF3QW1vdW50BQhib3Jyb3dlZAQHZG9SZXBheQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgVyZXBheQkAzAgCBQdfdHJhZGVyCQDMCAIFCGJvcnJvd2VkCQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFB2RvUmVwYXkFB2RvUmVwYXkJAJUKAwUIYm9ycm93ZWQJAGUCBQ53aXRoZHJhd0Ftb3VudAUIYm9ycm93ZWQFDmlzUGFydGlhbENsb3NlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAMFDmlzUGFydGlhbENsb3NlAgVyZXBheQIYcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlCQDMCAIFB190cmFkZXIJAMwIAgUOd2l0aGRyYXdBbW91bnQJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUPcmVhbGl6ZUFuZENsb3NlBQ9yZWFsaXplQW5kQ2xvc2UJAJUKAwUOd2l0aGRyYXdBbW91bnQAAAcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJUKAwAABQ53aXRoZHJhd0Ftb3VudAcDCQAAAgUNJHQwNjg1Nzg2OTQzOAUNJHQwNjg1Nzg2OTQzOAQNc3dpdGNoVG9RdW90ZQgFDSR0MDY4NTc4Njk0MzgCXzMEHHF1b3RlV2l0aGRyYXdBbW91bnRCZWZvcmVGZWUIBQ0kdDA2ODU3ODY5NDM4Al8yBBxhc3NldFdpdGhkcmF3QW1vdW50QmVmb3JlRmVlCAUNJHQwNjg1Nzg2OTQzOAJfMQQNJHQwNjk0NDY3MDUxMwMJAGcCBRxxdW90ZVdpdGhkcmF3QW1vdW50QmVmb3JlRmVlBQtyZWFsaXplZEZlZQkAlQoDBRxhc3NldFdpdGhkcmF3QW1vdW50QmVmb3JlRmVlCQBlAgUccXVvdGVXaXRoZHJhd0Ftb3VudEJlZm9yZUZlZQULcmVhbGl6ZWRGZWUFC3JlYWxpemVkRmVlBBpmZWVMZWZ0VG9XaXRoZHJhd0Zyb21Bc3NldAkAZQIFC3JlYWxpemVkRmVlBRxxdW90ZVdpdGhkcmF3QW1vdW50QmVmb3JlRmVlBBthc3NldFdpdGhkcmF3QW1vdW50QWZ0ZXJGZWUJAGUCBRxhc3NldFdpdGhkcmF3QW1vdW50QmVmb3JlRmVlBRpmZWVMZWZ0VG9XaXRoZHJhd0Zyb21Bc3NldAQNYmFsYW5jZUJlZm9yZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHYXNzZXRJZAUaZmVlTGVmdFRvV2l0aGRyYXdGcm9tQXNzZXQFA25pbAMJAAACBQZkb1N3YXAFBmRvU3dhcAQMYmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQxiYWxhbmNlQWZ0ZXIFDGJhbGFuY2VBZnRlcgQPZXhjaGFuZ2VkQW1vdW50CQBlAgUMYmFsYW5jZUFmdGVyBQ1iYWxhbmNlQmVmb3JlAwkAAAIFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50CQCVCgMFG2Fzc2V0V2l0aGRyYXdBbW91bnRBZnRlckZlZQAACQBkAgUccXVvdGVXaXRoZHJhd0Ftb3VudEJlZm9yZUZlZQUPZXhjaGFuZ2VkQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFDSR0MDY5NDQ2NzA1MTMFDSR0MDY5NDQ2NzA1MTMEFWFjdHVhbEZlZUluUXVvdGVBc3NldAgFDSR0MDY5NDQ2NzA1MTMCXzMEG3F1b3RlV2l0aGRyYXdBbW91bnRBZnRlckZlZQgFDSR0MDY5NDQ2NzA1MTMCXzIEG2Fzc2V0V2l0aGRyYXdBbW91bnRBZnRlckZlZQgFDSR0MDY5NDQ2NzA1MTMCXzEEB3Vuc3Rha2UDCQBmAgUccXVvdGVXaXRoZHJhd0Ftb3VudEJlZm9yZUZlZQAABAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRxxdW90ZVdpdGhkcmF3QW1vdW50QmVmb3JlRmVlBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA0kdDA3MDc4NzcwODU2CQENZGlzdHJpYnV0ZUZlZQEFFWFjdHVhbEZlZUluUXVvdGVBc3NldAQMZmVlVG9TdGFrZXJzCAUNJHQwNzA3ODc3MDg1NgJfMQQKZmVlVG9WYXVsdAgFDSR0MDcwNzg3NzA4NTYCXzIEDGRlcG9zaXRWYXVsdAkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBQxkZXBvc2l0VmF1bHQFDGRlcG9zaXRWYXVsdAQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgULcmVhbGl6ZWRGZWUFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCAwUOaXNQYXJ0aWFsQ2xvc2UJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgMFDXN3aXRjaFRvUXVvdGUEDXF1b3RlQXNzZXRTdHIJANgEAQkBCnF1b3RlQXNzZXQACQETdXBkYXRlUG9zaXRpb25Bc3NldAIFB190cmFkZXIFDXF1b3RlQXNzZXRTdHIFA25pbAkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzAwkAZgIFG3F1b3RlV2l0aGRyYXdBbW91bnRBZnRlckZlZQAACQEId2l0aGRyYXcCBQ5fdHJhZGVyQWRkcmVzcwUbcXVvdGVXaXRoZHJhd0Ftb3VudEFmdGVyRmVlBQNuaWwJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQMJAGYCBRthc3NldFdpdGhkcmF3QW1vdW50QWZ0ZXJGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5fdHJhZGVyQWRkcmVzcwUbYXNzZXRXaXRoZHJhd0Ftb3VudEFmdGVyRmVlCQDZBAEFB2Fzc2V0SWQFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWxpcXVpZGF0ZQEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBAttYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABwYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQMDAwkAZgIFD3Nwb3RNYXJnaW5SYXRpbwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABwkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAcEDSR0MDczNjA5NzM3NTkJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDczNjA5NzM3NTkCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNzM2MDk3Mzc1OQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA3MzYwOTczNzU5Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDczNjA5NzM3NTkCXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUEDSR0MDczOTg0NzQwODgJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDczOTg0NzQwODgCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA3Mzk4NDc0MDg4Al8yBA0kdDA3NDA5Njc0MjgzCQEJc3dhcElucHV0AgUFaXNBZGQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDc0MDk2NzQyODMCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NDA5Njc0MjgzAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NDA5Njc0MjgzAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzQwOTY3NDI4MwJfNAQQbGlxdWlkYXRpb25SYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBAtyZWFsaXplZFBubAkBBG11bGQCBQ11bnJlYWxpemVkUG5sBRBsaXF1aWRhdGlvblJhdGlvBA0kdDA3NDU3Mjc0ODA1CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNzQ1NzI3NDgwNQJfMQQHYmFkRGVidAgFDSR0MDc0NTcyNzQ4MDUCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNzQ1NzI3NDgwNQJfMwQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBJsaXF1aWRhdGlvblBlbmFsdHkJAQRtdWxkAgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ABA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBBFuZXdQb3NpdGlvbk1hcmdpbgkAZQIFDHJlbWFpbk1hcmdpbgUSbGlxdWlkYXRpb25QZW5hbHR5BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBBRuZXdQb3NpdGlvbkxzdFVwZENQRgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRFvcGVuTm90aW9uYWxEZWx0YQQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNJHQwNzYwNDY3NjE3NQMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDW5ld0FtbUJhbGFuY2UIBQ0kdDA3NjA0Njc2MTc1Al8xBAN4MTEIBQ0kdDA3NjA0Njc2MTc1Al8yBA0kdDA3NjE4Mzc2MjM3CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNzYxODM3NjIzNwJfMQQHYXNzZXRJZAgFDSR0MDc2MTgzNzYyMzcCXzIEFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAMJAGYCBQhib3Jyb3dlZAAABBBjb2xsYXRlcmFsVG9TZWxsCQEEbXVsZAIFCGJvcnJvd2VkBRBsaXF1aWRhdGlvblJhdGlvBA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIQcmVhbGl6ZVBhcnRpYWxseQkAzAgCBQdfdHJhZGVyCQDMCAIFB2Fzc2V0SWQJAMwIAgUQY29sbGF0ZXJhbFRvU2VsbAUDbmlsBQNuaWwDCQAAAgUPcmVhbGl6ZUFuZENsb3NlBQ9yZWFsaXplQW5kQ2xvc2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAUVZG9MaXF1aWRhdGVDb2xsYXRlcmFsBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQURb3Blbk5vdGlvbmFsRGVsdGEAAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwNzc5MTY3ODQxMQkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIHBAJ4MQgFDSR0MDc3OTE2Nzg0MTECXzEEB2JhZERlYnQIBQ0kdDA3NzkxNjc4NDExAl8yBAJ4MggFDSR0MDc3OTE2Nzg0MTECXzMEAngzCAUNJHQwNzc5MTY3ODQxMQJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDc3OTE2Nzg0MTECXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDc3OTE2Nzg0MTECXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3NzkxNjc4NDExAl83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNzc5MTY3ODQxMQJfOAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDc3OTE2Nzg0MTECXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNzc5MTY3ODQxMQNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDc3OTE2Nzg0MTEDXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDc3OTE2Nzg0MTEDXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3NzkxNjc4NDExA18xMwQSbGlxdWlkYXRpb25QZW5hbHR5CQEEbXVsZAIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIECmZlZVRvVmF1bHQJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNJHQwNzg4MTk3ODk0OAMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDW5ld0FtbUJhbGFuY2UIBQ0kdDA3ODgxOTc4OTQ4Al8xBAN4MTEIBQ0kdDA3ODgxOTc4OTQ4Al8yBA0kdDA3ODk1Njc5MDEwCQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNzg5NTY3OTAxMAJfMQQHYXNzZXRJZAgFDSR0MDc4OTU2NzkwMTACXzIEFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAMJAGYCBQhib3Jyb3dlZAAABA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIYcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlCQDMCAIFB190cmFkZXIJAMwIAgAACQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFD3JlYWxpemVBbmRDbG9zZQUPcmVhbGl6ZUFuZENsb3NlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAQBeAMJAGYCBQdiYWREZWJ0AAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUHYmFkRGVidAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQF4BQF4BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgAABQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAADAwMJAGYCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAIBQlsYXN0QmxvY2sJdGltZXN0YW1wBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXACAyA8IAkApAMBBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwODA4ODI4MDk0NAkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDgwODgyODA5NDQCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4MDg4MjgwOTQ0Al8yCQENdXBkYXRlRnVuZGluZwUJAGQCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGQCCQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRNsb25nUHJlbWl1bUZyYWN0aW9uCQBkAgkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUABAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEDSR0MDgxMzc2ODE1MTEJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFB19xdEFzdFIFB19ic0FzdFIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA4MTM3NjgxNTExAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA4MTM3NjgxNTExAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwODEzNzY4MTUxMQJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFE25ld1F1b3RlQXNzZXRXZWlnaHQJAQRtdWxkAgUHX2JzQXN0UgUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBJ3ZpZXdfY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA0kdDA4MjA4MDgyMTgxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDA4MjA4MDgyMTgxAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDgyMDgwODIxODECXzIEA3BvbggFDSR0MDgyMDgwODIxODECXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwODIwODA4MjE4MQJfNAQNJHQwODIxODQ4MjI4NQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwODIxODQ4MjI4NQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDgyMTg0ODIyODUCXzIEDSR0MDgyMjg4ODI0NjAJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDgyMjg4ODI0NjACXzEEB2JhZERlYnQIBQ0kdDA4MjI4ODgyNDYwAl8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDgyMjg4ODI0NjACXzMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARV2aWV3X2dldFBlZ0FkanVzdENvc3QBBl9wcmljZQQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAZyZXN1bHQJARRnZXRTeW5jVGVybWluYWxQcmljZQMFBl9wcmljZQUHX3F0QXN0UgUHX2JzQXN0UgkAAgEJAKQDAQgFBnJlc3VsdAJfMwFpARh2aWV3X2dldFRlcm1pbmFsQW1tUHJpY2UABA0kdDA4Mjg3NjgyOTU3CQETZ2V0VGVybWluYWxBbW1TdGF0ZQAEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDA4Mjg3NjgyOTU3Al8xBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDA4Mjg3NjgyOTU3Al8yBAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFcACQEEbXVsZAIFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0VwAJAAIBCQCkAwEFBXByaWNlAWkBD3ZpZXdfZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwODMxNzI4MzIzNAkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDgzMTcyODMyMzQCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4MzE3MjgzMjM0Al8yBAtsb25nRnVuZGluZwkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UEDHNob3J0RnVuZGluZwkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQkArAICCQCsAgIJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcJAQFzAQkBEGdldFR3YXBTcG90UHJpY2UACQEBcwEJAQ5nZXRPcmFjbGVQcmljZQABaQEYdmlld19nZXRCb3Jyb3dlZEJ5VHJhZGVyAQdfdHJhZGVyBA0kdDA4MzUyMDgzNTc0CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwODM1MjA4MzU3NAJfMQQHYXNzZXRJZAgFDSR0MDgzNTIwODM1NzQCXzIJAAIBCQCsAgIJAQFzAQUIYm9ycm93ZWQFB2Fzc2V0SWQBaQEQY29tcHV0ZVNwb3RQcmljZQAEBnJlc3VsdAkBDGdldFNwb3RQcmljZQAJAJQKAgUDbmlsBQZyZXN1bHQBaQEfY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQGcmVzdWx0CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgULX2FydGlmYWN0SWQJAJQKAgUDbmlsBQZyZXN1bHQBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEOYWRtaW5QdWJsaWNLZXkA/FC08g==", "height": 2410476, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9Qbou3trG9mGcuEut5xcMGnwXwM1Yr4pmpiDYPjxvhHQ Next: 9MixQyr5Dye6NW9tcxNU1nY1vtKnxuy2Hi33F1tCREjQ Diff:
OldNewDifferences
2525
2626 let l = "k_positionAsset"
2727
28-let m = "k_initialized"
29-
30-let n = "k_paused"
31-
32-let o = "k_closeOnly"
33-
34-let p = "k_fee"
35-
36-let q = "k_fundingPeriod"
37-
38-let r = "k_initMarginRatio"
39-
40-let s = "k_mmr"
41-
42-let t = "k_liquidationFeeRatio"
43-
44-let u = "k_partLiquidationRatio"
45-
46-let v = "k_spreadLimit"
47-
48-let w = "k_maxPriceImpact"
49-
50-let x = "k_maxPriceSpread"
51-
52-let y = "k_maxOpenNotional"
53-
54-let z = "k_feeToStakersPercent"
55-
56-let A = "k_maxOracleDelay"
57-
58-let B = "k_lastDataStr"
59-
60-let C = "k_lastMinuteId"
61-
62-let D = "k_twapDataLastCumulativePrice"
63-
64-let E = "k_twapDataLastPrice"
65-
66-let F = "k_twapDataPreviousMinuteId"
67-
68-let G = "k_latestLongPremiumFraction"
69-
70-let H = "k_latestShortPremiumFraction"
71-
72-let I = "k_nextFundingBlockMinTimestamp"
73-
74-let J = "k_longFundingRate"
75-
76-let K = "k_shortFundingRate"
77-
78-let L = "k_qtAstR"
79-
80-let M = "k_bsAstR"
81-
82-let N = "k_qtAstW"
83-
84-let O = "k_bsAstW"
85-
86-let P = "k_totalPositionSize"
87-
88-let Q = "k_totalLongPositionSize"
89-
90-let R = "k_totalShortPositionSize"
91-
92-let S = "k_openInterestNotional"
93-
94-let T = "k_openInterestShort"
95-
96-let U = "k_openInterestLong"
97-
98-let V = "k_coordinatorAddress"
99-
100-let W = "k_vault_address"
101-
102-let X = "k_admin_address"
103-
104-let Y = "k_admin_public_key"
105-
106-let Z = "k_quote_asset"
107-
108-let aa = "k_quote_staking"
109-
110-let ab = "k_staking_address"
111-
112-let ac = "k_miner_address"
113-
114-let ad = "k_orders_address"
115-
116-let ae = "k_referral_address"
117-
118-let af = "k_collateral_address"
119-
120-let ag = "k_exchange_address"
121-
122-let ah = "k_nft_manager_address"
123-
124-let ai = "k_trader_market_asset_collateral"
125-
126-func aj (ak,al) = ((ak + "_") + al)
127-
128-
129-func am () = valueOrErrorMessage(addressFromString(getStringValue(this, V)), "Coordinator not set")
130-
131-
132-func an () = addressFromString(getStringValue(am(), X))
133-
134-
135-func ao () = fromBase58String(getStringValue(am(), Y))
136-
137-
138-func ap () = fromBase58String(getStringValue(am(), Z))
139-
140-
141-func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), aa)), "Quote asset staking not set")
142-
143-
144-func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), ab)), "Staking not set")
145-
146-
147-func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), W)), "Vault not set")
148-
149-
150-func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Miner not set")
151-
152-
153-func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Orders not set")
154-
155-
156-func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Referral not set")
157-
158-
159-func aw () = valueOrErrorMessage(addressFromString(getStringValue(am(), ah)), "NFT Manager not set")
160-
161-
162-func ax () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Collateral Manager not set")
163-
164-
165-func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(am(), ag), "No swap address")), "Invalid swap address")
166-
167-
168-let az = "k_whitelist_asset"
169-
170-func aA (aB) = valueOrElse(getBoolean(ax(), aj(az, aB)), false)
171-
172-
173-let aC = "k_token_param"
174-
175-let aD = "k_token_type"
176-
177-let aE = "fee_reduction"
178-
179-let aF = 1
180-
181-let aG = 2
182-
183-let aH = 15
28+let m = "k_positionFee"
29+
30+let n = "k_initialized"
31+
32+let o = "k_paused"
33+
34+let p = "k_closeOnly"
35+
36+let q = "k_fee"
37+
38+let r = "k_fundingPeriod"
39+
40+let s = "k_initMarginRatio"
41+
42+let t = "k_mmr"
43+
44+let u = "k_liquidationFeeRatio"
45+
46+let v = "k_partLiquidationRatio"
47+
48+let w = "k_spreadLimit"
49+
50+let x = "k_maxPriceImpact"
51+
52+let y = "k_maxPriceSpread"
53+
54+let z = "k_maxOpenNotional"
55+
56+let A = "k_feeToStakersPercent"
57+
58+let B = "k_maxOracleDelay"
59+
60+let C = "k_lastDataStr"
61+
62+let D = "k_lastMinuteId"
63+
64+let E = "k_twapDataLastCumulativePrice"
65+
66+let F = "k_twapDataLastPrice"
67+
68+let G = "k_twapDataPreviousMinuteId"
69+
70+let H = "k_latestLongPremiumFraction"
71+
72+let I = "k_latestShortPremiumFraction"
73+
74+let J = "k_nextFundingBlockMinTimestamp"
75+
76+let K = "k_longFundingRate"
77+
78+let L = "k_shortFundingRate"
79+
80+let M = "k_qtAstR"
81+
82+let N = "k_bsAstR"
83+
84+let O = "k_qtAstW"
85+
86+let P = "k_bsAstW"
87+
88+let Q = "k_totalPositionSize"
89+
90+let R = "k_totalLongPositionSize"
91+
92+let S = "k_totalShortPositionSize"
93+
94+let T = "k_openInterestNotional"
95+
96+let U = "k_openInterestShort"
97+
98+let V = "k_openInterestLong"
99+
100+let W = "k_coordinatorAddress"
101+
102+let X = "k_vault_address"
103+
104+let Y = "k_admin_address"
105+
106+let Z = "k_admin_public_key"
107+
108+let aa = "k_quote_asset"
109+
110+let ab = "k_quote_staking"
111+
112+let ac = "k_staking_address"
113+
114+let ad = "k_miner_address"
115+
116+let ae = "k_orders_address"
117+
118+let af = "k_referral_address"
119+
120+let ag = "k_collateral_address"
121+
122+let ah = "k_exchange_address"
123+
124+let ai = "k_nft_manager_address"
125+
126+let aj = "k_trader_market_asset_collateral"
127+
128+func ak (al,am) = ((al + "_") + am)
129+
130+
131+func an () = valueOrErrorMessage(addressFromString(getStringValue(this, W)), "Coordinator not set")
132+
133+
134+func ao () = addressFromString(getStringValue(an(), Y))
135+
136+
137+func ap () = fromBase58String(getStringValue(an(), Z))
138+
139+
140+func aq () = fromBase58String(getStringValue(an(), aa))
141+
142+
143+func ar () = valueOrErrorMessage(addressFromString(getStringValue(an(), ab)), "Quote asset staking not set")
144+
145+
146+func as () = valueOrErrorMessage(addressFromString(getStringValue(an(), ac)), "Staking not set")
147+
148+
149+func at () = valueOrErrorMessage(addressFromString(getStringValue(an(), X)), "Vault not set")
150+
151+
152+func au () = valueOrErrorMessage(addressFromString(getStringValue(an(), ad)), "Miner not set")
153+
154+
155+func av () = valueOrErrorMessage(addressFromString(getStringValue(an(), ae)), "Orders not set")
156+
157+
158+func aw () = valueOrErrorMessage(addressFromString(getStringValue(an(), af)), "Referral not set")
159+
160+
161+func ax () = valueOrErrorMessage(addressFromString(getStringValue(an(), ai)), "NFT Manager not set")
162+
163+
164+func ay () = valueOrErrorMessage(addressFromString(getStringValue(an(), ag)), "Collateral Manager not set")
165+
166+
167+func az () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(an(), ah), "No swap address")), "Invalid swap address")
168+
169+
170+let aA = "k_whitelist_asset"
171+
172+func aB (aC) = valueOrElse(getBoolean(ay(), ak(aA, aC)), false)
173+
174+
175+let aD = "k_token_param"
176+
177+let aE = "k_token_type"
178+
179+let aF = "fee_reduction"
180+
181+let aG = 1
182+
183+let aH = 2
184184
185185 let aI = 15
186186
187-let aJ = 1000
188-
189-let aK = 6
190-
191-let aL = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
192-
193-let aM = (86400 * aL)
194-
195-let aN = 100
196-
197-let aO = 1
198-
199-let aP = 2
200-
201-func aQ (aR) = (toString(aR) + ",")
202-
203-
204-func aS (aR,aT) = fraction(aR, aL, aT, HALFEVEN)
205-
206-
207-func aU (aR,aT) = fraction(aR, aT, aL, HALFEVEN)
208-
209-
210-func aV (aR) = sqrt(aR, aK, aK, HALFEVEN)
211-
212-
213-func aW (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
214-
215-
216-func aX (aR,aT) = fraction(aR, toBigInt(aL), aT, HALFEVEN)
217-
218-
219-func aY (aR,aT) = fraction(aR, aT, toBigInt(aL), HALFEVEN)
220-
221-
222-func aZ (aR) = sqrtBigInt(aR, aK, aK, HALFEVEN)
223-
224-
225-func ba (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
226-
227-
228-func bb (aR) = if ((aR > 0))
229- then aR
230- else -(aR)
231-
232-
233-func bc (aR,aT) = if ((aR >= aT))
234- then aR
235- else aT
236-
237-
238-func bd (be) = {
239- func bf (bg,bh) = ((bg + bh) + ",")
240-
241- let bi = {
242- let bj = be
243- let bk = size(bj)
244- let bl = ""
245- func bm (bn,bo) = if ((bo >= bk))
246- then bn
247- else bf(bn, bj[bo])
248-
249- func bp (bn,bo) = if ((bo >= bk))
250- then bn
187+let aJ = 15
188+
189+let aK = 1000
190+
191+let aL = 6
192+
193+let aM = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
194+
195+let aN = (86400 * aM)
196+
197+let aO = 100
198+
199+let aP = 1
200+
201+let aQ = 2
202+
203+func aR (aS) = (toString(aS) + ",")
204+
205+
206+func aT (aS,aU) = fraction(aS, aM, aU, HALFEVEN)
207+
208+
209+func aV (aS,aU) = fraction(aS, aU, aM, HALFEVEN)
210+
211+
212+func aW (aS) = sqrt(aS, aL, aL, HALFEVEN)
213+
214+
215+func aX (aS,aU) = pow(aS, aL, aU, aL, aL, HALFEVEN)
216+
217+
218+func aY (aS,aU) = fraction(aS, toBigInt(aM), aU, HALFEVEN)
219+
220+
221+func aZ (aS,aU) = fraction(aS, aU, toBigInt(aM), HALFEVEN)
222+
223+
224+func ba (aS) = sqrtBigInt(aS, aL, aL, HALFEVEN)
225+
226+
227+func bb (aS,aU) = pow(aS, aL, aU, aL, aL, HALFEVEN)
228+
229+
230+func bc (aS) = if ((aS > 0))
231+ then aS
232+ else -(aS)
233+
234+
235+func bd (aS,aU) = if ((aS >= aU))
236+ then aS
237+ else aU
238+
239+
240+func be (bf) = {
241+ func bg (bh,bi) = ((bh + bi) + ",")
242+
243+ let bj = {
244+ let bk = bf
245+ let bl = size(bk)
246+ let bm = ""
247+ func bn (bo,bp) = if ((bp >= bl))
248+ then bo
249+ else bg(bo, bk[bp])
250+
251+ func bq (bo,bp) = if ((bp >= bl))
252+ then bo
251253 else throw("List size exceeds 20")
252254
253- bp(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bl, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
255+ bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
254256 }
255- let bq = dropRight(bi, 1)
256- let br = if ((take(bq, 1) == ","))
257- then drop(bq, 1)
258- else bq
259- br
260- }
261-
262-
263-func bs (bt) = split(bt, ",")
264-
265-
266-func bu (be,bv,bw) = if ((size(be) > bv))
267- then (removeByIndex(be, 0) :+ bw)
268- else (be :+ bw)
269-
270-
271-func bx (by) = valueOrErrorMessage(getInteger(this, by), ("no value for " + by))
272-
273-
274-func bz (by,bA) = valueOrElse(getInteger(this, by), bA)
275-
276-
277-func bB (al,ak) = {
278- let bh = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
279- bh
280- }
281-
282-
283-func bC (al,ak) = {
284- let bh = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
285- bh
286- }
287-
288-
289-func bD () = bx(e)
290-
291-
292-func bE () = bx(p)
293-
294-
295-func bF () = bx(r)
296-
297-
298-func bG () = bx(L)
299-
300-
301-func bH () = bx(M)
302-
303-
304-func bI () = bz(N, aL)
305-
306-
307-func bJ () = bz(O, aL)
308-
309-
310-func bK () = bx(P)
311-
312-
313-func bL () = bx(S)
314-
315-
316-func bM () = bx(T)
317-
318-
319-func bN () = bx(U)
320-
321-
322-func bO () = bx(I)
323-
324-
325-func bP () = bx(q)
326-
327-
328-func bQ () = (bP() * aL)
329-
330-
331-func bR () = (bP() * aJ)
332-
333-
334-func bS () = bx(s)
335-
336-
337-func bT () = bx(t)
338-
339-
340-func bU () = bx(u)
341-
342-
343-func bV () = bx(v)
344-
345-
346-func bW () = bx(w)
347-
348-
349-func bX () = bx(x)
350-
351-
352-func bY () = bx(y)
353-
354-
355-func bZ () = bx(G)
356-
357-
358-func ca () = bx(H)
359-
360-
361-func cb () = bx(R)
362-
363-
364-func cc () = bx(Q)
365-
366-
367-func cd () = bz(f, 0)
368-
369-
370-func ce () = bx(z)
371-
372-
373-func cf () = bx(A)
374-
375-
376-func cg (ch) = valueOrElse(getString(au(), "k_sender"), toString(ch.caller))
377-
378-
379-func ci (cj,ck,cl) = {
380- let cm = (cj - ck)
381- if (if (cl)
382- then (0 > cm)
257+ let br = dropRight(bj, 1)
258+ let bs = if ((take(br, 1) == ","))
259+ then drop(br, 1)
260+ else br
261+ bs
262+ }
263+
264+
265+func bt (bu) = split(bu, ",")
266+
267+
268+func bv (bf,bw,bx) = if ((size(bf) > bw))
269+ then (removeByIndex(bf, 0) :+ bx)
270+ else (bf :+ bx)
271+
272+
273+func by (bz) = valueOrErrorMessage(getInteger(this, bz), ("no value for " + bz))
274+
275+
276+func bA (bz,bB) = valueOrElse(getInteger(this, bz), bB)
277+
278+
279+func bC (am,al) = {
280+ let bi = valueOrErrorMessage(getString(am, al), ("No value for key " + al))
281+ bi
282+ }
283+
284+
285+func bD (am,al) = {
286+ let bi = valueOrErrorMessage(getInteger(am, al), ("No value for key " + al))
287+ bi
288+ }
289+
290+
291+func bE () = by(e)
292+
293+
294+func bF () = by(q)
295+
296+
297+func bG () = by(s)
298+
299+
300+func bH () = by(M)
301+
302+
303+func bI () = by(N)
304+
305+
306+func bJ () = bA(O, aM)
307+
308+
309+func bK () = bA(P, aM)
310+
311+
312+func bL () = by(Q)
313+
314+
315+func bM () = by(T)
316+
317+
318+func bN () = by(U)
319+
320+
321+func bO () = by(V)
322+
323+
324+func bP () = by(J)
325+
326+
327+func bQ () = by(r)
328+
329+
330+func bR () = (bQ() * aM)
331+
332+
333+func bS () = (bQ() * aK)
334+
335+
336+func bT () = by(t)
337+
338+
339+func bU () = by(u)
340+
341+
342+func bV () = by(v)
343+
344+
345+func bW () = by(w)
346+
347+
348+func bX () = by(x)
349+
350+
351+func bY () = by(y)
352+
353+
354+func bZ () = by(z)
355+
356+
357+func ca () = by(H)
358+
359+
360+func cb () = by(I)
361+
362+
363+func cc () = by(S)
364+
365+
366+func cd () = by(R)
367+
368+
369+func ce () = bA(f, 0)
370+
371+
372+func cf () = by(A)
373+
374+
375+func cg () = by(B)
376+
377+
378+func ch (ci) = valueOrElse(getString(av(), "k_sender"), toString(ci.caller))
379+
380+
381+func cj (ck,cl,cm) = {
382+ let cn = (ck - cl)
383+ if (if (cm)
384+ then (0 > cn)
383385 else false)
384- then throw(((("Invalid margin: " + toString(cj)) + " < ") + toString(ck)))
385- else if (if (!(cl))
386- then (cm >= 0)
386+ then throw(((("Invalid margin: " + toString(ck)) + " < ") + toString(cl)))
387+ else if (if (!(cm))
388+ then (cn >= 0)
387389 else false)
388- then throw(((("Invalid margin: " + toString(cj)) + " > ") + toString(ck)))
390+ then throw(((("Invalid margin: " + toString(ck)) + " > ") + toString(cl)))
389391 else true
390392 }
391393
392394
393-func cn (co) = if ((co == 0))
395+func co (cp) = if ((cp == 0))
394396 then throw("Should not be called with _positionSize == 0")
395- else if ((co > 0))
396- then bZ()
397- else ca()
398-
399-
400-func cp (cq) = {
401- let cr = getInteger(this, aj(g, cq))
402- let cs = cr
403- if ($isInstanceOf(cs, "Int"))
397+ else if ((cp > 0))
398+ then ca()
399+ else cb()
400+
401+
402+func cq (cr) = {
403+ let cs = getInteger(this, ak(g, cr))
404+ let ct = cs
405+ if ($isInstanceOf(ct, "Int"))
404406 then {
405- let ct = cs
406- $Tuple4(ct, getIntegerValue(this, aj(h, cq)), getIntegerValue(this, aj(i, cq)), getIntegerValue(this, aj(j, cq)))
407+ let cu = ct
408+ $Tuple4(cu, getIntegerValue(this, ak(h, cr)), getIntegerValue(this, ak(i, cr)), getIntegerValue(this, ak(j, cr)))
407409 }
408410 else $Tuple4(0, 0, 0, 0)
409411 }
410412
411413
412-func cu (cq) = {
413- let cv = getString(this, aj(l, cq))
414- let cs = cv
415- if ($isInstanceOf(cs, "String"))
414+func cv (cr) = {
415+ let cw = getString(this, ak(l, cr))
416+ let ct = cw
417+ if ($isInstanceOf(ct, "String"))
416418 then {
417- let cw = cs
418- cw
419- }
420- else toBase58String(ap())
421- }
422-
423-
424-func cx (cq) = if ((cp(cq)._1 == 0))
419+ let cx = ct
420+ cx
421+ }
422+ else toBase58String(aq())
423+ }
424+
425+
426+func cy (cr) = {
427+ let cz = getInteger(this, ak(m, cr))
428+ let ct = cz
429+ if ($isInstanceOf(ct, "Int"))
430+ then {
431+ let cA = ct
432+ cA
433+ }
434+ else bF()
435+ }
436+
437+
438+func cB (cr) = if ((cq(cr)._1 == 0))
425439 then throw("No open position")
426440 else true
427441
428442
429-func cy () = valueOrElse(getBoolean(this, m), false)
430-
431-
432-func cz () = valueOrElse(getBoolean(this, n), false)
433-
434-
435-func cA () = valueOrElse(getBoolean(this, o), false)
436-
437-
438-func cB (cC,cD,cE) = if (cC)
443+func cC () = valueOrElse(getBoolean(this, n), false)
444+
445+
446+func cD () = valueOrElse(getBoolean(this, o), false)
447+
448+
449+func cE () = valueOrElse(getBoolean(this, p), false)
450+
451+
452+func cF (cG,cH,cI) = if (cG)
439453 then {
440- let cF = (bH() - cE)
441- if ((0 >= cF))
454+ let cJ = (bI() - cI)
455+ if ((0 >= cJ))
442456 then throw("Tx lead to base asset reserve <= 0, revert")
443- else $Tuple3((bG() + cD), cF, (bK() + cE))
457+ else $Tuple3((bH() + cH), cJ, (bL() + cI))
444458 }
445459 else {
446- let cG = (bG() - cD)
447- if ((0 >= cG))
460+ let cK = (bH() - cH)
461+ if ((0 >= cK))
448462 then throw("Tx lead to base quote reserve <= 0, revert")
449- else $Tuple3(cG, (bH() + cE), (bK() - cE))
463+ else $Tuple3(cK, (bI() + cI), (bL() - cI))
450464 }
451465
452466
453-func cH (cI,cJ) = {
454- let cK = toBigInt(cI)
455- let cL = toBigInt(cJ)
456- aY(cK, cL)
457- }
458-
459-
460-func cM (cC,cD) = {
461- let cI = bG()
462- let cJ = bH()
467+func cL (cM,cN) = {
468+ let cO = toBigInt(cM)
469+ let cP = toBigInt(cN)
470+ aZ(cO, cP)
471+ }
472+
473+
474+func cQ (cG,cH) = {
475+ let cM = bH()
463476 let cN = bI()
464- let cO = bJ()
465- let cP = aS(cD, cN)
466- let by = cH(cI, cJ)
467- let cQ = if (cC)
468- then (cI + cP)
469- else (cI - cP)
470- let cR = toInt(aX(by, toBigInt(cQ)))
471- let cS = bb((cR - cJ))
472- let cT = if (cC)
473- then cS
474- else -(cS)
475- let cU = cB(cC, cP, cS)
476- let cV = cU._1
477- let cW = cU._2
478- let cX = cU._3
479- let cY = aS(aU(cI, cN), aU(cJ, cO))
480- let cZ = aS(cD, cS)
481- let da = bb((cY - cZ))
482- let db = (aL - aS(cY, (cY + da)))
483- let dc = bW()
484- if ((db > dc))
485- then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(cI)) + " before base asset: ") + toString(cJ)) + " quote asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cY)) + " marketPrice: ") + toString(cZ)))
486- else $Tuple4(cT, cV, cW, cX)
487- }
488-
489-
490-func dd (de,df,dg,dh) = {
491- let di = if ((de != 0))
477+ let cR = bJ()
478+ let cS = bK()
479+ let cT = aT(cH, cR)
480+ let bz = cL(cM, cN)
481+ let cU = if (cG)
482+ then (cM + cT)
483+ else (cM - cT)
484+ let cV = toInt(aY(bz, toBigInt(cU)))
485+ let cW = bc((cV - cN))
486+ let cX = if (cG)
487+ then cW
488+ else -(cW)
489+ let cY = cF(cG, cT, cW)
490+ let cZ = cY._1
491+ let da = cY._2
492+ let db = cY._3
493+ let dc = aT(aV(cM, cR), aV(cN, cS))
494+ let dd = aT(cH, cW)
495+ let de = bc((dc - dd))
496+ let df = (aM - aT(dc, (dc + de)))
497+ let dg = bX()
498+ if ((df > dg))
499+ then throw(((((((((((((("Price impact " + toString(df)) + " > max price impact ") + toString(dg)) + " before quote asset: ") + toString(cM)) + " before base asset: ") + toString(cN)) + " quote asset amount to exchange: ") + toString(cH)) + " price before: ") + toString(dc)) + " marketPrice: ") + toString(dd)))
500+ else $Tuple4(cX, cZ, da, db)
501+ }
502+
503+
504+func dh (di,dj,dk,dl) = {
505+ let dm = if ((di != 0))
492506 then {
493- let dj = cn(de)
494- aU((dj - dg), de)
507+ let dn = co(di)
508+ aV((dn - dk), di)
495509 }
496510 else 0
497- let dk = ((dh - di) + df)
498- let dl = if ((0 > dk))
499- then $Tuple2(0, bb(dk))
500- else $Tuple2(bb(dk), 0)
501- let dm = dl._1
502- let dn = dl._2
503- $Tuple3(dm, dn, di)
504- }
505-
506-
507-func do (cC,cE,dp,dq,dr,ds,dt) = {
508- let cY = aS(aU(dq, dr), aU(ds, dt))
509- if ((cE == 0))
511+ let do = ((dl - dm) + dj)
512+ let dp = if ((0 > do))
513+ then $Tuple2(0, bc(do))
514+ else $Tuple2(bc(do), 0)
515+ let dq = dp._1
516+ let dr = dp._2
517+ $Tuple3(dq, dr, dm)
518+ }
519+
520+
521+func ds (cG,cI,dt,du,dv,dw,dx) = {
522+ let dc = aT(aV(du, dv), aV(dw, dx))
523+ if ((cI == 0))
510524 then throw("Invalid base asset amount")
511525 else {
512- let by = cH(dq, ds)
513- let du = if (cC)
514- then (ds + cE)
515- else (ds - cE)
516- let dv = toInt(aX(by, toBigInt(du)))
517- let dw = bb((dv - dq))
518- let dx = aU(dw, dr)
519- let dc = bW()
520- let dy = cB(!(cC), dw, cE)
521- let cV = dy._1
522- let cW = dy._2
523- let cX = dy._3
524- let cZ = aS(dx, cE)
525- let da = bb((cY - cZ))
526- let db = (aL - aS(cY, (cY + da)))
527- if (if ((db > dc))
528- then dp
526+ let bz = cL(du, dw)
527+ let dy = if (cG)
528+ then (dw + cI)
529+ else (dw - cI)
530+ let dz = toInt(aY(bz, toBigInt(dy)))
531+ let dA = bc((dz - du))
532+ let dB = aV(dA, dv)
533+ let dg = bX()
534+ let dC = cF(!(cG), dA, cI)
535+ let cZ = dC._1
536+ let da = dC._2
537+ let db = dC._3
538+ let dd = aT(dB, cI)
539+ let de = bc((dc - dd))
540+ let df = (aM - aT(dc, (dc + de)))
541+ if (if ((df > dg))
542+ then dt
529543 else false)
530- then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(dq)) + " before base asset: ") + toString(ds)) + " base asset amount to exchange: ") + toString(cE)) + " price before: ") + toString(cY)) + " market price: ") + toString(cZ)))
531- else $Tuple7(dx, cV, cW, cX, (cc() - (if (cC)
532- then bb(cE)
533- else 0)), (cb() - (if (!(cC))
534- then bb(cE)
535- else 0)), db)
536- }
537- }
538-
539-
540-func dz (cC,cE,dp) = do(cC, cE, dp, bG(), bI(), bH(), bJ())
541-
542-
543-func dA () = {
544- let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
545- let dC = getStringValue(this, a)
546- let dD = valueOrErrorMessage(getInteger(dB, dC), ((("Can not get oracle price. Oracle: " + toString(dB)) + " key: ") + dC))
547- let dE = valueOrElse(getString(this, b), "")
548- if ((dE != ""))
549- then {
550- let dF = lastBlock.height
551- let dG = valueOrErrorMessage(getInteger(dB, dE), ((("Can not get oracle block. Oracle: " + toString(dB)) + " key: ") + dE))
552- if (((dF - dG) > cf()))
553- then throw(((("Oracle stale data. Last oracle block: " + toString(dG)) + " current block: ") + toString(dF)))
554- else dD
555- }
556- else dD
557- }
558-
559-
560-func dH () = {
561- let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
562- let dI = valueOrElse(getString(this, c), "")
544+ then throw(((((((((((((("Price impact " + toString(df)) + " > max price impact ") + toString(dg)) + " before quote asset: ") + toString(du)) + " before base asset: ") + toString(dw)) + " base asset amount to exchange: ") + toString(cI)) + " price before: ") + toString(dc)) + " market price: ") + toString(dd)))
545+ else $Tuple7(dB, cZ, da, db, (cd() - (if (cG)
546+ then bc(cI)
547+ else 0)), (cc() - (if (!(cG))
548+ then bc(cI)
549+ else 0)), df)
550+ }
551+ }
552+
553+
554+func dD (cG,cI,dt) = ds(cG, cI, dt, bH(), bJ(), bI(), bK())
555+
556+
557+func dE () = {
558+ let dF = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
559+ let dG = getStringValue(this, a)
560+ let dH = valueOrErrorMessage(getInteger(dF, dG), ((("Can not get oracle price. Oracle: " + toString(dF)) + " key: ") + dG))
561+ let dI = valueOrElse(getString(this, b), "")
563562 if ((dI != ""))
564563 then {
565- let dJ = valueOrErrorMessage(getBoolean(dB, dI), ((("Can not get oracle is open/closed. Oracle: " + toString(dB)) + " key: ") + dI))
566- !(dJ)
564+ let dJ = lastBlock.height
565+ let dK = valueOrErrorMessage(getInteger(dF, dI), ((("Can not get oracle block. Oracle: " + toString(dF)) + " key: ") + dI))
566+ if (((dJ - dK) > cg()))
567+ then throw(((("Oracle stale data. Last oracle block: " + toString(dK)) + " current block: ") + toString(dJ)))
568+ else dH
569+ }
570+ else dH
571+ }
572+
573+
574+func dL () = {
575+ let dF = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
576+ let dM = valueOrElse(getString(this, c), "")
577+ if ((dM != ""))
578+ then {
579+ let dN = valueOrErrorMessage(getBoolean(dF, dM), ((("Can not get oracle is open/closed. Oracle: " + toString(dF)) + " key: ") + dM))
580+ !(dN)
567581 }
568582 else false
569583 }
570584
571585
572-func dK (dL,dq,ds,cN,cO) = {
573- let dM = aS(aU(dq, cN), aU(ds, cO))
574- let dN = aS((dL + dM), (2 * aL))
575- let dK = aS(bb((dL - dM)), dN)
576- dK
577- }
578-
579-
580-func dO (dq,ds) = {
581- let dP = dA()
582- let cN = bI()
583- let cO = bJ()
584- let dQ = dK(dP, bG(), bH(), cN, cO)
585- let dR = dK(dP, dq, ds, cN, cO)
586- if (if ((dR > bX()))
587- then (dR > dQ)
586+func dO (dP,du,dw,cR,cS) = {
587+ let dQ = aT(aV(du, cR), aV(dw, cS))
588+ let dR = aT((dP + dQ), (2 * aM))
589+ let dO = aT(bc((dP - dQ)), dR)
590+ dO
591+ }
592+
593+
594+func dS (du,dw) = {
595+ let dT = dE()
596+ let cR = bJ()
597+ let cS = bK()
598+ let dU = dO(dT, bH(), bI(), cR, cS)
599+ let dV = dO(dT, du, dw, cR, cS)
600+ if (if ((dV > bY()))
601+ then (dV > dU)
588602 else false)
589- then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bX())))
603+ then throw(((("Price spread " + toString(dV)) + " > max price spread ") + toString(bY())))
590604 else true
591605 }
592606
593607
594-func dS (dT,dU) = {
595- let dV = bY()
596- if ((dT > dV))
597- then throw(((("Long open notional " + toString(dT)) + " > max open notional ") + toString(dV)))
598- else if ((dU > dV))
599- then throw(((("Short open notional " + toString(dU)) + " > max open notional ") + toString(dV)))
608+func dW (dX,dY) = {
609+ let dZ = bZ()
610+ if ((dX > dZ))
611+ then throw(((("Long open notional " + toString(dX)) + " > max open notional ") + toString(dZ)))
612+ else if ((dY > dZ))
613+ then throw(((("Short open notional " + toString(dY)) + " > max open notional ") + toString(dZ)))
600614 else true
601615 }
602616
603617
604-func dW () = {
605- let dq = bG()
606- let ds = bH()
607- let cN = bI()
608- let cO = bJ()
609- aS(aU(dq, cN), aU(ds, cO))
610- }
611-
612-
613-func dX () = {
614- let dP = dA()
615- let dY = dW()
616- (aS(bb((dP - dY)), dP) > bV())
617- }
618-
619-
620-func dZ (co,ea,dq,dr,ds,dt) = {
621- let eb = bb(co)
622- let ec = (0 > co)
623- let ed = if ((ea == aO))
618+func ea () = {
619+ let du = bH()
620+ let dw = bI()
621+ let cR = bJ()
622+ let cS = bK()
623+ aT(aV(du, cR), aV(dw, cS))
624+ }
625+
626+
627+func eb () = {
628+ let dT = dE()
629+ let ec = ea()
630+ (aT(bc((dT - ec)), dT) > bW())
631+ }
632+
633+
634+func ed (cp,ee,du,dv,dw,dx) = {
635+ let ef = bc(cp)
636+ let eg = (0 > cp)
637+ let eh = if ((ee == aP))
624638 then {
625- let ee = do(!(ec), eb, false, dq, dr, ds, dt)
626- let ef = ee._1
627- let eg = ee._2
628- let eh = ee._3
629- let ei = ee._4
630- ef
631- }
632- else aU(eb, dA())
633- ed
634- }
635-
636-
637-func ej (co,ek,dq,dr,ds,dt,ea) = if ((co == 0))
639+ let ei = ds(!(eg), ef, false, du, dv, dw, dx)
640+ let ej = ei._1
641+ let ek = ei._2
642+ let el = ei._3
643+ let em = ei._4
644+ ej
645+ }
646+ else aV(ef, dE())
647+ eh
648+ }
649+
650+
651+func en (cp,eo,du,dv,dw,dx,ee) = if ((cp == 0))
638652 then throw("Invalid position size")
639653 else {
640- let ec = (0 > co)
641- let ed = dZ(co, ea, dq, dr, ds, dt)
642- let el = if (ec)
643- then (ek - ed)
644- else (ed - ek)
645- $Tuple2(ed, el)
654+ let eg = (0 > cp)
655+ let eh = ed(cp, ee, du, dv, dw, dx)
656+ let ep = if (eg)
657+ then (eo - eh)
658+ else (eh - eo)
659+ $Tuple2(eh, ep)
646660 }
647661
648662
649-func em (cq,ea) = {
650- let en = cp(cq)
651- let ct = en._1
652- let eo = en._2
653- let ep = en._3
654- let eq = en._4
655- ej(ct, ep, bG(), bI(), bH(), bJ(), ea)
656- }
657-
658-
659-func er (es,et,eu) = aS((es - et), eu)
660-
661-
662-func ev (cq,ea) = {
663- let ew = cp(cq)
664- let ct = ew._1
665- let eo = ew._2
666- let ex = ew._3
667- let eq = ew._4
668- let ey = em(cq, ea)
669- let ed = ey._1
670- let el = ey._2
671- let ez = dd(ct, eo, eq, el)
672- let dm = ez._1
673- let dn = ez._2
674- er(dm, dn, ed)
675- }
676-
677-
678-func eA (cq) = ev(cq, aO)
679-
680-
681-func eB (cq,co) = {
682- let eC = bc(bU(), (aL - aS(eA(cq), bS())))
683- let eD = aU(bb(co), eC)
684- let eE = dz((co > 0), eD, false)
685- let eF = eE._1
686- let db = eE._7
687- if ((bW() > db))
688- then eF
663+func eq (cr,ee) = {
664+ let er = cq(cr)
665+ let cu = er._1
666+ let es = er._2
667+ let et = er._3
668+ let eu = er._4
669+ en(cu, et, bH(), bJ(), bI(), bK(), ee)
670+ }
671+
672+
673+func ev (ew,ex,ey) = aT((ew - ex), ey)
674+
675+
676+func ez (cr,ee) = {
677+ let eA = cq(cr)
678+ let cu = eA._1
679+ let es = eA._2
680+ let eB = eA._3
681+ let eu = eA._4
682+ let eC = eq(cr, ee)
683+ let eh = eC._1
684+ let ep = eC._2
685+ let eD = dh(cu, es, eu, ep)
686+ let dq = eD._1
687+ let dr = eD._2
688+ ev(dq, dr, eh)
689+ }
690+
691+
692+func eE (cr) = ez(cr, aP)
693+
694+
695+func eF (cr,cp) = {
696+ let eG = bd(bV(), (aM - aT(eE(cr), bT())))
697+ let eH = aV(bc(cp), eG)
698+ let eI = dD((cp > 0), eH, false)
699+ let eJ = eI._1
700+ let df = eI._7
701+ if ((bX() > df))
702+ then eJ
689703 else {
690- let eG = aU(bb(co), bU())
691- let eH = dz((co > 0), eG, false)._1
692- eH
693- }
694- }
695-
696-
697-func eI (cq,dp) = {
698- let eJ = cp(cq)
699- let ct = eJ._1
700- let eo = eJ._2
701- let ep = eJ._3
702- let eq = eJ._4
703- let el = em(cq, aO)._2
704- let eK = dd(ct, eo, eq, el)
705- let dm = eK._1
706- let dn = eK._2
707- let eG = -(ct)
708- let eL = el
709- let eM = -(dm)
710- let eN = dz((ct > 0), bb(ct), dp)
711- let eH = eN._1
712- let cQ = eN._2
713- let cR = eN._3
714- let eO = eN._4
715- let eP = eN._5
716- let eQ = eN._6
717- let eR = (bL() - ep)
718- $Tuple13(eG, dn, eL, eM, cQ, cR, eO, eR, eH, eP, eQ, (bN() - (if ((ct > 0))
719- then ep
720- else 0)), (bM() - (if ((0 > ct))
721- then ep
704+ let eK = aV(bc(cp), bV())
705+ let eL = dD((cp > 0), eK, false)._1
706+ eL
707+ }
708+ }
709+
710+
711+func eM (cr,dt) = {
712+ let eN = cq(cr)
713+ let cu = eN._1
714+ let es = eN._2
715+ let et = eN._3
716+ let eu = eN._4
717+ let ep = eq(cr, aP)._2
718+ let eO = dh(cu, es, eu, ep)
719+ let dq = eO._1
720+ let dr = eO._2
721+ let eK = -(cu)
722+ let eP = ep
723+ let eQ = -(dq)
724+ let eR = dD((cu > 0), bc(cu), dt)
725+ let eL = eR._1
726+ let cU = eR._2
727+ let cV = eR._3
728+ let eS = eR._4
729+ let eT = eR._5
730+ let eU = eR._6
731+ let eV = (bM() - et)
732+ $Tuple13(eK, dr, eP, eQ, cU, cV, eS, eV, eL, eT, eU, (bO() - (if ((cu > 0))
733+ then et
734+ else 0)), (bN() - (if ((0 > cu))
735+ then et
722736 else 0)))
723737 }
724738
725739
726-func eS () = {
727- let eT = ((lastBlock.timestamp / 1000) / 60)
728- let eU = (eT - aH)
729- let eV = valueOrElse(getString(this, B), "")
730- let eW = split(eV, ",")
731- func eX (bg,eY) = if ((eU >= parseIntValue(eY)))
732- then (bg :+ parseIntValue(eY))
733- else bg
734-
735- let eZ = {
736- let bj = eW
737- let bk = size(bj)
738- let bl = nil
739- func bm (bn,bo) = if ((bo >= bk))
740- then bn
741- else eX(bn, bj[bo])
742-
743- func bp (bn,bo) = if ((bo >= bk))
744- then bn
740+func eW () = {
741+ let eX = ((lastBlock.timestamp / 1000) / 60)
742+ let eY = (eX - aI)
743+ let eZ = valueOrElse(getString(this, C), "")
744+ let fa = split(eZ, ",")
745+ func fb (bh,fc) = if ((eY >= parseIntValue(fc)))
746+ then (bh :+ parseIntValue(fc))
747+ else bh
748+
749+ let fd = {
750+ let bk = fa
751+ let bl = size(bk)
752+ let bm = nil
753+ func bn (bo,bp) = if ((bp >= bl))
754+ then bo
755+ else fb(bo, bk[bp])
756+
757+ func bq (bo,bp) = if ((bp >= bl))
758+ then bo
745759 else throw("List size exceeds 20")
746760
747- bp(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bl, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
761+ bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
748762 }
749- let fa = if ((size(eZ) > 0))
750- then max(eZ)
751- else parseIntValue(eW[0])
752- let fb = valueOrElse(getInteger(this, C), 0)
753- let fc = valueOrElse(getInteger(this, ((D + "_") + toString(fb))), 0)
754- let fd = valueOrElse(getInteger(this, ((E + "_") + toString(fb))), 0)
755- let fe = (fc + ((eT - fb) * fd))
756- let ff = valueOrElse(getInteger(this, ((D + "_") + toString(fa))), 0)
757- let fg = valueOrElse(getInteger(this, ((E + "_") + toString(fa))), 0)
758- let fh = (ff + ((eU - fa) * fg))
759- ((fe - fh) / aH)
760- }
761-
762-
763-func fi () = {
764- let co = bK()
765- if ((co == 0))
766- then $Tuple2(bG(), bH())
763+ let fe = if ((size(fd) > 0))
764+ then max(fd)
765+ else parseIntValue(fa[0])
766+ let ff = valueOrElse(getInteger(this, D), 0)
767+ let fg = valueOrElse(getInteger(this, ((E + "_") + toString(ff))), 0)
768+ let fh = valueOrElse(getInteger(this, ((F + "_") + toString(ff))), 0)
769+ let fi = (fg + ((eX - ff) * fh))
770+ let fj = valueOrElse(getInteger(this, ((E + "_") + toString(fe))), 0)
771+ let fk = valueOrElse(getInteger(this, ((F + "_") + toString(fe))), 0)
772+ let fl = (fj + ((eY - fe) * fk))
773+ ((fi - fl) / aI)
774+ }
775+
776+
777+func fm () = {
778+ let cp = bL()
779+ if ((cp == 0))
780+ then $Tuple2(bH(), bI())
767781 else {
768- let fj = (co > 0)
769- let fk = dz(fj, bb(co), false)
770- let fl = fk._1
771- let fm = fk._2
772- let fn = fk._3
773- $Tuple2(fm, fn)
774- }
775- }
776-
777-
778-func fo (fp,bK,fq,fr) = {
779- let fs = toBigInt(fp)
780- let ft = toBigInt(bK)
781- let fu = toBigInt(fq)
782- let fv = toBigInt(fr)
783- let by = aY(fu, fs)
784- let fw = (fs + ft)
785- let fx = aX(by, fw)
786- let fy = aX(fx, fw)
787- let fz = aX(fv, fy)
788- toInt(fz)
789- }
790-
791-
792-func fA (fB,cI,cJ) = {
793- let co = bK()
794- if ((co == 0))
782+ let fn = (cp > 0)
783+ let fo = dD(fn, bc(cp), false)
784+ let fp = fo._1
785+ let fq = fo._2
786+ let fr = fo._3
787+ $Tuple2(fq, fr)
788+ }
789+ }
790+
791+
792+func fs (ft,bL,fu,fv) = {
793+ let fw = toBigInt(ft)
794+ let fx = toBigInt(bL)
795+ let fy = toBigInt(fu)
796+ let fz = toBigInt(fv)
797+ let bz = aZ(fy, fw)
798+ let fA = (fw + fx)
799+ let fB = aY(bz, fA)
800+ let fC = aY(fB, fA)
801+ let fD = aY(fz, fC)
802+ toInt(fD)
803+ }
804+
805+
806+func fE (fF,cM,cN) = {
807+ let cp = bL()
808+ if ((cp == 0))
795809 then {
796- let fC = aS(aU(fB, cJ), cI)
797- $Tuple3(fC, aL, 0)
810+ let fG = aT(aV(fF, cN), cM)
811+ $Tuple3(fG, aM, 0)
798812 }
799813 else {
800- let fj = (co > 0)
801- let fl = dz(fj, bb(co), false)._1
802- let fC = fo(cJ, co, cI, fB)
803- let fD = aL
804- let eM = ej(co, fl, cI, fC, cJ, fD, aO)._2
805- $Tuple3(fC, fD, eM)
806- }
807- }
808-
809-
810-func fE () = {
811- let fF = dA()
812- let fG = eS()
813- let fH = (fG - fF)
814- if (if (if ((cb() == 0))
814+ let fn = (cp > 0)
815+ let fp = dD(fn, bc(cp), false)._1
816+ let fG = fs(cN, cp, cM, fF)
817+ let fH = aM
818+ let eQ = en(cp, fp, cM, fG, cN, fH, aP)._2
819+ $Tuple3(fG, fH, eQ)
820+ }
821+ }
822+
823+
824+func fI () = {
825+ let fJ = dE()
826+ let fK = eW()
827+ let fL = (fK - fJ)
828+ if (if (if ((cc() == 0))
815829 then true
816- else (cc() == 0))
830+ else (cd() == 0))
817831 then true
818- else dH())
832+ else dL())
819833 then $Tuple2(0, 0)
820- else if ((0 > fH))
834+ else if ((0 > fL))
821835 then {
822- let fI = aS(aU(fH, bQ()), aM)
823- let fJ = aS(aU(fI, cb()), cc())
824- $Tuple2(fI, fJ)
836+ let fM = aT(aV(fL, bR()), aN)
837+ let fN = aT(aV(fM, cc()), cd())
838+ $Tuple2(fM, fN)
825839 }
826840 else {
827- let fJ = aS(aU(fH, bQ()), aM)
828- let fI = aS(aU(fJ, cc()), cb())
829- $Tuple2(fI, fJ)
841+ let fN = aT(aV(fL, bR()), aN)
842+ let fM = aT(aV(fN, cd()), cc())
843+ $Tuple2(fM, fN)
830844 }
831845 }
832846
833847
834-func fK (fL,fM) = {
835- let fN = bE()
836- let fO = aU(fN, fM)
837- let fP = if ((fL != ""))
848+func fO (fP,fQ) = {
849+ let fR = bF()
850+ let fS = aV(fR, fQ)
851+ let fT = if ((fP != ""))
838852 then {
839- let fQ = bB(aw(), aj(aD, fL))
840- if ((fQ == aE))
853+ let fU = bC(ax(), ak(aE, fP))
854+ if ((fU == aF))
841855 then {
842- let fR = bC(aw(), aj(aC, fL))
843- let fS = aU(fO, fR)
844- $Tuple2(fS, true)
856+ let fV = bD(ax(), ak(aD, fP))
857+ let fW = aV(fS, fV)
858+ $Tuple2(fW, true)
845859 }
846860 else throw("Invalid attached artifact")
847861 }
848- else $Tuple2(fO, false)
849- let fS = fP._1
850- let fT = fP._2
851- $Tuple2(fS, fT)
852- }
853-
854-
855-func fU (cq,aB) = {
856- let fV = cp(cq)._1
857- if ((fV == 0))
862+ else $Tuple2(fS, false)
863+ let fW = fT._1
864+ let fX = fT._2
865+ $Tuple2(fW, fX)
866+ }
867+
868+
869+func fY (cr,aC) = {
870+ let fZ = cq(cr)._1
871+ if ((fZ == 0))
858872 then true
859- else (cu(cq) == aB)
860- }
861-
862-
863-func fW (cq,aB) = (cu(cq) == aB)
864-
865-
866-func fX (fY,aB,cq) = ((((((ai + "_") + fY) + "_") + aB) + "_") + cq)
867-
868-
869-func fZ (cq) = {
870- let cw = cu(cq)
871- if ((cw == toBase58String(ap())))
872- then $Tuple2(0, cw)
873+ else (cv(cr) == aC)
874+ }
875+
876+
877+func ga (cr,aC) = (cv(cr) == aC)
878+
879+
880+func gb (gc,aC,cr) = ((((((aj + "_") + gc) + "_") + aC) + "_") + cr)
881+
882+
883+func gd (cr) = {
884+ let cx = cv(cr)
885+ if ((cx == toBase58String(aq())))
886+ then $Tuple2(0, cx)
873887 else {
874- let ga = fX(toString(this), cw, cq)
875- let gb = valueOrElse(getInteger(ax(), ga), 0)
876- $Tuple2(gb, cw)
877- }
878- }
879-
880-
881-func gc (cq,fL) = {
882- let gd = invoke(at(), "computeFeeDiscount", [cq], nil)
883- if ((gd == gd))
888+ let ge = gb(toString(this), cx, cr)
889+ let gf = valueOrElse(getInteger(ay(), ge), 0)
890+ $Tuple2(gf, cx)
891+ }
892+ }
893+
894+
895+func gg (cr,fP) = {
896+ let gh = invoke(au(), "computeFeeDiscount", [cr], nil)
897+ if ((gh == gh))
884898 then {
885- let ge = {
886- let cs = gd
887- if ($isInstanceOf(cs, "Int"))
899+ let gi = {
900+ let ct = gh
901+ if ($isInstanceOf(ct, "Int"))
888902 then {
889- let gf = cs
890- gf
903+ let gj = ct
904+ gj
891905 }
892906 else throw("Invalid computeFeeDiscount result")
893907 }
894- let gg = fK(fL, ge)
895- let fS = gg._1
896- let fT = gg._2
897- $Tuple2(fS, fT)
908+ let gk = fO(fP, gi)
909+ let fW = gk._1
910+ let fX = gk._2
911+ $Tuple2(fW, fX)
898912 }
899913 else throw("Strict value is not equal to itself.")
900914 }
901915
902916
903-func gh (ch) = {
904- let gi = if ((size(ch.payments) > 1))
905- then toBase58String(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifactId"))
917+func gl (ci) = {
918+ let gm = if ((size(ci.payments) > 1))
919+ then toBase58String(valueOrErrorMessage(ci.payments[1].assetId, "Invalid artifactId"))
906920 else ""
907- gi
908- }
909-
910-
911-func gj (gk) = {
912- let gl = aU(gk, ce())
913- let gm = (gk - gl)
914- $Tuple2(gl, gm)
915- }
916-
917-
918-func gn (go,gp,gq,gr,gs,gt,gu,gv,gw,dV,gx,gy) = [IntegerEntry(r, go), IntegerEntry(s, gp), IntegerEntry(t, gq), IntegerEntry(q, gr), IntegerEntry(p, gs), IntegerEntry(v, gt), IntegerEntry(w, gu), IntegerEntry(u, gv), IntegerEntry(x, gw), IntegerEntry(y, dV), IntegerEntry(z, gx), IntegerEntry(A, gx)]
919-
920-
921-func gz (gA,gB,gC,gD,gE) = [IntegerEntry(I, gA), IntegerEntry(G, gB), IntegerEntry(H, gC), IntegerEntry(J, gD), IntegerEntry(K, gE)]
922-
923-
924-func gF (al,aB) = [StringEntry(aj(l, al), aB)]
925-
926-
927-func gG (gH,al) = if (gH)
921+ gm
922+ }
923+
924+
925+func gn (go) = {
926+ let gp = aV(go, cf())
927+ let gq = (go - gp)
928+ $Tuple2(gp, gq)
929+ }
930+
931+
932+func gr (gs,gt,gu,gv,gw,gx,gy,gz,gA,dZ,gB,gC) = [IntegerEntry(s, gs), IntegerEntry(t, gt), IntegerEntry(u, gu), IntegerEntry(r, gv), IntegerEntry(q, gw), IntegerEntry(w, gx), IntegerEntry(x, gy), IntegerEntry(v, gz), IntegerEntry(y, gA), IntegerEntry(z, dZ), IntegerEntry(A, gB), IntegerEntry(B, gB)]
933+
934+
935+func gD (gE,gF,gG,gH,gI) = [IntegerEntry(J, gE), IntegerEntry(H, gF), IntegerEntry(I, gG), IntegerEntry(K, gH), IntegerEntry(L, gI)]
936+
937+
938+func gJ (am,aC) = [StringEntry(ak(l, am), aC)]
939+
940+
941+func gK (gL,am) = if (gL)
928942 then {
929- let gI = cd()
930-[IntegerEntry(aj(k, al), (gI + 1)), IntegerEntry(f, (gI + 1))]
943+ let gM = ce()
944+[IntegerEntry(ak(k, am), (gM + 1)), IntegerEntry(f, (gM + 1))]
931945 }
932946 else nil
933947
934948
935-func gJ (al,gK,gL,gM,dj) = [IntegerEntry(aj(g, al), gK), IntegerEntry(aj(h, al), gL), IntegerEntry(aj(i, al), gM), IntegerEntry(aj(j, al), dj)]
936-
937-
938-func gN (gO) = {
939- let eT = ((lastBlock.timestamp / 1000) / 60)
940- let gP = valueOrElse(getInteger(this, C), 0)
941- if ((gP > eT))
949+func gN (gL,am,gw) = if (gL)
950+ then [IntegerEntry(ak(m, am), gw)]
951+ else nil
952+
953+
954+func gO (am,gP,gQ,gR,dn) = [IntegerEntry(ak(g, am), gP), IntegerEntry(ak(h, am), gQ), IntegerEntry(ak(i, am), gR), IntegerEntry(ak(j, am), dn)]
955+
956+
957+func gS (gT) = {
958+ let eX = ((lastBlock.timestamp / 1000) / 60)
959+ let gU = valueOrElse(getInteger(this, D), 0)
960+ if ((gU > eX))
942961 then throw("TWAP out-of-order")
943962 else {
944- let fb = if ((gP == 0))
945- then eT
946- else gP
947- if ((eT > gP))
963+ let ff = if ((gU == 0))
964+ then eX
965+ else gU
966+ if ((eX > gU))
948967 then {
949- let gQ = valueOrElse(getInteger(this, ((D + "_") + toString(gP))), 0)
950- let gR = valueOrElse(getInteger(this, ((E + "_") + toString(gP))), gO)
951- let gS = (gQ + ((eT - fb) * gR))
952- let eW = bu(bs(valueOrElse(getString(this, B), "")), aH, toString(eT))
953-[IntegerEntry(aj(D, toString(eT)), gS), IntegerEntry(aj(E, toString(eT)), gO), IntegerEntry(aj(F, toString(eT)), gP), IntegerEntry(C, eT), StringEntry(B, bd(eW))]
968+ let gV = valueOrElse(getInteger(this, ((E + "_") + toString(gU))), 0)
969+ let gW = valueOrElse(getInteger(this, ((F + "_") + toString(gU))), gT)
970+ let gX = (gV + ((eX - ff) * gW))
971+ let fa = bv(bt(valueOrElse(getString(this, C), "")), aI, toString(eX))
972+[IntegerEntry(ak(E, toString(eX)), gX), IntegerEntry(ak(F, toString(eX)), gT), IntegerEntry(ak(G, toString(eX)), gU), IntegerEntry(D, eX), StringEntry(C, be(fa))]
954973 }
955974 else {
956- let gT = valueOrElse(getInteger(this, aj(F, toString(eT))), 0)
957- let gQ = valueOrElse(getInteger(this, aj(D, toString(gT))), 0)
958- let gR = valueOrElse(getInteger(this, aj(E, toString(gT))), gO)
959- let gS = (gQ + ((eT - gT) * gR))
960-[IntegerEntry(aj(D, toString(eT)), gS), IntegerEntry(aj(E, toString(eT)), gO)]
975+ let gY = valueOrElse(getInteger(this, ak(G, toString(eX))), 0)
976+ let gV = valueOrElse(getInteger(this, ak(E, toString(gY))), 0)
977+ let gW = valueOrElse(getInteger(this, ak(F, toString(gY))), gT)
978+ let gX = (gV + ((eX - gY) * gW))
979+[IntegerEntry(ak(E, toString(eX)), gX), IntegerEntry(ak(F, toString(eX)), gT)]
961980 }
962981 }
963982 }
964983
965984
966-func gU (cI,cJ) = [IntegerEntry(L, cI), IntegerEntry(M, cJ)]
967-
968-
969-func gV (cN,cO) = [IntegerEntry(N, cN), IntegerEntry(O, cO)]
970-
971-
972-func gW (cI,cJ,gX,gY,gZ,ha,hb,hc) = {
973- let cN = bI()
974- let cO = bJ()
975- if (((gZ - ha) != gX))
976- then throw(((((("Invalid AMM state data: " + toString(gZ)) + " + ") + toString(ha)) + " != ") + toString(gX)))
977- else ((gU(cI, cJ) ++ [IntegerEntry(P, gX), IntegerEntry(S, gY), IntegerEntry(Q, gZ), IntegerEntry(R, ha), IntegerEntry(U, hb), IntegerEntry(T, hc)]) ++ gN(aS(aU(cI, cN), aU(cJ, cO))))
978- }
979-
980-
981-func hd (al) = [DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(i, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(l, al))]
982-
983-
984-func he (al,hf) = {
985- let hg = assetBalance(this, ap())
986- if ((hf > hg))
987- then throw(((("Unable to withdraw " + toString(hf)) + " from contract balance ") + toString(hg)))
988- else [ScriptTransfer(al, hf, ap())]
989- }
990-
991-
992-func hh (ch) = if ((0 > ch))
985+func gZ (cM,cN) = [IntegerEntry(M, cM), IntegerEntry(N, cN)]
986+
987+
988+func ha (cR,cS) = [IntegerEntry(O, cR), IntegerEntry(P, cS)]
989+
990+
991+func hb (cM,cN,hc,hd,he,hf,hg,hh) = {
992+ let cR = bJ()
993+ let cS = bK()
994+ if (((he - hf) != hc))
995+ then throw(((((("Invalid AMM state data: " + toString(he)) + " + ") + toString(hf)) + " != ") + toString(hc)))
996+ else ((gZ(cM, cN) ++ [IntegerEntry(Q, hc), IntegerEntry(T, hd), IntegerEntry(R, he), IntegerEntry(S, hf), IntegerEntry(V, hg), IntegerEntry(U, hh)]) ++ gS(aT(aV(cM, cR), aV(cN, cS))))
997+ }
998+
999+
1000+func hi (am) = [DeleteEntry(ak(g, am)), DeleteEntry(ak(h, am)), DeleteEntry(ak(i, am)), DeleteEntry(ak(j, am)), DeleteEntry(ak(l, am))]
1001+
1002+
1003+func hj (am,hk) = {
1004+ let hl = assetBalance(this, aq())
1005+ if ((hk > hl))
1006+ then throw(((("Unable to withdraw " + toString(hk)) + " from contract balance ") + toString(hl)))
1007+ else [ScriptTransfer(am, hk, aq())]
1008+ }
1009+
1010+
1011+func hm (ci) = if ((0 > ci))
9931012 then throw("Balance")
994- else [IntegerEntry(e, ch)]
995-
996-
997-func hi (ch) = [ScriptTransfer(ar(), ch, ap())]
998-
999-
1000-func hj (hk,ch) = if (hk)
1001- then [Burn(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifact"), 1)]
1013+ else [IntegerEntry(e, ci)]
1014+
1015+
1016+func hn (ci) = [ScriptTransfer(as(), ci, aq())]
1017+
1018+
1019+func ho (hp,ci) = if (hp)
1020+ then [Burn(valueOrErrorMessage(ci.payments[1].assetId, "Invalid artifact"), 1)]
10021021 else nil
10031022
10041023
1005-@Callable(ch)
1006-func pause () = if ((ch.caller != an()))
1024+@Callable(ci)
1025+func pause () = if ((ci.caller != ao()))
10071026 then throw("Invalid pause params")
1008- else [BooleanEntry(n, true)]
1009-
1010-
1011-
1012-@Callable(ch)
1013-func unpause () = if ((ch.caller != an()))
1027+ else [BooleanEntry(o, true)]
1028+
1029+
1030+
1031+@Callable(ci)
1032+func unpause () = if ((ci.caller != ao()))
10141033 then throw("Invalid unpause params")
1015- else [BooleanEntry(n, false)]
1016-
1017-
1018-
1019-@Callable(ch)
1020-func setCloseOnly () = if ((ch.caller != an()))
1034+ else [BooleanEntry(o, false)]
1035+
1036+
1037+
1038+@Callable(ci)
1039+func setCloseOnly () = if ((ci.caller != ao()))
10211040 then throw("Invalid setCloseOnly params")
1022- else [BooleanEntry(o, true)]
1023-
1024-
1025-
1026-@Callable(ch)
1027-func unsetCloseOnly () = if ((ch.caller != an()))
1041+ else [BooleanEntry(p, true)]
1042+
1043+
1044+
1045+@Callable(ci)
1046+func unsetCloseOnly () = if ((ci.caller != ao()))
10281047 then throw("Invalid unsetCloseOnly params")
1029- else [BooleanEntry(o, false)]
1030-
1031-
1032-
1033-@Callable(ch)
1034-func addLiquidity (cD) = if (if ((ch.caller != an()))
1048+ else [BooleanEntry(p, false)]
1049+
1050+
1051+
1052+@Callable(ci)
1053+func addLiquidity (cH) = if (if ((ci.caller != ao()))
10351054 then true
1036- else (0 >= cD))
1055+ else (0 >= cH))
10371056 then throw("Invalid addLiquidity params")
10381057 else {
1039- let cI = bG()
1040- let cJ = bH()
1058+ let cM = bH()
10411059 let cN = bI()
1042- let cO = bJ()
1043- let hl = aS(aU(cI, cN), aU(cJ, cO))
1044- let hm = (cI + cD)
1045- let hn = (aS(aU(hm, cN), hl) - cJ)
1046- let ho = (cJ + hn)
1047- let hp = fA(dA(), hm, ho)
1048- let hq = hp._1
1049- let hr = hp._2
1050- let eM = hp._3
1051- let hs = if ((eM != 0))
1060+ let cR = bJ()
1061+ let cS = bK()
1062+ let hq = aT(aV(cM, cR), aV(cN, cS))
1063+ let hr = (cM + cH)
1064+ let hs = (aT(aV(hr, cR), hq) - cN)
1065+ let ht = (cN + hs)
1066+ let hu = fE(dE(), hr, ht)
1067+ let hv = hu._1
1068+ let hw = hu._2
1069+ let eQ = hu._3
1070+ let hx = if ((eQ != 0))
10521071 then {
1053- let hs = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
1054- if ((hs == hs))
1072+ let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1073+ if ((hx == hx))
10551074 then nil
10561075 else throw("Strict value is not equal to itself.")
10571076 }
10581077 else nil
1059- if ((hs == hs))
1060- then (gU(hm, ho) ++ gV(hq, hr))
1078+ if ((hx == hx))
1079+ then (gZ(hr, ht) ++ ha(hv, hw))
10611080 else throw("Strict value is not equal to itself.")
10621081 }
10631082
10641083
10651084
1066-@Callable(ch)
1067-func removeLiquidity (cD) = if (if ((ch.caller != an()))
1085+@Callable(ci)
1086+func removeLiquidity (cH) = if (if ((ci.caller != ao()))
10681087 then true
1069- else (0 >= cD))
1088+ else (cH >= 0))
10701089 then throw("Invalid removeLiquidity params")
10711090 else {
1072- let cI = bG()
1073- let cJ = bH()
1091+ let cM = bH()
10741092 let cN = bI()
1075- let cO = bJ()
1076- let hl = aS(aU(cI, cN), aU(cJ, cO))
1077- let ht = aS(cD, hl)
1078- let hm = (cI - cD)
1079- let ho = (cJ - ht)
1080- gU(hm, ho)
1093+ let cR = bJ()
1094+ let cS = bK()
1095+ let hq = aT(aV(cM, cR), aV(cN, cS))
1096+ let hr = (cM - cH)
1097+ let hy = bc((aT(aV(hr, cR), hq) - cN))
1098+ let ht = (cN - hy)
1099+ let hz = fE(dE(), hr, ht)
1100+ let hv = hz._1
1101+ let hw = hz._2
1102+ let eQ = hz._3
1103+ let hx = if ((eQ != 0))
1104+ then {
1105+ let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1106+ if ((hx == hx))
1107+ then nil
1108+ else throw("Strict value is not equal to itself.")
1109+ }
1110+ else nil
1111+ if ((hx == hx))
1112+ then (gZ(hr, ht) ++ ha(hv, hw))
1113+ else throw("Strict value is not equal to itself.")
10811114 }
10821115
10831116
10841117
1085-@Callable(ch)
1086-func changeSettings (go,gp,gq,gr,gs,gt,gu,gv,gw,dV,gx,gy) = if ((ch.caller != an()))
1118+@Callable(ci)
1119+func changeSettings (gs,gt,gu,gv,gw,gx,gy,gz,gA,dZ,gB,gC) = if ((ci.caller != ao()))
10871120 then throw("Invalid changeSettings params")
1088- else gn(go, gp, gq, gr, gs, gt, gu, gv, gw, dV, gx, gy)
1089-
1090-
1091-
1092-@Callable(ch)
1093-func initialize (cI,cJ,gr,go,gp,gq,gs,hu,hv,hw,hx,gt,gu,gv,gw,dV,gx,gy) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cI))
1121+ else gr(gs, gt, gu, gv, gw, gx, gy, gz, gA, dZ, gB, gC)
1122+
1123+
1124+
1125+@Callable(ci)
1126+func initialize (cM,cN,gv,gs,gt,gu,gw,hA,hB,hC,hD,gx,gy,gz,gA,dZ,gB,gC) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cM))
10941127 then true
1095- else (0 >= cJ))
1128+ else (0 >= cN))
10961129 then true
1097- else (0 >= gr))
1098- then true
1099- else (0 >= go))
1100- then true
1101- else (0 >= gp))
1102- then true
1103- else (0 >= gq))
1130+ else (0 >= gv))
11041131 then true
11051132 else (0 >= gs))
11061133 then true
11081135 then true
11091136 else (0 >= gu))
11101137 then true
1111- else (0 >= gv))
1112- then true
11131138 else (0 >= gw))
1114- then true
1115- else (0 >= dV))
11161139 then true
11171140 else (0 >= gx))
11181141 then true
1119- else (gx > aL))
1120- then true
11211142 else (0 >= gy))
11221143 then true
1123- else cy())
1144+ else (0 >= gz))
1145+ then true
1146+ else (0 >= gA))
1147+ then true
1148+ else (0 >= dZ))
1149+ then true
1150+ else (0 >= gB))
1151+ then true
1152+ else (gB > aM))
1153+ then true
1154+ else (0 >= gC))
1155+ then true
1156+ else cC())
11241157 then throw("Invalid initialize parameters")
1125- else ((((gW(cI, cJ, 0, 0, 0, 0, 0, 0) ++ gn(go, gp, gq, gr, gs, gt, gu, gv, gw, dV, gx, gy)) ++ gz((lastBlock.timestamp + gr), 0, 0, 0, 0)) ++ hh(0)) ++ [BooleanEntry(m, true), StringEntry(d, hu), StringEntry(a, hv), StringEntry(b, hw), StringEntry(V, hx)])
1126-
1127-
1128-
1129-@Callable(ch)
1130-func decreasePosition (hf,hy,hz) = {
1131- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1132- if ((hA == hA))
1158+ else ((((hb(cM, cN, 0, 0, 0, 0, 0, 0) ++ gr(gs, gt, gu, gv, gw, gx, gy, gz, gA, dZ, gB, gC)) ++ gD((lastBlock.timestamp + gv), 0, 0, 0, 0)) ++ hm(0)) ++ [BooleanEntry(n, true), StringEntry(d, hA), StringEntry(a, hB), StringEntry(b, hC), StringEntry(W, hD)])
1159+
1160+
1161+
1162+@Callable(ci)
1163+func increasePosition (hE,hF,hG,hH) = {
1164+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1165+ if ((hI == hI))
11331166 then {
1134- let cq = cg(ch)
1135- if (if (if (if (if (if ((0 >= hf))
1136- then true
1137- else !(cy()))
1138- then true
1139- else !(ci(aS(aL, hy), bF(), true)))
1140- then true
1141- else !(cx(cq)))
1142- then true
1143- else cz())
1144- then true
1145- else dH())
1146- then throw("Invalid decreasePosition parameters")
1147- else {
1148- let hB = cp(cq)
1149- let fV = hB._1
1150- let hC = hB._2
1151- let hD = hB._3
1152- let hE = hB._4
1153- let hF = if ((fV > 0))
1154- then aG
1155- else aF
1156- let hG = (hF == aF)
1157- let hH = aU(hf, hy)
1158- let hI = em(cq, aO)
1159- let hJ = hI._1
1160- let el = hI._2
1161- let hK = if ((hJ > hH))
1162- then {
1163- let hL = cM(hG, hH)
1164- let eG = hL._1
1165- let cQ = hL._2
1166- let cR = hL._3
1167- let eO = hL._4
1168- let hM = bb(eG)
1169- if (if ((hz != 0))
1170- then (hz > hM)
1171- else false)
1172- then throw(((("Too little base asset exchanged, got " + toString(hM)) + " expected ") + toString(hz)))
1173- else {
1174- let eL = aS(aU(el, hM), bb(fV))
1175- let hN = dd(fV, hC, hE, eL)
1176- let dm = hN._1
1177- let dn = hN._2
1178- let eH = hH
1179- let hO = (el - eL)
1180- let hP = if ((fV > 0))
1181- then ((hJ - eH) - hO)
1182- else ((hO + hJ) - eH)
1183- let hQ = (fV + eG)
1184- $Tuple12(hQ, dm, bb(hP), cn(hQ), cR, cQ, eO, (bL() - hH), (cc() - (if ((hQ > 0))
1185- then bb(eG)
1186- else 0)), (cb() - (if ((0 > hQ))
1187- then bb(eG)
1188- else 0)), (bN() - (if ((hQ > 0))
1189- then hH
1190- else 0)), (bM() - (if ((0 > hQ))
1191- then hH
1192- else 0)))
1193- }
1194- }
1195- else throw("Close position first")
1196- let hQ = hK._1
1197- let hR = hK._2
1198- let hS = hK._3
1199- let hT = hK._4
1200- let cR = hK._5
1201- let cQ = hK._6
1202- let eO = hK._7
1203- let eR = hK._8
1204- let eP = hK._9
1205- let eQ = hK._10
1206- let hU = hK._11
1207- let hV = hK._12
1208- let hW = invoke(at(), "notifyNotional", [cq, hS], nil)
1209- if ((hW == hW))
1210- then (gJ(cq, hQ, hR, hS, hT) ++ gW(cQ, cR, eO, eR, eP, eQ, hU, hV))
1211- else throw("Strict value is not equal to itself.")
1212- }
1213- }
1214- else throw("Strict value is not equal to itself.")
1215- }
1216-
1217-
1218-
1219-@Callable(ch)
1220-func increasePosition (hF,hy,hz,hX) = {
1221- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1222- if ((hA == hA))
1223- then {
1224- let cq = cg(ch)
1225- let hY = ch.payments[0].amount
1226- let aB = ch.payments[0].assetId
1227- let hZ = toBase58String(value(aB))
1228- let ia = (aB == ap())
1229- let ib = aA(hZ)
1230- if (if (if (if (if (if (if (if (if (if ((hF != aF))
1231- then (hF != aG)
1167+ let cr = ch(ci)
1168+ let hJ = ci.payments[0].amount
1169+ let aC = ci.payments[0].assetId
1170+ let hK = toBase58String(value(aC))
1171+ let hL = (aC == aq())
1172+ let hM = aB(hK)
1173+ if (if (if (if (if (if (if (if (if (if ((hE != aG))
1174+ then (hE != aH)
12321175 else false)
12331176 then true
1234- else (0 >= hY))
1235- then true
1236- else !(cy()))
1237- then true
1238- else if (!(ia))
1239- then !(ib)
1177+ else (0 >= hJ))
1178+ then true
1179+ else !(cC()))
1180+ then true
1181+ else if (!(hL))
1182+ then !(hM)
12401183 else false)
12411184 then true
1242- else !(fU(cq, hZ)))
1243- then true
1244- else !(ci(aS(aL, hy), bF(), true)))
1245- then true
1246- else cz())
1247- then true
1248- else cA())
1249- then true
1250- else dH())
1185+ else !(fY(cr, hK)))
1186+ then true
1187+ else !(cj(aT(aM, hF), bG(), true)))
1188+ then true
1189+ else cD())
1190+ then true
1191+ else cE())
1192+ then true
1193+ else dL())
12511194 then throw("Invalid increasePosition parameters")
12521195 else {
1253- let ic = gc(cq, gh(ch))
1254- let fS = ic._1
1255- let fT = ic._2
1256- let id = aU(hY, fS)
1257- let hf = (hY - id)
1258- let ie = if (ib)
1196+ let hN = gg(cr, gl(ci))
1197+ let fW = hN._1
1198+ let fX = hN._2
1199+ let hk = aT(hJ, (aV(fW, hF) + aM))
1200+ let hO = (hJ - hk)
1201+ let hP = if (hM)
12591202 then {
1260- let if = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hf)])
1261- if ((if == if))
1203+ let hQ = invoke(ay(), "borrow", [cr], [AttachedPayment(aC, hk)])
1204+ if ((hQ == hQ))
12621205 then {
1263- let ig = assetBalance(this, ap())
1264- if ((ig == ig))
1206+ let hR = assetBalance(this, aq())
1207+ if ((hR == hR))
12651208 then {
1266- let ih = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, id)])
1267- if ((ih == ih))
1209+ let hS = invoke(az(), "swap", [toBase58String(aq()), 0], [AttachedPayment(aC, hO)])
1210+ if ((hS == hS))
12681211 then {
1269- let ii = assetBalance(this, ap())
1270- if ((ii == ii))
1212+ let hT = assetBalance(this, aq())
1213+ if ((hT == hT))
12711214 then {
1272- let ij = (ii - ig)
1273- if ((ij == ij))
1274- then ij
1215+ let hU = (hT - hR)
1216+ if ((hU == hU))
1217+ then hU
12751218 else throw("Strict value is not equal to itself.")
12761219 }
12771220 else throw("Strict value is not equal to itself.")
12821225 }
12831226 else throw("Strict value is not equal to itself.")
12841227 }
1285- else id
1286- if ((ie == ie))
1228+ else hO
1229+ if ((hP == hP))
12871230 then {
1288- let ik = invoke(av(), "acceptPaymentWithLink", [cq, hX], [AttachedPayment(ap(), ie)])
1289- if ((ik == ik))
1231+ let hV = invoke(aw(), "acceptPaymentWithLink", [cr, hH], [AttachedPayment(aq(), hP)])
1232+ if ((hV == hV))
12901233 then {
1291- let il = {
1292- let cs = ik
1293- if ($isInstanceOf(cs, "Int"))
1234+ let hW = {
1235+ let ct = hV
1236+ if ($isInstanceOf(ct, "Int"))
12941237 then {
1295- let gf = cs
1296- gf
1238+ let gj = ct
1239+ gj
12971240 }
12981241 else throw("Invalid referrerFee")
12991242 }
1300- let im = (ie - il)
1301- let in = cp(cq)
1302- let fV = in._1
1303- let hC = in._2
1304- let hD = in._3
1305- let hE = in._4
1306- let gH = (fV == 0)
1307- let io = if ((fV > 0))
1308- then (hF == aF)
1309- else (hF == aG)
1310- let ip = if (!(gH))
1311- then io
1243+ let hX = (hP - hW)
1244+ let hY = cq(cr)
1245+ let fZ = hY._1
1246+ let hZ = hY._2
1247+ let ia = hY._3
1248+ let ib = hY._4
1249+ let ic = (fZ == 0)
1250+ let id = if ((fZ > 0))
1251+ then (hE == aG)
1252+ else (hE == aH)
1253+ let ie = if (!(ic))
1254+ then id
13121255 else false
1313- let hG = (hF == aF)
1314- let iq = if (if (gH)
1256+ let if = (hE == aG)
1257+ let ig = if (if (ic)
13151258 then true
1316- else ip)
1259+ else ie)
13171260 then {
1318- let hH = aU(hf, hy)
1319- let ir = cM(hG, hH)
1320- let cT = ir._1
1321- let cQ = ir._2
1322- let cR = ir._3
1323- let eO = ir._4
1324- if (if ((hz != 0))
1325- then (hz > bb(cT))
1261+ let ih = aV(hk, hF)
1262+ let ii = cQ(if, ih)
1263+ let cX = ii._1
1264+ let cU = ii._2
1265+ let cV = ii._3
1266+ let eS = ii._4
1267+ if (if ((hG != 0))
1268+ then (hG > bc(cX))
13261269 else false)
1327- then throw(((("Limit error: " + toString(bb(cT))) + " < ") + toString(hz)))
1270+ then throw(((("Limit error: " + toString(bc(cX))) + " < ") + toString(hG)))
13281271 else {
1329- let hQ = (fV + cT)
1330- let hU = (bN() + (if ((hQ > 0))
1331- then hH
1272+ let ij = (fZ + cX)
1273+ let ik = (bO() + (if ((ij > 0))
1274+ then ih
13321275 else 0))
1333- let hV = (bM() + (if ((0 > hQ))
1334- then hH
1276+ let il = (bN() + (if ((0 > ij))
1277+ then ih
13351278 else 0))
1336- let is = dd(fV, hC, hE, hf)
1337- let dm = is._1
1338- let eg = is._2
1339- let eh = is._3
1340- if (!(dO(cQ, cR)))
1279+ let im = dh(fZ, hZ, ib, hk)
1280+ let dq = im._1
1281+ let ek = im._2
1282+ let el = im._3
1283+ if (!(dS(cU, cV)))
13411284 then throw("Over max spread limit")
1342- else if (!(dS(hU, hV)))
1285+ else if (!(dW(ik, il)))
13431286 then throw("Over max open notional")
1344- else $Tuple12(hQ, dm, (hD + hH), cn(hQ), cR, cQ, eO, (bL() + hH), (cc() + (if ((hQ > 0))
1345- then bb(cT)
1346- else 0)), (cb() + (if ((0 > hQ))
1347- then bb(cT)
1348- else 0)), hU, hV)
1287+ else $Tuple12(ij, dq, (ia + ih), co(ij), cV, cU, eS, (bM() + ih), (cd() + (if ((ij > 0))
1288+ then bc(cX)
1289+ else 0)), (cc() + (if ((0 > ij))
1290+ then bc(cX)
1291+ else 0)), ik, il)
13491292 }
13501293 }
13511294 else {
1352- let hH = aU(hf, hy)
1353- let it = em(toString(ch.caller), aO)
1354- let hJ = it._1
1355- let el = it._2
1356- if ((hJ > hH))
1295+ let ih = aV(hk, hF)
1296+ let in = eq(toString(ci.caller), aP)
1297+ let io = in._1
1298+ let ep = in._2
1299+ if ((io > ih))
13571300 then throw("Use decreasePosition to decrease position size")
13581301 else throw("Close position first")
13591302 }
1360- let hQ = iq._1
1361- let hR = iq._2
1362- let hS = iq._3
1363- let hT = iq._4
1364- let cR = iq._5
1365- let cQ = iq._6
1366- let eO = iq._7
1367- let eR = iq._8
1368- let eP = iq._9
1369- let eQ = iq._10
1370- let hU = iq._11
1371- let hV = iq._12
1372- let iu = gj(im)
1373- let gl = iu._1
1374- let gm = iu._2
1375- let iv = if (ia)
1303+ let ij = ig._1
1304+ let ip = ig._2
1305+ let iq = ig._3
1306+ let ir = ig._4
1307+ let cV = ig._5
1308+ let cU = ig._6
1309+ let eS = ig._7
1310+ let eV = ig._8
1311+ let eT = ig._9
1312+ let eU = ig._10
1313+ let ik = ig._11
1314+ let il = ig._12
1315+ let is = gn(hX)
1316+ let gp = is._1
1317+ let gq = is._2
1318+ let it = if (hL)
13761319 then {
1377- let iv = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hf)])
1378- if ((iv == iv))
1320+ let it = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hk)])
1321+ if ((it == it))
13791322 then nil
13801323 else throw("Strict value is not equal to itself.")
13811324 }
13821325 else nil
1383- if ((iv == iv))
1326+ if ((it == it))
13841327 then {
1385- let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1386- if ((iw == iw))
1328+ let iu = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1329+ if ((iu == iu))
13871330 then {
1388- let ix = invoke(at(), "notifyFees", [cq, im], nil)
1389- if ((ix == ix))
1331+ let iv = invoke(au(), "notifyFees", [cr, hX], nil)
1332+ if ((iv == iv))
13901333 then {
1391- let hW = invoke(at(), "notifyNotional", [cq, hS], nil)
1392- if ((hW == hW))
1393- then ((((((gJ(cq, hQ, hR, hS, hT) ++ gG(gH, cq)) ++ gF(cq, hZ)) ++ gW(cQ, cR, eO, eR, eP, eQ, hU, hV)) ++ hi(gl)) ++ hh((bD() + hf))) ++ hj(fT, ch))
1334+ let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1335+ if ((iw == iw))
1336+ then (((((((gO(cr, ij, ip, iq, ir) ++ gK(ic, cr)) ++ gN(ic, cr, fW)) ++ gJ(cr, hK)) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hn(gp)) ++ hm((bE() + hk))) ++ ho(fX, ci))
13941337 else throw("Strict value is not equal to itself.")
13951338 }
13961339 else throw("Strict value is not equal to itself.")
14091352
14101353
14111354
1412-@Callable(ch)
1355+@Callable(ci)
14131356 func addMargin () = {
1414- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1415- if ((hA == hA))
1357+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1358+ if ((hI == hI))
14161359 then {
1417- let cq = toString(ch.caller)
1418- let hY = ch.payments[0].amount
1419- let aB = ch.payments[0].assetId
1420- let hZ = toBase58String(value(aB))
1421- let ia = (aB == ap())
1422- let ib = aA(hZ)
1423- if (if (if (if (if (if (if (if (!(ia))
1424- then !(ib)
1360+ let cr = toString(ci.caller)
1361+ let hk = ci.payments[0].amount
1362+ let aC = ci.payments[0].assetId
1363+ let hK = toBase58String(value(aC))
1364+ let hL = (aC == aq())
1365+ let hM = aB(hK)
1366+ if (if (if (if (if (if (if (if (!(hL))
1367+ then !(hM)
14251368 else false)
14261369 then true
1427- else !(cx(toString(ch.caller))))
1428- then true
1429- else !(fW(cq, hZ)))
1430- then true
1431- else !(cy()))
1432- then true
1433- else cz())
1434- then true
1435- else cA())
1436- then true
1437- else dH())
1370+ else !(cB(toString(ci.caller))))
1371+ then true
1372+ else !(ga(cr, hK)))
1373+ then true
1374+ else !(cC()))
1375+ then true
1376+ else cD())
1377+ then true
1378+ else cE())
1379+ then true
1380+ else dL())
14381381 then throw("Invalid addMargin parameters")
14391382 else {
1440- let iy = gc(cq, gh(ch))
1441- let fS = iy._1
1442- let fT = iy._2
1443- let id = aU(hY, fS)
1444- let hf = (hY - id)
1445- let ie = if (ib)
1383+ let ix = cq(cr)
1384+ let fZ = ix._1
1385+ let hZ = ix._2
1386+ let ia = ix._3
1387+ let ib = ix._4
1388+ let it = if (hL)
14461389 then {
1447- let if = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hf)])
1448- if ((if == if))
1390+ let it = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hk)])
1391+ if ((it == it))
1392+ then nil
1393+ else throw("Strict value is not equal to itself.")
1394+ }
1395+ else nil
1396+ if ((it == it))
1397+ then (gO(cr, fZ, (hZ + hk), ia, ib) ++ hm((bE() + hk)))
1398+ else throw("Strict value is not equal to itself.")
1399+ }
1400+ }
1401+ else throw("Strict value is not equal to itself.")
1402+ }
1403+
1404+
1405+
1406+@Callable(ci)
1407+func removeMargin (hk) = {
1408+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1409+ if ((hI == hI))
1410+ then {
1411+ let cr = toString(ci.caller)
1412+ if (if (if (if (if ((0 >= hk))
1413+ then true
1414+ else !(cB(cr)))
1415+ then true
1416+ else !(cC()))
1417+ then true
1418+ else cD())
1419+ then true
1420+ else dL())
1421+ then throw("Invalid removeMargin parameters")
1422+ else {
1423+ let iy = cq(cr)
1424+ let fZ = iy._1
1425+ let hZ = iy._2
1426+ let ia = iy._3
1427+ let ib = iy._4
1428+ let iz = -(hk)
1429+ let iA = dh(fZ, hZ, ib, iz)
1430+ let dq = iA._1
1431+ let dr = iA._2
1432+ if ((dr != 0))
1433+ then throw("Invalid removed margin amount")
1434+ else {
1435+ let iB = ev(dq, dr, ia)
1436+ if (!(cj(iB, bG(), true)))
1437+ then throw(((("Too much margin removed: " + toString(iB)) + " < ") + toString(bG())))
1438+ else {
1439+ let iC = toBase58String(aq())
1440+ let iD = gd(cr)
1441+ let iE = iD._1
1442+ let iF = iD._2
1443+ let iG = if ((hk > iE))
1444+ then iE
1445+ else hk
1446+ let iH = if ((iE > hk))
1447+ then 0
1448+ else (hk - iE)
1449+ let iI = (iE - iG)
1450+ let iJ = if ((iI > 0))
1451+ then nil
1452+ else gJ(cr, iC)
1453+ let iK = if (((iG + iH) != hk))
1454+ then throw(((((("toRepay=" + toString(iG)) + " + toWithdraw=") + toString(iH)) + " != ") + toString(hk)))
1455+ else nil
1456+ if ((iK == iK))
1457+ then {
1458+ let iL = if ((iH > 0))
1459+ then {
1460+ let iL = invoke(at(), "withdrawLocked", [iH], nil)
1461+ if ((iL == iL))
1462+ then nil
1463+ else throw("Strict value is not equal to itself.")
1464+ }
1465+ else nil
1466+ if ((iL == iL))
1467+ then {
1468+ let iM = if ((iG > 0))
1469+ then {
1470+ let iN = invoke(ay(), "repay", [cr, iG, iF], nil)
1471+ if ((iN == iN))
1472+ then [ScriptTransfer(ci.caller, iG, fromBase58String(iF))]
1473+ else throw("Strict value is not equal to itself.")
1474+ }
1475+ else nil
1476+ if ((iM == iM))
1477+ then ((((gO(cr, fZ, dq, ia, co(fZ)) ++ (if ((iH > 0))
1478+ then hj(ci.caller, iH)
1479+ else nil)) ++ hm((bE() - hk))) ++ iJ) ++ iM)
1480+ else throw("Strict value is not equal to itself.")
1481+ }
1482+ else throw("Strict value is not equal to itself.")
1483+ }
1484+ else throw("Strict value is not equal to itself.")
1485+ }
1486+ }
1487+ }
1488+ }
1489+ else throw("Strict value is not equal to itself.")
1490+ }
1491+
1492+
1493+
1494+@Callable(ci)
1495+func closePosition (gP,iO,iP) = {
1496+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1497+ if ((hI == hI))
1498+ then {
1499+ let cr = ch(ci)
1500+ let iQ = valueOrErrorMessage(addressFromString(cr), "Invalid caller")
1501+ let cA = cy(cr)
1502+ if (if (if (if (if (if (!(cB(cr)))
1503+ then true
1504+ else !(cC()))
1505+ then true
1506+ else cD())
1507+ then true
1508+ else (0 >= gP))
1509+ then true
1510+ else (0 > iO))
1511+ then true
1512+ else dL())
1513+ then throw("Invalid closePosition parameters")
1514+ else {
1515+ let iR = cq(cr)
1516+ let fZ = iR._1
1517+ let hZ = iR._2
1518+ let ia = iR._3
1519+ let ib = iR._4
1520+ let iS = if ((bc(fZ) > gP))
1521+ then {
1522+ let hE = if ((fZ > 0))
1523+ then aH
1524+ else aG
1525+ let if = (hE == aG)
1526+ let iT = dD((fZ > 0), gP, true)
1527+ let eL = iT._1
1528+ let cU = iT._2
1529+ let cV = iT._3
1530+ let eS = iT._4
1531+ let eK = if ((fZ > 0))
1532+ then -(gP)
1533+ else gP
1534+ let iU = eq(cr, aP)
1535+ let io = iU._1
1536+ let ep = iU._2
1537+ let iV = ez(cr, aP)
1538+ let iW = aT(bc(eK), bc(fZ))
1539+ let eP = aV(ep, iW)
1540+ let iX = aV(aV(io, iW), cA)
1541+ let iY = dh(fZ, hZ, ib, ep)._1
1542+ let iZ = dh(fZ, hZ, ib, eP)._2
1543+ let ja = (ep - eP)
1544+ let jb = if ((fZ > 0))
1545+ then ((io - eL) - ja)
1546+ else ((ja + io) - eL)
1547+ let iq = bc(jb)
1548+ let ij = (fZ + eK)
1549+ let jc = co(ij)
1550+ let jd = (ia - iq)
1551+ let eV = (bM() - jd)
1552+ let je = if ((fZ > 0))
1553+ then (aV((iq + ja), iV) - ja)
1554+ else (aV((iq - ja), iV) - ja)
1555+ let jf = ((iY - (je + ja)) - iX)
1556+ let jg = if ((0 > jf))
1557+ then throw("Margin error: unable to pay close fee")
1558+ else jf
1559+ if (if ((iO != 0))
1560+ then (iO > eL)
1561+ else false)
1562+ then throw(((("Limit error: " + toString(eL)) + " < ") + toString(iO)))
1563+ else $Tuple16(ij, if (iP)
1564+ then (je + jg)
1565+ else je, iq, jc, iZ, eP, if (iP)
1566+ then 0
1567+ else jg, cU, cV, eS, eV, (cd() - (if ((ij > 0))
1568+ then bc(eK)
1569+ else 0)), (cc() - (if ((0 > ij))
1570+ then bc(eK)
1571+ else 0)), (bO() - (if ((ij > 0))
1572+ then jd
1573+ else 0)), (bN() - (if ((0 > ij))
1574+ then jd
1575+ else 0)), iX)
1576+ }
1577+ else if ((gP > bc(fZ)))
1578+ then throw("Invalid closePosition parameters")
1579+ else {
1580+ let jh = eM(cr, true)
1581+ let el = jh._1
1582+ let iZ = jh._2
1583+ let eP = jh._3
1584+ let ji = jh._4
1585+ let cU = jh._5
1586+ let cV = jh._6
1587+ let eS = jh._7
1588+ let eV = jh._8
1589+ let eL = jh._9
1590+ let eT = jh._10
1591+ let eU = jh._11
1592+ let ik = jh._12
1593+ let il = jh._13
1594+ let iX = aV(eL, cA)
1595+ let jf = (bc(ji) - iX)
1596+ let jg = if ((0 > jf))
1597+ then throw(((((((("Margin error: unable to pay close fee: " + toString(iX)) + " margin: ") + toString(ji)) + " fee percent: ") + toString(cA)) + " notional: ") + toString(eL)))
1598+ else jf
1599+ if (if ((iO != 0))
1600+ then (iO > eL)
1601+ else false)
1602+ then throw(((("Limit error: " + toString(eL)) + " < ") + toString(iO)))
1603+ else $Tuple16(0, 0, 0, 0, iZ, eP, jg, cU, cV, eS, eV, eT, eU, ik, il, iX)
1604+ }
1605+ let ij = iS._1
1606+ let je = iS._2
1607+ let iq = iS._3
1608+ let jc = iS._4
1609+ let iZ = iS._5
1610+ let eP = iS._6
1611+ let jg = iS._7
1612+ let cU = iS._8
1613+ let cV = iS._9
1614+ let eS = iS._10
1615+ let eV = iS._11
1616+ let eT = iS._12
1617+ let eU = iS._13
1618+ let ik = iS._14
1619+ let il = iS._15
1620+ let iX = iS._16
1621+ if ((iZ > 0))
1622+ then throw("Unable to close position with bad debt")
1623+ else {
1624+ let jj = (ij != 0)
1625+ let jk = (jg + iX)
1626+ let jl = (bE() - jk)
1627+ let jm = if ((0 > jl))
1628+ then $Tuple2(0, bc(jl))
1629+ else $Tuple2(jl, 0)
1630+ let jn = jm._1
1631+ let jo = jm._2
1632+ let jp = gd(cr)
1633+ let iE = jp._1
1634+ let iF = jp._2
1635+ let jq = if ((iE > 0))
1636+ then if ((jk >= iE))
1637+ then {
1638+ let iN = invoke(ay(), "repay", [cr, iE, iF], nil)
1639+ if ((iN == iN))
1640+ then $Tuple3(iE, (jk - iE), jj)
1641+ else throw("Strict value is not equal to itself.")
1642+ }
1643+ else {
1644+ let jr = invoke(ay(), if (jj)
1645+ then "repay"
1646+ else "realizePartiallyAndClose", [cr, jk, iF], nil)
1647+ if ((jr == jr))
1648+ then $Tuple3(jk, 0, false)
1649+ else throw("Strict value is not equal to itself.")
1650+ }
1651+ else $Tuple3(0, jk, false)
1652+ if ((jq == jq))
14491653 then {
1450- let ig = assetBalance(this, ap())
1451- if ((ig == ig))
1654+ let js = jq._3
1655+ let jt = jq._2
1656+ let ju = jq._1
1657+ let jv = if ((jt >= iX))
1658+ then $Tuple3(ju, (jt - iX), iX)
1659+ else {
1660+ let jw = (iX - jt)
1661+ let jx = (ju - jw)
1662+ let hR = assetBalance(this, aq())
1663+ if ((hR == hR))
1664+ then {
1665+ let hS = invoke(az(), "swap", [toBase58String(aq()), 0], [AttachedPayment(fromBase58String(iF), jw)])
1666+ if ((hS == hS))
1667+ then {
1668+ let hT = assetBalance(this, aq())
1669+ if ((hT == hT))
1670+ then {
1671+ let hU = (hT - hR)
1672+ if ((hU == hU))
1673+ then $Tuple3(jx, 0, (jt + hU))
1674+ else throw("Strict value is not equal to itself.")
1675+ }
1676+ else throw("Strict value is not equal to itself.")
1677+ }
1678+ else throw("Strict value is not equal to itself.")
1679+ }
1680+ else throw("Strict value is not equal to itself.")
1681+ }
1682+ if ((jv == jv))
14521683 then {
1453- let ih = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, id)])
1454- if ((ih == ih))
1684+ let jy = jv._3
1685+ let jz = jv._2
1686+ let jx = jv._1
1687+ let jA = if ((jt > 0))
14551688 then {
1456- let ii = assetBalance(this, ap())
1457- if ((ii == ii))
1689+ let jA = invoke(at(), "withdrawLocked", [jt], nil)
1690+ if ((jA == jA))
1691+ then nil
1692+ else throw("Strict value is not equal to itself.")
1693+ }
1694+ else nil
1695+ if ((jA == jA))
1696+ then {
1697+ let jB = gn(jy)
1698+ let gp = jB._1
1699+ let gq = jB._2
1700+ let iu = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1701+ if ((iu == iu))
14581702 then {
1459- let ij = (ii - ig)
1460- if ((ij == ij))
1461- then ij
1703+ let iv = invoke(au(), "notifyFees", [cr, iX], nil)
1704+ if ((iv == iv))
1705+ then {
1706+ let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1707+ if ((iw == iw))
1708+ then (((((((if (jj)
1709+ then gO(cr, ij, je, iq, jc)
1710+ else hi(cr)) ++ (if (js)
1711+ then {
1712+ let iC = toBase58String(aq())
1713+ gJ(cr, iC)
1714+ }
1715+ else nil)) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hn(gp)) ++ (if ((jz > 0))
1716+ then hj(iQ, jz)
1717+ else nil)) ++ hm(jn)) ++ (if ((jx > 0))
1718+ then [ScriptTransfer(iQ, jx, fromBase58String(iF))]
1719+ else nil))
1720+ else throw("Strict value is not equal to itself.")
1721+ }
14621722 else throw("Strict value is not equal to itself.")
14631723 }
14641724 else throw("Strict value is not equal to itself.")
14691729 }
14701730 else throw("Strict value is not equal to itself.")
14711731 }
1472- else id
1473- if ((ie == ie))
1474- then {
1475- let ik = invoke(av(), "acceptPayment", [cq], [AttachedPayment(ap(), ie)])
1476- if ((ik == ik))
1477- then {
1478- let il = {
1479- let cs = ik
1480- if ($isInstanceOf(cs, "Int"))
1481- then {
1482- let gf = cs
1483- gf
1484- }
1485- else throw("Invalid referrerFee")
1486- }
1487- let im = (ie - il)
1488- let iz = cp(cq)
1489- let fV = iz._1
1490- let hC = iz._2
1491- let hD = iz._3
1492- let hE = iz._4
1493- let iA = gj(im)
1494- let gl = iA._1
1495- let gm = iA._2
1496- let iv = if (ia)
1497- then {
1498- let iv = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hf)])
1499- if ((iv == iv))
1500- then nil
1501- else throw("Strict value is not equal to itself.")
1502- }
1503- else nil
1504- if ((iv == iv))
1505- then {
1506- let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1507- if ((iw == iw))
1508- then {
1509- let ix = invoke(at(), "notifyFees", [cq, im], nil)
1510- if ((ix == ix))
1511- then (((gJ(cq, fV, (hC + hf), hD, hE) ++ hi(gl)) ++ hh((bD() + hf))) ++ hj(fT, ch))
1512- else throw("Strict value is not equal to itself.")
1513- }
1514- else throw("Strict value is not equal to itself.")
1515- }
1516- else throw("Strict value is not equal to itself.")
1517- }
1518- else throw("Strict value is not equal to itself.")
1519- }
1520- else throw("Strict value is not equal to itself.")
15211732 }
15221733 }
15231734 else throw("Strict value is not equal to itself.")
15251736
15261737
15271738
1528-@Callable(ch)
1529-func removeMargin (hf) = {
1530- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1531- if ((hA == hA))
1739+@Callable(ci)
1740+func liquidate (cr) = {
1741+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1742+ if ((hI == hI))
15321743 then {
1533- let cq = toString(ch.caller)
1534- if (if (if (if (if ((0 >= hf))
1535- then true
1536- else !(cx(cq)))
1537- then true
1538- else !(cy()))
1539- then true
1540- else cz())
1541- then true
1542- else dH())
1543- then throw("Invalid removeMargin parameters")
1544- else {
1545- let iB = cp(cq)
1546- let fV = iB._1
1547- let hC = iB._2
1548- let hD = iB._3
1549- let hE = iB._4
1550- let iC = -(hf)
1551- let iD = dd(fV, hC, hE, iC)
1552- let dm = iD._1
1553- let dn = iD._2
1554- if ((dn != 0))
1555- then throw("Invalid removed margin amount")
1556- else {
1557- let iE = er(dm, dn, hD)
1558- if (!(ci(iE, bF(), true)))
1559- then throw(((("Too much margin removed: " + toString(iE)) + " < ") + toString(bF())))
1560- else {
1561- let iF = toBase58String(ap())
1562- let iG = fZ(cq)
1563- let iH = iG._1
1564- let iI = iG._2
1565- let iJ = if ((hf > iH))
1566- then iH
1567- else hf
1568- let iK = if ((iH > hf))
1569- then 0
1570- else (hf - iH)
1571- let iL = (iH - iJ)
1572- let iM = if ((iL > 0))
1573- then nil
1574- else gF(cq, iF)
1575- let iN = if (((iJ + iK) != hf))
1576- then throw(((((("toRepay=" + toString(iJ)) + " + toWithdraw=") + toString(iK)) + " != ") + toString(hf)))
1577- else nil
1578- if ((iN == iN))
1579- then {
1580- let iO = if ((iK > 0))
1581- then {
1582- let iO = invoke(as(), "withdrawLocked", [iK], nil)
1583- if ((iO == iO))
1584- then nil
1585- else throw("Strict value is not equal to itself.")
1586- }
1587- else nil
1588- if ((iO == iO))
1589- then {
1590- let iP = if ((iJ > 0))
1591- then {
1592- let iQ = invoke(ax(), "repay", [cq, iJ, iI], nil)
1593- if ((iQ == iQ))
1594- then [ScriptTransfer(ch.caller, iJ, fromBase58String(iI))]
1595- else throw("Strict value is not equal to itself.")
1596- }
1597- else nil
1598- if ((iP == iP))
1599- then ((((gJ(cq, fV, dm, hD, cn(fV)) ++ (if ((iK > 0))
1600- then he(ch.caller, iK)
1601- else nil)) ++ hh((bD() - hf))) ++ iM) ++ iP)
1602- else throw("Strict value is not equal to itself.")
1603- }
1604- else throw("Strict value is not equal to itself.")
1605- }
1606- else throw("Strict value is not equal to itself.")
1607- }
1608- }
1744+ let jC = ez(cr, aP)
1745+ let iB = if (eb())
1746+ then {
1747+ let jD = ez(cr, aQ)
1748+ bd(jC, jD)
16091749 }
1610- }
1611- else throw("Strict value is not equal to itself.")
1612- }
1613-
1614-
1615-
1616-@Callable(ch)
1617-func closePosition (gK,iR) = {
1618- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1619- if ((hA == hA))
1620- then {
1621- let cq = cg(ch)
1622- let iS = valueOrErrorMessage(addressFromString(cq), "Invalid caller")
1623- if (if (if (if (if (if (!(cx(cq)))
1624- then true
1625- else !(cy()))
1626- then true
1627- else cz())
1628- then true
1629- else (0 >= gK))
1630- then true
1631- else (0 > iR))
1632- then true
1633- else dH())
1634- then throw("Invalid closePosition parameters")
1635- else {
1636- let iT = cp(cq)
1637- let fV = iT._1
1638- let hC = iT._2
1639- let hD = iT._3
1640- let hE = iT._4
1641- let iU = if ((bb(fV) > gK))
1642- then {
1643- let hF = if ((fV > 0))
1644- then aG
1645- else aF
1646- let hG = (hF == aF)
1647- let iV = dz((fV > 0), gK, true)
1648- let eH = iV._1
1649- let cQ = iV._2
1650- let cR = iV._3
1651- let eO = iV._4
1652- let eG = if ((fV > 0))
1653- then -(gK)
1654- else gK
1655- let iW = em(cq, aO)
1656- let hJ = iW._1
1657- let el = iW._2
1658- let iX = ev(cq, aO)
1659- let iY = aS(bb(eG), bb(fV))
1660- let eL = aU(el, iY)
1661- let iZ = dd(fV, hC, hE, el)._1
1662- let ja = dd(fV, hC, hE, eL)
1663- let eg = ja._1
1664- let jb = ja._2
1665- let di = ja._3
1666- let hO = (el - eL)
1667- let hP = if ((fV > 0))
1668- then ((hJ - eH) - hO)
1669- else ((hO + hJ) - eH)
1670- let hS = bb(hP)
1671- let jc = if ((fV > 0))
1672- then (aU((hS + hO), iX) - hO)
1673- else (aU((hS - hO), iX) - hO)
1674- let jd = (hD - hS)
1675- let hQ = (fV + eG)
1676- let je = cn(hQ)
1677- let eR = (bL() - jd)
1678- if (if ((iR != 0))
1679- then (iR > eH)
1680- else false)
1681- then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iR)))
1682- else $Tuple15(hQ, jc, hS, je, jb, eL, (iZ - (jc + hO)), cQ, cR, eO, eR, (cc() - (if ((hQ > 0))
1683- then bb(eG)
1684- else 0)), (cb() - (if ((0 > hQ))
1685- then bb(eG)
1686- else 0)), (bN() - (if ((hQ > 0))
1687- then jd
1688- else 0)), (bM() - (if ((0 > hQ))
1689- then jd
1690- else 0)))
1691- }
1692- else if ((gK > bb(fV)))
1693- then throw("Invalid closePosition parameters")
1694- else {
1695- let jf = eI(cq, true)
1696- let eH = jf._1
1697- let jb = jf._2
1698- let eL = jf._3
1699- let eM = jf._4
1700- let cQ = jf._5
1701- let cR = jf._6
1702- let eO = jf._7
1703- let eR = jf._8
1704- let eh = jf._9
1705- let eP = jf._10
1706- let eQ = jf._11
1707- let hU = jf._12
1708- let hV = jf._13
1709- if (if ((iR != 0))
1710- then (iR > eH)
1711- else false)
1712- then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iR)))
1713- else $Tuple15(0, 0, 0, 0, jb, eL, eM, cQ, cR, eO, eR, eP, eQ, hU, hV)
1714- }
1715- let hQ = iU._1
1716- let jc = iU._2
1717- let hS = iU._3
1718- let je = iU._4
1719- let jb = iU._5
1720- let eL = iU._6
1721- let eM = iU._7
1722- let cQ = iU._8
1723- let cR = iU._9
1724- let eO = iU._10
1725- let eR = iU._11
1726- let eP = iU._12
1727- let eQ = iU._13
1728- let hU = iU._14
1729- let hV = iU._15
1730- if ((jb > 0))
1731- then throw("Unable to close position with bad debt")
1732- else {
1733- let jg = bb(eM)
1734- let jh = (bD() - jg)
1735- let ji = if ((0 > jh))
1736- then $Tuple2(0, bb(jh))
1737- else $Tuple2(jh, 0)
1738- let jj = ji._1
1739- let jk = ji._2
1740- let jl = fZ(cq)
1741- let iH = jl._1
1742- let iI = jl._2
1743- let jm = if ((iH > 0))
1744- then if ((jg >= iH))
1745- then {
1746- let iQ = invoke(ax(), "repay", [cq, iH, iI], nil)
1747- if ((iQ == iQ))
1748- then $Tuple2([ScriptTransfer(iS, iH, fromBase58String(iI))], (jg - iH))
1749- else throw("Strict value is not equal to itself.")
1750- }
1751- else {
1752- let jn = invoke(ax(), "realizePartiallyAndClose", [cq, jg, iI], nil)
1753- if ((jn == jn))
1754- then $Tuple2([ScriptTransfer(iS, jg, fromBase58String(iI))], 0)
1755- else throw("Strict value is not equal to itself.")
1756- }
1757- else $Tuple2(nil, jg)
1758- if ((jm == jm))
1759- then {
1760- let jo = jm._2
1761- let jp = jm._1
1762- let jq = if ((jo > 0))
1763- then {
1764- let jq = invoke(as(), "withdrawLocked", [jo], nil)
1765- if ((jq == jq))
1766- then nil
1767- else throw("Strict value is not equal to itself.")
1768- }
1769- else nil
1770- if ((jq == jq))
1771- then {
1772- let hW = invoke(at(), "notifyNotional", [cq, 0], nil)
1773- if ((hW == hW))
1774- then (((((if ((hQ == 0))
1775- then hd(cq)
1776- else gJ(cq, hQ, jc, hS, je)) ++ gW(cQ, cR, eO, eR, eP, eQ, hU, hV)) ++ (if ((jo > 0))
1777- then he(iS, jo)
1778- else nil)) ++ hh(jj)) ++ jp)
1779- else throw("Strict value is not equal to itself.")
1780- }
1781- else throw("Strict value is not equal to itself.")
1782- }
1783- else throw("Strict value is not equal to itself.")
1784- }
1785- }
1786- }
1787- else throw("Strict value is not equal to itself.")
1788- }
1789-
1790-
1791-
1792-@Callable(ch)
1793-func liquidate (cq) = {
1794- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1795- if ((hA == hA))
1796- then {
1797- let jr = ev(cq, aO)
1798- let iE = if (dX())
1799- then {
1800- let js = ev(cq, aP)
1801- bc(jr, js)
1802- }
1803- else jr
1804- if (if (if (if (if (!(ci(iE, bS(), false)))
1805- then true
1806- else !(cx(cq)))
1807- then true
1808- else !(cy()))
1809- then true
1810- else cz())
1811- then true
1812- else dH())
1750+ else jC
1751+ if (if (if (if (if (!(cj(iB, bT(), false)))
1752+ then true
1753+ else !(cB(cr)))
1754+ then true
1755+ else !(cC()))
1756+ then true
1757+ else cD())
1758+ then true
1759+ else dL())
18131760 then throw("Unable to liquidate")
1814- else if (if (if ((jr > bT()))
1815- then (bU() > 0)
1761+ else if (if (if ((jC > bU()))
1762+ then (bV() > 0)
18161763 else false)
1817- then (aL > bU())
1764+ then (aM > bV())
18181765 else false)
18191766 then {
1820- let jt = cp(cq)
1821- let fV = jt._1
1822- let hC = jt._2
1823- let hD = jt._3
1824- let hE = jt._4
1825- let hF = if ((fV > 0))
1826- then aG
1827- else aF
1828- let hG = (hF == aF)
1829- let eH = eB(cq, fV)
1830- let ju = em(cq, aO)
1831- let hJ = ju._1
1832- let el = ju._2
1833- let jv = cM(hG, eH)
1834- let eG = jv._1
1835- let cQ = jv._2
1836- let cR = jv._3
1837- let eO = jv._4
1838- let jw = aS(bb(eG), bb(fV))
1839- let eL = aU(el, jw)
1840- let jx = dd(fV, hC, hE, eL)
1841- let dm = jx._1
1842- let dn = jx._2
1843- let di = jx._3
1844- let hO = (el - eL)
1845- let hP = if ((fV > 0))
1846- then ((hJ - eH) - hO)
1847- else ((hO + hJ) - eH)
1848- let jy = aU(eH, bT())
1849- let jz = (jy / 2)
1850- let gm = (jy - jz)
1851- let jc = (dm - jy)
1852- let hQ = (fV + eG)
1853- let hS = bb(hP)
1854- let jd = (hD - hS)
1855- let je = cn(hQ)
1856- let eR = (bL() - jd)
1857- let jh = (bD() - jy)
1858- let jA = if ((0 > jh))
1859- then $Tuple2(0, bb(jh))
1860- else $Tuple2(jh, 0)
1861- let jB = jA._1
1862- let jk = jA._2
1863- let jC = fZ(cq)
1864- let iH = jC._1
1865- let iI = jC._2
1866- let jD = if ((iH > 0))
1767+ let jE = cq(cr)
1768+ let fZ = jE._1
1769+ let hZ = jE._2
1770+ let ia = jE._3
1771+ let ib = jE._4
1772+ let hE = if ((fZ > 0))
1773+ then aH
1774+ else aG
1775+ let if = (hE == aG)
1776+ let eL = eF(cr, fZ)
1777+ let jF = eq(cr, aP)
1778+ let io = jF._1
1779+ let ep = jF._2
1780+ let jG = cQ(if, eL)
1781+ let eK = jG._1
1782+ let cU = jG._2
1783+ let cV = jG._3
1784+ let eS = jG._4
1785+ let jH = aT(bc(eK), bc(fZ))
1786+ let eP = aV(ep, jH)
1787+ let jI = dh(fZ, hZ, ib, eP)
1788+ let dq = jI._1
1789+ let dr = jI._2
1790+ let dm = jI._3
1791+ let ja = (ep - eP)
1792+ let jb = if ((fZ > 0))
1793+ then ((io - eL) - ja)
1794+ else ((ja + io) - eL)
1795+ let jJ = aV(eL, bU())
1796+ let jK = (jJ / 2)
1797+ let gq = (jJ - jK)
1798+ let je = (dq - jJ)
1799+ let ij = (fZ + eK)
1800+ let iq = bc(jb)
1801+ let jd = (ia - iq)
1802+ let jc = co(ij)
1803+ let eV = (bM() - jd)
1804+ let jl = (bE() - jJ)
1805+ let jL = if ((0 > jl))
1806+ then $Tuple2(0, bc(jl))
1807+ else $Tuple2(jl, 0)
1808+ let jM = jL._1
1809+ let jo = jL._2
1810+ let jN = gd(cr)
1811+ let iE = jN._1
1812+ let iF = jN._2
1813+ let jO = if ((iE > 0))
18671814 then {
1868- let jE = aU(iH, jw)
1869- let jn = invoke(ax(), "realizePartially", [cq, iI, jE], nil)
1870- if ((jn == jn))
1815+ let jP = aV(iE, jH)
1816+ let jr = invoke(ay(), "realizePartially", [cr, iF, jP], nil)
1817+ if ((jr == jr))
18711818 then nil
18721819 else throw("Strict value is not equal to itself.")
18731820 }
18741821 else nil
1875- if ((jD == jD))
1822+ if ((jO == jO))
18761823 then {
1877- let jq = invoke(as(), "withdrawLocked", [jy], nil)
1878- if ((jq == jq))
1824+ let jA = invoke(at(), "withdrawLocked", [jJ], nil)
1825+ if ((jA == jA))
18791826 then {
1880- let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1881- if ((iw == iw))
1827+ let jQ = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1828+ if ((jQ == jQ))
18821829 then {
1883- let hW = invoke(at(), "notifyNotional", [cq, hS], nil)
1884- if ((hW == hW))
1885- then (((gJ(cq, hQ, jc, hS, je) ++ gW(cQ, cR, eO, eR, (cc() - (if ((hQ > 0))
1886- then bb(eG)
1887- else 0)), (cb() - (if ((0 > hQ))
1888- then bb(eG)
1889- else 0)), (bN() - (if ((hQ > 0))
1830+ let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1831+ if ((iw == iw))
1832+ then (((gO(cr, ij, je, iq, jc) ++ hb(cU, cV, eS, eV, (cd() - (if ((ij > 0))
1833+ then bc(eK)
1834+ else 0)), (cc() - (if ((0 > ij))
1835+ then bc(eK)
1836+ else 0)), (bO() - (if ((ij > 0))
18901837 then jd
1891- else 0)), (bM() - (if ((0 > hQ))
1838+ else 0)), (bN() - (if ((0 > ij))
18921839 then jd
1893- else 0)))) ++ he(ch.caller, jz)) ++ hh(jB))
1840+ else 0)))) ++ hj(ci.caller, jK)) ++ hm(jM))
18941841 else throw("Strict value is not equal to itself.")
18951842 }
18961843 else throw("Strict value is not equal to itself.")
19001847 else throw("Strict value is not equal to itself.")
19011848 }
19021849 else {
1903- let jF = eI(cq, false)
1904- let eg = jF._1
1905- let dn = jF._2
1906- let eh = jF._3
1907- let ei = jF._4
1908- let cQ = jF._5
1909- let cR = jF._6
1910- let eO = jF._7
1911- let eR = jF._8
1912- let eH = jF._9
1913- let eP = jF._10
1914- let eQ = jF._11
1915- let hU = jF._12
1916- let hV = jF._13
1917- let jy = aU(eH, bT())
1918- let jz = (jy / 2)
1919- let gm = (jy - jz)
1920- let jh = (bD() - jy)
1921- let jG = if ((0 > jh))
1922- then $Tuple2(0, bb(jh))
1923- else $Tuple2(jh, 0)
1924- let jB = jG._1
1925- let jk = jG._2
1926- let jH = fZ(cq)
1927- let iH = jH._1
1928- let iI = jH._2
1929- let jD = if ((iH > 0))
1850+ let jR = eM(cr, false)
1851+ let ek = jR._1
1852+ let dr = jR._2
1853+ let el = jR._3
1854+ let em = jR._4
1855+ let cU = jR._5
1856+ let cV = jR._6
1857+ let eS = jR._7
1858+ let eV = jR._8
1859+ let eL = jR._9
1860+ let eT = jR._10
1861+ let eU = jR._11
1862+ let ik = jR._12
1863+ let il = jR._13
1864+ let jJ = aV(eL, bU())
1865+ let jK = (jJ / 2)
1866+ let gq = (jJ - jK)
1867+ let jl = (bE() - jJ)
1868+ let jS = if ((0 > jl))
1869+ then $Tuple2(0, bc(jl))
1870+ else $Tuple2(jl, 0)
1871+ let jM = jS._1
1872+ let jo = jS._2
1873+ let jT = gd(cr)
1874+ let iE = jT._1
1875+ let iF = jT._2
1876+ let jO = if ((iE > 0))
19301877 then {
1931- let jn = invoke(ax(), "realizePartiallyAndClose", [cq, 0, iI], nil)
1932- if ((jn == jn))
1878+ let jr = invoke(ay(), "realizePartiallyAndClose", [cr, 0, iF], nil)
1879+ if ((jr == jr))
19331880 then nil
19341881 else throw("Strict value is not equal to itself.")
19351882 }
19361883 else nil
1937- if ((jD == jD))
1884+ if ((jO == jO))
19381885 then {
1939- let gf = if ((dn > 0))
1886+ let gj = if ((dr > 0))
19401887 then {
1941- let jI = invoke(as(), "exchangeFreeAndLocked", [dn], nil)
1942- if ((jI == jI))
1888+ let jU = invoke(at(), "exchangeFreeAndLocked", [dr], nil)
1889+ if ((jU == jU))
19431890 then nil
19441891 else throw("Strict value is not equal to itself.")
19451892 }
19461893 else nil
1947- if ((gf == gf))
1894+ if ((gj == gj))
19481895 then {
1949- let jq = invoke(as(), "withdrawLocked", [jy], nil)
1950- if ((jq == jq))
1896+ let jA = invoke(at(), "withdrawLocked", [jJ], nil)
1897+ if ((jA == jA))
19511898 then {
1952- let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1953- if ((iw == iw))
1899+ let jQ = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1900+ if ((jQ == jQ))
19541901 then {
1955- let hW = invoke(at(), "notifyNotional", [cq, 0], nil)
1956- if ((hW == hW))
1957- then (((hd(cq) ++ gW(cQ, cR, eO, eR, eP, eQ, hU, hV)) ++ he(ch.caller, jz)) ++ hh(jB))
1902+ let iw = invoke(au(), "notifyNotional", [cr, 0], nil)
1903+ if ((iw == iw))
1904+ then (((hi(cr) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hj(ci.caller, jK)) ++ hm(jM))
19581905 else throw("Strict value is not equal to itself.")
19591906 }
19601907 else throw("Strict value is not equal to itself.")
19711918
19721919
19731920
1974-@Callable(ch)
1921+@Callable(ci)
19751922 func payFunding () = {
1976- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1977- if ((hA == hA))
1923+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1924+ if ((hI == hI))
19781925 then {
1979- let jJ = bO()
1980- if (if (if ((jJ > lastBlock.timestamp))
1981- then true
1982- else !(cy()))
1983- then true
1984- else cz())
1985- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jJ)))
1926+ let jV = bP()
1927+ if (if (if ((jV > lastBlock.timestamp))
1928+ then true
1929+ else !(cC()))
1930+ then true
1931+ else cD())
1932+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jV)))
19861933 else {
1987- let fF = dA()
1988- let jK = fE()
1989- let fI = jK._1
1990- let fJ = jK._2
1991- gz((jJ + bR()), (bZ() + fJ), (ca() + fI), aS(fJ, fF), aS(fI, fF))
1934+ let fJ = dE()
1935+ let jW = fI()
1936+ let fM = jW._1
1937+ let fN = jW._2
1938+ gD((jV + bS()), (ca() + fN), (cb() + fM), aT(fN, fJ), aT(fM, fJ))
19921939 }
19931940 }
19941941 else throw("Strict value is not equal to itself.")
19961943
19971944
19981945
1999-@Callable(ch)
1946+@Callable(ci)
20001947 func syncTerminalPriceToOracle () = {
2001- let cI = bG()
2002- let cJ = bH()
2003- let jL = fA(dA(), cI, cJ)
2004- let hq = jL._1
2005- let hr = jL._2
2006- let eM = jL._3
2007- let hs = if ((eM != 0))
1948+ let cM = bH()
1949+ let cN = bI()
1950+ let jX = fE(dE(), cM, cN)
1951+ let hv = jX._1
1952+ let hw = jX._2
1953+ let eQ = jX._3
1954+ let hx = if ((eQ != 0))
20081955 then {
2009- let hs = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
2010- if ((hs == hs))
1956+ let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1957+ if ((hx == hx))
20111958 then nil
20121959 else throw("Strict value is not equal to itself.")
20131960 }
20141961 else nil
2015- if ((hs == hs))
2016- then (gV(hq, hr) ++ gN(aS(aU(cI, hq), aU(cJ, hr))))
1962+ if ((hx == hx))
1963+ then (ha(hv, hw) ++ gS(aT(aV(cM, hv), aV(cN, hw))))
20171964 else throw("Strict value is not equal to itself.")
20181965 }
20191966
20201967
20211968
2022-@Callable(ch)
2023-func view_calcRemainMarginWithFundingPayment (cq) = {
2024- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
2025- if ((hA == hA))
1969+@Callable(ci)
1970+func view_calcRemainMarginWithFundingPayment (cr) = {
1971+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1972+ if ((hI == hI))
20261973 then {
2027- let jM = cp(cq)
2028- let ct = jM._1
2029- let eo = jM._2
2030- let ex = jM._3
2031- let eq = jM._4
2032- let jN = em(cq, aO)
2033- let ed = jN._1
2034- let el = jN._2
2035- let jO = dd(ct, eo, eq, el)
2036- let dm = jO._1
2037- let dn = jO._2
2038- let di = jO._3
2039- throw((((((aQ(dm) + aQ(di)) + aQ(eA(cq))) + aQ(el)) + aQ(dn)) + aQ(ed)))
1974+ let jY = cq(cr)
1975+ let cu = jY._1
1976+ let es = jY._2
1977+ let eB = jY._3
1978+ let eu = jY._4
1979+ let jZ = eq(cr, aP)
1980+ let eh = jZ._1
1981+ let ep = jZ._2
1982+ let ka = dh(cu, es, eu, ep)
1983+ let dq = ka._1
1984+ let dr = ka._2
1985+ let dm = ka._3
1986+ throw((((((aR(dq) + aR(dm)) + aR(eE(cr))) + aR(ep)) + aR(dr)) + aR(eh)))
20401987 }
20411988 else throw("Strict value is not equal to itself.")
20421989 }
20431990
20441991
20451992
2046-@Callable(ch)
2047-func view_getPegAdjustCost (gO) = {
2048- let cI = bG()
2049- let cJ = bH()
2050- let fz = fA(gO, cI, cJ)
2051- throw(toString(fz._3))
2052- }
2053-
2054-
2055-
2056-@Callable(ch)
1993+@Callable(ci)
1994+func view_getPegAdjustCost (gT) = {
1995+ let cM = bH()
1996+ let cN = bI()
1997+ let fD = fE(gT, cM, cN)
1998+ throw(toString(fD._3))
1999+ }
2000+
2001+
2002+
2003+@Callable(ci)
20572004 func view_getTerminalAmmPrice () = {
2058- let jP = fi()
2059- let fm = jP._1
2060- let fn = jP._2
2061- let hl = aS(aU(fm, bI()), aU(fn, bJ()))
2062- throw(toString(hl))
2063- }
2064-
2065-
2066-
2067-@Callable(ch)
2005+ let kb = fm()
2006+ let fq = kb._1
2007+ let fr = kb._2
2008+ let hq = aT(aV(fq, bJ()), aV(fr, bK()))
2009+ throw(toString(hq))
2010+ }
2011+
2012+
2013+
2014+@Callable(ci)
20682015 func view_getFunding () = {
2069- let fF = dA()
2070- let jQ = fE()
2071- let fI = jQ._1
2072- let fJ = jQ._2
2073- let jR = aS(fJ, fF)
2074- let jS = aS(fI, fF)
2075- throw((((aQ(jR) + aQ(jS)) + aQ(eS())) + aQ(dA())))
2076- }
2077-
2078-
2079-
2080-@Callable(ch)
2081-func view_getBorrowedByTrader (cq) = {
2082- let jT = fZ(cq)
2083- let iH = jT._1
2084- let iI = jT._2
2085- throw((aQ(iH) + iI))
2086- }
2087-
2088-
2089-
2090-@Callable(ch)
2016+ let fJ = dE()
2017+ let kc = fI()
2018+ let fM = kc._1
2019+ let fN = kc._2
2020+ let kd = aT(fN, fJ)
2021+ let ke = aT(fM, fJ)
2022+ throw((((aR(kd) + aR(ke)) + aR(eW())) + aR(dE())))
2023+ }
2024+
2025+
2026+
2027+@Callable(ci)
2028+func view_getBorrowedByTrader (cr) = {
2029+ let kf = gd(cr)
2030+ let iE = kf._1
2031+ let iF = kf._2
2032+ throw((aR(iE) + iF))
2033+ }
2034+
2035+
2036+
2037+@Callable(ci)
20912038 func computeSpotPrice () = {
2092- let fz = dW()
2093- $Tuple2(nil, fz)
2094- }
2095-
2096-
2097-
2098-@Callable(ch)
2099-func computeFeeForTraderWithArtifact (cq,fL) = {
2100- let fz = gc(cq, fL)
2101- $Tuple2(nil, fz)
2102- }
2103-
2104-
2105-@Verifier(jU)
2106-func jV () = sigVerify(jU.bodyBytes, jU.proofs[0], ao())
2039+ let fD = ea()
2040+ $Tuple2(nil, fD)
2041+ }
2042+
2043+
2044+
2045+@Callable(ci)
2046+func computeFeeForTraderWithArtifact (cr,fP) = {
2047+ let fD = gg(cr, fP)
2048+ $Tuple2(nil, fD)
2049+ }
2050+
2051+
2052+@Verifier(kg)
2053+func kh () = sigVerify(kg.bodyBytes, kg.proofs[0], ap())
21072054
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_open_key"
99
1010 let d = "k_ora"
1111
1212 let e = "k_balance"
1313
1414 let f = "k_sequence"
1515
1616 let g = "k_positionSize"
1717
1818 let h = "k_positionMargin"
1919
2020 let i = "k_positionOpenNotional"
2121
2222 let j = "k_positionFraction"
2323
2424 let k = "k_positionSequence"
2525
2626 let l = "k_positionAsset"
2727
28-let m = "k_initialized"
29-
30-let n = "k_paused"
31-
32-let o = "k_closeOnly"
33-
34-let p = "k_fee"
35-
36-let q = "k_fundingPeriod"
37-
38-let r = "k_initMarginRatio"
39-
40-let s = "k_mmr"
41-
42-let t = "k_liquidationFeeRatio"
43-
44-let u = "k_partLiquidationRatio"
45-
46-let v = "k_spreadLimit"
47-
48-let w = "k_maxPriceImpact"
49-
50-let x = "k_maxPriceSpread"
51-
52-let y = "k_maxOpenNotional"
53-
54-let z = "k_feeToStakersPercent"
55-
56-let A = "k_maxOracleDelay"
57-
58-let B = "k_lastDataStr"
59-
60-let C = "k_lastMinuteId"
61-
62-let D = "k_twapDataLastCumulativePrice"
63-
64-let E = "k_twapDataLastPrice"
65-
66-let F = "k_twapDataPreviousMinuteId"
67-
68-let G = "k_latestLongPremiumFraction"
69-
70-let H = "k_latestShortPremiumFraction"
71-
72-let I = "k_nextFundingBlockMinTimestamp"
73-
74-let J = "k_longFundingRate"
75-
76-let K = "k_shortFundingRate"
77-
78-let L = "k_qtAstR"
79-
80-let M = "k_bsAstR"
81-
82-let N = "k_qtAstW"
83-
84-let O = "k_bsAstW"
85-
86-let P = "k_totalPositionSize"
87-
88-let Q = "k_totalLongPositionSize"
89-
90-let R = "k_totalShortPositionSize"
91-
92-let S = "k_openInterestNotional"
93-
94-let T = "k_openInterestShort"
95-
96-let U = "k_openInterestLong"
97-
98-let V = "k_coordinatorAddress"
99-
100-let W = "k_vault_address"
101-
102-let X = "k_admin_address"
103-
104-let Y = "k_admin_public_key"
105-
106-let Z = "k_quote_asset"
107-
108-let aa = "k_quote_staking"
109-
110-let ab = "k_staking_address"
111-
112-let ac = "k_miner_address"
113-
114-let ad = "k_orders_address"
115-
116-let ae = "k_referral_address"
117-
118-let af = "k_collateral_address"
119-
120-let ag = "k_exchange_address"
121-
122-let ah = "k_nft_manager_address"
123-
124-let ai = "k_trader_market_asset_collateral"
125-
126-func aj (ak,al) = ((ak + "_") + al)
127-
128-
129-func am () = valueOrErrorMessage(addressFromString(getStringValue(this, V)), "Coordinator not set")
130-
131-
132-func an () = addressFromString(getStringValue(am(), X))
133-
134-
135-func ao () = fromBase58String(getStringValue(am(), Y))
136-
137-
138-func ap () = fromBase58String(getStringValue(am(), Z))
139-
140-
141-func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), aa)), "Quote asset staking not set")
142-
143-
144-func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), ab)), "Staking not set")
145-
146-
147-func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), W)), "Vault not set")
148-
149-
150-func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Miner not set")
151-
152-
153-func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Orders not set")
154-
155-
156-func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Referral not set")
157-
158-
159-func aw () = valueOrErrorMessage(addressFromString(getStringValue(am(), ah)), "NFT Manager not set")
160-
161-
162-func ax () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Collateral Manager not set")
163-
164-
165-func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(am(), ag), "No swap address")), "Invalid swap address")
166-
167-
168-let az = "k_whitelist_asset"
169-
170-func aA (aB) = valueOrElse(getBoolean(ax(), aj(az, aB)), false)
171-
172-
173-let aC = "k_token_param"
174-
175-let aD = "k_token_type"
176-
177-let aE = "fee_reduction"
178-
179-let aF = 1
180-
181-let aG = 2
182-
183-let aH = 15
28+let m = "k_positionFee"
29+
30+let n = "k_initialized"
31+
32+let o = "k_paused"
33+
34+let p = "k_closeOnly"
35+
36+let q = "k_fee"
37+
38+let r = "k_fundingPeriod"
39+
40+let s = "k_initMarginRatio"
41+
42+let t = "k_mmr"
43+
44+let u = "k_liquidationFeeRatio"
45+
46+let v = "k_partLiquidationRatio"
47+
48+let w = "k_spreadLimit"
49+
50+let x = "k_maxPriceImpact"
51+
52+let y = "k_maxPriceSpread"
53+
54+let z = "k_maxOpenNotional"
55+
56+let A = "k_feeToStakersPercent"
57+
58+let B = "k_maxOracleDelay"
59+
60+let C = "k_lastDataStr"
61+
62+let D = "k_lastMinuteId"
63+
64+let E = "k_twapDataLastCumulativePrice"
65+
66+let F = "k_twapDataLastPrice"
67+
68+let G = "k_twapDataPreviousMinuteId"
69+
70+let H = "k_latestLongPremiumFraction"
71+
72+let I = "k_latestShortPremiumFraction"
73+
74+let J = "k_nextFundingBlockMinTimestamp"
75+
76+let K = "k_longFundingRate"
77+
78+let L = "k_shortFundingRate"
79+
80+let M = "k_qtAstR"
81+
82+let N = "k_bsAstR"
83+
84+let O = "k_qtAstW"
85+
86+let P = "k_bsAstW"
87+
88+let Q = "k_totalPositionSize"
89+
90+let R = "k_totalLongPositionSize"
91+
92+let S = "k_totalShortPositionSize"
93+
94+let T = "k_openInterestNotional"
95+
96+let U = "k_openInterestShort"
97+
98+let V = "k_openInterestLong"
99+
100+let W = "k_coordinatorAddress"
101+
102+let X = "k_vault_address"
103+
104+let Y = "k_admin_address"
105+
106+let Z = "k_admin_public_key"
107+
108+let aa = "k_quote_asset"
109+
110+let ab = "k_quote_staking"
111+
112+let ac = "k_staking_address"
113+
114+let ad = "k_miner_address"
115+
116+let ae = "k_orders_address"
117+
118+let af = "k_referral_address"
119+
120+let ag = "k_collateral_address"
121+
122+let ah = "k_exchange_address"
123+
124+let ai = "k_nft_manager_address"
125+
126+let aj = "k_trader_market_asset_collateral"
127+
128+func ak (al,am) = ((al + "_") + am)
129+
130+
131+func an () = valueOrErrorMessage(addressFromString(getStringValue(this, W)), "Coordinator not set")
132+
133+
134+func ao () = addressFromString(getStringValue(an(), Y))
135+
136+
137+func ap () = fromBase58String(getStringValue(an(), Z))
138+
139+
140+func aq () = fromBase58String(getStringValue(an(), aa))
141+
142+
143+func ar () = valueOrErrorMessage(addressFromString(getStringValue(an(), ab)), "Quote asset staking not set")
144+
145+
146+func as () = valueOrErrorMessage(addressFromString(getStringValue(an(), ac)), "Staking not set")
147+
148+
149+func at () = valueOrErrorMessage(addressFromString(getStringValue(an(), X)), "Vault not set")
150+
151+
152+func au () = valueOrErrorMessage(addressFromString(getStringValue(an(), ad)), "Miner not set")
153+
154+
155+func av () = valueOrErrorMessage(addressFromString(getStringValue(an(), ae)), "Orders not set")
156+
157+
158+func aw () = valueOrErrorMessage(addressFromString(getStringValue(an(), af)), "Referral not set")
159+
160+
161+func ax () = valueOrErrorMessage(addressFromString(getStringValue(an(), ai)), "NFT Manager not set")
162+
163+
164+func ay () = valueOrErrorMessage(addressFromString(getStringValue(an(), ag)), "Collateral Manager not set")
165+
166+
167+func az () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(an(), ah), "No swap address")), "Invalid swap address")
168+
169+
170+let aA = "k_whitelist_asset"
171+
172+func aB (aC) = valueOrElse(getBoolean(ay(), ak(aA, aC)), false)
173+
174+
175+let aD = "k_token_param"
176+
177+let aE = "k_token_type"
178+
179+let aF = "fee_reduction"
180+
181+let aG = 1
182+
183+let aH = 2
184184
185185 let aI = 15
186186
187-let aJ = 1000
188-
189-let aK = 6
190-
191-let aL = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
192-
193-let aM = (86400 * aL)
194-
195-let aN = 100
196-
197-let aO = 1
198-
199-let aP = 2
200-
201-func aQ (aR) = (toString(aR) + ",")
202-
203-
204-func aS (aR,aT) = fraction(aR, aL, aT, HALFEVEN)
205-
206-
207-func aU (aR,aT) = fraction(aR, aT, aL, HALFEVEN)
208-
209-
210-func aV (aR) = sqrt(aR, aK, aK, HALFEVEN)
211-
212-
213-func aW (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
214-
215-
216-func aX (aR,aT) = fraction(aR, toBigInt(aL), aT, HALFEVEN)
217-
218-
219-func aY (aR,aT) = fraction(aR, aT, toBigInt(aL), HALFEVEN)
220-
221-
222-func aZ (aR) = sqrtBigInt(aR, aK, aK, HALFEVEN)
223-
224-
225-func ba (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
226-
227-
228-func bb (aR) = if ((aR > 0))
229- then aR
230- else -(aR)
231-
232-
233-func bc (aR,aT) = if ((aR >= aT))
234- then aR
235- else aT
236-
237-
238-func bd (be) = {
239- func bf (bg,bh) = ((bg + bh) + ",")
240-
241- let bi = {
242- let bj = be
243- let bk = size(bj)
244- let bl = ""
245- func bm (bn,bo) = if ((bo >= bk))
246- then bn
247- else bf(bn, bj[bo])
248-
249- func bp (bn,bo) = if ((bo >= bk))
250- then bn
187+let aJ = 15
188+
189+let aK = 1000
190+
191+let aL = 6
192+
193+let aM = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
194+
195+let aN = (86400 * aM)
196+
197+let aO = 100
198+
199+let aP = 1
200+
201+let aQ = 2
202+
203+func aR (aS) = (toString(aS) + ",")
204+
205+
206+func aT (aS,aU) = fraction(aS, aM, aU, HALFEVEN)
207+
208+
209+func aV (aS,aU) = fraction(aS, aU, aM, HALFEVEN)
210+
211+
212+func aW (aS) = sqrt(aS, aL, aL, HALFEVEN)
213+
214+
215+func aX (aS,aU) = pow(aS, aL, aU, aL, aL, HALFEVEN)
216+
217+
218+func aY (aS,aU) = fraction(aS, toBigInt(aM), aU, HALFEVEN)
219+
220+
221+func aZ (aS,aU) = fraction(aS, aU, toBigInt(aM), HALFEVEN)
222+
223+
224+func ba (aS) = sqrtBigInt(aS, aL, aL, HALFEVEN)
225+
226+
227+func bb (aS,aU) = pow(aS, aL, aU, aL, aL, HALFEVEN)
228+
229+
230+func bc (aS) = if ((aS > 0))
231+ then aS
232+ else -(aS)
233+
234+
235+func bd (aS,aU) = if ((aS >= aU))
236+ then aS
237+ else aU
238+
239+
240+func be (bf) = {
241+ func bg (bh,bi) = ((bh + bi) + ",")
242+
243+ let bj = {
244+ let bk = bf
245+ let bl = size(bk)
246+ let bm = ""
247+ func bn (bo,bp) = if ((bp >= bl))
248+ then bo
249+ else bg(bo, bk[bp])
250+
251+ func bq (bo,bp) = if ((bp >= bl))
252+ then bo
251253 else throw("List size exceeds 20")
252254
253- bp(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bl, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
255+ bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
254256 }
255- let bq = dropRight(bi, 1)
256- let br = if ((take(bq, 1) == ","))
257- then drop(bq, 1)
258- else bq
259- br
260- }
261-
262-
263-func bs (bt) = split(bt, ",")
264-
265-
266-func bu (be,bv,bw) = if ((size(be) > bv))
267- then (removeByIndex(be, 0) :+ bw)
268- else (be :+ bw)
269-
270-
271-func bx (by) = valueOrErrorMessage(getInteger(this, by), ("no value for " + by))
272-
273-
274-func bz (by,bA) = valueOrElse(getInteger(this, by), bA)
275-
276-
277-func bB (al,ak) = {
278- let bh = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
279- bh
280- }
281-
282-
283-func bC (al,ak) = {
284- let bh = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
285- bh
286- }
287-
288-
289-func bD () = bx(e)
290-
291-
292-func bE () = bx(p)
293-
294-
295-func bF () = bx(r)
296-
297-
298-func bG () = bx(L)
299-
300-
301-func bH () = bx(M)
302-
303-
304-func bI () = bz(N, aL)
305-
306-
307-func bJ () = bz(O, aL)
308-
309-
310-func bK () = bx(P)
311-
312-
313-func bL () = bx(S)
314-
315-
316-func bM () = bx(T)
317-
318-
319-func bN () = bx(U)
320-
321-
322-func bO () = bx(I)
323-
324-
325-func bP () = bx(q)
326-
327-
328-func bQ () = (bP() * aL)
329-
330-
331-func bR () = (bP() * aJ)
332-
333-
334-func bS () = bx(s)
335-
336-
337-func bT () = bx(t)
338-
339-
340-func bU () = bx(u)
341-
342-
343-func bV () = bx(v)
344-
345-
346-func bW () = bx(w)
347-
348-
349-func bX () = bx(x)
350-
351-
352-func bY () = bx(y)
353-
354-
355-func bZ () = bx(G)
356-
357-
358-func ca () = bx(H)
359-
360-
361-func cb () = bx(R)
362-
363-
364-func cc () = bx(Q)
365-
366-
367-func cd () = bz(f, 0)
368-
369-
370-func ce () = bx(z)
371-
372-
373-func cf () = bx(A)
374-
375-
376-func cg (ch) = valueOrElse(getString(au(), "k_sender"), toString(ch.caller))
377-
378-
379-func ci (cj,ck,cl) = {
380- let cm = (cj - ck)
381- if (if (cl)
382- then (0 > cm)
257+ let br = dropRight(bj, 1)
258+ let bs = if ((take(br, 1) == ","))
259+ then drop(br, 1)
260+ else br
261+ bs
262+ }
263+
264+
265+func bt (bu) = split(bu, ",")
266+
267+
268+func bv (bf,bw,bx) = if ((size(bf) > bw))
269+ then (removeByIndex(bf, 0) :+ bx)
270+ else (bf :+ bx)
271+
272+
273+func by (bz) = valueOrErrorMessage(getInteger(this, bz), ("no value for " + bz))
274+
275+
276+func bA (bz,bB) = valueOrElse(getInteger(this, bz), bB)
277+
278+
279+func bC (am,al) = {
280+ let bi = valueOrErrorMessage(getString(am, al), ("No value for key " + al))
281+ bi
282+ }
283+
284+
285+func bD (am,al) = {
286+ let bi = valueOrErrorMessage(getInteger(am, al), ("No value for key " + al))
287+ bi
288+ }
289+
290+
291+func bE () = by(e)
292+
293+
294+func bF () = by(q)
295+
296+
297+func bG () = by(s)
298+
299+
300+func bH () = by(M)
301+
302+
303+func bI () = by(N)
304+
305+
306+func bJ () = bA(O, aM)
307+
308+
309+func bK () = bA(P, aM)
310+
311+
312+func bL () = by(Q)
313+
314+
315+func bM () = by(T)
316+
317+
318+func bN () = by(U)
319+
320+
321+func bO () = by(V)
322+
323+
324+func bP () = by(J)
325+
326+
327+func bQ () = by(r)
328+
329+
330+func bR () = (bQ() * aM)
331+
332+
333+func bS () = (bQ() * aK)
334+
335+
336+func bT () = by(t)
337+
338+
339+func bU () = by(u)
340+
341+
342+func bV () = by(v)
343+
344+
345+func bW () = by(w)
346+
347+
348+func bX () = by(x)
349+
350+
351+func bY () = by(y)
352+
353+
354+func bZ () = by(z)
355+
356+
357+func ca () = by(H)
358+
359+
360+func cb () = by(I)
361+
362+
363+func cc () = by(S)
364+
365+
366+func cd () = by(R)
367+
368+
369+func ce () = bA(f, 0)
370+
371+
372+func cf () = by(A)
373+
374+
375+func cg () = by(B)
376+
377+
378+func ch (ci) = valueOrElse(getString(av(), "k_sender"), toString(ci.caller))
379+
380+
381+func cj (ck,cl,cm) = {
382+ let cn = (ck - cl)
383+ if (if (cm)
384+ then (0 > cn)
383385 else false)
384- then throw(((("Invalid margin: " + toString(cj)) + " < ") + toString(ck)))
385- else if (if (!(cl))
386- then (cm >= 0)
386+ then throw(((("Invalid margin: " + toString(ck)) + " < ") + toString(cl)))
387+ else if (if (!(cm))
388+ then (cn >= 0)
387389 else false)
388- then throw(((("Invalid margin: " + toString(cj)) + " > ") + toString(ck)))
390+ then throw(((("Invalid margin: " + toString(ck)) + " > ") + toString(cl)))
389391 else true
390392 }
391393
392394
393-func cn (co) = if ((co == 0))
395+func co (cp) = if ((cp == 0))
394396 then throw("Should not be called with _positionSize == 0")
395- else if ((co > 0))
396- then bZ()
397- else ca()
398-
399-
400-func cp (cq) = {
401- let cr = getInteger(this, aj(g, cq))
402- let cs = cr
403- if ($isInstanceOf(cs, "Int"))
397+ else if ((cp > 0))
398+ then ca()
399+ else cb()
400+
401+
402+func cq (cr) = {
403+ let cs = getInteger(this, ak(g, cr))
404+ let ct = cs
405+ if ($isInstanceOf(ct, "Int"))
404406 then {
405- let ct = cs
406- $Tuple4(ct, getIntegerValue(this, aj(h, cq)), getIntegerValue(this, aj(i, cq)), getIntegerValue(this, aj(j, cq)))
407+ let cu = ct
408+ $Tuple4(cu, getIntegerValue(this, ak(h, cr)), getIntegerValue(this, ak(i, cr)), getIntegerValue(this, ak(j, cr)))
407409 }
408410 else $Tuple4(0, 0, 0, 0)
409411 }
410412
411413
412-func cu (cq) = {
413- let cv = getString(this, aj(l, cq))
414- let cs = cv
415- if ($isInstanceOf(cs, "String"))
414+func cv (cr) = {
415+ let cw = getString(this, ak(l, cr))
416+ let ct = cw
417+ if ($isInstanceOf(ct, "String"))
416418 then {
417- let cw = cs
418- cw
419- }
420- else toBase58String(ap())
421- }
422-
423-
424-func cx (cq) = if ((cp(cq)._1 == 0))
419+ let cx = ct
420+ cx
421+ }
422+ else toBase58String(aq())
423+ }
424+
425+
426+func cy (cr) = {
427+ let cz = getInteger(this, ak(m, cr))
428+ let ct = cz
429+ if ($isInstanceOf(ct, "Int"))
430+ then {
431+ let cA = ct
432+ cA
433+ }
434+ else bF()
435+ }
436+
437+
438+func cB (cr) = if ((cq(cr)._1 == 0))
425439 then throw("No open position")
426440 else true
427441
428442
429-func cy () = valueOrElse(getBoolean(this, m), false)
430-
431-
432-func cz () = valueOrElse(getBoolean(this, n), false)
433-
434-
435-func cA () = valueOrElse(getBoolean(this, o), false)
436-
437-
438-func cB (cC,cD,cE) = if (cC)
443+func cC () = valueOrElse(getBoolean(this, n), false)
444+
445+
446+func cD () = valueOrElse(getBoolean(this, o), false)
447+
448+
449+func cE () = valueOrElse(getBoolean(this, p), false)
450+
451+
452+func cF (cG,cH,cI) = if (cG)
439453 then {
440- let cF = (bH() - cE)
441- if ((0 >= cF))
454+ let cJ = (bI() - cI)
455+ if ((0 >= cJ))
442456 then throw("Tx lead to base asset reserve <= 0, revert")
443- else $Tuple3((bG() + cD), cF, (bK() + cE))
457+ else $Tuple3((bH() + cH), cJ, (bL() + cI))
444458 }
445459 else {
446- let cG = (bG() - cD)
447- if ((0 >= cG))
460+ let cK = (bH() - cH)
461+ if ((0 >= cK))
448462 then throw("Tx lead to base quote reserve <= 0, revert")
449- else $Tuple3(cG, (bH() + cE), (bK() - cE))
463+ else $Tuple3(cK, (bI() + cI), (bL() - cI))
450464 }
451465
452466
453-func cH (cI,cJ) = {
454- let cK = toBigInt(cI)
455- let cL = toBigInt(cJ)
456- aY(cK, cL)
457- }
458-
459-
460-func cM (cC,cD) = {
461- let cI = bG()
462- let cJ = bH()
467+func cL (cM,cN) = {
468+ let cO = toBigInt(cM)
469+ let cP = toBigInt(cN)
470+ aZ(cO, cP)
471+ }
472+
473+
474+func cQ (cG,cH) = {
475+ let cM = bH()
463476 let cN = bI()
464- let cO = bJ()
465- let cP = aS(cD, cN)
466- let by = cH(cI, cJ)
467- let cQ = if (cC)
468- then (cI + cP)
469- else (cI - cP)
470- let cR = toInt(aX(by, toBigInt(cQ)))
471- let cS = bb((cR - cJ))
472- let cT = if (cC)
473- then cS
474- else -(cS)
475- let cU = cB(cC, cP, cS)
476- let cV = cU._1
477- let cW = cU._2
478- let cX = cU._3
479- let cY = aS(aU(cI, cN), aU(cJ, cO))
480- let cZ = aS(cD, cS)
481- let da = bb((cY - cZ))
482- let db = (aL - aS(cY, (cY + da)))
483- let dc = bW()
484- if ((db > dc))
485- then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(cI)) + " before base asset: ") + toString(cJ)) + " quote asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cY)) + " marketPrice: ") + toString(cZ)))
486- else $Tuple4(cT, cV, cW, cX)
487- }
488-
489-
490-func dd (de,df,dg,dh) = {
491- let di = if ((de != 0))
477+ let cR = bJ()
478+ let cS = bK()
479+ let cT = aT(cH, cR)
480+ let bz = cL(cM, cN)
481+ let cU = if (cG)
482+ then (cM + cT)
483+ else (cM - cT)
484+ let cV = toInt(aY(bz, toBigInt(cU)))
485+ let cW = bc((cV - cN))
486+ let cX = if (cG)
487+ then cW
488+ else -(cW)
489+ let cY = cF(cG, cT, cW)
490+ let cZ = cY._1
491+ let da = cY._2
492+ let db = cY._3
493+ let dc = aT(aV(cM, cR), aV(cN, cS))
494+ let dd = aT(cH, cW)
495+ let de = bc((dc - dd))
496+ let df = (aM - aT(dc, (dc + de)))
497+ let dg = bX()
498+ if ((df > dg))
499+ then throw(((((((((((((("Price impact " + toString(df)) + " > max price impact ") + toString(dg)) + " before quote asset: ") + toString(cM)) + " before base asset: ") + toString(cN)) + " quote asset amount to exchange: ") + toString(cH)) + " price before: ") + toString(dc)) + " marketPrice: ") + toString(dd)))
500+ else $Tuple4(cX, cZ, da, db)
501+ }
502+
503+
504+func dh (di,dj,dk,dl) = {
505+ let dm = if ((di != 0))
492506 then {
493- let dj = cn(de)
494- aU((dj - dg), de)
507+ let dn = co(di)
508+ aV((dn - dk), di)
495509 }
496510 else 0
497- let dk = ((dh - di) + df)
498- let dl = if ((0 > dk))
499- then $Tuple2(0, bb(dk))
500- else $Tuple2(bb(dk), 0)
501- let dm = dl._1
502- let dn = dl._2
503- $Tuple3(dm, dn, di)
504- }
505-
506-
507-func do (cC,cE,dp,dq,dr,ds,dt) = {
508- let cY = aS(aU(dq, dr), aU(ds, dt))
509- if ((cE == 0))
511+ let do = ((dl - dm) + dj)
512+ let dp = if ((0 > do))
513+ then $Tuple2(0, bc(do))
514+ else $Tuple2(bc(do), 0)
515+ let dq = dp._1
516+ let dr = dp._2
517+ $Tuple3(dq, dr, dm)
518+ }
519+
520+
521+func ds (cG,cI,dt,du,dv,dw,dx) = {
522+ let dc = aT(aV(du, dv), aV(dw, dx))
523+ if ((cI == 0))
510524 then throw("Invalid base asset amount")
511525 else {
512- let by = cH(dq, ds)
513- let du = if (cC)
514- then (ds + cE)
515- else (ds - cE)
516- let dv = toInt(aX(by, toBigInt(du)))
517- let dw = bb((dv - dq))
518- let dx = aU(dw, dr)
519- let dc = bW()
520- let dy = cB(!(cC), dw, cE)
521- let cV = dy._1
522- let cW = dy._2
523- let cX = dy._3
524- let cZ = aS(dx, cE)
525- let da = bb((cY - cZ))
526- let db = (aL - aS(cY, (cY + da)))
527- if (if ((db > dc))
528- then dp
526+ let bz = cL(du, dw)
527+ let dy = if (cG)
528+ then (dw + cI)
529+ else (dw - cI)
530+ let dz = toInt(aY(bz, toBigInt(dy)))
531+ let dA = bc((dz - du))
532+ let dB = aV(dA, dv)
533+ let dg = bX()
534+ let dC = cF(!(cG), dA, cI)
535+ let cZ = dC._1
536+ let da = dC._2
537+ let db = dC._3
538+ let dd = aT(dB, cI)
539+ let de = bc((dc - dd))
540+ let df = (aM - aT(dc, (dc + de)))
541+ if (if ((df > dg))
542+ then dt
529543 else false)
530- then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(dq)) + " before base asset: ") + toString(ds)) + " base asset amount to exchange: ") + toString(cE)) + " price before: ") + toString(cY)) + " market price: ") + toString(cZ)))
531- else $Tuple7(dx, cV, cW, cX, (cc() - (if (cC)
532- then bb(cE)
533- else 0)), (cb() - (if (!(cC))
534- then bb(cE)
535- else 0)), db)
536- }
537- }
538-
539-
540-func dz (cC,cE,dp) = do(cC, cE, dp, bG(), bI(), bH(), bJ())
541-
542-
543-func dA () = {
544- let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
545- let dC = getStringValue(this, a)
546- let dD = valueOrErrorMessage(getInteger(dB, dC), ((("Can not get oracle price. Oracle: " + toString(dB)) + " key: ") + dC))
547- let dE = valueOrElse(getString(this, b), "")
548- if ((dE != ""))
549- then {
550- let dF = lastBlock.height
551- let dG = valueOrErrorMessage(getInteger(dB, dE), ((("Can not get oracle block. Oracle: " + toString(dB)) + " key: ") + dE))
552- if (((dF - dG) > cf()))
553- then throw(((("Oracle stale data. Last oracle block: " + toString(dG)) + " current block: ") + toString(dF)))
554- else dD
555- }
556- else dD
557- }
558-
559-
560-func dH () = {
561- let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
562- let dI = valueOrElse(getString(this, c), "")
544+ then throw(((((((((((((("Price impact " + toString(df)) + " > max price impact ") + toString(dg)) + " before quote asset: ") + toString(du)) + " before base asset: ") + toString(dw)) + " base asset amount to exchange: ") + toString(cI)) + " price before: ") + toString(dc)) + " market price: ") + toString(dd)))
545+ else $Tuple7(dB, cZ, da, db, (cd() - (if (cG)
546+ then bc(cI)
547+ else 0)), (cc() - (if (!(cG))
548+ then bc(cI)
549+ else 0)), df)
550+ }
551+ }
552+
553+
554+func dD (cG,cI,dt) = ds(cG, cI, dt, bH(), bJ(), bI(), bK())
555+
556+
557+func dE () = {
558+ let dF = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
559+ let dG = getStringValue(this, a)
560+ let dH = valueOrErrorMessage(getInteger(dF, dG), ((("Can not get oracle price. Oracle: " + toString(dF)) + " key: ") + dG))
561+ let dI = valueOrElse(getString(this, b), "")
563562 if ((dI != ""))
564563 then {
565- let dJ = valueOrErrorMessage(getBoolean(dB, dI), ((("Can not get oracle is open/closed. Oracle: " + toString(dB)) + " key: ") + dI))
566- !(dJ)
564+ let dJ = lastBlock.height
565+ let dK = valueOrErrorMessage(getInteger(dF, dI), ((("Can not get oracle block. Oracle: " + toString(dF)) + " key: ") + dI))
566+ if (((dJ - dK) > cg()))
567+ then throw(((("Oracle stale data. Last oracle block: " + toString(dK)) + " current block: ") + toString(dJ)))
568+ else dH
569+ }
570+ else dH
571+ }
572+
573+
574+func dL () = {
575+ let dF = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
576+ let dM = valueOrElse(getString(this, c), "")
577+ if ((dM != ""))
578+ then {
579+ let dN = valueOrErrorMessage(getBoolean(dF, dM), ((("Can not get oracle is open/closed. Oracle: " + toString(dF)) + " key: ") + dM))
580+ !(dN)
567581 }
568582 else false
569583 }
570584
571585
572-func dK (dL,dq,ds,cN,cO) = {
573- let dM = aS(aU(dq, cN), aU(ds, cO))
574- let dN = aS((dL + dM), (2 * aL))
575- let dK = aS(bb((dL - dM)), dN)
576- dK
577- }
578-
579-
580-func dO (dq,ds) = {
581- let dP = dA()
582- let cN = bI()
583- let cO = bJ()
584- let dQ = dK(dP, bG(), bH(), cN, cO)
585- let dR = dK(dP, dq, ds, cN, cO)
586- if (if ((dR > bX()))
587- then (dR > dQ)
586+func dO (dP,du,dw,cR,cS) = {
587+ let dQ = aT(aV(du, cR), aV(dw, cS))
588+ let dR = aT((dP + dQ), (2 * aM))
589+ let dO = aT(bc((dP - dQ)), dR)
590+ dO
591+ }
592+
593+
594+func dS (du,dw) = {
595+ let dT = dE()
596+ let cR = bJ()
597+ let cS = bK()
598+ let dU = dO(dT, bH(), bI(), cR, cS)
599+ let dV = dO(dT, du, dw, cR, cS)
600+ if (if ((dV > bY()))
601+ then (dV > dU)
588602 else false)
589- then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bX())))
603+ then throw(((("Price spread " + toString(dV)) + " > max price spread ") + toString(bY())))
590604 else true
591605 }
592606
593607
594-func dS (dT,dU) = {
595- let dV = bY()
596- if ((dT > dV))
597- then throw(((("Long open notional " + toString(dT)) + " > max open notional ") + toString(dV)))
598- else if ((dU > dV))
599- then throw(((("Short open notional " + toString(dU)) + " > max open notional ") + toString(dV)))
608+func dW (dX,dY) = {
609+ let dZ = bZ()
610+ if ((dX > dZ))
611+ then throw(((("Long open notional " + toString(dX)) + " > max open notional ") + toString(dZ)))
612+ else if ((dY > dZ))
613+ then throw(((("Short open notional " + toString(dY)) + " > max open notional ") + toString(dZ)))
600614 else true
601615 }
602616
603617
604-func dW () = {
605- let dq = bG()
606- let ds = bH()
607- let cN = bI()
608- let cO = bJ()
609- aS(aU(dq, cN), aU(ds, cO))
610- }
611-
612-
613-func dX () = {
614- let dP = dA()
615- let dY = dW()
616- (aS(bb((dP - dY)), dP) > bV())
617- }
618-
619-
620-func dZ (co,ea,dq,dr,ds,dt) = {
621- let eb = bb(co)
622- let ec = (0 > co)
623- let ed = if ((ea == aO))
618+func ea () = {
619+ let du = bH()
620+ let dw = bI()
621+ let cR = bJ()
622+ let cS = bK()
623+ aT(aV(du, cR), aV(dw, cS))
624+ }
625+
626+
627+func eb () = {
628+ let dT = dE()
629+ let ec = ea()
630+ (aT(bc((dT - ec)), dT) > bW())
631+ }
632+
633+
634+func ed (cp,ee,du,dv,dw,dx) = {
635+ let ef = bc(cp)
636+ let eg = (0 > cp)
637+ let eh = if ((ee == aP))
624638 then {
625- let ee = do(!(ec), eb, false, dq, dr, ds, dt)
626- let ef = ee._1
627- let eg = ee._2
628- let eh = ee._3
629- let ei = ee._4
630- ef
631- }
632- else aU(eb, dA())
633- ed
634- }
635-
636-
637-func ej (co,ek,dq,dr,ds,dt,ea) = if ((co == 0))
639+ let ei = ds(!(eg), ef, false, du, dv, dw, dx)
640+ let ej = ei._1
641+ let ek = ei._2
642+ let el = ei._3
643+ let em = ei._4
644+ ej
645+ }
646+ else aV(ef, dE())
647+ eh
648+ }
649+
650+
651+func en (cp,eo,du,dv,dw,dx,ee) = if ((cp == 0))
638652 then throw("Invalid position size")
639653 else {
640- let ec = (0 > co)
641- let ed = dZ(co, ea, dq, dr, ds, dt)
642- let el = if (ec)
643- then (ek - ed)
644- else (ed - ek)
645- $Tuple2(ed, el)
654+ let eg = (0 > cp)
655+ let eh = ed(cp, ee, du, dv, dw, dx)
656+ let ep = if (eg)
657+ then (eo - eh)
658+ else (eh - eo)
659+ $Tuple2(eh, ep)
646660 }
647661
648662
649-func em (cq,ea) = {
650- let en = cp(cq)
651- let ct = en._1
652- let eo = en._2
653- let ep = en._3
654- let eq = en._4
655- ej(ct, ep, bG(), bI(), bH(), bJ(), ea)
656- }
657-
658-
659-func er (es,et,eu) = aS((es - et), eu)
660-
661-
662-func ev (cq,ea) = {
663- let ew = cp(cq)
664- let ct = ew._1
665- let eo = ew._2
666- let ex = ew._3
667- let eq = ew._4
668- let ey = em(cq, ea)
669- let ed = ey._1
670- let el = ey._2
671- let ez = dd(ct, eo, eq, el)
672- let dm = ez._1
673- let dn = ez._2
674- er(dm, dn, ed)
675- }
676-
677-
678-func eA (cq) = ev(cq, aO)
679-
680-
681-func eB (cq,co) = {
682- let eC = bc(bU(), (aL - aS(eA(cq), bS())))
683- let eD = aU(bb(co), eC)
684- let eE = dz((co > 0), eD, false)
685- let eF = eE._1
686- let db = eE._7
687- if ((bW() > db))
688- then eF
663+func eq (cr,ee) = {
664+ let er = cq(cr)
665+ let cu = er._1
666+ let es = er._2
667+ let et = er._3
668+ let eu = er._4
669+ en(cu, et, bH(), bJ(), bI(), bK(), ee)
670+ }
671+
672+
673+func ev (ew,ex,ey) = aT((ew - ex), ey)
674+
675+
676+func ez (cr,ee) = {
677+ let eA = cq(cr)
678+ let cu = eA._1
679+ let es = eA._2
680+ let eB = eA._3
681+ let eu = eA._4
682+ let eC = eq(cr, ee)
683+ let eh = eC._1
684+ let ep = eC._2
685+ let eD = dh(cu, es, eu, ep)
686+ let dq = eD._1
687+ let dr = eD._2
688+ ev(dq, dr, eh)
689+ }
690+
691+
692+func eE (cr) = ez(cr, aP)
693+
694+
695+func eF (cr,cp) = {
696+ let eG = bd(bV(), (aM - aT(eE(cr), bT())))
697+ let eH = aV(bc(cp), eG)
698+ let eI = dD((cp > 0), eH, false)
699+ let eJ = eI._1
700+ let df = eI._7
701+ if ((bX() > df))
702+ then eJ
689703 else {
690- let eG = aU(bb(co), bU())
691- let eH = dz((co > 0), eG, false)._1
692- eH
693- }
694- }
695-
696-
697-func eI (cq,dp) = {
698- let eJ = cp(cq)
699- let ct = eJ._1
700- let eo = eJ._2
701- let ep = eJ._3
702- let eq = eJ._4
703- let el = em(cq, aO)._2
704- let eK = dd(ct, eo, eq, el)
705- let dm = eK._1
706- let dn = eK._2
707- let eG = -(ct)
708- let eL = el
709- let eM = -(dm)
710- let eN = dz((ct > 0), bb(ct), dp)
711- let eH = eN._1
712- let cQ = eN._2
713- let cR = eN._3
714- let eO = eN._4
715- let eP = eN._5
716- let eQ = eN._6
717- let eR = (bL() - ep)
718- $Tuple13(eG, dn, eL, eM, cQ, cR, eO, eR, eH, eP, eQ, (bN() - (if ((ct > 0))
719- then ep
720- else 0)), (bM() - (if ((0 > ct))
721- then ep
704+ let eK = aV(bc(cp), bV())
705+ let eL = dD((cp > 0), eK, false)._1
706+ eL
707+ }
708+ }
709+
710+
711+func eM (cr,dt) = {
712+ let eN = cq(cr)
713+ let cu = eN._1
714+ let es = eN._2
715+ let et = eN._3
716+ let eu = eN._4
717+ let ep = eq(cr, aP)._2
718+ let eO = dh(cu, es, eu, ep)
719+ let dq = eO._1
720+ let dr = eO._2
721+ let eK = -(cu)
722+ let eP = ep
723+ let eQ = -(dq)
724+ let eR = dD((cu > 0), bc(cu), dt)
725+ let eL = eR._1
726+ let cU = eR._2
727+ let cV = eR._3
728+ let eS = eR._4
729+ let eT = eR._5
730+ let eU = eR._6
731+ let eV = (bM() - et)
732+ $Tuple13(eK, dr, eP, eQ, cU, cV, eS, eV, eL, eT, eU, (bO() - (if ((cu > 0))
733+ then et
734+ else 0)), (bN() - (if ((0 > cu))
735+ then et
722736 else 0)))
723737 }
724738
725739
726-func eS () = {
727- let eT = ((lastBlock.timestamp / 1000) / 60)
728- let eU = (eT - aH)
729- let eV = valueOrElse(getString(this, B), "")
730- let eW = split(eV, ",")
731- func eX (bg,eY) = if ((eU >= parseIntValue(eY)))
732- then (bg :+ parseIntValue(eY))
733- else bg
734-
735- let eZ = {
736- let bj = eW
737- let bk = size(bj)
738- let bl = nil
739- func bm (bn,bo) = if ((bo >= bk))
740- then bn
741- else eX(bn, bj[bo])
742-
743- func bp (bn,bo) = if ((bo >= bk))
744- then bn
740+func eW () = {
741+ let eX = ((lastBlock.timestamp / 1000) / 60)
742+ let eY = (eX - aI)
743+ let eZ = valueOrElse(getString(this, C), "")
744+ let fa = split(eZ, ",")
745+ func fb (bh,fc) = if ((eY >= parseIntValue(fc)))
746+ then (bh :+ parseIntValue(fc))
747+ else bh
748+
749+ let fd = {
750+ let bk = fa
751+ let bl = size(bk)
752+ let bm = nil
753+ func bn (bo,bp) = if ((bp >= bl))
754+ then bo
755+ else fb(bo, bk[bp])
756+
757+ func bq (bo,bp) = if ((bp >= bl))
758+ then bo
745759 else throw("List size exceeds 20")
746760
747- bp(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bl, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
761+ bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
748762 }
749- let fa = if ((size(eZ) > 0))
750- then max(eZ)
751- else parseIntValue(eW[0])
752- let fb = valueOrElse(getInteger(this, C), 0)
753- let fc = valueOrElse(getInteger(this, ((D + "_") + toString(fb))), 0)
754- let fd = valueOrElse(getInteger(this, ((E + "_") + toString(fb))), 0)
755- let fe = (fc + ((eT - fb) * fd))
756- let ff = valueOrElse(getInteger(this, ((D + "_") + toString(fa))), 0)
757- let fg = valueOrElse(getInteger(this, ((E + "_") + toString(fa))), 0)
758- let fh = (ff + ((eU - fa) * fg))
759- ((fe - fh) / aH)
760- }
761-
762-
763-func fi () = {
764- let co = bK()
765- if ((co == 0))
766- then $Tuple2(bG(), bH())
763+ let fe = if ((size(fd) > 0))
764+ then max(fd)
765+ else parseIntValue(fa[0])
766+ let ff = valueOrElse(getInteger(this, D), 0)
767+ let fg = valueOrElse(getInteger(this, ((E + "_") + toString(ff))), 0)
768+ let fh = valueOrElse(getInteger(this, ((F + "_") + toString(ff))), 0)
769+ let fi = (fg + ((eX - ff) * fh))
770+ let fj = valueOrElse(getInteger(this, ((E + "_") + toString(fe))), 0)
771+ let fk = valueOrElse(getInteger(this, ((F + "_") + toString(fe))), 0)
772+ let fl = (fj + ((eY - fe) * fk))
773+ ((fi - fl) / aI)
774+ }
775+
776+
777+func fm () = {
778+ let cp = bL()
779+ if ((cp == 0))
780+ then $Tuple2(bH(), bI())
767781 else {
768- let fj = (co > 0)
769- let fk = dz(fj, bb(co), false)
770- let fl = fk._1
771- let fm = fk._2
772- let fn = fk._3
773- $Tuple2(fm, fn)
774- }
775- }
776-
777-
778-func fo (fp,bK,fq,fr) = {
779- let fs = toBigInt(fp)
780- let ft = toBigInt(bK)
781- let fu = toBigInt(fq)
782- let fv = toBigInt(fr)
783- let by = aY(fu, fs)
784- let fw = (fs + ft)
785- let fx = aX(by, fw)
786- let fy = aX(fx, fw)
787- let fz = aX(fv, fy)
788- toInt(fz)
789- }
790-
791-
792-func fA (fB,cI,cJ) = {
793- let co = bK()
794- if ((co == 0))
782+ let fn = (cp > 0)
783+ let fo = dD(fn, bc(cp), false)
784+ let fp = fo._1
785+ let fq = fo._2
786+ let fr = fo._3
787+ $Tuple2(fq, fr)
788+ }
789+ }
790+
791+
792+func fs (ft,bL,fu,fv) = {
793+ let fw = toBigInt(ft)
794+ let fx = toBigInt(bL)
795+ let fy = toBigInt(fu)
796+ let fz = toBigInt(fv)
797+ let bz = aZ(fy, fw)
798+ let fA = (fw + fx)
799+ let fB = aY(bz, fA)
800+ let fC = aY(fB, fA)
801+ let fD = aY(fz, fC)
802+ toInt(fD)
803+ }
804+
805+
806+func fE (fF,cM,cN) = {
807+ let cp = bL()
808+ if ((cp == 0))
795809 then {
796- let fC = aS(aU(fB, cJ), cI)
797- $Tuple3(fC, aL, 0)
810+ let fG = aT(aV(fF, cN), cM)
811+ $Tuple3(fG, aM, 0)
798812 }
799813 else {
800- let fj = (co > 0)
801- let fl = dz(fj, bb(co), false)._1
802- let fC = fo(cJ, co, cI, fB)
803- let fD = aL
804- let eM = ej(co, fl, cI, fC, cJ, fD, aO)._2
805- $Tuple3(fC, fD, eM)
806- }
807- }
808-
809-
810-func fE () = {
811- let fF = dA()
812- let fG = eS()
813- let fH = (fG - fF)
814- if (if (if ((cb() == 0))
814+ let fn = (cp > 0)
815+ let fp = dD(fn, bc(cp), false)._1
816+ let fG = fs(cN, cp, cM, fF)
817+ let fH = aM
818+ let eQ = en(cp, fp, cM, fG, cN, fH, aP)._2
819+ $Tuple3(fG, fH, eQ)
820+ }
821+ }
822+
823+
824+func fI () = {
825+ let fJ = dE()
826+ let fK = eW()
827+ let fL = (fK - fJ)
828+ if (if (if ((cc() == 0))
815829 then true
816- else (cc() == 0))
830+ else (cd() == 0))
817831 then true
818- else dH())
832+ else dL())
819833 then $Tuple2(0, 0)
820- else if ((0 > fH))
834+ else if ((0 > fL))
821835 then {
822- let fI = aS(aU(fH, bQ()), aM)
823- let fJ = aS(aU(fI, cb()), cc())
824- $Tuple2(fI, fJ)
836+ let fM = aT(aV(fL, bR()), aN)
837+ let fN = aT(aV(fM, cc()), cd())
838+ $Tuple2(fM, fN)
825839 }
826840 else {
827- let fJ = aS(aU(fH, bQ()), aM)
828- let fI = aS(aU(fJ, cc()), cb())
829- $Tuple2(fI, fJ)
841+ let fN = aT(aV(fL, bR()), aN)
842+ let fM = aT(aV(fN, cd()), cc())
843+ $Tuple2(fM, fN)
830844 }
831845 }
832846
833847
834-func fK (fL,fM) = {
835- let fN = bE()
836- let fO = aU(fN, fM)
837- let fP = if ((fL != ""))
848+func fO (fP,fQ) = {
849+ let fR = bF()
850+ let fS = aV(fR, fQ)
851+ let fT = if ((fP != ""))
838852 then {
839- let fQ = bB(aw(), aj(aD, fL))
840- if ((fQ == aE))
853+ let fU = bC(ax(), ak(aE, fP))
854+ if ((fU == aF))
841855 then {
842- let fR = bC(aw(), aj(aC, fL))
843- let fS = aU(fO, fR)
844- $Tuple2(fS, true)
856+ let fV = bD(ax(), ak(aD, fP))
857+ let fW = aV(fS, fV)
858+ $Tuple2(fW, true)
845859 }
846860 else throw("Invalid attached artifact")
847861 }
848- else $Tuple2(fO, false)
849- let fS = fP._1
850- let fT = fP._2
851- $Tuple2(fS, fT)
852- }
853-
854-
855-func fU (cq,aB) = {
856- let fV = cp(cq)._1
857- if ((fV == 0))
862+ else $Tuple2(fS, false)
863+ let fW = fT._1
864+ let fX = fT._2
865+ $Tuple2(fW, fX)
866+ }
867+
868+
869+func fY (cr,aC) = {
870+ let fZ = cq(cr)._1
871+ if ((fZ == 0))
858872 then true
859- else (cu(cq) == aB)
860- }
861-
862-
863-func fW (cq,aB) = (cu(cq) == aB)
864-
865-
866-func fX (fY,aB,cq) = ((((((ai + "_") + fY) + "_") + aB) + "_") + cq)
867-
868-
869-func fZ (cq) = {
870- let cw = cu(cq)
871- if ((cw == toBase58String(ap())))
872- then $Tuple2(0, cw)
873+ else (cv(cr) == aC)
874+ }
875+
876+
877+func ga (cr,aC) = (cv(cr) == aC)
878+
879+
880+func gb (gc,aC,cr) = ((((((aj + "_") + gc) + "_") + aC) + "_") + cr)
881+
882+
883+func gd (cr) = {
884+ let cx = cv(cr)
885+ if ((cx == toBase58String(aq())))
886+ then $Tuple2(0, cx)
873887 else {
874- let ga = fX(toString(this), cw, cq)
875- let gb = valueOrElse(getInteger(ax(), ga), 0)
876- $Tuple2(gb, cw)
877- }
878- }
879-
880-
881-func gc (cq,fL) = {
882- let gd = invoke(at(), "computeFeeDiscount", [cq], nil)
883- if ((gd == gd))
888+ let ge = gb(toString(this), cx, cr)
889+ let gf = valueOrElse(getInteger(ay(), ge), 0)
890+ $Tuple2(gf, cx)
891+ }
892+ }
893+
894+
895+func gg (cr,fP) = {
896+ let gh = invoke(au(), "computeFeeDiscount", [cr], nil)
897+ if ((gh == gh))
884898 then {
885- let ge = {
886- let cs = gd
887- if ($isInstanceOf(cs, "Int"))
899+ let gi = {
900+ let ct = gh
901+ if ($isInstanceOf(ct, "Int"))
888902 then {
889- let gf = cs
890- gf
903+ let gj = ct
904+ gj
891905 }
892906 else throw("Invalid computeFeeDiscount result")
893907 }
894- let gg = fK(fL, ge)
895- let fS = gg._1
896- let fT = gg._2
897- $Tuple2(fS, fT)
908+ let gk = fO(fP, gi)
909+ let fW = gk._1
910+ let fX = gk._2
911+ $Tuple2(fW, fX)
898912 }
899913 else throw("Strict value is not equal to itself.")
900914 }
901915
902916
903-func gh (ch) = {
904- let gi = if ((size(ch.payments) > 1))
905- then toBase58String(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifactId"))
917+func gl (ci) = {
918+ let gm = if ((size(ci.payments) > 1))
919+ then toBase58String(valueOrErrorMessage(ci.payments[1].assetId, "Invalid artifactId"))
906920 else ""
907- gi
908- }
909-
910-
911-func gj (gk) = {
912- let gl = aU(gk, ce())
913- let gm = (gk - gl)
914- $Tuple2(gl, gm)
915- }
916-
917-
918-func gn (go,gp,gq,gr,gs,gt,gu,gv,gw,dV,gx,gy) = [IntegerEntry(r, go), IntegerEntry(s, gp), IntegerEntry(t, gq), IntegerEntry(q, gr), IntegerEntry(p, gs), IntegerEntry(v, gt), IntegerEntry(w, gu), IntegerEntry(u, gv), IntegerEntry(x, gw), IntegerEntry(y, dV), IntegerEntry(z, gx), IntegerEntry(A, gx)]
919-
920-
921-func gz (gA,gB,gC,gD,gE) = [IntegerEntry(I, gA), IntegerEntry(G, gB), IntegerEntry(H, gC), IntegerEntry(J, gD), IntegerEntry(K, gE)]
922-
923-
924-func gF (al,aB) = [StringEntry(aj(l, al), aB)]
925-
926-
927-func gG (gH,al) = if (gH)
921+ gm
922+ }
923+
924+
925+func gn (go) = {
926+ let gp = aV(go, cf())
927+ let gq = (go - gp)
928+ $Tuple2(gp, gq)
929+ }
930+
931+
932+func gr (gs,gt,gu,gv,gw,gx,gy,gz,gA,dZ,gB,gC) = [IntegerEntry(s, gs), IntegerEntry(t, gt), IntegerEntry(u, gu), IntegerEntry(r, gv), IntegerEntry(q, gw), IntegerEntry(w, gx), IntegerEntry(x, gy), IntegerEntry(v, gz), IntegerEntry(y, gA), IntegerEntry(z, dZ), IntegerEntry(A, gB), IntegerEntry(B, gB)]
933+
934+
935+func gD (gE,gF,gG,gH,gI) = [IntegerEntry(J, gE), IntegerEntry(H, gF), IntegerEntry(I, gG), IntegerEntry(K, gH), IntegerEntry(L, gI)]
936+
937+
938+func gJ (am,aC) = [StringEntry(ak(l, am), aC)]
939+
940+
941+func gK (gL,am) = if (gL)
928942 then {
929- let gI = cd()
930-[IntegerEntry(aj(k, al), (gI + 1)), IntegerEntry(f, (gI + 1))]
943+ let gM = ce()
944+[IntegerEntry(ak(k, am), (gM + 1)), IntegerEntry(f, (gM + 1))]
931945 }
932946 else nil
933947
934948
935-func gJ (al,gK,gL,gM,dj) = [IntegerEntry(aj(g, al), gK), IntegerEntry(aj(h, al), gL), IntegerEntry(aj(i, al), gM), IntegerEntry(aj(j, al), dj)]
936-
937-
938-func gN (gO) = {
939- let eT = ((lastBlock.timestamp / 1000) / 60)
940- let gP = valueOrElse(getInteger(this, C), 0)
941- if ((gP > eT))
949+func gN (gL,am,gw) = if (gL)
950+ then [IntegerEntry(ak(m, am), gw)]
951+ else nil
952+
953+
954+func gO (am,gP,gQ,gR,dn) = [IntegerEntry(ak(g, am), gP), IntegerEntry(ak(h, am), gQ), IntegerEntry(ak(i, am), gR), IntegerEntry(ak(j, am), dn)]
955+
956+
957+func gS (gT) = {
958+ let eX = ((lastBlock.timestamp / 1000) / 60)
959+ let gU = valueOrElse(getInteger(this, D), 0)
960+ if ((gU > eX))
942961 then throw("TWAP out-of-order")
943962 else {
944- let fb = if ((gP == 0))
945- then eT
946- else gP
947- if ((eT > gP))
963+ let ff = if ((gU == 0))
964+ then eX
965+ else gU
966+ if ((eX > gU))
948967 then {
949- let gQ = valueOrElse(getInteger(this, ((D + "_") + toString(gP))), 0)
950- let gR = valueOrElse(getInteger(this, ((E + "_") + toString(gP))), gO)
951- let gS = (gQ + ((eT - fb) * gR))
952- let eW = bu(bs(valueOrElse(getString(this, B), "")), aH, toString(eT))
953-[IntegerEntry(aj(D, toString(eT)), gS), IntegerEntry(aj(E, toString(eT)), gO), IntegerEntry(aj(F, toString(eT)), gP), IntegerEntry(C, eT), StringEntry(B, bd(eW))]
968+ let gV = valueOrElse(getInteger(this, ((E + "_") + toString(gU))), 0)
969+ let gW = valueOrElse(getInteger(this, ((F + "_") + toString(gU))), gT)
970+ let gX = (gV + ((eX - ff) * gW))
971+ let fa = bv(bt(valueOrElse(getString(this, C), "")), aI, toString(eX))
972+[IntegerEntry(ak(E, toString(eX)), gX), IntegerEntry(ak(F, toString(eX)), gT), IntegerEntry(ak(G, toString(eX)), gU), IntegerEntry(D, eX), StringEntry(C, be(fa))]
954973 }
955974 else {
956- let gT = valueOrElse(getInteger(this, aj(F, toString(eT))), 0)
957- let gQ = valueOrElse(getInteger(this, aj(D, toString(gT))), 0)
958- let gR = valueOrElse(getInteger(this, aj(E, toString(gT))), gO)
959- let gS = (gQ + ((eT - gT) * gR))
960-[IntegerEntry(aj(D, toString(eT)), gS), IntegerEntry(aj(E, toString(eT)), gO)]
975+ let gY = valueOrElse(getInteger(this, ak(G, toString(eX))), 0)
976+ let gV = valueOrElse(getInteger(this, ak(E, toString(gY))), 0)
977+ let gW = valueOrElse(getInteger(this, ak(F, toString(gY))), gT)
978+ let gX = (gV + ((eX - gY) * gW))
979+[IntegerEntry(ak(E, toString(eX)), gX), IntegerEntry(ak(F, toString(eX)), gT)]
961980 }
962981 }
963982 }
964983
965984
966-func gU (cI,cJ) = [IntegerEntry(L, cI), IntegerEntry(M, cJ)]
967-
968-
969-func gV (cN,cO) = [IntegerEntry(N, cN), IntegerEntry(O, cO)]
970-
971-
972-func gW (cI,cJ,gX,gY,gZ,ha,hb,hc) = {
973- let cN = bI()
974- let cO = bJ()
975- if (((gZ - ha) != gX))
976- then throw(((((("Invalid AMM state data: " + toString(gZ)) + " + ") + toString(ha)) + " != ") + toString(gX)))
977- else ((gU(cI, cJ) ++ [IntegerEntry(P, gX), IntegerEntry(S, gY), IntegerEntry(Q, gZ), IntegerEntry(R, ha), IntegerEntry(U, hb), IntegerEntry(T, hc)]) ++ gN(aS(aU(cI, cN), aU(cJ, cO))))
978- }
979-
980-
981-func hd (al) = [DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(i, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(l, al))]
982-
983-
984-func he (al,hf) = {
985- let hg = assetBalance(this, ap())
986- if ((hf > hg))
987- then throw(((("Unable to withdraw " + toString(hf)) + " from contract balance ") + toString(hg)))
988- else [ScriptTransfer(al, hf, ap())]
989- }
990-
991-
992-func hh (ch) = if ((0 > ch))
985+func gZ (cM,cN) = [IntegerEntry(M, cM), IntegerEntry(N, cN)]
986+
987+
988+func ha (cR,cS) = [IntegerEntry(O, cR), IntegerEntry(P, cS)]
989+
990+
991+func hb (cM,cN,hc,hd,he,hf,hg,hh) = {
992+ let cR = bJ()
993+ let cS = bK()
994+ if (((he - hf) != hc))
995+ then throw(((((("Invalid AMM state data: " + toString(he)) + " + ") + toString(hf)) + " != ") + toString(hc)))
996+ else ((gZ(cM, cN) ++ [IntegerEntry(Q, hc), IntegerEntry(T, hd), IntegerEntry(R, he), IntegerEntry(S, hf), IntegerEntry(V, hg), IntegerEntry(U, hh)]) ++ gS(aT(aV(cM, cR), aV(cN, cS))))
997+ }
998+
999+
1000+func hi (am) = [DeleteEntry(ak(g, am)), DeleteEntry(ak(h, am)), DeleteEntry(ak(i, am)), DeleteEntry(ak(j, am)), DeleteEntry(ak(l, am))]
1001+
1002+
1003+func hj (am,hk) = {
1004+ let hl = assetBalance(this, aq())
1005+ if ((hk > hl))
1006+ then throw(((("Unable to withdraw " + toString(hk)) + " from contract balance ") + toString(hl)))
1007+ else [ScriptTransfer(am, hk, aq())]
1008+ }
1009+
1010+
1011+func hm (ci) = if ((0 > ci))
9931012 then throw("Balance")
994- else [IntegerEntry(e, ch)]
995-
996-
997-func hi (ch) = [ScriptTransfer(ar(), ch, ap())]
998-
999-
1000-func hj (hk,ch) = if (hk)
1001- then [Burn(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifact"), 1)]
1013+ else [IntegerEntry(e, ci)]
1014+
1015+
1016+func hn (ci) = [ScriptTransfer(as(), ci, aq())]
1017+
1018+
1019+func ho (hp,ci) = if (hp)
1020+ then [Burn(valueOrErrorMessage(ci.payments[1].assetId, "Invalid artifact"), 1)]
10021021 else nil
10031022
10041023
1005-@Callable(ch)
1006-func pause () = if ((ch.caller != an()))
1024+@Callable(ci)
1025+func pause () = if ((ci.caller != ao()))
10071026 then throw("Invalid pause params")
1008- else [BooleanEntry(n, true)]
1009-
1010-
1011-
1012-@Callable(ch)
1013-func unpause () = if ((ch.caller != an()))
1027+ else [BooleanEntry(o, true)]
1028+
1029+
1030+
1031+@Callable(ci)
1032+func unpause () = if ((ci.caller != ao()))
10141033 then throw("Invalid unpause params")
1015- else [BooleanEntry(n, false)]
1016-
1017-
1018-
1019-@Callable(ch)
1020-func setCloseOnly () = if ((ch.caller != an()))
1034+ else [BooleanEntry(o, false)]
1035+
1036+
1037+
1038+@Callable(ci)
1039+func setCloseOnly () = if ((ci.caller != ao()))
10211040 then throw("Invalid setCloseOnly params")
1022- else [BooleanEntry(o, true)]
1023-
1024-
1025-
1026-@Callable(ch)
1027-func unsetCloseOnly () = if ((ch.caller != an()))
1041+ else [BooleanEntry(p, true)]
1042+
1043+
1044+
1045+@Callable(ci)
1046+func unsetCloseOnly () = if ((ci.caller != ao()))
10281047 then throw("Invalid unsetCloseOnly params")
1029- else [BooleanEntry(o, false)]
1030-
1031-
1032-
1033-@Callable(ch)
1034-func addLiquidity (cD) = if (if ((ch.caller != an()))
1048+ else [BooleanEntry(p, false)]
1049+
1050+
1051+
1052+@Callable(ci)
1053+func addLiquidity (cH) = if (if ((ci.caller != ao()))
10351054 then true
1036- else (0 >= cD))
1055+ else (0 >= cH))
10371056 then throw("Invalid addLiquidity params")
10381057 else {
1039- let cI = bG()
1040- let cJ = bH()
1058+ let cM = bH()
10411059 let cN = bI()
1042- let cO = bJ()
1043- let hl = aS(aU(cI, cN), aU(cJ, cO))
1044- let hm = (cI + cD)
1045- let hn = (aS(aU(hm, cN), hl) - cJ)
1046- let ho = (cJ + hn)
1047- let hp = fA(dA(), hm, ho)
1048- let hq = hp._1
1049- let hr = hp._2
1050- let eM = hp._3
1051- let hs = if ((eM != 0))
1060+ let cR = bJ()
1061+ let cS = bK()
1062+ let hq = aT(aV(cM, cR), aV(cN, cS))
1063+ let hr = (cM + cH)
1064+ let hs = (aT(aV(hr, cR), hq) - cN)
1065+ let ht = (cN + hs)
1066+ let hu = fE(dE(), hr, ht)
1067+ let hv = hu._1
1068+ let hw = hu._2
1069+ let eQ = hu._3
1070+ let hx = if ((eQ != 0))
10521071 then {
1053- let hs = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
1054- if ((hs == hs))
1072+ let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1073+ if ((hx == hx))
10551074 then nil
10561075 else throw("Strict value is not equal to itself.")
10571076 }
10581077 else nil
1059- if ((hs == hs))
1060- then (gU(hm, ho) ++ gV(hq, hr))
1078+ if ((hx == hx))
1079+ then (gZ(hr, ht) ++ ha(hv, hw))
10611080 else throw("Strict value is not equal to itself.")
10621081 }
10631082
10641083
10651084
1066-@Callable(ch)
1067-func removeLiquidity (cD) = if (if ((ch.caller != an()))
1085+@Callable(ci)
1086+func removeLiquidity (cH) = if (if ((ci.caller != ao()))
10681087 then true
1069- else (0 >= cD))
1088+ else (cH >= 0))
10701089 then throw("Invalid removeLiquidity params")
10711090 else {
1072- let cI = bG()
1073- let cJ = bH()
1091+ let cM = bH()
10741092 let cN = bI()
1075- let cO = bJ()
1076- let hl = aS(aU(cI, cN), aU(cJ, cO))
1077- let ht = aS(cD, hl)
1078- let hm = (cI - cD)
1079- let ho = (cJ - ht)
1080- gU(hm, ho)
1093+ let cR = bJ()
1094+ let cS = bK()
1095+ let hq = aT(aV(cM, cR), aV(cN, cS))
1096+ let hr = (cM - cH)
1097+ let hy = bc((aT(aV(hr, cR), hq) - cN))
1098+ let ht = (cN - hy)
1099+ let hz = fE(dE(), hr, ht)
1100+ let hv = hz._1
1101+ let hw = hz._2
1102+ let eQ = hz._3
1103+ let hx = if ((eQ != 0))
1104+ then {
1105+ let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1106+ if ((hx == hx))
1107+ then nil
1108+ else throw("Strict value is not equal to itself.")
1109+ }
1110+ else nil
1111+ if ((hx == hx))
1112+ then (gZ(hr, ht) ++ ha(hv, hw))
1113+ else throw("Strict value is not equal to itself.")
10811114 }
10821115
10831116
10841117
1085-@Callable(ch)
1086-func changeSettings (go,gp,gq,gr,gs,gt,gu,gv,gw,dV,gx,gy) = if ((ch.caller != an()))
1118+@Callable(ci)
1119+func changeSettings (gs,gt,gu,gv,gw,gx,gy,gz,gA,dZ,gB,gC) = if ((ci.caller != ao()))
10871120 then throw("Invalid changeSettings params")
1088- else gn(go, gp, gq, gr, gs, gt, gu, gv, gw, dV, gx, gy)
1089-
1090-
1091-
1092-@Callable(ch)
1093-func initialize (cI,cJ,gr,go,gp,gq,gs,hu,hv,hw,hx,gt,gu,gv,gw,dV,gx,gy) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cI))
1121+ else gr(gs, gt, gu, gv, gw, gx, gy, gz, gA, dZ, gB, gC)
1122+
1123+
1124+
1125+@Callable(ci)
1126+func initialize (cM,cN,gv,gs,gt,gu,gw,hA,hB,hC,hD,gx,gy,gz,gA,dZ,gB,gC) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cM))
10941127 then true
1095- else (0 >= cJ))
1128+ else (0 >= cN))
10961129 then true
1097- else (0 >= gr))
1098- then true
1099- else (0 >= go))
1100- then true
1101- else (0 >= gp))
1102- then true
1103- else (0 >= gq))
1130+ else (0 >= gv))
11041131 then true
11051132 else (0 >= gs))
11061133 then true
11071134 else (0 >= gt))
11081135 then true
11091136 else (0 >= gu))
11101137 then true
1111- else (0 >= gv))
1112- then true
11131138 else (0 >= gw))
1114- then true
1115- else (0 >= dV))
11161139 then true
11171140 else (0 >= gx))
11181141 then true
1119- else (gx > aL))
1120- then true
11211142 else (0 >= gy))
11221143 then true
1123- else cy())
1144+ else (0 >= gz))
1145+ then true
1146+ else (0 >= gA))
1147+ then true
1148+ else (0 >= dZ))
1149+ then true
1150+ else (0 >= gB))
1151+ then true
1152+ else (gB > aM))
1153+ then true
1154+ else (0 >= gC))
1155+ then true
1156+ else cC())
11241157 then throw("Invalid initialize parameters")
1125- else ((((gW(cI, cJ, 0, 0, 0, 0, 0, 0) ++ gn(go, gp, gq, gr, gs, gt, gu, gv, gw, dV, gx, gy)) ++ gz((lastBlock.timestamp + gr), 0, 0, 0, 0)) ++ hh(0)) ++ [BooleanEntry(m, true), StringEntry(d, hu), StringEntry(a, hv), StringEntry(b, hw), StringEntry(V, hx)])
1126-
1127-
1128-
1129-@Callable(ch)
1130-func decreasePosition (hf,hy,hz) = {
1131- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1132- if ((hA == hA))
1158+ else ((((hb(cM, cN, 0, 0, 0, 0, 0, 0) ++ gr(gs, gt, gu, gv, gw, gx, gy, gz, gA, dZ, gB, gC)) ++ gD((lastBlock.timestamp + gv), 0, 0, 0, 0)) ++ hm(0)) ++ [BooleanEntry(n, true), StringEntry(d, hA), StringEntry(a, hB), StringEntry(b, hC), StringEntry(W, hD)])
1159+
1160+
1161+
1162+@Callable(ci)
1163+func increasePosition (hE,hF,hG,hH) = {
1164+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1165+ if ((hI == hI))
11331166 then {
1134- let cq = cg(ch)
1135- if (if (if (if (if (if ((0 >= hf))
1136- then true
1137- else !(cy()))
1138- then true
1139- else !(ci(aS(aL, hy), bF(), true)))
1140- then true
1141- else !(cx(cq)))
1142- then true
1143- else cz())
1144- then true
1145- else dH())
1146- then throw("Invalid decreasePosition parameters")
1147- else {
1148- let hB = cp(cq)
1149- let fV = hB._1
1150- let hC = hB._2
1151- let hD = hB._3
1152- let hE = hB._4
1153- let hF = if ((fV > 0))
1154- then aG
1155- else aF
1156- let hG = (hF == aF)
1157- let hH = aU(hf, hy)
1158- let hI = em(cq, aO)
1159- let hJ = hI._1
1160- let el = hI._2
1161- let hK = if ((hJ > hH))
1162- then {
1163- let hL = cM(hG, hH)
1164- let eG = hL._1
1165- let cQ = hL._2
1166- let cR = hL._3
1167- let eO = hL._4
1168- let hM = bb(eG)
1169- if (if ((hz != 0))
1170- then (hz > hM)
1171- else false)
1172- then throw(((("Too little base asset exchanged, got " + toString(hM)) + " expected ") + toString(hz)))
1173- else {
1174- let eL = aS(aU(el, hM), bb(fV))
1175- let hN = dd(fV, hC, hE, eL)
1176- let dm = hN._1
1177- let dn = hN._2
1178- let eH = hH
1179- let hO = (el - eL)
1180- let hP = if ((fV > 0))
1181- then ((hJ - eH) - hO)
1182- else ((hO + hJ) - eH)
1183- let hQ = (fV + eG)
1184- $Tuple12(hQ, dm, bb(hP), cn(hQ), cR, cQ, eO, (bL() - hH), (cc() - (if ((hQ > 0))
1185- then bb(eG)
1186- else 0)), (cb() - (if ((0 > hQ))
1187- then bb(eG)
1188- else 0)), (bN() - (if ((hQ > 0))
1189- then hH
1190- else 0)), (bM() - (if ((0 > hQ))
1191- then hH
1192- else 0)))
1193- }
1194- }
1195- else throw("Close position first")
1196- let hQ = hK._1
1197- let hR = hK._2
1198- let hS = hK._3
1199- let hT = hK._4
1200- let cR = hK._5
1201- let cQ = hK._6
1202- let eO = hK._7
1203- let eR = hK._8
1204- let eP = hK._9
1205- let eQ = hK._10
1206- let hU = hK._11
1207- let hV = hK._12
1208- let hW = invoke(at(), "notifyNotional", [cq, hS], nil)
1209- if ((hW == hW))
1210- then (gJ(cq, hQ, hR, hS, hT) ++ gW(cQ, cR, eO, eR, eP, eQ, hU, hV))
1211- else throw("Strict value is not equal to itself.")
1212- }
1213- }
1214- else throw("Strict value is not equal to itself.")
1215- }
1216-
1217-
1218-
1219-@Callable(ch)
1220-func increasePosition (hF,hy,hz,hX) = {
1221- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1222- if ((hA == hA))
1223- then {
1224- let cq = cg(ch)
1225- let hY = ch.payments[0].amount
1226- let aB = ch.payments[0].assetId
1227- let hZ = toBase58String(value(aB))
1228- let ia = (aB == ap())
1229- let ib = aA(hZ)
1230- if (if (if (if (if (if (if (if (if (if ((hF != aF))
1231- then (hF != aG)
1167+ let cr = ch(ci)
1168+ let hJ = ci.payments[0].amount
1169+ let aC = ci.payments[0].assetId
1170+ let hK = toBase58String(value(aC))
1171+ let hL = (aC == aq())
1172+ let hM = aB(hK)
1173+ if (if (if (if (if (if (if (if (if (if ((hE != aG))
1174+ then (hE != aH)
12321175 else false)
12331176 then true
1234- else (0 >= hY))
1235- then true
1236- else !(cy()))
1237- then true
1238- else if (!(ia))
1239- then !(ib)
1177+ else (0 >= hJ))
1178+ then true
1179+ else !(cC()))
1180+ then true
1181+ else if (!(hL))
1182+ then !(hM)
12401183 else false)
12411184 then true
1242- else !(fU(cq, hZ)))
1243- then true
1244- else !(ci(aS(aL, hy), bF(), true)))
1245- then true
1246- else cz())
1247- then true
1248- else cA())
1249- then true
1250- else dH())
1185+ else !(fY(cr, hK)))
1186+ then true
1187+ else !(cj(aT(aM, hF), bG(), true)))
1188+ then true
1189+ else cD())
1190+ then true
1191+ else cE())
1192+ then true
1193+ else dL())
12511194 then throw("Invalid increasePosition parameters")
12521195 else {
1253- let ic = gc(cq, gh(ch))
1254- let fS = ic._1
1255- let fT = ic._2
1256- let id = aU(hY, fS)
1257- let hf = (hY - id)
1258- let ie = if (ib)
1196+ let hN = gg(cr, gl(ci))
1197+ let fW = hN._1
1198+ let fX = hN._2
1199+ let hk = aT(hJ, (aV(fW, hF) + aM))
1200+ let hO = (hJ - hk)
1201+ let hP = if (hM)
12591202 then {
1260- let if = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hf)])
1261- if ((if == if))
1203+ let hQ = invoke(ay(), "borrow", [cr], [AttachedPayment(aC, hk)])
1204+ if ((hQ == hQ))
12621205 then {
1263- let ig = assetBalance(this, ap())
1264- if ((ig == ig))
1206+ let hR = assetBalance(this, aq())
1207+ if ((hR == hR))
12651208 then {
1266- let ih = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, id)])
1267- if ((ih == ih))
1209+ let hS = invoke(az(), "swap", [toBase58String(aq()), 0], [AttachedPayment(aC, hO)])
1210+ if ((hS == hS))
12681211 then {
1269- let ii = assetBalance(this, ap())
1270- if ((ii == ii))
1212+ let hT = assetBalance(this, aq())
1213+ if ((hT == hT))
12711214 then {
1272- let ij = (ii - ig)
1273- if ((ij == ij))
1274- then ij
1215+ let hU = (hT - hR)
1216+ if ((hU == hU))
1217+ then hU
12751218 else throw("Strict value is not equal to itself.")
12761219 }
12771220 else throw("Strict value is not equal to itself.")
12781221 }
12791222 else throw("Strict value is not equal to itself.")
12801223 }
12811224 else throw("Strict value is not equal to itself.")
12821225 }
12831226 else throw("Strict value is not equal to itself.")
12841227 }
1285- else id
1286- if ((ie == ie))
1228+ else hO
1229+ if ((hP == hP))
12871230 then {
1288- let ik = invoke(av(), "acceptPaymentWithLink", [cq, hX], [AttachedPayment(ap(), ie)])
1289- if ((ik == ik))
1231+ let hV = invoke(aw(), "acceptPaymentWithLink", [cr, hH], [AttachedPayment(aq(), hP)])
1232+ if ((hV == hV))
12901233 then {
1291- let il = {
1292- let cs = ik
1293- if ($isInstanceOf(cs, "Int"))
1234+ let hW = {
1235+ let ct = hV
1236+ if ($isInstanceOf(ct, "Int"))
12941237 then {
1295- let gf = cs
1296- gf
1238+ let gj = ct
1239+ gj
12971240 }
12981241 else throw("Invalid referrerFee")
12991242 }
1300- let im = (ie - il)
1301- let in = cp(cq)
1302- let fV = in._1
1303- let hC = in._2
1304- let hD = in._3
1305- let hE = in._4
1306- let gH = (fV == 0)
1307- let io = if ((fV > 0))
1308- then (hF == aF)
1309- else (hF == aG)
1310- let ip = if (!(gH))
1311- then io
1243+ let hX = (hP - hW)
1244+ let hY = cq(cr)
1245+ let fZ = hY._1
1246+ let hZ = hY._2
1247+ let ia = hY._3
1248+ let ib = hY._4
1249+ let ic = (fZ == 0)
1250+ let id = if ((fZ > 0))
1251+ then (hE == aG)
1252+ else (hE == aH)
1253+ let ie = if (!(ic))
1254+ then id
13121255 else false
1313- let hG = (hF == aF)
1314- let iq = if (if (gH)
1256+ let if = (hE == aG)
1257+ let ig = if (if (ic)
13151258 then true
1316- else ip)
1259+ else ie)
13171260 then {
1318- let hH = aU(hf, hy)
1319- let ir = cM(hG, hH)
1320- let cT = ir._1
1321- let cQ = ir._2
1322- let cR = ir._3
1323- let eO = ir._4
1324- if (if ((hz != 0))
1325- then (hz > bb(cT))
1261+ let ih = aV(hk, hF)
1262+ let ii = cQ(if, ih)
1263+ let cX = ii._1
1264+ let cU = ii._2
1265+ let cV = ii._3
1266+ let eS = ii._4
1267+ if (if ((hG != 0))
1268+ then (hG > bc(cX))
13261269 else false)
1327- then throw(((("Limit error: " + toString(bb(cT))) + " < ") + toString(hz)))
1270+ then throw(((("Limit error: " + toString(bc(cX))) + " < ") + toString(hG)))
13281271 else {
1329- let hQ = (fV + cT)
1330- let hU = (bN() + (if ((hQ > 0))
1331- then hH
1272+ let ij = (fZ + cX)
1273+ let ik = (bO() + (if ((ij > 0))
1274+ then ih
13321275 else 0))
1333- let hV = (bM() + (if ((0 > hQ))
1334- then hH
1276+ let il = (bN() + (if ((0 > ij))
1277+ then ih
13351278 else 0))
1336- let is = dd(fV, hC, hE, hf)
1337- let dm = is._1
1338- let eg = is._2
1339- let eh = is._3
1340- if (!(dO(cQ, cR)))
1279+ let im = dh(fZ, hZ, ib, hk)
1280+ let dq = im._1
1281+ let ek = im._2
1282+ let el = im._3
1283+ if (!(dS(cU, cV)))
13411284 then throw("Over max spread limit")
1342- else if (!(dS(hU, hV)))
1285+ else if (!(dW(ik, il)))
13431286 then throw("Over max open notional")
1344- else $Tuple12(hQ, dm, (hD + hH), cn(hQ), cR, cQ, eO, (bL() + hH), (cc() + (if ((hQ > 0))
1345- then bb(cT)
1346- else 0)), (cb() + (if ((0 > hQ))
1347- then bb(cT)
1348- else 0)), hU, hV)
1287+ else $Tuple12(ij, dq, (ia + ih), co(ij), cV, cU, eS, (bM() + ih), (cd() + (if ((ij > 0))
1288+ then bc(cX)
1289+ else 0)), (cc() + (if ((0 > ij))
1290+ then bc(cX)
1291+ else 0)), ik, il)
13491292 }
13501293 }
13511294 else {
1352- let hH = aU(hf, hy)
1353- let it = em(toString(ch.caller), aO)
1354- let hJ = it._1
1355- let el = it._2
1356- if ((hJ > hH))
1295+ let ih = aV(hk, hF)
1296+ let in = eq(toString(ci.caller), aP)
1297+ let io = in._1
1298+ let ep = in._2
1299+ if ((io > ih))
13571300 then throw("Use decreasePosition to decrease position size")
13581301 else throw("Close position first")
13591302 }
1360- let hQ = iq._1
1361- let hR = iq._2
1362- let hS = iq._3
1363- let hT = iq._4
1364- let cR = iq._5
1365- let cQ = iq._6
1366- let eO = iq._7
1367- let eR = iq._8
1368- let eP = iq._9
1369- let eQ = iq._10
1370- let hU = iq._11
1371- let hV = iq._12
1372- let iu = gj(im)
1373- let gl = iu._1
1374- let gm = iu._2
1375- let iv = if (ia)
1303+ let ij = ig._1
1304+ let ip = ig._2
1305+ let iq = ig._3
1306+ let ir = ig._4
1307+ let cV = ig._5
1308+ let cU = ig._6
1309+ let eS = ig._7
1310+ let eV = ig._8
1311+ let eT = ig._9
1312+ let eU = ig._10
1313+ let ik = ig._11
1314+ let il = ig._12
1315+ let is = gn(hX)
1316+ let gp = is._1
1317+ let gq = is._2
1318+ let it = if (hL)
13761319 then {
1377- let iv = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hf)])
1378- if ((iv == iv))
1320+ let it = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hk)])
1321+ if ((it == it))
13791322 then nil
13801323 else throw("Strict value is not equal to itself.")
13811324 }
13821325 else nil
1383- if ((iv == iv))
1326+ if ((it == it))
13841327 then {
1385- let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1386- if ((iw == iw))
1328+ let iu = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1329+ if ((iu == iu))
13871330 then {
1388- let ix = invoke(at(), "notifyFees", [cq, im], nil)
1389- if ((ix == ix))
1331+ let iv = invoke(au(), "notifyFees", [cr, hX], nil)
1332+ if ((iv == iv))
13901333 then {
1391- let hW = invoke(at(), "notifyNotional", [cq, hS], nil)
1392- if ((hW == hW))
1393- then ((((((gJ(cq, hQ, hR, hS, hT) ++ gG(gH, cq)) ++ gF(cq, hZ)) ++ gW(cQ, cR, eO, eR, eP, eQ, hU, hV)) ++ hi(gl)) ++ hh((bD() + hf))) ++ hj(fT, ch))
1334+ let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1335+ if ((iw == iw))
1336+ then (((((((gO(cr, ij, ip, iq, ir) ++ gK(ic, cr)) ++ gN(ic, cr, fW)) ++ gJ(cr, hK)) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hn(gp)) ++ hm((bE() + hk))) ++ ho(fX, ci))
13941337 else throw("Strict value is not equal to itself.")
13951338 }
13961339 else throw("Strict value is not equal to itself.")
13971340 }
13981341 else throw("Strict value is not equal to itself.")
13991342 }
14001343 else throw("Strict value is not equal to itself.")
14011344 }
14021345 else throw("Strict value is not equal to itself.")
14031346 }
14041347 else throw("Strict value is not equal to itself.")
14051348 }
14061349 }
14071350 else throw("Strict value is not equal to itself.")
14081351 }
14091352
14101353
14111354
1412-@Callable(ch)
1355+@Callable(ci)
14131356 func addMargin () = {
1414- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1415- if ((hA == hA))
1357+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1358+ if ((hI == hI))
14161359 then {
1417- let cq = toString(ch.caller)
1418- let hY = ch.payments[0].amount
1419- let aB = ch.payments[0].assetId
1420- let hZ = toBase58String(value(aB))
1421- let ia = (aB == ap())
1422- let ib = aA(hZ)
1423- if (if (if (if (if (if (if (if (!(ia))
1424- then !(ib)
1360+ let cr = toString(ci.caller)
1361+ let hk = ci.payments[0].amount
1362+ let aC = ci.payments[0].assetId
1363+ let hK = toBase58String(value(aC))
1364+ let hL = (aC == aq())
1365+ let hM = aB(hK)
1366+ if (if (if (if (if (if (if (if (!(hL))
1367+ then !(hM)
14251368 else false)
14261369 then true
1427- else !(cx(toString(ch.caller))))
1428- then true
1429- else !(fW(cq, hZ)))
1430- then true
1431- else !(cy()))
1432- then true
1433- else cz())
1434- then true
1435- else cA())
1436- then true
1437- else dH())
1370+ else !(cB(toString(ci.caller))))
1371+ then true
1372+ else !(ga(cr, hK)))
1373+ then true
1374+ else !(cC()))
1375+ then true
1376+ else cD())
1377+ then true
1378+ else cE())
1379+ then true
1380+ else dL())
14381381 then throw("Invalid addMargin parameters")
14391382 else {
1440- let iy = gc(cq, gh(ch))
1441- let fS = iy._1
1442- let fT = iy._2
1443- let id = aU(hY, fS)
1444- let hf = (hY - id)
1445- let ie = if (ib)
1383+ let ix = cq(cr)
1384+ let fZ = ix._1
1385+ let hZ = ix._2
1386+ let ia = ix._3
1387+ let ib = ix._4
1388+ let it = if (hL)
14461389 then {
1447- let if = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hf)])
1448- if ((if == if))
1390+ let it = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hk)])
1391+ if ((it == it))
1392+ then nil
1393+ else throw("Strict value is not equal to itself.")
1394+ }
1395+ else nil
1396+ if ((it == it))
1397+ then (gO(cr, fZ, (hZ + hk), ia, ib) ++ hm((bE() + hk)))
1398+ else throw("Strict value is not equal to itself.")
1399+ }
1400+ }
1401+ else throw("Strict value is not equal to itself.")
1402+ }
1403+
1404+
1405+
1406+@Callable(ci)
1407+func removeMargin (hk) = {
1408+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1409+ if ((hI == hI))
1410+ then {
1411+ let cr = toString(ci.caller)
1412+ if (if (if (if (if ((0 >= hk))
1413+ then true
1414+ else !(cB(cr)))
1415+ then true
1416+ else !(cC()))
1417+ then true
1418+ else cD())
1419+ then true
1420+ else dL())
1421+ then throw("Invalid removeMargin parameters")
1422+ else {
1423+ let iy = cq(cr)
1424+ let fZ = iy._1
1425+ let hZ = iy._2
1426+ let ia = iy._3
1427+ let ib = iy._4
1428+ let iz = -(hk)
1429+ let iA = dh(fZ, hZ, ib, iz)
1430+ let dq = iA._1
1431+ let dr = iA._2
1432+ if ((dr != 0))
1433+ then throw("Invalid removed margin amount")
1434+ else {
1435+ let iB = ev(dq, dr, ia)
1436+ if (!(cj(iB, bG(), true)))
1437+ then throw(((("Too much margin removed: " + toString(iB)) + " < ") + toString(bG())))
1438+ else {
1439+ let iC = toBase58String(aq())
1440+ let iD = gd(cr)
1441+ let iE = iD._1
1442+ let iF = iD._2
1443+ let iG = if ((hk > iE))
1444+ then iE
1445+ else hk
1446+ let iH = if ((iE > hk))
1447+ then 0
1448+ else (hk - iE)
1449+ let iI = (iE - iG)
1450+ let iJ = if ((iI > 0))
1451+ then nil
1452+ else gJ(cr, iC)
1453+ let iK = if (((iG + iH) != hk))
1454+ then throw(((((("toRepay=" + toString(iG)) + " + toWithdraw=") + toString(iH)) + " != ") + toString(hk)))
1455+ else nil
1456+ if ((iK == iK))
1457+ then {
1458+ let iL = if ((iH > 0))
1459+ then {
1460+ let iL = invoke(at(), "withdrawLocked", [iH], nil)
1461+ if ((iL == iL))
1462+ then nil
1463+ else throw("Strict value is not equal to itself.")
1464+ }
1465+ else nil
1466+ if ((iL == iL))
1467+ then {
1468+ let iM = if ((iG > 0))
1469+ then {
1470+ let iN = invoke(ay(), "repay", [cr, iG, iF], nil)
1471+ if ((iN == iN))
1472+ then [ScriptTransfer(ci.caller, iG, fromBase58String(iF))]
1473+ else throw("Strict value is not equal to itself.")
1474+ }
1475+ else nil
1476+ if ((iM == iM))
1477+ then ((((gO(cr, fZ, dq, ia, co(fZ)) ++ (if ((iH > 0))
1478+ then hj(ci.caller, iH)
1479+ else nil)) ++ hm((bE() - hk))) ++ iJ) ++ iM)
1480+ else throw("Strict value is not equal to itself.")
1481+ }
1482+ else throw("Strict value is not equal to itself.")
1483+ }
1484+ else throw("Strict value is not equal to itself.")
1485+ }
1486+ }
1487+ }
1488+ }
1489+ else throw("Strict value is not equal to itself.")
1490+ }
1491+
1492+
1493+
1494+@Callable(ci)
1495+func closePosition (gP,iO,iP) = {
1496+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1497+ if ((hI == hI))
1498+ then {
1499+ let cr = ch(ci)
1500+ let iQ = valueOrErrorMessage(addressFromString(cr), "Invalid caller")
1501+ let cA = cy(cr)
1502+ if (if (if (if (if (if (!(cB(cr)))
1503+ then true
1504+ else !(cC()))
1505+ then true
1506+ else cD())
1507+ then true
1508+ else (0 >= gP))
1509+ then true
1510+ else (0 > iO))
1511+ then true
1512+ else dL())
1513+ then throw("Invalid closePosition parameters")
1514+ else {
1515+ let iR = cq(cr)
1516+ let fZ = iR._1
1517+ let hZ = iR._2
1518+ let ia = iR._3
1519+ let ib = iR._4
1520+ let iS = if ((bc(fZ) > gP))
1521+ then {
1522+ let hE = if ((fZ > 0))
1523+ then aH
1524+ else aG
1525+ let if = (hE == aG)
1526+ let iT = dD((fZ > 0), gP, true)
1527+ let eL = iT._1
1528+ let cU = iT._2
1529+ let cV = iT._3
1530+ let eS = iT._4
1531+ let eK = if ((fZ > 0))
1532+ then -(gP)
1533+ else gP
1534+ let iU = eq(cr, aP)
1535+ let io = iU._1
1536+ let ep = iU._2
1537+ let iV = ez(cr, aP)
1538+ let iW = aT(bc(eK), bc(fZ))
1539+ let eP = aV(ep, iW)
1540+ let iX = aV(aV(io, iW), cA)
1541+ let iY = dh(fZ, hZ, ib, ep)._1
1542+ let iZ = dh(fZ, hZ, ib, eP)._2
1543+ let ja = (ep - eP)
1544+ let jb = if ((fZ > 0))
1545+ then ((io - eL) - ja)
1546+ else ((ja + io) - eL)
1547+ let iq = bc(jb)
1548+ let ij = (fZ + eK)
1549+ let jc = co(ij)
1550+ let jd = (ia - iq)
1551+ let eV = (bM() - jd)
1552+ let je = if ((fZ > 0))
1553+ then (aV((iq + ja), iV) - ja)
1554+ else (aV((iq - ja), iV) - ja)
1555+ let jf = ((iY - (je + ja)) - iX)
1556+ let jg = if ((0 > jf))
1557+ then throw("Margin error: unable to pay close fee")
1558+ else jf
1559+ if (if ((iO != 0))
1560+ then (iO > eL)
1561+ else false)
1562+ then throw(((("Limit error: " + toString(eL)) + " < ") + toString(iO)))
1563+ else $Tuple16(ij, if (iP)
1564+ then (je + jg)
1565+ else je, iq, jc, iZ, eP, if (iP)
1566+ then 0
1567+ else jg, cU, cV, eS, eV, (cd() - (if ((ij > 0))
1568+ then bc(eK)
1569+ else 0)), (cc() - (if ((0 > ij))
1570+ then bc(eK)
1571+ else 0)), (bO() - (if ((ij > 0))
1572+ then jd
1573+ else 0)), (bN() - (if ((0 > ij))
1574+ then jd
1575+ else 0)), iX)
1576+ }
1577+ else if ((gP > bc(fZ)))
1578+ then throw("Invalid closePosition parameters")
1579+ else {
1580+ let jh = eM(cr, true)
1581+ let el = jh._1
1582+ let iZ = jh._2
1583+ let eP = jh._3
1584+ let ji = jh._4
1585+ let cU = jh._5
1586+ let cV = jh._6
1587+ let eS = jh._7
1588+ let eV = jh._8
1589+ let eL = jh._9
1590+ let eT = jh._10
1591+ let eU = jh._11
1592+ let ik = jh._12
1593+ let il = jh._13
1594+ let iX = aV(eL, cA)
1595+ let jf = (bc(ji) - iX)
1596+ let jg = if ((0 > jf))
1597+ then throw(((((((("Margin error: unable to pay close fee: " + toString(iX)) + " margin: ") + toString(ji)) + " fee percent: ") + toString(cA)) + " notional: ") + toString(eL)))
1598+ else jf
1599+ if (if ((iO != 0))
1600+ then (iO > eL)
1601+ else false)
1602+ then throw(((("Limit error: " + toString(eL)) + " < ") + toString(iO)))
1603+ else $Tuple16(0, 0, 0, 0, iZ, eP, jg, cU, cV, eS, eV, eT, eU, ik, il, iX)
1604+ }
1605+ let ij = iS._1
1606+ let je = iS._2
1607+ let iq = iS._3
1608+ let jc = iS._4
1609+ let iZ = iS._5
1610+ let eP = iS._6
1611+ let jg = iS._7
1612+ let cU = iS._8
1613+ let cV = iS._9
1614+ let eS = iS._10
1615+ let eV = iS._11
1616+ let eT = iS._12
1617+ let eU = iS._13
1618+ let ik = iS._14
1619+ let il = iS._15
1620+ let iX = iS._16
1621+ if ((iZ > 0))
1622+ then throw("Unable to close position with bad debt")
1623+ else {
1624+ let jj = (ij != 0)
1625+ let jk = (jg + iX)
1626+ let jl = (bE() - jk)
1627+ let jm = if ((0 > jl))
1628+ then $Tuple2(0, bc(jl))
1629+ else $Tuple2(jl, 0)
1630+ let jn = jm._1
1631+ let jo = jm._2
1632+ let jp = gd(cr)
1633+ let iE = jp._1
1634+ let iF = jp._2
1635+ let jq = if ((iE > 0))
1636+ then if ((jk >= iE))
1637+ then {
1638+ let iN = invoke(ay(), "repay", [cr, iE, iF], nil)
1639+ if ((iN == iN))
1640+ then $Tuple3(iE, (jk - iE), jj)
1641+ else throw("Strict value is not equal to itself.")
1642+ }
1643+ else {
1644+ let jr = invoke(ay(), if (jj)
1645+ then "repay"
1646+ else "realizePartiallyAndClose", [cr, jk, iF], nil)
1647+ if ((jr == jr))
1648+ then $Tuple3(jk, 0, false)
1649+ else throw("Strict value is not equal to itself.")
1650+ }
1651+ else $Tuple3(0, jk, false)
1652+ if ((jq == jq))
14491653 then {
1450- let ig = assetBalance(this, ap())
1451- if ((ig == ig))
1654+ let js = jq._3
1655+ let jt = jq._2
1656+ let ju = jq._1
1657+ let jv = if ((jt >= iX))
1658+ then $Tuple3(ju, (jt - iX), iX)
1659+ else {
1660+ let jw = (iX - jt)
1661+ let jx = (ju - jw)
1662+ let hR = assetBalance(this, aq())
1663+ if ((hR == hR))
1664+ then {
1665+ let hS = invoke(az(), "swap", [toBase58String(aq()), 0], [AttachedPayment(fromBase58String(iF), jw)])
1666+ if ((hS == hS))
1667+ then {
1668+ let hT = assetBalance(this, aq())
1669+ if ((hT == hT))
1670+ then {
1671+ let hU = (hT - hR)
1672+ if ((hU == hU))
1673+ then $Tuple3(jx, 0, (jt + hU))
1674+ else throw("Strict value is not equal to itself.")
1675+ }
1676+ else throw("Strict value is not equal to itself.")
1677+ }
1678+ else throw("Strict value is not equal to itself.")
1679+ }
1680+ else throw("Strict value is not equal to itself.")
1681+ }
1682+ if ((jv == jv))
14521683 then {
1453- let ih = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, id)])
1454- if ((ih == ih))
1684+ let jy = jv._3
1685+ let jz = jv._2
1686+ let jx = jv._1
1687+ let jA = if ((jt > 0))
14551688 then {
1456- let ii = assetBalance(this, ap())
1457- if ((ii == ii))
1689+ let jA = invoke(at(), "withdrawLocked", [jt], nil)
1690+ if ((jA == jA))
1691+ then nil
1692+ else throw("Strict value is not equal to itself.")
1693+ }
1694+ else nil
1695+ if ((jA == jA))
1696+ then {
1697+ let jB = gn(jy)
1698+ let gp = jB._1
1699+ let gq = jB._2
1700+ let iu = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1701+ if ((iu == iu))
14581702 then {
1459- let ij = (ii - ig)
1460- if ((ij == ij))
1461- then ij
1703+ let iv = invoke(au(), "notifyFees", [cr, iX], nil)
1704+ if ((iv == iv))
1705+ then {
1706+ let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1707+ if ((iw == iw))
1708+ then (((((((if (jj)
1709+ then gO(cr, ij, je, iq, jc)
1710+ else hi(cr)) ++ (if (js)
1711+ then {
1712+ let iC = toBase58String(aq())
1713+ gJ(cr, iC)
1714+ }
1715+ else nil)) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hn(gp)) ++ (if ((jz > 0))
1716+ then hj(iQ, jz)
1717+ else nil)) ++ hm(jn)) ++ (if ((jx > 0))
1718+ then [ScriptTransfer(iQ, jx, fromBase58String(iF))]
1719+ else nil))
1720+ else throw("Strict value is not equal to itself.")
1721+ }
14621722 else throw("Strict value is not equal to itself.")
14631723 }
14641724 else throw("Strict value is not equal to itself.")
14651725 }
14661726 else throw("Strict value is not equal to itself.")
14671727 }
14681728 else throw("Strict value is not equal to itself.")
14691729 }
14701730 else throw("Strict value is not equal to itself.")
14711731 }
1472- else id
1473- if ((ie == ie))
1474- then {
1475- let ik = invoke(av(), "acceptPayment", [cq], [AttachedPayment(ap(), ie)])
1476- if ((ik == ik))
1477- then {
1478- let il = {
1479- let cs = ik
1480- if ($isInstanceOf(cs, "Int"))
1481- then {
1482- let gf = cs
1483- gf
1484- }
1485- else throw("Invalid referrerFee")
1486- }
1487- let im = (ie - il)
1488- let iz = cp(cq)
1489- let fV = iz._1
1490- let hC = iz._2
1491- let hD = iz._3
1492- let hE = iz._4
1493- let iA = gj(im)
1494- let gl = iA._1
1495- let gm = iA._2
1496- let iv = if (ia)
1497- then {
1498- let iv = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hf)])
1499- if ((iv == iv))
1500- then nil
1501- else throw("Strict value is not equal to itself.")
1502- }
1503- else nil
1504- if ((iv == iv))
1505- then {
1506- let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1507- if ((iw == iw))
1508- then {
1509- let ix = invoke(at(), "notifyFees", [cq, im], nil)
1510- if ((ix == ix))
1511- then (((gJ(cq, fV, (hC + hf), hD, hE) ++ hi(gl)) ++ hh((bD() + hf))) ++ hj(fT, ch))
1512- else throw("Strict value is not equal to itself.")
1513- }
1514- else throw("Strict value is not equal to itself.")
1515- }
1516- else throw("Strict value is not equal to itself.")
1517- }
1518- else throw("Strict value is not equal to itself.")
1519- }
1520- else throw("Strict value is not equal to itself.")
15211732 }
15221733 }
15231734 else throw("Strict value is not equal to itself.")
15241735 }
15251736
15261737
15271738
1528-@Callable(ch)
1529-func removeMargin (hf) = {
1530- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1531- if ((hA == hA))
1739+@Callable(ci)
1740+func liquidate (cr) = {
1741+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1742+ if ((hI == hI))
15321743 then {
1533- let cq = toString(ch.caller)
1534- if (if (if (if (if ((0 >= hf))
1535- then true
1536- else !(cx(cq)))
1537- then true
1538- else !(cy()))
1539- then true
1540- else cz())
1541- then true
1542- else dH())
1543- then throw("Invalid removeMargin parameters")
1544- else {
1545- let iB = cp(cq)
1546- let fV = iB._1
1547- let hC = iB._2
1548- let hD = iB._3
1549- let hE = iB._4
1550- let iC = -(hf)
1551- let iD = dd(fV, hC, hE, iC)
1552- let dm = iD._1
1553- let dn = iD._2
1554- if ((dn != 0))
1555- then throw("Invalid removed margin amount")
1556- else {
1557- let iE = er(dm, dn, hD)
1558- if (!(ci(iE, bF(), true)))
1559- then throw(((("Too much margin removed: " + toString(iE)) + " < ") + toString(bF())))
1560- else {
1561- let iF = toBase58String(ap())
1562- let iG = fZ(cq)
1563- let iH = iG._1
1564- let iI = iG._2
1565- let iJ = if ((hf > iH))
1566- then iH
1567- else hf
1568- let iK = if ((iH > hf))
1569- then 0
1570- else (hf - iH)
1571- let iL = (iH - iJ)
1572- let iM = if ((iL > 0))
1573- then nil
1574- else gF(cq, iF)
1575- let iN = if (((iJ + iK) != hf))
1576- then throw(((((("toRepay=" + toString(iJ)) + " + toWithdraw=") + toString(iK)) + " != ") + toString(hf)))
1577- else nil
1578- if ((iN == iN))
1579- then {
1580- let iO = if ((iK > 0))
1581- then {
1582- let iO = invoke(as(), "withdrawLocked", [iK], nil)
1583- if ((iO == iO))
1584- then nil
1585- else throw("Strict value is not equal to itself.")
1586- }
1587- else nil
1588- if ((iO == iO))
1589- then {
1590- let iP = if ((iJ > 0))
1591- then {
1592- let iQ = invoke(ax(), "repay", [cq, iJ, iI], nil)
1593- if ((iQ == iQ))
1594- then [ScriptTransfer(ch.caller, iJ, fromBase58String(iI))]
1595- else throw("Strict value is not equal to itself.")
1596- }
1597- else nil
1598- if ((iP == iP))
1599- then ((((gJ(cq, fV, dm, hD, cn(fV)) ++ (if ((iK > 0))
1600- then he(ch.caller, iK)
1601- else nil)) ++ hh((bD() - hf))) ++ iM) ++ iP)
1602- else throw("Strict value is not equal to itself.")
1603- }
1604- else throw("Strict value is not equal to itself.")
1605- }
1606- else throw("Strict value is not equal to itself.")
1607- }
1608- }
1744+ let jC = ez(cr, aP)
1745+ let iB = if (eb())
1746+ then {
1747+ let jD = ez(cr, aQ)
1748+ bd(jC, jD)
16091749 }
1610- }
1611- else throw("Strict value is not equal to itself.")
1612- }
1613-
1614-
1615-
1616-@Callable(ch)
1617-func closePosition (gK,iR) = {
1618- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1619- if ((hA == hA))
1620- then {
1621- let cq = cg(ch)
1622- let iS = valueOrErrorMessage(addressFromString(cq), "Invalid caller")
1623- if (if (if (if (if (if (!(cx(cq)))
1624- then true
1625- else !(cy()))
1626- then true
1627- else cz())
1628- then true
1629- else (0 >= gK))
1630- then true
1631- else (0 > iR))
1632- then true
1633- else dH())
1634- then throw("Invalid closePosition parameters")
1635- else {
1636- let iT = cp(cq)
1637- let fV = iT._1
1638- let hC = iT._2
1639- let hD = iT._3
1640- let hE = iT._4
1641- let iU = if ((bb(fV) > gK))
1642- then {
1643- let hF = if ((fV > 0))
1644- then aG
1645- else aF
1646- let hG = (hF == aF)
1647- let iV = dz((fV > 0), gK, true)
1648- let eH = iV._1
1649- let cQ = iV._2
1650- let cR = iV._3
1651- let eO = iV._4
1652- let eG = if ((fV > 0))
1653- then -(gK)
1654- else gK
1655- let iW = em(cq, aO)
1656- let hJ = iW._1
1657- let el = iW._2
1658- let iX = ev(cq, aO)
1659- let iY = aS(bb(eG), bb(fV))
1660- let eL = aU(el, iY)
1661- let iZ = dd(fV, hC, hE, el)._1
1662- let ja = dd(fV, hC, hE, eL)
1663- let eg = ja._1
1664- let jb = ja._2
1665- let di = ja._3
1666- let hO = (el - eL)
1667- let hP = if ((fV > 0))
1668- then ((hJ - eH) - hO)
1669- else ((hO + hJ) - eH)
1670- let hS = bb(hP)
1671- let jc = if ((fV > 0))
1672- then (aU((hS + hO), iX) - hO)
1673- else (aU((hS - hO), iX) - hO)
1674- let jd = (hD - hS)
1675- let hQ = (fV + eG)
1676- let je = cn(hQ)
1677- let eR = (bL() - jd)
1678- if (if ((iR != 0))
1679- then (iR > eH)
1680- else false)
1681- then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iR)))
1682- else $Tuple15(hQ, jc, hS, je, jb, eL, (iZ - (jc + hO)), cQ, cR, eO, eR, (cc() - (if ((hQ > 0))
1683- then bb(eG)
1684- else 0)), (cb() - (if ((0 > hQ))
1685- then bb(eG)
1686- else 0)), (bN() - (if ((hQ > 0))
1687- then jd
1688- else 0)), (bM() - (if ((0 > hQ))
1689- then jd
1690- else 0)))
1691- }
1692- else if ((gK > bb(fV)))
1693- then throw("Invalid closePosition parameters")
1694- else {
1695- let jf = eI(cq, true)
1696- let eH = jf._1
1697- let jb = jf._2
1698- let eL = jf._3
1699- let eM = jf._4
1700- let cQ = jf._5
1701- let cR = jf._6
1702- let eO = jf._7
1703- let eR = jf._8
1704- let eh = jf._9
1705- let eP = jf._10
1706- let eQ = jf._11
1707- let hU = jf._12
1708- let hV = jf._13
1709- if (if ((iR != 0))
1710- then (iR > eH)
1711- else false)
1712- then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iR)))
1713- else $Tuple15(0, 0, 0, 0, jb, eL, eM, cQ, cR, eO, eR, eP, eQ, hU, hV)
1714- }
1715- let hQ = iU._1
1716- let jc = iU._2
1717- let hS = iU._3
1718- let je = iU._4
1719- let jb = iU._5
1720- let eL = iU._6
1721- let eM = iU._7
1722- let cQ = iU._8
1723- let cR = iU._9
1724- let eO = iU._10
1725- let eR = iU._11
1726- let eP = iU._12
1727- let eQ = iU._13
1728- let hU = iU._14
1729- let hV = iU._15
1730- if ((jb > 0))
1731- then throw("Unable to close position with bad debt")
1732- else {
1733- let jg = bb(eM)
1734- let jh = (bD() - jg)
1735- let ji = if ((0 > jh))
1736- then $Tuple2(0, bb(jh))
1737- else $Tuple2(jh, 0)
1738- let jj = ji._1
1739- let jk = ji._2
1740- let jl = fZ(cq)
1741- let iH = jl._1
1742- let iI = jl._2
1743- let jm = if ((iH > 0))
1744- then if ((jg >= iH))
1745- then {
1746- let iQ = invoke(ax(), "repay", [cq, iH, iI], nil)
1747- if ((iQ == iQ))
1748- then $Tuple2([ScriptTransfer(iS, iH, fromBase58String(iI))], (jg - iH))
1749- else throw("Strict value is not equal to itself.")
1750- }
1751- else {
1752- let jn = invoke(ax(), "realizePartiallyAndClose", [cq, jg, iI], nil)
1753- if ((jn == jn))
1754- then $Tuple2([ScriptTransfer(iS, jg, fromBase58String(iI))], 0)
1755- else throw("Strict value is not equal to itself.")
1756- }
1757- else $Tuple2(nil, jg)
1758- if ((jm == jm))
1759- then {
1760- let jo = jm._2
1761- let jp = jm._1
1762- let jq = if ((jo > 0))
1763- then {
1764- let jq = invoke(as(), "withdrawLocked", [jo], nil)
1765- if ((jq == jq))
1766- then nil
1767- else throw("Strict value is not equal to itself.")
1768- }
1769- else nil
1770- if ((jq == jq))
1771- then {
1772- let hW = invoke(at(), "notifyNotional", [cq, 0], nil)
1773- if ((hW == hW))
1774- then (((((if ((hQ == 0))
1775- then hd(cq)
1776- else gJ(cq, hQ, jc, hS, je)) ++ gW(cQ, cR, eO, eR, eP, eQ, hU, hV)) ++ (if ((jo > 0))
1777- then he(iS, jo)
1778- else nil)) ++ hh(jj)) ++ jp)
1779- else throw("Strict value is not equal to itself.")
1780- }
1781- else throw("Strict value is not equal to itself.")
1782- }
1783- else throw("Strict value is not equal to itself.")
1784- }
1785- }
1786- }
1787- else throw("Strict value is not equal to itself.")
1788- }
1789-
1790-
1791-
1792-@Callable(ch)
1793-func liquidate (cq) = {
1794- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1795- if ((hA == hA))
1796- then {
1797- let jr = ev(cq, aO)
1798- let iE = if (dX())
1799- then {
1800- let js = ev(cq, aP)
1801- bc(jr, js)
1802- }
1803- else jr
1804- if (if (if (if (if (!(ci(iE, bS(), false)))
1805- then true
1806- else !(cx(cq)))
1807- then true
1808- else !(cy()))
1809- then true
1810- else cz())
1811- then true
1812- else dH())
1750+ else jC
1751+ if (if (if (if (if (!(cj(iB, bT(), false)))
1752+ then true
1753+ else !(cB(cr)))
1754+ then true
1755+ else !(cC()))
1756+ then true
1757+ else cD())
1758+ then true
1759+ else dL())
18131760 then throw("Unable to liquidate")
1814- else if (if (if ((jr > bT()))
1815- then (bU() > 0)
1761+ else if (if (if ((jC > bU()))
1762+ then (bV() > 0)
18161763 else false)
1817- then (aL > bU())
1764+ then (aM > bV())
18181765 else false)
18191766 then {
1820- let jt = cp(cq)
1821- let fV = jt._1
1822- let hC = jt._2
1823- let hD = jt._3
1824- let hE = jt._4
1825- let hF = if ((fV > 0))
1826- then aG
1827- else aF
1828- let hG = (hF == aF)
1829- let eH = eB(cq, fV)
1830- let ju = em(cq, aO)
1831- let hJ = ju._1
1832- let el = ju._2
1833- let jv = cM(hG, eH)
1834- let eG = jv._1
1835- let cQ = jv._2
1836- let cR = jv._3
1837- let eO = jv._4
1838- let jw = aS(bb(eG), bb(fV))
1839- let eL = aU(el, jw)
1840- let jx = dd(fV, hC, hE, eL)
1841- let dm = jx._1
1842- let dn = jx._2
1843- let di = jx._3
1844- let hO = (el - eL)
1845- let hP = if ((fV > 0))
1846- then ((hJ - eH) - hO)
1847- else ((hO + hJ) - eH)
1848- let jy = aU(eH, bT())
1849- let jz = (jy / 2)
1850- let gm = (jy - jz)
1851- let jc = (dm - jy)
1852- let hQ = (fV + eG)
1853- let hS = bb(hP)
1854- let jd = (hD - hS)
1855- let je = cn(hQ)
1856- let eR = (bL() - jd)
1857- let jh = (bD() - jy)
1858- let jA = if ((0 > jh))
1859- then $Tuple2(0, bb(jh))
1860- else $Tuple2(jh, 0)
1861- let jB = jA._1
1862- let jk = jA._2
1863- let jC = fZ(cq)
1864- let iH = jC._1
1865- let iI = jC._2
1866- let jD = if ((iH > 0))
1767+ let jE = cq(cr)
1768+ let fZ = jE._1
1769+ let hZ = jE._2
1770+ let ia = jE._3
1771+ let ib = jE._4
1772+ let hE = if ((fZ > 0))
1773+ then aH
1774+ else aG
1775+ let if = (hE == aG)
1776+ let eL = eF(cr, fZ)
1777+ let jF = eq(cr, aP)
1778+ let io = jF._1
1779+ let ep = jF._2
1780+ let jG = cQ(if, eL)
1781+ let eK = jG._1
1782+ let cU = jG._2
1783+ let cV = jG._3
1784+ let eS = jG._4
1785+ let jH = aT(bc(eK), bc(fZ))
1786+ let eP = aV(ep, jH)
1787+ let jI = dh(fZ, hZ, ib, eP)
1788+ let dq = jI._1
1789+ let dr = jI._2
1790+ let dm = jI._3
1791+ let ja = (ep - eP)
1792+ let jb = if ((fZ > 0))
1793+ then ((io - eL) - ja)
1794+ else ((ja + io) - eL)
1795+ let jJ = aV(eL, bU())
1796+ let jK = (jJ / 2)
1797+ let gq = (jJ - jK)
1798+ let je = (dq - jJ)
1799+ let ij = (fZ + eK)
1800+ let iq = bc(jb)
1801+ let jd = (ia - iq)
1802+ let jc = co(ij)
1803+ let eV = (bM() - jd)
1804+ let jl = (bE() - jJ)
1805+ let jL = if ((0 > jl))
1806+ then $Tuple2(0, bc(jl))
1807+ else $Tuple2(jl, 0)
1808+ let jM = jL._1
1809+ let jo = jL._2
1810+ let jN = gd(cr)
1811+ let iE = jN._1
1812+ let iF = jN._2
1813+ let jO = if ((iE > 0))
18671814 then {
1868- let jE = aU(iH, jw)
1869- let jn = invoke(ax(), "realizePartially", [cq, iI, jE], nil)
1870- if ((jn == jn))
1815+ let jP = aV(iE, jH)
1816+ let jr = invoke(ay(), "realizePartially", [cr, iF, jP], nil)
1817+ if ((jr == jr))
18711818 then nil
18721819 else throw("Strict value is not equal to itself.")
18731820 }
18741821 else nil
1875- if ((jD == jD))
1822+ if ((jO == jO))
18761823 then {
1877- let jq = invoke(as(), "withdrawLocked", [jy], nil)
1878- if ((jq == jq))
1824+ let jA = invoke(at(), "withdrawLocked", [jJ], nil)
1825+ if ((jA == jA))
18791826 then {
1880- let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1881- if ((iw == iw))
1827+ let jQ = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1828+ if ((jQ == jQ))
18821829 then {
1883- let hW = invoke(at(), "notifyNotional", [cq, hS], nil)
1884- if ((hW == hW))
1885- then (((gJ(cq, hQ, jc, hS, je) ++ gW(cQ, cR, eO, eR, (cc() - (if ((hQ > 0))
1886- then bb(eG)
1887- else 0)), (cb() - (if ((0 > hQ))
1888- then bb(eG)
1889- else 0)), (bN() - (if ((hQ > 0))
1830+ let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1831+ if ((iw == iw))
1832+ then (((gO(cr, ij, je, iq, jc) ++ hb(cU, cV, eS, eV, (cd() - (if ((ij > 0))
1833+ then bc(eK)
1834+ else 0)), (cc() - (if ((0 > ij))
1835+ then bc(eK)
1836+ else 0)), (bO() - (if ((ij > 0))
18901837 then jd
1891- else 0)), (bM() - (if ((0 > hQ))
1838+ else 0)), (bN() - (if ((0 > ij))
18921839 then jd
1893- else 0)))) ++ he(ch.caller, jz)) ++ hh(jB))
1840+ else 0)))) ++ hj(ci.caller, jK)) ++ hm(jM))
18941841 else throw("Strict value is not equal to itself.")
18951842 }
18961843 else throw("Strict value is not equal to itself.")
18971844 }
18981845 else throw("Strict value is not equal to itself.")
18991846 }
19001847 else throw("Strict value is not equal to itself.")
19011848 }
19021849 else {
1903- let jF = eI(cq, false)
1904- let eg = jF._1
1905- let dn = jF._2
1906- let eh = jF._3
1907- let ei = jF._4
1908- let cQ = jF._5
1909- let cR = jF._6
1910- let eO = jF._7
1911- let eR = jF._8
1912- let eH = jF._9
1913- let eP = jF._10
1914- let eQ = jF._11
1915- let hU = jF._12
1916- let hV = jF._13
1917- let jy = aU(eH, bT())
1918- let jz = (jy / 2)
1919- let gm = (jy - jz)
1920- let jh = (bD() - jy)
1921- let jG = if ((0 > jh))
1922- then $Tuple2(0, bb(jh))
1923- else $Tuple2(jh, 0)
1924- let jB = jG._1
1925- let jk = jG._2
1926- let jH = fZ(cq)
1927- let iH = jH._1
1928- let iI = jH._2
1929- let jD = if ((iH > 0))
1850+ let jR = eM(cr, false)
1851+ let ek = jR._1
1852+ let dr = jR._2
1853+ let el = jR._3
1854+ let em = jR._4
1855+ let cU = jR._5
1856+ let cV = jR._6
1857+ let eS = jR._7
1858+ let eV = jR._8
1859+ let eL = jR._9
1860+ let eT = jR._10
1861+ let eU = jR._11
1862+ let ik = jR._12
1863+ let il = jR._13
1864+ let jJ = aV(eL, bU())
1865+ let jK = (jJ / 2)
1866+ let gq = (jJ - jK)
1867+ let jl = (bE() - jJ)
1868+ let jS = if ((0 > jl))
1869+ then $Tuple2(0, bc(jl))
1870+ else $Tuple2(jl, 0)
1871+ let jM = jS._1
1872+ let jo = jS._2
1873+ let jT = gd(cr)
1874+ let iE = jT._1
1875+ let iF = jT._2
1876+ let jO = if ((iE > 0))
19301877 then {
1931- let jn = invoke(ax(), "realizePartiallyAndClose", [cq, 0, iI], nil)
1932- if ((jn == jn))
1878+ let jr = invoke(ay(), "realizePartiallyAndClose", [cr, 0, iF], nil)
1879+ if ((jr == jr))
19331880 then nil
19341881 else throw("Strict value is not equal to itself.")
19351882 }
19361883 else nil
1937- if ((jD == jD))
1884+ if ((jO == jO))
19381885 then {
1939- let gf = if ((dn > 0))
1886+ let gj = if ((dr > 0))
19401887 then {
1941- let jI = invoke(as(), "exchangeFreeAndLocked", [dn], nil)
1942- if ((jI == jI))
1888+ let jU = invoke(at(), "exchangeFreeAndLocked", [dr], nil)
1889+ if ((jU == jU))
19431890 then nil
19441891 else throw("Strict value is not equal to itself.")
19451892 }
19461893 else nil
1947- if ((gf == gf))
1894+ if ((gj == gj))
19481895 then {
1949- let jq = invoke(as(), "withdrawLocked", [jy], nil)
1950- if ((jq == jq))
1896+ let jA = invoke(at(), "withdrawLocked", [jJ], nil)
1897+ if ((jA == jA))
19511898 then {
1952- let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1953- if ((iw == iw))
1899+ let jQ = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1900+ if ((jQ == jQ))
19541901 then {
1955- let hW = invoke(at(), "notifyNotional", [cq, 0], nil)
1956- if ((hW == hW))
1957- then (((hd(cq) ++ gW(cQ, cR, eO, eR, eP, eQ, hU, hV)) ++ he(ch.caller, jz)) ++ hh(jB))
1902+ let iw = invoke(au(), "notifyNotional", [cr, 0], nil)
1903+ if ((iw == iw))
1904+ then (((hi(cr) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hj(ci.caller, jK)) ++ hm(jM))
19581905 else throw("Strict value is not equal to itself.")
19591906 }
19601907 else throw("Strict value is not equal to itself.")
19611908 }
19621909 else throw("Strict value is not equal to itself.")
19631910 }
19641911 else throw("Strict value is not equal to itself.")
19651912 }
19661913 else throw("Strict value is not equal to itself.")
19671914 }
19681915 }
19691916 else throw("Strict value is not equal to itself.")
19701917 }
19711918
19721919
19731920
1974-@Callable(ch)
1921+@Callable(ci)
19751922 func payFunding () = {
1976- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1977- if ((hA == hA))
1923+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1924+ if ((hI == hI))
19781925 then {
1979- let jJ = bO()
1980- if (if (if ((jJ > lastBlock.timestamp))
1981- then true
1982- else !(cy()))
1983- then true
1984- else cz())
1985- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jJ)))
1926+ let jV = bP()
1927+ if (if (if ((jV > lastBlock.timestamp))
1928+ then true
1929+ else !(cC()))
1930+ then true
1931+ else cD())
1932+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jV)))
19861933 else {
1987- let fF = dA()
1988- let jK = fE()
1989- let fI = jK._1
1990- let fJ = jK._2
1991- gz((jJ + bR()), (bZ() + fJ), (ca() + fI), aS(fJ, fF), aS(fI, fF))
1934+ let fJ = dE()
1935+ let jW = fI()
1936+ let fM = jW._1
1937+ let fN = jW._2
1938+ gD((jV + bS()), (ca() + fN), (cb() + fM), aT(fN, fJ), aT(fM, fJ))
19921939 }
19931940 }
19941941 else throw("Strict value is not equal to itself.")
19951942 }
19961943
19971944
19981945
1999-@Callable(ch)
1946+@Callable(ci)
20001947 func syncTerminalPriceToOracle () = {
2001- let cI = bG()
2002- let cJ = bH()
2003- let jL = fA(dA(), cI, cJ)
2004- let hq = jL._1
2005- let hr = jL._2
2006- let eM = jL._3
2007- let hs = if ((eM != 0))
1948+ let cM = bH()
1949+ let cN = bI()
1950+ let jX = fE(dE(), cM, cN)
1951+ let hv = jX._1
1952+ let hw = jX._2
1953+ let eQ = jX._3
1954+ let hx = if ((eQ != 0))
20081955 then {
2009- let hs = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
2010- if ((hs == hs))
1956+ let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1957+ if ((hx == hx))
20111958 then nil
20121959 else throw("Strict value is not equal to itself.")
20131960 }
20141961 else nil
2015- if ((hs == hs))
2016- then (gV(hq, hr) ++ gN(aS(aU(cI, hq), aU(cJ, hr))))
1962+ if ((hx == hx))
1963+ then (ha(hv, hw) ++ gS(aT(aV(cM, hv), aV(cN, hw))))
20171964 else throw("Strict value is not equal to itself.")
20181965 }
20191966
20201967
20211968
2022-@Callable(ch)
2023-func view_calcRemainMarginWithFundingPayment (cq) = {
2024- let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
2025- if ((hA == hA))
1969+@Callable(ci)
1970+func view_calcRemainMarginWithFundingPayment (cr) = {
1971+ let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1972+ if ((hI == hI))
20261973 then {
2027- let jM = cp(cq)
2028- let ct = jM._1
2029- let eo = jM._2
2030- let ex = jM._3
2031- let eq = jM._4
2032- let jN = em(cq, aO)
2033- let ed = jN._1
2034- let el = jN._2
2035- let jO = dd(ct, eo, eq, el)
2036- let dm = jO._1
2037- let dn = jO._2
2038- let di = jO._3
2039- throw((((((aQ(dm) + aQ(di)) + aQ(eA(cq))) + aQ(el)) + aQ(dn)) + aQ(ed)))
1974+ let jY = cq(cr)
1975+ let cu = jY._1
1976+ let es = jY._2
1977+ let eB = jY._3
1978+ let eu = jY._4
1979+ let jZ = eq(cr, aP)
1980+ let eh = jZ._1
1981+ let ep = jZ._2
1982+ let ka = dh(cu, es, eu, ep)
1983+ let dq = ka._1
1984+ let dr = ka._2
1985+ let dm = ka._3
1986+ throw((((((aR(dq) + aR(dm)) + aR(eE(cr))) + aR(ep)) + aR(dr)) + aR(eh)))
20401987 }
20411988 else throw("Strict value is not equal to itself.")
20421989 }
20431990
20441991
20451992
2046-@Callable(ch)
2047-func view_getPegAdjustCost (gO) = {
2048- let cI = bG()
2049- let cJ = bH()
2050- let fz = fA(gO, cI, cJ)
2051- throw(toString(fz._3))
2052- }
2053-
2054-
2055-
2056-@Callable(ch)
1993+@Callable(ci)
1994+func view_getPegAdjustCost (gT) = {
1995+ let cM = bH()
1996+ let cN = bI()
1997+ let fD = fE(gT, cM, cN)
1998+ throw(toString(fD._3))
1999+ }
2000+
2001+
2002+
2003+@Callable(ci)
20572004 func view_getTerminalAmmPrice () = {
2058- let jP = fi()
2059- let fm = jP._1
2060- let fn = jP._2
2061- let hl = aS(aU(fm, bI()), aU(fn, bJ()))
2062- throw(toString(hl))
2063- }
2064-
2065-
2066-
2067-@Callable(ch)
2005+ let kb = fm()
2006+ let fq = kb._1
2007+ let fr = kb._2
2008+ let hq = aT(aV(fq, bJ()), aV(fr, bK()))
2009+ throw(toString(hq))
2010+ }
2011+
2012+
2013+
2014+@Callable(ci)
20682015 func view_getFunding () = {
2069- let fF = dA()
2070- let jQ = fE()
2071- let fI = jQ._1
2072- let fJ = jQ._2
2073- let jR = aS(fJ, fF)
2074- let jS = aS(fI, fF)
2075- throw((((aQ(jR) + aQ(jS)) + aQ(eS())) + aQ(dA())))
2076- }
2077-
2078-
2079-
2080-@Callable(ch)
2081-func view_getBorrowedByTrader (cq) = {
2082- let jT = fZ(cq)
2083- let iH = jT._1
2084- let iI = jT._2
2085- throw((aQ(iH) + iI))
2086- }
2087-
2088-
2089-
2090-@Callable(ch)
2016+ let fJ = dE()
2017+ let kc = fI()
2018+ let fM = kc._1
2019+ let fN = kc._2
2020+ let kd = aT(fN, fJ)
2021+ let ke = aT(fM, fJ)
2022+ throw((((aR(kd) + aR(ke)) + aR(eW())) + aR(dE())))
2023+ }
2024+
2025+
2026+
2027+@Callable(ci)
2028+func view_getBorrowedByTrader (cr) = {
2029+ let kf = gd(cr)
2030+ let iE = kf._1
2031+ let iF = kf._2
2032+ throw((aR(iE) + iF))
2033+ }
2034+
2035+
2036+
2037+@Callable(ci)
20912038 func computeSpotPrice () = {
2092- let fz = dW()
2093- $Tuple2(nil, fz)
2094- }
2095-
2096-
2097-
2098-@Callable(ch)
2099-func computeFeeForTraderWithArtifact (cq,fL) = {
2100- let fz = gc(cq, fL)
2101- $Tuple2(nil, fz)
2102- }
2103-
2104-
2105-@Verifier(jU)
2106-func jV () = sigVerify(jU.bodyBytes, jU.proofs[0], ao())
2039+ let fD = ea()
2040+ $Tuple2(nil, fD)
2041+ }
2042+
2043+
2044+
2045+@Callable(ci)
2046+func computeFeeForTraderWithArtifact (cr,fP) = {
2047+ let fD = gg(cr, fP)
2048+ $Tuple2(nil, fD)
2049+ }
2050+
2051+
2052+@Verifier(kg)
2053+func kh () = sigVerify(kg.bodyBytes, kg.proofs[0], ap())
21072054

github/deemru/w8io/169f3d6 
1019.32 ms