tx · 8BvDNGLK6j3Up8oKjGFsGXPwf8869XzRh48XkMdCuD2Z

3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa:  -0.03700000 Waves

2023.05.03 10:59 [2561305] smart account 3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa > SELF 0.00000000 Waves

{ "type": 13, "id": "8BvDNGLK6j3Up8oKjGFsGXPwf8869XzRh48XkMdCuD2Z", "fee": 3700000, "feeAssetId": null, "timestamp": 1683100784819, "version": 2, "chainId": 84, "sender": "3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa", "senderPublicKey": "4EBKd2zSCvpiSLeyovT5FUuMvGpi6oxdBAbvQybSYi6p", "proofs": [ "YNS9GDjLiXSyo6ruyXsuARrZWhK2AKsvY4qhBk7hwMtCMnSTmhTEMJBukDEHu8NTeAHLSTFqdgv18eVfV9kZCUu" ], "script": "base64:BgJiCAISBAoCCAgSAwoBCBIAEgMKAQgSDwoNCAEBAQEBAQgBAQEBARILCgkIAQEBCAEBAQESBQoDCAgBEggKBggIAQEBARIOCgwICAEBAQEBAQgIAQESAwoBARIDCgEBEgMKAQFCABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0AAVrX2FtbQIFa19hbW0AEWtfbWFuYWdlcl9hZGRyZXNzAhFrX21hbmFnZXJfYWRkcmVzcwASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19leGVjdXRlZE9yZGVycwIQa19leGVjdXRlZE9yZGVycwAQa19jYW5jZWxlZE9yZGVycwIQa19jYW5jZWxlZE9yZGVycwAHa19vcmRlcgIHa19vcmRlcgAOa19vcmRlclJlcXVlc3QCCmtfb3JkZXJSZXEADWtfbGFzdE9yZGVySWQCDWtfbGFzdE9yZGVySWQAEGtfdHJhZGVyT3JkZXJDbnQCEGtfdHJhZGVyT3JkZXJDbnQAEGtfdHJhZGVyT3JkZXJJZHMCEGtfdHJhZGVyT3JkZXJJZHMACGtfc2VuZGVyAghrX3NlbmRlcgANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAEU1RPUAABAARUQUtFAAIABUxJTUlUAAMABExPTkcAAQAFU0hPUlQAAgAISU5DUkVBU0UAAQAIREVDUkVBU0UAAgAZTUFYX1RSQURFUl9PUkRFUlNfUEVSX0FNTQAKAARUSU1FCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoADFNQUkVBRF9MSU1JVAkAaQIFDERFQ0lNQUxfVU5JVADIAQEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEZGl2ZAICX3gCX3kJAG4EBQJfeAUMREVDSU1BTF9VTklUBQJfeQUISEFMRkVWRU4BBG11bGQCAl94Al95CQBuBAUCX3gFAl95BQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQRtaW52AgJfeAJfeQMJAGYCBQJfeAUCX3kFAl95BQJfeAEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwEQZXhlY3V0ZWRPcmRlcktleQEIX29yZGVySWQJAKwCAgkArAICBRBrX2V4ZWN1dGVkT3JkZXJzAgFfCQCkAwEFCF9vcmRlcklkARBjYW5jZWxlZE9yZGVyS2V5AQhfb3JkZXJJZAkArAICCQCsAgIFEGtfY2FuY2VsZWRPcmRlcnMCAV8JAKQDAQUIX29yZGVySWQBCG9yZGVyS2V5AQhfb3JkZXJJZAkBDnRvQ29tcG9zaXRlS2V5AgUHa19vcmRlcgkApAMBBQhfb3JkZXJJZAEPb3JkZXJSZXF1ZXN0S2V5Aghfb3JkZXJJZAVfdHlwZQkArAICCQCsAgIJAKwCAgkArAICBQ5rX29yZGVyUmVxdWVzdAIBXwkApAMBBQhfb3JkZXJJZAIBXwkApAMBBQVfdHlwZQETdHJhZGVyT3JkZXJDb3VudEtleQIEX2FtbQdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIFEGtfdHJhZGVyT3JkZXJDbnQCAV8FBF9hbW0CAV8FB190cmFkZXIBEXRyYWRlck9yZGVySWRzS2V5AgRfYW1tB190cmFkZXIJAKwCAgkArAICCQCsAgIJAKwCAgUQa190cmFkZXJPcmRlcklkcwIBXwUEX2FtbQIBXwUHX3RyYWRlcgELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQBDm1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAg9NYW5hZ2VyIG5vdCBzZXQBC2lzV2hpdGVsaXN0AQhfYWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmwgCCQELY29vcmRpbmF0b3IACQEOdG9Db21wb3NpdGVLZXkCBQVrX2FtbQUIX2FkZHJlc3MHAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBB2lzVmFsaWQBCF9vcmRlcklkAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQEQZXhlY3V0ZWRPcmRlcktleQEFCF9vcmRlcklkBwkAAgEJAKwCAgIYT3JkZXIgYWxyZWFkeSBleGVjdXRlZDogCQCkAwEFCF9vcmRlcklkAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQEQY2FuY2VsZWRPcmRlcktleQEFCF9vcmRlcklkBwkAAgEJAKwCAgIZT3JkZXIgYWxyZWFkeSBjYW5jZWxsZWQ6IAkApAMBBQhfb3JkZXJJZAYBDmN1cnJlbnRPcmRlcklkAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ1rX2xhc3RPcmRlcklkAAABE2dldFRyYWRlck9yZGVyQ291bnQCBF9hbW0HX3RyYWRlcgQDa2V5CQETdHJhZGVyT3JkZXJDb3VudEtleQIFBF9hbW0FB190cmFkZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABEnRyYWRlckFtbU9yZGVyc0lkcwIEX2FtbQdfdHJhZGVyBANrZXkJARF0cmFkZXJPcmRlcklkc0tleQIFBF9hbW0FB190cmFkZXIEA3ZhbAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAMJAAACBQN2YWwCAAUDbmlsCQC1CQIFA3ZhbAIBLAEQaGF2ZU9yZGVyUmVxdWVzdAIIX29yZGVySWQFX3R5cGUEA2tleQkBD29yZGVyUmVxdWVzdEtleQIFCF9vcmRlcklkBQVfdHlwZQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5AQ9nZXRPcmRlclJlcXVlc3QCCF9vcmRlcklkBV90eXBlBANrZXkJAQ9vcmRlclJlcXVlc3RLZXkCBQhfb3JkZXJJZAUFX3R5cGUED29yZGVyUmVxdWVzdFN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICAhtOb3Qgb3JkZXIgcmVxdWVzdCBmb3Iga2V5OiAFA2tleQQUb3JkZXJSZXF1ZXN0UGFydExpc3QJALUJAgUPb3JkZXJSZXF1ZXN0U3RyAgEsBAdvcmRlcklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAAAg9JbnZhbGlkIG9yZGVySWQEA2FtbQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAABBAZ0cmFkZXIJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAgQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAwIMSW52YWxpZCB0eXBlBAx0cmlnZ2VyUHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFFG9yZGVyUmVxdWVzdFBhcnRMaXN0AAQCFEludmFsaWQgdHJpZ2dlclByaWNlBApsaW1pdFByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAFAhJJbnZhbGlkIGxpbWl0UHJpY2UJAJgKBgUHb3JkZXJJZAUDYW1tBQZ0cmFkZXIFBHR5cGUFDHRyaWdnZXJQcmljZQUKbGltaXRQcmljZQEIZ2V0T3JkZXIBCF9vcmRlcklkBAhvcmRlclN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAQhvcmRlcktleQEFCF9vcmRlcklkCQCsAgICEkludmFsaWQgb3JkZXIgaWQ6IAkApAMBBQhfb3JkZXJJZAQNb3JkZXJQYXJ0TGlzdAkAtQkCBQhvcmRlclN0cgIBLAQDYW1tCQCRAwIFDW9yZGVyUGFydExpc3QAAAQGdHJhZGVyCQCRAwIFDW9yZGVyUGFydExpc3QAAQQIYW1vdW50SW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QAAgIQSW52YWxpZCBhbW91bnRJbgQIbGV2ZXJhZ2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QAAwIQSW52YWxpZCBsZXZlcmFnZQQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAEAgxJbnZhbGlkIHR5cGUEDHRyaWdnZXJQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAFAhRJbnZhbGlkIHRyaWdnZXJQcmljZQQLcGF5bWVudFVzZG4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QABgITSW52YWxpZCBwYXltZW50VXNkbgQEc2lkZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAHAgxJbnZhbGlkIHNpZGUEB3JlZkxpbmsJAJEDAgUNb3JkZXJQYXJ0TGlzdAAIBApwb3NpdGlvbklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAkCEkludmFsaWQgcG9zaXRpb25JZAQKbGltaXRQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAKAhJJbnZhbGlkIGxpbWl0UHJpY2UECmV4cGlyYXRpb24DCQBmAgkAkAMBBQ1vcmRlclBhcnRMaXN0AAsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QACwISSW52YWxpZCBsaW1pdFByaWNlAAAJAJ4KDAUDYW1tBQZ0cmFkZXIFCGFtb3VudEluBQhsZXZlcmFnZQUEdHlwZQUMdHJpZ2dlclByaWNlBQtwYXltZW50VXNkbgUEc2lkZQUHcmVmTGluawUKcG9zaXRpb25JZAUKbGltaXRQcmljZQUKZXhwaXJhdGlvbgEOZ2V0TWFya2V0UHJpY2UBBF9hbW0EAXMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQIQY29tcHV0ZVNwb3RQcmljZQUDbmlsBQNuaWwDCQAAAgUBcwUBcwQDcmVzBAckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACA0ludAQBdAUHJG1hdGNoMAUBdAkAAgECH0ludmFsaWQgY29tcHV0ZVNwb3RQcmljZSByZXN1bHQJAQV2YWx1ZQEFA3JlcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEGZ2V0RmVlAgRfYW1tB190cmFkZXIEAXMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQIfY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdAkAzAgCBQdfdHJhZGVyCQDMCAICAAUDbmlsBQNuaWwDCQAAAgUBcwUBcwQDcmVzBAckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACDihJbnQsIEJvb2xlYW4pBAF0BQckbWF0Y2gwCAUBdAJfMQkAAgECLkludmFsaWQgY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdCByZXN1bHQJAQV2YWx1ZQEFA3JlcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEUZ2V0UG9zaXRpb25EaXJlY3Rpb24CCl9vcmRlclNpZGUKX29yZGVyVHlwZQMDCQAAAgUKX29yZGVyVHlwZQUEVEFLRQYJAAACBQpfb3JkZXJUeXBlBQRTVE9QAwkAAAIFCl9vcmRlclNpZGUFBExPTkcFBVNIT1JUBQRMT05HBQpfb3JkZXJTaWRlAQ9nZXRQb3NpdGlvblNpemUDBF9hbW0HX3RyYWRlcgpfZGlyZWN0aW9uBANhbW0JARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uBAdzaXplS2V5CQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUDYW1tBQdzaXplS2V5AAABDWdldFBvc2l0aW9uSWQDBF9hbW0HX3RyYWRlcgpfZGlyZWN0aW9uBANhbW0JARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uBAZzZXFLZXkJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQULcG9zaXRpb25LZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUDYW1tBQZzZXFLZXkAAAEJZ2V0U3ByZWFkAQZfcHJpY2UJAQRtdWxkAgUGX3ByaWNlBQxTUFJFQURfTElNSVQBCXNhdmVPcmRlcg0IX29yZGVySWQEX2FtbQdfdHJhZGVyCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3R5cGUNX3RyaWdnZXJQcmljZQxfcGF5bWVudFVzZG4FX3NpZGUIX3JlZkxpbmsLX3Bvc2l0aW9uSWQLX2xpbWl0UHJpY2ULX2V4cGlyYXRpb24ECG9yZGVyU3RyCQC5CQIJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyCQDMCAIJAKQDAQUJX2Ftb3VudEluCQDMCAIJAKQDAQUJX2xldmVyYWdlCQDMCAIJAKQDAQUFX3R5cGUJAMwIAgkApAMBBQ1fdHJpZ2dlclByaWNlCQDMCAIJAKQDAQUMX3BheW1lbnRVc2RuCQDMCAIJAKQDAQUFX3NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgkApAMBBQtfcG9zaXRpb25JZAkAzAgCCQCkAwEFC19saW1pdFByaWNlCQDMCAIJAKQDAQULX2V4cGlyYXRpb24FA25pbAIBLAkAzAgCCQELU3RyaW5nRW50cnkCCQEIb3JkZXJLZXkBBQhfb3JkZXJJZAUIb3JkZXJTdHIFA25pbAEQc2F2ZU9yZGVyUmVxdWVzdAYIX29yZGVySWQEX2FtbQdfdHJhZGVyBV90eXBlDV90cmlnZ2VyUHJpY2ULX2xpbWl0UHJpY2UEC29yZGVyUmVxU3RyCQC5CQIJAMwIAgkApAMBBQhfb3JkZXJJZAkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIJAMwIAgkApAMBBQVfdHlwZQkAzAgCCQCkAwEFDV90cmlnZ2VyUHJpY2UJAMwIAgkApAMBBQtfbGltaXRQcmljZQUDbmlsAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9vcmRlclJlcXVlc3RLZXkCBQhfb3JkZXJJZAUFX3R5cGUFC29yZGVyUmVxU3RyBQNuaWwBEHVwZGF0ZU9yZGVySWRTdHIDD19vcmRlcklkc05ld1N0cgRfYW1tB190cmFkZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEXRyYWRlck9yZGVySWRzS2V5AgUEX2FtbQUHX3RyYWRlcgUPX29yZGVySWRzTmV3U3RyBQNuaWwBFGFkZFJlbW92ZU9yZGVySWRMaXN0BQlfb3JkZXJJZHMIX29yZGVySWQEX2FtbQdfdHJhZGVyBF9hZGQEC29yZGVySWRzTmV3AwUEX2FkZAkAzQgCBQlfb3JkZXJJZHMJAKQDAQUIX29yZGVySWQJANEIAgUJX29yZGVySWRzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUJX29yZGVySWRzCQCkAwEFCF9vcmRlcklkCQCsAgICEk5vIG9yZGVyIHdpdGggaWQ6IAkApAMBBQhfb3JkZXJJZAULb3JkZXJJZHNOZXcBEGFkZFJlbW92ZU9yZGVySWQECF9vcmRlcklkBF9hbW0HX3RyYWRlcgRfYWRkBAhvcmRlcklkcwkBEnRyYWRlckFtbU9yZGVyc0lkcwIFBF9hbW0FB190cmFkZXIEC29yZGVySWRzTmV3CQEUYWRkUmVtb3ZlT3JkZXJJZExpc3QFBQhvcmRlcklkcwUIX29yZGVySWQFBF9hbW0FB190cmFkZXIFBF9hZGQEDm9yZGVySWRzTmV3U3RyCQC5CQIFC29yZGVySWRzTmV3AgEsCQEQdXBkYXRlT3JkZXJJZFN0cgMFDm9yZGVySWRzTmV3U3RyBQRfYW1tBQdfdHJhZGVyARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwRfYW1tB190cmFkZXIGX2NvdW50AwkAZgIAAAUGX2NvdW50CQACAQkArAICAhVJbnZhbGlkIG9yZGVyIGNvdW50OiAJAKQDAQUGX2NvdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETdHJhZGVyT3JkZXJDb3VudEtleQIFBF9hbW0FB190cmFkZXIFBl9jb3VudAUDbmlsARF1cGRhdGVMYXN0T3JkZXJJZAEMX2xhc3RPcmRlcklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX2xhc3RPcmRlcklkBQxfbGFzdE9yZGVySWQFA25pbAEQbWFya0V4ZWN1dGVPcmRlcgEIX29yZGVySWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfZXhlY3V0ZWRPcmRlcnMJAKQDAQUIX29yZGVySWQGBQNuaWwBD21hcmtDYW5jZWxPcmRlcgEIX29yZGVySWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfY2FuY2VsZWRPcmRlcnMJAKQDAQUIX29yZGVySWQGBQNuaWwBDmdldFBvc2l0aW9uSWRzAgRfYW1tB190cmFkZXIEEGxvbmdQb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBQRMT05HBBVjdXJyZW50TG9uZ1Bvc2l0aW9uSWQDCQECIT0CBRBsb25nUG9zaXRpb25TaXplAAAJAQ1nZXRQb3NpdGlvbklkAwUEX2FtbQUHX3RyYWRlcgUETE9ORwAABBFzaG9ydFBvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFBVNIT1JUBBZjdXJyZW50U2hvcnRQb3NpdGlvbklkAwkBAiE9AgURc2hvcnRQb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBQVTSE9SVAAACQDMCAIFFWN1cnJlbnRMb25nUG9zaXRpb25JZAkAzAgCBRZjdXJyZW50U2hvcnRQb3NpdGlvbklkBQNuaWwMAWkBEmNsZWFuVXBTdGFsZU9yZGVycwIEX2FtbQdfdHJhZGVyBAZvcmRlcnMJARJ0cmFkZXJBbW1PcmRlcnNJZHMCBQRfYW1tBQdfdHJhZGVyBAtwb3NpdGlvbklkcwkBDmdldFBvc2l0aW9uSWRzAgUEX2FtbQUHX3RyYWRlcgoBCmNsZWFuVXBPbmUCBF9hY2MIX29yZGVySWQECm9yZGVySWRJbnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQhfb3JkZXJJZAIQSW52YWxpZCBvcmRlciBpZAQNJHQwMTEzNTkxMTU3NQkBCGdldE9yZGVyAQUKb3JkZXJJZEludAQDX3gxCAUNJHQwMTEzNTkxMTU3NQJfMQQDX3gyCAUNJHQwMTEzNTkxMTU3NQJfMgQDX3gzCAUNJHQwMTEzNTkxMTU3NQJfMwQDX3g0CAUNJHQwMTEzNTkxMTU3NQJfNAQFX3R5cGUIBQ0kdDAxMTM1OTExNTc1Al81BANfeDUIBQ0kdDAxMTM1OTExNTc1Al82BANfeDYIBQ0kdDAxMTM1OTExNTc1Al83BANfeDcIBQ0kdDAxMTM1OTExNTc1Al84BANfeDgIBQ0kdDAxMTM1OTExNTc1Al85BAtfcG9zaXRpb25JZAgFDSR0MDExMzU5MTE1NzUDXzEwBANfeDkIBQ0kdDAxMTM1OTExNTc1A18xMQQLX2V4cGlyYXRpb24IBQ0kdDAxMTM1OTExNTc1A18xMgMDAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQkBAiE9AgkAkQMCBQtwb3NpdGlvbklkcwAABQtfcG9zaXRpb25JZAcJAQIhPQIJAJEDAgULcG9zaXRpb25JZHMAAQULX3Bvc2l0aW9uSWQHBAZjaGFuZ2UJAQ9tYXJrQ2FuY2VsT3JkZXIBBQpvcmRlcklkSW50BAxuZXdPcmRlckxpc3QJARRhZGRSZW1vdmVPcmRlcklkTGlzdAUIBQRfYWNjAl8xBQpvcmRlcklkSW50BQRfYW1tBQdfdHJhZGVyBwkAlAoCBQxuZXdPcmRlckxpc3QJAM4IAggFBF9hY2MCXzIFBmNoYW5nZQUEX2FjYwQNJHQwMTE5MjgxMjAwMwoAAiRsBQZvcmRlcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFBm9yZGVycwUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjbGVhblVwT25lAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAluZXdPcmRlcnMIBQ0kdDAxMTkyODEyMDAzAl8xBA1jYW5jZWxBY3Rpb25zCAUNJHQwMTE5MjgxMjAwMwJfMgkAzggCCQDOCAIFDWNhbmNlbEFjdGlvbnMJARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwUEX2FtbQUHX3RyYWRlcgkAkAMBBQluZXdPcmRlcnMJARB1cGRhdGVPcmRlcklkU3RyAwkAuQkCBQluZXdPcmRlcnMCASwFBF9hbW0FB190cmFkZXIBaQEKc2V0Q29udGV4dAEHX3NlbmRlcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDk9ubHkgc2VsZi1jYWxsCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtfc2VuZGVyBQdfc2VuZGVyBQNuaWwBaQEMcmVzZXRDb250ZXh0AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDk9ubHkgc2VsZi1jYWxsCQDMCAIJAQtEZWxldGVFbnRyeQEFCGtfc2VuZGVyBQNuaWwBaQEKaW5pdGlhbGl6ZQEMX2Nvb3JkaW5hdG9yAwMJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhRVbmFibGUgdG8gaW5pdGlhbGl6ZQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQxfY29vcmRpbmF0b3IJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGBQNuaWwBaQELY3JlYXRlT3JkZXINBF9hbW0FX3R5cGUNX3RyaWdnZXJQcmljZQtfbGltaXRQcmljZQlfYW1vdW50SW4JX2xldmVyYWdlBV9zaWRlCF9yZWZMaW5rEV9zdG9wVHJpZ2dlclByaWNlD19zdG9wTGltaXRQcmljZRFfdGFrZVRyaWdnZXJQcmljZQ9fdGFrZUxpbWl0UHJpY2ULX2V4cGlyYXRpb24EB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBAdjbGVhblVwCQD8BwQFBHRoaXMCEmNsZWFuVXBTdGFsZU9yZGVycwkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFB2NsZWFuVXAFB2NsZWFuVXADCQBmAgkAkAMBCAUBaQhwYXltZW50cwABCQACAQI1SW52YWxpZCBjcmVhdGVPcmRlciBwYXJhbWV0ZXJzOiBpbnZhbGlkIHBheW1lbnQgY291bnQEDSR0MDE0NTIxMTQ3NzMDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCUCgIJANgEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQCEEludmFsaWQgYXNzZXQgaWQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQCUCgICAAAABA5wYXltZW50QXNzZXRJZAgFDSR0MDE0NTIxMTQ3NzMCXzEEDXBheW1lbnRBbW91bnQIBQ0kdDAxNDUyMTE0NzczAl8yBAZkb0NhbGwJAPwHBAUEdGhpcwITaW50ZXJuYWxDcmVhdGVPcmRlcgkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUFX3R5cGUJAMwIAgUNX3RyaWdnZXJQcmljZQkAzAgCBQtfbGltaXRQcmljZQkAzAgCBQlfYW1vdW50SW4JAMwIAgUJX2xldmVyYWdlCQDMCAIFBV9zaWRlCQDMCAIFCF9yZWZMaW5rCQDMCAIFDnBheW1lbnRBc3NldElkCQDMCAIFDXBheW1lbnRBbW91bnQJAMwIAgULX2V4cGlyYXRpb24FA25pbAUDbmlsAwkAAAIFBmRvQ2FsbAUGZG9DYWxsBAdvcmRlcklkBAckbWF0Y2gwBQZkb0NhbGwDCQABAgUHJG1hdGNoMAIDSW50BAF0BQckbWF0Y2gwBQF0CQACAQIbSW52YWxpZCBJRCBvZiBjcmVhdGVkIG9yZGVyAwkAAAIFBV90eXBlBQVMSU1JVAQIbWFrZVN0b3ADCQBmAgURX3N0b3BUcmlnZ2VyUHJpY2UAAAQKZG9NYWtlU3RvcAkA/AcEBQR0aGlzAhppbnRlcm5hbENyZWF0ZU9yZGVyUmVxdWVzdAkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUHb3JkZXJJZAkAzAgCBQRTVE9QCQDMCAIFEV9zdG9wVHJpZ2dlclByaWNlCQDMCAIFD19zdG9wTGltaXRQcmljZQUDbmlsBQNuaWwDCQAAAgUKZG9NYWtlU3RvcAUKZG9NYWtlU3RvcAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwECG1ha2VUYWtlAwkAZgIFEV90YWtlVHJpZ2dlclByaWNlAAAECmRvTWFrZVRha2UJAPwHBAUEdGhpcwIaaW50ZXJuYWxDcmVhdGVPcmRlclJlcXVlc3QJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFB29yZGVySWQJAMwIAgUEVEFLRQkAzAgCBRFfdGFrZVRyaWdnZXJQcmljZQkAzAgCBQ9fdGFrZUxpbWl0UHJpY2UFA25pbAUDbmlsAwkAAAIFCmRvTWFrZVRha2UFCmRvTWFrZVRha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQDOCAIFCG1ha2VTdG9wBQhtYWtlVGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBHGluY3JlYXNlUG9zaXRpb25XaXRoU3RvcExvc3MJBF9hbW0KX2RpcmVjdGlvbglfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAhfcmVmTGluaxFfc3RvcFRyaWdnZXJQcmljZQ9fc3RvcExpbWl0UHJpY2URX3Rha2VUcmlnZ2VyUHJpY2UPX3Rha2VMaW1pdFByaWNlBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQHY2xlYW5VcAkA/AcEBQR0aGlzAhJjbGVhblVwU3RhbGVPcmRlcnMJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQdjbGVhblVwBQdjbGVhblVwAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBC2lzV2hpdGVsaXN0AQUEX2FtbQkAAgECL0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbldpdGhTdG9wTG9zcyBwYXJhbWV0ZXJzBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBQpfZGlyZWN0aW9uAwkBAiE9AgUMcG9zaXRpb25TaXplAAAJAAIBAkJJbnZhbGlkIGluY3JlYXNlUG9zaXRpb25XaXRoU3RvcExvc3MgcGFyYW1ldGVyczogb25seSBuZXcgcG9zaXRpb24EDGRvU2V0Q29udGV4dAkA/AcEBQR0aGlzAgpzZXRDb250ZXh0CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFDGRvU2V0Q29udGV4dAUMZG9TZXRDb250ZXh0BA9kb0Nsb3NlUG9zaXRpb24JAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQIQaW5jcmVhc2VQb3NpdGlvbgkAzAgCBQpfZGlyZWN0aW9uCQDMCAIFCV9sZXZlcmFnZQkAzAgCBRNfbWluQmFzZUFzc2V0QW1vdW50CQDMCAIFCF9yZWZMaW5rBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFD2RvQ2xvc2VQb3NpdGlvbgUPZG9DbG9zZVBvc2l0aW9uBA5kb1Jlc2V0Q29udGV4dAkA/AcEBQR0aGlzAgxyZXNldENvbnRleHQFA25pbAUDbmlsAwkAAAIFDmRvUmVzZXRDb250ZXh0BQ5kb1Jlc2V0Q29udGV4dAQSb3BlbmVkUG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgUKX2RpcmVjdGlvbgMJAAACBRJvcGVuZWRQb3NpdGlvblNpemUFEm9wZW5lZFBvc2l0aW9uU2l6ZQQIYW1vdW50SW4JAQNhYnMBBRJvcGVuZWRQb3NpdGlvblNpemUEDHN0b3BMb3NzU2lkZQMJAGYCAAAFEm9wZW5lZFBvc2l0aW9uU2l6ZQUETE9ORwUFU0hPUlQEEWRvQ3JlYXRlU3RvcE9yZGVyAwkAZgIFEV9zdG9wVHJpZ2dlclByaWNlAAAEEWRvQ3JlYXRlU3RvcE9yZGVyCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFBFNUT1AJAMwIAgURX3N0b3BUcmlnZ2VyUHJpY2UJAMwIAgUPX3N0b3BMaW1pdFByaWNlCQDMCAIFCGFtb3VudEluCQDMCAIAAAkAzAgCBQxzdG9wTG9zc1NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgIACQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFEWRvQ3JlYXRlU3RvcE9yZGVyBRFkb0NyZWF0ZVN0b3BPcmRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgURZG9DcmVhdGVTdG9wT3JkZXIFEWRvQ3JlYXRlU3RvcE9yZGVyBBFkb0NyZWF0ZVRha2VPcmRlcgMJAGYCBRFfdGFrZVRyaWdnZXJQcmljZQAABBFkb0NyZWF0ZVRha2VPcmRlcgkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQRUQUtFCQDMCAIFEV90YWtlVHJpZ2dlclByaWNlCQDMCAIFD190YWtlTGltaXRQcmljZQkAzAgCBQhhbW91bnRJbgkAzAgCAAAJAMwIAgUMc3RvcExvc3NTaWRlCQDMCAIFCF9yZWZMaW5rCQDMCAICAAkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAMJAAACBRFkb0NyZWF0ZVRha2VPcmRlcgURZG9DcmVhdGVUYWtlT3JkZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFEWRvQ3JlYXRlVGFrZU9yZGVyBRFkb0NyZWF0ZVRha2VPcmRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGWludGVybmFsTWFya09yZGVyRXhlY3V0ZWQDBF9hbW0HX3RyYWRlcghfb3JkZXJJZAMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQELaXNXaGl0ZWxpc3QBBQRfYW1tBgkBASEBCQAAAggFAWkGY2FsbGVyBQR0aGlzCQACAQIsSW52YWxpZCBpbnRlcm5hbE1hcmtPcmRlckV4ZWN1dGVkIHBhcmFtZXRlcnMEE25ld1RyYWRlck9yZGVyQ291bnQJAGUCCQETZ2V0VHJhZGVyT3JkZXJDb3VudAIFBF9hbW0FB190cmFkZXIAAQkAzggCCQDOCAIJARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwUEX2FtbQUHX3RyYWRlcgUTbmV3VHJhZGVyT3JkZXJDb3VudAkBEGFkZFJlbW92ZU9yZGVySWQEBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgcJARBtYXJrRXhlY3V0ZU9yZGVyAQUIX29yZGVySWQBaQEaaW50ZXJuYWxDcmVhdGVPcmRlclJlcXVlc3QGB190cmFkZXIEX2FtbQhfb3JkZXJJZAVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlAwMDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBC2lzV2hpdGVsaXN0AQUEX2FtbQYJAGcCAAAFDV90cmlnZ2VyUHJpY2UGCQBmAgAABQtfbGltaXRQcmljZQYJAQEhAQkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLUludmFsaWQgaW50ZXJuYWxDcmVhdGVPcmRlclJlcXVlc3QgcGFyYW1ldGVycwkBEHNhdmVPcmRlclJlcXVlc3QGBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUFX3R5cGUFDV90cmlnZ2VyUHJpY2UFC19saW1pdFByaWNlAWkBE2ludGVybmFsQ3JlYXRlT3JkZXIMB190cmFkZXIEX2FtbQVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3NpZGUIX3JlZkxpbmsPX3BheW1lbnRBc3NldElkDl9wYXltZW50QW1vdW50C19leHBpcmF0aW9uAwMDAwMDAwMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQELaXNXaGl0ZWxpc3QBBQRfYW1tBgkAZwIAAAUNX3RyaWdnZXJQcmljZQYJAGYCAAAFC19saW1pdFByaWNlBgkAZwIAAAUJX2Ftb3VudEluBgkAZgIAAAUJX2xldmVyYWdlBgkBASEBAwkAAAIFBV9zaWRlBQRMT05HBgkAAAIFBV9zaWRlBQVTSE9SVAYJAQEhAQMDCQAAAgUFX3R5cGUFBFNUT1AGCQAAAgUFX3R5cGUFBFRBS0UGCQAAAgUFX3R5cGUFBUxJTUlUBgkBASEBCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAZgIAAAULX2V4cGlyYXRpb24JAAIBAiZJbnZhbGlkIGludGVybmFsQ3JlYXRlT3JkZXIgcGFyYW1ldGVycwQHb3JkZXJJZAkAZAIJAQ5jdXJyZW50T3JkZXJJZAAAAQQRcG9zaXRpb25EaXJlY3Rpb24JARRnZXRQb3NpdGlvbkRpcmVjdGlvbgIFBV9zaWRlBQVfdHlwZQQTbmV3VHJhZGVyT3JkZXJDb3VudAkAZAIJARNnZXRUcmFkZXJPcmRlckNvdW50AgUEX2FtbQUHX3RyYWRlcgABBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgQKX2RpcmVjdGlvbgMDAwkAAAIFDHBvc2l0aW9uU2l6ZQAABgMJAGYCBQxwb3NpdGlvblNpemUAAAkAAAIFBV9zaWRlBQRMT05HBwYDCQBmAgAABQxwb3NpdGlvblNpemUJAAACBQVfc2lkZQUFU0hPUlQHBQhJTkNSRUFTRQUIREVDUkVBU0UDAwkAAAIFDHBvc2l0aW9uU2l6ZQAAAwkAAAIFBV90eXBlBQRTVE9QBgkAAAIFBV90eXBlBQRUQUtFBwkAAgECK0NhbiBub3QgY3JlYXRlIFNUT1AvVEFLRSBvcmRlcjogbm8gcG9zaXRpb24EC3VzZG5QYXltZW50AwkAAAIFCl9kaXJlY3Rpb24FCElOQ1JFQVNFAwMJAQIhPQIFD19wYXltZW50QXNzZXRJZAkA2AQBCQEKcXVvdGVBc3NldAAGCQECIT0CBQ5fcGF5bWVudEFtb3VudAUJX2Ftb3VudEluCQACAQI0SW52YWxpZCBjcmVhdGVMaW1pdE9yZGVyIHBhcmFtZXRlcnM6IGludmFsaWQgcGF5bWVudAQFc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDl9wYXltZW50QW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBQ5fcGF5bWVudEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAwkAAAIFC3VzZG5QYXltZW50BQt1c2RuUGF5bWVudAQKcG9zaXRpb25JZAMJAQIhPQIFDHBvc2l0aW9uU2l6ZQAACQENZ2V0UG9zaXRpb25JZAMFBF9hbW0FB190cmFkZXIFEXBvc2l0aW9uRGlyZWN0aW9uAAADAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQkAAAIFCnBvc2l0aW9uSWQAAAcJAAIBAj9TVE9QIGFuZCBUQUtFIG9yZGVyIHNob3VsZCBiZSBhc3NpZ25lZCB0byBwb3NpdGlvbiB3aXRoIGlkICE9IDADCQBmAgUTbmV3VHJhZGVyT3JkZXJDb3VudAUZTUFYX1RSQURFUl9PUkRFUlNfUEVSX0FNTQkAAgECMEludmFsaWQgY3JlYXRlTGltaXRPcmRlciBwYXJhbWV0ZXJzOiBvcmRlciBjb3VudAQJY2hhbmdlU2V0CQDOCAIJAM4IAgkAzggCCQEJc2F2ZU9yZGVyDQUHb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUJX2Ftb3VudEluBQlfbGV2ZXJhZ2UFBV90eXBlBQ1fdHJpZ2dlclByaWNlBQt1c2RuUGF5bWVudAUFX3NpZGUFCF9yZWZMaW5rBQpwb3NpdGlvbklkBQtfbGltaXRQcmljZQULX2V4cGlyYXRpb24JARBhZGRSZW1vdmVPcmRlcklkBAUHb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgYJARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwUEX2FtbQUHX3RyYWRlcgUTbmV3VHJhZGVyT3JkZXJDb3VudAkBEXVwZGF0ZUxhc3RPcmRlcklkAQUHb3JkZXJJZAkAlAoCBQljaGFuZ2VTZXQFB29yZGVySWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELY2FuY2VsT3JkZXIBCF9vcmRlcklkBA0kdDAyMzgzNzI0MDU2CQEIZ2V0T3JkZXIBBQhfb3JkZXJJZAQEX2FtbQgFDSR0MDIzODM3MjQwNTYCXzEEB190cmFkZXIIBQ0kdDAyMzgzNzI0MDU2Al8yBAlfYW1vdW50SW4IBQ0kdDAyMzgzNzI0MDU2Al8zBAlfbGV2ZXJhZ2UIBQ0kdDAyMzgzNzI0MDU2Al80BAVfdHlwZQgFDSR0MDIzODM3MjQwNTYCXzUEDV90cmlnZ2VyUHJpY2UIBQ0kdDAyMzgzNzI0MDU2Al82BAtfYW1vdW50VXNkbggFDSR0MDIzODM3MjQwNTYCXzcEBV9zaWRlCAUNJHQwMjM4MzcyNDA1NgJfOAQIX3JlZkxpbmsIBQ0kdDAyMzgzNzI0MDU2Al85BAtfcG9zaXRpb25JZAgFDSR0MDIzODM3MjQwNTYDXzEwBAtfbGltaXRQcmljZQgFDSR0MDIzODM3MjQwNTYDXzExAwMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQdpc1ZhbGlkAQUIX29yZGVySWQGCQEBIQEJAAACCQClCAEIBQFpBmNhbGxlcgUHX3RyYWRlcgkAAgECHkludmFsaWQgY2FuY2VsT3JkZXIgcGFyYW1ldGVycwQHY2xlYW5VcAkA/AcEBQR0aGlzAhJjbGVhblVwU3RhbGVPcmRlcnMJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQdjbGVhblVwBQdjbGVhblVwBBNuZXdUcmFkZXJPcmRlckNvdW50CQBlAgkBE2dldFRyYWRlck9yZGVyQ291bnQCBQRfYW1tBQdfdHJhZGVyAAEECHdpdGhkcmF3AwkAZgIFC19hbW91bnRVc2RuAAAEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgULX2Ftb3VudFVzZG4FA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwkAzggCCQDOCAIJAM4IAgkBD21hcmtDYW5jZWxPcmRlcgEFCF9vcmRlcklkCQEQYWRkUmVtb3ZlT3JkZXJJZAQFCF9vcmRlcklkBQRfYW1tBQdfdHJhZGVyBwkBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBQRfYW1tBQdfdHJhZGVyBRNuZXdUcmFkZXJPcmRlckNvdW50AwkAZgIFC19hbW91bnRVc2RuAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtfYW1vdW50VXNkbgkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxleGVjdXRlT3JkZXIBCF9vcmRlcklkBA0kdDAyNTI1NDI1NDczCQEIZ2V0T3JkZXIBBQhfb3JkZXJJZAQEX2FtbQgFDSR0MDI1MjU0MjU0NzMCXzEEB190cmFkZXIIBQ0kdDAyNTI1NDI1NDczAl8yBAlfYW1vdW50SW4IBQ0kdDAyNTI1NDI1NDczAl8zBAlfbGV2ZXJhZ2UIBQ0kdDAyNTI1NDI1NDczAl80BAVfdHlwZQgFDSR0MDI1MjU0MjU0NzMCXzUEDV90cmlnZ2VyUHJpY2UIBQ0kdDAyNTI1NDI1NDczAl82BAtfYW1vdW50VXNkbggFDSR0MDI1MjU0MjU0NzMCXzcEBV9zaWRlCAUNJHQwMjUyNTQyNTQ3MwJfOAQIX3JlZkxpbmsIBQ0kdDAyNTI1NDI1NDczAl85BAtfcG9zaXRpb25JZAgFDSR0MDI1MjU0MjU0NzMDXzEwBAtfbGltaXRQcmljZQgFDSR0MDI1MjU0MjU0NzMDXzExBAdjbGVhblVwCQD8BwQFBHRoaXMCEmNsZWFuVXBTdGFsZU9yZGVycwkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFB2NsZWFuVXAFB2NsZWFuVXAEEXBvc2l0aW9uRGlyZWN0aW9uCQEUZ2V0UG9zaXRpb25EaXJlY3Rpb24CBQVfc2lkZQUFX3R5cGUDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQEHaXNWYWxpZAEFCF9vcmRlcklkCQACAQIfSW52YWxpZCBleGVjdXRlT3JkZXIgcGFyYW1ldGVycwQMcG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgURcG9zaXRpb25EaXJlY3Rpb24DCQAAAgUMcG9zaXRpb25TaXplBQxwb3NpdGlvblNpemUEEWN1cnJlbnRQb3NpdGlvbklkAwkBAiE9AgUMcG9zaXRpb25TaXplAAAJAQ1nZXRQb3NpdGlvbklkAwUEX2FtbQUHX3RyYWRlcgURcG9zaXRpb25EaXJlY3Rpb24AAAQNJHQwMjU5ODAyOTM1OAMJAAACBQVfdHlwZQUEU1RPUAQSX3Bvc2l0aW9uRGlyZWN0aW9uAwkAZgIFDHBvc2l0aW9uU2l6ZQAABQRMT05HAwkAZgIAAAUMcG9zaXRpb25TaXplBQVTSE9SVAkAAgECLENhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiBubyBvcGVuIHBvc2l0aW9uBAttYXJrZXRQcmljZQkBDmdldE1hcmtldFByaWNlAQUEX2FtbQQMaXNFeGVjdXRhYmxlAwkAAAIFBV9zaWRlBRJfcG9zaXRpb25EaXJlY3Rpb24JAAIBAidDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogcmVkdWNlIG9ubHkDCQECIT0CBRFjdXJyZW50UG9zaXRpb25JZAULX3Bvc2l0aW9uSWQJAAIBAitDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogcG9zaXRpb24gY2xvc2VkAwkAAAIFEl9wb3NpdGlvbkRpcmVjdGlvbgUETE9ORwkAZwIFDV90cmlnZ2VyUHJpY2UFC21hcmtldFByaWNlCQBnAgULbWFya2V0UHJpY2UFDV90cmlnZ2VyUHJpY2UDBQxpc0V4ZWN1dGFibGUJAJUKAwINY2xvc2VQb3NpdGlvbgkAzAgCCQEEbWludgIFCV9hbW91bnRJbgkBA2FicwEFDHBvc2l0aW9uU2l6ZQkAzAgCBRFwb3NpdGlvbkRpcmVjdGlvbgkAzAgCCQEEbXVsZAIFC19saW1pdFByaWNlCQEDYWJzAQUMcG9zaXRpb25TaXplCQDMCAIHBQNuaWwFA25pbAkAAgECMUNhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gDCQAAAgUFX3R5cGUFBFRBS0UEEl9wb3NpdGlvbkRpcmVjdGlvbgMJAGYCBQxwb3NpdGlvblNpemUAAAUETE9ORwMJAGYCAAAFDHBvc2l0aW9uU2l6ZQUFU0hPUlQJAAIBAixDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogbm8gb3BlbiBwb3NpdGlvbgQLbWFya2V0UHJpY2UJAQ5nZXRNYXJrZXRQcmljZQEFBF9hbW0EDGlzRXhlY3V0YWJsZQMJAAACBQVfc2lkZQUSX3Bvc2l0aW9uRGlyZWN0aW9uCQACAQInQ2FuIG5vdCBleGVjdXRlIFRBS0Ugb3JkZXI6IHJlZHVjZSBvbmx5AwkBAiE9AgURY3VycmVudFBvc2l0aW9uSWQFC19wb3NpdGlvbklkCQACAQkArAICCQCsAgIJAKwCAgIsQ2FuIG5vdCBleGVjdXRlIFRBS0Ugb3JkZXI6IHBvc2l0aW9uIGNsb3NlZCAJAKQDAQURY3VycmVudFBvc2l0aW9uSWQCAiE9CQCkAwEFC19wb3NpdGlvbklkAwkAAAIFEl9wb3NpdGlvbkRpcmVjdGlvbgUETE9ORwkAZwIFC21hcmtldFByaWNlBQ1fdHJpZ2dlclByaWNlCQBnAgUNX3RyaWdnZXJQcmljZQULbWFya2V0UHJpY2UDBQxpc0V4ZWN1dGFibGUJAJUKAwINY2xvc2VQb3NpdGlvbgkAzAgCCQEEbWludgIFCV9hbW91bnRJbgkBA2FicwEFDHBvc2l0aW9uU2l6ZQkAzAgCBRFwb3NpdGlvbkRpcmVjdGlvbgkAzAgCCQEEbXVsZAIFC19saW1pdFByaWNlCQEDYWJzAQUMcG9zaXRpb25TaXplCQDMCAIHBQNuaWwFA25pbAkAAgECMUNhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gDCQAAAgUFX3R5cGUFBUxJTUlUBAttYXJrZXRQcmljZQkBDmdldE1hcmtldFByaWNlAQUEX2FtbQQGc3ByZWFkAwkAAAIFC19saW1pdFByaWNlAAAJAQlnZXRTcHJlYWQBBQ1fdHJpZ2dlclByaWNlCQEDYWJzAQkAZQIFDV90cmlnZ2VyUHJpY2UFC19saW1pdFByaWNlBAxpc0V4ZWN1dGFibGUDCQBnAgULbWFya2V0UHJpY2UJAGUCBQ1fdHJpZ2dlclByaWNlBQZzcHJlYWQJAGcCCQBkAgUNX3RyaWdnZXJQcmljZQUGc3ByZWFkBQttYXJrZXRQcmljZQcDBQxpc0V4ZWN1dGFibGUED2Ftb3VudEluV2l0aEZlZQkAZQIFC19hbW91bnRVc2RuCQEEbXVsZAIFC19hbW91bnRVc2RuCQEGZ2V0RmVlAgUEX2FtbQUHX3RyYWRlcgkAlQoDAhBpbmNyZWFzZVBvc2l0aW9uCQDMCAIFBV9zaWRlCQDMCAIFCV9sZXZlcmFnZQkAzAgCAwkAAAIFC19saW1pdFByaWNlAAAAAAkBBGRpdmQCBQ9hbW91bnRJbldpdGhGZWUFC19saW1pdFByaWNlCQDMCAIFCF9yZWZMaW5rBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAULX2Ftb3VudFVzZG4FA25pbAkAAgECMkNhbiBub3QgZXhlY3V0ZSBMSU1JVCBvcmRlcjogdHJpZ2dlclByaWNlIG1pc21hdGNoCQACAQkArAICAhRJbnZhbGlkIG9yZGVyIHR5cGU6IAkApAMBBQVfdHlwZQQGbWV0aG9kCAUNJHQwMjU5ODAyOTM1OAJfMQQEYXJncwgFDSR0MDI1OTgwMjkzNTgCXzIECHBheW1lbnRzCAUNJHQwMjU5ODAyOTM1OAJfMwQId2l0aGRyYXcDCQAAAgkAkAMBBQhwYXltZW50cwABBAd1bnN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIICQCRAwIFCHBheW1lbnRzAAAGYW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQh3aXRoZHJhdwUId2l0aGRyYXcEDGRvU2V0Q29udGV4dAkA/AcEBQR0aGlzAgpzZXRDb250ZXh0CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFDGRvU2V0Q29udGV4dAUMZG9TZXRDb250ZXh0BA9kb0Nsb3NlUG9zaXRpb24JAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQUGbWV0aG9kBQRhcmdzBQhwYXltZW50cwMJAAACBQ9kb0Nsb3NlUG9zaXRpb24FD2RvQ2xvc2VQb3NpdGlvbgQOZG9SZXNldENvbnRleHQJAPwHBAUEdGhpcwIMcmVzZXRDb250ZXh0BQNuaWwFA25pbAMJAAACBQ5kb1Jlc2V0Q29udGV4dAUOZG9SZXNldENvbnRleHQEE2V4ZWN1dGVPcmRlclJlcXVlc3QDCQAAAgUFX3R5cGUFBUxJTUlUBA9uZXdQb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgMJAAACBQ9uZXdQb3NpdGlvblNpemUFD25ld1Bvc2l0aW9uU2l6ZQQNbmV3UG9zaXRpb25JZAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgMJAAACBQ1uZXdQb3NpdGlvbklkBQ1uZXdQb3NpdGlvbklkBBFwb3NpdGlvblNpemVEZWx0YQkAZQIFD25ld1Bvc2l0aW9uU2l6ZQUMcG9zaXRpb25TaXplBA5jbG9zZU9yZGVyU2lkZQMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUFU0hPUlQFBExPTkcEDW1ha2VUYWtlT3JkZXIDCQEQaGF2ZU9yZGVyUmVxdWVzdAIFCF9vcmRlcklkBQRUQUtFBA0kdDAzMDMyMDMwNTE5CQEPZ2V0T3JkZXJSZXF1ZXN0AgUIX29yZGVySWQFBFRBS0UECm5ld09yZGVySWQIBQ0kdDAzMDMyMDMwNTE5Al8xBAZuZXdBbW0IBQ0kdDAzMDMyMDMwNTE5Al8yBAluZXdUcmFkZXIIBQ0kdDAzMDMyMDMwNTE5Al8zBAduZXdUeXBlCAUNJHQwMzAzMjAzMDUxOQJfNAQPbmV3VHJpZ2dlclByaWNlCAUNJHQwMzAzMjAzMDUxOQJfNQQNbmV3TGltaXRQcmljZQgFDSR0MDMwMzIwMzA1MTkCXzYEBmRvQ2FsbAkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFCW5ld1RyYWRlcgkAzAgCBQZuZXdBbW0JAMwIAgUHbmV3VHlwZQkAzAgCBQ9uZXdUcmlnZ2VyUHJpY2UJAMwIAgUNbmV3TGltaXRQcmljZQkAzAgCBRFwb3NpdGlvblNpemVEZWx0YQkAzAgCAAAJAMwIAgUOY2xvc2VPcmRlclNpZGUJAMwIAgIACQDMCAICAAkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAMJAAACBQZkb0NhbGwFBmRvQ2FsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNbWFrZVRha2VPcmRlcgUNbWFrZVRha2VPcmRlcgQNbWFrZVN0b3BPcmRlcgMJARBoYXZlT3JkZXJSZXF1ZXN0AgUIX29yZGVySWQFBFNUT1AEDSR0MDMxMDkyMzEyOTEJAQ9nZXRPcmRlclJlcXVlc3QCBQhfb3JkZXJJZAUEU1RPUAQKbmV3T3JkZXJJZAgFDSR0MDMxMDkyMzEyOTECXzEEBm5ld0FtbQgFDSR0MDMxMDkyMzEyOTECXzIECW5ld1RyYWRlcggFDSR0MDMxMDkyMzEyOTECXzMEB25ld1R5cGUIBQ0kdDAzMTA5MjMxMjkxAl80BA9uZXdUcmlnZ2VyUHJpY2UIBQ0kdDAzMTA5MjMxMjkxAl81BA1uZXdMaW1pdFByaWNlCAUNJHQwMzEwOTIzMTI5MQJfNgQGZG9DYWxsCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUJbmV3VHJhZGVyCQDMCAIFBm5ld0FtbQkAzAgCBQduZXdUeXBlCQDMCAIFD25ld1RyaWdnZXJQcmljZQkAzAgCBQ1uZXdMaW1pdFByaWNlCQDMCAIFEXBvc2l0aW9uU2l6ZURlbHRhCQDMCAIAAAkAzAgCBQ5jbG9zZU9yZGVyU2lkZQkAzAgCAgAJAMwIAgIACQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFBmRvQ2FsbAUGZG9DYWxsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1tYWtlU3RvcE9yZGVyBQ1tYWtlU3RvcE9yZGVyCQDOCAIFDW1ha2VUYWtlT3JkZXIFDW1ha2VTdG9wT3JkZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRNleGVjdXRlT3JkZXJSZXF1ZXN0BRNleGVjdXRlT3JkZXJSZXF1ZXN0BBNkb01hcmtPcmRlckV4ZWN1dGVkCQD8BwQFBHRoaXMCGWludGVybmFsTWFya09yZGVyRXhlY3V0ZWQJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyCQDMCAIFCF9vcmRlcklkBQNuaWwFA25pbAMJAAACBRNkb01hcmtPcmRlckV4ZWN1dGVkBRNkb01hcmtPcmRlckV4ZWN1dGVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUdmlld19jYW5FeGVjdXRlT3JkZXIBCF9vcmRlcklkBAFzCQD8BwQFBHRoaXMCDGV4ZWN1dGVPcmRlcgkAzAgCBQhfb3JkZXJJZAUDbmlsBQNuaWwDCQAAAgUBcwUBcwkAAgECB1N1Y2Nlc3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA5jb29yZGluYXRvclN0cgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwMJAQlpc0RlZmluZWQBBQ5jb29yZGluYXRvclN0cgQFYWRtaW4JAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUOY29vcmRpbmF0b3JTdHIFD2tfYWRtaW5fYWRkcmVzcwMJAQlpc0RlZmluZWQBBQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVhZG1pbgkArAICCQCsAgIJAKwCAgIHc3RhdHVzXwkApQgBBQR0aGlzAgFfCQDYBAEIBQJ0eAJpZAcJAAIBAi51bmFibGUgdG8gdmVyaWZ5OiBhZG1pbiBub3Qgc2V0IGluIGNvb3JkaW5hdG9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5mbvhOg==", "height": 2561305, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9LcQaLNXkXYqtYStNyvvREGvA84mY4gSubqhHMwgY85V Next: D3U1NZrYntYoAQiuS775RNur1fupPcWYyBm42cQB9gqC Diff:
OldNewDifferences
166166 let aw = ar[8]
167167 let ax = valueOrErrorMessage(parseInt(ar[9]), "Invalid positionId")
168168 let ao = valueOrErrorMessage(parseInt(ar[10]), "Invalid limitPrice")
169- $Tuple11(ak, al, as, at, am, an, au, av, aw, ax, ao)
169+ let ay = if ((size(ar) > 11))
170+ then valueOrErrorMessage(parseInt(ar[11]), "Invalid limitPrice")
171+ else 0
172+ $Tuple12(ak, al, as, at, am, an, au, av, aw, ax, ao, ay)
170173 }
171174
172175
173-func ay (R) = {
174- let az = invoke(addressFromStringValue(R), "computeSpotPrice", nil, nil)
175- if ((az == az))
176+func az (R) = {
177+ let aA = invoke(addressFromStringValue(R), "computeSpotPrice", nil, nil)
178+ if ((aA == aA))
176179 then {
177- let aA = {
178- let aB = az
179- if ($isInstanceOf(aB, "Int"))
180+ let aB = {
181+ let aC = aA
182+ if ($isInstanceOf(aC, "Int"))
180183 then {
181- let aC = aB
182- aC
184+ let aD = aC
185+ aD
183186 }
184187 else throw("Invalid computeSpotPrice result")
185188 }
186- value(aA)
189+ value(aB)
187190 }
188191 else throw("Strict value is not equal to itself.")
189192 }
190193
191194
192-func aD (R,S) = {
193- let az = invoke(addressFromStringValue(R), "computeFeeForTraderWithArtifact", [S, ""], nil)
194- if ((az == az))
195+func aE (R,S) = {
196+ let aA = invoke(addressFromStringValue(R), "computeFeeForTraderWithArtifact", [S, ""], nil)
197+ if ((aA == aA))
195198 then {
196- let aA = {
197- let aB = az
198- if ($isInstanceOf(aB, "(Int, Boolean)"))
199+ let aB = {
200+ let aC = aA
201+ if ($isInstanceOf(aC, "(Int, Boolean)"))
199202 then {
200- let aC = aB
201- aC._1
203+ let aD = aC
204+ aD._1
202205 }
203206 else throw("Invalid computeFeeForTraderWithArtifact result")
204207 }
205- value(aA)
208+ value(aB)
206209 }
207210 else throw("Strict value is not equal to itself.")
208211 }
209212
210213
211-func aE (aF,aG) = if (if ((aG == r))
214+func aF (aG,aH) = if (if ((aH == r))
212215 then true
213- else (aG == q))
214- then if ((aF == t))
216+ else (aH == q))
217+ then if ((aG == t))
215218 then u
216219 else t
217- else aF
220+ else aG
218221
219222
220-func aH (R,S,aI) = {
223+func aI (R,S,aJ) = {
221224 let ak = addressFromStringValue(R)
222- let aJ = ((S + "_") + toString(aI))
223- let aK = H(g, aJ)
224- valueOrElse(getInteger(ak, aK), 0)
225+ let aK = ((S + "_") + toString(aJ))
226+ let aL = H(g, aK)
227+ valueOrElse(getInteger(ak, aL), 0)
225228 }
226229
227230
228-func aL (R,S,aI) = {
231+func aM (R,S,aJ) = {
229232 let ak = addressFromStringValue(R)
230- let aJ = ((S + "_") + toString(aI))
231- let aM = H(f, aJ)
232- valueOrElse(getInteger(ak, aM), 0)
233+ let aK = ((S + "_") + toString(aJ))
234+ let aN = H(f, aK)
235+ valueOrElse(getInteger(ak, aN), 0)
233236 }
234237
235238
236-func aN (aO) = F(aO, A)
239+func aO (aP) = F(aP, A)
237240
238241
239-func aP (L,R,S,aQ,aR,P,aS,aT,aU,aV,aW,aX) = {
240- let aq = makeString([R, S, toString(aQ), toString(aR), toString(P), toString(aS), toString(aT), toString(aU), aV, toString(aW), toString(aX)], ",")
242+func aQ (L,R,S,aR,aS,P,aT,aU,aV,aW,aX,aY,aZ) = {
243+ let aq = makeString([R, S, toString(aR), toString(aS), toString(P), toString(aT), toString(aU), toString(aV), aW, toString(aX), toString(aY), toString(aZ)], ",")
241244 [StringEntry(N(L), aq)]
242245 }
243246
244247
245-func aY (L,R,S,P,aS,aX) = {
246- let aZ = makeString([toString(L), R, S, toString(P), toString(aS), toString(aX)], ",")
247-[StringEntry(O(L, P), aZ)]
248+func ba (L,R,S,P,aT,aY) = {
249+ let bb = makeString([toString(L), R, S, toString(P), toString(aT), toString(aY)], ",")
250+[StringEntry(O(L, P), bb)]
248251 }
249252
250253
251-func ba (bb,R,S) = [StringEntry(T(R, S), bb)]
254+func bc (bd,R,S) = [StringEntry(T(R, S), bd)]
252255
253256
254-func bc (bd,L,R,S,be) = {
255- let bf = if (be)
256- then (bd :+ toString(L))
257- else removeByIndex(bd, valueOrErrorMessage(indexOf(bd, toString(L)), ("No order with id: " + toString(L))))
258- bf
257+func be (bf,L,R,S,bg) = {
258+ let bh = if (bg)
259+ then (bf :+ toString(L))
260+ else removeByIndex(bf, valueOrErrorMessage(indexOf(bf, toString(L)), ("No order with id: " + toString(L))))
261+ bh
259262 }
260263
261264
262-func bg (L,R,S,be) = {
263- let bh = ad(R, S)
264- let bf = bc(bh, L, R, S, be)
265- let bi = makeString(bf, ",")
266- ba(bi, R, S)
265+func bi (L,R,S,bg) = {
266+ let bj = ad(R, S)
267+ let bh = be(bj, L, R, S, bg)
268+ let bk = makeString(bh, ",")
269+ bc(bk, R, S)
267270 }
268271
269272
270-func bj (R,S,bk) = if ((0 > bk))
271- then throw(("Invalid order count: " + toString(bk)))
272- else [IntegerEntry(Q(R, S), bk)]
273+func bl (R,S,bm) = if ((0 > bm))
274+ then throw(("Invalid order count: " + toString(bm)))
275+ else [IntegerEntry(Q(R, S), bm)]
273276
274277
275-func bl (bm) = [IntegerEntry(l, bm)]
278+func bn (bo) = [IntegerEntry(l, bo)]
276279
277280
278-func bn (L) = [BooleanEntry(H(h, toString(L)), true)]
281+func bp (L) = [BooleanEntry(H(h, toString(L)), true)]
279282
280283
281-func bo (L) = [BooleanEntry(H(i, toString(L)), true)]
284+func bq (L) = [BooleanEntry(H(i, toString(L)), true)]
282285
283286
284-func bp (R,S) = {
285- let bq = aH(R, S, t)
286- let br = if ((bq != 0))
287- then aL(R, S, t)
287+func br (R,S) = {
288+ let bs = aI(R, S, t)
289+ let bt = if ((bs != 0))
290+ then aM(R, S, t)
288291 else 0
289- let bs = aH(R, S, u)
290- let bt = if ((bs != 0))
291- then aL(R, S, u)
292+ let bu = aI(R, S, u)
293+ let bv = if ((bu != 0))
294+ then aM(R, S, u)
292295 else 0
293-[br, bt]
296+[bt, bv]
294297 }
295298
296299
297-@Callable(bu)
300+@Callable(bw)
298301 func cleanUpStaleOrders (R,S) = {
299- let bv = ad(R, S)
300- let bw = bp(R, S)
301- func bx (by,L) = {
302- let bz = valueOrErrorMessage(parseInt(L), "Invalid order id")
303- let bA = ap(bz)
304- let bB = bA._1
305- let bC = bA._2
306- let bD = bA._3
307- let bE = bA._4
308- let P = bA._5
309- let bF = bA._6
310- let bG = bA._7
311- let bH = bA._8
312- let bI = bA._9
313- let aW = bA._10
314- let bJ = bA._11
302+ let bx = ad(R, S)
303+ let by = br(R, S)
304+ func bz (bA,L) = {
305+ let bB = valueOrErrorMessage(parseInt(L), "Invalid order id")
306+ let bC = ap(bB)
307+ let bD = bC._1
308+ let bE = bC._2
309+ let bF = bC._3
310+ let bG = bC._4
311+ let P = bC._5
312+ let bH = bC._6
313+ let bI = bC._7
314+ let bJ = bC._8
315+ let bK = bC._9
316+ let aX = bC._10
317+ let bL = bC._11
318+ let aZ = bC._12
315319 if (if (if (if ((P == q))
316320 then true
317321 else (P == r))
318- then (bw[0] != aW)
322+ then (by[0] != aX)
319323 else false)
320- then (bw[1] != aW)
324+ then (by[1] != aX)
321325 else false)
322326 then {
323- let bK = bo(bz)
324- let bL = bc(by._1, bz, R, S, false)
325- $Tuple2(bL, (by._2 ++ bK))
327+ let bM = bq(bB)
328+ let bN = be(bA._1, bB, R, S, false)
329+ $Tuple2(bN, (bA._2 ++ bM))
326330 }
327- else by
331+ else bA
328332 }
329333
330- let bM = {
331- let bN = bv
332- let bO = size(bN)
333- let bP = $Tuple2(bv, nil)
334- func bQ (bR,bS) = if ((bS >= bO))
335- then bR
336- else bx(bR, bN[bS])
334+ let bO = {
335+ let bP = bx
336+ let bQ = size(bP)
337+ let bR = $Tuple2(bx, nil)
338+ func bS (bT,bU) = if ((bU >= bQ))
339+ then bT
340+ else bz(bT, bP[bU])
337341
338- func bT (bR,bS) = if ((bS >= bO))
339- then bR
342+ func bV (bT,bU) = if ((bU >= bQ))
343+ then bT
340344 else throw("List size exceeds 10")
341345
342- bT(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
346+ bV(bS(bS(bS(bS(bS(bS(bS(bS(bS(bS(bR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
343347 }
344- let bU = bM._1
345- let bV = bM._2
346- ((bV ++ bj(R, S, size(bU))) ++ ba(makeString(bU, ","), R, S))
348+ let bW = bO._1
349+ let bX = bO._2
350+ ((bX ++ bl(R, S, size(bW))) ++ bc(makeString(bW, ","), R, S))
347351 }
348352
349353
350354
351-@Callable(bu)
352-func setContext (bW) = if ((bu.caller != this))
355+@Callable(bw)
356+func setContext (bY) = if ((bw.caller != this))
353357 then throw("Only self-call")
354- else [StringEntry(o, bW)]
358+ else [StringEntry(o, bY)]
355359
356360
357361
358-@Callable(bu)
359-func resetContext () = if ((bu.caller != this))
362+@Callable(bw)
363+func resetContext () = if ((bw.caller != this))
360364 then throw("Only self-call")
361365 else [DeleteEntry(o)]
362366
363367
364368
365-@Callable(bu)
366-func initialize (bX) = if (if (Y())
369+@Callable(bw)
370+func initialize (bZ) = if (if (Y())
367371 then true
368- else (bu.caller != this))
372+ else (bw.caller != this))
369373 then throw("Unable to initialize")
370- else [StringEntry(a, toString(addressFromStringValue(bX))), BooleanEntry(p, true)]
374+ else [StringEntry(a, toString(addressFromStringValue(bZ))), BooleanEntry(p, true)]
371375
372376
373377
374-@Callable(bu)
375-func createOrder (R,P,aS,aX,aQ,aR,aU,aV,bY,bZ,ca,cb) = {
376- let S = toString(bu.caller)
377- let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
378- if ((cc == cc))
379- then if ((size(bu.payments) > 1))
378+@Callable(bw)
379+func createOrder (R,P,aT,aY,aR,aS,aV,aW,ca,cb,cc,cd,aZ) = {
380+ let S = toString(bw.caller)
381+ let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
382+ if ((ce == ce))
383+ then if ((size(bw.payments) > 1))
380384 then throw("Invalid createOrder parameters: invalid payment count")
381385 else {
382- let cd = if ((size(bu.payments) == 1))
383- then $Tuple2(toBase58String(valueOrErrorMessage(bu.payments[0].assetId, "Invalid asset id")), bu.payments[0].amount)
386+ let cf = if ((size(bw.payments) == 1))
387+ then $Tuple2(toBase58String(valueOrErrorMessage(bw.payments[0].assetId, "Invalid asset id")), bw.payments[0].amount)
384388 else $Tuple2("", 0)
385- let ce = cd._1
386- let cf = cd._2
387- let cg = invoke(this, "internalCreateOrder", [S, R, P, aS, aX, aQ, aR, aU, aV, ce, cf], nil)
388- if ((cg == cg))
389+ let cg = cf._1
390+ let ch = cf._2
391+ let ci = invoke(this, "internalCreateOrder", [S, R, P, aT, aY, aR, aS, aV, aW, cg, ch, aZ], nil)
392+ if ((ci == ci))
389393 then {
390394 let aj = {
391- let aB = cg
392- if ($isInstanceOf(aB, "Int"))
395+ let aC = ci
396+ if ($isInstanceOf(aC, "Int"))
393397 then {
394- let aC = aB
395- aC
398+ let aD = aC
399+ aD
396400 }
397401 else throw("Invalid ID of created order")
398402 }
399403 if ((P == s))
400404 then {
401- let ch = if ((bY > 0))
402- then {
403- let ci = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, bY, bZ], nil)
404- if ((ci == ci))
405- then nil
406- else throw("Strict value is not equal to itself.")
407- }
408- else nil
409405 let cj = if ((ca > 0))
410406 then {
411- let ck = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, ca, cb], nil)
407+ let ck = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, ca, cb], nil)
412408 if ((ck == ck))
413409 then nil
414410 else throw("Strict value is not equal to itself.")
415411 }
416412 else nil
417- (ch ++ cj)
413+ let cl = if ((cc > 0))
414+ then {
415+ let cm = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, cc, cd], nil)
416+ if ((cm == cm))
417+ then nil
418+ else throw("Strict value is not equal to itself.")
419+ }
420+ else nil
421+ (cj ++ cl)
418422 }
419423 else nil
420424 }
425429
426430
427431
428-@Callable(bu)
429-func increasePositionWithStopLoss (R,aI,aR,cl,aV,bY,bZ,ca,cb) = {
430- let S = toString(bu.caller)
431- let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
432- if ((cc == cc))
432+@Callable(bw)
433+func increasePositionWithStopLoss (R,aJ,aS,cn,aW,ca,cb,cc,cd) = {
434+ let S = toString(bw.caller)
435+ let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
436+ if ((ce == ce))
433437 then if (if (!(Y()))
434438 then true
435439 else !(X(R)))
436440 then throw("Invalid increasePositionWithStopLoss parameters")
437441 else {
438- let cm = aH(R, S, aI)
439- if ((cm != 0))
442+ let co = aI(R, S, aJ)
443+ if ((co != 0))
440444 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
441445 else {
442- let cn = invoke(this, "setContext", [S], nil)
443- if ((cn == cn))
446+ let cp = invoke(this, "setContext", [S], nil)
447+ if ((cp == cp))
444448 then {
445- let co = invoke(addressFromStringValue(R), "increasePosition", [aI, aR, cl, aV], bu.payments)
446- if ((co == co))
449+ let cq = invoke(addressFromStringValue(R), "increasePosition", [aJ, aS, cn, aW], bw.payments)
450+ if ((cq == cq))
447451 then {
448- let cp = invoke(this, "resetContext", nil, nil)
449- if ((cp == cp))
452+ let cr = invoke(this, "resetContext", nil, nil)
453+ if ((cr == cr))
450454 then {
451- let cq = aH(R, S, aI)
452- if ((cq == cq))
455+ let cs = aI(R, S, aJ)
456+ if ((cs == cs))
453457 then {
454- let as = B(cq)
455- let cr = if ((0 > cq))
458+ let as = B(cs)
459+ let ct = if ((0 > cs))
456460 then t
457461 else u
458- let cs = if ((bY > 0))
462+ let cu = if ((ca > 0))
459463 then {
460- let cs = invoke(this, "internalCreateOrder", [S, R, q, bY, bZ, as, 0, cr, aV, "", 0], nil)
461- if ((cs == cs))
464+ let cu = invoke(this, "internalCreateOrder", [S, R, q, ca, cb, as, 0, ct, aW, "", 0, 0], nil)
465+ if ((cu == cu))
462466 then nil
463467 else throw("Strict value is not equal to itself.")
464468 }
465469 else nil
466- if ((cs == cs))
470+ if ((cu == cu))
467471 then {
468- let ct = if ((ca > 0))
472+ let cv = if ((cc > 0))
469473 then {
470- let ct = invoke(this, "internalCreateOrder", [S, R, r, ca, cb, as, 0, cr, aV, "", 0], nil)
471- if ((ct == ct))
474+ let cv = invoke(this, "internalCreateOrder", [S, R, r, cc, cd, as, 0, ct, aW, "", 0, 0], nil)
475+ if ((cv == cv))
472476 then nil
473477 else throw("Strict value is not equal to itself.")
474478 }
475479 else nil
476- if ((ct == ct))
480+ if ((cv == cv))
477481 then nil
478482 else throw("Strict value is not equal to itself.")
479483 }
493497
494498
495499
496-@Callable(bu)
500+@Callable(bw)
497501 func internalMarkOrderExecuted (R,S,L) = if (if (if (!(Y()))
498502 then true
499503 else !(X(R)))
500504 then true
501- else !((bu.caller == this)))
505+ else !((bw.caller == this)))
502506 then throw("Invalid internalMarkOrderExecuted parameters")
503507 else {
504- let cu = (ab(R, S) - 1)
505- ((bj(R, S, cu) ++ bg(L, R, S, false)) ++ bn(L))
508+ let cw = (ab(R, S) - 1)
509+ ((bl(R, S, cw) ++ bi(L, R, S, false)) ++ bp(L))
506510 }
507511
508512
509513
510-@Callable(bu)
511-func internalCreateOrderRequest (S,R,L,P,aS,aX) = if (if (if (if (if (!(Y()))
514+@Callable(bw)
515+func internalCreateOrderRequest (S,R,L,P,aT,aY) = if (if (if (if (if (!(Y()))
512516 then true
513517 else !(X(R)))
514518 then true
515- else (0 >= aS))
519+ else (0 >= aT))
516520 then true
517- else (0 > aX))
521+ else (0 > aY))
518522 then true
519- else !((bu.caller == this)))
523+ else !((bw.caller == this)))
520524 then throw("Invalid internalCreateOrderRequest parameters")
521- else aY(L, R, S, P, aS, aX)
525+ else ba(L, R, S, P, aT, aY)
522526
523527
524528
525-@Callable(bu)
526-func internalCreateOrder (S,R,P,aS,aX,aQ,aR,aU,aV,cv,cw) = {
527- let cx = toString(!(Y()))
528- let cy = toString(!(X(R)))
529- let cz = toString((0 >= aS))
530- let cA = toString((0 > aX))
531- let cB = toString((0 >= aQ))
532- let cC = toString((0 > aR))
533- let cD = toString(!(if ((aU == t))
529+@Callable(bw)
530+func internalCreateOrder (S,R,P,aT,aY,aR,aS,aV,aW,cx,cy,aZ) = if (if (if (if (if (if (if (if (if (if (!(Y()))
531+ then true
532+ else !(X(R)))
533+ then true
534+ else (0 >= aT))
535+ then true
536+ else (0 > aY))
537+ then true
538+ else (0 >= aR))
539+ then true
540+ else (0 > aS))
541+ then true
542+ else !(if ((aV == t))
534543 then true
535- else (aU == u)))
536- let cE = toString(!(if (if ((P == q))
544+ else (aV == u)))
545+ then true
546+ else !(if (if ((P == q))
537547 then true
538548 else (P == r))
539549 then true
540550 else (P == s)))
541- let cF = toString(!((bu.caller == this)))
542- let cG = makeString([cx, cy, cz, cA, cB, cC, cD, cE, cF], ",")
543- if (if (if (if (if (if (if (if (if (!(Y()))
544- then true
545- else !(X(R)))
546- then true
547- else (0 >= aS))
548- then true
549- else (0 > aX))
550- then true
551- else (0 >= aQ))
552- then true
553- else (0 > aR))
554- then true
555- else !(if ((aU == t))
551+ then true
552+ else !((bw.caller == this)))
553+ then true
554+ else (0 > aZ))
555+ then throw("Invalid internalCreateOrder parameters")
556+ else {
557+ let aj = (aa() + 1)
558+ let cz = aF(aV, P)
559+ let cw = (ab(R, S) + 1)
560+ let co = aI(R, S, cz)
561+ let aJ = if (if (if ((co == 0))
556562 then true
557- else (aU == u)))
558- then true
559- else !(if (if ((P == q))
563+ else if ((co > 0))
564+ then (aV == t)
565+ else false)
560566 then true
561- else (P == r))
562- then true
563- else (P == s)))
564- then true
565- else !((bu.caller == this)))
566- then throw(("Invalid internalCreateOrder parameters " + cG))
567- else {
568- let aj = (aa() + 1)
569- let cH = aE(aU, P)
570- let cu = (ab(R, S) + 1)
571- let cm = aH(R, S, cH)
572- let aI = if (if (if ((cm == 0))
567+ else if ((0 > co))
568+ then (aV == u)
569+ else false)
570+ then v
571+ else w
572+ if (if ((co == 0))
573+ then if ((P == q))
573574 then true
574- else if ((cm > 0))
575- then (aU == t)
576- else false)
577- then true
578- else if ((0 > cm))
579- then (aU == u)
580- else false)
581- then v
582- else w
583- if (if ((cm == 0))
584- then if ((P == q))
585- then true
586- else (P == r)
587- else false)
588- then throw("Can not create STOP/TAKE order: no position")
589- else {
590- let cI = if ((aI == v))
591- then if (if ((cv != toBase58String(V())))
575+ else (P == r)
576+ else false)
577+ then throw("Can not create STOP/TAKE order: no position")
578+ else {
579+ let cA = if ((aJ == v))
580+ then if (if ((cx != toBase58String(V())))
581+ then true
582+ else (cy != aR))
583+ then throw("Invalid createLimitOrder parameters: invalid payment")
584+ else {
585+ let cB = invoke(W(), "deposit", nil, [AttachedPayment(V(), cy)])
586+ if ((cB == cB))
587+ then cy
588+ else throw("Strict value is not equal to itself.")
589+ }
590+ else 0
591+ if ((cA == cA))
592+ then {
593+ let ax = if ((co != 0))
594+ then aM(R, S, cz)
595+ else 0
596+ if (if (if ((P == q))
592597 then true
593- else (cw != aQ))
594- then throw("Invalid createLimitOrder parameters: invalid payment")
595- else {
596- let cJ = invoke(W(), "deposit", nil, [AttachedPayment(V(), cw)])
597- if ((cJ == cJ))
598- then cw
599- else throw("Strict value is not equal to itself.")
600- }
601- else 0
602- if ((cI == cI))
603- then {
604- let ax = if ((cm != 0))
605- then aL(R, S, cH)
606- else 0
607- if (if (if ((P == q))
608- then true
609- else (P == r))
610- then (ax == 0)
611- else false)
612- then throw("STOP and TAKE order should be assigned to position with id != 0")
613- else if ((cu > x))
614- then throw("Invalid createLimitOrder parameters: order count")
615- else {
616- let cK = (((aP(aj, R, S, aQ, aR, P, aS, cI, aU, aV, ax, aX) ++ bg(aj, R, S, true)) ++ bj(R, S, cu)) ++ bl(aj))
617- $Tuple2(cK, aj)
618- }
619- }
620- else throw("Strict value is not equal to itself.")
621- }
622- }
623- }
598+ else (P == r))
599+ then (ax == 0)
600+ else false)
601+ then throw("STOP and TAKE order should be assigned to position with id != 0")
602+ else if ((cw > x))
603+ then throw("Invalid createLimitOrder parameters: order count")
604+ else {
605+ let cC = (((aQ(aj, R, S, aR, aS, P, aT, cA, aV, aW, ax, aY, aZ) ++ bi(aj, R, S, true)) ++ bl(R, S, cw)) ++ bn(aj))
606+ $Tuple2(cC, aj)
607+ }
608+ }
609+ else throw("Strict value is not equal to itself.")
610+ }
611+ }
624612
625613
626614
627-@Callable(bu)
615+@Callable(bw)
628616 func cancelOrder (L) = {
629- let cL = ap(L)
630- let R = cL._1
631- let S = cL._2
632- let aQ = cL._3
633- let aR = cL._4
634- let P = cL._5
635- let aS = cL._6
636- let cM = cL._7
637- let aU = cL._8
638- let aV = cL._9
639- let aW = cL._10
640- let aX = cL._11
617+ let cD = ap(L)
618+ let R = cD._1
619+ let S = cD._2
620+ let aR = cD._3
621+ let aS = cD._4
622+ let P = cD._5
623+ let aT = cD._6
624+ let cE = cD._7
625+ let aV = cD._8
626+ let aW = cD._9
627+ let aX = cD._10
628+ let aY = cD._11
641629 if (if (if (!(Y()))
642630 then true
643631 else !(Z(L)))
644632 then true
645- else !((toString(bu.caller) == S)))
633+ else !((toString(bw.caller) == S)))
646634 then throw("Invalid cancelOrder parameters")
647635 else {
648- let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
649- if ((cc == cc))
636+ let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
637+ if ((ce == ce))
650638 then {
651- let cu = (ab(R, S) - 1)
652- let cN = if ((cM > 0))
639+ let cw = (ab(R, S) - 1)
640+ let cF = if ((cE > 0))
653641 then {
654- let cO = invoke(W(), "withdraw", [toBase58String(V()), cM], nil)
655- if ((cO == cO))
642+ let cG = invoke(W(), "withdraw", [toBase58String(V()), cE], nil)
643+ if ((cG == cG))
656644 then nil
657645 else throw("Strict value is not equal to itself.")
658646 }
659647 else nil
660- if ((cN == cN))
661- then (((bo(L) ++ bg(L, R, S, false)) ++ bj(R, S, cu)) ++ (if ((cM > 0))
662- then [ScriptTransfer(bu.caller, cM, V())]
648+ if ((cF == cF))
649+ then (((bq(L) ++ bi(L, R, S, false)) ++ bl(R, S, cw)) ++ (if ((cE > 0))
650+ then [ScriptTransfer(bw.caller, cE, V())]
663651 else nil))
664652 else throw("Strict value is not equal to itself.")
665653 }
669657
670658
671659
672-@Callable(bu)
660+@Callable(bw)
673661 func executeOrder (L) = {
674- let cP = ap(L)
675- let R = cP._1
676- let S = cP._2
677- let aQ = cP._3
678- let aR = cP._4
679- let P = cP._5
680- let aS = cP._6
681- let cM = cP._7
682- let aU = cP._8
683- let aV = cP._9
684- let aW = cP._10
685- let aX = cP._11
686- let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
687- if ((cc == cc))
662+ let cH = ap(L)
663+ let R = cH._1
664+ let S = cH._2
665+ let aR = cH._3
666+ let aS = cH._4
667+ let P = cH._5
668+ let aT = cH._6
669+ let cE = cH._7
670+ let aV = cH._8
671+ let aW = cH._9
672+ let aX = cH._10
673+ let aY = cH._11
674+ let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
675+ if ((ce == ce))
688676 then {
689- let cH = aE(aU, P)
677+ let cz = aF(aV, P)
690678 if (if (!(Y()))
691679 then true
692680 else !(Z(L)))
693681 then throw("Invalid executeOrder parameters")
694682 else {
695- let cm = aH(R, S, cH)
696- if ((cm == cm))
683+ let co = aI(R, S, cz)
684+ if ((co == co))
697685 then {
698- let cQ = if ((cm != 0))
699- then aL(R, S, cH)
686+ let cI = if ((co != 0))
687+ then aM(R, S, cz)
700688 else 0
701- let cR = if ((P == q))
689+ let cJ = if ((P == q))
702690 then {
703- let cS = if ((cm > 0))
691+ let cK = if ((co > 0))
704692 then t
705- else if ((0 > cm))
693+ else if ((0 > co))
706694 then u
707695 else throw("Can not execute STOP order: no open position")
708- let cT = ay(R)
709- let cU = if ((aU == cS))
696+ let cL = az(R)
697+ let cM = if ((aV == cK))
710698 then throw("Can not execute STOP order: reduce only")
711- else if ((cQ != aW))
699+ else if ((cI != aX))
712700 then throw("Can not execute STOP order: position closed")
713- else if ((cS == t))
714- then (aS >= cT)
715- else (cT >= aS)
716- if (cU)
717- then $Tuple3("closePosition", [G(aQ, B(cm)), cH, F(aX, B(cm)), false], nil)
701+ else if ((cK == t))
702+ then (aT >= cL)
703+ else (cL >= aT)
704+ if (cM)
705+ then $Tuple3("closePosition", [G(aR, B(co)), cz, F(aY, B(co)), false], nil)
718706 else throw("Can not execute STOP order: triggerPrice mismatch")
719707 }
720708 else if ((P == r))
721709 then {
722- let cS = if ((cm > 0))
710+ let cK = if ((co > 0))
723711 then t
724- else if ((0 > cm))
712+ else if ((0 > co))
725713 then u
726714 else throw("Can not execute STOP order: no open position")
727- let cT = ay(R)
728- let cU = if ((aU == cS))
715+ let cL = az(R)
716+ let cM = if ((aV == cK))
729717 then throw("Can not execute TAKE order: reduce only")
730- else if ((cQ != aW))
731- then throw(((("Can not execute TAKE order: position closed " + toString(cQ)) + "!=") + toString(aW)))
732- else if ((cS == t))
733- then (cT >= aS)
734- else (aS >= cT)
735- if (cU)
736- then $Tuple3("closePosition", [G(aQ, B(cm)), cH, F(aX, B(cm)), false], nil)
718+ else if ((cI != aX))
719+ then throw(((("Can not execute TAKE order: position closed " + toString(cI)) + "!=") + toString(aX)))
720+ else if ((cK == t))
721+ then (cL >= aT)
722+ else (aT >= cL)
723+ if (cM)
724+ then $Tuple3("closePosition", [G(aR, B(co)), cz, F(aY, B(co)), false], nil)
737725 else throw("Can not execute TAKE order: triggerPrice mismatch")
738726 }
739727 else if ((P == s))
740728 then {
741- let cT = ay(R)
742- let cV = if ((aX == 0))
743- then aN(aS)
744- else B((aS - aX))
745- let cU = if ((cT >= (aS - cV)))
746- then ((aS + cV) >= cT)
729+ let cL = az(R)
730+ let cN = if ((aY == 0))
731+ then aO(aT)
732+ else B((aT - aY))
733+ let cM = if ((cL >= (aT - cN)))
734+ then ((aT + cN) >= cL)
747735 else false
748- if (cU)
736+ if (cM)
749737 then {
750- let cW = (cM - F(cM, aD(R, S)))
751- $Tuple3("increasePosition", [aU, aR, if ((aX == 0))
738+ let cO = (cE - F(cE, aE(R, S)))
739+ $Tuple3("increasePosition", [aV, aS, if ((aY == 0))
752740 then 0
753- else D(cW, aX), aV], [AttachedPayment(V(), cM)])
741+ else D(cO, aY), aW], [AttachedPayment(V(), cE)])
754742 }
755743 else throw("Can not execute LIMIT order: triggerPrice mismatch")
756744 }
757745 else throw(("Invalid order type: " + toString(P)))
758- let cX = cR._1
759- let cY = cR._2
760- let cZ = cR._3
761- let cN = if ((size(cZ) == 1))
746+ let cP = cJ._1
747+ let cQ = cJ._2
748+ let cR = cJ._3
749+ let cF = if ((size(cR) == 1))
762750 then {
763- let cO = invoke(W(), "withdraw", [toBase58String(V()), cZ[0].amount], nil)
764- if ((cO == cO))
751+ let cG = invoke(W(), "withdraw", [toBase58String(V()), cR[0].amount], nil)
752+ if ((cG == cG))
765753 then nil
766754 else throw("Strict value is not equal to itself.")
767755 }
768756 else nil
769- if ((cN == cN))
757+ if ((cF == cF))
770758 then {
771- let cn = invoke(this, "setContext", [S], nil)
772- if ((cn == cn))
759+ let cp = invoke(this, "setContext", [S], nil)
760+ if ((cp == cp))
773761 then {
774- let co = invoke(addressFromStringValue(R), cX, cY, cZ)
775- if ((co == co))
762+ let cq = invoke(addressFromStringValue(R), cP, cQ, cR)
763+ if ((cq == cq))
776764 then {
777- let cp = invoke(this, "resetContext", nil, nil)
778- if ((cp == cp))
765+ let cr = invoke(this, "resetContext", nil, nil)
766+ if ((cr == cr))
779767 then {
780- let da = if ((P == s))
768+ let cS = if ((P == s))
781769 then {
782- let db = aH(R, S, cH)
783- if ((db == db))
770+ let cT = aI(R, S, cz)
771+ if ((cT == cT))
784772 then {
785- let dc = aL(R, S, cH)
786- if ((dc == dc))
773+ let cU = aM(R, S, cz)
774+ if ((cU == cU))
787775 then {
788- let dd = (db - cm)
789- let de = if ((db > 0))
776+ let cV = (cT - co)
777+ let cW = if ((cT > 0))
790778 then u
791779 else t
792- let df = if (af(L, r))
780+ let cX = if (af(L, r))
793781 then {
794- let dg = ag(L, r)
795- let dh = dg._1
796- let di = dg._2
797- let dj = dg._3
798- let dk = dg._4
799- let dl = dg._5
800- let dm = dg._6
801- let cg = invoke(this, "internalCreateOrder", [dj, di, dk, dl, dm, dd, 0, de, "", "", 0], nil)
802- if ((cg == cg))
782+ let cY = ag(L, r)
783+ let cZ = cY._1
784+ let da = cY._2
785+ let db = cY._3
786+ let dc = cY._4
787+ let dd = cY._5
788+ let de = cY._6
789+ let ci = invoke(this, "internalCreateOrder", [db, da, dc, dd, de, cV, 0, cW, "", "", 0, 0], nil)
790+ if ((ci == ci))
803791 then nil
804792 else throw("Strict value is not equal to itself.")
805793 }
806794 else nil
807- if ((df == df))
795+ if ((cX == cX))
808796 then {
809- let dn = if (af(L, q))
797+ let df = if (af(L, q))
810798 then {
811- let do = ag(L, q)
812- let dh = do._1
813- let di = do._2
814- let dj = do._3
815- let dk = do._4
816- let dl = do._5
817- let dm = do._6
818- let cg = invoke(this, "internalCreateOrder", [dj, di, dk, dl, dm, dd, 0, de, "", "", 0], nil)
819- if ((cg == cg))
799+ let dg = ag(L, q)
800+ let cZ = dg._1
801+ let da = dg._2
802+ let db = dg._3
803+ let dc = dg._4
804+ let dd = dg._5
805+ let de = dg._6
806+ let ci = invoke(this, "internalCreateOrder", [db, da, dc, dd, de, cV, 0, cW, "", "", 0, 0], nil)
807+ if ((ci == ci))
820808 then nil
821809 else throw("Strict value is not equal to itself.")
822810 }
823811 else nil
824- if ((dn == dn))
825- then (df ++ dn)
812+ if ((df == df))
813+ then (cX ++ df)
826814 else throw("Strict value is not equal to itself.")
827815 }
828816 else throw("Strict value is not equal to itself.")
832820 else throw("Strict value is not equal to itself.")
833821 }
834822 else nil
835- if ((da == da))
823+ if ((cS == cS))
836824 then {
837- let dp = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
838- if ((dp == dp))
825+ let dh = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
826+ if ((dh == dh))
839827 then nil
840828 else throw("Strict value is not equal to itself.")
841829 }
857845
858846
859847
860-@Callable(bu)
848+@Callable(bw)
861849 func view_canExecuteOrder (L) = {
862- let az = invoke(this, "executeOrder", [L], nil)
863- if ((az == az))
850+ let aA = invoke(this, "executeOrder", [L], nil)
851+ if ((aA == aA))
864852 then throw("Success")
865853 else throw("Strict value is not equal to itself.")
866854 }
867855
868856
869-@Verifier(dq)
870-func dr () = {
871- let ds = getString(this, a)
872- if (isDefined(ds))
857+@Verifier(di)
858+func dj () = {
859+ let dk = getString(this, a)
860+ if (isDefined(dk))
873861 then {
874- let dt = getString(addressFromStringValue(value(ds)), b)
875- if (isDefined(dt))
876- then valueOrElse(getBoolean(addressFromStringValue(value(dt)), ((("status_" + toString(this)) + "_") + toBase58String(dq.id))), false)
862+ let dl = getString(addressFromStringValue(value(dk)), b)
863+ if (isDefined(dl))
864+ then valueOrElse(getBoolean(addressFromStringValue(value(dl)), ((("status_" + toString(this)) + "_") + toBase58String(di.id))), false)
877865 else throw("unable to verify: admin not set in coordinator")
878866 }
879- else sigVerify(dq.bodyBytes, dq.proofs[0], dq.senderPublicKey)
867+ else sigVerify(di.bodyBytes, di.proofs[0], di.senderPublicKey)
880868 }
881869
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_coordinatorAddress"
55
66 let b = "k_admin_address"
77
88 let c = "k_quote_asset"
99
1010 let d = "k_amm"
1111
1212 let e = "k_manager_address"
1313
1414 let f = "k_positionSequence"
1515
1616 let g = "k_positionSize"
1717
1818 let h = "k_executedOrders"
1919
2020 let i = "k_canceledOrders"
2121
2222 let j = "k_order"
2323
2424 let k = "k_orderReq"
2525
2626 let l = "k_lastOrderId"
2727
2828 let m = "k_traderOrderCnt"
2929
3030 let n = "k_traderOrderIds"
3131
3232 let o = "k_sender"
3333
3434 let p = "k_initialized"
3535
3636 let q = 1
3737
3838 let r = 2
3939
4040 let s = 3
4141
4242 let t = 1
4343
4444 let u = 2
4545
4646 let v = 1
4747
4848 let w = 2
4949
5050 let x = 10
5151
5252 let y = lastBlock.timestamp
5353
5454 let z = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
5555
5656 let A = (z / 200)
5757
5858 func B (C) = if ((C > 0))
5959 then C
6060 else -(C)
6161
6262
6363 func D (C,E) = fraction(C, z, E, HALFEVEN)
6464
6565
6666 func F (C,E) = fraction(C, E, z, HALFEVEN)
6767
6868
6969 func G (C,E) = if ((C > E))
7070 then E
7171 else C
7272
7373
7474 func H (I,J) = ((I + "_") + J)
7575
7676
7777 func K (L) = ((h + "_") + toString(L))
7878
7979
8080 func M (L) = ((i + "_") + toString(L))
8181
8282
8383 func N (L) = H(j, toString(L))
8484
8585
8686 func O (L,P) = ((((k + "_") + toString(L)) + "_") + toString(P))
8787
8888
8989 func Q (R,S) = ((((m + "_") + R) + "_") + S)
9090
9191
9292 func T (R,S) = ((((n + "_") + R) + "_") + S)
9393
9494
9595 func U () = valueOrErrorMessage(addressFromString(getStringValue(this, a)), "Coordinator not set")
9696
9797
9898 func V () = fromBase58String(getStringValue(U(), c))
9999
100100
101101 func W () = valueOrErrorMessage(addressFromString(getStringValue(U(), e)), "Manager not set")
102102
103103
104104 func X (J) = valueOrElse(getBoolean(U(), H(d, J)), false)
105105
106106
107107 func Y () = valueOrElse(getBoolean(this, p), false)
108108
109109
110110 func Z (L) = if (valueOrElse(getBoolean(this, K(L)), false))
111111 then throw(("Order already executed: " + toString(L)))
112112 else if (valueOrElse(getBoolean(this, M(L)), false))
113113 then throw(("Order already cancelled: " + toString(L)))
114114 else true
115115
116116
117117 func aa () = valueOrElse(getInteger(this, l), 0)
118118
119119
120120 func ab (R,S) = {
121121 let ac = Q(R, S)
122122 valueOrElse(getInteger(this, ac), 0)
123123 }
124124
125125
126126 func ad (R,S) = {
127127 let ac = T(R, S)
128128 let ae = valueOrElse(getString(this, ac), "")
129129 if ((ae == ""))
130130 then nil
131131 else split(ae, ",")
132132 }
133133
134134
135135 func af (L,P) = {
136136 let ac = O(L, P)
137137 isDefined(getString(this, ac))
138138 }
139139
140140
141141 func ag (L,P) = {
142142 let ac = O(L, P)
143143 let ah = valueOrErrorMessage(getString(this, ac), ("Not order request for key: " + ac))
144144 let ai = split(ah, ",")
145145 let aj = valueOrErrorMessage(parseInt(ai[0]), "Invalid orderId")
146146 let ak = ai[1]
147147 let al = ai[2]
148148 let am = valueOrErrorMessage(parseInt(ai[3]), "Invalid type")
149149 let an = valueOrErrorMessage(parseInt(ai[4]), "Invalid triggerPrice")
150150 let ao = valueOrErrorMessage(parseInt(ai[5]), "Invalid limitPrice")
151151 $Tuple6(aj, ak, al, am, an, ao)
152152 }
153153
154154
155155 func ap (L) = {
156156 let aq = valueOrErrorMessage(getString(this, N(L)), ("Invalid order id: " + toString(L)))
157157 let ar = split(aq, ",")
158158 let ak = ar[0]
159159 let al = ar[1]
160160 let as = valueOrErrorMessage(parseInt(ar[2]), "Invalid amountIn")
161161 let at = valueOrErrorMessage(parseInt(ar[3]), "Invalid leverage")
162162 let am = valueOrErrorMessage(parseInt(ar[4]), "Invalid type")
163163 let an = valueOrErrorMessage(parseInt(ar[5]), "Invalid triggerPrice")
164164 let au = valueOrErrorMessage(parseInt(ar[6]), "Invalid paymentUsdn")
165165 let av = valueOrErrorMessage(parseInt(ar[7]), "Invalid side")
166166 let aw = ar[8]
167167 let ax = valueOrErrorMessage(parseInt(ar[9]), "Invalid positionId")
168168 let ao = valueOrErrorMessage(parseInt(ar[10]), "Invalid limitPrice")
169- $Tuple11(ak, al, as, at, am, an, au, av, aw, ax, ao)
169+ let ay = if ((size(ar) > 11))
170+ then valueOrErrorMessage(parseInt(ar[11]), "Invalid limitPrice")
171+ else 0
172+ $Tuple12(ak, al, as, at, am, an, au, av, aw, ax, ao, ay)
170173 }
171174
172175
173-func ay (R) = {
174- let az = invoke(addressFromStringValue(R), "computeSpotPrice", nil, nil)
175- if ((az == az))
176+func az (R) = {
177+ let aA = invoke(addressFromStringValue(R), "computeSpotPrice", nil, nil)
178+ if ((aA == aA))
176179 then {
177- let aA = {
178- let aB = az
179- if ($isInstanceOf(aB, "Int"))
180+ let aB = {
181+ let aC = aA
182+ if ($isInstanceOf(aC, "Int"))
180183 then {
181- let aC = aB
182- aC
184+ let aD = aC
185+ aD
183186 }
184187 else throw("Invalid computeSpotPrice result")
185188 }
186- value(aA)
189+ value(aB)
187190 }
188191 else throw("Strict value is not equal to itself.")
189192 }
190193
191194
192-func aD (R,S) = {
193- let az = invoke(addressFromStringValue(R), "computeFeeForTraderWithArtifact", [S, ""], nil)
194- if ((az == az))
195+func aE (R,S) = {
196+ let aA = invoke(addressFromStringValue(R), "computeFeeForTraderWithArtifact", [S, ""], nil)
197+ if ((aA == aA))
195198 then {
196- let aA = {
197- let aB = az
198- if ($isInstanceOf(aB, "(Int, Boolean)"))
199+ let aB = {
200+ let aC = aA
201+ if ($isInstanceOf(aC, "(Int, Boolean)"))
199202 then {
200- let aC = aB
201- aC._1
203+ let aD = aC
204+ aD._1
202205 }
203206 else throw("Invalid computeFeeForTraderWithArtifact result")
204207 }
205- value(aA)
208+ value(aB)
206209 }
207210 else throw("Strict value is not equal to itself.")
208211 }
209212
210213
211-func aE (aF,aG) = if (if ((aG == r))
214+func aF (aG,aH) = if (if ((aH == r))
212215 then true
213- else (aG == q))
214- then if ((aF == t))
216+ else (aH == q))
217+ then if ((aG == t))
215218 then u
216219 else t
217- else aF
220+ else aG
218221
219222
220-func aH (R,S,aI) = {
223+func aI (R,S,aJ) = {
221224 let ak = addressFromStringValue(R)
222- let aJ = ((S + "_") + toString(aI))
223- let aK = H(g, aJ)
224- valueOrElse(getInteger(ak, aK), 0)
225+ let aK = ((S + "_") + toString(aJ))
226+ let aL = H(g, aK)
227+ valueOrElse(getInteger(ak, aL), 0)
225228 }
226229
227230
228-func aL (R,S,aI) = {
231+func aM (R,S,aJ) = {
229232 let ak = addressFromStringValue(R)
230- let aJ = ((S + "_") + toString(aI))
231- let aM = H(f, aJ)
232- valueOrElse(getInteger(ak, aM), 0)
233+ let aK = ((S + "_") + toString(aJ))
234+ let aN = H(f, aK)
235+ valueOrElse(getInteger(ak, aN), 0)
233236 }
234237
235238
236-func aN (aO) = F(aO, A)
239+func aO (aP) = F(aP, A)
237240
238241
239-func aP (L,R,S,aQ,aR,P,aS,aT,aU,aV,aW,aX) = {
240- let aq = makeString([R, S, toString(aQ), toString(aR), toString(P), toString(aS), toString(aT), toString(aU), aV, toString(aW), toString(aX)], ",")
242+func aQ (L,R,S,aR,aS,P,aT,aU,aV,aW,aX,aY,aZ) = {
243+ let aq = makeString([R, S, toString(aR), toString(aS), toString(P), toString(aT), toString(aU), toString(aV), aW, toString(aX), toString(aY), toString(aZ)], ",")
241244 [StringEntry(N(L), aq)]
242245 }
243246
244247
245-func aY (L,R,S,P,aS,aX) = {
246- let aZ = makeString([toString(L), R, S, toString(P), toString(aS), toString(aX)], ",")
247-[StringEntry(O(L, P), aZ)]
248+func ba (L,R,S,P,aT,aY) = {
249+ let bb = makeString([toString(L), R, S, toString(P), toString(aT), toString(aY)], ",")
250+[StringEntry(O(L, P), bb)]
248251 }
249252
250253
251-func ba (bb,R,S) = [StringEntry(T(R, S), bb)]
254+func bc (bd,R,S) = [StringEntry(T(R, S), bd)]
252255
253256
254-func bc (bd,L,R,S,be) = {
255- let bf = if (be)
256- then (bd :+ toString(L))
257- else removeByIndex(bd, valueOrErrorMessage(indexOf(bd, toString(L)), ("No order with id: " + toString(L))))
258- bf
257+func be (bf,L,R,S,bg) = {
258+ let bh = if (bg)
259+ then (bf :+ toString(L))
260+ else removeByIndex(bf, valueOrErrorMessage(indexOf(bf, toString(L)), ("No order with id: " + toString(L))))
261+ bh
259262 }
260263
261264
262-func bg (L,R,S,be) = {
263- let bh = ad(R, S)
264- let bf = bc(bh, L, R, S, be)
265- let bi = makeString(bf, ",")
266- ba(bi, R, S)
265+func bi (L,R,S,bg) = {
266+ let bj = ad(R, S)
267+ let bh = be(bj, L, R, S, bg)
268+ let bk = makeString(bh, ",")
269+ bc(bk, R, S)
267270 }
268271
269272
270-func bj (R,S,bk) = if ((0 > bk))
271- then throw(("Invalid order count: " + toString(bk)))
272- else [IntegerEntry(Q(R, S), bk)]
273+func bl (R,S,bm) = if ((0 > bm))
274+ then throw(("Invalid order count: " + toString(bm)))
275+ else [IntegerEntry(Q(R, S), bm)]
273276
274277
275-func bl (bm) = [IntegerEntry(l, bm)]
278+func bn (bo) = [IntegerEntry(l, bo)]
276279
277280
278-func bn (L) = [BooleanEntry(H(h, toString(L)), true)]
281+func bp (L) = [BooleanEntry(H(h, toString(L)), true)]
279282
280283
281-func bo (L) = [BooleanEntry(H(i, toString(L)), true)]
284+func bq (L) = [BooleanEntry(H(i, toString(L)), true)]
282285
283286
284-func bp (R,S) = {
285- let bq = aH(R, S, t)
286- let br = if ((bq != 0))
287- then aL(R, S, t)
287+func br (R,S) = {
288+ let bs = aI(R, S, t)
289+ let bt = if ((bs != 0))
290+ then aM(R, S, t)
288291 else 0
289- let bs = aH(R, S, u)
290- let bt = if ((bs != 0))
291- then aL(R, S, u)
292+ let bu = aI(R, S, u)
293+ let bv = if ((bu != 0))
294+ then aM(R, S, u)
292295 else 0
293-[br, bt]
296+[bt, bv]
294297 }
295298
296299
297-@Callable(bu)
300+@Callable(bw)
298301 func cleanUpStaleOrders (R,S) = {
299- let bv = ad(R, S)
300- let bw = bp(R, S)
301- func bx (by,L) = {
302- let bz = valueOrErrorMessage(parseInt(L), "Invalid order id")
303- let bA = ap(bz)
304- let bB = bA._1
305- let bC = bA._2
306- let bD = bA._3
307- let bE = bA._4
308- let P = bA._5
309- let bF = bA._6
310- let bG = bA._7
311- let bH = bA._8
312- let bI = bA._9
313- let aW = bA._10
314- let bJ = bA._11
302+ let bx = ad(R, S)
303+ let by = br(R, S)
304+ func bz (bA,L) = {
305+ let bB = valueOrErrorMessage(parseInt(L), "Invalid order id")
306+ let bC = ap(bB)
307+ let bD = bC._1
308+ let bE = bC._2
309+ let bF = bC._3
310+ let bG = bC._4
311+ let P = bC._5
312+ let bH = bC._6
313+ let bI = bC._7
314+ let bJ = bC._8
315+ let bK = bC._9
316+ let aX = bC._10
317+ let bL = bC._11
318+ let aZ = bC._12
315319 if (if (if (if ((P == q))
316320 then true
317321 else (P == r))
318- then (bw[0] != aW)
322+ then (by[0] != aX)
319323 else false)
320- then (bw[1] != aW)
324+ then (by[1] != aX)
321325 else false)
322326 then {
323- let bK = bo(bz)
324- let bL = bc(by._1, bz, R, S, false)
325- $Tuple2(bL, (by._2 ++ bK))
327+ let bM = bq(bB)
328+ let bN = be(bA._1, bB, R, S, false)
329+ $Tuple2(bN, (bA._2 ++ bM))
326330 }
327- else by
331+ else bA
328332 }
329333
330- let bM = {
331- let bN = bv
332- let bO = size(bN)
333- let bP = $Tuple2(bv, nil)
334- func bQ (bR,bS) = if ((bS >= bO))
335- then bR
336- else bx(bR, bN[bS])
334+ let bO = {
335+ let bP = bx
336+ let bQ = size(bP)
337+ let bR = $Tuple2(bx, nil)
338+ func bS (bT,bU) = if ((bU >= bQ))
339+ then bT
340+ else bz(bT, bP[bU])
337341
338- func bT (bR,bS) = if ((bS >= bO))
339- then bR
342+ func bV (bT,bU) = if ((bU >= bQ))
343+ then bT
340344 else throw("List size exceeds 10")
341345
342- bT(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
346+ bV(bS(bS(bS(bS(bS(bS(bS(bS(bS(bS(bR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
343347 }
344- let bU = bM._1
345- let bV = bM._2
346- ((bV ++ bj(R, S, size(bU))) ++ ba(makeString(bU, ","), R, S))
348+ let bW = bO._1
349+ let bX = bO._2
350+ ((bX ++ bl(R, S, size(bW))) ++ bc(makeString(bW, ","), R, S))
347351 }
348352
349353
350354
351-@Callable(bu)
352-func setContext (bW) = if ((bu.caller != this))
355+@Callable(bw)
356+func setContext (bY) = if ((bw.caller != this))
353357 then throw("Only self-call")
354- else [StringEntry(o, bW)]
358+ else [StringEntry(o, bY)]
355359
356360
357361
358-@Callable(bu)
359-func resetContext () = if ((bu.caller != this))
362+@Callable(bw)
363+func resetContext () = if ((bw.caller != this))
360364 then throw("Only self-call")
361365 else [DeleteEntry(o)]
362366
363367
364368
365-@Callable(bu)
366-func initialize (bX) = if (if (Y())
369+@Callable(bw)
370+func initialize (bZ) = if (if (Y())
367371 then true
368- else (bu.caller != this))
372+ else (bw.caller != this))
369373 then throw("Unable to initialize")
370- else [StringEntry(a, toString(addressFromStringValue(bX))), BooleanEntry(p, true)]
374+ else [StringEntry(a, toString(addressFromStringValue(bZ))), BooleanEntry(p, true)]
371375
372376
373377
374-@Callable(bu)
375-func createOrder (R,P,aS,aX,aQ,aR,aU,aV,bY,bZ,ca,cb) = {
376- let S = toString(bu.caller)
377- let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
378- if ((cc == cc))
379- then if ((size(bu.payments) > 1))
378+@Callable(bw)
379+func createOrder (R,P,aT,aY,aR,aS,aV,aW,ca,cb,cc,cd,aZ) = {
380+ let S = toString(bw.caller)
381+ let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
382+ if ((ce == ce))
383+ then if ((size(bw.payments) > 1))
380384 then throw("Invalid createOrder parameters: invalid payment count")
381385 else {
382- let cd = if ((size(bu.payments) == 1))
383- then $Tuple2(toBase58String(valueOrErrorMessage(bu.payments[0].assetId, "Invalid asset id")), bu.payments[0].amount)
386+ let cf = if ((size(bw.payments) == 1))
387+ then $Tuple2(toBase58String(valueOrErrorMessage(bw.payments[0].assetId, "Invalid asset id")), bw.payments[0].amount)
384388 else $Tuple2("", 0)
385- let ce = cd._1
386- let cf = cd._2
387- let cg = invoke(this, "internalCreateOrder", [S, R, P, aS, aX, aQ, aR, aU, aV, ce, cf], nil)
388- if ((cg == cg))
389+ let cg = cf._1
390+ let ch = cf._2
391+ let ci = invoke(this, "internalCreateOrder", [S, R, P, aT, aY, aR, aS, aV, aW, cg, ch, aZ], nil)
392+ if ((ci == ci))
389393 then {
390394 let aj = {
391- let aB = cg
392- if ($isInstanceOf(aB, "Int"))
395+ let aC = ci
396+ if ($isInstanceOf(aC, "Int"))
393397 then {
394- let aC = aB
395- aC
398+ let aD = aC
399+ aD
396400 }
397401 else throw("Invalid ID of created order")
398402 }
399403 if ((P == s))
400404 then {
401- let ch = if ((bY > 0))
402- then {
403- let ci = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, bY, bZ], nil)
404- if ((ci == ci))
405- then nil
406- else throw("Strict value is not equal to itself.")
407- }
408- else nil
409405 let cj = if ((ca > 0))
410406 then {
411- let ck = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, ca, cb], nil)
407+ let ck = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, ca, cb], nil)
412408 if ((ck == ck))
413409 then nil
414410 else throw("Strict value is not equal to itself.")
415411 }
416412 else nil
417- (ch ++ cj)
413+ let cl = if ((cc > 0))
414+ then {
415+ let cm = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, cc, cd], nil)
416+ if ((cm == cm))
417+ then nil
418+ else throw("Strict value is not equal to itself.")
419+ }
420+ else nil
421+ (cj ++ cl)
418422 }
419423 else nil
420424 }
421425 else throw("Strict value is not equal to itself.")
422426 }
423427 else throw("Strict value is not equal to itself.")
424428 }
425429
426430
427431
428-@Callable(bu)
429-func increasePositionWithStopLoss (R,aI,aR,cl,aV,bY,bZ,ca,cb) = {
430- let S = toString(bu.caller)
431- let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
432- if ((cc == cc))
432+@Callable(bw)
433+func increasePositionWithStopLoss (R,aJ,aS,cn,aW,ca,cb,cc,cd) = {
434+ let S = toString(bw.caller)
435+ let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
436+ if ((ce == ce))
433437 then if (if (!(Y()))
434438 then true
435439 else !(X(R)))
436440 then throw("Invalid increasePositionWithStopLoss parameters")
437441 else {
438- let cm = aH(R, S, aI)
439- if ((cm != 0))
442+ let co = aI(R, S, aJ)
443+ if ((co != 0))
440444 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
441445 else {
442- let cn = invoke(this, "setContext", [S], nil)
443- if ((cn == cn))
446+ let cp = invoke(this, "setContext", [S], nil)
447+ if ((cp == cp))
444448 then {
445- let co = invoke(addressFromStringValue(R), "increasePosition", [aI, aR, cl, aV], bu.payments)
446- if ((co == co))
449+ let cq = invoke(addressFromStringValue(R), "increasePosition", [aJ, aS, cn, aW], bw.payments)
450+ if ((cq == cq))
447451 then {
448- let cp = invoke(this, "resetContext", nil, nil)
449- if ((cp == cp))
452+ let cr = invoke(this, "resetContext", nil, nil)
453+ if ((cr == cr))
450454 then {
451- let cq = aH(R, S, aI)
452- if ((cq == cq))
455+ let cs = aI(R, S, aJ)
456+ if ((cs == cs))
453457 then {
454- let as = B(cq)
455- let cr = if ((0 > cq))
458+ let as = B(cs)
459+ let ct = if ((0 > cs))
456460 then t
457461 else u
458- let cs = if ((bY > 0))
462+ let cu = if ((ca > 0))
459463 then {
460- let cs = invoke(this, "internalCreateOrder", [S, R, q, bY, bZ, as, 0, cr, aV, "", 0], nil)
461- if ((cs == cs))
464+ let cu = invoke(this, "internalCreateOrder", [S, R, q, ca, cb, as, 0, ct, aW, "", 0, 0], nil)
465+ if ((cu == cu))
462466 then nil
463467 else throw("Strict value is not equal to itself.")
464468 }
465469 else nil
466- if ((cs == cs))
470+ if ((cu == cu))
467471 then {
468- let ct = if ((ca > 0))
472+ let cv = if ((cc > 0))
469473 then {
470- let ct = invoke(this, "internalCreateOrder", [S, R, r, ca, cb, as, 0, cr, aV, "", 0], nil)
471- if ((ct == ct))
474+ let cv = invoke(this, "internalCreateOrder", [S, R, r, cc, cd, as, 0, ct, aW, "", 0, 0], nil)
475+ if ((cv == cv))
472476 then nil
473477 else throw("Strict value is not equal to itself.")
474478 }
475479 else nil
476- if ((ct == ct))
480+ if ((cv == cv))
477481 then nil
478482 else throw("Strict value is not equal to itself.")
479483 }
480484 else throw("Strict value is not equal to itself.")
481485 }
482486 else throw("Strict value is not equal to itself.")
483487 }
484488 else throw("Strict value is not equal to itself.")
485489 }
486490 else throw("Strict value is not equal to itself.")
487491 }
488492 else throw("Strict value is not equal to itself.")
489493 }
490494 }
491495 else throw("Strict value is not equal to itself.")
492496 }
493497
494498
495499
496-@Callable(bu)
500+@Callable(bw)
497501 func internalMarkOrderExecuted (R,S,L) = if (if (if (!(Y()))
498502 then true
499503 else !(X(R)))
500504 then true
501- else !((bu.caller == this)))
505+ else !((bw.caller == this)))
502506 then throw("Invalid internalMarkOrderExecuted parameters")
503507 else {
504- let cu = (ab(R, S) - 1)
505- ((bj(R, S, cu) ++ bg(L, R, S, false)) ++ bn(L))
508+ let cw = (ab(R, S) - 1)
509+ ((bl(R, S, cw) ++ bi(L, R, S, false)) ++ bp(L))
506510 }
507511
508512
509513
510-@Callable(bu)
511-func internalCreateOrderRequest (S,R,L,P,aS,aX) = if (if (if (if (if (!(Y()))
514+@Callable(bw)
515+func internalCreateOrderRequest (S,R,L,P,aT,aY) = if (if (if (if (if (!(Y()))
512516 then true
513517 else !(X(R)))
514518 then true
515- else (0 >= aS))
519+ else (0 >= aT))
516520 then true
517- else (0 > aX))
521+ else (0 > aY))
518522 then true
519- else !((bu.caller == this)))
523+ else !((bw.caller == this)))
520524 then throw("Invalid internalCreateOrderRequest parameters")
521- else aY(L, R, S, P, aS, aX)
525+ else ba(L, R, S, P, aT, aY)
522526
523527
524528
525-@Callable(bu)
526-func internalCreateOrder (S,R,P,aS,aX,aQ,aR,aU,aV,cv,cw) = {
527- let cx = toString(!(Y()))
528- let cy = toString(!(X(R)))
529- let cz = toString((0 >= aS))
530- let cA = toString((0 > aX))
531- let cB = toString((0 >= aQ))
532- let cC = toString((0 > aR))
533- let cD = toString(!(if ((aU == t))
529+@Callable(bw)
530+func internalCreateOrder (S,R,P,aT,aY,aR,aS,aV,aW,cx,cy,aZ) = if (if (if (if (if (if (if (if (if (if (!(Y()))
531+ then true
532+ else !(X(R)))
533+ then true
534+ else (0 >= aT))
535+ then true
536+ else (0 > aY))
537+ then true
538+ else (0 >= aR))
539+ then true
540+ else (0 > aS))
541+ then true
542+ else !(if ((aV == t))
534543 then true
535- else (aU == u)))
536- let cE = toString(!(if (if ((P == q))
544+ else (aV == u)))
545+ then true
546+ else !(if (if ((P == q))
537547 then true
538548 else (P == r))
539549 then true
540550 else (P == s)))
541- let cF = toString(!((bu.caller == this)))
542- let cG = makeString([cx, cy, cz, cA, cB, cC, cD, cE, cF], ",")
543- if (if (if (if (if (if (if (if (if (!(Y()))
544- then true
545- else !(X(R)))
546- then true
547- else (0 >= aS))
548- then true
549- else (0 > aX))
550- then true
551- else (0 >= aQ))
552- then true
553- else (0 > aR))
554- then true
555- else !(if ((aU == t))
551+ then true
552+ else !((bw.caller == this)))
553+ then true
554+ else (0 > aZ))
555+ then throw("Invalid internalCreateOrder parameters")
556+ else {
557+ let aj = (aa() + 1)
558+ let cz = aF(aV, P)
559+ let cw = (ab(R, S) + 1)
560+ let co = aI(R, S, cz)
561+ let aJ = if (if (if ((co == 0))
556562 then true
557- else (aU == u)))
558- then true
559- else !(if (if ((P == q))
563+ else if ((co > 0))
564+ then (aV == t)
565+ else false)
560566 then true
561- else (P == r))
562- then true
563- else (P == s)))
564- then true
565- else !((bu.caller == this)))
566- then throw(("Invalid internalCreateOrder parameters " + cG))
567- else {
568- let aj = (aa() + 1)
569- let cH = aE(aU, P)
570- let cu = (ab(R, S) + 1)
571- let cm = aH(R, S, cH)
572- let aI = if (if (if ((cm == 0))
567+ else if ((0 > co))
568+ then (aV == u)
569+ else false)
570+ then v
571+ else w
572+ if (if ((co == 0))
573+ then if ((P == q))
573574 then true
574- else if ((cm > 0))
575- then (aU == t)
576- else false)
577- then true
578- else if ((0 > cm))
579- then (aU == u)
580- else false)
581- then v
582- else w
583- if (if ((cm == 0))
584- then if ((P == q))
585- then true
586- else (P == r)
587- else false)
588- then throw("Can not create STOP/TAKE order: no position")
589- else {
590- let cI = if ((aI == v))
591- then if (if ((cv != toBase58String(V())))
575+ else (P == r)
576+ else false)
577+ then throw("Can not create STOP/TAKE order: no position")
578+ else {
579+ let cA = if ((aJ == v))
580+ then if (if ((cx != toBase58String(V())))
581+ then true
582+ else (cy != aR))
583+ then throw("Invalid createLimitOrder parameters: invalid payment")
584+ else {
585+ let cB = invoke(W(), "deposit", nil, [AttachedPayment(V(), cy)])
586+ if ((cB == cB))
587+ then cy
588+ else throw("Strict value is not equal to itself.")
589+ }
590+ else 0
591+ if ((cA == cA))
592+ then {
593+ let ax = if ((co != 0))
594+ then aM(R, S, cz)
595+ else 0
596+ if (if (if ((P == q))
592597 then true
593- else (cw != aQ))
594- then throw("Invalid createLimitOrder parameters: invalid payment")
595- else {
596- let cJ = invoke(W(), "deposit", nil, [AttachedPayment(V(), cw)])
597- if ((cJ == cJ))
598- then cw
599- else throw("Strict value is not equal to itself.")
600- }
601- else 0
602- if ((cI == cI))
603- then {
604- let ax = if ((cm != 0))
605- then aL(R, S, cH)
606- else 0
607- if (if (if ((P == q))
608- then true
609- else (P == r))
610- then (ax == 0)
611- else false)
612- then throw("STOP and TAKE order should be assigned to position with id != 0")
613- else if ((cu > x))
614- then throw("Invalid createLimitOrder parameters: order count")
615- else {
616- let cK = (((aP(aj, R, S, aQ, aR, P, aS, cI, aU, aV, ax, aX) ++ bg(aj, R, S, true)) ++ bj(R, S, cu)) ++ bl(aj))
617- $Tuple2(cK, aj)
618- }
619- }
620- else throw("Strict value is not equal to itself.")
621- }
622- }
623- }
598+ else (P == r))
599+ then (ax == 0)
600+ else false)
601+ then throw("STOP and TAKE order should be assigned to position with id != 0")
602+ else if ((cw > x))
603+ then throw("Invalid createLimitOrder parameters: order count")
604+ else {
605+ let cC = (((aQ(aj, R, S, aR, aS, P, aT, cA, aV, aW, ax, aY, aZ) ++ bi(aj, R, S, true)) ++ bl(R, S, cw)) ++ bn(aj))
606+ $Tuple2(cC, aj)
607+ }
608+ }
609+ else throw("Strict value is not equal to itself.")
610+ }
611+ }
624612
625613
626614
627-@Callable(bu)
615+@Callable(bw)
628616 func cancelOrder (L) = {
629- let cL = ap(L)
630- let R = cL._1
631- let S = cL._2
632- let aQ = cL._3
633- let aR = cL._4
634- let P = cL._5
635- let aS = cL._6
636- let cM = cL._7
637- let aU = cL._8
638- let aV = cL._9
639- let aW = cL._10
640- let aX = cL._11
617+ let cD = ap(L)
618+ let R = cD._1
619+ let S = cD._2
620+ let aR = cD._3
621+ let aS = cD._4
622+ let P = cD._5
623+ let aT = cD._6
624+ let cE = cD._7
625+ let aV = cD._8
626+ let aW = cD._9
627+ let aX = cD._10
628+ let aY = cD._11
641629 if (if (if (!(Y()))
642630 then true
643631 else !(Z(L)))
644632 then true
645- else !((toString(bu.caller) == S)))
633+ else !((toString(bw.caller) == S)))
646634 then throw("Invalid cancelOrder parameters")
647635 else {
648- let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
649- if ((cc == cc))
636+ let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
637+ if ((ce == ce))
650638 then {
651- let cu = (ab(R, S) - 1)
652- let cN = if ((cM > 0))
639+ let cw = (ab(R, S) - 1)
640+ let cF = if ((cE > 0))
653641 then {
654- let cO = invoke(W(), "withdraw", [toBase58String(V()), cM], nil)
655- if ((cO == cO))
642+ let cG = invoke(W(), "withdraw", [toBase58String(V()), cE], nil)
643+ if ((cG == cG))
656644 then nil
657645 else throw("Strict value is not equal to itself.")
658646 }
659647 else nil
660- if ((cN == cN))
661- then (((bo(L) ++ bg(L, R, S, false)) ++ bj(R, S, cu)) ++ (if ((cM > 0))
662- then [ScriptTransfer(bu.caller, cM, V())]
648+ if ((cF == cF))
649+ then (((bq(L) ++ bi(L, R, S, false)) ++ bl(R, S, cw)) ++ (if ((cE > 0))
650+ then [ScriptTransfer(bw.caller, cE, V())]
663651 else nil))
664652 else throw("Strict value is not equal to itself.")
665653 }
666654 else throw("Strict value is not equal to itself.")
667655 }
668656 }
669657
670658
671659
672-@Callable(bu)
660+@Callable(bw)
673661 func executeOrder (L) = {
674- let cP = ap(L)
675- let R = cP._1
676- let S = cP._2
677- let aQ = cP._3
678- let aR = cP._4
679- let P = cP._5
680- let aS = cP._6
681- let cM = cP._7
682- let aU = cP._8
683- let aV = cP._9
684- let aW = cP._10
685- let aX = cP._11
686- let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
687- if ((cc == cc))
662+ let cH = ap(L)
663+ let R = cH._1
664+ let S = cH._2
665+ let aR = cH._3
666+ let aS = cH._4
667+ let P = cH._5
668+ let aT = cH._6
669+ let cE = cH._7
670+ let aV = cH._8
671+ let aW = cH._9
672+ let aX = cH._10
673+ let aY = cH._11
674+ let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
675+ if ((ce == ce))
688676 then {
689- let cH = aE(aU, P)
677+ let cz = aF(aV, P)
690678 if (if (!(Y()))
691679 then true
692680 else !(Z(L)))
693681 then throw("Invalid executeOrder parameters")
694682 else {
695- let cm = aH(R, S, cH)
696- if ((cm == cm))
683+ let co = aI(R, S, cz)
684+ if ((co == co))
697685 then {
698- let cQ = if ((cm != 0))
699- then aL(R, S, cH)
686+ let cI = if ((co != 0))
687+ then aM(R, S, cz)
700688 else 0
701- let cR = if ((P == q))
689+ let cJ = if ((P == q))
702690 then {
703- let cS = if ((cm > 0))
691+ let cK = if ((co > 0))
704692 then t
705- else if ((0 > cm))
693+ else if ((0 > co))
706694 then u
707695 else throw("Can not execute STOP order: no open position")
708- let cT = ay(R)
709- let cU = if ((aU == cS))
696+ let cL = az(R)
697+ let cM = if ((aV == cK))
710698 then throw("Can not execute STOP order: reduce only")
711- else if ((cQ != aW))
699+ else if ((cI != aX))
712700 then throw("Can not execute STOP order: position closed")
713- else if ((cS == t))
714- then (aS >= cT)
715- else (cT >= aS)
716- if (cU)
717- then $Tuple3("closePosition", [G(aQ, B(cm)), cH, F(aX, B(cm)), false], nil)
701+ else if ((cK == t))
702+ then (aT >= cL)
703+ else (cL >= aT)
704+ if (cM)
705+ then $Tuple3("closePosition", [G(aR, B(co)), cz, F(aY, B(co)), false], nil)
718706 else throw("Can not execute STOP order: triggerPrice mismatch")
719707 }
720708 else if ((P == r))
721709 then {
722- let cS = if ((cm > 0))
710+ let cK = if ((co > 0))
723711 then t
724- else if ((0 > cm))
712+ else if ((0 > co))
725713 then u
726714 else throw("Can not execute STOP order: no open position")
727- let cT = ay(R)
728- let cU = if ((aU == cS))
715+ let cL = az(R)
716+ let cM = if ((aV == cK))
729717 then throw("Can not execute TAKE order: reduce only")
730- else if ((cQ != aW))
731- then throw(((("Can not execute TAKE order: position closed " + toString(cQ)) + "!=") + toString(aW)))
732- else if ((cS == t))
733- then (cT >= aS)
734- else (aS >= cT)
735- if (cU)
736- then $Tuple3("closePosition", [G(aQ, B(cm)), cH, F(aX, B(cm)), false], nil)
718+ else if ((cI != aX))
719+ then throw(((("Can not execute TAKE order: position closed " + toString(cI)) + "!=") + toString(aX)))
720+ else if ((cK == t))
721+ then (cL >= aT)
722+ else (aT >= cL)
723+ if (cM)
724+ then $Tuple3("closePosition", [G(aR, B(co)), cz, F(aY, B(co)), false], nil)
737725 else throw("Can not execute TAKE order: triggerPrice mismatch")
738726 }
739727 else if ((P == s))
740728 then {
741- let cT = ay(R)
742- let cV = if ((aX == 0))
743- then aN(aS)
744- else B((aS - aX))
745- let cU = if ((cT >= (aS - cV)))
746- then ((aS + cV) >= cT)
729+ let cL = az(R)
730+ let cN = if ((aY == 0))
731+ then aO(aT)
732+ else B((aT - aY))
733+ let cM = if ((cL >= (aT - cN)))
734+ then ((aT + cN) >= cL)
747735 else false
748- if (cU)
736+ if (cM)
749737 then {
750- let cW = (cM - F(cM, aD(R, S)))
751- $Tuple3("increasePosition", [aU, aR, if ((aX == 0))
738+ let cO = (cE - F(cE, aE(R, S)))
739+ $Tuple3("increasePosition", [aV, aS, if ((aY == 0))
752740 then 0
753- else D(cW, aX), aV], [AttachedPayment(V(), cM)])
741+ else D(cO, aY), aW], [AttachedPayment(V(), cE)])
754742 }
755743 else throw("Can not execute LIMIT order: triggerPrice mismatch")
756744 }
757745 else throw(("Invalid order type: " + toString(P)))
758- let cX = cR._1
759- let cY = cR._2
760- let cZ = cR._3
761- let cN = if ((size(cZ) == 1))
746+ let cP = cJ._1
747+ let cQ = cJ._2
748+ let cR = cJ._3
749+ let cF = if ((size(cR) == 1))
762750 then {
763- let cO = invoke(W(), "withdraw", [toBase58String(V()), cZ[0].amount], nil)
764- if ((cO == cO))
751+ let cG = invoke(W(), "withdraw", [toBase58String(V()), cR[0].amount], nil)
752+ if ((cG == cG))
765753 then nil
766754 else throw("Strict value is not equal to itself.")
767755 }
768756 else nil
769- if ((cN == cN))
757+ if ((cF == cF))
770758 then {
771- let cn = invoke(this, "setContext", [S], nil)
772- if ((cn == cn))
759+ let cp = invoke(this, "setContext", [S], nil)
760+ if ((cp == cp))
773761 then {
774- let co = invoke(addressFromStringValue(R), cX, cY, cZ)
775- if ((co == co))
762+ let cq = invoke(addressFromStringValue(R), cP, cQ, cR)
763+ if ((cq == cq))
776764 then {
777- let cp = invoke(this, "resetContext", nil, nil)
778- if ((cp == cp))
765+ let cr = invoke(this, "resetContext", nil, nil)
766+ if ((cr == cr))
779767 then {
780- let da = if ((P == s))
768+ let cS = if ((P == s))
781769 then {
782- let db = aH(R, S, cH)
783- if ((db == db))
770+ let cT = aI(R, S, cz)
771+ if ((cT == cT))
784772 then {
785- let dc = aL(R, S, cH)
786- if ((dc == dc))
773+ let cU = aM(R, S, cz)
774+ if ((cU == cU))
787775 then {
788- let dd = (db - cm)
789- let de = if ((db > 0))
776+ let cV = (cT - co)
777+ let cW = if ((cT > 0))
790778 then u
791779 else t
792- let df = if (af(L, r))
780+ let cX = if (af(L, r))
793781 then {
794- let dg = ag(L, r)
795- let dh = dg._1
796- let di = dg._2
797- let dj = dg._3
798- let dk = dg._4
799- let dl = dg._5
800- let dm = dg._6
801- let cg = invoke(this, "internalCreateOrder", [dj, di, dk, dl, dm, dd, 0, de, "", "", 0], nil)
802- if ((cg == cg))
782+ let cY = ag(L, r)
783+ let cZ = cY._1
784+ let da = cY._2
785+ let db = cY._3
786+ let dc = cY._4
787+ let dd = cY._5
788+ let de = cY._6
789+ let ci = invoke(this, "internalCreateOrder", [db, da, dc, dd, de, cV, 0, cW, "", "", 0, 0], nil)
790+ if ((ci == ci))
803791 then nil
804792 else throw("Strict value is not equal to itself.")
805793 }
806794 else nil
807- if ((df == df))
795+ if ((cX == cX))
808796 then {
809- let dn = if (af(L, q))
797+ let df = if (af(L, q))
810798 then {
811- let do = ag(L, q)
812- let dh = do._1
813- let di = do._2
814- let dj = do._3
815- let dk = do._4
816- let dl = do._5
817- let dm = do._6
818- let cg = invoke(this, "internalCreateOrder", [dj, di, dk, dl, dm, dd, 0, de, "", "", 0], nil)
819- if ((cg == cg))
799+ let dg = ag(L, q)
800+ let cZ = dg._1
801+ let da = dg._2
802+ let db = dg._3
803+ let dc = dg._4
804+ let dd = dg._5
805+ let de = dg._6
806+ let ci = invoke(this, "internalCreateOrder", [db, da, dc, dd, de, cV, 0, cW, "", "", 0, 0], nil)
807+ if ((ci == ci))
820808 then nil
821809 else throw("Strict value is not equal to itself.")
822810 }
823811 else nil
824- if ((dn == dn))
825- then (df ++ dn)
812+ if ((df == df))
813+ then (cX ++ df)
826814 else throw("Strict value is not equal to itself.")
827815 }
828816 else throw("Strict value is not equal to itself.")
829817 }
830818 else throw("Strict value is not equal to itself.")
831819 }
832820 else throw("Strict value is not equal to itself.")
833821 }
834822 else nil
835- if ((da == da))
823+ if ((cS == cS))
836824 then {
837- let dp = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
838- if ((dp == dp))
825+ let dh = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
826+ if ((dh == dh))
839827 then nil
840828 else throw("Strict value is not equal to itself.")
841829 }
842830 else throw("Strict value is not equal to itself.")
843831 }
844832 else throw("Strict value is not equal to itself.")
845833 }
846834 else throw("Strict value is not equal to itself.")
847835 }
848836 else throw("Strict value is not equal to itself.")
849837 }
850838 else throw("Strict value is not equal to itself.")
851839 }
852840 else throw("Strict value is not equal to itself.")
853841 }
854842 }
855843 else throw("Strict value is not equal to itself.")
856844 }
857845
858846
859847
860-@Callable(bu)
848+@Callable(bw)
861849 func view_canExecuteOrder (L) = {
862- let az = invoke(this, "executeOrder", [L], nil)
863- if ((az == az))
850+ let aA = invoke(this, "executeOrder", [L], nil)
851+ if ((aA == aA))
864852 then throw("Success")
865853 else throw("Strict value is not equal to itself.")
866854 }
867855
868856
869-@Verifier(dq)
870-func dr () = {
871- let ds = getString(this, a)
872- if (isDefined(ds))
857+@Verifier(di)
858+func dj () = {
859+ let dk = getString(this, a)
860+ if (isDefined(dk))
873861 then {
874- let dt = getString(addressFromStringValue(value(ds)), b)
875- if (isDefined(dt))
876- then valueOrElse(getBoolean(addressFromStringValue(value(dt)), ((("status_" + toString(this)) + "_") + toBase58String(dq.id))), false)
862+ let dl = getString(addressFromStringValue(value(dk)), b)
863+ if (isDefined(dl))
864+ then valueOrElse(getBoolean(addressFromStringValue(value(dl)), ((("status_" + toString(this)) + "_") + toBase58String(di.id))), false)
877865 else throw("unable to verify: admin not set in coordinator")
878866 }
879- else sigVerify(dq.bodyBytes, dq.proofs[0], dq.senderPublicKey)
867+ else sigVerify(di.bodyBytes, di.proofs[0], di.senderPublicKey)
880868 }
881869

github/deemru/w8io/873ac7e 
344.73 ms