tx · CPJB5joxvFgG32MBER99dRvaNBP6Muppf57FKHmYdjQ8

3MzZHxrkRbRqZP5dpijtdS214bByrMJf4Mw:  -0.01000000 Waves

2020.08.25 17:30 [1148514] smart account 3MzZHxrkRbRqZP5dpijtdS214bByrMJf4Mw > SELF 0.00000000 Waves

{ "type": 13, "id": "CPJB5joxvFgG32MBER99dRvaNBP6Muppf57FKHmYdjQ8", "fee": 1000000, "feeAssetId": null, "timestamp": 1598365954245, "version": 1, "sender": "3MzZHxrkRbRqZP5dpijtdS214bByrMJf4Mw", "senderPublicKey": "9AapNpUvdwmtNVs1QXxyNRCmceiyaBKwoJpktHdwdLSg", "proofs": [ "2BdPGQAyUcyaB2ZxXUoaLY7zLv9qV8Z4nBpVPqfPt8boFDGvm6M6MAjtV7bM4eVXjs5be5wFsSDQKCd8hkLTLqqt" ], "script": "base64:AAIDAAAAAAAAAAsIARIAEgASAwoBCAAAADoAAAAAC3BhcmFtUHJlZml4AgAAAAZwYXJhbV8AAAAAC2FkZHJlc3NCb29rCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUVoHUeTQTO77iaMaO0CyN+LlydsBXbwHeAAAAABN3aGl0ZWxpc3RBZGRyZXNzS2V5AgAAABB3aGl0ZWxpc3RBZGRyZXNzAAAAABdkQXBwV2hpdGVsaXN0QWRkcmVzc0tleQIAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MAAAAAEGJ1cm5lckFkZHJlc3NLZXkCAAAADWJ1cm5lckFkZHJlc3MAAAAAFGV4dHJhY3RlZEFkZHJlc3NCb29rCQEAAAAHZXh0cmFjdAAAAAEFAAAAC2FkZHJlc3NCb29rAQAAAA5nZXRTdHJpbmdQYXJhbQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAALcGFyYW1QcmVmaXgFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAADW5vIHN0cmluZyBrZXkBAAAAC2dldEludFBhcmFtAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAtwYXJhbVByZWZpeAUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAKbm8gaW50IGtleQEAAAAPZ2V0Qm9vbGVhblBhcmFtAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAtwYXJhbVByZWZpeAUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAADm5vIGJvb2xlYW4ga2V5AAAAAA1pc3N1ZXJBc3NldElkAQAAACDr5eccjXUksxmYwuxYRewDVTUV/98yyxzjYUH9ZUQVZAAAAAARaW52ZXN0bWVudEFzc2V0SWQBAAAAIA/yHBKs5MQ8muxGGqslqLDsugcrRsxtiHLwteKSSQG0AAAAABhpbnZlc3RtZW50QXNzZXRJZElzV2F2ZXMHAAAAABJvd25lckFkZHJlc3NTdHJpbmcJAQAAAA5nZXRTdHJpbmdQYXJhbQAAAAECAAAAFGlzc3VlckFjY291bnRBZGRyZXNzAAAAAAxvd25lckFkZHJlc3MJAQAAAAdleHRyYWN0AAAAAQkBAAAAEWFkZHJlc3NGcm9tU3RyaW5nAAAAAQUAAAASb3duZXJBZGRyZXNzU3RyaW5nAAAAABNhc3NldERlY2ltYWxzT2Zmc2V0AAAAAAAAAAABAAAAAA90b2tlbnNhbGVBbW91bnQJAQAAAAtnZXRJbnRQYXJhbQAAAAECAAAAD3Rva2Vuc2FsZUFtb3VudAAAAAAJc3RhcnRUaW1lCQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAAlzdGFydFRpbWUAAAAAB2VuZFRpbWUJAQAAAAtnZXRJbnRQYXJhbQAAAAECAAAAB2VuZFRpbWUAAAAABXByaWNlCQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAAVwcmljZQAAAAANc29mdENhcEFtb3VudAkBAAAAC2dldEludFBhcmFtAAAAAQIAAAANc29mdENhcEFtb3VudAAAAAAKbWluUGF5bWVudAkBAAAAC2dldEludFBhcmFtAAAAAQIAAAAKbWluUGF5bWVudAAAAAALc3dhcEFzc2V0SWQBAAAAAAAAAAAKc3dhcEFtb3VudAkBAAAAC2dldEludFBhcmFtAAAAAQIAAAAKc3dhcEFtb3VudAAAAAAJc3dhcFByaWNlCQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAAlzd2FwUHJpY2UAAAAAC2NvbXBhbnlUeXBlAAAAAAAAAAAAAAAAAAtpc1Rva2Vuc2FsZQAAAAAAAAAAAAAAAAAGaXNTd2FwAAAAAAAAAAABAAAAABJpc1Rva2Vuc2FsZUFuZFN3YXAAAAAAAAAAAAIAAAAAFnN3YXBLZXlTdW1BbW91bnRQcmVmaXgCAAAADnN3YXBTdW1BbW91bnQgAAAAABZzd2FwS2V5U3VtQXNzZXRzUHJlZml4AgAAAA5zd2FwU3VtQXNzZXRzIAAAAAARc3dhcEtleURpc3RBc3NldHMCAAAACnN3YXBBc3NldHMAAAAAFnN3YXBLZXlDb2xsZWN0ZWRBbW91bnQCAAAACnN3YXBBbW91bnQAAAAAEmtleVN1bUFtb3VudFByZWZpeAIAAAAKc3VtQW1vdW50IAAAAAAWa2V5U3VtUGFpZEFtb3VudFByZWZpeAIAAAALcGFpZEFtb3VudCAAAAAAEmtleVN1bUFzc2V0c1ByZWZpeAIAAAAKc3VtQXNzZXRzIAAAAAAVa2V5QWxsb3dBY2NvdW50UHJlZml4AgAAAAZhbGxvdyAAAAAADWtleURpc3RBc3NldHMCAAAABmFzc2V0cwAAAAASa2V5Q29sbGVjdGVkQW1vdW50AgAAAAZhbW91bnQAAAAACWtleUlzc3VlcgIAAAAGaXNzdWVyAAAAAAN2ZXICAAAABTUuMC4yAAAAAAp2YWxpZFN0YXRlAAAAAAAAAAPoAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAthZGRyZXNzQm9vawUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAFhCQAAAgAAAAECAAAABm5vIGtleQAAAAAQd2hpdGVsaXN0QWRkcmVzcwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEFAAAAE3doaXRlbGlzdEFkZHJlc3NLZXkAAAAAFGRBcHBXaGl0ZWxpc3RBZGRyZXNzCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQUAAAAXZEFwcFdoaXRlbGlzdEFkZHJlc3NLZXkAAAAADWJ1cm5lckFkZHJlc3MJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABBQAAABBidXJuZXJBZGRyZXNzS2V5AQAAABBpc1Rva2Vuc2FsZUFsbG93AAAAAAMJAAAAAAAAAgUAAAALY29tcGFueVR5cGUFAAAAC2lzVG9rZW5zYWxlBgkAAAAAAAACBQAAAAtjb21wYW55VHlwZQUAAAASaXNUb2tlbnNhbGVBbmRTd2FwAQAAAAtpc1N3YXBBbGxvdwAAAAADCQAAAAAAAAIFAAAAC2NvbXBhbnlUeXBl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MDEwMCBQYXltZW50IG11c3QgYmUgYXR0YWNoZWQBAAAADmdldFN3YXBQYXltZW50AAAAAQAAAAFpBAAAAAckbWF0Y2gwCAUAAAABaQAAAAdwYXltZW50AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9BdHRhY2hlZFBheW1lbnQEAAAAAXAFAAAAByRtYXRjaDAEAAAAC2lzUGF5bWVudE9rBAAAAAckbWF0Y2gxCAUAAAABcAAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAAApCeXRlVmVjdG9yBAAAAAdhc3NldElkBQAAAAckbWF0Y2gxCQAAAAAAAAIFAAAAB2Fzc2V0SWQFAAAAC3N3YXBBc3NldElkBwMFAAAAC2lzUGF5bWVudE9rAwkAAAAAAAACBQAAABNhc3NldERlY2ltYWxzT2Zmc2V0AAAAAAAAAAABAwkAAAAAAAACCQAAagAAAAIIBQAAAAFwAAAABmFtb3VudAUAAAAJc3dhcFByaWNlAAAAAAAAAAAACAUAAAABcAAAAAZhbW91bnQJAAACAAAAAQIAAAAwcGF5bWVudCBhbW91bnQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRva2VuIHByaWNlCAUAAAABcAAAAAZhbW91bnQJAAACAAAAAQIAAAAeSW52YWxpZCBhc3NldCBJRCBvZiBpbnZlc3RtZW50CQAAAgAAAAECAAAAGFBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAEAAAAfZ2V0SW52ZXN0b3JBZGRyZXNzRm9yV2l0aGRyYXdhbAAAAAIAAAAKYXJnQWRkcmVzcwAAAA1jYWxsZXJBZGRyZXNzAwkAAGYAAAACCQABMQAAAAEFAAAACmFyZ0FkZHJlc3MAAAAAAAAAAAoFAAAACmFyZ0FkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MAAAADAAAAAWkBAAAAB2RlcG9zaXQAAAAABAAAAAxjdXJyZW50UHJpY2UJAQAAAA9nZXRDdXJyZW50UHJpY2UAAAAABAAAAA1hY2NvdW50QW1vdW50CQEAAAAJZ2V0QW1vdW50AAAAAQUAAAASa2V5Q29sbGVjdGVkQW1vdW50BAAAAApkQXBwU3RhdHVzBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAFGRBcHBXaGl0ZWxpc3RBZGRyZXNzCQAEJQAAAAEFAAAABHRoaXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQD////////8GAMJAQAAAAEhAAAAAQkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAACQAAAgAAAAECAAAAOSMxMDAwIFRoaXMgZGVwb3NpdCBtZXRob2QgaXMgdW5zb3BwZXJ0ZWQgZm9yIHRoaXMgY29tcGFueQMJAQAAAAEhAAAAAQkBAAAACmhhc1N0YXJ0ZWQAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAIiMwMDAxIFRoZSBUb2tlbnNhbGUgd29ya3MgYmV0d2VlbiAJAAGkAAAAAQUAAAAJc3RhcnRUaW1lAgAAAAUgYW5kIAkAAaQAAAABBQAAAAdlbmRUaW1lAwkBAAAAEXRva2Vuc2FsZUhhc0VuZGVkAAAAAAkAAAIAAAABAgAAAGwjMDAwMiBUaGUgcmVxdWlyZWQgYW1vdW50IGhhcyBhbHJlYWR5IGJlZW4gYWNjdW11bGF0ZWQuIElmIHlvdSBhcmUgYW4gaW52ZXN0b3IsIHlvdSBjYW4gd2l0aGRyYXcgeW91ciBmdW5kcy4DCQAAAAAAAAIFAAAACmRBcHBTdGF0dXMA/////////BgJAAACAAAAAQIAAAAhIzAwMTAgVGhpcyBjb21wYW55IGlzIHVuc29wcGVydGVkBAAAAAdwYXltZW50CQEAAAAKZ2V0UGF5bWVudAAAAAEFAAAAAWkEAAAACmN1cnJlbnRLZXkJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAOaXNBY2NvdW50QWxsb3cEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAQd2hpdGVsaXN0QWRkcmVzcwUAAAAKY3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAP////////8BAwkAAAAAAAACBQAAAApjdXJyZW50S2V5BQAAABJvd25lckFkZHJlc3NTdHJpbmcJAAACAAAAAQIAAAAwIzAwMzAgVGhlIGlzc3VlciBjYW5gdCBpbnZlc3QgaW4gaXRzIG93biBjb21wYW55AwkAAGYAAAACBQAAAAp2YWxpZFN0YXRlBQAAAA5pc0FjY291bnRBbGxvdwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADEjMDAyMCBZb3VyIGFjY291bnQgaGFzIG5vIHJpZ2h0IHRvIHNlbmQgZnVuZHMuIF8gBQAAAApjdXJyZW50S2V5AgAAAAEgBQAAABJvd25lckFkZHJlc3NTdHJpbmcEAAAADWFjY291bnRBc3NldHMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAANa2V5RGlzdEFzc2V0cwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBQAAAA90b2tlbnNhbGVBbW91bnQEAAAACnRva2Vuc0NhbGMJAABrAAAAAwUAAAAHcGF5bWVudAUAAAATYXNzZXREZWNpbWFsc09mZnNldAUAAAAMY3VycmVudFByaWNlBAAAABJtaW5QYXltZW50SW5Bc3NldHMJAABrAAAAAwUAAAAKbWluUGF5bWVudAUAAAATYXNzZXREZWNpbWFsc09mZnNldAUAAAAMY3VycmVudFByaWNlAwMDCQAAZgAAAAIAAAAAAAAAAAAJAABlAAAAAgUAAAANYWNjb3VudEFzc2V0cwUAAAAKdG9rZW5zQ2FsYwYJAABmAAAAAgUAAAASbWluUGF5bWVudEluQXNzZXRzBQAAAAp0b2tlbnNDYWxjBgMJAQAAAAIhPQAAAAIFAAAACnRva2Vuc0NhbGMFAAAADWFjY291bnRBc3NldHMJAABmAAAAAgUAAAAKdG9rZW5zQ2FsYwkAAGUAAAACBQAAAA1hY2NvdW50QXNzZXRzBQAAABJtaW5QYXltZW50SW5Bc3NldHMHCQAAAgAAAAECAAAAHyMwNDAwIEluY29ycmVjdCBwYXltZW50IGFtb3VudC4EAAAAEW5ld0ludmVzdG9yQW1vdW50CQAAZAAAAAIJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAEmtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQUAAAAHcGF5bWVudAQAAAARbmV3SW52ZXN0b3JBc3NldHMJAABkAAAAAgkBAAAACWdldEFtb3VudAAAAAEJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5BQAAAAp0b2tlbnNDYWxjBAAAABBuZXdBY2NvdW50QXNzZXRzCQAAZQAAAAIFAAAADWFjY291bnRBc3NldHMFAAAACnRva2Vuc0NhbGMEAAAAEG5ld0FjY291bnRBbW91bnQJAABkAAAAAgUAAAANYWNjb3VudEFtb3VudAUAAAAHcGF5bWVudAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAAEW5ld0ludmVzdG9yQW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQUAAAARbmV3SW52ZXN0b3JBc3NldHMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWtleURpc3RBc3NldHMFAAAAEG5ld0FjY291bnRBc3NldHMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEmtleUNvbGxlY3RlZEFtb3VudAUAAAAQbmV3QWNjb3VudEFtb3VudAUAAAADbmlsAAAAAWkBAAAAC3N3YXBEZXBvc2l0AAAAAAQAAAAMY3VycmVudFByaWNlBQAAAAlzd2FwUHJpY2UEAAAADWFjY291bnRBbW91bnQJAQAAAAlnZXRBbW91bnQAAAABBQAAABZzd2FwS2V5Q29sbGVjdGVkQW1vdW50BAAAAApkQXBwU3RhdHVzBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAFGRBcHBXaGl0ZWxpc3RBZGRyZXNzCQAEJQAAAAEFAAAABHRoaXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQD////////8GAMJAQAAAAEhAAAAAQkBAAAAC2lzU3dhcEFsbG93AAAAAAkAAAIAAAABAgAAAD4jMjAwMCBUaGlzIHN3YXAtZGVwb3NpdCBtZXRob2QgaXMgdW5zb3BwZXJ0ZWQgZm9yIHRoaXMgY29tcGFueQMJAQAAAAEhAAAAAQkBAAAACmhhc1N0YXJ0ZWQAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAHFRoZSBUb2tlbnNhbGUgd29ya3MgYmV0d2VlbiAJAAGkAAAAAQUAAAAJc3RhcnRUaW1lAgAAAAUgYW5kIAkAAaQAAAABBQAAAAdlbmRUaW1lAwkBAAAADHN3YXBIYXNFbmRlZAAAAAAJAAACAAAAAQIAAABmVGhlIHJlcXVpcmVkIGFtb3VudCBoYXMgYWxyZWFkeSBiZWVuIGFjY3VtdWxhdGVkLiBJZiB5b3UgYXJlIGFuIGludmVzdG9yLCB5b3UgY2FuIHdpdGhkcmF3IHlvdXIgZnVuZHMuAwkAAAAAAAACBQAAAApkQXBwU3RhdHVzAP////////wYCQAAAgAAAAECAAAAISMwMDEwIFRoaXMgY29tcGFueSBpcyB1bnN1cHBvcnRlZAQAAAAHcGF5bWVudAkBAAAADmdldFN3YXBQYXltZW50AAAAAQUAAAABaQQAAAAKY3VycmVudEtleQkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA5pc0FjY291bnRBbGxvdwQAAAAHJG1hdGNoMAkABBoAAAACBQAAABB3aGl0ZWxpc3RBZGRyZXNzBQAAAApjdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEA/////////wEDCQAAZgAAAAIFAAAACnZhbGlkU3RhdGUFAAAADmlzQWNjb3VudEFsbG93CQAAAgAAAAECAAAALiMwMDIwIFlvdXIgYWNjb3VudCBoYXMgbm8gcmlnaHQgdG8gc2VuZCBmdW5kcy4EAAAADWFjY291bnRBc3NldHMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAARc3dhcEtleURpc3RBc3NldHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQUAAAAKc3dhcEFtb3VudAQAAAAKdG9rZW5zQ2FsYwkAAGsAAAADBQAAAAdwYXltZW50BQAAABNhc3NldERlY2ltYWxzT2Zmc2V0BQAAAAxjdXJyZW50UHJpY2UDCQAAZgAAAAIAAAAAAAAAAAAJAABlAAAAAgUAAAANYWNjb3VudEFzc2V0cwUAAAAKdG9rZW5zQ2FsYwkAAAIAAAABAgAAABlJbmNvcnJlY3QgcGF5bWVudCBhbW91bnQuBAAAABFuZXdJbnZlc3RvckFtb3VudAkAAGQAAAACCQEAAAAJZ2V0QW1vdW50AAAAAQkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5BQAAAAdwYXltZW50BAAAABFuZXdJbnZlc3RvckFzc2V0cwkAAGQAAAACCQEAAAAJZ2V0QW1vdW50AAAAAQkAASwAAAACBQAAABZzd2FwS2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5BQAAAAp0b2tlbnNDYWxjBAAAABBuZXdBY2NvdW50QXNzZXRzCQAAZQAAAAIFAAAADWFjY291bnRBc3NldHMFAAAACnRva2Vuc0NhbGMEAAAAEG5ld0FjY291bnRBbW91bnQJAABkAAAAAgUAAAANYWNjb3VudEFtb3VudAUAAAAHcGF5bWVudAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5BQAAABFuZXdJbnZlc3RvckFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5BQAAABFuZXdJbnZlc3RvckFzc2V0cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARc3dhcEtleURpc3RBc3NldHMFAAAAEG5ld0FjY291bnRBc3NldHMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAFnN3YXBLZXlDb2xsZWN0ZWRBbW91bnQFAAAAEG5ld0FjY291bnRBbW91bnQFAAAAA25pbAAAAAFpAQAAAAp3aXRoZHJhd2FsAAAAAQAAAAdhZGRyZXNzBAAAAApkQXBwU3RhdHVzBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAFGRBcHBXaGl0ZWxpc3RBZGRyZXNzCQAEJQAAAAEFAAAABHRoaXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAMJAAAAAAAAAgUAAAAKZEFwcFN0YXR1cwAAAAAAAAAAAAkAAAIAAAABAgAAAEgjMDAzMCBXaXRoZHJhd2FscyBhcmUgbm90IGF2YWlsYWJsZSB1bnRpbCB0aGUgaXNzdWVyIHBhc3NlcyB2ZXJpZmljYXRpb24EAAAACmN1cnJlbnRLZXkJAQAAAB9nZXRJbnZlc3RvckFkZHJlc3NGb3JXaXRoZHJhd2FsAAAAAgUAAAAHYWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABFjdXJyZW50S2V5QWRkcmVzcwkBAAAAB2V4dHJhY3QAAAABCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABBQAAAApjdXJyZW50S2V5BAAAABVjdXJyZW50SW52ZXN0b3JBc3NldHMJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQQAAAAVY3VycmVudEludmVzdG9yQW1vdW50CQEAAAAJZ2V0QW1vdW50AAAAAQkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkEAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBc3NldHMJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkEAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBbW91bnQJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkEAAAAEWFjY291bnRTd2FwQW1vdW50CQEAAAAJZ2V0QW1vdW50AAAAAQUAAAAWc3dhcEtleUNvbGxlY3RlZEFtb3VudAQAAAARYWNjb3VudFN3YXBBc3NldHMJAQAAAAlnZXRBbW91bnQAAAABBQAAABFzd2FwS2V5RGlzdEFzc2V0cwQAAAANYWNjb3VudEFtb3VudAkBAAAACWdldEFtb3VudAAAAAEFAAAAEmtleUNvbGxlY3RlZEFtb3VudAQAAAANYWNjb3VudEFzc2V0cwkBAAAACWdldEFtb3VudAAAAAEFAAAADWtleURpc3RBc3NldHMEAAAAHGludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIJAQAAAB9nZXRJbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyAAAAAgUAAAAYaW52ZXN0bWVudEFzc2V0SWRJc1dhdmVzBQAAABFpbnZlc3RtZW50QXNzZXRJZAMJAQAAAAEhAAAAAQkBAAAAD2NvbXBhbnlIYXNFbmRlZAAAAAAJAAACAAAAAQIAAAAhIzAwMDMgVGhlIENvbXBhbnkgaXMgc3RpbGwgYWN0aXZlAwMJAAAAAAAAAgUAAAAKY3VycmVudEtleQUAAAASb3duZXJBZGRyZXNzU3RyaW5nCQAAAAAAAAIFAAAACmRBcHBTdGF0dXMAAAAAAAAAAAEHBAAAABVpc3N1ZXJBbHJlYWR5R290RnVuZHMJAQAAAAlnZXRBbW91bnQAAAABBQAAAAlrZXlJc3N1ZXIDCQAAAAAAAAIFAAAAFWlzc3VlckFscmVhZHlHb3RGdW5kcwAAAAAAAAAAAAMDCQEAAAAQaXNUb2tlbnNhbGVBbGxvdwAAAAAJAQAAAAtpc1N3YXBBbGxvdwAAAAAHAwkAAGcAAAACBQAAAA1hY2NvdW50QW1vdW50BQAAAA1zb2Z0Q2FwQW1vdW50CQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAJa2V5SXNzdWVyAAAAAAAAAAABBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAAA1hY2NvdW50QW1vdW50BQAAABxpbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADG93bmVyQWRkcmVzcwUAAAARYWNjb3VudFN3YXBBbW91bnQFAAAAC3N3YXBBc3NldElkBQAAAANuaWwJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAlrZXlJc3N1ZXIAAAAAAAAAAAEFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAAEWFjY291bnRTd2FwQW1vdW50BQAAAAtzd2FwQXNzZXRJZAUAAAADbmlsAwkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAAAwkAAGcAAAACBQAAAA1hY2NvdW50QW1vdW50BQAAAA1zb2Z0Q2FwQW1vdW50CQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAJa2V5SXNzdWVyAAAAAAAAAAABBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAAA1hY2NvdW50QW1vdW50BQAAABxpbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyBQAAAANuaWwJAAACAAAAAQIAAAAZIzA1MDAgTm8gZnVuZHMgZm9yIGlzc3VlcgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAACWtleUlzc3VlcgAAAAAAAAAAAQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADG93bmVyQWRkcmVzcwUAAAARYWNjb3VudFN3YXBBbW91bnQFAAAAC3N3YXBBc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAtIzA3MDAgVGhlIGlzc3VlciBoYXMgYWxyZWFkeSB0YWtlbiBpdHMgc2hhcmUhAwMJAAAAAAAAAgUAAAAVY3VycmVudEludmVzdG9yQW1vdW50AAAAAAAAAAAACQAAAAAAAAIFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBbW91bnQAAAAAAAAAAAAHCQAAAgAAAAECAAAAFiMwNjAwIERvbid0IGhhdmUgbW9uZXkDAwkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAACQEAAAALaXNTd2FwQWxsb3cAAAAABwMDCQAAZgAAAAIFAAAADXNvZnRDYXBBbW91bnQFAAAADWFjY291bnRBbW91bnQJAAAAAAAAAgUAAAAKZEFwcFN0YXR1cwAAAAAAAAAAAQcJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAFWN1cnJlbnRJbnZlc3RvckFtb3VudAUAAAAcaW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAZY3VycmVudEludmVzdG9yU3dhcEFzc2V0cwUAAAANaXNzdWVyQXNzZXRJZAUAAAADbmlsAwkAAAAAAAACBQAAAApkQXBwU3RhdHVzAAAAAAAAAAABCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABVjdXJyZW50SW52ZXN0b3JBc3NldHMFAAAADWlzc3VlckFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBc3NldHMFAAAADWlzc3VlckFzc2V0SWQFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAVY3VycmVudEludmVzdG9yQW1vdW50BQAAABxpbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABljdXJyZW50SW52ZXN0b3JTd2FwQW1vdW50BQAAAAtzd2FwQXNzZXRJZAUAAAADbmlsAwkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAAAwMJAABnAAAAAgUAAAANYWNjb3VudEFtb3VudAUAAAANc29mdENhcEFtb3VudAkAAAAAAAACBQAAAApkQXBwU3RhdHVzAAAAAAAAAAABBwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABVjdXJyZW50SW52ZXN0b3JBc3NldHMFAAAADWlzc3VlckFzc2V0SWQFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABVjdXJyZW50SW52ZXN0b3JBbW91bnQFAAAAHGludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIFAAAAA25pbAMJAAAAAAAAAgUAAAAKZEFwcFN0YXR1cwAAAAAAAAAAAQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBc3NldHMFAAAADWlzc3VlckFzc2V0SWQFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBbW91bnQFAAAAC3N3YXBBc3NldElkBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPQnVyblRyYW5zYWN0aW9uBAAAAAJ0eAUAAAAHJG1hdGNoMAYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAElJlaXNzdWVUcmFuc2FjdGlvbgQAAAACdHgFAAAAByRtYXRjaDAHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAJ0eAUAAAAHJG1hdGNoMAkAAAAAAAACCAUAAAACdHgAAAAJcmVjaXBpZW50BQAAAA1idXJuZXJBZGRyZXNzAwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAZU2V0QXNzZXRTY3JpcHRUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAnR4BQAAAAckbWF0Y2gwBAAAAAR0eElkCQACWAAAAAEIBQAAAAJ0eAAAAAJpZAQAAAAJcEFkZHJlc3MxCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3MxBAAAAAlwQWRkcmVzczIJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczIEAAAACXBBZGRyZXNzMwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzMwQAAAAJcEFkZHJlc3M0CQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3M0BAAAAAlwQWRkcmVzczUJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczUEAAAACXBBZGRyZXNzNgkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzNgQAAAALcEtleTFTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczEFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXkyU2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3MyBQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5M1NpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzMwUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTRTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczQFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXk1U2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3M1BQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5NlNpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzNgUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAkAAGcAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgUAAAALcEtleTFTaWduZWQFAAAAC3BLZXkyU2lnbmVkBQAAAAtwS2V5M1NpZ25lZAUAAAALcEtleTRTaWduZWQFAAAAC3BLZXk1U2lnbmVkBQAAAAtwS2V5NlNpZ25lZAAAAAAAAAAAAwegr8I/", "chainId": 84, "height": 1148514, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let paramPrefix = "param_"
5+
6+let addressBook = Address(base58'3MwoVRAPfC2NKuuYJKHVAVtUFhq8MyTEfQh')
7+
8+let whitelistAddressKey = "whitelistAddress"
9+
10+let dAppWhitelistAddressKey = "dAppWhitelistAddress"
11+
12+let burnerAddressKey = "burnerAddress"
13+
14+let extractedAddressBook = extract(addressBook)
15+
16+func getStringParam (key) = match getString(this, (paramPrefix + key)) {
17+ case a: String =>
18+ a
19+ case _ =>
20+ throw("no string key")
21+}
22+
23+
24+func getIntParam (key) = match getInteger(this, (paramPrefix + key)) {
25+ case a: Int =>
26+ a
27+ case _ =>
28+ throw("no int key")
29+}
30+
31+
32+func getBooleanParam (key) = match getBoolean(this, (paramPrefix + key)) {
33+ case a: Boolean =>
34+ a
35+ case _ =>
36+ throw("no boolean key")
37+}
38+
39+
40+let issuerAssetId = base58'Gsr8u2xcuaDETDHxAHSpDr3R4AznS4as8xbz1K5VfNk3'
41+
42+let investmentAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
43+
44+let investmentAssetIdIsWaves = false
45+
46+let ownerAddressString = getStringParam("issuerAccountAddress")
47+
48+let ownerAddress = extract(addressFromString(ownerAddressString))
49+
50+let assetDecimalsOffset = 1
51+
52+let tokensaleAmount = getIntParam("tokensaleAmount")
53+
54+let startTime = getIntParam("startTime")
55+
56+let endTime = getIntParam("endTime")
57+
58+let price = getIntParam("price")
59+
60+let softCapAmount = getIntParam("softCapAmount")
61+
62+let minPayment = getIntParam("minPayment")
63+
64+let swapAssetId = base58''
65+
66+let swapAmount = getIntParam("swapAmount")
67+
68+let swapPrice = getIntParam("swapPrice")
69+
70+let companyType = 0
71+
72+let isTokensale = 0
73+
74+let isSwap = 1
75+
76+let isTokensaleAndSwap = 2
77+
78+let swapKeySumAmountPrefix = "swapSumAmount "
79+
80+let swapKeySumAssetsPrefix = "swapSumAssets "
81+
82+let swapKeyDistAssets = "swapAssets"
83+
84+let swapKeyCollectedAmount = "swapAmount"
85+
86+let keySumAmountPrefix = "sumAmount "
87+
88+let keySumPaidAmountPrefix = "paidAmount "
89+
90+let keySumAssetsPrefix = "sumAssets "
91+
92+let keyAllowAccountPrefix = "allow "
93+
94+let keyDistAssets = "assets"
95+
96+let keyCollectedAmount = "amount"
97+
98+let keyIssuer = "issuer"
99+
100+let ver = "5.0.2"
101+
102+let validState = 1000
103+
104+func getAddressFromBook (key) = match getString(addressBook, key) {
105+ case a: String =>
106+ Address(fromBase58String(a))
107+ case _ =>
108+ throw("no key")
109+}
110+
111+
112+let whitelistAddress = getAddressFromBook(whitelistAddressKey)
113+
114+let dAppWhitelistAddress = getAddressFromBook(dAppWhitelistAddressKey)
115+
116+let burnerAddress = getAddressFromBook(burnerAddressKey)
117+
118+func isTokensaleAllow () = if ((companyType == isTokensale))
119+ then true
120+ else (companyType == isTokensaleAndSwap)
121+
122+
123+func isSwapAllow () = if ((companyType == isSwap))
124+ then true
125+ else (companyType == isTokensaleAndSwap)
126+
127+
128+func getCurrentTime () = {
129+ let blockInfo = value(blockInfoByHeight(height))
130+ (blockInfo.timestamp / 1000)
131+ }
132+
133+
134+func getInvestmentAssetIdForTransfer (isWaves,assetId) = if ((isWaves == false))
135+ then assetId
136+ else unit
137+
138+
139+func getCurrentPrice () = price
140+
141+
142+func getAmount (key) = match getInteger(this, key) {
143+ case a: Int =>
144+ a
145+ case _ =>
146+ 0
147+}
148+
149+
150+func hasStarted () = (getCurrentTime() >= startTime)
151+
152+
153+func tokensaleHasEnded () = {
154+ let assets = match getInteger(this, keyDistAssets) {
155+ case a: Int =>
156+ a
157+ case _ =>
158+ tokensaleAmount
159+ }
160+ if ((getCurrentTime() > endTime))
161+ then true
162+ else (assets == 0)
163+ }
164+
165+
166+func swapHasEnded () = {
167+ let assets = match getInteger(this, swapKeyDistAssets) {
168+ case a: Int =>
169+ a
170+ case _ =>
171+ swapAmount
172+ }
173+ if ((getCurrentTime() > endTime))
174+ then true
175+ else (assets == 0)
176+ }
177+
178+
179+func companyHasEnded () = if (if (isSwapAllow())
180+ then isTokensaleAllow()
181+ else false)
182+ then if (tokensaleHasEnded())
183+ then swapHasEnded()
184+ else false
185+ else if (isTokensaleAllow())
186+ then tokensaleHasEnded()
187+ else if (isSwapAllow())
188+ then swapHasEnded()
189+ else false
190+
191+
192+func getPayment (i) = match i.payment {
193+ case p: AttachedPayment =>
194+ let isPaymentOk = match p.assetId {
195+ case assetId: ByteVector =>
196+ if (!(investmentAssetIdIsWaves))
197+ then (assetId == investmentAssetId)
198+ else false
199+ case _ =>
200+ (investmentAssetIdIsWaves == true)
201+ }
202+ if (isPaymentOk)
203+ then if ((assetDecimalsOffset == 1))
204+ then if (((p.amount % price) == 0))
205+ then p.amount
206+ else throw("#0300 payment amount must be a multiple of token price")
207+ else p.amount
208+ else throw("#0200 Invalid asset ID of investment")
209+ case _ =>
210+ throw("#0100 Payment must be attached")
211+}
212+
213+
214+func getSwapPayment (i) = match i.payment {
215+ case p: AttachedPayment =>
216+ let isPaymentOk = match p.assetId {
217+ case assetId: ByteVector =>
218+ (assetId == swapAssetId)
219+ case _ =>
220+ false
221+ }
222+ if (isPaymentOk)
223+ then if ((assetDecimalsOffset == 1))
224+ then if (((p.amount % swapPrice) == 0))
225+ then p.amount
226+ else throw("payment amount must be a multiple of token price")
227+ else p.amount
228+ else throw("Invalid asset ID of investment")
229+ case _ =>
230+ throw("Payment must be attached")
231+}
232+
233+
234+func getInvestorAddressForWithdrawal (argAddress,callerAddress) = if ((size(argAddress) > 10))
235+ then argAddress
236+ else callerAddress
237+
238+
239+@Callable(i)
240+func deposit () = {
241+ let currentPrice = getCurrentPrice()
242+ let accountAmount = getAmount(keyCollectedAmount)
243+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
244+ case a: Int =>
245+ a
246+ case _ =>
247+ -1000
248+ }
249+ if (!(isTokensaleAllow()))
250+ then throw("#1000 This deposit method is unsopperted for this company")
251+ else if (!(hasStarted()))
252+ then throw(((("#0001 The Tokensale works between " + toString(startTime)) + " and ") + toString(endTime)))
253+ else if (tokensaleHasEnded())
254+ then throw("#0002 The required amount has already been accumulated. If you are an investor, you can withdraw your funds.")
255+ else if ((dAppStatus == -1000))
256+ then throw("#0010 This company is unsopperted")
257+ else {
258+ let payment = getPayment(i)
259+ let currentKey = toBase58String(i.caller.bytes)
260+ let isAccountAllow = match getInteger(whitelistAddress, currentKey) {
261+ case a: Int =>
262+ a
263+ case _ =>
264+ -255
265+ }
266+ if ((currentKey == ownerAddressString))
267+ then throw("#0030 The issuer can`t invest in its own company")
268+ else if ((validState > isAccountAllow))
269+ then throw(((("#0020 Your account has no right to send funds. _ " + currentKey) + " ") + ownerAddressString))
270+ else {
271+ let accountAssets = match getInteger(this, keyDistAssets) {
272+ case a: Int =>
273+ a
274+ case _ =>
275+ tokensaleAmount
276+ }
277+ let tokensCalc = fraction(payment, assetDecimalsOffset, currentPrice)
278+ let minPaymentInAssets = fraction(minPayment, assetDecimalsOffset, currentPrice)
279+ if (if (if ((0 > (accountAssets - tokensCalc)))
280+ then true
281+ else (minPaymentInAssets > tokensCalc))
282+ then true
283+ else if ((tokensCalc != accountAssets))
284+ then (tokensCalc > (accountAssets - minPaymentInAssets))
285+ else false)
286+ then throw("#0400 Incorrect payment amount.")
287+ else {
288+ let newInvestorAmount = (getAmount((keySumAmountPrefix + currentKey)) + payment)
289+ let newInvestorAssets = (getAmount((keySumAssetsPrefix + currentKey)) + tokensCalc)
290+ let newAccountAssets = (accountAssets - tokensCalc)
291+ let newAccountAmount = (accountAmount + payment)
292+ WriteSet([DataEntry((keySumAmountPrefix + currentKey), newInvestorAmount), DataEntry((keySumAssetsPrefix + currentKey), newInvestorAssets), DataEntry(keyDistAssets, newAccountAssets), DataEntry(keyCollectedAmount, newAccountAmount)])
293+ }
294+ }
295+ }
296+ }
297+
298+
299+
300+@Callable(i)
301+func swapDeposit () = {
302+ let currentPrice = swapPrice
303+ let accountAmount = getAmount(swapKeyCollectedAmount)
304+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
305+ case a: Int =>
306+ a
307+ case _ =>
308+ -1000
309+ }
310+ if (!(isSwapAllow()))
311+ then throw("#2000 This swap-deposit method is unsopperted for this company")
312+ else if (!(hasStarted()))
313+ then throw(((("The Tokensale works between " + toString(startTime)) + " and ") + toString(endTime)))
314+ else if (swapHasEnded())
315+ then throw("The required amount has already been accumulated. If you are an investor, you can withdraw your funds.")
316+ else if ((dAppStatus == -1000))
317+ then throw("#0010 This company is unsupported")
318+ else {
319+ let payment = getSwapPayment(i)
320+ let currentKey = toBase58String(i.caller.bytes)
321+ let isAccountAllow = match getInteger(whitelistAddress, currentKey) {
322+ case a: Int =>
323+ a
324+ case _ =>
325+ -255
326+ }
327+ if ((validState > isAccountAllow))
328+ then throw("#0020 Your account has no right to send funds.")
329+ else {
330+ let accountAssets = match getInteger(this, swapKeyDistAssets) {
331+ case a: Int =>
332+ a
333+ case _ =>
334+ swapAmount
335+ }
336+ let tokensCalc = fraction(payment, assetDecimalsOffset, currentPrice)
337+ if ((0 > (accountAssets - tokensCalc)))
338+ then throw("Incorrect payment amount.")
339+ else {
340+ let newInvestorAmount = (getAmount((swapKeySumAmountPrefix + currentKey)) + payment)
341+ let newInvestorAssets = (getAmount((swapKeySumAssetsPrefix + currentKey)) + tokensCalc)
342+ let newAccountAssets = (accountAssets - tokensCalc)
343+ let newAccountAmount = (accountAmount + payment)
344+ WriteSet([DataEntry((swapKeySumAmountPrefix + currentKey), newInvestorAmount), DataEntry((swapKeySumAssetsPrefix + currentKey), newInvestorAssets), DataEntry(swapKeyDistAssets, newAccountAssets), DataEntry(swapKeyCollectedAmount, newAccountAmount)])
345+ }
346+ }
347+ }
348+ }
349+
350+
351+
352+@Callable(i)
353+func withdrawal (address) = {
354+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
355+ case a: Int =>
356+ a
357+ case _ =>
358+ 0
359+ }
360+ if ((dAppStatus == 0))
361+ then throw("#0030 Withdrawals are not available until the issuer passes verification")
362+ else {
363+ let currentKey = getInvestorAddressForWithdrawal(address, toBase58String(i.caller.bytes))
364+ let currentKeyAddress = extract(addressFromString(currentKey))
365+ let currentInvestorAssets = getAmount((keySumAssetsPrefix + currentKey))
366+ let currentInvestorAmount = getAmount((keySumAmountPrefix + currentKey))
367+ let currentInvestorSwapAssets = getAmount((swapKeySumAssetsPrefix + currentKey))
368+ let currentInvestorSwapAmount = getAmount((swapKeySumAmountPrefix + currentKey))
369+ let accountSwapAmount = getAmount(swapKeyCollectedAmount)
370+ let accountSwapAssets = getAmount(swapKeyDistAssets)
371+ let accountAmount = getAmount(keyCollectedAmount)
372+ let accountAssets = getAmount(keyDistAssets)
373+ let investmentAssetIdForTransfer = getInvestmentAssetIdForTransfer(investmentAssetIdIsWaves, investmentAssetId)
374+ if (!(companyHasEnded()))
375+ then throw("#0003 The Company is still active")
376+ else if (if ((currentKey == ownerAddressString))
377+ then (dAppStatus == 1)
378+ else false)
379+ then {
380+ let issuerAlreadyGotFunds = getAmount(keyIssuer)
381+ if ((issuerAlreadyGotFunds == 0))
382+ then if (if (isTokensaleAllow())
383+ then isSwapAllow()
384+ else false)
385+ then if ((accountAmount >= softCapAmount))
386+ then ScriptResult(WriteSet([DataEntry(keyIssuer, 1)]), TransferSet([ScriptTransfer(ownerAddress, accountAmount, investmentAssetIdForTransfer), ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]))
387+ else ScriptResult(WriteSet([DataEntry(keyIssuer, 1)]), TransferSet([ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]))
388+ else if (isTokensaleAllow())
389+ then if ((accountAmount >= softCapAmount))
390+ then ScriptResult(WriteSet([DataEntry(keyIssuer, 1)]), TransferSet([ScriptTransfer(ownerAddress, accountAmount, investmentAssetIdForTransfer)]))
391+ else throw("#0500 No funds for issuer")
392+ else ScriptResult(WriteSet([DataEntry(keyIssuer, 1)]), TransferSet([ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]))
393+ else throw("#0700 The issuer has already taken its share!")
394+ }
395+ else if (if ((currentInvestorAmount == 0))
396+ then (currentInvestorSwapAmount == 0)
397+ else false)
398+ then throw("#0600 Don't have money")
399+ else if (if (isTokensaleAllow())
400+ then isSwapAllow()
401+ else false)
402+ then if (if ((softCapAmount > accountAmount))
403+ then (dAppStatus == 1)
404+ else false)
405+ then ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0), DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer), ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]))
406+ else if ((dAppStatus == 1))
407+ then ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0), DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAssets, issuerAssetId), ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]))
408+ else ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0), DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer), ScriptTransfer(currentKeyAddress, currentInvestorSwapAmount, swapAssetId)]))
409+ else if (isTokensaleAllow())
410+ then if (if ((accountAmount >= softCapAmount))
411+ then (dAppStatus == 1)
412+ else false)
413+ then ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAssets, issuerAssetId)]))
414+ else ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer)]))
415+ else if ((dAppStatus == 1))
416+ then ScriptResult(WriteSet([DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]))
417+ else ScriptResult(WriteSet([DataEntry((swapKeySumAmountPrefix + currentKey), 0), DataEntry((swapKeySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(currentKeyAddress, currentInvestorSwapAmount, swapAssetId)]))
418+ }
419+ }
420+
421+
422+@Verifier(tx)
423+func verify () = match tx {
424+ case tx: BurnTransaction =>
425+ true
426+ case tx: ReissueTransaction =>
427+ false
428+ case tx: TransferTransaction =>
429+ (tx.recipient == burnerAddress)
430+ case tx: DataTransaction|SetAssetScriptTransaction|SetScriptTransaction =>
431+ let txId = toBase58String(tx.id)
432+ let pAddress1 = getAddressFromBook("pAddress1")
433+ let pAddress2 = getAddressFromBook("pAddress2")
434+ let pAddress3 = getAddressFromBook("pAddress3")
435+ let pAddress4 = getAddressFromBook("pAddress4")
436+ let pAddress5 = getAddressFromBook("pAddress5")
437+ let pAddress6 = getAddressFromBook("pAddress6")
438+ let pKey1Signed = if (isDefined(getInteger(pAddress1, txId)))
439+ then 1
440+ else 0
441+ let pKey2Signed = if (isDefined(getInteger(pAddress2, txId)))
442+ then 1
443+ else 0
444+ let pKey3Signed = if (isDefined(getInteger(pAddress3, txId)))
445+ then 1
446+ else 0
447+ let pKey4Signed = if (isDefined(getInteger(pAddress4, txId)))
448+ then 1
449+ else 0
450+ let pKey5Signed = if (isDefined(getInteger(pAddress5, txId)))
451+ then 1
452+ else 0
453+ let pKey6Signed = if (isDefined(getInteger(pAddress6, txId)))
454+ then 1
455+ else 0
456+ ((((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) + pKey6Signed) >= 3)
457+ case _ =>
458+ false
459+}
460+

github/deemru/w8io/3ef1775 
40.49 ms