tx · 9Qbou3trG9mGcuEut5xcMGnwXwM1Yr4pmpiDYPjxvhHQ

3N4SpfepyNLLb4Uc8e3xvkZew64HMcZ23oX:  -0.07500000 Waves

2023.01.07 19:17 [2394770] smart account 3N4SpfepyNLLb4Uc8e3xvkZew64HMcZ23oX > SELF 0.00000000 Waves

{ "type": 13, "id": "9Qbou3trG9mGcuEut5xcMGnwXwM1Yr4pmpiDYPjxvhHQ", "fee": 7500000, "feeAssetId": null, "timestamp": 1673108262860, "version": 2, "chainId": 84, "sender": "3N4SpfepyNLLb4Uc8e3xvkZew64HMcZ23oX", "senderPublicKey": "Gqr4yqnGvyo3GmKz59Qs1qfyDm5XhT134DCjiBhmD8jW", "proofs": [ "2szs1M4nZHXxcRh7hYwnuFn7f76e2QCVW8L2wSAXkeujmwf7TSfiWsfjZMx5sXkbyKh2p4JbtjM3VZVitSGm4Xuj" ], "script": "base64:BgJ6CAISABIAEgASABIDCgEBEgMKAQESDgoMAQEBAQEBAQEBAQEBEhQKEgEBAQEBAQEICAgIAQEBAQEBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESBAoCAQESAwoBCBIAEgASAwoBCBIDCgEBEgASABIDCgEIEgASBAoCCAjDAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AA5rX29yYV9vcGVuX2tleQIOa19vcmFfb3Blbl9rZXkABWtfb3JhAgVrX29yYQAJa19iYWxhbmNlAglrX2JhbGFuY2UACmtfc2VxdWVuY2UCCmtfc2VxdWVuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19wb3NpdGlvbk1hcmdpbgIQa19wb3NpdGlvbk1hcmdpbgAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAIWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgISa19wb3NpdGlvbkZyYWN0aW9uABJrX3Bvc2l0aW9uU2VxdWVuY2UCEmtfcG9zaXRpb25TZXF1ZW5jZQAPa19wb3NpdGlvbkFzc2V0Ag9rX3Bvc2l0aW9uQXNzZXQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQACGtfcGF1c2VkAghrX3BhdXNlZAALa19jbG9zZU9ubHkCC2tfY2xvc2VPbmx5AAVrX2ZlZQIFa19mZWUAD2tfZnVuZGluZ1BlcmlvZAIPa19mdW5kaW5nUGVyaW9kABFrX2luaXRNYXJnaW5SYXRpbwIRa19pbml0TWFyZ2luUmF0aW8AGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwIFa19tbXIAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwIVa19saXF1aWRhdGlvbkZlZVJhdGlvABlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAhZrX3BhcnRMaXF1aWRhdGlvblJhdGlvAA1rX3NwcmVhZExpbWl0Ag1rX3NwcmVhZExpbWl0ABBrX21heFByaWNlSW1wYWN0AhBrX21heFByaWNlSW1wYWN0ABBrX21heFByaWNlU3ByZWFkAhBrX21heFByaWNlU3ByZWFkABFrX21heE9wZW5Ob3Rpb25hbAIRa19tYXhPcGVuTm90aW9uYWwAFWtfZmVlVG9TdGFrZXJzUGVyY2VudAIVa19mZWVUb1N0YWtlcnNQZXJjZW50ABBrX21heE9yYWNsZURlbGF5AhBrX21heE9yYWNsZURlbGF5AA1rX2xhc3REYXRhU3RyAg1rX2xhc3REYXRhU3RyAA5rX2xhc3RNaW51dGVJZAIOa19sYXN0TWludXRlSWQAHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAh1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQATa190d2FwRGF0YUxhc3RQcmljZQITa190d2FwRGF0YUxhc3RQcmljZQAaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQCGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAEmtfcXVvdGVBc3NldFdlaWdodAIIa19xdEFzdFcAEWtfYmFzZUFzc2V0V2VpZ2h0AghrX2JzQXN0VwATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAATa19vcGVuSW50ZXJlc3RTaG9ydAITa19vcGVuSW50ZXJlc3RTaG9ydAASa19vcGVuSW50ZXJlc3RMb25nAhJrX29wZW5JbnRlcmVzdExvbmcAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABRrX2NvbGxhdGVyYWxfYWRkcmVzcwIUa19jb2xsYXRlcmFsX2FkZHJlc3MAEmtfZXhjaGFuZ2VfYWRkcmVzcwISa19leGNoYW5nZV9hZGRyZXNzABVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwAga190cmFkZXJfbWFya2V0X2Fzc2V0X2NvbGxhdGVyYWwCIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsAQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzAQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAEMYWRtaW5BZGRyZXNzAAkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX2FkbWluX2FkZHJlc3MBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQBEXF1b3RlQXNzZXRTdGFraW5nAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfcXVvdGVfc3Rha2luZwIbUXVvdGUgYXNzZXQgc3Rha2luZyBub3Qgc2V0AQ5zdGFraW5nQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX3N0YWtpbmdfYWRkcmVzcwIPU3Rha2luZyBub3Qgc2V0AQx2YXVsdEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa192YXVsdF9hZGRyZXNzAg1WYXVsdCBub3Qgc2V0AQxtaW5lckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19taW5lcl9hZGRyZXNzAg1NaW5lciBub3Qgc2V0AQ1vcmRlcnNBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEGtfb3JkZXJzX2FkZHJlc3MCDk9yZGVycyBub3Qgc2V0AQ9yZWZlcnJhbEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19yZWZlcnJhbF9hZGRyZXNzAhBSZWZlcnJhbCBub3Qgc2V0ARFuZnRNYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCE05GVCBNYW5hZ2VyIG5vdCBzZXQBEWNvbGxhdGVyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFGtfY29sbGF0ZXJhbF9hZGRyZXNzAhpDb2xsYXRlcmFsIE1hbmFnZXIgbm90IHNldAELc3dhcEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEmtfZXhjaGFuZ2VfYWRkcmVzcwIPTm8gc3dhcCBhZGRyZXNzAhRJbnZhbGlkIHN3YXAgYWRkcmVzcwARa193aGl0ZWxpc3RfYXNzZXQCEWtfd2hpdGVsaXN0X2Fzc2V0ARBpc1doaXRlbGlzdEFzc2V0AQhfYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERY29sbGF0ZXJhbEFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBRFrX3doaXRlbGlzdF9hc3NldAUIX2Fzc2V0SWQHAA1rX3Rva2VuX3BhcmFtAg1rX3Rva2VuX3BhcmFtAAxrX3Rva2VuX3R5cGUCDGtfdG9rZW5fdHlwZQAYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFAg1mZWVfcmVkdWN0aW9uAAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgANVFdBUF9JTlRFUlZBTAAPAA9PUkFDTEVfSU5URVJWQUwADwAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAIQUxMX0ZFRVMAZAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFc3FydGQBAl94CQEEc3FydAQFAl94BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBHBvd2QCAl94Al95CQBsBgUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUCX3kFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBmJzcXJ0ZAECX3gJAQpzcXJ0QmlnSW50BAUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEFYnBvd2QCAl94Al95CQB2BgUCX3gFD0RFQ0lNQUxfTlVNQkVSUwUCX3kFD0RFQ0lNQUxfTlVNQkVSUwUPREVDSU1BTF9OVU1CRVJTBQhIQUxGRVZFTgEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEdm1heAICX3gCX3kDCQBnAgUCX3gFAl95BQJfeAUCX3kBCWxpc3RUb1N0cgEFX2xpc3QKAQVfam9pbgILYWNjdW11bGF0b3IDdmFsCQCsAgIJAKwCAgULYWNjdW11bGF0b3IFA3ZhbAIBLAQKbmV3TGlzdFN0cgoAAiRsBQVfbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFX2pvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQLbmV3TGlzdFN0clUJALMCAgUKbmV3TGlzdFN0cgABBAtuZXdMaXN0U3RyUgMJAAACCQCvAgIFC25ld0xpc3RTdHJVAAECASwJALACAgULbmV3TGlzdFN0clUAAQULbmV3TGlzdFN0clUFC25ld0xpc3RTdHJSAQlzdHJUb0xpc3QBBF9zdHIJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9pbml0TWFyZ2luUmF0aW8ACQEDaW50AQURa19pbml0TWFyZ2luUmF0aW8BBnF0QXN0UgAJAQNpbnQBBRNrX3F1b3RlQXNzZXRSZXNlcnZlAQZic0FzdFIACQEDaW50AQUSa19iYXNlQXNzZXRSZXNlcnZlAQZxdEFzdFcACQEFaW50T3ICBRJrX3F1b3RlQXNzZXRXZWlnaHQFDERFQ0lNQUxfVU5JVAEGYnNBc3RXAAkBBWludE9yAgURa19iYXNlQXNzZXRXZWlnaHQFDERFQ0lNQUxfVU5JVAERdG90YWxQb3NpdGlvblNpemUACQEDaW50AQUTa190b3RhbFBvc2l0aW9uU2l6ZQEUb3BlbkludGVyZXN0Tm90aW9uYWwACQEDaW50AQUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAERb3BlbkludGVyZXN0U2hvcnQACQEDaW50AQUTa19vcGVuSW50ZXJlc3RTaG9ydAEQb3BlbkludGVyZXN0TG9uZwAJAQNpbnQBBRJrX29wZW5JbnRlcmVzdExvbmcBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAACQEDaW50AQUSa19uZXh0RnVuZGluZ0Jsb2NrARBmdW5kaW5nUGVyaW9kUmF3AAkBA2ludAEFD2tfZnVuZGluZ1BlcmlvZAEUZnVuZGluZ1BlcmlvZERlY2ltYWwACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQxERUNJTUFMX1VOSVQBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUHU0VDT05EUwEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAJAQNpbnQBBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8BE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQEDaW50AQUVa19saXF1aWRhdGlvbkZlZVJhdGlvARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAQNpbnQBBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAQtzcHJlYWRMaW1pdAAJAQNpbnQBBQ1rX3NwcmVhZExpbWl0AQ5tYXhQcmljZUltcGFjdAAJAQNpbnQBBRBrX21heFByaWNlSW1wYWN0AQ5tYXhQcmljZVNwcmVhZAAJAQNpbnQBBRBrX21heFByaWNlU3ByZWFkAQ9tYXhPcGVuTm90aW9uYWwACQEDaW50AQURa19tYXhPcGVuTm90aW9uYWwBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAQNpbnQBBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQEMbGFzdFNlcXVlbmNlAAkBBWludE9yAgUKa19zZXF1ZW5jZQAAARNmZWVUb1N0YWtlcnNQZXJjZW50AAkBA2ludAEFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAEObWF4T3JhY2xlRGVsYXkACQEDaW50AQUQa19tYXhPcmFjbGVEZWxheQEPZ2V0QWN0dWFsQ2FsbGVyAQFpCQELdmFsdWVPckVsc2UCCQCdCAIJAQ1vcmRlcnNBZGRyZXNzAAIIa19zZW5kZXIJAKUIAQgFAWkGY2FsbGVyARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwxfbWFyZ2luUmF0aW8QX2Jhc2VNYXJnaW5SYXRpbxRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQUcmVtYWluaW5nTWFyZ2luUmF0aW8JAGUCBQxfbWFyZ2luUmF0aW8FEF9iYXNlTWFyZ2luUmF0aW8DAwUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGYCAAAFFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPCAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDID4gCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlgoEBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJAJYKBAAAAAAAAAAAARBnZXRQb3NpdGlvbkFzc2V0AQdfdHJhZGVyBBBwb3NpdGlvbkFzc2V0T3B0CQCdCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUHX3RyYWRlcgQHJG1hdGNoMAUQcG9zaXRpb25Bc3NldE9wdAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEDXBvc2l0aW9uQXNzZXQFByRtYXRjaDAFDXBvc2l0aW9uQXNzZXQJANgEAQkBCnF1b3RlQXNzZXQAARNyZXF1aXJlT3BlblBvc2l0aW9uAQdfdHJhZGVyAwkAAAIICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAAAJAAIBAhBObyBvcGVuIHBvc2l0aW9uBgELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwEJY2xvc2VPbmx5AAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQtrX2Nsb3NlT25seQcBDXVwZGF0ZVJlc2VydmUDBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudBBfYmFzZUFzc2V0QW1vdW50AwUGX2lzQWRkBAduZXdCYXNlCQBlAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQDCQBnAgAABQduZXdCYXNlCQACAQIqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMJAGQCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQFB25ld0Jhc2UJAGQCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50BAhuZXdRdW90ZQkAZQIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAMJAGcCAAAFCG5ld1F1b3RlCQACAQIqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMFCG5ld1F1b3RlCQBkAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50AQ1jYWxjSW52YXJpYW50AgdfcXRBc3RSB19ic0FzdFIEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYmJzQXN0UgkAtgIBBQdfYnNBc3RSCQEFYm11bGQCBQdicXRBc3RSBQdiYnNBc3RSAQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUHX3F0QXN0VwQBawkBDWNhbGNJbnZhcmlhbnQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQBlAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE2ODQzMTcwMTMJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjg0MzE3MDEzAl8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTY4NDMxNzAxMwJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNjg0MzE3MDEzAl8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BBBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCBQxfbWFyZ2luRGVsdGEFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE4NTAwMTg2MjcDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTg1MDAxODYyNwJfMQQHYmFkRGVidAgFDSR0MDE4NTAwMTg2MjcCXzIJAJUKAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgMFBl9pc0FkZAkAZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50CQBlAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQED3F1b3RlQXNzZXRBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQPcXVvdGVBc3NldERlbHRhCQEDYWJzAQkAZQIFD3F1b3RlQXNzZXRBZnRlcgUSX3F1b3RlQXNzZXRSZXNlcnZlBA5xdW90ZUFzc2V0U29sZAkBBG11bGQCBQ9xdW90ZUFzc2V0RGVsdGEFEV9xdW90ZUFzc2V0V2VpZ2h0BBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QABA0kdDAxOTc5NzE5OTU5CQENdXBkYXRlUmVzZXJ2ZQMJAQEhAQUGX2lzQWRkBQ9xdW90ZUFzc2V0RGVsdGEFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTk3OTcxOTk1OQJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE5Nzk3MTk5NTkCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTk3OTcxOTk1OQJfMwQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwABDmdldE9yYWNsZVByaWNlAAQGb3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUFa19vcmECAAQIcHJpY2VLZXkJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFCWtfb3JhX2tleQQJbGFzdFZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhwcmljZUtleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIHByaWNlLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIcHJpY2VLZXkECGJsb2NrS2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFD2tfb3JhX2Jsb2NrX2tleQIAAwkBAiE9AgUIYmxvY2tLZXkCAAQMY3VycmVudEJsb2NrCAUJbGFzdEJsb2NrBmhlaWdodAQPbGFzdE9yYWNsZUJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhibG9ja0tleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIGJsb2NrLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIYmxvY2tLZXkDCQBmAgkAZQIFDGN1cnJlbnRCbG9jawUPbGFzdE9yYWNsZUJsb2NrCQEObWF4T3JhY2xlRGVsYXkACQACAQkArAICCQCsAgIJAKwCAgImT3JhY2xlIHN0YWxlIGRhdGEuIExhc3Qgb3JhY2xlIGJsb2NrOiAJAKQDAQUPbGFzdE9yYWNsZUJsb2NrAhAgY3VycmVudCBibG9jazogCQCkAwEFDGN1cnJlbnRCbG9jawUJbGFzdFZhbHVlBQlsYXN0VmFsdWUBDmlzTWFya2V0Q2xvc2VkAAQGb3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUFa19vcmECAAQHb3BlbktleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ5rX29yYV9vcGVuX2tleQIAAwkBAiE9AgUHb3BlbktleQIABAZpc09wZW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmwgCBQZvcmFjbGUFB29wZW5LZXkJAKwCAgkArAICCQCsAgICK0NhbiBub3QgZ2V0IG9yYWNsZSBpcyBvcGVuL2Nsb3NlZC4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFB29wZW5LZXkJAQEhAQUGaXNPcGVuBwEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBJhYnNQcmljZURpZmZCZWZvcmUJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQkBBnF0QXN0UgAJAQZic0FzdFIABQdfcXRBc3RXBQdfYnNBc3RXBBFhYnNQcmljZURpZmZBZnRlcgkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBQdfcXRBc3RXBQdfYnNBc3RXAwMJAGYCBRFhYnNQcmljZURpZmZBZnRlcgkBDm1heFByaWNlU3ByZWFkAAkAZgIFEWFic1ByaWNlRGlmZkFmdGVyBRJhYnNQcmljZURpZmZCZWZvcmUHCQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBRFhYnNQcmljZURpZmZBZnRlcgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEDSR0MDI0OTEwMjUxMzAJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQTb3V0UG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI0OTEwMjUxMzACXzEEAngxCAUNJHQwMjQ5MTAyNTEzMAJfMgQCeDIIBQ0kdDAyNDkxMDI1MTMwAl8zBAJ4MwgFDSR0MDI0OTEwMjUxMzACXzQFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEOZ2V0T3JhY2xlUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMjY1NTEyNjY3OQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjY1NTEyNjY3OQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNjU1MTI2Njc5Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDI2NTUxMjY2NzkCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjY1NTEyNjY3OQJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMjcxOTIyNzMwMwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjcxOTIyNzMwMwJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNzE5MjI3MzAzAl8yBANwb24IBQ0kdDAyNzE5MjI3MzAzAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI3MTkyMjczMDMCXzQEDSR0MDI3MzA5Mjc0MDIJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyNzMwOTI3NDAyAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjczMDkyNzQwMgJfMgQNJHQwMjc0MDcyNzU3MwkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjc0MDcyNzU3MwJfMQQHYmFkRGVidAgFDSR0MDI3NDA3Mjc1NzMCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfNwMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRVleGNoYW5nZWRQb3NpdGlvblNpemUHAl8xBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50ARVpbnRlcm5hbENsb3NlUG9zaXRpb24CB190cmFkZXIUX2NoZWNrTWF4UHJpY2VJbXBhY3QEDSR0MDI4ODEzMjg5NDEJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI4ODEzMjg5NDECXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjg4MTMyODk0MQJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyODgxMzI4OTQxAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI4ODEzMjg5NDECXzQEDXVucmVhbGl6ZWRQbmwICQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QCXzIEDSR0MDI5MDM2MjkyMDQJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI5MDM2MjkyMDQCXzEEB2JhZERlYnQIBQ0kdDAyOTAzNjI5MjA0Al8yBBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQEtAQUMcG9zaXRpb25TaXplBAtyZWFsaXplZFBubAUNdW5yZWFsaXplZFBubAQNbWFyZ2luVG9WYXVsdAkBAS0BBQxyZW1haW5NYXJnaW4EDSR0MDI5MzMxMjk2MDUJAQpzd2FwT3V0cHV0AwkAZgIFDHBvc2l0aW9uU2l6ZQAACQEDYWJzAQUMcG9zaXRpb25TaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDI5MzMxMjk2MDUCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyOTMzMTI5NjA1Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyOTMzMTI5NjA1Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMjkzMzEyOTYwNQJfNAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAyOTMzMTI5NjA1Al81BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAyOTMzMTI5NjA1Al82BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUUcG9zaXRpb25PcGVuTm90aW9uYWwJAJ8KDQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQdiYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyCQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFDHBvc2l0aW9uU2l6ZQAABRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwAAAEQZ2V0VHdhcFNwb3RQcmljZQAECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbGlzdAAABAxsYXN0TWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAQWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEDGVuZExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQSbm93Q3VtdWxhdGl2ZVByaWNlCQBkAgUWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQxlbmRMYXN0UHJpY2UEGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQOc3RhcnRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQUc3RhcnRDdW11bGF0aXZlUHJpY2UJAGQCBRhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUNc3RhcnRNaW51dGVJZAUIbWF4SW5kZXgFDnN0YXJ0TGFzdFByaWNlCQBpAgkAZQIFEm5vd0N1bXVsYXRpdmVQcmljZQUUc3RhcnRDdW11bGF0aXZlUHJpY2UFDVRXQVBfSU5URVJWQUwBE2dldFRlcm1pbmFsQW1tU3RhdGUABA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAlAoCCQEGcXRBc3RSAAkBBmJzQXN0UgAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQNJHQwMzE3MjgzMTkwNwkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwQVY3VycmVudE5ldE1hcmtldFZhbHVlCAUNJHQwMzE3MjgzMTkwNwJfMQQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDMxNzI4MzE5MDcCXzIEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDMxNzI4MzE5MDcCXzMJAJQKAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlARNnZXRRdW90ZUFzc2V0V2VpZ2h0BBBiYXNlQXNzZXRSZXNlcnZlEXRvdGFsUG9zaXRpb25TaXplEXF1b3RlQXNzZXRSZXNlcnZlC3RhcmdldFByaWNlBAFiCQC2AgEFEGJhc2VBc3NldFJlc2VydmUEAnN6CQC2AgEFEXRvdGFsUG9zaXRpb25TaXplBAFxCQC2AgEFEXF1b3RlQXNzZXRSZXNlcnZlBAFwCQC2AgEFC3RhcmdldFByaWNlBAFrCQEFYm11bGQCBQFxBQFiBARuZXdCCQC3AgIFAWIFAnN6BARuZXdRCQEFYmRpdmQCBQFrBQRuZXdCBAF6CQEFYmRpdmQCBQRuZXdRBQRuZXdCBAZyZXN1bHQJAQViZGl2ZAIFAXAFAXoJAKADAQUGcmVzdWx0ARRnZXRTeW5jVGVybWluYWxQcmljZQMOX3Rlcm1pbmFsUHJpY2UHX3F0QXN0UgdfYnNBc3RSBA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAQJbmV3UXRBc3RXCQEEZGl2ZAIJAQRtdWxkAgUOX3Rlcm1pbmFsUHJpY2UFB19ic0FzdFIFB19xdEFzdFIJAJUKAwUJbmV3UXRBc3RXBQxERUNJTUFMX1VOSVQAAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBAluZXdRdEFzdFcJARNnZXRRdW90ZUFzc2V0V2VpZ2h0BAUHX2JzQXN0UgUNX3Bvc2l0aW9uU2l6ZQUHX3F0QXN0UgUOX3Rlcm1pbmFsUHJpY2UECW5ld0JzQXN0VwUMREVDSU1BTF9VTklUBA1tYXJnaW5Ub1ZhdWx0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFB19xdEFzdFIFCW5ld1F0QXN0VwUHX2JzQXN0UgUJbmV3QnNBc3RXBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJUKAwUJbmV3UXRBc3RXBQluZXdCc0FzdFcFDW1hcmdpblRvVmF1bHQBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDXNwb3RUd2FwUHJpY2UJARBnZXRUd2FwU3BvdFByaWNlAAQHcHJlbWl1bQkAZQIFDXNwb3RUd2FwUHJpY2UFD3VuZGVybHlpbmdQcmljZQMDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAGCQEOaXNNYXJrZXRDbG9zZWQACQCUCgIAAAAAAwkAZgIAAAUHcHJlbWl1bQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAJQKAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24EE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAJQKAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24BDmdldEFkanVzdGVkRmVlAgtfYXJ0aWZhY3RJZBBfYmFzZUZlZURpc2NvdW50BApiYXNlRmVlUmF3CQEDZmVlAAQHYmFzZUZlZQkBBG11bGQCBQpiYXNlRmVlUmF3BRBfYmFzZUZlZURpc2NvdW50BA0kdDAzNDc2ODM1MjYzAwkBAiE9AgULX2FydGlmYWN0SWQCAAQMYXJ0aWZhY3RLaW5kCQEEc3RyQQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdG9rZW5fdHlwZQULX2FydGlmYWN0SWQDCQAAAgUMYXJ0aWZhY3RLaW5kBRhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUECXJlZHVjdGlvbgkBBGludEECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Rva2VuX3BhcmFtBQtfYXJ0aWZhY3RJZAQLYWRqdXN0ZWRGZWUJAQRtdWxkAgUHYmFzZUZlZQUJcmVkdWN0aW9uCQCUCgIFC2FkanVzdGVkRmVlBgkAAgECGUludmFsaWQgYXR0YWNoZWQgYXJ0aWZhY3QJAJQKAgUHYmFzZUZlZQcEC2FkanVzdGVkRmVlCAUNJHQwMzQ3NjgzNTI2MwJfMQQMYnVybkFydGlmYWN0CAUNJHQwMzQ3NjgzNTI2MwJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0ARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIHX3RyYWRlcghfYXNzZXRJZAQPb2xkUG9zaXRpb25TaXplCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQMJAAACBQ9vbGRQb3NpdGlvblNpemUAAAYJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkAQtpc1NhbWVBc3NldAIHX3RyYWRlcghfYXNzZXRJZAkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMEX2FtbQhfYXNzZXRJZAdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBSBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAIBXwUEX2FtbQIBXwUIX2Fzc2V0SWQCAV8FB190cmFkZXIBE2dldEJvcnJvd2VkQnlUcmFkZXIBB190cmFkZXIEDXBvc2l0aW9uQXNzZXQJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgMJAAACBQ1wb3NpdGlvbkFzc2V0CQDYBAEJAQpxdW90ZUFzc2V0AAkAlAoCAAAFDXBvc2l0aW9uQXNzZXQEA2tleQkBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMJAKUIAQUEdGhpcwUNcG9zaXRpb25Bc3NldAUHX3RyYWRlcgQGYm9ycm93CQELdmFsdWVPckVsc2UCCQCaCAIJARFjb2xsYXRlcmFsQWRkcmVzcwAFA2tleQAACQCUCgIFBmJvcnJvdwUNcG9zaXRpb25Bc3NldAEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBBBkb0dldEZlZURpc2NvdW50CQD8BwQJAQxtaW5lckFkZHJlc3MAAhJjb21wdXRlRmVlRGlzY291bnQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUQZG9HZXRGZWVEaXNjb3VudAUQZG9HZXRGZWVEaXNjb3VudAQLZmVlRGlzY291bnQEByRtYXRjaDAFEGRvR2V0RmVlRGlzY291bnQDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIhSW52YWxpZCBjb21wdXRlRmVlRGlzY291bnQgcmVzdWx0BA0kdDAzNjQ5NDM2NTY4CQEOZ2V0QWRqdXN0ZWRGZWUCBQtfYXJ0aWZhY3RJZAULZmVlRGlzY291bnQEC2FkanVzdGVkRmVlCAUNJHQwMzY0OTQzNjU2OAJfMQQMYnVybkFydGlmYWN0CAUNJHQwMzY0OTQzNjU2OAJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1nZXRBcnRpZmFjdElkAQFpBAphcnRpZmFjdElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAISSW52YWxpZCBhcnRpZmFjdElkAgAFCmFydGlmYWN0SWQBDWRpc3RyaWJ1dGVGZWUBCl9mZWVBbW91bnQEDGZlZVRvU3Rha2VycwkBBG11bGQCBQpfZmVlQW1vdW50CQETZmVlVG9TdGFrZXJzUGVyY2VudAAECmZlZVRvVmF1bHQJAGUCBQpfZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMJAJQKAgUMZmVlVG9TdGFrZXJzBQpmZWVUb1ZhdWx0AQ51cGRhdGVTZXR0aW5ncwwQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX21heE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19mZWVUb1N0YWtlcnNQZXJjZW50BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhPcmFjbGVEZWxheQUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFA25pbAENdXBkYXRlRnVuZGluZwURX25leHRGdW5kaW5nQmxvY2skX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xvbmdGdW5kaW5nUmF0ZRFfc2hvcnRGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19uZXh0RnVuZGluZ0Jsb2NrBRFfbmV4dEZ1bmRpbmdCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19sb25nRnVuZGluZ1JhdGUFEF9sb25nRnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfc2hvcnRGdW5kaW5nUmF0ZQURX3Nob3J0RnVuZGluZ1JhdGUFA25pbAETdXBkYXRlUG9zaXRpb25Bc3NldAIIX2FkZHJlc3MIX2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQhfYWRkcmVzcwUIX2Fzc2V0SWQFA25pbAEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgINaXNOZXdQb3NpdGlvbghfYWRkcmVzcwMFDWlzTmV3UG9zaXRpb24ED2N1cnJlbnRTZXF1ZW5jZQkBDGxhc3RTZXF1ZW5jZQAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQUIX2FkZHJlc3MJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa19zZXF1ZW5jZQkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABBQNuaWwFA25pbAEOdXBkYXRlUG9zaXRpb24FCF9hZGRyZXNzBV9zaXplB19tYXJnaW4NX29wZW5Ob3Rpb25hbCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzBQVfc2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUIX2FkZHJlc3MFB19tYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzBQ1fb3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FA25pbAEKYXBwZW5kVHdhcAEGX3ByaWNlBAhtaW51dGVJZAkAaQIJAGkCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcADoBwA8BBBwcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAADCQBmAgUQcHJldmlvdXNNaW51dGVJZAUIbWludXRlSWQJAAIBAhFUV0FQIG91dC1vZi1vcmRlcgQMbGFzdE1pbnV0ZUlkAwkAAAIFEHByZXZpb3VzTWludXRlSWQAAAUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQDCQBmAgUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUJcHJldlByaWNlBARsaXN0CQELcHVzaFRvUXVldWUDCQEJc3RyVG9MaXN0AQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAFDVRXQVBfSU5URVJWQUwJAKQDAQUIbWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQZfcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rX2xhc3RNaW51dGVJZAUIbWludXRlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19sYXN0RGF0YVN0cgkBCWxpc3RUb1N0cgEFBGxpc3QFA25pbAQYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkAAAEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUGX3ByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQlwcmV2UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQZfcHJpY2UFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBEHVwZGF0ZUFtbVdlaWdodHMCB19xdEFzdFcHX2JzQXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19xdW90ZUFzc2V0V2VpZ2h0BQdfcXRBc3RXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2Jhc2VBc3NldFdlaWdodAUHX2JzQXN0VwUDbmlsAQl1cGRhdGVBbW0IB19xdEFzdFIHX2JzQXN0UhdfdG90YWxQb3NpdGlvblNpemVBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZRZfdG90YWxMb25nT3Blbk5vdGlvbmFsF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwADCQECIT0CCQBlAgUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGEludmFsaWQgQU1NIHN0YXRlIGRhdGE6IAkApAMBBRZfdG90YWxMb25nUG9zaXRpb25TaXplAgQgKyAgCQCkAwEFF190b3RhbFNob3J0UG9zaXRpb25TaXplAgQgIT0gCQCkAwEFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDOCAIJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgUHX3F0QXN0UgUHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa190b3RhbFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwFFV9vcGVuSW50ZXJlc3ROb3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXa190b3RhbExvbmdQb3NpdGlvblNpemUFFl90b3RhbExvbmdQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfb3BlbkludGVyZXN0TG9uZwUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19vcGVuSW50ZXJlc3RTaG9ydAUXX3RvdGFsU2hvcnRPcGVuTm90aW9uYWwFA25pbAkBCmFwcGVuZFR3YXABCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXAQ5kZWxldGVQb3NpdGlvbgEIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUIX2FkZHJlc3MFA25pbAEId2l0aGRyYXcCCF9hZGRyZXNzB19hbW91bnQEB2JhbGFuY2UJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAZgIFB19hbW91bnQFB2JhbGFuY2UJAAIBCQCsAgIJAKwCAgkArAICAhNVbmFibGUgdG8gd2l0aGRyYXcgCQCkAwEFB19hbW91bnQCFyBmcm9tIGNvbnRyYWN0IGJhbGFuY2UgCQCkAwEFB2JhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIX2FkZHJlc3MFB19hbW91bnQJAQpxdW90ZUFzc2V0AAUDbmlsAQ11cGRhdGVCYWxhbmNlAQFpAwkAZgIAAAUBaQkAAgECB0JhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtfYmFsYW5jZQUBaQUDbmlsAQt0cmFuc2ZlckZlZQEBaQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEOc3Rha2luZ0FkZHJlc3MABQFpCQEKcXVvdGVBc3NldAAFA25pbAEOZG9CdXJuQXJ0aWZhY3QCDV9idXJuQXJ0aWZhY3QBaQMFDV9idXJuQXJ0aWZhY3QJAMwIAgkBBEJ1cm4CCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAIQSW52YWxpZCBhcnRpZmFjdAABBQNuaWwFA25pbBcBaQEFcGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFEludmFsaWQgcGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAYFA25pbAFpAQd1bnBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhZJbnZhbGlkIHVucGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAcFA25pbAFpAQxzZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECG0ludmFsaWQgc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkGBQNuaWwBaQEOdW5zZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgdW5zZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQcFA25pbAFpAQxhZGRMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECG0ludmFsaWQgYWRkTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBRiYXNlQXNzZXRBbW91bnRUb0FkZAkAZQIJAQRkaXZkAgkBBG11bGQCBQtxdEFzdFJBZnRlcgUHX3F0QXN0VwUFcHJpY2UFB19ic0FzdFIEC2JzQXN0UkFmdGVyCQBkAgUHX2JzQXN0UgUUYmFzZUFzc2V0QW1vdW50VG9BZGQEDSR0MDQ1NTkwNDU3NDEJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDQ1NTkwNDU3NDECXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDQ1NTkwNDU3NDECXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA0NTU5MDQ1NzQxAl8zBA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUNbWFyZ2luVG9WYXVsdAAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUNbWFyZ2luVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD3JlbW92ZUxpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIeSW52YWxpZCByZW1vdmVMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBDmNoYW5nZVNldHRpbmdzDBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncwwFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5AWkBCmluaXRpYWxpemUSB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQdfb3JhY2xlCl9vcmFjbGVLZXkPX29yYWNsZUJsb2NrS2V5DF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkDAwMDAwMDAwMDAwMDAwMDCQBnAgAABQdfcXRBc3RSBgkAZwIAAAUHX2JzQXN0UgYJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGcCAAAFD19tYXhPcmFjbGVEZWxheQYJAQtpbml0aWFsaXplZAAJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tCAUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzDAUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkJAQ11cGRhdGVGdW5kaW5nBQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUFa19vcmEFB19vcmFjbGUJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa19vcmFfa2V5BQpfb3JhY2xlS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tfb3JhX2Jsb2NrX2tleQUPX29yYWNsZUJsb2NrS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IFA25pbAFpARBkZWNyZWFzZVBvc2l0aW9uAwdfYW1vdW50CV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50BARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpAwMDAwMDCQBnAgAABQdfYW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIjSW52YWxpZCBkZWNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDQ5NjA4NDk3NDgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDQ5NjA4NDk3NDgCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNDk2MDg0OTc0OAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA0OTYwODQ5NzQ4Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDQ5NjA4NDk3NDgCXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDQ5OTIxNTAwMjUJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDQ5OTIxNTAwMjUCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA0OTkyMTUwMDI1Al8yBA0kdDA1MDAzMTUyNjczAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAQNJHQwNTA0NDY1MDYzMAkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDUwNDQ2NTA2MzACXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1MDQ0NjUwNjMwAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1MDQ0NjUwNjMwAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTA0NDY1MDYzMAJfNAQYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwcJAAIBCQCsAgIJAKwCAgkArAICAiVUb28gbGl0dGxlIGJhc2UgYXNzZXQgZXhjaGFuZ2VkLCBnb3QgCQCkAwEFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwIKIGV4cGVjdGVkIAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BAtyZWFsaXplZFBubAkBBGRpdmQCCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQNJHQwNTEwNjc1MTI5NgkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDUxMDY3NTEyOTYCXzEEB2JhZERlYnQIBQ0kdDA1MTA2NzUxMjk2Al8yBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQxvcGVuTm90aW9uYWwEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAJ4KDAUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUMb3Blbk5vdGlvbmFsAAAJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTAwMzE1MjY3MwJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1MDAzMTUyNjczAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDUwMDMxNTI2NzMCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTAwMzE1MjY3MwJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTAwMzE1MjY3MwJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDUwMDMxNTI2NzMCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA1MDAzMTUyNjczAl83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTAwMzE1MjY3MwJfOAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA1MDAzMTUyNjczAl85BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1MDAzMTUyNjczA18xMAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1MDAzMTUyNjczA18xMQQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTAwMzE1MjY3MwNfMTIEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGluY3JlYXNlUG9zaXRpb24ECl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQIX3JlZkxpbmsEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAQRaXNDb2xsYXRlcmFsQXNzZXQJARBpc1doaXRlbGlzdEFzc2V0AQULX2Fzc2V0SWRTdHIDAwMDAwMDAwMDCQECIT0CBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkBAiE9AgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBwYJAGcCAAAFCl9yYXdBbW91bnQGCQEBIQEJAQtpbml0aWFsaXplZAAGAwkBASEBBQxpc1F1b3RlQXNzZXQJAQEhAQURaXNDb2xsYXRlcmFsQXNzZXQHBgkBASEBCQEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA1NDEzNTU0MjIwCQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgkBDWdldEFydGlmYWN0SWQBBQFpBAthZGp1c3RlZEZlZQgFDSR0MDU0MTM1NTQyMjACXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDU0MTM1NTQyMjACXzIEDHJhd0ZlZUFtb3VudAkBBG11bGQCBQpfcmF3QW1vdW50BQthZGp1c3RlZEZlZQQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFDHJhd0ZlZUFtb3VudAQTZGlzdHJpYnV0ZUZlZUFtb3VudAMFEWlzQ29sbGF0ZXJhbEFzc2V0BAhkb0JvcnJvdwkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgZib3Jyb3cJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUHX2Ftb3VudAUDbmlsAwkAAAIFCGRvQm9ycm93BQhkb0JvcnJvdwQNYmFsYW5jZUJlZm9yZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCF9hc3NldElkBQxyYXdGZWVBbW91bnQFA25pbAMJAAACBQZkb1N3YXAFBmRvU3dhcAQMYmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQxiYWxhbmNlQWZ0ZXIFDGJhbGFuY2VBZnRlcgQPZXhjaGFuZ2VkQW1vdW50CQBlAgUMYmFsYW5jZUFmdGVyBQ1iYWxhbmNlQmVmb3JlAwkAAAIFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50BQ9leGNoYW5nZWRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FDHJhd0ZlZUFtb3VudAMJAAACBRNkaXN0cmlidXRlRmVlQW1vdW50BRNkaXN0cmlidXRlRmVlQW1vdW50BA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAIVYWNjZXB0UGF5bWVudFdpdGhMaW5rCQDMCAIFB190cmFkZXIJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRNkaXN0cmlidXRlRmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDU1NTM2NTU2NzYJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDU1NTM2NTU2NzYCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTU1MzY1NTY3NgJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1NTUzNjU1Njc2Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDU1NTM2NTU2NzYCXzQEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA1NTk2NTU4OTI3AwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTY0Mjc1NjYwMAkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDU2NDI3NTY2MDACXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjQyNzU2NjAwAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjQyNzU2NjAwAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTY0Mjc1NjYwMAJfNAMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50CQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAIDIDwgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUMb3Blbk5vdGlvbmFsAAAEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFDG9wZW5Ob3Rpb25hbAAABA0kdDA1NzE0NjU3MzY3CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA1NzE0NjU3MzY3Al8xBAJ4MQgFDSR0MDU3MTQ2NTczNjcCXzIEAngyCAUNJHQwNTcxNDY1NzM2NwJfMwMJAQEhAQkBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAAIBAhVPdmVyIG1heCBzcHJlYWQgbGltaXQDCQEBIQEJAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAAIBAhZPdmVyIG1heCBvcGVuIG5vdGlvbmFsCQCeCgwFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZAIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAJAGQCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTg2Mjc1ODc0MwkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDU4NjI3NTg3NDMCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA1ODYyNzU4NzQzAl8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTU5NjU1ODkyNwJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1NTk2NTU4OTI3Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU1OTY1NTg5MjcCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTU5NjU1ODkyNwJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTU5NjU1ODkyNwJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDU1OTY1NTg5MjcCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA1NTk2NTU4OTI3Al83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTU5NjU1ODkyNwJfOAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA1NTk2NTU4OTI3Al85BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1NTk2NTU4OTI3A18xMAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1NTk2NTU4OTI3A18xMQQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTU5NjU1ODkyNwNfMTIEDSR0MDU4OTMzNTg5OTAJAQ1kaXN0cmlidXRlRmVlAQUJZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMIBQ0kdDA1ODkzMzU4OTkwAl8xBApmZWVUb1ZhdWx0CAUNJHQwNTg5MzM1ODk5MAJfMgQFc3Rha2UDBQxpc1F1b3RlQXNzZXQEBXN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIFDWlzTmV3UG9zaXRpb24FB190cmFkZXIJARN1cGRhdGVQb3NpdGlvbkFzc2V0AgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkBDmRvQnVybkFydGlmYWN0AgUMYnVybkFydGlmYWN0BQFpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAQRaXNDb2xsYXRlcmFsQXNzZXQJARBpc1doaXRlbGlzdEFzc2V0AQULX2Fzc2V0SWRTdHIDAwMDAwMDAwkBASEBBQxpc1F1b3RlQXNzZXQJAQEhAQURaXNDb2xsYXRlcmFsQXNzZXQHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaXNTYW1lQXNzZXQCBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjA5NjI2MTA0NwkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIJAQ1nZXRBcnRpZmFjdElkAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA2MDk2MjYxMDQ3Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA2MDk2MjYxMDQ3Al8yBAxyYXdGZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAULYWRqdXN0ZWRGZWUEB19hbW91bnQJAGUCBQpfcmF3QW1vdW50BQxyYXdGZWVBbW91bnQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQDBRFpc0NvbGxhdGVyYWxBc3NldAQIZG9Cb3Jyb3cJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIGYm9ycm93CQDMCAIFB190cmFkZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFB19hbW91bnQFA25pbAMJAAACBQhkb0JvcnJvdwUIZG9Cb3Jyb3cEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDWJhbGFuY2VCZWZvcmUFDWJhbGFuY2VCZWZvcmUEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUMcmF3RmVlQW1vdW50BQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAEDGJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUMYmFsYW5jZUFmdGVyBQxiYWxhbmNlQWZ0ZXIED2V4Y2hhbmdlZEFtb3VudAkAZQIFDGJhbGFuY2VBZnRlcgUNYmFsYW5jZUJlZm9yZQMJAAACBQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQxyYXdGZWVBbW91bnQDCQAAAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAUTZGlzdHJpYnV0ZUZlZUFtb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACDWFjY2VwdFBheW1lbnQJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNjIzNDY2MjQ4NgkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjIzNDY2MjQ4NgJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2MjM0NjYyNDg2Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDYyMzQ2NjI0ODYCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjIzNDY2MjQ4NgJfNAQNJHQwNjI0OTI2MjU0OQkBDWRpc3RyaWJ1dGVGZWUBBQlmZWVBbW91bnQEDGZlZVRvU3Rha2VycwgFDSR0MDYyNDkyNjI1NDkCXzEECmZlZVRvVmF1bHQIBQ0kdDA2MjQ5MjYyNTQ5Al8yBAVzdGFrZQMFDGlzUXVvdGVBc3NldAQFc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUJAGQCBRFvbGRQb3NpdGlvbk1hcmdpbgUHX2Ftb3VudAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVNYXJnaW4BB19hbW91bnQEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjM2ODU2MzgyNQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjM2ODU2MzgyNQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2MzY4NTYzODI1Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDYzNjg1NjM4MjUCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjM2ODU2MzgyNQJfNAQLbWFyZ2luRGVsdGEJAQEtAQUHX2Ftb3VudAQNJHQwNjM4NjI2NDA0MQkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULbWFyZ2luRGVsdGEEDHJlbWFpbk1hcmdpbggFDSR0MDYzODYyNjQwNDECXzEEB2JhZERlYnQIBQ0kdDA2Mzg2MjY0MDQxAl8yAwkBAiE9AgUHYmFkRGVidAAACQACAQIdSW52YWxpZCByZW1vdmVkIG1hcmdpbiBhbW91bnQEC21hcmdpblJhdGlvCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBD2luaXRNYXJnaW5SYXRpbwAGCQACAQkArAICCQCsAgIJAKwCAgIZVG9vIG11Y2ggbWFyZ2luIHJlbW92ZWQ6IAkApAMBBQttYXJnaW5SYXRpbwIDIDwgCQCkAwEJAQ9pbml0TWFyZ2luUmF0aW8ABA1xdW90ZUFzc2V0U3RyCQDYBAEJAQpxdW90ZUFzc2V0AAQNJHQwNjQ0ODU2NDUzOQkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDY0NDg1NjQ1MzkCXzEEB2Fzc2V0SWQIBQ0kdDA2NDQ4NTY0NTM5Al8yBAd0b1JlcGF5AwkAZgIFB19hbW91bnQFCGJvcnJvd2VkBQhib3Jyb3dlZAUHX2Ftb3VudAQKdG9XaXRoZHJhdwMJAGYCBQhib3Jyb3dlZAUHX2Ftb3VudAAACQBlAgUHX2Ftb3VudAUIYm9ycm93ZWQEC2ZpbmFsQm9ycm93CQBlAgUIYm9ycm93ZWQFB3RvUmVwYXkEFXN3aXRjaFBvc2l0aW9uVG9RdW90ZQMJAGYCBQtmaW5hbEJvcnJvdwAABQNuaWwJARN1cGRhdGVQb3NpdGlvbkFzc2V0AgUHX3RyYWRlcgUNcXVvdGVBc3NldFN0cgQNZG9TYW5pdHlDaGVjawMJAQIhPQIJAGQCBQd0b1JlcGF5BQp0b1dpdGhkcmF3BQdfYW1vdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCHRvUmVwYXk9CQCkAwEFB3RvUmVwYXkCDiArIHRvV2l0aGRyYXc9CQCkAwEFCnRvV2l0aGRyYXcCBCAhPSAJAKQDAQUHX2Ftb3VudAUDbmlsAwkAAAIFDWRvU2FuaXR5Q2hlY2sFDWRvU2FuaXR5Q2hlY2sECWRvVW5zdGFrZQMJAGYCBQp0b1dpdGhkcmF3AAAECWRvVW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUKdG9XaXRoZHJhdwUDbmlsBQNuaWwDCQAAAgUJZG9VbnN0YWtlBQlkb1Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCWRvVW5zdGFrZQUJZG9VbnN0YWtlBBZyZXR1cm5Db2xsYXRlcmFsQWN0aW9uAwkAZgIFB3RvUmVwYXkAAAQHZG9SZXBheQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgVyZXBheQkAzAgCBQdfdHJhZGVyCQDMCAIFB3RvUmVwYXkJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUHZG9SZXBheQUHZG9SZXBheQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB3RvUmVwYXkJANkEAQUHYXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgkAzggCCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplAwkAZgIFCnRvV2l0aGRyYXcAAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQp0b1dpdGhkcmF3BQNuaWwJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQFFXN3aXRjaFBvc2l0aW9uVG9RdW90ZQUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uAgVfc2l6ZRRfbWluUXVvdGVBc3NldEFtb3VudAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQOX3RyYWRlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQdfdHJhZGVyAg5JbnZhbGlkIGNhbGxlcgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDY2NzIzNjY4NjMJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY2NzIzNjY4NjMCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjY3MjM2Njg2MwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NjcyMzY2ODYzAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY2NzIzNjY4NjMCXzQEDSR0MDY2ODY5NzE5OTkDCQBmAgkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQUFX3NpemUECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDY3NDYwNjc2ODIJAQpzd2FwT3V0cHV0AwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQVfc2l6ZQYEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA2NzQ2MDY3NjgyAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjc0NjA2NzY4MgJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjc0NjA2NzY4MgJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDY3NDYwNjc2ODICXzQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkBAS0BBQVfc2l6ZQUFX3NpemUEDSR0MDY3NzczNjc5MjcJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDY3NzczNjc5MjcCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA2Nzc3MzY3OTI3Al8yBAJtcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEDXJlYWxpemVkUmF0aW8JAQRkaXZkAgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUNcmVhbGl6ZWRSYXRpbwQScmVtYWluTWFyZ2luQmVmb3JlCAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAJfMQQNJHQwNjg0Mjg2ODY1NgkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwEAngxCAUNJHQwNjg0Mjg2ODY1NgJfMQQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNjg0Mjg2ODY1NgJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA2ODQyODY4NjU2Al8zBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsBBFuZXdQb3NpdGlvbk1hcmdpbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAQRtdWxkAgkAZAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFAm1yBRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQEEbXVsZAIJAGUCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQJtcgUSdW5yZWFsaXplZFBubEFmdGVyBBFvcGVuTm90aW9uYWxEZWx0YQkAZQIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFEW9wZW5Ob3Rpb25hbERlbHRhAwMJAQIhPQIFFF9taW5RdW90ZUFzc2V0QW1vdW50AAAJAGYCBRRfbWluUXVvdGVBc3NldEFtb3VudAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQCAyA8IAkApAMBBRRfbWluUXVvdGVBc3NldEFtb3VudAkAoQoPBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYFD3Bvc2l0aW9uQmFkRGVidAULcmVhbGl6ZWRQbmwJAGUCBRJyZW1haW5NYXJnaW5CZWZvcmUJAGQCBRFuZXdQb3NpdGlvbk1hcmdpbgUSdW5yZWFsaXplZFBubEFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBRFvcGVuTm90aW9uYWxEZWx0YQAAAwkAZgIFBV9zaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplCQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDcwOTQwNzEzNTkJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQdfdHJhZGVyBgQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDcwOTQwNzEzNTkCXzEED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDcwOTQwNzEzNTkCXzIEC3JlYWxpemVkUG5sCAUNJHQwNzA5NDA3MTM1OQJfMwQNbWFyZ2luVG9WYXVsdAgFDSR0MDcwOTQwNzEzNTkCXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3MDk0MDcxMzU5Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3MDk0MDcxMzU5Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzA5NDA3MTM1OQJfNwQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDcwOTQwNzEzNTkCXzgEAngyCAUNJHQwNzA5NDA3MTM1OQJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA3MDk0MDcxMzU5A18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNzA5NDA3MTM1OQNfMTEEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzA5NDA3MTM1OQNfMTIEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDcwOTQwNzEzNTkDXzEzAwMJAQIhPQIFFF9taW5RdW90ZUFzc2V0QW1vdW50AAAJAGYCBRRfbWluUXVvdGVBc3NldEFtb3VudAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQCAyA8IAkApAMBBRRfbWluUXVvdGVBc3NldEFtb3VudAkAoQoPAAAAAAAAAAAFD3Bvc2l0aW9uQmFkRGVidAULcmVhbGl6ZWRQbmwFDW1hcmdpblRvVmF1bHQFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNjY4Njk3MTk5OQJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA2Njg2OTcxOTk5Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY2ODY5NzE5OTkCXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjY4Njk3MTk5OQJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNjY4Njk3MTk5OQJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA2Njg2OTcxOTk5Al82BA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNjY4Njk3MTk5OQJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDY2ODY5NzE5OTkCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDY2ODY5NzE5OTkCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2Njg2OTcxOTk5A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDY2ODY5NzE5OTkDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDY2ODY5NzE5OTkDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA2Njg2OTcxOTk5A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2Njg2OTcxOTk5A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjY4Njk3MTk5OQNfMTUDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAiZVbmFibGUgdG8gY2xvc2UgcG9zaXRpb24gd2l0aCBiYWQgZGVidAQOd2l0aGRyYXdBbW91bnQJAQNhYnMBBQ1tYXJnaW5Ub1ZhdWx0BAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDSR0MDcyMjA4NzI0MTUDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1hbW1OZXdCYWxhbmNlCAUNJHQwNzIyMDg3MjQxNQJfMQQDeDExCAUNJHQwNzIyMDg3MjQxNQJfMgQNJHQwNzI0MjI3MjQ3NgkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDcyNDIyNzI0NzYCXzEEB2Fzc2V0SWQIBQ0kdDA3MjQyMjcyNDc2Al8yBA0kdDA3MjQ5MTczMzUwAwkAZgIFCGJvcnJvd2VkAAADCQBnAgUOd2l0aGRyYXdBbW91bnQFCGJvcnJvd2VkBAdkb1JlcGF5CQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACBXJlcGF5CQDMCAIFB190cmFkZXIJAMwIAgUIYm9ycm93ZWQJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUHZG9SZXBheQUHZG9SZXBheQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDl90cmFkZXJBZGRyZXNzBQhib3Jyb3dlZAkA2QQBBQdhc3NldElkBQNuaWwJAGUCBQ53aXRoZHJhd0Ftb3VudAUIYm9ycm93ZWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ED3JlYWxpemVBbmRDbG9zZQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAhhyZWFsaXplUGFydGlhbGx5QW5kQ2xvc2UJAMwIAgUHX3RyYWRlcgkAzAgCBQ53aXRoZHJhd0Ftb3VudAkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQ9yZWFsaXplQW5kQ2xvc2UFD3JlYWxpemVBbmRDbG9zZQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDl90cmFkZXJBZGRyZXNzBQ53aXRoZHJhd0Ftb3VudAkA2QQBBQdhc3NldElkBQNuaWwAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQNuaWwFDndpdGhkcmF3QW1vdW50AwkAAAIFDSR0MDcyNDkxNzMzNTAFDSR0MDcyNDkxNzMzNTAEE3F1b3RlV2l0aGRyYXdBbW91bnQIBQ0kdDA3MjQ5MTczMzUwAl8yBBRzZW5kQ29sbGF0ZXJhbEFjdGlvbggFDSR0MDcyNDkxNzMzNTACXzEEB3Vuc3Rha2UDCQBmAgUTcXVvdGVXaXRoZHJhd0Ftb3VudAAABAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRNxdW90ZVdpdGhkcmF3QW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCAwkAAAIFD25ld1Bvc2l0aW9uU2l6ZQAACQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIDCQBmAgUTcXVvdGVXaXRoZHJhd0Ftb3VudAAACQEId2l0aGRyYXcCBQ5fdHJhZGVyQWRkcmVzcwUTcXVvdGVXaXRoZHJhd0Ftb3VudAUDbmlsCQENdXBkYXRlQmFsYW5jZQEFDWFtbU5ld0JhbGFuY2UFFHNlbmRDb2xsYXRlcmFsQWN0aW9uCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWxpcXVpZGF0ZQEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBAttYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABwYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQMDAwkAZgIFD3Nwb3RNYXJnaW5SYXRpbwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABwkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAcEDSR0MDc1NjcxNzU4MjEJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDc1NjcxNzU4MjECXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNzU2NzE3NTgyMQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA3NTY3MTc1ODIxAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDc1NjcxNzU4MjECXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUEDSR0MDc2MDQ2NzYxNTAJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDc2MDQ2NzYxNTACXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA3NjA0Njc2MTUwAl8yBA0kdDA3NjE1ODc2MzQ1CQEJc3dhcElucHV0AgUFaXNBZGQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDc2MTU4NzYzNDUCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NjE1ODc2MzQ1Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NjE1ODc2MzQ1Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzYxNTg3NjM0NQJfNAQQbGlxdWlkYXRpb25SYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBAtyZWFsaXplZFBubAkBBG11bGQCBQ11bnJlYWxpemVkUG5sBRBsaXF1aWRhdGlvblJhdGlvBA0kdDA3NjYzNDc2ODY3CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNzY2MzQ3Njg2NwJfMQQHYmFkRGVidAgFDSR0MDc2NjM0NzY4NjcCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNzY2MzQ3Njg2NwJfMwQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBJsaXF1aWRhdGlvblBlbmFsdHkJAQRtdWxkAgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ABA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBBFuZXdQb3NpdGlvbk1hcmdpbgkAZQIFDHJlbWFpbk1hcmdpbgUSbGlxdWlkYXRpb25QZW5hbHR5BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBBRuZXdQb3NpdGlvbkxzdFVwZENQRgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRFvcGVuTm90aW9uYWxEZWx0YQQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNJHQwNzgxMDg3ODIzNwMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDW5ld0FtbUJhbGFuY2UIBQ0kdDA3ODEwODc4MjM3Al8xBAN4MTEIBQ0kdDA3ODEwODc4MjM3Al8yBA0kdDA3ODI0NTc4Mjk5CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNzgyNDU3ODI5OQJfMQQHYXNzZXRJZAgFDSR0MDc4MjQ1NzgyOTkCXzIEFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAMJAGYCBQhib3Jyb3dlZAAABBBjb2xsYXRlcmFsVG9TZWxsCQEEbXVsZAIFCGJvcnJvd2VkBRBsaXF1aWRhdGlvblJhdGlvBA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIQcmVhbGl6ZVBhcnRpYWxseQkAzAgCBQdfdHJhZGVyCQDMCAIFB2Fzc2V0SWQJAMwIAgUQY29sbGF0ZXJhbFRvU2VsbAUDbmlsBQNuaWwDCQAAAgUPcmVhbGl6ZUFuZENsb3NlBQ9yZWFsaXplQW5kQ2xvc2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAUVZG9MaXF1aWRhdGVDb2xsYXRlcmFsBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQURb3Blbk5vdGlvbmFsRGVsdGEAAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwNzk5Nzg4MDQ3MwkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIHBAJ4MQgFDSR0MDc5OTc4ODA0NzMCXzEEB2JhZERlYnQIBQ0kdDA3OTk3ODgwNDczAl8yBAJ4MggFDSR0MDc5OTc4ODA0NzMCXzMEAngzCAUNJHQwNzk5Nzg4MDQ3MwJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDc5OTc4ODA0NzMCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDc5OTc4ODA0NzMCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3OTk3ODgwNDczAl83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNzk5Nzg4MDQ3MwJfOAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDc5OTc4ODA0NzMCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNzk5Nzg4MDQ3MwNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDc5OTc4ODA0NzMDXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDc5OTc4ODA0NzMDXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3OTk3ODgwNDczA18xMwQSbGlxdWlkYXRpb25QZW5hbHR5CQEEbXVsZAIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIECmZlZVRvVmF1bHQJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNJHQwODA4ODE4MTAxMAMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDW5ld0FtbUJhbGFuY2UIBQ0kdDA4MDg4MTgxMDEwAl8xBAN4MTEIBQ0kdDA4MDg4MTgxMDEwAl8yBA0kdDA4MTAxODgxMDcyCQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwODEwMTg4MTA3MgJfMQQHYXNzZXRJZAgFDSR0MDgxMDE4ODEwNzICXzIEFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAMJAGYCBQhib3Jyb3dlZAAABA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIYcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlCQDMCAIFB190cmFkZXIJAMwIAgAACQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFD3JlYWxpemVBbmRDbG9zZQUPcmVhbGl6ZUFuZENsb3NlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAQBeAMJAGYCBQdiYWREZWJ0AAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUHYmFkRGVidAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQF4BQF4BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgAABQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAADAwMJAGYCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAIBQlsYXN0QmxvY2sJdGltZXN0YW1wBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXACAyA8IAkApAMBBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwODI5NDQ4MzAwNgkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDgyOTQ0ODMwMDYCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4Mjk0NDgzMDA2Al8yCQENdXBkYXRlRnVuZGluZwUJAGQCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGQCCQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRNsb25nUHJlbWl1bUZyYWN0aW9uCQBkAgkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUABAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEDSR0MDgzNDM4ODM1NzMJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFB19xdEFzdFIFB19ic0FzdFIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA4MzQzODgzNTczAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA4MzQzODgzNTczAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwODM0Mzg4MzU3MwJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFE25ld1F1b3RlQXNzZXRXZWlnaHQJAQRtdWxkAgUHX2JzQXN0UgUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBJ3ZpZXdfY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA0kdDA4NDE0Mjg0MjQzCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDA4NDE0Mjg0MjQzAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDg0MTQyODQyNDMCXzIEA3BvbggFDSR0MDg0MTQyODQyNDMCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwODQxNDI4NDI0MwJfNAQNJHQwODQyNDY4NDM0NwkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwODQyNDY4NDM0NwJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDg0MjQ2ODQzNDcCXzIEDSR0MDg0MzUwODQ1MjIJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDg0MzUwODQ1MjICXzEEB2JhZERlYnQIBQ0kdDA4NDM1MDg0NTIyAl8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDg0MzUwODQ1MjICXzMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARV2aWV3X2dldFBlZ0FkanVzdENvc3QBBl9wcmljZQQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAZyZXN1bHQJARRnZXRTeW5jVGVybWluYWxQcmljZQMFBl9wcmljZQUHX3F0QXN0UgUHX2JzQXN0UgkAAgEJAKQDAQgFBnJlc3VsdAJfMwFpARh2aWV3X2dldFRlcm1pbmFsQW1tUHJpY2UABA0kdDA4NDkzODg1MDE5CQETZ2V0VGVybWluYWxBbW1TdGF0ZQAEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDA4NDkzODg1MDE5Al8xBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDA4NDkzODg1MDE5Al8yBAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFcACQEEbXVsZAIFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0VwAJAAIBCQCkAwEFBXByaWNlAWkBD3ZpZXdfZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwODUyMzQ4NTI5NgkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDg1MjM0ODUyOTYCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4NTIzNDg1Mjk2Al8yBAtsb25nRnVuZGluZwkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UEDHNob3J0RnVuZGluZwkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQkArAICCQCsAgIJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcJAQFzAQkBEGdldFR3YXBTcG90UHJpY2UACQEBcwEJAQ5nZXRPcmFjbGVQcmljZQABaQEYdmlld19nZXRCb3Jyb3dlZEJ5VHJhZGVyAQdfdHJhZGVyBA0kdDA4NTU4Mjg1NjM2CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwODU1ODI4NTYzNgJfMQQHYXNzZXRJZAgFDSR0MDg1NTgyODU2MzYCXzIJAAIBCQCsAgIJAQFzAQUIYm9ycm93ZWQFB2Fzc2V0SWQBaQEQY29tcHV0ZVNwb3RQcmljZQAEBnJlc3VsdAkBDGdldFNwb3RQcmljZQAJAJQKAgUDbmlsBQZyZXN1bHQBaQEfY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQGcmVzdWx0CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgULX2FydGlmYWN0SWQJAJQKAgUDbmlsBQZyZXN1bHQBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEOYWRtaW5QdWJsaWNLZXkAvswaUQ==", "height": 2394770, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5LKvTSH76LxRz3oKWL61zSii1nngsWqFndasbF5wgAbU Next: 76rRPVtt1eTk9uhhRYZEn6uaPvdbeSnXR24x4QmSaUYZ Diff:
OldNewDifferences
450450 }
451451
452452
453-func cH (cI,cJ,cK,cL) = {
454- let cM = toBigInt(cI)
455- let cN = toBigInt(cJ)
456- let cO = toBigInt(cK)
457- let cP = toBigInt(cL)
458- aY(aY(cM, cN), aY(cO, cP))
459- }
460-
461-
462-func cQ (cC,cD) = {
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) = {
463461 let cI = bG()
464- let cK = bH()
465- let cJ = bI()
466- let cL = bJ()
467- let by = cH(cI, cJ, cK, cL)
468- let cR = if (cC)
469- then (cI + cD)
470- else (cI - cD)
471- let cS = toInt(aX(by, toBigInt(aU(cR, cJ))))
472- let cT = aS(bb((cS - cK)), cJ)
473- let cU = if (cC)
474- then cT
475- else -(cT)
476- let cV = cB(cC, cD, cT)
477- let cW = cV._1
478- let cX = cV._2
479- let cY = cV._3
480- let cZ = aS(aU(cI, cJ), aU(cK, cL))
481- let da = aS(cD, cT)
482- let db = bb((cZ - da))
483- let dc = (aL - aS(cZ, (cZ + db)))
484- let dd = bW()
485- if ((dc > dd))
486- then throw(((((((((((((("Price impact " + toString(dc)) + " > max price impact ") + toString(dd)) + " before quote asset: ") + toString(cI)) + " before base asset: ") + toString(cK)) + " quote asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cZ)) + " marketPrice: ") + toString(da)))
487- else $Tuple4(cU, cW, cX, cY)
488- }
489-
490-
491-func de (df,dg,dh,di) = {
492- let dj = if ((df != 0))
462+ let cJ = bH()
463+ 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))
493492 then {
494- let dk = cn(df)
495- aU((dk - dh), df)
493+ let dj = cn(de)
494+ aU((dj - dg), de)
496495 }
497496 else 0
498- let dl = ((di - dj) + dg)
499- let dm = if ((0 > dl))
500- then $Tuple2(0, bb(dl))
501- else $Tuple2(bb(dl), 0)
502- let dn = dm._1
503- let do = dm._2
504- $Tuple3(dn, do, dj)
505- }
506-
507-
508-func dp (cC,cE,dq,dr,ds,dt,du) = {
509- let cZ = aS(aU(dr, ds), aU(dt, du))
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))
510509 if ((cE == 0))
511510 then throw("Invalid base asset amount")
512511 else {
513- let by = cH(dr, ds, dt, du)
514- let dv = if (cC)
515- then (dt + cE)
516- else (dt - cE)
517- let dw = toInt(aX(by, toBigInt(aU(dv, du))))
518- let dx = bb((dw - aU(dr, ds)))
519- let dd = bW()
520- let dy = cB(!(cC), dx, cE)
521- let cW = dy._1
522- let cX = dy._2
523- let cY = dy._3
524- let da = aS(dx, cE)
525- let db = bb((cZ - da))
526- let dc = (aL - aS(cZ, (cZ + db)))
527- if (if ((dc > dd))
528- then dq
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
529529 else false)
530- then throw(((((((((((((("Price impact " + toString(dc)) + " > max price impact ") + toString(dd)) + " before quote asset: ") + toString(dr)) + " before base asset: ") + toString(dt)) + " base asset amount to exchange: ") + toString(cE)) + " price before: ") + toString(cZ)) + " market price: ") + toString(da)))
531- else $Tuple7(dx, cW, cX, cY, (cc() - (if (cC)
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)
532532 then bb(cE)
533533 else 0)), (cb() - (if (!(cC))
534534 then bb(cE)
535- else 0)), dc)
536- }
537- }
538-
539-
540-func dz (cC,cE,dq) = dp(cC, cE, dq, bG(), bI(), bH(), bJ())
535+ else 0)), db)
536+ }
537+ }
538+
539+
540+func dz (cC,cE,dp) = do(cC, cE, dp, bG(), bI(), bH(), bJ())
541541
542542
543543 func dA () = {
569569 }
570570
571571
572-func dK (dL,dr,dt,cJ,cL) = {
573- let dM = aS(aU(dr, cJ), aU(dt, cL))
572+func dK (dL,dq,ds,cN,cO) = {
573+ let dM = aS(aU(dq, cN), aU(ds, cO))
574574 let dN = aS((dL + dM), (2 * aL))
575575 let dK = aS(bb((dL - dM)), dN)
576576 dK
577577 }
578578
579579
580-func dO (dr,dt) = {
580+func dO (dq,ds) = {
581581 let dP = dA()
582- let cJ = bI()
583- let cL = bJ()
584- let dQ = dK(dP, bG(), bH(), cJ, cL)
585- let dR = dK(dP, dr, dt, cJ, cL)
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)
586586 if (if ((dR > bX()))
587587 then (dR > dQ)
588588 else false)
602602
603603
604604 func dW () = {
605- let dr = bG()
606- let dt = bH()
607- let cJ = bI()
608- let cL = bJ()
609- aS(aU(dr, cJ), aU(dt, cL))
605+ let dq = bG()
606+ let ds = bH()
607+ let cN = bI()
608+ let cO = bJ()
609+ aS(aU(dq, cN), aU(ds, cO))
610610 }
611611
612612
617617 }
618618
619619
620-func dZ (co,ea,dr,ds,dt,du) = {
620+func dZ (co,ea,dq,dr,ds,dt) = {
621621 let eb = bb(co)
622622 let ec = (0 > co)
623623 let ed = if ((ea == aO))
624624 then {
625- let ee = dp(!(ec), eb, false, dr, ds, dt, du)
625+ let ee = do(!(ec), eb, false, dq, dr, ds, dt)
626626 let ef = ee._1
627627 let eg = ee._2
628628 let eh = ee._3
634634 }
635635
636636
637-func ej (co,ek,dr,ds,dt,du,ea) = if ((co == 0))
637+func ej (co,ek,dq,dr,ds,dt,ea) = if ((co == 0))
638638 then throw("Invalid position size")
639639 else {
640640 let ec = (0 > co)
641- let ed = dZ(co, ea, dr, ds, dt, du)
641+ let ed = dZ(co, ea, dq, dr, ds, dt)
642642 let el = if (ec)
643643 then (ek - ed)
644644 else (ed - ek)
668668 let ey = em(cq, ea)
669669 let ed = ey._1
670670 let el = ey._2
671- let ez = de(ct, eo, eq, el)
672- let dn = ez._1
673- let do = ez._2
674- er(dn, do, ed)
671+ let ez = dd(ct, eo, eq, el)
672+ let dm = ez._1
673+ let dn = ez._2
674+ er(dm, dn, ed)
675675 }
676676
677677
683683 let eD = aU(bb(co), eC)
684684 let eE = dz((co > 0), eD, false)
685685 let eF = eE._1
686- let dc = eE._7
687- if ((bW() > dc))
686+ let db = eE._7
687+ if ((bW() > db))
688688 then eF
689689 else {
690690 let eG = aU(bb(co), bU())
694694 }
695695
696696
697-func eI (cq,dq) = {
697+func eI (cq,dp) = {
698698 let eJ = cp(cq)
699699 let ct = eJ._1
700700 let eo = eJ._2
701701 let ep = eJ._3
702702 let eq = eJ._4
703703 let el = em(cq, aO)._2
704- let eK = de(ct, eo, eq, el)
705- let dn = eK._1
706- let do = eK._2
704+ let eK = dd(ct, eo, eq, el)
705+ let dm = eK._1
706+ let dn = eK._2
707707 let eG = -(ct)
708708 let eL = el
709- let eM = -(dn)
710- let eN = dz((ct > 0), bb(ct), dq)
709+ let eM = -(dm)
710+ let eN = dz((ct > 0), bb(ct), dp)
711711 let eH = eN._1
712- let cR = eN._2
713- let cS = eN._3
712+ let cQ = eN._2
713+ let cR = eN._3
714714 let eO = eN._4
715715 let eP = eN._5
716716 let eQ = eN._6
717717 let eR = (bL() - ep)
718- $Tuple13(eG, do, eL, eM, cR, cS, eO, eR, eH, eP, eQ, (bN() - (if ((ct > 0))
718+ $Tuple13(eG, dn, eL, eM, cQ, cR, eO, eR, eH, eP, eQ, (bN() - (if ((ct > 0))
719719 then ep
720720 else 0)), (bM() - (if ((0 > ct))
721721 then ep
780780 let ft = toBigInt(bK)
781781 let fu = toBigInt(fq)
782782 let fv = toBigInt(fr)
783- let fw = ba((fs + ft), toBigInt((2 * aL)))
784- let fx = aY(fu, fw)
785- let fy = (toBigInt(4) * aY(fv, ft))
786- let fz = aZ(aY(fx, (fu - fy)))
787- let fA = aY(fs, fu)
788- let fB = aY(fu, ft)
789- let fC = ((-(fz) + fA) + fB)
790- let fD = (toBigInt(2) * aY(fu, ft))
791- let fE = aX(fC, fD)
792- toInt(fE)
793- }
794-
795-
796-func fF (fG,cI,cK) = {
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) = {
797793 let co = bK()
798794 if ((co == 0))
799795 then {
800- let fH = aS(aU(fG, cK), cI)
801- $Tuple3(fH, aL, 0)
796+ let fC = aS(aU(fB, cJ), cI)
797+ $Tuple3(fC, aL, 0)
802798 }
803799 else {
804800 let fj = (co > 0)
805801 let fl = dz(fj, bb(co), false)._1
806- let fH = fo(cK, co, cI, fG)
807- let fI = aL
808- let eM = ej(co, fl, cI, fH, cK, fI, aO)._2
809- $Tuple3(fH, fI, eM)
810- }
811- }
812-
813-
814-func fJ () = {
815- let fK = dA()
816- let fL = eS()
817- let fM = (fL - fK)
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)
818814 if (if (if ((cb() == 0))
819815 then true
820816 else (cc() == 0))
821817 then true
822818 else dH())
823819 then $Tuple2(0, 0)
824- else if ((0 > fM))
820+ else if ((0 > fH))
825821 then {
826- let fN = aS(aU(fM, bQ()), aM)
827- let fO = aS(aU(fN, cb()), cc())
828- $Tuple2(fN, fO)
822+ let fI = aS(aU(fH, bQ()), aM)
823+ let fJ = aS(aU(fI, cb()), cc())
824+ $Tuple2(fI, fJ)
829825 }
830826 else {
831- let fO = aS(aU(fM, bQ()), aM)
832- let fN = aS(aU(fO, cc()), cb())
833- $Tuple2(fN, fO)
827+ let fJ = aS(aU(fH, bQ()), aM)
828+ let fI = aS(aU(fJ, cc()), cb())
829+ $Tuple2(fI, fJ)
834830 }
835831 }
836832
837833
838-func fP (fQ,fR) = {
839- let fS = bE()
840- let fT = aU(fS, fR)
841- let fU = if ((fQ != ""))
834+func fK (fL,fM) = {
835+ let fN = bE()
836+ let fO = aU(fN, fM)
837+ let fP = if ((fL != ""))
842838 then {
843- let fV = bB(aw(), aj(aD, fQ))
844- if ((fV == aE))
839+ let fQ = bB(aw(), aj(aD, fL))
840+ if ((fQ == aE))
845841 then {
846- let fW = bC(aw(), aj(aC, fQ))
847- let fX = aU(fT, fW)
848- $Tuple2(fX, true)
842+ let fR = bC(aw(), aj(aC, fL))
843+ let fS = aU(fO, fR)
844+ $Tuple2(fS, true)
849845 }
850846 else throw("Invalid attached artifact")
851847 }
852- else $Tuple2(fT, false)
853- let fX = fU._1
854- let fY = fU._2
855- $Tuple2(fX, fY)
856- }
857-
858-
859-func fZ (cq,aB) = {
860- let ga = cp(cq)._1
861- if ((ga == 0))
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))
862858 then true
863859 else (cu(cq) == aB)
864860 }
865861
866862
867-func gb (cq,aB) = (cu(cq) == aB)
868-
869-
870-func gc (gd,aB,cq) = ((((((ai + "_") + gd) + "_") + aB) + "_") + cq)
871-
872-
873-func ge (cq) = {
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) = {
874870 let cw = cu(cq)
875871 if ((cw == toBase58String(ap())))
876872 then $Tuple2(0, cw)
877873 else {
878- let gf = gc(toString(this), cw, cq)
879- let gg = valueOrElse(getInteger(ax(), gf), 0)
880- $Tuple2(gg, cw)
881- }
882- }
883-
884-
885-func gh (cq,fQ) = {
886- let gi = invoke(at(), "computeFeeDiscount", [cq], nil)
887- if ((gi == gi))
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))
888884 then {
889- let gj = {
890- let cs = gi
885+ let ge = {
886+ let cs = gd
891887 if ($isInstanceOf(cs, "Int"))
892888 then {
893- let gk = cs
894- gk
889+ let gf = cs
890+ gf
895891 }
896892 else throw("Invalid computeFeeDiscount result")
897893 }
898- let gl = fP(fQ, gj)
899- let fX = gl._1
900- let fY = gl._2
901- $Tuple2(fX, fY)
894+ let gg = fK(fL, ge)
895+ let fS = gg._1
896+ let fT = gg._2
897+ $Tuple2(fS, fT)
902898 }
903899 else throw("Strict value is not equal to itself.")
904900 }
905901
906902
907-func gm (ch) = {
908- let gn = if ((size(ch.payments) > 1))
903+func gh (ch) = {
904+ let gi = if ((size(ch.payments) > 1))
909905 then toBase58String(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifactId"))
910906 else ""
911- gn
912- }
913-
914-
915-func go (gp) = {
916- let gq = aU(gp, ce())
917- let gr = (gp - gq)
918- $Tuple2(gq, gr)
919- }
920-
921-
922-func gs (gt,gu,gv,gw,gx,gy,gz,gA,gB,dV,gC,gD) = [IntegerEntry(r, gt), IntegerEntry(s, gu), IntegerEntry(t, gv), IntegerEntry(q, gw), IntegerEntry(p, gx), IntegerEntry(v, gy), IntegerEntry(w, gz), IntegerEntry(u, gA), IntegerEntry(x, gB), IntegerEntry(y, dV), IntegerEntry(z, gC), IntegerEntry(A, gC)]
923-
924-
925-func gE (gF,gG,gH,gI,gJ) = [IntegerEntry(I, gF), IntegerEntry(G, gG), IntegerEntry(H, gH), IntegerEntry(J, gI), IntegerEntry(K, gJ)]
926-
927-
928-func gK (al,aB) = [StringEntry(aj(l, al), aB)]
929-
930-
931-func gL (gM,al) = if (gM)
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)
932928 then {
933- let gN = cd()
934-[IntegerEntry(aj(k, al), (gN + 1)), IntegerEntry(f, (gN + 1))]
929+ let gI = cd()
930+[IntegerEntry(aj(k, al), (gI + 1)), IntegerEntry(f, (gI + 1))]
935931 }
936932 else nil
937933
938934
939-func gO (al,gP,gQ,gR,dk) = [IntegerEntry(aj(g, al), gP), IntegerEntry(aj(h, al), gQ), IntegerEntry(aj(i, al), gR), IntegerEntry(aj(j, al), dk)]
940-
941-
942-func gS (gT) = {
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) = {
943939 let eT = ((lastBlock.timestamp / 1000) / 60)
944- let gU = valueOrElse(getInteger(this, C), 0)
945- if ((gU > eT))
940+ let gP = valueOrElse(getInteger(this, C), 0)
941+ if ((gP > eT))
946942 then throw("TWAP out-of-order")
947943 else {
948- let fb = if ((gU == 0))
944+ let fb = if ((gP == 0))
949945 then eT
950- else gU
951- if ((eT > gU))
946+ else gP
947+ if ((eT > gP))
952948 then {
953- let gV = valueOrElse(getInteger(this, ((D + "_") + toString(gU))), 0)
954- let gW = valueOrElse(getInteger(this, ((E + "_") + toString(gU))), gT)
955- let gX = (gV + ((eT - fb) * gW))
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))
956952 let eW = bu(bs(valueOrElse(getString(this, B), "")), aH, toString(eT))
957-[IntegerEntry(aj(D, toString(eT)), gX), IntegerEntry(aj(E, toString(eT)), gT), IntegerEntry(aj(F, toString(eT)), gU), IntegerEntry(C, eT), StringEntry(B, bd(eW))]
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))]
958954 }
959955 else {
960- let gY = valueOrElse(getInteger(this, aj(F, toString(eT))), 0)
961- let gV = valueOrElse(getInteger(this, aj(D, toString(gY))), 0)
962- let gW = valueOrElse(getInteger(this, aj(E, toString(gY))), gT)
963- let gX = (gV + ((eT - gY) * gW))
964-[IntegerEntry(aj(D, toString(eT)), gX), IntegerEntry(aj(E, toString(eT)), gT)]
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)]
965961 }
966962 }
967963 }
968964
969965
970-func gZ (cI,cK) = [IntegerEntry(L, cI), IntegerEntry(M, cK)]
971-
972-
973-func ha (cJ,cL) = [IntegerEntry(N, cJ), IntegerEntry(O, cL)]
974-
975-
976-func hb (cI,cK,hc,hd,he,hf,hg,hh) = {
977- let cJ = bI()
978- let cL = bJ()
979- if (((he - hf) != hc))
980- then throw(((((("Invalid AMM state data: " + toString(he)) + " + ") + toString(hf)) + " != ") + toString(hc)))
981- else ((gZ(cI, cK) ++ [IntegerEntry(P, hc), IntegerEntry(S, hd), IntegerEntry(Q, he), IntegerEntry(R, hf), IntegerEntry(U, hg), IntegerEntry(T, hh)]) ++ gS(aS(aU(cI, cJ), aU(cK, cL))))
982- }
983-
984-
985-func hi (al) = [DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(i, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(l, al))]
986-
987-
988-func hj (al,hk) = {
989- let hl = assetBalance(this, ap())
990- if ((hk > hl))
991- then throw(((("Unable to withdraw " + toString(hk)) + " from contract balance ") + toString(hl)))
992- else [ScriptTransfer(al, hk, ap())]
993- }
994-
995-
996-func hm (ch) = if ((0 > ch))
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))
997993 then throw("Balance")
998994 else [IntegerEntry(e, ch)]
999995
1000996
1001-func hn (ch) = [ScriptTransfer(ar(), ch, ap())]
1002-
1003-
1004-func ho (hp,ch) = if (hp)
997+func hi (ch) = [ScriptTransfer(ar(), ch, ap())]
998+
999+
1000+func hj (hk,ch) = if (hk)
10051001 then [Burn(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifact"), 1)]
10061002 else nil
10071003
10411037 then throw("Invalid addLiquidity params")
10421038 else {
10431039 let cI = bG()
1044- let cK = bH()
1045- let cJ = bI()
1046- let cL = bJ()
1047- let hq = aS(aU(cI, cJ), aU(cK, cL))
1048- let hr = (cI + cD)
1049- let hs = (aS(aU(hr, cJ), hq) - cK)
1050- let ht = (cK + hs)
1051- let hu = fF(dA(), hr, ht)
1052- let hv = hu._1
1053- let hw = hu._2
1054- let eM = hu._3
1055- let hx = if ((eM != 0))
1040+ let cJ = bH()
1041+ 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))
10561052 then {
1057- let hx = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
1058- if ((hx == hx))
1053+ let hs = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
1054+ if ((hs == hs))
10591055 then nil
10601056 else throw("Strict value is not equal to itself.")
10611057 }
10621058 else nil
1063- if ((hx == hx))
1064- then (gZ(hr, ht) ++ ha(hv, hw))
1059+ if ((hs == hs))
1060+ then (gU(hm, ho) ++ gV(hq, hr))
10651061 else throw("Strict value is not equal to itself.")
10661062 }
10671063
10741070 then throw("Invalid removeLiquidity params")
10751071 else {
10761072 let cI = bG()
1077- let cK = bH()
1078- let cJ = bI()
1079- let cL = bJ()
1080- let hq = aS(aU(cI, cJ), aU(cK, cL))
1081- let hy = aS(cD, hq)
1082- let hr = (cI - cD)
1083- let ht = (cK - hy)
1084- gZ(hr, ht)
1073+ let cJ = bH()
1074+ 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)
10851081 }
10861082
10871083
10881084
10891085 @Callable(ch)
1090-func changeSettings (gt,gu,gv,gw,gx,gy,gz,gA,gB,dV,gC,gD) = if ((ch.caller != an()))
1086+func changeSettings (go,gp,gq,gr,gs,gt,gu,gv,gw,dV,gx,gy) = if ((ch.caller != an()))
10911087 then throw("Invalid changeSettings params")
1092- else gs(gt, gu, gv, gw, gx, gy, gz, gA, gB, dV, gC, gD)
1093-
1094-
1095-
1096-@Callable(ch)
1097-func initialize (cI,cK,gw,gt,gu,gv,gx,hz,hA,hB,hC,gy,gz,gA,gB,dV,gC,gD) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cI))
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))
10981094 then true
1099- else (0 >= cK))
1095+ else (0 >= cJ))
11001096 then true
1101- else (0 >= gw))
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))
1104+ then true
1105+ else (0 >= gs))
11021106 then true
11031107 else (0 >= gt))
11041108 then true
11061110 then true
11071111 else (0 >= gv))
11081112 then true
1113+ else (0 >= gw))
1114+ then true
1115+ else (0 >= dV))
1116+ then true
11091117 else (0 >= gx))
1118+ then true
1119+ else (gx > aL))
11101120 then true
11111121 else (0 >= gy))
11121122 then true
1113- else (0 >= gz))
1114- then true
1115- else (0 >= gA))
1116- then true
1117- else (0 >= gB))
1118- then true
1119- else (0 >= dV))
1120- then true
1121- else (0 >= gC))
1122- then true
1123- else (gC > aL))
1124- then true
1125- else (0 >= gD))
1126- then true
11271123 else cy())
11281124 then throw("Invalid initialize parameters")
1129- else ((((hb(cI, cK, 0, 0, 0, 0, 0, 0) ++ gs(gt, gu, gv, gw, gx, gy, gz, gA, gB, dV, gC, gD)) ++ gE((lastBlock.timestamp + gw), 0, 0, 0, 0)) ++ hm(0)) ++ [BooleanEntry(m, true), StringEntry(d, hz), StringEntry(a, hA), StringEntry(b, hB), StringEntry(V, hC)])
1130-
1131-
1132-
1133-@Callable(ch)
1134-func decreasePosition (hk,hD,hE) = {
1135- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1136- if ((hF == hF))
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))
11371133 then {
11381134 let cq = cg(ch)
1139- if (if (if (if (if (if ((0 >= hk))
1135+ if (if (if (if (if (if ((0 >= hf))
11401136 then true
11411137 else !(cy()))
11421138 then true
1143- else !(ci(aS(aL, hD), bF(), true)))
1139+ else !(ci(aS(aL, hy), bF(), true)))
11441140 then true
11451141 else !(cx(cq)))
11461142 then true
11491145 else dH())
11501146 then throw("Invalid decreasePosition parameters")
11511147 else {
1152- let hG = cp(cq)
1153- let ga = hG._1
1154- let hH = hG._2
1155- let hI = hG._3
1156- let hJ = hG._4
1157- let hK = if ((ga > 0))
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))
11581154 then aG
11591155 else aF
1160- let hL = (hK == aF)
1161- let hM = aU(hk, hD)
1162- let hN = em(cq, aO)
1163- let hO = hN._1
1164- let el = hN._2
1165- let hP = if ((hO > hM))
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))
11661162 then {
1167- let hQ = cQ(hL, hM)
1168- let eG = hQ._1
1169- let cR = hQ._2
1170- let cS = hQ._3
1171- let eO = hQ._4
1172- let hR = bb(eG)
1173- if (if ((hE != 0))
1174- then (hE > hR)
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)
11751171 else false)
1176- then throw(((("Too little base asset exchanged, got " + toString(hR)) + " expected ") + toString(hE)))
1172+ then throw(((("Too little base asset exchanged, got " + toString(hM)) + " expected ") + toString(hz)))
11771173 else {
1178- let eL = aS(aU(el, hR), bb(ga))
1179- let hS = de(ga, hH, hJ, eL)
1180- let dn = hS._1
1181- let do = hS._2
1182- let eH = hM
1183- let hT = (el - eL)
1184- let hU = if ((ga > 0))
1185- then ((hO - eH) - hT)
1186- else ((hT + hO) - eH)
1187- let hV = (ga + eG)
1188- $Tuple12(hV, dn, bb(hU), cn(hV), cS, cR, eO, (bL() - hM), (cc() - (if ((hV > 0))
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))
11891185 then bb(eG)
1190- else 0)), (cb() - (if ((0 > hV))
1186+ else 0)), (cb() - (if ((0 > hQ))
11911187 then bb(eG)
1192- else 0)), (bN() - (if ((hV > 0))
1193- then hM
1194- else 0)), (bM() - (if ((0 > hV))
1195- then hM
1188+ else 0)), (bN() - (if ((hQ > 0))
1189+ then hH
1190+ else 0)), (bM() - (if ((0 > hQ))
1191+ then hH
11961192 else 0)))
11971193 }
11981194 }
11991195 else throw("Close position first")
1200- let hV = hP._1
1201- let hW = hP._2
1202- let hX = hP._3
1203- let hY = hP._4
1204- let cS = hP._5
1205- let cR = hP._6
1206- let eO = hP._7
1207- let eR = hP._8
1208- let eP = hP._9
1209- let eQ = hP._10
1210- let hZ = hP._11
1211- let ia = hP._12
1212- let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1213- if ((ib == ib))
1214- then (gO(cq, hV, hW, hX, hY) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia))
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))
12151211 else throw("Strict value is not equal to itself.")
12161212 }
12171213 }
12211217
12221218
12231219 @Callable(ch)
1224-func increasePosition (hK,hD,hE,ic) = {
1225- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1226- if ((hF == hF))
1220+func increasePosition (hF,hy,hz,hX) = {
1221+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1222+ if ((hA == hA))
12271223 then {
12281224 let cq = cg(ch)
1229- let id = ch.payments[0].amount
1225+ let hY = ch.payments[0].amount
12301226 let aB = ch.payments[0].assetId
1231- let ie = toBase58String(value(aB))
1232- let if = (aB == ap())
1233- let ig = aA(ie)
1234- if (if (if (if (if (if (if (if (if (if ((hK != aF))
1235- then (hK != aG)
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)
12361232 else false)
12371233 then true
1238- else (0 >= id))
1234+ else (0 >= hY))
12391235 then true
12401236 else !(cy()))
12411237 then true
1242- else if (!(if))
1243- then !(ig)
1238+ else if (!(ia))
1239+ then !(ib)
12441240 else false)
12451241 then true
1246- else !(fZ(cq, ie)))
1247- then true
1248- else !(ci(aS(aL, hD), bF(), true)))
1242+ else !(fU(cq, hZ)))
1243+ then true
1244+ else !(ci(aS(aL, hy), bF(), true)))
12491245 then true
12501246 else cz())
12511247 then true
12541250 else dH())
12551251 then throw("Invalid increasePosition parameters")
12561252 else {
1257- let ih = gh(cq, gm(ch))
1258- let fX = ih._1
1259- let fY = ih._2
1260- let ii = aU(id, fX)
1261- let hk = (id - ii)
1262- let ij = if (ig)
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)
12631259 then {
1264- let ik = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hk)])
1265- if ((ik == ik))
1260+ let if = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hf)])
1261+ if ((if == if))
12661262 then {
1267- let il = assetBalance(this, ap())
1268- if ((il == il))
1263+ let ig = assetBalance(this, ap())
1264+ if ((ig == ig))
12691265 then {
1270- let im = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, ii)])
1271- if ((im == im))
1266+ let ih = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, id)])
1267+ if ((ih == ih))
12721268 then {
1273- let in = assetBalance(this, ap())
1274- if ((in == in))
1269+ let ii = assetBalance(this, ap())
1270+ if ((ii == ii))
12751271 then {
1276- let io = (in - il)
1277- if ((io == io))
1278- then io
1272+ let ij = (ii - ig)
1273+ if ((ij == ij))
1274+ then ij
12791275 else throw("Strict value is not equal to itself.")
12801276 }
12811277 else throw("Strict value is not equal to itself.")
12861282 }
12871283 else throw("Strict value is not equal to itself.")
12881284 }
1289- else ii
1290- if ((ij == ij))
1285+ else id
1286+ if ((ie == ie))
12911287 then {
1292- let ip = invoke(av(), "acceptPaymentWithLink", [cq, ic], [AttachedPayment(ap(), ij)])
1293- if ((ip == ip))
1288+ let ik = invoke(av(), "acceptPaymentWithLink", [cq, hX], [AttachedPayment(ap(), ie)])
1289+ if ((ik == ik))
12941290 then {
1295- let iq = {
1296- let cs = ip
1291+ let il = {
1292+ let cs = ik
12971293 if ($isInstanceOf(cs, "Int"))
12981294 then {
1299- let gk = cs
1300- gk
1295+ let gf = cs
1296+ gf
13011297 }
13021298 else throw("Invalid referrerFee")
13031299 }
1304- let ir = (ij - iq)
1305- let is = cp(cq)
1306- let ga = is._1
1307- let hH = is._2
1308- let hI = is._3
1309- let hJ = is._4
1310- let gM = (ga == 0)
1311- let it = if ((ga > 0))
1312- then (hK == aF)
1313- else (hK == aG)
1314- let iu = if (!(gM))
1315- then it
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
13161312 else false
1317- let hL = (hK == aF)
1318- let iv = if (if (gM)
1313+ let hG = (hF == aF)
1314+ let iq = if (if (gH)
13191315 then true
1320- else iu)
1316+ else ip)
13211317 then {
1322- let hM = aU(hk, hD)
1323- let iw = cQ(hL, hM)
1324- let cU = iw._1
1325- let cR = iw._2
1326- let cS = iw._3
1327- let eO = iw._4
1328- if (if ((hE != 0))
1329- then (hE > bb(cU))
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))
13301326 else false)
1331- then throw(((("Limit error: " + toString(bb(cU))) + " < ") + toString(hE)))
1327+ then throw(((("Limit error: " + toString(bb(cT))) + " < ") + toString(hz)))
13321328 else {
1333- let hV = (ga + cU)
1334- let hZ = (bN() + (if ((hV > 0))
1335- then hM
1329+ let hQ = (fV + cT)
1330+ let hU = (bN() + (if ((hQ > 0))
1331+ then hH
13361332 else 0))
1337- let ia = (bM() + (if ((0 > hV))
1338- then hM
1333+ let hV = (bM() + (if ((0 > hQ))
1334+ then hH
13391335 else 0))
1340- let ix = aS(hM, hD)
1341- let iy = de(ga, hH, hJ, ix)
1342- let dn = iy._1
1343- let eg = iy._2
1344- let eh = iy._3
1345- if (!(dO(cR, cS)))
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)))
13461341 then throw("Over max spread limit")
1347- else if (!(dS(hZ, ia)))
1342+ else if (!(dS(hU, hV)))
13481343 then throw("Over max open notional")
1349- else $Tuple12(hV, dn, (hI + hM), cn(hV), cS, cR, eO, (bL() + hM), (cc() + (if ((hV > 0))
1350- then bb(cU)
1351- else 0)), (cb() + (if ((0 > hV))
1352- then bb(cU)
1353- else 0)), hZ, ia)
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)
13541349 }
13551350 }
13561351 else {
1357- let hM = aU(hk, hD)
1358- let iz = em(toString(ch.caller), aO)
1359- let hO = iz._1
1360- let el = iz._2
1361- if ((hO > hM))
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))
13621357 then throw("Use decreasePosition to decrease position size")
13631358 else throw("Close position first")
13641359 }
1365- let hV = iv._1
1366- let hW = iv._2
1367- let hX = iv._3
1368- let hY = iv._4
1369- let cS = iv._5
1370- let cR = iv._6
1371- let eO = iv._7
1372- let eR = iv._8
1373- let eP = iv._9
1374- let eQ = iv._10
1375- let hZ = iv._11
1376- let ia = iv._12
1377- let iA = go(ir)
1378- let gq = iA._1
1379- let gr = iA._2
1380- let iB = if (if)
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)
13811376 then {
1382- let iB = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hk)])
1383- if ((iB == iB))
1377+ let iv = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hf)])
1378+ if ((iv == iv))
13841379 then nil
13851380 else throw("Strict value is not equal to itself.")
13861381 }
13871382 else nil
1388- if ((iB == iB))
1383+ if ((iv == iv))
13891384 then {
1390- let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1391- if ((iC == iC))
1385+ let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1386+ if ((iw == iw))
13921387 then {
1393- let iD = invoke(at(), "notifyFees", [cq, ir], nil)
1394- if ((iD == iD))
1388+ let ix = invoke(at(), "notifyFees", [cq, im], nil)
1389+ if ((ix == ix))
13951390 then {
1396- let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1397- if ((ib == ib))
1398- then ((((((gO(cq, hV, hW, hX, hY) ++ gL(gM, cq)) ++ gK(cq, ie)) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ hn(gq)) ++ hm((bD() + hk))) ++ ho(fY, ch))
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))
13991394 else throw("Strict value is not equal to itself.")
14001395 }
14011396 else throw("Strict value is not equal to itself.")
14161411
14171412 @Callable(ch)
14181413 func addMargin () = {
1419- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1420- if ((hF == hF))
1414+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1415+ if ((hA == hA))
14211416 then {
14221417 let cq = toString(ch.caller)
1423- let id = ch.payments[0].amount
1418+ let hY = ch.payments[0].amount
14241419 let aB = ch.payments[0].assetId
1425- let ie = toBase58String(value(aB))
1426- let if = (aB == ap())
1427- let ig = aA(ie)
1428- if (if (if (if (if (if (if (if (!(if))
1429- then !(ig)
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)
14301425 else false)
14311426 then true
14321427 else !(cx(toString(ch.caller))))
14331428 then true
1434- else !(gb(cq, ie)))
1429+ else !(fW(cq, hZ)))
14351430 then true
14361431 else !(cy()))
14371432 then true
14421437 else dH())
14431438 then throw("Invalid addMargin parameters")
14441439 else {
1445- let iE = gh(cq, gm(ch))
1446- let fX = iE._1
1447- let fY = iE._2
1448- let ii = aU(id, fX)
1449- let hk = (id - ii)
1450- let ij = if (ig)
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)
14511446 then {
1452- let ik = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hk)])
1453- if ((ik == ik))
1447+ let if = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hf)])
1448+ if ((if == if))
14541449 then {
1455- let il = assetBalance(this, ap())
1456- if ((il == il))
1450+ let ig = assetBalance(this, ap())
1451+ if ((ig == ig))
14571452 then {
1458- let im = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, ii)])
1459- if ((im == im))
1453+ let ih = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, id)])
1454+ if ((ih == ih))
14601455 then {
1461- let in = assetBalance(this, ap())
1462- if ((in == in))
1456+ let ii = assetBalance(this, ap())
1457+ if ((ii == ii))
14631458 then {
1464- let io = (in - il)
1465- if ((io == io))
1466- then io
1459+ let ij = (ii - ig)
1460+ if ((ij == ij))
1461+ then ij
14671462 else throw("Strict value is not equal to itself.")
14681463 }
14691464 else throw("Strict value is not equal to itself.")
14741469 }
14751470 else throw("Strict value is not equal to itself.")
14761471 }
1477- else ii
1478- if ((ij == ij))
1472+ else id
1473+ if ((ie == ie))
14791474 then {
1480- let ip = invoke(av(), "acceptPayment", [cq], [AttachedPayment(ap(), ij)])
1481- if ((ip == ip))
1475+ let ik = invoke(av(), "acceptPayment", [cq], [AttachedPayment(ap(), ie)])
1476+ if ((ik == ik))
14821477 then {
1483- let iq = {
1484- let cs = ip
1478+ let il = {
1479+ let cs = ik
14851480 if ($isInstanceOf(cs, "Int"))
14861481 then {
1487- let gk = cs
1488- gk
1482+ let gf = cs
1483+ gf
14891484 }
14901485 else throw("Invalid referrerFee")
14911486 }
1492- let ir = (ij - iq)
1493- let iF = cp(cq)
1494- let ga = iF._1
1495- let hH = iF._2
1496- let hI = iF._3
1497- let hJ = iF._4
1498- let iG = go(ir)
1499- let gq = iG._1
1500- let gr = iG._2
1501- let iB = if (if)
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)
15021497 then {
1503- let iB = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hk)])
1504- if ((iB == iB))
1498+ let iv = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hf)])
1499+ if ((iv == iv))
15051500 then nil
15061501 else throw("Strict value is not equal to itself.")
15071502 }
15081503 else nil
1509- if ((iB == iB))
1504+ if ((iv == iv))
15101505 then {
1511- let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1512- if ((iC == iC))
1506+ let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1507+ if ((iw == iw))
15131508 then {
1514- let iD = invoke(at(), "notifyFees", [cq, ir], nil)
1515- if ((iD == iD))
1516- then (((gO(cq, ga, (hH + hk), hI, hJ) ++ hn(gq)) ++ hm((bD() + hk))) ++ ho(fY, ch))
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))
15171512 else throw("Strict value is not equal to itself.")
15181513 }
15191514 else throw("Strict value is not equal to itself.")
15311526
15321527
15331528 @Callable(ch)
1534-func removeMargin (hk) = {
1535- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1536- if ((hF == hF))
1529+func removeMargin (hf) = {
1530+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1531+ if ((hA == hA))
15371532 then {
15381533 let cq = toString(ch.caller)
1539- if (if (if (if (if ((0 >= hk))
1534+ if (if (if (if (if ((0 >= hf))
15401535 then true
15411536 else !(cx(cq)))
15421537 then true
15471542 else dH())
15481543 then throw("Invalid removeMargin parameters")
15491544 else {
1550- let iH = cp(cq)
1551- let ga = iH._1
1552- let hH = iH._2
1553- let hI = iH._3
1554- let hJ = iH._4
1555- let iI = -(hk)
1556- let iJ = de(ga, hH, hJ, iI)
1557- let dn = iJ._1
1558- let do = iJ._2
1559- if ((do != 0))
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))
15601555 then throw("Invalid removed margin amount")
15611556 else {
1562- let iK = er(dn, do, hI)
1563- if (!(ci(iK, bF(), true)))
1564- then throw(((("Too much margin removed: " + toString(iK)) + " < ") + toString(bF())))
1557+ let iE = er(dm, dn, hD)
1558+ if (!(ci(iE, bF(), true)))
1559+ then throw(((("Too much margin removed: " + toString(iE)) + " < ") + toString(bF())))
15651560 else {
1566- let iL = toBase58String(ap())
1567- let iM = ge(cq)
1568- let iN = iM._1
1569- let iO = iM._2
1570- let iP = if ((hk > iN))
1571- then iN
1572- else hk
1573- let iQ = if ((iN > hk))
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))
15741569 then 0
1575- else (hk - iN)
1576- let iR = (iN - iP)
1577- let iS = if ((iR > 0))
1570+ else (hf - iH)
1571+ let iL = (iH - iJ)
1572+ let iM = if ((iL > 0))
15781573 then nil
1579- else gK(cq, iL)
1580- let iT = if (((iP + iQ) != hk))
1581- then throw(((((("toRepay=" + toString(iP)) + " + toWithdraw=") + toString(iQ)) + " != ") + toString(hk)))
1574+ else gF(cq, iF)
1575+ let iN = if (((iJ + iK) != hf))
1576+ then throw(((((("toRepay=" + toString(iJ)) + " + toWithdraw=") + toString(iK)) + " != ") + toString(hf)))
15821577 else nil
1583- if ((iT == iT))
1578+ if ((iN == iN))
15841579 then {
1585- let iU = if ((iQ > 0))
1580+ let iO = if ((iK > 0))
15861581 then {
1587- let iU = invoke(as(), "withdrawLocked", [iQ], nil)
1588- if ((iU == iU))
1582+ let iO = invoke(as(), "withdrawLocked", [iK], nil)
1583+ if ((iO == iO))
15891584 then nil
15901585 else throw("Strict value is not equal to itself.")
15911586 }
15921587 else nil
1593- if ((iU == iU))
1588+ if ((iO == iO))
15941589 then {
1595- let iV = if ((iP > 0))
1590+ let iP = if ((iJ > 0))
15961591 then {
1597- let iW = invoke(ax(), "repay", [cq, iP, iO], nil)
1598- if ((iW == iW))
1599- then [ScriptTransfer(ch.caller, iP, fromBase58String(iO))]
1592+ let iQ = invoke(ax(), "repay", [cq, iJ, iI], nil)
1593+ if ((iQ == iQ))
1594+ then [ScriptTransfer(ch.caller, iJ, fromBase58String(iI))]
16001595 else throw("Strict value is not equal to itself.")
16011596 }
16021597 else nil
1603- if ((iV == iV))
1604- then ((((gO(cq, ga, dn, hI, cn(ga)) ++ (if ((iQ > 0))
1605- then hj(ch.caller, iQ)
1606- else nil)) ++ hm((bD() - hk))) ++ iS) ++ iV)
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)
16071602 else throw("Strict value is not equal to itself.")
16081603 }
16091604 else throw("Strict value is not equal to itself.")
16191614
16201615
16211616 @Callable(ch)
1622-func closePosition (gP,iX) = {
1623- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1624- if ((hF == hF))
1617+func closePosition (gK,iR) = {
1618+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1619+ if ((hA == hA))
16251620 then {
16261621 let cq = cg(ch)
1627- let iY = valueOrErrorMessage(addressFromString(cq), "Invalid caller")
1622+ let iS = valueOrErrorMessage(addressFromString(cq), "Invalid caller")
16281623 if (if (if (if (if (if (!(cx(cq)))
16291624 then true
16301625 else !(cy()))
16311626 then true
16321627 else cz())
16331628 then true
1634- else (0 >= gP))
1635- then true
1636- else (0 > iX))
1629+ else (0 >= gK))
1630+ then true
1631+ else (0 > iR))
16371632 then true
16381633 else dH())
16391634 then throw("Invalid closePosition parameters")
16401635 else {
1641- let iZ = cp(cq)
1642- let ga = iZ._1
1643- let hH = iZ._2
1644- let hI = iZ._3
1645- let hJ = iZ._4
1646- let ja = if ((bb(ga) > gP))
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))
16471642 then {
1648- let hK = if ((ga > 0))
1643+ let hF = if ((fV > 0))
16491644 then aG
16501645 else aF
1651- let hL = (hK == aF)
1652- let jb = dz((ga > 0), gP, true)
1653- let eH = jb._1
1654- let cR = jb._2
1655- let cS = jb._3
1656- let eO = jb._4
1657- let eG = if ((ga > 0))
1658- then -(gP)
1659- else gP
1660- let jc = em(cq, aO)
1661- let hO = jc._1
1662- let el = jc._2
1663- let jd = ev(cq, aO)
1664- let je = aS(bb(eG), bb(ga))
1665- let eL = aU(el, je)
1666- let jf = de(ga, hH, hJ, el)._1
1667- let jg = de(ga, hH, hJ, eL)
1668- let eg = jg._1
1669- let jh = jg._2
1670- let dj = jg._3
1671- let hT = (el - eL)
1672- let hU = if ((ga > 0))
1673- then ((hO - eH) - hT)
1674- else ((hT + hO) - eH)
1675- let hX = bb(hU)
1676- let ji = if ((ga > 0))
1677- then (aU((hX + hT), jd) - hT)
1678- else (aU((hX - hT), jd) - hT)
1679- let jj = (hI - hX)
1680- let hV = (ga + eG)
1681- let jk = cn(hV)
1682- let eR = (bL() - jj)
1683- if (if ((iX != 0))
1684- then (iX > eH)
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)
16851680 else false)
1686- then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iX)))
1687- else $Tuple15(hV, ji, hX, jk, jh, eL, (jf - (ji + hT)), cR, cS, eO, eR, (cc() - (if ((hV > 0))
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))
16881683 then bb(eG)
1689- else 0)), (cb() - (if ((0 > hV))
1684+ else 0)), (cb() - (if ((0 > hQ))
16901685 then bb(eG)
1691- else 0)), (bN() - (if ((hV > 0))
1692- then jj
1693- else 0)), (bM() - (if ((0 > hV))
1694- then jj
1686+ else 0)), (bN() - (if ((hQ > 0))
1687+ then jd
1688+ else 0)), (bM() - (if ((0 > hQ))
1689+ then jd
16951690 else 0)))
16961691 }
1697- else if ((gP > bb(ga)))
1692+ else if ((gK > bb(fV)))
16981693 then throw("Invalid closePosition parameters")
16991694 else {
1700- let jl = eI(cq, true)
1701- let eH = jl._1
1702- let jh = jl._2
1703- let eL = jl._3
1704- let eM = jl._4
1705- let cR = jl._5
1706- let cS = jl._6
1707- let eO = jl._7
1708- let eR = jl._8
1709- let eh = jl._9
1710- let eP = jl._10
1711- let eQ = jl._11
1712- let hZ = jl._12
1713- let ia = jl._13
1714- if (if ((iX != 0))
1715- then (iX > eH)
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)
17161711 else false)
1717- then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iX)))
1718- else $Tuple15(0, 0, 0, 0, jh, eL, eM, cR, cS, eO, eR, eP, eQ, hZ, ia)
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)
17191714 }
1720- let hV = ja._1
1721- let ji = ja._2
1722- let hX = ja._3
1723- let jk = ja._4
1724- let jh = ja._5
1725- let eL = ja._6
1726- let eM = ja._7
1727- let cR = ja._8
1728- let cS = ja._9
1729- let eO = ja._10
1730- let eR = ja._11
1731- let eP = ja._12
1732- let eQ = ja._13
1733- let hZ = ja._14
1734- let ia = ja._15
1735- if ((jh > 0))
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))
17361731 then throw("Unable to close position with bad debt")
17371732 else {
1738- let jm = bb(eM)
1739- let jn = (bD() - jm)
1740- let jo = if ((0 > jn))
1741- then $Tuple2(0, bb(jn))
1742- else $Tuple2(jn, 0)
1743- let jp = jo._1
1744- let jq = jo._2
1745- let jr = ge(cq)
1746- let iN = jr._1
1747- let iO = jr._2
1748- let js = if ((iN > 0))
1749- then if ((jm >= iN))
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))
17501745 then {
1751- let iW = invoke(ax(), "repay", [cq, iN, iO], nil)
1752- if ((iW == iW))
1753- then $Tuple2([ScriptTransfer(iY, iN, fromBase58String(iO))], (jm - iN))
1746+ let iQ = invoke(ax(), "repay", [cq, iH, iI], nil)
1747+ if ((iQ == iQ))
1748+ then $Tuple2([ScriptTransfer(iS, iH, fromBase58String(iI))], (jg - iH))
17541749 else throw("Strict value is not equal to itself.")
17551750 }
17561751 else {
1757- let jt = invoke(ax(), "realizePartiallyAndClose", [cq, jm, iO], nil)
1758- if ((jt == jt))
1759- then $Tuple2([ScriptTransfer(iY, jm, fromBase58String(iO))], 0)
1752+ let jn = invoke(ax(), "realizePartiallyAndClose", [cq, jg, iI], nil)
1753+ if ((jn == jn))
1754+ then $Tuple2([ScriptTransfer(iS, jg, fromBase58String(iI))], 0)
17601755 else throw("Strict value is not equal to itself.")
17611756 }
1762- else $Tuple2(nil, jm)
1763- if ((js == js))
1757+ else $Tuple2(nil, jg)
1758+ if ((jm == jm))
17641759 then {
1765- let ju = js._2
1766- let jv = js._1
1767- let jw = if ((ju > 0))
1760+ let jo = jm._2
1761+ let jp = jm._1
1762+ let jq = if ((jo > 0))
17681763 then {
1769- let jw = invoke(as(), "withdrawLocked", [ju], nil)
1770- if ((jw == jw))
1764+ let jq = invoke(as(), "withdrawLocked", [jo], nil)
1765+ if ((jq == jq))
17711766 then nil
17721767 else throw("Strict value is not equal to itself.")
17731768 }
17741769 else nil
1775- if ((jw == jw))
1770+ if ((jq == jq))
17761771 then {
1777- let ib = invoke(at(), "notifyNotional", [cq, 0], nil)
1778- if ((ib == ib))
1779- then (((((if ((hV == 0))
1780- then hi(cq)
1781- else gO(cq, hV, ji, hX, jk)) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ (if ((ju > 0))
1782- then hj(iY, ju)
1783- else nil)) ++ hm(jp)) ++ jv)
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)
17841779 else throw("Strict value is not equal to itself.")
17851780 }
17861781 else throw("Strict value is not equal to itself.")
17961791
17971792 @Callable(ch)
17981793 func liquidate (cq) = {
1799- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1800- if ((hF == hF))
1794+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1795+ if ((hA == hA))
18011796 then {
1802- let jx = ev(cq, aO)
1803- let iK = if (dX())
1797+ let jr = ev(cq, aO)
1798+ let iE = if (dX())
18041799 then {
1805- let jy = ev(cq, aP)
1806- bc(jx, jy)
1800+ let js = ev(cq, aP)
1801+ bc(jr, js)
18071802 }
1808- else jx
1809- if (if (if (if (if (!(ci(iK, bS(), false)))
1803+ else jr
1804+ if (if (if (if (if (!(ci(iE, bS(), false)))
18101805 then true
18111806 else !(cx(cq)))
18121807 then true
18161811 then true
18171812 else dH())
18181813 then throw("Unable to liquidate")
1819- else if (if (if ((jx > bT()))
1814+ else if (if (if ((jr > bT()))
18201815 then (bU() > 0)
18211816 else false)
18221817 then (aL > bU())
18231818 else false)
18241819 then {
1825- let jz = cp(cq)
1826- let ga = jz._1
1827- let hH = jz._2
1828- let hI = jz._3
1829- let hJ = jz._4
1830- let hK = if ((ga > 0))
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))
18311826 then aG
18321827 else aF
1833- let hL = (hK == aF)
1834- let eH = eB(cq, ga)
1835- let jA = em(cq, aO)
1836- let hO = jA._1
1837- let el = jA._2
1838- let jB = cQ(hL, eH)
1839- let eG = jB._1
1840- let cR = jB._2
1841- let cS = jB._3
1842- let eO = jB._4
1843- let jC = aS(bb(eG), bb(ga))
1844- let eL = aU(el, jC)
1845- let jD = de(ga, hH, hJ, eL)
1846- let dn = jD._1
1847- let do = jD._2
1848- let dj = jD._3
1849- let hT = (el - eL)
1850- let hU = if ((ga > 0))
1851- then ((hO - eH) - hT)
1852- else ((hT + hO) - eH)
1853- let jE = aU(eH, bT())
1854- let jF = (jE / 2)
1855- let gr = (jE - jF)
1856- let ji = (dn - jE)
1857- let hV = (ga + eG)
1858- let hX = bb(hU)
1859- let jj = (hI - hX)
1860- let jk = cn(hV)
1861- let eR = (bL() - jj)
1862- let jn = (bD() - jE)
1863- let jG = if ((0 > jn))
1864- then $Tuple2(0, bb(jn))
1865- else $Tuple2(jn, 0)
1866- let jH = jG._1
1867- let jq = jG._2
1868- let jI = ge(cq)
1869- let iN = jI._1
1870- let iO = jI._2
1871- let jJ = if ((iN > 0))
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))
18721867 then {
1873- let jK = aU(iN, jC)
1874- let jt = invoke(ax(), "realizePartially", [cq, iO, jK], nil)
1875- if ((jt == jt))
1868+ let jE = aU(iH, jw)
1869+ let jn = invoke(ax(), "realizePartially", [cq, iI, jE], nil)
1870+ if ((jn == jn))
18761871 then nil
18771872 else throw("Strict value is not equal to itself.")
18781873 }
18791874 else nil
1880- if ((jJ == jJ))
1875+ if ((jD == jD))
18811876 then {
1882- let jw = invoke(as(), "withdrawLocked", [jE], nil)
1883- if ((jw == jw))
1877+ let jq = invoke(as(), "withdrawLocked", [jy], nil)
1878+ if ((jq == jq))
18841879 then {
1885- let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1886- if ((iC == iC))
1880+ let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1881+ if ((iw == iw))
18871882 then {
1888- let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1889- if ((ib == ib))
1890- then (((gO(cq, hV, ji, hX, jk) ++ hb(cR, cS, eO, eR, (cc() - (if ((hV > 0))
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))
18911886 then bb(eG)
1892- else 0)), (cb() - (if ((0 > hV))
1887+ else 0)), (cb() - (if ((0 > hQ))
18931888 then bb(eG)
1894- else 0)), (bN() - (if ((hV > 0))
1895- then jj
1896- else 0)), (bM() - (if ((0 > hV))
1897- then jj
1898- else 0)))) ++ hj(ch.caller, jF)) ++ hm(jH))
1889+ else 0)), (bN() - (if ((hQ > 0))
1890+ then jd
1891+ else 0)), (bM() - (if ((0 > hQ))
1892+ then jd
1893+ else 0)))) ++ he(ch.caller, jz)) ++ hh(jB))
18991894 else throw("Strict value is not equal to itself.")
19001895 }
19011896 else throw("Strict value is not equal to itself.")
19051900 else throw("Strict value is not equal to itself.")
19061901 }
19071902 else {
1908- let jL = eI(cq, false)
1909- let eg = jL._1
1910- let do = jL._2
1911- let eh = jL._3
1912- let ei = jL._4
1913- let cR = jL._5
1914- let cS = jL._6
1915- let eO = jL._7
1916- let eR = jL._8
1917- let eH = jL._9
1918- let eP = jL._10
1919- let eQ = jL._11
1920- let hZ = jL._12
1921- let ia = jL._13
1922- let jE = aU(eH, bT())
1923- let jF = (jE / 2)
1924- let gr = (jE - jF)
1925- let jn = (bD() - jE)
1926- let jM = if ((0 > jn))
1927- then $Tuple2(0, bb(jn))
1928- else $Tuple2(jn, 0)
1929- let jH = jM._1
1930- let jq = jM._2
1931- let jN = ge(cq)
1932- let iN = jN._1
1933- let iO = jN._2
1934- let jJ = if ((iN > 0))
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))
19351930 then {
1936- let jt = invoke(ax(), "realizePartiallyAndClose", [cq, 0, iO], nil)
1937- if ((jt == jt))
1931+ let jn = invoke(ax(), "realizePartiallyAndClose", [cq, 0, iI], nil)
1932+ if ((jn == jn))
19381933 then nil
19391934 else throw("Strict value is not equal to itself.")
19401935 }
19411936 else nil
1942- if ((jJ == jJ))
1937+ if ((jD == jD))
19431938 then {
1944- let gk = if ((do > 0))
1939+ let gf = if ((dn > 0))
19451940 then {
1946- let jO = invoke(as(), "exchangeFreeAndLocked", [do], nil)
1947- if ((jO == jO))
1941+ let jI = invoke(as(), "exchangeFreeAndLocked", [dn], nil)
1942+ if ((jI == jI))
19481943 then nil
19491944 else throw("Strict value is not equal to itself.")
19501945 }
19511946 else nil
1952- if ((gk == gk))
1947+ if ((gf == gf))
19531948 then {
1954- let jw = invoke(as(), "withdrawLocked", [jE], nil)
1955- if ((jw == jw))
1949+ let jq = invoke(as(), "withdrawLocked", [jy], nil)
1950+ if ((jq == jq))
19561951 then {
1957- let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1958- if ((iC == iC))
1952+ let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1953+ if ((iw == iw))
19591954 then {
1960- let ib = invoke(at(), "notifyNotional", [cq, 0], nil)
1961- if ((ib == ib))
1962- then (((hi(cq) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ hj(ch.caller, jF)) ++ hm(jH))
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))
19631958 else throw("Strict value is not equal to itself.")
19641959 }
19651960 else throw("Strict value is not equal to itself.")
19781973
19791974 @Callable(ch)
19801975 func payFunding () = {
1981- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1982- if ((hF == hF))
1976+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1977+ if ((hA == hA))
19831978 then {
1984- let jP = bO()
1985- if (if (if ((jP > lastBlock.timestamp))
1979+ let jJ = bO()
1980+ if (if (if ((jJ > lastBlock.timestamp))
19861981 then true
19871982 else !(cy()))
19881983 then true
19891984 else cz())
1990- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jP)))
1985+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jJ)))
19911986 else {
1992- let fK = dA()
1993- let jQ = fJ()
1994- let fN = jQ._1
1995- let fO = jQ._2
1996- gE((jP + bR()), (bZ() + fO), (ca() + fN), aS(fO, fK), aS(fN, fK))
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))
19971992 }
19981993 }
19991994 else throw("Strict value is not equal to itself.")
20041999 @Callable(ch)
20052000 func syncTerminalPriceToOracle () = {
20062001 let cI = bG()
2007- let cK = bH()
2008- let jR = fF(dA(), cI, cK)
2009- let hv = jR._1
2010- let hw = jR._2
2011- let eM = jR._3
2012- let hx = if ((eM != 0))
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))
20132008 then {
2014- let hx = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
2015- if ((hx == hx))
2009+ let hs = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
2010+ if ((hs == hs))
20162011 then nil
20172012 else throw("Strict value is not equal to itself.")
20182013 }
20192014 else nil
2020- if ((hx == hx))
2021- then (ha(hv, hw) ++ gS(aS(aU(cI, hv), aU(cK, hw))))
2015+ if ((hs == hs))
2016+ then (gV(hq, hr) ++ gN(aS(aU(cI, hq), aU(cJ, hr))))
20222017 else throw("Strict value is not equal to itself.")
20232018 }
20242019
20262021
20272022 @Callable(ch)
20282023 func view_calcRemainMarginWithFundingPayment (cq) = {
2029- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
2030- if ((hF == hF))
2024+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
2025+ if ((hA == hA))
20312026 then {
2032- let jS = cp(cq)
2033- let ct = jS._1
2034- let eo = jS._2
2035- let ex = jS._3
2036- let eq = jS._4
2037- let jT = em(cq, aO)
2038- let ed = jT._1
2039- let el = jT._2
2040- let jU = de(ct, eo, eq, el)
2041- let dn = jU._1
2042- let do = jU._2
2043- let dj = jU._3
2044- throw((((((aQ(dn) + aQ(dj)) + aQ(eA(cq))) + aQ(el)) + aQ(do)) + aQ(ed)))
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)))
20452040 }
20462041 else throw("Strict value is not equal to itself.")
20472042 }
20492044
20502045
20512046 @Callable(ch)
2052-func view_getPegAdjustCost (gT) = {
2047+func view_getPegAdjustCost (gO) = {
20532048 let cI = bG()
2054- let cK = bH()
2055- let fE = fF(gT, cI, cK)
2056- throw(toString(fE._3))
2049+ let cJ = bH()
2050+ let fz = fA(gO, cI, cJ)
2051+ throw(toString(fz._3))
20572052 }
20582053
20592054
20602055
20612056 @Callable(ch)
20622057 func view_getTerminalAmmPrice () = {
2063- let jV = fi()
2064- let fm = jV._1
2065- let fn = jV._2
2066- let hq = aS(aU(fm, bI()), aU(fn, bJ()))
2067- throw(toString(hq))
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))
20682063 }
20692064
20702065
20712066
20722067 @Callable(ch)
20732068 func view_getFunding () = {
2074- let fK = dA()
2075- let jW = fJ()
2076- let fN = jW._1
2077- let fO = jW._2
2078- let jX = aS(fO, fK)
2079- let jY = aS(fN, fK)
2080- throw((((aQ(jX) + aQ(jY)) + aQ(eS())) + aQ(dA())))
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())))
20812076 }
20822077
20832078
20842079
20852080 @Callable(ch)
20862081 func view_getBorrowedByTrader (cq) = {
2087- let jZ = ge(cq)
2088- let iN = jZ._1
2089- let iO = jZ._2
2090- throw((aQ(iN) + iO))
2082+ let jT = fZ(cq)
2083+ let iH = jT._1
2084+ let iI = jT._2
2085+ throw((aQ(iH) + iI))
20912086 }
20922087
20932088
20942089
20952090 @Callable(ch)
20962091 func computeSpotPrice () = {
2097- let fE = dW()
2098- $Tuple2(nil, fE)
2099- }
2100-
2101-
2102-
2103-@Callable(ch)
2104-func computeFeeForTraderWithArtifact (cq,fQ) = {
2105- let fE = gh(cq, fQ)
2106- $Tuple2(nil, fE)
2107- }
2108-
2109-
2110-@Verifier(ka)
2111-func kb () = sigVerify(ka.bodyBytes, ka.proofs[0], ao())
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())
21122107
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
2828 let m = "k_initialized"
2929
3030 let n = "k_paused"
3131
3232 let o = "k_closeOnly"
3333
3434 let p = "k_fee"
3535
3636 let q = "k_fundingPeriod"
3737
3838 let r = "k_initMarginRatio"
3939
4040 let s = "k_mmr"
4141
4242 let t = "k_liquidationFeeRatio"
4343
4444 let u = "k_partLiquidationRatio"
4545
4646 let v = "k_spreadLimit"
4747
4848 let w = "k_maxPriceImpact"
4949
5050 let x = "k_maxPriceSpread"
5151
5252 let y = "k_maxOpenNotional"
5353
5454 let z = "k_feeToStakersPercent"
5555
5656 let A = "k_maxOracleDelay"
5757
5858 let B = "k_lastDataStr"
5959
6060 let C = "k_lastMinuteId"
6161
6262 let D = "k_twapDataLastCumulativePrice"
6363
6464 let E = "k_twapDataLastPrice"
6565
6666 let F = "k_twapDataPreviousMinuteId"
6767
6868 let G = "k_latestLongPremiumFraction"
6969
7070 let H = "k_latestShortPremiumFraction"
7171
7272 let I = "k_nextFundingBlockMinTimestamp"
7373
7474 let J = "k_longFundingRate"
7575
7676 let K = "k_shortFundingRate"
7777
7878 let L = "k_qtAstR"
7979
8080 let M = "k_bsAstR"
8181
8282 let N = "k_qtAstW"
8383
8484 let O = "k_bsAstW"
8585
8686 let P = "k_totalPositionSize"
8787
8888 let Q = "k_totalLongPositionSize"
8989
9090 let R = "k_totalShortPositionSize"
9191
9292 let S = "k_openInterestNotional"
9393
9494 let T = "k_openInterestShort"
9595
9696 let U = "k_openInterestLong"
9797
9898 let V = "k_coordinatorAddress"
9999
100100 let W = "k_vault_address"
101101
102102 let X = "k_admin_address"
103103
104104 let Y = "k_admin_public_key"
105105
106106 let Z = "k_quote_asset"
107107
108108 let aa = "k_quote_staking"
109109
110110 let ab = "k_staking_address"
111111
112112 let ac = "k_miner_address"
113113
114114 let ad = "k_orders_address"
115115
116116 let ae = "k_referral_address"
117117
118118 let af = "k_collateral_address"
119119
120120 let ag = "k_exchange_address"
121121
122122 let ah = "k_nft_manager_address"
123123
124124 let ai = "k_trader_market_asset_collateral"
125125
126126 func aj (ak,al) = ((ak + "_") + al)
127127
128128
129129 func am () = valueOrErrorMessage(addressFromString(getStringValue(this, V)), "Coordinator not set")
130130
131131
132132 func an () = addressFromString(getStringValue(am(), X))
133133
134134
135135 func ao () = fromBase58String(getStringValue(am(), Y))
136136
137137
138138 func ap () = fromBase58String(getStringValue(am(), Z))
139139
140140
141141 func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), aa)), "Quote asset staking not set")
142142
143143
144144 func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), ab)), "Staking not set")
145145
146146
147147 func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), W)), "Vault not set")
148148
149149
150150 func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Miner not set")
151151
152152
153153 func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Orders not set")
154154
155155
156156 func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Referral not set")
157157
158158
159159 func aw () = valueOrErrorMessage(addressFromString(getStringValue(am(), ah)), "NFT Manager not set")
160160
161161
162162 func ax () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Collateral Manager not set")
163163
164164
165165 func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(am(), ag), "No swap address")), "Invalid swap address")
166166
167167
168168 let az = "k_whitelist_asset"
169169
170170 func aA (aB) = valueOrElse(getBoolean(ax(), aj(az, aB)), false)
171171
172172
173173 let aC = "k_token_param"
174174
175175 let aD = "k_token_type"
176176
177177 let aE = "fee_reduction"
178178
179179 let aF = 1
180180
181181 let aG = 2
182182
183183 let aH = 15
184184
185185 let aI = 15
186186
187187 let aJ = 1000
188188
189189 let aK = 6
190190
191191 let aL = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
192192
193193 let aM = (86400 * aL)
194194
195195 let aN = 100
196196
197197 let aO = 1
198198
199199 let aP = 2
200200
201201 func aQ (aR) = (toString(aR) + ",")
202202
203203
204204 func aS (aR,aT) = fraction(aR, aL, aT, HALFEVEN)
205205
206206
207207 func aU (aR,aT) = fraction(aR, aT, aL, HALFEVEN)
208208
209209
210210 func aV (aR) = sqrt(aR, aK, aK, HALFEVEN)
211211
212212
213213 func aW (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
214214
215215
216216 func aX (aR,aT) = fraction(aR, toBigInt(aL), aT, HALFEVEN)
217217
218218
219219 func aY (aR,aT) = fraction(aR, aT, toBigInt(aL), HALFEVEN)
220220
221221
222222 func aZ (aR) = sqrtBigInt(aR, aK, aK, HALFEVEN)
223223
224224
225225 func ba (aR,aT) = pow(aR, aK, aT, aK, aK, HALFEVEN)
226226
227227
228228 func bb (aR) = if ((aR > 0))
229229 then aR
230230 else -(aR)
231231
232232
233233 func bc (aR,aT) = if ((aR >= aT))
234234 then aR
235235 else aT
236236
237237
238238 func bd (be) = {
239239 func bf (bg,bh) = ((bg + bh) + ",")
240240
241241 let bi = {
242242 let bj = be
243243 let bk = size(bj)
244244 let bl = ""
245245 func bm (bn,bo) = if ((bo >= bk))
246246 then bn
247247 else bf(bn, bj[bo])
248248
249249 func bp (bn,bo) = if ((bo >= bk))
250250 then bn
251251 else throw("List size exceeds 20")
252252
253253 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)
254254 }
255255 let bq = dropRight(bi, 1)
256256 let br = if ((take(bq, 1) == ","))
257257 then drop(bq, 1)
258258 else bq
259259 br
260260 }
261261
262262
263263 func bs (bt) = split(bt, ",")
264264
265265
266266 func bu (be,bv,bw) = if ((size(be) > bv))
267267 then (removeByIndex(be, 0) :+ bw)
268268 else (be :+ bw)
269269
270270
271271 func bx (by) = valueOrErrorMessage(getInteger(this, by), ("no value for " + by))
272272
273273
274274 func bz (by,bA) = valueOrElse(getInteger(this, by), bA)
275275
276276
277277 func bB (al,ak) = {
278278 let bh = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
279279 bh
280280 }
281281
282282
283283 func bC (al,ak) = {
284284 let bh = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
285285 bh
286286 }
287287
288288
289289 func bD () = bx(e)
290290
291291
292292 func bE () = bx(p)
293293
294294
295295 func bF () = bx(r)
296296
297297
298298 func bG () = bx(L)
299299
300300
301301 func bH () = bx(M)
302302
303303
304304 func bI () = bz(N, aL)
305305
306306
307307 func bJ () = bz(O, aL)
308308
309309
310310 func bK () = bx(P)
311311
312312
313313 func bL () = bx(S)
314314
315315
316316 func bM () = bx(T)
317317
318318
319319 func bN () = bx(U)
320320
321321
322322 func bO () = bx(I)
323323
324324
325325 func bP () = bx(q)
326326
327327
328328 func bQ () = (bP() * aL)
329329
330330
331331 func bR () = (bP() * aJ)
332332
333333
334334 func bS () = bx(s)
335335
336336
337337 func bT () = bx(t)
338338
339339
340340 func bU () = bx(u)
341341
342342
343343 func bV () = bx(v)
344344
345345
346346 func bW () = bx(w)
347347
348348
349349 func bX () = bx(x)
350350
351351
352352 func bY () = bx(y)
353353
354354
355355 func bZ () = bx(G)
356356
357357
358358 func ca () = bx(H)
359359
360360
361361 func cb () = bx(R)
362362
363363
364364 func cc () = bx(Q)
365365
366366
367367 func cd () = bz(f, 0)
368368
369369
370370 func ce () = bx(z)
371371
372372
373373 func cf () = bx(A)
374374
375375
376376 func cg (ch) = valueOrElse(getString(au(), "k_sender"), toString(ch.caller))
377377
378378
379379 func ci (cj,ck,cl) = {
380380 let cm = (cj - ck)
381381 if (if (cl)
382382 then (0 > cm)
383383 else false)
384384 then throw(((("Invalid margin: " + toString(cj)) + " < ") + toString(ck)))
385385 else if (if (!(cl))
386386 then (cm >= 0)
387387 else false)
388388 then throw(((("Invalid margin: " + toString(cj)) + " > ") + toString(ck)))
389389 else true
390390 }
391391
392392
393393 func cn (co) = if ((co == 0))
394394 then throw("Should not be called with _positionSize == 0")
395395 else if ((co > 0))
396396 then bZ()
397397 else ca()
398398
399399
400400 func cp (cq) = {
401401 let cr = getInteger(this, aj(g, cq))
402402 let cs = cr
403403 if ($isInstanceOf(cs, "Int"))
404404 then {
405405 let ct = cs
406406 $Tuple4(ct, getIntegerValue(this, aj(h, cq)), getIntegerValue(this, aj(i, cq)), getIntegerValue(this, aj(j, cq)))
407407 }
408408 else $Tuple4(0, 0, 0, 0)
409409 }
410410
411411
412412 func cu (cq) = {
413413 let cv = getString(this, aj(l, cq))
414414 let cs = cv
415415 if ($isInstanceOf(cs, "String"))
416416 then {
417417 let cw = cs
418418 cw
419419 }
420420 else toBase58String(ap())
421421 }
422422
423423
424424 func cx (cq) = if ((cp(cq)._1 == 0))
425425 then throw("No open position")
426426 else true
427427
428428
429429 func cy () = valueOrElse(getBoolean(this, m), false)
430430
431431
432432 func cz () = valueOrElse(getBoolean(this, n), false)
433433
434434
435435 func cA () = valueOrElse(getBoolean(this, o), false)
436436
437437
438438 func cB (cC,cD,cE) = if (cC)
439439 then {
440440 let cF = (bH() - cE)
441441 if ((0 >= cF))
442442 then throw("Tx lead to base asset reserve <= 0, revert")
443443 else $Tuple3((bG() + cD), cF, (bK() + cE))
444444 }
445445 else {
446446 let cG = (bG() - cD)
447447 if ((0 >= cG))
448448 then throw("Tx lead to base quote reserve <= 0, revert")
449449 else $Tuple3(cG, (bH() + cE), (bK() - cE))
450450 }
451451
452452
453-func cH (cI,cJ,cK,cL) = {
454- let cM = toBigInt(cI)
455- let cN = toBigInt(cJ)
456- let cO = toBigInt(cK)
457- let cP = toBigInt(cL)
458- aY(aY(cM, cN), aY(cO, cP))
459- }
460-
461-
462-func cQ (cC,cD) = {
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) = {
463461 let cI = bG()
464- let cK = bH()
465- let cJ = bI()
466- let cL = bJ()
467- let by = cH(cI, cJ, cK, cL)
468- let cR = if (cC)
469- then (cI + cD)
470- else (cI - cD)
471- let cS = toInt(aX(by, toBigInt(aU(cR, cJ))))
472- let cT = aS(bb((cS - cK)), cJ)
473- let cU = if (cC)
474- then cT
475- else -(cT)
476- let cV = cB(cC, cD, cT)
477- let cW = cV._1
478- let cX = cV._2
479- let cY = cV._3
480- let cZ = aS(aU(cI, cJ), aU(cK, cL))
481- let da = aS(cD, cT)
482- let db = bb((cZ - da))
483- let dc = (aL - aS(cZ, (cZ + db)))
484- let dd = bW()
485- if ((dc > dd))
486- then throw(((((((((((((("Price impact " + toString(dc)) + " > max price impact ") + toString(dd)) + " before quote asset: ") + toString(cI)) + " before base asset: ") + toString(cK)) + " quote asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cZ)) + " marketPrice: ") + toString(da)))
487- else $Tuple4(cU, cW, cX, cY)
488- }
489-
490-
491-func de (df,dg,dh,di) = {
492- let dj = if ((df != 0))
462+ let cJ = bH()
463+ 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))
493492 then {
494- let dk = cn(df)
495- aU((dk - dh), df)
493+ let dj = cn(de)
494+ aU((dj - dg), de)
496495 }
497496 else 0
498- let dl = ((di - dj) + dg)
499- let dm = if ((0 > dl))
500- then $Tuple2(0, bb(dl))
501- else $Tuple2(bb(dl), 0)
502- let dn = dm._1
503- let do = dm._2
504- $Tuple3(dn, do, dj)
505- }
506-
507-
508-func dp (cC,cE,dq,dr,ds,dt,du) = {
509- let cZ = aS(aU(dr, ds), aU(dt, du))
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))
510509 if ((cE == 0))
511510 then throw("Invalid base asset amount")
512511 else {
513- let by = cH(dr, ds, dt, du)
514- let dv = if (cC)
515- then (dt + cE)
516- else (dt - cE)
517- let dw = toInt(aX(by, toBigInt(aU(dv, du))))
518- let dx = bb((dw - aU(dr, ds)))
519- let dd = bW()
520- let dy = cB(!(cC), dx, cE)
521- let cW = dy._1
522- let cX = dy._2
523- let cY = dy._3
524- let da = aS(dx, cE)
525- let db = bb((cZ - da))
526- let dc = (aL - aS(cZ, (cZ + db)))
527- if (if ((dc > dd))
528- then dq
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
529529 else false)
530- then throw(((((((((((((("Price impact " + toString(dc)) + " > max price impact ") + toString(dd)) + " before quote asset: ") + toString(dr)) + " before base asset: ") + toString(dt)) + " base asset amount to exchange: ") + toString(cE)) + " price before: ") + toString(cZ)) + " market price: ") + toString(da)))
531- else $Tuple7(dx, cW, cX, cY, (cc() - (if (cC)
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)
532532 then bb(cE)
533533 else 0)), (cb() - (if (!(cC))
534534 then bb(cE)
535- else 0)), dc)
536- }
537- }
538-
539-
540-func dz (cC,cE,dq) = dp(cC, cE, dq, bG(), bI(), bH(), bJ())
535+ else 0)), db)
536+ }
537+ }
538+
539+
540+func dz (cC,cE,dp) = do(cC, cE, dp, bG(), bI(), bH(), bJ())
541541
542542
543543 func dA () = {
544544 let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
545545 let dC = getStringValue(this, a)
546546 let dD = valueOrErrorMessage(getInteger(dB, dC), ((("Can not get oracle price. Oracle: " + toString(dB)) + " key: ") + dC))
547547 let dE = valueOrElse(getString(this, b), "")
548548 if ((dE != ""))
549549 then {
550550 let dF = lastBlock.height
551551 let dG = valueOrErrorMessage(getInteger(dB, dE), ((("Can not get oracle block. Oracle: " + toString(dB)) + " key: ") + dE))
552552 if (((dF - dG) > cf()))
553553 then throw(((("Oracle stale data. Last oracle block: " + toString(dG)) + " current block: ") + toString(dF)))
554554 else dD
555555 }
556556 else dD
557557 }
558558
559559
560560 func dH () = {
561561 let dB = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
562562 let dI = valueOrElse(getString(this, c), "")
563563 if ((dI != ""))
564564 then {
565565 let dJ = valueOrErrorMessage(getBoolean(dB, dI), ((("Can not get oracle is open/closed. Oracle: " + toString(dB)) + " key: ") + dI))
566566 !(dJ)
567567 }
568568 else false
569569 }
570570
571571
572-func dK (dL,dr,dt,cJ,cL) = {
573- let dM = aS(aU(dr, cJ), aU(dt, cL))
572+func dK (dL,dq,ds,cN,cO) = {
573+ let dM = aS(aU(dq, cN), aU(ds, cO))
574574 let dN = aS((dL + dM), (2 * aL))
575575 let dK = aS(bb((dL - dM)), dN)
576576 dK
577577 }
578578
579579
580-func dO (dr,dt) = {
580+func dO (dq,ds) = {
581581 let dP = dA()
582- let cJ = bI()
583- let cL = bJ()
584- let dQ = dK(dP, bG(), bH(), cJ, cL)
585- let dR = dK(dP, dr, dt, cJ, cL)
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)
586586 if (if ((dR > bX()))
587587 then (dR > dQ)
588588 else false)
589589 then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bX())))
590590 else true
591591 }
592592
593593
594594 func dS (dT,dU) = {
595595 let dV = bY()
596596 if ((dT > dV))
597597 then throw(((("Long open notional " + toString(dT)) + " > max open notional ") + toString(dV)))
598598 else if ((dU > dV))
599599 then throw(((("Short open notional " + toString(dU)) + " > max open notional ") + toString(dV)))
600600 else true
601601 }
602602
603603
604604 func dW () = {
605- let dr = bG()
606- let dt = bH()
607- let cJ = bI()
608- let cL = bJ()
609- aS(aU(dr, cJ), aU(dt, cL))
605+ let dq = bG()
606+ let ds = bH()
607+ let cN = bI()
608+ let cO = bJ()
609+ aS(aU(dq, cN), aU(ds, cO))
610610 }
611611
612612
613613 func dX () = {
614614 let dP = dA()
615615 let dY = dW()
616616 (aS(bb((dP - dY)), dP) > bV())
617617 }
618618
619619
620-func dZ (co,ea,dr,ds,dt,du) = {
620+func dZ (co,ea,dq,dr,ds,dt) = {
621621 let eb = bb(co)
622622 let ec = (0 > co)
623623 let ed = if ((ea == aO))
624624 then {
625- let ee = dp(!(ec), eb, false, dr, ds, dt, du)
625+ let ee = do(!(ec), eb, false, dq, dr, ds, dt)
626626 let ef = ee._1
627627 let eg = ee._2
628628 let eh = ee._3
629629 let ei = ee._4
630630 ef
631631 }
632632 else aU(eb, dA())
633633 ed
634634 }
635635
636636
637-func ej (co,ek,dr,ds,dt,du,ea) = if ((co == 0))
637+func ej (co,ek,dq,dr,ds,dt,ea) = if ((co == 0))
638638 then throw("Invalid position size")
639639 else {
640640 let ec = (0 > co)
641- let ed = dZ(co, ea, dr, ds, dt, du)
641+ let ed = dZ(co, ea, dq, dr, ds, dt)
642642 let el = if (ec)
643643 then (ek - ed)
644644 else (ed - ek)
645645 $Tuple2(ed, el)
646646 }
647647
648648
649649 func em (cq,ea) = {
650650 let en = cp(cq)
651651 let ct = en._1
652652 let eo = en._2
653653 let ep = en._3
654654 let eq = en._4
655655 ej(ct, ep, bG(), bI(), bH(), bJ(), ea)
656656 }
657657
658658
659659 func er (es,et,eu) = aS((es - et), eu)
660660
661661
662662 func ev (cq,ea) = {
663663 let ew = cp(cq)
664664 let ct = ew._1
665665 let eo = ew._2
666666 let ex = ew._3
667667 let eq = ew._4
668668 let ey = em(cq, ea)
669669 let ed = ey._1
670670 let el = ey._2
671- let ez = de(ct, eo, eq, el)
672- let dn = ez._1
673- let do = ez._2
674- er(dn, do, ed)
671+ let ez = dd(ct, eo, eq, el)
672+ let dm = ez._1
673+ let dn = ez._2
674+ er(dm, dn, ed)
675675 }
676676
677677
678678 func eA (cq) = ev(cq, aO)
679679
680680
681681 func eB (cq,co) = {
682682 let eC = bc(bU(), (aL - aS(eA(cq), bS())))
683683 let eD = aU(bb(co), eC)
684684 let eE = dz((co > 0), eD, false)
685685 let eF = eE._1
686- let dc = eE._7
687- if ((bW() > dc))
686+ let db = eE._7
687+ if ((bW() > db))
688688 then eF
689689 else {
690690 let eG = aU(bb(co), bU())
691691 let eH = dz((co > 0), eG, false)._1
692692 eH
693693 }
694694 }
695695
696696
697-func eI (cq,dq) = {
697+func eI (cq,dp) = {
698698 let eJ = cp(cq)
699699 let ct = eJ._1
700700 let eo = eJ._2
701701 let ep = eJ._3
702702 let eq = eJ._4
703703 let el = em(cq, aO)._2
704- let eK = de(ct, eo, eq, el)
705- let dn = eK._1
706- let do = eK._2
704+ let eK = dd(ct, eo, eq, el)
705+ let dm = eK._1
706+ let dn = eK._2
707707 let eG = -(ct)
708708 let eL = el
709- let eM = -(dn)
710- let eN = dz((ct > 0), bb(ct), dq)
709+ let eM = -(dm)
710+ let eN = dz((ct > 0), bb(ct), dp)
711711 let eH = eN._1
712- let cR = eN._2
713- let cS = eN._3
712+ let cQ = eN._2
713+ let cR = eN._3
714714 let eO = eN._4
715715 let eP = eN._5
716716 let eQ = eN._6
717717 let eR = (bL() - ep)
718- $Tuple13(eG, do, eL, eM, cR, cS, eO, eR, eH, eP, eQ, (bN() - (if ((ct > 0))
718+ $Tuple13(eG, dn, eL, eM, cQ, cR, eO, eR, eH, eP, eQ, (bN() - (if ((ct > 0))
719719 then ep
720720 else 0)), (bM() - (if ((0 > ct))
721721 then ep
722722 else 0)))
723723 }
724724
725725
726726 func eS () = {
727727 let eT = ((lastBlock.timestamp / 1000) / 60)
728728 let eU = (eT - aH)
729729 let eV = valueOrElse(getString(this, B), "")
730730 let eW = split(eV, ",")
731731 func eX (bg,eY) = if ((eU >= parseIntValue(eY)))
732732 then (bg :+ parseIntValue(eY))
733733 else bg
734734
735735 let eZ = {
736736 let bj = eW
737737 let bk = size(bj)
738738 let bl = nil
739739 func bm (bn,bo) = if ((bo >= bk))
740740 then bn
741741 else eX(bn, bj[bo])
742742
743743 func bp (bn,bo) = if ((bo >= bk))
744744 then bn
745745 else throw("List size exceeds 20")
746746
747747 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)
748748 }
749749 let fa = if ((size(eZ) > 0))
750750 then max(eZ)
751751 else parseIntValue(eW[0])
752752 let fb = valueOrElse(getInteger(this, C), 0)
753753 let fc = valueOrElse(getInteger(this, ((D + "_") + toString(fb))), 0)
754754 let fd = valueOrElse(getInteger(this, ((E + "_") + toString(fb))), 0)
755755 let fe = (fc + ((eT - fb) * fd))
756756 let ff = valueOrElse(getInteger(this, ((D + "_") + toString(fa))), 0)
757757 let fg = valueOrElse(getInteger(this, ((E + "_") + toString(fa))), 0)
758758 let fh = (ff + ((eU - fa) * fg))
759759 ((fe - fh) / aH)
760760 }
761761
762762
763763 func fi () = {
764764 let co = bK()
765765 if ((co == 0))
766766 then $Tuple2(bG(), bH())
767767 else {
768768 let fj = (co > 0)
769769 let fk = dz(fj, bb(co), false)
770770 let fl = fk._1
771771 let fm = fk._2
772772 let fn = fk._3
773773 $Tuple2(fm, fn)
774774 }
775775 }
776776
777777
778778 func fo (fp,bK,fq,fr) = {
779779 let fs = toBigInt(fp)
780780 let ft = toBigInt(bK)
781781 let fu = toBigInt(fq)
782782 let fv = toBigInt(fr)
783- let fw = ba((fs + ft), toBigInt((2 * aL)))
784- let fx = aY(fu, fw)
785- let fy = (toBigInt(4) * aY(fv, ft))
786- let fz = aZ(aY(fx, (fu - fy)))
787- let fA = aY(fs, fu)
788- let fB = aY(fu, ft)
789- let fC = ((-(fz) + fA) + fB)
790- let fD = (toBigInt(2) * aY(fu, ft))
791- let fE = aX(fC, fD)
792- toInt(fE)
793- }
794-
795-
796-func fF (fG,cI,cK) = {
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) = {
797793 let co = bK()
798794 if ((co == 0))
799795 then {
800- let fH = aS(aU(fG, cK), cI)
801- $Tuple3(fH, aL, 0)
796+ let fC = aS(aU(fB, cJ), cI)
797+ $Tuple3(fC, aL, 0)
802798 }
803799 else {
804800 let fj = (co > 0)
805801 let fl = dz(fj, bb(co), false)._1
806- let fH = fo(cK, co, cI, fG)
807- let fI = aL
808- let eM = ej(co, fl, cI, fH, cK, fI, aO)._2
809- $Tuple3(fH, fI, eM)
810- }
811- }
812-
813-
814-func fJ () = {
815- let fK = dA()
816- let fL = eS()
817- let fM = (fL - fK)
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)
818814 if (if (if ((cb() == 0))
819815 then true
820816 else (cc() == 0))
821817 then true
822818 else dH())
823819 then $Tuple2(0, 0)
824- else if ((0 > fM))
820+ else if ((0 > fH))
825821 then {
826- let fN = aS(aU(fM, bQ()), aM)
827- let fO = aS(aU(fN, cb()), cc())
828- $Tuple2(fN, fO)
822+ let fI = aS(aU(fH, bQ()), aM)
823+ let fJ = aS(aU(fI, cb()), cc())
824+ $Tuple2(fI, fJ)
829825 }
830826 else {
831- let fO = aS(aU(fM, bQ()), aM)
832- let fN = aS(aU(fO, cc()), cb())
833- $Tuple2(fN, fO)
827+ let fJ = aS(aU(fH, bQ()), aM)
828+ let fI = aS(aU(fJ, cc()), cb())
829+ $Tuple2(fI, fJ)
834830 }
835831 }
836832
837833
838-func fP (fQ,fR) = {
839- let fS = bE()
840- let fT = aU(fS, fR)
841- let fU = if ((fQ != ""))
834+func fK (fL,fM) = {
835+ let fN = bE()
836+ let fO = aU(fN, fM)
837+ let fP = if ((fL != ""))
842838 then {
843- let fV = bB(aw(), aj(aD, fQ))
844- if ((fV == aE))
839+ let fQ = bB(aw(), aj(aD, fL))
840+ if ((fQ == aE))
845841 then {
846- let fW = bC(aw(), aj(aC, fQ))
847- let fX = aU(fT, fW)
848- $Tuple2(fX, true)
842+ let fR = bC(aw(), aj(aC, fL))
843+ let fS = aU(fO, fR)
844+ $Tuple2(fS, true)
849845 }
850846 else throw("Invalid attached artifact")
851847 }
852- else $Tuple2(fT, false)
853- let fX = fU._1
854- let fY = fU._2
855- $Tuple2(fX, fY)
856- }
857-
858-
859-func fZ (cq,aB) = {
860- let ga = cp(cq)._1
861- if ((ga == 0))
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))
862858 then true
863859 else (cu(cq) == aB)
864860 }
865861
866862
867-func gb (cq,aB) = (cu(cq) == aB)
868-
869-
870-func gc (gd,aB,cq) = ((((((ai + "_") + gd) + "_") + aB) + "_") + cq)
871-
872-
873-func ge (cq) = {
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) = {
874870 let cw = cu(cq)
875871 if ((cw == toBase58String(ap())))
876872 then $Tuple2(0, cw)
877873 else {
878- let gf = gc(toString(this), cw, cq)
879- let gg = valueOrElse(getInteger(ax(), gf), 0)
880- $Tuple2(gg, cw)
881- }
882- }
883-
884-
885-func gh (cq,fQ) = {
886- let gi = invoke(at(), "computeFeeDiscount", [cq], nil)
887- if ((gi == gi))
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))
888884 then {
889- let gj = {
890- let cs = gi
885+ let ge = {
886+ let cs = gd
891887 if ($isInstanceOf(cs, "Int"))
892888 then {
893- let gk = cs
894- gk
889+ let gf = cs
890+ gf
895891 }
896892 else throw("Invalid computeFeeDiscount result")
897893 }
898- let gl = fP(fQ, gj)
899- let fX = gl._1
900- let fY = gl._2
901- $Tuple2(fX, fY)
894+ let gg = fK(fL, ge)
895+ let fS = gg._1
896+ let fT = gg._2
897+ $Tuple2(fS, fT)
902898 }
903899 else throw("Strict value is not equal to itself.")
904900 }
905901
906902
907-func gm (ch) = {
908- let gn = if ((size(ch.payments) > 1))
903+func gh (ch) = {
904+ let gi = if ((size(ch.payments) > 1))
909905 then toBase58String(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifactId"))
910906 else ""
911- gn
912- }
913-
914-
915-func go (gp) = {
916- let gq = aU(gp, ce())
917- let gr = (gp - gq)
918- $Tuple2(gq, gr)
919- }
920-
921-
922-func gs (gt,gu,gv,gw,gx,gy,gz,gA,gB,dV,gC,gD) = [IntegerEntry(r, gt), IntegerEntry(s, gu), IntegerEntry(t, gv), IntegerEntry(q, gw), IntegerEntry(p, gx), IntegerEntry(v, gy), IntegerEntry(w, gz), IntegerEntry(u, gA), IntegerEntry(x, gB), IntegerEntry(y, dV), IntegerEntry(z, gC), IntegerEntry(A, gC)]
923-
924-
925-func gE (gF,gG,gH,gI,gJ) = [IntegerEntry(I, gF), IntegerEntry(G, gG), IntegerEntry(H, gH), IntegerEntry(J, gI), IntegerEntry(K, gJ)]
926-
927-
928-func gK (al,aB) = [StringEntry(aj(l, al), aB)]
929-
930-
931-func gL (gM,al) = if (gM)
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)
932928 then {
933- let gN = cd()
934-[IntegerEntry(aj(k, al), (gN + 1)), IntegerEntry(f, (gN + 1))]
929+ let gI = cd()
930+[IntegerEntry(aj(k, al), (gI + 1)), IntegerEntry(f, (gI + 1))]
935931 }
936932 else nil
937933
938934
939-func gO (al,gP,gQ,gR,dk) = [IntegerEntry(aj(g, al), gP), IntegerEntry(aj(h, al), gQ), IntegerEntry(aj(i, al), gR), IntegerEntry(aj(j, al), dk)]
940-
941-
942-func gS (gT) = {
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) = {
943939 let eT = ((lastBlock.timestamp / 1000) / 60)
944- let gU = valueOrElse(getInteger(this, C), 0)
945- if ((gU > eT))
940+ let gP = valueOrElse(getInteger(this, C), 0)
941+ if ((gP > eT))
946942 then throw("TWAP out-of-order")
947943 else {
948- let fb = if ((gU == 0))
944+ let fb = if ((gP == 0))
949945 then eT
950- else gU
951- if ((eT > gU))
946+ else gP
947+ if ((eT > gP))
952948 then {
953- let gV = valueOrElse(getInteger(this, ((D + "_") + toString(gU))), 0)
954- let gW = valueOrElse(getInteger(this, ((E + "_") + toString(gU))), gT)
955- let gX = (gV + ((eT - fb) * gW))
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))
956952 let eW = bu(bs(valueOrElse(getString(this, B), "")), aH, toString(eT))
957-[IntegerEntry(aj(D, toString(eT)), gX), IntegerEntry(aj(E, toString(eT)), gT), IntegerEntry(aj(F, toString(eT)), gU), IntegerEntry(C, eT), StringEntry(B, bd(eW))]
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))]
958954 }
959955 else {
960- let gY = valueOrElse(getInteger(this, aj(F, toString(eT))), 0)
961- let gV = valueOrElse(getInteger(this, aj(D, toString(gY))), 0)
962- let gW = valueOrElse(getInteger(this, aj(E, toString(gY))), gT)
963- let gX = (gV + ((eT - gY) * gW))
964-[IntegerEntry(aj(D, toString(eT)), gX), IntegerEntry(aj(E, toString(eT)), gT)]
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)]
965961 }
966962 }
967963 }
968964
969965
970-func gZ (cI,cK) = [IntegerEntry(L, cI), IntegerEntry(M, cK)]
971-
972-
973-func ha (cJ,cL) = [IntegerEntry(N, cJ), IntegerEntry(O, cL)]
974-
975-
976-func hb (cI,cK,hc,hd,he,hf,hg,hh) = {
977- let cJ = bI()
978- let cL = bJ()
979- if (((he - hf) != hc))
980- then throw(((((("Invalid AMM state data: " + toString(he)) + " + ") + toString(hf)) + " != ") + toString(hc)))
981- else ((gZ(cI, cK) ++ [IntegerEntry(P, hc), IntegerEntry(S, hd), IntegerEntry(Q, he), IntegerEntry(R, hf), IntegerEntry(U, hg), IntegerEntry(T, hh)]) ++ gS(aS(aU(cI, cJ), aU(cK, cL))))
982- }
983-
984-
985-func hi (al) = [DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(i, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(l, al))]
986-
987-
988-func hj (al,hk) = {
989- let hl = assetBalance(this, ap())
990- if ((hk > hl))
991- then throw(((("Unable to withdraw " + toString(hk)) + " from contract balance ") + toString(hl)))
992- else [ScriptTransfer(al, hk, ap())]
993- }
994-
995-
996-func hm (ch) = if ((0 > ch))
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))
997993 then throw("Balance")
998994 else [IntegerEntry(e, ch)]
999995
1000996
1001-func hn (ch) = [ScriptTransfer(ar(), ch, ap())]
1002-
1003-
1004-func ho (hp,ch) = if (hp)
997+func hi (ch) = [ScriptTransfer(ar(), ch, ap())]
998+
999+
1000+func hj (hk,ch) = if (hk)
10051001 then [Burn(valueOrErrorMessage(ch.payments[1].assetId, "Invalid artifact"), 1)]
10061002 else nil
10071003
10081004
10091005 @Callable(ch)
10101006 func pause () = if ((ch.caller != an()))
10111007 then throw("Invalid pause params")
10121008 else [BooleanEntry(n, true)]
10131009
10141010
10151011
10161012 @Callable(ch)
10171013 func unpause () = if ((ch.caller != an()))
10181014 then throw("Invalid unpause params")
10191015 else [BooleanEntry(n, false)]
10201016
10211017
10221018
10231019 @Callable(ch)
10241020 func setCloseOnly () = if ((ch.caller != an()))
10251021 then throw("Invalid setCloseOnly params")
10261022 else [BooleanEntry(o, true)]
10271023
10281024
10291025
10301026 @Callable(ch)
10311027 func unsetCloseOnly () = if ((ch.caller != an()))
10321028 then throw("Invalid unsetCloseOnly params")
10331029 else [BooleanEntry(o, false)]
10341030
10351031
10361032
10371033 @Callable(ch)
10381034 func addLiquidity (cD) = if (if ((ch.caller != an()))
10391035 then true
10401036 else (0 >= cD))
10411037 then throw("Invalid addLiquidity params")
10421038 else {
10431039 let cI = bG()
1044- let cK = bH()
1045- let cJ = bI()
1046- let cL = bJ()
1047- let hq = aS(aU(cI, cJ), aU(cK, cL))
1048- let hr = (cI + cD)
1049- let hs = (aS(aU(hr, cJ), hq) - cK)
1050- let ht = (cK + hs)
1051- let hu = fF(dA(), hr, ht)
1052- let hv = hu._1
1053- let hw = hu._2
1054- let eM = hu._3
1055- let hx = if ((eM != 0))
1040+ let cJ = bH()
1041+ 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))
10561052 then {
1057- let hx = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
1058- if ((hx == hx))
1053+ let hs = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
1054+ if ((hs == hs))
10591055 then nil
10601056 else throw("Strict value is not equal to itself.")
10611057 }
10621058 else nil
1063- if ((hx == hx))
1064- then (gZ(hr, ht) ++ ha(hv, hw))
1059+ if ((hs == hs))
1060+ then (gU(hm, ho) ++ gV(hq, hr))
10651061 else throw("Strict value is not equal to itself.")
10661062 }
10671063
10681064
10691065
10701066 @Callable(ch)
10711067 func removeLiquidity (cD) = if (if ((ch.caller != an()))
10721068 then true
10731069 else (0 >= cD))
10741070 then throw("Invalid removeLiquidity params")
10751071 else {
10761072 let cI = bG()
1077- let cK = bH()
1078- let cJ = bI()
1079- let cL = bJ()
1080- let hq = aS(aU(cI, cJ), aU(cK, cL))
1081- let hy = aS(cD, hq)
1082- let hr = (cI - cD)
1083- let ht = (cK - hy)
1084- gZ(hr, ht)
1073+ let cJ = bH()
1074+ 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)
10851081 }
10861082
10871083
10881084
10891085 @Callable(ch)
1090-func changeSettings (gt,gu,gv,gw,gx,gy,gz,gA,gB,dV,gC,gD) = if ((ch.caller != an()))
1086+func changeSettings (go,gp,gq,gr,gs,gt,gu,gv,gw,dV,gx,gy) = if ((ch.caller != an()))
10911087 then throw("Invalid changeSettings params")
1092- else gs(gt, gu, gv, gw, gx, gy, gz, gA, gB, dV, gC, gD)
1093-
1094-
1095-
1096-@Callable(ch)
1097-func initialize (cI,cK,gw,gt,gu,gv,gx,hz,hA,hB,hC,gy,gz,gA,gB,dV,gC,gD) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cI))
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))
10981094 then true
1099- else (0 >= cK))
1095+ else (0 >= cJ))
11001096 then true
1101- else (0 >= gw))
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))
1104+ then true
1105+ else (0 >= gs))
11021106 then true
11031107 else (0 >= gt))
11041108 then true
11051109 else (0 >= gu))
11061110 then true
11071111 else (0 >= gv))
11081112 then true
1113+ else (0 >= gw))
1114+ then true
1115+ else (0 >= dV))
1116+ then true
11091117 else (0 >= gx))
1118+ then true
1119+ else (gx > aL))
11101120 then true
11111121 else (0 >= gy))
11121122 then true
1113- else (0 >= gz))
1114- then true
1115- else (0 >= gA))
1116- then true
1117- else (0 >= gB))
1118- then true
1119- else (0 >= dV))
1120- then true
1121- else (0 >= gC))
1122- then true
1123- else (gC > aL))
1124- then true
1125- else (0 >= gD))
1126- then true
11271123 else cy())
11281124 then throw("Invalid initialize parameters")
1129- else ((((hb(cI, cK, 0, 0, 0, 0, 0, 0) ++ gs(gt, gu, gv, gw, gx, gy, gz, gA, gB, dV, gC, gD)) ++ gE((lastBlock.timestamp + gw), 0, 0, 0, 0)) ++ hm(0)) ++ [BooleanEntry(m, true), StringEntry(d, hz), StringEntry(a, hA), StringEntry(b, hB), StringEntry(V, hC)])
1130-
1131-
1132-
1133-@Callable(ch)
1134-func decreasePosition (hk,hD,hE) = {
1135- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1136- if ((hF == hF))
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))
11371133 then {
11381134 let cq = cg(ch)
1139- if (if (if (if (if (if ((0 >= hk))
1135+ if (if (if (if (if (if ((0 >= hf))
11401136 then true
11411137 else !(cy()))
11421138 then true
1143- else !(ci(aS(aL, hD), bF(), true)))
1139+ else !(ci(aS(aL, hy), bF(), true)))
11441140 then true
11451141 else !(cx(cq)))
11461142 then true
11471143 else cz())
11481144 then true
11491145 else dH())
11501146 then throw("Invalid decreasePosition parameters")
11511147 else {
1152- let hG = cp(cq)
1153- let ga = hG._1
1154- let hH = hG._2
1155- let hI = hG._3
1156- let hJ = hG._4
1157- let hK = if ((ga > 0))
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))
11581154 then aG
11591155 else aF
1160- let hL = (hK == aF)
1161- let hM = aU(hk, hD)
1162- let hN = em(cq, aO)
1163- let hO = hN._1
1164- let el = hN._2
1165- let hP = if ((hO > hM))
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))
11661162 then {
1167- let hQ = cQ(hL, hM)
1168- let eG = hQ._1
1169- let cR = hQ._2
1170- let cS = hQ._3
1171- let eO = hQ._4
1172- let hR = bb(eG)
1173- if (if ((hE != 0))
1174- then (hE > hR)
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)
11751171 else false)
1176- then throw(((("Too little base asset exchanged, got " + toString(hR)) + " expected ") + toString(hE)))
1172+ then throw(((("Too little base asset exchanged, got " + toString(hM)) + " expected ") + toString(hz)))
11771173 else {
1178- let eL = aS(aU(el, hR), bb(ga))
1179- let hS = de(ga, hH, hJ, eL)
1180- let dn = hS._1
1181- let do = hS._2
1182- let eH = hM
1183- let hT = (el - eL)
1184- let hU = if ((ga > 0))
1185- then ((hO - eH) - hT)
1186- else ((hT + hO) - eH)
1187- let hV = (ga + eG)
1188- $Tuple12(hV, dn, bb(hU), cn(hV), cS, cR, eO, (bL() - hM), (cc() - (if ((hV > 0))
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))
11891185 then bb(eG)
1190- else 0)), (cb() - (if ((0 > hV))
1186+ else 0)), (cb() - (if ((0 > hQ))
11911187 then bb(eG)
1192- else 0)), (bN() - (if ((hV > 0))
1193- then hM
1194- else 0)), (bM() - (if ((0 > hV))
1195- then hM
1188+ else 0)), (bN() - (if ((hQ > 0))
1189+ then hH
1190+ else 0)), (bM() - (if ((0 > hQ))
1191+ then hH
11961192 else 0)))
11971193 }
11981194 }
11991195 else throw("Close position first")
1200- let hV = hP._1
1201- let hW = hP._2
1202- let hX = hP._3
1203- let hY = hP._4
1204- let cS = hP._5
1205- let cR = hP._6
1206- let eO = hP._7
1207- let eR = hP._8
1208- let eP = hP._9
1209- let eQ = hP._10
1210- let hZ = hP._11
1211- let ia = hP._12
1212- let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1213- if ((ib == ib))
1214- then (gO(cq, hV, hW, hX, hY) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia))
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))
12151211 else throw("Strict value is not equal to itself.")
12161212 }
12171213 }
12181214 else throw("Strict value is not equal to itself.")
12191215 }
12201216
12211217
12221218
12231219 @Callable(ch)
1224-func increasePosition (hK,hD,hE,ic) = {
1225- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1226- if ((hF == hF))
1220+func increasePosition (hF,hy,hz,hX) = {
1221+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1222+ if ((hA == hA))
12271223 then {
12281224 let cq = cg(ch)
1229- let id = ch.payments[0].amount
1225+ let hY = ch.payments[0].amount
12301226 let aB = ch.payments[0].assetId
1231- let ie = toBase58String(value(aB))
1232- let if = (aB == ap())
1233- let ig = aA(ie)
1234- if (if (if (if (if (if (if (if (if (if ((hK != aF))
1235- then (hK != aG)
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)
12361232 else false)
12371233 then true
1238- else (0 >= id))
1234+ else (0 >= hY))
12391235 then true
12401236 else !(cy()))
12411237 then true
1242- else if (!(if))
1243- then !(ig)
1238+ else if (!(ia))
1239+ then !(ib)
12441240 else false)
12451241 then true
1246- else !(fZ(cq, ie)))
1247- then true
1248- else !(ci(aS(aL, hD), bF(), true)))
1242+ else !(fU(cq, hZ)))
1243+ then true
1244+ else !(ci(aS(aL, hy), bF(), true)))
12491245 then true
12501246 else cz())
12511247 then true
12521248 else cA())
12531249 then true
12541250 else dH())
12551251 then throw("Invalid increasePosition parameters")
12561252 else {
1257- let ih = gh(cq, gm(ch))
1258- let fX = ih._1
1259- let fY = ih._2
1260- let ii = aU(id, fX)
1261- let hk = (id - ii)
1262- let ij = if (ig)
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)
12631259 then {
1264- let ik = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hk)])
1265- if ((ik == ik))
1260+ let if = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hf)])
1261+ if ((if == if))
12661262 then {
1267- let il = assetBalance(this, ap())
1268- if ((il == il))
1263+ let ig = assetBalance(this, ap())
1264+ if ((ig == ig))
12691265 then {
1270- let im = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, ii)])
1271- if ((im == im))
1266+ let ih = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, id)])
1267+ if ((ih == ih))
12721268 then {
1273- let in = assetBalance(this, ap())
1274- if ((in == in))
1269+ let ii = assetBalance(this, ap())
1270+ if ((ii == ii))
12751271 then {
1276- let io = (in - il)
1277- if ((io == io))
1278- then io
1272+ let ij = (ii - ig)
1273+ if ((ij == ij))
1274+ then ij
12791275 else throw("Strict value is not equal to itself.")
12801276 }
12811277 else throw("Strict value is not equal to itself.")
12821278 }
12831279 else throw("Strict value is not equal to itself.")
12841280 }
12851281 else throw("Strict value is not equal to itself.")
12861282 }
12871283 else throw("Strict value is not equal to itself.")
12881284 }
1289- else ii
1290- if ((ij == ij))
1285+ else id
1286+ if ((ie == ie))
12911287 then {
1292- let ip = invoke(av(), "acceptPaymentWithLink", [cq, ic], [AttachedPayment(ap(), ij)])
1293- if ((ip == ip))
1288+ let ik = invoke(av(), "acceptPaymentWithLink", [cq, hX], [AttachedPayment(ap(), ie)])
1289+ if ((ik == ik))
12941290 then {
1295- let iq = {
1296- let cs = ip
1291+ let il = {
1292+ let cs = ik
12971293 if ($isInstanceOf(cs, "Int"))
12981294 then {
1299- let gk = cs
1300- gk
1295+ let gf = cs
1296+ gf
13011297 }
13021298 else throw("Invalid referrerFee")
13031299 }
1304- let ir = (ij - iq)
1305- let is = cp(cq)
1306- let ga = is._1
1307- let hH = is._2
1308- let hI = is._3
1309- let hJ = is._4
1310- let gM = (ga == 0)
1311- let it = if ((ga > 0))
1312- then (hK == aF)
1313- else (hK == aG)
1314- let iu = if (!(gM))
1315- then it
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
13161312 else false
1317- let hL = (hK == aF)
1318- let iv = if (if (gM)
1313+ let hG = (hF == aF)
1314+ let iq = if (if (gH)
13191315 then true
1320- else iu)
1316+ else ip)
13211317 then {
1322- let hM = aU(hk, hD)
1323- let iw = cQ(hL, hM)
1324- let cU = iw._1
1325- let cR = iw._2
1326- let cS = iw._3
1327- let eO = iw._4
1328- if (if ((hE != 0))
1329- then (hE > bb(cU))
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))
13301326 else false)
1331- then throw(((("Limit error: " + toString(bb(cU))) + " < ") + toString(hE)))
1327+ then throw(((("Limit error: " + toString(bb(cT))) + " < ") + toString(hz)))
13321328 else {
1333- let hV = (ga + cU)
1334- let hZ = (bN() + (if ((hV > 0))
1335- then hM
1329+ let hQ = (fV + cT)
1330+ let hU = (bN() + (if ((hQ > 0))
1331+ then hH
13361332 else 0))
1337- let ia = (bM() + (if ((0 > hV))
1338- then hM
1333+ let hV = (bM() + (if ((0 > hQ))
1334+ then hH
13391335 else 0))
1340- let ix = aS(hM, hD)
1341- let iy = de(ga, hH, hJ, ix)
1342- let dn = iy._1
1343- let eg = iy._2
1344- let eh = iy._3
1345- if (!(dO(cR, cS)))
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)))
13461341 then throw("Over max spread limit")
1347- else if (!(dS(hZ, ia)))
1342+ else if (!(dS(hU, hV)))
13481343 then throw("Over max open notional")
1349- else $Tuple12(hV, dn, (hI + hM), cn(hV), cS, cR, eO, (bL() + hM), (cc() + (if ((hV > 0))
1350- then bb(cU)
1351- else 0)), (cb() + (if ((0 > hV))
1352- then bb(cU)
1353- else 0)), hZ, ia)
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)
13541349 }
13551350 }
13561351 else {
1357- let hM = aU(hk, hD)
1358- let iz = em(toString(ch.caller), aO)
1359- let hO = iz._1
1360- let el = iz._2
1361- if ((hO > hM))
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))
13621357 then throw("Use decreasePosition to decrease position size")
13631358 else throw("Close position first")
13641359 }
1365- let hV = iv._1
1366- let hW = iv._2
1367- let hX = iv._3
1368- let hY = iv._4
1369- let cS = iv._5
1370- let cR = iv._6
1371- let eO = iv._7
1372- let eR = iv._8
1373- let eP = iv._9
1374- let eQ = iv._10
1375- let hZ = iv._11
1376- let ia = iv._12
1377- let iA = go(ir)
1378- let gq = iA._1
1379- let gr = iA._2
1380- let iB = if (if)
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)
13811376 then {
1382- let iB = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hk)])
1383- if ((iB == iB))
1377+ let iv = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hf)])
1378+ if ((iv == iv))
13841379 then nil
13851380 else throw("Strict value is not equal to itself.")
13861381 }
13871382 else nil
1388- if ((iB == iB))
1383+ if ((iv == iv))
13891384 then {
1390- let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1391- if ((iC == iC))
1385+ let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1386+ if ((iw == iw))
13921387 then {
1393- let iD = invoke(at(), "notifyFees", [cq, ir], nil)
1394- if ((iD == iD))
1388+ let ix = invoke(at(), "notifyFees", [cq, im], nil)
1389+ if ((ix == ix))
13951390 then {
1396- let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1397- if ((ib == ib))
1398- then ((((((gO(cq, hV, hW, hX, hY) ++ gL(gM, cq)) ++ gK(cq, ie)) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ hn(gq)) ++ hm((bD() + hk))) ++ ho(fY, ch))
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))
13991394 else throw("Strict value is not equal to itself.")
14001395 }
14011396 else throw("Strict value is not equal to itself.")
14021397 }
14031398 else throw("Strict value is not equal to itself.")
14041399 }
14051400 else throw("Strict value is not equal to itself.")
14061401 }
14071402 else throw("Strict value is not equal to itself.")
14081403 }
14091404 else throw("Strict value is not equal to itself.")
14101405 }
14111406 }
14121407 else throw("Strict value is not equal to itself.")
14131408 }
14141409
14151410
14161411
14171412 @Callable(ch)
14181413 func addMargin () = {
1419- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1420- if ((hF == hF))
1414+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1415+ if ((hA == hA))
14211416 then {
14221417 let cq = toString(ch.caller)
1423- let id = ch.payments[0].amount
1418+ let hY = ch.payments[0].amount
14241419 let aB = ch.payments[0].assetId
1425- let ie = toBase58String(value(aB))
1426- let if = (aB == ap())
1427- let ig = aA(ie)
1428- if (if (if (if (if (if (if (if (!(if))
1429- then !(ig)
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)
14301425 else false)
14311426 then true
14321427 else !(cx(toString(ch.caller))))
14331428 then true
1434- else !(gb(cq, ie)))
1429+ else !(fW(cq, hZ)))
14351430 then true
14361431 else !(cy()))
14371432 then true
14381433 else cz())
14391434 then true
14401435 else cA())
14411436 then true
14421437 else dH())
14431438 then throw("Invalid addMargin parameters")
14441439 else {
1445- let iE = gh(cq, gm(ch))
1446- let fX = iE._1
1447- let fY = iE._2
1448- let ii = aU(id, fX)
1449- let hk = (id - ii)
1450- let ij = if (ig)
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)
14511446 then {
1452- let ik = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hk)])
1453- if ((ik == ik))
1447+ let if = invoke(ax(), "borrow", [cq], [AttachedPayment(aB, hf)])
1448+ if ((if == if))
14541449 then {
1455- let il = assetBalance(this, ap())
1456- if ((il == il))
1450+ let ig = assetBalance(this, ap())
1451+ if ((ig == ig))
14571452 then {
1458- let im = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, ii)])
1459- if ((im == im))
1453+ let ih = invoke(ay(), "swap", [toBase58String(ap()), 0], [AttachedPayment(aB, id)])
1454+ if ((ih == ih))
14601455 then {
1461- let in = assetBalance(this, ap())
1462- if ((in == in))
1456+ let ii = assetBalance(this, ap())
1457+ if ((ii == ii))
14631458 then {
1464- let io = (in - il)
1465- if ((io == io))
1466- then io
1459+ let ij = (ii - ig)
1460+ if ((ij == ij))
1461+ then ij
14671462 else throw("Strict value is not equal to itself.")
14681463 }
14691464 else throw("Strict value is not equal to itself.")
14701465 }
14711466 else throw("Strict value is not equal to itself.")
14721467 }
14731468 else throw("Strict value is not equal to itself.")
14741469 }
14751470 else throw("Strict value is not equal to itself.")
14761471 }
1477- else ii
1478- if ((ij == ij))
1472+ else id
1473+ if ((ie == ie))
14791474 then {
1480- let ip = invoke(av(), "acceptPayment", [cq], [AttachedPayment(ap(), ij)])
1481- if ((ip == ip))
1475+ let ik = invoke(av(), "acceptPayment", [cq], [AttachedPayment(ap(), ie)])
1476+ if ((ik == ik))
14821477 then {
1483- let iq = {
1484- let cs = ip
1478+ let il = {
1479+ let cs = ik
14851480 if ($isInstanceOf(cs, "Int"))
14861481 then {
1487- let gk = cs
1488- gk
1482+ let gf = cs
1483+ gf
14891484 }
14901485 else throw("Invalid referrerFee")
14911486 }
1492- let ir = (ij - iq)
1493- let iF = cp(cq)
1494- let ga = iF._1
1495- let hH = iF._2
1496- let hI = iF._3
1497- let hJ = iF._4
1498- let iG = go(ir)
1499- let gq = iG._1
1500- let gr = iG._2
1501- let iB = if (if)
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)
15021497 then {
1503- let iB = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hk)])
1504- if ((iB == iB))
1498+ let iv = invoke(as(), "addLocked", [false], [AttachedPayment(ap(), hf)])
1499+ if ((iv == iv))
15051500 then nil
15061501 else throw("Strict value is not equal to itself.")
15071502 }
15081503 else nil
1509- if ((iB == iB))
1504+ if ((iv == iv))
15101505 then {
1511- let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1512- if ((iC == iC))
1506+ let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1507+ if ((iw == iw))
15131508 then {
1514- let iD = invoke(at(), "notifyFees", [cq, ir], nil)
1515- if ((iD == iD))
1516- then (((gO(cq, ga, (hH + hk), hI, hJ) ++ hn(gq)) ++ hm((bD() + hk))) ++ ho(fY, ch))
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))
15171512 else throw("Strict value is not equal to itself.")
15181513 }
15191514 else throw("Strict value is not equal to itself.")
15201515 }
15211516 else throw("Strict value is not equal to itself.")
15221517 }
15231518 else throw("Strict value is not equal to itself.")
15241519 }
15251520 else throw("Strict value is not equal to itself.")
15261521 }
15271522 }
15281523 else throw("Strict value is not equal to itself.")
15291524 }
15301525
15311526
15321527
15331528 @Callable(ch)
1534-func removeMargin (hk) = {
1535- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1536- if ((hF == hF))
1529+func removeMargin (hf) = {
1530+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1531+ if ((hA == hA))
15371532 then {
15381533 let cq = toString(ch.caller)
1539- if (if (if (if (if ((0 >= hk))
1534+ if (if (if (if (if ((0 >= hf))
15401535 then true
15411536 else !(cx(cq)))
15421537 then true
15431538 else !(cy()))
15441539 then true
15451540 else cz())
15461541 then true
15471542 else dH())
15481543 then throw("Invalid removeMargin parameters")
15491544 else {
1550- let iH = cp(cq)
1551- let ga = iH._1
1552- let hH = iH._2
1553- let hI = iH._3
1554- let hJ = iH._4
1555- let iI = -(hk)
1556- let iJ = de(ga, hH, hJ, iI)
1557- let dn = iJ._1
1558- let do = iJ._2
1559- if ((do != 0))
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))
15601555 then throw("Invalid removed margin amount")
15611556 else {
1562- let iK = er(dn, do, hI)
1563- if (!(ci(iK, bF(), true)))
1564- then throw(((("Too much margin removed: " + toString(iK)) + " < ") + toString(bF())))
1557+ let iE = er(dm, dn, hD)
1558+ if (!(ci(iE, bF(), true)))
1559+ then throw(((("Too much margin removed: " + toString(iE)) + " < ") + toString(bF())))
15651560 else {
1566- let iL = toBase58String(ap())
1567- let iM = ge(cq)
1568- let iN = iM._1
1569- let iO = iM._2
1570- let iP = if ((hk > iN))
1571- then iN
1572- else hk
1573- let iQ = if ((iN > hk))
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))
15741569 then 0
1575- else (hk - iN)
1576- let iR = (iN - iP)
1577- let iS = if ((iR > 0))
1570+ else (hf - iH)
1571+ let iL = (iH - iJ)
1572+ let iM = if ((iL > 0))
15781573 then nil
1579- else gK(cq, iL)
1580- let iT = if (((iP + iQ) != hk))
1581- then throw(((((("toRepay=" + toString(iP)) + " + toWithdraw=") + toString(iQ)) + " != ") + toString(hk)))
1574+ else gF(cq, iF)
1575+ let iN = if (((iJ + iK) != hf))
1576+ then throw(((((("toRepay=" + toString(iJ)) + " + toWithdraw=") + toString(iK)) + " != ") + toString(hf)))
15821577 else nil
1583- if ((iT == iT))
1578+ if ((iN == iN))
15841579 then {
1585- let iU = if ((iQ > 0))
1580+ let iO = if ((iK > 0))
15861581 then {
1587- let iU = invoke(as(), "withdrawLocked", [iQ], nil)
1588- if ((iU == iU))
1582+ let iO = invoke(as(), "withdrawLocked", [iK], nil)
1583+ if ((iO == iO))
15891584 then nil
15901585 else throw("Strict value is not equal to itself.")
15911586 }
15921587 else nil
1593- if ((iU == iU))
1588+ if ((iO == iO))
15941589 then {
1595- let iV = if ((iP > 0))
1590+ let iP = if ((iJ > 0))
15961591 then {
1597- let iW = invoke(ax(), "repay", [cq, iP, iO], nil)
1598- if ((iW == iW))
1599- then [ScriptTransfer(ch.caller, iP, fromBase58String(iO))]
1592+ let iQ = invoke(ax(), "repay", [cq, iJ, iI], nil)
1593+ if ((iQ == iQ))
1594+ then [ScriptTransfer(ch.caller, iJ, fromBase58String(iI))]
16001595 else throw("Strict value is not equal to itself.")
16011596 }
16021597 else nil
1603- if ((iV == iV))
1604- then ((((gO(cq, ga, dn, hI, cn(ga)) ++ (if ((iQ > 0))
1605- then hj(ch.caller, iQ)
1606- else nil)) ++ hm((bD() - hk))) ++ iS) ++ iV)
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)
16071602 else throw("Strict value is not equal to itself.")
16081603 }
16091604 else throw("Strict value is not equal to itself.")
16101605 }
16111606 else throw("Strict value is not equal to itself.")
16121607 }
16131608 }
16141609 }
16151610 }
16161611 else throw("Strict value is not equal to itself.")
16171612 }
16181613
16191614
16201615
16211616 @Callable(ch)
1622-func closePosition (gP,iX) = {
1623- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1624- if ((hF == hF))
1617+func closePosition (gK,iR) = {
1618+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1619+ if ((hA == hA))
16251620 then {
16261621 let cq = cg(ch)
1627- let iY = valueOrErrorMessage(addressFromString(cq), "Invalid caller")
1622+ let iS = valueOrErrorMessage(addressFromString(cq), "Invalid caller")
16281623 if (if (if (if (if (if (!(cx(cq)))
16291624 then true
16301625 else !(cy()))
16311626 then true
16321627 else cz())
16331628 then true
1634- else (0 >= gP))
1635- then true
1636- else (0 > iX))
1629+ else (0 >= gK))
1630+ then true
1631+ else (0 > iR))
16371632 then true
16381633 else dH())
16391634 then throw("Invalid closePosition parameters")
16401635 else {
1641- let iZ = cp(cq)
1642- let ga = iZ._1
1643- let hH = iZ._2
1644- let hI = iZ._3
1645- let hJ = iZ._4
1646- let ja = if ((bb(ga) > gP))
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))
16471642 then {
1648- let hK = if ((ga > 0))
1643+ let hF = if ((fV > 0))
16491644 then aG
16501645 else aF
1651- let hL = (hK == aF)
1652- let jb = dz((ga > 0), gP, true)
1653- let eH = jb._1
1654- let cR = jb._2
1655- let cS = jb._3
1656- let eO = jb._4
1657- let eG = if ((ga > 0))
1658- then -(gP)
1659- else gP
1660- let jc = em(cq, aO)
1661- let hO = jc._1
1662- let el = jc._2
1663- let jd = ev(cq, aO)
1664- let je = aS(bb(eG), bb(ga))
1665- let eL = aU(el, je)
1666- let jf = de(ga, hH, hJ, el)._1
1667- let jg = de(ga, hH, hJ, eL)
1668- let eg = jg._1
1669- let jh = jg._2
1670- let dj = jg._3
1671- let hT = (el - eL)
1672- let hU = if ((ga > 0))
1673- then ((hO - eH) - hT)
1674- else ((hT + hO) - eH)
1675- let hX = bb(hU)
1676- let ji = if ((ga > 0))
1677- then (aU((hX + hT), jd) - hT)
1678- else (aU((hX - hT), jd) - hT)
1679- let jj = (hI - hX)
1680- let hV = (ga + eG)
1681- let jk = cn(hV)
1682- let eR = (bL() - jj)
1683- if (if ((iX != 0))
1684- then (iX > eH)
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)
16851680 else false)
1686- then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iX)))
1687- else $Tuple15(hV, ji, hX, jk, jh, eL, (jf - (ji + hT)), cR, cS, eO, eR, (cc() - (if ((hV > 0))
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))
16881683 then bb(eG)
1689- else 0)), (cb() - (if ((0 > hV))
1684+ else 0)), (cb() - (if ((0 > hQ))
16901685 then bb(eG)
1691- else 0)), (bN() - (if ((hV > 0))
1692- then jj
1693- else 0)), (bM() - (if ((0 > hV))
1694- then jj
1686+ else 0)), (bN() - (if ((hQ > 0))
1687+ then jd
1688+ else 0)), (bM() - (if ((0 > hQ))
1689+ then jd
16951690 else 0)))
16961691 }
1697- else if ((gP > bb(ga)))
1692+ else if ((gK > bb(fV)))
16981693 then throw("Invalid closePosition parameters")
16991694 else {
1700- let jl = eI(cq, true)
1701- let eH = jl._1
1702- let jh = jl._2
1703- let eL = jl._3
1704- let eM = jl._4
1705- let cR = jl._5
1706- let cS = jl._6
1707- let eO = jl._7
1708- let eR = jl._8
1709- let eh = jl._9
1710- let eP = jl._10
1711- let eQ = jl._11
1712- let hZ = jl._12
1713- let ia = jl._13
1714- if (if ((iX != 0))
1715- then (iX > eH)
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)
17161711 else false)
1717- then throw(((("Limit error: " + toString(eH)) + " < ") + toString(iX)))
1718- else $Tuple15(0, 0, 0, 0, jh, eL, eM, cR, cS, eO, eR, eP, eQ, hZ, ia)
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)
17191714 }
1720- let hV = ja._1
1721- let ji = ja._2
1722- let hX = ja._3
1723- let jk = ja._4
1724- let jh = ja._5
1725- let eL = ja._6
1726- let eM = ja._7
1727- let cR = ja._8
1728- let cS = ja._9
1729- let eO = ja._10
1730- let eR = ja._11
1731- let eP = ja._12
1732- let eQ = ja._13
1733- let hZ = ja._14
1734- let ia = ja._15
1735- if ((jh > 0))
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))
17361731 then throw("Unable to close position with bad debt")
17371732 else {
1738- let jm = bb(eM)
1739- let jn = (bD() - jm)
1740- let jo = if ((0 > jn))
1741- then $Tuple2(0, bb(jn))
1742- else $Tuple2(jn, 0)
1743- let jp = jo._1
1744- let jq = jo._2
1745- let jr = ge(cq)
1746- let iN = jr._1
1747- let iO = jr._2
1748- let js = if ((iN > 0))
1749- then if ((jm >= iN))
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))
17501745 then {
1751- let iW = invoke(ax(), "repay", [cq, iN, iO], nil)
1752- if ((iW == iW))
1753- then $Tuple2([ScriptTransfer(iY, iN, fromBase58String(iO))], (jm - iN))
1746+ let iQ = invoke(ax(), "repay", [cq, iH, iI], nil)
1747+ if ((iQ == iQ))
1748+ then $Tuple2([ScriptTransfer(iS, iH, fromBase58String(iI))], (jg - iH))
17541749 else throw("Strict value is not equal to itself.")
17551750 }
17561751 else {
1757- let jt = invoke(ax(), "realizePartiallyAndClose", [cq, jm, iO], nil)
1758- if ((jt == jt))
1759- then $Tuple2([ScriptTransfer(iY, jm, fromBase58String(iO))], 0)
1752+ let jn = invoke(ax(), "realizePartiallyAndClose", [cq, jg, iI], nil)
1753+ if ((jn == jn))
1754+ then $Tuple2([ScriptTransfer(iS, jg, fromBase58String(iI))], 0)
17601755 else throw("Strict value is not equal to itself.")
17611756 }
1762- else $Tuple2(nil, jm)
1763- if ((js == js))
1757+ else $Tuple2(nil, jg)
1758+ if ((jm == jm))
17641759 then {
1765- let ju = js._2
1766- let jv = js._1
1767- let jw = if ((ju > 0))
1760+ let jo = jm._2
1761+ let jp = jm._1
1762+ let jq = if ((jo > 0))
17681763 then {
1769- let jw = invoke(as(), "withdrawLocked", [ju], nil)
1770- if ((jw == jw))
1764+ let jq = invoke(as(), "withdrawLocked", [jo], nil)
1765+ if ((jq == jq))
17711766 then nil
17721767 else throw("Strict value is not equal to itself.")
17731768 }
17741769 else nil
1775- if ((jw == jw))
1770+ if ((jq == jq))
17761771 then {
1777- let ib = invoke(at(), "notifyNotional", [cq, 0], nil)
1778- if ((ib == ib))
1779- then (((((if ((hV == 0))
1780- then hi(cq)
1781- else gO(cq, hV, ji, hX, jk)) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ (if ((ju > 0))
1782- then hj(iY, ju)
1783- else nil)) ++ hm(jp)) ++ jv)
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)
17841779 else throw("Strict value is not equal to itself.")
17851780 }
17861781 else throw("Strict value is not equal to itself.")
17871782 }
17881783 else throw("Strict value is not equal to itself.")
17891784 }
17901785 }
17911786 }
17921787 else throw("Strict value is not equal to itself.")
17931788 }
17941789
17951790
17961791
17971792 @Callable(ch)
17981793 func liquidate (cq) = {
1799- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1800- if ((hF == hF))
1794+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1795+ if ((hA == hA))
18011796 then {
1802- let jx = ev(cq, aO)
1803- let iK = if (dX())
1797+ let jr = ev(cq, aO)
1798+ let iE = if (dX())
18041799 then {
1805- let jy = ev(cq, aP)
1806- bc(jx, jy)
1800+ let js = ev(cq, aP)
1801+ bc(jr, js)
18071802 }
1808- else jx
1809- if (if (if (if (if (!(ci(iK, bS(), false)))
1803+ else jr
1804+ if (if (if (if (if (!(ci(iE, bS(), false)))
18101805 then true
18111806 else !(cx(cq)))
18121807 then true
18131808 else !(cy()))
18141809 then true
18151810 else cz())
18161811 then true
18171812 else dH())
18181813 then throw("Unable to liquidate")
1819- else if (if (if ((jx > bT()))
1814+ else if (if (if ((jr > bT()))
18201815 then (bU() > 0)
18211816 else false)
18221817 then (aL > bU())
18231818 else false)
18241819 then {
1825- let jz = cp(cq)
1826- let ga = jz._1
1827- let hH = jz._2
1828- let hI = jz._3
1829- let hJ = jz._4
1830- let hK = if ((ga > 0))
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))
18311826 then aG
18321827 else aF
1833- let hL = (hK == aF)
1834- let eH = eB(cq, ga)
1835- let jA = em(cq, aO)
1836- let hO = jA._1
1837- let el = jA._2
1838- let jB = cQ(hL, eH)
1839- let eG = jB._1
1840- let cR = jB._2
1841- let cS = jB._3
1842- let eO = jB._4
1843- let jC = aS(bb(eG), bb(ga))
1844- let eL = aU(el, jC)
1845- let jD = de(ga, hH, hJ, eL)
1846- let dn = jD._1
1847- let do = jD._2
1848- let dj = jD._3
1849- let hT = (el - eL)
1850- let hU = if ((ga > 0))
1851- then ((hO - eH) - hT)
1852- else ((hT + hO) - eH)
1853- let jE = aU(eH, bT())
1854- let jF = (jE / 2)
1855- let gr = (jE - jF)
1856- let ji = (dn - jE)
1857- let hV = (ga + eG)
1858- let hX = bb(hU)
1859- let jj = (hI - hX)
1860- let jk = cn(hV)
1861- let eR = (bL() - jj)
1862- let jn = (bD() - jE)
1863- let jG = if ((0 > jn))
1864- then $Tuple2(0, bb(jn))
1865- else $Tuple2(jn, 0)
1866- let jH = jG._1
1867- let jq = jG._2
1868- let jI = ge(cq)
1869- let iN = jI._1
1870- let iO = jI._2
1871- let jJ = if ((iN > 0))
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))
18721867 then {
1873- let jK = aU(iN, jC)
1874- let jt = invoke(ax(), "realizePartially", [cq, iO, jK], nil)
1875- if ((jt == jt))
1868+ let jE = aU(iH, jw)
1869+ let jn = invoke(ax(), "realizePartially", [cq, iI, jE], nil)
1870+ if ((jn == jn))
18761871 then nil
18771872 else throw("Strict value is not equal to itself.")
18781873 }
18791874 else nil
1880- if ((jJ == jJ))
1875+ if ((jD == jD))
18811876 then {
1882- let jw = invoke(as(), "withdrawLocked", [jE], nil)
1883- if ((jw == jw))
1877+ let jq = invoke(as(), "withdrawLocked", [jy], nil)
1878+ if ((jq == jq))
18841879 then {
1885- let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1886- if ((iC == iC))
1880+ let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1881+ if ((iw == iw))
18871882 then {
1888- let ib = invoke(at(), "notifyNotional", [cq, hX], nil)
1889- if ((ib == ib))
1890- then (((gO(cq, hV, ji, hX, jk) ++ hb(cR, cS, eO, eR, (cc() - (if ((hV > 0))
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))
18911886 then bb(eG)
1892- else 0)), (cb() - (if ((0 > hV))
1887+ else 0)), (cb() - (if ((0 > hQ))
18931888 then bb(eG)
1894- else 0)), (bN() - (if ((hV > 0))
1895- then jj
1896- else 0)), (bM() - (if ((0 > hV))
1897- then jj
1898- else 0)))) ++ hj(ch.caller, jF)) ++ hm(jH))
1889+ else 0)), (bN() - (if ((hQ > 0))
1890+ then jd
1891+ else 0)), (bM() - (if ((0 > hQ))
1892+ then jd
1893+ else 0)))) ++ he(ch.caller, jz)) ++ hh(jB))
18991894 else throw("Strict value is not equal to itself.")
19001895 }
19011896 else throw("Strict value is not equal to itself.")
19021897 }
19031898 else throw("Strict value is not equal to itself.")
19041899 }
19051900 else throw("Strict value is not equal to itself.")
19061901 }
19071902 else {
1908- let jL = eI(cq, false)
1909- let eg = jL._1
1910- let do = jL._2
1911- let eh = jL._3
1912- let ei = jL._4
1913- let cR = jL._5
1914- let cS = jL._6
1915- let eO = jL._7
1916- let eR = jL._8
1917- let eH = jL._9
1918- let eP = jL._10
1919- let eQ = jL._11
1920- let hZ = jL._12
1921- let ia = jL._13
1922- let jE = aU(eH, bT())
1923- let jF = (jE / 2)
1924- let gr = (jE - jF)
1925- let jn = (bD() - jE)
1926- let jM = if ((0 > jn))
1927- then $Tuple2(0, bb(jn))
1928- else $Tuple2(jn, 0)
1929- let jH = jM._1
1930- let jq = jM._2
1931- let jN = ge(cq)
1932- let iN = jN._1
1933- let iO = jN._2
1934- let jJ = if ((iN > 0))
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))
19351930 then {
1936- let jt = invoke(ax(), "realizePartiallyAndClose", [cq, 0, iO], nil)
1937- if ((jt == jt))
1931+ let jn = invoke(ax(), "realizePartiallyAndClose", [cq, 0, iI], nil)
1932+ if ((jn == jn))
19381933 then nil
19391934 else throw("Strict value is not equal to itself.")
19401935 }
19411936 else nil
1942- if ((jJ == jJ))
1937+ if ((jD == jD))
19431938 then {
1944- let gk = if ((do > 0))
1939+ let gf = if ((dn > 0))
19451940 then {
1946- let jO = invoke(as(), "exchangeFreeAndLocked", [do], nil)
1947- if ((jO == jO))
1941+ let jI = invoke(as(), "exchangeFreeAndLocked", [dn], nil)
1942+ if ((jI == jI))
19481943 then nil
19491944 else throw("Strict value is not equal to itself.")
19501945 }
19511946 else nil
1952- if ((gk == gk))
1947+ if ((gf == gf))
19531948 then {
1954- let jw = invoke(as(), "withdrawLocked", [jE], nil)
1955- if ((jw == jw))
1949+ let jq = invoke(as(), "withdrawLocked", [jy], nil)
1950+ if ((jq == jq))
19561951 then {
1957- let iC = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gr)])
1958- if ((iC == iC))
1952+ let iw = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gm)])
1953+ if ((iw == iw))
19591954 then {
1960- let ib = invoke(at(), "notifyNotional", [cq, 0], nil)
1961- if ((ib == ib))
1962- then (((hi(cq) ++ hb(cR, cS, eO, eR, eP, eQ, hZ, ia)) ++ hj(ch.caller, jF)) ++ hm(jH))
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))
19631958 else throw("Strict value is not equal to itself.")
19641959 }
19651960 else throw("Strict value is not equal to itself.")
19661961 }
19671962 else throw("Strict value is not equal to itself.")
19681963 }
19691964 else throw("Strict value is not equal to itself.")
19701965 }
19711966 else throw("Strict value is not equal to itself.")
19721967 }
19731968 }
19741969 else throw("Strict value is not equal to itself.")
19751970 }
19761971
19771972
19781973
19791974 @Callable(ch)
19801975 func payFunding () = {
1981- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1982- if ((hF == hF))
1976+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1977+ if ((hA == hA))
19831978 then {
1984- let jP = bO()
1985- if (if (if ((jP > lastBlock.timestamp))
1979+ let jJ = bO()
1980+ if (if (if ((jJ > lastBlock.timestamp))
19861981 then true
19871982 else !(cy()))
19881983 then true
19891984 else cz())
1990- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jP)))
1985+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jJ)))
19911986 else {
1992- let fK = dA()
1993- let jQ = fJ()
1994- let fN = jQ._1
1995- let fO = jQ._2
1996- gE((jP + bR()), (bZ() + fO), (ca() + fN), aS(fO, fK), aS(fN, fK))
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))
19971992 }
19981993 }
19991994 else throw("Strict value is not equal to itself.")
20001995 }
20011996
20021997
20031998
20041999 @Callable(ch)
20052000 func syncTerminalPriceToOracle () = {
20062001 let cI = bG()
2007- let cK = bH()
2008- let jR = fF(dA(), cI, cK)
2009- let hv = jR._1
2010- let hw = jR._2
2011- let eM = jR._3
2012- let hx = if ((eM != 0))
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))
20132008 then {
2014- let hx = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
2015- if ((hx == hx))
2009+ let hs = invoke(as(), "exchangeFreeAndLocked", [eM], nil)
2010+ if ((hs == hs))
20162011 then nil
20172012 else throw("Strict value is not equal to itself.")
20182013 }
20192014 else nil
2020- if ((hx == hx))
2021- then (ha(hv, hw) ++ gS(aS(aU(cI, hv), aU(cK, hw))))
2015+ if ((hs == hs))
2016+ then (gV(hq, hr) ++ gN(aS(aU(cI, hq), aU(cJ, hr))))
20222017 else throw("Strict value is not equal to itself.")
20232018 }
20242019
20252020
20262021
20272022 @Callable(ch)
20282023 func view_calcRemainMarginWithFundingPayment (cq) = {
2029- let hF = invoke(this, "syncTerminalPriceToOracle", nil, nil)
2030- if ((hF == hF))
2024+ let hA = invoke(this, "syncTerminalPriceToOracle", nil, nil)
2025+ if ((hA == hA))
20312026 then {
2032- let jS = cp(cq)
2033- let ct = jS._1
2034- let eo = jS._2
2035- let ex = jS._3
2036- let eq = jS._4
2037- let jT = em(cq, aO)
2038- let ed = jT._1
2039- let el = jT._2
2040- let jU = de(ct, eo, eq, el)
2041- let dn = jU._1
2042- let do = jU._2
2043- let dj = jU._3
2044- throw((((((aQ(dn) + aQ(dj)) + aQ(eA(cq))) + aQ(el)) + aQ(do)) + aQ(ed)))
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)))
20452040 }
20462041 else throw("Strict value is not equal to itself.")
20472042 }
20482043
20492044
20502045
20512046 @Callable(ch)
2052-func view_getPegAdjustCost (gT) = {
2047+func view_getPegAdjustCost (gO) = {
20532048 let cI = bG()
2054- let cK = bH()
2055- let fE = fF(gT, cI, cK)
2056- throw(toString(fE._3))
2049+ let cJ = bH()
2050+ let fz = fA(gO, cI, cJ)
2051+ throw(toString(fz._3))
20572052 }
20582053
20592054
20602055
20612056 @Callable(ch)
20622057 func view_getTerminalAmmPrice () = {
2063- let jV = fi()
2064- let fm = jV._1
2065- let fn = jV._2
2066- let hq = aS(aU(fm, bI()), aU(fn, bJ()))
2067- throw(toString(hq))
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))
20682063 }
20692064
20702065
20712066
20722067 @Callable(ch)
20732068 func view_getFunding () = {
2074- let fK = dA()
2075- let jW = fJ()
2076- let fN = jW._1
2077- let fO = jW._2
2078- let jX = aS(fO, fK)
2079- let jY = aS(fN, fK)
2080- throw((((aQ(jX) + aQ(jY)) + aQ(eS())) + aQ(dA())))
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())))
20812076 }
20822077
20832078
20842079
20852080 @Callable(ch)
20862081 func view_getBorrowedByTrader (cq) = {
2087- let jZ = ge(cq)
2088- let iN = jZ._1
2089- let iO = jZ._2
2090- throw((aQ(iN) + iO))
2082+ let jT = fZ(cq)
2083+ let iH = jT._1
2084+ let iI = jT._2
2085+ throw((aQ(iH) + iI))
20912086 }
20922087
20932088
20942089
20952090 @Callable(ch)
20962091 func computeSpotPrice () = {
2097- let fE = dW()
2098- $Tuple2(nil, fE)
2099- }
2100-
2101-
2102-
2103-@Callable(ch)
2104-func computeFeeForTraderWithArtifact (cq,fQ) = {
2105- let fE = gh(cq, fQ)
2106- $Tuple2(nil, fE)
2107- }
2108-
2109-
2110-@Verifier(ka)
2111-func kb () = sigVerify(ka.bodyBytes, ka.proofs[0], ao())
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())
21122107

github/deemru/w8io/c3f4982 
570.75 ms