tx · 9aSC87Ub5LW2JueEeButiKuwbuDsotoggDtefnTXRfPs

3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1:  -0.01400000 Waves

2022.01.14 13:15 [2943535] smart account 3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1 > SELF 0.00000000 Waves

{ "type": 13, "id": "9aSC87Ub5LW2JueEeButiKuwbuDsotoggDtefnTXRfPs", "fee": 1400000, "feeAssetId": null, "timestamp": 1642154970109, "version": 2, "chainId": 87, "sender": "3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1", "senderPublicKey": "5aTg4oxM77iRmUGy3y8Zavn5fhVbgtUciAuSGfCJAYjn", "proofs": [ "", "4KsgYbfWk1Gy2G6e48NprJe5NWHDdNmb83ByEVh41aD6HdbW7ueWRBn5XQw4Sqm9vi2BwZtSty1tq3EpVo6ujydK", "21b3Q9Wkcq4rfhdyJmss2RktuDtDGphVv8NmD1RTPXvbN798Avdiez5fyY48jRQjPpPHDmW9VU7wEUtEv3AVgxuD" ], "script": "base64:AAIFAAAAAAAAACYIAhIAEgMKAQESBAoCAQESABIECgIBARIAEgASABIFCgMEAQgSAAAAAFEAAAAAB3ZlcnNpb24CAAAABTIuMC4wAAAAAAhrVmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAHa0FjdGl2ZQIAAAAGYWN0aXZlAAAAAAlrQXNzZXRJZEECAAAACkFfYXNzZXRfaWQAAAAACWtBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAAJa0JhbGFuY2VBAgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAACWtCYWxhbmNlQgIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAA1rU2hhcmVBc3NldElkAgAAAA5zaGFyZV9hc3NldF9pZAAAAAARa1NoYXJlQXNzZXRTdXBwbHkCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAAEa0ZlZQIAAAAKY29tbWlzc2lvbgAAAAASa0ZlZVNjYWxlRGVsaW1pdGVyAgAAABpjb21taXNzaW9uX3NjYWxlX2RlbGltaXRlcgAAAAAKa0ludmFyaWFudAIAAAAJaW52YXJpYW50AAAAAAZrQ2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAABJrZXlVU0ROTlNCVEFkZHJlc3MCAAAAGHN0YWtpbmdfdXNkbm5zYnRfYWRkcmVzcwAAAAAOa2V5RVVSTkFkZHJlc3MCAAAAFHN0YWtpbmdfZXVybl9hZGRyZXNzAAAAAA9rZXlBZG1pblB1YktleTECAAAAC2FkbWluX3B1Yl8xAAAAAA9rZXlBZG1pblB1YktleTICAAAAC2FkbWluX3B1Yl8yAAAAAA9rZXlBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAABRVU0ROVG9XYXZlc0V4Y2hhbmdlcgkBAAAAB0FkZHJlc3MAAAABAQAAABoBV6ugnY67/HaJPzVO8b2xSyoDl1hFH8eK8wAAAAAGb3JhY2xlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXiv8IaJo1ukDNYXTyEjfepjfw+jjO6B44AQAAAAtnZXRBZG1pblB1YgAAAAEAAAALa2V5QWRtaW5QdWIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAGb3JhY2xlBQAAAAtrZXlBZG1pblB1YgMJAAABAAAAAgUAAAAH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AA1zbGlwcGFnZVZhbHVlCQAAZQAAAAIFAAAABnNjYWxlOAkAAGkAAAACCQAAaAAAAAIFAAAABnNjYWxlOAAAAAAAAAAAAQAAAAAAAJiWgAQAAAAeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlCQAAZQAAAAIFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAUAAAAVbWluVG9rZW5SZWNlaXZlQW1vdW50BAAAAAF4CQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAABJ0b2tlblJlY2VpdmVBbW91bnQEAAAAAXkJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAAEnRva2VuUmVjZWl2ZUFtb3VudAQAAAAMaW52YXJpYW50TmV3AwkAAAAAAAACBQAAAAd0b2tlbklkBQAAAAhhc3NldElkQQkBAAAADWludmFyaWFudENhbGMAAAACBQAAAAF4CQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAABVhbW91bnRUb1NlbmRFc3RpbWF0ZWQDCQAAAAAAAAIFAAAAB3Rva2VuSWQFAAAACGFzc2V0SWRCCQEAAAANaW52YXJpYW50Q2FsYwAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAUAAAABeQkAAAIAAAABAgAAABZXcm9uZyBhc3NldCBpbiBwYXltZW50BAAAABdpbnZhcmlhbnRFc3RpbWF0ZWRSYXRpbwkAAGsAAAADBQAAAAZzY2FsZTgFAAAACWludmFyaWFudAUAAAAMaW52YXJpYW50TmV3CgEAAAANZ2V0U3RlcEFtb3VudAAAAAIAAAADYWNjAAAABHN0ZXADCQAAAAAAAAIFAAAAA2FjYwD//////////wQAAAAMYW1vdW50VG9TZW5kCQAAZQAAAAIFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAkAAGkAAAACCQAAaAAAAAIFAAAABHN0ZXAFAAAAHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQAAAAAAAAAABQQAAAANc3RlcEludmFyaWFudAMJAAAAAAAAAgUAAAAHdG9rZW5JZAUAAAAIYXNzZXRJZEEJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAABeAkAAGUAAAACBQAA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bnRlZ2VyRW50cnkAAAACBQAAABFrU2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAAxzaGFyZUlzc3VlSWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMAAAABAAAAEXNsaXBwYWdlVG9sZXJhbmNlBAAAAAtwbXRBc3NldElkQQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRJZEIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAAB2Fzc2V0SWQEAAAACnBtdEFtb3VudEEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAAKcG10QW1vdW50QggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAGYW1vdW50BAAAAA0kdDAxMTkyMjExOTk5CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEEEAAAADnBtdFN0ckFzc2V0SWRBCAUAAAANJHQwMTE5MjIxMTk5OQAAAAJfMQQAAAANcG10QXNzZXROYW1lQQgFAAAADSR0MDExOTIyMTE5OTkAAAACXzIEAAAADHBtdERlY2ltYWxzQQgFAAAADSR0MDExOTIyMTE5OTkAAAACXzMEAAAADSR0MDEyMDA0MTIxOTgJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAtwbXRBc3NldElkQgQAAAAOcG10U3RyQXNzZXRJZEIIBQAAAA0kdDAxMjAwNDEyMTk4AAAAAl8xBAAAAA1wbXRBc3NldE5hbWVCCAUAAAANJHQwMTIwMDQxMjE5OAAAAAJfMgQAAAAMcG10RGVjaW1hbHNCCAUAAAANJHQwMTIwMDQxMjE5OAAAAAJfMwQAAAAKdG9rZW5SYXRpbwkAAGsAAAADCQAAawAAAAMFAAAABnNjYWxlOAUAAAAIYmFsYW5jZUEFAAAACnBtdEFtb3VudEEFAAAABnNjYWxlMwkAAGsAAAADBQAAAAZzY2FsZTgFAAAACGJhbGFuY2VCBQAAAApwbXRBbW91bnRCBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAAawAAAAMFAAAABnNjYWxlOAUAAAAKcG10QW1vdW50QQUAAAAIYmFsYW5jZUEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAAGc2NhbGU4BQAAAApwbXRBbW91bnRCBQAAAAhiYWxhbmNlQgQAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAawAAAAMJAAGXAAAAAQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAA25pbAUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAGc2NhbGU4BAAAABNpbnZhcmlhbnRDYWxjdWxhdGVkCQEAAAANaW52YXJpYW50Q2FsYwAAAAIJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACnBtdEFtb3VudEIDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQEAAAAPdGhyb3dJc0luYWN0aXZlAAAAAAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQAAAAAAAAAACgkAAAIAAAABAgAAACBTbGlwcGFnZSB0b2xlcmFuY2UgbXVzdCBiZSA8PSAxJQMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIJAAACAAAAAQIAAAAcVHdvIGF0dGFjaGVkIGFzc2V0cyBleHBlY3RlZAMDCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQQUAAAAIYXNzZXRJZEEGCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQgUAAAAIYXNzZXRJZEIJAQAAAAt0aHJvd0Fzc2V0cwAAAAADAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAGc2NhbGUzCQAAZQAAAAIFAAAADnNsaXBwYWdlU2NhbGUzBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAOc2xpcHBhZ2VTY2FsZTMFAAAACnRva2VuUmF0aW8GCQAAZgAAAAIFAAAACnRva2VuUmF0aW8JAABpAAAAAgkAAGgAAAACBQAAAAZzY2FsZTMJAABkAAAAAgUAAAAOc2xpcHBhZ2VTY2FsZTMFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAAA5zbGlwcGFnZVNjYWxlMwkAAAIAAAABAgAAAD1JbmNvcnJlY3QgYXNzZXRzIGFtb3VudDogYW1vdW50cyBtdXN0IGhhdmUgdGhlIGNvbnRyYWN0IHJhdGlvAwkAAAAAAAACBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEEFAAAAC3BtdEFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcG10QW1vdW50QgUAAAALcG10QXNzZXRJZEIFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAQAAAAGc3Rha2UxAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAADnBtdFN0ckFzc2V0SWRBCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAApwbXRBbW91bnRBCQAETAAAAAIFAAAADnBtdFN0ckFzc2V0SWRBBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAGc3Rha2UxBQAAAAZzdGFrZTEEAAAABnN0YWtlMgMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAA5wbXRTdHJBc3NldElkQgkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgYJAARMAAAAAgUAAAAKcG10QW1vdW50QgkABEwAAAACBQAAAA5wbXRTdHJBc3NldElkQgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa1NoYXJlQXNzZXRTdXBwbHkJAABkAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50BQAAABNpbnZhcmlhbnRDYWxjdWxhdGVkCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAMc2hhcmVBc3NldElkBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAFXJlcGxlbmlzaFdpdGhPbmVUb2tlbgAAAAIAAAATdmlydHVhbFN3YXBUb2tlblBheQAAABN2aXJ0dWFsU3dhcFRv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AAcFAAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAABlAAAAAgUAAAAJcG10QW1vdW50BQAAABN2aXJ0dWFsU3dhcFRva2VuUGF5CQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAABN2aXJ0dWFsU3dhcFRva2VuR2V0CQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAABN2aXJ0dWFsU3dhcFRva2VuUGF5CQEAAAANaW52YXJpYW50Q2FsYwAAAAIFAAAACGJhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQEAAAAEXZpcnR1YWxSZXBsZW5pc2hBCAUAAAANJHQwMTU2NjIxNjQyNwAAAAJfMQQAAAARdmlydHVhbFJlcGxlbmlzaEIIBQAAAA0kdDAxNTY2MjE2NDI3AAAAAl8yBAAAABFiYWxhbmNlQWZ0ZXJTd2FwQQgFAAAADSR0MDE1NjYyMTY0MjcAAAACXzMEAAAAEWJhbGFuY2VBZnRlclN3YXBCCAUAAAANJHQwMTU2NjIxNjQyNwAAAAJfNAQAAAATaW52YXJpYW50Q2FsY3VsYXRlZAgFAAAADSR0MDE1NjYyMTY0MjcAAAACXzUEAAAAC25ld0JhbGFuY2VBCAUAAAANJHQwMTU2NjIxNjQyNwAAAAJfNgQAAAALbmV3QmFsYW5jZUIIBQAAAA0kdDAxNTY2MjE2NDI3AAAAAl83BAAAAA9uZXdCYWxhbmNlRW50cnkDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQgUAAAALbmV3QmFsYW5jZUIEAAAADGludmFyaWFudE5ldwkBAAAADWludmFyaWFudENhbGMAAAACBQAAABFiYWxhbmNlQWZ0ZXJTd2FwQQUAAAARYmFsYW5jZUFmdGVyU3dhcEIEAAAAF2ludmFyaWFudEVzdGltYXRlZFJhdGlvCQAAawAAAAMFAAAABnNjYWxlOAUAAAAJaW52YXJpYW50BQAAAAxpbnZhcmlhbnROZXcEAAAAJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gJAABpAAAAAgkAAGsAAAADCQAAaAAAAAIFAAAABnNjYWxlOAUAAAAGc2NhbGU4BQAAABFiYWxhbmNlQWZ0ZXJTd2FwQQUAAAARYmFsYW5jZUFmdGVyU3dhcEIJAABrAAAAAwUAAAAGc2NhbGU4BQAAABF2aXJ0dWFsUmVwbGVuaXNoQQUAAAARdmlydHVhbFJlcGxlbmlzaEIEAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQJAABrAAAAAwkAAGQAAAACBQAAAAtuZXdCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUIFAAAADWRBcHBUaHJlc2hvbGQJAABoAAAAAgAAAAAAAAAAAgUAAAATZEFwcFRocmVzaG9sZFNjYWxlMgMDCQAAZwAAAAIFAAAAF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwBQAAABdpbnZhcmlhbnRFc3RpbWF0ZWRSYXRpbwYJAABmAAAAAgUAAAAJaW52YXJpYW50BQAAAAxpbnZhcmlhbnROZXcJAAACAAAAAQIAAAA6SW5jb3JyZWN0IHZpcnR1YWxTd2FwVG9rZW5QYXkgb3IgdmlydHVhbFN3YXBUb2tlbkdldCB2YWx1ZQMDCQAAZgAAAAIFAAAAHHNsaXBwYWdlVmFsdWVNaW5Gb3JSZXBsZW5pc2gFAAAAJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gGCQAAZgAAAAIFAAAAJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gFAAAAHHNsaXBwYWdlVmFsdWVNYXhGb3JSZXBsZW5pc2gJAAACAAAAAQIAAABsU3dhcCB3aXRoIHZpcnR1YWxTd2FwVG9rZW5QYXkgYW5kIHZpcnR1YWxTd2FwVG9rZW5HZXQgaXMgcG9zc2libGUsIGJ1dCByYXRpbyBhZnRlciB2aXJ0dWFsIHN3YXAgaXMgaW5jb3JyZWN0AwMJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUEGCQAAZgAAAAIFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VCCQEAAAAOdGhyb3dUaHJlc2hvbGQAAAADBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUIEAAAABnN0YWtlMQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAA1wbXRTdHJBc3NldElkCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAAlwbXRBbW91bnQJAARMAAAAAgUAAAANcG10U3RyQXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAAawAAAAMFAAAAEXZpcnR1YWxSZXBsZW5pc2hBBQAAAAZzY2FsZTgFAAAAEWJhbGFuY2VBZnRlclN3YXBBBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5CCQAAawAAAAMFAAAAEXZpcnR1YWxSZXBsZW5pc2hCBQAAAAZzY2FsZTgFAAAAEWJhbGFuY2VBZnRlclN3YXBCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAZzY2FsZTgJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAADHNoYXJlQXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa1NoYXJlQXNzZXRTdXBwbHkJAABkAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAVc2hhcmVUb2tlblRvUGF5QW1v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AAprSW52YXJpYW50BQAAABNpbnZhcmlhbnRDYWxjdWxhdGVkCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAMc2hhcmVBc3NldElkBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUEFAAAACGFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlCBQAAAAhhc3NldElkQgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIZXhjaGFuZ2UAAAACAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQAAABJtaW5BbW91bnRUb1JlY2VpdmUEAAAADSR0MDIwMzEwMjAzODUJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAyMDMxMDIwMzg1AAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMjAzMTAyMDM4NQAAAAJfMgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAQAAAA90aHJvd0lzSW5hY3RpdmUAAAAAAwkAAGcAAAACAAAAAAAAAAAABQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUJAAACAAAAAQkAASwAAAACAgAAACtFc3RpbWF0ZWQgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQMJAABmAAAAAgUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA7TWluaW1hbCBhbW91bnQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIGVzdGltYXRlZC4gRXN0aW1hdGVkOiAJAAGkAAAAAQUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlAgAAAAsuIE1pbmltYWw6IAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEIHCQEAAAALdGhyb3dBc3NldHMAAAAAAwkAAGYAAAACAAAAAAAAmJaABQAAAAlwbXRBbW91bnQJAAACAAAAAQIAAAAwT25seSBzd2FwIG9mIDEwLjAwMDAwMCBvciBtb3JlIHRva2VucyBpcyBhbGxvd2VkAwMJAABmAAAAAgUAAAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWluCQAAawAAAAMFAAAABnNjYWxlOAUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAAlwbXRBbW91bnQGCQAAZgAAAAIJAABrAAAAAwUAAAAGc2NhbGU4BQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFAAAACXBtdEFtb3VudAUAAAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWF4CQAAAgAAAAECAAAAHEluY29ycmVjdCBhcmdzIGFuZCBwbXQgcmF0aW8EAAAAC3NlbmRBc3NldElkAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQUAAAAIYXNzZXRJZEIFAAAACGFzc2V0SWRBBAAAAAZhbW91bnQJAQAAABNjYWxjdWxhdGVTZW5kQW1vdW50AAAABAUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAAAZhbW91bnQFAAAADWZlZUdvdmVybmFuY2UFAAAACWZlZVNjYWxlNgQAAAAOYW1vdW50TWludXNGZWUJAABrAAAAAwUAAAAGYW1vdW50CQAAZQAAAAIFAAAACWZlZVNjYWxlNgUAAAADZmVlBQAAAAlmZWVTY2FsZTYEAAAADSR0MDIxODA3MjIwNjkDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBCQAFFAAAAAIJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA5hbW91bnRNaW51c0ZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkABRQAAAACCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADmFtb3VudE1pbnVzRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQEAAAAC25ld0JhbGFuY2VBCAUAAAANJHQwMjE4MDcyMjA2OQAAAAJfMQQAAAALbmV3QmFsYW5jZUIIBQAAAA0kdDAyMTgwNzIyMDY5AAAAAl8yBAAAABNkQXBwVGhyZXNob2xkQW1vdW50CQAAawAAAAMJAABkAAAAAgUAAAALbmV3QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VCBQAAAA1kQXBwVGhyZXNob2xkCQAAaAAAAAIAAAAAAAAAAAIFAAAAE2RBcHBUaHJlc2hvbGRTY2FsZTIDAwkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQQYJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUIJAQAAAA50aHJvd1RocmVzaG9sZAAAAAMFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgQAAAANJHQwMjIzNjcyMjQ0MAkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAACnBtdEFzc2V0SWQEAAAADXBtdFN0ckFzc2V0SWQIBQAAAA0kdDAyMjM2NzIyNDQwAAAAAl8xBAAAAAxwbXRBc3NldE5hbWUIBQAAAA0kdDAyMjM2NzIyNDQwAAAAAl8yBAAAAAtwbXREZWNpbWFscwgFAAAADSR0MDIyMzY3MjI0NDAAAAACXzMEAAAADSR0MDIyNDUzMjI1MzAJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAtzZW5kQXNzZXRJZAQAAAAOc2VuZFN0ckFzc2V0SWQIBQAAAA0kdDAyMjQ1MzIyNTMwAAAAAl8xBAAAAA1zZW5kQXNzZXROYW1lCAUAAAANJHQwMjI0NTMyMjUzMAAAAAJfMgQAAAAMc2VuZERlY2ltYWxzCAUAAAANJHQwMjI0NTMyMjUzMAAAAAJfMwQAAAAGc3Rha2UxAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAADXBtdFN0ckFzc2V0SWQJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAACXBtdEFtb3VudAkABEwAAAACBQAAAA1wbXRTdHJBc3NldElkBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAGc3Rha2UxBQAAAAZzdGFrZTEEAAAABnN0YWtlMgMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAA5zZW5kU3RyQXNzZXRJZAkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgcJAARMAAAAAgkAAGQAAAACBQAAAA5hbW91bnRNaW51c0ZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkABEwAAAACBQAAAA5zZW5kU3RyQXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUEFAAAAC25ld0JhbGFuY2VBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50CQEAAAANaW52YXJpYW50Q2FsYwAAAAIFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADmFtb3VudE1pbnVzRmVlBQAAAAtzZW5kQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA13YWxsZXRBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAtzZW5kQXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIc2h1dGRvd24AAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABCQABLAAAAAICAAAAIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAGa0NhdXNlAgAAABp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAMYWRtU3RhcnRTdG9wBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAADnRocm93T25seUFkbWluAAAAAAkBAAAAB3N1c3BlbmQAAAABAgAAAA9QYXVzZWQgYnkgYWRtaW4AAAABaQEAAAAIYWN0aXZhdGUAAAAAAwUAAAAIaXNBY3RpdmUJAQAAAA10aHJvd0lzQWN0aXZlAAAAAAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAMYWRtU3RhcnRTdG9wBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAADnRocm93T25seUFkbWluAAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAHa0FjdGl2ZQYJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAGa0NhdXNlBQAAAANuaWwAAAABaQEAAAAZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwAAAAAEAAAADWFtb3VudEVucm9sbEEJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEEAAAADWFtb3VudEVucm9sbEIJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUAAAAIYmFsYW5jZUIEAAAADGludmFyaWFudE5ldwkBAAAADWludmFyaWFudENhbGMAAAACCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAA1hbW91bnRFbnJvbGxBCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRFbnJvbGxCAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkBAAAAD3Rocm93SXNJbmFjdGl2ZQAAAAADCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAADXdhbGxldEFkZHJlc3MJAAACAAAAAQIAAAAmT25seSB0aGUgd2FsbGV0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DAwkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxBBgkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxCCQEAAAAHc3VzcGVuZAAAAAECAAAAFkVucm9sbCBhbW91bnQgbmVnYXRpdmUDAwkAAAAAAAACBQAAAA1hbW91bnRFbnJvbGxBAAAAAAAAAAAACQAAAAAAAAIFAAAADWFtb3VudEVucm9sbEIAAAAAAAAAAAAHCQAAAgAAAAECAAAAEE5vIG1vbmV5IHRvIHRha2UEAAAABnN0YWtlMQMDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEJAABmAAAAAgUAAAANYW1vdW50RW5yb2xsQQAAAAAAAAAAAAcJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgUAAAALc3RyQXNzZXRJZEEFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAAGc3Rha2UyAwMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAAtzdHJBc3NldElkQgkAAGYAAAACBQAAAA1hbW91bnRFbnJvbGxCAAAAAAAAAAAABwkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgYJAARMAAAAAgUAAAANYW1vdW50RW5yb2xsQgkABEwAAAACBQAAAAtzdHJBc3NldElkQgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50BQAAAAxpbnZhcmlhbnROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50RW5yb2xsQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRFbnJvbGxCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADGxhc3RfaW5jb21lXwUAAAALc3RyQXNzZXRJZEEFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMbGFzdF9pbmNvbWVfBQAAAAtzdHJBc3NldElkQgUAAAANYW1vdW50RW5yb2xsQgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAMc3Rha2VVbnN0YWtlAAAAAwAAAAVzdGFrZQAAAAZhbW91bnQAAAANYXNzZXRJZFN0cmluZwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAAC1Pbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gaW52b2tlIHRoaXMgZnVuY3Rpb24EAAAADSR0MDI1NTkyMjU2OTUJAQAAABFjYWxjU3Rha2luZ1BhcmFtcwAAAAMFAAAABXN0YWtlBQAAAAZhbW91bnQJAAJZAAAAAQUAAAANYXNzZXRJZFN0cmluZwQAAAAEY2FsbAgFAAAADSR0MDI1NTkyMjU2OTUAAAACXzEEAAAABGFkZHIIBQAAAA0kdDAyNTU5MjI1Njk1AAAAAl8yBAAAAAZwYXJhbXMIBQAAAA0kdDAyNTU5MjI1Njk1AAAAAl8zBAAAAAhwYXltZW50cwgFAAAADSR0MDI1NTkyMjU2OTUAAAACXzQEAAAAA2ludgkAA/wAAAAEBQAAAARhZGRyBQAAAARjYWxsBQAAAAZwYXJhbXMFAAAACHBheW1lbnRzAwkAAAAAAAACBQAAAANpbnYFAAAAA2ludgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAhzdGFrZUFsbAAAAAADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAADGFkbVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEEAAAAB2Ftb3VudEEJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADXN0YWtlZEFtb3VudEEDCQAAZgAAAAIFAAAAB2Ftb3VudEEAAAAAAAAAAAAJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAAB2Ftb3VudEEJAARMAAAAAgUAAAALc3RyQXNzZXRJZEEFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAAGc3Rha2UyAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAAC3N0ckFzc2V0SWRCBAAAAAdhbW91bnRCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA1zdGFrZWRBbW91bnRCAwkAAGYAAAACBQAAAAdhbW91bnRCAAAAAAAAAAAACQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAAdhbW91bnRCCQAETAAAAAIFAAAAC3N0ckFzc2V0SWRCBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAGc3Rha2UyBQAAAAZzdGFrZTIFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAATbXVsdGlTaWduZWRCeUFkbWlucwQAAAASYWRtaW5QdWJLZXkxU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADGFkbWluUHViS2V5MQAAAAAAAAAAAQAAAAAAAAAAAAQAAAASYWRtaW5QdWJLZXkyU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEFAAAADGFkbWluUHViS2V5MgAAAAAAAAAAAQAAAAAAAAAAAAQAAAASYWRtaW5QdWJLZXkzU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAIFAAAADGFkbWluUHViS2V5MwAAAAAAAAAAAQAAAAAAAAAAAAkAAGcAAAACCQAAZAAAAAIJAABkAAAAAgUAAAASYWRtaW5QdWJLZXkxU2lnbmVkBQAAABJhZG1pblB1YktleTJTaWduZWQFAAAAEmFkbWluUHViS2V5M1NpZ25lZAAAAAAAAAAAAgQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAAAAANpbnYFAAAAByRtYXRjaDAEAAAAE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAAAAAAIIBQAAAANpbnYAAAAEZEFwcAUAAAAEdGhpcwkAAAAAAAACCAUAAAADaW52AAAACGZ1bmN0aW9uAgAAABl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQAAAANc2lnbmVkQnlBZG1pbgMDAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADGFkbWluUHViS2V5MQYJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAAxhZG1pblB1YktleTIGCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAMYWRtaW5QdWJLZXkzBgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAACmFkbVN0YWtpbmcDAwUAAAATY2FsbFRha2VJbnRvQWNjb3VudAUAAAANc2lnbmVkQnlBZG1pbgcGBQAAABNtdWx0aVNpZ25lZEJ5QWRtaW5zBQAAABNtdWx0aVNpZ25lZEJ5QWRtaW5zgkeLcQ==", "height": 2943535, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DuKuktRV5zz3yNAsj21gu9B6xw7P2PpNcSdeBXU4tV3P Next: YPFm4mAthVPQaQHZnc4sC1WDhpF9Tz71xq9suPb5rAx Diff:
OldNewDifferences
2727
2828 let m = "shutdown_cause"
2929
30-let n = "admin_pub_1"
30+let n = "staking_usdnnsbt_address"
3131
32-let o = "admin_pub_2"
32+let o = "staking_eurn_address"
3333
34-let p = "admin_pub_3"
34+let p = "admin_pub_1"
3535
36-let q = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
36+let q = "admin_pub_2"
3737
38-let r = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
38+let r = "admin_pub_3"
3939
40-func s (t) = {
41- let u = getString(r, t)
42- if ($isInstanceOf(u, "String"))
40+let s = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
41+
42+let t = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
43+
44+func u (v) = {
45+ let w = getString(t, v)
46+ if ($isInstanceOf(w, "String"))
4347 then {
44- let v = u
45- fromBase58String(v)
48+ let x = w
49+ fromBase58String(x)
4650 }
4751 else {
48- let w = u
52+ let y = w
4953 throw("Admin public key is empty")
5054 }
5155 }
5256
5357
54-let x = s(n)
58+let z = u(p)
5559
56-let y = s(o)
60+let A = u(q)
5761
58-let z = s(p)
62+let B = u(r)
5963
60-let A = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
64+let C = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
6165
62-let B = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
66+let D = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
6367
64-let C = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
68+let E = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
6569
66-let D = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
70+let F = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
6771
68-let E = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
72+let G = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
6973
70-let F = 270000
74+let H = [toBase58String(F), toBase58String(G)]
7175
72-let G = getBooleanValue(this, c)
76+let I = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
7377
74-let H = getStringValue(this, d)
78+let J = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
7579
76-let I = getStringValue(this, e)
80+let K = getBooleanValue(this, c)
7781
78-let J = if ((H == "WAVES"))
82+let L = getStringValue(this, d)
83+
84+let M = getStringValue(this, e)
85+
86+let N = if ((L == "WAVES"))
7987 then unit
80- else fromBase58String(H)
88+ else fromBase58String(L)
8189
82-let K = if ((I == "WAVES"))
90+let O = if ((M == "WAVES"))
8391 then unit
84- else fromBase58String(I)
92+ else fromBase58String(M)
8593
86-let L = {
87- let u = J
88- if ($isInstanceOf(u, "ByteVector"))
94+let P = {
95+ let w = N
96+ if ($isInstanceOf(w, "ByteVector"))
8997 then {
90- let M = u
91- value(assetInfo(M)).name
98+ let Q = w
99+ value(assetInfo(Q)).name
92100 }
93- else if ($isInstanceOf(u, "Unit"))
101+ else if ($isInstanceOf(w, "Unit"))
94102 then {
95- let N = u
103+ let R = w
96104 "WAVES"
97105 }
98106 else throw("Match error")
99107 }
100108
101-let O = {
102- let u = K
103- if ($isInstanceOf(u, "ByteVector"))
109+let S = {
110+ let w = O
111+ if ($isInstanceOf(w, "ByteVector"))
104112 then {
105- let M = u
106- value(assetInfo(M)).name
113+ let Q = w
114+ value(assetInfo(Q)).name
107115 }
108- else if ($isInstanceOf(u, "Unit"))
116+ else if ($isInstanceOf(w, "Unit"))
109117 then {
110- let N = u
118+ let R = w
111119 "WAVES"
112120 }
113121 else throw("Match error")
114122 }
115123
116-let P = getIntegerValue(this, f)
124+let T = getIntegerValue(this, f)
117125
118-let Q = getIntegerValue(this, g)
126+let U = getIntegerValue(this, g)
119127
120-let R = fromBase58String(getStringValue(this, h))
128+let V = fromBase58String(getStringValue(this, h))
121129
122-let S = getIntegerValue(this, i)
130+let W = getIntegerValue(this, i)
123131
124-let T = getIntegerValue(this, l)
132+let X = getIntegerValue(this, l)
125133
126-let U = 500
134+let Y = 500
127135
128-let V = 200
136+let Z = 200
129137
130-let W = 1000000
138+let aa = 1000000
131139
132-let X = 1000
140+let ab = 1000
133141
134-let Y = 100000000
142+let ac = 100000000
135143
136-let Z = 1000000000000
144+let ad = 1000000000000
137145
138-let aa = 1000
146+let ae = 1000
139147
140-let ab = 8
141-
142-let ac = 50
143-
144-let ad = 100
145-
146-let ae = 90000000
147-
148-let af = 110000000
148+let af = 8
149149
150150 let ag = 50
151151
152-let ah = 2
152+let ah = 100
153153
154-let ai = 46000000
154+let ai = 90000000
155155
156-func aj (ak) = {
157- let u = ak
158- if ($isInstanceOf(u, "ByteVector"))
156+let aj = 110000000
157+
158+let ak = 50
159+
160+let al = 2
161+
162+let am = 46000000
163+
164+func an (ao) = {
165+ let w = ao
166+ if ($isInstanceOf(w, "ByteVector"))
159167 then {
160- let M = u
161- assetBalance(this, M)
168+ let Q = w
169+ assetBalance(this, Q)
162170 }
163- else if ($isInstanceOf(u, "Unit"))
171+ else if ($isInstanceOf(w, "Unit"))
164172 then {
165- let N = u
173+ let R = w
166174 wavesBalance(this).available
167175 }
168176 else throw("Match error")
169177 }
170178
171179
172-let al = {
173- let u = getInteger(D, ((("rpd_balance_" + toBase58String(E)) + "_") + toString(this)))
174- if ($isInstanceOf(u, "Int"))
180+func ap (ao) = {
181+ let aq = {
182+ let w = ao
183+ if ($isInstanceOf(w, "ByteVector"))
184+ then {
185+ let ar = w
186+ if ((ar == F))
187+ then getInteger(I, ((("rpd_balance_" + toBase58String(ar)) + "_") + toString(this)))
188+ else if ((ar == G))
189+ then getInteger(J, ((("%s%s%s__stakingBalance__" + toBase58String(ar)) + "__") + toString(this)))
190+ else 0
191+ }
192+ else if ($isInstanceOf(w, "Unit"))
193+ then 0
194+ else throw("Match error")
195+ }
196+ let w = aq
197+ if ($isInstanceOf(w, "Int"))
175198 then {
176- let am = u
177- am
199+ let as = w
200+ as
178201 }
179- else if ($isInstanceOf(u, "Unit"))
180- then {
181- let w = u
182- 0
183- }
184- else throw("Match error")
185- }
186-
187-let an = (P - (if ((J == E))
188- then al
189- else 0))
190-
191-let ao = (Q - (if ((K == E))
192- then al
193- else 0))
194-
195-let ap = (aj(J) + (if ((J == E))
196- then al
197- else 0))
198-
199-let aq = (aj(K) + (if ((K == E))
200- then al
201- else 0))
202-
203-let ar = if ((ap >= P))
204- then (aq >= Q)
205- else false
206-
207-func as (at,au) = (((fraction(Z, at, au) + fraction(Z, au, at)) / 2) / 10000)
208-
209-
210-func av (at,au) = {
211- let aw = as(at, au)
212- (fraction((at + au), Y, pow(aw, ab, ag, ah, ab, CEILING)) + (2 * fraction(pow(fraction(at, au, Y), 0, 5, 1, (ab / 2), DOWN), pow((aw - ai), ab, ag, ah, ab, DOWN), Y)))
202+ else 0
213203 }
214204
215205
216-func ax (ay,az,aA,aB) = {
217- let aC = (Y - ((Y * 1) / 10000000))
218- let aD = (ay - az)
219- let at = (P + aA)
220- let au = (Q + aA)
221- let aE = if ((aB == J))
222- then av(at, (Q - ay))
223- else if ((aB == K))
224- then av((P - ay), au)
225- else throw("Wrong asset in payment")
226- let aF = fraction(Y, T, aE)
227- func aG (aH,aI) = if ((aH == -1))
228- then {
229- let aJ = (ay - ((aI * aD) / 5))
230- let aK = if ((aB == J))
231- then av(at, (Q - aJ))
232- else av((P - aJ), au)
233- if ((aK > T))
234- then aJ
235- else -1
236- }
237- else aH
206+let at = ap(N)
238207
239- let aL = {
240- let aM = [1, 2, 3, 4, 5]
241- let aN = size(aM)
242- let aO = -1
243- if ((aN == 0))
244- then aO
245- else {
246- let aP = aG(aO, aM[0])
247- if ((aN == 1))
248- then aP
249- else {
250- let aQ = aG(aP, aM[1])
251- if ((aN == 2))
252- then aQ
253- else {
254- let aR = aG(aQ, aM[2])
255- if ((aN == 3))
256- then aR
257- else {
258- let aS = aG(aR, aM[3])
259- if ((aN == 4))
260- then aS
261- else {
262- let aT = aG(aS, aM[4])
263- if ((aN == 5))
264- then aT
265- else {
266- let aU = aG(aT, aM[5])
267- throw("List size exceed 5")
268- }
269- }
270- }
271- }
272- }
273- }
274- }
275- if ((0 > aL))
276- then throw("something went wrong while working with amountToSend")
277- else if (if ((aF > aC))
278- then (aE > T)
279- else false)
280- then ay
281- else aL
208+let au = ap(O)
209+
210+let av = (T - at)
211+
212+let aw = (U - au)
213+
214+let ax = (an(N) + at)
215+
216+let ay = (an(O) + au)
217+
218+let az = if ((ax >= T))
219+ then (ay >= U)
220+ else false
221+
222+func aA (aB,aC) = (((fraction(ad, aB, aC) + fraction(ad, aC, aB)) / 2) / 10000)
223+
224+
225+func aD (aB,aC) = {
226+ let aE = aA(aB, aC)
227+ (fraction((aB + aC), ac, pow(aE, af, ak, al, af, CEILING)) + (2 * fraction(pow(fraction(aB, aC, ac), 0, 5, 1, (af / 2), DOWN), pow((aE - am), af, ak, al, af, DOWN), ac)))
282228 }
283229
284230
285-func aV (ak) = {
286- let u = ak
287- if ($isInstanceOf(u, "ByteVector"))
231+func aF (aG,aH,aI,aJ) = {
232+ let aK = (ac - ((ac * 1) / 10000000))
233+ let aL = (aG - aH)
234+ let aB = (T + aI)
235+ let aC = (U + aI)
236+ let aM = if ((aJ == N))
237+ then aD(aB, (U - aG))
238+ else if ((aJ == O))
239+ then aD((T - aG), aC)
240+ else throw("Wrong asset in payment")
241+ let aN = fraction(ac, X, aM)
242+ func aO (aP,aQ) = if ((aP == -1))
288243 then {
289- let M = u
290- let aW = toBase58String(M)
291- let aX = valueOrErrorMessage(assetInfo(M), (("Asset " + aW) + " doesn't exist"))
292- $Tuple3(aW, aX.name, aX.decimals)
244+ let aR = (aG - ((aQ * aL) / 5))
245+ let aS = if ((aJ == N))
246+ then aD(aB, (U - aR))
247+ else aD((T - aR), aC)
248+ if ((aS > X))
249+ then aR
250+ else -1
293251 }
294- else if ($isInstanceOf(u, "Unit"))
252+ else aP
253+
254+ let aT = {
255+ let aU = [1, 2, 3, 4, 5]
256+ let aV = size(aU)
257+ let aW = -1
258+ func aX (aY,aZ) = if ((aZ >= aV))
259+ then aY
260+ else aO(aY, aU[aZ])
261+
262+ func ba (aY,aZ) = if ((aZ >= aV))
263+ then aY
264+ else throw("List size exceeds 5")
265+
266+ ba(aX(aX(aX(aX(aX(aW, 0), 1), 2), 3), 4), 5)
267+ }
268+ if ((0 > aT))
269+ then throw("something went wrong while working with amountToSend")
270+ else if (if ((aN > aK))
271+ then (aM > X)
272+ else false)
273+ then aG
274+ else aT
275+ }
276+
277+
278+func bb (ao) = {
279+ let w = ao
280+ if ($isInstanceOf(w, "ByteVector"))
281+ then {
282+ let Q = w
283+ let bc = toBase58String(Q)
284+ let bd = valueOrErrorMessage(assetInfo(Q), (("Asset " + bc) + " doesn't exist"))
285+ $Tuple3(bc, bd.name, bd.decimals)
286+ }
287+ else if ($isInstanceOf(w, "Unit"))
295288 then {
296- let N = u
289+ let R = w
297290 $Tuple3("WAVES", "WAVES", 8)
298291 }
299292 else throw("Match error")
300293 }
301294
302295
303-func aY (aZ) = [BooleanEntry(c, false), StringEntry(m, aZ)]
296+func be (bf) = [BooleanEntry(c, false), StringEntry(m, bf)]
304297
305298
306-func ba (bb,ak) = if ((ak == E))
307- then {
308- let bc = (bb - F)
309- if ((0 >= bc))
310- then throw((((("Insufficient amount " + toString(bb)) + " to deduct staking fee ") + toString(F)) + " USD-N"))
311- else bc
312- }
313- else bb
299+func bg () = throw("DApp is already active")
314300
315301
316-func bd () = throw("DApp is already active")
302+func bh () = throw("DApp is inactive at this moment")
317303
318304
319-func be () = throw("DApp is inactive at this moment")
305+func bi () = throw("Only admin can call this function")
320306
321307
322-func bf () = throw("Only admin can call this function")
308+func bj () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
323309
324310
325-func bg () = throw(((("Incorrect assets attached. Expected: " + H) + " and ") + I))
311+func bk (bl,bm,bn) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bl)) + ": ") + toString(bm)) + " ") + P) + ", ") + toString(bn)) + " ") + S))
326312
327313
328-func bh (bi,bj,bk) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bi)) + ": ") + toString(bj)) + " ") + L) + ", ") + toString(bk)) + " ") + O))
314+func bo () = be(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
329315
330316
331-func bl (bb,bm,bn) = throw((((((((("Insufficient DApp balance to pay " + toString(bb)) + " ") + bn) + " due to staking. Available: ") + toString(bm)) + " ") + bn) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
317+func bp (bq,ao) = if (bq)
318+ then if ((ao == F))
319+ then $Tuple2("lockNeutrino", I)
320+ else $Tuple2("startStaking", J)
321+ else if ((ao == F))
322+ then $Tuple2("unlockNeutrino", I)
323+ else $Tuple2("stopStaking", J)
332324
333325
334-func bo (bj,bk) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(bj)) + " ") + L) + " and ") + toString(bk)) + " ") + O) + " due to staking. Available: ") + toString(an)) + " ") + L) + " and ") + toString(ao)) + " ") + O) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
326+func br (bq,bs,ao) = if (bq)
327+ then {
328+ let bt = bp(bq, ao)
329+ let bu = bt._1
330+ let bv = bt._2
331+ $Tuple4(bu, bv, nil, [AttachedPayment(ao, bs)])
332+ }
333+ else {
334+ let bw = bp(bq, ao)
335+ let bu = bw._1
336+ let bv = bw._2
337+ $Tuple4(bu, bv, [bs, toBase58String(ao)], nil)
338+ }
335339
336340
337-func bp () = aY(((((((((((((((("Suspicious state. Actual balances: " + toString(P)) + " ") + L) + ", ") + toString(Q)) + " ") + O) + ". State: ") + toString(aj(J))) + " ") + L) + ", ") + toString(aj(K))) + " ") + O))
338-
339-
340-@Callable(bq)
341+@Callable(as)
341342 func init () = {
342- let br = $Tuple2(bq.payments[0].amount, bq.payments[0].assetId)
343- let bs = br._1
344- let bt = br._2
345- let bu = $Tuple2(bq.payments[1].amount, bq.payments[1].assetId)
346- let bv = bu._1
347- let bw = bu._2
348- let bx = aV(bt)
343+ let bx = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
349344 let by = bx._1
350345 let bz = bx._2
351- let bA = bx._3
352- let bB = aV(bw)
353- let bC = bB._1
354- let bD = bB._2
355- let bE = bB._3
346+ let bA = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
347+ let bB = bA._1
348+ let bC = bA._2
349+ let bD = bb(bz)
350+ let bE = bD._1
351+ let bF = bD._2
352+ let bG = bD._3
353+ let bH = bb(bC)
354+ let bI = bH._1
355+ let bJ = bH._2
356+ let bK = bH._3
356357 if (isDefined(getBoolean(this, c)))
357- then bd()
358- else if ((bt == bw))
358+ then bg()
359+ else if ((bz == bC))
359360 then throw("Assets must be different")
360361 else {
361- let bF = ((("s" + take(bz, 7)) + "_") + take(bD, 7))
362- let bG = ((((("ShareToken of SwopFi protocol for " + bz) + " and ") + bD) + " at address ") + toString(this))
363- let bH = ((bA + bE) / 2)
364- let bI = fraction(pow(bs, bA, 5, 1, bA, DOWN), pow(bv, bE, 5, 1, bE, DOWN), pow(10, 0, bH, 0, 0, DOWN))
365- let bJ = Issue(bF, bG, bI, bH, true)
366- let bK = calculateAssetId(bJ)
367- let bL = av(bs, bv)
368-[StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, by), StringEntry(e, bC), IntegerEntry(f, bs), IntegerEntry(g, bv), IntegerEntry(l, bL), IntegerEntry(j, U), IntegerEntry(k, W), bJ, StringEntry(h, toBase58String(bK)), IntegerEntry(i, bI), ScriptTransfer(bq.caller, bI, bK)]
362+ let bL = ((("s" + take(bF, 7)) + "_") + take(bJ, 7))
363+ let bM = ((((("ShareToken of SwopFi protocol for " + bF) + " and ") + bJ) + " at address ") + toString(this))
364+ let bN = ((bG + bK) / 2)
365+ let bO = fraction(pow(by, bG, 5, 1, bG, DOWN), pow(bB, bK, 5, 1, bK, DOWN), pow(10, 0, bN, 0, 0, DOWN))
366+ let bP = Issue(bL, bM, bO, bN, true)
367+ let bQ = calculateAssetId(bP)
368+ let bR = aD(by, bB)
369+ let bS = if (containsElement(H, bE))
370+ then invoke(this, "stakeUnstake", [true, by, bE], nil)
371+ else 0
372+ if ((bS == bS))
373+ then {
374+ let bT = if (containsElement(H, bI))
375+ then invoke(this, "stakeUnstake", [true, bB, bI], nil)
376+ else 0
377+ if ((bT == bT))
378+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bE), StringEntry(e, bI), IntegerEntry(f, by), IntegerEntry(g, bB), IntegerEntry(l, bR), IntegerEntry(j, Y), IntegerEntry(k, aa), bP, StringEntry(h, toBase58String(bQ)), IntegerEntry(i, bO), ScriptTransfer(as.caller, bO, bQ)]
379+ else throw("Strict value is not equal to itself.")
380+ }
381+ else throw("Strict value is not equal to itself.")
369382 }
370383 }
371384
372385
373386
374-@Callable(bq)
375-func replenishWithTwoTokens (bM) = {
376- let bt = bq.payments[0].assetId
377- let bw = bq.payments[1].assetId
378- let bs = ba(bq.payments[0].amount, bt)
379- let bv = ba(bq.payments[1].amount, bw)
380- let bN = fraction(fraction(Y, P, bs), X, fraction(Y, Q, bv))
381- let bO = fraction(Y, bs, P)
382- let bP = fraction(Y, bv, Q)
383- let bQ = fraction(min([bO, bP]), S, Y)
384- let bL = av((P + bs), (Q + bv))
385- if (!(G))
386- then be()
387- else if (if ((0 > bM))
387+@Callable(as)
388+func replenishWithTwoTokens (bU) = {
389+ let bz = as.payments[0].assetId
390+ let bC = as.payments[1].assetId
391+ let by = as.payments[0].amount
392+ let bB = as.payments[1].amount
393+ let bV = bb(bz)
394+ let bE = bV._1
395+ let bF = bV._2
396+ let bG = bV._3
397+ let bW = bb(bC)
398+ let bI = bW._1
399+ let bJ = bW._2
400+ let bK = bW._3
401+ let bX = fraction(fraction(ac, T, by), ab, fraction(ac, U, bB))
402+ let bY = fraction(ac, by, T)
403+ let bZ = fraction(ac, bB, U)
404+ let ca = fraction(min([bY, bZ]), W, ac)
405+ let bR = aD((T + by), (U + bB))
406+ if (!(K))
407+ then bh()
408+ else if (if ((0 > bU))
388409 then true
389- else (bM > 10))
410+ else (bU > 10))
390411 then throw("Slippage tolerance must be <= 1%")
391- else if ((size(bq.payments) != 2))
412+ else if ((size(as.payments) != 2))
392413 then throw("Two attached assets expected")
393- else if (if ((bt != J))
414+ else if (if ((bz != N))
394415 then true
395- else (bw != K))
396- then bg()
397- else if (if ((((X * (aa - bM)) / aa) > bN))
416+ else (bC != O))
417+ then bj()
418+ else if (if ((((ab * (ae - bU)) / ae) > bX))
398419 then true
399- else (bN > ((X * (aa + bM)) / aa)))
420+ else (bX > ((ab * (ae + bU)) / ae)))
400421 then throw("Incorrect assets amount: amounts must have the contract ratio")
401- else if ((bQ == 0))
422+ else if ((ca == 0))
402423 then throw("Too small amount to replenish")
403- else if (!(ar))
404- then ([ScriptTransfer(bq.caller, bs, bt), ScriptTransfer(bq.caller, bv, bw)] ++ bp())
405- else [IntegerEntry(f, (P + bs)), IntegerEntry(g, (Q + bv)), IntegerEntry(i, (S + bQ)), IntegerEntry(l, bL), Reissue(R, bQ, true), ScriptTransfer(bq.caller, bQ, R)]
424+ else if (!(az))
425+ then ([ScriptTransfer(as.caller, by, bz), ScriptTransfer(as.caller, bB, bC)] ++ bo())
426+ else {
427+ let bS = if (containsElement(H, bE))
428+ then invoke(this, "stakeUnstake", [true, by, bE], nil)
429+ else 0
430+ if ((bS == bS))
431+ then {
432+ let bT = if (containsElement(H, bI))
433+ then invoke(this, "stakeUnstake", [true, bB, bI], nil)
434+ else 0
435+ if ((bT == bT))
436+ then [IntegerEntry(f, (T + by)), IntegerEntry(g, (U + bB)), IntegerEntry(i, (W + ca)), IntegerEntry(l, bR), Reissue(V, ca, true), ScriptTransfer(as.caller, ca, V)]
437+ else throw("Strict value is not equal to itself.")
438+ }
439+ else throw("Strict value is not equal to itself.")
440+ }
406441 }
407442
408443
409444
410-@Callable(bq)
411-func replenishWithOneToken (bR,bS) = {
412- let bT = $Tuple2(bq.payments[0].amount, bq.payments[0].assetId)
413- let bU = bT._1
414- let bV = bT._2
415- let bW = 5000000
416- let bX = 50000000
417- let bY = if ((bX > bU))
445+@Callable(as)
446+func replenishWithOneToken (cb,cc) = {
447+ let cd = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
448+ let ce = cd._1
449+ let cf = cd._2
450+ let cg = bb(cf)
451+ let ch = cg._1
452+ let ci = cg._2
453+ let cj = cg._3
454+ let ck = 5000000
455+ let cl = 50000000
456+ let cm = if ((cl > ce))
418457 then 100000
419458 else 1
420- let bZ = (Y - ((Y * bY) / 10000000))
421- let ca = (Y + ((Y * bY) / 10000000))
422- let cb = (Y - ((Y * 1) / 10000000))
423- if (!(G))
424- then be()
425- else if ((bW > bU))
426- then throw((((("Payment amount " + toString(bU)) + " does not exceed the minimum amount of ") + toString(bW)) + " tokens"))
427- else if ((size(bq.payments) != 1))
459+ let cn = (ac - ((ac * cm) / 10000000))
460+ let co = (ac + ((ac * cm) / 10000000))
461+ let cp = (ac - ((ac * 1) / 10000000))
462+ if (!(K))
463+ then bh()
464+ else if ((ck > ce))
465+ then throw((((("Payment amount " + toString(ce)) + " does not exceed the minimum amount of ") + toString(ck)) + " tokens"))
466+ else if ((size(as.payments) != 1))
428467 then throw("One attached payment expected")
429- else if (!(ar))
430- then ([ScriptTransfer(bq.caller, bU, bV)] ++ bp())
431- else if (if ((bV != J))
432- then (bV != K)
468+ else if (!(az))
469+ then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
470+ else if (if ((cf != N))
471+ then (cf != O)
433472 else false)
434- then bg()
473+ then bj()
435474 else {
436- let cc = if ((bV == J))
437- then $Tuple7((bU - bR), bS, (P + bR), (Q - bS), av((P + bU), Q), (P + bU), Q)
438- else $Tuple7(bS, (bU - bR), (P - bS), (Q + bR), av(P, (Q + bU)), P, (Q + bU))
439- let cd = cc._1
440- let ce = cc._2
441- let cf = cc._3
442- let cg = cc._4
443- let bL = cc._5
444- let ch = cc._6
445- let ci = cc._7
446- let cj = if ((bV == J))
447- then IntegerEntry(f, ch)
448- else IntegerEntry(g, ci)
449- let aE = av(cf, cg)
450- let aF = fraction(Y, T, aE)
451- let ck = (fraction((Y * Y), cf, cg) / fraction(Y, cd, ce))
452- let cl = fraction((ch + ci), ac, (2 * ad))
453- if (if ((cb >= aF))
475+ let cq = if ((cf == N))
476+ then $Tuple7((ce - cb), cc, (T + cb), (U - cc), aD((T + ce), U), (T + ce), U)
477+ else $Tuple7(cc, (ce - cb), (T - cc), (U + cb), aD(T, (U + ce)), T, (U + ce))
478+ let cr = cq._1
479+ let cs = cq._2
480+ let ct = cq._3
481+ let cu = cq._4
482+ let bR = cq._5
483+ let cv = cq._6
484+ let cw = cq._7
485+ let cx = if ((cf == N))
486+ then IntegerEntry(f, cv)
487+ else IntegerEntry(g, cw)
488+ let aM = aD(ct, cu)
489+ let aN = fraction(ac, X, aM)
490+ let cy = (fraction((ac * ac), ct, cu) / fraction(ac, cr, cs))
491+ let cz = fraction((cv + cw), ag, (2 * ah))
492+ if (if ((cp >= aN))
454493 then true
455- else (T > aE))
494+ else (X > aM))
456495 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
457- else if (if ((bZ > ck))
496+ else if (if ((cn > cy))
458497 then true
459- else (ck > ca))
498+ else (cy > co))
460499 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
461- else if (if ((cl > ch))
500+ else if (if ((cz > cv))
462501 then true
463- else (cl > ci))
464- then bh(cl, ch, ci)
502+ else (cz > cw))
503+ then bk(cz, cv, cw)
465504 else {
466- let bO = fraction(ba(cd, J), Y, cf)
467- let bP = fraction(ba(ce, K), Y, cg)
468- let bQ = fraction(min([bO, bP]), S, Y)
469-[Reissue(R, bQ, true), ScriptTransfer(bq.caller, bQ, R), IntegerEntry(i, (S + bQ)), cj, IntegerEntry(l, bL)]
505+ let bS = if (containsElement(H, ch))
506+ then invoke(this, "stakeUnstake", [true, ce, ch], nil)
507+ else 0
508+ if ((bS == bS))
509+ then {
510+ let bY = fraction(cr, ac, ct)
511+ let bZ = fraction(cs, ac, cu)
512+ let ca = fraction(min([bY, bZ]), W, ac)
513+[Reissue(V, ca, true), ScriptTransfer(as.caller, ca, V), IntegerEntry(i, (W + ca)), cx, IntegerEntry(l, bR)]
514+ }
515+ else throw("Strict value is not equal to itself.")
470516 }
471517 }
472518 }
473519
474520
475521
476-@Callable(bq)
522+@Callable(as)
477523 func withdraw () = {
478- let cm = $Tuple2(bq.payments[0].amount, bq.payments[0].assetId)
479- let bU = cm._1
480- let bV = cm._2
481- let cn = ba(fraction(bU, P, S), J)
482- let co = ba(fraction(bU, Q, S), K)
483- let bL = av((P - cn), (Q - co))
484- if (!(G))
485- then be()
486- else if ((size(bq.payments) != 1))
524+ let cA = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
525+ let ce = cA._1
526+ let cf = cA._2
527+ let cB = fraction(ce, T, W)
528+ let cC = fraction(ce, U, W)
529+ let bR = aD((T - cB), (U - cC))
530+ if (!(K))
531+ then bh()
532+ else if ((size(as.payments) != 1))
487533 then throw("One attached payment expected")
488- else if ((bV != R))
489- then throw(("Incorrect asset attached. Expected: " + toBase58String(R)))
490- else if (!(ar))
491- then ([ScriptTransfer(bq.caller, bU, bV)] ++ bp())
492- else if (if ((cn > an))
493- then true
494- else (co > ao))
495- then bo(cn, co)
496- else [IntegerEntry(f, (P - cn)), IntegerEntry(g, (Q - co)), IntegerEntry(i, (S - bU)), IntegerEntry(l, bL), Burn(R, bU), ScriptTransfer(bq.caller, cn, J), ScriptTransfer(bq.caller, co, K)]
534+ else if ((cf != V))
535+ then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
536+ else if (!(az))
537+ then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
538+ else {
539+ let bS = if (containsElement(H, L))
540+ then invoke(this, "stakeUnstake", [false, cB, L], nil)
541+ else 0
542+ if ((bS == bS))
543+ then {
544+ let bT = if (containsElement(H, M))
545+ then invoke(this, "stakeUnstake", [false, cC, M], nil)
546+ else 0
547+ if ((bT == bT))
548+ then [IntegerEntry(f, (T - cB)), IntegerEntry(g, (U - cC)), IntegerEntry(i, (W - ce)), IntegerEntry(l, bR), Burn(V, ce), ScriptTransfer(as.caller, cB, N), ScriptTransfer(as.caller, cC, O)]
549+ else throw("Strict value is not equal to itself.")
550+ }
551+ else throw("Strict value is not equal to itself.")
552+ }
497553 }
498554
499555
500556
501-@Callable(bq)
502-func exchange (cp,cq) = {
503- let cr = $Tuple2(bq.payments[0].amount, bq.payments[0].assetId)
504- let bU = cr._1
505- let bV = cr._2
506- if (!(G))
507- then be()
508- else if ((0 >= cp))
509- then throw(("Estimated amount must be positive. Actual: " + toString(cp)))
510- else if ((cq > cp))
511- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cp)) + ". Minimal: ") + toString(cq)))
512- else if ((size(bq.payments) != 1))
557+@Callable(as)
558+func exchange (cD,cE) = {
559+ let cF = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
560+ let ce = cF._1
561+ let cf = cF._2
562+ if (!(K))
563+ then bh()
564+ else if ((0 >= cD))
565+ then throw(("Estimated amount must be positive. Actual: " + toString(cD)))
566+ else if ((cE > cD))
567+ then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cD)) + ". Minimal: ") + toString(cE)))
568+ else if ((size(as.payments) != 1))
513569 then throw("One attached payment expected")
514- else if (!(ar))
515- then ([ScriptTransfer(bq.caller, bU, bV)] ++ bp())
516- else if (if ((bV != J))
517- then (bV != K)
570+ else if (!(az))
571+ then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
572+ else if (if ((cf != N))
573+ then (cf != O)
518574 else false)
519- then bg()
520- else if ((10000000 > bU))
575+ then bj()
576+ else if ((10000000 > ce))
521577 then throw("Only swap of 10.000000 or more tokens is allowed")
522- else if (if ((ae > fraction(Y, cq, bU)))
578+ else if (if ((ai > fraction(ac, cE, ce)))
523579 then true
524- else (fraction(Y, cp, bU) > af))
580+ else (fraction(ac, cD, ce) > aj))
525581 then throw("Incorrect args and pmt ratio")
526582 else {
527- let cs = if ((bV == J))
528- then K
529- else J
530- let bb = ax(cp, cq, bU, bV)
531- let ct = fraction(bb, V, W)
532- let cu = fraction(bb, (W - U), W)
533- let cv = if ((bV == J))
534- then $Tuple2((P + bU), ((Q - cu) - ct))
535- else $Tuple2(((P - cu) - ct), (Q + bU))
536- let ch = cv._1
537- let ci = cv._2
538- let cl = fraction((ch + ci), ac, (2 * ad))
539- if (if ((cl > ch))
583+ let cG = if ((cf == N))
584+ then O
585+ else N
586+ let bs = aF(cD, cE, ce, cf)
587+ let cH = fraction(bs, Z, aa)
588+ let cI = fraction(bs, (aa - Y), aa)
589+ let cJ = if ((cf == N))
590+ then $Tuple2((T + ce), ((U - cI) - cH))
591+ else $Tuple2(((T - cI) - cH), (U + ce))
592+ let cv = cJ._1
593+ let cw = cJ._2
594+ let cz = fraction((cv + cw), ag, (2 * ah))
595+ if (if ((cz > cv))
540596 then true
541- else (cl > ci))
542- then bh(cl, ch, ci)
543- else if (if (if ((J == E))
544- then (cs == J)
545- else false)
546- then (al >= ch)
547- else false)
548- then bl(cu, an, L)
549- else if (if (if ((K == E))
550- then (cs == K)
551- else false)
552- then (al >= ci)
553- else false)
554- then bl(cu, ao, O)
555- else [IntegerEntry(f, ch), IntegerEntry(g, ci), IntegerEntry(l, av(ch, ci)), ScriptTransfer(bq.caller, cu, cs), ScriptTransfer(C, ct, cs)]
597+ else (cz > cw))
598+ then bk(cz, cv, cw)
599+ else {
600+ let cK = bb(cf)
601+ let ch = cK._1
602+ let ci = cK._2
603+ let cj = cK._3
604+ let cL = bb(cG)
605+ let cM = cL._1
606+ let cN = cL._2
607+ let cO = cL._3
608+ let bS = if (containsElement(H, ch))
609+ then invoke(this, "stakeUnstake", [true, ce, ch], nil)
610+ else 0
611+ if ((bS == bS))
612+ then {
613+ let bT = if (containsElement(H, cM))
614+ then invoke(this, "stakeUnstake", [false, (cI + cH), cM], nil)
615+ else 0
616+ if ((bT == bT))
617+ then [IntegerEntry(f, cv), IntegerEntry(g, cw), IntegerEntry(l, aD(cv, cw)), ScriptTransfer(as.caller, cI, cG), ScriptTransfer(E, cH, cG)]
618+ else throw("Strict value is not equal to itself.")
619+ }
620+ else throw("Strict value is not equal to itself.")
621+ }
556622 }
557623 }
558624
559625
560626
561-@Callable(bq)
562-func shutdown () = if (!(G))
627+@Callable(as)
628+func shutdown () = if (!(K))
563629 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
564- else if (!(containsElement([x, y, z, A], bq.callerPublicKey)))
565- then bf()
566- else aY("Paused by admin")
630+ else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
631+ then bi()
632+ else be("Paused by admin")
567633
568634
569635
570-@Callable(bq)
571-func activate () = if (G)
572- then bd()
573- else if (!(containsElement([x, y, z, A], bq.callerPublicKey)))
574- then bf()
636+@Callable(as)
637+func activate () = if (K)
638+ then bg()
639+ else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
640+ then bi()
575641 else [BooleanEntry(c, true), DeleteEntry(m)]
576642
577643
578644
579-@Callable(bq)
580-func takeIntoAccountExtraFunds (cw) = {
581- let cx = (ap - P)
582- let cy = (aq - Q)
583- let cz = (cx - (if ((J == unit))
584- then cw
585- else 0))
586- let cA = (cy - (if ((K == unit))
587- then cw
588- else 0))
589- let aE = av((P + cz), (Q + cA))
590- if (!(G))
591- then be()
592- else if ((bq.caller != this))
593- then bf()
594- else if ((0 > cw))
595- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cw)))
596- else if (if ((0 > cx))
597- then true
598- else (0 > cy))
599- then aY("Enroll amount negative")
600- else if (if ((0 > cz))
601- then true
602- else (0 > cA))
603- then throw("Too large amountLeave")
604- else [IntegerEntry(l, aE), IntegerEntry(f, (P + cz)), IntegerEntry(g, (Q + cA)), IntegerEntry(("last_income_" + H), cz), IntegerEntry(("last_income_" + I), cA)]
645+@Callable(as)
646+func takeIntoAccountExtraFunds () = {
647+ let cP = (ax - T)
648+ let cQ = (ay - U)
649+ let aM = aD((T + cP), (U + cQ))
650+ if (!(K))
651+ then bh()
652+ else if ((as.caller != E))
653+ then throw("Only the wallet can call this function")
654+ else if (if ((0 > cP))
655+ then true
656+ else (0 > cQ))
657+ then be("Enroll amount negative")
658+ else if (if ((cP == 0))
659+ then (cQ == 0)
660+ else false)
661+ then throw("No money to take")
662+ else {
663+ let bS = if (if (containsElement(H, L))
664+ then (cP > 0)
665+ else false)
666+ then invoke(this, "stakeUnstake", [true, cP, L], nil)
667+ else 0
668+ if ((bS == bS))
669+ then {
670+ let bT = if (if (containsElement(H, M))
671+ then (cQ > 0)
672+ else false)
673+ then invoke(this, "stakeUnstake", [true, cQ, M], nil)
674+ else 0
675+ if ((bT == bT))
676+ then [IntegerEntry(l, aM), IntegerEntry(f, (T + cP)), IntegerEntry(g, (U + cQ)), IntegerEntry(("last_income_" + L), cP), IntegerEntry(("last_income_" + M), cQ)]
677+ else throw("Strict value is not equal to itself.")
678+ }
679+ else throw("Strict value is not equal to itself.")
680+ }
605681 }
606682
607683
608-@Verifier(cB)
609-func cC () = {
610- let u = cB
611- if ($isInstanceOf(u, "InvokeScriptTransaction"))
684+
685+@Callable(as)
686+func stakeUnstake (bq,bs,cR) = if ((as.caller != this))
687+ then throw("Only contract itself can invoke this function")
688+ else {
689+ let cS = br(bq, bs, fromBase58String(cR))
690+ let bu = cS._1
691+ let cT = cS._2
692+ let cU = cS._3
693+ let cV = cS._4
694+ let cW = invoke(cT, bu, cU, cV)
695+ if ((cW == cW))
696+ then nil
697+ else throw("Strict value is not equal to itself.")
698+ }
699+
700+
701+
702+@Callable(as)
703+func stakeAll () = if (!(K))
704+ then throw("DApp is inactive at this moment")
705+ else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
706+ then throw("Only admin can call this function")
707+ else {
708+ let bS = if (containsElement(H, L))
709+ then {
710+ let bm = (T - at)
711+ if ((bm > 0))
712+ then invoke(this, "stakeUnstake", [true, bm, L], nil)
713+ else 0
714+ }
715+ else 0
716+ if ((bS == bS))
717+ then {
718+ let bT = if (containsElement(H, M))
719+ then {
720+ let bn = (U - au)
721+ if ((bn > 0))
722+ then invoke(this, "stakeUnstake", [true, bn, M], nil)
723+ else 0
724+ }
725+ else 0
726+ if ((bT == bT))
727+ then nil
728+ else throw("Strict value is not equal to itself.")
729+ }
730+ else throw("Strict value is not equal to itself.")
731+ }
732+
733+
734+@Verifier(cX)
735+func cY () = {
736+ let cZ = {
737+ let da = if (sigVerify(cX.bodyBytes, cX.proofs[0], z))
738+ then 1
739+ else 0
740+ let db = if (sigVerify(cX.bodyBytes, cX.proofs[1], A))
741+ then 1
742+ else 0
743+ let dc = if (sigVerify(cX.bodyBytes, cX.proofs[2], B))
744+ then 1
745+ else 0
746+ (((da + db) + dc) >= 2)
747+ }
748+ let w = cX
749+ if ($isInstanceOf(w, "InvokeScriptTransaction"))
612750 then {
613- let cD = u
614- let cE = if ((cD.dApp == this))
615- then (cD.function == "takeIntoAccountExtraFunds")
751+ let cW = w
752+ let dd = if ((cW.dApp == this))
753+ then (cW.function == "takeIntoAccountExtraFunds")
616754 else false
617- let cF = if ((cD.dApp == D))
618- then if (if (if ((cD.function == "lockNeutrino"))
619- then (size(cD.payments) == 1)
620- else false)
621- then (cD.payments[0].assetId == E)
622- else false)
623- then true
624- else if ((cD.function == "unlockNeutrino"))
625- then (size(cD.payments) == 0)
626- else false
627- else false
628- let cG = if (if (if ((cD.dApp == q))
629- then (cD.function == "exchange")
630- else false)
631- then (J == E)
755+ let de = if (if (if (sigVerify(cX.bodyBytes, cX.proofs[0], z))
756+ then true
757+ else sigVerify(cX.bodyBytes, cX.proofs[0], A))
758+ then true
759+ else sigVerify(cX.bodyBytes, cX.proofs[0], B))
760+ then true
761+ else sigVerify(cX.bodyBytes, cX.proofs[0], D)
762+ if (if (dd)
763+ then de
632764 else false)
633765 then true
634- else if (if ((K == E))
635- then (size(cD.payments) == 1)
636- else false)
637- then (cD.payments[0].assetId == E)
638- else false
639- let cH = if (if (if (sigVerify(cB.bodyBytes, cB.proofs[0], x))
640- then true
641- else sigVerify(cB.bodyBytes, cB.proofs[0], y))
642- then true
643- else sigVerify(cB.bodyBytes, cB.proofs[0], z))
644- then true
645- else sigVerify(cB.bodyBytes, cB.proofs[0], B)
646- if (if (if (cE)
647- then true
648- else cF)
649- then true
650- else cG)
651- then cH
652- else false
766+ else cZ
653767 }
654- else {
655- let cI = if (sigVerify(cB.bodyBytes, cB.proofs[0], x))
656- then 1
657- else 0
658- let cJ = if (sigVerify(cB.bodyBytes, cB.proofs[1], y))
659- then 1
660- else 0
661- let cK = if (sigVerify(cB.bodyBytes, cB.proofs[2], z))
662- then 1
663- else 0
664- (((cI + cJ) + cK) >= 2)
665- }
768+ else cZ
666769 }
667770
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "share_asset_id"
1919
2020 let i = "share_asset_supply"
2121
2222 let j = "commission"
2323
2424 let k = "commission_scale_delimiter"
2525
2626 let l = "invariant"
2727
2828 let m = "shutdown_cause"
2929
30-let n = "admin_pub_1"
30+let n = "staking_usdnnsbt_address"
3131
32-let o = "admin_pub_2"
32+let o = "staking_eurn_address"
3333
34-let p = "admin_pub_3"
34+let p = "admin_pub_1"
3535
36-let q = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
36+let q = "admin_pub_2"
3737
38-let r = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
38+let r = "admin_pub_3"
3939
40-func s (t) = {
41- let u = getString(r, t)
42- if ($isInstanceOf(u, "String"))
40+let s = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
41+
42+let t = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
43+
44+func u (v) = {
45+ let w = getString(t, v)
46+ if ($isInstanceOf(w, "String"))
4347 then {
44- let v = u
45- fromBase58String(v)
48+ let x = w
49+ fromBase58String(x)
4650 }
4751 else {
48- let w = u
52+ let y = w
4953 throw("Admin public key is empty")
5054 }
5155 }
5256
5357
54-let x = s(n)
58+let z = u(p)
5559
56-let y = s(o)
60+let A = u(q)
5761
58-let z = s(p)
62+let B = u(r)
5963
60-let A = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
64+let C = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
6165
62-let B = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
66+let D = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
6367
64-let C = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
68+let E = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
6569
66-let D = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
70+let F = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
6771
68-let E = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
72+let G = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
6973
70-let F = 270000
74+let H = [toBase58String(F), toBase58String(G)]
7175
72-let G = getBooleanValue(this, c)
76+let I = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
7377
74-let H = getStringValue(this, d)
78+let J = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
7579
76-let I = getStringValue(this, e)
80+let K = getBooleanValue(this, c)
7781
78-let J = if ((H == "WAVES"))
82+let L = getStringValue(this, d)
83+
84+let M = getStringValue(this, e)
85+
86+let N = if ((L == "WAVES"))
7987 then unit
80- else fromBase58String(H)
88+ else fromBase58String(L)
8189
82-let K = if ((I == "WAVES"))
90+let O = if ((M == "WAVES"))
8391 then unit
84- else fromBase58String(I)
92+ else fromBase58String(M)
8593
86-let L = {
87- let u = J
88- if ($isInstanceOf(u, "ByteVector"))
94+let P = {
95+ let w = N
96+ if ($isInstanceOf(w, "ByteVector"))
8997 then {
90- let M = u
91- value(assetInfo(M)).name
98+ let Q = w
99+ value(assetInfo(Q)).name
92100 }
93- else if ($isInstanceOf(u, "Unit"))
101+ else if ($isInstanceOf(w, "Unit"))
94102 then {
95- let N = u
103+ let R = w
96104 "WAVES"
97105 }
98106 else throw("Match error")
99107 }
100108
101-let O = {
102- let u = K
103- if ($isInstanceOf(u, "ByteVector"))
109+let S = {
110+ let w = O
111+ if ($isInstanceOf(w, "ByteVector"))
104112 then {
105- let M = u
106- value(assetInfo(M)).name
113+ let Q = w
114+ value(assetInfo(Q)).name
107115 }
108- else if ($isInstanceOf(u, "Unit"))
116+ else if ($isInstanceOf(w, "Unit"))
109117 then {
110- let N = u
118+ let R = w
111119 "WAVES"
112120 }
113121 else throw("Match error")
114122 }
115123
116-let P = getIntegerValue(this, f)
124+let T = getIntegerValue(this, f)
117125
118-let Q = getIntegerValue(this, g)
126+let U = getIntegerValue(this, g)
119127
120-let R = fromBase58String(getStringValue(this, h))
128+let V = fromBase58String(getStringValue(this, h))
121129
122-let S = getIntegerValue(this, i)
130+let W = getIntegerValue(this, i)
123131
124-let T = getIntegerValue(this, l)
132+let X = getIntegerValue(this, l)
125133
126-let U = 500
134+let Y = 500
127135
128-let V = 200
136+let Z = 200
129137
130-let W = 1000000
138+let aa = 1000000
131139
132-let X = 1000
140+let ab = 1000
133141
134-let Y = 100000000
142+let ac = 100000000
135143
136-let Z = 1000000000000
144+let ad = 1000000000000
137145
138-let aa = 1000
146+let ae = 1000
139147
140-let ab = 8
141-
142-let ac = 50
143-
144-let ad = 100
145-
146-let ae = 90000000
147-
148-let af = 110000000
148+let af = 8
149149
150150 let ag = 50
151151
152-let ah = 2
152+let ah = 100
153153
154-let ai = 46000000
154+let ai = 90000000
155155
156-func aj (ak) = {
157- let u = ak
158- if ($isInstanceOf(u, "ByteVector"))
156+let aj = 110000000
157+
158+let ak = 50
159+
160+let al = 2
161+
162+let am = 46000000
163+
164+func an (ao) = {
165+ let w = ao
166+ if ($isInstanceOf(w, "ByteVector"))
159167 then {
160- let M = u
161- assetBalance(this, M)
168+ let Q = w
169+ assetBalance(this, Q)
162170 }
163- else if ($isInstanceOf(u, "Unit"))
171+ else if ($isInstanceOf(w, "Unit"))
164172 then {
165- let N = u
173+ let R = w
166174 wavesBalance(this).available
167175 }
168176 else throw("Match error")
169177 }
170178
171179
172-let al = {
173- let u = getInteger(D, ((("rpd_balance_" + toBase58String(E)) + "_") + toString(this)))
174- if ($isInstanceOf(u, "Int"))
180+func ap (ao) = {
181+ let aq = {
182+ let w = ao
183+ if ($isInstanceOf(w, "ByteVector"))
184+ then {
185+ let ar = w
186+ if ((ar == F))
187+ then getInteger(I, ((("rpd_balance_" + toBase58String(ar)) + "_") + toString(this)))
188+ else if ((ar == G))
189+ then getInteger(J, ((("%s%s%s__stakingBalance__" + toBase58String(ar)) + "__") + toString(this)))
190+ else 0
191+ }
192+ else if ($isInstanceOf(w, "Unit"))
193+ then 0
194+ else throw("Match error")
195+ }
196+ let w = aq
197+ if ($isInstanceOf(w, "Int"))
175198 then {
176- let am = u
177- am
199+ let as = w
200+ as
178201 }
179- else if ($isInstanceOf(u, "Unit"))
180- then {
181- let w = u
182- 0
183- }
184- else throw("Match error")
185- }
186-
187-let an = (P - (if ((J == E))
188- then al
189- else 0))
190-
191-let ao = (Q - (if ((K == E))
192- then al
193- else 0))
194-
195-let ap = (aj(J) + (if ((J == E))
196- then al
197- else 0))
198-
199-let aq = (aj(K) + (if ((K == E))
200- then al
201- else 0))
202-
203-let ar = if ((ap >= P))
204- then (aq >= Q)
205- else false
206-
207-func as (at,au) = (((fraction(Z, at, au) + fraction(Z, au, at)) / 2) / 10000)
208-
209-
210-func av (at,au) = {
211- let aw = as(at, au)
212- (fraction((at + au), Y, pow(aw, ab, ag, ah, ab, CEILING)) + (2 * fraction(pow(fraction(at, au, Y), 0, 5, 1, (ab / 2), DOWN), pow((aw - ai), ab, ag, ah, ab, DOWN), Y)))
202+ else 0
213203 }
214204
215205
216-func ax (ay,az,aA,aB) = {
217- let aC = (Y - ((Y * 1) / 10000000))
218- let aD = (ay - az)
219- let at = (P + aA)
220- let au = (Q + aA)
221- let aE = if ((aB == J))
222- then av(at, (Q - ay))
223- else if ((aB == K))
224- then av((P - ay), au)
225- else throw("Wrong asset in payment")
226- let aF = fraction(Y, T, aE)
227- func aG (aH,aI) = if ((aH == -1))
228- then {
229- let aJ = (ay - ((aI * aD) / 5))
230- let aK = if ((aB == J))
231- then av(at, (Q - aJ))
232- else av((P - aJ), au)
233- if ((aK > T))
234- then aJ
235- else -1
236- }
237- else aH
206+let at = ap(N)
238207
239- let aL = {
240- let aM = [1, 2, 3, 4, 5]
241- let aN = size(aM)
242- let aO = -1
243- if ((aN == 0))
244- then aO
245- else {
246- let aP = aG(aO, aM[0])
247- if ((aN == 1))
248- then aP
249- else {
250- let aQ = aG(aP, aM[1])
251- if ((aN == 2))
252- then aQ
253- else {
254- let aR = aG(aQ, aM[2])
255- if ((aN == 3))
256- then aR
257- else {
258- let aS = aG(aR, aM[3])
259- if ((aN == 4))
260- then aS
261- else {
262- let aT = aG(aS, aM[4])
263- if ((aN == 5))
264- then aT
265- else {
266- let aU = aG(aT, aM[5])
267- throw("List size exceed 5")
268- }
269- }
270- }
271- }
272- }
273- }
274- }
275- if ((0 > aL))
276- then throw("something went wrong while working with amountToSend")
277- else if (if ((aF > aC))
278- then (aE > T)
279- else false)
280- then ay
281- else aL
208+let au = ap(O)
209+
210+let av = (T - at)
211+
212+let aw = (U - au)
213+
214+let ax = (an(N) + at)
215+
216+let ay = (an(O) + au)
217+
218+let az = if ((ax >= T))
219+ then (ay >= U)
220+ else false
221+
222+func aA (aB,aC) = (((fraction(ad, aB, aC) + fraction(ad, aC, aB)) / 2) / 10000)
223+
224+
225+func aD (aB,aC) = {
226+ let aE = aA(aB, aC)
227+ (fraction((aB + aC), ac, pow(aE, af, ak, al, af, CEILING)) + (2 * fraction(pow(fraction(aB, aC, ac), 0, 5, 1, (af / 2), DOWN), pow((aE - am), af, ak, al, af, DOWN), ac)))
282228 }
283229
284230
285-func aV (ak) = {
286- let u = ak
287- if ($isInstanceOf(u, "ByteVector"))
231+func aF (aG,aH,aI,aJ) = {
232+ let aK = (ac - ((ac * 1) / 10000000))
233+ let aL = (aG - aH)
234+ let aB = (T + aI)
235+ let aC = (U + aI)
236+ let aM = if ((aJ == N))
237+ then aD(aB, (U - aG))
238+ else if ((aJ == O))
239+ then aD((T - aG), aC)
240+ else throw("Wrong asset in payment")
241+ let aN = fraction(ac, X, aM)
242+ func aO (aP,aQ) = if ((aP == -1))
288243 then {
289- let M = u
290- let aW = toBase58String(M)
291- let aX = valueOrErrorMessage(assetInfo(M), (("Asset " + aW) + " doesn't exist"))
292- $Tuple3(aW, aX.name, aX.decimals)
244+ let aR = (aG - ((aQ * aL) / 5))
245+ let aS = if ((aJ == N))
246+ then aD(aB, (U - aR))
247+ else aD((T - aR), aC)
248+ if ((aS > X))
249+ then aR
250+ else -1
293251 }
294- else if ($isInstanceOf(u, "Unit"))
252+ else aP
253+
254+ let aT = {
255+ let aU = [1, 2, 3, 4, 5]
256+ let aV = size(aU)
257+ let aW = -1
258+ func aX (aY,aZ) = if ((aZ >= aV))
259+ then aY
260+ else aO(aY, aU[aZ])
261+
262+ func ba (aY,aZ) = if ((aZ >= aV))
263+ then aY
264+ else throw("List size exceeds 5")
265+
266+ ba(aX(aX(aX(aX(aX(aW, 0), 1), 2), 3), 4), 5)
267+ }
268+ if ((0 > aT))
269+ then throw("something went wrong while working with amountToSend")
270+ else if (if ((aN > aK))
271+ then (aM > X)
272+ else false)
273+ then aG
274+ else aT
275+ }
276+
277+
278+func bb (ao) = {
279+ let w = ao
280+ if ($isInstanceOf(w, "ByteVector"))
281+ then {
282+ let Q = w
283+ let bc = toBase58String(Q)
284+ let bd = valueOrErrorMessage(assetInfo(Q), (("Asset " + bc) + " doesn't exist"))
285+ $Tuple3(bc, bd.name, bd.decimals)
286+ }
287+ else if ($isInstanceOf(w, "Unit"))
295288 then {
296- let N = u
289+ let R = w
297290 $Tuple3("WAVES", "WAVES", 8)
298291 }
299292 else throw("Match error")
300293 }
301294
302295
303-func aY (aZ) = [BooleanEntry(c, false), StringEntry(m, aZ)]
296+func be (bf) = [BooleanEntry(c, false), StringEntry(m, bf)]
304297
305298
306-func ba (bb,ak) = if ((ak == E))
307- then {
308- let bc = (bb - F)
309- if ((0 >= bc))
310- then throw((((("Insufficient amount " + toString(bb)) + " to deduct staking fee ") + toString(F)) + " USD-N"))
311- else bc
312- }
313- else bb
299+func bg () = throw("DApp is already active")
314300
315301
316-func bd () = throw("DApp is already active")
302+func bh () = throw("DApp is inactive at this moment")
317303
318304
319-func be () = throw("DApp is inactive at this moment")
305+func bi () = throw("Only admin can call this function")
320306
321307
322-func bf () = throw("Only admin can call this function")
308+func bj () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
323309
324310
325-func bg () = throw(((("Incorrect assets attached. Expected: " + H) + " and ") + I))
311+func bk (bl,bm,bn) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bl)) + ": ") + toString(bm)) + " ") + P) + ", ") + toString(bn)) + " ") + S))
326312
327313
328-func bh (bi,bj,bk) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bi)) + ": ") + toString(bj)) + " ") + L) + ", ") + toString(bk)) + " ") + O))
314+func bo () = be(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
329315
330316
331-func bl (bb,bm,bn) = throw((((((((("Insufficient DApp balance to pay " + toString(bb)) + " ") + bn) + " due to staking. Available: ") + toString(bm)) + " ") + bn) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
317+func bp (bq,ao) = if (bq)
318+ then if ((ao == F))
319+ then $Tuple2("lockNeutrino", I)
320+ else $Tuple2("startStaking", J)
321+ else if ((ao == F))
322+ then $Tuple2("unlockNeutrino", I)
323+ else $Tuple2("stopStaking", J)
332324
333325
334-func bo (bj,bk) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(bj)) + " ") + L) + " and ") + toString(bk)) + " ") + O) + " due to staking. Available: ") + toString(an)) + " ") + L) + " and ") + toString(ao)) + " ") + O) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
326+func br (bq,bs,ao) = if (bq)
327+ then {
328+ let bt = bp(bq, ao)
329+ let bu = bt._1
330+ let bv = bt._2
331+ $Tuple4(bu, bv, nil, [AttachedPayment(ao, bs)])
332+ }
333+ else {
334+ let bw = bp(bq, ao)
335+ let bu = bw._1
336+ let bv = bw._2
337+ $Tuple4(bu, bv, [bs, toBase58String(ao)], nil)
338+ }
335339
336340
337-func bp () = aY(((((((((((((((("Suspicious state. Actual balances: " + toString(P)) + " ") + L) + ", ") + toString(Q)) + " ") + O) + ". State: ") + toString(aj(J))) + " ") + L) + ", ") + toString(aj(K))) + " ") + O))
338-
339-
340-@Callable(bq)
341+@Callable(as)
341342 func init () = {
342- let br = $Tuple2(bq.payments[0].amount, bq.payments[0].assetId)
343- let bs = br._1
344- let bt = br._2
345- let bu = $Tuple2(bq.payments[1].amount, bq.payments[1].assetId)
346- let bv = bu._1
347- let bw = bu._2
348- let bx = aV(bt)
343+ let bx = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
349344 let by = bx._1
350345 let bz = bx._2
351- let bA = bx._3
352- let bB = aV(bw)
353- let bC = bB._1
354- let bD = bB._2
355- let bE = bB._3
346+ let bA = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
347+ let bB = bA._1
348+ let bC = bA._2
349+ let bD = bb(bz)
350+ let bE = bD._1
351+ let bF = bD._2
352+ let bG = bD._3
353+ let bH = bb(bC)
354+ let bI = bH._1
355+ let bJ = bH._2
356+ let bK = bH._3
356357 if (isDefined(getBoolean(this, c)))
357- then bd()
358- else if ((bt == bw))
358+ then bg()
359+ else if ((bz == bC))
359360 then throw("Assets must be different")
360361 else {
361- let bF = ((("s" + take(bz, 7)) + "_") + take(bD, 7))
362- let bG = ((((("ShareToken of SwopFi protocol for " + bz) + " and ") + bD) + " at address ") + toString(this))
363- let bH = ((bA + bE) / 2)
364- let bI = fraction(pow(bs, bA, 5, 1, bA, DOWN), pow(bv, bE, 5, 1, bE, DOWN), pow(10, 0, bH, 0, 0, DOWN))
365- let bJ = Issue(bF, bG, bI, bH, true)
366- let bK = calculateAssetId(bJ)
367- let bL = av(bs, bv)
368-[StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, by), StringEntry(e, bC), IntegerEntry(f, bs), IntegerEntry(g, bv), IntegerEntry(l, bL), IntegerEntry(j, U), IntegerEntry(k, W), bJ, StringEntry(h, toBase58String(bK)), IntegerEntry(i, bI), ScriptTransfer(bq.caller, bI, bK)]
362+ let bL = ((("s" + take(bF, 7)) + "_") + take(bJ, 7))
363+ let bM = ((((("ShareToken of SwopFi protocol for " + bF) + " and ") + bJ) + " at address ") + toString(this))
364+ let bN = ((bG + bK) / 2)
365+ let bO = fraction(pow(by, bG, 5, 1, bG, DOWN), pow(bB, bK, 5, 1, bK, DOWN), pow(10, 0, bN, 0, 0, DOWN))
366+ let bP = Issue(bL, bM, bO, bN, true)
367+ let bQ = calculateAssetId(bP)
368+ let bR = aD(by, bB)
369+ let bS = if (containsElement(H, bE))
370+ then invoke(this, "stakeUnstake", [true, by, bE], nil)
371+ else 0
372+ if ((bS == bS))
373+ then {
374+ let bT = if (containsElement(H, bI))
375+ then invoke(this, "stakeUnstake", [true, bB, bI], nil)
376+ else 0
377+ if ((bT == bT))
378+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bE), StringEntry(e, bI), IntegerEntry(f, by), IntegerEntry(g, bB), IntegerEntry(l, bR), IntegerEntry(j, Y), IntegerEntry(k, aa), bP, StringEntry(h, toBase58String(bQ)), IntegerEntry(i, bO), ScriptTransfer(as.caller, bO, bQ)]
379+ else throw("Strict value is not equal to itself.")
380+ }
381+ else throw("Strict value is not equal to itself.")
369382 }
370383 }
371384
372385
373386
374-@Callable(bq)
375-func replenishWithTwoTokens (bM) = {
376- let bt = bq.payments[0].assetId
377- let bw = bq.payments[1].assetId
378- let bs = ba(bq.payments[0].amount, bt)
379- let bv = ba(bq.payments[1].amount, bw)
380- let bN = fraction(fraction(Y, P, bs), X, fraction(Y, Q, bv))
381- let bO = fraction(Y, bs, P)
382- let bP = fraction(Y, bv, Q)
383- let bQ = fraction(min([bO, bP]), S, Y)
384- let bL = av((P + bs), (Q + bv))
385- if (!(G))
386- then be()
387- else if (if ((0 > bM))
387+@Callable(as)
388+func replenishWithTwoTokens (bU) = {
389+ let bz = as.payments[0].assetId
390+ let bC = as.payments[1].assetId
391+ let by = as.payments[0].amount
392+ let bB = as.payments[1].amount
393+ let bV = bb(bz)
394+ let bE = bV._1
395+ let bF = bV._2
396+ let bG = bV._3
397+ let bW = bb(bC)
398+ let bI = bW._1
399+ let bJ = bW._2
400+ let bK = bW._3
401+ let bX = fraction(fraction(ac, T, by), ab, fraction(ac, U, bB))
402+ let bY = fraction(ac, by, T)
403+ let bZ = fraction(ac, bB, U)
404+ let ca = fraction(min([bY, bZ]), W, ac)
405+ let bR = aD((T + by), (U + bB))
406+ if (!(K))
407+ then bh()
408+ else if (if ((0 > bU))
388409 then true
389- else (bM > 10))
410+ else (bU > 10))
390411 then throw("Slippage tolerance must be <= 1%")
391- else if ((size(bq.payments) != 2))
412+ else if ((size(as.payments) != 2))
392413 then throw("Two attached assets expected")
393- else if (if ((bt != J))
414+ else if (if ((bz != N))
394415 then true
395- else (bw != K))
396- then bg()
397- else if (if ((((X * (aa - bM)) / aa) > bN))
416+ else (bC != O))
417+ then bj()
418+ else if (if ((((ab * (ae - bU)) / ae) > bX))
398419 then true
399- else (bN > ((X * (aa + bM)) / aa)))
420+ else (bX > ((ab * (ae + bU)) / ae)))
400421 then throw("Incorrect assets amount: amounts must have the contract ratio")
401- else if ((bQ == 0))
422+ else if ((ca == 0))
402423 then throw("Too small amount to replenish")
403- else if (!(ar))
404- then ([ScriptTransfer(bq.caller, bs, bt), ScriptTransfer(bq.caller, bv, bw)] ++ bp())
405- else [IntegerEntry(f, (P + bs)), IntegerEntry(g, (Q + bv)), IntegerEntry(i, (S + bQ)), IntegerEntry(l, bL), Reissue(R, bQ, true), ScriptTransfer(bq.caller, bQ, R)]
424+ else if (!(az))
425+ then ([ScriptTransfer(as.caller, by, bz), ScriptTransfer(as.caller, bB, bC)] ++ bo())
426+ else {
427+ let bS = if (containsElement(H, bE))
428+ then invoke(this, "stakeUnstake", [true, by, bE], nil)
429+ else 0
430+ if ((bS == bS))
431+ then {
432+ let bT = if (containsElement(H, bI))
433+ then invoke(this, "stakeUnstake", [true, bB, bI], nil)
434+ else 0
435+ if ((bT == bT))
436+ then [IntegerEntry(f, (T + by)), IntegerEntry(g, (U + bB)), IntegerEntry(i, (W + ca)), IntegerEntry(l, bR), Reissue(V, ca, true), ScriptTransfer(as.caller, ca, V)]
437+ else throw("Strict value is not equal to itself.")
438+ }
439+ else throw("Strict value is not equal to itself.")
440+ }
406441 }
407442
408443
409444
410-@Callable(bq)
411-func replenishWithOneToken (bR,bS) = {
412- let bT = $Tuple2(bq.payments[0].amount, bq.payments[0].assetId)
413- let bU = bT._1
414- let bV = bT._2
415- let bW = 5000000
416- let bX = 50000000
417- let bY = if ((bX > bU))
445+@Callable(as)
446+func replenishWithOneToken (cb,cc) = {
447+ let cd = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
448+ let ce = cd._1
449+ let cf = cd._2
450+ let cg = bb(cf)
451+ let ch = cg._1
452+ let ci = cg._2
453+ let cj = cg._3
454+ let ck = 5000000
455+ let cl = 50000000
456+ let cm = if ((cl > ce))
418457 then 100000
419458 else 1
420- let bZ = (Y - ((Y * bY) / 10000000))
421- let ca = (Y + ((Y * bY) / 10000000))
422- let cb = (Y - ((Y * 1) / 10000000))
423- if (!(G))
424- then be()
425- else if ((bW > bU))
426- then throw((((("Payment amount " + toString(bU)) + " does not exceed the minimum amount of ") + toString(bW)) + " tokens"))
427- else if ((size(bq.payments) != 1))
459+ let cn = (ac - ((ac * cm) / 10000000))
460+ let co = (ac + ((ac * cm) / 10000000))
461+ let cp = (ac - ((ac * 1) / 10000000))
462+ if (!(K))
463+ then bh()
464+ else if ((ck > ce))
465+ then throw((((("Payment amount " + toString(ce)) + " does not exceed the minimum amount of ") + toString(ck)) + " tokens"))
466+ else if ((size(as.payments) != 1))
428467 then throw("One attached payment expected")
429- else if (!(ar))
430- then ([ScriptTransfer(bq.caller, bU, bV)] ++ bp())
431- else if (if ((bV != J))
432- then (bV != K)
468+ else if (!(az))
469+ then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
470+ else if (if ((cf != N))
471+ then (cf != O)
433472 else false)
434- then bg()
473+ then bj()
435474 else {
436- let cc = if ((bV == J))
437- then $Tuple7((bU - bR), bS, (P + bR), (Q - bS), av((P + bU), Q), (P + bU), Q)
438- else $Tuple7(bS, (bU - bR), (P - bS), (Q + bR), av(P, (Q + bU)), P, (Q + bU))
439- let cd = cc._1
440- let ce = cc._2
441- let cf = cc._3
442- let cg = cc._4
443- let bL = cc._5
444- let ch = cc._6
445- let ci = cc._7
446- let cj = if ((bV == J))
447- then IntegerEntry(f, ch)
448- else IntegerEntry(g, ci)
449- let aE = av(cf, cg)
450- let aF = fraction(Y, T, aE)
451- let ck = (fraction((Y * Y), cf, cg) / fraction(Y, cd, ce))
452- let cl = fraction((ch + ci), ac, (2 * ad))
453- if (if ((cb >= aF))
475+ let cq = if ((cf == N))
476+ then $Tuple7((ce - cb), cc, (T + cb), (U - cc), aD((T + ce), U), (T + ce), U)
477+ else $Tuple7(cc, (ce - cb), (T - cc), (U + cb), aD(T, (U + ce)), T, (U + ce))
478+ let cr = cq._1
479+ let cs = cq._2
480+ let ct = cq._3
481+ let cu = cq._4
482+ let bR = cq._5
483+ let cv = cq._6
484+ let cw = cq._7
485+ let cx = if ((cf == N))
486+ then IntegerEntry(f, cv)
487+ else IntegerEntry(g, cw)
488+ let aM = aD(ct, cu)
489+ let aN = fraction(ac, X, aM)
490+ let cy = (fraction((ac * ac), ct, cu) / fraction(ac, cr, cs))
491+ let cz = fraction((cv + cw), ag, (2 * ah))
492+ if (if ((cp >= aN))
454493 then true
455- else (T > aE))
494+ else (X > aM))
456495 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
457- else if (if ((bZ > ck))
496+ else if (if ((cn > cy))
458497 then true
459- else (ck > ca))
498+ else (cy > co))
460499 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
461- else if (if ((cl > ch))
500+ else if (if ((cz > cv))
462501 then true
463- else (cl > ci))
464- then bh(cl, ch, ci)
502+ else (cz > cw))
503+ then bk(cz, cv, cw)
465504 else {
466- let bO = fraction(ba(cd, J), Y, cf)
467- let bP = fraction(ba(ce, K), Y, cg)
468- let bQ = fraction(min([bO, bP]), S, Y)
469-[Reissue(R, bQ, true), ScriptTransfer(bq.caller, bQ, R), IntegerEntry(i, (S + bQ)), cj, IntegerEntry(l, bL)]
505+ let bS = if (containsElement(H, ch))
506+ then invoke(this, "stakeUnstake", [true, ce, ch], nil)
507+ else 0
508+ if ((bS == bS))
509+ then {
510+ let bY = fraction(cr, ac, ct)
511+ let bZ = fraction(cs, ac, cu)
512+ let ca = fraction(min([bY, bZ]), W, ac)
513+[Reissue(V, ca, true), ScriptTransfer(as.caller, ca, V), IntegerEntry(i, (W + ca)), cx, IntegerEntry(l, bR)]
514+ }
515+ else throw("Strict value is not equal to itself.")
470516 }
471517 }
472518 }
473519
474520
475521
476-@Callable(bq)
522+@Callable(as)
477523 func withdraw () = {
478- let cm = $Tuple2(bq.payments[0].amount, bq.payments[0].assetId)
479- let bU = cm._1
480- let bV = cm._2
481- let cn = ba(fraction(bU, P, S), J)
482- let co = ba(fraction(bU, Q, S), K)
483- let bL = av((P - cn), (Q - co))
484- if (!(G))
485- then be()
486- else if ((size(bq.payments) != 1))
524+ let cA = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
525+ let ce = cA._1
526+ let cf = cA._2
527+ let cB = fraction(ce, T, W)
528+ let cC = fraction(ce, U, W)
529+ let bR = aD((T - cB), (U - cC))
530+ if (!(K))
531+ then bh()
532+ else if ((size(as.payments) != 1))
487533 then throw("One attached payment expected")
488- else if ((bV != R))
489- then throw(("Incorrect asset attached. Expected: " + toBase58String(R)))
490- else if (!(ar))
491- then ([ScriptTransfer(bq.caller, bU, bV)] ++ bp())
492- else if (if ((cn > an))
493- then true
494- else (co > ao))
495- then bo(cn, co)
496- else [IntegerEntry(f, (P - cn)), IntegerEntry(g, (Q - co)), IntegerEntry(i, (S - bU)), IntegerEntry(l, bL), Burn(R, bU), ScriptTransfer(bq.caller, cn, J), ScriptTransfer(bq.caller, co, K)]
534+ else if ((cf != V))
535+ then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
536+ else if (!(az))
537+ then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
538+ else {
539+ let bS = if (containsElement(H, L))
540+ then invoke(this, "stakeUnstake", [false, cB, L], nil)
541+ else 0
542+ if ((bS == bS))
543+ then {
544+ let bT = if (containsElement(H, M))
545+ then invoke(this, "stakeUnstake", [false, cC, M], nil)
546+ else 0
547+ if ((bT == bT))
548+ then [IntegerEntry(f, (T - cB)), IntegerEntry(g, (U - cC)), IntegerEntry(i, (W - ce)), IntegerEntry(l, bR), Burn(V, ce), ScriptTransfer(as.caller, cB, N), ScriptTransfer(as.caller, cC, O)]
549+ else throw("Strict value is not equal to itself.")
550+ }
551+ else throw("Strict value is not equal to itself.")
552+ }
497553 }
498554
499555
500556
501-@Callable(bq)
502-func exchange (cp,cq) = {
503- let cr = $Tuple2(bq.payments[0].amount, bq.payments[0].assetId)
504- let bU = cr._1
505- let bV = cr._2
506- if (!(G))
507- then be()
508- else if ((0 >= cp))
509- then throw(("Estimated amount must be positive. Actual: " + toString(cp)))
510- else if ((cq > cp))
511- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cp)) + ". Minimal: ") + toString(cq)))
512- else if ((size(bq.payments) != 1))
557+@Callable(as)
558+func exchange (cD,cE) = {
559+ let cF = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
560+ let ce = cF._1
561+ let cf = cF._2
562+ if (!(K))
563+ then bh()
564+ else if ((0 >= cD))
565+ then throw(("Estimated amount must be positive. Actual: " + toString(cD)))
566+ else if ((cE > cD))
567+ then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cD)) + ". Minimal: ") + toString(cE)))
568+ else if ((size(as.payments) != 1))
513569 then throw("One attached payment expected")
514- else if (!(ar))
515- then ([ScriptTransfer(bq.caller, bU, bV)] ++ bp())
516- else if (if ((bV != J))
517- then (bV != K)
570+ else if (!(az))
571+ then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
572+ else if (if ((cf != N))
573+ then (cf != O)
518574 else false)
519- then bg()
520- else if ((10000000 > bU))
575+ then bj()
576+ else if ((10000000 > ce))
521577 then throw("Only swap of 10.000000 or more tokens is allowed")
522- else if (if ((ae > fraction(Y, cq, bU)))
578+ else if (if ((ai > fraction(ac, cE, ce)))
523579 then true
524- else (fraction(Y, cp, bU) > af))
580+ else (fraction(ac, cD, ce) > aj))
525581 then throw("Incorrect args and pmt ratio")
526582 else {
527- let cs = if ((bV == J))
528- then K
529- else J
530- let bb = ax(cp, cq, bU, bV)
531- let ct = fraction(bb, V, W)
532- let cu = fraction(bb, (W - U), W)
533- let cv = if ((bV == J))
534- then $Tuple2((P + bU), ((Q - cu) - ct))
535- else $Tuple2(((P - cu) - ct), (Q + bU))
536- let ch = cv._1
537- let ci = cv._2
538- let cl = fraction((ch + ci), ac, (2 * ad))
539- if (if ((cl > ch))
583+ let cG = if ((cf == N))
584+ then O
585+ else N
586+ let bs = aF(cD, cE, ce, cf)
587+ let cH = fraction(bs, Z, aa)
588+ let cI = fraction(bs, (aa - Y), aa)
589+ let cJ = if ((cf == N))
590+ then $Tuple2((T + ce), ((U - cI) - cH))
591+ else $Tuple2(((T - cI) - cH), (U + ce))
592+ let cv = cJ._1
593+ let cw = cJ._2
594+ let cz = fraction((cv + cw), ag, (2 * ah))
595+ if (if ((cz > cv))
540596 then true
541- else (cl > ci))
542- then bh(cl, ch, ci)
543- else if (if (if ((J == E))
544- then (cs == J)
545- else false)
546- then (al >= ch)
547- else false)
548- then bl(cu, an, L)
549- else if (if (if ((K == E))
550- then (cs == K)
551- else false)
552- then (al >= ci)
553- else false)
554- then bl(cu, ao, O)
555- else [IntegerEntry(f, ch), IntegerEntry(g, ci), IntegerEntry(l, av(ch, ci)), ScriptTransfer(bq.caller, cu, cs), ScriptTransfer(C, ct, cs)]
597+ else (cz > cw))
598+ then bk(cz, cv, cw)
599+ else {
600+ let cK = bb(cf)
601+ let ch = cK._1
602+ let ci = cK._2
603+ let cj = cK._3
604+ let cL = bb(cG)
605+ let cM = cL._1
606+ let cN = cL._2
607+ let cO = cL._3
608+ let bS = if (containsElement(H, ch))
609+ then invoke(this, "stakeUnstake", [true, ce, ch], nil)
610+ else 0
611+ if ((bS == bS))
612+ then {
613+ let bT = if (containsElement(H, cM))
614+ then invoke(this, "stakeUnstake", [false, (cI + cH), cM], nil)
615+ else 0
616+ if ((bT == bT))
617+ then [IntegerEntry(f, cv), IntegerEntry(g, cw), IntegerEntry(l, aD(cv, cw)), ScriptTransfer(as.caller, cI, cG), ScriptTransfer(E, cH, cG)]
618+ else throw("Strict value is not equal to itself.")
619+ }
620+ else throw("Strict value is not equal to itself.")
621+ }
556622 }
557623 }
558624
559625
560626
561-@Callable(bq)
562-func shutdown () = if (!(G))
627+@Callable(as)
628+func shutdown () = if (!(K))
563629 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
564- else if (!(containsElement([x, y, z, A], bq.callerPublicKey)))
565- then bf()
566- else aY("Paused by admin")
630+ else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
631+ then bi()
632+ else be("Paused by admin")
567633
568634
569635
570-@Callable(bq)
571-func activate () = if (G)
572- then bd()
573- else if (!(containsElement([x, y, z, A], bq.callerPublicKey)))
574- then bf()
636+@Callable(as)
637+func activate () = if (K)
638+ then bg()
639+ else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
640+ then bi()
575641 else [BooleanEntry(c, true), DeleteEntry(m)]
576642
577643
578644
579-@Callable(bq)
580-func takeIntoAccountExtraFunds (cw) = {
581- let cx = (ap - P)
582- let cy = (aq - Q)
583- let cz = (cx - (if ((J == unit))
584- then cw
585- else 0))
586- let cA = (cy - (if ((K == unit))
587- then cw
588- else 0))
589- let aE = av((P + cz), (Q + cA))
590- if (!(G))
591- then be()
592- else if ((bq.caller != this))
593- then bf()
594- else if ((0 > cw))
595- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cw)))
596- else if (if ((0 > cx))
597- then true
598- else (0 > cy))
599- then aY("Enroll amount negative")
600- else if (if ((0 > cz))
601- then true
602- else (0 > cA))
603- then throw("Too large amountLeave")
604- else [IntegerEntry(l, aE), IntegerEntry(f, (P + cz)), IntegerEntry(g, (Q + cA)), IntegerEntry(("last_income_" + H), cz), IntegerEntry(("last_income_" + I), cA)]
645+@Callable(as)
646+func takeIntoAccountExtraFunds () = {
647+ let cP = (ax - T)
648+ let cQ = (ay - U)
649+ let aM = aD((T + cP), (U + cQ))
650+ if (!(K))
651+ then bh()
652+ else if ((as.caller != E))
653+ then throw("Only the wallet can call this function")
654+ else if (if ((0 > cP))
655+ then true
656+ else (0 > cQ))
657+ then be("Enroll amount negative")
658+ else if (if ((cP == 0))
659+ then (cQ == 0)
660+ else false)
661+ then throw("No money to take")
662+ else {
663+ let bS = if (if (containsElement(H, L))
664+ then (cP > 0)
665+ else false)
666+ then invoke(this, "stakeUnstake", [true, cP, L], nil)
667+ else 0
668+ if ((bS == bS))
669+ then {
670+ let bT = if (if (containsElement(H, M))
671+ then (cQ > 0)
672+ else false)
673+ then invoke(this, "stakeUnstake", [true, cQ, M], nil)
674+ else 0
675+ if ((bT == bT))
676+ then [IntegerEntry(l, aM), IntegerEntry(f, (T + cP)), IntegerEntry(g, (U + cQ)), IntegerEntry(("last_income_" + L), cP), IntegerEntry(("last_income_" + M), cQ)]
677+ else throw("Strict value is not equal to itself.")
678+ }
679+ else throw("Strict value is not equal to itself.")
680+ }
605681 }
606682
607683
608-@Verifier(cB)
609-func cC () = {
610- let u = cB
611- if ($isInstanceOf(u, "InvokeScriptTransaction"))
684+
685+@Callable(as)
686+func stakeUnstake (bq,bs,cR) = if ((as.caller != this))
687+ then throw("Only contract itself can invoke this function")
688+ else {
689+ let cS = br(bq, bs, fromBase58String(cR))
690+ let bu = cS._1
691+ let cT = cS._2
692+ let cU = cS._3
693+ let cV = cS._4
694+ let cW = invoke(cT, bu, cU, cV)
695+ if ((cW == cW))
696+ then nil
697+ else throw("Strict value is not equal to itself.")
698+ }
699+
700+
701+
702+@Callable(as)
703+func stakeAll () = if (!(K))
704+ then throw("DApp is inactive at this moment")
705+ else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
706+ then throw("Only admin can call this function")
707+ else {
708+ let bS = if (containsElement(H, L))
709+ then {
710+ let bm = (T - at)
711+ if ((bm > 0))
712+ then invoke(this, "stakeUnstake", [true, bm, L], nil)
713+ else 0
714+ }
715+ else 0
716+ if ((bS == bS))
717+ then {
718+ let bT = if (containsElement(H, M))
719+ then {
720+ let bn = (U - au)
721+ if ((bn > 0))
722+ then invoke(this, "stakeUnstake", [true, bn, M], nil)
723+ else 0
724+ }
725+ else 0
726+ if ((bT == bT))
727+ then nil
728+ else throw("Strict value is not equal to itself.")
729+ }
730+ else throw("Strict value is not equal to itself.")
731+ }
732+
733+
734+@Verifier(cX)
735+func cY () = {
736+ let cZ = {
737+ let da = if (sigVerify(cX.bodyBytes, cX.proofs[0], z))
738+ then 1
739+ else 0
740+ let db = if (sigVerify(cX.bodyBytes, cX.proofs[1], A))
741+ then 1
742+ else 0
743+ let dc = if (sigVerify(cX.bodyBytes, cX.proofs[2], B))
744+ then 1
745+ else 0
746+ (((da + db) + dc) >= 2)
747+ }
748+ let w = cX
749+ if ($isInstanceOf(w, "InvokeScriptTransaction"))
612750 then {
613- let cD = u
614- let cE = if ((cD.dApp == this))
615- then (cD.function == "takeIntoAccountExtraFunds")
751+ let cW = w
752+ let dd = if ((cW.dApp == this))
753+ then (cW.function == "takeIntoAccountExtraFunds")
616754 else false
617- let cF = if ((cD.dApp == D))
618- then if (if (if ((cD.function == "lockNeutrino"))
619- then (size(cD.payments) == 1)
620- else false)
621- then (cD.payments[0].assetId == E)
622- else false)
623- then true
624- else if ((cD.function == "unlockNeutrino"))
625- then (size(cD.payments) == 0)
626- else false
627- else false
628- let cG = if (if (if ((cD.dApp == q))
629- then (cD.function == "exchange")
630- else false)
631- then (J == E)
755+ let de = if (if (if (sigVerify(cX.bodyBytes, cX.proofs[0], z))
756+ then true
757+ else sigVerify(cX.bodyBytes, cX.proofs[0], A))
758+ then true
759+ else sigVerify(cX.bodyBytes, cX.proofs[0], B))
760+ then true
761+ else sigVerify(cX.bodyBytes, cX.proofs[0], D)
762+ if (if (dd)
763+ then de
632764 else false)
633765 then true
634- else if (if ((K == E))
635- then (size(cD.payments) == 1)
636- else false)
637- then (cD.payments[0].assetId == E)
638- else false
639- let cH = if (if (if (sigVerify(cB.bodyBytes, cB.proofs[0], x))
640- then true
641- else sigVerify(cB.bodyBytes, cB.proofs[0], y))
642- then true
643- else sigVerify(cB.bodyBytes, cB.proofs[0], z))
644- then true
645- else sigVerify(cB.bodyBytes, cB.proofs[0], B)
646- if (if (if (cE)
647- then true
648- else cF)
649- then true
650- else cG)
651- then cH
652- else false
766+ else cZ
653767 }
654- else {
655- let cI = if (sigVerify(cB.bodyBytes, cB.proofs[0], x))
656- then 1
657- else 0
658- let cJ = if (sigVerify(cB.bodyBytes, cB.proofs[1], y))
659- then 1
660- else 0
661- let cK = if (sigVerify(cB.bodyBytes, cB.proofs[2], z))
662- then 1
663- else 0
664- (((cI + cJ) + cK) >= 2)
665- }
768+ else cZ
666769 }
667770

github/deemru/w8io/3ef1775 
159.61 ms