tx · 7TzxF7JVSiNrxkE62jCCQKz9h8k6r2VB84dabkJNB5uW

3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz:  -0.03500000 Waves

2022.06.27 10:25 [2114542] smart account 3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz > SELF 0.00000000 Waves

{ "type": 13, "id": "7TzxF7JVSiNrxkE62jCCQKz9h8k6r2VB84dabkJNB5uW", "fee": 3500000, "feeAssetId": null, "timestamp": 1656314757160, "version": 2, "chainId": 84, "sender": "3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz", "senderPublicKey": "D28XoueZWsMfm8Y5pa6C5ZFuYoWgre2Wm8tzJANJgMnq", "proofs": [ "3VmxocgqTkso4mGxFiL2TUkwyLo8GdXJoqVUzLnRmA7LEsij6iM22YvzMv8QaDYpcCJZPEtthDJTPDmxYAWrYwox" ], "script": "base64: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YXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAQAAAAV2YWx1ZQAAAAEJAAGoAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAKZGVmYXVsdFZhbAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAFdG9YMTgAAAACAAAAB29yaWdWYWwAAAANb3JpZ1NjYWxlTXVsdAkAATwAAAADCQABNgAAAAEFAAAAB29yaWdWYWwFAAAABk1VTFQxOAkAATYAAAABBQAAAA1vcmlnU2NhbGVNdWx0AQAAAAdmcm9tWDE4AAAAAgAAAAN2YWwAAAAPcmVzdWx0U2NhbGVNdWx0CQABoAAAAAEJAAE8AAAAAwUAAAADdmFsCQABNgAAAAEFAAAAD3Jlc3VsdFNjYWxlTXVsdAUAAAAGTVVMVDE4AQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAACAAAAHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MAAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAAAAAAAAAAAAQAAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAAAAAAAAAAAAgAAAAAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAAAAAAAAAAMAAAAAFUlkeEZhY3RvcnlDZmdUZWFtRGFwcAAAAAAAAAAABAAAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAAAAAAAAAAABQAAAAAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAAAAAAAAAAGAAAAABlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwAAAAAAAAAAAHAQAAAA1rZXlGYWN0b3J5Q2ZnAAAAAAIAAAARJXNfX2ZhY3RvcnlDb25maWcBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAUa2V5TWlncmF0b3JQdWJsaWNLZXkAAAAAAgAAABUlc19fbWlncmF0b3JQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQAAABZrZXlTdGFibGVQb29sQWRkb25BZGRyAAAAAAIAAAAXJXNfX3N0YWJsZVBvb2xBZGRvbkFkZHIBAAAAGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAAAAAQAAAApscEFzc2V0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAIFAAAACmxwQXNzZXRTdHIJAARMAAAAAgIAAAAebWFwcGluZ3NfX2xwQXNzZXQyUG9vbENvbnRyYWN0BQAAAANuaWwFAAAAA1NFUAEAAAAQa2V5RmFjdG9yeUxwTGlzdAAAAAACAAAAECVzX19scFRva2Vuc0xpc3QBAAAAJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAQAAAApscEFzc2V0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAIFAAAACmxwQXNzZXRTdHIJAARMAAAAAgIAAAAebWFwcGluZ3NfX2xwQXNzZXQyUG9vbENvbnRyYWN0BQAAAANuaWwFAAAAA1NFUAEAAAAUa2V5RmFjdG9yeVBvb2xXZWlnaHQAAAABAAAAD2NvbnRyYWN0QWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAABCVzJXMJAARMAAAAAgIAAAAKcG9vbFdlaWdodAkABEwAAAACBQAAAA9jb250cmFjdEFkZHJlc3MFAAAAA25pbAUAAAADU0VQAQAAAApyZWFkTHBMaXN0AAAAAQAAAAdmYWN0b3J5CQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAHZmFjdG9yeQkBAAAAEGtleUZhY3RvcnlMcExpc3QAAAAAAgAAAAAFAAAAA1NFUAEAAAAUcmVhZEZhY3RvcnlDZmdPckZhaWwAAAABAAAAB2ZhY3RvcnkJAAS1AAAAAgkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAAAAAIFAAAAB2ZhY3RvcnkJAQAAAA1rZXlGYWN0b3J5Q2ZnAAAAAAUAAAADU0VQAQAAABhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAEAAAAYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHABAAAAF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAEAAAAea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAAAAAIAAAAbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQAAACFrZXlFbWlzc2lvblJhdGVQZXJCbG9ja01heEN1cnJlbnQAAAAAAgAAAB4lcyVzX19yYXRlUGVyQmxvY2tNYXhfX2N1cnJlbnQBAAAAFWtleUVtaXNzaW9uU3RhcnRCbG9jawAAAAACAAAAGiVzJXNfX2VtaXNzaW9uX19zdGFydEJsb2NrAQAAABtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MAAAAAAgAAABglcyVzX19lbWlzc2lvbl9fZHVyYXRpb24BAAAAE2tleUVtaXNzaW9uRW5kQmxvY2sAAAAAAgAAABglcyVzX19lbWlzc2lvbl9fZW5kQmxvY2sBAAAAD2tleVN0YWtlZEJ5VXNlcgAAAAIAAAAOdXNlckFkZHJlc3NTdHIAAAAMbHBBc3NldElkU3RyCQAEuQAAAAIJAARMAAAAAgIAAAAOJXMlcyVzX19zdGFrZWQJAARMAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIJAARMAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAANuaWwFAAAAA1NFUAEAAAAOa2V5U3Rha2VkVG90YWwAAAABAAAADGxwQXNzZXRJZFN0cgkAASwAAAACAgAAABclcyVzJXNfX3N0YWtlZF9fdG90YWxfXwUAAAAMbHBB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dGl2ZSgxMDYyKQAAAAEFAAAADmZhY3RvcnlBZGRyZXNzAAAAAApmYWN0b3J5Q2ZnCQEAAAAUcmVhZEZhY3RvcnlDZmdPckZhaWwAAAABBQAAAA9mYWN0b3J5Q29udHJhY3QAAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwAAAABBQAAAApmYWN0b3J5Q2ZnAAAAABBib29zdGluZ0NvbnRyYWN0CQEAAAAYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsAAAAAQUAAAAKZmFjdG9yeUNmZwEAAAAbY2FsY1d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0AAAABAAAAAxzdGFrZWRCeVVzZXIAAAAmd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRPclplcm8AAAASd3hQZXJMcEludGVncmFsTmV3AAAAGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZAwMJAAAAAAAAAgUAAAAmd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRPclplcm8FAAAACnplcm9CaWdJbnQJAAE/AAAAAgUAAAAMc3Rha2VkQnlVc2VyBQAAAAp6ZXJvQmlnSW50BwUAAAAKemVyb0JpZ0ludAMJAAAAAAAAAgUAAAAMc3Rha2VkQnlVc2VyBQAAAAp6ZXJvQmlnSW50BQAAABJ3eFBlckxwSW50ZWdyYWxOZXcDAwkAAT8AAAACBQAAACZ3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodE9yWmVybwUAAAAKemVyb0JpZ0ludAkAAT8AAAACBQAAAAxzdGFrZWRCeVVzZXIFAAAACnplcm9CaWdJbnQHCQEAAAAFdmFsdWUAAAABCQABqAAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzBQAAABp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdEtFWQkAAAIAAAABAgAAAC1jYWxjV3hQZXJMcEludGVncmFsVXNlckxhc3Q6IHVuZXhwZWN0ZWQgc3RhdGUBAAAAFHJlZnJlc2hQb29sSU5URUdSQUxTAAAAAwAAAAxscEFzc2V0SWRTdHIAAAAOcG9vbEFkZHJlc3NTdHIAAAANbHBEZWx0YUFtb3VudAQAAAAOc3Rha2VkVG90YWxLRVkJAQAAAA5rZXlTdGFrZWRUb3RhbAAAAAEFAAAADGxwQXNzZXRJZFN0cgQAAAALc3Rha2VkVG90YWwJAAE2AAAAAQkBAAAACnJlYWRTdGFrZWQAAAABBQAAAA5zdGFrZWRUb3RhbEtFWQQAAAASbm9uWmVyb1N0YWtlZFRvdGFsAwkAAAAAAAACBQAAAAtzdGFrZWRUb3RhbAUAAAAKemVyb0JpZ0ludAUAAAAJb25lQmlnSW50BQAAAAtzdGFrZWRUb3RhbAQAAAAKcG9vbFdlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAUa2V5RmFjdG9yeVBvb2xXZWlnaHQAAAABBQAAAA5wb29sQWRkcmVzc1N0cgQAAAASZW1pc3Npb25TdGFydEJsb2NrCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkBAAAAFWtleUVtaXNzaW9uU3RhcnRCbG9jawAAAAAEAAAABU1VTFQzAAAAAAAAAAPoBAAAABR3eEVtaXNzaW9uUGVyQmxvY2tYMwkAAGgAAAACCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkBAAAAHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAAAAAFAAAABU1VTFQzBAAAABhwb29sV3hFbWlzc2lvblBlckJsb2NrWDMJAABrAAAAAwUAAAAUd3hFbWlzc2lvblBlckJsb2NrWDMFAAAACnBvb2xXZWlnaHQJAABoAAAAAgUAAAAOUE9PTFdFSUdIVE1VTFQAAAAAAAAAAAMEAAAAEnd4UGVyTHBJbnRlZ3JhbEtFWQkBAAAAEmtleVd4UGVyTHBJbnRlZ3JhbAAAAAEFAAAADGxwQXNzZXRJZFN0cgQAAAAfd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodEtFWQkBAAAAH2tleVd4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHQAAAABBQAAAAxscEFzc2V0SWRTdHIEAAAACnd4UGVyTHBLRVkJAQAAAAprZXlXeFBlckxwAAAAAQUAAAAMbHBBc3NldElkU3RyBAAAABx3eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0CQEAAAAPZ2V0SW50T3JEZWZhdWx0AAAAAwUAAAAEdGhpcwUAAAAfd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodEtFWQUAAAASZW1pc3Npb25TdGFydEJsb2NrBAAAAA93eFBlckxwSW50ZWdyYWwJAQAAABlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAAAAAgUAAAAEdGhpcwUAAAASd3hQZXJMcEludGVncmFsS0VZBAAAAA93eFBlckxwT3JaZXJvWDMAAAAAAAAAAAAEAAAAAmRoCQABlgAAAAEJAARMAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAAHHd4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHQJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBAAAAAl3eFBlckxwWDMDCQEAAAACIT0AAAACBQAAAA93eFBlckxwT3JaZXJvWDMAAAAAAAAAAAAJAAE2AAAAAQUAAAAPd3hQZXJMcE9yWmVyb1gzCQABPAAAAAMJAAE2AAAAAQUAAAAYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzCQABNgAAAAEFAAAABU1VTFQ4BQAAABJub25aZXJvU3Rha2VkVG90YWwEAAAADnN0YWtlZFRvdGFsTmV3CQABNwAAAAIFAAAAC3N0YWtlZFRvdGFsCQABNgAAAAEFAAAADWxwRGVsdGFBbW91bnQEAAAAFW5vblplcm9TdGFrZWRUb3RhbE5ldwMJAAAAAAAAAgUAAAAOc3Rha2VkVG90YWxOZXcFAAAACnplcm9CaWdJbnQFAAAACW9uZUJpZ0ludAUAAAAOc3Rha2VkVG90YWxOZXcEAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwkAATcAAAACBQAAAA93eFBlckxwSW50ZWdyYWwJAAE5AAAAAgUAAAAJd3hQZXJMcFgzCQABNgAAAAEFAAAAAmRoBAAAAAx3eFBlckxwWDNOZXcJAAE6AAAAAgkAATYAAAABBQAAABhwb29sV3hFbWlzc2lvblBlckJsb2NrWDMFAAAAFW5vblplcm9TdGFrZWRUb3RhbE5ldwQAAAAfd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodE5ldwUAAAAGaGVpZ2h0BAAAAAVkZWJ1ZwkABLkAAAACCQAETAAAAAICAAAAE3d4UGVyTHBJbnRlZ3JhbE5ldz0JAARMAAAAAgkAAaYAAAABBQAAABJ3eFBlckxwSW50ZWdyYWxOZXcJAARMAAAAAgIAAAADZGg9CQAETAAAAAIJAAGkAAAAAQUAAAACZGgJAARMAAAAAgIAAAAKd3hQZXJMcFgzPQkABEwAAAACCQABpgAAAAEFAAAACXd4UGVyTHBYMwkABEwAAAACAgAAAAxzdGFrZWRUb3RhbD0JAARMAAAAAgkAAaYAAAABBQAAAAtzdGFrZWRUb3RhbAkABEwAAAACAgAAABlwb29sV3hFbWlzc2lvblBlckJsb2NrWDM9CQAETAAAAAIJAAGkAAAAAQUAAAAYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzCQAETAAAAAICAAAAFXd4RW1pc3Npb25QZXJCbG9ja1gzPQkABEwAAAACCQABpAAAAAEFAAAAFHd4RW1pc3Npb25QZXJCbG9ja1gzCQAETAAAAAICAAAAC3Bvb2xXZWlnaHQ9CQAETAAAAAIJAAGkAAAAAQUAAAAKcG9vbFdlaWdodAUAAAADbmlsAgAAAAI6OgkABRUAAAADBQAAABJ3eFBlckxwSW50ZWdyYWxOZXcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAASd3hQZXJMcEludGVncmFsS0VZCQABpgAAAAEFAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAfd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodEtFWQUAAAAfd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodE5ldwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAp3eFBlckxwS0VZCQABpgAAAAEFAAAADHd4UGVyTHBYM05ldwUAAAADbmlsBQAAAAVkZWJ1ZwEAAAAQcmVmcmVzaElOVEVHUkFMUwAAAAQAAAAMbHBBc3NldElkU3RyAAAADnVzZXJBZGRyZXNzU3RyAAAADnBvb2xBZGRyZXNzU3RyAAAADWxwRGVsdGFBbW91bnQEAAAADSR0MDExNjAxMTE3MjMJAQAAABRyZWZyZXNoUG9vbElOVEVHUkFMUwAAAAMFAAAADGxwQXNzZXRJZFN0cgUAAAAOcG9vbEFkZHJlc3NTdHIFAAAADWxwRGVsdGFBbW91bnQEAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwgFAAAADSR0MDExNjAxMTE3MjMAAAACXzEEAAAAEXBvb2xJbnRlZ3JhbFNUQVRFCAUAAAANJHQwMTE2MDExMTcyMwAAAAJfMgQAAAAJcG9vbERFQlVHCAUAAAANJHQwMTE2MDExMTcyMwAAAAJfMwQAAAAFTVVMVDMAAAAAAAAAA+gEAAAAD3N0YWtlZEJ5VXNlcktFWQkBAAAAD2tleVN0YWtlZEJ5VXNlcgAAAAIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAxscEFzc2V0SWRTdHIEAAAADHN0YWtlZEJ5VXNlcgkBAAAACnJlYWRTdGFrZWQAAAABBQAAAA9zdGFrZWRCeVVzZXJLRVkEAAAAEHd4VG9DbGFpbVVzZXJLRVkJAQAAABBrZXlXeFRvQ2xhaW1Vc2VyAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgQAAAAjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRLRVkJAQAAACNrZXlXeFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodAAAAAIFAAAADGxwQXNzZXRJZFN0cgUAAAAOdXNlckFkZHJlc3NTdHIEAAAAGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQEAAAAaa2V5V3hQZXJMcEludGVncmFsVXNlckxhc3QAAAACBQAAAAxscEFzc2V0SWRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA13eFRvQ2xhaW1Vc2VyCQEAAAAZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwAAAAIFAAAABHRoaXMFAAAAEHd4VG9DbGFpbVVzZXJLRVkEAAAAJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRLRVkEAAAAF3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0CQEAAAAbY2FsY1d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0AAAABAkAATYAAAABBQAAAAxzdGFrZWRCeVVzZXIJAAE2AAAAAQUAAAAmd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRPclplcm8FAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwUAAAAad3hQZXJMcEludGVncmFsVXNlckxhc3RLRVkEAAAABk1VTFQxMQkAAGgAAAACBQAAAAVNVUxUOAUAAAAFTVVMVDMEAAAAEHd4VG9DbGFpbVVzZXJOZXcJAAE3AAAAAgUAAAANd3hUb0NsYWltVXNlcgkAATwAAAADCQABOAAAAAIFAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwUAAAAXd3hQZXJMcEludGVncmFsVXNlckxhc3QJAAE2AAAAAQUAAAAMc3Rha2VkQnlVc2VyCQABNgAAAAEFAAAABk1VTFQxMQQAAAAad3hQZXJMcEludGVncmFsVXNlckxhc3ROZXcFAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwQAAAAjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHROZXcFAAAABmhlaWdodAQAAAAFZGVidWcJAAS5AAAAAgkABEwAAAACAgAAACd3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodE9yWmVybz0JAARMAAAAAgkAAaQAAAABBQAAACZ3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodE9yWmVybwkABEwAAAACAgAAAEd0aGlzLmdldFN0cmluZ09yRmFpbCh3eFBlckxwSW50ZWdyYWxVc2VyTGFzdEtFWSkucGFyc2VCaWdJbnQoKS52YWx1ZSgpPQkABEwAAAACCQABpgAAAAEJAQAAAAV2YWx1ZQAAAAEJAAGoAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMFAAAAGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQAETAAAAAICAAAAE3d4UGVyTHBJbnRlZ3JhbE5ldz0JAARMAAAAAgkAAaYAAAABBQAAABJ3eFBlckxwSW50ZWdyYWxOZXcJAARMAAAAAgIAAAARd3hUb0NsYWltVXNlck5ldz0JAARMAAAAAgkAAaYAAAABBQAAABB3eFRvQ2xhaW1Vc2VyTmV3CQAETAAAAAICAAAAGHd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0PQkABEwAAAACCQABpgAAAAEFAAAAF3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0CQAETAAAAAICAAAADXN0YWtlZEJ5VXNlcj0JAARMAAAAAgkAAaQAAAABBQAAAAxzdGFrZWRCeVVzZXIJAARMAAAAAgIAAAAKcG9vbERFQlVHPQkABEwAAAACBQAAAAlwb29sREVCVUcJAARMAAAAAgIAAAAHaGVpZ2h0PQkABEwAAAACCQABpAAAAAEFAAAABmhlaWdodAUAAAADbmlsAgAAAAI6OgkABRUAAAADBQAAABB3eFRvQ2xhaW1Vc2VyTmV3CQAETgAAAAIFAAAAEXBvb2xJbnRlZ3JhbFNUQVRFCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEHd4VG9DbGFpbVVzZXJLRVkJAAGmAAAAAQUAAAAQd3hUb0NsYWltVXNlck5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRLRVkFAAAAI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0TmV3CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQABpgAAAAEFAAAAGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0TmV3BQAAAANuaWwFAAAABWRlYnVnAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAABdtaWdyYXRvclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAFGtleU1pZ3JhdG9yUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAAAACAAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAEAAAARZmFjdG9yeUFkZHJlc3NTdHIEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUZhY3RvcnlBZGRyZXNzAAAAAAUAAAARZmFjdG9yeUFkZHJlc3NTdHIFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAVzdGFrZQAAAAADCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAANGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAJbHBBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADGxwQXNzZXRJZFN0cgkAAlgAAAABBQAAAAlscEFzc2V0SWQEAAAABmFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQEAAAADnBvb2xBZGRyZXNzU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcAAAABBQAAAAxscEFzc2V0SWRTdHIJAAEsAAAAAgIAAAAVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQAAAAxscEFzc2V0SWRTdHIEAAAACWNhbGxlclN0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADnVzZXJBZGRyZXNzU3RyAwkAAAAAAAACBQAAAAljYWxsZXJTdHIFAAAADnBvb2xBZGRyZXNzU3RyCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgUAAAAJY2FsbGVyU3RyBAAAAA9zdGFrZWRCeVVzZXJLRVkJAQAAAA9rZXlTdGFrZWRCeVVzZXIAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAMbHBBc3NldElkU3RyBAAAAA5zdGFrZWRUb3RhbEtFWQkBAAAADmtleVN0YWtlZFRvdGFsAAAAAQUAAAAMbHBBc3NldElkU3RyBAAAAAxzdGFrZWRCeVVzZXIJAQAAAApyZWFkU3Rha2VkAAAAAQUAAAAPc3Rha2VkQnlVc2VyS0VZBAAAAAtzdGFrZWRUb3RhbAkBAAAACnJlYWRTdGFrZWQAAAABBQAAAA5zdGFrZWRUb3RhbEtFWQQAAAANJHQwMTYzMjkxNjQ0NgkBAAAAEHJlZnJlc2hJTlRFR1JBTFMAAAAEBQAAAAxscEFzc2V0SWRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAA5wb29sQWRkcmVzc1N0cgUAAAAGYW1vdW50BAAAABB3eFRvQ2xhaW1Vc2VyTmV3CAUAAAANJHQwMTYzMjkxNjQ0NgAAAAJfMQQAAAANaW50ZWdyYWxTVEFURQgFAAAADSR0MDE2MzI5MTY0NDYAAAACXzIEAAAABWRlYnVnCAUAAAANJHQwMTYzMjkxNjQ0NgAAAAJfMwkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9zdGFrZWRCeVVzZXJLRVkJAABkAAAAAgUAAAAMc3Rha2VkQnlVc2VyBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADnN0YWtlZFRvdGFsS0VZCQAAZAAAAAIFAAAAC3N0YWtlZFRvdGFsBQAAAAZhbW91bnQJAARMAAAAAgkBAAAAFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAUCAAAABXN0YWtlBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAMbHBBc3NldElkU3RyBQAAAAZhbW91bnQIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAUAAAANaW50ZWdyYWxTVEFURQAAAAFpAQAAAAd1bnN0YWtlAAAAAgAAAAxscEFzc2V0SWRTdHIAAAAGYW1vdW50BAAAAAlscEFzc2V0SWQJAAJZAAAAAQUAAAAMbHBBc3NldElkU3RyBAAAAA5wb29sQWRkcmVzc1N0cgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAAAAAQUAAAAMbHBBc3NldElkU3RyCQABLAAAAAICAAAAFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUAAAAMbHBBc3NldElkU3RyBAAAAAlwb29sQWRkb24JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAFmtleVN0YWJsZVBvb2xBZGRvbkFkZHIAAAAABQAAAA5wb29sQWRkcmVzc1N0cgQAAAAJY2FsbGVyU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAOdXNlckFkZHJlc3NTdHIDAwkAAAAAAAACBQAAAAljYWxsZXJTdHIFAAAADnBvb2xBZGRyZXNzU3RyBgkAAAAAAAACBQAAAAljYWxsZXJTdHIFAAAACXBvb2xBZGRvbgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIFAAAACWNhbGxlclN0cgQAAAAPc3Rha2VkQnlVc2VyS0VZCQEAAAAPa2V5U3Rha2VkQnlVc2VyAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIFAAAADGxwQXNzZXRJZFN0cgQAAAAOc3Rha2VkVG90YWxLRVkJAQAAAA5rZXlTdGFrZWRUb3RhbAAAAAEFAAAADGxwQXNzZXRJZFN0cgQAAAAMc3Rha2VkQnlVc2VyCQEAAAAKcmVhZFN0YWtlZAAAAAEFAAAAD3N0YWtlZEJ5VXNlcktFWQQAAAALc3Rha2VkVG90YWwJAQAAAApyZWFkU3Rha2VkAAAAAQUAAAAOc3Rha2VkVG90YWxLRVkEAAAADSR0MDE3NTgzMTc3MDEJAQAAABByZWZyZXNoSU5URUdSQUxTAAAABAUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAOcG9vbEFkZHJlc3NTdHIJAQAAAAEtAAAAAQUAAAAGYW1vdW50BAAAABB3eFRvQ2xhaW1Vc2VyTmV3CAUAAAANJHQwMTc1ODMxNzcwMQAAAAJfMQQAAAANaW50ZWdyYWxTVEFURQgFAAAADSR0MDE3NTgzMTc3MDEAAAACXzIEAAAABWRlYnVnCAUAAAANJHQwMTc1ODMxNzcwMQAAAAJfMwMJAABmAAAAAgUAAAAGYW1vdW50BQAAAAxzdGFrZWRCeVVzZXIJAAACAAAAAQIAAAAkcGFzc2VkIGFtb3VudCBpcyBsZXNzIHRoZW4gYXZhaWxhYmxlCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD3N0YWtlZEJ5VXNlcktFWQkAAGUAAAACBQAAAAxzdGFrZWRCeVVzZXIFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOc3Rha2VkVG90YWxLRVkJAABlAAAAAgUAAAALc3Rha2VkVG90YWwFAAAABmFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmFtb3VudAUAAAAJbHBBc3NldElkCQAETAAAAAIJAQAAABVPcGVyYXRpb25IaXN0b3J5RW50cnkAAAAFAgAAAAd1bnN0YWtlBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAMbHBBc3NldElkU3RyBQAAAAZhbW91bnQIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAUAAAANaW50ZWdyYWxTVEFURQAAAAFpAQAAAAdjbGFpbVd4AAAAAQAAAAxscEFzc2V0SWRTdHIEAAAAC3VzZXJBZGRyZXNzCAUAAAABaQAAAAZjYWxsZXIEAAAADnVzZXJBZGRyZXNzU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAOcG9vbEFkZHJlc3NTdHIJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAACZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEFAAAADGxwQXNzZXRJZFN0cgQAAAAQY2xhaW1lZEJ5VXNlcktFWQkBAAAAEGtleUNsYWltZWRCeVVzZXIAAAACBQAAAAxscEFzc2V0SWRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA9jbGFpbWVkVG90YWxLRVkJAQAAAA9rZXlDbGFpbWVkVG90YWwAAAABBQAAAAxscEFzc2V0SWRTdHIEAAAAGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJAQAAABlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgQAAAAbY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkS0VZCQEAAAAba2V5Q2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgQAAAANY2xhaW1lZEJ5VXNlcgkAATYAAAABCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAQY2xhaW1lZEJ5VXNlcktFWQQAAAAWY2xhaW1lZEJ5VXNlck1pblJld2FyZAkAATYAAAABCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAZY2xhaW1lZEJ5VXNlck1pblJld2FyZEtFWQQAAAAYY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkCQABNgAAAAEJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAABtjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRLRVkEAAAADGNsYWltZWRUb3RhbAkBAAAAGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8AAAACBQAAAAR0aGlzBQAAAA9jbGFpbWVkVG90YWxLRVkEAAAADSR0MDE4OTM5MTkwNTEJAQAAABByZWZyZXNoSU5URUdSQUxTAAAABAUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAOcG9vbEFkZHJlc3NTdHIAAAAAAAAAAAAEAAAAEHd4VG9DbGFpbVVzZXJOZXcIBQAAAA0kdDAxODkzOTE5MDUxAAAAAl8xBAAAAA1pbnRlZ3JhbFNUQVRFCAUAAAANJHQwMTg5MzkxOTA1MQAAAAJfMgQAAAAFZGVidWcIBQAAAA0kdDAxODkzOTE5MDUxAAAAAl8zBAAAABBhdmFpbGFibGVUb0NsYWltCQABOAAAAAIFAAAAEHd4VG9DbGFpbVVzZXJOZXcFAAAADWNsYWltZWRCeVVzZXIDCQABQAAAAAIFAAAACnplcm9CaWdJbnQFAAAAEGF2YWlsYWJsZVRvQ2xhaW0JAAACAAAAAQIAAAAQbm90aGluZyB0byBjbGFpbQQAAAASd3hBbW91bnRCb29zdFRvdGFsCQEAAAAFYXNJbnQAAAABCQABkQAAAAIJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAEGJvb3N0aW5nQ29udHJhY3QCAAAADGNsYWltV3hCb29zdAkABEwAAAACBQAAAAxscEFzc2V0SWRTdHIJAARMAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAABAAAAA1taW5SZXdhcmRQYXJ0BQAAABBhdmFpbGFibGVUb0NsYWltBAAAAA9ib29zdFJld2FyZFBhcnQJAAGZAAAAAQkABEwAAAACCQABOQAAAAIFAAAADW1pblJld2FyZFBhcnQJAAE2AAAAAQAAAAAAAAAAAgkABEwAAAACCQABNgAAAAEFAAAAEnd4QW1vdW50Qm9vc3RUb3RhbAUAAAADbmlsBAAAAAl3eEFzc2V0SWQJAQAAAAxhc0J5dGVWZWN0b3IAAAABCQABkQAAAAIJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAEGVtaXNzaW9uQ29udHJhY3QCAAAABGVtaXQJAARMAAAAAgkAAaAAAAABBQAAAA1taW5SZXdhcmRQYXJ0BQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAQAAAAJZW1pdEJvb3N0CQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAABBlbWlzc2lvbkNvbnRyYWN0AgAAAARlbWl0CQAETAAAAAIJAAGgAAAAAQUAAAAPYm9vc3RSZXdhcmRQYXJ0BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAJZW1pdEJvb3N0BQAAAAllbWl0Qm9vc3QEAAAAEmNsYWltZWRCeVVzZXJWYWx1ZQkAATcAAAACBQAAAA1jbGFpbWVkQnlVc2VyBQAAABBhdmFpbGFibGVUb0NsYWltBAAAAB5jbGFpbWVkQnlVc2VyTWluUmV3YXJkUGx1c1BhcnQJAAE3AAAAAgUAAAAWY2xhaW1lZEJ5VXNlck1pblJld2FyZAUAAAANbWluUmV3YXJkUGFydAQAAAArY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkUGx1c0Jvb3N0UmV3YXJkUGFydAkAATcAAAACBQAAABZjbGFpbWVkQnlVc2VyTWluUmV3YXJkBQAAAA1taW5SZXdhcmRQYXJ0BAAAACBjbGFpbWVkVG90YWxQbHVzQXZhaWxhYmxlVG9DbGFpbQkAATcAAAACBQAAABZjbGFpbWVkQnlVc2VyTWluUmV3YXJkBQAAAA1taW5SZXdhcmRQYXJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEGNsYWltZWRCeVVzZXJLRVkJAAGmAAAAAQUAAAASY2xhaW1lZEJ5VXNlclZhbHVlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJAAGmAAAAAQUAAAAeY2xhaW1lZEJ5VXNlck1pblJld2FyZFBsdXNQYXJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAG2NsYWltZWRCeVVzZXJCb29zdFJld2FyZEtFWQkAAaYAAAABBQAAACtjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRQbHVzQm9vc3RSZXdhcmRQYXJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2NsYWltZWRUb3RhbEtFWQkAAaYAAAABBQAAACBjbGFpbWVkVG90YWxQbHVzQXZhaWxhYmxlVG9DbGFpbQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAt1c2VyQWRkcmVzcwkAAaAAAAABBQAAAA1taW5SZXdhcmRQYXJ0BQAAAAl3eEFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAALdXNlckFkZHJlc3MJAAGgAAAAAQUAAAAPYm9vc3RSZXdhcmRQYXJ0BQAAAAl3eEFzc2V0SWQJAARMAAAAAgkBAAAAFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAUCAAAABWNsYWltBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAMbHBBc3NldElkU3RyCQABoAAAAAEFAAAAEGF2YWlsYWJsZVRvQ2xhaW0IBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAPY2xhaW1XeFJFQURPTkxZAAAAAgAAAAxscEFzc2V0SWRTdHIAAAAOdXNlckFkZHJlc3NTdHIEAAAAD3N0YWtlZEJ5VXNlcktFWQkBAAAAD2tleVN0YWtlZEJ5VXNlcgAAAAIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAxscEFzc2V0SWRTdHIEAAAADnN0YWtlZFRvdGFsS0VZCQEAAAAOa2V5U3Rha2VkVG90YWwAAAABBQAAAAxscEFzc2V0SWRTdHIEAAAAEGNsYWltZWRCeVVzZXJLRVkJAQAAABBrZXlDbGFpbWVkQnlVc2VyAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgQAAAAMc3Rha2VkQnlVc2VyCQEAAAAKcmVhZFN0YWtlZAAAAAEFAAAAD3N0YWtlZEJ5VXNlcktFWQQAAAALc3Rha2VkVG90YWwJAQAAAApyZWFkU3Rha2VkAAAAAQUAAAAOc3Rha2VkVG90YWxLRVkEAAAADWNsYWltZWRCeVVzZXIJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAABBjbGFpbWVkQnlVc2VyS0VZBAAAAA5wb29sQWRkcmVzc1N0cgkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAQUAAAAMbHBBc3NldElkU3RyBAAAAApwb29sV2VpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABRrZXlGYWN0b3J5UG9vbFdlaWdodAAAAAEFAAAADnBvb2xBZGRyZXNzU3RyBAAAABJ3eEVtaXNzaW9uUGVyQmxvY2sJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAAea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAAAAAQAAAASZW1pc3Npb25TdGFydEJsb2NrCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkBAAAAFWtleUVtaXNzaW9uU3RhcnRCbG9jawAAAAAEAAAADHBhc3NlZEJsb2NrcwMJAABmAAAAAgUAAAASZW1pc3Npb25TdGFydEJsb2NrBQAAAAZoZWlnaHQAAAAAAAAAAAAJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJlbWlzc2lvblN0YXJ0QmxvY2sEAAAADnBvb2xXeEVtaXNzaW9uCQAAawAAAAMJAABoAAAAAgUAAAASd3hFbWlzc2lvblBlckJsb2NrBQAAAAxwYXNzZWRCbG9ja3MFAAAACnBvb2xXZWlnaHQFAAAADlBPT0xXRUlHSFRNVUxUBAAAAAx1c2VyV3hSZXdhcmQJAABrAAAAAwUAAAAOcG9vbFd4RW1pc3Npb24FAAAADHN0YWtlZEJ5VXNlcgUAAAALc3Rha2VkVG90YWwEAAAADSR0MDIxNjUxMjE3NjMJAQAAABByZWZyZXNoSU5URUdSQUxTAAAABAUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAOcG9vbEFkZHJlc3NTdHIAAAAAAAAAAAAEAAAAEHd4VG9DbGFpbVVzZXJOZXcIBQAAAA0kdDAyMTY1MTIxNzYzAAAAAl8xBAAAAA1pbnRlZ3JhbFNUQVRFCAUAAAANJHQwMjE2NTEyMTc2MwAAAAJfMgQAAAAFZGVidWcIBQAAAA0kdDAyMTY1MTIxNzYzAAAAAl8zBAAAABBhdmFpbGFibGVUb0NsYWltCQABOAAAAAIFAAAAEHd4VG9DbGFpbVVzZXJOZXcJAAE2AAAAAQUAAAANY2xhaW1lZEJ5VXNlcgQAAAAOYm9vc3RJbnZSZXN1bHQJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAEGJvb3N0aW5nQ29udHJhY3QCAAAAFGNsYWltV3hCb29zdFJFQURPTkxZCQAETAAAAAIFAAAADGxwQXNzZXRJZFN0cgkABEwAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAADbmlsBQAAAANuaWwEAAAAEnd4QW1vdW50Qm9vc3RUb3RhbAkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA5ib29zdEludlJlc3VsdAAAAAAAAAAAAAQAAAAKYm9vc3REZWJ1ZwkBAAAACGFzU3RyaW5nAAAAAQkAAZEAAAACBQAAAA5ib29zdEludlJlc3VsdAAAAAAAAAAAAQQAAAAN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", "height": 2114542, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FLAjbzCPrUjctRt3m7H47vRFjb5ider9tgFpCt1U6AoQ Next: ELz9FeMZ1AavkUU5Grx8MGuVqH3KySp3KUov8LjHfy7U Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 6 #-}
1+{-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
101101 func I () = "%s%s__config__factoryAddress"
102102
103103
104-func J () = "%s__votingEmissionContract"
104+let J = 1
105+
106+let K = 2
107+
108+let L = 3
109+
110+let M = 4
111+
112+let N = 5
113+
114+let O = 6
115+
116+let P = 7
117+
118+func Q () = "%s__factoryConfig"
105119
106120
107-let K = 1
108-
109-let L = 2
110-
111-let M = 3
112-
113-let N = 4
114-
115-let O = 5
116-
117-let P = 6
118-
119-let Q = 7
120-
121-func R () = "%s__factoryConfig"
121+func R () = "%s__managerPublicKey"
122122
123123
124-func S () = "%s__managerPublicKey"
124+func S () = "%s__migratorPublicKey"
125125
126126
127-func T () = "%s__migratorPublicKey"
127+func T () = "%s__pendingManagerPublicKey"
128128
129129
130-func U () = "%s__pendingManagerPublicKey"
130+func U () = "%s__stablePoolAddonAddr"
131131
132132
133-func V () = "%s__stablePoolAddonAddr"
133+func V (W) = makeString(["%s%s%s", W, "mappings__lpAsset2PoolContract"], e)
134134
135135
136-func W (X) = makeString(["%s%s%s", X, "mappings__lpAsset2PoolContract"], e)
136+func X () = "%s__lpTokensList"
137137
138138
139-func Y () = "%s__lpTokensList"
139+func Y (W) = makeString(["%s%s%s", W, "mappings__lpAsset2PoolContract"], e)
140140
141141
142-func Z (X) = makeString(["%s%s%s", X, "mappings__lpAsset2PoolContract"], e)
142+func Z (aa) = makeString(["%s%s", "poolWeight", aa], e)
143143
144144
145-func aa (ab) = makeString(["%s%s", "poolWeight", ab], e)
145+func ab (ac) = split(valueOrElse(getString(ac, X()), ""), e)
146146
147147
148-func ac (ad) = split(valueOrElse(getString(ad, Y()), ""), e)
148+func ad (ac) = split(v(ac, Q()), e)
149149
150150
151-func ae (ad) = split(v(ad, R()), e)
151+func ae (af) = addressFromStringValue(af[K])
152152
153153
154-func af (ag) = addressFromStringValue(ag[L])
154+func ag (af) = addressFromStringValue(af[N])
155155
156156
157-func ah (ag) = addressFromStringValue(ag[O])
157+func ah (af) = addressFromStringValue(af[J])
158158
159159
160-func ai (ag) = addressFromStringValue(ag[K])
160+func ai () = "%s%s__ratePerBlock__current"
161161
162162
163-func aj () = "%s%s__ratePerBlock__current"
163+func aj () = "%s%s__ratePerBlockMax__current"
164164
165165
166-func ak () = "%s%s__ratePerBlockMax__current"
166+func ak () = "%s%s__emission__startBlock"
167167
168168
169-func al () = "%s%s__emission__startBlock"
169+func al () = "%s%s__emission__duration"
170170
171171
172-func am () = "%s%s__emission__duration"
172+func am () = "%s%s__emission__endBlock"
173173
174174
175-func an () = "%s%s__emission__endBlock"
175+func an (ao,ap) = makeString(["%s%s%s__staked", ao, ap], e)
176176
177177
178-func ao (ap,aq) = makeString(["%s%s%s__staked", ap, aq], e)
178+func aq (ap) = ("%s%s%s__staked__total__" + ap)
179179
180180
181-func ar (aq) = ("%s%s%s__staked__total__" + aq)
181+func ar (ap,ao) = makeString(["%s%s%s__claimed", ao, ap], e)
182182
183183
184-func as (aq,ap) = makeString(["%s%s%s__claimed", ap, aq], e)
184+func as (ap,ao) = makeString(["%s%s%s__claimedMinReward", ao, ap], e)
185185
186186
187-func at (aq,ap) = makeString(["%s%s%s__claimedMinReward", ap, aq], e)
187+func at (ap,ao) = makeString(["%s%s%s__claimedBoostReward", ao, ap], e)
188188
189189
190-func au (aq,ap) = makeString(["%s%s%s__claimedBoostReward", ap, aq], e)
190+func au (ap) = makeString(["%s%s%s__claimed__total", ap], e)
191191
192192
193-func av (aq) = makeString(["%s%s%s__claimed__total", aq], e)
193+func av (u) = valueOrElse(getInteger(this, u), 0)
194194
195195
196-func aw (u) = valueOrElse(getInteger(this, u), 0)
196+func aw (ax) = makeString(["%s%s%s", ax, "total", "bal"], e)
197197
198198
199-func ax (ay) = makeString(["%s%s%s", ay, "total", "bal"], e)
199+func ay (ax,az) = makeString(["%s%s%s", ax, az, "bal"], e)
200200
201201
202-func az (ay,aA) = makeString(["%s%s%s", ay, aA, "bal"], e)
202+func aA (ax) = makeString(["%s%s%s", ax, "total", "balINT"], e)
203203
204204
205-func aB (ay) = makeString(["%s%s%s", ay, "total", "balINT"], e)
205+func aB (ax,az) = makeString(["%s%s%s", ax, az, "balINT"], e)
206206
207207
208-func aC (ay,aA) = makeString(["%s%s%s", ay, aA, "balINT"], e)
208+func aC (ax) = makeString(["%s%s%s", ax, "total", "lastUpd"], e)
209209
210210
211-func aD (ay) = makeString(["%s%s%s", ay, "total", "lastUpd"], e)
211+func aD (ax,az) = makeString(["%s%s%s", ax, az, "lastUpd"], e)
212212
213213
214-func aE (ay,aA) = makeString(["%s%s%s", ay, aA, "lastUpd"], e)
214+func aE (ax) = makeString(["%s%s%s%s", ax, "common", "lpInt"], e)
215215
216216
217-func aF (ay) = makeString(["%s%s%s%s", ay, "common", "lpInt"], e)
217+func aF (ax) = makeString(["%s%s%s%s", ax, "common", "lpIntH"], e)
218218
219219
220-func aG (ay) = makeString(["%s%s%s%s", ay, "common", "lpIntH"], e)
220+func aG (ax,az) = makeString(["%s%s%s%s", ax, az, "lpInt"], e)
221221
222222
223-func aH (ay,aA) = makeString(["%s%s%s%s", ay, aA, "lpInt"], e)
223+func aH (ax,az) = makeString(["%s%s%s%s", ax, az, "lpIntH"], e)
224224
225225
226-func aI (ay,aA) = makeString(["%s%s%s%s", ay, aA, "lpIntH"], e)
226+func aI (ax) = makeString(["%s", ax, "wxPerLp"], e)
227227
228228
229-func aJ (ay) = makeString(["%s", ay, "wxPerLp"], e)
229+func aJ (ax) = makeString(["%s", ax, "wxPerLpX18"], e)
230230
231231
232-func aK (ay) = makeString(["%s", ay, "wxPerLpX18"], e)
232+func aK (ax,az) = makeString(["%s%s%s%s", ax, az, "uIntL"], e)
233233
234234
235-func aL (ay,aA) = makeString(["%s%s%s%s", ay, aA, "uIntL"], e)
235+func aL (aM,az,aN) = makeString(["%s%s%s%s__history", aM, az, aN], e)
236236
237237
238-func aM (aN,aA,aO) = makeString(["%s%s%s%s__history", aN, aA, aO], e)
238+func aO (az,ax,aM,aP) = makeString(["%s%s%s%d%d%d", az, ax, aM, toString(height), toString(lastBlock.timestamp), toString(aP)], e)
239239
240240
241-func aP (aA,ay,aN,aQ) = makeString(["%s%s%s%d%d%d", aA, ay, aN, toString(height), toString(lastBlock.timestamp), toString(aQ)], e)
241+func aQ (aM,az,ax,aP,aR) = StringEntry(aL(aM, az, toBase58String(aR)), aO(az, ax, aM, aP))
242242
243243
244-func aR (aN,aA,ay,aQ,aS) = StringEntry(aM(aN, aA, toBase58String(aS)), aP(aA, ay, aN, aQ))
244+let aS = s(this, I())
245+
246+let aT = addressFromStringValue(aS)
247+
248+let af = ad(aT)
249+
250+let aU = ag(af)
251+
252+let aV = ae(af)
253+
254+func aW (aX,aY,aZ,ba) = if (if ((aY == g))
255+ then (aX > g)
256+ else false)
257+ then g
258+ else if ((aX == g))
259+ then aZ
260+ else if (if ((aY > g))
261+ then (aX > g)
262+ else false)
263+ then value(parseBigInt(s(this, ba)))
264+ else throw("calcWxPerLpIntegralUserLast: unexpected state")
245265
246266
247-let aT = s(this, I())
248-
249-let aU = addressFromStringValue(aT)
250-
251-let ag = ae(aU)
252-
253-let aV = ah(ag)
254-
255-let aW = af(ag)
256-
257-func aX (ay) = makeString(["%s%s", ay, "nextUser"], e)
258-
259-
260-func aY (ay) = makeString(["users", ay], e)
261-
262-
263-func aZ (ba) = makeString(["%s%s%s", ba, "head"], e)
264-
265-
266-func bb (ba) = makeString(["%s%s%s", ba, "size"], e)
267-
268-
269-func bc (ba,bd) = makeString(["%s%s%s%s", ba, bd, "prev"], e)
270-
271-
272-func be (ba,bd) = makeString(["%s%s%s%s", ba, bd, "next"], e)
273-
274-
275-func bf (ba,bd) = {
276- let bg = getString(this, aZ(ba))
277- let bh = getString(this, bc(ba, bd))
278- let bi = getString(this, be(ba, bd))
279- if (if ((bd == valueOrElse(bg, "")))
280- then true
281- else (bh != unit))
282- then true
283- else (bi != unit)
267+func bb (ap,bc,bd) = {
268+ let be = aq(ap)
269+ let bf = toBigInt(av(be))
270+ let bg = if ((bf == g))
271+ then h
272+ else bf
273+ let bh = getIntegerValue(aT, Z(bc))
274+ let bi = z(aU, ak())
275+ let bj = 1000
276+ let bk = (z(aU, ai()) * bj)
277+ let bl = fraction(bk, bh, (f * 3))
278+ let bm = aE(ap)
279+ let bn = aF(ap)
280+ let bo = aI(ap)
281+ let bp = x(this, bn, bi)
282+ let bq = A(this, bm)
283+ let br = 0
284+ let bs = max([(height - bp), 0])
285+ let bt = if ((br != 0))
286+ then toBigInt(br)
287+ else fraction(toBigInt(bl), toBigInt(b), bg)
288+ let bu = (bf + toBigInt(bd))
289+ let bv = if ((bu == g))
290+ then h
291+ else bu
292+ let aZ = (bq + (bt * toBigInt(bs)))
293+ let bw = (toBigInt(bl) / bv)
294+ let bx = height
295+ let by = makeString(["wxPerLpIntegralNew=", toString(aZ), "dh=", toString(bs), "wxPerLpX3=", toString(bt), "stakedTotal=", toString(bf), "poolWxEmissionPerBlockX3=", toString(bl), "wxEmissionPerBlockX3=", toString(bk), "poolWeight=", toString(bh)], "::")
296+ $Tuple3(aZ, [StringEntry(bm, toString(aZ)), IntegerEntry(bn, bx), StringEntry(bo, toString(bw))], by)
284297 }
285298
286299
287-func bj (ba,bd) = {
288- let bg = getString(this, aZ(ba))
289- let bk = valueOrElse(getInteger(this, bb(ba)), 0)
290- let bl = if (!(bf(ba, bd)))
291- then true
292- else throw("Node exists")
293- if ((bl == bl))
294- then (([IntegerEntry(bb(ba), (bk + 1))] ++ (if ((bg != unit))
295- then [StringEntry(be(ba, bd), value(bg)), StringEntry(bc(ba, value(bg)), bd)]
296- else nil)) ++ [StringEntry(aZ(ba), bd)])
297- else throw("Strict value is not equal to itself.")
300+func bz (ap,ao,bc,bd) = {
301+ let bA = bb(ap, bc, bd)
302+ let aZ = bA._1
303+ let bB = bA._2
304+ let bC = bA._3
305+ let bj = 1000
306+ let bD = an(ao, ap)
307+ let aX = av(bD)
308+ let bE = aG(ap, ao)
309+ let bF = aH(ap, ao)
310+ let ba = aK(ap, ao)
311+ let bG = A(this, bE)
312+ let aY = w(this, bF)
313+ let bH = aW(toBigInt(aX), toBigInt(aY), aZ, ba)
314+ let bI = (b * bj)
315+ let bJ = (bG + fraction((aZ - bH), toBigInt(aX), toBigInt(bI)))
316+ let bK = aZ
317+ let bL = height
318+ let by = makeString(["wxPerLpIntegralUserLastUpdHeightOrZero=", toString(aY), "this.getStringOrFail(wxPerLpIntegralUserLastKEY).parseBigInt().value()=", toString(value(parseBigInt(s(this, ba)))), "wxPerLpIntegralNew=", toString(aZ), "wxToClaimUserNew=", toString(bJ), "wxPerLpIntegralUserLast=", toString(bH), "stakedByUser=", toString(aX), "poolDEBUG=", bC, "height=", toString(height)], "::")
319+ $Tuple3(bJ, (bB ++ [StringEntry(bE, toString(bJ)), IntegerEntry(bF, bL), StringEntry(ba, toString(bK))]), by)
298320 }
299321
300322
301-func bm (ba,bd) = {
302- let bg = getString(this, aZ(ba))
303- let bk = valueOrElse(getInteger(this, bb(ba)), 0)
304- let bh = getString(this, bc(ba, bd))
305- let bi = getString(this, be(ba, bd))
306- ([IntegerEntry(bb(ba), (bk - 1))] ++ (if (if ((bh != unit))
307- then (bi != unit)
308- else false)
309- then [StringEntry(be(ba, value(bh)), value(bi)), StringEntry(bc(ba, value(bi)), value(bh)), DeleteEntry(bc(ba, bd)), DeleteEntry(be(ba, bd))]
310- else if ((bi != unit))
311- then [StringEntry(aZ(ba), value(bi)), DeleteEntry(be(ba, bd)), DeleteEntry(bc(ba, value(bi)))]
312- else if ((bh != unit))
313- then [DeleteEntry(bc(ba, bd)), DeleteEntry(be(ba, value(bh)))]
314- else if ((bd == valueOrElse(bg, "")))
315- then [DeleteEntry(aZ(ba))]
316- else throw(((("invalid node: " + ba) + ".") + bd))))
323+func bM () = {
324+ let k = getString(R())
325+ if ($isInstanceOf(k, "String"))
326+ then {
327+ let C = k
328+ fromBase58String(C)
329+ }
330+ else if ($isInstanceOf(k, "Unit"))
331+ then unit
332+ else throw("Match error")
317333 }
318334
319335
320-func bn (bo,bp,bq,br) = if (if ((bp == g))
321- then (bo > g)
322- else false)
323- then g
324- else if ((bo == g))
325- then bq
326- else if (if ((bp > g))
327- then (bo > g)
328- else false)
329- then value(parseBigInt(s(this, br)))
330- else throw("calcWxPerLpIntegralUserLast: unexpected state")
331-
332-
333-func bs (aq,bt,bu) = {
334- let bv = ar(aq)
335- let bw = toBigInt(aw(bv))
336- let bx = if ((bw == g))
337- then h
338- else bw
339- let by = getIntegerValue(aU, aa(bt))
340- let bz = z(aV, al())
341- let bA = 1000
342- let bB = (z(aV, aj()) * bA)
343- let bC = fraction(bB, by, (f * 3))
344- let bD = aF(aq)
345- let bE = aG(aq)
346- let bF = aJ(aq)
347- let bG = x(this, bE, bz)
348- let bH = A(this, bD)
349- let bI = 0
350- let bJ = max([(height - bG), 0])
351- let bK = if ((bI != 0))
352- then toBigInt(bI)
353- else fraction(toBigInt(bC), toBigInt(b), bx)
354- let bL = (bw + toBigInt(bu))
355- let bM = if ((bL == g))
356- then h
357- else bL
358- let bq = (bH + (bK * toBigInt(bJ)))
359- let bN = (toBigInt(bC) / bM)
360- let bO = height
361- let bP = makeString(["wxPerLpIntegralNew=", toString(bq), "dh=", toString(bJ), "wxPerLpX3=", toString(bK), "stakedTotal=", toString(bw), "poolWxEmissionPerBlockX3=", toString(bC), "wxEmissionPerBlockX3=", toString(bB), "poolWeight=", toString(by)], "::")
362- $Tuple3(bq, [StringEntry(bD, toString(bq)), IntegerEntry(bE, bO), StringEntry(bF, toString(bN))], bP)
363- }
364-
365-
366-func bQ (aq,ap,bt,bu) = {
367- let bR = bs(aq, bt, bu)
368- let bq = bR._1
369- let bS = bR._2
370- let bT = bR._3
371- let bA = 1000
372- let bU = ao(ap, aq)
373- let bo = aw(bU)
374- let bV = aH(aq, ap)
375- let bW = aI(aq, ap)
376- let br = aL(aq, ap)
377- let bX = A(this, bV)
378- let bp = w(this, bW)
379- let bY = bn(toBigInt(bo), toBigInt(bp), bq, br)
380- let bZ = (b * bA)
381- let ca = (bX + fraction((bq - bY), toBigInt(bo), toBigInt(bZ)))
382- let cb = bq
383- let cc = height
384- let bP = makeString(["wxPerLpIntegralUserLastUpdHeightOrZero=", toString(bp), "wxPerLpIntegralNew=", toString(bq), "wxToClaimUserNew=", toString(ca), "wxPerLpIntegralUserLast=", toString(bY), "stakedByUser=", toString(bo), "poolDEBUG=", bT, "height=", toString(height)], "::")
385- $Tuple3(ca, (bS ++ [StringEntry(bV, toString(ca)), IntegerEntry(bW, cc), StringEntry(br, toString(cb))]), bP)
386- }
387-
388-
389-func cd () = {
336+func bN () = {
390337 let k = getString(S())
391338 if ($isInstanceOf(k, "String"))
392339 then {
399346 }
400347
401348
402-func ce () = {
349+func bO () = {
403350 let k = getString(T())
404351 if ($isInstanceOf(k, "String"))
405352 then {
412359 }
413360
414361
415-func cf () = {
416- let k = getString(U())
417- if ($isInstanceOf(k, "String"))
362+func bP (bQ) = {
363+ let bR = throw("Permission denied")
364+ let k = bM()
365+ if ($isInstanceOf(k, "ByteVector"))
418366 then {
419- let C = k
420- fromBase58String(C)
367+ let bS = k
368+ if ((bQ.callerPublicKey == bS))
369+ then true
370+ else bR
421371 }
422372 else if ($isInstanceOf(k, "Unit"))
423- then unit
373+ then if ((bQ.caller == this))
374+ then true
375+ else bR
424376 else throw("Match error")
425377 }
426378
427379
428-let cg = throw("Permission denied")
429-
430-func ch (ci) = if ((ci.caller == this))
431- then true
432- else cg
433-
434-
435-func cj (ci) = {
436- let k = cd()
437- if ($isInstanceOf(k, "ByteVector"))
438- then {
439- let ck = k
440- if ((ci.callerPublicKey == ck))
441- then true
442- else cg
443- }
444- else if ($isInstanceOf(k, "Unit"))
445- then if ((ci.caller == this))
446- then true
447- else cg
448- else throw("Match error")
449- }
450-
451-
452-@Callable(ci)
453-func constructor (cl) = {
454- let cm = cj(ci)
455- if ((cm == cm))
456- then [StringEntry(I(), cl)]
380+@Callable(bQ)
381+func constructor (bT) = {
382+ let bU = bP(bQ)
383+ if ((bU == bU))
384+ then [StringEntry(I(), bT)]
457385 else throw("Strict value is not equal to itself.")
458386 }
459387
460388
461389
462-@Callable(ci)
463-func constructorV2 (cn) = {
464- let co = [cj(ci), if ((addressFromString(cn) != unit))
465- then true
466- else "invalid voting emission contract address"]
467- if ((co == co))
468- then [StringEntry(J(), cn)]
469- else throw("Strict value is not equal to itself.")
470- }
471-
472-
473-
474-@Callable(ci)
475-func setManager (cp) = {
476- let cm = cj(ci)
477- if ((cm == cm))
390+@Callable(bQ)
391+func setManager (bV) = {
392+ let bU = bP(bQ)
393+ if ((bU == bU))
478394 then {
479- let cq = fromBase58String(cp)
480- if ((cq == cq))
481- then [StringEntry(U(), cp)]
395+ let bW = fromBase58String(bV)
396+ if ((bW == bW))
397+ then [StringEntry(T(), bV)]
482398 else throw("Strict value is not equal to itself.")
483399 }
484400 else throw("Strict value is not equal to itself.")
486402
487403
488404
489-@Callable(ci)
405+@Callable(bQ)
490406 func confirmManager () = {
491- let cr = cf()
492- let cs = if (isDefined(cr))
407+ let bX = bO()
408+ let bY = if (isDefined(bX))
493409 then true
494410 else throw("No pending manager")
495- if ((cs == cs))
411+ if ((bY == bY))
496412 then {
497- let ct = if ((ci.callerPublicKey == value(cr)))
413+ let bZ = if ((bQ.callerPublicKey == value(bX)))
498414 then true
499415 else throw("You are not pending manager")
500- if ((ct == ct))
501- then [StringEntry(S(), toBase58String(value(cr))), DeleteEntry(U())]
416+ if ((bZ == bZ))
417+ then [StringEntry(R(), toBase58String(value(bX))), DeleteEntry(T())]
502418 else throw("Strict value is not equal to itself.")
503419 }
504420 else throw("Strict value is not equal to itself.")
506422
507423
508424
509-@Callable(ci)
510-func stake () = if ((size(ci.payments) != 1))
425+@Callable(bQ)
426+func stake () = if ((size(bQ.payments) != 1))
511427 then throw("invalid payment - exact one payment must be attached")
512428 else {
513- let cu = ci.payments[0]
514- let ay = value(cu.assetId)
515- let aq = toBase58String(ay)
516- let aQ = cu.amount
517- let bt = valueOrErrorMessage(getString(aU, W(aq)), ("unsupported lp asset " + aq))
518- let cv = toString(ci.caller)
519- let ap = if ((cv == bt))
520- then toString(ci.originCaller)
521- else cv
522- let bU = ao(ap, aq)
523- let bv = ar(aq)
524- let bo = aw(bU)
525- let bw = aw(bv)
526- let cw = bQ(aq, ap, bt, aQ)
527- let ca = cw._1
528- let cx = cw._2
529- let bP = cw._3
530- let ba = aY(aq)
531- let cy = if (bf(ba, ap))
532- then nil
533- else bj(ba, ap)
534- (([IntegerEntry(bU, (bo + aQ)), IntegerEntry(bv, (bw + aQ)), aR("stake", ap, aq, aQ, ci.transactionId)] ++ cx) ++ cy)
429+ let ca = bQ.payments[0]
430+ let ax = value(ca.assetId)
431+ let ap = toBase58String(ax)
432+ let aP = ca.amount
433+ let bc = valueOrErrorMessage(getString(aT, V(ap)), ("unsupported lp asset " + ap))
434+ let cb = toString(bQ.caller)
435+ let ao = if ((cb == bc))
436+ then toString(bQ.originCaller)
437+ else cb
438+ let bD = an(ao, ap)
439+ let be = aq(ap)
440+ let aX = av(bD)
441+ let bf = av(be)
442+ let cc = bz(ap, ao, bc, aP)
443+ let bJ = cc._1
444+ let cd = cc._2
445+ let by = cc._3
446+ ([IntegerEntry(bD, (aX + aP)), IntegerEntry(be, (bf + aP)), aQ("stake", ao, ap, aP, bQ.transactionId)] ++ cd)
535447 }
536448
537449
538450
539-@Callable(ci)
540-func unstake (aq,aQ) = {
541- let ay = fromBase58String(aq)
542- let bt = valueOrErrorMessage(getString(aU, W(aq)), ("unsupported lp asset " + aq))
543- let cz = valueOrElse(getString(this, V()), bt)
544- let cv = toString(ci.caller)
545- let ap = if (if ((cv == bt))
451+@Callable(bQ)
452+func unstake (ap,aP) = {
453+ let ax = fromBase58String(ap)
454+ let bc = valueOrErrorMessage(getString(aT, V(ap)), ("unsupported lp asset " + ap))
455+ let ce = valueOrElse(getString(this, U()), bc)
456+ let cb = toString(bQ.caller)
457+ let ao = if (if ((cb == bc))
546458 then true
547- else (cv == cz))
548- then toString(ci.originCaller)
549- else cv
550- let bU = ao(ap, aq)
551- let bv = ar(aq)
552- let bo = aw(bU)
553- let bw = aw(bv)
554- let cA = bQ(aq, ap, bt, -(aQ))
555- let ca = cA._1
556- let cx = cA._2
557- let bP = cA._3
558- let ba = aY(aq)
559- let cy = if (bf(ba, ap))
560- then bm(ba, ap)
561- else nil
562- if ((aQ > bo))
459+ else (cb == ce))
460+ then toString(bQ.originCaller)
461+ else cb
462+ let bD = an(ao, ap)
463+ let be = aq(ap)
464+ let aX = av(bD)
465+ let bf = av(be)
466+ let cf = bz(ap, ao, bc, -(aP))
467+ let bJ = cf._1
468+ let cd = cf._2
469+ let by = cf._3
470+ if ((aP > aX))
563471 then throw("passed amount is less then available")
564- else (([IntegerEntry(bU, (bo - aQ)), IntegerEntry(bv, (bw - aQ)), ScriptTransfer(ci.caller, aQ, ay), aR("unstake", ap, aq, aQ, ci.transactionId)] ++ cx) ++ cy)
472+ else ([IntegerEntry(bD, (aX - aP)), IntegerEntry(be, (bf - aP)), ScriptTransfer(bQ.caller, aP, ax), aQ("unstake", ao, ap, aP, bQ.transactionId)] ++ cd)
565473 }
566474
567475
568476
569-@Callable(ci)
570-func claimWx (aq) = {
571- let ap = toString(ci.caller)
572- let cB = invoke(this, "claimWxINTERNAL", [aq, ap], nil)
573- $Tuple2(nil, cB)
477+@Callable(bQ)
478+func claimWx (ap) = {
479+ let az = bQ.caller
480+ let ao = toString(bQ.caller)
481+ let bc = v(aT, Y(ap))
482+ let cg = ar(ap, ao)
483+ let ch = au(ap)
484+ let ci = as(ap, ao)
485+ let cj = at(ap, ao)
486+ let ck = toBigInt(w(this, cg))
487+ let cl = toBigInt(w(this, ci))
488+ let cm = toBigInt(w(this, cj))
489+ let cn = A(this, ch)
490+ let co = bz(ap, ao, bc, 0)
491+ let bJ = co._1
492+ let cd = co._2
493+ let by = co._3
494+ let cp = (bJ - ck)
495+ if ((g >= cp))
496+ then throw("nothing to claim")
497+ else {
498+ let cq = m(i(invoke(aV, "claimWxBoost", [ap, ao], nil))[0])
499+ let cr = cp
500+ let cs = min([(cr * toBigInt(2)), toBigInt(cq)])
501+ let ct = q(i(invoke(aU, "emit", [toInt(cr)], nil))[0])
502+ let cu = i(invoke(aU, "emit", [toInt(cs)], nil))
503+ if ((cu == cu))
504+ then {
505+ let cv = (ck + cp)
506+ let cw = (cl + cr)
507+ let cx = (cl + cr)
508+ let cy = (cl + cr)
509+[StringEntry(cg, toString(cv)), StringEntry(ci, toString(cw)), StringEntry(cj, toString(cx)), StringEntry(ch, toString(cy)), ScriptTransfer(az, toInt(cr), ct), ScriptTransfer(az, toInt(cs), ct), aQ("claim", ao, ap, toInt(cp), bQ.transactionId)]
510+ }
511+ else throw("Strict value is not equal to itself.")
512+ }
574513 }
575514
576515
577516
578-@Callable(ci)
579-func claimWxINTERNAL (aq,ap) = {
580- let cm = ch(ci)
581- if ((cm == cm))
582- then {
583- let aA = valueOrErrorMessage(addressFromString(ap), "claimWxINTERNAL: invalid user address")
584- let bt = v(aU, Z(aq))
585- let cC = as(aq, ap)
586- let cD = av(aq)
587- let cE = at(aq, ap)
588- let cF = au(aq, ap)
589- let cG = toBigInt(w(this, cC))
590- let cH = toBigInt(w(this, cE))
591- let cI = toBigInt(w(this, cF))
592- let cJ = A(this, cD)
593- let cK = bQ(aq, ap, bt, 0)
594- let ca = cK._1
595- let cx = cK._2
596- let bP = cK._3
597- let cL = (ca - cG)
598- if ((g >= cL))
599- then throw("nothing to claim")
600- else {
601- let cM = m(i(invoke(aW, "claimWxBoost", [aq, ap], nil))[0])
602- let cN = cL
603- let cO = min([(cN * toBigInt(2)), toBigInt(cM)])
604- let cP = q(i(invoke(aV, "emit", [toInt(cN)], nil))[0])
605- let cQ = i(invoke(aV, "emit", [toInt(cO)], nil))
606- if ((cQ == cQ))
607- then {
608- let cR = (cG + cL)
609- let cS = (cH + cN)
610- let cT = (cH + cN)
611- let cU = (cH + cN)
612-[StringEntry(cC, toString(cR)), StringEntry(cE, toString(cS)), StringEntry(cF, toString(cT)), StringEntry(cD, toString(cU)), ScriptTransfer(aA, toInt(cN), cP), ScriptTransfer(aA, toInt(cO), cP), aR("claim", ap, aq, toInt(cL), ci.transactionId)]
613- }
614- else throw("Strict value is not equal to itself.")
615- }
616- }
617- else throw("Strict value is not equal to itself.")
517+@Callable(bQ)
518+func claimWxREADONLY (ap,ao) = {
519+ let bD = an(ao, ap)
520+ let be = aq(ap)
521+ let cg = ar(ap, ao)
522+ let aX = av(bD)
523+ let bf = av(be)
524+ let ck = w(this, cg)
525+ let bc = v(aT, Y(ap))
526+ let bh = getIntegerValue(aT, Z(bc))
527+ let cz = z(aU, ai())
528+ let bi = z(aU, ak())
529+ let cA = if ((bi > height))
530+ then 0
531+ else (height - bi)
532+ let cB = fraction((cz * cA), bh, f)
533+ let cC = fraction(cB, aX, bf)
534+ let cD = bz(ap, ao, bc, 0)
535+ let bJ = cD._1
536+ let cd = cD._2
537+ let by = cD._3
538+ let cp = (bJ - toBigInt(ck))
539+ let cE = i(invoke(aV, "claimWxBoostREADONLY", [ap, ao], nil))
540+ let cq = m(cE[0])
541+ let cF = o(cE[1])
542+ let cr = cp
543+ let cs = min([(cr * toBigInt(2)), toBigInt(cq)])
544+ let cG = (cr + cs)
545+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", ap, ao, toString(cG), toString(ck), toString(cr), toString(cs), toString(cC)], e))
618546 }
619547
620548
621549
622-@Callable(ci)
623-func claimWxREADONLY (aq,ap) = {
624- let bU = ao(ap, aq)
625- let bv = ar(aq)
626- let cC = as(aq, ap)
627- let bo = aw(bU)
628- let bw = aw(bv)
629- let cG = w(this, cC)
630- let bt = v(aU, Z(aq))
631- let by = getIntegerValue(aU, aa(bt))
632- let cV = z(aV, aj())
633- let bz = z(aV, al())
634- let cW = if ((bz > height))
635- then 0
636- else (height - bz)
637- let cX = fraction((cV * cW), by, f)
638- let cY = fraction(cX, bo, bw)
639- let cZ = bQ(aq, ap, bt, 0)
640- let ca = cZ._1
641- let cx = cZ._2
642- let bP = cZ._3
643- let cL = (ca - toBigInt(cG))
644- let da = i(invoke(aW, "claimWxBoostREADONLY", [aq, ap], nil))
645- let cM = m(da[0])
646- let db = o(da[1])
647- let cN = cL
648- let cO = min([(cN * toBigInt(2)), toBigInt(cM)])
649- let dc = (cN + cO)
650- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", aq, ap, toString(dc), toString(cG), toString(cN), toString(cO), ((((bP + "::") + toString(cY)) + "::BOOSTDEBUG::") + db)], e))
651- }
652-
653-
654-
655-@Callable(ci)
656-func usersListTraversal (ay) = {
657- let cm = if ((toBase58String(ci.caller.bytes) == valueOrElse(getString(this, J()), "")))
658- then true
659- else cj(ci)
660- if ((cm == cm))
661- then {
662- let ba = aY(ay)
663- let dd = getString(aX(ay))
664- let bg = getString(aZ(ba))
665- let k = dd
666- if ($isInstanceOf(k, "Unit"))
667- then {
668- let de = bg
669- if ($isInstanceOf(de, "Unit"))
670- then $Tuple2(nil, false)
671- else if ($isInstanceOf(de, "String"))
672- then {
673- let df = de
674- $Tuple2([StringEntry(aX(ay), df)], true)
675- }
676- else throw("Match error")
677- }
678- else if ($isInstanceOf(k, "String"))
679- then {
680- let aA = k
681- let cG = w(this, as(ay, aA))
682- let dg = v(aU, Z(ay))
683- let dh = bQ(ay, aA, dg, 0)
684- let ca = dh._1
685- let cx = dh._2
686- let bP = dh._3
687- let cL = (ca - toBigInt(cG))
688- let di = if ((cL > g))
689- then invoke(this, "claimWxINTERNAL", [ay, aA], nil)
690- else unit
691- if ((di == di))
692- then {
693- let dj = getString(be(ba, aA))
694- let de = dj
695- if ($isInstanceOf(de, "Unit"))
696- then $Tuple2([DeleteEntry(aX(ay))], false)
697- else if ($isInstanceOf(de, "String"))
698- then {
699- let dk = de
700- $Tuple2([StringEntry(aX(ay), dk)], true)
701- }
702- else throw("Match error")
703- }
704- else throw("Strict value is not equal to itself.")
705- }
706- else throw("Match error")
707- }
708- else throw("Strict value is not equal to itself.")
709- }
710-
711-
712-
713-@Callable(ci)
714-func onModifyWeight (aq,bt) = if ((ci.caller != aU))
550+@Callable(bQ)
551+func onModifyWeight (ap,bc) = if ((bQ.caller != aT))
715552 then throw("permissions denied")
716553 else {
717- let dl = bs(aq, bt, 0)
718- let bq = dl._1
719- let bS = dl._2
720- let bT = dl._3
721- bS
554+ let cH = bb(ap, bc, 0)
555+ let aZ = cH._1
556+ let bB = cH._2
557+ let bC = cH._3
558+ bB
722559 }
723560
724561
725-@Verifier(dm)
726-func dn () = {
727- let do = {
728- let k = cd()
562+@Verifier(cI)
563+func cJ () = {
564+ let cK = {
565+ let k = bM()
729566 if ($isInstanceOf(k, "ByteVector"))
730567 then {
731- let ck = k
732- ck
568+ let bS = k
569+ bS
733570 }
734571 else if ($isInstanceOf(k, "Unit"))
735- then dm.senderPublicKey
572+ then cI.senderPublicKey
736573 else throw("Match error")
737574 }
738- let dp = {
739- let k = ce()
575+ let cL = {
576+ let k = bN()
740577 if ($isInstanceOf(k, "ByteVector"))
741578 then {
742- let ck = k
743- ck
579+ let bS = k
580+ bS
744581 }
745582 else if ($isInstanceOf(k, "Unit"))
746- then dm.senderPublicKey
583+ then cI.senderPublicKey
747584 else throw("Match error")
748585 }
749- if (sigVerify(dm.bodyBytes, dm.proofs[0], do))
586+ if (sigVerify(cI.bodyBytes, cI.proofs[0], cK))
750587 then true
751- else sigVerify(dm.bodyBytes, dm.proofs[0], dp)
588+ else sigVerify(cI.bodyBytes, cI.proofs[0], cL)
752589 }
753590
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 6 #-}
1+{-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = 18
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = "__"
1313
1414 let f = b
1515
1616 let g = toBigInt(0)
1717
1818 let h = toBigInt(1)
1919
2020 func i (j) = {
2121 let k = j
2222 if ($isInstanceOf(k, "List[Any]"))
2323 then {
2424 let l = k
2525 l
2626 }
2727 else throw("fail to cast into List[Any]")
2828 }
2929
3030
3131 func m (j) = {
3232 let k = j
3333 if ($isInstanceOf(k, "Int"))
3434 then {
3535 let n = k
3636 n
3737 }
3838 else throw("fail to cast into Int")
3939 }
4040
4141
4242 func o (j) = {
4343 let k = j
4444 if ($isInstanceOf(k, "String"))
4545 then {
4646 let p = k
4747 p
4848 }
4949 else throw("fail to cast into Int")
5050 }
5151
5252
5353 func q (j) = {
5454 let k = j
5555 if ($isInstanceOf(k, "ByteVector"))
5656 then {
5757 let r = k
5858 r
5959 }
6060 else throw("fail to cast into Int")
6161 }
6262
6363
6464 func s (t,u) = valueOrErrorMessage(getString(t, u), (("mandatory this." + u) + " is not defined"))
6565
6666
6767 func v (t,u) = valueOrErrorMessage(getString(t, u), (((("mandatory " + toString(t)) + ".") + u) + " is not defined"))
6868
6969
7070 func w (t,u) = valueOrElse(getInteger(t, u), 0)
7171
7272
7373 func x (t,u,y) = valueOrElse(getInteger(t, u), y)
7474
7575
7676 func z (t,u) = valueOrErrorMessage(getInteger(t, u), (("mandatory this." + u) + " is not defined"))
7777
7878
7979 func A (t,u) = value(parseBigInt(valueOrElse(getString(t, u), "0")))
8080
8181
8282 func B (t,u,y) = {
8383 let k = getString(t, u)
8484 if ($isInstanceOf(k, "String"))
8585 then {
8686 let C = k
8787 value(parseBigInt(C))
8888 }
8989 else if ($isInstanceOf(k, "Unit"))
9090 then y
9191 else throw("Match error")
9292 }
9393
9494
9595 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
9696
9797
9898 func G (j,H) = toInt(fraction(j, toBigInt(H), d))
9999
100100
101101 func I () = "%s%s__config__factoryAddress"
102102
103103
104-func J () = "%s__votingEmissionContract"
104+let J = 1
105+
106+let K = 2
107+
108+let L = 3
109+
110+let M = 4
111+
112+let N = 5
113+
114+let O = 6
115+
116+let P = 7
117+
118+func Q () = "%s__factoryConfig"
105119
106120
107-let K = 1
108-
109-let L = 2
110-
111-let M = 3
112-
113-let N = 4
114-
115-let O = 5
116-
117-let P = 6
118-
119-let Q = 7
120-
121-func R () = "%s__factoryConfig"
121+func R () = "%s__managerPublicKey"
122122
123123
124-func S () = "%s__managerPublicKey"
124+func S () = "%s__migratorPublicKey"
125125
126126
127-func T () = "%s__migratorPublicKey"
127+func T () = "%s__pendingManagerPublicKey"
128128
129129
130-func U () = "%s__pendingManagerPublicKey"
130+func U () = "%s__stablePoolAddonAddr"
131131
132132
133-func V () = "%s__stablePoolAddonAddr"
133+func V (W) = makeString(["%s%s%s", W, "mappings__lpAsset2PoolContract"], e)
134134
135135
136-func W (X) = makeString(["%s%s%s", X, "mappings__lpAsset2PoolContract"], e)
136+func X () = "%s__lpTokensList"
137137
138138
139-func Y () = "%s__lpTokensList"
139+func Y (W) = makeString(["%s%s%s", W, "mappings__lpAsset2PoolContract"], e)
140140
141141
142-func Z (X) = makeString(["%s%s%s", X, "mappings__lpAsset2PoolContract"], e)
142+func Z (aa) = makeString(["%s%s", "poolWeight", aa], e)
143143
144144
145-func aa (ab) = makeString(["%s%s", "poolWeight", ab], e)
145+func ab (ac) = split(valueOrElse(getString(ac, X()), ""), e)
146146
147147
148-func ac (ad) = split(valueOrElse(getString(ad, Y()), ""), e)
148+func ad (ac) = split(v(ac, Q()), e)
149149
150150
151-func ae (ad) = split(v(ad, R()), e)
151+func ae (af) = addressFromStringValue(af[K])
152152
153153
154-func af (ag) = addressFromStringValue(ag[L])
154+func ag (af) = addressFromStringValue(af[N])
155155
156156
157-func ah (ag) = addressFromStringValue(ag[O])
157+func ah (af) = addressFromStringValue(af[J])
158158
159159
160-func ai (ag) = addressFromStringValue(ag[K])
160+func ai () = "%s%s__ratePerBlock__current"
161161
162162
163-func aj () = "%s%s__ratePerBlock__current"
163+func aj () = "%s%s__ratePerBlockMax__current"
164164
165165
166-func ak () = "%s%s__ratePerBlockMax__current"
166+func ak () = "%s%s__emission__startBlock"
167167
168168
169-func al () = "%s%s__emission__startBlock"
169+func al () = "%s%s__emission__duration"
170170
171171
172-func am () = "%s%s__emission__duration"
172+func am () = "%s%s__emission__endBlock"
173173
174174
175-func an () = "%s%s__emission__endBlock"
175+func an (ao,ap) = makeString(["%s%s%s__staked", ao, ap], e)
176176
177177
178-func ao (ap,aq) = makeString(["%s%s%s__staked", ap, aq], e)
178+func aq (ap) = ("%s%s%s__staked__total__" + ap)
179179
180180
181-func ar (aq) = ("%s%s%s__staked__total__" + aq)
181+func ar (ap,ao) = makeString(["%s%s%s__claimed", ao, ap], e)
182182
183183
184-func as (aq,ap) = makeString(["%s%s%s__claimed", ap, aq], e)
184+func as (ap,ao) = makeString(["%s%s%s__claimedMinReward", ao, ap], e)
185185
186186
187-func at (aq,ap) = makeString(["%s%s%s__claimedMinReward", ap, aq], e)
187+func at (ap,ao) = makeString(["%s%s%s__claimedBoostReward", ao, ap], e)
188188
189189
190-func au (aq,ap) = makeString(["%s%s%s__claimedBoostReward", ap, aq], e)
190+func au (ap) = makeString(["%s%s%s__claimed__total", ap], e)
191191
192192
193-func av (aq) = makeString(["%s%s%s__claimed__total", aq], e)
193+func av (u) = valueOrElse(getInteger(this, u), 0)
194194
195195
196-func aw (u) = valueOrElse(getInteger(this, u), 0)
196+func aw (ax) = makeString(["%s%s%s", ax, "total", "bal"], e)
197197
198198
199-func ax (ay) = makeString(["%s%s%s", ay, "total", "bal"], e)
199+func ay (ax,az) = makeString(["%s%s%s", ax, az, "bal"], e)
200200
201201
202-func az (ay,aA) = makeString(["%s%s%s", ay, aA, "bal"], e)
202+func aA (ax) = makeString(["%s%s%s", ax, "total", "balINT"], e)
203203
204204
205-func aB (ay) = makeString(["%s%s%s", ay, "total", "balINT"], e)
205+func aB (ax,az) = makeString(["%s%s%s", ax, az, "balINT"], e)
206206
207207
208-func aC (ay,aA) = makeString(["%s%s%s", ay, aA, "balINT"], e)
208+func aC (ax) = makeString(["%s%s%s", ax, "total", "lastUpd"], e)
209209
210210
211-func aD (ay) = makeString(["%s%s%s", ay, "total", "lastUpd"], e)
211+func aD (ax,az) = makeString(["%s%s%s", ax, az, "lastUpd"], e)
212212
213213
214-func aE (ay,aA) = makeString(["%s%s%s", ay, aA, "lastUpd"], e)
214+func aE (ax) = makeString(["%s%s%s%s", ax, "common", "lpInt"], e)
215215
216216
217-func aF (ay) = makeString(["%s%s%s%s", ay, "common", "lpInt"], e)
217+func aF (ax) = makeString(["%s%s%s%s", ax, "common", "lpIntH"], e)
218218
219219
220-func aG (ay) = makeString(["%s%s%s%s", ay, "common", "lpIntH"], e)
220+func aG (ax,az) = makeString(["%s%s%s%s", ax, az, "lpInt"], e)
221221
222222
223-func aH (ay,aA) = makeString(["%s%s%s%s", ay, aA, "lpInt"], e)
223+func aH (ax,az) = makeString(["%s%s%s%s", ax, az, "lpIntH"], e)
224224
225225
226-func aI (ay,aA) = makeString(["%s%s%s%s", ay, aA, "lpIntH"], e)
226+func aI (ax) = makeString(["%s", ax, "wxPerLp"], e)
227227
228228
229-func aJ (ay) = makeString(["%s", ay, "wxPerLp"], e)
229+func aJ (ax) = makeString(["%s", ax, "wxPerLpX18"], e)
230230
231231
232-func aK (ay) = makeString(["%s", ay, "wxPerLpX18"], e)
232+func aK (ax,az) = makeString(["%s%s%s%s", ax, az, "uIntL"], e)
233233
234234
235-func aL (ay,aA) = makeString(["%s%s%s%s", ay, aA, "uIntL"], e)
235+func aL (aM,az,aN) = makeString(["%s%s%s%s__history", aM, az, aN], e)
236236
237237
238-func aM (aN,aA,aO) = makeString(["%s%s%s%s__history", aN, aA, aO], e)
238+func aO (az,ax,aM,aP) = makeString(["%s%s%s%d%d%d", az, ax, aM, toString(height), toString(lastBlock.timestamp), toString(aP)], e)
239239
240240
241-func aP (aA,ay,aN,aQ) = makeString(["%s%s%s%d%d%d", aA, ay, aN, toString(height), toString(lastBlock.timestamp), toString(aQ)], e)
241+func aQ (aM,az,ax,aP,aR) = StringEntry(aL(aM, az, toBase58String(aR)), aO(az, ax, aM, aP))
242242
243243
244-func aR (aN,aA,ay,aQ,aS) = StringEntry(aM(aN, aA, toBase58String(aS)), aP(aA, ay, aN, aQ))
244+let aS = s(this, I())
245+
246+let aT = addressFromStringValue(aS)
247+
248+let af = ad(aT)
249+
250+let aU = ag(af)
251+
252+let aV = ae(af)
253+
254+func aW (aX,aY,aZ,ba) = if (if ((aY == g))
255+ then (aX > g)
256+ else false)
257+ then g
258+ else if ((aX == g))
259+ then aZ
260+ else if (if ((aY > g))
261+ then (aX > g)
262+ else false)
263+ then value(parseBigInt(s(this, ba)))
264+ else throw("calcWxPerLpIntegralUserLast: unexpected state")
245265
246266
247-let aT = s(this, I())
248-
249-let aU = addressFromStringValue(aT)
250-
251-let ag = ae(aU)
252-
253-let aV = ah(ag)
254-
255-let aW = af(ag)
256-
257-func aX (ay) = makeString(["%s%s", ay, "nextUser"], e)
258-
259-
260-func aY (ay) = makeString(["users", ay], e)
261-
262-
263-func aZ (ba) = makeString(["%s%s%s", ba, "head"], e)
264-
265-
266-func bb (ba) = makeString(["%s%s%s", ba, "size"], e)
267-
268-
269-func bc (ba,bd) = makeString(["%s%s%s%s", ba, bd, "prev"], e)
270-
271-
272-func be (ba,bd) = makeString(["%s%s%s%s", ba, bd, "next"], e)
273-
274-
275-func bf (ba,bd) = {
276- let bg = getString(this, aZ(ba))
277- let bh = getString(this, bc(ba, bd))
278- let bi = getString(this, be(ba, bd))
279- if (if ((bd == valueOrElse(bg, "")))
280- then true
281- else (bh != unit))
282- then true
283- else (bi != unit)
267+func bb (ap,bc,bd) = {
268+ let be = aq(ap)
269+ let bf = toBigInt(av(be))
270+ let bg = if ((bf == g))
271+ then h
272+ else bf
273+ let bh = getIntegerValue(aT, Z(bc))
274+ let bi = z(aU, ak())
275+ let bj = 1000
276+ let bk = (z(aU, ai()) * bj)
277+ let bl = fraction(bk, bh, (f * 3))
278+ let bm = aE(ap)
279+ let bn = aF(ap)
280+ let bo = aI(ap)
281+ let bp = x(this, bn, bi)
282+ let bq = A(this, bm)
283+ let br = 0
284+ let bs = max([(height - bp), 0])
285+ let bt = if ((br != 0))
286+ then toBigInt(br)
287+ else fraction(toBigInt(bl), toBigInt(b), bg)
288+ let bu = (bf + toBigInt(bd))
289+ let bv = if ((bu == g))
290+ then h
291+ else bu
292+ let aZ = (bq + (bt * toBigInt(bs)))
293+ let bw = (toBigInt(bl) / bv)
294+ let bx = height
295+ let by = makeString(["wxPerLpIntegralNew=", toString(aZ), "dh=", toString(bs), "wxPerLpX3=", toString(bt), "stakedTotal=", toString(bf), "poolWxEmissionPerBlockX3=", toString(bl), "wxEmissionPerBlockX3=", toString(bk), "poolWeight=", toString(bh)], "::")
296+ $Tuple3(aZ, [StringEntry(bm, toString(aZ)), IntegerEntry(bn, bx), StringEntry(bo, toString(bw))], by)
284297 }
285298
286299
287-func bj (ba,bd) = {
288- let bg = getString(this, aZ(ba))
289- let bk = valueOrElse(getInteger(this, bb(ba)), 0)
290- let bl = if (!(bf(ba, bd)))
291- then true
292- else throw("Node exists")
293- if ((bl == bl))
294- then (([IntegerEntry(bb(ba), (bk + 1))] ++ (if ((bg != unit))
295- then [StringEntry(be(ba, bd), value(bg)), StringEntry(bc(ba, value(bg)), bd)]
296- else nil)) ++ [StringEntry(aZ(ba), bd)])
297- else throw("Strict value is not equal to itself.")
300+func bz (ap,ao,bc,bd) = {
301+ let bA = bb(ap, bc, bd)
302+ let aZ = bA._1
303+ let bB = bA._2
304+ let bC = bA._3
305+ let bj = 1000
306+ let bD = an(ao, ap)
307+ let aX = av(bD)
308+ let bE = aG(ap, ao)
309+ let bF = aH(ap, ao)
310+ let ba = aK(ap, ao)
311+ let bG = A(this, bE)
312+ let aY = w(this, bF)
313+ let bH = aW(toBigInt(aX), toBigInt(aY), aZ, ba)
314+ let bI = (b * bj)
315+ let bJ = (bG + fraction((aZ - bH), toBigInt(aX), toBigInt(bI)))
316+ let bK = aZ
317+ let bL = height
318+ let by = makeString(["wxPerLpIntegralUserLastUpdHeightOrZero=", toString(aY), "this.getStringOrFail(wxPerLpIntegralUserLastKEY).parseBigInt().value()=", toString(value(parseBigInt(s(this, ba)))), "wxPerLpIntegralNew=", toString(aZ), "wxToClaimUserNew=", toString(bJ), "wxPerLpIntegralUserLast=", toString(bH), "stakedByUser=", toString(aX), "poolDEBUG=", bC, "height=", toString(height)], "::")
319+ $Tuple3(bJ, (bB ++ [StringEntry(bE, toString(bJ)), IntegerEntry(bF, bL), StringEntry(ba, toString(bK))]), by)
298320 }
299321
300322
301-func bm (ba,bd) = {
302- let bg = getString(this, aZ(ba))
303- let bk = valueOrElse(getInteger(this, bb(ba)), 0)
304- let bh = getString(this, bc(ba, bd))
305- let bi = getString(this, be(ba, bd))
306- ([IntegerEntry(bb(ba), (bk - 1))] ++ (if (if ((bh != unit))
307- then (bi != unit)
308- else false)
309- then [StringEntry(be(ba, value(bh)), value(bi)), StringEntry(bc(ba, value(bi)), value(bh)), DeleteEntry(bc(ba, bd)), DeleteEntry(be(ba, bd))]
310- else if ((bi != unit))
311- then [StringEntry(aZ(ba), value(bi)), DeleteEntry(be(ba, bd)), DeleteEntry(bc(ba, value(bi)))]
312- else if ((bh != unit))
313- then [DeleteEntry(bc(ba, bd)), DeleteEntry(be(ba, value(bh)))]
314- else if ((bd == valueOrElse(bg, "")))
315- then [DeleteEntry(aZ(ba))]
316- else throw(((("invalid node: " + ba) + ".") + bd))))
323+func bM () = {
324+ let k = getString(R())
325+ if ($isInstanceOf(k, "String"))
326+ then {
327+ let C = k
328+ fromBase58String(C)
329+ }
330+ else if ($isInstanceOf(k, "Unit"))
331+ then unit
332+ else throw("Match error")
317333 }
318334
319335
320-func bn (bo,bp,bq,br) = if (if ((bp == g))
321- then (bo > g)
322- else false)
323- then g
324- else if ((bo == g))
325- then bq
326- else if (if ((bp > g))
327- then (bo > g)
328- else false)
329- then value(parseBigInt(s(this, br)))
330- else throw("calcWxPerLpIntegralUserLast: unexpected state")
331-
332-
333-func bs (aq,bt,bu) = {
334- let bv = ar(aq)
335- let bw = toBigInt(aw(bv))
336- let bx = if ((bw == g))
337- then h
338- else bw
339- let by = getIntegerValue(aU, aa(bt))
340- let bz = z(aV, al())
341- let bA = 1000
342- let bB = (z(aV, aj()) * bA)
343- let bC = fraction(bB, by, (f * 3))
344- let bD = aF(aq)
345- let bE = aG(aq)
346- let bF = aJ(aq)
347- let bG = x(this, bE, bz)
348- let bH = A(this, bD)
349- let bI = 0
350- let bJ = max([(height - bG), 0])
351- let bK = if ((bI != 0))
352- then toBigInt(bI)
353- else fraction(toBigInt(bC), toBigInt(b), bx)
354- let bL = (bw + toBigInt(bu))
355- let bM = if ((bL == g))
356- then h
357- else bL
358- let bq = (bH + (bK * toBigInt(bJ)))
359- let bN = (toBigInt(bC) / bM)
360- let bO = height
361- let bP = makeString(["wxPerLpIntegralNew=", toString(bq), "dh=", toString(bJ), "wxPerLpX3=", toString(bK), "stakedTotal=", toString(bw), "poolWxEmissionPerBlockX3=", toString(bC), "wxEmissionPerBlockX3=", toString(bB), "poolWeight=", toString(by)], "::")
362- $Tuple3(bq, [StringEntry(bD, toString(bq)), IntegerEntry(bE, bO), StringEntry(bF, toString(bN))], bP)
363- }
364-
365-
366-func bQ (aq,ap,bt,bu) = {
367- let bR = bs(aq, bt, bu)
368- let bq = bR._1
369- let bS = bR._2
370- let bT = bR._3
371- let bA = 1000
372- let bU = ao(ap, aq)
373- let bo = aw(bU)
374- let bV = aH(aq, ap)
375- let bW = aI(aq, ap)
376- let br = aL(aq, ap)
377- let bX = A(this, bV)
378- let bp = w(this, bW)
379- let bY = bn(toBigInt(bo), toBigInt(bp), bq, br)
380- let bZ = (b * bA)
381- let ca = (bX + fraction((bq - bY), toBigInt(bo), toBigInt(bZ)))
382- let cb = bq
383- let cc = height
384- let bP = makeString(["wxPerLpIntegralUserLastUpdHeightOrZero=", toString(bp), "wxPerLpIntegralNew=", toString(bq), "wxToClaimUserNew=", toString(ca), "wxPerLpIntegralUserLast=", toString(bY), "stakedByUser=", toString(bo), "poolDEBUG=", bT, "height=", toString(height)], "::")
385- $Tuple3(ca, (bS ++ [StringEntry(bV, toString(ca)), IntegerEntry(bW, cc), StringEntry(br, toString(cb))]), bP)
386- }
387-
388-
389-func cd () = {
336+func bN () = {
390337 let k = getString(S())
391338 if ($isInstanceOf(k, "String"))
392339 then {
393340 let C = k
394341 fromBase58String(C)
395342 }
396343 else if ($isInstanceOf(k, "Unit"))
397344 then unit
398345 else throw("Match error")
399346 }
400347
401348
402-func ce () = {
349+func bO () = {
403350 let k = getString(T())
404351 if ($isInstanceOf(k, "String"))
405352 then {
406353 let C = k
407354 fromBase58String(C)
408355 }
409356 else if ($isInstanceOf(k, "Unit"))
410357 then unit
411358 else throw("Match error")
412359 }
413360
414361
415-func cf () = {
416- let k = getString(U())
417- if ($isInstanceOf(k, "String"))
362+func bP (bQ) = {
363+ let bR = throw("Permission denied")
364+ let k = bM()
365+ if ($isInstanceOf(k, "ByteVector"))
418366 then {
419- let C = k
420- fromBase58String(C)
367+ let bS = k
368+ if ((bQ.callerPublicKey == bS))
369+ then true
370+ else bR
421371 }
422372 else if ($isInstanceOf(k, "Unit"))
423- then unit
373+ then if ((bQ.caller == this))
374+ then true
375+ else bR
424376 else throw("Match error")
425377 }
426378
427379
428-let cg = throw("Permission denied")
429-
430-func ch (ci) = if ((ci.caller == this))
431- then true
432- else cg
433-
434-
435-func cj (ci) = {
436- let k = cd()
437- if ($isInstanceOf(k, "ByteVector"))
438- then {
439- let ck = k
440- if ((ci.callerPublicKey == ck))
441- then true
442- else cg
443- }
444- else if ($isInstanceOf(k, "Unit"))
445- then if ((ci.caller == this))
446- then true
447- else cg
448- else throw("Match error")
449- }
450-
451-
452-@Callable(ci)
453-func constructor (cl) = {
454- let cm = cj(ci)
455- if ((cm == cm))
456- then [StringEntry(I(), cl)]
380+@Callable(bQ)
381+func constructor (bT) = {
382+ let bU = bP(bQ)
383+ if ((bU == bU))
384+ then [StringEntry(I(), bT)]
457385 else throw("Strict value is not equal to itself.")
458386 }
459387
460388
461389
462-@Callable(ci)
463-func constructorV2 (cn) = {
464- let co = [cj(ci), if ((addressFromString(cn) != unit))
465- then true
466- else "invalid voting emission contract address"]
467- if ((co == co))
468- then [StringEntry(J(), cn)]
469- else throw("Strict value is not equal to itself.")
470- }
471-
472-
473-
474-@Callable(ci)
475-func setManager (cp) = {
476- let cm = cj(ci)
477- if ((cm == cm))
390+@Callable(bQ)
391+func setManager (bV) = {
392+ let bU = bP(bQ)
393+ if ((bU == bU))
478394 then {
479- let cq = fromBase58String(cp)
480- if ((cq == cq))
481- then [StringEntry(U(), cp)]
395+ let bW = fromBase58String(bV)
396+ if ((bW == bW))
397+ then [StringEntry(T(), bV)]
482398 else throw("Strict value is not equal to itself.")
483399 }
484400 else throw("Strict value is not equal to itself.")
485401 }
486402
487403
488404
489-@Callable(ci)
405+@Callable(bQ)
490406 func confirmManager () = {
491- let cr = cf()
492- let cs = if (isDefined(cr))
407+ let bX = bO()
408+ let bY = if (isDefined(bX))
493409 then true
494410 else throw("No pending manager")
495- if ((cs == cs))
411+ if ((bY == bY))
496412 then {
497- let ct = if ((ci.callerPublicKey == value(cr)))
413+ let bZ = if ((bQ.callerPublicKey == value(bX)))
498414 then true
499415 else throw("You are not pending manager")
500- if ((ct == ct))
501- then [StringEntry(S(), toBase58String(value(cr))), DeleteEntry(U())]
416+ if ((bZ == bZ))
417+ then [StringEntry(R(), toBase58String(value(bX))), DeleteEntry(T())]
502418 else throw("Strict value is not equal to itself.")
503419 }
504420 else throw("Strict value is not equal to itself.")
505421 }
506422
507423
508424
509-@Callable(ci)
510-func stake () = if ((size(ci.payments) != 1))
425+@Callable(bQ)
426+func stake () = if ((size(bQ.payments) != 1))
511427 then throw("invalid payment - exact one payment must be attached")
512428 else {
513- let cu = ci.payments[0]
514- let ay = value(cu.assetId)
515- let aq = toBase58String(ay)
516- let aQ = cu.amount
517- let bt = valueOrErrorMessage(getString(aU, W(aq)), ("unsupported lp asset " + aq))
518- let cv = toString(ci.caller)
519- let ap = if ((cv == bt))
520- then toString(ci.originCaller)
521- else cv
522- let bU = ao(ap, aq)
523- let bv = ar(aq)
524- let bo = aw(bU)
525- let bw = aw(bv)
526- let cw = bQ(aq, ap, bt, aQ)
527- let ca = cw._1
528- let cx = cw._2
529- let bP = cw._3
530- let ba = aY(aq)
531- let cy = if (bf(ba, ap))
532- then nil
533- else bj(ba, ap)
534- (([IntegerEntry(bU, (bo + aQ)), IntegerEntry(bv, (bw + aQ)), aR("stake", ap, aq, aQ, ci.transactionId)] ++ cx) ++ cy)
429+ let ca = bQ.payments[0]
430+ let ax = value(ca.assetId)
431+ let ap = toBase58String(ax)
432+ let aP = ca.amount
433+ let bc = valueOrErrorMessage(getString(aT, V(ap)), ("unsupported lp asset " + ap))
434+ let cb = toString(bQ.caller)
435+ let ao = if ((cb == bc))
436+ then toString(bQ.originCaller)
437+ else cb
438+ let bD = an(ao, ap)
439+ let be = aq(ap)
440+ let aX = av(bD)
441+ let bf = av(be)
442+ let cc = bz(ap, ao, bc, aP)
443+ let bJ = cc._1
444+ let cd = cc._2
445+ let by = cc._3
446+ ([IntegerEntry(bD, (aX + aP)), IntegerEntry(be, (bf + aP)), aQ("stake", ao, ap, aP, bQ.transactionId)] ++ cd)
535447 }
536448
537449
538450
539-@Callable(ci)
540-func unstake (aq,aQ) = {
541- let ay = fromBase58String(aq)
542- let bt = valueOrErrorMessage(getString(aU, W(aq)), ("unsupported lp asset " + aq))
543- let cz = valueOrElse(getString(this, V()), bt)
544- let cv = toString(ci.caller)
545- let ap = if (if ((cv == bt))
451+@Callable(bQ)
452+func unstake (ap,aP) = {
453+ let ax = fromBase58String(ap)
454+ let bc = valueOrErrorMessage(getString(aT, V(ap)), ("unsupported lp asset " + ap))
455+ let ce = valueOrElse(getString(this, U()), bc)
456+ let cb = toString(bQ.caller)
457+ let ao = if (if ((cb == bc))
546458 then true
547- else (cv == cz))
548- then toString(ci.originCaller)
549- else cv
550- let bU = ao(ap, aq)
551- let bv = ar(aq)
552- let bo = aw(bU)
553- let bw = aw(bv)
554- let cA = bQ(aq, ap, bt, -(aQ))
555- let ca = cA._1
556- let cx = cA._2
557- let bP = cA._3
558- let ba = aY(aq)
559- let cy = if (bf(ba, ap))
560- then bm(ba, ap)
561- else nil
562- if ((aQ > bo))
459+ else (cb == ce))
460+ then toString(bQ.originCaller)
461+ else cb
462+ let bD = an(ao, ap)
463+ let be = aq(ap)
464+ let aX = av(bD)
465+ let bf = av(be)
466+ let cf = bz(ap, ao, bc, -(aP))
467+ let bJ = cf._1
468+ let cd = cf._2
469+ let by = cf._3
470+ if ((aP > aX))
563471 then throw("passed amount is less then available")
564- else (([IntegerEntry(bU, (bo - aQ)), IntegerEntry(bv, (bw - aQ)), ScriptTransfer(ci.caller, aQ, ay), aR("unstake", ap, aq, aQ, ci.transactionId)] ++ cx) ++ cy)
472+ else ([IntegerEntry(bD, (aX - aP)), IntegerEntry(be, (bf - aP)), ScriptTransfer(bQ.caller, aP, ax), aQ("unstake", ao, ap, aP, bQ.transactionId)] ++ cd)
565473 }
566474
567475
568476
569-@Callable(ci)
570-func claimWx (aq) = {
571- let ap = toString(ci.caller)
572- let cB = invoke(this, "claimWxINTERNAL", [aq, ap], nil)
573- $Tuple2(nil, cB)
477+@Callable(bQ)
478+func claimWx (ap) = {
479+ let az = bQ.caller
480+ let ao = toString(bQ.caller)
481+ let bc = v(aT, Y(ap))
482+ let cg = ar(ap, ao)
483+ let ch = au(ap)
484+ let ci = as(ap, ao)
485+ let cj = at(ap, ao)
486+ let ck = toBigInt(w(this, cg))
487+ let cl = toBigInt(w(this, ci))
488+ let cm = toBigInt(w(this, cj))
489+ let cn = A(this, ch)
490+ let co = bz(ap, ao, bc, 0)
491+ let bJ = co._1
492+ let cd = co._2
493+ let by = co._3
494+ let cp = (bJ - ck)
495+ if ((g >= cp))
496+ then throw("nothing to claim")
497+ else {
498+ let cq = m(i(invoke(aV, "claimWxBoost", [ap, ao], nil))[0])
499+ let cr = cp
500+ let cs = min([(cr * toBigInt(2)), toBigInt(cq)])
501+ let ct = q(i(invoke(aU, "emit", [toInt(cr)], nil))[0])
502+ let cu = i(invoke(aU, "emit", [toInt(cs)], nil))
503+ if ((cu == cu))
504+ then {
505+ let cv = (ck + cp)
506+ let cw = (cl + cr)
507+ let cx = (cl + cr)
508+ let cy = (cl + cr)
509+[StringEntry(cg, toString(cv)), StringEntry(ci, toString(cw)), StringEntry(cj, toString(cx)), StringEntry(ch, toString(cy)), ScriptTransfer(az, toInt(cr), ct), ScriptTransfer(az, toInt(cs), ct), aQ("claim", ao, ap, toInt(cp), bQ.transactionId)]
510+ }
511+ else throw("Strict value is not equal to itself.")
512+ }
574513 }
575514
576515
577516
578-@Callable(ci)
579-func claimWxINTERNAL (aq,ap) = {
580- let cm = ch(ci)
581- if ((cm == cm))
582- then {
583- let aA = valueOrErrorMessage(addressFromString(ap), "claimWxINTERNAL: invalid user address")
584- let bt = v(aU, Z(aq))
585- let cC = as(aq, ap)
586- let cD = av(aq)
587- let cE = at(aq, ap)
588- let cF = au(aq, ap)
589- let cG = toBigInt(w(this, cC))
590- let cH = toBigInt(w(this, cE))
591- let cI = toBigInt(w(this, cF))
592- let cJ = A(this, cD)
593- let cK = bQ(aq, ap, bt, 0)
594- let ca = cK._1
595- let cx = cK._2
596- let bP = cK._3
597- let cL = (ca - cG)
598- if ((g >= cL))
599- then throw("nothing to claim")
600- else {
601- let cM = m(i(invoke(aW, "claimWxBoost", [aq, ap], nil))[0])
602- let cN = cL
603- let cO = min([(cN * toBigInt(2)), toBigInt(cM)])
604- let cP = q(i(invoke(aV, "emit", [toInt(cN)], nil))[0])
605- let cQ = i(invoke(aV, "emit", [toInt(cO)], nil))
606- if ((cQ == cQ))
607- then {
608- let cR = (cG + cL)
609- let cS = (cH + cN)
610- let cT = (cH + cN)
611- let cU = (cH + cN)
612-[StringEntry(cC, toString(cR)), StringEntry(cE, toString(cS)), StringEntry(cF, toString(cT)), StringEntry(cD, toString(cU)), ScriptTransfer(aA, toInt(cN), cP), ScriptTransfer(aA, toInt(cO), cP), aR("claim", ap, aq, toInt(cL), ci.transactionId)]
613- }
614- else throw("Strict value is not equal to itself.")
615- }
616- }
617- else throw("Strict value is not equal to itself.")
517+@Callable(bQ)
518+func claimWxREADONLY (ap,ao) = {
519+ let bD = an(ao, ap)
520+ let be = aq(ap)
521+ let cg = ar(ap, ao)
522+ let aX = av(bD)
523+ let bf = av(be)
524+ let ck = w(this, cg)
525+ let bc = v(aT, Y(ap))
526+ let bh = getIntegerValue(aT, Z(bc))
527+ let cz = z(aU, ai())
528+ let bi = z(aU, ak())
529+ let cA = if ((bi > height))
530+ then 0
531+ else (height - bi)
532+ let cB = fraction((cz * cA), bh, f)
533+ let cC = fraction(cB, aX, bf)
534+ let cD = bz(ap, ao, bc, 0)
535+ let bJ = cD._1
536+ let cd = cD._2
537+ let by = cD._3
538+ let cp = (bJ - toBigInt(ck))
539+ let cE = i(invoke(aV, "claimWxBoostREADONLY", [ap, ao], nil))
540+ let cq = m(cE[0])
541+ let cF = o(cE[1])
542+ let cr = cp
543+ let cs = min([(cr * toBigInt(2)), toBigInt(cq)])
544+ let cG = (cr + cs)
545+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", ap, ao, toString(cG), toString(ck), toString(cr), toString(cs), toString(cC)], e))
618546 }
619547
620548
621549
622-@Callable(ci)
623-func claimWxREADONLY (aq,ap) = {
624- let bU = ao(ap, aq)
625- let bv = ar(aq)
626- let cC = as(aq, ap)
627- let bo = aw(bU)
628- let bw = aw(bv)
629- let cG = w(this, cC)
630- let bt = v(aU, Z(aq))
631- let by = getIntegerValue(aU, aa(bt))
632- let cV = z(aV, aj())
633- let bz = z(aV, al())
634- let cW = if ((bz > height))
635- then 0
636- else (height - bz)
637- let cX = fraction((cV * cW), by, f)
638- let cY = fraction(cX, bo, bw)
639- let cZ = bQ(aq, ap, bt, 0)
640- let ca = cZ._1
641- let cx = cZ._2
642- let bP = cZ._3
643- let cL = (ca - toBigInt(cG))
644- let da = i(invoke(aW, "claimWxBoostREADONLY", [aq, ap], nil))
645- let cM = m(da[0])
646- let db = o(da[1])
647- let cN = cL
648- let cO = min([(cN * toBigInt(2)), toBigInt(cM)])
649- let dc = (cN + cO)
650- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", aq, ap, toString(dc), toString(cG), toString(cN), toString(cO), ((((bP + "::") + toString(cY)) + "::BOOSTDEBUG::") + db)], e))
651- }
652-
653-
654-
655-@Callable(ci)
656-func usersListTraversal (ay) = {
657- let cm = if ((toBase58String(ci.caller.bytes) == valueOrElse(getString(this, J()), "")))
658- then true
659- else cj(ci)
660- if ((cm == cm))
661- then {
662- let ba = aY(ay)
663- let dd = getString(aX(ay))
664- let bg = getString(aZ(ba))
665- let k = dd
666- if ($isInstanceOf(k, "Unit"))
667- then {
668- let de = bg
669- if ($isInstanceOf(de, "Unit"))
670- then $Tuple2(nil, false)
671- else if ($isInstanceOf(de, "String"))
672- then {
673- let df = de
674- $Tuple2([StringEntry(aX(ay), df)], true)
675- }
676- else throw("Match error")
677- }
678- else if ($isInstanceOf(k, "String"))
679- then {
680- let aA = k
681- let cG = w(this, as(ay, aA))
682- let dg = v(aU, Z(ay))
683- let dh = bQ(ay, aA, dg, 0)
684- let ca = dh._1
685- let cx = dh._2
686- let bP = dh._3
687- let cL = (ca - toBigInt(cG))
688- let di = if ((cL > g))
689- then invoke(this, "claimWxINTERNAL", [ay, aA], nil)
690- else unit
691- if ((di == di))
692- then {
693- let dj = getString(be(ba, aA))
694- let de = dj
695- if ($isInstanceOf(de, "Unit"))
696- then $Tuple2([DeleteEntry(aX(ay))], false)
697- else if ($isInstanceOf(de, "String"))
698- then {
699- let dk = de
700- $Tuple2([StringEntry(aX(ay), dk)], true)
701- }
702- else throw("Match error")
703- }
704- else throw("Strict value is not equal to itself.")
705- }
706- else throw("Match error")
707- }
708- else throw("Strict value is not equal to itself.")
709- }
710-
711-
712-
713-@Callable(ci)
714-func onModifyWeight (aq,bt) = if ((ci.caller != aU))
550+@Callable(bQ)
551+func onModifyWeight (ap,bc) = if ((bQ.caller != aT))
715552 then throw("permissions denied")
716553 else {
717- let dl = bs(aq, bt, 0)
718- let bq = dl._1
719- let bS = dl._2
720- let bT = dl._3
721- bS
554+ let cH = bb(ap, bc, 0)
555+ let aZ = cH._1
556+ let bB = cH._2
557+ let bC = cH._3
558+ bB
722559 }
723560
724561
725-@Verifier(dm)
726-func dn () = {
727- let do = {
728- let k = cd()
562+@Verifier(cI)
563+func cJ () = {
564+ let cK = {
565+ let k = bM()
729566 if ($isInstanceOf(k, "ByteVector"))
730567 then {
731- let ck = k
732- ck
568+ let bS = k
569+ bS
733570 }
734571 else if ($isInstanceOf(k, "Unit"))
735- then dm.senderPublicKey
572+ then cI.senderPublicKey
736573 else throw("Match error")
737574 }
738- let dp = {
739- let k = ce()
575+ let cL = {
576+ let k = bN()
740577 if ($isInstanceOf(k, "ByteVector"))
741578 then {
742- let ck = k
743- ck
579+ let bS = k
580+ bS
744581 }
745582 else if ($isInstanceOf(k, "Unit"))
746- then dm.senderPublicKey
583+ then cI.senderPublicKey
747584 else throw("Match error")
748585 }
749- if (sigVerify(dm.bodyBytes, dm.proofs[0], do))
586+ if (sigVerify(cI.bodyBytes, cI.proofs[0], cK))
750587 then true
751- else sigVerify(dm.bodyBytes, dm.proofs[0], dp)
588+ else sigVerify(cI.bodyBytes, cI.proofs[0], cL)
752589 }
753590

github/deemru/w8io/03bedc9 
200.77 ms