tx · D9m4e8Wr4TUp52GK68wQJsABmn1qpN6bWit6MY1kfvzY

3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv:  -0.03500000 Waves

2022.10.27 12:00 [3355995] smart account 3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv > SELF 0.00000000 Waves

{ "type": 13, "id": "D9m4e8Wr4TUp52GK68wQJsABmn1qpN6bWit6MY1kfvzY", "fee": 3500000, "feeAssetId": null, "timestamp": 1666861156639, "version": 1, "sender": "3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv", "senderPublicKey": "HBWgh7DKPyzCnEXKJAJ5dKQ3jmPtMhGD78tt6jRdkV61", "proofs": [ "2XM6Dc2hdueXLAGdajTqumsHs3DFE3HaeVmm9CobTNKqtpqG6yTBVoxfQdyaSgMA6fP8DeLDd6YBkDMxFwpxkf8G" ], "script": "base64:AAIFAAAAAAAAAH4IAhIKCggICAgICAgIARIDCgEIEgYKBAgICAgSBAoCCBgSAwoBCBIECgIIGBIDCgEIEgASAwoBGBIKCggICAgICAEICBIECgIIARIDCgEBEgMKAQESBAoCCAESBgoECAgICBIECgIICBIECgIICBIECgIICBIDCgEIEgMKAQgAAABdAAAAAAZTQ0FMRTgAAAAAAAAAAAgAAAAABU1VTFQ4AAAAAAAF9eEAAAAAAAdTQ0FMRTE4AAAAAAAAAAASAAAAAAZNVUxUMTgJAAE2AAAAAQAN4Lazp2QAAAAAAAAOUE9PTFdFSUdIVE1VTFQFAAAABU1VTFQ4AAAAAA5HV1h2aXJ0dWFsUE9PTAIAAAAOR1dYdmlydHVhbFBPT0wAAAAADGxhYmVsUG9vbHNMcAIAAAAIUE9PTFNfTFAAAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAADU0VQAgAAAAJfXwAAAAAFRU1QVFkCAAAAAAAAAAAKUG9vbEFjdGl2ZQAAAAAAAAAAAQAAAAAPUG9vbFB1dERpc2FibGVkAAAAAAAAAAACAAAAABNQb29sTWF0Y2hlckRpc2FibGVkAAAAAAAAAAADAAAAAAxQb29sU2h1dGRvd24AAAAAAAAAAAQAAAAAEmlkeEludGVybmFsQXNzZXRJZAAAAAAAAAAAAQAAAAAPaWR4UmVzdXRBY3Rpb25zAAAAAAAAAAACAAAAACBpZHhJZkFzc2V0SWRDYWxjdWxhdGlvblBlcmZvcm1lZAAAAAAAAAAAAwAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAEAAAAADWlkeFBvb2xTdGF0dXMAAAAAAAAAAAIAAAAAEGlkeFBvb2xMUEFzc2V0SWQAAAAAAAAAAAMAAAAADWlkeEFtdEFzc2V0SWQAAAAAAAAAAAQAAAAAD2lkeFByaWNlQXNzZXRJZAAAAAAAAAAABQAAAAAOaWR4QW10QXNzZXREY20AAAAAAAAAAAYAAAAAEGlkeFByaWNlQXNzZXREY20AAAAAAAAAAAcAAAAADmlkeElBbXRBc3NldElkAAAAAAAAAAAIAAAAABBpZHhJUHJpY2VBc3NldElkAAAAAAAAAAAJAAAAAA1pZHhMUEFzc2V0RGNtAAAAAAAAAAAKAAAAAAtpZHhQb29sVHlwZQAAAAAAAAAACwAAAAATcG9vbExhYmVsV3hFbWlzc2lvbgIAAAALV1hfRU1JU1NJT04AAAAAD3ZhbGlkUG9vbExhYmVscwkABEwAAAACBQAAABNwb29sTGFiZWxXeEVtaXNzaW9uBQAAAANuaWwBAAAAFmtleUFsbG93ZWRMcFNjcmlwdEhhc2gAAAAAAgAAABclc19fYWxsb3dlZExwU2NyaXB0SGFzaAEAAAAca2V5QWxsb3dlZExwU3RhYmxlU2NyaXB0SGFzaAAAAAACAAAAHSVzX19hbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoAQAAACFrZXlBbGxvd2VkTHBTdGFibGVBZGRvblNjcmlwdEhhc2gAAAAAAgAAACIlc19fYWxsb3dlZExwU3RhYmxlQWRkb25TY3JpcHRIYXNoAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAIAAAARJXNfX2ZhY3RvcnlDb25maWcBAAAAD2tleUxwVG9rZW5zTGlzdAAAAAACAAAAECVzX19scFRva2Vuc0xpc3QBAAAAEWtleVBvb2xTY3JpcHRIYXNoAAAAAAIAAAAWJXMlc19fcG9vbF9fc2NyaXB0SGFzaAEAAAANa2V5TWF0Y2hlclB1YgAAAAACAAAAGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQEAAAAYa2V5TGVnYWN5RmFjdG9yeUNvbnRyYWN0AAAAAAIAAAAZJXNfX2xlZ2FjeUZhY3RvcnlDb250cmFjdAEAAAAOa2V5TGVnYWN5UG9vbHMAAAAAAgAAAA8lc19fbGVnYWN5UG9vbHMBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAAAAD2tleUFkbWluUHViS2V5cwAAAAACAAAAECVzX19hZG1pblB1YktleXMBAAAAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAAAAAAgAAABclc19fYXNzZXRzU3RvcmVDb250cmFjdAEAAAAZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAAAAAACAAAAGiVzX192b3RpbmdFbWlzc2lvbkNvbnRyYWN0AQAAAA5rZXlQcmljZUFzc2V0cwAAAAAJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAAtwcmljZUFzc2V0cwUAAAADbmlsBQAAAANTRVABAAAAEGtleVByaWNlRGVjaW1hbHMAAAAAAgAAABElc19fcHJpY2VEZWNpbWFscwEAAAATa2V5QWxsUG9vbHNTaHV0ZG93bgAAAAACAAAADCVzX19zaHV0ZG93bgEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAACAAAAFyVzX19uZXh0SW50ZXJuYWxBc3NldElkAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABAAAAC3Bvb2xBZGRyZXNzCQABLAAAAAICAAAAEiVzJXNfX3Bvb2xXZWlnaHRfXwUAAAALcG9vbEFkZHJlc3MBAAAAFmtleVBvb2xUb1dlaWdodEhpc3RvcnkAAAACAAAAC3Bvb2xBZGRyZXNzAAAAA251bQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAASJXMlc19fcG9vbFdlaWdodF9fBQAAAAtwb29sQWRkcmVzcwIAAAACX18JAAGkAAAAAQUAAAADbnVtAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQAAABFpbnRlcm5hbEJhc2VBc3NldAkAASwAAAACAgAAACglcyVzJWRfX21hcHBpbmdzX19pbnRlcm5hbDJiYXNlQXNzZXRJZF9fCQABpAAAAAEFAAAAEWludGVybmFsQmFzZUFzc2V0AQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAABNhbW91bnRBc3NldEludGVybmFsAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAglZCVkJXNfXwUAAAATYW1vdW50QXNzZXRJbnRlcm5hbAIAAAACX18FAAAAEnByaWNlQXNzZXRJbnRlcm5hbAIAAAAIX19jb25maWcBAAAAIWtleVBvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZAAAAAEAAAAOYXNzZXRzSW50ZXJuYWwEAAAACyR0MDM1ODczNjQ5BQAAAA5hc3NldHNJbnRlcm5hbAQAAAATYW1vdW50QXNzZXRJbnRlcm5hbAgFAAAACyR0MDM1ODczNjQ5AAAAAl8xBAAAABJwcmljZUFzc2V0SW50ZXJuYWwIBQAAAAskdDAzNTg3MzY0OQAAAAJfMgkABLkAAAACCQAETAAAAAICAAAABiVkJWQlcwkABEwAAAACCQABpAAAAAEFAAAAE2Ftb3VudEFzc2V0SW50ZXJuYWwJAARMAAAAAgkAAaQAAAABBQAAABJwcmljZUFzc2V0SW50ZXJuYWwJAARMAAAAAgIAAAAab25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQFAAAAA25pbAUAAAADU0VQAQAAACVrZXlBbGxQb29sc09uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkAAAAAAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAAGm9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkBQAAAANuaWwFAAAAA1NFUAEAAAAda2V5TWFwcGluZ0xwQXNzZXRUb1Bvb2xBc3NldHMAAAABAAAACmxwQXNzZXRTdHIJAAEsAAAAAgkAASwAAAACAgAAAAglcyVzJXNfXwUAAAAKbHBBc3NldFN0cgIAAAAYX19tYXBwaW5nc19fbHBBc3NldDJQb29sAQAAAB1rZXlNYXBwaW5nUG9vbEFzc2V0c1RvTHBhc3NldAAAAAIAAAAYaW50ZXJuYWxBbW91bnRBc3NldElkU3RyAAAAF2ludGVybmFsUHJpY2VBc3NldElkU3RyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACiVkJWQlcyVzX18FAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgIAAAACX18FAAAAF2ludGVybmFsUHJpY2VBc3NldElkU3RyAgAAAB5fX21hcHBpbmdzX19Qb29sQXNzZXRzMkxwQXNzZXQBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQAAABNwb29sQ29udHJhY3RBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MCAAAAI19fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJQb29sQXNzZXRzAQAAAClrZXlNYXBwaW5nUG9vbEFzc2V0c1RvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAIAAAAYaW50ZXJuYWxBbW91bnRBc3NldElkU3RyAAAAF2ludGVybmFsUHJpY2VBc3NldElkU3RyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACiVkJWQlcyVzX18JAAGkAAAAAQUAAAAYaW50ZXJuYWxBbW91bnRBc3NldElkU3RyAgAAAAJfXwkAAaQAAAABBQAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgIAAAAjX19tYXBwaW5nc19fcG9vbEFzc2V0czJQb29sQ29udHJhY3QBAAAAH2tleU1hcHBpbmdQb29sQ29udHJhY3RUb0xQQXNzZXQAAAABAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAAAglcyVzJXNfXwUAAAATcG9vbENvbnRyYWN0QWRkcmVzcwIAAAAgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAAAAKmtleU1hcHBpbmdQb29sTFBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEAAAAKbHBBc3NldFN0cgkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAAApscEFzc2V0U3RyAgAAACBfX21hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAEAAAANa2V5V3hFbWlzc2lvbgAAAAIAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFCVzJXMlc19fd3hFbWlzc2lvbl9fBQAAAA1hbW91bnRBc3NldElkAgAAAAJfXwUAAAAMcHJpY2VBc3NldElkAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQEAAAAQZ2V0Qm9vbGVhbk9yRmFpbAAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5CQABLAAAAAICAAAAFU5vIGRhdGEgZm9yIHRoaXMua2V5PQUAAAADa2V5AQAAAAxnZXRJbnRPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQAAAAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAAAAAAAAAAABAAAAABlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwAAAAAAAAAAACAAAAABRJZHhGYWN0b3J5Q2ZnSWRvRGFwcAAAAAAAAAAAAwAAAAAVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwAAAAAAAAAAAEAAAAABlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwAAAAAAAAAAAFAAAAABVJZHhGYWN0b3J5Q2ZnUmVzdERhcHAAAAAAAAAAAAYAAAAAGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAAAAAAAAAAAAcAAAAAFElkeEZhY3RvcnlDZmdEYW9EYXBwAAAAAAAAAAAIAAAAABpJZHhGYWN0b3J5Q2ZnTWFya2V0aW5nRGFwcAAAAAAAAAAACQAAAAAaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAAAAAAAAAAAAoAAAAAFklkeEZhY3RvcnlDZmdCaXJkc0RhcHAAAAAAAAAAAAsBAAAAGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwAQAAABhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAEAAAAXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAQAAABlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwAQAAAA5nZXRQcmljZUFzc2V0cwAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAADmtleVByaWNlQXNzZXRzAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwAwkAAAAAAAACCQABMQAAAAEFAAAAAXMAAAAAAAAAAAAFAAAAA25pbAkABLUAAAACBQAAAAFzBQAAAANTRVAFAAAAA25pbAEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAAAAABVwZXJtaXNzaW9uRGVuaWVkRXJyb3IJAAACAAAAAQIAAAARUGVybWlzc2lvbiBkZW5pZWQBAAAACG11c3RUaGlzAAAAAQAAAAFpAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGBQAAABVwZXJtaXNzaW9uRGVuaWVkRXJyb3IBAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAAVcGVybWlzc2lvbkRlbmllZEVycm9yAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CQEAAAAIbXVzdFRoaXMAAAABBQAAAAFpCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAABBkYXRhRmFjdG9yeUNmZ1YzAAAACwAAAA5zdGFraW5nQWRkcmVzcwAAAA9ib29zdGluZ0FkZHJlc3MAAAALaWRvQ29udHJhY3QAAAAMdGVhbUNvbnRyYWN0AAAAEGVtaXNzaW9uQ29udHJhY3QAAAAMcmVzdENvbnRyYWN0AAAAEHNsaXBwYWdlQ29udHJhY3QAAAALZGFvQ29udHJhY3QAAAARbWFya2V0aW5nQ29udHJhY3QAAAASZ3d4UmV3YXJkc0NvbnRyYWN0AAAADWJpcmRzQ29udHJhY3QJAAS5AAAAAgkABEwAAAACAgAAABYlcyVzJXMlcyVzJXMlcyVzJXMlcyVzCQAETAAAAAIFAAAADnN0YWtpbmdBZGRyZXNzCQAETAAAAAIFAAAAD2Jvb3N0aW5nQWRkcmVzcwkABEwAAAACBQAAAAtpZG9Db250cmFjdAkABEwAAAACBQAAAAx0ZWFtQ29udHJhY3QJAARMAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkABEwAAAACBQAAAAxyZXN0Q29udHJhY3QJAARMAAAAAgUAAAAQc2xpcHBhZ2VDb250cmFjdAkABEwAAAACBQAAAAtkYW9Db250cmFjdAkABEwAAAACBQAAABFtYXJrZXRpbmdDb250cmFjdAkABEwAAAACBQAAABJnd3hSZXdhcmRzQ29udHJhY3QJAARMAAAAAgUAAAANYmlyZHNDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAADmRhdGFGYWN0b3J5Q2ZnAAAABwAAAA5zdGFraW5nQWRkcmVzcwAAAA9ib29zdGluZ0FkZHJlc3MAAAALaWRvQ29udHJhY3QAAAAMdGVhbUNvbnRyYWN0AAAAEGVtaXNzaW9uQ29udHJhY3QAAAAMcmVzdENvbnRyYWN0AAAAEHNsaXBwYWdlQ29udHJhY3QJAAS5AAAAAgkABEwAAAACAgAAAAwlcyVzJXMlcyVzJXMJAARMAAAAAgUAAAAOc3Rha2luZ0FkZHJlc3MJAARMAAAAAgUAAAAPYm9vc3RpbmdBZGRyZXNzCQAETAAAAAIFAAAAC2lkb0NvbnRyYWN0CQAETAAAAAIFAAAADHRlYW1Db250cmFjdAkABEwAAAACBQAAABBlbWlzc2lvbkNvbnRyYWN0CQAETAAAAAIFAAAADHJlc3RDb250cmFjdAkABEwAAAACBQAAABBzbGlwcGFnZUNvbnRyYWN0BQAAAANuaWwFAAAAA1NFUAEAAAALZGF0YVBvb2xDZmcAAAALAAAAC3Bvb2xBZGRyZXNzAAAACnBvb2xTdGF0dXMAAAAJbHBBc3NldElkAAAADmFtb3VudEFzc2V0U3RyAAAADXByaWNlQXNzZXRTdHIAAAATYW1vdW50QXNzZXREZWNpbWFscwAAABJwcmljZUFzc2V0RGVjaW1hbHMAAAAVYW1vdW50QXNzZXRJbnRlcm5hbElkAAAAFHByaWNlQXNzZXRJbnRlcm5hbElkAAAAD2xwQXNzZXREZWNpbWFscwAAAAhwb29sVHlwZQkABLkAAAACCQAETAAAAAICAAAAFiVzJWQlcyVzJXMlZCVkJWQlZCVkJXMJAARMAAAAAgUAAAALcG9vbEFkZHJlc3MJAARMAAAAAgUAAAAKcG9vbFN0YXR1cwkABEwAAAACBQAAAAlscEFzc2V0SWQJAARMAAAAAgUAAAAOYW1vdW50QXNzZXRTdHIJAARMAAAAAgUAAAANcHJpY2VBc3NldFN0cgkABEwAAAACCQABpAAAAAEFAAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMJAARMAAAAAgkAAaQAAAABBQAAABJwcmljZUFzc2V0RGVjaW1hbHMJAARMAAAAAgkAAaQAAAABBQAAABVhbW91bnRBc3NldEludGVybmFsSWQJAARMAAAAAgkAAaQAAAABBQAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAkABEwAAAACCQABpAAAAAEFAAAAD2xwQXNzZXREZWNpbWFscwkABEwAAAACBQAAAAhwb29sVHlwZQUAAAADbmlsBQAAAANTRVABAAAAFWRhdGFNYXBwaW5nUG9vbEFzc2V0cwAAAAIAAAAWaW50ZXJuYWxBbW91bnRBc3NldFN0cgAAABVpbnRlcm5hbFByaWNlQXNzZXRTdHIJAAS5AAAAAgkABEwAAAACAgAAAAQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAWaW50ZXJuYWxBbW91bnRBc3NldFN0cgkABEwAAAACCQABpAAAAAEFAAAAFWludGVybmFsUHJpY2VBc3NldFN0cgUAAAADbmlsBQAAAANTRVABAAAADWdldFBvb2xDb25maWcAAAABAAAAC3Bvb2xBZGRyZXNzBAAAAApwb29sQXNzZXRzCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAAtwb29sQWRkcmVzcwUAAAADU0VQBAAAABNhbW91bnRBc3NldEludGVybmFsCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAEEAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAAZEAAAACBQAAAApwb29sQXNzZXRzAAAAAAAAAAACCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAANa2V5UG9vbENvbmZpZwAAAAIFAAAAE2Ftb3VudEFzc2V0SW50ZXJuYWwFAAAAEnByaWNlQXNzZXRJbnRlcm5hbAUAAAADU0VQAQAAABpnZXRJbnRlcm5hbEFzc2V0SWRPckNyZWF0ZQAAAAIAAAAKYXNzZXRJZFN0cgAAAAtpbmNyZW1lbnRvcgQAAAAPaW50ZXJuYWxBc3NldElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAKYXNzZXRJZFN0cgAAAAAAAAAAAAQAAAAYY3VycmVudEluZGV4T2ZJbnRlcm5hbElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAAAAAAAAAAAAAQAAAAGcmVzdWx0AwkAAAAAAAACBQAAAA9pbnRlcm5hbEFzc2V0SWQAAAAAAAAAAAAEAAAAEm5ld0ludGVybmFsQXNzZXRJZAkAAGQAAAACBQAAABhjdXJyZW50SW5kZXhPZkludGVybmFsSWQFAAAAC2luY3JlbWVudG9yCQAFFQAAAAMFAAAAEm5ld0ludGVybmFsQXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleU5leHRJbnRlcm5hbEFzc2V0SWQAAAAABQAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAKYXNzZXRJZFN0cgUAAAASbmV3SW50ZXJuYWxBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAASbmV3SW50ZXJuYWxBc3NldElkBQAAAAphc3NldElkU3RyBQAAAANuaWwGCQAFFQAAAAMFAAAAD2ludGVybmFsQXNzZXRJZAUAAAADbmlsBwUAAAAGcmVzdWx0AQAAAAltdXN0QWRtaW4AAAABAAAAAWkEAAAACGFkbWluUEtzCQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAAD2tleUFkbWluUHViS2V5cwAAAAAFAAAABUVNUFRZBQAAAANTRVADCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAIYWRtaW5QS3MJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgQAAAAJaXNNYW5hZ2VyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAlpc01hbmFnZXIFAAAACWlzTWFuYWdlcgYJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAFAAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAgAAAAPc3Rha2luZ0NvbnRyYWN0AAAAEGJvb3N0aW5nQ29udHJhY3QAAAALaWRvQ29udHJhY3QAAAAMdGVhbUNvbnRyYWN0AAAAEGVtaXNzaW9uQ29udHJhY3QAAAAMcmVzdENvbnRyYWN0AAAAEHNscGlwYWdlQ29udHJhY3QAAAANcHJpY2VEZWNpbWFscwQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAAJAQAAAA5kYXRhRmFjdG9yeUNmZwAAAAcFAAAAD3N0YWtpbmdDb250cmFjdAUAAAAQYm9vc3RpbmdDb250cmFjdAUAAAALaWRvQ29udHJhY3QFAAAADHRlYW1Db250cmFjdAUAAAAQZW1pc3Npb25Db250cmFjdAUAAAAMcmVzdENvbnRyYWN0BQAAABBzbHBpcGFnZUNvbnRyYWN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAQa2V5UHJpY2VEZWNpbWFscwAAAAAFAAAADXByaWNlRGVjaW1hbHMFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANY29uc3RydWN0b3JWMgAAAAEAAAAQbWF0aGNoZXJQdWI1OFN0cgQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAKbWF0aGNlclB1YgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABBQAAABBtYXRoY2hlclB1YjU4U3RyAwkAAAAAAAACBQAAAAptYXRoY2VyUHViBQAAAAptYXRoY2VyUHViCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlNYXRjaGVyUHViAAAAAAUAAAAQbWF0aGNoZXJQdWI1OFN0cgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANY29uc3RydWN0b3JWMwAAAAQAAAALZGFvQ29udHJhY3QAAAARbWFya2V0aW5nQ29udHJhY3QAAAASZ3d4UmV3YXJkc0NvbnRyYWN0AAAADWJpcmRzQ29udHJhY3QEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAACmZhY3RvcnlDZmcJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAUAAAADU0VQCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAkBAAAAEGRhdGFGYWN0b3J5Q2ZnVjMAAAALCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAAAgkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAADCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAQJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAABQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAAGCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAcFAAAAC2Rhb0NvbnRyYWN0BQAAABFtYXJrZXRpbmdDb250cmFjdAUAAAASZ3d4UmV3YXJkc0NvbnRyYWN0BQAAAA1iaXJkc0NvbnRyYWN0BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWNvbnN0cnVjdG9yVjQAAAACAAAAFWxlZ2FjeUZhY3RvcnlDb250cmFjdAAAAAtsZWdhY3lQb29scwQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAYa2V5TGVnYWN5RmFjdG9yeUNvbnRyYWN0AAAAAAUAAAAVbGVnYWN5RmFjdG9yeUNvbnRyYWN0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA5rZXlMZWdhY3lQb29scwAAAAAJAAS5AAAAAgUAAAALbGVnYWN5UG9vbHMFAAAAA1NFUAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1jb25zdHJ1Y3RvclY1AAAAAQAAABNhc3NldHNTdG9yZUNvbnRyYWN0BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0AAAAAAUAAAATYXNzZXRzU3RvcmVDb250cmFjdAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1jb25zdHJ1Y3RvclY2AAAAAgAAABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0AAAAC3ByaWNlQXNzZXRzBAAAAAVjaGVrcwkABEwAAAACCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpCQAETAAAAAIDCQEAAAACIT0AAAACCQAEJgAAAAEFAAAAFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFAAAABHVuaXQGAgAAAChpbnZhbGlkIHZvdGluZyBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzBQAAAANuaWwDCQAAAAAAAAIFAAAABWNoZWtzBQAAAAVjaGVrcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAAAAAAFAAAAFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleVByaWNlQXNzZXRzAAAAAAkABLkAAAACBQAAAAtwcmljZUFzc2V0cwUAAAADU0VQBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAJc2V0QWRtaW5zAAAAAQAAAAxhZG1pblB1YktleXMEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleUFkbWluUHViS2V5cwAAAAAJAAS5AAAAAgUAAAAMYWRtaW5QdWJLZXlzBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAPYWN0aXZhdGVOZXdQb29sAAAACAAAAAtwb29sQWRkcmVzcwAAAA5hbW91bnRBc3NldFN0cgAAAA1wcmljZUFzc2V0U3RyAAAAC2xwQXNzZXROYW1lAAAADGxwQXNzZXREZXNjcgAAAApwb29sV2VpZ2h0AAAACHBvb2xUeXBlAAAABGxvZ28EAAAAC2NoZWNrQ2FsbGVyCQEAAAAJbXVzdEFkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQiAAAAAQkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADVBvb2wgYWRkcmVzcyAFAAAAC3Bvb2xBZGRyZXNzAgAAABQgYWxyZWFkeSByZWdpc3RlcmVkLgQAAAAXaW50ZXJuYWxBbW91bnRBc3NldERhdGEJAQAAABpnZXRJbnRlcm5hbEFzc2V0SWRPckNyZWF0ZQAAAAIFAAAADmFtb3VudEFzc2V0U3RyAAAAAAAAAAABBAAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMQQAAAAWaW50ZXJuYWxQcmljZUFzc2V0RGF0YQkBAAAAGmdldEludGVybmFsQXNzZXRJZE9yQ3JlYXRlAAAAAgUAAAANcHJpY2VBc3NldFN0cgMIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMwAAAAAAAAAAAgAAAAAAAAAAAQQAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQIBQAAABZpbnRlcm5hbFByaWNlQXNzZXREYXRhAAAAAl8xBAAAABVwb29sQWNjb3VudFNjcmlwdEhhc2gJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA/EAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAtwb29sQWRkcmVzcwkAASwAAAACAgAAAClObyBzY3JpcHQgaGFzIGJlZW4gZm91bmQgb24gcG9vbCBhY2NvdW50IAUAAAALcG9vbEFkZHJlc3MEAAAAHGV0aGFsb25Qb29sQWNjb3VudFNjcmlwdEhhc2gJAQAAABFAZXh0ck5hdGl2ZSgxMDU3KQAAAAEJAQAAABFrZXlQb29sU2NyaXB0SGFzaAAAAAAEAAAACnBvb2xDb25maWcJAAQdAAAAAgUAAAAEdGhpcwkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAMJAQAAAAlpc0RlZmluZWQAAAABBQAAAApwb29sQ29uZmlnCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAFUG9vbCAFAAAADmFtb3VudEFzc2V0U3RyAgAAAAEvBQAAAA1wcmljZUFzc2V0U3RyAgAAABwgaGFzIGFscmVhZHkgYmVlbiBhY3RpdmF0ZWQuBAAAAA9wb29sQ29uZmlnVmFsdWUJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAQAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMDCQAAAAAAAAIFAAAADmFtb3VudEFzc2V0U3RyAgAAAAVXQVZFUwUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQkAAlkAAAABBQAAAA5hbW91bnRBc3NldFN0cgAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAATcHJpY2VBc3NldHNEZWNpbWFscwMJAAAAAAAAAgUAAAANcHJpY2VBc3NldFN0cgIAAAAFV0FWRVMFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAANcHJpY2VBc3NldFN0cgAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAASbHBBc3NldElzc3VlQWN0aW9uCQAEQgAAAAUFAAAAC2xwQXNzZXROYW1lBQAAAAxscEFzc2V0RGVzY3IAAAAAAAAAAAEAAAAAAAAAAAgGBAAAAAlscEFzc2V0SWQJAAQ4AAAAAQUAAAASbHBBc3NldElzc3VlQWN0aW9uBAAAAAxscEFzc2V0SWRTdHIJAAJYAAAAAQUAAAAJbHBBc3NldElkBAAAABhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQJAAP8AAAABAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAALcG9vbEFkZHJlc3MCAAAACGFjdGl2YXRlCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyCQAETAAAAAIFAAAADXByaWNlQXNzZXRTdHIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAMJAQAAAAIhPQAAAAIFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAIAAAAHc3VjY2VzcwkAAAIAAAABAgAAACNQb29sIGluaXRpYWxpc2F0aW9uIGVycm9yIGhhcHBlbmVkLgQAAAATYXNzZXRzU3RvcmVDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0AAAAAAQAAAAYY3JlYXRlT3JVcGRhdGVMcEFzc2V0SW52CQAD/AAAAAQFAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QCAAAADmNyZWF0ZU9yVXBkYXRlCQAETAAAAAIFAAAADGxwQXNzZXRJZFN0cgkABEwAAAACBQAAAAtscEFzc2V0TmFtZQkABEwAAAACBwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAGGNyZWF0ZU9yVXBkYXRlTHBBc3NldEludgUAAAAYY3JlYXRlT3JVcGRhdGVMcEFzc2V0SW52BAAAABJhZGRQb29sc0xwTGFiZWxJbnYJAAP8AAAABAUAAAATYXNzZXRzU3RvcmVDb250cmFjdAIAAAAIYWRkTGFiZWwJAARMAAAAAgUAAAAMbHBBc3NldElkU3RyCQAETAAAAAIFAAAADGxhYmVsUG9vbHNMcAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEmFkZFBvb2xzTHBMYWJlbEludgUAAAASYWRkUG9vbHNMcExhYmVsSW52BAAAAApzZXRMb2dvSW52CQAD/AAAAAQFAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QCAAAAB3NldExvZ28JAARMAAAAAgUAAAAMbHBBc3NldElkU3RyCQAETAAAAAIFAAAABGxvZ28FAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAApzZXRMb2dvSW52BQAAAApzZXRMb2dvSW52BAAAABBhZGRBc3NldHNMaW5rSW52CQAD/AAAAAQFAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QCAAAADWFkZEFzc2V0c0xpbmsJAARMAAAAAgUAAAAOYW1vdW50QXNzZXRTdHIJAARMAAAAAgUAAAANcHJpY2VBc3NldFN0cgkABEwAAAACBQAAAAxscEFzc2V0SWRTdHIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABBhZGRBc3NldHNMaW5rSW52BQAAABBhZGRBc3NldHNMaW5rSW52BAAAABtpbmNyZWFzZUFzc2V0UG9vbHNOdW1iZXJJbnYJAAP8AAAABAUAAAATYXNzZXRzU3RvcmVDb250cmFjdAIAAAAYaW5jcmVhc2VBc3NldFBvb2xzTnVtYmVyCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAbaW5jcmVhc2VBc3NldFBvb2xzTnVtYmVySW52BQAAABtpbmNyZWFzZUFzc2V0UG9vbHNOdW1iZXJJbnYJAAUUAAAAAgkABE4AAAACCQAETgAAAAIIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMggFAAAAFmludGVybmFsUHJpY2VBc3NldERhdGEAAAACXzIJAARMAAAAAgUAAAASbHBBc3NldElzc3VlQWN0aW9uCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAJbHBBc3NldElkAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQJAAGkAAAAAQUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAQAAAAtkYXRhUG9vbENmZwAAAAsFAAAAC3Bvb2xBZGRyZXNzCQABpAAAAAEFAAAAClBvb2xBY3RpdmUFAAAADGxwQXNzZXRJZFN0cgUAAAAOYW1vdW50QXNzZXRTdHIFAAAADXByaWNlQXNzZXRTdHIFAAAAFGFtb3VudEFzc2V0c0RlY2ltYWxzBQAAABNwcmljZUFzc2V0c0RlY2ltYWxzBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQFAAAAFGludGVybmFsUHJpY2VBc3NldElkBQAAABFkZWNpbWFsc011bHRQcmljZQUAAAAIcG9vbFR5cGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAHWtleU1hcHBpbmdMcEFzc2V0VG9Qb29sQXNzZXRzAAAAAQUAAAAMbHBBc3NldElkU3RyCQEAAAAVZGF0YU1hcHBpbmdQb29sQXNzZXRzAAAAAgUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAda2V5TWFwcGluZ1Bvb2xBc3NldHNUb0xwYXNzZXQAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkAASwAAAACAgAAAAQlc19fBQAAAAxscEFzc2V0SWRTdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MJAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAClrZXlNYXBwaW5nUG9vbEFzc2V0c1RvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAIFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQFAAAAC3Bvb2xBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAACprZXlNYXBwaW5nUG9vbExQQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MAAAABBQAAAAxscEFzc2V0SWRTdHIFAAAAC3Bvb2xBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB9rZXlNYXBwaW5nUG9vbENvbnRyYWN0VG9MUEFzc2V0AAAAAQUAAAALcG9vbEFkZHJlc3MFAAAADGxwQXNzZXRJZFN0cgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVBvb2xUb1dlaWdodAAAAAEFAAAAC3Bvb2xBZGRyZXNzBQAAAApwb29sV2VpZ2h0BQAAAANuaWwFAAAADGxwQXNzZXRJZFN0cgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKbWFuYWdlUG9vbAAAAAIAAAALcG9vbEFkZHJlc3MAAAAJbmV3U3RhdHVzBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAApwb29sQ29uZmlnCQEAAAANZ2V0UG9vbENvbmZpZwAAAAEFAAAAC3Bvb2xBZGRyZXNzBAAAAApwb29sU3RhdHVzCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADWlkeFBvb2xTdGF0dXMEAAAADGxwQXNzZXRJZFN0cgkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAABBpZHhQb29sTFBBc3NldElkBAAAAA5hbW91bnRBc3NldFN0cgkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAAA1pZHhBbXRBc3NldElkBAAAAA1wcmljZUFzc2V0U3RyCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAD2lkeFByaWNlQXNzZXRJZAQAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAAA5pZHhBbXRBc3NldERjbQQAAAATcHJpY2VBc3NldHNEZWNpbWFscwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAEGlkeFByaWNlQXNzZXREY20EAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADmlkeElBbXRBc3NldElkBAAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAEGlkeElQcmljZUFzc2V0SWQEAAAACmxwQXNzZXREY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAAA1pZHhMUEFzc2V0RGNtBAAAAAhwb29sVHlwZQkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAAAtpZHhQb29sVHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5UG9vbENvbmZpZwAAAAIJAAGkAAAAAQUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQABpAAAAAEFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQEAAAALZGF0YVBvb2xDZmcAAAALBQAAAAtwb29sQWRkcmVzcwkAAaQAAAABBQAAAAluZXdTdGF0dXMFAAAADGxwQXNzZXRJZFN0cgUAAAAOYW1vdW50QXNzZXRTdHIFAAAADXByaWNlQXNzZXRTdHIFAAAAFGFtb3VudEFzc2V0c0RlY2ltYWxzBQAAABNwcmljZUFzc2V0c0RlY2ltYWxzBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQFAAAAFGludGVybmFsUHJpY2VBc3NldElkBQAAAApscEFzc2V0RGNtBQAAAAhwb29sVHlwZQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAARlbWl0AAAAAQAAAAxhbW91bnRUb0VtaXQEAAAABmNhbGxlcggFAAAAAWkAAAAGY2FsbGVyBAAAAAxvcmlnaW5DYWxsZXIIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgQAAAAQbHBBc3NldFJlcXVlc3RlZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAQAAAB9rZXlNYXBwaW5nUG9vbENvbnRyYWN0VG9MUEFzc2V0AAAAAQkABCUAAAABBQAAAAZjYWxsZXICAAAAHUludmFsaWQgTFAgYWRkcmVzcyBjYWxsZWQgbWUuBAAAAAdscEFzc2V0CQACWQAAAAEFAAAAEGxwQXNzZXRSZXF1ZXN0ZWQEAAAAC2xlZ2FjeVBvb2xzCQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAADmtleUxlZ2FjeVBvb2xzAAAAAAUAAAAFRU1QVFkFAAAAA1NFUAQAAAAVbGVnYWN5RmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkBAAAAGGtleUxlZ2FjeUZhY3RvcnlDb250cmFjdAAAAAACAAAAKExlZ2FjeSBmYWN0b3J5IGNvbnRyYWN0IGRvZXMgbm90IGV4aXN0cy4DCQAAZwAAAAIAAAAAAAAAAAAFAAAADGFtb3VudFRvRW1pdAUAAAADbmlsAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAAC2xlZ2FjeVBvb2xzCQAEJQAAAAEFAAAABmNhbGxlcgkABRQAAAACBQAAAANuaWwFAAAAFWxlZ2FjeUZhY3RvcnlDb250cmFjdAkABRQAAAACCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAHbHBBc3NldAUAAAAMYW1vdW50VG9FbWl0BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvRW1pdAUAAAAHbHBBc3NldAUAAAADbmlsAgAAAAdzdWNjZXNzAAAAAWkBAAAABGJ1cm4AAAABAAAADGFtb3VudFRvQnVybgQAAAAGY2FsbGVyCAUAAAABaQAAAAZjYWxsZXIEAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAAAdwYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA1wYXltZW50QW1vdW50CQEAAAAFdmFsdWUAAAABCAUAAAAHcGF5bWVudAAAAAZhbW91bnQEAAAAD2luQW1vdW50QXNzZXRJZAkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBAAAABpscEFzc2V0UmVxdWVzdGVkRm9yQnVybmluZwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAQAAAB9rZXlNYXBwaW5nUG9vbENvbnRyYWN0VG9MUEFzc2V0AAAAAQkABCUAAAABBQAAAAZjYWxsZXICAAAAHUludmFsaWQgTFAgYWRkcmVzcyBjYWxsZWQgbWUuAwkBAAAAAiE9AAAAAgUAAAAPaW5BbW91bnRBc3NldElkBQAAABpscEFzc2V0UmVxdWVzdGVkRm9yQnVybmluZwkAAAIAAAABAgAAABVJbnZhbGlkIGFzc2V0IHBhc3NlZC4DCQEAAAACIT0AAAACBQAAAAxhbW91bnRUb0J1cm4FAAAADXBheW1lbnRBbW91bnQJAAACAAAAAQIAAAAWSW52YWxpZCBhbW91bnQgcGFzc2VkLgQAAAAHbHBBc3NldAkAAlkAAAABBQAAABpscEFzc2V0UmVxdWVzdGVkRm9yQnVybmluZwkABRQAAAACCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAHbHBBc3NldAUAAAAMYW1vdW50VG9CdXJuBQAAAANuaWwCAAAAB3N1Y2Nlc3MAAAABaQEAAAAMbW9kaWZ5V2VpZ2h0AAAAAgAAAAlscEFzc2V0SWQAAAAFc2hhcmUEAAAAC2NoZWNrQ2FsbGVyAwkAAAAAAAACCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QAAAAAAgAAAAAGCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAqa2V5TWFwcGluZ1Bvb2xMUEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAQUAAAAJbHBBc3NldElkBAAAAA1wb29sV2VpZ2h0S2V5CQEAAAAPa2V5UG9vbFRvV2VpZ2h0AAAAAQUAAAATcG9vbENvbnRyYWN0QWRkcmVzcwQAAAAMZ3d4V2VpZ2h0S2V5CQEAAAAPa2V5UG9vbFRvV2VpZ2h0AAAAAQUAAAAOR1dYdmlydHVhbFBPT0wEAAAACWd3eFdlaWdodAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABBQAAAAxnd3hXZWlnaHRLZXkAAAAAAAAAAAAEAAAACnBvb2xXZWlnaHQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQUAAAANcG9vbFdlaWdodEtleQAAAAAAAAAAAAQAAAANcG9vbFdlaWdodE5ldwUAAAAFc2hhcmUEAAAACmZhY3RvcnlDZmcJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAUAAAADU0VQBAAAAA9zdGFraW5nQ29udHJhY3QJAQAAABdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcEAAAAEW9uTW9kaWZ5V2VpZ2h0SW52CQAD/AAAAAQFAAAAD3N0YWtpbmdDb250cmFjdAIAAAAOb25Nb2RpZnlXZWlnaHQJAARMAAAAAgUAAAAJbHBBc3NldElkCQAETAAAAAIFAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABFvbk1vZGlmeVdlaWdodEludgUAAAARb25Nb2RpZnlXZWlnaHRJbnYEAAAAFWd3eFZpcnR1YWxQb29sQWN0aW9ucwMJAAAAAAAAAgUAAAAJZ3d4V2VpZ2h0AAAAAAAAAAAABQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGd3eFdlaWdodEtleQAAAAAAAAAAAAUAAAADbmlsBAAAABRwb29sV2VpZ2h0SGlzdG9yeUtleQkBAAAAFmtleVBvb2xUb1dlaWdodEhpc3RvcnkAAAACBQAAABNwb29sQ29udHJhY3RBZGRyZXNzAAAAAAAAAAAABAAAABdwb29sV2VpZ2h0SGlzdG9yeU9yVW5pdAkABB8AAAABBQAAABRwb29sV2VpZ2h0SGlzdG9yeUtleQQAAAAYcG9vbFdlaWdodEhpc3RvcnlBY3Rpb25zAwkAAAAAAAACBQAAABdwb29sV2VpZ2h0SGlzdG9yeU9yVW5pdAUAAAAEdW5pdAUAAAADbmlsCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAFHBvb2xXZWlnaHRIaXN0b3J5S2V5BQAAAANuaWwJAAROAAAAAgkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1wb29sV2VpZ2h0S2V5BQAAAA1wb29sV2VpZ2h0TmV3BQAAAANuaWwFAAAAFWd3eFZpcnR1YWxQb29sQWN0aW9ucwUAAAAYcG9vbFdlaWdodEhpc3RvcnlBY3Rpb25zCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANbW9kaWZ5V2VpZ2h0cwAAAAQAAAAOYnRjUG9vbEFkZHJlc3MAAAAOZXRoUG9vbEFkZHJlc3MAAAARZXRoQnRjUG9vbEFkZHJlc3MAAAATdXNkY1VzZHRQb29sQWRkcmVzcwQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAPZXRoQnRjV2VpZ2h0TmV3CQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAOUE9PTFdFSUdIVE1VTFQAAAAAAAAAAGQEAAAAEXVzZGNVc2R0V2VpZ2h0TmV3CQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAOUE9PTFdFSUdIVE1VTFQAAAAAAAAAAGQEAAAAD3dlaWdodERlY3JlbWVudAkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAUFAAAADlBPT0xXRUlHSFRNVUxUAAAAAAAAAABkBAAAAApmYWN0b3J5Q2ZnCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAAFAAAAA1NFUAQAAAALc3Rha2luZ0RhcHAJAQAAABdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcEAAAADWd3eFJld2FyZERhcHAJAQAAABlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsAAAAAQUAAAAKZmFjdG9yeUNmZwQAAAAMYnRjV2VpZ2h0S0VZCQEAAAAPa2V5UG9vbFRvV2VpZ2h0AAAAAQUAAAAOYnRjUG9vbEFkZHJlc3MEAAAADGV0aFdlaWdodEtFWQkBAAAAD2tleVBvb2xUb1dlaWdodAAAAAEFAAAADmV0aFBvb2xBZGRyZXNzBAAAAA9ldGhCdGNXZWlnaHRLRVkJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAABFldGhCdGNQb29sQWRkcmVzcwQAAAARdXNkY1VzZHRXZWlnaHRLRVkJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAABN1c2RjVXNkdFBvb2xBZGRyZXNzBAAAAAlidGNXZWlnaHQJAQAAAAxnZXRJbnRPckZhaWwAAAABBQAAAAxidGNXZWlnaHRLRVkEAAAACWV0aFdlaWdodAkBAAAADGdldEludE9yRmFpbAAAAAEFAAAADGV0aFdlaWdodEtFWQQAAAAMYnRjV2VpZ2h0TmV3CQAAZQAAAAIFAAAACWJ0Y1dlaWdodAUAAAAPd2VpZ2h0RGVjcmVtZW50BAAAAAxldGhXZWlnaHROZXcJAABlAAAAAgUAAAAJZXRoV2VpZ2h0BQAAAA93ZWlnaHREZWNyZW1lbnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAADGJ0Y1dlaWdodE5ldwkAAAIAAAABCQABLAAAAAICAAAAFmludmFsaWQgYnRjV2VpZ2h0TmV3OiAJAAGkAAAAAQUAAAAMYnRjV2VpZ2h0TmV3AwkAAGcAAAACAAAAAAAAAAAABQAAAAxldGhXZWlnaHROZXcJAAACAAAAAQkAASwAAAACAgAAABZpbnZhbGlkIGV0aFdlaWdodE5ldzogCQABpAAAAAEFAAAADGV0aFdlaWdodE5ldwQAAAAPYnRjTHBBc3NldElkU3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAH2tleU1hcHBpbmdQb29sQ29udHJhY3RUb0xQQXNzZXQAAAABBQAAAA5idGNQb29sQWRkcmVzcwQAAAAPZXRoTHBBc3NldElkU3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAH2tleU1hcHBpbmdQb29sQ29udHJhY3RUb0xQQXNzZXQAAAABBQAAAA5ldGhQb29sQWRkcmVzcwQAAAASZXRoQnRjTHBBc3NldElkU3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAH2tleU1hcHBpbmdQb29sQ29udHJhY3RUb0xQQXNzZXQAAAABBQAAABFldGhCdGNQb29sQWRkcmVzcwQAAAAUdXNkY1VzZHRMcEFzc2V0SWRTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAfa2V5TWFwcGluZ1Bvb2xDb250cmFjdFRvTFBBc3NldAAAAAEFAAAAE3VzZGNVc2R0UG9vbEFkZHJlc3MEAAAAEW9uTW9kaWZ5V2VpZ2h0QnRjCQAD/AAAAAQFAAAAC3N0YWtpbmdEYXBwAgAAAA5vbk1vZGlmeVdlaWdodAkABEwAAAACBQAAAA9idGNMcEFzc2V0SWRTdHIJAARMAAAAAgUAAAAOYnRjUG9vbEFkZHJlc3MFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABFvbk1vZGlmeVdlaWdodEJ0YwUAAAARb25Nb2RpZnlXZWlnaHRCdGMEAAAAEW9uTW9kaWZ5V2VpZ2h0RXRoCQAD/AAAAAQFAAAAC3N0YWtpbmdEYXBwAgAAAA5vbk1vZGlmeVdlaWdodAkABEwAAAACBQAAAA9ldGhMcEFzc2V0SWRTdHIJAARMAAAAAgUAAAAOZXRoUG9vbEFkZHJlc3MFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABFvbk1vZGlmeVdlaWdodEV0aAUAAAARb25Nb2RpZnlXZWlnaHRFdGgEAAAAFG9uTW9kaWZ5V2VpZ2h0RXRoQnRjCQAD/AAAAAQFAAAAC3N0YWtpbmdEYXBwAgAAAA5vbk1vZGlmeVdlaWdodAkABEwAAAACBQAAABJldGhCdGNMcEFzc2V0SWRTdHIJAARMAAAAAgUAAAARZXRoQnRjUG9vbEFkZHJlc3MFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABRvbk1vZGlmeVdlaWdodEV0aEJ0YwUAAAAUb25Nb2RpZnlXZWlnaHRFdGhCdGMEAAAAFm9uTW9kaWZ5V2VpZ2h0VXNkY1VzZHQJAAP8AAAABAUAAAALc3Rha2luZ0RhcHACAAAADm9uTW9kaWZ5V2VpZ2h0CQAETAAAAAIFAAAAFHVzZGNVc2R0THBBc3NldElkU3RyCQAETAAAAAIFAAAAE3VzZGNVc2R0UG9vbEFkZHJlc3MFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABZvbk1vZGlmeVdlaWdodFVzZGNVc2R0BQAAABZvbk1vZGlmeVdlaWdodFVzZGNVc2R0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxidGNXZWlnaHRLRVkFAAAADGJ0Y1dlaWdodE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMZXRoV2VpZ2h0S0VZBQAAAAxldGhXZWlnaHROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2V0aEJ0Y1dlaWdodEtFWQUAAAAPZXRoQnRjV2VpZ2h0TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABF1c2RjVXNkdFdlaWdodEtFWQUAAAARdXNkY1VzZHRXZWlnaHROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlQb29sVG9XZWlnaHRIaXN0b3J5AAAAAgUAAAAOYnRjUG9vbEFkZHJlc3MAAAAAAAAAAAAFAAAACWJ0Y1dlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleVBvb2xUb1dlaWdodEhpc3RvcnkAAAACBQAAAA5ldGhQb29sQWRkcmVzcwAAAAAAAAAAAAUAAAAJZXRoV2VpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5UG9vbFRvV2VpZ2h0SGlzdG9yeQAAAAIFAAAAEWV0aEJ0Y1Bvb2xBZGRyZXNzAAAAAAAAAAAABQAAAA9ldGhCdGNXZWlnaHROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlQb29sVG9XZWlnaHRIaXN0b3J5AAAAAgUAAAATdXNkY1VzZHRQb29sQWRkcmVzcwAAAAAAAAAAAAUAAAARdXNkY1VzZHRXZWlnaHROZXcFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAGGNoZWNrV3hFbWlzc2lvblBvb2xMYWJlbAAAAAIAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQEAAAACWhhdmVMYWJlbAQAAAAHJG1hdGNoMAkABCAAAAABCQEAAAANa2V5V3hFbWlzc2lvbgAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcJAAUUAAAAAgUAAAADbmlsBQAAAAloYXZlTGFiZWwAAAABaQEAAAAWc2V0V3hFbWlzc2lvblBvb2xMYWJlbAAAAAIAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQEAAAAC2NoZWNrQ2FsbGVyCQEAAAAJbXVzdEFkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAFFAAAAAIJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAA1rZXlXeEVtaXNzaW9uAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBgUAAAADbmlsBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABlkZWxldGVXeEVtaXNzaW9uUG9vbExhYmVsAAAAAgAAAA1hbW91bnRBc3NldElkAAAADHByaWNlQXNzZXRJZAQAAAALY2hlY2tDYWxsZXIDCQEAAAAIbXVzdFRoaXMAAAABBQAAAAFpBgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABRQAAAACCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA1rZXlXeEVtaXNzaW9uAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEm9uVmVyaWZpY2F0aW9uTG9zcwAAAAEAAAAHYXNzZXRJZAQAAAALY2hlY2tDYWxsZXIDCQAAAAAAAAIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAAAAAACAAAAAAYJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAALcHJpY2VBc3NldHMJAQAAAA5nZXRQcmljZUFzc2V0cwAAAAAEAAAAFGNoZWNrUHJpY2VBc3NldHNTaXplAwkAAGYAAAACCQABkAAAAAEFAAAAC3ByaWNlQXNzZXRzAAAAAAAAAAAABgkAAAIAAAABAgAAABRpbnZhbGlkIHByaWNlIGFzc2V0cwMJAAAAAAAAAgUAAAAUY2hlY2tQcmljZUFzc2V0c1NpemUFAAAAFGNoZWNrUHJpY2VBc3NldHNTaXplCgEAAAACY2IAAAACAAAAA2FjYwAAAApwcmljZUFzc2V0BAAAAAFyCQAD/AAAAAQFAAAABHRoaXMCAAAAGWRlbGV0ZVd4RW1pc3Npb25Qb29sTGFiZWwJAARMAAAAAgUAAAAHYXNzZXRJZAkABEwAAAACBQAAAApwcmljZUFzc2V0BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAABcgUAAAABcgUAAAAEdW5pdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAAAAB2FjdGlvbnMKAAAAAAIkbAUAAAALcHJpY2VBc3NldHMKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAAR1bml0CgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAACY2IAAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAUkZjBfMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAATTGlzdCBzaXplIGV4Y2VlZHMgMwkBAAAABSRmMF8yAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMDCQAAAAAAAAIFAAAAB2FjdGlvbnMFAAAAB2FjdGlvbnMJAAUUAAAAAgUAAAADbmlsBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkAAAABAAAAC3Bvb2xBZGRyZXNzBAAAAApwb29sQ29uZmlnCQEAAAANZ2V0UG9vbENvbmZpZwAAAAEFAAAAC3Bvb2xBZGRyZXNzBAAAAA5hc3NldHNJbnRlcm5hbAkABRQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAOaWR4SUFtdEFzc2V0SWQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAABBpZHhJUHJpY2VBc3NldElkBAAAAB5wb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQgAAAAAQkBAAAAIWtleVBvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZAAAAAEFAAAADmFzc2V0c0ludGVybmFsBwQAAAAiYWxsUG9vbHNPbnRUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCAAAAABCQEAAAAla2V5QWxsUG9vbHNPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZAAAAAAHCQAFFAAAAAIFAAAAA25pbAMFAAAAImFsbFBvb2xzT250VG9rZW5PcGVyYXRpb25zRGlzYWJsZWQGBQAAAB5wb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5pc6vPA==", "chainId": 87, "height": 3355995, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: APaAr2ANj86pNMUwgmQULiBqDYSXZMenUDNjVZMhJeFL Next: EcHkYwiSPGYLGmjK3hYRaj4j5CYHBfdMqxLyKpwXGkn1 Diff:
OldNewDifferences
128128
129129
130130 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = (((("%d%d%s__" + amountAssetInternal) + "__") + priceAssetInternal) + "__config")
131+
132+
133+func keyPoolOneTokenOperationsDisabled (assetsInternal) = {
134+ let $t035873649 = assetsInternal
135+ let amountAssetInternal = $t035873649._1
136+ let priceAssetInternal = $t035873649._2
137+ makeString(["%d%d%s", toString(amountAssetInternal), toString(priceAssetInternal), "oneTokenOperationsDisabled"], SEP)
138+ }
139+
140+
141+func keyAllPoolsOneTokenOperationsDisabled () = makeString(["%s", "oneTokenOperationsDisabled"], SEP)
131142
132143
133144 func keyMappingLpAssetToPoolAssets (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2Pool")
700711 }
701712
702713
714+
715+@Callable(i)
716+func isPoolOneTokenOperationsDisabledREADONLY (poolAddress) = {
717+ let poolConfig = getPoolConfig(poolAddress)
718+ let assetsInternal = $Tuple2(parseIntValue(poolConfig[idxIAmtAssetId]), parseIntValue(poolConfig[idxIPriceAssetId]))
719+ let poolOneTokenOperationsDisabled = valueOrElse(getBoolean(keyPoolOneTokenOperationsDisabled(assetsInternal)), false)
720+ let allPoolsOntTokenOperationsDisabled = valueOrElse(getBoolean(keyAllPoolsOneTokenOperationsDisabled()), false)
721+ $Tuple2(nil, if (allPoolsOntTokenOperationsDisabled)
722+ then true
723+ else poolOneTokenOperationsDisabled)
724+ }
725+
726+
703727 @Verifier(tx)
704728 func verify () = {
705729 let targetPublicKey = match managerPublicKeyOrUnit() {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SCALE8 = 8
55
66 let MULT8 = 100000000
77
88 let SCALE18 = 18
99
1010 let MULT18 = toBigInt(1000000000000000000)
1111
1212 let POOLWEIGHTMULT = MULT8
1313
1414 let GWXvirtualPOOL = "GWXvirtualPOOL"
1515
1616 let labelPoolsLp = "POOLS_LP"
1717
1818 let decimalsMultPrice = ((100 * 1000) * 1000)
1919
2020 let SEP = "__"
2121
2222 let EMPTY = ""
2323
2424 let PoolActive = 1
2525
2626 let PoolPutDisabled = 2
2727
2828 let PoolMatcherDisabled = 3
2929
3030 let PoolShutdown = 4
3131
3232 let idxInternalAssetId = 1
3333
3434 let idxResutActions = 2
3535
3636 let idxIfAssetIdCalculationPerformed = 3
3737
3838 let idxPoolAddress = 1
3939
4040 let idxPoolStatus = 2
4141
4242 let idxPoolLPAssetId = 3
4343
4444 let idxAmtAssetId = 4
4545
4646 let idxPriceAssetId = 5
4747
4848 let idxAmtAssetDcm = 6
4949
5050 let idxPriceAssetDcm = 7
5151
5252 let idxIAmtAssetId = 8
5353
5454 let idxIPriceAssetId = 9
5555
5656 let idxLPAssetDcm = 10
5757
5858 let idxPoolType = 11
5959
6060 let poolLabelWxEmission = "WX_EMISSION"
6161
6262 let validPoolLabels = [poolLabelWxEmission]
6363
6464 func keyAllowedLpScriptHash () = "%s__allowedLpScriptHash"
6565
6666
6767 func keyAllowedLpStableScriptHash () = "%s__allowedLpStableScriptHash"
6868
6969
7070 func keyAllowedLpStableAddonScriptHash () = "%s__allowedLpStableAddonScriptHash"
7171
7272
7373 func keyFactoryConfig () = "%s__factoryConfig"
7474
7575
7676 func keyLpTokensList () = "%s__lpTokensList"
7777
7878
7979 func keyPoolScriptHash () = "%s%s__pool__scriptHash"
8080
8181
8282 func keyMatcherPub () = "%s%s__matcher__publicKey"
8383
8484
8585 func keyLegacyFactoryContract () = "%s__legacyFactoryContract"
8686
8787
8888 func keyLegacyPools () = "%s__legacyPools"
8989
9090
9191 func keyManagerPublicKey () = "%s__managerPublicKey"
9292
9393
9494 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
9595
9696
9797 func keyAdminPubKeys () = "%s__adminPubKeys"
9898
9999
100100 func keyAssetsStoreContract () = "%s__assetsStoreContract"
101101
102102
103103 func keyVotingEmissionContract () = "%s__votingEmissionContract"
104104
105105
106106 func keyPriceAssets () = makeString(["%s", "priceAssets"], SEP)
107107
108108
109109 func keyPriceDecimals () = "%s__priceDecimals"
110110
111111
112112 func keyAllPoolsShutdown () = "%s__shutdown"
113113
114114
115115 func keyNextInternalAssetId () = "%s__nextInternalAssetId"
116116
117117
118118 func keyPoolToWeight (poolAddress) = ("%s%s__poolWeight__" + poolAddress)
119119
120120
121121 func keyPoolToWeightHistory (poolAddress,num) = ((("%s%s__poolWeight__" + poolAddress) + "__") + toString(num))
122122
123123
124124 func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
125125
126126
127127 func keyMappingsBaseAsset2internalId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2internalId__" + baseAssetStr)
128128
129129
130130 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = (((("%d%d%s__" + amountAssetInternal) + "__") + priceAssetInternal) + "__config")
131+
132+
133+func keyPoolOneTokenOperationsDisabled (assetsInternal) = {
134+ let $t035873649 = assetsInternal
135+ let amountAssetInternal = $t035873649._1
136+ let priceAssetInternal = $t035873649._2
137+ makeString(["%d%d%s", toString(amountAssetInternal), toString(priceAssetInternal), "oneTokenOperationsDisabled"], SEP)
138+ }
139+
140+
141+func keyAllPoolsOneTokenOperationsDisabled () = makeString(["%s", "oneTokenOperationsDisabled"], SEP)
131142
132143
133144 func keyMappingLpAssetToPoolAssets (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2Pool")
134145
135146
136147 func keyMappingPoolAssetsToLpasset (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + internalAmountAssetIdStr) + "__") + internalPriceAssetIdStr) + "__mappings__PoolAssets2LpAsset")
137148
138149
139150 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2PoolAssets")
140151
141152
142153 func keyMappingPoolAssetsToPoolContractAddress (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + toString(internalAmountAssetIdStr)) + "__") + toString(internalPriceAssetIdStr)) + "__mappings__poolAssets2PoolContract")
143154
144155
145156 func keyMappingPoolContractToLPAsset (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2LpAsset")
146157
147158
148159 func keyMappingPoolLPAssetToPoolContractAddress (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2PoolContract")
149160
150161
151162 func keyWxEmission (amountAssetId,priceAssetId) = ((("%s%s%s__wxEmission__" + amountAssetId) + "__") + priceAssetId)
152163
153164
154165 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
155166
156167
157168 func getBooleanOrFail (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
158169
159170
160171 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
161172
162173
163174 let IdxFactoryCfgStakingDapp = 1
164175
165176 let IdxFactoryCfgBoostingDapp = 2
166177
167178 let IdxFactoryCfgIdoDapp = 3
168179
169180 let IdxFactoryCfgTeamDapp = 4
170181
171182 let IdxFactoryCfgEmissionDapp = 5
172183
173184 let IdxFactoryCfgRestDapp = 6
174185
175186 let IdxFactoryCfgSlippageDapp = 7
176187
177188 let IdxFactoryCfgDaoDapp = 8
178189
179190 let IdxFactoryCfgMarketingDapp = 9
180191
181192 let IdxFactoryCfgGwxRewardDapp = 10
182193
183194 let IdxFactoryCfgBirdsDapp = 11
184195
185196 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
186197
187198
188199 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
189200
190201
191202 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
192203
193204
194205 func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
195206
196207
197208 func getPriceAssets () = match getString(keyPriceAssets()) {
198209 case s: String =>
199210 if ((size(s) == 0))
200211 then nil
201212 else split(s, SEP)
202213 case _ =>
203214 nil
204215 }
205216
206217
207218 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
208219 case s: String =>
209220 fromBase58String(s)
210221 case _: Unit =>
211222 unit
212223 case _ =>
213224 throw("Match error")
214225 }
215226
216227
217228 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
218229 case s: String =>
219230 fromBase58String(s)
220231 case _: Unit =>
221232 unit
222233 case _ =>
223234 throw("Match error")
224235 }
225236
226237
227238 let permissionDeniedError = throw("Permission denied")
228239
229240 func mustThis (i) = if ((i.caller == this))
230241 then true
231242 else permissionDeniedError
232243
233244
234245 func mustManager (i) = match managerPublicKeyOrUnit() {
235246 case pk: ByteVector =>
236247 if ((i.callerPublicKey == pk))
237248 then true
238249 else permissionDeniedError
239250 case _: Unit =>
240251 mustThis(i)
241252 case _ =>
242253 throw("Match error")
243254 }
244255
245256
246257 func dataFactoryCfgV3 (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract,daoContract,marketingContract,gwxRewardsContract,birdsContract) = makeString(["%s%s%s%s%s%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract, daoContract, marketingContract, gwxRewardsContract, birdsContract], SEP)
247258
248259
249260 func dataFactoryCfg (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract) = makeString(["%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract], SEP)
250261
251262
252263 func dataPoolCfg (poolAddress,poolStatus,lpAssetId,amountAssetStr,priceAssetStr,amountAssetDecimals,priceAssetDecimals,amountAssetInternalId,priceAssetInternalId,lpAssetDecimals,poolType) = makeString(["%s%d%s%s%s%d%d%d%d%d%s", poolAddress, poolStatus, lpAssetId, amountAssetStr, priceAssetStr, toString(amountAssetDecimals), toString(priceAssetDecimals), toString(amountAssetInternalId), toString(priceAssetInternalId), toString(lpAssetDecimals), poolType], SEP)
253264
254265
255266 func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
256267
257268
258269 func getPoolConfig (poolAddress) = {
259270 let poolAssets = split(getStringOrFail(keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
260271 let amountAssetInternal = poolAssets[1]
261272 let priceAssetInternal = poolAssets[2]
262273 split(getStringOrFail(keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
263274 }
264275
265276
266277 func getInternalAssetIdOrCreate (assetIdStr,incrementor) = {
267278 let internalAssetId = valueOrElse(getInteger(this, keyMappingsBaseAsset2internalId(assetIdStr)), 0)
268279 let currentIndexOfInternalId = valueOrElse(getInteger(this, keyNextInternalAssetId()), 0)
269280 let result = if ((internalAssetId == 0))
270281 then {
271282 let newInternalAssetId = (currentIndexOfInternalId + incrementor)
272283 $Tuple3(newInternalAssetId, [IntegerEntry(keyNextInternalAssetId(), newInternalAssetId), IntegerEntry(keyMappingsBaseAsset2internalId(assetIdStr), newInternalAssetId), StringEntry(keyMappingsInternal2baseAssetId(newInternalAssetId), assetIdStr)], true)
273284 }
274285 else $Tuple3(internalAssetId, nil, false)
275286 result
276287 }
277288
278289
279290 func mustAdmin (i) = {
280291 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
281292 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
282293 then true
283294 else {
284295 let isManager = mustManager(i)
285296 if ((isManager == isManager))
286297 then true
287298 else throw("Strict value is not equal to itself.")
288299 }
289300 }
290301
291302
292303 @Callable(i)
293304 func constructor (stakingContract,boostingContract,idoContract,teamContract,emissionContract,restContract,slpipageContract,priceDecimals) = {
294305 let checkCaller = mustManager(i)
295306 if ((checkCaller == checkCaller))
296307 then [StringEntry(keyFactoryConfig(), dataFactoryCfg(stakingContract, boostingContract, idoContract, teamContract, emissionContract, restContract, slpipageContract)), IntegerEntry(keyPriceDecimals(), priceDecimals)]
297308 else throw("Strict value is not equal to itself.")
298309 }
299310
300311
301312
302313 @Callable(i)
303314 func constructorV2 (mathcherPub58Str) = {
304315 let checkCaller = mustManager(i)
305316 if ((checkCaller == checkCaller))
306317 then {
307318 let mathcerPub = addressFromPublicKey(fromBase58String(mathcherPub58Str))
308319 if ((mathcerPub == mathcerPub))
309320 then [StringEntry(keyMatcherPub(), mathcherPub58Str)]
310321 else throw("Strict value is not equal to itself.")
311322 }
312323 else throw("Strict value is not equal to itself.")
313324 }
314325
315326
316327
317328 @Callable(i)
318329 func constructorV3 (daoContract,marketingContract,gwxRewardsContract,birdsContract) = {
319330 let checkCaller = mustManager(i)
320331 if ((checkCaller == checkCaller))
321332 then {
322333 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
323334 [StringEntry(keyFactoryConfig(), dataFactoryCfgV3(factoryCfg[1], factoryCfg[2], factoryCfg[3], factoryCfg[4], factoryCfg[5], factoryCfg[6], factoryCfg[7], daoContract, marketingContract, gwxRewardsContract, birdsContract))]
324335 }
325336 else throw("Strict value is not equal to itself.")
326337 }
327338
328339
329340
330341 @Callable(i)
331342 func constructorV4 (legacyFactoryContract,legacyPools) = {
332343 let checkCaller = mustManager(i)
333344 if ((checkCaller == checkCaller))
334345 then [StringEntry(keyLegacyFactoryContract(), legacyFactoryContract), StringEntry(keyLegacyPools(), makeString(legacyPools, SEP))]
335346 else throw("Strict value is not equal to itself.")
336347 }
337348
338349
339350
340351 @Callable(i)
341352 func constructorV5 (assetsStoreContract) = {
342353 let checkCaller = mustManager(i)
343354 if ((checkCaller == checkCaller))
344355 then [StringEntry(keyAssetsStoreContract(), assetsStoreContract)]
345356 else throw("Strict value is not equal to itself.")
346357 }
347358
348359
349360
350361 @Callable(i)
351362 func constructorV6 (votingEmissionContract,priceAssets) = {
352363 let cheks = [mustManager(i), if ((addressFromString(votingEmissionContract) != unit))
353364 then true
354365 else "invalid voting emission contract address"]
355366 if ((cheks == cheks))
356367 then [StringEntry(keyVotingEmissionContract(), votingEmissionContract), StringEntry(keyPriceAssets(), makeString(priceAssets, SEP))]
357368 else throw("Strict value is not equal to itself.")
358369 }
359370
360371
361372
362373 @Callable(i)
363374 func setManager (pendingManagerPublicKey) = {
364375 let checkCaller = mustManager(i)
365376 if ((checkCaller == checkCaller))
366377 then {
367378 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
368379 if ((checkManagerPublicKey == checkManagerPublicKey))
369380 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
370381 else throw("Strict value is not equal to itself.")
371382 }
372383 else throw("Strict value is not equal to itself.")
373384 }
374385
375386
376387
377388 @Callable(i)
378389 func confirmManager () = {
379390 let pm = pendingManagerPublicKeyOrUnit()
380391 let hasPM = if (isDefined(pm))
381392 then true
382393 else throw("No pending manager")
383394 if ((hasPM == hasPM))
384395 then {
385396 let checkPM = if ((i.callerPublicKey == value(pm)))
386397 then true
387398 else throw("You are not pending manager")
388399 if ((checkPM == checkPM))
389400 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
390401 else throw("Strict value is not equal to itself.")
391402 }
392403 else throw("Strict value is not equal to itself.")
393404 }
394405
395406
396407
397408 @Callable(i)
398409 func setAdmins (adminPubKeys) = {
399410 let checkCaller = mustManager(i)
400411 if ((checkCaller == checkCaller))
401412 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
402413 else throw("Strict value is not equal to itself.")
403414 }
404415
405416
406417
407418 @Callable(i)
408419 func activateNewPool (poolAddress,amountAssetStr,priceAssetStr,lpAssetName,lpAssetDescr,poolWeight,poolType,logo) = {
409420 let checkCaller = mustAdmin(i)
410421 if ((checkCaller == checkCaller))
411422 then if (isDefined(getString(keyMappingPoolContractAddressToPoolAssets(poolAddress))))
412423 then throw((("Pool address " + poolAddress) + " already registered."))
413424 else {
414425 let internalAmountAssetData = getInternalAssetIdOrCreate(amountAssetStr, 1)
415426 let internalAmountAssetId = internalAmountAssetData._1
416427 let internalPriceAssetData = getInternalAssetIdOrCreate(priceAssetStr, if (internalAmountAssetData._3)
417428 then 2
418429 else 1)
419430 let internalPriceAssetId = internalPriceAssetData._1
420431 let poolAccountScriptHash = valueOrErrorMessage(scriptHash(addressFromStringValue(poolAddress)), ("No script has been found on pool account " + poolAddress))
421432 let ethalonPoolAccountScriptHash = getBinaryValue(keyPoolScriptHash())
422433 let poolConfig = getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)))
423434 if (isDefined(poolConfig))
424435 then throw((((("Pool " + amountAssetStr) + "/") + priceAssetStr) + " has already been activated."))
425436 else {
426437 let poolConfigValue = value(getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId))))
427438 let amountAssetsDecimals = if ((amountAssetStr == "WAVES"))
428439 then decimalsMultPrice
429440 else pow(10, 0, value(assetInfo(fromBase58String(amountAssetStr))).decimals, 0, 0, DOWN)
430441 let priceAssetsDecimals = if ((priceAssetStr == "WAVES"))
431442 then decimalsMultPrice
432443 else pow(10, 0, value(assetInfo(fromBase58String(priceAssetStr))).decimals, 0, 0, DOWN)
433444 let lpAssetIssueAction = Issue(lpAssetName, lpAssetDescr, 1, 8, true)
434445 let lpAssetId = calculateAssetId(lpAssetIssueAction)
435446 let lpAssetIdStr = toBase58String(lpAssetId)
436447 let poolActivateInvokeResult = invoke(addressFromStringValue(poolAddress), "activate", [amountAssetStr, priceAssetStr], nil)
437448 if ((poolActivateInvokeResult == poolActivateInvokeResult))
438449 then if ((poolActivateInvokeResult != "success"))
439450 then throw("Pool initialisation error happened.")
440451 else {
441452 let assetsStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract()))
442453 let createOrUpdateLpAssetInv = invoke(assetsStoreContract, "createOrUpdate", [lpAssetIdStr, lpAssetName, false], nil)
443454 if ((createOrUpdateLpAssetInv == createOrUpdateLpAssetInv))
444455 then {
445456 let addPoolsLpLabelInv = invoke(assetsStoreContract, "addLabel", [lpAssetIdStr, labelPoolsLp], nil)
446457 if ((addPoolsLpLabelInv == addPoolsLpLabelInv))
447458 then {
448459 let setLogoInv = invoke(assetsStoreContract, "setLogo", [lpAssetIdStr, logo], nil)
449460 if ((setLogoInv == setLogoInv))
450461 then {
451462 let addAssetsLinkInv = invoke(assetsStoreContract, "addAssetsLink", [amountAssetStr, priceAssetStr, lpAssetIdStr], nil)
452463 if ((addAssetsLinkInv == addAssetsLinkInv))
453464 then {
454465 let increaseAssetPoolsNumberInv = invoke(assetsStoreContract, "increaseAssetPoolsNumber", [amountAssetStr], nil)
455466 if ((increaseAssetPoolsNumberInv == increaseAssetPoolsNumberInv))
456467 then $Tuple2(((internalAmountAssetData._2 ++ internalPriceAssetData._2) ++ [lpAssetIssueAction, Burn(lpAssetId, 1), StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(PoolActive), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, decimalsMultPrice, poolType)), StringEntry(keyMappingLpAssetToPoolAssets(lpAssetIdStr), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToLpasset(toString(internalAmountAssetId), toString(internalPriceAssetId)), ("%s__" + lpAssetIdStr)), StringEntry(keyMappingPoolContractAddressToPoolAssets(poolAddress), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToPoolContractAddress(internalAmountAssetId, internalPriceAssetId), poolAddress), StringEntry(keyMappingPoolLPAssetToPoolContractAddress(lpAssetIdStr), poolAddress), StringEntry(keyMappingPoolContractToLPAsset(poolAddress), lpAssetIdStr), IntegerEntry(keyPoolToWeight(poolAddress), poolWeight)]), lpAssetIdStr)
457468 else throw("Strict value is not equal to itself.")
458469 }
459470 else throw("Strict value is not equal to itself.")
460471 }
461472 else throw("Strict value is not equal to itself.")
462473 }
463474 else throw("Strict value is not equal to itself.")
464475 }
465476 else throw("Strict value is not equal to itself.")
466477 }
467478 else throw("Strict value is not equal to itself.")
468479 }
469480 }
470481 else throw("Strict value is not equal to itself.")
471482 }
472483
473484
474485
475486 @Callable(i)
476487 func managePool (poolAddress,newStatus) = {
477488 let checkCaller = mustManager(i)
478489 if ((checkCaller == checkCaller))
479490 then {
480491 let poolConfig = getPoolConfig(poolAddress)
481492 let poolStatus = poolConfig[idxPoolStatus]
482493 let lpAssetIdStr = poolConfig[idxPoolLPAssetId]
483494 let amountAssetStr = poolConfig[idxAmtAssetId]
484495 let priceAssetStr = poolConfig[idxPriceAssetId]
485496 let amountAssetsDecimals = parseIntValue(poolConfig[idxAmtAssetDcm])
486497 let priceAssetsDecimals = parseIntValue(poolConfig[idxPriceAssetDcm])
487498 let internalAmountAssetId = parseIntValue(poolConfig[idxIAmtAssetId])
488499 let internalPriceAssetId = parseIntValue(poolConfig[idxIPriceAssetId])
489500 let lpAssetDcm = parseIntValue(poolConfig[idxLPAssetDcm])
490501 let poolType = poolConfig[idxPoolType]
491502 [StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(newStatus), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, lpAssetDcm, poolType))]
492503 }
493504 else throw("Strict value is not equal to itself.")
494505 }
495506
496507
497508
498509 @Callable(i)
499510 func emit (amountToEmit) = {
500511 let caller = i.caller
501512 let originCaller = i.originCaller
502513 let lpAssetRequested = valueOrErrorMessage(getString(keyMappingPoolContractToLPAsset(toString(caller))), "Invalid LP address called me.")
503514 let lpAsset = fromBase58String(lpAssetRequested)
504515 let legacyPools = split(valueOrElse(getString(keyLegacyPools()), EMPTY), SEP)
505516 let legacyFactoryContract = addressFromStringValue(valueOrErrorMessage(getString(keyLegacyFactoryContract()), "Legacy factory contract does not exists."))
506517 if ((0 >= amountToEmit))
507518 then nil
508519 else if (containsElement(legacyPools, toString(caller)))
509520 then $Tuple2(nil, legacyFactoryContract)
510521 else $Tuple2([Reissue(lpAsset, amountToEmit, true), ScriptTransfer(i.caller, amountToEmit, lpAsset)], "success")
511522 }
512523
513524
514525
515526 @Callable(i)
516527 func burn (amountToBurn) = {
517528 let caller = i.caller
518529 let originCaller = i.originCaller
519530 let payment = value(i.payments[0])
520531 let paymentAmount = value(payment.amount)
521532 let inAmountAssetId = toBase58String(value(payment.assetId))
522533 let lpAssetRequestedForBurning = valueOrErrorMessage(getString(keyMappingPoolContractToLPAsset(toString(caller))), "Invalid LP address called me.")
523534 if ((inAmountAssetId != lpAssetRequestedForBurning))
524535 then throw("Invalid asset passed.")
525536 else if ((amountToBurn != paymentAmount))
526537 then throw("Invalid amount passed.")
527538 else {
528539 let lpAsset = fromBase58String(lpAssetRequestedForBurning)
529540 $Tuple2([Burn(lpAsset, amountToBurn)], "success")
530541 }
531542 }
532543
533544
534545
535546 @Callable(i)
536547 func modifyWeight (lpAssetId,share) = {
537548 let checkCaller = if ((toBase58String(i.caller.bytes) == valueOrElse(getString(this, keyVotingEmissionContract()), "")))
538549 then true
539550 else mustManager(i)
540551 if ((checkCaller == checkCaller))
541552 then {
542553 let poolContractAddress = getStringOrFail(keyMappingPoolLPAssetToPoolContractAddress(lpAssetId))
543554 let poolWeightKey = keyPoolToWeight(poolContractAddress)
544555 let gwxWeightKey = keyPoolToWeight(GWXvirtualPOOL)
545556 let gwxWeight = valueOrElse(getInteger(gwxWeightKey), 0)
546557 let poolWeight = valueOrElse(getInteger(poolWeightKey), 0)
547558 let poolWeightNew = share
548559 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
549560 let stakingContract = getStakingAddressOrFail(factoryCfg)
550561 let onModifyWeightInv = invoke(stakingContract, "onModifyWeight", [lpAssetId, poolContractAddress], nil)
551562 if ((onModifyWeightInv == onModifyWeightInv))
552563 then {
553564 let gwxVirtualPoolActions = if ((gwxWeight == 0))
554565 then nil
555566 else [IntegerEntry(gwxWeightKey, 0)]
556567 let poolWeightHistoryKey = keyPoolToWeightHistory(poolContractAddress, 0)
557568 let poolWeightHistoryOrUnit = getInteger(poolWeightHistoryKey)
558569 let poolWeightHistoryActions = if ((poolWeightHistoryOrUnit == unit))
559570 then nil
560571 else [DeleteEntry(poolWeightHistoryKey)]
561572 (([IntegerEntry(poolWeightKey, poolWeightNew)] ++ gwxVirtualPoolActions) ++ poolWeightHistoryActions)
562573 }
563574 else throw("Strict value is not equal to itself.")
564575 }
565576 else throw("Strict value is not equal to itself.")
566577 }
567578
568579
569580
570581 @Callable(i)
571582 func modifyWeights (btcPoolAddress,ethPoolAddress,ethBtcPoolAddress,usdcUsdtPoolAddress) = {
572583 let checkCaller = mustManager(i)
573584 if ((checkCaller == checkCaller))
574585 then {
575586 let ethBtcWeightNew = ((5 * POOLWEIGHTMULT) / 100)
576587 let usdcUsdtWeightNew = ((5 * POOLWEIGHTMULT) / 100)
577588 let weightDecrement = ((5 * POOLWEIGHTMULT) / 100)
578589 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
579590 let stakingDapp = getStakingAddressOrFail(factoryCfg)
580591 let gwxRewardDapp = getGwxRewardAddressOrFail(factoryCfg)
581592 let btcWeightKEY = keyPoolToWeight(btcPoolAddress)
582593 let ethWeightKEY = keyPoolToWeight(ethPoolAddress)
583594 let ethBtcWeightKEY = keyPoolToWeight(ethBtcPoolAddress)
584595 let usdcUsdtWeightKEY = keyPoolToWeight(usdcUsdtPoolAddress)
585596 let btcWeight = getIntOrFail(btcWeightKEY)
586597 let ethWeight = getIntOrFail(ethWeightKEY)
587598 let btcWeightNew = (btcWeight - weightDecrement)
588599 let ethWeightNew = (ethWeight - weightDecrement)
589600 if ((0 >= btcWeightNew))
590601 then throw(("invalid btcWeightNew: " + toString(btcWeightNew)))
591602 else if ((0 >= ethWeightNew))
592603 then throw(("invalid ethWeightNew: " + toString(ethWeightNew)))
593604 else {
594605 let btcLpAssetIdStr = getStringOrFail(keyMappingPoolContractToLPAsset(btcPoolAddress))
595606 let ethLpAssetIdStr = getStringOrFail(keyMappingPoolContractToLPAsset(ethPoolAddress))
596607 let ethBtcLpAssetIdStr = getStringOrFail(keyMappingPoolContractToLPAsset(ethBtcPoolAddress))
597608 let usdcUsdtLpAssetIdStr = getStringOrFail(keyMappingPoolContractToLPAsset(usdcUsdtPoolAddress))
598609 let onModifyWeightBtc = invoke(stakingDapp, "onModifyWeight", [btcLpAssetIdStr, btcPoolAddress], nil)
599610 if ((onModifyWeightBtc == onModifyWeightBtc))
600611 then {
601612 let onModifyWeightEth = invoke(stakingDapp, "onModifyWeight", [ethLpAssetIdStr, ethPoolAddress], nil)
602613 if ((onModifyWeightEth == onModifyWeightEth))
603614 then {
604615 let onModifyWeightEthBtc = invoke(stakingDapp, "onModifyWeight", [ethBtcLpAssetIdStr, ethBtcPoolAddress], nil)
605616 if ((onModifyWeightEthBtc == onModifyWeightEthBtc))
606617 then {
607618 let onModifyWeightUsdcUsdt = invoke(stakingDapp, "onModifyWeight", [usdcUsdtLpAssetIdStr, usdcUsdtPoolAddress], nil)
608619 if ((onModifyWeightUsdcUsdt == onModifyWeightUsdcUsdt))
609620 then [IntegerEntry(btcWeightKEY, btcWeightNew), IntegerEntry(ethWeightKEY, ethWeightNew), IntegerEntry(ethBtcWeightKEY, ethBtcWeightNew), IntegerEntry(usdcUsdtWeightKEY, usdcUsdtWeightNew), IntegerEntry(keyPoolToWeightHistory(btcPoolAddress, 0), btcWeight), IntegerEntry(keyPoolToWeightHistory(ethPoolAddress, 0), ethWeight), IntegerEntry(keyPoolToWeightHistory(ethBtcPoolAddress, 0), ethBtcWeightNew), IntegerEntry(keyPoolToWeightHistory(usdcUsdtPoolAddress, 0), usdcUsdtWeightNew)]
610621 else throw("Strict value is not equal to itself.")
611622 }
612623 else throw("Strict value is not equal to itself.")
613624 }
614625 else throw("Strict value is not equal to itself.")
615626 }
616627 else throw("Strict value is not equal to itself.")
617628 }
618629 }
619630 else throw("Strict value is not equal to itself.")
620631 }
621632
622633
623634
624635 @Callable(i)
625636 func checkWxEmissionPoolLabel (amountAssetId,priceAssetId) = {
626637 let haveLabel = match getBoolean(keyWxEmission(amountAssetId, priceAssetId)) {
627638 case b: Boolean =>
628639 b
629640 case _ =>
630641 false
631642 }
632643 $Tuple2(nil, haveLabel)
633644 }
634645
635646
636647
637648 @Callable(i)
638649 func setWxEmissionPoolLabel (amountAssetId,priceAssetId) = {
639650 let checkCaller = mustAdmin(i)
640651 if ((checkCaller == checkCaller))
641652 then $Tuple2([BooleanEntry(keyWxEmission(amountAssetId, priceAssetId), true)], unit)
642653 else throw("Strict value is not equal to itself.")
643654 }
644655
645656
646657
647658 @Callable(i)
648659 func deleteWxEmissionPoolLabel (amountAssetId,priceAssetId) = {
649660 let checkCaller = if (mustThis(i))
650661 then true
651662 else mustAdmin(i)
652663 if ((checkCaller == checkCaller))
653664 then $Tuple2([DeleteEntry(keyWxEmission(amountAssetId, priceAssetId))], unit)
654665 else throw("Strict value is not equal to itself.")
655666 }
656667
657668
658669
659670 @Callable(i)
660671 func onVerificationLoss (assetId) = {
661672 let checkCaller = if ((toBase58String(i.caller.bytes) == valueOrElse(getString(this, keyAssetsStoreContract()), "")))
662673 then true
663674 else mustManager(i)
664675 if ((checkCaller == checkCaller))
665676 then {
666677 let priceAssets = getPriceAssets()
667678 let checkPriceAssetsSize = if ((size(priceAssets) > 0))
668679 then true
669680 else throw("invalid price assets")
670681 if ((checkPriceAssetsSize == checkPriceAssetsSize))
671682 then {
672683 func cb (acc,priceAsset) = {
673684 let r = invoke(this, "deleteWxEmissionPoolLabel", [assetId, priceAsset], nil)
674685 if ((r == r))
675686 then unit
676687 else throw("Strict value is not equal to itself.")
677688 }
678689
679690 let actions = {
680691 let $l = priceAssets
681692 let $s = size($l)
682693 let $acc0 = unit
683694 func $f0_1 ($a,$i) = if (($i >= $s))
684695 then $a
685696 else cb($a, $l[$i])
686697
687698 func $f0_2 ($a,$i) = if (($i >= $s))
688699 then $a
689700 else throw("List size exceeds 3")
690701
691702 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
692703 }
693704 if ((actions == actions))
694705 then $Tuple2(nil, unit)
695706 else throw("Strict value is not equal to itself.")
696707 }
697708 else throw("Strict value is not equal to itself.")
698709 }
699710 else throw("Strict value is not equal to itself.")
700711 }
701712
702713
714+
715+@Callable(i)
716+func isPoolOneTokenOperationsDisabledREADONLY (poolAddress) = {
717+ let poolConfig = getPoolConfig(poolAddress)
718+ let assetsInternal = $Tuple2(parseIntValue(poolConfig[idxIAmtAssetId]), parseIntValue(poolConfig[idxIPriceAssetId]))
719+ let poolOneTokenOperationsDisabled = valueOrElse(getBoolean(keyPoolOneTokenOperationsDisabled(assetsInternal)), false)
720+ let allPoolsOntTokenOperationsDisabled = valueOrElse(getBoolean(keyAllPoolsOneTokenOperationsDisabled()), false)
721+ $Tuple2(nil, if (allPoolsOntTokenOperationsDisabled)
722+ then true
723+ else poolOneTokenOperationsDisabled)
724+ }
725+
726+
703727 @Verifier(tx)
704728 func verify () = {
705729 let targetPublicKey = match managerPublicKeyOrUnit() {
706730 case pk: ByteVector =>
707731 pk
708732 case _: Unit =>
709733 tx.senderPublicKey
710734 case _ =>
711735 throw("Match error")
712736 }
713737 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
714738 }
715739

github/deemru/w8io/3ef1775 
90.76 ms