tx · 2VkR1ADyCjUa3VgPDuYD6Lrz8UowiEFDFPh2p9ptL6QD 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS: -0.04500000 Waves 2023.07.05 16:20 [2652666] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves
{ "type": 13, "id": "2VkR1ADyCjUa3VgPDuYD6Lrz8UowiEFDFPh2p9ptL6QD", "fee": 4500000, "feeAssetId": null, "timestamp": 1688563270923, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "66rkPdpswGH9GXu6MGQ81bcVrAcESndRZoLZz1ne6RRYHdCJ4ffS3TV2dvg1aQLCL3fPyndiQ1d4UNXbPJTNccpr" ], "script": "base64:BgKdAQgCEgcKBQgBCAEBEgMKAQgSAwoBCBIECgIICBIFCgMIGBgSBQoDCAEIEgQKAggBEgYKBAEICAESBQoDAQgIEgsKCQgICAgICAgICBIDCgEIEgMKAQgSBQoDCAgBEgYKBAgBCAgSDgoMCAgIAQQRGBgRAQEYEgoKCAgICAEECAEYEg4KDAgICAEEGBgYGBgBGBILCgkICAEBAQEBAQRrAAdTRl9QT09MAgJTRgAHV1hfUE9PTAICV1gAD0NBUF9GRUVfTk9fTE9BTgIJY2FwTm9Mb2FuAAxDQVBfRkVFX0xPQU4CB2NhcExvYW4AFFNUT1BMT1NTX0ZFRV9OT19MT0FOAg5zdG9wTG9zc05vTG9hbgANU1RPUExPU1NfTE9BTgIMc3RvcExvc3NMb2FuAAhMT0FOX0ZFRQIEbG9hbgALTk9fTE9BTl9GRUUCBm5vTG9hbgAGTk9fRkVFAgVub0ZlZQAGU0NBTEU4AIDC1y8AB1NDQUxFMTAAgMivoCUAB1NDQUxFMTYJALYCAQCAgIT+pt7hEQAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQAEmtTRlBvb2xTaGFyZVN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AAprU0ZQb29sRmVlAgpjb21taXNzaW9uAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJQb3NpdGlvblBvb2wCE191c2VyX3Bvc2l0aW9uX3Bvb2wAEWtVc2VyQm9ycm93QW1vdW50AhxfdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYW1vdW50ABJrVXNlckJvcnJvd0Fzc2V0SWQCHl91c2VyX3Bvc2l0aW9uX2JvcnJvd19hc3NldF9pZAAQa1VzZXJQb3NpdGlvbk51bQIVX3VzZXJfcG9zaXRpb25fbnVtYmVyABVrVXNlclBvc2l0aW9uSW50ZXJlc3QCF191c2VyX3Bvc2l0aW9uX2ludGVyZXN0AAprUG9vbFRvdGFsAgtfcG9vbF90b3RhbAAOa1Bvb2xUb3RhbExvYW4CEF9wb29sX3RvdGFsX2xvYW4AEWtQb29sSW50ZXJlc3RMb2FuAhNfcG9vbF9pbnRlcmVzdF9sb2FuABNrUG9vbEludGVyZXN0Tm9Mb2FuAhZfcG9vbF9pbnRlcmVzdF9ub19sb2FuAA5rUG9vbENhbkJvcnJvdwIQX3Bvb2xfY2FuX2JvcnJvdwAVa0F4bHlJbkZlZVdpdGhvdXRMb2FuAhZfYXhseV9mZWVfd2l0aG91dF9sb2FuABJrQXhseUluRmVlV2l0aExvYW4CE19heGx5X2ZlZV93aXRoX2xvYW4AEWtBeGx5Tm9Mb2FuQ2FwRmVlAhdfYXhseV9mZWVfY2FwX3dpdGhfbG9hbgATa0F4bHlXaXRoTG9hbkNhcEZlZQIVX2F4bHlfZmVlX2NhcF9ub19sb2FuABZrQXhseVN0b3BMb3NzTm9Mb2FuRmVlAhxfYXhseV9mZWVfc3RvcGxvc3Nfd2l0aF9sb2FuABRrQXhseVN0b3BMb3NzTG9hbkZlZQIaX2F4bHlfZmVlX3N0b3Bsb3NzX25vX2xvYW4ACmtSZXF1ZXN0SWQCC19yZXF1ZXN0X2lkAAxrUmVxdWVzdEl0ZXICDXJlcXVlc3RzX2l0ZXIABWtQb29sAgVwb29sXwAKa1NoYXJlUG9vbAIOX3Bvb2xfc2hhcmVfaWQADmtQb29sQ2FwQ2hhbmdlAhBfcG9vbF9jYXBfY2hhbmdlAA9rVG9rZW5MYXN0UHJpY2UCCmxhc3RfcHJpY2UADmtQcmljZUluT3JhY2xlAgdfdHdhcDVCAA1rVXNlclN0b3BMb3NzAgpfc3RvcF9sb3NzAAlrTW9uZXlCb3gCDmF4bHlfbW9uZXlfYm94AA5rU0ZGYXJtaW5nQWRkcgITc3dvcGZpX2Zhcm1pbmdfYWRkcgAMa0xlbmRTZXJ2aWNlAhFsZW5kX3NlcnZpY2VfYWRkcgAMa0FkbWluQ2FsbFBLAhJhZG1pbl9jYWxsX3B1Yl9rZXkADGtQcmljZU9yYWNsZQIMcHJpY2Vfb3JhY2xlAAtrRXhDb250cmFjdAIRZXhjaGFuZ2VfY29udHJhY3QAD2tXeFN3YXBDb250cmFjdAIQd3hfc3dhcF9jb250cmFjdAAHa1N3b3BJZAIHc3dvcF9pZAAFa1d4SWQCBXd4X2lkAAhtb25leUJveAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrTW9uZXlCb3gCGE5vIGF4bHkgbW9uZXlCb3ggYWRkcmVzcwAKZXhDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQtrRXhDb250cmFjdAIcTm8gZXhjaGFuZ2UgY29udHJhY3QgYWRkcmVzcwAPcHJpY2VPcmFjbGVBZGRyCQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtQcmljZU9yYWNsZQIXTm8gcHJpY2Ugb3JhY2xlIGFkZHJlc3MADnd4U3dhcENvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFD2tXeFN3YXBDb250cmFjdAISTm8gd3ggc3dhcCBhZGRyZXNzAAZTV09QSUQJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFB2tTd29wSWQCCk5vIHN3b3AgaWQABFdYSUQJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFBWtXeElkAghObyB3eCBpZAEOZ2V0TGVuZFNydkFkZHIACQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtMZW5kU2VydmljZQIbQ2FuJ3QgZ2V0IGxlbmQgc2VydmljZSBhZGRyARBnZXRBZG1pbkNhbGxBZGRyAAkApwgBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrQWRtaW5DYWxsUEsCFENhbid0IGdldCBhZG1pbiBhZGRyAQtpc0FkbWluQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIJARBnZXRBZG1pbkNhbGxBZGRyAAUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc0xhbmRDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgkBDmdldExlbmRTcnZBZGRyAAUEdW5pdAkAAgECKU9ubHkgbGFuZCBjb250cmFjdCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgENZ2V0U0ZQb29sRGF0YQEIcG9vbEFkZHIJAJcKBQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQUFzc2V0SWQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUPa1NGUG9vbEJBc3NldElkAhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xBQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEJBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEIgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ5rU0ZQb29sU2hhcmVJZAIYQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IGlkAQ1nZXRXWFBvb2xEYXRhAQhwb29sQWRkcgQDY2ZnCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2NmZwUDY2ZnBANhSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAQDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGlkBANiSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAUDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkBAdzaGFyZUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwADAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIaQ2FuJ3QgZ2V0IHBvb2wgTFAgYXNzZXQgaWQEBGJhbEEKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2FJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFBGJhbEEFBGJhbEEEBGJhbEIKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2JJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFBGJhbEIFBGJhbEIJAJcKBQUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFBvb2xEYXRhAghwb29sQWRkcgR0eXBlAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ1nZXRTRlBvb2xEYXRhAQUIcG9vbEFkZHIDCQAAAgUEdHlwZQUHV1hfUE9PTAkBDWdldFdYUG9vbERhdGEBBQhwb29sQWRkcgkAAgECD1dyb25nIHBvb2wgdHlwZQEOZ2V0U2hhcmVTdXBwbHkDCHBvb2xBZGRyBHR5cGUHc2hhcmVJZAMJAAACBQR0eXBlBQdTRl9QT09MCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFEmtTRlBvb2xTaGFyZVN1cHBseQIcQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IHN1cHBseQMJAAACBQR0eXBlBQdXWF9QT09MCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUHc2hhcmVJZAINV3JvbmcgU2hhcmVJZAhxdWFudGl0eQkAAgECD1dyb25nIHBvb2wgdHlwZQERZ2V0UG9vbFRvdGFsU2hhcmUBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQprUG9vbFRvdGFsAAABGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgAAARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBHVzZXIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJQb3NpdGlvbk51bQAAAAEBCmdldEF4bHlGZWUCBHBvb2wHZmVlVHlwZQMJAAACBQdmZWVUeXBlBQxDQVBfRkVFX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa0F4bHlXaXRoTG9hbkNhcEZlZQMJAAACBQdmZWVUeXBlBQ9DQVBfRkVFX05PX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa0F4bHlOb0xvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUITE9BTl9GRUUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuAwkAAAIFB2ZlZVR5cGUFC05PX0xPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgMJAAACBQdmZWVUeXBlBQZOT19GRUUAAAkAAgECDldyb25nIGZlZSB0eXBlARBnZXRTRkZhcm1pbmdBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ5rU0ZGYXJtaW5nQWRkcgIdQ2FuJ3QgZ2V0IHN3b3BmaSBmYXJtaW5nIGFkZHIBEGdldFdYRmFybWluZ0FkZHIBCHBvb2xBZGRyBAlmQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHICEyVzX19mYWN0b3J5Q29udHJhY3QCIkNhbid0IGdldCBXWCBmYWN0b3J5IGNvbnRyYWN0IGFkZHIECmZhY3Ryb3lDZmcJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCWZDb250cmFjdAIRJXNfX2ZhY3RvcnlDb25maWcCGENhbid0IGdldCBXWCBmYWN0b3J5IGNmZwICX18JAQdBZGRyZXNzAQkA2QQBCQCRAwIFCmZhY3Ryb3lDZmcAAQEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECDE5vdCBBc3NldCBpZAEOYXNzZXRJZEZyb21TdHIBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEQZ2V0QXNzZXREZWNpbWFscwEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwAIBAckbWF0Y2gwCQDsBwEJANkEAQUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAIBQVhc3NldAhkZWNpbWFscwkAAgECEENhbid0IGZpbmQgYXNzZXQBEWdldEFzc2V0UHJlY2l0aW9uAQdhc3NldElkCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHYXNzZXRJZAAAAAAFBERPV04BDmdldEFzc2V0c1ByaWNlAQhhc3NldElkcwoBCWdldFByaWNlcwIBYQdhc3NldElkBAphc3NldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUJAM0IAgUBYQUKYXNzZXRQcmljZQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZ2V0UHJpY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDWdldFNoYXJlUHJpY2UBB3NoYXJlSWQEBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wCIENhbid0IGZpbmQgcG9vbCBhZGRyIGJ5IHNoYXJlIGlkBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBAskdDA5MjEwOTI3NQkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANhSWQIBQskdDA5MjEwOTI3NQJfMQQDYklkCAULJHQwOTIxMDkyNzUCXzIECGFCYWxhbmNlCAULJHQwOTIxMDkyNzUCXzMECGJCYWxhbmNlCAULJHQwOTIxMDkyNzUCXzQEB2RQcmljZUEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNhSWQFDmtQcmljZUluT3JhY2xlBAdkUHJpY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUDYklkBQ5rUHJpY2VJbk9yYWNsZQQLc2hhcmVTdXBwbHkJAQ5nZXRTaGFyZVN1cHBseQMFCHBvb2xBZGRyBQVwVHlwZQUHc2hhcmVJZAQKQVByZWNpc2lvbgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2FJZAAAAAAFBERPV04ECkJQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNiSWQAAAAABQRET1dOBA5zaGFyZVByZWNpc2lvbgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB3NoYXJlSWQAAAAABQRET1dOBANzdW0JAGQCCQBrAwUIYUJhbGFuY2UFB2RQcmljZUEFCkFQcmVjaXNpb24JAGsDBQhiQmFsYW5jZQUHZFByaWNlQgUKQlByZWNpc2lvbgkAawMFA3N1bQUOc2hhcmVQcmVjaXNpb24FC3NoYXJlU3VwcGx5AQ5nZXRTaGFyZVByaWNlcwEIc2hhcmVJZHMKAQlnZXRQcmljZXMCAWEHc2hhcmVJZAkAzQgCBQFhCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQKAAIkbAUIc2hhcmVJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWdldFByaWNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUAQ5nZXRDdXJzRW50cmllcwQDYUlkA2JJZAdzaGFyZUlkCHdBbW91bnRzBAxhc3NldHNQcmljZXMJAQ5nZXRBc3NldHNQcmljZQEJAMwIAgUDYUlkCQDMCAIFA2JJZAUDbmlsBApzaGFyZVByaWNlCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQEBnByaWNlcwkAzggCCQDMCAIJAKQDAQkAkQMCBQxhc3NldHNQcmljZXMAAAkAzAgCCQCkAwEJAJEDAgUMYXNzZXRzUHJpY2VzAAEJAMwIAgkApAMBBQpzaGFyZVByaWNlBQNuaWwFCHdBbW91bnRzCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tUb2tlbkxhc3RQcmljZQkAuQkCBQZwcmljZXMCASwFA25pbAEYY2FsY1JlcGxlbmlzaEJ5VHdvVG9rZW5zCAVwVHlwZQhwb29sQWRkcgRwbXRBA2FJZARwbXRCA2JJZARiYWxBBGJhbEIDCQAAAgUFcFR5cGUFB1NGX1BPT0wEBHJlcGwKAAFACQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIgY2FsY0xQUmVwbGVuaXNoVHdvVG9rZW5zUkVBRE9OTFkJAMwIAgkAzAgCCQCkAwEFBHBtdEEJAMwIAgkApAMBBQRwbXRCBQNuaWwFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQRyZXBsBQRyZXBsCQCXCgUKAAFACQCRAwIFBHJlcGwAAwMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQCRAwIFBHJlcGwABAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQCRAwIFBHJlcGwAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAQxhc3NldElkVG9TdHIBCQCRAwIFBHJlcGwAAgoAAUAJAJEDAgUEcmVwbAAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMTA3OTUxMTA0NQkAlAoCCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAiBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQkAzAgCBQRwbXRBBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUNJHQwMTA3OTUxMTA0NQUNJHQwMTA3OTUxMTA0NQQKZXZhbFB1dEluQggFDSR0MDEwNzk1MTEwNDUCXzIECmV2YWxQdXRJbkEIBQ0kdDAxMDc5NTExMDQ1Al8xBAVscEluQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkEAAQQFbHBJbkIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAEDCQBmAgUFbHBJbkIFBWxwSW5BBANwbXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAgJAJcKBQUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQNiSWQFBWxwSW5CBANwbXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAcJAJcKBQUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQNhSWQFBWxwSW5BCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARhyZXBsZW5pc2hUd29Ub2tlbnNCeVR5cGUGCHBvb2xBZGRyBXBUeXBlBHBtdEEDYUlkBHBtdEIDYklkBAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUDYUlkBQRwbXRBCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQNiSWQFBHBtdEIFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMJAMwIAgkAzAgCAgVmYWxzZQkAzAgCAgEwBQNuaWwFA25pbAUIcGF5bWVudHMJAPwHBAUIcG9vbEFkZHICA3B1dAkAzAgCAMCEPQkAzAgCBwUDbmlsBQhwYXltZW50cwEXcmVwbGVuaXNoT25lVG9rZW5CeVR5cGUECHBvb2xBZGRyBXBUeXBlA3BtdAVwbXRJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFBXBtdElkBQNwbXQFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFXJlcGxlbmlzaFdpdGhPbmVUb2tlbgkAzAgCCQDMCAICATAJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzCQD8BwQFCHBvb2xBZGRyAglwdXRPbmVUa24JAMwIAgAACQDMCAIHBQNuaWwFCHBheW1lbnRzAQdzdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQdzaGFyZUlkBQZhbW91bnQFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACD2xvY2tTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIAAAUDbmlsBQhwYXltZW50cwkA/AcECQEQZ2V0V1hGYXJtaW5nQWRkcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wCBXN0YWtlBQNuaWwFCHBheW1lbnRzAQl1bnN0YWtlTFAEBHBvb2wFcFR5cGUHc2hhcmVJZAZhbW91bnQEDSR0MDEyNTMwMTI4ODcDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAJUKAwkBEGdldFNGRmFybWluZ0FkZHIAAhN3aXRoZHJhd1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1dYX1BPT0wJAJUKAwkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHdW5zdGFrZQkAzAgCBQdzaGFyZUlkCQDMCAIFBmFtb3VudAUDbmlsCQACAQIPV3JvbmcgcG9vbCB0eXBlBAhmYXJtQWRkcggFDSR0MDEyNTMwMTI4ODcCXzEEBWZOYW1lCAUNJHQwMTI1MzAxMjg4NwJfMgQGcGFyYW1zCAUNJHQwMTI1MzAxMjg4NwJfMwQDaW52CQD8BwQFCGZhcm1BZGRyBQVmTmFtZQUGcGFyYW1zBQNuaWwDCQAAAgUDaW52BQNpbnYFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERY2FsY0Ftb3VudFRvUGF5U0YHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wECWZlZVNjYWxlNgDAhD0EA2ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUIcG9vbEFkZHIFCmtTRlBvb2xGZWUEDGFtbnRHZXROb0ZlZQkAbgQFEGFtb3VudFRva2VuVG9HZXQFCWZlZVNjYWxlNgkAZQIFCWZlZVNjYWxlNgUDZmVlBQdDRUlMSU5HBA0kdDAxMzMwOTEzNjE1AwkAAAIFD2Fzc2V0VG9rZW5Ub0dldAUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CQBuBAUMYW1udEdldE5vRmVlBQRiYWxCCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlBQdDRUlMSU5HCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAG4EBQxhbW50R2V0Tm9GZWUFBGJhbEEJAGUCBQRiYWxCBQxhbW50R2V0Tm9GZWUFB0NFSUxJTkcJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDEzMzA5MTM2MTUCXzEECmFzc2V0VG9QYXkIBQ0kdDAxMzMwOTEzNjE1Al8yCQCUCgIFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5ARFjYWxjQW1vdW50VG9QYXlXWAcEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQEBXByRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ53eFN3YXBDb250cmFjdAIPJXNfX3Byb3RvY29sRmVlBARwRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ53eFN3YXBDb250cmFjdAILJXNfX3Bvb2xGZWUECGZlZVNjYWxlCQC2AgEAgMLXLwQNJHQwMTM5NTQxNDI2MgMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFEGFtb3VudFRva2VuVG9HZXQFBGJhbEIJAGUCBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAGsDBRBhbW91bnRUb2tlblRvR2V0BQRiYWxBCQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CAUNJHQwMTM5NTQxNDI2MgJfMQQKYXNzZXRUb1BheQgFDSR0MDEzOTU0MTQyNjICXzIEEmFtb3VudFRvUGF5V2l0aEZlZQkAoAMBCQC9AgQJALYCAQULYW1vdW50VG9QYXkFCGZlZVNjYWxlCQC4AgIFCGZlZVNjYWxlCQC2AgEJAGQCBQVwckZlZQUEcEZlZQUHQ0VJTElORwkAlAoCBQphc3NldFRvUGF5BRJhbW91bnRUb1BheVdpdGhGZWUBEGV4Y2hhbmdlRGlyZWN0bHkIBHR5cGUEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAQNJHQwMTQ2MDcxNDcyOQkBEWNhbGNBbW91bnRUb1BheVNGBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQECmFzc2V0VG9QYXkIBQ0kdDAxNDYwNzE0NzI5Al8xBAthbW91bnRUb1BheQgFDSR0MDE0NjA3MTQ3MjkCXzIJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAIMY2FsbEZ1bmN0aW9uCQDMCAICCGV4Y2hhbmdlCQDMCAIJAMwIAgkApAMBBRBhbW91bnRUb2tlblRvR2V0BQNuaWwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkFA25pbAQNJHQwMTQ5MDQxNTAyNgkBEWNhbGNBbW91bnRUb1BheVdYBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQECmFzc2V0VG9QYXkIBQ0kdDAxNDkwNDE1MDI2Al8xBAthbW91bnRUb1BheQgFDSR0MDE0OTA0MTUwMjYCXzIJAPwHBAUOd3hTd2FwQ29udHJhY3QCBHN3YXAJAMwIAgUQYW1vdW50VG9rZW5Ub0dldAkAzAgCBQ9hc3NldFRva2VuVG9HZXQJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5BQNuaWwBE2NhbGNSZXBsZW5pc2hMUFZpcnQIBXBUeXBlBHBvb2wEcG10QQNhSWQEcG10QgNiSWQEYmFsQQRiYWxCBAhwb29sQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAQDaW52CgABQAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICH2NhbGNMUFJlcGxlbmlzaERpZmZQcm9wUkVBRE9OTFkJAMwIAgkAzAgCCQCkAwEFBHBtdEEJAMwIAgkApAMBBQRwbXRCCQDMCAICATAFA25pbAUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2ludgUDaW52CQCUCgIKAAFACQCRAwIFA2ludgAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAoAAUAJAJEDAgUDaW52AAEDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBXBUeXBlBQdXWF9QT09MBA0kdDAxNTYyOTE1OTcwAwMJAGYCBQRwbXRBAAAJAGYCBQRwbXRCAAAHBA0kdDAxNTcxMDE1ODM2CQEYY2FsY1JlcGxlbmlzaEJ5VHdvVG9rZW5zCAUFcFR5cGUFCHBvb2xBZGRyBQRwbXRBBQNhSWQFBHBtdEIFA2JJZAUEYmFsQQUEYmFsQgQGcG10SW5BCAUNJHQwMTU3MTAxNTgzNgJfMQQGcG10SW5CCAUNJHQwMTU3MTAxNTgzNgJfMgQGY2hhbmdlCAUNJHQwMTU3MTAxNTgzNgJfMwQIY2hhbmdlSWQIBQ0kdDAxNTcxMDE1ODM2Al80BAhscEFtb3VudAgFDSR0MDE1NzEwMTU4MzYCXzUJAJUKAwUGY2hhbmdlBQhjaGFuZ2VJZAUIbHBBbW91bnQDCQBmAgUEcG10QQAACQCVCgMFBHBtdEEFA2FJZAAACQCVCgMFBHBtdEIFA2JJZAAABAZjaGFuZ2UIBQ0kdDAxNTYyOTE1OTcwAl8xBAhjaGFuZ2VJZAgFDSR0MDE1NjI5MTU5NzACXzIEBWxwVHdvCAUNJHQwMTU2MjkxNTk3MAJfMwQNJHQwMTU5NzcxNjE5MwMJAGYCBQZjaGFuZ2UAAAQDaW52CgABQAkA/AcEBQhwb29sQWRkcgIRcHV0T25lVGtuUkVBRE9OTFkJAMwIAgUIY2hhbmdlSWQJAMwIAgUGY2hhbmdlBQNuaWwFA25pbAMJAAECBQFAAg8oSW50LCBJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAiQgY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQsIEludCkDCQAAAgUDaW52BQNpbnYJAJQKAggFA2ludgJfMQgFA2ludgJfMwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCAAAAAAQFbHBPbmUIBQ0kdDAxNTk3NzE2MTkzAl8xBARsb3NzCAUNJHQwMTU5NzcxNjE5MwJfMgkAlAoCCQBkAgUFbHBUd28FBWxwT25lBQRsb3NzCQACAQIPV3JvbmcgcG9vbCB0eXBlARpjYWxjV2l0aGRyYXdMUEZyb21Qb29sVmlydAQIcG9vbEFkZHIFcFR5cGUHc2hhcmVJZA91c2VyQ2FuV2l0aGRyYXcEDSR0MDE2MzY4MTY3NTUDCQAAAgUFcFR5cGUFB1NGX1BPT0wEA2ludgoAAUAJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhB3aXRoZHJhd1JFQURPTkxZCQDMCAIJAMwIAgkApAMBBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkDCQAAAgUDaW52BQNpbnYJAJQKAggFA2ludgJfMQgFA2ludgJfMgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQDaW52CQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAhNldmFsdWF0ZUdldFJFQURPTkxZCQDMCAIFB3NoYXJlSWQJAMwIAgUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fAwkAAAIFA2ludgUDaW52CQCUCgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNpbnYAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2ludgACCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAdhbW91bnRBCAUNJHQwMTYzNjgxNjc1NQJfMQQHYW1vdW50QggFDSR0MDE2MzY4MTY3NTUCXzIJAJQKAgUHYW1vdW50QQUHYW1vdW50QgESY2FsY1dpdGhkcmF3TFBWaXJ0CgVwVHlwZQRwb29sCGxwQW1vdW50B3NoYXJlSWQDYUlkA2JJZARiYWxBBGJhbEIMYm9ycm93QW1vdW50DWJvcnJvd0Fzc2V0SWQECHBvb2xBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBA0kdDAxNzAwODE3MTAxCQEaY2FsY1dpdGhkcmF3TFBGcm9tUG9vbFZpcnQEBQhwb29sQWRkcgUFcFR5cGUFB3NoYXJlSWQFCGxwQW1vdW50BApnZXRBbW91bnRBCAUNJHQwMTcwMDgxNzEwMQJfMQQKZ2V0QW1vdW50QggFDSR0MDE3MDA4MTcxMDECXzIDCQBmAgUMYm9ycm93QW1vdW50AAAEDWFtb3VudFRvR2V0RXgDAwkAAAIFDWJvcnJvd0Fzc2V0SWQFA2FJZAkAZgIFDGJvcnJvd0Ftb3VudAUKZ2V0QW1vdW50QQcJAGUCBQxib3Jyb3dBbW91bnQFCmdldEFtb3VudEEDAwkAAAIFDWJvcnJvd0Fzc2V0SWQFA2JJZAkAZgIFDGJvcnJvd0Ftb3VudAUKZ2V0QW1vdW50QgcJAGUCBQxib3Jyb3dBbW91bnQFCmdldEFtb3VudEIAAAQNJHQwMTczNzkxNzY4MgMJAGYCBQ1hbW91bnRUb0dldEV4AAADCQAAAgUFcFR5cGUFB1NGX1BPT0wJARFjYWxjQW1vdW50VG9QYXlTRgcFBHBvb2wFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQ1hbW91bnRUb0dldEV4BQ1ib3Jyb3dBc3NldElkCQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQNhSWQFA2JJZAUEYmFsQQUEYmFsQgUNYW1vdW50VG9HZXRFeAUNYm9ycm93QXNzZXRJZAkAlAoCAgAAAAQKYXNzZXRUb1BheQgFDSR0MDE3Mzc5MTc2ODICXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTczNzkxNzY4MgJfMgMJAAACBQ1ib3Jyb3dBc3NldElkBQNhSWQJAJQKAgkAZQIJAGQCBQpnZXRBbW91bnRBBQ1hbW91bnRUb0dldEV4BQxib3Jyb3dBbW91bnQJAGUCBQpnZXRBbW91bnRCBQthbW91bnRUb1BheQkAlAoCCQBlAgUKZ2V0QW1vdW50QQULYW1vdW50VG9QYXkJAGUCCQBkAgUKZ2V0QW1vdW50QgUNYW1vdW50VG9HZXRFeAUMYm9ycm93QW1vdW50CQCUCgIFCmdldEFtb3VudEEFCmdldEFtb3VudEIBC2NsYWltRmFybWVkAgR0eXBlBHBvb2wDCQAAAgUEdHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQUHV1hfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHY2xhaW1XWAkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBFdYSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUBD3JlcGxlbmlzaEJ5VHlwZQoFcFR5cGUEcG9vbAdmZWVUeXBlBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgRMUElkBA9scEJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUETFBJZAMJAAACBQ9scEJhbGFuY2VCZWZvcmUFD2xwQmFsYW5jZUJlZm9yZQQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEDSR0MDE4ODc5MTkyOTUDAwkAZgIFBHBtdEEAAAkAZgIFBHBtdEIAAAcEDSR0MDE4OTQ1MTkwNjEJARhjYWxjUmVwbGVuaXNoQnlUd29Ub2tlbnMIBQVwVHlwZQUIcG9vbEFkZHIFBHBtdEEFA2FJZAUEcG10QgUDYklkBQRiYWxBBQRiYWxCBAZwbXRJbkEIBQ0kdDAxODk0NTE5MDYxAl8xBAZwbXRJbkIIBQ0kdDAxODk0NTE5MDYxAl8yBAZjaGFuZ2UIBQ0kdDAxODk0NTE5MDYxAl8zBAhjaGFuZ2VJZAgFDSR0MDE4OTQ1MTkwNjECXzQEA2ludgkBGHJlcGxlbmlzaFR3b1Rva2Vuc0J5VHlwZQYFCHBvb2xBZGRyBQVwVHlwZQUGcG10SW5BBQNhSWQFBnBtdEluQgUDYklkAwkAAAIFA2ludgUDaW52CQCUCgIFBmNoYW5nZQUIY2hhbmdlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBmAgUEcG10QQAACQCUCgIFBHBtdEEFA2FJZAMJAGYCBQRwbXRCAAAJAJQKAgUEcG10QgUDYklkCQACAQIQcG10cyBtdXN0IGJlID4gMAQGY2hhbmdlCAUNJHQwMTg4NzkxOTI5NQJfMQQIY2hhbmdlSWQIBQ0kdDAxODg3OTE5Mjk1Al8yBANpbnYDCQBmAgUGY2hhbmdlAAAJARdyZXBsZW5pc2hPbmVUb2tlbkJ5VHlwZQQFCHBvb2xBZGRyBQVwVHlwZQUGY2hhbmdlBQhjaGFuZ2VJZAUDbmlsAwkAAAIFA2ludgUDaW52BA5scEJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQRMUElkBAt0b3RhbFN0YWtlZAkAZQIFDmxwQmFsYW5jZUFmdGVyBQ9scEJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBAVpbnZMUAkBB3N0YWtlTFAEBQRwb29sBQVwVHlwZQUETFBJZAURdXNlclNoYXJlRm9yU3Rha2UDCQAAAgUFaW52TFAFBWludkxQCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARByZXBsZW5pc2hFbnRyaWVzCARwb29sBHVzZXIMc3Rha2VkQW1vdW50DWF4bHlGZWVBbW91bnQGcG9zTnVtB3NoYXJlSWQEdHlwZQh3aXRoTG9hbgQLdG90YWxBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wED3RvdGFsQW1vdW50TG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBA0kdDAyMDE1MzIwMzkxAwUId2l0aExvYW4JAJQKAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkAZAIFD3RvdGFsQW1vdW50TG9hbgUMc3Rha2VkQW1vdW50CQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgUPdG90YWxBbW91bnRMb2FuBA9jdXJQb29sSW50ZXJlc3QIBQ0kdDAyMDE1MzIwMzkxAl8xBBN0b3RhbFN0YWtlZFdpdGhMb2FuCAUNJHQwMjAxNTMyMDM5MQJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBkAgULdG90YWxBbW91bnQFDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgUTdG90YWxTdGFrZWRXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBQ1rVXNlclBvc2l0aW9uBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUVa1VzZXJQb3NpdGlvbkludGVyZXN0BQ9jdXJQb29sSW50ZXJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FBnBvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUNYXhseUZlZUFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBDmV4Y2hhbmdlS2VlcGVyCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgRzd2FwCQDMCAIFCWFtb3VudHNJbgkAzAgCBQlhZGRyZXNzZXMJAMwIAgUPYXNzZXRzVG9SZWNlaXZlCQDMCAIFC2VzdFJlY2VpdmVkCQDMCAIFEXNsaXBwYWdlVG9sZXJhbmNlCQDMCAIFC21pblJlY2VpdmVkCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVB1enpsZQYHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgpwdXp6bGVTd2FwCQDMCAIFCXJvdXRlc1N0cgkAzAgCBQxtaW5Ub1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlU3dvcEZpCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldApleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0Agpzd29wZmlTd2FwCQDMCAIFCmV4Y2hhbmdlcnMJAMwIAgUOZXhjaGFuZ2Vyc1R5cGUJAMwIAgUFYXJnczEJAMwIAgUFYXJnczIJAMwIAgURcm91dGluZ0Fzc2V0c0tleXMJAMwIAgUSbWluQW1vdW50VG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQpjYXBpdGFsaXplBARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMjI3NDIyMjgwOAkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDAyMjc0MjIyODA4Al8xBANCSWQIBQ0kdDAyMjc0MjIyODA4Al8yBARiYWxBCAUNJHQwMjI3NDIyMjgwOAJfMwQEYmFsQggFDSR0MDIyNzQyMjI4MDgCXzQEB3NoYXJlSWQIBQ0kdDAyMjc0MjIyODA4Al81AwMJAQIhPQIFB3Rva2VuSWQFA0FJZAkBAiE9AgUHdG9rZW5JZAUDQklkBwkAAgECC1dyb25nIGFzc2V0BA0kdDAyMjg5MzIyOTczAwkAAAIFB3Rva2VuSWQFA0FJZAkAlAoCBQt0b2tlbkFtb3VudAAACQCUCgIAAAULdG9rZW5BbW91bnQEBHBtdEEIBQ0kdDAyMjg5MzIyOTczAl8xBARwbXRCCAUNJHQwMjI4OTMyMjk3MwJfMgQNJHQwMjI5NzYyMzA4MAkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDAyMjk3NjIzMDgwAl8xBAJuZggFDSR0MDIyOTc2MjMwODACXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBAtsb2FuUGVyY2VudAkAawMFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUGU0NBTEU4BRB0b3RhbFNoYXJlQW1vdW50BApzdGFrZWRMb2FuCQBrAwUMc3Rha2VkQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BAxzdGFrZWROb0xvYW4JAGUCBQxzdGFrZWRBbW91bnQFCnN0YWtlZExvYW4ED25ld0ludGVyZXN0TG9hbgMJAGYCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAZAIFE2N1clBvb2xJbnRlcmVzdExvYW4JAGsDBQpzdGFrZWRMb2FuBQdTQ0FMRTEwBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAQRbmV3SW50ZXJlc3ROb0xvYW4DCQBmAgkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAACQBkAgUVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuBQdTQ0FMRTEwCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAEC2F4bHlGZWVMb2FuCQBrAwUKc3Rha2VkTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQxDQVBfRkVFX0xPQU4FCkZFRV9TQ0FMRTYEDWF4bHlGZWVOb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUPQ0FQX0ZFRV9OT19MT0FOBQpGRUVfU0NBTEU2BAdheGx5RmVlCQEJdW5zdGFrZUxQBAUEcG9vbAUFcFR5cGUFB3NoYXJlSWQJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgMJAAACBQdheGx5RmVlBQdheGx5RmVlCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4FD25ld0ludGVyZXN0TG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBRFuZXdJbnRlcmVzdE5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkAZAIFEHRvdGFsU2hhcmVBbW91bnQFDHN0YWtlZEFtb3VudAUHYXhseUZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGQCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FCnN0YWtlZExvYW4FC2F4bHlGZWVMb2FuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94CQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4JANkEAQUHc2hhcmVJZAUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMEBQNBSWQFA0JJZAUHc2hhcmVJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARJ3aXRoZHJhd0Ftb3VudENhbGMEBHBvb2wPdXNlckNhbldpdGhkcmF3BGRlYnQLYm9ycm93QXNzZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDI0ODUyMjQ5MjgJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQIYXNzZXRJZEEIBQ0kdDAyNDg1MjI0OTI4Al8xBAhhc3NldElkQggFDSR0MDI0ODUyMjQ5MjgCXzIEBGJhbEEIBQ0kdDAyNDg1MjI0OTI4Al8zBARiYWxCCAUNJHQwMjQ4NTIyNDkyOAJfNAQHc2hhcmVJZAgFDSR0MDI0ODUyMjQ5MjgCXzUEC2NCYWxBQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQMJAAACBQtjQmFsQUJlZm9yZQULY0JhbEFCZWZvcmUEC2NCYWxCQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtjQmFsQkJlZm9yZQULY0JhbEJCZWZvcmUEA2ludgMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsBQNuaWwEA2ludgkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcDCQAAAgUDaW52BQNpbnYJAPwHBAUIcG9vbEFkZHICA2dldAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQNpbnYFA2ludgQKY0JhbEFBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEECmNCYWxCQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCBA0kdDAyNTQ5MTI1NTgwCQCUCgIJAGUCBQpjQmFsQUFmdGVyBQtjQmFsQUJlZm9yZQkAZQIFCmNCYWxCQWZ0ZXIFC2NCYWxCQmVmb3JlBA10b2tlbnNBbW91bnRBCAUNJHQwMjU0OTEyNTU4MAJfMQQNdG9rZW5zQW1vdW50QggFDSR0MDI1NDkxMjU1ODACXzIEDSR0MDI1NTgzMjY0MzcDCQBmAgUEZGVidAAABA1hbW91bnRUb0dldEV4AwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEEJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRBBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEEDAwkAAAIFC2JvcnJvd0Fzc2V0BQhhc3NldElkQgkAZgIFBGRlYnQFDXRva2Vuc0Ftb3VudEIHCQBlAgUEZGVidAUNdG9rZW5zQW1vdW50QgAABAVleEludgMJAGYCBQ1hbW91bnRUb0dldEV4AAAJARBleGNoYW5nZURpcmVjdGx5CAUFcFR5cGUFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgkAZQIFBGJhbEEFDXRva2Vuc0Ftb3VudEEJAGUCBQRiYWxCBQ10b2tlbnNBbW91bnRCBQ1hbW91bnRUb0dldEV4BQtib3Jyb3dBc3NldAUDbmlsAwkAAAIFBWV4SW52BQVleEludgQPY0JhbEFBZnRlclJlcGF5CQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQQPY0JhbEJBZnRlclJlcGF5CQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEEJAJQKAgkAZQIJAGUCBQ9jQmFsQUFmdGVyUmVwYXkFC2NCYWxBQmVmb3JlBQRkZWJ0CQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQkAlAoCCQBlAgUPY0JhbEFBZnRlclJlcGF5BQtjQmFsQUJlZm9yZQkAZQIJAGUCBQ9jQmFsQkFmdGVyUmVwYXkFC2NCYWxCQmVmb3JlBQRkZWJ0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFDXRva2Vuc0Ftb3VudEEFDXRva2Vuc0Ftb3VudEIEB3RvVXNlckEIBQ0kdDAyNTU4MzI2NDM3Al8xBAd0b1VzZXJCCAUNJHQwMjU1ODMyNjQzNwJfMgkAmQoHBQd0b1VzZXJBBQhhc3NldElkQQUHdG9Vc2VyQgUIYXNzZXRJZEIFCmNCYWxBQWZ0ZXIFCmNCYWxCQWZ0ZXIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQEdXNlcgRwb29sBXBvc0lkCGJvcnJvd2VkBAdwQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uAhBVbmtub3duIHBvc2l0aW9uBAx1c2VySW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0BAxwb29sSW50ZXJlc3QDBQhib3Jyb3dlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuCQBkAgUHcEFtb3VudAkAawMFB3BBbW91bnQJAGUCBQxwb29sSW50ZXJlc3QFDHVzZXJJbnRlcmVzdAUHU0NBTEUxMAEOd2l0aGRyYXdUb1VzZXIEBHVzZXIEcG9vbAVwb3NJZAhzdG9wTG9zcwQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMYm9ycm93QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAURa1VzZXJCb3Jyb3dBbW91bnQAAAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUFcG9zSWQJAGYCBQxib3Jyb3dBbW91bnQAAAQOcG9vbFRvdGFsU2hhcmUJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wECHVzZXJBZGRyCQEHQWRkcmVzcwEJANkEAQUEdXNlcgQLYm9ycm93QXNzZXQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRJrVXNlckJvcnJvd0Fzc2V0SWQCAAQEZGVidAMJAGYCBQxib3Jyb3dBbW91bnQAAAoAAUAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIMZ2V0QXNzZXREZWJ0CQDMCAIHCQDMCAIJAKwCAgkArAICBQR1c2VyAgFfBQVwb3NJZAkAzAgCBQtib3Jyb3dBc3NldAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAAEDSR0MDI3ODI1Mjc5NzgJARJ3aXRoZHJhd0Ftb3VudENhbGMEBQRwb29sBQ91c2VyQ2FuV2l0aGRyYXcFBGRlYnQFC2JvcnJvd0Fzc2V0AwkAAAIFDSR0MDI3ODI1Mjc5NzgFDSR0MDI3ODI1Mjc5NzgEB3NoYXJlSWQIBQ0kdDAyNzgyNTI3OTc4Al83BApjQmFsQkFmdGVyCAUNJHQwMjc4MjUyNzk3OAJfNgQKY0JhbEFBZnRlcggFDSR0MDI3ODI1Mjc5NzgCXzUECGFzc2V0SWRCCAUNJHQwMjc4MjUyNzk3OAJfNAQNdG9Vc2VyQW1vdW50QggFDSR0MDI3ODI1Mjc5NzgCXzMECGFzc2V0SWRBCAUNJHQwMjc4MjUyNzk3OAJfMgQNdG9Vc2VyQW1vdW50QQgFDSR0MDI3ODI1Mjc5NzgCXzEEC2Nsb3NlRGJ0SW52AwkAZgIFBGRlYnQAAAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAghyZXBheUZvcgkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQULYm9ycm93QXNzZXQFBGRlYnQFA25pbAAAAwkAAAIFC2Nsb3NlRGJ0SW52BQtjbG9zZURidEludgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgUOcG9vbFRvdGFsU2hhcmUFD3VzZXJDYW5XaXRoZHJhdwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh1c2VyQWRkcgUNdG9Vc2VyQW1vdW50QQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEIJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCBQNuaWwJAQ5nZXRDdXJzRW50cmllcwQFCGFzc2V0SWRBBQhhc3NldElkQgUHc2hhcmVJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQxwYXJzZVJlcXVlc3QBCXJlcXVlc3RJZAQHcmVxdWVzdAkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQJAKwCAgITTm8gcmVxdWVzdCB3aXRoIGlkIAUJcmVxdWVzdElkAgEsBAR1c2VyCQCRAwIFB3JlcXVlc3QAAAQEcG9vbAkAkQMCBQdyZXF1ZXN0AAEEBHBtdEEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAIEA0FJZAkAkQMCBQdyZXF1ZXN0AAMEBHBtdEIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAQEA0JJZAkAkQMCBQdyZXF1ZXN0AAUEBGJhbEEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAYEBGJhbEIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAcEB3NoYXJlSWQJAJEDAgUHcmVxdWVzdAAIBAdid0Fzc2V0CQCRAwIFB3JlcXVlc3QACQQIYndBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAoJAJ0KCwUEdXNlcgUEcG9vbAUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQFB2J3QXNzZXQFCGJ3QW1vdW50ARBjYWxjQm9ycm93QW1vdW50BgRwbXRBBHBtdEIDYUlkA2JJZAhsZXZlcmFnZQhib3Jyb3dJZAQHZFByaWNlQQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFA2FJZAUOa1ByaWNlSW5PcmFjbGUEB2RQcmljZUIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNiSWQFDmtQcmljZUluT3JhY2xlBAZkZWNQckEJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNhSWQAAAAABQRET1dOBAZkZWNQckIJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNiSWQAAAAABQRET1dOBAxwYXlkSW5Eb2xsYXIJAGQCCQBrAwUHZFByaWNlQQUEcG10QQUGZGVjUHJBCQBrAwUHZFByaWNlQgUEcG10QgUGZGVjUHJCBA0kdDAyOTYyMjI5NzE5AwkAAAIFCGJvcnJvd0lkBQNhSWQJAJQKAgUHZFByaWNlQQUGZGVjUHJBCQCUCgIFB2RQcmljZUIFBmRlY1ByQgQLYm9ycm93UHJpY2UIBQ0kdDAyOTYyMjI5NzE5Al8xBAtib3Jyb3dEZWNQcggFDSR0MDI5NjIyMjk3MTkCXzIJAGsDCQBrAwUMcGF5ZEluRG9sbGFyCQBlAgUIbGV2ZXJhZ2UAZABkBQtib3Jyb3dEZWNQcgULYm9ycm93UHJpY2USAWkBF2NhbGNQcmljZUltcGFjdEVWQUxPTkxZBQRwb29sCGxldmVyYWdlCGJvcnJvd0lkBHBtdEEEcG10QgMDCQBmAgBkBQhsZXZlcmFnZQYJAGYCBQhsZXZlcmFnZQCsAgkAAgECH0xldmVyYWdlIGNhbid0IGJlIDwxMDAgYW5kID4zMDAEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzMDEzNzMwMjI3CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDMwMTM3MzAyMjcCXzEEA0JJZAgFDSR0MDMwMTM3MzAyMjcCXzIEBGJhbEEIBQ0kdDAzMDEzNzMwMjI3Al8zBARiYWxCCAUNJHQwMzAxMzczMDIyNwJfNAQHc2hhcmVJZAgFDSR0MDMwMTM3MzAyMjcCXzUEDGJvcnJvd0Ftb3VudAMJAGYCBQhsZXZlcmFnZQBkCQEQY2FsY0JvcnJvd0Ftb3VudAYFBHBtdEEFBHBtdEIFA0FJZAUDQklkBQhsZXZlcmFnZQUIYm9ycm93SWQAAAQNJHQwMzAzNjIzMDQ2OQMJAAACBQhib3Jyb3dJZAUDQUlkCQCUCgIJAGQCBQRwbXRBBQxib3Jyb3dBbW91bnQFBHBtdEIJAJQKAgUEcG10QQkAZAIFBHBtdEIFDGJvcnJvd0Ftb3VudAQGcGF5SW5BCAUNJHQwMzAzNjIzMDQ2OQJfMQQGcGF5SW5CCAUNJHQwMzAzNjIzMDQ2OQJfMgQNJHQwMzA0NzIzMDU2NQkBE2NhbGNSZXBsZW5pc2hMUFZpcnQIBQVwVHlwZQUEcG9vbAUGcGF5SW5BBQNBSWQFBnBheUluQgUDQklkBQRiYWxBBQRiYWxCBAhscEFtb3VudAgFDSR0MDMwNDcyMzA1NjUCXzEEBGxvc3MIBQ0kdDAzMDQ3MjMwNTY1Al8yBAlpbXBhY3RNb2QDCQBmAgAABQRsb3NzCQBoAgUEbG9zcwD///////////8BBQRsb3NzCQCUCgIFA25pbAkAzAgCBQlpbXBhY3RNb2QFA25pbAFpARlyZXBsZW5pc2hGcm9tTGFuZEVWQUxPTkxZAQlyZXF1ZXN0SWQJAQt2YWx1ZU9yRWxzZQIJAQppc0xhbmRDYWxsAQUBaQQNJHQwMzA3NDIzMDg0NgkBDHBhcnNlUmVxdWVzdAEFCXJlcXVlc3RJZAQEdXNlcggFDSR0MDMwNzQyMzA4NDYCXzEEBHBvb2wIBQ0kdDAzMDc0MjMwODQ2Al8yBARwbXRBCAUNJHQwMzA3NDIzMDg0NgJfMwQDQUlkCAUNJHQwMzA3NDIzMDg0NgJfNAQEcG10QggFDSR0MDMwNzQyMzA4NDYCXzUEA0JJZAgFDSR0MDMwNzQyMzA4NDYCXzYEBGJhbEEIBQ0kdDAzMDc0MjMwODQ2Al83BARiYWxCCAUNJHQwMzA3NDIzMDg0NgJfOAQHc2hhcmVJZAgFDSR0MDMwNzQyMzA4NDYCXzkEB2J3QXNzZXQIBQ0kdDAzMDc0MjMwODQ2A18xMAQIYndBbW91bnQIBQ0kdDAzMDc0MjMwODQ2A18xMQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECEldyb25nIHBheW1lbnQgc2l6ZQMDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQdid0Fzc2V0BgkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGJ3QW1vdW50CQACAQINV3JvbmcgcGF5bWVudAQNJHQwMzEwMzYzMTE2MAMJAAACBQNBSWQFB2J3QXNzZXQJAJQKAgkAZAIFBHBtdEEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQRwbXRCCQCUCgIFBHBtdEEJAGQCBQRwbXRCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQHcG10QWxsQQgFDSR0MDMxMDM2MzExNjACXzEEB3BtdEFsbEIIBQ0kdDAzMTAzNjMxMTYwAl8yBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCDFVua25vd24gcG9vbAQNJHQwMzEyNDIzMTM1NwkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQhMT0FOX0ZFRQUHcG10QWxsQQUDQUlkBQdwbXRBbGxCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQECnVzZXJTdGFrZWQIBQ0kdDAzMTI0MjMxMzU3Al8xBAdheGx5RmVlCAUNJHQwMzEyNDIzMTM1NwJfMgQGcG9zTnVtCQEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAQUEdXNlcgQNYm9ycm93RW50cmllcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRFrVXNlckJvcnJvd0Ftb3VudAUIYndBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRJrVXNlckJvcnJvd0Fzc2V0SWQFB2J3QXNzZXQFA25pbAQHZW50cmllcwkBEHJlcGxlbmlzaEVudHJpZXMIBQRwb29sBQR1c2VyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQZwb3NOdW0FB3NoYXJlSWQFBXBUeXBlBgUDbmlsAWkBGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZAQdzaGFyZUlkBAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkCQCUCgIFA25pbAULc2hhcmVQcmljZXMBaQEiZ2V0VXNlclBvc2l0aW9uU2hhcmVBbW91bnRSRUFET05MWQIEdXNlcgZwb3NOdW0EBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sAhBVbmtub3duIHBvc2l0aW9uBAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQZwb3NOdW0JAGYCBQxib3Jyb3dBbW91bnQAAAkAlAoCBQNuaWwFD3VzZXJDYW5XaXRoZHJhdwFpASBnZXRVc2VyUG9zaXRpb25JbkRvbGxhcnNSRUFET05MWQMEdXNlcgVwb29scwZwb3NOdW0KAQd1c2VyUG9zAgFhBHBvb2wEDSR0MDMyNDU1MzI0ODkFAWEECHRvdGFsUG9zCAUNJHQwMzI0NTUzMjQ4OQJfMQQHcG9zRGVidAgFDSR0MDMyNDU1MzI0ODkCXzIEBWluZGV4CAUNJHQwMzI0NTUzMjQ4OQJfMwQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDMyNTgxMzI2NzEJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzI1ODEzMjY3MQJfMQQDQklkCAUNJHQwMzI1ODEzMjY3MQJfMgQEYmFsQQgFDSR0MDMyNTgxMzI2NzECXzMEBGJhbEIIBQ0kdDAzMjU4MTMyNjcxAl80BAdzaGFyZUlkCAUNJHQwMzI1ODEzMjY3MQJfNQQMYm9ycm93QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wJAJEDAgUGcG9zTnVtBQVpbmRleAkAZgIFDGJvcnJvd0Ftb3VudAAABAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkBApkZWNQclNoYXJlCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHc2hhcmVJZAAAAAAFBERPV04EBnNoYXJlRAkAawMFD3VzZXJDYW5XaXRoZHJhdwULc2hhcmVQcmljZXMFCmRlY1ByU2hhcmUDCQAAAgUMYm9ycm93QW1vdW50AAAJAJUKAwkAzQgCBQh0b3RhbFBvcwUGc2hhcmVECQDNCAIFB3Bvc0RlYnQAAAkAZAIFBWluZGV4AAEEC2JvcnJvd0Fzc2V0CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4BRJrVXNlckJvcnJvd0Fzc2V0SWQEBGRlYnQKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4CQDMCAIFC2JvcnJvd0Fzc2V0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEEGJvcnJvd0Fzc2V0UHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQtib3Jyb3dBc3NldAUOa1ByaWNlSW5PcmFjbGUEDWRlY1ByQm9ycm93SWQJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQtib3Jyb3dBc3NldAAAAAAFBERPV04EBWRlYnRECQBrAwUEZGVidAUQYm9ycm93QXNzZXRQcmljZQUNZGVjUHJCb3Jyb3dJZAkAlQoDCQDNCAIFCHRvdGFsUG9zBQZzaGFyZUQJAM0IAgUHcG9zRGVidAUFZGVidEQJAGQCBQVpbmRleAABBA0kdDAzMzY5MTMzNzQ2CgACJGwFBXBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1c2VyUG9zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEA3BvcwgFDSR0MDMzNjkxMzM3NDYCXzEEBGRlYnQIBQ0kdDAzMzY5MTMzNzQ2Al8yCQCUCgIFA25pbAkAlAoCBQNwb3MFBGRlYnQBaQEJcmVwbGVuaXNoAwRwb29sCGxldmVyYWdlCGJvcnJvd0lkAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAMDCQEBIQEJARFAZXh0ck5hdGl2ZSgxMDUxKQIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYW5Cb3Jyb3cJAGYCBQhsZXZlcmFnZQBkBwkAAgECHVlvdSBjYW4ndCBib3Jyb3cgaW4gdGhpcyBwb29sBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQNJHQwMzQxODYzNDI3NgkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBANBSWQIBQ0kdDAzNDE4NjM0Mjc2Al8xBANCSWQIBQ0kdDAzNDE4NjM0Mjc2Al8yBARiYWxBCAUNJHQwMzQxODYzNDI3NgJfMwQEYmFsQggFDSR0MDM0MTg2MzQyNzYCXzQEB3NoYXJlSWQIBQ0kdDAzNDE4NjM0Mjc2Al81BA0kdDAzNDI3OTM0OTE2AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAgMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0FJZAkAAgECFVdyb25nIHBheW1lbnQgYXNzZXQgQQMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQFA0JJZAkAAgECFVdyb25nIHBheW1lbnQgYXNzZXQgQgkAlgoECAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDQUlkCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAUDQklkAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQMJAAACCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNBSWQJAJYKBAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0FJZAAABQNCSWQDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQklkCQCWCgQAAAUDQUlkCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDQklkCQACAQINV3JvbmcgcGF5bWVudAkAAgECHE9uZSBvciB0d28gcGF5bWVudHMgZXhwZWN0ZWQEBHBtdEEIBQ0kdDAzNDI3OTM0OTE2Al8xBAlwbXRBc3NldEEIBQ0kdDAzNDI3OTM0OTE2Al8yBARwbXRCCAUNJHQwMzQyNzkzNDkxNgJfMwQJcG10QXNzZXRCCAUNJHQwMzQyNzkzNDkxNgJfNAQJbmV3UG9zTnVtCQEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAQkApQgBCAUBaQZjYWxsZXIDCQBmAgUIbGV2ZXJhZ2UAZAQMYm9ycm93QW1vdW50CQEQY2FsY0JvcnJvd0Ftb3VudAYFBHBtdEEFBHBtdEIFCXBtdEFzc2V0QQUJcG10QXNzZXRCBQhsZXZlcmFnZQUIYm9ycm93SWQEB3JlcXVlc3QJALkJAgkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQRwb29sCQDMCAIJAKQDAQUEcG10QQkAzAgCBQlwbXRBc3NldEEJAMwIAgkApAMBBQRwbXRCCQDMCAIFCXBtdEFzc2V0QgkAzAgCCQCkAwEFBGJhbEEJAMwIAgkApAMBBQRiYWxCCQDMCAIFB3NoYXJlSWQJAMwIAgUIYm9ycm93SWQJAMwIAgkApAMBBQxib3Jyb3dBbW91bnQFA25pbAIBLAQMbmV3UmVxdWVzdElkCgABQAkA/AcEBQR0aGlzAhBjcmVhdGVOZXdSZXF1ZXN0CQDMCAIFB3JlcXVlc3QFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQxuZXdSZXF1ZXN0SWQFDG5ld1JlcXVlc3RJZAQEYXJncwkAzAgCCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUJbmV3UG9zTnVtCQDMCAIFB3NoYXJlSWQJAMwIAgUIYm9ycm93SWQJAMwIAgUMYm9ycm93QW1vdW50CQDMCAIJAKUIAQUEdGhpcwkAzAgCAhFyZXBsZW5pc2hGcm9tTGFuZAkAzAgCCQCkAwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUMbmV3UmVxdWVzdElkAhhDYW4ndCBjcmVhdGUgbmV3IHJlcXVlc3QFA25pbAQDaW52CQD9BwQJAQ5nZXRMZW5kU3J2QWRkcgACDWZsYXNoUG9zaXRpb24FBGFyZ3MFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAzNTg0NDM1OTU2CQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFC05PX0xPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDM1ODQ0MzU5NTYCXzEEB2F4bHlGZWUIBQ0kdDAzNTg0NDM1OTU2Al8yBA0kdDAzNTk2MjM2MDc3CQEaY2FsY1dpdGhkcmF3TFBGcm9tUG9vbFZpcnQECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFB3NoYXJlSWQFCnVzZXJTdGFrZWQECHdBbW91bnRBCAUNJHQwMzU5NjIzNjA3NwJfMQQId0Ftb3VudEIIBQ0kdDAzNTk2MjM2MDc3Al8yCQDOCAIJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAkApQgBCAUBaQZjYWxsZXIFCnVzZXJTdGFrZWQFB2F4bHlGZWUFCW5ld1Bvc051bQUHc2hhcmVJZAUFcFR5cGUHCQEOZ2V0Q3Vyc0VudHJpZXMEBQNBSWQFA0JJZAUHc2hhcmVJZAkAzAgCCQCkAwEFCHdBbW91bnRBCQDMCAIJAKQDAQUId0Ftb3VudEIFA25pbAFpAQh3aXRoZHJhdwIEcG9vbAVwb3NJZAkBDndpdGhkcmF3VG9Vc2VyBAkApQgBCAUBaQZjYWxsZXIFBHBvb2wJAKQDAQUFcG9zSWQHAWkBFGNyZWF0ZVVwZGF0ZVN0b3BMb3NzBAVwb3NJZAZwb29sSWQHYXNzZXRJZAVwcmljZQQQdG9rZW5PcmFjbGVQcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFB2Fzc2V0SWQFDmtQcmljZUluT3JhY2xlAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUGcG9vbElkAgFfCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAAgECGlRoZXJlIGFyZSBubyB1c2VyIHBvc2l0aW9uAwkAZwIAAAUFcHJpY2UJAAIBAhxQcmljZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAZgIFBXByaWNlBRB0b2tlbk9yYWNsZVByaWNlCQACAQIrUHJpY2UgbXVzdCBiZSBsZXNzIHRoYW4gY3VycmVudCB0b2tlbiBwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzBQVwcmljZQUDbmlsAWkBDmRlbGV0ZVN0b3BMb3NzAwVwb3NJZAZwb29sSWQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzCQACAQIITm8gZW50cnkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzBQNuaWwBaQEEaW5pdAkMbW9uZXlCb3hBZGRyDXNmRmFybWluZ0FkZHIIbGVuZEFkZHIPcHJpY2VPcmFjbGVBZGRyEGtlZXBlckV4Q29udHJhY3QOd3hTd2FwQ29udHJhY3QLc3dvcEFzc2V0SWQJd3hBc3NldElkC2FkbWluUHViS2V5AwkBCWlzRGVmaW5lZAEJAKIIAQUJa01vbmV5Qm94CQACAQIOQWxyZWFkeSBpbml0ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa01vbmV5Qm94BQxtb25leUJveEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUOa1NGRmFybWluZ0FkZHIFDXNmRmFybWluZ0FkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa0xlbmRTZXJ2aWNlBQhsZW5kQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQxrUHJpY2VPcmFjbGUFD3ByaWNlT3JhY2xlQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQtrRXhDb250cmFjdAUQa2VlcGVyRXhDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCBQ9rV3hTd2FwQ29udHJhY3QFDnd4U3dhcENvbnRyYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tTd29wSWQFC3N3b3BBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtXeElkBQl3eEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa0FkbWluQ2FsbFBLBQthZG1pblB1YktleQUDbmlsAWkBEGNyZWF0ZU5ld1JlcXVlc3QBBnBhcmFtcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAxuZXdSZXF1ZXN0SWQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtSZXF1ZXN0SXRlcgAAAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQUMbmV3UmVxdWVzdElkBQprUmVxdWVzdElkBQZwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtSZXF1ZXN0SXRlcgUMbmV3UmVxdWVzdElkBQNuaWwFDG5ld1JlcXVlc3RJZAFpARFyZXBsZW5pc2hGcm9tTGFuZAEJcmVxdWVzdElkCQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEDSR0MDM4NTc3Mzg2ODEJAQxwYXJzZVJlcXVlc3QBBQlyZXF1ZXN0SWQEBHVzZXIIBQ0kdDAzODU3NzM4NjgxAl8xBARwb29sCAUNJHQwMzg1NzczODY4MQJfMgQEcG10QQgFDSR0MDM4NTc3Mzg2ODECXzMEA0FJZAgFDSR0MDM4NTc3Mzg2ODECXzQEBHBtdEIIBQ0kdDAzODU3NzM4NjgxAl81BANCSWQIBQ0kdDAzODU3NzM4NjgxAl82BARiYWxBCAUNJHQwMzg1NzczODY4MQJfNwQEYmFsQggFDSR0MDM4NTc3Mzg2ODECXzgEB3NoYXJlSWQIBQ0kdDAzODU3NzM4NjgxAl85BAdid0Fzc2V0CAUNJHQwMzg1NzczODY4MQNfMTAECGJ3QW1vdW50CAUNJHQwMzg1NzczODY4MQNfMTEDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhJXcm9uZyBwYXltZW50IHNpemUDAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYndBc3NldAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQhid0Ftb3VudAkAAgECDVdyb25nIHBheW1lbnQEDSR0MDM4ODcxMzg5OTUDCQAAAgUDQUlkBQdid0Fzc2V0CQCUCgIJAGQCBQRwbXRBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB3BtdEFsbEEIBQ0kdDAzODg3MTM4OTk1Al8xBAdwbXRBbGxCCAUNJHQwMzg4NzEzODk5NQJfMgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDM5MDc3MzkxOTIJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUITE9BTl9GRUUFB3BtdEFsbEEFA0FJZAUHcG10QWxsQgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzkwNzczOTE5MgJfMQQHYXhseUZlZQgFDSR0MDM5MDc3MzkxOTICXzIEBnBvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEFBHVzZXIEDWJvcnJvd0VudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQFCGJ3QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUSa1VzZXJCb3Jyb3dBc3NldElkBQdid0Fzc2V0BQNuaWwEB2VudHJpZXMJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAUEdXNlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUGcG9zTnVtBQdzaGFyZUlkBQVwVHlwZQYEDSR0MDM5NTUyMzk2NjcJARpjYWxjV2l0aGRyYXdMUEZyb21Qb29sVmlydAQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUKdXNlclN0YWtlZAQId0Ftb3VudEEIBQ0kdDAzOTU1MjM5NjY3Al8xBAh3QW1vdW50QggFDSR0MDM5NTUyMzk2NjcCXzIJAJQKAgkAzQgCCQDOCAIJAM4IAgUHZW50cmllcwkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQJAMwIAgkApAMBBQh3QW1vdW50QQkAzAgCCQCkAwEFCHdBbW91bnRCBQNuaWwFDWJvcnJvd0VudHJpZXMJAQtEZWxldGVFbnRyeQEJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkBQp1c2VyU3Rha2VkAWkBCWxpcXVpZGF0ZQMEdXNlcgVwb3NJZA9saXF1aWRhdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQppc0xhbmRDYWxsAQUBaQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBRFrVXNlclBvc2l0aW9uUG9vbAILbm8gcG9zaXRpb24EBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDA0MDE2MTQwMjUxCQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDQwMTYxNDAyNTECXzEEA0JJZAgFDSR0MDQwMTYxNDAyNTECXzIEBGJhbEEIBQ0kdDA0MDE2MTQwMjUxAl8zBARiYWxCCAUNJHQwNDAxNjE0MDI1MQJfNAQHc2hhcmVJZAgFDSR0MDQwMTYxNDAyNTECXzUEBmFtb3VudAkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ9saXF1aWRhdGVBbW91bnQEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAAAwkAAAIFDGJvcnJvd0Ftb3VudAAACQACAQIrWW91IGNhbid0IGxpcXVpZGF0ZSBwb3NpdGlvbiB3aXRob3V0IGJvcnJvdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAGUCBQ91c2VyQ2FuV2l0aGRyYXcFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBaQEIc3RvcExvc3MEBHVzZXIFcG9zSWQEcG9vbAdhc3NldElkCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBBB0b2tlbk9yYWNsZVByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDNCAIJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBXBvc0lkAgFfBQRwb29sAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzAWkBEmNhcGl0YWxpemVFeEtlZXBlcgwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDQyMDE0NDIyMDgDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MjAxNDQyMjA4Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MjAxNDQyMjA4Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZUtlZXBlcgoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlhbW91bnRzSW4FCWFkZHJlc3NlcwUPYXNzZXRzVG9SZWNlaXZlBQtlc3RSZWNlaXZlZAURc2xpcHBhZ2VUb2xlcmFuY2UFC21pblJlY2VpdmVkBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFB1enpsZQgEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQNJHQwNDI4OTM0MzA4NwMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDQyODkzNDMwODcCXzEEDGNsYWltZWRBc3NldAgFDSR0MDQyODkzNDMwODcCXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlUHV6emxlBgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCXJvdXRlc1N0cgUMbWluVG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFN3b3BGaQwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCmV4Y2hhbmdlcnMOZXhjaGFuZ2Vyc1R5cGUFYXJnczEFYXJnczIRcm91dGluZ0Fzc2V0c0tleXMSbWluQW1vdW50VG9SZWNlaXZlB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDQzODM4NDQwMzIDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MzgzODQ0MDMyAl8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MzgzODQ0MDMyAl8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVN3b3BGaQoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQpleGNoYW5nZXJzBQ5leGNoYW5nZXJzVHlwZQUFYXJnczEFBWFyZ3MyBRFyb3V0aW5nQXNzZXRzS2V5cwUSbWluQW1vdW50VG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBC2luaXROZXdQb29sCQR0eXBlCHBvb2xBZGRyC2luRmVlTm9Mb2FuCWluRmVlTG9hbgxjYXBGZWVOb0xvYW4OY2FwRmVlV2l0aExvYW4Rc3RvcGxvc3NGZWVOb0xvYW4Tc3RvcGxvc3NGZWVXaXRoTG9hbgljYW5Cb3Jyb3cJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDAwkBAiE9AgUEdHlwZQUHU0ZfUE9PTAkBAiE9AgUEdHlwZQUHV1hfUE9PTAcJAAIBAgpXcm9uZyB0eXBlBA0kdDA0NDc3MzQ0ODY3CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUIcG9vbEFkZHIFBHR5cGUEA2FJZAgFDSR0MDQ0NzczNDQ4NjcCXzEEA2JJZAgFDSR0MDQ0NzczNDQ4NjcCXzIEBGFCYWwIBQ0kdDA0NDc3MzQ0ODY3Al8zBARiQmFsCAUNJHQwNDQ3NzM0NDg2NwJfNAQHc2hhcmVJZAgFDSR0MDQ0NzczNDQ4NjcCXzUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgULaW5GZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEmtBeGx5SW5GZWVXaXRoTG9hbgUJaW5GZWVMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrQXhseU5vTG9hbkNhcEZlZQUMY2FwRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrQXhseVdpdGhMb2FuQ2FwRmVlBQ5jYXBGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQURc3RvcGxvc3NGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFGtBeGx5U3RvcExvc3NMb2FuRmVlBRNzdG9wbG9zc0ZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrUG9vbEludGVyZXN0TG9hbgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sBQhwb29sQWRkcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQhwb29sQWRkcgUOa1Bvb2xDYW5Cb3Jyb3cFCWNhbkJvcnJvdwUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleSqBwSQ=", "height": 2652666, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F5vD4MCmHukR7rFyLvjGxHzyKCFnKGYPEVUBHmozUGtQ Next: 4uCgi9fCunMPoQfmBHk13j8x7aQY2QPNforZqdh9Grmf Diff:
Old | New | Differences | |
---|---|---|---|
354 | 354 | } | |
355 | 355 | ||
356 | 356 | ||
357 | - | func bw (ay,az,aA) = { | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | [StringEntry(Q, makeString( | |
357 | + | func bw (ay,az,aA,bx) = { | |
358 | + | let by = aW([ay, az]) | |
359 | + | let bz = bi(aA) | |
360 | + | let bA = ([toString(by[0]), toString(by[1]), toString(bz)] ++ bx) | |
361 | + | [StringEntry(Q, makeString(bA, ","))] | |
362 | 362 | } | |
363 | 363 | ||
364 | 364 | ||
365 | - | func | |
365 | + | func bB (bj,au,bC,ay,bD,az,aB,aC) = if ((bj == a)) | |
366 | 366 | then { | |
367 | - | let | |
368 | - | let ax = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString( | |
367 | + | let bE = { | |
368 | + | let ax = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bC), toString(bD)]], nil) | |
369 | 369 | if ($isInstanceOf(ax, "List[Any]")) | |
370 | 370 | then ax | |
371 | 371 | else throw(($getType(ax) + " couldn't be cast to List[Any]")) | |
372 | 372 | } | |
373 | - | if (( | |
373 | + | if ((bE == bE)) | |
374 | 374 | then $Tuple5({ | |
375 | - | let ax = | |
375 | + | let ax = bE[3] | |
376 | 376 | if ($isInstanceOf(ax, "Int")) | |
377 | 377 | then ax | |
378 | 378 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
379 | 379 | }, { | |
380 | - | let ax = | |
380 | + | let ax = bE[4] | |
381 | 381 | if ($isInstanceOf(ax, "Int")) | |
382 | 382 | then ax | |
383 | 383 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
384 | 384 | }, { | |
385 | - | let ax = | |
385 | + | let ax = bE[1] | |
386 | 386 | if ($isInstanceOf(ax, "Int")) | |
387 | 387 | then ax | |
388 | 388 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
389 | - | }, aR( | |
390 | - | let ax = | |
389 | + | }, aR(bE[2]), { | |
390 | + | let ax = bE[0] | |
391 | 391 | if ($isInstanceOf(ax, "Int")) | |
392 | 392 | then ax | |
393 | 393 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
395 | 395 | else throw("Strict value is not equal to itself.") | |
396 | 396 | } | |
397 | 397 | else { | |
398 | - | let | |
399 | - | let ax = invoke(au, "evaluatePutByAmountAssetREADONLY", [ | |
398 | + | let bF = $Tuple2(split({ | |
399 | + | let ax = invoke(au, "evaluatePutByAmountAssetREADONLY", [bC], nil) | |
400 | 400 | if ($isInstanceOf(ax, "String")) | |
401 | 401 | then ax | |
402 | 402 | else throw(($getType(ax) + " couldn't be cast to String")) | |
403 | 403 | }, "__"), split({ | |
404 | - | let ax = invoke(au, "evaluatePutByPriceAssetREADONLY", [ | |
404 | + | let ax = invoke(au, "evaluatePutByPriceAssetREADONLY", [bD], nil) | |
405 | 405 | if ($isInstanceOf(ax, "String")) | |
406 | 406 | then ax | |
407 | 407 | else throw(($getType(ax) + " couldn't be cast to String")) | |
408 | 408 | }, "__")) | |
409 | - | if (( | |
409 | + | if ((bF == bF)) | |
410 | 410 | then { | |
411 | - | let | |
412 | - | let | |
413 | - | let | |
414 | - | let | |
415 | - | if (( | |
411 | + | let bG = bF._2 | |
412 | + | let bH = bF._1 | |
413 | + | let bI = parseIntValue(bH[1]) | |
414 | + | let bJ = parseIntValue(bG[1]) | |
415 | + | if ((bJ > bI)) | |
416 | 416 | then { | |
417 | - | let | |
418 | - | $Tuple5( | |
417 | + | let bK = parseIntValue(bH[8]) | |
418 | + | $Tuple5(bC, bK, (bD - bK), az, bJ) | |
419 | 419 | } | |
420 | 420 | else { | |
421 | - | let | |
422 | - | $Tuple5( | |
421 | + | let bK = parseIntValue(bG[7]) | |
422 | + | $Tuple5(bK, bD, (bC - bK), ay, bI) | |
423 | 423 | } | |
424 | 424 | } | |
425 | 425 | else throw("Strict value is not equal to itself.") | |
426 | 426 | } | |
427 | 427 | ||
428 | 428 | ||
429 | - | func | |
430 | - | let | |
429 | + | func bL (au,bj,bC,ay,bD,az) = { | |
430 | + | let bM = [AttachedPayment(aS(ay), bC), AttachedPayment(aS(az), bD)] | |
431 | 431 | if ((bj == a)) | |
432 | - | then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], | |
433 | - | else invoke(au, "put", [1000000, false], | |
432 | + | then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bM) | |
433 | + | else invoke(au, "put", [1000000, false], bM) | |
434 | 434 | } | |
435 | 435 | ||
436 | 436 | ||
437 | - | func | |
438 | - | let | |
437 | + | func bN (au,bj,bK,bO) = { | |
438 | + | let bM = [AttachedPayment(aS(bO), bK)] | |
439 | 439 | if ((bj == a)) | |
440 | - | then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], | |
441 | - | else invoke(au, "putOneTkn", [0, false], | |
440 | + | then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bM) | |
441 | + | else invoke(au, "putOneTkn", [0, false], bM) | |
442 | 442 | } | |
443 | 443 | ||
444 | 444 | ||
445 | - | func | |
446 | - | let | |
445 | + | func bP (aH,bj,aA,bQ) = { | |
446 | + | let bM = [AttachedPayment(fromBase58String(aA), bQ)] | |
447 | 447 | if ((bj == a)) | |
448 | - | then invoke(aN(), "lockShareTokens", [aH, 0], | |
449 | - | else invoke(aO(addressFromStringValue(aH)), "stake", nil, | |
448 | + | then invoke(aN(), "lockShareTokens", [aH, 0], bM) | |
449 | + | else invoke(aO(addressFromStringValue(aH)), "stake", nil, bM) | |
450 | 450 | } | |
451 | 451 | ||
452 | 452 | ||
453 | - | func | |
454 | - | let | |
455 | - | then $Tuple3(aN(), "withdrawShareTokens", [aH, | |
453 | + | func bR (aH,bj,aA,bQ) = { | |
454 | + | let bS = if ((bj == a)) | |
455 | + | then $Tuple3(aN(), "withdrawShareTokens", [aH, bQ]) | |
456 | 456 | else if ((bj == b)) | |
457 | - | then $Tuple3(aO(Address(fromBase58String(aH))), "unstake", [aA, | |
457 | + | then $Tuple3(aO(Address(fromBase58String(aH))), "unstake", [aA, bQ]) | |
458 | 458 | else throw("Wrong pool type") | |
459 | - | let | |
460 | - | let | |
461 | - | let | |
462 | - | let | |
463 | - | if (( | |
464 | - | then | |
459 | + | let bT = bS._1 | |
460 | + | let bU = bS._2 | |
461 | + | let bV = bS._3 | |
462 | + | let bW = invoke(bT, bU, bV, nil) | |
463 | + | if ((bW == bW)) | |
464 | + | then bQ | |
465 | 465 | else throw("Strict value is not equal to itself.") | |
466 | 466 | } | |
467 | 467 | ||
468 | 468 | ||
469 | - | func | |
469 | + | func bX (aH,bY,bZ,aB,aC,ca,cb) = { | |
470 | 470 | let au = Address(fromBase58String(aH)) | |
471 | - | let | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
471 | + | let cc = 1000000 | |
472 | + | let cd = getIntegerValue(au, t) | |
473 | + | let ce = fraction(ca, cc, (cc - cd), CEILING) | |
474 | + | let cf = if ((cb == bY)) | |
475 | 475 | then { | |
476 | - | let | |
477 | - | $Tuple2( | |
476 | + | let cg = fraction(ce, aC, (aB - ce), CEILING) | |
477 | + | $Tuple2(cg, bZ) | |
478 | 478 | } | |
479 | 479 | else { | |
480 | - | let | |
481 | - | $Tuple2( | |
480 | + | let cg = fraction(ce, aB, (aC - ce), CEILING) | |
481 | + | $Tuple2(cg, bY) | |
482 | 482 | } | |
483 | - | let | |
484 | - | let | |
485 | - | $Tuple2( | |
483 | + | let cg = cf._1 | |
484 | + | let ch = cf._2 | |
485 | + | $Tuple2(ch, cg) | |
486 | 486 | } | |
487 | 487 | ||
488 | 488 | ||
489 | - | func | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | let | |
489 | + | func ci (aH,bY,bZ,aB,aC,ca,cb) = { | |
490 | + | let cj = getIntegerValue(af, "%s__protocolFee") | |
491 | + | let ck = getIntegerValue(af, "%s__poolFee") | |
492 | + | let cl = toBigInt(100000000) | |
493 | + | let cm = if ((cb == bY)) | |
494 | 494 | then { | |
495 | - | let | |
496 | - | $Tuple2( | |
495 | + | let cg = fraction(ca, aC, (aB - ca)) | |
496 | + | $Tuple2(cg, bZ) | |
497 | 497 | } | |
498 | 498 | else { | |
499 | - | let | |
500 | - | $Tuple2( | |
499 | + | let cg = fraction(ca, aB, (aC - ca)) | |
500 | + | $Tuple2(cg, bY) | |
501 | 501 | } | |
502 | - | let | |
503 | - | let | |
504 | - | let | |
505 | - | $Tuple2( | |
502 | + | let cg = cm._1 | |
503 | + | let ch = cm._2 | |
504 | + | let cn = toInt(fraction(toBigInt(cg), cl, (cl - toBigInt((cj + ck))), CEILING)) | |
505 | + | $Tuple2(ch, cn) | |
506 | 506 | } | |
507 | 507 | ||
508 | 508 | ||
509 | - | func | |
509 | + | func co (aE,aH,bY,bZ,aB,aC,ca,cb) = if ((aE == a)) | |
510 | 510 | then { | |
511 | - | let | |
512 | - | let | |
513 | - | let | |
514 | - | invoke(addressFromStringValue(aH), "callFunction", ["exchange", [toString( | |
511 | + | let cp = bX(aH, bY, bZ, aB, aC, ca, cb) | |
512 | + | let ch = cp._1 | |
513 | + | let cg = cp._2 | |
514 | + | invoke(addressFromStringValue(aH), "callFunction", ["exchange", [toString(ca)]], [AttachedPayment(aS(ch), cg)]) | |
515 | 515 | } | |
516 | 516 | else { | |
517 | - | let | |
518 | - | let | |
519 | - | let | |
520 | - | invoke(af, "swap", [ | |
517 | + | let cq = ci(aH, bY, bZ, aB, aC, ca, cb) | |
518 | + | let ch = cq._1 | |
519 | + | let cg = cq._2 | |
520 | + | invoke(af, "swap", [ca, cb, toString(this)], [AttachedPayment(aS(ch), cg)]) | |
521 | 521 | } | |
522 | 522 | ||
523 | 523 | ||
524 | - | func | |
524 | + | func cr (bj,aH,bC,ay,bD,az,aB,aC) = { | |
525 | 525 | let au = addressFromStringValue(aH) | |
526 | 526 | if ((bj == a)) | |
527 | 527 | then { | |
528 | - | let | |
529 | - | let ax = invoke(au, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString( | |
528 | + | let bW = { | |
529 | + | let ax = invoke(au, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bC), toString(bD), "0"]], nil) | |
530 | 530 | if ($isInstanceOf(ax, "List[Any]")) | |
531 | 531 | then ax | |
532 | 532 | else throw(($getType(ax) + " couldn't be cast to List[Any]")) | |
533 | 533 | } | |
534 | - | if (( | |
534 | + | if ((bW == bW)) | |
535 | 535 | then $Tuple2({ | |
536 | - | let ax = | |
536 | + | let ax = bW[0] | |
537 | 537 | if ($isInstanceOf(ax, "Int")) | |
538 | 538 | then ax | |
539 | 539 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
540 | 540 | }, { | |
541 | - | let ax = | |
541 | + | let ax = bW[1] | |
542 | 542 | if ($isInstanceOf(ax, "Int")) | |
543 | 543 | then ax | |
544 | 544 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
547 | 547 | } | |
548 | 548 | else if ((bj == b)) | |
549 | 549 | then { | |
550 | - | let | |
551 | - | then ( | |
550 | + | let cs = if (if ((bC > 0)) | |
551 | + | then (bD > 0) | |
552 | 552 | else false) | |
553 | 553 | then { | |
554 | - | let | |
555 | - | let | |
556 | - | let | |
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | $Tuple3( | |
554 | + | let ct = bB(bj, au, bC, ay, bD, az, aB, aC) | |
555 | + | let cu = ct._1 | |
556 | + | let cv = ct._2 | |
557 | + | let cw = ct._3 | |
558 | + | let cx = ct._4 | |
559 | + | let cy = ct._5 | |
560 | + | $Tuple3(cw, cx, cy) | |
561 | 561 | } | |
562 | - | else if (( | |
563 | - | then $Tuple3( | |
564 | - | else $Tuple3( | |
565 | - | let | |
566 | - | let | |
567 | - | let | |
568 | - | let | |
562 | + | else if ((bC > 0)) | |
563 | + | then $Tuple3(bC, ay, 0) | |
564 | + | else $Tuple3(bD, az, 0) | |
565 | + | let cw = cs._1 | |
566 | + | let cx = cs._2 | |
567 | + | let cz = cs._3 | |
568 | + | let cA = if ((cw > 0)) | |
569 | 569 | then { | |
570 | - | let | |
571 | - | let ax = invoke(au, "putOneTknREADONLY", [ | |
570 | + | let bW = { | |
571 | + | let ax = invoke(au, "putOneTknREADONLY", [cx, cw], nil) | |
572 | 572 | if ($isInstanceOf(ax, "(Int, Int, Int)")) | |
573 | 573 | then ax | |
574 | 574 | else throw(($getType(ax) + " couldn't be cast to (Int, Int, Int)")) | |
575 | 575 | } | |
576 | - | if (( | |
577 | - | then $Tuple2( | |
576 | + | if ((bW == bW)) | |
577 | + | then $Tuple2(bW._1, bW._3) | |
578 | 578 | else throw("Strict value is not equal to itself.") | |
579 | 579 | } | |
580 | 580 | else $Tuple2(0, 0) | |
581 | - | let | |
582 | - | let | |
583 | - | $Tuple2(( | |
581 | + | let cB = cA._1 | |
582 | + | let cC = cA._2 | |
583 | + | $Tuple2((cz + cB), cC) | |
584 | 584 | } | |
585 | 585 | else throw("Wrong pool type") | |
586 | 586 | } | |
587 | 587 | ||
588 | 588 | ||
589 | - | func cC (bj,aH,cx,aA,ay,az,aB,aC,cD,cE) = { | |
590 | - | let au = addressFromStringValue(aH) | |
589 | + | func cD (au,bj,aA,cE) = { | |
591 | 590 | let cF = if ((bj == a)) | |
592 | 591 | then { | |
593 | - | let | |
594 | - | let ax = invoke(au, "callFunction", ["withdrawREADONLY", [toString( | |
595 | - | if ($isInstanceOf(ax, " | |
592 | + | let bW = { | |
593 | + | let ax = invoke(au, "callFunction", ["withdrawREADONLY", [toString(cE)]], nil) | |
594 | + | if ($isInstanceOf(ax, "(Int, Int)")) | |
596 | 595 | then ax | |
597 | - | else throw(($getType(ax) + " couldn't be cast to | |
596 | + | else throw(($getType(ax) + " couldn't be cast to (Int, Int)")) | |
598 | 597 | } | |
599 | - | if ((bV == bV)) | |
600 | - | then $Tuple2({ | |
601 | - | let ax = bV[0] | |
602 | - | if ($isInstanceOf(ax, "Int")) | |
603 | - | then ax | |
604 | - | else throw(($getType(ax) + " couldn't be cast to Int")) | |
605 | - | }, { | |
606 | - | let ax = bV[1] | |
607 | - | if ($isInstanceOf(ax, "Int")) | |
608 | - | then ax | |
609 | - | else throw(($getType(ax) + " couldn't be cast to Int")) | |
610 | - | }) | |
598 | + | if ((bW == bW)) | |
599 | + | then $Tuple2(bW._1, bW._2) | |
611 | 600 | else throw("Strict value is not equal to itself.") | |
612 | 601 | } | |
613 | - | else if ((bj == b)) | |
614 | - | then { | |
615 | - | let cG = split({ | |
616 | - | let ax = invoke(au, "evaluateGetREADONLY", [aA, cx], nil) | |
617 | - | if ($isInstanceOf(ax, "String")) | |
618 | - | then ax | |
619 | - | else throw(($getType(ax) + " couldn't be cast to String")) | |
620 | - | }, "__") | |
621 | - | if ((cG == cG)) | |
622 | - | then $Tuple2(parseIntValue(cG[1]), parseIntValue(cG[2])) | |
623 | - | else throw("Strict value is not equal to itself.") | |
624 | - | } | |
625 | - | else throw("Wrong pool type") | |
626 | - | let cH = cF._1 | |
627 | - | let cI = cF._2 | |
628 | - | if ((cD > 0)) | |
629 | - | then { | |
630 | - | let cJ = if (if ((cE == ay)) | |
631 | - | then (cD > cH) | |
632 | - | else false) | |
633 | - | then (cD - cH) | |
634 | - | else if (if ((cE == az)) | |
635 | - | then (cD > cI) | |
636 | - | else false) | |
637 | - | then (cD - cI) | |
638 | - | else 0 | |
639 | - | let cK = if ((cJ > 0)) | |
640 | - | then if ((bj == a)) | |
641 | - | then bW(aH, ay, az, aB, aC, cJ, cE) | |
642 | - | else ch(aH, ay, az, aB, aC, cJ, cE) | |
643 | - | else $Tuple2("", 0) | |
644 | - | let cg = cK._1 | |
645 | - | let cf = cK._2 | |
646 | - | if ((cE == ay)) | |
647 | - | then $Tuple2(((cH + cJ) - cD), (cI - cf)) | |
648 | - | else $Tuple2((cH - cf), ((cI + cJ) - cD)) | |
602 | + | else { | |
603 | + | let bW = split({ | |
604 | + | let ax = invoke(au, "evaluateGetREADONLY", [aA, cE], nil) | |
605 | + | if ($isInstanceOf(ax, "String")) | |
606 | + | then ax | |
607 | + | else throw(($getType(ax) + " couldn't be cast to String")) | |
608 | + | }, "__") | |
609 | + | if ((bW == bW)) | |
610 | + | then $Tuple2(parseIntValue(bW[1]), parseIntValue(bW[2])) | |
611 | + | else throw("Strict value is not equal to itself.") | |
649 | 612 | } | |
650 | - | else $Tuple2(cH, cI) | |
613 | + | let cG = cF._1 | |
614 | + | let cH = cF._2 | |
615 | + | $Tuple2(cG, cH) | |
651 | 616 | } | |
652 | 617 | ||
653 | 618 | ||
654 | - | func cL (aE,aH) = if ((aE == a)) | |
619 | + | func cI (bj,aH,cy,aA,ay,az,aB,aC,cJ,cK) = { | |
620 | + | let au = addressFromStringValue(aH) | |
621 | + | let cL = cD(au, bj, aA, cy) | |
622 | + | let cM = cL._1 | |
623 | + | let cN = cL._2 | |
624 | + | if ((cJ > 0)) | |
625 | + | then { | |
626 | + | let cO = if (if ((cK == ay)) | |
627 | + | then (cJ > cM) | |
628 | + | else false) | |
629 | + | then (cJ - cM) | |
630 | + | else if (if ((cK == az)) | |
631 | + | then (cJ > cN) | |
632 | + | else false) | |
633 | + | then (cJ - cN) | |
634 | + | else 0 | |
635 | + | let cP = if ((cO > 0)) | |
636 | + | then if ((bj == a)) | |
637 | + | then bX(aH, ay, az, aB, aC, cO, cK) | |
638 | + | else ci(aH, ay, az, aB, aC, cO, cK) | |
639 | + | else $Tuple2("", 0) | |
640 | + | let ch = cP._1 | |
641 | + | let cg = cP._2 | |
642 | + | if ((cK == ay)) | |
643 | + | then $Tuple2(((cM + cO) - cJ), (cN - cg)) | |
644 | + | else $Tuple2((cM - cg), ((cN + cO) - cJ)) | |
645 | + | } | |
646 | + | else $Tuple2(cM, cN) | |
647 | + | } | |
648 | + | ||
649 | + | ||
650 | + | func cQ (aE,aH) = if ((aE == a)) | |
655 | 651 | then { | |
656 | - | let | |
657 | - | if (( | |
652 | + | let cR = ao(ag) | |
653 | + | if ((cR == cR)) | |
658 | 654 | then { | |
659 | - | let | |
660 | - | if (( | |
655 | + | let bW = invoke(aN(), "claim", [aH], nil) | |
656 | + | if ((bW == bW)) | |
661 | 657 | then { | |
662 | - | let | |
663 | - | $Tuple2(( | |
658 | + | let cS = ao(ag) | |
659 | + | $Tuple2((cS - cR), ag) | |
664 | 660 | } | |
665 | 661 | else throw("Strict value is not equal to itself.") | |
666 | 662 | } | |
668 | 664 | } | |
669 | 665 | else if ((aE == b)) | |
670 | 666 | then { | |
671 | - | let | |
672 | - | if (( | |
667 | + | let cR = ao(ah) | |
668 | + | if ((cR == cR)) | |
673 | 669 | then { | |
674 | - | let | |
675 | - | if (( | |
670 | + | let bW = invoke(aO(Address(fromBase58String(aH))), "claimWX", [aH], nil) | |
671 | + | if ((bW == bW)) | |
676 | 672 | then { | |
677 | - | let | |
678 | - | $Tuple2(( | |
673 | + | let cS = ao(ah) | |
674 | + | $Tuple2((cS - cR), ah) | |
679 | 675 | } | |
680 | 676 | else throw("Strict value is not equal to itself.") | |
681 | 677 | } | |
684 | 680 | else throw("Wrong pool type") | |
685 | 681 | ||
686 | 682 | ||
687 | - | func | |
688 | - | let | |
689 | - | if (( | |
683 | + | func cT (bj,aH,aM,bC,ay,bD,az,aB,aC,cU) = { | |
684 | + | let cV = ao(fromBase58String(cU)) | |
685 | + | if ((cV == cV)) | |
690 | 686 | then { | |
691 | 687 | let au = addressFromStringValue(aH) | |
692 | - | let | |
693 | - | then ( | |
688 | + | let cW = if (if ((bC > 0)) | |
689 | + | then (bD > 0) | |
694 | 690 | else false) | |
695 | 691 | then { | |
696 | - | let | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | let | |
701 | - | let | |
702 | - | if (( | |
703 | - | then $Tuple2( | |
692 | + | let cX = bB(bj, au, bC, ay, bD, az, aB, aC) | |
693 | + | let cu = cX._1 | |
694 | + | let cv = cX._2 | |
695 | + | let cw = cX._3 | |
696 | + | let cx = cX._4 | |
697 | + | let bW = bL(au, bj, cu, ay, cv, az) | |
698 | + | if ((bW == bW)) | |
699 | + | then $Tuple2(cw, cx) | |
704 | 700 | else throw("Strict value is not equal to itself.") | |
705 | 701 | } | |
706 | - | else if (( | |
707 | - | then $Tuple2( | |
708 | - | else if (( | |
709 | - | then $Tuple2( | |
702 | + | else if ((bC > 0)) | |
703 | + | then $Tuple2(bC, ay) | |
704 | + | else if ((bD > 0)) | |
705 | + | then $Tuple2(bD, az) | |
710 | 706 | else throw("pmts must be > 0") | |
711 | - | let | |
712 | - | let | |
713 | - | let | |
714 | - | then | |
707 | + | let cw = cW._1 | |
708 | + | let cx = cW._2 | |
709 | + | let bW = if ((cw > 0)) | |
710 | + | then bN(au, bj, cw, cx) | |
715 | 711 | else nil | |
716 | - | if (( | |
712 | + | if ((bW == bW)) | |
717 | 713 | then { | |
718 | - | let | |
719 | - | let | |
720 | - | let | |
721 | - | let | |
722 | - | if ((0 >= | |
714 | + | let cY = ao(fromBase58String(cU)) | |
715 | + | let cZ = (cY - cV) | |
716 | + | let da = fraction(cZ, aL(aH, aM), m) | |
717 | + | let db = (cZ - da) | |
718 | + | if ((0 >= db)) | |
723 | 719 | then throw("amount of staked sharetokens must be > 0") | |
724 | 720 | else { | |
725 | - | let | |
726 | - | if (( | |
727 | - | then $Tuple2( | |
721 | + | let dc = bP(aH, bj, cU, db) | |
722 | + | if ((dc == dc)) | |
723 | + | then $Tuple2(db, da) | |
728 | 724 | else throw("Strict value is not equal to itself.") | |
729 | 725 | } | |
730 | 726 | } | |
734 | 730 | } | |
735 | 731 | ||
736 | 732 | ||
737 | - | func | |
738 | - | let | |
739 | - | let | |
740 | - | let | |
741 | - | then $Tuple2(getIntegerValue(this, (aH + C)), ( | |
742 | - | else $Tuple2(getIntegerValue(this, (aH + D)), | |
743 | - | let | |
744 | - | let | |
745 | - | [IntegerEntry((aH + A), ( | |
733 | + | func dd (aH,aK,de,da,df,aA,aE,dg) = { | |
734 | + | let dh = aG(aH) | |
735 | + | let di = aI(aH) | |
736 | + | let dj = if (dg) | |
737 | + | then $Tuple2(getIntegerValue(this, (aH + C)), (di + de)) | |
738 | + | else $Tuple2(getIntegerValue(this, (aH + D)), di) | |
739 | + | let dk = dj._1 | |
740 | + | let dl = dj._2 | |
741 | + | [IntegerEntry((aH + A), (dh + de)), IntegerEntry((aH + B), dl), IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + u), de), IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + z), dk), StringEntry((((aK + "_") + toString(df)) + v), aH), IntegerEntry((aK + y), df), ScriptTransfer(ac, da, fromBase58String(aA))] | |
746 | 742 | } | |
747 | 743 | ||
748 | 744 | ||
749 | - | func | |
750 | - | let | |
751 | - | if (( | |
745 | + | func dm (dn,do,dp,dq,dr,ds,dt,du,dv,dw) = { | |
746 | + | let dx = ao(aS(dn)) | |
747 | + | if ((dx == dx)) | |
752 | 748 | then { | |
753 | - | let | |
754 | - | if (( | |
755 | - | then (ao(aS( | |
749 | + | let bW = invoke(ad, "swap", [dq, dr, ds, dt, du, dv, dw], [AttachedPayment(dp, do)]) | |
750 | + | if ((bW == bW)) | |
751 | + | then (ao(aS(dn)) - dx) | |
756 | 752 | else throw("Strict value is not equal to itself.") | |
757 | 753 | } | |
758 | 754 | else throw("Strict value is not equal to itself.") | |
759 | 755 | } | |
760 | 756 | ||
761 | 757 | ||
762 | - | func | |
763 | - | let | |
764 | - | if (( | |
758 | + | func dy (dn,do,dp,dz,dA,dw) = { | |
759 | + | let dx = ao(aS(dn)) | |
760 | + | if ((dx == dx)) | |
765 | 761 | then { | |
766 | - | let | |
767 | - | if (( | |
768 | - | then (ao(aS( | |
762 | + | let bW = invoke(ad, "puzzleSwap", [dz, dA, dw], [AttachedPayment(dp, do)]) | |
763 | + | if ((bW == bW)) | |
764 | + | then (ao(aS(dn)) - dx) | |
769 | 765 | else throw("Strict value is not equal to itself.") | |
770 | 766 | } | |
771 | 767 | else throw("Strict value is not equal to itself.") | |
772 | 768 | } | |
773 | 769 | ||
774 | 770 | ||
775 | - | func | |
776 | - | let | |
777 | - | if (( | |
771 | + | func dB (dn,do,dp,dC,dD,dE,dF,dG,dH,dw) = { | |
772 | + | let dx = ao(aS(dn)) | |
773 | + | if ((dx == dx)) | |
778 | 774 | then { | |
779 | - | let | |
780 | - | if (( | |
781 | - | then (ao(aS( | |
775 | + | let bW = invoke(ad, "swopfiSwap", [dC, dD, dE, dF, dG, dH, dw], [AttachedPayment(dp, do)]) | |
776 | + | if ((bW == bW)) | |
777 | + | then (ao(aS(dn)) - dx) | |
782 | 778 | else throw("Strict value is not equal to itself.") | |
783 | 779 | } | |
784 | 780 | else throw("Strict value is not equal to itself.") | |
785 | 781 | } | |
786 | 782 | ||
787 | 783 | ||
788 | - | func | |
784 | + | func dI (aH,bj,dJ,dK) = { | |
789 | 785 | let au = Address(fromBase58String(aH)) | |
790 | - | let | |
791 | - | let | |
792 | - | let | |
793 | - | let aB = | |
794 | - | let aC = | |
795 | - | let aA = | |
796 | - | if (if (( | |
797 | - | then ( | |
786 | + | let dL = aD(au, bj) | |
787 | + | let dM = dL._1 | |
788 | + | let dN = dL._2 | |
789 | + | let aB = dL._3 | |
790 | + | let aC = dL._4 | |
791 | + | let aA = dL._5 | |
792 | + | if (if ((dJ != dM)) | |
793 | + | then (dJ != dN) | |
798 | 794 | else false) | |
799 | 795 | then throw("Wrong asset") | |
800 | 796 | else { | |
801 | - | let | |
802 | - | then $Tuple2( | |
803 | - | else $Tuple2(0, | |
804 | - | let | |
805 | - | let | |
806 | - | let | |
807 | - | let | |
808 | - | let | |
809 | - | let | |
810 | - | let | |
811 | - | let | |
812 | - | let | |
813 | - | let | |
814 | - | let | |
815 | - | let | |
816 | - | let | |
817 | - | then ( | |
797 | + | let dO = if ((dJ == dM)) | |
798 | + | then $Tuple2(dK, 0) | |
799 | + | else $Tuple2(0, dK) | |
800 | + | let bC = dO._1 | |
801 | + | let bD = dO._2 | |
802 | + | let dP = cT(bj, aH, i, bC, dM, bD, dN, aB, aC, aA) | |
803 | + | let de = dP._1 | |
804 | + | let dQ = dP._2 | |
805 | + | let dR = valueOrElse(getInteger(this, (aH + C)), 0) | |
806 | + | let dS = valueOrElse(getInteger(this, (aH + D)), 0) | |
807 | + | let dT = aG(aH) | |
808 | + | let dU = aI(aH) | |
809 | + | let dV = fraction(dU, j, dT) | |
810 | + | let dW = fraction(de, dV, j) | |
811 | + | let dX = (de - dW) | |
812 | + | let dY = if ((dU > 0)) | |
813 | + | then (dR + fraction(dW, k, dU)) | |
818 | 814 | else 0 | |
819 | - | let | |
820 | - | then ( | |
815 | + | let dZ = if (((dT - dU) > 0)) | |
816 | + | then (dS + fraction(dX, k, (dT - dU))) | |
821 | 817 | else 0 | |
822 | - | let | |
823 | - | let | |
824 | - | let | |
825 | - | if (( | |
826 | - | then ([IntegerEntry((aH + C), | |
818 | + | let ea = fraction(dW, aL(aH, d), m) | |
819 | + | let eb = fraction(dX, aL(aH, c), m) | |
820 | + | let ec = bR(aH, bj, aA, (ea + eb)) | |
821 | + | if ((ec == ec)) | |
822 | + | then ([IntegerEntry((aH + C), dY), IntegerEntry((aH + D), dZ), IntegerEntry((aH + A), ((dT + de) - ec)), IntegerEntry((aH + B), ((dU + dW) - ea)), ScriptTransfer(ac, (ea + eb), fromBase58String(aA))] ++ bw(dM, dN, aA, nil)) | |
827 | 823 | else throw("Strict value is not equal to itself.") | |
828 | 824 | } | |
829 | 825 | } | |
830 | 826 | ||
831 | 827 | ||
832 | - | func | |
828 | + | func ed (aH,cE,ee,ef) = { | |
833 | 829 | let au = Address(fromBase58String(aH)) | |
834 | 830 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool") | |
835 | - | let | |
836 | - | let | |
837 | - | let | |
838 | - | let aB = | |
839 | - | let aC = | |
840 | - | let aA = | |
841 | - | let | |
842 | - | if (( | |
831 | + | let eg = aD(au, bj) | |
832 | + | let bY = eg._1 | |
833 | + | let bZ = eg._2 | |
834 | + | let aB = eg._3 | |
835 | + | let aC = eg._4 | |
836 | + | let aA = eg._5 | |
837 | + | let eh = ao(aS(bY)) | |
838 | + | if ((eh == eh)) | |
843 | 839 | then { | |
844 | - | let | |
845 | - | if (( | |
840 | + | let ei = ao(aS(bZ)) | |
841 | + | if ((ei == ei)) | |
846 | 842 | then { | |
847 | - | let | |
848 | - | then invoke(au, "callFunction", ["withdraw", [toString( | |
843 | + | let bW = if ((bj == a)) | |
844 | + | then invoke(au, "callFunction", ["withdraw", [toString(cE)]], nil) | |
849 | 845 | else { | |
850 | - | let | |
851 | - | if (( | |
852 | - | then invoke(au, "get", nil, [AttachedPayment(aS(aA), | |
846 | + | let bW = bR(aH, bj, aA, cE) | |
847 | + | if ((bW == bW)) | |
848 | + | then invoke(au, "get", nil, [AttachedPayment(aS(aA), cE)]) | |
853 | 849 | else throw("Strict value is not equal to itself.") | |
854 | 850 | } | |
855 | - | if (( | |
851 | + | if ((bW == bW)) | |
856 | 852 | then { | |
857 | - | let | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
853 | + | let ej = ao(aS(bY)) | |
854 | + | let ek = ao(aS(bZ)) | |
855 | + | let el = $Tuple2((ej - eh), (ek - ei)) | |
856 | + | let em = el._1 | |
857 | + | let en = el._2 | |
858 | + | let eo = if ((ee > 0)) | |
863 | 859 | then { | |
864 | - | let | |
865 | - | then ( | |
860 | + | let cO = if (if ((ef == bY)) | |
861 | + | then (ee > em) | |
866 | 862 | else false) | |
867 | - | then ( | |
868 | - | else if (if (( | |
869 | - | then ( | |
863 | + | then (ee - em) | |
864 | + | else if (if ((ef == bZ)) | |
865 | + | then (ee > en) | |
870 | 866 | else false) | |
871 | - | then ( | |
867 | + | then (ee - en) | |
872 | 868 | else 0 | |
873 | - | let | |
874 | - | then | |
869 | + | let ep = if ((cO > 0)) | |
870 | + | then co(bj, aH, bY, bZ, (aB - em), (aC - en), cO, ef) | |
875 | 871 | else nil | |
876 | - | if (( | |
872 | + | if ((ep == ep)) | |
877 | 873 | then { | |
878 | - | let | |
879 | - | let | |
880 | - | if (( | |
881 | - | then $Tuple2((( | |
882 | - | else $Tuple2(( | |
874 | + | let eq = ao(aS(bY)) | |
875 | + | let er = ao(aS(bZ)) | |
876 | + | if ((ef == bY)) | |
877 | + | then $Tuple2(((eq - eh) - ee), (er - ei)) | |
878 | + | else $Tuple2((eq - eh), ((er - ei) - ee)) | |
883 | 879 | } | |
884 | 880 | else throw("Strict value is not equal to itself.") | |
885 | 881 | } | |
886 | - | else $Tuple2( | |
887 | - | let | |
888 | - | let | |
889 | - | $Tuple7( | |
882 | + | else $Tuple2(em, en) | |
883 | + | let es = eo._1 | |
884 | + | let et = eo._2 | |
885 | + | $Tuple7(es, bY, et, bZ, ej, ek, aA) | |
890 | 886 | } | |
891 | 887 | else throw("Strict value is not equal to itself.") | |
892 | 888 | } | |
896 | 892 | } | |
897 | 893 | ||
898 | 894 | ||
899 | - | func | |
900 | - | let | |
901 | - | let | |
902 | - | let | |
895 | + | func eu (aK,aH,ev,ew) = { | |
896 | + | let ex = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + u)), "Unknown position") | |
897 | + | let ey = getIntegerValue(this, (((((aH + "_") + aK) + "_") + ev) + z)) | |
898 | + | let ez = if (ew) | |
903 | 899 | then getIntegerValue(this, (aH + C)) | |
904 | 900 | else getIntegerValue(this, (aH + D)) | |
905 | - | ( | |
901 | + | (ex + fraction(ex, (ez - ey), k)) | |
906 | 902 | } | |
907 | 903 | ||
908 | 904 | ||
909 | - | func | |
910 | - | let | |
911 | - | let | |
912 | - | let | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | let | |
905 | + | func eA (aK,aH,ev,eB) = { | |
906 | + | let ex = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + u)), "Unknown position") | |
907 | + | let cJ = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + w)), 0) | |
908 | + | let cE = eu(aK, aH, ev, (cJ > 0)) | |
909 | + | let eC = aG(aH) | |
910 | + | let eD = Address(fromBase58String(aK)) | |
911 | + | let ef = valueOrElse(getString(this, (((((aH + "_") + aK) + "_") + ev) + x)), "") | |
912 | + | let ee = if ((cJ > 0)) | |
917 | 913 | then { | |
918 | - | let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + | |
914 | + | let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + ev), ef], nil) | |
919 | 915 | if ($isInstanceOf(ax, "Int")) | |
920 | 916 | then ax | |
921 | 917 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
922 | 918 | } | |
923 | 919 | else 0 | |
924 | - | let | |
925 | - | if (( | |
920 | + | let eE = ed(aH, cE, ee, ef) | |
921 | + | if ((eE == eE)) | |
926 | 922 | then { | |
927 | - | let aA = | |
928 | - | let | |
929 | - | let | |
930 | - | let | |
931 | - | let | |
932 | - | let | |
933 | - | let | |
934 | - | let | |
935 | - | then invoke(ai(), "repayFor", [((aK + "_") + | |
923 | + | let aA = eE._7 | |
924 | + | let ek = eE._6 | |
925 | + | let ej = eE._5 | |
926 | + | let bZ = eE._4 | |
927 | + | let eF = eE._3 | |
928 | + | let bY = eE._2 | |
929 | + | let eG = eE._1 | |
930 | + | let eH = if ((ee > 0)) | |
931 | + | then invoke(ai(), "repayFor", [((aK + "_") + ev)], [AttachedPayment(aS(ef), ee)]) | |
936 | 932 | else 0 | |
937 | - | if (( | |
938 | - | then ([DeleteEntry((((((aH + "_") + aK) + "_") + | |
933 | + | if ((eH == eH)) | |
934 | + | then ([DeleteEntry((((((aH + "_") + aK) + "_") + ev) + u)), DeleteEntry((((((aH + "_") + aK) + "_") + ev) + z)), IntegerEntry((aH + A), (eC - cE)), ScriptTransfer(eD, eG, aS(bY)), ScriptTransfer(eD, eF, aS(bZ))] ++ bw(bY, bZ, aA, nil)) | |
939 | 935 | else throw("Strict value is not equal to itself.") | |
940 | 936 | } | |
941 | 937 | else throw("Strict value is not equal to itself.") | |
942 | 938 | } | |
943 | 939 | ||
944 | 940 | ||
945 | - | func | |
946 | - | let | |
947 | - | let aK = | |
948 | - | let aH = | |
949 | - | let | |
950 | - | let | |
951 | - | let | |
952 | - | let | |
953 | - | let aB = parseIntValue( | |
954 | - | let aC = parseIntValue( | |
955 | - | let aA = | |
956 | - | let | |
957 | - | let | |
958 | - | $Tuple11(aK, aH, | |
941 | + | func eI (eJ) = { | |
942 | + | let eK = split(valueOrErrorMessage(getString(this, (eJ + L)), ("No request with id " + eJ)), ",") | |
943 | + | let aK = eK[0] | |
944 | + | let aH = eK[1] | |
945 | + | let bC = parseIntValue(eK[2]) | |
946 | + | let dM = eK[3] | |
947 | + | let bD = parseIntValue(eK[4]) | |
948 | + | let dN = eK[5] | |
949 | + | let aB = parseIntValue(eK[6]) | |
950 | + | let aC = parseIntValue(eK[7]) | |
951 | + | let aA = eK[8] | |
952 | + | let eL = eK[9] | |
953 | + | let eM = parseIntValue(eK[10]) | |
954 | + | $Tuple11(aK, aH, bC, dM, bD, dN, aB, aC, aA, eL, eM) | |
959 | 955 | } | |
960 | 956 | ||
961 | 957 | ||
962 | - | func | |
958 | + | func eN (bC,bD,ay,az,eO,eP) = { | |
963 | 959 | let bn = getIntegerValue(ae, (ay + R)) | |
964 | 960 | let bo = getIntegerValue(ae, (az + R)) | |
965 | - | let | |
966 | - | let | |
967 | - | let | |
968 | - | let | |
969 | - | then $Tuple2(bn, | |
970 | - | else $Tuple2(bo, | |
971 | - | let | |
972 | - | let | |
973 | - | fraction(fraction( | |
961 | + | let eQ = pow(10, 0, aT(ay), 0, 0, DOWN) | |
962 | + | let eR = pow(10, 0, aT(az), 0, 0, DOWN) | |
963 | + | let eS = (fraction(bn, bC, eQ) + fraction(bo, bD, eR)) | |
964 | + | let eT = if ((eP == ay)) | |
965 | + | then $Tuple2(bn, eQ) | |
966 | + | else $Tuple2(bo, eR) | |
967 | + | let eU = eT._1 | |
968 | + | let eV = eT._2 | |
969 | + | fraction(fraction(eS, (eO - 100), 100), eV, eU) | |
974 | 970 | } | |
975 | 971 | ||
976 | 972 | ||
977 | 973 | @Callable(al) | |
978 | - | func calcPriceImpactEVALONLY (aH, | |
974 | + | func calcPriceImpactEVALONLY (aH,eO,eP,bC,bD) = if (if ((100 > eO)) | |
979 | 975 | then true | |
980 | - | else ( | |
976 | + | else (eO > 300)) | |
981 | 977 | then throw("Leverage can't be <100 and >300") | |
982 | 978 | else { | |
983 | 979 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
984 | - | let | |
985 | - | let | |
986 | - | let | |
987 | - | let aB = | |
988 | - | let aC = | |
989 | - | let aA = | |
990 | - | let | |
991 | - | then | |
980 | + | let eW = aD(Address(fromBase58String(aH)), bj) | |
981 | + | let dM = eW._1 | |
982 | + | let dN = eW._2 | |
983 | + | let aB = eW._3 | |
984 | + | let aC = eW._4 | |
985 | + | let aA = eW._5 | |
986 | + | let cJ = if ((eO > 100)) | |
987 | + | then eN(bC, bD, dM, dN, eO, eP) | |
992 | 988 | else 0 | |
993 | - | let | |
994 | - | then $Tuple2(( | |
995 | - | else $Tuple2( | |
996 | - | let | |
997 | - | let | |
998 | - | let | |
999 | - | let | |
1000 | - | let | |
1001 | - | let | |
1002 | - | then ( | |
1003 | - | else | |
1004 | - | $Tuple2(nil, [ | |
989 | + | let eX = if ((eP == dM)) | |
990 | + | then $Tuple2((bC + cJ), bD) | |
991 | + | else $Tuple2(bC, (bD + cJ)) | |
992 | + | let eY = eX._1 | |
993 | + | let eZ = eX._2 | |
994 | + | let fa = cr(bj, aH, eY, dM, eZ, dN, aB, aC) | |
995 | + | let cy = fa._1 | |
996 | + | let cC = fa._2 | |
997 | + | let fb = if ((0 > cC)) | |
998 | + | then (cC * -1) | |
999 | + | else cC | |
1000 | + | $Tuple2(nil, [fb]) | |
1005 | 1001 | } | |
1006 | 1002 | ||
1007 | 1003 | ||
1008 | 1004 | ||
1009 | 1005 | @Callable(al) | |
1006 | + | func replenishFromLandEVALONLY (eJ) = valueOrElse(an(al), { | |
1007 | + | let fc = eI(eJ) | |
1008 | + | let aK = fc._1 | |
1009 | + | let aH = fc._2 | |
1010 | + | let bC = fc._3 | |
1011 | + | let dM = fc._4 | |
1012 | + | let bD = fc._5 | |
1013 | + | let dN = fc._6 | |
1014 | + | let aB = fc._7 | |
1015 | + | let aC = fc._8 | |
1016 | + | let aA = fc._9 | |
1017 | + | let eL = fc._10 | |
1018 | + | let eM = fc._11 | |
1019 | + | if ((size(al.payments) != 1)) | |
1020 | + | then throw("Wrong payment size") | |
1021 | + | else if (if ((aR(al.payments[0].assetId) != eL)) | |
1022 | + | then true | |
1023 | + | else (al.payments[0].amount != eM)) | |
1024 | + | then throw("Wrong payment") | |
1025 | + | else { | |
1026 | + | let fd = if ((dM == eL)) | |
1027 | + | then $Tuple2((bC + al.payments[0].amount), bD) | |
1028 | + | else $Tuple2(bC, (bD + al.payments[0].amount)) | |
1029 | + | let fe = fd._1 | |
1030 | + | let ff = fd._2 | |
1031 | + | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool") | |
1032 | + | let fg = cT(bj, aH, g, fe, dM, ff, dN, aB, aC, aA) | |
1033 | + | let fh = fg._1 | |
1034 | + | let ec = fg._2 | |
1035 | + | let df = aJ(aK) | |
1036 | + | let fi = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + w), eM), StringEntry((((((aH + "_") + aK) + "_") + toString(df)) + x), eL)] | |
1037 | + | let fj = dd(aH, aK, fh, ec, df, aA, bj, true) | |
1038 | + | nil | |
1039 | + | } | |
1040 | + | }) | |
1041 | + | ||
1042 | + | ||
1043 | + | ||
1044 | + | @Callable(al) | |
1010 | 1045 | func getShareAssetPriceREADONLY (aA) = { | |
1011 | - | let | |
1012 | - | $Tuple2(nil, | |
1046 | + | let fk = bi(aA) | |
1047 | + | $Tuple2(nil, fk) | |
1013 | 1048 | } | |
1014 | 1049 | ||
1015 | 1050 | ||
1016 | 1051 | ||
1017 | 1052 | @Callable(al) | |
1018 | - | func getUserPositionShareAmountREADONLY (aK, | |
1019 | - | let aH = valueOrErrorMessage(getString(this, (((aK + "_") + | |
1020 | - | let | |
1021 | - | let | |
1022 | - | $Tuple2(nil, | |
1053 | + | func getUserPositionShareAmountREADONLY (aK,df) = { | |
1054 | + | let aH = valueOrErrorMessage(getString(this, (((aK + "_") + df) + v)), "Unknown position") | |
1055 | + | let cJ = getIntegerValue(this, (((((aH + "_") + aK) + "_") + df) + w)) | |
1056 | + | let cE = eu(aK, aH, df, (cJ > 0)) | |
1057 | + | $Tuple2(nil, cE) | |
1023 | 1058 | } | |
1024 | 1059 | ||
1025 | 1060 | ||
1026 | 1061 | ||
1027 | 1062 | @Callable(al) | |
1028 | - | func getUserPositionInDollarsREADONLY (aK, | |
1029 | - | func | |
1030 | - | let | |
1031 | - | let | |
1032 | - | let | |
1033 | - | let | |
1063 | + | func getUserPositionInDollarsREADONLY (aK,fl,df) = { | |
1064 | + | func fm (aZ,aH) = { | |
1065 | + | let fn = aZ | |
1066 | + | let fo = fn._1 | |
1067 | + | let fp = fn._2 | |
1068 | + | let fq = fn._3 | |
1034 | 1069 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
1035 | - | let | |
1036 | - | let | |
1037 | - | let | |
1038 | - | let aB = | |
1039 | - | let aC = | |
1040 | - | let aA = | |
1041 | - | let | |
1042 | - | let | |
1043 | - | let | |
1044 | - | let | |
1045 | - | let | |
1046 | - | if (( | |
1047 | - | then $Tuple3(( | |
1070 | + | let fr = aD(Address(fromBase58String(aH)), bj) | |
1071 | + | let dM = fr._1 | |
1072 | + | let dN = fr._2 | |
1073 | + | let aB = fr._3 | |
1074 | + | let aC = fr._4 | |
1075 | + | let aA = fr._5 | |
1076 | + | let cJ = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + df[fq]) + w)), 0) | |
1077 | + | let cE = eu(aK, aH, df[fq], (cJ > 0)) | |
1078 | + | let fk = bi(aA) | |
1079 | + | let fs = pow(10, 0, aT(aA), 0, 0, DOWN) | |
1080 | + | let ft = fraction(cE, fk, fs) | |
1081 | + | if ((cJ == 0)) | |
1082 | + | then $Tuple3((fo :+ ft), (fp :+ 0), (fq + 1)) | |
1048 | 1083 | else { | |
1049 | - | let | |
1050 | - | let | |
1051 | - | let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + | |
1084 | + | let ef = getStringValue(this, (((((aH + "_") + aK) + "_") + df[fq]) + x)) | |
1085 | + | let ee = { | |
1086 | + | let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + df[fq]), ef], nil) | |
1052 | 1087 | if ($isInstanceOf(ax, "Int")) | |
1053 | 1088 | then ax | |
1054 | 1089 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
1055 | 1090 | } | |
1056 | - | let | |
1057 | - | let | |
1058 | - | let | |
1059 | - | $Tuple3(( | |
1091 | + | let fu = getIntegerValue(ae, (ef + R)) | |
1092 | + | let fv = pow(10, 0, aT(ef), 0, 0, DOWN) | |
1093 | + | let fw = fraction(ee, fu, fv) | |
1094 | + | $Tuple3((fo :+ ft), (fp :+ fw), (fq + 1)) | |
1060 | 1095 | } | |
1061 | 1096 | } | |
1062 | 1097 | ||
1063 | - | let | |
1064 | - | let bb = | |
1098 | + | let fx = { | |
1099 | + | let bb = fl | |
1065 | 1100 | let bc = size(bb) | |
1066 | 1101 | let bd = $Tuple3(nil, nil, 0) | |
1067 | 1102 | func be (bf,bg) = if ((bg >= bc)) | |
1068 | 1103 | then bf | |
1069 | - | else | |
1104 | + | else fm(bf, bb[bg]) | |
1070 | 1105 | ||
1071 | 1106 | func bh (bf,bg) = if ((bg >= bc)) | |
1072 | 1107 | then bf | |
1074 | 1109 | ||
1075 | 1110 | bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
1076 | 1111 | } | |
1077 | - | let | |
1078 | - | let | |
1079 | - | $Tuple2(nil, $Tuple2( | |
1112 | + | let fy = fx._1 | |
1113 | + | let ee = fx._2 | |
1114 | + | $Tuple2(nil, $Tuple2(fy, ee)) | |
1080 | 1115 | } | |
1081 | 1116 | ||
1082 | 1117 | ||
1083 | 1118 | ||
1084 | 1119 | @Callable(al) | |
1085 | - | func replenish (aH, | |
1120 | + | func replenish (aH,eO,eP) = if (if ((100 > eO)) | |
1086 | 1121 | then true | |
1087 | - | else ( | |
1122 | + | else (eO > 300)) | |
1088 | 1123 | then throw("Leverage can't be <100 and >300") | |
1089 | 1124 | else if (if (!(getBooleanValue(this, (aH + E)))) | |
1090 | - | then ( | |
1125 | + | then (eO > 100) | |
1091 | 1126 | else false) | |
1092 | 1127 | then throw("You can't borrow in this pool") | |
1093 | 1128 | else { | |
1094 | 1129 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
1095 | - | let | |
1096 | - | let | |
1097 | - | let | |
1098 | - | let aB = | |
1099 | - | let aC = | |
1100 | - | let aA = | |
1101 | - | let | |
1102 | - | then if ((aR(al.payments[0].assetId) != | |
1130 | + | let fz = aD(Address(fromBase58String(aH)), bj) | |
1131 | + | let dM = fz._1 | |
1132 | + | let dN = fz._2 | |
1133 | + | let aB = fz._3 | |
1134 | + | let aC = fz._4 | |
1135 | + | let aA = fz._5 | |
1136 | + | let fA = if ((size(al.payments) == 2)) | |
1137 | + | then if ((aR(al.payments[0].assetId) != dM)) | |
1103 | 1138 | then throw("Wrong payment asset A") | |
1104 | - | else if ((aR(al.payments[1].assetId) != | |
1139 | + | else if ((aR(al.payments[1].assetId) != dN)) | |
1105 | 1140 | then throw("Wrong payment asset B") | |
1106 | - | else $Tuple4(al.payments[0].amount, | |
1141 | + | else $Tuple4(al.payments[0].amount, dM, al.payments[1].amount, dN) | |
1107 | 1142 | else if ((size(al.payments) == 1)) | |
1108 | - | then if ((aR(al.payments[0].assetId) == | |
1109 | - | then $Tuple4(al.payments[0].amount, | |
1110 | - | else if ((aR(al.payments[0].assetId) == | |
1111 | - | then $Tuple4(0, | |
1143 | + | then if ((aR(al.payments[0].assetId) == dM)) | |
1144 | + | then $Tuple4(al.payments[0].amount, dM, 0, dN) | |
1145 | + | else if ((aR(al.payments[0].assetId) == dN)) | |
1146 | + | then $Tuple4(0, dM, al.payments[0].amount, dN) | |
1112 | 1147 | else throw("Wrong payment") | |
1113 | 1148 | else throw("One or two payments expected") | |
1114 | - | let | |
1115 | - | let | |
1116 | - | let | |
1117 | - | let | |
1118 | - | let | |
1119 | - | if (( | |
1149 | + | let bC = fA._1 | |
1150 | + | let fB = fA._2 | |
1151 | + | let bD = fA._3 | |
1152 | + | let fC = fA._4 | |
1153 | + | let fD = aJ(toString(al.caller)) | |
1154 | + | if ((eO > 100)) | |
1120 | 1155 | then { | |
1121 | - | let | |
1122 | - | let | |
1123 | - | let | |
1124 | - | let ax = invoke(this, "createNewRequest", [ | |
1156 | + | let cJ = eN(bC, bD, fB, fC, eO, eP) | |
1157 | + | let eK = makeString([toString(al.caller), aH, toString(bC), fB, toString(bD), fC, toString(aB), toString(aC), aA, eP, toString(cJ)], ",") | |
1158 | + | let fE = { | |
1159 | + | let ax = invoke(this, "createNewRequest", [eK], nil) | |
1125 | 1160 | if ($isInstanceOf(ax, "Int")) | |
1126 | 1161 | then ax | |
1127 | 1162 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
1128 | 1163 | } | |
1129 | - | if (( | |
1164 | + | if ((fE == fE)) | |
1130 | 1165 | then { | |
1131 | - | let | |
1132 | - | let | |
1133 | - | if (( | |
1166 | + | let fF = [((toString(al.caller) + "_") + toString(fD)), aA, eP, cJ, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fE, "Can't create new request"))] | |
1167 | + | let bW = reentrantInvoke(ai(), "flashPosition", fF, nil) | |
1168 | + | if ((bW == bW)) | |
1134 | 1169 | then nil | |
1135 | 1170 | else throw("Strict value is not equal to itself.") | |
1136 | 1171 | } | |
1137 | 1172 | else throw("Strict value is not equal to itself.") | |
1138 | 1173 | } | |
1139 | 1174 | else { | |
1140 | - | let fu = cO(bj, aH, h, bB, dH, bC, dI, aB, aC, aA) | |
1141 | - | let fv = fu._1 | |
1142 | - | let dX = fu._2 | |
1143 | - | (cY(aH, toString(al.caller), fv, dX, fr, aA, bj, false) ++ bw(dH, dI, aA)) | |
1175 | + | let fG = cT(bj, aH, h, bC, dM, bD, dN, aB, aC, aA) | |
1176 | + | let fh = fG._1 | |
1177 | + | let ec = fG._2 | |
1178 | + | let fH = cD(Address(fromBase58String(aH)), bj, aA, fh) | |
1179 | + | let fI = fH._1 | |
1180 | + | let fJ = fH._2 | |
1181 | + | (dd(aH, toString(al.caller), fh, ec, fD, aA, bj, false) ++ bw(dM, dN, aA, [toString(fI), toString(fJ)])) | |
1144 | 1182 | } | |
1145 | 1183 | } | |
1146 | 1184 | ||
1147 | 1185 | ||
1148 | 1186 | ||
1149 | 1187 | @Callable(al) | |
1150 | - | func withdraw (aH, | |
1188 | + | func withdraw (aH,ev) = eA(toString(al.caller), aH, toString(ev), false) | |
1151 | 1189 | ||
1152 | 1190 | ||
1153 | 1191 | ||
1154 | 1192 | @Callable(al) | |
1155 | - | func createUpdateStopLoss ( | |
1156 | - | let | |
1157 | - | if (!(isDefined(getInteger(this, ((((( | |
1193 | + | func createUpdateStopLoss (ev,fK,ap,fL) = { | |
1194 | + | let fM = getIntegerValue(ae, (ap + R)) | |
1195 | + | if (!(isDefined(getInteger(this, (((((fK + "_") + toString(al.caller)) + "_") + toString(ev)) + u))))) | |
1158 | 1196 | then throw("There are no user position") | |
1159 | - | else if ((0 >= | |
1197 | + | else if ((0 >= fL)) | |
1160 | 1198 | then throw("Price must be greater than 0") | |
1161 | - | else if (( | |
1199 | + | else if ((fL > fM)) | |
1162 | 1200 | then throw("Price must be less than current token price") | |
1163 | - | else [IntegerEntry((((((((toString(al.caller) + "_") + toString( | |
1201 | + | else [IntegerEntry((((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S), fL)] | |
1164 | 1202 | } | |
1165 | 1203 | ||
1166 | 1204 | ||
1167 | 1205 | ||
1168 | 1206 | @Callable(al) | |
1169 | - | func deleteStopLoss ( | |
1207 | + | func deleteStopLoss (ev,fK,ap) = if (!(isDefined(getInteger(this, (((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S))))) | |
1170 | 1208 | then throw("No entry") | |
1171 | - | else [DeleteEntry((((((((toString(al.caller) + "_") + toString( | |
1209 | + | else [DeleteEntry((((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S))] | |
1172 | 1210 | ||
1173 | 1211 | ||
1174 | 1212 | ||
1175 | 1213 | @Callable(al) | |
1176 | - | func init ( | |
1214 | + | func init (fN,fO,fP,ae,fQ,af,fR,fS,fT) = if (isDefined(getString(T))) | |
1177 | 1215 | then throw("Already inited") | |
1178 | - | else [StringEntry(T, | |
1216 | + | else [StringEntry(T, fN), StringEntry(U, fO), StringEntry(V, fP), StringEntry(X, ae), StringEntry(Y, fQ), StringEntry(Z, af), StringEntry(aa, fR), StringEntry(ab, fS), StringEntry(W, fT)] | |
1179 | 1217 | ||
1180 | 1218 | ||
1181 | 1219 | ||
1182 | 1220 | @Callable(al) | |
1183 | - | func createNewRequest ( | |
1184 | - | let | |
1185 | - | $Tuple2([StringEntry((toString( | |
1221 | + | func createNewRequest (bV) = valueOrElse(am(al), { | |
1222 | + | let fE = (valueOrElse(getInteger(this, M), 0) + 1) | |
1223 | + | $Tuple2([StringEntry((toString(fE) + L), bV), IntegerEntry(M, fE)], fE) | |
1186 | 1224 | }) | |
1187 | 1225 | ||
1188 | 1226 | ||
1189 | 1227 | ||
1190 | 1228 | @Callable(al) | |
1191 | - | func replenishFromLand ( | |
1192 | - | let | |
1193 | - | let aK = | |
1194 | - | let aH = | |
1195 | - | let | |
1196 | - | let | |
1197 | - | let | |
1198 | - | let | |
1199 | - | let aB = | |
1200 | - | let aC = | |
1201 | - | let aA = | |
1202 | - | let | |
1203 | - | let | |
1229 | + | func replenishFromLand (eJ) = valueOrElse(an(al), { | |
1230 | + | let fU = eI(eJ) | |
1231 | + | let aK = fU._1 | |
1232 | + | let aH = fU._2 | |
1233 | + | let bC = fU._3 | |
1234 | + | let dM = fU._4 | |
1235 | + | let bD = fU._5 | |
1236 | + | let dN = fU._6 | |
1237 | + | let aB = fU._7 | |
1238 | + | let aC = fU._8 | |
1239 | + | let aA = fU._9 | |
1240 | + | let eL = fU._10 | |
1241 | + | let eM = fU._11 | |
1204 | 1242 | if ((size(al.payments) != 1)) | |
1205 | 1243 | then throw("Wrong payment size") | |
1206 | - | else if (if ((aR(al.payments[0].assetId) != | |
1244 | + | else if (if ((aR(al.payments[0].assetId) != eL)) | |
1207 | 1245 | then true | |
1208 | - | else (al.payments[0].amount != | |
1246 | + | else (al.payments[0].amount != eM)) | |
1209 | 1247 | then throw("Wrong payment") | |
1210 | 1248 | else { | |
1211 | - | let | |
1212 | - | then $Tuple2(( | |
1213 | - | else $Tuple2( | |
1214 | - | let | |
1215 | - | let | |
1249 | + | let fV = if ((dM == eL)) | |
1250 | + | then $Tuple2((bC + al.payments[0].amount), bD) | |
1251 | + | else $Tuple2(bC, (bD + al.payments[0].amount)) | |
1252 | + | let fe = fV._1 | |
1253 | + | let ff = fV._2 | |
1216 | 1254 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool") | |
1217 | - | let fK = cO(bj, aH, g, fI, dH, fJ, dI, aB, aC, aA) | |
1218 | - | let fv = fK._1 | |
1219 | - | let dX = fK._2 | |
1220 | - | let da = aJ(aK) | |
1221 | - | let fL = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(da)) + w), eI), StringEntry((((((aH + "_") + aK) + "_") + toString(da)) + x), eH)] | |
1222 | - | let fM = cY(aH, aK, fv, dX, da, aA, bj, true) | |
1223 | - | $Tuple2((((fM ++ bw(dH, dI, aA)) ++ fL) :+ DeleteEntry((eF + L))), fv) | |
1255 | + | let fW = cT(bj, aH, g, fe, dM, ff, dN, aB, aC, aA) | |
1256 | + | let fh = fW._1 | |
1257 | + | let ec = fW._2 | |
1258 | + | let df = aJ(aK) | |
1259 | + | let fi = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + w), eM), StringEntry((((((aH + "_") + aK) + "_") + toString(df)) + x), eL)] | |
1260 | + | let fj = dd(aH, aK, fh, ec, df, aA, bj, true) | |
1261 | + | let fX = cD(Address(fromBase58String(aH)), bj, aA, fh) | |
1262 | + | let fI = fX._1 | |
1263 | + | let fJ = fX._2 | |
1264 | + | $Tuple2((((fj ++ bw(dM, dN, aA, [toString(fI), toString(fJ)])) ++ fi) :+ DeleteEntry((eJ + L))), fh) | |
1224 | 1265 | } | |
1225 | 1266 | }) | |
1226 | 1267 | ||
1227 | 1268 | ||
1228 | 1269 | ||
1229 | 1270 | @Callable(al) | |
1230 | - | func liquidate (aK, | |
1231 | - | let aH = valueOrErrorMessage(getString(this, (((aK + "_") + | |
1271 | + | func liquidate (aK,ev,fY) = valueOrElse(an(al), { | |
1272 | + | let aH = valueOrErrorMessage(getString(this, (((aK + "_") + ev) + v)), "no position") | |
1232 | 1273 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
1233 | - | let | |
1234 | - | let | |
1235 | - | let | |
1236 | - | let aB = | |
1237 | - | let aC = | |
1238 | - | let aA = | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | let | |
1243 | - | if (( | |
1274 | + | let fZ = aD(Address(fromBase58String(aH)), bj) | |
1275 | + | let dM = fZ._1 | |
1276 | + | let dN = fZ._2 | |
1277 | + | let aB = fZ._3 | |
1278 | + | let aC = fZ._4 | |
1279 | + | let aA = fZ._5 | |
1280 | + | let bQ = bR(aH, bj, aA, fY) | |
1281 | + | let cJ = getIntegerValue(this, (((((aH + "_") + aK) + "_") + ev) + w)) | |
1282 | + | let ef = getStringValue(this, (((((aH + "_") + aK) + "_") + ev) + x)) | |
1283 | + | let cE = eu(aK, aH, ev, (cJ > 0)) | |
1284 | + | if ((cJ == 0)) | |
1244 | 1285 | then throw("You can't liquidate position without borrow") | |
1245 | - | else [IntegerEntry((((((aH + "_") + aK) + "_") + | |
1286 | + | else [IntegerEntry((((((aH + "_") + aK) + "_") + ev) + z), getIntegerValue(this, (aH + C))), IntegerEntry((aH + B), (aI(aH) - fY)), IntegerEntry((aH + A), (aG(aH) - fY)), IntegerEntry((((((aH + "_") + aK) + "_") + ev) + u), (cE - fY)), ScriptTransfer(al.caller, bQ, fromBase58String(aA))] | |
1246 | 1287 | }) | |
1247 | 1288 | ||
1248 | 1289 | ||
1249 | 1290 | ||
1250 | 1291 | @Callable(al) | |
1251 | - | func stopLoss (aK, | |
1252 | - | let | |
1253 | - | if (!(isDefined(getInteger(this, (((((((aK + "_") + toString( | |
1292 | + | func stopLoss (aK,ev,aH,ap) = valueOrElse(ak(al), { | |
1293 | + | let fM = getIntegerValue(ae, (ap + R)) | |
1294 | + | if (!(isDefined(getInteger(this, (((((((aK + "_") + toString(ev)) + "_") + aH) + "_") + ap) + S))))) | |
1254 | 1295 | then throw("No entry") | |
1255 | - | else ( | |
1296 | + | else (eA(toString(al.caller), aH, toString(ev), true) :+ DeleteEntry((((((((aK + "_") + toString(ev)) + "_") + aH) + "_") + ap) + S))) | |
1256 | 1297 | }) | |
1257 | 1298 | ||
1258 | 1299 | ||
1259 | 1300 | ||
1260 | 1301 | @Callable(al) | |
1261 | - | func capitalizeExKeeper (aH,aE, | |
1262 | - | let | |
1263 | - | then | |
1302 | + | func capitalizeExKeeper (aH,aE,ga,gb,gc,dq,dr,ds,dt,du,dv,dw) = valueOrElse(ak(al), { | |
1303 | + | let gd = if (gc) | |
1304 | + | then cQ(aE, aH) | |
1264 | 1305 | else { | |
1265 | - | let | |
1306 | + | let ge = if ((aE == a)) | |
1266 | 1307 | then ag | |
1267 | 1308 | else ah | |
1268 | - | $Tuple2( | |
1309 | + | $Tuple2(gb, ge) | |
1269 | 1310 | } | |
1270 | - | let | |
1271 | - | let | |
1272 | - | let | |
1273 | - | let | |
1274 | - | let | |
1275 | - | then [IntegerEntry((aH + P), ( | |
1311 | + | let gf = gd._1 | |
1312 | + | let ge = gd._2 | |
1313 | + | let gg = dm(ga, gb, ge, dq, dr, ds, dt, du, dv, dw) | |
1314 | + | let cw = (gf - gb) | |
1315 | + | let gh = if ((cw > 0)) | |
1316 | + | then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))] | |
1276 | 1317 | else nil | |
1277 | - | ( | |
1318 | + | (dI(aH, aE, ga, gg) ++ gh) | |
1278 | 1319 | }) | |
1279 | 1320 | ||
1280 | 1321 | ||
1281 | 1322 | ||
1282 | 1323 | @Callable(al) | |
1283 | - | func capitalizeExPuzzle (aH,aE, | |
1284 | - | let | |
1285 | - | then | |
1324 | + | func capitalizeExPuzzle (aH,aE,ga,gb,gc,dz,dA,dw) = valueOrElse(ak(al), { | |
1325 | + | let gi = if (gc) | |
1326 | + | then cQ(aE, aH) | |
1286 | 1327 | else { | |
1287 | - | let | |
1328 | + | let ge = if ((aE == a)) | |
1288 | 1329 | then ag | |
1289 | 1330 | else ah | |
1290 | - | $Tuple2( | |
1331 | + | $Tuple2(gb, ge) | |
1291 | 1332 | } | |
1292 | - | let | |
1293 | - | let | |
1294 | - | let | |
1295 | - | let | |
1296 | - | let | |
1297 | - | then [IntegerEntry((aH + P), ( | |
1333 | + | let gf = gi._1 | |
1334 | + | let ge = gi._2 | |
1335 | + | let gg = dy(ga, gb, ge, dz, dA, dw) | |
1336 | + | let cw = (gf - gb) | |
1337 | + | let gh = if ((cw > 0)) | |
1338 | + | then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))] | |
1298 | 1339 | else nil | |
1299 | - | ( | |
1340 | + | (dI(aH, aE, ga, gg) ++ gh) | |
1300 | 1341 | }) | |
1301 | 1342 | ||
1302 | 1343 | ||
1303 | 1344 | ||
1304 | 1345 | @Callable(al) | |
1305 | - | func capitalizeExSwopFi (aH,aE, | |
1306 | - | let | |
1307 | - | then | |
1346 | + | func capitalizeExSwopFi (aH,aE,ga,gb,gc,dC,dD,dE,dF,dG,dH,dw) = valueOrElse(ak(al), { | |
1347 | + | let gj = if (gc) | |
1348 | + | then cQ(aE, aH) | |
1308 | 1349 | else { | |
1309 | - | let | |
1350 | + | let ge = if ((aE == a)) | |
1310 | 1351 | then ag | |
1311 | 1352 | else ah | |
1312 | - | $Tuple2( | |
1353 | + | $Tuple2(gb, ge) | |
1313 | 1354 | } | |
1314 | - | let | |
1315 | - | let | |
1316 | - | let | |
1317 | - | let | |
1318 | - | let | |
1319 | - | then [IntegerEntry((aH + P), ( | |
1355 | + | let gf = gj._1 | |
1356 | + | let ge = gj._2 | |
1357 | + | let gg = dB(ga, gb, ge, dC, dD, dE, dF, dG, dH, dw) | |
1358 | + | let cw = (gf - gb) | |
1359 | + | let gh = if ((cw > 0)) | |
1360 | + | then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))] | |
1320 | 1361 | else nil | |
1321 | - | ( | |
1362 | + | (dI(aH, aE, ga, gg) ++ gh) | |
1322 | 1363 | }) | |
1323 | 1364 | ||
1324 | 1365 | ||
1325 | 1366 | ||
1326 | 1367 | @Callable(al) | |
1327 | - | func initNewPool (aE,au, | |
1368 | + | func initNewPool (aE,au,gk,gl,gm,gn,go,gp,gq) = valueOrElse(ak(al), if (if ((aE != a)) | |
1328 | 1369 | then (aE != b) | |
1329 | 1370 | else false) | |
1330 | 1371 | then throw("Wrong type") | |
1331 | 1372 | else { | |
1332 | - | let | |
1333 | - | let ay = | |
1334 | - | let az = | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let aA = | |
1338 | - | [IntegerEntry((au + F), | |
1373 | + | let gr = aD(Address(fromBase58String(au)), aE) | |
1374 | + | let ay = gr._1 | |
1375 | + | let az = gr._2 | |
1376 | + | let gs = gr._3 | |
1377 | + | let gt = gr._4 | |
1378 | + | let aA = gr._5 | |
1379 | + | [IntegerEntry((au + F), gk), IntegerEntry((au + G), gl), IntegerEntry((au + H), gm), IntegerEntry((au + I), gn), IntegerEntry((au + J), go), IntegerEntry((au + K), gp), IntegerEntry((au + C), 0), IntegerEntry((au + D), 0), StringEntry((N + au), aE), StringEntry((aA + O), au), BooleanEntry((au + E), gq)] | |
1339 | 1380 | }) | |
1340 | 1381 | ||
1341 | 1382 | ||
1342 | - | @Verifier( | |
1343 | - | func | |
1383 | + | @Verifier(gu) | |
1384 | + | func gv () = sigVerify(gu.bodyBytes, gu.proofs[0], gu.senderPublicKey) | |
1344 | 1385 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "SF" | |
5 | 5 | ||
6 | 6 | let b = "WX" | |
7 | 7 | ||
8 | 8 | let c = "capNoLoan" | |
9 | 9 | ||
10 | 10 | let d = "capLoan" | |
11 | 11 | ||
12 | 12 | let e = "stopLossNoLoan" | |
13 | 13 | ||
14 | 14 | let f = "stopLossLoan" | |
15 | 15 | ||
16 | 16 | let g = "loan" | |
17 | 17 | ||
18 | 18 | let h = "noLoan" | |
19 | 19 | ||
20 | 20 | let i = "noFee" | |
21 | 21 | ||
22 | 22 | let j = 100000000 | |
23 | 23 | ||
24 | 24 | let k = 10000000000 | |
25 | 25 | ||
26 | 26 | let l = toBigInt(10000000000000000) | |
27 | 27 | ||
28 | 28 | let m = 1000000 | |
29 | 29 | ||
30 | 30 | let n = "A_asset_balance" | |
31 | 31 | ||
32 | 32 | let o = "B_asset_balance" | |
33 | 33 | ||
34 | 34 | let p = "A_asset_id" | |
35 | 35 | ||
36 | 36 | let q = "B_asset_id" | |
37 | 37 | ||
38 | 38 | let r = "share_asset_id" | |
39 | 39 | ||
40 | 40 | let s = "share_asset_supply" | |
41 | 41 | ||
42 | 42 | let t = "commission" | |
43 | 43 | ||
44 | 44 | let u = "_user_position" | |
45 | 45 | ||
46 | 46 | let v = "_user_position_pool" | |
47 | 47 | ||
48 | 48 | let w = "_user_position_borrow_amount" | |
49 | 49 | ||
50 | 50 | let x = "_user_position_borrow_asset_id" | |
51 | 51 | ||
52 | 52 | let y = "_user_position_number" | |
53 | 53 | ||
54 | 54 | let z = "_user_position_interest" | |
55 | 55 | ||
56 | 56 | let A = "_pool_total" | |
57 | 57 | ||
58 | 58 | let B = "_pool_total_loan" | |
59 | 59 | ||
60 | 60 | let C = "_pool_interest_loan" | |
61 | 61 | ||
62 | 62 | let D = "_pool_interest_no_loan" | |
63 | 63 | ||
64 | 64 | let E = "_pool_can_borrow" | |
65 | 65 | ||
66 | 66 | let F = "_axly_fee_without_loan" | |
67 | 67 | ||
68 | 68 | let G = "_axly_fee_with_loan" | |
69 | 69 | ||
70 | 70 | let H = "_axly_fee_cap_with_loan" | |
71 | 71 | ||
72 | 72 | let I = "_axly_fee_cap_no_loan" | |
73 | 73 | ||
74 | 74 | let J = "_axly_fee_stoploss_with_loan" | |
75 | 75 | ||
76 | 76 | let K = "_axly_fee_stoploss_no_loan" | |
77 | 77 | ||
78 | 78 | let L = "_request_id" | |
79 | 79 | ||
80 | 80 | let M = "requests_iter" | |
81 | 81 | ||
82 | 82 | let N = "pool_" | |
83 | 83 | ||
84 | 84 | let O = "_pool_share_id" | |
85 | 85 | ||
86 | 86 | let P = "_pool_cap_change" | |
87 | 87 | ||
88 | 88 | let Q = "last_price" | |
89 | 89 | ||
90 | 90 | let R = "_twap5B" | |
91 | 91 | ||
92 | 92 | let S = "_stop_loss" | |
93 | 93 | ||
94 | 94 | let T = "axly_money_box" | |
95 | 95 | ||
96 | 96 | let U = "swopfi_farming_addr" | |
97 | 97 | ||
98 | 98 | let V = "lend_service_addr" | |
99 | 99 | ||
100 | 100 | let W = "admin_call_pub_key" | |
101 | 101 | ||
102 | 102 | let X = "price_oracle" | |
103 | 103 | ||
104 | 104 | let Y = "exchange_contract" | |
105 | 105 | ||
106 | 106 | let Z = "wx_swap_contract" | |
107 | 107 | ||
108 | 108 | let aa = "swop_id" | |
109 | 109 | ||
110 | 110 | let ab = "wx_id" | |
111 | 111 | ||
112 | 112 | let ac = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No axly moneyBox address"))) | |
113 | 113 | ||
114 | 114 | let ad = Address(fromBase58String(valueOrErrorMessage(getString(this, Y), "No exchange contract address"))) | |
115 | 115 | ||
116 | 116 | let ae = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No price oracle address"))) | |
117 | 117 | ||
118 | 118 | let af = Address(fromBase58String(valueOrErrorMessage(getString(this, Z), "No wx swap address"))) | |
119 | 119 | ||
120 | 120 | let ag = fromBase58String(valueOrErrorMessage(getString(this, aa), "No swop id")) | |
121 | 121 | ||
122 | 122 | let ah = fromBase58String(valueOrErrorMessage(getString(this, ab), "No wx id")) | |
123 | 123 | ||
124 | 124 | func ai () = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "Can't get lend service addr"))) | |
125 | 125 | ||
126 | 126 | ||
127 | 127 | func aj () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, W), "Can't get admin addr"))) | |
128 | 128 | ||
129 | 129 | ||
130 | 130 | func ak (al) = if ((al.caller == aj())) | |
131 | 131 | then unit | |
132 | 132 | else throw("Only admin can call this function") | |
133 | 133 | ||
134 | 134 | ||
135 | 135 | func am (al) = if ((al.caller == this)) | |
136 | 136 | then unit | |
137 | 137 | else throw("Only contract itself can call this function") | |
138 | 138 | ||
139 | 139 | ||
140 | 140 | func an (al) = if ((al.caller == ai())) | |
141 | 141 | then unit | |
142 | 142 | else throw("Only land contract can call this function") | |
143 | 143 | ||
144 | 144 | ||
145 | 145 | func ao (ap) = { | |
146 | 146 | let aq = ap | |
147 | 147 | if ($isInstanceOf(aq, "ByteVector")) | |
148 | 148 | then { | |
149 | 149 | let ar = aq | |
150 | 150 | assetBalance(this, ar) | |
151 | 151 | } | |
152 | 152 | else if ($isInstanceOf(aq, "Unit")) | |
153 | 153 | then { | |
154 | 154 | let as = aq | |
155 | 155 | wavesBalance(this).available | |
156 | 156 | } | |
157 | 157 | else throw("Match error") | |
158 | 158 | } | |
159 | 159 | ||
160 | 160 | ||
161 | 161 | func at (au) = $Tuple5(valueOrErrorMessage(getString(au, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(au, q), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(au, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(au, o), "Can't get pool B asset balance"), valueOrErrorMessage(getString(au, r), "Can't get share asset id")) | |
162 | 162 | ||
163 | 163 | ||
164 | 164 | func av (au) = { | |
165 | 165 | let aw = { | |
166 | 166 | let ax = invoke(au, "getPoolConfigWrapperREADONLY", nil, nil) | |
167 | 167 | if ($isInstanceOf(ax, "List[Any]")) | |
168 | 168 | then ax | |
169 | 169 | else throw(($getType(ax) + " couldn't be cast to List[Any]")) | |
170 | 170 | } | |
171 | 171 | if ((aw == aw)) | |
172 | 172 | then { | |
173 | 173 | let ay = valueOrErrorMessage({ | |
174 | 174 | let ax = aw[4] | |
175 | 175 | if ($isInstanceOf(ax, "String")) | |
176 | 176 | then ax | |
177 | 177 | else unit | |
178 | 178 | }, "Can't get pool A asset id") | |
179 | 179 | let az = valueOrErrorMessage({ | |
180 | 180 | let ax = aw[5] | |
181 | 181 | if ($isInstanceOf(ax, "String")) | |
182 | 182 | then ax | |
183 | 183 | else unit | |
184 | 184 | }, "Can't get pool B asset id") | |
185 | 185 | let aA = valueOrErrorMessage({ | |
186 | 186 | let ax = aw[3] | |
187 | 187 | if ($isInstanceOf(ax, "String")) | |
188 | 188 | then ax | |
189 | 189 | else unit | |
190 | 190 | }, "Can't get pool LP asset id") | |
191 | 191 | let aB = { | |
192 | 192 | let ax = invoke(au, "getAccBalanceWrapperREADONLY", [ay], nil) | |
193 | 193 | if ($isInstanceOf(ax, "Int")) | |
194 | 194 | then ax | |
195 | 195 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
196 | 196 | } | |
197 | 197 | if ((aB == aB)) | |
198 | 198 | then { | |
199 | 199 | let aC = { | |
200 | 200 | let ax = invoke(au, "getAccBalanceWrapperREADONLY", [az], nil) | |
201 | 201 | if ($isInstanceOf(ax, "Int")) | |
202 | 202 | then ax | |
203 | 203 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
204 | 204 | } | |
205 | 205 | if ((aC == aC)) | |
206 | 206 | then $Tuple5(ay, az, aB, aC, aA) | |
207 | 207 | else throw("Strict value is not equal to itself.") | |
208 | 208 | } | |
209 | 209 | else throw("Strict value is not equal to itself.") | |
210 | 210 | } | |
211 | 211 | else throw("Strict value is not equal to itself.") | |
212 | 212 | } | |
213 | 213 | ||
214 | 214 | ||
215 | 215 | func aD (au,aE) = if ((aE == a)) | |
216 | 216 | then at(au) | |
217 | 217 | else if ((aE == b)) | |
218 | 218 | then av(au) | |
219 | 219 | else throw("Wrong pool type") | |
220 | 220 | ||
221 | 221 | ||
222 | 222 | func aF (au,aE,aA) = if ((aE == a)) | |
223 | 223 | then valueOrErrorMessage(getInteger(au, s), "Can't get share asset supply") | |
224 | 224 | else if ((aE == b)) | |
225 | 225 | then valueOrErrorMessage(assetInfo(fromBase58String(aA)), "Wrong ShareId").quantity | |
226 | 226 | else throw("Wrong pool type") | |
227 | 227 | ||
228 | 228 | ||
229 | 229 | func aG (aH) = valueOrElse(getInteger(this, (aH + A)), 0) | |
230 | 230 | ||
231 | 231 | ||
232 | 232 | func aI (aH) = valueOrElse(getInteger(this, (aH + B)), 0) | |
233 | 233 | ||
234 | 234 | ||
235 | 235 | func aJ (aK) = (valueOrElse(getInteger(this, (aK + y)), 0) + 1) | |
236 | 236 | ||
237 | 237 | ||
238 | 238 | func aL (aH,aM) = if ((aM == d)) | |
239 | 239 | then getIntegerValue(this, (aH + I)) | |
240 | 240 | else if ((aM == c)) | |
241 | 241 | then getIntegerValue(this, (aH + H)) | |
242 | 242 | else if ((aM == g)) | |
243 | 243 | then getIntegerValue(this, (aH + G)) | |
244 | 244 | else if ((aM == h)) | |
245 | 245 | then getIntegerValue(this, (aH + F)) | |
246 | 246 | else if ((aM == i)) | |
247 | 247 | then 0 | |
248 | 248 | else throw("Wrong fee type") | |
249 | 249 | ||
250 | 250 | ||
251 | 251 | func aN () = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get swopfi farming addr"))) | |
252 | 252 | ||
253 | 253 | ||
254 | 254 | func aO (au) = { | |
255 | 255 | let aP = Address(fromBase58String(valueOrErrorMessage(getString(au, "%s__factoryContract"), "Can't get WX factory contract addr"))) | |
256 | 256 | let aQ = split(valueOrErrorMessage(getString(aP, "%s__factoryConfig"), "Can't get WX factory cfg"), "__") | |
257 | 257 | Address(fromBase58String(aQ[1])) | |
258 | 258 | } | |
259 | 259 | ||
260 | 260 | ||
261 | 261 | func aR (ap) = { | |
262 | 262 | let aq = ap | |
263 | 263 | if ($isInstanceOf(aq, "ByteVector")) | |
264 | 264 | then { | |
265 | 265 | let ar = aq | |
266 | 266 | toBase58String(ar) | |
267 | 267 | } | |
268 | 268 | else if ($isInstanceOf(aq, "Unit")) | |
269 | 269 | then { | |
270 | 270 | let as = aq | |
271 | 271 | "WAVES" | |
272 | 272 | } | |
273 | 273 | else throw("Not Asset id") | |
274 | 274 | } | |
275 | 275 | ||
276 | 276 | ||
277 | 277 | func aS (ap) = if ((ap == "WAVES")) | |
278 | 278 | then unit | |
279 | 279 | else fromBase58String(ap) | |
280 | 280 | ||
281 | 281 | ||
282 | 282 | func aT (ap) = if ((ap == "WAVES")) | |
283 | 283 | then 8 | |
284 | 284 | else { | |
285 | 285 | let aq = assetInfo(fromBase58String(ap)) | |
286 | 286 | if ($isInstanceOf(aq, "Asset")) | |
287 | 287 | then { | |
288 | 288 | let aU = aq | |
289 | 289 | aU.decimals | |
290 | 290 | } | |
291 | 291 | else throw("Can't find asset") | |
292 | 292 | } | |
293 | 293 | ||
294 | 294 | ||
295 | 295 | func aV (ap) = pow(10, 0, aT(ap), 0, 0, DOWN) | |
296 | 296 | ||
297 | 297 | ||
298 | 298 | func aW (aX) = { | |
299 | 299 | func aY (aZ,ap) = { | |
300 | 300 | let ba = getIntegerValue(ae, (ap + R)) | |
301 | 301 | (aZ :+ ba) | |
302 | 302 | } | |
303 | 303 | ||
304 | 304 | let bb = aX | |
305 | 305 | let bc = size(bb) | |
306 | 306 | let bd = nil | |
307 | 307 | func be (bf,bg) = if ((bg >= bc)) | |
308 | 308 | then bf | |
309 | 309 | else aY(bf, bb[bg]) | |
310 | 310 | ||
311 | 311 | func bh (bf,bg) = if ((bg >= bc)) | |
312 | 312 | then bf | |
313 | 313 | else throw("List size exceeds 50") | |
314 | 314 | ||
315 | 315 | bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
316 | 316 | } | |
317 | 317 | ||
318 | 318 | ||
319 | 319 | func bi (aA) = { | |
320 | 320 | let aH = valueOrErrorMessage(getString(this, (aA + O)), "Can't find pool addr by share id") | |
321 | 321 | let au = Address(fromBase58String(aH)) | |
322 | 322 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
323 | 323 | let bk = aD(au, bj) | |
324 | 324 | let ay = bk._1 | |
325 | 325 | let az = bk._2 | |
326 | 326 | let bl = bk._3 | |
327 | 327 | let bm = bk._4 | |
328 | 328 | let bn = getIntegerValue(ae, (ay + R)) | |
329 | 329 | let bo = getIntegerValue(ae, (az + R)) | |
330 | 330 | let bp = aF(au, bj, aA) | |
331 | 331 | let bq = pow(10, 0, aT(ay), 0, 0, DOWN) | |
332 | 332 | let br = pow(10, 0, aT(az), 0, 0, DOWN) | |
333 | 333 | let bs = pow(10, 0, aT(aA), 0, 0, DOWN) | |
334 | 334 | let bt = (fraction(bl, bn, bq) + fraction(bm, bo, br)) | |
335 | 335 | fraction(bt, bs, bp) | |
336 | 336 | } | |
337 | 337 | ||
338 | 338 | ||
339 | 339 | func bu (bv) = { | |
340 | 340 | func aY (aZ,aA) = (aZ :+ bi(aA)) | |
341 | 341 | ||
342 | 342 | let bb = bv | |
343 | 343 | let bc = size(bb) | |
344 | 344 | let bd = nil | |
345 | 345 | func be (bf,bg) = if ((bg >= bc)) | |
346 | 346 | then bf | |
347 | 347 | else aY(bf, bb[bg]) | |
348 | 348 | ||
349 | 349 | func bh (bf,bg) = if ((bg >= bc)) | |
350 | 350 | then bf | |
351 | 351 | else throw("List size exceeds 20") | |
352 | 352 | ||
353 | 353 | bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
354 | 354 | } | |
355 | 355 | ||
356 | 356 | ||
357 | - | func bw (ay,az,aA) = { | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | [StringEntry(Q, makeString( | |
357 | + | func bw (ay,az,aA,bx) = { | |
358 | + | let by = aW([ay, az]) | |
359 | + | let bz = bi(aA) | |
360 | + | let bA = ([toString(by[0]), toString(by[1]), toString(bz)] ++ bx) | |
361 | + | [StringEntry(Q, makeString(bA, ","))] | |
362 | 362 | } | |
363 | 363 | ||
364 | 364 | ||
365 | - | func | |
365 | + | func bB (bj,au,bC,ay,bD,az,aB,aC) = if ((bj == a)) | |
366 | 366 | then { | |
367 | - | let | |
368 | - | let ax = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString( | |
367 | + | let bE = { | |
368 | + | let ax = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bC), toString(bD)]], nil) | |
369 | 369 | if ($isInstanceOf(ax, "List[Any]")) | |
370 | 370 | then ax | |
371 | 371 | else throw(($getType(ax) + " couldn't be cast to List[Any]")) | |
372 | 372 | } | |
373 | - | if (( | |
373 | + | if ((bE == bE)) | |
374 | 374 | then $Tuple5({ | |
375 | - | let ax = | |
375 | + | let ax = bE[3] | |
376 | 376 | if ($isInstanceOf(ax, "Int")) | |
377 | 377 | then ax | |
378 | 378 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
379 | 379 | }, { | |
380 | - | let ax = | |
380 | + | let ax = bE[4] | |
381 | 381 | if ($isInstanceOf(ax, "Int")) | |
382 | 382 | then ax | |
383 | 383 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
384 | 384 | }, { | |
385 | - | let ax = | |
385 | + | let ax = bE[1] | |
386 | 386 | if ($isInstanceOf(ax, "Int")) | |
387 | 387 | then ax | |
388 | 388 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
389 | - | }, aR( | |
390 | - | let ax = | |
389 | + | }, aR(bE[2]), { | |
390 | + | let ax = bE[0] | |
391 | 391 | if ($isInstanceOf(ax, "Int")) | |
392 | 392 | then ax | |
393 | 393 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
394 | 394 | }) | |
395 | 395 | else throw("Strict value is not equal to itself.") | |
396 | 396 | } | |
397 | 397 | else { | |
398 | - | let | |
399 | - | let ax = invoke(au, "evaluatePutByAmountAssetREADONLY", [ | |
398 | + | let bF = $Tuple2(split({ | |
399 | + | let ax = invoke(au, "evaluatePutByAmountAssetREADONLY", [bC], nil) | |
400 | 400 | if ($isInstanceOf(ax, "String")) | |
401 | 401 | then ax | |
402 | 402 | else throw(($getType(ax) + " couldn't be cast to String")) | |
403 | 403 | }, "__"), split({ | |
404 | - | let ax = invoke(au, "evaluatePutByPriceAssetREADONLY", [ | |
404 | + | let ax = invoke(au, "evaluatePutByPriceAssetREADONLY", [bD], nil) | |
405 | 405 | if ($isInstanceOf(ax, "String")) | |
406 | 406 | then ax | |
407 | 407 | else throw(($getType(ax) + " couldn't be cast to String")) | |
408 | 408 | }, "__")) | |
409 | - | if (( | |
409 | + | if ((bF == bF)) | |
410 | 410 | then { | |
411 | - | let | |
412 | - | let | |
413 | - | let | |
414 | - | let | |
415 | - | if (( | |
411 | + | let bG = bF._2 | |
412 | + | let bH = bF._1 | |
413 | + | let bI = parseIntValue(bH[1]) | |
414 | + | let bJ = parseIntValue(bG[1]) | |
415 | + | if ((bJ > bI)) | |
416 | 416 | then { | |
417 | - | let | |
418 | - | $Tuple5( | |
417 | + | let bK = parseIntValue(bH[8]) | |
418 | + | $Tuple5(bC, bK, (bD - bK), az, bJ) | |
419 | 419 | } | |
420 | 420 | else { | |
421 | - | let | |
422 | - | $Tuple5( | |
421 | + | let bK = parseIntValue(bG[7]) | |
422 | + | $Tuple5(bK, bD, (bC - bK), ay, bI) | |
423 | 423 | } | |
424 | 424 | } | |
425 | 425 | else throw("Strict value is not equal to itself.") | |
426 | 426 | } | |
427 | 427 | ||
428 | 428 | ||
429 | - | func | |
430 | - | let | |
429 | + | func bL (au,bj,bC,ay,bD,az) = { | |
430 | + | let bM = [AttachedPayment(aS(ay), bC), AttachedPayment(aS(az), bD)] | |
431 | 431 | if ((bj == a)) | |
432 | - | then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], | |
433 | - | else invoke(au, "put", [1000000, false], | |
432 | + | then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bM) | |
433 | + | else invoke(au, "put", [1000000, false], bM) | |
434 | 434 | } | |
435 | 435 | ||
436 | 436 | ||
437 | - | func | |
438 | - | let | |
437 | + | func bN (au,bj,bK,bO) = { | |
438 | + | let bM = [AttachedPayment(aS(bO), bK)] | |
439 | 439 | if ((bj == a)) | |
440 | - | then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], | |
441 | - | else invoke(au, "putOneTkn", [0, false], | |
440 | + | then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bM) | |
441 | + | else invoke(au, "putOneTkn", [0, false], bM) | |
442 | 442 | } | |
443 | 443 | ||
444 | 444 | ||
445 | - | func | |
446 | - | let | |
445 | + | func bP (aH,bj,aA,bQ) = { | |
446 | + | let bM = [AttachedPayment(fromBase58String(aA), bQ)] | |
447 | 447 | if ((bj == a)) | |
448 | - | then invoke(aN(), "lockShareTokens", [aH, 0], | |
449 | - | else invoke(aO(addressFromStringValue(aH)), "stake", nil, | |
448 | + | then invoke(aN(), "lockShareTokens", [aH, 0], bM) | |
449 | + | else invoke(aO(addressFromStringValue(aH)), "stake", nil, bM) | |
450 | 450 | } | |
451 | 451 | ||
452 | 452 | ||
453 | - | func | |
454 | - | let | |
455 | - | then $Tuple3(aN(), "withdrawShareTokens", [aH, | |
453 | + | func bR (aH,bj,aA,bQ) = { | |
454 | + | let bS = if ((bj == a)) | |
455 | + | then $Tuple3(aN(), "withdrawShareTokens", [aH, bQ]) | |
456 | 456 | else if ((bj == b)) | |
457 | - | then $Tuple3(aO(Address(fromBase58String(aH))), "unstake", [aA, | |
457 | + | then $Tuple3(aO(Address(fromBase58String(aH))), "unstake", [aA, bQ]) | |
458 | 458 | else throw("Wrong pool type") | |
459 | - | let | |
460 | - | let | |
461 | - | let | |
462 | - | let | |
463 | - | if (( | |
464 | - | then | |
459 | + | let bT = bS._1 | |
460 | + | let bU = bS._2 | |
461 | + | let bV = bS._3 | |
462 | + | let bW = invoke(bT, bU, bV, nil) | |
463 | + | if ((bW == bW)) | |
464 | + | then bQ | |
465 | 465 | else throw("Strict value is not equal to itself.") | |
466 | 466 | } | |
467 | 467 | ||
468 | 468 | ||
469 | - | func | |
469 | + | func bX (aH,bY,bZ,aB,aC,ca,cb) = { | |
470 | 470 | let au = Address(fromBase58String(aH)) | |
471 | - | let | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
471 | + | let cc = 1000000 | |
472 | + | let cd = getIntegerValue(au, t) | |
473 | + | let ce = fraction(ca, cc, (cc - cd), CEILING) | |
474 | + | let cf = if ((cb == bY)) | |
475 | 475 | then { | |
476 | - | let | |
477 | - | $Tuple2( | |
476 | + | let cg = fraction(ce, aC, (aB - ce), CEILING) | |
477 | + | $Tuple2(cg, bZ) | |
478 | 478 | } | |
479 | 479 | else { | |
480 | - | let | |
481 | - | $Tuple2( | |
480 | + | let cg = fraction(ce, aB, (aC - ce), CEILING) | |
481 | + | $Tuple2(cg, bY) | |
482 | 482 | } | |
483 | - | let | |
484 | - | let | |
485 | - | $Tuple2( | |
483 | + | let cg = cf._1 | |
484 | + | let ch = cf._2 | |
485 | + | $Tuple2(ch, cg) | |
486 | 486 | } | |
487 | 487 | ||
488 | 488 | ||
489 | - | func | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | let | |
489 | + | func ci (aH,bY,bZ,aB,aC,ca,cb) = { | |
490 | + | let cj = getIntegerValue(af, "%s__protocolFee") | |
491 | + | let ck = getIntegerValue(af, "%s__poolFee") | |
492 | + | let cl = toBigInt(100000000) | |
493 | + | let cm = if ((cb == bY)) | |
494 | 494 | then { | |
495 | - | let | |
496 | - | $Tuple2( | |
495 | + | let cg = fraction(ca, aC, (aB - ca)) | |
496 | + | $Tuple2(cg, bZ) | |
497 | 497 | } | |
498 | 498 | else { | |
499 | - | let | |
500 | - | $Tuple2( | |
499 | + | let cg = fraction(ca, aB, (aC - ca)) | |
500 | + | $Tuple2(cg, bY) | |
501 | 501 | } | |
502 | - | let | |
503 | - | let | |
504 | - | let | |
505 | - | $Tuple2( | |
502 | + | let cg = cm._1 | |
503 | + | let ch = cm._2 | |
504 | + | let cn = toInt(fraction(toBigInt(cg), cl, (cl - toBigInt((cj + ck))), CEILING)) | |
505 | + | $Tuple2(ch, cn) | |
506 | 506 | } | |
507 | 507 | ||
508 | 508 | ||
509 | - | func | |
509 | + | func co (aE,aH,bY,bZ,aB,aC,ca,cb) = if ((aE == a)) | |
510 | 510 | then { | |
511 | - | let | |
512 | - | let | |
513 | - | let | |
514 | - | invoke(addressFromStringValue(aH), "callFunction", ["exchange", [toString( | |
511 | + | let cp = bX(aH, bY, bZ, aB, aC, ca, cb) | |
512 | + | let ch = cp._1 | |
513 | + | let cg = cp._2 | |
514 | + | invoke(addressFromStringValue(aH), "callFunction", ["exchange", [toString(ca)]], [AttachedPayment(aS(ch), cg)]) | |
515 | 515 | } | |
516 | 516 | else { | |
517 | - | let | |
518 | - | let | |
519 | - | let | |
520 | - | invoke(af, "swap", [ | |
517 | + | let cq = ci(aH, bY, bZ, aB, aC, ca, cb) | |
518 | + | let ch = cq._1 | |
519 | + | let cg = cq._2 | |
520 | + | invoke(af, "swap", [ca, cb, toString(this)], [AttachedPayment(aS(ch), cg)]) | |
521 | 521 | } | |
522 | 522 | ||
523 | 523 | ||
524 | - | func | |
524 | + | func cr (bj,aH,bC,ay,bD,az,aB,aC) = { | |
525 | 525 | let au = addressFromStringValue(aH) | |
526 | 526 | if ((bj == a)) | |
527 | 527 | then { | |
528 | - | let | |
529 | - | let ax = invoke(au, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString( | |
528 | + | let bW = { | |
529 | + | let ax = invoke(au, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bC), toString(bD), "0"]], nil) | |
530 | 530 | if ($isInstanceOf(ax, "List[Any]")) | |
531 | 531 | then ax | |
532 | 532 | else throw(($getType(ax) + " couldn't be cast to List[Any]")) | |
533 | 533 | } | |
534 | - | if (( | |
534 | + | if ((bW == bW)) | |
535 | 535 | then $Tuple2({ | |
536 | - | let ax = | |
536 | + | let ax = bW[0] | |
537 | 537 | if ($isInstanceOf(ax, "Int")) | |
538 | 538 | then ax | |
539 | 539 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
540 | 540 | }, { | |
541 | - | let ax = | |
541 | + | let ax = bW[1] | |
542 | 542 | if ($isInstanceOf(ax, "Int")) | |
543 | 543 | then ax | |
544 | 544 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
545 | 545 | }) | |
546 | 546 | else throw("Strict value is not equal to itself.") | |
547 | 547 | } | |
548 | 548 | else if ((bj == b)) | |
549 | 549 | then { | |
550 | - | let | |
551 | - | then ( | |
550 | + | let cs = if (if ((bC > 0)) | |
551 | + | then (bD > 0) | |
552 | 552 | else false) | |
553 | 553 | then { | |
554 | - | let | |
555 | - | let | |
556 | - | let | |
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | $Tuple3( | |
554 | + | let ct = bB(bj, au, bC, ay, bD, az, aB, aC) | |
555 | + | let cu = ct._1 | |
556 | + | let cv = ct._2 | |
557 | + | let cw = ct._3 | |
558 | + | let cx = ct._4 | |
559 | + | let cy = ct._5 | |
560 | + | $Tuple3(cw, cx, cy) | |
561 | 561 | } | |
562 | - | else if (( | |
563 | - | then $Tuple3( | |
564 | - | else $Tuple3( | |
565 | - | let | |
566 | - | let | |
567 | - | let | |
568 | - | let | |
562 | + | else if ((bC > 0)) | |
563 | + | then $Tuple3(bC, ay, 0) | |
564 | + | else $Tuple3(bD, az, 0) | |
565 | + | let cw = cs._1 | |
566 | + | let cx = cs._2 | |
567 | + | let cz = cs._3 | |
568 | + | let cA = if ((cw > 0)) | |
569 | 569 | then { | |
570 | - | let | |
571 | - | let ax = invoke(au, "putOneTknREADONLY", [ | |
570 | + | let bW = { | |
571 | + | let ax = invoke(au, "putOneTknREADONLY", [cx, cw], nil) | |
572 | 572 | if ($isInstanceOf(ax, "(Int, Int, Int)")) | |
573 | 573 | then ax | |
574 | 574 | else throw(($getType(ax) + " couldn't be cast to (Int, Int, Int)")) | |
575 | 575 | } | |
576 | - | if (( | |
577 | - | then $Tuple2( | |
576 | + | if ((bW == bW)) | |
577 | + | then $Tuple2(bW._1, bW._3) | |
578 | 578 | else throw("Strict value is not equal to itself.") | |
579 | 579 | } | |
580 | 580 | else $Tuple2(0, 0) | |
581 | - | let | |
582 | - | let | |
583 | - | $Tuple2(( | |
581 | + | let cB = cA._1 | |
582 | + | let cC = cA._2 | |
583 | + | $Tuple2((cz + cB), cC) | |
584 | 584 | } | |
585 | 585 | else throw("Wrong pool type") | |
586 | 586 | } | |
587 | 587 | ||
588 | 588 | ||
589 | - | func cC (bj,aH,cx,aA,ay,az,aB,aC,cD,cE) = { | |
590 | - | let au = addressFromStringValue(aH) | |
589 | + | func cD (au,bj,aA,cE) = { | |
591 | 590 | let cF = if ((bj == a)) | |
592 | 591 | then { | |
593 | - | let | |
594 | - | let ax = invoke(au, "callFunction", ["withdrawREADONLY", [toString( | |
595 | - | if ($isInstanceOf(ax, " | |
592 | + | let bW = { | |
593 | + | let ax = invoke(au, "callFunction", ["withdrawREADONLY", [toString(cE)]], nil) | |
594 | + | if ($isInstanceOf(ax, "(Int, Int)")) | |
596 | 595 | then ax | |
597 | - | else throw(($getType(ax) + " couldn't be cast to | |
596 | + | else throw(($getType(ax) + " couldn't be cast to (Int, Int)")) | |
598 | 597 | } | |
599 | - | if ((bV == bV)) | |
600 | - | then $Tuple2({ | |
601 | - | let ax = bV[0] | |
602 | - | if ($isInstanceOf(ax, "Int")) | |
603 | - | then ax | |
604 | - | else throw(($getType(ax) + " couldn't be cast to Int")) | |
605 | - | }, { | |
606 | - | let ax = bV[1] | |
607 | - | if ($isInstanceOf(ax, "Int")) | |
608 | - | then ax | |
609 | - | else throw(($getType(ax) + " couldn't be cast to Int")) | |
610 | - | }) | |
598 | + | if ((bW == bW)) | |
599 | + | then $Tuple2(bW._1, bW._2) | |
611 | 600 | else throw("Strict value is not equal to itself.") | |
612 | 601 | } | |
613 | - | else if ((bj == b)) | |
614 | - | then { | |
615 | - | let cG = split({ | |
616 | - | let ax = invoke(au, "evaluateGetREADONLY", [aA, cx], nil) | |
617 | - | if ($isInstanceOf(ax, "String")) | |
618 | - | then ax | |
619 | - | else throw(($getType(ax) + " couldn't be cast to String")) | |
620 | - | }, "__") | |
621 | - | if ((cG == cG)) | |
622 | - | then $Tuple2(parseIntValue(cG[1]), parseIntValue(cG[2])) | |
623 | - | else throw("Strict value is not equal to itself.") | |
624 | - | } | |
625 | - | else throw("Wrong pool type") | |
626 | - | let cH = cF._1 | |
627 | - | let cI = cF._2 | |
628 | - | if ((cD > 0)) | |
629 | - | then { | |
630 | - | let cJ = if (if ((cE == ay)) | |
631 | - | then (cD > cH) | |
632 | - | else false) | |
633 | - | then (cD - cH) | |
634 | - | else if (if ((cE == az)) | |
635 | - | then (cD > cI) | |
636 | - | else false) | |
637 | - | then (cD - cI) | |
638 | - | else 0 | |
639 | - | let cK = if ((cJ > 0)) | |
640 | - | then if ((bj == a)) | |
641 | - | then bW(aH, ay, az, aB, aC, cJ, cE) | |
642 | - | else ch(aH, ay, az, aB, aC, cJ, cE) | |
643 | - | else $Tuple2("", 0) | |
644 | - | let cg = cK._1 | |
645 | - | let cf = cK._2 | |
646 | - | if ((cE == ay)) | |
647 | - | then $Tuple2(((cH + cJ) - cD), (cI - cf)) | |
648 | - | else $Tuple2((cH - cf), ((cI + cJ) - cD)) | |
602 | + | else { | |
603 | + | let bW = split({ | |
604 | + | let ax = invoke(au, "evaluateGetREADONLY", [aA, cE], nil) | |
605 | + | if ($isInstanceOf(ax, "String")) | |
606 | + | then ax | |
607 | + | else throw(($getType(ax) + " couldn't be cast to String")) | |
608 | + | }, "__") | |
609 | + | if ((bW == bW)) | |
610 | + | then $Tuple2(parseIntValue(bW[1]), parseIntValue(bW[2])) | |
611 | + | else throw("Strict value is not equal to itself.") | |
649 | 612 | } | |
650 | - | else $Tuple2(cH, cI) | |
613 | + | let cG = cF._1 | |
614 | + | let cH = cF._2 | |
615 | + | $Tuple2(cG, cH) | |
651 | 616 | } | |
652 | 617 | ||
653 | 618 | ||
654 | - | func cL (aE,aH) = if ((aE == a)) | |
619 | + | func cI (bj,aH,cy,aA,ay,az,aB,aC,cJ,cK) = { | |
620 | + | let au = addressFromStringValue(aH) | |
621 | + | let cL = cD(au, bj, aA, cy) | |
622 | + | let cM = cL._1 | |
623 | + | let cN = cL._2 | |
624 | + | if ((cJ > 0)) | |
625 | + | then { | |
626 | + | let cO = if (if ((cK == ay)) | |
627 | + | then (cJ > cM) | |
628 | + | else false) | |
629 | + | then (cJ - cM) | |
630 | + | else if (if ((cK == az)) | |
631 | + | then (cJ > cN) | |
632 | + | else false) | |
633 | + | then (cJ - cN) | |
634 | + | else 0 | |
635 | + | let cP = if ((cO > 0)) | |
636 | + | then if ((bj == a)) | |
637 | + | then bX(aH, ay, az, aB, aC, cO, cK) | |
638 | + | else ci(aH, ay, az, aB, aC, cO, cK) | |
639 | + | else $Tuple2("", 0) | |
640 | + | let ch = cP._1 | |
641 | + | let cg = cP._2 | |
642 | + | if ((cK == ay)) | |
643 | + | then $Tuple2(((cM + cO) - cJ), (cN - cg)) | |
644 | + | else $Tuple2((cM - cg), ((cN + cO) - cJ)) | |
645 | + | } | |
646 | + | else $Tuple2(cM, cN) | |
647 | + | } | |
648 | + | ||
649 | + | ||
650 | + | func cQ (aE,aH) = if ((aE == a)) | |
655 | 651 | then { | |
656 | - | let | |
657 | - | if (( | |
652 | + | let cR = ao(ag) | |
653 | + | if ((cR == cR)) | |
658 | 654 | then { | |
659 | - | let | |
660 | - | if (( | |
655 | + | let bW = invoke(aN(), "claim", [aH], nil) | |
656 | + | if ((bW == bW)) | |
661 | 657 | then { | |
662 | - | let | |
663 | - | $Tuple2(( | |
658 | + | let cS = ao(ag) | |
659 | + | $Tuple2((cS - cR), ag) | |
664 | 660 | } | |
665 | 661 | else throw("Strict value is not equal to itself.") | |
666 | 662 | } | |
667 | 663 | else throw("Strict value is not equal to itself.") | |
668 | 664 | } | |
669 | 665 | else if ((aE == b)) | |
670 | 666 | then { | |
671 | - | let | |
672 | - | if (( | |
667 | + | let cR = ao(ah) | |
668 | + | if ((cR == cR)) | |
673 | 669 | then { | |
674 | - | let | |
675 | - | if (( | |
670 | + | let bW = invoke(aO(Address(fromBase58String(aH))), "claimWX", [aH], nil) | |
671 | + | if ((bW == bW)) | |
676 | 672 | then { | |
677 | - | let | |
678 | - | $Tuple2(( | |
673 | + | let cS = ao(ah) | |
674 | + | $Tuple2((cS - cR), ah) | |
679 | 675 | } | |
680 | 676 | else throw("Strict value is not equal to itself.") | |
681 | 677 | } | |
682 | 678 | else throw("Strict value is not equal to itself.") | |
683 | 679 | } | |
684 | 680 | else throw("Wrong pool type") | |
685 | 681 | ||
686 | 682 | ||
687 | - | func | |
688 | - | let | |
689 | - | if (( | |
683 | + | func cT (bj,aH,aM,bC,ay,bD,az,aB,aC,cU) = { | |
684 | + | let cV = ao(fromBase58String(cU)) | |
685 | + | if ((cV == cV)) | |
690 | 686 | then { | |
691 | 687 | let au = addressFromStringValue(aH) | |
692 | - | let | |
693 | - | then ( | |
688 | + | let cW = if (if ((bC > 0)) | |
689 | + | then (bD > 0) | |
694 | 690 | else false) | |
695 | 691 | then { | |
696 | - | let | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | let | |
701 | - | let | |
702 | - | if (( | |
703 | - | then $Tuple2( | |
692 | + | let cX = bB(bj, au, bC, ay, bD, az, aB, aC) | |
693 | + | let cu = cX._1 | |
694 | + | let cv = cX._2 | |
695 | + | let cw = cX._3 | |
696 | + | let cx = cX._4 | |
697 | + | let bW = bL(au, bj, cu, ay, cv, az) | |
698 | + | if ((bW == bW)) | |
699 | + | then $Tuple2(cw, cx) | |
704 | 700 | else throw("Strict value is not equal to itself.") | |
705 | 701 | } | |
706 | - | else if (( | |
707 | - | then $Tuple2( | |
708 | - | else if (( | |
709 | - | then $Tuple2( | |
702 | + | else if ((bC > 0)) | |
703 | + | then $Tuple2(bC, ay) | |
704 | + | else if ((bD > 0)) | |
705 | + | then $Tuple2(bD, az) | |
710 | 706 | else throw("pmts must be > 0") | |
711 | - | let | |
712 | - | let | |
713 | - | let | |
714 | - | then | |
707 | + | let cw = cW._1 | |
708 | + | let cx = cW._2 | |
709 | + | let bW = if ((cw > 0)) | |
710 | + | then bN(au, bj, cw, cx) | |
715 | 711 | else nil | |
716 | - | if (( | |
712 | + | if ((bW == bW)) | |
717 | 713 | then { | |
718 | - | let | |
719 | - | let | |
720 | - | let | |
721 | - | let | |
722 | - | if ((0 >= | |
714 | + | let cY = ao(fromBase58String(cU)) | |
715 | + | let cZ = (cY - cV) | |
716 | + | let da = fraction(cZ, aL(aH, aM), m) | |
717 | + | let db = (cZ - da) | |
718 | + | if ((0 >= db)) | |
723 | 719 | then throw("amount of staked sharetokens must be > 0") | |
724 | 720 | else { | |
725 | - | let | |
726 | - | if (( | |
727 | - | then $Tuple2( | |
721 | + | let dc = bP(aH, bj, cU, db) | |
722 | + | if ((dc == dc)) | |
723 | + | then $Tuple2(db, da) | |
728 | 724 | else throw("Strict value is not equal to itself.") | |
729 | 725 | } | |
730 | 726 | } | |
731 | 727 | else throw("Strict value is not equal to itself.") | |
732 | 728 | } | |
733 | 729 | else throw("Strict value is not equal to itself.") | |
734 | 730 | } | |
735 | 731 | ||
736 | 732 | ||
737 | - | func | |
738 | - | let | |
739 | - | let | |
740 | - | let | |
741 | - | then $Tuple2(getIntegerValue(this, (aH + C)), ( | |
742 | - | else $Tuple2(getIntegerValue(this, (aH + D)), | |
743 | - | let | |
744 | - | let | |
745 | - | [IntegerEntry((aH + A), ( | |
733 | + | func dd (aH,aK,de,da,df,aA,aE,dg) = { | |
734 | + | let dh = aG(aH) | |
735 | + | let di = aI(aH) | |
736 | + | let dj = if (dg) | |
737 | + | then $Tuple2(getIntegerValue(this, (aH + C)), (di + de)) | |
738 | + | else $Tuple2(getIntegerValue(this, (aH + D)), di) | |
739 | + | let dk = dj._1 | |
740 | + | let dl = dj._2 | |
741 | + | [IntegerEntry((aH + A), (dh + de)), IntegerEntry((aH + B), dl), IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + u), de), IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + z), dk), StringEntry((((aK + "_") + toString(df)) + v), aH), IntegerEntry((aK + y), df), ScriptTransfer(ac, da, fromBase58String(aA))] | |
746 | 742 | } | |
747 | 743 | ||
748 | 744 | ||
749 | - | func | |
750 | - | let | |
751 | - | if (( | |
745 | + | func dm (dn,do,dp,dq,dr,ds,dt,du,dv,dw) = { | |
746 | + | let dx = ao(aS(dn)) | |
747 | + | if ((dx == dx)) | |
752 | 748 | then { | |
753 | - | let | |
754 | - | if (( | |
755 | - | then (ao(aS( | |
749 | + | let bW = invoke(ad, "swap", [dq, dr, ds, dt, du, dv, dw], [AttachedPayment(dp, do)]) | |
750 | + | if ((bW == bW)) | |
751 | + | then (ao(aS(dn)) - dx) | |
756 | 752 | else throw("Strict value is not equal to itself.") | |
757 | 753 | } | |
758 | 754 | else throw("Strict value is not equal to itself.") | |
759 | 755 | } | |
760 | 756 | ||
761 | 757 | ||
762 | - | func | |
763 | - | let | |
764 | - | if (( | |
758 | + | func dy (dn,do,dp,dz,dA,dw) = { | |
759 | + | let dx = ao(aS(dn)) | |
760 | + | if ((dx == dx)) | |
765 | 761 | then { | |
766 | - | let | |
767 | - | if (( | |
768 | - | then (ao(aS( | |
762 | + | let bW = invoke(ad, "puzzleSwap", [dz, dA, dw], [AttachedPayment(dp, do)]) | |
763 | + | if ((bW == bW)) | |
764 | + | then (ao(aS(dn)) - dx) | |
769 | 765 | else throw("Strict value is not equal to itself.") | |
770 | 766 | } | |
771 | 767 | else throw("Strict value is not equal to itself.") | |
772 | 768 | } | |
773 | 769 | ||
774 | 770 | ||
775 | - | func | |
776 | - | let | |
777 | - | if (( | |
771 | + | func dB (dn,do,dp,dC,dD,dE,dF,dG,dH,dw) = { | |
772 | + | let dx = ao(aS(dn)) | |
773 | + | if ((dx == dx)) | |
778 | 774 | then { | |
779 | - | let | |
780 | - | if (( | |
781 | - | then (ao(aS( | |
775 | + | let bW = invoke(ad, "swopfiSwap", [dC, dD, dE, dF, dG, dH, dw], [AttachedPayment(dp, do)]) | |
776 | + | if ((bW == bW)) | |
777 | + | then (ao(aS(dn)) - dx) | |
782 | 778 | else throw("Strict value is not equal to itself.") | |
783 | 779 | } | |
784 | 780 | else throw("Strict value is not equal to itself.") | |
785 | 781 | } | |
786 | 782 | ||
787 | 783 | ||
788 | - | func | |
784 | + | func dI (aH,bj,dJ,dK) = { | |
789 | 785 | let au = Address(fromBase58String(aH)) | |
790 | - | let | |
791 | - | let | |
792 | - | let | |
793 | - | let aB = | |
794 | - | let aC = | |
795 | - | let aA = | |
796 | - | if (if (( | |
797 | - | then ( | |
786 | + | let dL = aD(au, bj) | |
787 | + | let dM = dL._1 | |
788 | + | let dN = dL._2 | |
789 | + | let aB = dL._3 | |
790 | + | let aC = dL._4 | |
791 | + | let aA = dL._5 | |
792 | + | if (if ((dJ != dM)) | |
793 | + | then (dJ != dN) | |
798 | 794 | else false) | |
799 | 795 | then throw("Wrong asset") | |
800 | 796 | else { | |
801 | - | let | |
802 | - | then $Tuple2( | |
803 | - | else $Tuple2(0, | |
804 | - | let | |
805 | - | let | |
806 | - | let | |
807 | - | let | |
808 | - | let | |
809 | - | let | |
810 | - | let | |
811 | - | let | |
812 | - | let | |
813 | - | let | |
814 | - | let | |
815 | - | let | |
816 | - | let | |
817 | - | then ( | |
797 | + | let dO = if ((dJ == dM)) | |
798 | + | then $Tuple2(dK, 0) | |
799 | + | else $Tuple2(0, dK) | |
800 | + | let bC = dO._1 | |
801 | + | let bD = dO._2 | |
802 | + | let dP = cT(bj, aH, i, bC, dM, bD, dN, aB, aC, aA) | |
803 | + | let de = dP._1 | |
804 | + | let dQ = dP._2 | |
805 | + | let dR = valueOrElse(getInteger(this, (aH + C)), 0) | |
806 | + | let dS = valueOrElse(getInteger(this, (aH + D)), 0) | |
807 | + | let dT = aG(aH) | |
808 | + | let dU = aI(aH) | |
809 | + | let dV = fraction(dU, j, dT) | |
810 | + | let dW = fraction(de, dV, j) | |
811 | + | let dX = (de - dW) | |
812 | + | let dY = if ((dU > 0)) | |
813 | + | then (dR + fraction(dW, k, dU)) | |
818 | 814 | else 0 | |
819 | - | let | |
820 | - | then ( | |
815 | + | let dZ = if (((dT - dU) > 0)) | |
816 | + | then (dS + fraction(dX, k, (dT - dU))) | |
821 | 817 | else 0 | |
822 | - | let | |
823 | - | let | |
824 | - | let | |
825 | - | if (( | |
826 | - | then ([IntegerEntry((aH + C), | |
818 | + | let ea = fraction(dW, aL(aH, d), m) | |
819 | + | let eb = fraction(dX, aL(aH, c), m) | |
820 | + | let ec = bR(aH, bj, aA, (ea + eb)) | |
821 | + | if ((ec == ec)) | |
822 | + | then ([IntegerEntry((aH + C), dY), IntegerEntry((aH + D), dZ), IntegerEntry((aH + A), ((dT + de) - ec)), IntegerEntry((aH + B), ((dU + dW) - ea)), ScriptTransfer(ac, (ea + eb), fromBase58String(aA))] ++ bw(dM, dN, aA, nil)) | |
827 | 823 | else throw("Strict value is not equal to itself.") | |
828 | 824 | } | |
829 | 825 | } | |
830 | 826 | ||
831 | 827 | ||
832 | - | func | |
828 | + | func ed (aH,cE,ee,ef) = { | |
833 | 829 | let au = Address(fromBase58String(aH)) | |
834 | 830 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool") | |
835 | - | let | |
836 | - | let | |
837 | - | let | |
838 | - | let aB = | |
839 | - | let aC = | |
840 | - | let aA = | |
841 | - | let | |
842 | - | if (( | |
831 | + | let eg = aD(au, bj) | |
832 | + | let bY = eg._1 | |
833 | + | let bZ = eg._2 | |
834 | + | let aB = eg._3 | |
835 | + | let aC = eg._4 | |
836 | + | let aA = eg._5 | |
837 | + | let eh = ao(aS(bY)) | |
838 | + | if ((eh == eh)) | |
843 | 839 | then { | |
844 | - | let | |
845 | - | if (( | |
840 | + | let ei = ao(aS(bZ)) | |
841 | + | if ((ei == ei)) | |
846 | 842 | then { | |
847 | - | let | |
848 | - | then invoke(au, "callFunction", ["withdraw", [toString( | |
843 | + | let bW = if ((bj == a)) | |
844 | + | then invoke(au, "callFunction", ["withdraw", [toString(cE)]], nil) | |
849 | 845 | else { | |
850 | - | let | |
851 | - | if (( | |
852 | - | then invoke(au, "get", nil, [AttachedPayment(aS(aA), | |
846 | + | let bW = bR(aH, bj, aA, cE) | |
847 | + | if ((bW == bW)) | |
848 | + | then invoke(au, "get", nil, [AttachedPayment(aS(aA), cE)]) | |
853 | 849 | else throw("Strict value is not equal to itself.") | |
854 | 850 | } | |
855 | - | if (( | |
851 | + | if ((bW == bW)) | |
856 | 852 | then { | |
857 | - | let | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
853 | + | let ej = ao(aS(bY)) | |
854 | + | let ek = ao(aS(bZ)) | |
855 | + | let el = $Tuple2((ej - eh), (ek - ei)) | |
856 | + | let em = el._1 | |
857 | + | let en = el._2 | |
858 | + | let eo = if ((ee > 0)) | |
863 | 859 | then { | |
864 | - | let | |
865 | - | then ( | |
860 | + | let cO = if (if ((ef == bY)) | |
861 | + | then (ee > em) | |
866 | 862 | else false) | |
867 | - | then ( | |
868 | - | else if (if (( | |
869 | - | then ( | |
863 | + | then (ee - em) | |
864 | + | else if (if ((ef == bZ)) | |
865 | + | then (ee > en) | |
870 | 866 | else false) | |
871 | - | then ( | |
867 | + | then (ee - en) | |
872 | 868 | else 0 | |
873 | - | let | |
874 | - | then | |
869 | + | let ep = if ((cO > 0)) | |
870 | + | then co(bj, aH, bY, bZ, (aB - em), (aC - en), cO, ef) | |
875 | 871 | else nil | |
876 | - | if (( | |
872 | + | if ((ep == ep)) | |
877 | 873 | then { | |
878 | - | let | |
879 | - | let | |
880 | - | if (( | |
881 | - | then $Tuple2((( | |
882 | - | else $Tuple2(( | |
874 | + | let eq = ao(aS(bY)) | |
875 | + | let er = ao(aS(bZ)) | |
876 | + | if ((ef == bY)) | |
877 | + | then $Tuple2(((eq - eh) - ee), (er - ei)) | |
878 | + | else $Tuple2((eq - eh), ((er - ei) - ee)) | |
883 | 879 | } | |
884 | 880 | else throw("Strict value is not equal to itself.") | |
885 | 881 | } | |
886 | - | else $Tuple2( | |
887 | - | let | |
888 | - | let | |
889 | - | $Tuple7( | |
882 | + | else $Tuple2(em, en) | |
883 | + | let es = eo._1 | |
884 | + | let et = eo._2 | |
885 | + | $Tuple7(es, bY, et, bZ, ej, ek, aA) | |
890 | 886 | } | |
891 | 887 | else throw("Strict value is not equal to itself.") | |
892 | 888 | } | |
893 | 889 | else throw("Strict value is not equal to itself.") | |
894 | 890 | } | |
895 | 891 | else throw("Strict value is not equal to itself.") | |
896 | 892 | } | |
897 | 893 | ||
898 | 894 | ||
899 | - | func | |
900 | - | let | |
901 | - | let | |
902 | - | let | |
895 | + | func eu (aK,aH,ev,ew) = { | |
896 | + | let ex = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + u)), "Unknown position") | |
897 | + | let ey = getIntegerValue(this, (((((aH + "_") + aK) + "_") + ev) + z)) | |
898 | + | let ez = if (ew) | |
903 | 899 | then getIntegerValue(this, (aH + C)) | |
904 | 900 | else getIntegerValue(this, (aH + D)) | |
905 | - | ( | |
901 | + | (ex + fraction(ex, (ez - ey), k)) | |
906 | 902 | } | |
907 | 903 | ||
908 | 904 | ||
909 | - | func | |
910 | - | let | |
911 | - | let | |
912 | - | let | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | let | |
905 | + | func eA (aK,aH,ev,eB) = { | |
906 | + | let ex = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + u)), "Unknown position") | |
907 | + | let cJ = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + w)), 0) | |
908 | + | let cE = eu(aK, aH, ev, (cJ > 0)) | |
909 | + | let eC = aG(aH) | |
910 | + | let eD = Address(fromBase58String(aK)) | |
911 | + | let ef = valueOrElse(getString(this, (((((aH + "_") + aK) + "_") + ev) + x)), "") | |
912 | + | let ee = if ((cJ > 0)) | |
917 | 913 | then { | |
918 | - | let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + | |
914 | + | let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + ev), ef], nil) | |
919 | 915 | if ($isInstanceOf(ax, "Int")) | |
920 | 916 | then ax | |
921 | 917 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
922 | 918 | } | |
923 | 919 | else 0 | |
924 | - | let | |
925 | - | if (( | |
920 | + | let eE = ed(aH, cE, ee, ef) | |
921 | + | if ((eE == eE)) | |
926 | 922 | then { | |
927 | - | let aA = | |
928 | - | let | |
929 | - | let | |
930 | - | let | |
931 | - | let | |
932 | - | let | |
933 | - | let | |
934 | - | let | |
935 | - | then invoke(ai(), "repayFor", [((aK + "_") + | |
923 | + | let aA = eE._7 | |
924 | + | let ek = eE._6 | |
925 | + | let ej = eE._5 | |
926 | + | let bZ = eE._4 | |
927 | + | let eF = eE._3 | |
928 | + | let bY = eE._2 | |
929 | + | let eG = eE._1 | |
930 | + | let eH = if ((ee > 0)) | |
931 | + | then invoke(ai(), "repayFor", [((aK + "_") + ev)], [AttachedPayment(aS(ef), ee)]) | |
936 | 932 | else 0 | |
937 | - | if (( | |
938 | - | then ([DeleteEntry((((((aH + "_") + aK) + "_") + | |
933 | + | if ((eH == eH)) | |
934 | + | then ([DeleteEntry((((((aH + "_") + aK) + "_") + ev) + u)), DeleteEntry((((((aH + "_") + aK) + "_") + ev) + z)), IntegerEntry((aH + A), (eC - cE)), ScriptTransfer(eD, eG, aS(bY)), ScriptTransfer(eD, eF, aS(bZ))] ++ bw(bY, bZ, aA, nil)) | |
939 | 935 | else throw("Strict value is not equal to itself.") | |
940 | 936 | } | |
941 | 937 | else throw("Strict value is not equal to itself.") | |
942 | 938 | } | |
943 | 939 | ||
944 | 940 | ||
945 | - | func | |
946 | - | let | |
947 | - | let aK = | |
948 | - | let aH = | |
949 | - | let | |
950 | - | let | |
951 | - | let | |
952 | - | let | |
953 | - | let aB = parseIntValue( | |
954 | - | let aC = parseIntValue( | |
955 | - | let aA = | |
956 | - | let | |
957 | - | let | |
958 | - | $Tuple11(aK, aH, | |
941 | + | func eI (eJ) = { | |
942 | + | let eK = split(valueOrErrorMessage(getString(this, (eJ + L)), ("No request with id " + eJ)), ",") | |
943 | + | let aK = eK[0] | |
944 | + | let aH = eK[1] | |
945 | + | let bC = parseIntValue(eK[2]) | |
946 | + | let dM = eK[3] | |
947 | + | let bD = parseIntValue(eK[4]) | |
948 | + | let dN = eK[5] | |
949 | + | let aB = parseIntValue(eK[6]) | |
950 | + | let aC = parseIntValue(eK[7]) | |
951 | + | let aA = eK[8] | |
952 | + | let eL = eK[9] | |
953 | + | let eM = parseIntValue(eK[10]) | |
954 | + | $Tuple11(aK, aH, bC, dM, bD, dN, aB, aC, aA, eL, eM) | |
959 | 955 | } | |
960 | 956 | ||
961 | 957 | ||
962 | - | func | |
958 | + | func eN (bC,bD,ay,az,eO,eP) = { | |
963 | 959 | let bn = getIntegerValue(ae, (ay + R)) | |
964 | 960 | let bo = getIntegerValue(ae, (az + R)) | |
965 | - | let | |
966 | - | let | |
967 | - | let | |
968 | - | let | |
969 | - | then $Tuple2(bn, | |
970 | - | else $Tuple2(bo, | |
971 | - | let | |
972 | - | let | |
973 | - | fraction(fraction( | |
961 | + | let eQ = pow(10, 0, aT(ay), 0, 0, DOWN) | |
962 | + | let eR = pow(10, 0, aT(az), 0, 0, DOWN) | |
963 | + | let eS = (fraction(bn, bC, eQ) + fraction(bo, bD, eR)) | |
964 | + | let eT = if ((eP == ay)) | |
965 | + | then $Tuple2(bn, eQ) | |
966 | + | else $Tuple2(bo, eR) | |
967 | + | let eU = eT._1 | |
968 | + | let eV = eT._2 | |
969 | + | fraction(fraction(eS, (eO - 100), 100), eV, eU) | |
974 | 970 | } | |
975 | 971 | ||
976 | 972 | ||
977 | 973 | @Callable(al) | |
978 | - | func calcPriceImpactEVALONLY (aH, | |
974 | + | func calcPriceImpactEVALONLY (aH,eO,eP,bC,bD) = if (if ((100 > eO)) | |
979 | 975 | then true | |
980 | - | else ( | |
976 | + | else (eO > 300)) | |
981 | 977 | then throw("Leverage can't be <100 and >300") | |
982 | 978 | else { | |
983 | 979 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
984 | - | let | |
985 | - | let | |
986 | - | let | |
987 | - | let aB = | |
988 | - | let aC = | |
989 | - | let aA = | |
990 | - | let | |
991 | - | then | |
980 | + | let eW = aD(Address(fromBase58String(aH)), bj) | |
981 | + | let dM = eW._1 | |
982 | + | let dN = eW._2 | |
983 | + | let aB = eW._3 | |
984 | + | let aC = eW._4 | |
985 | + | let aA = eW._5 | |
986 | + | let cJ = if ((eO > 100)) | |
987 | + | then eN(bC, bD, dM, dN, eO, eP) | |
992 | 988 | else 0 | |
993 | - | let | |
994 | - | then $Tuple2(( | |
995 | - | else $Tuple2( | |
996 | - | let | |
997 | - | let | |
998 | - | let | |
999 | - | let | |
1000 | - | let | |
1001 | - | let | |
1002 | - | then ( | |
1003 | - | else | |
1004 | - | $Tuple2(nil, [ | |
989 | + | let eX = if ((eP == dM)) | |
990 | + | then $Tuple2((bC + cJ), bD) | |
991 | + | else $Tuple2(bC, (bD + cJ)) | |
992 | + | let eY = eX._1 | |
993 | + | let eZ = eX._2 | |
994 | + | let fa = cr(bj, aH, eY, dM, eZ, dN, aB, aC) | |
995 | + | let cy = fa._1 | |
996 | + | let cC = fa._2 | |
997 | + | let fb = if ((0 > cC)) | |
998 | + | then (cC * -1) | |
999 | + | else cC | |
1000 | + | $Tuple2(nil, [fb]) | |
1005 | 1001 | } | |
1006 | 1002 | ||
1007 | 1003 | ||
1008 | 1004 | ||
1009 | 1005 | @Callable(al) | |
1006 | + | func replenishFromLandEVALONLY (eJ) = valueOrElse(an(al), { | |
1007 | + | let fc = eI(eJ) | |
1008 | + | let aK = fc._1 | |
1009 | + | let aH = fc._2 | |
1010 | + | let bC = fc._3 | |
1011 | + | let dM = fc._4 | |
1012 | + | let bD = fc._5 | |
1013 | + | let dN = fc._6 | |
1014 | + | let aB = fc._7 | |
1015 | + | let aC = fc._8 | |
1016 | + | let aA = fc._9 | |
1017 | + | let eL = fc._10 | |
1018 | + | let eM = fc._11 | |
1019 | + | if ((size(al.payments) != 1)) | |
1020 | + | then throw("Wrong payment size") | |
1021 | + | else if (if ((aR(al.payments[0].assetId) != eL)) | |
1022 | + | then true | |
1023 | + | else (al.payments[0].amount != eM)) | |
1024 | + | then throw("Wrong payment") | |
1025 | + | else { | |
1026 | + | let fd = if ((dM == eL)) | |
1027 | + | then $Tuple2((bC + al.payments[0].amount), bD) | |
1028 | + | else $Tuple2(bC, (bD + al.payments[0].amount)) | |
1029 | + | let fe = fd._1 | |
1030 | + | let ff = fd._2 | |
1031 | + | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool") | |
1032 | + | let fg = cT(bj, aH, g, fe, dM, ff, dN, aB, aC, aA) | |
1033 | + | let fh = fg._1 | |
1034 | + | let ec = fg._2 | |
1035 | + | let df = aJ(aK) | |
1036 | + | let fi = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + w), eM), StringEntry((((((aH + "_") + aK) + "_") + toString(df)) + x), eL)] | |
1037 | + | let fj = dd(aH, aK, fh, ec, df, aA, bj, true) | |
1038 | + | nil | |
1039 | + | } | |
1040 | + | }) | |
1041 | + | ||
1042 | + | ||
1043 | + | ||
1044 | + | @Callable(al) | |
1010 | 1045 | func getShareAssetPriceREADONLY (aA) = { | |
1011 | - | let | |
1012 | - | $Tuple2(nil, | |
1046 | + | let fk = bi(aA) | |
1047 | + | $Tuple2(nil, fk) | |
1013 | 1048 | } | |
1014 | 1049 | ||
1015 | 1050 | ||
1016 | 1051 | ||
1017 | 1052 | @Callable(al) | |
1018 | - | func getUserPositionShareAmountREADONLY (aK, | |
1019 | - | let aH = valueOrErrorMessage(getString(this, (((aK + "_") + | |
1020 | - | let | |
1021 | - | let | |
1022 | - | $Tuple2(nil, | |
1053 | + | func getUserPositionShareAmountREADONLY (aK,df) = { | |
1054 | + | let aH = valueOrErrorMessage(getString(this, (((aK + "_") + df) + v)), "Unknown position") | |
1055 | + | let cJ = getIntegerValue(this, (((((aH + "_") + aK) + "_") + df) + w)) | |
1056 | + | let cE = eu(aK, aH, df, (cJ > 0)) | |
1057 | + | $Tuple2(nil, cE) | |
1023 | 1058 | } | |
1024 | 1059 | ||
1025 | 1060 | ||
1026 | 1061 | ||
1027 | 1062 | @Callable(al) | |
1028 | - | func getUserPositionInDollarsREADONLY (aK, | |
1029 | - | func | |
1030 | - | let | |
1031 | - | let | |
1032 | - | let | |
1033 | - | let | |
1063 | + | func getUserPositionInDollarsREADONLY (aK,fl,df) = { | |
1064 | + | func fm (aZ,aH) = { | |
1065 | + | let fn = aZ | |
1066 | + | let fo = fn._1 | |
1067 | + | let fp = fn._2 | |
1068 | + | let fq = fn._3 | |
1034 | 1069 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
1035 | - | let | |
1036 | - | let | |
1037 | - | let | |
1038 | - | let aB = | |
1039 | - | let aC = | |
1040 | - | let aA = | |
1041 | - | let | |
1042 | - | let | |
1043 | - | let | |
1044 | - | let | |
1045 | - | let | |
1046 | - | if (( | |
1047 | - | then $Tuple3(( | |
1070 | + | let fr = aD(Address(fromBase58String(aH)), bj) | |
1071 | + | let dM = fr._1 | |
1072 | + | let dN = fr._2 | |
1073 | + | let aB = fr._3 | |
1074 | + | let aC = fr._4 | |
1075 | + | let aA = fr._5 | |
1076 | + | let cJ = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + df[fq]) + w)), 0) | |
1077 | + | let cE = eu(aK, aH, df[fq], (cJ > 0)) | |
1078 | + | let fk = bi(aA) | |
1079 | + | let fs = pow(10, 0, aT(aA), 0, 0, DOWN) | |
1080 | + | let ft = fraction(cE, fk, fs) | |
1081 | + | if ((cJ == 0)) | |
1082 | + | then $Tuple3((fo :+ ft), (fp :+ 0), (fq + 1)) | |
1048 | 1083 | else { | |
1049 | - | let | |
1050 | - | let | |
1051 | - | let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + | |
1084 | + | let ef = getStringValue(this, (((((aH + "_") + aK) + "_") + df[fq]) + x)) | |
1085 | + | let ee = { | |
1086 | + | let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + df[fq]), ef], nil) | |
1052 | 1087 | if ($isInstanceOf(ax, "Int")) | |
1053 | 1088 | then ax | |
1054 | 1089 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
1055 | 1090 | } | |
1056 | - | let | |
1057 | - | let | |
1058 | - | let | |
1059 | - | $Tuple3(( | |
1091 | + | let fu = getIntegerValue(ae, (ef + R)) | |
1092 | + | let fv = pow(10, 0, aT(ef), 0, 0, DOWN) | |
1093 | + | let fw = fraction(ee, fu, fv) | |
1094 | + | $Tuple3((fo :+ ft), (fp :+ fw), (fq + 1)) | |
1060 | 1095 | } | |
1061 | 1096 | } | |
1062 | 1097 | ||
1063 | - | let | |
1064 | - | let bb = | |
1098 | + | let fx = { | |
1099 | + | let bb = fl | |
1065 | 1100 | let bc = size(bb) | |
1066 | 1101 | let bd = $Tuple3(nil, nil, 0) | |
1067 | 1102 | func be (bf,bg) = if ((bg >= bc)) | |
1068 | 1103 | then bf | |
1069 | - | else | |
1104 | + | else fm(bf, bb[bg]) | |
1070 | 1105 | ||
1071 | 1106 | func bh (bf,bg) = if ((bg >= bc)) | |
1072 | 1107 | then bf | |
1073 | 1108 | else throw("List size exceeds 20") | |
1074 | 1109 | ||
1075 | 1110 | bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
1076 | 1111 | } | |
1077 | - | let | |
1078 | - | let | |
1079 | - | $Tuple2(nil, $Tuple2( | |
1112 | + | let fy = fx._1 | |
1113 | + | let ee = fx._2 | |
1114 | + | $Tuple2(nil, $Tuple2(fy, ee)) | |
1080 | 1115 | } | |
1081 | 1116 | ||
1082 | 1117 | ||
1083 | 1118 | ||
1084 | 1119 | @Callable(al) | |
1085 | - | func replenish (aH, | |
1120 | + | func replenish (aH,eO,eP) = if (if ((100 > eO)) | |
1086 | 1121 | then true | |
1087 | - | else ( | |
1122 | + | else (eO > 300)) | |
1088 | 1123 | then throw("Leverage can't be <100 and >300") | |
1089 | 1124 | else if (if (!(getBooleanValue(this, (aH + E)))) | |
1090 | - | then ( | |
1125 | + | then (eO > 100) | |
1091 | 1126 | else false) | |
1092 | 1127 | then throw("You can't borrow in this pool") | |
1093 | 1128 | else { | |
1094 | 1129 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
1095 | - | let | |
1096 | - | let | |
1097 | - | let | |
1098 | - | let aB = | |
1099 | - | let aC = | |
1100 | - | let aA = | |
1101 | - | let | |
1102 | - | then if ((aR(al.payments[0].assetId) != | |
1130 | + | let fz = aD(Address(fromBase58String(aH)), bj) | |
1131 | + | let dM = fz._1 | |
1132 | + | let dN = fz._2 | |
1133 | + | let aB = fz._3 | |
1134 | + | let aC = fz._4 | |
1135 | + | let aA = fz._5 | |
1136 | + | let fA = if ((size(al.payments) == 2)) | |
1137 | + | then if ((aR(al.payments[0].assetId) != dM)) | |
1103 | 1138 | then throw("Wrong payment asset A") | |
1104 | - | else if ((aR(al.payments[1].assetId) != | |
1139 | + | else if ((aR(al.payments[1].assetId) != dN)) | |
1105 | 1140 | then throw("Wrong payment asset B") | |
1106 | - | else $Tuple4(al.payments[0].amount, | |
1141 | + | else $Tuple4(al.payments[0].amount, dM, al.payments[1].amount, dN) | |
1107 | 1142 | else if ((size(al.payments) == 1)) | |
1108 | - | then if ((aR(al.payments[0].assetId) == | |
1109 | - | then $Tuple4(al.payments[0].amount, | |
1110 | - | else if ((aR(al.payments[0].assetId) == | |
1111 | - | then $Tuple4(0, | |
1143 | + | then if ((aR(al.payments[0].assetId) == dM)) | |
1144 | + | then $Tuple4(al.payments[0].amount, dM, 0, dN) | |
1145 | + | else if ((aR(al.payments[0].assetId) == dN)) | |
1146 | + | then $Tuple4(0, dM, al.payments[0].amount, dN) | |
1112 | 1147 | else throw("Wrong payment") | |
1113 | 1148 | else throw("One or two payments expected") | |
1114 | - | let | |
1115 | - | let | |
1116 | - | let | |
1117 | - | let | |
1118 | - | let | |
1119 | - | if (( | |
1149 | + | let bC = fA._1 | |
1150 | + | let fB = fA._2 | |
1151 | + | let bD = fA._3 | |
1152 | + | let fC = fA._4 | |
1153 | + | let fD = aJ(toString(al.caller)) | |
1154 | + | if ((eO > 100)) | |
1120 | 1155 | then { | |
1121 | - | let | |
1122 | - | let | |
1123 | - | let | |
1124 | - | let ax = invoke(this, "createNewRequest", [ | |
1156 | + | let cJ = eN(bC, bD, fB, fC, eO, eP) | |
1157 | + | let eK = makeString([toString(al.caller), aH, toString(bC), fB, toString(bD), fC, toString(aB), toString(aC), aA, eP, toString(cJ)], ",") | |
1158 | + | let fE = { | |
1159 | + | let ax = invoke(this, "createNewRequest", [eK], nil) | |
1125 | 1160 | if ($isInstanceOf(ax, "Int")) | |
1126 | 1161 | then ax | |
1127 | 1162 | else throw(($getType(ax) + " couldn't be cast to Int")) | |
1128 | 1163 | } | |
1129 | - | if (( | |
1164 | + | if ((fE == fE)) | |
1130 | 1165 | then { | |
1131 | - | let | |
1132 | - | let | |
1133 | - | if (( | |
1166 | + | let fF = [((toString(al.caller) + "_") + toString(fD)), aA, eP, cJ, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fE, "Can't create new request"))] | |
1167 | + | let bW = reentrantInvoke(ai(), "flashPosition", fF, nil) | |
1168 | + | if ((bW == bW)) | |
1134 | 1169 | then nil | |
1135 | 1170 | else throw("Strict value is not equal to itself.") | |
1136 | 1171 | } | |
1137 | 1172 | else throw("Strict value is not equal to itself.") | |
1138 | 1173 | } | |
1139 | 1174 | else { | |
1140 | - | let fu = cO(bj, aH, h, bB, dH, bC, dI, aB, aC, aA) | |
1141 | - | let fv = fu._1 | |
1142 | - | let dX = fu._2 | |
1143 | - | (cY(aH, toString(al.caller), fv, dX, fr, aA, bj, false) ++ bw(dH, dI, aA)) | |
1175 | + | let fG = cT(bj, aH, h, bC, dM, bD, dN, aB, aC, aA) | |
1176 | + | let fh = fG._1 | |
1177 | + | let ec = fG._2 | |
1178 | + | let fH = cD(Address(fromBase58String(aH)), bj, aA, fh) | |
1179 | + | let fI = fH._1 | |
1180 | + | let fJ = fH._2 | |
1181 | + | (dd(aH, toString(al.caller), fh, ec, fD, aA, bj, false) ++ bw(dM, dN, aA, [toString(fI), toString(fJ)])) | |
1144 | 1182 | } | |
1145 | 1183 | } | |
1146 | 1184 | ||
1147 | 1185 | ||
1148 | 1186 | ||
1149 | 1187 | @Callable(al) | |
1150 | - | func withdraw (aH, | |
1188 | + | func withdraw (aH,ev) = eA(toString(al.caller), aH, toString(ev), false) | |
1151 | 1189 | ||
1152 | 1190 | ||
1153 | 1191 | ||
1154 | 1192 | @Callable(al) | |
1155 | - | func createUpdateStopLoss ( | |
1156 | - | let | |
1157 | - | if (!(isDefined(getInteger(this, ((((( | |
1193 | + | func createUpdateStopLoss (ev,fK,ap,fL) = { | |
1194 | + | let fM = getIntegerValue(ae, (ap + R)) | |
1195 | + | if (!(isDefined(getInteger(this, (((((fK + "_") + toString(al.caller)) + "_") + toString(ev)) + u))))) | |
1158 | 1196 | then throw("There are no user position") | |
1159 | - | else if ((0 >= | |
1197 | + | else if ((0 >= fL)) | |
1160 | 1198 | then throw("Price must be greater than 0") | |
1161 | - | else if (( | |
1199 | + | else if ((fL > fM)) | |
1162 | 1200 | then throw("Price must be less than current token price") | |
1163 | - | else [IntegerEntry((((((((toString(al.caller) + "_") + toString( | |
1201 | + | else [IntegerEntry((((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S), fL)] | |
1164 | 1202 | } | |
1165 | 1203 | ||
1166 | 1204 | ||
1167 | 1205 | ||
1168 | 1206 | @Callable(al) | |
1169 | - | func deleteStopLoss ( | |
1207 | + | func deleteStopLoss (ev,fK,ap) = if (!(isDefined(getInteger(this, (((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S))))) | |
1170 | 1208 | then throw("No entry") | |
1171 | - | else [DeleteEntry((((((((toString(al.caller) + "_") + toString( | |
1209 | + | else [DeleteEntry((((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S))] | |
1172 | 1210 | ||
1173 | 1211 | ||
1174 | 1212 | ||
1175 | 1213 | @Callable(al) | |
1176 | - | func init ( | |
1214 | + | func init (fN,fO,fP,ae,fQ,af,fR,fS,fT) = if (isDefined(getString(T))) | |
1177 | 1215 | then throw("Already inited") | |
1178 | - | else [StringEntry(T, | |
1216 | + | else [StringEntry(T, fN), StringEntry(U, fO), StringEntry(V, fP), StringEntry(X, ae), StringEntry(Y, fQ), StringEntry(Z, af), StringEntry(aa, fR), StringEntry(ab, fS), StringEntry(W, fT)] | |
1179 | 1217 | ||
1180 | 1218 | ||
1181 | 1219 | ||
1182 | 1220 | @Callable(al) | |
1183 | - | func createNewRequest ( | |
1184 | - | let | |
1185 | - | $Tuple2([StringEntry((toString( | |
1221 | + | func createNewRequest (bV) = valueOrElse(am(al), { | |
1222 | + | let fE = (valueOrElse(getInteger(this, M), 0) + 1) | |
1223 | + | $Tuple2([StringEntry((toString(fE) + L), bV), IntegerEntry(M, fE)], fE) | |
1186 | 1224 | }) | |
1187 | 1225 | ||
1188 | 1226 | ||
1189 | 1227 | ||
1190 | 1228 | @Callable(al) | |
1191 | - | func replenishFromLand ( | |
1192 | - | let | |
1193 | - | let aK = | |
1194 | - | let aH = | |
1195 | - | let | |
1196 | - | let | |
1197 | - | let | |
1198 | - | let | |
1199 | - | let aB = | |
1200 | - | let aC = | |
1201 | - | let aA = | |
1202 | - | let | |
1203 | - | let | |
1229 | + | func replenishFromLand (eJ) = valueOrElse(an(al), { | |
1230 | + | let fU = eI(eJ) | |
1231 | + | let aK = fU._1 | |
1232 | + | let aH = fU._2 | |
1233 | + | let bC = fU._3 | |
1234 | + | let dM = fU._4 | |
1235 | + | let bD = fU._5 | |
1236 | + | let dN = fU._6 | |
1237 | + | let aB = fU._7 | |
1238 | + | let aC = fU._8 | |
1239 | + | let aA = fU._9 | |
1240 | + | let eL = fU._10 | |
1241 | + | let eM = fU._11 | |
1204 | 1242 | if ((size(al.payments) != 1)) | |
1205 | 1243 | then throw("Wrong payment size") | |
1206 | - | else if (if ((aR(al.payments[0].assetId) != | |
1244 | + | else if (if ((aR(al.payments[0].assetId) != eL)) | |
1207 | 1245 | then true | |
1208 | - | else (al.payments[0].amount != | |
1246 | + | else (al.payments[0].amount != eM)) | |
1209 | 1247 | then throw("Wrong payment") | |
1210 | 1248 | else { | |
1211 | - | let | |
1212 | - | then $Tuple2(( | |
1213 | - | else $Tuple2( | |
1214 | - | let | |
1215 | - | let | |
1249 | + | let fV = if ((dM == eL)) | |
1250 | + | then $Tuple2((bC + al.payments[0].amount), bD) | |
1251 | + | else $Tuple2(bC, (bD + al.payments[0].amount)) | |
1252 | + | let fe = fV._1 | |
1253 | + | let ff = fV._2 | |
1216 | 1254 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool") | |
1217 | - | let fK = cO(bj, aH, g, fI, dH, fJ, dI, aB, aC, aA) | |
1218 | - | let fv = fK._1 | |
1219 | - | let dX = fK._2 | |
1220 | - | let da = aJ(aK) | |
1221 | - | let fL = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(da)) + w), eI), StringEntry((((((aH + "_") + aK) + "_") + toString(da)) + x), eH)] | |
1222 | - | let fM = cY(aH, aK, fv, dX, da, aA, bj, true) | |
1223 | - | $Tuple2((((fM ++ bw(dH, dI, aA)) ++ fL) :+ DeleteEntry((eF + L))), fv) | |
1255 | + | let fW = cT(bj, aH, g, fe, dM, ff, dN, aB, aC, aA) | |
1256 | + | let fh = fW._1 | |
1257 | + | let ec = fW._2 | |
1258 | + | let df = aJ(aK) | |
1259 | + | let fi = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + w), eM), StringEntry((((((aH + "_") + aK) + "_") + toString(df)) + x), eL)] | |
1260 | + | let fj = dd(aH, aK, fh, ec, df, aA, bj, true) | |
1261 | + | let fX = cD(Address(fromBase58String(aH)), bj, aA, fh) | |
1262 | + | let fI = fX._1 | |
1263 | + | let fJ = fX._2 | |
1264 | + | $Tuple2((((fj ++ bw(dM, dN, aA, [toString(fI), toString(fJ)])) ++ fi) :+ DeleteEntry((eJ + L))), fh) | |
1224 | 1265 | } | |
1225 | 1266 | }) | |
1226 | 1267 | ||
1227 | 1268 | ||
1228 | 1269 | ||
1229 | 1270 | @Callable(al) | |
1230 | - | func liquidate (aK, | |
1231 | - | let aH = valueOrErrorMessage(getString(this, (((aK + "_") + | |
1271 | + | func liquidate (aK,ev,fY) = valueOrElse(an(al), { | |
1272 | + | let aH = valueOrErrorMessage(getString(this, (((aK + "_") + ev) + v)), "no position") | |
1232 | 1273 | let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited") | |
1233 | - | let | |
1234 | - | let | |
1235 | - | let | |
1236 | - | let aB = | |
1237 | - | let aC = | |
1238 | - | let aA = | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | let | |
1243 | - | if (( | |
1274 | + | let fZ = aD(Address(fromBase58String(aH)), bj) | |
1275 | + | let dM = fZ._1 | |
1276 | + | let dN = fZ._2 | |
1277 | + | let aB = fZ._3 | |
1278 | + | let aC = fZ._4 | |
1279 | + | let aA = fZ._5 | |
1280 | + | let bQ = bR(aH, bj, aA, fY) | |
1281 | + | let cJ = getIntegerValue(this, (((((aH + "_") + aK) + "_") + ev) + w)) | |
1282 | + | let ef = getStringValue(this, (((((aH + "_") + aK) + "_") + ev) + x)) | |
1283 | + | let cE = eu(aK, aH, ev, (cJ > 0)) | |
1284 | + | if ((cJ == 0)) | |
1244 | 1285 | then throw("You can't liquidate position without borrow") | |
1245 | - | else [IntegerEntry((((((aH + "_") + aK) + "_") + | |
1286 | + | else [IntegerEntry((((((aH + "_") + aK) + "_") + ev) + z), getIntegerValue(this, (aH + C))), IntegerEntry((aH + B), (aI(aH) - fY)), IntegerEntry((aH + A), (aG(aH) - fY)), IntegerEntry((((((aH + "_") + aK) + "_") + ev) + u), (cE - fY)), ScriptTransfer(al.caller, bQ, fromBase58String(aA))] | |
1246 | 1287 | }) | |
1247 | 1288 | ||
1248 | 1289 | ||
1249 | 1290 | ||
1250 | 1291 | @Callable(al) | |
1251 | - | func stopLoss (aK, | |
1252 | - | let | |
1253 | - | if (!(isDefined(getInteger(this, (((((((aK + "_") + toString( | |
1292 | + | func stopLoss (aK,ev,aH,ap) = valueOrElse(ak(al), { | |
1293 | + | let fM = getIntegerValue(ae, (ap + R)) | |
1294 | + | if (!(isDefined(getInteger(this, (((((((aK + "_") + toString(ev)) + "_") + aH) + "_") + ap) + S))))) | |
1254 | 1295 | then throw("No entry") | |
1255 | - | else ( | |
1296 | + | else (eA(toString(al.caller), aH, toString(ev), true) :+ DeleteEntry((((((((aK + "_") + toString(ev)) + "_") + aH) + "_") + ap) + S))) | |
1256 | 1297 | }) | |
1257 | 1298 | ||
1258 | 1299 | ||
1259 | 1300 | ||
1260 | 1301 | @Callable(al) | |
1261 | - | func capitalizeExKeeper (aH,aE, | |
1262 | - | let | |
1263 | - | then | |
1302 | + | func capitalizeExKeeper (aH,aE,ga,gb,gc,dq,dr,ds,dt,du,dv,dw) = valueOrElse(ak(al), { | |
1303 | + | let gd = if (gc) | |
1304 | + | then cQ(aE, aH) | |
1264 | 1305 | else { | |
1265 | - | let | |
1306 | + | let ge = if ((aE == a)) | |
1266 | 1307 | then ag | |
1267 | 1308 | else ah | |
1268 | - | $Tuple2( | |
1309 | + | $Tuple2(gb, ge) | |
1269 | 1310 | } | |
1270 | - | let | |
1271 | - | let | |
1272 | - | let | |
1273 | - | let | |
1274 | - | let | |
1275 | - | then [IntegerEntry((aH + P), ( | |
1311 | + | let gf = gd._1 | |
1312 | + | let ge = gd._2 | |
1313 | + | let gg = dm(ga, gb, ge, dq, dr, ds, dt, du, dv, dw) | |
1314 | + | let cw = (gf - gb) | |
1315 | + | let gh = if ((cw > 0)) | |
1316 | + | then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))] | |
1276 | 1317 | else nil | |
1277 | - | ( | |
1318 | + | (dI(aH, aE, ga, gg) ++ gh) | |
1278 | 1319 | }) | |
1279 | 1320 | ||
1280 | 1321 | ||
1281 | 1322 | ||
1282 | 1323 | @Callable(al) | |
1283 | - | func capitalizeExPuzzle (aH,aE, | |
1284 | - | let | |
1285 | - | then | |
1324 | + | func capitalizeExPuzzle (aH,aE,ga,gb,gc,dz,dA,dw) = valueOrElse(ak(al), { | |
1325 | + | let gi = if (gc) | |
1326 | + | then cQ(aE, aH) | |
1286 | 1327 | else { | |
1287 | - | let | |
1328 | + | let ge = if ((aE == a)) | |
1288 | 1329 | then ag | |
1289 | 1330 | else ah | |
1290 | - | $Tuple2( | |
1331 | + | $Tuple2(gb, ge) | |
1291 | 1332 | } | |
1292 | - | let | |
1293 | - | let | |
1294 | - | let | |
1295 | - | let | |
1296 | - | let | |
1297 | - | then [IntegerEntry((aH + P), ( | |
1333 | + | let gf = gi._1 | |
1334 | + | let ge = gi._2 | |
1335 | + | let gg = dy(ga, gb, ge, dz, dA, dw) | |
1336 | + | let cw = (gf - gb) | |
1337 | + | let gh = if ((cw > 0)) | |
1338 | + | then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))] | |
1298 | 1339 | else nil | |
1299 | - | ( | |
1340 | + | (dI(aH, aE, ga, gg) ++ gh) | |
1300 | 1341 | }) | |
1301 | 1342 | ||
1302 | 1343 | ||
1303 | 1344 | ||
1304 | 1345 | @Callable(al) | |
1305 | - | func capitalizeExSwopFi (aH,aE, | |
1306 | - | let | |
1307 | - | then | |
1346 | + | func capitalizeExSwopFi (aH,aE,ga,gb,gc,dC,dD,dE,dF,dG,dH,dw) = valueOrElse(ak(al), { | |
1347 | + | let gj = if (gc) | |
1348 | + | then cQ(aE, aH) | |
1308 | 1349 | else { | |
1309 | - | let | |
1350 | + | let ge = if ((aE == a)) | |
1310 | 1351 | then ag | |
1311 | 1352 | else ah | |
1312 | - | $Tuple2( | |
1353 | + | $Tuple2(gb, ge) | |
1313 | 1354 | } | |
1314 | - | let | |
1315 | - | let | |
1316 | - | let | |
1317 | - | let | |
1318 | - | let | |
1319 | - | then [IntegerEntry((aH + P), ( | |
1355 | + | let gf = gj._1 | |
1356 | + | let ge = gj._2 | |
1357 | + | let gg = dB(ga, gb, ge, dC, dD, dE, dF, dG, dH, dw) | |
1358 | + | let cw = (gf - gb) | |
1359 | + | let gh = if ((cw > 0)) | |
1360 | + | then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))] | |
1320 | 1361 | else nil | |
1321 | - | ( | |
1362 | + | (dI(aH, aE, ga, gg) ++ gh) | |
1322 | 1363 | }) | |
1323 | 1364 | ||
1324 | 1365 | ||
1325 | 1366 | ||
1326 | 1367 | @Callable(al) | |
1327 | - | func initNewPool (aE,au, | |
1368 | + | func initNewPool (aE,au,gk,gl,gm,gn,go,gp,gq) = valueOrElse(ak(al), if (if ((aE != a)) | |
1328 | 1369 | then (aE != b) | |
1329 | 1370 | else false) | |
1330 | 1371 | then throw("Wrong type") | |
1331 | 1372 | else { | |
1332 | - | let | |
1333 | - | let ay = | |
1334 | - | let az = | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let aA = | |
1338 | - | [IntegerEntry((au + F), | |
1373 | + | let gr = aD(Address(fromBase58String(au)), aE) | |
1374 | + | let ay = gr._1 | |
1375 | + | let az = gr._2 | |
1376 | + | let gs = gr._3 | |
1377 | + | let gt = gr._4 | |
1378 | + | let aA = gr._5 | |
1379 | + | [IntegerEntry((au + F), gk), IntegerEntry((au + G), gl), IntegerEntry((au + H), gm), IntegerEntry((au + I), gn), IntegerEntry((au + J), go), IntegerEntry((au + K), gp), IntegerEntry((au + C), 0), IntegerEntry((au + D), 0), StringEntry((N + au), aE), StringEntry((aA + O), au), BooleanEntry((au + E), gq)] | |
1339 | 1380 | }) | |
1340 | 1381 | ||
1341 | 1382 | ||
1342 | - | @Verifier( | |
1343 | - | func | |
1383 | + | @Verifier(gu) | |
1384 | + | func gv () = sigVerify(gu.bodyBytes, gu.proofs[0], gu.senderPublicKey) | |
1344 | 1385 |
github/deemru/w8io/026f985 366.50 ms ◑