tx · DHfqMMfuipcaVH1h63yUiaGeYRdAvvHbpDjPEV8xTtF3

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.43000000 Waves

2023.06.28 12:15 [2642315] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "DHfqMMfuipcaVH1h63yUiaGeYRdAvvHbpDjPEV8xTtF3", "fee": 43000000, "feeAssetId": null, "timestamp": 1687943812815, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "3uMkhZSRoogTmvncDnZLDukANCao6cGBqhXapANUDAwEr1mZRckRQM5GRtVNumADEgYDPcm4tb7tuk5Sd7NrjCYw" ], "script": "base64:BgKXAQgCEgcKBQgBCAEBEgMKAQgSBAoCCAgSBQoDCBgYEgUKAwgBCBIECgIIARIGCgQBCAgBEgUKAwEICBILCgkICAgICAgICAgSAwoBCBIDCgEIEgUKAwgIARIGCgQIAQgIEg4KDAgICAEEERgYEQEBGBIKCggICAgBBAgBGBIOCgwICAgBBBgYGBgYARgSCgoICAgBAQEBAQFoAAdTRl9QT09MAgJTRgAHV1hfUE9PTAICV1gAD0NBUF9GRUVfTk9fTE9BTgIJY2FwTm9Mb2FuAAxDQVBfRkVFX0xPQU4CB2NhcExvYW4AFFNUT1BMT1NTX0ZFRV9OT19MT0FOAg5zdG9wTG9zc05vTG9hbgANU1RPUExPU1NfTE9BTgIMc3RvcExvc3NMb2FuAAhMT0FOX0ZFRQIEbG9hbgALTk9fTE9BTl9GRUUCBm5vTG9hbgAGTk9fRkVFAgVub0ZlZQAGU0NBTEU4AIDC1y8AB1NDQUxFMTAAgMivoCUAB1NDQUxFMTYJALYCAQCAgIT+pt7hEQAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQAEmtTRlBvb2xTaGFyZVN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AAprU0ZQb29sRmVlAgpjb21taXNzaW9uAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJQb3NpdGlvblBvb2wCE191c2VyX3Bvc2l0aW9uX3Bvb2wAEWtVc2VyQm9ycm93QW1vdW50AhxfdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYW1vdW50ABJrVXNlckJvcnJvd0Fzc2V0SWQCHl91c2VyX3Bvc2l0aW9uX2JvcnJvd19hc3NldF9pZAAQa1VzZXJQb3NpdGlvbk51bQIVX3VzZXJfcG9zaXRpb25fbnVtYmVyABVrVXNlclBvc2l0aW9uSW50ZXJlc3QCF191c2VyX3Bvc2l0aW9uX2ludGVyZXN0AAprUG9vbFRvdGFsAgtfcG9vbF90b3RhbAAOa1Bvb2xUb3RhbExvYW4CEF9wb29sX3RvdGFsX2xvYW4AEWtQb29sSW50ZXJlc3RMb2FuAhNfcG9vbF9pbnRlcmVzdF9sb2FuABNrUG9vbEludGVyZXN0Tm9Mb2FuAhZfcG9vbF9pbnRlcmVzdF9ub19sb2FuABVrQXhseUluRmVlV2l0aG91dExvYW4CFl9heGx5X2ZlZV93aXRob3V0X2xvYW4AEmtBeGx5SW5GZWVXaXRoTG9hbgITX2F4bHlfZmVlX3dpdGhfbG9hbgARa0F4bHlOb0xvYW5DYXBGZWUCF19heGx5X2ZlZV9jYXBfd2l0aF9sb2FuABNrQXhseVdpdGhMb2FuQ2FwRmVlAhVfYXhseV9mZWVfY2FwX25vX2xvYW4AFmtBeGx5U3RvcExvc3NOb0xvYW5GZWUCHF9heGx5X2ZlZV9zdG9wbG9zc193aXRoX2xvYW4AFGtBeGx5U3RvcExvc3NMb2FuRmVlAhpfYXhseV9mZWVfc3RvcGxvc3Nfbm9fbG9hbgAKa1JlcXVlc3RJZAILX3JlcXVlc3RfaWQADGtSZXF1ZXN0SXRlcgINcmVxdWVzdHNfaXRlcgAFa1Bvb2wCBXBvb2xfAAprU2hhcmVQb29sAg5fcG9vbF9zaGFyZV9pZAAOa1Bvb2xDYXBDaGFuZ2UCEF9wb29sX2NhcF9jaGFuZ2UAD2tUb2tlbkxhc3RQcmljZQIKbGFzdF9wcmljZQANa1VzZXJTdG9wTG9zcwIKX3N0b3BfbG9zcwAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIADGtBZG1pbkNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QAB2tTd29wSWQCB3N3b3BfaWQABWtXeElkAgV3eF9pZAAIbW9uZXlCb3gJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa01vbmV5Qm94AhhObyBheGx5IG1vbmV5Qm94IGFkZHJlc3MACmV4Q29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULa0V4Q29udHJhY3QCHE5vIGV4Y2hhbmdlIGNvbnRyYWN0IGFkZHJlc3MAD3ByaWNlT3JhY2xlQWRkcgkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrUHJpY2VPcmFjbGUCF05vIHByaWNlIG9yYWNsZSBhZGRyZXNzAA53eFN3YXBDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rV3hTd2FwQ29udHJhY3QCEk5vIHd4IHN3YXAgYWRkcmVzcwAGU1dPUElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQdrU3dvcElkAgpObyBzd29wIGlkAARXWElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQVrV3hJZAIITm8gd3ggaWQBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEQZ2V0QWRtaW5DYWxsQWRkcgAJAKcIAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0FkbWluQ2FsbFBLAhRDYW4ndCBnZXQgYWRtaW4gYWRkcgELaXNBZG1pbkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyCQEQZ2V0QWRtaW5DYWxsQWRkcgAFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNMYW5kQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIJAQ5nZXRMZW5kU3J2QWRkcgAFBHVuaXQJAAIBAilPbmx5IGxhbmQgY29udHJhY3QgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBDWdldFNGUG9vbERhdGEBCHBvb2xBZGRyCQCXCgUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUPa1NGUG9vbEFBc3NldElkAhlDYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xCQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRRrU0ZQb29sQUFzc2V0QmFsYW5jZQIeQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBiYWxhbmNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xCQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUOa1NGUG9vbFNoYXJlSWQCGENhbid0IGdldCBzaGFyZSBhc3NldCBpZAENZ2V0V1hQb29sRGF0YQEIcG9vbEFkZHIEA2NmZwoAAUAJAPwHBAUIcG9vbEFkZHICHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNjZmcFA2NmZwQDYUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAEAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAQDYklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAFAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAQHc2hhcmVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkBARiYWxBCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkAzAgCBQNhSWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQRiYWxBBQRiYWxBBARiYWxCCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkAzAgCBQNiSWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQRiYWxCBQRiYWxCCQCXCgUFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQtnZXRQb29sRGF0YQIIcG9vbEFkZHIEdHlwZQMJAAACBQR0eXBlBQdTRl9QT09MCQENZ2V0U0ZQb29sRGF0YQEFCHBvb2xBZGRyAwkAAAIFBHR5cGUFB1dYX1BPT0wJAQ1nZXRXWFBvb2xEYXRhAQUIcG9vbEFkZHIJAAIBAg9Xcm9uZyBwb29sIHR5cGUBDmdldFNoYXJlU3VwcGx5Awhwb29sQWRkcgR0eXBlB3NoYXJlSWQDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRJrU0ZQb29sU2hhcmVTdXBwbHkCHENhbid0IGdldCBzaGFyZSBhc3NldCBzdXBwbHkDCQAAAgUEdHlwZQUHV1hfUE9PTAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFB3NoYXJlSWQCDVdyb25nIFNoYXJlSWQIcXVhbnRpdHkJAAIBAg9Xcm9uZyBwb29sIHR5cGUBEWdldFBvb2xUb3RhbFNoYXJlAQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAAAARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4AAAEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAQR1c2VyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0AAAABAQpnZXRBeGx5RmVlAgRwb29sB2ZlZVR5cGUDCQAAAgUHZmVlVHlwZQUMQ0FQX0ZFRV9MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tBeGx5V2l0aExvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUPQ0FQX0ZFRV9OT19MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtBeGx5Tm9Mb2FuQ2FwRmVlAwkAAAIFB2ZlZVR5cGUFCExPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEmtBeGx5SW5GZWVXaXRoTG9hbgMJAAACBQdmZWVUeXBlBQtOT19MT0FOX0ZFRQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRVrQXhseUluRmVlV2l0aG91dExvYW4DCQAAAgUHZmVlVHlwZQUGTk9fRkVFAAAJAAIBAg5Xcm9uZyBmZWUgdHlwZQEQZ2V0U0ZGYXJtaW5nQWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUOa1NGRmFybWluZ0FkZHICHUNhbid0IGdldCBzd29wZmkgZmFybWluZyBhZGRyARBnZXRXWEZhcm1pbmdBZGRyAQhwb29sQWRkcgQJZkNvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyAhMlc19fZmFjdG9yeUNvbnRyYWN0AiJDYW4ndCBnZXQgV1ggZmFjdG9yeSBjb250cmFjdCBhZGRyBApmYWN0cm95Q2ZnCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQlmQ29udHJhY3QCESVzX19mYWN0b3J5Q29uZmlnAhhDYW4ndCBnZXQgV1ggZmFjdG9yeSBjZmcCAl9fCQEHQWRkcmVzcwEJANkEAQkAkQMCBQpmYWN0cm95Q2ZnAAEBDGFzc2V0SWRUb1N0cgEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgxOb3QgQXNzZXQgaWQBDmFzc2V0SWRGcm9tU3RyAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFB2Fzc2V0SWQBEGdldEFzc2V0RGVjaW1hbHMBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMACAQHJG1hdGNoMAkA7AcBCQDZBAEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIZGVjaW1hbHMJAAIBAhBDYW4ndCBmaW5kIGFzc2V0ARFnZXRBc3NldFByZWNpdGlvbgEHYXNzZXRJZAkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB2Fzc2V0SWQAAAAABQRET1dOAQ5nZXRBc3NldHNQcmljZQEIYXNzZXRJZHMKAQlnZXRQcmljZXMCAWEHYXNzZXRJZAQKYXNzZXRQcmljZQgKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFB2Fzc2V0SWQJAMwIAgcFA25pbAUDbmlsAwkAAQIFAUACCihJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAl8yCQDNCAIFAWEFCmFzc2V0UHJpY2UKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWdldFByaWNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAQ1nZXRTaGFyZVByaWNlAQdzaGFyZUlkBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sAiBDYW4ndCBmaW5kIHBvb2wgYWRkciBieSBzaGFyZSBpZAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQLJHQwODkxNzg5ODIJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDYUlkCAULJHQwODkxNzg5ODICXzEEA2JJZAgFCyR0MDg5MTc4OTgyAl8yBAhhQmFsYW5jZQgFCyR0MDg5MTc4OTgyAl8zBAhiQmFsYW5jZQgFCyR0MDg5MTc4OTgyAl80BAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDYUlkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFA2JJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEC3NoYXJlU3VwcGx5CQEOZ2V0U2hhcmVTdXBwbHkDBQhwb29sQWRkcgUFcFR5cGUFB3NoYXJlSWQECkFQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNhSWQAAAAABQRET1dOBApCUHJlY2lzaW9uCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYklkAAAAAAUERE9XTgQOc2hhcmVQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdzaGFyZUlkAAAAAAUERE9XTgQDc3VtCQBkAgkAawMFCGFCYWxhbmNlBQdkUHJpY2VBBQpBUHJlY2lzaW9uCQBrAwUIYkJhbGFuY2UFB2RQcmljZUIFCkJQcmVjaXNpb24JAGsDBQNzdW0FDnNoYXJlUHJlY2lzaW9uBQtzaGFyZVN1cHBseQEOZ2V0U2hhcmVQcmljZXMBCHNoYXJlSWRzCgEJZ2V0UHJpY2VzAgFhB3NoYXJlSWQJAM0IAgUBYQkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkCgACJGwFCHNoYXJlSWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlnZXRQcmljZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAEOZ2V0Q3Vyc0VudHJpZXMDA2FJZANiSWQHc2hhcmVJZAQMYXNzZXRzUHJpY2VzCQEOZ2V0QXNzZXRzUHJpY2UBCQDMCAIFA2FJZAkAzAgCBQNiSWQFA25pbAQKc2hhcmVQcmljZQkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkBAZwcmljZXMJAMwIAgkApAMBCQCRAwIFDGFzc2V0c1ByaWNlcwAACQDMCAIJAKQDAQkAkQMCBQxhc3NldHNQcmljZXMAAQkAzAgCCQCkAwEFCnNoYXJlUHJpY2UFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCBQ9rVG9rZW5MYXN0UHJpY2UJALkJAgUGcHJpY2VzAgEsBQNuaWwBGGNhbGNSZXBsZW5pc2hCeVR3b1Rva2VucwgFcFR5cGUIcG9vbEFkZHIEcG10QQNhSWQEcG10QgNiSWQEYmFsQQRiYWxCAwkAAAIFBXBUeXBlBQdTRl9QT09MBARyZXBsCgABQAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICIGNhbGNMUFJlcGxlbmlzaFR3b1Rva2Vuc1JFQURPTkxZCQDMCAIJAMwIAgkApAMBBQRwbXRBCQDMCAIJAKQDAQUEcG10QgUDbmlsBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUEcmVwbAUEcmVwbAkAlwoFCgABQAkAkQMCBQRyZXBsAAMDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CgABQAkAkQMCBQRyZXBsAAQDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CgABQAkAkQMCBQRyZXBsAAEDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQEMYXNzZXRJZFRvU3RyAQkAkQMCBQRyZXBsAAIKAAFACQCRAwIFBHJlcGwAAAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDEwNTEyMTA3NjIJAJQKAgkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgIgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkJAMwIAgUEcG10QQUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAgJfXwkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgIfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQkAzAgCBQRwbXRCBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fAwkAAAIFDSR0MDEwNTEyMTA3NjIFDSR0MDEwNTEyMTA3NjIECmV2YWxQdXRJbkIIBQ0kdDAxMDUxMjEwNzYyAl8yBApldmFsUHV0SW5BCAUNJHQwMTA1MTIxMDc2MgJfMQQFbHBJbkEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAEEBWxwSW5CCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgABAwkAZgIFBWxwSW5CBQVscEluQQQDcG10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQAICQCXCgUFBHBtdEEFA3BtdAkAZQIFBHBtdEIFA3BtdAUDYklkBQVscEluQgQDcG10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQAICQCXCgUFA3BtdAUEcG10QgkAZQIFBHBtdEEFA3BtdAUDYUlkBQVscEluQQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYcmVwbGVuaXNoVHdvVG9rZW5zQnlUeXBlBghwb29sQWRkcgVwVHlwZQRwbXRBA2FJZARwbXRCA2JJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFA2FJZAUEcG10QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUDYklkBQRwbXRCBQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgDAhD0JAMwIAgcFA25pbAUIcGF5bWVudHMBF3JlcGxlbmlzaE9uZVRva2VuQnlUeXBlBAhwb29sQWRkcgVwVHlwZQNwbXQFcG10SWQECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQVwbXRJZAUDcG10BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhVyZXBsZW5pc2hXaXRoT25lVG9rZW4JAMwIAgkAzAgCAgEwCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAUDbmlsBQhwYXltZW50cwkA/AcEBQhwb29sQWRkcgIJcHV0T25lVGtuCQDMCAIAAAkAzAgCBwUDbmlsBQhwYXltZW50cwEHc3Rha2VMUAQEcG9vbAVwVHlwZQdzaGFyZUlkBmFtb3VudAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAg9sb2NrU2hhcmVUb2tlbnMJAMwIAgUEcG9vbAkAzAgCAAAFA25pbAUIcGF5bWVudHMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgVzdGFrZQUDbmlsBQhwYXltZW50cwEJdW5zdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BA0kdDAxMjI0NzEyNjA0AwkAAAIFBXBUeXBlBQdTRl9QT09MCQCVCgMJARBnZXRTRkZhcm1pbmdBZGRyAAITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIFBmFtb3VudAUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MCQCVCgMJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3Vuc3Rha2UJAMwIAgUHc2hhcmVJZAkAzAgCBQZhbW91bnQFA25pbAkAAgECD1dyb25nIHBvb2wgdHlwZQQIZmFybUFkZHIIBQ0kdDAxMjI0NzEyNjA0Al8xBAVmTmFtZQgFDSR0MDEyMjQ3MTI2MDQCXzIEBnBhcmFtcwgFDSR0MDEyMjQ3MTI2MDQCXzMEA2ludgkA/AcEBQhmYXJtQWRkcgUFZk5hbWUFBnBhcmFtcwUDbmlsAwkAAAIFA2ludgUDaW52BQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWNhbGNBbW91bnRUb1BheVNGBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAlmZWVTY2FsZTYAwIQ9BANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCHBvb2xBZGRyBQprU0ZQb29sRmVlBAxhbW50R2V0Tm9GZWUJAGsDBRBhbW91bnRUb2tlblRvR2V0BQlmZWVTY2FsZTYJAGUCBQlmZWVTY2FsZTYFA2ZlZQQNJHQwMTMwMTcxMzMwNQMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFDGFtbnRHZXROb0ZlZQUEYmFsQgkAZQIFBGJhbEEFDGFtbnRHZXROb0ZlZQkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUMYW1udEdldE5vRmVlBQRiYWxBCQBlAgUEYmFsQgUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxMzAxNzEzMzA1Al8xBAphc3NldFRvUGF5CAUNJHQwMTMwMTcxMzMwNQJfMgkAlAoCBQphc3NldFRvUGF5BQthbW91bnRUb1BheQERY2FsY0Ftb3VudFRvUGF5V1gHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAVwckZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCDyVzX19wcm90b2NvbEZlZQQEcEZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCCyVzX19wb29sRmVlBAhmZWVTY2FsZQkAtgIBAIDC1y8EDSR0MDEzNjQ0MTM5NTIDCQAAAgUPYXNzZXRUb2tlblRvR2V0BQhhc3NldElkQQQLYW1vdW50VG9QYXkJAGsDBRBhbW91bnRUb2tlblRvR2V0BQRiYWxCCQBlAgUEYmFsQQUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUQYW1vdW50VG9rZW5Ub0dldAUEYmFsQQkAZQIFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDEzNjQ0MTM5NTICXzEECmFzc2V0VG9QYXkIBQ0kdDAxMzY0NDEzOTUyAl8yBBJhbW91bnRUb1BheVdpdGhGZWUJAKADAQkAvQIECQC2AgEFC2Ftb3VudFRvUGF5BQhmZWVTY2FsZQkAuAICBQhmZWVTY2FsZQkAtgIBCQBkAgUFcHJGZWUFBHBGZWUFB0NFSUxJTkcJAJQKAgUKYXNzZXRUb1BheQkAawMFEmFtb3VudFRvUGF5V2l0aEZlZQBmAGQBEGV4Y2hhbmdlRGlyZWN0bHkIBHR5cGUEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAQNJHQwMTQzMTUxNDQzNwkBEWNhbGNBbW91bnRUb1BheVNGBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQECmFzc2V0VG9QYXkIBQ0kdDAxNDMxNTE0NDM3Al8xBAthbW91bnRUb1BheQgFDSR0MDE0MzE1MTQ0MzcCXzIJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAIMY2FsbEZ1bmN0aW9uCQDMCAICCGV4Y2hhbmdlCQDMCAIJAMwIAgkApAMBBRBhbW91bnRUb2tlblRvR2V0BQNuaWwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkFA25pbAQNJHQwMTQ2MTIxNDczNAkBEWNhbGNBbW91bnRUb1BheVdYBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQECmFzc2V0VG9QYXkIBQ0kdDAxNDYxMjE0NzM0Al8xBAthbW91bnRUb1BheQgFDSR0MDE0NjEyMTQ3MzQCXzIJAPwHBAUOd3hTd2FwQ29udHJhY3QCBHN3YXAJAMwIAgUQYW1vdW50VG9rZW5Ub0dldAkAzAgCBQ9hc3NldFRva2VuVG9HZXQJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5BQNuaWwBE2NhbGNSZXBsZW5pc2hMUFZpcnQIBXBUeXBlBHBvb2wEcG10QQNhSWQEcG10QgNiSWQEYmFsQQRiYWxCBAhwb29sQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAQDaW52CgABQAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICH2NhbGNMUFJlcGxlbmlzaERpZmZQcm9wUkVBRE9OTFkJAMwIAgkAzAgCCQCkAwEFBHBtdEEJAMwIAgkApAMBBQRwbXRCCQDMCAICATAFA25pbAUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2ludgUDaW52CQCUCgIKAAFACQCRAwIFA2ludgAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAoAAUAJAJEDAgUDaW52AAEDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBXBUeXBlBQdXWF9QT09MBA0kdDAxNTMzNzE1Njc4AwMJAGYCBQRwbXRBAAAJAGYCBQRwbXRCAAAHBA0kdDAxNTQxODE1NTQ0CQEYY2FsY1JlcGxlbmlzaEJ5VHdvVG9rZW5zCAUFcFR5cGUFCHBvb2xBZGRyBQRwbXRBBQNhSWQFBHBtdEIFA2JJZAUEYmFsQQUEYmFsQgQGcG10SW5BCAUNJHQwMTU0MTgxNTU0NAJfMQQGcG10SW5CCAUNJHQwMTU0MTgxNTU0NAJfMgQGY2hhbmdlCAUNJHQwMTU0MTgxNTU0NAJfMwQIY2hhbmdlSWQIBQ0kdDAxNTQxODE1NTQ0Al80BAhscEFtb3VudAgFDSR0MDE1NDE4MTU1NDQCXzUJAJUKAwUGY2hhbmdlBQhjaGFuZ2VJZAUIbHBBbW91bnQDCQBmAgUEcG10QQAACQCVCgMFBHBtdEEFA2FJZAAACQCVCgMFBHBtdEIFA2JJZAAABAZjaGFuZ2UIBQ0kdDAxNTMzNzE1Njc4Al8xBAhjaGFuZ2VJZAgFDSR0MDE1MzM3MTU2NzgCXzIEBWxwVHdvCAUNJHQwMTUzMzcxNTY3OAJfMwQNJHQwMTU2ODUxNTkwMQMJAGYCBQZjaGFuZ2UAAAQDaW52CgABQAkA/AcEBQhwb29sQWRkcgIRcHV0T25lVGtuUkVBRE9OTFkJAMwIAgUIY2hhbmdlSWQJAMwIAgUGY2hhbmdlBQNuaWwFA25pbAMJAAECBQFAAg8oSW50LCBJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAiQgY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQsIEludCkDCQAAAgUDaW52BQNpbnYJAJQKAggFA2ludgJfMQgFA2ludgJfMwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCAAAAAAQFbHBPbmUIBQ0kdDAxNTY4NTE1OTAxAl8xBARsb3NzCAUNJHQwMTU2ODUxNTkwMQJfMgkAlAoCCQBkAgUFbHBUd28FBWxwT25lBQRsb3NzCQACAQIPV3JvbmcgcG9vbCB0eXBlARJjYWxjV2l0aGRyYXdMUFZpcnQKBXBUeXBlBHBvb2wIbHBBbW91bnQHc2hhcmVJZANhSWQDYklkBGJhbEEEYmFsQgxib3Jyb3dBbW91bnQNYm9ycm93QXNzZXRJZAQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEDSR0MDE2MTk1MTY2OTUDCQAAAgUFcFR5cGUFB1NGX1BPT0wEA2ludgoAAUAJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhB3aXRoZHJhd1JFQURPTkxZCQDMCAIJAMwIAgkApAMBBQhscEFtb3VudAkAzAgCCQCkAwEFBGJhbEEJAMwIAgkApAMBBQRiYWxCBQNuaWwFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNpbnYFA2ludgkAlAoCCgABQAkAkQMCBQNpbnYAAAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQCRAwIFA2ludgABAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQVwVHlwZQUHV1hfUE9PTAQDZ2V0CQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAhNldmFsdWF0ZUdldFJFQURPTkxZCQDMCAIFB3NoYXJlSWQJAMwIAgUIbHBBbW91bnQFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUDZ2V0BQNnZXQJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2dldAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDZ2V0AAIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUECmdldEFtb3VudEEIBQ0kdDAxNjE5NTE2Njk1Al8xBApnZXRBbW91bnRCCAUNJHQwMTYxOTUxNjY5NQJfMgMJAGYCBQxib3Jyb3dBbW91bnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgUNYm9ycm93QXNzZXRJZAUDYUlkCQBmAgUMYm9ycm93QW1vdW50BQpnZXRBbW91bnRBBwkAZQIFDGJvcnJvd0Ftb3VudAUKZ2V0QW1vdW50QQMDCQAAAgUNYm9ycm93QXNzZXRJZAUDYklkCQBmAgUMYm9ycm93QW1vdW50BQpnZXRBbW91bnRCBwkAZQIFDGJvcnJvd0Ftb3VudAUKZ2V0QW1vdW50QgAABA0kdDAxNjk3MzE3Mjc2AwkAZgIFDWFtb3VudFRvR2V0RXgAAAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkBEWNhbGNBbW91bnRUb1BheVNGBwUEcG9vbAUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFDWFtb3VudFRvR2V0RXgFDWJvcnJvd0Fzc2V0SWQJARFjYWxjQW1vdW50VG9QYXlXWAcFBHBvb2wFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQ1hbW91bnRUb0dldEV4BQ1ib3Jyb3dBc3NldElkCQCUCgICAAAABAphc3NldFRvUGF5CAUNJHQwMTY5NzMxNzI3NgJfMQQLYW1vdW50VG9QYXkIBQ0kdDAxNjk3MzE3Mjc2Al8yAwkAAAIFDWJvcnJvd0Fzc2V0SWQFA2FJZAkAlAoCCQBlAgkAZAIFCmdldEFtb3VudEEFDWFtb3VudFRvR2V0RXgFDGJvcnJvd0Ftb3VudAkAZQIFCmdldEFtb3VudEIFC2Ftb3VudFRvUGF5CQCUCgIJAGUCBQpnZXRBbW91bnRBBQthbW91bnRUb1BheQkAZQIJAGQCBQpnZXRBbW91bnRCBQ1hbW91bnRUb0dldEV4BQxib3Jyb3dBbW91bnQJAJQKAgUKZ2V0QW1vdW50QQUKZ2V0QW1vdW50QgELY2xhaW1GYXJtZWQCBHR5cGUEcG9vbAMJAAACBQR0eXBlBQdTRl9QT09MBAliYWxCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEFBlNXT1BJRAMJAAACBQliYWxCZWZvcmUFCWJhbEJlZm9yZQQDaW52CQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIFY2xhaW0JAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYECGJhbEFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBlNXT1BJRAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQR0eXBlBQdXWF9QT09MBAliYWxCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0V1hGYXJtaW5nQWRkcgEJAQdBZGRyZXNzAQkA2QQBBQRwb29sAgdjbGFpbVdYCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUEV1hJRAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECD1dyb25nIHBvb2wgdHlwZQEPcmVwbGVuaXNoQnlUeXBlCgVwVHlwZQRwb29sB2ZlZVR5cGUEcG10QQNhSWQEcG10QgNiSWQEYmFsQQRiYWxCBExQSWQED2xwQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQRMUElkAwkAAAIFD2xwQmFsYW5jZUJlZm9yZQUPbHBCYWxhbmNlQmVmb3JlBAhwb29sQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAQNJHQwMTg0NzMxODg4OQMDCQBmAgUEcG10QQAACQBmAgUEcG10QgAABwQNJHQwMTg1MzkxODY1NQkBGGNhbGNSZXBsZW5pc2hCeVR3b1Rva2VucwgFBXBUeXBlBQhwb29sQWRkcgUEcG10QQUDYUlkBQRwbXRCBQNiSWQFBGJhbEEFBGJhbEIEBnBtdEluQQgFDSR0MDE4NTM5MTg2NTUCXzEEBnBtdEluQggFDSR0MDE4NTM5MTg2NTUCXzIEBmNoYW5nZQgFDSR0MDE4NTM5MTg2NTUCXzMECGNoYW5nZUlkCAUNJHQwMTg1MzkxODY1NQJfNAQDaW52CQEYcmVwbGVuaXNoVHdvVG9rZW5zQnlUeXBlBgUIcG9vbEFkZHIFBXBUeXBlBQZwbXRJbkEFA2FJZAUGcG10SW5CBQNiSWQDCQAAAgUDaW52BQNpbnYJAJQKAgUGY2hhbmdlBQhjaGFuZ2VJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAGYCBQRwbXRBAAAJAJQKAgUEcG10QQUDYUlkAwkAZgIFBHBtdEIAAAkAlAoCBQRwbXRCBQNiSWQJAAIBAhBwbXRzIG11c3QgYmUgPiAwBAZjaGFuZ2UIBQ0kdDAxODQ3MzE4ODg5Al8xBAhjaGFuZ2VJZAgFDSR0MDE4NDczMTg4ODkCXzIEA2ludgMJAGYCBQZjaGFuZ2UAAAkBF3JlcGxlbmlzaE9uZVRva2VuQnlUeXBlBAUIcG9vbEFkZHIFBXBUeXBlBQZjaGFuZ2UFCGNoYW5nZUlkBQNuaWwDCQAAAgUDaW52BQNpbnYEDmxwQmFsYW5jZUFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFBExQSWQEC3RvdGFsU3Rha2VkCQBlAgUObHBCYWxhbmNlQWZ0ZXIFD2xwQmFsYW5jZUJlZm9yZQQNYXhseUZlZUFtb3VudAkAawMFC3RvdGFsU3Rha2VkCQEKZ2V0QXhseUZlZQIFBHBvb2wFB2ZlZVR5cGUFCkZFRV9TQ0FMRTYEEXVzZXJTaGFyZUZvclN0YWtlCQBlAgULdG90YWxTdGFrZWQFDWF4bHlGZWVBbW91bnQDCQBnAgAABRF1c2VyU2hhcmVGb3JTdGFrZQkAAgECKGFtb3VudCBvZiBzdGFrZWQgc2hhcmV0b2tlbnMgbXVzdCBiZSA+IDAEBWludkxQCQEHc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQRMUElkBRF1c2VyU2hhcmVGb3JTdGFrZQMJAAACBQVpbnZMUAUFaW52TFAJAJQKAgURdXNlclNoYXJlRm9yU3Rha2UFDWF4bHlGZWVBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEHJlcGxlbmlzaEVudHJpZXMIBHBvb2wEdXNlcgxzdGFrZWRBbW91bnQNYXhseUZlZUFtb3VudAZwb3NOdW0Hc2hhcmVJZAR0eXBlCHdpdGhMb2FuBAt0b3RhbEFtb3VudAkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQPdG90YWxBbW91bnRMb2FuCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wEDSR0MDE5NzQ3MTk5ODUDBQh3aXRoTG9hbgkAlAoCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuCQBkAgUPdG90YWxBbW91bnRMb2FuBQxzdGFrZWRBbW91bnQJAJQKAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBQ90b3RhbEFtb3VudExvYW4ED2N1clBvb2xJbnRlcmVzdAgFDSR0MDE5NzQ3MTk5ODUCXzEEE3RvdGFsU3Rha2VkV2l0aExvYW4IBQ0kdDAxOTc0NzE5OTg1Al8yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGQCBQt0b3RhbEFtb3VudAUMc3Rha2VkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuBRN0b3RhbFN0YWtlZFdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FDWtVc2VyUG9zaXRpb24FDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QFD2N1clBvb2xJbnRlcmVzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJQb3NpdGlvblBvb2wFBHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa1VzZXJQb3NpdGlvbk51bQUGcG9zTnVtCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94BQ1heGx5RmVlQW1vdW50CQDZBAEFB3NoYXJlSWQFA25pbAEOZXhjaGFuZ2VLZWVwZXIKB3RvVG9rZW4JcG10QW1vdW50CHBtdEFzc2V0CWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMEEnRva2VuQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgMJAAACBRJ0b2tlbkJhbGFuY2VCZWZvcmUFEnRva2VuQmFsYW5jZUJlZm9yZQQDaW52CQD8BwQFCmV4Q29udHJhY3QCBHN3YXAJAMwIAgUJYW1vdW50c0luCQDMCAIFCWFkZHJlc3NlcwkAzAgCBQ9hc3NldHNUb1JlY2VpdmUJAMwIAgULZXN0UmVjZWl2ZWQJAMwIAgURc2xpcHBhZ2VUb2xlcmFuY2UJAMwIAgULbWluUmVjZWl2ZWQJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlUHV6emxlBgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlyb3V0ZXNTdHIMbWluVG9SZWNlaXZlB29wdGlvbnMEEnRva2VuQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgMJAAACBRJ0b2tlbkJhbGFuY2VCZWZvcmUFEnRva2VuQmFsYW5jZUJlZm9yZQQDaW52CQD8BwQFCmV4Q29udHJhY3QCCnB1enpsZVN3YXAJAMwIAgUJcm91dGVzU3RyCQDMCAIFDG1pblRvUmVjZWl2ZQkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOZXhjaGFuZ2VTd29wRmkKB3RvVG9rZW4JcG10QW1vdW50CHBtdEFzc2V0CmV4Y2hhbmdlcnMOZXhjaGFuZ2Vyc1R5cGUFYXJnczEFYXJnczIRcm91dGluZ0Fzc2V0c0tleXMSbWluQW1vdW50VG9SZWNlaXZlB29wdGlvbnMEEnRva2VuQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgMJAAACBRJ0b2tlbkJhbGFuY2VCZWZvcmUFEnRva2VuQmFsYW5jZUJlZm9yZQQDaW52CQD8BwQFCmV4Q29udHJhY3QCCnN3b3BmaVN3YXAJAMwIAgUKZXhjaGFuZ2VycwkAzAgCBQ5leGNoYW5nZXJzVHlwZQkAzAgCBQVhcmdzMQkAzAgCBQVhcmdzMgkAzAgCBRFyb3V0aW5nQXNzZXRzS2V5cwkAzAgCBRJtaW5BbW91bnRUb1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BCmNhcGl0YWxpemUEBHBvb2wFcFR5cGUHdG9rZW5JZAt0b2tlbkFtb3VudAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBA0kdDAyMjMzNjIyNDAyCQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUEA0FJZAgFDSR0MDIyMzM2MjI0MDICXzEEA0JJZAgFDSR0MDIyMzM2MjI0MDICXzIEBGJhbEEIBQ0kdDAyMjMzNjIyNDAyAl8zBARiYWxCCAUNJHQwMjIzMzYyMjQwMgJfNAQHc2hhcmVJZAgFDSR0MDIyMzM2MjI0MDICXzUDAwkBAiE9AgUHdG9rZW5JZAUDQUlkCQECIT0CBQd0b2tlbklkBQNCSWQHCQACAQILV3JvbmcgYXNzZXQEDSR0MDIyNDg3MjI1NjcDCQAAAgUHdG9rZW5JZAUDQUlkCQCUCgIFC3Rva2VuQW1vdW50AAAJAJQKAgAABQt0b2tlbkFtb3VudAQEcG10QQgFDSR0MDIyNDg3MjI1NjcCXzEEBHBtdEIIBQ0kdDAyMjQ4NzIyNTY3Al8yBA0kdDAyMjU3MDIyNjc0CQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFBk5PX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQEDHN0YWtlZEFtb3VudAgFDSR0MDIyNTcwMjI2NzQCXzEEAm5mCAUNJHQwMjI1NzAyMjY3NAJfMgQTY3VyUG9vbEludGVyZXN0TG9hbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuAAAEFWN1clBvb2xJbnRlcmVzdE5vTG9hbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4AAAQQdG90YWxTaGFyZUFtb3VudAkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wEC2xvYW5QZXJjZW50CQBrAwUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBQZTQ0FMRTgFEHRvdGFsU2hhcmVBbW91bnQECnN0YWtlZExvYW4JAGsDBQxzdGFrZWRBbW91bnQFC2xvYW5QZXJjZW50BQZTQ0FMRTgEDHN0YWtlZE5vTG9hbgkAZQIFDHN0YWtlZEFtb3VudAUKc3Rha2VkTG9hbgQPbmV3SW50ZXJlc3RMb2FuAwkAZgIFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAACQBkAgUTY3VyUG9vbEludGVyZXN0TG9hbgkAawMFCnN0YWtlZExvYW4FB1NDQUxFMTAFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAABBFuZXdJbnRlcmVzdE5vTG9hbgMJAGYCCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAJAGQCBRVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4FB1NDQUxFMTAJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAQLYXhseUZlZUxvYW4JAGsDBQpzdGFrZWRMb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFDENBUF9GRUVfTE9BTgUKRkVFX1NDQUxFNgQNYXhseUZlZU5vTG9hbgkAawMFDHN0YWtlZE5vTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQ9DQVBfRkVFX05PX0xPQU4FCkZFRV9TQ0FMRTYEB2F4bHlGZWUJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAkAZAIFC2F4bHlGZWVMb2FuBQ1heGx5RmVlTm9Mb2FuAwkAAAIFB2F4bHlGZWUFB2F4bHlGZWUJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgUPbmV3SW50ZXJlc3RMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4FEW5ld0ludGVyZXN0Tm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGUCCQBkAgUQdG90YWxTaGFyZUFtb3VudAUMc3Rha2VkQW1vdW50BQdheGx5RmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuCQBlAgkAZAIFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUKc3Rha2VkTG9hbgULYXhseUZlZUxvYW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgkA2QQBBQdzaGFyZUlkBQNuaWwJAQ5nZXRDdXJzRW50cmllcwMFA0FJZAUDQklkBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARJ3aXRoZHJhd0Ftb3VudENhbGMEBHBvb2wPdXNlckNhbldpdGhkcmF3BGRlYnQLYm9ycm93QXNzZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDI0NDQyMjQ1MTgJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQIYXNzZXRJZEEIBQ0kdDAyNDQ0MjI0NTE4Al8xBAhhc3NldElkQggFDSR0MDI0NDQyMjQ1MTgCXzIEBGJhbEEIBQ0kdDAyNDQ0MjI0NTE4Al8zBARiYWxCCAUNJHQwMjQ0NDIyNDUxOAJfNAQHc2hhcmVJZAgFDSR0MDI0NDQyMjQ1MTgCXzUEC2NCYWxBQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQMJAAACBQtjQmFsQUJlZm9yZQULY0JhbEFCZWZvcmUEC2NCYWxCQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtjQmFsQkJlZm9yZQULY0JhbEJCZWZvcmUEA2ludgMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsBQNuaWwEA2ludgkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcDCQAAAgUDaW52BQNpbnYJAPwHBAUIcG9vbEFkZHICA2dldAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQNpbnYFA2ludgQKY0JhbEFBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEECmNCYWxCQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCBA0kdDAyNTA4MTI1MTcwCQCUCgIJAGUCBQpjQmFsQUFmdGVyBQtjQmFsQUJlZm9yZQkAZQIFCmNCYWxCQWZ0ZXIFC2NCYWxCQmVmb3JlBA10b2tlbnNBbW91bnRBCAUNJHQwMjUwODEyNTE3MAJfMQQNdG9rZW5zQW1vdW50QggFDSR0MDI1MDgxMjUxNzACXzIEDSR0MDI1MTczMjU5OTMDCQBmAgUEZGVidAAABA1hbW91bnRUb0dldEV4AwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEEJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRBBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEEDAwkAAAIFC2JvcnJvd0Fzc2V0BQhhc3NldElkQgkAZgIFBGRlYnQFDXRva2Vuc0Ftb3VudEIHCQBlAgUEZGVidAUNdG9rZW5zQW1vdW50QgAABAVleEludgMJAGYCBQ1hbW91bnRUb0dldEV4AAAJARBleGNoYW5nZURpcmVjdGx5CAUFcFR5cGUFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUNYW1vdW50VG9HZXRFeAULYm9ycm93QXNzZXQAAAMJAAACBQVleEludgUFZXhJbnYED2NCYWxBQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEED2NCYWxCQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQCUCgIJAGUCCQBlAgUPY0JhbEFBZnRlclJlcGF5BQtjQmFsQUJlZm9yZQUEZGVidAkAZQIFD2NCYWxCQWZ0ZXJSZXBheQULY0JhbEJCZWZvcmUJAJQKAgkAZQIFD2NCYWxBQWZ0ZXJSZXBheQULY0JhbEFCZWZvcmUJAGUCCQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQUEZGVidAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQ10b2tlbnNBbW91bnRBBQ10b2tlbnNBbW91bnRCBAd0b1VzZXJBCAUNJHQwMjUxNzMyNTk5MwJfMQQHdG9Vc2VyQggFDSR0MDI1MTczMjU5OTMCXzIJAJkKBwUHdG9Vc2VyQQUIYXNzZXRJZEEFB3RvVXNlckIFCGFzc2V0SWRCBQpjQmFsQUFmdGVyBQpjQmFsQkFmdGVyBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBHVzZXIEcG9vbAVwb3NJZAhib3Jyb3dlZAQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMdXNlckludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQMcG9vbEludGVyZXN0AwUIYm9ycm93ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgkAZAIFB3BBbW91bnQJAGsDBQdwQW1vdW50CQBlAgUMcG9vbEludGVyZXN0BQx1c2VySW50ZXJlc3QFB1NDQUxFMTABDndpdGhkcmF3VG9Vc2VyBAR1c2VyBHBvb2wFcG9zSWQIc3RvcExvc3MEB3BBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDGJvcnJvd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBXBvc0lkCQBmAgUMYm9ycm93QW1vdW50AAAEDnBvb2xUb3RhbFNoYXJlCQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBAh1c2VyQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHVzZXIEC2JvcnJvd0Fzc2V0CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkAgAEBGRlYnQDCQBmAgUMYm9ycm93QW1vdW50AAAKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAAABA0kdDAyNzM4MTI3NTM0CQESd2l0aGRyYXdBbW91bnRDYWxjBAUEcG9vbAUPdXNlckNhbldpdGhkcmF3BQRkZWJ0BQtib3Jyb3dBc3NldAMJAAACBQ0kdDAyNzM4MTI3NTM0BQ0kdDAyNzM4MTI3NTM0BAdzaGFyZUlkCAUNJHQwMjczODEyNzUzNAJfNwQKY0JhbEJBZnRlcggFDSR0MDI3MzgxMjc1MzQCXzYECmNCYWxBQWZ0ZXIIBQ0kdDAyNzM4MTI3NTM0Al81BAhhc3NldElkQggFDSR0MDI3MzgxMjc1MzQCXzQEDXRvVXNlckFtb3VudEIIBQ0kdDAyNzM4MTI3NTM0Al8zBAhhc3NldElkQQgFDSR0MDI3MzgxMjc1MzQCXzIEDXRvVXNlckFtb3VudEEIBQ0kdDAyNzM4MTI3NTM0Al8xBAtjbG9zZURidEludgMJAGYCBQRkZWJ0AAAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIIcmVwYXlGb3IJAMwIAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFC2JvcnJvd0Fzc2V0BQRkZWJ0BQNuaWwAAAMJAAACBQtjbG9zZURidEludgULY2xvc2VEYnRJbnYJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIFDnBvb2xUb3RhbFNoYXJlBQ91c2VyQ2FuV2l0aGRyYXcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b1VzZXJBbW91bnRCCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQhhc3NldElkQQUIYXNzZXRJZEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHBhcnNlUmVxdWVzdAEJcmVxdWVzdElkBAdyZXF1ZXN0CQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAkArAICAhNObyByZXF1ZXN0IHdpdGggaWQgBQlyZXF1ZXN0SWQCASwEBHVzZXIJAJEDAgUHcmVxdWVzdAAABARwb29sCQCRAwIFB3JlcXVlc3QAAQQEcG10QQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QAAgQDQUlkCQCRAwIFB3JlcXVlc3QAAwQEcG10QgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABAQDQklkCQCRAwIFB3JlcXVlc3QABQQEYmFsQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABgQEYmFsQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABwQHc2hhcmVJZAkAkQMCBQdyZXF1ZXN0AAgEB2J3QXNzZXQJAJEDAgUHcmVxdWVzdAAJBAhid0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QACgkAnQoLBQR1c2VyBQRwb29sBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAUHYndBc3NldAUIYndBbW91bnQBEGNhbGNCb3Jyb3dBbW91bnQGBHBtdEEEcG10QgNhSWQDYklkCGxldmVyYWdlCGJvcnJvd0lkBAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDYUlkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFA2JJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEBmRlY1ByQQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2FJZAAAAAAFBERPV04EBmRlY1ByQgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2JJZAAAAAAFBERPV04EDHBheWRJbkRvbGxhcgkAZAIJAGsDBQdkUHJpY2VBBQRwbXRBBQZkZWNQckEJAGsDBQdkUHJpY2VCBQRwbXRCBQZkZWNQckIEDSR0MDI5MjIwMjkzMTcDCQAAAgUIYm9ycm93SWQFA2FJZAkAlAoCBQdkUHJpY2VBBQZkZWNQckEJAJQKAgUHZFByaWNlQgUGZGVjUHJCBAtib3Jyb3dQcmljZQgFDSR0MDI5MjIwMjkzMTcCXzEEC2JvcnJvd0RlY1ByCAUNJHQwMjkyMjAyOTMxNwJfMgkAawMJAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQFC2JvcnJvd0RlY1ByBQtib3Jyb3dQcmljZREBaQEXY2FsY1ByaWNlSW1wYWN0RVZBTE9OTFkFBHBvb2wIbGV2ZXJhZ2UIYm9ycm93SWQEcG10QQRwbXRCAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDI5NzM1Mjk4MjUJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMjk3MzUyOTgyNQJfMQQDQklkCAUNJHQwMjk3MzUyOTgyNQJfMgQEYmFsQQgFDSR0MDI5NzM1Mjk4MjUCXzMEBGJhbEIIBQ0kdDAyOTczNTI5ODI1Al80BAdzaGFyZUlkCAUNJHQwMjk3MzUyOTgyNQJfNQQMYm9ycm93QW1vdW50AwkAZgIFCGxldmVyYWdlAGQJARBjYWxjQm9ycm93QW1vdW50BgUEcG10QQUEcG10QgUDQUlkBQNCSWQFCGxldmVyYWdlBQhib3Jyb3dJZAAABA0kdDAyOTk2MDMwMDY3AwkAAAIFCGJvcnJvd0lkBQNBSWQJAJQKAgkAZAIFBHBtdEEFDGJvcnJvd0Ftb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QgUMYm9ycm93QW1vdW50BAZwYXlJbkEIBQ0kdDAyOTk2MDMwMDY3Al8xBAZwYXlJbkIIBQ0kdDAyOTk2MDMwMDY3Al8yBA0kdDAzMDA3MDMwMTYzCQETY2FsY1JlcGxlbmlzaExQVmlydAgFBXBUeXBlBQRwb29sBQZwYXlJbkEFA0FJZAUGcGF5SW5CBQNCSWQFBGJhbEEFBGJhbEIECGxwQW1vdW50CAUNJHQwMzAwNzAzMDE2MwJfMQQEbG9zcwgFDSR0MDMwMDcwMzAxNjMCXzIECWltcGFjdE1vZAMJAGYCAAAFBGxvc3MJAGgCBQRsb3NzAP///////////wEFBGxvc3MJAJQKAgUDbmlsCQDMCAIFCWltcGFjdE1vZAUDbmlsAWkBGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZAQdzaGFyZUlkBAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkCQCUCgIFA25pbAULc2hhcmVQcmljZXMBaQEiZ2V0VXNlclBvc2l0aW9uU2hhcmVBbW91bnRSRUFET05MWQIEdXNlcgZwb3NOdW0EBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sAhBVbmtub3duIHBvc2l0aW9uBAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQZwb3NOdW0JAGYCBQxib3Jyb3dBbW91bnQAAAkAlAoCBQNuaWwFD3VzZXJDYW5XaXRoZHJhdwFpASBnZXRVc2VyUG9zaXRpb25JbkRvbGxhcnNSRUFET05MWQMEdXNlcgVwb29scwZwb3NOdW0KAQd1c2VyUG9zAgFhBHBvb2wEDSR0MDMwOTc2MzEwMTAFAWEECHRvdGFsUG9zCAUNJHQwMzA5NzYzMTAxMAJfMQQHcG9zRGVidAgFDSR0MDMwOTc2MzEwMTACXzIEBWluZGV4CAUNJHQwMzA5NzYzMTAxMAJfMwQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDMxMTAyMzExOTIJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzExMDIzMTE5MgJfMQQDQklkCAUNJHQwMzExMDIzMTE5MgJfMgQEYmFsQQgFDSR0MDMxMTAyMzExOTICXzMEBGJhbEIIBQ0kdDAzMTEwMjMxMTkyAl80BAdzaGFyZUlkCAUNJHQwMzExMDIzMTE5MgJfNQQMYm9ycm93QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wJAJEDAgUGcG9zTnVtBQVpbmRleAkAZgIFDGJvcnJvd0Ftb3VudAAABAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkBApkZWNQclNoYXJlCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHc2hhcmVJZAAAAAAFBERPV04EBnNoYXJlRAkAawMFD3VzZXJDYW5XaXRoZHJhdwULc2hhcmVQcmljZXMFCmRlY1ByU2hhcmUDCQAAAgUMYm9ycm93QW1vdW50AAAJAJUKAwkAzQgCBQh0b3RhbFBvcwUGc2hhcmVECQDNCAIFB3Bvc0RlYnQAAAkAZAIFBWluZGV4AAEEC2JvcnJvd0Fzc2V0CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4BRJrVXNlckJvcnJvd0Fzc2V0SWQEBGRlYnQKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4CQDMCAIFC2JvcnJvd0Fzc2V0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEEGJvcnJvd0Fzc2V0UHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQtib3Jyb3dBc3NldAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzEEDWRlY1ByQm9ycm93SWQJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQtib3Jyb3dBc3NldAAAAAAFBERPV04EBWRlYnRECQBrAwUEZGVidAUQYm9ycm93QXNzZXRQcmljZQUNZGVjUHJCb3Jyb3dJZAkAlQoDCQDNCAIFCHRvdGFsUG9zBQZzaGFyZUQJAM0IAgUHcG9zRGVidAUFZGVidEQJAGQCBQVpbmRleAABBA0kdDAzMjIzNTMyMjkwCgACJGwFBXBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1c2VyUG9zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEA3BvcwgFDSR0MDMyMjM1MzIyOTACXzEEBGRlYnQIBQ0kdDAzMjIzNTMyMjkwAl8yCQCUCgIFA25pbAkAlAoCBQNwb3MFBGRlYnQBaQEJcmVwbGVuaXNoAwRwb29sCGxldmVyYWdlCGJvcnJvd0lkAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDMyNjEzMzI3MDMJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzI2MTMzMjcwMwJfMQQDQklkCAUNJHQwMzI2MTMzMjcwMwJfMgQEYmFsQQgFDSR0MDMyNjEzMzI3MDMCXzMEBGJhbEIIBQ0kdDAzMjYxMzMyNzAzAl80BAdzaGFyZUlkCAUNJHQwMzI2MTMzMjcwMwJfNQQNJHQwMzI3MDYzMzM0MwMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAIDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNBSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEEDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBQNCSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEIJAJYKBAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA0JJZAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQAAAUDQklkAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0JJZAkAAgECDVdyb25nIHBheW1lbnQJAAIBAhxPbmUgb3IgdHdvIHBheW1lbnRzIGV4cGVjdGVkBARwbXRBCAUNJHQwMzI3MDYzMzM0MwJfMQQJcG10QXNzZXRBCAUNJHQwMzI3MDYzMzM0MwJfMgQEcG10QggFDSR0MDMyNzA2MzMzNDMCXzMECXBtdEFzc2V0QggFDSR0MDMyNzA2MzMzNDMCXzQECW5ld1Bvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEJAKUIAQgFAWkGY2FsbGVyAwkAZgIFCGxldmVyYWdlAGQEDGJvcnJvd0Ftb3VudAkBEGNhbGNCb3Jyb3dBbW91bnQGBQRwbXRBBQRwbXRCBQlwbXRBc3NldEEFCXBtdEFzc2V0QgUIbGV2ZXJhZ2UFCGJvcnJvd0lkBAdyZXF1ZXN0CQC5CQIJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUEcG9vbAkAzAgCCQCkAwEFBHBtdEEJAMwIAgUJcG10QXNzZXRBCQDMCAIJAKQDAQUEcG10QgkAzAgCBQlwbXRBc3NldEIJAMwIAgkApAMBBQRiYWxBCQDMCAIJAKQDAQUEYmFsQgkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIJAKQDAQUMYm9ycm93QW1vdW50BQNuaWwCASwEDG5ld1JlcXVlc3RJZAoAAUAJAPwHBAUEdGhpcwIQY3JlYXRlTmV3UmVxdWVzdAkAzAgCBQdyZXF1ZXN0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUMbmV3UmVxdWVzdElkBQxuZXdSZXF1ZXN0SWQEBGFyZ3MJAMwIAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFCW5ld1Bvc051bQkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIFDGJvcnJvd0Ftb3VudAkAzAgCCQClCAEFBHRoaXMJAMwIAgIRcmVwbGVuaXNoRnJvbUxhbmQJAMwIAgkApAMBCQETdmFsdWVPckVycm9yTWVzc2FnZQIFDG5ld1JlcXVlc3RJZAIYQ2FuJ3QgY3JlYXRlIG5ldyByZXF1ZXN0BQNuaWwEA2ludgkA/QcECQEOZ2V0TGVuZFNydkFkZHIAAg1mbGFzaFBvc2l0aW9uBQRhcmdzBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMzQyNzEzNDM4MwkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQtOT19MT0FOX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQECnVzZXJTdGFrZWQIBQ0kdDAzNDI3MTM0MzgzAl8xBAdheGx5RmVlCAUNJHQwMzQyNzEzNDM4MwJfMgkAzggCCQEQcmVwbGVuaXNoRW50cmllcwgFBHBvb2wJAKUIAQgFAWkGY2FsbGVyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQluZXdQb3NOdW0FB3NoYXJlSWQFBXBUeXBlBwkBDmdldEN1cnNFbnRyaWVzAwUDQUlkBQNCSWQFB3NoYXJlSWQBaQEId2l0aGRyYXcCBHBvb2wFcG9zSWQJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBwFpARRjcmVhdGVVcGRhdGVTdG9wTG9zcwQFcG9zSWQGcG9vbElkB2Fzc2V0SWQFcHJpY2UEEHRva2VuT3JhY2xlUHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBnBvb2xJZAIBXwkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAAIBAhpUaGVyZSBhcmUgbm8gdXNlciBwb3NpdGlvbgMJAGcCAAAFBXByaWNlCQACAQIcUHJpY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCBQVwcmljZQUQdG9rZW5PcmFjbGVQcmljZQkAAgECK1ByaWNlIG11c3QgYmUgbGVzcyB0aGFuIGN1cnJlbnQgdG9rZW4gcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUFcHJpY2UFA25pbAFpAQ5kZWxldGVTdG9wTG9zcwMFcG9zSWQGcG9vbElkB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUDbmlsAWkBBGluaXQJDG1vbmV5Qm94QWRkcg1zZkZhcm1pbmdBZGRyCGxlbmRBZGRyD3ByaWNlT3JhY2xlQWRkchBrZWVwZXJFeENvbnRyYWN0Dnd4U3dhcENvbnRyYWN0C3N3b3BBc3NldElkCXd4QXNzZXRJZAthZG1pblB1YktleQMJAQlpc0RlZmluZWQBCQCiCAEFCWtNb25leUJveAkAAgECDkFscmVhZHkgaW5pdGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtNb25leUJveAUMbW9uZXlCb3hBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFDmtTRkZhcm1pbmdBZGRyBQ1zZkZhcm1pbmdBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtMZW5kU2VydmljZQUIbGVuZEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa1ByaWNlT3JhY2xlBQ9wcmljZU9yYWNsZUFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgULa0V4Q29udHJhY3QFEGtlZXBlckV4Q29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa1d4U3dhcENvbnRyYWN0BQ53eFN3YXBDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCBQdrU3dvcElkBQtzd29wQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQVrV3hJZAUJd3hBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtBZG1pbkNhbGxQSwULYWRtaW5QdWJLZXkFA25pbAFpARBjcmVhdGVOZXdSZXF1ZXN0AQZwYXJhbXMJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQQMbmV3UmVxdWVzdElkCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrUmVxdWVzdEl0ZXIAAAABCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCkAwEFDG5ld1JlcXVlc3RJZAUKa1JlcXVlc3RJZAUGcGFyYW1zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrUmVxdWVzdEl0ZXIFDG5ld1JlcXVlc3RJZAUDbmlsBQxuZXdSZXF1ZXN0SWQBaQERcmVwbGVuaXNoRnJvbUxhbmQBCXJlcXVlc3RJZAkBC3ZhbHVlT3JFbHNlAgkBCmlzTGFuZENhbGwBBQFpBA0kdDAzNjg2MzM2OTY3CQEMcGFyc2VSZXF1ZXN0AQUJcmVxdWVzdElkBAR1c2VyCAUNJHQwMzY4NjMzNjk2NwJfMQQEcG9vbAgFDSR0MDM2ODYzMzY5NjcCXzIEBHBtdEEIBQ0kdDAzNjg2MzM2OTY3Al8zBANBSWQIBQ0kdDAzNjg2MzM2OTY3Al80BARwbXRCCAUNJHQwMzY4NjMzNjk2NwJfNQQDQklkCAUNJHQwMzY4NjMzNjk2NwJfNgQEYmFsQQgFDSR0MDM2ODYzMzY5NjcCXzcEBGJhbEIIBQ0kdDAzNjg2MzM2OTY3Al84BAdzaGFyZUlkCAUNJHQwMzY4NjMzNjk2NwJfOQQHYndBc3NldAgFDSR0MDM2ODYzMzY5NjcDXzEwBAhid0Ftb3VudAgFDSR0MDM2ODYzMzY5NjcDXzExAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQISV3JvbmcgcGF5bWVudCBzaXplAwMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFB2J3QXNzZXQGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIYndBbW91bnQJAAIBAg1Xcm9uZyBwYXltZW50BA0kdDAzNzE1NzM3MjgxAwkAAAIFA0FJZAUHYndBc3NldAkAlAoCCQBkAgUEcG10QQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFBHBtdEIJAJQKAgUEcG10QQkAZAIFBHBtdEIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdwbXRBbGxBCAUNJHQwMzcxNTczNzI4MQJfMQQHcG10QWxsQggFDSR0MDM3MTU3MzcyODECXzIEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAzNzM2MzM3NDc4CQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFCExPQU5fRkVFBQdwbXRBbGxBBQNBSWQFB3BtdEFsbEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDM3MzYzMzc0NzgCXzEEB2F4bHlGZWUIBQ0kdDAzNzM2MzM3NDc4Al8yBAZwb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBQR1c2VyBA1ib3Jyb3dFbnRyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BQhid0Ftb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEmtVc2VyQm9ycm93QXNzZXRJZAUHYndBc3NldAUDbmlsBAdlbnRyaWVzCQEQcmVwbGVuaXNoRW50cmllcwgFBHBvb2wFBHVzZXIFCnVzZXJTdGFrZWQFB2F4bHlGZWUFBnBvc051bQUHc2hhcmVJZAUFcFR5cGUGCQCUCgIJAM0IAgkAzggCCQDOCAIFB2VudHJpZXMJAQ5nZXRDdXJzRW50cmllcwMFA0FJZAUDQklkBQdzaGFyZUlkBQ1ib3Jyb3dFbnRyaWVzCQELRGVsZXRlRW50cnkBCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAUKdXNlclN0YWtlZAFpAQlsaXF1aWRhdGUDBHVzZXIFcG9zSWQPbGlxdWlkYXRlQW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQVwb3NJZAURa1VzZXJQb3NpdGlvblBvb2wCC25vIHBvc2l0aW9uBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQNJHQwMzgyNTczODM0NwkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBANBSWQIBQ0kdDAzODI1NzM4MzQ3Al8xBANCSWQIBQ0kdDAzODI1NzM4MzQ3Al8yBARiYWxBCAUNJHQwMzgyNTczODM0NwJfMwQEYmFsQggFDSR0MDM4MjU3MzgzNDcCXzQEB3NoYXJlSWQIBQ0kdDAzODI1NzM4MzQ3Al81BAZhbW91bnQJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUPbGlxdWlkYXRlQW1vdW50BAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAURa1VzZXJCb3Jyb3dBbW91bnQEC2JvcnJvd0Fzc2V0CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEmtVc2VyQm9ycm93QXNzZXRJZAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUFcG9zSWQJAGYCBQxib3Jyb3dBbW91bnQAAAMJAAACBQxib3Jyb3dBbW91bnQAAAkAAgECK1lvdSBjYW4ndCBsaXF1aWRhdGUgcG9zaXRpb24gd2l0aG91dCBib3Jyb3cJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuCQBlAgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBQ9saXF1aWRhdGVBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uCQBlAgUPdXNlckNhbldpdGhkcmF3BQ9saXF1aWRhdGVBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQJANkEAQUHc2hhcmVJZAUDbmlsAWkBCHN0b3BMb3NzBAR1c2VyBXBvc0lkBHBvb2wHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQQdG9rZW5PcmFjbGVQcmljZQgKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFB2Fzc2V0SWQJAMwIAgcFA25pbAUDbmlsAwkAAQIFAUACCihJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAl8xAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQCAV8FBHBvb2wCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MJAAIBAghObyBlbnRyeQkAzQgCCQEOd2l0aGRyYXdUb1VzZXIECQClCAEIBQFpBmNhbGxlcgUEcG9vbAkApAMBBQVwb3NJZAYJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwFpARJjYXBpdGFsaXplRXhLZWVwZXIMBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBA0kdDA0MDEzMzQwMzI3AwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwNDAxMzM0MDMyNwJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwNDAxMzM0MDMyNwJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VLZWVwZXIKBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUJYW1vdW50c0luBQlhZGRyZXNzZXMFD2Fzc2V0c1RvUmVjZWl2ZQULZXN0UmVjZWl2ZWQFEXNsaXBwYWdlVG9sZXJhbmNlBQttaW5SZWNlaXZlZAUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpARJjYXBpdGFsaXplRXhQdXp6bGUIBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQlyb3V0ZXNTdHIMbWluVG9SZWNlaXZlB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDQxMDEyNDEyMDYDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MTAxMjQxMjA2Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MTAxMjQxMjA2Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVB1enpsZQYFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlyb3V0ZXNTdHIFDG1pblRvUmVjZWl2ZQUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpARJjYXBpdGFsaXplRXhTd29wRmkMBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQpleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBA0kdDA0MTk1NzQyMTUxAwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwNDE5NTc0MjE1MQJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwNDE5NTc0MjE1MQJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VTd29wRmkKBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUKZXhjaGFuZ2VycwUOZXhjaGFuZ2Vyc1R5cGUFBWFyZ3MxBQVhcmdzMgURcm91dGluZ0Fzc2V0c0tleXMFEm1pbkFtb3VudFRvUmVjZWl2ZQUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpAQtpbml0TmV3UG9vbAgEdHlwZQhwb29sQWRkcgtpbkZlZU5vTG9hbglpbkZlZUxvYW4MY2FwRmVlTm9Mb2FuDmNhcEZlZVdpdGhMb2FuEXN0b3Bsb3NzRmVlTm9Mb2FuE3N0b3Bsb3NzRmVlV2l0aExvYW4JAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDAwkBAiE9AgUEdHlwZQUHU0ZfUE9PTAkBAiE9AgUEdHlwZQUHV1hfUE9PTAcJAAIBAgpXcm9uZyB0eXBlBA0kdDA0Mjg3MjQyOTY2CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUIcG9vbEFkZHIFBHR5cGUEA2FJZAgFDSR0MDQyODcyNDI5NjYCXzEEA2JJZAgFDSR0MDQyODcyNDI5NjYCXzIEBGFCYWwIBQ0kdDA0Mjg3MjQyOTY2Al8zBARiQmFsCAUNJHQwNDI4NzI0Mjk2NgJfNAQHc2hhcmVJZAgFDSR0MDQyODcyNDI5NjYCXzUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgULaW5GZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEmtBeGx5SW5GZWVXaXRoTG9hbgUJaW5GZWVMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrQXhseU5vTG9hbkNhcEZlZQUMY2FwRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrQXhseVdpdGhMb2FuQ2FwRmVlBQ5jYXBGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQURc3RvcGxvc3NGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFGtBeGx5U3RvcExvc3NMb2FuRmVlBRNzdG9wbG9zc0ZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrUG9vbEludGVyZXN0TG9hbgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sBQhwb29sQWRkcgUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleUr4nbk=", "height": 2642315, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GgrQSJrEXEgpXuNQeGgWtrY8v7zmfBP57GKc3ecVZ2Kd Next: HjN54TVya4jBZ7Gzy6f7nPeWba4tn28dRUWwEmLX84cp Diff:
OldNewDifferences
101101
102102 let X = "wx_swap_contract"
103103
104-let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "No axly moneyBox address")))
104+let Y = "swop_id"
105105
106-let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, W), "No exchange contract address")))
106+let Z = "wx_id"
107107
108-let aa = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No price oracle address")))
108+let aa = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "No axly moneyBox address")))
109109
110-let ab = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No wx swap address")))
110+let ab = Address(fromBase58String(valueOrErrorMessage(getString(this, W), "No exchange contract address")))
111111
112-let ac = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
112+let ac = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No price oracle address")))
113113
114-let ad = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
114+let ad = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No wx swap address")))
115115
116-func ae () = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "Can't get lend service addr")))
116+let ae = fromBase58String(valueOrErrorMessage(getString(this, Y), "No swop id"))
117+
118+let af = fromBase58String(valueOrErrorMessage(getString(this, Z), "No wx id"))
119+
120+func ag () = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "Can't get lend service addr")))
117121
118122
119-func af () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get admin addr")))
123+func ah () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get admin addr")))
120124
121125
122-func ag (ah) = if ((ah.caller == af()))
126+func ai (aj) = if ((aj.caller == ah()))
123127 then unit
124128 else throw("Only admin can call this function")
125129
126130
127-func ai (ah) = if ((ah.caller == this))
131+func ak (aj) = if ((aj.caller == this))
128132 then unit
129133 else throw("Only contract itself can call this function")
130134
131135
132-func aj (ah) = if ((ah.caller == ae()))
136+func al (aj) = if ((aj.caller == ag()))
133137 then unit
134138 else throw("Only land contract can call this function")
135139
136140
137-func ak (al) = {
138- let am = al
139- if ($isInstanceOf(am, "ByteVector"))
141+func am (an) = {
142+ let ao = an
143+ if ($isInstanceOf(ao, "ByteVector"))
140144 then {
141- let an = am
142- assetBalance(this, an)
145+ let ap = ao
146+ assetBalance(this, ap)
143147 }
144- else if ($isInstanceOf(am, "Unit"))
148+ else if ($isInstanceOf(ao, "Unit"))
145149 then {
146- let ao = am
150+ let aq = ao
147151 wavesBalance(this).available
148152 }
149153 else throw("Match error")
150154 }
151155
152156
153-func ap (aq) = $Tuple5(valueOrErrorMessage(getString(aq, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(aq, q), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(aq, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(aq, o), "Can't get pool B asset balance"), valueOrErrorMessage(getString(aq, r), "Can't get share asset id"))
157+func ar (as) = $Tuple5(valueOrErrorMessage(getString(as, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(as, q), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(as, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(as, o), "Can't get pool B asset balance"), valueOrErrorMessage(getString(as, r), "Can't get share asset id"))
154158
155159
156-func ar (aq) = {
157- let as = {
158- let at = invoke(aq, "getPoolConfigWrapperREADONLY", nil, nil)
159- if ($isInstanceOf(at, "List[Any]"))
160- then at
161- else throw(($getType(at) + " couldn't be cast to List[Any]"))
160+func at (as) = {
161+ let au = {
162+ let av = invoke(as, "getPoolConfigWrapperREADONLY", nil, nil)
163+ if ($isInstanceOf(av, "List[Any]"))
164+ then av
165+ else throw(($getType(av) + " couldn't be cast to List[Any]"))
162166 }
163- if ((as == as))
167+ if ((au == au))
164168 then {
165- let au = valueOrErrorMessage({
166- let at = as[4]
167- if ($isInstanceOf(at, "String"))
168- then at
169+ let aw = valueOrErrorMessage({
170+ let av = au[4]
171+ if ($isInstanceOf(av, "String"))
172+ then av
169173 else unit
170174 }, "Can't get pool A asset id")
171- let av = valueOrErrorMessage({
172- let at = as[5]
173- if ($isInstanceOf(at, "String"))
174- then at
175+ let ax = valueOrErrorMessage({
176+ let av = au[5]
177+ if ($isInstanceOf(av, "String"))
178+ then av
175179 else unit
176180 }, "Can't get pool B asset id")
177- let aw = valueOrErrorMessage({
178- let at = as[3]
179- if ($isInstanceOf(at, "String"))
180- then at
181+ let ay = valueOrErrorMessage({
182+ let av = au[3]
183+ if ($isInstanceOf(av, "String"))
184+ then av
181185 else unit
182186 }, "Can't get pool LP asset id")
183- let ax = {
184- let at = invoke(aq, "getAccBalanceWrapperREADONLY", [au], nil)
185- if ($isInstanceOf(at, "Int"))
186- then at
187- else throw(($getType(at) + " couldn't be cast to Int"))
187+ let az = {
188+ let av = invoke(as, "getAccBalanceWrapperREADONLY", [aw], nil)
189+ if ($isInstanceOf(av, "Int"))
190+ then av
191+ else throw(($getType(av) + " couldn't be cast to Int"))
188192 }
189- if ((ax == ax))
193+ if ((az == az))
190194 then {
191- let ay = {
192- let at = invoke(aq, "getAccBalanceWrapperREADONLY", [av], nil)
193- if ($isInstanceOf(at, "Int"))
194- then at
195- else throw(($getType(at) + " couldn't be cast to Int"))
195+ let aA = {
196+ let av = invoke(as, "getAccBalanceWrapperREADONLY", [ax], nil)
197+ if ($isInstanceOf(av, "Int"))
198+ then av
199+ else throw(($getType(av) + " couldn't be cast to Int"))
196200 }
197- if ((ay == ay))
198- then $Tuple5(au, av, ax, ay, aw)
201+ if ((aA == aA))
202+ then $Tuple5(aw, ax, az, aA, ay)
199203 else throw("Strict value is not equal to itself.")
200204 }
201205 else throw("Strict value is not equal to itself.")
204208 }
205209
206210
207-func az (aq,aA) = if ((aA == a))
208- then ap(aq)
209- else if ((aA == b))
210- then ar(aq)
211+func aB (as,aC) = if ((aC == a))
212+ then ar(as)
213+ else if ((aC == b))
214+ then at(as)
211215 else throw("Wrong pool type")
212216
213217
214-func aB (aq,aA,aw) = if ((aA == a))
215- then valueOrErrorMessage(getInteger(aq, s), "Can't get share asset supply")
216- else if ((aA == b))
217- then valueOrErrorMessage(assetInfo(fromBase58String(aw)), "Wrong ShareId").quantity
218+func aD (as,aC,ay) = if ((aC == a))
219+ then valueOrErrorMessage(getInteger(as, s), "Can't get share asset supply")
220+ else if ((aC == b))
221+ then valueOrErrorMessage(assetInfo(fromBase58String(ay)), "Wrong ShareId").quantity
218222 else throw("Wrong pool type")
219223
220224
221-func aC (aD) = valueOrElse(getInteger(this, (aD + A)), 0)
225+func aE (aF) = valueOrElse(getInteger(this, (aF + A)), 0)
222226
223227
224-func aE (aD) = valueOrElse(getInteger(this, (aD + B)), 0)
228+func aG (aF) = valueOrElse(getInteger(this, (aF + B)), 0)
225229
226230
227-func aF (aG) = (valueOrElse(getInteger(this, (aG + y)), 0) + 1)
231+func aH (aI) = (valueOrElse(getInteger(this, (aI + y)), 0) + 1)
228232
229233
230-func aH (aD,aI) = if ((aI == d))
231- then getIntegerValue(this, (aD + H))
232- else if ((aI == c))
233- then getIntegerValue(this, (aD + G))
234- else if ((aI == g))
235- then getIntegerValue(this, (aD + F))
236- else if ((aI == h))
237- then getIntegerValue(this, (aD + E))
238- else if ((aI == i))
234+func aJ (aF,aK) = if ((aK == d))
235+ then getIntegerValue(this, (aF + H))
236+ else if ((aK == c))
237+ then getIntegerValue(this, (aF + G))
238+ else if ((aK == g))
239+ then getIntegerValue(this, (aF + F))
240+ else if ((aK == h))
241+ then getIntegerValue(this, (aF + E))
242+ else if ((aK == i))
239243 then 0
240244 else throw("Wrong fee type")
241245
242246
243-func aJ () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get swopfi farming addr")))
247+func aL () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get swopfi farming addr")))
244248
245249
246-func aK (aq) = {
247- let aL = Address(fromBase58String(valueOrErrorMessage(getString(aq, "%s__factoryContract"), "Can't get WX factory contract addr")))
248- let aM = split(valueOrErrorMessage(getString(aL, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
249- Address(fromBase58String(aM[1]))
250+func aM (as) = {
251+ let aN = Address(fromBase58String(valueOrErrorMessage(getString(as, "%s__factoryContract"), "Can't get WX factory contract addr")))
252+ let aO = split(valueOrErrorMessage(getString(aN, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
253+ Address(fromBase58String(aO[1]))
250254 }
251255
252256
253-func aN (al) = {
254- let am = al
255- if ($isInstanceOf(am, "ByteVector"))
257+func aP (an) = {
258+ let ao = an
259+ if ($isInstanceOf(ao, "ByteVector"))
256260 then {
257- let an = am
258- toBase58String(an)
261+ let ap = ao
262+ toBase58String(ap)
259263 }
260- else if ($isInstanceOf(am, "Unit"))
264+ else if ($isInstanceOf(ao, "Unit"))
261265 then {
262- let ao = am
266+ let aq = ao
263267 "WAVES"
264268 }
265269 else throw("Not Asset id")
266270 }
267271
268272
269-func aO (al) = if ((al == "WAVES"))
273+func aQ (an) = if ((an == "WAVES"))
270274 then unit
271- else fromBase58String(al)
275+ else fromBase58String(an)
272276
273277
274-func aP (al) = if ((al == "WAVES"))
278+func aR (an) = if ((an == "WAVES"))
275279 then 8
276280 else {
277- let am = assetInfo(fromBase58String(al))
278- if ($isInstanceOf(am, "Asset"))
281+ let ao = assetInfo(fromBase58String(an))
282+ if ($isInstanceOf(ao, "Asset"))
279283 then {
280- let aQ = am
281- aQ.decimals
284+ let aS = ao
285+ aS.decimals
282286 }
283287 else throw("Can't find asset")
284288 }
285289
286290
287-func aR (al) = pow(10, 0, aP(al), 0, 0, DOWN)
291+func aT (an) = pow(10, 0, aR(an), 0, 0, DOWN)
288292
289293
290-func aS (aT) = {
291- func aU (aV,al) = {
292- let aW = ( let at = invoke(aa, "getTWAP60", [al, false], nil)
293- if ($isInstanceOf(at, "(Int, Int)"))
294- then at
295- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
296- (aV :+ aW)
294+func aU (aV) = {
295+ func aW (aX,an) = {
296+ let aY = ( let av = invoke(ac, "getTWAP60", [an, false], nil)
297+ if ($isInstanceOf(av, "(Int, Int)"))
298+ then av
299+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
300+ (aX :+ aY)
297301 }
298302
299- let aX = aT
300- let aY = size(aX)
301- let aZ = nil
302- func ba (bb,bc) = if ((bc >= aY))
303- then bb
304- else aU(bb, aX[bc])
303+ let aZ = aV
304+ let ba = size(aZ)
305+ let bb = nil
306+ func bc (bd,be) = if ((be >= ba))
307+ then bd
308+ else aW(bd, aZ[be])
305309
306- func bd (bb,bc) = if ((bc >= aY))
307- then bb
310+ func bf (bd,be) = if ((be >= ba))
311+ then bd
308312 else throw("List size exceeds 50")
309313
310- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 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)
314+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 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)
311315 }
312316
313317
314-func be (aw) = {
315- let aD = valueOrErrorMessage(getString(this, (aw + N)), "Can't find pool addr by share id")
316- let aq = Address(fromBase58String(aD))
317- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
318- let bg = az(aq, bf)
319- let au = bg._1
320- let av = bg._2
321- let bh = bg._3
322- let bi = bg._4
323- let bj = ( let at = invoke(aa, "getTWAP60", [au, false], nil)
324- if ($isInstanceOf(at, "(Int, Int)"))
325- then at
326- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
327- let bk = ( let at = invoke(aa, "getTWAP60", [av, false], nil)
328- if ($isInstanceOf(at, "(Int, Int)"))
329- then at
330- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
331- let bl = aB(aq, bf, aw)
332- let bm = pow(10, 0, aP(au), 0, 0, DOWN)
333- let bn = pow(10, 0, aP(av), 0, 0, DOWN)
334- let bo = pow(10, 0, aP(aw), 0, 0, DOWN)
335- let bp = (fraction(bh, bj, bm) + fraction(bi, bk, bn))
336- fraction(bp, bo, bl)
318+func bg (ay) = {
319+ let aF = valueOrErrorMessage(getString(this, (ay + N)), "Can't find pool addr by share id")
320+ let as = Address(fromBase58String(aF))
321+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
322+ let bi = aB(as, bh)
323+ let aw = bi._1
324+ let ax = bi._2
325+ let bj = bi._3
326+ let bk = bi._4
327+ let bl = ( let av = invoke(ac, "getTWAP60", [aw, false], nil)
328+ if ($isInstanceOf(av, "(Int, Int)"))
329+ then av
330+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
331+ let bm = ( let av = invoke(ac, "getTWAP60", [ax, false], nil)
332+ if ($isInstanceOf(av, "(Int, Int)"))
333+ then av
334+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
335+ let bn = aD(as, bh, ay)
336+ let bo = pow(10, 0, aR(aw), 0, 0, DOWN)
337+ let bp = pow(10, 0, aR(ax), 0, 0, DOWN)
338+ let bq = pow(10, 0, aR(ay), 0, 0, DOWN)
339+ let br = (fraction(bj, bl, bo) + fraction(bk, bm, bp))
340+ fraction(br, bq, bn)
337341 }
338342
339343
340-func bq (br) = {
341- func aU (aV,aw) = (aV :+ be(aw))
344+func bs (bt) = {
345+ func aW (aX,ay) = (aX :+ bg(ay))
342346
343- let aX = br
344- let aY = size(aX)
345- let aZ = nil
346- func ba (bb,bc) = if ((bc >= aY))
347- then bb
348- else aU(bb, aX[bc])
347+ let aZ = bt
348+ let ba = size(aZ)
349+ let bb = nil
350+ func bc (bd,be) = if ((be >= ba))
351+ then bd
352+ else aW(bd, aZ[be])
349353
350- func bd (bb,bc) = if ((bc >= aY))
351- then bb
354+ func bf (bd,be) = if ((be >= ba))
355+ then bd
352356 else throw("List size exceeds 20")
353357
354- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
358+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
355359 }
356360
357361
358-func bs (au,av,aw) = {
359- let bt = aS([au, av])
360- let bu = be(aw)
361- let bv = [toString(bt[0]), toString(bt[1]), toString(bu)]
362-[StringEntry(P, makeString(bv, ","))]
362+func bu (aw,ax,ay) = {
363+ let bv = aU([aw, ax])
364+ let bw = bg(ay)
365+ let bx = [toString(bv[0]), toString(bv[1]), toString(bw)]
366+[StringEntry(P, makeString(bx, ","))]
363367 }
364368
365369
366-func bw (bf,aq,bx,au,by,av,ax,ay) = if ((bf == a))
370+func by (bh,as,bz,aw,bA,ax,az,aA) = if ((bh == a))
367371 then {
368- let bz = {
369- let at = invoke(aq, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bx), toString(by)]], nil)
370- if ($isInstanceOf(at, "List[Any]"))
371- then at
372- else throw(($getType(at) + " couldn't be cast to List[Any]"))
372+ let bB = {
373+ let av = invoke(as, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bz), toString(bA)]], nil)
374+ if ($isInstanceOf(av, "List[Any]"))
375+ then av
376+ else throw(($getType(av) + " couldn't be cast to List[Any]"))
373377 }
374- if ((bz == bz))
378+ if ((bB == bB))
375379 then $Tuple5({
376- let at = bz[3]
377- if ($isInstanceOf(at, "Int"))
378- then at
379- else throw(($getType(at) + " couldn't be cast to Int"))
380+ let av = bB[3]
381+ if ($isInstanceOf(av, "Int"))
382+ then av
383+ else throw(($getType(av) + " couldn't be cast to Int"))
380384 }, {
381- let at = bz[4]
382- if ($isInstanceOf(at, "Int"))
383- then at
384- else throw(($getType(at) + " couldn't be cast to Int"))
385+ let av = bB[4]
386+ if ($isInstanceOf(av, "Int"))
387+ then av
388+ else throw(($getType(av) + " couldn't be cast to Int"))
385389 }, {
386- let at = bz[1]
387- if ($isInstanceOf(at, "Int"))
388- then at
389- else throw(($getType(at) + " couldn't be cast to Int"))
390- }, aN(bz[2]), {
391- let at = bz[0]
392- if ($isInstanceOf(at, "Int"))
393- then at
394- else throw(($getType(at) + " couldn't be cast to Int"))
390+ let av = bB[1]
391+ if ($isInstanceOf(av, "Int"))
392+ then av
393+ else throw(($getType(av) + " couldn't be cast to Int"))
394+ }, aP(bB[2]), {
395+ let av = bB[0]
396+ if ($isInstanceOf(av, "Int"))
397+ then av
398+ else throw(($getType(av) + " couldn't be cast to Int"))
395399 })
396400 else throw("Strict value is not equal to itself.")
397401 }
398402 else {
399- let bA = $Tuple2(split({
400- let at = invoke(aq, "evaluatePutByAmountAssetREADONLY", [bx], nil)
401- if ($isInstanceOf(at, "String"))
402- then at
403- else throw(($getType(at) + " couldn't be cast to String"))
403+ let bC = $Tuple2(split({
404+ let av = invoke(as, "evaluatePutByAmountAssetREADONLY", [bz], nil)
405+ if ($isInstanceOf(av, "String"))
406+ then av
407+ else throw(($getType(av) + " couldn't be cast to String"))
404408 }, "__"), split({
405- let at = invoke(aq, "evaluatePutByPriceAssetREADONLY", [by], nil)
406- if ($isInstanceOf(at, "String"))
407- then at
408- else throw(($getType(at) + " couldn't be cast to String"))
409+ let av = invoke(as, "evaluatePutByPriceAssetREADONLY", [bA], nil)
410+ if ($isInstanceOf(av, "String"))
411+ then av
412+ else throw(($getType(av) + " couldn't be cast to String"))
409413 }, "__"))
410- if ((bA == bA))
414+ if ((bC == bC))
411415 then {
412- let bB = bA._2
413- let bC = bA._1
414- let bD = parseIntValue(bC[1])
415- let bE = parseIntValue(bB[1])
416- if ((bE > bD))
416+ let bD = bC._2
417+ let bE = bC._1
418+ let bF = parseIntValue(bE[1])
419+ let bG = parseIntValue(bD[1])
420+ if ((bG > bF))
417421 then {
418- let bF = parseIntValue(bC[8])
419- $Tuple5(bx, bF, (by - bF), av, bE)
422+ let bH = parseIntValue(bE[8])
423+ $Tuple5(bz, bH, (bA - bH), ax, bG)
420424 }
421425 else {
422- let bF = parseIntValue(bC[8])
423- $Tuple5(bF, by, (bx - bF), au, bD)
426+ let bH = parseIntValue(bE[8])
427+ $Tuple5(bH, bA, (bz - bH), aw, bF)
424428 }
425429 }
426430 else throw("Strict value is not equal to itself.")
427431 }
428432
429433
430-func bG (aq,bf,bx,au,by,av) = {
431- let bH = [AttachedPayment(aO(au), bx), AttachedPayment(aO(av), by)]
432- if ((bf == a))
433- then invoke(aq, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bH)
434- else invoke(aq, "put", [1000000, false], bH)
434+func bI (as,bh,bz,aw,bA,ax) = {
435+ let bJ = [AttachedPayment(aQ(aw), bz), AttachedPayment(aQ(ax), bA)]
436+ if ((bh == a))
437+ then invoke(as, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bJ)
438+ else invoke(as, "put", [1000000, false], bJ)
435439 }
436440
437441
438-func bI (aq,bf,bF,bJ) = {
439- let bH = [AttachedPayment(aO(bJ), bF)]
440- if ((bf == a))
441- then invoke(aq, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bH)
442- else invoke(aq, "putOneTkn", [0, false], bH)
442+func bK (as,bh,bH,bL) = {
443+ let bJ = [AttachedPayment(aQ(bL), bH)]
444+ if ((bh == a))
445+ then invoke(as, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bJ)
446+ else invoke(as, "putOneTkn", [0, false], bJ)
443447 }
444448
445449
446-func bK (aD,bf,aw,bL) = {
447- let bH = [AttachedPayment(fromBase58String(aw), bL)]
448- if ((bf == a))
449- then invoke(aJ(), "lockShareTokens", [aD, 0], bH)
450- else invoke(aK(addressFromStringValue(aD)), "stake", nil, bH)
450+func bM (aF,bh,ay,bN) = {
451+ let bJ = [AttachedPayment(fromBase58String(ay), bN)]
452+ if ((bh == a))
453+ then invoke(aL(), "lockShareTokens", [aF, 0], bJ)
454+ else invoke(aM(addressFromStringValue(aF)), "stake", nil, bJ)
451455 }
452456
453457
454-func bM (aD,bf,aw,bL) = {
455- let bN = if ((bf == a))
456- then $Tuple3(aJ(), "withdrawShareTokens", [aD, bL])
457- else if ((bf == b))
458- then $Tuple3(aK(Address(fromBase58String(aD))), "unstake", [aw, bL])
458+func bO (aF,bh,ay,bN) = {
459+ let bP = if ((bh == a))
460+ then $Tuple3(aL(), "withdrawShareTokens", [aF, bN])
461+ else if ((bh == b))
462+ then $Tuple3(aM(Address(fromBase58String(aF))), "unstake", [ay, bN])
459463 else throw("Wrong pool type")
460- let bO = bN._1
461- let bP = bN._2
462- let bQ = bN._3
463- let bR = invoke(bO, bP, bQ, nil)
464- if ((bR == bR))
465- then bL
464+ let bQ = bP._1
465+ let bR = bP._2
466+ let bS = bP._3
467+ let bT = invoke(bQ, bR, bS, nil)
468+ if ((bT == bT))
469+ then bN
466470 else throw("Strict value is not equal to itself.")
467471 }
468472
469473
470-func bS (aD,bT,bU,ax,ay,bV,bW) = {
471- let aq = Address(fromBase58String(aD))
472- let bX = 1000000
473- let bY = getIntegerValue(aq, t)
474- let bZ = fraction(bV, bX, (bX - bY))
475- let ca = if ((bW == bT))
474+func bU (aF,bV,bW,az,aA,bX,bY) = {
475+ let as = Address(fromBase58String(aF))
476+ let bZ = 1000000
477+ let ca = getIntegerValue(as, t)
478+ let cb = fraction(bX, bZ, (bZ - ca))
479+ let cc = if ((bY == bV))
476480 then {
477- let cb = fraction(bZ, ay, (ax - bZ))
478- $Tuple2(cb, bU)
481+ let cd = fraction(cb, aA, (az - cb))
482+ $Tuple2(cd, bW)
479483 }
480484 else {
481- let cb = fraction(bZ, ax, (ay - bZ))
482- $Tuple2(cb, bT)
485+ let cd = fraction(cb, az, (aA - cb))
486+ $Tuple2(cd, bV)
483487 }
484- let cb = ca._1
485- let cc = ca._2
486- $Tuple2(cc, cb)
488+ let cd = cc._1
489+ let ce = cc._2
490+ $Tuple2(ce, cd)
487491 }
488492
489493
490-func cd (aD,bT,bU,ax,ay,bV,bW) = {
491- let ce = getIntegerValue(ab, "%s__protocolFee")
492- let cf = getIntegerValue(ab, "%s__poolFee")
493- let cg = toBigInt(100000000)
494- let ch = if ((bW == bT))
494+func cf (aF,bV,bW,az,aA,bX,bY) = {
495+ let cg = getIntegerValue(ad, "%s__protocolFee")
496+ let ch = getIntegerValue(ad, "%s__poolFee")
497+ let ci = toBigInt(100000000)
498+ let cj = if ((bY == bV))
495499 then {
496- let cb = fraction(bV, ay, (ax - bV))
497- $Tuple2(cb, bU)
500+ let cd = fraction(bX, aA, (az - bX))
501+ $Tuple2(cd, bW)
498502 }
499503 else {
500- let cb = fraction(bV, ax, (ay - bV))
501- $Tuple2(cb, bT)
504+ let cd = fraction(bX, az, (aA - bX))
505+ $Tuple2(cd, bV)
502506 }
503- let cb = ch._1
504- let cc = ch._2
505- let ci = toInt(fraction(toBigInt(cb), cg, (cg - toBigInt((ce + cf))), CEILING))
506- $Tuple2(cc, fraction(ci, 102, 100))
507+ let cd = cj._1
508+ let ce = cj._2
509+ let ck = toInt(fraction(toBigInt(cd), ci, (ci - toBigInt((cg + ch))), CEILING))
510+ $Tuple2(ce, fraction(ck, 102, 100))
507511 }
508512
509513
510-func cj (aA,aD,bT,bU,ax,ay,bV,bW) = if ((aA == a))
514+func cl (aC,aF,bV,bW,az,aA,bX,bY) = if ((aC == a))
511515 then {
512- let ck = bS(aD, bT, bU, ax, ay, bV, bW)
513- let cc = ck._1
514- let cb = ck._2
515- invoke(addressFromStringValue(aD), "callFunction", ["exchange", [toString(bV)]], [AttachedPayment(aO(cc), cb)])
516+ let cm = bU(aF, bV, bW, az, aA, bX, bY)
517+ let ce = cm._1
518+ let cd = cm._2
519+ invoke(addressFromStringValue(aF), "callFunction", ["exchange", [toString(bX)]], [AttachedPayment(aQ(ce), cd)])
516520 }
517521 else {
518- let cl = cd(aD, bT, bU, ax, ay, bV, bW)
519- let cc = cl._1
520- let cb = cl._2
521- invoke(ab, "swap", [bV, bW, toString(this)], [AttachedPayment(aO(cc), cb)])
522+ let cn = cf(aF, bV, bW, az, aA, bX, bY)
523+ let ce = cn._1
524+ let cd = cn._2
525+ invoke(ad, "swap", [bX, bY, toString(this)], [AttachedPayment(aQ(ce), cd)])
522526 }
523527
524528
525-func cm (bf,aD,bx,au,by,av,ax,ay) = {
526- let aq = addressFromStringValue(aD)
527- if ((bf == a))
529+func co (bh,aF,bz,aw,bA,ax,az,aA) = {
530+ let as = addressFromStringValue(aF)
531+ if ((bh == a))
528532 then {
529- let bR = {
530- let at = invoke(aq, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bx), toString(by), "0"]], nil)
531- if ($isInstanceOf(at, "List[Any]"))
532- then at
533- else throw(($getType(at) + " couldn't be cast to List[Any]"))
533+ let bT = {
534+ let av = invoke(as, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bz), toString(bA), "0"]], nil)
535+ if ($isInstanceOf(av, "List[Any]"))
536+ then av
537+ else throw(($getType(av) + " couldn't be cast to List[Any]"))
534538 }
535- if ((bR == bR))
539+ if ((bT == bT))
536540 then $Tuple2({
537- let at = bR[0]
538- if ($isInstanceOf(at, "Int"))
539- then at
540- else throw(($getType(at) + " couldn't be cast to Int"))
541+ let av = bT[0]
542+ if ($isInstanceOf(av, "Int"))
543+ then av
544+ else throw(($getType(av) + " couldn't be cast to Int"))
541545 }, {
542- let at = bR[1]
543- if ($isInstanceOf(at, "Int"))
544- then at
545- else throw(($getType(at) + " couldn't be cast to Int"))
546+ let av = bT[1]
547+ if ($isInstanceOf(av, "Int"))
548+ then av
549+ else throw(($getType(av) + " couldn't be cast to Int"))
546550 })
547551 else throw("Strict value is not equal to itself.")
548552 }
549- else if ((bf == b))
553+ else if ((bh == b))
550554 then {
551- let cn = if (if ((bx > 0))
552- then (by > 0)
555+ let cp = if (if ((bz > 0))
556+ then (bA > 0)
553557 else false)
554558 then {
555- let co = bw(bf, aq, bx, au, by, av, ax, ay)
556- let cp = co._1
557- let cq = co._2
558- let cr = co._3
559- let cs = co._4
560- let ct = co._5
561- $Tuple3(cr, cs, ct)
559+ let cq = by(bh, as, bz, aw, bA, ax, az, aA)
560+ let cr = cq._1
561+ let cs = cq._2
562+ let ct = cq._3
563+ let cu = cq._4
564+ let cv = cq._5
565+ $Tuple3(ct, cu, cv)
562566 }
563- else if ((bx > 0))
564- then $Tuple3(bx, au, 0)
565- else $Tuple3(by, av, 0)
566- let cr = cn._1
567- let cs = cn._2
568- let cu = cn._3
569- let cv = if ((cr > 0))
567+ else if ((bz > 0))
568+ then $Tuple3(bz, aw, 0)
569+ else $Tuple3(bA, ax, 0)
570+ let ct = cp._1
571+ let cu = cp._2
572+ let cw = cp._3
573+ let cx = if ((ct > 0))
570574 then {
571- let bR = {
572- let at = invoke(aq, "putOneTknREADONLY", [cs, cr], nil)
573- if ($isInstanceOf(at, "(Int, Int, Int)"))
574- then at
575- else throw(($getType(at) + " couldn't be cast to (Int, Int, Int)"))
575+ let bT = {
576+ let av = invoke(as, "putOneTknREADONLY", [cu, ct], nil)
577+ if ($isInstanceOf(av, "(Int, Int, Int)"))
578+ then av
579+ else throw(($getType(av) + " couldn't be cast to (Int, Int, Int)"))
576580 }
577- if ((bR == bR))
578- then $Tuple2(bR._1, bR._3)
581+ if ((bT == bT))
582+ then $Tuple2(bT._1, bT._3)
579583 else throw("Strict value is not equal to itself.")
580584 }
581585 else $Tuple2(0, 0)
582- let cw = cv._1
583- let cx = cv._2
584- $Tuple2((cu + cw), cx)
586+ let cy = cx._1
587+ let cz = cx._2
588+ $Tuple2((cw + cy), cz)
585589 }
586590 else throw("Wrong pool type")
587591 }
588592
589593
590-func cy (bf,aD,ct,aw,au,av,ax,ay,cz,cA) = {
591- let aq = addressFromStringValue(aD)
592- let cB = if ((bf == a))
594+func cA (bh,aF,cv,ay,aw,ax,az,aA,cB,cC) = {
595+ let as = addressFromStringValue(aF)
596+ let cD = if ((bh == a))
593597 then {
594- let bR = {
595- let at = invoke(aq, "callFunction", ["withdrawREADONLY", [toString(ct), toString(ax), toString(ay)]], nil)
596- if ($isInstanceOf(at, "List[Any]"))
597- then at
598- else throw(($getType(at) + " couldn't be cast to List[Any]"))
598+ let bT = {
599+ let av = invoke(as, "callFunction", ["withdrawREADONLY", [toString(cv), toString(az), toString(aA)]], nil)
600+ if ($isInstanceOf(av, "List[Any]"))
601+ then av
602+ else throw(($getType(av) + " couldn't be cast to List[Any]"))
599603 }
600- if ((bR == bR))
604+ if ((bT == bT))
601605 then $Tuple2({
602- let at = bR[0]
603- if ($isInstanceOf(at, "Int"))
604- then at
605- else throw(($getType(at) + " couldn't be cast to Int"))
606+ let av = bT[0]
607+ if ($isInstanceOf(av, "Int"))
608+ then av
609+ else throw(($getType(av) + " couldn't be cast to Int"))
606610 }, {
607- let at = bR[1]
608- if ($isInstanceOf(at, "Int"))
609- then at
610- else throw(($getType(at) + " couldn't be cast to Int"))
611+ let av = bT[1]
612+ if ($isInstanceOf(av, "Int"))
613+ then av
614+ else throw(($getType(av) + " couldn't be cast to Int"))
611615 })
612616 else throw("Strict value is not equal to itself.")
613617 }
614- else if ((bf == b))
618+ else if ((bh == b))
615619 then {
616- let cC = split({
617- let at = invoke(aq, "evaluateGetREADONLY", [aw, ct], nil)
618- if ($isInstanceOf(at, "String"))
619- then at
620- else throw(($getType(at) + " couldn't be cast to String"))
620+ let cE = split({
621+ let av = invoke(as, "evaluateGetREADONLY", [ay, cv], nil)
622+ if ($isInstanceOf(av, "String"))
623+ then av
624+ else throw(($getType(av) + " couldn't be cast to String"))
621625 }, "__")
622- if ((cC == cC))
623- then $Tuple2(parseIntValue(cC[1]), parseIntValue(cC[2]))
626+ if ((cE == cE))
627+ then $Tuple2(parseIntValue(cE[1]), parseIntValue(cE[2]))
624628 else throw("Strict value is not equal to itself.")
625629 }
626630 else throw("Wrong pool type")
627- let cD = cB._1
628- let cE = cB._2
629- if ((cz > 0))
631+ let cF = cD._1
632+ let cG = cD._2
633+ if ((cB > 0))
630634 then {
631- let cF = if (if ((cA == au))
632- then (cz > cD)
635+ let cH = if (if ((cC == aw))
636+ then (cB > cF)
633637 else false)
634- then (cz - cD)
635- else if (if ((cA == av))
636- then (cz > cE)
638+ then (cB - cF)
639+ else if (if ((cC == ax))
640+ then (cB > cG)
637641 else false)
638- then (cz - cE)
642+ then (cB - cG)
639643 else 0
640- let cG = if ((cF > 0))
641- then if ((bf == a))
642- then bS(aD, au, av, ax, ay, cF, cA)
643- else cd(aD, au, av, ax, ay, cF, cA)
644+ let cI = if ((cH > 0))
645+ then if ((bh == a))
646+ then bU(aF, aw, ax, az, aA, cH, cC)
647+ else cf(aF, aw, ax, az, aA, cH, cC)
644648 else $Tuple2("", 0)
645- let cc = cG._1
646- let cb = cG._2
647- if ((cA == au))
648- then $Tuple2(((cD + cF) - cz), (cE - cb))
649- else $Tuple2((cD - cb), ((cE + cF) - cz))
649+ let ce = cI._1
650+ let cd = cI._2
651+ if ((cC == aw))
652+ then $Tuple2(((cF + cH) - cB), (cG - cd))
653+ else $Tuple2((cF - cd), ((cG + cH) - cB))
650654 }
651- else $Tuple2(cD, cE)
655+ else $Tuple2(cF, cG)
652656 }
653657
654658
655-func cH (aA,aD) = if ((aA == a))
659+func cJ (aC,aF) = if ((aC == a))
656660 then {
657- let cI = ak(ac)
658- if ((cI == cI))
661+ let cK = am(ae)
662+ if ((cK == cK))
659663 then {
660- let bR = invoke(aJ(), "claim", [aD], nil)
661- if ((bR == bR))
664+ let bT = invoke(aL(), "claim", [aF], nil)
665+ if ((bT == bT))
662666 then {
663- let cJ = ak(ac)
664- $Tuple2((cJ - cI), ac)
667+ let cL = am(ae)
668+ $Tuple2((cL - cK), ae)
665669 }
666670 else throw("Strict value is not equal to itself.")
667671 }
668672 else throw("Strict value is not equal to itself.")
669673 }
670- else if ((aA == b))
674+ else if ((aC == b))
671675 then {
672- let cI = ak(ad)
673- if ((cI == cI))
676+ let cK = am(af)
677+ if ((cK == cK))
674678 then {
675- let bR = invoke(aK(Address(fromBase58String(aD))), "claimWX", [aD], nil)
676- if ((bR == bR))
679+ let bT = invoke(aM(Address(fromBase58String(aF))), "claimWX", [aF], nil)
680+ if ((bT == bT))
677681 then {
678- let cJ = ak(ad)
679- $Tuple2((cJ - cI), ad)
682+ let cL = am(af)
683+ $Tuple2((cL - cK), af)
680684 }
681685 else throw("Strict value is not equal to itself.")
682686 }
685689 else throw("Wrong pool type")
686690
687691
688-func cK (bf,aD,aI,bx,au,by,av,ax,ay,cL) = {
689- let cM = ak(fromBase58String(cL))
690- if ((cM == cM))
692+func cM (bh,aF,aK,bz,aw,bA,ax,az,aA,cN) = {
693+ let cO = am(fromBase58String(cN))
694+ if ((cO == cO))
691695 then {
692- let aq = addressFromStringValue(aD)
693- let cN = if (if ((bx > 0))
694- then (by > 0)
696+ let as = addressFromStringValue(aF)
697+ let cP = if (if ((bz > 0))
698+ then (bA > 0)
695699 else false)
696700 then {
697- let cO = bw(bf, aq, bx, au, by, av, ax, ay)
698- let cp = cO._1
699- let cq = cO._2
700- let cr = cO._3
701- let cs = cO._4
702- let bR = bG(aq, bf, cp, au, cq, av)
703- if ((bR == bR))
704- then $Tuple2(cr, cs)
701+ let cQ = by(bh, as, bz, aw, bA, ax, az, aA)
702+ let cr = cQ._1
703+ let cs = cQ._2
704+ let ct = cQ._3
705+ let cu = cQ._4
706+ let bT = bI(as, bh, cr, aw, cs, ax)
707+ if ((bT == bT))
708+ then $Tuple2(ct, cu)
705709 else throw("Strict value is not equal to itself.")
706710 }
707- else if ((bx > 0))
708- then $Tuple2(bx, au)
709- else if ((by > 0))
710- then $Tuple2(by, av)
711+ else if ((bz > 0))
712+ then $Tuple2(bz, aw)
713+ else if ((bA > 0))
714+ then $Tuple2(bA, ax)
711715 else throw("pmts must be > 0")
712- let cr = cN._1
713- let cs = cN._2
714- let bR = if ((cr > 0))
715- then bI(aq, bf, cr, cs)
716+ let ct = cP._1
717+ let cu = cP._2
718+ let bT = if ((ct > 0))
719+ then bK(as, bh, ct, cu)
716720 else nil
717- if ((bR == bR))
721+ if ((bT == bT))
718722 then {
719- let cP = ak(fromBase58String(cL))
720- let cQ = (cP - cM)
721- let cR = fraction(cQ, aH(aD, aI), m)
722- let cS = (cQ - cR)
723- if ((0 >= cS))
723+ let cR = am(fromBase58String(cN))
724+ let cS = (cR - cO)
725+ let cT = fraction(cS, aJ(aF, aK), m)
726+ let cU = (cS - cT)
727+ if ((0 >= cU))
724728 then throw("amount of staked sharetokens must be > 0")
725729 else {
726- let cT = bK(aD, bf, cL, cS)
727- if ((cT == cT))
728- then $Tuple2(cS, cR)
730+ let cV = bM(aF, bh, cN, cU)
731+ if ((cV == cV))
732+ then $Tuple2(cU, cT)
729733 else throw("Strict value is not equal to itself.")
730734 }
731735 }
735739 }
736740
737741
738-func cU (aD,aG,cV,cR,cW,aw,aA,cX) = {
739- let cY = aC(aD)
740- let cZ = aE(aD)
741- let da = if (cX)
742- then $Tuple2(getIntegerValue(this, (aD + C)), (cZ + cV))
743- else $Tuple2(getIntegerValue(this, (aD + D)), cZ)
744- let db = da._1
745- let dc = da._2
746-[IntegerEntry((aD + A), (cY + cV)), IntegerEntry((aD + B), dc), IntegerEntry((((((aD + "_") + aG) + "_") + toString(cW)) + u), cV), IntegerEntry((((((aD + "_") + aG) + "_") + toString(cW)) + z), db), StringEntry((((aG + "_") + toString(cW)) + v), aD), IntegerEntry((aG + y), cW), ScriptTransfer(Y, cR, fromBase58String(aw))]
742+func cW (aF,aI,cX,cT,cY,ay,aC,cZ) = {
743+ let da = aE(aF)
744+ let db = aG(aF)
745+ let dc = if (cZ)
746+ then $Tuple2(getIntegerValue(this, (aF + C)), (db + cX))
747+ else $Tuple2(getIntegerValue(this, (aF + D)), db)
748+ let dd = dc._1
749+ let de = dc._2
750+[IntegerEntry((aF + A), (da + cX)), IntegerEntry((aF + B), de), IntegerEntry((((((aF + "_") + aI) + "_") + toString(cY)) + u), cX), IntegerEntry((((((aF + "_") + aI) + "_") + toString(cY)) + z), dd), StringEntry((((aI + "_") + toString(cY)) + v), aF), IntegerEntry((aI + y), cY), ScriptTransfer(aa, cT, fromBase58String(ay))]
747751 }
748752
749753
750-func dd (de,df,dg,dh,di,dj,dk,dl,dm,dn) = {
751- let do = ak(aO(de))
752- if ((do == do))
754+func df (dg,dh,di,dj,dk,dl,dm,dn,do,dp) = {
755+ let dq = am(aQ(dg))
756+ if ((dq == dq))
753757 then {
754- let bR = invoke(Z, "swap", [dh, di, dj, dk, dl, dm, dn], [AttachedPayment(dg, df)])
755- if ((bR == bR))
756- then (ak(aO(de)) - do)
758+ let bT = invoke(ab, "swap", [dj, dk, dl, dm, dn, do, dp], [AttachedPayment(di, dh)])
759+ if ((bT == bT))
760+ then (am(aQ(dg)) - dq)
757761 else throw("Strict value is not equal to itself.")
758762 }
759763 else throw("Strict value is not equal to itself.")
760764 }
761765
762766
763-func dp (de,df,dg,dq,dr,dn) = {
764- let do = ak(aO(de))
765- if ((do == do))
767+func dr (dg,dh,di,ds,dt,dp) = {
768+ let dq = am(aQ(dg))
769+ if ((dq == dq))
766770 then {
767- let bR = invoke(Z, "puzzleSwap", [dq, dr, dn], [AttachedPayment(dg, df)])
768- if ((bR == bR))
769- then (ak(aO(de)) - do)
771+ let bT = invoke(ab, "puzzleSwap", [ds, dt, dp], [AttachedPayment(di, dh)])
772+ if ((bT == bT))
773+ then (am(aQ(dg)) - dq)
770774 else throw("Strict value is not equal to itself.")
771775 }
772776 else throw("Strict value is not equal to itself.")
773777 }
774778
775779
776-func ds (de,df,dg,dt,du,dv,dw,dx,dy,dn) = {
777- let do = ak(aO(de))
778- if ((do == do))
780+func du (dg,dh,di,dv,dw,dx,dy,dz,dA,dp) = {
781+ let dq = am(aQ(dg))
782+ if ((dq == dq))
779783 then {
780- let bR = invoke(Z, "swopfiSwap", [dt, du, dv, dw, dx, dy, dn], [AttachedPayment(dg, df)])
781- if ((bR == bR))
782- then (ak(aO(de)) - do)
784+ let bT = invoke(ab, "swopfiSwap", [dv, dw, dx, dy, dz, dA, dp], [AttachedPayment(di, dh)])
785+ if ((bT == bT))
786+ then (am(aQ(dg)) - dq)
783787 else throw("Strict value is not equal to itself.")
784788 }
785789 else throw("Strict value is not equal to itself.")
786790 }
787791
788792
789-func dz (aD,bf,dA,dB) = {
790- let aq = Address(fromBase58String(aD))
791- let dC = az(aq, bf)
792- let dD = dC._1
793- let dE = dC._2
794- let ax = dC._3
795- let ay = dC._4
796- let aw = dC._5
797- if (if ((dA != dD))
798- then (dA != dE)
793+func dB (aF,bh,dC,dD) = {
794+ let as = Address(fromBase58String(aF))
795+ let dE = aB(as, bh)
796+ let dF = dE._1
797+ let dG = dE._2
798+ let az = dE._3
799+ let aA = dE._4
800+ let ay = dE._5
801+ if (if ((dC != dF))
802+ then (dC != dG)
799803 else false)
800804 then throw("Wrong asset")
801805 else {
802- let dF = if ((dA == dD))
803- then $Tuple2(dB, 0)
804- else $Tuple2(0, dB)
805- let bx = dF._1
806- let by = dF._2
807- let dG = cK(bf, aD, i, bx, dD, by, dE, ax, ay, aw)
808- let cV = dG._1
809- let dH = dG._2
810- let dI = valueOrElse(getInteger(this, (aD + C)), 0)
811- let dJ = valueOrElse(getInteger(this, (aD + D)), 0)
812- let dK = aC(aD)
813- let dL = aE(aD)
814- let dM = fraction(dL, j, dK)
815- let dN = fraction(cV, dM, j)
816- let dO = (cV - dN)
817- let dP = if ((dL > 0))
818- then (dI + fraction(dN, k, dL))
806+ let dH = if ((dC == dF))
807+ then $Tuple2(dD, 0)
808+ else $Tuple2(0, dD)
809+ let bz = dH._1
810+ let bA = dH._2
811+ let dI = cM(bh, aF, i, bz, dF, bA, dG, az, aA, ay)
812+ let cX = dI._1
813+ let dJ = dI._2
814+ let dK = valueOrElse(getInteger(this, (aF + C)), 0)
815+ let dL = valueOrElse(getInteger(this, (aF + D)), 0)
816+ let dM = aE(aF)
817+ let dN = aG(aF)
818+ let dO = fraction(dN, j, dM)
819+ let dP = fraction(cX, dO, j)
820+ let dQ = (cX - dP)
821+ let dR = if ((dN > 0))
822+ then (dK + fraction(dP, k, dN))
819823 else 0
820- let dQ = if (((dK - dL) > 0))
821- then (dJ + fraction(dO, k, (dK - dL)))
824+ let dS = if (((dM - dN) > 0))
825+ then (dL + fraction(dQ, k, (dM - dN)))
822826 else 0
823- let dR = fraction(dN, aH(aD, d), m)
824- let dS = fraction(dO, aH(aD, c), m)
825- let dT = bM(aD, bf, aw, (dR + dS))
826- if ((dT == dT))
827- then ([IntegerEntry((aD + C), dP), IntegerEntry((aD + D), dQ), IntegerEntry((aD + A), ((dK + cV) - dT)), IntegerEntry((aD + B), ((dL + dN) - dR)), ScriptTransfer(Y, (dR + dS), fromBase58String(aw))] ++ bs(dD, dE, aw))
827+ let dT = fraction(dP, aJ(aF, d), m)
828+ let dU = fraction(dQ, aJ(aF, c), m)
829+ let dV = bO(aF, bh, ay, (dT + dU))
830+ if ((dV == dV))
831+ then ([IntegerEntry((aF + C), dR), IntegerEntry((aF + D), dS), IntegerEntry((aF + A), ((dM + cX) - dV)), IntegerEntry((aF + B), ((dN + dP) - dT)), ScriptTransfer(aa, (dT + dU), fromBase58String(ay))] ++ bu(dF, dG, ay))
828832 else throw("Strict value is not equal to itself.")
829833 }
830834 }
831835
832836
833-func dU (aD,dV,dW,dX) = {
834- let aq = Address(fromBase58String(aD))
835- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Unknown pool")
836- let dY = az(aq, bf)
837- let bT = dY._1
838- let bU = dY._2
839- let ax = dY._3
840- let ay = dY._4
841- let aw = dY._5
842- let dZ = ak(aO(bT))
843- if ((dZ == dZ))
837+func dW (aF,dX,dY,dZ) = {
838+ let as = Address(fromBase58String(aF))
839+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Unknown pool")
840+ let ea = aB(as, bh)
841+ let bV = ea._1
842+ let bW = ea._2
843+ let az = ea._3
844+ let aA = ea._4
845+ let ay = ea._5
846+ let eb = am(aQ(bV))
847+ if ((eb == eb))
844848 then {
845- let ea = ak(aO(bU))
846- if ((ea == ea))
849+ let ec = am(aQ(bW))
850+ if ((ec == ec))
847851 then {
848- let bR = if ((bf == a))
849- then invoke(aq, "callFunction", ["withdraw", [toString(dV)]], nil)
852+ let bT = if ((bh == a))
853+ then invoke(as, "callFunction", ["withdraw", [toString(dX)]], nil)
850854 else {
851- let bR = bM(aD, bf, aw, dV)
852- if ((bR == bR))
853- then invoke(aq, "get", nil, [AttachedPayment(aO(aw), dV)])
855+ let bT = bO(aF, bh, ay, dX)
856+ if ((bT == bT))
857+ then invoke(as, "get", nil, [AttachedPayment(aQ(ay), dX)])
854858 else throw("Strict value is not equal to itself.")
855859 }
856- if ((bR == bR))
860+ if ((bT == bT))
857861 then {
858- let eb = ak(aO(bT))
859- let ec = ak(aO(bU))
860- let ed = $Tuple2((eb - dZ), (ec - ea))
861- let ee = ed._1
862- let ef = ed._2
863- let eg = if ((dW > 0))
862+ let ed = am(aQ(bV))
863+ let ee = am(aQ(bW))
864+ let ef = $Tuple2((ed - eb), (ee - ec))
865+ let eg = ef._1
866+ let eh = ef._2
867+ let ei = if ((dY > 0))
864868 then {
865- let cF = if (if ((dX == bT))
866- then (dW > ee)
869+ let cH = if (if ((dZ == bV))
870+ then (dY > eg)
867871 else false)
868- then (dW - ee)
869- else if (if ((dX == bU))
870- then (dW > ef)
872+ then (dY - eg)
873+ else if (if ((dZ == bW))
874+ then (dY > eh)
871875 else false)
872- then (dW - ef)
876+ then (dY - eh)
873877 else 0
874- let eh = if ((cF > 0))
875- then cj(bf, aD, bT, bU, ax, ay, cF, dX)
878+ let ej = if ((cH > 0))
879+ then cl(bh, aF, bV, bW, az, aA, cH, dZ)
876880 else 0
877- if ((eh == eh))
881+ if ((ej == ej))
878882 then {
879- let ei = ak(aO(bT))
880- let ej = ak(aO(bU))
881- if ((dX == bT))
882- then $Tuple2(((ei - dZ) - dW), (ej - ea))
883- else $Tuple2((ei - dZ), ((ej - ea) - dW))
883+ let ek = am(aQ(bV))
884+ let el = am(aQ(bW))
885+ if ((dZ == bV))
886+ then $Tuple2(((ek - eb) - dY), (el - ec))
887+ else $Tuple2((ek - eb), ((el - ec) - dY))
884888 }
885889 else throw("Strict value is not equal to itself.")
886890 }
887- else $Tuple2(ee, ef)
888- let ek = eg._1
889- let el = eg._2
890- $Tuple7(ek, bT, el, bU, eb, ec, aw)
891+ else $Tuple2(eg, eh)
892+ let em = ei._1
893+ let en = ei._2
894+ $Tuple7(em, bV, en, bW, ed, ee, ay)
891895 }
892896 else throw("Strict value is not equal to itself.")
893897 }
897901 }
898902
899903
900-func em (aG,aD,en,eo) = {
901- let ep = valueOrErrorMessage(getInteger(this, (((((aD + "_") + aG) + "_") + en) + u)), "Unknown position")
902- let eq = getIntegerValue(this, (((((aD + "_") + aG) + "_") + en) + z))
903- let er = if (eo)
904- then getIntegerValue(this, (aD + C))
905- else getIntegerValue(this, (aD + D))
906- (ep + fraction(ep, (er - eq), k))
904+func eo (aI,aF,ep,eq) = {
905+ let er = valueOrErrorMessage(getInteger(this, (((((aF + "_") + aI) + "_") + ep) + u)), "Unknown position")
906+ let es = getIntegerValue(this, (((((aF + "_") + aI) + "_") + ep) + z))
907+ let et = if (eq)
908+ then getIntegerValue(this, (aF + C))
909+ else getIntegerValue(this, (aF + D))
910+ (er + fraction(er, (et - es), k))
907911 }
908912
909913
910-func es (aG,aD,en,et) = {
911- let ep = valueOrErrorMessage(getInteger(this, (((((aD + "_") + aG) + "_") + en) + u)), "Unknown position")
912- let cz = valueOrElse(getInteger(this, (((((aD + "_") + aG) + "_") + en) + w)), 0)
913- let dV = em(aG, aD, en, (cz > 0))
914- let eu = aC(aD)
915- let ev = Address(fromBase58String(aG))
916- let dX = valueOrElse(getString(this, (((((aD + "_") + aG) + "_") + en) + x)), "")
917- let dW = if ((cz > 0))
914+func eu (aI,aF,ep,ev) = {
915+ let er = valueOrErrorMessage(getInteger(this, (((((aF + "_") + aI) + "_") + ep) + u)), "Unknown position")
916+ let cB = valueOrElse(getInteger(this, (((((aF + "_") + aI) + "_") + ep) + w)), 0)
917+ let dX = eo(aI, aF, ep, (cB > 0))
918+ let ew = aE(aF)
919+ let ex = Address(fromBase58String(aI))
920+ let dZ = valueOrElse(getString(this, (((((aF + "_") + aI) + "_") + ep) + x)), "")
921+ let dY = if ((cB > 0))
918922 then {
919- let at = invoke(ae(), "getAssetDebt", [false, ((aG + "_") + en), dX], nil)
920- if ($isInstanceOf(at, "Int"))
921- then at
922- else throw(($getType(at) + " couldn't be cast to Int"))
923+ let av = invoke(ag(), "getAssetDebt", [false, ((aI + "_") + ep), dZ], nil)
924+ if ($isInstanceOf(av, "Int"))
925+ then av
926+ else throw(($getType(av) + " couldn't be cast to Int"))
923927 }
924928 else 0
925- let ew = dU(aD, dV, dW, dX)
926- if ((ew == ew))
929+ let ey = dW(aF, dX, dY, dZ)
930+ if ((ey == ey))
927931 then {
928- let aw = ew._7
929- let ec = ew._6
930- let eb = ew._5
931- let bU = ew._4
932- let ex = ew._3
933- let bT = ew._2
934- let ey = ew._1
935- let ez = if ((dW > 0))
936- then invoke(ae(), "repayFor", [((aG + "_") + en)], [AttachedPayment(aO(dX), dW)])
932+ let ay = ey._7
933+ let ee = ey._6
934+ let ed = ey._5
935+ let bW = ey._4
936+ let ez = ey._3
937+ let bV = ey._2
938+ let eA = ey._1
939+ let eB = if ((dY > 0))
940+ then invoke(ag(), "repayFor", [((aI + "_") + ep)], [AttachedPayment(aQ(dZ), dY)])
937941 else 0
938- if ((ez == ez))
939- then ([DeleteEntry((((((aD + "_") + aG) + "_") + en) + u)), DeleteEntry((((((aD + "_") + aG) + "_") + en) + z)), IntegerEntry((aD + A), (eu - dV)), ScriptTransfer(ev, ey, aO(bT)), ScriptTransfer(ev, ex, aO(bU))] ++ bs(bT, bU, aw))
942+ if ((eB == eB))
943+ then ([DeleteEntry((((((aF + "_") + aI) + "_") + ep) + u)), DeleteEntry((((((aF + "_") + aI) + "_") + ep) + z)), IntegerEntry((aF + A), (ew - dX)), ScriptTransfer(ex, eA, aQ(bV)), ScriptTransfer(ex, ez, aQ(bW))] ++ bu(bV, bW, ay))
940944 else throw("Strict value is not equal to itself.")
941945 }
942946 else throw("Strict value is not equal to itself.")
943947 }
944948
945949
946-func eA (eB) = {
947- let eC = split(valueOrErrorMessage(getString(this, (eB + K)), ("No request with id " + eB)), ",")
948- let aG = eC[0]
949- let aD = eC[1]
950- let bx = parseIntValue(eC[2])
951- let dD = eC[3]
952- let by = parseIntValue(eC[4])
953- let dE = eC[5]
954- let ax = parseIntValue(eC[6])
955- let ay = parseIntValue(eC[7])
956- let aw = eC[8]
957- let eD = eC[9]
958- let eE = parseIntValue(eC[10])
959- $Tuple11(aG, aD, bx, dD, by, dE, ax, ay, aw, eD, eE)
950+func eC (eD) = {
951+ let eE = split(valueOrErrorMessage(getString(this, (eD + K)), ("No request with id " + eD)), ",")
952+ let aI = eE[0]
953+ let aF = eE[1]
954+ let bz = parseIntValue(eE[2])
955+ let dF = eE[3]
956+ let bA = parseIntValue(eE[4])
957+ let dG = eE[5]
958+ let az = parseIntValue(eE[6])
959+ let aA = parseIntValue(eE[7])
960+ let ay = eE[8]
961+ let eF = eE[9]
962+ let eG = parseIntValue(eE[10])
963+ $Tuple11(aI, aF, bz, dF, bA, dG, az, aA, ay, eF, eG)
960964 }
961965
962966
963-func eF (bx,by,au,av,eG,eH) = {
964- let bj = ( let at = invoke(aa, "getTWAP60", [au, false], nil)
965- if ($isInstanceOf(at, "(Int, Int)"))
966- then at
967- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
968- let bk = ( let at = invoke(aa, "getTWAP60", [av, false], nil)
969- if ($isInstanceOf(at, "(Int, Int)"))
970- then at
971- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
972- let eI = pow(10, 0, aP(au), 0, 0, DOWN)
973- let eJ = pow(10, 0, aP(av), 0, 0, DOWN)
974- let eK = (fraction(bj, bx, eI) + fraction(bk, by, eJ))
975- let eL = if ((eH == au))
976- then $Tuple2(bj, eI)
977- else $Tuple2(bk, eJ)
978- let eM = eL._1
979- let eN = eL._2
980- fraction(fraction(eK, (eG - 100), 100), eN, eM)
967+func eH (bz,bA,aw,ax,eI,eJ) = {
968+ let bl = ( let av = invoke(ac, "getTWAP60", [aw, false], nil)
969+ if ($isInstanceOf(av, "(Int, Int)"))
970+ then av
971+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
972+ let bm = ( let av = invoke(ac, "getTWAP60", [ax, false], nil)
973+ if ($isInstanceOf(av, "(Int, Int)"))
974+ then av
975+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
976+ let eK = pow(10, 0, aR(aw), 0, 0, DOWN)
977+ let eL = pow(10, 0, aR(ax), 0, 0, DOWN)
978+ let eM = (fraction(bl, bz, eK) + fraction(bm, bA, eL))
979+ let eN = if ((eJ == aw))
980+ then $Tuple2(bl, eK)
981+ else $Tuple2(bm, eL)
982+ let eO = eN._1
983+ let eP = eN._2
984+ fraction(fraction(eM, (eI - 100), 100), eP, eO)
981985 }
982986
983987
984-@Callable(ah)
985-func calcPriceImpactEVALONLY (aD,eG,eH,bx,by) = if (if ((100 > eG))
988+@Callable(aj)
989+func calcPriceImpactEVALONLY (aF,eI,eJ,bz,bA) = if (if ((100 > eI))
986990 then true
987- else (eG > 300))
991+ else (eI > 300))
988992 then throw("Leverage can't be <100 and >300")
989993 else {
990- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
991- let eO = az(Address(fromBase58String(aD)), bf)
992- let dD = eO._1
993- let dE = eO._2
994- let ax = eO._3
995- let ay = eO._4
996- let aw = eO._5
997- let cz = if ((eG > 100))
998- then eF(bx, by, dD, dE, eG, eH)
994+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
995+ let eQ = aB(Address(fromBase58String(aF)), bh)
996+ let dF = eQ._1
997+ let dG = eQ._2
998+ let az = eQ._3
999+ let aA = eQ._4
1000+ let ay = eQ._5
1001+ let cB = if ((eI > 100))
1002+ then eH(bz, bA, dF, dG, eI, eJ)
9991003 else 0
1000- let eP = if ((eH == dD))
1001- then $Tuple2((bx + cz), by)
1002- else $Tuple2(bx, (by + cz))
1003- let eQ = eP._1
1004- let eR = eP._2
1005- let eS = cm(bf, aD, eQ, dD, eR, dE, ax, ay)
1006- let ct = eS._1
1007- let cx = eS._2
1008- let eT = if ((0 > cx))
1009- then (cx * -1)
1010- else cx
1011- $Tuple2(nil, [eT])
1004+ let eR = if ((eJ == dF))
1005+ then $Tuple2((bz + cB), bA)
1006+ else $Tuple2(bz, (bA + cB))
1007+ let eS = eR._1
1008+ let eT = eR._2
1009+ let eU = co(bh, aF, eS, dF, eT, dG, az, aA)
1010+ let cv = eU._1
1011+ let cz = eU._2
1012+ let eV = if ((0 > cz))
1013+ then (cz * -1)
1014+ else cz
1015+ $Tuple2(nil, [eV])
10121016 }
10131017
10141018
10151019
1016-@Callable(ah)
1017-func getShareAssetPriceREADONLY (aw) = {
1018- let eU = be(aw)
1019- $Tuple2(nil, eU)
1020+@Callable(aj)
1021+func getShareAssetPriceREADONLY (ay) = {
1022+ let eW = bg(ay)
1023+ $Tuple2(nil, eW)
10201024 }
10211025
10221026
10231027
1024-@Callable(ah)
1025-func getUserPositionShareAmountREADONLY (aG,cW) = {
1026- let aD = valueOrErrorMessage(getString(this, (((aG + "_") + cW) + v)), "Unknown position")
1027- let cz = getIntegerValue(this, (((((aD + "_") + aG) + "_") + cW) + w))
1028- let dV = em(aG, aD, cW, (cz > 0))
1029- $Tuple2(nil, dV)
1028+@Callable(aj)
1029+func getUserPositionShareAmountREADONLY (aI,cY) = {
1030+ let aF = valueOrErrorMessage(getString(this, (((aI + "_") + cY) + v)), "Unknown position")
1031+ let cB = getIntegerValue(this, (((((aF + "_") + aI) + "_") + cY) + w))
1032+ let dX = eo(aI, aF, cY, (cB > 0))
1033+ $Tuple2(nil, dX)
10301034 }
10311035
10321036
10331037
1034-@Callable(ah)
1035-func getUserPositionInDollarsREADONLY (aG,eV,cW) = {
1036- func eW (aV,aD) = {
1037- let eX = aV
1038- let eY = eX._1
1039- let eZ = eX._2
1040- let fa = eX._3
1041- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
1042- let fb = az(Address(fromBase58String(aD)), bf)
1043- let dD = fb._1
1044- let dE = fb._2
1045- let ax = fb._3
1046- let ay = fb._4
1047- let aw = fb._5
1048- let cz = valueOrElse(getInteger(this, (((((aD + "_") + aG) + "_") + cW[fa]) + w)), 0)
1049- let dV = em(aG, aD, cW[fa], (cz > 0))
1050- let eU = be(aw)
1051- let fc = pow(10, 0, aP(aw), 0, 0, DOWN)
1052- let fd = fraction(dV, eU, fc)
1053- if ((cz == 0))
1054- then $Tuple3((eY :+ fd), (eZ :+ 0), (fa + 1))
1038+@Callable(aj)
1039+func getUserPositionInDollarsREADONLY (aI,eX,cY) = {
1040+ func eY (aX,aF) = {
1041+ let eZ = aX
1042+ let fa = eZ._1
1043+ let fb = eZ._2
1044+ let fc = eZ._3
1045+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
1046+ let fd = aB(Address(fromBase58String(aF)), bh)
1047+ let dF = fd._1
1048+ let dG = fd._2
1049+ let az = fd._3
1050+ let aA = fd._4
1051+ let ay = fd._5
1052+ let cB = valueOrElse(getInteger(this, (((((aF + "_") + aI) + "_") + cY[fc]) + w)), 0)
1053+ let dX = eo(aI, aF, cY[fc], (cB > 0))
1054+ let eW = bg(ay)
1055+ let fe = pow(10, 0, aR(ay), 0, 0, DOWN)
1056+ let ff = fraction(dX, eW, fe)
1057+ if ((cB == 0))
1058+ then $Tuple3((fa :+ ff), (fb :+ 0), (fc + 1))
10551059 else {
1056- let dX = getStringValue(this, (((((aD + "_") + aG) + "_") + cW[fa]) + x))
1057- let dW = {
1058- let at = invoke(ae(), "getAssetDebt", [false, ((aG + "_") + cW[fa]), dX], nil)
1059- if ($isInstanceOf(at, "Int"))
1060- then at
1061- else throw(($getType(at) + " couldn't be cast to Int"))
1060+ let dZ = getStringValue(this, (((((aF + "_") + aI) + "_") + cY[fc]) + x))
1061+ let dY = {
1062+ let av = invoke(ag(), "getAssetDebt", [false, ((aI + "_") + cY[fc]), dZ], nil)
1063+ if ($isInstanceOf(av, "Int"))
1064+ then av
1065+ else throw(($getType(av) + " couldn't be cast to Int"))
10621066 }
1063- let fe = ( let at = invoke(aa, "getTWAP60", [dX, false], nil)
1064- if ($isInstanceOf(at, "(Int, Int)"))
1065- then at
1066- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._1
1067- let ff = pow(10, 0, aP(dX), 0, 0, DOWN)
1068- let fg = fraction(dW, fe, ff)
1069- $Tuple3((eY :+ fd), (eZ :+ fg), (fa + 1))
1067+ let fg = ( let av = invoke(ac, "getTWAP60", [dZ, false], nil)
1068+ if ($isInstanceOf(av, "(Int, Int)"))
1069+ then av
1070+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._1
1071+ let fh = pow(10, 0, aR(dZ), 0, 0, DOWN)
1072+ let fi = fraction(dY, fg, fh)
1073+ $Tuple3((fa :+ ff), (fb :+ fi), (fc + 1))
10701074 }
10711075 }
10721076
1073- let fh = {
1074- let aX = eV
1075- let aY = size(aX)
1076- let aZ = $Tuple3(nil, nil, 0)
1077- func ba (bb,bc) = if ((bc >= aY))
1078- then bb
1079- else eW(bb, aX[bc])
1077+ let fj = {
1078+ let aZ = eX
1079+ let ba = size(aZ)
1080+ let bb = $Tuple3(nil, nil, 0)
1081+ func bc (bd,be) = if ((be >= ba))
1082+ then bd
1083+ else eY(bd, aZ[be])
10801084
1081- func bd (bb,bc) = if ((bc >= aY))
1082- then bb
1085+ func bf (bd,be) = if ((be >= ba))
1086+ then bd
10831087 else throw("List size exceeds 20")
10841088
1085- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1089+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
10861090 }
1087- let fi = fh._1
1088- let dW = fh._2
1089- $Tuple2(nil, $Tuple2(fi, dW))
1091+ let fk = fj._1
1092+ let dY = fj._2
1093+ $Tuple2(nil, $Tuple2(fk, dY))
10901094 }
10911095
10921096
10931097
1094-@Callable(ah)
1095-func replenish (aD,eG,eH) = if (if ((100 > eG))
1098+@Callable(aj)
1099+func replenish (aF,eI,eJ) = if (if ((100 > eI))
10961100 then true
1097- else (eG > 300))
1101+ else (eI > 300))
10981102 then throw("Leverage can't be <100 and >300")
10991103 else {
1100- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
1101- let fj = az(Address(fromBase58String(aD)), bf)
1102- let dD = fj._1
1103- let dE = fj._2
1104- let ax = fj._3
1105- let ay = fj._4
1106- let aw = fj._5
1107- let fk = if ((size(ah.payments) == 2))
1108- then if ((aN(ah.payments[0].assetId) != dD))
1104+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
1105+ let fl = aB(Address(fromBase58String(aF)), bh)
1106+ let dF = fl._1
1107+ let dG = fl._2
1108+ let az = fl._3
1109+ let aA = fl._4
1110+ let ay = fl._5
1111+ let fm = if ((size(aj.payments) == 2))
1112+ then if ((aP(aj.payments[0].assetId) != dF))
11091113 then throw("Wrong payment asset A")
1110- else if ((aN(ah.payments[1].assetId) != dE))
1114+ else if ((aP(aj.payments[1].assetId) != dG))
11111115 then throw("Wrong payment asset B")
1112- else $Tuple4(ah.payments[0].amount, dD, ah.payments[1].amount, dE)
1113- else if ((size(ah.payments) == 1))
1114- then if ((aN(ah.payments[0].assetId) == dD))
1115- then $Tuple4(ah.payments[0].amount, dD, 0, dE)
1116- else if ((aN(ah.payments[0].assetId) == dE))
1117- then $Tuple4(0, dD, ah.payments[0].amount, dE)
1116+ else $Tuple4(aj.payments[0].amount, dF, aj.payments[1].amount, dG)
1117+ else if ((size(aj.payments) == 1))
1118+ then if ((aP(aj.payments[0].assetId) == dF))
1119+ then $Tuple4(aj.payments[0].amount, dF, 0, dG)
1120+ else if ((aP(aj.payments[0].assetId) == dG))
1121+ then $Tuple4(0, dF, aj.payments[0].amount, dG)
11181122 else throw("Wrong payment")
11191123 else throw("One or two payments expected")
1120- let bx = fk._1
1121- let fl = fk._2
1122- let by = fk._3
1123- let fm = fk._4
1124- let fn = aF(toString(ah.caller))
1125- if ((eG > 100))
1124+ let bz = fm._1
1125+ let fn = fm._2
1126+ let bA = fm._3
1127+ let fo = fm._4
1128+ let fp = aH(toString(aj.caller))
1129+ if ((eI > 100))
11261130 then {
1127- let cz = eF(bx, by, fl, fm, eG, eH)
1128- let eC = makeString([toString(ah.caller), aD, toString(bx), fl, toString(by), fm, toString(ax), toString(ay), aw, eH, toString(cz)], ",")
1129- let fo = {
1130- let at = invoke(this, "createNewRequest", [eC], nil)
1131- if ($isInstanceOf(at, "Int"))
1132- then at
1133- else throw(($getType(at) + " couldn't be cast to Int"))
1131+ let cB = eH(bz, bA, fn, fo, eI, eJ)
1132+ let eE = makeString([toString(aj.caller), aF, toString(bz), fn, toString(bA), fo, toString(az), toString(aA), ay, eJ, toString(cB)], ",")
1133+ let fq = {
1134+ let av = invoke(this, "createNewRequest", [eE], nil)
1135+ if ($isInstanceOf(av, "Int"))
1136+ then av
1137+ else throw(($getType(av) + " couldn't be cast to Int"))
11341138 }
1135- if ((fo == fo))
1139+ if ((fq == fq))
11361140 then {
1137- let fp = [((toString(ah.caller) + "_") + toString(fn)), aw, eH, cz, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fo, "Can't create new request"))]
1138- let bR = reentrantInvoke(ae(), "flashPosition", fp, nil)
1139- if ((bR == bR))
1141+ let fr = [((toString(aj.caller) + "_") + toString(fp)), ay, eJ, cB, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fq, "Can't create new request"))]
1142+ let bT = reentrantInvoke(ag(), "flashPosition", fr, nil)
1143+ if ((bT == bT))
11401144 then nil
11411145 else throw("Strict value is not equal to itself.")
11421146 }
11431147 else throw("Strict value is not equal to itself.")
11441148 }
11451149 else {
1146- let fq = cK(bf, aD, h, bx, dD, by, dE, ax, ay, aw)
1147- let fr = fq._1
1148- let dT = fq._2
1149- (cU(aD, toString(ah.caller), fr, dT, fn, aw, bf, false) ++ bs(dD, dE, aw))
1150+ let fs = cM(bh, aF, h, bz, dF, bA, dG, az, aA, ay)
1151+ let ft = fs._1
1152+ let dV = fs._2
1153+ (cW(aF, toString(aj.caller), ft, dV, fp, ay, bh, false) ++ bu(dF, dG, ay))
11501154 }
11511155 }
11521156
11531157
11541158
1155-@Callable(ah)
1156-func withdraw (aD,en) = es(toString(ah.caller), aD, toString(en), false)
1159+@Callable(aj)
1160+func withdraw (aF,ep) = eu(toString(aj.caller), aF, toString(ep), false)
11571161
11581162
11591163
1160-@Callable(ah)
1161-func createUpdateStopLoss (en,fs,al,ft) = {
1162- let fu = ( let at = invoke(aa, "getTWAP60", [al, false], nil)
1163- if ($isInstanceOf(at, "(Int, Int)"))
1164- then at
1165- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._1
1166- if (!(isDefined(getInteger(this, (((((fs + "_") + toString(ah.caller)) + "_") + toString(en)) + u)))))
1164+@Callable(aj)
1165+func createUpdateStopLoss (ep,fu,an,fv) = {
1166+ let fw = ( let av = invoke(ac, "getTWAP60", [an, false], nil)
1167+ if ($isInstanceOf(av, "(Int, Int)"))
1168+ then av
1169+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._1
1170+ if (!(isDefined(getInteger(this, (((((fu + "_") + toString(aj.caller)) + "_") + toString(ep)) + u)))))
11671171 then throw("There are no user position")
1168- else if ((0 >= ft))
1172+ else if ((0 >= fv))
11691173 then throw("Price must be greater than 0")
1170- else if ((ft > fu))
1174+ else if ((fv > fw))
11711175 then throw("Price must be less than current token price")
1172- else [IntegerEntry((((((((toString(ah.caller) + "_") + toString(en)) + "_") + fs) + "_") + al) + Q), ft)]
1176+ else [IntegerEntry((((((((toString(aj.caller) + "_") + toString(ep)) + "_") + fu) + "_") + an) + Q), fv)]
11731177 }
11741178
11751179
11761180
1177-@Callable(ah)
1178-func deleteStopLoss (en,fs,al) = if (!(isDefined(getInteger(this, (((((((toString(ah.caller) + "_") + toString(en)) + "_") + fs) + "_") + al) + Q)))))
1181+@Callable(aj)
1182+func deleteStopLoss (ep,fu,an) = if (!(isDefined(getInteger(this, (((((((toString(aj.caller) + "_") + toString(ep)) + "_") + fu) + "_") + an) + Q)))))
11791183 then throw("No entry")
1180- else [DeleteEntry((((((((toString(ah.caller) + "_") + toString(en)) + "_") + fs) + "_") + al) + Q))]
1184+ else [DeleteEntry((((((((toString(aj.caller) + "_") + toString(ep)) + "_") + fu) + "_") + an) + Q))]
11811185
11821186
11831187
1184-@Callable(ah)
1185-func createNewRequest (bQ) = valueOrElse(ai(ah), {
1186- let fo = (valueOrElse(getInteger(this, L), 0) + 1)
1187- $Tuple2([StringEntry((toString(fo) + K), bQ), IntegerEntry(L, fo)], fo)
1188+@Callable(aj)
1189+func init (fx,fy,fz,ac,fA,ad,fB,fC,fD) = if (isDefined(getString(R)))
1190+ then throw("Already inited")
1191+ else [StringEntry(R, fx), StringEntry(S, fy), StringEntry(T, fz), StringEntry(V, ac), StringEntry(W, fA), StringEntry(X, ad), StringEntry(Y, fB), StringEntry(Z, fC), StringEntry(U, fD)]
1192+
1193+
1194+
1195+@Callable(aj)
1196+func createNewRequest (bS) = valueOrElse(ak(aj), {
1197+ let fq = (valueOrElse(getInteger(this, L), 0) + 1)
1198+ $Tuple2([StringEntry((toString(fq) + K), bS), IntegerEntry(L, fq)], fq)
11881199 })
11891200
11901201
11911202
1192-@Callable(ah)
1193-func replenishFromLand (eB) = valueOrElse(aj(ah), {
1194- let fv = eA(eB)
1195- let aG = fv._1
1196- let aD = fv._2
1197- let bx = fv._3
1198- let dD = fv._4
1199- let by = fv._5
1200- let dE = fv._6
1201- let ax = fv._7
1202- let ay = fv._8
1203- let aw = fv._9
1204- let eD = fv._10
1205- let eE = fv._11
1206- if ((size(ah.payments) != 1))
1203+@Callable(aj)
1204+func replenishFromLand (eD) = valueOrElse(al(aj), {
1205+ let fE = eC(eD)
1206+ let aI = fE._1
1207+ let aF = fE._2
1208+ let bz = fE._3
1209+ let dF = fE._4
1210+ let bA = fE._5
1211+ let dG = fE._6
1212+ let az = fE._7
1213+ let aA = fE._8
1214+ let ay = fE._9
1215+ let eF = fE._10
1216+ let eG = fE._11
1217+ if ((size(aj.payments) != 1))
12071218 then throw("Wrong payment size")
1208- else if (if ((aN(ah.payments[0].assetId) != eD))
1219+ else if (if ((aP(aj.payments[0].assetId) != eF))
12091220 then true
1210- else (ah.payments[0].amount != eE))
1221+ else (aj.payments[0].amount != eG))
12111222 then throw("Wrong payment")
12121223 else {
1213- let fw = if ((dD == eD))
1214- then $Tuple2((bx + ah.payments[0].amount), by)
1215- else $Tuple2(bx, (by + ah.payments[0].amount))
1216- let fx = fw._1
1217- let fy = fw._2
1218- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Unknown pool")
1219- let fz = cK(bf, aD, g, fx, dD, fy, dE, ax, ay, aw)
1220- let fr = fz._1
1221- let dT = fz._2
1222- let cW = aF(aG)
1223- let fA = [IntegerEntry((((((aD + "_") + aG) + "_") + toString(cW)) + w), eE), StringEntry((((((aD + "_") + aG) + "_") + toString(cW)) + x), eD)]
1224- let fB = cU(aD, aG, fr, dT, cW, aw, bf, true)
1225- $Tuple2((((fB ++ bs(dD, dE, aw)) ++ fA) :+ DeleteEntry((eB + K))), fr)
1224+ let fF = if ((dF == eF))
1225+ then $Tuple2((bz + aj.payments[0].amount), bA)
1226+ else $Tuple2(bz, (bA + aj.payments[0].amount))
1227+ let fG = fF._1
1228+ let fH = fF._2
1229+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Unknown pool")
1230+ let fI = cM(bh, aF, g, fG, dF, fH, dG, az, aA, ay)
1231+ let ft = fI._1
1232+ let dV = fI._2
1233+ let cY = aH(aI)
1234+ let fJ = [IntegerEntry((((((aF + "_") + aI) + "_") + toString(cY)) + w), eG), StringEntry((((((aF + "_") + aI) + "_") + toString(cY)) + x), eF)]
1235+ let fK = cW(aF, aI, ft, dV, cY, ay, bh, true)
1236+ $Tuple2((((fK ++ bu(dF, dG, ay)) ++ fJ) :+ DeleteEntry((eD + K))), ft)
12261237 }
12271238 })
12281239
12291240
12301241
1231-@Callable(ah)
1232-func liquidate (aG,en,fC) = valueOrElse(aj(ah), {
1233- let aD = valueOrErrorMessage(getString(this, (((aG + "_") + en) + v)), "no position")
1234- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
1235- let fD = az(Address(fromBase58String(aD)), bf)
1236- let dD = fD._1
1237- let dE = fD._2
1238- let ax = fD._3
1239- let ay = fD._4
1240- let aw = fD._5
1241- let bL = bM(aD, bf, aw, fC)
1242- let cz = getIntegerValue(this, (((((aD + "_") + aG) + "_") + en) + w))
1243- let dX = getStringValue(this, (((((aD + "_") + aG) + "_") + en) + x))
1244- let dV = em(aG, aD, en, (cz > 0))
1245- if ((cz == 0))
1242+@Callable(aj)
1243+func liquidate (aI,ep,fL) = valueOrElse(al(aj), {
1244+ let aF = valueOrErrorMessage(getString(this, (((aI + "_") + ep) + v)), "no position")
1245+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
1246+ let fM = aB(Address(fromBase58String(aF)), bh)
1247+ let dF = fM._1
1248+ let dG = fM._2
1249+ let az = fM._3
1250+ let aA = fM._4
1251+ let ay = fM._5
1252+ let bN = bO(aF, bh, ay, fL)
1253+ let cB = getIntegerValue(this, (((((aF + "_") + aI) + "_") + ep) + w))
1254+ let dZ = getStringValue(this, (((((aF + "_") + aI) + "_") + ep) + x))
1255+ let dX = eo(aI, aF, ep, (cB > 0))
1256+ if ((cB == 0))
12461257 then throw("You can't liquidate position without borrow")
1247- else [IntegerEntry((((((aD + "_") + aG) + "_") + en) + z), getIntegerValue(this, (aD + C))), IntegerEntry((aD + B), (aE(aD) - fC)), IntegerEntry((aD + A), (aC(aD) - fC)), IntegerEntry((((((aD + "_") + aG) + "_") + en) + u), (dV - fC)), ScriptTransfer(ah.caller, bL, fromBase58String(aw))]
1258+ else [IntegerEntry((((((aF + "_") + aI) + "_") + ep) + z), getIntegerValue(this, (aF + C))), IntegerEntry((aF + B), (aG(aF) - fL)), IntegerEntry((aF + A), (aE(aF) - fL)), IntegerEntry((((((aF + "_") + aI) + "_") + ep) + u), (dX - fL)), ScriptTransfer(aj.caller, bN, fromBase58String(ay))]
12481259 })
12491260
12501261
12511262
1252-@Callable(ah)
1253-func stopLoss (aG,en,aD,al) = valueOrElse(ag(ah), {
1254- let fu = ( let at = invoke(aa, "getTWAP60", [al, false], nil)
1255- if ($isInstanceOf(at, "(Int, Int)"))
1256- then at
1257- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._1
1258- if (!(isDefined(getInteger(this, (((((((aG + "_") + toString(en)) + "_") + aD) + "_") + al) + Q)))))
1263+@Callable(aj)
1264+func stopLoss (aI,ep,aF,an) = valueOrElse(ai(aj), {
1265+ let fw = ( let av = invoke(ac, "getTWAP60", [an, false], nil)
1266+ if ($isInstanceOf(av, "(Int, Int)"))
1267+ then av
1268+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._1
1269+ if (!(isDefined(getInteger(this, (((((((aI + "_") + toString(ep)) + "_") + aF) + "_") + an) + Q)))))
12591270 then throw("No entry")
1260- else (es(toString(ah.caller), aD, toString(en), true) :+ DeleteEntry((((((((aG + "_") + toString(en)) + "_") + aD) + "_") + al) + Q)))
1271+ else (eu(toString(aj.caller), aF, toString(ep), true) :+ DeleteEntry((((((((aI + "_") + toString(ep)) + "_") + aF) + "_") + an) + Q)))
12611272 })
12621273
12631274
12641275
1265-@Callable(ah)
1266-func capitalizeExKeeper (aD,aA,fE,fF,fG,dh,di,dj,dk,dl,dm,dn) = valueOrElse(ag(ah), {
1267- let fH = if (fG)
1268- then cH(aA, aD)
1276+@Callable(aj)
1277+func capitalizeExKeeper (aF,aC,fN,fO,fP,dj,dk,dl,dm,dn,do,dp) = valueOrElse(ai(aj), {
1278+ let fQ = if (fP)
1279+ then cJ(aC, aF)
12691280 else {
1270- let fI = if ((aA == a))
1271- then ac
1272- else ad
1273- $Tuple2(fF, fI)
1281+ let fR = if ((aC == a))
1282+ then ae
1283+ else af
1284+ $Tuple2(fO, fR)
12741285 }
1275- let fJ = fH._1
1276- let fI = fH._2
1277- let fK = dd(fE, fF, fI, dh, di, dj, dk, dl, dm, dn)
1278- let cr = (fJ - fF)
1279- let fL = if ((cr > 0))
1280- then [IntegerEntry((aD + O), (cr + valueOrElse(getInteger(this, (aD + O)), 0)))]
1286+ let fS = fQ._1
1287+ let fR = fQ._2
1288+ let fT = df(fN, fO, fR, dj, dk, dl, dm, dn, do, dp)
1289+ let ct = (fS - fO)
1290+ let fU = if ((ct > 0))
1291+ then [IntegerEntry((aF + O), (ct + valueOrElse(getInteger(this, (aF + O)), 0)))]
12811292 else nil
1282- (dz(aD, aA, fE, fK) ++ fL)
1293+ (dB(aF, aC, fN, fT) ++ fU)
12831294 })
12841295
12851296
12861297
1287-@Callable(ah)
1288-func capitalizeExPuzzle (aD,aA,fE,fF,fG,dq,dr,dn) = valueOrElse(ag(ah), {
1289- let fM = if (fG)
1290- then cH(aA, aD)
1298+@Callable(aj)
1299+func capitalizeExPuzzle (aF,aC,fN,fO,fP,ds,dt,dp) = valueOrElse(ai(aj), {
1300+ let fV = if (fP)
1301+ then cJ(aC, aF)
12911302 else {
1292- let fI = if ((aA == a))
1293- then ac
1294- else ad
1295- $Tuple2(fF, fI)
1303+ let fR = if ((aC == a))
1304+ then ae
1305+ else af
1306+ $Tuple2(fO, fR)
12961307 }
1297- let fJ = fM._1
1298- let fI = fM._2
1299- let fK = dp(fE, fF, fI, dq, dr, dn)
1300- let cr = (fJ - fF)
1301- let fL = if ((cr > 0))
1302- then [IntegerEntry((aD + O), (cr + valueOrElse(getInteger(this, (aD + O)), 0)))]
1308+ let fS = fV._1
1309+ let fR = fV._2
1310+ let fT = dr(fN, fO, fR, ds, dt, dp)
1311+ let ct = (fS - fO)
1312+ let fU = if ((ct > 0))
1313+ then [IntegerEntry((aF + O), (ct + valueOrElse(getInteger(this, (aF + O)), 0)))]
13031314 else nil
1304- (dz(aD, aA, fE, fK) ++ fL)
1315+ (dB(aF, aC, fN, fT) ++ fU)
13051316 })
13061317
13071318
13081319
1309-@Callable(ah)
1310-func capitalizeExSwopFi (aD,aA,fE,fF,fG,dt,du,dv,dw,dx,dy,dn) = valueOrElse(ag(ah), {
1311- let fN = if (fG)
1312- then cH(aA, aD)
1320+@Callable(aj)
1321+func capitalizeExSwopFi (aF,aC,fN,fO,fP,dv,dw,dx,dy,dz,dA,dp) = valueOrElse(ai(aj), {
1322+ let fW = if (fP)
1323+ then cJ(aC, aF)
13131324 else {
1314- let fI = if ((aA == a))
1315- then ac
1316- else ad
1317- $Tuple2(fF, fI)
1325+ let fR = if ((aC == a))
1326+ then ae
1327+ else af
1328+ $Tuple2(fO, fR)
13181329 }
1319- let fJ = fN._1
1320- let fI = fN._2
1321- let fK = ds(fE, fF, fI, dt, du, dv, dw, dx, dy, dn)
1322- let cr = (fJ - fF)
1323- let fL = if ((cr > 0))
1324- then [IntegerEntry((aD + O), (cr + valueOrElse(getInteger(this, (aD + O)), 0)))]
1330+ let fS = fW._1
1331+ let fR = fW._2
1332+ let fT = du(fN, fO, fR, dv, dw, dx, dy, dz, dA, dp)
1333+ let ct = (fS - fO)
1334+ let fU = if ((ct > 0))
1335+ then [IntegerEntry((aF + O), (ct + valueOrElse(getInteger(this, (aF + O)), 0)))]
13251336 else nil
1326- (dz(aD, aA, fE, fK) ++ fL)
1337+ (dB(aF, aC, fN, fT) ++ fU)
13271338 })
13281339
13291340
13301341
1331-@Callable(ah)
1332-func initNewPool (aA,aq,fO,fP,fQ,fR,fS,fT) = valueOrElse(ag(ah), if (if ((aA != a))
1333- then (aA != b)
1342+@Callable(aj)
1343+func initNewPool (aC,as,fX,fY,fZ,ga,gb,gc) = valueOrElse(ai(aj), if (if ((aC != a))
1344+ then (aC != b)
13341345 else false)
13351346 then throw("Wrong type")
13361347 else {
1337- let fU = az(Address(fromBase58String(aq)), aA)
1338- let au = fU._1
1339- let av = fU._2
1340- let fV = fU._3
1341- let fW = fU._4
1342- let aw = fU._5
1343-[IntegerEntry((aq + E), fO), IntegerEntry((aq + F), fP), IntegerEntry((aq + G), fQ), IntegerEntry((aq + H), fR), IntegerEntry((aq + I), fS), IntegerEntry((aq + J), fT), IntegerEntry((aq + C), 0), IntegerEntry((aq + D), 0), StringEntry((M + aq), aA), StringEntry((aw + N), aq)]
1348+ let gd = aB(Address(fromBase58String(as)), aC)
1349+ let aw = gd._1
1350+ let ax = gd._2
1351+ let ge = gd._3
1352+ let gf = gd._4
1353+ let ay = gd._5
1354+[IntegerEntry((as + E), fX), IntegerEntry((as + F), fY), IntegerEntry((as + G), fZ), IntegerEntry((as + H), ga), IntegerEntry((as + I), gb), IntegerEntry((as + J), gc), IntegerEntry((as + C), 0), IntegerEntry((as + D), 0), StringEntry((M + as), aC), StringEntry((ay + N), as)]
13441355 })
13451356
13461357
1347-@Verifier(fX)
1348-func fY () = sigVerify(fX.bodyBytes, fX.proofs[0], fX.senderPublicKey)
1358+@Verifier(gg)
1359+func gh () = sigVerify(gg.bodyBytes, gg.proofs[0], gg.senderPublicKey)
13491360
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 = toBigInt(10000000000000000)
2727
2828 let m = 1000000
2929
3030 let n = "A_asset_balance"
3131
3232 let o = "B_asset_balance"
3333
3434 let p = "A_asset_id"
3535
3636 let q = "B_asset_id"
3737
3838 let r = "share_asset_id"
3939
4040 let s = "share_asset_supply"
4141
4242 let t = "commission"
4343
4444 let u = "_user_position"
4545
4646 let v = "_user_position_pool"
4747
4848 let w = "_user_position_borrow_amount"
4949
5050 let x = "_user_position_borrow_asset_id"
5151
5252 let y = "_user_position_number"
5353
5454 let z = "_user_position_interest"
5555
5656 let A = "_pool_total"
5757
5858 let B = "_pool_total_loan"
5959
6060 let C = "_pool_interest_loan"
6161
6262 let D = "_pool_interest_no_loan"
6363
6464 let E = "_axly_fee_without_loan"
6565
6666 let F = "_axly_fee_with_loan"
6767
6868 let G = "_axly_fee_cap_with_loan"
6969
7070 let H = "_axly_fee_cap_no_loan"
7171
7272 let I = "_axly_fee_stoploss_with_loan"
7373
7474 let J = "_axly_fee_stoploss_no_loan"
7575
7676 let K = "_request_id"
7777
7878 let L = "requests_iter"
7979
8080 let M = "pool_"
8181
8282 let N = "_pool_share_id"
8383
8484 let O = "_pool_cap_change"
8585
8686 let P = "last_price"
8787
8888 let Q = "_stop_loss"
8989
9090 let R = "axly_money_box"
9191
9292 let S = "swopfi_farming_addr"
9393
9494 let T = "lend_service_addr"
9595
9696 let U = "admin_call_pub_key"
9797
9898 let V = "price_oracle"
9999
100100 let W = "exchange_contract"
101101
102102 let X = "wx_swap_contract"
103103
104-let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "No axly moneyBox address")))
104+let Y = "swop_id"
105105
106-let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, W), "No exchange contract address")))
106+let Z = "wx_id"
107107
108-let aa = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No price oracle address")))
108+let aa = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "No axly moneyBox address")))
109109
110-let ab = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No wx swap address")))
110+let ab = Address(fromBase58String(valueOrErrorMessage(getString(this, W), "No exchange contract address")))
111111
112-let ac = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
112+let ac = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No price oracle address")))
113113
114-let ad = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
114+let ad = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No wx swap address")))
115115
116-func ae () = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "Can't get lend service addr")))
116+let ae = fromBase58String(valueOrErrorMessage(getString(this, Y), "No swop id"))
117+
118+let af = fromBase58String(valueOrErrorMessage(getString(this, Z), "No wx id"))
119+
120+func ag () = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "Can't get lend service addr")))
117121
118122
119-func af () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get admin addr")))
123+func ah () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get admin addr")))
120124
121125
122-func ag (ah) = if ((ah.caller == af()))
126+func ai (aj) = if ((aj.caller == ah()))
123127 then unit
124128 else throw("Only admin can call this function")
125129
126130
127-func ai (ah) = if ((ah.caller == this))
131+func ak (aj) = if ((aj.caller == this))
128132 then unit
129133 else throw("Only contract itself can call this function")
130134
131135
132-func aj (ah) = if ((ah.caller == ae()))
136+func al (aj) = if ((aj.caller == ag()))
133137 then unit
134138 else throw("Only land contract can call this function")
135139
136140
137-func ak (al) = {
138- let am = al
139- if ($isInstanceOf(am, "ByteVector"))
141+func am (an) = {
142+ let ao = an
143+ if ($isInstanceOf(ao, "ByteVector"))
140144 then {
141- let an = am
142- assetBalance(this, an)
145+ let ap = ao
146+ assetBalance(this, ap)
143147 }
144- else if ($isInstanceOf(am, "Unit"))
148+ else if ($isInstanceOf(ao, "Unit"))
145149 then {
146- let ao = am
150+ let aq = ao
147151 wavesBalance(this).available
148152 }
149153 else throw("Match error")
150154 }
151155
152156
153-func ap (aq) = $Tuple5(valueOrErrorMessage(getString(aq, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(aq, q), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(aq, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(aq, o), "Can't get pool B asset balance"), valueOrErrorMessage(getString(aq, r), "Can't get share asset id"))
157+func ar (as) = $Tuple5(valueOrErrorMessage(getString(as, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(as, q), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(as, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(as, o), "Can't get pool B asset balance"), valueOrErrorMessage(getString(as, r), "Can't get share asset id"))
154158
155159
156-func ar (aq) = {
157- let as = {
158- let at = invoke(aq, "getPoolConfigWrapperREADONLY", nil, nil)
159- if ($isInstanceOf(at, "List[Any]"))
160- then at
161- else throw(($getType(at) + " couldn't be cast to List[Any]"))
160+func at (as) = {
161+ let au = {
162+ let av = invoke(as, "getPoolConfigWrapperREADONLY", nil, nil)
163+ if ($isInstanceOf(av, "List[Any]"))
164+ then av
165+ else throw(($getType(av) + " couldn't be cast to List[Any]"))
162166 }
163- if ((as == as))
167+ if ((au == au))
164168 then {
165- let au = valueOrErrorMessage({
166- let at = as[4]
167- if ($isInstanceOf(at, "String"))
168- then at
169+ let aw = valueOrErrorMessage({
170+ let av = au[4]
171+ if ($isInstanceOf(av, "String"))
172+ then av
169173 else unit
170174 }, "Can't get pool A asset id")
171- let av = valueOrErrorMessage({
172- let at = as[5]
173- if ($isInstanceOf(at, "String"))
174- then at
175+ let ax = valueOrErrorMessage({
176+ let av = au[5]
177+ if ($isInstanceOf(av, "String"))
178+ then av
175179 else unit
176180 }, "Can't get pool B asset id")
177- let aw = valueOrErrorMessage({
178- let at = as[3]
179- if ($isInstanceOf(at, "String"))
180- then at
181+ let ay = valueOrErrorMessage({
182+ let av = au[3]
183+ if ($isInstanceOf(av, "String"))
184+ then av
181185 else unit
182186 }, "Can't get pool LP asset id")
183- let ax = {
184- let at = invoke(aq, "getAccBalanceWrapperREADONLY", [au], nil)
185- if ($isInstanceOf(at, "Int"))
186- then at
187- else throw(($getType(at) + " couldn't be cast to Int"))
187+ let az = {
188+ let av = invoke(as, "getAccBalanceWrapperREADONLY", [aw], nil)
189+ if ($isInstanceOf(av, "Int"))
190+ then av
191+ else throw(($getType(av) + " couldn't be cast to Int"))
188192 }
189- if ((ax == ax))
193+ if ((az == az))
190194 then {
191- let ay = {
192- let at = invoke(aq, "getAccBalanceWrapperREADONLY", [av], nil)
193- if ($isInstanceOf(at, "Int"))
194- then at
195- else throw(($getType(at) + " couldn't be cast to Int"))
195+ let aA = {
196+ let av = invoke(as, "getAccBalanceWrapperREADONLY", [ax], nil)
197+ if ($isInstanceOf(av, "Int"))
198+ then av
199+ else throw(($getType(av) + " couldn't be cast to Int"))
196200 }
197- if ((ay == ay))
198- then $Tuple5(au, av, ax, ay, aw)
201+ if ((aA == aA))
202+ then $Tuple5(aw, ax, az, aA, ay)
199203 else throw("Strict value is not equal to itself.")
200204 }
201205 else throw("Strict value is not equal to itself.")
202206 }
203207 else throw("Strict value is not equal to itself.")
204208 }
205209
206210
207-func az (aq,aA) = if ((aA == a))
208- then ap(aq)
209- else if ((aA == b))
210- then ar(aq)
211+func aB (as,aC) = if ((aC == a))
212+ then ar(as)
213+ else if ((aC == b))
214+ then at(as)
211215 else throw("Wrong pool type")
212216
213217
214-func aB (aq,aA,aw) = if ((aA == a))
215- then valueOrErrorMessage(getInteger(aq, s), "Can't get share asset supply")
216- else if ((aA == b))
217- then valueOrErrorMessage(assetInfo(fromBase58String(aw)), "Wrong ShareId").quantity
218+func aD (as,aC,ay) = if ((aC == a))
219+ then valueOrErrorMessage(getInteger(as, s), "Can't get share asset supply")
220+ else if ((aC == b))
221+ then valueOrErrorMessage(assetInfo(fromBase58String(ay)), "Wrong ShareId").quantity
218222 else throw("Wrong pool type")
219223
220224
221-func aC (aD) = valueOrElse(getInteger(this, (aD + A)), 0)
225+func aE (aF) = valueOrElse(getInteger(this, (aF + A)), 0)
222226
223227
224-func aE (aD) = valueOrElse(getInteger(this, (aD + B)), 0)
228+func aG (aF) = valueOrElse(getInteger(this, (aF + B)), 0)
225229
226230
227-func aF (aG) = (valueOrElse(getInteger(this, (aG + y)), 0) + 1)
231+func aH (aI) = (valueOrElse(getInteger(this, (aI + y)), 0) + 1)
228232
229233
230-func aH (aD,aI) = if ((aI == d))
231- then getIntegerValue(this, (aD + H))
232- else if ((aI == c))
233- then getIntegerValue(this, (aD + G))
234- else if ((aI == g))
235- then getIntegerValue(this, (aD + F))
236- else if ((aI == h))
237- then getIntegerValue(this, (aD + E))
238- else if ((aI == i))
234+func aJ (aF,aK) = if ((aK == d))
235+ then getIntegerValue(this, (aF + H))
236+ else if ((aK == c))
237+ then getIntegerValue(this, (aF + G))
238+ else if ((aK == g))
239+ then getIntegerValue(this, (aF + F))
240+ else if ((aK == h))
241+ then getIntegerValue(this, (aF + E))
242+ else if ((aK == i))
239243 then 0
240244 else throw("Wrong fee type")
241245
242246
243-func aJ () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get swopfi farming addr")))
247+func aL () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get swopfi farming addr")))
244248
245249
246-func aK (aq) = {
247- let aL = Address(fromBase58String(valueOrErrorMessage(getString(aq, "%s__factoryContract"), "Can't get WX factory contract addr")))
248- let aM = split(valueOrErrorMessage(getString(aL, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
249- Address(fromBase58String(aM[1]))
250+func aM (as) = {
251+ let aN = Address(fromBase58String(valueOrErrorMessage(getString(as, "%s__factoryContract"), "Can't get WX factory contract addr")))
252+ let aO = split(valueOrErrorMessage(getString(aN, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
253+ Address(fromBase58String(aO[1]))
250254 }
251255
252256
253-func aN (al) = {
254- let am = al
255- if ($isInstanceOf(am, "ByteVector"))
257+func aP (an) = {
258+ let ao = an
259+ if ($isInstanceOf(ao, "ByteVector"))
256260 then {
257- let an = am
258- toBase58String(an)
261+ let ap = ao
262+ toBase58String(ap)
259263 }
260- else if ($isInstanceOf(am, "Unit"))
264+ else if ($isInstanceOf(ao, "Unit"))
261265 then {
262- let ao = am
266+ let aq = ao
263267 "WAVES"
264268 }
265269 else throw("Not Asset id")
266270 }
267271
268272
269-func aO (al) = if ((al == "WAVES"))
273+func aQ (an) = if ((an == "WAVES"))
270274 then unit
271- else fromBase58String(al)
275+ else fromBase58String(an)
272276
273277
274-func aP (al) = if ((al == "WAVES"))
278+func aR (an) = if ((an == "WAVES"))
275279 then 8
276280 else {
277- let am = assetInfo(fromBase58String(al))
278- if ($isInstanceOf(am, "Asset"))
281+ let ao = assetInfo(fromBase58String(an))
282+ if ($isInstanceOf(ao, "Asset"))
279283 then {
280- let aQ = am
281- aQ.decimals
284+ let aS = ao
285+ aS.decimals
282286 }
283287 else throw("Can't find asset")
284288 }
285289
286290
287-func aR (al) = pow(10, 0, aP(al), 0, 0, DOWN)
291+func aT (an) = pow(10, 0, aR(an), 0, 0, DOWN)
288292
289293
290-func aS (aT) = {
291- func aU (aV,al) = {
292- let aW = ( let at = invoke(aa, "getTWAP60", [al, false], nil)
293- if ($isInstanceOf(at, "(Int, Int)"))
294- then at
295- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
296- (aV :+ aW)
294+func aU (aV) = {
295+ func aW (aX,an) = {
296+ let aY = ( let av = invoke(ac, "getTWAP60", [an, false], nil)
297+ if ($isInstanceOf(av, "(Int, Int)"))
298+ then av
299+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
300+ (aX :+ aY)
297301 }
298302
299- let aX = aT
300- let aY = size(aX)
301- let aZ = nil
302- func ba (bb,bc) = if ((bc >= aY))
303- then bb
304- else aU(bb, aX[bc])
303+ let aZ = aV
304+ let ba = size(aZ)
305+ let bb = nil
306+ func bc (bd,be) = if ((be >= ba))
307+ then bd
308+ else aW(bd, aZ[be])
305309
306- func bd (bb,bc) = if ((bc >= aY))
307- then bb
310+ func bf (bd,be) = if ((be >= ba))
311+ then bd
308312 else throw("List size exceeds 50")
309313
310- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 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)
314+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 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)
311315 }
312316
313317
314-func be (aw) = {
315- let aD = valueOrErrorMessage(getString(this, (aw + N)), "Can't find pool addr by share id")
316- let aq = Address(fromBase58String(aD))
317- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
318- let bg = az(aq, bf)
319- let au = bg._1
320- let av = bg._2
321- let bh = bg._3
322- let bi = bg._4
323- let bj = ( let at = invoke(aa, "getTWAP60", [au, false], nil)
324- if ($isInstanceOf(at, "(Int, Int)"))
325- then at
326- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
327- let bk = ( let at = invoke(aa, "getTWAP60", [av, false], nil)
328- if ($isInstanceOf(at, "(Int, Int)"))
329- then at
330- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
331- let bl = aB(aq, bf, aw)
332- let bm = pow(10, 0, aP(au), 0, 0, DOWN)
333- let bn = pow(10, 0, aP(av), 0, 0, DOWN)
334- let bo = pow(10, 0, aP(aw), 0, 0, DOWN)
335- let bp = (fraction(bh, bj, bm) + fraction(bi, bk, bn))
336- fraction(bp, bo, bl)
318+func bg (ay) = {
319+ let aF = valueOrErrorMessage(getString(this, (ay + N)), "Can't find pool addr by share id")
320+ let as = Address(fromBase58String(aF))
321+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
322+ let bi = aB(as, bh)
323+ let aw = bi._1
324+ let ax = bi._2
325+ let bj = bi._3
326+ let bk = bi._4
327+ let bl = ( let av = invoke(ac, "getTWAP60", [aw, false], nil)
328+ if ($isInstanceOf(av, "(Int, Int)"))
329+ then av
330+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
331+ let bm = ( let av = invoke(ac, "getTWAP60", [ax, false], nil)
332+ if ($isInstanceOf(av, "(Int, Int)"))
333+ then av
334+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
335+ let bn = aD(as, bh, ay)
336+ let bo = pow(10, 0, aR(aw), 0, 0, DOWN)
337+ let bp = pow(10, 0, aR(ax), 0, 0, DOWN)
338+ let bq = pow(10, 0, aR(ay), 0, 0, DOWN)
339+ let br = (fraction(bj, bl, bo) + fraction(bk, bm, bp))
340+ fraction(br, bq, bn)
337341 }
338342
339343
340-func bq (br) = {
341- func aU (aV,aw) = (aV :+ be(aw))
344+func bs (bt) = {
345+ func aW (aX,ay) = (aX :+ bg(ay))
342346
343- let aX = br
344- let aY = size(aX)
345- let aZ = nil
346- func ba (bb,bc) = if ((bc >= aY))
347- then bb
348- else aU(bb, aX[bc])
347+ let aZ = bt
348+ let ba = size(aZ)
349+ let bb = nil
350+ func bc (bd,be) = if ((be >= ba))
351+ then bd
352+ else aW(bd, aZ[be])
349353
350- func bd (bb,bc) = if ((bc >= aY))
351- then bb
354+ func bf (bd,be) = if ((be >= ba))
355+ then bd
352356 else throw("List size exceeds 20")
353357
354- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
358+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
355359 }
356360
357361
358-func bs (au,av,aw) = {
359- let bt = aS([au, av])
360- let bu = be(aw)
361- let bv = [toString(bt[0]), toString(bt[1]), toString(bu)]
362-[StringEntry(P, makeString(bv, ","))]
362+func bu (aw,ax,ay) = {
363+ let bv = aU([aw, ax])
364+ let bw = bg(ay)
365+ let bx = [toString(bv[0]), toString(bv[1]), toString(bw)]
366+[StringEntry(P, makeString(bx, ","))]
363367 }
364368
365369
366-func bw (bf,aq,bx,au,by,av,ax,ay) = if ((bf == a))
370+func by (bh,as,bz,aw,bA,ax,az,aA) = if ((bh == a))
367371 then {
368- let bz = {
369- let at = invoke(aq, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bx), toString(by)]], nil)
370- if ($isInstanceOf(at, "List[Any]"))
371- then at
372- else throw(($getType(at) + " couldn't be cast to List[Any]"))
372+ let bB = {
373+ let av = invoke(as, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bz), toString(bA)]], nil)
374+ if ($isInstanceOf(av, "List[Any]"))
375+ then av
376+ else throw(($getType(av) + " couldn't be cast to List[Any]"))
373377 }
374- if ((bz == bz))
378+ if ((bB == bB))
375379 then $Tuple5({
376- let at = bz[3]
377- if ($isInstanceOf(at, "Int"))
378- then at
379- else throw(($getType(at) + " couldn't be cast to Int"))
380+ let av = bB[3]
381+ if ($isInstanceOf(av, "Int"))
382+ then av
383+ else throw(($getType(av) + " couldn't be cast to Int"))
380384 }, {
381- let at = bz[4]
382- if ($isInstanceOf(at, "Int"))
383- then at
384- else throw(($getType(at) + " couldn't be cast to Int"))
385+ let av = bB[4]
386+ if ($isInstanceOf(av, "Int"))
387+ then av
388+ else throw(($getType(av) + " couldn't be cast to Int"))
385389 }, {
386- let at = bz[1]
387- if ($isInstanceOf(at, "Int"))
388- then at
389- else throw(($getType(at) + " couldn't be cast to Int"))
390- }, aN(bz[2]), {
391- let at = bz[0]
392- if ($isInstanceOf(at, "Int"))
393- then at
394- else throw(($getType(at) + " couldn't be cast to Int"))
390+ let av = bB[1]
391+ if ($isInstanceOf(av, "Int"))
392+ then av
393+ else throw(($getType(av) + " couldn't be cast to Int"))
394+ }, aP(bB[2]), {
395+ let av = bB[0]
396+ if ($isInstanceOf(av, "Int"))
397+ then av
398+ else throw(($getType(av) + " couldn't be cast to Int"))
395399 })
396400 else throw("Strict value is not equal to itself.")
397401 }
398402 else {
399- let bA = $Tuple2(split({
400- let at = invoke(aq, "evaluatePutByAmountAssetREADONLY", [bx], nil)
401- if ($isInstanceOf(at, "String"))
402- then at
403- else throw(($getType(at) + " couldn't be cast to String"))
403+ let bC = $Tuple2(split({
404+ let av = invoke(as, "evaluatePutByAmountAssetREADONLY", [bz], nil)
405+ if ($isInstanceOf(av, "String"))
406+ then av
407+ else throw(($getType(av) + " couldn't be cast to String"))
404408 }, "__"), split({
405- let at = invoke(aq, "evaluatePutByPriceAssetREADONLY", [by], nil)
406- if ($isInstanceOf(at, "String"))
407- then at
408- else throw(($getType(at) + " couldn't be cast to String"))
409+ let av = invoke(as, "evaluatePutByPriceAssetREADONLY", [bA], nil)
410+ if ($isInstanceOf(av, "String"))
411+ then av
412+ else throw(($getType(av) + " couldn't be cast to String"))
409413 }, "__"))
410- if ((bA == bA))
414+ if ((bC == bC))
411415 then {
412- let bB = bA._2
413- let bC = bA._1
414- let bD = parseIntValue(bC[1])
415- let bE = parseIntValue(bB[1])
416- if ((bE > bD))
416+ let bD = bC._2
417+ let bE = bC._1
418+ let bF = parseIntValue(bE[1])
419+ let bG = parseIntValue(bD[1])
420+ if ((bG > bF))
417421 then {
418- let bF = parseIntValue(bC[8])
419- $Tuple5(bx, bF, (by - bF), av, bE)
422+ let bH = parseIntValue(bE[8])
423+ $Tuple5(bz, bH, (bA - bH), ax, bG)
420424 }
421425 else {
422- let bF = parseIntValue(bC[8])
423- $Tuple5(bF, by, (bx - bF), au, bD)
426+ let bH = parseIntValue(bE[8])
427+ $Tuple5(bH, bA, (bz - bH), aw, bF)
424428 }
425429 }
426430 else throw("Strict value is not equal to itself.")
427431 }
428432
429433
430-func bG (aq,bf,bx,au,by,av) = {
431- let bH = [AttachedPayment(aO(au), bx), AttachedPayment(aO(av), by)]
432- if ((bf == a))
433- then invoke(aq, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bH)
434- else invoke(aq, "put", [1000000, false], bH)
434+func bI (as,bh,bz,aw,bA,ax) = {
435+ let bJ = [AttachedPayment(aQ(aw), bz), AttachedPayment(aQ(ax), bA)]
436+ if ((bh == a))
437+ then invoke(as, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bJ)
438+ else invoke(as, "put", [1000000, false], bJ)
435439 }
436440
437441
438-func bI (aq,bf,bF,bJ) = {
439- let bH = [AttachedPayment(aO(bJ), bF)]
440- if ((bf == a))
441- then invoke(aq, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bH)
442- else invoke(aq, "putOneTkn", [0, false], bH)
442+func bK (as,bh,bH,bL) = {
443+ let bJ = [AttachedPayment(aQ(bL), bH)]
444+ if ((bh == a))
445+ then invoke(as, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bJ)
446+ else invoke(as, "putOneTkn", [0, false], bJ)
443447 }
444448
445449
446-func bK (aD,bf,aw,bL) = {
447- let bH = [AttachedPayment(fromBase58String(aw), bL)]
448- if ((bf == a))
449- then invoke(aJ(), "lockShareTokens", [aD, 0], bH)
450- else invoke(aK(addressFromStringValue(aD)), "stake", nil, bH)
450+func bM (aF,bh,ay,bN) = {
451+ let bJ = [AttachedPayment(fromBase58String(ay), bN)]
452+ if ((bh == a))
453+ then invoke(aL(), "lockShareTokens", [aF, 0], bJ)
454+ else invoke(aM(addressFromStringValue(aF)), "stake", nil, bJ)
451455 }
452456
453457
454-func bM (aD,bf,aw,bL) = {
455- let bN = if ((bf == a))
456- then $Tuple3(aJ(), "withdrawShareTokens", [aD, bL])
457- else if ((bf == b))
458- then $Tuple3(aK(Address(fromBase58String(aD))), "unstake", [aw, bL])
458+func bO (aF,bh,ay,bN) = {
459+ let bP = if ((bh == a))
460+ then $Tuple3(aL(), "withdrawShareTokens", [aF, bN])
461+ else if ((bh == b))
462+ then $Tuple3(aM(Address(fromBase58String(aF))), "unstake", [ay, bN])
459463 else throw("Wrong pool type")
460- let bO = bN._1
461- let bP = bN._2
462- let bQ = bN._3
463- let bR = invoke(bO, bP, bQ, nil)
464- if ((bR == bR))
465- then bL
464+ let bQ = bP._1
465+ let bR = bP._2
466+ let bS = bP._3
467+ let bT = invoke(bQ, bR, bS, nil)
468+ if ((bT == bT))
469+ then bN
466470 else throw("Strict value is not equal to itself.")
467471 }
468472
469473
470-func bS (aD,bT,bU,ax,ay,bV,bW) = {
471- let aq = Address(fromBase58String(aD))
472- let bX = 1000000
473- let bY = getIntegerValue(aq, t)
474- let bZ = fraction(bV, bX, (bX - bY))
475- let ca = if ((bW == bT))
474+func bU (aF,bV,bW,az,aA,bX,bY) = {
475+ let as = Address(fromBase58String(aF))
476+ let bZ = 1000000
477+ let ca = getIntegerValue(as, t)
478+ let cb = fraction(bX, bZ, (bZ - ca))
479+ let cc = if ((bY == bV))
476480 then {
477- let cb = fraction(bZ, ay, (ax - bZ))
478- $Tuple2(cb, bU)
481+ let cd = fraction(cb, aA, (az - cb))
482+ $Tuple2(cd, bW)
479483 }
480484 else {
481- let cb = fraction(bZ, ax, (ay - bZ))
482- $Tuple2(cb, bT)
485+ let cd = fraction(cb, az, (aA - cb))
486+ $Tuple2(cd, bV)
483487 }
484- let cb = ca._1
485- let cc = ca._2
486- $Tuple2(cc, cb)
488+ let cd = cc._1
489+ let ce = cc._2
490+ $Tuple2(ce, cd)
487491 }
488492
489493
490-func cd (aD,bT,bU,ax,ay,bV,bW) = {
491- let ce = getIntegerValue(ab, "%s__protocolFee")
492- let cf = getIntegerValue(ab, "%s__poolFee")
493- let cg = toBigInt(100000000)
494- let ch = if ((bW == bT))
494+func cf (aF,bV,bW,az,aA,bX,bY) = {
495+ let cg = getIntegerValue(ad, "%s__protocolFee")
496+ let ch = getIntegerValue(ad, "%s__poolFee")
497+ let ci = toBigInt(100000000)
498+ let cj = if ((bY == bV))
495499 then {
496- let cb = fraction(bV, ay, (ax - bV))
497- $Tuple2(cb, bU)
500+ let cd = fraction(bX, aA, (az - bX))
501+ $Tuple2(cd, bW)
498502 }
499503 else {
500- let cb = fraction(bV, ax, (ay - bV))
501- $Tuple2(cb, bT)
504+ let cd = fraction(bX, az, (aA - bX))
505+ $Tuple2(cd, bV)
502506 }
503- let cb = ch._1
504- let cc = ch._2
505- let ci = toInt(fraction(toBigInt(cb), cg, (cg - toBigInt((ce + cf))), CEILING))
506- $Tuple2(cc, fraction(ci, 102, 100))
507+ let cd = cj._1
508+ let ce = cj._2
509+ let ck = toInt(fraction(toBigInt(cd), ci, (ci - toBigInt((cg + ch))), CEILING))
510+ $Tuple2(ce, fraction(ck, 102, 100))
507511 }
508512
509513
510-func cj (aA,aD,bT,bU,ax,ay,bV,bW) = if ((aA == a))
514+func cl (aC,aF,bV,bW,az,aA,bX,bY) = if ((aC == a))
511515 then {
512- let ck = bS(aD, bT, bU, ax, ay, bV, bW)
513- let cc = ck._1
514- let cb = ck._2
515- invoke(addressFromStringValue(aD), "callFunction", ["exchange", [toString(bV)]], [AttachedPayment(aO(cc), cb)])
516+ let cm = bU(aF, bV, bW, az, aA, bX, bY)
517+ let ce = cm._1
518+ let cd = cm._2
519+ invoke(addressFromStringValue(aF), "callFunction", ["exchange", [toString(bX)]], [AttachedPayment(aQ(ce), cd)])
516520 }
517521 else {
518- let cl = cd(aD, bT, bU, ax, ay, bV, bW)
519- let cc = cl._1
520- let cb = cl._2
521- invoke(ab, "swap", [bV, bW, toString(this)], [AttachedPayment(aO(cc), cb)])
522+ let cn = cf(aF, bV, bW, az, aA, bX, bY)
523+ let ce = cn._1
524+ let cd = cn._2
525+ invoke(ad, "swap", [bX, bY, toString(this)], [AttachedPayment(aQ(ce), cd)])
522526 }
523527
524528
525-func cm (bf,aD,bx,au,by,av,ax,ay) = {
526- let aq = addressFromStringValue(aD)
527- if ((bf == a))
529+func co (bh,aF,bz,aw,bA,ax,az,aA) = {
530+ let as = addressFromStringValue(aF)
531+ if ((bh == a))
528532 then {
529- let bR = {
530- let at = invoke(aq, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bx), toString(by), "0"]], nil)
531- if ($isInstanceOf(at, "List[Any]"))
532- then at
533- else throw(($getType(at) + " couldn't be cast to List[Any]"))
533+ let bT = {
534+ let av = invoke(as, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bz), toString(bA), "0"]], nil)
535+ if ($isInstanceOf(av, "List[Any]"))
536+ then av
537+ else throw(($getType(av) + " couldn't be cast to List[Any]"))
534538 }
535- if ((bR == bR))
539+ if ((bT == bT))
536540 then $Tuple2({
537- let at = bR[0]
538- if ($isInstanceOf(at, "Int"))
539- then at
540- else throw(($getType(at) + " couldn't be cast to Int"))
541+ let av = bT[0]
542+ if ($isInstanceOf(av, "Int"))
543+ then av
544+ else throw(($getType(av) + " couldn't be cast to Int"))
541545 }, {
542- let at = bR[1]
543- if ($isInstanceOf(at, "Int"))
544- then at
545- else throw(($getType(at) + " couldn't be cast to Int"))
546+ let av = bT[1]
547+ if ($isInstanceOf(av, "Int"))
548+ then av
549+ else throw(($getType(av) + " couldn't be cast to Int"))
546550 })
547551 else throw("Strict value is not equal to itself.")
548552 }
549- else if ((bf == b))
553+ else if ((bh == b))
550554 then {
551- let cn = if (if ((bx > 0))
552- then (by > 0)
555+ let cp = if (if ((bz > 0))
556+ then (bA > 0)
553557 else false)
554558 then {
555- let co = bw(bf, aq, bx, au, by, av, ax, ay)
556- let cp = co._1
557- let cq = co._2
558- let cr = co._3
559- let cs = co._4
560- let ct = co._5
561- $Tuple3(cr, cs, ct)
559+ let cq = by(bh, as, bz, aw, bA, ax, az, aA)
560+ let cr = cq._1
561+ let cs = cq._2
562+ let ct = cq._3
563+ let cu = cq._4
564+ let cv = cq._5
565+ $Tuple3(ct, cu, cv)
562566 }
563- else if ((bx > 0))
564- then $Tuple3(bx, au, 0)
565- else $Tuple3(by, av, 0)
566- let cr = cn._1
567- let cs = cn._2
568- let cu = cn._3
569- let cv = if ((cr > 0))
567+ else if ((bz > 0))
568+ then $Tuple3(bz, aw, 0)
569+ else $Tuple3(bA, ax, 0)
570+ let ct = cp._1
571+ let cu = cp._2
572+ let cw = cp._3
573+ let cx = if ((ct > 0))
570574 then {
571- let bR = {
572- let at = invoke(aq, "putOneTknREADONLY", [cs, cr], nil)
573- if ($isInstanceOf(at, "(Int, Int, Int)"))
574- then at
575- else throw(($getType(at) + " couldn't be cast to (Int, Int, Int)"))
575+ let bT = {
576+ let av = invoke(as, "putOneTknREADONLY", [cu, ct], nil)
577+ if ($isInstanceOf(av, "(Int, Int, Int)"))
578+ then av
579+ else throw(($getType(av) + " couldn't be cast to (Int, Int, Int)"))
576580 }
577- if ((bR == bR))
578- then $Tuple2(bR._1, bR._3)
581+ if ((bT == bT))
582+ then $Tuple2(bT._1, bT._3)
579583 else throw("Strict value is not equal to itself.")
580584 }
581585 else $Tuple2(0, 0)
582- let cw = cv._1
583- let cx = cv._2
584- $Tuple2((cu + cw), cx)
586+ let cy = cx._1
587+ let cz = cx._2
588+ $Tuple2((cw + cy), cz)
585589 }
586590 else throw("Wrong pool type")
587591 }
588592
589593
590-func cy (bf,aD,ct,aw,au,av,ax,ay,cz,cA) = {
591- let aq = addressFromStringValue(aD)
592- let cB = if ((bf == a))
594+func cA (bh,aF,cv,ay,aw,ax,az,aA,cB,cC) = {
595+ let as = addressFromStringValue(aF)
596+ let cD = if ((bh == a))
593597 then {
594- let bR = {
595- let at = invoke(aq, "callFunction", ["withdrawREADONLY", [toString(ct), toString(ax), toString(ay)]], nil)
596- if ($isInstanceOf(at, "List[Any]"))
597- then at
598- else throw(($getType(at) + " couldn't be cast to List[Any]"))
598+ let bT = {
599+ let av = invoke(as, "callFunction", ["withdrawREADONLY", [toString(cv), toString(az), toString(aA)]], nil)
600+ if ($isInstanceOf(av, "List[Any]"))
601+ then av
602+ else throw(($getType(av) + " couldn't be cast to List[Any]"))
599603 }
600- if ((bR == bR))
604+ if ((bT == bT))
601605 then $Tuple2({
602- let at = bR[0]
603- if ($isInstanceOf(at, "Int"))
604- then at
605- else throw(($getType(at) + " couldn't be cast to Int"))
606+ let av = bT[0]
607+ if ($isInstanceOf(av, "Int"))
608+ then av
609+ else throw(($getType(av) + " couldn't be cast to Int"))
606610 }, {
607- let at = bR[1]
608- if ($isInstanceOf(at, "Int"))
609- then at
610- else throw(($getType(at) + " couldn't be cast to Int"))
611+ let av = bT[1]
612+ if ($isInstanceOf(av, "Int"))
613+ then av
614+ else throw(($getType(av) + " couldn't be cast to Int"))
611615 })
612616 else throw("Strict value is not equal to itself.")
613617 }
614- else if ((bf == b))
618+ else if ((bh == b))
615619 then {
616- let cC = split({
617- let at = invoke(aq, "evaluateGetREADONLY", [aw, ct], nil)
618- if ($isInstanceOf(at, "String"))
619- then at
620- else throw(($getType(at) + " couldn't be cast to String"))
620+ let cE = split({
621+ let av = invoke(as, "evaluateGetREADONLY", [ay, cv], nil)
622+ if ($isInstanceOf(av, "String"))
623+ then av
624+ else throw(($getType(av) + " couldn't be cast to String"))
621625 }, "__")
622- if ((cC == cC))
623- then $Tuple2(parseIntValue(cC[1]), parseIntValue(cC[2]))
626+ if ((cE == cE))
627+ then $Tuple2(parseIntValue(cE[1]), parseIntValue(cE[2]))
624628 else throw("Strict value is not equal to itself.")
625629 }
626630 else throw("Wrong pool type")
627- let cD = cB._1
628- let cE = cB._2
629- if ((cz > 0))
631+ let cF = cD._1
632+ let cG = cD._2
633+ if ((cB > 0))
630634 then {
631- let cF = if (if ((cA == au))
632- then (cz > cD)
635+ let cH = if (if ((cC == aw))
636+ then (cB > cF)
633637 else false)
634- then (cz - cD)
635- else if (if ((cA == av))
636- then (cz > cE)
638+ then (cB - cF)
639+ else if (if ((cC == ax))
640+ then (cB > cG)
637641 else false)
638- then (cz - cE)
642+ then (cB - cG)
639643 else 0
640- let cG = if ((cF > 0))
641- then if ((bf == a))
642- then bS(aD, au, av, ax, ay, cF, cA)
643- else cd(aD, au, av, ax, ay, cF, cA)
644+ let cI = if ((cH > 0))
645+ then if ((bh == a))
646+ then bU(aF, aw, ax, az, aA, cH, cC)
647+ else cf(aF, aw, ax, az, aA, cH, cC)
644648 else $Tuple2("", 0)
645- let cc = cG._1
646- let cb = cG._2
647- if ((cA == au))
648- then $Tuple2(((cD + cF) - cz), (cE - cb))
649- else $Tuple2((cD - cb), ((cE + cF) - cz))
649+ let ce = cI._1
650+ let cd = cI._2
651+ if ((cC == aw))
652+ then $Tuple2(((cF + cH) - cB), (cG - cd))
653+ else $Tuple2((cF - cd), ((cG + cH) - cB))
650654 }
651- else $Tuple2(cD, cE)
655+ else $Tuple2(cF, cG)
652656 }
653657
654658
655-func cH (aA,aD) = if ((aA == a))
659+func cJ (aC,aF) = if ((aC == a))
656660 then {
657- let cI = ak(ac)
658- if ((cI == cI))
661+ let cK = am(ae)
662+ if ((cK == cK))
659663 then {
660- let bR = invoke(aJ(), "claim", [aD], nil)
661- if ((bR == bR))
664+ let bT = invoke(aL(), "claim", [aF], nil)
665+ if ((bT == bT))
662666 then {
663- let cJ = ak(ac)
664- $Tuple2((cJ - cI), ac)
667+ let cL = am(ae)
668+ $Tuple2((cL - cK), ae)
665669 }
666670 else throw("Strict value is not equal to itself.")
667671 }
668672 else throw("Strict value is not equal to itself.")
669673 }
670- else if ((aA == b))
674+ else if ((aC == b))
671675 then {
672- let cI = ak(ad)
673- if ((cI == cI))
676+ let cK = am(af)
677+ if ((cK == cK))
674678 then {
675- let bR = invoke(aK(Address(fromBase58String(aD))), "claimWX", [aD], nil)
676- if ((bR == bR))
679+ let bT = invoke(aM(Address(fromBase58String(aF))), "claimWX", [aF], nil)
680+ if ((bT == bT))
677681 then {
678- let cJ = ak(ad)
679- $Tuple2((cJ - cI), ad)
682+ let cL = am(af)
683+ $Tuple2((cL - cK), af)
680684 }
681685 else throw("Strict value is not equal to itself.")
682686 }
683687 else throw("Strict value is not equal to itself.")
684688 }
685689 else throw("Wrong pool type")
686690
687691
688-func cK (bf,aD,aI,bx,au,by,av,ax,ay,cL) = {
689- let cM = ak(fromBase58String(cL))
690- if ((cM == cM))
692+func cM (bh,aF,aK,bz,aw,bA,ax,az,aA,cN) = {
693+ let cO = am(fromBase58String(cN))
694+ if ((cO == cO))
691695 then {
692- let aq = addressFromStringValue(aD)
693- let cN = if (if ((bx > 0))
694- then (by > 0)
696+ let as = addressFromStringValue(aF)
697+ let cP = if (if ((bz > 0))
698+ then (bA > 0)
695699 else false)
696700 then {
697- let cO = bw(bf, aq, bx, au, by, av, ax, ay)
698- let cp = cO._1
699- let cq = cO._2
700- let cr = cO._3
701- let cs = cO._4
702- let bR = bG(aq, bf, cp, au, cq, av)
703- if ((bR == bR))
704- then $Tuple2(cr, cs)
701+ let cQ = by(bh, as, bz, aw, bA, ax, az, aA)
702+ let cr = cQ._1
703+ let cs = cQ._2
704+ let ct = cQ._3
705+ let cu = cQ._4
706+ let bT = bI(as, bh, cr, aw, cs, ax)
707+ if ((bT == bT))
708+ then $Tuple2(ct, cu)
705709 else throw("Strict value is not equal to itself.")
706710 }
707- else if ((bx > 0))
708- then $Tuple2(bx, au)
709- else if ((by > 0))
710- then $Tuple2(by, av)
711+ else if ((bz > 0))
712+ then $Tuple2(bz, aw)
713+ else if ((bA > 0))
714+ then $Tuple2(bA, ax)
711715 else throw("pmts must be > 0")
712- let cr = cN._1
713- let cs = cN._2
714- let bR = if ((cr > 0))
715- then bI(aq, bf, cr, cs)
716+ let ct = cP._1
717+ let cu = cP._2
718+ let bT = if ((ct > 0))
719+ then bK(as, bh, ct, cu)
716720 else nil
717- if ((bR == bR))
721+ if ((bT == bT))
718722 then {
719- let cP = ak(fromBase58String(cL))
720- let cQ = (cP - cM)
721- let cR = fraction(cQ, aH(aD, aI), m)
722- let cS = (cQ - cR)
723- if ((0 >= cS))
723+ let cR = am(fromBase58String(cN))
724+ let cS = (cR - cO)
725+ let cT = fraction(cS, aJ(aF, aK), m)
726+ let cU = (cS - cT)
727+ if ((0 >= cU))
724728 then throw("amount of staked sharetokens must be > 0")
725729 else {
726- let cT = bK(aD, bf, cL, cS)
727- if ((cT == cT))
728- then $Tuple2(cS, cR)
730+ let cV = bM(aF, bh, cN, cU)
731+ if ((cV == cV))
732+ then $Tuple2(cU, cT)
729733 else throw("Strict value is not equal to itself.")
730734 }
731735 }
732736 else throw("Strict value is not equal to itself.")
733737 }
734738 else throw("Strict value is not equal to itself.")
735739 }
736740
737741
738-func cU (aD,aG,cV,cR,cW,aw,aA,cX) = {
739- let cY = aC(aD)
740- let cZ = aE(aD)
741- let da = if (cX)
742- then $Tuple2(getIntegerValue(this, (aD + C)), (cZ + cV))
743- else $Tuple2(getIntegerValue(this, (aD + D)), cZ)
744- let db = da._1
745- let dc = da._2
746-[IntegerEntry((aD + A), (cY + cV)), IntegerEntry((aD + B), dc), IntegerEntry((((((aD + "_") + aG) + "_") + toString(cW)) + u), cV), IntegerEntry((((((aD + "_") + aG) + "_") + toString(cW)) + z), db), StringEntry((((aG + "_") + toString(cW)) + v), aD), IntegerEntry((aG + y), cW), ScriptTransfer(Y, cR, fromBase58String(aw))]
742+func cW (aF,aI,cX,cT,cY,ay,aC,cZ) = {
743+ let da = aE(aF)
744+ let db = aG(aF)
745+ let dc = if (cZ)
746+ then $Tuple2(getIntegerValue(this, (aF + C)), (db + cX))
747+ else $Tuple2(getIntegerValue(this, (aF + D)), db)
748+ let dd = dc._1
749+ let de = dc._2
750+[IntegerEntry((aF + A), (da + cX)), IntegerEntry((aF + B), de), IntegerEntry((((((aF + "_") + aI) + "_") + toString(cY)) + u), cX), IntegerEntry((((((aF + "_") + aI) + "_") + toString(cY)) + z), dd), StringEntry((((aI + "_") + toString(cY)) + v), aF), IntegerEntry((aI + y), cY), ScriptTransfer(aa, cT, fromBase58String(ay))]
747751 }
748752
749753
750-func dd (de,df,dg,dh,di,dj,dk,dl,dm,dn) = {
751- let do = ak(aO(de))
752- if ((do == do))
754+func df (dg,dh,di,dj,dk,dl,dm,dn,do,dp) = {
755+ let dq = am(aQ(dg))
756+ if ((dq == dq))
753757 then {
754- let bR = invoke(Z, "swap", [dh, di, dj, dk, dl, dm, dn], [AttachedPayment(dg, df)])
755- if ((bR == bR))
756- then (ak(aO(de)) - do)
758+ let bT = invoke(ab, "swap", [dj, dk, dl, dm, dn, do, dp], [AttachedPayment(di, dh)])
759+ if ((bT == bT))
760+ then (am(aQ(dg)) - dq)
757761 else throw("Strict value is not equal to itself.")
758762 }
759763 else throw("Strict value is not equal to itself.")
760764 }
761765
762766
763-func dp (de,df,dg,dq,dr,dn) = {
764- let do = ak(aO(de))
765- if ((do == do))
767+func dr (dg,dh,di,ds,dt,dp) = {
768+ let dq = am(aQ(dg))
769+ if ((dq == dq))
766770 then {
767- let bR = invoke(Z, "puzzleSwap", [dq, dr, dn], [AttachedPayment(dg, df)])
768- if ((bR == bR))
769- then (ak(aO(de)) - do)
771+ let bT = invoke(ab, "puzzleSwap", [ds, dt, dp], [AttachedPayment(di, dh)])
772+ if ((bT == bT))
773+ then (am(aQ(dg)) - dq)
770774 else throw("Strict value is not equal to itself.")
771775 }
772776 else throw("Strict value is not equal to itself.")
773777 }
774778
775779
776-func ds (de,df,dg,dt,du,dv,dw,dx,dy,dn) = {
777- let do = ak(aO(de))
778- if ((do == do))
780+func du (dg,dh,di,dv,dw,dx,dy,dz,dA,dp) = {
781+ let dq = am(aQ(dg))
782+ if ((dq == dq))
779783 then {
780- let bR = invoke(Z, "swopfiSwap", [dt, du, dv, dw, dx, dy, dn], [AttachedPayment(dg, df)])
781- if ((bR == bR))
782- then (ak(aO(de)) - do)
784+ let bT = invoke(ab, "swopfiSwap", [dv, dw, dx, dy, dz, dA, dp], [AttachedPayment(di, dh)])
785+ if ((bT == bT))
786+ then (am(aQ(dg)) - dq)
783787 else throw("Strict value is not equal to itself.")
784788 }
785789 else throw("Strict value is not equal to itself.")
786790 }
787791
788792
789-func dz (aD,bf,dA,dB) = {
790- let aq = Address(fromBase58String(aD))
791- let dC = az(aq, bf)
792- let dD = dC._1
793- let dE = dC._2
794- let ax = dC._3
795- let ay = dC._4
796- let aw = dC._5
797- if (if ((dA != dD))
798- then (dA != dE)
793+func dB (aF,bh,dC,dD) = {
794+ let as = Address(fromBase58String(aF))
795+ let dE = aB(as, bh)
796+ let dF = dE._1
797+ let dG = dE._2
798+ let az = dE._3
799+ let aA = dE._4
800+ let ay = dE._5
801+ if (if ((dC != dF))
802+ then (dC != dG)
799803 else false)
800804 then throw("Wrong asset")
801805 else {
802- let dF = if ((dA == dD))
803- then $Tuple2(dB, 0)
804- else $Tuple2(0, dB)
805- let bx = dF._1
806- let by = dF._2
807- let dG = cK(bf, aD, i, bx, dD, by, dE, ax, ay, aw)
808- let cV = dG._1
809- let dH = dG._2
810- let dI = valueOrElse(getInteger(this, (aD + C)), 0)
811- let dJ = valueOrElse(getInteger(this, (aD + D)), 0)
812- let dK = aC(aD)
813- let dL = aE(aD)
814- let dM = fraction(dL, j, dK)
815- let dN = fraction(cV, dM, j)
816- let dO = (cV - dN)
817- let dP = if ((dL > 0))
818- then (dI + fraction(dN, k, dL))
806+ let dH = if ((dC == dF))
807+ then $Tuple2(dD, 0)
808+ else $Tuple2(0, dD)
809+ let bz = dH._1
810+ let bA = dH._2
811+ let dI = cM(bh, aF, i, bz, dF, bA, dG, az, aA, ay)
812+ let cX = dI._1
813+ let dJ = dI._2
814+ let dK = valueOrElse(getInteger(this, (aF + C)), 0)
815+ let dL = valueOrElse(getInteger(this, (aF + D)), 0)
816+ let dM = aE(aF)
817+ let dN = aG(aF)
818+ let dO = fraction(dN, j, dM)
819+ let dP = fraction(cX, dO, j)
820+ let dQ = (cX - dP)
821+ let dR = if ((dN > 0))
822+ then (dK + fraction(dP, k, dN))
819823 else 0
820- let dQ = if (((dK - dL) > 0))
821- then (dJ + fraction(dO, k, (dK - dL)))
824+ let dS = if (((dM - dN) > 0))
825+ then (dL + fraction(dQ, k, (dM - dN)))
822826 else 0
823- let dR = fraction(dN, aH(aD, d), m)
824- let dS = fraction(dO, aH(aD, c), m)
825- let dT = bM(aD, bf, aw, (dR + dS))
826- if ((dT == dT))
827- then ([IntegerEntry((aD + C), dP), IntegerEntry((aD + D), dQ), IntegerEntry((aD + A), ((dK + cV) - dT)), IntegerEntry((aD + B), ((dL + dN) - dR)), ScriptTransfer(Y, (dR + dS), fromBase58String(aw))] ++ bs(dD, dE, aw))
827+ let dT = fraction(dP, aJ(aF, d), m)
828+ let dU = fraction(dQ, aJ(aF, c), m)
829+ let dV = bO(aF, bh, ay, (dT + dU))
830+ if ((dV == dV))
831+ then ([IntegerEntry((aF + C), dR), IntegerEntry((aF + D), dS), IntegerEntry((aF + A), ((dM + cX) - dV)), IntegerEntry((aF + B), ((dN + dP) - dT)), ScriptTransfer(aa, (dT + dU), fromBase58String(ay))] ++ bu(dF, dG, ay))
828832 else throw("Strict value is not equal to itself.")
829833 }
830834 }
831835
832836
833-func dU (aD,dV,dW,dX) = {
834- let aq = Address(fromBase58String(aD))
835- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Unknown pool")
836- let dY = az(aq, bf)
837- let bT = dY._1
838- let bU = dY._2
839- let ax = dY._3
840- let ay = dY._4
841- let aw = dY._5
842- let dZ = ak(aO(bT))
843- if ((dZ == dZ))
837+func dW (aF,dX,dY,dZ) = {
838+ let as = Address(fromBase58String(aF))
839+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Unknown pool")
840+ let ea = aB(as, bh)
841+ let bV = ea._1
842+ let bW = ea._2
843+ let az = ea._3
844+ let aA = ea._4
845+ let ay = ea._5
846+ let eb = am(aQ(bV))
847+ if ((eb == eb))
844848 then {
845- let ea = ak(aO(bU))
846- if ((ea == ea))
849+ let ec = am(aQ(bW))
850+ if ((ec == ec))
847851 then {
848- let bR = if ((bf == a))
849- then invoke(aq, "callFunction", ["withdraw", [toString(dV)]], nil)
852+ let bT = if ((bh == a))
853+ then invoke(as, "callFunction", ["withdraw", [toString(dX)]], nil)
850854 else {
851- let bR = bM(aD, bf, aw, dV)
852- if ((bR == bR))
853- then invoke(aq, "get", nil, [AttachedPayment(aO(aw), dV)])
855+ let bT = bO(aF, bh, ay, dX)
856+ if ((bT == bT))
857+ then invoke(as, "get", nil, [AttachedPayment(aQ(ay), dX)])
854858 else throw("Strict value is not equal to itself.")
855859 }
856- if ((bR == bR))
860+ if ((bT == bT))
857861 then {
858- let eb = ak(aO(bT))
859- let ec = ak(aO(bU))
860- let ed = $Tuple2((eb - dZ), (ec - ea))
861- let ee = ed._1
862- let ef = ed._2
863- let eg = if ((dW > 0))
862+ let ed = am(aQ(bV))
863+ let ee = am(aQ(bW))
864+ let ef = $Tuple2((ed - eb), (ee - ec))
865+ let eg = ef._1
866+ let eh = ef._2
867+ let ei = if ((dY > 0))
864868 then {
865- let cF = if (if ((dX == bT))
866- then (dW > ee)
869+ let cH = if (if ((dZ == bV))
870+ then (dY > eg)
867871 else false)
868- then (dW - ee)
869- else if (if ((dX == bU))
870- then (dW > ef)
872+ then (dY - eg)
873+ else if (if ((dZ == bW))
874+ then (dY > eh)
871875 else false)
872- then (dW - ef)
876+ then (dY - eh)
873877 else 0
874- let eh = if ((cF > 0))
875- then cj(bf, aD, bT, bU, ax, ay, cF, dX)
878+ let ej = if ((cH > 0))
879+ then cl(bh, aF, bV, bW, az, aA, cH, dZ)
876880 else 0
877- if ((eh == eh))
881+ if ((ej == ej))
878882 then {
879- let ei = ak(aO(bT))
880- let ej = ak(aO(bU))
881- if ((dX == bT))
882- then $Tuple2(((ei - dZ) - dW), (ej - ea))
883- else $Tuple2((ei - dZ), ((ej - ea) - dW))
883+ let ek = am(aQ(bV))
884+ let el = am(aQ(bW))
885+ if ((dZ == bV))
886+ then $Tuple2(((ek - eb) - dY), (el - ec))
887+ else $Tuple2((ek - eb), ((el - ec) - dY))
884888 }
885889 else throw("Strict value is not equal to itself.")
886890 }
887- else $Tuple2(ee, ef)
888- let ek = eg._1
889- let el = eg._2
890- $Tuple7(ek, bT, el, bU, eb, ec, aw)
891+ else $Tuple2(eg, eh)
892+ let em = ei._1
893+ let en = ei._2
894+ $Tuple7(em, bV, en, bW, ed, ee, ay)
891895 }
892896 else throw("Strict value is not equal to itself.")
893897 }
894898 else throw("Strict value is not equal to itself.")
895899 }
896900 else throw("Strict value is not equal to itself.")
897901 }
898902
899903
900-func em (aG,aD,en,eo) = {
901- let ep = valueOrErrorMessage(getInteger(this, (((((aD + "_") + aG) + "_") + en) + u)), "Unknown position")
902- let eq = getIntegerValue(this, (((((aD + "_") + aG) + "_") + en) + z))
903- let er = if (eo)
904- then getIntegerValue(this, (aD + C))
905- else getIntegerValue(this, (aD + D))
906- (ep + fraction(ep, (er - eq), k))
904+func eo (aI,aF,ep,eq) = {
905+ let er = valueOrErrorMessage(getInteger(this, (((((aF + "_") + aI) + "_") + ep) + u)), "Unknown position")
906+ let es = getIntegerValue(this, (((((aF + "_") + aI) + "_") + ep) + z))
907+ let et = if (eq)
908+ then getIntegerValue(this, (aF + C))
909+ else getIntegerValue(this, (aF + D))
910+ (er + fraction(er, (et - es), k))
907911 }
908912
909913
910-func es (aG,aD,en,et) = {
911- let ep = valueOrErrorMessage(getInteger(this, (((((aD + "_") + aG) + "_") + en) + u)), "Unknown position")
912- let cz = valueOrElse(getInteger(this, (((((aD + "_") + aG) + "_") + en) + w)), 0)
913- let dV = em(aG, aD, en, (cz > 0))
914- let eu = aC(aD)
915- let ev = Address(fromBase58String(aG))
916- let dX = valueOrElse(getString(this, (((((aD + "_") + aG) + "_") + en) + x)), "")
917- let dW = if ((cz > 0))
914+func eu (aI,aF,ep,ev) = {
915+ let er = valueOrErrorMessage(getInteger(this, (((((aF + "_") + aI) + "_") + ep) + u)), "Unknown position")
916+ let cB = valueOrElse(getInteger(this, (((((aF + "_") + aI) + "_") + ep) + w)), 0)
917+ let dX = eo(aI, aF, ep, (cB > 0))
918+ let ew = aE(aF)
919+ let ex = Address(fromBase58String(aI))
920+ let dZ = valueOrElse(getString(this, (((((aF + "_") + aI) + "_") + ep) + x)), "")
921+ let dY = if ((cB > 0))
918922 then {
919- let at = invoke(ae(), "getAssetDebt", [false, ((aG + "_") + en), dX], nil)
920- if ($isInstanceOf(at, "Int"))
921- then at
922- else throw(($getType(at) + " couldn't be cast to Int"))
923+ let av = invoke(ag(), "getAssetDebt", [false, ((aI + "_") + ep), dZ], nil)
924+ if ($isInstanceOf(av, "Int"))
925+ then av
926+ else throw(($getType(av) + " couldn't be cast to Int"))
923927 }
924928 else 0
925- let ew = dU(aD, dV, dW, dX)
926- if ((ew == ew))
929+ let ey = dW(aF, dX, dY, dZ)
930+ if ((ey == ey))
927931 then {
928- let aw = ew._7
929- let ec = ew._6
930- let eb = ew._5
931- let bU = ew._4
932- let ex = ew._3
933- let bT = ew._2
934- let ey = ew._1
935- let ez = if ((dW > 0))
936- then invoke(ae(), "repayFor", [((aG + "_") + en)], [AttachedPayment(aO(dX), dW)])
932+ let ay = ey._7
933+ let ee = ey._6
934+ let ed = ey._5
935+ let bW = ey._4
936+ let ez = ey._3
937+ let bV = ey._2
938+ let eA = ey._1
939+ let eB = if ((dY > 0))
940+ then invoke(ag(), "repayFor", [((aI + "_") + ep)], [AttachedPayment(aQ(dZ), dY)])
937941 else 0
938- if ((ez == ez))
939- then ([DeleteEntry((((((aD + "_") + aG) + "_") + en) + u)), DeleteEntry((((((aD + "_") + aG) + "_") + en) + z)), IntegerEntry((aD + A), (eu - dV)), ScriptTransfer(ev, ey, aO(bT)), ScriptTransfer(ev, ex, aO(bU))] ++ bs(bT, bU, aw))
942+ if ((eB == eB))
943+ then ([DeleteEntry((((((aF + "_") + aI) + "_") + ep) + u)), DeleteEntry((((((aF + "_") + aI) + "_") + ep) + z)), IntegerEntry((aF + A), (ew - dX)), ScriptTransfer(ex, eA, aQ(bV)), ScriptTransfer(ex, ez, aQ(bW))] ++ bu(bV, bW, ay))
940944 else throw("Strict value is not equal to itself.")
941945 }
942946 else throw("Strict value is not equal to itself.")
943947 }
944948
945949
946-func eA (eB) = {
947- let eC = split(valueOrErrorMessage(getString(this, (eB + K)), ("No request with id " + eB)), ",")
948- let aG = eC[0]
949- let aD = eC[1]
950- let bx = parseIntValue(eC[2])
951- let dD = eC[3]
952- let by = parseIntValue(eC[4])
953- let dE = eC[5]
954- let ax = parseIntValue(eC[6])
955- let ay = parseIntValue(eC[7])
956- let aw = eC[8]
957- let eD = eC[9]
958- let eE = parseIntValue(eC[10])
959- $Tuple11(aG, aD, bx, dD, by, dE, ax, ay, aw, eD, eE)
950+func eC (eD) = {
951+ let eE = split(valueOrErrorMessage(getString(this, (eD + K)), ("No request with id " + eD)), ",")
952+ let aI = eE[0]
953+ let aF = eE[1]
954+ let bz = parseIntValue(eE[2])
955+ let dF = eE[3]
956+ let bA = parseIntValue(eE[4])
957+ let dG = eE[5]
958+ let az = parseIntValue(eE[6])
959+ let aA = parseIntValue(eE[7])
960+ let ay = eE[8]
961+ let eF = eE[9]
962+ let eG = parseIntValue(eE[10])
963+ $Tuple11(aI, aF, bz, dF, bA, dG, az, aA, ay, eF, eG)
960964 }
961965
962966
963-func eF (bx,by,au,av,eG,eH) = {
964- let bj = ( let at = invoke(aa, "getTWAP60", [au, false], nil)
965- if ($isInstanceOf(at, "(Int, Int)"))
966- then at
967- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
968- let bk = ( let at = invoke(aa, "getTWAP60", [av, false], nil)
969- if ($isInstanceOf(at, "(Int, Int)"))
970- then at
971- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._2
972- let eI = pow(10, 0, aP(au), 0, 0, DOWN)
973- let eJ = pow(10, 0, aP(av), 0, 0, DOWN)
974- let eK = (fraction(bj, bx, eI) + fraction(bk, by, eJ))
975- let eL = if ((eH == au))
976- then $Tuple2(bj, eI)
977- else $Tuple2(bk, eJ)
978- let eM = eL._1
979- let eN = eL._2
980- fraction(fraction(eK, (eG - 100), 100), eN, eM)
967+func eH (bz,bA,aw,ax,eI,eJ) = {
968+ let bl = ( let av = invoke(ac, "getTWAP60", [aw, false], nil)
969+ if ($isInstanceOf(av, "(Int, Int)"))
970+ then av
971+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
972+ let bm = ( let av = invoke(ac, "getTWAP60", [ax, false], nil)
973+ if ($isInstanceOf(av, "(Int, Int)"))
974+ then av
975+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._2
976+ let eK = pow(10, 0, aR(aw), 0, 0, DOWN)
977+ let eL = pow(10, 0, aR(ax), 0, 0, DOWN)
978+ let eM = (fraction(bl, bz, eK) + fraction(bm, bA, eL))
979+ let eN = if ((eJ == aw))
980+ then $Tuple2(bl, eK)
981+ else $Tuple2(bm, eL)
982+ let eO = eN._1
983+ let eP = eN._2
984+ fraction(fraction(eM, (eI - 100), 100), eP, eO)
981985 }
982986
983987
984-@Callable(ah)
985-func calcPriceImpactEVALONLY (aD,eG,eH,bx,by) = if (if ((100 > eG))
988+@Callable(aj)
989+func calcPriceImpactEVALONLY (aF,eI,eJ,bz,bA) = if (if ((100 > eI))
986990 then true
987- else (eG > 300))
991+ else (eI > 300))
988992 then throw("Leverage can't be <100 and >300")
989993 else {
990- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
991- let eO = az(Address(fromBase58String(aD)), bf)
992- let dD = eO._1
993- let dE = eO._2
994- let ax = eO._3
995- let ay = eO._4
996- let aw = eO._5
997- let cz = if ((eG > 100))
998- then eF(bx, by, dD, dE, eG, eH)
994+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
995+ let eQ = aB(Address(fromBase58String(aF)), bh)
996+ let dF = eQ._1
997+ let dG = eQ._2
998+ let az = eQ._3
999+ let aA = eQ._4
1000+ let ay = eQ._5
1001+ let cB = if ((eI > 100))
1002+ then eH(bz, bA, dF, dG, eI, eJ)
9991003 else 0
1000- let eP = if ((eH == dD))
1001- then $Tuple2((bx + cz), by)
1002- else $Tuple2(bx, (by + cz))
1003- let eQ = eP._1
1004- let eR = eP._2
1005- let eS = cm(bf, aD, eQ, dD, eR, dE, ax, ay)
1006- let ct = eS._1
1007- let cx = eS._2
1008- let eT = if ((0 > cx))
1009- then (cx * -1)
1010- else cx
1011- $Tuple2(nil, [eT])
1004+ let eR = if ((eJ == dF))
1005+ then $Tuple2((bz + cB), bA)
1006+ else $Tuple2(bz, (bA + cB))
1007+ let eS = eR._1
1008+ let eT = eR._2
1009+ let eU = co(bh, aF, eS, dF, eT, dG, az, aA)
1010+ let cv = eU._1
1011+ let cz = eU._2
1012+ let eV = if ((0 > cz))
1013+ then (cz * -1)
1014+ else cz
1015+ $Tuple2(nil, [eV])
10121016 }
10131017
10141018
10151019
1016-@Callable(ah)
1017-func getShareAssetPriceREADONLY (aw) = {
1018- let eU = be(aw)
1019- $Tuple2(nil, eU)
1020+@Callable(aj)
1021+func getShareAssetPriceREADONLY (ay) = {
1022+ let eW = bg(ay)
1023+ $Tuple2(nil, eW)
10201024 }
10211025
10221026
10231027
1024-@Callable(ah)
1025-func getUserPositionShareAmountREADONLY (aG,cW) = {
1026- let aD = valueOrErrorMessage(getString(this, (((aG + "_") + cW) + v)), "Unknown position")
1027- let cz = getIntegerValue(this, (((((aD + "_") + aG) + "_") + cW) + w))
1028- let dV = em(aG, aD, cW, (cz > 0))
1029- $Tuple2(nil, dV)
1028+@Callable(aj)
1029+func getUserPositionShareAmountREADONLY (aI,cY) = {
1030+ let aF = valueOrErrorMessage(getString(this, (((aI + "_") + cY) + v)), "Unknown position")
1031+ let cB = getIntegerValue(this, (((((aF + "_") + aI) + "_") + cY) + w))
1032+ let dX = eo(aI, aF, cY, (cB > 0))
1033+ $Tuple2(nil, dX)
10301034 }
10311035
10321036
10331037
1034-@Callable(ah)
1035-func getUserPositionInDollarsREADONLY (aG,eV,cW) = {
1036- func eW (aV,aD) = {
1037- let eX = aV
1038- let eY = eX._1
1039- let eZ = eX._2
1040- let fa = eX._3
1041- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
1042- let fb = az(Address(fromBase58String(aD)), bf)
1043- let dD = fb._1
1044- let dE = fb._2
1045- let ax = fb._3
1046- let ay = fb._4
1047- let aw = fb._5
1048- let cz = valueOrElse(getInteger(this, (((((aD + "_") + aG) + "_") + cW[fa]) + w)), 0)
1049- let dV = em(aG, aD, cW[fa], (cz > 0))
1050- let eU = be(aw)
1051- let fc = pow(10, 0, aP(aw), 0, 0, DOWN)
1052- let fd = fraction(dV, eU, fc)
1053- if ((cz == 0))
1054- then $Tuple3((eY :+ fd), (eZ :+ 0), (fa + 1))
1038+@Callable(aj)
1039+func getUserPositionInDollarsREADONLY (aI,eX,cY) = {
1040+ func eY (aX,aF) = {
1041+ let eZ = aX
1042+ let fa = eZ._1
1043+ let fb = eZ._2
1044+ let fc = eZ._3
1045+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
1046+ let fd = aB(Address(fromBase58String(aF)), bh)
1047+ let dF = fd._1
1048+ let dG = fd._2
1049+ let az = fd._3
1050+ let aA = fd._4
1051+ let ay = fd._5
1052+ let cB = valueOrElse(getInteger(this, (((((aF + "_") + aI) + "_") + cY[fc]) + w)), 0)
1053+ let dX = eo(aI, aF, cY[fc], (cB > 0))
1054+ let eW = bg(ay)
1055+ let fe = pow(10, 0, aR(ay), 0, 0, DOWN)
1056+ let ff = fraction(dX, eW, fe)
1057+ if ((cB == 0))
1058+ then $Tuple3((fa :+ ff), (fb :+ 0), (fc + 1))
10551059 else {
1056- let dX = getStringValue(this, (((((aD + "_") + aG) + "_") + cW[fa]) + x))
1057- let dW = {
1058- let at = invoke(ae(), "getAssetDebt", [false, ((aG + "_") + cW[fa]), dX], nil)
1059- if ($isInstanceOf(at, "Int"))
1060- then at
1061- else throw(($getType(at) + " couldn't be cast to Int"))
1060+ let dZ = getStringValue(this, (((((aF + "_") + aI) + "_") + cY[fc]) + x))
1061+ let dY = {
1062+ let av = invoke(ag(), "getAssetDebt", [false, ((aI + "_") + cY[fc]), dZ], nil)
1063+ if ($isInstanceOf(av, "Int"))
1064+ then av
1065+ else throw(($getType(av) + " couldn't be cast to Int"))
10621066 }
1063- let fe = ( let at = invoke(aa, "getTWAP60", [dX, false], nil)
1064- if ($isInstanceOf(at, "(Int, Int)"))
1065- then at
1066- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._1
1067- let ff = pow(10, 0, aP(dX), 0, 0, DOWN)
1068- let fg = fraction(dW, fe, ff)
1069- $Tuple3((eY :+ fd), (eZ :+ fg), (fa + 1))
1067+ let fg = ( let av = invoke(ac, "getTWAP60", [dZ, false], nil)
1068+ if ($isInstanceOf(av, "(Int, Int)"))
1069+ then av
1070+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._1
1071+ let fh = pow(10, 0, aR(dZ), 0, 0, DOWN)
1072+ let fi = fraction(dY, fg, fh)
1073+ $Tuple3((fa :+ ff), (fb :+ fi), (fc + 1))
10701074 }
10711075 }
10721076
1073- let fh = {
1074- let aX = eV
1075- let aY = size(aX)
1076- let aZ = $Tuple3(nil, nil, 0)
1077- func ba (bb,bc) = if ((bc >= aY))
1078- then bb
1079- else eW(bb, aX[bc])
1077+ let fj = {
1078+ let aZ = eX
1079+ let ba = size(aZ)
1080+ let bb = $Tuple3(nil, nil, 0)
1081+ func bc (bd,be) = if ((be >= ba))
1082+ then bd
1083+ else eY(bd, aZ[be])
10801084
1081- func bd (bb,bc) = if ((bc >= aY))
1082- then bb
1085+ func bf (bd,be) = if ((be >= ba))
1086+ then bd
10831087 else throw("List size exceeds 20")
10841088
1085- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1089+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
10861090 }
1087- let fi = fh._1
1088- let dW = fh._2
1089- $Tuple2(nil, $Tuple2(fi, dW))
1091+ let fk = fj._1
1092+ let dY = fj._2
1093+ $Tuple2(nil, $Tuple2(fk, dY))
10901094 }
10911095
10921096
10931097
1094-@Callable(ah)
1095-func replenish (aD,eG,eH) = if (if ((100 > eG))
1098+@Callable(aj)
1099+func replenish (aF,eI,eJ) = if (if ((100 > eI))
10961100 then true
1097- else (eG > 300))
1101+ else (eI > 300))
10981102 then throw("Leverage can't be <100 and >300")
10991103 else {
1100- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
1101- let fj = az(Address(fromBase58String(aD)), bf)
1102- let dD = fj._1
1103- let dE = fj._2
1104- let ax = fj._3
1105- let ay = fj._4
1106- let aw = fj._5
1107- let fk = if ((size(ah.payments) == 2))
1108- then if ((aN(ah.payments[0].assetId) != dD))
1104+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
1105+ let fl = aB(Address(fromBase58String(aF)), bh)
1106+ let dF = fl._1
1107+ let dG = fl._2
1108+ let az = fl._3
1109+ let aA = fl._4
1110+ let ay = fl._5
1111+ let fm = if ((size(aj.payments) == 2))
1112+ then if ((aP(aj.payments[0].assetId) != dF))
11091113 then throw("Wrong payment asset A")
1110- else if ((aN(ah.payments[1].assetId) != dE))
1114+ else if ((aP(aj.payments[1].assetId) != dG))
11111115 then throw("Wrong payment asset B")
1112- else $Tuple4(ah.payments[0].amount, dD, ah.payments[1].amount, dE)
1113- else if ((size(ah.payments) == 1))
1114- then if ((aN(ah.payments[0].assetId) == dD))
1115- then $Tuple4(ah.payments[0].amount, dD, 0, dE)
1116- else if ((aN(ah.payments[0].assetId) == dE))
1117- then $Tuple4(0, dD, ah.payments[0].amount, dE)
1116+ else $Tuple4(aj.payments[0].amount, dF, aj.payments[1].amount, dG)
1117+ else if ((size(aj.payments) == 1))
1118+ then if ((aP(aj.payments[0].assetId) == dF))
1119+ then $Tuple4(aj.payments[0].amount, dF, 0, dG)
1120+ else if ((aP(aj.payments[0].assetId) == dG))
1121+ then $Tuple4(0, dF, aj.payments[0].amount, dG)
11181122 else throw("Wrong payment")
11191123 else throw("One or two payments expected")
1120- let bx = fk._1
1121- let fl = fk._2
1122- let by = fk._3
1123- let fm = fk._4
1124- let fn = aF(toString(ah.caller))
1125- if ((eG > 100))
1124+ let bz = fm._1
1125+ let fn = fm._2
1126+ let bA = fm._3
1127+ let fo = fm._4
1128+ let fp = aH(toString(aj.caller))
1129+ if ((eI > 100))
11261130 then {
1127- let cz = eF(bx, by, fl, fm, eG, eH)
1128- let eC = makeString([toString(ah.caller), aD, toString(bx), fl, toString(by), fm, toString(ax), toString(ay), aw, eH, toString(cz)], ",")
1129- let fo = {
1130- let at = invoke(this, "createNewRequest", [eC], nil)
1131- if ($isInstanceOf(at, "Int"))
1132- then at
1133- else throw(($getType(at) + " couldn't be cast to Int"))
1131+ let cB = eH(bz, bA, fn, fo, eI, eJ)
1132+ let eE = makeString([toString(aj.caller), aF, toString(bz), fn, toString(bA), fo, toString(az), toString(aA), ay, eJ, toString(cB)], ",")
1133+ let fq = {
1134+ let av = invoke(this, "createNewRequest", [eE], nil)
1135+ if ($isInstanceOf(av, "Int"))
1136+ then av
1137+ else throw(($getType(av) + " couldn't be cast to Int"))
11341138 }
1135- if ((fo == fo))
1139+ if ((fq == fq))
11361140 then {
1137- let fp = [((toString(ah.caller) + "_") + toString(fn)), aw, eH, cz, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fo, "Can't create new request"))]
1138- let bR = reentrantInvoke(ae(), "flashPosition", fp, nil)
1139- if ((bR == bR))
1141+ let fr = [((toString(aj.caller) + "_") + toString(fp)), ay, eJ, cB, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fq, "Can't create new request"))]
1142+ let bT = reentrantInvoke(ag(), "flashPosition", fr, nil)
1143+ if ((bT == bT))
11401144 then nil
11411145 else throw("Strict value is not equal to itself.")
11421146 }
11431147 else throw("Strict value is not equal to itself.")
11441148 }
11451149 else {
1146- let fq = cK(bf, aD, h, bx, dD, by, dE, ax, ay, aw)
1147- let fr = fq._1
1148- let dT = fq._2
1149- (cU(aD, toString(ah.caller), fr, dT, fn, aw, bf, false) ++ bs(dD, dE, aw))
1150+ let fs = cM(bh, aF, h, bz, dF, bA, dG, az, aA, ay)
1151+ let ft = fs._1
1152+ let dV = fs._2
1153+ (cW(aF, toString(aj.caller), ft, dV, fp, ay, bh, false) ++ bu(dF, dG, ay))
11501154 }
11511155 }
11521156
11531157
11541158
1155-@Callable(ah)
1156-func withdraw (aD,en) = es(toString(ah.caller), aD, toString(en), false)
1159+@Callable(aj)
1160+func withdraw (aF,ep) = eu(toString(aj.caller), aF, toString(ep), false)
11571161
11581162
11591163
1160-@Callable(ah)
1161-func createUpdateStopLoss (en,fs,al,ft) = {
1162- let fu = ( let at = invoke(aa, "getTWAP60", [al, false], nil)
1163- if ($isInstanceOf(at, "(Int, Int)"))
1164- then at
1165- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._1
1166- if (!(isDefined(getInteger(this, (((((fs + "_") + toString(ah.caller)) + "_") + toString(en)) + u)))))
1164+@Callable(aj)
1165+func createUpdateStopLoss (ep,fu,an,fv) = {
1166+ let fw = ( let av = invoke(ac, "getTWAP60", [an, false], nil)
1167+ if ($isInstanceOf(av, "(Int, Int)"))
1168+ then av
1169+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._1
1170+ if (!(isDefined(getInteger(this, (((((fu + "_") + toString(aj.caller)) + "_") + toString(ep)) + u)))))
11671171 then throw("There are no user position")
1168- else if ((0 >= ft))
1172+ else if ((0 >= fv))
11691173 then throw("Price must be greater than 0")
1170- else if ((ft > fu))
1174+ else if ((fv > fw))
11711175 then throw("Price must be less than current token price")
1172- else [IntegerEntry((((((((toString(ah.caller) + "_") + toString(en)) + "_") + fs) + "_") + al) + Q), ft)]
1176+ else [IntegerEntry((((((((toString(aj.caller) + "_") + toString(ep)) + "_") + fu) + "_") + an) + Q), fv)]
11731177 }
11741178
11751179
11761180
1177-@Callable(ah)
1178-func deleteStopLoss (en,fs,al) = if (!(isDefined(getInteger(this, (((((((toString(ah.caller) + "_") + toString(en)) + "_") + fs) + "_") + al) + Q)))))
1181+@Callable(aj)
1182+func deleteStopLoss (ep,fu,an) = if (!(isDefined(getInteger(this, (((((((toString(aj.caller) + "_") + toString(ep)) + "_") + fu) + "_") + an) + Q)))))
11791183 then throw("No entry")
1180- else [DeleteEntry((((((((toString(ah.caller) + "_") + toString(en)) + "_") + fs) + "_") + al) + Q))]
1184+ else [DeleteEntry((((((((toString(aj.caller) + "_") + toString(ep)) + "_") + fu) + "_") + an) + Q))]
11811185
11821186
11831187
1184-@Callable(ah)
1185-func createNewRequest (bQ) = valueOrElse(ai(ah), {
1186- let fo = (valueOrElse(getInteger(this, L), 0) + 1)
1187- $Tuple2([StringEntry((toString(fo) + K), bQ), IntegerEntry(L, fo)], fo)
1188+@Callable(aj)
1189+func init (fx,fy,fz,ac,fA,ad,fB,fC,fD) = if (isDefined(getString(R)))
1190+ then throw("Already inited")
1191+ else [StringEntry(R, fx), StringEntry(S, fy), StringEntry(T, fz), StringEntry(V, ac), StringEntry(W, fA), StringEntry(X, ad), StringEntry(Y, fB), StringEntry(Z, fC), StringEntry(U, fD)]
1192+
1193+
1194+
1195+@Callable(aj)
1196+func createNewRequest (bS) = valueOrElse(ak(aj), {
1197+ let fq = (valueOrElse(getInteger(this, L), 0) + 1)
1198+ $Tuple2([StringEntry((toString(fq) + K), bS), IntegerEntry(L, fq)], fq)
11881199 })
11891200
11901201
11911202
1192-@Callable(ah)
1193-func replenishFromLand (eB) = valueOrElse(aj(ah), {
1194- let fv = eA(eB)
1195- let aG = fv._1
1196- let aD = fv._2
1197- let bx = fv._3
1198- let dD = fv._4
1199- let by = fv._5
1200- let dE = fv._6
1201- let ax = fv._7
1202- let ay = fv._8
1203- let aw = fv._9
1204- let eD = fv._10
1205- let eE = fv._11
1206- if ((size(ah.payments) != 1))
1203+@Callable(aj)
1204+func replenishFromLand (eD) = valueOrElse(al(aj), {
1205+ let fE = eC(eD)
1206+ let aI = fE._1
1207+ let aF = fE._2
1208+ let bz = fE._3
1209+ let dF = fE._4
1210+ let bA = fE._5
1211+ let dG = fE._6
1212+ let az = fE._7
1213+ let aA = fE._8
1214+ let ay = fE._9
1215+ let eF = fE._10
1216+ let eG = fE._11
1217+ if ((size(aj.payments) != 1))
12071218 then throw("Wrong payment size")
1208- else if (if ((aN(ah.payments[0].assetId) != eD))
1219+ else if (if ((aP(aj.payments[0].assetId) != eF))
12091220 then true
1210- else (ah.payments[0].amount != eE))
1221+ else (aj.payments[0].amount != eG))
12111222 then throw("Wrong payment")
12121223 else {
1213- let fw = if ((dD == eD))
1214- then $Tuple2((bx + ah.payments[0].amount), by)
1215- else $Tuple2(bx, (by + ah.payments[0].amount))
1216- let fx = fw._1
1217- let fy = fw._2
1218- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Unknown pool")
1219- let fz = cK(bf, aD, g, fx, dD, fy, dE, ax, ay, aw)
1220- let fr = fz._1
1221- let dT = fz._2
1222- let cW = aF(aG)
1223- let fA = [IntegerEntry((((((aD + "_") + aG) + "_") + toString(cW)) + w), eE), StringEntry((((((aD + "_") + aG) + "_") + toString(cW)) + x), eD)]
1224- let fB = cU(aD, aG, fr, dT, cW, aw, bf, true)
1225- $Tuple2((((fB ++ bs(dD, dE, aw)) ++ fA) :+ DeleteEntry((eB + K))), fr)
1224+ let fF = if ((dF == eF))
1225+ then $Tuple2((bz + aj.payments[0].amount), bA)
1226+ else $Tuple2(bz, (bA + aj.payments[0].amount))
1227+ let fG = fF._1
1228+ let fH = fF._2
1229+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Unknown pool")
1230+ let fI = cM(bh, aF, g, fG, dF, fH, dG, az, aA, ay)
1231+ let ft = fI._1
1232+ let dV = fI._2
1233+ let cY = aH(aI)
1234+ let fJ = [IntegerEntry((((((aF + "_") + aI) + "_") + toString(cY)) + w), eG), StringEntry((((((aF + "_") + aI) + "_") + toString(cY)) + x), eF)]
1235+ let fK = cW(aF, aI, ft, dV, cY, ay, bh, true)
1236+ $Tuple2((((fK ++ bu(dF, dG, ay)) ++ fJ) :+ DeleteEntry((eD + K))), ft)
12261237 }
12271238 })
12281239
12291240
12301241
1231-@Callable(ah)
1232-func liquidate (aG,en,fC) = valueOrElse(aj(ah), {
1233- let aD = valueOrErrorMessage(getString(this, (((aG + "_") + en) + v)), "no position")
1234- let bf = valueOrErrorMessage(getString(this, (M + aD)), "Pool is not inited")
1235- let fD = az(Address(fromBase58String(aD)), bf)
1236- let dD = fD._1
1237- let dE = fD._2
1238- let ax = fD._3
1239- let ay = fD._4
1240- let aw = fD._5
1241- let bL = bM(aD, bf, aw, fC)
1242- let cz = getIntegerValue(this, (((((aD + "_") + aG) + "_") + en) + w))
1243- let dX = getStringValue(this, (((((aD + "_") + aG) + "_") + en) + x))
1244- let dV = em(aG, aD, en, (cz > 0))
1245- if ((cz == 0))
1242+@Callable(aj)
1243+func liquidate (aI,ep,fL) = valueOrElse(al(aj), {
1244+ let aF = valueOrErrorMessage(getString(this, (((aI + "_") + ep) + v)), "no position")
1245+ let bh = valueOrErrorMessage(getString(this, (M + aF)), "Pool is not inited")
1246+ let fM = aB(Address(fromBase58String(aF)), bh)
1247+ let dF = fM._1
1248+ let dG = fM._2
1249+ let az = fM._3
1250+ let aA = fM._4
1251+ let ay = fM._5
1252+ let bN = bO(aF, bh, ay, fL)
1253+ let cB = getIntegerValue(this, (((((aF + "_") + aI) + "_") + ep) + w))
1254+ let dZ = getStringValue(this, (((((aF + "_") + aI) + "_") + ep) + x))
1255+ let dX = eo(aI, aF, ep, (cB > 0))
1256+ if ((cB == 0))
12461257 then throw("You can't liquidate position without borrow")
1247- else [IntegerEntry((((((aD + "_") + aG) + "_") + en) + z), getIntegerValue(this, (aD + C))), IntegerEntry((aD + B), (aE(aD) - fC)), IntegerEntry((aD + A), (aC(aD) - fC)), IntegerEntry((((((aD + "_") + aG) + "_") + en) + u), (dV - fC)), ScriptTransfer(ah.caller, bL, fromBase58String(aw))]
1258+ else [IntegerEntry((((((aF + "_") + aI) + "_") + ep) + z), getIntegerValue(this, (aF + C))), IntegerEntry((aF + B), (aG(aF) - fL)), IntegerEntry((aF + A), (aE(aF) - fL)), IntegerEntry((((((aF + "_") + aI) + "_") + ep) + u), (dX - fL)), ScriptTransfer(aj.caller, bN, fromBase58String(ay))]
12481259 })
12491260
12501261
12511262
1252-@Callable(ah)
1253-func stopLoss (aG,en,aD,al) = valueOrElse(ag(ah), {
1254- let fu = ( let at = invoke(aa, "getTWAP60", [al, false], nil)
1255- if ($isInstanceOf(at, "(Int, Int)"))
1256- then at
1257- else throw(($getType(at) + " couldn't be cast to (Int, Int)")))._1
1258- if (!(isDefined(getInteger(this, (((((((aG + "_") + toString(en)) + "_") + aD) + "_") + al) + Q)))))
1263+@Callable(aj)
1264+func stopLoss (aI,ep,aF,an) = valueOrElse(ai(aj), {
1265+ let fw = ( let av = invoke(ac, "getTWAP60", [an, false], nil)
1266+ if ($isInstanceOf(av, "(Int, Int)"))
1267+ then av
1268+ else throw(($getType(av) + " couldn't be cast to (Int, Int)")))._1
1269+ if (!(isDefined(getInteger(this, (((((((aI + "_") + toString(ep)) + "_") + aF) + "_") + an) + Q)))))
12591270 then throw("No entry")
1260- else (es(toString(ah.caller), aD, toString(en), true) :+ DeleteEntry((((((((aG + "_") + toString(en)) + "_") + aD) + "_") + al) + Q)))
1271+ else (eu(toString(aj.caller), aF, toString(ep), true) :+ DeleteEntry((((((((aI + "_") + toString(ep)) + "_") + aF) + "_") + an) + Q)))
12611272 })
12621273
12631274
12641275
1265-@Callable(ah)
1266-func capitalizeExKeeper (aD,aA,fE,fF,fG,dh,di,dj,dk,dl,dm,dn) = valueOrElse(ag(ah), {
1267- let fH = if (fG)
1268- then cH(aA, aD)
1276+@Callable(aj)
1277+func capitalizeExKeeper (aF,aC,fN,fO,fP,dj,dk,dl,dm,dn,do,dp) = valueOrElse(ai(aj), {
1278+ let fQ = if (fP)
1279+ then cJ(aC, aF)
12691280 else {
1270- let fI = if ((aA == a))
1271- then ac
1272- else ad
1273- $Tuple2(fF, fI)
1281+ let fR = if ((aC == a))
1282+ then ae
1283+ else af
1284+ $Tuple2(fO, fR)
12741285 }
1275- let fJ = fH._1
1276- let fI = fH._2
1277- let fK = dd(fE, fF, fI, dh, di, dj, dk, dl, dm, dn)
1278- let cr = (fJ - fF)
1279- let fL = if ((cr > 0))
1280- then [IntegerEntry((aD + O), (cr + valueOrElse(getInteger(this, (aD + O)), 0)))]
1286+ let fS = fQ._1
1287+ let fR = fQ._2
1288+ let fT = df(fN, fO, fR, dj, dk, dl, dm, dn, do, dp)
1289+ let ct = (fS - fO)
1290+ let fU = if ((ct > 0))
1291+ then [IntegerEntry((aF + O), (ct + valueOrElse(getInteger(this, (aF + O)), 0)))]
12811292 else nil
1282- (dz(aD, aA, fE, fK) ++ fL)
1293+ (dB(aF, aC, fN, fT) ++ fU)
12831294 })
12841295
12851296
12861297
1287-@Callable(ah)
1288-func capitalizeExPuzzle (aD,aA,fE,fF,fG,dq,dr,dn) = valueOrElse(ag(ah), {
1289- let fM = if (fG)
1290- then cH(aA, aD)
1298+@Callable(aj)
1299+func capitalizeExPuzzle (aF,aC,fN,fO,fP,ds,dt,dp) = valueOrElse(ai(aj), {
1300+ let fV = if (fP)
1301+ then cJ(aC, aF)
12911302 else {
1292- let fI = if ((aA == a))
1293- then ac
1294- else ad
1295- $Tuple2(fF, fI)
1303+ let fR = if ((aC == a))
1304+ then ae
1305+ else af
1306+ $Tuple2(fO, fR)
12961307 }
1297- let fJ = fM._1
1298- let fI = fM._2
1299- let fK = dp(fE, fF, fI, dq, dr, dn)
1300- let cr = (fJ - fF)
1301- let fL = if ((cr > 0))
1302- then [IntegerEntry((aD + O), (cr + valueOrElse(getInteger(this, (aD + O)), 0)))]
1308+ let fS = fV._1
1309+ let fR = fV._2
1310+ let fT = dr(fN, fO, fR, ds, dt, dp)
1311+ let ct = (fS - fO)
1312+ let fU = if ((ct > 0))
1313+ then [IntegerEntry((aF + O), (ct + valueOrElse(getInteger(this, (aF + O)), 0)))]
13031314 else nil
1304- (dz(aD, aA, fE, fK) ++ fL)
1315+ (dB(aF, aC, fN, fT) ++ fU)
13051316 })
13061317
13071318
13081319
1309-@Callable(ah)
1310-func capitalizeExSwopFi (aD,aA,fE,fF,fG,dt,du,dv,dw,dx,dy,dn) = valueOrElse(ag(ah), {
1311- let fN = if (fG)
1312- then cH(aA, aD)
1320+@Callable(aj)
1321+func capitalizeExSwopFi (aF,aC,fN,fO,fP,dv,dw,dx,dy,dz,dA,dp) = valueOrElse(ai(aj), {
1322+ let fW = if (fP)
1323+ then cJ(aC, aF)
13131324 else {
1314- let fI = if ((aA == a))
1315- then ac
1316- else ad
1317- $Tuple2(fF, fI)
1325+ let fR = if ((aC == a))
1326+ then ae
1327+ else af
1328+ $Tuple2(fO, fR)
13181329 }
1319- let fJ = fN._1
1320- let fI = fN._2
1321- let fK = ds(fE, fF, fI, dt, du, dv, dw, dx, dy, dn)
1322- let cr = (fJ - fF)
1323- let fL = if ((cr > 0))
1324- then [IntegerEntry((aD + O), (cr + valueOrElse(getInteger(this, (aD + O)), 0)))]
1330+ let fS = fW._1
1331+ let fR = fW._2
1332+ let fT = du(fN, fO, fR, dv, dw, dx, dy, dz, dA, dp)
1333+ let ct = (fS - fO)
1334+ let fU = if ((ct > 0))
1335+ then [IntegerEntry((aF + O), (ct + valueOrElse(getInteger(this, (aF + O)), 0)))]
13251336 else nil
1326- (dz(aD, aA, fE, fK) ++ fL)
1337+ (dB(aF, aC, fN, fT) ++ fU)
13271338 })
13281339
13291340
13301341
1331-@Callable(ah)
1332-func initNewPool (aA,aq,fO,fP,fQ,fR,fS,fT) = valueOrElse(ag(ah), if (if ((aA != a))
1333- then (aA != b)
1342+@Callable(aj)
1343+func initNewPool (aC,as,fX,fY,fZ,ga,gb,gc) = valueOrElse(ai(aj), if (if ((aC != a))
1344+ then (aC != b)
13341345 else false)
13351346 then throw("Wrong type")
13361347 else {
1337- let fU = az(Address(fromBase58String(aq)), aA)
1338- let au = fU._1
1339- let av = fU._2
1340- let fV = fU._3
1341- let fW = fU._4
1342- let aw = fU._5
1343-[IntegerEntry((aq + E), fO), IntegerEntry((aq + F), fP), IntegerEntry((aq + G), fQ), IntegerEntry((aq + H), fR), IntegerEntry((aq + I), fS), IntegerEntry((aq + J), fT), IntegerEntry((aq + C), 0), IntegerEntry((aq + D), 0), StringEntry((M + aq), aA), StringEntry((aw + N), aq)]
1348+ let gd = aB(Address(fromBase58String(as)), aC)
1349+ let aw = gd._1
1350+ let ax = gd._2
1351+ let ge = gd._3
1352+ let gf = gd._4
1353+ let ay = gd._5
1354+[IntegerEntry((as + E), fX), IntegerEntry((as + F), fY), IntegerEntry((as + G), fZ), IntegerEntry((as + H), ga), IntegerEntry((as + I), gb), IntegerEntry((as + J), gc), IntegerEntry((as + C), 0), IntegerEntry((as + D), 0), StringEntry((M + as), aC), StringEntry((ay + N), as)]
13441355 })
13451356
13461357
1347-@Verifier(fX)
1348-func fY () = sigVerify(fX.bodyBytes, fX.proofs[0], fX.senderPublicKey)
1358+@Verifier(gg)
1359+func gh () = sigVerify(gg.bodyBytes, gg.proofs[0], gg.senderPublicKey)
13491360

github/deemru/w8io/169f3d6 
544.66 ms