tx · 7PcvzfQ9UnNNZNHjvmxiZshdndexZF2Vt1CERk4o8Vq8

3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS:  -0.01400000 Waves

2020.10.30 16:34 [1243429] smart account 3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS > SELF 0.00000000 Waves

{ "type": 13, "id": "7PcvzfQ9UnNNZNHjvmxiZshdndexZF2Vt1CERk4o8Vq8", "fee": 1400000, "feeAssetId": null, "timestamp": 1604064929080, "version": 1, "sender": "3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS", "senderPublicKey": "Hxyif8HnnHh34SZ7PZewDcNUgrZfHNJsQvLNCcPbCW27", "proofs": [ "5mRQktYDaGUokHBYqGNnZkTdmyG46FwzYTbidFTsmWF97JjTPL6zRopgjs9yUMvktbV4M5BLdY9nDxEz2MWjN7cu" ], "script": "base64:AAIEAAAAAAAAADwIAhIKCggICAEIAQEICBIRCg8ICAEIAQgBAQEBAQEBAQESAwoBCBIDCgEIEgQKAggBEgQKAggIEgMKAQgAAABaAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAgAAAAlqc29uQXJyYXkAAAALc3BsaXRTeW1ib2wJAAS1AAAAAgUAAAAJanNvbkFycmF5BQAAAAtzcGxpdFN5bWJvbAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkCAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5BwAAAAAMa2V5QXNzZXRDb2RlAAAAAAAAAAABAAAAAAprZXlBc3NldElkAAAAAAAAAAACAAAAAA5rZXlBc3NldFN0YXR1cwAAAAAAAAAAAwAAAAAVa2V5QXNzZXRQcmljZURlY2ltYWxzAAAAAAAAAAAEAAAAABNrZXlBc3NldEJha2luZ0Fzc2V0AAAAAAAAAAAFAAAAABtrZXlPdmVyY29sbGF0ZXJhbFBlcmNlbnRhZ2UAAAAAAAAAAAYAAAAACmtleU1pblBvb2wAAAAAAAAAAAcAAAAAFWtleVByaWNlT3JhY2xlQWRkcmVzcwAAAAAAAAAACAAAAAAQa2V5TWluQnV5UGF5bWVudAAAAAAAAAAACQAAAAARa2V5TWluU2VsbFBheW1lbnQAAAAAAAAAAAoAAAAAEmtleUJ1eUxvY2tJbnRlcnZhbAAAAAAAAAAACwAAAAATa2V5U2VsbExvY2tJbnRlcnZhbAAAAAAAAAAADAAAAAAJa2V5QnV5RmVlAAAAAAAAAAANAAAAAAprZXlTZWxsRmVlAAAAAAAAAAAOAAAAABhrZXlQb29sUmVkZW1wdGlvblRpbWVvdXQAAAAAAAAAAA8AAAAAIWtleVdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAAAAAAAEAAAAAAOYWRtaW5QdWJsaWNLZXkCAAAALEcxRWJ1NUFNSGFUSkZFYlpOa1pRY0pGVVE5S2ZpWVV3dXB5TEc4NTdEY0ZyAAAAABpuZXV0cmlub0NvbnRyYWN0QWRkcmVzc0tleQIAAAArJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub0NvbnRyYWN0QWRkcmVzcwAAAAAZbmV1dHJpbm9TdGFraW5nQWRkcmVzc0tleQIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub1N0YWtpbmdBZGRyZXNzAAAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkCAAAALCVzJXNfX2NvbW1vbkNvbmZpZ19fbWluaW11bVBvb2xGdW5kaW5nQW1vdW50AAAAABBpc0luaXRpYWxpemVkS2V5AgAAAB8lcyVzX19jb21tb25Db25maWdfX2luaXRpYWxpemVkAAAAABRjdXJyZW50QXNzZXRJbmRleEtleQIAAAAvJXMlc19fY29tbW9uQ29uZmlnX19wcmVkZWZpbmVkQXNzZXRzQWN0aXZlSW5kZXgAAAAAFGFzc2V0c0FkZHJlc3NMaXN0S2V5AgAAACglcyVzX19jb21tb25Db25maWdfX3ByZWRlZmluZWRBc3NldHNMaXN0AAAAAA5kZWJ0VG9rZW5JZEtleQIAAAAfJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRJZAAAAAAZZGVidFRva2VuRXRhbG9uQmFsYW5jZUtleQIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRFdGFsb25CYWxhbmNlAAAAABVkZWZvU3Rha2luZ0FkZHJlc3NLZXkCAAAAJiVzJXNfX2NvbW1vbkNvbmZpZ19fZGVmb1N0YWtpbmdBZGRyZXNzAAAAABpkZWZvU3Rha2luZ1BhY2VtYWtlclB1YktleQIAAAArJXMlc19fY29tbW9uQ29uZmlnX19kZWZvU3Rha2luZ1BhY2VtYWtlclB1YgAAAAASbmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAAObnNidEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAADmRlZm9Bc3NldElkS2V5AgAAAA8lc19fZGVmb0Fzc2V0SWQAAAAAFXNldEFzc2V0U2NyaXB0VHhJZEtleQIAAAATJXNfX2Fzc2V0U2NyaXB0VHhJZAEAAAARZ2V0QXNzZXRDb25maWdLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAIX19jb25maWcBAAAAEGdldEFzc2V0UHJpY2VLZXkAAAABAAAACWFzc2V0Q29kZQkAASwAAAACAgAAABIlcyVzX19hc3NldFByaWNlX18FAAAACWFzc2V0Q29kZQEAAAAVZ2V0QXNzZXRJbml0SGVpZ2h0S2V5AAAAAQAAAAxhc3NldEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAxhc3NldEFkZHJlc3MCAAAADF9faW5pdEhlaWdodAEAAAAZZ2V0QXNzZXRBY3RpdmF0ZUhlaWdodEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAABBfX2FjdGl2YXRlSGVpZ2h0AQAAAB1nZXRBc3NldEN1cnJyZW50UG9vbEFtb3VudEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAA1fX2N1cnJlbnRQb29sAQAAABhnZXRBc3NldE1heFBvb2xBbW91bnRLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAJX19tYXhQb29sAQAAAA9nZXRBc3NldE1ldGFLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAGX19tZXRhAQAAABVnZXRBc3NldFBvb2xNYWtlcnNLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAMX19wb29sTWFrZXJzAQAAABhnZXRBc3NldEFkZHJlc3NCeUNvZGVLZXkAAAABAAAACWFzc2V0Q29kZQkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAACWFzc2V0Q29kZQIAAAAUX19hZGRyZXNzQnlBc3NldENvZGUBAAAAG2dldEFzc2V0QWRkcmVzc0J5QXNzZXRJZEtleQAAAAEAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAAB2Fzc2V0SWQCAAAAEl9fYWRkcmVzc0J5QXNzZXRJZAEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAQJXMlcyVzJXNfX3Bvb2xfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAAJfXwUAAAAQcG9vbE1ha2VyQWRkcmVzcwIAAAAIX19hbW91bnQBAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAECVzJXMlcyVzX19wb29sX18FAAAADGFzc2V0QWRkcmVzcwIAAAACX18FAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAAC19fbWF4QW1vdW50AQAAABtnZXRQb29sTWFrZXJMb2NrZWRBbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAECVzJXMlcyVzX19wb29sX18FAAAADGFzc2V0QWRkcmVzcwIAAAACX18FAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAADl9fbG9ja2VkQW1vdW50AQAAABtnZXRQb29sTWFrZXJVbmxvY2tIZWlnaHRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAECVzJXMlcyVzX19wb29sX18FAAAADGFzc2V0QWRkcmVzcwIAAAACX18FAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAADl9fdW5sb2NrSGVpZ2h0AQAAABNnZXRBc3NldENvbmZpZ0FycmF5AAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAEdGhpcwkBAAAAEWdldEFzc2V0Q29uZmlnS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAOTm8gREVGTyBBc3NldCAFAAAADGFzc2V0QWRkcmVzcwIAAAAOY29uZmlnIHByZXNlbnQCAAAAAl9fAAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAabmV1dHJpbm9Db250cmFjdEFkZHJlc3NLZXkCAAAAH05vIG5ldXRyaW5vIGNvbnRyYWN0IHNwZWNpZmllZC4AAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASbmV1dHJpbm9Bc3NldElkS2V5AgAAABdObyBVU0ROIGFzc2V0IGlkIGZvdW5kLgAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAADm5zYnRBc3NldElkS2V5AgAAABZObyBOU0JUIGFzc2V0IGlkIGZvdW5kAAAAABJtaW5pbXVtUG9vbEZ1bmRpbmcJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkCAAAALU1pbmltdW0gcG9vbCBmdW5kaW5nIGFtb3VudCBpcyBub3Qgc3BlY2lmaWVkLgAAAAALYXNzZXRTdGF0dXMJAAUVAAAAAwIAAAAIUFJPUE9TRUQCAAAABVJFQURZAgAAAAZJU1NVRUQAAAAAGHByZWRlZmluZWRBc3NldENvbnRyYWN0cwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAFGFzc2V0c0FkZHJlc3NMaXN0S2V5AgAAAC1ObyBwb29sIG9mIHByZWRlcGxveWVkIGFzc2V0IGNvbnRyYWN0cyBmb3VuZC4AAAAAFHByZWRlZmluZWRBc3NldHNMaXN0CQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAIFAAAAGHByZWRlZmluZWRBc3NldENvbnRyYWN0cwIAAAABLAAAAAARY3VycmVudEFzc2V0SW5kZXgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAUY3VycmVudEFzc2V0SW5kZXhLZXkAAAAAAAAAAAAAAAAACWRlYnRUb2tlbgkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAOZGVidFRva2VuSWRLZXkCAAAAE05vIGRlYnQgdG9rZW4gZm91bmQAAAAADW11bHRpcGxpY2F0b3IAAAAAAAAPQkAAAAAAFmRlYnRUb2tlblJlaXNzdWVBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAZZGVidFRva2VuRXRhbG9uQmFsYW5jZUtleQAAAAAAAAAAAAEAAAAVZ2V0QXNzZXRBZGRyZXNzQnlDb2RlAAAAAQAAAAthc3NldFN5bWJvbAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAAYZ2V0QXNzZXRBZGRyZXNzQnlDb2RlS2V5AAAAAQUAAAALYXNzZXRTeW1ib2wCAAAAAAEAAAAMZ2V0QXNzZXRDb2RlAAAAAQAAAAthc3NldENvbmZpZwkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAMa2V5QXNzZXRDb2RlAQAAAApnZXRBc3NldElEAAAAAQAAAAthc3NldENvbmZpZwkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAKa2V5QXNzZXRJZAEAAAAOZ2V0QXNzZXRTdGF0dXMAAAABAAAAC2Fzc2V0Q29uZmlnCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAA5rZXlBc3NldFN0YXR1cwEAAAAVZ2V0QXNzZXRQcmljZURlY2ltYWxzAAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABVrZXlBc3NldFByaWNlRGVjaW1hbHMBAAAAFWdldEFzc2V0QmFraW5nQXNzZXRJZAAAAAEAAAALYXNzZXRDb25maWcJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAE2tleUFzc2V0QmFraW5nQXNzZXQBAAAAHWdldEFzc2V0T3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABtrZXlPdmVyY29sbGF0ZXJhbFBlcmNlbnRhZ2UBAAAAHWdldEFzc2V0TWluUmVxdWlyZWRQb29sQW1vdW50AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAAprZXlNaW5Qb29sAQAAABpnZXRBc3NldFByaWNlT3JhY2xlQWRkcmVzcwAAAAEAAAALYXNzZXRDb25maWcJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAFWtleVByaWNlT3JhY2xlQWRkcmVzcwEAAAAYZ2V0TWluQnV5UGF5bWVudFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABBrZXlNaW5CdXlQYXltZW50AQAAABlnZXRNaW5TZWxsUGF5bWVudFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABFrZXlNaW5TZWxsUGF5bWVudAEAAAAaZ2V0QnV5TG9ja0ludGVydmFsUGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAEmtleUJ1eUxvY2tJbnRlcnZhbAEAAAAbZ2V0U2VsbExvY2tJbnRlcnZhbFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABNrZXlTZWxsTG9ja0ludGVydmFsAQAAABFnZXRCdXlGZWVQZXJBc3NldAAAAAEAAAALYXNzZXRDb25maWcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAJa2V5QnV5RmVlAQAAABJnZXRTZWxsRmVlUGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAACmtleVNlbGxGZWUBAAAAGmdldFJlZGVtcHRpb25UaW1lb3V0QmxvY2tzAAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABhrZXlQb29sUmVkZW1wdGlvblRpbWVvdXQBAAAAIWdldFdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAEAAAALYXNzZXRDb25maWcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAha2V5V2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AQAAABJnZXRBc3NldFBvb2xNYWtlcnMAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAAVZ2V0QXNzZXRQb29sTWFrZXJzS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzAgAAAAABAAAAEmdldEFzc2V0SW5pdEhlaWdodAAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABVnZXRBc3NldEluaXRIZWlnaHRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MAAAAAAAAAAAABAAAAFmdldEFzc2V0QWN0aXZhdGVIZWlnaHQAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAZZ2V0QXNzZXRBY3RpdmF0ZUhlaWdodEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAB1nZXRBc3NldEN1cnJyZW50UG9vbEFtb3VudEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAVZ2V0QXNzZXRNYXhQb29sQW1vdW50AAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGGdldEFzc2V0TWF4UG9vbEFtb3VudEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAMZ2V0QXNzZXRNZXRhAAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAD2dldEFzc2V0TWV0YUtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwIAAAAAAQAAAB9nZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAQcG9vbE1ha2VyQWRkcmVzcwAAAAAAAAAAAAEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbk1heEFtb3VudAAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAAEHBvb2xNYWtlckFkZHJlc3MAAAAAAAAAAAABAAAAGGdldFBvb2xNYWtlckxvY2tlZEFtb3VudAAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAG2dldFBvb2xNYWtlckxvY2tlZEFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAQcG9vbE1ha2VyQWRkcmVzcwAAAAAAAAAAAAEAAAAYZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAbZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAABBwb29sTWFrZXJBZGRyZXNzAAAAAAAAAAAAAQAAAA1nZXRBc3NldFByaWNlAAAAAgAAABJwcmljZU9yYWNsZUFkZHJlc3MAAAAJYXNzZXRDb2RlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAScHJpY2VPcmFjbGVBZGRyZXNzCQEAAAAQZ2V0QXNzZXRQcmljZUtleQAAAAEFAAAACWFzc2V0Q29kZQIAAAAUTm8gQXNzZXQgcHJpY2UgZm91bmQBAAAAH2NvbXBvc2VBc3NldENvbmZpZ3VyYXRpb25TdHJpbmcAAAAQAAAACWFzc2V0Q29kZQAAAAdhc3NldElkAAAAC2Fzc2V0U3RhdHVzAAAADXByaWNlRGVjaW1hbHMAAAAOYmFja2luZ0Fzc2V0SWQAAAAVb3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAB21pblBvb2wAAAAScHJpY2VPcmFjbGVBZGRyZXNzAAAADW1pbkJ1eVBheW1lbnQAAAAObWluU2VsbFBheW1lbnQAAAAPYnV5TG9ja0ludGVydmFsAAAAEHNlbGxMb2NrSW50ZXJ2YWwAAAAGYnV5RmVlAAAAB3NlbGxGZWUAAAAVcG9vbFJlZGVtcHRpb25UaW1lb3V0AAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAkABLkAAAACCQAETAAAAAICAAAAHiVzJXMlcyVkJXMlZCVkJXMlZCVkJWQlZCVkJWQlZAkABEwAAAACBQAAAAlhc3NldENvZGUJAARMAAAAAgUAAAAHYXNzZXRJZAkABEwAAAACBQAAAAthc3NldFN0YXR1cwkABEwAAAACCQABpAAAAAEFAAAADXByaWNlRGVjaW1hbHMJAARMAAAAAgUAAAAOYmFja2luZ0Fzc2V0SWQJAARMAAAAAgkAAaQAAAABBQAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQJAARMAAAAAgkAAaQAAAABBQAAAAdtaW5Qb29sCQAETAAAAAIFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwkABEwAAAACCQABpAAAAAEFAAAADW1pbkJ1eVBheW1lbnQJAARMAAAAAgkAAaQAAAABBQAAAA5taW5TZWxsUGF5bWVudAkABEwAAAACCQABpAAAAAEFAAAAD2J1eUxvY2tJbnRlcnZhbAkABEwAAAACCQABpAAAAAEFAAAAEHNlbGxMb2NrSW50ZXJ2YWwJAARMAAAAAgkAAaQAAAABBQAAAAZidXlGZWUJAARMAAAAAgkAAaQAAAABBQAAAAdzZWxsRmVlCQAETAAAAAIJAAGkAAAAAQUAAAAVcG9vbFJlZGVtcHRpb25UaW1lb3V0CQAETAAAAAIJAAGkAAAAAQUAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50BQAAAANuaWwCAAAAAl9fAQAAABR1cGRhdGVBc3NldENmZ1N0YXR1cwAAAAIAAAAJbmV3U3RhdHVzAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAABWFDb2RlCQEAAAAMZ2V0QXNzZXRDb2RlAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAADYUlECQEAAAAKZ2V0QXNzZXRJRAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAADmFQcmljZURlY2ltYWxzCQEAAAAVZ2V0QXNzZXRQcmljZURlY2ltYWxzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAOYUJha2luZ0Fzc2V0SWQJAQAAABVnZXRBc3NldEJha2luZ0Fzc2V0SWQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABZhT3ZlckNvbGxhdGVyYWxQZXJjZW50CQEAAAAdZ2V0QXNzZXRPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABBhTWluUmVxdWlyZWRQb29sCQEAAAAdZ2V0QXNzZXRNaW5SZXF1aXJlZFBvb2xBbW91bnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABNhUHJpY2VPcmFjbGVBZGRyZXNzCQEAAAAaZ2V0QXNzZXRQcmljZU9yYWNsZUFkZHJlc3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAA5hTWluQnV5UGF5bWVudAkBAAAAGGdldE1pbkJ1eVBheW1lbnRQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAD2FNaW5TZWxsUGF5bWVudAkBAAAAGWdldE1pblNlbGxQYXltZW50UGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABBhQnV5TG9ja0ludGVydmFsCQEAAAAaZ2V0QnV5TG9ja0ludGVydmFsUGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABFhU2VsbExvY2tJbnRlcnZhbAkBAAAAG2dldFNlbGxMb2NrSW50ZXJ2YWxQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAB2FCdXlGZWUJAQAAABFnZXRCdXlGZWVQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAACGFTZWxsRmVlCQEAAAASZ2V0U2VsbEZlZVBlckFzc2V0AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAYYVJlZGVtcHRpb25UaW1lb3V0QmxvY2tzCQEAAAAaZ2V0UmVkZW1wdGlvblRpbWVvdXRCbG9ja3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQJAQAAACFnZXRXZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQEAAAAfY29tcG9zZUFzc2V0Q29uZmlndXJhdGlvblN0cmluZwAAABAFAAAABWFDb2RlBQAAAANhSUQFAAAACW5ld1N0YXR1cwUAAAAOYVByaWNlRGVjaW1hbHMFAAAADmFCYWtpbmdBc3NldElkBQAAABZhT3ZlckNvbGxhdGVyYWxQZXJjZW50BQAAABBhTWluUmVxdWlyZWRQb29sBQAAABNhUHJpY2VPcmFjbGVBZGRyZXNzBQAAAA5hTWluQnV5UGF5bWVudAUAAAAPYU1pblNlbGxQYXltZW50BQAAABBhQnV5TG9ja0ludGVydmFsBQAAABFhU2VsbExvY2tJbnRlcnZhbAUAAAAHYUJ1eUZlZQUAAAAIYVNlbGxGZWUFAAAAGGFSZWRlbXB0aW9uVGltZW91dEJsb2NrcwUAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AAAABwAAAAFpAQAAAARpbml0AAAACAAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwAAABZuZXV0cmlub1N0YWtpbmdBZGRyZXNzAAAAGG1pbmltdW5Qb29sRnVuZGluZ0Ftb3VudAAAABNwcmVkZWZpbmVkQXNzZXRMaXN0AAAAEWN1cnJlbnRBc3NldEluZGV4AAAAEmRlYnRFdGhhbG9uQmFsYW5jZQAAABJkZWZvU3Rha2luZ0FkZHJlc3MAAAAXZGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQYJAAACAAAAAQIAAAAhQ29udHJhY3Qgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuBAAAAAlpc3N1ZURlYnQJAARCAAAABQIAAAAJREVGT19ERUJUAgAAABBERUZPIERlYnQgVG9rZW4uAAAAAAAAAAABAAAAAAAAAAAGBgQAAAALZGVidFRva2VuSWQJAAQ4AAAAAQUAAAAJaXNzdWVEZWJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGm5ldXRyaW5vQ29udHJhY3RBZGRyZXNzS2V5BQAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABluZXV0cmlub1N0YWtpbmdBZGRyZXNzS2V5BQAAABZuZXV0cmlub1N0YWtpbmdBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkFAAAAGG1pbmltdW5Qb29sRnVuZGluZ0Ftb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABRhc3NldHNBZGRyZXNzTGlzdEtleQUAAAATcHJlZGVmaW5lZEFzc2V0TGlzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAUY3VycmVudEFzc2V0SW5kZXhLZXkFAAAAEWN1cnJlbnRBc3NldEluZGV4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABlkZWJ0VG9rZW5FdGFsb25CYWxhbmNlS2V5BQAAABJkZWJ0RXRoYWxvbkJhbGFuY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAOZGVidFRva2VuSWRLZXkJAAJYAAAAAQUAAAALZGVidFRva2VuSWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAVZGVmb1N0YWtpbmdBZGRyZXNzS2V5BQAAABJkZWZvU3Rha2luZ0FkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAaZGVmb1N0YWtpbmdQYWNlbWFrZXJQdWJLZXkFAAAAF2RlZm9TdGFraW5nUGFjZW1ha2VyUHViCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAABBpc0luaXRpYWxpemVkS2V5BgkABEwAAAACBQAAAAlpc3N1ZURlYnQJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAtkZWJ0VG9rZW5JZAAAAAAAAAAAAQUAAAADbmlsAAAAAWkBAAAADHByb3Bvc2VBc3NldAAAAA8AAAAJYXNzZXRDb2RlAAAABG1ldGEAAAAHbWluUG9vbAAAABJwcmljZU9yYWNsZUFkZHJlc3MAAAAVb3ZlckNvbGxhdGVyYWxQZXJjZW50AAAADmJhY2tpbmdBc3NldElkAAAADXByaWNlRGVjaW1hbHMAAAANbWluQnV5UGF5bWVudAAAAA5taW5TZWxsUGF5bWVudAAAAA9idXlMb2NrSW50ZXJ2YWwAAAAQc2VsbExvY2tJbnRlcnZhbAAAAAZidXlGZWUAAAAHc2VsbEZlZQAAABVwb29sUmVkZW1wdGlvblRpbWVvdXQAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AwkBAAAAAiE9AAAAAgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADmFkbWluUHVibGljS2V5CQAAAgAAAAECAAAAKk9ubHkgQWRtaW4gY2FuIHBlcmZvcm0gY29udHJhY3Qgb3BlcmF0aW9uLgMJAAAAAAAAAgkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEGlzSW5pdGlhbGl6ZWRLZXkHCQAAAgAAAAECAAAAGkNvbnRyYWN0IGlzIG5vdCB5ZXQgcmVhZHkuAwkBAAAAAiE9AAAAAgkAAlkAAAABBQAAAA5iYWNraW5nQXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQAAAgAAAAECAAAAI0Jha2luZyBhc3NldCBpZCBjb3VsZCBiZSBVU0ROIG9ubHkuAwkBAAAAAiE9AAAAAgkBAAAAFWdldEFzc2V0QWRkcmVzc0J5Q29kZQAAAAEFAAAACWFzc2V0Q29kZQIAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABdBc3NldCB3aXRoIHBhc3NlZCBjb2RlIAUAAAAJYXNzZXRDb2RlAgAAABsgaGFzIGFscmVhZHkgYmVlbiBwcm9wb3NlZC4DCQAAZgAAAAIFAAAAEm1pbmltdW1Qb29sRnVuZGluZwUAAAAHbWluUG9vbAkAAAIAAAABCQABLAAAAAICAAAAM01pbmltdW0gcG9vbCBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWxzIHRvIAkAAaQAAAABBQAAABJtaW5pbXVtUG9vbEZ1bmRpbmcDAwMDAwMDAwkAAGYAAAACAAAAAAAAAAAABQAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQGCQAAZgAAAAIAAAAAAAAAAAAFAAAADXByaWNlRGVjaW1hbHMGCQAAZgAAAAIAAAAAAAAAAAAFAAAADW1pbkJ1eVBheW1lbnQGCQAAZgAAAAIAAAAAAAAAAAAFAAAADm1pblNlbGxQYXltZW50BgkAAGYAAAACAAAAAAAAAAAABQAAAA9idXlMb2NrSW50ZXJ2YWwGCQAAZgAAAAIAAAAAAAAAAAAFAAAAEHNlbGxMb2NrSW50ZXJ2YWwGCQAAZgAAAAIAAAAAAAAAAAAFAAAABmJ1eUZlZQYJAABmAAAAAgAAAAAAAAAAAAUAAAAHc2VsbEZlZQkAAAIAAAABAgAAAChPbmUgb2YgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzIGlzIGludmFsaWQuBAAAABdwcmljZU9yYWNsZUFkZHJlc3NWYWxpZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABJwcmljZU9yYWNsZUFkZHJlc3MCAAAAKVBhc3NlZCBQcmljZSBPcmFjbGUgQWRkcmVzcyBpcyBub3QgdmFsaWQuBAAAAAxhc3NldEFkZHJlc3MJAAGRAAAAAgUAAAAUcHJlZGVmaW5lZEFzc2V0c0xpc3QFAAAAEWN1cnJlbnRBc3NldEluZGV4BAAAAAtkZWZvQXNzZXRJZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAAAxhc3NldEFkZHJlc3MCAAAAAAUAAAAOZGVmb0Fzc2V0SWRLZXkCAAAAF05vIGRlZm8gYXNzZXQgSUQgZm91bmQuCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFnZXRBc3NldENvbmZpZ0tleQAAAAEFAAAADGFzc2V0QWRkcmVzcwkBAAAAH2NvbXBvc2VBc3NldENvbmZpZ3VyYXRpb25TdHJpbmcAAAAQBQAAAAlhc3NldENvZGUFAAAAC2RlZm9Bc3NldElkCAUAAAALYXNzZXRTdGF0dXMAAAACXzEFAAAADXByaWNlRGVjaW1hbHMFAAAADmJhY2tpbmdBc3NldElkBQAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQFAAAAB21pblBvb2wFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwUAAAANbWluQnV5UGF5bWVudAUAAAAObWluU2VsbFBheW1lbnQFAAAAD2J1eUxvY2tJbnRlcnZhbAUAAAAQc2VsbExvY2tJbnRlcnZhbAUAAAAGYnV5RmVlBQAAAAdzZWxsRmVlBQAAABVwb29sUmVkZW1wdGlvblRpbWVvdXQFAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAYZ2V0QXNzZXRBZGRyZXNzQnlDb2RlS2V5AAAAAQUAAAAJYXNzZXRDb2RlBQAAAAxhc3NldEFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2dldEFzc2V0TWV0YUtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAEbWV0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldEFzc2V0SW5pdEhlaWdodEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABRjdXJyZW50QXNzZXRJbmRleEtleQkAAGQAAAACBQAAABFjdXJyZW50QXNzZXRJbmRleAAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAbZ2V0QXNzZXRBZGRyZXNzQnlBc3NldElkS2V5AAAAAQUAAAALZGVmb0Fzc2V0SWQFAAAADGFzc2V0QWRkcmVzcwUAAAADbmlsAAAAAWkBAAAAEWZ1bmRMaXF1aWRpdHlQb29sAAAAAQAAAAlhc3NldENvZGUEAAAADGFzc2V0QWRkcmVzcwkBAAAAFWdldEFzc2V0QWRkcmVzc0J5Q29kZQAAAAEFAAAACWFzc2V0Q29kZQQAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAkBAAAAE2dldEFzc2V0Q29uZmlnQXJyYXkAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAAD2F0dGFjaGVkUGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAIhPQAAAAIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5hZG1pblB1YmxpY0tleQkAAAIAAAABAgAAACpPbmx5IEFkbWluIGNhbiBwZXJmb3JtIGNvbnRyYWN0IG9wZXJhdGlvbi4DCQAAAAAAAAIJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABBpc0luaXRpYWxpemVkS2V5BwkAAAIAAAABAgAAABpDb250cmFjdCBpcyBub3QgeWV0IHJlYWR5LgMJAQAAAAIhPQAAAAIIBQAAAA9hdHRhY2hlZFBheW1lbnQAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQAAAgAAAAECAAAALkxpcXVpZGl0eSBwb29sIGNvdWxkIGJlIGZ1bmRlZCB3aXRoIFVTRE4gb25seS4DCQAAAAAAAAIIBQAAAA9hdHRhY2hlZFBheW1lbnQAAAAGYW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAIkluY29ycmVjdCBhdHRhY2hlZCBwYXltZW50IGFtb3VudC4DCQAAAAAAAAIFAAAADGFzc2V0QWRkcmVzcwIAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACVDYW5ub3QgZmluZCBsaXF1aWRpdHkgcG9vbCBmb3IgYXNzZXQgBQAAAAlhc3NldENvZGUCAAAAAS4EAAAAD2ZpbmFsUG9vbEFtb3VudAkAAGQAAAACCAUAAAAPYXR0YWNoZWRQYXltZW50AAAABmFtb3VudAkBAAAAGWdldEFzc2V0Q3VycmVudFBvb2xBbW91bnQAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAADW1heFBvb2xBbW91bnQJAQAAABVnZXRBc3NldE1heFBvb2xBbW91bnQAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAAEHBvb2xNYWtlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABdjdXJyZW50UG9vbE1ha2VyQmFsYW5jZQkBAAAAH2dldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAAEHBvb2xNYWtlckFkZHJlc3MEAAAAE21heFBvb2xNYWtlckJhbGFuY2UJAQAAACJnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uTWF4QW1vdW50AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAABFjdXJyZW50UG9vbFN0YXR1cwkBAAAADmdldEFzc2V0U3RhdHVzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAPZmluYWxQb29sU3RhdHVzAwMJAABnAAAAAgUAAAAPZmluYWxQb29sQW1vdW50CQEAAAAdZ2V0QXNzZXRNaW5SZXF1aXJlZFBvb2xBbW91bnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQAAAAAAAAIFAAAAEWN1cnJlbnRQb29sU3RhdHVzCAUAAAALYXNzZXRTdGF0dXMAAAACXzEHCAUAAAALYXNzZXRTdGF0dXMAAAACXzIFAAAAEWN1cnJlbnRQb29sU3RhdHVzBAAAABFjdXJyZW50UG9vbE1ha2VycwkBAAAAEmdldEFzc2V0UG9vbE1ha2VycwAAAAEFAAAADGFzc2V0QWRkcmVzcwQAAAANbmV3UG9vbE1ha2VycwMJAAAAAAAAAgUAAAARY3VycmVudFBvb2xNYWtlcnMCAAAAAAUAAAAQcG9vbE1ha2VyQWRkcmVzcwMJAQAAAAhjb250YWlucwAAAAIFAAAAEWN1cnJlbnRQb29sTWFrZXJzBQAAABBwb29sTWFrZXJBZGRyZXNzBQAAABFjdXJyZW50UG9vbE1ha2VycwkAASwAAAACCQABLAAAAAIFAAAAEWN1cnJlbnRQb29sTWFrZXJzAgAAAAEsCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAATbmV3UG9vbE1ha2VyQmFsYW5jZQkAAGQAAAACBQAAABdjdXJyZW50UG9vbE1ha2VyQmFsYW5jZQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAAAZyZXN1bHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAACJnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAATbmV3UG9vbE1ha2VyQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAGYAAAACBQAAABNuZXdQb29sTWFrZXJCYWxhbmNlBQAAABNtYXhQb29sTWFrZXJCYWxhbmNlBQAAABNuZXdQb29sTWFrZXJCYWxhbmNlBQAAABNtYXhQb29sTWFrZXJCYWxhbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAdZ2V0QXNzZXRDdXJycmVudFBvb2xBbW91bnRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MFAAAAD2ZpbmFsUG9vbEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGGdldEFzc2V0TWF4UG9vbEFtb3VudEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwMJAABmAAAAAgUAAAAPZmluYWxQb29sQW1vdW50BQAAAA1tYXhQb29sQW1vdW50BQAAAA9maW5hbFBvb2xBbW91bnQFAAAADW1heFBvb2xBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFWdldEFzc2V0UG9vbE1ha2Vyc0tleQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAANbmV3UG9vbE1ha2VycwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0QXNzZXRDb25maWdLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MJAQAAABR1cGRhdGVBc3NldENmZ1N0YXR1cwAAAAIFAAAAD2ZpbmFsUG9vbFN0YXR1cwUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAUAAAADbmlsAwkAAAAAAAACBQAAABFjdXJyZW50UG9vbFN0YXR1cwgFAAAAC2Fzc2V0U3RhdHVzAAAAAl8zCQAETQAAAAIFAAAABnJlc3VsdAkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAMYXNzZXRBZGRyZXNzCAUAAAAPYXR0YWNoZWRQYXltZW50AAAABmFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAAZyZXN1bHQAAAABaQEAAAANYWN0aXZhdGVBc3NldAAAAAEAAAAJYXNzZXRDb2RlBAAAAAxhc3NldEFkZHJlc3MJAQAAABVnZXRBc3NldEFkZHJlc3NCeUNvZGUAAAABBQAAAAlhc3NldENvZGUEAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QJAQAAABNnZXRBc3NldENvbmZpZ0FycmF5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBAAAABZhc3NldEN1cnJlbnRQb29sQW1vdW50CQEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEFAAAADGFzc2V0QWRkcmVzcwQAAAAOYUN1cnJlbnRTdGF0dXMJAQAAAA5nZXRBc3NldFN0YXR1cwAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQcJAAACAAAAAQIAAAAaQ29udHJhY3QgaXMgbm90IHlldCByZWFkeS4DCQEAAAACIT0AAAACBQAAAA5hQ3VycmVudFN0YXR1cwgFAAAAC2Fzc2V0U3RhdHVzAAAAAl8yCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADBBc3NldCBpcyBub3QgaW4gUkVBRFkgc3RhdHVzLiBDdXJyZW50IHN0YXR1cyBpcyAFAAAADmFDdXJyZW50U3RhdHVzAgAAAAEuAwkAAAAAAAACBQAAAAxhc3NldEFkZHJlc3MCAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAASQ2Fubm90IGZpbmQgYXNzZXQgBQAAAAlhc3NldENvZGUCAAAAAS4DCQAAZgAAAAIFAAAAEm1pbmltdW1Qb29sRnVuZGluZwUAAAAWYXNzZXRDdXJyZW50UG9vbEFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAALUNhbm5vdCBpc3N1ZSBhc3NldCBhcyBsaXF1aWRpdHkgcG9vbCBhbW91bnQgKAkAAaQAAAABBQAAABZhc3NldEN1cnJlbnRQb29sQW1vdW50AgAAABkpIGlzIGxlc3MgdGhhbiByZXF1aXJlZCAoCQABpAAAAAEFAAAAEm1pbmltdW1Qb29sRnVuZGluZwIAAAABKQQAAAAJaXNzdWVEZWJ0CQEAAAAHUmVpc3N1ZQAAAAMFAAAACWRlYnRUb2tlbgUAAAAWZGVidFRva2VuUmVpc3N1ZUFtb3VudAYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABlnZXRBc3NldEFjdGl2YXRlSGVpZ2h0S2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWdldEFzc2V0Q29uZmlnS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzCQEAAAAUdXBkYXRlQXNzZXRDZmdTdGF0dXMAAAACCAUAAAALYXNzZXRTdGF0dXMAAAACXzMFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QJAARMAAAAAgUAAAAJaXNzdWVEZWJ0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAWYXNzZXRDdXJyZW50UG9vbEFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAWZGVidFRva2VuUmVpc3N1ZUFtb3VudAUAAAAJZGVidFRva2VuBQAAAANuaWwAAAABaQEAAAAOcmVkZWVtRnJvbVBvb2wAAAACAAAACWFzc2V0Q29kZQAAAAZhbW91bnQEAAAADGFzc2V0QWRkcmVzcwkBAAAAFWdldEFzc2V0QWRkcmVzc0J5Q29kZQAAAAEFAAAACWFzc2V0Q29kZQQAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAkBAAAAE2dldEFzc2V0Q29uZmlnQXJyYXkAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAADWNhbGxlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABl0b3RhbEFtb3VudEluUG9vbEJ5Q2FsbGVyCQEAAAAfZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudAAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwQAAAAXbG9ja2VkQW1vdW50QnlQb29sTWFrZXIJAQAAABhnZXRQb29sTWFrZXJMb2NrZWRBbW91bnQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQcJAAACAAAAAQIAAAAaQ29udHJhY3QgaXMgbm90IHlldCByZWFkeS4DCQAAAAAAAAIFAAAADGFzc2V0QWRkcmVzcwIAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABJDYW5ub3QgZmluZCBhc3NldCAFAAAACWFzc2V0Q29kZQIAAAABLgMDAwkAAGYAAAACAAAAAAAAAAAABQAAAAZhbW91bnQGCQAAAAAAAAIFAAAAGXRvdGFsQW1vdW50SW5Qb29sQnlDYWxsZXIAAAAAAAAAAAAGCQAAZgAAAAIFAAAABmFtb3VudAUAAAAZdG90YWxBbW91bnRJblBvb2xCeUNhbGxlcgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAiQ2Fubm90IGZpbmQgcG9vbCBtYWtlciBieSBhZGRyZXNzIAUAAAANY2FsbGVyQWRkcmVzcwIAAAAhIG9yIGFtb3VudCBwYXNzZWQgaXMgbm90IGNvcnJlY3QuAwkAAGYAAAACBQAAABdsb2NrZWRBbW91bnRCeVBvb2xNYWtlcgAAAAAAAAAAAAkAAAIAAAABAgAAAEZQb29sIG1ha2VyIGFscmVhZHkgaGFzIGluaXRpYXRlZCByZWRlbXB0aW9uIHRoYXQgaXMgbm90IHdpdGhkcmF3biB5ZXQuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAbZ2V0UG9vbE1ha2VyTG9ja2VkQW1vdW50S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtnZXRQb29sTWFrZXJVbmxvY2tIZWlnaHRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MJAABkAAAAAgUAAAAGaGVpZ2h0CQEAAAAaZ2V0UmVkZW1wdGlvblRpbWVvdXRCbG9ja3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BQAAAANuaWwAAAABaQEAAAAbZ2V0TWF4QWxsb3dlZEFtb3VudFRvUmVkZWVtAAAAAgAAAAlhc3NldENvZGUAAAAJcG9vbE1ha2VyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAApe2FsbG93ZWRBbW91bnRUb1JlZGVlbTogMTAwMCwgYXNzZXRDb2RlOiAFAAAACWFzc2V0Q29kZQIAAAANLCBwb29sTWFrZXI6IAUAAAAJcG9vbE1ha2VyAgAAAAF9AAAAAWkBAAAACHdpdGhkcmF3AAAAAQAAAAlhc3NldENvZGUEAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QJAQAAABNnZXRBc3NldENvbmZpZ0FycmF5AAAAAQUAAAAJYXNzZXRDb2RlBAAAAAxhc3NldEFkZHJlc3MJAQAAABVnZXRBc3NldEFkZHJlc3NCeUNvZGUAAAABBQAAAAlhc3NldENvZGUEAAAAEnByaWNlT3JhY2xlQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAGmdldEFzc2V0UHJpY2VPcmFjbGVBZGRyZXNzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAANY2FsbGVyQWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAEnN5bnRoZXRpY0Fzc2V0SW5mbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEJAAJZAAAAAQUAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAICAAAAGENhbm5vdCBmaW5kIGFzc2V0IGJ5IGlkIAUAAAAMYXNzZXRBZGRyZXNzBAAAABp0b3RhbFVTRE5CYWxhbmNlT25Db250cmFjdAkAA/AAAAACBQAAAAR0aGlzBQAAAA9uZXV0cmlub0Fzc2V0SWQEAAAAHHRvdGFsQW1vdW50SW5Qb29sQnlQb29sTWFrZXIJAQAAAB9nZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzBAAAABdsb2NrZWRBbW91bnRCeVBvb2xNYWtlcgkBAAAAGGdldFBvb2xNYWtlckxvY2tlZEFtb3VudAAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwQAAAARbWluV2l0aGRyYXdIZWlnaHQJAQAAABhnZXRQb29sTWFrZXJVbmxvY2tIZWlnaHQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MEAAAAE3Bvb2xNYWtldFByb3BvcnRpb24JAABpAAAAAgkBAAAAFWdldEFzc2V0TWF4UG9vbEFtb3VudAAAAAEFAAAADGFzc2V0QWRkcmVzcwkBAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQcJAAACAAAAAQIAAAAaQ29udHJhY3QgaXMgbm90IHlldCByZWFkeS4DCQAAAAAAAAIJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABBpc0luaXRpYWxpemVkS2V5BwkAAAIAAAABAgAAABpDb250cmFjdCBpcyBub3QgeWV0IHJlYWR5LgMJAAAAAAAAAgUAAAAMYXNzZXRBZGRyZXNzAgAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAEkNhbm5vdCBmaW5kIGFzc2V0IAUAAAAJYXNzZXRDb2RlAgAAAAEuAwkAAAAAAAACBQAAABx0b3RhbEFtb3VudEluUG9vbEJ5UG9vbE1ha2VyAAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACJDYW5ub3QgZmluZCBwb29sIG1ha2VyIGJ5IGFkZHJlc3MgBQAAAA1jYWxsZXJBZGRyZXNzAgAAABUgb3Igbm8gbG9ja2VkIGFtb3VudC4DCQAAZgAAAAIFAAAABmhlaWdodAUAAAARbWluV2l0aGRyYXdIZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADFBsZWFzZSB3YWl0IAkAAaQAAAABBQAAABFtaW5XaXRoZHJhd0hlaWdodAIAAAARIGJlZm9yZSB3aXRoZHJhdy4EAAAADWFzc2V0RW1pc3Npb24IBQAAABJzeW50aGV0aWNBc3NldEluZm8AAAAIcXVhbnRpdHkEAAAADGN1cnJlbnRQcmljZQkBAAAADWdldEFzc2V0UHJpY2UAAAACBQAAABJwcmljZU9yYWNsZUFkZHJlc3MFAAAACWFzc2V0Q29kZQQAAAAVcG9vbE1ha2VyTG9ja2VkQW1vdW50CQEAAAAYZ2V0UG9vbE1ha2VyTG9ja2VkQW1vdW50AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzBAAAABtwcmljZVdpdGhPdmVyY29sbGF0ZXJhbFJhdGUJAABoAAAAAgkBAAAAHWdldEFzc2V0T3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAUAAAAMY3VycmVudFByaWNlBAAAABl1c2RuTmVlZGVkVG9Db3ZlckVtaXNzaW9uCQAAaAAAAAIFAAAAG3ByaWNlV2l0aE92ZXJjb2xsYXRlcmFsUmF0ZQUAAAANYXNzZXRFbWlzc2lvbgMJAABmAAAAAgUAAAAadG90YWxVU0ROQmFsYW5jZU9uQ29udHJhY3QFAAAAGXVzZG5OZWVkZWRUb0NvdmVyRW1pc3Npb24EAAAAHGFtb3V0QXZhaWxhYmxlVG9FeGl0RnJvbVBvb2wJAABlAAAAAgUAAAAadG90YWxVU0ROQmFsYW5jZU9uQ29udHJhY3QFAAAAGXVzZG5OZWVkZWRUb0NvdmVyRW1pc3Npb24EAAAAEWFtb3VudEZvcldpdGhkcmF3CQAAaAAAAAIFAAAAE3Bvb2xNYWtldFByb3BvcnRpb24FAAAAHGFtb3V0QXZhaWxhYmxlVG9FeGl0RnJvbVBvb2wEAAAAEWZpbmFsTG9ja2VkQW1vdW50CQAAZQAAAAIJAQAAABhnZXRQb29sTWFrZXJMb2NrZWRBbW91bnQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MFAAAAEWFtb3VudEZvcldpdGhkcmF3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAdZ2V0QXNzZXRDdXJycmVudFBvb2xBbW91bnRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MJAABlAAAAAgkBAAAAGWdldEFzc2V0Q3VycmVudFBvb2xBbW91bnQAAAABBQAAAAxhc3NldEFkZHJlc3MFAAAAEWFtb3VudEZvcldpdGhkcmF3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwkAAGUAAAACCQEAAAAfZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudAAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwUAAAARYW1vdW50Rm9yV2l0aGRyYXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtnZXRQb29sTWFrZXJMb2NrZWRBbW91bnRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MFAAAAEWZpbmFsTG9ja2VkQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADWNhbGxlckFkZHJlc3MFAAAAEWFtb3VudEZvcldpdGhkcmF3BQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAAA25pbAUAAAADbmlsAAAAAKnz0EE=", "chainId": 84, "height": 1243429, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7cDWMnhqNGsoKXC9DQYXSzaNEjmdgZXrEAZhYjqKEnTv Next: CP3B6voJ9BFaP5Jh1n1vU3yEQotepaAo51KovJSysVj Diff:
OldNewDifferences
226226 func aV (P,Y,aj,aW,aX,aY,aZ,aU,ba,bb,bc,bd,be,bf,bg,bh) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d", P, Y, aj, toString(aW), aX, toString(aY), toString(aZ), aU, toString(ba), toString(bb), toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh)], "__")
227227
228228
229-@Callable(bi)
230-func init (bj,bk,bl,bm,am,bn,bo,bp) = if ((toBase58String(bi.callerPublicKey) != x))
229+func bi (bj,bk) = {
230+ let bl = as(bk)
231+ let bm = au(bk)
232+ let bn = aw(bk)
233+ let bo = ax(bk)
234+ let bp = ay(bk)
235+ let bq = az(bk)
236+ let br = aA(bk)
237+ let bs = aB(bk)
238+ let bt = aC(bk)
239+ let bu = aD(bk)
240+ let bv = aE(bk)
241+ let bw = aF(bk)
242+ let bx = aG(bk)
243+ let by = aH(bk)
244+ let bh = aI(bk)
245+ aV(bl, bm, bj, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bh)
246+ }
247+
248+
249+@Callable(bz)
250+func init (bA,bB,bC,bD,am,bE,bF,bG) = if ((toBase58String(bz.callerPublicKey) != x))
231251 then throw("Only Admin can perform contract operation.")
232252 else if ((g(B) == true))
233253 then throw("Contract was already initialized.")
234254 else {
235- let bq = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
236- let br = calculateAssetId(bq)
237-[StringEntry(y, bj), StringEntry(z, bk), IntegerEntry(A, bl), StringEntry(D, bm), IntegerEntry(C, am), IntegerEntry(F, bn), StringEntry(E, toBase58String(br)), StringEntry(G, bo), StringEntry(H, bp), BooleanEntry(B, true), bq, Burn(br, 1)]
255+ let bH = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
256+ let bI = calculateAssetId(bH)
257+[StringEntry(y, bA), StringEntry(z, bB), IntegerEntry(A, bC), StringEntry(D, bD), IntegerEntry(C, am), IntegerEntry(F, bE), StringEntry(E, toBase58String(bI)), StringEntry(G, bF), StringEntry(H, bG), BooleanEntry(B, true), bH, Burn(bI, 1)]
238258 }
239259
240260
241261
242-@Callable(bi)
243-func proposeAsset (P,bs,aZ,aU,aY,aX,aW,ba,bb,bc,bd,be,bf,bg,bh) = if ((toBase58String(bi.callerPublicKey) != x))
262+@Callable(bz)
263+func proposeAsset (P,bJ,aZ,aU,aY,aX,aW,ba,bb,bc,bd,be,bf,bg,bh) = if ((toBase58String(bz.callerPublicKey) != x))
244264 then throw("Only Admin can perform contract operation.")
245265 else if ((g(B) == false))
246266 then throw("Contract is not yet ready.")
267287 else (0 > bf))
268288 then throw("One of the passed parameters is invalid.")
269289 else {
270- let bt = valueOrErrorMessage(addressFromStringValue(aU), "Passed Price Oracle Address is not valid.")
290+ let bK = valueOrErrorMessage(addressFromStringValue(aU), "Passed Price Oracle Address is not valid.")
271291 let N = al[am]
272- let bu = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(N), ""), K), "No defo asset ID found.")
273-[StringEntry(M(N), aV(P, bu, aj._1, aW, aX, aY, aZ, aU, ba, bb, bc, bd, be, bf, bg, bh)), StringEntry(W(P), N), StringEntry(U(N), bs), IntegerEntry(Q(N), height), IntegerEntry(C, (am + 1)), StringEntry(X(bu), N)]
292+ let bL = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(N), ""), K), "No defo asset ID found.")
293+[StringEntry(M(N), aV(P, bL, aj._1, aW, aX, aY, aZ, aU, ba, bb, bc, bd, be, bf, bg, bh)), StringEntry(W(P), N), StringEntry(U(N), bJ), IntegerEntry(Q(N), height), IntegerEntry(C, (am + 1)), StringEntry(X(bL), N)]
274294 }
275295
276296
277297
278-@Callable(bi)
298+@Callable(bz)
279299 func fundLiquidityPool (P) = {
280300 let N = aq(P)
281- let bv = ae(N)
282- let bw = value(bi.payments[0])
283- if ((toBase58String(bi.callerPublicKey) != x))
301+ let bk = ae(N)
302+ let bM = value(bz.payments[0])
303+ if ((toBase58String(bz.callerPublicKey) != x))
284304 then throw("Only Admin can perform contract operation.")
285305 else if ((g(B) == false))
286306 then throw("Contract is not yet ready.")
287- else if ((bw.assetId != ag))
307+ else if ((bM.assetId != ag))
288308 then throw("Liquidity pool could be funded with USDN only.")
289- else if ((bw.amount == 0))
309+ else if ((bM.amount == 0))
290310 then throw("Incorrect attached payment amount.")
291311 else if ((N == ""))
292312 then throw((("Cannot find liquidity pool for asset " + P) + "."))
293313 else {
294- let bx = (bw.amount + aM(N))
295- let by = aN(N)
296- let aa = toString(bi.caller)
297- let bz = aP(N, aa)
298- let bA = aQ(N, aa)
299- let bB = av(bv)
300- let bC = if (if ((bx >= az(bv)))
301- then (bB == aj._1)
314+ let bN = (bM.amount + aM(N))
315+ let bO = aN(N)
316+ let aa = toString(bz.caller)
317+ let bP = aP(N, aa)
318+ let bQ = aQ(N, aa)
319+ let bR = av(bk)
320+ let bS = if (if ((bN >= az(bk)))
321+ then (bR == aj._1)
302322 else false)
303323 then aj._2
304- else bB
305- let bD = aJ(N)
306- let bE = if ((bD == ""))
324+ else bR
325+ let bT = aJ(N)
326+ let bU = if ((bT == ""))
307327 then aa
308- else if (contains(bD, aa))
309- then bD
310- else ((bD + ",") + toString(bi.caller))
311- let bF = as(bv)
312- let bG = au(bv)
313- let bH = aw(bv)
314- let bI = ax(bv)
315- let bJ = ay(bv)
316- let bK = az(bv)
317- let bL = aA(bv)
318- let bM = aB(bv)
319- let bN = aC(bv)
320- let bO = aD(bv)
321- let bP = aE(bv)
322- let bQ = aF(bv)
323- let bR = aG(bv)
324- let bS = aH(bv)
325- let bh = aI(bv)
326- let bT = (bz + bi.payments[0].amount)
327- let bU = [IntegerEntry(Z(N, toString(bi.caller)), bT), IntegerEntry(ab(N, toString(bi.caller)), if ((bT > bA))
328- then bT
329- else bA), IntegerEntry(S(N), bx), IntegerEntry(T(N), if ((bx > by))
330- then bx
331- else by), DeleteEntry(M(N)), StringEntry(V(N), bE), StringEntry(M(N), aV(bF, bG, bC, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bh))]
332- if ((bB == aj._3))
333- then (bU :+ ScriptTransfer(addressFromStringValue(N), bw.amount, ag))
334- else bU
328+ else if (contains(bT, aa))
329+ then bT
330+ else ((bT + ",") + toString(bz.caller))
331+ let bV = (bP + bz.payments[0].amount)
332+ let bW = [IntegerEntry(Z(N, toString(bz.caller)), bV), IntegerEntry(ab(N, toString(bz.caller)), if ((bV > bQ))
333+ then bV
334+ else bQ), IntegerEntry(S(N), bN), IntegerEntry(T(N), if ((bN > bO))
335+ then bN
336+ else bO), StringEntry(V(N), bU), StringEntry(M(N), bi(bS, bk))]
337+ if ((bR == aj._3))
338+ then (bW :+ ScriptTransfer(addressFromStringValue(N), bM.amount, ag))
339+ else bW
335340 }
336341 }
337342
338343
339344
340-@Callable(bi)
345+@Callable(bz)
341346 func activateAsset (P) = {
342347 let N = aq(P)
343- let bv = ae(N)
344- let bV = aM(N)
345- let bF = as(bv)
346- let bW = av(bv)
347- let bG = au(bv)
348- let bH = aw(bv)
349- let bI = ax(bv)
350- let bJ = ay(bv)
351- let bK = az(bv)
352- let bL = aA(bv)
353- let bM = aB(bv)
354- let bN = aC(bv)
355- let bO = aD(bv)
356- let bP = aE(bv)
357- let bQ = aF(bv)
358- let bR = aG(bv)
359- let bS = aH(bv)
360- let bh = aI(bv)
361- if ((toBase58String(bi.callerPublicKey) != x))
348+ let bk = ae(N)
349+ let bX = aM(N)
350+ let bY = av(bk)
351+ if ((toBase58String(bz.callerPublicKey) != x))
362352 then throw("Only Admin can perform contract operation.")
363353 else if ((g(B) == false))
364354 then throw("Contract is not yet ready.")
365- else if ((bW != aj._2))
366- then throw((("Asset is not in READY status. Current status is " + bW) + "."))
355+ else if ((bY != aj._2))
356+ then throw((("Asset is not in READY status. Current status is " + bY) + "."))
367357 else if ((N == ""))
368358 then throw((("Cannot find asset " + P) + "."))
369- else if ((ai > bV))
370- then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bV)) + ") is less than required (") + toString(ai)) + ")"))
359+ else if ((ai > bX))
360+ then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bX)) + ") is less than required (") + toString(ai)) + ")"))
371361 else {
372- let bq = Reissue(an, ap, true)
373-[IntegerEntry(R(N), height), DeleteEntry(M(N)), StringEntry(M(N), aV(bF, bG, aj._3, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bh)), bq, ScriptTransfer(addressFromStringValue(N), bV, ag), ScriptTransfer(addressFromStringValue(N), ap, an)]
362+ let bH = Reissue(an, ap, true)
363+[IntegerEntry(R(N), height), StringEntry(M(N), bi(aj._3, bk)), bH, ScriptTransfer(addressFromStringValue(N), bX, ag), ScriptTransfer(addressFromStringValue(N), ap, an)]
374364 }
375365 }
376366
377367
378368
379-@Callable(bi)
380-func redeemFromPool (P,bX) = {
369+@Callable(bz)
370+func redeemFromPool (P,bZ) = {
381371 let N = aq(P)
382- let bv = ae(N)
383- let bY = toString(bi.caller)
384- let bZ = aP(N, bY)
385- let ca = aR(N, bY)
386- if ((toBase58String(bi.callerPublicKey) != x))
372+ let bk = ae(N)
373+ let ca = toString(bz.caller)
374+ let cb = aP(N, ca)
375+ let cc = aR(N, ca)
376+ if ((toBase58String(bz.callerPublicKey) != x))
387377 then throw("Only Admin can perform contract operation.")
388378 else if ((g(B) == false))
389379 then throw("Contract is not yet ready.")
390380 else if ((N == ""))
391381 then throw((("Cannot find asset " + P) + "."))
392- else if (if (if ((0 > bX))
382+ else if (if (if ((0 > bZ))
393383 then true
394- else (bZ == 0))
384+ else (cb == 0))
395385 then true
396- else (bX > bZ))
397- then throw((("Cannot find pool maker by address " + bY) + " or amount passed is not correct."))
398- else if ((ca > 0))
386+ else (bZ > cb))
387+ then throw((("Cannot find pool maker by address " + ca) + " or amount passed is not correct."))
388+ else if ((cc > 0))
399389 then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
400- else [IntegerEntry(ac(N, bY), bX), IntegerEntry(ad(N, bY), (height + aH(bv)))]
390+ else [IntegerEntry(ac(N, ca), bZ), IntegerEntry(ad(N, ca), (height + aH(bk)))]
401391 }
402392
403393
404394
405-@Callable(bi)
395+@Callable(bz)
396+func getMaxAllowedAmountToRedeem (P,cd) = throw((((("{allowedAmountToRedeem: 1000, assetCode: " + P) + ", poolMaker: ") + cd) + "}"))
397+
398+
399+
400+@Callable(bz)
406401 func withdraw (P) = {
407- let bv = ae(P)
402+ let bk = ae(P)
408403 let N = aq(P)
409- let aU = addressFromStringValue(aA(bv))
410- let bY = toString(bi.caller)
411- let cb = valueOrErrorMessage(assetInfo(fromBase58String(N)), ("Cannot find asset by id " + N))
412- let cc = assetBalance(this, ag)
413- let cd = aP(N, bY)
414- let ca = aR(N, bY)
415- let ce = aS(N, bY)
416- let cf = (aN(N) / aQ(N, bY))
417- if ((toBase58String(bi.callerPublicKey) != x))
404+ let aU = addressFromStringValue(aA(bk))
405+ let ca = toString(bz.caller)
406+ let ce = valueOrErrorMessage(assetInfo(fromBase58String(N)), ("Cannot find asset by id " + N))
407+ let cf = assetBalance(this, ag)
408+ let cg = aP(N, ca)
409+ let cc = aR(N, ca)
410+ let ch = aS(N, ca)
411+ let ci = (aN(N) / aQ(N, ca))
412+ if ((toBase58String(bz.callerPublicKey) != x))
418413 then throw("Only Admin can perform contract operation.")
419414 else if ((g(B) == false))
420415 then throw("Contract is not yet ready.")
422417 then throw("Contract is not yet ready.")
423418 else if ((N == ""))
424419 then throw((("Cannot find asset " + P) + "."))
425- else if ((cd == 0))
426- then throw((("Cannot find pool maker by address " + bY) + " or no locked amount."))
427- else if ((height > ce))
428- then throw((("Please wait " + toString(ce)) + " before withdraw."))
420+ else if ((cg == 0))
421+ then throw((("Cannot find pool maker by address " + ca) + " or no locked amount."))
422+ else if ((height > ch))
423+ then throw((("Please wait " + toString(ch)) + " before withdraw."))
429424 else {
430- let cg = cb.quantity
431- let ch = aT(aU, P)
432- let ci = aR(N, bY)
433- let cj = (ay(bv) * ch)
434- let ck = (cj * cg)
435- if ((cc > ck))
425+ let cj = ce.quantity
426+ let ck = aT(aU, P)
427+ let cl = aR(N, ca)
428+ let cm = (ay(bk) * ck)
429+ let cn = (cm * cj)
430+ if ((cf > cn))
436431 then {
437- let cl = (cc - ck)
438- let cm = (cf * cl)
439- let cn = (aR(N, bY) - cm)
440-[IntegerEntry(S(N), (aM(N) - cm)), IntegerEntry(Z(N, bY), (aP(N, bY) - cm)), IntegerEntry(ac(N, bY), cn), ScriptTransfer(addressFromStringValue(bY), cm, ag)]
432+ let co = (cf - cn)
433+ let cp = (ci * co)
434+ let cq = (aR(N, ca) - cp)
435+[IntegerEntry(S(N), (aM(N) - cp)), IntegerEntry(Z(N, ca), (aP(N, ca) - cp)), IntegerEntry(ac(N, ca), cq), ScriptTransfer(addressFromStringValue(ca), cp, ag)]
441436 }
442437 else nil
443438 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b,c) = split(b, c)
55
66
77 func d (e,f) = valueOrElse(getString(e, f), "")
88
99
1010 func g (f) = valueOrElse(getBoolean(this, f), false)
1111
1212
1313 let h = 1
1414
1515 let i = 2
1616
1717 let j = 3
1818
1919 let k = 4
2020
2121 let l = 5
2222
2323 let m = 6
2424
2525 let n = 7
2626
2727 let o = 8
2828
2929 let p = 9
3030
3131 let q = 10
3232
3333 let r = 11
3434
3535 let s = 12
3636
3737 let t = 13
3838
3939 let u = 14
4040
4141 let v = 15
4242
4343 let w = 16
4444
4545 let x = "G1Ebu5AMHaTJFEbZNkZQcJFUQ9KfiYUwupyLG857DcFr"
4646
4747 let y = "%s%s__commonConfig__neutrinoContractAddress"
4848
4949 let z = "%s%s__commonConfig__neutrinoStakingAddress"
5050
5151 let A = "%s%s__commonConfig__minimumPoolFundingAmount"
5252
5353 let B = "%s%s__commonConfig__initialized"
5454
5555 let C = "%s%s__commonConfig__predefinedAssetsActiveIndex"
5656
5757 let D = "%s%s__commonConfig__predefinedAssetsList"
5858
5959 let E = "%s%s__commonConfig__debtAssetId"
6060
6161 let F = "%s%s__commonConfig__debtAssetEtalonBalance"
6262
6363 let G = "%s%s__commonConfig__defoStakingAddress"
6464
6565 let H = "%s%s__commonConfig__defoStakingPacemakerPub"
6666
6767 let I = "neutrino_asset_id"
6868
6969 let J = "bond_asset_id"
7070
7171 let K = "%s__defoAssetId"
7272
7373 let L = "%s__assetScriptTxId"
7474
7575 func M (N) = (("%s%s%s__defoAsset__" + N) + "__config")
7676
7777
7878 func O (P) = ("%s%s__assetPrice__" + P)
7979
8080
8181 func Q (N) = (("%s%s%s__defoAsset__" + N) + "__initHeight")
8282
8383
8484 func R (N) = (("%s%s%s__defoAsset__" + N) + "__activateHeight")
8585
8686
8787 func S (N) = (("%s%s%s__defoAsset__" + N) + "__currentPool")
8888
8989
9090 func T (N) = (("%s%s%s__defoAsset__" + N) + "__maxPool")
9191
9292
9393 func U (N) = (("%s%s%s__defoAsset__" + N) + "__meta")
9494
9595
9696 func V (N) = (("%s%s%s__defoAsset__" + N) + "__poolMakers")
9797
9898
9999 func W (P) = (("%s%s%s__defoAsset__" + P) + "__addressByAssetCode")
100100
101101
102102 func X (Y) = (("%s%s%s__defoAsset__" + Y) + "__addressByAssetId")
103103
104104
105105 func Z (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__amount")
106106
107107
108108 func ab (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__maxAmount")
109109
110110
111111 func ac (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__lockedAmount")
112112
113113
114114 func ad (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__unlockHeight")
115115
116116
117117 func ae (N) = a(valueOrErrorMessage(d(this, M(N)), (("No DEFO Asset " + N) + "config present")), "__")
118118
119119
120120 let af = addressFromStringValue(valueOrErrorMessage(getString(this, y), "No neutrino contract specified."))
121121
122122 let ag = fromBase58String(valueOrErrorMessage(getString(af, I), "No USDN asset id found."))
123123
124124 let ah = fromBase58String(valueOrErrorMessage(getString(af, J), "No NSBT asset id found"))
125125
126126 let ai = valueOrErrorMessage(getInteger(this, A), "Minimum pool funding amount is not specified.")
127127
128128 let aj = $Tuple3("PROPOSED", "READY", "ISSUED")
129129
130130 let ak = valueOrErrorMessage(getString(this, D), "No pool of predeployed asset contracts found.")
131131
132132 let al = a(ak, ",")
133133
134134 let am = valueOrElse(getInteger(this, C), 0)
135135
136136 let an = fromBase58String(valueOrErrorMessage(getString(this, E), "No debt token found"))
137137
138138 let ao = 1000000
139139
140140 let ap = valueOrElse(getInteger(this, F), 0)
141141
142142 func aq (ar) = valueOrElse(getString(this, W(ar)), "")
143143
144144
145145 func as (at) = at[h]
146146
147147
148148 func au (at) = at[i]
149149
150150
151151 func av (at) = at[j]
152152
153153
154154 func aw (at) = parseIntValue(at[k])
155155
156156
157157 func ax (at) = at[l]
158158
159159
160160 func ay (at) = parseIntValue(at[m])
161161
162162
163163 func az (at) = parseIntValue(at[n])
164164
165165
166166 func aA (at) = at[o]
167167
168168
169169 func aB (at) = parseIntValue(at[p])
170170
171171
172172 func aC (at) = parseIntValue(at[q])
173173
174174
175175 func aD (at) = parseIntValue(at[r])
176176
177177
178178 func aE (at) = parseIntValue(at[s])
179179
180180
181181 func aF (at) = parseIntValue(at[t])
182182
183183
184184 func aG (at) = parseIntValue(at[u])
185185
186186
187187 func aH (at) = parseIntValue(at[v])
188188
189189
190190 func aI (at) = parseIntValue(at[w])
191191
192192
193193 func aJ (N) = valueOrElse(getString(this, V(N)), "")
194194
195195
196196 func aK (N) = valueOrElse(getInteger(this, Q(N)), 0)
197197
198198
199199 func aL (N) = valueOrElse(getInteger(this, R(N)), 0)
200200
201201
202202 func aM (N) = valueOrElse(getInteger(this, S(N)), 0)
203203
204204
205205 func aN (N) = valueOrElse(getInteger(this, T(N)), 0)
206206
207207
208208 func aO (N) = valueOrElse(getString(this, U(N)), "")
209209
210210
211211 func aP (N,aa) = valueOrElse(getInteger(this, Z(N, aa)), 0)
212212
213213
214214 func aQ (N,aa) = valueOrElse(getInteger(this, ab(N, aa)), 0)
215215
216216
217217 func aR (N,aa) = valueOrElse(getInteger(this, ac(N, aa)), 0)
218218
219219
220220 func aS (N,aa) = valueOrElse(getInteger(this, ad(N, aa)), 0)
221221
222222
223223 func aT (aU,P) = valueOrErrorMessage(getInteger(aU, O(P)), "No Asset price found")
224224
225225
226226 func aV (P,Y,aj,aW,aX,aY,aZ,aU,ba,bb,bc,bd,be,bf,bg,bh) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d", P, Y, aj, toString(aW), aX, toString(aY), toString(aZ), aU, toString(ba), toString(bb), toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh)], "__")
227227
228228
229-@Callable(bi)
230-func init (bj,bk,bl,bm,am,bn,bo,bp) = if ((toBase58String(bi.callerPublicKey) != x))
229+func bi (bj,bk) = {
230+ let bl = as(bk)
231+ let bm = au(bk)
232+ let bn = aw(bk)
233+ let bo = ax(bk)
234+ let bp = ay(bk)
235+ let bq = az(bk)
236+ let br = aA(bk)
237+ let bs = aB(bk)
238+ let bt = aC(bk)
239+ let bu = aD(bk)
240+ let bv = aE(bk)
241+ let bw = aF(bk)
242+ let bx = aG(bk)
243+ let by = aH(bk)
244+ let bh = aI(bk)
245+ aV(bl, bm, bj, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bh)
246+ }
247+
248+
249+@Callable(bz)
250+func init (bA,bB,bC,bD,am,bE,bF,bG) = if ((toBase58String(bz.callerPublicKey) != x))
231251 then throw("Only Admin can perform contract operation.")
232252 else if ((g(B) == true))
233253 then throw("Contract was already initialized.")
234254 else {
235- let bq = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
236- let br = calculateAssetId(bq)
237-[StringEntry(y, bj), StringEntry(z, bk), IntegerEntry(A, bl), StringEntry(D, bm), IntegerEntry(C, am), IntegerEntry(F, bn), StringEntry(E, toBase58String(br)), StringEntry(G, bo), StringEntry(H, bp), BooleanEntry(B, true), bq, Burn(br, 1)]
255+ let bH = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
256+ let bI = calculateAssetId(bH)
257+[StringEntry(y, bA), StringEntry(z, bB), IntegerEntry(A, bC), StringEntry(D, bD), IntegerEntry(C, am), IntegerEntry(F, bE), StringEntry(E, toBase58String(bI)), StringEntry(G, bF), StringEntry(H, bG), BooleanEntry(B, true), bH, Burn(bI, 1)]
238258 }
239259
240260
241261
242-@Callable(bi)
243-func proposeAsset (P,bs,aZ,aU,aY,aX,aW,ba,bb,bc,bd,be,bf,bg,bh) = if ((toBase58String(bi.callerPublicKey) != x))
262+@Callable(bz)
263+func proposeAsset (P,bJ,aZ,aU,aY,aX,aW,ba,bb,bc,bd,be,bf,bg,bh) = if ((toBase58String(bz.callerPublicKey) != x))
244264 then throw("Only Admin can perform contract operation.")
245265 else if ((g(B) == false))
246266 then throw("Contract is not yet ready.")
247267 else if ((fromBase58String(aX) != ag))
248268 then throw("Baking asset id could be USDN only.")
249269 else if ((aq(P) != ""))
250270 then throw((("Asset with passed code " + P) + " has already been proposed."))
251271 else if ((ai > aZ))
252272 then throw(("Minimum pool amount should be greater or equals to " + toString(ai)))
253273 else if (if (if (if (if (if (if (if ((0 > aY))
254274 then true
255275 else (0 > aW))
256276 then true
257277 else (0 > ba))
258278 then true
259279 else (0 > bb))
260280 then true
261281 else (0 > bc))
262282 then true
263283 else (0 > bd))
264284 then true
265285 else (0 > be))
266286 then true
267287 else (0 > bf))
268288 then throw("One of the passed parameters is invalid.")
269289 else {
270- let bt = valueOrErrorMessage(addressFromStringValue(aU), "Passed Price Oracle Address is not valid.")
290+ let bK = valueOrErrorMessage(addressFromStringValue(aU), "Passed Price Oracle Address is not valid.")
271291 let N = al[am]
272- let bu = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(N), ""), K), "No defo asset ID found.")
273-[StringEntry(M(N), aV(P, bu, aj._1, aW, aX, aY, aZ, aU, ba, bb, bc, bd, be, bf, bg, bh)), StringEntry(W(P), N), StringEntry(U(N), bs), IntegerEntry(Q(N), height), IntegerEntry(C, (am + 1)), StringEntry(X(bu), N)]
292+ let bL = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(N), ""), K), "No defo asset ID found.")
293+[StringEntry(M(N), aV(P, bL, aj._1, aW, aX, aY, aZ, aU, ba, bb, bc, bd, be, bf, bg, bh)), StringEntry(W(P), N), StringEntry(U(N), bJ), IntegerEntry(Q(N), height), IntegerEntry(C, (am + 1)), StringEntry(X(bL), N)]
274294 }
275295
276296
277297
278-@Callable(bi)
298+@Callable(bz)
279299 func fundLiquidityPool (P) = {
280300 let N = aq(P)
281- let bv = ae(N)
282- let bw = value(bi.payments[0])
283- if ((toBase58String(bi.callerPublicKey) != x))
301+ let bk = ae(N)
302+ let bM = value(bz.payments[0])
303+ if ((toBase58String(bz.callerPublicKey) != x))
284304 then throw("Only Admin can perform contract operation.")
285305 else if ((g(B) == false))
286306 then throw("Contract is not yet ready.")
287- else if ((bw.assetId != ag))
307+ else if ((bM.assetId != ag))
288308 then throw("Liquidity pool could be funded with USDN only.")
289- else if ((bw.amount == 0))
309+ else if ((bM.amount == 0))
290310 then throw("Incorrect attached payment amount.")
291311 else if ((N == ""))
292312 then throw((("Cannot find liquidity pool for asset " + P) + "."))
293313 else {
294- let bx = (bw.amount + aM(N))
295- let by = aN(N)
296- let aa = toString(bi.caller)
297- let bz = aP(N, aa)
298- let bA = aQ(N, aa)
299- let bB = av(bv)
300- let bC = if (if ((bx >= az(bv)))
301- then (bB == aj._1)
314+ let bN = (bM.amount + aM(N))
315+ let bO = aN(N)
316+ let aa = toString(bz.caller)
317+ let bP = aP(N, aa)
318+ let bQ = aQ(N, aa)
319+ let bR = av(bk)
320+ let bS = if (if ((bN >= az(bk)))
321+ then (bR == aj._1)
302322 else false)
303323 then aj._2
304- else bB
305- let bD = aJ(N)
306- let bE = if ((bD == ""))
324+ else bR
325+ let bT = aJ(N)
326+ let bU = if ((bT == ""))
307327 then aa
308- else if (contains(bD, aa))
309- then bD
310- else ((bD + ",") + toString(bi.caller))
311- let bF = as(bv)
312- let bG = au(bv)
313- let bH = aw(bv)
314- let bI = ax(bv)
315- let bJ = ay(bv)
316- let bK = az(bv)
317- let bL = aA(bv)
318- let bM = aB(bv)
319- let bN = aC(bv)
320- let bO = aD(bv)
321- let bP = aE(bv)
322- let bQ = aF(bv)
323- let bR = aG(bv)
324- let bS = aH(bv)
325- let bh = aI(bv)
326- let bT = (bz + bi.payments[0].amount)
327- let bU = [IntegerEntry(Z(N, toString(bi.caller)), bT), IntegerEntry(ab(N, toString(bi.caller)), if ((bT > bA))
328- then bT
329- else bA), IntegerEntry(S(N), bx), IntegerEntry(T(N), if ((bx > by))
330- then bx
331- else by), DeleteEntry(M(N)), StringEntry(V(N), bE), StringEntry(M(N), aV(bF, bG, bC, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bh))]
332- if ((bB == aj._3))
333- then (bU :+ ScriptTransfer(addressFromStringValue(N), bw.amount, ag))
334- else bU
328+ else if (contains(bT, aa))
329+ then bT
330+ else ((bT + ",") + toString(bz.caller))
331+ let bV = (bP + bz.payments[0].amount)
332+ let bW = [IntegerEntry(Z(N, toString(bz.caller)), bV), IntegerEntry(ab(N, toString(bz.caller)), if ((bV > bQ))
333+ then bV
334+ else bQ), IntegerEntry(S(N), bN), IntegerEntry(T(N), if ((bN > bO))
335+ then bN
336+ else bO), StringEntry(V(N), bU), StringEntry(M(N), bi(bS, bk))]
337+ if ((bR == aj._3))
338+ then (bW :+ ScriptTransfer(addressFromStringValue(N), bM.amount, ag))
339+ else bW
335340 }
336341 }
337342
338343
339344
340-@Callable(bi)
345+@Callable(bz)
341346 func activateAsset (P) = {
342347 let N = aq(P)
343- let bv = ae(N)
344- let bV = aM(N)
345- let bF = as(bv)
346- let bW = av(bv)
347- let bG = au(bv)
348- let bH = aw(bv)
349- let bI = ax(bv)
350- let bJ = ay(bv)
351- let bK = az(bv)
352- let bL = aA(bv)
353- let bM = aB(bv)
354- let bN = aC(bv)
355- let bO = aD(bv)
356- let bP = aE(bv)
357- let bQ = aF(bv)
358- let bR = aG(bv)
359- let bS = aH(bv)
360- let bh = aI(bv)
361- if ((toBase58String(bi.callerPublicKey) != x))
348+ let bk = ae(N)
349+ let bX = aM(N)
350+ let bY = av(bk)
351+ if ((toBase58String(bz.callerPublicKey) != x))
362352 then throw("Only Admin can perform contract operation.")
363353 else if ((g(B) == false))
364354 then throw("Contract is not yet ready.")
365- else if ((bW != aj._2))
366- then throw((("Asset is not in READY status. Current status is " + bW) + "."))
355+ else if ((bY != aj._2))
356+ then throw((("Asset is not in READY status. Current status is " + bY) + "."))
367357 else if ((N == ""))
368358 then throw((("Cannot find asset " + P) + "."))
369- else if ((ai > bV))
370- then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bV)) + ") is less than required (") + toString(ai)) + ")"))
359+ else if ((ai > bX))
360+ then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bX)) + ") is less than required (") + toString(ai)) + ")"))
371361 else {
372- let bq = Reissue(an, ap, true)
373-[IntegerEntry(R(N), height), DeleteEntry(M(N)), StringEntry(M(N), aV(bF, bG, aj._3, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bh)), bq, ScriptTransfer(addressFromStringValue(N), bV, ag), ScriptTransfer(addressFromStringValue(N), ap, an)]
362+ let bH = Reissue(an, ap, true)
363+[IntegerEntry(R(N), height), StringEntry(M(N), bi(aj._3, bk)), bH, ScriptTransfer(addressFromStringValue(N), bX, ag), ScriptTransfer(addressFromStringValue(N), ap, an)]
374364 }
375365 }
376366
377367
378368
379-@Callable(bi)
380-func redeemFromPool (P,bX) = {
369+@Callable(bz)
370+func redeemFromPool (P,bZ) = {
381371 let N = aq(P)
382- let bv = ae(N)
383- let bY = toString(bi.caller)
384- let bZ = aP(N, bY)
385- let ca = aR(N, bY)
386- if ((toBase58String(bi.callerPublicKey) != x))
372+ let bk = ae(N)
373+ let ca = toString(bz.caller)
374+ let cb = aP(N, ca)
375+ let cc = aR(N, ca)
376+ if ((toBase58String(bz.callerPublicKey) != x))
387377 then throw("Only Admin can perform contract operation.")
388378 else if ((g(B) == false))
389379 then throw("Contract is not yet ready.")
390380 else if ((N == ""))
391381 then throw((("Cannot find asset " + P) + "."))
392- else if (if (if ((0 > bX))
382+ else if (if (if ((0 > bZ))
393383 then true
394- else (bZ == 0))
384+ else (cb == 0))
395385 then true
396- else (bX > bZ))
397- then throw((("Cannot find pool maker by address " + bY) + " or amount passed is not correct."))
398- else if ((ca > 0))
386+ else (bZ > cb))
387+ then throw((("Cannot find pool maker by address " + ca) + " or amount passed is not correct."))
388+ else if ((cc > 0))
399389 then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
400- else [IntegerEntry(ac(N, bY), bX), IntegerEntry(ad(N, bY), (height + aH(bv)))]
390+ else [IntegerEntry(ac(N, ca), bZ), IntegerEntry(ad(N, ca), (height + aH(bk)))]
401391 }
402392
403393
404394
405-@Callable(bi)
395+@Callable(bz)
396+func getMaxAllowedAmountToRedeem (P,cd) = throw((((("{allowedAmountToRedeem: 1000, assetCode: " + P) + ", poolMaker: ") + cd) + "}"))
397+
398+
399+
400+@Callable(bz)
406401 func withdraw (P) = {
407- let bv = ae(P)
402+ let bk = ae(P)
408403 let N = aq(P)
409- let aU = addressFromStringValue(aA(bv))
410- let bY = toString(bi.caller)
411- let cb = valueOrErrorMessage(assetInfo(fromBase58String(N)), ("Cannot find asset by id " + N))
412- let cc = assetBalance(this, ag)
413- let cd = aP(N, bY)
414- let ca = aR(N, bY)
415- let ce = aS(N, bY)
416- let cf = (aN(N) / aQ(N, bY))
417- if ((toBase58String(bi.callerPublicKey) != x))
404+ let aU = addressFromStringValue(aA(bk))
405+ let ca = toString(bz.caller)
406+ let ce = valueOrErrorMessage(assetInfo(fromBase58String(N)), ("Cannot find asset by id " + N))
407+ let cf = assetBalance(this, ag)
408+ let cg = aP(N, ca)
409+ let cc = aR(N, ca)
410+ let ch = aS(N, ca)
411+ let ci = (aN(N) / aQ(N, ca))
412+ if ((toBase58String(bz.callerPublicKey) != x))
418413 then throw("Only Admin can perform contract operation.")
419414 else if ((g(B) == false))
420415 then throw("Contract is not yet ready.")
421416 else if ((g(B) == false))
422417 then throw("Contract is not yet ready.")
423418 else if ((N == ""))
424419 then throw((("Cannot find asset " + P) + "."))
425- else if ((cd == 0))
426- then throw((("Cannot find pool maker by address " + bY) + " or no locked amount."))
427- else if ((height > ce))
428- then throw((("Please wait " + toString(ce)) + " before withdraw."))
420+ else if ((cg == 0))
421+ then throw((("Cannot find pool maker by address " + ca) + " or no locked amount."))
422+ else if ((height > ch))
423+ then throw((("Please wait " + toString(ch)) + " before withdraw."))
429424 else {
430- let cg = cb.quantity
431- let ch = aT(aU, P)
432- let ci = aR(N, bY)
433- let cj = (ay(bv) * ch)
434- let ck = (cj * cg)
435- if ((cc > ck))
425+ let cj = ce.quantity
426+ let ck = aT(aU, P)
427+ let cl = aR(N, ca)
428+ let cm = (ay(bk) * ck)
429+ let cn = (cm * cj)
430+ if ((cf > cn))
436431 then {
437- let cl = (cc - ck)
438- let cm = (cf * cl)
439- let cn = (aR(N, bY) - cm)
440-[IntegerEntry(S(N), (aM(N) - cm)), IntegerEntry(Z(N, bY), (aP(N, bY) - cm)), IntegerEntry(ac(N, bY), cn), ScriptTransfer(addressFromStringValue(bY), cm, ag)]
432+ let co = (cf - cn)
433+ let cp = (ci * co)
434+ let cq = (aR(N, ca) - cp)
435+[IntegerEntry(S(N), (aM(N) - cp)), IntegerEntry(Z(N, ca), (aP(N, ca) - cp)), IntegerEntry(ac(N, ca), cq), ScriptTransfer(addressFromStringValue(ca), cp, ag)]
441436 }
442437 else nil
443438 }
444439 }
445440
446441

github/deemru/w8io/169f3d6 
112.42 ms