tx · GwbKGEL8rQ8MLW6YhSdSY7JWodq8i5xzmsz3dPHF5pKk

3MtZLxTgC6rE5h4iq9mc51D1dEwXHZroWWj:  -0.07500000 Waves

2023.02.11 09:46 [2444615] smart account 3MtZLxTgC6rE5h4iq9mc51D1dEwXHZroWWj > SELF 0.00000000 Waves

{ "type": 13, "id": "GwbKGEL8rQ8MLW6YhSdSY7JWodq8i5xzmsz3dPHF5pKk", "fee": 7500000, "feeAssetId": null, "timestamp": 1676098007199, "version": 2, "chainId": 84, "sender": "3MtZLxTgC6rE5h4iq9mc51D1dEwXHZroWWj", "senderPublicKey": "9LXeFs1PpNBy1oVD8feMHJTasBVFs5sYfTiLmjMrgcwX", "proofs": [ "637nCh2aCiKSNN4cwjFdDkK2WhvPUidwb9aXLnRFy6EQgGvf6bsbRu5ZjsK42BFnvPzr9LfUHJPtjRM53AXHtuQ7" ], "script": "base64:BgJyCAISABIAEgASABIDCgEBEgMKAQESDwoNAQEBAQEBAQEBAQEBARIUChIBAQEBAQEBCAgIAQEBAQEBAQESBgoEAQEBCBIAEgMKAQESBQoDAQEEEgMKAQgSABIAEgASAwoBCBIDCgEBEgASABIAEgQKAggIvAEADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlAA1rX3F1b3RlT3JhY2xlAg1rX3F1b3RlT3JhY2xlAAlrX2JhbGFuY2UCCWtfYmFsYW5jZQAKa19zZXF1ZW5jZQIKa19zZXF1ZW5jZQAOa19wb3NpdGlvblNpemUCDmtfcG9zaXRpb25TaXplABBrX3Bvc2l0aW9uTWFyZ2luAhBrX3Bvc2l0aW9uTWFyZ2luABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAhZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhJrX3Bvc2l0aW9uRnJhY3Rpb24AEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA9rX3Bvc2l0aW9uQXNzZXQCD2tfcG9zaXRpb25Bc3NldAANa19wb3NpdGlvbkZlZQINa19wb3NpdGlvbkZlZQAea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wAhNrX3Bvc2l0aW9uVGltZXN0YW1wAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQAC2tfY2xvc2VPbmx5AgtrX2Nsb3NlT25seQAFa19mZWUCBWtfZmVlAA1rX3JvbGxvdmVyRmVlAg5rX3JvbGxvdmVyX2ZlZQAPa19mdW5kaW5nUGVyaW9kAg9rX2Z1bmRpbmdQZXJpb2QAEWtfaW5pdE1hcmdpblJhdGlvAhFrX2luaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8AGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8CFmtfcGFydExpcXVpZGF0aW9uUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAEWtfbWF4T3Blbk5vdGlvbmFsAhFrX21heE9wZW5Ob3Rpb25hbAAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAEGtfbWF4T3JhY2xlRGVsYXkCEGtfbWF4T3JhY2xlRGVsYXkADWtfbGFzdERhdGFTdHICDWtfbGFzdERhdGFTdHIADmtfbGFzdE1pbnV0ZUlkAg5rX2xhc3RNaW51dGVJZAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlABNrX3R3YXBEYXRhTGFzdFByaWNlAhNrX3R3YXBEYXRhTGFzdFByaWNlABprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAIaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQAJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CG2tfbGF0ZXN0TG9uZ1ByZW1pdW1GcmFjdGlvbgAma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CHGtfbGF0ZXN0U2hvcnRQcmVtaXVtRnJhY3Rpb24AEmtfbmV4dEZ1bmRpbmdCbG9jawIea19uZXh0RnVuZGluZ0Jsb2NrTWluVGltZXN0YW1wABFrX2xvbmdGdW5kaW5nUmF0ZQIRa19sb25nRnVuZGluZ1JhdGUAEmtfc2hvcnRGdW5kaW5nUmF0ZQISa19zaG9ydEZ1bmRpbmdSYXRlABNrX3F1b3RlQXNzZXRSZXNlcnZlAghrX3F0QXN0UgASa19iYXNlQXNzZXRSZXNlcnZlAghrX2JzQXN0UgASa19xdW90ZUFzc2V0V2VpZ2h0AghrX3F0QXN0VwARa19iYXNlQXNzZXRXZWlnaHQCCGtfYnNBc3RXABNrX3RvdGFsUG9zaXRpb25TaXplAhNrX3RvdGFsUG9zaXRpb25TaXplABdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIXa190b3RhbExvbmdQb3NpdGlvblNpemUAGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIYa190b3RhbFNob3J0UG9zaXRpb25TaXplABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAhZrX29wZW5JbnRlcmVzdE5vdGlvbmFsABNrX29wZW5JbnRlcmVzdFNob3J0AhNrX29wZW5JbnRlcmVzdFNob3J0ABJrX29wZW5JbnRlcmVzdExvbmcCEmtfb3BlbkludGVyZXN0TG9uZwAIa19sYXN0VHgCCGtfbGFzdFR4ABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfdmF1bHRfYWRkcmVzcwIPa192YXVsdF9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABJrX2V4Y2hhbmdlX2FkZHJlc3MCEmtfZXhjaGFuZ2VfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAERcXVvdGVBc3NldFN0YWtpbmcACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQBDnN0YWtpbmdBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfc3Rha2luZ19hZGRyZXNzAg9TdGFraW5nIG5vdCBzZXQBDHZhdWx0QWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3ZhdWx0X2FkZHJlc3MCDVZhdWx0IG5vdCBzZXQBDG1pbmVyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX21pbmVyX2FkZHJlc3MCDU1pbmVyIG5vdCBzZXQBDW9yZGVyc0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUQa19vcmRlcnNfYWRkcmVzcwIOT3JkZXJzIG5vdCBzZXQBD3JlZmVycmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX3JlZmVycmFsX2FkZHJlc3MCEFJlZmVycmFsIG5vdCBzZXQBEW5mdE1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwITTkZUIE1hbmFnZXIgbm90IHNldAANa190b2tlbl9wYXJhbQINa190b2tlbl9wYXJhbQAMa190b2tlbl90eXBlAgxrX3Rva2VuX3R5cGUAGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQINZmVlX3JlZHVjdGlvbgAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAA9NSU5VVEVTX0lOX1lFQVIJAGgCAKCKIAUMREVDSU1BTF9VTklUAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0AwkAAAIJAJADAQUFX2xpc3QAAAIACQC5CQIFBV9saXN0AgEsAQlzdHJUb0xpc3QBBF9zdHIDCQAAAgUEX3N0cgIABQNuaWwJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9yb2xsb3ZlckZlZVJhdGUACQEDaW50AQUNa19yb2xsb3ZlckZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBDWxhc3RUaW1lc3RhbXAACAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEPZ2V0QWN0dWFsQ2FsbGVyAQFpCQELdmFsdWVPckVsc2UCCQCdCAIJAQ1vcmRlcnNBZGRyZXNzAAIIa19zZW5kZXIJAKUIAQgFAWkGY2FsbGVyARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwxfbWFyZ2luUmF0aW8QX2Jhc2VNYXJnaW5SYXRpbxRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQUcmVtYWluaW5nTWFyZ2luUmF0aW8JAGUCBQxfbWFyZ2luUmF0aW8FEF9iYXNlTWFyZ2luUmF0aW8DAwUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGYCAAAFFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPCAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDID4gCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlwoFBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUHX3RyYWRlcgkAlwoFAAAAAAAAAAAAAAEQZ2V0UG9zaXRpb25Bc3NldAEHX3RyYWRlcgQQcG9zaXRpb25Bc3NldE9wdAkAnQgCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFB190cmFkZXIEByRtYXRjaDAFEHBvc2l0aW9uQXNzZXRPcHQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBA1wb3NpdGlvbkFzc2V0BQckbWF0Y2gwBQ1wb3NpdGlvbkFzc2V0CQDYBAEJAQpxdW90ZUFzc2V0AAEOZ2V0UG9zaXRpb25GZWUBB190cmFkZXIEDnBvc2l0aW9uRmVlT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFB190cmFkZXIEByRtYXRjaDAFDnBvc2l0aW9uRmVlT3B0AwkAAQIFByRtYXRjaDACA0ludAQLcG9zaXRpb25GZWUFByRtYXRjaDAFC3Bvc2l0aW9uRmVlCQEDZmVlAAETcmVxdWlyZU9wZW5Qb3NpdGlvbgEHX3RyYWRlcgMJAAACCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQAACQACAQIQTm8gb3BlbiBwb3NpdGlvbgYBDWdldE9yYWNsZURhdGEBA2tleQQNb3JhY2xlRGF0YVN0cgkAnQgCBQR0aGlzBQNrZXkDAwkBCWlzRGVmaW5lZAEFDW9yYWNsZURhdGFTdHIJAQIhPQIJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHICAAcECm9yYWNsZURhdGEJALUJAgkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgIBLAQNb3JhY2xlQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKb3JhY2xlRGF0YQAACQCsAgICG0ludmFsaWQgb3JhY2xlIGFkZHJlc3MgaW46IAkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgQIcHJpY2VLZXkJAJEDAgUKb3JhY2xlRGF0YQABBAhibG9ja0tleQkAkQMCBQpvcmFjbGVEYXRhAAIEB29wZW5LZXkJAJEDAgUKb3JhY2xlRGF0YQADCQCWCgQFDW9yYWNsZUFkZHJlc3MFCHByaWNlS2V5BQhibG9ja0tleQUHb3BlbktleQUEdW5pdAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwEJY2xvc2VPbmx5AAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQtrX2Nsb3NlT25seQcBDXVwZGF0ZVJlc2VydmUDBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudBBfYmFzZUFzc2V0QW1vdW50AwUGX2lzQWRkBAduZXdCYXNlCQBlAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQDCQBnAgAABQduZXdCYXNlCQACAQIqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMJAGQCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQFB25ld0Jhc2UJAGQCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50BAhuZXdRdW90ZQkAZQIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAMJAGcCAAAFCG5ld1F1b3RlCQACAQIqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMFCG5ld1F1b3RlCQBkAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50AQ1jYWxjSW52YXJpYW50AgdfcXRBc3RSB19ic0FzdFIEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYmJzQXN0UgkAtgIBBQdfYnNBc3RSCQEFYm11bGQCBQdicXRBc3RSBQdiYnNBc3RSAQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUHX3F0QXN0VwQBawkBDWNhbGNJbnZhcmlhbnQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQBlAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE2NzIyMTY4OTIJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjcyMjE2ODkyAl8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTY3MjIxNjg5MgJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNjcyMjE2ODkyAl8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxAQ9jYWxjUm9sbG92ZXJGZWUCEl9vbGRQb3NpdGlvbk1hcmdpbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAQPcG9zaXRpb25NaW51dGVzCQBoAgkAaQIJAGkCCQBlAgkBDWxhc3RUaW1lc3RhbXAABSBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcADoBwA8BQxERUNJTUFMX1VOSVQEC3JvbGxvdmVyRmVlCQEEZGl2ZAIJAQRtdWxkAgkBBG11bGQCBRJfb2xkUG9zaXRpb25NYXJnaW4FD3Bvc2l0aW9uTWludXRlcwkBD3JvbGxvdmVyRmVlUmF0ZQAFD01JTlVURVNfSU5fWUVBUgULcm9sbG92ZXJGZWUBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUQX29sZFBvc2l0aW9uU2l6ZRJfb2xkUG9zaXRpb25NYXJnaW4lX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAxfbWFyZ2luRGVsdGEEDmZ1bmRpbmdQYXltZW50AwkBAiE9AgUQX29sZFBvc2l0aW9uU2l6ZQAABCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBRBfb2xkUG9zaXRpb25TaXplCQEEbXVsZAIJAGUCBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUQX29sZFBvc2l0aW9uU2l6ZQAABAtyb2xsb3ZlckZlZQkBD2NhbGNSb2xsb3ZlckZlZQIFEl9vbGRQb3NpdGlvbk1hcmdpbgUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCCQBlAgUMX21hcmdpbkRlbHRhBQtyb2xsb3ZlckZlZQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTkxNDcxOTI3NAMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxOTE0NzE5Mjc0Al8xBAdiYWREZWJ0CAUNJHQwMTkxNDcxOTI3NAJfMgkAlgoEBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50BQtyb2xsb3ZlckZlZQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgMFBl9pc0FkZAkAZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50CQBlAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQED3F1b3RlQXNzZXRBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQPcXVvdGVBc3NldERlbHRhCQEDYWJzAQkAZQIFD3F1b3RlQXNzZXRBZnRlcgUSX3F1b3RlQXNzZXRSZXNlcnZlBA5xdW90ZUFzc2V0U29sZAkBBG11bGQCBQ9xdW90ZUFzc2V0RGVsdGEFEV9xdW90ZUFzc2V0V2VpZ2h0BBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QABA0kdDAyMDUzNjIwNjk4CQENdXBkYXRlUmVzZXJ2ZQMJAQEhAQUGX2lzQWRkBQ9xdW90ZUFzc2V0RGVsdGEFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMjA1MzYyMDY5OAJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDIwNTM2MjA2OTgCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMjA1MzYyMDY5OAJfMwQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwABE2dldE9yYWNsZVByaWNlVmFsdWUDBm9yYWNsZQhwcmljZUtleQhibG9ja0tleQQJbGFzdFZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhwcmljZUtleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIHByaWNlLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIcHJpY2VLZXkDCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sIBQlsYXN0QmxvY2sGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCGJsb2NrS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgYmxvY2suIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhibG9ja0tleQMJAGYCCQBlAgUMY3VycmVudEJsb2NrBQ9sYXN0T3JhY2xlQmxvY2sJAQ5tYXhPcmFjbGVEZWxheQAJAAIBCQCsAgIJAKwCAgkArAICAiZPcmFjbGUgc3RhbGUgZGF0YS4gTGFzdCBvcmFjbGUgYmxvY2s6IAkApAMBBQ9sYXN0T3JhY2xlQmxvY2sCECBjdXJyZW50IGJsb2NrOiAJAKQDAQUMY3VycmVudEJsb2NrBQlsYXN0VmFsdWUFCWxhc3RWYWx1ZQEOZ2V0T3JhY2xlUHJpY2UABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBA9iYXNlT3JhY2xlUHJpY2UJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFCmJhc2VPcmFjbGUCXzEIBQpiYXNlT3JhY2xlAl8yCAUKYmFzZU9yYWNsZQJfMwQLcXVvdGVPcmFjbGUJAQ1nZXRPcmFjbGVEYXRhAQUNa19xdW90ZU9yYWNsZQQQcXVvdGVPcmFjbGVQcmljZQMJAQlpc0RlZmluZWQBBQtxdW90ZU9yYWNsZQQMcXVvdGVPcmFjbGVWCQEFdmFsdWUBBQtxdW90ZU9yYWNsZQkBE2dldE9yYWNsZVByaWNlVmFsdWUDCAUMcXVvdGVPcmFjbGVWAl8xCAUMcXVvdGVPcmFjbGVWAl8yCAUMcXVvdGVPcmFjbGVWAl8zBQxERUNJTUFMX1VOSVQJAQRkaXZkAgUPYmFzZU9yYWNsZVByaWNlBRBxdW90ZU9yYWNsZVByaWNlAQ5pc01hcmtldENsb3NlZAAECmJhc2VPcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDWdldE9yYWNsZURhdGEBBQxrX2Jhc2VPcmFjbGUCGU5vIGJhc2UgYXNzZXQgb3JhY2xlIGRhdGEEBm9yYWNsZQgFCmJhc2VPcmFjbGUCXzEEB29wZW5LZXkIBQpiYXNlT3JhY2xlAl80AwkBAiE9AgUHb3BlbktleQIABAZpc09wZW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmwgCBQZvcmFjbGUFB29wZW5LZXkJAKwCAgkArAICCQCsAgICK0NhbiBub3QgZ2V0IG9yYWNsZSBpcyBvcGVuL2Nsb3NlZC4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFB29wZW5LZXkJAQEhAQUGaXNPcGVuBwEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBJhYnNQcmljZURpZmZCZWZvcmUJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQkBBnF0QXN0UgAJAQZic0FzdFIABQdfcXRBc3RXBQdfYnNBc3RXBBFhYnNQcmljZURpZmZBZnRlcgkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBQdfcXRBc3RXBQdfYnNBc3RXAwMJAGYCBRFhYnNQcmljZURpZmZBZnRlcgkBDm1heFByaWNlU3ByZWFkAAkAZgIFEWFic1ByaWNlRGlmZkFmdGVyBRJhYnNQcmljZURpZmZCZWZvcmUHCQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBRFhYnNQcmljZURpZmZBZnRlcgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE291dFBvc2l0aW9uTm90aW9uYWwICQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcJAQEhAQUHaXNTaG9ydAUPcG9zaXRpb25TaXplQWJzBwUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQCXzEFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEOZ2V0T3JhY2xlUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMjg1NzYyODcwNAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjg1NzYyODcwNAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyODU3NjI4NzA0Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDI4NTc2Mjg3MDQCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjg1NzYyODcwNAJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMjkyMTkyOTM2MAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjkyMTkyOTM2MAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyOTIxOTI5MzYwAl8yBANwb24IBQ0kdDAyOTIxOTI5MzYwAl8zBBZwb3NpdGlvbkxhc3RVcGRhdGVkQ1BGCAUNJHQwMjkyMTkyOTM2MAJfNAQRcG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAyOTIxOTI5MzYwAl81BA0kdDAyOTM2NjI5NDU5CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQdfb3B0aW9uBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwMjkzNjYyOTQ1OQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDI5MzY2Mjk0NTkCXzIEDSR0MDI5NDY0Mjk2NzYJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRZwb3NpdGlvbkxhc3RVcGRhdGVkQ1BGBRFwb3NpdGlvblRpbWVzdGFtcAUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjk0NjQyOTY3NgJfMQQHYmFkRGVidAgFDSR0MDI5NDY0Mjk2NzYCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfNwMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8AARVpbnRlcm5hbENsb3NlUG9zaXRpb24HB190cmFkZXIFX3NpemUEX2ZlZRRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4UX2NoZWNrTWF4UHJpY2VJbXBhY3QKX2xpcXVpZGF0ZQQNJHQwMzA3NDMzMDg5OQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzA3NDMzMDg5OQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzMDc0MzMwODk5Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDMwNzQzMzA4OTkCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzA3NDMzMDg5OQJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAzMDc0MzMwODk5Al81BA5pc0xvbmdQb3NpdGlvbgkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABBJhYnNPbGRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUDAwkAZwIFEmFic09sZFBvc2l0aW9uU2l6ZQUFX3NpemUJAGYCBQVfc2l6ZQAABwQOaXNQYXJ0aWFsQ2xvc2UJAGYCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplBA0kdDAzMTE5MTMxNjQyCQEKc3dhcE91dHB1dAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUFX3NpemUFFF9jaGVja01heFByaWNlSW1wYWN0BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwMzExOTEzMTY0MgJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDMxMTkxMzE2NDICXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDMxMTkxMzE2NDICXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzMTE5MTMxNjQyAl80BBVleGNoYW5nZWRQb3NpdGlvblNpemUDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAQEtAQUFX3NpemUFBV9zaXplBA0kdDAzMTg1NzMyMDY0CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAzMTg1NzMyMDY0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMzE4NTczMjA2NAJfMgQNcmVhbGl6ZWRSYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBRJhYnNPbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFDXJlYWxpemVkUmF0aW8EDSR0MDMyNDA1MzI2NTEJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEEnJlbWFpbk1hcmdpbkJlZm9yZQgFDSR0MDMyNDA1MzI2NTECXzEEAngxCAUNJHQwMzI0MDUzMjY1MQJfMgQCeDIIBQ0kdDAzMjQwNTMyNjUxAl8zBAtyb2xsb3ZlckZlZQgFDSR0MDMyNDA1MzI2NTECXzQED3Bvc2l0aW9uQmFkRGVidAgJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFC3JlYWxpemVkUG5sAl8yBBByZWFsaXplZENsb3NlRmVlCQEEbXVsZAIJAQRtdWxkAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUNcmVhbGl6ZWRSYXRpbwUEX2ZlZQQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQNJHQwMzQwNTczNDQ0MwMJAAACBQ9uZXdQb3NpdGlvblNpemUAAAkAlAoCAAAAAAkAlAoCCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzNDA1NzM0NDQzAl8xBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDM0MDU3MzQ0NDMCXzIEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBAttYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAQRtdWxkAgkAZAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC21hcmdpblJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQEEbXVsZAIJAGUCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyBBFtYXJnaW5Ub1RyYWRlclJhdwkAZQIJAGUCBRJyZW1haW5NYXJnaW5CZWZvcmUJAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgUQcmVhbGl6ZWRDbG9zZUZlZQQObWFyZ2luVG9UcmFkZXIDCQBmAgAABRFtYXJnaW5Ub1RyYWRlclJhdwMFCl9saXF1aWRhdGUAAAkAAgECN0ludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogdW5hYmxlIHRvIHBheSBmZWUFEW1hcmdpblRvVHJhZGVyUmF3BBFuZXdQb3NpdGlvbk1hcmdpbgMFDF9hZGRUb01hcmdpbgkAZAIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwUObWFyZ2luVG9UcmFkZXIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKMKEQUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGBQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sAwMFDF9hZGRUb01hcmdpbgUOaXNQYXJ0aWFsQ2xvc2UHAAAFDm1hcmdpblRvVHJhZGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRFvcGVuTm90aW9uYWxEZWx0YQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAQEhAQUOaXNMb25nUG9zaXRpb24FEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGQCBRByZWFsaXplZENsb3NlRmVlBQtyb2xsb3ZlckZlZQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgICPUludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogaW52YWxpZCBwb3NpdGlvbiBzaXplOiAJAKQDAQUFX3NpemUCBiBtYXg6IAkApAMBBRJhYnNPbGRQb3NpdGlvblNpemUBEGdldFR3YXBTcG90UHJpY2UABAhtaW51dGVJZAkAaQIJAGkCCQENbGFzdFRpbWVzdGFtcAAA6AcAPAQNc3RhcnRNaW51dGVJZAkAZQIFCG1pbnV0ZUlkBQ1UV0FQX0lOVEVSVkFMBAdsaXN0U3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAQEbGlzdAkAtQkCBQdsaXN0U3RyAgEsCgEIZmlsdGVyRm4CC2FjY3VtdWxhdG9yBG5leHQDCQBnAgUNc3RhcnRNaW51dGVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFBG5leHQJAKwCAgIfZ2V0VHdhcFNwb3RQcmljZTogaW52YWxpZCBpbnQ6IAUHbGlzdFN0cgkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQRsaXN0AAAJAKwCAgIfZ2V0VHdhcFNwb3RQcmljZTogaW52YWxpZCBpbnQ6IAUHbGlzdFN0cgQMbGFzdE1pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAAEFmVuZExhc3RDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABAxlbmRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEEm5vd0N1bXVsYXRpdmVQcmljZQkAZAIFFmVuZExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUMZW5kTGFzdFByaWNlBBhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFCG1heEluZGV4AAAEDnN0YXJ0TGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFCG1heEluZGV4AAAEFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlCQBkAgUYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFDXN0YXJ0TWludXRlSWQFCG1heEluZGV4BQ5zdGFydExhc3RQcmljZQkAaQIJAGUCBRJub3dDdW11bGF0aXZlUHJpY2UFFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlBQ1UV0FQX0lOVEVSVkFMARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAJAJQKAgkBBnF0QXN0UgAJAQZic0FzdFIABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEDSR0MDM5MTgwMzkzNTkJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgFDSR0MDM5MTgwMzkzNTkCXzEEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDAzOTE4MDM5MzU5Al8yBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDAzOTE4MDM5MzU5Al8zCQCUCgIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQETZ2V0UXVvdGVBc3NldFdlaWdodAQQYmFzZUFzc2V0UmVzZXJ2ZRF0b3RhbFBvc2l0aW9uU2l6ZRFxdW90ZUFzc2V0UmVzZXJ2ZQt0YXJnZXRQcmljZQQBYgkAtgIBBRBiYXNlQXNzZXRSZXNlcnZlBAJzegkAtgIBBRF0b3RhbFBvc2l0aW9uU2l6ZQQBcQkAtgIBBRFxdW90ZUFzc2V0UmVzZXJ2ZQQBcAkAtgIBBQt0YXJnZXRQcmljZQQBawkBBWJtdWxkAgUBcQUBYgQEbmV3QgkAtwICBQFiBQJzegQEbmV3UQkBBWJkaXZkAgUBawUEbmV3QgQBegkBBWJkaXZkAgUEbmV3UQUEbmV3QgQGcmVzdWx0CQEFYmRpdmQCBQFwBQF6CQCgAwEFBnJlc3VsdAEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDDl90ZXJtaW5hbFByaWNlB19xdEFzdFIHX2JzQXN0UgQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAECW5ld1F0QXN0VwkBBGRpdmQCCQEEbXVsZAIFDl90ZXJtaW5hbFByaWNlBQdfYnNBc3RSBQdfcXRBc3RSCQCVCgMFCW5ld1F0QXN0VwUMREVDSU1BTF9VTklUAAAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQVY3VycmVudE5ldE1hcmtldFZhbHVlCAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwJfMQQJbmV3UXRBc3RXCQETZ2V0UXVvdGVBc3NldFdlaWdodAQFB19ic0FzdFIFDV9wb3NpdGlvblNpemUFB19xdEFzdFIFDl90ZXJtaW5hbFByaWNlBAluZXdCc0FzdFcFDERFQ0lNQUxfVU5JVAQNbWFyZ2luVG9WYXVsdAgJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUNX3Bvc2l0aW9uU2l6ZQUVY3VycmVudE5ldE1hcmtldFZhbHVlBQdfcXRBc3RSBQluZXdRdEFzdFcFB19ic0FzdFIFCW5ld0JzQXN0VwUPUE5MX09QVElPTl9TUE9UAl8yCQCVCgMFCW5ld1F0QXN0VwUJbmV3QnNBc3RXBQ1tYXJnaW5Ub1ZhdWx0AQpnZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA1zcG90VHdhcFByaWNlCQEQZ2V0VHdhcFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQ1zcG90VHdhcFByaWNlBQ91bmRlcmx5aW5nUHJpY2UDAwMJAAACCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAYJAAACCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAAABgkBDmlzTWFya2V0Q2xvc2VkAAkAlAoCAAAAAAMJAGYCAAAFB3ByZW1pdW0EFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJARV0b3RhbExvbmdQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAQ5nZXRBZGp1c3RlZEZlZQILX2FydGlmYWN0SWQQX2Jhc2VGZWVEaXNjb3VudAQKYmFzZUZlZVJhdwkBA2ZlZQAEB2Jhc2VGZWUJAQRtdWxkAgUKYmFzZUZlZVJhdwUQX2Jhc2VGZWVEaXNjb3VudAQNJHQwNDIyMjA0MjcxNQMJAQIhPQIFC19hcnRpZmFjdElkAgAEDGFydGlmYWN0S2luZAkBBHN0ckECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQxrX3Rva2VuX3R5cGUFC19hcnRpZmFjdElkAwkAAAIFDGFydGlmYWN0S2luZAUYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFBAlyZWR1Y3Rpb24JAQRpbnRBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUNa190b2tlbl9wYXJhbQULX2FydGlmYWN0SWQEC2FkanVzdGVkRmVlCQEEbXVsZAIFB2Jhc2VGZWUFCXJlZHVjdGlvbgkAlAoCBQthZGp1c3RlZEZlZQYJAAIBAhlJbnZhbGlkIGF0dGFjaGVkIGFydGlmYWN0CQCUCgIFB2Jhc2VGZWUHBAthZGp1c3RlZEZlZQgFDSR0MDQyMjIwNDI3MTUCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDQyMjIwNDI3MTUCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CB190cmFkZXIIX2Fzc2V0SWQED29sZFBvc2l0aW9uU2l6ZQgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEDCQAAAgUPb2xkUG9zaXRpb25TaXplAAAGCQAAAgkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyBQhfYXNzZXRJZAELaXNTYW1lQXNzZXQCB190cmFkZXIIX2Fzc2V0SWQJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEEGRvR2V0RmVlRGlzY291bnQJAPwHBAkBDG1pbmVyQWRkcmVzcwACEmNvbXB1dGVGZWVEaXNjb3VudAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBRBkb0dldEZlZURpc2NvdW50BRBkb0dldEZlZURpc2NvdW50BAtmZWVEaXNjb3VudAQHJG1hdGNoMAUQZG9HZXRGZWVEaXNjb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiFJbnZhbGlkIGNvbXB1dGVGZWVEaXNjb3VudCByZXN1bHQEDSR0MDQzMzk1NDM0NjkJAQ5nZXRBZGp1c3RlZEZlZQIFC19hcnRpZmFjdElkBQtmZWVEaXNjb3VudAQLYWRqdXN0ZWRGZWUIBQ0kdDA0MzM5NTQzNDY5Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA0MzM5NTQzNDY5Al8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDWdldEFydGlmYWN0SWQBAWkECmFydGlmYWN0SWQDCQBmAgkAkAMBCAUBaQhwYXltZW50cwABCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhJJbnZhbGlkIGFydGlmYWN0SWQCAAUKYXJ0aWZhY3RJZAENZGlzdHJpYnV0ZUZlZQEKX2ZlZUFtb3VudAQMZmVlVG9TdGFrZXJzCQEEbXVsZAIFCl9mZWVBbW91bnQJARNmZWVUb1N0YWtlcnNQZXJjZW50AAQKZmVlVG9WYXVsdAkAZQIFCl9mZWVBbW91bnQFDGZlZVRvU3Rha2VycwkAlAoCBQxmZWVUb1N0YWtlcnMFCmZlZVRvVmF1bHQBDnVwZGF0ZVNldHRpbmdzDRBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX21heE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19mZWVUb1N0YWtlcnNQZXJjZW50BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhPcmFjbGVEZWxheQUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfcm9sbG92ZXJGZWUFDF9yb2xsb3ZlckZlZQUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAg5faXNOZXdQb3NpdGlvbghfYWRkcmVzcwMFDl9pc05ld1Bvc2l0aW9uBA9jdXJyZW50U2VxdWVuY2UJAQxsYXN0U2VxdWVuY2UACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFCF9hZGRyZXNzCQBkAgUPY3VycmVudFNlcXVlbmNlAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtfc2VxdWVuY2UJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQUDbmlsBQNuaWwBEXVwZGF0ZVBvc2l0aW9uRmVlAw5faXNOZXdQb3NpdGlvbghfYWRkcmVzcwRfZmVlAwUOX2lzTmV3UG9zaXRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFCF9hZGRyZXNzBQRfZmVlBQNuaWwFA25pbAEOdXBkYXRlUG9zaXRpb24GCF9hZGRyZXNzBV9zaXplB19tYXJnaW4NX29wZW5Ob3Rpb25hbCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbGF0ZXN0VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MFBV9zaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwUHX21hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MFDV9vcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQhfYWRkcmVzcwUQX2xhdGVzdFRpbWVzdGFtcAUDbmlsAQphcHBlbmRUd2FwAQZfcHJpY2UECG1pbnV0ZUlkCQBpAgkAaQIJAQ1sYXN0VGltZXN0YW1wAADoBwA8BBBwcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAADCQBmAgUQcHJldmlvdXNNaW51dGVJZAUIbWludXRlSWQJAAIBAhFUV0FQIG91dC1vZi1vcmRlcgQMbGFzdE1pbnV0ZUlkAwkAAAIFEHByZXZpb3VzTWludXRlSWQAAAUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQDCQBmAgUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUJcHJldlByaWNlBARsaXN0CQELcHVzaFRvUXVldWUDCQEJc3RyVG9MaXN0AQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAFDVRXQVBfSU5URVJWQUwJAKQDAQUIbWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQZfcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rX2xhc3RNaW51dGVJZAUIbWludXRlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19sYXN0RGF0YVN0cgkBCWxpc3RUb1N0cgEFBGxpc3QFA25pbAQYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkAAAEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUGX3ByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQlwcmV2UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQZfcHJpY2UFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBEHVwZGF0ZUFtbVdlaWdodHMCB19xdEFzdFcHX2JzQXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19xdW90ZUFzc2V0V2VpZ2h0BQdfcXRBc3RXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2Jhc2VBc3NldFdlaWdodAUHX2JzQXN0VwUDbmlsAQl1cGRhdGVBbW0IB19xdEFzdFIHX2JzQXN0UhdfdG90YWxQb3NpdGlvblNpemVBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZRZfdG90YWxMb25nT3Blbk5vdGlvbmFsF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwADCQECIT0CCQBlAgUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGEludmFsaWQgQU1NIHN0YXRlIGRhdGE6IAkApAMBBRZfdG90YWxMb25nUG9zaXRpb25TaXplAgQgKyAgCQCkAwEFF190b3RhbFNob3J0UG9zaXRpb25TaXplAgQgIT0gCQCkAwEFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDOCAIJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgUHX3F0QXN0UgUHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa190b3RhbFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwFFV9vcGVuSW50ZXJlc3ROb3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXa190b3RhbExvbmdQb3NpdGlvblNpemUFFl90b3RhbExvbmdQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfb3BlbkludGVyZXN0TG9uZwUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19vcGVuSW50ZXJlc3RTaG9ydAUXX3RvdGFsU2hvcnRPcGVuTm90aW9uYWwFA25pbAkBCmFwcGVuZFR3YXABCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXAQ5kZWxldGVQb3NpdGlvbgEIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQhfYWRkcmVzcwUDbmlsAQh3aXRoZHJhdwIIX2FkZHJlc3MHX2Ftb3VudAQHYmFsYW5jZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQBmAgUHX2Ftb3VudAUHYmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICE1VuYWJsZSB0byB3aXRoZHJhdyAJAKQDAQUHX2Ftb3VudAIXIGZyb20gY29udHJhY3QgYmFsYW5jZSAJAKQDAQUHYmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhfYWRkcmVzcwUHX2Ftb3VudAkBCnF1b3RlQXNzZXQABQNuaWwBDXVwZGF0ZUJhbGFuY2UBAWkDCQBmAgAABQFpCQACAQIHQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa19iYWxhbmNlBQFpBQNuaWwBC3RyYW5zZmVyRmVlAQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQ5zdGFraW5nQWRkcmVzcwAFAWkJAQpxdW90ZUFzc2V0AAUDbmlsAQ5kb0J1cm5BcnRpZmFjdAINX2J1cm5BcnRpZmFjdAFpAwUNX2J1cm5BcnRpZmFjdAkAzAgCCQEEQnVybgIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhBJbnZhbGlkIGFydGlmYWN0AAEFA25pbAUDbmlsFgFpAQVwYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIUSW52YWxpZCBwYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBgUDbmlsAWkBB3VucGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFkludmFsaWQgdW5wYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBwUDbmlsAWkBDHNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIbSW52YWxpZCBzZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQYFA25pbAFpAQ51bnNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCB1bnNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BwUDbmlsAWkBDGFkZExpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIbSW52YWxpZCBhZGRMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC3F0QXN0UkFmdGVyCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEFGJhc2VBc3NldEFtb3VudFRvQWRkCQBlAgkBBGRpdmQCCQEEbXVsZAIFC3F0QXN0UkFmdGVyBQdfcXRBc3RXBQVwcmljZQUHX2JzQXN0UgQLYnNBc3RSQWZ0ZXIJAGQCBQdfYnNBc3RSBRRiYXNlQXNzZXRBbW91bnRUb0FkZAQNJHQwNTI4NzY1MzAyNwkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNTI4NzY1MzAyNwJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNTI4NzY1MzAyNwJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDUyODc2NTMwMjcCXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPcmVtb3ZlTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIFEV9xdW90ZUFzc2V0QW1vdW50AAAJAAIBAh5JbnZhbGlkIHJlbW92ZUxpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJAQNhYnMBCQBlAgkBBGRpdmQCCQEEbXVsZAIFC3F0QXN0UkFmdGVyBQdfcXRBc3RXBQVwcmljZQUHX2JzQXN0UgQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQQNJHQwNTM5NTk1NDExMAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNTM5NTk1NDExMAJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNTM5NTk1NDExMAJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDUzOTU5NTQxMTACXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY2hhbmdlU2V0dGluZ3MNEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncw0FEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5BQxfcm9sbG92ZXJGZWUBaQEKaW5pdGlhbGl6ZRIHX3F0QXN0UgdfYnNBc3RSDl9mdW5kaW5nUGVyaW9kEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbwRfZmVlD19iYXNlT3JhY2xlRGF0YRBfcXVvdGVPcmFjbGVEYXRhDF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlAwMDAwMDAwMDAwMDAwMDAwMDCQBnAgAABQdfcXRBc3RSBgkAZwIAAAUHX2JzQXN0UgYJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGcCAAAFD19tYXhPcmFjbGVEZWxheQYJAGcCAAAFDF9yb2xsb3ZlckZlZQYJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tCAUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzDQUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkFDF9yb2xsb3ZlckZlZQkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgkBDWxhc3RUaW1lc3RhbXAABQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa19iYXNlT3JhY2xlBQ9fYmFzZU9yYWNsZURhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19xdW90ZU9yYWNsZQUQX3F1b3RlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQxfY29vcmRpbmF0b3IFA25pbAFpARBpbmNyZWFzZVBvc2l0aW9uBApfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA1Nzg4ODU4MDM3CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgkBDWdldEFydGlmYWN0SWQBBQFpBAthZGp1c3RlZEZlZQgFDSR0MDU3ODg4NTgwMzcCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDU3ODg4NTgwMzcCXzIEB19hbW91bnQJAQRkaXZkAgUKX3Jhd0Ftb3VudAkAZAIJAQRtdWxkAgULYWRqdXN0ZWRGZWUFCV9sZXZlcmFnZQUMREVDSU1BTF9VTklUBBNkaXN0cmlidXRlRmVlQW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUHX2Ftb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACFWFjY2VwdFBheW1lbnRXaXRoTGluawkAzAgCBQdfdHJhZGVyCQDMCAIFCF9yZWZMaW5rBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUTZGlzdHJpYnV0ZUZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUECWZlZUFtb3VudAkAZQIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFC3JlZmVycmVyRmVlBA0kdDA1ODUzMzU4NzAxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA1ODUzMzU4NzAxAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDU4NTMzNTg3MDECXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTg1MzM1ODcwMQJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA1ODUzMzU4NzAxAl80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDU4NTMzNTg3MDECXzUEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA1ODk5MDYyMTExAwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTk0OTk1OTY3MgkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDU5NDk5NTk2NzICXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTQ5OTU5NjcyAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTQ5OTU5NjcyAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTk0OTk1OTY3MgJfNAMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50CQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAIDIDwgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUMb3Blbk5vdGlvbmFsAAAEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFDG9wZW5Ob3Rpb25hbAAABA0kdDA2MDIxODYwNDkzCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA2MDIxODYwNDkzAl8xBAJ4MQgFDSR0MDYwMjE4NjA0OTMCXzIEAngyCAUNJHQwNjAyMTg2MDQ5MwJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA2MDIxODYwNDkzAl80AwkBASEBCQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAAgECFU92ZXIgbWF4IHNwcmVhZCBsaW1pdAMJAQEhAQkBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAAgECFk92ZXIgbWF4IG9wZW4gbm90aW9uYWwJAKAKDgUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAGQCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAABRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGQCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGQCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAACQBkAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIFC3JvbGxvdmVyRmVlBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA2MTgxMTYxOTI3CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCCQClCAEIBQFpBmNhbGxlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNjE4MTE2MTkyNwJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDYxODExNjE5MjcCXzIDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQACAQIuVXNlIGRlY3JlYXNlUG9zaXRpb24gdG8gZGVjcmVhc2UgcG9zaXRpb24gc2l6ZQkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDA1ODk5MDYyMTExAl8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDU4OTkwNjIxMTECXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTg5OTA2MjExMQJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDA1ODk5MDYyMTExAl80BBRuZXdQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDU4OTkwNjIxMTECXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDU4OTkwNjIxMTECXzYEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1ODk5MDYyMTExAl83BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTg5OTA2MjExMQJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDU4OTkwNjIxMTECXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNTg5OTA2MjExMQNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDU4OTkwNjIxMTEDXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDU4OTkwNjIxMTEDXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1ODk5MDYyMTExA18xMwQLcm9sbG92ZXJGZWUIBQ0kdDA1ODk5MDYyMTExA18xNAQNJHQwNjIxMTc2MjE4OAkBDWRpc3RyaWJ1dGVGZWUBCQBkAgUJZmVlQW1vdW50BQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjIxMTc2MjE4OAJfMQQKZmVlVG9WYXVsdAgFDSR0MDYyMTE3NjIxODgCXzIEBXN0YWtlAwkAZwIFB19hbW91bnQFC3JvbGxvdmVyRmVlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQACQBlAgUHX2Ftb3VudAULcm9sbG92ZXJGZWUFA25pbAkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgkAZQIFC3JvbGxvdmVyRmVlBQdfYW1vdW50BQNuaWwFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEDGRlcG9zaXRWYXVsdAkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBQxkZXBvc2l0VmF1bHQFDGRlcG9zaXRWYXVsdAQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGBRRuZXdQb3NpdGlvblRpbWVzdGFtcAkBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXICBQ1pc05ld1Bvc2l0aW9uBQdfdHJhZGVyCQERdXBkYXRlUG9zaXRpb25GZWUDBQ1pc05ld1Bvc2l0aW9uBQdfdHJhZGVyBQthZGp1c3RlZEZlZQkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGUCCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4ABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaXNTYW1lQXNzZXQCBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjQyOTk2NDQ2NwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjQyOTk2NDQ2NwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2NDI5OTY0NDY3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY0Mjk5NjQ0NjcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjQyOTk2NDQ2NwJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2NDI5OTY0NDY3Al81BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQLcm9sbG92ZXJGZWUJAQ9jYWxjUm9sbG92ZXJGZWUCBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25UaW1lc3RhbXAEFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMDCQBmAgULcm9sbG92ZXJGZWUAAAQNJHQwNjQ3NTI2NDgxMQkBDWRpc3RyaWJ1dGVGZWUBBQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjQ3NTI2NDgxMQJfMQQKZmVlVG9WYXVsdAgFDSR0MDY0NzUyNjQ4MTECXzIEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFDGZlZVRvU3Rha2VycwUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFCmZlZVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQkAZAIJAGUCBRFvbGRQb3NpdGlvbk1hcmdpbgULcm9sbG92ZXJGZWUFB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQENdXBkYXRlQmFsYW5jZQEJAGUCCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVtb3ZlTWFyZ2luAQdfYW1vdW50BARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjU5MjM2NjA5MQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjU5MjM2NjA5MQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2NTkyMzY2MDkxAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY1OTIzNjYwOTECXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjU5MjM2NjA5MQJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2NTkyMzY2MDkxAl81BA0kdDA2NjA5NzY2MzQ2CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQEBLQEFB19hbW91bnQEDHJlbWFpbk1hcmdpbggFDSR0MDY2MDk3NjYzNDYCXzEEB2JhZERlYnQIBQ0kdDA2NjA5NzY2MzQ2Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDY2MDk3NjYzNDYCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjYwOTc2NjM0NgJfNAMJAQIhPQIFB2JhZERlYnQAAAkAAgECHUludmFsaWQgcmVtb3ZlZCBtYXJnaW4gYW1vdW50BAttYXJnaW5SYXRpbwkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JAQ9pbml0TWFyZ2luUmF0aW8ABgkAAgEJAKwCAgkArAICCQCsAgICGVRvbyBtdWNoIG1hcmdpbiByZW1vdmVkOiAJAKQDAQULbWFyZ2luUmF0aW8CAyA8IAkApAMBCQEPaW5pdE1hcmdpblJhdGlvAAQNJHQwNjY3MzI2Njc5MQkBDWRpc3RyaWJ1dGVGZWUBBQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjY3MzI2Njc5MQJfMQQKZmVlVG9WYXVsdAgFDSR0MDY2NzMyNjY3OTECXzIEFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMDCQBmAgULcm9sbG92ZXJGZWUAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFCmZlZVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgkAZAIFB19hbW91bnQFDGZlZVRvU3Rha2VycwUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4FF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD29sZFBvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uAwVfc2l6ZRRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4EBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQOX3RyYWRlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQdfdHJhZGVyAg5JbnZhbGlkIGNhbGxlcgQLcG9zaXRpb25GZWUJAQ5nZXRQb3NpdGlvbkZlZQEFB190cmFkZXIDAwMDAwMJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQBnAgAABQVfc2l6ZQYJAGYCAAAFFF9taW5RdW90ZUFzc2V0QW1vdW50BgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECIEludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBBRvbGRQb3NpdGlvblRpbWVzdGFtcAgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzUEDSR0MDY4NDQ4NjkwMzMJARVpbnRlcm5hbENsb3NlUG9zaXRpb24HBQdfdHJhZGVyBQVfc2l6ZQULcG9zaXRpb25GZWUFFF9taW5RdW90ZUFzc2V0QW1vdW50BQxfYWRkVG9NYXJnaW4GBgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNjg0NDg2OTAzMwJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA2ODQ0ODY5MDMzAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY4NDQ4NjkwMzMCXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjg0NDg2OTAzMwJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNjg0NDg2OTAzMwJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA2ODQ0ODY5MDMzAl82BA5tYXJnaW5Ub1RyYWRlcggFDSR0MDY4NDQ4NjkwMzMCXzcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2ODQ0ODY5MDMzAl84BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2ODQ0ODY5MDMzAl85BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNjg0NDg2OTAzMwNfMTAEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA2ODQ0ODY5MDMzA18xMQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA2ODQ0ODY5MDMzA18xMgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNjg0NDg2OTAzMwNfMTMEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjg0NDg2OTAzMwNfMTQEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDY4NDQ4NjkwMzMDXzE1BAtyZWFsaXplZEZlZQgFDSR0MDY4NDQ4NjkwMzMDXzE2AwkAZgIFD3Bvc2l0aW9uQmFkRGVidAAACQACAQIqSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnM6IGJhZCBkZWJ0AwkAZwIFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQENbGFzdFRpbWVzdGFtcAAJAAIBAlNJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogd2FpdCBhdCBsZWFzdCAxIGJsb2NrIGJlZm9yZSBjbG9zaW5nIHRoZSBwb3NpdGlvbgQOaXNQYXJ0aWFsQ2xvc2UJAQIhPQIFD25ld1Bvc2l0aW9uU2l6ZQAABA53aXRoZHJhd0Ftb3VudAkAZAIFDm1hcmdpblRvVHJhZGVyBQtyZWFsaXplZEZlZQQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFDndpdGhkcmF3QW1vdW50BA1hbW1OZXdCYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQ53aXRoZHJhd0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQNJHQwNjk3MDU2OTc2NAkBDWRpc3RyaWJ1dGVGZWUBBQtyZWFsaXplZEZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjk3MDU2OTc2NAJfMQQKZmVlVG9WYXVsdAgFDSR0MDY5NzA1Njk3NjQCXzIEDGRlcG9zaXRWYXVsdAkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBQxkZXBvc2l0VmF1bHQFDGRlcG9zaXRWYXVsdAQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgULcmVhbGl6ZWRGZWUFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIDBQ5pc1BhcnRpYWxDbG9zZQkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIDCQBmAgUObWFyZ2luVG9UcmFkZXIAAAkBCHdpdGhkcmF3AgUOX3RyYWRlckFkZHJlc3MFDm1hcmdpblRvVHJhZGVyBQNuaWwJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWxpcXVpZGF0ZQEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBZsaXF1aWRhdGlvbk1hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFFmxpcXVpZGF0aW9uTWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECE1VuYWJsZSB0byBsaXF1aWRhdGUEFGlzUGFydGlhbExpcXVpZGF0aW9uAwMJAGYCBQ9zcG90TWFyZ2luUmF0aW8JARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkAZgIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAAAAcJAGYCBQxERUNJTUFMX1VOSVQJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAHBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xBA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDcyMDc3NzI0MDADBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgQPbGlxdWlkYXRpb25TaXplCQEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBBBsaXF1aWRhdGlvblJhdGlvCQEEZGl2ZAIJAQNhYnMBBQ9saXF1aWRhdGlvblNpemUFD3Bvc2l0aW9uU2l6ZUFicwkAlAoCBRBsaXF1aWRhdGlvblJhdGlvCQEDYWJzAQUPbGlxdWlkYXRpb25TaXplCQCUCgIAAAUPcG9zaXRpb25TaXplQWJzBBBsaXF1aWRhdGlvblJhdGlvCAUNJHQwNzIwNzc3MjQwMAJfMQQPbGlxdWlkYXRpb25TaXplCAUNJHQwNzIwNzc3MjQwMAJfMgQNJHQwNzI0MDY3MzA0NAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgcFB190cmFkZXIDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgUPbGlxdWlkYXRpb25TaXplBQ9wb3NpdGlvblNpemVBYnMJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAAABgcGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3MjQwNjczMDQ0Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDcyNDA2NzMwNDQCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzI0MDY3MzA0NAJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MjQwNjczMDQ0Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MjQwNjczMDQ0Al81BAtyZWFsaXplZFBubAgFDSR0MDcyNDA2NzMwNDQCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzI0MDY3MzA0NAJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDcyNDA2NzMwNDQCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDcyNDA2NzMwNDQCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MjQwNjczMDQ0A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDcyNDA2NzMwNDQDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDcyNDA2NzMwNDQDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MjQwNjczMDQ0A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MjQwNjczMDQ0A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzI0MDY3MzA0NANfMTUEEmxpcXVpZGF0aW9uUGVuYWx0eQgFDSR0MDcyNDA2NzMwNDQDXzE2BA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA1uZXdBbW1CYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAtsb2NrQmFkRGVidAMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQBkAgUPcG9zaXRpb25CYWREZWJ0BRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgMFFGlzUGFydGlhbExpcXVpZGF0aW9uCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAMDAwkAZgIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBDWxhc3RUaW1lc3RhbXAABgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQkBDWxhc3RUaW1lc3RhbXAAAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDc1MDMxNzUwOTMJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3NTAzMTc1MDkzAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNzUwMzE3NTA5MwJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlAAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABA0kdDA3NTUyNTc1ODkxCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQdfcXRBc3RSBQdfYnNBc3RSBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNzU1MjU3NTg5MQJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNzU1MjU3NTg5MQJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDc1NTI1NzU4OTECXzMEEG1hcmdpblRvVmF1bHRBZGoDAwkAZgIAAAUNbWFyZ2luVG9WYXVsdAkAZgIJAQNhYnMBBQ1tYXJnaW5Ub1ZhdWx0CQEIY2JhbGFuY2UABwkBAS0BCQEIY2JhbGFuY2UABQ1tYXJnaW5Ub1ZhdWx0BA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUQbWFyZ2luVG9WYXVsdEFkagAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUQbWFyZ2luVG9WYXVsdEFkagUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQDOCAIJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFEG1hcmdpblRvVmF1bHRBZGoJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQEKYXBwZW5kVHdhcAEJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBRNuZXdRdW90ZUFzc2V0V2VpZ2h0CQEEbXVsZAIFB19ic0FzdFIFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBlbnN1cmVDYWxsZWRPbmNlAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECIkludmFsaWQgc2F2ZUN1cnJlbnRUeElkIHBhcmFtZXRlcnMEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQhrX2xhc3RUeAIAAwkBAiE9AgUGbGFzdFR4CQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19sYXN0VHgFBmxhc3RUeAUDbmlsCQACAQIpQ2FuIG5vdCBjYWxsIHZBTU0gbWV0aG9kcyB0d2ljZSBpbiBvbmUgdHgBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AQdfdHJhZGVyBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEDSR0MDc3MDUwNzcxNzQJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDc3MDUwNzcxNzQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwNzcwNTA3NzE3NAJfMgQDcG9uCAUNJHQwNzcwNTA3NzE3NAJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3NzA1MDc3MTc0Al80BBFwb3NpdGlvblRpbWVzdGFtcAgFDSR0MDc3MDUwNzcxNzQCXzUEDSR0MDc3MTc3NzcyNzgJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDc3MTc3NzcyNzgCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA3NzE3Nzc3Mjc4Al8yBA0kdDA3NzI4MTc3NTA1CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFEXBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA3NzI4MTc3NTA1Al8xBAdiYWREZWJ0CAUNJHQwNzcyODE3NzUwNQJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA3NzI4MTc3NTA1Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDc3MjgxNzc1MDUCXzQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFDHJlbWFpbk1hcmdpbgkBAXMBBQ5mdW5kaW5nUGF5bWVudAkBAXMBCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEBcwEFDXVucmVhbGl6ZWRQbmwJAQFzAQUHYmFkRGVidAkBAXMBBRBwb3NpdGlvbk5vdGlvbmFsCQEBcwEFC3JvbGxvdmVyRmVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXZpZXdfZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBnJlc3VsdAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwUGX3ByaWNlBQdfcXRBc3RSBQdfYnNBc3RSCQACAQkApAMBCAUGcmVzdWx0Al8zAWkBGHZpZXdfZ2V0VGVybWluYWxBbW1QcmljZQAEDSR0MDc3OTQxNzgwMjIJARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDc3OTQxNzgwMjICXzEEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDc3OTQxNzgwMjICXzIEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0VwAJAQRtdWxkAgUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RXAAkAAgEJAKQDAQUFcHJpY2UBaQEPdmlld19nZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA0kdDA3ODIzNzc4Mjk5CQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwNzgyMzc3ODI5OQJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDc4MjM3NzgyOTkCXzIEC2xvbmdGdW5kaW5nCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQQMc2hvcnRGdW5kaW5nCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAAIBCQCsAgIJAKwCAgkArAICCQEBcwEFC2xvbmdGdW5kaW5nCQEBcwEFDHNob3J0RnVuZGluZwkBAXMBCQEQZ2V0VHdhcFNwb3RQcmljZQAJAQFzAQkBDmdldE9yYWNsZVByaWNlAAFpARBjb21wdXRlU3BvdFByaWNlAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAZyZXN1bHQJAQxnZXRTcG90UHJpY2UACQCUCgIFA25pbAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEBnJlc3VsdAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIFC19hcnRpZmFjdElkCQCUCgIFA25pbAUGcmVzdWx0AQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlecpxFRg=", "height": 2444615, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4SSoyp5R8U74DkkBKfpTGX4yw8cjvVqEjwd2izXjugwN Next: Z5nQ5fnuRf4scVkVjWZZpZUekYZBghHQMAwNP8J3Nwk Diff:
OldNewDifferences
105105
106106 let Z = "k_admin_address"
107107
108-let aa = "k_admin_public_key"
108+let aa = "k_quote_asset"
109109
110-let ab = "k_quote_asset"
110+let ab = "k_quote_staking"
111111
112-let ac = "k_quote_staking"
112+let ac = "k_staking_address"
113113
114-let ad = "k_staking_address"
114+let ad = "k_miner_address"
115115
116-let ae = "k_miner_address"
116+let ae = "k_orders_address"
117117
118-let af = "k_orders_address"
118+let af = "k_referral_address"
119119
120-let ag = "k_referral_address"
120+let ag = "k_exchange_address"
121121
122-let ah = "k_exchange_address"
122+let ah = "k_nft_manager_address"
123123
124-let ai = "k_nft_manager_address"
125-
126-func aj (ak,al) = ((ak + "_") + al)
124+func ai (aj,ak) = ((aj + "_") + ak)
127125
128126
129-func am () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
127+func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
130128
131129
132-func an () = addressFromString(getStringValue(am(), Z))
130+func am () = addressFromString(getStringValue(al(), Z))
133131
134132
135-func ao () = fromBase58String(getStringValue(am(), aa))
133+func an () = fromBase58String(getStringValue(al(), aa))
136134
137135
138-func ap () = fromBase58String(getStringValue(am(), ab))
136+func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
139137
140138
141-func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Quote asset staking not set")
139+func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
142140
143141
144-func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Staking not set")
142+func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
145143
146144
147-func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), Y)), "Vault not set")
145+func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
148146
149147
150-func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Miner not set")
148+func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
151149
152150
153-func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Orders not set")
151+func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
154152
155153
156-func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ag)), "Referral not set")
154+func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
157155
158156
159-func aw () = valueOrErrorMessage(addressFromString(getStringValue(am(), ai)), "NFT Manager not set")
157+let av = "k_token_param"
158+
159+let aw = "k_token_type"
160+
161+let ax = "fee_reduction"
162+
163+let ay = 1
164+
165+let az = 2
166+
167+let aA = 15
168+
169+let aB = 1000
170+
171+let aC = 6
172+
173+let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
174+
175+let aE = (525600 * aD)
176+
177+let aF = (86400 * aD)
178+
179+let aG = 1
180+
181+let aH = 2
182+
183+func aI (aJ) = (toString(aJ) + ",")
160184
161185
162-let ax = "k_token_param"
163-
164-let ay = "k_token_type"
165-
166-let az = "fee_reduction"
167-
168-let aA = 1
169-
170-let aB = 2
171-
172-let aC = 15
173-
174-let aD = 1000
175-
176-let aE = 6
177-
178-let aF = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
179-
180-let aG = (525600 * aF)
181-
182-let aH = (86400 * aF)
183-
184-let aI = 1
185-
186-let aJ = 2
187-
188-func aK (aL) = (toString(aL) + ",")
186+func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
189187
190188
191-func aM (aL,aN) = fraction(aL, aF, aN, HALFEVEN)
189+func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
192190
193191
194-func aO (aL,aN) = fraction(aL, aN, aF, HALFEVEN)
192+func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
195193
196194
197-func aP (aL) = sqrt(aL, aE, aE, HALFEVEN)
195+func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
198196
199197
200-func aQ (aL,aN) = pow(aL, aE, aN, aE, aE, HALFEVEN)
198+func aP (aJ) = if ((aJ > 0))
199+ then aJ
200+ else -(aJ)
201201
202202
203-func aR (aL,aN) = fraction(aL, toBigInt(aF), aN, HALFEVEN)
203+func aQ (aJ,aL) = if ((aJ >= aL))
204+ then aJ
205+ else aL
204206
205207
206-func aS (aL,aN) = fraction(aL, aN, toBigInt(aF), HALFEVEN)
208+func aR (aS) = if ((size(aS) == 0))
209+ then ""
210+ else makeString(aS, ",")
207211
208212
209-func aT (aL) = sqrtBigInt(aL, aE, aE, HALFEVEN)
213+func aT (aU) = if ((aU == ""))
214+ then nil
215+ else split(aU, ",")
210216
211217
212-func aU (aL,aN) = pow(aL, aE, aN, aE, aE, HALFEVEN)
218+func aV (aS,aW,aX) = if ((size(aS) > aW))
219+ then (removeByIndex(aS, 0) :+ aX)
220+ else (aS :+ aX)
213221
214222
215-func aV (aL) = if ((aL > 0))
216- then aL
217- else -(aL)
223+func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
218224
219225
220-func aW (aL,aN) = if ((aL >= aN))
221- then aL
222- else aN
226+func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
223227
224228
225-func aX (aY) = if ((size(aY) == 0))
226- then ""
227- else makeString(aY, ",")
228-
229-
230-func aZ (ba) = if ((ba == ""))
231- then nil
232- else split(ba, ",")
233-
234-
235-func bb (aY,bc,bd) = if ((size(aY) > bc))
236- then (removeByIndex(aY, 0) :+ bd)
237- else (aY :+ bd)
238-
239-
240-func be (bf) = valueOrErrorMessage(getInteger(this, bf), ("no value for " + bf))
241-
242-
243-func bg (bf,bh) = valueOrElse(getInteger(this, bf), bh)
244-
245-
246-func bi (al,ak) = {
247- let bj = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
248- bj
229+func bc (ak,aj) = {
230+ let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231+ bd
249232 }
250233
251234
252-func bk (al,ak) = {
253- let bj = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
254- bj
235+func be (ak,aj) = {
236+ let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237+ bd
255238 }
256239
257240
258-func bl () = be(c)
241+func bf () = aY(c)
259242
260243
261-func bm () = be(p)
244+func bg () = aY(p)
262245
263246
264-func bn () = be(q)
247+func bh () = aY(q)
265248
266249
267-func bo () = be(s)
250+func bi () = aY(s)
268251
269252
270-func bp () = be(M)
253+func bj () = aY(M)
271254
272255
273-func bq () = be(N)
256+func bk () = aY(N)
274257
275258
276-func br () = bg(O, aF)
259+func bl () = ba(O, aD)
277260
278261
279-func bs () = bg(P, aF)
262+func bm () = ba(P, aD)
280263
281264
282-func bt () = be(Q)
265+func bn () = aY(Q)
283266
284267
285-func bu () = be(T)
268+func bo () = aY(T)
286269
287270
288-func bv () = be(U)
271+func bp () = aY(U)
289272
290273
291-func bw () = be(V)
274+func bq () = aY(V)
292275
293276
294-func bx () = be(J)
277+func br () = aY(J)
295278
296279
297-func by () = be(r)
280+func bs () = aY(r)
298281
299282
300-func bz () = (by() * aF)
283+func bt () = (bs() * aD)
301284
302285
303-func bA () = (by() * aD)
286+func bu () = (bs() * aB)
304287
305288
306-func bB () = be(t)
289+func bv () = aY(t)
307290
308291
309-func bC () = be(u)
292+func bw () = aY(u)
310293
311294
312-func bD () = be(v)
295+func bx () = aY(v)
313296
314297
315-func bE () = be(w)
298+func by () = aY(w)
316299
317300
318-func bF () = be(x)
301+func bz () = aY(x)
319302
320303
321-func bG () = be(y)
304+func bA () = aY(y)
322305
323306
324-func bH () = be(z)
307+func bB () = aY(z)
325308
326309
327-func bI () = be(H)
310+func bC () = aY(H)
328311
329312
330-func bJ () = be(I)
313+func bD () = aY(I)
331314
332315
333-func bK () = be(S)
316+func bE () = aY(S)
334317
335318
336-func bL () = be(R)
319+func bF () = aY(R)
337320
338321
339-func bM () = bg(d, 0)
322+func bG () = ba(d, 0)
340323
341324
342-func bN () = be(A)
325+func bH () = aY(A)
343326
344327
345-func bO () = be(B)
328+func bI () = aY(B)
346329
347330
348-func bP () = lastBlock.timestamp
331+func bJ () = lastBlock.timestamp
349332
350333
351-func bQ (bR) = valueOrElse(getString(au(), "k_sender"), toString(bR.caller))
334+func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
352335
353336
354-func bS (bT,bU,bV) = {
355- let bW = (bT - bU)
356- if (if (bV)
357- then (0 > bW)
337+func bM (bN,bO,bP) = {
338+ let bQ = (bN - bO)
339+ if (if (bP)
340+ then (0 > bQ)
358341 else false)
359- then throw(((("Invalid margin: " + toString(bT)) + " < ") + toString(bU)))
360- else if (if (!(bV))
361- then (bW >= 0)
342+ then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343+ else if (if (!(bP))
344+ then (bQ >= 0)
362345 else false)
363- then throw(((("Invalid margin: " + toString(bT)) + " > ") + toString(bU)))
346+ then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
364347 else true
365348 }
366349
367350
368-func bX (bY) = if ((bY == 0))
351+func bR (bS) = if ((bS == 0))
369352 then throw("Should not be called with _positionSize == 0")
370- else if ((bY > 0))
371- then bI()
372- else bJ()
353+ else if ((bS > 0))
354+ then bC()
355+ else bD()
373356
374357
375-func bZ (ca) = {
376- let cb = getInteger(this, aj(e, ca))
377- let cc = cb
378- if ($isInstanceOf(cc, "Int"))
358+func bT (bU) = {
359+ let bV = getInteger(this, ai(e, bU))
360+ let bW = bV
361+ if ($isInstanceOf(bW, "Int"))
379362 then {
380- let cd = cc
381- $Tuple5(cd, getIntegerValue(this, aj(f, ca)), getIntegerValue(this, aj(g, ca)), getIntegerValue(this, aj(h, ca)), getIntegerValue(this, aj(l, ca)))
363+ let bX = bW
364+ $Tuple5(bX, getIntegerValue(this, ai(f, bU)), getIntegerValue(this, ai(g, bU)), getIntegerValue(this, ai(h, bU)), getIntegerValue(this, ai(l, bU)))
382365 }
383366 else $Tuple5(0, 0, 0, 0, 0)
384367 }
385368
386369
387-func ce (ca) = {
388- let cf = getString(this, aj(j, ca))
389- let cc = cf
390- if ($isInstanceOf(cc, "String"))
370+func bY (bU) = {
371+ let bZ = getString(this, ai(j, bU))
372+ let bW = bZ
373+ if ($isInstanceOf(bW, "String"))
391374 then {
392- let cg = cc
393- cg
375+ let ca = bW
376+ ca
394377 }
395- else toBase58String(ap())
378+ else toBase58String(an())
396379 }
397380
398381
399-func ch (ca) = {
400- let ci = getInteger(this, aj(k, ca))
401- let cc = ci
402- if ($isInstanceOf(cc, "Int"))
382+func cb (bU) = {
383+ let cc = getInteger(this, ai(k, bU))
384+ let bW = cc
385+ if ($isInstanceOf(bW, "Int"))
403386 then {
404- let cj = cc
405- cj
387+ let cd = bW
388+ cd
406389 }
407- else bm()
390+ else bg()
408391 }
409392
410393
411-func ck (ca) = if ((bZ(ca)._1 == 0))
394+func ce (bU) = if ((bT(bU)._1 == 0))
412395 then throw("No open position")
413396 else true
414397
415398
416-func cl (cm) = {
417- let cn = getString(this, cm)
418- if (if (isDefined(cn))
419- then (value(cn) != "")
399+func cf (cg) = {
400+ let ch = getString(this, cg)
401+ if (if (isDefined(ch))
402+ then (value(ch) != "")
420403 else false)
421404 then {
422- let co = split(value(cn), ",")
423- let cp = valueOrErrorMessage(addressFromString(co[0]), ("Invalid oracle address in: " + value(cn)))
424- let cq = co[1]
425- let cr = co[2]
426- let cs = co[3]
427- $Tuple4(cp, cq, cr, cs)
405+ let ci = split(value(ch), ",")
406+ let cj = valueOrErrorMessage(addressFromString(ci[0]), ("Invalid oracle address in: " + value(ch)))
407+ let ck = ci[1]
408+ let cl = ci[2]
409+ let cm = ci[3]
410+ $Tuple4(cj, ck, cl, cm)
428411 }
429412 else unit
430413 }
431414
432415
433-func ct () = valueOrElse(getBoolean(this, m), false)
416+func cn () = valueOrElse(getBoolean(this, m), false)
434417
435418
436-func cu () = valueOrElse(getBoolean(this, n), false)
419+func co () = valueOrElse(getBoolean(this, n), false)
437420
438421
439-func cv () = valueOrElse(getBoolean(this, o), false)
422+func cp () = valueOrElse(getBoolean(this, o), false)
440423
441424
442-func cw (cx,cy,cz) = if (cx)
425+func cq (cr,cs,ct) = if (cr)
443426 then {
444- let cA = (bq() - cz)
445- if ((0 >= cA))
427+ let cu = (bk() - ct)
428+ if ((0 >= cu))
446429 then throw("Tx lead to base asset reserve <= 0, revert")
447- else $Tuple3((bp() + cy), cA, (bt() + cz))
430+ else $Tuple3((bj() + cs), cu, (bn() + ct))
448431 }
449432 else {
450- let cB = (bp() - cy)
451- if ((0 >= cB))
433+ let cv = (bj() - cs)
434+ if ((0 >= cv))
452435 then throw("Tx lead to base quote reserve <= 0, revert")
453- else $Tuple3(cB, (bq() + cz), (bt() - cz))
436+ else $Tuple3(cv, (bk() + ct), (bn() - ct))
454437 }
455438
456439
457-func cC (cD,cE) = {
458- let cF = toBigInt(cD)
459- let cG = toBigInt(cE)
460- aS(cF, cG)
440+func cw (cx,cy) = {
441+ let cz = toBigInt(cx)
442+ let cA = toBigInt(cy)
443+ aO(cz, cA)
461444 }
462445
463446
464-func cH (cx,cy) = {
465- let cD = bp()
466- let cE = bq()
467- let cI = br()
468- let cJ = bs()
469- let cK = aM(cy, cI)
470- let bf = cC(cD, cE)
471- let cL = if (cx)
472- then (cD + cK)
473- else (cD - cK)
474- let cM = toInt(aR(bf, toBigInt(cL)))
475- let cN = aV((cM - cE))
476- let cO = if (cx)
477- then cN
478- else -(cN)
479- let cP = cw(cx, cK, cN)
480- let cQ = cP._1
481- let cR = cP._2
482- let cS = cP._3
483- let cT = aM(aO(cD, cI), aO(cE, cJ))
484- let cU = aM(cy, cN)
485- let cV = aV((cT - cU))
486- let cW = (aF - aM(cT, (cT + cV)))
487- let cX = bF()
488- if ((cW > cX))
489- then throw(((((((((((((("Price impact " + toString(cW)) + " > max price impact ") + toString(cX)) + " before quote asset: ") + toString(cD)) + " before base asset: ") + toString(cE)) + " quote asset amount to exchange: ") + toString(cy)) + " price before: ") + toString(cT)) + " marketPrice: ") + toString(cU)))
490- else $Tuple4(cO, cQ, cR, cS)
447+func cB (cr,cs) = {
448+ let cx = bj()
449+ let cy = bk()
450+ let cC = bl()
451+ let cD = bm()
452+ let cE = aK(cs, cC)
453+ let aZ = cw(cx, cy)
454+ let cF = if (cr)
455+ then (cx + cE)
456+ else (cx - cE)
457+ let cG = toInt(aN(aZ, toBigInt(cF)))
458+ let cH = aP((cG - cy))
459+ let cI = if (cr)
460+ then cH
461+ else -(cH)
462+ let cJ = cq(cr, cE, cH)
463+ let cK = cJ._1
464+ let cL = cJ._2
465+ let cM = cJ._3
466+ let cN = aK(aM(cx, cC), aM(cy, cD))
467+ let cO = aK(cs, cH)
468+ let cP = aP((cN - cO))
469+ let cQ = (aD - aK(cN, (cN + cP)))
470+ let cR = bz()
471+ if ((cQ > cR))
472+ then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(cx)) + " before base asset: ") + toString(cy)) + " quote asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cN)) + " marketPrice: ") + toString(cO)))
473+ else $Tuple4(cI, cK, cL, cM)
491474 }
492475
493476
494-func cY (cZ,da) = {
495- let db = ((((bP() - da) / 1000) / 60) * aF)
496- let dc = aM(aO(aO(cZ, db), bn()), aG)
497- dc
477+func cS (cT,cU) = {
478+ let cV = ((((bJ() - cU) / 1000) / 60) * aD)
479+ let cW = aK(aM(aM(cT, cV), bh()), aE)
480+ cW
498481 }
499482
500483
501-func dd (de,cZ,df,da,dg) = {
502- let dh = if ((de != 0))
484+func cX (cY,cT,cZ,cU,da) = {
485+ let db = if ((cY != 0))
503486 then {
504- let di = bX(de)
505- aO((di - df), de)
487+ let dc = bR(cY)
488+ aM((dc - cZ), cY)
506489 }
507490 else 0
508- let dc = cY(cZ, da)
509- let dj = (((dg - dc) - dh) + cZ)
510- let dk = if ((0 > dj))
511- then $Tuple2(0, aV(dj))
512- else $Tuple2(aV(dj), 0)
513- let dl = dk._1
514- let dm = dk._2
515- $Tuple4(dl, dm, dh, dc)
491+ let cW = cS(cT, cU)
492+ let dd = (((da - cW) - db) + cT)
493+ let de = if ((0 > dd))
494+ then $Tuple2(0, aP(dd))
495+ else $Tuple2(aP(dd), 0)
496+ let df = de._1
497+ let dg = de._2
498+ $Tuple4(df, dg, db, cW)
516499 }
517500
518501
519-func dn (cx,cz,do,dp,dq,dr,ds) = {
520- let cT = aM(aO(dp, dq), aO(dr, ds))
521- if ((cz == 0))
502+func dh (cr,ct,di,dj,dk,dl,dm) = {
503+ let cN = aK(aM(dj, dk), aM(dl, dm))
504+ if ((ct == 0))
522505 then throw("Invalid base asset amount")
523506 else {
524- let bf = cC(dp, dr)
525- let dt = if (cx)
526- then (dr + cz)
527- else (dr - cz)
528- let du = toInt(aR(bf, toBigInt(dt)))
529- let dv = aV((du - dp))
530- let dw = aO(dv, dq)
531- let cX = bF()
532- let dx = cw(!(cx), dv, cz)
533- let cQ = dx._1
534- let cR = dx._2
535- let cS = dx._3
536- let cU = aM(dw, cz)
537- let cV = aV((cT - cU))
538- let cW = (aF - aM(cT, (cT + cV)))
539- if (if ((cW > cX))
540- then do
507+ let aZ = cw(dj, dl)
508+ let dn = if (cr)
509+ then (dl + ct)
510+ else (dl - ct)
511+ let do = toInt(aN(aZ, toBigInt(dn)))
512+ let dp = aP((do - dj))
513+ let dq = aM(dp, dk)
514+ let cR = bz()
515+ let dr = cq(!(cr), dp, ct)
516+ let cK = dr._1
517+ let cL = dr._2
518+ let cM = dr._3
519+ let cO = aK(dq, ct)
520+ let cP = aP((cN - cO))
521+ let cQ = (aD - aK(cN, (cN + cP)))
522+ if (if ((cQ > cR))
523+ then di
541524 else false)
542- then throw(((((((((((((("Price impact " + toString(cW)) + " > max price impact ") + toString(cX)) + " before quote asset: ") + toString(dp)) + " before base asset: ") + toString(dr)) + " base asset amount to exchange: ") + toString(cz)) + " price before: ") + toString(cT)) + " market price: ") + toString(cU)))
543- else $Tuple7(dw, cQ, cR, cS, (bL() - (if (cx)
544- then aV(cz)
545- else 0)), (bK() - (if (!(cx))
546- then aV(cz)
547- else 0)), cW)
525+ then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(dj)) + " before base asset: ") + toString(dl)) + " base asset amount to exchange: ") + toString(ct)) + " price before: ") + toString(cN)) + " market price: ") + toString(cO)))
526+ else $Tuple7(dq, cK, cL, cM, (bF() - (if (cr)
527+ then aP(ct)
528+ else 0)), (bE() - (if (!(cr))
529+ then aP(ct)
530+ else 0)), cQ)
548531 }
549532 }
550533
551534
552-func dy (cx,cz,do) = dn(cx, cz, do, bp(), br(), bq(), bs())
535+func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
553536
554537
555-func dz (dA,cq,cr) = {
556- let dB = valueOrErrorMessage(getInteger(dA, cq), ((("Can not get oracle price. Oracle: " + toString(dA)) + " key: ") + cq))
557- if ((cr != ""))
538+func dt (du,ck,cl) = {
539+ let dv = valueOrErrorMessage(getInteger(du, ck), ((("Can not get oracle price. Oracle: " + toString(du)) + " key: ") + ck))
540+ if ((cl != ""))
558541 then {
559- let dC = lastBlock.height
560- let dD = valueOrErrorMessage(getInteger(dA, cr), ((("Can not get oracle block. Oracle: " + toString(dA)) + " key: ") + cr))
561- if (((dC - dD) > bO()))
562- then throw(((("Oracle stale data. Last oracle block: " + toString(dD)) + " current block: ") + toString(dC)))
563- else dB
542+ let dw = lastBlock.height
543+ let dx = valueOrErrorMessage(getInteger(du, cl), ((("Can not get oracle block. Oracle: " + toString(du)) + " key: ") + cl))
544+ if (((dw - dx) > bI()))
545+ then throw(((("Oracle stale data. Last oracle block: " + toString(dx)) + " current block: ") + toString(dw)))
546+ else dv
564547 }
565- else dB
548+ else dv
549+ }
550+
551+
552+func dy () = {
553+ let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
554+ let dA = dt(dz._1, dz._2, dz._3)
555+ let dB = cf(b)
556+ let dC = if (isDefined(dB))
557+ then {
558+ let dD = value(dB)
559+ dt(dD._1, dD._2, dD._3)
560+ }
561+ else aD
562+ aK(dA, dC)
566563 }
567564
568565
569566 func dE () = {
570- let dF = valueOrErrorMessage(cl(a), "No base asset oracle data")
571- let dG = dz(dF._1, dF._2, dF._3)
572- let dH = cl(b)
573- let dI = if (isDefined(dH))
567+ let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568+ let du = dz._1
569+ let cm = dz._4
570+ if ((cm != ""))
574571 then {
575- let dJ = value(dH)
576- dz(dJ._1, dJ._2, dJ._3)
577- }
578- else aF
579- aM(dG, dI)
580- }
581-
582-
583-func dK () = {
584- let dF = valueOrErrorMessage(cl(a), "No base asset oracle data")
585- let dA = dF._1
586- let cs = dF._4
587- if ((cs != ""))
588- then {
589- let dL = valueOrErrorMessage(getBoolean(dA, cs), ((("Can not get oracle is open/closed. Oracle: " + toString(dA)) + " key: ") + cs))
590- !(dL)
572+ let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573+ !(dF)
591574 }
592575 else false
593576 }
594577
595578
596-func dM (dN,dp,dr,cI,cJ) = {
597- let dO = aM(aO(dp, cI), aO(dr, cJ))
598- let dP = aM((dN + dO), (2 * aF))
599- let dM = aM(aV((dN - dO)), dP)
600- dM
579+func dG (dH,dj,dl,cC,cD) = {
580+ let dI = aK(aM(dj, cC), aM(dl, cD))
581+ let dJ = aK((dH + dI), (2 * aD))
582+ let dG = aK(aP((dH - dI)), dJ)
583+ dG
601584 }
602585
603586
604-func dQ (dp,dr) = {
605- let dR = dE()
606- let cI = br()
607- let cJ = bs()
608- let dS = dM(dR, bp(), bq(), cI, cJ)
609- let dT = dM(dR, dp, dr, cI, cJ)
610- if (if ((dT > bG()))
611- then (dT > dS)
587+func dK (dj,dl) = {
588+ let dL = dy()
589+ let cC = bl()
590+ let cD = bm()
591+ let dM = dG(dL, bj(), bk(), cC, cD)
592+ let dN = dG(dL, dj, dl, cC, cD)
593+ if (if ((dN > bA()))
594+ then (dN > dM)
612595 else false)
613- then throw(((("Price spread " + toString(dT)) + " > max price spread ") + toString(bG())))
596+ then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
614597 else true
615598 }
616599
617600
618-func dU (dV,dW) = {
619- let dX = bH()
620- if ((dV > dX))
621- then throw(((("Long open notional " + toString(dV)) + " > max open notional ") + toString(dX)))
622- else if ((dW > dX))
623- then throw(((("Short open notional " + toString(dW)) + " > max open notional ") + toString(dX)))
601+func dO (dP,dQ) = {
602+ let dR = bB()
603+ if ((dP > dR))
604+ then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
605+ else if ((dQ > dR))
606+ then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
624607 else true
625608 }
626609
627610
628-func dY () = {
629- let dp = bp()
630- let dr = bq()
631- let cI = br()
632- let cJ = bs()
633- aM(aO(dp, cI), aO(dr, cJ))
611+func dS () = {
612+ let dj = bj()
613+ let dl = bk()
614+ let cC = bl()
615+ let cD = bm()
616+ aK(aM(dj, cC), aM(dl, cD))
634617 }
635618
636619
637-func dZ () = {
638- let dR = dE()
639- let ea = dY()
640- (aM(aV((dR - ea)), dR) > bE())
620+func dT () = {
621+ let dL = dy()
622+ let dU = dS()
623+ (aK(aP((dL - dU)), dL) > by())
641624 }
642625
643626
644-func eb (bY,ec,dp,dq,dr,ds) = {
645- let ed = aV(bY)
646- let ee = (0 > bY)
647- let ef = if ((ec == aI))
627+func dV (bS,dW,dj,dk,dl,dm) = {
628+ let dX = aP(bS)
629+ let dY = (0 > bS)
630+ let dZ = if ((dW == aG))
648631 then {
649- let eg = dn(!(ee), ed, false, dp, dq, dr, ds)._1
650- eg
632+ let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633+ ea
651634 }
652- else aO(ed, dE())
653- ef
635+ else aM(dX, dy())
636+ dZ
654637 }
655638
656639
657-func eh (bY,ei,dp,dq,dr,ds,ec) = if ((bY == 0))
640+func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
658641 then throw("Invalid position size")
659642 else {
660- let ee = (0 > bY)
661- let ef = eb(bY, ec, dp, dq, dr, ds)
662- let ej = if (ee)
663- then (ei - ef)
664- else (ef - ei)
665- $Tuple2(ef, ej)
643+ let dY = (0 > bS)
644+ let dZ = dV(bS, dW, dj, dk, dl, dm)
645+ let ed = if (dY)
646+ then (ec - dZ)
647+ else (dZ - ec)
648+ $Tuple2(dZ, ed)
666649 }
667650
668651
669-func ek (ca,ec) = {
670- let el = bZ(ca)
671- let cd = el._1
672- let em = el._2
673- let en = el._3
674- let eo = el._4
675- eh(cd, en, bp(), br(), bq(), bs(), ec)
652+func ee (bU,dW) = {
653+ let ef = bT(bU)
654+ let bX = ef._1
655+ let eg = ef._2
656+ let eh = ef._3
657+ let ei = ef._4
658+ eb(bX, eh, bj(), bl(), bk(), bm(), dW)
676659 }
677660
678661
679-func ep (eq,er,es) = aM((eq - er), es)
662+func ej (ek,el,em) = aK((ek - el), em)
680663
681664
682-func et (ca,ec) = {
683- let eu = bZ(ca)
684- let cd = eu._1
685- let em = eu._2
686- let ev = eu._3
687- let ew = eu._4
688- let ex = eu._5
689- let ey = ek(ca, ec)
690- let ef = ey._1
691- let ej = ey._2
692- let ez = dd(cd, em, ew, ex, ej)
693- let dl = ez._1
694- let dm = ez._2
695- ep(dl, dm, ef)
665+func en (bU,dW) = {
666+ let eo = bT(bU)
667+ let bX = eo._1
668+ let eg = eo._2
669+ let ep = eo._3
670+ let eq = eo._4
671+ let er = eo._5
672+ let es = ee(bU, dW)
673+ let dZ = es._1
674+ let ed = es._2
675+ let et = cX(bX, eg, eq, er, ed)
676+ let df = et._1
677+ let dg = et._2
678+ ej(df, dg, dZ)
696679 }
697680
698681
699-func eA (ca) = et(ca, aI)
682+func eu (bU) = en(bU, aG)
700683
701684
702-func eB (ca,bY) = {
703- let eC = aW(bD(), (aF - aM(eA(ca), bB())))
704- let eD = aO(aV(bY), eC)
705- let eE = dy((bY > 0), eD, false)
706- let eF = eE._1
707- let cW = eE._7
708- if ((bF() > cW))
709- then eD
710- else aO(aV(bY), bD())
685+func ev (bU,bS) = {
686+ let ew = aQ(bx(), (aD - aK(eu(bU), bv())))
687+ let ex = aM(aP(bS), ew)
688+ let ey = ds((bS > 0), ex, false)
689+ let ez = ey._1
690+ let cQ = ey._7
691+ if ((bz() > cQ))
692+ then ex
693+ else aM(aP(bS), bx())
711694 }
712695
713696
714-func eG (ca,eH,eI,eJ,eK,do) = {
715- let eL = bZ(ca)
716- let eM = eL._1
717- let eN = eL._2
718- let eO = eL._3
719- let eP = eL._4
720- let eQ = eL._5
721- let eR = (eM > 0)
722- let eS = aV(eM)
723- if (if ((eS >= eH))
724- then (eH > 0)
697+func eA (bU,eB,eC,eD,eE,di,eF) = {
698+ let eG = bT(bU)
699+ let eH = eG._1
700+ let eI = eG._2
701+ let eJ = eG._3
702+ let eK = eG._4
703+ let eL = eG._5
704+ let eM = (eH > 0)
705+ let eN = aP(eH)
706+ if (if ((eN >= eB))
707+ then (eB > 0)
725708 else false)
726709 then {
727- let eT = (eS > eH)
728- let eU = dy((eM > 0), eH, do)
729- let eV = eU._1
730- let cL = eU._2
731- let cM = eU._3
732- let eW = eU._4
733- let eX = if ((eM > 0))
734- then -(eH)
735- else eH
736- let eY = ek(ca, aI)
737- let eZ = eY._1
738- let ej = eY._2
739- let fa = aM(aV(eX), eS)
740- let fb = aO(ej, fa)
741- let fc = dd(eM, eN, eP, eQ, ej)
742- let fd = fc._1
743- let fe = fc._2
744- let ff = fc._3
745- let dc = fc._4
746- let fg = dd(eM, eN, eP, eQ, fb)._2
747- let fh = aO(aO(eZ, fa), eI)
748- let fi = (ej - fb)
749- let fj = if ((eM > 0))
750- then ((eZ - eV) - fi)
751- else ((fi + eZ) - eV)
752- let fk = (eM + eX)
753- let fl = if ((fk == 0))
710+ let eO = (eN > eB)
711+ let eP = ds((eH > 0), eB, di)
712+ let eQ = eP._1
713+ let cF = eP._2
714+ let cG = eP._3
715+ let eR = eP._4
716+ let eS = if ((eH > 0))
717+ then -(eB)
718+ else eB
719+ let eT = ee(bU, aG)
720+ let eU = eT._1
721+ let ed = eT._2
722+ let eV = aK(aP(eS), eN)
723+ let eW = aM(ed, eV)
724+ let eX = cX(eH, eI, eK, eL, ed)
725+ let eY = eX._1
726+ let eZ = eX._2
727+ let fa = eX._3
728+ let cW = eX._4
729+ let fb = cX(eH, eI, eK, eL, eW)._2
730+ let fc = aM(aM(eU, eV), eC)
731+ let fd = (ed - eW)
732+ let fe = if ((eH > 0))
733+ then ((eU - eQ) - fd)
734+ else ((fd + eU) - eQ)
735+ let ff = (eH + eS)
736+ let fg = if ((ff == 0))
754737 then $Tuple2(0, 0)
755- else $Tuple2(aV(fj), bX(fk))
756- let fm = fl._1
757- let fn = fl._2
758- let fo = (eO - fm)
759- let fp = et(ca, aI)
760- let fq = if ((eM > 0))
761- then (aO((fm + fi), fp) - fi)
762- else (aO((fm - fi), fp) - fi)
763- let fr = ((fd - (fq + fi)) - fh)
764- let fs = if ((0 > fr))
765- then throw("Invalid internalClosePosition params: unable to pay fee")
766- else fr
767- let ft = if (eK)
768- then (fq + fs)
769- else fq
770- if (if ((eJ != 0))
771- then (eJ > eV)
738+ else $Tuple2(aP(fe), bR(ff))
739+ let fh = fg._1
740+ let fi = fg._2
741+ let fj = (eJ - fh)
742+ let fk = en(bU, aG)
743+ let fl = if ((eH > 0))
744+ then (aM((fh + fd), fk) - fd)
745+ else (aM((fh - fd), fk) - fd)
746+ let fm = ((eY - (fl + fd)) - fc)
747+ let fn = if ((0 > fm))
748+ then if (eF)
749+ then 0
750+ else throw("Invalid internalClosePosition params: unable to pay fee")
751+ else fm
752+ let fo = if (eE)
753+ then (fl + fn)
754+ else fl
755+ if (if ((eD != 0))
756+ then (eD > eQ)
772757 else false)
773- then throw(((("Limit error: " + toString(eV)) + " < ") + toString(eJ)))
774- else $Tuple17(fk, ft, fm, fn, fg, fb, if (if (eK)
775- then eT
758+ then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759+ else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760+ then eO
776761 else false)
777762 then 0
778- else fs, cL, cM, eW, (bu() - fo), (bL() - (if (eR)
779- then aV(eX)
780- else 0)), (bK() - (if (!(eR))
781- then aV(eX)
782- else 0)), (bw() - (if (eR)
783- then fo
784- else 0)), (bv() - (if (!(eR))
785- then fo
786- else 0)), (fh + dc), eV)
763+ else fn, cF, cG, eR, (bo() - fj), (bF() - (if (eM)
764+ then aP(eS)
765+ else 0)), (bE() - (if (!(eM))
766+ then aP(eS)
767+ else 0)), (bq() - (if (eM)
768+ then fj
769+ else 0)), (bp() - (if (!(eM))
770+ then fj
771+ else 0)), (fc + cW), eQ)
787772 }
788- else throw("Invalid internalClosePosition params: invalid position size")
773+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
789774 }
790775
791776
792-func fu () = {
793- let fv = ((bP() / 1000) / 60)
794- let fw = (fv - aC)
795- let fx = valueOrElse(getString(this, C), "")
796- let fy = split(fx, ",")
797- func fz (fA,fB) = if ((fw >= valueOrErrorMessage(parseInt(fB), ("getTwapSpotPrice: invalid int: " + fx))))
798- then (fA :+ parseIntValue(fB))
799- else fA
777+func fp () = {
778+ let fq = ((bJ() / 1000) / 60)
779+ let fr = (fq - aA)
780+ let fs = valueOrElse(getString(this, C), "")
781+ let ft = split(fs, ",")
782+ func fu (fv,fw) = if ((fr >= valueOrErrorMessage(parseInt(fw), ("getTwapSpotPrice: invalid int: " + fs))))
783+ then (fv :+ parseIntValue(fw))
784+ else fv
800785
801- let fC = {
802- let fD = fy
803- let fE = size(fD)
804- let fF = nil
805- func fG (fH,fI) = if ((fI >= fE))
806- then fH
807- else fz(fH, fD[fI])
786+ let fx = {
787+ let fy = ft
788+ let fz = size(fy)
789+ let fA = nil
790+ func fB (fC,fD) = if ((fD >= fz))
791+ then fC
792+ else fu(fC, fy[fD])
808793
809- func fJ (fH,fI) = if ((fI >= fE))
810- then fH
794+ func fE (fC,fD) = if ((fD >= fz))
795+ then fC
811796 else throw("List size exceeds 20")
812797
813- fJ(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
798+ fE(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
814799 }
815- let fK = if ((size(fC) > 0))
816- then max(fC)
817- else valueOrErrorMessage(parseInt(fy[0]), ("getTwapSpotPrice: invalid int: " + fx))
818- let fL = valueOrElse(getInteger(this, D), 0)
819- let fM = valueOrElse(getInteger(this, ((E + "_") + toString(fL))), 0)
820- let fN = valueOrElse(getInteger(this, ((F + "_") + toString(fL))), 0)
821- let fO = (fM + ((fv - fL) * fN))
822- let fP = valueOrElse(getInteger(this, ((E + "_") + toString(fK))), 0)
823- let fQ = valueOrElse(getInteger(this, ((F + "_") + toString(fK))), 0)
824- let fR = (fP + ((fw - fK) * fQ))
825- ((fO - fR) / aC)
800+ let fF = if ((size(fx) > 0))
801+ then max(fx)
802+ else valueOrErrorMessage(parseInt(ft[0]), ("getTwapSpotPrice: invalid int: " + fs))
803+ let fG = valueOrElse(getInteger(this, D), 0)
804+ let fH = valueOrElse(getInteger(this, ((E + "_") + toString(fG))), 0)
805+ let fI = valueOrElse(getInteger(this, ((F + "_") + toString(fG))), 0)
806+ let fJ = (fH + ((fq - fG) * fI))
807+ let fK = valueOrElse(getInteger(this, ((E + "_") + toString(fF))), 0)
808+ let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fF))), 0)
809+ let fM = (fK + ((fr - fF) * fL))
810+ ((fJ - fM) / aA)
826811 }
827812
828813
829-func fS () = {
830- let bY = bt()
831- if ((bY == 0))
832- then $Tuple2(bp(), bq())
814+func fN () = {
815+ let bS = bn()
816+ if ((bS == 0))
817+ then $Tuple2(bj(), bk())
833818 else {
834- let fT = (bY > 0)
835- let fU = dy(fT, aV(bY), false)
836- let fV = fU._1
837- let fW = fU._2
838- let fX = fU._3
839- $Tuple2(fW, fX)
819+ let fO = (bS > 0)
820+ let fP = ds(fO, aP(bS), false)
821+ let fQ = fP._1
822+ let fR = fP._2
823+ let fS = fP._3
824+ $Tuple2(fR, fS)
840825 }
841826 }
842827
843828
844-func fY (fZ,bt,ga,gb) = {
845- let gc = toBigInt(fZ)
846- let gd = toBigInt(bt)
847- let ge = toBigInt(ga)
848- let gf = toBigInt(gb)
849- let bf = aS(ge, gc)
850- let gg = (gc + gd)
851- let gh = aR(bf, gg)
852- let gi = aR(gh, gg)
853- let gj = aR(gf, gi)
854- toInt(gj)
829+func fT (fU,bn,fV,fW) = {
830+ let fX = toBigInt(fU)
831+ let fY = toBigInt(bn)
832+ let fZ = toBigInt(fV)
833+ let ga = toBigInt(fW)
834+ let aZ = aO(fZ, fX)
835+ let gb = (fX + fY)
836+ let gc = aN(aZ, gb)
837+ let gd = aN(gc, gb)
838+ let ge = aN(ga, gd)
839+ toInt(ge)
855840 }
856841
857842
858-func gk (gl,cD,cE) = {
859- let bY = bt()
860- if ((bY == 0))
843+func gf (gg,cx,cy) = {
844+ let bS = bn()
845+ if ((bS == 0))
861846 then {
862- let gm = aM(aO(gl, cE), cD)
863- $Tuple3(gm, aF, 0)
847+ let gh = aK(aM(gg, cy), cx)
848+ $Tuple3(gh, aD, 0)
864849 }
865850 else {
866- let fT = (bY > 0)
867- let fV = dy(fT, aV(bY), false)._1
868- let gm = fY(cE, bY, cD, gl)
869- let gn = aF
870- let go = eh(bY, fV, cD, gm, cE, gn, aI)._2
871- $Tuple3(gm, gn, go)
851+ let fO = (bS > 0)
852+ let fQ = ds(fO, aP(bS), false)._1
853+ let gh = fT(cy, bS, cx, gg)
854+ let gi = aD
855+ let gj = eb(bS, fQ, cx, gh, cy, gi, aG)._2
856+ $Tuple3(gh, gi, gj)
872857 }
873858 }
874859
875860
876-func gp () = {
877- let gq = dE()
878- let gr = fu()
879- let gs = (gr - gq)
880- if (if (if ((bK() == 0))
861+func gk () = {
862+ let gl = dy()
863+ let gm = fp()
864+ let gn = (gm - gl)
865+ if (if (if ((bE() == 0))
881866 then true
882- else (bL() == 0))
867+ else (bF() == 0))
883868 then true
884- else dK())
869+ else dE())
885870 then $Tuple2(0, 0)
886- else if ((0 > gs))
871+ else if ((0 > gn))
887872 then {
888- let gt = aM(aO(gs, bz()), aH)
889- let gu = aM(aO(gt, bK()), bL())
890- $Tuple2(gt, gu)
873+ let go = aK(aM(gn, bt()), aF)
874+ let gp = aK(aM(go, bE()), bF())
875+ $Tuple2(go, gp)
891876 }
892877 else {
893- let gu = aM(aO(gs, bz()), aH)
894- let gt = aM(aO(gu, bL()), bK())
895- $Tuple2(gt, gu)
878+ let gp = aK(aM(gn, bt()), aF)
879+ let go = aK(aM(gp, bF()), bE())
880+ $Tuple2(go, gp)
896881 }
897882 }
898883
899884
900-func gv (gw,gx) = {
901- let gy = bm()
902- let gz = aO(gy, gx)
903- let gA = if ((gw != ""))
885+func gq (gr,gs) = {
886+ let gt = bg()
887+ let gu = aM(gt, gs)
888+ let gv = if ((gr != ""))
904889 then {
905- let gB = bi(aw(), aj(ay, gw))
906- if ((gB == az))
890+ let gw = bc(au(), ai(aw, gr))
891+ if ((gw == ax))
907892 then {
908- let gC = bk(aw(), aj(ax, gw))
909- let gD = aO(gz, gC)
910- $Tuple2(gD, true)
893+ let gx = be(au(), ai(av, gr))
894+ let gy = aM(gu, gx)
895+ $Tuple2(gy, true)
911896 }
912897 else throw("Invalid attached artifact")
913898 }
914- else $Tuple2(gz, false)
915- let gD = gA._1
916- let gE = gA._2
917- $Tuple2(gD, gE)
899+ else $Tuple2(gu, false)
900+ let gy = gv._1
901+ let gz = gv._2
902+ $Tuple2(gy, gz)
918903 }
919904
920905
921-func gF (ca,gG) = {
922- let eM = bZ(ca)._1
923- if ((eM == 0))
906+func gA (bU,gB) = {
907+ let eH = bT(bU)._1
908+ if ((eH == 0))
924909 then true
925- else (ce(ca) == gG)
910+ else (bY(bU) == gB)
926911 }
927912
928913
929-func gH (ca,gG) = (ce(ca) == gG)
914+func gC (bU,gB) = (bY(bU) == gB)
930915
931916
932-func gI (ca,gw) = {
933- let gJ = invoke(at(), "computeFeeDiscount", [ca], nil)
934- if ((gJ == gJ))
917+func gD (bU,gr) = {
918+ let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919+ if ((gE == gE))
935920 then {
936- let gK = {
937- let cc = gJ
938- if ($isInstanceOf(cc, "Int"))
921+ let gF = {
922+ let bW = gE
923+ if ($isInstanceOf(bW, "Int"))
939924 then {
940- let gL = cc
941- gL
925+ let gG = bW
926+ gG
942927 }
943928 else throw("Invalid computeFeeDiscount result")
944929 }
945- let gM = gv(gw, gK)
946- let gD = gM._1
947- let gE = gM._2
948- $Tuple2(gD, gE)
930+ let gH = gq(gr, gF)
931+ let gy = gH._1
932+ let gz = gH._2
933+ $Tuple2(gy, gz)
949934 }
950935 else throw("Strict value is not equal to itself.")
951936 }
952937
953938
954-func gN (bR) = {
955- let gO = if ((size(bR.payments) > 1))
956- then toBase58String(valueOrErrorMessage(bR.payments[1].assetId, "Invalid artifactId"))
939+func gI (bL) = {
940+ let gJ = if ((size(bL.payments) > 1))
941+ then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
957942 else ""
958- gO
943+ gJ
959944 }
960945
961946
962-func gP (gQ) = {
963- let gR = aO(gQ, bN())
964- let gS = (gQ - gR)
965- $Tuple2(gR, gS)
947+func gK (gL) = {
948+ let gM = aM(gL, bH())
949+ let gN = (gL - gM)
950+ $Tuple2(gM, gN)
966951 }
967952
968953
969-func gT (gU,gV,gW,gX,eI,gY,gZ,ha,hb,dX,hc,hd,he) = [IntegerEntry(s, gU), IntegerEntry(t, gV), IntegerEntry(u, gW), IntegerEntry(r, gX), IntegerEntry(p, eI), IntegerEntry(w, gY), IntegerEntry(x, gZ), IntegerEntry(v, ha), IntegerEntry(y, hb), IntegerEntry(z, dX), IntegerEntry(A, hc), IntegerEntry(B, hc), IntegerEntry(q, he)]
954+func gO (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = [IntegerEntry(s, gP), IntegerEntry(t, gQ), IntegerEntry(u, gR), IntegerEntry(r, gS), IntegerEntry(p, eC), IntegerEntry(w, gT), IntegerEntry(x, gU), IntegerEntry(v, gV), IntegerEntry(y, gW), IntegerEntry(z, dR), IntegerEntry(A, gX), IntegerEntry(B, gX), IntegerEntry(q, gZ)]
970955
971956
972-func hf (hg,hh,hi,hj,hk) = [IntegerEntry(J, hg), IntegerEntry(H, hh), IntegerEntry(I, hi), IntegerEntry(K, hj), IntegerEntry(L, hk)]
957+func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
973958
974959
975-func hl (hm,al) = if (hm)
960+func hg (hh,ak) = if (hh)
976961 then {
977- let hn = bM()
978-[IntegerEntry(aj(i, al), (hn + 1)), IntegerEntry(d, (hn + 1))]
962+ let hi = bG()
963+[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
979964 }
980965 else nil
981966
982967
983-func ho (hm,al,eI) = if (hm)
984- then [IntegerEntry(aj(k, al), eI)]
968+func hj (hh,ak,eC) = if (hh)
969+ then [IntegerEntry(ai(k, ak), eC)]
985970 else nil
986971
987972
988-func hp (al,eH,hq,hr,di,hs) = [IntegerEntry(aj(e, al), eH), IntegerEntry(aj(f, al), hq), IntegerEntry(aj(g, al), hr), IntegerEntry(aj(h, al), di), IntegerEntry(aj(l, al), hs)]
973+func hk (ak,eB,hl,hm,dc,hn) = [IntegerEntry(ai(e, ak), eB), IntegerEntry(ai(f, ak), hl), IntegerEntry(ai(g, ak), hm), IntegerEntry(ai(h, ak), dc), IntegerEntry(ai(l, ak), hn)]
989974
990975
991-func ht (hu) = {
992- let fv = ((bP() / 1000) / 60)
993- let hv = valueOrElse(getInteger(this, D), 0)
994- if ((hv > fv))
976+func ho (hp) = {
977+ let fq = ((bJ() / 1000) / 60)
978+ let hq = valueOrElse(getInteger(this, D), 0)
979+ if ((hq > fq))
995980 then throw("TWAP out-of-order")
996981 else {
997- let fL = if ((hv == 0))
998- then fv
999- else hv
1000- if ((fv > hv))
982+ let fG = if ((hq == 0))
983+ then fq
984+ else hq
985+ if ((fq > hq))
1001986 then {
1002- let hw = valueOrElse(getInteger(this, ((E + "_") + toString(hv))), 0)
1003- let hx = valueOrElse(getInteger(this, ((F + "_") + toString(hv))), hu)
1004- let hy = (hw + ((fv - fL) * hx))
1005- let fy = bb(aZ(valueOrElse(getString(this, C), "")), aC, toString(fv))
1006-[IntegerEntry(aj(E, toString(fv)), hy), IntegerEntry(aj(F, toString(fv)), hu), IntegerEntry(aj(G, toString(fv)), hv), IntegerEntry(D, fv), StringEntry(C, aX(fy))]
987+ let hr = valueOrElse(getInteger(this, ((E + "_") + toString(hq))), 0)
988+ let hs = valueOrElse(getInteger(this, ((F + "_") + toString(hq))), hp)
989+ let ht = (hr + ((fq - fG) * hs))
990+ let ft = aV(aT(valueOrElse(getString(this, C), "")), aA, toString(fq))
991+[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp), IntegerEntry(ai(G, toString(fq)), hq), IntegerEntry(D, fq), StringEntry(C, aR(ft))]
1007992 }
1008993 else {
1009- let hz = valueOrElse(getInteger(this, aj(G, toString(fv))), 0)
1010- let hw = valueOrElse(getInteger(this, aj(E, toString(hz))), 0)
1011- let hx = valueOrElse(getInteger(this, aj(F, toString(hz))), hu)
1012- let hy = (hw + ((fv - hz) * hx))
1013-[IntegerEntry(aj(E, toString(fv)), hy), IntegerEntry(aj(F, toString(fv)), hu)]
994+ let hu = valueOrElse(getInteger(this, ai(G, toString(fq))), 0)
995+ let hr = valueOrElse(getInteger(this, ai(E, toString(hu))), 0)
996+ let hs = valueOrElse(getInteger(this, ai(F, toString(hu))), hp)
997+ let ht = (hr + ((fq - hu) * hs))
998+[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp)]
1014999 }
10151000 }
10161001 }
10171002
10181003
1019-func hA (cD,cE) = [IntegerEntry(M, cD), IntegerEntry(N, cE)]
1004+func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
10201005
10211006
1022-func hB (cI,cJ) = [IntegerEntry(O, cI), IntegerEntry(P, cJ)]
1007+func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
10231008
10241009
1025-func hC (cD,cE,hD,hE,hF,hG,hH,hI) = {
1026- let cI = br()
1027- let cJ = bs()
1028- if (((hF - hG) != hD))
1029- then throw(((((("Invalid AMM state data: " + toString(hF)) + " + ") + toString(hG)) + " != ") + toString(hD)))
1030- else ((hA(cD, cE) ++ [IntegerEntry(Q, hD), IntegerEntry(T, hE), IntegerEntry(R, hF), IntegerEntry(S, hG), IntegerEntry(V, hH), IntegerEntry(U, hI)]) ++ ht(aM(aO(cD, cI), aO(cE, cJ))))
1010+func hx (cx,cy,hy,hz,hA,hB,hC,hD) = {
1011+ let cC = bl()
1012+ let cD = bm()
1013+ if (((hA - hB) != hy))
1014+ then throw(((((("Invalid AMM state data: " + toString(hA)) + " + ") + toString(hB)) + " != ") + toString(hy)))
1015+ else ((hv(cx, cy) ++ [IntegerEntry(Q, hy), IntegerEntry(T, hz), IntegerEntry(R, hA), IntegerEntry(S, hB), IntegerEntry(V, hC), IntegerEntry(U, hD)]) ++ ho(aK(aM(cx, cC), aM(cy, cD))))
10311016 }
10321017
10331018
1034-func hJ (al) = [DeleteEntry(aj(e, al)), DeleteEntry(aj(f, al)), DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(k, al)), DeleteEntry(aj(l, al))]
1019+func hE (ak) = [DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(j, ak)), DeleteEntry(ai(k, ak)), DeleteEntry(ai(l, ak))]
10351020
10361021
1037-func hK (al,hL) = {
1038- let hM = assetBalance(this, ap())
1039- if ((hL > hM))
1040- then throw(((("Unable to withdraw " + toString(hL)) + " from contract balance ") + toString(hM)))
1041- else [ScriptTransfer(al, hL, ap())]
1022+func hF (ak,hG) = {
1023+ let hH = assetBalance(this, an())
1024+ if ((hG > hH))
1025+ then throw(((("Unable to withdraw " + toString(hG)) + " from contract balance ") + toString(hH)))
1026+ else [ScriptTransfer(ak, hG, an())]
10421027 }
10431028
10441029
1045-func hN (bR) = if ((0 > bR))
1030+func hI (bL) = if ((0 > bL))
10461031 then throw("Balance")
1047- else [IntegerEntry(c, bR)]
1032+ else [IntegerEntry(c, bL)]
10481033
10491034
1050-func hO (bR) = [ScriptTransfer(ar(), bR, ap())]
1035+func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
10511036
10521037
1053-func hP (hQ,bR) = if (hQ)
1054- then [Burn(valueOrErrorMessage(bR.payments[1].assetId, "Invalid artifact"), 1)]
1038+func hK (hL,bL) = if (hL)
1039+ then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
10551040 else nil
10561041
10571042
1058-@Callable(bR)
1059-func pause () = if ((bR.caller != an()))
1043+@Callable(bL)
1044+func pause () = if ((bL.caller != am()))
10601045 then throw("Invalid pause params")
10611046 else [BooleanEntry(n, true)]
10621047
10631048
10641049
1065-@Callable(bR)
1066-func unpause () = if ((bR.caller != an()))
1050+@Callable(bL)
1051+func unpause () = if ((bL.caller != am()))
10671052 then throw("Invalid unpause params")
10681053 else [BooleanEntry(n, false)]
10691054
10701055
10711056
1072-@Callable(bR)
1073-func setCloseOnly () = if ((bR.caller != an()))
1057+@Callable(bL)
1058+func setCloseOnly () = if ((bL.caller != am()))
10741059 then throw("Invalid setCloseOnly params")
10751060 else [BooleanEntry(o, true)]
10761061
10771062
10781063
1079-@Callable(bR)
1080-func unsetCloseOnly () = if ((bR.caller != an()))
1064+@Callable(bL)
1065+func unsetCloseOnly () = if ((bL.caller != am()))
10811066 then throw("Invalid unsetCloseOnly params")
10821067 else [BooleanEntry(o, false)]
10831068
10841069
10851070
1086-@Callable(bR)
1087-func addLiquidity (cy) = if (if ((bR.caller != an()))
1071+@Callable(bL)
1072+func addLiquidity (cs) = if (if ((bL.caller != am()))
10881073 then true
1089- else (0 >= cy))
1074+ else (0 >= cs))
10901075 then throw("Invalid addLiquidity params")
10911076 else {
1092- let cD = bp()
1093- let cE = bq()
1094- let cI = br()
1095- let cJ = bs()
1096- let hR = aM(aO(cD, cI), aO(cE, cJ))
1097- let hS = (cD + cy)
1098- let hT = (aM(aO(hS, cI), hR) - cE)
1099- let hU = (cE + hT)
1100- let hV = gk(dE(), hS, hU)
1101- let hW = hV._1
1102- let hX = hV._2
1103- let go = hV._3
1104- let hY = if ((go != 0))
1077+ let cx = bj()
1078+ let cy = bk()
1079+ let cC = bl()
1080+ let cD = bm()
1081+ let hM = aK(aM(cx, cC), aM(cy, cD))
1082+ let hN = (cx + cs)
1083+ let hO = (aK(aM(hN, cC), hM) - cy)
1084+ let hP = (cy + hO)
1085+ let hQ = gf(dy(), hN, hP)
1086+ let hR = hQ._1
1087+ let hS = hQ._2
1088+ let gj = hQ._3
1089+ let hT = if ((gj != 0))
11051090 then {
1106- let hY = invoke(as(), "exchangeFreeAndLocked", [go], nil)
1107- if ((hY == hY))
1091+ let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092+ if ((hT == hT))
11081093 then nil
11091094 else throw("Strict value is not equal to itself.")
11101095 }
11111096 else nil
1112- if ((hY == hY))
1113- then (hA(hS, hU) ++ hB(hW, hX))
1097+ if ((hT == hT))
1098+ then (hv(hN, hP) ++ hw(hR, hS))
11141099 else throw("Strict value is not equal to itself.")
11151100 }
11161101
11171102
11181103
1119-@Callable(bR)
1120-func removeLiquidity (cy) = if (if ((bR.caller != an()))
1104+@Callable(bL)
1105+func removeLiquidity (cs) = if (if ((bL.caller != am()))
11211106 then true
1122- else (cy >= 0))
1107+ else (cs >= 0))
11231108 then throw("Invalid removeLiquidity params")
11241109 else {
1125- let cD = bp()
1126- let cE = bq()
1127- let cI = br()
1128- let cJ = bs()
1129- let hR = aM(aO(cD, cI), aO(cE, cJ))
1130- let hS = (cD - cy)
1131- let hZ = aV((aM(aO(hS, cI), hR) - cE))
1132- let hU = (cE - hZ)
1133- let ia = gk(dE(), hS, hU)
1134- let hW = ia._1
1135- let hX = ia._2
1136- let go = ia._3
1137- let hY = if ((go != 0))
1110+ let cx = bj()
1111+ let cy = bk()
1112+ let cC = bl()
1113+ let cD = bm()
1114+ let hM = aK(aM(cx, cC), aM(cy, cD))
1115+ let hN = (cx - cs)
1116+ let hU = aP((aK(aM(hN, cC), hM) - cy))
1117+ let hP = (cy - hU)
1118+ let hV = gf(dy(), hN, hP)
1119+ let hR = hV._1
1120+ let hS = hV._2
1121+ let gj = hV._3
1122+ let hT = if ((gj != 0))
11381123 then {
1139- let hY = invoke(as(), "exchangeFreeAndLocked", [go], nil)
1140- if ((hY == hY))
1124+ let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125+ if ((hT == hT))
11411126 then nil
11421127 else throw("Strict value is not equal to itself.")
11431128 }
11441129 else nil
1145- if ((hY == hY))
1146- then (hA(hS, hU) ++ hB(hW, hX))
1130+ if ((hT == hT))
1131+ then (hv(hN, hP) ++ hw(hR, hS))
11471132 else throw("Strict value is not equal to itself.")
11481133 }
11491134
11501135
11511136
1152-@Callable(bR)
1153-func changeSettings (gU,gV,gW,gX,eI,gY,gZ,ha,hb,dX,hc,hd,he) = if ((bR.caller != an()))
1137+@Callable(bL)
1138+func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
11541139 then throw("Invalid changeSettings params")
1155- else gT(gU, gV, gW, gX, eI, gY, gZ, ha, hb, dX, hc, hd, he)
1140+ else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
11561141
11571142
11581143
1159-@Callable(bR)
1160-func initialize (cD,cE,gX,gU,gV,gW,eI,ib,ic,id,gY,gZ,ha,hb,dX,hc,hd,he) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cD))
1144+@Callable(bL)
1145+func initialize (cx,cy,gS,gP,gQ,gR,eC,hW,hX,hY,gT,gU,gV,gW,dR,gX,gY,gZ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cx))
11611146 then true
1162- else (0 >= cE))
1147+ else (0 >= cy))
11631148 then true
1164- else (0 >= gX))
1149+ else (0 >= gS))
1150+ then true
1151+ else (0 >= gP))
1152+ then true
1153+ else (0 >= gQ))
1154+ then true
1155+ else (0 >= gR))
1156+ then true
1157+ else (0 >= eC))
1158+ then true
1159+ else (0 >= gT))
11651160 then true
11661161 else (0 >= gU))
11671162 then true
11691164 then true
11701165 else (0 >= gW))
11711166 then true
1172- else (0 >= eI))
1167+ else (0 >= dR))
1168+ then true
1169+ else (0 >= gX))
1170+ then true
1171+ else (gX > aD))
11731172 then true
11741173 else (0 >= gY))
11751174 then true
11761175 else (0 >= gZ))
11771176 then true
1178- else (0 >= ha))
1177+ else cn())
11791178 then true
1180- else (0 >= hb))
1181- then true
1182- else (0 >= dX))
1183- then true
1184- else (0 >= hc))
1185- then true
1186- else (hc > aF))
1187- then true
1188- else (0 >= hd))
1189- then true
1190- else (0 >= he))
1191- then true
1192- else ct())
1179+ else (bL.caller != this))
11931180 then throw("Invalid initialize parameters")
1194- else ((((hC(cD, cE, 0, 0, 0, 0, 0, 0) ++ gT(gU, gV, gW, gX, eI, gY, gZ, ha, hb, dX, hc, hd, he)) ++ hf((bP() + gX), 0, 0, 0, 0)) ++ hN(0)) ++ [BooleanEntry(m, true), StringEntry(a, ib), StringEntry(b, ic), StringEntry(X, id)])
1181+ else ((((hx(cx, cy, 0, 0, 0, 0, 0, 0) ++ gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)) ++ ha((bJ() + gS), 0, 0, 0, 0)) ++ hI(0)) ++ [BooleanEntry(m, true), StringEntry(a, hW), StringEntry(b, hX), StringEntry(X, toString(addressFromStringValue(hY)))])
11951182
11961183
11971184
1198-@Callable(bR)
1199-func increasePosition (ie,if,ig,ih) = {
1200- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1201- if ((ii == ii))
1185+@Callable(bL)
1186+func increasePosition (hZ,ia,ib,ic) = {
1187+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188+ if ((id == id))
12021189 then {
1203- let ij = invoke(this, "ensureCalledOnce", nil, nil)
1204- if ((ij == ij))
1190+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191+ if ((ie == ie))
12051192 then {
1206- let ca = bQ(bR)
1207- let ik = bR.payments[0].amount
1208- let gG = bR.payments[0].assetId
1209- let il = toBase58String(value(gG))
1210- let im = (gG == ap())
1211- if (if (if (if (if (if (if (if (if (if ((ie != aA))
1212- then (ie != aB)
1193+ let bU = bK(bL)
1194+ let if = bL.payments[0].amount
1195+ let gB = bL.payments[0].assetId
1196+ let ig = toBase58String(value(gB))
1197+ let ih = (gB == an())
1198+ if (if (if (if (if (if (if (if (if (if ((hZ != ay))
1199+ then (hZ != az)
12131200 else false)
12141201 then true
1215- else (0 >= ik))
1202+ else (0 >= if))
12161203 then true
1217- else !(ct()))
1204+ else !(cn()))
12181205 then true
1219- else !(im))
1206+ else !(ih))
12201207 then true
1221- else !(gF(ca, il)))
1208+ else !(gA(bU, ig)))
12221209 then true
1223- else !(bS(aM(aF, if), bo(), true)))
1210+ else !(bM(aK(aD, ia), bi(), true)))
12241211 then true
1225- else cu())
1212+ else co())
12261213 then true
1227- else cv())
1214+ else cp())
12281215 then true
1229- else dK())
1216+ else dE())
12301217 then throw("Invalid increasePosition parameters")
12311218 else {
1232- let in = gI(ca, gN(bR))
1233- let gD = in._1
1234- let gE = in._2
1235- let hL = aM(ik, (aO(gD, if) + aF))
1236- let io = (ik - hL)
1237- let ip = invoke(av(), "acceptPaymentWithLink", [ca, ih], [AttachedPayment(ap(), io)])
1238- if ((ip == ip))
1219+ let ii = gD(bU, gI(bL))
1220+ let gy = ii._1
1221+ let gz = ii._2
1222+ let hG = aK(if, (aM(gy, ia) + aD))
1223+ let ij = (if - hG)
1224+ let ik = invoke(at(), "acceptPaymentWithLink", [bU, ic], [AttachedPayment(an(), ij)])
1225+ if ((ik == ik))
12391226 then {
1240- let iq = {
1241- let cc = ip
1242- if ($isInstanceOf(cc, "Int"))
1227+ let il = {
1228+ let bW = ik
1229+ if ($isInstanceOf(bW, "Int"))
12431230 then {
1244- let gL = cc
1245- gL
1231+ let gG = bW
1232+ gG
12461233 }
12471234 else throw("Invalid referrerFee")
12481235 }
1249- let ir = (io - iq)
1250- let is = bZ(ca)
1251- let eM = is._1
1252- let eN = is._2
1253- let eO = is._3
1254- let eP = is._4
1255- let eQ = is._5
1256- let it = (eM == 0)
1257- let iu = if ((eM > 0))
1258- then (ie == aA)
1259- else (ie == aB)
1260- let iv = if (!(it))
1261- then iu
1236+ let im = (ij - il)
1237+ let in = bT(bU)
1238+ let eH = in._1
1239+ let eI = in._2
1240+ let eJ = in._3
1241+ let eK = in._4
1242+ let eL = in._5
1243+ let io = (eH == 0)
1244+ let ip = if ((eH > 0))
1245+ then (hZ == ay)
1246+ else (hZ == az)
1247+ let iq = if (!(io))
1248+ then ip
12621249 else false
1263- let iw = (ie == aA)
1264- let ix = if (if (it)
1250+ let ir = (hZ == ay)
1251+ let is = if (if (io)
12651252 then true
1266- else iv)
1253+ else iq)
12671254 then {
1268- let iy = aO(hL, if)
1269- let iz = cH(iw, iy)
1270- let cO = iz._1
1271- let cL = iz._2
1272- let cM = iz._3
1273- let eW = iz._4
1274- if (if ((ig != 0))
1275- then (ig > aV(cO))
1255+ let it = aM(hG, ia)
1256+ let iu = cB(ir, it)
1257+ let cI = iu._1
1258+ let cF = iu._2
1259+ let cG = iu._3
1260+ let eR = iu._4
1261+ if (if ((ib != 0))
1262+ then (ib > aP(cI))
12761263 else false)
1277- then throw(((("Limit error: " + toString(aV(cO))) + " < ") + toString(ig)))
1264+ then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
12781265 else {
1279- let fk = (eM + cO)
1280- let iA = (bw() + (if ((fk > 0))
1281- then iy
1266+ let ff = (eH + cI)
1267+ let iv = (bq() + (if ((ff > 0))
1268+ then it
12821269 else 0))
1283- let iB = (bv() + (if ((0 > fk))
1284- then iy
1270+ let iw = (bp() + (if ((0 > ff))
1271+ then it
12851272 else 0))
1286- let iC = dd(eM, eN, eP, eQ, hL)
1287- let dl = iC._1
1288- let fe = iC._2
1289- let ff = iC._3
1290- let dc = iC._4
1291- if (!(dQ(cL, cM)))
1273+ let ix = cX(eH, eI, eK, eL, hG)
1274+ let df = ix._1
1275+ let eZ = ix._2
1276+ let fa = ix._3
1277+ let cW = ix._4
1278+ if (!(dK(cF, cG)))
12921279 then throw("Over max spread limit")
1293- else if (!(dU(iA, iB)))
1280+ else if (!(dO(iv, iw)))
12941281 then throw("Over max open notional")
1295- else $Tuple14(fk, dl, (eO + iy), bX(fk), bP(), cM, cL, eW, (bu() + iy), (bL() + (if ((fk > 0))
1296- then aV(cO)
1297- else 0)), (bK() + (if ((0 > fk))
1298- then aV(cO)
1299- else 0)), iA, iB, dc)
1282+ else $Tuple14(ff, df, (eJ + it), bR(ff), bJ(), cG, cF, eR, (bo() + it), (bF() + (if ((ff > 0))
1283+ then aP(cI)
1284+ else 0)), (bE() + (if ((0 > ff))
1285+ then aP(cI)
1286+ else 0)), iv, iw, cW)
13001287 }
13011288 }
13021289 else {
1303- let iy = aO(hL, if)
1304- let iD = ek(toString(bR.caller), aI)
1305- let eZ = iD._1
1306- let ej = iD._2
1307- if ((eZ > iy))
1290+ let it = aM(hG, ia)
1291+ let iy = ee(toString(bL.caller), aG)
1292+ let eU = iy._1
1293+ let ed = iy._2
1294+ if ((eU > it))
13081295 then throw("Use decreasePosition to decrease position size")
13091296 else throw("Close position first")
13101297 }
1311- let fk = ix._1
1312- let iE = ix._2
1313- let fm = ix._3
1314- let iF = ix._4
1315- let iG = ix._5
1316- let cM = ix._6
1317- let cL = ix._7
1318- let eW = ix._8
1319- let iH = ix._9
1320- let iI = ix._10
1321- let iJ = ix._11
1322- let iA = ix._12
1323- let iB = ix._13
1324- let dc = ix._14
1325- let iK = gP((ir + dc))
1326- let gR = iK._1
1327- let gS = iK._2
1328- let iL = if ((hL >= dc))
1329- then invoke(as(), "addLocked", nil, [AttachedPayment(ap(), (hL - dc))])
1330- else invoke(as(), "withdrawLocked", [(dc - hL)], nil)
1331- if ((iL == iL))
1298+ let ff = is._1
1299+ let iz = is._2
1300+ let fh = is._3
1301+ let iA = is._4
1302+ let iB = is._5
1303+ let cG = is._6
1304+ let cF = is._7
1305+ let eR = is._8
1306+ let iC = is._9
1307+ let iD = is._10
1308+ let iE = is._11
1309+ let iv = is._12
1310+ let iw = is._13
1311+ let cW = is._14
1312+ let iF = gK((im + cW))
1313+ let gM = iF._1
1314+ let gN = iF._2
1315+ let iG = if ((hG >= cW))
1316+ then invoke(aq(), "addLocked", nil, [AttachedPayment(an(), (hG - cW))])
1317+ else invoke(aq(), "withdrawLocked", [(cW - hG)], nil)
1318+ if ((iG == iG))
13321319 then {
1333- let iM = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gS)])
1334- if ((iM == iM))
1320+ let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321+ if ((iH == iH))
13351322 then {
1336- let iN = invoke(at(), "notifyFees", [ca, ir], nil)
1337- if ((iN == iN))
1323+ let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324+ if ((iI == iI))
13381325 then {
1339- let iO = invoke(at(), "notifyNotional", [ca, fm], nil)
1340- if ((iO == iO))
1341- then ((((((hp(ca, fk, iE, fm, iF, iG) ++ hl(it, ca)) ++ ho(it, ca, gD)) ++ hC(cL, cM, eW, iH, iI, iJ, iA, iB)) ++ hO(gR)) ++ hN(((bl() + hL) - dc))) ++ hP(gE, bR))
1326+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1327+ if ((iJ == iJ))
1328+ then ((((((hk(bU, ff, iz, fh, iA, iB) ++ hg(io, bU)) ++ hj(io, bU, gy)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hJ(gM)) ++ hI(((bf() + hG) - cW))) ++ hK(gz, bL))
13421329 else throw("Strict value is not equal to itself.")
13431330 }
13441331 else throw("Strict value is not equal to itself.")
13571344
13581345
13591346
1360-@Callable(bR)
1347+@Callable(bL)
13611348 func addMargin () = {
1362- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1363- if ((ii == ii))
1349+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350+ if ((id == id))
13641351 then {
1365- let ij = invoke(this, "ensureCalledOnce", nil, nil)
1366- if ((ij == ij))
1352+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353+ if ((ie == ie))
13671354 then {
1368- let ca = toString(bR.caller)
1369- let hL = bR.payments[0].amount
1370- let gG = bR.payments[0].assetId
1371- let il = toBase58String(value(gG))
1372- let im = (gG == ap())
1373- if (if (if (if (if (if (if (!(im))
1355+ let bU = toString(bL.caller)
1356+ let hG = bL.payments[0].amount
1357+ let gB = bL.payments[0].assetId
1358+ let ig = toBase58String(value(gB))
1359+ let ih = (gB == an())
1360+ if (if (if (if (if (if (if (!(ih))
13741361 then true
1375- else !(ck(toString(bR.caller))))
1362+ else !(ce(toString(bL.caller))))
13761363 then true
1377- else !(gH(ca, il)))
1364+ else !(gC(bU, ig)))
13781365 then true
1379- else !(ct()))
1366+ else !(cn()))
13801367 then true
1381- else cu())
1368+ else co())
13821369 then true
1383- else cv())
1370+ else cp())
13841371 then true
1385- else dK())
1372+ else dE())
13861373 then throw("Invalid addMargin parameters")
13871374 else {
1388- let iP = bZ(ca)
1389- let eM = iP._1
1390- let eN = iP._2
1391- let eO = iP._3
1392- let eP = iP._4
1393- let eQ = iP._5
1394- let iL = invoke(as(), "addLocked", nil, [AttachedPayment(ap(), hL)])
1395- if ((iL == iL))
1375+ let iK = bT(bU)
1376+ let eH = iK._1
1377+ let eI = iK._2
1378+ let eJ = iK._3
1379+ let eK = iK._4
1380+ let eL = iK._5
1381+ let iG = invoke(aq(), "addLocked", nil, [AttachedPayment(an(), hG)])
1382+ if ((iG == iG))
13961383 then {
1397- let dc = cY(eN, eQ)
1398- let iQ = if ((dc > 0))
1384+ let cW = cS(eI, eL)
1385+ let iL = if ((cW > 0))
13991386 then {
1400- let iR = gP(dc)
1401- let gR = iR._1
1402- let gS = iR._2
1403- let iS = invoke(as(), "withdrawLocked", [gR], nil)
1404- if ((iS == iS))
1387+ let iM = gK(cW)
1388+ let gM = iM._1
1389+ let gN = iM._2
1390+ let iN = invoke(aq(), "withdrawLocked", [gM], nil)
1391+ if ((iN == iN))
14051392 then {
1406- let iT = invoke(as(), "exchangeFreeAndLocked", [-(gS)], nil)
1407- if ((iT == iT))
1408- then hO(gR)
1393+ let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394+ if ((iO == iO))
1395+ then hJ(gM)
14091396 else throw("Strict value is not equal to itself.")
14101397 }
14111398 else throw("Strict value is not equal to itself.")
14121399 }
14131400 else nil
1414- if ((iQ == iQ))
1415- then ((hp(ca, eM, ((eN - dc) + hL), eO, eP, bP()) ++ hN(((bl() + hL) - dc))) ++ iQ)
1401+ if ((iL == iL))
1402+ then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
14161403 else throw("Strict value is not equal to itself.")
14171404 }
14181405 else throw("Strict value is not equal to itself.")
14251412
14261413
14271414
1428-@Callable(bR)
1429-func removeMargin (hL) = {
1430- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1431- if ((ii == ii))
1415+@Callable(bL)
1416+func removeMargin (hG) = {
1417+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418+ if ((id == id))
14321419 then {
1433- let ij = invoke(this, "ensureCalledOnce", nil, nil)
1434- if ((ij == ij))
1420+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421+ if ((ie == ie))
14351422 then {
1436- let ca = toString(bR.caller)
1437- if (if (if (if (if ((0 >= hL))
1423+ let bU = toString(bL.caller)
1424+ if (if (if (if (if ((0 >= hG))
14381425 then true
1439- else !(ck(ca)))
1426+ else !(ce(bU)))
14401427 then true
1441- else !(ct()))
1428+ else !(cn()))
14421429 then true
1443- else cu())
1430+ else co())
14441431 then true
1445- else dK())
1432+ else dE())
14461433 then throw("Invalid removeMargin parameters")
14471434 else {
1448- let iU = bZ(ca)
1449- let eM = iU._1
1450- let eN = iU._2
1451- let eO = iU._3
1452- let eP = iU._4
1453- let eQ = iU._5
1454- let iV = dd(eM, eN, eP, eQ, -(hL))
1455- let dl = iV._1
1456- let dm = iV._2
1457- let dh = iV._3
1458- let dc = iV._4
1459- if ((dm != 0))
1435+ let iP = bT(bU)
1436+ let eH = iP._1
1437+ let eI = iP._2
1438+ let eJ = iP._3
1439+ let eK = iP._4
1440+ let eL = iP._5
1441+ let iQ = cX(eH, eI, eK, eL, -(hG))
1442+ let df = iQ._1
1443+ let dg = iQ._2
1444+ let db = iQ._3
1445+ let cW = iQ._4
1446+ if ((dg != 0))
14601447 then throw("Invalid removed margin amount")
14611448 else {
1462- let fp = ep(dl, dm, eO)
1463- if (!(bS(fp, bo(), true)))
1464- then throw(((("Too much margin removed: " + toString(fp)) + " < ") + toString(bo())))
1449+ let fk = ej(df, dg, eJ)
1450+ if (!(bM(fk, bi(), true)))
1451+ then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
14651452 else {
1466- let iW = gP(dc)
1467- let gR = iW._1
1468- let gS = iW._2
1469- let iQ = if ((dc > 0))
1453+ let iR = gK(cW)
1454+ let gM = iR._1
1455+ let gN = iR._2
1456+ let iL = if ((cW > 0))
14701457 then {
1471- let iT = invoke(as(), "exchangeFreeAndLocked", [-(gS)], nil)
1472- if ((iT == iT))
1473- then hO(gR)
1458+ let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459+ if ((iO == iO))
1460+ then hJ(gM)
14741461 else throw("Strict value is not equal to itself.")
14751462 }
14761463 else nil
1477- if ((iQ == iQ))
1464+ if ((iL == iL))
14781465 then {
1479- let iS = invoke(as(), "withdrawLocked", [(hL + gR)], nil)
1480- if ((iS == iS))
1481- then (((hp(ca, eM, dl, eO, bX(eM), bP()) ++ hK(bR.caller, hL)) ++ hN(((bl() - hL) - dc))) ++ iQ)
1466+ let iN = invoke(aq(), "withdrawLocked", [(hG + gM)], nil)
1467+ if ((iN == iN))
1468+ then (((hk(bU, eH, df, eJ, bR(eH), bJ()) ++ hF(bL.caller, hG)) ++ hI(((bf() - hG) - cW))) ++ iL)
14821469 else throw("Strict value is not equal to itself.")
14831470 }
14841471 else throw("Strict value is not equal to itself.")
14931480
14941481
14951482
1496-@Callable(bR)
1497-func closePosition (eH,eJ,eK) = {
1498- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1499- if ((ii == ii))
1483+@Callable(bL)
1484+func closePosition (eB,eD,eE) = {
1485+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486+ if ((id == id))
15001487 then {
1501- let ij = invoke(this, "ensureCalledOnce", nil, nil)
1502- if ((ij == ij))
1488+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489+ if ((ie == ie))
15031490 then {
1504- let ca = bQ(bR)
1505- let iX = valueOrErrorMessage(addressFromString(ca), "Invalid caller")
1506- let cj = ch(ca)
1507- if (if (if (if (if (if (!(ck(ca)))
1491+ let bU = bK(bL)
1492+ let iS = valueOrErrorMessage(addressFromString(bU), "Invalid caller")
1493+ let cd = cb(bU)
1494+ if (if (if (if (if (if (!(ce(bU)))
15081495 then true
1509- else !(ct()))
1496+ else !(cn()))
15101497 then true
1511- else cu())
1498+ else co())
15121499 then true
1513- else (0 >= eH))
1500+ else (0 >= eB))
15141501 then true
1515- else (0 > eJ))
1502+ else (0 > eD))
15161503 then true
1517- else dK())
1504+ else dE())
15181505 then throw("Invalid closePosition parameters")
15191506 else {
1520- let eQ = bZ(ca)._5
1521- let iY = eG(ca, eH, cj, eJ, eK, true)
1522- let fk = iY._1
1523- let ft = iY._2
1524- let fm = iY._3
1525- let fn = iY._4
1526- let fg = iY._5
1527- let fb = iY._6
1528- let fs = iY._7
1529- let cL = iY._8
1530- let cM = iY._9
1531- let eW = iY._10
1532- let iH = iY._11
1533- let iI = iY._12
1534- let iJ = iY._13
1535- let iA = iY._14
1536- let iB = iY._15
1537- let iZ = iY._16
1538- if ((fg > 0))
1507+ let eL = bT(bU)._5
1508+ let iT = eA(bU, eB, cd, eD, eE, true, true)
1509+ let ff = iT._1
1510+ let fo = iT._2
1511+ let fh = iT._3
1512+ let fi = iT._4
1513+ let fb = iT._5
1514+ let eW = iT._6
1515+ let fn = iT._7
1516+ let cF = iT._8
1517+ let cG = iT._9
1518+ let eR = iT._10
1519+ let iC = iT._11
1520+ let iD = iT._12
1521+ let iE = iT._13
1522+ let iv = iT._14
1523+ let iw = iT._15
1524+ let iU = iT._16
1525+ if ((fb > 0))
15391526 then throw("Invalid closePosition parameters: bad debt")
1540- else if ((eQ >= bP()))
1527+ else if ((eL >= bJ()))
15411528 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15421529 else {
1543- let eT = (fk != 0)
1544- let ja = (fs + iZ)
1545- let jb = (bl() - ja)
1546- let jc = if ((0 > jb))
1530+ let eO = (ff != 0)
1531+ let iV = (fn + iU)
1532+ let iW = (bf() - iV)
1533+ let iX = if ((0 > iW))
15471534 then 0
1548- else jb
1549- let iS = invoke(as(), "withdrawLocked", [ja], nil)
1550- if ((iS == iS))
1535+ else iW
1536+ let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537+ if ((iN == iN))
15511538 then {
1552- let jd = gP(iZ)
1553- let gR = jd._1
1554- let gS = jd._2
1555- let iM = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gS)])
1556- if ((iM == iM))
1539+ let iY = gK(iU)
1540+ let gM = iY._1
1541+ let gN = iY._2
1542+ let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1543+ if ((iH == iH))
15571544 then {
1558- let iN = invoke(at(), "notifyFees", [ca, iZ], nil)
1559- if ((iN == iN))
1545+ let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546+ if ((iI == iI))
15601547 then {
1561- let iO = invoke(at(), "notifyNotional", [ca, fm], nil)
1562- if ((iO == iO))
1563- then (((((if (eT)
1564- then hp(ca, fk, ft, fm, fn, bP())
1565- else hJ(ca)) ++ hC(cL, cM, eW, iH, iI, iJ, iA, iB)) ++ (if ((fs > 0))
1566- then hK(iX, fs)
1567- else nil)) ++ hN(jc)) ++ hO(gR))
1548+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1549+ if ((iJ == iJ))
1550+ then (((((if (eO)
1551+ then hk(bU, ff, fo, fh, fi, bJ())
1552+ else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ (if ((fn > 0))
1553+ then hF(iS, fn)
1554+ else nil)) ++ hI(iX)) ++ hJ(gM))
15681555 else throw("Strict value is not equal to itself.")
15691556 }
15701557 else throw("Strict value is not equal to itself.")
15821569
15831570
15841571
1585-@Callable(bR)
1586-func liquidate (ca) = {
1587- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1588- if ((ii == ii))
1572+@Callable(bL)
1573+func liquidate (bU) = {
1574+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575+ if ((id == id))
15891576 then {
1590- let je = et(ca, aI)
1591- let jf = if (dZ())
1577+ let iZ = en(bU, aG)
1578+ let ja = if (dT())
15921579 then {
1593- let jg = et(ca, aJ)
1594- aW(je, jg)
1580+ let jb = en(bU, aH)
1581+ aQ(iZ, jb)
15951582 }
1596- else je
1597- if (if (if (if (if (!(bS(jf, bB(), false)))
1583+ else iZ
1584+ if (if (if (if (if (!(bM(ja, bv(), false)))
15981585 then true
1599- else !(ck(ca)))
1586+ else !(ce(bU)))
16001587 then true
1601- else !(ct()))
1588+ else !(cn()))
16021589 then true
1603- else cu())
1590+ else co())
16041591 then true
1605- else dK())
1592+ else dE())
16061593 then throw("Unable to liquidate")
16071594 else {
1608- let jh = if (if ((je > bC()))
1609- then true
1610- else (bD() > 0))
1611- then true
1612- else (aF > bD())
1613- let eM = bZ(ca)._1
1614- let ed = aV(eM)
1615- let ji = if (jh)
1595+ let jc = if (if ((iZ > bw()))
1596+ then (bx() > 0)
1597+ else false)
1598+ then (aD > bx())
1599+ else false
1600+ let eH = bT(bU)._1
1601+ let dX = aP(eH)
1602+ let jd = if (jc)
16161603 then {
1617- let jj = eB(ca, eM)
1618- let jk = aM(aV(jj), ed)
1619- $Tuple2(jk, aV(jj))
1604+ let je = ev(bU, eH)
1605+ let jf = aK(aP(je), dX)
1606+ $Tuple2(jf, aP(je))
16201607 }
1621- else $Tuple2(0, ed)
1622- let jk = ji._1
1623- let jj = ji._2
1624- let jl = eG(ca, if (jh)
1625- then jj
1626- else ed, bC(), 0, true, false)
1627- let fk = jl._1
1628- let ft = jl._2
1629- let fm = jl._3
1630- let fn = jl._4
1631- let fg = jl._5
1632- let fb = jl._6
1633- let fs = jl._7
1634- let cL = jl._8
1635- let cM = jl._9
1636- let eW = jl._10
1637- let iH = jl._11
1638- let iI = jl._12
1639- let iJ = jl._13
1640- let iA = jl._14
1641- let iB = jl._15
1642- let jm = jl._16
1643- let jn = (jm / 2)
1644- let gS = (jm - jn)
1645- let jb = (bl() - jm)
1646- let jo = if ((0 > jb))
1608+ else $Tuple2(0, dX)
1609+ let jf = jd._1
1610+ let je = jd._2
1611+ let jg = eA(bU, if (jc)
1612+ then je
1613+ else dX, bw(), 0, true, false, true)
1614+ let ff = jg._1
1615+ let fo = jg._2
1616+ let fh = jg._3
1617+ let fi = jg._4
1618+ let fb = jg._5
1619+ let eW = jg._6
1620+ let fn = jg._7
1621+ let cF = jg._8
1622+ let cG = jg._9
1623+ let eR = jg._10
1624+ let iC = jg._11
1625+ let iD = jg._12
1626+ let iE = jg._13
1627+ let iv = jg._14
1628+ let iw = jg._15
1629+ let jh = jg._16
1630+ let ji = (jh / 2)
1631+ let gN = (jh - ji)
1632+ let iW = (bf() - jh)
1633+ let jj = if ((0 > iW))
16471634 then 0
1648- else jb
1649- let iT = if ((fg > 0))
1635+ else iW
1636+ let iO = if ((fb > 0))
16501637 then {
1651- let iT = invoke(as(), "exchangeFreeAndLocked", [fg], nil)
1652- if ((iT == iT))
1638+ let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639+ if ((iO == iO))
16531640 then nil
16541641 else throw("Strict value is not equal to itself.")
16551642 }
16561643 else nil
1657- if ((iT == iT))
1644+ if ((iO == iO))
16581645 then {
1659- let iS = invoke(as(), "withdrawLocked", [jm], nil)
1660- if ((iS == iS))
1646+ let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647+ if ((iN == iN))
16611648 then {
1662- let jp = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gS)])
1663- if ((jp == jp))
1649+ let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650+ if ((jk == jk))
16641651 then {
1665- let iO = invoke(at(), "notifyNotional", [ca, fm], nil)
1666- if ((iO == iO))
1667- then ((((if (jh)
1668- then hp(ca, fk, ft, fm, fn, bP())
1669- else hJ(ca)) ++ hC(cL, cM, eW, iH, iI, iJ, iA, iB)) ++ hK(bR.caller, jn)) ++ hN(jo))
1652+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1653+ if ((iJ == iJ))
1654+ then ((((if (jc)
1655+ then hk(bU, ff, fo, fh, fi, bJ())
1656+ else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hF(bL.caller, ji)) ++ hI(jj))
16701657 else throw("Strict value is not equal to itself.")
16711658 }
16721659 else throw("Strict value is not equal to itself.")
16811668
16821669
16831670
1684-@Callable(bR)
1671+@Callable(bL)
16851672 func payFunding () = {
1686- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1687- if ((ii == ii))
1673+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674+ if ((id == id))
16881675 then {
1689- let jq = bx()
1690- if (if (if ((jq > bP()))
1676+ let jl = br()
1677+ if (if (if ((jl > bJ()))
16911678 then true
1692- else !(ct()))
1679+ else !(cn()))
16931680 then true
1694- else cu())
1695- then throw(((("Invalid funding block timestamp: " + toString(bP())) + " < ") + toString(jq)))
1681+ else co())
1682+ then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
16961683 else {
1697- let gq = dE()
1698- let jr = gp()
1699- let gt = jr._1
1700- let gu = jr._2
1701- hf((jq + bA()), (bI() + gu), (bJ() + gt), aM(gu, gq), aM(gt, gq))
1684+ let gl = dy()
1685+ let jm = gk()
1686+ let go = jm._1
1687+ let gp = jm._2
1688+ ha((jl + bu()), (bC() + gp), (bD() + go), aK(gp, gl), aK(go, gl))
17021689 }
17031690 }
17041691 else throw("Strict value is not equal to itself.")
17061693
17071694
17081695
1709-@Callable(bR)
1696+@Callable(bL)
17101697 func syncTerminalPriceToOracle () = {
1711- let cD = bp()
1712- let cE = bq()
1713- let js = gk(dE(), cD, cE)
1714- let hW = js._1
1715- let hX = js._2
1716- let go = js._3
1717- let hY = if ((go != 0))
1698+ let cx = bj()
1699+ let cy = bk()
1700+ let jn = gf(dy(), cx, cy)
1701+ let hR = jn._1
1702+ let hS = jn._2
1703+ let gj = jn._3
1704+ let jo = if (if ((0 > gj))
1705+ then (aP(gj) > bf())
1706+ else false)
1707+ then -(bf())
1708+ else gj
1709+ let hT = if ((jo != 0))
17181710 then {
1719- let hY = invoke(as(), "exchangeFreeAndLocked", [go], nil)
1720- if ((hY == hY))
1711+ let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712+ if ((hT == hT))
17211713 then nil
17221714 else throw("Strict value is not equal to itself.")
17231715 }
17241716 else nil
1725- if ((hY == hY))
1726- then ((hN((bl() + go)) ++ hB(hW, hX)) ++ ht(aM(aO(cD, hW), aO(cE, hX))))
1717+ if ((hT == hT))
1718+ then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
17271719 else throw("Strict value is not equal to itself.")
17281720 }
17291721
17301722
17311723
1732-@Callable(bR)
1733-func ensureCalledOnce () = if ((bR.caller != this))
1724+@Callable(bL)
1725+func ensureCalledOnce () = if ((bL.caller != this))
17341726 then throw("Invalid saveCurrentTxId parameters")
17351727 else {
1736- let jt = valueOrElse(getString(this, W), "")
1737- if ((jt != toBase58String(bR.transactionId)))
1738- then [StringEntry(W, jt)]
1728+ let jp = valueOrElse(getString(this, W), "")
1729+ if ((jp != toBase58String(bL.transactionId)))
1730+ then [StringEntry(W, jp)]
17391731 else throw("Can not call vAMM methods twice in one tx")
17401732 }
17411733
17421734
17431735
1744-@Callable(bR)
1745-func view_calcRemainMarginWithFundingPayment (ca) = {
1746- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1747- if ((ii == ii))
1736+@Callable(bL)
1737+func view_calcRemainMarginWithFundingPayment (bU) = {
1738+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739+ if ((id == id))
17481740 then {
1749- let ju = bZ(ca)
1750- let cd = ju._1
1751- let em = ju._2
1752- let ev = ju._3
1753- let eo = ju._4
1754- let ex = ju._5
1755- let jv = ek(ca, aI)
1756- let ef = jv._1
1757- let ej = jv._2
1758- let jw = dd(cd, em, eo, ex, ej)
1759- let dl = jw._1
1760- let dm = jw._2
1761- let dh = jw._3
1762- let dc = jw._4
1763- throw(((((((aK(dl) + aK(dh)) + aK(eA(ca))) + aK(ej)) + aK(dm)) + aK(ef)) + aK(dc)))
1741+ let jq = bT(bU)
1742+ let bX = jq._1
1743+ let eg = jq._2
1744+ let ep = jq._3
1745+ let ei = jq._4
1746+ let er = jq._5
1747+ let jr = ee(bU, aG)
1748+ let dZ = jr._1
1749+ let ed = jr._2
1750+ let js = cX(bX, eg, ei, er, ed)
1751+ let df = js._1
1752+ let dg = js._2
1753+ let db = js._3
1754+ let cW = js._4
1755+ throw(((((((aI(df) + aI(db)) + aI(eu(bU))) + aI(ed)) + aI(dg)) + aI(dZ)) + aI(cW)))
17641756 }
17651757 else throw("Strict value is not equal to itself.")
17661758 }
17671759
17681760
17691761
1770-@Callable(bR)
1771-func view_getPegAdjustCost (hu) = {
1772- let cD = bp()
1773- let cE = bq()
1774- let gj = gk(hu, cD, cE)
1775- throw(toString(gj._3))
1762+@Callable(bL)
1763+func view_getPegAdjustCost (hp) = {
1764+ let cx = bj()
1765+ let cy = bk()
1766+ let ge = gf(hp, cx, cy)
1767+ throw(toString(ge._3))
17761768 }
17771769
17781770
17791771
1780-@Callable(bR)
1772+@Callable(bL)
17811773 func view_getTerminalAmmPrice () = {
1782- let jx = fS()
1783- let fW = jx._1
1784- let fX = jx._2
1785- let hR = aM(aO(fW, br()), aO(fX, bs()))
1786- throw(toString(hR))
1774+ let jt = fN()
1775+ let fR = jt._1
1776+ let fS = jt._2
1777+ let hM = aK(aM(fR, bl()), aM(fS, bm()))
1778+ throw(toString(hM))
17871779 }
17881780
17891781
17901782
1791-@Callable(bR)
1783+@Callable(bL)
17921784 func view_getFunding () = {
1793- let gq = dE()
1794- let jy = gp()
1795- let gt = jy._1
1796- let gu = jy._2
1797- let jz = aM(gu, gq)
1798- let jA = aM(gt, gq)
1799- throw((((aK(jz) + aK(jA)) + aK(fu())) + aK(dE())))
1785+ let gl = dy()
1786+ let ju = gk()
1787+ let go = ju._1
1788+ let gp = ju._2
1789+ let jv = aK(gp, gl)
1790+ let jw = aK(go, gl)
1791+ throw((((aI(jv) + aI(jw)) + aI(fp())) + aI(dy())))
18001792 }
18011793
18021794
18031795
1804-@Callable(bR)
1796+@Callable(bL)
18051797 func computeSpotPrice () = {
1806- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1807- if ((ii == ii))
1798+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799+ if ((id == id))
18081800 then {
1809- let gj = dY()
1810- $Tuple2(nil, gj)
1801+ let ge = dS()
1802+ $Tuple2(nil, ge)
18111803 }
18121804 else throw("Strict value is not equal to itself.")
18131805 }
18141806
18151807
18161808
1817-@Callable(bR)
1818-func computeFeeForTraderWithArtifact (ca,gw) = {
1819- let gj = gI(ca, gw)
1820- $Tuple2(nil, gj)
1809+@Callable(bL)
1810+func computeFeeForTraderWithArtifact (bU,gr) = {
1811+ let ge = gD(bU, gr)
1812+ $Tuple2(nil, ge)
18211813 }
18221814
18231815
1824-@Verifier(jB)
1825-func jC () = sigVerify(jB.bodyBytes, jB.proofs[0], ao())
1816+@Verifier(jx)
1817+func jy () = {
1818+ let jz = getString(this, X)
1819+ if (isDefined(jz))
1820+ then {
1821+ let jA = getString(addressFromStringValue(value(jz)), Z)
1822+ if (isDefined(jA))
1823+ then valueOrElse(getBoolean(addressFromStringValue(value(jA)), ((("status_" + toString(this)) + "_") + toBase58String(jx.id))), false)
1824+ else throw("unable to verify: admin not set in coordinator")
1825+ }
1826+ else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
1827+ }
18261828
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_baseOracle"
55
66 let b = "k_quoteOracle"
77
88 let c = "k_balance"
99
1010 let d = "k_sequence"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionSequence"
2121
2222 let j = "k_positionAsset"
2323
2424 let k = "k_positionFee"
2525
2626 let l = "k_positionTimestamp"
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_rollover_fee"
3737
3838 let r = "k_fundingPeriod"
3939
4040 let s = "k_initMarginRatio"
4141
4242 let t = "k_mmr"
4343
4444 let u = "k_liquidationFeeRatio"
4545
4646 let v = "k_partLiquidationRatio"
4747
4848 let w = "k_spreadLimit"
4949
5050 let x = "k_maxPriceImpact"
5151
5252 let y = "k_maxPriceSpread"
5353
5454 let z = "k_maxOpenNotional"
5555
5656 let A = "k_feeToStakersPercent"
5757
5858 let B = "k_maxOracleDelay"
5959
6060 let C = "k_lastDataStr"
6161
6262 let D = "k_lastMinuteId"
6363
6464 let E = "k_twapDataLastCumulativePrice"
6565
6666 let F = "k_twapDataLastPrice"
6767
6868 let G = "k_twapDataPreviousMinuteId"
6969
7070 let H = "k_latestLongPremiumFraction"
7171
7272 let I = "k_latestShortPremiumFraction"
7373
7474 let J = "k_nextFundingBlockMinTimestamp"
7575
7676 let K = "k_longFundingRate"
7777
7878 let L = "k_shortFundingRate"
7979
8080 let M = "k_qtAstR"
8181
8282 let N = "k_bsAstR"
8383
8484 let O = "k_qtAstW"
8585
8686 let P = "k_bsAstW"
8787
8888 let Q = "k_totalPositionSize"
8989
9090 let R = "k_totalLongPositionSize"
9191
9292 let S = "k_totalShortPositionSize"
9393
9494 let T = "k_openInterestNotional"
9595
9696 let U = "k_openInterestShort"
9797
9898 let V = "k_openInterestLong"
9999
100100 let W = "k_lastTx"
101101
102102 let X = "k_coordinatorAddress"
103103
104104 let Y = "k_vault_address"
105105
106106 let Z = "k_admin_address"
107107
108-let aa = "k_admin_public_key"
108+let aa = "k_quote_asset"
109109
110-let ab = "k_quote_asset"
110+let ab = "k_quote_staking"
111111
112-let ac = "k_quote_staking"
112+let ac = "k_staking_address"
113113
114-let ad = "k_staking_address"
114+let ad = "k_miner_address"
115115
116-let ae = "k_miner_address"
116+let ae = "k_orders_address"
117117
118-let af = "k_orders_address"
118+let af = "k_referral_address"
119119
120-let ag = "k_referral_address"
120+let ag = "k_exchange_address"
121121
122-let ah = "k_exchange_address"
122+let ah = "k_nft_manager_address"
123123
124-let ai = "k_nft_manager_address"
125-
126-func aj (ak,al) = ((ak + "_") + al)
124+func ai (aj,ak) = ((aj + "_") + ak)
127125
128126
129-func am () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
127+func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
130128
131129
132-func an () = addressFromString(getStringValue(am(), Z))
130+func am () = addressFromString(getStringValue(al(), Z))
133131
134132
135-func ao () = fromBase58String(getStringValue(am(), aa))
133+func an () = fromBase58String(getStringValue(al(), aa))
136134
137135
138-func ap () = fromBase58String(getStringValue(am(), ab))
136+func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
139137
140138
141-func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Quote asset staking not set")
139+func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
142140
143141
144-func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Staking not set")
142+func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
145143
146144
147-func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), Y)), "Vault not set")
145+func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
148146
149147
150-func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Miner not set")
148+func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
151149
152150
153-func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Orders not set")
151+func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
154152
155153
156-func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ag)), "Referral not set")
154+func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
157155
158156
159-func aw () = valueOrErrorMessage(addressFromString(getStringValue(am(), ai)), "NFT Manager not set")
157+let av = "k_token_param"
158+
159+let aw = "k_token_type"
160+
161+let ax = "fee_reduction"
162+
163+let ay = 1
164+
165+let az = 2
166+
167+let aA = 15
168+
169+let aB = 1000
170+
171+let aC = 6
172+
173+let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
174+
175+let aE = (525600 * aD)
176+
177+let aF = (86400 * aD)
178+
179+let aG = 1
180+
181+let aH = 2
182+
183+func aI (aJ) = (toString(aJ) + ",")
160184
161185
162-let ax = "k_token_param"
163-
164-let ay = "k_token_type"
165-
166-let az = "fee_reduction"
167-
168-let aA = 1
169-
170-let aB = 2
171-
172-let aC = 15
173-
174-let aD = 1000
175-
176-let aE = 6
177-
178-let aF = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
179-
180-let aG = (525600 * aF)
181-
182-let aH = (86400 * aF)
183-
184-let aI = 1
185-
186-let aJ = 2
187-
188-func aK (aL) = (toString(aL) + ",")
186+func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
189187
190188
191-func aM (aL,aN) = fraction(aL, aF, aN, HALFEVEN)
189+func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
192190
193191
194-func aO (aL,aN) = fraction(aL, aN, aF, HALFEVEN)
192+func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
195193
196194
197-func aP (aL) = sqrt(aL, aE, aE, HALFEVEN)
195+func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
198196
199197
200-func aQ (aL,aN) = pow(aL, aE, aN, aE, aE, HALFEVEN)
198+func aP (aJ) = if ((aJ > 0))
199+ then aJ
200+ else -(aJ)
201201
202202
203-func aR (aL,aN) = fraction(aL, toBigInt(aF), aN, HALFEVEN)
203+func aQ (aJ,aL) = if ((aJ >= aL))
204+ then aJ
205+ else aL
204206
205207
206-func aS (aL,aN) = fraction(aL, aN, toBigInt(aF), HALFEVEN)
208+func aR (aS) = if ((size(aS) == 0))
209+ then ""
210+ else makeString(aS, ",")
207211
208212
209-func aT (aL) = sqrtBigInt(aL, aE, aE, HALFEVEN)
213+func aT (aU) = if ((aU == ""))
214+ then nil
215+ else split(aU, ",")
210216
211217
212-func aU (aL,aN) = pow(aL, aE, aN, aE, aE, HALFEVEN)
218+func aV (aS,aW,aX) = if ((size(aS) > aW))
219+ then (removeByIndex(aS, 0) :+ aX)
220+ else (aS :+ aX)
213221
214222
215-func aV (aL) = if ((aL > 0))
216- then aL
217- else -(aL)
223+func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
218224
219225
220-func aW (aL,aN) = if ((aL >= aN))
221- then aL
222- else aN
226+func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
223227
224228
225-func aX (aY) = if ((size(aY) == 0))
226- then ""
227- else makeString(aY, ",")
228-
229-
230-func aZ (ba) = if ((ba == ""))
231- then nil
232- else split(ba, ",")
233-
234-
235-func bb (aY,bc,bd) = if ((size(aY) > bc))
236- then (removeByIndex(aY, 0) :+ bd)
237- else (aY :+ bd)
238-
239-
240-func be (bf) = valueOrErrorMessage(getInteger(this, bf), ("no value for " + bf))
241-
242-
243-func bg (bf,bh) = valueOrElse(getInteger(this, bf), bh)
244-
245-
246-func bi (al,ak) = {
247- let bj = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
248- bj
229+func bc (ak,aj) = {
230+ let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231+ bd
249232 }
250233
251234
252-func bk (al,ak) = {
253- let bj = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
254- bj
235+func be (ak,aj) = {
236+ let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237+ bd
255238 }
256239
257240
258-func bl () = be(c)
241+func bf () = aY(c)
259242
260243
261-func bm () = be(p)
244+func bg () = aY(p)
262245
263246
264-func bn () = be(q)
247+func bh () = aY(q)
265248
266249
267-func bo () = be(s)
250+func bi () = aY(s)
268251
269252
270-func bp () = be(M)
253+func bj () = aY(M)
271254
272255
273-func bq () = be(N)
256+func bk () = aY(N)
274257
275258
276-func br () = bg(O, aF)
259+func bl () = ba(O, aD)
277260
278261
279-func bs () = bg(P, aF)
262+func bm () = ba(P, aD)
280263
281264
282-func bt () = be(Q)
265+func bn () = aY(Q)
283266
284267
285-func bu () = be(T)
268+func bo () = aY(T)
286269
287270
288-func bv () = be(U)
271+func bp () = aY(U)
289272
290273
291-func bw () = be(V)
274+func bq () = aY(V)
292275
293276
294-func bx () = be(J)
277+func br () = aY(J)
295278
296279
297-func by () = be(r)
280+func bs () = aY(r)
298281
299282
300-func bz () = (by() * aF)
283+func bt () = (bs() * aD)
301284
302285
303-func bA () = (by() * aD)
286+func bu () = (bs() * aB)
304287
305288
306-func bB () = be(t)
289+func bv () = aY(t)
307290
308291
309-func bC () = be(u)
292+func bw () = aY(u)
310293
311294
312-func bD () = be(v)
295+func bx () = aY(v)
313296
314297
315-func bE () = be(w)
298+func by () = aY(w)
316299
317300
318-func bF () = be(x)
301+func bz () = aY(x)
319302
320303
321-func bG () = be(y)
304+func bA () = aY(y)
322305
323306
324-func bH () = be(z)
307+func bB () = aY(z)
325308
326309
327-func bI () = be(H)
310+func bC () = aY(H)
328311
329312
330-func bJ () = be(I)
313+func bD () = aY(I)
331314
332315
333-func bK () = be(S)
316+func bE () = aY(S)
334317
335318
336-func bL () = be(R)
319+func bF () = aY(R)
337320
338321
339-func bM () = bg(d, 0)
322+func bG () = ba(d, 0)
340323
341324
342-func bN () = be(A)
325+func bH () = aY(A)
343326
344327
345-func bO () = be(B)
328+func bI () = aY(B)
346329
347330
348-func bP () = lastBlock.timestamp
331+func bJ () = lastBlock.timestamp
349332
350333
351-func bQ (bR) = valueOrElse(getString(au(), "k_sender"), toString(bR.caller))
334+func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
352335
353336
354-func bS (bT,bU,bV) = {
355- let bW = (bT - bU)
356- if (if (bV)
357- then (0 > bW)
337+func bM (bN,bO,bP) = {
338+ let bQ = (bN - bO)
339+ if (if (bP)
340+ then (0 > bQ)
358341 else false)
359- then throw(((("Invalid margin: " + toString(bT)) + " < ") + toString(bU)))
360- else if (if (!(bV))
361- then (bW >= 0)
342+ then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343+ else if (if (!(bP))
344+ then (bQ >= 0)
362345 else false)
363- then throw(((("Invalid margin: " + toString(bT)) + " > ") + toString(bU)))
346+ then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
364347 else true
365348 }
366349
367350
368-func bX (bY) = if ((bY == 0))
351+func bR (bS) = if ((bS == 0))
369352 then throw("Should not be called with _positionSize == 0")
370- else if ((bY > 0))
371- then bI()
372- else bJ()
353+ else if ((bS > 0))
354+ then bC()
355+ else bD()
373356
374357
375-func bZ (ca) = {
376- let cb = getInteger(this, aj(e, ca))
377- let cc = cb
378- if ($isInstanceOf(cc, "Int"))
358+func bT (bU) = {
359+ let bV = getInteger(this, ai(e, bU))
360+ let bW = bV
361+ if ($isInstanceOf(bW, "Int"))
379362 then {
380- let cd = cc
381- $Tuple5(cd, getIntegerValue(this, aj(f, ca)), getIntegerValue(this, aj(g, ca)), getIntegerValue(this, aj(h, ca)), getIntegerValue(this, aj(l, ca)))
363+ let bX = bW
364+ $Tuple5(bX, getIntegerValue(this, ai(f, bU)), getIntegerValue(this, ai(g, bU)), getIntegerValue(this, ai(h, bU)), getIntegerValue(this, ai(l, bU)))
382365 }
383366 else $Tuple5(0, 0, 0, 0, 0)
384367 }
385368
386369
387-func ce (ca) = {
388- let cf = getString(this, aj(j, ca))
389- let cc = cf
390- if ($isInstanceOf(cc, "String"))
370+func bY (bU) = {
371+ let bZ = getString(this, ai(j, bU))
372+ let bW = bZ
373+ if ($isInstanceOf(bW, "String"))
391374 then {
392- let cg = cc
393- cg
375+ let ca = bW
376+ ca
394377 }
395- else toBase58String(ap())
378+ else toBase58String(an())
396379 }
397380
398381
399-func ch (ca) = {
400- let ci = getInteger(this, aj(k, ca))
401- let cc = ci
402- if ($isInstanceOf(cc, "Int"))
382+func cb (bU) = {
383+ let cc = getInteger(this, ai(k, bU))
384+ let bW = cc
385+ if ($isInstanceOf(bW, "Int"))
403386 then {
404- let cj = cc
405- cj
387+ let cd = bW
388+ cd
406389 }
407- else bm()
390+ else bg()
408391 }
409392
410393
411-func ck (ca) = if ((bZ(ca)._1 == 0))
394+func ce (bU) = if ((bT(bU)._1 == 0))
412395 then throw("No open position")
413396 else true
414397
415398
416-func cl (cm) = {
417- let cn = getString(this, cm)
418- if (if (isDefined(cn))
419- then (value(cn) != "")
399+func cf (cg) = {
400+ let ch = getString(this, cg)
401+ if (if (isDefined(ch))
402+ then (value(ch) != "")
420403 else false)
421404 then {
422- let co = split(value(cn), ",")
423- let cp = valueOrErrorMessage(addressFromString(co[0]), ("Invalid oracle address in: " + value(cn)))
424- let cq = co[1]
425- let cr = co[2]
426- let cs = co[3]
427- $Tuple4(cp, cq, cr, cs)
405+ let ci = split(value(ch), ",")
406+ let cj = valueOrErrorMessage(addressFromString(ci[0]), ("Invalid oracle address in: " + value(ch)))
407+ let ck = ci[1]
408+ let cl = ci[2]
409+ let cm = ci[3]
410+ $Tuple4(cj, ck, cl, cm)
428411 }
429412 else unit
430413 }
431414
432415
433-func ct () = valueOrElse(getBoolean(this, m), false)
416+func cn () = valueOrElse(getBoolean(this, m), false)
434417
435418
436-func cu () = valueOrElse(getBoolean(this, n), false)
419+func co () = valueOrElse(getBoolean(this, n), false)
437420
438421
439-func cv () = valueOrElse(getBoolean(this, o), false)
422+func cp () = valueOrElse(getBoolean(this, o), false)
440423
441424
442-func cw (cx,cy,cz) = if (cx)
425+func cq (cr,cs,ct) = if (cr)
443426 then {
444- let cA = (bq() - cz)
445- if ((0 >= cA))
427+ let cu = (bk() - ct)
428+ if ((0 >= cu))
446429 then throw("Tx lead to base asset reserve <= 0, revert")
447- else $Tuple3((bp() + cy), cA, (bt() + cz))
430+ else $Tuple3((bj() + cs), cu, (bn() + ct))
448431 }
449432 else {
450- let cB = (bp() - cy)
451- if ((0 >= cB))
433+ let cv = (bj() - cs)
434+ if ((0 >= cv))
452435 then throw("Tx lead to base quote reserve <= 0, revert")
453- else $Tuple3(cB, (bq() + cz), (bt() - cz))
436+ else $Tuple3(cv, (bk() + ct), (bn() - ct))
454437 }
455438
456439
457-func cC (cD,cE) = {
458- let cF = toBigInt(cD)
459- let cG = toBigInt(cE)
460- aS(cF, cG)
440+func cw (cx,cy) = {
441+ let cz = toBigInt(cx)
442+ let cA = toBigInt(cy)
443+ aO(cz, cA)
461444 }
462445
463446
464-func cH (cx,cy) = {
465- let cD = bp()
466- let cE = bq()
467- let cI = br()
468- let cJ = bs()
469- let cK = aM(cy, cI)
470- let bf = cC(cD, cE)
471- let cL = if (cx)
472- then (cD + cK)
473- else (cD - cK)
474- let cM = toInt(aR(bf, toBigInt(cL)))
475- let cN = aV((cM - cE))
476- let cO = if (cx)
477- then cN
478- else -(cN)
479- let cP = cw(cx, cK, cN)
480- let cQ = cP._1
481- let cR = cP._2
482- let cS = cP._3
483- let cT = aM(aO(cD, cI), aO(cE, cJ))
484- let cU = aM(cy, cN)
485- let cV = aV((cT - cU))
486- let cW = (aF - aM(cT, (cT + cV)))
487- let cX = bF()
488- if ((cW > cX))
489- then throw(((((((((((((("Price impact " + toString(cW)) + " > max price impact ") + toString(cX)) + " before quote asset: ") + toString(cD)) + " before base asset: ") + toString(cE)) + " quote asset amount to exchange: ") + toString(cy)) + " price before: ") + toString(cT)) + " marketPrice: ") + toString(cU)))
490- else $Tuple4(cO, cQ, cR, cS)
447+func cB (cr,cs) = {
448+ let cx = bj()
449+ let cy = bk()
450+ let cC = bl()
451+ let cD = bm()
452+ let cE = aK(cs, cC)
453+ let aZ = cw(cx, cy)
454+ let cF = if (cr)
455+ then (cx + cE)
456+ else (cx - cE)
457+ let cG = toInt(aN(aZ, toBigInt(cF)))
458+ let cH = aP((cG - cy))
459+ let cI = if (cr)
460+ then cH
461+ else -(cH)
462+ let cJ = cq(cr, cE, cH)
463+ let cK = cJ._1
464+ let cL = cJ._2
465+ let cM = cJ._3
466+ let cN = aK(aM(cx, cC), aM(cy, cD))
467+ let cO = aK(cs, cH)
468+ let cP = aP((cN - cO))
469+ let cQ = (aD - aK(cN, (cN + cP)))
470+ let cR = bz()
471+ if ((cQ > cR))
472+ then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(cx)) + " before base asset: ") + toString(cy)) + " quote asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cN)) + " marketPrice: ") + toString(cO)))
473+ else $Tuple4(cI, cK, cL, cM)
491474 }
492475
493476
494-func cY (cZ,da) = {
495- let db = ((((bP() - da) / 1000) / 60) * aF)
496- let dc = aM(aO(aO(cZ, db), bn()), aG)
497- dc
477+func cS (cT,cU) = {
478+ let cV = ((((bJ() - cU) / 1000) / 60) * aD)
479+ let cW = aK(aM(aM(cT, cV), bh()), aE)
480+ cW
498481 }
499482
500483
501-func dd (de,cZ,df,da,dg) = {
502- let dh = if ((de != 0))
484+func cX (cY,cT,cZ,cU,da) = {
485+ let db = if ((cY != 0))
503486 then {
504- let di = bX(de)
505- aO((di - df), de)
487+ let dc = bR(cY)
488+ aM((dc - cZ), cY)
506489 }
507490 else 0
508- let dc = cY(cZ, da)
509- let dj = (((dg - dc) - dh) + cZ)
510- let dk = if ((0 > dj))
511- then $Tuple2(0, aV(dj))
512- else $Tuple2(aV(dj), 0)
513- let dl = dk._1
514- let dm = dk._2
515- $Tuple4(dl, dm, dh, dc)
491+ let cW = cS(cT, cU)
492+ let dd = (((da - cW) - db) + cT)
493+ let de = if ((0 > dd))
494+ then $Tuple2(0, aP(dd))
495+ else $Tuple2(aP(dd), 0)
496+ let df = de._1
497+ let dg = de._2
498+ $Tuple4(df, dg, db, cW)
516499 }
517500
518501
519-func dn (cx,cz,do,dp,dq,dr,ds) = {
520- let cT = aM(aO(dp, dq), aO(dr, ds))
521- if ((cz == 0))
502+func dh (cr,ct,di,dj,dk,dl,dm) = {
503+ let cN = aK(aM(dj, dk), aM(dl, dm))
504+ if ((ct == 0))
522505 then throw("Invalid base asset amount")
523506 else {
524- let bf = cC(dp, dr)
525- let dt = if (cx)
526- then (dr + cz)
527- else (dr - cz)
528- let du = toInt(aR(bf, toBigInt(dt)))
529- let dv = aV((du - dp))
530- let dw = aO(dv, dq)
531- let cX = bF()
532- let dx = cw(!(cx), dv, cz)
533- let cQ = dx._1
534- let cR = dx._2
535- let cS = dx._3
536- let cU = aM(dw, cz)
537- let cV = aV((cT - cU))
538- let cW = (aF - aM(cT, (cT + cV)))
539- if (if ((cW > cX))
540- then do
507+ let aZ = cw(dj, dl)
508+ let dn = if (cr)
509+ then (dl + ct)
510+ else (dl - ct)
511+ let do = toInt(aN(aZ, toBigInt(dn)))
512+ let dp = aP((do - dj))
513+ let dq = aM(dp, dk)
514+ let cR = bz()
515+ let dr = cq(!(cr), dp, ct)
516+ let cK = dr._1
517+ let cL = dr._2
518+ let cM = dr._3
519+ let cO = aK(dq, ct)
520+ let cP = aP((cN - cO))
521+ let cQ = (aD - aK(cN, (cN + cP)))
522+ if (if ((cQ > cR))
523+ then di
541524 else false)
542- then throw(((((((((((((("Price impact " + toString(cW)) + " > max price impact ") + toString(cX)) + " before quote asset: ") + toString(dp)) + " before base asset: ") + toString(dr)) + " base asset amount to exchange: ") + toString(cz)) + " price before: ") + toString(cT)) + " market price: ") + toString(cU)))
543- else $Tuple7(dw, cQ, cR, cS, (bL() - (if (cx)
544- then aV(cz)
545- else 0)), (bK() - (if (!(cx))
546- then aV(cz)
547- else 0)), cW)
525+ then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(dj)) + " before base asset: ") + toString(dl)) + " base asset amount to exchange: ") + toString(ct)) + " price before: ") + toString(cN)) + " market price: ") + toString(cO)))
526+ else $Tuple7(dq, cK, cL, cM, (bF() - (if (cr)
527+ then aP(ct)
528+ else 0)), (bE() - (if (!(cr))
529+ then aP(ct)
530+ else 0)), cQ)
548531 }
549532 }
550533
551534
552-func dy (cx,cz,do) = dn(cx, cz, do, bp(), br(), bq(), bs())
535+func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
553536
554537
555-func dz (dA,cq,cr) = {
556- let dB = valueOrErrorMessage(getInteger(dA, cq), ((("Can not get oracle price. Oracle: " + toString(dA)) + " key: ") + cq))
557- if ((cr != ""))
538+func dt (du,ck,cl) = {
539+ let dv = valueOrErrorMessage(getInteger(du, ck), ((("Can not get oracle price. Oracle: " + toString(du)) + " key: ") + ck))
540+ if ((cl != ""))
558541 then {
559- let dC = lastBlock.height
560- let dD = valueOrErrorMessage(getInteger(dA, cr), ((("Can not get oracle block. Oracle: " + toString(dA)) + " key: ") + cr))
561- if (((dC - dD) > bO()))
562- then throw(((("Oracle stale data. Last oracle block: " + toString(dD)) + " current block: ") + toString(dC)))
563- else dB
542+ let dw = lastBlock.height
543+ let dx = valueOrErrorMessage(getInteger(du, cl), ((("Can not get oracle block. Oracle: " + toString(du)) + " key: ") + cl))
544+ if (((dw - dx) > bI()))
545+ then throw(((("Oracle stale data. Last oracle block: " + toString(dx)) + " current block: ") + toString(dw)))
546+ else dv
564547 }
565- else dB
548+ else dv
549+ }
550+
551+
552+func dy () = {
553+ let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
554+ let dA = dt(dz._1, dz._2, dz._3)
555+ let dB = cf(b)
556+ let dC = if (isDefined(dB))
557+ then {
558+ let dD = value(dB)
559+ dt(dD._1, dD._2, dD._3)
560+ }
561+ else aD
562+ aK(dA, dC)
566563 }
567564
568565
569566 func dE () = {
570- let dF = valueOrErrorMessage(cl(a), "No base asset oracle data")
571- let dG = dz(dF._1, dF._2, dF._3)
572- let dH = cl(b)
573- let dI = if (isDefined(dH))
567+ let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568+ let du = dz._1
569+ let cm = dz._4
570+ if ((cm != ""))
574571 then {
575- let dJ = value(dH)
576- dz(dJ._1, dJ._2, dJ._3)
577- }
578- else aF
579- aM(dG, dI)
580- }
581-
582-
583-func dK () = {
584- let dF = valueOrErrorMessage(cl(a), "No base asset oracle data")
585- let dA = dF._1
586- let cs = dF._4
587- if ((cs != ""))
588- then {
589- let dL = valueOrErrorMessage(getBoolean(dA, cs), ((("Can not get oracle is open/closed. Oracle: " + toString(dA)) + " key: ") + cs))
590- !(dL)
572+ let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573+ !(dF)
591574 }
592575 else false
593576 }
594577
595578
596-func dM (dN,dp,dr,cI,cJ) = {
597- let dO = aM(aO(dp, cI), aO(dr, cJ))
598- let dP = aM((dN + dO), (2 * aF))
599- let dM = aM(aV((dN - dO)), dP)
600- dM
579+func dG (dH,dj,dl,cC,cD) = {
580+ let dI = aK(aM(dj, cC), aM(dl, cD))
581+ let dJ = aK((dH + dI), (2 * aD))
582+ let dG = aK(aP((dH - dI)), dJ)
583+ dG
601584 }
602585
603586
604-func dQ (dp,dr) = {
605- let dR = dE()
606- let cI = br()
607- let cJ = bs()
608- let dS = dM(dR, bp(), bq(), cI, cJ)
609- let dT = dM(dR, dp, dr, cI, cJ)
610- if (if ((dT > bG()))
611- then (dT > dS)
587+func dK (dj,dl) = {
588+ let dL = dy()
589+ let cC = bl()
590+ let cD = bm()
591+ let dM = dG(dL, bj(), bk(), cC, cD)
592+ let dN = dG(dL, dj, dl, cC, cD)
593+ if (if ((dN > bA()))
594+ then (dN > dM)
612595 else false)
613- then throw(((("Price spread " + toString(dT)) + " > max price spread ") + toString(bG())))
596+ then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
614597 else true
615598 }
616599
617600
618-func dU (dV,dW) = {
619- let dX = bH()
620- if ((dV > dX))
621- then throw(((("Long open notional " + toString(dV)) + " > max open notional ") + toString(dX)))
622- else if ((dW > dX))
623- then throw(((("Short open notional " + toString(dW)) + " > max open notional ") + toString(dX)))
601+func dO (dP,dQ) = {
602+ let dR = bB()
603+ if ((dP > dR))
604+ then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
605+ else if ((dQ > dR))
606+ then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
624607 else true
625608 }
626609
627610
628-func dY () = {
629- let dp = bp()
630- let dr = bq()
631- let cI = br()
632- let cJ = bs()
633- aM(aO(dp, cI), aO(dr, cJ))
611+func dS () = {
612+ let dj = bj()
613+ let dl = bk()
614+ let cC = bl()
615+ let cD = bm()
616+ aK(aM(dj, cC), aM(dl, cD))
634617 }
635618
636619
637-func dZ () = {
638- let dR = dE()
639- let ea = dY()
640- (aM(aV((dR - ea)), dR) > bE())
620+func dT () = {
621+ let dL = dy()
622+ let dU = dS()
623+ (aK(aP((dL - dU)), dL) > by())
641624 }
642625
643626
644-func eb (bY,ec,dp,dq,dr,ds) = {
645- let ed = aV(bY)
646- let ee = (0 > bY)
647- let ef = if ((ec == aI))
627+func dV (bS,dW,dj,dk,dl,dm) = {
628+ let dX = aP(bS)
629+ let dY = (0 > bS)
630+ let dZ = if ((dW == aG))
648631 then {
649- let eg = dn(!(ee), ed, false, dp, dq, dr, ds)._1
650- eg
632+ let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633+ ea
651634 }
652- else aO(ed, dE())
653- ef
635+ else aM(dX, dy())
636+ dZ
654637 }
655638
656639
657-func eh (bY,ei,dp,dq,dr,ds,ec) = if ((bY == 0))
640+func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
658641 then throw("Invalid position size")
659642 else {
660- let ee = (0 > bY)
661- let ef = eb(bY, ec, dp, dq, dr, ds)
662- let ej = if (ee)
663- then (ei - ef)
664- else (ef - ei)
665- $Tuple2(ef, ej)
643+ let dY = (0 > bS)
644+ let dZ = dV(bS, dW, dj, dk, dl, dm)
645+ let ed = if (dY)
646+ then (ec - dZ)
647+ else (dZ - ec)
648+ $Tuple2(dZ, ed)
666649 }
667650
668651
669-func ek (ca,ec) = {
670- let el = bZ(ca)
671- let cd = el._1
672- let em = el._2
673- let en = el._3
674- let eo = el._4
675- eh(cd, en, bp(), br(), bq(), bs(), ec)
652+func ee (bU,dW) = {
653+ let ef = bT(bU)
654+ let bX = ef._1
655+ let eg = ef._2
656+ let eh = ef._3
657+ let ei = ef._4
658+ eb(bX, eh, bj(), bl(), bk(), bm(), dW)
676659 }
677660
678661
679-func ep (eq,er,es) = aM((eq - er), es)
662+func ej (ek,el,em) = aK((ek - el), em)
680663
681664
682-func et (ca,ec) = {
683- let eu = bZ(ca)
684- let cd = eu._1
685- let em = eu._2
686- let ev = eu._3
687- let ew = eu._4
688- let ex = eu._5
689- let ey = ek(ca, ec)
690- let ef = ey._1
691- let ej = ey._2
692- let ez = dd(cd, em, ew, ex, ej)
693- let dl = ez._1
694- let dm = ez._2
695- ep(dl, dm, ef)
665+func en (bU,dW) = {
666+ let eo = bT(bU)
667+ let bX = eo._1
668+ let eg = eo._2
669+ let ep = eo._3
670+ let eq = eo._4
671+ let er = eo._5
672+ let es = ee(bU, dW)
673+ let dZ = es._1
674+ let ed = es._2
675+ let et = cX(bX, eg, eq, er, ed)
676+ let df = et._1
677+ let dg = et._2
678+ ej(df, dg, dZ)
696679 }
697680
698681
699-func eA (ca) = et(ca, aI)
682+func eu (bU) = en(bU, aG)
700683
701684
702-func eB (ca,bY) = {
703- let eC = aW(bD(), (aF - aM(eA(ca), bB())))
704- let eD = aO(aV(bY), eC)
705- let eE = dy((bY > 0), eD, false)
706- let eF = eE._1
707- let cW = eE._7
708- if ((bF() > cW))
709- then eD
710- else aO(aV(bY), bD())
685+func ev (bU,bS) = {
686+ let ew = aQ(bx(), (aD - aK(eu(bU), bv())))
687+ let ex = aM(aP(bS), ew)
688+ let ey = ds((bS > 0), ex, false)
689+ let ez = ey._1
690+ let cQ = ey._7
691+ if ((bz() > cQ))
692+ then ex
693+ else aM(aP(bS), bx())
711694 }
712695
713696
714-func eG (ca,eH,eI,eJ,eK,do) = {
715- let eL = bZ(ca)
716- let eM = eL._1
717- let eN = eL._2
718- let eO = eL._3
719- let eP = eL._4
720- let eQ = eL._5
721- let eR = (eM > 0)
722- let eS = aV(eM)
723- if (if ((eS >= eH))
724- then (eH > 0)
697+func eA (bU,eB,eC,eD,eE,di,eF) = {
698+ let eG = bT(bU)
699+ let eH = eG._1
700+ let eI = eG._2
701+ let eJ = eG._3
702+ let eK = eG._4
703+ let eL = eG._5
704+ let eM = (eH > 0)
705+ let eN = aP(eH)
706+ if (if ((eN >= eB))
707+ then (eB > 0)
725708 else false)
726709 then {
727- let eT = (eS > eH)
728- let eU = dy((eM > 0), eH, do)
729- let eV = eU._1
730- let cL = eU._2
731- let cM = eU._3
732- let eW = eU._4
733- let eX = if ((eM > 0))
734- then -(eH)
735- else eH
736- let eY = ek(ca, aI)
737- let eZ = eY._1
738- let ej = eY._2
739- let fa = aM(aV(eX), eS)
740- let fb = aO(ej, fa)
741- let fc = dd(eM, eN, eP, eQ, ej)
742- let fd = fc._1
743- let fe = fc._2
744- let ff = fc._3
745- let dc = fc._4
746- let fg = dd(eM, eN, eP, eQ, fb)._2
747- let fh = aO(aO(eZ, fa), eI)
748- let fi = (ej - fb)
749- let fj = if ((eM > 0))
750- then ((eZ - eV) - fi)
751- else ((fi + eZ) - eV)
752- let fk = (eM + eX)
753- let fl = if ((fk == 0))
710+ let eO = (eN > eB)
711+ let eP = ds((eH > 0), eB, di)
712+ let eQ = eP._1
713+ let cF = eP._2
714+ let cG = eP._3
715+ let eR = eP._4
716+ let eS = if ((eH > 0))
717+ then -(eB)
718+ else eB
719+ let eT = ee(bU, aG)
720+ let eU = eT._1
721+ let ed = eT._2
722+ let eV = aK(aP(eS), eN)
723+ let eW = aM(ed, eV)
724+ let eX = cX(eH, eI, eK, eL, ed)
725+ let eY = eX._1
726+ let eZ = eX._2
727+ let fa = eX._3
728+ let cW = eX._4
729+ let fb = cX(eH, eI, eK, eL, eW)._2
730+ let fc = aM(aM(eU, eV), eC)
731+ let fd = (ed - eW)
732+ let fe = if ((eH > 0))
733+ then ((eU - eQ) - fd)
734+ else ((fd + eU) - eQ)
735+ let ff = (eH + eS)
736+ let fg = if ((ff == 0))
754737 then $Tuple2(0, 0)
755- else $Tuple2(aV(fj), bX(fk))
756- let fm = fl._1
757- let fn = fl._2
758- let fo = (eO - fm)
759- let fp = et(ca, aI)
760- let fq = if ((eM > 0))
761- then (aO((fm + fi), fp) - fi)
762- else (aO((fm - fi), fp) - fi)
763- let fr = ((fd - (fq + fi)) - fh)
764- let fs = if ((0 > fr))
765- then throw("Invalid internalClosePosition params: unable to pay fee")
766- else fr
767- let ft = if (eK)
768- then (fq + fs)
769- else fq
770- if (if ((eJ != 0))
771- then (eJ > eV)
738+ else $Tuple2(aP(fe), bR(ff))
739+ let fh = fg._1
740+ let fi = fg._2
741+ let fj = (eJ - fh)
742+ let fk = en(bU, aG)
743+ let fl = if ((eH > 0))
744+ then (aM((fh + fd), fk) - fd)
745+ else (aM((fh - fd), fk) - fd)
746+ let fm = ((eY - (fl + fd)) - fc)
747+ let fn = if ((0 > fm))
748+ then if (eF)
749+ then 0
750+ else throw("Invalid internalClosePosition params: unable to pay fee")
751+ else fm
752+ let fo = if (eE)
753+ then (fl + fn)
754+ else fl
755+ if (if ((eD != 0))
756+ then (eD > eQ)
772757 else false)
773- then throw(((("Limit error: " + toString(eV)) + " < ") + toString(eJ)))
774- else $Tuple17(fk, ft, fm, fn, fg, fb, if (if (eK)
775- then eT
758+ then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759+ else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760+ then eO
776761 else false)
777762 then 0
778- else fs, cL, cM, eW, (bu() - fo), (bL() - (if (eR)
779- then aV(eX)
780- else 0)), (bK() - (if (!(eR))
781- then aV(eX)
782- else 0)), (bw() - (if (eR)
783- then fo
784- else 0)), (bv() - (if (!(eR))
785- then fo
786- else 0)), (fh + dc), eV)
763+ else fn, cF, cG, eR, (bo() - fj), (bF() - (if (eM)
764+ then aP(eS)
765+ else 0)), (bE() - (if (!(eM))
766+ then aP(eS)
767+ else 0)), (bq() - (if (eM)
768+ then fj
769+ else 0)), (bp() - (if (!(eM))
770+ then fj
771+ else 0)), (fc + cW), eQ)
787772 }
788- else throw("Invalid internalClosePosition params: invalid position size")
773+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
789774 }
790775
791776
792-func fu () = {
793- let fv = ((bP() / 1000) / 60)
794- let fw = (fv - aC)
795- let fx = valueOrElse(getString(this, C), "")
796- let fy = split(fx, ",")
797- func fz (fA,fB) = if ((fw >= valueOrErrorMessage(parseInt(fB), ("getTwapSpotPrice: invalid int: " + fx))))
798- then (fA :+ parseIntValue(fB))
799- else fA
777+func fp () = {
778+ let fq = ((bJ() / 1000) / 60)
779+ let fr = (fq - aA)
780+ let fs = valueOrElse(getString(this, C), "")
781+ let ft = split(fs, ",")
782+ func fu (fv,fw) = if ((fr >= valueOrErrorMessage(parseInt(fw), ("getTwapSpotPrice: invalid int: " + fs))))
783+ then (fv :+ parseIntValue(fw))
784+ else fv
800785
801- let fC = {
802- let fD = fy
803- let fE = size(fD)
804- let fF = nil
805- func fG (fH,fI) = if ((fI >= fE))
806- then fH
807- else fz(fH, fD[fI])
786+ let fx = {
787+ let fy = ft
788+ let fz = size(fy)
789+ let fA = nil
790+ func fB (fC,fD) = if ((fD >= fz))
791+ then fC
792+ else fu(fC, fy[fD])
808793
809- func fJ (fH,fI) = if ((fI >= fE))
810- then fH
794+ func fE (fC,fD) = if ((fD >= fz))
795+ then fC
811796 else throw("List size exceeds 20")
812797
813- fJ(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fG(fF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
798+ fE(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
814799 }
815- let fK = if ((size(fC) > 0))
816- then max(fC)
817- else valueOrErrorMessage(parseInt(fy[0]), ("getTwapSpotPrice: invalid int: " + fx))
818- let fL = valueOrElse(getInteger(this, D), 0)
819- let fM = valueOrElse(getInteger(this, ((E + "_") + toString(fL))), 0)
820- let fN = valueOrElse(getInteger(this, ((F + "_") + toString(fL))), 0)
821- let fO = (fM + ((fv - fL) * fN))
822- let fP = valueOrElse(getInteger(this, ((E + "_") + toString(fK))), 0)
823- let fQ = valueOrElse(getInteger(this, ((F + "_") + toString(fK))), 0)
824- let fR = (fP + ((fw - fK) * fQ))
825- ((fO - fR) / aC)
800+ let fF = if ((size(fx) > 0))
801+ then max(fx)
802+ else valueOrErrorMessage(parseInt(ft[0]), ("getTwapSpotPrice: invalid int: " + fs))
803+ let fG = valueOrElse(getInteger(this, D), 0)
804+ let fH = valueOrElse(getInteger(this, ((E + "_") + toString(fG))), 0)
805+ let fI = valueOrElse(getInteger(this, ((F + "_") + toString(fG))), 0)
806+ let fJ = (fH + ((fq - fG) * fI))
807+ let fK = valueOrElse(getInteger(this, ((E + "_") + toString(fF))), 0)
808+ let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fF))), 0)
809+ let fM = (fK + ((fr - fF) * fL))
810+ ((fJ - fM) / aA)
826811 }
827812
828813
829-func fS () = {
830- let bY = bt()
831- if ((bY == 0))
832- then $Tuple2(bp(), bq())
814+func fN () = {
815+ let bS = bn()
816+ if ((bS == 0))
817+ then $Tuple2(bj(), bk())
833818 else {
834- let fT = (bY > 0)
835- let fU = dy(fT, aV(bY), false)
836- let fV = fU._1
837- let fW = fU._2
838- let fX = fU._3
839- $Tuple2(fW, fX)
819+ let fO = (bS > 0)
820+ let fP = ds(fO, aP(bS), false)
821+ let fQ = fP._1
822+ let fR = fP._2
823+ let fS = fP._3
824+ $Tuple2(fR, fS)
840825 }
841826 }
842827
843828
844-func fY (fZ,bt,ga,gb) = {
845- let gc = toBigInt(fZ)
846- let gd = toBigInt(bt)
847- let ge = toBigInt(ga)
848- let gf = toBigInt(gb)
849- let bf = aS(ge, gc)
850- let gg = (gc + gd)
851- let gh = aR(bf, gg)
852- let gi = aR(gh, gg)
853- let gj = aR(gf, gi)
854- toInt(gj)
829+func fT (fU,bn,fV,fW) = {
830+ let fX = toBigInt(fU)
831+ let fY = toBigInt(bn)
832+ let fZ = toBigInt(fV)
833+ let ga = toBigInt(fW)
834+ let aZ = aO(fZ, fX)
835+ let gb = (fX + fY)
836+ let gc = aN(aZ, gb)
837+ let gd = aN(gc, gb)
838+ let ge = aN(ga, gd)
839+ toInt(ge)
855840 }
856841
857842
858-func gk (gl,cD,cE) = {
859- let bY = bt()
860- if ((bY == 0))
843+func gf (gg,cx,cy) = {
844+ let bS = bn()
845+ if ((bS == 0))
861846 then {
862- let gm = aM(aO(gl, cE), cD)
863- $Tuple3(gm, aF, 0)
847+ let gh = aK(aM(gg, cy), cx)
848+ $Tuple3(gh, aD, 0)
864849 }
865850 else {
866- let fT = (bY > 0)
867- let fV = dy(fT, aV(bY), false)._1
868- let gm = fY(cE, bY, cD, gl)
869- let gn = aF
870- let go = eh(bY, fV, cD, gm, cE, gn, aI)._2
871- $Tuple3(gm, gn, go)
851+ let fO = (bS > 0)
852+ let fQ = ds(fO, aP(bS), false)._1
853+ let gh = fT(cy, bS, cx, gg)
854+ let gi = aD
855+ let gj = eb(bS, fQ, cx, gh, cy, gi, aG)._2
856+ $Tuple3(gh, gi, gj)
872857 }
873858 }
874859
875860
876-func gp () = {
877- let gq = dE()
878- let gr = fu()
879- let gs = (gr - gq)
880- if (if (if ((bK() == 0))
861+func gk () = {
862+ let gl = dy()
863+ let gm = fp()
864+ let gn = (gm - gl)
865+ if (if (if ((bE() == 0))
881866 then true
882- else (bL() == 0))
867+ else (bF() == 0))
883868 then true
884- else dK())
869+ else dE())
885870 then $Tuple2(0, 0)
886- else if ((0 > gs))
871+ else if ((0 > gn))
887872 then {
888- let gt = aM(aO(gs, bz()), aH)
889- let gu = aM(aO(gt, bK()), bL())
890- $Tuple2(gt, gu)
873+ let go = aK(aM(gn, bt()), aF)
874+ let gp = aK(aM(go, bE()), bF())
875+ $Tuple2(go, gp)
891876 }
892877 else {
893- let gu = aM(aO(gs, bz()), aH)
894- let gt = aM(aO(gu, bL()), bK())
895- $Tuple2(gt, gu)
878+ let gp = aK(aM(gn, bt()), aF)
879+ let go = aK(aM(gp, bF()), bE())
880+ $Tuple2(go, gp)
896881 }
897882 }
898883
899884
900-func gv (gw,gx) = {
901- let gy = bm()
902- let gz = aO(gy, gx)
903- let gA = if ((gw != ""))
885+func gq (gr,gs) = {
886+ let gt = bg()
887+ let gu = aM(gt, gs)
888+ let gv = if ((gr != ""))
904889 then {
905- let gB = bi(aw(), aj(ay, gw))
906- if ((gB == az))
890+ let gw = bc(au(), ai(aw, gr))
891+ if ((gw == ax))
907892 then {
908- let gC = bk(aw(), aj(ax, gw))
909- let gD = aO(gz, gC)
910- $Tuple2(gD, true)
893+ let gx = be(au(), ai(av, gr))
894+ let gy = aM(gu, gx)
895+ $Tuple2(gy, true)
911896 }
912897 else throw("Invalid attached artifact")
913898 }
914- else $Tuple2(gz, false)
915- let gD = gA._1
916- let gE = gA._2
917- $Tuple2(gD, gE)
899+ else $Tuple2(gu, false)
900+ let gy = gv._1
901+ let gz = gv._2
902+ $Tuple2(gy, gz)
918903 }
919904
920905
921-func gF (ca,gG) = {
922- let eM = bZ(ca)._1
923- if ((eM == 0))
906+func gA (bU,gB) = {
907+ let eH = bT(bU)._1
908+ if ((eH == 0))
924909 then true
925- else (ce(ca) == gG)
910+ else (bY(bU) == gB)
926911 }
927912
928913
929-func gH (ca,gG) = (ce(ca) == gG)
914+func gC (bU,gB) = (bY(bU) == gB)
930915
931916
932-func gI (ca,gw) = {
933- let gJ = invoke(at(), "computeFeeDiscount", [ca], nil)
934- if ((gJ == gJ))
917+func gD (bU,gr) = {
918+ let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919+ if ((gE == gE))
935920 then {
936- let gK = {
937- let cc = gJ
938- if ($isInstanceOf(cc, "Int"))
921+ let gF = {
922+ let bW = gE
923+ if ($isInstanceOf(bW, "Int"))
939924 then {
940- let gL = cc
941- gL
925+ let gG = bW
926+ gG
942927 }
943928 else throw("Invalid computeFeeDiscount result")
944929 }
945- let gM = gv(gw, gK)
946- let gD = gM._1
947- let gE = gM._2
948- $Tuple2(gD, gE)
930+ let gH = gq(gr, gF)
931+ let gy = gH._1
932+ let gz = gH._2
933+ $Tuple2(gy, gz)
949934 }
950935 else throw("Strict value is not equal to itself.")
951936 }
952937
953938
954-func gN (bR) = {
955- let gO = if ((size(bR.payments) > 1))
956- then toBase58String(valueOrErrorMessage(bR.payments[1].assetId, "Invalid artifactId"))
939+func gI (bL) = {
940+ let gJ = if ((size(bL.payments) > 1))
941+ then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
957942 else ""
958- gO
943+ gJ
959944 }
960945
961946
962-func gP (gQ) = {
963- let gR = aO(gQ, bN())
964- let gS = (gQ - gR)
965- $Tuple2(gR, gS)
947+func gK (gL) = {
948+ let gM = aM(gL, bH())
949+ let gN = (gL - gM)
950+ $Tuple2(gM, gN)
966951 }
967952
968953
969-func gT (gU,gV,gW,gX,eI,gY,gZ,ha,hb,dX,hc,hd,he) = [IntegerEntry(s, gU), IntegerEntry(t, gV), IntegerEntry(u, gW), IntegerEntry(r, gX), IntegerEntry(p, eI), IntegerEntry(w, gY), IntegerEntry(x, gZ), IntegerEntry(v, ha), IntegerEntry(y, hb), IntegerEntry(z, dX), IntegerEntry(A, hc), IntegerEntry(B, hc), IntegerEntry(q, he)]
954+func gO (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = [IntegerEntry(s, gP), IntegerEntry(t, gQ), IntegerEntry(u, gR), IntegerEntry(r, gS), IntegerEntry(p, eC), IntegerEntry(w, gT), IntegerEntry(x, gU), IntegerEntry(v, gV), IntegerEntry(y, gW), IntegerEntry(z, dR), IntegerEntry(A, gX), IntegerEntry(B, gX), IntegerEntry(q, gZ)]
970955
971956
972-func hf (hg,hh,hi,hj,hk) = [IntegerEntry(J, hg), IntegerEntry(H, hh), IntegerEntry(I, hi), IntegerEntry(K, hj), IntegerEntry(L, hk)]
957+func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
973958
974959
975-func hl (hm,al) = if (hm)
960+func hg (hh,ak) = if (hh)
976961 then {
977- let hn = bM()
978-[IntegerEntry(aj(i, al), (hn + 1)), IntegerEntry(d, (hn + 1))]
962+ let hi = bG()
963+[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
979964 }
980965 else nil
981966
982967
983-func ho (hm,al,eI) = if (hm)
984- then [IntegerEntry(aj(k, al), eI)]
968+func hj (hh,ak,eC) = if (hh)
969+ then [IntegerEntry(ai(k, ak), eC)]
985970 else nil
986971
987972
988-func hp (al,eH,hq,hr,di,hs) = [IntegerEntry(aj(e, al), eH), IntegerEntry(aj(f, al), hq), IntegerEntry(aj(g, al), hr), IntegerEntry(aj(h, al), di), IntegerEntry(aj(l, al), hs)]
973+func hk (ak,eB,hl,hm,dc,hn) = [IntegerEntry(ai(e, ak), eB), IntegerEntry(ai(f, ak), hl), IntegerEntry(ai(g, ak), hm), IntegerEntry(ai(h, ak), dc), IntegerEntry(ai(l, ak), hn)]
989974
990975
991-func ht (hu) = {
992- let fv = ((bP() / 1000) / 60)
993- let hv = valueOrElse(getInteger(this, D), 0)
994- if ((hv > fv))
976+func ho (hp) = {
977+ let fq = ((bJ() / 1000) / 60)
978+ let hq = valueOrElse(getInteger(this, D), 0)
979+ if ((hq > fq))
995980 then throw("TWAP out-of-order")
996981 else {
997- let fL = if ((hv == 0))
998- then fv
999- else hv
1000- if ((fv > hv))
982+ let fG = if ((hq == 0))
983+ then fq
984+ else hq
985+ if ((fq > hq))
1001986 then {
1002- let hw = valueOrElse(getInteger(this, ((E + "_") + toString(hv))), 0)
1003- let hx = valueOrElse(getInteger(this, ((F + "_") + toString(hv))), hu)
1004- let hy = (hw + ((fv - fL) * hx))
1005- let fy = bb(aZ(valueOrElse(getString(this, C), "")), aC, toString(fv))
1006-[IntegerEntry(aj(E, toString(fv)), hy), IntegerEntry(aj(F, toString(fv)), hu), IntegerEntry(aj(G, toString(fv)), hv), IntegerEntry(D, fv), StringEntry(C, aX(fy))]
987+ let hr = valueOrElse(getInteger(this, ((E + "_") + toString(hq))), 0)
988+ let hs = valueOrElse(getInteger(this, ((F + "_") + toString(hq))), hp)
989+ let ht = (hr + ((fq - fG) * hs))
990+ let ft = aV(aT(valueOrElse(getString(this, C), "")), aA, toString(fq))
991+[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp), IntegerEntry(ai(G, toString(fq)), hq), IntegerEntry(D, fq), StringEntry(C, aR(ft))]
1007992 }
1008993 else {
1009- let hz = valueOrElse(getInteger(this, aj(G, toString(fv))), 0)
1010- let hw = valueOrElse(getInteger(this, aj(E, toString(hz))), 0)
1011- let hx = valueOrElse(getInteger(this, aj(F, toString(hz))), hu)
1012- let hy = (hw + ((fv - hz) * hx))
1013-[IntegerEntry(aj(E, toString(fv)), hy), IntegerEntry(aj(F, toString(fv)), hu)]
994+ let hu = valueOrElse(getInteger(this, ai(G, toString(fq))), 0)
995+ let hr = valueOrElse(getInteger(this, ai(E, toString(hu))), 0)
996+ let hs = valueOrElse(getInteger(this, ai(F, toString(hu))), hp)
997+ let ht = (hr + ((fq - hu) * hs))
998+[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp)]
1014999 }
10151000 }
10161001 }
10171002
10181003
1019-func hA (cD,cE) = [IntegerEntry(M, cD), IntegerEntry(N, cE)]
1004+func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
10201005
10211006
1022-func hB (cI,cJ) = [IntegerEntry(O, cI), IntegerEntry(P, cJ)]
1007+func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
10231008
10241009
1025-func hC (cD,cE,hD,hE,hF,hG,hH,hI) = {
1026- let cI = br()
1027- let cJ = bs()
1028- if (((hF - hG) != hD))
1029- then throw(((((("Invalid AMM state data: " + toString(hF)) + " + ") + toString(hG)) + " != ") + toString(hD)))
1030- else ((hA(cD, cE) ++ [IntegerEntry(Q, hD), IntegerEntry(T, hE), IntegerEntry(R, hF), IntegerEntry(S, hG), IntegerEntry(V, hH), IntegerEntry(U, hI)]) ++ ht(aM(aO(cD, cI), aO(cE, cJ))))
1010+func hx (cx,cy,hy,hz,hA,hB,hC,hD) = {
1011+ let cC = bl()
1012+ let cD = bm()
1013+ if (((hA - hB) != hy))
1014+ then throw(((((("Invalid AMM state data: " + toString(hA)) + " + ") + toString(hB)) + " != ") + toString(hy)))
1015+ else ((hv(cx, cy) ++ [IntegerEntry(Q, hy), IntegerEntry(T, hz), IntegerEntry(R, hA), IntegerEntry(S, hB), IntegerEntry(V, hC), IntegerEntry(U, hD)]) ++ ho(aK(aM(cx, cC), aM(cy, cD))))
10311016 }
10321017
10331018
1034-func hJ (al) = [DeleteEntry(aj(e, al)), DeleteEntry(aj(f, al)), DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(k, al)), DeleteEntry(aj(l, al))]
1019+func hE (ak) = [DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(j, ak)), DeleteEntry(ai(k, ak)), DeleteEntry(ai(l, ak))]
10351020
10361021
1037-func hK (al,hL) = {
1038- let hM = assetBalance(this, ap())
1039- if ((hL > hM))
1040- then throw(((("Unable to withdraw " + toString(hL)) + " from contract balance ") + toString(hM)))
1041- else [ScriptTransfer(al, hL, ap())]
1022+func hF (ak,hG) = {
1023+ let hH = assetBalance(this, an())
1024+ if ((hG > hH))
1025+ then throw(((("Unable to withdraw " + toString(hG)) + " from contract balance ") + toString(hH)))
1026+ else [ScriptTransfer(ak, hG, an())]
10421027 }
10431028
10441029
1045-func hN (bR) = if ((0 > bR))
1030+func hI (bL) = if ((0 > bL))
10461031 then throw("Balance")
1047- else [IntegerEntry(c, bR)]
1032+ else [IntegerEntry(c, bL)]
10481033
10491034
1050-func hO (bR) = [ScriptTransfer(ar(), bR, ap())]
1035+func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
10511036
10521037
1053-func hP (hQ,bR) = if (hQ)
1054- then [Burn(valueOrErrorMessage(bR.payments[1].assetId, "Invalid artifact"), 1)]
1038+func hK (hL,bL) = if (hL)
1039+ then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
10551040 else nil
10561041
10571042
1058-@Callable(bR)
1059-func pause () = if ((bR.caller != an()))
1043+@Callable(bL)
1044+func pause () = if ((bL.caller != am()))
10601045 then throw("Invalid pause params")
10611046 else [BooleanEntry(n, true)]
10621047
10631048
10641049
1065-@Callable(bR)
1066-func unpause () = if ((bR.caller != an()))
1050+@Callable(bL)
1051+func unpause () = if ((bL.caller != am()))
10671052 then throw("Invalid unpause params")
10681053 else [BooleanEntry(n, false)]
10691054
10701055
10711056
1072-@Callable(bR)
1073-func setCloseOnly () = if ((bR.caller != an()))
1057+@Callable(bL)
1058+func setCloseOnly () = if ((bL.caller != am()))
10741059 then throw("Invalid setCloseOnly params")
10751060 else [BooleanEntry(o, true)]
10761061
10771062
10781063
1079-@Callable(bR)
1080-func unsetCloseOnly () = if ((bR.caller != an()))
1064+@Callable(bL)
1065+func unsetCloseOnly () = if ((bL.caller != am()))
10811066 then throw("Invalid unsetCloseOnly params")
10821067 else [BooleanEntry(o, false)]
10831068
10841069
10851070
1086-@Callable(bR)
1087-func addLiquidity (cy) = if (if ((bR.caller != an()))
1071+@Callable(bL)
1072+func addLiquidity (cs) = if (if ((bL.caller != am()))
10881073 then true
1089- else (0 >= cy))
1074+ else (0 >= cs))
10901075 then throw("Invalid addLiquidity params")
10911076 else {
1092- let cD = bp()
1093- let cE = bq()
1094- let cI = br()
1095- let cJ = bs()
1096- let hR = aM(aO(cD, cI), aO(cE, cJ))
1097- let hS = (cD + cy)
1098- let hT = (aM(aO(hS, cI), hR) - cE)
1099- let hU = (cE + hT)
1100- let hV = gk(dE(), hS, hU)
1101- let hW = hV._1
1102- let hX = hV._2
1103- let go = hV._3
1104- let hY = if ((go != 0))
1077+ let cx = bj()
1078+ let cy = bk()
1079+ let cC = bl()
1080+ let cD = bm()
1081+ let hM = aK(aM(cx, cC), aM(cy, cD))
1082+ let hN = (cx + cs)
1083+ let hO = (aK(aM(hN, cC), hM) - cy)
1084+ let hP = (cy + hO)
1085+ let hQ = gf(dy(), hN, hP)
1086+ let hR = hQ._1
1087+ let hS = hQ._2
1088+ let gj = hQ._3
1089+ let hT = if ((gj != 0))
11051090 then {
1106- let hY = invoke(as(), "exchangeFreeAndLocked", [go], nil)
1107- if ((hY == hY))
1091+ let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092+ if ((hT == hT))
11081093 then nil
11091094 else throw("Strict value is not equal to itself.")
11101095 }
11111096 else nil
1112- if ((hY == hY))
1113- then (hA(hS, hU) ++ hB(hW, hX))
1097+ if ((hT == hT))
1098+ then (hv(hN, hP) ++ hw(hR, hS))
11141099 else throw("Strict value is not equal to itself.")
11151100 }
11161101
11171102
11181103
1119-@Callable(bR)
1120-func removeLiquidity (cy) = if (if ((bR.caller != an()))
1104+@Callable(bL)
1105+func removeLiquidity (cs) = if (if ((bL.caller != am()))
11211106 then true
1122- else (cy >= 0))
1107+ else (cs >= 0))
11231108 then throw("Invalid removeLiquidity params")
11241109 else {
1125- let cD = bp()
1126- let cE = bq()
1127- let cI = br()
1128- let cJ = bs()
1129- let hR = aM(aO(cD, cI), aO(cE, cJ))
1130- let hS = (cD - cy)
1131- let hZ = aV((aM(aO(hS, cI), hR) - cE))
1132- let hU = (cE - hZ)
1133- let ia = gk(dE(), hS, hU)
1134- let hW = ia._1
1135- let hX = ia._2
1136- let go = ia._3
1137- let hY = if ((go != 0))
1110+ let cx = bj()
1111+ let cy = bk()
1112+ let cC = bl()
1113+ let cD = bm()
1114+ let hM = aK(aM(cx, cC), aM(cy, cD))
1115+ let hN = (cx - cs)
1116+ let hU = aP((aK(aM(hN, cC), hM) - cy))
1117+ let hP = (cy - hU)
1118+ let hV = gf(dy(), hN, hP)
1119+ let hR = hV._1
1120+ let hS = hV._2
1121+ let gj = hV._3
1122+ let hT = if ((gj != 0))
11381123 then {
1139- let hY = invoke(as(), "exchangeFreeAndLocked", [go], nil)
1140- if ((hY == hY))
1124+ let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125+ if ((hT == hT))
11411126 then nil
11421127 else throw("Strict value is not equal to itself.")
11431128 }
11441129 else nil
1145- if ((hY == hY))
1146- then (hA(hS, hU) ++ hB(hW, hX))
1130+ if ((hT == hT))
1131+ then (hv(hN, hP) ++ hw(hR, hS))
11471132 else throw("Strict value is not equal to itself.")
11481133 }
11491134
11501135
11511136
1152-@Callable(bR)
1153-func changeSettings (gU,gV,gW,gX,eI,gY,gZ,ha,hb,dX,hc,hd,he) = if ((bR.caller != an()))
1137+@Callable(bL)
1138+func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
11541139 then throw("Invalid changeSettings params")
1155- else gT(gU, gV, gW, gX, eI, gY, gZ, ha, hb, dX, hc, hd, he)
1140+ else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
11561141
11571142
11581143
1159-@Callable(bR)
1160-func initialize (cD,cE,gX,gU,gV,gW,eI,ib,ic,id,gY,gZ,ha,hb,dX,hc,hd,he) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cD))
1144+@Callable(bL)
1145+func initialize (cx,cy,gS,gP,gQ,gR,eC,hW,hX,hY,gT,gU,gV,gW,dR,gX,gY,gZ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cx))
11611146 then true
1162- else (0 >= cE))
1147+ else (0 >= cy))
11631148 then true
1164- else (0 >= gX))
1149+ else (0 >= gS))
1150+ then true
1151+ else (0 >= gP))
1152+ then true
1153+ else (0 >= gQ))
1154+ then true
1155+ else (0 >= gR))
1156+ then true
1157+ else (0 >= eC))
1158+ then true
1159+ else (0 >= gT))
11651160 then true
11661161 else (0 >= gU))
11671162 then true
11681163 else (0 >= gV))
11691164 then true
11701165 else (0 >= gW))
11711166 then true
1172- else (0 >= eI))
1167+ else (0 >= dR))
1168+ then true
1169+ else (0 >= gX))
1170+ then true
1171+ else (gX > aD))
11731172 then true
11741173 else (0 >= gY))
11751174 then true
11761175 else (0 >= gZ))
11771176 then true
1178- else (0 >= ha))
1177+ else cn())
11791178 then true
1180- else (0 >= hb))
1181- then true
1182- else (0 >= dX))
1183- then true
1184- else (0 >= hc))
1185- then true
1186- else (hc > aF))
1187- then true
1188- else (0 >= hd))
1189- then true
1190- else (0 >= he))
1191- then true
1192- else ct())
1179+ else (bL.caller != this))
11931180 then throw("Invalid initialize parameters")
1194- else ((((hC(cD, cE, 0, 0, 0, 0, 0, 0) ++ gT(gU, gV, gW, gX, eI, gY, gZ, ha, hb, dX, hc, hd, he)) ++ hf((bP() + gX), 0, 0, 0, 0)) ++ hN(0)) ++ [BooleanEntry(m, true), StringEntry(a, ib), StringEntry(b, ic), StringEntry(X, id)])
1181+ else ((((hx(cx, cy, 0, 0, 0, 0, 0, 0) ++ gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)) ++ ha((bJ() + gS), 0, 0, 0, 0)) ++ hI(0)) ++ [BooleanEntry(m, true), StringEntry(a, hW), StringEntry(b, hX), StringEntry(X, toString(addressFromStringValue(hY)))])
11951182
11961183
11971184
1198-@Callable(bR)
1199-func increasePosition (ie,if,ig,ih) = {
1200- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1201- if ((ii == ii))
1185+@Callable(bL)
1186+func increasePosition (hZ,ia,ib,ic) = {
1187+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188+ if ((id == id))
12021189 then {
1203- let ij = invoke(this, "ensureCalledOnce", nil, nil)
1204- if ((ij == ij))
1190+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191+ if ((ie == ie))
12051192 then {
1206- let ca = bQ(bR)
1207- let ik = bR.payments[0].amount
1208- let gG = bR.payments[0].assetId
1209- let il = toBase58String(value(gG))
1210- let im = (gG == ap())
1211- if (if (if (if (if (if (if (if (if (if ((ie != aA))
1212- then (ie != aB)
1193+ let bU = bK(bL)
1194+ let if = bL.payments[0].amount
1195+ let gB = bL.payments[0].assetId
1196+ let ig = toBase58String(value(gB))
1197+ let ih = (gB == an())
1198+ if (if (if (if (if (if (if (if (if (if ((hZ != ay))
1199+ then (hZ != az)
12131200 else false)
12141201 then true
1215- else (0 >= ik))
1202+ else (0 >= if))
12161203 then true
1217- else !(ct()))
1204+ else !(cn()))
12181205 then true
1219- else !(im))
1206+ else !(ih))
12201207 then true
1221- else !(gF(ca, il)))
1208+ else !(gA(bU, ig)))
12221209 then true
1223- else !(bS(aM(aF, if), bo(), true)))
1210+ else !(bM(aK(aD, ia), bi(), true)))
12241211 then true
1225- else cu())
1212+ else co())
12261213 then true
1227- else cv())
1214+ else cp())
12281215 then true
1229- else dK())
1216+ else dE())
12301217 then throw("Invalid increasePosition parameters")
12311218 else {
1232- let in = gI(ca, gN(bR))
1233- let gD = in._1
1234- let gE = in._2
1235- let hL = aM(ik, (aO(gD, if) + aF))
1236- let io = (ik - hL)
1237- let ip = invoke(av(), "acceptPaymentWithLink", [ca, ih], [AttachedPayment(ap(), io)])
1238- if ((ip == ip))
1219+ let ii = gD(bU, gI(bL))
1220+ let gy = ii._1
1221+ let gz = ii._2
1222+ let hG = aK(if, (aM(gy, ia) + aD))
1223+ let ij = (if - hG)
1224+ let ik = invoke(at(), "acceptPaymentWithLink", [bU, ic], [AttachedPayment(an(), ij)])
1225+ if ((ik == ik))
12391226 then {
1240- let iq = {
1241- let cc = ip
1242- if ($isInstanceOf(cc, "Int"))
1227+ let il = {
1228+ let bW = ik
1229+ if ($isInstanceOf(bW, "Int"))
12431230 then {
1244- let gL = cc
1245- gL
1231+ let gG = bW
1232+ gG
12461233 }
12471234 else throw("Invalid referrerFee")
12481235 }
1249- let ir = (io - iq)
1250- let is = bZ(ca)
1251- let eM = is._1
1252- let eN = is._2
1253- let eO = is._3
1254- let eP = is._4
1255- let eQ = is._5
1256- let it = (eM == 0)
1257- let iu = if ((eM > 0))
1258- then (ie == aA)
1259- else (ie == aB)
1260- let iv = if (!(it))
1261- then iu
1236+ let im = (ij - il)
1237+ let in = bT(bU)
1238+ let eH = in._1
1239+ let eI = in._2
1240+ let eJ = in._3
1241+ let eK = in._4
1242+ let eL = in._5
1243+ let io = (eH == 0)
1244+ let ip = if ((eH > 0))
1245+ then (hZ == ay)
1246+ else (hZ == az)
1247+ let iq = if (!(io))
1248+ then ip
12621249 else false
1263- let iw = (ie == aA)
1264- let ix = if (if (it)
1250+ let ir = (hZ == ay)
1251+ let is = if (if (io)
12651252 then true
1266- else iv)
1253+ else iq)
12671254 then {
1268- let iy = aO(hL, if)
1269- let iz = cH(iw, iy)
1270- let cO = iz._1
1271- let cL = iz._2
1272- let cM = iz._3
1273- let eW = iz._4
1274- if (if ((ig != 0))
1275- then (ig > aV(cO))
1255+ let it = aM(hG, ia)
1256+ let iu = cB(ir, it)
1257+ let cI = iu._1
1258+ let cF = iu._2
1259+ let cG = iu._3
1260+ let eR = iu._4
1261+ if (if ((ib != 0))
1262+ then (ib > aP(cI))
12761263 else false)
1277- then throw(((("Limit error: " + toString(aV(cO))) + " < ") + toString(ig)))
1264+ then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
12781265 else {
1279- let fk = (eM + cO)
1280- let iA = (bw() + (if ((fk > 0))
1281- then iy
1266+ let ff = (eH + cI)
1267+ let iv = (bq() + (if ((ff > 0))
1268+ then it
12821269 else 0))
1283- let iB = (bv() + (if ((0 > fk))
1284- then iy
1270+ let iw = (bp() + (if ((0 > ff))
1271+ then it
12851272 else 0))
1286- let iC = dd(eM, eN, eP, eQ, hL)
1287- let dl = iC._1
1288- let fe = iC._2
1289- let ff = iC._3
1290- let dc = iC._4
1291- if (!(dQ(cL, cM)))
1273+ let ix = cX(eH, eI, eK, eL, hG)
1274+ let df = ix._1
1275+ let eZ = ix._2
1276+ let fa = ix._3
1277+ let cW = ix._4
1278+ if (!(dK(cF, cG)))
12921279 then throw("Over max spread limit")
1293- else if (!(dU(iA, iB)))
1280+ else if (!(dO(iv, iw)))
12941281 then throw("Over max open notional")
1295- else $Tuple14(fk, dl, (eO + iy), bX(fk), bP(), cM, cL, eW, (bu() + iy), (bL() + (if ((fk > 0))
1296- then aV(cO)
1297- else 0)), (bK() + (if ((0 > fk))
1298- then aV(cO)
1299- else 0)), iA, iB, dc)
1282+ else $Tuple14(ff, df, (eJ + it), bR(ff), bJ(), cG, cF, eR, (bo() + it), (bF() + (if ((ff > 0))
1283+ then aP(cI)
1284+ else 0)), (bE() + (if ((0 > ff))
1285+ then aP(cI)
1286+ else 0)), iv, iw, cW)
13001287 }
13011288 }
13021289 else {
1303- let iy = aO(hL, if)
1304- let iD = ek(toString(bR.caller), aI)
1305- let eZ = iD._1
1306- let ej = iD._2
1307- if ((eZ > iy))
1290+ let it = aM(hG, ia)
1291+ let iy = ee(toString(bL.caller), aG)
1292+ let eU = iy._1
1293+ let ed = iy._2
1294+ if ((eU > it))
13081295 then throw("Use decreasePosition to decrease position size")
13091296 else throw("Close position first")
13101297 }
1311- let fk = ix._1
1312- let iE = ix._2
1313- let fm = ix._3
1314- let iF = ix._4
1315- let iG = ix._5
1316- let cM = ix._6
1317- let cL = ix._7
1318- let eW = ix._8
1319- let iH = ix._9
1320- let iI = ix._10
1321- let iJ = ix._11
1322- let iA = ix._12
1323- let iB = ix._13
1324- let dc = ix._14
1325- let iK = gP((ir + dc))
1326- let gR = iK._1
1327- let gS = iK._2
1328- let iL = if ((hL >= dc))
1329- then invoke(as(), "addLocked", nil, [AttachedPayment(ap(), (hL - dc))])
1330- else invoke(as(), "withdrawLocked", [(dc - hL)], nil)
1331- if ((iL == iL))
1298+ let ff = is._1
1299+ let iz = is._2
1300+ let fh = is._3
1301+ let iA = is._4
1302+ let iB = is._5
1303+ let cG = is._6
1304+ let cF = is._7
1305+ let eR = is._8
1306+ let iC = is._9
1307+ let iD = is._10
1308+ let iE = is._11
1309+ let iv = is._12
1310+ let iw = is._13
1311+ let cW = is._14
1312+ let iF = gK((im + cW))
1313+ let gM = iF._1
1314+ let gN = iF._2
1315+ let iG = if ((hG >= cW))
1316+ then invoke(aq(), "addLocked", nil, [AttachedPayment(an(), (hG - cW))])
1317+ else invoke(aq(), "withdrawLocked", [(cW - hG)], nil)
1318+ if ((iG == iG))
13321319 then {
1333- let iM = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gS)])
1334- if ((iM == iM))
1320+ let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321+ if ((iH == iH))
13351322 then {
1336- let iN = invoke(at(), "notifyFees", [ca, ir], nil)
1337- if ((iN == iN))
1323+ let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324+ if ((iI == iI))
13381325 then {
1339- let iO = invoke(at(), "notifyNotional", [ca, fm], nil)
1340- if ((iO == iO))
1341- then ((((((hp(ca, fk, iE, fm, iF, iG) ++ hl(it, ca)) ++ ho(it, ca, gD)) ++ hC(cL, cM, eW, iH, iI, iJ, iA, iB)) ++ hO(gR)) ++ hN(((bl() + hL) - dc))) ++ hP(gE, bR))
1326+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1327+ if ((iJ == iJ))
1328+ then ((((((hk(bU, ff, iz, fh, iA, iB) ++ hg(io, bU)) ++ hj(io, bU, gy)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hJ(gM)) ++ hI(((bf() + hG) - cW))) ++ hK(gz, bL))
13421329 else throw("Strict value is not equal to itself.")
13431330 }
13441331 else throw("Strict value is not equal to itself.")
13451332 }
13461333 else throw("Strict value is not equal to itself.")
13471334 }
13481335 else throw("Strict value is not equal to itself.")
13491336 }
13501337 else throw("Strict value is not equal to itself.")
13511338 }
13521339 }
13531340 else throw("Strict value is not equal to itself.")
13541341 }
13551342 else throw("Strict value is not equal to itself.")
13561343 }
13571344
13581345
13591346
1360-@Callable(bR)
1347+@Callable(bL)
13611348 func addMargin () = {
1362- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1363- if ((ii == ii))
1349+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350+ if ((id == id))
13641351 then {
1365- let ij = invoke(this, "ensureCalledOnce", nil, nil)
1366- if ((ij == ij))
1352+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353+ if ((ie == ie))
13671354 then {
1368- let ca = toString(bR.caller)
1369- let hL = bR.payments[0].amount
1370- let gG = bR.payments[0].assetId
1371- let il = toBase58String(value(gG))
1372- let im = (gG == ap())
1373- if (if (if (if (if (if (if (!(im))
1355+ let bU = toString(bL.caller)
1356+ let hG = bL.payments[0].amount
1357+ let gB = bL.payments[0].assetId
1358+ let ig = toBase58String(value(gB))
1359+ let ih = (gB == an())
1360+ if (if (if (if (if (if (if (!(ih))
13741361 then true
1375- else !(ck(toString(bR.caller))))
1362+ else !(ce(toString(bL.caller))))
13761363 then true
1377- else !(gH(ca, il)))
1364+ else !(gC(bU, ig)))
13781365 then true
1379- else !(ct()))
1366+ else !(cn()))
13801367 then true
1381- else cu())
1368+ else co())
13821369 then true
1383- else cv())
1370+ else cp())
13841371 then true
1385- else dK())
1372+ else dE())
13861373 then throw("Invalid addMargin parameters")
13871374 else {
1388- let iP = bZ(ca)
1389- let eM = iP._1
1390- let eN = iP._2
1391- let eO = iP._3
1392- let eP = iP._4
1393- let eQ = iP._5
1394- let iL = invoke(as(), "addLocked", nil, [AttachedPayment(ap(), hL)])
1395- if ((iL == iL))
1375+ let iK = bT(bU)
1376+ let eH = iK._1
1377+ let eI = iK._2
1378+ let eJ = iK._3
1379+ let eK = iK._4
1380+ let eL = iK._5
1381+ let iG = invoke(aq(), "addLocked", nil, [AttachedPayment(an(), hG)])
1382+ if ((iG == iG))
13961383 then {
1397- let dc = cY(eN, eQ)
1398- let iQ = if ((dc > 0))
1384+ let cW = cS(eI, eL)
1385+ let iL = if ((cW > 0))
13991386 then {
1400- let iR = gP(dc)
1401- let gR = iR._1
1402- let gS = iR._2
1403- let iS = invoke(as(), "withdrawLocked", [gR], nil)
1404- if ((iS == iS))
1387+ let iM = gK(cW)
1388+ let gM = iM._1
1389+ let gN = iM._2
1390+ let iN = invoke(aq(), "withdrawLocked", [gM], nil)
1391+ if ((iN == iN))
14051392 then {
1406- let iT = invoke(as(), "exchangeFreeAndLocked", [-(gS)], nil)
1407- if ((iT == iT))
1408- then hO(gR)
1393+ let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394+ if ((iO == iO))
1395+ then hJ(gM)
14091396 else throw("Strict value is not equal to itself.")
14101397 }
14111398 else throw("Strict value is not equal to itself.")
14121399 }
14131400 else nil
1414- if ((iQ == iQ))
1415- then ((hp(ca, eM, ((eN - dc) + hL), eO, eP, bP()) ++ hN(((bl() + hL) - dc))) ++ iQ)
1401+ if ((iL == iL))
1402+ then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
14161403 else throw("Strict value is not equal to itself.")
14171404 }
14181405 else throw("Strict value is not equal to itself.")
14191406 }
14201407 }
14211408 else throw("Strict value is not equal to itself.")
14221409 }
14231410 else throw("Strict value is not equal to itself.")
14241411 }
14251412
14261413
14271414
1428-@Callable(bR)
1429-func removeMargin (hL) = {
1430- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1431- if ((ii == ii))
1415+@Callable(bL)
1416+func removeMargin (hG) = {
1417+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418+ if ((id == id))
14321419 then {
1433- let ij = invoke(this, "ensureCalledOnce", nil, nil)
1434- if ((ij == ij))
1420+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421+ if ((ie == ie))
14351422 then {
1436- let ca = toString(bR.caller)
1437- if (if (if (if (if ((0 >= hL))
1423+ let bU = toString(bL.caller)
1424+ if (if (if (if (if ((0 >= hG))
14381425 then true
1439- else !(ck(ca)))
1426+ else !(ce(bU)))
14401427 then true
1441- else !(ct()))
1428+ else !(cn()))
14421429 then true
1443- else cu())
1430+ else co())
14441431 then true
1445- else dK())
1432+ else dE())
14461433 then throw("Invalid removeMargin parameters")
14471434 else {
1448- let iU = bZ(ca)
1449- let eM = iU._1
1450- let eN = iU._2
1451- let eO = iU._3
1452- let eP = iU._4
1453- let eQ = iU._5
1454- let iV = dd(eM, eN, eP, eQ, -(hL))
1455- let dl = iV._1
1456- let dm = iV._2
1457- let dh = iV._3
1458- let dc = iV._4
1459- if ((dm != 0))
1435+ let iP = bT(bU)
1436+ let eH = iP._1
1437+ let eI = iP._2
1438+ let eJ = iP._3
1439+ let eK = iP._4
1440+ let eL = iP._5
1441+ let iQ = cX(eH, eI, eK, eL, -(hG))
1442+ let df = iQ._1
1443+ let dg = iQ._2
1444+ let db = iQ._3
1445+ let cW = iQ._4
1446+ if ((dg != 0))
14601447 then throw("Invalid removed margin amount")
14611448 else {
1462- let fp = ep(dl, dm, eO)
1463- if (!(bS(fp, bo(), true)))
1464- then throw(((("Too much margin removed: " + toString(fp)) + " < ") + toString(bo())))
1449+ let fk = ej(df, dg, eJ)
1450+ if (!(bM(fk, bi(), true)))
1451+ then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
14651452 else {
1466- let iW = gP(dc)
1467- let gR = iW._1
1468- let gS = iW._2
1469- let iQ = if ((dc > 0))
1453+ let iR = gK(cW)
1454+ let gM = iR._1
1455+ let gN = iR._2
1456+ let iL = if ((cW > 0))
14701457 then {
1471- let iT = invoke(as(), "exchangeFreeAndLocked", [-(gS)], nil)
1472- if ((iT == iT))
1473- then hO(gR)
1458+ let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459+ if ((iO == iO))
1460+ then hJ(gM)
14741461 else throw("Strict value is not equal to itself.")
14751462 }
14761463 else nil
1477- if ((iQ == iQ))
1464+ if ((iL == iL))
14781465 then {
1479- let iS = invoke(as(), "withdrawLocked", [(hL + gR)], nil)
1480- if ((iS == iS))
1481- then (((hp(ca, eM, dl, eO, bX(eM), bP()) ++ hK(bR.caller, hL)) ++ hN(((bl() - hL) - dc))) ++ iQ)
1466+ let iN = invoke(aq(), "withdrawLocked", [(hG + gM)], nil)
1467+ if ((iN == iN))
1468+ then (((hk(bU, eH, df, eJ, bR(eH), bJ()) ++ hF(bL.caller, hG)) ++ hI(((bf() - hG) - cW))) ++ iL)
14821469 else throw("Strict value is not equal to itself.")
14831470 }
14841471 else throw("Strict value is not equal to itself.")
14851472 }
14861473 }
14871474 }
14881475 }
14891476 else throw("Strict value is not equal to itself.")
14901477 }
14911478 else throw("Strict value is not equal to itself.")
14921479 }
14931480
14941481
14951482
1496-@Callable(bR)
1497-func closePosition (eH,eJ,eK) = {
1498- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1499- if ((ii == ii))
1483+@Callable(bL)
1484+func closePosition (eB,eD,eE) = {
1485+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486+ if ((id == id))
15001487 then {
1501- let ij = invoke(this, "ensureCalledOnce", nil, nil)
1502- if ((ij == ij))
1488+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489+ if ((ie == ie))
15031490 then {
1504- let ca = bQ(bR)
1505- let iX = valueOrErrorMessage(addressFromString(ca), "Invalid caller")
1506- let cj = ch(ca)
1507- if (if (if (if (if (if (!(ck(ca)))
1491+ let bU = bK(bL)
1492+ let iS = valueOrErrorMessage(addressFromString(bU), "Invalid caller")
1493+ let cd = cb(bU)
1494+ if (if (if (if (if (if (!(ce(bU)))
15081495 then true
1509- else !(ct()))
1496+ else !(cn()))
15101497 then true
1511- else cu())
1498+ else co())
15121499 then true
1513- else (0 >= eH))
1500+ else (0 >= eB))
15141501 then true
1515- else (0 > eJ))
1502+ else (0 > eD))
15161503 then true
1517- else dK())
1504+ else dE())
15181505 then throw("Invalid closePosition parameters")
15191506 else {
1520- let eQ = bZ(ca)._5
1521- let iY = eG(ca, eH, cj, eJ, eK, true)
1522- let fk = iY._1
1523- let ft = iY._2
1524- let fm = iY._3
1525- let fn = iY._4
1526- let fg = iY._5
1527- let fb = iY._6
1528- let fs = iY._7
1529- let cL = iY._8
1530- let cM = iY._9
1531- let eW = iY._10
1532- let iH = iY._11
1533- let iI = iY._12
1534- let iJ = iY._13
1535- let iA = iY._14
1536- let iB = iY._15
1537- let iZ = iY._16
1538- if ((fg > 0))
1507+ let eL = bT(bU)._5
1508+ let iT = eA(bU, eB, cd, eD, eE, true, true)
1509+ let ff = iT._1
1510+ let fo = iT._2
1511+ let fh = iT._3
1512+ let fi = iT._4
1513+ let fb = iT._5
1514+ let eW = iT._6
1515+ let fn = iT._7
1516+ let cF = iT._8
1517+ let cG = iT._9
1518+ let eR = iT._10
1519+ let iC = iT._11
1520+ let iD = iT._12
1521+ let iE = iT._13
1522+ let iv = iT._14
1523+ let iw = iT._15
1524+ let iU = iT._16
1525+ if ((fb > 0))
15391526 then throw("Invalid closePosition parameters: bad debt")
1540- else if ((eQ >= bP()))
1527+ else if ((eL >= bJ()))
15411528 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15421529 else {
1543- let eT = (fk != 0)
1544- let ja = (fs + iZ)
1545- let jb = (bl() - ja)
1546- let jc = if ((0 > jb))
1530+ let eO = (ff != 0)
1531+ let iV = (fn + iU)
1532+ let iW = (bf() - iV)
1533+ let iX = if ((0 > iW))
15471534 then 0
1548- else jb
1549- let iS = invoke(as(), "withdrawLocked", [ja], nil)
1550- if ((iS == iS))
1535+ else iW
1536+ let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537+ if ((iN == iN))
15511538 then {
1552- let jd = gP(iZ)
1553- let gR = jd._1
1554- let gS = jd._2
1555- let iM = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gS)])
1556- if ((iM == iM))
1539+ let iY = gK(iU)
1540+ let gM = iY._1
1541+ let gN = iY._2
1542+ let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1543+ if ((iH == iH))
15571544 then {
1558- let iN = invoke(at(), "notifyFees", [ca, iZ], nil)
1559- if ((iN == iN))
1545+ let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546+ if ((iI == iI))
15601547 then {
1561- let iO = invoke(at(), "notifyNotional", [ca, fm], nil)
1562- if ((iO == iO))
1563- then (((((if (eT)
1564- then hp(ca, fk, ft, fm, fn, bP())
1565- else hJ(ca)) ++ hC(cL, cM, eW, iH, iI, iJ, iA, iB)) ++ (if ((fs > 0))
1566- then hK(iX, fs)
1567- else nil)) ++ hN(jc)) ++ hO(gR))
1548+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1549+ if ((iJ == iJ))
1550+ then (((((if (eO)
1551+ then hk(bU, ff, fo, fh, fi, bJ())
1552+ else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ (if ((fn > 0))
1553+ then hF(iS, fn)
1554+ else nil)) ++ hI(iX)) ++ hJ(gM))
15681555 else throw("Strict value is not equal to itself.")
15691556 }
15701557 else throw("Strict value is not equal to itself.")
15711558 }
15721559 else throw("Strict value is not equal to itself.")
15731560 }
15741561 else throw("Strict value is not equal to itself.")
15751562 }
15761563 }
15771564 }
15781565 else throw("Strict value is not equal to itself.")
15791566 }
15801567 else throw("Strict value is not equal to itself.")
15811568 }
15821569
15831570
15841571
1585-@Callable(bR)
1586-func liquidate (ca) = {
1587- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1588- if ((ii == ii))
1572+@Callable(bL)
1573+func liquidate (bU) = {
1574+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575+ if ((id == id))
15891576 then {
1590- let je = et(ca, aI)
1591- let jf = if (dZ())
1577+ let iZ = en(bU, aG)
1578+ let ja = if (dT())
15921579 then {
1593- let jg = et(ca, aJ)
1594- aW(je, jg)
1580+ let jb = en(bU, aH)
1581+ aQ(iZ, jb)
15951582 }
1596- else je
1597- if (if (if (if (if (!(bS(jf, bB(), false)))
1583+ else iZ
1584+ if (if (if (if (if (!(bM(ja, bv(), false)))
15981585 then true
1599- else !(ck(ca)))
1586+ else !(ce(bU)))
16001587 then true
1601- else !(ct()))
1588+ else !(cn()))
16021589 then true
1603- else cu())
1590+ else co())
16041591 then true
1605- else dK())
1592+ else dE())
16061593 then throw("Unable to liquidate")
16071594 else {
1608- let jh = if (if ((je > bC()))
1609- then true
1610- else (bD() > 0))
1611- then true
1612- else (aF > bD())
1613- let eM = bZ(ca)._1
1614- let ed = aV(eM)
1615- let ji = if (jh)
1595+ let jc = if (if ((iZ > bw()))
1596+ then (bx() > 0)
1597+ else false)
1598+ then (aD > bx())
1599+ else false
1600+ let eH = bT(bU)._1
1601+ let dX = aP(eH)
1602+ let jd = if (jc)
16161603 then {
1617- let jj = eB(ca, eM)
1618- let jk = aM(aV(jj), ed)
1619- $Tuple2(jk, aV(jj))
1604+ let je = ev(bU, eH)
1605+ let jf = aK(aP(je), dX)
1606+ $Tuple2(jf, aP(je))
16201607 }
1621- else $Tuple2(0, ed)
1622- let jk = ji._1
1623- let jj = ji._2
1624- let jl = eG(ca, if (jh)
1625- then jj
1626- else ed, bC(), 0, true, false)
1627- let fk = jl._1
1628- let ft = jl._2
1629- let fm = jl._3
1630- let fn = jl._4
1631- let fg = jl._5
1632- let fb = jl._6
1633- let fs = jl._7
1634- let cL = jl._8
1635- let cM = jl._9
1636- let eW = jl._10
1637- let iH = jl._11
1638- let iI = jl._12
1639- let iJ = jl._13
1640- let iA = jl._14
1641- let iB = jl._15
1642- let jm = jl._16
1643- let jn = (jm / 2)
1644- let gS = (jm - jn)
1645- let jb = (bl() - jm)
1646- let jo = if ((0 > jb))
1608+ else $Tuple2(0, dX)
1609+ let jf = jd._1
1610+ let je = jd._2
1611+ let jg = eA(bU, if (jc)
1612+ then je
1613+ else dX, bw(), 0, true, false, true)
1614+ let ff = jg._1
1615+ let fo = jg._2
1616+ let fh = jg._3
1617+ let fi = jg._4
1618+ let fb = jg._5
1619+ let eW = jg._6
1620+ let fn = jg._7
1621+ let cF = jg._8
1622+ let cG = jg._9
1623+ let eR = jg._10
1624+ let iC = jg._11
1625+ let iD = jg._12
1626+ let iE = jg._13
1627+ let iv = jg._14
1628+ let iw = jg._15
1629+ let jh = jg._16
1630+ let ji = (jh / 2)
1631+ let gN = (jh - ji)
1632+ let iW = (bf() - jh)
1633+ let jj = if ((0 > iW))
16471634 then 0
1648- else jb
1649- let iT = if ((fg > 0))
1635+ else iW
1636+ let iO = if ((fb > 0))
16501637 then {
1651- let iT = invoke(as(), "exchangeFreeAndLocked", [fg], nil)
1652- if ((iT == iT))
1638+ let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639+ if ((iO == iO))
16531640 then nil
16541641 else throw("Strict value is not equal to itself.")
16551642 }
16561643 else nil
1657- if ((iT == iT))
1644+ if ((iO == iO))
16581645 then {
1659- let iS = invoke(as(), "withdrawLocked", [jm], nil)
1660- if ((iS == iS))
1646+ let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647+ if ((iN == iN))
16611648 then {
1662- let jp = invoke(as(), "addFree", nil, [AttachedPayment(ap(), gS)])
1663- if ((jp == jp))
1649+ let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650+ if ((jk == jk))
16641651 then {
1665- let iO = invoke(at(), "notifyNotional", [ca, fm], nil)
1666- if ((iO == iO))
1667- then ((((if (jh)
1668- then hp(ca, fk, ft, fm, fn, bP())
1669- else hJ(ca)) ++ hC(cL, cM, eW, iH, iI, iJ, iA, iB)) ++ hK(bR.caller, jn)) ++ hN(jo))
1652+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1653+ if ((iJ == iJ))
1654+ then ((((if (jc)
1655+ then hk(bU, ff, fo, fh, fi, bJ())
1656+ else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hF(bL.caller, ji)) ++ hI(jj))
16701657 else throw("Strict value is not equal to itself.")
16711658 }
16721659 else throw("Strict value is not equal to itself.")
16731660 }
16741661 else throw("Strict value is not equal to itself.")
16751662 }
16761663 else throw("Strict value is not equal to itself.")
16771664 }
16781665 }
16791666 else throw("Strict value is not equal to itself.")
16801667 }
16811668
16821669
16831670
1684-@Callable(bR)
1671+@Callable(bL)
16851672 func payFunding () = {
1686- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1687- if ((ii == ii))
1673+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674+ if ((id == id))
16881675 then {
1689- let jq = bx()
1690- if (if (if ((jq > bP()))
1676+ let jl = br()
1677+ if (if (if ((jl > bJ()))
16911678 then true
1692- else !(ct()))
1679+ else !(cn()))
16931680 then true
1694- else cu())
1695- then throw(((("Invalid funding block timestamp: " + toString(bP())) + " < ") + toString(jq)))
1681+ else co())
1682+ then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
16961683 else {
1697- let gq = dE()
1698- let jr = gp()
1699- let gt = jr._1
1700- let gu = jr._2
1701- hf((jq + bA()), (bI() + gu), (bJ() + gt), aM(gu, gq), aM(gt, gq))
1684+ let gl = dy()
1685+ let jm = gk()
1686+ let go = jm._1
1687+ let gp = jm._2
1688+ ha((jl + bu()), (bC() + gp), (bD() + go), aK(gp, gl), aK(go, gl))
17021689 }
17031690 }
17041691 else throw("Strict value is not equal to itself.")
17051692 }
17061693
17071694
17081695
1709-@Callable(bR)
1696+@Callable(bL)
17101697 func syncTerminalPriceToOracle () = {
1711- let cD = bp()
1712- let cE = bq()
1713- let js = gk(dE(), cD, cE)
1714- let hW = js._1
1715- let hX = js._2
1716- let go = js._3
1717- let hY = if ((go != 0))
1698+ let cx = bj()
1699+ let cy = bk()
1700+ let jn = gf(dy(), cx, cy)
1701+ let hR = jn._1
1702+ let hS = jn._2
1703+ let gj = jn._3
1704+ let jo = if (if ((0 > gj))
1705+ then (aP(gj) > bf())
1706+ else false)
1707+ then -(bf())
1708+ else gj
1709+ let hT = if ((jo != 0))
17181710 then {
1719- let hY = invoke(as(), "exchangeFreeAndLocked", [go], nil)
1720- if ((hY == hY))
1711+ let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712+ if ((hT == hT))
17211713 then nil
17221714 else throw("Strict value is not equal to itself.")
17231715 }
17241716 else nil
1725- if ((hY == hY))
1726- then ((hN((bl() + go)) ++ hB(hW, hX)) ++ ht(aM(aO(cD, hW), aO(cE, hX))))
1717+ if ((hT == hT))
1718+ then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
17271719 else throw("Strict value is not equal to itself.")
17281720 }
17291721
17301722
17311723
1732-@Callable(bR)
1733-func ensureCalledOnce () = if ((bR.caller != this))
1724+@Callable(bL)
1725+func ensureCalledOnce () = if ((bL.caller != this))
17341726 then throw("Invalid saveCurrentTxId parameters")
17351727 else {
1736- let jt = valueOrElse(getString(this, W), "")
1737- if ((jt != toBase58String(bR.transactionId)))
1738- then [StringEntry(W, jt)]
1728+ let jp = valueOrElse(getString(this, W), "")
1729+ if ((jp != toBase58String(bL.transactionId)))
1730+ then [StringEntry(W, jp)]
17391731 else throw("Can not call vAMM methods twice in one tx")
17401732 }
17411733
17421734
17431735
1744-@Callable(bR)
1745-func view_calcRemainMarginWithFundingPayment (ca) = {
1746- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1747- if ((ii == ii))
1736+@Callable(bL)
1737+func view_calcRemainMarginWithFundingPayment (bU) = {
1738+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739+ if ((id == id))
17481740 then {
1749- let ju = bZ(ca)
1750- let cd = ju._1
1751- let em = ju._2
1752- let ev = ju._3
1753- let eo = ju._4
1754- let ex = ju._5
1755- let jv = ek(ca, aI)
1756- let ef = jv._1
1757- let ej = jv._2
1758- let jw = dd(cd, em, eo, ex, ej)
1759- let dl = jw._1
1760- let dm = jw._2
1761- let dh = jw._3
1762- let dc = jw._4
1763- throw(((((((aK(dl) + aK(dh)) + aK(eA(ca))) + aK(ej)) + aK(dm)) + aK(ef)) + aK(dc)))
1741+ let jq = bT(bU)
1742+ let bX = jq._1
1743+ let eg = jq._2
1744+ let ep = jq._3
1745+ let ei = jq._4
1746+ let er = jq._5
1747+ let jr = ee(bU, aG)
1748+ let dZ = jr._1
1749+ let ed = jr._2
1750+ let js = cX(bX, eg, ei, er, ed)
1751+ let df = js._1
1752+ let dg = js._2
1753+ let db = js._3
1754+ let cW = js._4
1755+ throw(((((((aI(df) + aI(db)) + aI(eu(bU))) + aI(ed)) + aI(dg)) + aI(dZ)) + aI(cW)))
17641756 }
17651757 else throw("Strict value is not equal to itself.")
17661758 }
17671759
17681760
17691761
1770-@Callable(bR)
1771-func view_getPegAdjustCost (hu) = {
1772- let cD = bp()
1773- let cE = bq()
1774- let gj = gk(hu, cD, cE)
1775- throw(toString(gj._3))
1762+@Callable(bL)
1763+func view_getPegAdjustCost (hp) = {
1764+ let cx = bj()
1765+ let cy = bk()
1766+ let ge = gf(hp, cx, cy)
1767+ throw(toString(ge._3))
17761768 }
17771769
17781770
17791771
1780-@Callable(bR)
1772+@Callable(bL)
17811773 func view_getTerminalAmmPrice () = {
1782- let jx = fS()
1783- let fW = jx._1
1784- let fX = jx._2
1785- let hR = aM(aO(fW, br()), aO(fX, bs()))
1786- throw(toString(hR))
1774+ let jt = fN()
1775+ let fR = jt._1
1776+ let fS = jt._2
1777+ let hM = aK(aM(fR, bl()), aM(fS, bm()))
1778+ throw(toString(hM))
17871779 }
17881780
17891781
17901782
1791-@Callable(bR)
1783+@Callable(bL)
17921784 func view_getFunding () = {
1793- let gq = dE()
1794- let jy = gp()
1795- let gt = jy._1
1796- let gu = jy._2
1797- let jz = aM(gu, gq)
1798- let jA = aM(gt, gq)
1799- throw((((aK(jz) + aK(jA)) + aK(fu())) + aK(dE())))
1785+ let gl = dy()
1786+ let ju = gk()
1787+ let go = ju._1
1788+ let gp = ju._2
1789+ let jv = aK(gp, gl)
1790+ let jw = aK(go, gl)
1791+ throw((((aI(jv) + aI(jw)) + aI(fp())) + aI(dy())))
18001792 }
18011793
18021794
18031795
1804-@Callable(bR)
1796+@Callable(bL)
18051797 func computeSpotPrice () = {
1806- let ii = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1807- if ((ii == ii))
1798+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799+ if ((id == id))
18081800 then {
1809- let gj = dY()
1810- $Tuple2(nil, gj)
1801+ let ge = dS()
1802+ $Tuple2(nil, ge)
18111803 }
18121804 else throw("Strict value is not equal to itself.")
18131805 }
18141806
18151807
18161808
1817-@Callable(bR)
1818-func computeFeeForTraderWithArtifact (ca,gw) = {
1819- let gj = gI(ca, gw)
1820- $Tuple2(nil, gj)
1809+@Callable(bL)
1810+func computeFeeForTraderWithArtifact (bU,gr) = {
1811+ let ge = gD(bU, gr)
1812+ $Tuple2(nil, ge)
18211813 }
18221814
18231815
1824-@Verifier(jB)
1825-func jC () = sigVerify(jB.bodyBytes, jB.proofs[0], ao())
1816+@Verifier(jx)
1817+func jy () = {
1818+ let jz = getString(this, X)
1819+ if (isDefined(jz))
1820+ then {
1821+ let jA = getString(addressFromStringValue(value(jz)), Z)
1822+ if (isDefined(jA))
1823+ then valueOrElse(getBoolean(addressFromStringValue(value(jA)), ((("status_" + toString(this)) + "_") + toBase58String(jx.id))), false)
1824+ else throw("unable to verify: admin not set in coordinator")
1825+ }
1826+ else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
1827+ }
18261828

github/deemru/w8io/873ac7e 
802.00 ms