tx · MKVGba9sen5yMEmFZwnYPjKw6jrWayBc21yHXCrWDL1

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.04500000 Waves

2023.06.16 11:44 [2624965] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "MKVGba9sen5yMEmFZwnYPjKw6jrWayBc21yHXCrWDL1", "fee": 4500000, "feeAssetId": null, "timestamp": 1686905116011, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "2SUMmbjZwGLrQo8uQAsDYe8ameUMESs5vphqtDU9MwrHTGCRfUYegXqQU6Lbqy3KtvJL59VnQ1PQNya3eDsh42vn" ], "script": "base64:BgKKAQgCEgcKBQgBCAEBEgMKAQgSBAoCCAgSBQoDCBgYEgUKAwgBCBIECgIIARIGCgQBCAgBEgUKAwEICBIDCgEIEgMKAQgSBQoDCAgBEgYKBAgBCAgSDgoMCAgIAQQRGBgRAQEYEgoKCAgICAEECAEYEg4KDAgICAEEGBgYGBgBGBIKCggICAEBAQEBAWUAB1NGX1BPT0wCAlNGAAdXWF9QT09MAgJXWAAPQ0FQX0ZFRV9OT19MT0FOAgljYXBOb0xvYW4ADENBUF9GRUVfTE9BTgIHY2FwTG9hbgAUU1RPUExPU1NfRkVFX05PX0xPQU4CDnN0b3BMb3NzTm9Mb2FuAA1TVE9QTE9TU19MT0FOAgxzdG9wTG9zc0xvYW4ACExPQU5fRkVFAgRsb2FuAAtOT19MT0FOX0ZFRQIGbm9Mb2FuAAZOT19GRUUCBW5vRmVlAAZTQ0FMRTgAgMLXLwAHU0NBTEUxMACAyK+gJQAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQAEmtTRlBvb2xTaGFyZVN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AAprU0ZQb29sRmVlAgpjb21taXNzaW9uAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJQb3NpdGlvblBvb2wCE191c2VyX3Bvc2l0aW9uX3Bvb2wAEWtVc2VyQm9ycm93QW1vdW50AhxfdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYW1vdW50ABJrVXNlckJvcnJvd0Fzc2V0SWQCHl91c2VyX3Bvc2l0aW9uX2JvcnJvd19hc3NldF9pZAAQa1VzZXJQb3NpdGlvbk51bQIVX3VzZXJfcG9zaXRpb25fbnVtYmVyABVrVXNlclBvc2l0aW9uSW50ZXJlc3QCF191c2VyX3Bvc2l0aW9uX2ludGVyZXN0AAprUG9vbFRvdGFsAgtfcG9vbF90b3RhbAAOa1Bvb2xUb3RhbExvYW4CEF9wb29sX3RvdGFsX2xvYW4AEWtQb29sSW50ZXJlc3RMb2FuAhNfcG9vbF9pbnRlcmVzdF9sb2FuABNrUG9vbEludGVyZXN0Tm9Mb2FuAhZfcG9vbF9pbnRlcmVzdF9ub19sb2FuABVrQXhseUluRmVlV2l0aG91dExvYW4CFl9heGx5X2ZlZV93aXRob3V0X2xvYW4AEmtBeGx5SW5GZWVXaXRoTG9hbgITX2F4bHlfZmVlX3dpdGhfbG9hbgARa0F4bHlOb0xvYW5DYXBGZWUCF19heGx5X2ZlZV9jYXBfd2l0aF9sb2FuABNrQXhseVdpdGhMb2FuQ2FwRmVlAhVfYXhseV9mZWVfY2FwX25vX2xvYW4AFmtBeGx5U3RvcExvc3NOb0xvYW5GZWUCHF9heGx5X2ZlZV9zdG9wbG9zc193aXRoX2xvYW4AFGtBeGx5U3RvcExvc3NMb2FuRmVlAhpfYXhseV9mZWVfc3RvcGxvc3Nfbm9fbG9hbgAKa1JlcXVlc3RJZAILX3JlcXVlc3RfaWQADGtSZXF1ZXN0SXRlcgINcmVxdWVzdHNfaXRlcgAFa1Bvb2wCBXBvb2xfAAprU2hhcmVQb29sAg5fcG9vbF9zaGFyZV9pZAAOa1Bvb2xDYXBDaGFuZ2UCEF9wb29sX2NhcF9jaGFuZ2UAD2tUb2tlbkxhc3RQcmljZQIKbGFzdF9wcmljZQANa1VzZXJTdG9wTG9zcwIKX3N0b3BfbG9zcwAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIADGtBZG1pbkNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QACG1vbmV5Qm94CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtNb25leUJveAIYTm8gYXhseSBtb25leUJveCBhZGRyZXNzAApleENvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFC2tFeENvbnRyYWN0AhxObyBleGNoYW5nZSBjb250cmFjdCBhZGRyZXNzAA9wcmljZU9yYWNsZUFkZHIJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa1ByaWNlT3JhY2xlAhdObyBwcmljZSBvcmFjbGUgYWRkcmVzcwAOd3hTd2FwQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa1d4U3dhcENvbnRyYWN0AhJObyB3eCBzd2FwIGFkZHJlc3MABlNXT1BJRAEgNAETVo5gRuJ+W6m4AUeC57EAJhKbduROS6KgfJxt7oEABFdYSUQBIMZSHoFO6m7jPMCXsA5fLPJq6e2dsobRmkJ4qGB9PhuxAQ5nZXRMZW5kU3J2QWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0xlbmRTZXJ2aWNlAhtDYW4ndCBnZXQgbGVuZCBzZXJ2aWNlIGFkZHIBEGdldEFkbWluQ2FsbEFkZHIACQCnCAEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtBZG1pbkNhbGxQSwIbQ2FuJ3QgZ2V0IGxlbmQgc2VydmljZSBhZGRyAQtpc0FkbWluQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIJARBnZXRBZG1pbkNhbGxBZGRyAAUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc0xhbmRDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgkBDmdldExlbmRTcnZBZGRyAAUEdW5pdAkAAgECKU9ubHkgbGFuZCBjb250cmFjdCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgENZ2V0U0ZQb29sRGF0YQEIcG9vbEFkZHIJAJcKBQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQUFzc2V0SWQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUPa1NGUG9vbEJBc3NldElkAhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xBQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEJBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEIgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ5rU0ZQb29sU2hhcmVJZAIYQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IGlkAQ1nZXRXWFBvb2xEYXRhAQhwb29sQWRkcgQDY2ZnCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2NmZwUDY2ZnBANhSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAQDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGlkBANiSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAUDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkBAdzaGFyZUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwADAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIaQ2FuJ3QgZ2V0IHBvb2wgTFAgYXNzZXQgaWQEBGJhbEEKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2FJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFBGJhbEEFBGJhbEEEBGJhbEIKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2JJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFBGJhbEIFBGJhbEIJAJcKBQUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFBvb2xEYXRhAghwb29sQWRkcgR0eXBlAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ1nZXRTRlBvb2xEYXRhAQUIcG9vbEFkZHIDCQAAAgUEdHlwZQUHV1hfUE9PTAkBDWdldFdYUG9vbERhdGEBBQhwb29sQWRkcgkAAgECD1dyb25nIHBvb2wgdHlwZQEOZ2V0U2hhcmVTdXBwbHkDCHBvb2xBZGRyBHR5cGUHc2hhcmVJZAMJAAACBQR0eXBlBQdTRl9QT09MCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFEmtTRlBvb2xTaGFyZVN1cHBseQIcQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IHN1cHBseQMJAAACBQR0eXBlBQdXWF9QT09MCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUHc2hhcmVJZAINV3JvbmcgU2hhcmVJZAhxdWFudGl0eQkAAgECD1dyb25nIHBvb2wgdHlwZQERZ2V0UG9vbFRvdGFsU2hhcmUBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQprUG9vbFRvdGFsAAABGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgAAARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBHVzZXIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJQb3NpdGlvbk51bQAAAAEBCmdldEF4bHlGZWUCBHBvb2wHZmVlVHlwZQMJAAACBQdmZWVUeXBlBQxDQVBfRkVFX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa0F4bHlXaXRoTG9hbkNhcEZlZQMJAAACBQdmZWVUeXBlBQ9DQVBfRkVFX05PX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa0F4bHlOb0xvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUITE9BTl9GRUUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuAwkAAAIFB2ZlZVR5cGUFC05PX0xPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgMJAAACBQdmZWVUeXBlBQZOT19GRUUAAAkAAgECDldyb25nIGZlZSB0eXBlARBnZXRTRkZhcm1pbmdBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ5rU0ZGYXJtaW5nQWRkcgIdQ2FuJ3QgZ2V0IHN3b3BmaSBmYXJtaW5nIGFkZHIBEGdldFdYRmFybWluZ0FkZHIBCHBvb2xBZGRyBAlmQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHICEyVzX19mYWN0b3J5Q29udHJhY3QCIkNhbid0IGdldCBXWCBmYWN0b3J5IGNvbnRyYWN0IGFkZHIECmZhY3Ryb3lDZmcJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCWZDb250cmFjdAIRJXNfX2ZhY3RvcnlDb25maWcCGENhbid0IGdldCBXWCBmYWN0b3J5IGNmZwICX18JAQdBZGRyZXNzAQkA2QQBCQCRAwIFCmZhY3Ryb3lDZmcAAQEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yAQ5hc3NldElkRnJvbVN0cgEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARBnZXRBc3NldERlY2ltYWxzAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTAAgEByRtYXRjaDAJAOwHAQkA2QQBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CGRlY2ltYWxzCQACAQIQQ2FuJ3QgZmluZCBhc3NldAERZ2V0QXNzZXRQcmVjaXRpb24BB2Fzc2V0SWQJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdhc3NldElkAAAAAAUERE9XTgEOZ2V0QXNzZXRzUHJpY2UBCGFzc2V0SWRzCgEJZ2V0UHJpY2VzAgFhB2Fzc2V0SWQECmFzc2V0UHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdh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YmFsQgQNJHQwMTAxMDMxMDQwOAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkAlAoCBQNuaWwFA25pbAkAlAoCCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAiBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQkAzAgCBQRwbXRBBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUNJHQwMTAxMDMxMDQwOAUNJHQwMTAxMDMxMDQwOAQKZXZhbFB1dEluQggFDSR0MDEwMTAzMTA0MDgCXzIECmV2YWxQdXRJbkEIBQ0kdDAxMDEwMzEwNDA4Al8xBA0kdDAxMDQxODEwNjE0AwkAAAIFBXBUeXBlBQdTRl9QT09MCQCUCgIJAGsDBQZTQ0FMRTgFBHBtdEEFBGJhbEEJAGsDBQZTQ0FMRTgFBHBtdEIFBGJhbEIJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkIAAQQGcmF0aW9BCAUNJHQwMTA0MTgxMDYxNAJfMQQGcmF0aW9CCAUNJHQwMTA0MTgxMDYxNAJfMgQNJHQwMTA2MjAxMTEwMgMJAGYCBQZyYXRpb0IFBnJhdGlvQQQDcG10AwkAAAIFBXBUeXBlBQdTRl9QT09MCQBuBAUEYmFsQgUGcmF0aW9BBQZTQ0FMRTgFB0NFSUxJTkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAgJAJcKBQUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQNiSWQFBnJhdGlvQgQDcG10AwkAAAIFBXBUeXBlBQdTRl9QT09MCQBuBAUEYmFsQQUGcmF0aW9CBQZTQ0FMRTgFB0NFSUxJTkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAcJAJcKBQUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQNhSWQFBnJhdGlvQQQGcG10SW5BCAUNJHQwMTA2MjAxMTEwMgJfMQQGcG10SW5CCAUNJHQwMTA2MjAxMTEwMgJfMgQGY2hhbmdlCAUNJHQwMTA2MjAxMTEwMgJfMwQNY2hhbmdlQXNzZXRJZAgFDSR0MDEwNjIwMTExMDICXzQEAmxwCAUNJHQwMTA2MjAxMTEwMgJfNQkAlwoFBQZwbXRJbkEFBnBtdEluQgUGY2hhbmdlBQ1jaGFuZ2VBc3NldElkBQJscAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYcmVwbGVuaXNoVHdvVG9rZW5zQnlUeXBlBghwb29sQWRkcgVwVHlwZQRwbXRBA2FJZARwbXRCA2JJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFA2FJZAUEcG10QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUDYklkBQRwbXRCBQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgDAhD0JAMwIAgcFA25pbAUIcGF5bWVudHMBF3JlcGxlbmlzaE9uZVRva2VuQnlUeXBlBAhwb29sQWRkcgVwVHlwZQNwbXQFcG10SWQECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQVwbXRJZAUDcG10BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhVyZXBsZW5pc2hXaXRoT25lVG9rZW4JAMwIAgkAzAgCAgEwCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAUDbmlsBQhwYXltZW50cwkA/AcEBQhwb29sQWRkcgIJcHV0T25lVGtuCQDMCAIAAAkAzAgCBwUDbmlsBQhwYXltZW50cwEHc3Rha2VMUAQEcG9vbAVwVHlwZQdzaGFyZUlkBmFtb3VudAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAg9sb2NrU2hhcmVUb2tlbnMJAMwIAgUEcG9vbAkAzAgCAAAFA25pbAUIcGF5bWVudHMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgVzdGFrZQUDbmlsBQhwYXltZW50cwEJdW5zdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BA0kdDAxMjMzMjEyNjg5AwkAAAIFBXBUeXBlBQdTRl9QT09MCQCVCgMJARBnZXRTRkZhcm1pbmdBZGRyAAITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIFBmFtb3VudAUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MCQCVCgMJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3Vuc3Rha2UJAMwIAgUHc2hhcmVJZAkAzAgCBQZhbW91bnQFA25pbAkAAgECD1dyb25nIHBvb2wgdHlwZQQIZmFybUFkZHIIBQ0kdDAxMjMzMjEyNjg5Al8xBAVmTmFtZQgFDSR0MDEyMzMyMTI2ODkCXzIEBnBhcmFtcwgFDSR0MDEyMzMyMTI2ODkCXzMEA2ludgkA/AcEBQhmYXJtQWRkcgUFZk5hbWUFBnBhcmFtcwUDbmlsAwkAAAIFA2ludgUDaW52BQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWNhbGNBbW91bnRUb1BheVNGBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAlmZWVTY2FsZTYAwIQ9BANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCHBvb2xBZGRyBQprU0ZQb29sRmVlBAxhbW50R2V0Tm9GZWUJAGsDBRBhbW91bnRUb2tlblRvR2V0BQlmZWVTY2FsZTYJAGUCBQlmZWVTY2FsZTYFA2ZlZQQNJHQwMTMxMDIxMzM5MAMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFBGJhbEEFDGFtbnRHZXROb0ZlZQkAZQIFBGJhbEIFDGFtbnRHZXROb0ZlZQkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUMYW1udEdldE5vRmVlCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxMzEwMjEzMzkwAl8xBAphc3NldFRvUGF5CAUNJHQwMTMxMDIxMzM5MAJfMgkAlAoCBQphc3NldFRvUGF5BQthbW91bnRUb1BheQERY2FsY0Ftb3VudFRvUGF5V1gHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAVwckZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCDyVzX19wcm90b2NvbEZlZQQEcEZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCCyVzX19wb29sRmVlBAhmZWVTY2FsZQkAtgIBAIDC1y8EDSR0MDEzNzI5MTQwMzcDCQAAAgUPYXNzZXRUb2tlblRvR2V0BQhhc3NldElkQQQLYW1vdW50VG9QYXkJAGsDBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAZQIFBGJhbEEFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDEzNzI5MTQwMzcCXzEECmFzc2V0VG9QYXkIBQ0kdDAxMzcyOTE0MDM3Al8yBBJhbW91bnRUb1BheVdpdGhGZWUJAKADAQkAvAIDCQC2AgEFC2Ftb3VudFRvUGF5BQhmZWVTY2FsZQkAuAICBQhmZWVTY2FsZQkAtgIBCQBkAgUFcHJGZWUFBHBGZWUJAJQKAgUKYXNzZXRUb1BheQUSYW1vdW50VG9QYXlXaXRoRmVlARBleGNoYW5nZURpcmVjdGx5CAR0eXBlBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wEDSR0MDE0Mzc1MTQ0OTcJARFjYWxjQW1vdW50VG9QYXlTRgcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0BAphc3NldFRvUGF5CAUNJHQwMTQzNzUxNDQ5NwJfMQQLYW1vdW50VG9QYXkIBQ0kdDAxNDM3NTE0NDk3Al8yCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wCDGNhbGxGdW5jdGlvbgkAzAgCAghleGNoYW5nZQkAzAgCCQDMCAICATEFA25pbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQphc3NldFRvUGF5BQthbW91bnRUb1BheQUDbmlsBA0kdDAxNDY0ODE0NzcwCQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAQKYXNzZXRUb1BheQgFDSR0MDE0NjQ4MTQ3NzACXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTQ2NDgxNDc3MAJfMgkA/AcEBQ53eFN3YXBDb250cmFjdAIEc3dhcAkAzAgCAAEJAMwIAgUPYXNzZXRUb2tlblRvR2V0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T0wJARFjYWxjQW1vdW50VG9QYXlTRgcFBHBvb2wFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQ1hbW91bnRUb0dldEV4BQ1ib3Jyb3dBc3NldElkCQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQNhSWQFA2JJZAUEYmFsQQUEYmFsQgUNYW1vdW50VG9HZXRFeAUNYm9ycm93QXNzZXRJZAkAlAoCAgAAAAQKYXNzZXRUb1BheQgFDSR0MDE2OTk0MTcyOTcCXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTY5OTQxNzI5NwJfMgMJAAACBQ1ib3Jyb3dBc3NldElkBQNhSWQJAJQKAgkAZQIJAGQCBQpnZXRBbW91bnRBBQ1hbW91bnRUb0dldEV4BQxib3Jyb3dBbW91bnQJAGUCBQpnZXRBbW91bnRCBQthbW91bnRUb1BheQkAlAoCCQBlAgUKZ2V0QW1vdW50QQULYW1vdW50VG9QYXkJAGUCCQBkAgUKZ2V0QW1vdW50QgUNYW1vdW50VG9HZXRFeAUMYm9ycm93QW1vdW50CQCUCgIFCmdldEFtb3VudEEFCmdldEFtb3VudEIBC2NsYWltRmFybWVkAgR0eXBlBHBvb2wDCQAAAgUEdHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQUHV1hfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHY2xhaW1XWAkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBFdYSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUBD3JlcGxlbmlzaEJ5VHlwZQoFcFR5cGUEcG9vbAdmZWVUeXBlBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgRMUElkBA9scEJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUETFBJZAMJAAACBQ9scEJhbGFuY2VCZWZvcmUFD2xwQmFsYW5jZUJlZm9yZQQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEDSR0MDE4NDk0MTg5MTADAwkAZgIFBHBtdEEAAAkAZgIFBHBtdEIAAAcEDSR0MDE4NTYwMTg2NzYJARhjYWxjUmVwbGVuaXNoQnlUd29Ub2tlbnMIBQVwVHlwZQUIcG9vbEFkZHIFBHBtdEEFA2FJZAUEcG10QgUDYklkBQRiYWxBBQRiYWxCBAZwbXRJbkEIBQ0kdDAxODU2MDE4Njc2Al8xBAZwbXRJbkIIBQ0kdDAxODU2MDE4Njc2Al8yBAZjaGFuZ2UIBQ0kdDAxODU2MDE4Njc2Al8zBAhjaGFuZ2VJZAgFDSR0MDE4NTYwMTg2NzYCXzQEA2ludgkBGHJlcGxlbmlzaFR3b1Rva2Vuc0J5VHlwZQYFCHBvb2xBZGRyBQVwVHlwZQUGcG10SW5BBQNhSWQFBnBtdEluQgUDYklkAwkAAAIFA2ludgUDaW52CQCUCgIFBmNoYW5nZQUIY2hhbmdlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBmAgUEcG10QQAACQCUCgIFBHBtdEEFA2FJZAMJAGYCBQRwbXRCAAAJAJQKAgUEcG10QgUDYklkCQACAQIQcG10cyBtdXN0IGJlID4gMAQGY2hhbmdlCAUNJHQwMTg0OTQxODkxMAJfMQQIY2hhbmdlSWQIBQ0kdDAxODQ5NDE4OTEwAl8yBANpbnYDCQBmAgUGY2hhbmdlAAAJARdyZXBsZW5pc2hPbmVUb2tlbkJ5VHlwZQQFCHBvb2xBZGRyBQVwVHlwZQUGY2hhbmdlBQhjaGFuZ2VJZAUDbmlsAwkAAAIFA2ludgUDaW52BA5scEJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQRMUElkBAt0b3RhbFN0YWtlZAkAZQIFDmxwQmFsYW5jZUFmdGVyBQ9scEJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBAVpbnZMUAkBB3N0YWtlTFAEBQRwb29sBQVwVHlwZQUETFBJZAURdXNlclNoYXJlRm9yU3Rha2UDCQAAAgUFaW52TFAFBWludkxQCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARByZXBsZW5pc2hFbnRyaWVzCARwb29sBHVzZXIMc3Rha2VkQW1vdW50DWF4bHlGZWVBbW91bnQGcG9zTnVtB3NoYXJlSWQEdHlwZQh3aXRoTG9hbgQLdG90YWxBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wED3RvdGFsQW1vdW50TG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBA0kdDAxOTc2ODIwMDA2AwUId2l0aExvYW4JAJQKAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkAZAIFD3RvdGFsQW1vdW50TG9hbgUMc3Rha2VkQW1vdW50CQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgUPdG90YWxBbW91bnRMb2FuBA9jdXJQb29sSW50ZXJlc3QIBQ0kdDAxOTc2ODIwMDA2Al8xBBN0b3RhbFN0YWtlZFdpdGhMb2FuCAUNJHQwMTk3NjgyMDAwNgJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBkAgULdG90YWxBbW91bnQFDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgUTdG90YWxTdGFrZWRXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBQ1rVXNlclBvc2l0aW9uBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUVa1VzZXJQb3NpdGlvbkludGVyZXN0BQ9jdXJQb29sSW50ZXJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FBnBvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUNYXhseUZlZUFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBDmV4Y2hhbmdlS2VlcGVyCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgRzd2FwCQDMCAIFCWFtb3VudHNJbgkAzAgCBQlhZGRyZXNzZXMJAMwIAgUPYXNzZXRzVG9SZWNlaXZlCQDMCAIFC2VzdFJlY2VpdmVkCQDMCAIFEXNsaXBwYWdlVG9sZXJhbmNlCQDMCAIFC21pblJlY2VpdmVkCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVB1enpsZQYHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgpwdXp6bGVTd2FwCQDMCAIFCXJvdXRlc1N0cgkAzAgCBQxtaW5Ub1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlU3dvcEZpCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldApleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0Agpzd29wZmlTd2FwCQDMCAIFCmV4Y2hhbmdlcnMJAMwIAgUOZXhjaGFuZ2Vyc1R5cGUJAMwIAgUFYXJnczEJAMwIAgUFYXJnczIJAMwIAgURcm91dGluZ0Fzc2V0c0tleXMJAMwIAgUSbWluQW1vdW50VG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQpjYXBpdGFsaXplBARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMjIzNTcyMjQyMwkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDAyMjM1NzIyNDIzAl8xBANCSWQIBQ0kdDAyMjM1NzIyNDIzAl8yBARiYWxBCAUNJHQwMjIzNTcyMjQyMwJfMwQEYmFsQggFDSR0MDIyMzU3MjI0MjMCXzQEB3NoYXJlSWQIBQ0kdDAyMjM1NzIyNDIzAl81AwMJAQIhPQIFB3Rva2VuSWQFA0FJZAkBAiE9AgUHdG9rZW5JZAUDQklkBwkAAgECC1dyb25nIGFzc2V0BA0kdDAyMjUwODIyNTg4AwkAAAIFB3Rva2VuSWQFA0FJZAkAlAoCBQt0b2tlbkFtb3VudAAACQCUCgIAAAULdG9rZW5BbW91bnQEBHBtdEEIBQ0kdDAyMjUwODIyNTg4Al8xBARwbXRCCAUNJHQwMjI1MDgyMjU4OAJfMgQNJHQwMjI1OTEyMjY5NQkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDAyMjU5MTIyNjk1Al8xBAJuZggFDSR0MDIyNTkxMjI2OTUCXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBAtsb2FuUGVyY2VudAkAawMFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUGU0NBTEU4BRB0b3RhbFNoYXJlQW1vdW50BApzdGFrZWRMb2FuCQBrAwUMc3Rha2VkQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BAxzdGFrZWROb0xvYW4JAGUCBQxzdGFrZWRBbW91bnQFCnN0YWtlZExvYW4ED25ld0ludGVyZXN0TG9hbgMJAGYCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAZAIFE2N1clBvb2xJbnRlcmVzdExvYW4JAGsDBQpzdGFrZWRMb2FuBQdTQ0FMRTEwBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAQRbmV3SW50ZXJlc3ROb0xvYW4DCQBmAgkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAACQBkAgUVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuBQdTQ0FMRTEwCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAEC2F4bHlGZWVMb2FuCQBrAwUKc3Rha2VkTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQxDQVBfRkVFX0xPQU4FCkZFRV9TQ0FMRTYEDWF4bHlGZWVOb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUPQ0FQX0ZFRV9OT19MT0FOBQpGRUVfU0NBTEU2BAdheGx5RmVlCQEJdW5zdGFrZUxQBAUEcG9vbAUFcFR5cGUFB3NoYXJlSWQJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgMJAAACBQdheGx5RmVlBQdheGx5RmVlCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4FD25ld0ludGVyZXN0TG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBRFuZXdJbnRlcmVzdE5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkAZAIFEHRvdGFsU2hhcmVBbW91bnQFDHN0YWtlZEFtb3VudAUHYXhseUZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGQCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FCnN0YWtlZExvYW4FC2F4bHlGZWVMb2FuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94CQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4JANkEAQUHc2hhcmVJZAUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgESd2l0aGRyYXdBbW91bnRDYWxjBARwb29sD3VzZXJDYW5XaXRoZHJhdwRkZWJ0C2JvcnJvd0Fzc2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAyNDQ2MzI0NTM5CQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUECGFzc2V0SWRBCAUNJHQwMjQ0NjMyNDUzOQJfMQQIYXNzZXRJZEIIBQ0kdDAyNDQ2MzI0NTM5Al8yBARiYWxBCAUNJHQwMjQ0NjMyNDUzOQJfMwQEYmFsQggFDSR0MDI0NDYzMjQ1MzkCXzQEB3NoYXJlSWQIBQ0kdDAyNDQ2MzI0NTM5Al81BAtjQmFsQUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEDCQAAAgULY0JhbEFCZWZvcmUFC2NCYWxBQmVmb3JlBAtjQmFsQkJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULY0JhbEJCZWZvcmUFC2NCYWxCQmVmb3JlBANpbnYDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAgh3aXRoZHJhdwkAzAgCCQDMCAIJAKQDAQUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAUDbmlsBANpbnYJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3AwkAAAIFA2ludgUDaW52CQD8BwQFCHBvb2xBZGRyAgNnZXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgQNJHQwMjUxMDIyNTE5MQkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDI1MTAyMjUxOTECXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyNTEwMjI1MTkxAl8yBA0kdDAyNTE5NDI1ODkwAwkAZgIFBGRlYnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QQcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRBAwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEIJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRCBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEIAAAQFZXhJbnYDCQBmAgUNYW1vdW50VG9HZXRFeAAACQEQZXhjaGFuZ2VEaXJlY3RseQgFBXBUeXBlBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFDWFtb3VudFRvR2V0RXgFC2JvcnJvd0Fzc2V0AAADCQAAAgUFZXhJbnYFBWV4SW52BA9jQmFsQUFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBA9jQmFsQkFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCCQCUCgIJAGUCBQ9jQmFsQUFmdGVyUmVwYXkFC2NCYWxBQmVmb3JlCQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQ10b2tlbnNBbW91bnRBBQ10b2tlbnNBbW91bnRCBA10b1VzZXJBbW91bnRBCAUNJHQwMjUxOTQyNTg5MAJfMQQNdG9Vc2VyQW1vdW50QggFDSR0MDI1MTk0MjU4OTACXzIJAJkKBwUNdG9Vc2VyQW1vdW50QQUIYXNzZXRJZEEFDXRvVXNlckFtb3VudEIFCGFzc2V0SWRCBQpjQmFsQUFmdGVyBQpjQmFsQkFmdGVyBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBHVzZXIEcG9vbAVwb3NJZAhib3Jyb3dlZAQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMdXNlckludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQMcG9vbEludGVyZXN0AwUIYm9ycm93ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgkAZAIFB3BBbW91bnQJAGsDBQdwQW1vdW50CQBlAgUMcG9vbEludGVyZXN0BQx1c2VySW50ZXJlc3QFB1NDQUxFMTABDndpdGhkcmF3VG9Vc2VyBAR1c2VyBHBvb2wFcG9zSWQIc3RvcExvc3MEB3BBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDHVzZXJJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QEDGJvcnJvd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBXBvc0lkCQBmAgUMYm9ycm93QW1vdW50AAAEDnBvb2xUb3RhbFNoYXJlCQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBAh1c2VyQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHVzZXIEC2JvcnJvd0Fzc2V0CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkAgAEBGRlYnQDCQBmAgUMYm9ycm93QW1vdW50AAAKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAAABA0kdDAyNzM4OTI3NTQyCQESd2l0aGRyYXdBbW91bnRDYWxjBAUEcG9vbAUPdXNlckNhbldpdGhkcmF3BQRkZWJ0BQtib3Jyb3dBc3NldAMJAAACBQ0kdDAyNzM4OTI3NTQyBQ0kdDAyNzM4OTI3NTQyBAdzaGFyZUlkCAUNJHQwMjczODkyNzU0MgJfNwQKY0JhbEJBZnRlcggFDSR0MDI3Mzg5Mjc1NDICXzYECmNCYWxBQWZ0ZXIIBQ0kdDAyNzM4OTI3NTQyAl81BAhhc3NldElkQggFDSR0MDI3Mzg5Mjc1NDICXzQEDXRvVXNlckFtb3VudEIIBQ0kdDAyNzM4OTI3NTQyAl8zBAhhc3NldElkQQgFDSR0MDI3Mzg5Mjc1NDICXzIEDXRvVXNlckFtb3VudEEIBQ0kdDAyNzM4OTI3NTQyAl8xBAtjbG9zZURidEludgMJAGYCBQRkZWJ0AAAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIIcmVwYXlGb3IJAMwIAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFC2JvcnJvd0Fzc2V0BQRkZWJ0BQNuaWwAAAMJAAACBQtjbG9zZURidEludgULY2xvc2VEYnRJbnYJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIFDnBvb2xUb3RhbFNoYXJlBQ91c2VyQ2FuV2l0aGRyYXcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b1VzZXJBbW91bnRCCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQhhc3NldElkQQUIYXNzZXRJZEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHBhcnNlUmVxdWVzdAEJcmVxdWVzdElkBAdyZXF1ZXN0CQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAkArAICAhNObyByZXF1ZXN0IHdpdGggaWQgBQlyZXF1ZXN0SWQCASwEBHVzZXIJAJEDAgUHcmVxdWVzdAAABARwb29sCQCRAwIFB3JlcXVlc3QAAQQEcG10QQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QAAgQDQUlkCQCRAwIFB3JlcXVlc3QAAwQEcG10QgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABAQDQklkCQCRAwIFB3JlcXVlc3QABQQEYmFsQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABgQEYmFsQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABwQHc2hhcmVJZAkAkQMCBQdyZXF1ZXN0AAgEB2J3QXNzZXQJAJEDAgUHcmVxdWVzdAAJBAhid0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QACgkAnQoLBQR1c2VyBQRwb29sBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAUHYndBc3NldAUIYndBbW91bnQBEGNhbGNCb3Jyb3dBbW91bnQGBHBtdEEEcG10QgNhSWQDYklkCGxldmVyYWdlCGJvcnJvd0lkBAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDYUlkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFA2JJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEBmRlY1ByQQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2FJZAAAAAAFBERPV04EBmRlY1ByQgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2JJZAAAAAAFBERPV04EDHBheWRJbkRvbGxhcgkAZAIJAGsDBQdkUHJpY2VBBQRwbXRBBQZkZWNQckEJAGsDBQdkUHJpY2VCBQRwbXRCBQZkZWNQckIEDSR0MDI5MjI4MjkzMjUDCQAAAgUIYm9ycm93SWQFA2FJZAkAlAoCBQdkUHJpY2VBBQZkZWNQckEJAJQKAgUHZFByaWNlQgUGZGVjUHJCBAtib3Jyb3dQcmljZQgFDSR0MDI5MjI4MjkzMjUCXzEEC2JvcnJvd0RlY1ByCAUNJHQwMjkyMjgyOTMyNQJfMgkAawMJAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQFC2JvcnJvd0RlY1ByBQtib3Jyb3dQcmljZRABaQEXY2FsY1ByaWNlSW1wYWN0RVZBTE9OTFkFBHBvb2wIbGV2ZXJhZ2UIYm9ycm93SWQEcG10QQRwbXRCAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDI5NzQzMjk4MzMJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMjk3NDMyOTgzMwJfMQQDQklkCAUNJHQwMjk3NDMyOTgzMwJfMgQEYmFsQQgFDSR0MDI5NzQzMjk4MzMCXzMEBGJhbEIIBQ0kdDAyOTc0MzI5ODMzAl80BAdzaGFyZUlkCAUNJHQwMjk3NDMyOTgzMwJfNQQMYm9ycm93QW1vdW50AwkAZgIFCGxldmVyYWdlAGQJARBjYWxjQm9ycm93QW1vdW50BgUEcG10QQUEcG10QgUDQUlkBQNCSWQFCGxldmVyYWdlBQhib3Jyb3dJZAAABA0kdDAyOTk2ODMwMDc1AwkAAAIFCGJvcnJvd0lkBQNBSWQJAJQKAgkAZAIFBHBtdEEFDGJvcnJvd0Ftb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QgUMYm9ycm93QW1vdW50BAZwYXlJbkEIBQ0kdDAyOTk2ODMwMDc1Al8xBAZwYXlJbkIIBQ0kdDAyOTk2ODMwMDc1Al8yBA0kdDAzMDA3ODMwMTcxCQETY2FsY1JlcGxlbmlzaExQVmlydAgFBXBUeXBlBQRwb29sBQZwYXlJbkEFA0FJZAUGcGF5SW5CBQNCSWQFBGJhbEEFBGJhbEIECGxwQW1vdW50CAUNJHQwMzAwNzgzMDE3MQJfMQQEbG9zcwgFDSR0MDMwMDc4MzAxNzECXzIECWltcGFjdE1vZAMJAGYCAAAFBGxvc3MJAGgCBQRsb3NzAP///////////wEFBGxvc3MJAJQKAgUDbmlsCQDMCAIFCWltcGFjdE1vZAUDbmlsAWkBGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZAQdzaGFyZUlkBAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkCQCUCgIFA25pbAULc2hhcmVQcmljZXMBaQEiZ2V0VXNlclBvc2l0aW9uU2hhcmVBbW91bnRSRUFET05MWQIEdXNlcgZwb3NOdW0EBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sAhBVbmtub3duIHBvc2l0aW9uBAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQZwb3NOdW0JAGYCBQxib3Jyb3dBbW91bnQAAAkAlAoCBQNuaWwFD3VzZXJDYW5XaXRoZHJhdwFpASBnZXRVc2VyUG9zaXRpb25JbkRvbGxhcnNSRUFET05MWQMEdXNlcgVwb29scwZwb3NOdW0KAQd1c2VyUG9zAgFhBHBvb2wEDSR0MDMwOTg0MzEwMTgFAWEECHRvdGFsUG9zCAUNJHQwMzA5ODQzMTAxOAJfMQQHcG9zRGVidAgFDSR0MDMwOTg0MzEwMTgCXzIEBWluZGV4CAUNJHQwMzA5ODQzMTAxOAJfMwQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDMxMTEwMzEyMDAJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzExMTAzMTIwMAJfMQQDQklkCAUNJHQwMzExMTAzMTIwMAJfMgQEYmFsQQgFDSR0MDMxMTEwMzEyMDACXzMEBGJhbEIIBQ0kdDAzMTExMDMxMjAwAl80BAdzaGFyZUlkCAUNJHQwMzExMTAzMTIwMAJfNQQMYm9ycm93QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wJAJEDAgUGcG9zTnVtBQVpbmRleAkAZgIFDGJvcnJvd0Ftb3VudAAABAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkBApkZWNQclNoYXJlCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHc2hhcmVJZAAAAAAFBERPV04EBnNoYXJlRAkAawMFD3VzZXJDYW5XaXRoZHJhdwULc2hhcmVQcmljZXMFCmRlY1ByU2hhcmUDCQAAAgUMYm9y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BAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA0JJZAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQAAAUDQklkAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0JJZAkAAgECDVdyb25nIHBheW1lbnQJAAIBAhxPbmUgb3IgdHdvIHBheW1lbnRzIGV4cGVjdGVkBARwbXRBCAUNJHQwMzI3MTQzMzM1MQJfMQQJcG10QXNzZXRBCAUNJHQwMzI3MTQzMzM1MQJfMgQEcG10QggFDSR0MDMyNzE0MzMzNTECXzMECXBtdEFzc2V0QggFDSR0MDMyNzE0MzMzNTECXzQECW5ld1Bvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEJAKUIAQgFAWkGY2FsbGVyAwkAZgIFCGxldmVyYWdlAGQEDGJvcnJvd0Ftb3VudAkBEGNhbGNCb3Jyb3dBbW91bnQGBQRwbXRBBQRwbXRCBQlwbXRBc3NldEEFCXBtdEFzc2V0QgUIbGV2ZXJhZ2UFCGJvcnJvd0lkBAdyZXF1ZXN0CQC5CQIJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUEcG9vbAkAzAgCCQCkAwEFBHBtdEEJAMwIAgUJcG10QXNzZXRBCQDMCAIJAKQDAQUEcG10QgkAzAgCBQlwbXRBc3NldEIJAMwIAgkApAMBBQRiYWxBCQDMCAIJAKQDAQUEYmFsQgkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIJAKQDAQUMYm9ycm93QW1vdW50BQNuaWwCASwEDG5ld1JlcXVlc3RJZAoAAUAJAPwHBAUEdGhpcwIQY3JlYXRlTmV3UmVxdWVzdAkAzAgCBQdyZXF1ZXN0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUMbmV3UmVxdWVzdElkBQxuZXdSZXF1ZXN0SWQEBGFyZ3MJAMwIAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFCW5ld1Bvc051bQkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIFDGJvcnJvd0Ftb3VudAkAzAgCCQClCAEFBHRoaXMJAMwIAgIRcmVwbGVuaXNoRnJvbUxhbmQJAMwIAgkApAMBCQETdmFsdWVPckVycm9yTWVzc2FnZQIFDG5ld1JlcXVlc3RJZAIYQ2FuJ3QgY3JlYXRlIG5ldyByZXF1ZXN0BQNuaWwEA2ludgkA/QcECQEOZ2V0TGVuZFNydkFkZHIAAg1mbGFzaFBvc2l0aW9uBQRhcmdzBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMzQyNzkzNDM5MQkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQtOT19MT0FOX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQECnVzZXJTdGFrZWQIBQ0kdDAzNDI3OTM0MzkxAl8xBAdheGx5RmVlCAUNJHQwMzQyNzkzNDM5MQJfMgkAzggCCQEQcmVwbGVuaXNoRW50cmllcwgFBHBvb2wJAKUIAQgFAWkGY2FsbGVyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQluZXdQb3NOdW0FB3NoYXJlSWQFBXBUeXBlBwkBDmdldEN1cnNFbnRyaWVzAwUDQUlkBQNCSWQFB3NoYXJlSWQBaQEId2l0aGRyYXcCBHBvb2wFcG9zSWQJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBwFpARRjcmVhdGVVcGRhdGVTdG9wTG9zcwQFcG9zSWQGcG9vbElkB2Fzc2V0SWQFcHJpY2UEEHRva2VuT3JhY2xlUHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBnBvb2xJZAIBXwkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAAIBAhpUaGVyZSBhcmUgbm8gdXNlciBwb3NpdGlvbgMJAGcCAAAFBXByaWNlCQACAQIcUHJpY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCBQVwcmljZQUQdG9rZW5PcmFjbGVQcmljZQkAAgECK1ByaWNlIG11c3QgYmUgbGVzcyB0aGFuIGN1cnJlbnQgdG9rZW4gcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUFcHJpY2UFA25pbAFpAQ5kZWxldGVTdG9wTG9zcwMFcG9zSWQGcG9vbElkB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUDbmlsAWkBEGNyZWF0ZU5ld1JlcXVlc3QBBnBhcmFtcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAxuZXdSZXF1ZXN0SWQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtSZXF1ZXN0SXRlcgAAAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQUMbmV3UmVxdWVzdElkBQprUmVxdWVzdElkBQZwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtSZXF1ZXN0SXRlcgUMbmV3UmVxdWVzdElkBQNuaWwFDG5ld1JlcXVlc3RJZAFpARFyZXBsZW5pc2hGcm9tTGFuZAEJcmVxdWVzdElkCQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEDSR0MDM2MTQ0MzYyNDgJAQxwYXJzZVJlcXVlc3QBBQlyZXF1ZXN0SWQEBHVzZXIIBQ0kdDAzNjE0NDM2MjQ4Al8xBARwb29sCAUNJHQwMzYxNDQzNjI0OAJfMgQEcG10QQgFDSR0MDM2MTQ0MzYyNDgCXzMEA0FJZAgFDSR0MDM2MTQ0MzYyNDgCXzQEBHBtdEIIBQ0kdDAzNjE0NDM2MjQ4Al81BANCSWQIBQ0kdDAzNjE0NDM2MjQ4Al82BARiYWxBCAUNJHQwMzYxNDQzNjI0OAJfNwQEYmFsQggFDSR0MDM2MTQ0MzYyNDgCXzgEB3NoYXJlSWQIBQ0kdDAzNjE0NDM2MjQ4Al85BAdid0Fzc2V0CAUNJHQwMzYxNDQzNjI0OANfMTAECGJ3QW1vdW50CAUNJHQwMzYxNDQzNjI0OANfMTEDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhJXcm9uZyBwYXltZW50IHNpemUDAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYndBc3NldAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQhid0Ftb3VudAkAAgECDVdyb25nIHBheW1lbnQEDSR0MDM2NDM4MzY1NjIDCQAAAgUDQUlkBQdid0Fzc2V0CQCUCgIJAGQCBQRwbXRBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB3BtdEFsbEEIBQ0kdDAzNjQzODM2NTYyAl8xBAdwbXRBbGxCCAUNJHQwMzY0MzgzNjU2MgJfMgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDM2NjQ0MzY3NTMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUITE9BTl9GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzY2NDQzNjc1MwJfMQQHYXhseUZlZQgFDSR0MDM2NjQ0MzY3NTMCXzIEBnBvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEFBHVzZXIEDWJvcnJvd0VudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQFCGJ3QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUSa1VzZXJCb3Jyb3dBc3NldElkBQdid0Fzc2V0BQNuaWwEB2VudHJpZXMJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAUEdXNlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUGcG9zTnVtBQdzaGFyZUlkBQVwVHlwZQYJAJQKAgkAzQgCCQDOCAIJAM4IAgUHZW50cmllcwkBDmdldEN1cnNFbnRyaWVzAwUDQUlkBQNCSWQFB3NoYXJlSWQFDWJvcnJvd0VudHJpZXMJAQtEZWxldGVFbnRyeQEJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkBQp1c2VyU3Rha2VkAWkBCWxpcXVpZGF0ZQMEdXNlcgVwb3NJZA9saXF1aWRhdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQppc0xhbmRDYWxsAQUBaQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBRFrVXNlclBvc2l0aW9uUG9vbAILbm8gcG9zaXRpb24EBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzNzUzMjM3NjIyCQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDM3NTMyMzc2MjICXzEEA0JJZAgFDSR0MDM3NTMyMzc2MjICXzIEBGJhbEEIBQ0kdDAzNzUzMjM3NjIyAl8zBARiYWxCCAUNJHQwMzc1MzIzNzYyMgJfNAQHc2hhcmVJZAgFDSR0MDM3NTMyMzc2MjICXzUEBmFtb3VudAkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ9saXF1aWRhdGVBbW91bnQEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAAAwkAAAIFDGJvcnJvd0Ftb3VudAAACQACAQIrWW91IGNhbid0IGxpcXVpZGF0ZSBwb3NpdGlvbiB3aXRob3V0IGJvcnJvdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAGUCBQ91c2VyQ2FuV2l0aGRyYXcFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBaQEIc3RvcExvc3MEBHVzZXIFcG9zSWQEcG9vbAdhc3NldElkCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBBB0b2tlbk9yYWNsZVByaWNlCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUHYXNzZXRJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzEDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDNCAIJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBXBvc0lkAgFfBQRwb29sAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzAWkBEmNhcGl0YWxpemVFeEtlZXBlcgwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDM5NDA3Mzk2MDEDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDAzOTQwNzM5NjAxAl8xBAxjbGFpbWVkQXNzZXQIBQ0kdDAzOTQwNzM5NjAxAl8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZUtlZXBlcgoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlhbW91bnRzSW4FCWFkZHJlc3NlcwUPYXNzZXRzVG9SZWNlaXZlBQtlc3RSZWNlaXZlZAURc2xpcHBhZ2VUb2xlcmFuY2UFC21pblJlY2VpdmVkBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFB1enpsZQgEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQNJHQwNDAyODY0MDQ4MAMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDQwMjg2NDA0ODACXzEEDGNsYWltZWRBc3NldAgFDSR0MDQwMjg2NDA0ODACXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlUHV6emxlBgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCXJvdXRlc1N0cgUMbWluVG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFN3b3BGaQwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCmV4Y2hhbmdlcnMOZXhjaGFuZ2Vyc1R5cGUFYXJnczEFYXJnczIRcm91dGluZ0Fzc2V0c0tleXMSbWluQW1vdW50VG9SZWNlaXZlB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDQxMjMxNDE0MjUDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MTIzMTQxNDI1Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MTIzMTQxNDI1Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVN3b3BGaQoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQpleGNoYW5nZXJzBQ5leGNoYW5nZXJzVHlwZQUFYXJnczEFBWFyZ3MyBRFyb3V0aW5nQXNzZXRzS2V5cwUSbWluQW1vdW50VG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBC2luaXROZXdQb29sCAR0eXBlCHBvb2xBZGRyC2luRmVlTm9Mb2FuCWluRmVlTG9hbgxjYXBGZWVOb0xvYW4OY2FwRmVlV2l0aExvYW4Rc3RvcGxvc3NGZWVOb0xvYW4Tc3RvcGxvc3NGZWVXaXRoTG9hbgkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMDCQECIT0CBQR0eXBlBQdTRl9QT09MCQECIT0CBQR0eXBlBQdXWF9QT09MBwkAAgECCldyb25nIHR5cGUEDSR0MDQyMTQ2NDIyNDAJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQhwb29sQWRkcgUEdHlwZQQDYUlkCAUNJHQwNDIxNDY0MjI0MAJfMQQDYklkCAUNJHQwNDIxNDY0MjI0MAJfMgQEYUJhbAgFDSR0MDQyMTQ2NDIyNDACXzMEBGJCYWwIBQ0kdDA0MjE0NjQyMjQwAl80BAdzaGFyZUlkCAUNJHQwNDIxNDY0MjI0MAJfNQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuBQtpbkZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUSa0F4bHlJbkZlZVdpdGhMb2FuBQlpbkZlZUxvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtBeGx5Tm9Mb2FuQ2FwRmVlBQxjYXBGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tBeGx5V2l0aExvYW5DYXBGZWUFDmNhcEZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRZrQXhseVN0b3BMb3NzTm9Mb2FuRmVlBRFzdG9wbG9zc0ZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUUa0F4bHlTdG9wTG9zc0xvYW5GZWUFE3N0b3Bsb3NzRmVlV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtQb29sSW50ZXJlc3RMb2FuAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tQb29sSW50ZXJlc3ROb0xvYW4AAAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBWtQb29sBQhwb29sQWRkcgUEdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wFCHBvb2xBZGRyBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5RIzEUQ==", "height": 2624965, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GSvPoAkKTsZ4JQwsY8qNLXYDedvh4rrdrLeZCqbYiYpp Next: 8EyLgHdrs3HwReaftE8W4z247DBBXvAfVHo3s6k8FjgU Diff:
OldNewDifferences
9191
9292 let S = "lend_service_addr"
9393
94-let T = "price_oracle"
94+let T = "admin_call_pub_key"
9595
96-let U = "exchange_contract"
96+let U = "price_oracle"
9797
98-let V = "wx_swap_contract"
98+let V = "exchange_contract"
9999
100-let W = Address(fromBase58String(valueOrErrorMessage(getString(this, Q), "No axly moneyBox address")))
100+let W = "wx_swap_contract"
101101
102-let X = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "No exchange contract address")))
102+let X = Address(fromBase58String(valueOrErrorMessage(getString(this, Q), "No axly moneyBox address")))
103103
104-let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No price oracle address")))
104+let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No exchange contract address")))
105105
106-let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No wx swap address")))
106+let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "No price oracle address")))
107107
108-let aa = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
108+let aa = Address(fromBase58String(valueOrErrorMessage(getString(this, W), "No wx swap address")))
109109
110-let ab = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
110+let ab = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
111111
112-func ac (ad) = if ((ad.caller == this))
112+let ac = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
113+
114+func ad () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get lend service addr")))
115+
116+
117+func ae () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, T), "Can't get lend service addr")))
118+
119+
120+func af (ag) = if ((ag.caller == ae()))
121+ then unit
122+ else throw("Only admin can call this function")
123+
124+
125+func ah (ag) = if ((ag.caller == this))
113126 then unit
114127 else throw("Only contract itself can call this function")
115128
116129
117-func ae (af) = {
118- let ag = af
119- if ($isInstanceOf(ag, "ByteVector"))
130+func ai (ag) = if ((ag.caller == ad()))
131+ then unit
132+ else throw("Only land contract can call this function")
133+
134+
135+func aj (ak) = {
136+ let al = ak
137+ if ($isInstanceOf(al, "ByteVector"))
120138 then {
121- let ah = ag
122- assetBalance(this, ah)
139+ let am = al
140+ assetBalance(this, am)
123141 }
124- else if ($isInstanceOf(ag, "Unit"))
142+ else if ($isInstanceOf(al, "Unit"))
125143 then {
126- let ai = ag
144+ let an = al
127145 wavesBalance(this).available
128146 }
129147 else throw("Match error")
130148 }
131149
132150
133-func aj (ak) = $Tuple5(valueOrErrorMessage(getString(ak, o), "Can't get pool A asset id"), valueOrErrorMessage(getString(ak, p), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(ak, m), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(ak, n), "Can't get pool B asset balance"), valueOrErrorMessage(getString(ak, q), "Can't get share asset id"))
151+func ao (ap) = $Tuple5(valueOrErrorMessage(getString(ap, o), "Can't get pool A asset id"), valueOrErrorMessage(getString(ap, p), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(ap, m), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(ap, n), "Can't get pool B asset balance"), valueOrErrorMessage(getString(ap, q), "Can't get share asset id"))
134152
135153
136-func al (ak) = {
137- let am = {
138- let an = invoke(ak, "getPoolConfigWrapperREADONLY", nil, nil)
139- if ($isInstanceOf(an, "List[Any]"))
140- then an
141- else throw(($getType(an) + " couldn't be cast to List[Any]"))
154+func aq (ap) = {
155+ let ar = {
156+ let as = invoke(ap, "getPoolConfigWrapperREADONLY", nil, nil)
157+ if ($isInstanceOf(as, "List[Any]"))
158+ then as
159+ else throw(($getType(as) + " couldn't be cast to List[Any]"))
142160 }
143- if ((am == am))
161+ if ((ar == ar))
144162 then {
145- let ao = valueOrErrorMessage({
146- let an = am[4]
147- if ($isInstanceOf(an, "String"))
148- then an
163+ let at = valueOrErrorMessage({
164+ let as = ar[4]
165+ if ($isInstanceOf(as, "String"))
166+ then as
149167 else unit
150168 }, "Can't get pool A asset id")
151- let ap = valueOrErrorMessage({
152- let an = am[5]
153- if ($isInstanceOf(an, "String"))
154- then an
169+ let au = valueOrErrorMessage({
170+ let as = ar[5]
171+ if ($isInstanceOf(as, "String"))
172+ then as
155173 else unit
156174 }, "Can't get pool B asset id")
157- let aq = valueOrErrorMessage({
158- let an = am[3]
159- if ($isInstanceOf(an, "String"))
160- then an
175+ let av = valueOrErrorMessage({
176+ let as = ar[3]
177+ if ($isInstanceOf(as, "String"))
178+ then as
161179 else unit
162180 }, "Can't get pool LP asset id")
163- let ar = {
164- let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ao], nil)
165- if ($isInstanceOf(an, "Int"))
166- then an
167- else throw(($getType(an) + " couldn't be cast to Int"))
181+ let aw = {
182+ let as = invoke(ap, "getAccBalanceWrapperREADONLY", [at], nil)
183+ if ($isInstanceOf(as, "Int"))
184+ then as
185+ else throw(($getType(as) + " couldn't be cast to Int"))
168186 }
169- if ((ar == ar))
187+ if ((aw == aw))
170188 then {
171- let as = {
172- let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ap], nil)
173- if ($isInstanceOf(an, "Int"))
174- then an
175- else throw(($getType(an) + " couldn't be cast to Int"))
189+ let ax = {
190+ let as = invoke(ap, "getAccBalanceWrapperREADONLY", [au], nil)
191+ if ($isInstanceOf(as, "Int"))
192+ then as
193+ else throw(($getType(as) + " couldn't be cast to Int"))
176194 }
177- if ((as == as))
178- then $Tuple5(ao, ap, ar, as, aq)
195+ if ((ax == ax))
196+ then $Tuple5(at, au, aw, ax, av)
179197 else throw("Strict value is not equal to itself.")
180198 }
181199 else throw("Strict value is not equal to itself.")
184202 }
185203
186204
187-func at (ak,au) = if ((au == a))
188- then aj(ak)
189- else if ((au == b))
190- then al(ak)
205+func ay (ap,az) = if ((az == a))
206+ then ao(ap)
207+ else if ((az == b))
208+ then aq(ap)
191209 else throw("Wrong pool type")
192210
193211
194-func av (ak,au,aq) = if ((au == a))
195- then valueOrErrorMessage(getInteger(ak, r), "Can't get share asset supply")
196- else if ((au == b))
197- then valueOrErrorMessage(assetInfo(fromBase58String(aq)), "Wrong ShareId").quantity
212+func aA (ap,az,av) = if ((az == a))
213+ then valueOrErrorMessage(getInteger(ap, r), "Can't get share asset supply")
214+ else if ((az == b))
215+ then valueOrErrorMessage(assetInfo(fromBase58String(av)), "Wrong ShareId").quantity
198216 else throw("Wrong pool type")
199217
200218
201-func aw (ax) = valueOrElse(getInteger(this, (ax + z)), 0)
219+func aB (aC) = valueOrElse(getInteger(this, (aC + z)), 0)
202220
203221
204-func ay (ax) = valueOrElse(getInteger(this, (ax + A)), 0)
222+func aD (aC) = valueOrElse(getInteger(this, (aC + A)), 0)
205223
206224
207-func az (aA) = (valueOrElse(getInteger(this, (aA + x)), 0) + 1)
225+func aE (aF) = (valueOrElse(getInteger(this, (aF + x)), 0) + 1)
208226
209227
210-func aB (ax,aC) = if ((aC == d))
211- then getIntegerValue(this, (ax + G))
212- else if ((aC == c))
213- then getIntegerValue(this, (ax + F))
214- else if ((aC == g))
215- then getIntegerValue(this, (ax + E))
216- else if ((aC == h))
217- then getIntegerValue(this, (ax + D))
218- else if ((aC == i))
228+func aG (aC,aH) = if ((aH == d))
229+ then getIntegerValue(this, (aC + G))
230+ else if ((aH == c))
231+ then getIntegerValue(this, (aC + F))
232+ else if ((aH == g))
233+ then getIntegerValue(this, (aC + E))
234+ else if ((aH == h))
235+ then getIntegerValue(this, (aC + D))
236+ else if ((aH == i))
219237 then 0
220238 else throw("Wrong fee type")
221239
222240
223-func aD () = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get swopfi farming addr")))
241+func aI () = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get swopfi farming addr")))
224242
225243
226-func aE (ak) = {
227- let aF = Address(fromBase58String(valueOrErrorMessage(getString(ak, "%s__factoryContract"), "Can't get WX factory contract addr")))
228- let aG = split(valueOrErrorMessage(getString(aF, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
229- Address(fromBase58String(aG[1]))
244+func aJ (ap) = {
245+ let aK = Address(fromBase58String(valueOrErrorMessage(getString(ap, "%s__factoryContract"), "Can't get WX factory contract addr")))
246+ let aL = split(valueOrErrorMessage(getString(aK, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
247+ Address(fromBase58String(aL[1]))
230248 }
231249
232250
233-func aH () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get lend service addr")))
234-
235-
236-func aI (af) = {
237- let ag = af
238- if ($isInstanceOf(ag, "ByteVector"))
251+func aM (ak) = {
252+ let al = ak
253+ if ($isInstanceOf(al, "ByteVector"))
239254 then {
240- let ah = ag
241- toBase58String(ah)
255+ let am = al
256+ toBase58String(am)
242257 }
243- else if ($isInstanceOf(ag, "Unit"))
258+ else if ($isInstanceOf(al, "Unit"))
244259 then {
245- let ai = ag
260+ let an = al
246261 "WAVES"
247262 }
248263 else throw("Match error")
249264 }
250265
251266
252-func aJ (af) = if ((af == "WAVES"))
267+func aN (ak) = if ((ak == "WAVES"))
253268 then unit
254- else fromBase58String(af)
269+ else fromBase58String(ak)
255270
256271
257-func aK (af) = if ((af == "WAVES"))
272+func aO (ak) = if ((ak == "WAVES"))
258273 then 8
259274 else {
260- let ag = assetInfo(fromBase58String(af))
261- if ($isInstanceOf(ag, "Asset"))
275+ let al = assetInfo(fromBase58String(ak))
276+ if ($isInstanceOf(al, "Asset"))
262277 then {
263- let aL = ag
264- aL.decimals
278+ let aP = al
279+ aP.decimals
265280 }
266281 else throw("Can't find asset")
267282 }
268283
269284
270-func aM (af) = pow(10, 0, aK(af), 0, 0, DOWN)
285+func aQ (ak) = pow(10, 0, aO(ak), 0, 0, DOWN)
271286
272287
273-func aN (aO) = {
274- func aP (aQ,af) = {
275- let aR = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
276- if ($isInstanceOf(an, "(Int, Int)"))
277- then an
278- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
279- (aQ :+ aR)
288+func aR (aS) = {
289+ func aT (aU,ak) = {
290+ let aV = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
291+ if ($isInstanceOf(as, "(Int, Int)"))
292+ then as
293+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
294+ (aU :+ aV)
280295 }
281296
282- let aS = aO
283- let aT = size(aS)
284- let aU = nil
285- func aV (aW,aX) = if ((aX >= aT))
286- then aW
287- else aP(aW, aS[aX])
297+ let aW = aS
298+ let aX = size(aW)
299+ let aY = nil
300+ func aZ (ba,bb) = if ((bb >= aX))
301+ then ba
302+ else aT(ba, aW[bb])
288303
289- func aY (aW,aX) = if ((aX >= aT))
290- then aW
304+ func bc (ba,bb) = if ((bb >= aX))
305+ then ba
291306 else throw("List size exceeds 50")
292307
293- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 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)
308+ bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 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)
294309 }
295310
296311
297-func aZ (aq) = {
298- let ax = valueOrErrorMessage(getString(this, (aq + M)), "Can't find pool addr by share id")
299- let ak = Address(fromBase58String(ax))
300- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
301- let bb = at(ak, ba)
302- let ao = bb._1
303- let ap = bb._2
304- let bc = bb._3
305- let bd = bb._4
306- let be = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
307- if ($isInstanceOf(an, "(Int, Int)"))
308- then an
309- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
310- let bf = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
311- if ($isInstanceOf(an, "(Int, Int)"))
312- then an
313- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
314- let bg = av(ak, ba, aq)
315- let bh = pow(10, 0, aK(ao), 0, 0, DOWN)
316- let bi = pow(10, 0, aK(ap), 0, 0, DOWN)
317- let bj = pow(10, 0, aK(aq), 0, 0, DOWN)
318- let bk = (fraction(bc, be, bh) + fraction(bd, bf, bi))
319- fraction(bk, bj, bg)
312+func bd (av) = {
313+ let aC = valueOrErrorMessage(getString(this, (av + M)), "Can't find pool addr by share id")
314+ let ap = Address(fromBase58String(aC))
315+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
316+ let bf = ay(ap, be)
317+ let at = bf._1
318+ let au = bf._2
319+ let bg = bf._3
320+ let bh = bf._4
321+ let bi = ( let as = invoke(Z, "getTWAP60", [at, false], nil)
322+ if ($isInstanceOf(as, "(Int, Int)"))
323+ then as
324+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
325+ let bj = ( let as = invoke(Z, "getTWAP60", [au, false], nil)
326+ if ($isInstanceOf(as, "(Int, Int)"))
327+ then as
328+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
329+ let bk = aA(ap, be, av)
330+ let bl = pow(10, 0, aO(at), 0, 0, DOWN)
331+ let bm = pow(10, 0, aO(au), 0, 0, DOWN)
332+ let bn = pow(10, 0, aO(av), 0, 0, DOWN)
333+ let bo = (fraction(bg, bi, bl) + fraction(bh, bj, bm))
334+ fraction(bo, bn, bk)
320335 }
321336
322337
323-func bl (bm) = {
324- func aP (aQ,aq) = (aQ :+ aZ(aq))
338+func bp (bq) = {
339+ func aT (aU,av) = (aU :+ bd(av))
325340
326- let aS = bm
327- let aT = size(aS)
328- let aU = nil
329- func aV (aW,aX) = if ((aX >= aT))
330- then aW
331- else aP(aW, aS[aX])
341+ let aW = bq
342+ let aX = size(aW)
343+ let aY = nil
344+ func aZ (ba,bb) = if ((bb >= aX))
345+ then ba
346+ else aT(ba, aW[bb])
332347
333- func aY (aW,aX) = if ((aX >= aT))
334- then aW
348+ func bc (ba,bb) = if ((bb >= aX))
349+ then ba
335350 else throw("List size exceeds 20")
336351
337- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
352+ bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
338353 }
339354
340355
341-func bn (ao,ap,aq) = {
342- let bo = aN([ao, ap])
343- let bp = aZ(aq)
344- let bq = [toString(bo[0]), toString(bo[1]), toString(bp)]
345-[StringEntry(O, makeString(bq, ","))]
356+func br (at,au,av) = {
357+ let bs = aR([at, au])
358+ let bt = bd(av)
359+ let bu = [toString(bs[0]), toString(bs[1]), toString(bt)]
360+[StringEntry(O, makeString(bu, ","))]
346361 }
347362
348363
349-func br (ba,ak,bs,ao,bt,ap,ar,as) = {
350- let bu = if ((ba == a))
364+func bv (be,ap,bw,at,bx,au,aw,ax) = {
365+ let by = if ((be == a))
351366 then $Tuple2(nil, nil)
352367 else $Tuple2(split({
353- let an = invoke(ak, "evaluatePutByAmountAssetREADONLY", [bs], nil)
354- if ($isInstanceOf(an, "String"))
355- then an
356- else throw(($getType(an) + " couldn't be cast to String"))
368+ let as = invoke(ap, "evaluatePutByAmountAssetREADONLY", [bw], nil)
369+ if ($isInstanceOf(as, "String"))
370+ then as
371+ else throw(($getType(as) + " couldn't be cast to String"))
357372 }, "__"), split({
358- let an = invoke(ak, "evaluatePutByPriceAssetREADONLY", [bt], nil)
359- if ($isInstanceOf(an, "String"))
360- then an
361- else throw(($getType(an) + " couldn't be cast to String"))
373+ let as = invoke(ap, "evaluatePutByPriceAssetREADONLY", [bx], nil)
374+ if ($isInstanceOf(as, "String"))
375+ then as
376+ else throw(($getType(as) + " couldn't be cast to String"))
362377 }, "__"))
363- if ((bu == bu))
378+ if ((by == by))
364379 then {
365- let bv = bu._2
366- let bw = bu._1
367- let bx = if ((ba == a))
368- then $Tuple2(fraction(j, bs, ar), fraction(j, bt, as))
369- else $Tuple2(parseIntValue(bw[1]), parseIntValue(bv[1]))
370- let by = bx._1
371- let bz = bx._2
372- let bA = if ((bz > by))
380+ let bz = by._2
381+ let bA = by._1
382+ let bB = if ((be == a))
383+ then $Tuple2(fraction(j, bw, aw), fraction(j, bx, ax))
384+ else $Tuple2(parseIntValue(bA[1]), parseIntValue(bz[1]))
385+ let bC = bB._1
386+ let bD = bB._2
387+ let bE = if ((bD > bC))
373388 then {
374- let bB = if ((ba == a))
375- then fraction(as, by, j, CEILING)
376- else parseIntValue(bw[8])
377- $Tuple5(bs, bB, (bt - bB), ap, bz)
389+ let bF = if ((be == a))
390+ then fraction(ax, bC, j, CEILING)
391+ else parseIntValue(bA[8])
392+ $Tuple5(bw, bF, (bx - bF), au, bD)
378393 }
379394 else {
380- let bB = if ((ba == a))
381- then fraction(ar, bz, j, CEILING)
382- else parseIntValue(bv[7])
383- $Tuple5(bB, bt, (bs - bB), ao, by)
395+ let bF = if ((be == a))
396+ then fraction(aw, bD, j, CEILING)
397+ else parseIntValue(bz[7])
398+ $Tuple5(bF, bx, (bw - bF), at, bC)
384399 }
385- let bC = bA._1
386- let bD = bA._2
387- let bE = bA._3
388- let bF = bA._4
389- let bG = bA._5
390- $Tuple5(bC, bD, bE, bF, bG)
400+ let bG = bE._1
401+ let bH = bE._2
402+ let bI = bE._3
403+ let bJ = bE._4
404+ let bK = bE._5
405+ $Tuple5(bG, bH, bI, bJ, bK)
391406 }
392407 else throw("Strict value is not equal to itself.")
393408 }
394409
395410
396-func bH (ak,ba,bs,ao,bt,ap) = {
397- let bI = [AttachedPayment(aJ(ao), bs), AttachedPayment(aJ(ap), bt)]
398- if ((ba == a))
399- then invoke(ak, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bI)
400- else invoke(ak, "put", [1000000, false], bI)
411+func bL (ap,be,bw,at,bx,au) = {
412+ let bM = [AttachedPayment(aN(at), bw), AttachedPayment(aN(au), bx)]
413+ if ((be == a))
414+ then invoke(ap, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bM)
415+ else invoke(ap, "put", [1000000, false], bM)
401416 }
402417
403418
404-func bJ (ak,ba,bB,bK) = {
405- let bI = [AttachedPayment(aJ(bK), bB)]
406- if ((ba == a))
407- then invoke(ak, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bI)
408- else invoke(ak, "putOneTkn", [0, false], bI)
419+func bN (ap,be,bF,bO) = {
420+ let bM = [AttachedPayment(aN(bO), bF)]
421+ if ((be == a))
422+ then invoke(ap, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bM)
423+ else invoke(ap, "putOneTkn", [0, false], bM)
409424 }
410425
411426
412-func bL (ax,ba,aq,bM) = {
413- let bI = [AttachedPayment(fromBase58String(aq), bM)]
414- if ((ba == a))
415- then invoke(aD(), "lockShareTokens", [ax, 0], bI)
416- else invoke(aE(addressFromStringValue(ax)), "stake", nil, bI)
427+func bP (aC,be,av,bQ) = {
428+ let bM = [AttachedPayment(fromBase58String(av), bQ)]
429+ if ((be == a))
430+ then invoke(aI(), "lockShareTokens", [aC, 0], bM)
431+ else invoke(aJ(addressFromStringValue(aC)), "stake", nil, bM)
417432 }
418433
419434
420-func bN (ax,ba,aq,bM) = {
421- let bO = if ((ba == a))
422- then $Tuple3(aD(), "withdrawShareTokens", [ax, bM])
423- else if ((ba == b))
424- then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, bM])
435+func bR (aC,be,av,bQ) = {
436+ let bS = if ((be == a))
437+ then $Tuple3(aI(), "withdrawShareTokens", [aC, bQ])
438+ else if ((be == b))
439+ then $Tuple3(aJ(Address(fromBase58String(aC))), "unstake", [av, bQ])
425440 else throw("Wrong pool type")
426- let bP = bO._1
427- let bQ = bO._2
428- let bR = bO._3
429- let bS = invoke(bP, bQ, bR, nil)
430- if ((bS == bS))
431- then bM
441+ let bT = bS._1
442+ let bU = bS._2
443+ let bV = bS._3
444+ let bW = invoke(bT, bU, bV, nil)
445+ if ((bW == bW))
446+ then bQ
432447 else throw("Strict value is not equal to itself.")
433448 }
434449
435450
436-func bT (ax,bU,bV,ar,as,bW,bX) = {
437- let ak = Address(fromBase58String(ax))
438- let bY = 1000000
439- let bZ = getIntegerValue(ak, s)
440- let ca = fraction(bW, bY, (bY - bZ))
441- let cb = if ((bX == bU))
451+func bX (aC,bY,bZ,aw,ax,ca,cb) = {
452+ let ap = Address(fromBase58String(aC))
453+ let cc = 1000000
454+ let cd = getIntegerValue(ap, s)
455+ let ce = fraction(ca, cc, (cc - cd))
456+ let cf = if ((cb == bY))
442457 then {
443- let cc = fraction(ar, ca, (as - ca))
444- $Tuple2(cc, bV)
458+ let cg = fraction(aw, ce, (ax - ce))
459+ $Tuple2(cg, bZ)
445460 }
446461 else {
447- let cc = fraction(as, ca, (ar - ca))
448- $Tuple2(cc, bU)
462+ let cg = fraction(ax, ce, (aw - ce))
463+ $Tuple2(cg, bY)
449464 }
450- let cc = cb._1
451- let cd = cb._2
452- $Tuple2(cd, cc)
465+ let cg = cf._1
466+ let ch = cf._2
467+ $Tuple2(ch, cg)
453468 }
454469
455470
456-func ce (ax,bU,bV,ar,as,bW,bX) = {
457- let cf = getIntegerValue(Z, "%s__protocolFee")
458- let cg = getIntegerValue(Z, "%s__poolFee")
459- let ch = toBigInt(100000000)
460- let ci = if ((bX == bU))
471+func ci (aC,bY,bZ,aw,ax,ca,cb) = {
472+ let cj = getIntegerValue(aa, "%s__protocolFee")
473+ let ck = getIntegerValue(aa, "%s__poolFee")
474+ let cl = toBigInt(100000000)
475+ let cm = if ((cb == bY))
461476 then {
462- let cc = fraction(ar, bW, (as - bW))
463- $Tuple2(cc, bV)
477+ let cg = fraction(aw, ca, (ax - ca))
478+ $Tuple2(cg, bZ)
464479 }
465480 else {
466- let cc = fraction(as, bW, (ar - bW))
467- $Tuple2(cc, bU)
481+ let cg = fraction(ax, ca, (aw - ca))
482+ $Tuple2(cg, bY)
468483 }
469- let cc = ci._1
470- let cd = ci._2
471- let cj = toInt(fraction(toBigInt(cc), ch, (ch - toBigInt((cf + cg)))))
472- $Tuple2(cd, cj)
484+ let cg = cm._1
485+ let ch = cm._2
486+ let cn = toInt(fraction(toBigInt(cg), cl, (cl - toBigInt((cj + ck)))))
487+ $Tuple2(ch, cn)
473488 }
474489
475490
476-func ck (au,ax,bU,bV,ar,as,bW,bX) = if ((au == a))
491+func co (az,aC,bY,bZ,aw,ax,ca,cb) = if ((az == a))
477492 then {
478- let cl = bT(ax, bU, bV, ar, as, bW, bX)
479- let cd = cl._1
480- let cc = cl._2
481- invoke(addressFromStringValue(ax), "callFunction", ["exchange", ["1"]], [AttachedPayment(aJ(cd), cc)])
493+ let cp = bX(aC, bY, bZ, aw, ax, ca, cb)
494+ let ch = cp._1
495+ let cg = cp._2
496+ invoke(addressFromStringValue(aC), "callFunction", ["exchange", ["1"]], [AttachedPayment(aN(ch), cg)])
482497 }
483498 else {
484- let cm = ce(ax, bU, bV, ar, as, bW, bX)
485- let cd = cm._1
486- let cc = cm._2
487- invoke(Z, "swap", [1, bX, toString(this)], [AttachedPayment(aJ(cd), cc)])
499+ let cq = ci(aC, bY, bZ, aw, ax, ca, cb)
500+ let ch = cq._1
501+ let cg = cq._2
502+ invoke(aa, "swap", [1, cb, toString(this)], [AttachedPayment(aN(ch), cg)])
488503 }
489504
490505
491-func cn (ba,ax,bs,ao,bt,ap,ar,as) = {
492- let ak = addressFromStringValue(ax)
493- if ((ba == a))
506+func cr (be,aC,bw,at,bx,au,aw,ax) = {
507+ let ap = addressFromStringValue(aC)
508+ if ((be == a))
494509 then {
495- let bS = {
496- let an = invoke(ak, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bs), toString(bt), "0"]], nil)
497- if ($isInstanceOf(an, "List[Any]"))
498- then an
499- else throw(($getType(an) + " couldn't be cast to List[Any]"))
510+ let bW = {
511+ let as = invoke(ap, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bw), toString(bx), "0"]], nil)
512+ if ($isInstanceOf(as, "List[Any]"))
513+ then as
514+ else throw(($getType(as) + " couldn't be cast to List[Any]"))
500515 }
501- if ((bS == bS))
502- then {
503- let an = bS[0]
504- if ($isInstanceOf(an, "Int"))
505- then an
506- else throw(($getType(an) + " couldn't be cast to Int"))
507- }
516+ if ((bW == bW))
517+ then $Tuple2({
518+ let as = bW[0]
519+ if ($isInstanceOf(as, "Int"))
520+ then as
521+ else throw(($getType(as) + " couldn't be cast to Int"))
522+ }, {
523+ let as = bW[1]
524+ if ($isInstanceOf(as, "Int"))
525+ then as
526+ else throw(($getType(as) + " couldn't be cast to Int"))
527+ })
508528 else throw("Strict value is not equal to itself.")
509529 }
510- else if ((ba == b))
530+ else if ((be == b))
511531 then {
512- let co = if (if ((bs > 0))
513- then (bt > 0)
532+ let cs = if (if ((bw > 0))
533+ then (bx > 0)
514534 else false)
515535 then {
516- let cp = br(ba, ak, bs, ao, bt, ap, ar, as)
517- let bC = cp._1
518- let bD = cp._2
519- let bE = cp._3
520- let cq = cp._4
521- let cr = cp._5
522- $Tuple3(bE, cq, cr)
536+ let ct = bv(be, ap, bw, at, bx, au, aw, ax)
537+ let bG = ct._1
538+ let bH = ct._2
539+ let bI = ct._3
540+ let cu = ct._4
541+ let cv = ct._5
542+ $Tuple3(bI, cu, cv)
523543 }
524- else if ((bs > 0))
525- then $Tuple3(bs, ao, 0)
526- else $Tuple3(bt, ap, 0)
527- let bE = co._1
528- let cq = co._2
529- let cs = co._3
530- let ct = if ((bE > 0))
544+ else if ((bw > 0))
545+ then $Tuple3(bw, at, 0)
546+ else $Tuple3(bx, au, 0)
547+ let bI = cs._1
548+ let cu = cs._2
549+ let cw = cs._3
550+ let cx = if ((bI > 0))
531551 then {
532- let bS = {
533- let an = invoke(ak, "putOneTknREADONLY", [cq, bE], nil)
534- if ($isInstanceOf(an, "(Int, Int, Int)"))
535- then an
536- else throw(($getType(an) + " couldn't be cast to (Int, Int, Int)"))
552+ let bW = {
553+ let as = invoke(ap, "putOneTknREADONLY", [cu, bI], nil)
554+ if ($isInstanceOf(as, "(Int, Int, Int)"))
555+ then as
556+ else throw(($getType(as) + " couldn't be cast to (Int, Int, Int)"))
537557 }
538- if ((bS == bS))
539- then bS._1
558+ if ((bW == bW))
559+ then $Tuple2(bW._1, bW._3)
540560 else throw("Strict value is not equal to itself.")
541561 }
542- else 0
543- (cs + ct)
562+ else $Tuple2(0, 0)
563+ let cy = cx._1
564+ let cz = cx._2
565+ $Tuple2((cw + cy), cz)
544566 }
545567 else throw("Wrong pool type")
546568 }
547569
548570
549-func cu (ba,ax,cr,aq,ao,ap,ar,as,cv,cw) = {
550- let ak = addressFromStringValue(ax)
551- let cx = if ((ba == a))
571+func cA (be,aC,cv,av,at,au,aw,ax,cB,cC) = {
572+ let ap = addressFromStringValue(aC)
573+ let cD = if ((be == a))
552574 then {
553- let bS = {
554- let an = invoke(ak, "callFunction", ["withdrawREADONLY", [toString(cr), toString(ar), toString(as)]], nil)
555- if ($isInstanceOf(an, "List[Any]"))
556- then an
557- else throw(($getType(an) + " couldn't be cast to List[Any]"))
575+ let bW = {
576+ let as = invoke(ap, "callFunction", ["withdrawREADONLY", [toString(cv), toString(aw), toString(ax)]], nil)
577+ if ($isInstanceOf(as, "List[Any]"))
578+ then as
579+ else throw(($getType(as) + " couldn't be cast to List[Any]"))
558580 }
559- if ((bS == bS))
581+ if ((bW == bW))
560582 then $Tuple2({
561- let an = bS[0]
562- if ($isInstanceOf(an, "Int"))
563- then an
564- else throw(($getType(an) + " couldn't be cast to Int"))
583+ let as = bW[0]
584+ if ($isInstanceOf(as, "Int"))
585+ then as
586+ else throw(($getType(as) + " couldn't be cast to Int"))
565587 }, {
566- let an = bS[1]
567- if ($isInstanceOf(an, "Int"))
568- then an
569- else throw(($getType(an) + " couldn't be cast to Int"))
588+ let as = bW[1]
589+ if ($isInstanceOf(as, "Int"))
590+ then as
591+ else throw(($getType(as) + " couldn't be cast to Int"))
570592 })
571593 else throw("Strict value is not equal to itself.")
572594 }
573- else if ((ba == b))
595+ else if ((be == b))
574596 then {
575- let cy = split({
576- let an = invoke(ak, "evaluateGetREADONLY", [aq, cr], nil)
577- if ($isInstanceOf(an, "String"))
578- then an
579- else throw(($getType(an) + " couldn't be cast to String"))
597+ let cE = split({
598+ let as = invoke(ap, "evaluateGetREADONLY", [av, cv], nil)
599+ if ($isInstanceOf(as, "String"))
600+ then as
601+ else throw(($getType(as) + " couldn't be cast to String"))
580602 }, "__")
581- if ((cy == cy))
582- then $Tuple2(parseIntValue(cy[1]), parseIntValue(cy[2]))
603+ if ((cE == cE))
604+ then $Tuple2(parseIntValue(cE[1]), parseIntValue(cE[2]))
583605 else throw("Strict value is not equal to itself.")
584606 }
585607 else throw("Wrong pool type")
586- let cz = cx._1
587- let cA = cx._2
588- if ((cv > 0))
608+ let cF = cD._1
609+ let cG = cD._2
610+ if ((cB > 0))
589611 then {
590- let cB = if (if ((cw == ao))
591- then (cv > cz)
612+ let cH = if (if ((cC == at))
613+ then (cB > cF)
592614 else false)
593- then (cv - cz)
594- else if (if ((cw == ap))
595- then (cv > cA)
615+ then (cB - cF)
616+ else if (if ((cC == au))
617+ then (cB > cG)
596618 else false)
597- then (cv - cA)
619+ then (cB - cG)
598620 else 0
599- let cC = if ((cB > 0))
600- then if ((ba == a))
601- then bT(ax, ao, ap, ar, as, cB, cw)
602- else ce(ax, ao, ap, ar, as, cB, cw)
621+ let cI = if ((cH > 0))
622+ then if ((be == a))
623+ then bX(aC, at, au, aw, ax, cH, cC)
624+ else ci(aC, at, au, aw, ax, cH, cC)
603625 else $Tuple2("", 0)
604- let cd = cC._1
605- let cc = cC._2
606- if ((cw == ao))
607- then $Tuple2(((cz + cB) - cv), (cA - cc))
608- else $Tuple2((cz - cc), ((cA + cB) - cv))
626+ let ch = cI._1
627+ let cg = cI._2
628+ if ((cC == at))
629+ then $Tuple2(((cF + cH) - cB), (cG - cg))
630+ else $Tuple2((cF - cg), ((cG + cH) - cB))
609631 }
610- else $Tuple2(cz, cA)
632+ else $Tuple2(cF, cG)
611633 }
612634
613635
614-func cD (au,ax) = if ((au == a))
636+func cJ (az,aC) = if ((az == a))
615637 then {
616- let cE = ae(aa)
617- if ((cE == cE))
638+ let cK = aj(ab)
639+ if ((cK == cK))
618640 then {
619- let bS = invoke(aD(), "claim", [ax], nil)
620- if ((bS == bS))
641+ let bW = invoke(aI(), "claim", [aC], nil)
642+ if ((bW == bW))
621643 then {
622- let cF = ae(aa)
623- $Tuple2((cF - cE), aa)
644+ let cL = aj(ab)
645+ $Tuple2((cL - cK), ab)
624646 }
625647 else throw("Strict value is not equal to itself.")
626648 }
627649 else throw("Strict value is not equal to itself.")
628650 }
629- else if ((au == b))
651+ else if ((az == b))
630652 then {
631- let cE = ae(ab)
632- if ((cE == cE))
653+ let cK = aj(ac)
654+ if ((cK == cK))
633655 then {
634- let bS = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
635- if ((bS == bS))
656+ let bW = invoke(aJ(Address(fromBase58String(aC))), "claimWX", [aC], nil)
657+ if ((bW == bW))
636658 then {
637- let cF = ae(ab)
638- $Tuple2((cF - cE), ab)
659+ let cL = aj(ac)
660+ $Tuple2((cL - cK), ac)
639661 }
640662 else throw("Strict value is not equal to itself.")
641663 }
644666 else throw("Wrong pool type")
645667
646668
647-func cG (ba,ax,aC,bs,ao,bt,ap,ar,as,cH) = {
648- let cI = ae(fromBase58String(cH))
649- if ((cI == cI))
669+func cM (be,aC,aH,bw,at,bx,au,aw,ax,cN) = {
670+ let cO = aj(fromBase58String(cN))
671+ if ((cO == cO))
650672 then {
651- let ak = addressFromStringValue(ax)
652- let cJ = if (if ((bs > 0))
653- then (bt > 0)
673+ let ap = addressFromStringValue(aC)
674+ let cP = if (if ((bw > 0))
675+ then (bx > 0)
654676 else false)
655677 then {
656- let cK = br(ba, ak, bs, ao, bt, ap, ar, as)
657- let bC = cK._1
658- let bD = cK._2
659- let bE = cK._3
660- let cq = cK._4
661- let bS = bH(ak, ba, bC, ao, bD, ap)
662- if ((bS == bS))
663- then $Tuple2(bE, cq)
678+ let cQ = bv(be, ap, bw, at, bx, au, aw, ax)
679+ let bG = cQ._1
680+ let bH = cQ._2
681+ let bI = cQ._3
682+ let cu = cQ._4
683+ let bW = bL(ap, be, bG, at, bH, au)
684+ if ((bW == bW))
685+ then $Tuple2(bI, cu)
664686 else throw("Strict value is not equal to itself.")
665687 }
666- else if ((bs > 0))
667- then $Tuple2(bs, ao)
668- else if ((bt > 0))
669- then $Tuple2(bt, ap)
688+ else if ((bw > 0))
689+ then $Tuple2(bw, at)
690+ else if ((bx > 0))
691+ then $Tuple2(bx, au)
670692 else throw("pmts must be > 0")
671- let bE = cJ._1
672- let cq = cJ._2
673- let bS = if ((bE > 0))
674- then bJ(ak, ba, bE, cq)
693+ let bI = cP._1
694+ let cu = cP._2
695+ let bW = if ((bI > 0))
696+ then bN(ap, be, bI, cu)
675697 else nil
676- if ((bS == bS))
698+ if ((bW == bW))
677699 then {
678- let cL = ae(fromBase58String(cH))
679- let cM = (cL - cI)
680- let cN = fraction(cM, aB(ax, aC), l)
681- let cO = (cM - cN)
682- if ((0 >= cO))
700+ let cR = aj(fromBase58String(cN))
701+ let cS = (cR - cO)
702+ let cT = fraction(cS, aG(aC, aH), l)
703+ let cU = (cS - cT)
704+ if ((0 >= cU))
683705 then throw("amount of staked sharetokens must be > 0")
684706 else {
685- let cP = bL(ax, ba, cH, cO)
686- if ((cP == cP))
687- then $Tuple2(cO, cN)
707+ let cV = bP(aC, be, cN, cU)
708+ if ((cV == cV))
709+ then $Tuple2(cU, cT)
688710 else throw("Strict value is not equal to itself.")
689711 }
690712 }
694716 }
695717
696718
697-func cQ (ax,aA,cR,cN,cS,aq,au,cT) = {
698- let cU = aw(ax)
699- let cV = ay(ax)
700- let cW = if (cT)
701- then $Tuple2(getIntegerValue(this, (ax + B)), (cV + cR))
702- else $Tuple2(getIntegerValue(this, (ax + C)), cV)
703- let cX = cW._1
704- let cY = cW._2
705-[IntegerEntry((ax + z), (cU + cR)), IntegerEntry((ax + A), cY), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + t), cR), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + y), cX), StringEntry((((aA + "_") + toString(cS)) + u), ax), IntegerEntry((aA + x), cS), ScriptTransfer(W, cN, fromBase58String(aq))]
719+func cW (aC,aF,cX,cT,cY,av,az,cZ) = {
720+ let da = aB(aC)
721+ let db = aD(aC)
722+ let dc = if (cZ)
723+ then $Tuple2(getIntegerValue(this, (aC + B)), (db + cX))
724+ else $Tuple2(getIntegerValue(this, (aC + C)), db)
725+ let dd = dc._1
726+ let de = dc._2
727+[IntegerEntry((aC + z), (da + cX)), IntegerEntry((aC + A), de), IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + t), cX), IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + y), dd), StringEntry((((aF + "_") + toString(cY)) + u), aC), IntegerEntry((aF + x), cY), ScriptTransfer(X, cT, fromBase58String(av))]
706728 }
707729
708730
709-func cZ (da,db,dc,dd,de,df,dg,dh,di,dj) = {
710- let dk = ae(aJ(da))
711- if ((dk == dk))
731+func df (dg,dh,di,dj,dk,dl,dm,dn,do,dp) = {
732+ let dq = aj(aN(dg))
733+ if ((dq == dq))
712734 then {
713- let bS = invoke(X, "swap", [dd, de, df, dg, dh, di, dj], [AttachedPayment(dc, db)])
714- if ((bS == bS))
715- then (ae(aJ(da)) - dk)
735+ let bW = invoke(Y, "swap", [dj, dk, dl, dm, dn, do, dp], [AttachedPayment(di, dh)])
736+ if ((bW == bW))
737+ then (aj(aN(dg)) - dq)
716738 else throw("Strict value is not equal to itself.")
717739 }
718740 else throw("Strict value is not equal to itself.")
719741 }
720742
721743
722-func dl (da,db,dc,dm,dn,dj) = {
723- let dk = ae(aJ(da))
724- if ((dk == dk))
744+func dr (dg,dh,di,ds,dt,dp) = {
745+ let dq = aj(aN(dg))
746+ if ((dq == dq))
725747 then {
726- let bS = invoke(X, "puzzleSwap", [dm, dn, dj], [AttachedPayment(dc, db)])
727- if ((bS == bS))
728- then (ae(aJ(da)) - dk)
748+ let bW = invoke(Y, "puzzleSwap", [ds, dt, dp], [AttachedPayment(di, dh)])
749+ if ((bW == bW))
750+ then (aj(aN(dg)) - dq)
729751 else throw("Strict value is not equal to itself.")
730752 }
731753 else throw("Strict value is not equal to itself.")
732754 }
733755
734756
735-func do (da,db,dc,dp,dq,dr,ds,dt,du,dj) = {
736- let dk = ae(aJ(da))
737- if ((dk == dk))
757+func du (dg,dh,di,dv,dw,dx,dy,dz,dA,dp) = {
758+ let dq = aj(aN(dg))
759+ if ((dq == dq))
738760 then {
739- let bS = invoke(X, "swopfiSwap", [dp, dq, dr, ds, dt, du, dj], [AttachedPayment(dc, db)])
740- if ((bS == bS))
741- then (ae(aJ(da)) - dk)
761+ let bW = invoke(Y, "swopfiSwap", [dv, dw, dx, dy, dz, dA, dp], [AttachedPayment(di, dh)])
762+ if ((bW == bW))
763+ then (aj(aN(dg)) - dq)
742764 else throw("Strict value is not equal to itself.")
743765 }
744766 else throw("Strict value is not equal to itself.")
745767 }
746768
747769
748-func dv (ax,ba,dw,dx) = {
749- let ak = Address(fromBase58String(ax))
750- let dy = at(ak, ba)
751- let dz = dy._1
752- let dA = dy._2
753- let ar = dy._3
754- let as = dy._4
755- let aq = dy._5
756- if (if ((dw != dz))
757- then (dw != dA)
770+func dB (aC,be,dC,dD) = {
771+ let ap = Address(fromBase58String(aC))
772+ let dE = ay(ap, be)
773+ let dF = dE._1
774+ let dG = dE._2
775+ let aw = dE._3
776+ let ax = dE._4
777+ let av = dE._5
778+ if (if ((dC != dF))
779+ then (dC != dG)
758780 else false)
759781 then throw("Wrong asset")
760782 else {
761- let dB = if ((dw == dz))
762- then $Tuple2(dx, 0)
763- else $Tuple2(0, dx)
764- let bs = dB._1
765- let bt = dB._2
766- let dC = cG(ba, ax, i, bs, dz, bt, dA, ar, as, aq)
767- let cR = dC._1
768- let dD = dC._2
769- let dE = valueOrElse(getInteger(this, (ax + B)), 0)
770- let dF = valueOrElse(getInteger(this, (ax + C)), 0)
771- let dG = aw(ax)
772- let dH = ay(ax)
773- let dI = fraction(dH, j, dG)
774- let dJ = fraction(cR, dI, j)
775- let dK = (cR - dJ)
776- let dL = if ((dH > 0))
777- then (dE + fraction(dJ, k, dH))
783+ let dH = if ((dC == dF))
784+ then $Tuple2(dD, 0)
785+ else $Tuple2(0, dD)
786+ let bw = dH._1
787+ let bx = dH._2
788+ let dI = cM(be, aC, i, bw, dF, bx, dG, aw, ax, av)
789+ let cX = dI._1
790+ let dJ = dI._2
791+ let dK = valueOrElse(getInteger(this, (aC + B)), 0)
792+ let dL = valueOrElse(getInteger(this, (aC + C)), 0)
793+ let dM = aB(aC)
794+ let dN = aD(aC)
795+ let dO = fraction(dN, j, dM)
796+ let dP = fraction(cX, dO, j)
797+ let dQ = (cX - dP)
798+ let dR = if ((dN > 0))
799+ then (dK + fraction(dP, k, dN))
778800 else 0
779- let dM = if (((dG - dH) > 0))
780- then (dF + fraction(dK, k, (dG - dH)))
801+ let dS = if (((dM - dN) > 0))
802+ then (dL + fraction(dQ, k, (dM - dN)))
781803 else 0
782- let dN = fraction(dJ, aB(ax, d), l)
783- let dO = fraction(dK, aB(ax, c), l)
784- let dP = bN(ax, ba, aq, (dN + dO))
785- if ((dP == dP))
786- then ([IntegerEntry((ax + B), dL), IntegerEntry((ax + C), dM), IntegerEntry((ax + z), ((dG + cR) - dP)), IntegerEntry((ax + A), ((dH + dJ) - dN)), ScriptTransfer(W, (dN + dO), fromBase58String(aq))] ++ bn(dz, dA, aq))
804+ let dT = fraction(dP, aG(aC, d), l)
805+ let dU = fraction(dQ, aG(aC, c), l)
806+ let dV = bR(aC, be, av, (dT + dU))
807+ if ((dV == dV))
808+ then ([IntegerEntry((aC + B), dR), IntegerEntry((aC + C), dS), IntegerEntry((aC + z), ((dM + cX) - dV)), IntegerEntry((aC + A), ((dN + dP) - dT)), ScriptTransfer(X, (dT + dU), fromBase58String(av))] ++ br(dF, dG, av))
787809 else throw("Strict value is not equal to itself.")
788810 }
789811 }
790812
791813
792-func dQ (ax,dR,dS,dT) = {
793- let ak = Address(fromBase58String(ax))
794- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
795- let dU = at(ak, ba)
796- let bU = dU._1
797- let bV = dU._2
798- let ar = dU._3
799- let as = dU._4
800- let aq = dU._5
801- let dV = ae(aJ(bU))
802- if ((dV == dV))
814+func dW (aC,dX,dY,dZ) = {
815+ let ap = Address(fromBase58String(aC))
816+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Unknown pool")
817+ let ea = ay(ap, be)
818+ let bY = ea._1
819+ let bZ = ea._2
820+ let aw = ea._3
821+ let ax = ea._4
822+ let av = ea._5
823+ let eb = aj(aN(bY))
824+ if ((eb == eb))
803825 then {
804- let dW = ae(aJ(bV))
805- if ((dW == dW))
826+ let ec = aj(aN(bZ))
827+ if ((ec == ec))
806828 then {
807- let bS = if ((ba == a))
808- then invoke(ak, "callFunction", ["withdraw", [toString(dR)]], nil)
829+ let bW = if ((be == a))
830+ then invoke(ap, "callFunction", ["withdraw", [toString(dX)]], nil)
809831 else {
810- let bS = bN(ax, ba, aq, dR)
811- if ((bS == bS))
812- then invoke(ak, "get", nil, [AttachedPayment(aJ(aq), dR)])
832+ let bW = bR(aC, be, av, dX)
833+ if ((bW == bW))
834+ then invoke(ap, "get", nil, [AttachedPayment(aN(av), dX)])
813835 else throw("Strict value is not equal to itself.")
814836 }
815- if ((bS == bS))
837+ if ((bW == bW))
816838 then {
817- let dX = ae(aJ(bU))
818- let dY = ae(aJ(bV))
819- let dZ = $Tuple2((dX - dV), (dY - dW))
820- let ea = dZ._1
821- let eb = dZ._2
822- let ec = if ((dS > 0))
839+ let ed = aj(aN(bY))
840+ let ee = aj(aN(bZ))
841+ let ef = $Tuple2((ed - eb), (ee - ec))
842+ let eg = ef._1
843+ let eh = ef._2
844+ let ei = if ((dY > 0))
823845 then {
824- let cB = if (if ((dT == bU))
825- then (dS > ea)
846+ let cH = if (if ((dZ == bY))
847+ then (dY > eg)
826848 else false)
827- then (dS - ea)
828- else if (if ((dT == bV))
829- then (dS > eb)
849+ then (dY - eg)
850+ else if (if ((dZ == bZ))
851+ then (dY > eh)
830852 else false)
831- then (dS - eb)
853+ then (dY - eh)
832854 else 0
833- let ed = if ((cB > 0))
834- then ck(ba, ax, bU, bV, ar, as, cB, dT)
855+ let ej = if ((cH > 0))
856+ then co(be, aC, bY, bZ, aw, ax, cH, dZ)
835857 else 0
836- if ((ed == ed))
858+ if ((ej == ej))
837859 then {
838- let ee = ae(aJ(bU))
839- let ef = ae(aJ(bV))
840- $Tuple2((ee - dV), (ef - dW))
860+ let ek = aj(aN(bY))
861+ let el = aj(aN(bZ))
862+ $Tuple2((ek - eb), (el - ec))
841863 }
842864 else throw("Strict value is not equal to itself.")
843865 }
844- else $Tuple2(ea, eb)
845- let eg = ec._1
846- let eh = ec._2
847- $Tuple7(eg, bU, eh, bV, dX, dY, aq)
866+ else $Tuple2(eg, eh)
867+ let em = ei._1
868+ let en = ei._2
869+ $Tuple7(em, bY, en, bZ, ed, ee, av)
848870 }
849871 else throw("Strict value is not equal to itself.")
850872 }
854876 }
855877
856878
857-func ei (aA,ax,ej,ek) = {
858- let el = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + t)), "Unknown position")
859- let em = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + y))
860- let en = if (ek)
861- then getIntegerValue(this, (ax + B))
862- else getIntegerValue(this, (ax + C))
863- (el + fraction(el, (en - em), k))
879+func eo (aF,aC,ep,eq) = {
880+ let er = valueOrErrorMessage(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + t)), "Unknown position")
881+ let es = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + y))
882+ let et = if (eq)
883+ then getIntegerValue(this, (aC + B))
884+ else getIntegerValue(this, (aC + C))
885+ (er + fraction(er, (et - es), k))
864886 }
865887
866888
867-func eo (aA,ax,ej,ep) = {
868- let el = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + t)), "Unknown position")
869- let em = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + y))
870- let cv = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + v)), 0)
871- let dR = ei(aA, ax, ej, (cv > 0))
872- let eq = aw(ax)
873- let er = Address(fromBase58String(aA))
874- let dT = valueOrElse(getString(this, (((((ax + "_") + aA) + "_") + ej) + w)), "")
875- let dS = if ((cv > 0))
889+func eu (aF,aC,ep,ev) = {
890+ let er = valueOrErrorMessage(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + t)), "Unknown position")
891+ let es = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + y))
892+ let cB = valueOrElse(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + v)), 0)
893+ let dX = eo(aF, aC, ep, (cB > 0))
894+ let ew = aB(aC)
895+ let ex = Address(fromBase58String(aF))
896+ let dZ = valueOrElse(getString(this, (((((aC + "_") + aF) + "_") + ep) + w)), "")
897+ let dY = if ((cB > 0))
876898 then {
877- let an = invoke(aH(), "getAssetDebt", [false, ((aA + "_") + ej), dT], nil)
878- if ($isInstanceOf(an, "Int"))
879- then an
880- else throw(($getType(an) + " couldn't be cast to Int"))
899+ let as = invoke(ad(), "getAssetDebt", [false, ((aF + "_") + ep), dZ], nil)
900+ if ($isInstanceOf(as, "Int"))
901+ then as
902+ else throw(($getType(as) + " couldn't be cast to Int"))
881903 }
882904 else 0
883- let es = dQ(ax, dR, dS, dT)
884- if ((es == es))
905+ let ey = dW(aC, dX, dY, dZ)
906+ if ((ey == ey))
885907 then {
886- let aq = es._7
887- let dY = es._6
888- let dX = es._5
889- let bV = es._4
890- let eh = es._3
891- let bU = es._2
892- let eg = es._1
893- let et = if ((dS > 0))
894- then invoke(aH(), "repayFor", [((aA + "_") + ej)], [AttachedPayment(aJ(dT), dS)])
908+ let av = ey._7
909+ let ee = ey._6
910+ let ed = ey._5
911+ let bZ = ey._4
912+ let en = ey._3
913+ let bY = ey._2
914+ let em = ey._1
915+ let ez = if ((dY > 0))
916+ then invoke(ad(), "repayFor", [((aF + "_") + ep)], [AttachedPayment(aN(dZ), dY)])
895917 else 0
896- if ((et == et))
897- then ([DeleteEntry((((((ax + "_") + aA) + "_") + ej) + t)), DeleteEntry((((((ax + "_") + aA) + "_") + ej) + y)), IntegerEntry((ax + z), (eq - dR)), ScriptTransfer(er, eg, aJ(bU)), ScriptTransfer(er, eh, aJ(bV))] ++ bn(bU, bV, aq))
918+ if ((ez == ez))
919+ then ([DeleteEntry((((((aC + "_") + aF) + "_") + ep) + t)), DeleteEntry((((((aC + "_") + aF) + "_") + ep) + y)), IntegerEntry((aC + z), (ew - dX)), ScriptTransfer(ex, em, aN(bY)), ScriptTransfer(ex, en, aN(bZ))] ++ br(bY, bZ, av))
898920 else throw("Strict value is not equal to itself.")
899921 }
900922 else throw("Strict value is not equal to itself.")
901923 }
902924
903925
904-func eu (ev) = {
905- let ew = split(valueOrErrorMessage(getString(this, (ev + J)), ("No request with id " + ev)), ",")
906- let aA = ew[0]
907- let ax = ew[1]
908- let bs = parseIntValue(ew[2])
909- let dz = ew[3]
910- let bt = parseIntValue(ew[4])
911- let dA = ew[5]
912- let ar = parseIntValue(ew[6])
913- let as = parseIntValue(ew[7])
914- let aq = ew[8]
915- let ex = ew[9]
916- let ey = parseIntValue(ew[10])
917- $Tuple11(aA, ax, bs, dz, bt, dA, ar, as, aq, ex, ey)
926+func eA (eB) = {
927+ let eC = split(valueOrErrorMessage(getString(this, (eB + J)), ("No request with id " + eB)), ",")
928+ let aF = eC[0]
929+ let aC = eC[1]
930+ let bw = parseIntValue(eC[2])
931+ let dF = eC[3]
932+ let bx = parseIntValue(eC[4])
933+ let dG = eC[5]
934+ let aw = parseIntValue(eC[6])
935+ let ax = parseIntValue(eC[7])
936+ let av = eC[8]
937+ let eD = eC[9]
938+ let eE = parseIntValue(eC[10])
939+ $Tuple11(aF, aC, bw, dF, bx, dG, aw, ax, av, eD, eE)
918940 }
919941
920942
921-func ez (bs,bt,ao,ap,eA,eB) = {
922- let be = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
923- if ($isInstanceOf(an, "(Int, Int)"))
924- then an
925- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
926- let bf = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
927- if ($isInstanceOf(an, "(Int, Int)"))
928- then an
929- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
930- let eC = pow(10, 0, aK(ao), 0, 0, DOWN)
931- let eD = pow(10, 0, aK(ap), 0, 0, DOWN)
932- let eE = (fraction(be, bs, eC) + fraction(bf, bt, eD))
933- let eF = if ((eB == ao))
934- then $Tuple2(be, eC)
935- else $Tuple2(bf, eD)
936- let eG = eF._1
937- let eH = eF._2
938- fraction(fraction(eE, (eA - 100), 100), eH, eG)
943+func eF (bw,bx,at,au,eG,eH) = {
944+ let bi = ( let as = invoke(Z, "getTWAP60", [at, false], nil)
945+ if ($isInstanceOf(as, "(Int, Int)"))
946+ then as
947+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
948+ let bj = ( let as = invoke(Z, "getTWAP60", [au, false], nil)
949+ if ($isInstanceOf(as, "(Int, Int)"))
950+ then as
951+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
952+ let eI = pow(10, 0, aO(at), 0, 0, DOWN)
953+ let eJ = pow(10, 0, aO(au), 0, 0, DOWN)
954+ let eK = (fraction(bi, bw, eI) + fraction(bj, bx, eJ))
955+ let eL = if ((eH == at))
956+ then $Tuple2(bi, eI)
957+ else $Tuple2(bj, eJ)
958+ let eM = eL._1
959+ let eN = eL._2
960+ fraction(fraction(eK, (eG - 100), 100), eN, eM)
939961 }
940962
941963
942-@Callable(ad)
943-func calcPriceImpactEVALONLY (ax,eA,eB,bs,bt) = if (if ((100 > eA))
964+@Callable(ag)
965+func calcPriceImpactEVALONLY (aC,eG,eH,bw,bx) = if (if ((100 > eG))
944966 then true
945- else (eA > 300))
967+ else (eG > 300))
946968 then throw("Leverage can't be <100 and >300")
947969 else {
948- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
949- let eI = at(Address(fromBase58String(ax)), ba)
950- let dz = eI._1
951- let dA = eI._2
952- let ar = eI._3
953- let as = eI._4
954- let aq = eI._5
955- let cv = if ((eA > 100))
956- then ez(bs, bt, dz, dA, eA, eB)
970+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
971+ let eO = ay(Address(fromBase58String(aC)), be)
972+ let dF = eO._1
973+ let dG = eO._2
974+ let aw = eO._3
975+ let ax = eO._4
976+ let av = eO._5
977+ let cB = if ((eG > 100))
978+ then eF(bw, bx, dF, dG, eG, eH)
957979 else 0
958- let eJ = if ((eB == dz))
959- then $Tuple2((bs + cv), bt)
960- else $Tuple2(bs, (bt + cv))
961- let eK = eJ._1
962- let eL = eJ._2
963- let cr = cn(ba, ax, eK, dz, eL, dA, ar, as)
964- let eM = (ar + eK)
965- let eN = (as + eL)
966- let eO = cu(ba, ax, cr, aq, dz, dA, eM, eN, cv, eB)
967- if ((eO == eO))
968- then {
969- let eP = eO._2
970- let eQ = eO._1
971- let eR = fraction(as, j, ar)
972- let eS = fraction((eN - eP), j, (eM - eQ))
973- let eT = (j - fraction(eR, j, eS))
974- let eU = if ((0 > eT))
975- then (eT * -1)
976- else eT
977- $Tuple2(nil, [eU])
978- }
979- else throw("Strict value is not equal to itself.")
980+ let eP = if ((eH == dF))
981+ then $Tuple2((bw + cB), bx)
982+ else $Tuple2(bw, (bx + cB))
983+ let eQ = eP._1
984+ let eR = eP._2
985+ let eS = cr(be, aC, eQ, dF, eR, dG, aw, ax)
986+ let cv = eS._1
987+ let cz = eS._2
988+ let eT = if ((0 > cz))
989+ then (cz * -1)
990+ else cz
991+ $Tuple2(nil, [eT])
980992 }
981993
982994
983995
984-@Callable(ad)
985-func getShareAssetPriceREADONLY (aq) = {
986- let eV = aZ(aq)
987- $Tuple2(nil, eV)
996+@Callable(ag)
997+func getShareAssetPriceREADONLY (av) = {
998+ let eU = bd(av)
999+ $Tuple2(nil, eU)
9881000 }
9891001
9901002
9911003
992-@Callable(ad)
993-func getUserPositionShareAmountREADONLY (aA,cS) = {
994- let ax = valueOrErrorMessage(getString(this, (((aA + "_") + cS) + u)), "Unknown position")
995- let cv = getIntegerValue(this, (((((ax + "_") + aA) + "_") + cS) + v))
996- let dR = ei(aA, ax, cS, (cv > 0))
997- $Tuple2(nil, dR)
1004+@Callable(ag)
1005+func getUserPositionShareAmountREADONLY (aF,cY) = {
1006+ let aC = valueOrErrorMessage(getString(this, (((aF + "_") + cY) + u)), "Unknown position")
1007+ let cB = getIntegerValue(this, (((((aC + "_") + aF) + "_") + cY) + v))
1008+ let dX = eo(aF, aC, cY, (cB > 0))
1009+ $Tuple2(nil, dX)
9981010 }
9991011
10001012
10011013
1002-@Callable(ad)
1003-func getUserPositionInDollarsREADONLY (aA,eW,cS) = {
1004- func eX (aQ,ax) = {
1005- let eY = aQ
1006- let eZ = eY._1
1007- let fa = eY._2
1008- let fb = eY._3
1009- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1010- let fc = at(Address(fromBase58String(ax)), ba)
1011- let dz = fc._1
1012- let dA = fc._2
1013- let ar = fc._3
1014- let as = fc._4
1015- let aq = fc._5
1016- let cv = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + cS[fb]) + v)), 0)
1017- let dR = ei(aA, ax, cS[fb], (cv > 0))
1018- let eV = aZ(aq)
1019- let fd = pow(10, 0, aK(aq), 0, 0, DOWN)
1020- let fe = fraction(dR, eV, fd)
1021- if ((cv == 0))
1022- then $Tuple3((eZ :+ fe), (fa :+ 0), (fb + 1))
1014+@Callable(ag)
1015+func getUserPositionInDollarsREADONLY (aF,eV,cY) = {
1016+ func eW (aU,aC) = {
1017+ let eX = aU
1018+ let eY = eX._1
1019+ let eZ = eX._2
1020+ let fa = eX._3
1021+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
1022+ let fb = ay(Address(fromBase58String(aC)), be)
1023+ let dF = fb._1
1024+ let dG = fb._2
1025+ let aw = fb._3
1026+ let ax = fb._4
1027+ let av = fb._5
1028+ let cB = valueOrElse(getInteger(this, (((((aC + "_") + aF) + "_") + cY[fa]) + v)), 0)
1029+ let dX = eo(aF, aC, cY[fa], (cB > 0))
1030+ let eU = bd(av)
1031+ let fc = pow(10, 0, aO(av), 0, 0, DOWN)
1032+ let fd = fraction(dX, eU, fc)
1033+ if ((cB == 0))
1034+ then $Tuple3((eY :+ fd), (eZ :+ 0), (fa + 1))
10231035 else {
1024- let dT = getStringValue(this, (((((ax + "_") + aA) + "_") + cS[fb]) + w))
1025- let dS = {
1026- let an = invoke(aH(), "getAssetDebt", [false, ((aA + "_") + cS[fb]), dT], nil)
1027- if ($isInstanceOf(an, "Int"))
1028- then an
1029- else throw(($getType(an) + " couldn't be cast to Int"))
1036+ let dZ = getStringValue(this, (((((aC + "_") + aF) + "_") + cY[fa]) + w))
1037+ let dY = {
1038+ let as = invoke(ad(), "getAssetDebt", [false, ((aF + "_") + cY[fa]), dZ], nil)
1039+ if ($isInstanceOf(as, "Int"))
1040+ then as
1041+ else throw(($getType(as) + " couldn't be cast to Int"))
10301042 }
1031- let ff = ( let an = invoke(Y, "getTWAP60", [dT, false], nil)
1032- if ($isInstanceOf(an, "(Int, Int)"))
1033- then an
1034- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1035- let fg = pow(10, 0, aK(dT), 0, 0, DOWN)
1036- let fh = fraction(dS, ff, fg)
1037- $Tuple3((eZ :+ fe), (fa :+ fh), (fb + 1))
1043+ let fe = ( let as = invoke(Z, "getTWAP60", [dZ, false], nil)
1044+ if ($isInstanceOf(as, "(Int, Int)"))
1045+ then as
1046+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
1047+ let ff = pow(10, 0, aO(dZ), 0, 0, DOWN)
1048+ let fg = fraction(dY, fe, ff)
1049+ $Tuple3((eY :+ fd), (eZ :+ fg), (fa + 1))
10381050 }
10391051 }
10401052
1041- let fi = {
1042- let aS = eW
1043- let aT = size(aS)
1044- let aU = $Tuple3(nil, nil, 0)
1045- func aV (aW,aX) = if ((aX >= aT))
1046- then aW
1047- else eX(aW, aS[aX])
1053+ let fh = {
1054+ let aW = eV
1055+ let aX = size(aW)
1056+ let aY = $Tuple3(nil, nil, 0)
1057+ func aZ (ba,bb) = if ((bb >= aX))
1058+ then ba
1059+ else eW(ba, aW[bb])
10481060
1049- func aY (aW,aX) = if ((aX >= aT))
1050- then aW
1061+ func bc (ba,bb) = if ((bb >= aX))
1062+ then ba
10511063 else throw("List size exceeds 20")
10521064
1053- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1065+ bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
10541066 }
1055- let fj = fi._1
1056- let dS = fi._2
1057- $Tuple2(nil, $Tuple2(fj, dS))
1067+ let fi = fh._1
1068+ let dY = fh._2
1069+ $Tuple2(nil, $Tuple2(fi, dY))
10581070 }
10591071
10601072
10611073
1062-@Callable(ad)
1063-func replenish (ax,eA,eB) = if (if ((100 > eA))
1074+@Callable(ag)
1075+func replenish (aC,eG,eH) = if (if ((100 > eG))
10641076 then true
1065- else (eA > 300))
1077+ else (eG > 300))
10661078 then throw("Leverage can't be <100 and >300")
10671079 else {
1068- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1069- let fk = at(Address(fromBase58String(ax)), ba)
1070- let dz = fk._1
1071- let dA = fk._2
1072- let ar = fk._3
1073- let as = fk._4
1074- let aq = fk._5
1075- let fl = if ((size(ad.payments) == 2))
1076- then if ((aI(ad.payments[0].assetId) != dz))
1080+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
1081+ let fj = ay(Address(fromBase58String(aC)), be)
1082+ let dF = fj._1
1083+ let dG = fj._2
1084+ let aw = fj._3
1085+ let ax = fj._4
1086+ let av = fj._5
1087+ let fk = if ((size(ag.payments) == 2))
1088+ then if ((aM(ag.payments[0].assetId) != dF))
10771089 then throw("Wrong payment asset A")
1078- else if ((aI(ad.payments[1].assetId) != dA))
1090+ else if ((aM(ag.payments[1].assetId) != dG))
10791091 then throw("Wrong payment asset B")
1080- else $Tuple4(ad.payments[0].amount, dz, ad.payments[1].amount, dA)
1081- else if ((size(ad.payments) == 1))
1082- then if ((aI(ad.payments[0].assetId) == dz))
1083- then $Tuple4(ad.payments[0].amount, dz, 0, dA)
1084- else if ((aI(ad.payments[0].assetId) == dA))
1085- then $Tuple4(0, dz, ad.payments[0].amount, dA)
1092+ else $Tuple4(ag.payments[0].amount, dF, ag.payments[1].amount, dG)
1093+ else if ((size(ag.payments) == 1))
1094+ then if ((aM(ag.payments[0].assetId) == dF))
1095+ then $Tuple4(ag.payments[0].amount, dF, 0, dG)
1096+ else if ((aM(ag.payments[0].assetId) == dG))
1097+ then $Tuple4(0, dF, ag.payments[0].amount, dG)
10861098 else throw("Wrong payment")
10871099 else throw("One or two payments expected")
1088- let bs = fl._1
1089- let fm = fl._2
1090- let bt = fl._3
1091- let fn = fl._4
1092- let fo = az(toString(ad.caller))
1093- if ((eA > 100))
1100+ let bw = fk._1
1101+ let fl = fk._2
1102+ let bx = fk._3
1103+ let fm = fk._4
1104+ let fn = aE(toString(ag.caller))
1105+ if ((eG > 100))
10941106 then {
1095- let cv = ez(bs, bt, fm, fn, eA, eB)
1096- let ew = makeString([toString(ad.caller), ax, toString(bs), fm, toString(bt), fn, toString(ar), toString(as), aq, eB, toString(cv)], ",")
1097- let fp = {
1098- let an = invoke(this, "createNewRequest", [ew], nil)
1099- if ($isInstanceOf(an, "Int"))
1100- then an
1101- else throw(($getType(an) + " couldn't be cast to Int"))
1107+ let cB = eF(bw, bx, fl, fm, eG, eH)
1108+ let eC = makeString([toString(ag.caller), aC, toString(bw), fl, toString(bx), fm, toString(aw), toString(ax), av, eH, toString(cB)], ",")
1109+ let fo = {
1110+ let as = invoke(this, "createNewRequest", [eC], nil)
1111+ if ($isInstanceOf(as, "Int"))
1112+ then as
1113+ else throw(($getType(as) + " couldn't be cast to Int"))
11021114 }
1103- if ((fp == fp))
1115+ if ((fo == fo))
11041116 then {
1105- let fq = [((toString(ad.caller) + "_") + toString(fo)), aq, eB, cv, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fp, "Can't create new request"))]
1106- let bS = reentrantInvoke(aH(), "flashPosition", fq, nil)
1107- if ((bS == bS))
1117+ let fp = [((toString(ag.caller) + "_") + toString(fn)), av, eH, cB, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fo, "Can't create new request"))]
1118+ let bW = reentrantInvoke(ad(), "flashPosition", fp, nil)
1119+ if ((bW == bW))
11081120 then nil
11091121 else throw("Strict value is not equal to itself.")
11101122 }
11111123 else throw("Strict value is not equal to itself.")
11121124 }
11131125 else {
1114- let fr = cG(ba, ax, h, bs, dz, bt, dA, ar, as, aq)
1115- let fs = fr._1
1116- let dP = fr._2
1117- (cQ(ax, toString(ad.caller), fs, dP, fo, aq, ba, false) ++ bn(dz, dA, aq))
1126+ let fq = cM(be, aC, h, bw, dF, bx, dG, aw, ax, av)
1127+ let fr = fq._1
1128+ let dV = fq._2
1129+ (cW(aC, toString(ag.caller), fr, dV, fn, av, be, false) ++ br(dF, dG, av))
11181130 }
11191131 }
11201132
11211133
11221134
1123-@Callable(ad)
1124-func replenishFromLand (ev) = {
1125- let ft = eu(ev)
1126- let aA = ft._1
1127- let ax = ft._2
1128- let bs = ft._3
1129- let dz = ft._4
1130- let bt = ft._5
1131- let dA = ft._6
1132- let ar = ft._7
1133- let as = ft._8
1134- let aq = ft._9
1135- let ex = ft._10
1136- let ey = ft._11
1137- if ((size(ad.payments) != 1))
1138- then throw("Wrong payment size")
1139- else if (if ((aI(ad.payments[0].assetId) != ex))
1140- then true
1141- else (ad.payments[0].amount != ey))
1142- then throw("Wrong payment")
1143- else {
1144- let fu = if ((dz == ex))
1145- then $Tuple2((bs + ad.payments[0].amount), bt)
1146- else $Tuple2(bs, (bt + ad.payments[0].amount))
1147- let fv = fu._1
1148- let fw = fu._2
1149- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1150- let fx = cG(ba, ax, g, bs, dz, bt, dA, ar, as, aq)
1151- let fs = fx._1
1152- let dP = fx._2
1153- let cS = az(aA)
1154- let fy = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + v), ey), StringEntry((((((ax + "_") + aA) + "_") + toString(cS)) + w), ex)]
1155- let fz = cQ(ax, aA, fs, dP, cS, aq, ba, true)
1156- $Tuple2((((fz ++ bn(dz, dA, aq)) ++ fy) :+ DeleteEntry((ev + J))), fs)
1157- }
1135+@Callable(ag)
1136+func withdraw (aC,ep) = eu(toString(ag.caller), aC, toString(ep), false)
1137+
1138+
1139+
1140+@Callable(ag)
1141+func createUpdateStopLoss (ep,fs,ak,ft) = {
1142+ let fu = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
1143+ if ($isInstanceOf(as, "(Int, Int)"))
1144+ then as
1145+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
1146+ if (!(isDefined(getInteger(this, (((((fs + "_") + toString(ag.caller)) + "_") + toString(ep)) + t)))))
1147+ then throw("There are no user position")
1148+ else if ((0 >= ft))
1149+ then throw("Price must be greater than 0")
1150+ else if ((ft > fu))
1151+ then throw("Price must be less than current token price")
1152+ else [IntegerEntry((((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P), ft)]
11581153 }
11591154
11601155
11611156
1162-@Callable(ad)
1163-func withdraw (ax,ej) = eo(toString(ad.caller), ax, toString(ej), false)
1157+@Callable(ag)
1158+func deleteStopLoss (ep,fs,ak) = if (!(isDefined(getInteger(this, (((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P)))))
1159+ then throw("No entry")
1160+ else [DeleteEntry((((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P))]
11641161
11651162
11661163
1167-@Callable(ad)
1168-func createUpdateStopLoss (ej,fA,af,fB) = {
1169- let fC = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1170- if ($isInstanceOf(an, "(Int, Int)"))
1171- then an
1172- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1173- if (!(isDefined(getInteger(this, (((((fA + "_") + toString(ad.caller)) + "_") + toString(ej)) + t)))))
1174- then throw("There are no user position")
1175- else if ((0 >= fB))
1176- then throw("Price must be greater than 0")
1177- else if ((fB > fC))
1178- then throw("Price must be less than current token price")
1179- else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P), fB)]
1180- }
1181-
1182-
1183-
1184-@Callable(ad)
1185-func deleteStopLoss (ej,fA,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P)))))
1186- then throw("No entry")
1187- else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P))]
1188-
1189-
1190-
1191-@Callable(ad)
1192-func createNewRequest (bR) = valueOrElse(ac(ad), {
1193- let fp = (valueOrElse(getInteger(this, K), 0) + 1)
1194- $Tuple2([StringEntry((toString(fp) + J), bR), IntegerEntry(K, fp)], fp)
1164+@Callable(ag)
1165+func createNewRequest (bV) = valueOrElse(ah(ag), {
1166+ let fo = (valueOrElse(getInteger(this, K), 0) + 1)
1167+ $Tuple2([StringEntry((toString(fo) + J), bV), IntegerEntry(K, fo)], fo)
11951168 })
11961169
11971170
11981171
1199-@Callable(ad)
1200-func stopLoss (aA,ej,ax,af) = {
1201- let fC = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1202- if ($isInstanceOf(an, "(Int, Int)"))
1203- then an
1204- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1205- if (!(isDefined(getInteger(this, (((((((aA + "_") + toString(ej)) + "_") + ax) + "_") + af) + P)))))
1206- then throw("No entry")
1207- else (eo(toString(ad.caller), ax, toString(ej), true) :+ DeleteEntry((((((((aA + "_") + toString(ej)) + "_") + ax) + "_") + af) + P)))
1208- }
1172+@Callable(ag)
1173+func replenishFromLand (eB) = valueOrElse(ai(ag), {
1174+ let fv = eA(eB)
1175+ let aF = fv._1
1176+ let aC = fv._2
1177+ let bw = fv._3
1178+ let dF = fv._4
1179+ let bx = fv._5
1180+ let dG = fv._6
1181+ let aw = fv._7
1182+ let ax = fv._8
1183+ let av = fv._9
1184+ let eD = fv._10
1185+ let eE = fv._11
1186+ if ((size(ag.payments) != 1))
1187+ then throw("Wrong payment size")
1188+ else if (if ((aM(ag.payments[0].assetId) != eD))
1189+ then true
1190+ else (ag.payments[0].amount != eE))
1191+ then throw("Wrong payment")
1192+ else {
1193+ let fw = if ((dF == eD))
1194+ then $Tuple2((bw + ag.payments[0].amount), bx)
1195+ else $Tuple2(bw, (bx + ag.payments[0].amount))
1196+ let fx = fw._1
1197+ let fy = fw._2
1198+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Unknown pool")
1199+ let fz = cM(be, aC, g, bw, dF, bx, dG, aw, ax, av)
1200+ let fr = fz._1
1201+ let dV = fz._2
1202+ let cY = aE(aF)
1203+ let fA = [IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + v), eE), StringEntry((((((aC + "_") + aF) + "_") + toString(cY)) + w), eD)]
1204+ let fB = cW(aC, aF, fr, dV, cY, av, be, true)
1205+ $Tuple2((((fB ++ br(dF, dG, av)) ++ fA) :+ DeleteEntry((eB + J))), fr)
1206+ }
1207+ })
12091208
12101209
12111210
1212-@Callable(ad)
1213-func liquidate (aA,ej,fD) = {
1214- let ax = valueOrErrorMessage(getString(this, (((aA + "_") + ej) + u)), "no position")
1215- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1216- let fE = at(Address(fromBase58String(ax)), ba)
1217- let dz = fE._1
1218- let dA = fE._2
1219- let ar = fE._3
1220- let as = fE._4
1221- let aq = fE._5
1222- let bM = bN(ax, ba, aq, fD)
1223- let cv = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + v))
1224- let dT = getStringValue(this, (((((ax + "_") + aA) + "_") + ej) + w))
1225- let dR = ei(aA, ax, ej, (cv > 0))
1226- if ((cv == 0))
1211+@Callable(ag)
1212+func liquidate (aF,ep,fC) = valueOrElse(ai(ag), {
1213+ let aC = valueOrErrorMessage(getString(this, (((aF + "_") + ep) + u)), "no position")
1214+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
1215+ let fD = ay(Address(fromBase58String(aC)), be)
1216+ let dF = fD._1
1217+ let dG = fD._2
1218+ let aw = fD._3
1219+ let ax = fD._4
1220+ let av = fD._5
1221+ let bQ = bR(aC, be, av, fC)
1222+ let cB = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + v))
1223+ let dZ = getStringValue(this, (((((aC + "_") + aF) + "_") + ep) + w))
1224+ let dX = eo(aF, aC, ep, (cB > 0))
1225+ if ((cB == 0))
12271226 then throw("You can't liquidate position without borrow")
1228- else [IntegerEntry((((((ax + "_") + aA) + "_") + ej) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - fD)), IntegerEntry((ax + z), (aw(ax) - fD)), IntegerEntry((((((ax + "_") + aA) + "_") + ej) + t), (dR - fD)), ScriptTransfer(ad.caller, bM, fromBase58String(aq))]
1229- }
1227+ else [IntegerEntry((((((aC + "_") + aF) + "_") + ep) + y), getIntegerValue(this, (aC + B))), IntegerEntry((aC + A), (aD(aC) - fC)), IntegerEntry((aC + z), (aB(aC) - fC)), IntegerEntry((((((aC + "_") + aF) + "_") + ep) + t), (dX - fC)), ScriptTransfer(ag.caller, bQ, fromBase58String(av))]
1228+ })
12301229
12311230
12321231
1233-@Callable(ad)
1234-func capitalizeExKeeper (ax,au,fF,fG,fH,dd,de,df,dg,dh,di,dj) = {
1235- let fI = if (fH)
1236- then cD(au, ax)
1237- else {
1238- let fJ = if ((au == a))
1239- then aa
1240- else ab
1241- $Tuple2(fG, fJ)
1242- }
1243- let fK = fI._1
1244- let fJ = fI._2
1245- let fL = cZ(fF, fG, fJ, dd, de, df, dg, dh, di, dj)
1246- let bE = (fK - fG)
1247- let fM = if ((bE > 0))
1248- then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
1249- else nil
1250- (dv(ax, au, fF, fL) ++ fM)
1251- }
1232+@Callable(ag)
1233+func stopLoss (aF,ep,aC,ak) = valueOrElse(af(ag), {
1234+ let fu = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
1235+ if ($isInstanceOf(as, "(Int, Int)"))
1236+ then as
1237+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
1238+ if (!(isDefined(getInteger(this, (((((((aF + "_") + toString(ep)) + "_") + aC) + "_") + ak) + P)))))
1239+ then throw("No entry")
1240+ else (eu(toString(ag.caller), aC, toString(ep), true) :+ DeleteEntry((((((((aF + "_") + toString(ep)) + "_") + aC) + "_") + ak) + P)))
1241+ })
12521242
12531243
12541244
1255-@Callable(ad)
1256-func capitalizeExPuzzle (ax,au,fF,fG,fH,dm,dn,dj) = {
1257- let fN = if (fH)
1258- then cD(au, ax)
1245+@Callable(ag)
1246+func capitalizeExKeeper (aC,az,fE,fF,fG,dj,dk,dl,dm,dn,do,dp) = valueOrElse(af(ag), {
1247+ let fH = if (fG)
1248+ then cJ(az, aC)
12591249 else {
1260- let fJ = if ((au == a))
1261- then aa
1262- else ab
1263- $Tuple2(fG, fJ)
1250+ let fI = if ((az == a))
1251+ then ab
1252+ else ac
1253+ $Tuple2(fF, fI)
12641254 }
1265- let fK = fN._1
1266- let fJ = fN._2
1267- let fL = dl(fF, fG, fJ, dm, dn, dj)
1268- let bE = (fK - fG)
1269- let fM = if ((bE > 0))
1270- then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
1255+ let fJ = fH._1
1256+ let fI = fH._2
1257+ let fK = df(fE, fF, fI, dj, dk, dl, dm, dn, do, dp)
1258+ let bI = (fJ - fF)
1259+ let fL = if ((bI > 0))
1260+ then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
12711261 else nil
1272- (dv(ax, au, fF, fL) ++ fM)
1273- }
1262+ (dB(aC, az, fE, fK) ++ fL)
1263+ })
12741264
12751265
12761266
1277-@Callable(ad)
1278-func capitalizeExSwopFi (ax,au,fF,fG,fH,dp,dq,dr,ds,dt,du,dj) = {
1279- let fO = if (fH)
1280- then cD(au, ax)
1267+@Callable(ag)
1268+func capitalizeExPuzzle (aC,az,fE,fF,fG,ds,dt,dp) = valueOrElse(af(ag), {
1269+ let fM = if (fG)
1270+ then cJ(az, aC)
12811271 else {
1282- let fJ = if ((au == a))
1283- then aa
1284- else ab
1285- $Tuple2(fG, fJ)
1272+ let fI = if ((az == a))
1273+ then ab
1274+ else ac
1275+ $Tuple2(fF, fI)
12861276 }
1287- let fK = fO._1
1288- let fJ = fO._2
1289- let fL = do(fF, fG, fJ, dp, dq, dr, ds, dt, du, dj)
1290- let bE = (fK - fG)
1291- let fM = if ((bE > 0))
1292- then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
1277+ let fJ = fM._1
1278+ let fI = fM._2
1279+ let fK = dr(fE, fF, fI, ds, dt, dp)
1280+ let bI = (fJ - fF)
1281+ let fL = if ((bI > 0))
1282+ then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
12931283 else nil
1294- (dv(ax, au, fF, fL) ++ fM)
1295- }
1284+ (dB(aC, az, fE, fK) ++ fL)
1285+ })
12961286
12971287
12981288
1299-@Callable(ad)
1300-func initNewPool (au,ak,fP,fQ,fR,fS,fT,fU) = if (if ((au != a))
1301- then (au != b)
1289+@Callable(ag)
1290+func capitalizeExSwopFi (aC,az,fE,fF,fG,dv,dw,dx,dy,dz,dA,dp) = valueOrElse(af(ag), {
1291+ let fN = if (fG)
1292+ then cJ(az, aC)
1293+ else {
1294+ let fI = if ((az == a))
1295+ then ab
1296+ else ac
1297+ $Tuple2(fF, fI)
1298+ }
1299+ let fJ = fN._1
1300+ let fI = fN._2
1301+ let fK = du(fE, fF, fI, dv, dw, dx, dy, dz, dA, dp)
1302+ let bI = (fJ - fF)
1303+ let fL = if ((bI > 0))
1304+ then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
1305+ else nil
1306+ (dB(aC, az, fE, fK) ++ fL)
1307+ })
1308+
1309+
1310+
1311+@Callable(ag)
1312+func initNewPool (az,ap,fO,fP,fQ,fR,fS,fT) = valueOrElse(af(ag), if (if ((az != a))
1313+ then (az != b)
13021314 else false)
13031315 then throw("Wrong type")
13041316 else {
1305- let fV = at(Address(fromBase58String(ak)), au)
1306- let ao = fV._1
1307- let ap = fV._2
1308- let fW = fV._3
1309- let fX = fV._4
1310- let aq = fV._5
1311-[IntegerEntry((ak + D), fP), IntegerEntry((ak + E), fQ), IntegerEntry((ak + F), fR), IntegerEntry((ak + G), fS), IntegerEntry((ak + H), fT), IntegerEntry((ak + I), fU), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
1312- }
1317+ let fU = ay(Address(fromBase58String(ap)), az)
1318+ let at = fU._1
1319+ let au = fU._2
1320+ let fV = fU._3
1321+ let fW = fU._4
1322+ let av = fU._5
1323+[IntegerEntry((ap + D), fO), IntegerEntry((ap + E), fP), IntegerEntry((ap + F), fQ), IntegerEntry((ap + G), fR), IntegerEntry((ap + H), fS), IntegerEntry((ap + I), fT), IntegerEntry((ap + B), 0), IntegerEntry((ap + C), 0), StringEntry((L + ap), az), StringEntry((av + M), ap)]
1324+ })
13131325
13141326
1315-
1316-@Callable(ad)
1317-func capitalizeTest (ax,ba,dw,dx) = {
1318- let ak = Address(fromBase58String(ax))
1319- let fY = at(ak, ba)
1320- let dz = fY._1
1321- let dA = fY._2
1322- let ar = fY._3
1323- let as = fY._4
1324- let aq = fY._5
1325- let fZ = if ((dw == dz))
1326- then $Tuple2(dx, 0)
1327- else $Tuple2(0, dx)
1328- let bs = fZ._1
1329- let bt = fZ._2
1330- let ga = cG(ba, ax, i, bs, dz, bt, dA, ar, as, aq)
1331- let cR = ga._1
1332- let dD = ga._2
1333- let dE = valueOrElse(getInteger(this, (ax + B)), 0)
1334- let dF = valueOrElse(getInteger(this, (ax + C)), 0)
1335- let dG = aw(ax)
1336- let dH = ay(ax)
1337- let dI = fraction(dH, j, dG)
1338- let dJ = fraction(cR, dI, j)
1339- let dK = (cR - dJ)
1340- let dL = if ((dH > 0))
1341- then (dE + fraction(dJ, k, dH))
1342- else 0
1343- let dM = if (((dG - dH) > 0))
1344- then (dF + fraction(dK, k, (dG - dH)))
1345- else 0
1346- let dN = fraction(dJ, aB(ax, d), l)
1347- let dO = fraction(dK, aB(ax, c), l)
1348- let dP = bN(ax, ba, aq, (dN + dO))
1349- if ((dP == dP))
1350- then ([IntegerEntry((ax + B), dL), IntegerEntry((ax + C), dM), IntegerEntry((ax + z), ((dG + cR) - dP)), IntegerEntry((ax + A), ((dH + dJ) - dN)), ScriptTransfer(W, (dN + dO), fromBase58String(aq))] ++ bn(dz, dA, aq))
1351- else throw("Strict value is not equal to itself.")
1352- }
1353-
1354-
1355-
1356-@Callable(ad)
1357-func claimFarmedTest (au,ax) = if ((au == a))
1358- then {
1359- let cE = ae(aa)
1360- if ((cE == cE))
1361- then {
1362- let bS = invoke(aD(), "claim", [ax], nil)
1363- if ((bS == bS))
1364- then {
1365- let cF = ae(aa)
1366- $Tuple2(nil, $Tuple2((cF - cE), aa))
1367- }
1368- else throw("Strict value is not equal to itself.")
1369- }
1370- else throw("Strict value is not equal to itself.")
1371- }
1372- else if ((au == b))
1373- then {
1374- let cE = ae(ab)
1375- if ((cE == cE))
1376- then {
1377- let bS = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
1378- if ((bS == bS))
1379- then {
1380- let cF = ae(ab)
1381- $Tuple2(nil, $Tuple2((cF - cE), ab))
1382- }
1383- else throw("Strict value is not equal to itself.")
1384- }
1385- else throw("Strict value is not equal to itself.")
1386- }
1387- else throw("Wrong pool type")
1388-
1389-
1390-@Verifier(gb)
1391-func gc () = sigVerify(gb.bodyBytes, gb.proofs[0], gb.senderPublicKey)
1327+@Verifier(fX)
1328+func fY () = sigVerify(fX.bodyBytes, fX.proofs[0], fX.senderPublicKey)
13921329
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "SF"
55
66 let b = "WX"
77
88 let c = "capNoLoan"
99
1010 let d = "capLoan"
1111
1212 let e = "stopLossNoLoan"
1313
1414 let f = "stopLossLoan"
1515
1616 let g = "loan"
1717
1818 let h = "noLoan"
1919
2020 let i = "noFee"
2121
2222 let j = 100000000
2323
2424 let k = 10000000000
2525
2626 let l = 1000000
2727
2828 let m = "A_asset_balance"
2929
3030 let n = "B_asset_balance"
3131
3232 let o = "A_asset_id"
3333
3434 let p = "B_asset_id"
3535
3636 let q = "share_asset_id"
3737
3838 let r = "share_asset_supply"
3939
4040 let s = "commission"
4141
4242 let t = "_user_position"
4343
4444 let u = "_user_position_pool"
4545
4646 let v = "_user_position_borrow_amount"
4747
4848 let w = "_user_position_borrow_asset_id"
4949
5050 let x = "_user_position_number"
5151
5252 let y = "_user_position_interest"
5353
5454 let z = "_pool_total"
5555
5656 let A = "_pool_total_loan"
5757
5858 let B = "_pool_interest_loan"
5959
6060 let C = "_pool_interest_no_loan"
6161
6262 let D = "_axly_fee_without_loan"
6363
6464 let E = "_axly_fee_with_loan"
6565
6666 let F = "_axly_fee_cap_with_loan"
6767
6868 let G = "_axly_fee_cap_no_loan"
6969
7070 let H = "_axly_fee_stoploss_with_loan"
7171
7272 let I = "_axly_fee_stoploss_no_loan"
7373
7474 let J = "_request_id"
7575
7676 let K = "requests_iter"
7777
7878 let L = "pool_"
7979
8080 let M = "_pool_share_id"
8181
8282 let N = "_pool_cap_change"
8383
8484 let O = "last_price"
8585
8686 let P = "_stop_loss"
8787
8888 let Q = "axly_money_box"
8989
9090 let R = "swopfi_farming_addr"
9191
9292 let S = "lend_service_addr"
9393
94-let T = "price_oracle"
94+let T = "admin_call_pub_key"
9595
96-let U = "exchange_contract"
96+let U = "price_oracle"
9797
98-let V = "wx_swap_contract"
98+let V = "exchange_contract"
9999
100-let W = Address(fromBase58String(valueOrErrorMessage(getString(this, Q), "No axly moneyBox address")))
100+let W = "wx_swap_contract"
101101
102-let X = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "No exchange contract address")))
102+let X = Address(fromBase58String(valueOrErrorMessage(getString(this, Q), "No axly moneyBox address")))
103103
104-let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No price oracle address")))
104+let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No exchange contract address")))
105105
106-let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No wx swap address")))
106+let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "No price oracle address")))
107107
108-let aa = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
108+let aa = Address(fromBase58String(valueOrErrorMessage(getString(this, W), "No wx swap address")))
109109
110-let ab = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
110+let ab = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
111111
112-func ac (ad) = if ((ad.caller == this))
112+let ac = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
113+
114+func ad () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get lend service addr")))
115+
116+
117+func ae () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, T), "Can't get lend service addr")))
118+
119+
120+func af (ag) = if ((ag.caller == ae()))
121+ then unit
122+ else throw("Only admin can call this function")
123+
124+
125+func ah (ag) = if ((ag.caller == this))
113126 then unit
114127 else throw("Only contract itself can call this function")
115128
116129
117-func ae (af) = {
118- let ag = af
119- if ($isInstanceOf(ag, "ByteVector"))
130+func ai (ag) = if ((ag.caller == ad()))
131+ then unit
132+ else throw("Only land contract can call this function")
133+
134+
135+func aj (ak) = {
136+ let al = ak
137+ if ($isInstanceOf(al, "ByteVector"))
120138 then {
121- let ah = ag
122- assetBalance(this, ah)
139+ let am = al
140+ assetBalance(this, am)
123141 }
124- else if ($isInstanceOf(ag, "Unit"))
142+ else if ($isInstanceOf(al, "Unit"))
125143 then {
126- let ai = ag
144+ let an = al
127145 wavesBalance(this).available
128146 }
129147 else throw("Match error")
130148 }
131149
132150
133-func aj (ak) = $Tuple5(valueOrErrorMessage(getString(ak, o), "Can't get pool A asset id"), valueOrErrorMessage(getString(ak, p), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(ak, m), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(ak, n), "Can't get pool B asset balance"), valueOrErrorMessage(getString(ak, q), "Can't get share asset id"))
151+func ao (ap) = $Tuple5(valueOrErrorMessage(getString(ap, o), "Can't get pool A asset id"), valueOrErrorMessage(getString(ap, p), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(ap, m), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(ap, n), "Can't get pool B asset balance"), valueOrErrorMessage(getString(ap, q), "Can't get share asset id"))
134152
135153
136-func al (ak) = {
137- let am = {
138- let an = invoke(ak, "getPoolConfigWrapperREADONLY", nil, nil)
139- if ($isInstanceOf(an, "List[Any]"))
140- then an
141- else throw(($getType(an) + " couldn't be cast to List[Any]"))
154+func aq (ap) = {
155+ let ar = {
156+ let as = invoke(ap, "getPoolConfigWrapperREADONLY", nil, nil)
157+ if ($isInstanceOf(as, "List[Any]"))
158+ then as
159+ else throw(($getType(as) + " couldn't be cast to List[Any]"))
142160 }
143- if ((am == am))
161+ if ((ar == ar))
144162 then {
145- let ao = valueOrErrorMessage({
146- let an = am[4]
147- if ($isInstanceOf(an, "String"))
148- then an
163+ let at = valueOrErrorMessage({
164+ let as = ar[4]
165+ if ($isInstanceOf(as, "String"))
166+ then as
149167 else unit
150168 }, "Can't get pool A asset id")
151- let ap = valueOrErrorMessage({
152- let an = am[5]
153- if ($isInstanceOf(an, "String"))
154- then an
169+ let au = valueOrErrorMessage({
170+ let as = ar[5]
171+ if ($isInstanceOf(as, "String"))
172+ then as
155173 else unit
156174 }, "Can't get pool B asset id")
157- let aq = valueOrErrorMessage({
158- let an = am[3]
159- if ($isInstanceOf(an, "String"))
160- then an
175+ let av = valueOrErrorMessage({
176+ let as = ar[3]
177+ if ($isInstanceOf(as, "String"))
178+ then as
161179 else unit
162180 }, "Can't get pool LP asset id")
163- let ar = {
164- let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ao], nil)
165- if ($isInstanceOf(an, "Int"))
166- then an
167- else throw(($getType(an) + " couldn't be cast to Int"))
181+ let aw = {
182+ let as = invoke(ap, "getAccBalanceWrapperREADONLY", [at], nil)
183+ if ($isInstanceOf(as, "Int"))
184+ then as
185+ else throw(($getType(as) + " couldn't be cast to Int"))
168186 }
169- if ((ar == ar))
187+ if ((aw == aw))
170188 then {
171- let as = {
172- let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ap], nil)
173- if ($isInstanceOf(an, "Int"))
174- then an
175- else throw(($getType(an) + " couldn't be cast to Int"))
189+ let ax = {
190+ let as = invoke(ap, "getAccBalanceWrapperREADONLY", [au], nil)
191+ if ($isInstanceOf(as, "Int"))
192+ then as
193+ else throw(($getType(as) + " couldn't be cast to Int"))
176194 }
177- if ((as == as))
178- then $Tuple5(ao, ap, ar, as, aq)
195+ if ((ax == ax))
196+ then $Tuple5(at, au, aw, ax, av)
179197 else throw("Strict value is not equal to itself.")
180198 }
181199 else throw("Strict value is not equal to itself.")
182200 }
183201 else throw("Strict value is not equal to itself.")
184202 }
185203
186204
187-func at (ak,au) = if ((au == a))
188- then aj(ak)
189- else if ((au == b))
190- then al(ak)
205+func ay (ap,az) = if ((az == a))
206+ then ao(ap)
207+ else if ((az == b))
208+ then aq(ap)
191209 else throw("Wrong pool type")
192210
193211
194-func av (ak,au,aq) = if ((au == a))
195- then valueOrErrorMessage(getInteger(ak, r), "Can't get share asset supply")
196- else if ((au == b))
197- then valueOrErrorMessage(assetInfo(fromBase58String(aq)), "Wrong ShareId").quantity
212+func aA (ap,az,av) = if ((az == a))
213+ then valueOrErrorMessage(getInteger(ap, r), "Can't get share asset supply")
214+ else if ((az == b))
215+ then valueOrErrorMessage(assetInfo(fromBase58String(av)), "Wrong ShareId").quantity
198216 else throw("Wrong pool type")
199217
200218
201-func aw (ax) = valueOrElse(getInteger(this, (ax + z)), 0)
219+func aB (aC) = valueOrElse(getInteger(this, (aC + z)), 0)
202220
203221
204-func ay (ax) = valueOrElse(getInteger(this, (ax + A)), 0)
222+func aD (aC) = valueOrElse(getInteger(this, (aC + A)), 0)
205223
206224
207-func az (aA) = (valueOrElse(getInteger(this, (aA + x)), 0) + 1)
225+func aE (aF) = (valueOrElse(getInteger(this, (aF + x)), 0) + 1)
208226
209227
210-func aB (ax,aC) = if ((aC == d))
211- then getIntegerValue(this, (ax + G))
212- else if ((aC == c))
213- then getIntegerValue(this, (ax + F))
214- else if ((aC == g))
215- then getIntegerValue(this, (ax + E))
216- else if ((aC == h))
217- then getIntegerValue(this, (ax + D))
218- else if ((aC == i))
228+func aG (aC,aH) = if ((aH == d))
229+ then getIntegerValue(this, (aC + G))
230+ else if ((aH == c))
231+ then getIntegerValue(this, (aC + F))
232+ else if ((aH == g))
233+ then getIntegerValue(this, (aC + E))
234+ else if ((aH == h))
235+ then getIntegerValue(this, (aC + D))
236+ else if ((aH == i))
219237 then 0
220238 else throw("Wrong fee type")
221239
222240
223-func aD () = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get swopfi farming addr")))
241+func aI () = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get swopfi farming addr")))
224242
225243
226-func aE (ak) = {
227- let aF = Address(fromBase58String(valueOrErrorMessage(getString(ak, "%s__factoryContract"), "Can't get WX factory contract addr")))
228- let aG = split(valueOrErrorMessage(getString(aF, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
229- Address(fromBase58String(aG[1]))
244+func aJ (ap) = {
245+ let aK = Address(fromBase58String(valueOrErrorMessage(getString(ap, "%s__factoryContract"), "Can't get WX factory contract addr")))
246+ let aL = split(valueOrErrorMessage(getString(aK, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
247+ Address(fromBase58String(aL[1]))
230248 }
231249
232250
233-func aH () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get lend service addr")))
234-
235-
236-func aI (af) = {
237- let ag = af
238- if ($isInstanceOf(ag, "ByteVector"))
251+func aM (ak) = {
252+ let al = ak
253+ if ($isInstanceOf(al, "ByteVector"))
239254 then {
240- let ah = ag
241- toBase58String(ah)
255+ let am = al
256+ toBase58String(am)
242257 }
243- else if ($isInstanceOf(ag, "Unit"))
258+ else if ($isInstanceOf(al, "Unit"))
244259 then {
245- let ai = ag
260+ let an = al
246261 "WAVES"
247262 }
248263 else throw("Match error")
249264 }
250265
251266
252-func aJ (af) = if ((af == "WAVES"))
267+func aN (ak) = if ((ak == "WAVES"))
253268 then unit
254- else fromBase58String(af)
269+ else fromBase58String(ak)
255270
256271
257-func aK (af) = if ((af == "WAVES"))
272+func aO (ak) = if ((ak == "WAVES"))
258273 then 8
259274 else {
260- let ag = assetInfo(fromBase58String(af))
261- if ($isInstanceOf(ag, "Asset"))
275+ let al = assetInfo(fromBase58String(ak))
276+ if ($isInstanceOf(al, "Asset"))
262277 then {
263- let aL = ag
264- aL.decimals
278+ let aP = al
279+ aP.decimals
265280 }
266281 else throw("Can't find asset")
267282 }
268283
269284
270-func aM (af) = pow(10, 0, aK(af), 0, 0, DOWN)
285+func aQ (ak) = pow(10, 0, aO(ak), 0, 0, DOWN)
271286
272287
273-func aN (aO) = {
274- func aP (aQ,af) = {
275- let aR = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
276- if ($isInstanceOf(an, "(Int, Int)"))
277- then an
278- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
279- (aQ :+ aR)
288+func aR (aS) = {
289+ func aT (aU,ak) = {
290+ let aV = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
291+ if ($isInstanceOf(as, "(Int, Int)"))
292+ then as
293+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
294+ (aU :+ aV)
280295 }
281296
282- let aS = aO
283- let aT = size(aS)
284- let aU = nil
285- func aV (aW,aX) = if ((aX >= aT))
286- then aW
287- else aP(aW, aS[aX])
297+ let aW = aS
298+ let aX = size(aW)
299+ let aY = nil
300+ func aZ (ba,bb) = if ((bb >= aX))
301+ then ba
302+ else aT(ba, aW[bb])
288303
289- func aY (aW,aX) = if ((aX >= aT))
290- then aW
304+ func bc (ba,bb) = if ((bb >= aX))
305+ then ba
291306 else throw("List size exceeds 50")
292307
293- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 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)
308+ bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 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)
294309 }
295310
296311
297-func aZ (aq) = {
298- let ax = valueOrErrorMessage(getString(this, (aq + M)), "Can't find pool addr by share id")
299- let ak = Address(fromBase58String(ax))
300- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
301- let bb = at(ak, ba)
302- let ao = bb._1
303- let ap = bb._2
304- let bc = bb._3
305- let bd = bb._4
306- let be = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
307- if ($isInstanceOf(an, "(Int, Int)"))
308- then an
309- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
310- let bf = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
311- if ($isInstanceOf(an, "(Int, Int)"))
312- then an
313- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
314- let bg = av(ak, ba, aq)
315- let bh = pow(10, 0, aK(ao), 0, 0, DOWN)
316- let bi = pow(10, 0, aK(ap), 0, 0, DOWN)
317- let bj = pow(10, 0, aK(aq), 0, 0, DOWN)
318- let bk = (fraction(bc, be, bh) + fraction(bd, bf, bi))
319- fraction(bk, bj, bg)
312+func bd (av) = {
313+ let aC = valueOrErrorMessage(getString(this, (av + M)), "Can't find pool addr by share id")
314+ let ap = Address(fromBase58String(aC))
315+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
316+ let bf = ay(ap, be)
317+ let at = bf._1
318+ let au = bf._2
319+ let bg = bf._3
320+ let bh = bf._4
321+ let bi = ( let as = invoke(Z, "getTWAP60", [at, false], nil)
322+ if ($isInstanceOf(as, "(Int, Int)"))
323+ then as
324+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
325+ let bj = ( let as = invoke(Z, "getTWAP60", [au, false], nil)
326+ if ($isInstanceOf(as, "(Int, Int)"))
327+ then as
328+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
329+ let bk = aA(ap, be, av)
330+ let bl = pow(10, 0, aO(at), 0, 0, DOWN)
331+ let bm = pow(10, 0, aO(au), 0, 0, DOWN)
332+ let bn = pow(10, 0, aO(av), 0, 0, DOWN)
333+ let bo = (fraction(bg, bi, bl) + fraction(bh, bj, bm))
334+ fraction(bo, bn, bk)
320335 }
321336
322337
323-func bl (bm) = {
324- func aP (aQ,aq) = (aQ :+ aZ(aq))
338+func bp (bq) = {
339+ func aT (aU,av) = (aU :+ bd(av))
325340
326- let aS = bm
327- let aT = size(aS)
328- let aU = nil
329- func aV (aW,aX) = if ((aX >= aT))
330- then aW
331- else aP(aW, aS[aX])
341+ let aW = bq
342+ let aX = size(aW)
343+ let aY = nil
344+ func aZ (ba,bb) = if ((bb >= aX))
345+ then ba
346+ else aT(ba, aW[bb])
332347
333- func aY (aW,aX) = if ((aX >= aT))
334- then aW
348+ func bc (ba,bb) = if ((bb >= aX))
349+ then ba
335350 else throw("List size exceeds 20")
336351
337- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
352+ bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
338353 }
339354
340355
341-func bn (ao,ap,aq) = {
342- let bo = aN([ao, ap])
343- let bp = aZ(aq)
344- let bq = [toString(bo[0]), toString(bo[1]), toString(bp)]
345-[StringEntry(O, makeString(bq, ","))]
356+func br (at,au,av) = {
357+ let bs = aR([at, au])
358+ let bt = bd(av)
359+ let bu = [toString(bs[0]), toString(bs[1]), toString(bt)]
360+[StringEntry(O, makeString(bu, ","))]
346361 }
347362
348363
349-func br (ba,ak,bs,ao,bt,ap,ar,as) = {
350- let bu = if ((ba == a))
364+func bv (be,ap,bw,at,bx,au,aw,ax) = {
365+ let by = if ((be == a))
351366 then $Tuple2(nil, nil)
352367 else $Tuple2(split({
353- let an = invoke(ak, "evaluatePutByAmountAssetREADONLY", [bs], nil)
354- if ($isInstanceOf(an, "String"))
355- then an
356- else throw(($getType(an) + " couldn't be cast to String"))
368+ let as = invoke(ap, "evaluatePutByAmountAssetREADONLY", [bw], nil)
369+ if ($isInstanceOf(as, "String"))
370+ then as
371+ else throw(($getType(as) + " couldn't be cast to String"))
357372 }, "__"), split({
358- let an = invoke(ak, "evaluatePutByPriceAssetREADONLY", [bt], nil)
359- if ($isInstanceOf(an, "String"))
360- then an
361- else throw(($getType(an) + " couldn't be cast to String"))
373+ let as = invoke(ap, "evaluatePutByPriceAssetREADONLY", [bx], nil)
374+ if ($isInstanceOf(as, "String"))
375+ then as
376+ else throw(($getType(as) + " couldn't be cast to String"))
362377 }, "__"))
363- if ((bu == bu))
378+ if ((by == by))
364379 then {
365- let bv = bu._2
366- let bw = bu._1
367- let bx = if ((ba == a))
368- then $Tuple2(fraction(j, bs, ar), fraction(j, bt, as))
369- else $Tuple2(parseIntValue(bw[1]), parseIntValue(bv[1]))
370- let by = bx._1
371- let bz = bx._2
372- let bA = if ((bz > by))
380+ let bz = by._2
381+ let bA = by._1
382+ let bB = if ((be == a))
383+ then $Tuple2(fraction(j, bw, aw), fraction(j, bx, ax))
384+ else $Tuple2(parseIntValue(bA[1]), parseIntValue(bz[1]))
385+ let bC = bB._1
386+ let bD = bB._2
387+ let bE = if ((bD > bC))
373388 then {
374- let bB = if ((ba == a))
375- then fraction(as, by, j, CEILING)
376- else parseIntValue(bw[8])
377- $Tuple5(bs, bB, (bt - bB), ap, bz)
389+ let bF = if ((be == a))
390+ then fraction(ax, bC, j, CEILING)
391+ else parseIntValue(bA[8])
392+ $Tuple5(bw, bF, (bx - bF), au, bD)
378393 }
379394 else {
380- let bB = if ((ba == a))
381- then fraction(ar, bz, j, CEILING)
382- else parseIntValue(bv[7])
383- $Tuple5(bB, bt, (bs - bB), ao, by)
395+ let bF = if ((be == a))
396+ then fraction(aw, bD, j, CEILING)
397+ else parseIntValue(bz[7])
398+ $Tuple5(bF, bx, (bw - bF), at, bC)
384399 }
385- let bC = bA._1
386- let bD = bA._2
387- let bE = bA._3
388- let bF = bA._4
389- let bG = bA._5
390- $Tuple5(bC, bD, bE, bF, bG)
400+ let bG = bE._1
401+ let bH = bE._2
402+ let bI = bE._3
403+ let bJ = bE._4
404+ let bK = bE._5
405+ $Tuple5(bG, bH, bI, bJ, bK)
391406 }
392407 else throw("Strict value is not equal to itself.")
393408 }
394409
395410
396-func bH (ak,ba,bs,ao,bt,ap) = {
397- let bI = [AttachedPayment(aJ(ao), bs), AttachedPayment(aJ(ap), bt)]
398- if ((ba == a))
399- then invoke(ak, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bI)
400- else invoke(ak, "put", [1000000, false], bI)
411+func bL (ap,be,bw,at,bx,au) = {
412+ let bM = [AttachedPayment(aN(at), bw), AttachedPayment(aN(au), bx)]
413+ if ((be == a))
414+ then invoke(ap, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bM)
415+ else invoke(ap, "put", [1000000, false], bM)
401416 }
402417
403418
404-func bJ (ak,ba,bB,bK) = {
405- let bI = [AttachedPayment(aJ(bK), bB)]
406- if ((ba == a))
407- then invoke(ak, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bI)
408- else invoke(ak, "putOneTkn", [0, false], bI)
419+func bN (ap,be,bF,bO) = {
420+ let bM = [AttachedPayment(aN(bO), bF)]
421+ if ((be == a))
422+ then invoke(ap, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bM)
423+ else invoke(ap, "putOneTkn", [0, false], bM)
409424 }
410425
411426
412-func bL (ax,ba,aq,bM) = {
413- let bI = [AttachedPayment(fromBase58String(aq), bM)]
414- if ((ba == a))
415- then invoke(aD(), "lockShareTokens", [ax, 0], bI)
416- else invoke(aE(addressFromStringValue(ax)), "stake", nil, bI)
427+func bP (aC,be,av,bQ) = {
428+ let bM = [AttachedPayment(fromBase58String(av), bQ)]
429+ if ((be == a))
430+ then invoke(aI(), "lockShareTokens", [aC, 0], bM)
431+ else invoke(aJ(addressFromStringValue(aC)), "stake", nil, bM)
417432 }
418433
419434
420-func bN (ax,ba,aq,bM) = {
421- let bO = if ((ba == a))
422- then $Tuple3(aD(), "withdrawShareTokens", [ax, bM])
423- else if ((ba == b))
424- then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, bM])
435+func bR (aC,be,av,bQ) = {
436+ let bS = if ((be == a))
437+ then $Tuple3(aI(), "withdrawShareTokens", [aC, bQ])
438+ else if ((be == b))
439+ then $Tuple3(aJ(Address(fromBase58String(aC))), "unstake", [av, bQ])
425440 else throw("Wrong pool type")
426- let bP = bO._1
427- let bQ = bO._2
428- let bR = bO._3
429- let bS = invoke(bP, bQ, bR, nil)
430- if ((bS == bS))
431- then bM
441+ let bT = bS._1
442+ let bU = bS._2
443+ let bV = bS._3
444+ let bW = invoke(bT, bU, bV, nil)
445+ if ((bW == bW))
446+ then bQ
432447 else throw("Strict value is not equal to itself.")
433448 }
434449
435450
436-func bT (ax,bU,bV,ar,as,bW,bX) = {
437- let ak = Address(fromBase58String(ax))
438- let bY = 1000000
439- let bZ = getIntegerValue(ak, s)
440- let ca = fraction(bW, bY, (bY - bZ))
441- let cb = if ((bX == bU))
451+func bX (aC,bY,bZ,aw,ax,ca,cb) = {
452+ let ap = Address(fromBase58String(aC))
453+ let cc = 1000000
454+ let cd = getIntegerValue(ap, s)
455+ let ce = fraction(ca, cc, (cc - cd))
456+ let cf = if ((cb == bY))
442457 then {
443- let cc = fraction(ar, ca, (as - ca))
444- $Tuple2(cc, bV)
458+ let cg = fraction(aw, ce, (ax - ce))
459+ $Tuple2(cg, bZ)
445460 }
446461 else {
447- let cc = fraction(as, ca, (ar - ca))
448- $Tuple2(cc, bU)
462+ let cg = fraction(ax, ce, (aw - ce))
463+ $Tuple2(cg, bY)
449464 }
450- let cc = cb._1
451- let cd = cb._2
452- $Tuple2(cd, cc)
465+ let cg = cf._1
466+ let ch = cf._2
467+ $Tuple2(ch, cg)
453468 }
454469
455470
456-func ce (ax,bU,bV,ar,as,bW,bX) = {
457- let cf = getIntegerValue(Z, "%s__protocolFee")
458- let cg = getIntegerValue(Z, "%s__poolFee")
459- let ch = toBigInt(100000000)
460- let ci = if ((bX == bU))
471+func ci (aC,bY,bZ,aw,ax,ca,cb) = {
472+ let cj = getIntegerValue(aa, "%s__protocolFee")
473+ let ck = getIntegerValue(aa, "%s__poolFee")
474+ let cl = toBigInt(100000000)
475+ let cm = if ((cb == bY))
461476 then {
462- let cc = fraction(ar, bW, (as - bW))
463- $Tuple2(cc, bV)
477+ let cg = fraction(aw, ca, (ax - ca))
478+ $Tuple2(cg, bZ)
464479 }
465480 else {
466- let cc = fraction(as, bW, (ar - bW))
467- $Tuple2(cc, bU)
481+ let cg = fraction(ax, ca, (aw - ca))
482+ $Tuple2(cg, bY)
468483 }
469- let cc = ci._1
470- let cd = ci._2
471- let cj = toInt(fraction(toBigInt(cc), ch, (ch - toBigInt((cf + cg)))))
472- $Tuple2(cd, cj)
484+ let cg = cm._1
485+ let ch = cm._2
486+ let cn = toInt(fraction(toBigInt(cg), cl, (cl - toBigInt((cj + ck)))))
487+ $Tuple2(ch, cn)
473488 }
474489
475490
476-func ck (au,ax,bU,bV,ar,as,bW,bX) = if ((au == a))
491+func co (az,aC,bY,bZ,aw,ax,ca,cb) = if ((az == a))
477492 then {
478- let cl = bT(ax, bU, bV, ar, as, bW, bX)
479- let cd = cl._1
480- let cc = cl._2
481- invoke(addressFromStringValue(ax), "callFunction", ["exchange", ["1"]], [AttachedPayment(aJ(cd), cc)])
493+ let cp = bX(aC, bY, bZ, aw, ax, ca, cb)
494+ let ch = cp._1
495+ let cg = cp._2
496+ invoke(addressFromStringValue(aC), "callFunction", ["exchange", ["1"]], [AttachedPayment(aN(ch), cg)])
482497 }
483498 else {
484- let cm = ce(ax, bU, bV, ar, as, bW, bX)
485- let cd = cm._1
486- let cc = cm._2
487- invoke(Z, "swap", [1, bX, toString(this)], [AttachedPayment(aJ(cd), cc)])
499+ let cq = ci(aC, bY, bZ, aw, ax, ca, cb)
500+ let ch = cq._1
501+ let cg = cq._2
502+ invoke(aa, "swap", [1, cb, toString(this)], [AttachedPayment(aN(ch), cg)])
488503 }
489504
490505
491-func cn (ba,ax,bs,ao,bt,ap,ar,as) = {
492- let ak = addressFromStringValue(ax)
493- if ((ba == a))
506+func cr (be,aC,bw,at,bx,au,aw,ax) = {
507+ let ap = addressFromStringValue(aC)
508+ if ((be == a))
494509 then {
495- let bS = {
496- let an = invoke(ak, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bs), toString(bt), "0"]], nil)
497- if ($isInstanceOf(an, "List[Any]"))
498- then an
499- else throw(($getType(an) + " couldn't be cast to List[Any]"))
510+ let bW = {
511+ let as = invoke(ap, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bw), toString(bx), "0"]], nil)
512+ if ($isInstanceOf(as, "List[Any]"))
513+ then as
514+ else throw(($getType(as) + " couldn't be cast to List[Any]"))
500515 }
501- if ((bS == bS))
502- then {
503- let an = bS[0]
504- if ($isInstanceOf(an, "Int"))
505- then an
506- else throw(($getType(an) + " couldn't be cast to Int"))
507- }
516+ if ((bW == bW))
517+ then $Tuple2({
518+ let as = bW[0]
519+ if ($isInstanceOf(as, "Int"))
520+ then as
521+ else throw(($getType(as) + " couldn't be cast to Int"))
522+ }, {
523+ let as = bW[1]
524+ if ($isInstanceOf(as, "Int"))
525+ then as
526+ else throw(($getType(as) + " couldn't be cast to Int"))
527+ })
508528 else throw("Strict value is not equal to itself.")
509529 }
510- else if ((ba == b))
530+ else if ((be == b))
511531 then {
512- let co = if (if ((bs > 0))
513- then (bt > 0)
532+ let cs = if (if ((bw > 0))
533+ then (bx > 0)
514534 else false)
515535 then {
516- let cp = br(ba, ak, bs, ao, bt, ap, ar, as)
517- let bC = cp._1
518- let bD = cp._2
519- let bE = cp._3
520- let cq = cp._4
521- let cr = cp._5
522- $Tuple3(bE, cq, cr)
536+ let ct = bv(be, ap, bw, at, bx, au, aw, ax)
537+ let bG = ct._1
538+ let bH = ct._2
539+ let bI = ct._3
540+ let cu = ct._4
541+ let cv = ct._5
542+ $Tuple3(bI, cu, cv)
523543 }
524- else if ((bs > 0))
525- then $Tuple3(bs, ao, 0)
526- else $Tuple3(bt, ap, 0)
527- let bE = co._1
528- let cq = co._2
529- let cs = co._3
530- let ct = if ((bE > 0))
544+ else if ((bw > 0))
545+ then $Tuple3(bw, at, 0)
546+ else $Tuple3(bx, au, 0)
547+ let bI = cs._1
548+ let cu = cs._2
549+ let cw = cs._3
550+ let cx = if ((bI > 0))
531551 then {
532- let bS = {
533- let an = invoke(ak, "putOneTknREADONLY", [cq, bE], nil)
534- if ($isInstanceOf(an, "(Int, Int, Int)"))
535- then an
536- else throw(($getType(an) + " couldn't be cast to (Int, Int, Int)"))
552+ let bW = {
553+ let as = invoke(ap, "putOneTknREADONLY", [cu, bI], nil)
554+ if ($isInstanceOf(as, "(Int, Int, Int)"))
555+ then as
556+ else throw(($getType(as) + " couldn't be cast to (Int, Int, Int)"))
537557 }
538- if ((bS == bS))
539- then bS._1
558+ if ((bW == bW))
559+ then $Tuple2(bW._1, bW._3)
540560 else throw("Strict value is not equal to itself.")
541561 }
542- else 0
543- (cs + ct)
562+ else $Tuple2(0, 0)
563+ let cy = cx._1
564+ let cz = cx._2
565+ $Tuple2((cw + cy), cz)
544566 }
545567 else throw("Wrong pool type")
546568 }
547569
548570
549-func cu (ba,ax,cr,aq,ao,ap,ar,as,cv,cw) = {
550- let ak = addressFromStringValue(ax)
551- let cx = if ((ba == a))
571+func cA (be,aC,cv,av,at,au,aw,ax,cB,cC) = {
572+ let ap = addressFromStringValue(aC)
573+ let cD = if ((be == a))
552574 then {
553- let bS = {
554- let an = invoke(ak, "callFunction", ["withdrawREADONLY", [toString(cr), toString(ar), toString(as)]], nil)
555- if ($isInstanceOf(an, "List[Any]"))
556- then an
557- else throw(($getType(an) + " couldn't be cast to List[Any]"))
575+ let bW = {
576+ let as = invoke(ap, "callFunction", ["withdrawREADONLY", [toString(cv), toString(aw), toString(ax)]], nil)
577+ if ($isInstanceOf(as, "List[Any]"))
578+ then as
579+ else throw(($getType(as) + " couldn't be cast to List[Any]"))
558580 }
559- if ((bS == bS))
581+ if ((bW == bW))
560582 then $Tuple2({
561- let an = bS[0]
562- if ($isInstanceOf(an, "Int"))
563- then an
564- else throw(($getType(an) + " couldn't be cast to Int"))
583+ let as = bW[0]
584+ if ($isInstanceOf(as, "Int"))
585+ then as
586+ else throw(($getType(as) + " couldn't be cast to Int"))
565587 }, {
566- let an = bS[1]
567- if ($isInstanceOf(an, "Int"))
568- then an
569- else throw(($getType(an) + " couldn't be cast to Int"))
588+ let as = bW[1]
589+ if ($isInstanceOf(as, "Int"))
590+ then as
591+ else throw(($getType(as) + " couldn't be cast to Int"))
570592 })
571593 else throw("Strict value is not equal to itself.")
572594 }
573- else if ((ba == b))
595+ else if ((be == b))
574596 then {
575- let cy = split({
576- let an = invoke(ak, "evaluateGetREADONLY", [aq, cr], nil)
577- if ($isInstanceOf(an, "String"))
578- then an
579- else throw(($getType(an) + " couldn't be cast to String"))
597+ let cE = split({
598+ let as = invoke(ap, "evaluateGetREADONLY", [av, cv], nil)
599+ if ($isInstanceOf(as, "String"))
600+ then as
601+ else throw(($getType(as) + " couldn't be cast to String"))
580602 }, "__")
581- if ((cy == cy))
582- then $Tuple2(parseIntValue(cy[1]), parseIntValue(cy[2]))
603+ if ((cE == cE))
604+ then $Tuple2(parseIntValue(cE[1]), parseIntValue(cE[2]))
583605 else throw("Strict value is not equal to itself.")
584606 }
585607 else throw("Wrong pool type")
586- let cz = cx._1
587- let cA = cx._2
588- if ((cv > 0))
608+ let cF = cD._1
609+ let cG = cD._2
610+ if ((cB > 0))
589611 then {
590- let cB = if (if ((cw == ao))
591- then (cv > cz)
612+ let cH = if (if ((cC == at))
613+ then (cB > cF)
592614 else false)
593- then (cv - cz)
594- else if (if ((cw == ap))
595- then (cv > cA)
615+ then (cB - cF)
616+ else if (if ((cC == au))
617+ then (cB > cG)
596618 else false)
597- then (cv - cA)
619+ then (cB - cG)
598620 else 0
599- let cC = if ((cB > 0))
600- then if ((ba == a))
601- then bT(ax, ao, ap, ar, as, cB, cw)
602- else ce(ax, ao, ap, ar, as, cB, cw)
621+ let cI = if ((cH > 0))
622+ then if ((be == a))
623+ then bX(aC, at, au, aw, ax, cH, cC)
624+ else ci(aC, at, au, aw, ax, cH, cC)
603625 else $Tuple2("", 0)
604- let cd = cC._1
605- let cc = cC._2
606- if ((cw == ao))
607- then $Tuple2(((cz + cB) - cv), (cA - cc))
608- else $Tuple2((cz - cc), ((cA + cB) - cv))
626+ let ch = cI._1
627+ let cg = cI._2
628+ if ((cC == at))
629+ then $Tuple2(((cF + cH) - cB), (cG - cg))
630+ else $Tuple2((cF - cg), ((cG + cH) - cB))
609631 }
610- else $Tuple2(cz, cA)
632+ else $Tuple2(cF, cG)
611633 }
612634
613635
614-func cD (au,ax) = if ((au == a))
636+func cJ (az,aC) = if ((az == a))
615637 then {
616- let cE = ae(aa)
617- if ((cE == cE))
638+ let cK = aj(ab)
639+ if ((cK == cK))
618640 then {
619- let bS = invoke(aD(), "claim", [ax], nil)
620- if ((bS == bS))
641+ let bW = invoke(aI(), "claim", [aC], nil)
642+ if ((bW == bW))
621643 then {
622- let cF = ae(aa)
623- $Tuple2((cF - cE), aa)
644+ let cL = aj(ab)
645+ $Tuple2((cL - cK), ab)
624646 }
625647 else throw("Strict value is not equal to itself.")
626648 }
627649 else throw("Strict value is not equal to itself.")
628650 }
629- else if ((au == b))
651+ else if ((az == b))
630652 then {
631- let cE = ae(ab)
632- if ((cE == cE))
653+ let cK = aj(ac)
654+ if ((cK == cK))
633655 then {
634- let bS = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
635- if ((bS == bS))
656+ let bW = invoke(aJ(Address(fromBase58String(aC))), "claimWX", [aC], nil)
657+ if ((bW == bW))
636658 then {
637- let cF = ae(ab)
638- $Tuple2((cF - cE), ab)
659+ let cL = aj(ac)
660+ $Tuple2((cL - cK), ac)
639661 }
640662 else throw("Strict value is not equal to itself.")
641663 }
642664 else throw("Strict value is not equal to itself.")
643665 }
644666 else throw("Wrong pool type")
645667
646668
647-func cG (ba,ax,aC,bs,ao,bt,ap,ar,as,cH) = {
648- let cI = ae(fromBase58String(cH))
649- if ((cI == cI))
669+func cM (be,aC,aH,bw,at,bx,au,aw,ax,cN) = {
670+ let cO = aj(fromBase58String(cN))
671+ if ((cO == cO))
650672 then {
651- let ak = addressFromStringValue(ax)
652- let cJ = if (if ((bs > 0))
653- then (bt > 0)
673+ let ap = addressFromStringValue(aC)
674+ let cP = if (if ((bw > 0))
675+ then (bx > 0)
654676 else false)
655677 then {
656- let cK = br(ba, ak, bs, ao, bt, ap, ar, as)
657- let bC = cK._1
658- let bD = cK._2
659- let bE = cK._3
660- let cq = cK._4
661- let bS = bH(ak, ba, bC, ao, bD, ap)
662- if ((bS == bS))
663- then $Tuple2(bE, cq)
678+ let cQ = bv(be, ap, bw, at, bx, au, aw, ax)
679+ let bG = cQ._1
680+ let bH = cQ._2
681+ let bI = cQ._3
682+ let cu = cQ._4
683+ let bW = bL(ap, be, bG, at, bH, au)
684+ if ((bW == bW))
685+ then $Tuple2(bI, cu)
664686 else throw("Strict value is not equal to itself.")
665687 }
666- else if ((bs > 0))
667- then $Tuple2(bs, ao)
668- else if ((bt > 0))
669- then $Tuple2(bt, ap)
688+ else if ((bw > 0))
689+ then $Tuple2(bw, at)
690+ else if ((bx > 0))
691+ then $Tuple2(bx, au)
670692 else throw("pmts must be > 0")
671- let bE = cJ._1
672- let cq = cJ._2
673- let bS = if ((bE > 0))
674- then bJ(ak, ba, bE, cq)
693+ let bI = cP._1
694+ let cu = cP._2
695+ let bW = if ((bI > 0))
696+ then bN(ap, be, bI, cu)
675697 else nil
676- if ((bS == bS))
698+ if ((bW == bW))
677699 then {
678- let cL = ae(fromBase58String(cH))
679- let cM = (cL - cI)
680- let cN = fraction(cM, aB(ax, aC), l)
681- let cO = (cM - cN)
682- if ((0 >= cO))
700+ let cR = aj(fromBase58String(cN))
701+ let cS = (cR - cO)
702+ let cT = fraction(cS, aG(aC, aH), l)
703+ let cU = (cS - cT)
704+ if ((0 >= cU))
683705 then throw("amount of staked sharetokens must be > 0")
684706 else {
685- let cP = bL(ax, ba, cH, cO)
686- if ((cP == cP))
687- then $Tuple2(cO, cN)
707+ let cV = bP(aC, be, cN, cU)
708+ if ((cV == cV))
709+ then $Tuple2(cU, cT)
688710 else throw("Strict value is not equal to itself.")
689711 }
690712 }
691713 else throw("Strict value is not equal to itself.")
692714 }
693715 else throw("Strict value is not equal to itself.")
694716 }
695717
696718
697-func cQ (ax,aA,cR,cN,cS,aq,au,cT) = {
698- let cU = aw(ax)
699- let cV = ay(ax)
700- let cW = if (cT)
701- then $Tuple2(getIntegerValue(this, (ax + B)), (cV + cR))
702- else $Tuple2(getIntegerValue(this, (ax + C)), cV)
703- let cX = cW._1
704- let cY = cW._2
705-[IntegerEntry((ax + z), (cU + cR)), IntegerEntry((ax + A), cY), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + t), cR), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + y), cX), StringEntry((((aA + "_") + toString(cS)) + u), ax), IntegerEntry((aA + x), cS), ScriptTransfer(W, cN, fromBase58String(aq))]
719+func cW (aC,aF,cX,cT,cY,av,az,cZ) = {
720+ let da = aB(aC)
721+ let db = aD(aC)
722+ let dc = if (cZ)
723+ then $Tuple2(getIntegerValue(this, (aC + B)), (db + cX))
724+ else $Tuple2(getIntegerValue(this, (aC + C)), db)
725+ let dd = dc._1
726+ let de = dc._2
727+[IntegerEntry((aC + z), (da + cX)), IntegerEntry((aC + A), de), IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + t), cX), IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + y), dd), StringEntry((((aF + "_") + toString(cY)) + u), aC), IntegerEntry((aF + x), cY), ScriptTransfer(X, cT, fromBase58String(av))]
706728 }
707729
708730
709-func cZ (da,db,dc,dd,de,df,dg,dh,di,dj) = {
710- let dk = ae(aJ(da))
711- if ((dk == dk))
731+func df (dg,dh,di,dj,dk,dl,dm,dn,do,dp) = {
732+ let dq = aj(aN(dg))
733+ if ((dq == dq))
712734 then {
713- let bS = invoke(X, "swap", [dd, de, df, dg, dh, di, dj], [AttachedPayment(dc, db)])
714- if ((bS == bS))
715- then (ae(aJ(da)) - dk)
735+ let bW = invoke(Y, "swap", [dj, dk, dl, dm, dn, do, dp], [AttachedPayment(di, dh)])
736+ if ((bW == bW))
737+ then (aj(aN(dg)) - dq)
716738 else throw("Strict value is not equal to itself.")
717739 }
718740 else throw("Strict value is not equal to itself.")
719741 }
720742
721743
722-func dl (da,db,dc,dm,dn,dj) = {
723- let dk = ae(aJ(da))
724- if ((dk == dk))
744+func dr (dg,dh,di,ds,dt,dp) = {
745+ let dq = aj(aN(dg))
746+ if ((dq == dq))
725747 then {
726- let bS = invoke(X, "puzzleSwap", [dm, dn, dj], [AttachedPayment(dc, db)])
727- if ((bS == bS))
728- then (ae(aJ(da)) - dk)
748+ let bW = invoke(Y, "puzzleSwap", [ds, dt, dp], [AttachedPayment(di, dh)])
749+ if ((bW == bW))
750+ then (aj(aN(dg)) - dq)
729751 else throw("Strict value is not equal to itself.")
730752 }
731753 else throw("Strict value is not equal to itself.")
732754 }
733755
734756
735-func do (da,db,dc,dp,dq,dr,ds,dt,du,dj) = {
736- let dk = ae(aJ(da))
737- if ((dk == dk))
757+func du (dg,dh,di,dv,dw,dx,dy,dz,dA,dp) = {
758+ let dq = aj(aN(dg))
759+ if ((dq == dq))
738760 then {
739- let bS = invoke(X, "swopfiSwap", [dp, dq, dr, ds, dt, du, dj], [AttachedPayment(dc, db)])
740- if ((bS == bS))
741- then (ae(aJ(da)) - dk)
761+ let bW = invoke(Y, "swopfiSwap", [dv, dw, dx, dy, dz, dA, dp], [AttachedPayment(di, dh)])
762+ if ((bW == bW))
763+ then (aj(aN(dg)) - dq)
742764 else throw("Strict value is not equal to itself.")
743765 }
744766 else throw("Strict value is not equal to itself.")
745767 }
746768
747769
748-func dv (ax,ba,dw,dx) = {
749- let ak = Address(fromBase58String(ax))
750- let dy = at(ak, ba)
751- let dz = dy._1
752- let dA = dy._2
753- let ar = dy._3
754- let as = dy._4
755- let aq = dy._5
756- if (if ((dw != dz))
757- then (dw != dA)
770+func dB (aC,be,dC,dD) = {
771+ let ap = Address(fromBase58String(aC))
772+ let dE = ay(ap, be)
773+ let dF = dE._1
774+ let dG = dE._2
775+ let aw = dE._3
776+ let ax = dE._4
777+ let av = dE._5
778+ if (if ((dC != dF))
779+ then (dC != dG)
758780 else false)
759781 then throw("Wrong asset")
760782 else {
761- let dB = if ((dw == dz))
762- then $Tuple2(dx, 0)
763- else $Tuple2(0, dx)
764- let bs = dB._1
765- let bt = dB._2
766- let dC = cG(ba, ax, i, bs, dz, bt, dA, ar, as, aq)
767- let cR = dC._1
768- let dD = dC._2
769- let dE = valueOrElse(getInteger(this, (ax + B)), 0)
770- let dF = valueOrElse(getInteger(this, (ax + C)), 0)
771- let dG = aw(ax)
772- let dH = ay(ax)
773- let dI = fraction(dH, j, dG)
774- let dJ = fraction(cR, dI, j)
775- let dK = (cR - dJ)
776- let dL = if ((dH > 0))
777- then (dE + fraction(dJ, k, dH))
783+ let dH = if ((dC == dF))
784+ then $Tuple2(dD, 0)
785+ else $Tuple2(0, dD)
786+ let bw = dH._1
787+ let bx = dH._2
788+ let dI = cM(be, aC, i, bw, dF, bx, dG, aw, ax, av)
789+ let cX = dI._1
790+ let dJ = dI._2
791+ let dK = valueOrElse(getInteger(this, (aC + B)), 0)
792+ let dL = valueOrElse(getInteger(this, (aC + C)), 0)
793+ let dM = aB(aC)
794+ let dN = aD(aC)
795+ let dO = fraction(dN, j, dM)
796+ let dP = fraction(cX, dO, j)
797+ let dQ = (cX - dP)
798+ let dR = if ((dN > 0))
799+ then (dK + fraction(dP, k, dN))
778800 else 0
779- let dM = if (((dG - dH) > 0))
780- then (dF + fraction(dK, k, (dG - dH)))
801+ let dS = if (((dM - dN) > 0))
802+ then (dL + fraction(dQ, k, (dM - dN)))
781803 else 0
782- let dN = fraction(dJ, aB(ax, d), l)
783- let dO = fraction(dK, aB(ax, c), l)
784- let dP = bN(ax, ba, aq, (dN + dO))
785- if ((dP == dP))
786- then ([IntegerEntry((ax + B), dL), IntegerEntry((ax + C), dM), IntegerEntry((ax + z), ((dG + cR) - dP)), IntegerEntry((ax + A), ((dH + dJ) - dN)), ScriptTransfer(W, (dN + dO), fromBase58String(aq))] ++ bn(dz, dA, aq))
804+ let dT = fraction(dP, aG(aC, d), l)
805+ let dU = fraction(dQ, aG(aC, c), l)
806+ let dV = bR(aC, be, av, (dT + dU))
807+ if ((dV == dV))
808+ then ([IntegerEntry((aC + B), dR), IntegerEntry((aC + C), dS), IntegerEntry((aC + z), ((dM + cX) - dV)), IntegerEntry((aC + A), ((dN + dP) - dT)), ScriptTransfer(X, (dT + dU), fromBase58String(av))] ++ br(dF, dG, av))
787809 else throw("Strict value is not equal to itself.")
788810 }
789811 }
790812
791813
792-func dQ (ax,dR,dS,dT) = {
793- let ak = Address(fromBase58String(ax))
794- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
795- let dU = at(ak, ba)
796- let bU = dU._1
797- let bV = dU._2
798- let ar = dU._3
799- let as = dU._4
800- let aq = dU._5
801- let dV = ae(aJ(bU))
802- if ((dV == dV))
814+func dW (aC,dX,dY,dZ) = {
815+ let ap = Address(fromBase58String(aC))
816+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Unknown pool")
817+ let ea = ay(ap, be)
818+ let bY = ea._1
819+ let bZ = ea._2
820+ let aw = ea._3
821+ let ax = ea._4
822+ let av = ea._5
823+ let eb = aj(aN(bY))
824+ if ((eb == eb))
803825 then {
804- let dW = ae(aJ(bV))
805- if ((dW == dW))
826+ let ec = aj(aN(bZ))
827+ if ((ec == ec))
806828 then {
807- let bS = if ((ba == a))
808- then invoke(ak, "callFunction", ["withdraw", [toString(dR)]], nil)
829+ let bW = if ((be == a))
830+ then invoke(ap, "callFunction", ["withdraw", [toString(dX)]], nil)
809831 else {
810- let bS = bN(ax, ba, aq, dR)
811- if ((bS == bS))
812- then invoke(ak, "get", nil, [AttachedPayment(aJ(aq), dR)])
832+ let bW = bR(aC, be, av, dX)
833+ if ((bW == bW))
834+ then invoke(ap, "get", nil, [AttachedPayment(aN(av), dX)])
813835 else throw("Strict value is not equal to itself.")
814836 }
815- if ((bS == bS))
837+ if ((bW == bW))
816838 then {
817- let dX = ae(aJ(bU))
818- let dY = ae(aJ(bV))
819- let dZ = $Tuple2((dX - dV), (dY - dW))
820- let ea = dZ._1
821- let eb = dZ._2
822- let ec = if ((dS > 0))
839+ let ed = aj(aN(bY))
840+ let ee = aj(aN(bZ))
841+ let ef = $Tuple2((ed - eb), (ee - ec))
842+ let eg = ef._1
843+ let eh = ef._2
844+ let ei = if ((dY > 0))
823845 then {
824- let cB = if (if ((dT == bU))
825- then (dS > ea)
846+ let cH = if (if ((dZ == bY))
847+ then (dY > eg)
826848 else false)
827- then (dS - ea)
828- else if (if ((dT == bV))
829- then (dS > eb)
849+ then (dY - eg)
850+ else if (if ((dZ == bZ))
851+ then (dY > eh)
830852 else false)
831- then (dS - eb)
853+ then (dY - eh)
832854 else 0
833- let ed = if ((cB > 0))
834- then ck(ba, ax, bU, bV, ar, as, cB, dT)
855+ let ej = if ((cH > 0))
856+ then co(be, aC, bY, bZ, aw, ax, cH, dZ)
835857 else 0
836- if ((ed == ed))
858+ if ((ej == ej))
837859 then {
838- let ee = ae(aJ(bU))
839- let ef = ae(aJ(bV))
840- $Tuple2((ee - dV), (ef - dW))
860+ let ek = aj(aN(bY))
861+ let el = aj(aN(bZ))
862+ $Tuple2((ek - eb), (el - ec))
841863 }
842864 else throw("Strict value is not equal to itself.")
843865 }
844- else $Tuple2(ea, eb)
845- let eg = ec._1
846- let eh = ec._2
847- $Tuple7(eg, bU, eh, bV, dX, dY, aq)
866+ else $Tuple2(eg, eh)
867+ let em = ei._1
868+ let en = ei._2
869+ $Tuple7(em, bY, en, bZ, ed, ee, av)
848870 }
849871 else throw("Strict value is not equal to itself.")
850872 }
851873 else throw("Strict value is not equal to itself.")
852874 }
853875 else throw("Strict value is not equal to itself.")
854876 }
855877
856878
857-func ei (aA,ax,ej,ek) = {
858- let el = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + t)), "Unknown position")
859- let em = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + y))
860- let en = if (ek)
861- then getIntegerValue(this, (ax + B))
862- else getIntegerValue(this, (ax + C))
863- (el + fraction(el, (en - em), k))
879+func eo (aF,aC,ep,eq) = {
880+ let er = valueOrErrorMessage(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + t)), "Unknown position")
881+ let es = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + y))
882+ let et = if (eq)
883+ then getIntegerValue(this, (aC + B))
884+ else getIntegerValue(this, (aC + C))
885+ (er + fraction(er, (et - es), k))
864886 }
865887
866888
867-func eo (aA,ax,ej,ep) = {
868- let el = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + t)), "Unknown position")
869- let em = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + y))
870- let cv = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + v)), 0)
871- let dR = ei(aA, ax, ej, (cv > 0))
872- let eq = aw(ax)
873- let er = Address(fromBase58String(aA))
874- let dT = valueOrElse(getString(this, (((((ax + "_") + aA) + "_") + ej) + w)), "")
875- let dS = if ((cv > 0))
889+func eu (aF,aC,ep,ev) = {
890+ let er = valueOrErrorMessage(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + t)), "Unknown position")
891+ let es = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + y))
892+ let cB = valueOrElse(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + v)), 0)
893+ let dX = eo(aF, aC, ep, (cB > 0))
894+ let ew = aB(aC)
895+ let ex = Address(fromBase58String(aF))
896+ let dZ = valueOrElse(getString(this, (((((aC + "_") + aF) + "_") + ep) + w)), "")
897+ let dY = if ((cB > 0))
876898 then {
877- let an = invoke(aH(), "getAssetDebt", [false, ((aA + "_") + ej), dT], nil)
878- if ($isInstanceOf(an, "Int"))
879- then an
880- else throw(($getType(an) + " couldn't be cast to Int"))
899+ let as = invoke(ad(), "getAssetDebt", [false, ((aF + "_") + ep), dZ], nil)
900+ if ($isInstanceOf(as, "Int"))
901+ then as
902+ else throw(($getType(as) + " couldn't be cast to Int"))
881903 }
882904 else 0
883- let es = dQ(ax, dR, dS, dT)
884- if ((es == es))
905+ let ey = dW(aC, dX, dY, dZ)
906+ if ((ey == ey))
885907 then {
886- let aq = es._7
887- let dY = es._6
888- let dX = es._5
889- let bV = es._4
890- let eh = es._3
891- let bU = es._2
892- let eg = es._1
893- let et = if ((dS > 0))
894- then invoke(aH(), "repayFor", [((aA + "_") + ej)], [AttachedPayment(aJ(dT), dS)])
908+ let av = ey._7
909+ let ee = ey._6
910+ let ed = ey._5
911+ let bZ = ey._4
912+ let en = ey._3
913+ let bY = ey._2
914+ let em = ey._1
915+ let ez = if ((dY > 0))
916+ then invoke(ad(), "repayFor", [((aF + "_") + ep)], [AttachedPayment(aN(dZ), dY)])
895917 else 0
896- if ((et == et))
897- then ([DeleteEntry((((((ax + "_") + aA) + "_") + ej) + t)), DeleteEntry((((((ax + "_") + aA) + "_") + ej) + y)), IntegerEntry((ax + z), (eq - dR)), ScriptTransfer(er, eg, aJ(bU)), ScriptTransfer(er, eh, aJ(bV))] ++ bn(bU, bV, aq))
918+ if ((ez == ez))
919+ then ([DeleteEntry((((((aC + "_") + aF) + "_") + ep) + t)), DeleteEntry((((((aC + "_") + aF) + "_") + ep) + y)), IntegerEntry((aC + z), (ew - dX)), ScriptTransfer(ex, em, aN(bY)), ScriptTransfer(ex, en, aN(bZ))] ++ br(bY, bZ, av))
898920 else throw("Strict value is not equal to itself.")
899921 }
900922 else throw("Strict value is not equal to itself.")
901923 }
902924
903925
904-func eu (ev) = {
905- let ew = split(valueOrErrorMessage(getString(this, (ev + J)), ("No request with id " + ev)), ",")
906- let aA = ew[0]
907- let ax = ew[1]
908- let bs = parseIntValue(ew[2])
909- let dz = ew[3]
910- let bt = parseIntValue(ew[4])
911- let dA = ew[5]
912- let ar = parseIntValue(ew[6])
913- let as = parseIntValue(ew[7])
914- let aq = ew[8]
915- let ex = ew[9]
916- let ey = parseIntValue(ew[10])
917- $Tuple11(aA, ax, bs, dz, bt, dA, ar, as, aq, ex, ey)
926+func eA (eB) = {
927+ let eC = split(valueOrErrorMessage(getString(this, (eB + J)), ("No request with id " + eB)), ",")
928+ let aF = eC[0]
929+ let aC = eC[1]
930+ let bw = parseIntValue(eC[2])
931+ let dF = eC[3]
932+ let bx = parseIntValue(eC[4])
933+ let dG = eC[5]
934+ let aw = parseIntValue(eC[6])
935+ let ax = parseIntValue(eC[7])
936+ let av = eC[8]
937+ let eD = eC[9]
938+ let eE = parseIntValue(eC[10])
939+ $Tuple11(aF, aC, bw, dF, bx, dG, aw, ax, av, eD, eE)
918940 }
919941
920942
921-func ez (bs,bt,ao,ap,eA,eB) = {
922- let be = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
923- if ($isInstanceOf(an, "(Int, Int)"))
924- then an
925- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
926- let bf = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
927- if ($isInstanceOf(an, "(Int, Int)"))
928- then an
929- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
930- let eC = pow(10, 0, aK(ao), 0, 0, DOWN)
931- let eD = pow(10, 0, aK(ap), 0, 0, DOWN)
932- let eE = (fraction(be, bs, eC) + fraction(bf, bt, eD))
933- let eF = if ((eB == ao))
934- then $Tuple2(be, eC)
935- else $Tuple2(bf, eD)
936- let eG = eF._1
937- let eH = eF._2
938- fraction(fraction(eE, (eA - 100), 100), eH, eG)
943+func eF (bw,bx,at,au,eG,eH) = {
944+ let bi = ( let as = invoke(Z, "getTWAP60", [at, false], nil)
945+ if ($isInstanceOf(as, "(Int, Int)"))
946+ then as
947+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
948+ let bj = ( let as = invoke(Z, "getTWAP60", [au, false], nil)
949+ if ($isInstanceOf(as, "(Int, Int)"))
950+ then as
951+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
952+ let eI = pow(10, 0, aO(at), 0, 0, DOWN)
953+ let eJ = pow(10, 0, aO(au), 0, 0, DOWN)
954+ let eK = (fraction(bi, bw, eI) + fraction(bj, bx, eJ))
955+ let eL = if ((eH == at))
956+ then $Tuple2(bi, eI)
957+ else $Tuple2(bj, eJ)
958+ let eM = eL._1
959+ let eN = eL._2
960+ fraction(fraction(eK, (eG - 100), 100), eN, eM)
939961 }
940962
941963
942-@Callable(ad)
943-func calcPriceImpactEVALONLY (ax,eA,eB,bs,bt) = if (if ((100 > eA))
964+@Callable(ag)
965+func calcPriceImpactEVALONLY (aC,eG,eH,bw,bx) = if (if ((100 > eG))
944966 then true
945- else (eA > 300))
967+ else (eG > 300))
946968 then throw("Leverage can't be <100 and >300")
947969 else {
948- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
949- let eI = at(Address(fromBase58String(ax)), ba)
950- let dz = eI._1
951- let dA = eI._2
952- let ar = eI._3
953- let as = eI._4
954- let aq = eI._5
955- let cv = if ((eA > 100))
956- then ez(bs, bt, dz, dA, eA, eB)
970+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
971+ let eO = ay(Address(fromBase58String(aC)), be)
972+ let dF = eO._1
973+ let dG = eO._2
974+ let aw = eO._3
975+ let ax = eO._4
976+ let av = eO._5
977+ let cB = if ((eG > 100))
978+ then eF(bw, bx, dF, dG, eG, eH)
957979 else 0
958- let eJ = if ((eB == dz))
959- then $Tuple2((bs + cv), bt)
960- else $Tuple2(bs, (bt + cv))
961- let eK = eJ._1
962- let eL = eJ._2
963- let cr = cn(ba, ax, eK, dz, eL, dA, ar, as)
964- let eM = (ar + eK)
965- let eN = (as + eL)
966- let eO = cu(ba, ax, cr, aq, dz, dA, eM, eN, cv, eB)
967- if ((eO == eO))
968- then {
969- let eP = eO._2
970- let eQ = eO._1
971- let eR = fraction(as, j, ar)
972- let eS = fraction((eN - eP), j, (eM - eQ))
973- let eT = (j - fraction(eR, j, eS))
974- let eU = if ((0 > eT))
975- then (eT * -1)
976- else eT
977- $Tuple2(nil, [eU])
978- }
979- else throw("Strict value is not equal to itself.")
980+ let eP = if ((eH == dF))
981+ then $Tuple2((bw + cB), bx)
982+ else $Tuple2(bw, (bx + cB))
983+ let eQ = eP._1
984+ let eR = eP._2
985+ let eS = cr(be, aC, eQ, dF, eR, dG, aw, ax)
986+ let cv = eS._1
987+ let cz = eS._2
988+ let eT = if ((0 > cz))
989+ then (cz * -1)
990+ else cz
991+ $Tuple2(nil, [eT])
980992 }
981993
982994
983995
984-@Callable(ad)
985-func getShareAssetPriceREADONLY (aq) = {
986- let eV = aZ(aq)
987- $Tuple2(nil, eV)
996+@Callable(ag)
997+func getShareAssetPriceREADONLY (av) = {
998+ let eU = bd(av)
999+ $Tuple2(nil, eU)
9881000 }
9891001
9901002
9911003
992-@Callable(ad)
993-func getUserPositionShareAmountREADONLY (aA,cS) = {
994- let ax = valueOrErrorMessage(getString(this, (((aA + "_") + cS) + u)), "Unknown position")
995- let cv = getIntegerValue(this, (((((ax + "_") + aA) + "_") + cS) + v))
996- let dR = ei(aA, ax, cS, (cv > 0))
997- $Tuple2(nil, dR)
1004+@Callable(ag)
1005+func getUserPositionShareAmountREADONLY (aF,cY) = {
1006+ let aC = valueOrErrorMessage(getString(this, (((aF + "_") + cY) + u)), "Unknown position")
1007+ let cB = getIntegerValue(this, (((((aC + "_") + aF) + "_") + cY) + v))
1008+ let dX = eo(aF, aC, cY, (cB > 0))
1009+ $Tuple2(nil, dX)
9981010 }
9991011
10001012
10011013
1002-@Callable(ad)
1003-func getUserPositionInDollarsREADONLY (aA,eW,cS) = {
1004- func eX (aQ,ax) = {
1005- let eY = aQ
1006- let eZ = eY._1
1007- let fa = eY._2
1008- let fb = eY._3
1009- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1010- let fc = at(Address(fromBase58String(ax)), ba)
1011- let dz = fc._1
1012- let dA = fc._2
1013- let ar = fc._3
1014- let as = fc._4
1015- let aq = fc._5
1016- let cv = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + cS[fb]) + v)), 0)
1017- let dR = ei(aA, ax, cS[fb], (cv > 0))
1018- let eV = aZ(aq)
1019- let fd = pow(10, 0, aK(aq), 0, 0, DOWN)
1020- let fe = fraction(dR, eV, fd)
1021- if ((cv == 0))
1022- then $Tuple3((eZ :+ fe), (fa :+ 0), (fb + 1))
1014+@Callable(ag)
1015+func getUserPositionInDollarsREADONLY (aF,eV,cY) = {
1016+ func eW (aU,aC) = {
1017+ let eX = aU
1018+ let eY = eX._1
1019+ let eZ = eX._2
1020+ let fa = eX._3
1021+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
1022+ let fb = ay(Address(fromBase58String(aC)), be)
1023+ let dF = fb._1
1024+ let dG = fb._2
1025+ let aw = fb._3
1026+ let ax = fb._4
1027+ let av = fb._5
1028+ let cB = valueOrElse(getInteger(this, (((((aC + "_") + aF) + "_") + cY[fa]) + v)), 0)
1029+ let dX = eo(aF, aC, cY[fa], (cB > 0))
1030+ let eU = bd(av)
1031+ let fc = pow(10, 0, aO(av), 0, 0, DOWN)
1032+ let fd = fraction(dX, eU, fc)
1033+ if ((cB == 0))
1034+ then $Tuple3((eY :+ fd), (eZ :+ 0), (fa + 1))
10231035 else {
1024- let dT = getStringValue(this, (((((ax + "_") + aA) + "_") + cS[fb]) + w))
1025- let dS = {
1026- let an = invoke(aH(), "getAssetDebt", [false, ((aA + "_") + cS[fb]), dT], nil)
1027- if ($isInstanceOf(an, "Int"))
1028- then an
1029- else throw(($getType(an) + " couldn't be cast to Int"))
1036+ let dZ = getStringValue(this, (((((aC + "_") + aF) + "_") + cY[fa]) + w))
1037+ let dY = {
1038+ let as = invoke(ad(), "getAssetDebt", [false, ((aF + "_") + cY[fa]), dZ], nil)
1039+ if ($isInstanceOf(as, "Int"))
1040+ then as
1041+ else throw(($getType(as) + " couldn't be cast to Int"))
10301042 }
1031- let ff = ( let an = invoke(Y, "getTWAP60", [dT, false], nil)
1032- if ($isInstanceOf(an, "(Int, Int)"))
1033- then an
1034- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1035- let fg = pow(10, 0, aK(dT), 0, 0, DOWN)
1036- let fh = fraction(dS, ff, fg)
1037- $Tuple3((eZ :+ fe), (fa :+ fh), (fb + 1))
1043+ let fe = ( let as = invoke(Z, "getTWAP60", [dZ, false], nil)
1044+ if ($isInstanceOf(as, "(Int, Int)"))
1045+ then as
1046+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
1047+ let ff = pow(10, 0, aO(dZ), 0, 0, DOWN)
1048+ let fg = fraction(dY, fe, ff)
1049+ $Tuple3((eY :+ fd), (eZ :+ fg), (fa + 1))
10381050 }
10391051 }
10401052
1041- let fi = {
1042- let aS = eW
1043- let aT = size(aS)
1044- let aU = $Tuple3(nil, nil, 0)
1045- func aV (aW,aX) = if ((aX >= aT))
1046- then aW
1047- else eX(aW, aS[aX])
1053+ let fh = {
1054+ let aW = eV
1055+ let aX = size(aW)
1056+ let aY = $Tuple3(nil, nil, 0)
1057+ func aZ (ba,bb) = if ((bb >= aX))
1058+ then ba
1059+ else eW(ba, aW[bb])
10481060
1049- func aY (aW,aX) = if ((aX >= aT))
1050- then aW
1061+ func bc (ba,bb) = if ((bb >= aX))
1062+ then ba
10511063 else throw("List size exceeds 20")
10521064
1053- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1065+ bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
10541066 }
1055- let fj = fi._1
1056- let dS = fi._2
1057- $Tuple2(nil, $Tuple2(fj, dS))
1067+ let fi = fh._1
1068+ let dY = fh._2
1069+ $Tuple2(nil, $Tuple2(fi, dY))
10581070 }
10591071
10601072
10611073
1062-@Callable(ad)
1063-func replenish (ax,eA,eB) = if (if ((100 > eA))
1074+@Callable(ag)
1075+func replenish (aC,eG,eH) = if (if ((100 > eG))
10641076 then true
1065- else (eA > 300))
1077+ else (eG > 300))
10661078 then throw("Leverage can't be <100 and >300")
10671079 else {
1068- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1069- let fk = at(Address(fromBase58String(ax)), ba)
1070- let dz = fk._1
1071- let dA = fk._2
1072- let ar = fk._3
1073- let as = fk._4
1074- let aq = fk._5
1075- let fl = if ((size(ad.payments) == 2))
1076- then if ((aI(ad.payments[0].assetId) != dz))
1080+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
1081+ let fj = ay(Address(fromBase58String(aC)), be)
1082+ let dF = fj._1
1083+ let dG = fj._2
1084+ let aw = fj._3
1085+ let ax = fj._4
1086+ let av = fj._5
1087+ let fk = if ((size(ag.payments) == 2))
1088+ then if ((aM(ag.payments[0].assetId) != dF))
10771089 then throw("Wrong payment asset A")
1078- else if ((aI(ad.payments[1].assetId) != dA))
1090+ else if ((aM(ag.payments[1].assetId) != dG))
10791091 then throw("Wrong payment asset B")
1080- else $Tuple4(ad.payments[0].amount, dz, ad.payments[1].amount, dA)
1081- else if ((size(ad.payments) == 1))
1082- then if ((aI(ad.payments[0].assetId) == dz))
1083- then $Tuple4(ad.payments[0].amount, dz, 0, dA)
1084- else if ((aI(ad.payments[0].assetId) == dA))
1085- then $Tuple4(0, dz, ad.payments[0].amount, dA)
1092+ else $Tuple4(ag.payments[0].amount, dF, ag.payments[1].amount, dG)
1093+ else if ((size(ag.payments) == 1))
1094+ then if ((aM(ag.payments[0].assetId) == dF))
1095+ then $Tuple4(ag.payments[0].amount, dF, 0, dG)
1096+ else if ((aM(ag.payments[0].assetId) == dG))
1097+ then $Tuple4(0, dF, ag.payments[0].amount, dG)
10861098 else throw("Wrong payment")
10871099 else throw("One or two payments expected")
1088- let bs = fl._1
1089- let fm = fl._2
1090- let bt = fl._3
1091- let fn = fl._4
1092- let fo = az(toString(ad.caller))
1093- if ((eA > 100))
1100+ let bw = fk._1
1101+ let fl = fk._2
1102+ let bx = fk._3
1103+ let fm = fk._4
1104+ let fn = aE(toString(ag.caller))
1105+ if ((eG > 100))
10941106 then {
1095- let cv = ez(bs, bt, fm, fn, eA, eB)
1096- let ew = makeString([toString(ad.caller), ax, toString(bs), fm, toString(bt), fn, toString(ar), toString(as), aq, eB, toString(cv)], ",")
1097- let fp = {
1098- let an = invoke(this, "createNewRequest", [ew], nil)
1099- if ($isInstanceOf(an, "Int"))
1100- then an
1101- else throw(($getType(an) + " couldn't be cast to Int"))
1107+ let cB = eF(bw, bx, fl, fm, eG, eH)
1108+ let eC = makeString([toString(ag.caller), aC, toString(bw), fl, toString(bx), fm, toString(aw), toString(ax), av, eH, toString(cB)], ",")
1109+ let fo = {
1110+ let as = invoke(this, "createNewRequest", [eC], nil)
1111+ if ($isInstanceOf(as, "Int"))
1112+ then as
1113+ else throw(($getType(as) + " couldn't be cast to Int"))
11021114 }
1103- if ((fp == fp))
1115+ if ((fo == fo))
11041116 then {
1105- let fq = [((toString(ad.caller) + "_") + toString(fo)), aq, eB, cv, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fp, "Can't create new request"))]
1106- let bS = reentrantInvoke(aH(), "flashPosition", fq, nil)
1107- if ((bS == bS))
1117+ let fp = [((toString(ag.caller) + "_") + toString(fn)), av, eH, cB, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fo, "Can't create new request"))]
1118+ let bW = reentrantInvoke(ad(), "flashPosition", fp, nil)
1119+ if ((bW == bW))
11081120 then nil
11091121 else throw("Strict value is not equal to itself.")
11101122 }
11111123 else throw("Strict value is not equal to itself.")
11121124 }
11131125 else {
1114- let fr = cG(ba, ax, h, bs, dz, bt, dA, ar, as, aq)
1115- let fs = fr._1
1116- let dP = fr._2
1117- (cQ(ax, toString(ad.caller), fs, dP, fo, aq, ba, false) ++ bn(dz, dA, aq))
1126+ let fq = cM(be, aC, h, bw, dF, bx, dG, aw, ax, av)
1127+ let fr = fq._1
1128+ let dV = fq._2
1129+ (cW(aC, toString(ag.caller), fr, dV, fn, av, be, false) ++ br(dF, dG, av))
11181130 }
11191131 }
11201132
11211133
11221134
1123-@Callable(ad)
1124-func replenishFromLand (ev) = {
1125- let ft = eu(ev)
1126- let aA = ft._1
1127- let ax = ft._2
1128- let bs = ft._3
1129- let dz = ft._4
1130- let bt = ft._5
1131- let dA = ft._6
1132- let ar = ft._7
1133- let as = ft._8
1134- let aq = ft._9
1135- let ex = ft._10
1136- let ey = ft._11
1137- if ((size(ad.payments) != 1))
1138- then throw("Wrong payment size")
1139- else if (if ((aI(ad.payments[0].assetId) != ex))
1140- then true
1141- else (ad.payments[0].amount != ey))
1142- then throw("Wrong payment")
1143- else {
1144- let fu = if ((dz == ex))
1145- then $Tuple2((bs + ad.payments[0].amount), bt)
1146- else $Tuple2(bs, (bt + ad.payments[0].amount))
1147- let fv = fu._1
1148- let fw = fu._2
1149- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1150- let fx = cG(ba, ax, g, bs, dz, bt, dA, ar, as, aq)
1151- let fs = fx._1
1152- let dP = fx._2
1153- let cS = az(aA)
1154- let fy = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + v), ey), StringEntry((((((ax + "_") + aA) + "_") + toString(cS)) + w), ex)]
1155- let fz = cQ(ax, aA, fs, dP, cS, aq, ba, true)
1156- $Tuple2((((fz ++ bn(dz, dA, aq)) ++ fy) :+ DeleteEntry((ev + J))), fs)
1157- }
1135+@Callable(ag)
1136+func withdraw (aC,ep) = eu(toString(ag.caller), aC, toString(ep), false)
1137+
1138+
1139+
1140+@Callable(ag)
1141+func createUpdateStopLoss (ep,fs,ak,ft) = {
1142+ let fu = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
1143+ if ($isInstanceOf(as, "(Int, Int)"))
1144+ then as
1145+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
1146+ if (!(isDefined(getInteger(this, (((((fs + "_") + toString(ag.caller)) + "_") + toString(ep)) + t)))))
1147+ then throw("There are no user position")
1148+ else if ((0 >= ft))
1149+ then throw("Price must be greater than 0")
1150+ else if ((ft > fu))
1151+ then throw("Price must be less than current token price")
1152+ else [IntegerEntry((((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P), ft)]
11581153 }
11591154
11601155
11611156
1162-@Callable(ad)
1163-func withdraw (ax,ej) = eo(toString(ad.caller), ax, toString(ej), false)
1157+@Callable(ag)
1158+func deleteStopLoss (ep,fs,ak) = if (!(isDefined(getInteger(this, (((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P)))))
1159+ then throw("No entry")
1160+ else [DeleteEntry((((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P))]
11641161
11651162
11661163
1167-@Callable(ad)
1168-func createUpdateStopLoss (ej,fA,af,fB) = {
1169- let fC = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1170- if ($isInstanceOf(an, "(Int, Int)"))
1171- then an
1172- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1173- if (!(isDefined(getInteger(this, (((((fA + "_") + toString(ad.caller)) + "_") + toString(ej)) + t)))))
1174- then throw("There are no user position")
1175- else if ((0 >= fB))
1176- then throw("Price must be greater than 0")
1177- else if ((fB > fC))
1178- then throw("Price must be less than current token price")
1179- else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P), fB)]
1180- }
1181-
1182-
1183-
1184-@Callable(ad)
1185-func deleteStopLoss (ej,fA,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P)))))
1186- then throw("No entry")
1187- else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P))]
1188-
1189-
1190-
1191-@Callable(ad)
1192-func createNewRequest (bR) = valueOrElse(ac(ad), {
1193- let fp = (valueOrElse(getInteger(this, K), 0) + 1)
1194- $Tuple2([StringEntry((toString(fp) + J), bR), IntegerEntry(K, fp)], fp)
1164+@Callable(ag)
1165+func createNewRequest (bV) = valueOrElse(ah(ag), {
1166+ let fo = (valueOrElse(getInteger(this, K), 0) + 1)
1167+ $Tuple2([StringEntry((toString(fo) + J), bV), IntegerEntry(K, fo)], fo)
11951168 })
11961169
11971170
11981171
1199-@Callable(ad)
1200-func stopLoss (aA,ej,ax,af) = {
1201- let fC = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1202- if ($isInstanceOf(an, "(Int, Int)"))
1203- then an
1204- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1205- if (!(isDefined(getInteger(this, (((((((aA + "_") + toString(ej)) + "_") + ax) + "_") + af) + P)))))
1206- then throw("No entry")
1207- else (eo(toString(ad.caller), ax, toString(ej), true) :+ DeleteEntry((((((((aA + "_") + toString(ej)) + "_") + ax) + "_") + af) + P)))
1208- }
1172+@Callable(ag)
1173+func replenishFromLand (eB) = valueOrElse(ai(ag), {
1174+ let fv = eA(eB)
1175+ let aF = fv._1
1176+ let aC = fv._2
1177+ let bw = fv._3
1178+ let dF = fv._4
1179+ let bx = fv._5
1180+ let dG = fv._6
1181+ let aw = fv._7
1182+ let ax = fv._8
1183+ let av = fv._9
1184+ let eD = fv._10
1185+ let eE = fv._11
1186+ if ((size(ag.payments) != 1))
1187+ then throw("Wrong payment size")
1188+ else if (if ((aM(ag.payments[0].assetId) != eD))
1189+ then true
1190+ else (ag.payments[0].amount != eE))
1191+ then throw("Wrong payment")
1192+ else {
1193+ let fw = if ((dF == eD))
1194+ then $Tuple2((bw + ag.payments[0].amount), bx)
1195+ else $Tuple2(bw, (bx + ag.payments[0].amount))
1196+ let fx = fw._1
1197+ let fy = fw._2
1198+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Unknown pool")
1199+ let fz = cM(be, aC, g, bw, dF, bx, dG, aw, ax, av)
1200+ let fr = fz._1
1201+ let dV = fz._2
1202+ let cY = aE(aF)
1203+ let fA = [IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + v), eE), StringEntry((((((aC + "_") + aF) + "_") + toString(cY)) + w), eD)]
1204+ let fB = cW(aC, aF, fr, dV, cY, av, be, true)
1205+ $Tuple2((((fB ++ br(dF, dG, av)) ++ fA) :+ DeleteEntry((eB + J))), fr)
1206+ }
1207+ })
12091208
12101209
12111210
1212-@Callable(ad)
1213-func liquidate (aA,ej,fD) = {
1214- let ax = valueOrErrorMessage(getString(this, (((aA + "_") + ej) + u)), "no position")
1215- let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1216- let fE = at(Address(fromBase58String(ax)), ba)
1217- let dz = fE._1
1218- let dA = fE._2
1219- let ar = fE._3
1220- let as = fE._4
1221- let aq = fE._5
1222- let bM = bN(ax, ba, aq, fD)
1223- let cv = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + v))
1224- let dT = getStringValue(this, (((((ax + "_") + aA) + "_") + ej) + w))
1225- let dR = ei(aA, ax, ej, (cv > 0))
1226- if ((cv == 0))
1211+@Callable(ag)
1212+func liquidate (aF,ep,fC) = valueOrElse(ai(ag), {
1213+ let aC = valueOrErrorMessage(getString(this, (((aF + "_") + ep) + u)), "no position")
1214+ let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
1215+ let fD = ay(Address(fromBase58String(aC)), be)
1216+ let dF = fD._1
1217+ let dG = fD._2
1218+ let aw = fD._3
1219+ let ax = fD._4
1220+ let av = fD._5
1221+ let bQ = bR(aC, be, av, fC)
1222+ let cB = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + v))
1223+ let dZ = getStringValue(this, (((((aC + "_") + aF) + "_") + ep) + w))
1224+ let dX = eo(aF, aC, ep, (cB > 0))
1225+ if ((cB == 0))
12271226 then throw("You can't liquidate position without borrow")
1228- else [IntegerEntry((((((ax + "_") + aA) + "_") + ej) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - fD)), IntegerEntry((ax + z), (aw(ax) - fD)), IntegerEntry((((((ax + "_") + aA) + "_") + ej) + t), (dR - fD)), ScriptTransfer(ad.caller, bM, fromBase58String(aq))]
1229- }
1227+ else [IntegerEntry((((((aC + "_") + aF) + "_") + ep) + y), getIntegerValue(this, (aC + B))), IntegerEntry((aC + A), (aD(aC) - fC)), IntegerEntry((aC + z), (aB(aC) - fC)), IntegerEntry((((((aC + "_") + aF) + "_") + ep) + t), (dX - fC)), ScriptTransfer(ag.caller, bQ, fromBase58String(av))]
1228+ })
12301229
12311230
12321231
1233-@Callable(ad)
1234-func capitalizeExKeeper (ax,au,fF,fG,fH,dd,de,df,dg,dh,di,dj) = {
1235- let fI = if (fH)
1236- then cD(au, ax)
1237- else {
1238- let fJ = if ((au == a))
1239- then aa
1240- else ab
1241- $Tuple2(fG, fJ)
1242- }
1243- let fK = fI._1
1244- let fJ = fI._2
1245- let fL = cZ(fF, fG, fJ, dd, de, df, dg, dh, di, dj)
1246- let bE = (fK - fG)
1247- let fM = if ((bE > 0))
1248- then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
1249- else nil
1250- (dv(ax, au, fF, fL) ++ fM)
1251- }
1232+@Callable(ag)
1233+func stopLoss (aF,ep,aC,ak) = valueOrElse(af(ag), {
1234+ let fu = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
1235+ if ($isInstanceOf(as, "(Int, Int)"))
1236+ then as
1237+ else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
1238+ if (!(isDefined(getInteger(this, (((((((aF + "_") + toString(ep)) + "_") + aC) + "_") + ak) + P)))))
1239+ then throw("No entry")
1240+ else (eu(toString(ag.caller), aC, toString(ep), true) :+ DeleteEntry((((((((aF + "_") + toString(ep)) + "_") + aC) + "_") + ak) + P)))
1241+ })
12521242
12531243
12541244
1255-@Callable(ad)
1256-func capitalizeExPuzzle (ax,au,fF,fG,fH,dm,dn,dj) = {
1257- let fN = if (fH)
1258- then cD(au, ax)
1245+@Callable(ag)
1246+func capitalizeExKeeper (aC,az,fE,fF,fG,dj,dk,dl,dm,dn,do,dp) = valueOrElse(af(ag), {
1247+ let fH = if (fG)
1248+ then cJ(az, aC)
12591249 else {
1260- let fJ = if ((au == a))
1261- then aa
1262- else ab
1263- $Tuple2(fG, fJ)
1250+ let fI = if ((az == a))
1251+ then ab
1252+ else ac
1253+ $Tuple2(fF, fI)
12641254 }
1265- let fK = fN._1
1266- let fJ = fN._2
1267- let fL = dl(fF, fG, fJ, dm, dn, dj)
1268- let bE = (fK - fG)
1269- let fM = if ((bE > 0))
1270- then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
1255+ let fJ = fH._1
1256+ let fI = fH._2
1257+ let fK = df(fE, fF, fI, dj, dk, dl, dm, dn, do, dp)
1258+ let bI = (fJ - fF)
1259+ let fL = if ((bI > 0))
1260+ then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
12711261 else nil
1272- (dv(ax, au, fF, fL) ++ fM)
1273- }
1262+ (dB(aC, az, fE, fK) ++ fL)
1263+ })
12741264
12751265
12761266
1277-@Callable(ad)
1278-func capitalizeExSwopFi (ax,au,fF,fG,fH,dp,dq,dr,ds,dt,du,dj) = {
1279- let fO = if (fH)
1280- then cD(au, ax)
1267+@Callable(ag)
1268+func capitalizeExPuzzle (aC,az,fE,fF,fG,ds,dt,dp) = valueOrElse(af(ag), {
1269+ let fM = if (fG)
1270+ then cJ(az, aC)
12811271 else {
1282- let fJ = if ((au == a))
1283- then aa
1284- else ab
1285- $Tuple2(fG, fJ)
1272+ let fI = if ((az == a))
1273+ then ab
1274+ else ac
1275+ $Tuple2(fF, fI)
12861276 }
1287- let fK = fO._1
1288- let fJ = fO._2
1289- let fL = do(fF, fG, fJ, dp, dq, dr, ds, dt, du, dj)
1290- let bE = (fK - fG)
1291- let fM = if ((bE > 0))
1292- then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
1277+ let fJ = fM._1
1278+ let fI = fM._2
1279+ let fK = dr(fE, fF, fI, ds, dt, dp)
1280+ let bI = (fJ - fF)
1281+ let fL = if ((bI > 0))
1282+ then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
12931283 else nil
1294- (dv(ax, au, fF, fL) ++ fM)
1295- }
1284+ (dB(aC, az, fE, fK) ++ fL)
1285+ })
12961286
12971287
12981288
1299-@Callable(ad)
1300-func initNewPool (au,ak,fP,fQ,fR,fS,fT,fU) = if (if ((au != a))
1301- then (au != b)
1289+@Callable(ag)
1290+func capitalizeExSwopFi (aC,az,fE,fF,fG,dv,dw,dx,dy,dz,dA,dp) = valueOrElse(af(ag), {
1291+ let fN = if (fG)
1292+ then cJ(az, aC)
1293+ else {
1294+ let fI = if ((az == a))
1295+ then ab
1296+ else ac
1297+ $Tuple2(fF, fI)
1298+ }
1299+ let fJ = fN._1
1300+ let fI = fN._2
1301+ let fK = du(fE, fF, fI, dv, dw, dx, dy, dz, dA, dp)
1302+ let bI = (fJ - fF)
1303+ let fL = if ((bI > 0))
1304+ then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
1305+ else nil
1306+ (dB(aC, az, fE, fK) ++ fL)
1307+ })
1308+
1309+
1310+
1311+@Callable(ag)
1312+func initNewPool (az,ap,fO,fP,fQ,fR,fS,fT) = valueOrElse(af(ag), if (if ((az != a))
1313+ then (az != b)
13021314 else false)
13031315 then throw("Wrong type")
13041316 else {
1305- let fV = at(Address(fromBase58String(ak)), au)
1306- let ao = fV._1
1307- let ap = fV._2
1308- let fW = fV._3
1309- let fX = fV._4
1310- let aq = fV._5
1311-[IntegerEntry((ak + D), fP), IntegerEntry((ak + E), fQ), IntegerEntry((ak + F), fR), IntegerEntry((ak + G), fS), IntegerEntry((ak + H), fT), IntegerEntry((ak + I), fU), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
1312- }
1317+ let fU = ay(Address(fromBase58String(ap)), az)
1318+ let at = fU._1
1319+ let au = fU._2
1320+ let fV = fU._3
1321+ let fW = fU._4
1322+ let av = fU._5
1323+[IntegerEntry((ap + D), fO), IntegerEntry((ap + E), fP), IntegerEntry((ap + F), fQ), IntegerEntry((ap + G), fR), IntegerEntry((ap + H), fS), IntegerEntry((ap + I), fT), IntegerEntry((ap + B), 0), IntegerEntry((ap + C), 0), StringEntry((L + ap), az), StringEntry((av + M), ap)]
1324+ })
13131325
13141326
1315-
1316-@Callable(ad)
1317-func capitalizeTest (ax,ba,dw,dx) = {
1318- let ak = Address(fromBase58String(ax))
1319- let fY = at(ak, ba)
1320- let dz = fY._1
1321- let dA = fY._2
1322- let ar = fY._3
1323- let as = fY._4
1324- let aq = fY._5
1325- let fZ = if ((dw == dz))
1326- then $Tuple2(dx, 0)
1327- else $Tuple2(0, dx)
1328- let bs = fZ._1
1329- let bt = fZ._2
1330- let ga = cG(ba, ax, i, bs, dz, bt, dA, ar, as, aq)
1331- let cR = ga._1
1332- let dD = ga._2
1333- let dE = valueOrElse(getInteger(this, (ax + B)), 0)
1334- let dF = valueOrElse(getInteger(this, (ax + C)), 0)
1335- let dG = aw(ax)
1336- let dH = ay(ax)
1337- let dI = fraction(dH, j, dG)
1338- let dJ = fraction(cR, dI, j)
1339- let dK = (cR - dJ)
1340- let dL = if ((dH > 0))
1341- then (dE + fraction(dJ, k, dH))
1342- else 0
1343- let dM = if (((dG - dH) > 0))
1344- then (dF + fraction(dK, k, (dG - dH)))
1345- else 0
1346- let dN = fraction(dJ, aB(ax, d), l)
1347- let dO = fraction(dK, aB(ax, c), l)
1348- let dP = bN(ax, ba, aq, (dN + dO))
1349- if ((dP == dP))
1350- then ([IntegerEntry((ax + B), dL), IntegerEntry((ax + C), dM), IntegerEntry((ax + z), ((dG + cR) - dP)), IntegerEntry((ax + A), ((dH + dJ) - dN)), ScriptTransfer(W, (dN + dO), fromBase58String(aq))] ++ bn(dz, dA, aq))
1351- else throw("Strict value is not equal to itself.")
1352- }
1353-
1354-
1355-
1356-@Callable(ad)
1357-func claimFarmedTest (au,ax) = if ((au == a))
1358- then {
1359- let cE = ae(aa)
1360- if ((cE == cE))
1361- then {
1362- let bS = invoke(aD(), "claim", [ax], nil)
1363- if ((bS == bS))
1364- then {
1365- let cF = ae(aa)
1366- $Tuple2(nil, $Tuple2((cF - cE), aa))
1367- }
1368- else throw("Strict value is not equal to itself.")
1369- }
1370- else throw("Strict value is not equal to itself.")
1371- }
1372- else if ((au == b))
1373- then {
1374- let cE = ae(ab)
1375- if ((cE == cE))
1376- then {
1377- let bS = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
1378- if ((bS == bS))
1379- then {
1380- let cF = ae(ab)
1381- $Tuple2(nil, $Tuple2((cF - cE), ab))
1382- }
1383- else throw("Strict value is not equal to itself.")
1384- }
1385- else throw("Strict value is not equal to itself.")
1386- }
1387- else throw("Wrong pool type")
1388-
1389-
1390-@Verifier(gb)
1391-func gc () = sigVerify(gb.bodyBytes, gb.proofs[0], gb.senderPublicKey)
1327+@Verifier(fX)
1328+func fY () = sigVerify(fX.bodyBytes, fX.proofs[0], fX.senderPublicKey)
13921329

github/deemru/w8io/026f985 
453.17 ms