tx · D8kuC3QNL1qjdaTHdEtyw8LuhBLPfQFvJ1Vf1MPGmBmz

3MyBf8rGo9HC6bAB4vZ18iL9QaJYL7Q1xVM:  -0.01400000 Waves

2021.10.07 13:39 [1735703] smart account 3MyBf8rGo9HC6bAB4vZ18iL9QaJYL7Q1xVM > SELF 0.00000000 Waves

{ "type": 13, "id": "D8kuC3QNL1qjdaTHdEtyw8LuhBLPfQFvJ1Vf1MPGmBmz", "fee": 1400000, "feeAssetId": null, "timestamp": 1633603248277, "version": 1, "sender": "3MyBf8rGo9HC6bAB4vZ18iL9QaJYL7Q1xVM", "senderPublicKey": "FsSGFph7Y6SYdi3n3F5UddoKEYWyMrJAqiKV8t9qqgqB", "proofs": [ "ncKaHsoBFF82vRbGFhastmxpEyodtdWb7GvtNdXywvGY1s4zHyGiaDsijvBzLgyW2qjgzkTknF8jSbVu42vUdTh" ], "script": "base64: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AAEFAAAAAWgJAARMAAAAAgkAAaQAAAABBQAAAAl0aW1lc3RhbXAFAAAAA25pbAUAAAADU0VQAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAIAAAARJXNfX2ZhY3RvcnlDb25maWcBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQAAABNwb29sQ29udHJhY3RBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MCAAAAIF9fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJMcEFzc2V0AQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAAAlpQW10QXNzZXQAAAALaVByaWNlQXNzZXQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJWQlZCVzX18FAAAACWlBbXRBc3NldAIAAAACX18FAAAAC2lQcmljZUFzc2V0AgAAAAhfX2NvbmZpZwEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEAAAAMYmFzZUFzc2V0U3RyCQABLAAAAAICAAAAKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAAAADGJhc2VBc3NldFN0cgEAAAATa2V5QWxsUG9vbHNTaHV0ZG93bgAAAAACAAAADCVzX19zaHV0ZG93bgEAAAANa2V5UG9vbFdlaWdodAAAAAEAAAAPY29udHJhY3RBZGRyZXNzCQABLAAAAAICAAAAEiVzJXNfX3Bvb2xXZWlnaHRfXwUAAAAPY29udHJhY3RBZGRyZXNzAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACm1hbmRhdG9yeSAJAAQlAAAAAQUAAAAHYWRkcmVzcwIAAAABLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAADGdldEludE9yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAKbWFuZGF0b3J5IAkABCUAAAABBQAAAAdhZGRyZXNzAgAAAAEuBQAAAANrZXkCAAAADyBpcyBub3QgZGVmaW5lZAAAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAEmtleUZhY3RvcnlDb250cmFjdAAAAAABAAAAEGlzR2xvYmFsU2h1dGRvd24AAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAE2tleUFsbFBvb2xzU2h1dGRvd24AAAAABwEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAACGFtdEFzc2V0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAC2tleUFtdEFzc2V0AAAAAAQAAAAKcHJpY2VBc3NldAkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAAA1rZXlQcmljZUFzc2V0AAAAAAQAAAALaVByaWNlQXNzZXQJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAKcHJpY2VBc3NldAQAAAAJaUFtdEFzc2V0CQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACGFtdEFzc2V0CQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAAAlpQW10QXNzZXQJAAGkAAAAAQUAAAALaVByaWNlQXNzZXQFAAAAA1NFUAEAAAAQZ2V0RmFjdG9yeUNvbmZpZwAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVABAAAAEWRhdGFQdXRBY3Rpb25JbmZvAAAACgAAAA1pbkFtdEFzc2V0QW10AAAAD2luUHJpY2VBc3NldEFtdAAAAAhvdXRMcEFtdAAAAAVwcmljZQAAAB1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlcgAAABVzbGlwcGFnZVRvbGVyYW5jZVJlYWwAAAAIdHhIZWlnaHQAAAALdHhUaW1lc3RhbXAAAAASc2xpcGFnZUFtdEFzc2V0QW10AAAAFHNsaXBhZ2VQcmljZUFzc2V0QW10CQAEuQAAAAIJAARMAAAAAgIAAAASJWQlZCVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAANaW5BbXRBc3NldEFtdAkABEwAAAACCQABpAAAAAEFAAAAD2luUHJpY2VBc3NldEFtdAkABEwAAAACCQABpAAAAAEFAAAACG91dExwQW10CQAETAAAAAIJAAGkAAAAAQUAAAAFcHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAB1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlcgkABEwAAAACCQABpAAAAAEFAAAAFXNsaXBwYWdlVG9sZXJhbmNlUmVhbAkABEwAAAACCQABpAAAAAEFAAAACHR4SGVpZ2h0CQAETAAAAAIJAAGkAAAAAQUAAAALdHhUaW1lc3RhbXAJAARMAAAAAgkAAaQAAAABBQAAABJzbGlwYWdlQW10QXNzZXRBbXQJAARMAAAAAgkAAaQAAAABBQAAABRzbGlwYWdlUHJpY2VBc3NldEFtdAUAAAADbmlsBQAAAANTRVABAAAAEWRhdGFHZXRBY3Rpb25JbmZvAAAABgAAAA5vdXRBbXRBc3NldEFtdAAAABBvdXRQcmljZUFzc2V0QW10AAAAB2luTHBBbXQAAAAFcHJpY2UAAAAIdHhIZWlnaHQAAAALdHhUaW1lc3RhbXAJAAS5AAAAAgkABEwAAAACAgAAAAwlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAA5vdXRBbXRBc3NldEFtdAkABEwAAAACCQABpAAAAAEFAAAAEG91dFByaWNlQXNzZXRBbXQJAARMAAAAAgkAAaQAAAABBQAAAAdpbkxwQW10CQAETAAAAAIJAAGkAAAAAQUAAAAFcHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAAh0eEhlaWdodAkABEwAAAACCQABpAAAAAEFAAAAC3R4VGltZXN0YW1wBQAAAANuaWwFAAAAA1NFUAEAAAANZ2V0QWNjQmFsYW5jZQAAAAEAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAAHYXNzZXRJZAIAAAAFV0FWRVMICQAD7wAAAAEFAAAABHRoaXMAAAAJYXZhaWxhYmxlCQAD8AAAAAIFAAAABHRoaXMJAAJZAAAAAQUAAAAHYXNzZXRJZAEAAAAPY2FsY1ByaWNlQmlnSW50AAAAAwAAABNwcmljZUFzc2V0TG9ja2VkQW10AAAAEmFtdEFzc2V0bExvY2tlZEFtdAAAAAtyZXN1bHRTY2FsZQkAATwAAAADBQAAABNwcmljZUFzc2V0TG9ja2VkQW10BQAAAAtyZXN1bHRTY2FsZQUAAAASYW10QXNzZXRsTG9ja2VkQW10AQAAABBwcml2YXRlQ2FsY1ByaWNlAAAABAAAAAthbXRBc3NldERjbQAAAA1wcmljZUFzc2V0RGNtAAAAC2FtdEFzc2V0QW10AAAADXByaWNlQXNzZXRBbXQEAAAADmFtdEFzc2V0QW10WDE4CQEAAAAFdG9YMTgAAAACBQAAAAthbXRBc3NldEFtdAUAAAALYW10QXNzZXREY20EAAAAEHByaWNlQXNzZXRBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAADXByaWNlQXNzZXRBbXQFAAAADXByaWNlQXNzZXREY20JAAGgAAAAAQkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAMFAAAAEHByaWNlQXNzZXRBbXRYMTgFAAAADmFtdEFzc2V0QW10WDE4BQAAAAxzY2FsZThCaWdJbnQBAAAACmNhbGNQcmljZXMAAAADAAAAC2FtdEFzc2V0QW10AAAADXByaWNlQXNzZXRBbXQAAAAFbHBBbXQEAAAAA2NmZwkBAAAADWdldFBvb2xDb25maWcAAAAABAAAAAthbXRBc3NldERjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAAOaWR4QW10QXNzZXREY20EAAAADXByaWNlQXNzZXREY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAAEGlkeFByaWNlQXNzZXREY20EAAAACXBvb2xQcmljZQkBAAAAEHByaXZhdGVDYWxjUHJpY2UAAAAEBQAAAAthbXRBc3NldERjbQUAAAANcHJpY2VBc3NldERjbQUAAAALYW10QXNzZXRBbXQFAAAADXByaWNlQXNzZXRBbXQEAAAADmFtdEFzc2V0QW10WDE4CQEAAAAFdG9YMTgAAAACBQAAAAthbXRBc3NldEFtdAUAAAALYW10QXNzZXREY20EAAAAEHByaWNlQXNzZXRBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAADXByaWNlQXNzZXRBbXQFAAAADXByaWNlQXNzZXREY20EAAAACGxwQW10WDE4CQEAAAAFdG9YMTgAAAACBQAAAAVscEFtdAUAAAAGc2NhbGU4BAAAABFscFByaWNlSW5BbXRBc3NldAkAAaAAAAABCQEAAAAPY2FsY1ByaWNlQmlnSW50AAAAAwUAAAAOYW10QXNzZXRBbXRYMTgFAAAACGxwQW10WDE4BQAAAAxzY2FsZThCaWdJbnQEAAAAE2xwUHJpY2VJblByaWNlQXNzZXQJAAGgAAAAAQkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAMFAAAAEHByaWNlQXNzZXRBbXRYMTgFAAAACGxwQW10WDE4BQAAAAxzY2FsZThCaWdJbnQJAARMAAAAAgUAAAAJcG9vbFByaWNlCQAETAAAAAIFAAAAEWxwUHJpY2VJbkFtdEFzc2V0CQAETAAAAAIFAAAAE2xwUHJpY2VJblByaWNlQXNzZXQFAAAAA25pbAEAAAAUZXN0aW1hdGVHZXRPcGVyYXRpb24AAAADAAAAEHBheW1lbnRMcEFzc2V0SWQAAAAMcGF5bWVudExwQW10AAAAC3VzZXJBZGRyZXNzBAAAAA5wb29sQ29uZmlnTGlzdAkBAAAADWdldFBvb2xDb25maWcAAAAABAAAAAlscEFzc2V0SWQJAAGRAAAAAgUAAAAOcG9vbENvbmZpZ0xpc3QFAAAAEGlkeFBvb2xMUEFzc2V0SWQEAAAACmFtdEFzc2V0SWQJAAGRAAAAAgUAAAAOcG9vbENvbmZpZ0xpc3QFAAAADWlkeEFtdEFzc2V0SWQEAAAADHByaWNlQXNzZXRJZAkAAZEAAAACBQAAAA5wb29sQ29uZmlnTGlzdAUAAAAPaWR4UHJpY2VBc3NldElkBAAAAAtpQW10QXNzZXRJZAkAAZEAAAACBQAAAA5wb29sQ29uZmlnTGlzdAUAAAAOaWR4SUFtdEFzc2V0SWQEAAAADWlQcmljZUFzc2V0SWQJAAGRAAAAAgUAAAAOcG9vbENvbmZpZ0xpc3QFAAAAEGlkeElQcmljZUFzc2V0SWQEAAAAC2FtdEFzc2V0RGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAOcG9vbENvbmZpZ0xpc3QFAAAADmlkeEFtdEFzc2V0RGNtBAAAAA1wcmljZUFzc2V0RGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAOcG9vbENvbmZpZ0xpc3QFAAAAEGlkeFByaWNlQXNzZXREY20EAAAACnBvb2xTdGF0dXMJAAGRAAAAAgUAAAAOcG9vbENvbmZpZ0xpc3QFAAAADWlkeFBvb2xTdGF0dXMEAAAADXBvb2xMUEJhbGFuY2UICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAAlscEFzc2V0SWQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAACWxwQXNzZXRJZAIAAAAOIGRvZXNuJ3QgZXhpc3QAAAAIcXVhbnRpdHkDCQEAAAACIT0AAAACBQAAAAlscEFzc2V0SWQFAAAAEHBheW1lbnRMcEFzc2V0SWQJAAACAAAAAQIAAAAVSW52YWxpZCBhc3NldCBwYXNzZWQuBAAAAA9hbXRBc3NldEJhbGFuY2UJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAKYW10QXNzZXRJZAQAAAASYW10QXNzZXRCYWxhbmNlWDE4CQEAAAAFdG9YMTgAAAACBQAAAA9hbXRBc3NldEJhbGFuY2UFAAAAC2FtdEFzc2V0RGNtBAAAABFwcmljZUFzc2V0QmFsYW5jZQkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAxwcmljZUFzc2V0SWQEAAAAFHByaWNlQXNzZXRCYWxhbmNlWDE4CQEAAAAFdG9YMTgAAAACBQAAABFwcmljZUFzc2V0QmFsYW5jZQUAAAANcHJpY2VBc3NldERjbQQAAAAIY3VyUHJpY2UJAAGgAAAAAQkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAMFAAAAFHByaWNlQXNzZXRCYWxhbmNlWDE4BQAAABJhbXRBc3NldEJhbGFuY2VYMTgFAAAADHNjYWxlOEJpZ0ludAQAAAAPcGF5bWVudExwQW10WDE4CQEAAAAFdG9YMTgAAAACBQAAAAxwYXltZW50THBBbXQFAAAABnNjYWxlOAQAAAAQcG9vbExQQmFsYW5jZVgxOAkBAAAABXRvWDE4AAAAAgUAAAANcG9vbExQQmFsYW5jZQUAAAAGc2NhbGU4BAAAAA5vdXRBbXRBc3NldEFtdAkAATwAAAADBQAAABJhbXRBc3NldEJhbGFuY2VYMTgFAAAAD3BheW1lbnRMcEFtdFgxOAUAAAAQcG9vbExQQmFsYW5jZVgxOAQAAAAQb3V0UHJpY2VBc3NldEFtdAkAATwAAAADBQAAABRwcmljZUFzc2V0QmFsYW5jZVgxOAUAAAAPcGF5bWVudExwQW10WDE4BQAAABBwb29sTFBCYWxhbmNlWDE4BAAAABNvdXRBbXRBc3NldEFtdEZpbmFsCQEAAAAHZnJvbVgxOAAAAAIFAAAADm91dEFtdEFzc2V0QW10BQAAAAthbXRBc3NldERjbQQAAAAVb3V0UHJpY2VBc3NldEFtdEZpbmFsCQEAAAAHZnJvbVgxOAAAAAIFAAAAEG91dFByaWNlQXNzZXRBbXQFAAAADXByaWNlQXNzZXREY20JAAUdAAAACwUAAAATb3V0QW10QXNzZXRBbXRGaW5hbAUAAAAVb3V0UHJpY2VBc3NldEFtdEZpbmFsBQAAAAtpQW10QXNzZXRJZAUAAAANaVByaWNlQXNzZXRJZAUAAAAKYW10QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9hbXRBc3NldEJhbGFuY2UFAAAAEXByaWNlQXNzZXRCYWxhbmNlBQAAAA1wb29sTFBCYWxhbmNlBQAAAAhjdXJQcmljZQUAAAAKcG9vbFN0YXR1cwEAAAAUZXN0aW1hdGVQdXRPcGVyYXRpb24AAAAHAAAAEXNsaXBwYWdlVG9sZXJhbmNlAAAADWluQW10QXNzZXRBbXQAAAAMaW5BbXRBc3NldElkAAAAD2luUHJpY2VBc3NldEFtdAAAAA5pblByaWNlQXNzZXRJZAAAAAt1c2VyQWRkcmVzcwAAAAppc0V2YWx1YXRlBAAAAANjZmcJAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAJbHBBc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAABBpZHhQb29sTFBBc3NldElkBAAAAAphbXRBc3NldElkCQABkQAAAAIFAAAAA2NmZwUAAAANaWR4QW10QXNzZXRJZAQAAAAMcHJpY2VBc3NldElkCQABkQAAAAIFAAAAA2NmZwUAAAAPaWR4UHJpY2VBc3NldElkBAAAAAtpQW10QXNzZXRJZAkAAZEAAAACBQAAAANjZmcFAAAADmlkeElBbXRBc3NldElkBAAAAA1pUHJpY2VBc3NldElkCQABkQAAAAIFAAAAA2NmZwUAAAAQaWR4SVByaWNlQXNzZXRJZAQAAAALYW10QXNzZXREY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAADmlkeEFtdEFzc2V0RGNtBAAAAA1wcmljZUFzc2V0RGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAABBpZHhQcmljZUFzc2V0RGNtBAAAAApwb29sU3RhdHVzCQABkQAAAAIFAAAAA2NmZwUAAAANaWR4UG9vbFN0YXR1cwQAAAANcG9vbExQQmFsYW5jZQgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+wAAAABBQAAAAlscEFzc2V0SWQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAJAAJYAAAAAQUAAAAJbHBBc3NldElkAgAAAA4gZG9lc24ndCBleGlzdAAAAAhxdWFudGl0eQMDCQEAAAACIT0AAAACBQAAAAphbXRBc3NldElkBQAAAAxpbkFtdEFzc2V0SWQGCQEAAAACIT0AAAACBQAAAAxwcmljZUFzc2V0SWQFAAAADmluUHJpY2VBc3NldElkCQAAAgAAAAECAAAAIkludmFsaWQgYW10IG9yIHByaWNlIGFzc2V0IHBhc3NlZC4EAAAAEmFjY0FtdEFzc2V0QmFsYW5jZQMFAAAACmlzRXZhbHVhdGUJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAKYW10QXNzZXRJZAkAAGUAAAACCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAACmFtdEFzc2V0SWQFAAAADWluQW10QXNzZXRBbXQEAAAAFGFjY1ByaWNlQXNzZXRCYWxhbmNlAwUAAAAKaXNFdmFsdWF0ZQkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAxwcmljZUFzc2V0SWQJAABlAAAAAgkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAxwcmljZUFzc2V0SWQFAAAAD2luUHJpY2VBc3NldEFtdAQAAAAQaW5BbXRBc3NldEFtdFgxOAkBAAAABXRvWDE4AAAAAgUAAAANaW5BbXRBc3NldEFtdAUAAAALYW10QXNzZXREY20EAAAAEmluUHJpY2VBc3NldEFtdFgxOAkBAAAABXRvWDE4AAAAAgUAAAAPaW5QcmljZUFzc2V0QW10BQAAAA1wcmljZUFzc2V0RGNtBAAAAAl1c2VyUHJpY2UJAAGgAAAAAQkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAMFAAAAEmluUHJpY2VBc3NldEFtdFgxOAUAAAAQaW5BbXRBc3NldEFtdFgxOAUAAAAMc2NhbGU4QmlnSW50BAAAABVhY2NBbXRBc3NldEJhbGFuY2VYMTgJAQAAAAV0b1gxOAAAAAIFAAAAEmFjY0FtdEFzc2V0QmFsYW5jZQUAAAALYW10QXNzZXREY20EAAAAF2FjY1ByaWNlQXNzZXRCYWxhbmNlWDE4CQEAAAAFdG9YMTgAAAACBQAAABRhY2NQcmljZUFzc2V0QmFsYW5jZQUAAAANcHJpY2VBc3NldERjbQQAAAAIY3VyUHJpY2UDCQAAAAAAAAIFAAAADXBvb2xMUEJhbGFuY2UAAAAAAAAAAAAAAAAAAAAAAAAJAAGgAAAAAQkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAMFAAAAF2FjY1ByaWNlQXNzZXRCYWxhbmNlWDE4BQAAABVhY2NBbXRBc3NldEJhbGFuY2VYMTgFAAAADHNjYWxlOEJpZ0ludAQAAAAIc2xpcHBhZ2UDCQAAAAAAAAIFAAAACGN1clByaWNlAAAAAAAAAAAAAAAAAAAAAAAAAwkAAGYAAAACBQAAAAhjdXJQcmljZQUAAAAJdXNlclByaWNlCQAAawAAAAMJAABlAAAAAgUAAAAIY3VyUHJpY2UFAAAACXVzZXJQcmljZQUAAAAGc2NhbGU4BQAAAAhjdXJQcmljZQkAAGsAAAADCQAAZQAAAAIFAAAACXVzZXJQcmljZQUAAAAIY3VyUHJpY2UFAAAABnNjYWxlOAUAAAAIY3VyUHJpY2UDAwkBAAAAAiE9AAAAAgUAAAAIY3VyUHJpY2UAAAAAAAAAAAAJAABmAAAAAgUAAAAIc2xpcHBhZ2UFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA9QcmljZSBzbGlwcGFnZSAJAAGkAAAAAQUAAAAIc2xpcHBhZ2UCAAAAHiBleGNlZWRlZCB0aGUgcGFzc2VkIGxpbWl0IG9mIAkAAaQAAAABBQAAABFzbGlwcGFnZVRvbGVyYW5jZQQAAAADcmVzAwkAAAAAAAACBQAAAA1wb29sTFBCYWxhbmNlAAAAAAAAAAAABAAAAAtscFJlc3VsdEJ1ZgkAAHYAAAAGCQABOQAAAAIFAAAAEGluQW10QXNzZXRBbXRYMTgFAAAAEmluUHJpY2VBc3NldEFtdFgxOAAAAAAAAAAAAAkAATYAAAABAAAAAAAAAAAFAAAAAAAAAAABAAAAAAAAAAAABQAAAARET1dOCQAFFgAAAAQJAQAAAAdmcm9tWDE4AAAAAgUAAAALbHBSZXN1bHRCdWYFAAAABnNjYWxlOAkBAAAAB2Zyb21YMTgAAAACBQAAABBpbkFtdEFzc2V0QW10WDE4BQAAAAthbXRBc3NldERjbQkBAAAAB2Zyb21YMTgAAAACBQAAABJpblByaWNlQXNzZXRBbXRYMTgFAAAADXByaWNlQXNzZXREY20JAAGgAAAAAQkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAMJAAE3AAAAAgUAAAAXYWNjUHJpY2VBc3NldEJhbGFuY2VYMTgFAAAAEmluUHJpY2VBc3NldEFtdFgxOAkAATcAAAACBQAAABVhY2NBbXRBc3NldEJhbGFuY2VYMTgFAAAAEGluQW10QXNzZXRBbXRYMTgFAAAADHNjYWxlOEJpZ0ludAQAAAAQcG9vbExQQmFsYW5jZVgxOAkBAAAABXRvWDE4AAAAAgUAAAANcG9vbExQQmFsYW5jZQUAAAAGc2NhbGU4BAAAAAtjdXJQcmljZVgxOAkBAAAABXRvWDE4AAAAAgUAAAAIY3VyUHJpY2UFAAAABnNjYWxlOAQAAAAGcEVxQnlBCQABPAAAAAMFAAAAC2N1clByaWNlWDE4BQAAABBpbkFtdEFzc2V0QW10WDE4BQAAAAdzY2FsZTE4BAAAAA5yZXNBc3NldHNUb1B1dAMJAAE/AAAAAgUAAAAGcEVxQnlBBQAAABJpblByaWNlQXNzZXRBbXRYMTgJAAUUAAAAAgkAATwAAAADBQAAABJpblByaWNlQXNzZXRBbXRYMTgFAAAAB3NjYWxlMTgFAAAAC2N1clByaWNlWDE4BQAAABJpblByaWNlQXNzZXRBbXRYMTgJAAUUAAAAAgUAAAAQaW5BbXRBc3NldEFtdFgxOAUAAAAGcEVxQnlBBAAAAAhscFJlc3VsdAkBAAAAB2Zyb21YMTgAAAACCQABPAAAAAMFAAAAEHBvb2xMUEJhbGFuY2VYMTgIBQAAAA5yZXNBc3NldHNUb1B1dAAAAAJfMgUAAAAXYWNjUHJpY2VBc3NldEJhbGFuY2VYMTgFAAAABnNjYWxlOAkABRYAAAAEBQAAAAhscFJlc3VsdAkBAAAAB2Zyb21YMTgAAAACCAUAAAAOcmVzQXNzZXRzVG9QdXQAAAACXzEFAAAAC2FtdEFzc2V0RGNtCQEAAAAHZnJvbVgxOAAAAAIIBQAAAA5yZXNBc3NldHNUb1B1dAAAAAJfMgUAAAANcHJpY2VBc3NldERjbQkAAaAAAAABCQEAAAAPY2FsY1ByaWNlQmlnSW50AAAAAwkAATcAAAACBQAAABdhY2NQcmljZUFzc2V0QmFsYW5jZVgxOAgFAAAADnJlc0Fzc2V0c1RvUHV0AAAAAl8yCQABNwAAAAIFAAAAFWFjY0FtdEFzc2V0QmFsYW5jZVgxOAgFAAAADnJlc0Fzc2V0c1RvUHV0AAAAAl8xBQAAAAxzY2FsZThCaWdJbnQDCQAAZwAAAAIAAAAAAAAAAAAIBQAAAANyZXMAAAACXzEJAAACAAAAAQIAAAA2SW52YWxpZCBjYWxjdWxhdGlvbnMuIExQIGNhbGN1bGF0ZWQgaXMgbGVzcyB0aGFuIHplcm8uCQAFHgAAAAwIBQAAAANyZXMAAAACXzEIBQAAAANyZXMAAAACXzQFAAAAEmFjY0FtdEFzc2V0QmFsYW5jZQUAAAAUYWNjUHJpY2VBc3NldEJhbGFuY2UFAAAADXBvb2xMUEJhbGFuY2UFAAAAC2lBbXRBc3NldElkBQAAAA1pUHJpY2VBc3NldElkBQAAAAlscEFzc2V0SWQFAAAACHNsaXBwYWdlBQAAAApwb29sU3RhdHVzCAUAAAADcmVzAAAAAl8yCAUAAAADcmVzAAAAAl8zAQAAABt2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQAAAABAAAABW9yZGVyBAAAAANjZmcJAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAKYW10QXNzZXRJZAkAAZEAAAACBQAAAANjZmcFAAAADWlkeEFtdEFzc2V0SWQEAAAADHByaWNlQXNzZXRJZAkAAZEAAAACBQAAAANjZmcFAAAAD2lkeFByaWNlQXNzZXRJZAQAAAAKcG9vbFN0YXR1cwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAANaWR4UG9vbFN0YXR1cwQAAAALYW10QXNzZXREY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAADmlkeEFtdEFzc2V0RGNtBAAAAA1wcmljZUFzc2V0RGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAABBpZHhQcmljZUFzc2V0RGNtBAAAABJhY2NBbXRBc3NldEJhbGFuY2UJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAKYW10QXNzZXRJZAQAAAAUYWNjUHJpY2VBc3NldEJhbGFuY2UJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAMcHJpY2VBc3NldElkBAAAAAhjdXJQcmljZQMJAAAAAAAAAggFAAAABW9yZGVyAAAACW9yZGVyVHlwZQUAAAADQnV5CQEAAAAQcHJpdmF0ZUNhbGNQcmljZQAAAAQFAAAAC2FtdEFzc2V0RGNtBQAAAA1wcmljZUFzc2V0RGNtCQAAZAAAAAIFAAAAEmFjY0FtdEFzc2V0QmFsYW5jZQgFAAAABW9yZGVyAAAABmFtb3VudAUAAAAUYWNjUHJpY2VBc3NldEJhbGFuY2UJAQAAABBwcml2YXRlQ2FsY1ByaWNlAAAABAUAAAALYW10QXNzZXREY20FAAAADXByaWNlQXNzZXREY20JAABlAAAAAgUAAAASYWNjQW10QXNzZXRCYWxhbmNlCAUAAAAFb3JkZXIAAAAGYW1vdW50BQAAABRhY2NQcmljZUFzc2V0QmFsYW5jZQMDAwkBAAAAEGlzR2xvYmFsU2h1dGRvd24AAAAABgkAAAAAAAACBQAAAApwb29sU3RhdHVzBQAAABNQb29sTWF0Y2hlckRpc2FibGVkBgkAAAAAAAACBQAAAApwb29sU3RhdHVzBQAAAAxQb29sU2h1dGRvd24JAAACAAAAAQIAAAAcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAQAAAANb3JkZXJBbXRBc3NldAgIBQAAAAVvcmRlcgAAAAlhc3NldFBhaXIAAAALYW1vdW50QXNzZXQEAAAAEG9yZGVyQW10QXNzZXRTdHIDCQAAAAAAAAIFAAAADW9yZGVyQW10QXNzZXQFAAAABHVuaXQCAAAABVdBVkVTCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAADW9yZGVyQW10QXNzZXQEAAAAD29yZGVyUHJpY2VBc3NldAgIBQAAAAVvcmRlcgAAAAlhc3NldFBhaXIAAAAKcHJpY2VBc3NldAQAAAASb3JkZXJQcmljZUFzc2V0U3RyAwkAAAAAAAACBQAAAA9vcmRlclByaWNlQXNzZXQFAAAABHVuaXQCAAAABVdBVkVTCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAD29yZGVyUHJpY2VBc3NldAMDCQEAAAACIT0AAAACBQAAABBvcmRlckFtdEFzc2V0U3RyBQAAAAphbXRBc3NldElkBgkBAAAAAiE9AAAAAgUAAAASb3JkZXJQcmljZUFzc2V0U3RyBQAAAAxwcmljZUFzc2V0SWQJAAACAAAAAQIAAAATV3Jvbmcgb3JkZXIgYXNzZXRzLgQAAAAKb3JkZXJQcmljZQgFAAAABW9yZGVyAAAABXByaWNlBAAAAAhwcmljZURjbQkAAGsAAAADBQAAAAZzY2FsZTgFAAAADXByaWNlQXNzZXREY20FAAAAC2FtdEFzc2V0RGNtBAAAABBjYXN0ZWRPcmRlclByaWNlCQEAAAAHdG9TY2FsZQAAAAMFAAAACm9yZGVyUHJpY2UFAAAABnNjYWxlOAUAAAAIcHJpY2VEY20EAAAAEWlzT3JkZXJQcmljZVZhbGlkAwkAAAAAAAACCAUAAAAFb3JkZXIAAAAJb3JkZXJUeXBlBQAAAANCdXkJAABnAAAAAgUAAAAIY3VyUHJpY2UFAAAAEGNhc3RlZE9yZGVyUHJpY2UJAABnAAAAAgUAAAAQY2FzdGVkT3JkZXJQcmljZQUAAAAIY3VyUHJpY2UDCQEAAAABIQAAAAEFAAAAEWlzT3JkZXJQcmljZVZhbGlkCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAMk9yZGVyIHByaWNlIGxlYWRzIHRvIEsgZGVjcmVhc2UuIGNhc3RlZE9yZGVyUHJpY2U9CQABpAAAAAEFAAAAEGNhc3RlZE9yZGVyUHJpY2UCAAAACiBjdXJQcmljZT0JAAGkAAAAAQUAAAAIY3VyUHJpY2UGAQAAAAljb21tb25HZXQAAAABAAAAAWkEAAAAC3BtdEFtdEFzc2V0CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAApwbXRBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAALcG10QW10QXNzZXQAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRBbXQIBQAAAAtwbXRBbXRBc3NldAAAAAZhbW91bnQEAAAAA3JlcwkBAAAAFGVzdGltYXRlR2V0T3BlcmF0aW9uAAAAAwkAAlgAAAABBQAAAApwbXRBc3NldElkBQAAAAtwbXRBc3NldEFtdAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADm91dEFtdEFzc2V0QW10CAUAAAADcmVzAAAAAl8xBAAAABBvdXRQcmljZUFzc2V0QW10CAUAAAADcmVzAAAAAl8yBAAAAAtpQW10QXNzZXRJZAgFAAAAA3JlcwAAAAJfMwQAAAANaVByaWNlQXNzZXRJZAgFAAAA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aWNlQXNzZXQAAAAHYXNzZXRJZAQAAAAGZXN0UHV0CQEAAAAUZXN0aW1hdGVQdXRPcGVyYXRpb24AAAAHBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAANaW5BbXRBc3NldEFtdAkAAlgAAAABBQAAAAxpbkFtdEFzc2V0SWQFAAAAD2luUHJpY2VBc3NldEFtdAkAAlgAAAABBQAAAA5pblByaWNlQXNzZXRJZAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIHBAAAAAhvdXRMcEFtdAgFAAAABmVzdFB1dAAAAAJfMQQAAAAIY3VyUHJpY2UIBQAAAAZlc3RQdXQAAAACXzIEAAAAE3Bvb2xBbXRBc3NldEJhbGFuY2UIBQAAAAZlc3RQdXQAAAACXzMEAAAAFXBvb2xQcmljZUFzc2V0QmFsYW5jZQgFAAAABmVzdFB1dAAAAAJfNAQAAAANcG9vbExQQmFsYW5jZQgFAAAABmVzdFB1dAAAAAJfNQQAAAALaUFtdEFzc2V0SWQIBQAAAAZlc3RQdXQAAAACXzYEAAAADWlQcmljZUFzc2V0SWQIBQAAAAZlc3RQdXQAAAACXzcEAAAACWxwQXNzZXRJZAgFAAAABmVzdFB1dAAAAAJfOAQAAAAMc2xpcHBhZ2VDYWxjCAUAAAAGZXN0UHV0AAAAAl85BAAAAApwb29sU3RhdHVzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEIBQAAAAZlc3RQdXQAAAADXzEwBAAAAA5yZWFsQW10QXNzZXRJbggFAAAABmVzdFB1dAAAAANfMTEEAAAAEHJlYWxQcmljZUFzc2V0SW4IBQAAAAZlc3RQdXQAAAADXzEyAwMDCQEAAAAQaXNHbG9iYWxTaHV0ZG93bgAAAAAGCQAAAAAAAAIFAAAACnBvb2xTdGF0dXMFAAAAD1Bvb2xQdXREaXNhYmxlZAYJAAAAAAAAAgUAAAAKcG9vbFN0YXR1cwUAAAAMUG9vbFNodXRkb3duCQAAAgAAAAEJAAEsAAAAAgIAAAAsUHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAAGkAAAAAQUAAAAKcG9vbFN0YXR1cwQAAAALbHBBbXRUb0VtaXQDCQEAAAABIQAAAAEFAAAABmVtaXRMcAAAAAAAAAAAAAUAAAAIb3V0THBBbXQEAAAADmRpZmZJbkFtdEFzc2V0CQAAZQAAAAIFAAAADWluQW10QXNzZXRBbXQFAAAADnJlYWxBbXRBc3NldEluBAAAABBkaWZmSW5QcmljZUFzc2V0CQAAZQAAAAIFAAAAD2luUHJpY2VBc3NldEFtdAUAAAAQcmVhbFByaWNlQXNzZXRJbgQAAAAOZGF0YVN0YXRlV3JpdGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGtleVByaWNlTGFzdAAAAAAJAAEsAAAAAgIAAAAEJXNfXwkAAaQAAAABBQAAAAhjdXJQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5UHJpY2VIaXN0b3J5AAAAAgUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAASwAAAACAgAAAAQlc19fCQABpAAAAAEFAAAACGN1clByaWNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlQdXRBY3Rpb25CeVVzZXIAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQEAAAARZGF0YVB1dEFjdGlvbkluZm8AAAAKBQAAAA5yZWFsQW10QXNzZXRJbgUAAAAQcmVhbFByaWNlQXNzZXRJbgUAAAALbHBBbXRUb0VtaXQFAAAACGN1clByaWNlBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAMc2xpcHBhZ2VDYWxjBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAA5kaWZmSW5BbXRBc3NldAUAAAAQZGlmZkluUHJpY2VBc3NldAUAAAADbmlsCQAFGwAAAAkFAAAAC2xwQW10VG9FbWl0BQAAAAlscEFzc2V0SWQFAAAADmRhdGFTdGF0ZVdyaXRlBQAAAA1pbkFtdEFzc2V0QW10BQAAAA5yZWFsQW10QXNzZXRJbgUAAAAPaW5QcmljZUFzc2V0QW10BQAAABByZWFsUHJpY2VBc3NldEluCAUAAAALcG10QW10QXNzZXQAAAAHYXNzZXRJZAgFAAAADXBtdFByaWNlQXNzZXQAAAAHYXNzZXRJZAAAAAoAAAABaQEAAAALY29uc3RydWN0b3IAAAACAAAAD2ZhY3RvcnlDb250cmFjdAAAABBtYW5hZ2VyUHVibGljS2V5AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5RmFjdG9yeUNvbnRyYWN0AAAAAAUAAAAPZmFjdG9yeUNvbnRyYWN0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAQbWFuYWdlclB1YmxpY0tleQUAAAADbmlsAAAAAWkBAAAAA3B1dAAAAAIAAAARc2xpcHBhZ2VUb2xlcmFuY2UAAAAPc2hvdWxkQXV0b1N0YWtlBAAAAApmYWN0b3J5Q2ZnCQEAAAAQZ2V0RmFjdG9yeUNvbmZpZwAAAAAEAAAAD3N0YWtpbmdDb250cmFjdAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZaWR4RmFjdG9yeVN0YWtpbmdDb250cmFjdAIAAAAhRXJyb3IuIEluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MuBAAAABBzbGlwcGFnZUNvbnRyYWN0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdAIAAAArRXJyb3IuIEluY29ycmVjdCBzbGlwcGFnZSBjb250cmFjdCBhZGRyZXNzLgQAAAAHYWN0aW9ucwkBAAAACWNvbW1vblB1dAAAAAMFAAAAAWkFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgQAAAAJYW10VG9FbWl0CAUAAAAHYWN0aW9ucwAAAAJfMQQAAAAJbHBBc3NldElkCAUAAAAHYWN0aW9ucwAAAAJfMgQAAAAFc3RhdGUIBQAAAAdhY3Rpb25zAAAAAl8zBAAAAAVpbkFtdAgFAAAAB2Fj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CQAETAAAAAIJAAGkAAAAAQUAAAAKcG9vbFdlaWdodAUAAAADbmlsBQAAAANTRVAAAAABaQEAAAAdZXZhbHVhdGVQdXRCeUFtdEFzc2V0UkVBRE9OTFkAAAADAAAAEXNsaXBwYWdlVG9sZXJhbmNlAAAADWluQW10QXNzZXRBbXQAAAALdXNlckFkZHJlc3MEAAAAA2NmZwkBAAAADWdldFBvb2xDb25maWcAAAAABAAAAAlscEFzc2V0SWQJAAJZAAAAAQkAAZEAAAACBQAAAANjZmcFAAAAEGlkeFBvb2xMUEFzc2V0SWQEAAAACmFtdEFzc2V0SWQJAAGRAAAAAgUAAAADY2ZnBQAAAA1pZHhBbXRBc3NldElkBAAAAAxwcmljZUFzc2V0SWQJAAGRAAAAAgUAAAADY2ZnBQAAAA9pZHhQcmljZUFzc2V0SWQEAAAAC2lBbXRBc3NldElkCQABkQAAAAIFAAAAA2NmZwUAAAAOaWR4SUFtdEFzc2V0SWQEAAAADWlQcmljZUFzc2V0SWQJAAGRAAAAAgUAAAADY2ZnBQAAABBpZHhJUHJpY2VBc3NldElkBAAAAAthbXRBc3NldERjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAAOaWR4QW10QXNzZXREY20EAAAADXByaWNlQXNzZXREY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAAEGlkeFByaWNlQXNzZXREY20EAAAACnBvb2xTdGF0dXMJAAGRAAAAAgUAAAADY2ZnBQAAAA1pZHhQb29sU3RhdHVzBAAAAA1wb29sTFBCYWxhbmNlCAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEFAAAACWxwQXNzZXRJZAkAASwAAAACCQABLAAAAAICAAAABkFzc2V0IAkAAlgAAAABBQAAAAlscEFzc2V0SWQCAAAADiBkb2Vzbid0IGV4aXN0AAAACHF1YW50aXR5BAAAABJhY2NBbXRBc3NldEJhbGFuY2UJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAKYW10QXNzZXRJZAQAAAAUYWNjUHJpY2VBc3NldEJhbGFuY2UJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAMcHJpY2VBc3NldElkBAAAAA5hbXRBc3NldEFtdFgxOAkBAAAABXRvWDE4AAAAAgUAAAASYWNjQW10QXNzZXRCYWxhbmNlBQAAAAthbXRBc3NldERjbQQAAAAQcHJpY2VBc3NldEFtdFgxOAkBAAAABXRvWDE4AAAAAgUAAAAUYWNjUHJpY2VBc3NldEJhbGFuY2UFAAAADXByaWNlQXNzZXREY20EAAAAC2N1clByaWNlWDE4AwkAAAAAAAACBQAAAA1wb29sTFBCYWxhbmNlAAAAAAAAAAAACQABNgAAAAEAAAAAAAAAAAAJAQAAAA9jYWxjUHJpY2VCaWdJbnQAAAADBQAAABBwcmljZUFzc2V0QW10WDE4BQAAAA5hbXRBc3NldEFtdFgxOAUAAAAHc2NhbGUxOAQAAAAQaW5BbXRBc3NldEFtdFgxOAkBAAAABXRvWDE4AAAAAgUAAAANaW5BbXRBc3NldEFtdAUAAAALYW10QXNzZXREY20EAAAAEmluUHJpY2VBc3NldEFtdFgxOAkAATwAAAADBQAAABBpbkFtdEFzc2V0QW10WDE4BQAAAAtjdXJQcmljZVgxOAUAAAAHc2NhbGUxOAQAAAAPaW5QcmljZUFzc2V0QW10CQEAAAAHZnJvbVgxOAAAAAIFAAAAEmluUHJpY2VBc3NldEFtdFgxOAUAAAANcHJpY2VBc3NldERjbQQAAAATZXN0aW1hdGVkUHV0UmVzdWx0cwkBAAAAFGVzdGltYXRlUHV0T3BlcmF0aW9uAAAABwUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAADWluQW10QXNzZXRBbXQFAAAACmFtdEFzc2V0SWQFAAAAD2luUHJpY2VBc3NldEFtdAUAAAAMcHJpY2VBc3NldElkBQAAAAt1c2VyQWRkcmVzcwYEAAAADG91dExwQW10Q2FsYwgFAAAAE2VzdGltYXRlZFB1dFJlc3VsdHMAAAACXzEEAAAADGN1clByaWNlQ2FsYwgFAAAAE2VzdGltYXRlZFB1dFJlc3VsdHMAAAACXzIEAAAAF3Bvb2xBbXRBc3NldEJhbGFuY2VDYWxjCAUAAAATZXN0aW1hdGVkUHV0UmVzdWx0cwAAAAJfMwQAAAAZcG9vbFByaWNlQXNzZXRCYWxhbmNlQ0FsYwgFAAAAE2VzdGltYXRlZFB1dFJlc3VsdHMAAAACXzQEAAAAEXBvb2xMUEJhbGFuY2VDYWxjCAUAAAATZXN0aW1hdGVkUHV0UmVzdWx0cwAAAAJfNQQAAAAOcG9vbFN0YXR1c0NhbGMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQgFAAAAE2VzdGltYXRlZFB1dFJlc3VsdHMAAAADXzEwCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAADCVkJWQlZCVkJWQlZAkABEwAAAACCQABpAAAAAEFAAAADG91dExwQW10Q2FsYwkABEwAAAACCQABpAAAAAEJAQAAAAdmcm9tWDE4AAAAAgUAAAALY3VyUHJpY2VYMTgFAAAABnNjYWxlOAkABEwAAAACCQABpAAAAAEFAAAAF3Bvb2xBbXRBc3NldEJhbGFuY2VDYWxjCQAETAAAAAIJAAGkAAAAAQUAAAAZcG9vbFByaWNlQXNzZXRCYWxhbmNlQ0FsYwkABEwAAAACCQABpAAAAAEFAAAAEXBvb2xMUEJhbGFuY2VDYWxjCQAETAAAAAIJAAGkAAAAAQUAAAAOcG9vbFN0YXR1c0NhbGMFAAAAA25pbAUAAAADU0VQAAAAAWkBAAAAH2V2YWx1YXRlUHV0QnlQcmljZUFzc2V0UkVBRE9OTFkAAAADAAAAEXNsaXBwYWdlVG9sZXJhbmNlAAAAD2luUHJpY2VBc3NldEFtdAAAAAt1c2VyQWRkcmVzcwQAAAADY2ZnCQEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAACWxwQXNzZXRJZAkAAlkAAAABCQABkQAAAAIFAAAAA2NmZwUAAAAQaWR4UG9vbExQQXNzZXRJZAQAAAAKYW10QXNzZXRJZAkAAZEAAAACBQAAAANjZmcFAAAADWlkeEFtdEFzc2V0SWQEAAAADHByaWNlQXNzZXRJZAkAAZEAAAACBQAAAANjZmcFAAAAD2lkeFByaWNlQXNzZXRJZAQAAAALaUFtdEFzc2V0SWQJAAGRAAAAAgUAAAADY2ZnBQAAAA5pZHhJQW10QXNzZXRJZAQAAAANaVByaWNlQXNzZXRJZAkAAZEAAAACBQAAAANjZmcFAAAAEGlkeElQcmljZUFzc2V0SWQEAAAAC2FtdEFzc2V0RGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAAA5pZHhBbXRBc3NldERjbQQAAAANcHJpY2VBc3NldERjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAAQaWR4UHJpY2VBc3NldERjbQQAAAAKcG9vbFN0YXR1cwkAAZEAAAACBQAAAANjZmcFAAAADWlkeFBvb2xTdGF0dXMEAAAADXBvb2xMUEJhbGFuY2UICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAAJbHBBc3NldElkCQABLAAAAAIJAAEsAAAAAgIAAAAGQXNzZXQgCQACWAAAAAEFAAAACWxwQXNzZXRJZAIAAAAOIGRvZXNuJ3QgZXhpc3QAAAAIcXVhbnRpdHkEAAAAEmFjY0FtdEFzc2V0QmFsYW5jZQkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAphbXRBc3NldElkBAAAABRhY2NQcmljZUFzc2V0QmFsYW5jZQkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAxwcmljZUFzc2V0SWQEAAAADmFtdEFzc2V0QW10WDE4CQEAAAAFdG9YMTgAAAACBQAAABJhY2NBbXRBc3NldEJhbGFuY2UFAAAAC2FtdEFzc2V0RGNtBAAAABBwcmljZUFzc2V0QW10WDE4CQEAAAAFdG9YMTgAAAACBQAAABRhY2NQcmljZUFzc2V0QmFsYW5jZQUAAAANcHJpY2VBc3NldERjbQQAAAALY3VyUHJpY2VYMTgDCQAAAAAAAAIFAAAADXBvb2xMUEJhbGFuY2UAAAAAAAAAAAAJAAE2AAAAAQAAAAAAAAAAAAkBAAAAD2NhbGNQcmljZUJpZ0ludAAAAAMFAAAAEHByaWNlQXNzZXRBbXRYMTgFAAAADmFtdEFzc2V0QW10WDE4BQAAAAdzY2FsZTE4BAAAABJpblByaWNlQXNzZXRBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAAD2luUHJpY2VBc3NldEFtdAUAAAANcHJpY2VBc3NldERjbQQAAAAQaW5BbXRBc3NldEFtdFgxOAkAATwAAAADBQAAABJpblByaWNlQXNzZXRBbXRYMTgFAAAAB3NjYWxlMTgFAAAAC2N1clByaWNlWDE4BAAAAA1pbkFtdEFzc2V0QW10CQEAAAAHZnJvbVgxOAAAAAIFAAAAEGluQW10QXNzZXRBbXRYMTgFAAAAC2FtdEFzc2V0RGNtBAAAABNlc3RpbWF0ZWRQdXRSZXN1bHRzCQEAAAAUZXN0aW1hdGVQdXRPcGVyYXRpb24AAAAHBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAANaW5BbXRBc3NldEFtdAUAAAAKYW10QXNzZXRJZAUAAAAPaW5QcmljZUFzc2V0QW10BQAAAAxwcmljZUFzc2V0SWQFAAAAC3VzZXJBZGRyZXNzBgQAAAAMb3V0THBBbXRDYWxjCAUAAAATZXN0aW1hdGVkUHV0UmVzdWx0cwAAAAJfMQQAAAAMY3VyUHJpY2VDYWxjCAUAAAATZXN0aW1hdGVkUHV0UmVzdWx0cwAAAAJfMgQAAAAXcG9vbEFtdEFzc2V0QmFsYW5jZUNhbGMIBQAAABNlc3RpbWF0ZWRQdXRSZXN1bHRzAAAAAl8zBAAAABlwb29sUHJpY2VBc3NldEJhbGFuY2VDQWxjCAUAAAATZXN0aW1hdGVkUHV0UmVzdWx0cwAAAAJfNAQAAAARcG9vbExQQmFsYW5jZUNhbGMIBQAAABNlc3RpbWF0ZWRQdXRSZXN1bHRzAAAAAl81BAAAAA5wb29sU3RhdHVzQ2FsYwkBAAAADXBhcnNlSW50VmFsdWUAAAABCAUAAAATZXN0aW1hdGVkUHV0UmVzdWx0cwAAAANfMTAJAAUUAAAAAgUAAAADbmlsCQAEuQAAAAIJAARMAAAAAgIAAAAMJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAMb3V0THBBbXRDYWxjCQAETAAAAAIJAAGkAAAAAQkBAAAAB2Zyb21YMTgAAAACBQAAAAtjdXJQcmljZVgxOAUAAAAGc2NhbGU4CQAETAAAAAIJAAGkAAAAAQUAAAAXcG9vbEFtdEFzc2V0QmFsYW5jZUNhbGMJAARMAAAAAgkAAaQAAAABBQAAABlwb29sUHJpY2VBc3NldEJhbGFuY2VDQWxjCQAETAAAAAIJAAGkAAAAAQUAAAARcG9vbExQQmFsYW5jZUNhbGMJAARMAAAAAgkAAaQAAAABBQAAAA5wb29sU3RhdHVzQ2FsYwUAAAADbmlsBQAAAANTRVAAAAABaQEAAAATZXZhbHVhdGVHZXRSRUFET05MWQAAAAMAAAAQcGF5bWVudExwQXNzZXRJZAAAAAxwYXltZW50THBBbXQAAAALdXNlckFkZHJlc3MEAAAAA3JlcwkBAAAAFGVzdGltYXRlR2V0T3BlcmF0aW9uAAAAAwUAAAAQcGF5bWVudExwQXNzZXRJZAUAAAAMcGF5bWVudExwQW10BQAAAAt1c2VyQWRkcmVzcwQAAAAOb3V0QW10QXNzZXRBbXQIBQAAAANyZXMAAAACXzEEAAAAEG91dFByaWNlQXNzZXRBbXQIBQAAAANyZXMAAAACXzIEAAAAE3Bvb2xBbXRBc3NldEJhbGFuY2UIBQAAAANyZXMAAAACXzcEAAAAFXBvb2xQcmljZUFzc2V0QmFsYW5jZQgFAAAAA3JlcwAAAAJfOAQAAAANcG9vbExQQmFsYW5jZQgFAAAAA3JlcwAAAAJfOQQAAAAIY3VyUHJpY2UIBQAAAANyZXMAAAADXzEwBAAAAApwb29sU3RhdHVzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEIBQAAAANyZXMAAAADXzExCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAADiVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAOb3V0QW10QXNzZXRBbXQJAARMAAAAAgkAAaQAAAABBQAAABBvdXRQcmljZUFzc2V0QW10CQAETAAAAAIJAAGkAAAAAQUAAAATcG9vbEFtdEFzc2V0QmFsYW5jZQkABEwAAAACCQABpAAAAAEFAAAAFXBvb2xQcmljZUFzc2V0QmFsYW5jZQkABEwAAAACCQABpAAAAAEFAAAADXBvb2xMUEJhbGFuY2UJAARMAAAAAgkAAaQAAAABBQAAAAhjdXJQcmljZQkABEwAAAACCQABpAAAAAEFAAAACnBvb2xTdGF0dXMFAAAAA25pbAUAAAADU0VQAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABU9yZGVyBAAAAAVvcmRlcgUAAAAHJG1hdGNoMAMJAQAAABt2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQAAAABBQAAAAVvcmRlcgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkHBAAAAA1tYW5hZ2VyUHVibGljCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAFRU1QVFkDCQAAAAAAAAIFAAAADW1hbmFnZXJQdWJsaWMFAAAABUVNUFRZCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAAJZAAAAAQUAAAANbWFuYWdlclB1YmxpY8sQnDc=", "chainId": 84, "height": 1735703, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GzmJ9HYrugLQxeK98DgNvP7J5p6iJk5antqS5EXJDPNi Next: CnswSUY9aK9BFMs4cZgtmCWHqoTvY1PPHJShcNFVLxAY Diff:
OldNewDifferences
1111
1212 let e = "__"
1313
14-let f = 1
14+let f = ""
1515
16-let g = 2
16+let g = 1
1717
18-let h = 3
18+let h = 2
1919
20-let i = 4
20+let i = 3
2121
22-let j = 1
22+let j = 4
2323
24-let k = 2
24+let k = 1
2525
26-let l = 3
26+let l = 2
2727
28-let m = 4
28+let m = 3
2929
30-let n = 5
30+let n = 4
3131
32-let o = 6
32+let o = 5
3333
34-let p = 7
34+let p = 6
3535
36-let q = 8
36+let q = 7
3737
38-let r = 9
38+let r = 8
3939
40-let s = 10
40+let s = 9
4141
42-let t = 11
42+let t = 10
4343
4444 let u = 1
4545
4949
5050 let x = 1
5151
52-let y = 2
52+let y = 7
5353
54-func z () = "%s__factoryContract"
54+func z (A,B) = fraction(toBigInt(A), d, toBigInt(B))
5555
5656
57-func A () = "%s%s__price__last"
57+func C (D,E) = toInt(fraction(D, toBigInt(E), d))
5858
5959
60-func B (C,D) = makeString(["%s%s%d%d__price__history", toString(C), toString(D)], e)
60+func F (G,H,I) = fraction(G, H, I)
6161
6262
63-func E (F,G) = (((("%d%d%s__" + F) + "__") + G) + "__locked")
63+func J () = "%s__factoryContract"
6464
6565
66-func H (I,J) = ((("%s%s%s__P__" + I) + "__") + J)
66+func K () = "%s__managerPublicKey"
6767
6868
69-func K (I,J) = ((("%s%s%s__G__" + I) + "__") + J)
69+func L () = "%s%s__price__last"
7070
7171
72-func L () = "%s__amountAsset"
72+func M (N,O) = makeString(["%s%s%d%d__price__history", toString(N), toString(O)], e)
7373
7474
75-func M () = "%s__priceAsset"
75+func P (Q,R) = ((("%s%s%s__P__" + Q) + "__") + R)
7676
7777
78-func N () = "%s%s__K_current"
78+func S (Q,R) = ((("%s%s%s__G__" + Q) + "__") + R)
7979
8080
81-func O (C,D) = makeString(["%s%s%d%d__K_history", toString(C), toString(D)], e)
81+func T () = "%s__amountAsset"
8282
8383
84-func P () = "%s__factoryConfig"
84+func U () = "%s__priceAsset"
8585
8686
87-func Q (R) = (("%s%s%s__" + R) + "__mappings__poolContract2LpAsset")
87+func V (N,O) = makeString(["%s%s%d%d__K_history", toString(N), toString(O)], e)
8888
8989
90-func S (T,U) = (((("%d%d%s__" + T) + "__") + U) + "__config")
90+func W () = "%s__factoryConfig"
9191
9292
93-func V (W) = ("%s%s%s__mappings__baseAsset2internalId__" + W)
93+func X (Y) = (("%s%s%s__" + Y) + "__mappings__poolContract2LpAsset")
9494
9595
96-func X () = "%s__shutdown"
96+func Z (aa,ab) = (((("%d%d%s__" + aa) + "__") + ab) + "__config")
9797
9898
99-func Y (Z) = ("%s%s__poolWeight__" + Z)
99+func ac (ad) = ("%s%s%s__mappings__baseAsset2internalId__" + ad)
100100
101101
102-let aa = addressFromStringValue(valueOrErrorMessage(getString(this, z()), "No Factory Account found."))
103-
104-func ab () = valueOrElse(getBoolean(aa, X()), false)
102+func ae () = "%s__shutdown"
105103
106104
107-func ac () = {
108- let ad = valueOrErrorMessage(getString(this, L()), "No config for amount asset found")
109- let ae = valueOrErrorMessage(getString(this, M()), "No config for price asset found")
110- let af = valueOrErrorMessage(getInteger(aa, V(ae)), "No config for internal price asset found")
111- let ag = valueOrErrorMessage(getInteger(aa, V(ad)), "No config for internal amount asset found")
112- split(valueOrErrorMessage(getString(aa, S(toString(ag), toString(af))), "No factory config found for pool assets."), e)
105+func af (ag) = ("%s%s__poolWeight__" + ag)
106+
107+
108+func ah (ai,aj) = valueOrErrorMessage(getString(ai, aj), (((("mandatory " + toString(ai)) + ".") + aj) + " is not defined"))
109+
110+
111+func ak (ai,aj) = valueOrErrorMessage(getInteger(ai, aj), (((("mandatory " + toString(ai)) + ".") + aj) + " is not defined"))
112+
113+
114+let al = addressFromStringValue(ah(this, J()))
115+
116+func am () = valueOrElse(getBoolean(al, ae()), false)
117+
118+
119+func an () = {
120+ let ao = ah(this, T())
121+ let ap = ah(this, U())
122+ let ab = ak(al, ac(ap))
123+ let aa = ak(al, ac(ao))
124+ split(ah(al, Z(toString(aa), toString(ab))), e)
113125 }
114126
115127
116-func ah () = split(valueOrErrorMessage(getString(aa, P()), "No factory config found."), e)
128+func aq () = split(ah(al, W()), e)
117129
118130
119-func ai (aj,ak) = {
120- let al = getString(this, E(aj, ak))
121- if (isDefined(al))
122- then split(value(al), e)
123- else ["", "0", "0", "0"]
131+func ar (as,at,au,av,aw,ax,ay,az,aA,aB) = makeString(["%d%d%d%d%d%d%d%d%d", toString(as), toString(at), toString(au), toString(av), toString(aw), toString(ax), toString(ay), toString(az), toString(aA), toString(aB)], e)
132+
133+
134+func aC (aD,aE,aF,av,ay,az) = makeString(["%d%d%d%d%d%d", toString(aD), toString(aE), toString(aF), toString(av), toString(ay), toString(az)], e)
135+
136+
137+func aG (aH) = if ((aH == "WAVES"))
138+ then wavesBalance(this).available
139+ else assetBalance(this, fromBase58String(aH))
140+
141+
142+func aI (aJ,aK,aL) = fraction(aJ, aL, aK)
143+
144+
145+func aM (aN,aO,aP,aQ) = {
146+ let aR = z(aP, aN)
147+ let aS = z(aQ, aO)
148+ toInt(aI(aS, aR, c))
124149 }
125150
126151
127-func am (an,ao,ap) = makeString(["%d%d%d", toString(an), toString(ao), toString(ap)], e)
128-
129-
130-func aq (ar,as,at,au,av,aw,ax,ay) = makeString(["%d%d%d%d%d%d%d", toString(ar), toString(as), toString(at), toString(au), toString(av), toString(aw), toString(ax), toString(ay)], e)
131-
132-
133-func az (aA,aB,aC,au,ax,ay) = makeString(["%d%d%d%d%d%d", toString(aA), toString(aB), toString(aC), toString(au), toString(ax), toString(ay)], e)
134-
135-
136-func aD (aE,aF,aG) = fraction(aE, aF, aG)
137-
138-
139-func aH (aE,aF,aG) = fraction(aE, aF, aG)
140-
141-
142-func aI (aJ,aK) = fraction(aJ, b, aK)
143-
144-
145-func aL (aJ,aK) = toInt(fraction(aJ, c, aK))
146-
147-
148-func aM (aN,aO,aP,aQ) = {
149- let aR = aD(aP, b, aN)
150- let aS = aD(aQ, b, aO)
151- aI(aS, aR)
152+func aT (aP,aQ,aU) = {
153+ let aV = an()
154+ let aN = parseIntValue(aV[p])
155+ let aO = parseIntValue(aV[q])
156+ let aW = aM(aN, aO, aP, aQ)
157+ let aR = z(aP, aN)
158+ let aS = z(aQ, aO)
159+ let aX = z(aU, b)
160+ let aY = toInt(aI(aR, aX, c))
161+ let aZ = toInt(aI(aS, aX, c))
162+[aW, aY, aZ]
152163 }
153164
154165
155-func aT (aU) = if ((aU == "WAVES"))
156- then wavesBalance(this).available
157- else assetBalance(this, fromBase58String(aU))
158-
159-
160-func aV (aP,aQ,aW) = {
161- let aX = ac()
162- let aN = parseIntValue(aX[o])
163- let aO = parseIntValue(aX[p])
164- let aY = aM(aN, aO, aP, aQ)
165- let aZ = aD(aP, b, aN)
166- let ba = aD(aQ, b, aO)
167- let bb = aI(aZ, aW)
168- let bc = aI(ba, aW)
169-[aY, bb, bc]
170- }
171-
172-
173-func bd (be,bf,I) = {
174- let bg = ac()
175- let bh = bg[l]
176- let bi = bg[m]
177- let bj = bg[n]
178- let aj = bg[q]
179- let ak = bg[r]
180- let aN = parseIntValue(bg[o])
181- let aO = parseIntValue(bg[p])
182- let bk = bg[k]
183- let bl = ai(aj, ak)
184- let bm = parseIntValue(bl[w])
185- let bn = parseIntValue(bl[u])
186- let bo = parseIntValue(bl[v])
187- if ((bh != be))
166+func ba (bb,bc,Q) = {
167+ let bd = an()
168+ let be = bd[m]
169+ let bf = bd[n]
170+ let bg = bd[o]
171+ let bh = bd[r]
172+ let bi = bd[s]
173+ let aN = parseIntValue(bd[p])
174+ let aO = parseIntValue(bd[q])
175+ let bj = bd[l]
176+ let bk = valueOrErrorMessage(assetInfo(fromBase58String(be)), (("Asset " + be) + " doesn't exist")).quantity
177+ if ((be != bb))
188178 then throw("Invalid asset passed.")
189179 else {
190- let aZ = aH(toBigInt(aT(bi)), d, toBigInt(aN))
191- let ba = aH(toBigInt(aT(bj)), d, toBigInt(aO))
192- let bp = aL(ba, aZ)
193- let bq = aH(toBigInt(bf), d, c)
194- let br = aH(toBigInt(bm), d, c)
195- let aA = fraction(aZ, bq, br)
196- let aB = fraction(ba, bq, br)
197- let bs = toInt(aH(aA, toBigInt(aN), d))
198- let bt = toInt(aH(aB, toBigInt(aO), d))
199- $Tuple11(bs, bt, aj, ak, bi, bj, bn, bo, bm, bp, bk)
180+ let bl = aG(bf)
181+ let bm = z(bl, aN)
182+ let bn = aG(bg)
183+ let bo = z(bn, aO)
184+ let bp = toInt(aI(bo, bm, c))
185+ let bq = z(bc, b)
186+ let br = z(bk, b)
187+ let aD = fraction(bm, bq, br)
188+ let aE = fraction(bo, bq, br)
189+ let bs = C(aD, aN)
190+ let bt = C(aE, aO)
191+ $Tuple11(bs, bt, bh, bi, bf, bg, bl, bn, bk, bp, bj)
200192 }
201193 }
202194
203195
204-func bu (bv,ar,bw,as,bx,I,by) = {
205- let aX = ac()
206- let bh = fromBase58String(aX[l])
207- let bi = aX[m]
208- let bj = aX[n]
209- let aj = aX[q]
210- let ak = aX[r]
211- let aN = parseIntValue(aX[o])
212- let aO = parseIntValue(aX[p])
213- let bk = aX[k]
214- let bz = ai(aj, ak)
215- let bn = parseIntValue(bz[u])
216- let bo = parseIntValue(bz[v])
217- let bm = parseIntValue(bz[w])
218- if (if ((bi != bw))
196+func bu (bv,as,bw,at,bx,Q,by) = {
197+ let aV = an()
198+ let be = fromBase58String(aV[m])
199+ let bf = aV[n]
200+ let bg = aV[o]
201+ let bh = aV[r]
202+ let bi = aV[s]
203+ let aN = parseIntValue(aV[p])
204+ let aO = parseIntValue(aV[q])
205+ let bj = aV[l]
206+ let bk = valueOrErrorMessage(assetInfo(be), (("Asset " + toBase58String(be)) + " doesn't exist")).quantity
207+ if (if ((bf != bw))
219208 then true
220- else (bj != bx))
221- then throw("Invalid amount or price asset passed.")
209+ else (bg != bx))
210+ then throw("Invalid amt or price asset passed.")
222211 else {
212+ let bz = if (by)
213+ then aG(bf)
214+ else (aG(bf) - as)
223215 let bA = if (by)
224- then aT(bi)
225- else (aT(bi) - ar)
226- let bB = if (by)
227- then aT(bj)
228- else (aT(bj) - as)
229- let bC = toBigInt(aN)
230- let bD = toBigInt(aO)
231- let bE = aH(toBigInt(ar), d, bC)
232- let bF = aH(toBigInt(as), d, bD)
233- let bG = aL(bF, bE)
234- let aZ = aH(toBigInt(bA), d, bC)
235- let ba = aH(toBigInt(bB), d, bD)
236- let bH = if ((bm == 0))
216+ then aG(bg)
217+ else (aG(bg) - at)
218+ let bB = z(as, aN)
219+ let bC = z(at, aO)
220+ let bD = toInt(aI(bC, bB, c))
221+ let bE = z(bz, aN)
222+ let bF = z(bA, aO)
223+ let bp = if ((bk == 0))
237224 then 0
238- else aL(ba, aZ)
239- let bI = if ((bH == 0))
225+ else toInt(aI(bF, bE, c))
226+ let bG = if ((bp == 0))
240227 then 0
241- else if ((bH > bG))
242- then fraction((bH - bG), 100, bH)
243- else fraction((bG - bH), 100, bH)
244- if (if ((bH != 0))
245- then ((bI * b) > bv)
228+ else if ((bp > bD))
229+ then fraction((bp - bD), b, bp)
230+ else fraction((bD - bp), b, bp)
231+ if (if ((bp != 0))
232+ then (bG > bv)
246233 else false)
247- then throw(((("Price slippage " + toString((bI * b))) + " exceeded the passed limit of ") + toString(bv)))
234+ then throw(((("Price slippage " + toString(bG)) + " exceeded the passed limit of ") + toString(bv)))
248235 else {
249- let bJ = aL((ba + bF), (aZ + bE))
250- let bK = if ((bm == 0))
236+ let bH = if ((bk == 0))
251237 then {
252- let bL = pow((bE * bF), 0, toBigInt(5), 1, 0, DOWN)
253- toInt(aH(bL, c, d))
238+ let bI = pow((bB * bC), 0, toBigInt(5), 1, 0, DOWN)
239+ $Tuple4(C(bI, b), C(bB, aN), C(bC, aO), toInt(aI((bF + bC), (bE + bB), c)))
254240 }
255241 else {
256- let br = aH(toBigInt(bm), d, c)
257- let bM = toInt(aH(fraction(br, bE, aZ), c, d))
258- let bN = toInt(aH(fraction(br, bF, ba), c, d))
259- if ((bN > bM))
260- then bM
261- else bN
242+ let br = z(bk, b)
243+ let bJ = z(bp, b)
244+ let bK = fraction(bJ, bB, d)
245+ let bL = if ((bK > bC))
246+ then $Tuple2(fraction(bC, d, bJ), bC)
247+ else $Tuple2(bB, bK)
248+ let bM = C(fraction(br, bL._2, bF), b)
249+ $Tuple4(bM, C(bL._1, aN), C(bL._2, aO), toInt(aI((bF + bL._2), (bE + bL._1), c)))
262250 }
263- if ((0 >= bK))
251+ if ((0 >= bH._1))
264252 then throw("Invalid calculations. LP calculated is less than zero.")
265- else $Tuple10(bK, bJ, bn, bo, bm, aj, ak, bh, bI, bk)
253+ else $Tuple12(bH._1, bH._4, bz, bA, bk, bh, bi, be, bG, bj, bH._2, bH._3)
266254 }
267255 }
268256 }
269257
270258
271-func bO (bP) = {
272- let aX = ac()
273- let bi = aX[m]
274- let bj = aX[n]
275- let bk = parseIntValue(aX[k])
276- let bQ = aX[t]
277- let bR = parseIntValue(aX[o])
278- let aO = parseIntValue(aX[p])
279- let bA = aT(bi)
280- let bB = aT(bj)
281- let bp = if ((bP.orderType == Buy))
282- then aM(bR, aO, (bA + bP.amount), bB)
283- else aM(bR, aO, (bA + bP.amount), bB)
284- let bS = if (if (if (ab())
259+func bN (bO) = {
260+ let aV = an()
261+ let bf = aV[n]
262+ let bg = aV[o]
263+ let bj = parseIntValue(aV[l])
264+ let aN = parseIntValue(aV[p])
265+ let aO = parseIntValue(aV[q])
266+ let bz = aG(bf)
267+ let bA = aG(bg)
268+ let bp = if ((bO.orderType == Buy))
269+ then aM(aN, aO, (bz + bO.amount), bA)
270+ else aM(aN, aO, (bz - bO.amount), bA)
271+ if (if (if (am())
285272 then true
286- else (bk == h))
273+ else (bj == i))
287274 then true
288- else (bk == i))
289- then false
290- else true
291- let bT = true
292- let bU = bP.assetPair.amountAsset
293- let bV = if ((bU == unit))
294- then "WAVES"
295- else toBase58String(value(bU))
296- let bW = bP.assetPair.priceAsset
297- let bX = if ((bW == unit))
298- then "WAVES"
299- else toBase58String(value(bW))
300- let bY = if (if ((bV != bi))
301- then true
302- else (bX != bj))
303- then false
304- else true
305- let bZ = bP.price
306- let ca = fraction(b, aO, bR)
307- let cb = aD(bZ, b, ca)
308- let cc = if ((bP.orderType == Buy))
309- then (bp >= cb)
310- else (cb >= bp)
311- if (if (if (bY)
312- then bT
313- else false)
314- then bS
315- else false)
316- then cc
317- else false
318- }
319-
320-
321-@Callable(cd)
322-func constructor (aa) = if ((cd.caller != this))
323- then throw("permissions denied")
324- else [StringEntry(z(), aa)]
325-
326-
327-
328-@Callable(cd)
329-func put (bv,ce) = {
330- let cf = ah()
331- let cg = valueOrErrorMessage(addressFromString(cf[x]), "Error. Incorrect staking address.")
332- let ch = value(cd.payments[0])
333- let ar = ch.amount
334- let bw = if (!(isDefined(ch.assetId)))
335- then fromBase58String("WAVES")
336- else value(ch.assetId)
337- let ci = value(cd.payments[1])
338- let as = ci.amount
339- let bx = if (!(isDefined(ci.assetId)))
340- then fromBase58String("WAVES")
341- else value(ci.assetId)
342- let cj = bu(bv, ar, toBase58String(bw), as, toBase58String(bx), toString(cd.caller), false)
343- let bK = cj._1
344- let bH = cj._2
345- let bn = cj._3
346- let bo = cj._4
347- let bm = cj._5
348- let aj = cj._6
349- let ak = cj._7
350- let bh = cj._8
351- let ck = cj._9
352- let bk = parseIntValue(cj._10)
353- if (if (if (ab())
354- then true
355- else (bk == g))
356- then true
357- else (bk == i))
358- then throw(("Put operation is blocked by admin. Status = " + toString(bk)))
275+ else (bj == j))
276+ then throw("Exchange operations disabled")
359277 else {
360- let cl = invoke(aa, "emit", [bK], nil)
361- if ((cl == cl))
362- then if ((cl != "success"))
363- then throw("LP asset reissue failed during emit call on factory.")
364- else {
365- let cm = [StringEntry(A(), ("%s__" + toString(bH))), StringEntry(B(height, lastBlock.timestamp), ("%s__" + toString(bH))), StringEntry(H(toString(cd.caller), toBase58String(cd.transactionId)), aq(ar, as, bK, bH, bv, ck, height, lastBlock.timestamp)), StringEntry(E(aj, ak), am((bn + ar), (bo + as), (bm + bK)))]
366- if (ce)
367- then {
368- let cn = invoke(cg, "stake", nil, [AttachedPayment(bh, bK)])
369- if ((cn == cn))
370- then cm
371- else throw("Strict value is not equal to itself.")
372- }
373- else (cm :+ ScriptTransfer(cd.caller, bK, bh))
374- }
375- else throw("Strict value is not equal to itself.")
278+ let bP = bO.assetPair.amountAsset
279+ let bQ = if ((bP == unit))
280+ then "WAVES"
281+ else toBase58String(value(bP))
282+ let bR = bO.assetPair.priceAsset
283+ let bS = if ((bR == unit))
284+ then "WAVES"
285+ else toBase58String(value(bR))
286+ if (if ((bQ != bf))
287+ then true
288+ else (bS != bg))
289+ then throw("Wrong order assets.")
290+ else {
291+ let bT = bO.price
292+ let bU = fraction(b, aO, aN)
293+ let bV = F(bT, b, bU)
294+ let bW = if ((bO.orderType == Buy))
295+ then (bp >= bV)
296+ else (bV >= bp)
297+ if (!(bW))
298+ then throw(((("Order price leads to K decrease. castedOrderPrice=" + toString(bV)) + " curPrice=") + toString(bp)))
299+ else true
300+ }
376301 }
377302 }
378303
379304
305+func bX (bY) = {
306+ let bZ = value(bY.payments[0])
307+ let ca = value(bZ.assetId)
308+ let cb = bZ.amount
309+ let bH = ba(toBase58String(ca), cb, toString(bY.caller))
310+ let aD = bH._1
311+ let aE = bH._2
312+ let bh = bH._3
313+ let bi = bH._4
314+ let bf = bH._5
315+ let bg = bH._6
316+ let cc = bH._7
317+ let cd = bH._8
318+ let bk = bH._9
319+ let bp = bH._10
320+ let bj = parseIntValue(bH._11)
321+ if (if (am())
322+ then true
323+ else (bj == j))
324+ then throw(("Get operation is blocked by admin. Status = " + toString(bj)))
325+ else $Tuple5(aD, aE, cb, ca, [ScriptTransfer(bY.caller, aD, if ((bf == "WAVES"))
326+ then unit
327+ else fromBase58String(bf)), ScriptTransfer(bY.caller, aE, if ((bg == "WAVES"))
328+ then unit
329+ else fromBase58String(bg)), StringEntry(S(toString(bY.caller), toBase58String(bY.transactionId)), aC(aD, aE, cb, bp, height, lastBlock.timestamp)), StringEntry(L(), ("%s__" + toString(bp))), StringEntry(M(height, lastBlock.timestamp), ("%s__" + toString(bp)))])
330+ }
380331
381-@Callable(cd)
382-func get () = {
383- let ch = value(cd.payments[0])
384- let co = value(ch.assetId)
385- let cp = ch.amount
386- let cm = bd(toBase58String(co), cp, toString(cd.caller))
387- let aA = cm._1
388- let aB = cm._2
389- let aj = cm._3
390- let ak = cm._4
391- let bi = cm._5
392- let bj = cm._6
393- let bn = cm._7
394- let bo = cm._8
395- let bm = cm._9
396- let bp = cm._10
397- let bk = parseIntValue(cm._11)
398- if (if (ab())
332+
333+func ce (bY,bv,cf) = {
334+ let bZ = value(bY.payments[0])
335+ let as = bZ.amount
336+ let bw = if (!(isDefined(bZ.assetId)))
337+ then fromBase58String("WAVES")
338+ else value(bZ.assetId)
339+ let cg = value(bY.payments[1])
340+ let at = cg.amount
341+ let bx = if (!(isDefined(cg.assetId)))
342+ then fromBase58String("WAVES")
343+ else value(cg.assetId)
344+ let ch = bu(bv, as, toBase58String(bw), at, toBase58String(bx), toString(bY.caller), false)
345+ let au = ch._1
346+ let bp = ch._2
347+ let cc = ch._3
348+ let cd = ch._4
349+ let bk = ch._5
350+ let bh = ch._6
351+ let bi = ch._7
352+ let be = ch._8
353+ let ci = ch._9
354+ let bj = parseIntValue(ch._10)
355+ let cj = ch._11
356+ let ck = ch._12
357+ if (if (if (am())
399358 then true
400- else (bk == i))
401- then throw(("Get operation is blocked by admin. Status = " + toString(bk)))
359+ else (bj == h))
360+ then true
361+ else (bj == j))
362+ then throw(("Put operation is blocked by admin. Status = " + toString(bj)))
402363 else {
403- let cq = invoke(aa, "burn", [cp], [AttachedPayment(co, cp)])
404- if ((cq == cq))
405- then if ((cq != "success"))
406- then throw("LP asset burn failed during emit call on factory.")
407- else [ScriptTransfer(cd.caller, aA, if ((bi == "WAVES"))
408- then unit
409- else fromBase58String(bi)), ScriptTransfer(cd.caller, aB, fromBase58String(bj)), StringEntry(E(aj, ak), am((bn - aA), (bo - aB), (bm - cp))), StringEntry(K(toString(cd.caller), toBase58String(cd.transactionId)), az(aA, aB, cp, bp, height, lastBlock.timestamp)), StringEntry(A(), ("%s__" + toString(bp))), StringEntry(B(height, lastBlock.timestamp), ("%s__" + toString(bp)))]
410- else throw("Strict value is not equal to itself.")
364+ let cl = if (!(cf))
365+ then 0
366+ else au
367+ let cm = (as - cj)
368+ let cn = (at - ck)
369+ let co = [StringEntry(L(), ("%s__" + toString(bp))), StringEntry(M(height, lastBlock.timestamp), ("%s__" + toString(bp))), StringEntry(P(toString(bY.caller), toBase58String(bY.transactionId)), ar(cj, ck, cl, bp, bv, ci, height, lastBlock.timestamp, cm, cn))]
370+ $Tuple9(cl, be, co, as, cj, at, ck, bZ.assetId, cg.assetId)
411371 }
412372 }
413373
414374
415-
416-@Callable(cd)
417-func activate (cr,cs) = if ((toString(cd.caller) != toString(aa)))
375+@Callable(bY)
376+func constructor (al,cp) = if ((bY.caller != this))
418377 then throw("permissions denied")
419- else $Tuple2([StringEntry(L(), cr), StringEntry(M(), cs)], "success")
378+ else [StringEntry(J(), al), StringEntry(K(), cp)]
420379
421380
422381
423-@Callable(cd)
424-func statsREADONLY () = {
425- let aX = ac()
426- let bh = fromBase58String(aX[l])
427- let bi = aX[m]
428- let bj = aX[n]
429- let aj = aX[q]
430- let ak = aX[r]
431- let aN = parseIntValue(aX[o])
432- let aO = parseIntValue(aX[p])
433- let bz = ai(aj, ak)
434- let bm = parseIntValue(bz[w])
435- let bA = aT(bi)
436- let bB = aT(bj)
437- let ct = aV(bA, bB, bm)
438- let bp = ct[0]
439- let cu = ct[1]
440- let cv = ct[2]
441- let cw = valueOrErrorMessage(getInteger(aa, Y(toString(this))), "Pool doesn't have weight.")
442- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bA), toString(bB), toString(bm), toString(bp), toString(cu), toString(cv), toString(cw)], e))
382+@Callable(bY)
383+func put (bv,cq) = {
384+ let cr = aq()
385+ let cs = valueOrErrorMessage(addressFromString(cr[x]), "Error. Incorrect staking address.")
386+ let ct = valueOrErrorMessage(addressFromString(cr[y]), "Error. Incorrect slippage contract address.")
387+ let cu = ce(bY, bv, true)
388+ let cv = cu._1
389+ let be = cu._2
390+ let cw = cu._3
391+ let cx = cu._4
392+ let cy = cu._5
393+ let cz = cu._6
394+ let cA = cu._7
395+ let cB = cu._8
396+ let cC = cu._9
397+ let cm = (cx - cy)
398+ let cn = (cz - cA)
399+ let cD = invoke(al, "emit", [cv], nil)
400+ if ((cD == cD))
401+ then {
402+ let cE = if ((cx > cy))
403+ then invoke(ct, "put", nil, [AttachedPayment(cB, cm)])
404+ else nil
405+ if ((cE == cE))
406+ then {
407+ let cF = if ((cz > cA))
408+ then invoke(ct, "put", nil, [AttachedPayment(cC, cn)])
409+ else nil
410+ if ((cF == cF))
411+ then {
412+ let cG = if (cq)
413+ then invoke(cs, "stake", nil, [AttachedPayment(be, cv)])
414+ else nil
415+ if ((cG == cG))
416+ then (cw :+ ScriptTransfer(bY.caller, cv, be))
417+ else throw("Strict value is not equal to itself.")
418+ }
419+ else throw("Strict value is not equal to itself.")
420+ }
421+ else throw("Strict value is not equal to itself.")
422+ }
423+ else throw("Strict value is not equal to itself.")
443424 }
444425
445426
446427
447-@Callable(cd)
448-func evaluatePutByAmountAssetREADONLY (bv,ar,I) = {
449- let aX = ac()
450- let bh = fromBase58String(aX[l])
451- let bi = aX[m]
452- let bj = aX[n]
453- let aj = aX[q]
454- let ak = aX[r]
455- let aN = parseIntValue(aX[o])
456- let aO = parseIntValue(aX[p])
457- let bk = aX[k]
458- let bz = ai(aj, ak)
459- let bm = parseIntValue(bz[w])
460- let bA = aT(bi)
461- let bB = aT(bj)
462- let cx = aD(bA, b, aN)
463- let cy = aD(bB, b, aO)
464- let bH = if ((bm == 0))
465- then 0
466- else aI(cy, cx)
467- let cz = aD(ar, b, aN)
468- let bF = fraction(cz, bH, b)
469- let as = aD(bF, aO, b)
470- let cj = bu(bv, ar, bi, as, bj, I, true)
471- let cA = cj._1
472- let cB = cj._2
473- let cC = cj._3
474- let cD = cj._4
475- let cE = cj._5
476- let cF = parseIntValue(cj._10)
477- $Tuple2(nil, makeString(["%d%d%d%d%d%d", toString(cA), toString(bH), toString(cC), toString(cD), toString(cE), toString(cF)], e))
428+@Callable(bY)
429+func putForFree () = {
430+ let cu = ce(bY, 0, false)
431+ cu._3
478432 }
479433
480434
481435
482-@Callable(cd)
483-func evaluatePutByPriceAssetREADONLY (bv,as,I) = {
484- let aX = ac()
485- let bh = fromBase58String(aX[l])
486- let bi = aX[m]
487- let bj = aX[n]
488- let aj = aX[q]
489- let ak = aX[r]
490- let aN = parseIntValue(aX[o])
491- let aO = parseIntValue(aX[p])
492- let bk = aX[k]
493- let bz = ai(aj, ak)
494- let bm = parseIntValue(bz[w])
495- let bA = aT(bi)
496- let bB = aT(bj)
497- let cx = aD(bA, b, aN)
498- let cy = aD(bB, b, aO)
499- let bF = aD(as, b, aO)
500- let bH = if ((bm == 0))
501- then 0
502- else aI(cy, cx)
503- let bE = fraction(bF, b, bH)
504- let ar = aD(bE, aN, b)
505- let cj = bu(bv, ar, bi, as, bj, I, true)
506- let cA = cj._1
507- let cB = cj._2
508- let cC = cj._3
509- let cD = cj._4
510- let cE = cj._5
511- let cF = parseIntValue(cj._10)
512- $Tuple2(nil, makeString(["%d%d%d%d%d%d", toString(cA), toString(bH), toString(cC), toString(cD), toString(cE), toString(cF)], e))
436+@Callable(bY)
437+func get () = {
438+ let bH = bX(bY)
439+ let aD = bH._1
440+ let aE = bH._2
441+ let cb = bH._3
442+ let ca = bH._4
443+ let cu = bH._5
444+ let cH = invoke(al, "burn", [cb], [AttachedPayment(ca, cb)])
445+ if ((cH == cH))
446+ then cu
447+ else throw("Strict value is not equal to itself.")
513448 }
514449
515450
516451
517-@Callable(cd)
518-func evaluateGetREADONLY (be,bf,I) = {
519- let cm = bd(be, bf, I)
520- let aA = cm._1
521- let aB = cm._2
522- let bn = cm._7
523- let bo = cm._8
524- let bm = cm._9
525- let bp = cm._10
526- let bk = parseIntValue(cm._11)
527- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(aA), toString(aB), toString(bn), toString(bo), toString(bm), toString(bp), toString(bk)], e))
452+@Callable(bY)
453+func getNoLess (cI,cJ) = {
454+ let bH = bX(bY)
455+ let aD = bH._1
456+ let aE = bH._2
457+ let cb = bH._3
458+ let ca = bH._4
459+ let cu = bH._5
460+ if ((cI > aD))
461+ then throw(((("noLessThenAmtAsset failed: " + toString(aD)) + " < ") + toString(cI)))
462+ else if ((cJ > aE))
463+ then throw(((("noLessThenPriceAsset failed: " + toString(aE)) + " < ") + toString(cJ)))
464+ else {
465+ let cH = invoke(al, "burn", [cb], [AttachedPayment(ca, cb)])
466+ if ((cH == cH))
467+ then cu
468+ else throw("Strict value is not equal to itself.")
469+ }
528470 }
529471
530472
531473
532-@Callable(cd)
533-func hashREADONLY () = $Tuple2(nil, toBase64String(value(scriptHash(this))))
474+@Callable(bY)
475+func activate (cK,cL) = if ((toString(bY.caller) != toString(al)))
476+ then throw("permissions denied")
477+ else $Tuple2([StringEntry(T(), cK), StringEntry(U(), cL)], "success")
534478
535479
536-@Verifier(cG)
537-func cH () = {
538- let cI = cG
539- if ($isInstanceOf(cI, "Order"))
480+
481+@Callable(bY)
482+func statsREADONLY () = {
483+ let aV = an()
484+ let be = fromBase58String(aV[m])
485+ let bf = aV[n]
486+ let bg = aV[o]
487+ let bh = aV[r]
488+ let bi = aV[s]
489+ let aN = parseIntValue(aV[p])
490+ let aO = parseIntValue(aV[q])
491+ let bk = valueOrErrorMessage(assetInfo(be), (("Asset " + toBase58String(be)) + " doesn't exist")).quantity
492+ let bz = aG(bf)
493+ let bA = aG(bg)
494+ let cM = aT(bz, bA, bk)
495+ let bp = cM[0]
496+ let cN = cM[1]
497+ let cO = cM[2]
498+ let cP = value(getInteger(al, af(toString(this))))
499+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bz), toString(bA), toString(bk), toString(bp), toString(cN), toString(cO), toString(cP)], e))
500+ }
501+
502+
503+
504+@Callable(bY)
505+func evaluatePutByAmtAssetREADONLY (bv,as,Q) = {
506+ let aV = an()
507+ let be = fromBase58String(aV[m])
508+ let bf = aV[n]
509+ let bg = aV[o]
510+ let bh = aV[r]
511+ let bi = aV[s]
512+ let aN = parseIntValue(aV[p])
513+ let aO = parseIntValue(aV[q])
514+ let bj = aV[l]
515+ let bk = valueOrErrorMessage(assetInfo(be), (("Asset " + toBase58String(be)) + " doesn't exist")).quantity
516+ let bz = aG(bf)
517+ let bA = aG(bg)
518+ let aR = z(bz, aN)
519+ let aS = z(bA, aO)
520+ let bJ = if ((bk == 0))
521+ then toBigInt(0)
522+ else aI(aS, aR, d)
523+ let bB = z(as, aN)
524+ let bC = fraction(bB, bJ, d)
525+ let at = C(bC, aO)
526+ let cQ = bu(bv, as, bf, at, bg, Q, true)
527+ let cR = cQ._1
528+ let cS = cQ._2
529+ let cT = cQ._3
530+ let cU = cQ._4
531+ let cV = cQ._5
532+ let cW = parseIntValue(cQ._10)
533+ $Tuple2(nil, makeString(["%d%d%d%d%d%d", toString(cR), toString(C(bJ, b)), toString(cT), toString(cU), toString(cV), toString(cW)], e))
534+ }
535+
536+
537+
538+@Callable(bY)
539+func evaluatePutByPriceAssetREADONLY (bv,at,Q) = {
540+ let aV = an()
541+ let be = fromBase58String(aV[m])
542+ let bf = aV[n]
543+ let bg = aV[o]
544+ let bh = aV[r]
545+ let bi = aV[s]
546+ let aN = parseIntValue(aV[p])
547+ let aO = parseIntValue(aV[q])
548+ let bj = aV[l]
549+ let bk = valueOrErrorMessage(assetInfo(be), (("Asset " + toBase58String(be)) + " doesn't exist")).quantity
550+ let bz = aG(bf)
551+ let bA = aG(bg)
552+ let aR = z(bz, aN)
553+ let aS = z(bA, aO)
554+ let bJ = if ((bk == 0))
555+ then toBigInt(0)
556+ else aI(aS, aR, d)
557+ let bC = z(at, aO)
558+ let bB = fraction(bC, d, bJ)
559+ let as = C(bB, aN)
560+ let cQ = bu(bv, as, bf, at, bg, Q, true)
561+ let cR = cQ._1
562+ let cS = cQ._2
563+ let cT = cQ._3
564+ let cU = cQ._4
565+ let cV = cQ._5
566+ let cW = parseIntValue(cQ._10)
567+ $Tuple2(nil, makeString(["%d%d%d%d%d%d", toString(cR), toString(C(bJ, b)), toString(cT), toString(cU), toString(cV), toString(cW)], e))
568+ }
569+
570+
571+
572+@Callable(bY)
573+func evaluateGetREADONLY (bb,bc,Q) = {
574+ let bH = ba(bb, bc, Q)
575+ let aD = bH._1
576+ let aE = bH._2
577+ let cc = bH._7
578+ let cd = bH._8
579+ let bk = bH._9
580+ let bp = bH._10
581+ let bj = parseIntValue(bH._11)
582+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(aD), toString(aE), toString(cc), toString(cd), toString(bk), toString(bp), toString(bj)], e))
583+ }
584+
585+
586+@Verifier(cX)
587+func cY () = {
588+ let cZ = cX
589+ if ($isInstanceOf(cZ, "Order"))
540590 then {
541- let bP = cI
542- sigVerify(cG.bodyBytes, cG.proofs[0], cG.senderPublicKey)
591+ let bO = cZ
592+ if (bN(bO))
593+ then sigVerify(cX.bodyBytes, cX.proofs[0], cX.senderPublicKey)
594+ else false
543595 }
544- else sigVerify(cG.bodyBytes, cG.proofs[0], cG.senderPublicKey)
596+ else {
597+ let da = valueOrElse(getString(this, K()), f)
598+ if ((da == f))
599+ then sigVerify(cX.bodyBytes, cX.proofs[0], cX.senderPublicKey)
600+ else sigVerify(cX.bodyBytes, cX.proofs[0], fromBase58String(da))
601+ }
545602 }
546603
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = "__"
1313
14-let f = 1
14+let f = ""
1515
16-let g = 2
16+let g = 1
1717
18-let h = 3
18+let h = 2
1919
20-let i = 4
20+let i = 3
2121
22-let j = 1
22+let j = 4
2323
24-let k = 2
24+let k = 1
2525
26-let l = 3
26+let l = 2
2727
28-let m = 4
28+let m = 3
2929
30-let n = 5
30+let n = 4
3131
32-let o = 6
32+let o = 5
3333
34-let p = 7
34+let p = 6
3535
36-let q = 8
36+let q = 7
3737
38-let r = 9
38+let r = 8
3939
40-let s = 10
40+let s = 9
4141
42-let t = 11
42+let t = 10
4343
4444 let u = 1
4545
4646 let v = 2
4747
4848 let w = 3
4949
5050 let x = 1
5151
52-let y = 2
52+let y = 7
5353
54-func z () = "%s__factoryContract"
54+func z (A,B) = fraction(toBigInt(A), d, toBigInt(B))
5555
5656
57-func A () = "%s%s__price__last"
57+func C (D,E) = toInt(fraction(D, toBigInt(E), d))
5858
5959
60-func B (C,D) = makeString(["%s%s%d%d__price__history", toString(C), toString(D)], e)
60+func F (G,H,I) = fraction(G, H, I)
6161
6262
63-func E (F,G) = (((("%d%d%s__" + F) + "__") + G) + "__locked")
63+func J () = "%s__factoryContract"
6464
6565
66-func H (I,J) = ((("%s%s%s__P__" + I) + "__") + J)
66+func K () = "%s__managerPublicKey"
6767
6868
69-func K (I,J) = ((("%s%s%s__G__" + I) + "__") + J)
69+func L () = "%s%s__price__last"
7070
7171
72-func L () = "%s__amountAsset"
72+func M (N,O) = makeString(["%s%s%d%d__price__history", toString(N), toString(O)], e)
7373
7474
75-func M () = "%s__priceAsset"
75+func P (Q,R) = ((("%s%s%s__P__" + Q) + "__") + R)
7676
7777
78-func N () = "%s%s__K_current"
78+func S (Q,R) = ((("%s%s%s__G__" + Q) + "__") + R)
7979
8080
81-func O (C,D) = makeString(["%s%s%d%d__K_history", toString(C), toString(D)], e)
81+func T () = "%s__amountAsset"
8282
8383
84-func P () = "%s__factoryConfig"
84+func U () = "%s__priceAsset"
8585
8686
87-func Q (R) = (("%s%s%s__" + R) + "__mappings__poolContract2LpAsset")
87+func V (N,O) = makeString(["%s%s%d%d__K_history", toString(N), toString(O)], e)
8888
8989
90-func S (T,U) = (((("%d%d%s__" + T) + "__") + U) + "__config")
90+func W () = "%s__factoryConfig"
9191
9292
93-func V (W) = ("%s%s%s__mappings__baseAsset2internalId__" + W)
93+func X (Y) = (("%s%s%s__" + Y) + "__mappings__poolContract2LpAsset")
9494
9595
96-func X () = "%s__shutdown"
96+func Z (aa,ab) = (((("%d%d%s__" + aa) + "__") + ab) + "__config")
9797
9898
99-func Y (Z) = ("%s%s__poolWeight__" + Z)
99+func ac (ad) = ("%s%s%s__mappings__baseAsset2internalId__" + ad)
100100
101101
102-let aa = addressFromStringValue(valueOrErrorMessage(getString(this, z()), "No Factory Account found."))
103-
104-func ab () = valueOrElse(getBoolean(aa, X()), false)
102+func ae () = "%s__shutdown"
105103
106104
107-func ac () = {
108- let ad = valueOrErrorMessage(getString(this, L()), "No config for amount asset found")
109- let ae = valueOrErrorMessage(getString(this, M()), "No config for price asset found")
110- let af = valueOrErrorMessage(getInteger(aa, V(ae)), "No config for internal price asset found")
111- let ag = valueOrErrorMessage(getInteger(aa, V(ad)), "No config for internal amount asset found")
112- split(valueOrErrorMessage(getString(aa, S(toString(ag), toString(af))), "No factory config found for pool assets."), e)
105+func af (ag) = ("%s%s__poolWeight__" + ag)
106+
107+
108+func ah (ai,aj) = valueOrErrorMessage(getString(ai, aj), (((("mandatory " + toString(ai)) + ".") + aj) + " is not defined"))
109+
110+
111+func ak (ai,aj) = valueOrErrorMessage(getInteger(ai, aj), (((("mandatory " + toString(ai)) + ".") + aj) + " is not defined"))
112+
113+
114+let al = addressFromStringValue(ah(this, J()))
115+
116+func am () = valueOrElse(getBoolean(al, ae()), false)
117+
118+
119+func an () = {
120+ let ao = ah(this, T())
121+ let ap = ah(this, U())
122+ let ab = ak(al, ac(ap))
123+ let aa = ak(al, ac(ao))
124+ split(ah(al, Z(toString(aa), toString(ab))), e)
113125 }
114126
115127
116-func ah () = split(valueOrErrorMessage(getString(aa, P()), "No factory config found."), e)
128+func aq () = split(ah(al, W()), e)
117129
118130
119-func ai (aj,ak) = {
120- let al = getString(this, E(aj, ak))
121- if (isDefined(al))
122- then split(value(al), e)
123- else ["", "0", "0", "0"]
131+func ar (as,at,au,av,aw,ax,ay,az,aA,aB) = makeString(["%d%d%d%d%d%d%d%d%d", toString(as), toString(at), toString(au), toString(av), toString(aw), toString(ax), toString(ay), toString(az), toString(aA), toString(aB)], e)
132+
133+
134+func aC (aD,aE,aF,av,ay,az) = makeString(["%d%d%d%d%d%d", toString(aD), toString(aE), toString(aF), toString(av), toString(ay), toString(az)], e)
135+
136+
137+func aG (aH) = if ((aH == "WAVES"))
138+ then wavesBalance(this).available
139+ else assetBalance(this, fromBase58String(aH))
140+
141+
142+func aI (aJ,aK,aL) = fraction(aJ, aL, aK)
143+
144+
145+func aM (aN,aO,aP,aQ) = {
146+ let aR = z(aP, aN)
147+ let aS = z(aQ, aO)
148+ toInt(aI(aS, aR, c))
124149 }
125150
126151
127-func am (an,ao,ap) = makeString(["%d%d%d", toString(an), toString(ao), toString(ap)], e)
128-
129-
130-func aq (ar,as,at,au,av,aw,ax,ay) = makeString(["%d%d%d%d%d%d%d", toString(ar), toString(as), toString(at), toString(au), toString(av), toString(aw), toString(ax), toString(ay)], e)
131-
132-
133-func az (aA,aB,aC,au,ax,ay) = makeString(["%d%d%d%d%d%d", toString(aA), toString(aB), toString(aC), toString(au), toString(ax), toString(ay)], e)
134-
135-
136-func aD (aE,aF,aG) = fraction(aE, aF, aG)
137-
138-
139-func aH (aE,aF,aG) = fraction(aE, aF, aG)
140-
141-
142-func aI (aJ,aK) = fraction(aJ, b, aK)
143-
144-
145-func aL (aJ,aK) = toInt(fraction(aJ, c, aK))
146-
147-
148-func aM (aN,aO,aP,aQ) = {
149- let aR = aD(aP, b, aN)
150- let aS = aD(aQ, b, aO)
151- aI(aS, aR)
152+func aT (aP,aQ,aU) = {
153+ let aV = an()
154+ let aN = parseIntValue(aV[p])
155+ let aO = parseIntValue(aV[q])
156+ let aW = aM(aN, aO, aP, aQ)
157+ let aR = z(aP, aN)
158+ let aS = z(aQ, aO)
159+ let aX = z(aU, b)
160+ let aY = toInt(aI(aR, aX, c))
161+ let aZ = toInt(aI(aS, aX, c))
162+[aW, aY, aZ]
152163 }
153164
154165
155-func aT (aU) = if ((aU == "WAVES"))
156- then wavesBalance(this).available
157- else assetBalance(this, fromBase58String(aU))
158-
159-
160-func aV (aP,aQ,aW) = {
161- let aX = ac()
162- let aN = parseIntValue(aX[o])
163- let aO = parseIntValue(aX[p])
164- let aY = aM(aN, aO, aP, aQ)
165- let aZ = aD(aP, b, aN)
166- let ba = aD(aQ, b, aO)
167- let bb = aI(aZ, aW)
168- let bc = aI(ba, aW)
169-[aY, bb, bc]
170- }
171-
172-
173-func bd (be,bf,I) = {
174- let bg = ac()
175- let bh = bg[l]
176- let bi = bg[m]
177- let bj = bg[n]
178- let aj = bg[q]
179- let ak = bg[r]
180- let aN = parseIntValue(bg[o])
181- let aO = parseIntValue(bg[p])
182- let bk = bg[k]
183- let bl = ai(aj, ak)
184- let bm = parseIntValue(bl[w])
185- let bn = parseIntValue(bl[u])
186- let bo = parseIntValue(bl[v])
187- if ((bh != be))
166+func ba (bb,bc,Q) = {
167+ let bd = an()
168+ let be = bd[m]
169+ let bf = bd[n]
170+ let bg = bd[o]
171+ let bh = bd[r]
172+ let bi = bd[s]
173+ let aN = parseIntValue(bd[p])
174+ let aO = parseIntValue(bd[q])
175+ let bj = bd[l]
176+ let bk = valueOrErrorMessage(assetInfo(fromBase58String(be)), (("Asset " + be) + " doesn't exist")).quantity
177+ if ((be != bb))
188178 then throw("Invalid asset passed.")
189179 else {
190- let aZ = aH(toBigInt(aT(bi)), d, toBigInt(aN))
191- let ba = aH(toBigInt(aT(bj)), d, toBigInt(aO))
192- let bp = aL(ba, aZ)
193- let bq = aH(toBigInt(bf), d, c)
194- let br = aH(toBigInt(bm), d, c)
195- let aA = fraction(aZ, bq, br)
196- let aB = fraction(ba, bq, br)
197- let bs = toInt(aH(aA, toBigInt(aN), d))
198- let bt = toInt(aH(aB, toBigInt(aO), d))
199- $Tuple11(bs, bt, aj, ak, bi, bj, bn, bo, bm, bp, bk)
180+ let bl = aG(bf)
181+ let bm = z(bl, aN)
182+ let bn = aG(bg)
183+ let bo = z(bn, aO)
184+ let bp = toInt(aI(bo, bm, c))
185+ let bq = z(bc, b)
186+ let br = z(bk, b)
187+ let aD = fraction(bm, bq, br)
188+ let aE = fraction(bo, bq, br)
189+ let bs = C(aD, aN)
190+ let bt = C(aE, aO)
191+ $Tuple11(bs, bt, bh, bi, bf, bg, bl, bn, bk, bp, bj)
200192 }
201193 }
202194
203195
204-func bu (bv,ar,bw,as,bx,I,by) = {
205- let aX = ac()
206- let bh = fromBase58String(aX[l])
207- let bi = aX[m]
208- let bj = aX[n]
209- let aj = aX[q]
210- let ak = aX[r]
211- let aN = parseIntValue(aX[o])
212- let aO = parseIntValue(aX[p])
213- let bk = aX[k]
214- let bz = ai(aj, ak)
215- let bn = parseIntValue(bz[u])
216- let bo = parseIntValue(bz[v])
217- let bm = parseIntValue(bz[w])
218- if (if ((bi != bw))
196+func bu (bv,as,bw,at,bx,Q,by) = {
197+ let aV = an()
198+ let be = fromBase58String(aV[m])
199+ let bf = aV[n]
200+ let bg = aV[o]
201+ let bh = aV[r]
202+ let bi = aV[s]
203+ let aN = parseIntValue(aV[p])
204+ let aO = parseIntValue(aV[q])
205+ let bj = aV[l]
206+ let bk = valueOrErrorMessage(assetInfo(be), (("Asset " + toBase58String(be)) + " doesn't exist")).quantity
207+ if (if ((bf != bw))
219208 then true
220- else (bj != bx))
221- then throw("Invalid amount or price asset passed.")
209+ else (bg != bx))
210+ then throw("Invalid amt or price asset passed.")
222211 else {
212+ let bz = if (by)
213+ then aG(bf)
214+ else (aG(bf) - as)
223215 let bA = if (by)
224- then aT(bi)
225- else (aT(bi) - ar)
226- let bB = if (by)
227- then aT(bj)
228- else (aT(bj) - as)
229- let bC = toBigInt(aN)
230- let bD = toBigInt(aO)
231- let bE = aH(toBigInt(ar), d, bC)
232- let bF = aH(toBigInt(as), d, bD)
233- let bG = aL(bF, bE)
234- let aZ = aH(toBigInt(bA), d, bC)
235- let ba = aH(toBigInt(bB), d, bD)
236- let bH = if ((bm == 0))
216+ then aG(bg)
217+ else (aG(bg) - at)
218+ let bB = z(as, aN)
219+ let bC = z(at, aO)
220+ let bD = toInt(aI(bC, bB, c))
221+ let bE = z(bz, aN)
222+ let bF = z(bA, aO)
223+ let bp = if ((bk == 0))
237224 then 0
238- else aL(ba, aZ)
239- let bI = if ((bH == 0))
225+ else toInt(aI(bF, bE, c))
226+ let bG = if ((bp == 0))
240227 then 0
241- else if ((bH > bG))
242- then fraction((bH - bG), 100, bH)
243- else fraction((bG - bH), 100, bH)
244- if (if ((bH != 0))
245- then ((bI * b) > bv)
228+ else if ((bp > bD))
229+ then fraction((bp - bD), b, bp)
230+ else fraction((bD - bp), b, bp)
231+ if (if ((bp != 0))
232+ then (bG > bv)
246233 else false)
247- then throw(((("Price slippage " + toString((bI * b))) + " exceeded the passed limit of ") + toString(bv)))
234+ then throw(((("Price slippage " + toString(bG)) + " exceeded the passed limit of ") + toString(bv)))
248235 else {
249- let bJ = aL((ba + bF), (aZ + bE))
250- let bK = if ((bm == 0))
236+ let bH = if ((bk == 0))
251237 then {
252- let bL = pow((bE * bF), 0, toBigInt(5), 1, 0, DOWN)
253- toInt(aH(bL, c, d))
238+ let bI = pow((bB * bC), 0, toBigInt(5), 1, 0, DOWN)
239+ $Tuple4(C(bI, b), C(bB, aN), C(bC, aO), toInt(aI((bF + bC), (bE + bB), c)))
254240 }
255241 else {
256- let br = aH(toBigInt(bm), d, c)
257- let bM = toInt(aH(fraction(br, bE, aZ), c, d))
258- let bN = toInt(aH(fraction(br, bF, ba), c, d))
259- if ((bN > bM))
260- then bM
261- else bN
242+ let br = z(bk, b)
243+ let bJ = z(bp, b)
244+ let bK = fraction(bJ, bB, d)
245+ let bL = if ((bK > bC))
246+ then $Tuple2(fraction(bC, d, bJ), bC)
247+ else $Tuple2(bB, bK)
248+ let bM = C(fraction(br, bL._2, bF), b)
249+ $Tuple4(bM, C(bL._1, aN), C(bL._2, aO), toInt(aI((bF + bL._2), (bE + bL._1), c)))
262250 }
263- if ((0 >= bK))
251+ if ((0 >= bH._1))
264252 then throw("Invalid calculations. LP calculated is less than zero.")
265- else $Tuple10(bK, bJ, bn, bo, bm, aj, ak, bh, bI, bk)
253+ else $Tuple12(bH._1, bH._4, bz, bA, bk, bh, bi, be, bG, bj, bH._2, bH._3)
266254 }
267255 }
268256 }
269257
270258
271-func bO (bP) = {
272- let aX = ac()
273- let bi = aX[m]
274- let bj = aX[n]
275- let bk = parseIntValue(aX[k])
276- let bQ = aX[t]
277- let bR = parseIntValue(aX[o])
278- let aO = parseIntValue(aX[p])
279- let bA = aT(bi)
280- let bB = aT(bj)
281- let bp = if ((bP.orderType == Buy))
282- then aM(bR, aO, (bA + bP.amount), bB)
283- else aM(bR, aO, (bA + bP.amount), bB)
284- let bS = if (if (if (ab())
259+func bN (bO) = {
260+ let aV = an()
261+ let bf = aV[n]
262+ let bg = aV[o]
263+ let bj = parseIntValue(aV[l])
264+ let aN = parseIntValue(aV[p])
265+ let aO = parseIntValue(aV[q])
266+ let bz = aG(bf)
267+ let bA = aG(bg)
268+ let bp = if ((bO.orderType == Buy))
269+ then aM(aN, aO, (bz + bO.amount), bA)
270+ else aM(aN, aO, (bz - bO.amount), bA)
271+ if (if (if (am())
285272 then true
286- else (bk == h))
273+ else (bj == i))
287274 then true
288- else (bk == i))
289- then false
290- else true
291- let bT = true
292- let bU = bP.assetPair.amountAsset
293- let bV = if ((bU == unit))
294- then "WAVES"
295- else toBase58String(value(bU))
296- let bW = bP.assetPair.priceAsset
297- let bX = if ((bW == unit))
298- then "WAVES"
299- else toBase58String(value(bW))
300- let bY = if (if ((bV != bi))
301- then true
302- else (bX != bj))
303- then false
304- else true
305- let bZ = bP.price
306- let ca = fraction(b, aO, bR)
307- let cb = aD(bZ, b, ca)
308- let cc = if ((bP.orderType == Buy))
309- then (bp >= cb)
310- else (cb >= bp)
311- if (if (if (bY)
312- then bT
313- else false)
314- then bS
315- else false)
316- then cc
317- else false
318- }
319-
320-
321-@Callable(cd)
322-func constructor (aa) = if ((cd.caller != this))
323- then throw("permissions denied")
324- else [StringEntry(z(), aa)]
325-
326-
327-
328-@Callable(cd)
329-func put (bv,ce) = {
330- let cf = ah()
331- let cg = valueOrErrorMessage(addressFromString(cf[x]), "Error. Incorrect staking address.")
332- let ch = value(cd.payments[0])
333- let ar = ch.amount
334- let bw = if (!(isDefined(ch.assetId)))
335- then fromBase58String("WAVES")
336- else value(ch.assetId)
337- let ci = value(cd.payments[1])
338- let as = ci.amount
339- let bx = if (!(isDefined(ci.assetId)))
340- then fromBase58String("WAVES")
341- else value(ci.assetId)
342- let cj = bu(bv, ar, toBase58String(bw), as, toBase58String(bx), toString(cd.caller), false)
343- let bK = cj._1
344- let bH = cj._2
345- let bn = cj._3
346- let bo = cj._4
347- let bm = cj._5
348- let aj = cj._6
349- let ak = cj._7
350- let bh = cj._8
351- let ck = cj._9
352- let bk = parseIntValue(cj._10)
353- if (if (if (ab())
354- then true
355- else (bk == g))
356- then true
357- else (bk == i))
358- then throw(("Put operation is blocked by admin. Status = " + toString(bk)))
275+ else (bj == j))
276+ then throw("Exchange operations disabled")
359277 else {
360- let cl = invoke(aa, "emit", [bK], nil)
361- if ((cl == cl))
362- then if ((cl != "success"))
363- then throw("LP asset reissue failed during emit call on factory.")
364- else {
365- let cm = [StringEntry(A(), ("%s__" + toString(bH))), StringEntry(B(height, lastBlock.timestamp), ("%s__" + toString(bH))), StringEntry(H(toString(cd.caller), toBase58String(cd.transactionId)), aq(ar, as, bK, bH, bv, ck, height, lastBlock.timestamp)), StringEntry(E(aj, ak), am((bn + ar), (bo + as), (bm + bK)))]
366- if (ce)
367- then {
368- let cn = invoke(cg, "stake", nil, [AttachedPayment(bh, bK)])
369- if ((cn == cn))
370- then cm
371- else throw("Strict value is not equal to itself.")
372- }
373- else (cm :+ ScriptTransfer(cd.caller, bK, bh))
374- }
375- else throw("Strict value is not equal to itself.")
278+ let bP = bO.assetPair.amountAsset
279+ let bQ = if ((bP == unit))
280+ then "WAVES"
281+ else toBase58String(value(bP))
282+ let bR = bO.assetPair.priceAsset
283+ let bS = if ((bR == unit))
284+ then "WAVES"
285+ else toBase58String(value(bR))
286+ if (if ((bQ != bf))
287+ then true
288+ else (bS != bg))
289+ then throw("Wrong order assets.")
290+ else {
291+ let bT = bO.price
292+ let bU = fraction(b, aO, aN)
293+ let bV = F(bT, b, bU)
294+ let bW = if ((bO.orderType == Buy))
295+ then (bp >= bV)
296+ else (bV >= bp)
297+ if (!(bW))
298+ then throw(((("Order price leads to K decrease. castedOrderPrice=" + toString(bV)) + " curPrice=") + toString(bp)))
299+ else true
300+ }
376301 }
377302 }
378303
379304
305+func bX (bY) = {
306+ let bZ = value(bY.payments[0])
307+ let ca = value(bZ.assetId)
308+ let cb = bZ.amount
309+ let bH = ba(toBase58String(ca), cb, toString(bY.caller))
310+ let aD = bH._1
311+ let aE = bH._2
312+ let bh = bH._3
313+ let bi = bH._4
314+ let bf = bH._5
315+ let bg = bH._6
316+ let cc = bH._7
317+ let cd = bH._8
318+ let bk = bH._9
319+ let bp = bH._10
320+ let bj = parseIntValue(bH._11)
321+ if (if (am())
322+ then true
323+ else (bj == j))
324+ then throw(("Get operation is blocked by admin. Status = " + toString(bj)))
325+ else $Tuple5(aD, aE, cb, ca, [ScriptTransfer(bY.caller, aD, if ((bf == "WAVES"))
326+ then unit
327+ else fromBase58String(bf)), ScriptTransfer(bY.caller, aE, if ((bg == "WAVES"))
328+ then unit
329+ else fromBase58String(bg)), StringEntry(S(toString(bY.caller), toBase58String(bY.transactionId)), aC(aD, aE, cb, bp, height, lastBlock.timestamp)), StringEntry(L(), ("%s__" + toString(bp))), StringEntry(M(height, lastBlock.timestamp), ("%s__" + toString(bp)))])
330+ }
380331
381-@Callable(cd)
382-func get () = {
383- let ch = value(cd.payments[0])
384- let co = value(ch.assetId)
385- let cp = ch.amount
386- let cm = bd(toBase58String(co), cp, toString(cd.caller))
387- let aA = cm._1
388- let aB = cm._2
389- let aj = cm._3
390- let ak = cm._4
391- let bi = cm._5
392- let bj = cm._6
393- let bn = cm._7
394- let bo = cm._8
395- let bm = cm._9
396- let bp = cm._10
397- let bk = parseIntValue(cm._11)
398- if (if (ab())
332+
333+func ce (bY,bv,cf) = {
334+ let bZ = value(bY.payments[0])
335+ let as = bZ.amount
336+ let bw = if (!(isDefined(bZ.assetId)))
337+ then fromBase58String("WAVES")
338+ else value(bZ.assetId)
339+ let cg = value(bY.payments[1])
340+ let at = cg.amount
341+ let bx = if (!(isDefined(cg.assetId)))
342+ then fromBase58String("WAVES")
343+ else value(cg.assetId)
344+ let ch = bu(bv, as, toBase58String(bw), at, toBase58String(bx), toString(bY.caller), false)
345+ let au = ch._1
346+ let bp = ch._2
347+ let cc = ch._3
348+ let cd = ch._4
349+ let bk = ch._5
350+ let bh = ch._6
351+ let bi = ch._7
352+ let be = ch._8
353+ let ci = ch._9
354+ let bj = parseIntValue(ch._10)
355+ let cj = ch._11
356+ let ck = ch._12
357+ if (if (if (am())
399358 then true
400- else (bk == i))
401- then throw(("Get operation is blocked by admin. Status = " + toString(bk)))
359+ else (bj == h))
360+ then true
361+ else (bj == j))
362+ then throw(("Put operation is blocked by admin. Status = " + toString(bj)))
402363 else {
403- let cq = invoke(aa, "burn", [cp], [AttachedPayment(co, cp)])
404- if ((cq == cq))
405- then if ((cq != "success"))
406- then throw("LP asset burn failed during emit call on factory.")
407- else [ScriptTransfer(cd.caller, aA, if ((bi == "WAVES"))
408- then unit
409- else fromBase58String(bi)), ScriptTransfer(cd.caller, aB, fromBase58String(bj)), StringEntry(E(aj, ak), am((bn - aA), (bo - aB), (bm - cp))), StringEntry(K(toString(cd.caller), toBase58String(cd.transactionId)), az(aA, aB, cp, bp, height, lastBlock.timestamp)), StringEntry(A(), ("%s__" + toString(bp))), StringEntry(B(height, lastBlock.timestamp), ("%s__" + toString(bp)))]
410- else throw("Strict value is not equal to itself.")
364+ let cl = if (!(cf))
365+ then 0
366+ else au
367+ let cm = (as - cj)
368+ let cn = (at - ck)
369+ let co = [StringEntry(L(), ("%s__" + toString(bp))), StringEntry(M(height, lastBlock.timestamp), ("%s__" + toString(bp))), StringEntry(P(toString(bY.caller), toBase58String(bY.transactionId)), ar(cj, ck, cl, bp, bv, ci, height, lastBlock.timestamp, cm, cn))]
370+ $Tuple9(cl, be, co, as, cj, at, ck, bZ.assetId, cg.assetId)
411371 }
412372 }
413373
414374
415-
416-@Callable(cd)
417-func activate (cr,cs) = if ((toString(cd.caller) != toString(aa)))
375+@Callable(bY)
376+func constructor (al,cp) = if ((bY.caller != this))
418377 then throw("permissions denied")
419- else $Tuple2([StringEntry(L(), cr), StringEntry(M(), cs)], "success")
378+ else [StringEntry(J(), al), StringEntry(K(), cp)]
420379
421380
422381
423-@Callable(cd)
424-func statsREADONLY () = {
425- let aX = ac()
426- let bh = fromBase58String(aX[l])
427- let bi = aX[m]
428- let bj = aX[n]
429- let aj = aX[q]
430- let ak = aX[r]
431- let aN = parseIntValue(aX[o])
432- let aO = parseIntValue(aX[p])
433- let bz = ai(aj, ak)
434- let bm = parseIntValue(bz[w])
435- let bA = aT(bi)
436- let bB = aT(bj)
437- let ct = aV(bA, bB, bm)
438- let bp = ct[0]
439- let cu = ct[1]
440- let cv = ct[2]
441- let cw = valueOrErrorMessage(getInteger(aa, Y(toString(this))), "Pool doesn't have weight.")
442- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bA), toString(bB), toString(bm), toString(bp), toString(cu), toString(cv), toString(cw)], e))
382+@Callable(bY)
383+func put (bv,cq) = {
384+ let cr = aq()
385+ let cs = valueOrErrorMessage(addressFromString(cr[x]), "Error. Incorrect staking address.")
386+ let ct = valueOrErrorMessage(addressFromString(cr[y]), "Error. Incorrect slippage contract address.")
387+ let cu = ce(bY, bv, true)
388+ let cv = cu._1
389+ let be = cu._2
390+ let cw = cu._3
391+ let cx = cu._4
392+ let cy = cu._5
393+ let cz = cu._6
394+ let cA = cu._7
395+ let cB = cu._8
396+ let cC = cu._9
397+ let cm = (cx - cy)
398+ let cn = (cz - cA)
399+ let cD = invoke(al, "emit", [cv], nil)
400+ if ((cD == cD))
401+ then {
402+ let cE = if ((cx > cy))
403+ then invoke(ct, "put", nil, [AttachedPayment(cB, cm)])
404+ else nil
405+ if ((cE == cE))
406+ then {
407+ let cF = if ((cz > cA))
408+ then invoke(ct, "put", nil, [AttachedPayment(cC, cn)])
409+ else nil
410+ if ((cF == cF))
411+ then {
412+ let cG = if (cq)
413+ then invoke(cs, "stake", nil, [AttachedPayment(be, cv)])
414+ else nil
415+ if ((cG == cG))
416+ then (cw :+ ScriptTransfer(bY.caller, cv, be))
417+ else throw("Strict value is not equal to itself.")
418+ }
419+ else throw("Strict value is not equal to itself.")
420+ }
421+ else throw("Strict value is not equal to itself.")
422+ }
423+ else throw("Strict value is not equal to itself.")
443424 }
444425
445426
446427
447-@Callable(cd)
448-func evaluatePutByAmountAssetREADONLY (bv,ar,I) = {
449- let aX = ac()
450- let bh = fromBase58String(aX[l])
451- let bi = aX[m]
452- let bj = aX[n]
453- let aj = aX[q]
454- let ak = aX[r]
455- let aN = parseIntValue(aX[o])
456- let aO = parseIntValue(aX[p])
457- let bk = aX[k]
458- let bz = ai(aj, ak)
459- let bm = parseIntValue(bz[w])
460- let bA = aT(bi)
461- let bB = aT(bj)
462- let cx = aD(bA, b, aN)
463- let cy = aD(bB, b, aO)
464- let bH = if ((bm == 0))
465- then 0
466- else aI(cy, cx)
467- let cz = aD(ar, b, aN)
468- let bF = fraction(cz, bH, b)
469- let as = aD(bF, aO, b)
470- let cj = bu(bv, ar, bi, as, bj, I, true)
471- let cA = cj._1
472- let cB = cj._2
473- let cC = cj._3
474- let cD = cj._4
475- let cE = cj._5
476- let cF = parseIntValue(cj._10)
477- $Tuple2(nil, makeString(["%d%d%d%d%d%d", toString(cA), toString(bH), toString(cC), toString(cD), toString(cE), toString(cF)], e))
428+@Callable(bY)
429+func putForFree () = {
430+ let cu = ce(bY, 0, false)
431+ cu._3
478432 }
479433
480434
481435
482-@Callable(cd)
483-func evaluatePutByPriceAssetREADONLY (bv,as,I) = {
484- let aX = ac()
485- let bh = fromBase58String(aX[l])
486- let bi = aX[m]
487- let bj = aX[n]
488- let aj = aX[q]
489- let ak = aX[r]
490- let aN = parseIntValue(aX[o])
491- let aO = parseIntValue(aX[p])
492- let bk = aX[k]
493- let bz = ai(aj, ak)
494- let bm = parseIntValue(bz[w])
495- let bA = aT(bi)
496- let bB = aT(bj)
497- let cx = aD(bA, b, aN)
498- let cy = aD(bB, b, aO)
499- let bF = aD(as, b, aO)
500- let bH = if ((bm == 0))
501- then 0
502- else aI(cy, cx)
503- let bE = fraction(bF, b, bH)
504- let ar = aD(bE, aN, b)
505- let cj = bu(bv, ar, bi, as, bj, I, true)
506- let cA = cj._1
507- let cB = cj._2
508- let cC = cj._3
509- let cD = cj._4
510- let cE = cj._5
511- let cF = parseIntValue(cj._10)
512- $Tuple2(nil, makeString(["%d%d%d%d%d%d", toString(cA), toString(bH), toString(cC), toString(cD), toString(cE), toString(cF)], e))
436+@Callable(bY)
437+func get () = {
438+ let bH = bX(bY)
439+ let aD = bH._1
440+ let aE = bH._2
441+ let cb = bH._3
442+ let ca = bH._4
443+ let cu = bH._5
444+ let cH = invoke(al, "burn", [cb], [AttachedPayment(ca, cb)])
445+ if ((cH == cH))
446+ then cu
447+ else throw("Strict value is not equal to itself.")
513448 }
514449
515450
516451
517-@Callable(cd)
518-func evaluateGetREADONLY (be,bf,I) = {
519- let cm = bd(be, bf, I)
520- let aA = cm._1
521- let aB = cm._2
522- let bn = cm._7
523- let bo = cm._8
524- let bm = cm._9
525- let bp = cm._10
526- let bk = parseIntValue(cm._11)
527- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(aA), toString(aB), toString(bn), toString(bo), toString(bm), toString(bp), toString(bk)], e))
452+@Callable(bY)
453+func getNoLess (cI,cJ) = {
454+ let bH = bX(bY)
455+ let aD = bH._1
456+ let aE = bH._2
457+ let cb = bH._3
458+ let ca = bH._4
459+ let cu = bH._5
460+ if ((cI > aD))
461+ then throw(((("noLessThenAmtAsset failed: " + toString(aD)) + " < ") + toString(cI)))
462+ else if ((cJ > aE))
463+ then throw(((("noLessThenPriceAsset failed: " + toString(aE)) + " < ") + toString(cJ)))
464+ else {
465+ let cH = invoke(al, "burn", [cb], [AttachedPayment(ca, cb)])
466+ if ((cH == cH))
467+ then cu
468+ else throw("Strict value is not equal to itself.")
469+ }
528470 }
529471
530472
531473
532-@Callable(cd)
533-func hashREADONLY () = $Tuple2(nil, toBase64String(value(scriptHash(this))))
474+@Callable(bY)
475+func activate (cK,cL) = if ((toString(bY.caller) != toString(al)))
476+ then throw("permissions denied")
477+ else $Tuple2([StringEntry(T(), cK), StringEntry(U(), cL)], "success")
534478
535479
536-@Verifier(cG)
537-func cH () = {
538- let cI = cG
539- if ($isInstanceOf(cI, "Order"))
480+
481+@Callable(bY)
482+func statsREADONLY () = {
483+ let aV = an()
484+ let be = fromBase58String(aV[m])
485+ let bf = aV[n]
486+ let bg = aV[o]
487+ let bh = aV[r]
488+ let bi = aV[s]
489+ let aN = parseIntValue(aV[p])
490+ let aO = parseIntValue(aV[q])
491+ let bk = valueOrErrorMessage(assetInfo(be), (("Asset " + toBase58String(be)) + " doesn't exist")).quantity
492+ let bz = aG(bf)
493+ let bA = aG(bg)
494+ let cM = aT(bz, bA, bk)
495+ let bp = cM[0]
496+ let cN = cM[1]
497+ let cO = cM[2]
498+ let cP = value(getInteger(al, af(toString(this))))
499+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bz), toString(bA), toString(bk), toString(bp), toString(cN), toString(cO), toString(cP)], e))
500+ }
501+
502+
503+
504+@Callable(bY)
505+func evaluatePutByAmtAssetREADONLY (bv,as,Q) = {
506+ let aV = an()
507+ let be = fromBase58String(aV[m])
508+ let bf = aV[n]
509+ let bg = aV[o]
510+ let bh = aV[r]
511+ let bi = aV[s]
512+ let aN = parseIntValue(aV[p])
513+ let aO = parseIntValue(aV[q])
514+ let bj = aV[l]
515+ let bk = valueOrErrorMessage(assetInfo(be), (("Asset " + toBase58String(be)) + " doesn't exist")).quantity
516+ let bz = aG(bf)
517+ let bA = aG(bg)
518+ let aR = z(bz, aN)
519+ let aS = z(bA, aO)
520+ let bJ = if ((bk == 0))
521+ then toBigInt(0)
522+ else aI(aS, aR, d)
523+ let bB = z(as, aN)
524+ let bC = fraction(bB, bJ, d)
525+ let at = C(bC, aO)
526+ let cQ = bu(bv, as, bf, at, bg, Q, true)
527+ let cR = cQ._1
528+ let cS = cQ._2
529+ let cT = cQ._3
530+ let cU = cQ._4
531+ let cV = cQ._5
532+ let cW = parseIntValue(cQ._10)
533+ $Tuple2(nil, makeString(["%d%d%d%d%d%d", toString(cR), toString(C(bJ, b)), toString(cT), toString(cU), toString(cV), toString(cW)], e))
534+ }
535+
536+
537+
538+@Callable(bY)
539+func evaluatePutByPriceAssetREADONLY (bv,at,Q) = {
540+ let aV = an()
541+ let be = fromBase58String(aV[m])
542+ let bf = aV[n]
543+ let bg = aV[o]
544+ let bh = aV[r]
545+ let bi = aV[s]
546+ let aN = parseIntValue(aV[p])
547+ let aO = parseIntValue(aV[q])
548+ let bj = aV[l]
549+ let bk = valueOrErrorMessage(assetInfo(be), (("Asset " + toBase58String(be)) + " doesn't exist")).quantity
550+ let bz = aG(bf)
551+ let bA = aG(bg)
552+ let aR = z(bz, aN)
553+ let aS = z(bA, aO)
554+ let bJ = if ((bk == 0))
555+ then toBigInt(0)
556+ else aI(aS, aR, d)
557+ let bC = z(at, aO)
558+ let bB = fraction(bC, d, bJ)
559+ let as = C(bB, aN)
560+ let cQ = bu(bv, as, bf, at, bg, Q, true)
561+ let cR = cQ._1
562+ let cS = cQ._2
563+ let cT = cQ._3
564+ let cU = cQ._4
565+ let cV = cQ._5
566+ let cW = parseIntValue(cQ._10)
567+ $Tuple2(nil, makeString(["%d%d%d%d%d%d", toString(cR), toString(C(bJ, b)), toString(cT), toString(cU), toString(cV), toString(cW)], e))
568+ }
569+
570+
571+
572+@Callable(bY)
573+func evaluateGetREADONLY (bb,bc,Q) = {
574+ let bH = ba(bb, bc, Q)
575+ let aD = bH._1
576+ let aE = bH._2
577+ let cc = bH._7
578+ let cd = bH._8
579+ let bk = bH._9
580+ let bp = bH._10
581+ let bj = parseIntValue(bH._11)
582+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(aD), toString(aE), toString(cc), toString(cd), toString(bk), toString(bp), toString(bj)], e))
583+ }
584+
585+
586+@Verifier(cX)
587+func cY () = {
588+ let cZ = cX
589+ if ($isInstanceOf(cZ, "Order"))
540590 then {
541- let bP = cI
542- sigVerify(cG.bodyBytes, cG.proofs[0], cG.senderPublicKey)
591+ let bO = cZ
592+ if (bN(bO))
593+ then sigVerify(cX.bodyBytes, cX.proofs[0], cX.senderPublicKey)
594+ else false
543595 }
544- else sigVerify(cG.bodyBytes, cG.proofs[0], cG.senderPublicKey)
596+ else {
597+ let da = valueOrElse(getString(this, K()), f)
598+ if ((da == f))
599+ then sigVerify(cX.bodyBytes, cX.proofs[0], cX.senderPublicKey)
600+ else sigVerify(cX.bodyBytes, cX.proofs[0], fromBase58String(da))
601+ }
545602 }
546603

github/deemru/w8io/026f985 
97.25 ms