tx · 8a3BDFGh4g8n8JXpMTA6kD59wusUwGNTwyCMwavRs5Qm

3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP:  -0.02900000 Waves

2023.07.27 14:19 [2684188] smart account 3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP > SELF 0.00000000 Waves

{ "type": 13, "id": "8a3BDFGh4g8n8JXpMTA6kD59wusUwGNTwyCMwavRs5Qm", "fee": 2900000, "feeAssetId": null, "timestamp": 1690456728676, "version": 2, "chainId": 84, "sender": "3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP", "senderPublicKey": "AoKo4segKHU4DeJnxXQYJj2u7J6XJeux6r8KLW52cd2Q", "proofs": [ "4Beh6FiGVQSgSpGqYcfTSbormkbsaeR1wxuAwJuSqiZF3dRXaPnWQdLuFn2GijgR88b3jN9V8g6qrsw5EXCvZB9d" ], "script": "base64:BwIxCAISAwoBAhIGCgQCAQEBEgUKAwEBARIDCgECEgMKAQISBAoCAgISBAoCAgISAwoBAjEAA1NFUAICX18ADUNPTlRSQUNUX05BTUUCD2NhbGN1bGF0b3IucmlkZQAGU0NBTEU4AIDC1y8AB1BFTkRJTkcCB1BFTkRJTkcACEZJTklTSEVEAghGSU5JU0hFRAAFV0FWRVMCBVdBVkVTAQd3cmFwRXJyAQFzCQCsAgIJAKwCAgUNQ09OVFJBQ1RfTkFNRQICOiAFAXMBCHRocm93RXJyAQFzCQACAQkBB3dyYXBFcnIBBQFzAQ9hc3NldElkVG9TdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAwkAAQIFByRtYXRjaDACBFVuaXQFBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBD3N0cmluZ1RvQXNzZXRJZAEBcwMJAAACBQFzBQVXQVZFUwUEdW5pdAkA2QQBBQFzAQNhYnMBAW4DCQBmAgAABQFuCQEBLQEFAW4FAW4BEWtleUZhY3RvcnlBZGRyZXNzAAkAuQkCCQDMCAICAiVzCQDMCAICB2ZhY3RvcnkFA25pbAUDU0VQARNrZXlNYW5hZ2VyUHVibGljS2V5AAkAuQkCCQDMCAICAiVzCQDMCAICEG1hbmFnZXJQdWJsaWNLZXkFA25pbAUDU0VQAQxrZXlMcEFzc2V0SWQACQC5CQIJAMwIAgICJXMJAMwIAgIJbHBBc3NldElkBQNuaWwFA1NFUAEXa2V5UHJveHlUcmVhc3VyeUFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgINcHJveHlUcmVhc3VyeQUDbmlsBQNTRVABFmtleU1haW5UcmVhc3VyeUFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgIMbWFpblRyZWFzdXJ5BQNuaWwFA1NFUAELa2V5SW52ZXN0ZWQBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICCGludmVzdGVkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQdhc3NldElkBQNuaWwFA1NFUAEKa2V5RG9uYXRlZAEHYXNzZXRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgIHZG9uYXRlZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUHYXNzZXRJZAUDbmlsBQNTRVABDGtleUF2YWlsYWJsZQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCWF2YWlsYWJsZQkAzAgCCQClCAEFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEKa2V5Q2xhaW1lZAELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICB2NsYWltZWQJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABEGtleUN1cnJlbnRQZXJpb2QACQC5CQIJAMwIAgICJXMJAMwIAgINY3VycmVudFBlcmlvZAUDbmlsBQNTRVABEWtleVByaWNlRm9yUGVyaW9kAQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICBXByaWNlCQDMCAIJAKQDAQUGcGVyaW9kBQNuaWwFA1NFUAEOa2V5U3RhcnRIZWlnaHQBBnBlcmlvZAkAuQkCCQDMCAICBCVzJWQJAMwIAgILc3RhcnRIZWlnaHQJAMwIAgkApAMBBQZwZXJpb2QFA25pbAUDU0VQARRrZXlQb3dlck1hbmFnZXJCb251cwEGcGVyaW9kCQC5CQIJAMwIAgIEJXMlZAkAzAgCAhFwb3dlck1hbmFnZXJCb251cwkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABD2tleVBlcmlvZExlbmd0aAACECVzX19wZXJpb2RMZW5ndGgBGGtleUJsb2NrUHJvY2Vzc2luZ1Jld2FyZAACGSVzX19ibG9ja1Byb2Nlc3NpbmdSZXdhcmQBFWtleU5leHRCbG9ja1RvUHJvY2VzcwACFiVzX19uZXh0QmxvY2tUb1Byb2Nlc3MBEWtleUJsb2NrUHJvY2Vzc2VkAQZoZWlnaHQJALkJAgkAzAgCAgQlcyVkCQDMCAICDmJsb2NrUHJvY2Vzc2VkCQDMCAIJAKQDAQUGaGVpZ2h0BQNuaWwFA1NFUAENa2V5V2l0aGRyYXdhbAACDiVzX193aXRoZHJhd2FsARRrZXlXaXRoZHJhd2FsUmVxdWVzdAILdXNlckFkZHJlc3MEdHhJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgp3aXRoZHJhd2FsCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgkA2AQBBQR0eElkBQNuaWwFA1NFUAEWdmFsdWVXaXRoZHJhd2FsUmVxdWVzdAQGc3RhdHVzDWxwQXNzZXRBbW91bnQMdGFyZ2V0UGVyaW9kCWNsYWltVHhJZAQMY2xhaW1UeElkU3RyBAckbWF0Y2gwBQljbGFpbVR4SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAwkAAQIFByRtYXRjaDACBFVuaXQCBFNPT04JAAIBAgtNYXRjaCBlcnJvcgkAuQkCCQDMCAICCCVzJWQlZCVzCQDMCAIFBnN0YXR1cwkAzAgCCQCkAwEFDWxwQXNzZXRBbW91bnQJAMwIAgkApAMBBQx0YXJnZXRQZXJpb2QJAMwIAgUMY2xhaW1UeElkU3RyBQNuaWwFA1NFUAEba2V5UGVyaW9kV2l0aGRyYXdhbEFzc2V0SWRzAQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICDHBlcmlvZFJld2FyZAkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABGmtleVBlcmlvZFdpdGhkcmF3YWxBbW91bnRzAQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICEnBlcmlvZFJld2FyZEFtb3VudAkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVAAF2tleU1pbkhlaWdodEZvcldpdGhkcmF3CQC5CQIJAMwIAgICJXMJAMwIAgIUbWluSGVpZ2h0Rm9yV2l0aGRyYXcFA25pbAUDU0VQABdrZXlNYXhIZWlnaHRGb3JXaXRoZHJhdwkAuQkCCQDMCAICAiVzCQDMCAICFG1heEhlaWdodEZvcldpdGhkcmF3BQNuaWwFA1NFUAEhcGFyc2VXaXRoZHJhd2FsUmVxdWVzdFZhbHVlT3JGYWlsAQFzBAVwYXJ0cwkAtQkCBQFzBQNTRVADCQAAAgkAkAMBBQVwYXJ0cwAFBAZzdGF0dXMJAJEDAgUFcGFydHMAAQQNbHBBc3NldEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUFcGFydHMAAgkBB3dyYXBFcnIBAhVpbnZhbGlkIGxwQXNzZXRBbW91bnQEDHRhcmdldFBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUFcGFydHMAAwkBB3dyYXBFcnIBAhRpbnZhbGlkIHRhcmdldFBlcmlvZAQJY2xhaW1UeElkCQCRAwIFBXBhcnRzAAQJAJYKBAUGc3RhdHVzBQ1scEFzc2V0QW1vdW50BQx0YXJnZXRQZXJpb2QFCWNsYWltVHhJZAkBCHRocm93RXJyAQIgaW52YWxpZCB3aXRoZHJhd2FsIHJlcXVlc3QgdmFsdWUAFGZhY3RvcnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMJARFrZXlGYWN0b3J5QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABRmYWN0b3J5QWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRRmYWN0b3J5QWRkcmVzc09wdGlvbgkBB3dyYXBFcnIBAhdpbnZhbGlkIGZhY3RvcnkgYWRkcmVzcwAPbHBBc3NldElkT3B0aW9uBAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBAckbWF0Y2gxCQCdCAIFAWEJAQxrZXlMcEFzc2V0SWQAAwkAAQIFByRtYXRjaDECBlN0cmluZwQBcwUHJG1hdGNoMQkA2QQBBQFzAwkAAQIFByRtYXRjaDECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAD2xwQXNzZXRJZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQ9scEFzc2V0SWRPcHRpb24JAQd3cmFwRXJyAQIRaW52YWxpZCBscEFzc2V0SWQAGnByb3h5VHJlYXN1cnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBAckbWF0Y2gxCQCdCAIFAWEJARdrZXlQcm94eVRyZWFzdXJ5QWRkcmVzcwADCQABAgUHJG1hdGNoMQIGU3RyaW5nBAFzBQckbWF0Y2gxCQCmCAEFAXMDCQABAgUHJG1hdGNoMQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAacHJveHlUcmVhc3VyeUFkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUacHJveHlUcmVhc3VyeUFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIeaW52YWxpZCBwcm94eSB0cmVhc3VyeSBhZGRyZXNzABltYWluVHJlYXN1cnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBAckbWF0Y2gxCQCdCAIFAWEJARZrZXlNYWluVHJlYXN1cnlBZGRyZXNzAAMJAAECBQckbWF0Y2gxAgZTdHJpbmcEAXMFByRtYXRjaDEJAKYIAQUBcwMJAAECBQckbWF0Y2gxAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABltYWluVHJlYXN1cnlBZGRyZXNzT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFGW1haW5UcmVhc3VyeUFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIdaW52YWxpZCBtYWluIHRyZWFzdXJ5IGFkZHJlc3MBGWdldE1hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAJmYQUHJG1hdGNoMAQHJG1hdGNoMQkAnQgCBQJmYQkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDECBlN0cmluZwQDcHViBQckbWF0Y2gxCQDZBAEFA3B1YgUEdW5pdAUEdW5pdAELb25seUFkZHJlc3MCAWkHYWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFB2FkZHJlc3MGCQEIdGhyb3dFcnIBAhFwZXJtaXNzaW9uIGRlbmllZAELb25seUZhY3RvcnkBAWkJAQtvbmx5QWRkcmVzcwIFAWkFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAQ9yZXdhcmRGb3JPcHRpb24CB3Jld2FyZHMGdGFyZ2V0BAFzCQCQAwEFB3Jld2FyZHMECyR0MDUyMDg1MjMzCQCRAwIFB3Jld2FyZHMAAAQCYTAIBQskdDA1MjA4NTIzMwJfMQQCcjAIBQskdDA1MjA4NTIzMwJfMgQLJHQwNTIzNjUyNjEJAJEDAgUHcmV3YXJkcwABBAJhMQgFCyR0MDUyMzY1MjYxAl8xBAJyMQgFCyR0MDUyMzY1MjYxAl8yBAskdDA1MjY0NTI4OQkAkQMCBQdyZXdhcmRzAAIEAmEyCAULJHQwNTI2NDUyODkCXzEEAnIyCAULJHQwNTI2NDUyODkCXzIDAwkAZgIFAXMAAAkAAAIFAmEwBQZ0YXJnZXQHBQJyMAMDCQBmAgUBcwABCQAAAgUCYTEFBnRhcmdldAcFAnIxAwMJAGYCBQFzAAIJAAACBQJhMgUGdGFyZ2V0BwUCcjIFBHVuaXQBEGZpbmFsaXplSU5URVJOQUwDGG5ld1RyZWFzdXJ5Vm9sdW1lSW5XYXZlcxdwd3JNYW5hZ2Vyc0JvbnVzSW5XYXZlcyB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgQSZG9uYXRlZFdhdmVzQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEKa2V5RG9uYXRlZAEFBHVuaXQAAAQTaW52ZXN0ZWRXYXZlc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBC2tleUludmVzdGVkAQUEdW5pdAAABBxjdXJyZW50VHJlYXN1cnlWb2x1bWVJbldhdmVzCQBkAgUSZG9uYXRlZFdhdmVzQW1vdW50BRNpbnZlc3RlZFdhdmVzQW1vdW50BAlwcm9maXRSYXcJAGUCBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMFHGN1cnJlbnRUcmVhc3VyeVZvbHVtZUluV2F2ZXMEFnB3ck1hbmFnZXJzQm9udXNBbW91bnQDAwkAZwIFCXByb2ZpdFJhdwUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMGCQAAAgUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMAAAUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMJAQh0aHJvd0VycgECH3Bvd2VyIGJvbnVzIGlzIG1vcmUgdGhhbiBwcm9maXQEBnByb2ZpdAkAZQIFCXByb2ZpdFJhdwUWcHdyTWFuYWdlcnNCb251c0Ftb3VudAQMZG9uYXRpb25QYXJ0AwkAZgIFHGN1cnJlbnRUcmVhc3VyeVZvbHVtZUluV2F2ZXMAAAkAawMFEmRvbmF0ZWRXYXZlc0Ftb3VudAUGU0NBTEU4BRxjdXJyZW50VHJlYXN1cnlWb2x1bWVJbldhdmVzAAAEFWRvbmF0aW9uUHJvZml0UGFydFJhdwkAawMFBnByb2ZpdAUMZG9uYXRpb25QYXJ0BQZTQ0FMRTgEF2ludmVzdG1lbnRQcm9maXRQYXJ0UmF3CQBlAgUGcHJvZml0BRVkb25hdGlvblByb2ZpdFBhcnRSYXcEI3RyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmQWJzCQEDYWJzAQUgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYEEGFtb3VudFRvRG9uYXRpb24JAGsDBRdpbnZlc3RtZW50UHJvZml0UGFydFJhdwMJAGYCAAAFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBSN0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZkFicwAABQZTQ0FMRTgEEmFtb3VudFRvSW52ZXN0bWVudAkAawMFFWRvbmF0aW9uUHJvZml0UGFydFJhdwMJAGYCBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgAABSN0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZkFicwAABQZTQ0FMRTgEEmRvbmF0aW9uUHJvZml0UGFydAkAZAIJAGUCBRVkb25hdGlvblByb2ZpdFBhcnRSYXcFEmFtb3VudFRvSW52ZXN0bWVudAUQYW1vdW50VG9Eb25hdGlvbgQUaW52ZXN0bWVudFByb2ZpdFBhcnQJAGQCCQBlAgUXaW52ZXN0bWVudFByb2ZpdFBhcnRSYXcFEGFtb3VudFRvRG9uYXRpb24FEmFtb3VudFRvSW52ZXN0bWVudAQYZG9uYXRlZFdhdmVzQW1vdW50TmV3UmF3CQBkAgUSZG9uYXRlZFdhdmVzQW1vdW50BRJkb25hdGlvblByb2ZpdFBhcnQEGWludmVzdGVkV2F2ZXNBbW91bnROZXdSYXcJAGQCBRNpbnZlc3RlZFdhdmVzQW1vdW50BRRpbnZlc3RtZW50UHJvZml0UGFydAQPZG9uYXRlZFBhcnREZWJ0CQCXAwEJAMwIAgAACQDMCAIFGGRvbmF0ZWRXYXZlc0Ftb3VudE5ld1JhdwUDbmlsBBBpbnZlc3RlZFBhcnREZWJ0CQCXAwEJAMwIAgAACQDMCAIFGWludmVzdGVkV2F2ZXNBbW91bnROZXdSYXcFA25pbAQVZG9uYXRlZFdhdmVzQW1vdW50TmV3CQBkAgkAlgMBCQDMCAIAAAkAzAgCBRhkb25hdGVkV2F2ZXNBbW91bnROZXdSYXcFA25pbAUQaW52ZXN0ZWRQYXJ0RGVidAQWaW52ZXN0ZWRXYXZlc0Ftb3VudE5ldwkAZAIJAJYDAQkAzAgCAAAJAMwIAgUZaW52ZXN0ZWRXYXZlc0Ftb3VudE5ld1JhdwUDbmlsBQ9kb25hdGVkUGFydERlYnQED2xwQXNzZXRRdWFudGl0eQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQ9scEFzc2V0SWRPckZhaWwJAQd3cmFwRXJyAQIUaW52YWxpZCBscEFzc2V0IGluZm8IcXVhbnRpdHkECG5ld1ByaWNlCQBrAwUWaW52ZXN0ZWRXYXZlc0Ftb3VudE5ldwUGU0NBTEU4BQ9scEFzc2V0UXVhbnRpdHkEE2NoZWNrSWZQcmljZU5vdFplcm8DCQECIT0CBQhuZXdQcmljZQAABgkBCHRocm93RXJyAQIUTFAgcHJpY2UgY2Fubm90IGJlIDADCQAAAgUTY2hlY2tJZlByaWNlTm90WmVybwUTY2hlY2tJZlByaWNlTm90WmVybwQTbHBBc3NldEFtb3VudFRvQnVybgkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBDWtleVdpdGhkcmF3YWwAAAAEEHBheW1lbnRBbW91bnRNaW4JAJYDAQkAzAgCAAAJAMwIAgkAawMFE2xwQXNzZXRBbW91bnRUb0J1cm4FCG5ld1ByaWNlBQZTQ0FMRTgFA25pbAQYZmluYWxJbnZlc3RlZFdhdmVzQW1vdW50CQBlAgUWaW52ZXN0ZWRXYXZlc0Ftb3VudE5ldwUQcGF5bWVudEFtb3VudE1pbgQUbHBBc3NldEZpbmFsUXVhbnRpdHkJAGUCBQ9scEFzc2V0UXVhbnRpdHkFE2xwQXNzZXRBbW91bnRUb0J1cm4JAJgKBgUQcGF5bWVudEFtb3VudE1pbgUYZmluYWxJbnZlc3RlZFdhdmVzQW1vdW50BRVkb25hdGVkV2F2ZXNBbW91bnROZXcFCG5ld1ByaWNlBRNscEFzc2V0QW1vdW50VG9CdXJuBRRscEFzc2V0RmluYWxRdWFudGl0eQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLggBaQEHY2xhaW1MUAEQdXNlckFkZHJlc3NCeXRlcwQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAt1c2VyQWRkcmVzcwkBB0FkZHJlc3MBBRB1c2VyQWRkcmVzc0J5dGVzBAlhdmFpbGFibGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQxrZXlBdmFpbGFibGUBBQt1c2VyQWRkcmVzcwAABAdjbGFpbWVkCQELdmFsdWVPckVsc2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEKa2V5Q2xhaW1lZAEFC3VzZXJBZGRyZXNzAAAEDmZhY3RvcnlBY3Rpb25zAwkAZgIFCWF2YWlsYWJsZQAACQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDXRyYW5zZmVyQXNzZXQJAMwIAgUQdXNlckFkZHJlc3NCeXRlcwkAzAgCBQlhdmFpbGFibGUJAMwIAgUPbHBBc3NldElkT3JGYWlsBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDGtleUF2YWlsYWJsZQEFC3VzZXJBZGRyZXNzCQDMCAIAAAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJAQprZXlDbGFpbWVkAQULdXNlckFkZHJlc3MJAMwIAgkAZAIFB2NsYWltZWQFCWF2YWlsYWJsZQUDbmlsBQNuaWwFA25pbAkBCHRocm93RXJyAQIQbm90aGluZyB0byBjbGFpbQkAlAoCBQNuaWwFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGZpbmFsaXplBBB1c2VyQWRkcmVzc0J5dGVzGG5ld1RyZWFzdXJ5Vm9sdW1lSW5XYXZlcxdwd3JNYW5hZ2Vyc0JvbnVzSW5XYXZlcyB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBNjdXJyZW50UGVyaW9kT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARBrZXlDdXJyZW50UGVyaW9kAAkBB3dyYXBFcnIBAg5pbnZhbGlkIHBlcmlvZAQMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ9rZXlQZXJpb2RMZW5ndGgACQEHd3JhcEVycgECFWludmFsaWQgcGVyaW9kIGxlbmd0aAQSY3VycmVudFN0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ5rZXlTdGFydEhlaWdodAEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQd3cmFwRXJyAQIUaW52YWxpZCBzdGFydCBoZWlnaHQEEmN1cnJlbnRQcmljZU9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQERa2V5UHJpY2VGb3JQZXJpb2QBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEEm5leHRCbG9ja1RvUHJvY2VzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEVa2V5TmV4dEJsb2NrVG9Qcm9jZXNzAAkBB3dyYXBFcnIBAh1pbnZhbGlkIG5leHQgYmxvY2sgdG8gcHJvY2VzcwQPcGVyaW9kRW5kSGVpZ2h0CQBlAgkAZAIFEmN1cnJlbnRTdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAEEBmNoZWNrcwkAzAgCAwkAAAIIBQFpDG9yaWdpbkNhbGxlcgUZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIDCQBmAgUSbmV4dEJsb2NrVG9Qcm9jZXNzBQ9wZXJpb2RFbmRIZWlnaHQGCQEIdGhyb3dFcnIBAhJ1bnByb2Nlc3NlZCBibG9ja3MJAMwIAgMJAGcCBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMAAAYJAQh0aHJvd0VycgECG2ludmFsaWQgbmV3IHRyZWFzdXJ5IHZvbHVtZQkAzAgCAwkAZwIFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzAAAGCQEIdGhyb3dFcnIBAhppbnZhbGlkIFBXUiBtYW5hZ2VycyBib251cwkAzAgCAwMJAGcCBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgkBAS0BBQZTQ0FMRTgJAGcCBQZTQ0FMRTgFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBwYJAQh0aHJvd0VycgECM2ludmFsaWQgdHJlYXN1cnkgdm9sdW1lIGRpZmYgYWxsb2NhdGlvbiBjb2VmZmljaWVudAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDAxMDc4MzExMDQzCQEQZmluYWxpemVJTlRFUk5BTAMFGG5ld1RyZWFzdXJ5Vm9sdW1lSW5XYXZlcwUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBBBwYXltZW50QW1vdW50TWluCAUNJHQwMTA3ODMxMTA0MwJfMQQYZmluYWxJbnZlc3RlZFdhdmVzQW1vdW50CAUNJHQwMTA3ODMxMTA0MwJfMgQVZG9uYXRlZFdhdmVzQW1vdW50TmV3CAUNJHQwMTA3ODMxMTA0MwJfMwQIbmV3UHJpY2UIBQ0kdDAxMDc4MzExMDQzAl80BBNscEFzc2V0QW1vdW50VG9CdXJuCAUNJHQwMTA3ODMxMTA0MwJfNQQUbHBBc3NldEZpbmFsUXVhbnRpdHkIBQ0kdDAxMDc4MzExMDQzAl82BAluZXdQZXJpb2QJAGQCBRNjdXJyZW50UGVyaW9kT3JGYWlsAAEKAQxhZGROZXdBY3Rpb24CB2FjdGlvbnMHcGF5bWVudAQNJHQwMTExOTExMTI1MwUHYWN0aW9ucwQPc2NyaXB0VHJhbnNmZXJzCAUNJHQwMTExOTExMTI1MwJfMQQOYXNzZXRJZHNTdHJpbmcIBQ0kdDAxMTE5MTExMjUzAl8yBA1hbW91bnRzU3RyaW5nCAUNJHQwMTExOTExMTI1MwJfMwQNcGF5bWVudEFtb3VudAgFB3BheW1lbnQGYW1vdW50BA5wYXltZW50QXNzZXRJZAgFB3BheW1lbnQHYXNzZXRJZAQRbmV3QXNzZXRJZHNTdHJpbmcJAKwCAgICJXMJALkJAgkAzAgCBQ5hc3NldElkc1N0cmluZwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUOcGF5bWVudEFzc2V0SWQFA25pbAUDU0VQBBBuZXdBbW91bnRzU3RyaW5nCQCsAgICAiVkCQC5CQIJAMwIAgUNYW1vdW50c1N0cmluZwkAzAgCCQCkAwEFDXBheW1lbnRBbW91bnQFA25pbAUDU0VQBBFuZXdTY3JpcHRUcmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwUUZmFjdG9yeUFkZHJlc3NPckZhaWwFDXBheW1lbnRBbW91bnQFDnBheW1lbnRBc3NldElkCQCVCgMJAM0IAgUPc2NyaXB0VHJhbnNmZXJzBRFuZXdTY3JpcHRUcmFuc2ZlcgURbmV3QXNzZXRJZHNTdHJpbmcFEG5ld0Ftb3VudHNTdHJpbmcEDSR0MDExNzEzMTE4MDQKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAIAAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFkZE5ld0FjdGlvbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQPc2NyaXB0VHJhbnNmZXJzCAUNJHQwMTE3MTMxMTgwNAJfMQQIQXNzZXRJZHMIBQ0kdDAxMTcxMzExODA0Al8yBAdBbW91bnRzCAUNJHQwMTE3MTMxMTgwNAJfMwQOZmFjdG9yeUFjdGlvbnMJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJARRrZXlQb3dlck1hbmFnZXJCb251cwEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAMwIAgUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQEQa2V5Q3VycmVudFBlcmlvZAAJAMwIAgUJbmV3UGVyaW9kBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBEWtleVByaWNlRm9yUGVyaW9kAQUJbmV3UGVyaW9kCQDMCAIFCG5ld1ByaWNlBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDmtleVN0YXJ0SGVpZ2h0AQUJbmV3UGVyaW9kCQDMCAIJAGQCBQ9wZXJpb2RFbmRIZWlnaHQAAQUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIEYnVybgkAzAgCBRNscEFzc2V0QW1vdW50VG9CdXJuBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDWtleVdpdGhkcmF3YWwACQDMCAIAAAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJAQtrZXlJbnZlc3RlZAEFBHVuaXQJAMwIAgUYZmluYWxJbnZlc3RlZFdhdmVzQW1vdW50BQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBCmtleURvbmF0ZWQBBQR1bml0CQDMCAIFFWRvbmF0ZWRXYXZlc0Ftb3VudE5ldwUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAILc3RyaW5nRW50cnkJAMwIAgkBG2tleVBlcmlvZFdpdGhkcmF3YWxBc3NldElkcwEFCW5ld1BlcmlvZAkAzAgCBQhBc3NldElkcwUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAILc3RyaW5nRW50cnkJAMwIAgkBGmtleVBlcmlvZFdpdGhkcmF3YWxBbW91bnRzAQUJbmV3UGVyaW9kCQDMCAIFB0Ftb3VudHMFA25pbAUDbmlsBQNuaWwJAJQKAgUPc2NyaXB0VHJhbnNmZXJzBQ5mYWN0b3J5QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBmaW5hbGl6ZVJFQURPTkxZAxhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYEE2N1cnJlbnRQZXJpb2RPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEGtleUN1cnJlbnRQZXJpb2QACQEHd3JhcEVycgECDmludmFsaWQgcGVyaW9kBAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBD2tleVBlcmlvZExlbmd0aAAJAQd3cmFwRXJyAQIVaW52YWxpZCBwZXJpb2QgbGVuZ3RoBBJjdXJyZW50U3RhcnRIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBDmtleVN0YXJ0SGVpZ2h0AQUTY3VycmVudFBlcmlvZE9yRmFpbAkBB3dyYXBFcnIBAhRpbnZhbGlkIHN0YXJ0IGhlaWdodAQSY3VycmVudFByaWNlT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARFrZXlQcmljZUZvclBlcmlvZAEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQd3cmFwRXJyAQINaW52YWxpZCBwcmljZQQSbmV4dEJsb2NrVG9Qcm9jZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARVrZXlOZXh0QmxvY2tUb1Byb2Nlc3MACQEHd3JhcEVycgECHWludmFsaWQgbmV4dCBibG9jayB0byBwcm9jZXNzBA9wZXJpb2RFbmRIZWlnaHQJAGUCCQBkAgUSY3VycmVudFN0YXJ0SGVpZ2h0BQxwZXJpb2RMZW5ndGgAAQQGY2hlY2tzCQDMCAIDCQBmAgUSbmV4dEJsb2NrVG9Qcm9jZXNzBQ9wZXJpb2RFbmRIZWlnaHQGCQEIdGhyb3dFcnIBAhJ1bnByb2Nlc3NlZCBibG9ja3MJAMwIAgMJAGcCBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMAAAYJAQh0aHJvd0VycgECG2ludmFsaWQgbmV3IHRyZWFzdXJ5IHZvbHVtZQkAzAgCAwkAZwIFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzAAAGCQEIdGhyb3dFcnIBAhppbnZhbGlkIFBXUiBtYW5hZ2VycyBib251cwkAzAgCAwMJAGcCBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgkBAS0BBQZTQ0FMRTgJAGcCBQZTQ0FMRTgFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBwYJAQh0aHJvd0VycgECM2ludmFsaWQgdHJlYXN1cnkgdm9sdW1lIGRpZmYgYWxsb2NhdGlvbiBjb2VmZmljaWVudAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIFA25pbAkBEGZpbmFsaXplSU5URVJOQUwDBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZpbnZlc3QBEHVzZXJBZGRyZXNzQnl0ZXMEC2NoZWNrQ2FsbGVyCQELb25seUZhY3RvcnkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUQdXNlckFkZHJlc3NCeXRlcwQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEEmN1cnJlbnRQcmljZU9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQERa2V5UHJpY2VGb3JQZXJpb2QBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEB3BheW1lbnQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAQh0aHJvd0VycgECEGludmFsaWQgcGF5bWVudHMEDSR0MDE1Mjg1MTU0NjIDAwkAAAIIBQdwYXltZW50B2Fzc2V0SWQFBHVuaXQJAGYCCAUHcGF5bWVudAZhbW91bnQAAAcJAJQKAggFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkCQEIdGhyb3dFcnIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50BA1wYXltZW50QW1vdW50CAUNJHQwMTUyODUxNTQ2MgJfMQQOcGF5bWVudEFzc2V0SWQIBQ0kdDAxNTI4NTE1NDYyAl8yBA1scEFzc2V0QW1vdW50AwkAZgIFEmN1cnJlbnRQcmljZU9yRmFpbAAACQBrAwUNcGF5bWVudEFtb3VudAUGU0NBTEU4BRJjdXJyZW50UHJpY2VPckZhaWwAAAQIaW52ZXN0ZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQtrZXlJbnZlc3RlZAEFBHVuaXQAAAQHYWN0aW9ucwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRltYWluVHJlYXN1cnlBZGRyZXNzT3JGYWlsBQ1wYXltZW50QW1vdW50BQ5wYXltZW50QXNzZXRJZAUDbmlsBA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBC2tleUludmVzdGVkAQUEdW5pdAkAzAgCCQBkAgUIaW52ZXN0ZWQFDXBheW1lbnRBbW91bnQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCB3JlaXNzdWUJAMwIAgUNbHBBc3NldEFtb3VudAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAINdHJhbnNmZXJBc3NldAkAzAgCBRB1c2VyQWRkcmVzc0J5dGVzCQDMCAIFDWxwQXNzZXRBbW91bnQJAMwIAgUPbHBBc3NldElkT3JGYWlsBQNuaWwFA25pbAUDbmlsCQCUCgIFB2FjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3ARB1c2VyQWRkcmVzc0J5dGVzBAtjaGVja0NhbGxlcgkBC29ubHlGYWN0b3J5AQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEC3VzZXJBZGRyZXNzCQEHQWRkcmVzcwEFEHVzZXJBZGRyZXNzQnl0ZXMEE2N1cnJlbnRQZXJpb2RPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEGtleUN1cnJlbnRQZXJpb2QACQEHd3JhcEVycgECDmludmFsaWQgcGVyaW9kBAdwYXltZW50AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQEIdGhyb3dFcnIBCQEHd3JhcEVycgECEGludmFsaWQgcGF5bWVudHMEDnBheW1lbnRBc3NldElkAwkAAAIIBQdwYXltZW50B2Fzc2V0SWQFD2xwQXNzZXRJZE9yRmFpbAUPbHBBc3NldElkT3JGYWlsCQEIdGhyb3dFcnIBAhVpbnZhbGlkIHBheW1lbnQgYXNzZXQEDXBheW1lbnRBbW91bnQDCQBmAggFB3BheW1lbnQGYW1vdW50AAAIBQdwYXltZW50BmFtb3VudAkBCHRocm93RXJyAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAQKd2l0aGRyYXdhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBDWtleVdpdGhkcmF3YWwAAAAEB2FjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUUZmFjdG9yeUFkZHJlc3NPckZhaWwFDXBheW1lbnRBbW91bnQFDnBheW1lbnRBc3NldElkBQNuaWwEDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQENa2V5V2l0aGRyYXdhbAAJAMwIAgkAZAIFCndpdGhkcmF3YWwFDXBheW1lbnRBbW91bnQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCC3N0cmluZ0VudHJ5CQDMCAIJARRrZXlXaXRoZHJhd2FsUmVxdWVzdAIFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCQDMCAIJARZ2YWx1ZVdpdGhkcmF3YWxSZXF1ZXN0BAUHUEVORElORwUNcGF5bWVudEFtb3VudAkAZAIFE2N1cnJlbnRQZXJpb2RPckZhaWwAAQUEdW5pdAUDbmlsBQNuaWwFA25pbAMJAAACBQ5mYWN0b3J5QWN0aW9ucwUOZmFjdG9yeUFjdGlvbnMJAJQKAgUHYWN0aW9ucwUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY2FuY2VsV2l0aGRyYXcCEHVzZXJBZGRyZXNzQnl0ZXMEdHhJZAQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAt1c2VyQWRkcmVzcwkBB0FkZHJlc3MBBRB1c2VyQWRkcmVzc0J5dGVzBBd3aXRoZHJhd2FsUmVxdWVzdE9wdGlvbgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEUa2V5V2l0aGRyYXdhbFJlcXVlc3QCBQt1c2VyQWRkcmVzcwUEdHhJZAkBB3dyYXBFcnIBAhppbnZhbGlkIHdpdGhkcmF3YWwgcmVxdWVzdAQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEDSR0MDE3ODY5MTc5ODIJASFwYXJzZVdpdGhkcmF3YWxSZXF1ZXN0VmFsdWVPckZhaWwBBRd3aXRoZHJhd2FsUmVxdWVzdE9wdGlvbgQGc3RhdHVzCAUNJHQwMTc4NjkxNzk4MgJfMQQNbHBBc3NldEFtb3VudAgFDSR0MDE3ODY5MTc5ODICXzIEDHRhcmdldFBlcmlvZAgFDSR0MDE3ODY5MTc5ODICXzMECWNsYWltVHhJZAgFDSR0MDE3ODY5MTc5ODICXzQEBmNoZWNrcwkAzAgCAwkAAAIFBnN0YXR1cwUHUEVORElORwYJAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHN0YXR1cwkAzAgCAwkAZgIFDHRhcmdldFBlcmlvZAUTY3VycmVudFBlcmlvZE9yRmFpbAYJAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHBlcmlvZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAp3aXRoZHJhd2FsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ1rZXlXaXRoZHJhd2FsAAkBB3dyYXBFcnIBAh9pbnZhbGlkIHRvdGFsIHdpdGhkcmF3YWwgYW1vdW50BA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDWtleVdpdGhkcmF3YWwACQDMCAIDCQBnAgUKd2l0aGRyYXdhbAUNbHBBc3NldEFtb3VudAkAZQIFCndpdGhkcmF3YWwFDWxwQXNzZXRBbW91bnQJAQh0aHJvd0VycgECGWludmFsaWQgd2l0aGRyYXdhbCBhbW91bnQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCC2RlbGV0ZUVudHJ5CQDMCAIJARRrZXlXaXRoZHJhd2FsUmVxdWVzdAIFC3VzZXJBZGRyZXNzBQR0eElkBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAg10cmFuc2ZlckFzc2V0CQDMCAIFEHVzZXJBZGRyZXNzQnl0ZXMJAMwIAgUNbHBBc3NldEFtb3VudAkAzAgCBQ9scEFzc2V0SWRPckZhaWwFA25pbAUDbmlsBQNuaWwDCQAAAgUOZmFjdG9yeUFjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQCUCgIFA25pbAUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPY2xhaW1Db2xsYXRlcmFsAhB1c2VyQWRkcmVzc0J5dGVzBHR4SWQEC2NoZWNrQ2FsbGVyCQELb25seUZhY3RvcnkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUQdXNlckFkZHJlc3NCeXRlcwQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEF3dpdGhkcmF3YWxSZXF1ZXN0T3B0aW9uCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARRrZXlXaXRoZHJhd2FsUmVxdWVzdAIFC3VzZXJBZGRyZXNzBQR0eElkCQEHd3JhcEVycgECGmludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0BA0kdDAxOTMxOTE5NDMyCQEhcGFyc2VXaXRoZHJhd2FsUmVxdWVzdFZhbHVlT3JGYWlsAQUXd2l0aGRyYXdhbFJlcXVlc3RPcHRpb24EBnN0YXR1cwgFDSR0MDE5MzE5MTk0MzICXzEEDWxwQXNzZXRBbW91bnQIBQ0kdDAxOTMxOTE5NDMyAl8yBAx0YXJnZXRQZXJpb2QIBQ0kdDAxOTMxOTE5NDMyAl8zBAljbGFpbVR4SWQIBQ0kdDAxOTMxOTE5NDMyAl80AwkAAAIFBnN0YXR1cwUIRklOSVNIRUQJAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHN0YXR1cwMJAGYCBQx0YXJnZXRQZXJpb2QFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHBlcmlvZAQLcHJpY2VPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEWtleVByaWNlRm9yUGVyaW9kAQUMdGFyZ2V0UGVyaW9kCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEBmFtb3VudAMJAGYCBQtwcmljZU9yRmFpbAAACQBrAwUNbHBBc3NldEFtb3VudAULcHJpY2VPckZhaWwFBlNDQUxFOAAABA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgtzdHJpbmdFbnRyeQkAzAgCCQEUa2V5V2l0aGRyYXdhbFJlcXVlc3QCBQt1c2VyQWRkcmVzcwUEdHhJZAkAzAgCCQEWdmFsdWVXaXRoZHJhd2FsUmVxdWVzdAQFCEZJTklTSEVEBQ1scEFzc2V0QW1vdW50BQx0YXJnZXRQZXJpb2QIBQFpDXRyYW5zYWN0aW9uSWQFA25pbAUDbmlsCQDMCAIECmFzc2V0c0xpc3QJANEIAgkAvQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBG2tleVBlcmlvZFdpdGhkcmF3YWxBc3NldElkcwEFE2N1cnJlbnRQZXJpb2RPckZhaWwFA1NFUAAABAthbW91bnRzTGlzdAkA0QgCCQC9CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEaa2V5UGVyaW9kV2l0aGRyYXdhbEFtb3VudHMBBRNjdXJyZW50UGVyaW9kT3JGYWlsBQNTRVAAAAkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIOdHJhbnNmZXJBc3NldHMJAMwIAgUQdXNlckFkZHJlc3NCeXRlcwkAzAgCBQphc3NldHNMaXN0CQDMCAIFC2Ftb3VudHNMaXN0BQNuaWwFA25pbAUDbmlsCQCUCgIFA25pbAUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENcHJvY2Vzc0Jsb2NrcwEQdXNlckFkZHJlc3NCeXRlcwQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAt1c2VyQWRkcmVzcwkBB0FkZHJlc3MBBRB1c2VyQWRkcmVzc0J5dGVzBBNjdXJyZW50UGVyaW9kT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARBrZXlDdXJyZW50UGVyaW9kAAkBB3dyYXBFcnIBAg5pbnZhbGlkIHBlcmlvZAQMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ9rZXlQZXJpb2RMZW5ndGgACQEHd3JhcEVycgECFWludmFsaWQgcGVyaW9kIGxlbmd0aAQSY3VycmVudFN0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ5rZXlTdGFydEhlaWdodAEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQd3cmFwRXJyAQIUaW52YWxpZCBzdGFydCBoZWlnaHQEEmN1cnJlbnRQcmljZU9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQERa2V5UHJpY2VGb3JQZXJpb2QBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEEm5leHRCbG9ja1RvUHJvY2VzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEVa2V5TmV4dEJsb2NrVG9Qcm9jZXNzAAkBB3dyYXBFcnIBAh1pbnZhbGlkIG5leHQgYmxvY2sgdG8gcHJvY2VzcwQPcGVyaW9kRW5kSGVpZ2h0CQBlAgkAZAIFEmN1cnJlbnRTdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAEEHGJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemVNYXgAKAQZYmxvY2tzUHJvY2Vzc2luZ0JhdGNoU2l6ZQMDAwkAZwIFBmhlaWdodAUSbmV4dEJsb2NrVG9Qcm9jZXNzAwkAZwIFEm5leHRCbG9ja1RvUHJvY2VzcwUSY3VycmVudFN0YXJ0SGVpZ2h0BgkAAAIFE2N1cnJlbnRQZXJpb2RPckZhaWwAAAcJAGcCBQ9wZXJpb2RFbmRIZWlnaHQFEm5leHRCbG9ja1RvUHJvY2VzcwcJAJcDAQkAzAgCCQBkAgkAZQIFD3BlcmlvZEVuZEhlaWdodAUSbmV4dEJsb2NrVG9Qcm9jZXNzAAEJAMwIAgUcYmxvY2tzUHJvY2Vzc2luZ0JhdGNoU2l6ZU1heAUDbmlsCQEIdGhyb3dFcnIBCQEHd3JhcEVycgECFGludmFsaWQgdGFyZ2V0IGJsb2NrBBVibG9ja1Byb2Nlc3NpbmdSZXdhcmQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBGGtleUJsb2NrUHJvY2Vzc2luZ1Jld2FyZAAJAQd3cmFwRXJyAQIfaW52YWxpZCBibG9jayBwcm9jZXNzaW5nIHJld2FyZAQgYmxvY2tQcm9jZXNzaW5nUmV3YXJkQnlHZW5lcmF0b3IJAGkCBRVibG9ja1Byb2Nlc3NpbmdSZXdhcmQFGWJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemUEKWJsb2NrUHJvY2Vzc2luZ1Jld2FyZEJ5R2VuZXJhdG9yUmVtYWluZGVyCQBlAgUVYmxvY2tQcm9jZXNzaW5nUmV3YXJkCQBoAgUgYmxvY2tQcm9jZXNzaW5nUmV3YXJkQnlHZW5lcmF0b3IFGWJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemUKAQNtYXACA2FjYwNpbmMDCQBnAgUDaW5jBRlibG9ja3NQcm9jZXNzaW5nQmF0Y2hTaXplBQNhY2MEEXRhcmdldEJsb2NrSGVpZ2h0CQBkAgUSbmV4dEJsb2NrVG9Qcm9jZXNzBQNpbmMED3RhcmdldEJsb2NrSW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDtBwEFEXRhcmdldEJsb2NrSGVpZ2h0CQEHd3JhcEVycgECEmludmFsaWQgYmxvY2sgaW5mbwQUdHJlYXN1cnlSZXdhcmRPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBD3Jld2FyZEZvck9wdGlvbgIIBQ90YXJnZXRCbG9ja0luZm8HcmV3YXJkcwUacHJveHlUcmVhc3VyeUFkZHJlc3NPckZhaWwJAQd3cmFwRXJyAQkArAICAiNpbnZhbGlkIHRyZWFzdXJ5IHJld2FyZCBmb3IgaGVpZ2h0IAkApAMBBRF0YXJnZXRCbG9ja0hlaWdodAQJZ2VuZXJhdG9yCAUPdGFyZ2V0QmxvY2tJbmZvCWdlbmVyYXRvcgQJYXZhaWxhYmxlCQELdmFsdWVPckVsc2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEMa2V5QXZhaWxhYmxlAQUJZ2VuZXJhdG9yAAAEDGNhbGxlclJld2FyZAMJAAACBQNpbmMJAGUCBRlibG9ja3NQcm9jZXNzaW5nQmF0Y2hTaXplAAEJAGQCBSBibG9ja1Byb2Nlc3NpbmdSZXdhcmRCeUdlbmVyYXRvcgUpYmxvY2tQcm9jZXNzaW5nUmV3YXJkQnlHZW5lcmF0b3JSZW1haW5kZXIFIGJsb2NrUHJvY2Vzc2luZ1Jld2FyZEJ5R2VuZXJhdG9yBA1scEFzc2V0QW1vdW50AwkAZgIFEmN1cnJlbnRQcmljZU9yRmFpbAAACQBrAwkAZQIFFHRyZWFzdXJ5UmV3YXJkT3JGYWlsBQxjYWxsZXJSZXdhcmQFBlNDQUxFOAUSY3VycmVudFByaWNlT3JGYWlsAAAEFGZhY3RvcnlBY3Rpb25zU2luZ2xlCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCC3N0cmluZ0VudHJ5CQDMCAIJARFrZXlCbG9ja1Byb2Nlc3NlZAEFEXRhcmdldEJsb2NrSGVpZ2h0CQDMCAIJALkJAgkAzAgCCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgkApAMBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQDMCAIJAKUIAQUJZ2VuZXJhdG9yCQDMCAIJANgEAQUQdXNlckFkZHJlc3NCeXRlcwkAzAgCCQCkAwEFFHRyZWFzdXJ5UmV3YXJkT3JGYWlsCQDMCAIJAKQDAQUMY2FsbGVyUmV3YXJkCQDMCAIJAKQDAQUNbHBBc3NldEFtb3VudAUDbmlsBQNTRVAFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQEMa2V5QXZhaWxhYmxlAQUJZ2VuZXJhdG9yCQDMCAIJAGQCBQlhdmFpbGFibGUFDWxwQXNzZXRBbW91bnQFA25pbAUDbmlsBQNuaWwDCQAAAgUUZmFjdG9yeUFjdGlvbnNTaW5nbGUFFGZhY3RvcnlBY3Rpb25zU2luZ2xlBA0kdDAyNDAwMjI0MDM1BQNhY2MECmxwQXNzZXRBY2MIBQ0kdDAyNDAwMjI0MDM1Al8xBAlyZXdhcmRBY2MIBQ0kdDAyNDAwMjI0MDM1Al8yCQCUCgIJAGQCBQpscEFzc2V0QWNjBQ1scEFzc2V0QW1vdW50CQBkAgUJcmV3YXJkQWNjBRR0cmVhc3VyeVJld2FyZE9yRmFpbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQEbGlzdAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAkAzAgCABUJAMwIAgAWCQDMCAIAFwkAzAgCABgJAMwIAgAZCQDMCAIAGgkAzAgCABsJAMwIAgAcCQDMCAIAHQkAzAgCAB4JAMwIAgAfCQDMCAIAIAkAzAgCACEJAMwIAgAiCQDMCAIAIwkAzAgCACQJAMwIAgAlCQDMCAIAJgkAzAgCACcFA25pbAQNJHQwMjQzMDIyNDM3OAoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbWFwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA0MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoAwkAAAIFDSR0MDI0MzAyMjQzNzgFDSR0MDI0MzAyMjQzNzgEEXJld2FyZEFtb3VudFRvdGFsCAUNJHQwMjQzMDIyNDM3OAJfMgQSbHBBc3NldEFtb3VudFRvdGFsCAUNJHQwMjQzMDIyNDM3OAJfMQQacmV3YXJkVG9NYWluVHJlYXN1cnlBbW91bnQJAGUCBRFyZXdhcmRBbW91bnRUb3RhbAUVYmxvY2tQcm9jZXNzaW5nUmV3YXJkBAhpbnZlc3RlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBC2tleUludmVzdGVkAQUEdW5pdAAABAdhY3Rpb25zCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCB3JlaXNzdWUJAMwIAgUSbHBBc3NldEFtb3VudFRvdGFsBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBFWtleU5leHRCbG9ja1RvUHJvY2VzcwAJAMwIAgkAZAIFEm5leHRCbG9ja1RvUHJvY2VzcwUZYmxvY2tzUHJvY2Vzc2luZ0JhdGNoU2l6ZQUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIZdHJhbnNmZXJGcm9tUHJveHlUcmVhc3VyeQkAzAgCCAUZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAVieXRlcwkAzAgCBRpyZXdhcmRUb01haW5UcmVhc3VyeUFtb3VudAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIZdHJhbnNmZXJGcm9tUHJveHlUcmVhc3VyeQkAzAgCBRB1c2VyQWRkcmVzc0J5dGVzCQDMCAIFFWJsb2NrUHJvY2Vzc2luZ1Jld2FyZAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJAQtrZXlJbnZlc3RlZAEFBHVuaXQJAMwIAgkAZAIFCGludmVzdGVkBRpyZXdhcmRUb01haW5UcmVhc3VyeUFtb3VudAUDbmlsBQNuaWwFA25pbAMJAAACBQdhY3Rpb25zBQdhY3Rpb25zCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAECXB1YmxpY0tleQQHJG1hdGNoMAkBGWdldE1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA3B1YgUHJG1hdGNoMAUDcHViCAUCdHgPc2VuZGVyUHVibGljS2V5CQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQlwdWJsaWNLZXl3O/N/", "height": 2684188, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CK4sYcu67kpWrryazaT54bguTXR2LWzHnenFWnhhvLGn Next: 5Ckarhp8XofjGwC1C3A8iQ5HomdERTtzi2SvuwSa8tEb Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 6 #-}
1+{-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
6-let b = 100000000
6+let b = "calculator.ride"
77
8-func c (d) = makeString(["voting_verified_v2.ride:", d], " ")
8+let c = 100000000
9+
10+let d = "PENDING"
11+
12+let e = "FINISHED"
13+
14+let f = "WAVES"
15+
16+func g (h) = ((b + ": ") + h)
917
1018
11-func e (d) = throw(c(d))
19+func i (h) = throw(g(h))
1220
1321
14-func f (g) = {
15- let h = g
16- if ($isInstanceOf(h, "Int"))
22+func j (k) = {
23+ let l = k
24+ if ($isInstanceOf(l, "ByteVector"))
1725 then {
18- let i = h
19- i
26+ let m = l
27+ toBase58String(m)
2028 }
21- else throw("Failed to cast into Integer")
29+ else if ($isInstanceOf(l, "Unit"))
30+ then f
31+ else throw("Match error")
2232 }
2333
2434
25-func j (k,l) = valueOrElse(getInteger(k, l), 0)
35+func n (h) = if ((h == f))
36+ then unit
37+ else fromBase58String(h)
2638
2739
28-func m (k,l) = valueOrErrorMessage(getInteger(k, l), c((l + " is not defined")))
40+func o (p) = if ((0 > p))
41+ then -(p)
42+ else p
2943
3044
31-func n (k,l) = valueOrElse(getString(k, l), "")
45+func q () = makeString(["%s", "factory"], a)
3246
3347
34-func o (k,l) = valueOrErrorMessage(getString(k, l), c((l + " is not defined")))
48+func r () = makeString(["%s", "managerPublicKey"], a)
3549
3650
37-let p = makeString(["%s", "boostingContract"], a)
38-
39-let q = makeString(["%s", "emissionContract"], a)
40-
41-let r = makeString(["%s", "assetsStoreContract"], a)
42-
43-let s = addressFromStringValue(getStringValue(p))
44-
45-let t = addressFromStringValue(getStringValue(q))
46-
47-let u = addressFromStringValue(getStringValue(r))
48-
49-let v = makeString(["%s", "config"], a)
50-
51-let w = split(o(t, v), a)[1]
52-
53-let x = fromBase58String(w)
54-
55-let y = makeString(["%s%s", "votingThreshold", "add"], a)
56-
57-let z = makeString(["%s%s", "votingThreshold", "remove"], a)
58-
59-let A = makeString(["%s", "periodLengthRemove"], a)
60-
61-let B = makeString(["%s", "maxPeriodLength"], a)
62-
63-let C = makeString(["%s", "minPeriodLength"], a)
64-
65-func D (E,F) = makeString(["%s%s%d", "votingRewardAssetId", E, toString(F)], a)
51+func s () = makeString(["%s", "lpAssetId"], a)
6652
6753
68-func G (H,E,F) = makeString(["%s%s%s%d", "votingReward", toString(H), E, toString(F)], a)
54+func t () = makeString(["%s", "proxyTreasury"], a)
6955
7056
71-func I (E,F) = makeString(["%s%s%d", "totalVotingReward", E, toString(F)], a)
57+func u () = makeString(["%s", "mainTreasury"], a)
7258
7359
74-let J = makeString(["%s", "finalizeCallRewardAmount"], a)
75-
76-let K = makeString(["%s", "minSuggestRemoveBalance"], a)
77-
78-func L (E) = makeString(["%s%s", "currentIndex", E], a)
60+func v (k) = makeString(["%s%s", "invested", j(k)], a)
7961
8062
81-func M (E,F,N) = makeString(["%s%s%d%s", "vote", E, toString(F), toString(N)], a)
63+func w (k) = makeString(["%s%s", "donated", j(k)], a)
8264
8365
84-func O (P,Q) = makeString(["%s%d", toString(P), toString(Q)], a)
66+func x (y) = makeString(["%s%s", "available", toString(y)], a)
8567
8668
87-func R (E,F) = makeString(["%s%s%d", "suggestIssuer", E, toString(F)], a)
69+func z (y) = makeString(["%s%s", "claimed", toString(y)], a)
8870
8971
90-func S (H,E,F) = makeString(["%s%s%s%d", "history", toString(H), E, toString(F)], a)
72+func A () = makeString(["%s", "currentPeriod"], a)
9173
9274
93-let T = makeString(["%s", "feePerBlock"], a)
94-
95-let U = m(this, T)
96-
97-let V = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a)
98-
99-let W = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a)
100-
101-func X (E,F) = makeString(["%s%s%d", "votingInfo", E, toString(F)], a)
75+func B (C) = makeString(["%s%d", "price", toString(C)], a)
10276
10377
104-func Y (Z,aa,ab,ac,ad,ae,af,ag,ah,ai) = makeString(["%s%s%d%s%s%d%d%d%d%d", toString(Z), aa, toString(ab), ac, ad, toString(ae), toString(af), toString(ag), toString(ah), toString(ai)], a)
78+func D (C) = makeString(["%s%d", "startHeight", toString(C)], a)
10579
10680
107-func aj (E) = makeString(["%s%s", "assetImage", E], a)
81+func E (C) = makeString(["%s%d", "powerManagerBonus", toString(C)], a)
10882
10983
110-func ak (H,al) = {
111- let Q = invoke(s, "getUserGwxAmountAtHeightREADONLY", [H, al], nil)
112- f(Q)
84+func F () = "%s__periodLength"
85+
86+
87+func G () = "%s__blockProcessingReward"
88+
89+
90+func H () = "%s__nextBlockToProcess"
91+
92+
93+func I (J) = makeString(["%s%d", "blockProcessed", toString(J)], a)
94+
95+
96+func K () = "%s__withdrawal"
97+
98+
99+func L (y,M) = makeString(["%s%s%s", "withdrawal", toString(y), toBase58String(M)], a)
100+
101+
102+func N (O,P,Q,R) = {
103+ let S = {
104+ let l = R
105+ if ($isInstanceOf(l, "ByteVector"))
106+ then {
107+ let m = l
108+ toBase58String(m)
109+ }
110+ else if ($isInstanceOf(l, "Unit"))
111+ then "SOON"
112+ else throw("Match error")
113+ }
114+ makeString(["%s%d%d%s", O, toString(P), toString(Q), S], a)
113115 }
114116
115117
116-func am () = "%s__managerVaultAddress"
118+func T (C) = makeString(["%s%d", "periodReward", toString(C)], a)
117119
118120
119-func an () = "%s__managerPublicKey"
121+func U (C) = makeString(["%s%d", "periodRewardAmount", toString(C)], a)
120122
121123
122-func ao () = {
123- let h = getString(am())
124- if ($isInstanceOf(h, "String"))
124+let V = makeString(["%s", "minHeightForWithdraw"], a)
125+
126+let W = makeString(["%s", "maxHeightForWithdraw"], a)
127+
128+func X (h) = {
129+ let Y = split(h, a)
130+ if ((size(Y) == 5))
125131 then {
126- let ap = h
127- addressFromStringValue(ap)
132+ let O = Y[1]
133+ let P = valueOrErrorMessage(parseInt(Y[2]), g("invalid lpAssetAmount"))
134+ let Q = valueOrErrorMessage(parseInt(Y[3]), g("invalid targetPeriod"))
135+ let R = Y[4]
136+ $Tuple4(O, P, Q, R)
128137 }
129- else this
138+ else i("invalid withdrawal request value")
130139 }
131140
132141
133-func aq () = {
134- let ar = ao()
135- let h = getString(ar, an())
136- if ($isInstanceOf(h, "String"))
142+let Z = {
143+ let l = getString(this, q())
144+ if ($isInstanceOf(l, "String"))
137145 then {
138- let ap = h
139- fromBase58String(ap)
146+ let h = l
147+ addressFromString(h)
140148 }
141- else if ($isInstanceOf(h, "Unit"))
149+ else if ($isInstanceOf(l, "Unit"))
142150 then unit
143151 else throw("Match error")
144152 }
145153
154+let aa = valueOrErrorMessage(Z, g("invalid factory address"))
146155
147-func as (at) = {
148- let au = split(at, a)
149- let av = au[1]
150- let Z = if ((av == "true"))
151- then true
152- else false
153- let aa = au[2]
154- let ab = parseIntValue(au[3])
155- let ac = au[4]
156- let ad = au[5]
157- let ae = parseIntValue(au[6])
158- let af = parseIntValue(au[7])
159- let ag = parseIntValue(au[8])
160- let ah = parseIntValue(au[9])
161- let ai = parseIntValue(au[10])
162- $Tuple10(Z, aa, ab, ac, ad, ae, af, ag, ah, ai)
156+let ab = {
157+ let l = Z
158+ if ($isInstanceOf(l, "Address"))
159+ then {
160+ let ac = l
161+ let ad = getString(ac, s())
162+ if ($isInstanceOf(ad, "String"))
163+ then {
164+ let h = ad
165+ fromBase58String(h)
166+ }
167+ else if ($isInstanceOf(ad, "Unit"))
168+ then unit
169+ else throw("Match error")
170+ }
171+ else if ($isInstanceOf(l, "Unit"))
172+ then unit
173+ else throw("Match error")
174+ }
175+
176+let ae = valueOrErrorMessage(ab, g("invalid lpAssetId"))
177+
178+let af = {
179+ let l = Z
180+ if ($isInstanceOf(l, "Address"))
181+ then {
182+ let ac = l
183+ let ad = getString(ac, t())
184+ if ($isInstanceOf(ad, "String"))
185+ then {
186+ let h = ad
187+ addressFromString(h)
188+ }
189+ else if ($isInstanceOf(ad, "Unit"))
190+ then unit
191+ else throw("Match error")
192+ }
193+ else if ($isInstanceOf(l, "Unit"))
194+ then unit
195+ else throw("Match error")
196+ }
197+
198+let ag = valueOrErrorMessage(af, g("invalid proxy treasury address"))
199+
200+let ah = {
201+ let l = Z
202+ if ($isInstanceOf(l, "Address"))
203+ then {
204+ let ac = l
205+ let ad = getString(ac, u())
206+ if ($isInstanceOf(ad, "String"))
207+ then {
208+ let h = ad
209+ addressFromString(h)
210+ }
211+ else if ($isInstanceOf(ad, "Unit"))
212+ then unit
213+ else throw("Match error")
214+ }
215+ else if ($isInstanceOf(l, "Unit"))
216+ then unit
217+ else throw("Match error")
218+ }
219+
220+let ai = valueOrErrorMessage(ah, g("invalid main treasury address"))
221+
222+func aj () = {
223+ let l = Z
224+ if ($isInstanceOf(l, "Address"))
225+ then {
226+ let ak = l
227+ let ad = getString(ak, r())
228+ if ($isInstanceOf(ad, "String"))
229+ then {
230+ let al = ad
231+ fromBase58String(al)
232+ }
233+ else unit
234+ }
235+ else unit
163236 }
164237
165238
166-func aw (E,ax) = {
167- let at = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found"))
168- let ay = split(at, a)
169- let ad = ay[5]
170- let af = valueOrErrorMessage(parseIntValue(ay[7]), c("voting start height not found"))
171- let az = valueOrErrorMessage(getString(R(E, ax)), c("voting issuer not found"))
172- let aA = [if ((ad == "inProgress"))
239+func am (an,ao) = if ((an.caller == ao))
240+ then true
241+ else i("permission denied")
242+
243+
244+func ap (an) = am(an, aa)
245+
246+
247+func aq (ar,as) = {
248+ let h = size(ar)
249+ let at = ar[0]
250+ let au = at._1
251+ let av = at._2
252+ let aw = ar[1]
253+ let ax = aw._1
254+ let ay = aw._2
255+ let az = ar[2]
256+ let aA = az._1
257+ let aB = az._2
258+ if (if ((h > 0))
259+ then (au == as)
260+ else false)
261+ then av
262+ else if (if ((h > 1))
263+ then (ax == as)
264+ else false)
265+ then ay
266+ else if (if ((h > 2))
267+ then (aA == as)
268+ else false)
269+ then aB
270+ else unit
271+ }
272+
273+
274+func aC (aD,aE,aF) = {
275+ let aG = valueOrElse(getInteger(aa, w(unit)), 0)
276+ let aH = valueOrElse(getInteger(aa, v(unit)), 0)
277+ let aI = (aG + aH)
278+ let aJ = (aD - aI)
279+ let aK = if (if ((aJ >= aE))
173280 then true
174- else e("no voting in progress"), if ((af > height))
281+ else (aE == 0))
282+ then aE
283+ else i("power bonus is more than profit")
284+ let aL = (aJ - aK)
285+ let aM = if ((aI > 0))
286+ then fraction(aG, c, aI)
287+ else 0
288+ let aN = fraction(aL, aM, c)
289+ let aO = (aL - aN)
290+ let aP = o(aF)
291+ let aQ = fraction(aO, if ((0 > aF))
292+ then aP
293+ else 0, c)
294+ let aR = fraction(aN, if ((aF > 0))
295+ then aP
296+ else 0, c)
297+ let aS = ((aN - aR) + aQ)
298+ let aT = ((aO - aQ) + aR)
299+ let aU = (aG + aS)
300+ let aV = (aH + aT)
301+ let aW = min([0, aU])
302+ let aX = min([0, aV])
303+ let aY = (max([0, aU]) + aX)
304+ let aZ = (max([0, aV]) + aW)
305+ let ba = valueOrErrorMessage(assetInfo(ae), g("invalid lpAsset info")).quantity
306+ let bb = fraction(aZ, c, ba)
307+ let bc = if ((bb != 0))
175308 then true
176- else e("voting expired")]
177- if ((aA == aA))
178- then $Tuple3(ad, af, az)
309+ else i("LP price cannot be 0")
310+ if ((bc == bc))
311+ then {
312+ let bd = valueOrElse(getInteger(aa, K()), 0)
313+ let be = max([0, fraction(bd, bb, c)])
314+ let bf = (aZ - be)
315+ let bg = (ba - bd)
316+ $Tuple6(be, bf, aY, bb, bd, bg)
317+ }
179318 else throw("Strict value is not equal to itself.")
180319 }
181320
182321
183-func aB (aC,E,F) = {
184- let aD = M(E, F, aC)
185- let aE = valueOrErrorMessage(getString(aD), c("you have not voted"))
186- let aF = split(aE, a)
187- let Q = parseIntValue(aF[2])
188- let aG = valueOrErrorMessage(getString(X(E, F)), c("voting info not found"))
189- let aH = as(aG)
190- let ah = aH._9
191- let ai = aH._10
192- let aI = fraction(Q, b, (ah + ai))
193- let aJ = valueOrElse(getInteger(I(E, F)), 0)
194- let aK = fraction(aI, aJ, b, FLOOR)
195- aK
196- }
197-
198-
199-@Callable(aL)
200-func suggestAdd (E,aM,aN) = {
201- let aO = aL.payments[0]
202- let aP = value(aO.assetId)
203- let aQ = value(aO.amount)
204- let aR = getIntegerValue(C)
205- let aS = getIntegerValue(B)
206- let aT = {
207- let aU = invoke(u, "isVerifiedREADONLY", [E], nil)
208- if ($isInstanceOf(aU, "Boolean"))
209- then aU
210- else throw(($getType(aU) + " couldn't be cast to Boolean"))
211- }
212- let aA = [if (if ((aM >= aR))
213- then (aS >= aM)
214- else false)
215- then true
216- else e("invalid periodLength"), if ((aT == false))
217- then true
218- else e("token already verified"), if ((aQ > (aM * U)))
219- then true
220- else e("not enough wx for given period"), if ((aQ >= getIntegerValue(V)))
221- then true
222- else e("payment less then min for suggest")]
223- if ((aA == aA))
322+@Callable(an)
323+func claimLP (bh) = {
324+ let bi = ap(an)
325+ if ((bi == bi))
224326 then {
225- let aV = L(E)
226- let ax = getInteger(aV)
227- let aW = if (isDefined(ax))
228- then (value(ax) + 1)
229- else 0
230- let aX = if ((size(aL.payments) > 1))
231- then {
232- let aY = aL.payments[1]
233- let aZ = toBase58String(value(aY.assetId))
234- let ba = value(aY.amount)
235- $Tuple4(true, aZ, ba, [StringEntry(D(E, aW), aZ), IntegerEntry(I(E, aW), ba)])
236- }
237- else $Tuple4(false, "EMPTY", 0, nil)
238- let Z = aX._1
239- let aa = aX._2
240- let ab = aX._3
241- let bb = aX._4
242- let ag = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
243- let at = Y(Z, aa, ab, "verification", "inProgress", height, (height + aM), ag, 0, 0)
244- let bc = getIntegerValue(J)
245- let bd = (aQ - bc)
246- ([IntegerEntry(aV, aW), StringEntry(R(E, aW), toString(aL.caller)), StringEntry(X(E, aW), at), StringEntry(aj(E), aN), Burn(aP, bd)] ++ bb)
327+ let y = Address(bh)
328+ let bj = valueOrElse(getInteger(aa, x(y)), 0)
329+ let bk = valueOrElse(getInteger(aa, z(y)), 0)
330+ let bl = if ((bj > 0))
331+ then [invoke(aa, "transferAsset", [bh, bj, ae], nil), invoke(aa, "integerEntry", [x(y), 0], nil), invoke(aa, "integerEntry", [z(y), (bk + bj)], nil)]
332+ else i("nothing to claim")
333+ $Tuple2(nil, bl)
247334 }
248335 else throw("Strict value is not equal to itself.")
249336 }
250337
251338
252339
253-@Callable(aL)
254-func suggestRemove (E) = {
255- let be = ak(toString(aL.caller), height)
256- let bf = getIntegerValue(K)
257- let aO = aL.payments[0]
258- let aP = value(aO.assetId)
259- let aQ = value(aO.amount)
260- let aT = {
261- let aU = invoke(u, "isVerifiedREADONLY", [E], nil)
262- if ($isInstanceOf(aU, "Boolean"))
263- then aU
264- else throw(($getType(aU) + " couldn't be cast to Boolean"))
265- }
266- let aA = [if (aT)
267- then true
268- else e("token not verified"), if ((be >= bf))
269- then true
270- else e("not enough gWXes"), if ((aQ >= getIntegerValue(W)))
271- then true
272- else e("payment less then min for suggest")]
273- if ((aA == aA))
340+@Callable(an)
341+func finalize (bh,aD,aE,aF) = {
342+ let bi = ap(an)
343+ if ((bi == bi))
274344 then {
275- let aV = L(E)
276- let ax = getInteger(aV)
277- let aW = if (isDefined(ax))
278- then (value(ax) + 1)
279- else 0
280- let aM = valueOrErrorMessage(getInteger(A), c("periodLengthRemove not set"))
281- let af = (height + aM)
282- let ag = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
283- let at = Y(false, "EMPTY", 0, "deverification", "inProgress", height, (height + aM), ag, 0, 0)
284-[IntegerEntry(aV, aW), StringEntry(R(E, aW), toString(aL.caller)), StringEntry(X(E, aW), at)]
285- }
286- else throw("Strict value is not equal to itself.")
287- }
345+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
346+ let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length"))
347+ let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height"))
348+ let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price"))
349+ let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process"))
350+ let br = ((bo + bn) - 1)
351+ let bs = [if ((an.originCaller == ai))
352+ then true
353+ else i("permission denied"), if ((bq > br))
354+ then true
355+ else i("unprocessed blocks"), if ((aD >= 0))
356+ then true
357+ else i("invalid new treasury volume"), if ((aE >= 0))
358+ then true
359+ else i("invalid PWR managers bonus"), if (if ((aF >= -(c)))
360+ then (c >= aF)
361+ else false)
362+ then true
363+ else i("invalid treasury volume diff allocation coefficient")]
364+ if ((bs == bs))
365+ then {
366+ let bt = aC(aD, aE, aF)
367+ let be = bt._1
368+ let bf = bt._2
369+ let aY = bt._3
370+ let bb = bt._4
371+ let bd = bt._5
372+ let bg = bt._6
373+ let bu = (bm + 1)
374+ func bv (bw,bx) = {
375+ let by = bw
376+ let bz = by._1
377+ let bA = by._2
378+ let bB = by._3
379+ let bC = bx.amount
380+ let bD = bx.assetId
381+ let bE = ("%s" + makeString([bA, j(bD)], a))
382+ let bF = ("%d" + makeString([bB, toString(bC)], a))
383+ let bG = ScriptTransfer(aa, bC, bD)
384+ $Tuple3((bz :+ bG), bE, bF)
385+ }
288386
387+ let bH = {
388+ let bI = an.payments
389+ let bJ = size(bI)
390+ let bK = $Tuple3(nil, "", "")
391+ func bL (bM,bN) = if ((bN >= bJ))
392+ then bM
393+ else bv(bM, bI[bN])
289394
395+ func bO (bM,bN) = if ((bN >= bJ))
396+ then bM
397+ else throw("List size exceeds 10")
290398
291-@Callable(aL)
292-func vote (E,P) = {
293- let aV = L(E)
294- let ax = valueOrErrorMessage(getInteger(aV), c("voting does not exist"))
295- let at = aw(E, ax)
296- if ((at == at))
297- then {
298- let bg = at._2
299- let bh = ak(toString(aL.caller), bg)
300- let aD = M(E, ax, aL.caller)
301- let aA = [if ((getString(aD) == unit))
302- then true
303- else e("You have already voted"), if ((bh > 0))
304- then true
305- else throw("You'll not have gWX at the end of voting")]
306- if ((aA == aA))
307- then {
308- let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found"))
309- let au = as(aG)
310- let ah = au._9
311- let ai = au._10
312- let bi = if (P)
313- then $Tuple2((ah + bh), ai)
314- else $Tuple2(ah, (ai + bh))
315- let bj = bi._1
316- let bk = bi._2
317- let bl = Y(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bj, bk)
318- let bm = {
319- let h = getString(D(E, ax))
320- if ($isInstanceOf(h, "String"))
321- then {
322- let bn = h
323-[StringEntry(G(aL.caller, E, ax), O(P, bh))]
324- }
325- else if ($isInstanceOf(h, "Unit"))
326- then nil
327- else throw("Match error")
399+ bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
328400 }
329- ([StringEntry(aD, O(P, bh)), StringEntry(X(E, ax), bl)] ++ bm)
401+ let bz = bH._1
402+ let bP = bH._2
403+ let bQ = bH._3
404+ let bl = [invoke(aa, "integerEntry", [E(bm), aE], nil), invoke(aa, "integerEntry", [A(), bu], nil), invoke(aa, "integerEntry", [B(bu), bb], nil), invoke(aa, "integerEntry", [D(bu), (br + 1)], nil), invoke(aa, "burn", [bd], nil), invoke(aa, "integerEntry", [K(), 0], nil), invoke(aa, "integerEntry", [v(unit), bf], nil), invoke(aa, "integerEntry", [w(unit), aY], nil), invoke(aa, "stringEntry", [T(bu), bP], nil), invoke(aa, "stringEntry", [U(bu), bQ], nil)]
405+ $Tuple2(bz, bl)
330406 }
331407 else throw("Strict value is not equal to itself.")
332408 }
335411
336412
337413
338-@Callable(aL)
339-func cancelVote (E) = {
340- let aV = L(E)
341- let ax = valueOrErrorMessage(getInteger(aV), c("voting does not exist"))
342- let aD = M(E, ax, aL.caller)
343- let aE = valueOrErrorMessage(getString(aD), c("you have not voted"))
344- let aF = split(aE, a)
345- let P = aF[1]
346- let Q = parseIntValue(aF[2])
347- let at = aw(E, ax)
348- if ((at == at))
414+@Callable(an)
415+func finalizeREADONLY (aD,aE,aF) = {
416+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
417+ let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length"))
418+ let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height"))
419+ let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price"))
420+ let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process"))
421+ let br = ((bo + bn) - 1)
422+ let bs = [if ((bq > br))
423+ then true
424+ else i("unprocessed blocks"), if ((aD >= 0))
425+ then true
426+ else i("invalid new treasury volume"), if ((aE >= 0))
427+ then true
428+ else i("invalid PWR managers bonus"), if (if ((aF >= -(c)))
429+ then (c >= aF)
430+ else false)
431+ then true
432+ else i("invalid treasury volume diff allocation coefficient")]
433+ if ((bs == bs))
434+ then $Tuple2(nil, aC(aD, aE, aF))
435+ else throw("Strict value is not equal to itself.")
436+ }
437+
438+
439+
440+@Callable(an)
441+func invest (bh) = {
442+ let bi = ap(an)
443+ if ((bi == bi))
349444 then {
350- let aA = [if (if ((P == "true"))
445+ let y = Address(bh)
446+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
447+ let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price"))
448+ let bx = if ((size(an.payments) == 1))
449+ then an.payments[0]
450+ else i("invalid payments")
451+ let bR = if (if ((bx.assetId == unit))
452+ then (bx.amount > 0)
453+ else false)
454+ then $Tuple2(bx.amount, bx.assetId)
455+ else i("invalid payment amount")
456+ let bC = bR._1
457+ let bD = bR._2
458+ let P = if ((bp > 0))
459+ then fraction(bC, c, bp)
460+ else 0
461+ let bS = valueOrElse(getInteger(aa, v(unit)), 0)
462+ let bw = [ScriptTransfer(ai, bC, bD)]
463+ let bl = [invoke(aa, "integerEntry", [v(unit), (bS + bC)], nil), invoke(aa, "reissue", [P], nil), invoke(aa, "transferAsset", [bh, P, ae], nil)]
464+ $Tuple2(bw, bl)
465+ }
466+ else throw("Strict value is not equal to itself.")
467+ }
468+
469+
470+
471+@Callable(an)
472+func withdraw (bh) = {
473+ let bi = ap(an)
474+ if ((bi == bi))
475+ then {
476+ let y = Address(bh)
477+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
478+ let bx = if ((size(an.payments) == 1))
479+ then an.payments[0]
480+ else i(g("invalid payments"))
481+ let bD = if ((bx.assetId == ae))
482+ then ae
483+ else i("invalid payment asset")
484+ let bC = if ((bx.amount > 0))
485+ then bx.amount
486+ else i("invalid payment amount")
487+ let bT = valueOrElse(getInteger(aa, K()), 0)
488+ let bw = [ScriptTransfer(aa, bC, bD)]
489+ let bl = [invoke(aa, "integerEntry", [K(), (bT + bC)], nil), invoke(aa, "stringEntry", [L(y, an.transactionId), N(d, bC, (bm + 1), unit)], nil)]
490+ if ((bl == bl))
491+ then $Tuple2(bw, bl)
492+ else throw("Strict value is not equal to itself.")
493+ }
494+ else throw("Strict value is not equal to itself.")
495+ }
496+
497+
498+
499+@Callable(an)
500+func cancelWithdraw (bh,M) = {
501+ let bi = ap(an)
502+ if ((bi == bi))
503+ then {
504+ let y = Address(bh)
505+ let bU = valueOrErrorMessage(getString(aa, L(y, M)), g("invalid withdrawal request"))
506+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
507+ let bV = X(bU)
508+ let O = bV._1
509+ let P = bV._2
510+ let Q = bV._3
511+ let R = bV._4
512+ let bs = [if ((O == d))
351513 then true
352- else (P == "false"))
514+ else i("invalid withdrawal request status"), if ((Q > bm))
353515 then true
354- else e("invalid vote")]
355- if ((aA == aA))
516+ else i("invalid withdrawal request period")]
517+ if ((bs == bs))
356518 then {
357- let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found"))
358- let au = as(aG)
359- let ah = au._9
360- let ai = au._10
361- let bo = if ((P == "true"))
362- then $Tuple2((ah - Q), ai)
363- else $Tuple2(ah, (ai - Q))
364- let bj = bo._1
365- let bk = bo._2
366- let bl = Y(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bj, bk)
367-[StringEntry(X(E, ax), bl), DeleteEntry(aD), DeleteEntry(G(aL.caller, E, ax))]
519+ let bT = valueOrErrorMessage(getInteger(aa, K()), g("invalid total withdrawal amount"))
520+ let bl = [invoke(aa, "integerEntry", [K(), if ((bT >= P))
521+ then (bT - P)
522+ else i("invalid withdrawal amount")], nil), invoke(aa, "deleteEntry", [L(y, M)], nil), invoke(aa, "transferAsset", [bh, P, ae], nil)]
523+ if ((bl == bl))
524+ then $Tuple2(nil, bl)
525+ else throw("Strict value is not equal to itself.")
368526 }
369527 else throw("Strict value is not equal to itself.")
370528 }
373531
374532
375533
376-@Callable(aL)
377-func finalize (E) = {
378- let aV = L(E)
379- let ax = valueOrElse(getInteger(aV), 0)
380- let bp = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
381- let bq = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
382- let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found"))
383- let au = as(aG)
384- let ac = au._4
385- let ad = au._5
386- let af = au._7
387- let br = au._8
388- let ah = au._9
389- let ai = au._10
390- let aA = [if ((ad == "inProgress"))
391- then true
392- else e("voting not in progress"), if ((height >= af))
393- then true
394- else e("voting not finished"), if (isDefined(getString(aj(E))))
395- then true
396- else e("asset image not set")]
397- if ((aA == aA))
534+@Callable(an)
535+func claimCollateral (bh,M) = {
536+ let bi = ap(an)
537+ if ((bi == bi))
398538 then {
399- let bs = if (if (((ah + ai) >= br))
400- then (ah > ai)
539+ let y = Address(bh)
540+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
541+ let bU = valueOrErrorMessage(getString(aa, L(y, M)), g("invalid withdrawal request"))
542+ let bW = X(bU)
543+ let O = bW._1
544+ let P = bW._2
545+ let Q = bW._3
546+ let R = bW._4
547+ if ((O == e))
548+ then i("invalid withdrawal request status")
549+ else if ((Q > bm))
550+ then i("invalid withdrawal request period")
551+ else {
552+ let bX = valueOrErrorMessage(getInteger(aa, B(Q)), g("invalid price"))
553+ let bY = if ((bX > 0))
554+ then fraction(P, bX, c)
555+ else 0
556+ let bl = [invoke(aa, "stringEntry", [L(y, M), N(e, P, Q, an.transactionId)], nil), {
557+ let bZ = removeByIndex(split_51C(getStringValue(aa, T(bm)), a), 0)
558+ let ca = removeByIndex(split_51C(getStringValue(aa, U(bm)), a), 0)
559+ invoke(aa, "transferAssets", [bh, bZ, ca], nil)
560+ }]
561+ $Tuple2(nil, bl)
562+ }
563+ }
564+ else throw("Strict value is not equal to itself.")
565+ }
566+
567+
568+
569+@Callable(an)
570+func processBlocks (bh) = {
571+ let bi = ap(an)
572+ if ((bi == bi))
573+ then {
574+ let y = Address(bh)
575+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
576+ let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length"))
577+ let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height"))
578+ let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price"))
579+ let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process"))
580+ let br = ((bo + bn) - 1)
581+ let cb = 40
582+ let cc = if (if (if ((height >= bq))
583+ then if ((bq >= bo))
584+ then true
585+ else (bm == 0)
401586 else false)
402- then true
403- else false
404- let bt = if (bs)
405- then "accepted"
406- else "rejected"
407- let aN = getStringValue(aj(E))
408- let bu = if (bs)
587+ then (br >= bq)
588+ else false)
589+ then min([((br - bq) + 1), cb])
590+ else i(g("invalid target block"))
591+ let cd = valueOrErrorMessage(getInteger(aa, G()), g("invalid block processing reward"))
592+ let ce = (cd / cc)
593+ let cf = (cd - (ce * cc))
594+ func cg (ch,ci) = if ((ci >= cc))
595+ then ch
596+ else {
597+ let cj = (bq + ci)
598+ let ck = valueOrErrorMessage(blockInfoByHeight(cj), g("invalid block info"))
599+ let cl = valueOrErrorMessage(aq(ck.rewards, ag), g(("invalid treasury reward for height " + toString(cj))))
600+ let cm = ck.generator
601+ let bj = valueOrElse(getInteger(aa, x(cm)), 0)
602+ let cn = if ((ci == (cc - 1)))
603+ then (ce + cf)
604+ else ce
605+ let P = if ((bp > 0))
606+ then fraction((cl - cn), c, bp)
607+ else 0
608+ let co = [invoke(aa, "stringEntry", [I(cj), makeString([toBase58String(an.transactionId), toString(bm), toString(cm), toBase58String(bh), toString(cl), toString(cn), toString(P)], a)], nil), invoke(aa, "integerEntry", [x(cm), (bj + P)], nil)]
609+ if ((co == co))
610+ then {
611+ let cp = ch
612+ let cq = cp._1
613+ let cr = cp._2
614+ $Tuple2((cq + P), (cr + cl))
615+ }
616+ else throw("Strict value is not equal to itself.")
617+ }
618+
619+ let cs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
620+ let ct = {
621+ let bI = cs
622+ let bJ = size(bI)
623+ let bK = $Tuple2(0, 0)
624+ func bL (bM,bN) = if ((bN >= bJ))
625+ then bM
626+ else cg(bM, bI[bN])
627+
628+ func bO (bM,bN) = if ((bN >= bJ))
629+ then bM
630+ else throw("List size exceeds 40")
631+
632+ bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
633+ }
634+ if ((ct == ct))
409635 then {
410- let bv = if ((ac == "verification"))
411- then invoke(u, "createOrUpdate", [E, aN, true], nil)
412- else invoke(u, "setVerified", [E, false], nil)
413- bv
414- }
415- else nil
416- if ((bu == bu))
417- then {
418- let bl = Y(au._1, au._2, au._3, au._4, bt, au._6, au._7, au._8, au._9, au._10)
419- let bc = getIntegerValue(J)
420-[StringEntry(X(E, ax), bl), ScriptTransfer(aL.caller, bc, x)]
636+ let cu = ct._2
637+ let cv = ct._1
638+ let cw = (cu - cd)
639+ let bS = valueOrElse(getInteger(aa, v(unit)), 0)
640+ let bw = [invoke(aa, "reissue", [cv], nil), invoke(aa, "integerEntry", [H(), (bq + cc)], nil), invoke(aa, "transferFromProxyTreasury", [ai.bytes, cw], nil), invoke(aa, "transferFromProxyTreasury", [bh, cd], nil), invoke(aa, "integerEntry", [v(unit), (bS + cw)], nil)]
641+ if ((bw == bw))
642+ then $Tuple2(nil, unit)
643+ else throw("Strict value is not equal to itself.")
421644 }
422645 else throw("Strict value is not equal to itself.")
423646 }
425648 }
426649
427650
428-
429-@Callable(aL)
430-func claimREADONLY (E,F,bw) = {
431- let H = valueOrErrorMessage(addressFromString(bw), c("invalid address"))
432- let bx = getString(D(E, F))
433- let ab = if (isDefined(bx))
434- then aB(H, E, F)
435- else 0
436- $Tuple2(nil, ab)
437- }
438-
439-
440-
441-@Callable(aL)
442-func claim (E,F) = {
443- let by = aL.caller
444- let bz = S(by, E, F)
445- let bA = getInteger(bz)
446- let aA = [if ((bA == unit))
447- then true
448- else e("already claimed")]
449- if ((aA == aA))
450- then {
451- let ab = if ((aB(by, E, F) > 0))
452- then aB(by, E, F)
453- else e("nothing to claim")
454- let bx = getString(D(E, F))
455- let bB = if (isDefined(bx))
456- then {
457- let bC = fromBase58String(value(bx))
458-[ScriptTransfer(by, ab, bC), IntegerEntry(bz, ab), DeleteEntry(G(by, E, F))]
459- }
460- else e("nothing to claim")
461- bB
462- }
463- else throw("Strict value is not equal to itself.")
464- }
465-
466-
467-@Verifier(bD)
468-func bE () = {
469- let bF = {
470- let h = aq()
471- if ($isInstanceOf(h, "ByteVector"))
651+@Verifier(cx)
652+func cy () = {
653+ let cz = {
654+ let l = aj()
655+ if ($isInstanceOf(l, "ByteVector"))
472656 then {
473- let bn = h
474- bn
657+ let al = l
658+ al
475659 }
476- else if ($isInstanceOf(h, "Unit"))
477- then bD.senderPublicKey
478- else throw("Match error")
660+ else cx.senderPublicKey
479661 }
480- sigVerify(bD.bodyBytes, bD.proofs[0], bF)
662+ sigVerify(cx.bodyBytes, cx.proofs[0], cz)
481663 }
482664
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 6 #-}
1+{-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
6-let b = 100000000
6+let b = "calculator.ride"
77
8-func c (d) = makeString(["voting_verified_v2.ride:", d], " ")
8+let c = 100000000
9+
10+let d = "PENDING"
11+
12+let e = "FINISHED"
13+
14+let f = "WAVES"
15+
16+func g (h) = ((b + ": ") + h)
917
1018
11-func e (d) = throw(c(d))
19+func i (h) = throw(g(h))
1220
1321
14-func f (g) = {
15- let h = g
16- if ($isInstanceOf(h, "Int"))
22+func j (k) = {
23+ let l = k
24+ if ($isInstanceOf(l, "ByteVector"))
1725 then {
18- let i = h
19- i
26+ let m = l
27+ toBase58String(m)
2028 }
21- else throw("Failed to cast into Integer")
29+ else if ($isInstanceOf(l, "Unit"))
30+ then f
31+ else throw("Match error")
2232 }
2333
2434
25-func j (k,l) = valueOrElse(getInteger(k, l), 0)
35+func n (h) = if ((h == f))
36+ then unit
37+ else fromBase58String(h)
2638
2739
28-func m (k,l) = valueOrErrorMessage(getInteger(k, l), c((l + " is not defined")))
40+func o (p) = if ((0 > p))
41+ then -(p)
42+ else p
2943
3044
31-func n (k,l) = valueOrElse(getString(k, l), "")
45+func q () = makeString(["%s", "factory"], a)
3246
3347
34-func o (k,l) = valueOrErrorMessage(getString(k, l), c((l + " is not defined")))
48+func r () = makeString(["%s", "managerPublicKey"], a)
3549
3650
37-let p = makeString(["%s", "boostingContract"], a)
38-
39-let q = makeString(["%s", "emissionContract"], a)
40-
41-let r = makeString(["%s", "assetsStoreContract"], a)
42-
43-let s = addressFromStringValue(getStringValue(p))
44-
45-let t = addressFromStringValue(getStringValue(q))
46-
47-let u = addressFromStringValue(getStringValue(r))
48-
49-let v = makeString(["%s", "config"], a)
50-
51-let w = split(o(t, v), a)[1]
52-
53-let x = fromBase58String(w)
54-
55-let y = makeString(["%s%s", "votingThreshold", "add"], a)
56-
57-let z = makeString(["%s%s", "votingThreshold", "remove"], a)
58-
59-let A = makeString(["%s", "periodLengthRemove"], a)
60-
61-let B = makeString(["%s", "maxPeriodLength"], a)
62-
63-let C = makeString(["%s", "minPeriodLength"], a)
64-
65-func D (E,F) = makeString(["%s%s%d", "votingRewardAssetId", E, toString(F)], a)
51+func s () = makeString(["%s", "lpAssetId"], a)
6652
6753
68-func G (H,E,F) = makeString(["%s%s%s%d", "votingReward", toString(H), E, toString(F)], a)
54+func t () = makeString(["%s", "proxyTreasury"], a)
6955
7056
71-func I (E,F) = makeString(["%s%s%d", "totalVotingReward", E, toString(F)], a)
57+func u () = makeString(["%s", "mainTreasury"], a)
7258
7359
74-let J = makeString(["%s", "finalizeCallRewardAmount"], a)
75-
76-let K = makeString(["%s", "minSuggestRemoveBalance"], a)
77-
78-func L (E) = makeString(["%s%s", "currentIndex", E], a)
60+func v (k) = makeString(["%s%s", "invested", j(k)], a)
7961
8062
81-func M (E,F,N) = makeString(["%s%s%d%s", "vote", E, toString(F), toString(N)], a)
63+func w (k) = makeString(["%s%s", "donated", j(k)], a)
8264
8365
84-func O (P,Q) = makeString(["%s%d", toString(P), toString(Q)], a)
66+func x (y) = makeString(["%s%s", "available", toString(y)], a)
8567
8668
87-func R (E,F) = makeString(["%s%s%d", "suggestIssuer", E, toString(F)], a)
69+func z (y) = makeString(["%s%s", "claimed", toString(y)], a)
8870
8971
90-func S (H,E,F) = makeString(["%s%s%s%d", "history", toString(H), E, toString(F)], a)
72+func A () = makeString(["%s", "currentPeriod"], a)
9173
9274
93-let T = makeString(["%s", "feePerBlock"], a)
94-
95-let U = m(this, T)
96-
97-let V = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a)
98-
99-let W = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a)
100-
101-func X (E,F) = makeString(["%s%s%d", "votingInfo", E, toString(F)], a)
75+func B (C) = makeString(["%s%d", "price", toString(C)], a)
10276
10377
104-func Y (Z,aa,ab,ac,ad,ae,af,ag,ah,ai) = makeString(["%s%s%d%s%s%d%d%d%d%d", toString(Z), aa, toString(ab), ac, ad, toString(ae), toString(af), toString(ag), toString(ah), toString(ai)], a)
78+func D (C) = makeString(["%s%d", "startHeight", toString(C)], a)
10579
10680
107-func aj (E) = makeString(["%s%s", "assetImage", E], a)
81+func E (C) = makeString(["%s%d", "powerManagerBonus", toString(C)], a)
10882
10983
110-func ak (H,al) = {
111- let Q = invoke(s, "getUserGwxAmountAtHeightREADONLY", [H, al], nil)
112- f(Q)
84+func F () = "%s__periodLength"
85+
86+
87+func G () = "%s__blockProcessingReward"
88+
89+
90+func H () = "%s__nextBlockToProcess"
91+
92+
93+func I (J) = makeString(["%s%d", "blockProcessed", toString(J)], a)
94+
95+
96+func K () = "%s__withdrawal"
97+
98+
99+func L (y,M) = makeString(["%s%s%s", "withdrawal", toString(y), toBase58String(M)], a)
100+
101+
102+func N (O,P,Q,R) = {
103+ let S = {
104+ let l = R
105+ if ($isInstanceOf(l, "ByteVector"))
106+ then {
107+ let m = l
108+ toBase58String(m)
109+ }
110+ else if ($isInstanceOf(l, "Unit"))
111+ then "SOON"
112+ else throw("Match error")
113+ }
114+ makeString(["%s%d%d%s", O, toString(P), toString(Q), S], a)
113115 }
114116
115117
116-func am () = "%s__managerVaultAddress"
118+func T (C) = makeString(["%s%d", "periodReward", toString(C)], a)
117119
118120
119-func an () = "%s__managerPublicKey"
121+func U (C) = makeString(["%s%d", "periodRewardAmount", toString(C)], a)
120122
121123
122-func ao () = {
123- let h = getString(am())
124- if ($isInstanceOf(h, "String"))
124+let V = makeString(["%s", "minHeightForWithdraw"], a)
125+
126+let W = makeString(["%s", "maxHeightForWithdraw"], a)
127+
128+func X (h) = {
129+ let Y = split(h, a)
130+ if ((size(Y) == 5))
125131 then {
126- let ap = h
127- addressFromStringValue(ap)
132+ let O = Y[1]
133+ let P = valueOrErrorMessage(parseInt(Y[2]), g("invalid lpAssetAmount"))
134+ let Q = valueOrErrorMessage(parseInt(Y[3]), g("invalid targetPeriod"))
135+ let R = Y[4]
136+ $Tuple4(O, P, Q, R)
128137 }
129- else this
138+ else i("invalid withdrawal request value")
130139 }
131140
132141
133-func aq () = {
134- let ar = ao()
135- let h = getString(ar, an())
136- if ($isInstanceOf(h, "String"))
142+let Z = {
143+ let l = getString(this, q())
144+ if ($isInstanceOf(l, "String"))
137145 then {
138- let ap = h
139- fromBase58String(ap)
146+ let h = l
147+ addressFromString(h)
140148 }
141- else if ($isInstanceOf(h, "Unit"))
149+ else if ($isInstanceOf(l, "Unit"))
142150 then unit
143151 else throw("Match error")
144152 }
145153
154+let aa = valueOrErrorMessage(Z, g("invalid factory address"))
146155
147-func as (at) = {
148- let au = split(at, a)
149- let av = au[1]
150- let Z = if ((av == "true"))
151- then true
152- else false
153- let aa = au[2]
154- let ab = parseIntValue(au[3])
155- let ac = au[4]
156- let ad = au[5]
157- let ae = parseIntValue(au[6])
158- let af = parseIntValue(au[7])
159- let ag = parseIntValue(au[8])
160- let ah = parseIntValue(au[9])
161- let ai = parseIntValue(au[10])
162- $Tuple10(Z, aa, ab, ac, ad, ae, af, ag, ah, ai)
156+let ab = {
157+ let l = Z
158+ if ($isInstanceOf(l, "Address"))
159+ then {
160+ let ac = l
161+ let ad = getString(ac, s())
162+ if ($isInstanceOf(ad, "String"))
163+ then {
164+ let h = ad
165+ fromBase58String(h)
166+ }
167+ else if ($isInstanceOf(ad, "Unit"))
168+ then unit
169+ else throw("Match error")
170+ }
171+ else if ($isInstanceOf(l, "Unit"))
172+ then unit
173+ else throw("Match error")
174+ }
175+
176+let ae = valueOrErrorMessage(ab, g("invalid lpAssetId"))
177+
178+let af = {
179+ let l = Z
180+ if ($isInstanceOf(l, "Address"))
181+ then {
182+ let ac = l
183+ let ad = getString(ac, t())
184+ if ($isInstanceOf(ad, "String"))
185+ then {
186+ let h = ad
187+ addressFromString(h)
188+ }
189+ else if ($isInstanceOf(ad, "Unit"))
190+ then unit
191+ else throw("Match error")
192+ }
193+ else if ($isInstanceOf(l, "Unit"))
194+ then unit
195+ else throw("Match error")
196+ }
197+
198+let ag = valueOrErrorMessage(af, g("invalid proxy treasury address"))
199+
200+let ah = {
201+ let l = Z
202+ if ($isInstanceOf(l, "Address"))
203+ then {
204+ let ac = l
205+ let ad = getString(ac, u())
206+ if ($isInstanceOf(ad, "String"))
207+ then {
208+ let h = ad
209+ addressFromString(h)
210+ }
211+ else if ($isInstanceOf(ad, "Unit"))
212+ then unit
213+ else throw("Match error")
214+ }
215+ else if ($isInstanceOf(l, "Unit"))
216+ then unit
217+ else throw("Match error")
218+ }
219+
220+let ai = valueOrErrorMessage(ah, g("invalid main treasury address"))
221+
222+func aj () = {
223+ let l = Z
224+ if ($isInstanceOf(l, "Address"))
225+ then {
226+ let ak = l
227+ let ad = getString(ak, r())
228+ if ($isInstanceOf(ad, "String"))
229+ then {
230+ let al = ad
231+ fromBase58String(al)
232+ }
233+ else unit
234+ }
235+ else unit
163236 }
164237
165238
166-func aw (E,ax) = {
167- let at = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found"))
168- let ay = split(at, a)
169- let ad = ay[5]
170- let af = valueOrErrorMessage(parseIntValue(ay[7]), c("voting start height not found"))
171- let az = valueOrErrorMessage(getString(R(E, ax)), c("voting issuer not found"))
172- let aA = [if ((ad == "inProgress"))
239+func am (an,ao) = if ((an.caller == ao))
240+ then true
241+ else i("permission denied")
242+
243+
244+func ap (an) = am(an, aa)
245+
246+
247+func aq (ar,as) = {
248+ let h = size(ar)
249+ let at = ar[0]
250+ let au = at._1
251+ let av = at._2
252+ let aw = ar[1]
253+ let ax = aw._1
254+ let ay = aw._2
255+ let az = ar[2]
256+ let aA = az._1
257+ let aB = az._2
258+ if (if ((h > 0))
259+ then (au == as)
260+ else false)
261+ then av
262+ else if (if ((h > 1))
263+ then (ax == as)
264+ else false)
265+ then ay
266+ else if (if ((h > 2))
267+ then (aA == as)
268+ else false)
269+ then aB
270+ else unit
271+ }
272+
273+
274+func aC (aD,aE,aF) = {
275+ let aG = valueOrElse(getInteger(aa, w(unit)), 0)
276+ let aH = valueOrElse(getInteger(aa, v(unit)), 0)
277+ let aI = (aG + aH)
278+ let aJ = (aD - aI)
279+ let aK = if (if ((aJ >= aE))
173280 then true
174- else e("no voting in progress"), if ((af > height))
281+ else (aE == 0))
282+ then aE
283+ else i("power bonus is more than profit")
284+ let aL = (aJ - aK)
285+ let aM = if ((aI > 0))
286+ then fraction(aG, c, aI)
287+ else 0
288+ let aN = fraction(aL, aM, c)
289+ let aO = (aL - aN)
290+ let aP = o(aF)
291+ let aQ = fraction(aO, if ((0 > aF))
292+ then aP
293+ else 0, c)
294+ let aR = fraction(aN, if ((aF > 0))
295+ then aP
296+ else 0, c)
297+ let aS = ((aN - aR) + aQ)
298+ let aT = ((aO - aQ) + aR)
299+ let aU = (aG + aS)
300+ let aV = (aH + aT)
301+ let aW = min([0, aU])
302+ let aX = min([0, aV])
303+ let aY = (max([0, aU]) + aX)
304+ let aZ = (max([0, aV]) + aW)
305+ let ba = valueOrErrorMessage(assetInfo(ae), g("invalid lpAsset info")).quantity
306+ let bb = fraction(aZ, c, ba)
307+ let bc = if ((bb != 0))
175308 then true
176- else e("voting expired")]
177- if ((aA == aA))
178- then $Tuple3(ad, af, az)
309+ else i("LP price cannot be 0")
310+ if ((bc == bc))
311+ then {
312+ let bd = valueOrElse(getInteger(aa, K()), 0)
313+ let be = max([0, fraction(bd, bb, c)])
314+ let bf = (aZ - be)
315+ let bg = (ba - bd)
316+ $Tuple6(be, bf, aY, bb, bd, bg)
317+ }
179318 else throw("Strict value is not equal to itself.")
180319 }
181320
182321
183-func aB (aC,E,F) = {
184- let aD = M(E, F, aC)
185- let aE = valueOrErrorMessage(getString(aD), c("you have not voted"))
186- let aF = split(aE, a)
187- let Q = parseIntValue(aF[2])
188- let aG = valueOrErrorMessage(getString(X(E, F)), c("voting info not found"))
189- let aH = as(aG)
190- let ah = aH._9
191- let ai = aH._10
192- let aI = fraction(Q, b, (ah + ai))
193- let aJ = valueOrElse(getInteger(I(E, F)), 0)
194- let aK = fraction(aI, aJ, b, FLOOR)
195- aK
196- }
197-
198-
199-@Callable(aL)
200-func suggestAdd (E,aM,aN) = {
201- let aO = aL.payments[0]
202- let aP = value(aO.assetId)
203- let aQ = value(aO.amount)
204- let aR = getIntegerValue(C)
205- let aS = getIntegerValue(B)
206- let aT = {
207- let aU = invoke(u, "isVerifiedREADONLY", [E], nil)
208- if ($isInstanceOf(aU, "Boolean"))
209- then aU
210- else throw(($getType(aU) + " couldn't be cast to Boolean"))
211- }
212- let aA = [if (if ((aM >= aR))
213- then (aS >= aM)
214- else false)
215- then true
216- else e("invalid periodLength"), if ((aT == false))
217- then true
218- else e("token already verified"), if ((aQ > (aM * U)))
219- then true
220- else e("not enough wx for given period"), if ((aQ >= getIntegerValue(V)))
221- then true
222- else e("payment less then min for suggest")]
223- if ((aA == aA))
322+@Callable(an)
323+func claimLP (bh) = {
324+ let bi = ap(an)
325+ if ((bi == bi))
224326 then {
225- let aV = L(E)
226- let ax = getInteger(aV)
227- let aW = if (isDefined(ax))
228- then (value(ax) + 1)
229- else 0
230- let aX = if ((size(aL.payments) > 1))
231- then {
232- let aY = aL.payments[1]
233- let aZ = toBase58String(value(aY.assetId))
234- let ba = value(aY.amount)
235- $Tuple4(true, aZ, ba, [StringEntry(D(E, aW), aZ), IntegerEntry(I(E, aW), ba)])
236- }
237- else $Tuple4(false, "EMPTY", 0, nil)
238- let Z = aX._1
239- let aa = aX._2
240- let ab = aX._3
241- let bb = aX._4
242- let ag = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
243- let at = Y(Z, aa, ab, "verification", "inProgress", height, (height + aM), ag, 0, 0)
244- let bc = getIntegerValue(J)
245- let bd = (aQ - bc)
246- ([IntegerEntry(aV, aW), StringEntry(R(E, aW), toString(aL.caller)), StringEntry(X(E, aW), at), StringEntry(aj(E), aN), Burn(aP, bd)] ++ bb)
327+ let y = Address(bh)
328+ let bj = valueOrElse(getInteger(aa, x(y)), 0)
329+ let bk = valueOrElse(getInteger(aa, z(y)), 0)
330+ let bl = if ((bj > 0))
331+ then [invoke(aa, "transferAsset", [bh, bj, ae], nil), invoke(aa, "integerEntry", [x(y), 0], nil), invoke(aa, "integerEntry", [z(y), (bk + bj)], nil)]
332+ else i("nothing to claim")
333+ $Tuple2(nil, bl)
247334 }
248335 else throw("Strict value is not equal to itself.")
249336 }
250337
251338
252339
253-@Callable(aL)
254-func suggestRemove (E) = {
255- let be = ak(toString(aL.caller), height)
256- let bf = getIntegerValue(K)
257- let aO = aL.payments[0]
258- let aP = value(aO.assetId)
259- let aQ = value(aO.amount)
260- let aT = {
261- let aU = invoke(u, "isVerifiedREADONLY", [E], nil)
262- if ($isInstanceOf(aU, "Boolean"))
263- then aU
264- else throw(($getType(aU) + " couldn't be cast to Boolean"))
265- }
266- let aA = [if (aT)
267- then true
268- else e("token not verified"), if ((be >= bf))
269- then true
270- else e("not enough gWXes"), if ((aQ >= getIntegerValue(W)))
271- then true
272- else e("payment less then min for suggest")]
273- if ((aA == aA))
340+@Callable(an)
341+func finalize (bh,aD,aE,aF) = {
342+ let bi = ap(an)
343+ if ((bi == bi))
274344 then {
275- let aV = L(E)
276- let ax = getInteger(aV)
277- let aW = if (isDefined(ax))
278- then (value(ax) + 1)
279- else 0
280- let aM = valueOrErrorMessage(getInteger(A), c("periodLengthRemove not set"))
281- let af = (height + aM)
282- let ag = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
283- let at = Y(false, "EMPTY", 0, "deverification", "inProgress", height, (height + aM), ag, 0, 0)
284-[IntegerEntry(aV, aW), StringEntry(R(E, aW), toString(aL.caller)), StringEntry(X(E, aW), at)]
285- }
286- else throw("Strict value is not equal to itself.")
287- }
345+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
346+ let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length"))
347+ let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height"))
348+ let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price"))
349+ let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process"))
350+ let br = ((bo + bn) - 1)
351+ let bs = [if ((an.originCaller == ai))
352+ then true
353+ else i("permission denied"), if ((bq > br))
354+ then true
355+ else i("unprocessed blocks"), if ((aD >= 0))
356+ then true
357+ else i("invalid new treasury volume"), if ((aE >= 0))
358+ then true
359+ else i("invalid PWR managers bonus"), if (if ((aF >= -(c)))
360+ then (c >= aF)
361+ else false)
362+ then true
363+ else i("invalid treasury volume diff allocation coefficient")]
364+ if ((bs == bs))
365+ then {
366+ let bt = aC(aD, aE, aF)
367+ let be = bt._1
368+ let bf = bt._2
369+ let aY = bt._3
370+ let bb = bt._4
371+ let bd = bt._5
372+ let bg = bt._6
373+ let bu = (bm + 1)
374+ func bv (bw,bx) = {
375+ let by = bw
376+ let bz = by._1
377+ let bA = by._2
378+ let bB = by._3
379+ let bC = bx.amount
380+ let bD = bx.assetId
381+ let bE = ("%s" + makeString([bA, j(bD)], a))
382+ let bF = ("%d" + makeString([bB, toString(bC)], a))
383+ let bG = ScriptTransfer(aa, bC, bD)
384+ $Tuple3((bz :+ bG), bE, bF)
385+ }
288386
387+ let bH = {
388+ let bI = an.payments
389+ let bJ = size(bI)
390+ let bK = $Tuple3(nil, "", "")
391+ func bL (bM,bN) = if ((bN >= bJ))
392+ then bM
393+ else bv(bM, bI[bN])
289394
395+ func bO (bM,bN) = if ((bN >= bJ))
396+ then bM
397+ else throw("List size exceeds 10")
290398
291-@Callable(aL)
292-func vote (E,P) = {
293- let aV = L(E)
294- let ax = valueOrErrorMessage(getInteger(aV), c("voting does not exist"))
295- let at = aw(E, ax)
296- if ((at == at))
297- then {
298- let bg = at._2
299- let bh = ak(toString(aL.caller), bg)
300- let aD = M(E, ax, aL.caller)
301- let aA = [if ((getString(aD) == unit))
302- then true
303- else e("You have already voted"), if ((bh > 0))
304- then true
305- else throw("You'll not have gWX at the end of voting")]
306- if ((aA == aA))
307- then {
308- let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found"))
309- let au = as(aG)
310- let ah = au._9
311- let ai = au._10
312- let bi = if (P)
313- then $Tuple2((ah + bh), ai)
314- else $Tuple2(ah, (ai + bh))
315- let bj = bi._1
316- let bk = bi._2
317- let bl = Y(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bj, bk)
318- let bm = {
319- let h = getString(D(E, ax))
320- if ($isInstanceOf(h, "String"))
321- then {
322- let bn = h
323-[StringEntry(G(aL.caller, E, ax), O(P, bh))]
324- }
325- else if ($isInstanceOf(h, "Unit"))
326- then nil
327- else throw("Match error")
399+ bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
328400 }
329- ([StringEntry(aD, O(P, bh)), StringEntry(X(E, ax), bl)] ++ bm)
401+ let bz = bH._1
402+ let bP = bH._2
403+ let bQ = bH._3
404+ let bl = [invoke(aa, "integerEntry", [E(bm), aE], nil), invoke(aa, "integerEntry", [A(), bu], nil), invoke(aa, "integerEntry", [B(bu), bb], nil), invoke(aa, "integerEntry", [D(bu), (br + 1)], nil), invoke(aa, "burn", [bd], nil), invoke(aa, "integerEntry", [K(), 0], nil), invoke(aa, "integerEntry", [v(unit), bf], nil), invoke(aa, "integerEntry", [w(unit), aY], nil), invoke(aa, "stringEntry", [T(bu), bP], nil), invoke(aa, "stringEntry", [U(bu), bQ], nil)]
405+ $Tuple2(bz, bl)
330406 }
331407 else throw("Strict value is not equal to itself.")
332408 }
333409 else throw("Strict value is not equal to itself.")
334410 }
335411
336412
337413
338-@Callable(aL)
339-func cancelVote (E) = {
340- let aV = L(E)
341- let ax = valueOrErrorMessage(getInteger(aV), c("voting does not exist"))
342- let aD = M(E, ax, aL.caller)
343- let aE = valueOrErrorMessage(getString(aD), c("you have not voted"))
344- let aF = split(aE, a)
345- let P = aF[1]
346- let Q = parseIntValue(aF[2])
347- let at = aw(E, ax)
348- if ((at == at))
414+@Callable(an)
415+func finalizeREADONLY (aD,aE,aF) = {
416+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
417+ let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length"))
418+ let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height"))
419+ let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price"))
420+ let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process"))
421+ let br = ((bo + bn) - 1)
422+ let bs = [if ((bq > br))
423+ then true
424+ else i("unprocessed blocks"), if ((aD >= 0))
425+ then true
426+ else i("invalid new treasury volume"), if ((aE >= 0))
427+ then true
428+ else i("invalid PWR managers bonus"), if (if ((aF >= -(c)))
429+ then (c >= aF)
430+ else false)
431+ then true
432+ else i("invalid treasury volume diff allocation coefficient")]
433+ if ((bs == bs))
434+ then $Tuple2(nil, aC(aD, aE, aF))
435+ else throw("Strict value is not equal to itself.")
436+ }
437+
438+
439+
440+@Callable(an)
441+func invest (bh) = {
442+ let bi = ap(an)
443+ if ((bi == bi))
349444 then {
350- let aA = [if (if ((P == "true"))
445+ let y = Address(bh)
446+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
447+ let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price"))
448+ let bx = if ((size(an.payments) == 1))
449+ then an.payments[0]
450+ else i("invalid payments")
451+ let bR = if (if ((bx.assetId == unit))
452+ then (bx.amount > 0)
453+ else false)
454+ then $Tuple2(bx.amount, bx.assetId)
455+ else i("invalid payment amount")
456+ let bC = bR._1
457+ let bD = bR._2
458+ let P = if ((bp > 0))
459+ then fraction(bC, c, bp)
460+ else 0
461+ let bS = valueOrElse(getInteger(aa, v(unit)), 0)
462+ let bw = [ScriptTransfer(ai, bC, bD)]
463+ let bl = [invoke(aa, "integerEntry", [v(unit), (bS + bC)], nil), invoke(aa, "reissue", [P], nil), invoke(aa, "transferAsset", [bh, P, ae], nil)]
464+ $Tuple2(bw, bl)
465+ }
466+ else throw("Strict value is not equal to itself.")
467+ }
468+
469+
470+
471+@Callable(an)
472+func withdraw (bh) = {
473+ let bi = ap(an)
474+ if ((bi == bi))
475+ then {
476+ let y = Address(bh)
477+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
478+ let bx = if ((size(an.payments) == 1))
479+ then an.payments[0]
480+ else i(g("invalid payments"))
481+ let bD = if ((bx.assetId == ae))
482+ then ae
483+ else i("invalid payment asset")
484+ let bC = if ((bx.amount > 0))
485+ then bx.amount
486+ else i("invalid payment amount")
487+ let bT = valueOrElse(getInteger(aa, K()), 0)
488+ let bw = [ScriptTransfer(aa, bC, bD)]
489+ let bl = [invoke(aa, "integerEntry", [K(), (bT + bC)], nil), invoke(aa, "stringEntry", [L(y, an.transactionId), N(d, bC, (bm + 1), unit)], nil)]
490+ if ((bl == bl))
491+ then $Tuple2(bw, bl)
492+ else throw("Strict value is not equal to itself.")
493+ }
494+ else throw("Strict value is not equal to itself.")
495+ }
496+
497+
498+
499+@Callable(an)
500+func cancelWithdraw (bh,M) = {
501+ let bi = ap(an)
502+ if ((bi == bi))
503+ then {
504+ let y = Address(bh)
505+ let bU = valueOrErrorMessage(getString(aa, L(y, M)), g("invalid withdrawal request"))
506+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
507+ let bV = X(bU)
508+ let O = bV._1
509+ let P = bV._2
510+ let Q = bV._3
511+ let R = bV._4
512+ let bs = [if ((O == d))
351513 then true
352- else (P == "false"))
514+ else i("invalid withdrawal request status"), if ((Q > bm))
353515 then true
354- else e("invalid vote")]
355- if ((aA == aA))
516+ else i("invalid withdrawal request period")]
517+ if ((bs == bs))
356518 then {
357- let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found"))
358- let au = as(aG)
359- let ah = au._9
360- let ai = au._10
361- let bo = if ((P == "true"))
362- then $Tuple2((ah - Q), ai)
363- else $Tuple2(ah, (ai - Q))
364- let bj = bo._1
365- let bk = bo._2
366- let bl = Y(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bj, bk)
367-[StringEntry(X(E, ax), bl), DeleteEntry(aD), DeleteEntry(G(aL.caller, E, ax))]
519+ let bT = valueOrErrorMessage(getInteger(aa, K()), g("invalid total withdrawal amount"))
520+ let bl = [invoke(aa, "integerEntry", [K(), if ((bT >= P))
521+ then (bT - P)
522+ else i("invalid withdrawal amount")], nil), invoke(aa, "deleteEntry", [L(y, M)], nil), invoke(aa, "transferAsset", [bh, P, ae], nil)]
523+ if ((bl == bl))
524+ then $Tuple2(nil, bl)
525+ else throw("Strict value is not equal to itself.")
368526 }
369527 else throw("Strict value is not equal to itself.")
370528 }
371529 else throw("Strict value is not equal to itself.")
372530 }
373531
374532
375533
376-@Callable(aL)
377-func finalize (E) = {
378- let aV = L(E)
379- let ax = valueOrElse(getInteger(aV), 0)
380- let bp = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
381- let bq = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
382- let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found"))
383- let au = as(aG)
384- let ac = au._4
385- let ad = au._5
386- let af = au._7
387- let br = au._8
388- let ah = au._9
389- let ai = au._10
390- let aA = [if ((ad == "inProgress"))
391- then true
392- else e("voting not in progress"), if ((height >= af))
393- then true
394- else e("voting not finished"), if (isDefined(getString(aj(E))))
395- then true
396- else e("asset image not set")]
397- if ((aA == aA))
534+@Callable(an)
535+func claimCollateral (bh,M) = {
536+ let bi = ap(an)
537+ if ((bi == bi))
398538 then {
399- let bs = if (if (((ah + ai) >= br))
400- then (ah > ai)
539+ let y = Address(bh)
540+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
541+ let bU = valueOrErrorMessage(getString(aa, L(y, M)), g("invalid withdrawal request"))
542+ let bW = X(bU)
543+ let O = bW._1
544+ let P = bW._2
545+ let Q = bW._3
546+ let R = bW._4
547+ if ((O == e))
548+ then i("invalid withdrawal request status")
549+ else if ((Q > bm))
550+ then i("invalid withdrawal request period")
551+ else {
552+ let bX = valueOrErrorMessage(getInteger(aa, B(Q)), g("invalid price"))
553+ let bY = if ((bX > 0))
554+ then fraction(P, bX, c)
555+ else 0
556+ let bl = [invoke(aa, "stringEntry", [L(y, M), N(e, P, Q, an.transactionId)], nil), {
557+ let bZ = removeByIndex(split_51C(getStringValue(aa, T(bm)), a), 0)
558+ let ca = removeByIndex(split_51C(getStringValue(aa, U(bm)), a), 0)
559+ invoke(aa, "transferAssets", [bh, bZ, ca], nil)
560+ }]
561+ $Tuple2(nil, bl)
562+ }
563+ }
564+ else throw("Strict value is not equal to itself.")
565+ }
566+
567+
568+
569+@Callable(an)
570+func processBlocks (bh) = {
571+ let bi = ap(an)
572+ if ((bi == bi))
573+ then {
574+ let y = Address(bh)
575+ let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period"))
576+ let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length"))
577+ let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height"))
578+ let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price"))
579+ let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process"))
580+ let br = ((bo + bn) - 1)
581+ let cb = 40
582+ let cc = if (if (if ((height >= bq))
583+ then if ((bq >= bo))
584+ then true
585+ else (bm == 0)
401586 else false)
402- then true
403- else false
404- let bt = if (bs)
405- then "accepted"
406- else "rejected"
407- let aN = getStringValue(aj(E))
408- let bu = if (bs)
587+ then (br >= bq)
588+ else false)
589+ then min([((br - bq) + 1), cb])
590+ else i(g("invalid target block"))
591+ let cd = valueOrErrorMessage(getInteger(aa, G()), g("invalid block processing reward"))
592+ let ce = (cd / cc)
593+ let cf = (cd - (ce * cc))
594+ func cg (ch,ci) = if ((ci >= cc))
595+ then ch
596+ else {
597+ let cj = (bq + ci)
598+ let ck = valueOrErrorMessage(blockInfoByHeight(cj), g("invalid block info"))
599+ let cl = valueOrErrorMessage(aq(ck.rewards, ag), g(("invalid treasury reward for height " + toString(cj))))
600+ let cm = ck.generator
601+ let bj = valueOrElse(getInteger(aa, x(cm)), 0)
602+ let cn = if ((ci == (cc - 1)))
603+ then (ce + cf)
604+ else ce
605+ let P = if ((bp > 0))
606+ then fraction((cl - cn), c, bp)
607+ else 0
608+ let co = [invoke(aa, "stringEntry", [I(cj), makeString([toBase58String(an.transactionId), toString(bm), toString(cm), toBase58String(bh), toString(cl), toString(cn), toString(P)], a)], nil), invoke(aa, "integerEntry", [x(cm), (bj + P)], nil)]
609+ if ((co == co))
610+ then {
611+ let cp = ch
612+ let cq = cp._1
613+ let cr = cp._2
614+ $Tuple2((cq + P), (cr + cl))
615+ }
616+ else throw("Strict value is not equal to itself.")
617+ }
618+
619+ let cs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
620+ let ct = {
621+ let bI = cs
622+ let bJ = size(bI)
623+ let bK = $Tuple2(0, 0)
624+ func bL (bM,bN) = if ((bN >= bJ))
625+ then bM
626+ else cg(bM, bI[bN])
627+
628+ func bO (bM,bN) = if ((bN >= bJ))
629+ then bM
630+ else throw("List size exceeds 40")
631+
632+ bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
633+ }
634+ if ((ct == ct))
409635 then {
410- let bv = if ((ac == "verification"))
411- then invoke(u, "createOrUpdate", [E, aN, true], nil)
412- else invoke(u, "setVerified", [E, false], nil)
413- bv
414- }
415- else nil
416- if ((bu == bu))
417- then {
418- let bl = Y(au._1, au._2, au._3, au._4, bt, au._6, au._7, au._8, au._9, au._10)
419- let bc = getIntegerValue(J)
420-[StringEntry(X(E, ax), bl), ScriptTransfer(aL.caller, bc, x)]
636+ let cu = ct._2
637+ let cv = ct._1
638+ let cw = (cu - cd)
639+ let bS = valueOrElse(getInteger(aa, v(unit)), 0)
640+ let bw = [invoke(aa, "reissue", [cv], nil), invoke(aa, "integerEntry", [H(), (bq + cc)], nil), invoke(aa, "transferFromProxyTreasury", [ai.bytes, cw], nil), invoke(aa, "transferFromProxyTreasury", [bh, cd], nil), invoke(aa, "integerEntry", [v(unit), (bS + cw)], nil)]
641+ if ((bw == bw))
642+ then $Tuple2(nil, unit)
643+ else throw("Strict value is not equal to itself.")
421644 }
422645 else throw("Strict value is not equal to itself.")
423646 }
424647 else throw("Strict value is not equal to itself.")
425648 }
426649
427650
428-
429-@Callable(aL)
430-func claimREADONLY (E,F,bw) = {
431- let H = valueOrErrorMessage(addressFromString(bw), c("invalid address"))
432- let bx = getString(D(E, F))
433- let ab = if (isDefined(bx))
434- then aB(H, E, F)
435- else 0
436- $Tuple2(nil, ab)
437- }
438-
439-
440-
441-@Callable(aL)
442-func claim (E,F) = {
443- let by = aL.caller
444- let bz = S(by, E, F)
445- let bA = getInteger(bz)
446- let aA = [if ((bA == unit))
447- then true
448- else e("already claimed")]
449- if ((aA == aA))
450- then {
451- let ab = if ((aB(by, E, F) > 0))
452- then aB(by, E, F)
453- else e("nothing to claim")
454- let bx = getString(D(E, F))
455- let bB = if (isDefined(bx))
456- then {
457- let bC = fromBase58String(value(bx))
458-[ScriptTransfer(by, ab, bC), IntegerEntry(bz, ab), DeleteEntry(G(by, E, F))]
459- }
460- else e("nothing to claim")
461- bB
462- }
463- else throw("Strict value is not equal to itself.")
464- }
465-
466-
467-@Verifier(bD)
468-func bE () = {
469- let bF = {
470- let h = aq()
471- if ($isInstanceOf(h, "ByteVector"))
651+@Verifier(cx)
652+func cy () = {
653+ let cz = {
654+ let l = aj()
655+ if ($isInstanceOf(l, "ByteVector"))
472656 then {
473- let bn = h
474- bn
657+ let al = l
658+ al
475659 }
476- else if ($isInstanceOf(h, "Unit"))
477- then bD.senderPublicKey
478- else throw("Match error")
660+ else cx.senderPublicKey
479661 }
480- sigVerify(bD.bodyBytes, bD.proofs[0], bF)
662+ sigVerify(cx.bodyBytes, cx.proofs[0], cz)
481663 }
482664

github/deemru/w8io/169f3d6 
117.20 ms