tx · 48G5A1xEfH6mzVunUDqUEPxhyV7TU9Xi5hHirRiDoR7s 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT: -0.01400000 Waves 2021.12.25 14:05 [1849712] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves
{ "type": 13, "id": "48G5A1xEfH6mzVunUDqUEPxhyV7TU9Xi5hHirRiDoR7s", "fee": 1400000, "feeAssetId": null, "timestamp": 1640430322861, "version": 1, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "51pcLThWwkuK9RK75NNn7gBpkYWi3YpmjrHfFQ1VpEhXYVWnvnuwmTLWn3dJb6VFpPUhfWFTB6HSuwkVFBxsmTXy" ], "script": "base64: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b3J5Q29uZmlnAQAAAA1rZXlNYXRjaGVyUHViAAAAAAIAAAAYJXMlc19fbWF0Y2hlcl9fcHVibGljS2V5AQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAAAlpQW10QXNzZXQAAAALaVByaWNlQXNzZXQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJWQlZCVzX18FAAAACWlBbXRBc3NldAIAAAACX18FAAAAC2lQcmljZUFzc2V0AgAAAAhfX2NvbmZpZwEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEAAAAMYmFzZUFzc2V0U3RyCQABLAAAAAICAAAAKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAAAADGJhc2VBc3NldFN0cgEAAAATa2V5QWxsUG9vbHNTaHV0ZG93bgAAAAACAAAADCVzX19zaHV0ZG93bgEAAAANa2V5UG9vbFdlaWdodAAAAAEAAAAPY29udHJhY3RBZGRyZXNzCQABLAAAAAICAAAAEiVzJXNfX3Bvb2xXZWlnaHRfXwUAAAAPY29udHJhY3RBZGRyZXNzAQAAAA90aHJvd09yZGVyRXJyb3IAAAADAAAACm9yZGVyVmFsaWQAAAALc2VuZGVyVmFsaWQAAAAMbWF0Y2hlclZhbGlkCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB5WYWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAAGlAAAAAQUAAAAKb3JkZXJWYWxpZAIAAAANIHNlbmRlclZhbGlkPQkAAaUAAAABBQAAAAtzZW5kZXJWYWxpZAIAAAAOIG1hdGNoZXJWYWxpZD0JAAGlAAAAAQUAAAAMbWF0Y2hlclZhbGlkAQAAAAhhc1N0cmluZwAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAGdmFsU3RyBQAAAAckbWF0Y2gwBQAAAAZ2YWxTdHIJAAACAAAAAQIAAAATZmFpbCBjYXN0IHRvIFN0cmluZwEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkABLkAAAACCQAETAAAAAICAAAACm1hbmRhdG9yeSAJAARMAAAAAgkABCUAAAABBQAAAAdhZGRyZXNzCQAETAAAAAICAAAAAS4JAARMAAAAAgUAAAADa2V5CQAETAAAAAICAAAADyBpcyBub3QgZGVmaW5lZAUAAAADbmlsAgAAAAABAAAADGdldEludE9yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAHYWRkcmVzcwkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAA8gaXMgbm90IGRlZmluZWQFAAAAA25pbAIAAAAAAAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAALa2V5RmFjdENudHIAAAAAAQAAABBpc0dsb2JhbFNodXRkb3duAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABNrZXlBbGxQb29sc1NodXRkb3duAAAAAAcBAAAAE2dldE1hdGNoZXJQdWJPckZhaWwAAAAACQACWQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAA1rZXlNYXRjaGVyUHViAAAAAAEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAABWFtdEFzCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAC2tleUFtdEFzc2V0AAAAAAQAAAAHcHJpY2VBcwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAAA1rZXlQcmljZUFzc2V0AAAAAAQAAAAIaVByaWNlQXMJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAHcHJpY2VBcwQAAAAGaUFtdEFzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAABWFtdEFzCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAAAZpQW10QXMJAAGkAAAAAQUAAAAIaVByaWNlQXMFAAAAA1NFUAEAAAAQZ2V0RmFjdG9yeUNvbmZpZwAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVABAAAAEWRhdGFQdXRBY3Rpb25JbmZvAAAACgAAAA1pbkFtdEFzc2V0QW10AAAAD2luUHJpY2VBc3NldEFtdAAAAAhvdXRMcEFtdAAAAAVwcmljZQAAAA5zbGlwcGFnZUJ5VXNlcgAAAAxzbGlwcGFnZVJlYWwAAAAIdHhIZWlnaHQAAAALdHhUaW1lc3RhbXAAAAAMc2xpcGFnZUFtQW10AAAADHNsaXBhZ2VQckFtdAkABLkAAAACCQAETAAAAAICAAAAFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAANaW5BbXRBc3NldEFtdAkABEwAAAACCQABpAAAAAEFAAAAD2luUHJpY2VBc3NldEFtdAkABEwAAAACCQABpAAAAAEFAAAACG91dExwQW10CQAETAAAAAIJAAGkAAAAAQUAAAAFcHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAA5zbGlwcGFnZUJ5VXNlcgkABEwAAAACCQABpAAAAAEFAAAADHNsaXBwYWdlUmVhbAkABEwAAAACCQABpAAAAAEFAAAACHR4SGVpZ2h0CQAETAAAAAIJAAGkAAAAAQUAAAALdHhUaW1lc3RhbXAJAARMAAAAAgkAAaQAAAABBQAAAAxzbGlwYWdlQW1BbXQJAARMAAAAAgkAAaQAAAABBQAAAAxzbGlwYWdlUHJBbXQFAAAAA25pbAUAAAADU0VQAQAAABFkYXRhR2V0QWN0aW9uSW5mbwAAAAYAAAAOb3V0QW10QXNzZXRBbXQAAAAQb3V0UHJpY2VBc3NldEFtdAAAAAdpbkxwQW10AAAABXByaWNlAAAACHR4SGVpZ2h0AAAAC3R4VGltZXN0YW1wCQAEuQAAAAIJAARMAAAAAgIAAAAMJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAOb3V0QW10QXNzZXRBbXQJAARMAAAAAgkAAaQAAAABBQAAABBvdXRQcmljZUFzc2V0QW10CQAETAAAAAIJAAGkAAAAAQUAAAAHaW5McEFtdAkABEwAAAACCQABpAAAAAEFAAAABXByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAIdHhIZWlnaHQJAARMAAAAAgkAAaQAAAABBQAAAAt0eFRpbWVzdGFtcAUAAAADbmlsBQAAAANTRVABAAAADWdldEFjY0JhbGFuY2UAAAABAAAAB2Fzc2V0SWQDCQAAAAAAAAIFAAAAB2Fzc2V0SWQCAAAABVdBVkVTCAkAA+8AAAABBQAAAAR0aGlzAAAACWF2YWlsYWJsZQkAA/AAAAACBQAAAAR0aGlzCQACWQAAAAEFAAAAB2Fzc2V0SWQBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAIAAAAIcHJBbXRYMTgAAAAIYW1BbXRYMTgJAAE8AAAAAwUAAAAIcHJBbXRYMTgFAAAAB3NjYWxlMTgFAAAACGFtQW10WDE4AQAAAAtjYWxjQWJzRGlmZgAAAAMAAAAHcmVhbEFtdAAAAAtleHBlY3RlZEFtdAAAAAhzbGlwcGFnZQQAAAAEZGlmZgkAATwAAAADCQABOAAAAAIFAAAAB3JlYWxBbXQFAAAAC2V4cGVjdGVkQW10BQAAAAxzY2FsZThCaWdJbnQFAAAAC2V4cGVjdGVkQW10CQAFFQAAAAMJAAE/AAAAAgkAATgAAAACBQAAAAhzbGlwcGFnZQkBAAAAA2FicwAAAAEFAAAABGRpZmYFAAAACnplcm9CaWdJbnQJAAGZAAAAAQkABEwAAAACBQAAAAdyZWFsQW10CQAETAAAAAIFAAAAC2V4cGVjdGVkQW10BQAAAANuaWwFAAAABGRpZmYBAAAAEHByaXZhdGVDYWxjUHJpY2UAAAAEAAAACmFtQXNzZXREY20AAAAKcHJBc3NldERjbQAAAAVhbUFtdAAAAAVwckFtdAQAAAALYW10QXNBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAABWFtQW10BQAAAAphbUFzc2V0RGNtBAAAAApwckFzQW10WDE4CQEAAAAFdG9YMTgAAAACBQAAAAVwckFtdAUAAAAKcHJBc3NldERjbQkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAIFAAAACnByQXNBbXRYMTgFAAAAC2FtdEFzQW10WDE4AQAAAApjYWxjUHJpY2VzAAAAAwAAAAVhbUFtdAAAAAVwckFtdAAAAAVscEFtdAQAAAADY2ZnCQEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAACGFtdEFzRGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAAAtpZHhBbXRBc0RjbQQAAAAHcHJBc0RjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAANaWR4UHJpY2VBc0RjbQQAAAAIcHJpY2VYMTgJAQAAABBwcml2YXRlQ2FsY1ByaWNlAAAABAUAAAAIYW10QXNEY20FAAAAB3ByQXNEY20FAAAABWFtQW10BQAAAAVwckFtdAQAAAAIYW1BbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAABWFtQW10BQAAAAhhbXRBc0RjbQQAAAAIcHJBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAABXByQW10BQAAAAdwckFzRGNtBAAAAAhscEFtdFgxOAkBAAAABXRvWDE4AAAAAgUAAAAFbHBBbXQFAAAABnNjYWxlOAQAAAANbHBQckluQW1Bc1gxOAkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAIFAAAACGFtQW10WDE4BQAAAAhscEFtdFgxOAQAAAANbHBQckluUHJBc1gxOAkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAIFAAAACHByQW10WDE4BQAAAAhscEFtdFgxOAkABEwAAAACBQAAAAhwcmljZVgxOAkABEwAAAACBQAAAA1scFBySW5BbUFzWDE4CQAETAAAAAIFAAAADWxwUHJJblByQXNYMTgFAAAAA25pbAEAAAAPY2FsY3VsYXRlUHJpY2VzAAAAAwAAAAVhbUFtdAAAAAVwckFtdAAAAAVscEFtdAQAAAAGcHJpY2VzCQEAAAAKY2FsY1ByaWNlcwAAAAMFAAAABWFtQW10BQAAAAVwckFtdAUAAAAFbHBBbXQJAARMAAAAAgkBAAAAB2Zyb21YMTgAAAACCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAAAAUAAAAGc2NhbGU4CQAETAAAAAIJAQAAAAdmcm9tWDE4AAAAAgkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAEFAAAABnNjYWxlOAkABEwAAAACCQEAAAAHZnJvbVgxOAAAAAIJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAACBQAAAAZzY2FsZTgFAAAAA25pbAEAAAAUZXN0aW1hdGVHZXRPcGVyYXRpb24AAAAEAAAABnR4SWQ1OAAAAApwbXRBc3NldElkAAAACHBtdExwQW10AAAAC3VzZXJBZGRyZXNzBAAAAANjZmcJAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAEbHBJZAkAAZEAAAACBQAAAANjZmcFAAAACWlkeExQQXNJZAQAAAAEYW1JZAkAAZEAAAACBQAAAANjZmcFAAAACWlkeEFtQXNJZAQAAAAEcHJJZAkAAZEAAAACBQAAAANjZmcFAAAACWlkeFByQXNJZAQAAAAFYW1EY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAAC2lkeEFtdEFzRGNtBAAAAAVwckRjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAANaWR4UHJpY2VBc0RjbQQAAAAKcG9vbFN0YXR1cwkAAZEAAAACBQAAAANjZmcFAAAADWlkeFBvb2xTdGF0dXMEAAAACmxwRW1pc3Npb24ICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAARscElkAgAAAA1JbnZhbGlkIExQIGlkAAAACHF1YW50aXR5AwkBAAAAAiE9AAAAAgUAAAAEbHBJZAUAAAAKcG10QXNzZXRJZAkAAAIAAAABAgAAABFJbnZhbGlkIHBtdCBhc3NldAQAAAAJYW1CYWxhbmNlCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAABGFtSWQEAAAADGFtQmFsYW5jZVgxOAkBAAAABXRvWDE4AAAAAgUAAAAJYW1CYWxhbmNlBQAAAAVhbURjbQQAAAAJcHJCYWxhbmNlCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAABHBySWQEAAAADHByQmFsYW5jZVgxOAkBAAAABXRvWDE4AAAAAgUAAAAJcHJCYWxhbmNlBQAAAAVwckRjbQQAAAALY3VyUHJpY2VYMTgJAQAAAA9jYWxjUHJpY2VCaWdJbnQAAAACBQAAAAxwckJhbGFuY2VYMTgFAAAADGFtQmFsYW5jZVgxOAQAAAAIY3VyUHJpY2UJAQAAAAdmcm9tWDE4AAAAAgUAAAALY3VyUHJpY2VYMTgFAAAABnNjYWxlOAQAAAALcG10THBBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAACHBtdExwQW10BQAAAAZzY2FsZTgEAAAADWxwRW1pc3Npb25YMTgJAQAAAAV0b1gxOAAAAAIFAAAACmxwRW1pc3Npb24FAAAABnNjYWxlOAQAAAALb3V0QW1BbXRYMTgJAAE8AAAAAwUAAAAMYW1CYWxhbmNlWDE4BQAAAAtwbXRMcEFtdFgxOAUAAAANbHBFbWlzc2lvblgxOAQAAAALb3V0UHJBbXRYMTgJAAE8AAAAAwUAAAAMcHJCYWxhbmNlWDE4BQAAAAtwbXRMcEFtdFgxOAUAAAANbHBFbWlzc2lvblgxOAQAAAAIb3V0QW1BbXQJAQAAAAdmcm9tWDE4AAAAAgUAAAALb3V0QW1BbXRYMTgFAAAABWFtRGNtBAAAAAhvdXRQckFtdAkBAAAAB2Zyb21YMTgAAAACBQAAAAtvdXRQckFtdFgxOAUAAAAFcHJEY20EAAAABXN0YXRlAwkAAAAAAAACBQAAAAZ0eElkNTgCAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAAAhvdXRBbUFtdAMJAAAAAAAAAgUAAAAEYW1JZAIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAAEYW1JZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAt1c2VyQWRkcmVzcwUAAAAIb3V0UHJBbXQDCQAAAAAAAAIFAAAABHBySWQCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAABHBySWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUdldEFjdGlvbkJ5VXNlcgAAAAIJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MFAAAABnR4SWQ1OAkBAAAAEWRhdGFHZXRBY3Rpb25JbmZvAAAABgUAAAAIb3V0QW1BbXQFAAAACG91dFByQW10BQAAAAhwbXRMcEFtdAUAAAAIY3VyUHJpY2UFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlQcmljZUxhc3QAAAAABQAAAAhjdXJQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAIFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAACGN1clByaWNlBQAAAANuaWwJAAUcAAAACgUAAAAIb3V0QW1BbXQFAAAACG91dFByQW10BQAAAARhbUlkBQAAAARwcklkBQAAAAlhbUJhbGFuY2UFAAAACXByQmFsYW5jZQUAAAAKbHBFbWlzc2lvbgUAAAALY3VyUHJpY2VYMTgFAAAACnBvb2xTdGF0dXMFAAAABXN0YXRlAQAAABRlc3RpbWF0ZVB1dE9wZXJhdGlvbgAAAAwAAAAGdHhJZDU4AAAACHNsaXBwYWdlAAAAB2luQW1BbXQAAAAGaW5BbUlkAAAAB2luUHJBbXQAAAAGaW5QcklkAAAAC3VzZXJBZGRyZXNzAAAACmlzRXZhbHVhdGUAAAAGZW1pdExwAAAACmlzT25lQXNzZXQAAAAGcG10QW10AAAABXBtdElkBAAAAANjZmcJAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAEbHBJZAkAAlkAAAABCQABkQAAAAIFAAAAA2NmZwUAAAAJaWR4TFBBc0lk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AQAAAAdmcm9tWDE4AAAAAgUAAAAIbHBBbXRYMTgFAAAABnNjYWxlOAkBAAAAB2Zyb21YMTgAAAACBQAAAA9pbkFtQXNzZXRBbXRYMTgFAAAABmFtdERjbQkBAAAAB2Zyb21YMTgAAAACBQAAAA9pblByQXNzZXRBbXRYMTgFAAAACHByaWNlRGNtCQEAAAAPY2FsY1ByaWNlQmlnSW50AAAAAgkAATcAAAACBQAAAAxwckJhbGFuY2VYMTgFAAAAD2luUHJBc3NldEFtdFgxOAkAATcAAAACBQAAAAxhbUJhbGFuY2VYMTgFAAAAD2luQW1Bc3NldEFtdFgxOAUAAAALc2xpcHBhZ2VYMTgEAAAAC2N1clByaWNlWDE4CQEAAAAPY2FsY1ByaWNlQmlnSW50AAAAAgUAAAAMcHJCYWxhbmNlWDE4BQAAAAxhbUJhbGFuY2VYMTgEAAAAD3NsaXBwYWdlUmVhbFgxOAkAATwAAAADCQEAAAADYWJzAAAAAQkAATgAAAACBQAAAAtjdXJQcmljZVgxOAUAAAAMdXNlclByaWNlWDE4BQAAAAdzY2FsZTE4BQAAAAtjdXJQcmljZVgxOAQAAAALc2xpcHBhZ2VYMTgJAQAAAAV0b1gxOAAAAAIFAAAACHNsaXBwYWdlBQAAAAZzY2FsZTgDAwkBAAAAAiE9AAAAAgUAAAALY3VyUHJpY2VYMTgFAAAACnplcm9CaWdJbnQJAAE/AAAAAgUAAAAPc2xpcHBhZ2VSZWFsWDE4BQAAAAtzbGlwcGFnZVgxOAcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAPUHJpY2Ugc2xpcHBhZ2UgCQABpgAAAAEFAAAAD3NsaXBwYWdlUmVhbFgxOAIAAAAKIGV4Y2VlZGVkIAkAAaYAAAABBQAAAAtzbGlwcGFnZVgxOAQAAAANbHBFbWlzc2lvblgxOAkBAAAABXRvWDE4AAAAAgUAAAAKbHBFbWlzc2lvbgUAAAAGc2NhbGU4BAAAAApwclZpYUFtWDE4CQABPAAAAAMFAAAAD2luQW1Bc3NldEFtdFgxOAUAAAALY3VyUHJpY2VYMTgFAAAAB3NjYWxlMTgEAAAACmFtVmlhUHJYMTgJAAE8AAAAAwUAAAAPaW5QckFzc2V0QW10WDE4BQAAAAdzY2FsZTE4BQAAAAtjdXJQcmljZVgxOAQAAAAMZXhwZWN0ZWRBbXRzAwkAAT8AAAACBQAAAApwclZpYUFtWDE4BQAAAA9pblByQXNzZXRBbXRYMTgJAAUUAAAAAgUAAAAKYW1WaWFQclgxOAUAAAAPaW5QckFzc2V0QW10WDE4CQAFFAAAAAIFAAAAD2luQW1Bc3NldEFtdFgxOAUAAAAKcHJWaWFBbVgxOAQAAAARZXhwQW10QXNzZXRBbXRYMTgIBQAAAAxleHBlY3RlZEFtdHMAAAACXzEEAAAAE2V4cFByaWNlQXNzZXRBbXRYMTgIBQAAAAxleHBlY3RlZEFtdHMAAAACXzIEAAAACGxwQW10WDE4CQABPAAAAAMFAAAADWxwRW1pc3Npb25YMTgFAAAAE2V4cFByaWNlQXNzZXRBbXRYMTgFAAAADHByQmFsYW5jZVgxOAkABRcAAAAFCQEAAAAHZnJvbVgxOAAAAAIFAAAACGxwQW10WDE4BQAAAAZzY2FsZTgJAQAAAAdmcm9tWDE4AAAAAgUAAAARZXhwQW10QXNzZXRBbXRYMTgFAAAABmFtdERjbQkBAAAAB2Zyb21YMTgAAAACBQAAABNleHBQcmljZUFzc2V0QW10WDE4BQAAAAhwcmljZURjbQUAAAALY3VyUHJpY2VYMTgFAAAAC3NsaXBwYWdlWDE4BAAAAAljYWxjTHBBbXQIBQAAAANyZXMAAAACXzEEAAAADmNhbGNBbUFzc2V0UG10CAUAAAADcmVzAAAAAl8yBAAAAA5jYWxjUHJBc3NldFBtdAgFAAAAA3JlcwAAAAJfMwQAAAAIY3VyUHJpY2UJAQAAAAdmcm9tWDE4AAAAAggFAAAAA3JlcwAAAAJfNAUAAAAGc2NhbGU4BAAAAAxzbGlwcGFnZUNhbGMJAQAAAAdmcm9tWDE4AAAAAggFAAAAA3JlcwAAAAJfNQUAAAAGc2NhbGU4AwkAAGcAAAACAAAAAAAAAAAABQAAAAljYWxjTHBBbXQJAAACAAAAAQIAAAAHTFAgPD0gMAQAAAAJZW1pdExwQW10AwkBAAAAASEAAAABBQAAAAZlbWl0THAAAAAAAAAAAAAFAAAACWNhbGNMcEFtdAQAAAAGYW1EaWZmCQAAZQAAAAIFAAAAB2luQW1BbXQFAAAADmNhbGNBbUFzc2V0UG10BAAAAAZwckRpZmYJAABlAAAAAgUAAAAHaW5QckFtdAUAAAAOY2FsY1ByQXNzZXRQbXQEAAAAC2NvbW1vblN0YXRlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAMa2V5UHJpY2VMYXN0AAAAAAUAAAAIY3VyUHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlQcmljZUhpc3RvcnkAAAACBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAAhjdXJQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5UHV0QWN0aW9uQnlVc2VyAAAAAgUAAAALdXNlckFkZHJlc3MFAAAABnR4SWQ1OAkBAAAAEWRhdGFQdXRBY3Rpb25JbmZvAAAACgUAAAAOY2FsY0FtQXNzZXRQbXQFAAAADmNhbGNQckFzc2V0UG10BQAAAAllbWl0THBBbXQFAAAACGN1clByaWNlBQAAAAhzbGlwcGFnZQUAAAAMc2xpcHBhZ2VDYWxjBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAAZhbURpZmYFAAAABnByRGlmZgUAAAADbmlsCQAFHwAAAA0FAAAACWNhbGNMcEFtdAUAAAAJZW1pdExwQW10BQAAAAhjdXJQcmljZQUAAAAJYW1CYWxhbmNlBQAAAAlwckJhbGFuY2UFAAAACmxwRW1pc3Npb24FAAAABGxwSWQFAAAACnBvb2xTdGF0dXMFAAAAC2NvbW1vblN0YXRlBQAAAAZhbURpZmYFAAAABnByRGlmZgUAAAAGaW5BbUlkBQAAAAZpblBySWQBAAAAG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZAAAAAEAAAAFb3JkZXIEAAAAA2NmZwkBAAAADWdldFBvb2xDb25maWcAAAAABAAAAAdhbXRBc0lkCQABkQAAAAIFAAAAA2NmZwUAAAAJaWR4QW1Bc0lkBAAAAAZwckFzSWQJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhQckFzSWQEAAAACnBvb2xTdGF0dXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAADWlkeFBvb2xTdGF0dXMEAAAACGFtdEFzRGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAAAtpZHhBbXRBc0RjbQQAAAAHcHJBc0RjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAANaWR4UHJpY2VBc0RjbQQAAAAPYWNjQW10QXNCYWxhbmNlCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB2FtdEFzSWQEAAAADmFjY1ByQXNCYWxhbmNlCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAABnByQXNJZAQAAAALY3VyUHJpY2VYMTgDCQAAAAAAAAIIBQAAAAVvcmRlcgAAAAlvcmRlclR5cGUFAAAAA0J1eQkBAAAAEHByaXZhdGVDYWxjUHJpY2UAAAAEBQAAAAhhbXRBc0RjbQUAAAAHcHJBc0RjbQkAAGQAAAACBQAAAA9hY2NBbXRBc0JhbGFuY2UIBQAAAAVvcmRlcgAAAAZhbW91bnQFAAAADmFjY1ByQXNCYWxhbmNlCQEAAAAQcHJpdmF0ZUNhbGNQcmljZQAAAAQFAAAACGFtdEFzRGNtBQAAAAdwckFzRGNtCQAAZQAAAAIFAAAAD2FjY0FtdEFzQmFsYW5jZQgFAAAABW9yZGVyAAAABmFtb3VudAUAAAAOYWNjUHJBc0JhbGFuY2UEAAAACGN1clByaWNlCQEAAAAHZnJvbVgxOAAAAAIFAAAAC2N1clByaWNlWDE4BQAAAAZzY2FsZTgDAwMJAQAAABBpc0dsb2JhbFNodXRkb3duAAAAAAYJAAAAAAAAAgUAAAAKcG9vbFN0YXR1cwUAAAATUG9vbE1hdGNoZXJEaXNhYmxlZAYJAAAAAAAAAgUAAAAKcG9vbFN0YXR1cwUAAAAMUG9vbFNodXRkb3duCQAAAgAAAAECAAAAEEJsb2NrZWQgYnkgYWRtaW4EAAAACm9yQW10QXNzZXQICAUAAAAFb3JkZXIAAAAJYXNzZXRQYWlyAAAAC2Ftb3VudEFzc2V0BAAAAApvckFtdEFzU3RyAwkAAAAAAAACBQAAAApvckFtdEFzc2V0BQAAAAR1bml0AgAAAAVXQVZFUwkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAApvckFtdEFzc2V0BAAAAAlvclByQXNzZXQICAUAAAAFb3JkZXIAAAAJYXNzZXRQYWlyAAAACnByaWNlQXNzZXQEAAAACW9yUHJBc1N0cgMJAAAAAAAAAgUAAAAJb3JQckFzc2V0BQAAAAR1bml0AgAAAAVXQVZFUwkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAlvclByQXNzZXQDAwkBAAAAAiE9AAAAAgUAAAAKb3JBbXRBc1N0cgUAAAAHYW10QXNJZAYJAQAAAAIhPQAAAAIFAAAACW9yUHJBc1N0cgUAAAAGcHJBc0lkCQAAAgAAAAECAAAAEldyb25nIG9yZGVyIGFzc2V0cwQAAAAKb3JkZXJQcmljZQgFAAAABW9yZGVyAAAABXByaWNlBAAAAAhwcmljZURjbQkAAGsAAAADBQAAAAZzY2FsZTgFAAAAB3ByQXNEY20FAAAACGFtdEFzRGNtBAAAAA5jYXN0T3JkZXJQcmljZQkBAAAAB3RvU2NhbGUAAAADBQAAAApvcmRlclByaWNlBQAAAAZzY2FsZTgFAAAACHByaWNlRGNtBAAAABFpc09yZGVyUHJpY2VWYWxpZAMJAAAAAAAAAggFAAAABW9yZGVyAAAACW9yZGVyVHlwZQUAAAADQnV5CQAAZwAAAAIFAAAACGN1clByaWNlBQAAAA5jYXN0T3JkZXJQcmljZQkAAGcAAAACBQAAAA5jYXN0T3JkZXJQcmljZQUAAAAIY3VyUHJpY2UGAQAAAAljb21tb25HZXQAAAABAAAAAWkDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAEjEgcGF5bWVudCBleHBlY3RlZAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAApwbXRBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAABnBtdEFtdAgFAAAAA3BtdAAAAAZhbW91bnQEAAAAA3JlcwkBAAAAFGVzdGltYXRlR2V0T3BlcmF0aW9uAAAABAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQACWAAAAAEFAAAACnBtdEFzc2V0SWQFAAAABnBtdEFtdAgFAAAAAWkAAAAGY2FsbGVyBAAAAAhvdXRBbUFtdAgFAAAAA3JlcwAAAAJfMQQAAAAIb3V0UHJBbXQIBQAAAANyZXMAAAACXzIEAAAACnBvb2xTdGF0dXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQgFAAAAA3JlcwAAAAJfOQQAAAAFc3RhdGUIBQAAAANyZXMAAAADXzEwAwMJAQAAABBpc0dsb2JhbFNodXRkb3duAAAAAAYJAAAAAAAAAgUAAAAKcG9vbFN0YXR1cwUAAAAMUG9vbFNodXRkb3duCQAAAgAAAAEJAAEsAAAAAgIAAAASQmxvY2tlZCBieSBhZG1pbjogCQABpAAAAAEFAAAACnBvb2xTdGF0dXMJAAUXAAAABQUAAAAIb3V0QW1BbXQFAAAACG91dFByQW10BQAAAAZwbXRBbXQFAAAACnBtdEFzc2V0SWQFAAAABXN0YXRlAQAAAAljb21tb25QdXQAAAAJAAAABmNhbGxlcgAAAAR0eElkAAAAB2FtQXNQbXQAAAAHcHJBc1BtdAAAAAhzbGlwcGFnZQAAAAZlbWl0THAAAAAKaXNPbmVBc3NldAAAAAZwbXRBbXQAAAAFcG10SWQEAAAAAXIJAQAAABRlc3RpbWF0ZVB1dE9wZXJhdGlvbgAAAAwFAAAABHR4SWQFAAAACHNsaXBwYWdlCAkBAAAABXZhbHVlAAAAAQUAAAAHYW1Bc1BtdAAAAAZhbW91bnQICQEAAAAFdmFsdWUAAAABBQAAAAdhbUFzUG10AAAAB2Fzc2V0SWQICQEAAAAFdmFsdWUAAAABBQAAAAdwckFzUG10AAAABmFtb3VudAgJAQAAAAV2YWx1ZQAAAAEFAAAAB3ByQXNQbXQAAAAHYXNzZXRJZAUAAAAGY2FsbGVyBwUAAAAGZW1pdExwBQAAAAppc09uZUFzc2V0BQAAAAZwbXRBbXQFAAAABXBtdElkBAAAAAZzdGF0dXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQgFAAAAAXIAAAACXzgDAwMJAQAAABBpc0dsb2JhbFNodXRkb3duAAAAAAYJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAA9Qb29sUHV0RGlzYWJsZWQGCQAAAAAAAAIFAAAABnN0YXR1cwUAAAAMUG9vbFNodXRkb3duCQAAAgAAAAEJAAEsAAAAAgIAAAASQmxvY2tlZCBieSBhZG1pbjogCQABpAAAAAEFAAAABnN0YXR1cwUAAAABcgAAAA8AAAABaQEAAAALY29uc3RydWN0b3IAAAACAAAAD2ZhY3RvcnlDb250cmFjdAAAABBtYW5hZ2VyUHVibGljS2V5AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAALa2V5RmFjdENudHIAAAAABQAAAA9mYWN0b3J5Q29udHJhY3QJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAABQAAABBtYW5hZ2VyUHVibGljS2V5BQAAAANuaWwAAAABaQEAAAADcHV0AAAAAgAAAARzbGlwAAAACWF1dG9TdGFrZQQAAAAHZmFjdENmZwkBAAAAEGdldEZhY3RvcnlDb25maWcAAAAABAAAAAtzdGFraW5nQ250cgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAAGRAAAAAgUAAAAHZmFjdENmZwUAAAAPaWR4RmFjdFN0YWtDbnRyAgAAABZJbmNvcnJlY3Qgc3Rha2luZyBhZGRyBAAAAAhzbGlwQ250cgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAAGRAAAAAgUAAAAHZmFjdENmZwUAAAAQaWR4RmFjdFNsaXBwQ250cgIAAAAXSW5jb3JyZWN0IHNsaXBwYWdlIGFkZHIDCQAAZgAAAAIAAAAAAAAAAAAFAAAABHNsaXAJAAACAAAAAQIAAAARSW52YWxpZCBzbGlwcGFnZS4DCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAEzIgcGF5bWVudHMgZXhwZWN0ZWQEAAAABmVzdFB1dAkBAAAACWNvbW1vblB1dAAAAAkJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACCAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkCAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEFAAAABHNsaXAGBwAAAAAAAAAAAAIAAAAABAAAAAllbWl0THBBbXQIBQAAAAZlc3RQdXQAAAACXzIEAAAACWxwQXNzZXRJZAgFAAAABmVzdFB1dAAAAAJfNwQAAAAFc3RhdGUIBQAAAAZlc3RQdXQAAAACXzkEAAAABmFtRGlmZggFAAAABmVzdFB1dAAAAANfMTAEAAAABnByRGlmZggFAAAABmVzdFB1dAAAAANfMTEEAAAABGFtSWQIBQAAAAZlc3RQdXQAAAADXzEyBAAAAARwcklkCAUAAAAGZXN0UHV0AAAAA18xMwQAAAAHZW1pdEludgkAA/wAAAAEBQAAAA9mYWN0b3J5Q29udHJhY3QCAAAABGVtaXQJAARMAAAAAgUAAAAJZW1pdExwQW10BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAHZW1pdEludgUAAAAHZW1pdEludgQAAAAMc2xpcHBhZ2VBSW52AwkAAGYAAAACBQAAAAZhbURpZmYAAAAAAAAAAAAJAAP8AAAABAUAAAAIc2xpcENudHICAAAAA3B1dAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAARhbUlkBQAAAAZhbURpZmYFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAxzbGlwcGFnZUFJbnYFAAAADHNsaXBwYWdlQUludgQAAAAMc2xpcHBhZ2VQSW52AwkAAGYAAAACBQAAAAZwckRpZmYAAAAAAAAAAAAJAAP8AAAABAUAAAAIc2xpcENudHICAAAAA3B1dAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAARwcklkBQAAAAZwckRpZmYFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAxzbGlwcGFnZVBJbnYFAAAADHNsaXBwYWdlUEludgQAAAAIbHBUcm5zZnIDBQAAAAlhdXRvU3Rha2UEAAAAC3NscFN0YWtlSW52CQAD/AAAAAQFAAAAC3N0YWtpbmdDbnRyAgAAAAVzdGFrZQUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAlscEFzc2V0SWQFAAAACWVtaXRMcEFtdAUAAAADbmlsAwkAAAAAAAACBQAAAAtzbHBTdGFrZUludgUAAAALc2xwU3Rha2VJbnYFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAllbWl0THBBbXQFAAAACWxwQXNzZXRJZAUAAAADbmlsCQAETgAAAAIFAAAABXN0YXRlBQAAAAhscFRybnNmcgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAlwdXRPbmVUa24AAAAFAAAAC2luQW10QW1vdW50AAAACmluUHJBbW91bnQAAAAFb3V0THAAAAAIc2xpcHBhZ2UAAAAJYXV0b1N0YWtlBAAAAANjZmcJAQAAABBnZXRGYWN0b3J5Q29uZmlnAAAAAAQAAAALc3Rha2luZ0NudHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQABkQAAAAIFAAAAA2NmZwUAAAAPaWR4RmFjdFN0YWtDbnRyAgAAABJXcm9uZyBzdGFraW5nIGFkZHIEAAAACHNsaXBDbnRyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkAAZEAAAACBQAAAANjZmcFAAAAEGlkeEZhY3RTbGlwcENudHICAAAAE1dyb25nIHNsaXBwYWdl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b3JpZ1NjYWxlTXVsdAAAAAFpAQAAAB5jYWxjUHJpY2VCaWdJbnRXcmFwcGVyUkVBRE9OTFkAAAACAAAACHByQW10WDE4AAAACGFtQW10WDE4CQAFFAAAAAIFAAAAA25pbAkAAaYAAAABCQEAAAAPY2FsY1ByaWNlQmlnSW50AAAAAgkAAacAAAABBQAAAAhwckFtdFgxOAkAAacAAAABBQAAAAhhbUFtdFgxOAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVPcmRlcgQAAAAFb3JkZXIFAAAAByRtYXRjaDAEAAAACm1hdGNoZXJQdWIJAQAAABNnZXRNYXRjaGVyUHViT3JGYWlsAAAAAAQAAAAKb3JkZXJWYWxpZAkBAAAAG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZAAAAAEFAAAABW9yZGVyBAAAAAtzZW5kZXJWYWxpZAkAAfQAAAADCAUAAAAFb3JkZXIAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAVvcmRlcgAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAVvcmRlcgAAAA9zZW5kZXJQdWJsaWNLZXkEAAAADG1hdGNoZXJWYWxpZAkAAfQAAAADCAUAAAAFb3JkZXIAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAVvcmRlcgAAAAZwcm9vZnMAAAAAAAAAAAEFAAAACm1hdGNoZXJQdWIDAwMFAAAACm9yZGVyVmFsaWQFAAAAC3NlbmRlclZhbGlkBwUAAAAMbWF0Y2hlclZhbGlkBwYJAQAAAA90aHJvd09yZGVyRXJyb3IAAAADBQAAAApvcmRlclZhbGlkBQAAAAtzZW5kZXJWYWxpZAUAAAAMbWF0Y2hlclZhbGlkBAAAAA1tYW5hZ2VyUHVibGljCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAFRU1QVFkDCQAAAAAAAAIFAAAADW1hbmFnZXJQdWJsaWMFAAAABUVNUFRZCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAAJZAAAAAQUAAAANbWFuYWdlclB1YmxpY1myl8M=", "chainId": 84, "height": 1849712, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HHC5SLqKu2qc7FqHQEzrn238VJJWGwMKeA8zAioMA9C3 Next: 4Y3tLEzZoPpu2Dnzt1oAvGKV5XKKQHsgwHZai1Ac61bR Diff:
Old | New | Differences | |
---|---|---|---|
230 | 230 | } | |
231 | 231 | ||
232 | 232 | ||
233 | - | func bP (bs,aX,bQ,bR,bS,bT,R,bU,bV) = { | |
233 | + | func bP (bs,aX,bQ,bR,bS,bT,R,bU,bV,bW,bX,bY) = { | |
234 | 234 | let bi = au() | |
235 | 235 | let bv = fromBase58String(bi[p]) | |
236 | - | let | |
237 | - | let | |
238 | - | let | |
239 | - | let | |
240 | - | let | |
241 | - | let | |
236 | + | let bZ = bi[q] | |
237 | + | let ca = bi[r] | |
238 | + | let cb = bi[u] | |
239 | + | let cc = bi[v] | |
240 | + | let cd = parseIntValue(bi[s]) | |
241 | + | let ce = parseIntValue(bi[t]) | |
242 | 242 | let bA = bi[o] | |
243 | 243 | let bB = valueOrErrorMessage(assetInfo(bv), "Wrong lp asset").quantity | |
244 | 244 | let bC = if (bU) | |
245 | - | then aP(bW) | |
246 | - | else (aP(bW) - bQ) | |
245 | + | then aP(bZ) | |
246 | + | else if (if (bW) | |
247 | + | then (bY == bZ) | |
248 | + | else false) | |
249 | + | then (aP(bZ) - bX) | |
250 | + | else (aP(bZ) - bQ) | |
247 | 251 | let bE = if (bU) | |
248 | - | then aP(bX) | |
249 | - | else (aP(bX) - bS) | |
252 | + | then aP(ca) | |
253 | + | else if (if (bW) | |
254 | + | then (bY == ca) | |
255 | + | else false) | |
256 | + | then (aP(ca) - bX) | |
257 | + | else (aP(ca) - bS) | |
250 | 258 | if (true) | |
251 | - | then throw(((((((((("lpEmission = " + toString(bB)) + " amBalance = ") + toString(bC)) + " prBalance = ") + toString(bE)) + " getAccBalance(amIdStr) = ") + toString(aP( | |
259 | + | then throw(((((((((("lpEmission = " + toString(bB)) + " amBalance = ") + toString(bC)) + " prBalance = ") + toString(bE)) + " getAccBalance(amIdStr) = ") + toString(aP(bZ))) + " etAccBalance(prIdStr) = ") + toString(aP(ca)))) | |
252 | 260 | else { | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let bD = z(bC, | |
257 | - | let bF = z(bE, | |
258 | - | let | |
261 | + | let cf = z(bQ, cd) | |
262 | + | let cg = z(bS, ce) | |
263 | + | let ch = aR(cg, cf) | |
264 | + | let bD = z(bC, cd) | |
265 | + | let bF = z(bE, ce) | |
266 | + | let ci = if ((bB == 0)) | |
259 | 267 | then { | |
260 | 268 | let bG = f | |
261 | - | let | |
262 | - | let bm = pow(( | |
263 | - | $Tuple5(C(bm, b), C( | |
269 | + | let cj = f | |
270 | + | let bm = pow((cf * cg), 0, toBigInt(5), 1, 0, DOWN) | |
271 | + | $Tuple5(C(bm, b), C(cf, cd), C(cg, ce), aR((bF + cg), (bD + cf)), cj) | |
264 | 272 | } | |
265 | 273 | else { | |
266 | 274 | let bG = aR(bF, bD) | |
267 | - | let | |
268 | - | let | |
275 | + | let ck = fraction(J((bG - ch)), e, bG) | |
276 | + | let cj = z(aX, b) | |
269 | 277 | if (if ((bG != f)) | |
270 | - | then ( | |
278 | + | then (ck > cj) | |
271 | 279 | else false) | |
272 | - | then throw(((("Price slippage " + toString( | |
280 | + | then throw(((("Price slippage " + toString(ck)) + " exceeded ") + toString(cj))) | |
273 | 281 | else { | |
274 | 282 | let bJ = z(bB, b) | |
275 | - | let | |
276 | - | let | |
277 | - | let | |
278 | - | then $Tuple2( | |
279 | - | else $Tuple2( | |
280 | - | let | |
281 | - | let | |
282 | - | let bm = fraction(bJ, | |
283 | - | $Tuple5(C(bm, b), C( | |
283 | + | let cl = fraction(cf, bG, e) | |
284 | + | let cm = fraction(cg, e, bG) | |
285 | + | let cn = if ((cl > cg)) | |
286 | + | then $Tuple2(cm, cg) | |
287 | + | else $Tuple2(cf, cl) | |
288 | + | let co = cn._1 | |
289 | + | let cp = cn._2 | |
290 | + | let bm = fraction(bJ, cp, bF) | |
291 | + | $Tuple5(C(bm, b), C(co, cd), C(cp, ce), bG, cj) | |
284 | 292 | } | |
285 | 293 | } | |
286 | - | let | |
287 | - | let | |
288 | - | let | |
289 | - | let bH = C( | |
290 | - | let | |
291 | - | if ((0 >= | |
292 | - | then throw("LP < 0") | |
294 | + | let cq = ci._1 | |
295 | + | let cr = ci._2 | |
296 | + | let cs = ci._3 | |
297 | + | let bH = C(ci._4, b) | |
298 | + | let ct = C(ci._5, b) | |
299 | + | if ((0 >= cq)) | |
300 | + | then throw("LP <= 0") | |
293 | 301 | else { | |
294 | - | let | |
302 | + | let cu = if (!(bV)) | |
295 | 303 | then 0 | |
296 | - | else | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | $Tuple13( | |
304 | + | else cq | |
305 | + | let cv = (bQ - cr) | |
306 | + | let cw = (bS - cs) | |
307 | + | let cx = [IntegerEntry(M(), bH), IntegerEntry(N(height, lastBlock.timestamp), bH), StringEntry(Q(R, bs), aA(cr, cs, cu, bH, aX, ct, height, lastBlock.timestamp, cv, cw))] | |
308 | + | $Tuple13(cq, cu, bH, bC, bE, bB, bv, bA, cx, cv, cw, bR, bT) | |
301 | 309 | } | |
302 | 310 | } | |
303 | 311 | } | |
304 | 312 | ||
305 | 313 | ||
306 | - | func | |
314 | + | func cy (cz) = { | |
307 | 315 | let bi = au() | |
308 | - | let | |
309 | - | let | |
316 | + | let cA = bi[q] | |
317 | + | let cB = bi[r] | |
310 | 318 | let bA = parseIntValue(bi[o]) | |
311 | 319 | let bj = parseIntValue(bi[s]) | |
312 | 320 | let bk = parseIntValue(bi[t]) | |
313 | - | let | |
314 | - | let | |
315 | - | let bG = if (( | |
316 | - | then aZ(bj, bk, ( | |
317 | - | else aZ(bj, bk, ( | |
321 | + | let cC = aP(cA) | |
322 | + | let cD = aP(cB) | |
323 | + | let bG = if ((cz.orderType == Buy)) | |
324 | + | then aZ(bj, bk, (cC + cz.amount), cD) | |
325 | + | else aZ(bj, bk, (cC - cz.amount), cD) | |
318 | 326 | let bH = C(bG, b) | |
319 | 327 | if (if (if (as()) | |
320 | 328 | then true | |
323 | 331 | else (bA == m)) | |
324 | 332 | then throw("Blocked by admin") | |
325 | 333 | else { | |
326 | - | let | |
327 | - | let | |
334 | + | let cE = cz.assetPair.amountAsset | |
335 | + | let cF = if ((cE == unit)) | |
328 | 336 | then "WAVES" | |
329 | - | else toBase58String(value( | |
330 | - | let | |
331 | - | let | |
337 | + | else toBase58String(value(cE)) | |
338 | + | let cG = cz.assetPair.priceAsset | |
339 | + | let cH = if ((cG == unit)) | |
332 | 340 | then "WAVES" | |
333 | - | else toBase58String(value( | |
334 | - | if (if (( | |
341 | + | else toBase58String(value(cG)) | |
342 | + | if (if ((cF != cA)) | |
335 | 343 | then true | |
336 | - | else ( | |
344 | + | else (cH != cB)) | |
337 | 345 | then throw("Wrong order assets") | |
338 | 346 | else { | |
339 | - | let | |
340 | - | let | |
341 | - | let | |
342 | - | let | |
343 | - | then (bH >= | |
344 | - | else ( | |
347 | + | let cI = cz.price | |
348 | + | let ce = fraction(b, bk, bj) | |
349 | + | let cJ = F(cI, b, ce) | |
350 | + | let cK = if ((cz.orderType == Buy)) | |
351 | + | then (bH >= cJ) | |
352 | + | else (cJ >= bH) | |
345 | 353 | true | |
346 | 354 | } | |
347 | 355 | } | |
348 | 356 | } | |
349 | 357 | ||
350 | 358 | ||
351 | - | func | |
359 | + | func cL (cM) = if ((size(cM.payments) != 1)) | |
352 | 360 | then throw("1 payment expected") | |
353 | 361 | else { | |
354 | - | let | |
355 | - | let bt = value( | |
356 | - | let | |
357 | - | let | |
358 | - | let bM = | |
359 | - | let bN = | |
360 | - | let bA = parseIntValue( | |
361 | - | let bO = | |
362 | + | let cN = value(cM.payments[0]) | |
363 | + | let bt = value(cN.assetId) | |
364 | + | let bX = cN.amount | |
365 | + | let ci = br(toBase58String(cM.transactionId), toBase58String(bt), bX, cM.caller) | |
366 | + | let bM = ci._1 | |
367 | + | let bN = ci._2 | |
368 | + | let bA = parseIntValue(ci._9) | |
369 | + | let bO = ci._10 | |
362 | 370 | if (if (as()) | |
363 | 371 | then true | |
364 | 372 | else (bA == m)) | |
365 | 373 | then throw(("Blocked by admin: " + toString(bA))) | |
366 | - | else $Tuple5(bM, bN, | |
374 | + | else $Tuple5(bM, bN, bX, bt, bO) | |
367 | 375 | } | |
368 | 376 | ||
369 | 377 | ||
370 | - | func | |
371 | - | let | |
372 | - | let | |
378 | + | func cO (cP,S,cQ,cR,aX,bV,bW,bX,bY) = { | |
379 | + | let cS = bP(S, aX, value(cQ).amount, value(cQ).assetId, value(cR).amount, value(cR).assetId, cP, false, bV, bW, bX, bY) | |
380 | + | let cT = parseIntValue(cS._8) | |
373 | 381 | if (if (if (as()) | |
374 | 382 | then true | |
375 | - | else ( | |
383 | + | else (cT == k)) | |
376 | 384 | then true | |
377 | - | else ( | |
378 | - | then throw(("Blocked by admin: " + toString( | |
379 | - | else | |
385 | + | else (cT == m)) | |
386 | + | then throw(("Blocked by admin: " + toString(cT))) | |
387 | + | else cS | |
380 | 388 | } | |
381 | 389 | ||
382 | 390 | ||
383 | - | @Callable( | |
384 | - | func constructor (ar, | |
391 | + | @Callable(cM) | |
392 | + | func constructor (ar,cU) = if ((cM.caller != this)) | |
385 | 393 | then throw("permissions denied") | |
386 | - | else [StringEntry(K(), ar), StringEntry(L(), | |
394 | + | else [StringEntry(K(), ar), StringEntry(L(), cU)] | |
387 | 395 | ||
388 | 396 | ||
389 | 397 | ||
390 | - | @Callable( | |
391 | - | func put ( | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | if ((0 > | |
398 | + | @Callable(cM) | |
399 | + | func put (cV,cW) = { | |
400 | + | let cX = az() | |
401 | + | let cY = valueOrErrorMessage(addressFromString(cX[w]), "Incorrect staking addr") | |
402 | + | let cZ = valueOrErrorMessage(addressFromString(cX[x]), "Incorrect slippage addr") | |
403 | + | if ((0 > cV)) | |
396 | 404 | then throw("Invalid slippage.") | |
397 | - | else if ((size( | |
405 | + | else if ((size(cM.payments) != 2)) | |
398 | 406 | then throw("2 payments expected") | |
399 | 407 | else { | |
400 | - | let | |
401 | - | let | |
402 | - | let | |
403 | - | let bO = | |
404 | - | let | |
405 | - | let | |
406 | - | let bw = | |
407 | - | let bx = | |
408 | - | let | |
409 | - | if (( | |
408 | + | let da = cO(toString(cM.caller), toBase58String(cM.transactionId), AttachedPayment(value(cM.payments[0]).assetId, value(cM.payments[0]).amount), cM.payments[1], cV, true, false, 0, "") | |
409 | + | let cu = da._2 | |
410 | + | let db = da._7 | |
411 | + | let bO = da._9 | |
412 | + | let cv = da._10 | |
413 | + | let cw = da._11 | |
414 | + | let bw = da._12 | |
415 | + | let bx = da._13 | |
416 | + | let dc = invoke(ar, "emit", [cu], nil) | |
417 | + | if ((dc == dc)) | |
410 | 418 | then { | |
411 | - | let | |
412 | - | then invoke( | |
419 | + | let dd = if ((cv > 0)) | |
420 | + | then invoke(cZ, "put", nil, [AttachedPayment(bw, cv)]) | |
413 | 421 | else nil | |
414 | - | if (( | |
422 | + | if ((dd == dd)) | |
415 | 423 | then { | |
416 | - | let | |
417 | - | then invoke( | |
424 | + | let de = if ((cw > 0)) | |
425 | + | then invoke(cZ, "put", nil, [AttachedPayment(bx, cw)]) | |
418 | 426 | else nil | |
419 | - | if (( | |
427 | + | if ((de == de)) | |
420 | 428 | then { | |
421 | - | let | |
429 | + | let df = if (cW) | |
422 | 430 | then { | |
423 | - | let | |
424 | - | if (( | |
431 | + | let dg = invoke(cY, "stake", nil, [AttachedPayment(db, cu)]) | |
432 | + | if ((dg == dg)) | |
425 | 433 | then nil | |
426 | 434 | else throw("Strict value is not equal to itself.") | |
427 | 435 | } | |
428 | - | else [ScriptTransfer( | |
429 | - | (bO ++ | |
436 | + | else [ScriptTransfer(cM.caller, cu, db)] | |
437 | + | (bO ++ df) | |
430 | 438 | } | |
431 | 439 | else throw("Strict value is not equal to itself.") | |
432 | 440 | } | |
438 | 446 | ||
439 | 447 | ||
440 | 448 | ||
441 | - | @Callable( | |
442 | - | func putOneTkn ( | |
449 | + | @Callable(cM) | |
450 | + | func putOneTkn (dh,di,dj,aX,cW) = { | |
443 | 451 | let bi = az() | |
444 | - | let | |
445 | - | let | |
446 | - | let | |
447 | - | let | |
448 | - | let bw = | |
449 | - | let bx = | |
450 | - | let by = parseIntValue( | |
451 | - | let bz = parseIntValue( | |
452 | - | if ((size( | |
452 | + | let cY = valueOrErrorMessage(addressFromString(bi[w]), "Wrong staking addr") | |
453 | + | let cZ = valueOrErrorMessage(addressFromString(bi[x]), "Wrong slippage addr") | |
454 | + | let dk = valueOrErrorMessage(addressFromString(bi[y]), "Wrong slippage addr") | |
455 | + | let dl = au() | |
456 | + | let bw = dl[q] | |
457 | + | let bx = dl[r] | |
458 | + | let by = parseIntValue(dl[s]) | |
459 | + | let bz = parseIntValue(dl[t]) | |
460 | + | if ((size(cM.payments) != 1)) | |
453 | 461 | then throw("1 payment expected") | |
454 | 462 | else { | |
455 | - | let | |
456 | - | let bt = toBase58String(value( | |
457 | - | let | |
458 | - | let | |
459 | - | let | |
463 | + | let cN = value(cM.payments[0]) | |
464 | + | let bt = toBase58String(value(cN.assetId)) | |
465 | + | let bX = cN.amount | |
466 | + | let dm = z(dh, by) | |
467 | + | let dn = z(di, bz) | |
460 | 468 | let bC = aP(bw) | |
461 | 469 | let bD = z(bC, by) | |
462 | 470 | let bE = aP(bx) | |
463 | 471 | let bF = z(bE, bz) | |
464 | - | let | |
465 | - | then (bC - | |
472 | + | let do = if ((bt == bw)) | |
473 | + | then (bC - bX) | |
466 | 474 | else bC | |
467 | - | let | |
468 | - | then (bE - | |
475 | + | let dp = if ((bt == bx)) | |
476 | + | then (bE - bX) | |
469 | 477 | else bE | |
470 | - | let | |
471 | - | let | |
472 | - | let | |
478 | + | let dq = invoke(dk, "calcD", [toString(do), toString(dp), "50", "100000000", "1"], nil) | |
479 | + | let dr = parseBigIntValue(ak(dq)) | |
480 | + | let ds = if ((bt == bw)) | |
473 | 481 | then { | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
477 | - | let | |
478 | - | parseBigIntValue(ak( | |
482 | + | let dt = z(bX, by) | |
483 | + | let du = dn | |
484 | + | let dv = (dt - dm) | |
485 | + | let dw = invoke(dk, "calcD", [toString((toBigInt(do) + toBigInt(C(dv, by)))), toString((toBigInt(dp) - toBigInt(C(du, bz)))), "50", "100000000", "1"], nil) | |
486 | + | parseBigIntValue(ak(dw)) | |
479 | 487 | } | |
480 | 488 | else { | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
485 | - | parseBigIntValue(ak( | |
489 | + | let dx = z(bX, bz) | |
490 | + | let du = (dx - dn) | |
491 | + | let dv = dm | |
492 | + | let dw = invoke(dk, "calcD", [toString((toBigInt(do) - toBigInt(C(dv, by)))), toString((toBigInt(dp) + toBigInt(C(du, bz)))), "50", "100000000", "1"], nil) | |
493 | + | parseBigIntValue(ak(dw)) | |
486 | 494 | } | |
487 | - | if (!(aU( | |
495 | + | if (!(aU(ds, dr, toBigInt(1000))._1)) | |
488 | 496 | then throw("D mismatch.") | |
489 | 497 | else { | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | let bO = | |
494 | - | let | |
495 | - | let | |
496 | - | let | |
497 | - | if (!( | |
498 | - | then throw(((("Too big slippage: " + toString( | |
498 | + | let da = cO(toString(cM.caller), toBase58String(cM.transactionId), AttachedPayment(fromBase58String(bw), dh), AttachedPayment(fromBase58String(bx), di), 50000000000, true, true, bX, bt) | |
499 | + | let dy = da._2 | |
500 | + | let db = da._7 | |
501 | + | let bO = da._9 | |
502 | + | let cv = da._10 | |
503 | + | let cw = da._11 | |
504 | + | let dz = aU(toBigInt(dy), toBigInt(dj), toBigInt(aX)) | |
505 | + | if (!(dz._1)) | |
506 | + | then throw(((("Too big slippage: " + toString(dz._3)) + " vs ") + toString(aX))) | |
499 | 507 | else { | |
500 | - | let | |
501 | - | let | |
502 | - | if (( | |
508 | + | let cu = toInt(dz._2) | |
509 | + | let dc = invoke(ar, "emit", [cu], nil) | |
510 | + | if ((dc == dc)) | |
503 | 511 | then { | |
504 | - | let | |
505 | - | then invoke( | |
512 | + | let dd = if ((cv > 0)) | |
513 | + | then invoke(cZ, "put", nil, [AttachedPayment(fromBase58String(bw), cv)]) | |
506 | 514 | else nil | |
507 | - | if (( | |
515 | + | if ((dd == dd)) | |
508 | 516 | then { | |
509 | - | let | |
510 | - | then invoke( | |
517 | + | let de = if ((cw > 0)) | |
518 | + | then invoke(cZ, "put", nil, [AttachedPayment(fromBase58String(bx), cw)]) | |
511 | 519 | else nil | |
512 | - | if (( | |
520 | + | if ((de == de)) | |
513 | 521 | then { | |
514 | - | let | |
522 | + | let df = if (cW) | |
515 | 523 | then { | |
516 | - | let | |
517 | - | if (( | |
524 | + | let dg = invoke(cY, "stake", nil, [AttachedPayment(db, cu)]) | |
525 | + | if ((dg == dg)) | |
518 | 526 | then nil | |
519 | 527 | else throw("Strict value is not equal to itself.") | |
520 | 528 | } | |
521 | - | else [ScriptTransfer( | |
522 | - | (bO ++ | |
529 | + | else [ScriptTransfer(cM.caller, cu, db)] | |
530 | + | (bO ++ df) | |
523 | 531 | } | |
524 | 532 | else throw("Strict value is not equal to itself.") | |
525 | 533 | } | |
533 | 541 | ||
534 | 542 | ||
535 | 543 | ||
536 | - | @Callable( | |
537 | - | func putForFree ( | |
544 | + | @Callable(cM) | |
545 | + | func putForFree (dA) = if ((0 > dA)) | |
538 | 546 | then throw("Invalid slippage") | |
539 | - | else if ((size( | |
547 | + | else if ((size(cM.payments) != 2)) | |
540 | 548 | then throw("2 payments expected") | |
541 | 549 | else { | |
542 | - | let | |
543 | - | | |
550 | + | let da = cO(toString(cM.caller), toBase58String(cM.transactionId), AttachedPayment(value(cM.payments[0]).assetId, value(cM.payments[0]).amount), cM.payments[1], dA, false, false, 0, "") | |
551 | + | da._9 | |
544 | 552 | } | |
545 | 553 | ||
546 | 554 | ||
547 | 555 | ||
548 | - | @Callable( | |
556 | + | @Callable(cM) | |
549 | 557 | func get () = { | |
550 | - | let | |
551 | - | let | |
552 | - | let bN = | |
553 | - | let | |
554 | - | let bt = | |
555 | - | let bO = | |
556 | - | let | |
557 | - | if (( | |
558 | + | let ci = cL(cM) | |
559 | + | let dB = ci._1 | |
560 | + | let bN = ci._2 | |
561 | + | let bX = ci._3 | |
562 | + | let bt = ci._4 | |
563 | + | let bO = ci._5 | |
564 | + | let dC = invoke(ar, "burn", [bX], [AttachedPayment(bt, bX)]) | |
565 | + | if ((dC == dC)) | |
558 | 566 | then bO | |
559 | 567 | else throw("Strict value is not equal to itself.") | |
560 | 568 | } | |
561 | 569 | ||
562 | 570 | ||
563 | 571 | ||
564 | - | @Callable( | |
565 | - | func getOneTkn ( | |
572 | + | @Callable(cM) | |
573 | + | func getOneTkn (dD,dE,dF,dG,aX) = if ((size(cM.payments) != 1)) | |
566 | 574 | then throw("1 payment expected") | |
567 | 575 | else { | |
568 | 576 | let bi = au() | |
572 | 580 | let by = parseIntValue(bi[s]) | |
573 | 581 | let bz = parseIntValue(bi[t]) | |
574 | 582 | let bA = bi[o] | |
575 | - | let | |
576 | - | let | |
577 | - | if (if (( | |
578 | - | then ( | |
583 | + | let dH = az() | |
584 | + | let dk = valueOrErrorMessage(addressFromString(dH[y]), "Wrong slippage address") | |
585 | + | if (if ((dG != bw)) | |
586 | + | then (dG != bx) | |
579 | 587 | else false) | |
580 | 588 | then throw("Invalid out asset") | |
581 | 589 | else { | |
582 | - | let | |
590 | + | let dI = if ((dG == bw)) | |
583 | 591 | then bw | |
584 | 592 | else bx | |
585 | - | let | |
586 | - | let R = | |
587 | - | let bs = toBase58String( | |
588 | - | let bt = value( | |
589 | - | let | |
593 | + | let cN = value(cM.payments[0]) | |
594 | + | let R = cM.caller | |
595 | + | let bs = toBase58String(cM.transactionId) | |
596 | + | let bt = value(cN.assetId) | |
597 | + | let bX = cN.amount | |
590 | 598 | if ((bv != toBase58String(bt))) | |
591 | 599 | then throw("Invalid LP") | |
592 | 600 | else { | |
593 | - | let | |
594 | - | let | |
595 | - | let | |
601 | + | let cS = br(toBase58String(cM.transactionId), toBase58String(bt), bX, cM.caller) | |
602 | + | let dJ = cS._1 | |
603 | + | let dK = cS._2 | |
596 | 604 | let bC = aP(bw) | |
597 | 605 | let bD = z(bC, by) | |
598 | 606 | let bE = aP(bx) | |
599 | 607 | let bF = z(bE, bz) | |
600 | - | let | |
601 | - | let | |
608 | + | let dr = invoke(dk, "calcD", [toString(bC), toString(bE), "50", "100000000", "1"], nil) | |
609 | + | let dL = if ((dG == bw)) | |
602 | 610 | then { | |
603 | - | let | |
604 | - | let | |
605 | - | if (!(aU(parseBigIntValue(ak( | |
611 | + | let dM = (dF - dJ) | |
612 | + | let ds = invoke(dk, "calcD", [toString((bC - dM)), toString((bE + dE)), "50", "100000000", "1"], nil) | |
613 | + | if (!(aU(parseBigIntValue(ak(ds)), parseBigIntValue(ak(dr)), toBigInt(1000))._1)) | |
606 | 614 | then throw("D mismatch") | |
607 | 615 | else { | |
608 | - | let | |
609 | - | let | |
610 | - | if (!( | |
611 | - | then throw(((("Too big slippage: " + toString( | |
612 | - | else $Tuple2(toInt( | |
616 | + | let dN = (dJ + dD) | |
617 | + | let dz = aU(toBigInt(dN), toBigInt(dF), toBigInt(aX)) | |
618 | + | if (!(dz._1)) | |
619 | + | then throw(((("Too big slippage: " + toString(dz._3)) + " vs ") + toString(aX))) | |
620 | + | else $Tuple2(toInt(dz._2), 0) | |
613 | 621 | } | |
614 | 622 | } | |
615 | 623 | else { | |
616 | - | let | |
617 | - | let | |
618 | - | if (!(aU(parseBigIntValue(ak( | |
624 | + | let dO = (dF - dK) | |
625 | + | let ds = invoke(dk, "calcD", [toString((bC + dD)), toString((bE - dO)), "50", "100000000", "1"], nil) | |
626 | + | if (!(aU(parseBigIntValue(ak(ds)), parseBigIntValue(ak(dr)), toBigInt(5000))._1)) | |
619 | 627 | then throw("D mismatch.") | |
620 | 628 | else { | |
621 | - | let | |
622 | - | let | |
623 | - | if (!( | |
624 | - | then throw(((("Too big slippage: " + toString( | |
625 | - | else $Tuple2(0, toInt( | |
629 | + | let dN = (dK + dE) | |
630 | + | let dz = aU(toBigInt(dN), toBigInt(dF), toBigInt(aX)) | |
631 | + | if (!(dz._1)) | |
632 | + | then throw(((("Too big slippage: " + toString(dz._3)) + " vs ") + toString(aX))) | |
633 | + | else $Tuple2(0, toInt(dz._2)) | |
626 | 634 | } | |
627 | 635 | } | |
628 | 636 | let bG = aR(bF, bD) | |
629 | 637 | let bH = C(bG, b) | |
630 | - | let bO = [ScriptTransfer(R, if (( | |
631 | - | then | |
632 | - | else | |
638 | + | let bO = [ScriptTransfer(R, if ((dI == bw)) | |
639 | + | then dL._1 | |
640 | + | else dL._2, if ((dI == "WAVES")) | |
633 | 641 | then unit | |
634 | - | else fromBase58String( | |
635 | - | let | |
636 | - | if (( | |
642 | + | else fromBase58String(dI)), StringEntry(T(toString(R), bs), aL(dL._1, dL._2, bX, bH, height, lastBlock.timestamp)), IntegerEntry(M(), bH), IntegerEntry(N(height, lastBlock.timestamp), bH)] | |
643 | + | let dP = invoke(ar, "burn", [bX], [AttachedPayment(bt, bX)]) | |
644 | + | if ((dP == dP)) | |
637 | 645 | then bO | |
638 | 646 | else throw("Strict value is not equal to itself.") | |
639 | 647 | } | |
642 | 650 | ||
643 | 651 | ||
644 | 652 | ||
645 | - | @Callable( | |
646 | - | func getNoLess ( | |
647 | - | let | |
648 | - | let bM = | |
649 | - | let bN = | |
650 | - | let | |
651 | - | let bt = | |
652 | - | let bO = | |
653 | - | if (( | |
654 | - | then throw(((("Failed: " + toString(bM)) + " < ") + toString( | |
655 | - | else if (( | |
656 | - | then throw(((("Failed: " + toString(bN)) + " < ") + toString( | |
653 | + | @Callable(cM) | |
654 | + | func getNoLess (dQ,dR) = { | |
655 | + | let ci = cL(cM) | |
656 | + | let bM = ci._1 | |
657 | + | let bN = ci._2 | |
658 | + | let bX = ci._3 | |
659 | + | let bt = ci._4 | |
660 | + | let bO = ci._5 | |
661 | + | if ((dQ > bM)) | |
662 | + | then throw(((("Failed: " + toString(bM)) + " < ") + toString(dQ))) | |
663 | + | else if ((dR > bN)) | |
664 | + | then throw(((("Failed: " + toString(bN)) + " < ") + toString(dR))) | |
657 | 665 | else { | |
658 | - | let | |
659 | - | if (( | |
666 | + | let dC = invoke(ar, "burn", [bX], [AttachedPayment(bt, bX)]) | |
667 | + | if ((dC == dC)) | |
660 | 668 | then bO | |
661 | 669 | else throw("Strict value is not equal to itself.") | |
662 | 670 | } | |
664 | 672 | ||
665 | 673 | ||
666 | 674 | ||
667 | - | @Callable( | |
668 | - | func unstakeAndGet ( | |
669 | - | let | |
675 | + | @Callable(cM) | |
676 | + | func unstakeAndGet (dS) = { | |
677 | + | let dT = if ((size(cM.payments) != 0)) | |
670 | 678 | then throw("No payments expected") | |
671 | 679 | else true | |
672 | - | if (( | |
680 | + | if ((dT == dT)) | |
673 | 681 | then { | |
674 | 682 | let bi = au() | |
675 | - | let | |
676 | - | let | |
677 | - | let | |
678 | - | let | |
679 | - | if (( | |
683 | + | let dU = az() | |
684 | + | let db = fromBase58String(bi[p]) | |
685 | + | let dV = valueOrErrorMessage(addressFromString(dU[w]), "Wrong staking address.") | |
686 | + | let dW = invoke(dV, "unstake", [toBase58String(db), dS], nil) | |
687 | + | if ((dW == dW)) | |
680 | 688 | then { | |
681 | - | let | |
682 | - | let bA = parseIntValue( | |
683 | - | let bO = | |
684 | - | let | |
689 | + | let cS = br(toBase58String(cM.transactionId), toBase58String(db), dS, cM.caller) | |
690 | + | let bA = parseIntValue(cS._9) | |
691 | + | let bO = cS._10 | |
692 | + | let dX = if (if (as()) | |
685 | 693 | then true | |
686 | 694 | else (bA == m)) | |
687 | 695 | then throw(("Blocked by admin: " + toString(bA))) | |
688 | 696 | else true | |
689 | - | if (( | |
697 | + | if ((dX == dX)) | |
690 | 698 | then { | |
691 | - | let | |
692 | - | if (( | |
699 | + | let dC = invoke(ar, "burn", [dS], [AttachedPayment(db, dS)]) | |
700 | + | if ((dC == dC)) | |
693 | 701 | then bO | |
694 | 702 | else throw("Strict value is not equal to itself.") | |
695 | 703 | } | |
702 | 710 | ||
703 | 711 | ||
704 | 712 | ||
705 | - | @Callable( | |
706 | - | func activate ( | |
713 | + | @Callable(cM) | |
714 | + | func activate (dY,dZ) = if ((toString(cM.caller) != toString(ar))) | |
707 | 715 | then throw("permissions denied") | |
708 | - | else $Tuple2([StringEntry(U(), | |
716 | + | else $Tuple2([StringEntry(U(), dY), StringEntry(V(), dZ)], "success") | |
709 | 717 | ||
710 | 718 | ||
711 | 719 | ||
712 | - | @Callable( | |
720 | + | @Callable(cM) | |
713 | 721 | func getPoolConfigWrapperREADONLY () = $Tuple2(nil, au()) | |
714 | 722 | ||
715 | 723 | ||
716 | 724 | ||
717 | - | @Callable( | |
725 | + | @Callable(cM) | |
718 | 726 | func getAccBalanceWrapperREADONLY (aQ) = $Tuple2(nil, aP(aQ)) | |
719 | 727 | ||
720 | 728 | ||
721 | 729 | ||
722 | - | @Callable( | |
730 | + | @Callable(cM) | |
723 | 731 | func calcPricesWrapperREADONLY (bc,bd,bh) = { | |
724 | 732 | let bq = bg(bc, bd, bh) | |
725 | 733 | $Tuple2(nil, [toString(bq[0]), toString(bq[1]), toString(bq[2])]) | |
727 | 735 | ||
728 | 736 | ||
729 | 737 | ||
730 | - | @Callable( | |
738 | + | @Callable(cM) | |
731 | 739 | func fromX18WrapperREADONLY (D,E) = $Tuple2(nil, C(parseBigIntValue(D), E)) | |
732 | 740 | ||
733 | 741 | ||
734 | 742 | ||
735 | - | @Callable( | |
743 | + | @Callable(cM) | |
736 | 744 | func toX18WrapperREADONLY (A,B) = $Tuple2(nil, toString(z(A, B))) | |
737 | 745 | ||
738 | 746 | ||
739 | 747 | ||
740 | - | @Callable( | |
748 | + | @Callable(cM) | |
741 | 749 | func calcPriceBigIntWrapperREADONLY (aS,aT) = $Tuple2(nil, toString(aR(parseBigIntValue(aS), parseBigIntValue(aT)))) | |
742 | 750 | ||
743 | 751 | ||
744 | - | ||
745 | - | @Callable(cJ) | |
746 | - | func estimatePutOperationWrapperREADONLY (bs,aX,bQ,bR,bS,bT,R,bU,bV) = $Tuple2(nil, bP(bs, aX, bQ, bR, bS, bT, R, bU, bV)) | |
747 | - | ||
748 | - | ||
749 | - | @Verifier(dY) | |
750 | - | func dZ () = { | |
751 | - | let al = dY | |
752 | + | @Verifier(ea) | |
753 | + | func eb () = { | |
754 | + | let al = ea | |
752 | 755 | if ($isInstanceOf(al, "Order")) | |
753 | 756 | then { | |
754 | - | let | |
755 | - | let | |
756 | - | let ah = | |
757 | - | let ai = sigVerify( | |
758 | - | let aj = sigVerify( | |
757 | + | let cz = al | |
758 | + | let ec = at() | |
759 | + | let ah = cy(cz) | |
760 | + | let ai = sigVerify(cz.bodyBytes, cz.proofs[0], cz.senderPublicKey) | |
761 | + | let aj = sigVerify(cz.bodyBytes, cz.proofs[1], ec) | |
759 | 762 | if (if (if (ah) | |
760 | 763 | then ai | |
761 | 764 | else false) | |
765 | 768 | else ag(ah, ai, aj) | |
766 | 769 | } | |
767 | 770 | else { | |
768 | - | let | |
769 | - | if (( | |
770 | - | then sigVerify( | |
771 | - | else sigVerify( | |
771 | + | let ed = valueOrElse(getString(this, L()), i) | |
772 | + | if ((ed == i)) | |
773 | + | then sigVerify(ea.bodyBytes, ea.proofs[0], ea.senderPublicKey) | |
774 | + | else sigVerify(ea.bodyBytes, ea.proofs[0], fromBase58String(ed)) | |
772 | 775 | } | |
773 | 776 | } | |
774 | 777 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 8 | |
5 | 5 | ||
6 | 6 | let b = 100000000 | |
7 | 7 | ||
8 | 8 | let c = toBigInt(100000000) | |
9 | 9 | ||
10 | 10 | let d = toBigInt(1000000) | |
11 | 11 | ||
12 | 12 | let e = toBigInt(1000000000000000000) | |
13 | 13 | ||
14 | 14 | let f = toBigInt(0) | |
15 | 15 | ||
16 | 16 | let g = toBigInt(1) | |
17 | 17 | ||
18 | 18 | let h = "__" | |
19 | 19 | ||
20 | 20 | let i = "" | |
21 | 21 | ||
22 | 22 | let j = 1 | |
23 | 23 | ||
24 | 24 | let k = 2 | |
25 | 25 | ||
26 | 26 | let l = 3 | |
27 | 27 | ||
28 | 28 | let m = 4 | |
29 | 29 | ||
30 | 30 | let n = 1 | |
31 | 31 | ||
32 | 32 | let o = 2 | |
33 | 33 | ||
34 | 34 | let p = 3 | |
35 | 35 | ||
36 | 36 | let q = 4 | |
37 | 37 | ||
38 | 38 | let r = 5 | |
39 | 39 | ||
40 | 40 | let s = 6 | |
41 | 41 | ||
42 | 42 | let t = 7 | |
43 | 43 | ||
44 | 44 | let u = 8 | |
45 | 45 | ||
46 | 46 | let v = 9 | |
47 | 47 | ||
48 | 48 | let w = 1 | |
49 | 49 | ||
50 | 50 | let x = 7 | |
51 | 51 | ||
52 | 52 | let y = 10 | |
53 | 53 | ||
54 | 54 | func z (A,B) = fraction(toBigInt(A), e, toBigInt(B)) | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func C (D,E) = toInt(fraction(D, toBigInt(E), e)) | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func F (G,H,I) = fraction(G, H, I) | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | func J (D) = if ((f > D)) | |
64 | 64 | then -(D) | |
65 | 65 | else D | |
66 | 66 | ||
67 | 67 | ||
68 | 68 | func K () = "%s__factoryContract" | |
69 | 69 | ||
70 | 70 | ||
71 | 71 | func L () = "%s__managerPublicKey" | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func M () = "%s%s__price__last" | |
75 | 75 | ||
76 | 76 | ||
77 | 77 | func N (O,P) = makeString(["%s%s%d%d__price__history", toString(O), toString(P)], h) | |
78 | 78 | ||
79 | 79 | ||
80 | 80 | func Q (R,S) = ((("%s%s%s__P__" + R) + "__") + S) | |
81 | 81 | ||
82 | 82 | ||
83 | 83 | func T (R,S) = ((("%s%s%s__G__" + R) + "__") + S) | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func U () = "%s__amountAsset" | |
87 | 87 | ||
88 | 88 | ||
89 | 89 | func V () = "%s__priceAsset" | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | func W () = "%s__factoryConfig" | |
93 | 93 | ||
94 | 94 | ||
95 | 95 | func X () = "%s%s__matcher__publicKey" | |
96 | 96 | ||
97 | 97 | ||
98 | 98 | func Y (Z,aa) = (((("%d%d%s__" + Z) + "__") + aa) + "__config") | |
99 | 99 | ||
100 | 100 | ||
101 | 101 | func ab (ac) = ("%s%s%s__mappings__baseAsset2internalId__" + ac) | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | func ad () = "%s__shutdown" | |
105 | 105 | ||
106 | 106 | ||
107 | 107 | func ae (af) = ("%s%s__poolWeight__" + af) | |
108 | 108 | ||
109 | 109 | ||
110 | 110 | func ag (ah,ai,aj) = throw(((((("Validation failed: orderValid=" + toString(ah)) + " senderValid=") + toString(ai)) + " matcherValid=") + toString(aj))) | |
111 | 111 | ||
112 | 112 | ||
113 | 113 | func ak (D) = { | |
114 | 114 | let al = D | |
115 | 115 | if ($isInstanceOf(al, "String")) | |
116 | 116 | then { | |
117 | 117 | let am = al | |
118 | 118 | am | |
119 | 119 | } | |
120 | 120 | else throw("fail cast to String") | |
121 | 121 | } | |
122 | 122 | ||
123 | 123 | ||
124 | 124 | func an (ao,ap) = valueOrErrorMessage(getString(ao, ap), makeString(["mandatory ", toString(ao), ".", ap, " is not defined"], "")) | |
125 | 125 | ||
126 | 126 | ||
127 | 127 | func aq (ao,ap) = valueOrErrorMessage(getInteger(ao, ap), makeString(["mandatory ", toString(ao), ".", ap, " is not defined"], "")) | |
128 | 128 | ||
129 | 129 | ||
130 | 130 | let ar = addressFromStringValue(an(this, K())) | |
131 | 131 | ||
132 | 132 | func as () = valueOrElse(getBoolean(ar, ad()), false) | |
133 | 133 | ||
134 | 134 | ||
135 | 135 | func at () = fromBase58String(an(ar, X())) | |
136 | 136 | ||
137 | 137 | ||
138 | 138 | func au () = { | |
139 | 139 | let av = an(this, U()) | |
140 | 140 | let aw = an(this, V()) | |
141 | 141 | let ax = aq(ar, ab(aw)) | |
142 | 142 | let ay = aq(ar, ab(av)) | |
143 | 143 | split(an(ar, Y(toString(ay), toString(ax))), h) | |
144 | 144 | } | |
145 | 145 | ||
146 | 146 | ||
147 | 147 | func az () = split(an(ar, W()), h) | |
148 | 148 | ||
149 | 149 | ||
150 | 150 | func aA (aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aB), toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ), toString(aK)], h) | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | func aL (aM,aN,aO,aE,aH,aI) = makeString(["%d%d%d%d%d%d", toString(aM), toString(aN), toString(aO), toString(aE), toString(aH), toString(aI)], h) | |
154 | 154 | ||
155 | 155 | ||
156 | 156 | func aP (aQ) = if ((aQ == "WAVES")) | |
157 | 157 | then wavesBalance(this).available | |
158 | 158 | else assetBalance(this, fromBase58String(aQ)) | |
159 | 159 | ||
160 | 160 | ||
161 | 161 | func aR (aS,aT) = fraction(aS, e, aT) | |
162 | 162 | ||
163 | 163 | ||
164 | 164 | func aU (aV,aW,aX) = { | |
165 | 165 | let aY = fraction((aV - aW), c, aW) | |
166 | 166 | $Tuple3(((aX - J(aY)) > f), min([aV, aW]), aY) | |
167 | 167 | } | |
168 | 168 | ||
169 | 169 | ||
170 | 170 | func aZ (ba,bb,bc,bd) = { | |
171 | 171 | let be = z(bc, ba) | |
172 | 172 | let bf = z(bd, bb) | |
173 | 173 | aR(bf, be) | |
174 | 174 | } | |
175 | 175 | ||
176 | 176 | ||
177 | 177 | func bg (bc,bd,bh) = { | |
178 | 178 | let bi = au() | |
179 | 179 | let bj = parseIntValue(bi[s]) | |
180 | 180 | let bk = parseIntValue(bi[t]) | |
181 | 181 | let bl = aZ(bj, bk, bc, bd) | |
182 | 182 | let aT = z(bc, bj) | |
183 | 183 | let aS = z(bd, bk) | |
184 | 184 | let bm = z(bh, b) | |
185 | 185 | let bn = aR(aT, bm) | |
186 | 186 | let bo = aR(aS, bm) | |
187 | 187 | [bl, bn, bo] | |
188 | 188 | } | |
189 | 189 | ||
190 | 190 | ||
191 | 191 | func bp (bc,bd,bh) = { | |
192 | 192 | let bq = bg(bc, bd, bh) | |
193 | 193 | [C(bq[0], b), C(bq[1], b), C(bq[2], b)] | |
194 | 194 | } | |
195 | 195 | ||
196 | 196 | ||
197 | 197 | func br (bs,bt,bu,R) = { | |
198 | 198 | let bi = au() | |
199 | 199 | let bv = bi[p] | |
200 | 200 | let bw = bi[q] | |
201 | 201 | let bx = bi[r] | |
202 | 202 | let by = parseIntValue(bi[s]) | |
203 | 203 | let bz = parseIntValue(bi[t]) | |
204 | 204 | let bA = bi[o] | |
205 | 205 | let bB = valueOrErrorMessage(assetInfo(fromBase58String(bv)), "Invalid LP id").quantity | |
206 | 206 | if ((bv != bt)) | |
207 | 207 | then throw("Invalid pmt asset") | |
208 | 208 | else { | |
209 | 209 | let bC = aP(bw) | |
210 | 210 | let bD = z(bC, by) | |
211 | 211 | let bE = aP(bx) | |
212 | 212 | let bF = z(bE, bz) | |
213 | 213 | let bG = aR(bF, bD) | |
214 | 214 | let bH = C(bG, b) | |
215 | 215 | let bI = z(bu, b) | |
216 | 216 | let bJ = z(bB, b) | |
217 | 217 | let bK = fraction(bD, bI, bJ) | |
218 | 218 | let bL = fraction(bF, bI, bJ) | |
219 | 219 | let bM = C(bK, by) | |
220 | 220 | let bN = C(bL, bz) | |
221 | 221 | let bO = if ((bs == "")) | |
222 | 222 | then nil | |
223 | 223 | else [ScriptTransfer(R, bM, if ((bw == "WAVES")) | |
224 | 224 | then unit | |
225 | 225 | else fromBase58String(bw)), ScriptTransfer(R, bN, if ((bx == "WAVES")) | |
226 | 226 | then unit | |
227 | 227 | else fromBase58String(bx)), StringEntry(T(toString(R), bs), aL(bM, bN, bu, bH, height, lastBlock.timestamp)), IntegerEntry(M(), bH), IntegerEntry(N(height, lastBlock.timestamp), bH)] | |
228 | 228 | $Tuple10(bM, bN, bw, bx, bC, bE, bB, bG, bA, bO) | |
229 | 229 | } | |
230 | 230 | } | |
231 | 231 | ||
232 | 232 | ||
233 | - | func bP (bs,aX,bQ,bR,bS,bT,R,bU,bV) = { | |
233 | + | func bP (bs,aX,bQ,bR,bS,bT,R,bU,bV,bW,bX,bY) = { | |
234 | 234 | let bi = au() | |
235 | 235 | let bv = fromBase58String(bi[p]) | |
236 | - | let | |
237 | - | let | |
238 | - | let | |
239 | - | let | |
240 | - | let | |
241 | - | let | |
236 | + | let bZ = bi[q] | |
237 | + | let ca = bi[r] | |
238 | + | let cb = bi[u] | |
239 | + | let cc = bi[v] | |
240 | + | let cd = parseIntValue(bi[s]) | |
241 | + | let ce = parseIntValue(bi[t]) | |
242 | 242 | let bA = bi[o] | |
243 | 243 | let bB = valueOrErrorMessage(assetInfo(bv), "Wrong lp asset").quantity | |
244 | 244 | let bC = if (bU) | |
245 | - | then aP(bW) | |
246 | - | else (aP(bW) - bQ) | |
245 | + | then aP(bZ) | |
246 | + | else if (if (bW) | |
247 | + | then (bY == bZ) | |
248 | + | else false) | |
249 | + | then (aP(bZ) - bX) | |
250 | + | else (aP(bZ) - bQ) | |
247 | 251 | let bE = if (bU) | |
248 | - | then aP(bX) | |
249 | - | else (aP(bX) - bS) | |
252 | + | then aP(ca) | |
253 | + | else if (if (bW) | |
254 | + | then (bY == ca) | |
255 | + | else false) | |
256 | + | then (aP(ca) - bX) | |
257 | + | else (aP(ca) - bS) | |
250 | 258 | if (true) | |
251 | - | then throw(((((((((("lpEmission = " + toString(bB)) + " amBalance = ") + toString(bC)) + " prBalance = ") + toString(bE)) + " getAccBalance(amIdStr) = ") + toString(aP( | |
259 | + | then throw(((((((((("lpEmission = " + toString(bB)) + " amBalance = ") + toString(bC)) + " prBalance = ") + toString(bE)) + " getAccBalance(amIdStr) = ") + toString(aP(bZ))) + " etAccBalance(prIdStr) = ") + toString(aP(ca)))) | |
252 | 260 | else { | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let bD = z(bC, | |
257 | - | let bF = z(bE, | |
258 | - | let | |
261 | + | let cf = z(bQ, cd) | |
262 | + | let cg = z(bS, ce) | |
263 | + | let ch = aR(cg, cf) | |
264 | + | let bD = z(bC, cd) | |
265 | + | let bF = z(bE, ce) | |
266 | + | let ci = if ((bB == 0)) | |
259 | 267 | then { | |
260 | 268 | let bG = f | |
261 | - | let | |
262 | - | let bm = pow(( | |
263 | - | $Tuple5(C(bm, b), C( | |
269 | + | let cj = f | |
270 | + | let bm = pow((cf * cg), 0, toBigInt(5), 1, 0, DOWN) | |
271 | + | $Tuple5(C(bm, b), C(cf, cd), C(cg, ce), aR((bF + cg), (bD + cf)), cj) | |
264 | 272 | } | |
265 | 273 | else { | |
266 | 274 | let bG = aR(bF, bD) | |
267 | - | let | |
268 | - | let | |
275 | + | let ck = fraction(J((bG - ch)), e, bG) | |
276 | + | let cj = z(aX, b) | |
269 | 277 | if (if ((bG != f)) | |
270 | - | then ( | |
278 | + | then (ck > cj) | |
271 | 279 | else false) | |
272 | - | then throw(((("Price slippage " + toString( | |
280 | + | then throw(((("Price slippage " + toString(ck)) + " exceeded ") + toString(cj))) | |
273 | 281 | else { | |
274 | 282 | let bJ = z(bB, b) | |
275 | - | let | |
276 | - | let | |
277 | - | let | |
278 | - | then $Tuple2( | |
279 | - | else $Tuple2( | |
280 | - | let | |
281 | - | let | |
282 | - | let bm = fraction(bJ, | |
283 | - | $Tuple5(C(bm, b), C( | |
283 | + | let cl = fraction(cf, bG, e) | |
284 | + | let cm = fraction(cg, e, bG) | |
285 | + | let cn = if ((cl > cg)) | |
286 | + | then $Tuple2(cm, cg) | |
287 | + | else $Tuple2(cf, cl) | |
288 | + | let co = cn._1 | |
289 | + | let cp = cn._2 | |
290 | + | let bm = fraction(bJ, cp, bF) | |
291 | + | $Tuple5(C(bm, b), C(co, cd), C(cp, ce), bG, cj) | |
284 | 292 | } | |
285 | 293 | } | |
286 | - | let | |
287 | - | let | |
288 | - | let | |
289 | - | let bH = C( | |
290 | - | let | |
291 | - | if ((0 >= | |
292 | - | then throw("LP < 0") | |
294 | + | let cq = ci._1 | |
295 | + | let cr = ci._2 | |
296 | + | let cs = ci._3 | |
297 | + | let bH = C(ci._4, b) | |
298 | + | let ct = C(ci._5, b) | |
299 | + | if ((0 >= cq)) | |
300 | + | then throw("LP <= 0") | |
293 | 301 | else { | |
294 | - | let | |
302 | + | let cu = if (!(bV)) | |
295 | 303 | then 0 | |
296 | - | else | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | $Tuple13( | |
304 | + | else cq | |
305 | + | let cv = (bQ - cr) | |
306 | + | let cw = (bS - cs) | |
307 | + | let cx = [IntegerEntry(M(), bH), IntegerEntry(N(height, lastBlock.timestamp), bH), StringEntry(Q(R, bs), aA(cr, cs, cu, bH, aX, ct, height, lastBlock.timestamp, cv, cw))] | |
308 | + | $Tuple13(cq, cu, bH, bC, bE, bB, bv, bA, cx, cv, cw, bR, bT) | |
301 | 309 | } | |
302 | 310 | } | |
303 | 311 | } | |
304 | 312 | ||
305 | 313 | ||
306 | - | func | |
314 | + | func cy (cz) = { | |
307 | 315 | let bi = au() | |
308 | - | let | |
309 | - | let | |
316 | + | let cA = bi[q] | |
317 | + | let cB = bi[r] | |
310 | 318 | let bA = parseIntValue(bi[o]) | |
311 | 319 | let bj = parseIntValue(bi[s]) | |
312 | 320 | let bk = parseIntValue(bi[t]) | |
313 | - | let | |
314 | - | let | |
315 | - | let bG = if (( | |
316 | - | then aZ(bj, bk, ( | |
317 | - | else aZ(bj, bk, ( | |
321 | + | let cC = aP(cA) | |
322 | + | let cD = aP(cB) | |
323 | + | let bG = if ((cz.orderType == Buy)) | |
324 | + | then aZ(bj, bk, (cC + cz.amount), cD) | |
325 | + | else aZ(bj, bk, (cC - cz.amount), cD) | |
318 | 326 | let bH = C(bG, b) | |
319 | 327 | if (if (if (as()) | |
320 | 328 | then true | |
321 | 329 | else (bA == l)) | |
322 | 330 | then true | |
323 | 331 | else (bA == m)) | |
324 | 332 | then throw("Blocked by admin") | |
325 | 333 | else { | |
326 | - | let | |
327 | - | let | |
334 | + | let cE = cz.assetPair.amountAsset | |
335 | + | let cF = if ((cE == unit)) | |
328 | 336 | then "WAVES" | |
329 | - | else toBase58String(value( | |
330 | - | let | |
331 | - | let | |
337 | + | else toBase58String(value(cE)) | |
338 | + | let cG = cz.assetPair.priceAsset | |
339 | + | let cH = if ((cG == unit)) | |
332 | 340 | then "WAVES" | |
333 | - | else toBase58String(value( | |
334 | - | if (if (( | |
341 | + | else toBase58String(value(cG)) | |
342 | + | if (if ((cF != cA)) | |
335 | 343 | then true | |
336 | - | else ( | |
344 | + | else (cH != cB)) | |
337 | 345 | then throw("Wrong order assets") | |
338 | 346 | else { | |
339 | - | let | |
340 | - | let | |
341 | - | let | |
342 | - | let | |
343 | - | then (bH >= | |
344 | - | else ( | |
347 | + | let cI = cz.price | |
348 | + | let ce = fraction(b, bk, bj) | |
349 | + | let cJ = F(cI, b, ce) | |
350 | + | let cK = if ((cz.orderType == Buy)) | |
351 | + | then (bH >= cJ) | |
352 | + | else (cJ >= bH) | |
345 | 353 | true | |
346 | 354 | } | |
347 | 355 | } | |
348 | 356 | } | |
349 | 357 | ||
350 | 358 | ||
351 | - | func | |
359 | + | func cL (cM) = if ((size(cM.payments) != 1)) | |
352 | 360 | then throw("1 payment expected") | |
353 | 361 | else { | |
354 | - | let | |
355 | - | let bt = value( | |
356 | - | let | |
357 | - | let | |
358 | - | let bM = | |
359 | - | let bN = | |
360 | - | let bA = parseIntValue( | |
361 | - | let bO = | |
362 | + | let cN = value(cM.payments[0]) | |
363 | + | let bt = value(cN.assetId) | |
364 | + | let bX = cN.amount | |
365 | + | let ci = br(toBase58String(cM.transactionId), toBase58String(bt), bX, cM.caller) | |
366 | + | let bM = ci._1 | |
367 | + | let bN = ci._2 | |
368 | + | let bA = parseIntValue(ci._9) | |
369 | + | let bO = ci._10 | |
362 | 370 | if (if (as()) | |
363 | 371 | then true | |
364 | 372 | else (bA == m)) | |
365 | 373 | then throw(("Blocked by admin: " + toString(bA))) | |
366 | - | else $Tuple5(bM, bN, | |
374 | + | else $Tuple5(bM, bN, bX, bt, bO) | |
367 | 375 | } | |
368 | 376 | ||
369 | 377 | ||
370 | - | func | |
371 | - | let | |
372 | - | let | |
378 | + | func cO (cP,S,cQ,cR,aX,bV,bW,bX,bY) = { | |
379 | + | let cS = bP(S, aX, value(cQ).amount, value(cQ).assetId, value(cR).amount, value(cR).assetId, cP, false, bV, bW, bX, bY) | |
380 | + | let cT = parseIntValue(cS._8) | |
373 | 381 | if (if (if (as()) | |
374 | 382 | then true | |
375 | - | else ( | |
383 | + | else (cT == k)) | |
376 | 384 | then true | |
377 | - | else ( | |
378 | - | then throw(("Blocked by admin: " + toString( | |
379 | - | else | |
385 | + | else (cT == m)) | |
386 | + | then throw(("Blocked by admin: " + toString(cT))) | |
387 | + | else cS | |
380 | 388 | } | |
381 | 389 | ||
382 | 390 | ||
383 | - | @Callable( | |
384 | - | func constructor (ar, | |
391 | + | @Callable(cM) | |
392 | + | func constructor (ar,cU) = if ((cM.caller != this)) | |
385 | 393 | then throw("permissions denied") | |
386 | - | else [StringEntry(K(), ar), StringEntry(L(), | |
394 | + | else [StringEntry(K(), ar), StringEntry(L(), cU)] | |
387 | 395 | ||
388 | 396 | ||
389 | 397 | ||
390 | - | @Callable( | |
391 | - | func put ( | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | if ((0 > | |
398 | + | @Callable(cM) | |
399 | + | func put (cV,cW) = { | |
400 | + | let cX = az() | |
401 | + | let cY = valueOrErrorMessage(addressFromString(cX[w]), "Incorrect staking addr") | |
402 | + | let cZ = valueOrErrorMessage(addressFromString(cX[x]), "Incorrect slippage addr") | |
403 | + | if ((0 > cV)) | |
396 | 404 | then throw("Invalid slippage.") | |
397 | - | else if ((size( | |
405 | + | else if ((size(cM.payments) != 2)) | |
398 | 406 | then throw("2 payments expected") | |
399 | 407 | else { | |
400 | - | let | |
401 | - | let | |
402 | - | let | |
403 | - | let bO = | |
404 | - | let | |
405 | - | let | |
406 | - | let bw = | |
407 | - | let bx = | |
408 | - | let | |
409 | - | if (( | |
408 | + | let da = cO(toString(cM.caller), toBase58String(cM.transactionId), AttachedPayment(value(cM.payments[0]).assetId, value(cM.payments[0]).amount), cM.payments[1], cV, true, false, 0, "") | |
409 | + | let cu = da._2 | |
410 | + | let db = da._7 | |
411 | + | let bO = da._9 | |
412 | + | let cv = da._10 | |
413 | + | let cw = da._11 | |
414 | + | let bw = da._12 | |
415 | + | let bx = da._13 | |
416 | + | let dc = invoke(ar, "emit", [cu], nil) | |
417 | + | if ((dc == dc)) | |
410 | 418 | then { | |
411 | - | let | |
412 | - | then invoke( | |
419 | + | let dd = if ((cv > 0)) | |
420 | + | then invoke(cZ, "put", nil, [AttachedPayment(bw, cv)]) | |
413 | 421 | else nil | |
414 | - | if (( | |
422 | + | if ((dd == dd)) | |
415 | 423 | then { | |
416 | - | let | |
417 | - | then invoke( | |
424 | + | let de = if ((cw > 0)) | |
425 | + | then invoke(cZ, "put", nil, [AttachedPayment(bx, cw)]) | |
418 | 426 | else nil | |
419 | - | if (( | |
427 | + | if ((de == de)) | |
420 | 428 | then { | |
421 | - | let | |
429 | + | let df = if (cW) | |
422 | 430 | then { | |
423 | - | let | |
424 | - | if (( | |
431 | + | let dg = invoke(cY, "stake", nil, [AttachedPayment(db, cu)]) | |
432 | + | if ((dg == dg)) | |
425 | 433 | then nil | |
426 | 434 | else throw("Strict value is not equal to itself.") | |
427 | 435 | } | |
428 | - | else [ScriptTransfer( | |
429 | - | (bO ++ | |
436 | + | else [ScriptTransfer(cM.caller, cu, db)] | |
437 | + | (bO ++ df) | |
430 | 438 | } | |
431 | 439 | else throw("Strict value is not equal to itself.") | |
432 | 440 | } | |
433 | 441 | else throw("Strict value is not equal to itself.") | |
434 | 442 | } | |
435 | 443 | else throw("Strict value is not equal to itself.") | |
436 | 444 | } | |
437 | 445 | } | |
438 | 446 | ||
439 | 447 | ||
440 | 448 | ||
441 | - | @Callable( | |
442 | - | func putOneTkn ( | |
449 | + | @Callable(cM) | |
450 | + | func putOneTkn (dh,di,dj,aX,cW) = { | |
443 | 451 | let bi = az() | |
444 | - | let | |
445 | - | let | |
446 | - | let | |
447 | - | let | |
448 | - | let bw = | |
449 | - | let bx = | |
450 | - | let by = parseIntValue( | |
451 | - | let bz = parseIntValue( | |
452 | - | if ((size( | |
452 | + | let cY = valueOrErrorMessage(addressFromString(bi[w]), "Wrong staking addr") | |
453 | + | let cZ = valueOrErrorMessage(addressFromString(bi[x]), "Wrong slippage addr") | |
454 | + | let dk = valueOrErrorMessage(addressFromString(bi[y]), "Wrong slippage addr") | |
455 | + | let dl = au() | |
456 | + | let bw = dl[q] | |
457 | + | let bx = dl[r] | |
458 | + | let by = parseIntValue(dl[s]) | |
459 | + | let bz = parseIntValue(dl[t]) | |
460 | + | if ((size(cM.payments) != 1)) | |
453 | 461 | then throw("1 payment expected") | |
454 | 462 | else { | |
455 | - | let | |
456 | - | let bt = toBase58String(value( | |
457 | - | let | |
458 | - | let | |
459 | - | let | |
463 | + | let cN = value(cM.payments[0]) | |
464 | + | let bt = toBase58String(value(cN.assetId)) | |
465 | + | let bX = cN.amount | |
466 | + | let dm = z(dh, by) | |
467 | + | let dn = z(di, bz) | |
460 | 468 | let bC = aP(bw) | |
461 | 469 | let bD = z(bC, by) | |
462 | 470 | let bE = aP(bx) | |
463 | 471 | let bF = z(bE, bz) | |
464 | - | let | |
465 | - | then (bC - | |
472 | + | let do = if ((bt == bw)) | |
473 | + | then (bC - bX) | |
466 | 474 | else bC | |
467 | - | let | |
468 | - | then (bE - | |
475 | + | let dp = if ((bt == bx)) | |
476 | + | then (bE - bX) | |
469 | 477 | else bE | |
470 | - | let | |
471 | - | let | |
472 | - | let | |
478 | + | let dq = invoke(dk, "calcD", [toString(do), toString(dp), "50", "100000000", "1"], nil) | |
479 | + | let dr = parseBigIntValue(ak(dq)) | |
480 | + | let ds = if ((bt == bw)) | |
473 | 481 | then { | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
477 | - | let | |
478 | - | parseBigIntValue(ak( | |
482 | + | let dt = z(bX, by) | |
483 | + | let du = dn | |
484 | + | let dv = (dt - dm) | |
485 | + | let dw = invoke(dk, "calcD", [toString((toBigInt(do) + toBigInt(C(dv, by)))), toString((toBigInt(dp) - toBigInt(C(du, bz)))), "50", "100000000", "1"], nil) | |
486 | + | parseBigIntValue(ak(dw)) | |
479 | 487 | } | |
480 | 488 | else { | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
485 | - | parseBigIntValue(ak( | |
489 | + | let dx = z(bX, bz) | |
490 | + | let du = (dx - dn) | |
491 | + | let dv = dm | |
492 | + | let dw = invoke(dk, "calcD", [toString((toBigInt(do) - toBigInt(C(dv, by)))), toString((toBigInt(dp) + toBigInt(C(du, bz)))), "50", "100000000", "1"], nil) | |
493 | + | parseBigIntValue(ak(dw)) | |
486 | 494 | } | |
487 | - | if (!(aU( | |
495 | + | if (!(aU(ds, dr, toBigInt(1000))._1)) | |
488 | 496 | then throw("D mismatch.") | |
489 | 497 | else { | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | let bO = | |
494 | - | let | |
495 | - | let | |
496 | - | let | |
497 | - | if (!( | |
498 | - | then throw(((("Too big slippage: " + toString( | |
498 | + | let da = cO(toString(cM.caller), toBase58String(cM.transactionId), AttachedPayment(fromBase58String(bw), dh), AttachedPayment(fromBase58String(bx), di), 50000000000, true, true, bX, bt) | |
499 | + | let dy = da._2 | |
500 | + | let db = da._7 | |
501 | + | let bO = da._9 | |
502 | + | let cv = da._10 | |
503 | + | let cw = da._11 | |
504 | + | let dz = aU(toBigInt(dy), toBigInt(dj), toBigInt(aX)) | |
505 | + | if (!(dz._1)) | |
506 | + | then throw(((("Too big slippage: " + toString(dz._3)) + " vs ") + toString(aX))) | |
499 | 507 | else { | |
500 | - | let | |
501 | - | let | |
502 | - | if (( | |
508 | + | let cu = toInt(dz._2) | |
509 | + | let dc = invoke(ar, "emit", [cu], nil) | |
510 | + | if ((dc == dc)) | |
503 | 511 | then { | |
504 | - | let | |
505 | - | then invoke( | |
512 | + | let dd = if ((cv > 0)) | |
513 | + | then invoke(cZ, "put", nil, [AttachedPayment(fromBase58String(bw), cv)]) | |
506 | 514 | else nil | |
507 | - | if (( | |
515 | + | if ((dd == dd)) | |
508 | 516 | then { | |
509 | - | let | |
510 | - | then invoke( | |
517 | + | let de = if ((cw > 0)) | |
518 | + | then invoke(cZ, "put", nil, [AttachedPayment(fromBase58String(bx), cw)]) | |
511 | 519 | else nil | |
512 | - | if (( | |
520 | + | if ((de == de)) | |
513 | 521 | then { | |
514 | - | let | |
522 | + | let df = if (cW) | |
515 | 523 | then { | |
516 | - | let | |
517 | - | if (( | |
524 | + | let dg = invoke(cY, "stake", nil, [AttachedPayment(db, cu)]) | |
525 | + | if ((dg == dg)) | |
518 | 526 | then nil | |
519 | 527 | else throw("Strict value is not equal to itself.") | |
520 | 528 | } | |
521 | - | else [ScriptTransfer( | |
522 | - | (bO ++ | |
529 | + | else [ScriptTransfer(cM.caller, cu, db)] | |
530 | + | (bO ++ df) | |
523 | 531 | } | |
524 | 532 | else throw("Strict value is not equal to itself.") | |
525 | 533 | } | |
526 | 534 | else throw("Strict value is not equal to itself.") | |
527 | 535 | } | |
528 | 536 | else throw("Strict value is not equal to itself.") | |
529 | 537 | } | |
530 | 538 | } | |
531 | 539 | } | |
532 | 540 | } | |
533 | 541 | ||
534 | 542 | ||
535 | 543 | ||
536 | - | @Callable( | |
537 | - | func putForFree ( | |
544 | + | @Callable(cM) | |
545 | + | func putForFree (dA) = if ((0 > dA)) | |
538 | 546 | then throw("Invalid slippage") | |
539 | - | else if ((size( | |
547 | + | else if ((size(cM.payments) != 2)) | |
540 | 548 | then throw("2 payments expected") | |
541 | 549 | else { | |
542 | - | let | |
543 | - | | |
550 | + | let da = cO(toString(cM.caller), toBase58String(cM.transactionId), AttachedPayment(value(cM.payments[0]).assetId, value(cM.payments[0]).amount), cM.payments[1], dA, false, false, 0, "") | |
551 | + | da._9 | |
544 | 552 | } | |
545 | 553 | ||
546 | 554 | ||
547 | 555 | ||
548 | - | @Callable( | |
556 | + | @Callable(cM) | |
549 | 557 | func get () = { | |
550 | - | let | |
551 | - | let | |
552 | - | let bN = | |
553 | - | let | |
554 | - | let bt = | |
555 | - | let bO = | |
556 | - | let | |
557 | - | if (( | |
558 | + | let ci = cL(cM) | |
559 | + | let dB = ci._1 | |
560 | + | let bN = ci._2 | |
561 | + | let bX = ci._3 | |
562 | + | let bt = ci._4 | |
563 | + | let bO = ci._5 | |
564 | + | let dC = invoke(ar, "burn", [bX], [AttachedPayment(bt, bX)]) | |
565 | + | if ((dC == dC)) | |
558 | 566 | then bO | |
559 | 567 | else throw("Strict value is not equal to itself.") | |
560 | 568 | } | |
561 | 569 | ||
562 | 570 | ||
563 | 571 | ||
564 | - | @Callable( | |
565 | - | func getOneTkn ( | |
572 | + | @Callable(cM) | |
573 | + | func getOneTkn (dD,dE,dF,dG,aX) = if ((size(cM.payments) != 1)) | |
566 | 574 | then throw("1 payment expected") | |
567 | 575 | else { | |
568 | 576 | let bi = au() | |
569 | 577 | let bv = bi[p] | |
570 | 578 | let bw = bi[q] | |
571 | 579 | let bx = bi[r] | |
572 | 580 | let by = parseIntValue(bi[s]) | |
573 | 581 | let bz = parseIntValue(bi[t]) | |
574 | 582 | let bA = bi[o] | |
575 | - | let | |
576 | - | let | |
577 | - | if (if (( | |
578 | - | then ( | |
583 | + | let dH = az() | |
584 | + | let dk = valueOrErrorMessage(addressFromString(dH[y]), "Wrong slippage address") | |
585 | + | if (if ((dG != bw)) | |
586 | + | then (dG != bx) | |
579 | 587 | else false) | |
580 | 588 | then throw("Invalid out asset") | |
581 | 589 | else { | |
582 | - | let | |
590 | + | let dI = if ((dG == bw)) | |
583 | 591 | then bw | |
584 | 592 | else bx | |
585 | - | let | |
586 | - | let R = | |
587 | - | let bs = toBase58String( | |
588 | - | let bt = value( | |
589 | - | let | |
593 | + | let cN = value(cM.payments[0]) | |
594 | + | let R = cM.caller | |
595 | + | let bs = toBase58String(cM.transactionId) | |
596 | + | let bt = value(cN.assetId) | |
597 | + | let bX = cN.amount | |
590 | 598 | if ((bv != toBase58String(bt))) | |
591 | 599 | then throw("Invalid LP") | |
592 | 600 | else { | |
593 | - | let | |
594 | - | let | |
595 | - | let | |
601 | + | let cS = br(toBase58String(cM.transactionId), toBase58String(bt), bX, cM.caller) | |
602 | + | let dJ = cS._1 | |
603 | + | let dK = cS._2 | |
596 | 604 | let bC = aP(bw) | |
597 | 605 | let bD = z(bC, by) | |
598 | 606 | let bE = aP(bx) | |
599 | 607 | let bF = z(bE, bz) | |
600 | - | let | |
601 | - | let | |
608 | + | let dr = invoke(dk, "calcD", [toString(bC), toString(bE), "50", "100000000", "1"], nil) | |
609 | + | let dL = if ((dG == bw)) | |
602 | 610 | then { | |
603 | - | let | |
604 | - | let | |
605 | - | if (!(aU(parseBigIntValue(ak( | |
611 | + | let dM = (dF - dJ) | |
612 | + | let ds = invoke(dk, "calcD", [toString((bC - dM)), toString((bE + dE)), "50", "100000000", "1"], nil) | |
613 | + | if (!(aU(parseBigIntValue(ak(ds)), parseBigIntValue(ak(dr)), toBigInt(1000))._1)) | |
606 | 614 | then throw("D mismatch") | |
607 | 615 | else { | |
608 | - | let | |
609 | - | let | |
610 | - | if (!( | |
611 | - | then throw(((("Too big slippage: " + toString( | |
612 | - | else $Tuple2(toInt( | |
616 | + | let dN = (dJ + dD) | |
617 | + | let dz = aU(toBigInt(dN), toBigInt(dF), toBigInt(aX)) | |
618 | + | if (!(dz._1)) | |
619 | + | then throw(((("Too big slippage: " + toString(dz._3)) + " vs ") + toString(aX))) | |
620 | + | else $Tuple2(toInt(dz._2), 0) | |
613 | 621 | } | |
614 | 622 | } | |
615 | 623 | else { | |
616 | - | let | |
617 | - | let | |
618 | - | if (!(aU(parseBigIntValue(ak( | |
624 | + | let dO = (dF - dK) | |
625 | + | let ds = invoke(dk, "calcD", [toString((bC + dD)), toString((bE - dO)), "50", "100000000", "1"], nil) | |
626 | + | if (!(aU(parseBigIntValue(ak(ds)), parseBigIntValue(ak(dr)), toBigInt(5000))._1)) | |
619 | 627 | then throw("D mismatch.") | |
620 | 628 | else { | |
621 | - | let | |
622 | - | let | |
623 | - | if (!( | |
624 | - | then throw(((("Too big slippage: " + toString( | |
625 | - | else $Tuple2(0, toInt( | |
629 | + | let dN = (dK + dE) | |
630 | + | let dz = aU(toBigInt(dN), toBigInt(dF), toBigInt(aX)) | |
631 | + | if (!(dz._1)) | |
632 | + | then throw(((("Too big slippage: " + toString(dz._3)) + " vs ") + toString(aX))) | |
633 | + | else $Tuple2(0, toInt(dz._2)) | |
626 | 634 | } | |
627 | 635 | } | |
628 | 636 | let bG = aR(bF, bD) | |
629 | 637 | let bH = C(bG, b) | |
630 | - | let bO = [ScriptTransfer(R, if (( | |
631 | - | then | |
632 | - | else | |
638 | + | let bO = [ScriptTransfer(R, if ((dI == bw)) | |
639 | + | then dL._1 | |
640 | + | else dL._2, if ((dI == "WAVES")) | |
633 | 641 | then unit | |
634 | - | else fromBase58String( | |
635 | - | let | |
636 | - | if (( | |
642 | + | else fromBase58String(dI)), StringEntry(T(toString(R), bs), aL(dL._1, dL._2, bX, bH, height, lastBlock.timestamp)), IntegerEntry(M(), bH), IntegerEntry(N(height, lastBlock.timestamp), bH)] | |
643 | + | let dP = invoke(ar, "burn", [bX], [AttachedPayment(bt, bX)]) | |
644 | + | if ((dP == dP)) | |
637 | 645 | then bO | |
638 | 646 | else throw("Strict value is not equal to itself.") | |
639 | 647 | } | |
640 | 648 | } | |
641 | 649 | } | |
642 | 650 | ||
643 | 651 | ||
644 | 652 | ||
645 | - | @Callable( | |
646 | - | func getNoLess ( | |
647 | - | let | |
648 | - | let bM = | |
649 | - | let bN = | |
650 | - | let | |
651 | - | let bt = | |
652 | - | let bO = | |
653 | - | if (( | |
654 | - | then throw(((("Failed: " + toString(bM)) + " < ") + toString( | |
655 | - | else if (( | |
656 | - | then throw(((("Failed: " + toString(bN)) + " < ") + toString( | |
653 | + | @Callable(cM) | |
654 | + | func getNoLess (dQ,dR) = { | |
655 | + | let ci = cL(cM) | |
656 | + | let bM = ci._1 | |
657 | + | let bN = ci._2 | |
658 | + | let bX = ci._3 | |
659 | + | let bt = ci._4 | |
660 | + | let bO = ci._5 | |
661 | + | if ((dQ > bM)) | |
662 | + | then throw(((("Failed: " + toString(bM)) + " < ") + toString(dQ))) | |
663 | + | else if ((dR > bN)) | |
664 | + | then throw(((("Failed: " + toString(bN)) + " < ") + toString(dR))) | |
657 | 665 | else { | |
658 | - | let | |
659 | - | if (( | |
666 | + | let dC = invoke(ar, "burn", [bX], [AttachedPayment(bt, bX)]) | |
667 | + | if ((dC == dC)) | |
660 | 668 | then bO | |
661 | 669 | else throw("Strict value is not equal to itself.") | |
662 | 670 | } | |
663 | 671 | } | |
664 | 672 | ||
665 | 673 | ||
666 | 674 | ||
667 | - | @Callable( | |
668 | - | func unstakeAndGet ( | |
669 | - | let | |
675 | + | @Callable(cM) | |
676 | + | func unstakeAndGet (dS) = { | |
677 | + | let dT = if ((size(cM.payments) != 0)) | |
670 | 678 | then throw("No payments expected") | |
671 | 679 | else true | |
672 | - | if (( | |
680 | + | if ((dT == dT)) | |
673 | 681 | then { | |
674 | 682 | let bi = au() | |
675 | - | let | |
676 | - | let | |
677 | - | let | |
678 | - | let | |
679 | - | if (( | |
683 | + | let dU = az() | |
684 | + | let db = fromBase58String(bi[p]) | |
685 | + | let dV = valueOrErrorMessage(addressFromString(dU[w]), "Wrong staking address.") | |
686 | + | let dW = invoke(dV, "unstake", [toBase58String(db), dS], nil) | |
687 | + | if ((dW == dW)) | |
680 | 688 | then { | |
681 | - | let | |
682 | - | let bA = parseIntValue( | |
683 | - | let bO = | |
684 | - | let | |
689 | + | let cS = br(toBase58String(cM.transactionId), toBase58String(db), dS, cM.caller) | |
690 | + | let bA = parseIntValue(cS._9) | |
691 | + | let bO = cS._10 | |
692 | + | let dX = if (if (as()) | |
685 | 693 | then true | |
686 | 694 | else (bA == m)) | |
687 | 695 | then throw(("Blocked by admin: " + toString(bA))) | |
688 | 696 | else true | |
689 | - | if (( | |
697 | + | if ((dX == dX)) | |
690 | 698 | then { | |
691 | - | let | |
692 | - | if (( | |
699 | + | let dC = invoke(ar, "burn", [dS], [AttachedPayment(db, dS)]) | |
700 | + | if ((dC == dC)) | |
693 | 701 | then bO | |
694 | 702 | else throw("Strict value is not equal to itself.") | |
695 | 703 | } | |
696 | 704 | else throw("Strict value is not equal to itself.") | |
697 | 705 | } | |
698 | 706 | else throw("Strict value is not equal to itself.") | |
699 | 707 | } | |
700 | 708 | else throw("Strict value is not equal to itself.") | |
701 | 709 | } | |
702 | 710 | ||
703 | 711 | ||
704 | 712 | ||
705 | - | @Callable( | |
706 | - | func activate ( | |
713 | + | @Callable(cM) | |
714 | + | func activate (dY,dZ) = if ((toString(cM.caller) != toString(ar))) | |
707 | 715 | then throw("permissions denied") | |
708 | - | else $Tuple2([StringEntry(U(), | |
716 | + | else $Tuple2([StringEntry(U(), dY), StringEntry(V(), dZ)], "success") | |
709 | 717 | ||
710 | 718 | ||
711 | 719 | ||
712 | - | @Callable( | |
720 | + | @Callable(cM) | |
713 | 721 | func getPoolConfigWrapperREADONLY () = $Tuple2(nil, au()) | |
714 | 722 | ||
715 | 723 | ||
716 | 724 | ||
717 | - | @Callable( | |
725 | + | @Callable(cM) | |
718 | 726 | func getAccBalanceWrapperREADONLY (aQ) = $Tuple2(nil, aP(aQ)) | |
719 | 727 | ||
720 | 728 | ||
721 | 729 | ||
722 | - | @Callable( | |
730 | + | @Callable(cM) | |
723 | 731 | func calcPricesWrapperREADONLY (bc,bd,bh) = { | |
724 | 732 | let bq = bg(bc, bd, bh) | |
725 | 733 | $Tuple2(nil, [toString(bq[0]), toString(bq[1]), toString(bq[2])]) | |
726 | 734 | } | |
727 | 735 | ||
728 | 736 | ||
729 | 737 | ||
730 | - | @Callable( | |
738 | + | @Callable(cM) | |
731 | 739 | func fromX18WrapperREADONLY (D,E) = $Tuple2(nil, C(parseBigIntValue(D), E)) | |
732 | 740 | ||
733 | 741 | ||
734 | 742 | ||
735 | - | @Callable( | |
743 | + | @Callable(cM) | |
736 | 744 | func toX18WrapperREADONLY (A,B) = $Tuple2(nil, toString(z(A, B))) | |
737 | 745 | ||
738 | 746 | ||
739 | 747 | ||
740 | - | @Callable( | |
748 | + | @Callable(cM) | |
741 | 749 | func calcPriceBigIntWrapperREADONLY (aS,aT) = $Tuple2(nil, toString(aR(parseBigIntValue(aS), parseBigIntValue(aT)))) | |
742 | 750 | ||
743 | 751 | ||
744 | - | ||
745 | - | @Callable(cJ) | |
746 | - | func estimatePutOperationWrapperREADONLY (bs,aX,bQ,bR,bS,bT,R,bU,bV) = $Tuple2(nil, bP(bs, aX, bQ, bR, bS, bT, R, bU, bV)) | |
747 | - | ||
748 | - | ||
749 | - | @Verifier(dY) | |
750 | - | func dZ () = { | |
751 | - | let al = dY | |
752 | + | @Verifier(ea) | |
753 | + | func eb () = { | |
754 | + | let al = ea | |
752 | 755 | if ($isInstanceOf(al, "Order")) | |
753 | 756 | then { | |
754 | - | let | |
755 | - | let | |
756 | - | let ah = | |
757 | - | let ai = sigVerify( | |
758 | - | let aj = sigVerify( | |
757 | + | let cz = al | |
758 | + | let ec = at() | |
759 | + | let ah = cy(cz) | |
760 | + | let ai = sigVerify(cz.bodyBytes, cz.proofs[0], cz.senderPublicKey) | |
761 | + | let aj = sigVerify(cz.bodyBytes, cz.proofs[1], ec) | |
759 | 762 | if (if (if (ah) | |
760 | 763 | then ai | |
761 | 764 | else false) | |
762 | 765 | then aj | |
763 | 766 | else false) | |
764 | 767 | then true | |
765 | 768 | else ag(ah, ai, aj) | |
766 | 769 | } | |
767 | 770 | else { | |
768 | - | let | |
769 | - | if (( | |
770 | - | then sigVerify( | |
771 | - | else sigVerify( | |
771 | + | let ed = valueOrElse(getString(this, L()), i) | |
772 | + | if ((ed == i)) | |
773 | + | then sigVerify(ea.bodyBytes, ea.proofs[0], ea.senderPublicKey) | |
774 | + | else sigVerify(ea.bodyBytes, ea.proofs[0], fromBase58String(ed)) | |
772 | 775 | } | |
773 | 776 | } | |
774 | 777 |
github/deemru/w8io/169f3d6 280.27 ms ◑![]()