tx · 7fdsf7EVU5bmorExRwuSifrekRHkDh25t9iX9biFML3m

3N8G95pEaYEhZ4U3m3UrzpEzwBFn5vvXsZH:  -0.06500000 Waves

2022.11.10 12:47 [2310891] smart account 3N8G95pEaYEhZ4U3m3UrzpEzwBFn5vvXsZH > SELF 0.00000000 Waves

{ "type": 13, "id": "7fdsf7EVU5bmorExRwuSifrekRHkDh25t9iX9biFML3m", "fee": 6500000, "feeAssetId": null, "timestamp": 1668073641484, "version": 2, "chainId": 84, "sender": "3N8G95pEaYEhZ4U3m3UrzpEzwBFn5vvXsZH", "senderPublicKey": "Hj6oyH6As5UWo8fZ1K4hPsEY7nxH3MvhBqDD6axiwjXs", "proofs": [ "5vi5ZyD4dvQKXkYs8Jd4anNRqRbyLGVhfbfP4b1Sd2zyhiKRr7akYDsEhuNUw567J3TBxeT1cL9ZNSUc3VWvhC6h" ], "script": "base64:BgJ2CAISABIAEgMKAQESAwoBARILCgkBAQEBAQEBAQESEAoOAQEBAQEBAQgICAEBAQESAwoBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESABIDCgEIEgASBAoCCAESAwoBARIAEgMKAQgSAwoBCBIDCgEBEgASAwoBCKEBAAlrX29yYV9rZXkCCWtfb3JhX2tleQAPa19vcmFfYmxvY2tfa2V5Ag9rX29yYV9ibG9ja19rZXkABWtfb3JhAgVrX29yYQAJa19iYWxhbmNlAglrX2JhbGFuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19wb3NpdGlvbk1hcmdpbgIQa19wb3NpdGlvbk1hcmdpbgAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAIWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgISa19wb3NpdGlvbkZyYWN0aW9uABRrX3Bvc2l0aW9uQ2xvc2VkRGF0ZQIUa19wb3NpdGlvbkNsb3NlZERhdGUAD2tfcG9zaXRpb25Bc3NldAIPa19wb3NpdGlvbkFzc2V0AA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQABWtfZmVlAgVrX2ZlZQAPa19mdW5kaW5nUGVyaW9kAg9rX2Z1bmRpbmdQZXJpb2QAEWtfaW5pdE1hcmdpblJhdGlvAhFrX2luaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8AGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8CFmtfcGFydExpcXVpZGF0aW9uUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQADWtfbGFzdERhdGFTdHICDWtfbGFzdERhdGFTdHIADmtfbGFzdE1pbnV0ZUlkAg5rX2xhc3RNaW51dGVJZAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlABNrX3R3YXBEYXRhTGFzdFByaWNlAhNrX3R3YXBEYXRhTGFzdFByaWNlABprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAIaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQAJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CG2tfbGF0ZXN0TG9uZ1ByZW1pdW1GcmFjdGlvbgAma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CHGtfbGF0ZXN0U2hvcnRQcmVtaXVtRnJhY3Rpb24AEmtfbmV4dEZ1bmRpbmdCbG9jawIea19uZXh0RnVuZGluZ0Jsb2NrTWluVGltZXN0YW1wABFrX2xvbmdGdW5kaW5nUmF0ZQIRa19sb25nRnVuZGluZ1JhdGUAEmtfc2hvcnRGdW5kaW5nUmF0ZQISa19zaG9ydEZ1bmRpbmdSYXRlABNrX3F1b3RlQXNzZXRSZXNlcnZlAghrX3F0QXN0UgASa19iYXNlQXNzZXRSZXNlcnZlAghrX2JzQXN0UgATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAUa19jdW11bGF0aXZlTm90aW9uYWwCFGtfY3VtdWxhdGl2ZU5vdGlvbmFsABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAhZrX29wZW5JbnRlcmVzdE5vdGlvbmFsABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAE2tfaW5zdXJhbmNlX2FkZHJlc3MCE2tfaW5zdXJhbmNlX2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABFrX21hbmFnZXJfYWRkcmVzcwIRa19tYW5hZ2VyX2FkZHJlc3MAFGtfY29sbGF0ZXJhbF9hZGRyZXNzAhRrX2NvbGxhdGVyYWxfYWRkcmVzcwASa19leGNoYW5nZV9hZGRyZXNzAhJrX2V4Y2hhbmdlX2FkZHJlc3MAFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwIVa19uZnRfbWFuYWdlcl9hZGRyZXNzACBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAIga190cmFkZXJfbWFya2V0X2Fzc2V0X2NvbGxhdGVyYWwBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEOYWRtaW5QdWJsaWNLZXkACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfYWRtaW5fcHVibGljX2tleQEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAERcXVvdGVBc3NldFN0YWtpbmcACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQBDnN0YWtpbmdBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfc3Rha2luZ19hZGRyZXNzAg9TdGFraW5nIG5vdCBzZXQBEGluc3VyYW5jZUFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUTa19pbnN1cmFuY2VfYWRkcmVzcwIRSW5zdXJhbmNlIG5vdCBzZXQBDG1pbmVyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX21pbmVyX2FkZHJlc3MCDU1pbmVyIG5vdCBzZXQBDW9yZGVyc0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUQa19vcmRlcnNfYWRkcmVzcwIOT3JkZXJzIG5vdCBzZXQBD3JlZmVycmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX3JlZmVycmFsX2FkZHJlc3MCEFJlZmVycmFsIG5vdCBzZXQBDm1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAg9NYW5hZ2VyIG5vdCBzZXQBEW5mdE1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwITTkZUIE1hbmFnZXIgbm90IHNldAERY29sbGF0ZXJhbEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUUa19jb2xsYXRlcmFsX2FkZHJlc3MCGkNvbGxhdGVyYWwgTWFuYWdlciBub3Qgc2V0AQtzd2FwQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBC2Nvb3JkaW5hdG9yAAUSa19leGNoYW5nZV9hZGRyZXNzAg9ObyBzd2FwIGFkZHJlc3MCFEludmFsaWQgc3dhcCBhZGRyZXNzABFrX3doaXRlbGlzdF9hc3NldAIRa193aGl0ZWxpc3RfYXNzZXQBEGlzV2hpdGVsaXN0QXNzZXQBCF9hc3NldElkCQELdmFsdWVPckVsc2UCCQCbCAIJARFjb2xsYXRlcmFsQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFEWtfd2hpdGVsaXN0X2Fzc2V0BQhfYXNzZXRJZAcADWtfdG9rZW5fcGFyYW0CDWtfdG9rZW5fcGFyYW0ADGtfdG9rZW5fdHlwZQIMa190b2tlbl90eXBlABhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUCDWZlZV9yZWR1Y3Rpb24ACERJUl9MT05HAAEACURJUl9TSE9SVAACAA1UV0FQX0lOVEVSVkFMAA8AD09SQUNMRV9JTlRFUlZBTAAPAAdTRUNPTkRTAOgHAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAHT05FX0RBWQkAaAIAgKMFBQxERUNJTUFMX1VOSVQACEFMTF9GRUVTAGQAD1BOTF9PUFRJT05fU1BPVAABABFQTkxfT1BUSU9OX09SQUNMRQACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0CgEFX2pvaW4CC2FjY3VtdWxhdG9yA3ZhbAkArAICCQCsAgIFC2FjY3VtdWxhdG9yBQN2YWwCASwECm5ld0xpc3RTdHIKAAIkbAUFX2xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBV9qb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEC25ld0xpc3RTdHJVCQCzAgIFCm5ld0xpc3RTdHIAAQQLbmV3TGlzdFN0clIDCQAAAgkArwICBQtuZXdMaXN0U3RyVQABAgEsCQCwAgIFC25ld0xpc3RTdHJVAAEFC25ld0xpc3RTdHJVBQtuZXdMaXN0U3RyUgEJc3RyVG9MaXN0AQRfc3RyCQC1CQIFBF9zdHICASwBC3B1c2hUb1F1ZXVlAwVfbGlzdAhfbWF4U2l6ZQZfdmFsdWUDCQBmAgkAkAMBBQVfbGlzdAUIX21heFNpemUJAM0IAgkA0QgCBQVfbGlzdAAABQZfdmFsdWUJAM0IAgUFX2xpc3QFBl92YWx1ZQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQRzdHJBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQRpbnRBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQERdG90YWxQb3NpdGlvblNpemUACQEDaW50AQUTa190b3RhbFBvc2l0aW9uU2l6ZQESY3VtdWxhdGl2ZU5vdGlvbmFsAAkBA2ludAEFFGtfY3VtdWxhdGl2ZU5vdGlvbmFsARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQ9nZXRBY3R1YWxDYWxsZXIBAWkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBDW9yZGVyc0FkZHJlc3MAAghrX3NlbmRlcgkApQgBCAUBaQZjYWxsZXIBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DDF9tYXJnaW5SYXRpbxBfYmFzZU1hcmdpblJhdGlvFF9sYXJnZXJUaGFuT3JFcXVhbFRvBBRyZW1haW5pbmdNYXJnaW5SYXRpbwkAZQIFDF9tYXJnaW5SYXRpbwUQX2Jhc2VNYXJnaW5SYXRpbwMDBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZgIAAAUUcmVtYWluaW5nTWFyZ2luUmF0aW8HCQACAQIOSW52YWxpZCBtYXJnaW4DAwkBASEBBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZwIFFHJlbWFpbmluZ01hcmdpblJhdGlvAAAHCQACAQIOSW52YWxpZCBtYXJnaW4GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlgoEBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJAJYKBAAAAAAAAAAAARBnZXRQb3NpdGlvbkFzc2V0AQdfdHJhZGVyBBBwb3NpdGlvbkFzc2V0T3B0CQCdCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUHX3RyYWRlcgQHJG1hdGNoMAUQcG9zaXRpb25Bc3NldE9wdAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEDXBvc2l0aW9uQXNzZXQFByRtYXRjaDAFDXBvc2l0aW9uQXNzZXQJANgEAQkBCnF1b3RlQXNzZXQAARNyZXF1aXJlT3BlblBvc2l0aW9uAQdfdHJhZGVyAwkAAAIICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAAAJAAIBAhBObyBvcGVuIHBvc2l0aW9uBgELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwENdXBkYXRlUmVzZXJ2ZQMGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50EF9iYXNlQXNzZXRBbW91bnQDBQZfaXNBZGQEB25ld0Jhc2UJAGUCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAMJAGcCAAAFB25ld0Jhc2UJAAIBAipUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJYKBAkAZAIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAUHbmV3QmFzZQkAZAIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQJAGQCCQESY3VtdWxhdGl2ZU5vdGlvbmFsAAURX3F1b3RlQXNzZXRBbW91bnQECG5ld1F1b3RlCQBlAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50AwkAZwIAAAUIbmV3UXVvdGUJAAIBAipUeCBsZWFkIHRvIGJhc2UgcXVvdGUgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJYKBAUIbmV3UXVvdGUJAGQCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQESY3VtdWxhdGl2ZU5vdGlvbmFsAAURX3F1b3RlQXNzZXRBbW91bnQBCXN3YXBJbnB1dAIGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50BAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEAWsJAQRtdWxkAgUHX3F0QXN0UgUHX2JzQXN0UgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcgMFBl9pc0FkZAkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50CQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEFWJhc2VBc3NldFJlc2VydmVBZnRlcgkBBGRpdmQCBQFrBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE0OTc0MTUxNjcJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRFfcXVvdGVBc3NldEFtb3VudAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE0OTc0MTUxNjcCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNDk3NDE1MTY3Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE0OTc0MTUxNjcCXzMEGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQgFDSR0MDE0OTc0MTUxNjcCXzQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEC21hcmtldFByaWNlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFB19xdEFzdFICFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFB19ic0FzdFICISBxdW90ZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRFfcXVvdGVBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg4gbWFya2V0UHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAlwoFBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQUYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BBBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCBQxfbWFyZ2luRGVsdGEFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE2NjU4MTY3ODUDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTY2NTgxNjc4NQJfMQQHYmFkRGVidAgFDSR0MDE2NjU4MTY3ODUCXzIJAJUKAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwUGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtwcmljZUJlZm9yZQkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlAwkAAAIFEF9iYXNlQXNzZXRBbW91bnQAAAkAAgECGUludmFsaWQgYmFzZSBhc3NldCBhbW91bnQEAWsJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQQYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyAwUGX2lzQWRkCQBkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQJAGUCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAQPcXVvdGVBc3NldEFmdGVyCQEEZGl2ZAIFAWsFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQOcXVvdGVBc3NldFNvbGQJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyBRJfcXVvdGVBc3NldFJlc2VydmUEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDE3NzYyMTc5NTUJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE3NzYyMTc5NTUCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNzc2MjE3OTU1Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE3NzYyMTc5NTUCXzMEGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQgFDSR0MDE3NzYyMTc5NTUCXzQEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmgoIBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBRhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBQUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZic0FzdFIAARJnZXRPcmFjbGVUd2FwUHJpY2UABAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQVrX29yYQIABAhwcmljZUtleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJa19vcmFfa2V5BAhibG9ja0tleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUPa19vcmFfYmxvY2tfa2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQUJbGFzdFZhbHVlARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AhJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUEC29yYWNsZVByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQKcHJpY2VBZnRlcgkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBAxhdmVyYWdlUHJpY2UJAQRkaXZkAgkAZAIFC29yYWNsZVByaWNlBQpwcmljZUFmdGVyCQBoAgACBQxERUNJTUFMX1VOSVQEDGFic1ByaWNlRGlmZgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UDCQBmAgUMYWJzUHJpY2VEaWZmCQEObWF4UHJpY2VTcHJlYWQACQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBQxhYnNQcmljZURpZmYCFCA+IG1heCBwcmljZSBzcHJlYWQgCQCkAwEJAQ5tYXhQcmljZVNwcmVhZAAGAQxnZXRTcG90UHJpY2UABBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAJAQRkaXZkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEC29yYWNsZVByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQMY3VycmVudFByaWNlCQEMZ2V0U3BvdFByaWNlAAkAZgIJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUMY3VycmVudFByaWNlBQtvcmFjbGVQcmljZQkBC3NwcmVhZExpbWl0AAEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAQNX3Bvc2l0aW9uU2l6ZQdfb3B0aW9uEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEDSR0MDIxMTczMjEzNDQJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBQkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBNvdXRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMjExNzMyMTM0NAJfMQQCeDEIBQ0kdDAyMTE3MzIxMzQ0Al8yBAJ4MggFDSR0MDIxMTczMjEzNDQCXzMEAngzCAUNJHQwMjExNzMyMTM0NAJfNAUTb3V0UG9zaXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9wb3NpdGlvblNpemVBYnMJARJnZXRPcmFjbGVUd2FwUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBQ1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUHX29wdGlvbgMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAhVJbnZhbGlkIHBvc2l0aW9uIHNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwJAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBAUNX3Bvc2l0aW9uU2l6ZQUHX29wdGlvbgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMjI2NjEyMjc4OQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjI2NjEyMjc4OQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyMjY2MTIyNzg5Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDIyNjYxMjI3ODkCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjI2NjEyMjc4OQJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMFBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBmJzQXN0UgAFB19vcHRpb24BD2NhbGNNYXJnaW5SYXRpbwMNX3JlbWFpbk1hcmdpbghfYmFkRGVidBFfcG9zaXRpb25Ob3Rpb25hbAkBBGRpdmQCCQBlAgUNX3JlbWFpbk1hcmdpbgUIX2JhZERlYnQFEV9wb3NpdGlvbk5vdGlvbmFsARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgdfdHJhZGVyB19vcHRpb24EDSR0MDIzMjcwMjMzODEJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDIzMjcwMjMzODECXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjMyNzAyMzM4MQJfMgQDcG9uCAUNJHQwMjMyNzAyMzM4MQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyMzI3MDIzMzgxAl80BA0kdDAyMzM4NzIzNDgwCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQdfb3B0aW9uBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwMjMzODcyMzQ4MAJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDIzMzg3MjM0ODACXzIEDSR0MDIzNDg1MjM2NTEJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDIzNDg1MjM2NTECXzEEB2JhZERlYnQIBQ0kdDAyMzQ4NTIzNjUxAl8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwEHX3RyYWRlcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIHX3RyYWRlcg1fcG9zaXRpb25TaXplBAxtYXhpbXVtUmF0aW8JAQR2bWF4AgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAEGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQUMbWF4aW11bVJhdGlvBApzd2FwUmVzdWx0CQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcEHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQpzd2FwUmVzdWx0Al8xBAtwcmljZUltcGFjdAgFCnN3YXBSZXN1bHQCXzgDCQBmAgkBDm1heFByaWNlSW1wYWN0AAULcHJpY2VJbXBhY3QFHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBwJfMQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgdfdHJhZGVyFF9jaGVja01heFByaWNlSW1wYWN0BA0kdDAyNDg4NDI1MDEyCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyNDg4NDI1MDEyAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI0ODg0MjUwMTICXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjQ4ODQyNTAxMgJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyNDg4NDI1MDEyAl80BA11bnJlYWxpemVkUG5sCAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UAl8yBA0kdDAyNTEwNzI1Mjc1CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAyNTEwNzI1Mjc1Al8xBAdiYWREZWJ0CAUNJHQwMjUxMDcyNTI3NQJfMgQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEBLQEFDHBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwFDXVucmVhbGl6ZWRQbmwEDW1hcmdpblRvVmF1bHQJAQEtAQUMcmVtYWluTWFyZ2luBA0kdDAyNTQwMjI1NzEzCQEKc3dhcE91dHB1dAMJAGYCBQxwb3NpdGlvblNpemUAAAkBA2FicwEFDHBvc2l0aW9uU2l6ZQUUX2NoZWNrTWF4UHJpY2VJbXBhY3QEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDAyNTQwMjI1NzEzAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMjU0MDIyNTcxMwJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMjU0MDIyNTcxMwJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDI1NDAyMjU3MTMCXzQEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMjU0MDIyNTcxMwJfNQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAyNTQwMjI1NzEzAl82BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAyNTQwMjI1NzEzAl83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUUcG9zaXRpb25PcGVuTm90aW9uYWwJAJ4KDAUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQdiYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgEQZ2V0VHdhcFNwb3RQcmljZQAECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbGlzdAAABAxsYXN0TWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAQWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEDGVuZExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQSbm93Q3VtdWxhdGl2ZVByaWNlCQBkAgUWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQxlbmRMYXN0UHJpY2UEGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQOc3RhcnRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQUc3RhcnRDdW11bGF0aXZlUHJpY2UJAGQCBRhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUNc3RhcnRNaW51dGVJZAUIbWF4SW5kZXgFDnN0YXJ0TGFzdFByaWNlCQBpAgkAZQIFEm5vd0N1bXVsYXRpdmVQcmljZQUUc3RhcnRDdW11bGF0aXZlUHJpY2UFDVRXQVBfSU5URVJWQUwBEGdldFBlZ0FkanVzdENvc3QBBl9wcmljZQQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBBBiYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQUbmV3UXVvdGVBc3NldFJlc2VydmUJAQRtdWxkAgUQYmFzZUFzc2V0UmVzZXJ2ZQUGX3ByaWNlBARjb3N0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMFBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFFG5ld1F1b3RlQXNzZXRSZXNlcnZlBRBiYXNlQXNzZXRSZXNlcnZlBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJQKAgUUbmV3UXVvdGVBc3NldFJlc2VydmUFBGNvc3QBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABA1zcG90VHdhcFByaWNlCQEQZ2V0VHdhcFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQ1zcG90VHdhcFByaWNlBQ91bmRlcmx5aW5nUHJpY2UDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAJAJQKAgAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgEOZ2V0QWRqdXN0ZWRGZWUBAWkEB2Jhc2VGZWUJAQNmZWUABA0kdDAyOTM3NjI5OTg0AwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQQKYXJ0aWZhY3RJZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAIZSW52YWxpZCBhdHRhY2hlZCBhcnRpZmFjdAQMYXJ0aWZhY3RLaW5kCQEEc3RyQQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdG9rZW5fdHlwZQUKYXJ0aWZhY3RJZAMJAAACBQxhcnRpZmFjdEtpbmQFGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQQJcmVkdWN0aW9uCQEEaW50QQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdG9rZW5fcGFyYW0FCmFydGlmYWN0SWQEC2FkanVzdGVkRmVlCQEEbXVsZAIFB2Jhc2VGZWUFCXJlZHVjdGlvbgkAlAoCBQthZGp1c3RlZEZlZQYJAAIBAhlJbnZhbGlkIGF0dGFjaGVkIGFydGlmYWN0CQCUCgIFB2Jhc2VGZWUHBAthZGp1c3RlZEZlZQgFDSR0MDI5Mzc2Mjk5ODQCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDI5Mzc2Mjk5ODQCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAEOdXBkYXRlU2V0dGluZ3MJEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19pbml0TWFyZ2luUmF0aW8FEF9pbml0TWFyZ2luUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwUEX21tcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19saXF1aWRhdGlvbkZlZVJhdGlvBRRfbGlxdWlkYXRpb25GZWVSYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19mdW5kaW5nUGVyaW9kBQ5fZnVuZGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFa19mZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZUltcGFjdAUPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VTcHJlYWQFD19tYXhQcmljZVNwcmVhZAUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsARN1cGRhdGVQb3NpdGlvbkFzc2V0AghfYWRkcmVzcwhfYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFCF9hZGRyZXNzBQhfYXNzZXRJZAUDbmlsAQ51cGRhdGVQb3NpdGlvbgUIX2FkZHJlc3MFX3NpemUHX21hcmdpbg1fb3Blbk5vdGlvbmFsIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MFBV9zaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwUHX21hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MFDV9vcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUDbmlsAQphcHBlbmRUd2FwAQVwcmljZQQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQQcHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAAAwkAZgIFEHByZXZpb3VzTWludXRlSWQFCG1pbnV0ZUlkCQACAQIRVFdBUCBvdXQtb2Ytb3JkZXIEDGxhc3RNaW51dGVJZAMJAAACBRBwcmV2aW91c01pbnV0ZUlkAAAFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkAwkAZgIFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkBBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkBQVwcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUJcHJldlByaWNlBARsaXN0CQELcHVzaFRvUXVldWUDCQEJc3RyVG9MaXN0AQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAFDVRXQVBfSU5URVJWQUwJAKQDAQUIbWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtfbGFzdE1pbnV0ZUlkBQhtaW51dGVJZAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX2xhc3REYXRhU3RyCQEJbGlzdFRvU3RyAQUEbGlzdAUDbmlsBBh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQAAAQTcHJldkN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQVwcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUJcHJldlByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUFcHJpY2UFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBCXVwZGF0ZUFtbQcHX3F0QXN0UgdfYnNBc3RSF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyGF9jdW11bGF0aXZlTm90aW9uYWxBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQMJAQIhPQIJAGUCBRZfdG90YWxMb25nUG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYSW52YWxpZCBBTU0gc3RhdGUgZGF0YTogCQCkAwEFFl90b3RhbExvbmdQb3NpdGlvblNpemUCBCArICAJAKQDAQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCBCAhPSAJAKQDAQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAM4IAgkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQdfcXRBc3RSBQdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3RvdGFsUG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa19jdW11bGF0aXZlTm90aW9uYWwFGF9jdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAUVX29wZW5JbnRlcmVzdE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUDbmlsCQEKYXBwZW5kVHdhcAEJAQRkaXZkAgUHX3F0QXN0UgUHX2JzQXN0UgEOZGVsZXRlUG9zaXRpb24BCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFCF9hZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRRrX3Bvc2l0aW9uQ2xvc2VkRGF0ZQUIX2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwBDmRvQnVybkFydGlmYWN0Ag1fYnVybkFydGlmYWN0AWkDBQ1fYnVybkFydGlmYWN0CQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEEludmFsaWQgYXJ0aWZhY3QAAQUDbmlsBQNuaWwBF2lzU2FtZUFzc2V0T3JOb1Bvc2l0aW9uAgdfdHJhZGVyCF9hc3NldElkBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAwkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABgkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBC2lzU2FtZUFzc2V0AgdfdHJhZGVyCF9hc3NldElkCQAAAgkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyBQhfYXNzZXRJZAEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwRfYW1tCF9hc3NldElkB190cmFkZXIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsAgFfBQRfYW1tAgFfBQhfYXNzZXRJZAIBXwUHX3RyYWRlcgETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEHX3RyYWRlcgQNcG9zaXRpb25Bc3NldAkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyAwkAAAIFDXBvc2l0aW9uQXNzZXQJANgEAQkBCnF1b3RlQXNzZXQACQCUCgIAAAUNcG9zaXRpb25Bc3NldAQDa2V5CQEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwkApQgBBQR0aGlzBQ1wb3NpdGlvbkFzc2V0BQdfdHJhZGVyBAZib3Jyb3cJAQt2YWx1ZU9yRWxzZQIJAJoIAgkBEWNvbGxhdGVyYWxBZGRyZXNzAAUDa2V5AAAJAJQKAgUGYm9ycm93BQ1wb3NpdGlvbkFzc2V0FgFpAQVwYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIaSW52YWxpZCB0b2dnbGVQYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBgUDbmlsAWkBB3VucGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECGkludmFsaWQgdG9nZ2xlUGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAcFA25pbAFpAQxhZGRMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECG0ludmFsaWQgYWRkTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAVwcmljZQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSBBRiYXNlQXNzZXRBbW91bnRUb0FkZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUFcHJpY2UEC3F0QXN0UkFmdGVyCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEC2JzQXN0UkFmdGVyCQBkAgUHX2JzQXN0UgUUYmFzZUFzc2V0QW1vdW50VG9BZGQJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAVwcmljZQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSBBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUFcHJpY2UEC3F0QXN0UkFmdGVyCQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEC2JzQXN0UkFmdGVyCQBlAgUHX2JzQXN0UgUXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgFpAQ5jaGFuZ2VTZXR0aW5ncwkQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQEOdXBkYXRlU2V0dGluZ3MJBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAFpAQppbml0aWFsaXplDgdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUHX29yYWNsZQpfb3JhY2xlS2V5DF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQDAwMDAwMDAwMDAwMJAGcCAAAFB19xdEFzdFIGCQBnAgAABQdfYnNBc3RSBgkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAQtpbml0aWFsaXplZAAJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tBwUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAJAQ51cGRhdGVTZXR0aW5ncwkFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkCQENdXBkYXRlRnVuZGluZwUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUOX2Z1bmRpbmdQZXJpb2QAAAAAAAAAAAkBDXVwZGF0ZUJhbGFuY2UBAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtfb3JhBQdfb3JhY2xlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtfb3JhX2tleQUKX29yYWNsZUtleQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yBQNuaWwBaQESc2V0SW5pdE1hcmdpblJhdGlvARBfaW5pdE1hcmdpblJhdGlvAwMJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQEBIQEJAQtpbml0aWFsaXplZAAJAAIBAiVJbnZhbGlkIHNldEluaXRNYXJnaW5SYXRpbyBwYXJhbWV0ZXJzCQEOdXBkYXRlU2V0dGluZ3MJBRBfaW5pdE1hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBEGZ1bmRpbmdQZXJpb2RSYXcACQEDZmVlAAkBC3NwcmVhZExpbWl0AAkBDm1heFByaWNlSW1wYWN0AAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkBDm1heFByaWNlU3ByZWFkAAFpARBkZWNyZWFzZVBvc2l0aW9uAwdfYW1vdW50CV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50AwMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBBnBhdXNlZAAJAAIBAiNJbnZhbGlkIGRlY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNDE0OTI0MTY0NAkBC2dldFBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDQxNDkyNDE2NDQCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNDE0OTI0MTY0NAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA0MTQ5MjQxNjQ0Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDQxNDkyNDE2NDQCXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDQxODE3NDE5MzMJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIJAKUIAQgFAWkGY2FsbGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA0MTgxNzQxOTMzAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwNDE4MTc0MTkzMwJfMgQNJHQwNDE5Mzk0NDQ4OAMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwEDSR0MDQyMzE2NDI1MzUJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVleGNoYW5nZWRQb3NpdGlvblNpemUIBQ0kdDA0MjMxNjQyNTM1Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDIzMTY0MjUzNQJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDIzMTY0MjUzNQJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQyMzE2NDI1MzUCXzQEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNDIzMTY0MjUzNQJfNQQYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwcJAAIBCQCsAgIJAKwCAgkArAICAiVUb28gbGl0dGxlIGJhc2UgYXNzZXQgZXhjaGFuZ2VkLCBnb3QgCQCkAwEFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwIKIGV4cGVjdGVkIAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BAtyZWFsaXplZFBubAkBBGRpdmQCCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQNJHQwNDI5NzI0MzIxNwkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDQyOTcyNDMyMTcCXzEEB2JhZERlYnQIBQ0kdDA0Mjk3MjQzMjE3Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDQyOTcyNDMyMTcCXzMEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFDG9wZW5Ob3Rpb25hbAQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkAnQoLBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNDE5Mzk0NDQ4OAJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA0MTkzOTQ0NDg4Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQxOTM5NDQ0ODgCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNDE5Mzk0NDQ4OAJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDE5Mzk0NDQ4OAJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQxOTM5NDQ0ODgCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0MTkzOTQ0NDg4Al83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDQxOTM5NDQ0ODgCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA0MTkzOTQ0NDg4Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDQxOTM5NDQ0ODgDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA0MTkzOTQ0NDg4A18xMQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQkApQgBCAUBaQZjYWxsZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQaW5jcmVhc2VQb3NpdGlvbgQKX2RpcmVjdGlvbglfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAhfcmVmTGluawQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAQRaXNDb2xsYXRlcmFsQXNzZXQJARBpc1doaXRlbGlzdEFzc2V0AQULX2Fzc2V0SWRTdHIDAwMDAwMDAwkBAiE9AgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAQIhPQIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAcGCQBnAgAABQpfcmF3QW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgMJAQEhAQUMaXNRdW90ZUFzc2V0CQEBIQEFEWlzQ29sbGF0ZXJhbEFzc2V0BwYJAQEhAQkBF2lzU2FtZUFzc2V0T3JOb1Bvc2l0aW9uAgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBBnBhdXNlZAAJAAIBAiNJbnZhbGlkIGluY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQHYmFzZUZlZQkBA2ZlZQAEDSR0MDQ1ODUwNDU5MDEJAQ5nZXRBZGp1c3RlZEZlZQEFAWkEC2FkanVzdGVkRmVlCAUNJHQwNDU4NTA0NTkwMQJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDU4NTA0NTkwMQJfMgQMcmF3RmVlQW1vdW50CQEEbXVsZAIFCl9yYXdBbW91bnQFC2FkanVzdGVkRmVlBAdfYW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUMcmF3RmVlQW1vdW50BBNkaXN0cmlidXRlRmVlQW1vdW50AwURaXNDb2xsYXRlcmFsQXNzZXQECGRvQm9ycm93CQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACBmJvcnJvdwkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCF9hc3NldElkBQdfYW1vdW50BQNuaWwDCQAAAgUIZG9Cb3Jyb3cFCGRvQm9ycm93BA1iYWxhbmNlQmVmb3JlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQ1iYWxhbmNlQmVmb3JlBQ1iYWxhbmNlQmVmb3JlBAZkb1N3YXAJAPwHBAkBC3N3YXBBZGRyZXNzAAIEc3dhcAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFDHJhd0ZlZUFtb3VudAUDbmlsAwkAAAIFBmRvU3dhcAUGZG9Td2FwBAxiYWxhbmNlQWZ0ZXIJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDGJhbGFuY2VBZnRlcgUMYmFsYW5jZUFmdGVyBA9leGNoYW5nZWRBbW91bnQJAGUCBQxiYWxhbmNlQWZ0ZXIFDWJhbGFuY2VCZWZvcmUDCQAAAgUPZXhjaGFuZ2VkQW1vdW50BQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUMcmF3RmVlQW1vdW50AwkAAAIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFE2Rpc3RyaWJ1dGVGZWVBbW91bnQEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAhVhY2NlcHRQYXltZW50V2l0aExpbmsJAMwIAgUHX3RyYWRlcgkAzAgCBQhfcmVmTGluawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNDcyMTc0NzM1NwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNDcyMTc0NzM1NwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA0NzIxNzQ3MzU3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQ3MjE3NDczNTcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNDcyMTc0NzM1NwJfNAQNaXNOZXdQb3NpdGlvbgkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABA9pc1NhbWVEaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkAAAIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAQOZXhwYW5kRXhpc3RpbmcDCQEBIQEFDWlzTmV3UG9zaXRpb24FD2lzU2FtZURpcmVjdGlvbgcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDQ3NjQ2NTAyMzEDAwUNaXNOZXdQb3NpdGlvbgYFDmV4cGFuZEV4aXN0aW5nBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA0ODA3MDQ4Mjc2CQEJc3dhcElucHV0AgUFaXNBZGQFDG9wZW5Ob3Rpb25hbAQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0CAUNJHQwNDgwNzA0ODI3NgJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ4MDcwNDgyNzYCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ4MDcwNDgyNzYCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0ODA3MDQ4Mjc2Al80BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDQ4MDcwNDgyNzYCXzUDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQCAyA8IAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWFtb3VudEJhc2VBc3NldEJvdWdodAQZaW5jcmVhc2VNYXJnaW5SZXF1aXJlbWVudAkBBGRpdmQCBQxvcGVuTm90aW9uYWwFCV9sZXZlcmFnZQQNJHQwNDg2NTc0ODg5NgkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUZaW5jcmVhc2VNYXJnaW5SZXF1aXJlbWVudAQMcmVtYWluTWFyZ2luCAUNJHQwNDg2NTc0ODg5NgJfMQQCeDEIBQ0kdDA0ODY1NzQ4ODk2Al8yBAJ4MggFDSR0MDQ4NjU3NDg4OTYCXzMDCQEBIQEJARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQACAQIVT3ZlciBtYXggc3ByZWFkIGxpbWl0CQCdCgsFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIJAGQCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGQCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAACQBkAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDQ5OTI0NTAwNDAJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIJAKUIAQgFAWkGY2FsbGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA0OTkyNDUwMDQwAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwNDk5MjQ1MDA0MAJfMgMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAAIBAi5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDQ3NjQ2NTAyMzECXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwNDc2NDY1MDIzMQJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA0NzY0NjUwMjMxAl8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDQ3NjQ2NTAyMzECXzQEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ3NjQ2NTAyMzECXzUEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0NzY0NjUwMjMxAl82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNDc2NDY1MDIzMQJfNwQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA0NzY0NjUwMjMxAl84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNDc2NDY1MDIzMQJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA0NzY0NjUwMjMxA18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNDc2NDY1MDIzMQNfMTEEDGZlZVRvU3Rha2VycwkAaQIFCWZlZUFtb3VudAACBA5mZWVUb0luc3VyYW5jZQkAZQIFCWZlZUFtb3VudAUMZmVlVG9TdGFrZXJzBAVzdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25MYXRlc3RDUEYJARN1cGRhdGVQb3NpdGlvbkFzc2V0AgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIJAQl1cGRhdGVBbW0HBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4ABAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQABBFpc0NvbGxhdGVyYWxBc3NldAkBEGlzV2hpdGVsaXN0QXNzZXQBBQtfYXNzZXRJZFN0cgMDAwMDAwkBASEBBQxpc1F1b3RlQXNzZXQJAQEhAQURaXNDb2xsYXRlcmFsQXNzZXQHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaXNTYW1lQXNzZXQCBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQNJHQwNTE5ODc1MjAzOAkBDmdldEFkanVzdGVkRmVlAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA1MTk4NzUyMDM4Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA1MTk4NzUyMDM4Al8yBAxyYXdGZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAULYWRqdXN0ZWRGZWUEB19hbW91bnQJAGUCBQpfcmF3QW1vdW50BQxyYXdGZWVBbW91bnQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQDBRFpc0NvbGxhdGVyYWxBc3NldAQIZG9Cb3Jyb3cJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIGYm9ycm93CQDMCAIFB190cmFkZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFB19hbW91bnQFA25pbAMJAAACBQhkb0JvcnJvdwUIZG9Cb3Jyb3cEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDWJhbGFuY2VCZWZvcmUFDWJhbGFuY2VCZWZvcmUEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUMcmF3RmVlQW1vdW50BQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAEDGJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUMYmFsYW5jZUFmdGVyBQxiYWxhbmNlQWZ0ZXIED2V4Y2hhbmdlZEFtb3VudAkAZQIFDGJhbGFuY2VBZnRlcgUNYmFsYW5jZUJlZm9yZQMJAAACBQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQxyYXdGZWVBbW91bnQDCQAAAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAUTZGlzdHJpYnV0ZUZlZUFtb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACDWFjY2VwdFBheW1lbnQJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNTMzMzc1MzQ3NwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNTMzMzc1MzQ3NwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA1MzMzNzUzNDc3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDUzMzM3NTM0NzcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNTMzMzc1MzQ3NwJfNAQMZmVlVG9TdGFrZXJzCQBpAgUJZmVlQW1vdW50AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUJZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDmZlZVRvSW5zdXJhbmNlBQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgURb2xkUG9zaXRpb25NYXJnaW4FB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQEOZG9CdXJuQXJ0aWZhY3QCBQxidXJuQXJ0aWZhY3QFAWkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVtb3ZlTWFyZ2luAQdfYW1vdW50BAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNTQ1MjA1NDY2MAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNTQ1MjA1NDY2MAJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA1NDUyMDU0NjYwAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU0NTIwNTQ2NjACXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNTQ1MjA1NDY2MAJfNAQLbWFyZ2luRGVsdGEJAQEtAQUHX2Ftb3VudAQNJHQwNTQ2OTc1NDg3NgkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULbWFyZ2luRGVsdGEEDHJlbWFpbk1hcmdpbggFDSR0MDU0Njk3NTQ4NzYCXzEEB2JhZERlYnQIBQ0kdDA1NDY5NzU0ODc2Al8yAwkBAiE9AgUHYmFkRGVidAAACQACAQIdSW52YWxpZCByZW1vdmVkIG1hcmdpbiBhbW91bnQEC21hcmdpblJhdGlvCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBD2luaXRNYXJnaW5SYXRpbwAGCQACAQkArAICCQCsAgIJAKwCAgIZVG9vIG11Y2ggbWFyZ2luIHJlbW92ZWQ6IAkApAMBBQttYXJnaW5SYXRpbwIDIDwgCQCkAwEJAQ9pbml0TWFyZ2luUmF0aW8ABA1xdW90ZUFzc2V0U3RyCQDYBAEJAQpxdW90ZUFzc2V0AAQNJHQwNTUzMjA1NTM3NAkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDU1MzIwNTUzNzQCXzEEB2Fzc2V0SWQIBQ0kdDA1NTMyMDU1Mzc0Al8yBAd0b1JlcGF5AwkAZgIFB19hbW91bnQFCGJvcnJvd2VkBQhib3Jyb3dlZAUHX2Ftb3VudAQKdG9XaXRoZHJhdwMJAGYCBQhib3Jyb3dlZAUHX2Ftb3VudAAACQBlAgUHX2Ftb3VudAUIYm9ycm93ZWQEC2ZpbmFsQm9ycm93CQBlAgUIYm9ycm93ZWQFB3RvUmVwYXkEFXN3aXRjaFBvc2l0aW9uVG9RdW90ZQMJAGYCBQtmaW5hbEJvcnJvdwAABQNuaWwJARN1cGRhdGVQb3NpdGlvbkFzc2V0AgUHX3RyYWRlcgUNcXVvdGVBc3NldFN0cgQNZG9TYW5pdHlDaGVjawMJAQIhPQIJAGQCBQd0b1JlcGF5BQp0b1dpdGhkcmF3BQdfYW1vdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCHRvUmVwYXk9CQCkAwEFB3RvUmVwYXkCDiArIHRvV2l0aGRyYXc9CQCkAwEFCnRvV2l0aGRyYXcCBCAhPSAJAKQDAQUHX2Ftb3VudAUDbmlsAwkAAAIFDWRvU2FuaXR5Q2hlY2sFDWRvU2FuaXR5Q2hlY2sECWRvVW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCBQ1xdW90ZUFzc2V0U3RyCQDMCAIFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFCWRvVW5zdGFrZQUJZG9VbnN0YWtlBBZyZXR1cm5Db2xsYXRlcmFsQWN0aW9uAwkAZgIFB3RvUmVwYXkAAAQHZG9SZXBheQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgVyZXBheQkAzAgCBQdfdHJhZGVyCQDMCAIFB2Fzc2V0SWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQd0b1JlcGF5BQNuaWwDCQAAAgUHZG9SZXBheQUHZG9SZXBheQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB3RvUmVwYXkJANkEAQUHYXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplAwkAZgIFCnRvV2l0aGRyYXcAAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQp0b1dpdGhkcmF3CQDOCAIJAM4IAgkAzggCBQNuaWwJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQFFXN3aXRjaFBvc2l0aW9uVG9RdW90ZQUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uAAQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkEDl90cmFkZXJBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUHX3RyYWRlcgIOSW52YWxpZCBjYWxsZXIDAwMJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNTc1NjY1Nzk0NAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIGBAJ4MQgFDSR0MDU3NTY2NTc5NDQCXzEED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDU3NTY2NTc5NDQCXzIEC3JlYWxpemVkUG5sCAUNJHQwNTc1NjY1Nzk0NAJfMwQNbWFyZ2luVG9WYXVsdAgFDSR0MDU3NTY2NTc5NDQCXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NzU2NjU3OTQ0Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NzU2NjU3OTQ0Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTc1NjY1Nzk0NAJfNwQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA1NzU2NjU3OTQ0Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTc1NjY1Nzk0NAJfOQQCeDIIBQ0kdDA1NzU2NjU3OTQ0A18xMAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA1NzU2NjU3OTQ0A18xMQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNTc1NjY1Nzk0NANfMTIDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAiZVbmFibGUgdG8gY2xvc2UgcG9zaXRpb24gd2l0aCBiYWQgZGVidAQOd2l0aGRyYXdBbW91bnQJAQNhYnMBBQ1tYXJnaW5Ub1ZhdWx0BAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDSR0MDU4MTUzNTgyOTUDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1hbW1OZXdCYWxhbmNlCAUNJHQwNTgxNTM1ODI5NQJfMQQQZ2V0RnJvbUluc3VyYW5jZQgFDSR0MDU4MTUzNTgyOTUCXzIEAXgDCQBmAgUQZ2V0RnJvbUluc3VyYW5jZQAABBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFEGdldEZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCCQBlAgUOd2l0aGRyYXdBbW91bnQFEGdldEZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEDSR0MDU4Nzk3NTg4NTEJARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQUHX3RyYWRlcgQIYm9ycm93ZWQIBQ0kdDA1ODc5NzU4ODUxAl8xBAdhc3NldElkCAUNJHQwNTg3OTc1ODg1MQJfMgQNJHQwNTg4NjY1OTc4MwMJAGYCBQhib3Jyb3dlZAAAAwkAZwIFDndpdGhkcmF3QW1vdW50BQhib3Jyb3dlZAQHZG9SZXBheQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgVyZXBheQkAzAgCBQdfdHJhZGVyCQDMCAIFB2Fzc2V0SWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQhib3Jyb3dlZAUDbmlsAwkAAAIFB2RvUmVwYXkFB2RvUmVwYXkJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5fdHJhZGVyQWRkcmVzcwUIYm9ycm93ZWQJANkEAQUHYXNzZXRJZAUDbmlsCQBlAgUOd2l0aGRyYXdBbW91bnQFCGJvcnJvd2VkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIYcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlCQDMCAIFB190cmFkZXIJAMwIAgUHYXNzZXRJZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDndpdGhkcmF3QW1vdW50BQNuaWwDCQAAAgUPcmVhbGl6ZUFuZENsb3NlBQ9yZWFsaXplQW5kQ2xvc2UJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5fdHJhZGVyQWRkcmVzcwUOd2l0aGRyYXdBbW91bnQJANkEAQUHYXNzZXRJZAUDbmlsAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgUDbmlsBQ53aXRoZHJhd0Ftb3VudAMJAAACBQ0kdDA1ODg2NjU5NzgzBQ0kdDA1ODg2NjU5NzgzBBNxdW90ZVdpdGhkcmF3QW1vdW50CAUNJHQwNTg4NjY1OTc4MwJfMgQUc2VuZENvbGxhdGVyYWxBY3Rpb24IBQ0kdDA1ODg2NjU5NzgzAl8xBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQl1cGRhdGVBbW0HBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyAwkAZgIFE3F1b3RlV2l0aGRyYXdBbW91bnQAAAkBCHdpdGhkcmF3AgUOX3RyYWRlckFkZHJlc3MFE3F1b3RlV2l0aGRyYXdBbW91bnQJAM4IAgkAzggCBQNuaWwJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQUUc2VuZENvbGxhdGVyYWxBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbGlxdWlkYXRlAQdfdHJhZGVyBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBAttYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECE1VuYWJsZSB0byBsaXF1aWRhdGUDAwMJAGYCBQ9zcG90TWFyZ2luUmF0aW8JARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkAZgIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAAAAcJAGYCBQxERUNJTUFMX1VOSVQJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAHBA0kdDA2MTQ4MzYxNjMzCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2MTQ4MzYxNjMzAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDYxNDgzNjE2MzMCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjE0ODM2MTYzMwJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2MTQ4MzYxNjMzAl80BApfZGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQlESVJfU0hPUlQFCERJUl9MT05HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBA0kdDA2MTg1ODYxOTYyCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA2MTg1ODYxOTYyAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwNjE4NTg2MTk2MgJfMgQNJHQwNjE5NzA2MjIwMgkBCXN3YXBJbnB1dAIFBWlzQWRkBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBVleGNoYW5nZWRQb3NpdGlvblNpemUIBQ0kdDA2MTk3MDYyMjAyAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjE5NzA2MjIwMgJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjE5NzA2MjIwMgJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDYxOTcwNjIyMDICXzQEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNjE5NzA2MjIwMgJfNQQQbGlxdWlkYXRpb25SYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBAtyZWFsaXplZFBubAkBBG11bGQCBQ11bnJlYWxpemVkUG5sBRBsaXF1aWRhdGlvblJhdGlvBA0kdDA2MjQxMzYyNjQ2CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNjI0MTM2MjY0NgJfMQQHYmFkRGVidAgFDSR0MDYyNDEzNjI2NDYCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNjI0MTM2MjY0NgJfMwQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBJsaXF1aWRhdGlvblBlbmFsdHkJAQRtdWxkAgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ABA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQOZmVlVG9JbnN1cmFuY2UJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQRbmV3UG9zaXRpb25NYXJnaW4JAGUCBQxyZW1haW5NYXJnaW4FEmxpcXVpZGF0aW9uUGVuYWx0eQQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsBBRuZXdQb3NpdGlvbkxzdFVwZENQRgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA0kdDA2MzgxOTYzOTYyAwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNbmV3QW1tQmFsYW5jZQgFDSR0MDYzODE5NjM5NjICXzEEEXRha2VGcm9tSW5zdXJhbmNlCAUNJHQwNjM4MTk2Mzk2MgJfMgQNJHQwNjM5NzA2NDAyNAkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDYzOTcwNjQwMjQCXzEEB2Fzc2V0SWQIBQ0kdDA2Mzk3MDY0MDI0Al8yBBVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwDCQBmAgUIYm9ycm93ZWQAAAQQY29sbGF0ZXJhbFRvU2VsbAkBBG11bGQCBQhib3Jyb3dlZAUQbGlxdWlkYXRpb25SYXRpbwQPcmVhbGl6ZUFuZENsb3NlCQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACEHJlYWxpemVQYXJ0aWFsbHkJAMwIAgUHX3RyYWRlcgkAzAgCBQdhc3NldElkCQDMCAIFEGNvbGxhdGVyYWxUb1NlbGwFA25pbAUDbmlsAwkAAAIFD3JlYWxpemVBbmRDbG9zZQUPcmVhbGl6ZUFuZENsb3NlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAQBeAMJAGYCBRF0YWtlRnJvbUluc3VyYW5jZQAABBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFEXRha2VGcm9tSW5zdXJhbmNlBQNuaWwFA25pbAMJAAACBRF3aXRoZHJhd0luc3VyYW5jZQURd2l0aGRyYXdJbnN1cmFuY2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFAXgFAXgEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQURdGFrZUZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQl1cGRhdGVBbW0HBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFD2ZlZVRvTGlxdWlkYXRvcgkBDXVwZGF0ZUJhbGFuY2UBBQ1uZXdBbW1CYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDA2NTg2NjY2MzIxCQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgUHX3RyYWRlcgcEAngxCAUNJHQwNjU4NjY2NjMyMQJfMQQHYmFkRGVidAgFDSR0MDY1ODY2NjYzMjECXzIEAngyCAUNJHQwNjU4NjY2NjMyMQJfMwQCeDMIBQ0kdDA2NTg2NjY2MzIxAl80BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjU4NjY2NjMyMQJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjU4NjY2NjMyMQJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDY1ODY2NjYzMjECXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNjU4NjY2NjMyMQJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDY1ODY2NjYzMjECXzkEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA2NTg2NjY2MzIxA18xMAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA2NTg2NjY2MzIxA18xMQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNjU4NjY2NjMyMQNfMTIEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBA5mZWVUb0luc3VyYW5jZQkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA0kdDA2NjczMzY2ODc2AwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNbmV3QW1tQmFsYW5jZQgFDSR0MDY2NzMzNjY4NzYCXzEEEXRha2VGcm9tSW5zdXJhbmNlCAUNJHQwNjY3MzM2Njg3NgJfMgQNJHQwNjY4ODQ2NjkzOAkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDY2ODg0NjY5MzgCXzEEB2Fzc2V0SWQIBQ0kdDA2Njg4NDY2OTM4Al8yBBVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwDCQBmAgUIYm9ycm93ZWQAAAQPcmVhbGl6ZUFuZENsb3NlCQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACGHJlYWxpemVQYXJ0aWFsbHlBbmRDbG9zZQkAzAgCBQdfdHJhZGVyCQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFD3JlYWxpemVBbmRDbG9zZQUPcmVhbGl6ZUFuZENsb3NlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAQBeAMJAGYCBRF0YWtlRnJvbUluc3VyYW5jZQAABBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFEXRha2VGcm9tSW5zdXJhbmNlBQNuaWwFA25pbAMJAAACBRF3aXRoZHJhd0luc3VyYW5jZQURd2l0aGRyYXdJbnN1cmFuY2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFAXgFAXgEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQURdGFrZUZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwAEFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAwMDCQBmAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABA0kdDA2ODczNjY4Nzk4CQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwNjg3MzY2ODc5OAJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDY4NzM2Njg3OTgCXzIJAQ11cGRhdGVGdW5kaW5nBQkAZAIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAZAIJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFE2xvbmdQcmVtaXVtRnJhY3Rpb24JAGQCCQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UBaQEOZm9yY2VNb3ZlQXNzZXQCB190cmFkZXIHX2Ftb3VudAMDCQECIT0CCQCnCAEJAQ5hZG1pblB1YmxpY0tleQAIBQFpBmNhbGxlcgYJAGYCAAAFB19hbW91bnQJAAIBAiFJbnZhbGlkIGZvcmNlTW92ZUFzc2V0IHBhcmFtZXRlcnMEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgUHX2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQEId2l0aGRyYXcCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdfdHJhZGVyBQdfYW1vdW50CQENdXBkYXRlQmFsYW5jZQEJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkanVzdFBlZwEGX3ByaWNlAwMJAQIhPQIJAKcIAQkBDmFkbWluUHVibGljS2V5AAgFAWkGY2FsbGVyBgkAZgIAAAUGX3ByaWNlCQACAQIcSW52YWxpZCBhZGp1c3RQZWcgcGFyYW1ldGVycwQNJHQwNjk3ODk2OTg3NQkBEGdldFBlZ0FkanVzdENvc3QBBQZfcHJpY2UEFG5ld1F1b3RlQXNzZXRSZXNlcnZlCAUNJHQwNjk3ODk2OTg3NQJfMQQNcGVnQ2hhbmdlQ29zdAgFDSR0MDY5Nzg5Njk4NzUCXzIDCQAAAgUNcGVnQ2hhbmdlQ29zdAAACQACAQIRTm90aGluZyB0byBhZGp1c3QDCQBmAgUNcGVnQ2hhbmdlQ29zdAAACQERdXBkYXRlQW1tUmVzZXJ2ZXMCBRRuZXdRdW90ZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgkBA2FicwEFDXBlZ0NoYW5nZUNvc3QFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAkBA2FicwEFDXBlZ0NoYW5nZUNvc3QFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlCQDOCAIJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAJAQNhYnMBBQ1wZWdDaGFuZ2VDb3N0CQERdXBkYXRlQW1tUmVzZXJ2ZXMCBRRuZXdRdW90ZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQbWlncmF0ZUxpcXVpZGl0eQAEBmFtb3VudAkBCGNiYWxhbmNlAAMJAGYCBQZhbW91bnQAAAQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCBQZhbW91bnQJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQZhbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAWkBBXZfZ2V0AQdfdHJhZGVyBA0kdDA3MTUxNjcxNTc2CQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgUHX3RyYWRlcgcEAngxCAUNJHQwNzE1MTY3MTU3NgJfMQQCeDIIBQ0kdDA3MTUxNjcxNTc2Al8yBAJ4MwgFDSR0MDcxNTE2NzE1NzYCXzMEAng0CAUNJHQwNzE1MTY3MTU3NgJfNAkAAgEJAKwCAgkArAICCQCsAgIJAQFzAQUCeDIJAQFzAQUCeDMJAQFzAQUCeDQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQBB190cmFkZXIEDSR0MDcxNzIzNzE4MzQJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDcxNzIzNzE4MzQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwNzE3MjM3MTgzNAJfMgQDcG9uCAUNJHQwNzE3MjM3MTgzNAJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MTcyMzcxODM0Al80BA0kdDA3MTgzOTcxOTQwCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDA3MTgzOTcxOTQwAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwNzE4Mzk3MTk0MAJfMgQNJHQwNzE5NDU3MjEyNwkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNzE5NDU3MjEyNwJfMQQHYmFkRGVidAgFDSR0MDcxOTQ1NzIxMjcCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNzE5NDU3MjEyNwJfMwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFDHJlbWFpbk1hcmdpbgkBAXMBBQ5mdW5kaW5nUGF5bWVudAkBAXMBCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEBcwEFDXVucmVhbGl6ZWRQbmwJAQFzAQUHYmFkRGVidAkBAXMBBRBwb3NpdGlvbk5vdGlvbmFsAWkBFXZpZXdfZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBARjb3N0CQEQZ2V0UGVnQWRqdXN0Q29zdAEFBl9wcmljZQkAAgEJAKQDAQgFBGNvc3QCXzIBaQEPdmlld19nZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQNJHQwNzI1MTg3MjU4MAkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDcyNTE4NzI1ODACXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3MjUxODcyNTgwAl8yBAtsb25nRnVuZGluZwkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UEDHNob3J0RnVuZGluZwkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQkArAICCQCsAgIJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcJAQFzAQkBEGdldFR3YXBTcG90UHJpY2UACQEBcwEJARJnZXRPcmFjbGVUd2FwUHJpY2UAAWkBGHZpZXdfZ2V0Qm9ycm93ZWRCeVRyYWRlcgEHX3RyYWRlcgQNJHQwNzI4NzA3MjkyNAkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDcyODcwNzI5MjQCXzEEB2Fzc2V0SWQIBQ0kdDA3Mjg3MDcyOTI0Al8yCQACAQkArAICCQEBcwEFCGJvcnJvd2VkBQdhc3NldElkAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5AMmgpy8=", "height": 2310891, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8iqYrrRAKzR2kHBzQx24RtrsoGKdYdqHsf93zjTd5Ajz Next: F3UGMSQFKnv1otcpC9jNZzmhXGnToxQPjEm6beCFwih6 Diff:
OldNewDifferences
1919
2020 let i = "k_positionClosedDate"
2121
22-let j = "k_initialized"
22+let j = "k_positionAsset"
2323
24-let k = "k_paused"
24+let k = "k_initialized"
2525
26-let l = "k_fee"
26+let l = "k_paused"
2727
28-let m = "k_fundingPeriod"
28+let m = "k_fee"
2929
30-let n = "k_initMarginRatio"
30+let n = "k_fundingPeriod"
3131
32-let o = "k_mmr"
32+let o = "k_initMarginRatio"
3333
34-let p = "k_liquidationFeeRatio"
34+let p = "k_mmr"
3535
36-let q = "k_partLiquidationRatio"
36+let q = "k_liquidationFeeRatio"
3737
38-let r = "k_spreadLimit"
38+let r = "k_partLiquidationRatio"
3939
40-let s = "k_maxPriceImpact"
40+let s = "k_spreadLimit"
4141
42-let t = "k_maxPriceSpread"
42+let t = "k_maxPriceImpact"
4343
44-let u = "k_lastDataStr"
44+let u = "k_maxPriceSpread"
4545
46-let v = "k_lastMinuteId"
46+let v = "k_lastDataStr"
4747
48-let w = "k_twapDataLastCumulativePrice"
48+let w = "k_lastMinuteId"
4949
50-let x = "k_twapDataLastPrice"
50+let x = "k_twapDataLastCumulativePrice"
5151
52-let y = "k_twapDataPreviousMinuteId"
52+let y = "k_twapDataLastPrice"
5353
54-let z = "k_latestLongPremiumFraction"
54+let z = "k_twapDataPreviousMinuteId"
5555
56-let A = "k_latestShortPremiumFraction"
56+let A = "k_latestLongPremiumFraction"
5757
58-let B = "k_nextFundingBlockMinTimestamp"
58+let B = "k_latestShortPremiumFraction"
5959
60-let C = "k_longFundingRate"
60+let C = "k_nextFundingBlockMinTimestamp"
6161
62-let D = "k_shortFundingRate"
62+let D = "k_longFundingRate"
6363
64-let E = "k_qtAstR"
64+let E = "k_shortFundingRate"
6565
66-let F = "k_bsAstR"
66+let F = "k_qtAstR"
6767
68-let G = "k_totalPositionSize"
68+let G = "k_bsAstR"
6969
70-let H = "k_totalLongPositionSize"
70+let H = "k_totalPositionSize"
7171
72-let I = "k_totalShortPositionSize"
72+let I = "k_totalLongPositionSize"
7373
74-let J = "k_cumulativeNotional"
74+let J = "k_totalShortPositionSize"
7575
76-let K = "k_openInterestNotional"
76+let K = "k_cumulativeNotional"
7777
78-let L = "k_coordinatorAddress"
78+let L = "k_openInterestNotional"
7979
80-let M = "k_insurance_address"
80+let M = "k_coordinatorAddress"
8181
82-let N = "k_admin_address"
82+let N = "k_insurance_address"
8383
84-let O = "k_admin_public_key"
84+let O = "k_admin_address"
8585
86-let P = "k_quote_asset"
86+let P = "k_admin_public_key"
8787
88-let Q = "k_quote_staking"
88+let Q = "k_quote_asset"
8989
90-let R = "k_staking_address"
90+let R = "k_quote_staking"
9191
92-let S = "k_miner_address"
92+let S = "k_staking_address"
9393
94-let T = "k_orders_address"
94+let T = "k_miner_address"
9595
96-let U = "k_referral_address"
96+let U = "k_orders_address"
9797
98-let V = "k_manager_address"
98+let V = "k_referral_address"
9999
100-let W = "k_nft_manager_address"
100+let W = "k_manager_address"
101101
102-func X () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
102+let X = "k_collateral_address"
103+
104+let Y = "k_exchange_address"
105+
106+let Z = "k_nft_manager_address"
107+
108+let aa = "k_trader_market_asset_collateral"
109+
110+func ab (ac,ad) = ((ac + "_") + ad)
103111
104112
105-func Y () = addressFromString(getStringValue(X(), N))
113+func ae () = valueOrErrorMessage(addressFromString(getStringValue(this, M)), "Coordinator not set")
106114
107115
108-func Z () = fromBase58String(getStringValue(X(), O))
116+func af () = addressFromString(getStringValue(ae(), O))
109117
110118
111-func aa () = fromBase58String(getStringValue(X(), P))
119+func ag () = fromBase58String(getStringValue(ae(), P))
112120
113121
114-func ab () = valueOrErrorMessage(addressFromString(getStringValue(X(), Q)), "Quote asset staking not set")
122+func ah () = fromBase58String(getStringValue(ae(), Q))
115123
116124
117-func ac () = valueOrErrorMessage(addressFromString(getStringValue(X(), R)), "Staking not set")
125+func ai () = valueOrErrorMessage(addressFromString(getStringValue(ae(), R)), "Quote asset staking not set")
118126
119127
120-func ad () = valueOrErrorMessage(addressFromString(getStringValue(X(), M)), "Insurance not set")
128+func aj () = valueOrErrorMessage(addressFromString(getStringValue(ae(), S)), "Staking not set")
121129
122130
123-func ae () = valueOrErrorMessage(addressFromString(getStringValue(X(), S)), "Miner not set")
131+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ae(), N)), "Insurance not set")
124132
125133
126-func af () = valueOrErrorMessage(addressFromString(getStringValue(X(), T)), "Orders not set")
134+func al () = valueOrErrorMessage(addressFromString(getStringValue(ae(), T)), "Miner not set")
127135
128136
129-func ag () = valueOrErrorMessage(addressFromString(getStringValue(X(), U)), "Referral not set")
137+func am () = valueOrErrorMessage(addressFromString(getStringValue(ae(), U)), "Orders not set")
130138
131139
132-func ah () = valueOrErrorMessage(addressFromString(getStringValue(X(), V)), "Manager not set")
140+func an () = valueOrErrorMessage(addressFromString(getStringValue(ae(), V)), "Referral not set")
133141
134142
135-func ai () = valueOrErrorMessage(addressFromString(getStringValue(X(), W)), "NFT Manager not set")
143+func ao () = valueOrErrorMessage(addressFromString(getStringValue(ae(), W)), "Manager not set")
136144
137145
138-let aj = "k_token_param"
139-
140-let ak = "k_token_type"
141-
142-let al = "fee_reduction"
143-
144-let am = 1
145-
146-let an = 2
147-
148-let ao = 15
149-
150-let ap = 15
151-
152-let aq = 1000
153-
154-let ar = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
155-
156-let as = (86400 * ar)
157-
158-let at = 100
159-
160-let au = 1
161-
162-let av = 2
163-
164-func aw (ax) = (toString(ax) + ",")
146+func ap () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Z)), "NFT Manager not set")
165147
166148
167-func ay (ax,az) = fraction(ax, ar, az, HALFEVEN)
149+func aq () = valueOrErrorMessage(addressFromString(getStringValue(ae(), X)), "Collateral Manager not set")
168150
169151
170-func aA (ax,az) = fraction(ax, az, ar, HALFEVEN)
152+func ar () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ae(), Y), "No swap address")), "Invalid swap address")
171153
172154
173-func aB (ax) = if ((ax > 0))
174- then ax
175- else -(ax)
155+let as = "k_whitelist_asset"
156+
157+func at (au) = valueOrElse(getBoolean(aq(), ab(as, au)), false)
176158
177159
178-func aC (ax,az) = if ((ax >= az))
179- then ax
180- else az
160+let av = "k_token_param"
161+
162+let aw = "k_token_type"
163+
164+let ax = "fee_reduction"
165+
166+let ay = 1
167+
168+let az = 2
169+
170+let aA = 15
171+
172+let aB = 15
173+
174+let aC = 1000
175+
176+let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
177+
178+let aE = (86400 * aD)
179+
180+let aF = 100
181+
182+let aG = 1
183+
184+let aH = 2
185+
186+func aI (aJ) = (toString(aJ) + ",")
181187
182188
183-func aD (aE,aF) = ((aE + "_") + aF)
189+func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
184190
185191
186-func aG (aH) = {
187- func aI (aJ,aK) = ((aJ + aK) + ",")
192+func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
188193
189- let aL = {
190- let aM = aH
191- let aN = size(aM)
192- let aO = ""
193- func aP (aQ,aR) = if ((aR >= aN))
194- then aQ
195- else aI(aQ, aM[aR])
196194
197- func aS (aQ,aR) = if ((aR >= aN))
198- then aQ
195+func aN (aJ) = if ((aJ > 0))
196+ then aJ
197+ else -(aJ)
198+
199+
200+func aO (aJ,aL) = if ((aJ >= aL))
201+ then aJ
202+ else aL
203+
204+
205+func aP (aQ) = {
206+ func aR (aS,aT) = ((aS + aT) + ",")
207+
208+ let aU = {
209+ let aV = aQ
210+ let aW = size(aV)
211+ let aX = ""
212+ func aY (aZ,ba) = if ((ba >= aW))
213+ then aZ
214+ else aR(aZ, aV[ba])
215+
216+ func bb (aZ,ba) = if ((ba >= aW))
217+ then aZ
199218 else throw("List size exceeds 20")
200219
201- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
220+ bb(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
202221 }
203- let aT = dropRight(aL, 1)
204- let aU = if ((take(aT, 1) == ","))
205- then drop(aT, 1)
206- else aT
207- aU
222+ let bc = dropRight(aU, 1)
223+ let bd = if ((take(bc, 1) == ","))
224+ then drop(bc, 1)
225+ else bc
226+ bd
208227 }
209228
210229
211-func aV (aW) = split(aW, ",")
230+func be (bf) = split(bf, ",")
212231
213232
214-func aX (aH,aY,aZ) = if ((size(aH) > aY))
215- then (removeByIndex(aH, 0) :+ aZ)
216- else (aH :+ aZ)
233+func bg (aQ,bh,bi) = if ((size(aQ) > bh))
234+ then (removeByIndex(aQ, 0) :+ bi)
235+ else (aQ :+ bi)
217236
218237
219-func ba (bb) = valueOrErrorMessage(getInteger(this, bb), ("no value for " + bb))
238+func bj (bk) = valueOrErrorMessage(getInteger(this, bk), ("no value for " + bk))
220239
221240
222-func bc (aF,aE) = {
223- let aK = valueOrErrorMessage(getString(aF, aE), ("No value for key " + aE))
224- aK
241+func bl (ad,ac) = {
242+ let aT = valueOrErrorMessage(getString(ad, ac), ("No value for key " + ac))
243+ aT
225244 }
226245
227246
228-func bd (aF,aE) = {
229- let aK = valueOrErrorMessage(getInteger(aF, aE), ("No value for key " + aE))
230- aK
247+func bm (ad,ac) = {
248+ let aT = valueOrErrorMessage(getInteger(ad, ac), ("No value for key " + ac))
249+ aT
231250 }
232251
233252
234-func be () = ba(d)
253+func bn () = bj(d)
235254
236255
237-func bf () = ba(l)
256+func bo () = bj(m)
238257
239258
240-func bg () = ba(n)
259+func bp () = bj(o)
241260
242261
243-func bh () = ba(E)
262+func bq () = bj(F)
244263
245264
246-func bi () = ba(F)
265+func br () = bj(G)
247266
248267
249-func bj () = ba(G)
268+func bs () = bj(H)
250269
251270
252-func bk () = ba(J)
271+func bt () = bj(K)
253272
254273
255-func bl () = ba(K)
274+func bu () = bj(L)
256275
257276
258-func bm () = ba(B)
277+func bv () = bj(C)
259278
260279
261-func bn () = ba(m)
280+func bw () = bj(n)
262281
263282
264-func bo () = (bn() * ar)
283+func bx () = (bw() * aD)
265284
266285
267-func bp () = (bn() * aq)
286+func by () = (bw() * aC)
268287
269288
270-func bq () = ba(o)
289+func bz () = bj(p)
271290
272291
273-func br () = ba(p)
292+func bA () = bj(q)
274293
275294
276-func bs () = ba(q)
295+func bB () = bj(r)
277296
278297
279-func bt () = ba(r)
298+func bC () = bj(s)
280299
281300
282-func bu () = ba(s)
301+func bD () = bj(t)
283302
284303
285-func bv () = ba(t)
304+func bE () = bj(u)
286305
287306
288-func bw () = ba(z)
307+func bF () = bj(A)
289308
290309
291-func bx () = ba(A)
310+func bG () = bj(B)
292311
293312
294-func by () = ba(I)
313+func bH () = bj(J)
295314
296315
297-func bz () = ba(H)
316+func bI () = bj(I)
298317
299318
300-func bA (bB) = valueOrElse(getString(af(), "k_sender"), toString(bB.caller))
319+func bJ (bK) = valueOrElse(getString(am(), "k_sender"), toString(bK.caller))
301320
302321
303-func bC (bD,bE,bF) = {
304- let bG = (bD - bE)
305- if (if (bF)
306- then (0 > bG)
322+func bL (bM,bN,bO) = {
323+ let bP = (bM - bN)
324+ if (if (bO)
325+ then (0 > bP)
307326 else false)
308327 then throw("Invalid margin")
309- else if (if (!(bF))
310- then (bG >= 0)
328+ else if (if (!(bO))
329+ then (bP >= 0)
311330 else false)
312331 then throw("Invalid margin")
313332 else true
314333 }
315334
316335
317-func bH (bI) = if ((bI == 0))
336+func bQ (bR) = if ((bR == 0))
318337 then throw("Should not be called with _positionSize == 0")
319- else if ((bI > 0))
320- then bw()
321- else bx()
338+ else if ((bR > 0))
339+ then bF()
340+ else bG()
322341
323342
324-func bJ (bK) = {
325- let bL = getInteger(this, aD(e, bK))
326- let bM = bL
327- if ($isInstanceOf(bM, "Int"))
343+func bS (bT) = {
344+ let bU = getInteger(this, ab(e, bT))
345+ let bV = bU
346+ if ($isInstanceOf(bV, "Int"))
328347 then {
329- let bN = bM
330- $Tuple4(bN, getIntegerValue(this, aD(f, bK)), getIntegerValue(this, aD(g, bK)), getIntegerValue(this, aD(h, bK)))
348+ let bW = bV
349+ $Tuple4(bW, getIntegerValue(this, ab(f, bT)), getIntegerValue(this, ab(g, bT)), getIntegerValue(this, ab(h, bT)))
331350 }
332351 else $Tuple4(0, 0, 0, 0)
333352 }
334353
335354
336-func bO (bK) = if ((bJ(bK)._1 == 0))
355+func bX (bT) = {
356+ let bY = getString(this, ab(j, bT))
357+ let bV = bY
358+ if ($isInstanceOf(bV, "String"))
359+ then {
360+ let bZ = bV
361+ bZ
362+ }
363+ else toBase58String(ah())
364+ }
365+
366+
367+func ca (bT) = if ((bS(bT)._1 == 0))
337368 then throw("No open position")
338369 else true
339370
340371
341-func bP () = valueOrElse(getBoolean(this, j), false)
372+func cb () = valueOrElse(getBoolean(this, k), false)
342373
343374
344-func bQ () = valueOrElse(getBoolean(this, k), false)
375+func cc () = valueOrElse(getBoolean(this, l), false)
345376
346377
347-func bR (bS,bT,bU) = if (bS)
378+func cd (ce,cf,cg) = if (ce)
348379 then {
349- let bV = (bi() - bU)
350- if ((0 >= bV))
380+ let ch = (br() - cg)
381+ if ((0 >= ch))
351382 then throw("Tx lead to base asset reserve <= 0, revert")
352- else $Tuple4((bh() + bT), bV, (bj() + bU), (bk() + bT))
383+ else $Tuple4((bq() + cf), ch, (bs() + cg), (bt() + cf))
353384 }
354385 else {
355- let bW = (bh() - bT)
356- if ((0 >= bW))
386+ let ci = (bq() - cf)
387+ if ((0 >= ci))
357388 then throw("Tx lead to base quote reserve <= 0, revert")
358- else $Tuple4(bW, (bi() + bU), (bj() - bU), (bk() - bT))
389+ else $Tuple4(ci, (br() + cg), (bs() - cg), (bt() - cf))
359390 }
360391
361392
362-func bX (bS,bT) = {
363- let bY = bh()
364- let bZ = bi()
365- let bb = aA(bY, bZ)
366- let ca = if (bS)
367- then (bY + bT)
368- else (bY - bT)
369- let cb = ay(bb, ca)
370- let cc = aB((cb - bZ))
371- let cd = if (bS)
372- then cc
373- else -(cc)
374- let ce = bR(bS, bT, cc)
375- let cf = ce._1
376- let cg = ce._2
377- let ch = ce._3
378- let ci = ce._4
379- let cj = ay(bY, bZ)
380- let ck = ay(bT, cc)
381- let cl = aB((cj - ck))
382- let cm = (ar - ay(cj, (cj + cl)))
383- let cn = bu()
384- if ((cm > cn))
385- then throw(((((((((((((("Price impact " + toString(cm)) + " > max price impact ") + toString(cn)) + " before quote asset: ") + toString(bY)) + " before base asset: ") + toString(bZ)) + " quote asset amount to exchange: ") + toString(bT)) + " price before: ") + toString(cj)) + " marketPrice: ") + toString(ck)))
386- else $Tuple5(cd, cf, cg, ch, ci)
393+func cj (ce,cf) = {
394+ let ck = bq()
395+ let cl = br()
396+ let bk = aM(ck, cl)
397+ let cm = if (ce)
398+ then (ck + cf)
399+ else (ck - cf)
400+ let cn = aK(bk, cm)
401+ let co = aN((cn - cl))
402+ let cp = if (ce)
403+ then co
404+ else -(co)
405+ let cq = cd(ce, cf, co)
406+ let cr = cq._1
407+ let cs = cq._2
408+ let ct = cq._3
409+ let cu = cq._4
410+ let cv = aK(ck, cl)
411+ let cw = aK(cf, co)
412+ let cx = aN((cv - cw))
413+ let cy = (aD - aK(cv, (cv + cx)))
414+ let cz = bD()
415+ if ((cy > cz))
416+ then throw(((((((((((((("Price impact " + toString(cy)) + " > max price impact ") + toString(cz)) + " before quote asset: ") + toString(ck)) + " before base asset: ") + toString(cl)) + " quote asset amount to exchange: ") + toString(cf)) + " price before: ") + toString(cv)) + " marketPrice: ") + toString(cw)))
417+ else $Tuple5(cp, cr, cs, ct, cu)
387418 }
388419
389420
390-func co (cp,cq,cr,cs) = {
391- let ct = if ((cp != 0))
421+func cA (cB,cC,cD,cE) = {
422+ let cF = if ((cB != 0))
392423 then {
393- let cu = bH(cp)
394- aA((cu - cr), cp)
424+ let cG = bQ(cB)
425+ aM((cG - cD), cB)
395426 }
396427 else 0
397- let cv = ((cs - ct) + cq)
398- let cw = if ((0 > cv))
399- then $Tuple2(0, aB(cv))
400- else $Tuple2(aB(cv), 0)
401- let cx = cw._1
402- let cy = cw._2
403- $Tuple3(cx, cy, ct)
428+ let cH = ((cE - cF) + cC)
429+ let cI = if ((0 > cH))
430+ then $Tuple2(0, aN(cH))
431+ else $Tuple2(aN(cH), 0)
432+ let cJ = cI._1
433+ let cK = cI._2
434+ $Tuple3(cJ, cK, cF)
404435 }
405436
406437
407-func cz (bS,bU,cA,cB,cC) = {
408- let cj = ay(cB, cC)
409- if ((bU == 0))
438+func cL (ce,cg,cM,cN,cO) = {
439+ let cv = aK(cN, cO)
440+ if ((cg == 0))
410441 then throw("Invalid base asset amount")
411442 else {
412- let bb = aA(cB, cC)
413- let cD = if (bS)
414- then (cC + bU)
415- else (cC - bU)
416- let cE = ay(bb, cD)
417- let cF = aB((cE - cB))
418- let cn = bu()
419- let cG = bR(!(bS), cF, bU)
420- let cf = cG._1
421- let cg = cG._2
422- let ch = cG._3
423- let ci = cG._4
424- let ck = ay(cF, bU)
425- let cl = aB((cj - ck))
426- let cm = (ar - ay(cj, (cj + cl)))
427- if (if ((cm > cn))
428- then cA
443+ let bk = aM(cN, cO)
444+ let cP = if (ce)
445+ then (cO + cg)
446+ else (cO - cg)
447+ let cQ = aK(bk, cP)
448+ let cR = aN((cQ - cN))
449+ let cz = bD()
450+ let cS = cd(!(ce), cR, cg)
451+ let cr = cS._1
452+ let cs = cS._2
453+ let ct = cS._3
454+ let cu = cS._4
455+ let cw = aK(cR, cg)
456+ let cx = aN((cv - cw))
457+ let cy = (aD - aK(cv, (cv + cx)))
458+ if (if ((cy > cz))
459+ then cM
429460 else false)
430- then throw(((((((((((((("Price impact " + toString(cm)) + " > max price impact ") + toString(cn)) + " before quote asset: ") + toString(cB)) + " before base asset: ") + toString(cC)) + " base asset amount to exchange: ") + toString(bU)) + " price before: ") + toString(cj)) + " market price: ") + toString(ck)))
431- else $Tuple8(cF, cf, cg, ch, ci, (bz() - (if (bS)
432- then aB(bU)
433- else 0)), (by() - (if (!(bS))
434- then aB(bU)
435- else 0)), cm)
461+ then throw(((((((((((((("Price impact " + toString(cy)) + " > max price impact ") + toString(cz)) + " before quote asset: ") + toString(cN)) + " before base asset: ") + toString(cO)) + " base asset amount to exchange: ") + toString(cg)) + " price before: ") + toString(cv)) + " market price: ") + toString(cw)))
462+ else $Tuple8(cR, cr, cs, ct, cu, (bI() - (if (ce)
463+ then aN(cg)
464+ else 0)), (bH() - (if (!(ce))
465+ then aN(cg)
466+ else 0)), cy)
436467 }
437468 }
438469
439470
440-func cH (bS,bU,cA) = cz(bS, bU, cA, bh(), bi())
471+func cT (ce,cg,cM) = cL(ce, cg, cM, bq(), br())
441472
442473
443-func cI () = {
444- let cJ = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
445- let cK = getStringValue(this, a)
446- let cL = getStringValue(this, b)
447- let cM = valueOrErrorMessage(getInteger(cJ, cK), ((("Can not get oracle price. Oracle: " + toString(cJ)) + " key: ") + cK))
448- cM
474+func cU () = {
475+ let cV = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
476+ let cW = getStringValue(this, a)
477+ let cX = getStringValue(this, b)
478+ let cY = valueOrErrorMessage(getInteger(cV, cW), ((("Can not get oracle price. Oracle: " + toString(cV)) + " key: ") + cW))
479+ cY
449480 }
450481
451482
452-func cN (cB,cC) = {
453- let cO = cI()
454- let cP = ay(cB, cC)
455- let cQ = ay((cO + cP), (2 * ar))
456- let cR = ay(aB((cO - cP)), cQ)
457- if ((cR > bv()))
458- then throw(((("Price spread " + toString(cR)) + " > max price spread ") + toString(bv())))
483+func cZ (cN,cO) = {
484+ let da = cU()
485+ let db = aK(cN, cO)
486+ let dc = aK((da + db), (2 * aD))
487+ let dd = aK(aN((da - db)), dc)
488+ if ((dd > bE()))
489+ then throw(((("Price spread " + toString(dd)) + " > max price spread ") + toString(bE())))
459490 else true
460491 }
461492
462493
463-func cS () = {
464- let cB = bh()
465- let cC = bi()
466- ay(cB, cC)
494+func de () = {
495+ let cN = bq()
496+ let cO = br()
497+ aK(cN, cO)
467498 }
468499
469500
470-func cT () = {
471- let cO = cI()
472- let cU = cS()
473- (ay(aB((cO - cU)), cO) > bt())
501+func df () = {
502+ let da = cU()
503+ let dg = de()
504+ (aK(aN((da - dg)), da) > bC())
474505 }
475506
476507
477-func cV (bI,cW,cB,cC) = {
478- let cX = aB(bI)
479- let cY = (0 > bI)
480- let cZ = if ((cW == au))
508+func dh (bR,di,cN,cO) = {
509+ let dj = aN(bR)
510+ let dk = (0 > bR)
511+ let dl = if ((di == aG))
481512 then {
482- let da = cz(!(cY), cX, false, cB, cC)
483- let db = da._1
484- let dc = da._2
485- let dd = da._3
486- let de = da._4
487- db
513+ let dm = cL(!(dk), dj, false, cN, cO)
514+ let dn = dm._1
515+ let do = dm._2
516+ let dp = dm._3
517+ let dq = dm._4
518+ dn
488519 }
489- else aA(cX, cI())
490- cZ
520+ else aM(dj, cU())
521+ dl
491522 }
492523
493524
494-func df (bI,dg,cB,cC,cW) = if ((bI == 0))
525+func dr (bR,ds,cN,cO,di) = if ((bR == 0))
495526 then throw("Invalid position size")
496527 else {
497- let cY = (0 > bI)
498- let cZ = cV(bI, cW, cB, cC)
499- let dh = if (cY)
500- then (dg - cZ)
501- else (cZ - dg)
502- $Tuple2(cZ, dh)
528+ let dk = (0 > bR)
529+ let dl = dh(bR, di, cN, cO)
530+ let dt = if (dk)
531+ then (ds - dl)
532+ else (dl - ds)
533+ $Tuple2(dl, dt)
503534 }
504535
505536
506-func di (bK,cW) = {
507- let dj = bJ(bK)
508- let bN = dj._1
509- let dk = dj._2
510- let dl = dj._3
511- let dm = dj._4
512- df(bN, dl, bh(), bi(), cW)
537+func du (bT,di) = {
538+ let dv = bS(bT)
539+ let bW = dv._1
540+ let dw = dv._2
541+ let dx = dv._3
542+ let dy = dv._4
543+ dr(bW, dx, bq(), br(), di)
513544 }
514545
515546
516-func dn (do,dp,dq) = ay((do - dp), dq)
547+func dz (dA,dB,dC) = aK((dA - dB), dC)
517548
518549
519-func dr (bK,cW) = {
520- let ds = bJ(bK)
521- let bN = ds._1
522- let dk = ds._2
523- let dt = ds._3
524- let dm = ds._4
525- let du = di(bK, cW)
526- let cZ = du._1
527- let dh = du._2
528- let dv = co(bN, dk, dm, dh)
529- let cx = dv._1
530- let cy = dv._2
531- dn(cx, cy, cZ)
550+func dD (bT,di) = {
551+ let dE = bS(bT)
552+ let bW = dE._1
553+ let dw = dE._2
554+ let dF = dE._3
555+ let dy = dE._4
556+ let dG = du(bT, di)
557+ let dl = dG._1
558+ let dt = dG._2
559+ let dH = cA(bW, dw, dy, dt)
560+ let cJ = dH._1
561+ let cK = dH._2
562+ dz(cJ, cK, dl)
532563 }
533564
534565
535-func dw (bK) = dr(bK, au)
566+func dI (bT) = dD(bT, aG)
536567
537568
538-func dx (bK,bI) = {
539- let dy = aC(bs(), (ar - ay(dw(bK), bq())))
540- let dz = aA(aB(bI), dy)
541- let dA = cH((bI > 0), dz, false)
542- let dB = dA._1
543- let cm = dA._8
544- if ((bu() > cm))
545- then dB
569+func dJ (bT,bR) = {
570+ let dK = aO(bB(), (aD - aK(dI(bT), bz())))
571+ let dL = aM(aN(bR), dK)
572+ let dM = cT((bR > 0), dL, false)
573+ let dN = dM._1
574+ let cy = dM._8
575+ if ((bD() > cy))
576+ then dN
546577 else {
547- let dC = aA(aB(bI), bs())
548- let dD = cH((bI > 0), dC, false)._1
549- dD
578+ let dO = aM(aN(bR), bB())
579+ let dP = cT((bR > 0), dO, false)._1
580+ dP
550581 }
551582 }
552583
553584
554-func dE (bK,cA) = {
555- let dF = bJ(bK)
556- let bN = dF._1
557- let dk = dF._2
558- let dl = dF._3
559- let dm = dF._4
560- let dh = di(bK, au)._2
561- let dG = co(bN, dk, dm, dh)
562- let cx = dG._1
563- let cy = dG._2
564- let dC = -(bN)
565- let dH = dh
566- let dI = -(cx)
567- let dJ = cH((bN > 0), aB(bN), cA)
568- let dD = dJ._1
569- let ca = dJ._2
570- let cb = dJ._3
571- let dK = dJ._4
572- let dL = dJ._5
573- let dM = dJ._6
574- let dN = dJ._7
575- let dO = (bl() - dl)
576- $Tuple12(dC, cy, dH, dI, ca, cb, dK, dL, dO, dD, dM, dN)
585+func dQ (bT,cM) = {
586+ let dR = bS(bT)
587+ let bW = dR._1
588+ let dw = dR._2
589+ let dx = dR._3
590+ let dy = dR._4
591+ let dt = du(bT, aG)._2
592+ let dS = cA(bW, dw, dy, dt)
593+ let cJ = dS._1
594+ let cK = dS._2
595+ let dO = -(bW)
596+ let dT = dt
597+ let dU = -(cJ)
598+ let dV = cT((bW > 0), aN(bW), cM)
599+ let dP = dV._1
600+ let cm = dV._2
601+ let cn = dV._3
602+ let dW = dV._4
603+ let dX = dV._5
604+ let dY = dV._6
605+ let dZ = dV._7
606+ let ea = (bu() - dx)
607+ $Tuple12(dO, cK, dT, dU, cm, cn, dW, dX, ea, dP, dY, dZ)
577608 }
578609
579610
580-func dP () = {
581- let dQ = ((lastBlock.timestamp / 1000) / 60)
582- let dR = (dQ - ao)
583- let dS = valueOrElse(getString(this, u), "")
584- let dT = split(dS, ",")
585- func dU (aJ,dV) = if ((dR >= parseIntValue(dV)))
586- then (aJ :+ parseIntValue(dV))
587- else aJ
611+func eb () = {
612+ let ec = ((lastBlock.timestamp / 1000) / 60)
613+ let ed = (ec - aA)
614+ let ee = valueOrElse(getString(this, v), "")
615+ let ef = split(ee, ",")
616+ func eg (aS,eh) = if ((ed >= parseIntValue(eh)))
617+ then (aS :+ parseIntValue(eh))
618+ else aS
588619
589- let dW = {
590- let aM = dT
591- let aN = size(aM)
592- let aO = nil
593- func aP (aQ,aR) = if ((aR >= aN))
594- then aQ
595- else dU(aQ, aM[aR])
620+ let ei = {
621+ let aV = ef
622+ let aW = size(aV)
623+ let aX = nil
624+ func aY (aZ,ba) = if ((ba >= aW))
625+ then aZ
626+ else eg(aZ, aV[ba])
596627
597- func aS (aQ,aR) = if ((aR >= aN))
598- then aQ
628+ func bb (aZ,ba) = if ((ba >= aW))
629+ then aZ
599630 else throw("List size exceeds 20")
600631
601- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
632+ bb(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
602633 }
603- let dX = if ((size(dW) > 0))
604- then max(dW)
605- else parseIntValue(dT[0])
606- let dY = valueOrElse(getInteger(this, v), 0)
607- let dZ = valueOrElse(getInteger(this, ((w + "_") + toString(dY))), 0)
608- let ea = valueOrElse(getInteger(this, ((x + "_") + toString(dY))), 0)
609- let eb = (dZ + ((dQ - dY) * ea))
610- let ec = valueOrElse(getInteger(this, ((w + "_") + toString(dX))), 0)
611- let ed = valueOrElse(getInteger(this, ((x + "_") + toString(dX))), 0)
612- let ee = (ec + ((dR - dX) * ed))
613- ((eb - ee) / ao)
634+ let ej = if ((size(ei) > 0))
635+ then max(ei)
636+ else parseIntValue(ef[0])
637+ let ek = valueOrElse(getInteger(this, w), 0)
638+ let el = valueOrElse(getInteger(this, ((x + "_") + toString(ek))), 0)
639+ let em = valueOrElse(getInteger(this, ((y + "_") + toString(ek))), 0)
640+ let en = (el + ((ec - ek) * em))
641+ let eo = valueOrElse(getInteger(this, ((x + "_") + toString(ej))), 0)
642+ let ep = valueOrElse(getInteger(this, ((y + "_") + toString(ej))), 0)
643+ let eq = (eo + ((ed - ej) * ep))
644+ ((en - eq) / aA)
614645 }
615646
616647
617-func ef (eg) = {
618- let bI = bj()
619- let eh = (bI > 0)
620- let ei = cH(eh, aB(bI), false)._1
621- let ej = bi()
622- let ek = aA(ej, eg)
623- let el = df(bI, ei, ek, ej, au)._2
624- $Tuple2(ek, el)
648+func er (es) = {
649+ let bR = bs()
650+ let et = (bR > 0)
651+ let eu = cT(et, aN(bR), false)._1
652+ let ev = br()
653+ let ew = aM(ev, es)
654+ let ex = dr(bR, eu, ew, ev, aG)._2
655+ $Tuple2(ew, ex)
625656 }
626657
627658
628-func em () = {
629- let en = cI()
630- let eo = dP()
631- let ep = (eo - en)
632- if (if ((by() == 0))
659+func ey () = {
660+ let ez = cU()
661+ let eA = eb()
662+ let eB = (eA - ez)
663+ if (if ((bH() == 0))
633664 then true
634- else (bz() == 0))
665+ else (bI() == 0))
635666 then $Tuple2(0, 0)
636- else if ((0 > ep))
667+ else if ((0 > eB))
637668 then {
638- let eq = ay(aA(ep, bo()), as)
639- let er = ay(aA(eq, by()), bz())
640- $Tuple2(eq, er)
669+ let eC = aK(aM(eB, bx()), aE)
670+ let eD = aK(aM(eC, bH()), bI())
671+ $Tuple2(eC, eD)
641672 }
642673 else {
643- let er = ay(aA(ep, bo()), as)
644- let eq = ay(aA(er, bz()), by())
645- $Tuple2(eq, er)
674+ let eD = aK(aM(eB, bx()), aE)
675+ let eC = aK(aM(eD, bI()), bH())
676+ $Tuple2(eC, eD)
646677 }
647678 }
648679
649680
650-func es (bB) = {
651- let et = bf()
652- let eu = if ((size(bB.payments) > 1))
681+func eE (bK) = {
682+ let eF = bo()
683+ let eG = if ((size(bK.payments) > 1))
653684 then {
654- let ev = toBase58String(valueOrErrorMessage(bB.payments[1].assetId, "Invalid attached artifact"))
655- let ew = bc(ai(), aD(ak, ev))
656- if ((ew == al))
685+ let eH = toBase58String(valueOrErrorMessage(bK.payments[1].assetId, "Invalid attached artifact"))
686+ let eI = bl(ap(), ab(aw, eH))
687+ if ((eI == ax))
657688 then {
658- let ex = bd(ai(), aD(aj, ev))
659- let ey = aA(et, ex)
660- $Tuple2(ey, true)
689+ let eJ = bm(ap(), ab(av, eH))
690+ let eK = aM(eF, eJ)
691+ $Tuple2(eK, true)
661692 }
662693 else throw("Invalid attached artifact")
663694 }
664- else $Tuple2(et, false)
665- let ey = eu._1
666- let ez = eu._2
667- $Tuple2(ey, ez)
695+ else $Tuple2(eF, false)
696+ let eK = eG._1
697+ let eL = eG._2
698+ $Tuple2(eK, eL)
668699 }
669700
670701
671-func eA (eB,eC,eD,eE,eF,eG,eH,eI,eJ) = [IntegerEntry(n, eB), IntegerEntry(o, eC), IntegerEntry(p, eD), IntegerEntry(m, eE), IntegerEntry(l, eF), IntegerEntry(r, eG), IntegerEntry(s, eH), IntegerEntry(q, eI), IntegerEntry(t, eJ)]
702+func eM (eN,eO,eP,eQ,eR,eS,eT,eU,eV) = [IntegerEntry(o, eN), IntegerEntry(p, eO), IntegerEntry(q, eP), IntegerEntry(n, eQ), IntegerEntry(m, eR), IntegerEntry(s, eS), IntegerEntry(t, eT), IntegerEntry(r, eU), IntegerEntry(u, eV)]
672703
673704
674-func eK (eL,eM,eN,eO,eP) = [IntegerEntry(B, eL), IntegerEntry(z, eM), IntegerEntry(A, eN), IntegerEntry(C, eO), IntegerEntry(D, eP)]
705+func eW (eX,eY,eZ,fa,fb) = [IntegerEntry(C, eX), IntegerEntry(A, eY), IntegerEntry(B, eZ), IntegerEntry(D, fa), IntegerEntry(E, fb)]
675706
676707
677-func eQ (aF,eR,eS,eT,cu) = [IntegerEntry(aD(e, aF), eR), IntegerEntry(aD(f, aF), eS), IntegerEntry(aD(g, aF), eT), IntegerEntry(aD(h, aF), cu)]
708+func fc (ad,au) = [StringEntry(ab(j, ad), au)]
678709
679710
680-func eU (eV) = {
681- let dQ = ((lastBlock.timestamp / 1000) / 60)
682- let eW = valueOrElse(getInteger(this, v), 0)
683- if ((eW > dQ))
711+func fd (ad,fe,ff,fg,cG) = [IntegerEntry(ab(e, ad), fe), IntegerEntry(ab(f, ad), ff), IntegerEntry(ab(g, ad), fg), IntegerEntry(ab(h, ad), cG)]
712+
713+
714+func fh (fi) = {
715+ let ec = ((lastBlock.timestamp / 1000) / 60)
716+ let fj = valueOrElse(getInteger(this, w), 0)
717+ if ((fj > ec))
684718 then throw("TWAP out-of-order")
685719 else {
686- let dY = if ((eW == 0))
687- then dQ
688- else eW
689- if ((dQ > eW))
720+ let ek = if ((fj == 0))
721+ then ec
722+ else fj
723+ if ((ec > fj))
690724 then {
691- let eX = valueOrElse(getInteger(this, ((w + "_") + toString(eW))), 0)
692- let eY = valueOrElse(getInteger(this, ((x + "_") + toString(eW))), eV)
693- let eZ = (eX + ((dQ - dY) * eY))
694- let dT = aX(aV(valueOrElse(getString(this, u), "")), ao, toString(dQ))
695-[IntegerEntry(aD(w, toString(dQ)), eZ), IntegerEntry(aD(x, toString(dQ)), eV), IntegerEntry(aD(y, toString(dQ)), eW), IntegerEntry(v, dQ), StringEntry(u, aG(dT))]
725+ let fk = valueOrElse(getInteger(this, ((x + "_") + toString(fj))), 0)
726+ let fl = valueOrElse(getInteger(this, ((y + "_") + toString(fj))), fi)
727+ let fm = (fk + ((ec - ek) * fl))
728+ let ef = bg(be(valueOrElse(getString(this, v), "")), aA, toString(ec))
729+[IntegerEntry(ab(x, toString(ec)), fm), IntegerEntry(ab(y, toString(ec)), fi), IntegerEntry(ab(z, toString(ec)), fj), IntegerEntry(w, ec), StringEntry(v, aP(ef))]
696730 }
697731 else {
698- let fa = valueOrElse(getInteger(this, aD(y, toString(dQ))), 0)
699- let eX = valueOrElse(getInteger(this, aD(w, toString(fa))), 0)
700- let eY = valueOrElse(getInteger(this, aD(x, toString(fa))), eV)
701- let eZ = (eX + ((dQ - fa) * eY))
702-[IntegerEntry(aD(w, toString(dQ)), eZ), IntegerEntry(aD(x, toString(dQ)), eV)]
732+ let fn = valueOrElse(getInteger(this, ab(z, toString(ec))), 0)
733+ let fk = valueOrElse(getInteger(this, ab(x, toString(fn))), 0)
734+ let fl = valueOrElse(getInteger(this, ab(y, toString(fn))), fi)
735+ let fm = (fk + ((ec - fn) * fl))
736+[IntegerEntry(ab(x, toString(ec)), fm), IntegerEntry(ab(y, toString(ec)), fi)]
703737 }
704738 }
705739 }
706740
707741
708-func fb (bY,bZ) = [IntegerEntry(E, bY), IntegerEntry(F, bZ)]
742+func fo (ck,cl) = [IntegerEntry(F, ck), IntegerEntry(G, cl)]
709743
710744
711-func fc (bY,bZ,fd,fe,ff,fg,fh) = if (((fg - fh) != fd))
712- then throw(((((("Invalid AMM state data: " + toString(fg)) + " + ") + toString(fh)) + " != ") + toString(fd)))
713- else ((fb(bY, bZ) ++ [IntegerEntry(G, fd), IntegerEntry(J, fe), IntegerEntry(K, ff), IntegerEntry(H, fg), IntegerEntry(I, fh)]) ++ eU(ay(bY, bZ)))
745+func fp (ck,cl,fq,fr,fs,ft,fu) = if (((ft - fu) != fq))
746+ then throw(((((("Invalid AMM state data: " + toString(ft)) + " + ") + toString(fu)) + " != ") + toString(fq)))
747+ else ((fo(ck, cl) ++ [IntegerEntry(H, fq), IntegerEntry(K, fr), IntegerEntry(L, fs), IntegerEntry(I, ft), IntegerEntry(J, fu)]) ++ fh(aK(ck, cl)))
714748
715749
716-func fi (aF) = [DeleteEntry(aD(e, aF)), DeleteEntry(aD(f, aF)), DeleteEntry(aD(g, aF)), DeleteEntry(aD(h, aF)), IntegerEntry(aD(i, aF), lastBlock.timestamp)]
750+func fv (ad) = [DeleteEntry(ab(e, ad)), DeleteEntry(ab(f, ad)), DeleteEntry(ab(g, ad)), DeleteEntry(ab(h, ad)), DeleteEntry(ab(j, ad)), IntegerEntry(ab(i, ad), lastBlock.timestamp)]
717751
718752
719-func fj (aF,fk) = {
720- let fl = assetBalance(this, aa())
721- if ((fk > fl))
722- then throw(((("Unable to withdraw " + toString(fk)) + " from contract balance ") + toString(fl)))
723- else [ScriptTransfer(aF, fk, aa())]
753+func fw (ad,fx) = {
754+ let fy = assetBalance(this, ah())
755+ if ((fx > fy))
756+ then throw(((("Unable to withdraw " + toString(fx)) + " from contract balance ") + toString(fy)))
757+ else [ScriptTransfer(ad, fx, ah())]
724758 }
725759
726760
727-func fm (bB) = if ((0 > bB))
761+func fz (bK) = if ((0 > bK))
728762 then throw("Balance")
729- else [IntegerEntry(d, bB)]
763+ else [IntegerEntry(d, bK)]
730764
731765
732-func fn (bB) = [ScriptTransfer(ac(), bB, aa())]
766+func fA (bK) = [ScriptTransfer(aj(), bK, ah())]
733767
734768
735-func fo (fp,bB) = if (fp)
736- then [Burn(valueOrErrorMessage(bB.payments[1].assetId, "Invalid artifact"), 1)]
769+func fB (fC,bK) = if (fC)
770+ then [Burn(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifact"), 1)]
737771 else nil
738772
739773
740-@Callable(bB)
741-func pause () = if ((bB.caller != Y()))
774+func fD (bT,au) = {
775+ let fE = bS(bT)._1
776+ if ((fE == 0))
777+ then true
778+ else (bX(bT) == au)
779+ }
780+
781+
782+func fF (bT,au) = (bX(bT) == au)
783+
784+
785+func fG (fH,au,bT) = ((((((aa + "_") + fH) + "_") + au) + "_") + bT)
786+
787+
788+func fI (bT) = {
789+ let bZ = bX(bT)
790+ if ((bZ == toBase58String(ah())))
791+ then $Tuple2(0, bZ)
792+ else {
793+ let fJ = fG(toString(this), bZ, bT)
794+ let fK = valueOrElse(getInteger(aq(), fJ), 0)
795+ $Tuple2(fK, bZ)
796+ }
797+ }
798+
799+
800+@Callable(bK)
801+func pause () = if ((bK.caller != af()))
742802 then throw("Invalid togglePause params")
743- else [BooleanEntry(k, true)]
803+ else [BooleanEntry(l, true)]
744804
745805
746806
747-@Callable(bB)
748-func unpause () = if ((bB.caller != Y()))
807+@Callable(bK)
808+func unpause () = if ((bK.caller != af()))
749809 then throw("Invalid togglePause params")
750- else [BooleanEntry(k, false)]
810+ else [BooleanEntry(l, false)]
751811
752812
753813
754-@Callable(bB)
755-func addLiquidity (bT) = if (if ((bB.caller != Y()))
814+@Callable(bK)
815+func addLiquidity (cf) = if (if ((bK.caller != af()))
756816 then true
757- else (0 >= bT))
817+ else (0 >= cf))
758818 then throw("Invalid addLiquidity params")
759819 else {
760- let bY = bh()
761- let bZ = bi()
762- let eV = ay(bY, bZ)
763- let fq = ay(bT, eV)
764- let fr = (bY + bT)
765- let fs = (bZ + fq)
766- fb(fr, fs)
820+ let ck = bq()
821+ let cl = br()
822+ let fi = aK(ck, cl)
823+ let fL = aK(cf, fi)
824+ let fM = (ck + cf)
825+ let fN = (cl + fL)
826+ fo(fM, fN)
767827 }
768828
769829
770830
771-@Callable(bB)
772-func removeLiquidity (bT) = if (if ((bB.caller != Y()))
831+@Callable(bK)
832+func removeLiquidity (cf) = if (if ((bK.caller != af()))
773833 then true
774- else (0 >= bT))
834+ else (0 >= cf))
775835 then throw("Invalid removeLiquidity params")
776836 else {
777- let bY = bh()
778- let bZ = bi()
779- let eV = ay(bY, bZ)
780- let ft = ay(bT, eV)
781- let fr = (bY - bT)
782- let fs = (bZ - ft)
783- fb(fr, fs)
837+ let ck = bq()
838+ let cl = br()
839+ let fi = aK(ck, cl)
840+ let fO = aK(cf, fi)
841+ let fM = (ck - cf)
842+ let fN = (cl - fO)
843+ fo(fM, fN)
784844 }
785845
786846
787847
788-@Callable(bB)
789-func changeSettings (eB,eC,eD,eE,eF,eG,eH,eI,eJ) = if ((bB.caller != Y()))
848+@Callable(bK)
849+func changeSettings (eN,eO,eP,eQ,eR,eS,eT,eU,eV) = if ((bK.caller != af()))
790850 then throw("Invalid changeSettings params")
791- else eA(eB, eC, eD, eE, eF, eG, eH, eI, eJ)
851+ else eM(eN, eO, eP, eQ, eR, eS, eT, eU, eV)
792852
793853
794854
795-@Callable(bB)
796-func initialize (bY,bZ,eE,eB,eC,eD,eF,fu,fv,fw,eG,eH,eI,eJ) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bY))
855+@Callable(bK)
856+func initialize (ck,cl,eQ,eN,eO,eP,eR,fP,fQ,fR,eS,eT,eU,eV) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= ck))
797857 then true
798- else (0 >= bZ))
858+ else (0 >= cl))
799859 then true
800- else (0 >= eE))
860+ else (0 >= eQ))
801861 then true
802- else (0 >= eB))
862+ else (0 >= eN))
803863 then true
804- else (0 >= eC))
864+ else (0 >= eO))
805865 then true
806- else (0 >= eD))
866+ else (0 >= eP))
807867 then true
808- else (0 >= eF))
868+ else (0 >= eR))
809869 then true
810- else (0 >= eG))
870+ else (0 >= eS))
811871 then true
812- else (0 >= eH))
872+ else (0 >= eT))
813873 then true
814- else (0 >= eI))
874+ else (0 >= eU))
815875 then true
816- else (0 >= eJ))
876+ else (0 >= eV))
817877 then true
818- else bP())
878+ else cb())
819879 then throw("Invalid initialize parameters")
820- else ((((fc(bY, bZ, 0, 0, 0, 0, 0) ++ eA(eB, eC, eD, eE, eF, eG, eH, eI, eJ)) ++ eK((lastBlock.timestamp + eE), 0, 0, 0, 0)) ++ fm(0)) ++ [BooleanEntry(j, true), StringEntry(c, fu), StringEntry(a, fv), StringEntry(L, fw)])
880+ else ((((fp(ck, cl, 0, 0, 0, 0, 0) ++ eM(eN, eO, eP, eQ, eR, eS, eT, eU, eV)) ++ eW((lastBlock.timestamp + eQ), 0, 0, 0, 0)) ++ fz(0)) ++ [BooleanEntry(k, true), StringEntry(c, fP), StringEntry(a, fQ), StringEntry(M, fR)])
821881
822882
823883
824-@Callable(bB)
825-func setInitMarginRatio (eB) = if (if ((0 >= eB))
884+@Callable(bK)
885+func setInitMarginRatio (eN) = if (if ((0 >= eN))
826886 then true
827- else !(bP()))
887+ else !(cb()))
828888 then throw("Invalid setInitMarginRatio parameters")
829- else eA(eB, bq(), br(), bn(), bf(), bt(), bu(), bs(), bv())
889+ else eM(eN, bz(), bA(), bw(), bo(), bC(), bD(), bB(), bE())
830890
831891
832892
833-@Callable(bB)
834-func decreasePosition (fk,fx,fy) = if (if (if (if (if ((0 >= fk))
893+@Callable(bK)
894+func decreasePosition (fx,fS,fT) = if (if (if (if (if ((0 >= fx))
835895 then true
836- else !(bP()))
896+ else !(cb()))
837897 then true
838- else !(bC(ay(ar, fx), bg(), true)))
898+ else !(bL(aK(aD, fS), bp(), true)))
839899 then true
840- else !(bO(toString(bB.caller))))
900+ else !(ca(toString(bK.caller))))
841901 then true
842- else bQ())
902+ else cc())
843903 then throw("Invalid decreasePosition parameters")
844904 else {
845- let fz = bJ(toString(bB.caller))
846- let fA = fz._1
847- let fB = fz._2
848- let fC = fz._3
849- let fD = fz._4
850- let fE = if ((fA > 0))
851- then an
852- else am
853- let fF = (fE == am)
854- let fG = aA(fk, fx)
855- let fH = di(toString(bB.caller), au)
856- let fI = fH._1
857- let dh = fH._2
858- let fJ = if ((fI > fG))
905+ let fU = bS(toString(bK.caller))
906+ let fE = fU._1
907+ let fV = fU._2
908+ let fW = fU._3
909+ let fX = fU._4
910+ let fY = if ((fE > 0))
911+ then az
912+ else ay
913+ let fZ = (fY == ay)
914+ let ga = aM(fx, fS)
915+ let gb = du(toString(bK.caller), aG)
916+ let gc = gb._1
917+ let dt = gb._2
918+ let gd = if ((gc > ga))
859919 then {
860- let fK = bX(fF, fG)
861- let dC = fK._1
862- let ca = fK._2
863- let cb = fK._3
864- let dK = fK._4
865- let dL = fK._5
866- let fL = aB(dC)
867- if (if ((fy != 0))
868- then (fy > fL)
920+ let ge = cj(fZ, ga)
921+ let dO = ge._1
922+ let cm = ge._2
923+ let cn = ge._3
924+ let dW = ge._4
925+ let dX = ge._5
926+ let gf = aN(dO)
927+ if (if ((fT != 0))
928+ then (fT > gf)
869929 else false)
870- then throw(((("Too little base asset exchanged, got " + toString(fL)) + " expected ") + toString(fy)))
930+ then throw(((("Too little base asset exchanged, got " + toString(gf)) + " expected ") + toString(fT)))
871931 else {
872- let dH = ay(aA(dh, fL), aB(fA))
873- let fM = co(fA, fB, fD, dH)
874- let cx = fM._1
875- let cy = fM._2
876- let ct = fM._3
877- let dD = fG
878- let fN = (dh - dH)
879- let fO = if ((fA > 0))
880- then ((fI - dD) - fN)
881- else ((fN + fI) - dD)
882- let fP = (fA + dC)
883- $Tuple11(fP, cx, aB(fO), bH(fP), cb, ca, dK, dL, (bl() - fG), (bz() - (if ((fP > 0))
884- then aB(dC)
885- else 0)), (by() - (if ((0 > fP))
886- then aB(dC)
932+ let dT = aK(aM(dt, gf), aN(fE))
933+ let gg = cA(fE, fV, fX, dT)
934+ let cJ = gg._1
935+ let cK = gg._2
936+ let cF = gg._3
937+ let dP = ga
938+ let gh = (dt - dT)
939+ let gi = if ((fE > 0))
940+ then ((gc - dP) - gh)
941+ else ((gh + gc) - dP)
942+ let gj = (fE + dO)
943+ $Tuple11(gj, cJ, aN(gi), bQ(gj), cn, cm, dW, dX, (bu() - ga), (bI() - (if ((gj > 0))
944+ then aN(dO)
945+ else 0)), (bH() - (if ((0 > gj))
946+ then aN(dO)
887947 else 0)))
888948 }
889949 }
890950 else throw("Close position first")
891- let fP = fJ._1
892- let fQ = fJ._2
893- let fR = fJ._3
894- let fS = fJ._4
895- let cb = fJ._5
896- let ca = fJ._6
897- let dK = fJ._7
898- let dL = fJ._8
899- let dO = fJ._9
900- let dM = fJ._10
901- let dN = fJ._11
902- let fT = invoke(ae(), "notifyNotional", [toString(bB.caller), fR], nil)
903- if ((fT == fT))
904- then (eQ(toString(bB.caller), fP, fQ, fR, fS) ++ fc(ca, cb, dK, dL, dO, dM, dN))
951+ let gj = gd._1
952+ let gk = gd._2
953+ let gl = gd._3
954+ let gm = gd._4
955+ let cn = gd._5
956+ let cm = gd._6
957+ let dW = gd._7
958+ let dX = gd._8
959+ let ea = gd._9
960+ let dY = gd._10
961+ let dZ = gd._11
962+ let gn = invoke(al(), "notifyNotional", [toString(bK.caller), gl], nil)
963+ if ((gn == gn))
964+ then (fd(toString(bK.caller), gj, gk, gl, gm) ++ fp(cm, cn, dW, dX, ea, dY, dZ))
905965 else throw("Strict value is not equal to itself.")
906966 }
907967
908968
909969
910-@Callable(bB)
911-func increasePosition (fE,fx,fy,fU) = {
912- let fV = bB.payments[0].amount
913- if (if (if (if (if (if (if ((fE != am))
914- then (fE != an)
970+@Callable(bK)
971+func increasePosition (fY,fS,fT,go) = {
972+ let bT = toString(bK.caller)
973+ let gp = bK.payments[0].amount
974+ let au = bK.payments[0].assetId
975+ let gq = toBase58String(value(au))
976+ let gr = (au == ah())
977+ let gs = at(gq)
978+ if (if (if (if (if (if (if (if ((fY != ay))
979+ then (fY != az)
915980 else false)
916981 then true
917- else (0 >= fV))
982+ else (0 >= gp))
918983 then true
919- else !(bP()))
984+ else !(cb()))
920985 then true
921- else (bB.payments[0].assetId != aa()))
986+ else if (!(gr))
987+ then !(gs)
988+ else false)
922989 then true
923- else !(bC(ay(ar, fx), bg(), true)))
990+ else !(fD(bT, gq)))
924991 then true
925- else bQ())
992+ else !(bL(aK(aD, fS), bp(), true)))
993+ then true
994+ else cc())
926995 then throw("Invalid increasePosition parameters")
927996 else {
928- let bK = toString(bB.caller)
929- let et = bf()
930- let fW = es(bB)
931- let ey = fW._1
932- let ez = fW._2
933- let fX = aA(fV, ey)
934- let fY = invoke(ag(), "acceptPaymentWithLink", [bK, fU], [AttachedPayment(aa(), fX)])
935- if ((fY == fY))
997+ let eF = bo()
998+ let gt = eE(bK)
999+ let eK = gt._1
1000+ let eL = gt._2
1001+ let gu = aM(gp, eK)
1002+ let fx = (gp - gu)
1003+ let gv = if (gs)
9361004 then {
937- let fZ = {
938- let bM = fY
939- if ($isInstanceOf(bM, "Int"))
940- then {
941- let ga = bM
942- ga
1005+ let gw = invoke(aq(), "borrow", [bT], [AttachedPayment(au, fx)])
1006+ if ((gw == gw))
1007+ then {
1008+ let gx = assetBalance(this, ah())
1009+ if ((gx == gx))
1010+ then {
1011+ let gy = invoke(ar(), "swap", [toBase58String(ah()), 0], [AttachedPayment(au, gu)])
1012+ if ((gy == gy))
1013+ then {
1014+ let gz = assetBalance(this, ah())
1015+ if ((gz == gz))
1016+ then {
1017+ let gA = (gz - gx)
1018+ if ((gA == gA))
1019+ then gA
1020+ else throw("Strict value is not equal to itself.")
1021+ }
1022+ else throw("Strict value is not equal to itself.")
1023+ }
1024+ else throw("Strict value is not equal to itself.")
1025+ }
1026+ else throw("Strict value is not equal to itself.")
1027+ }
1028+ else throw("Strict value is not equal to itself.")
1029+ }
1030+ else gu
1031+ if ((gv == gv))
1032+ then {
1033+ let gB = invoke(an(), "acceptPaymentWithLink", [bT, go], [AttachedPayment(ah(), gv)])
1034+ if ((gB == gB))
1035+ then {
1036+ let gC = {
1037+ let bV = gB
1038+ if ($isInstanceOf(bV, "Int"))
1039+ then {
1040+ let gD = bV
1041+ gD
1042+ }
1043+ else throw("Invalid referrerFee")
9431044 }
944- else throw("Invalid referrerFee")
945- }
946- let fk = (fV - fX)
947- let gb = (fX - fZ)
948- let gc = bJ(bK)
949- let fA = gc._1
950- let fB = gc._2
951- let fC = gc._3
952- let fD = gc._4
953- let gd = (fA == 0)
954- let ge = if ((fA > 0))
955- then (fE == am)
956- else (fE == an)
957- let gf = if (!(gd))
958- then ge
959- else false
960- let fF = (fE == am)
961- let gg = if (if (gd)
962- then true
963- else gf)
964- then {
965- let fG = aA(fk, fx)
966- let gh = bX(fF, fG)
967- let cd = gh._1
968- let ca = gh._2
969- let cb = gh._3
970- let dK = gh._4
971- let dL = gh._5
972- if (if ((fy != 0))
973- then (fy > aB(cd))
974- else false)
975- then throw(((("Limit error: " + toString(aB(cd))) + " < ") + toString(fy)))
1045+ let gE = (gv - gC)
1046+ let gF = bS(bT)
1047+ let fE = gF._1
1048+ let fV = gF._2
1049+ let fW = gF._3
1050+ let fX = gF._4
1051+ let gG = (fE == 0)
1052+ let gH = if ((fE > 0))
1053+ then (fY == ay)
1054+ else (fY == az)
1055+ let gI = if (!(gG))
1056+ then gH
1057+ else false
1058+ let fZ = (fY == ay)
1059+ let gJ = if (if (gG)
1060+ then true
1061+ else gI)
1062+ then {
1063+ let ga = aM(fx, fS)
1064+ let gK = cj(fZ, ga)
1065+ let cp = gK._1
1066+ let cm = gK._2
1067+ let cn = gK._3
1068+ let dW = gK._4
1069+ let dX = gK._5
1070+ if (if ((fT != 0))
1071+ then (fT > aN(cp))
1072+ else false)
1073+ then throw(((("Limit error: " + toString(aN(cp))) + " < ") + toString(fT)))
1074+ else {
1075+ let gj = (fE + cp)
1076+ let gL = aK(ga, fS)
1077+ let gM = cA(fE, fV, fX, gL)
1078+ let cJ = gM._1
1079+ let do = gM._2
1080+ let dp = gM._3
1081+ if (!(cZ(cm, cn)))
1082+ then throw("Over max spread limit")
1083+ else $Tuple11(gj, cJ, (fW + ga), bQ(gj), cn, cm, dW, dX, (bu() + ga), (bI() + (if ((gj > 0))
1084+ then aN(cp)
1085+ else 0)), (bH() + (if ((0 > gj))
1086+ then aN(cp)
1087+ else 0)))
1088+ }
1089+ }
9761090 else {
977- let fP = (fA + cd)
978- let gi = ay(fG, fx)
979- let gj = co(fA, fB, fD, gi)
980- let cx = gj._1
981- let dc = gj._2
982- let dd = gj._3
983- if (!(cN(ca, cb)))
984- then throw("Over max spread limit")
985- else $Tuple11(fP, cx, (fC + fG), bH(fP), cb, ca, dK, dL, (bl() + fG), (bz() + (if ((fP > 0))
986- then aB(cd)
987- else 0)), (by() + (if ((0 > fP))
988- then aB(cd)
989- else 0)))
1091+ let ga = aM(fx, fS)
1092+ let gN = du(toString(bK.caller), aG)
1093+ let gc = gN._1
1094+ let dt = gN._2
1095+ if ((gc > ga))
1096+ then throw("Use decreasePosition to decrease position size")
1097+ else throw("Close position first")
9901098 }
991- }
992- else {
993- let fG = aA(fk, fx)
994- let gk = di(toString(bB.caller), au)
995- let fI = gk._1
996- let dh = gk._2
997- if ((fI > fG))
998- then throw("Use decreasePosition to decrease position size")
999- else throw("Close position first")
1000- }
1001- let fP = gg._1
1002- let fQ = gg._2
1003- let fR = gg._3
1004- let fS = gg._4
1005- let cb = gg._5
1006- let ca = gg._6
1007- let dK = gg._7
1008- let dL = gg._8
1009- let dO = gg._9
1010- let dM = gg._10
1011- let dN = gg._11
1012- let gl = (gb / 2)
1013- let gm = (gb - gl)
1014- let gn = invoke(ah(), "deposit", nil, [AttachedPayment(aa(), fk)])
1015- if ((gn == gn))
1016- then {
1017- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), gm)])
1018- if ((go == go))
1099+ let gj = gJ._1
1100+ let gk = gJ._2
1101+ let gl = gJ._3
1102+ let gm = gJ._4
1103+ let cn = gJ._5
1104+ let cm = gJ._6
1105+ let dW = gJ._7
1106+ let dX = gJ._8
1107+ let ea = gJ._9
1108+ let dY = gJ._10
1109+ let dZ = gJ._11
1110+ let gO = (gE / 2)
1111+ let gP = (gE - gO)
1112+ let gQ = invoke(ao(), "deposit", nil, [AttachedPayment(ah(), fx)])
1113+ if ((gQ == gQ))
10191114 then {
1020- let gp = invoke(ae(), "notifyFees", [bK, gb], nil)
1021- if ((gp == gp))
1115+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), gP)])
1116+ if ((gR == gR))
10221117 then {
1023- let fT = invoke(ae(), "notifyNotional", [bK, fR], nil)
1024- if ((fT == fT))
1025- then ((((eQ(bK, fP, fQ, fR, fS) ++ fc(ca, cb, dK, dL, dO, dM, dN)) ++ fn(gl)) ++ fm((be() + fk))) ++ fo(ez, bB))
1118+ let gS = invoke(al(), "notifyFees", [bT, gE], nil)
1119+ if ((gS == gS))
1120+ then {
1121+ let gn = invoke(al(), "notifyNotional", [bT, gl], nil)
1122+ if ((gn == gn))
1123+ then (((((fd(bT, gj, gk, gl, gm) ++ fc(bT, gq)) ++ fp(cm, cn, dW, dX, ea, dY, dZ)) ++ fA(gO)) ++ fz((bn() + fx))) ++ fB(eL, bK))
1124+ else throw("Strict value is not equal to itself.")
1125+ }
10261126 else throw("Strict value is not equal to itself.")
10271127 }
10281128 else throw("Strict value is not equal to itself.")
10371137
10381138
10391139
1040-@Callable(bB)
1140+@Callable(bK)
10411141 func addMargin () = {
1042- let fV = bB.payments[0].amount
1043- if (if (if (if ((bB.payments[0].assetId != aa()))
1142+ let bT = toString(bK.caller)
1143+ let gp = bK.payments[0].amount
1144+ let au = bK.payments[0].assetId
1145+ let gq = toBase58String(value(au))
1146+ let gr = (au == ah())
1147+ let gs = at(gq)
1148+ if (if (if (if (if (if (!(gr))
1149+ then !(gs)
1150+ else false)
10441151 then true
1045- else !(bO(toString(bB.caller))))
1152+ else !(ca(toString(bK.caller))))
10461153 then true
1047- else !(bP()))
1154+ else !(fF(bT, gq)))
10481155 then true
1049- else bQ())
1156+ else !(cb()))
1157+ then true
1158+ else cc())
10501159 then throw("Invalid addMargin parameters")
10511160 else {
1052- let bK = toString(bB.caller)
1053- let gq = es(bB)
1054- let ey = gq._1
1055- let ez = gq._2
1056- let fX = aA(fV, ey)
1057- let fY = invoke(ag(), "acceptPayment", [bK], [AttachedPayment(aa(), fX)])
1058- if ((fY == fY))
1161+ let gT = eE(bK)
1162+ let eK = gT._1
1163+ let eL = gT._2
1164+ let gu = aM(gp, eK)
1165+ let fx = (gp - gu)
1166+ let gv = if (gs)
10591167 then {
1060- let fZ = {
1061- let bM = fY
1062- if ($isInstanceOf(bM, "Int"))
1063- then {
1064- let ga = bM
1065- ga
1168+ let gw = invoke(aq(), "borrow", [bT], [AttachedPayment(au, fx)])
1169+ if ((gw == gw))
1170+ then {
1171+ let gx = assetBalance(this, ah())
1172+ if ((gx == gx))
1173+ then {
1174+ let gy = invoke(ar(), "swap", [toBase58String(ah()), 0], [AttachedPayment(au, gu)])
1175+ if ((gy == gy))
1176+ then {
1177+ let gz = assetBalance(this, ah())
1178+ if ((gz == gz))
1179+ then {
1180+ let gA = (gz - gx)
1181+ if ((gA == gA))
1182+ then gA
1183+ else throw("Strict value is not equal to itself.")
1184+ }
1185+ else throw("Strict value is not equal to itself.")
1186+ }
1187+ else throw("Strict value is not equal to itself.")
1188+ }
1189+ else throw("Strict value is not equal to itself.")
1190+ }
1191+ else throw("Strict value is not equal to itself.")
1192+ }
1193+ else gu
1194+ if ((gv == gv))
1195+ then {
1196+ let gB = invoke(an(), "acceptPayment", [bT], [AttachedPayment(ah(), gv)])
1197+ if ((gB == gB))
1198+ then {
1199+ let gC = {
1200+ let bV = gB
1201+ if ($isInstanceOf(bV, "Int"))
1202+ then {
1203+ let gD = bV
1204+ gD
1205+ }
1206+ else throw("Invalid referrerFee")
10661207 }
1067- else throw("Invalid referrerFee")
1068- }
1069- let gb = (fX - fZ)
1070- let fk = (fV - fX)
1071- let gr = bJ(bK)
1072- let fA = gr._1
1073- let fB = gr._2
1074- let fC = gr._3
1075- let fD = gr._4
1076- let gl = (gb / 2)
1077- let gm = (gb - gl)
1078- let gn = invoke(ah(), "deposit", nil, [AttachedPayment(aa(), fk)])
1079- if ((gn == gn))
1080- then {
1081- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), gm)])
1082- if ((go == go))
1208+ let gE = (gv - gC)
1209+ let gU = bS(bT)
1210+ let fE = gU._1
1211+ let fV = gU._2
1212+ let fW = gU._3
1213+ let fX = gU._4
1214+ let gO = (gE / 2)
1215+ let gP = (gE - gO)
1216+ let gQ = invoke(ao(), "deposit", nil, [AttachedPayment(ah(), fx)])
1217+ if ((gQ == gQ))
10831218 then {
1084- let gp = invoke(ae(), "notifyFees", [bK, gb], nil)
1085- if ((gp == gp))
1086- then (((eQ(bK, fA, (fB + fk), fC, fD) ++ fn(gl)) ++ fm((be() + fk))) ++ fo(ez, bB))
1219+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), gP)])
1220+ if ((gR == gR))
1221+ then {
1222+ let gS = invoke(al(), "notifyFees", [bT, gE], nil)
1223+ if ((gS == gS))
1224+ then (((fd(bT, fE, (fV + fx), fW, fX) ++ fA(gO)) ++ fz((bn() + fx))) ++ fB(eL, bK))
1225+ else throw("Strict value is not equal to itself.")
1226+ }
10871227 else throw("Strict value is not equal to itself.")
10881228 }
10891229 else throw("Strict value is not equal to itself.")
10961236
10971237
10981238
1099-@Callable(bB)
1100-func removeMargin (fk) = if (if (if (if ((0 >= fk))
1101- then true
1102- else !(bO(toString(bB.caller))))
1103- then true
1104- else !(bP()))
1105- then true
1106- else bQ())
1107- then throw("Invalid removeMargin parameters")
1108- else {
1109- let gs = bJ(toString(bB.caller))
1110- let fA = gs._1
1111- let fB = gs._2
1112- let fC = gs._3
1113- let fD = gs._4
1114- let gt = -(fk)
1115- let gu = co(fA, fB, fD, gt)
1116- let cx = gu._1
1117- let cy = gu._2
1118- if ((cy != 0))
1119- then throw("Invalid removed margin amount")
1120- else {
1121- let gv = dn(cx, cy, fC)
1122- if (!(bC(gv, bg(), true)))
1123- then throw(((("Too much margin removed: " + toString(gv)) + " < ") + toString(bg())))
1124- else {
1125- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), fk], nil)
1126- if ((gw == gw))
1127- then ((eQ(toString(bB.caller), fA, cx, fC, bH(fA)) ++ fj(bB.caller, fk)) ++ fm((be() - fk)))
1128- else throw("Strict value is not equal to itself.")
1129- }
1130- }
1131- }
1239+@Callable(bK)
1240+func removeMargin (fx) = {
1241+ let bT = toString(bK.caller)
1242+ if (if (if (if ((0 >= fx))
1243+ then true
1244+ else !(ca(bT)))
1245+ then true
1246+ else !(cb()))
1247+ then true
1248+ else cc())
1249+ then throw("Invalid removeMargin parameters")
1250+ else {
1251+ let gV = bS(bT)
1252+ let fE = gV._1
1253+ let fV = gV._2
1254+ let fW = gV._3
1255+ let fX = gV._4
1256+ let gW = -(fx)
1257+ let gX = cA(fE, fV, fX, gW)
1258+ let cJ = gX._1
1259+ let cK = gX._2
1260+ if ((cK != 0))
1261+ then throw("Invalid removed margin amount")
1262+ else {
1263+ let gY = dz(cJ, cK, fW)
1264+ if (!(bL(gY, bp(), true)))
1265+ then throw(((("Too much margin removed: " + toString(gY)) + " < ") + toString(bp())))
1266+ else {
1267+ let gZ = toBase58String(ah())
1268+ let ha = fI(bT)
1269+ let hb = ha._1
1270+ let hc = ha._2
1271+ let hd = if ((fx > hb))
1272+ then hb
1273+ else fx
1274+ let he = if ((hb > fx))
1275+ then 0
1276+ else (fx - hb)
1277+ let hf = (hb - hd)
1278+ let hg = if ((hf > 0))
1279+ then nil
1280+ else fc(bT, gZ)
1281+ let hh = if (((hd + he) != fx))
1282+ then throw(((((("toRepay=" + toString(hd)) + " + toWithdraw=") + toString(he)) + " != ") + toString(fx)))
1283+ else nil
1284+ if ((hh == hh))
1285+ then {
1286+ let hi = invoke(ao(), "withdraw", [gZ, fx], nil)
1287+ if ((hi == hi))
1288+ then {
1289+ let hj = if ((hd > 0))
1290+ then {
1291+ let hk = invoke(aq(), "repay", [bT, hc], [AttachedPayment(ah(), hd)])
1292+ if ((hk == hk))
1293+ then [ScriptTransfer(bK.caller, hd, fromBase58String(hc))]
1294+ else throw("Strict value is not equal to itself.")
1295+ }
1296+ else nil
1297+ if ((hj == hj))
1298+ then (fd(bT, fE, cJ, fW, bQ(fE)) ++ (if ((he > 0))
1299+ then fw(bK.caller, he)
1300+ else (((nil ++ fz((bn() - fx))) ++ hg) ++ hj)))
1301+ else throw("Strict value is not equal to itself.")
1302+ }
1303+ else throw("Strict value is not equal to itself.")
1304+ }
1305+ else throw("Strict value is not equal to itself.")
1306+ }
1307+ }
1308+ }
1309+ }
11321310
11331311
11341312
1135-@Callable(bB)
1313+@Callable(bK)
11361314 func closePosition () = {
1137- let gx = bA(bB)
1138- let gy = valueOrErrorMessage(addressFromString(gx), "Invalid caller")
1139- if (if (if (!(bO(gx)))
1315+ let bT = bJ(bK)
1316+ let hl = valueOrErrorMessage(addressFromString(bT), "Invalid caller")
1317+ if (if (if (!(ca(bT)))
11401318 then true
1141- else !(bP()))
1319+ else !(cb()))
11421320 then true
1143- else bQ())
1321+ else cc())
11441322 then throw("Invalid closePosition parameters")
11451323 else {
1146- let gz = dE(gx, true)
1147- let dc = gz._1
1148- let gA = gz._2
1149- let dH = gz._3
1150- let dI = gz._4
1151- let ca = gz._5
1152- let cb = gz._6
1153- let dK = gz._7
1154- let dL = gz._8
1155- let dO = gz._9
1156- let dd = gz._10
1157- let dM = gz._11
1158- let dN = gz._12
1159- if ((gA > 0))
1324+ let hm = dQ(bT, true)
1325+ let do = hm._1
1326+ let hn = hm._2
1327+ let dT = hm._3
1328+ let dU = hm._4
1329+ let cm = hm._5
1330+ let cn = hm._6
1331+ let dW = hm._7
1332+ let dX = hm._8
1333+ let ea = hm._9
1334+ let dp = hm._10
1335+ let dY = hm._11
1336+ let dZ = hm._12
1337+ if ((hn > 0))
11601338 then throw("Unable to close position with bad debt")
11611339 else {
1162- let gB = aB(dI)
1163- let gC = (be() - gB)
1164- let gD = if ((0 > gC))
1165- then $Tuple2(0, aB(gC))
1166- else $Tuple2(gC, 0)
1167- let gE = gD._1
1168- let gF = gD._2
1169- let ga = if ((gF > 0))
1340+ let ho = aN(dU)
1341+ let hp = (bn() - ho)
1342+ let hq = if ((0 > hp))
1343+ then $Tuple2(0, aN(hp))
1344+ else $Tuple2(hp, 0)
1345+ let hr = hq._1
1346+ let hs = hq._2
1347+ let gD = if ((hs > 0))
11701348 then {
1171- let gG = invoke(ad(), "withdraw", [gF], nil)
1172- if ((gG == gG))
1349+ let ht = invoke(ak(), "withdraw", [hs], nil)
1350+ if ((ht == ht))
11731351 then nil
11741352 else throw("Strict value is not equal to itself.")
11751353 }
11761354 else nil
1177- if ((ga == ga))
1355+ if ((gD == gD))
11781356 then {
1179- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), (gB - gF)], nil)
1180- if ((gw == gw))
1357+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), (ho - hs)], nil)
1358+ if ((hu == hu))
11811359 then {
1182- let fT = invoke(ae(), "notifyNotional", [gx, 0], nil)
1183- if ((fT == fT))
1184- then (((fi(gx) ++ fc(ca, cb, dK, dL, dO, dM, dN)) ++ fj(gy, gB)) ++ fm(gE))
1360+ let hv = fI(bT)
1361+ let hb = hv._1
1362+ let hc = hv._2
1363+ let hw = if ((hb > 0))
1364+ then if ((ho >= hb))
1365+ then {
1366+ let hk = invoke(aq(), "repay", [bT, hc], [AttachedPayment(ah(), hb)])
1367+ if ((hk == hk))
1368+ then $Tuple2([ScriptTransfer(hl, hb, fromBase58String(hc))], (ho - hb))
1369+ else throw("Strict value is not equal to itself.")
1370+ }
1371+ else {
1372+ let hx = invoke(aq(), "realizePartiallyAndClose", [bT, hc], [AttachedPayment(ah(), ho)])
1373+ if ((hx == hx))
1374+ then $Tuple2([ScriptTransfer(hl, ho, fromBase58String(hc))], 0)
1375+ else throw("Strict value is not equal to itself.")
1376+ }
1377+ else $Tuple2(nil, ho)
1378+ if ((hw == hw))
1379+ then {
1380+ let hy = hw._2
1381+ let hz = hw._1
1382+ let gn = invoke(al(), "notifyNotional", [bT, 0], nil)
1383+ if ((gn == gn))
1384+ then ((fv(bT) ++ fp(cm, cn, dW, dX, ea, dY, dZ)) ++ (if ((hy > 0))
1385+ then fw(hl, hy)
1386+ else ((nil ++ fz(hr)) ++ hz)))
1387+ else throw("Strict value is not equal to itself.")
1388+ }
11851389 else throw("Strict value is not equal to itself.")
11861390 }
11871391 else throw("Strict value is not equal to itself.")
11931397
11941398
11951399
1196-@Callable(bB)
1197-func liquidate (bK) = {
1198- let gH = dr(bK, au)
1199- let gv = if (cT())
1400+@Callable(bK)
1401+func liquidate (bT) = {
1402+ let hA = dD(bT, aG)
1403+ let gY = if (df())
12001404 then {
1201- let gI = dr(bK, av)
1202- aC(gH, gI)
1405+ let hB = dD(bT, aH)
1406+ aO(hA, hB)
12031407 }
1204- else gH
1205- if (if (if (if (!(bC(gv, bq(), false)))
1408+ else hA
1409+ if (if (if (if (!(bL(gY, bz(), false)))
12061410 then true
1207- else !(bO(bK)))
1411+ else !(ca(bT)))
12081412 then true
1209- else !(bP()))
1413+ else !(cb()))
12101414 then true
1211- else bQ())
1415+ else cc())
12121416 then throw("Unable to liquidate")
1213- else if (if (if ((gH > br()))
1214- then (bs() > 0)
1417+ else if (if (if ((hA > bA()))
1418+ then (bB() > 0)
12151419 else false)
1216- then (ar > bs())
1420+ then (aD > bB())
12171421 else false)
12181422 then {
1219- let gJ = bJ(bK)
1220- let fA = gJ._1
1221- let fB = gJ._2
1222- let fC = gJ._3
1223- let fD = gJ._4
1224- let fE = if ((fA > 0))
1225- then an
1226- else am
1227- let fF = (fE == am)
1228- let dD = dx(bK, fA)
1229- let gK = di(bK, au)
1230- let fI = gK._1
1231- let dh = gK._2
1232- let gL = bX(fF, dD)
1233- let dC = gL._1
1234- let ca = gL._2
1235- let cb = gL._3
1236- let dK = gL._4
1237- let dL = gL._5
1238- let dH = ay(aA(dh, aB(dC)), aB(fA))
1239- let gM = co(fA, fB, fD, dH)
1240- let cx = gM._1
1241- let cy = gM._2
1242- let ct = gM._3
1243- let fN = (dh - dH)
1244- let fO = if ((fA > 0))
1245- then ((fI - dD) - fN)
1246- else ((fN + fI) - dD)
1247- let gN = aA(dD, br())
1248- let gO = (gN / 2)
1249- let gm = (gN - gO)
1250- let gP = (cx - gN)
1251- let fP = (fA + dC)
1252- let fR = aB(fO)
1253- let gQ = bH(fP)
1254- let dO = (bl() - dD)
1255- let gC = (be() - gN)
1256- let gR = if ((0 > gC))
1257- then $Tuple2(0, aB(gC))
1258- else $Tuple2(gC, 0)
1259- let gS = gR._1
1260- let gT = gR._2
1261- let ga = if ((gT > 0))
1423+ let hC = bS(bT)
1424+ let fE = hC._1
1425+ let fV = hC._2
1426+ let fW = hC._3
1427+ let fX = hC._4
1428+ let fY = if ((fE > 0))
1429+ then az
1430+ else ay
1431+ let fZ = (fY == ay)
1432+ let dP = dJ(bT, fE)
1433+ let hD = du(bT, aG)
1434+ let gc = hD._1
1435+ let dt = hD._2
1436+ let hE = cj(fZ, dP)
1437+ let dO = hE._1
1438+ let cm = hE._2
1439+ let cn = hE._3
1440+ let dW = hE._4
1441+ let dX = hE._5
1442+ let hF = aK(aN(dO), aN(fE))
1443+ let dT = aM(dt, hF)
1444+ let hG = cA(fE, fV, fX, dT)
1445+ let cJ = hG._1
1446+ let cK = hG._2
1447+ let cF = hG._3
1448+ let gh = (dt - dT)
1449+ let gi = if ((fE > 0))
1450+ then ((gc - dP) - gh)
1451+ else ((gh + gc) - dP)
1452+ let hH = aM(dP, bA())
1453+ let hI = (hH / 2)
1454+ let gP = (hH - hI)
1455+ let hJ = (cJ - hH)
1456+ let gj = (fE + dO)
1457+ let gl = aN(gi)
1458+ let hK = bQ(gj)
1459+ let ea = (bu() - dP)
1460+ let hp = (bn() - hH)
1461+ let hL = if ((0 > hp))
1462+ then $Tuple2(0, aN(hp))
1463+ else $Tuple2(hp, 0)
1464+ let hM = hL._1
1465+ let hN = hL._2
1466+ let hO = fI(bT)
1467+ let hb = hO._1
1468+ let hc = hO._2
1469+ let hP = if ((hb > 0))
12621470 then {
1263- let gG = invoke(ad(), "withdraw", [gT], nil)
1264- if ((gG == gG))
1471+ let hQ = aM(hb, hF)
1472+ let hx = invoke(aq(), "realizePartially", [bT, hc, hQ], nil)
1473+ if ((hx == hx))
12651474 then nil
12661475 else throw("Strict value is not equal to itself.")
12671476 }
12681477 else nil
1269- if ((ga == ga))
1478+ if ((hP == hP))
12701479 then {
1271- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), (gN - gT)], nil)
1272- if ((gw == gw))
1480+ let gD = if ((hN > 0))
12731481 then {
1274- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), gm)])
1275- if ((go == go))
1482+ let ht = invoke(ak(), "withdraw", [hN], nil)
1483+ if ((ht == ht))
1484+ then nil
1485+ else throw("Strict value is not equal to itself.")
1486+ }
1487+ else nil
1488+ if ((gD == gD))
1489+ then {
1490+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), (hH - hN)], nil)
1491+ if ((hu == hu))
12761492 then {
1277- let fT = invoke(ae(), "notifyNotional", [bK, fR], nil)
1278- if ((fT == fT))
1279- then (((eQ(bK, fP, gP, fR, gQ) ++ fc(ca, cb, dK, dL, dO, (bz() - (if ((fP > 0))
1280- then aB(dC)
1281- else 0)), (by() - (if ((0 > fP))
1282- then aB(dC)
1283- else 0)))) ++ fj(bB.caller, gO)) ++ fm(gS))
1493+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), gP)])
1494+ if ((gR == gR))
1495+ then {
1496+ let gn = invoke(al(), "notifyNotional", [bT, gl], nil)
1497+ if ((gn == gn))
1498+ then (((fd(bT, gj, hJ, gl, hK) ++ fp(cm, cn, dW, dX, ea, (bI() - (if ((gj > 0))
1499+ then aN(dO)
1500+ else 0)), (bH() - (if ((0 > gj))
1501+ then aN(dO)
1502+ else 0)))) ++ fw(bK.caller, hI)) ++ fz(hM))
1503+ else throw("Strict value is not equal to itself.")
1504+ }
12841505 else throw("Strict value is not equal to itself.")
12851506 }
12861507 else throw("Strict value is not equal to itself.")
12901511 else throw("Strict value is not equal to itself.")
12911512 }
12921513 else {
1293- let gU = dE(bK, false)
1294- let dc = gU._1
1295- let cy = gU._2
1296- let dd = gU._3
1297- let de = gU._4
1298- let ca = gU._5
1299- let cb = gU._6
1300- let dK = gU._7
1301- let dL = gU._8
1302- let dO = gU._9
1303- let dD = gU._10
1304- let dM = gU._11
1305- let dN = gU._12
1306- let gN = aA(dD, br())
1307- let gO = (gN / 2)
1308- let gm = (gN - gO)
1309- let gC = (be() - gN)
1310- let gV = if ((0 > gC))
1311- then $Tuple2(0, aB(gC))
1312- else $Tuple2(gC, 0)
1313- let gS = gV._1
1314- let gT = gV._2
1315- let ga = if ((gT > 0))
1514+ let hR = dQ(bT, false)
1515+ let do = hR._1
1516+ let cK = hR._2
1517+ let dp = hR._3
1518+ let dq = hR._4
1519+ let cm = hR._5
1520+ let cn = hR._6
1521+ let dW = hR._7
1522+ let dX = hR._8
1523+ let ea = hR._9
1524+ let dP = hR._10
1525+ let dY = hR._11
1526+ let dZ = hR._12
1527+ let hH = aM(dP, bA())
1528+ let hI = (hH / 2)
1529+ let gP = (hH - hI)
1530+ let hp = (bn() - hH)
1531+ let hS = if ((0 > hp))
1532+ then $Tuple2(0, aN(hp))
1533+ else $Tuple2(hp, 0)
1534+ let hM = hS._1
1535+ let hN = hS._2
1536+ let hT = fI(bT)
1537+ let hb = hT._1
1538+ let hc = hT._2
1539+ let hP = if ((hb > 0))
13161540 then {
1317- let gG = invoke(ad(), "withdraw", [gT], nil)
1318- if ((gG == gG))
1541+ let hx = invoke(aq(), "realizePartiallyAndClose", [bT, hc], nil)
1542+ if ((hx == hx))
13191543 then nil
13201544 else throw("Strict value is not equal to itself.")
13211545 }
13221546 else nil
1323- if ((ga == ga))
1547+ if ((hP == hP))
13241548 then {
1325- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), (gN - gT)], nil)
1326- if ((gw == gw))
1549+ let gD = if ((hN > 0))
13271550 then {
1328- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), gm)])
1329- if ((go == go))
1551+ let ht = invoke(ak(), "withdraw", [hN], nil)
1552+ if ((ht == ht))
1553+ then nil
1554+ else throw("Strict value is not equal to itself.")
1555+ }
1556+ else nil
1557+ if ((gD == gD))
1558+ then {
1559+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), (hH - hN)], nil)
1560+ if ((hu == hu))
13301561 then {
1331- let fT = invoke(ae(), "notifyNotional", [bK, 0], nil)
1332- if ((fT == fT))
1333- then (((fi(bK) ++ fc(ca, cb, dK, dL, dO, dM, dN)) ++ fj(bB.caller, gO)) ++ fm(gS))
1562+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), gP)])
1563+ if ((gR == gR))
1564+ then {
1565+ let gn = invoke(al(), "notifyNotional", [bT, 0], nil)
1566+ if ((gn == gn))
1567+ then (((fv(bT) ++ fp(cm, cn, dW, dX, ea, dY, dZ)) ++ fw(bK.caller, hI)) ++ fz(hM))
1568+ else throw("Strict value is not equal to itself.")
1569+ }
13341570 else throw("Strict value is not equal to itself.")
13351571 }
13361572 else throw("Strict value is not equal to itself.")
13431579
13441580
13451581
1346-@Callable(bB)
1582+@Callable(bK)
13471583 func payFunding () = {
1348- let gW = bm()
1349- if (if (if ((gW > lastBlock.timestamp))
1584+ let hU = bv()
1585+ if (if (if ((hU > lastBlock.timestamp))
13501586 then true
1351- else !(bP()))
1587+ else !(cb()))
13521588 then true
1353- else bQ())
1354- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gW)))
1589+ else cc())
1590+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(hU)))
13551591 else {
1356- let en = cI()
1357- let gX = em()
1358- let eq = gX._1
1359- let er = gX._2
1360- eK((gW + bp()), (bw() + er), (bx() + eq), ay(er, en), ay(eq, en))
1592+ let ez = cU()
1593+ let hV = ey()
1594+ let eC = hV._1
1595+ let eD = hV._2
1596+ eW((hU + by()), (bF() + eD), (bG() + eC), aK(eD, ez), aK(eC, ez))
13611597 }
13621598 }
13631599
13641600
13651601
1366-@Callable(bB)
1367-func forceMoveAsset (bK,fk) = if (if ((addressFromPublicKey(Z()) != bB.caller))
1602+@Callable(bK)
1603+func forceMoveAsset (bT,fx) = if (if ((addressFromPublicKey(ag()) != bK.caller))
13681604 then true
1369- else (0 > fk))
1605+ else (0 > fx))
13701606 then throw("Invalid forceMoveAsset parameters")
13711607 else {
1372- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), fk], nil)
1373- if ((gw == gw))
1374- then (fj(addressFromStringValue(bK), fk) ++ fm((be() - fk)))
1608+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), fx], nil)
1609+ if ((hu == hu))
1610+ then (fw(addressFromStringValue(bT), fx) ++ fz((bn() - fx)))
13751611 else throw("Strict value is not equal to itself.")
13761612 }
13771613
13781614
13791615
1380-@Callable(bB)
1381-func adjustPeg (eg) = if (if ((addressFromPublicKey(Z()) != bB.caller))
1616+@Callable(bK)
1617+func adjustPeg (es) = if (if ((addressFromPublicKey(ag()) != bK.caller))
13821618 then true
1383- else (0 > eg))
1619+ else (0 > es))
13841620 then throw("Invalid adjustPeg parameters")
13851621 else {
1386- let gY = ef(eg)
1387- let ek = gY._1
1388- let gZ = gY._2
1389- if ((gZ == 0))
1622+ let hW = er(es)
1623+ let ew = hW._1
1624+ let hX = hW._2
1625+ if ((hX == 0))
13901626 then throw("Nothing to adjust")
1391- else if ((gZ > 0))
1392- then fb(ek, bi())
1627+ else if ((hX > 0))
1628+ then fo(ew, br())
13931629 else {
1394- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), aB(gZ)], nil)
1395- if ((gw == gw))
1630+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), aN(hX)], nil)
1631+ if ((hu == hu))
13961632 then {
1397- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), aB(gZ))])
1398- if ((go == go))
1399- then (fm((be() - aB(gZ))) ++ fb(ek, bi()))
1633+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), aN(hX))])
1634+ if ((gR == gR))
1635+ then (fz((bn() - aN(hX))) ++ fo(ew, br()))
14001636 else throw("Strict value is not equal to itself.")
14011637 }
14021638 else throw("Strict value is not equal to itself.")
14051641
14061642
14071643
1408-@Callable(bB)
1644+@Callable(bK)
14091645 func migrateLiquidity () = {
1410- let ha = be()
1411- if ((ha > 0))
1646+ let hY = bn()
1647+ if ((hY > 0))
14121648 then {
1413- let gw = invoke(ab(), "unlockNeutrino", [ha, toBase58String(aa())], nil)
1414- if ((gw == gw))
1649+ let hu = invoke(ai(), "unlockNeutrino", [hY, toBase58String(ah())], nil)
1650+ if ((hu == hu))
14151651 then {
1416- let gn = invoke(ah(), "deposit", nil, [AttachedPayment(aa(), ha)])
1417- if ((gn == gn))
1652+ let gQ = invoke(ao(), "deposit", nil, [AttachedPayment(ah(), hY)])
1653+ if ((gQ == gQ))
14181654 then nil
14191655 else throw("Strict value is not equal to itself.")
14201656 }
14251661
14261662
14271663
1428-@Callable(bB)
1429-func v_get (bK) = {
1430- let hb = dE(bK, false)
1431- let dc = hb._1
1432- let dd = hb._2
1433- let de = hb._3
1434- let hc = hb._4
1435- throw((((aw(dd) + aw(de)) + aw(hc)) + aw(dw(bK))))
1664+@Callable(bK)
1665+func v_get (bT) = {
1666+ let hZ = dQ(bT, false)
1667+ let do = hZ._1
1668+ let dp = hZ._2
1669+ let dq = hZ._3
1670+ let ia = hZ._4
1671+ throw((((aI(dp) + aI(dq)) + aI(ia)) + aI(dI(bT))))
14361672 }
14371673
14381674
14391675
1440-@Callable(bB)
1441-func view_calcRemainMarginWithFundingPayment (bK) = {
1442- let hd = bJ(bK)
1443- let bN = hd._1
1444- let dk = hd._2
1445- let dt = hd._3
1446- let dm = hd._4
1447- let he = di(bK, au)
1448- let cZ = he._1
1449- let dh = he._2
1450- let hf = co(bN, dk, dm, dh)
1451- let cx = hf._1
1452- let cy = hf._2
1453- let ct = hf._3
1454- throw((((((aw(cx) + aw(ct)) + aw(dw(bK))) + aw(dh)) + aw(cy)) + aw(cZ)))
1676+@Callable(bK)
1677+func view_calcRemainMarginWithFundingPayment (bT) = {
1678+ let ib = bS(bT)
1679+ let bW = ib._1
1680+ let dw = ib._2
1681+ let dF = ib._3
1682+ let dy = ib._4
1683+ let ic = du(bT, aG)
1684+ let dl = ic._1
1685+ let dt = ic._2
1686+ let id = cA(bW, dw, dy, dt)
1687+ let cJ = id._1
1688+ let cK = id._2
1689+ let cF = id._3
1690+ throw((((((aI(cJ) + aI(cF)) + aI(dI(bT))) + aI(dt)) + aI(cK)) + aI(dl)))
14551691 }
14561692
14571693
14581694
1459-@Callable(bB)
1460-func view_getPegAdjustCost (eg) = {
1461- let el = ef(eg)
1462- throw(toString(el._2))
1695+@Callable(bK)
1696+func view_getPegAdjustCost (es) = {
1697+ let ex = er(es)
1698+ throw(toString(ex._2))
14631699 }
14641700
14651701
14661702
1467-@Callable(bB)
1703+@Callable(bK)
14681704 func view_getFunding () = {
1469- let en = cI()
1470- let hg = em()
1471- let eq = hg._1
1472- let er = hg._2
1473- let hh = ay(er, en)
1474- let hi = ay(eq, en)
1475- throw((((aw(hh) + aw(hi)) + aw(dP())) + aw(cI())))
1705+ let ez = cU()
1706+ let ie = ey()
1707+ let eC = ie._1
1708+ let eD = ie._2
1709+ let if = aK(eD, ez)
1710+ let ig = aK(eC, ez)
1711+ throw((((aI(if) + aI(ig)) + aI(eb())) + aI(cU())))
14761712 }
14771713
14781714
1479-@Verifier(hj)
1480-func hk () = sigVerify(hj.bodyBytes, hj.proofs[0], Z())
1715+
1716+@Callable(bK)
1717+func view_getBorrowedByTrader (bT) = {
1718+ let ih = fI(bT)
1719+ let hb = ih._1
1720+ let hc = ih._2
1721+ throw((aI(hb) + hc))
1722+ }
1723+
1724+
1725+@Verifier(ii)
1726+func ij () = sigVerify(ii.bodyBytes, ii.proofs[0], ag())
14811727
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
88 let c = "k_ora"
99
1010 let d = "k_balance"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionClosedDate"
2121
22-let j = "k_initialized"
22+let j = "k_positionAsset"
2323
24-let k = "k_paused"
24+let k = "k_initialized"
2525
26-let l = "k_fee"
26+let l = "k_paused"
2727
28-let m = "k_fundingPeriod"
28+let m = "k_fee"
2929
30-let n = "k_initMarginRatio"
30+let n = "k_fundingPeriod"
3131
32-let o = "k_mmr"
32+let o = "k_initMarginRatio"
3333
34-let p = "k_liquidationFeeRatio"
34+let p = "k_mmr"
3535
36-let q = "k_partLiquidationRatio"
36+let q = "k_liquidationFeeRatio"
3737
38-let r = "k_spreadLimit"
38+let r = "k_partLiquidationRatio"
3939
40-let s = "k_maxPriceImpact"
40+let s = "k_spreadLimit"
4141
42-let t = "k_maxPriceSpread"
42+let t = "k_maxPriceImpact"
4343
44-let u = "k_lastDataStr"
44+let u = "k_maxPriceSpread"
4545
46-let v = "k_lastMinuteId"
46+let v = "k_lastDataStr"
4747
48-let w = "k_twapDataLastCumulativePrice"
48+let w = "k_lastMinuteId"
4949
50-let x = "k_twapDataLastPrice"
50+let x = "k_twapDataLastCumulativePrice"
5151
52-let y = "k_twapDataPreviousMinuteId"
52+let y = "k_twapDataLastPrice"
5353
54-let z = "k_latestLongPremiumFraction"
54+let z = "k_twapDataPreviousMinuteId"
5555
56-let A = "k_latestShortPremiumFraction"
56+let A = "k_latestLongPremiumFraction"
5757
58-let B = "k_nextFundingBlockMinTimestamp"
58+let B = "k_latestShortPremiumFraction"
5959
60-let C = "k_longFundingRate"
60+let C = "k_nextFundingBlockMinTimestamp"
6161
62-let D = "k_shortFundingRate"
62+let D = "k_longFundingRate"
6363
64-let E = "k_qtAstR"
64+let E = "k_shortFundingRate"
6565
66-let F = "k_bsAstR"
66+let F = "k_qtAstR"
6767
68-let G = "k_totalPositionSize"
68+let G = "k_bsAstR"
6969
70-let H = "k_totalLongPositionSize"
70+let H = "k_totalPositionSize"
7171
72-let I = "k_totalShortPositionSize"
72+let I = "k_totalLongPositionSize"
7373
74-let J = "k_cumulativeNotional"
74+let J = "k_totalShortPositionSize"
7575
76-let K = "k_openInterestNotional"
76+let K = "k_cumulativeNotional"
7777
78-let L = "k_coordinatorAddress"
78+let L = "k_openInterestNotional"
7979
80-let M = "k_insurance_address"
80+let M = "k_coordinatorAddress"
8181
82-let N = "k_admin_address"
82+let N = "k_insurance_address"
8383
84-let O = "k_admin_public_key"
84+let O = "k_admin_address"
8585
86-let P = "k_quote_asset"
86+let P = "k_admin_public_key"
8787
88-let Q = "k_quote_staking"
88+let Q = "k_quote_asset"
8989
90-let R = "k_staking_address"
90+let R = "k_quote_staking"
9191
92-let S = "k_miner_address"
92+let S = "k_staking_address"
9393
94-let T = "k_orders_address"
94+let T = "k_miner_address"
9595
96-let U = "k_referral_address"
96+let U = "k_orders_address"
9797
98-let V = "k_manager_address"
98+let V = "k_referral_address"
9999
100-let W = "k_nft_manager_address"
100+let W = "k_manager_address"
101101
102-func X () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
102+let X = "k_collateral_address"
103+
104+let Y = "k_exchange_address"
105+
106+let Z = "k_nft_manager_address"
107+
108+let aa = "k_trader_market_asset_collateral"
109+
110+func ab (ac,ad) = ((ac + "_") + ad)
103111
104112
105-func Y () = addressFromString(getStringValue(X(), N))
113+func ae () = valueOrErrorMessage(addressFromString(getStringValue(this, M)), "Coordinator not set")
106114
107115
108-func Z () = fromBase58String(getStringValue(X(), O))
116+func af () = addressFromString(getStringValue(ae(), O))
109117
110118
111-func aa () = fromBase58String(getStringValue(X(), P))
119+func ag () = fromBase58String(getStringValue(ae(), P))
112120
113121
114-func ab () = valueOrErrorMessage(addressFromString(getStringValue(X(), Q)), "Quote asset staking not set")
122+func ah () = fromBase58String(getStringValue(ae(), Q))
115123
116124
117-func ac () = valueOrErrorMessage(addressFromString(getStringValue(X(), R)), "Staking not set")
125+func ai () = valueOrErrorMessage(addressFromString(getStringValue(ae(), R)), "Quote asset staking not set")
118126
119127
120-func ad () = valueOrErrorMessage(addressFromString(getStringValue(X(), M)), "Insurance not set")
128+func aj () = valueOrErrorMessage(addressFromString(getStringValue(ae(), S)), "Staking not set")
121129
122130
123-func ae () = valueOrErrorMessage(addressFromString(getStringValue(X(), S)), "Miner not set")
131+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ae(), N)), "Insurance not set")
124132
125133
126-func af () = valueOrErrorMessage(addressFromString(getStringValue(X(), T)), "Orders not set")
134+func al () = valueOrErrorMessage(addressFromString(getStringValue(ae(), T)), "Miner not set")
127135
128136
129-func ag () = valueOrErrorMessage(addressFromString(getStringValue(X(), U)), "Referral not set")
137+func am () = valueOrErrorMessage(addressFromString(getStringValue(ae(), U)), "Orders not set")
130138
131139
132-func ah () = valueOrErrorMessage(addressFromString(getStringValue(X(), V)), "Manager not set")
140+func an () = valueOrErrorMessage(addressFromString(getStringValue(ae(), V)), "Referral not set")
133141
134142
135-func ai () = valueOrErrorMessage(addressFromString(getStringValue(X(), W)), "NFT Manager not set")
143+func ao () = valueOrErrorMessage(addressFromString(getStringValue(ae(), W)), "Manager not set")
136144
137145
138-let aj = "k_token_param"
139-
140-let ak = "k_token_type"
141-
142-let al = "fee_reduction"
143-
144-let am = 1
145-
146-let an = 2
147-
148-let ao = 15
149-
150-let ap = 15
151-
152-let aq = 1000
153-
154-let ar = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
155-
156-let as = (86400 * ar)
157-
158-let at = 100
159-
160-let au = 1
161-
162-let av = 2
163-
164-func aw (ax) = (toString(ax) + ",")
146+func ap () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Z)), "NFT Manager not set")
165147
166148
167-func ay (ax,az) = fraction(ax, ar, az, HALFEVEN)
149+func aq () = valueOrErrorMessage(addressFromString(getStringValue(ae(), X)), "Collateral Manager not set")
168150
169151
170-func aA (ax,az) = fraction(ax, az, ar, HALFEVEN)
152+func ar () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ae(), Y), "No swap address")), "Invalid swap address")
171153
172154
173-func aB (ax) = if ((ax > 0))
174- then ax
175- else -(ax)
155+let as = "k_whitelist_asset"
156+
157+func at (au) = valueOrElse(getBoolean(aq(), ab(as, au)), false)
176158
177159
178-func aC (ax,az) = if ((ax >= az))
179- then ax
180- else az
160+let av = "k_token_param"
161+
162+let aw = "k_token_type"
163+
164+let ax = "fee_reduction"
165+
166+let ay = 1
167+
168+let az = 2
169+
170+let aA = 15
171+
172+let aB = 15
173+
174+let aC = 1000
175+
176+let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
177+
178+let aE = (86400 * aD)
179+
180+let aF = 100
181+
182+let aG = 1
183+
184+let aH = 2
185+
186+func aI (aJ) = (toString(aJ) + ",")
181187
182188
183-func aD (aE,aF) = ((aE + "_") + aF)
189+func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
184190
185191
186-func aG (aH) = {
187- func aI (aJ,aK) = ((aJ + aK) + ",")
192+func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
188193
189- let aL = {
190- let aM = aH
191- let aN = size(aM)
192- let aO = ""
193- func aP (aQ,aR) = if ((aR >= aN))
194- then aQ
195- else aI(aQ, aM[aR])
196194
197- func aS (aQ,aR) = if ((aR >= aN))
198- then aQ
195+func aN (aJ) = if ((aJ > 0))
196+ then aJ
197+ else -(aJ)
198+
199+
200+func aO (aJ,aL) = if ((aJ >= aL))
201+ then aJ
202+ else aL
203+
204+
205+func aP (aQ) = {
206+ func aR (aS,aT) = ((aS + aT) + ",")
207+
208+ let aU = {
209+ let aV = aQ
210+ let aW = size(aV)
211+ let aX = ""
212+ func aY (aZ,ba) = if ((ba >= aW))
213+ then aZ
214+ else aR(aZ, aV[ba])
215+
216+ func bb (aZ,ba) = if ((ba >= aW))
217+ then aZ
199218 else throw("List size exceeds 20")
200219
201- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
220+ bb(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
202221 }
203- let aT = dropRight(aL, 1)
204- let aU = if ((take(aT, 1) == ","))
205- then drop(aT, 1)
206- else aT
207- aU
222+ let bc = dropRight(aU, 1)
223+ let bd = if ((take(bc, 1) == ","))
224+ then drop(bc, 1)
225+ else bc
226+ bd
208227 }
209228
210229
211-func aV (aW) = split(aW, ",")
230+func be (bf) = split(bf, ",")
212231
213232
214-func aX (aH,aY,aZ) = if ((size(aH) > aY))
215- then (removeByIndex(aH, 0) :+ aZ)
216- else (aH :+ aZ)
233+func bg (aQ,bh,bi) = if ((size(aQ) > bh))
234+ then (removeByIndex(aQ, 0) :+ bi)
235+ else (aQ :+ bi)
217236
218237
219-func ba (bb) = valueOrErrorMessage(getInteger(this, bb), ("no value for " + bb))
238+func bj (bk) = valueOrErrorMessage(getInteger(this, bk), ("no value for " + bk))
220239
221240
222-func bc (aF,aE) = {
223- let aK = valueOrErrorMessage(getString(aF, aE), ("No value for key " + aE))
224- aK
241+func bl (ad,ac) = {
242+ let aT = valueOrErrorMessage(getString(ad, ac), ("No value for key " + ac))
243+ aT
225244 }
226245
227246
228-func bd (aF,aE) = {
229- let aK = valueOrErrorMessage(getInteger(aF, aE), ("No value for key " + aE))
230- aK
247+func bm (ad,ac) = {
248+ let aT = valueOrErrorMessage(getInteger(ad, ac), ("No value for key " + ac))
249+ aT
231250 }
232251
233252
234-func be () = ba(d)
253+func bn () = bj(d)
235254
236255
237-func bf () = ba(l)
256+func bo () = bj(m)
238257
239258
240-func bg () = ba(n)
259+func bp () = bj(o)
241260
242261
243-func bh () = ba(E)
262+func bq () = bj(F)
244263
245264
246-func bi () = ba(F)
265+func br () = bj(G)
247266
248267
249-func bj () = ba(G)
268+func bs () = bj(H)
250269
251270
252-func bk () = ba(J)
271+func bt () = bj(K)
253272
254273
255-func bl () = ba(K)
274+func bu () = bj(L)
256275
257276
258-func bm () = ba(B)
277+func bv () = bj(C)
259278
260279
261-func bn () = ba(m)
280+func bw () = bj(n)
262281
263282
264-func bo () = (bn() * ar)
283+func bx () = (bw() * aD)
265284
266285
267-func bp () = (bn() * aq)
286+func by () = (bw() * aC)
268287
269288
270-func bq () = ba(o)
289+func bz () = bj(p)
271290
272291
273-func br () = ba(p)
292+func bA () = bj(q)
274293
275294
276-func bs () = ba(q)
295+func bB () = bj(r)
277296
278297
279-func bt () = ba(r)
298+func bC () = bj(s)
280299
281300
282-func bu () = ba(s)
301+func bD () = bj(t)
283302
284303
285-func bv () = ba(t)
304+func bE () = bj(u)
286305
287306
288-func bw () = ba(z)
307+func bF () = bj(A)
289308
290309
291-func bx () = ba(A)
310+func bG () = bj(B)
292311
293312
294-func by () = ba(I)
313+func bH () = bj(J)
295314
296315
297-func bz () = ba(H)
316+func bI () = bj(I)
298317
299318
300-func bA (bB) = valueOrElse(getString(af(), "k_sender"), toString(bB.caller))
319+func bJ (bK) = valueOrElse(getString(am(), "k_sender"), toString(bK.caller))
301320
302321
303-func bC (bD,bE,bF) = {
304- let bG = (bD - bE)
305- if (if (bF)
306- then (0 > bG)
322+func bL (bM,bN,bO) = {
323+ let bP = (bM - bN)
324+ if (if (bO)
325+ then (0 > bP)
307326 else false)
308327 then throw("Invalid margin")
309- else if (if (!(bF))
310- then (bG >= 0)
328+ else if (if (!(bO))
329+ then (bP >= 0)
311330 else false)
312331 then throw("Invalid margin")
313332 else true
314333 }
315334
316335
317-func bH (bI) = if ((bI == 0))
336+func bQ (bR) = if ((bR == 0))
318337 then throw("Should not be called with _positionSize == 0")
319- else if ((bI > 0))
320- then bw()
321- else bx()
338+ else if ((bR > 0))
339+ then bF()
340+ else bG()
322341
323342
324-func bJ (bK) = {
325- let bL = getInteger(this, aD(e, bK))
326- let bM = bL
327- if ($isInstanceOf(bM, "Int"))
343+func bS (bT) = {
344+ let bU = getInteger(this, ab(e, bT))
345+ let bV = bU
346+ if ($isInstanceOf(bV, "Int"))
328347 then {
329- let bN = bM
330- $Tuple4(bN, getIntegerValue(this, aD(f, bK)), getIntegerValue(this, aD(g, bK)), getIntegerValue(this, aD(h, bK)))
348+ let bW = bV
349+ $Tuple4(bW, getIntegerValue(this, ab(f, bT)), getIntegerValue(this, ab(g, bT)), getIntegerValue(this, ab(h, bT)))
331350 }
332351 else $Tuple4(0, 0, 0, 0)
333352 }
334353
335354
336-func bO (bK) = if ((bJ(bK)._1 == 0))
355+func bX (bT) = {
356+ let bY = getString(this, ab(j, bT))
357+ let bV = bY
358+ if ($isInstanceOf(bV, "String"))
359+ then {
360+ let bZ = bV
361+ bZ
362+ }
363+ else toBase58String(ah())
364+ }
365+
366+
367+func ca (bT) = if ((bS(bT)._1 == 0))
337368 then throw("No open position")
338369 else true
339370
340371
341-func bP () = valueOrElse(getBoolean(this, j), false)
372+func cb () = valueOrElse(getBoolean(this, k), false)
342373
343374
344-func bQ () = valueOrElse(getBoolean(this, k), false)
375+func cc () = valueOrElse(getBoolean(this, l), false)
345376
346377
347-func bR (bS,bT,bU) = if (bS)
378+func cd (ce,cf,cg) = if (ce)
348379 then {
349- let bV = (bi() - bU)
350- if ((0 >= bV))
380+ let ch = (br() - cg)
381+ if ((0 >= ch))
351382 then throw("Tx lead to base asset reserve <= 0, revert")
352- else $Tuple4((bh() + bT), bV, (bj() + bU), (bk() + bT))
383+ else $Tuple4((bq() + cf), ch, (bs() + cg), (bt() + cf))
353384 }
354385 else {
355- let bW = (bh() - bT)
356- if ((0 >= bW))
386+ let ci = (bq() - cf)
387+ if ((0 >= ci))
357388 then throw("Tx lead to base quote reserve <= 0, revert")
358- else $Tuple4(bW, (bi() + bU), (bj() - bU), (bk() - bT))
389+ else $Tuple4(ci, (br() + cg), (bs() - cg), (bt() - cf))
359390 }
360391
361392
362-func bX (bS,bT) = {
363- let bY = bh()
364- let bZ = bi()
365- let bb = aA(bY, bZ)
366- let ca = if (bS)
367- then (bY + bT)
368- else (bY - bT)
369- let cb = ay(bb, ca)
370- let cc = aB((cb - bZ))
371- let cd = if (bS)
372- then cc
373- else -(cc)
374- let ce = bR(bS, bT, cc)
375- let cf = ce._1
376- let cg = ce._2
377- let ch = ce._3
378- let ci = ce._4
379- let cj = ay(bY, bZ)
380- let ck = ay(bT, cc)
381- let cl = aB((cj - ck))
382- let cm = (ar - ay(cj, (cj + cl)))
383- let cn = bu()
384- if ((cm > cn))
385- then throw(((((((((((((("Price impact " + toString(cm)) + " > max price impact ") + toString(cn)) + " before quote asset: ") + toString(bY)) + " before base asset: ") + toString(bZ)) + " quote asset amount to exchange: ") + toString(bT)) + " price before: ") + toString(cj)) + " marketPrice: ") + toString(ck)))
386- else $Tuple5(cd, cf, cg, ch, ci)
393+func cj (ce,cf) = {
394+ let ck = bq()
395+ let cl = br()
396+ let bk = aM(ck, cl)
397+ let cm = if (ce)
398+ then (ck + cf)
399+ else (ck - cf)
400+ let cn = aK(bk, cm)
401+ let co = aN((cn - cl))
402+ let cp = if (ce)
403+ then co
404+ else -(co)
405+ let cq = cd(ce, cf, co)
406+ let cr = cq._1
407+ let cs = cq._2
408+ let ct = cq._3
409+ let cu = cq._4
410+ let cv = aK(ck, cl)
411+ let cw = aK(cf, co)
412+ let cx = aN((cv - cw))
413+ let cy = (aD - aK(cv, (cv + cx)))
414+ let cz = bD()
415+ if ((cy > cz))
416+ then throw(((((((((((((("Price impact " + toString(cy)) + " > max price impact ") + toString(cz)) + " before quote asset: ") + toString(ck)) + " before base asset: ") + toString(cl)) + " quote asset amount to exchange: ") + toString(cf)) + " price before: ") + toString(cv)) + " marketPrice: ") + toString(cw)))
417+ else $Tuple5(cp, cr, cs, ct, cu)
387418 }
388419
389420
390-func co (cp,cq,cr,cs) = {
391- let ct = if ((cp != 0))
421+func cA (cB,cC,cD,cE) = {
422+ let cF = if ((cB != 0))
392423 then {
393- let cu = bH(cp)
394- aA((cu - cr), cp)
424+ let cG = bQ(cB)
425+ aM((cG - cD), cB)
395426 }
396427 else 0
397- let cv = ((cs - ct) + cq)
398- let cw = if ((0 > cv))
399- then $Tuple2(0, aB(cv))
400- else $Tuple2(aB(cv), 0)
401- let cx = cw._1
402- let cy = cw._2
403- $Tuple3(cx, cy, ct)
428+ let cH = ((cE - cF) + cC)
429+ let cI = if ((0 > cH))
430+ then $Tuple2(0, aN(cH))
431+ else $Tuple2(aN(cH), 0)
432+ let cJ = cI._1
433+ let cK = cI._2
434+ $Tuple3(cJ, cK, cF)
404435 }
405436
406437
407-func cz (bS,bU,cA,cB,cC) = {
408- let cj = ay(cB, cC)
409- if ((bU == 0))
438+func cL (ce,cg,cM,cN,cO) = {
439+ let cv = aK(cN, cO)
440+ if ((cg == 0))
410441 then throw("Invalid base asset amount")
411442 else {
412- let bb = aA(cB, cC)
413- let cD = if (bS)
414- then (cC + bU)
415- else (cC - bU)
416- let cE = ay(bb, cD)
417- let cF = aB((cE - cB))
418- let cn = bu()
419- let cG = bR(!(bS), cF, bU)
420- let cf = cG._1
421- let cg = cG._2
422- let ch = cG._3
423- let ci = cG._4
424- let ck = ay(cF, bU)
425- let cl = aB((cj - ck))
426- let cm = (ar - ay(cj, (cj + cl)))
427- if (if ((cm > cn))
428- then cA
443+ let bk = aM(cN, cO)
444+ let cP = if (ce)
445+ then (cO + cg)
446+ else (cO - cg)
447+ let cQ = aK(bk, cP)
448+ let cR = aN((cQ - cN))
449+ let cz = bD()
450+ let cS = cd(!(ce), cR, cg)
451+ let cr = cS._1
452+ let cs = cS._2
453+ let ct = cS._3
454+ let cu = cS._4
455+ let cw = aK(cR, cg)
456+ let cx = aN((cv - cw))
457+ let cy = (aD - aK(cv, (cv + cx)))
458+ if (if ((cy > cz))
459+ then cM
429460 else false)
430- then throw(((((((((((((("Price impact " + toString(cm)) + " > max price impact ") + toString(cn)) + " before quote asset: ") + toString(cB)) + " before base asset: ") + toString(cC)) + " base asset amount to exchange: ") + toString(bU)) + " price before: ") + toString(cj)) + " market price: ") + toString(ck)))
431- else $Tuple8(cF, cf, cg, ch, ci, (bz() - (if (bS)
432- then aB(bU)
433- else 0)), (by() - (if (!(bS))
434- then aB(bU)
435- else 0)), cm)
461+ then throw(((((((((((((("Price impact " + toString(cy)) + " > max price impact ") + toString(cz)) + " before quote asset: ") + toString(cN)) + " before base asset: ") + toString(cO)) + " base asset amount to exchange: ") + toString(cg)) + " price before: ") + toString(cv)) + " market price: ") + toString(cw)))
462+ else $Tuple8(cR, cr, cs, ct, cu, (bI() - (if (ce)
463+ then aN(cg)
464+ else 0)), (bH() - (if (!(ce))
465+ then aN(cg)
466+ else 0)), cy)
436467 }
437468 }
438469
439470
440-func cH (bS,bU,cA) = cz(bS, bU, cA, bh(), bi())
471+func cT (ce,cg,cM) = cL(ce, cg, cM, bq(), br())
441472
442473
443-func cI () = {
444- let cJ = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
445- let cK = getStringValue(this, a)
446- let cL = getStringValue(this, b)
447- let cM = valueOrErrorMessage(getInteger(cJ, cK), ((("Can not get oracle price. Oracle: " + toString(cJ)) + " key: ") + cK))
448- cM
474+func cU () = {
475+ let cV = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
476+ let cW = getStringValue(this, a)
477+ let cX = getStringValue(this, b)
478+ let cY = valueOrErrorMessage(getInteger(cV, cW), ((("Can not get oracle price. Oracle: " + toString(cV)) + " key: ") + cW))
479+ cY
449480 }
450481
451482
452-func cN (cB,cC) = {
453- let cO = cI()
454- let cP = ay(cB, cC)
455- let cQ = ay((cO + cP), (2 * ar))
456- let cR = ay(aB((cO - cP)), cQ)
457- if ((cR > bv()))
458- then throw(((("Price spread " + toString(cR)) + " > max price spread ") + toString(bv())))
483+func cZ (cN,cO) = {
484+ let da = cU()
485+ let db = aK(cN, cO)
486+ let dc = aK((da + db), (2 * aD))
487+ let dd = aK(aN((da - db)), dc)
488+ if ((dd > bE()))
489+ then throw(((("Price spread " + toString(dd)) + " > max price spread ") + toString(bE())))
459490 else true
460491 }
461492
462493
463-func cS () = {
464- let cB = bh()
465- let cC = bi()
466- ay(cB, cC)
494+func de () = {
495+ let cN = bq()
496+ let cO = br()
497+ aK(cN, cO)
467498 }
468499
469500
470-func cT () = {
471- let cO = cI()
472- let cU = cS()
473- (ay(aB((cO - cU)), cO) > bt())
501+func df () = {
502+ let da = cU()
503+ let dg = de()
504+ (aK(aN((da - dg)), da) > bC())
474505 }
475506
476507
477-func cV (bI,cW,cB,cC) = {
478- let cX = aB(bI)
479- let cY = (0 > bI)
480- let cZ = if ((cW == au))
508+func dh (bR,di,cN,cO) = {
509+ let dj = aN(bR)
510+ let dk = (0 > bR)
511+ let dl = if ((di == aG))
481512 then {
482- let da = cz(!(cY), cX, false, cB, cC)
483- let db = da._1
484- let dc = da._2
485- let dd = da._3
486- let de = da._4
487- db
513+ let dm = cL(!(dk), dj, false, cN, cO)
514+ let dn = dm._1
515+ let do = dm._2
516+ let dp = dm._3
517+ let dq = dm._4
518+ dn
488519 }
489- else aA(cX, cI())
490- cZ
520+ else aM(dj, cU())
521+ dl
491522 }
492523
493524
494-func df (bI,dg,cB,cC,cW) = if ((bI == 0))
525+func dr (bR,ds,cN,cO,di) = if ((bR == 0))
495526 then throw("Invalid position size")
496527 else {
497- let cY = (0 > bI)
498- let cZ = cV(bI, cW, cB, cC)
499- let dh = if (cY)
500- then (dg - cZ)
501- else (cZ - dg)
502- $Tuple2(cZ, dh)
528+ let dk = (0 > bR)
529+ let dl = dh(bR, di, cN, cO)
530+ let dt = if (dk)
531+ then (ds - dl)
532+ else (dl - ds)
533+ $Tuple2(dl, dt)
503534 }
504535
505536
506-func di (bK,cW) = {
507- let dj = bJ(bK)
508- let bN = dj._1
509- let dk = dj._2
510- let dl = dj._3
511- let dm = dj._4
512- df(bN, dl, bh(), bi(), cW)
537+func du (bT,di) = {
538+ let dv = bS(bT)
539+ let bW = dv._1
540+ let dw = dv._2
541+ let dx = dv._3
542+ let dy = dv._4
543+ dr(bW, dx, bq(), br(), di)
513544 }
514545
515546
516-func dn (do,dp,dq) = ay((do - dp), dq)
547+func dz (dA,dB,dC) = aK((dA - dB), dC)
517548
518549
519-func dr (bK,cW) = {
520- let ds = bJ(bK)
521- let bN = ds._1
522- let dk = ds._2
523- let dt = ds._3
524- let dm = ds._4
525- let du = di(bK, cW)
526- let cZ = du._1
527- let dh = du._2
528- let dv = co(bN, dk, dm, dh)
529- let cx = dv._1
530- let cy = dv._2
531- dn(cx, cy, cZ)
550+func dD (bT,di) = {
551+ let dE = bS(bT)
552+ let bW = dE._1
553+ let dw = dE._2
554+ let dF = dE._3
555+ let dy = dE._4
556+ let dG = du(bT, di)
557+ let dl = dG._1
558+ let dt = dG._2
559+ let dH = cA(bW, dw, dy, dt)
560+ let cJ = dH._1
561+ let cK = dH._2
562+ dz(cJ, cK, dl)
532563 }
533564
534565
535-func dw (bK) = dr(bK, au)
566+func dI (bT) = dD(bT, aG)
536567
537568
538-func dx (bK,bI) = {
539- let dy = aC(bs(), (ar - ay(dw(bK), bq())))
540- let dz = aA(aB(bI), dy)
541- let dA = cH((bI > 0), dz, false)
542- let dB = dA._1
543- let cm = dA._8
544- if ((bu() > cm))
545- then dB
569+func dJ (bT,bR) = {
570+ let dK = aO(bB(), (aD - aK(dI(bT), bz())))
571+ let dL = aM(aN(bR), dK)
572+ let dM = cT((bR > 0), dL, false)
573+ let dN = dM._1
574+ let cy = dM._8
575+ if ((bD() > cy))
576+ then dN
546577 else {
547- let dC = aA(aB(bI), bs())
548- let dD = cH((bI > 0), dC, false)._1
549- dD
578+ let dO = aM(aN(bR), bB())
579+ let dP = cT((bR > 0), dO, false)._1
580+ dP
550581 }
551582 }
552583
553584
554-func dE (bK,cA) = {
555- let dF = bJ(bK)
556- let bN = dF._1
557- let dk = dF._2
558- let dl = dF._3
559- let dm = dF._4
560- let dh = di(bK, au)._2
561- let dG = co(bN, dk, dm, dh)
562- let cx = dG._1
563- let cy = dG._2
564- let dC = -(bN)
565- let dH = dh
566- let dI = -(cx)
567- let dJ = cH((bN > 0), aB(bN), cA)
568- let dD = dJ._1
569- let ca = dJ._2
570- let cb = dJ._3
571- let dK = dJ._4
572- let dL = dJ._5
573- let dM = dJ._6
574- let dN = dJ._7
575- let dO = (bl() - dl)
576- $Tuple12(dC, cy, dH, dI, ca, cb, dK, dL, dO, dD, dM, dN)
585+func dQ (bT,cM) = {
586+ let dR = bS(bT)
587+ let bW = dR._1
588+ let dw = dR._2
589+ let dx = dR._3
590+ let dy = dR._4
591+ let dt = du(bT, aG)._2
592+ let dS = cA(bW, dw, dy, dt)
593+ let cJ = dS._1
594+ let cK = dS._2
595+ let dO = -(bW)
596+ let dT = dt
597+ let dU = -(cJ)
598+ let dV = cT((bW > 0), aN(bW), cM)
599+ let dP = dV._1
600+ let cm = dV._2
601+ let cn = dV._3
602+ let dW = dV._4
603+ let dX = dV._5
604+ let dY = dV._6
605+ let dZ = dV._7
606+ let ea = (bu() - dx)
607+ $Tuple12(dO, cK, dT, dU, cm, cn, dW, dX, ea, dP, dY, dZ)
577608 }
578609
579610
580-func dP () = {
581- let dQ = ((lastBlock.timestamp / 1000) / 60)
582- let dR = (dQ - ao)
583- let dS = valueOrElse(getString(this, u), "")
584- let dT = split(dS, ",")
585- func dU (aJ,dV) = if ((dR >= parseIntValue(dV)))
586- then (aJ :+ parseIntValue(dV))
587- else aJ
611+func eb () = {
612+ let ec = ((lastBlock.timestamp / 1000) / 60)
613+ let ed = (ec - aA)
614+ let ee = valueOrElse(getString(this, v), "")
615+ let ef = split(ee, ",")
616+ func eg (aS,eh) = if ((ed >= parseIntValue(eh)))
617+ then (aS :+ parseIntValue(eh))
618+ else aS
588619
589- let dW = {
590- let aM = dT
591- let aN = size(aM)
592- let aO = nil
593- func aP (aQ,aR) = if ((aR >= aN))
594- then aQ
595- else dU(aQ, aM[aR])
620+ let ei = {
621+ let aV = ef
622+ let aW = size(aV)
623+ let aX = nil
624+ func aY (aZ,ba) = if ((ba >= aW))
625+ then aZ
626+ else eg(aZ, aV[ba])
596627
597- func aS (aQ,aR) = if ((aR >= aN))
598- then aQ
628+ func bb (aZ,ba) = if ((ba >= aW))
629+ then aZ
599630 else throw("List size exceeds 20")
600631
601- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
632+ bb(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aY(aX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
602633 }
603- let dX = if ((size(dW) > 0))
604- then max(dW)
605- else parseIntValue(dT[0])
606- let dY = valueOrElse(getInteger(this, v), 0)
607- let dZ = valueOrElse(getInteger(this, ((w + "_") + toString(dY))), 0)
608- let ea = valueOrElse(getInteger(this, ((x + "_") + toString(dY))), 0)
609- let eb = (dZ + ((dQ - dY) * ea))
610- let ec = valueOrElse(getInteger(this, ((w + "_") + toString(dX))), 0)
611- let ed = valueOrElse(getInteger(this, ((x + "_") + toString(dX))), 0)
612- let ee = (ec + ((dR - dX) * ed))
613- ((eb - ee) / ao)
634+ let ej = if ((size(ei) > 0))
635+ then max(ei)
636+ else parseIntValue(ef[0])
637+ let ek = valueOrElse(getInteger(this, w), 0)
638+ let el = valueOrElse(getInteger(this, ((x + "_") + toString(ek))), 0)
639+ let em = valueOrElse(getInteger(this, ((y + "_") + toString(ek))), 0)
640+ let en = (el + ((ec - ek) * em))
641+ let eo = valueOrElse(getInteger(this, ((x + "_") + toString(ej))), 0)
642+ let ep = valueOrElse(getInteger(this, ((y + "_") + toString(ej))), 0)
643+ let eq = (eo + ((ed - ej) * ep))
644+ ((en - eq) / aA)
614645 }
615646
616647
617-func ef (eg) = {
618- let bI = bj()
619- let eh = (bI > 0)
620- let ei = cH(eh, aB(bI), false)._1
621- let ej = bi()
622- let ek = aA(ej, eg)
623- let el = df(bI, ei, ek, ej, au)._2
624- $Tuple2(ek, el)
648+func er (es) = {
649+ let bR = bs()
650+ let et = (bR > 0)
651+ let eu = cT(et, aN(bR), false)._1
652+ let ev = br()
653+ let ew = aM(ev, es)
654+ let ex = dr(bR, eu, ew, ev, aG)._2
655+ $Tuple2(ew, ex)
625656 }
626657
627658
628-func em () = {
629- let en = cI()
630- let eo = dP()
631- let ep = (eo - en)
632- if (if ((by() == 0))
659+func ey () = {
660+ let ez = cU()
661+ let eA = eb()
662+ let eB = (eA - ez)
663+ if (if ((bH() == 0))
633664 then true
634- else (bz() == 0))
665+ else (bI() == 0))
635666 then $Tuple2(0, 0)
636- else if ((0 > ep))
667+ else if ((0 > eB))
637668 then {
638- let eq = ay(aA(ep, bo()), as)
639- let er = ay(aA(eq, by()), bz())
640- $Tuple2(eq, er)
669+ let eC = aK(aM(eB, bx()), aE)
670+ let eD = aK(aM(eC, bH()), bI())
671+ $Tuple2(eC, eD)
641672 }
642673 else {
643- let er = ay(aA(ep, bo()), as)
644- let eq = ay(aA(er, bz()), by())
645- $Tuple2(eq, er)
674+ let eD = aK(aM(eB, bx()), aE)
675+ let eC = aK(aM(eD, bI()), bH())
676+ $Tuple2(eC, eD)
646677 }
647678 }
648679
649680
650-func es (bB) = {
651- let et = bf()
652- let eu = if ((size(bB.payments) > 1))
681+func eE (bK) = {
682+ let eF = bo()
683+ let eG = if ((size(bK.payments) > 1))
653684 then {
654- let ev = toBase58String(valueOrErrorMessage(bB.payments[1].assetId, "Invalid attached artifact"))
655- let ew = bc(ai(), aD(ak, ev))
656- if ((ew == al))
685+ let eH = toBase58String(valueOrErrorMessage(bK.payments[1].assetId, "Invalid attached artifact"))
686+ let eI = bl(ap(), ab(aw, eH))
687+ if ((eI == ax))
657688 then {
658- let ex = bd(ai(), aD(aj, ev))
659- let ey = aA(et, ex)
660- $Tuple2(ey, true)
689+ let eJ = bm(ap(), ab(av, eH))
690+ let eK = aM(eF, eJ)
691+ $Tuple2(eK, true)
661692 }
662693 else throw("Invalid attached artifact")
663694 }
664- else $Tuple2(et, false)
665- let ey = eu._1
666- let ez = eu._2
667- $Tuple2(ey, ez)
695+ else $Tuple2(eF, false)
696+ let eK = eG._1
697+ let eL = eG._2
698+ $Tuple2(eK, eL)
668699 }
669700
670701
671-func eA (eB,eC,eD,eE,eF,eG,eH,eI,eJ) = [IntegerEntry(n, eB), IntegerEntry(o, eC), IntegerEntry(p, eD), IntegerEntry(m, eE), IntegerEntry(l, eF), IntegerEntry(r, eG), IntegerEntry(s, eH), IntegerEntry(q, eI), IntegerEntry(t, eJ)]
702+func eM (eN,eO,eP,eQ,eR,eS,eT,eU,eV) = [IntegerEntry(o, eN), IntegerEntry(p, eO), IntegerEntry(q, eP), IntegerEntry(n, eQ), IntegerEntry(m, eR), IntegerEntry(s, eS), IntegerEntry(t, eT), IntegerEntry(r, eU), IntegerEntry(u, eV)]
672703
673704
674-func eK (eL,eM,eN,eO,eP) = [IntegerEntry(B, eL), IntegerEntry(z, eM), IntegerEntry(A, eN), IntegerEntry(C, eO), IntegerEntry(D, eP)]
705+func eW (eX,eY,eZ,fa,fb) = [IntegerEntry(C, eX), IntegerEntry(A, eY), IntegerEntry(B, eZ), IntegerEntry(D, fa), IntegerEntry(E, fb)]
675706
676707
677-func eQ (aF,eR,eS,eT,cu) = [IntegerEntry(aD(e, aF), eR), IntegerEntry(aD(f, aF), eS), IntegerEntry(aD(g, aF), eT), IntegerEntry(aD(h, aF), cu)]
708+func fc (ad,au) = [StringEntry(ab(j, ad), au)]
678709
679710
680-func eU (eV) = {
681- let dQ = ((lastBlock.timestamp / 1000) / 60)
682- let eW = valueOrElse(getInteger(this, v), 0)
683- if ((eW > dQ))
711+func fd (ad,fe,ff,fg,cG) = [IntegerEntry(ab(e, ad), fe), IntegerEntry(ab(f, ad), ff), IntegerEntry(ab(g, ad), fg), IntegerEntry(ab(h, ad), cG)]
712+
713+
714+func fh (fi) = {
715+ let ec = ((lastBlock.timestamp / 1000) / 60)
716+ let fj = valueOrElse(getInteger(this, w), 0)
717+ if ((fj > ec))
684718 then throw("TWAP out-of-order")
685719 else {
686- let dY = if ((eW == 0))
687- then dQ
688- else eW
689- if ((dQ > eW))
720+ let ek = if ((fj == 0))
721+ then ec
722+ else fj
723+ if ((ec > fj))
690724 then {
691- let eX = valueOrElse(getInteger(this, ((w + "_") + toString(eW))), 0)
692- let eY = valueOrElse(getInteger(this, ((x + "_") + toString(eW))), eV)
693- let eZ = (eX + ((dQ - dY) * eY))
694- let dT = aX(aV(valueOrElse(getString(this, u), "")), ao, toString(dQ))
695-[IntegerEntry(aD(w, toString(dQ)), eZ), IntegerEntry(aD(x, toString(dQ)), eV), IntegerEntry(aD(y, toString(dQ)), eW), IntegerEntry(v, dQ), StringEntry(u, aG(dT))]
725+ let fk = valueOrElse(getInteger(this, ((x + "_") + toString(fj))), 0)
726+ let fl = valueOrElse(getInteger(this, ((y + "_") + toString(fj))), fi)
727+ let fm = (fk + ((ec - ek) * fl))
728+ let ef = bg(be(valueOrElse(getString(this, v), "")), aA, toString(ec))
729+[IntegerEntry(ab(x, toString(ec)), fm), IntegerEntry(ab(y, toString(ec)), fi), IntegerEntry(ab(z, toString(ec)), fj), IntegerEntry(w, ec), StringEntry(v, aP(ef))]
696730 }
697731 else {
698- let fa = valueOrElse(getInteger(this, aD(y, toString(dQ))), 0)
699- let eX = valueOrElse(getInteger(this, aD(w, toString(fa))), 0)
700- let eY = valueOrElse(getInteger(this, aD(x, toString(fa))), eV)
701- let eZ = (eX + ((dQ - fa) * eY))
702-[IntegerEntry(aD(w, toString(dQ)), eZ), IntegerEntry(aD(x, toString(dQ)), eV)]
732+ let fn = valueOrElse(getInteger(this, ab(z, toString(ec))), 0)
733+ let fk = valueOrElse(getInteger(this, ab(x, toString(fn))), 0)
734+ let fl = valueOrElse(getInteger(this, ab(y, toString(fn))), fi)
735+ let fm = (fk + ((ec - fn) * fl))
736+[IntegerEntry(ab(x, toString(ec)), fm), IntegerEntry(ab(y, toString(ec)), fi)]
703737 }
704738 }
705739 }
706740
707741
708-func fb (bY,bZ) = [IntegerEntry(E, bY), IntegerEntry(F, bZ)]
742+func fo (ck,cl) = [IntegerEntry(F, ck), IntegerEntry(G, cl)]
709743
710744
711-func fc (bY,bZ,fd,fe,ff,fg,fh) = if (((fg - fh) != fd))
712- then throw(((((("Invalid AMM state data: " + toString(fg)) + " + ") + toString(fh)) + " != ") + toString(fd)))
713- else ((fb(bY, bZ) ++ [IntegerEntry(G, fd), IntegerEntry(J, fe), IntegerEntry(K, ff), IntegerEntry(H, fg), IntegerEntry(I, fh)]) ++ eU(ay(bY, bZ)))
745+func fp (ck,cl,fq,fr,fs,ft,fu) = if (((ft - fu) != fq))
746+ then throw(((((("Invalid AMM state data: " + toString(ft)) + " + ") + toString(fu)) + " != ") + toString(fq)))
747+ else ((fo(ck, cl) ++ [IntegerEntry(H, fq), IntegerEntry(K, fr), IntegerEntry(L, fs), IntegerEntry(I, ft), IntegerEntry(J, fu)]) ++ fh(aK(ck, cl)))
714748
715749
716-func fi (aF) = [DeleteEntry(aD(e, aF)), DeleteEntry(aD(f, aF)), DeleteEntry(aD(g, aF)), DeleteEntry(aD(h, aF)), IntegerEntry(aD(i, aF), lastBlock.timestamp)]
750+func fv (ad) = [DeleteEntry(ab(e, ad)), DeleteEntry(ab(f, ad)), DeleteEntry(ab(g, ad)), DeleteEntry(ab(h, ad)), DeleteEntry(ab(j, ad)), IntegerEntry(ab(i, ad), lastBlock.timestamp)]
717751
718752
719-func fj (aF,fk) = {
720- let fl = assetBalance(this, aa())
721- if ((fk > fl))
722- then throw(((("Unable to withdraw " + toString(fk)) + " from contract balance ") + toString(fl)))
723- else [ScriptTransfer(aF, fk, aa())]
753+func fw (ad,fx) = {
754+ let fy = assetBalance(this, ah())
755+ if ((fx > fy))
756+ then throw(((("Unable to withdraw " + toString(fx)) + " from contract balance ") + toString(fy)))
757+ else [ScriptTransfer(ad, fx, ah())]
724758 }
725759
726760
727-func fm (bB) = if ((0 > bB))
761+func fz (bK) = if ((0 > bK))
728762 then throw("Balance")
729- else [IntegerEntry(d, bB)]
763+ else [IntegerEntry(d, bK)]
730764
731765
732-func fn (bB) = [ScriptTransfer(ac(), bB, aa())]
766+func fA (bK) = [ScriptTransfer(aj(), bK, ah())]
733767
734768
735-func fo (fp,bB) = if (fp)
736- then [Burn(valueOrErrorMessage(bB.payments[1].assetId, "Invalid artifact"), 1)]
769+func fB (fC,bK) = if (fC)
770+ then [Burn(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifact"), 1)]
737771 else nil
738772
739773
740-@Callable(bB)
741-func pause () = if ((bB.caller != Y()))
774+func fD (bT,au) = {
775+ let fE = bS(bT)._1
776+ if ((fE == 0))
777+ then true
778+ else (bX(bT) == au)
779+ }
780+
781+
782+func fF (bT,au) = (bX(bT) == au)
783+
784+
785+func fG (fH,au,bT) = ((((((aa + "_") + fH) + "_") + au) + "_") + bT)
786+
787+
788+func fI (bT) = {
789+ let bZ = bX(bT)
790+ if ((bZ == toBase58String(ah())))
791+ then $Tuple2(0, bZ)
792+ else {
793+ let fJ = fG(toString(this), bZ, bT)
794+ let fK = valueOrElse(getInteger(aq(), fJ), 0)
795+ $Tuple2(fK, bZ)
796+ }
797+ }
798+
799+
800+@Callable(bK)
801+func pause () = if ((bK.caller != af()))
742802 then throw("Invalid togglePause params")
743- else [BooleanEntry(k, true)]
803+ else [BooleanEntry(l, true)]
744804
745805
746806
747-@Callable(bB)
748-func unpause () = if ((bB.caller != Y()))
807+@Callable(bK)
808+func unpause () = if ((bK.caller != af()))
749809 then throw("Invalid togglePause params")
750- else [BooleanEntry(k, false)]
810+ else [BooleanEntry(l, false)]
751811
752812
753813
754-@Callable(bB)
755-func addLiquidity (bT) = if (if ((bB.caller != Y()))
814+@Callable(bK)
815+func addLiquidity (cf) = if (if ((bK.caller != af()))
756816 then true
757- else (0 >= bT))
817+ else (0 >= cf))
758818 then throw("Invalid addLiquidity params")
759819 else {
760- let bY = bh()
761- let bZ = bi()
762- let eV = ay(bY, bZ)
763- let fq = ay(bT, eV)
764- let fr = (bY + bT)
765- let fs = (bZ + fq)
766- fb(fr, fs)
820+ let ck = bq()
821+ let cl = br()
822+ let fi = aK(ck, cl)
823+ let fL = aK(cf, fi)
824+ let fM = (ck + cf)
825+ let fN = (cl + fL)
826+ fo(fM, fN)
767827 }
768828
769829
770830
771-@Callable(bB)
772-func removeLiquidity (bT) = if (if ((bB.caller != Y()))
831+@Callable(bK)
832+func removeLiquidity (cf) = if (if ((bK.caller != af()))
773833 then true
774- else (0 >= bT))
834+ else (0 >= cf))
775835 then throw("Invalid removeLiquidity params")
776836 else {
777- let bY = bh()
778- let bZ = bi()
779- let eV = ay(bY, bZ)
780- let ft = ay(bT, eV)
781- let fr = (bY - bT)
782- let fs = (bZ - ft)
783- fb(fr, fs)
837+ let ck = bq()
838+ let cl = br()
839+ let fi = aK(ck, cl)
840+ let fO = aK(cf, fi)
841+ let fM = (ck - cf)
842+ let fN = (cl - fO)
843+ fo(fM, fN)
784844 }
785845
786846
787847
788-@Callable(bB)
789-func changeSettings (eB,eC,eD,eE,eF,eG,eH,eI,eJ) = if ((bB.caller != Y()))
848+@Callable(bK)
849+func changeSettings (eN,eO,eP,eQ,eR,eS,eT,eU,eV) = if ((bK.caller != af()))
790850 then throw("Invalid changeSettings params")
791- else eA(eB, eC, eD, eE, eF, eG, eH, eI, eJ)
851+ else eM(eN, eO, eP, eQ, eR, eS, eT, eU, eV)
792852
793853
794854
795-@Callable(bB)
796-func initialize (bY,bZ,eE,eB,eC,eD,eF,fu,fv,fw,eG,eH,eI,eJ) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bY))
855+@Callable(bK)
856+func initialize (ck,cl,eQ,eN,eO,eP,eR,fP,fQ,fR,eS,eT,eU,eV) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= ck))
797857 then true
798- else (0 >= bZ))
858+ else (0 >= cl))
799859 then true
800- else (0 >= eE))
860+ else (0 >= eQ))
801861 then true
802- else (0 >= eB))
862+ else (0 >= eN))
803863 then true
804- else (0 >= eC))
864+ else (0 >= eO))
805865 then true
806- else (0 >= eD))
866+ else (0 >= eP))
807867 then true
808- else (0 >= eF))
868+ else (0 >= eR))
809869 then true
810- else (0 >= eG))
870+ else (0 >= eS))
811871 then true
812- else (0 >= eH))
872+ else (0 >= eT))
813873 then true
814- else (0 >= eI))
874+ else (0 >= eU))
815875 then true
816- else (0 >= eJ))
876+ else (0 >= eV))
817877 then true
818- else bP())
878+ else cb())
819879 then throw("Invalid initialize parameters")
820- else ((((fc(bY, bZ, 0, 0, 0, 0, 0) ++ eA(eB, eC, eD, eE, eF, eG, eH, eI, eJ)) ++ eK((lastBlock.timestamp + eE), 0, 0, 0, 0)) ++ fm(0)) ++ [BooleanEntry(j, true), StringEntry(c, fu), StringEntry(a, fv), StringEntry(L, fw)])
880+ else ((((fp(ck, cl, 0, 0, 0, 0, 0) ++ eM(eN, eO, eP, eQ, eR, eS, eT, eU, eV)) ++ eW((lastBlock.timestamp + eQ), 0, 0, 0, 0)) ++ fz(0)) ++ [BooleanEntry(k, true), StringEntry(c, fP), StringEntry(a, fQ), StringEntry(M, fR)])
821881
822882
823883
824-@Callable(bB)
825-func setInitMarginRatio (eB) = if (if ((0 >= eB))
884+@Callable(bK)
885+func setInitMarginRatio (eN) = if (if ((0 >= eN))
826886 then true
827- else !(bP()))
887+ else !(cb()))
828888 then throw("Invalid setInitMarginRatio parameters")
829- else eA(eB, bq(), br(), bn(), bf(), bt(), bu(), bs(), bv())
889+ else eM(eN, bz(), bA(), bw(), bo(), bC(), bD(), bB(), bE())
830890
831891
832892
833-@Callable(bB)
834-func decreasePosition (fk,fx,fy) = if (if (if (if (if ((0 >= fk))
893+@Callable(bK)
894+func decreasePosition (fx,fS,fT) = if (if (if (if (if ((0 >= fx))
835895 then true
836- else !(bP()))
896+ else !(cb()))
837897 then true
838- else !(bC(ay(ar, fx), bg(), true)))
898+ else !(bL(aK(aD, fS), bp(), true)))
839899 then true
840- else !(bO(toString(bB.caller))))
900+ else !(ca(toString(bK.caller))))
841901 then true
842- else bQ())
902+ else cc())
843903 then throw("Invalid decreasePosition parameters")
844904 else {
845- let fz = bJ(toString(bB.caller))
846- let fA = fz._1
847- let fB = fz._2
848- let fC = fz._3
849- let fD = fz._4
850- let fE = if ((fA > 0))
851- then an
852- else am
853- let fF = (fE == am)
854- let fG = aA(fk, fx)
855- let fH = di(toString(bB.caller), au)
856- let fI = fH._1
857- let dh = fH._2
858- let fJ = if ((fI > fG))
905+ let fU = bS(toString(bK.caller))
906+ let fE = fU._1
907+ let fV = fU._2
908+ let fW = fU._3
909+ let fX = fU._4
910+ let fY = if ((fE > 0))
911+ then az
912+ else ay
913+ let fZ = (fY == ay)
914+ let ga = aM(fx, fS)
915+ let gb = du(toString(bK.caller), aG)
916+ let gc = gb._1
917+ let dt = gb._2
918+ let gd = if ((gc > ga))
859919 then {
860- let fK = bX(fF, fG)
861- let dC = fK._1
862- let ca = fK._2
863- let cb = fK._3
864- let dK = fK._4
865- let dL = fK._5
866- let fL = aB(dC)
867- if (if ((fy != 0))
868- then (fy > fL)
920+ let ge = cj(fZ, ga)
921+ let dO = ge._1
922+ let cm = ge._2
923+ let cn = ge._3
924+ let dW = ge._4
925+ let dX = ge._5
926+ let gf = aN(dO)
927+ if (if ((fT != 0))
928+ then (fT > gf)
869929 else false)
870- then throw(((("Too little base asset exchanged, got " + toString(fL)) + " expected ") + toString(fy)))
930+ then throw(((("Too little base asset exchanged, got " + toString(gf)) + " expected ") + toString(fT)))
871931 else {
872- let dH = ay(aA(dh, fL), aB(fA))
873- let fM = co(fA, fB, fD, dH)
874- let cx = fM._1
875- let cy = fM._2
876- let ct = fM._3
877- let dD = fG
878- let fN = (dh - dH)
879- let fO = if ((fA > 0))
880- then ((fI - dD) - fN)
881- else ((fN + fI) - dD)
882- let fP = (fA + dC)
883- $Tuple11(fP, cx, aB(fO), bH(fP), cb, ca, dK, dL, (bl() - fG), (bz() - (if ((fP > 0))
884- then aB(dC)
885- else 0)), (by() - (if ((0 > fP))
886- then aB(dC)
932+ let dT = aK(aM(dt, gf), aN(fE))
933+ let gg = cA(fE, fV, fX, dT)
934+ let cJ = gg._1
935+ let cK = gg._2
936+ let cF = gg._3
937+ let dP = ga
938+ let gh = (dt - dT)
939+ let gi = if ((fE > 0))
940+ then ((gc - dP) - gh)
941+ else ((gh + gc) - dP)
942+ let gj = (fE + dO)
943+ $Tuple11(gj, cJ, aN(gi), bQ(gj), cn, cm, dW, dX, (bu() - ga), (bI() - (if ((gj > 0))
944+ then aN(dO)
945+ else 0)), (bH() - (if ((0 > gj))
946+ then aN(dO)
887947 else 0)))
888948 }
889949 }
890950 else throw("Close position first")
891- let fP = fJ._1
892- let fQ = fJ._2
893- let fR = fJ._3
894- let fS = fJ._4
895- let cb = fJ._5
896- let ca = fJ._6
897- let dK = fJ._7
898- let dL = fJ._8
899- let dO = fJ._9
900- let dM = fJ._10
901- let dN = fJ._11
902- let fT = invoke(ae(), "notifyNotional", [toString(bB.caller), fR], nil)
903- if ((fT == fT))
904- then (eQ(toString(bB.caller), fP, fQ, fR, fS) ++ fc(ca, cb, dK, dL, dO, dM, dN))
951+ let gj = gd._1
952+ let gk = gd._2
953+ let gl = gd._3
954+ let gm = gd._4
955+ let cn = gd._5
956+ let cm = gd._6
957+ let dW = gd._7
958+ let dX = gd._8
959+ let ea = gd._9
960+ let dY = gd._10
961+ let dZ = gd._11
962+ let gn = invoke(al(), "notifyNotional", [toString(bK.caller), gl], nil)
963+ if ((gn == gn))
964+ then (fd(toString(bK.caller), gj, gk, gl, gm) ++ fp(cm, cn, dW, dX, ea, dY, dZ))
905965 else throw("Strict value is not equal to itself.")
906966 }
907967
908968
909969
910-@Callable(bB)
911-func increasePosition (fE,fx,fy,fU) = {
912- let fV = bB.payments[0].amount
913- if (if (if (if (if (if (if ((fE != am))
914- then (fE != an)
970+@Callable(bK)
971+func increasePosition (fY,fS,fT,go) = {
972+ let bT = toString(bK.caller)
973+ let gp = bK.payments[0].amount
974+ let au = bK.payments[0].assetId
975+ let gq = toBase58String(value(au))
976+ let gr = (au == ah())
977+ let gs = at(gq)
978+ if (if (if (if (if (if (if (if ((fY != ay))
979+ then (fY != az)
915980 else false)
916981 then true
917- else (0 >= fV))
982+ else (0 >= gp))
918983 then true
919- else !(bP()))
984+ else !(cb()))
920985 then true
921- else (bB.payments[0].assetId != aa()))
986+ else if (!(gr))
987+ then !(gs)
988+ else false)
922989 then true
923- else !(bC(ay(ar, fx), bg(), true)))
990+ else !(fD(bT, gq)))
924991 then true
925- else bQ())
992+ else !(bL(aK(aD, fS), bp(), true)))
993+ then true
994+ else cc())
926995 then throw("Invalid increasePosition parameters")
927996 else {
928- let bK = toString(bB.caller)
929- let et = bf()
930- let fW = es(bB)
931- let ey = fW._1
932- let ez = fW._2
933- let fX = aA(fV, ey)
934- let fY = invoke(ag(), "acceptPaymentWithLink", [bK, fU], [AttachedPayment(aa(), fX)])
935- if ((fY == fY))
997+ let eF = bo()
998+ let gt = eE(bK)
999+ let eK = gt._1
1000+ let eL = gt._2
1001+ let gu = aM(gp, eK)
1002+ let fx = (gp - gu)
1003+ let gv = if (gs)
9361004 then {
937- let fZ = {
938- let bM = fY
939- if ($isInstanceOf(bM, "Int"))
940- then {
941- let ga = bM
942- ga
1005+ let gw = invoke(aq(), "borrow", [bT], [AttachedPayment(au, fx)])
1006+ if ((gw == gw))
1007+ then {
1008+ let gx = assetBalance(this, ah())
1009+ if ((gx == gx))
1010+ then {
1011+ let gy = invoke(ar(), "swap", [toBase58String(ah()), 0], [AttachedPayment(au, gu)])
1012+ if ((gy == gy))
1013+ then {
1014+ let gz = assetBalance(this, ah())
1015+ if ((gz == gz))
1016+ then {
1017+ let gA = (gz - gx)
1018+ if ((gA == gA))
1019+ then gA
1020+ else throw("Strict value is not equal to itself.")
1021+ }
1022+ else throw("Strict value is not equal to itself.")
1023+ }
1024+ else throw("Strict value is not equal to itself.")
1025+ }
1026+ else throw("Strict value is not equal to itself.")
1027+ }
1028+ else throw("Strict value is not equal to itself.")
1029+ }
1030+ else gu
1031+ if ((gv == gv))
1032+ then {
1033+ let gB = invoke(an(), "acceptPaymentWithLink", [bT, go], [AttachedPayment(ah(), gv)])
1034+ if ((gB == gB))
1035+ then {
1036+ let gC = {
1037+ let bV = gB
1038+ if ($isInstanceOf(bV, "Int"))
1039+ then {
1040+ let gD = bV
1041+ gD
1042+ }
1043+ else throw("Invalid referrerFee")
9431044 }
944- else throw("Invalid referrerFee")
945- }
946- let fk = (fV - fX)
947- let gb = (fX - fZ)
948- let gc = bJ(bK)
949- let fA = gc._1
950- let fB = gc._2
951- let fC = gc._3
952- let fD = gc._4
953- let gd = (fA == 0)
954- let ge = if ((fA > 0))
955- then (fE == am)
956- else (fE == an)
957- let gf = if (!(gd))
958- then ge
959- else false
960- let fF = (fE == am)
961- let gg = if (if (gd)
962- then true
963- else gf)
964- then {
965- let fG = aA(fk, fx)
966- let gh = bX(fF, fG)
967- let cd = gh._1
968- let ca = gh._2
969- let cb = gh._3
970- let dK = gh._4
971- let dL = gh._5
972- if (if ((fy != 0))
973- then (fy > aB(cd))
974- else false)
975- then throw(((("Limit error: " + toString(aB(cd))) + " < ") + toString(fy)))
1045+ let gE = (gv - gC)
1046+ let gF = bS(bT)
1047+ let fE = gF._1
1048+ let fV = gF._2
1049+ let fW = gF._3
1050+ let fX = gF._4
1051+ let gG = (fE == 0)
1052+ let gH = if ((fE > 0))
1053+ then (fY == ay)
1054+ else (fY == az)
1055+ let gI = if (!(gG))
1056+ then gH
1057+ else false
1058+ let fZ = (fY == ay)
1059+ let gJ = if (if (gG)
1060+ then true
1061+ else gI)
1062+ then {
1063+ let ga = aM(fx, fS)
1064+ let gK = cj(fZ, ga)
1065+ let cp = gK._1
1066+ let cm = gK._2
1067+ let cn = gK._3
1068+ let dW = gK._4
1069+ let dX = gK._5
1070+ if (if ((fT != 0))
1071+ then (fT > aN(cp))
1072+ else false)
1073+ then throw(((("Limit error: " + toString(aN(cp))) + " < ") + toString(fT)))
1074+ else {
1075+ let gj = (fE + cp)
1076+ let gL = aK(ga, fS)
1077+ let gM = cA(fE, fV, fX, gL)
1078+ let cJ = gM._1
1079+ let do = gM._2
1080+ let dp = gM._3
1081+ if (!(cZ(cm, cn)))
1082+ then throw("Over max spread limit")
1083+ else $Tuple11(gj, cJ, (fW + ga), bQ(gj), cn, cm, dW, dX, (bu() + ga), (bI() + (if ((gj > 0))
1084+ then aN(cp)
1085+ else 0)), (bH() + (if ((0 > gj))
1086+ then aN(cp)
1087+ else 0)))
1088+ }
1089+ }
9761090 else {
977- let fP = (fA + cd)
978- let gi = ay(fG, fx)
979- let gj = co(fA, fB, fD, gi)
980- let cx = gj._1
981- let dc = gj._2
982- let dd = gj._3
983- if (!(cN(ca, cb)))
984- then throw("Over max spread limit")
985- else $Tuple11(fP, cx, (fC + fG), bH(fP), cb, ca, dK, dL, (bl() + fG), (bz() + (if ((fP > 0))
986- then aB(cd)
987- else 0)), (by() + (if ((0 > fP))
988- then aB(cd)
989- else 0)))
1091+ let ga = aM(fx, fS)
1092+ let gN = du(toString(bK.caller), aG)
1093+ let gc = gN._1
1094+ let dt = gN._2
1095+ if ((gc > ga))
1096+ then throw("Use decreasePosition to decrease position size")
1097+ else throw("Close position first")
9901098 }
991- }
992- else {
993- let fG = aA(fk, fx)
994- let gk = di(toString(bB.caller), au)
995- let fI = gk._1
996- let dh = gk._2
997- if ((fI > fG))
998- then throw("Use decreasePosition to decrease position size")
999- else throw("Close position first")
1000- }
1001- let fP = gg._1
1002- let fQ = gg._2
1003- let fR = gg._3
1004- let fS = gg._4
1005- let cb = gg._5
1006- let ca = gg._6
1007- let dK = gg._7
1008- let dL = gg._8
1009- let dO = gg._9
1010- let dM = gg._10
1011- let dN = gg._11
1012- let gl = (gb / 2)
1013- let gm = (gb - gl)
1014- let gn = invoke(ah(), "deposit", nil, [AttachedPayment(aa(), fk)])
1015- if ((gn == gn))
1016- then {
1017- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), gm)])
1018- if ((go == go))
1099+ let gj = gJ._1
1100+ let gk = gJ._2
1101+ let gl = gJ._3
1102+ let gm = gJ._4
1103+ let cn = gJ._5
1104+ let cm = gJ._6
1105+ let dW = gJ._7
1106+ let dX = gJ._8
1107+ let ea = gJ._9
1108+ let dY = gJ._10
1109+ let dZ = gJ._11
1110+ let gO = (gE / 2)
1111+ let gP = (gE - gO)
1112+ let gQ = invoke(ao(), "deposit", nil, [AttachedPayment(ah(), fx)])
1113+ if ((gQ == gQ))
10191114 then {
1020- let gp = invoke(ae(), "notifyFees", [bK, gb], nil)
1021- if ((gp == gp))
1115+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), gP)])
1116+ if ((gR == gR))
10221117 then {
1023- let fT = invoke(ae(), "notifyNotional", [bK, fR], nil)
1024- if ((fT == fT))
1025- then ((((eQ(bK, fP, fQ, fR, fS) ++ fc(ca, cb, dK, dL, dO, dM, dN)) ++ fn(gl)) ++ fm((be() + fk))) ++ fo(ez, bB))
1118+ let gS = invoke(al(), "notifyFees", [bT, gE], nil)
1119+ if ((gS == gS))
1120+ then {
1121+ let gn = invoke(al(), "notifyNotional", [bT, gl], nil)
1122+ if ((gn == gn))
1123+ then (((((fd(bT, gj, gk, gl, gm) ++ fc(bT, gq)) ++ fp(cm, cn, dW, dX, ea, dY, dZ)) ++ fA(gO)) ++ fz((bn() + fx))) ++ fB(eL, bK))
1124+ else throw("Strict value is not equal to itself.")
1125+ }
10261126 else throw("Strict value is not equal to itself.")
10271127 }
10281128 else throw("Strict value is not equal to itself.")
10291129 }
10301130 else throw("Strict value is not equal to itself.")
10311131 }
10321132 else throw("Strict value is not equal to itself.")
10331133 }
10341134 else throw("Strict value is not equal to itself.")
10351135 }
10361136 }
10371137
10381138
10391139
1040-@Callable(bB)
1140+@Callable(bK)
10411141 func addMargin () = {
1042- let fV = bB.payments[0].amount
1043- if (if (if (if ((bB.payments[0].assetId != aa()))
1142+ let bT = toString(bK.caller)
1143+ let gp = bK.payments[0].amount
1144+ let au = bK.payments[0].assetId
1145+ let gq = toBase58String(value(au))
1146+ let gr = (au == ah())
1147+ let gs = at(gq)
1148+ if (if (if (if (if (if (!(gr))
1149+ then !(gs)
1150+ else false)
10441151 then true
1045- else !(bO(toString(bB.caller))))
1152+ else !(ca(toString(bK.caller))))
10461153 then true
1047- else !(bP()))
1154+ else !(fF(bT, gq)))
10481155 then true
1049- else bQ())
1156+ else !(cb()))
1157+ then true
1158+ else cc())
10501159 then throw("Invalid addMargin parameters")
10511160 else {
1052- let bK = toString(bB.caller)
1053- let gq = es(bB)
1054- let ey = gq._1
1055- let ez = gq._2
1056- let fX = aA(fV, ey)
1057- let fY = invoke(ag(), "acceptPayment", [bK], [AttachedPayment(aa(), fX)])
1058- if ((fY == fY))
1161+ let gT = eE(bK)
1162+ let eK = gT._1
1163+ let eL = gT._2
1164+ let gu = aM(gp, eK)
1165+ let fx = (gp - gu)
1166+ let gv = if (gs)
10591167 then {
1060- let fZ = {
1061- let bM = fY
1062- if ($isInstanceOf(bM, "Int"))
1063- then {
1064- let ga = bM
1065- ga
1168+ let gw = invoke(aq(), "borrow", [bT], [AttachedPayment(au, fx)])
1169+ if ((gw == gw))
1170+ then {
1171+ let gx = assetBalance(this, ah())
1172+ if ((gx == gx))
1173+ then {
1174+ let gy = invoke(ar(), "swap", [toBase58String(ah()), 0], [AttachedPayment(au, gu)])
1175+ if ((gy == gy))
1176+ then {
1177+ let gz = assetBalance(this, ah())
1178+ if ((gz == gz))
1179+ then {
1180+ let gA = (gz - gx)
1181+ if ((gA == gA))
1182+ then gA
1183+ else throw("Strict value is not equal to itself.")
1184+ }
1185+ else throw("Strict value is not equal to itself.")
1186+ }
1187+ else throw("Strict value is not equal to itself.")
1188+ }
1189+ else throw("Strict value is not equal to itself.")
1190+ }
1191+ else throw("Strict value is not equal to itself.")
1192+ }
1193+ else gu
1194+ if ((gv == gv))
1195+ then {
1196+ let gB = invoke(an(), "acceptPayment", [bT], [AttachedPayment(ah(), gv)])
1197+ if ((gB == gB))
1198+ then {
1199+ let gC = {
1200+ let bV = gB
1201+ if ($isInstanceOf(bV, "Int"))
1202+ then {
1203+ let gD = bV
1204+ gD
1205+ }
1206+ else throw("Invalid referrerFee")
10661207 }
1067- else throw("Invalid referrerFee")
1068- }
1069- let gb = (fX - fZ)
1070- let fk = (fV - fX)
1071- let gr = bJ(bK)
1072- let fA = gr._1
1073- let fB = gr._2
1074- let fC = gr._3
1075- let fD = gr._4
1076- let gl = (gb / 2)
1077- let gm = (gb - gl)
1078- let gn = invoke(ah(), "deposit", nil, [AttachedPayment(aa(), fk)])
1079- if ((gn == gn))
1080- then {
1081- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), gm)])
1082- if ((go == go))
1208+ let gE = (gv - gC)
1209+ let gU = bS(bT)
1210+ let fE = gU._1
1211+ let fV = gU._2
1212+ let fW = gU._3
1213+ let fX = gU._4
1214+ let gO = (gE / 2)
1215+ let gP = (gE - gO)
1216+ let gQ = invoke(ao(), "deposit", nil, [AttachedPayment(ah(), fx)])
1217+ if ((gQ == gQ))
10831218 then {
1084- let gp = invoke(ae(), "notifyFees", [bK, gb], nil)
1085- if ((gp == gp))
1086- then (((eQ(bK, fA, (fB + fk), fC, fD) ++ fn(gl)) ++ fm((be() + fk))) ++ fo(ez, bB))
1219+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), gP)])
1220+ if ((gR == gR))
1221+ then {
1222+ let gS = invoke(al(), "notifyFees", [bT, gE], nil)
1223+ if ((gS == gS))
1224+ then (((fd(bT, fE, (fV + fx), fW, fX) ++ fA(gO)) ++ fz((bn() + fx))) ++ fB(eL, bK))
1225+ else throw("Strict value is not equal to itself.")
1226+ }
10871227 else throw("Strict value is not equal to itself.")
10881228 }
10891229 else throw("Strict value is not equal to itself.")
10901230 }
10911231 else throw("Strict value is not equal to itself.")
10921232 }
10931233 else throw("Strict value is not equal to itself.")
10941234 }
10951235 }
10961236
10971237
10981238
1099-@Callable(bB)
1100-func removeMargin (fk) = if (if (if (if ((0 >= fk))
1101- then true
1102- else !(bO(toString(bB.caller))))
1103- then true
1104- else !(bP()))
1105- then true
1106- else bQ())
1107- then throw("Invalid removeMargin parameters")
1108- else {
1109- let gs = bJ(toString(bB.caller))
1110- let fA = gs._1
1111- let fB = gs._2
1112- let fC = gs._3
1113- let fD = gs._4
1114- let gt = -(fk)
1115- let gu = co(fA, fB, fD, gt)
1116- let cx = gu._1
1117- let cy = gu._2
1118- if ((cy != 0))
1119- then throw("Invalid removed margin amount")
1120- else {
1121- let gv = dn(cx, cy, fC)
1122- if (!(bC(gv, bg(), true)))
1123- then throw(((("Too much margin removed: " + toString(gv)) + " < ") + toString(bg())))
1124- else {
1125- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), fk], nil)
1126- if ((gw == gw))
1127- then ((eQ(toString(bB.caller), fA, cx, fC, bH(fA)) ++ fj(bB.caller, fk)) ++ fm((be() - fk)))
1128- else throw("Strict value is not equal to itself.")
1129- }
1130- }
1131- }
1239+@Callable(bK)
1240+func removeMargin (fx) = {
1241+ let bT = toString(bK.caller)
1242+ if (if (if (if ((0 >= fx))
1243+ then true
1244+ else !(ca(bT)))
1245+ then true
1246+ else !(cb()))
1247+ then true
1248+ else cc())
1249+ then throw("Invalid removeMargin parameters")
1250+ else {
1251+ let gV = bS(bT)
1252+ let fE = gV._1
1253+ let fV = gV._2
1254+ let fW = gV._3
1255+ let fX = gV._4
1256+ let gW = -(fx)
1257+ let gX = cA(fE, fV, fX, gW)
1258+ let cJ = gX._1
1259+ let cK = gX._2
1260+ if ((cK != 0))
1261+ then throw("Invalid removed margin amount")
1262+ else {
1263+ let gY = dz(cJ, cK, fW)
1264+ if (!(bL(gY, bp(), true)))
1265+ then throw(((("Too much margin removed: " + toString(gY)) + " < ") + toString(bp())))
1266+ else {
1267+ let gZ = toBase58String(ah())
1268+ let ha = fI(bT)
1269+ let hb = ha._1
1270+ let hc = ha._2
1271+ let hd = if ((fx > hb))
1272+ then hb
1273+ else fx
1274+ let he = if ((hb > fx))
1275+ then 0
1276+ else (fx - hb)
1277+ let hf = (hb - hd)
1278+ let hg = if ((hf > 0))
1279+ then nil
1280+ else fc(bT, gZ)
1281+ let hh = if (((hd + he) != fx))
1282+ then throw(((((("toRepay=" + toString(hd)) + " + toWithdraw=") + toString(he)) + " != ") + toString(fx)))
1283+ else nil
1284+ if ((hh == hh))
1285+ then {
1286+ let hi = invoke(ao(), "withdraw", [gZ, fx], nil)
1287+ if ((hi == hi))
1288+ then {
1289+ let hj = if ((hd > 0))
1290+ then {
1291+ let hk = invoke(aq(), "repay", [bT, hc], [AttachedPayment(ah(), hd)])
1292+ if ((hk == hk))
1293+ then [ScriptTransfer(bK.caller, hd, fromBase58String(hc))]
1294+ else throw("Strict value is not equal to itself.")
1295+ }
1296+ else nil
1297+ if ((hj == hj))
1298+ then (fd(bT, fE, cJ, fW, bQ(fE)) ++ (if ((he > 0))
1299+ then fw(bK.caller, he)
1300+ else (((nil ++ fz((bn() - fx))) ++ hg) ++ hj)))
1301+ else throw("Strict value is not equal to itself.")
1302+ }
1303+ else throw("Strict value is not equal to itself.")
1304+ }
1305+ else throw("Strict value is not equal to itself.")
1306+ }
1307+ }
1308+ }
1309+ }
11321310
11331311
11341312
1135-@Callable(bB)
1313+@Callable(bK)
11361314 func closePosition () = {
1137- let gx = bA(bB)
1138- let gy = valueOrErrorMessage(addressFromString(gx), "Invalid caller")
1139- if (if (if (!(bO(gx)))
1315+ let bT = bJ(bK)
1316+ let hl = valueOrErrorMessage(addressFromString(bT), "Invalid caller")
1317+ if (if (if (!(ca(bT)))
11401318 then true
1141- else !(bP()))
1319+ else !(cb()))
11421320 then true
1143- else bQ())
1321+ else cc())
11441322 then throw("Invalid closePosition parameters")
11451323 else {
1146- let gz = dE(gx, true)
1147- let dc = gz._1
1148- let gA = gz._2
1149- let dH = gz._3
1150- let dI = gz._4
1151- let ca = gz._5
1152- let cb = gz._6
1153- let dK = gz._7
1154- let dL = gz._8
1155- let dO = gz._9
1156- let dd = gz._10
1157- let dM = gz._11
1158- let dN = gz._12
1159- if ((gA > 0))
1324+ let hm = dQ(bT, true)
1325+ let do = hm._1
1326+ let hn = hm._2
1327+ let dT = hm._3
1328+ let dU = hm._4
1329+ let cm = hm._5
1330+ let cn = hm._6
1331+ let dW = hm._7
1332+ let dX = hm._8
1333+ let ea = hm._9
1334+ let dp = hm._10
1335+ let dY = hm._11
1336+ let dZ = hm._12
1337+ if ((hn > 0))
11601338 then throw("Unable to close position with bad debt")
11611339 else {
1162- let gB = aB(dI)
1163- let gC = (be() - gB)
1164- let gD = if ((0 > gC))
1165- then $Tuple2(0, aB(gC))
1166- else $Tuple2(gC, 0)
1167- let gE = gD._1
1168- let gF = gD._2
1169- let ga = if ((gF > 0))
1340+ let ho = aN(dU)
1341+ let hp = (bn() - ho)
1342+ let hq = if ((0 > hp))
1343+ then $Tuple2(0, aN(hp))
1344+ else $Tuple2(hp, 0)
1345+ let hr = hq._1
1346+ let hs = hq._2
1347+ let gD = if ((hs > 0))
11701348 then {
1171- let gG = invoke(ad(), "withdraw", [gF], nil)
1172- if ((gG == gG))
1349+ let ht = invoke(ak(), "withdraw", [hs], nil)
1350+ if ((ht == ht))
11731351 then nil
11741352 else throw("Strict value is not equal to itself.")
11751353 }
11761354 else nil
1177- if ((ga == ga))
1355+ if ((gD == gD))
11781356 then {
1179- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), (gB - gF)], nil)
1180- if ((gw == gw))
1357+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), (ho - hs)], nil)
1358+ if ((hu == hu))
11811359 then {
1182- let fT = invoke(ae(), "notifyNotional", [gx, 0], nil)
1183- if ((fT == fT))
1184- then (((fi(gx) ++ fc(ca, cb, dK, dL, dO, dM, dN)) ++ fj(gy, gB)) ++ fm(gE))
1360+ let hv = fI(bT)
1361+ let hb = hv._1
1362+ let hc = hv._2
1363+ let hw = if ((hb > 0))
1364+ then if ((ho >= hb))
1365+ then {
1366+ let hk = invoke(aq(), "repay", [bT, hc], [AttachedPayment(ah(), hb)])
1367+ if ((hk == hk))
1368+ then $Tuple2([ScriptTransfer(hl, hb, fromBase58String(hc))], (ho - hb))
1369+ else throw("Strict value is not equal to itself.")
1370+ }
1371+ else {
1372+ let hx = invoke(aq(), "realizePartiallyAndClose", [bT, hc], [AttachedPayment(ah(), ho)])
1373+ if ((hx == hx))
1374+ then $Tuple2([ScriptTransfer(hl, ho, fromBase58String(hc))], 0)
1375+ else throw("Strict value is not equal to itself.")
1376+ }
1377+ else $Tuple2(nil, ho)
1378+ if ((hw == hw))
1379+ then {
1380+ let hy = hw._2
1381+ let hz = hw._1
1382+ let gn = invoke(al(), "notifyNotional", [bT, 0], nil)
1383+ if ((gn == gn))
1384+ then ((fv(bT) ++ fp(cm, cn, dW, dX, ea, dY, dZ)) ++ (if ((hy > 0))
1385+ then fw(hl, hy)
1386+ else ((nil ++ fz(hr)) ++ hz)))
1387+ else throw("Strict value is not equal to itself.")
1388+ }
11851389 else throw("Strict value is not equal to itself.")
11861390 }
11871391 else throw("Strict value is not equal to itself.")
11881392 }
11891393 else throw("Strict value is not equal to itself.")
11901394 }
11911395 }
11921396 }
11931397
11941398
11951399
1196-@Callable(bB)
1197-func liquidate (bK) = {
1198- let gH = dr(bK, au)
1199- let gv = if (cT())
1400+@Callable(bK)
1401+func liquidate (bT) = {
1402+ let hA = dD(bT, aG)
1403+ let gY = if (df())
12001404 then {
1201- let gI = dr(bK, av)
1202- aC(gH, gI)
1405+ let hB = dD(bT, aH)
1406+ aO(hA, hB)
12031407 }
1204- else gH
1205- if (if (if (if (!(bC(gv, bq(), false)))
1408+ else hA
1409+ if (if (if (if (!(bL(gY, bz(), false)))
12061410 then true
1207- else !(bO(bK)))
1411+ else !(ca(bT)))
12081412 then true
1209- else !(bP()))
1413+ else !(cb()))
12101414 then true
1211- else bQ())
1415+ else cc())
12121416 then throw("Unable to liquidate")
1213- else if (if (if ((gH > br()))
1214- then (bs() > 0)
1417+ else if (if (if ((hA > bA()))
1418+ then (bB() > 0)
12151419 else false)
1216- then (ar > bs())
1420+ then (aD > bB())
12171421 else false)
12181422 then {
1219- let gJ = bJ(bK)
1220- let fA = gJ._1
1221- let fB = gJ._2
1222- let fC = gJ._3
1223- let fD = gJ._4
1224- let fE = if ((fA > 0))
1225- then an
1226- else am
1227- let fF = (fE == am)
1228- let dD = dx(bK, fA)
1229- let gK = di(bK, au)
1230- let fI = gK._1
1231- let dh = gK._2
1232- let gL = bX(fF, dD)
1233- let dC = gL._1
1234- let ca = gL._2
1235- let cb = gL._3
1236- let dK = gL._4
1237- let dL = gL._5
1238- let dH = ay(aA(dh, aB(dC)), aB(fA))
1239- let gM = co(fA, fB, fD, dH)
1240- let cx = gM._1
1241- let cy = gM._2
1242- let ct = gM._3
1243- let fN = (dh - dH)
1244- let fO = if ((fA > 0))
1245- then ((fI - dD) - fN)
1246- else ((fN + fI) - dD)
1247- let gN = aA(dD, br())
1248- let gO = (gN / 2)
1249- let gm = (gN - gO)
1250- let gP = (cx - gN)
1251- let fP = (fA + dC)
1252- let fR = aB(fO)
1253- let gQ = bH(fP)
1254- let dO = (bl() - dD)
1255- let gC = (be() - gN)
1256- let gR = if ((0 > gC))
1257- then $Tuple2(0, aB(gC))
1258- else $Tuple2(gC, 0)
1259- let gS = gR._1
1260- let gT = gR._2
1261- let ga = if ((gT > 0))
1423+ let hC = bS(bT)
1424+ let fE = hC._1
1425+ let fV = hC._2
1426+ let fW = hC._3
1427+ let fX = hC._4
1428+ let fY = if ((fE > 0))
1429+ then az
1430+ else ay
1431+ let fZ = (fY == ay)
1432+ let dP = dJ(bT, fE)
1433+ let hD = du(bT, aG)
1434+ let gc = hD._1
1435+ let dt = hD._2
1436+ let hE = cj(fZ, dP)
1437+ let dO = hE._1
1438+ let cm = hE._2
1439+ let cn = hE._3
1440+ let dW = hE._4
1441+ let dX = hE._5
1442+ let hF = aK(aN(dO), aN(fE))
1443+ let dT = aM(dt, hF)
1444+ let hG = cA(fE, fV, fX, dT)
1445+ let cJ = hG._1
1446+ let cK = hG._2
1447+ let cF = hG._3
1448+ let gh = (dt - dT)
1449+ let gi = if ((fE > 0))
1450+ then ((gc - dP) - gh)
1451+ else ((gh + gc) - dP)
1452+ let hH = aM(dP, bA())
1453+ let hI = (hH / 2)
1454+ let gP = (hH - hI)
1455+ let hJ = (cJ - hH)
1456+ let gj = (fE + dO)
1457+ let gl = aN(gi)
1458+ let hK = bQ(gj)
1459+ let ea = (bu() - dP)
1460+ let hp = (bn() - hH)
1461+ let hL = if ((0 > hp))
1462+ then $Tuple2(0, aN(hp))
1463+ else $Tuple2(hp, 0)
1464+ let hM = hL._1
1465+ let hN = hL._2
1466+ let hO = fI(bT)
1467+ let hb = hO._1
1468+ let hc = hO._2
1469+ let hP = if ((hb > 0))
12621470 then {
1263- let gG = invoke(ad(), "withdraw", [gT], nil)
1264- if ((gG == gG))
1471+ let hQ = aM(hb, hF)
1472+ let hx = invoke(aq(), "realizePartially", [bT, hc, hQ], nil)
1473+ if ((hx == hx))
12651474 then nil
12661475 else throw("Strict value is not equal to itself.")
12671476 }
12681477 else nil
1269- if ((ga == ga))
1478+ if ((hP == hP))
12701479 then {
1271- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), (gN - gT)], nil)
1272- if ((gw == gw))
1480+ let gD = if ((hN > 0))
12731481 then {
1274- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), gm)])
1275- if ((go == go))
1482+ let ht = invoke(ak(), "withdraw", [hN], nil)
1483+ if ((ht == ht))
1484+ then nil
1485+ else throw("Strict value is not equal to itself.")
1486+ }
1487+ else nil
1488+ if ((gD == gD))
1489+ then {
1490+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), (hH - hN)], nil)
1491+ if ((hu == hu))
12761492 then {
1277- let fT = invoke(ae(), "notifyNotional", [bK, fR], nil)
1278- if ((fT == fT))
1279- then (((eQ(bK, fP, gP, fR, gQ) ++ fc(ca, cb, dK, dL, dO, (bz() - (if ((fP > 0))
1280- then aB(dC)
1281- else 0)), (by() - (if ((0 > fP))
1282- then aB(dC)
1283- else 0)))) ++ fj(bB.caller, gO)) ++ fm(gS))
1493+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), gP)])
1494+ if ((gR == gR))
1495+ then {
1496+ let gn = invoke(al(), "notifyNotional", [bT, gl], nil)
1497+ if ((gn == gn))
1498+ then (((fd(bT, gj, hJ, gl, hK) ++ fp(cm, cn, dW, dX, ea, (bI() - (if ((gj > 0))
1499+ then aN(dO)
1500+ else 0)), (bH() - (if ((0 > gj))
1501+ then aN(dO)
1502+ else 0)))) ++ fw(bK.caller, hI)) ++ fz(hM))
1503+ else throw("Strict value is not equal to itself.")
1504+ }
12841505 else throw("Strict value is not equal to itself.")
12851506 }
12861507 else throw("Strict value is not equal to itself.")
12871508 }
12881509 else throw("Strict value is not equal to itself.")
12891510 }
12901511 else throw("Strict value is not equal to itself.")
12911512 }
12921513 else {
1293- let gU = dE(bK, false)
1294- let dc = gU._1
1295- let cy = gU._2
1296- let dd = gU._3
1297- let de = gU._4
1298- let ca = gU._5
1299- let cb = gU._6
1300- let dK = gU._7
1301- let dL = gU._8
1302- let dO = gU._9
1303- let dD = gU._10
1304- let dM = gU._11
1305- let dN = gU._12
1306- let gN = aA(dD, br())
1307- let gO = (gN / 2)
1308- let gm = (gN - gO)
1309- let gC = (be() - gN)
1310- let gV = if ((0 > gC))
1311- then $Tuple2(0, aB(gC))
1312- else $Tuple2(gC, 0)
1313- let gS = gV._1
1314- let gT = gV._2
1315- let ga = if ((gT > 0))
1514+ let hR = dQ(bT, false)
1515+ let do = hR._1
1516+ let cK = hR._2
1517+ let dp = hR._3
1518+ let dq = hR._4
1519+ let cm = hR._5
1520+ let cn = hR._6
1521+ let dW = hR._7
1522+ let dX = hR._8
1523+ let ea = hR._9
1524+ let dP = hR._10
1525+ let dY = hR._11
1526+ let dZ = hR._12
1527+ let hH = aM(dP, bA())
1528+ let hI = (hH / 2)
1529+ let gP = (hH - hI)
1530+ let hp = (bn() - hH)
1531+ let hS = if ((0 > hp))
1532+ then $Tuple2(0, aN(hp))
1533+ else $Tuple2(hp, 0)
1534+ let hM = hS._1
1535+ let hN = hS._2
1536+ let hT = fI(bT)
1537+ let hb = hT._1
1538+ let hc = hT._2
1539+ let hP = if ((hb > 0))
13161540 then {
1317- let gG = invoke(ad(), "withdraw", [gT], nil)
1318- if ((gG == gG))
1541+ let hx = invoke(aq(), "realizePartiallyAndClose", [bT, hc], nil)
1542+ if ((hx == hx))
13191543 then nil
13201544 else throw("Strict value is not equal to itself.")
13211545 }
13221546 else nil
1323- if ((ga == ga))
1547+ if ((hP == hP))
13241548 then {
1325- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), (gN - gT)], nil)
1326- if ((gw == gw))
1549+ let gD = if ((hN > 0))
13271550 then {
1328- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), gm)])
1329- if ((go == go))
1551+ let ht = invoke(ak(), "withdraw", [hN], nil)
1552+ if ((ht == ht))
1553+ then nil
1554+ else throw("Strict value is not equal to itself.")
1555+ }
1556+ else nil
1557+ if ((gD == gD))
1558+ then {
1559+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), (hH - hN)], nil)
1560+ if ((hu == hu))
13301561 then {
1331- let fT = invoke(ae(), "notifyNotional", [bK, 0], nil)
1332- if ((fT == fT))
1333- then (((fi(bK) ++ fc(ca, cb, dK, dL, dO, dM, dN)) ++ fj(bB.caller, gO)) ++ fm(gS))
1562+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), gP)])
1563+ if ((gR == gR))
1564+ then {
1565+ let gn = invoke(al(), "notifyNotional", [bT, 0], nil)
1566+ if ((gn == gn))
1567+ then (((fv(bT) ++ fp(cm, cn, dW, dX, ea, dY, dZ)) ++ fw(bK.caller, hI)) ++ fz(hM))
1568+ else throw("Strict value is not equal to itself.")
1569+ }
13341570 else throw("Strict value is not equal to itself.")
13351571 }
13361572 else throw("Strict value is not equal to itself.")
13371573 }
13381574 else throw("Strict value is not equal to itself.")
13391575 }
13401576 else throw("Strict value is not equal to itself.")
13411577 }
13421578 }
13431579
13441580
13451581
1346-@Callable(bB)
1582+@Callable(bK)
13471583 func payFunding () = {
1348- let gW = bm()
1349- if (if (if ((gW > lastBlock.timestamp))
1584+ let hU = bv()
1585+ if (if (if ((hU > lastBlock.timestamp))
13501586 then true
1351- else !(bP()))
1587+ else !(cb()))
13521588 then true
1353- else bQ())
1354- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gW)))
1589+ else cc())
1590+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(hU)))
13551591 else {
1356- let en = cI()
1357- let gX = em()
1358- let eq = gX._1
1359- let er = gX._2
1360- eK((gW + bp()), (bw() + er), (bx() + eq), ay(er, en), ay(eq, en))
1592+ let ez = cU()
1593+ let hV = ey()
1594+ let eC = hV._1
1595+ let eD = hV._2
1596+ eW((hU + by()), (bF() + eD), (bG() + eC), aK(eD, ez), aK(eC, ez))
13611597 }
13621598 }
13631599
13641600
13651601
1366-@Callable(bB)
1367-func forceMoveAsset (bK,fk) = if (if ((addressFromPublicKey(Z()) != bB.caller))
1602+@Callable(bK)
1603+func forceMoveAsset (bT,fx) = if (if ((addressFromPublicKey(ag()) != bK.caller))
13681604 then true
1369- else (0 > fk))
1605+ else (0 > fx))
13701606 then throw("Invalid forceMoveAsset parameters")
13711607 else {
1372- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), fk], nil)
1373- if ((gw == gw))
1374- then (fj(addressFromStringValue(bK), fk) ++ fm((be() - fk)))
1608+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), fx], nil)
1609+ if ((hu == hu))
1610+ then (fw(addressFromStringValue(bT), fx) ++ fz((bn() - fx)))
13751611 else throw("Strict value is not equal to itself.")
13761612 }
13771613
13781614
13791615
1380-@Callable(bB)
1381-func adjustPeg (eg) = if (if ((addressFromPublicKey(Z()) != bB.caller))
1616+@Callable(bK)
1617+func adjustPeg (es) = if (if ((addressFromPublicKey(ag()) != bK.caller))
13821618 then true
1383- else (0 > eg))
1619+ else (0 > es))
13841620 then throw("Invalid adjustPeg parameters")
13851621 else {
1386- let gY = ef(eg)
1387- let ek = gY._1
1388- let gZ = gY._2
1389- if ((gZ == 0))
1622+ let hW = er(es)
1623+ let ew = hW._1
1624+ let hX = hW._2
1625+ if ((hX == 0))
13901626 then throw("Nothing to adjust")
1391- else if ((gZ > 0))
1392- then fb(ek, bi())
1627+ else if ((hX > 0))
1628+ then fo(ew, br())
13931629 else {
1394- let gw = invoke(ah(), "withdraw", [toBase58String(aa()), aB(gZ)], nil)
1395- if ((gw == gw))
1630+ let hu = invoke(ao(), "withdraw", [toBase58String(ah()), aN(hX)], nil)
1631+ if ((hu == hu))
13961632 then {
1397- let go = invoke(ad(), "deposit", nil, [AttachedPayment(aa(), aB(gZ))])
1398- if ((go == go))
1399- then (fm((be() - aB(gZ))) ++ fb(ek, bi()))
1633+ let gR = invoke(ak(), "deposit", nil, [AttachedPayment(ah(), aN(hX))])
1634+ if ((gR == gR))
1635+ then (fz((bn() - aN(hX))) ++ fo(ew, br()))
14001636 else throw("Strict value is not equal to itself.")
14011637 }
14021638 else throw("Strict value is not equal to itself.")
14031639 }
14041640 }
14051641
14061642
14071643
1408-@Callable(bB)
1644+@Callable(bK)
14091645 func migrateLiquidity () = {
1410- let ha = be()
1411- if ((ha > 0))
1646+ let hY = bn()
1647+ if ((hY > 0))
14121648 then {
1413- let gw = invoke(ab(), "unlockNeutrino", [ha, toBase58String(aa())], nil)
1414- if ((gw == gw))
1649+ let hu = invoke(ai(), "unlockNeutrino", [hY, toBase58String(ah())], nil)
1650+ if ((hu == hu))
14151651 then {
1416- let gn = invoke(ah(), "deposit", nil, [AttachedPayment(aa(), ha)])
1417- if ((gn == gn))
1652+ let gQ = invoke(ao(), "deposit", nil, [AttachedPayment(ah(), hY)])
1653+ if ((gQ == gQ))
14181654 then nil
14191655 else throw("Strict value is not equal to itself.")
14201656 }
14211657 else throw("Strict value is not equal to itself.")
14221658 }
14231659 else nil
14241660 }
14251661
14261662
14271663
1428-@Callable(bB)
1429-func v_get (bK) = {
1430- let hb = dE(bK, false)
1431- let dc = hb._1
1432- let dd = hb._2
1433- let de = hb._3
1434- let hc = hb._4
1435- throw((((aw(dd) + aw(de)) + aw(hc)) + aw(dw(bK))))
1664+@Callable(bK)
1665+func v_get (bT) = {
1666+ let hZ = dQ(bT, false)
1667+ let do = hZ._1
1668+ let dp = hZ._2
1669+ let dq = hZ._3
1670+ let ia = hZ._4
1671+ throw((((aI(dp) + aI(dq)) + aI(ia)) + aI(dI(bT))))
14361672 }
14371673
14381674
14391675
1440-@Callable(bB)
1441-func view_calcRemainMarginWithFundingPayment (bK) = {
1442- let hd = bJ(bK)
1443- let bN = hd._1
1444- let dk = hd._2
1445- let dt = hd._3
1446- let dm = hd._4
1447- let he = di(bK, au)
1448- let cZ = he._1
1449- let dh = he._2
1450- let hf = co(bN, dk, dm, dh)
1451- let cx = hf._1
1452- let cy = hf._2
1453- let ct = hf._3
1454- throw((((((aw(cx) + aw(ct)) + aw(dw(bK))) + aw(dh)) + aw(cy)) + aw(cZ)))
1676+@Callable(bK)
1677+func view_calcRemainMarginWithFundingPayment (bT) = {
1678+ let ib = bS(bT)
1679+ let bW = ib._1
1680+ let dw = ib._2
1681+ let dF = ib._3
1682+ let dy = ib._4
1683+ let ic = du(bT, aG)
1684+ let dl = ic._1
1685+ let dt = ic._2
1686+ let id = cA(bW, dw, dy, dt)
1687+ let cJ = id._1
1688+ let cK = id._2
1689+ let cF = id._3
1690+ throw((((((aI(cJ) + aI(cF)) + aI(dI(bT))) + aI(dt)) + aI(cK)) + aI(dl)))
14551691 }
14561692
14571693
14581694
1459-@Callable(bB)
1460-func view_getPegAdjustCost (eg) = {
1461- let el = ef(eg)
1462- throw(toString(el._2))
1695+@Callable(bK)
1696+func view_getPegAdjustCost (es) = {
1697+ let ex = er(es)
1698+ throw(toString(ex._2))
14631699 }
14641700
14651701
14661702
1467-@Callable(bB)
1703+@Callable(bK)
14681704 func view_getFunding () = {
1469- let en = cI()
1470- let hg = em()
1471- let eq = hg._1
1472- let er = hg._2
1473- let hh = ay(er, en)
1474- let hi = ay(eq, en)
1475- throw((((aw(hh) + aw(hi)) + aw(dP())) + aw(cI())))
1705+ let ez = cU()
1706+ let ie = ey()
1707+ let eC = ie._1
1708+ let eD = ie._2
1709+ let if = aK(eD, ez)
1710+ let ig = aK(eC, ez)
1711+ throw((((aI(if) + aI(ig)) + aI(eb())) + aI(cU())))
14761712 }
14771713
14781714
1479-@Verifier(hj)
1480-func hk () = sigVerify(hj.bodyBytes, hj.proofs[0], Z())
1715+
1716+@Callable(bK)
1717+func view_getBorrowedByTrader (bT) = {
1718+ let ih = fI(bT)
1719+ let hb = ih._1
1720+ let hc = ih._2
1721+ throw((aI(hb) + hc))
1722+ }
1723+
1724+
1725+@Verifier(ii)
1726+func ij () = sigVerify(ii.bodyBytes, ii.proofs[0], ag())
14811727

github/deemru/w8io/169f3d6 
487.22 ms