tx · 8XQwSCbwRooRVXRS7m7JMnWrxfTZzuV9iDzBnmc6Np7o

3MpjMveMjHs97n26f8QdyN8i3Csx379uswG:  -0.07500000 Waves

2023.03.23 21:56 [2503026] smart account 3MpjMveMjHs97n26f8QdyN8i3Csx379uswG > SELF 0.00000000 Waves

{ "type": 13, "id": "8XQwSCbwRooRVXRS7m7JMnWrxfTZzuV9iDzBnmc6Np7o", "fee": 7500000, "feeAssetId": null, "timestamp": 1679597829181, "version": 2, "chainId": 84, "sender": "3MpjMveMjHs97n26f8QdyN8i3Csx379uswG", "senderPublicKey": "7yXUpfDsaJbPTTdmfjwoT8UnaUpTf61azAA8NGbkRxSM", "proofs": [ "7njA95SZswrYm76T7weA2dpPMsLVK6X7AxSi2E11mnqct5FU37yn744aPEf24ki7MCYBCnZCX8da26cRGso3xMK" ], "script": "base64:BgKAAQgCEgASABIAEgASAwoBARIDCgEBEhAKDgEBAQEBAQEBAQEBAQEBEhUKEwEBAQEBAQEICAgBAQEBAQEBAQESBgoEAQEBCBIDCgEBEgQKAgEBEgYKBAEBAQQSBAoCCAESABIAEgASAwoBCBIECgIIARIDCgEBEgASABIAEgQKAggIrwEADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlAA1rX3F1b3RlT3JhY2xlAg1rX3F1b3RlT3JhY2xlAAlrX2JhbGFuY2UCCWtfYmFsYW5jZQAKa19zZXF1ZW5jZQIKa19zZXF1ZW5jZQAOa19wb3NpdGlvblNpemUCDmtfcG9zaXRpb25TaXplABBrX3Bvc2l0aW9uTWFyZ2luAhBrX3Bvc2l0aW9uTWFyZ2luABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAhZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhJrX3Bvc2l0aW9uRnJhY3Rpb24AEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA1rX3Bvc2l0aW9uRmVlAg1rX3Bvc2l0aW9uRmVlAB5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXACE2tfcG9zaXRpb25UaW1lc3RhbXAADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQACGtfcGF1c2VkAghrX3BhdXNlZAALa19jbG9zZU9ubHkCC2tfY2xvc2VPbmx5AAVrX2ZlZQIFa19mZWUADWtfcm9sbG92ZXJGZWUCDmtfcm9sbG92ZXJfZmVlAA9rX2Z1bmRpbmdQZXJpb2QCD2tfZnVuZGluZ1BlcmlvZAARa19pbml0TWFyZ2luUmF0aW8CEWtfaW5pdE1hcmdpblJhdGlvABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CBWtfbW1yABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwIWa19wYXJ0TGlxdWlkYXRpb25SYXRpbwANa19zcHJlYWRMaW1pdAINa19zcHJlYWRMaW1pdAAQa19tYXhQcmljZUltcGFjdAIQa19tYXhQcmljZUltcGFjdAAQa19tYXhQcmljZVNwcmVhZAIQa19tYXhQcmljZVNwcmVhZAARa19tYXhPcGVuTm90aW9uYWwCEWtfbWF4T3Blbk5vdGlvbmFsABVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQCFWtfZmVlVG9TdGFrZXJzUGVyY2VudAAQa19tYXhPcmFjbGVEZWxheQIQa19tYXhPcmFjbGVEZWxheQANa19mdW5kaW5nTW9kZQINa19mdW5kaW5nTW9kZQAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIba19sYXRlc3RMb25nUHJlbWl1bUZyYWN0aW9uACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIca19sYXRlc3RTaG9ydFByZW1pdW1GcmFjdGlvbgASa19uZXh0RnVuZGluZ0Jsb2NrAh5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAEWtfbG9uZ0Z1bmRpbmdSYXRlAhFrX2xvbmdGdW5kaW5nUmF0ZQASa19zaG9ydEZ1bmRpbmdSYXRlAhJrX3Nob3J0RnVuZGluZ1JhdGUAE2tfcXVvdGVBc3NldFJlc2VydmUCCGtfcXRBc3RSABJrX2Jhc2VBc3NldFJlc2VydmUCCGtfYnNBc3RSABJrX3F1b3RlQXNzZXRXZWlnaHQCCGtfcXRBc3RXABFrX2Jhc2VBc3NldFdlaWdodAIIa19ic0FzdFcAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFmtfb3BlbkludGVyZXN0Tm90aW9uYWwCFmtfb3BlbkludGVyZXN0Tm90aW9uYWwAE2tfb3BlbkludGVyZXN0U2hvcnQCE2tfb3BlbkludGVyZXN0U2hvcnQAEmtfb3BlbkludGVyZXN0TG9uZwISa19vcGVuSW50ZXJlc3RMb25nAAhrX2xhc3RUeAIIa19sYXN0VHgAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0ABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzABBrX29yZGVyc19hZGRyZXNzAhBrX29yZGVyc19hZGRyZXNzABJrX3JlZmVycmFsX2FkZHJlc3MCEmtfcmVmZXJyYWxfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAERbmZ0TWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhNORlQgTWFuYWdlciBub3Qgc2V0AA1rX3Rva2VuX3BhcmFtAg1rX3Rva2VuX3BhcmFtAAxrX3Rva2VuX3R5cGUCDGtfdG9rZW5fdHlwZQAYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFAg1mZWVfcmVkdWN0aW9uAAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAA9NSU5VVEVTX0lOX1lFQVIJAGgCAKCKIAUMREVDSU1BTF9VTklUAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIAEkZVTkRJTkdfQVNZTU1FVFJJQwABABFGVU5ESU5HX1NZTU1FVFJJQwACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBWJkaXZkAgJfeAJfeQkAvQIEBQJfeAkAtgIBBQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEFYm11bGQCAl94Al95CQC9AgQFAl94BQJfeQkAtgIBBQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQNhYnMBAl94AwkAZgIFAl94AAAFAl94CQEBLQEFAl94AQR2bWF4AgJfeAJfeQMJAGcCBQJfeAUCX3kFAl94BQJfeQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQVpbnRPcgIBawNkZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawUDZGVmAQRzdHJBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQRpbnRBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPcm9sbG92ZXJGZWVSYXRlAAkBA2ludAEFDWtfcm9sbG92ZXJGZWUBD2luaXRNYXJnaW5SYXRpbwAJAQNpbnQBBRFrX2luaXRNYXJnaW5SYXRpbwEGcXRBc3RSAAkBA2ludAEFE2tfcXVvdGVBc3NldFJlc2VydmUBBmJzQXN0UgAJAQNpbnQBBRJrX2Jhc2VBc3NldFJlc2VydmUBBnF0QXN0VwAJAQVpbnRPcgIFEmtfcXVvdGVBc3NldFdlaWdodAUMREVDSU1BTF9VTklUAQZic0FzdFcACQEFaW50T3ICBRFrX2Jhc2VBc3NldFdlaWdodAUMREVDSU1BTF9VTklUARF0b3RhbFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRNrX3RvdGFsUG9zaXRpb25TaXplARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARFvcGVuSW50ZXJlc3RTaG9ydAAJAQNpbnQBBRNrX29wZW5JbnRlcmVzdFNob3J0ARBvcGVuSW50ZXJlc3RMb25nAAkBA2ludAEFEmtfb3BlbkludGVyZXN0TG9uZwEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAAJAQNpbnQBBRJrX25leHRGdW5kaW5nQmxvY2sBEGZ1bmRpbmdQZXJpb2RSYXcACQEDaW50AQUPa19mdW5kaW5nUGVyaW9kARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFDERFQ0lNQUxfVU5JVAEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQdTRUNPTkRTARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBA2ludAEFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwETbGlxdWlkYXRpb25GZWVSYXRpbwAJAQNpbnQBBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8BF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkBA2ludAEFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8BC3NwcmVhZExpbWl0AAkBA2ludAEFDWtfc3ByZWFkTGltaXQBDm1heFByaWNlSW1wYWN0AAkBA2ludAEFEGtfbWF4UHJpY2VJbXBhY3QBDm1heFByaWNlU3ByZWFkAAkBA2ludAEFEGtfbWF4UHJpY2VTcHJlYWQBD21heE9wZW5Ob3Rpb25hbAAJAQNpbnQBBRFrX21heE9wZW5Ob3Rpb25hbAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQxsYXN0U2VxdWVuY2UACQEFaW50T3ICBQprX3NlcXVlbmNlAAABE2ZlZVRvU3Rha2Vyc1BlcmNlbnQACQEDaW50AQUVa19mZWVUb1N0YWtlcnNQZXJjZW50AQ5tYXhPcmFjbGVEZWxheQAJAQNpbnQBBRBrX21heE9yYWNsZURlbGF5AQtmdW5kaW5nTW9kZQAJAQVpbnRPcgIFDWtfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwENbGFzdFRpbWVzdGFtcAAIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQ9nZXRBY3R1YWxDYWxsZXIBAWkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBDW9yZGVyc0FkZHJlc3MAAghrX3NlbmRlcgkApQgBCAUBaQZjYWxsZXIBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DDF9tYXJnaW5SYXRpbxBfYmFzZU1hcmdpblJhdGlvFF9sYXJnZXJUaGFuT3JFcXVhbFRvBBRyZW1haW5pbmdNYXJnaW5SYXRpbwkAZQIFDF9tYXJnaW5SYXRpbwUQX2Jhc2VNYXJnaW5SYXRpbwMDBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZgIAAAUUcmVtYWluaW5nTWFyZ2luUmF0aW8HCQACAQkArAICCQCsAgIJAKwCAgIQSW52YWxpZCBtYXJnaW46IAkApAMBBQxfbWFyZ2luUmF0aW8CAyA8IAkApAMBBRBfYmFzZU1hcmdpblJhdGlvAwMJAQEhAQUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGcCBRRyZW1haW5pbmdNYXJnaW5SYXRpbwAABwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPiAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24CB190cmFkZXIKX2RpcmVjdGlvbgQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24ED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlwoFBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FC3Bvc2l0aW9uS2V5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQtwb3NpdGlvbktleQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgULcG9zaXRpb25LZXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAULcG9zaXRpb25LZXkJAJcKBQAAAAAAAAAAAAABDGdldERpcmVjdGlvbgENX3Bvc2l0aW9uU2l6ZQMJAGYCAAAFDV9wb3NpdGlvblNpemUFCURJUl9TSE9SVAUIRElSX0xPTkcBDmdldFBvc2l0aW9uRmVlAQdfdHJhZGVyBA5wb3NpdGlvbkZlZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQdfdHJhZGVyBAckbWF0Y2gwBQ5wb3NpdGlvbkZlZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEC3Bvc2l0aW9uRmVlBQckbWF0Y2gwBQtwb3NpdGlvbkZlZQkBA2ZlZQABE3JlcXVpcmVPcGVuUG9zaXRpb24CB190cmFkZXIKX2RpcmVjdGlvbgMJAAACCAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgJfMQAACQACAQIQTm8gb3BlbiBwb3NpdGlvbgYBDWdldE9yYWNsZURhdGEBA2tleQQNb3JhY2xlRGF0YVN0cgkAnQgCBQR0aGlzBQNrZXkDAwkBCWlzRGVmaW5lZAEFDW9yYWNsZURhdGFTdHIJAQIhPQIJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHICAAcECm9yYWNsZURhdGEJALUJAgkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgIBLAQNb3JhY2xlQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKb3JhY2xlRGF0YQAACQCsAgICG0ludmFsaWQgb3JhY2xlIGFkZHJlc3MgaW46IAkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgQIcHJpY2VLZXkJAJEDAgUKb3JhY2xlRGF0YQABBAhibG9ja0tleQkAkQMCBQpvcmFjbGVEYXRhAAIEB29wZW5LZXkJAJEDAgUKb3JhY2xlRGF0YQADCQCWCgQFDW9yYWNsZUFkZHJlc3MFCHByaWNlS2V5BQhibG9ja0tleQUHb3BlbktleQUEdW5pdAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwEJY2xvc2VPbmx5AAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQtrX2Nsb3NlT25seQcBDXVwZGF0ZVJlc2VydmUDBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudBBfYmFzZUFzc2V0QW1vdW50AwUGX2lzQWRkBAduZXdCYXNlCQBlAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQDCQBnAgAABQduZXdCYXNlCQACAQIqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMJAGQCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQFB25ld0Jhc2UJAGQCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50BAhuZXdRdW90ZQkAZQIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAMJAGcCAAAFCG5ld1F1b3RlCQACAQIqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMFCG5ld1F1b3RlCQBkAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50AQ1jYWxjSW52YXJpYW50AgdfcXRBc3RSB19ic0FzdFIEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYmJzQXN0UgkAtgIBBQdfYnNBc3RSCQEFYm11bGQCBQdicXRBc3RSBQdiYnNBc3RSAQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUHX3F0QXN0VwQBawkBDWNhbGNJbnZhcmlhbnQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQBlAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE1NTA1MTU2NzUJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNTUwNTE1Njc1Al8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTU1MDUxNTY3NQJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNTUwNTE1Njc1Al8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxAQ9jYWxjUm9sbG92ZXJGZWUCEl9vbGRQb3NpdGlvbk1hcmdpbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAQPcG9zaXRpb25NaW51dGVzCQBoAgkAaQIJAGkCCQBlAgkBDWxhc3RUaW1lc3RhbXAABSBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcADoBwA8BQxERUNJTUFMX1VOSVQEC3JvbGxvdmVyRmVlCQEEZGl2ZAIJAQRtdWxkAgkBBG11bGQCBRJfb2xkUG9zaXRpb25NYXJnaW4FD3Bvc2l0aW9uTWludXRlcwkBD3JvbGxvdmVyRmVlUmF0ZQAFD01JTlVURVNfSU5fWUVBUgULcm9sbG92ZXJGZWUBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUQX29sZFBvc2l0aW9uU2l6ZRJfb2xkUG9zaXRpb25NYXJnaW4lX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAxfbWFyZ2luRGVsdGEEDmZ1bmRpbmdQYXltZW50AwkBAiE9AgUQX29sZFBvc2l0aW9uU2l6ZQAABCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBRBfb2xkUG9zaXRpb25TaXplCQEEbXVsZAIJAGUCBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUQX29sZFBvc2l0aW9uU2l6ZQAABAtyb2xsb3ZlckZlZQkBD2NhbGNSb2xsb3ZlckZlZQIFEl9vbGRQb3NpdGlvbk1hcmdpbgUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCCQBlAgUMX21hcmdpbkRlbHRhBQtyb2xsb3ZlckZlZQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTgzNDIxODQ2OQMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxODM0MjE4NDY5Al8xBAdiYWREZWJ0CAUNJHQwMTgzNDIxODQ2OQJfMgkAlgoEBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50BQtyb2xsb3ZlckZlZQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgMFBl9pc0FkZAkAZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50CQBlAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQED3F1b3RlQXNzZXRBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQPcXVvdGVBc3NldERlbHRhCQEDYWJzAQkAZQIFD3F1b3RlQXNzZXRBZnRlcgUSX3F1b3RlQXNzZXRSZXNlcnZlBA5xdW90ZUFzc2V0U29sZAkBBG11bGQCBQ9xdW90ZUFzc2V0RGVsdGEFEV9xdW90ZUFzc2V0V2VpZ2h0BBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QABA0kdDAxOTczMTE5ODkzCQENdXBkYXRlUmVzZXJ2ZQMJAQEhAQUGX2lzQWRkBQ9xdW90ZUFzc2V0RGVsdGEFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTk3MzExOTg5MwJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE5NzMxMTk4OTMCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTk3MzExOTg5MwJfMwQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwABE2dldE9yYWNsZVByaWNlVmFsdWUDBm9yYWNsZQhwcmljZUtleQhibG9ja0tleQQJbGFzdFZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhwcmljZUtleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIHByaWNlLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIcHJpY2VLZXkDCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sIBQlsYXN0QmxvY2sGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCGJsb2NrS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgYmxvY2suIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhibG9ja0tleQMJAGYCCQBlAgUMY3VycmVudEJsb2NrBQ9sYXN0T3JhY2xlQmxvY2sJAQ5tYXhPcmFjbGVEZWxheQAJAAIBCQCsAgIJAKwCAgkArAICAiZPcmFjbGUgc3RhbGUgZGF0YS4gTGFzdCBvcmFjbGUgYmxvY2s6IAkApAMBBQ9sYXN0T3JhY2xlQmxvY2sCECBjdXJyZW50IGJsb2NrOiAJAKQDAQUMY3VycmVudEJsb2NrBQlsYXN0VmFsdWUFCWxhc3RWYWx1ZQEOZ2V0T3JhY2xlUHJpY2UABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBA9iYXNlT3JhY2xlUHJpY2UJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFCmJhc2VPcmFjbGUCXzEIBQpiYXNlT3JhY2xlAl8yCAUKYmFzZU9yYWNsZQJfMwQLcXVvdGVPcmFjbGUJAQ1nZXRPcmFjbGVEYXRhAQUNa19xdW90ZU9yYWNsZQQQcXVvdGVPcmFjbGVQcmljZQMJAQlpc0RlZmluZWQBBQtxdW90ZU9yYWNsZQQMcXVvdGVPcmFjbGVWCQEFdmFsdWUBBQtxdW90ZU9yYWNsZQkBE2dldE9yYWNsZVByaWNlVmFsdWUDCAUMcXVvdGVPcmFjbGVWAl8xCAUMcXVvdGVPcmFjbGVWAl8yCAUMcXVvdGVPcmFjbGVWAl8zBQxERUNJTUFMX1VOSVQJAQRkaXZkAgUPYmFzZU9yYWNsZVByaWNlBRBxdW90ZU9yYWNsZVByaWNlAQ5pc01hcmtldENsb3NlZAAECmJhc2VPcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDWdldE9yYWNsZURhdGEBBQxrX2Jhc2VPcmFjbGUCGU5vIGJhc2UgYXNzZXQgb3JhY2xlIGRhdGEEBm9yYWNsZQgFCmJhc2VPcmFjbGUCXzEEB29wZW5LZXkIBQpiYXNlT3JhY2xlAl80AwkBAiE9AgUHb3BlbktleQIABAZpc09wZW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmwgCBQZvcmFjbGUFB29wZW5LZXkJAKwCAgkArAICCQCsAgICK0NhbiBub3QgZ2V0IG9yYWNsZSBpcyBvcGVuL2Nsb3NlZC4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFB29wZW5LZXkJAQEhAQUGaXNPcGVuBwEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBJhYnNQcmljZURpZmZCZWZvcmUJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQkBBnF0QXN0UgAJAQZic0FzdFIABQdfcXRBc3RXBQdfYnNBc3RXBBFhYnNQcmljZURpZmZBZnRlcgkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBQdfcXRBc3RXBQdfYnNBc3RXAwMJAGYCBRFhYnNQcmljZURpZmZBZnRlcgkBDm1heFByaWNlU3ByZWFkAAkAZgIFEWFic1ByaWNlRGlmZkFmdGVyBRJhYnNQcmljZURpZmZCZWZvcmUHCQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBRFhYnNQcmljZURpZmZBZnRlcgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE291dFBvc2l0aW9uTm90aW9uYWwICQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcJAQEhAQUHaXNTaG9ydAUPcG9zaXRpb25TaXplQWJzBwUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQCXzEFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEOZ2V0T3JhY2xlUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDB190cmFkZXIKX2RpcmVjdGlvbgdfb3B0aW9uBA0kdDAyNzc4ODI3OTI4CQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBAxwb3NpdGlvblNpemUIBQ0kdDAyNzc4ODI3OTI4Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI3Nzg4Mjc5MjgCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjc3ODgyNzkyOAJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyNzc4ODI3OTI4Al80CQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcABQdfb3B0aW9uAQ9jYWxjTWFyZ2luUmF0aW8DDV9yZW1haW5NYXJnaW4IX2JhZERlYnQRX3Bvc2l0aW9uTm90aW9uYWwJAQRkaXZkAgkAZQIFDV9yZW1haW5NYXJnaW4FCF9iYWREZWJ0BRFfcG9zaXRpb25Ob3Rpb25hbAEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMHX3RyYWRlcgpfZGlyZWN0aW9uB19vcHRpb24EDSR0MDI4NDYwMjg2MTMJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24EDHBvc2l0aW9uU2l6ZQgFDSR0MDI4NDYwMjg2MTMCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjg0NjAyODYxMwJfMgQDcG9uCAUNJHQwMjg0NjAyODYxMwJfMwQWcG9zaXRpb25MYXN0VXBkYXRlZENQRggFDSR0MDI4NDYwMjg2MTMCXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwMjg0NjAyODYxMwJfNQQNJHQwMjg2MTkyODcyNAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUHX29wdGlvbgQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI4NjE5Mjg3MjQCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAyODYxOTI4NzI0Al8yBA0kdDAyODcyOTI4OTQxCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgUWcG9zaXRpb25MYXN0VXBkYXRlZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI4NzI5Mjg5NDECXzEEB2JhZERlYnQIBQ0kdDAyODcyOTI4OTQxAl8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwIHX3RyYWRlcgpfZGlyZWN0aW9uCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMFB190cmFkZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwIFB190cmFkZXIJAQxnZXREaXJlY3Rpb24BBQ1fcG9zaXRpb25TaXplCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAEGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQUMbWF4aW11bVJhdGlvBApzd2FwUmVzdWx0CQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcEHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQpzd2FwUmVzdWx0Al8xBAtwcmljZUltcGFjdAgFCnN3YXBSZXN1bHQCXzcDCQBmAgkBDm1heFByaWNlSW1wYWN0AAULcHJpY2VJbXBhY3QFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uCAdfdHJhZGVyCl9kaXJlY3Rpb24FX3NpemUEX2ZlZRRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4UX2NoZWNrTWF4UHJpY2VJbXBhY3QKX2xpcXVpZGF0ZQQNJHQwMzAxMDQzMDI3MgkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzAxMDQzMDI3MgJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzMDEwNDMwMjcyAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDMwMTA0MzAyNzICXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzAxMDQzMDI3MgJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAzMDEwNDMwMjcyAl81BA5pc0xvbmdQb3NpdGlvbgkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABBJhYnNPbGRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUDAwkAZwIFEmFic09sZFBvc2l0aW9uU2l6ZQUFX3NpemUJAGYCBQVfc2l6ZQAABwQOaXNQYXJ0aWFsQ2xvc2UJAGYCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplBA0kdDAzMDU2NDMxMDE1CQEKc3dhcE91dHB1dAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUFX3NpemUFFF9jaGVja01heFByaWNlSW1wYWN0BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwMzA1NjQzMTAxNQJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDMwNTY0MzEwMTUCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDMwNTY0MzEwMTUCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzMDU2NDMxMDE1Al80BBVleGNoYW5nZWRQb3NpdGlvblNpemUDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAQEtAQUFX3NpemUFBV9zaXplBA0kdDAzMTIzMDMxNDU0CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAzMTIzMDMxNDU0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMzEyMzAzMTQ1NAJfMgQNcmVhbGl6ZWRSYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBRJhYnNPbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFDXJlYWxpemVkUmF0aW8EDSR0MDMxNzk1MzIwNDEJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEEnJlbWFpbk1hcmdpbkJlZm9yZQgFDSR0MDMxNzk1MzIwNDECXzEEAngxCAUNJHQwMzE3OTUzMjA0MQJfMgQCeDIIBQ0kdDAzMTc5NTMyMDQxAl8zBAtyb2xsb3ZlckZlZQgFDSR0MDMxNzk1MzIwNDECXzQED3Bvc2l0aW9uQmFkRGVidAgJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFC3JlYWxpemVkUG5sAl8yBBByZWFsaXplZENsb3NlRmVlCQEEbXVsZAIJAQRtdWxkAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUNcmVhbGl6ZWRSYXRpbwUEX2ZlZQQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQNJHQwMzM0NDczMzgzMwMJAAACBQ9uZXdQb3NpdGlvblNpemUAAAkAlAoCAAAAAAkAlAoCCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzMzQ0NzMzODMzAl8xBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDMzNDQ3MzM4MzMCXzIEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBAttYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24DBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAQRtdWxkAgkAZAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC21hcmdpblJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQEEbXVsZAIJAGUCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyBBFtYXJnaW5Ub1RyYWRlclJhdwkAZQIJAGUCBRJyZW1haW5NYXJnaW5CZWZvcmUJAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgUQcmVhbGl6ZWRDbG9zZUZlZQQObWFyZ2luVG9UcmFkZXIDCQBmAgAABRFtYXJnaW5Ub1RyYWRlclJhdwMFCl9saXF1aWRhdGUAAAkAAgECN0ludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogdW5hYmxlIHRvIHBheSBmZWUFEW1hcmdpblRvVHJhZGVyUmF3BBFuZXdQb3NpdGlvbk1hcmdpbgMFDF9hZGRUb01hcmdpbgkAZAIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwUObWFyZ2luVG9UcmFkZXIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKMKEQUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGBQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sAwMFDF9hZGRUb01hcmdpbgUOaXNQYXJ0aWFsQ2xvc2UHAAAFDm1hcmdpblRvVHJhZGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRFvcGVuTm90aW9uYWxEZWx0YQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAQEhAQUOaXNMb25nUG9zaXRpb24FEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGQCBRByZWFsaXplZENsb3NlRmVlBQtyb2xsb3ZlckZlZQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgICPUludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogaW52YWxpZCBwb3NpdGlvbiBzaXplOiAJAKQDAQUFX3NpemUCBiBtYXg6IAkApAMBBRJhYnNPbGRQb3NpdGlvblNpemUBE2dldFRlcm1pbmFsQW1tU3RhdGUABA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAlAoCCQEGcXRBc3RSAAkBBmJzQXN0UgAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQNJHQwMzcwODAzNzI1OQkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwQVY3VycmVudE5ldE1hcmtldFZhbHVlCAUNJHQwMzcwODAzNzI1OQJfMQQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDM3MDgwMzcyNTkCXzIEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDM3MDgwMzcyNTkCXzMJAJQKAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlARNnZXRRdW90ZUFzc2V0V2VpZ2h0BBBiYXNlQXNzZXRSZXNlcnZlEXRvdGFsUG9zaXRpb25TaXplEXF1b3RlQXNzZXRSZXNlcnZlC3RhcmdldFByaWNlBAFiCQC2AgEFEGJhc2VBc3NldFJlc2VydmUEAnN6CQC2AgEFEXRvdGFsUG9zaXRpb25TaXplBAFxCQC2AgEFEXF1b3RlQXNzZXRSZXNlcnZlBAFwCQC2AgEFC3RhcmdldFByaWNlBAFrCQEFYm11bGQCBQFxBQFiBARuZXdCCQC3AgIFAWIFAnN6BARuZXdRCQEFYmRpdmQCBQFrBQRuZXdCBAF6CQEFYmRpdmQCBQRuZXdRBQRuZXdCBAZyZXN1bHQJAQViZGl2ZAIFAXAFAXoJAKADAQUGcmVzdWx0ARRnZXRTeW5jVGVybWluYWxQcmljZQMOX3Rlcm1pbmFsUHJpY2UHX3F0QXN0UgdfYnNBc3RSBA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAQJbmV3UXRBc3RXCQEEZGl2ZAIJAQRtdWxkAgUOX3Rlcm1pbmFsUHJpY2UFB19ic0FzdFIFB19xdEFzdFIJAJUKAwUJbmV3UXRBc3RXBQxERUNJTUFMX1VOSVQAAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBAluZXdRdEFzdFcJARNnZXRRdW90ZUFzc2V0V2VpZ2h0BAUHX2JzQXN0UgUNX3Bvc2l0aW9uU2l6ZQUHX3F0QXN0UgUOX3Rlcm1pbmFsUHJpY2UECW5ld0JzQXN0VwUMREVDSU1BTF9VTklUBA1tYXJnaW5Ub1ZhdWx0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFB19xdEFzdFIFCW5ld1F0QXN0VwUHX2JzQXN0UgUJbmV3QnNBc3RXBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJUKAwUJbmV3UXRBc3RXBQluZXdCc0FzdFcFDW1hcmdpblRvVmF1bHQBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAECXNwb3RQcmljZQkBDGdldFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQlzcG90UHJpY2UFD3VuZGVybHlpbmdQcmljZQMDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAGCQEOaXNNYXJrZXRDbG9zZWQACQCVCgMAAAAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkDCQAAAgkBC2Z1bmRpbmdNb2RlAAUSRlVORElOR19BU1lNTUVUUklDBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAJUKAwUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24AAAQZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAQYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAEDnByZW1pdW1Ub1ZhdWx0CQBlAgUZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgUYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUOcHJlbWl1bVRvVmF1bHQEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZAwkAAAIJAQtmdW5kaW5nTW9kZQAFEkZVTkRJTkdfQVNZTU1FVFJJQwQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAAAEGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAEGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAQOcHJlbWl1bVRvVmF1bHQJAGUCBRhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24FGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAJUKAwUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUOcHJlbWl1bVRvVmF1bHQBDmdldEFkanVzdGVkRmVlAgtfYXJ0aWZhY3RJZBBfYmFzZUZlZURpc2NvdW50BApiYXNlRmVlUmF3CQEDZmVlAAQHYmFzZUZlZQkBBG11bGQCBQpiYXNlRmVlUmF3BRBfYmFzZUZlZURpc2NvdW50BA0kdDA0MTgzNDQyMzI5AwkBAiE9AgULX2FydGlmYWN0SWQCAAQMYXJ0aWZhY3RLaW5kCQEEc3RyQQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdG9rZW5fdHlwZQULX2FydGlmYWN0SWQDCQAAAgUMYXJ0aWZhY3RLaW5kBRhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUECXJlZHVjdGlvbgkBBGludEECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Rva2VuX3BhcmFtBQtfYXJ0aWZhY3RJZAQLYWRqdXN0ZWRGZWUJAQRtdWxkAgUHYmFzZUZlZQUJcmVkdWN0aW9uCQCUCgIFC2FkanVzdGVkRmVlBgkAAgECGUludmFsaWQgYXR0YWNoZWQgYXJ0aWZhY3QJAJQKAgUHYmFzZUZlZQcEC2FkanVzdGVkRmVlCAUNJHQwNDE4MzQ0MjMyOQJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDE4MzQ0MjMyOQJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0ARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEEGRvR2V0RmVlRGlzY291bnQJAPwHBAkBDG1pbmVyQWRkcmVzcwACEmNvbXB1dGVGZWVEaXNjb3VudAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBRBkb0dldEZlZURpc2NvdW50BRBkb0dldEZlZURpc2NvdW50BAtmZWVEaXNjb3VudAQHJG1hdGNoMAUQZG9HZXRGZWVEaXNjb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiFJbnZhbGlkIGNvbXB1dGVGZWVEaXNjb3VudCByZXN1bHQEDSR0MDQyNjc1NDI3NDkJAQ5nZXRBZGp1c3RlZEZlZQIFC19hcnRpZmFjdElkBQtmZWVEaXNjb3VudAQLYWRqdXN0ZWRGZWUIBQ0kdDA0MjY3NTQyNzQ5Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA0MjY3NTQyNzQ5Al8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDWdldEFydGlmYWN0SWQBAWkECmFydGlmYWN0SWQDCQBmAgkAkAMBCAUBaQhwYXltZW50cwABCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhJJbnZhbGlkIGFydGlmYWN0SWQCAAUKYXJ0aWZhY3RJZAENZGlzdHJpYnV0ZUZlZQEKX2ZlZUFtb3VudAQMZmVlVG9TdGFrZXJzCQEEbXVsZAIFCl9mZWVBbW91bnQJARNmZWVUb1N0YWtlcnNQZXJjZW50AAQKZmVlVG9WYXVsdAkAZQIFCl9mZWVBbW91bnQFDGZlZVRvU3Rha2VycwkAlAoCBQxmZWVUb1N0YWtlcnMFCmZlZVRvVmF1bHQBDnVwZGF0ZVNldHRpbmdzDhBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlDF9mdW5kaW5nTW9kZQkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19pbml0TWFyZ2luUmF0aW8FEF9pbml0TWFyZ2luUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwUEX21tcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19saXF1aWRhdGlvbkZlZVJhdGlvBRRfbGlxdWlkYXRpb25GZWVSYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19mdW5kaW5nUGVyaW9kBQ5fZnVuZGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFa19mZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZUltcGFjdAUPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VTcHJlYWQFD19tYXhQcmljZVNwcmVhZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19tYXhPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4T3JhY2xlRGVsYXkFFF9mZWVUb1N0YWtlcnNQZXJjZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3JvbGxvdmVyRmVlBQxfcm9sbG92ZXJGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfZnVuZGluZ01vZGUFDF9mdW5kaW5nTW9kZQUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAw5faXNOZXdQb3NpdGlvbgdfdHJhZGVyCl9kaXJlY3Rpb24EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uAwUOX2lzTmV3UG9zaXRpb24ED2N1cnJlbnRTZXF1ZW5jZQkBDGxhc3RTZXF1ZW5jZQAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQULcG9zaXRpb25LZXkJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa19zZXF1ZW5jZQkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABBQNuaWwFA25pbAERdXBkYXRlUG9zaXRpb25GZWUEDl9pc05ld1Bvc2l0aW9uB190cmFkZXIKX2RpcmVjdGlvbgRfZmVlBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgMFDl9pc05ld1Bvc2l0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQtwb3NpdGlvbktleQUEX2ZlZQUDbmlsBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBgdfdHJhZGVyBV9zaXplB19tYXJnaW4NX29wZW5Ob3Rpb25hbCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbGF0ZXN0VGltZXN0YW1wBAlkaXJlY3Rpb24JAQxnZXREaXJlY3Rpb24BBQVfc2l6ZQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCWRpcmVjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFC3Bvc2l0aW9uS2V5BQVfc2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgULcG9zaXRpb25LZXkFB19tYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFC3Bvc2l0aW9uS2V5BQ1fb3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQtwb3NpdGlvbktleQUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAULcG9zaXRpb25LZXkFEF9sYXRlc3RUaW1lc3RhbXAFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBEHVwZGF0ZUFtbVdlaWdodHMCB19xdEFzdFcHX2JzQXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19xdW90ZUFzc2V0V2VpZ2h0BQdfcXRBc3RXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2Jhc2VBc3NldFdlaWdodAUHX2JzQXN0VwUDbmlsAQl1cGRhdGVBbW0IB19xdEFzdFIHX2JzQXN0UhdfdG90YWxQb3NpdGlvblNpemVBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZRZfdG90YWxMb25nT3Blbk5vdGlvbmFsF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwADCQECIT0CCQBlAgUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGEludmFsaWQgQU1NIHN0YXRlIGRhdGE6IAkApAMBBRZfdG90YWxMb25nUG9zaXRpb25TaXplAgQgKyAgCQCkAwEFF190b3RhbFNob3J0UG9zaXRpb25TaXplAgQgIT0gCQCkAwEFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX29wZW5JbnRlcmVzdExvbmcFFl90b3RhbExvbmdPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfb3BlbkludGVyZXN0U2hvcnQFF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBQNuaWwBDmRlbGV0ZVBvc2l0aW9uAgdfdHJhZGVyCl9kaXJlY3Rpb24EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFC3Bvc2l0aW9uS2V5BQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwBDmRvQnVybkFydGlmYWN0Ag1fYnVybkFydGlmYWN0AWkDBQ1fYnVybkFydGlmYWN0CQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEEludmFsaWQgYXJ0aWZhY3QAAQUDbmlsBQNuaWwXAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhRJbnZhbGlkIHBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIWSW52YWxpZCB1bnBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQHBQNuaWwBaQEMc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhtJbnZhbGlkIHNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BgUDbmlsAWkBDnVuc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIHVuc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkHBQNuaWwBaQEMYWRkTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAhtJbnZhbGlkIGFkZExpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQUYmFzZUFzc2V0QW1vdW50VG9BZGQJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZAIFB19ic0FzdFIFFGJhc2VBc3NldEFtb3VudFRvQWRkBA0kdDA1MTAwNDUxMTU1CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA1MTAwNDUxMTU1Al8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA1MTAwNDUxMTU1Al8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNTEwMDQ1MTE1NQJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgURX3F1b3RlQXNzZXRBbW91bnQAAAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBA2FicwEJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZQIFB19ic0FzdFIFF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlBA0kdDA1MjI1MTUyNDAyCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA1MjI1MTUyNDAyAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA1MjI1MTUyNDAyAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNTIyNTE1MjQwMgJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jaGFuZ2VTZXR0aW5ncw4QX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGUDAwMDAwMDAwMDAwMDAwMDAwkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAGcCAAAFEF9tYXhPcGVuTm90aW9uYWwGCQBnAgAABRRfZmVlVG9TdGFrZXJzUGVyY2VudAYJAGYCBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUMREVDSU1BTF9VTklUBgkAZwIAAAUPX21heE9yYWNsZURlbGF5BgkAZwIAAAUMX3JvbGxvdmVyRmVlBgMJAQIhPQIFDF9mdW5kaW5nTW9kZQURRlVORElOR19TWU1NRVRSSUMJAQIhPQIFDF9mdW5kaW5nTW9kZQUSRlVORElOR19BU1lNTUVUUklDBwYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIGNoYW5nZVNldHRpbmdzIHBhcmFtcwkBDnVwZGF0ZVNldHRpbmdzDgUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkFDF9yb2xsb3ZlckZlZQUMX2Z1bmRpbmdNb2RlAWkBCmluaXRpYWxpemUTB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQ9fYmFzZU9yYWNsZURhdGEQX3F1b3RlT3JhY2xlRGF0YQxfY29vcmRpbmF0b3IMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGUDAwMDAwMDAwMDAwMDAwMDAwMDCQBnAgAABQdfcXRBc3RSBgkAZwIAAAUHX2JzQXN0UgYJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGcCAAAFD19tYXhPcmFjbGVEZWxheQYJAGcCAAAFDF9yb2xsb3ZlckZlZQYDCQECIT0CBQxfZnVuZGluZ01vZGUFEUZVTkRJTkdfU1lNTUVUUklDCQECIT0CBQxfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwcGCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIdSW52YWxpZCBpbml0aWFsaXplIHBhcmFtZXRlcnMJAM4IAgkAzggCCQDOCAIJAM4IAgkBCXVwZGF0ZUFtbQgFB19xdEFzdFIFB19ic0FzdFIAAAAAAAAAAAAAAAAJAQ51cGRhdGVTZXR0aW5ncw4FEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5BQxfcm9sbG92ZXJGZWUFDF9mdW5kaW5nTW9kZQkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgkBDWxhc3RUaW1lc3RhbXAABQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa19iYXNlT3JhY2xlBQ9fYmFzZU9yYWNsZURhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19xdW90ZU9yYWNsZQUQX3F1b3RlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQxfY29vcmRpbmF0b3IFA25pbAFpARBpbmNyZWFzZVBvc2l0aW9uBApfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMDAwkBAiE9AgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAQIhPQIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAcGCQBnAgAABQpfcmF3QW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBBQxpc1F1b3RlQXNzZXQGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBBnBhdXNlZAAGCQEJY2xvc2VPbmx5AAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAiNJbnZhbGlkIGluY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNTg0NzI1ODYyMQkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIJAQ1nZXRBcnRpZmFjdElkAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA1ODQ3MjU4NjIxAl8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA1ODQ3MjU4NjIxAl8yBAdfYW1vdW50CQEEZGl2ZAIFCl9yYXdBbW91bnQJAGQCCQEEbXVsZAIFC2FkanVzdGVkRmVlBQlfbGV2ZXJhZ2UFDERFQ0lNQUxfVU5JVAQTZGlzdHJpYnV0ZUZlZUFtb3VudAkAZQIFCl9yYXdBbW91bnQFB19hbW91bnQEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAhVhY2NlcHRQYXltZW50V2l0aExpbmsJAMwIAgUHX3RyYWRlcgkAzAgCBQhfcmVmTGluawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNTkxMTc1OTI5NwkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNTkxMTc1OTI5NwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA1OTExNzU5Mjk3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU5MTE3NTkyOTcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNTkxMTc1OTI5NwJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA1OTExNzU5Mjk3Al81BA1pc05ld1Bvc2l0aW9uCQAAAgUPb2xkUG9zaXRpb25TaXplAAAED2lzU2FtZURpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQAAAgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBA5leHBhbmRFeGlzdGluZwMJAQEhAQUNaXNOZXdQb3NpdGlvbgUPaXNTYW1lRGlyZWN0aW9uBwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQNJHQwNTk1ODY2MjcxOQMDBQ1pc05ld1Bvc2l0aW9uBgUOZXhwYW5kRXhpc3RpbmcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDYwMDk1NjAyNjgJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQIBQ0kdDA2MDA5NTYwMjY4Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjAwOTU2MDI2OAJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjAwOTU2MDI2OAJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDYwMDk1NjAyNjgCXzQDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQCAyA8IAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWFtb3VudEJhc2VBc3NldEJvdWdodAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIJAGQCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAABBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAGQCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBQxvcGVuTm90aW9uYWwAAAQNJHQwNjA4MTQ2MTA4OQkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAUHX2Ftb3VudAQMcmVtYWluTWFyZ2luCAUNJHQwNjA4MTQ2MTA4OQJfMQQCeDEIBQ0kdDA2MDgxNDYxMDg5Al8yBAJ4MggFDSR0MDYwODE0NjEwODkCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjA4MTQ2MTA4OQJfNAMJAQEhAQkBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAAIBAhVPdmVyIG1heCBzcHJlYWQgbGltaXQDCQEBIQEJAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAAIBAhZPdmVyIG1heCBvcGVuIG5vdGlvbmFsCQCgCg4FD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUJAQ1sYXN0VGltZXN0YW1wAAUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBkAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBkAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAkAZAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAABRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyBQtyb2xsb3ZlckZlZQQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNjI0MDc2MjUzNQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwkApQgBCAUBaQZjYWxsZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDYyNDA3NjI1MzUCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA2MjQwNzYyNTM1Al8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTk1ODY2MjcxOQJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1OTU4NjYyNzE5Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU5NTg2NjI3MTkCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTk1ODY2MjcxOQJfNAQUbmV3UG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA1OTU4NjYyNzE5Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTU4NjYyNzE5Al82BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTk1ODY2MjcxOQJfNwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDU5NTg2NjI3MTkCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA1OTU4NjYyNzE5Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDU5NTg2NjI3MTkDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1OTU4NjYyNzE5A18xMQQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1OTU4NjYyNzE5A18xMgQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTk1ODY2MjcxOQNfMTMEC3JvbGxvdmVyRmVlCAUNJHQwNTk1ODY2MjcxOQNfMTQEDSR0MDYyNzI1NjI3OTYJAQ1kaXN0cmlidXRlRmVlAQkAZAIFCWZlZUFtb3VudAULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDYyNzI1NjI3OTYCXzEECmZlZVRvVmF1bHQIBQ0kdDA2MjcyNTYyNzk2Al8yBAVzdGFrZQMJAGcCBQdfYW1vdW50BQtyb2xsb3ZlckZlZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAkAZQIFB19hbW91bnQFC3JvbGxvdmVyRmVlBQNuaWwJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIJAGUCBQtyb2xsb3ZlckZlZQUHX2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgUUbmV3UG9zaXRpb25UaW1lc3RhbXAJAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAwUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBEXVwZGF0ZVBvc2l0aW9uRmVlBAUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgUKX2RpcmVjdGlvbgULYWRqdXN0ZWRGZWUJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlCQEOZG9CdXJuQXJ0aWZhY3QCBQxidXJuQXJ0aWZhY3QFAWkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRkTWFyZ2luAQpfZGlyZWN0aW9uBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDCQEBIQEFDGlzUXVvdGVBc3NldAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24CCQClCAEIBQFpBmNhbGxlcgUKX2RpcmVjdGlvbgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECHEludmFsaWQgYWRkTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDY1MDQzNjUyMjMJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24ED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY1MDQzNjUyMjMCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjUwNDM2NTIyMwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NTA0MzY1MjIzAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY1MDQzNjUyMjMCXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjUwNDM2NTIyMwJfNQQFc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEC3JvbGxvdmVyRmVlCQEPY2FsY1JvbGxvdmVyRmVlAgURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uVGltZXN0YW1wBBZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzAwkAZgIFC3JvbGxvdmVyRmVlAAAEDSR0MDY1NTA4NjU1NjcJAQ1kaXN0cmlidXRlRmVlAQULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDY1NTA4NjU1NjcCXzEECmZlZVRvVmF1bHQIBQ0kdDA2NTUwODY1NTY3Al8yBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQxmZWVUb1N0YWtlcnMFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQpmZWVUb1ZhdWx0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUJAGQCCQBlAgURb2xkUG9zaXRpb25NYXJnaW4FC3JvbGxvdmVyRmVlBQdfYW1vdW50BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUb2xkUG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgIHX2Ftb3VudApfZGlyZWN0aW9uBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjY5NzE2NzE1MQkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjY5NzE2NzE1MQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2Njk3MTY3MTUxAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY2OTcxNjcxNTECXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjY5NzE2NzE1MQJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2Njk3MTY3MTUxAl81BA0kdDA2NzE1NzY3NDA2CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQEBLQEFB19hbW91bnQEDHJlbWFpbk1hcmdpbggFDSR0MDY3MTU3Njc0MDYCXzEEB2JhZERlYnQIBQ0kdDA2NzE1NzY3NDA2Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDY3MTU3Njc0MDYCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjcxNTc2NzQwNgJfNAMJAQIhPQIFB2JhZERlYnQAAAkAAgECHUludmFsaWQgcmVtb3ZlZCBtYXJnaW4gYW1vdW50BAttYXJnaW5SYXRpbwkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JAQ9pbml0TWFyZ2luUmF0aW8ABgkAAgEJAKwCAgkArAICCQCsAgICGVRvbyBtdWNoIG1hcmdpbiByZW1vdmVkOiAJAKQDAQULbWFyZ2luUmF0aW8CAyA8IAkApAMBCQEPaW5pdE1hcmdpblJhdGlvAAQNJHQwNjc3OTI2Nzg1MQkBDWRpc3RyaWJ1dGVGZWUBBQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjc3OTI2Nzg1MQJfMQQKZmVlVG9WYXVsdAgFDSR0MDY3NzkyNjc4NTECXzIEFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMDCQBmAgULcm9sbG92ZXJGZWUAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFCmZlZVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgkAZAIFB19hbW91bnQFDGZlZVRvU3Rha2VycwUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4FF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD29sZFBvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uBAVfc2l6ZQpfZGlyZWN0aW9uFF9taW5RdW90ZUFzc2V0QW1vdW50DF9hZGRUb01hcmdpbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA5fdHJhZGVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB190cmFkZXICDkludmFsaWQgY2FsbGVyBAtwb3NpdGlvbkZlZQkBDmdldFBvc2l0aW9uRmVlAQUHX3RyYWRlcgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24GCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgJfNQQNJHQwNzAwNjc3MDY3MAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbggFB190cmFkZXIFCl9kaXJlY3Rpb24FBV9zaXplBQtwb3NpdGlvbkZlZQUUX21pblF1b3RlQXNzZXRBbW91bnQFDF9hZGRUb01hcmdpbgYGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3MDA2NzcwNjcwAl8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDcwMDY3NzA2NzACXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzAwNjc3MDY3MAJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MDA2NzcwNjcwAl80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MDA2NzcwNjcwAl81BAtyZWFsaXplZFBubAgFDSR0MDcwMDY3NzA2NzACXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzAwNjc3MDY3MAJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwMDY3NzA2NzACXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwMDY3NzA2NzACXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MDA2NzcwNjcwA18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDcwMDY3NzA2NzADXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDcwMDY3NzA2NzADXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MDA2NzcwNjcwA18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MDA2NzcwNjcwA18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzAwNjc3MDY3MANfMTUEC3JlYWxpemVkRmVlCAUNJHQwNzAwNjc3MDY3MANfMTYDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAipJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogYmFkIGRlYnQDCQBnAgUUb2xkUG9zaXRpb25UaW1lc3RhbXAJAQ1sYXN0VGltZXN0YW1wAAkAAgECU0ludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzOiB3YWl0IGF0IGxlYXN0IDEgYmxvY2sgYmVmb3JlIGNsb3NpbmcgdGhlIHBvc2l0aW9uBA5pc1BhcnRpYWxDbG9zZQkBAiE9AgUPbmV3UG9zaXRpb25TaXplAAAEDndpdGhkcmF3QW1vdW50CQBkAgUObWFyZ2luVG9UcmFkZXIFC3JlYWxpemVkRmVlBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDWFtbU5ld0JhbGFuY2UDCQBmAgAABQphbW1CYWxhbmNlAAAFCmFtbUJhbGFuY2UEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFDndpdGhkcmF3QW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAINYWNjZXB0UGF5bWVudAkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAULcmVhbGl6ZWRGZWUFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBA0kdDA3MTY0MjcxNzE1CQENZGlzdHJpYnV0ZUZlZQEJAGUCBQtyZWFsaXplZEZlZQULcmVmZXJyZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDcxNjQyNzE3MTUCXzEECmZlZVRvVmF1bHQIBQ0kdDA3MTY0MjcxNzE1Al8yBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFC3JlYWxpemVkRmVlBQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCAwUOaXNQYXJ0aWFsQ2xvc2UJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQEOZGVsZXRlUG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyAwkAZgIFDm1hcmdpblRvVHJhZGVyAAAJAQh3aXRoZHJhdwIFDl90cmFkZXJBZGRyZXNzBQ5tYXJnaW5Ub1RyYWRlcgUDbmlsCQENdXBkYXRlQmFsYW5jZQEFDWFtbU5ld0JhbGFuY2UJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUCB190cmFkZXIKX2RpcmVjdGlvbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UBBZsaXF1aWRhdGlvbk1hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24DBQdfdHJhZGVyBQpfZGlyZWN0aW9uBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFFmxpcXVpZGF0aW9uTWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECE1VuYWJsZSB0byBsaXF1aWRhdGUEFGlzUGFydGlhbExpcXVpZGF0aW9uAwMJAGYCBQ9zcG90TWFyZ2luUmF0aW8JARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkAZgIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAAAAcJAGYCBQxERUNJTUFMX1VOSVQJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAHBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uAl8xBA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDc0MjEzNzQ1MzYDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgQPbGlxdWlkYXRpb25TaXplCQEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBBBsaXF1aWRhdGlvblJhdGlvCQEEZGl2ZAIJAQNhYnMBBQ9saXF1aWRhdGlvblNpemUFD3Bvc2l0aW9uU2l6ZUFicwkAlAoCBRBsaXF1aWRhdGlvblJhdGlvCQEDYWJzAQUPbGlxdWlkYXRpb25TaXplCQCUCgIAAAUPcG9zaXRpb25TaXplQWJzBBBsaXF1aWRhdGlvblJhdGlvCAUNJHQwNzQyMTM3NDUzNgJfMQQPbGlxdWlkYXRpb25TaXplCAUNJHQwNzQyMTM3NDUzNgJfMgQNJHQwNzQ1NDI3NTE5OAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbggFB190cmFkZXIFCl9kaXJlY3Rpb24DBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgUPbGlxdWlkYXRpb25TaXplBQ9wb3NpdGlvblNpemVBYnMJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAAABgcGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3NDU0Mjc1MTk4Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDc0NTQyNzUxOTgCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzQ1NDI3NTE5OAJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3NDU0Mjc1MTk4Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3NDU0Mjc1MTk4Al81BAtyZWFsaXplZFBubAgFDSR0MDc0NTQyNzUxOTgCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzQ1NDI3NTE5OAJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDc0NTQyNzUxOTgCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDc0NTQyNzUxOTgCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3NDU0Mjc1MTk4A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDc0NTQyNzUxOTgDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDc0NTQyNzUxOTgDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3NDU0Mjc1MTk4A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3NDU0Mjc1MTk4A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzQ1NDI3NTE5OANfMTUEEmxpcXVpZGF0aW9uUGVuYWx0eQgFDSR0MDc0NTQyNzUxOTgDXzE2BA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA1uZXdBbW1CYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAtsb2NrQmFkRGVidAMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQBkAgUPcG9zaXRpb25CYWREZWJ0BRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgMFFGlzUGFydGlhbExpcXVpZGF0aW9uCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAMDAwkAZgIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBDWxhc3RUaW1lc3RhbXAABgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQkBDWxhc3RUaW1lc3RhbXAAAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDc3MzIzNzc0MDEJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3NzMyMzc3NDAxAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNzczMjM3NzQwMQJfMgQOcHJlbWl1bVRvVmF1bHQIBQ0kdDA3NzMyMzc3NDAxAl8zBBNkb1BheUZ1bmRpbmdUb1ZhdWx0AwkAZgIFDnByZW1pdW1Ub1ZhdWx0AAAEE2RvUGF5RnVuZGluZ1RvVmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFDnByZW1pdW1Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBRNkb1BheUZ1bmRpbmdUb1ZhdWx0BRNkb1BheUZ1bmRpbmdUb1ZhdWx0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRNkb1BheUZ1bmRpbmdUb1ZhdWx0BRNkb1BheUZ1bmRpbmdUb1ZhdWx0CQENdXBkYXRlRnVuZGluZwUJAGQCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGQCCQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRNsb25nUHJlbWl1bUZyYWN0aW9uCQBkAgkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUABAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEDSR0MDc4NDU0Nzg4MjAJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFB19xdEFzdFIFB19ic0FzdFIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA3ODQ1NDc4ODIwAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA3ODQ1NDc4ODIwAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNzg0NTQ3ODgyMAJfMwQQbWFyZ2luVG9WYXVsdEFkagMDCQBmAgAABQ1tYXJnaW5Ub1ZhdWx0CQBmAgkBA2FicwEFDW1hcmdpblRvVmF1bHQJAQhjYmFsYW5jZQAHCQEBLQEJAQhjYmFsYW5jZQAFDW1hcmdpblRvVmF1bHQEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBRBtYXJnaW5Ub1ZhdWx0QWRqAAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBRBtYXJnaW5Ub1ZhdWx0QWRqBQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFEG1hcmdpblRvVmF1bHRBZGoJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGVuc3VyZUNhbGxlZE9uY2UAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIiSW52YWxpZCBzYXZlQ3VycmVudFR4SWQgcGFyYW1ldGVycwQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUIa19sYXN0VHgCAAMJAQIhPQIFBmxhc3RUeAUEdHhJZAkAzAgCCQELU3RyaW5nRW50cnkCBQhrX2xhc3RUeAUEdHhJZAUDbmlsCQACAQIpQ2FuIG5vdCBjYWxsIHZBTU0gbWV0aG9kcyB0d2ljZSBpbiBvbmUgdHgBaQEPbWlncmF0ZVBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIDAwkBCWlzRGVmaW5lZAEFD3Bvc2l0aW9uU2l6ZU9wdAkBCWlzRGVmaW5lZAEJAKYIAQUHX3RyYWRlcgcEBXBTaXplCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHcE1hcmdpbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgQJcE5vdGlvbmFsCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQdfdHJhZGVyBAlwRnJhY3Rpb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIECnBUaW1lc3RhbXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQdfdHJhZGVyCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQEcEZlZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQdfdHJhZGVyCQEDZmVlAAQJcFNlcXVlbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFB190cmFkZXIECnBEaXJlY3Rpb24JAQxnZXREaXJlY3Rpb24BBQVwU2l6ZQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCnBEaXJlY3Rpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQdfdHJhZGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkFBXBTaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQtwb3NpdGlvbktleQUHcE1hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAULcG9zaXRpb25LZXkFCXBOb3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgULcG9zaXRpb25LZXkFCXBGcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQtwb3NpdGlvbktleQUKcFRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQULcG9zaXRpb25LZXkFBHBGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQULcG9zaXRpb25LZXkFCXBTZXF1ZW5jZQUDbmlsCQACAQkArAICAhdOb3RoaW5nIHRvIG1pZ3JhdGUgZm9yIAUHX3RyYWRlcgFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQCB190cmFkZXIKX2RpcmVjdGlvbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA0kdDA4MjUxMTgyNjQ3CQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBAxwb3NpdGlvblNpemUIBQ0kdDA4MjUxMTgyNjQ3Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDgyNTExODI2NDcCXzIEA3BvbggFDSR0MDgyNTExODI2NDcCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwODI1MTE4MjY0NwJfNAQRcG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA4MjUxMTgyNjQ3Al81BA0kdDA4MjY1MDgyNzYzCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDA4MjY1MDgyNzYzAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwODI2NTA4Mjc2MwJfMgQNJHQwODI3NjY4Mjk5MAkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBRFwb3NpdGlvblRpbWVzdGFtcAUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwODI3NjY4Mjk5MAJfMQQHYmFkRGVidAgFDSR0MDgyNzY2ODI5OTACXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwODI3NjY4Mjk5MAJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA4Mjc2NjgyOTkwAl80CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAkBAXMBBQtyb2xsb3ZlckZlZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARV2aWV3X2dldFBlZ0FkanVzdENvc3QBBl9wcmljZQQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAZyZXN1bHQJARRnZXRTeW5jVGVybWluYWxQcmljZQMFBl9wcmljZQUHX3F0QXN0UgUHX2JzQXN0UgkAAgEJAKQDAQgFBnJlc3VsdAJfMwFpARh2aWV3X2dldFRlcm1pbmFsQW1tUHJpY2UABA0kdDA4MzcyNTgzODA2CQETZ2V0VGVybWluYWxBbW1TdGF0ZQAEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDA4MzcyNTgzODA2Al8xBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDA4MzcyNTgzODA2Al8yBAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFcACQEEbXVsZAIFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0VwAJAAIBCQCkAwEFBXByaWNlAWkBD3ZpZXdfZ2V0RnVuZGluZwAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA0kdDA4NDM2NTg0NDQzCQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwODQzNjU4NDQ0MwJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDg0MzY1ODQ0NDMCXzIEDnByZW1pdW1Ub1ZhdWx0CAUNJHQwODQzNjU4NDQ0MwJfMwQLbG9uZ0Z1bmRpbmcJAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlBAxzaG9ydEZ1bmRpbmcJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcJAQFzAQkBDGdldFNwb3RQcmljZQAJAQFzAQkBDmdldE9yYWNsZVByaWNlAAkBAXMBBQ5wcmVtaXVtVG9WYXVsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBjb21wdXRlU3BvdFByaWNlAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAZyZXN1bHQJAQxnZXRTcG90UHJpY2UACQCUCgIFA25pbAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEBnJlc3VsdAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIFC19hcnRpZmFjdElkCQCUCgIFA25pbAUGcmVzdWx0AQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tledZdJEA=", "height": 2503026, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4VDWR2E6JuVrUMUvp93fRBCNKVbqW5tuSjiPHcqqL7xm Next: 8VYpagVbojkzGYWLSQ1TMwGnxXaxi3Cr5G8yJznGhPi2 Diff:
OldNewDifferences
1919
2020 let i = "k_positionSequence"
2121
22-let j = "k_positionAsset"
22+let j = "k_positionFee"
2323
24-let k = "k_positionFee"
24+let k = "k_positionTimestamp"
2525
26-let l = "k_positionTimestamp"
26+let l = "k_initialized"
2727
28-let m = "k_initialized"
28+let m = "k_paused"
2929
30-let n = "k_paused"
30+let n = "k_closeOnly"
3131
32-let o = "k_closeOnly"
32+let o = "k_fee"
3333
34-let p = "k_fee"
34+let p = "k_rollover_fee"
3535
36-let q = "k_rollover_fee"
36+let q = "k_fundingPeriod"
3737
38-let r = "k_fundingPeriod"
38+let r = "k_initMarginRatio"
3939
40-let s = "k_initMarginRatio"
40+let s = "k_mmr"
4141
42-let t = "k_mmr"
42+let t = "k_liquidationFeeRatio"
4343
44-let u = "k_liquidationFeeRatio"
44+let u = "k_partLiquidationRatio"
4545
46-let v = "k_partLiquidationRatio"
46+let v = "k_spreadLimit"
4747
48-let w = "k_spreadLimit"
48+let w = "k_maxPriceImpact"
4949
50-let x = "k_maxPriceImpact"
50+let x = "k_maxPriceSpread"
5151
52-let y = "k_maxPriceSpread"
52+let y = "k_maxOpenNotional"
5353
54-let z = "k_maxOpenNotional"
54+let z = "k_feeToStakersPercent"
5555
56-let A = "k_feeToStakersPercent"
56+let A = "k_maxOracleDelay"
5757
58-let B = "k_maxOracleDelay"
58+let B = "k_fundingMode"
5959
60-let C = "k_lastDataStr"
60+let C = "k_latestLongPremiumFraction"
6161
62-let D = "k_lastMinuteId"
62+let D = "k_latestShortPremiumFraction"
6363
64-let E = "k_twapDataLastCumulativePrice"
64+let E = "k_nextFundingBlockMinTimestamp"
6565
66-let F = "k_twapDataLastPrice"
66+let F = "k_longFundingRate"
6767
68-let G = "k_twapDataPreviousMinuteId"
68+let G = "k_shortFundingRate"
6969
70-let H = "k_latestLongPremiumFraction"
70+let H = "k_qtAstR"
7171
72-let I = "k_latestShortPremiumFraction"
72+let I = "k_bsAstR"
7373
74-let J = "k_nextFundingBlockMinTimestamp"
74+let J = "k_qtAstW"
7575
76-let K = "k_longFundingRate"
76+let K = "k_bsAstW"
7777
78-let L = "k_shortFundingRate"
78+let L = "k_totalPositionSize"
7979
80-let M = "k_qtAstR"
80+let M = "k_totalLongPositionSize"
8181
82-let N = "k_bsAstR"
82+let N = "k_totalShortPositionSize"
8383
84-let O = "k_qtAstW"
84+let O = "k_openInterestNotional"
8585
86-let P = "k_bsAstW"
86+let P = "k_openInterestShort"
8787
88-let Q = "k_totalPositionSize"
88+let Q = "k_openInterestLong"
8989
90-let R = "k_totalLongPositionSize"
90+let R = "k_lastTx"
9191
92-let S = "k_totalShortPositionSize"
92+let S = "k_coordinatorAddress"
9393
94-let T = "k_openInterestNotional"
94+let T = "k_vault_address"
9595
96-let U = "k_openInterestShort"
96+let U = "k_admin_address"
9797
98-let V = "k_openInterestLong"
98+let V = "k_quote_asset"
9999
100-let W = "k_lastTx"
100+let W = "k_staking_address"
101101
102-let X = "k_coordinatorAddress"
102+let X = "k_miner_address"
103103
104-let Y = "k_vault_address"
104+let Y = "k_orders_address"
105105
106-let Z = "k_admin_address"
106+let Z = "k_referral_address"
107107
108-let aa = "k_quote_asset"
108+let aa = "k_nft_manager_address"
109109
110-let ab = "k_quote_staking"
111-
112-let ac = "k_staking_address"
113-
114-let ad = "k_miner_address"
115-
116-let ae = "k_orders_address"
117-
118-let af = "k_referral_address"
119-
120-let ag = "k_exchange_address"
121-
122-let ah = "k_nft_manager_address"
123-
124-func ai (aj,ak) = ((aj + "_") + ak)
110+func ab (ac,ad) = ((ac + "_") + ad)
125111
126112
127-func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
113+func ae () = valueOrErrorMessage(addressFromString(getStringValue(this, S)), "Coordinator not set")
128114
129115
130-func am () = addressFromString(getStringValue(al(), Z))
116+func af () = addressFromString(getStringValue(ae(), U))
131117
132118
133-func an () = fromBase58String(getStringValue(al(), aa))
119+func ag () = fromBase58String(getStringValue(ae(), V))
134120
135121
136-func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
122+func ah () = valueOrErrorMessage(addressFromString(getStringValue(ae(), W)), "Staking not set")
137123
138124
139-func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
125+func ai () = valueOrErrorMessage(addressFromString(getStringValue(ae(), T)), "Vault not set")
140126
141127
142-func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
128+func aj () = valueOrErrorMessage(addressFromString(getStringValue(ae(), X)), "Miner not set")
143129
144130
145-func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
131+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Y)), "Orders not set")
146132
147133
148-func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
134+func al () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Z)), "Referral not set")
149135
150136
151-func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
137+func am () = valueOrErrorMessage(addressFromString(getStringValue(ae(), aa)), "NFT Manager not set")
152138
153139
154-func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
140+let an = "k_token_param"
141+
142+let ao = "k_token_type"
143+
144+let ap = "fee_reduction"
145+
146+let aq = 1
147+
148+let ar = 2
149+
150+let as = 1000
151+
152+let at = 6
153+
154+let au = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
155+
156+let av = (525600 * au)
157+
158+let aw = (86400 * au)
159+
160+let ax = 1
161+
162+let ay = 2
163+
164+let az = 1
165+
166+let aA = 2
167+
168+func aB (aC) = (toString(aC) + ",")
155169
156170
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) + ",")
171+func aD (aC,aE) = fraction(aC, au, aE, HALFEVEN)
184172
185173
186-func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
174+func aF (aC,aE) = fraction(aC, aE, au, HALFEVEN)
187175
188176
189-func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
177+func aG (aC,aE) = fraction(aC, toBigInt(au), aE, HALFEVEN)
190178
191179
192-func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
180+func aH (aC,aE) = fraction(aC, aE, toBigInt(au), HALFEVEN)
193181
194182
195-func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
183+func aI (aC) = if ((aC > 0))
184+ then aC
185+ else -(aC)
196186
197187
198-func aP (aJ) = if ((aJ > 0))
199- then aJ
200- else -(aJ)
188+func aJ (aC,aE) = if ((aC >= aE))
189+ then aC
190+ else aE
201191
202192
203-func aQ (aJ,aL) = if ((aJ >= aL))
204- then aJ
205- else aL
193+func aK (aL) = valueOrErrorMessage(getInteger(this, aL), ("no value for " + aL))
206194
207195
208-func aR (aS) = if ((size(aS) == 0))
209- then ""
210- else makeString(aS, ",")
196+func aM (aL,aN) = valueOrElse(getInteger(this, aL), aN)
211197
212198
213-func aT (aU) = if ((aU == ""))
214- then nil
215- else split(aU, ",")
216-
217-
218-func aV (aS,aW,aX) = if ((size(aS) > aW))
219- then (removeByIndex(aS, 0) :+ aX)
220- else (aS :+ aX)
221-
222-
223-func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
224-
225-
226-func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
227-
228-
229-func bc (ak,aj) = {
230- let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231- bd
199+func aO (ad,ac) = {
200+ let aP = valueOrErrorMessage(getString(ad, ac), ("No value for key " + ac))
201+ aP
232202 }
233203
234204
235-func be (ak,aj) = {
236- let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237- bd
205+func aQ (ad,ac) = {
206+ let aP = valueOrErrorMessage(getInteger(ad, ac), ("No value for key " + ac))
207+ aP
238208 }
239209
240210
241-func bf () = aY(c)
211+func aR () = aK(c)
242212
243213
244-func bg () = aY(p)
214+func aS () = aK(o)
245215
246216
247-func bh () = aY(q)
217+func aT () = aK(p)
248218
249219
250-func bi () = aY(s)
220+func aU () = aK(r)
251221
252222
253-func bj () = aY(M)
223+func aV () = aK(H)
254224
255225
256-func bk () = aY(N)
226+func aW () = aK(I)
257227
258228
259-func bl () = ba(O, aD)
229+func aX () = aM(J, au)
260230
261231
262-func bm () = ba(P, aD)
232+func aY () = aM(K, au)
263233
264234
265-func bn () = aY(Q)
235+func aZ () = aK(L)
266236
267237
268-func bo () = aY(T)
238+func ba () = aK(O)
269239
270240
271-func bp () = aY(U)
241+func bb () = aK(P)
272242
273243
274-func bq () = aY(V)
244+func bc () = aK(Q)
275245
276246
277-func br () = aY(J)
247+func bd () = aK(E)
278248
279249
280-func bs () = aY(r)
250+func be () = aK(q)
281251
282252
283-func bt () = (bs() * aD)
253+func bf () = (be() * au)
284254
285255
286-func bu () = (bs() * aB)
256+func bg () = (be() * as)
287257
288258
289-func bv () = aY(t)
259+func bh () = aK(s)
290260
291261
292-func bw () = aY(u)
262+func bi () = aK(t)
293263
294264
295-func bx () = aY(v)
265+func bj () = aK(u)
296266
297267
298-func by () = aY(w)
268+func bk () = aK(v)
299269
300270
301-func bz () = aY(x)
271+func bl () = aK(w)
302272
303273
304-func bA () = aY(y)
274+func bm () = aK(x)
305275
306276
307-func bB () = aY(z)
277+func bn () = aK(y)
308278
309279
310-func bC () = aY(H)
280+func bo () = aK(C)
311281
312282
313-func bD () = aY(I)
283+func bp () = aK(D)
314284
315285
316-func bE () = aY(S)
286+func bq () = aK(N)
317287
318288
319-func bF () = aY(R)
289+func br () = aK(M)
320290
321291
322-func bG () = ba(d, 0)
292+func bs () = aM(d, 0)
323293
324294
325-func bH () = aY(A)
295+func bt () = aK(z)
326296
327297
328-func bI () = aY(B)
298+func bu () = aK(A)
329299
330300
331-func bJ () = lastBlock.timestamp
301+func bv () = aM(B, az)
332302
333303
334-func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
304+func bw () = lastBlock.timestamp
335305
336306
337-func bM (bN,bO,bP) = {
338- let bQ = (bN - bO)
339- if (if (bP)
340- then (0 > bQ)
307+func bx (by) = valueOrElse(getString(ak(), "k_sender"), toString(by.caller))
308+
309+
310+func bz (bA,bB,bC) = {
311+ let bD = (bA - bB)
312+ if (if (bC)
313+ then (0 > bD)
341314 else false)
342- then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343- else if (if (!(bP))
344- then (bQ >= 0)
315+ then throw(((("Invalid margin: " + toString(bA)) + " < ") + toString(bB)))
316+ else if (if (!(bC))
317+ then (bD >= 0)
345318 else false)
346- then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
319+ then throw(((("Invalid margin: " + toString(bA)) + " > ") + toString(bB)))
347320 else true
348321 }
349322
350323
351-func bR (bS) = if ((bS == 0))
324+func bE (bF) = if ((bF == 0))
352325 then throw("Should not be called with _positionSize == 0")
353- else if ((bS > 0))
354- then bC()
355- else bD()
326+ else if ((bF > 0))
327+ then bo()
328+ else bp()
356329
357330
358-func bT (bU) = {
359- let bV = getInteger(this, ai(e, bU))
360- let bW = bV
361- if ($isInstanceOf(bW, "Int"))
331+func bG (bH,bI) = {
332+ let bJ = ((bH + "_") + toString(bI))
333+ let bK = getInteger(this, ab(e, bJ))
334+ let bL = bK
335+ if ($isInstanceOf(bL, "Int"))
362336 then {
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)))
337+ let bM = bL
338+ $Tuple5(bM, getIntegerValue(this, ab(f, bJ)), getIntegerValue(this, ab(g, bJ)), getIntegerValue(this, ab(h, bJ)), getIntegerValue(this, ab(k, bJ)))
365339 }
366340 else $Tuple5(0, 0, 0, 0, 0)
367341 }
368342
369343
370-func bY (bU) = {
371- let bZ = getString(this, ai(j, bU))
372- let bW = bZ
373- if ($isInstanceOf(bW, "String"))
344+func bN (bF) = if ((0 > bF))
345+ then ar
346+ else aq
347+
348+
349+func bO (bH) = {
350+ let bP = getInteger(this, ab(j, bH))
351+ let bL = bP
352+ if ($isInstanceOf(bL, "Int"))
374353 then {
375- let ca = bW
376- ca
354+ let bQ = bL
355+ bQ
377356 }
378- else toBase58String(an())
357+ else aS()
379358 }
380359
381360
382-func cb (bU) = {
383- let cc = getInteger(this, ai(k, bU))
384- let bW = cc
385- if ($isInstanceOf(bW, "Int"))
386- then {
387- let cd = bW
388- cd
389- }
390- else bg()
391- }
392-
393-
394-func ce (bU) = if ((bT(bU)._1 == 0))
361+func bR (bH,bI) = if ((bG(bH, bI)._1 == 0))
395362 then throw("No open position")
396363 else true
397364
398365
399-func cf (cg) = {
400- let ch = getString(this, cg)
401- if (if (isDefined(ch))
402- then (value(ch) != "")
366+func bS (bT) = {
367+ let bU = getString(this, bT)
368+ if (if (isDefined(bU))
369+ then (value(bU) != "")
403370 else false)
404371 then {
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)
372+ let bV = split(value(bU), ",")
373+ let bW = valueOrErrorMessage(addressFromString(bV[0]), ("Invalid oracle address in: " + value(bU)))
374+ let bX = bV[1]
375+ let bY = bV[2]
376+ let bZ = bV[3]
377+ $Tuple4(bW, bX, bY, bZ)
411378 }
412379 else unit
413380 }
414381
415382
416-func cn () = valueOrElse(getBoolean(this, m), false)
383+func ca () = valueOrElse(getBoolean(this, l), false)
417384
418385
419-func co () = valueOrElse(getBoolean(this, n), false)
386+func cb () = valueOrElse(getBoolean(this, m), false)
420387
421388
422-func cp () = valueOrElse(getBoolean(this, o), false)
389+func cc () = valueOrElse(getBoolean(this, n), false)
423390
424391
425-func cq (cr,cs,ct) = if (cr)
392+func cd (ce,cf,cg) = if (ce)
426393 then {
427- let cu = (bk() - ct)
428- if ((0 >= cu))
394+ let ch = (aW() - cg)
395+ if ((0 >= ch))
429396 then throw("Tx lead to base asset reserve <= 0, revert")
430- else $Tuple3((bj() + cs), cu, (bn() + ct))
397+ else $Tuple3((aV() + cf), ch, (aZ() + cg))
431398 }
432399 else {
433- let cv = (bj() - cs)
434- if ((0 >= cv))
400+ let ci = (aV() - cf)
401+ if ((0 >= ci))
435402 then throw("Tx lead to base quote reserve <= 0, revert")
436- else $Tuple3(cv, (bk() + ct), (bn() - ct))
403+ else $Tuple3(ci, (aW() + cg), (aZ() - cg))
437404 }
438405
439406
440-func cw (cx,cy) = {
441- let cz = toBigInt(cx)
442- let cA = toBigInt(cy)
443- aO(cz, cA)
407+func cj (ck,cl) = {
408+ let cm = toBigInt(ck)
409+ let cn = toBigInt(cl)
410+ aH(cm, cn)
444411 }
445412
446413
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)
414+func co (ce,cf) = {
415+ let ck = aV()
416+ let cl = aW()
417+ let cp = aX()
418+ let cq = aY()
419+ let cr = aD(cf, cp)
420+ let aL = cj(ck, cl)
421+ let cs = if (ce)
422+ then (ck + cr)
423+ else (ck - cr)
424+ let ct = toInt(aG(aL, toBigInt(cs)))
425+ let cu = aI((ct - cl))
426+ let cv = if (ce)
427+ then cu
428+ else -(cu)
429+ let cw = cd(ce, cr, cu)
430+ let cx = cw._1
431+ let cy = cw._2
432+ let cz = cw._3
433+ let cA = aD(aF(ck, cp), aF(cl, cq))
434+ let cB = aD(cf, cu)
435+ let cC = aI((cA - cB))
436+ let cD = (au - aD(cA, (cA + cC)))
437+ let cE = bl()
438+ if ((cD > cE))
439+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(ck)) + " before base asset: ") + toString(cl)) + " quote asset amount to exchange: ") + toString(cf)) + " price before: ") + toString(cA)) + " marketPrice: ") + toString(cB)))
440+ else $Tuple4(cv, cx, cy, cz)
474441 }
475442
476443
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
444+func cF (cG,cH) = {
445+ let cI = ((((bw() - cH) / 1000) / 60) * au)
446+ let cJ = aD(aF(aF(cG, cI), aT()), av)
447+ cJ
481448 }
482449
483450
484-func cX (cY,cT,cZ,cU,da) = {
485- let db = if ((cY != 0))
451+func cK (cL,cG,cM,cH,cN) = {
452+ let cO = if ((cL != 0))
486453 then {
487- let dc = bR(cY)
488- aM((dc - cZ), cY)
454+ let cP = bE(cL)
455+ aF((cP - cM), cL)
489456 }
490457 else 0
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)
458+ let cJ = cF(cG, cH)
459+ let cQ = (((cN - cJ) - cO) + cG)
460+ let cR = if ((0 > cQ))
461+ then $Tuple2(0, aI(cQ))
462+ else $Tuple2(aI(cQ), 0)
463+ let cS = cR._1
464+ let cT = cR._2
465+ $Tuple4(cS, cT, cO, cJ)
499466 }
500467
501468
502-func dh (cr,ct,di,dj,dk,dl,dm) = {
503- let cN = aK(aM(dj, dk), aM(dl, dm))
504- if ((ct == 0))
469+func cU (ce,cg,cV,cW,cX,cY,cZ) = {
470+ let cA = aD(aF(cW, cX), aF(cY, cZ))
471+ if ((cg == 0))
505472 then throw("Invalid base asset amount")
506473 else {
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
474+ let aL = cj(cW, cY)
475+ let da = if (ce)
476+ then (cY + cg)
477+ else (cY - cg)
478+ let db = toInt(aG(aL, toBigInt(da)))
479+ let dc = aI((db - cW))
480+ let dd = aF(dc, cX)
481+ let cE = bl()
482+ let de = cd(!(ce), dc, cg)
483+ let cx = de._1
484+ let cy = de._2
485+ let cz = de._3
486+ let cB = aD(dd, cg)
487+ let cC = aI((cA - cB))
488+ let cD = (au - aD(cA, (cA + cC)))
489+ if (if ((cD > cE))
490+ then cV
524491 else false)
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)
492+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(cW)) + " before base asset: ") + toString(cY)) + " base asset amount to exchange: ") + toString(cg)) + " price before: ") + toString(cA)) + " market price: ") + toString(cB)))
493+ else $Tuple7(dd, cx, cy, cz, (br() - (if (ce)
494+ then aI(cg)
495+ else 0)), (bq() - (if (!(ce))
496+ then aI(cg)
497+ else 0)), cD)
531498 }
532499 }
533500
534501
535-func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
502+func df (ce,cg,cV) = cU(ce, cg, cV, aV(), aX(), aW(), aY())
536503
537504
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 != ""))
505+func dg (dh,bX,bY) = {
506+ let di = valueOrErrorMessage(getInteger(dh, bX), ((("Can not get oracle price. Oracle: " + toString(dh)) + " key: ") + bX))
507+ if ((bY != ""))
541508 then {
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
509+ let dj = lastBlock.height
510+ let dk = valueOrErrorMessage(getInteger(dh, bY), ((("Can not get oracle block. Oracle: " + toString(dh)) + " key: ") + bY))
511+ if (((dj - dk) > bu()))
512+ then throw(((("Oracle stale data. Last oracle block: " + toString(dk)) + " current block: ") + toString(dj)))
513+ else di
547514 }
548- else dv
515+ else di
549516 }
550517
551518
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))
519+func dl () = {
520+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
521+ let dn = dg(dm._1, dm._2, dm._3)
522+ let do = bS(b)
523+ let dp = if (isDefined(do))
557524 then {
558- let dD = value(dB)
559- dt(dD._1, dD._2, dD._3)
525+ let dq = value(do)
526+ dg(dq._1, dq._2, dq._3)
560527 }
561- else aD
562- aK(dA, dC)
528+ else au
529+ aD(dn, dp)
563530 }
564531
565532
566-func dE () = {
567- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568- let du = dz._1
569- let cm = dz._4
570- if ((cm != ""))
533+func dr () = {
534+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
535+ let dh = dm._1
536+ let bZ = dm._4
537+ if ((bZ != ""))
571538 then {
572- let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573- !(dF)
539+ let ds = valueOrErrorMessage(getBoolean(dh, bZ), ((("Can not get oracle is open/closed. Oracle: " + toString(dh)) + " key: ") + bZ))
540+ !(ds)
574541 }
575542 else false
576543 }
577544
578545
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
546+func dt (du,cW,cY,cp,cq) = {
547+ let dv = aD(aF(cW, cp), aF(cY, cq))
548+ let dw = aD((du + dv), (2 * au))
549+ let dt = aD(aI((du - dv)), dw)
550+ dt
584551 }
585552
586553
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)
554+func dx (cW,cY) = {
555+ let dy = dl()
556+ let cp = aX()
557+ let cq = aY()
558+ let dz = dt(dy, aV(), aW(), cp, cq)
559+ let dA = dt(dy, cW, cY, cp, cq)
560+ if (if ((dA > bm()))
561+ then (dA > dz)
595562 else false)
596- then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
563+ then throw(((("Price spread " + toString(dA)) + " > max price spread ") + toString(bm())))
597564 else true
598565 }
599566
600567
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)))
568+func dB (dC,dD) = {
569+ let dE = bn()
570+ if ((dC > dE))
571+ then throw(((("Long open notional " + toString(dC)) + " > max open notional ") + toString(dE)))
572+ else if ((dD > dE))
573+ then throw(((("Short open notional " + toString(dD)) + " > max open notional ") + toString(dE)))
607574 else true
608575 }
609576
610577
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))
578+func dF () = {
579+ let cW = aV()
580+ let cY = aW()
581+ let cp = aX()
582+ let cq = aY()
583+ aD(aF(cW, cp), aF(cY, cq))
617584 }
618585
619586
620-func dT () = {
621- let dL = dy()
622- let dU = dS()
623- (aK(aP((dL - dU)), dL) > by())
587+func dG () = {
588+ let dy = dl()
589+ let dH = dF()
590+ (aD(aI((dy - dH)), dy) > bk())
624591 }
625592
626593
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))
594+func dI (bF,dJ,cW,cX,cY,cZ) = {
595+ let dK = aI(bF)
596+ let dL = (0 > bF)
597+ let dM = if ((dJ == ax))
631598 then {
632- let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633- ea
599+ let dN = cU(!(dL), dK, false, cW, cX, cY, cZ)._1
600+ dN
634601 }
635- else aM(dX, dy())
636- dZ
602+ else aF(dK, dl())
603+ dM
637604 }
638605
639606
640-func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
607+func dO (bF,dP,cW,cX,cY,cZ,dJ) = if ((bF == 0))
641608 then throw("Invalid position size")
642609 else {
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)
610+ let dL = (0 > bF)
611+ let dM = dI(bF, dJ, cW, cX, cY, cZ)
612+ let dQ = if (dL)
613+ then (dP - dM)
614+ else (dM - dP)
615+ $Tuple2(dM, dQ)
649616 }
650617
651618
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)
619+func dR (bH,bI,dJ) = {
620+ let dS = bG(bH, bI)
621+ let bM = dS._1
622+ let dT = dS._2
623+ let dU = dS._3
624+ let dV = dS._4
625+ dO(bM, dU, aV(), aX(), aW(), aY(), dJ)
659626 }
660627
661628
662-func ej (ek,el,em) = aK((ek - el), em)
629+func dW (dX,dY,dZ) = aD((dX - dY), dZ)
663630
664631
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)
632+func ea (bH,bI,dJ) = {
633+ let eb = bG(bH, bI)
634+ let bM = eb._1
635+ let dT = eb._2
636+ let ec = eb._3
637+ let ed = eb._4
638+ let ee = eb._5
639+ let ef = dR(bH, bI, dJ)
640+ let dM = ef._1
641+ let dQ = ef._2
642+ let eg = cK(bM, dT, ed, ee, dQ)
643+ let cS = eg._1
644+ let cT = eg._2
645+ dW(cS, cT, dM)
679646 }
680647
681648
682-func eu (bU) = en(bU, aG)
649+func eh (bH,bI) = ea(bH, bI, ax)
683650
684651
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())
652+func ei (bH,bF) = {
653+ let ej = aJ(bj(), (au - aD(eh(bH, bN(bF)), bh())))
654+ let ek = aF(aI(bF), ej)
655+ let el = df((bF > 0), ek, false)
656+ let em = el._1
657+ let cD = el._7
658+ if ((bl() > cD))
659+ then ek
660+ else aF(aI(bF), bj())
694661 }
695662
696663
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)
664+func en (bH,bI,eo,ep,eq,er,cV,es) = {
665+ let et = bG(bH, bI)
666+ let eu = et._1
667+ let ev = et._2
668+ let ew = et._3
669+ let ex = et._4
670+ let ey = et._5
671+ let ez = (eu > 0)
672+ let eA = aI(eu)
673+ if (if ((eA >= eo))
674+ then (eo > 0)
708675 else false)
709676 then {
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)
677+ let eB = (eA > eo)
678+ let eC = df((eu > 0), eo, cV)
679+ let eD = eC._1
680+ let cs = eC._2
681+ let ct = eC._3
682+ let eE = eC._4
683+ let eF = if ((eu > 0))
684+ then -(eo)
685+ else eo
686+ let eG = dR(bH, bI, ax)
687+ let eH = eG._1
688+ let dQ = eG._2
689+ let eI = aD(aI(eF), eA)
690+ let eJ = aF(dQ, eI)
691+ let eK = cK(eu, ev, ex, ey, dQ)
692+ let eL = eK._1
693+ let eM = eK._2
694+ let eN = eK._3
695+ let cJ = eK._4
696+ let eO = cK(eu, ev, ex, ey, eJ)._2
697+ let eP = aF(aF(eH, eI), ep)
698+ let eQ = (dQ - eJ)
699+ let eR = if ((eu > 0))
700+ then ((eH - eD) - eQ)
701+ else ((eQ + eH) - eD)
702+ let eS = (eu + eF)
703+ let eT = if ((eS == 0))
704+ then $Tuple2(0, 0)
705+ else $Tuple2(aI(eR), bE(eS))
720706 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))
737- then $Tuple2(0, 0)
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)
707+ let eV = eT._2
708+ let eW = (ew - eU)
709+ let eX = ea(bH, bI, ax)
710+ let eY = if ((eu > 0))
711+ then (aF((eU + eQ), eX) - eQ)
712+ else (aF((eU - eQ), eX) - eQ)
713+ let eZ = ((eL - (eY + eQ)) - eP)
714+ let fa = if ((0 > eZ))
715+ then if (es)
749716 then 0
750717 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)
718+ else eZ
719+ let fb = if (er)
720+ then (eY + fa)
721+ else eY
722+ if (if ((eq != 0))
723+ then (eq > eD)
757724 else false)
758- then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759- else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760- then eO
725+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(eq)))
726+ else $Tuple17(eS, fb, eU, eV, eO, eJ, if (if (er)
727+ then eB
761728 else false)
762729 then 0
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)
730+ else fa, cs, ct, eE, (ba() - eW), (br() - (if (ez)
731+ then aI(eF)
732+ else 0)), (bq() - (if (!(ez))
733+ then aI(eF)
734+ else 0)), (bc() - (if (ez)
735+ then eW
736+ else 0)), (bb() - (if (!(ez))
737+ then eW
738+ else 0)), (eP + cJ), eD)
772739 }
773- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
740+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eo)) + " max: ") + toString(eA)))
774741 }
775742
776743
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
785-
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])
793-
794- func fE (fC,fD) = if ((fD >= fz))
795- then fC
796- else throw("List size exceeds 20")
797-
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)
799- }
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)
811- }
812-
813-
814-func fN () = {
815- let bS = bn()
816- if ((bS == 0))
817- then $Tuple2(bj(), bk())
744+func fc () = {
745+ let bF = aZ()
746+ if ((bF == 0))
747+ then $Tuple2(aV(), aW())
818748 else {
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)
749+ let fd = (bF > 0)
750+ let fe = df(fd, aI(bF), false)
751+ let ff = fe._1
752+ let fg = fe._2
753+ let fh = fe._3
754+ $Tuple2(fg, fh)
825755 }
826756 }
827757
828758
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)
759+func fi (fj,aZ,fk,fl) = {
760+ let fm = toBigInt(fj)
761+ let fn = toBigInt(aZ)
762+ let fo = toBigInt(fk)
763+ let fp = toBigInt(fl)
764+ let aL = aH(fo, fm)
765+ let fq = (fm + fn)
766+ let fr = aG(aL, fq)
767+ let fs = aG(fr, fq)
768+ let ft = aG(fp, fs)
769+ toInt(ft)
840770 }
841771
842772
843-func gf (gg,cx,cy) = {
844- let bS = bn()
845- if ((bS == 0))
773+func fu (fv,ck,cl) = {
774+ let bF = aZ()
775+ if ((bF == 0))
846776 then {
847- let gh = aK(aM(gg, cy), cx)
848- $Tuple3(gh, aD, 0)
777+ let fw = aD(aF(fv, cl), ck)
778+ $Tuple3(fw, au, 0)
849779 }
850780 else {
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)
781+ let fd = (bF > 0)
782+ let ff = df(fd, aI(bF), false)._1
783+ let fw = fi(cl, bF, ck, fv)
784+ let fx = au
785+ let fy = dO(bF, ff, ck, fw, cl, fx, ax)._2
786+ $Tuple3(fw, fx, fy)
857787 }
858788 }
859789
860790
861-func gk () = {
862- let gl = dy()
863- let gm = fp()
864- let gn = (gm - gl)
865- if (if (if ((bE() == 0))
791+func fz () = {
792+ let fA = dl()
793+ let fB = dF()
794+ let fC = (fB - fA)
795+ if (if (if ((bq() == 0))
866796 then true
867- else (bF() == 0))
797+ else (br() == 0))
868798 then true
869- else dE())
870- then $Tuple2(0, 0)
871- else if ((0 > gn))
799+ else dr())
800+ then $Tuple3(0, 0, 0)
801+ else if ((0 > fC))
872802 then {
873- let go = aK(aM(gn, bt()), aF)
874- let gp = aK(aM(go, bE()), bF())
875- $Tuple2(go, gp)
803+ let fD = aD(aF(fC, bf()), aw)
804+ if ((bv() == az))
805+ then {
806+ let fE = aD(aF(fD, bq()), br())
807+ $Tuple3(fD, fE, 0)
808+ }
809+ else {
810+ let fF = aI(aF(fD, bq()))
811+ let fG = aI(aF(fD, br()))
812+ let fH = (fF - fG)
813+ $Tuple3(fD, fD, fH)
814+ }
876815 }
877816 else {
878- let gp = aK(aM(gn, bt()), aF)
879- let go = aK(aM(gp, bF()), bE())
880- $Tuple2(go, gp)
817+ let fE = aD(aF(fC, bf()), aw)
818+ if ((bv() == az))
819+ then {
820+ let fD = aD(aF(fE, br()), bq())
821+ $Tuple3(fD, fE, 0)
822+ }
823+ else {
824+ let fG = aI(aF(fE, br()))
825+ let fF = aI(aF(fE, bq()))
826+ let fH = (fG - fF)
827+ $Tuple3(fE, fE, fH)
828+ }
881829 }
882830 }
883831
884832
885-func gq (gr,gs) = {
886- let gt = bg()
887- let gu = aM(gt, gs)
888- let gv = if ((gr != ""))
833+func fI (fJ,fK) = {
834+ let fL = aS()
835+ let fM = aF(fL, fK)
836+ let fN = if ((fJ != ""))
889837 then {
890- let gw = bc(au(), ai(aw, gr))
891- if ((gw == ax))
838+ let fO = aO(am(), ab(ao, fJ))
839+ if ((fO == ap))
892840 then {
893- let gx = be(au(), ai(av, gr))
894- let gy = aM(gu, gx)
895- $Tuple2(gy, true)
841+ let fP = aQ(am(), ab(an, fJ))
842+ let fQ = aF(fM, fP)
843+ $Tuple2(fQ, true)
896844 }
897845 else throw("Invalid attached artifact")
898846 }
899- else $Tuple2(gu, false)
900- let gy = gv._1
901- let gz = gv._2
902- $Tuple2(gy, gz)
847+ else $Tuple2(fM, false)
848+ let fQ = fN._1
849+ let fR = fN._2
850+ $Tuple2(fQ, fR)
903851 }
904852
905853
906-func gA (bU,gB) = {
907- let eH = bT(bU)._1
908- if ((eH == 0))
909- then true
910- else (bY(bU) == gB)
911- }
912-
913-
914-func gC (bU,gB) = (bY(bU) == gB)
915-
916-
917-func gD (bU,gr) = {
918- let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919- if ((gE == gE))
854+func fS (bH,fJ) = {
855+ let fT = invoke(aj(), "computeFeeDiscount", [bH], nil)
856+ if ((fT == fT))
920857 then {
921- let gF = {
922- let bW = gE
923- if ($isInstanceOf(bW, "Int"))
858+ let fU = {
859+ let bL = fT
860+ if ($isInstanceOf(bL, "Int"))
924861 then {
925- let gG = bW
926- gG
862+ let fV = bL
863+ fV
927864 }
928865 else throw("Invalid computeFeeDiscount result")
929866 }
930- let gH = gq(gr, gF)
931- let gy = gH._1
932- let gz = gH._2
933- $Tuple2(gy, gz)
867+ let fW = fI(fJ, fU)
868+ let fQ = fW._1
869+ let fR = fW._2
870+ $Tuple2(fQ, fR)
934871 }
935872 else throw("Strict value is not equal to itself.")
936873 }
937874
938875
939-func gI (bL) = {
940- let gJ = if ((size(bL.payments) > 1))
941- then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
876+func fX (by) = {
877+ let fY = if ((size(by.payments) > 1))
878+ then toBase58String(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifactId"))
942879 else ""
943- gJ
880+ fY
944881 }
945882
946883
947-func gK (gL) = {
948- let gM = aM(gL, bH())
949- let gN = (gL - gM)
950- $Tuple2(gM, gN)
884+func fZ (ga) = {
885+ let gb = aF(ga, bt())
886+ let gc = (ga - gb)
887+ $Tuple2(gb, gc)
951888 }
952889
953890
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)]
891+func gd (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = [IntegerEntry(r, ge), IntegerEntry(s, gf), IntegerEntry(t, gg), IntegerEntry(q, gh), IntegerEntry(o, ep), IntegerEntry(v, gi), IntegerEntry(w, gj), IntegerEntry(u, gk), IntegerEntry(x, gl), IntegerEntry(y, dE), IntegerEntry(z, gm), IntegerEntry(A, gm), IntegerEntry(p, go), IntegerEntry(B, gp)]
955892
956893
957-func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
894+func gq (gr,gs,gt,gu,gv) = [IntegerEntry(E, gr), IntegerEntry(C, gs), IntegerEntry(D, gt), IntegerEntry(F, gu), IntegerEntry(G, gv)]
958895
959896
960-func hg (hh,ak) = if (hh)
961- then {
962- let hi = bG()
963-[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
964- }
897+func gw (gx,bH,bI) = {
898+ let bJ = ((bH + "_") + toString(bI))
899+ if (gx)
900+ then {
901+ let gy = bs()
902+[IntegerEntry(ab(i, bJ), (gy + 1)), IntegerEntry(d, (gy + 1))]
903+ }
904+ else nil
905+ }
906+
907+
908+func gz (gx,bH,bI,ep) = {
909+ let bJ = ((bH + "_") + toString(bI))
910+ if (gx)
911+ then [IntegerEntry(ab(j, bJ), ep)]
912+ else nil
913+ }
914+
915+
916+func gA (bH,eo,gB,gC,cP,gD) = {
917+ let fd = bN(eo)
918+ let bJ = ((bH + "_") + toString(fd))
919+[IntegerEntry(ab(e, bJ), eo), IntegerEntry(ab(f, bJ), gB), IntegerEntry(ab(g, bJ), gC), IntegerEntry(ab(h, bJ), cP), IntegerEntry(ab(k, bJ), gD)]
920+ }
921+
922+
923+func gE (ck,cl) = [IntegerEntry(H, ck), IntegerEntry(I, cl)]
924+
925+
926+func gF (cp,cq) = [IntegerEntry(J, cp), IntegerEntry(K, cq)]
927+
928+
929+func gG (ck,cl,gH,gI,gJ,gK,gL,gM) = {
930+ let cp = aX()
931+ let cq = aY()
932+ if (((gJ - gK) != gH))
933+ then throw(((((("Invalid AMM state data: " + toString(gJ)) + " + ") + toString(gK)) + " != ") + toString(gH)))
934+ else (gE(ck, cl) ++ [IntegerEntry(L, gH), IntegerEntry(O, gI), IntegerEntry(M, gJ), IntegerEntry(N, gK), IntegerEntry(Q, gL), IntegerEntry(P, gM)])
935+ }
936+
937+
938+func gN (bH,bI) = {
939+ let bJ = ((bH + "_") + toString(bI))
940+[DeleteEntry(ab(e, bJ)), DeleteEntry(ab(f, bJ)), DeleteEntry(ab(g, bJ)), DeleteEntry(ab(h, bJ)), DeleteEntry(ab(j, bJ)), DeleteEntry(ab(k, bJ))]
941+ }
942+
943+
944+func gO (ad,gP) = {
945+ let gQ = assetBalance(this, ag())
946+ if ((gP > gQ))
947+ then throw(((("Unable to withdraw " + toString(gP)) + " from contract balance ") + toString(gQ)))
948+ else [ScriptTransfer(ad, gP, ag())]
949+ }
950+
951+
952+func gR (by) = if ((0 > by))
953+ then throw("Balance")
954+ else [IntegerEntry(c, by)]
955+
956+
957+func gS (by) = [ScriptTransfer(ah(), by, ag())]
958+
959+
960+func gT (gU,by) = if (gU)
961+ then [Burn(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifact"), 1)]
965962 else nil
966963
967964
968-func hj (hh,ak,eC) = if (hh)
969- then [IntegerEntry(ai(k, ak), eC)]
970- else nil
965+@Callable(by)
966+func pause () = if ((by.caller != af()))
967+ then throw("Invalid pause params")
968+ else [BooleanEntry(m, true)]
971969
972970
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)]
971+
972+@Callable(by)
973+func unpause () = if ((by.caller != af()))
974+ then throw("Invalid unpause params")
975+ else [BooleanEntry(m, false)]
974976
975977
976-func ho (hp) = {
977- let fq = ((bJ() / 1000) / 60)
978- let hq = valueOrElse(getInteger(this, D), 0)
979- if ((hq > fq))
980- then throw("TWAP out-of-order")
981- else {
982- let fG = if ((hq == 0))
983- then fq
984- else hq
985- if ((fq > hq))
986- then {
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))]
992- }
993- else {
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)]
999- }
1000- }
1001- }
1002978
1003-
1004-func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
1005-
1006-
1007-func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
1008-
1009-
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))))
1016- }
1017-
1018-
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))]
1020-
1021-
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())]
1027- }
1028-
1029-
1030-func hI (bL) = if ((0 > bL))
1031- then throw("Balance")
1032- else [IntegerEntry(c, bL)]
1033-
1034-
1035-func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
1036-
1037-
1038-func hK (hL,bL) = if (hL)
1039- then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
1040- else nil
1041-
1042-
1043-@Callable(bL)
1044-func pause () = if ((bL.caller != am()))
1045- then throw("Invalid pause params")
979+@Callable(by)
980+func setCloseOnly () = if ((by.caller != af()))
981+ then throw("Invalid setCloseOnly params")
1046982 else [BooleanEntry(n, true)]
1047983
1048984
1049985
1050-@Callable(bL)
1051-func unpause () = if ((bL.caller != am()))
1052- then throw("Invalid unpause params")
986+@Callable(by)
987+func unsetCloseOnly () = if ((by.caller != af()))
988+ then throw("Invalid unsetCloseOnly params")
1053989 else [BooleanEntry(n, false)]
1054990
1055991
1056992
1057-@Callable(bL)
1058-func setCloseOnly () = if ((bL.caller != am()))
1059- then throw("Invalid setCloseOnly params")
1060- else [BooleanEntry(o, true)]
1061-
1062-
1063-
1064-@Callable(bL)
1065-func unsetCloseOnly () = if ((bL.caller != am()))
1066- then throw("Invalid unsetCloseOnly params")
1067- else [BooleanEntry(o, false)]
1068-
1069-
1070-
1071-@Callable(bL)
1072-func addLiquidity (cs) = if (if ((bL.caller != am()))
993+@Callable(by)
994+func addLiquidity (cf) = if (if ((by.caller != af()))
1073995 then true
1074- else (0 >= cs))
996+ else (0 >= cf))
1075997 then throw("Invalid addLiquidity params")
1076998 else {
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))
999+ let ck = aV()
1000+ let cl = aW()
1001+ let cp = aX()
1002+ let cq = aY()
1003+ let gV = aD(aF(ck, cp), aF(cl, cq))
1004+ let gW = (ck + cf)
1005+ let gX = (aD(aF(gW, cp), gV) - cl)
1006+ let gY = (cl + gX)
1007+ let gZ = fu(dl(), gW, gY)
1008+ let ha = gZ._1
1009+ let hb = gZ._2
1010+ let fy = gZ._3
1011+ let hc = if ((fy != 0))
10901012 then {
1091- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092- if ((hT == hT))
1013+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1014+ if ((hc == hc))
10931015 then nil
10941016 else throw("Strict value is not equal to itself.")
10951017 }
10961018 else nil
1097- if ((hT == hT))
1098- then (hv(hN, hP) ++ hw(hR, hS))
1019+ if ((hc == hc))
1020+ then (gE(gW, gY) ++ gF(ha, hb))
10991021 else throw("Strict value is not equal to itself.")
11001022 }
11011023
11021024
11031025
1104-@Callable(bL)
1105-func removeLiquidity (cs) = if (if ((bL.caller != am()))
1026+@Callable(by)
1027+func removeLiquidity (cf) = if (if ((by.caller != af()))
11061028 then true
1107- else (cs >= 0))
1029+ else (cf >= 0))
11081030 then throw("Invalid removeLiquidity params")
11091031 else {
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))
1032+ let ck = aV()
1033+ let cl = aW()
1034+ let cp = aX()
1035+ let cq = aY()
1036+ let gV = aD(aF(ck, cp), aF(cl, cq))
1037+ let gW = (ck - cf)
1038+ let hd = aI((aD(aF(gW, cp), gV) - cl))
1039+ let gY = (cl - hd)
1040+ let he = fu(dl(), gW, gY)
1041+ let ha = he._1
1042+ let hb = he._2
1043+ let fy = he._3
1044+ let hc = if ((fy != 0))
11231045 then {
1124- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125- if ((hT == hT))
1046+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1047+ if ((hc == hc))
11261048 then nil
11271049 else throw("Strict value is not equal to itself.")
11281050 }
11291051 else nil
1130- if ((hT == hT))
1131- then (hv(hN, hP) ++ hw(hR, hS))
1052+ if ((hc == hc))
1053+ then (gE(gW, gY) ++ gF(ha, hb))
11321054 else throw("Strict value is not equal to itself.")
11331055 }
11341056
11351057
11361058
1137-@Callable(bL)
1138-func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
1059+@Callable(by)
1060+func changeSettings (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gh))
1061+ then true
1062+ else (0 >= ge))
1063+ then true
1064+ else (0 >= gf))
1065+ then true
1066+ else (0 >= gg))
1067+ then true
1068+ else (0 >= ep))
1069+ then true
1070+ else (0 >= gi))
1071+ then true
1072+ else (0 >= gj))
1073+ then true
1074+ else (0 >= gk))
1075+ then true
1076+ else (0 >= gl))
1077+ then true
1078+ else (0 >= dE))
1079+ then true
1080+ else (0 >= gm))
1081+ then true
1082+ else (gm > au))
1083+ then true
1084+ else (0 >= gn))
1085+ then true
1086+ else (0 >= go))
1087+ then true
1088+ else if ((gp != aA))
1089+ then (gp != az)
1090+ else false)
1091+ then true
1092+ else !(ca()))
1093+ then true
1094+ else (by.caller != af()))
11391095 then throw("Invalid changeSettings params")
1140- else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
1096+ else gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)
11411097
11421098
11431099
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))
1100+@Callable(by)
1101+func initialize (ck,cl,gh,ge,gf,gg,ep,hf,hg,hh,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= ck))
11461102 then true
1147- else (0 >= cy))
1103+ else (0 >= cl))
11481104 then true
1149- else (0 >= gS))
1105+ else (0 >= gh))
11501106 then true
1151- else (0 >= gP))
1107+ else (0 >= ge))
11521108 then true
1153- else (0 >= gQ))
1109+ else (0 >= gf))
11541110 then true
1155- else (0 >= gR))
1111+ else (0 >= gg))
11561112 then true
1157- else (0 >= eC))
1113+ else (0 >= ep))
11581114 then true
1159- else (0 >= gT))
1115+ else (0 >= gi))
11601116 then true
1161- else (0 >= gU))
1117+ else (0 >= gj))
11621118 then true
1163- else (0 >= gV))
1119+ else (0 >= gk))
11641120 then true
1165- else (0 >= gW))
1121+ else (0 >= gl))
11661122 then true
1167- else (0 >= dR))
1123+ else (0 >= dE))
11681124 then true
1169- else (0 >= gX))
1125+ else (0 >= gm))
11701126 then true
1171- else (gX > aD))
1127+ else (gm > au))
11721128 then true
1173- else (0 >= gY))
1129+ else (0 >= gn))
11741130 then true
1175- else (0 >= gZ))
1131+ else (0 >= go))
11761132 then true
1177- else cn())
1133+ else if ((gp != aA))
1134+ then (gp != az)
1135+ else false)
11781136 then true
1179- else (bL.caller != this))
1137+ else ca())
1138+ then true
1139+ else (by.caller != this))
11801140 then throw("Invalid initialize parameters")
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)))])
1141+ else ((((gG(ck, cl, 0, 0, 0, 0, 0, 0) ++ gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)) ++ gq((bw() + gh), 0, 0, 0, 0)) ++ gR(0)) ++ [BooleanEntry(l, true), StringEntry(a, hf), StringEntry(b, hg), StringEntry(S, toString(addressFromStringValue(hh)))])
11821142
11831143
11841144
1185-@Callable(bL)
1186-func increasePosition (hZ,ia,ib,ic) = {
1187- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188- if ((id == id))
1145+@Callable(by)
1146+func increasePosition (bI,hi,hj,hk) = {
1147+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1148+ if ((hl == hl))
11891149 then {
1190- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191- if ((ie == ie))
1150+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1151+ if ((hm == hm))
11921152 then {
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)
1153+ let bH = bx(by)
1154+ let hn = by.payments[0].amount
1155+ let ho = by.payments[0].assetId
1156+ let hp = toBase58String(value(ho))
1157+ let hq = (ho == ag())
1158+ if (if (if (if (if (if (if (if (if ((bI != aq))
1159+ then (bI != ar)
12001160 else false)
12011161 then true
1202- else (0 >= if))
1162+ else (0 >= hn))
12031163 then true
1204- else !(cn()))
1164+ else !(ca()))
12051165 then true
1206- else !(ih))
1166+ else !(hq))
12071167 then true
1208- else !(gA(bU, ig)))
1168+ else !(bz(aD(au, hi), aU(), true)))
12091169 then true
1210- else !(bM(aK(aD, ia), bi(), true)))
1170+ else cb())
12111171 then true
1212- else co())
1172+ else cc())
12131173 then true
1214- else cp())
1215- then true
1216- else dE())
1174+ else dr())
12171175 then throw("Invalid increasePosition parameters")
12181176 else {
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))
1177+ let hr = fS(bH, fX(by))
1178+ let fQ = hr._1
1179+ let fR = hr._2
1180+ let gP = aD(hn, (aF(fQ, hi) + au))
1181+ let hs = (hn - gP)
1182+ let ht = invoke(al(), "acceptPaymentWithLink", [bH, hk], [AttachedPayment(ag(), hs)])
1183+ if ((ht == ht))
12261184 then {
1227- let il = {
1228- let bW = ik
1229- if ($isInstanceOf(bW, "Int"))
1185+ let hu = {
1186+ let bL = ht
1187+ if ($isInstanceOf(bL, "Int"))
12301188 then {
1231- let gG = bW
1232- gG
1189+ let fV = bL
1190+ fV
12331191 }
12341192 else throw("Invalid referrerFee")
12351193 }
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
1194+ let hv = (hs - hu)
1195+ let hw = bG(bH, bI)
1196+ let eu = hw._1
1197+ let ev = hw._2
1198+ let ew = hw._3
1199+ let ex = hw._4
1200+ let ey = hw._5
1201+ let hx = (eu == 0)
1202+ let hy = if ((eu > 0))
1203+ then (bI == aq)
1204+ else (bI == ar)
1205+ let hz = if (!(hx))
1206+ then hy
12491207 else false
1250- let ir = (hZ == ay)
1251- let is = if (if (io)
1208+ let hA = (bI == aq)
1209+ let hB = if (if (hx)
12521210 then true
1253- else iq)
1211+ else hz)
12541212 then {
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))
1213+ let hC = aF(gP, hi)
1214+ let hD = co(hA, hC)
1215+ let cv = hD._1
1216+ let cs = hD._2
1217+ let ct = hD._3
1218+ let eE = hD._4
1219+ if (if ((hj != 0))
1220+ then (hj > aI(cv))
12631221 else false)
1264- then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
1222+ then throw(((("Limit error: " + toString(aI(cv))) + " < ") + toString(hj)))
12651223 else {
1266- let ff = (eH + cI)
1267- let iv = (bq() + (if ((ff > 0))
1268- then it
1224+ let eS = (eu + cv)
1225+ let hE = (bc() + (if ((eS > 0))
1226+ then hC
12691227 else 0))
1270- let iw = (bp() + (if ((0 > ff))
1271- then it
1228+ let hF = (bb() + (if ((0 > eS))
1229+ then hC
12721230 else 0))
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)))
1231+ let hG = cK(eu, ev, ex, ey, gP)
1232+ let cS = hG._1
1233+ let eM = hG._2
1234+ let eN = hG._3
1235+ let cJ = hG._4
1236+ if (!(dx(cs, ct)))
12791237 then throw("Over max spread limit")
1280- else if (!(dO(iv, iw)))
1238+ else if (!(dB(hE, hF)))
12811239 then throw("Over max open notional")
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)
1240+ else $Tuple14(eS, cS, (ew + hC), bE(eS), bw(), ct, cs, eE, (ba() + hC), (br() + (if ((eS > 0))
1241+ then aI(cv)
1242+ else 0)), (bq() + (if ((0 > eS))
1243+ then aI(cv)
1244+ else 0)), hE, hF, cJ)
12871245 }
12881246 }
12891247 else {
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))
1248+ let hC = aF(gP, hi)
1249+ let hH = dR(toString(by.caller), bI, ax)
1250+ let eH = hH._1
1251+ let dQ = hH._2
1252+ if ((eH > hC))
12951253 then throw("Use decreasePosition to decrease position size")
12961254 else throw("Close position first")
12971255 }
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))
1256+ let eS = hB._1
1257+ let hI = hB._2
1258+ let eU = hB._3
1259+ let hJ = hB._4
1260+ let hK = hB._5
1261+ let ct = hB._6
1262+ let cs = hB._7
1263+ let eE = hB._8
1264+ let hL = hB._9
1265+ let hM = hB._10
1266+ let hN = hB._11
1267+ let hE = hB._12
1268+ let hF = hB._13
1269+ let cJ = hB._14
1270+ let hO = fZ((hv + cJ))
1271+ let gb = hO._1
1272+ let gc = hO._2
1273+ let hP = if ((gP >= cJ))
1274+ then invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), (gP - cJ))])
1275+ else invoke(ai(), "withdrawLocked", [(cJ - gP)], nil)
1276+ if ((hP == hP))
13191277 then {
1320- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321- if ((iH == iH))
1278+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1279+ if ((hQ == hQ))
13221280 then {
1323- let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324- if ((iI == iI))
1281+ let hR = invoke(aj(), "notifyFees", [bH, hv], nil)
1282+ if ((hR == hR))
13251283 then {
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))
1284+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1285+ if ((hS == hS))
1286+ then ((((((gA(bH, eS, hI, eU, hJ, hK) ++ gw(hx, bH, bI)) ++ gz(hx, bH, bI, fQ)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gS(gb)) ++ gR(((aR() + gP) - cJ))) ++ gT(fR, by))
13291287 else throw("Strict value is not equal to itself.")
13301288 }
13311289 else throw("Strict value is not equal to itself.")
13441302
13451303
13461304
1347-@Callable(bL)
1348-func addMargin () = {
1349- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350- if ((id == id))
1305+@Callable(by)
1306+func addMargin (bI) = {
1307+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1308+ if ((hl == hl))
13511309 then {
1352- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353- if ((ie == ie))
1310+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1311+ if ((hm == hm))
13541312 then {
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))
1313+ let bH = toString(by.caller)
1314+ let gP = by.payments[0].amount
1315+ let ho = by.payments[0].assetId
1316+ let hp = toBase58String(value(ho))
1317+ let hq = (ho == ag())
1318+ if (if (if (if (if (!(hq))
13611319 then true
1362- else !(ce(toString(bL.caller))))
1320+ else !(bR(toString(by.caller), bI)))
13631321 then true
1364- else !(gC(bU, ig)))
1322+ else !(ca()))
13651323 then true
1366- else !(cn()))
1324+ else cb())
13671325 then true
1368- else co())
1369- then true
1370- else cp())
1371- then true
1372- else dE())
1326+ else dr())
13731327 then throw("Invalid addMargin parameters")
13741328 else {
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))
1329+ let hT = bG(bH, bI)
1330+ let eu = hT._1
1331+ let ev = hT._2
1332+ let ew = hT._3
1333+ let ex = hT._4
1334+ let ey = hT._5
1335+ let hP = invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), gP)])
1336+ if ((hP == hP))
13831337 then {
1384- let cW = cS(eI, eL)
1385- let iL = if ((cW > 0))
1338+ let cJ = cF(ev, ey)
1339+ let hU = if ((cJ > 0))
13861340 then {
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))
1341+ let hV = fZ(cJ)
1342+ let gb = hV._1
1343+ let gc = hV._2
1344+ let hW = invoke(ai(), "withdrawLocked", [gb], nil)
1345+ if ((hW == hW))
13921346 then {
1393- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394- if ((iO == iO))
1395- then hJ(gM)
1347+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1348+ if ((hX == hX))
1349+ then gS(gb)
13961350 else throw("Strict value is not equal to itself.")
13971351 }
13981352 else throw("Strict value is not equal to itself.")
13991353 }
14001354 else nil
1401- if ((iL == iL))
1402- then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
1355+ if ((hU == hU))
1356+ then ((gA(bH, eu, ((ev - cJ) + gP), ew, ex, bw()) ++ gR(((aR() + gP) - cJ))) ++ hU)
14031357 else throw("Strict value is not equal to itself.")
14041358 }
14051359 else throw("Strict value is not equal to itself.")
14121366
14131367
14141368
1415-@Callable(bL)
1416-func removeMargin (hG) = {
1417- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418- if ((id == id))
1369+@Callable(by)
1370+func removeMargin (gP,bI) = {
1371+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1372+ if ((hl == hl))
14191373 then {
1420- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421- if ((ie == ie))
1374+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1375+ if ((hm == hm))
14221376 then {
1423- let bU = toString(bL.caller)
1424- if (if (if (if (if ((0 >= hG))
1377+ let bH = toString(by.caller)
1378+ if (if (if (if (if ((0 >= gP))
14251379 then true
1426- else !(ce(bU)))
1380+ else !(bR(bH, bI)))
14271381 then true
1428- else !(cn()))
1382+ else !(ca()))
14291383 then true
1430- else co())
1384+ else cb())
14311385 then true
1432- else dE())
1386+ else dr())
14331387 then throw("Invalid removeMargin parameters")
14341388 else {
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))
1389+ let hY = bG(bH, bI)
1390+ let eu = hY._1
1391+ let ev = hY._2
1392+ let ew = hY._3
1393+ let ex = hY._4
1394+ let ey = hY._5
1395+ let hZ = cK(eu, ev, ex, ey, -(gP))
1396+ let cS = hZ._1
1397+ let cT = hZ._2
1398+ let cO = hZ._3
1399+ let cJ = hZ._4
1400+ if ((cT != 0))
14471401 then throw("Invalid removed margin amount")
14481402 else {
1449- let fk = ej(df, dg, eJ)
1450- if (!(bM(fk, bi(), true)))
1451- then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
1403+ let eX = dW(cS, cT, ew)
1404+ if (!(bz(eX, aU(), true)))
1405+ then throw(((("Too much margin removed: " + toString(eX)) + " < ") + toString(aU())))
14521406 else {
1453- let iR = gK(cW)
1454- let gM = iR._1
1455- let gN = iR._2
1456- let iL = if ((cW > 0))
1407+ let ia = fZ(cJ)
1408+ let gb = ia._1
1409+ let gc = ia._2
1410+ let hU = if ((cJ > 0))
14571411 then {
1458- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459- if ((iO == iO))
1460- then hJ(gM)
1412+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1413+ if ((hX == hX))
1414+ then gS(gb)
14611415 else throw("Strict value is not equal to itself.")
14621416 }
14631417 else nil
1464- if ((iL == iL))
1418+ if ((hU == hU))
14651419 then {
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)
1420+ let hW = invoke(ai(), "withdrawLocked", [(gP + gb)], nil)
1421+ if ((hW == hW))
1422+ then (((gA(bH, eu, cS, ew, bE(eu), bw()) ++ gO(by.caller, gP)) ++ gR(((aR() - gP) - cJ))) ++ hU)
14691423 else throw("Strict value is not equal to itself.")
14701424 }
14711425 else throw("Strict value is not equal to itself.")
14801434
14811435
14821436
1483-@Callable(bL)
1484-func closePosition (eB,eD,eE) = {
1485- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486- if ((id == id))
1437+@Callable(by)
1438+func closePosition (eo,bI,eq,er) = {
1439+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1440+ if ((hl == hl))
14871441 then {
1488- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489- if ((ie == ie))
1442+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1443+ if ((hm == hm))
14901444 then {
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)))
1445+ let bH = bx(by)
1446+ let ib = valueOrErrorMessage(addressFromString(bH), "Invalid caller")
1447+ let bQ = bO(bH)
1448+ if (if (if (if (if (if (!(bR(bH, bI)))
14951449 then true
1496- else !(cn()))
1450+ else !(ca()))
14971451 then true
1498- else co())
1452+ else cb())
14991453 then true
1500- else (0 >= eB))
1454+ else (0 >= eo))
15011455 then true
1502- else (0 > eD))
1456+ else (0 > eq))
15031457 then true
1504- else dE())
1458+ else dr())
15051459 then throw("Invalid closePosition parameters")
15061460 else {
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))
1461+ let ey = bG(bH, bI)._5
1462+ let ic = en(bH, bI, eo, bQ, eq, er, true, true)
1463+ let eS = ic._1
1464+ let fb = ic._2
1465+ let eU = ic._3
1466+ let eV = ic._4
1467+ let eO = ic._5
1468+ let eJ = ic._6
1469+ let fa = ic._7
1470+ let cs = ic._8
1471+ let ct = ic._9
1472+ let eE = ic._10
1473+ let hL = ic._11
1474+ let hM = ic._12
1475+ let hN = ic._13
1476+ let hE = ic._14
1477+ let hF = ic._15
1478+ let id = ic._16
1479+ if ((eO > 0))
15261480 then throw("Invalid closePosition parameters: bad debt")
1527- else if ((eL >= bJ()))
1481+ else if ((ey >= bw()))
15281482 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15291483 else {
1530- let eO = (ff != 0)
1531- let iV = (fn + iU)
1532- let iW = (bf() - iV)
1533- let iX = if ((0 > iW))
1484+ let eB = (eS != 0)
1485+ let ie = (fa + id)
1486+ let if = (aR() - ie)
1487+ let ig = if ((0 > if))
15341488 then 0
1535- else iW
1536- let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537- if ((iN == iN))
1489+ else if
1490+ let hW = invoke(ai(), "withdrawLocked", [ie], nil)
1491+ if ((hW == hW))
15381492 then {
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))
1493+ let ht = invoke(al(), "acceptPayment", [bH], [AttachedPayment(ag(), id)])
1494+ if ((ht == ht))
15441495 then {
1545- let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546- if ((iI == iI))
1496+ let hu = {
1497+ let bL = ht
1498+ if ($isInstanceOf(bL, "Int"))
1499+ then {
1500+ let fV = bL
1501+ fV
1502+ }
1503+ else throw("Invalid referrerFee")
1504+ }
1505+ let ih = fZ((id - hu))
1506+ let gb = ih._1
1507+ let gc = ih._2
1508+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1509+ if ((hQ == hQ))
15471510 then {
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))
1511+ let hR = invoke(aj(), "notifyFees", [bH, id], nil)
1512+ if ((hR == hR))
1513+ then {
1514+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1515+ if ((hS == hS))
1516+ then (((((if (eB)
1517+ then gA(bH, eS, fb, eU, eV, bw())
1518+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ (if ((fa > 0))
1519+ then gO(ib, fa)
1520+ else nil)) ++ gR(ig)) ++ gS(gb))
1521+ else throw("Strict value is not equal to itself.")
1522+ }
15551523 else throw("Strict value is not equal to itself.")
15561524 }
15571525 else throw("Strict value is not equal to itself.")
15691537
15701538
15711539
1572-@Callable(bL)
1573-func liquidate (bU) = {
1574- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575- if ((id == id))
1540+@Callable(by)
1541+func liquidate (bH,bI) = {
1542+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1543+ if ((hl == hl))
15761544 then {
1577- let iZ = en(bU, aG)
1578- let ja = if (dT())
1545+ let ii = ea(bH, bI, ax)
1546+ let ij = if (dG())
15791547 then {
1580- let jb = en(bU, aH)
1581- aQ(iZ, jb)
1548+ let ik = ea(bH, bI, ay)
1549+ aJ(ii, ik)
15821550 }
1583- else iZ
1584- if (if (if (if (if (!(bM(ja, bv(), false)))
1551+ else ii
1552+ if (if (if (if (if (!(bz(ij, bh(), false)))
15851553 then true
1586- else !(ce(bU)))
1554+ else !(bR(bH, bI)))
15871555 then true
1588- else !(cn()))
1556+ else !(ca()))
15891557 then true
1590- else co())
1558+ else cb())
15911559 then true
1592- else dE())
1560+ else dr())
15931561 then throw("Unable to liquidate")
15941562 else {
1595- let jc = if (if ((iZ > bw()))
1596- then (bx() > 0)
1563+ let il = if (if ((ii > bi()))
1564+ then (bj() > 0)
15971565 else false)
1598- then (aD > bx())
1566+ then (au > bj())
15991567 else false
1600- let eH = bT(bU)._1
1601- let dX = aP(eH)
1602- let jd = if (jc)
1568+ let eu = bG(bH, bI)._1
1569+ let dK = aI(eu)
1570+ let im = if (il)
16031571 then {
1604- let je = ev(bU, eH)
1605- let jf = aK(aP(je), dX)
1606- $Tuple2(jf, aP(je))
1572+ let in = ei(bH, eu)
1573+ let io = aD(aI(in), dK)
1574+ $Tuple2(io, aI(in))
16071575 }
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))
1576+ else $Tuple2(0, dK)
1577+ let io = im._1
1578+ let in = im._2
1579+ let ip = en(bH, bI, if (il)
1580+ then in
1581+ else dK, bi(), 0, true, false, true)
1582+ let eS = ip._1
1583+ let fb = ip._2
1584+ let eU = ip._3
1585+ let eV = ip._4
1586+ let eO = ip._5
1587+ let eJ = ip._6
1588+ let fa = ip._7
1589+ let cs = ip._8
1590+ let ct = ip._9
1591+ let eE = ip._10
1592+ let hL = ip._11
1593+ let hM = ip._12
1594+ let hN = ip._13
1595+ let hE = ip._14
1596+ let hF = ip._15
1597+ let iq = ip._16
1598+ let ir = (iq / 2)
1599+ let gc = (iq - ir)
1600+ let if = (aR() - iq)
1601+ let is = if ((0 > if))
16341602 then 0
1635- else iW
1636- let iO = if ((fb > 0))
1603+ else if
1604+ let hX = if ((eO > 0))
16371605 then {
1638- let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639- if ((iO == iO))
1606+ let hX = invoke(ai(), "exchangeFreeAndLocked", [(eO + iq)], nil)
1607+ if ((hX == hX))
16401608 then nil
16411609 else throw("Strict value is not equal to itself.")
16421610 }
16431611 else nil
1644- if ((iO == iO))
1612+ if ((hX == hX))
16451613 then {
1646- let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647- if ((iN == iN))
1614+ let hW = invoke(ai(), "withdrawLocked", [iq], nil)
1615+ if ((hW == hW))
16481616 then {
1649- let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650- if ((jk == jk))
1617+ let it = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1618+ if ((it == it))
16511619 then {
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))
1620+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1621+ if ((hS == hS))
1622+ then ((((if (il)
1623+ then gA(bH, eS, fb, eU, eV, bw())
1624+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gO(by.caller, ir)) ++ gR(is))
16571625 else throw("Strict value is not equal to itself.")
16581626 }
16591627 else throw("Strict value is not equal to itself.")
16681636
16691637
16701638
1671-@Callable(bL)
1639+@Callable(by)
16721640 func payFunding () = {
1673- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674- if ((id == id))
1641+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1642+ if ((hl == hl))
16751643 then {
1676- let jl = br()
1677- if (if (if ((jl > bJ()))
1644+ let iu = bd()
1645+ if (if (if ((iu > bw()))
16781646 then true
1679- else !(cn()))
1647+ else !(ca()))
16801648 then true
1681- else co())
1682- then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
1649+ else cb())
1650+ then throw(((("Invalid funding block timestamp: " + toString(bw())) + " < ") + toString(iu)))
16831651 else {
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))
1652+ let fA = dl()
1653+ let iv = fz()
1654+ let fD = iv._1
1655+ let fE = iv._2
1656+ let fH = iv._3
1657+ let iw = if ((fH > 0))
1658+ then {
1659+ let iw = invoke(ai(), "exchangeFreeAndLocked", [-(fH)], nil)
1660+ if ((iw == iw))
1661+ then nil
1662+ else throw("Strict value is not equal to itself.")
1663+ }
1664+ else nil
1665+ if ((iw == iw))
1666+ then gq((iu + bg()), (bo() + fE), (bp() + fD), aD(fE, fA), aD(fD, fA))
1667+ else throw("Strict value is not equal to itself.")
16891668 }
16901669 }
16911670 else throw("Strict value is not equal to itself.")
16931672
16941673
16951674
1696-@Callable(bL)
1675+@Callable(by)
16971676 func syncTerminalPriceToOracle () = {
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())
1677+ let ck = aV()
1678+ let cl = aW()
1679+ let ix = fu(dl(), ck, cl)
1680+ let ha = ix._1
1681+ let hb = ix._2
1682+ let fy = ix._3
1683+ let iy = if (if ((0 > fy))
1684+ then (aI(fy) > aR())
17061685 else false)
1707- then -(bf())
1708- else gj
1709- let hT = if ((jo != 0))
1686+ then -(aR())
1687+ else fy
1688+ let hc = if ((iy != 0))
17101689 then {
1711- let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712- if ((hT == hT))
1690+ let hc = invoke(ai(), "exchangeFreeAndLocked", [iy], nil)
1691+ if ((hc == hc))
17131692 then nil
17141693 else throw("Strict value is not equal to itself.")
17151694 }
17161695 else nil
1717- if ((hT == hT))
1718- then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
1696+ if ((hc == hc))
1697+ then (gR((aR() + iy)) ++ gF(ha, hb))
17191698 else throw("Strict value is not equal to itself.")
17201699 }
17211700
17221701
17231702
1724-@Callable(bL)
1725-func ensureCalledOnce () = if ((bL.caller != this))
1703+@Callable(by)
1704+func ensureCalledOnce () = if ((by.caller != this))
17261705 then throw("Invalid saveCurrentTxId parameters")
17271706 else {
1728- let jp = valueOrElse(getString(this, W), "")
1729- if ((jp != toBase58String(bL.transactionId)))
1730- then [StringEntry(W, jp)]
1707+ let iz = toBase58String(by.transactionId)
1708+ let iA = valueOrElse(getString(this, R), "")
1709+ if ((iA != iz))
1710+ then [StringEntry(R, iz)]
17311711 else throw("Can not call vAMM methods twice in one tx")
17321712 }
17331713
17341714
17351715
1736-@Callable(bL)
1737-func view_calcRemainMarginWithFundingPayment (bU) = {
1738- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739- if ((id == id))
1716+@Callable(by)
1717+func migratePosition (bH) = {
1718+ let bK = getInteger(this, ab(e, bH))
1719+ if (if (isDefined(bK))
1720+ then isDefined(addressFromString(bH))
1721+ else false)
17401722 then {
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)))
1723+ let iB = getIntegerValue(this, ab(e, bH))
1724+ let iC = getIntegerValue(this, ab(f, bH))
1725+ let iD = getIntegerValue(this, ab(g, bH))
1726+ let iE = getIntegerValue(this, ab(h, bH))
1727+ let iF = valueOrElse(getInteger(this, ab(k, bH)), lastBlock.timestamp)
1728+ let iG = valueOrElse(getInteger(this, ab(j, bH)), aS())
1729+ let iH = getIntegerValue(this, ab(i, bH))
1730+ let iI = bN(iB)
1731+ let bJ = ((bH + "_") + toString(iI))
1732+[DeleteEntry(ab(e, bH)), DeleteEntry(ab(f, bH)), DeleteEntry(ab(g, bH)), DeleteEntry(ab(h, bH)), DeleteEntry(ab(k, bH)), DeleteEntry(ab(j, bH)), DeleteEntry(ab(i, bH)), IntegerEntry(ab(e, bJ), iB), IntegerEntry(ab(f, bJ), iC), IntegerEntry(ab(g, bJ), iD), IntegerEntry(ab(h, bJ), iE), IntegerEntry(ab(k, bJ), iF), IntegerEntry(ab(j, bJ), iG), IntegerEntry(ab(i, bJ), iH)]
1733+ }
1734+ else throw(("Nothing to migrate for " + bH))
1735+ }
1736+
1737+
1738+
1739+@Callable(by)
1740+func view_calcRemainMarginWithFundingPayment (bH,bI) = {
1741+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1742+ if ((hl == hl))
1743+ then {
1744+ let iJ = bG(bH, bI)
1745+ let bM = iJ._1
1746+ let dT = iJ._2
1747+ let ec = iJ._3
1748+ let dV = iJ._4
1749+ let ee = iJ._5
1750+ let iK = dR(bH, bI, ax)
1751+ let dM = iK._1
1752+ let dQ = iK._2
1753+ let iL = cK(bM, dT, dV, ee, dQ)
1754+ let cS = iL._1
1755+ let cT = iL._2
1756+ let cO = iL._3
1757+ let cJ = iL._4
1758+ throw(((((((aB(cS) + aB(cO)) + aB(eh(bH, bI))) + aB(dQ)) + aB(cT)) + aB(dM)) + aB(cJ)))
17561759 }
17571760 else throw("Strict value is not equal to itself.")
17581761 }
17591762
17601763
17611764
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))
1765+@Callable(by)
1766+func view_getPegAdjustCost (iM) = {
1767+ let ck = aV()
1768+ let cl = aW()
1769+ let ft = fu(iM, ck, cl)
1770+ throw(toString(ft._3))
17681771 }
17691772
17701773
17711774
1772-@Callable(bL)
1775+@Callable(by)
17731776 func view_getTerminalAmmPrice () = {
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))
1777+ let iN = fc()
1778+ let fg = iN._1
1779+ let fh = iN._2
1780+ let gV = aD(aF(fg, aX()), aF(fh, aY()))
1781+ throw(toString(gV))
17791782 }
17801783
17811784
17821785
1783-@Callable(bL)
1786+@Callable(by)
17841787 func view_getFunding () = {
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())))
1792- }
1793-
1794-
1795-
1796-@Callable(bL)
1797-func computeSpotPrice () = {
1798- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799- if ((id == id))
1788+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1789+ if ((hl == hl))
18001790 then {
1801- let ge = dS()
1802- $Tuple2(nil, ge)
1791+ let fA = dl()
1792+ let iO = fz()
1793+ let fD = iO._1
1794+ let fE = iO._2
1795+ let fH = iO._3
1796+ let iP = aD(fE, fA)
1797+ let iQ = aD(fD, fA)
1798+ throw(((((aB(iP) + aB(iQ)) + aB(dF())) + aB(dl())) + aB(fH)))
18031799 }
18041800 else throw("Strict value is not equal to itself.")
18051801 }
18061802
18071803
18081804
1809-@Callable(bL)
1810-func computeFeeForTraderWithArtifact (bU,gr) = {
1811- let ge = gD(bU, gr)
1812- $Tuple2(nil, ge)
1805+@Callable(by)
1806+func computeSpotPrice () = {
1807+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1808+ if ((hl == hl))
1809+ then {
1810+ let ft = dF()
1811+ $Tuple2(nil, ft)
1812+ }
1813+ else throw("Strict value is not equal to itself.")
18131814 }
18141815
18151816
1816-@Verifier(jx)
1817-func jy () = {
1818- let jz = getString(this, X)
1819- if (isDefined(jz))
1817+
1818+@Callable(by)
1819+func computeFeeForTraderWithArtifact (bH,fJ) = {
1820+ let ft = fS(bH, fJ)
1821+ $Tuple2(nil, ft)
1822+ }
1823+
1824+
1825+@Verifier(iR)
1826+func iS () = {
1827+ let iT = getString(this, S)
1828+ if (isDefined(iT))
18201829 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)
1830+ let iU = getString(addressFromStringValue(value(iT)), U)
1831+ if (isDefined(iU))
1832+ then valueOrElse(getBoolean(addressFromStringValue(value(iU)), ((("status_" + toString(this)) + "_") + toBase58String(iR.id))), false)
18241833 else throw("unable to verify: admin not set in coordinator")
18251834 }
1826- else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
1835+ else sigVerify(iR.bodyBytes, iR.proofs[0], iR.senderPublicKey)
18271836 }
18281837
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
22-let j = "k_positionAsset"
22+let j = "k_positionFee"
2323
24-let k = "k_positionFee"
24+let k = "k_positionTimestamp"
2525
26-let l = "k_positionTimestamp"
26+let l = "k_initialized"
2727
28-let m = "k_initialized"
28+let m = "k_paused"
2929
30-let n = "k_paused"
30+let n = "k_closeOnly"
3131
32-let o = "k_closeOnly"
32+let o = "k_fee"
3333
34-let p = "k_fee"
34+let p = "k_rollover_fee"
3535
36-let q = "k_rollover_fee"
36+let q = "k_fundingPeriod"
3737
38-let r = "k_fundingPeriod"
38+let r = "k_initMarginRatio"
3939
40-let s = "k_initMarginRatio"
40+let s = "k_mmr"
4141
42-let t = "k_mmr"
42+let t = "k_liquidationFeeRatio"
4343
44-let u = "k_liquidationFeeRatio"
44+let u = "k_partLiquidationRatio"
4545
46-let v = "k_partLiquidationRatio"
46+let v = "k_spreadLimit"
4747
48-let w = "k_spreadLimit"
48+let w = "k_maxPriceImpact"
4949
50-let x = "k_maxPriceImpact"
50+let x = "k_maxPriceSpread"
5151
52-let y = "k_maxPriceSpread"
52+let y = "k_maxOpenNotional"
5353
54-let z = "k_maxOpenNotional"
54+let z = "k_feeToStakersPercent"
5555
56-let A = "k_feeToStakersPercent"
56+let A = "k_maxOracleDelay"
5757
58-let B = "k_maxOracleDelay"
58+let B = "k_fundingMode"
5959
60-let C = "k_lastDataStr"
60+let C = "k_latestLongPremiumFraction"
6161
62-let D = "k_lastMinuteId"
62+let D = "k_latestShortPremiumFraction"
6363
64-let E = "k_twapDataLastCumulativePrice"
64+let E = "k_nextFundingBlockMinTimestamp"
6565
66-let F = "k_twapDataLastPrice"
66+let F = "k_longFundingRate"
6767
68-let G = "k_twapDataPreviousMinuteId"
68+let G = "k_shortFundingRate"
6969
70-let H = "k_latestLongPremiumFraction"
70+let H = "k_qtAstR"
7171
72-let I = "k_latestShortPremiumFraction"
72+let I = "k_bsAstR"
7373
74-let J = "k_nextFundingBlockMinTimestamp"
74+let J = "k_qtAstW"
7575
76-let K = "k_longFundingRate"
76+let K = "k_bsAstW"
7777
78-let L = "k_shortFundingRate"
78+let L = "k_totalPositionSize"
7979
80-let M = "k_qtAstR"
80+let M = "k_totalLongPositionSize"
8181
82-let N = "k_bsAstR"
82+let N = "k_totalShortPositionSize"
8383
84-let O = "k_qtAstW"
84+let O = "k_openInterestNotional"
8585
86-let P = "k_bsAstW"
86+let P = "k_openInterestShort"
8787
88-let Q = "k_totalPositionSize"
88+let Q = "k_openInterestLong"
8989
90-let R = "k_totalLongPositionSize"
90+let R = "k_lastTx"
9191
92-let S = "k_totalShortPositionSize"
92+let S = "k_coordinatorAddress"
9393
94-let T = "k_openInterestNotional"
94+let T = "k_vault_address"
9595
96-let U = "k_openInterestShort"
96+let U = "k_admin_address"
9797
98-let V = "k_openInterestLong"
98+let V = "k_quote_asset"
9999
100-let W = "k_lastTx"
100+let W = "k_staking_address"
101101
102-let X = "k_coordinatorAddress"
102+let X = "k_miner_address"
103103
104-let Y = "k_vault_address"
104+let Y = "k_orders_address"
105105
106-let Z = "k_admin_address"
106+let Z = "k_referral_address"
107107
108-let aa = "k_quote_asset"
108+let aa = "k_nft_manager_address"
109109
110-let ab = "k_quote_staking"
111-
112-let ac = "k_staking_address"
113-
114-let ad = "k_miner_address"
115-
116-let ae = "k_orders_address"
117-
118-let af = "k_referral_address"
119-
120-let ag = "k_exchange_address"
121-
122-let ah = "k_nft_manager_address"
123-
124-func ai (aj,ak) = ((aj + "_") + ak)
110+func ab (ac,ad) = ((ac + "_") + ad)
125111
126112
127-func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
113+func ae () = valueOrErrorMessage(addressFromString(getStringValue(this, S)), "Coordinator not set")
128114
129115
130-func am () = addressFromString(getStringValue(al(), Z))
116+func af () = addressFromString(getStringValue(ae(), U))
131117
132118
133-func an () = fromBase58String(getStringValue(al(), aa))
119+func ag () = fromBase58String(getStringValue(ae(), V))
134120
135121
136-func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
122+func ah () = valueOrErrorMessage(addressFromString(getStringValue(ae(), W)), "Staking not set")
137123
138124
139-func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
125+func ai () = valueOrErrorMessage(addressFromString(getStringValue(ae(), T)), "Vault not set")
140126
141127
142-func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
128+func aj () = valueOrErrorMessage(addressFromString(getStringValue(ae(), X)), "Miner not set")
143129
144130
145-func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
131+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Y)), "Orders not set")
146132
147133
148-func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
134+func al () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Z)), "Referral not set")
149135
150136
151-func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
137+func am () = valueOrErrorMessage(addressFromString(getStringValue(ae(), aa)), "NFT Manager not set")
152138
153139
154-func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
140+let an = "k_token_param"
141+
142+let ao = "k_token_type"
143+
144+let ap = "fee_reduction"
145+
146+let aq = 1
147+
148+let ar = 2
149+
150+let as = 1000
151+
152+let at = 6
153+
154+let au = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
155+
156+let av = (525600 * au)
157+
158+let aw = (86400 * au)
159+
160+let ax = 1
161+
162+let ay = 2
163+
164+let az = 1
165+
166+let aA = 2
167+
168+func aB (aC) = (toString(aC) + ",")
155169
156170
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) + ",")
171+func aD (aC,aE) = fraction(aC, au, aE, HALFEVEN)
184172
185173
186-func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
174+func aF (aC,aE) = fraction(aC, aE, au, HALFEVEN)
187175
188176
189-func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
177+func aG (aC,aE) = fraction(aC, toBigInt(au), aE, HALFEVEN)
190178
191179
192-func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
180+func aH (aC,aE) = fraction(aC, aE, toBigInt(au), HALFEVEN)
193181
194182
195-func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
183+func aI (aC) = if ((aC > 0))
184+ then aC
185+ else -(aC)
196186
197187
198-func aP (aJ) = if ((aJ > 0))
199- then aJ
200- else -(aJ)
188+func aJ (aC,aE) = if ((aC >= aE))
189+ then aC
190+ else aE
201191
202192
203-func aQ (aJ,aL) = if ((aJ >= aL))
204- then aJ
205- else aL
193+func aK (aL) = valueOrErrorMessage(getInteger(this, aL), ("no value for " + aL))
206194
207195
208-func aR (aS) = if ((size(aS) == 0))
209- then ""
210- else makeString(aS, ",")
196+func aM (aL,aN) = valueOrElse(getInteger(this, aL), aN)
211197
212198
213-func aT (aU) = if ((aU == ""))
214- then nil
215- else split(aU, ",")
216-
217-
218-func aV (aS,aW,aX) = if ((size(aS) > aW))
219- then (removeByIndex(aS, 0) :+ aX)
220- else (aS :+ aX)
221-
222-
223-func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
224-
225-
226-func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
227-
228-
229-func bc (ak,aj) = {
230- let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231- bd
199+func aO (ad,ac) = {
200+ let aP = valueOrErrorMessage(getString(ad, ac), ("No value for key " + ac))
201+ aP
232202 }
233203
234204
235-func be (ak,aj) = {
236- let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237- bd
205+func aQ (ad,ac) = {
206+ let aP = valueOrErrorMessage(getInteger(ad, ac), ("No value for key " + ac))
207+ aP
238208 }
239209
240210
241-func bf () = aY(c)
211+func aR () = aK(c)
242212
243213
244-func bg () = aY(p)
214+func aS () = aK(o)
245215
246216
247-func bh () = aY(q)
217+func aT () = aK(p)
248218
249219
250-func bi () = aY(s)
220+func aU () = aK(r)
251221
252222
253-func bj () = aY(M)
223+func aV () = aK(H)
254224
255225
256-func bk () = aY(N)
226+func aW () = aK(I)
257227
258228
259-func bl () = ba(O, aD)
229+func aX () = aM(J, au)
260230
261231
262-func bm () = ba(P, aD)
232+func aY () = aM(K, au)
263233
264234
265-func bn () = aY(Q)
235+func aZ () = aK(L)
266236
267237
268-func bo () = aY(T)
238+func ba () = aK(O)
269239
270240
271-func bp () = aY(U)
241+func bb () = aK(P)
272242
273243
274-func bq () = aY(V)
244+func bc () = aK(Q)
275245
276246
277-func br () = aY(J)
247+func bd () = aK(E)
278248
279249
280-func bs () = aY(r)
250+func be () = aK(q)
281251
282252
283-func bt () = (bs() * aD)
253+func bf () = (be() * au)
284254
285255
286-func bu () = (bs() * aB)
256+func bg () = (be() * as)
287257
288258
289-func bv () = aY(t)
259+func bh () = aK(s)
290260
291261
292-func bw () = aY(u)
262+func bi () = aK(t)
293263
294264
295-func bx () = aY(v)
265+func bj () = aK(u)
296266
297267
298-func by () = aY(w)
268+func bk () = aK(v)
299269
300270
301-func bz () = aY(x)
271+func bl () = aK(w)
302272
303273
304-func bA () = aY(y)
274+func bm () = aK(x)
305275
306276
307-func bB () = aY(z)
277+func bn () = aK(y)
308278
309279
310-func bC () = aY(H)
280+func bo () = aK(C)
311281
312282
313-func bD () = aY(I)
283+func bp () = aK(D)
314284
315285
316-func bE () = aY(S)
286+func bq () = aK(N)
317287
318288
319-func bF () = aY(R)
289+func br () = aK(M)
320290
321291
322-func bG () = ba(d, 0)
292+func bs () = aM(d, 0)
323293
324294
325-func bH () = aY(A)
295+func bt () = aK(z)
326296
327297
328-func bI () = aY(B)
298+func bu () = aK(A)
329299
330300
331-func bJ () = lastBlock.timestamp
301+func bv () = aM(B, az)
332302
333303
334-func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
304+func bw () = lastBlock.timestamp
335305
336306
337-func bM (bN,bO,bP) = {
338- let bQ = (bN - bO)
339- if (if (bP)
340- then (0 > bQ)
307+func bx (by) = valueOrElse(getString(ak(), "k_sender"), toString(by.caller))
308+
309+
310+func bz (bA,bB,bC) = {
311+ let bD = (bA - bB)
312+ if (if (bC)
313+ then (0 > bD)
341314 else false)
342- then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343- else if (if (!(bP))
344- then (bQ >= 0)
315+ then throw(((("Invalid margin: " + toString(bA)) + " < ") + toString(bB)))
316+ else if (if (!(bC))
317+ then (bD >= 0)
345318 else false)
346- then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
319+ then throw(((("Invalid margin: " + toString(bA)) + " > ") + toString(bB)))
347320 else true
348321 }
349322
350323
351-func bR (bS) = if ((bS == 0))
324+func bE (bF) = if ((bF == 0))
352325 then throw("Should not be called with _positionSize == 0")
353- else if ((bS > 0))
354- then bC()
355- else bD()
326+ else if ((bF > 0))
327+ then bo()
328+ else bp()
356329
357330
358-func bT (bU) = {
359- let bV = getInteger(this, ai(e, bU))
360- let bW = bV
361- if ($isInstanceOf(bW, "Int"))
331+func bG (bH,bI) = {
332+ let bJ = ((bH + "_") + toString(bI))
333+ let bK = getInteger(this, ab(e, bJ))
334+ let bL = bK
335+ if ($isInstanceOf(bL, "Int"))
362336 then {
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)))
337+ let bM = bL
338+ $Tuple5(bM, getIntegerValue(this, ab(f, bJ)), getIntegerValue(this, ab(g, bJ)), getIntegerValue(this, ab(h, bJ)), getIntegerValue(this, ab(k, bJ)))
365339 }
366340 else $Tuple5(0, 0, 0, 0, 0)
367341 }
368342
369343
370-func bY (bU) = {
371- let bZ = getString(this, ai(j, bU))
372- let bW = bZ
373- if ($isInstanceOf(bW, "String"))
344+func bN (bF) = if ((0 > bF))
345+ then ar
346+ else aq
347+
348+
349+func bO (bH) = {
350+ let bP = getInteger(this, ab(j, bH))
351+ let bL = bP
352+ if ($isInstanceOf(bL, "Int"))
374353 then {
375- let ca = bW
376- ca
354+ let bQ = bL
355+ bQ
377356 }
378- else toBase58String(an())
357+ else aS()
379358 }
380359
381360
382-func cb (bU) = {
383- let cc = getInteger(this, ai(k, bU))
384- let bW = cc
385- if ($isInstanceOf(bW, "Int"))
386- then {
387- let cd = bW
388- cd
389- }
390- else bg()
391- }
392-
393-
394-func ce (bU) = if ((bT(bU)._1 == 0))
361+func bR (bH,bI) = if ((bG(bH, bI)._1 == 0))
395362 then throw("No open position")
396363 else true
397364
398365
399-func cf (cg) = {
400- let ch = getString(this, cg)
401- if (if (isDefined(ch))
402- then (value(ch) != "")
366+func bS (bT) = {
367+ let bU = getString(this, bT)
368+ if (if (isDefined(bU))
369+ then (value(bU) != "")
403370 else false)
404371 then {
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)
372+ let bV = split(value(bU), ",")
373+ let bW = valueOrErrorMessage(addressFromString(bV[0]), ("Invalid oracle address in: " + value(bU)))
374+ let bX = bV[1]
375+ let bY = bV[2]
376+ let bZ = bV[3]
377+ $Tuple4(bW, bX, bY, bZ)
411378 }
412379 else unit
413380 }
414381
415382
416-func cn () = valueOrElse(getBoolean(this, m), false)
383+func ca () = valueOrElse(getBoolean(this, l), false)
417384
418385
419-func co () = valueOrElse(getBoolean(this, n), false)
386+func cb () = valueOrElse(getBoolean(this, m), false)
420387
421388
422-func cp () = valueOrElse(getBoolean(this, o), false)
389+func cc () = valueOrElse(getBoolean(this, n), false)
423390
424391
425-func cq (cr,cs,ct) = if (cr)
392+func cd (ce,cf,cg) = if (ce)
426393 then {
427- let cu = (bk() - ct)
428- if ((0 >= cu))
394+ let ch = (aW() - cg)
395+ if ((0 >= ch))
429396 then throw("Tx lead to base asset reserve <= 0, revert")
430- else $Tuple3((bj() + cs), cu, (bn() + ct))
397+ else $Tuple3((aV() + cf), ch, (aZ() + cg))
431398 }
432399 else {
433- let cv = (bj() - cs)
434- if ((0 >= cv))
400+ let ci = (aV() - cf)
401+ if ((0 >= ci))
435402 then throw("Tx lead to base quote reserve <= 0, revert")
436- else $Tuple3(cv, (bk() + ct), (bn() - ct))
403+ else $Tuple3(ci, (aW() + cg), (aZ() - cg))
437404 }
438405
439406
440-func cw (cx,cy) = {
441- let cz = toBigInt(cx)
442- let cA = toBigInt(cy)
443- aO(cz, cA)
407+func cj (ck,cl) = {
408+ let cm = toBigInt(ck)
409+ let cn = toBigInt(cl)
410+ aH(cm, cn)
444411 }
445412
446413
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)
414+func co (ce,cf) = {
415+ let ck = aV()
416+ let cl = aW()
417+ let cp = aX()
418+ let cq = aY()
419+ let cr = aD(cf, cp)
420+ let aL = cj(ck, cl)
421+ let cs = if (ce)
422+ then (ck + cr)
423+ else (ck - cr)
424+ let ct = toInt(aG(aL, toBigInt(cs)))
425+ let cu = aI((ct - cl))
426+ let cv = if (ce)
427+ then cu
428+ else -(cu)
429+ let cw = cd(ce, cr, cu)
430+ let cx = cw._1
431+ let cy = cw._2
432+ let cz = cw._3
433+ let cA = aD(aF(ck, cp), aF(cl, cq))
434+ let cB = aD(cf, cu)
435+ let cC = aI((cA - cB))
436+ let cD = (au - aD(cA, (cA + cC)))
437+ let cE = bl()
438+ if ((cD > cE))
439+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(ck)) + " before base asset: ") + toString(cl)) + " quote asset amount to exchange: ") + toString(cf)) + " price before: ") + toString(cA)) + " marketPrice: ") + toString(cB)))
440+ else $Tuple4(cv, cx, cy, cz)
474441 }
475442
476443
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
444+func cF (cG,cH) = {
445+ let cI = ((((bw() - cH) / 1000) / 60) * au)
446+ let cJ = aD(aF(aF(cG, cI), aT()), av)
447+ cJ
481448 }
482449
483450
484-func cX (cY,cT,cZ,cU,da) = {
485- let db = if ((cY != 0))
451+func cK (cL,cG,cM,cH,cN) = {
452+ let cO = if ((cL != 0))
486453 then {
487- let dc = bR(cY)
488- aM((dc - cZ), cY)
454+ let cP = bE(cL)
455+ aF((cP - cM), cL)
489456 }
490457 else 0
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)
458+ let cJ = cF(cG, cH)
459+ let cQ = (((cN - cJ) - cO) + cG)
460+ let cR = if ((0 > cQ))
461+ then $Tuple2(0, aI(cQ))
462+ else $Tuple2(aI(cQ), 0)
463+ let cS = cR._1
464+ let cT = cR._2
465+ $Tuple4(cS, cT, cO, cJ)
499466 }
500467
501468
502-func dh (cr,ct,di,dj,dk,dl,dm) = {
503- let cN = aK(aM(dj, dk), aM(dl, dm))
504- if ((ct == 0))
469+func cU (ce,cg,cV,cW,cX,cY,cZ) = {
470+ let cA = aD(aF(cW, cX), aF(cY, cZ))
471+ if ((cg == 0))
505472 then throw("Invalid base asset amount")
506473 else {
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
474+ let aL = cj(cW, cY)
475+ let da = if (ce)
476+ then (cY + cg)
477+ else (cY - cg)
478+ let db = toInt(aG(aL, toBigInt(da)))
479+ let dc = aI((db - cW))
480+ let dd = aF(dc, cX)
481+ let cE = bl()
482+ let de = cd(!(ce), dc, cg)
483+ let cx = de._1
484+ let cy = de._2
485+ let cz = de._3
486+ let cB = aD(dd, cg)
487+ let cC = aI((cA - cB))
488+ let cD = (au - aD(cA, (cA + cC)))
489+ if (if ((cD > cE))
490+ then cV
524491 else false)
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)
492+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(cW)) + " before base asset: ") + toString(cY)) + " base asset amount to exchange: ") + toString(cg)) + " price before: ") + toString(cA)) + " market price: ") + toString(cB)))
493+ else $Tuple7(dd, cx, cy, cz, (br() - (if (ce)
494+ then aI(cg)
495+ else 0)), (bq() - (if (!(ce))
496+ then aI(cg)
497+ else 0)), cD)
531498 }
532499 }
533500
534501
535-func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
502+func df (ce,cg,cV) = cU(ce, cg, cV, aV(), aX(), aW(), aY())
536503
537504
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 != ""))
505+func dg (dh,bX,bY) = {
506+ let di = valueOrErrorMessage(getInteger(dh, bX), ((("Can not get oracle price. Oracle: " + toString(dh)) + " key: ") + bX))
507+ if ((bY != ""))
541508 then {
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
509+ let dj = lastBlock.height
510+ let dk = valueOrErrorMessage(getInteger(dh, bY), ((("Can not get oracle block. Oracle: " + toString(dh)) + " key: ") + bY))
511+ if (((dj - dk) > bu()))
512+ then throw(((("Oracle stale data. Last oracle block: " + toString(dk)) + " current block: ") + toString(dj)))
513+ else di
547514 }
548- else dv
515+ else di
549516 }
550517
551518
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))
519+func dl () = {
520+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
521+ let dn = dg(dm._1, dm._2, dm._3)
522+ let do = bS(b)
523+ let dp = if (isDefined(do))
557524 then {
558- let dD = value(dB)
559- dt(dD._1, dD._2, dD._3)
525+ let dq = value(do)
526+ dg(dq._1, dq._2, dq._3)
560527 }
561- else aD
562- aK(dA, dC)
528+ else au
529+ aD(dn, dp)
563530 }
564531
565532
566-func dE () = {
567- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568- let du = dz._1
569- let cm = dz._4
570- if ((cm != ""))
533+func dr () = {
534+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
535+ let dh = dm._1
536+ let bZ = dm._4
537+ if ((bZ != ""))
571538 then {
572- let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573- !(dF)
539+ let ds = valueOrErrorMessage(getBoolean(dh, bZ), ((("Can not get oracle is open/closed. Oracle: " + toString(dh)) + " key: ") + bZ))
540+ !(ds)
574541 }
575542 else false
576543 }
577544
578545
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
546+func dt (du,cW,cY,cp,cq) = {
547+ let dv = aD(aF(cW, cp), aF(cY, cq))
548+ let dw = aD((du + dv), (2 * au))
549+ let dt = aD(aI((du - dv)), dw)
550+ dt
584551 }
585552
586553
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)
554+func dx (cW,cY) = {
555+ let dy = dl()
556+ let cp = aX()
557+ let cq = aY()
558+ let dz = dt(dy, aV(), aW(), cp, cq)
559+ let dA = dt(dy, cW, cY, cp, cq)
560+ if (if ((dA > bm()))
561+ then (dA > dz)
595562 else false)
596- then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
563+ then throw(((("Price spread " + toString(dA)) + " > max price spread ") + toString(bm())))
597564 else true
598565 }
599566
600567
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)))
568+func dB (dC,dD) = {
569+ let dE = bn()
570+ if ((dC > dE))
571+ then throw(((("Long open notional " + toString(dC)) + " > max open notional ") + toString(dE)))
572+ else if ((dD > dE))
573+ then throw(((("Short open notional " + toString(dD)) + " > max open notional ") + toString(dE)))
607574 else true
608575 }
609576
610577
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))
578+func dF () = {
579+ let cW = aV()
580+ let cY = aW()
581+ let cp = aX()
582+ let cq = aY()
583+ aD(aF(cW, cp), aF(cY, cq))
617584 }
618585
619586
620-func dT () = {
621- let dL = dy()
622- let dU = dS()
623- (aK(aP((dL - dU)), dL) > by())
587+func dG () = {
588+ let dy = dl()
589+ let dH = dF()
590+ (aD(aI((dy - dH)), dy) > bk())
624591 }
625592
626593
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))
594+func dI (bF,dJ,cW,cX,cY,cZ) = {
595+ let dK = aI(bF)
596+ let dL = (0 > bF)
597+ let dM = if ((dJ == ax))
631598 then {
632- let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633- ea
599+ let dN = cU(!(dL), dK, false, cW, cX, cY, cZ)._1
600+ dN
634601 }
635- else aM(dX, dy())
636- dZ
602+ else aF(dK, dl())
603+ dM
637604 }
638605
639606
640-func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
607+func dO (bF,dP,cW,cX,cY,cZ,dJ) = if ((bF == 0))
641608 then throw("Invalid position size")
642609 else {
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)
610+ let dL = (0 > bF)
611+ let dM = dI(bF, dJ, cW, cX, cY, cZ)
612+ let dQ = if (dL)
613+ then (dP - dM)
614+ else (dM - dP)
615+ $Tuple2(dM, dQ)
649616 }
650617
651618
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)
619+func dR (bH,bI,dJ) = {
620+ let dS = bG(bH, bI)
621+ let bM = dS._1
622+ let dT = dS._2
623+ let dU = dS._3
624+ let dV = dS._4
625+ dO(bM, dU, aV(), aX(), aW(), aY(), dJ)
659626 }
660627
661628
662-func ej (ek,el,em) = aK((ek - el), em)
629+func dW (dX,dY,dZ) = aD((dX - dY), dZ)
663630
664631
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)
632+func ea (bH,bI,dJ) = {
633+ let eb = bG(bH, bI)
634+ let bM = eb._1
635+ let dT = eb._2
636+ let ec = eb._3
637+ let ed = eb._4
638+ let ee = eb._5
639+ let ef = dR(bH, bI, dJ)
640+ let dM = ef._1
641+ let dQ = ef._2
642+ let eg = cK(bM, dT, ed, ee, dQ)
643+ let cS = eg._1
644+ let cT = eg._2
645+ dW(cS, cT, dM)
679646 }
680647
681648
682-func eu (bU) = en(bU, aG)
649+func eh (bH,bI) = ea(bH, bI, ax)
683650
684651
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())
652+func ei (bH,bF) = {
653+ let ej = aJ(bj(), (au - aD(eh(bH, bN(bF)), bh())))
654+ let ek = aF(aI(bF), ej)
655+ let el = df((bF > 0), ek, false)
656+ let em = el._1
657+ let cD = el._7
658+ if ((bl() > cD))
659+ then ek
660+ else aF(aI(bF), bj())
694661 }
695662
696663
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)
664+func en (bH,bI,eo,ep,eq,er,cV,es) = {
665+ let et = bG(bH, bI)
666+ let eu = et._1
667+ let ev = et._2
668+ let ew = et._3
669+ let ex = et._4
670+ let ey = et._5
671+ let ez = (eu > 0)
672+ let eA = aI(eu)
673+ if (if ((eA >= eo))
674+ then (eo > 0)
708675 else false)
709676 then {
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)
677+ let eB = (eA > eo)
678+ let eC = df((eu > 0), eo, cV)
679+ let eD = eC._1
680+ let cs = eC._2
681+ let ct = eC._3
682+ let eE = eC._4
683+ let eF = if ((eu > 0))
684+ then -(eo)
685+ else eo
686+ let eG = dR(bH, bI, ax)
687+ let eH = eG._1
688+ let dQ = eG._2
689+ let eI = aD(aI(eF), eA)
690+ let eJ = aF(dQ, eI)
691+ let eK = cK(eu, ev, ex, ey, dQ)
692+ let eL = eK._1
693+ let eM = eK._2
694+ let eN = eK._3
695+ let cJ = eK._4
696+ let eO = cK(eu, ev, ex, ey, eJ)._2
697+ let eP = aF(aF(eH, eI), ep)
698+ let eQ = (dQ - eJ)
699+ let eR = if ((eu > 0))
700+ then ((eH - eD) - eQ)
701+ else ((eQ + eH) - eD)
702+ let eS = (eu + eF)
703+ let eT = if ((eS == 0))
704+ then $Tuple2(0, 0)
705+ else $Tuple2(aI(eR), bE(eS))
720706 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))
737- then $Tuple2(0, 0)
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)
707+ let eV = eT._2
708+ let eW = (ew - eU)
709+ let eX = ea(bH, bI, ax)
710+ let eY = if ((eu > 0))
711+ then (aF((eU + eQ), eX) - eQ)
712+ else (aF((eU - eQ), eX) - eQ)
713+ let eZ = ((eL - (eY + eQ)) - eP)
714+ let fa = if ((0 > eZ))
715+ then if (es)
749716 then 0
750717 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)
718+ else eZ
719+ let fb = if (er)
720+ then (eY + fa)
721+ else eY
722+ if (if ((eq != 0))
723+ then (eq > eD)
757724 else false)
758- then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759- else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760- then eO
725+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(eq)))
726+ else $Tuple17(eS, fb, eU, eV, eO, eJ, if (if (er)
727+ then eB
761728 else false)
762729 then 0
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)
730+ else fa, cs, ct, eE, (ba() - eW), (br() - (if (ez)
731+ then aI(eF)
732+ else 0)), (bq() - (if (!(ez))
733+ then aI(eF)
734+ else 0)), (bc() - (if (ez)
735+ then eW
736+ else 0)), (bb() - (if (!(ez))
737+ then eW
738+ else 0)), (eP + cJ), eD)
772739 }
773- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
740+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eo)) + " max: ") + toString(eA)))
774741 }
775742
776743
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
785-
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])
793-
794- func fE (fC,fD) = if ((fD >= fz))
795- then fC
796- else throw("List size exceeds 20")
797-
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)
799- }
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)
811- }
812-
813-
814-func fN () = {
815- let bS = bn()
816- if ((bS == 0))
817- then $Tuple2(bj(), bk())
744+func fc () = {
745+ let bF = aZ()
746+ if ((bF == 0))
747+ then $Tuple2(aV(), aW())
818748 else {
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)
749+ let fd = (bF > 0)
750+ let fe = df(fd, aI(bF), false)
751+ let ff = fe._1
752+ let fg = fe._2
753+ let fh = fe._3
754+ $Tuple2(fg, fh)
825755 }
826756 }
827757
828758
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)
759+func fi (fj,aZ,fk,fl) = {
760+ let fm = toBigInt(fj)
761+ let fn = toBigInt(aZ)
762+ let fo = toBigInt(fk)
763+ let fp = toBigInt(fl)
764+ let aL = aH(fo, fm)
765+ let fq = (fm + fn)
766+ let fr = aG(aL, fq)
767+ let fs = aG(fr, fq)
768+ let ft = aG(fp, fs)
769+ toInt(ft)
840770 }
841771
842772
843-func gf (gg,cx,cy) = {
844- let bS = bn()
845- if ((bS == 0))
773+func fu (fv,ck,cl) = {
774+ let bF = aZ()
775+ if ((bF == 0))
846776 then {
847- let gh = aK(aM(gg, cy), cx)
848- $Tuple3(gh, aD, 0)
777+ let fw = aD(aF(fv, cl), ck)
778+ $Tuple3(fw, au, 0)
849779 }
850780 else {
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)
781+ let fd = (bF > 0)
782+ let ff = df(fd, aI(bF), false)._1
783+ let fw = fi(cl, bF, ck, fv)
784+ let fx = au
785+ let fy = dO(bF, ff, ck, fw, cl, fx, ax)._2
786+ $Tuple3(fw, fx, fy)
857787 }
858788 }
859789
860790
861-func gk () = {
862- let gl = dy()
863- let gm = fp()
864- let gn = (gm - gl)
865- if (if (if ((bE() == 0))
791+func fz () = {
792+ let fA = dl()
793+ let fB = dF()
794+ let fC = (fB - fA)
795+ if (if (if ((bq() == 0))
866796 then true
867- else (bF() == 0))
797+ else (br() == 0))
868798 then true
869- else dE())
870- then $Tuple2(0, 0)
871- else if ((0 > gn))
799+ else dr())
800+ then $Tuple3(0, 0, 0)
801+ else if ((0 > fC))
872802 then {
873- let go = aK(aM(gn, bt()), aF)
874- let gp = aK(aM(go, bE()), bF())
875- $Tuple2(go, gp)
803+ let fD = aD(aF(fC, bf()), aw)
804+ if ((bv() == az))
805+ then {
806+ let fE = aD(aF(fD, bq()), br())
807+ $Tuple3(fD, fE, 0)
808+ }
809+ else {
810+ let fF = aI(aF(fD, bq()))
811+ let fG = aI(aF(fD, br()))
812+ let fH = (fF - fG)
813+ $Tuple3(fD, fD, fH)
814+ }
876815 }
877816 else {
878- let gp = aK(aM(gn, bt()), aF)
879- let go = aK(aM(gp, bF()), bE())
880- $Tuple2(go, gp)
817+ let fE = aD(aF(fC, bf()), aw)
818+ if ((bv() == az))
819+ then {
820+ let fD = aD(aF(fE, br()), bq())
821+ $Tuple3(fD, fE, 0)
822+ }
823+ else {
824+ let fG = aI(aF(fE, br()))
825+ let fF = aI(aF(fE, bq()))
826+ let fH = (fG - fF)
827+ $Tuple3(fE, fE, fH)
828+ }
881829 }
882830 }
883831
884832
885-func gq (gr,gs) = {
886- let gt = bg()
887- let gu = aM(gt, gs)
888- let gv = if ((gr != ""))
833+func fI (fJ,fK) = {
834+ let fL = aS()
835+ let fM = aF(fL, fK)
836+ let fN = if ((fJ != ""))
889837 then {
890- let gw = bc(au(), ai(aw, gr))
891- if ((gw == ax))
838+ let fO = aO(am(), ab(ao, fJ))
839+ if ((fO == ap))
892840 then {
893- let gx = be(au(), ai(av, gr))
894- let gy = aM(gu, gx)
895- $Tuple2(gy, true)
841+ let fP = aQ(am(), ab(an, fJ))
842+ let fQ = aF(fM, fP)
843+ $Tuple2(fQ, true)
896844 }
897845 else throw("Invalid attached artifact")
898846 }
899- else $Tuple2(gu, false)
900- let gy = gv._1
901- let gz = gv._2
902- $Tuple2(gy, gz)
847+ else $Tuple2(fM, false)
848+ let fQ = fN._1
849+ let fR = fN._2
850+ $Tuple2(fQ, fR)
903851 }
904852
905853
906-func gA (bU,gB) = {
907- let eH = bT(bU)._1
908- if ((eH == 0))
909- then true
910- else (bY(bU) == gB)
911- }
912-
913-
914-func gC (bU,gB) = (bY(bU) == gB)
915-
916-
917-func gD (bU,gr) = {
918- let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919- if ((gE == gE))
854+func fS (bH,fJ) = {
855+ let fT = invoke(aj(), "computeFeeDiscount", [bH], nil)
856+ if ((fT == fT))
920857 then {
921- let gF = {
922- let bW = gE
923- if ($isInstanceOf(bW, "Int"))
858+ let fU = {
859+ let bL = fT
860+ if ($isInstanceOf(bL, "Int"))
924861 then {
925- let gG = bW
926- gG
862+ let fV = bL
863+ fV
927864 }
928865 else throw("Invalid computeFeeDiscount result")
929866 }
930- let gH = gq(gr, gF)
931- let gy = gH._1
932- let gz = gH._2
933- $Tuple2(gy, gz)
867+ let fW = fI(fJ, fU)
868+ let fQ = fW._1
869+ let fR = fW._2
870+ $Tuple2(fQ, fR)
934871 }
935872 else throw("Strict value is not equal to itself.")
936873 }
937874
938875
939-func gI (bL) = {
940- let gJ = if ((size(bL.payments) > 1))
941- then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
876+func fX (by) = {
877+ let fY = if ((size(by.payments) > 1))
878+ then toBase58String(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifactId"))
942879 else ""
943- gJ
880+ fY
944881 }
945882
946883
947-func gK (gL) = {
948- let gM = aM(gL, bH())
949- let gN = (gL - gM)
950- $Tuple2(gM, gN)
884+func fZ (ga) = {
885+ let gb = aF(ga, bt())
886+ let gc = (ga - gb)
887+ $Tuple2(gb, gc)
951888 }
952889
953890
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)]
891+func gd (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = [IntegerEntry(r, ge), IntegerEntry(s, gf), IntegerEntry(t, gg), IntegerEntry(q, gh), IntegerEntry(o, ep), IntegerEntry(v, gi), IntegerEntry(w, gj), IntegerEntry(u, gk), IntegerEntry(x, gl), IntegerEntry(y, dE), IntegerEntry(z, gm), IntegerEntry(A, gm), IntegerEntry(p, go), IntegerEntry(B, gp)]
955892
956893
957-func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
894+func gq (gr,gs,gt,gu,gv) = [IntegerEntry(E, gr), IntegerEntry(C, gs), IntegerEntry(D, gt), IntegerEntry(F, gu), IntegerEntry(G, gv)]
958895
959896
960-func hg (hh,ak) = if (hh)
961- then {
962- let hi = bG()
963-[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
964- }
897+func gw (gx,bH,bI) = {
898+ let bJ = ((bH + "_") + toString(bI))
899+ if (gx)
900+ then {
901+ let gy = bs()
902+[IntegerEntry(ab(i, bJ), (gy + 1)), IntegerEntry(d, (gy + 1))]
903+ }
904+ else nil
905+ }
906+
907+
908+func gz (gx,bH,bI,ep) = {
909+ let bJ = ((bH + "_") + toString(bI))
910+ if (gx)
911+ then [IntegerEntry(ab(j, bJ), ep)]
912+ else nil
913+ }
914+
915+
916+func gA (bH,eo,gB,gC,cP,gD) = {
917+ let fd = bN(eo)
918+ let bJ = ((bH + "_") + toString(fd))
919+[IntegerEntry(ab(e, bJ), eo), IntegerEntry(ab(f, bJ), gB), IntegerEntry(ab(g, bJ), gC), IntegerEntry(ab(h, bJ), cP), IntegerEntry(ab(k, bJ), gD)]
920+ }
921+
922+
923+func gE (ck,cl) = [IntegerEntry(H, ck), IntegerEntry(I, cl)]
924+
925+
926+func gF (cp,cq) = [IntegerEntry(J, cp), IntegerEntry(K, cq)]
927+
928+
929+func gG (ck,cl,gH,gI,gJ,gK,gL,gM) = {
930+ let cp = aX()
931+ let cq = aY()
932+ if (((gJ - gK) != gH))
933+ then throw(((((("Invalid AMM state data: " + toString(gJ)) + " + ") + toString(gK)) + " != ") + toString(gH)))
934+ else (gE(ck, cl) ++ [IntegerEntry(L, gH), IntegerEntry(O, gI), IntegerEntry(M, gJ), IntegerEntry(N, gK), IntegerEntry(Q, gL), IntegerEntry(P, gM)])
935+ }
936+
937+
938+func gN (bH,bI) = {
939+ let bJ = ((bH + "_") + toString(bI))
940+[DeleteEntry(ab(e, bJ)), DeleteEntry(ab(f, bJ)), DeleteEntry(ab(g, bJ)), DeleteEntry(ab(h, bJ)), DeleteEntry(ab(j, bJ)), DeleteEntry(ab(k, bJ))]
941+ }
942+
943+
944+func gO (ad,gP) = {
945+ let gQ = assetBalance(this, ag())
946+ if ((gP > gQ))
947+ then throw(((("Unable to withdraw " + toString(gP)) + " from contract balance ") + toString(gQ)))
948+ else [ScriptTransfer(ad, gP, ag())]
949+ }
950+
951+
952+func gR (by) = if ((0 > by))
953+ then throw("Balance")
954+ else [IntegerEntry(c, by)]
955+
956+
957+func gS (by) = [ScriptTransfer(ah(), by, ag())]
958+
959+
960+func gT (gU,by) = if (gU)
961+ then [Burn(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifact"), 1)]
965962 else nil
966963
967964
968-func hj (hh,ak,eC) = if (hh)
969- then [IntegerEntry(ai(k, ak), eC)]
970- else nil
965+@Callable(by)
966+func pause () = if ((by.caller != af()))
967+ then throw("Invalid pause params")
968+ else [BooleanEntry(m, true)]
971969
972970
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)]
971+
972+@Callable(by)
973+func unpause () = if ((by.caller != af()))
974+ then throw("Invalid unpause params")
975+ else [BooleanEntry(m, false)]
974976
975977
976-func ho (hp) = {
977- let fq = ((bJ() / 1000) / 60)
978- let hq = valueOrElse(getInteger(this, D), 0)
979- if ((hq > fq))
980- then throw("TWAP out-of-order")
981- else {
982- let fG = if ((hq == 0))
983- then fq
984- else hq
985- if ((fq > hq))
986- then {
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))]
992- }
993- else {
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)]
999- }
1000- }
1001- }
1002978
1003-
1004-func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
1005-
1006-
1007-func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
1008-
1009-
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))))
1016- }
1017-
1018-
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))]
1020-
1021-
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())]
1027- }
1028-
1029-
1030-func hI (bL) = if ((0 > bL))
1031- then throw("Balance")
1032- else [IntegerEntry(c, bL)]
1033-
1034-
1035-func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
1036-
1037-
1038-func hK (hL,bL) = if (hL)
1039- then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
1040- else nil
1041-
1042-
1043-@Callable(bL)
1044-func pause () = if ((bL.caller != am()))
1045- then throw("Invalid pause params")
979+@Callable(by)
980+func setCloseOnly () = if ((by.caller != af()))
981+ then throw("Invalid setCloseOnly params")
1046982 else [BooleanEntry(n, true)]
1047983
1048984
1049985
1050-@Callable(bL)
1051-func unpause () = if ((bL.caller != am()))
1052- then throw("Invalid unpause params")
986+@Callable(by)
987+func unsetCloseOnly () = if ((by.caller != af()))
988+ then throw("Invalid unsetCloseOnly params")
1053989 else [BooleanEntry(n, false)]
1054990
1055991
1056992
1057-@Callable(bL)
1058-func setCloseOnly () = if ((bL.caller != am()))
1059- then throw("Invalid setCloseOnly params")
1060- else [BooleanEntry(o, true)]
1061-
1062-
1063-
1064-@Callable(bL)
1065-func unsetCloseOnly () = if ((bL.caller != am()))
1066- then throw("Invalid unsetCloseOnly params")
1067- else [BooleanEntry(o, false)]
1068-
1069-
1070-
1071-@Callable(bL)
1072-func addLiquidity (cs) = if (if ((bL.caller != am()))
993+@Callable(by)
994+func addLiquidity (cf) = if (if ((by.caller != af()))
1073995 then true
1074- else (0 >= cs))
996+ else (0 >= cf))
1075997 then throw("Invalid addLiquidity params")
1076998 else {
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))
999+ let ck = aV()
1000+ let cl = aW()
1001+ let cp = aX()
1002+ let cq = aY()
1003+ let gV = aD(aF(ck, cp), aF(cl, cq))
1004+ let gW = (ck + cf)
1005+ let gX = (aD(aF(gW, cp), gV) - cl)
1006+ let gY = (cl + gX)
1007+ let gZ = fu(dl(), gW, gY)
1008+ let ha = gZ._1
1009+ let hb = gZ._2
1010+ let fy = gZ._3
1011+ let hc = if ((fy != 0))
10901012 then {
1091- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092- if ((hT == hT))
1013+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1014+ if ((hc == hc))
10931015 then nil
10941016 else throw("Strict value is not equal to itself.")
10951017 }
10961018 else nil
1097- if ((hT == hT))
1098- then (hv(hN, hP) ++ hw(hR, hS))
1019+ if ((hc == hc))
1020+ then (gE(gW, gY) ++ gF(ha, hb))
10991021 else throw("Strict value is not equal to itself.")
11001022 }
11011023
11021024
11031025
1104-@Callable(bL)
1105-func removeLiquidity (cs) = if (if ((bL.caller != am()))
1026+@Callable(by)
1027+func removeLiquidity (cf) = if (if ((by.caller != af()))
11061028 then true
1107- else (cs >= 0))
1029+ else (cf >= 0))
11081030 then throw("Invalid removeLiquidity params")
11091031 else {
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))
1032+ let ck = aV()
1033+ let cl = aW()
1034+ let cp = aX()
1035+ let cq = aY()
1036+ let gV = aD(aF(ck, cp), aF(cl, cq))
1037+ let gW = (ck - cf)
1038+ let hd = aI((aD(aF(gW, cp), gV) - cl))
1039+ let gY = (cl - hd)
1040+ let he = fu(dl(), gW, gY)
1041+ let ha = he._1
1042+ let hb = he._2
1043+ let fy = he._3
1044+ let hc = if ((fy != 0))
11231045 then {
1124- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125- if ((hT == hT))
1046+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1047+ if ((hc == hc))
11261048 then nil
11271049 else throw("Strict value is not equal to itself.")
11281050 }
11291051 else nil
1130- if ((hT == hT))
1131- then (hv(hN, hP) ++ hw(hR, hS))
1052+ if ((hc == hc))
1053+ then (gE(gW, gY) ++ gF(ha, hb))
11321054 else throw("Strict value is not equal to itself.")
11331055 }
11341056
11351057
11361058
1137-@Callable(bL)
1138-func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
1059+@Callable(by)
1060+func changeSettings (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gh))
1061+ then true
1062+ else (0 >= ge))
1063+ then true
1064+ else (0 >= gf))
1065+ then true
1066+ else (0 >= gg))
1067+ then true
1068+ else (0 >= ep))
1069+ then true
1070+ else (0 >= gi))
1071+ then true
1072+ else (0 >= gj))
1073+ then true
1074+ else (0 >= gk))
1075+ then true
1076+ else (0 >= gl))
1077+ then true
1078+ else (0 >= dE))
1079+ then true
1080+ else (0 >= gm))
1081+ then true
1082+ else (gm > au))
1083+ then true
1084+ else (0 >= gn))
1085+ then true
1086+ else (0 >= go))
1087+ then true
1088+ else if ((gp != aA))
1089+ then (gp != az)
1090+ else false)
1091+ then true
1092+ else !(ca()))
1093+ then true
1094+ else (by.caller != af()))
11391095 then throw("Invalid changeSettings params")
1140- else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
1096+ else gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)
11411097
11421098
11431099
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))
1100+@Callable(by)
1101+func initialize (ck,cl,gh,ge,gf,gg,ep,hf,hg,hh,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= ck))
11461102 then true
1147- else (0 >= cy))
1103+ else (0 >= cl))
11481104 then true
1149- else (0 >= gS))
1105+ else (0 >= gh))
11501106 then true
1151- else (0 >= gP))
1107+ else (0 >= ge))
11521108 then true
1153- else (0 >= gQ))
1109+ else (0 >= gf))
11541110 then true
1155- else (0 >= gR))
1111+ else (0 >= gg))
11561112 then true
1157- else (0 >= eC))
1113+ else (0 >= ep))
11581114 then true
1159- else (0 >= gT))
1115+ else (0 >= gi))
11601116 then true
1161- else (0 >= gU))
1117+ else (0 >= gj))
11621118 then true
1163- else (0 >= gV))
1119+ else (0 >= gk))
11641120 then true
1165- else (0 >= gW))
1121+ else (0 >= gl))
11661122 then true
1167- else (0 >= dR))
1123+ else (0 >= dE))
11681124 then true
1169- else (0 >= gX))
1125+ else (0 >= gm))
11701126 then true
1171- else (gX > aD))
1127+ else (gm > au))
11721128 then true
1173- else (0 >= gY))
1129+ else (0 >= gn))
11741130 then true
1175- else (0 >= gZ))
1131+ else (0 >= go))
11761132 then true
1177- else cn())
1133+ else if ((gp != aA))
1134+ then (gp != az)
1135+ else false)
11781136 then true
1179- else (bL.caller != this))
1137+ else ca())
1138+ then true
1139+ else (by.caller != this))
11801140 then throw("Invalid initialize parameters")
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)))])
1141+ else ((((gG(ck, cl, 0, 0, 0, 0, 0, 0) ++ gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)) ++ gq((bw() + gh), 0, 0, 0, 0)) ++ gR(0)) ++ [BooleanEntry(l, true), StringEntry(a, hf), StringEntry(b, hg), StringEntry(S, toString(addressFromStringValue(hh)))])
11821142
11831143
11841144
1185-@Callable(bL)
1186-func increasePosition (hZ,ia,ib,ic) = {
1187- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188- if ((id == id))
1145+@Callable(by)
1146+func increasePosition (bI,hi,hj,hk) = {
1147+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1148+ if ((hl == hl))
11891149 then {
1190- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191- if ((ie == ie))
1150+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1151+ if ((hm == hm))
11921152 then {
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)
1153+ let bH = bx(by)
1154+ let hn = by.payments[0].amount
1155+ let ho = by.payments[0].assetId
1156+ let hp = toBase58String(value(ho))
1157+ let hq = (ho == ag())
1158+ if (if (if (if (if (if (if (if (if ((bI != aq))
1159+ then (bI != ar)
12001160 else false)
12011161 then true
1202- else (0 >= if))
1162+ else (0 >= hn))
12031163 then true
1204- else !(cn()))
1164+ else !(ca()))
12051165 then true
1206- else !(ih))
1166+ else !(hq))
12071167 then true
1208- else !(gA(bU, ig)))
1168+ else !(bz(aD(au, hi), aU(), true)))
12091169 then true
1210- else !(bM(aK(aD, ia), bi(), true)))
1170+ else cb())
12111171 then true
1212- else co())
1172+ else cc())
12131173 then true
1214- else cp())
1215- then true
1216- else dE())
1174+ else dr())
12171175 then throw("Invalid increasePosition parameters")
12181176 else {
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))
1177+ let hr = fS(bH, fX(by))
1178+ let fQ = hr._1
1179+ let fR = hr._2
1180+ let gP = aD(hn, (aF(fQ, hi) + au))
1181+ let hs = (hn - gP)
1182+ let ht = invoke(al(), "acceptPaymentWithLink", [bH, hk], [AttachedPayment(ag(), hs)])
1183+ if ((ht == ht))
12261184 then {
1227- let il = {
1228- let bW = ik
1229- if ($isInstanceOf(bW, "Int"))
1185+ let hu = {
1186+ let bL = ht
1187+ if ($isInstanceOf(bL, "Int"))
12301188 then {
1231- let gG = bW
1232- gG
1189+ let fV = bL
1190+ fV
12331191 }
12341192 else throw("Invalid referrerFee")
12351193 }
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
1194+ let hv = (hs - hu)
1195+ let hw = bG(bH, bI)
1196+ let eu = hw._1
1197+ let ev = hw._2
1198+ let ew = hw._3
1199+ let ex = hw._4
1200+ let ey = hw._5
1201+ let hx = (eu == 0)
1202+ let hy = if ((eu > 0))
1203+ then (bI == aq)
1204+ else (bI == ar)
1205+ let hz = if (!(hx))
1206+ then hy
12491207 else false
1250- let ir = (hZ == ay)
1251- let is = if (if (io)
1208+ let hA = (bI == aq)
1209+ let hB = if (if (hx)
12521210 then true
1253- else iq)
1211+ else hz)
12541212 then {
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))
1213+ let hC = aF(gP, hi)
1214+ let hD = co(hA, hC)
1215+ let cv = hD._1
1216+ let cs = hD._2
1217+ let ct = hD._3
1218+ let eE = hD._4
1219+ if (if ((hj != 0))
1220+ then (hj > aI(cv))
12631221 else false)
1264- then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
1222+ then throw(((("Limit error: " + toString(aI(cv))) + " < ") + toString(hj)))
12651223 else {
1266- let ff = (eH + cI)
1267- let iv = (bq() + (if ((ff > 0))
1268- then it
1224+ let eS = (eu + cv)
1225+ let hE = (bc() + (if ((eS > 0))
1226+ then hC
12691227 else 0))
1270- let iw = (bp() + (if ((0 > ff))
1271- then it
1228+ let hF = (bb() + (if ((0 > eS))
1229+ then hC
12721230 else 0))
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)))
1231+ let hG = cK(eu, ev, ex, ey, gP)
1232+ let cS = hG._1
1233+ let eM = hG._2
1234+ let eN = hG._3
1235+ let cJ = hG._4
1236+ if (!(dx(cs, ct)))
12791237 then throw("Over max spread limit")
1280- else if (!(dO(iv, iw)))
1238+ else if (!(dB(hE, hF)))
12811239 then throw("Over max open notional")
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)
1240+ else $Tuple14(eS, cS, (ew + hC), bE(eS), bw(), ct, cs, eE, (ba() + hC), (br() + (if ((eS > 0))
1241+ then aI(cv)
1242+ else 0)), (bq() + (if ((0 > eS))
1243+ then aI(cv)
1244+ else 0)), hE, hF, cJ)
12871245 }
12881246 }
12891247 else {
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))
1248+ let hC = aF(gP, hi)
1249+ let hH = dR(toString(by.caller), bI, ax)
1250+ let eH = hH._1
1251+ let dQ = hH._2
1252+ if ((eH > hC))
12951253 then throw("Use decreasePosition to decrease position size")
12961254 else throw("Close position first")
12971255 }
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))
1256+ let eS = hB._1
1257+ let hI = hB._2
1258+ let eU = hB._3
1259+ let hJ = hB._4
1260+ let hK = hB._5
1261+ let ct = hB._6
1262+ let cs = hB._7
1263+ let eE = hB._8
1264+ let hL = hB._9
1265+ let hM = hB._10
1266+ let hN = hB._11
1267+ let hE = hB._12
1268+ let hF = hB._13
1269+ let cJ = hB._14
1270+ let hO = fZ((hv + cJ))
1271+ let gb = hO._1
1272+ let gc = hO._2
1273+ let hP = if ((gP >= cJ))
1274+ then invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), (gP - cJ))])
1275+ else invoke(ai(), "withdrawLocked", [(cJ - gP)], nil)
1276+ if ((hP == hP))
13191277 then {
1320- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321- if ((iH == iH))
1278+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1279+ if ((hQ == hQ))
13221280 then {
1323- let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324- if ((iI == iI))
1281+ let hR = invoke(aj(), "notifyFees", [bH, hv], nil)
1282+ if ((hR == hR))
13251283 then {
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))
1284+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1285+ if ((hS == hS))
1286+ then ((((((gA(bH, eS, hI, eU, hJ, hK) ++ gw(hx, bH, bI)) ++ gz(hx, bH, bI, fQ)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gS(gb)) ++ gR(((aR() + gP) - cJ))) ++ gT(fR, by))
13291287 else throw("Strict value is not equal to itself.")
13301288 }
13311289 else throw("Strict value is not equal to itself.")
13321290 }
13331291 else throw("Strict value is not equal to itself.")
13341292 }
13351293 else throw("Strict value is not equal to itself.")
13361294 }
13371295 else throw("Strict value is not equal to itself.")
13381296 }
13391297 }
13401298 else throw("Strict value is not equal to itself.")
13411299 }
13421300 else throw("Strict value is not equal to itself.")
13431301 }
13441302
13451303
13461304
1347-@Callable(bL)
1348-func addMargin () = {
1349- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350- if ((id == id))
1305+@Callable(by)
1306+func addMargin (bI) = {
1307+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1308+ if ((hl == hl))
13511309 then {
1352- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353- if ((ie == ie))
1310+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1311+ if ((hm == hm))
13541312 then {
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))
1313+ let bH = toString(by.caller)
1314+ let gP = by.payments[0].amount
1315+ let ho = by.payments[0].assetId
1316+ let hp = toBase58String(value(ho))
1317+ let hq = (ho == ag())
1318+ if (if (if (if (if (!(hq))
13611319 then true
1362- else !(ce(toString(bL.caller))))
1320+ else !(bR(toString(by.caller), bI)))
13631321 then true
1364- else !(gC(bU, ig)))
1322+ else !(ca()))
13651323 then true
1366- else !(cn()))
1324+ else cb())
13671325 then true
1368- else co())
1369- then true
1370- else cp())
1371- then true
1372- else dE())
1326+ else dr())
13731327 then throw("Invalid addMargin parameters")
13741328 else {
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))
1329+ let hT = bG(bH, bI)
1330+ let eu = hT._1
1331+ let ev = hT._2
1332+ let ew = hT._3
1333+ let ex = hT._4
1334+ let ey = hT._5
1335+ let hP = invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), gP)])
1336+ if ((hP == hP))
13831337 then {
1384- let cW = cS(eI, eL)
1385- let iL = if ((cW > 0))
1338+ let cJ = cF(ev, ey)
1339+ let hU = if ((cJ > 0))
13861340 then {
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))
1341+ let hV = fZ(cJ)
1342+ let gb = hV._1
1343+ let gc = hV._2
1344+ let hW = invoke(ai(), "withdrawLocked", [gb], nil)
1345+ if ((hW == hW))
13921346 then {
1393- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394- if ((iO == iO))
1395- then hJ(gM)
1347+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1348+ if ((hX == hX))
1349+ then gS(gb)
13961350 else throw("Strict value is not equal to itself.")
13971351 }
13981352 else throw("Strict value is not equal to itself.")
13991353 }
14001354 else nil
1401- if ((iL == iL))
1402- then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
1355+ if ((hU == hU))
1356+ then ((gA(bH, eu, ((ev - cJ) + gP), ew, ex, bw()) ++ gR(((aR() + gP) - cJ))) ++ hU)
14031357 else throw("Strict value is not equal to itself.")
14041358 }
14051359 else throw("Strict value is not equal to itself.")
14061360 }
14071361 }
14081362 else throw("Strict value is not equal to itself.")
14091363 }
14101364 else throw("Strict value is not equal to itself.")
14111365 }
14121366
14131367
14141368
1415-@Callable(bL)
1416-func removeMargin (hG) = {
1417- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418- if ((id == id))
1369+@Callable(by)
1370+func removeMargin (gP,bI) = {
1371+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1372+ if ((hl == hl))
14191373 then {
1420- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421- if ((ie == ie))
1374+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1375+ if ((hm == hm))
14221376 then {
1423- let bU = toString(bL.caller)
1424- if (if (if (if (if ((0 >= hG))
1377+ let bH = toString(by.caller)
1378+ if (if (if (if (if ((0 >= gP))
14251379 then true
1426- else !(ce(bU)))
1380+ else !(bR(bH, bI)))
14271381 then true
1428- else !(cn()))
1382+ else !(ca()))
14291383 then true
1430- else co())
1384+ else cb())
14311385 then true
1432- else dE())
1386+ else dr())
14331387 then throw("Invalid removeMargin parameters")
14341388 else {
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))
1389+ let hY = bG(bH, bI)
1390+ let eu = hY._1
1391+ let ev = hY._2
1392+ let ew = hY._3
1393+ let ex = hY._4
1394+ let ey = hY._5
1395+ let hZ = cK(eu, ev, ex, ey, -(gP))
1396+ let cS = hZ._1
1397+ let cT = hZ._2
1398+ let cO = hZ._3
1399+ let cJ = hZ._4
1400+ if ((cT != 0))
14471401 then throw("Invalid removed margin amount")
14481402 else {
1449- let fk = ej(df, dg, eJ)
1450- if (!(bM(fk, bi(), true)))
1451- then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
1403+ let eX = dW(cS, cT, ew)
1404+ if (!(bz(eX, aU(), true)))
1405+ then throw(((("Too much margin removed: " + toString(eX)) + " < ") + toString(aU())))
14521406 else {
1453- let iR = gK(cW)
1454- let gM = iR._1
1455- let gN = iR._2
1456- let iL = if ((cW > 0))
1407+ let ia = fZ(cJ)
1408+ let gb = ia._1
1409+ let gc = ia._2
1410+ let hU = if ((cJ > 0))
14571411 then {
1458- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459- if ((iO == iO))
1460- then hJ(gM)
1412+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1413+ if ((hX == hX))
1414+ then gS(gb)
14611415 else throw("Strict value is not equal to itself.")
14621416 }
14631417 else nil
1464- if ((iL == iL))
1418+ if ((hU == hU))
14651419 then {
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)
1420+ let hW = invoke(ai(), "withdrawLocked", [(gP + gb)], nil)
1421+ if ((hW == hW))
1422+ then (((gA(bH, eu, cS, ew, bE(eu), bw()) ++ gO(by.caller, gP)) ++ gR(((aR() - gP) - cJ))) ++ hU)
14691423 else throw("Strict value is not equal to itself.")
14701424 }
14711425 else throw("Strict value is not equal to itself.")
14721426 }
14731427 }
14741428 }
14751429 }
14761430 else throw("Strict value is not equal to itself.")
14771431 }
14781432 else throw("Strict value is not equal to itself.")
14791433 }
14801434
14811435
14821436
1483-@Callable(bL)
1484-func closePosition (eB,eD,eE) = {
1485- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486- if ((id == id))
1437+@Callable(by)
1438+func closePosition (eo,bI,eq,er) = {
1439+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1440+ if ((hl == hl))
14871441 then {
1488- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489- if ((ie == ie))
1442+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1443+ if ((hm == hm))
14901444 then {
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)))
1445+ let bH = bx(by)
1446+ let ib = valueOrErrorMessage(addressFromString(bH), "Invalid caller")
1447+ let bQ = bO(bH)
1448+ if (if (if (if (if (if (!(bR(bH, bI)))
14951449 then true
1496- else !(cn()))
1450+ else !(ca()))
14971451 then true
1498- else co())
1452+ else cb())
14991453 then true
1500- else (0 >= eB))
1454+ else (0 >= eo))
15011455 then true
1502- else (0 > eD))
1456+ else (0 > eq))
15031457 then true
1504- else dE())
1458+ else dr())
15051459 then throw("Invalid closePosition parameters")
15061460 else {
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))
1461+ let ey = bG(bH, bI)._5
1462+ let ic = en(bH, bI, eo, bQ, eq, er, true, true)
1463+ let eS = ic._1
1464+ let fb = ic._2
1465+ let eU = ic._3
1466+ let eV = ic._4
1467+ let eO = ic._5
1468+ let eJ = ic._6
1469+ let fa = ic._7
1470+ let cs = ic._8
1471+ let ct = ic._9
1472+ let eE = ic._10
1473+ let hL = ic._11
1474+ let hM = ic._12
1475+ let hN = ic._13
1476+ let hE = ic._14
1477+ let hF = ic._15
1478+ let id = ic._16
1479+ if ((eO > 0))
15261480 then throw("Invalid closePosition parameters: bad debt")
1527- else if ((eL >= bJ()))
1481+ else if ((ey >= bw()))
15281482 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15291483 else {
1530- let eO = (ff != 0)
1531- let iV = (fn + iU)
1532- let iW = (bf() - iV)
1533- let iX = if ((0 > iW))
1484+ let eB = (eS != 0)
1485+ let ie = (fa + id)
1486+ let if = (aR() - ie)
1487+ let ig = if ((0 > if))
15341488 then 0
1535- else iW
1536- let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537- if ((iN == iN))
1489+ else if
1490+ let hW = invoke(ai(), "withdrawLocked", [ie], nil)
1491+ if ((hW == hW))
15381492 then {
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))
1493+ let ht = invoke(al(), "acceptPayment", [bH], [AttachedPayment(ag(), id)])
1494+ if ((ht == ht))
15441495 then {
1545- let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546- if ((iI == iI))
1496+ let hu = {
1497+ let bL = ht
1498+ if ($isInstanceOf(bL, "Int"))
1499+ then {
1500+ let fV = bL
1501+ fV
1502+ }
1503+ else throw("Invalid referrerFee")
1504+ }
1505+ let ih = fZ((id - hu))
1506+ let gb = ih._1
1507+ let gc = ih._2
1508+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1509+ if ((hQ == hQ))
15471510 then {
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))
1511+ let hR = invoke(aj(), "notifyFees", [bH, id], nil)
1512+ if ((hR == hR))
1513+ then {
1514+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1515+ if ((hS == hS))
1516+ then (((((if (eB)
1517+ then gA(bH, eS, fb, eU, eV, bw())
1518+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ (if ((fa > 0))
1519+ then gO(ib, fa)
1520+ else nil)) ++ gR(ig)) ++ gS(gb))
1521+ else throw("Strict value is not equal to itself.")
1522+ }
15551523 else throw("Strict value is not equal to itself.")
15561524 }
15571525 else throw("Strict value is not equal to itself.")
15581526 }
15591527 else throw("Strict value is not equal to itself.")
15601528 }
15611529 else throw("Strict value is not equal to itself.")
15621530 }
15631531 }
15641532 }
15651533 else throw("Strict value is not equal to itself.")
15661534 }
15671535 else throw("Strict value is not equal to itself.")
15681536 }
15691537
15701538
15711539
1572-@Callable(bL)
1573-func liquidate (bU) = {
1574- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575- if ((id == id))
1540+@Callable(by)
1541+func liquidate (bH,bI) = {
1542+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1543+ if ((hl == hl))
15761544 then {
1577- let iZ = en(bU, aG)
1578- let ja = if (dT())
1545+ let ii = ea(bH, bI, ax)
1546+ let ij = if (dG())
15791547 then {
1580- let jb = en(bU, aH)
1581- aQ(iZ, jb)
1548+ let ik = ea(bH, bI, ay)
1549+ aJ(ii, ik)
15821550 }
1583- else iZ
1584- if (if (if (if (if (!(bM(ja, bv(), false)))
1551+ else ii
1552+ if (if (if (if (if (!(bz(ij, bh(), false)))
15851553 then true
1586- else !(ce(bU)))
1554+ else !(bR(bH, bI)))
15871555 then true
1588- else !(cn()))
1556+ else !(ca()))
15891557 then true
1590- else co())
1558+ else cb())
15911559 then true
1592- else dE())
1560+ else dr())
15931561 then throw("Unable to liquidate")
15941562 else {
1595- let jc = if (if ((iZ > bw()))
1596- then (bx() > 0)
1563+ let il = if (if ((ii > bi()))
1564+ then (bj() > 0)
15971565 else false)
1598- then (aD > bx())
1566+ then (au > bj())
15991567 else false
1600- let eH = bT(bU)._1
1601- let dX = aP(eH)
1602- let jd = if (jc)
1568+ let eu = bG(bH, bI)._1
1569+ let dK = aI(eu)
1570+ let im = if (il)
16031571 then {
1604- let je = ev(bU, eH)
1605- let jf = aK(aP(je), dX)
1606- $Tuple2(jf, aP(je))
1572+ let in = ei(bH, eu)
1573+ let io = aD(aI(in), dK)
1574+ $Tuple2(io, aI(in))
16071575 }
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))
1576+ else $Tuple2(0, dK)
1577+ let io = im._1
1578+ let in = im._2
1579+ let ip = en(bH, bI, if (il)
1580+ then in
1581+ else dK, bi(), 0, true, false, true)
1582+ let eS = ip._1
1583+ let fb = ip._2
1584+ let eU = ip._3
1585+ let eV = ip._4
1586+ let eO = ip._5
1587+ let eJ = ip._6
1588+ let fa = ip._7
1589+ let cs = ip._8
1590+ let ct = ip._9
1591+ let eE = ip._10
1592+ let hL = ip._11
1593+ let hM = ip._12
1594+ let hN = ip._13
1595+ let hE = ip._14
1596+ let hF = ip._15
1597+ let iq = ip._16
1598+ let ir = (iq / 2)
1599+ let gc = (iq - ir)
1600+ let if = (aR() - iq)
1601+ let is = if ((0 > if))
16341602 then 0
1635- else iW
1636- let iO = if ((fb > 0))
1603+ else if
1604+ let hX = if ((eO > 0))
16371605 then {
1638- let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639- if ((iO == iO))
1606+ let hX = invoke(ai(), "exchangeFreeAndLocked", [(eO + iq)], nil)
1607+ if ((hX == hX))
16401608 then nil
16411609 else throw("Strict value is not equal to itself.")
16421610 }
16431611 else nil
1644- if ((iO == iO))
1612+ if ((hX == hX))
16451613 then {
1646- let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647- if ((iN == iN))
1614+ let hW = invoke(ai(), "withdrawLocked", [iq], nil)
1615+ if ((hW == hW))
16481616 then {
1649- let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650- if ((jk == jk))
1617+ let it = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1618+ if ((it == it))
16511619 then {
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))
1620+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1621+ if ((hS == hS))
1622+ then ((((if (il)
1623+ then gA(bH, eS, fb, eU, eV, bw())
1624+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gO(by.caller, ir)) ++ gR(is))
16571625 else throw("Strict value is not equal to itself.")
16581626 }
16591627 else throw("Strict value is not equal to itself.")
16601628 }
16611629 else throw("Strict value is not equal to itself.")
16621630 }
16631631 else throw("Strict value is not equal to itself.")
16641632 }
16651633 }
16661634 else throw("Strict value is not equal to itself.")
16671635 }
16681636
16691637
16701638
1671-@Callable(bL)
1639+@Callable(by)
16721640 func payFunding () = {
1673- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674- if ((id == id))
1641+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1642+ if ((hl == hl))
16751643 then {
1676- let jl = br()
1677- if (if (if ((jl > bJ()))
1644+ let iu = bd()
1645+ if (if (if ((iu > bw()))
16781646 then true
1679- else !(cn()))
1647+ else !(ca()))
16801648 then true
1681- else co())
1682- then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
1649+ else cb())
1650+ then throw(((("Invalid funding block timestamp: " + toString(bw())) + " < ") + toString(iu)))
16831651 else {
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))
1652+ let fA = dl()
1653+ let iv = fz()
1654+ let fD = iv._1
1655+ let fE = iv._2
1656+ let fH = iv._3
1657+ let iw = if ((fH > 0))
1658+ then {
1659+ let iw = invoke(ai(), "exchangeFreeAndLocked", [-(fH)], nil)
1660+ if ((iw == iw))
1661+ then nil
1662+ else throw("Strict value is not equal to itself.")
1663+ }
1664+ else nil
1665+ if ((iw == iw))
1666+ then gq((iu + bg()), (bo() + fE), (bp() + fD), aD(fE, fA), aD(fD, fA))
1667+ else throw("Strict value is not equal to itself.")
16891668 }
16901669 }
16911670 else throw("Strict value is not equal to itself.")
16921671 }
16931672
16941673
16951674
1696-@Callable(bL)
1675+@Callable(by)
16971676 func syncTerminalPriceToOracle () = {
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())
1677+ let ck = aV()
1678+ let cl = aW()
1679+ let ix = fu(dl(), ck, cl)
1680+ let ha = ix._1
1681+ let hb = ix._2
1682+ let fy = ix._3
1683+ let iy = if (if ((0 > fy))
1684+ then (aI(fy) > aR())
17061685 else false)
1707- then -(bf())
1708- else gj
1709- let hT = if ((jo != 0))
1686+ then -(aR())
1687+ else fy
1688+ let hc = if ((iy != 0))
17101689 then {
1711- let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712- if ((hT == hT))
1690+ let hc = invoke(ai(), "exchangeFreeAndLocked", [iy], nil)
1691+ if ((hc == hc))
17131692 then nil
17141693 else throw("Strict value is not equal to itself.")
17151694 }
17161695 else nil
1717- if ((hT == hT))
1718- then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
1696+ if ((hc == hc))
1697+ then (gR((aR() + iy)) ++ gF(ha, hb))
17191698 else throw("Strict value is not equal to itself.")
17201699 }
17211700
17221701
17231702
1724-@Callable(bL)
1725-func ensureCalledOnce () = if ((bL.caller != this))
1703+@Callable(by)
1704+func ensureCalledOnce () = if ((by.caller != this))
17261705 then throw("Invalid saveCurrentTxId parameters")
17271706 else {
1728- let jp = valueOrElse(getString(this, W), "")
1729- if ((jp != toBase58String(bL.transactionId)))
1730- then [StringEntry(W, jp)]
1707+ let iz = toBase58String(by.transactionId)
1708+ let iA = valueOrElse(getString(this, R), "")
1709+ if ((iA != iz))
1710+ then [StringEntry(R, iz)]
17311711 else throw("Can not call vAMM methods twice in one tx")
17321712 }
17331713
17341714
17351715
1736-@Callable(bL)
1737-func view_calcRemainMarginWithFundingPayment (bU) = {
1738- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739- if ((id == id))
1716+@Callable(by)
1717+func migratePosition (bH) = {
1718+ let bK = getInteger(this, ab(e, bH))
1719+ if (if (isDefined(bK))
1720+ then isDefined(addressFromString(bH))
1721+ else false)
17401722 then {
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)))
1723+ let iB = getIntegerValue(this, ab(e, bH))
1724+ let iC = getIntegerValue(this, ab(f, bH))
1725+ let iD = getIntegerValue(this, ab(g, bH))
1726+ let iE = getIntegerValue(this, ab(h, bH))
1727+ let iF = valueOrElse(getInteger(this, ab(k, bH)), lastBlock.timestamp)
1728+ let iG = valueOrElse(getInteger(this, ab(j, bH)), aS())
1729+ let iH = getIntegerValue(this, ab(i, bH))
1730+ let iI = bN(iB)
1731+ let bJ = ((bH + "_") + toString(iI))
1732+[DeleteEntry(ab(e, bH)), DeleteEntry(ab(f, bH)), DeleteEntry(ab(g, bH)), DeleteEntry(ab(h, bH)), DeleteEntry(ab(k, bH)), DeleteEntry(ab(j, bH)), DeleteEntry(ab(i, bH)), IntegerEntry(ab(e, bJ), iB), IntegerEntry(ab(f, bJ), iC), IntegerEntry(ab(g, bJ), iD), IntegerEntry(ab(h, bJ), iE), IntegerEntry(ab(k, bJ), iF), IntegerEntry(ab(j, bJ), iG), IntegerEntry(ab(i, bJ), iH)]
1733+ }
1734+ else throw(("Nothing to migrate for " + bH))
1735+ }
1736+
1737+
1738+
1739+@Callable(by)
1740+func view_calcRemainMarginWithFundingPayment (bH,bI) = {
1741+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1742+ if ((hl == hl))
1743+ then {
1744+ let iJ = bG(bH, bI)
1745+ let bM = iJ._1
1746+ let dT = iJ._2
1747+ let ec = iJ._3
1748+ let dV = iJ._4
1749+ let ee = iJ._5
1750+ let iK = dR(bH, bI, ax)
1751+ let dM = iK._1
1752+ let dQ = iK._2
1753+ let iL = cK(bM, dT, dV, ee, dQ)
1754+ let cS = iL._1
1755+ let cT = iL._2
1756+ let cO = iL._3
1757+ let cJ = iL._4
1758+ throw(((((((aB(cS) + aB(cO)) + aB(eh(bH, bI))) + aB(dQ)) + aB(cT)) + aB(dM)) + aB(cJ)))
17561759 }
17571760 else throw("Strict value is not equal to itself.")
17581761 }
17591762
17601763
17611764
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))
1765+@Callable(by)
1766+func view_getPegAdjustCost (iM) = {
1767+ let ck = aV()
1768+ let cl = aW()
1769+ let ft = fu(iM, ck, cl)
1770+ throw(toString(ft._3))
17681771 }
17691772
17701773
17711774
1772-@Callable(bL)
1775+@Callable(by)
17731776 func view_getTerminalAmmPrice () = {
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))
1777+ let iN = fc()
1778+ let fg = iN._1
1779+ let fh = iN._2
1780+ let gV = aD(aF(fg, aX()), aF(fh, aY()))
1781+ throw(toString(gV))
17791782 }
17801783
17811784
17821785
1783-@Callable(bL)
1786+@Callable(by)
17841787 func view_getFunding () = {
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())))
1792- }
1793-
1794-
1795-
1796-@Callable(bL)
1797-func computeSpotPrice () = {
1798- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799- if ((id == id))
1788+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1789+ if ((hl == hl))
18001790 then {
1801- let ge = dS()
1802- $Tuple2(nil, ge)
1791+ let fA = dl()
1792+ let iO = fz()
1793+ let fD = iO._1
1794+ let fE = iO._2
1795+ let fH = iO._3
1796+ let iP = aD(fE, fA)
1797+ let iQ = aD(fD, fA)
1798+ throw(((((aB(iP) + aB(iQ)) + aB(dF())) + aB(dl())) + aB(fH)))
18031799 }
18041800 else throw("Strict value is not equal to itself.")
18051801 }
18061802
18071803
18081804
1809-@Callable(bL)
1810-func computeFeeForTraderWithArtifact (bU,gr) = {
1811- let ge = gD(bU, gr)
1812- $Tuple2(nil, ge)
1805+@Callable(by)
1806+func computeSpotPrice () = {
1807+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1808+ if ((hl == hl))
1809+ then {
1810+ let ft = dF()
1811+ $Tuple2(nil, ft)
1812+ }
1813+ else throw("Strict value is not equal to itself.")
18131814 }
18141815
18151816
1816-@Verifier(jx)
1817-func jy () = {
1818- let jz = getString(this, X)
1819- if (isDefined(jz))
1817+
1818+@Callable(by)
1819+func computeFeeForTraderWithArtifact (bH,fJ) = {
1820+ let ft = fS(bH, fJ)
1821+ $Tuple2(nil, ft)
1822+ }
1823+
1824+
1825+@Verifier(iR)
1826+func iS () = {
1827+ let iT = getString(this, S)
1828+ if (isDefined(iT))
18201829 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)
1830+ let iU = getString(addressFromStringValue(value(iT)), U)
1831+ if (isDefined(iU))
1832+ then valueOrElse(getBoolean(addressFromStringValue(value(iU)), ((("status_" + toString(this)) + "_") + toBase58String(iR.id))), false)
18241833 else throw("unable to verify: admin not set in coordinator")
18251834 }
1826- else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
1835+ else sigVerify(iR.bodyBytes, iR.proofs[0], iR.senderPublicKey)
18271836 }
18281837

github/deemru/w8io/169f3d6 
791.46 ms