tx · 32rWApqw4nfbKJoFxdMFrUFXtGB8yYeLgj8qWy66mrff

3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc:  -0.01800000 Waves

2022.11.25 17:46 [2332761] smart account 3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc > SELF 0.00000000 Waves

{ "type": 13, "id": "32rWApqw4nfbKJoFxdMFrUFXtGB8yYeLgj8qWy66mrff", "fee": 1800000, "feeAssetId": null, "timestamp": 1669387549434, "version": 2, "chainId": 84, "sender": "3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc", "senderPublicKey": "242mibE5dTci8wD6vghuCGxjDZdnNJr88H7gcWWehpEX", "proofs": [ "5Lff5og8D5kEf9wamXEFUfnwA9UtvZmmZ4GGi5Zdpjt9hGxxmJZQwr4XYwc6o6E5waL8oYaopC1tPtW8ubaUjpLz" ], "script": "base64:BgIvCAISBwoFCAEBAQESBAoCAQESBwoFCAgBARgSBwoFCAgBARgSAwoBARIDCgEBEgBXAAtyZXZpc2lvbk51bQIAAANTRVACAl9fAAdMSVNUU0VQAgE6AA1ERUZBVUxUUVVPUlVNAKDCHgAKVVJMUEFUVEVSTgIaaHR0cHM6Ly9mb3J1bS5uZXV0cmluby5hdC8ACE1BWFRJVExFAKABAAZNQVhVUkwA+gEADU1BWFZPVElOR1RJTUUAgJDkwAQABU1VTFQ2AMCEPQAOREVGQVVMVFBBWU1FTlQAgJTr3AMAFERFRkFVTFRDUkVBVElPTkdOU0JUAICU69wDAApQQVNUTUFSR0lOAIC6twMADEZVVFVSRU1BUkdJTgDAy8kCABJnb3ZJZHhQcm9wb3NhbFR4SWQAAQAKZ292SWR4VHlwZQACAAxnb3ZJZHhBdXRob3IAAwAJZ292SWR4VXJsAAQAC2dvdklkeFRpdGxlAAUAEmdvdklkeENyZWF0aW9uVGltZQAGAAtnb3ZJZHhTdGFydAAHAAlnb3ZJZHhFbmQACAALZ292SWR4VHhJZHMACQAMZ292SWR4UXVvcnVtAAoADWdvdklkeE9wdGlvbnMACwATZ292U3RhdHVzSWR4SXNWYWxpZAABABJnb3ZTdGF0dXNJZHhXaW5PcHQAAgAUZ292U3RhdHVzSWR4V2luVm90ZXMAAwAWZ292U3RhdHVzSWR4VG90YWxWb3RlcwAEABVnb3ZTdGF0dXNJZHhTY0FwcGxpZWQABQASZ292U3RhdHVzSWR4U2NUaW1lAAYAFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQABwEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABDGdldEludE9yRWxzZQIDa2V5CmRlZmF1bHRWYWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5BQpkZWZhdWx0VmFsABlJZHhDb250cm9sQ2ZnTmV1dHJpbm9EYXBwAAEAGElkeENvbnRyb2xDZmdBdWN0aW9uRGFwcAACABRJZHhDb250cm9sQ2ZnUnBkRGFwcAADABVJZHhDb250cm9sQ2ZnTWF0aERhcHAABAAcSWR4Q29udHJvbENmZ0xpcXVpZGF0aW9uRGFwcAAFABVJZHhDb250cm9sQ2ZnUmVzdERhcHAABgAdSWR4Q29udHJvbENmZ05vZGVSZWdpc3RyeURhcHAABwAcSWR4Q29udHJvbENmZ05zYnRTdGFraW5nRGFwcAAIABlJZHhDb250cm9sQ2ZnTWVkaWF0b3JEYXBwAAkAHElkeENvbnRyb2xDZmdTdXJmU3Rha2luZ0RhcHAACgAgSWR4Q29udHJvbENmZ0duc2J0Q29udHJvbGxlckRhcHAACwAXSWR4Q29udHJvbENmZ1Jlc3RWMkRhcHAADAAbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAA0BEWtleUNvbnRyb2xBZGRyZXNzAAIcJXMlc19fY29uZmlnX19jb250cm9sQWRkcmVzcwENa2V5Q29udHJvbENmZwACESVzX19jb250cm9sQ29uZmlnARRyZWFkQ29udHJvbENmZ09yRmFpbAEHY29udHJvbAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUHY29udHJvbAkBDWtleUNvbnRyb2xDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIKY29udHJvbENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCmNvbnRyb2xDZmcFA2lkeAkArAICAi1Db250cm9sIGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA9jb250cm9sQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBEWtleUNvbnRyb2xBZGRyZXNzAAIjM1A1QmZkNThQUGZOdkJNMkh5OFFmYmNEcU1lTnR6ZzdLZlAACmNvbnRyb2xDZmcJARRyZWFkQ29udHJvbENmZ09yRmFpbAEFD2NvbnRyb2xDb250cmFjdAAQbmV1dHJpbm9Db250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAF2duc2J0Q29udHJvbGxlckNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUgSWR4Q29udHJvbENmZ0duc2J0Q29udHJvbGxlckRhcHABGGtleVF1b3J1bVJlcXVpcmVkUGVyY2VudAEEdHlwZQkArAICAhYlcyVzX19xdW9ydW1SZXF1aXJlZF9fBQR0eXBlARJrZXlQYXltZW50UmVxdWlyZWQAAhMlc19fcGF5bWVudFJlcXVpcmVkARBrZXlHbnNidFJlcXVpcmVkAAIRJXNfX2dOc2J0UmVxdWlyZWQBEWtleUxhc3RQcm9wb3NhbElkAAIOJXNfX3Byb3Bvc2FsSWQBFGtleUxhc3RVcGRhdGVWZXJzaW9uAAIRJXNfX3VwZGF0ZVZlcnNpb24BGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBCnByb3Bvc2FsSWQJAKwCAgIaJXMlZF9fcHJvcG9zYWxTdGF0dXNEYXRhX18JAKQDAQUKcHJvcG9zYWxJZAETa2V5UHJvcG9zYWxEYXRhQnlJZAEKcHJvcG9zYWxJZAkArAICAhQlcyVkX19wcm9wb3NhbERhdGFfXwkApAMBBQpwcm9wb3NhbElkAR1rZXlQcm9wb3NhbFZvdGVzQnlJZEFuZE9wdGlvbgIKcHJvcG9zYWxJZANvcHQJALkJAgkAzAgCAgYlcyVkJWQJAMwIAgIKdm90ZXNCeU9wdAkAzAgCCQCkAwEFCnByb3Bvc2FsSWQJAMwIAgkApAMBBQNvcHQFA25pbAUDU0VQARtrZXlQcm9wb3NhbFZvdGVzQnlJZEFuZFVzZXICCnByb3Bvc2FsSWQIdXNlckFkZHIJALkJAgkAzAgCAgYlcyVkJXMJAMwIAgILdm90ZXNCeVVzZXIJAMwIAgkApAMBBQpwcm9wb3NhbElkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA1NFUAEca2V5UHJvcG9zYWxDaG9pY2VCeUlkQW5kVXNlcgIKcHJvcG9zYWxJZAh1c2VyQWRkcgkAuQkCCQDMCAICBiVzJWQlcwkAzAgCAgxvcHRpb25CeVVzZXIJAMwIAgkApAMBBQpwcm9wb3NhbElkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA1NFUAESa2V5QXBwbHlJblByb2dyZXNzAAITJXNfX2FwcGx5SW5Qcm9ncmVzcwEWa2V5UHJvcG9zYWxJZEJ5VG9waWNJZAEHdG9waWNJZAkArAICAhslcyVkX19wcm9wb3NhbElkQnlUb3BpY0lkX18JAKQDAQUHdG9waWNJZAEXa2V5VXNlckduc2J0UmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGyVzJXNfdXNlckduc2J0UmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBHmtleU51bVVuaXF1ZVZvdGVyc0J5UHJvcG9zYWxJZAEKcHJvcG9zYWxJZAkArAICAhElcyVkX19udW1Wb3RlcnNfXwkApAMBBQpwcm9wb3NhbElkARhrZXlTdGF0c0F2ZXJVbmlxdWVWb3RlcnMAAiAlcyVzJXNfX3N0YXRzX19hdmdfX3VuaXF1ZVZvdGVycwEWa2V5U3RhdHNBdmVyR25zYnRWb3RlZAACHiVzJXMlc19fc3RhdHNfX2F2Z19fZ25zYnRWb3RlZAEVa2V5U3RhdHNVbmlxdWVBdXRob3JzAAIaJXMlc19fc3RhdHNfX3VuaXF1ZUF1dGhvcnMBF2tleU51bVByb3Bvc2Fsc0J5QXV0aG9yAQphZGRyZXNzU3RyCQCsAgICHCVzJXNfX251bVByb3Bvc2Fsc0J5QXV0aG9yX18FCmFkZHJlc3NTdHIBD2tleUFwcGx5SGlzdG9yeQEJdGltZXN0YW1wCQCsAgICFCVzJWRfX2FwcGx5SGlzdG9yeV9fCQCkAwEFCXRpbWVzdGFtcAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQpzdGF0dXNEYXRhBw1pc1ZvdGluZ1ZhbGlkCXdpbk9wdGlvbg53aW5PcHRpb25Wb3Rlcwp0b3RhbFZvdGVzEWFyZVNjcmlwdHNBcHBsaWVkEHNjcmlwdHNUaW1lc3RhbXAOY2FuY2VsZWRCeVRlYW0JALkJAgkAzAgCAg4lYiVkJWQlZCViJWQlYgkAzAgCCQClAwEFDWlzVm90aW5nVmFsaWQJAMwIAgkApAMBBQl3aW5PcHRpb24JAMwIAgkApAMBBQ53aW5PcHRpb25Wb3RlcwkAzAgCCQCkAwEFCnRvdGFsVm90ZXMJAMwIAgkApQMBBRFhcmVTY3JpcHRzQXBwbGllZAkAzAgCCQCkAwEFEHNjcmlwdHNUaW1lc3RhbXAJAMwIAgkApQMBBQ5jYW5jZWxlZEJ5VGVhbQUDbmlsBQNTRVABDHByb3Bvc2FsRGF0YQsMcHJvcG9zYWxUeElkBHR5cGUGYXV0aG9yCWZvcnVtTGluawV0aXRsZQxwcm9wb3NhbFRpbWUPdm90aW5nU3RhcnRUaW1lDXZvdGluZ0VuZFRpbWUFdHhJZHMNcXVvcnVtSW5HbnNidAdvcHRpb25zCQC5CQIJAMwIAgIWJXMlcyVzJXMlcyVkJWQlZCVzJWQlcwkAzAgCBQxwcm9wb3NhbFR4SWQJAMwIAgUEdHlwZQkAzAgCBQZhdXRob3IJAMwIAgUJZm9ydW1MaW5rCQDMCAIFBXRpdGxlCQDMCAIJAKQDAQUMcHJvcG9zYWxUaW1lCQDMCAIJAKQDAQUPdm90aW5nU3RhcnRUaW1lCQDMCAIJAKQDAQUNdm90aW5nRW5kVGltZQkAzAgCBQV0eElkcwkAzAgCCQCkAwEFDXF1b3J1bUluR25zYnQJAMwIAgUHb3B0aW9ucwUDbmlsBQNTRVABC2NoZWNrVHhMaXN0AQZ0eExpc3QDCQBmAgkAkAMBBQZ0eExpc3QAFAkAAgEJAKwCAgIXVG9vIG1hbnkgdHJhbnNhY3Rpb25zOiAJAKQDAQkAkAMBBQZ0eExpc3QKAQhjb21iaW5lcgIDYWNjAnR4AwkBAiE9AgkAyAEBCQDZBAEFAnR4ACAJAAIBCQCsAgICDFdyb25nIHR4SWQ6IAUCdHgDCQAAAgUDYWNjAgAFAnR4CQCsAgIJAKwCAgUDYWNjBQdMSVNUU0VQBQJ0eAoAAiRsBQZ0eExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGNvbWJpbmVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAC0lkeEVmZlRvdGFsAAAACklkeEVmZlVzZXIAAQERZ2V0RWZmZWN0aXZlR25zYnQBEnVzZXJBZGRyU3RyT3JFbXB0eQQJZ25zYnREYXRhCQEJYXNBbnlMaXN0AQkA/AcEBRdnbnNidENvbnRyb2xsZXJDb250cmFjdAIUZ25zYnRJbmZvU1lTUkVBRE9OTFkJAMwIAgUSdXNlckFkZHJTdHJPckVtcHR5CQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsBAhuc2J0RGF0YQkBCWFzQW55TGlzdAEJAJEDAgUJZ25zYnREYXRhAAIEDHVzZXJGcm9tTnNidAkBBWFzSW50AQkAkQMCBQhuc2J0RGF0YQACBA10b3RhbEZyb21Oc2J0CQEFYXNJbnQBCQCRAwIFCG5zYnREYXRhAAMEEnVzZXJNYXR1cmVGcm9tU3VyZgkBBWFzSW50AQkAkQMCBQlnbnNidERhdGEACQQTdG90YWxNYXR1cmVGcm9tU3VyZgkBBWFzSW50AQkAkQMCBQlnbnNidERhdGEABgkAzAgCCQBkAgUNdG90YWxGcm9tTnNidAUTdG90YWxNYXR1cmVGcm9tU3VyZgkAzAgCCQBkAgUMdXNlckZyb21Oc2J0BRJ1c2VyTWF0dXJlRnJvbVN1cmYFA25pbAEMdmFsaWRhdGVMaW5rAQN1cmwDCQECIT0CCQEFdmFsdWUBCQCzCQIFA3VybAUKVVJMUEFUVEVSTgAACQACAQILSW52YWxpZCB1cmwDCQBmAgkAsQIBBQN1cmwFBk1BWFVSTAkAAgECDVVybCB0b28gbG9uZyEEB3RvcGljSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCwAgIFA3VybAkAZAIJAQV2YWx1ZQEJALcJAgUDdXJsAgEvAAECDVdyb25nIHRvcGljSWQEDHJlZ2lzdGVyZWRJZAkAnwgBCQEWa2V5UHJvcG9zYWxJZEJ5VG9waWNJZAEFB3RvcGljSWQDCQEJaXNEZWZpbmVkAQUMcmVnaXN0ZXJlZElkCQACAQkArAICAjhWb3Rpbmcgd2l0aCBzdWNoIGZvcnVtIGxpbmsgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IGlkPQkApAMBCQEFdmFsdWUBBQxyZWdpc3RlcmVkSWQFB3RvcGljSWQBDmluaXRpYXRlVm90aW5nCwdwYXltZW50DHByb3Bvc2FsVHhJZAR0eXBlBmF1dGhvcglmb3J1bUxpbmsFdGl0bGUPdm90aW5nU3RhcnRUaW1lDXZvdGluZ0VuZFRpbWUGc3RhdHVzBnR4TGlzdAtvcHRpb25zTGlzdAMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQFBHVuaXQJAAIBAhtBbGxvd2VkIFdBVkVTIHBheW1lbnQgb25seSEEBnBtdFJlcQkBDGdldEludE9yRWxzZQIJARJrZXlQYXltZW50UmVxdWlyZWQABQ5ERUZBVUxUUEFZTUVOVAMJAGYCBQZwbXRSZXEIBQdwYXltZW50BmFtb3VudAkAAgEJAKwCAgIkUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgYXQgbGVhc3QgCQCkAwEFBnBtdFJlcQQHdG9waWNJZAkBDHZhbGlkYXRlTGluawEFCWZvcnVtTGluawMJAAACBQV0aXRsZQIACQACAQIOVGl0bGUgaXMgZW1wdHkDCQBmAgkAsQIBBQV0aXRsZQUITUFYVElUTEUJAAIBAg5Ub28gbG9uZyB0aXRsZQQMcHJvcG9zYWxUaW1lCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAMJAGYCBQxwcm9wb3NhbFRpbWUFD3ZvdGluZ1N0YXJ0VGltZQkAAgEJAKwCAgkArAICCQCsAgICEHZvdGluZ1N0YXJ0VGltZT0JAKQDAQUPdm90aW5nU3RhcnRUaW1lAhAgPCBwcm9wb3NhbFRpbWU9CQCkAwEFDHByb3Bvc2FsVGltZQMJAGYCBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUJAAIBCQCsAgIJAKwCAgkArAICAg52b3RpbmdFbmRUaW1lPQkApAMBBQ12b3RpbmdFbmRUaW1lAhMgPCB2b3RpbmdTdGFydFRpbWU9CQCkAwEFD3ZvdGluZ1N0YXJ0VGltZQMJAGYCCQBlAgUNdm90aW5nRW5kVGltZQUPdm90aW5nU3RhcnRUaW1lBQ1NQVhWT1RJTkdUSU1FCQACAQkArAICCQCsAgIJAKwCAgIbVm90aW5nIHBlcmlvZCBleGNlZWRzIG1heDogCQCkAwEJAGUCBQ12b3RpbmdFbmRUaW1lBQ92b3RpbmdTdGFydFRpbWUCAyA+IAkApAMBBQ1NQVhWT1RJTkdUSU1FBAV0eElkcwMJAAACBQR0eXBlAgRJREVBAgAJAQtjaGVja1R4TGlzdAEFBnR4TGlzdAMJAGcCAAEJAJADAQULb3B0aW9uc0xpc3QJAAIBAhdUb28gZmV3IGNob2ljZXMgdG8gdm90ZQQDZWZmCQERZ2V0RWZmZWN0aXZlR25zYnQBBQZhdXRob3IECmduc2J0VG90YWwJAJEDAgUDZWZmBQtJZHhFZmZUb3RhbAQJZ05zYnRVc2VyCQCRAwIFA2VmZgUKSWR4RWZmVXNlcgQIZ25zYnRSZXEJAQxnZXRJbnRPckVsc2UCCQEQa2V5R25zYnRSZXF1aXJlZAAFFERFRkFVTFRDUkVBVElPTkdOU0JUAwkAZgIFCGduc2J0UmVxBQlnTnNidFVzZXIJAAIBCQCsAgIJAKwCAgISWW91IG5lZWQgYXQgbGVhc3QgCQCkAwEFCGduc2J0UmVxAhcgZ05zYnQgdG8gY3JlYXRlIHZvdGluZwQMYW1vdW50TGVhc2VkCQD8BwQFEG5ldXRyaW5vQ29udHJhY3QCC2FjY2VwdFdhdmVzBQNuaWwJAMwIAgUHcGF5bWVudAUDbmlsAwkAAAIFDGFtb3VudExlYXNlZAUMYW1vdW50TGVhc2VkBAZxdW9ydW0JAQxnZXRJbnRPckVsc2UCCQEYa2V5UXVvcnVtUmVxdWlyZWRQZXJjZW50AQUEdHlwZQUNREVGQVVMVFFVT1JVTQQNcXVvcnVtSW5HbnNidAkAawMFBnF1b3J1bQUKZ25zYnRUb3RhbAUFTVVMVDYECnByb3Bvc2FsSWQJAGQCCQEMZ2V0SW50T3JFbHNlAgkBEWtleUxhc3RQcm9wb3NhbElkAAAAAAEEFG51bVByb3Bvc2Fsc0J5QXV0aG9yCQBkAgkBDGdldEludE9yRWxzZQIJARdrZXlOdW1Qcm9wb3NhbHNCeUF1dGhvcgEFBmF1dGhvcgAAAAEEC3VuaXFBdXRob3JzCQBkAgkBDGdldEludE9yRWxzZQIJARVrZXlTdGF0c1VuaXF1ZUF1dGhvcnMAAAADCQAAAgUUbnVtUHJvcG9zYWxzQnlBdXRob3IAAQABAAAECm9wdGlvbnNTdHIJALkJAgULb3B0aW9uc0xpc3QFB0xJU1RTRVAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleUxhc3RQcm9wb3NhbElkAAUKcHJvcG9zYWxJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVByb3Bvc2FsSWRCeVRvcGljSWQBBQd0b3BpY0lkBQpwcm9wb3NhbElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAkBCnN0YXR1c0RhdGEHBwAAAAAAAAcAAAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleVByb3Bvc2FsRGF0YUJ5SWQBBQpwcm9wb3NhbElkCQEMcHJvcG9zYWxEYXRhCwUMcHJvcG9zYWxUeElkBQR0eXBlBQZhdXRob3IJANgEAQkAmwMBBQlmb3J1bUxpbmsJANgEAQkAmwMBBQV0aXRsZQUMcHJvcG9zYWxUaW1lBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUFBXR4SWRzBQ1xdW9ydW1Jbkduc2J0BQpvcHRpb25zU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXa2V5TnVtUHJvcG9zYWxzQnlBdXRob3IBBQZhdXRob3IFFG51bVByb3Bvc2Fsc0J5QXV0aG9yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5U3RhdHNVbmlxdWVBdXRob3JzAAULdW5pcUF1dGhvcnMFA25pbAUMcHJvcG9zYWxUeElkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1jYWxjV2luT3B0aW9uBwpwcm9wb3NhbElkC29wdGlvbnNMaXN0DmlzUHJldk9wdGlvbmFsCW9sZENob2ljZRBvcHRpb25hbFRvdGFsT2xkCW5ld0Nob2ljZRNuZXdUb3RhbEJ5TmV3Q2hvaWNlCgEIZmluZEJlc3QCA2FjYwRlbGVtBANpZHgJAQV2YWx1ZQEJAM8IAgULb3B0aW9uc0xpc3QFBGVsZW0EA3ZhbAMFDmlzUHJldk9wdGlvbmFsAwkAAAIFA2lkeAUJbmV3Q2hvaWNlBRNuZXdUb3RhbEJ5TmV3Q2hvaWNlCQEMZ2V0SW50T3JFbHNlAgkBHWtleVByb3Bvc2FsVm90ZXNCeUlkQW5kT3B0aW9uAgUKcHJvcG9zYWxJZAUDaWR4AAADCQAAAgUDaWR4CQEFdmFsdWUBBQlvbGRDaG9pY2UFEG9wdGlvbmFsVG90YWxPbGQDCQAAAgUDaWR4BQluZXdDaG9pY2UFE25ld1RvdGFsQnlOZXdDaG9pY2UJAQxnZXRJbnRPckVsc2UCCQEda2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRPcHRpb24CBQpwcm9wb3NhbElkBQNpZHgAAAMJAGYCCAUDYWNjAl8yBQN2YWwFA2FjYwkAlAoCBQNpZHgFA3ZhbAoAAiRsBQtvcHRpb25zTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZpbmRCZXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARB1cGRhdGVTdGF0dXNEYXRhBAdvbGREYXRhB2lzVmFsaWQJbmV3V2luT3B0DW5ld1RvdGFsVm90ZXMJALkJAgkAzAgCAg4lYiVkJWQlZCViJWQlYgkAzAgCCQClAwEFB2lzVmFsaWQJAMwIAgkApAMBCAUJbmV3V2luT3B0Al8xCQDMCAIJAKQDAQgFCW5ld1dpbk9wdAJfMgkAzAgCCQCkAwEFDW5ld1RvdGFsVm90ZXMJAMwIAgkAkQMCBQdvbGREYXRhBRVnb3ZTdGF0dXNJZHhTY0FwcGxpZWQJAMwIAgkAkQMCBQdvbGREYXRhBRJnb3ZTdGF0dXNJZHhTY1RpbWUJAMwIAgkAkQMCBQdvbGREYXRhBRZnb3ZTdGF0dXNJZHhJc0NhbmNlbGVkBQNuaWwFA1NFUAERc3RhdHVzQXBwbHlTY3JpcHQBB29sZERhdGEJALkJAgkAzAgCAg4lYiVkJWQlZCViJWQlYgkAzAgCCQCRAwIFB29sZERhdGEFE2dvdlN0YXR1c0lkeElzVmFsaWQJAMwIAgkAkQMCBQdvbGREYXRhBRJnb3ZTdGF0dXNJZHhXaW5PcHQJAMwIAgkAkQMCBQdvbGREYXRhBRRnb3ZTdGF0dXNJZHhXaW5Wb3RlcwkAzAgCCQCRAwIFB29sZERhdGEFFmdvdlN0YXR1c0lkeFRvdGFsVm90ZXMJAMwIAgIEdHJ1ZQkAzAgCCQCRAwIFB29sZERhdGEFEmdvdlN0YXR1c0lkeFNjVGltZQkAzAgCCQCRAwIFB29sZERhdGEFFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQFA25pbAUDU0VQARBFeGVjdXRpb25IaXN0b3J5BA11cGRhdGVWZXJzaW9uBXRpdGxlA3VybApwcm9wb3NhbElkBApnbnNidFRvdGFsCQCRAwIJARFnZXRFZmZlY3RpdmVHbnNidAECAAULSWR4RWZmVG90YWwEB3R1cm5vdXQAoMIeCQELU3RyaW5nRW50cnkCCQEPa2V5QXBwbHlIaXN0b3J5AQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJALkJAgkAzAgCAgwlZCVkJWQlcyVzJWQJAMwIAgkApAMBBQ11cGRhdGVWZXJzaW9uCQDMCAIJAKQDAQUKZ25zYnRUb3RhbAkAzAgCCQCkAwEFB3R1cm5vdXQJAMwIAgUFdGl0bGUJAMwIAgUDdXJsCQDMCAIJAKQDAQUKcHJvcG9zYWxJZAUDbmlsBQNTRVAHAWkBC2NvbnN0cnVjdG9yBQtjb250cm9sQWRkcg5nTnNidFJlcVRvSW5pdA53YXZlc1JlcVRvSW5pdBFxdW9ydW1SZXFQZXJjSWRlYRNxdW9ydW1SZXFQZXJjVXBkYXRlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUNvbnRyb2xBZGRyZXNzAAULY29udHJvbEFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlHbnNidFJlcXVpcmVkAAUOZ05zYnRSZXFUb0luaXQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlQYXltZW50UmVxdWlyZWQABQ53YXZlc1JlcVRvSW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGtleVF1b3J1bVJlcXVpcmVkUGVyY2VudAECBElERUEFEXF1b3J1bVJlcVBlcmNJZGVhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5UXVvcnVtUmVxdWlyZWRQZXJjZW50AQIGVVBEQVRFBRNxdW9ydW1SZXFQZXJjVXBkYXRlBQNuaWwBaQEIY2FzdFZvdGUCCnByb3Bvc2FsSWQGY2hvaWNlBA51c2VyQWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEC2R5bmFtaWNEYXRhCQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQEZa2V5UHJvcG9zYWxTdGF0dXNEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAMJAAACCQCRAwIFC2R5bmFtaWNEYXRhBRZnb3ZTdGF0dXNJZHhJc0NhbmNlbGVkAgR0cnVlCQACAQIaVm90aW5nIGlzIGNhbmNlbGVkIGJ5IHRlYW0ECHByb3BEYXRhCQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQETa2V5UHJvcG9zYWxEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAQFc3RhcnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9wRGF0YQULZ292SWR4U3RhcnQEA2VuZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BEYXRhBQlnb3ZJZHhFbmQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQBmAgUFc3RhcnQFA25vdwkAAgECFlZvdGluZyBub3Qgc3RhcnRlZCB5ZXQDCQBnAgUDbm93BQNlbmQJAAIBAhdWb3RpbmcgYWxyZWFkeSBmaW5pc2hlZAQQYXZhaWxhYmxlT3B0aW9ucwkAtQkCCQCRAwIFCHByb3BEYXRhBQ1nb3ZJZHhPcHRpb25zBQdMSVNUU0VQBApudW1PcHRpb25zCQCQAwEFEGF2YWlsYWJsZU9wdGlvbnMDCQBnAgABBQpudW1PcHRpb25zCQACAQIXVG9vIGZldyBjaG9pY2VzIHRvIHZvdGUDCQBnAgUGY2hvaWNlBQpudW1PcHRpb25zCQACAQkArAICAhtVbmtub3duIGNob2ljZSEgTXVzdCBiZSAwLi4JAKQDAQkAZQIFCm51bU9wdGlvbnMAAQQDZWZmCQERZ2V0RWZmZWN0aXZlR25zYnQBBQ51c2VyQWRkcmVzc1N0cgQIZ25zYnRBbXQJAJEDAgUDZWZmBQpJZHhFZmZVc2VyAwkAZwIAAAUIZ25zYnRBbXQJAAIBAhBubyBnbnNidCB0byB2b3RlBApnbnNidFRvdGFsCQCRAwIFA2VmZgULSWR4RWZmVG90YWwECW9sZENob2ljZQkAnwgBCQEca2V5UHJvcG9zYWxDaG9pY2VCeUlkQW5kVXNlcgIFCnByb3Bvc2FsSWQFDnVzZXJBZGRyZXNzU3RyBAxvbGRVc2VyVm90ZXMDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRDaG9pY2UAAAkBDGdldEludE9yRWxzZQIJARtrZXlQcm9wb3NhbFZvdGVzQnlJZEFuZFVzZXICBQpwcm9wb3NhbElkBQ51c2VyQWRkcmVzc1N0cgAABBNvbGRUb3RhbEJ5T2xkQ2hvaWNlAwkBCWlzRGVmaW5lZAEFCW9sZENob2ljZQkBDGdldEludE9yRWxzZQIJAR1rZXlQcm9wb3NhbFZvdGVzQnlJZEFuZE9wdGlvbgIFCnByb3Bvc2FsSWQJAQV2YWx1ZQEFCW9sZENob2ljZQAAAAAEE29sZFRvdGFsQnlOZXdDaG9pY2UJAQxnZXRJbnRPckVsc2UCCQEda2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRPcHRpb24CBQpwcm9wb3NhbElkBQZjaG9pY2UAAAQIb2xkVG90YWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtkeW5hbWljRGF0YQUWZ292U3RhdHVzSWR4VG90YWxWb3RlcwQTbmV3VG90YWxCeU9sZENob2ljZQMJAQEhAQkBCWlzRGVmaW5lZAEFCW9sZENob2ljZQAACQBkAgkAZQIFE29sZFRvdGFsQnlPbGRDaG9pY2UFDG9sZFVzZXJWb3RlcwMJAAACCQEFdmFsdWUBBQlvbGRDaG9pY2UFBmNob2ljZQUIZ25zYnRBbXQAAAQTbmV3VG90YWxCeU5ld0Nob2ljZQMDCQEJaXNEZWZpbmVkAQUJb2xkQ2hvaWNlCQAAAgkBBXZhbHVlAQUJb2xkQ2hvaWNlBQZjaG9pY2UHBRNuZXdUb3RhbEJ5T2xkQ2hvaWNlCQBkAgUTb2xkVG90YWxCeU5ld0Nob2ljZQUIZ25zYnRBbXQECG5ld1RvdGFsCQBkAgkAZQIFCG9sZFRvdGFsBQxvbGRVc2VyVm90ZXMFCGduc2J0QW10BA9pc1F1b3J1bVJlYWNoZWQJAGcCBQhuZXdUb3RhbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BEYXRhBQxnb3ZJZHhRdW9ydW0EFW51bVZvdGVyc0J5UHJvcG9zYWxJZAkBDGdldEludE9yRWxzZQIJAR5rZXlOdW1VbmlxdWVWb3RlcnNCeVByb3Bvc2FsSWQBBQpwcm9wb3NhbElkAAAEFG9sZEF2ZXJVbmlxdWVWb3RlcnM2CQEMZ2V0SW50T3JFbHNlAgkBGGtleVN0YXRzQXZlclVuaXF1ZVZvdGVycwAAAAQMbnVtUHJvcG9zYWxzCQERQGV4dHJOYXRpdmUoMTA1NSkBCQERa2V5TGFzdFByb3Bvc2FsSWQABAp1bmlxdWVEaWZmAwkAAAIFDG9sZFVzZXJWb3RlcwAAAAEAAAQUbmV3QXZlclVuaXF1ZVZvdGVyczYJAGQCBRRvbGRBdmVyVW5pcXVlVm90ZXJzNgkAawMFCnVuaXF1ZURpZmYFBU1VTFQ2BQxudW1Qcm9wb3NhbHMEDG9sZEF2ZXJHbnNidAkBDGdldEludE9yRWxzZQIJARZrZXlTdGF0c0F2ZXJHbnNidFZvdGVkAAAABAxuZXdBdmVyR25zYnQJAGQCBQxvbGRBdmVyR25zYnQJAGkCCQBlAgUIZ25zYnRBbXQFDG9sZFVzZXJWb3RlcwUMbnVtUHJvcG9zYWxzBA5pc1ByZXZPcHRpb25hbAMJAQEhAQkBCWlzRGVmaW5lZAEFCW9sZENob2ljZQYJAAACCQEFdmFsdWUBBQlvbGRDaG9pY2UFBmNob2ljZQQQb3B0aW9uYWxUb3RhbE9sZAMFDmlzUHJldk9wdGlvbmFsBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR1rZXlQcm9wb3NhbFZvdGVzQnlJZEFuZE9wdGlvbgIFCnByb3Bvc2FsSWQJAQV2YWx1ZQEFCW9sZENob2ljZQUTbmV3VG90YWxCeU9sZENob2ljZQUDbmlsBAZ3aW5PcHQJAQ1jYWxjV2luT3B0aW9uBwUKcHJvcG9zYWxJZAUQYXZhaWxhYmxlT3B0aW9ucwUOaXNQcmV2T3B0aW9uYWwFCW9sZENob2ljZQUTbmV3VG90YWxCeU9sZENob2ljZQUGY2hvaWNlBRNuZXdUb3RhbEJ5TmV3Q2hvaWNlBAtyZWxlYXNlVGltZQkAlgMBCQDMCAIFA2VuZAkAzAgCCQEMZ2V0SW50T3JFbHNlAgkBF2tleVVzZXJHbnNidFJlbGVhc2VUaW1lAQUOdXNlckFkZHJlc3NTdHIAAAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGtleVByb3Bvc2FsQ2hvaWNlQnlJZEFuZFVzZXICBQpwcm9wb3NhbElkBQ51c2VyQWRkcmVzc1N0cgUGY2hvaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRVc2VyAgUKcHJvcG9zYWxJZAUOdXNlckFkZHJlc3NTdHIFCGduc2J0QW10CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEda2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRPcHRpb24CBQpwcm9wb3NhbElkBQZjaG9pY2UFE25ld1RvdGFsQnlOZXdDaG9pY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlOdW1VbmlxdWVWb3RlcnNCeVByb3Bvc2FsSWQBBQpwcm9wb3NhbElkCQBkAgUVbnVtVm90ZXJzQnlQcm9wb3NhbElkBQp1bmlxdWVEaWZmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXa2V5VXNlckduc2J0UmVsZWFzZVRpbWUBBQ51c2VyQWRkcmVzc1N0cgULcmVsZWFzZVRpbWUJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlTdGF0c0F2ZXJVbmlxdWVWb3RlcnMABRRuZXdBdmVyVW5pcXVlVm90ZXJzNgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YXRzQXZlckduc2J0Vm90ZWQABQxuZXdBdmVyR25zYnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBBQpwcm9wb3NhbElkCQEQdXBkYXRlU3RhdHVzRGF0YQQFC2R5bmFtaWNEYXRhBQ9pc1F1b3J1bVJlYWNoZWQFBndpbk9wdAUIbmV3VG90YWwFA25pbAUQb3B0aW9uYWxUb3RhbE9sZAUEdW5pdAFpARJpbml0aWF0ZUlkZWFWb3RpbmcFCWZvcnVtTGluawV0aXRsZQ92b3RpbmdTdGFydFRpbWUNdm90aW5nRW5kVGltZQtvcHRpb25zTGlzdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQDCQECIT0CCQCQAwEFC29wdGlvbnNMaXN0AAIJAAIBAitFeGFjdGx5IDIgb3B0aW9uIFsnTk8nLCAnWUVTJ10gYXJlIGV4cGVjdGVkAwkBAiE9AgkAkQMCBQtvcHRpb25zTGlzdAAAAgJOTwkAAgECHU9wdGlvbiBOTyBzaG91bGQgYmUgdGhlIGZpcnN0AwkBAiE9AgkAkQMCBQtvcHRpb25zTGlzdAABAgNZRVMJAAIBAh9PcHRpb24gWUVTIHNob3VsZCBiZSB0aGUgc2Vjb25kCQEOaW5pdGlhdGVWb3RpbmcLCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAIESURFQQkApQgBCAUBaQZjYWxsZXIFCWZvcnVtTGluawUFdGl0bGUFD3ZvdGluZ1N0YXJ0VGltZQUNdm90aW5nRW5kVGltZQIHUEVORElORwUDbmlsBQtvcHRpb25zTGlzdAFpARRpbml0aWF0ZVVwZGF0ZVZvdGluZwUJZm9ydW1MaW5rBXRpdGxlD3ZvdGluZ1N0YXJ0VGltZQ12b3RpbmdFbmRUaW1lBnR4TGlzdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQDCQBmAgABCQCQAwEFBnR4TGlzdAkAAgECGlRyYW5zYWN0aW9ucyBsaXN0IGlzIGVtcHR5AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIObm90IGF1dGhvcml6ZWQJAQ5pbml0aWF0ZVZvdGluZwsJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAgZVUERBVEUJAKUIAQgFAWkGY2FsbGVyBQlmb3J1bUxpbmsFBXRpdGxlBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUCB1BFTkRJTkcFBnR4TGlzdAkAzAgCAgJOTwkAzAgCAgNZRVMFA25pbAFpAQxjYW5jZWxWb3RpbmcBCnByb3Bvc2FsSWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg5ub3QgYXV0aG9yaXplZAQLY3VycmVudERhdGEJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQEZa2V5UHJvcG9zYWxTdGF0dXNEYXRhQnlJZAEFCnByb3Bvc2FsSWQEC3VwZGF0ZWREYXRhCQCsAgIJAKwCAgkArwICBQtjdXJyZW50RGF0YQkBBXZhbHVlAQkAtwkCBQtjdXJyZW50RGF0YQUDU0VQBQNTRVACBHRydWUJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEZa2V5UHJvcG9zYWxTdGF0dXNEYXRhQnlJZAEFCnByb3Bvc2FsSWQFC3VwZGF0ZWREYXRhBQNuaWwFBHVuaXQBaQELYXBwbHlVcGRhdGUBCnByb3Bvc2FsSWQECHByb3BEYXRhCQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQETa2V5UHJvcG9zYWxEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAQDZW5kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcERhdGEFCWdvdklkeEVuZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAMJAGYCBQNlbmQFA25vdwkAAgECGlZvdGluZyBpcyBub3QgZmluaXNoZWQgeWV0AwkBAiE9AgIGVVBEQVRFCQCRAwIFCHByb3BEYXRhBQpnb3ZJZHhUeXBlCQACAQIfT25seSBVUERBVEUgdHlwZSBjYW4gYmUgYXBwbGllZAQLZHluYW1pY0RhdGEJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAUDU0VQAwkAAAIJAJEDAgULZHluYW1pY0RhdGEFFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQCBHRydWUJAAIBAhJWb3RpbmcgaXMgY2FuY2VsZWQDCQECIT0CCQCRAwIFC2R5bmFtaWNEYXRhBRNnb3ZTdGF0dXNJZHhJc1ZhbGlkAgR0cnVlCQACAQIVVm90aW5nIHN0YXR1cyBpbnZhbGlkAwkBAiE9AgkAkQMCBQtkeW5hbWljRGF0YQUSZ292U3RhdHVzSWR4V2luT3B0AgExCQACAQIhV2lubmVyIGlzICdOTycgLSBub3RoaW5nIHRvIGFwcGx5AwkAAAIJAJEDAgULZHluYW1pY0RhdGEFFWdvdlN0YXR1c0lkeFNjQXBwbGllZAIEdHJ1ZQkAAgECG1NjcmlwdHMgYXJlIGFscmVhZHkgYXBwbGllZAQKc2NyaXB0VGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2R5bmFtaWNEYXRhBRJnb3ZTdGF0dXNJZHhTY1RpbWUDCQBmAgkAZQIFA25vdwUKUEFTVE1BUkdJTgUKc2NyaXB0VGltZQkAAgEJAKwCAgkArAICAhJTY3JpcHRzIHRpbWVzdGFtcD0JAKQDAQUKc2NyaXB0VGltZQIqIGlzIHRvbyBmYXIgaW4gdGhlIHBhc3QsIG1heCAyIGhycyBhbGxvd2VkAwkAZgIFCnNjcmlwdFRpbWUJAGQCBQNub3cFDEZVVFVSRU1BUkdJTgkAAgEJAKwCAgkArAICAhJTY3JpcHRzIHRpbWVzdGFtcD0JAKQDAQUKc2NyaXB0VGltZQIuIGlzIHRvbyBmYXIgaW4gdGhlIGZ1dHVyZSwgbWF4IDEuNSBocnMgYWxsb3dlZAQMaW5Qcm9ncmVzc0lkCQEMZ2V0SW50T3JFbHNlAgkBEmtleUFwcGx5SW5Qcm9ncmVzcwAA////////////AQMJAQIhPQIFDGluUHJvZ3Jlc3NJZAD///////////8BCQACAQkArAICCQCsAgICC3Byb3Bvc2FsSWQ9CQCkAwEFDGluUHJvZ3Jlc3NJZAIrIGlzIGFscmVhZHkgYmVpbmcgYXBwbGllZC4gRmluaXNoIGl0IGZpcnN0IQQIc2h1dGRvd24JAPwHBAUPY29udHJvbENvbnRyYWN0AhVjYWxsRW1lcmdlbmN5U2h1dGRvd24JAMwIAgIaQXBwbHlpbmcgR292ZXJuYW5jZSBVUERBVEUFA25pbAUDbmlsAwkAAAIFCHNodXRkb3duBQhzaHV0ZG93bgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5QXBwbHlJblByb2dyZXNzAAUKcHJvcG9zYWxJZAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2ZpbmlzaEFwcGx5AAQKcHJvcG9zYWxJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARJrZXlBcHBseUluUHJvZ3Jlc3MAAidObyBhcHBseSBpbiBwcm9ncmVzcywgbm90aGluZyB0byBmaW5pc2gECHByb3BEYXRhCQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQETa2V5UHJvcG9zYWxEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAQGdHhMaXN0CQC1CQIJAJEDAgUIcHJvcERhdGEFC2dvdklkeFR4SWRzBQdMSVNUU0VQBAtkeW5hbWljRGF0YQkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQNTRVADCQAAAgkAkQMCBQtkeW5hbWljRGF0YQUVZ292U3RhdHVzSWR4U2NBcHBsaWVkAgR0cnVlCQACAQIbU2NyaXB0cyBhcmUgYWxyZWFkeSBhcHBsaWVkCgEHY2hlY2tlcgIDYWNjAnR4AwkBASEBCQEJaXNEZWZpbmVkAQkA6QcBCQDZBAEFAnR4CQACAQkArAICAhJOT1QgYXBwbGllZCB0eElkOiAFAnR4BQR1bml0BAdpZ25vcmVkCgACJGwFBnR4TGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFBHVuaXQKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2NoZWNrZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQHdmVyc2lvbgkAZAIJAQxnZXRJbnRPckVsc2UCCQEUa2V5TGFzdFVwZGF0ZVZlcnNpb24AAAAAAQkAlAoCCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlBcHBseUluUHJvZ3Jlc3MACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5TGFzdFVwZGF0ZVZlcnNpb24ABQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAkBEXN0YXR1c0FwcGx5U2NyaXB0AQULZHluYW1pY0RhdGEJAMwIAgkBEEV4ZWN1dGlvbkhpc3RvcnkEBQd2ZXJzaW9uCQCRAwIFCHByb3BEYXRhBQtnb3ZJZHhUaXRsZQkAkQMCBQhwcm9wRGF0YQUJZ292SWR4VXJsBQpwcm9wb3NhbElkBQNuaWwFB2lnbm9yZWQAAIfGLw==", "height": 2332761, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7yi5kjcnMygdpLjk43ua7TnSBwiqNdAfrXZqrffrb2ZY Next: GxL9CvM9LxmCNdf1RrDZFwMfLEhe8SWsSvSPpLvvbZ78 Diff:
OldNewDifferences
346346 func ch (cd) = makeString(["%b%d%d%d%b%d%b", cd[y], cd[z], cd[A], cd[B], "true", cd[D], cd[E]], b)
347347
348348
349-func ci (ao,aZ,bD) = {
349+func ci (cj,aZ,bD,ao) = {
350350 let bL = bu("")[bs]
351- let cj = 500000
352- StringEntry(aF(lastBlock.timestamp), makeString(["%d%d%d%s%s", toString(ao), toString(bL), toString(cj), aZ, bD], b))
351+ let ck = 500000
352+ StringEntry(aF(lastBlock.timestamp), makeString(["%d%d%d%s%s%d", toString(cj), toString(bL), toString(ck), aZ, bD, toString(ao)], b))
353353 }
354354
355355
356356 @Callable(aM)
357-func constructor (ck,cl,cm,cn,co) = if ((aM.caller != this))
357+func constructor (cl,cm,cn,co,cp) = if ((aM.caller != this))
358358 then throw("Permission denied")
359- else [StringEntry(X(), ck), IntegerEntry(ak(), cl), IntegerEntry(aj(), cm), IntegerEntry(ah("IDEA"), cn), IntegerEntry(ah("UPDATE"), co)]
359+ else [StringEntry(X(), cl), IntegerEntry(ak(), cm), IntegerEntry(aj(), cn), IntegerEntry(ah("IDEA"), co), IntegerEntry(ah("UPDATE"), cp)]
360360
361361
362362
363363 @Callable(aM)
364-func castVote (ao,cp) = {
365- let cq = toString(aM.caller)
366- let cr = split(F(this, an(ao)), b)
367- if ((cr[E] == "true"))
364+func castVote (ao,cq) = {
365+ let cr = toString(aM.caller)
366+ let cs = split(F(this, an(ao)), b)
367+ if ((cs[E] == "true"))
368368 then throw("Voting is canceled by team")
369369 else {
370- let cs = split(F(this, ap(ao)), b)
371- let ct = parseIntValue(cs[t])
372- let cu = parseIntValue(cs[u])
373- let cv = lastBlock.timestamp
374- if ((ct > cv))
370+ let ct = split(F(this, ap(ao)), b)
371+ let cu = parseIntValue(ct[t])
372+ let cv = parseIntValue(ct[u])
373+ let cw = lastBlock.timestamp
374+ if ((cu > cw))
375375 then throw("Voting not started yet")
376- else if ((cv >= cu))
376+ else if ((cw >= cv))
377377 then throw("Voting already finished")
378378 else {
379- let cw = split(cs[x], c)
380- let cx = size(cw)
381- if ((1 >= cx))
379+ let cx = split(ct[x], c)
380+ let cy = size(cx)
381+ if ((1 >= cy))
382382 then throw("Too few choices to vote")
383- else if ((cp >= cx))
384- then throw(("Unknown choice! Must be 0.." + toString((cx - 1))))
383+ else if ((cq >= cy))
384+ then throw(("Unknown choice! Must be 0.." + toString((cy - 1))))
385385 else {
386- let bK = bu(cq)
387- let cy = bK[bt]
388- if ((0 >= cy))
386+ let bK = bu(cr)
387+ let cz = bK[bt]
388+ if ((0 >= cz))
389389 then throw("no gnsbt to vote")
390390 else {
391391 let bL = bK[bs]
392- let bV = getInteger(au(ao, cq))
393- let cz = if (!(isDefined(bV)))
392+ let bV = getInteger(au(ao, cr))
393+ let cA = if (!(isDefined(bV)))
394394 then 0
395- else I(as(ao, cq), 0)
396- let cA = if (isDefined(bV))
395+ else I(as(ao, cr), 0)
396+ let cB = if (isDefined(bV))
397397 then I(aq(ao, value(bV)), 0)
398398 else 0
399- let cB = I(aq(ao, cp), 0)
400- let cC = parseIntValue(cr[B])
401- let cD = if (!(isDefined(bV)))
399+ let cC = I(aq(ao, cq), 0)
400+ let cD = parseIntValue(cs[B])
401+ let cE = if (!(isDefined(bV)))
402402 then 0
403- else ((cA - cz) + (if ((value(bV) == cp))
404- then cy
403+ else ((cB - cA) + (if ((value(bV) == cq))
404+ then cz
405405 else 0))
406406 let bY = if (if (isDefined(bV))
407- then (value(bV) == cp)
407+ then (value(bV) == cq)
408408 else false)
409- then cD
410- else (cB + cy)
411- let cE = ((cC - cz) + cy)
412- let cF = (cE >= parseIntValue(cs[w]))
413- let cG = I(az(ao), 0)
414- let cH = I(aA(), 0)
415- let cI = getIntegerValue(al())
416- let cJ = if ((cz == 0))
409+ then cE
410+ else (cC + cz)
411+ let cF = ((cD - cA) + cz)
412+ let cG = (cF >= parseIntValue(ct[w]))
413+ let cH = I(az(ao), 0)
414+ let cI = I(aA(), 0)
415+ let cJ = getIntegerValue(al())
416+ let cK = if ((cA == 0))
417417 then 1
418418 else 0
419- let cK = (cH + fraction(cJ, i, cI))
420- let cL = I(aB(), 0)
421- let cM = (cL + ((cy - cz) / cI))
419+ let cL = (cI + fraction(cK, i, cJ))
420+ let cM = I(aB(), 0)
421+ let cN = (cM + ((cz - cA) / cJ))
422422 let bU = if (!(isDefined(bV)))
423423 then true
424- else (value(bV) == cp)
424+ else (value(bV) == cq)
425425 let bW = if (bU)
426426 then nil
427- else [IntegerEntry(aq(ao, value(bV)), cD)]
428- let cN = bT(ao, cw, bU, bV, cD, cp, bY)
429- let cO = max([cu, I(ay(cq), 0)])
430- $Tuple2(([IntegerEntry(au(ao, cq), cp), IntegerEntry(as(ao, cq), cy), IntegerEntry(aq(ao, cp), bY), IntegerEntry(az(ao), (cG + cJ)), IntegerEntry(ay(cq), cO), IntegerEntry(aA(), cK), IntegerEntry(aB(), cM), StringEntry(an(ao), cc(cr, cF, cN, cE))] ++ bW), unit)
427+ else [IntegerEntry(aq(ao, value(bV)), cE)]
428+ let cO = bT(ao, cx, bU, bV, cE, cq, bY)
429+ let cP = max([cv, I(ay(cr), 0)])
430+ $Tuple2(([IntegerEntry(au(ao, cr), cq), IntegerEntry(as(ao, cr), cz), IntegerEntry(aq(ao, cq), bY), IntegerEntry(az(ao), (cH + cK)), IntegerEntry(ay(cr), cP), IntegerEntry(aA(), cL), IntegerEntry(aB(), cN), StringEntry(an(ao), cc(cs, cG, cO, cF))] ++ bW), unit)
431431 }
432432 }
433433 }
464464 func cancelVoting (ao) = if ((aM.caller != this))
465465 then throw("not authorized")
466466 else {
467- let cP = F(this, an(ao))
468- let cQ = ((take(cP, value(lastIndexOf(cP, b))) + b) + "true")
469- $Tuple2([StringEntry(an(ao), cQ)], unit)
467+ let cQ = F(this, an(ao))
468+ let cR = ((take(cQ, value(lastIndexOf(cQ, b))) + b) + "true")
469+ $Tuple2([StringEntry(an(ao), cR)], unit)
470470 }
471471
472472
473473
474474 @Callable(aM)
475475 func applyUpdate (ao) = {
476- let cs = split(F(this, ap(ao)), b)
477- let cu = parseIntValue(cs[u])
478- let cv = lastBlock.timestamp
479- if ((cu > cv))
476+ let ct = split(F(this, ap(ao)), b)
477+ let cv = parseIntValue(ct[u])
478+ let cw = lastBlock.timestamp
479+ if ((cv > cw))
480480 then throw("Voting is not finished yet")
481- else if (("UPDATE" != cs[o]))
481+ else if (("UPDATE" != ct[o]))
482482 then throw("Only UPDATE type can be applied")
483483 else {
484- let cr = split(F(this, an(ao)), b)
485- if ((cr[E] == "true"))
484+ let cs = split(F(this, an(ao)), b)
485+ if ((cs[E] == "true"))
486486 then throw("Voting is canceled")
487- else if ((cr[y] != "true"))
487+ else if ((cs[y] != "true"))
488488 then throw("Voting status invalid")
489- else if ((cr[z] != "1"))
489+ else if ((cs[z] != "1"))
490490 then throw("Winner is 'NO' - nothing to apply")
491- else if ((cr[C] == "true"))
491+ else if ((cs[C] == "true"))
492492 then throw("Scripts are already applied")
493493 else {
494- let cR = parseIntValue(cr[D])
495- if (((cv - l) > cR))
496- then throw((("Scripts timestamp=" + toString(cR)) + " is too far in the past, max 2 hrs allowed"))
497- else if ((cR > (cv + m)))
498- then throw((("Scripts timestamp=" + toString(cR)) + " is too far in the future, max 1.5 hrs allowed"))
494+ let cS = parseIntValue(cs[D])
495+ if (((cw - l) > cS))
496+ then throw((("Scripts timestamp=" + toString(cS)) + " is too far in the past, max 2 hrs allowed"))
497+ else if ((cS > (cw + m)))
498+ then throw((("Scripts timestamp=" + toString(cS)) + " is too far in the future, max 1.5 hrs allowed"))
499499 else {
500- let cS = I(av(), -1)
501- if ((cS != -1))
502- then throw((("proposalId=" + toString(cS)) + " is already being applied. Finish it first!"))
500+ let cT = I(av(), -1)
501+ if ((cT != -1))
502+ then throw((("proposalId=" + toString(cT)) + " is already being applied. Finish it first!"))
503503 else {
504- let cT = invoke(ae, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
505- if ((cT == cT))
504+ let cU = invoke(ae, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
505+ if ((cU == cU))
506506 then $Tuple2([IntegerEntry(av(), ao)], unit)
507507 else throw("Strict value is not equal to itself.")
508508 }
516516 @Callable(aM)
517517 func finishApply () = {
518518 let ao = valueOrErrorMessage(getInteger(av()), "No apply in progress, nothing to finish")
519- let cs = split(F(this, ap(ao)), b)
520- let bh = split(cs[v], c)
521- let cr = split(F(this, an(ao)), b)
522- if ((cr[C] == "true"))
519+ let ct = split(F(this, ap(ao)), b)
520+ let bh = split(ct[v], c)
521+ let cs = split(F(this, an(ao)), b)
522+ if ((cs[C] == "true"))
523523 then throw("Scripts are already applied")
524524 else {
525- func cU (bj,bk) = if (!(isDefined(transactionHeightById(fromBase58String(bk)))))
525+ func cV (bj,bk) = if (!(isDefined(transactionHeightById(fromBase58String(bk)))))
526526 then throw(("NOT applied txId: " + bk))
527527 else unit
528528
529- let cV = {
529+ let cW = {
530530 let bl = bh
531531 let bm = size(bl)
532532 let bn = unit
533533 func bo (bp,bq) = if ((bq >= bm))
534534 then bp
535- else cU(bp, bl[bq])
535+ else cV(bp, bl[bq])
536536
537537 func br (bp,bq) = if ((bq >= bm))
538538 then bp
540540
541541 br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
542542 }
543- let cW = (I(am(), 0) + 1)
544- $Tuple2([DeleteEntry(av()), IntegerEntry(am(), cW), StringEntry(an(ao), ch(cr)), ci(cW, cs[r], cs[q])], cV)
543+ let cX = (I(am(), 0) + 1)
544+ $Tuple2([DeleteEntry(av()), IntegerEntry(am(), cX), StringEntry(an(ao), ch(cs)), ci(cX, ct[r], ct[q], ao)], cW)
545545 }
546546 }
547547
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = ""
55
66 let b = "__"
77
88 let c = ":"
99
1010 let d = 500000
1111
1212 let e = "https://forum.neutrino.at/"
1313
1414 let f = 160
1515
1616 let g = 250
1717
1818 let h = 1209600000
1919
2020 let i = 1000000
2121
2222 let j = 1000000000
2323
2424 let k = 1000000000
2525
2626 let l = 7200000
2727
2828 let m = 5400000
2929
3030 let n = 1
3131
3232 let o = 2
3333
3434 let p = 3
3535
3636 let q = 4
3737
3838 let r = 5
3939
4040 let s = 6
4141
4242 let t = 7
4343
4444 let u = 8
4545
4646 let v = 9
4747
4848 let w = 10
4949
5050 let x = 11
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 4
5959
6060 let C = 5
6161
6262 let D = 6
6363
6464 let E = 7
6565
6666 func F (G,H) = valueOrErrorMessage(getString(G, H), makeString(["mandatory ", toString(G), ".", H, " is not defined"], ""))
6767
6868
6969 func I (H,J) = valueOrElse(getInteger(this, H), J)
7070
7171
7272 let K = 1
7373
7474 let L = 2
7575
7676 let M = 3
7777
7878 let N = 4
7979
8080 let O = 5
8181
8282 let P = 6
8383
8484 let Q = 7
8585
8686 let R = 8
8787
8888 let S = 9
8989
9090 let T = 10
9191
9292 let U = 11
9393
9494 let V = 12
9595
9696 let W = 13
9797
9898 func X () = "%s%s__config__controlAddress"
9999
100100
101101 func Y () = "%s__controlConfig"
102102
103103
104104 func Z (aa) = split_4C(F(aa, Y()), b)
105105
106106
107107 func ab (ac,ad) = valueOrErrorMessage(addressFromString(ac[ad]), ("Control cfg doesn't contain address at index " + toString(ad)))
108108
109109
110110 let ae = addressFromStringValue(valueOrElse(getString(this, X()), "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP"))
111111
112112 let ac = Z(ae)
113113
114114 let af = ab(ac, K)
115115
116116 let ag = ab(ac, U)
117117
118118 func ah (ai) = ("%s%s__quorumRequired__" + ai)
119119
120120
121121 func aj () = "%s__paymentRequired"
122122
123123
124124 func ak () = "%s__gNsbtRequired"
125125
126126
127127 func al () = "%s__proposalId"
128128
129129
130130 func am () = "%s__updateVersion"
131131
132132
133133 func an (ao) = ("%s%d__proposalStatusData__" + toString(ao))
134134
135135
136136 func ap (ao) = ("%s%d__proposalData__" + toString(ao))
137137
138138
139139 func aq (ao,ar) = makeString(["%s%d%d", "votesByOpt", toString(ao), toString(ar)], b)
140140
141141
142142 func as (ao,at) = makeString(["%s%d%s", "votesByUser", toString(ao), at], b)
143143
144144
145145 func au (ao,at) = makeString(["%s%d%s", "optionByUser", toString(ao), at], b)
146146
147147
148148 func av () = "%s__applyInProgress"
149149
150150
151151 func aw (ax) = ("%s%d__proposalIdByTopicId__" + toString(ax))
152152
153153
154154 func ay (at) = ("%s%s_userGnsbtReleaseTime__" + at)
155155
156156
157157 func az (ao) = ("%s%d__numVoters__" + toString(ao))
158158
159159
160160 func aA () = "%s%s%s__stats__avg__uniqueVoters"
161161
162162
163163 func aB () = "%s%s%s__stats__avg__gnsbtVoted"
164164
165165
166166 func aC () = "%s%s__stats__uniqueAuthors"
167167
168168
169169 func aD (aE) = ("%s%s__numProposalsByAuthor__" + aE)
170170
171171
172172 func aF (aG) = ("%s%d__applyHistory__" + toString(aG))
173173
174174
175175 func aH (aI) = {
176176 let aJ = aI
177177 if ($isInstanceOf(aJ, "List[Any]"))
178178 then {
179179 let aK = aJ
180180 aK
181181 }
182182 else throw("fail to cast into List[Any]")
183183 }
184184
185185
186186 func aL (aI) = {
187187 let aJ = aI
188188 if ($isInstanceOf(aJ, "Int"))
189189 then {
190190 let aM = aJ
191191 aM
192192 }
193193 else throw("fail to cast into Int")
194194 }
195195
196196
197197 func aN (aO,aP,aQ,aR,aS,aT,aU) = makeString(["%b%d%d%d%b%d%b", toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), toString(aT), toString(aU)], b)
198198
199199
200200 func aV (aW,ai,aX,aY,aZ,ba,bb,bc,bd,be,bf) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", aW, ai, aX, aY, aZ, toString(ba), toString(bb), toString(bc), bd, toString(be), bf], b)
201201
202202
203203 func bg (bh) = if ((size(bh) > 20))
204204 then throw(("Too many transactions: " + toString(size(bh))))
205205 else {
206206 func bi (bj,bk) = if ((size(fromBase58String(bk)) != 32))
207207 then throw(("Wrong txId: " + bk))
208208 else if ((bj == ""))
209209 then bk
210210 else ((bj + c) + bk)
211211
212212 let bl = bh
213213 let bm = size(bl)
214214 let bn = ""
215215 func bo (bp,bq) = if ((bq >= bm))
216216 then bp
217217 else bi(bp, bl[bq])
218218
219219 func br (bp,bq) = if ((bq >= bm))
220220 then bp
221221 else throw("List size exceeds 20")
222222
223223 br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
224224 }
225225
226226
227227 let bs = 0
228228
229229 let bt = 1
230230
231231 func bu (bv) = {
232232 let bw = aH(invoke(ag, "gnsbtInfoSYSREADONLY", [bv, 0, 0], nil))
233233 let bx = aH(bw[2])
234234 let by = aL(bx[2])
235235 let bz = aL(bx[3])
236236 let bA = aL(bw[9])
237237 let bB = aL(bw[6])
238238 [(bz + bB), (by + bA)]
239239 }
240240
241241
242242 func bC (bD) = if ((value(indexOf(bD, e)) != 0))
243243 then throw("Invalid url")
244244 else if ((size(bD) > g))
245245 then throw("Url too long!")
246246 else {
247247 let ax = valueOrErrorMessage(parseInt(drop(bD, (value(lastIndexOf(bD, "/")) + 1))), "Wrong topicId")
248248 let bE = getInteger(aw(ax))
249249 if (isDefined(bE))
250250 then throw(("Voting with such forum link is already registered by id=" + toString(value(bE))))
251251 else ax
252252 }
253253
254254
255255 func bF (bG,aW,ai,aX,aY,aZ,bb,bc,bH,bh,bI) = if ((bG.assetId != unit))
256256 then throw("Allowed WAVES payment only!")
257257 else {
258258 let bJ = I(aj(), j)
259259 if ((bJ > bG.amount))
260260 then throw(("Payment attached should be at least " + toString(bJ)))
261261 else {
262262 let ax = bC(aY)
263263 if ((aZ == ""))
264264 then throw("Title is empty")
265265 else if ((size(aZ) > f))
266266 then throw("Too long title")
267267 else {
268268 let ba = lastBlock.timestamp
269269 if ((ba > bb))
270270 then throw(((("votingStartTime=" + toString(bb)) + " < proposalTime=") + toString(ba)))
271271 else if ((bb > bc))
272272 then throw(((("votingEndTime=" + toString(bc)) + " < votingStartTime=") + toString(bb)))
273273 else if (((bc - bb) > h))
274274 then throw(((("Voting period exceeds max: " + toString((bc - bb))) + " > ") + toString(h)))
275275 else {
276276 let bd = if ((ai == "IDEA"))
277277 then ""
278278 else bg(bh)
279279 if ((1 >= size(bI)))
280280 then throw("Too few choices to vote")
281281 else {
282282 let bK = bu(aX)
283283 let bL = bK[bs]
284284 let bM = bK[bt]
285285 let bN = I(ak(), k)
286286 if ((bN > bM))
287287 then throw((("You need at least " + toString(bN)) + " gNsbt to create voting"))
288288 else {
289289 let bO = invoke(af, "acceptWaves", nil, [bG])
290290 if ((bO == bO))
291291 then {
292292 let bP = I(ah(ai), d)
293293 let be = fraction(bP, bL, i)
294294 let ao = (I(al(), 0) + 1)
295295 let bQ = (I(aD(aX), 0) + 1)
296296 let bR = (I(aC(), 0) + (if ((bQ == 1))
297297 then 1
298298 else 0))
299299 let bS = makeString(bI, c)
300300 $Tuple2([IntegerEntry(al(), ao), IntegerEntry(aw(ax), ao), StringEntry(an(ao), aN(false, 0, 0, 0, false, 0, false)), StringEntry(ap(ao), aV(aW, ai, aX, toBase58String(toBytes(aY)), toBase58String(toBytes(aZ)), ba, bb, bc, bd, be, bS)), IntegerEntry(aD(aX), bQ), IntegerEntry(aC(), bR)], aW)
301301 }
302302 else throw("Strict value is not equal to itself.")
303303 }
304304 }
305305 }
306306 }
307307 }
308308 }
309309
310310
311311 func bT (ao,bI,bU,bV,bW,bX,bY) = {
312312 func bZ (bj,ca) = {
313313 let ad = value(indexOf(bI, ca))
314314 let cb = if (bU)
315315 then if ((ad == bX))
316316 then bY
317317 else I(aq(ao, ad), 0)
318318 else if ((ad == value(bV)))
319319 then bW
320320 else if ((ad == bX))
321321 then bY
322322 else I(aq(ao, ad), 0)
323323 if ((bj._2 > cb))
324324 then bj
325325 else $Tuple2(ad, cb)
326326 }
327327
328328 let bl = bI
329329 let bm = size(bl)
330330 let bn = $Tuple2(0, 0)
331331 func bo (bp,bq) = if ((bq >= bm))
332332 then bp
333333 else bZ(bp, bl[bq])
334334
335335 func br (bp,bq) = if ((bq >= bm))
336336 then bp
337337 else throw("List size exceeds 10")
338338
339339 br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
340340 }
341341
342342
343343 func cc (cd,ce,cf,cg) = makeString(["%b%d%d%d%b%d%b", toString(ce), toString(cf._1), toString(cf._2), toString(cg), cd[C], cd[D], cd[E]], b)
344344
345345
346346 func ch (cd) = makeString(["%b%d%d%d%b%d%b", cd[y], cd[z], cd[A], cd[B], "true", cd[D], cd[E]], b)
347347
348348
349-func ci (ao,aZ,bD) = {
349+func ci (cj,aZ,bD,ao) = {
350350 let bL = bu("")[bs]
351- let cj = 500000
352- StringEntry(aF(lastBlock.timestamp), makeString(["%d%d%d%s%s", toString(ao), toString(bL), toString(cj), aZ, bD], b))
351+ let ck = 500000
352+ StringEntry(aF(lastBlock.timestamp), makeString(["%d%d%d%s%s%d", toString(cj), toString(bL), toString(ck), aZ, bD, toString(ao)], b))
353353 }
354354
355355
356356 @Callable(aM)
357-func constructor (ck,cl,cm,cn,co) = if ((aM.caller != this))
357+func constructor (cl,cm,cn,co,cp) = if ((aM.caller != this))
358358 then throw("Permission denied")
359- else [StringEntry(X(), ck), IntegerEntry(ak(), cl), IntegerEntry(aj(), cm), IntegerEntry(ah("IDEA"), cn), IntegerEntry(ah("UPDATE"), co)]
359+ else [StringEntry(X(), cl), IntegerEntry(ak(), cm), IntegerEntry(aj(), cn), IntegerEntry(ah("IDEA"), co), IntegerEntry(ah("UPDATE"), cp)]
360360
361361
362362
363363 @Callable(aM)
364-func castVote (ao,cp) = {
365- let cq = toString(aM.caller)
366- let cr = split(F(this, an(ao)), b)
367- if ((cr[E] == "true"))
364+func castVote (ao,cq) = {
365+ let cr = toString(aM.caller)
366+ let cs = split(F(this, an(ao)), b)
367+ if ((cs[E] == "true"))
368368 then throw("Voting is canceled by team")
369369 else {
370- let cs = split(F(this, ap(ao)), b)
371- let ct = parseIntValue(cs[t])
372- let cu = parseIntValue(cs[u])
373- let cv = lastBlock.timestamp
374- if ((ct > cv))
370+ let ct = split(F(this, ap(ao)), b)
371+ let cu = parseIntValue(ct[t])
372+ let cv = parseIntValue(ct[u])
373+ let cw = lastBlock.timestamp
374+ if ((cu > cw))
375375 then throw("Voting not started yet")
376- else if ((cv >= cu))
376+ else if ((cw >= cv))
377377 then throw("Voting already finished")
378378 else {
379- let cw = split(cs[x], c)
380- let cx = size(cw)
381- if ((1 >= cx))
379+ let cx = split(ct[x], c)
380+ let cy = size(cx)
381+ if ((1 >= cy))
382382 then throw("Too few choices to vote")
383- else if ((cp >= cx))
384- then throw(("Unknown choice! Must be 0.." + toString((cx - 1))))
383+ else if ((cq >= cy))
384+ then throw(("Unknown choice! Must be 0.." + toString((cy - 1))))
385385 else {
386- let bK = bu(cq)
387- let cy = bK[bt]
388- if ((0 >= cy))
386+ let bK = bu(cr)
387+ let cz = bK[bt]
388+ if ((0 >= cz))
389389 then throw("no gnsbt to vote")
390390 else {
391391 let bL = bK[bs]
392- let bV = getInteger(au(ao, cq))
393- let cz = if (!(isDefined(bV)))
392+ let bV = getInteger(au(ao, cr))
393+ let cA = if (!(isDefined(bV)))
394394 then 0
395- else I(as(ao, cq), 0)
396- let cA = if (isDefined(bV))
395+ else I(as(ao, cr), 0)
396+ let cB = if (isDefined(bV))
397397 then I(aq(ao, value(bV)), 0)
398398 else 0
399- let cB = I(aq(ao, cp), 0)
400- let cC = parseIntValue(cr[B])
401- let cD = if (!(isDefined(bV)))
399+ let cC = I(aq(ao, cq), 0)
400+ let cD = parseIntValue(cs[B])
401+ let cE = if (!(isDefined(bV)))
402402 then 0
403- else ((cA - cz) + (if ((value(bV) == cp))
404- then cy
403+ else ((cB - cA) + (if ((value(bV) == cq))
404+ then cz
405405 else 0))
406406 let bY = if (if (isDefined(bV))
407- then (value(bV) == cp)
407+ then (value(bV) == cq)
408408 else false)
409- then cD
410- else (cB + cy)
411- let cE = ((cC - cz) + cy)
412- let cF = (cE >= parseIntValue(cs[w]))
413- let cG = I(az(ao), 0)
414- let cH = I(aA(), 0)
415- let cI = getIntegerValue(al())
416- let cJ = if ((cz == 0))
409+ then cE
410+ else (cC + cz)
411+ let cF = ((cD - cA) + cz)
412+ let cG = (cF >= parseIntValue(ct[w]))
413+ let cH = I(az(ao), 0)
414+ let cI = I(aA(), 0)
415+ let cJ = getIntegerValue(al())
416+ let cK = if ((cA == 0))
417417 then 1
418418 else 0
419- let cK = (cH + fraction(cJ, i, cI))
420- let cL = I(aB(), 0)
421- let cM = (cL + ((cy - cz) / cI))
419+ let cL = (cI + fraction(cK, i, cJ))
420+ let cM = I(aB(), 0)
421+ let cN = (cM + ((cz - cA) / cJ))
422422 let bU = if (!(isDefined(bV)))
423423 then true
424- else (value(bV) == cp)
424+ else (value(bV) == cq)
425425 let bW = if (bU)
426426 then nil
427- else [IntegerEntry(aq(ao, value(bV)), cD)]
428- let cN = bT(ao, cw, bU, bV, cD, cp, bY)
429- let cO = max([cu, I(ay(cq), 0)])
430- $Tuple2(([IntegerEntry(au(ao, cq), cp), IntegerEntry(as(ao, cq), cy), IntegerEntry(aq(ao, cp), bY), IntegerEntry(az(ao), (cG + cJ)), IntegerEntry(ay(cq), cO), IntegerEntry(aA(), cK), IntegerEntry(aB(), cM), StringEntry(an(ao), cc(cr, cF, cN, cE))] ++ bW), unit)
427+ else [IntegerEntry(aq(ao, value(bV)), cE)]
428+ let cO = bT(ao, cx, bU, bV, cE, cq, bY)
429+ let cP = max([cv, I(ay(cr), 0)])
430+ $Tuple2(([IntegerEntry(au(ao, cr), cq), IntegerEntry(as(ao, cr), cz), IntegerEntry(aq(ao, cq), bY), IntegerEntry(az(ao), (cH + cK)), IntegerEntry(ay(cr), cP), IntegerEntry(aA(), cL), IntegerEntry(aB(), cN), StringEntry(an(ao), cc(cs, cG, cO, cF))] ++ bW), unit)
431431 }
432432 }
433433 }
434434 }
435435 }
436436
437437
438438
439439 @Callable(aM)
440440 func initiateIdeaVoting (aY,aZ,bb,bc,bI) = if ((size(aM.payments) != 1))
441441 then throw("Exactly one payment required")
442442 else if ((size(bI) != 2))
443443 then throw("Exactly 2 option ['NO', 'YES'] are expected")
444444 else if ((bI[0] != "NO"))
445445 then throw("Option NO should be the first")
446446 else if ((bI[1] != "YES"))
447447 then throw("Option YES should be the second")
448448 else bF(value(aM.payments[0]), toBase58String(aM.transactionId), "IDEA", toString(aM.caller), aY, aZ, bb, bc, "PENDING", nil, bI)
449449
450450
451451
452452 @Callable(aM)
453453 func initiateUpdateVoting (aY,aZ,bb,bc,bh) = if ((size(aM.payments) != 1))
454454 then throw("Exactly one payment required")
455455 else if ((1 > size(bh)))
456456 then throw("Transactions list is empty")
457457 else if ((aM.caller != this))
458458 then throw("not authorized")
459459 else bF(value(aM.payments[0]), toBase58String(aM.transactionId), "UPDATE", toString(aM.caller), aY, aZ, bb, bc, "PENDING", bh, ["NO", "YES"])
460460
461461
462462
463463 @Callable(aM)
464464 func cancelVoting (ao) = if ((aM.caller != this))
465465 then throw("not authorized")
466466 else {
467- let cP = F(this, an(ao))
468- let cQ = ((take(cP, value(lastIndexOf(cP, b))) + b) + "true")
469- $Tuple2([StringEntry(an(ao), cQ)], unit)
467+ let cQ = F(this, an(ao))
468+ let cR = ((take(cQ, value(lastIndexOf(cQ, b))) + b) + "true")
469+ $Tuple2([StringEntry(an(ao), cR)], unit)
470470 }
471471
472472
473473
474474 @Callable(aM)
475475 func applyUpdate (ao) = {
476- let cs = split(F(this, ap(ao)), b)
477- let cu = parseIntValue(cs[u])
478- let cv = lastBlock.timestamp
479- if ((cu > cv))
476+ let ct = split(F(this, ap(ao)), b)
477+ let cv = parseIntValue(ct[u])
478+ let cw = lastBlock.timestamp
479+ if ((cv > cw))
480480 then throw("Voting is not finished yet")
481- else if (("UPDATE" != cs[o]))
481+ else if (("UPDATE" != ct[o]))
482482 then throw("Only UPDATE type can be applied")
483483 else {
484- let cr = split(F(this, an(ao)), b)
485- if ((cr[E] == "true"))
484+ let cs = split(F(this, an(ao)), b)
485+ if ((cs[E] == "true"))
486486 then throw("Voting is canceled")
487- else if ((cr[y] != "true"))
487+ else if ((cs[y] != "true"))
488488 then throw("Voting status invalid")
489- else if ((cr[z] != "1"))
489+ else if ((cs[z] != "1"))
490490 then throw("Winner is 'NO' - nothing to apply")
491- else if ((cr[C] == "true"))
491+ else if ((cs[C] == "true"))
492492 then throw("Scripts are already applied")
493493 else {
494- let cR = parseIntValue(cr[D])
495- if (((cv - l) > cR))
496- then throw((("Scripts timestamp=" + toString(cR)) + " is too far in the past, max 2 hrs allowed"))
497- else if ((cR > (cv + m)))
498- then throw((("Scripts timestamp=" + toString(cR)) + " is too far in the future, max 1.5 hrs allowed"))
494+ let cS = parseIntValue(cs[D])
495+ if (((cw - l) > cS))
496+ then throw((("Scripts timestamp=" + toString(cS)) + " is too far in the past, max 2 hrs allowed"))
497+ else if ((cS > (cw + m)))
498+ then throw((("Scripts timestamp=" + toString(cS)) + " is too far in the future, max 1.5 hrs allowed"))
499499 else {
500- let cS = I(av(), -1)
501- if ((cS != -1))
502- then throw((("proposalId=" + toString(cS)) + " is already being applied. Finish it first!"))
500+ let cT = I(av(), -1)
501+ if ((cT != -1))
502+ then throw((("proposalId=" + toString(cT)) + " is already being applied. Finish it first!"))
503503 else {
504- let cT = invoke(ae, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
505- if ((cT == cT))
504+ let cU = invoke(ae, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
505+ if ((cU == cU))
506506 then $Tuple2([IntegerEntry(av(), ao)], unit)
507507 else throw("Strict value is not equal to itself.")
508508 }
509509 }
510510 }
511511 }
512512 }
513513
514514
515515
516516 @Callable(aM)
517517 func finishApply () = {
518518 let ao = valueOrErrorMessage(getInteger(av()), "No apply in progress, nothing to finish")
519- let cs = split(F(this, ap(ao)), b)
520- let bh = split(cs[v], c)
521- let cr = split(F(this, an(ao)), b)
522- if ((cr[C] == "true"))
519+ let ct = split(F(this, ap(ao)), b)
520+ let bh = split(ct[v], c)
521+ let cs = split(F(this, an(ao)), b)
522+ if ((cs[C] == "true"))
523523 then throw("Scripts are already applied")
524524 else {
525- func cU (bj,bk) = if (!(isDefined(transactionHeightById(fromBase58String(bk)))))
525+ func cV (bj,bk) = if (!(isDefined(transactionHeightById(fromBase58String(bk)))))
526526 then throw(("NOT applied txId: " + bk))
527527 else unit
528528
529- let cV = {
529+ let cW = {
530530 let bl = bh
531531 let bm = size(bl)
532532 let bn = unit
533533 func bo (bp,bq) = if ((bq >= bm))
534534 then bp
535- else cU(bp, bl[bq])
535+ else cV(bp, bl[bq])
536536
537537 func br (bp,bq) = if ((bq >= bm))
538538 then bp
539539 else throw("List size exceeds 20")
540540
541541 br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
542542 }
543- let cW = (I(am(), 0) + 1)
544- $Tuple2([DeleteEntry(av()), IntegerEntry(am(), cW), StringEntry(an(ao), ch(cr)), ci(cW, cs[r], cs[q])], cV)
543+ let cX = (I(am(), 0) + 1)
544+ $Tuple2([DeleteEntry(av()), IntegerEntry(am(), cX), StringEntry(an(ao), ch(cs)), ci(cX, ct[r], ct[q], ao)], cW)
545545 }
546546 }
547547
548548

github/deemru/w8io/026f985 
113.74 ms