tx · GREoUiztZu1cjmLjvssmYUBdRkwga58j37QTkEQdByUJ

3MzYrKxGR6BZcwdHQDDXDRGn7c63zQsqyu3:  -0.03400000 Waves

2023.05.04 13:13 [2562879] smart account 3MzYrKxGR6BZcwdHQDDXDRGn7c63zQsqyu3 > SELF 0.00000000 Waves

{ "type": 13, "id": "GREoUiztZu1cjmLjvssmYUBdRkwga58j37QTkEQdByUJ", "fee": 3400000, "feeAssetId": null, "timestamp": 1683195245403, "version": 2, "chainId": 84, "sender": "3MzYrKxGR6BZcwdHQDDXDRGn7c63zQsqyu3", "senderPublicKey": "7GvzKupc5EwAeuw6BXayiGswG3LEmw6artCvXaZzaGKp", "proofs": [ "4UpwrRVj6HVgcPURjFbXyH74xzmJj5NTeDAzHq9UJzG4pUGdrTWhKoPHd8SS4t2Wok74cUne3EaCQRhT2NT7N9tt" ], "script": "base64:BgJjCAISAwoBCBIDCgEIEgMKAQgSABIAEgMKAQgSBAoCCAESBgoEAgECAhIDCgEIEgMKAQgSBQoDCAgEEgYKBAEYCBgSBAoCGAgSBAoCCAgSBAoCCAgSAwoBCBIDCgEIEgQKAggIYwAGU0NBTEU4AAgABU1VTFQzAOgHAAVNVUxUOACAwtcvAAdTQ0FMRTE4ABIABk1VTFQxOAkAtgIBAICAkLu61q3wDQADU0VQAgJfXwAOUE9PTFdFSUdIVE1VTFQFBU1VTFQ4AAp6ZXJvQmlnSW50CQC2AgEAAAAJb25lQmlnSW50CQC2AgEAAQEHd3JhcEVycgEDbXNnCQC5CQIJAMwIAgINc3Rha2luZy5yaWRlOgkAzAgCCQClCAEFBHRoaXMJAMwIAgUDbXNnBQNuaWwCASABCHRocm93RXJyAQNtc2cJAAIBCQEHd3JhcEVycgEFA21zZwEJYXNBbnlMaXN0AQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0ECnZhbEFueUx5c3QFByRtYXRjaDAFCnZhbEFueUx5c3QJAQh0aHJvd0VycgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAQh0aHJvd0VycgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEIYXNTdHJpbmcBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACBlN0cmluZwQGdmFsU3RyBQckbWF0Y2gwBQZ2YWxTdHIJAQh0aHJvd0VycgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEMYXNCeXRlVmVjdG9yAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAZ2YWxCaW4FByRtYXRjaDAFBnZhbEJpbgkBCHRocm93RXJyAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQEHd3JhcEVycgEJAKwCAgkArAICAg9tYW5kYXRvcnkgdGhpcy4FA2tleQIPIGlzIG5vdCBkZWZpbmVkARhnZXRTdHJpbmdCeUFkZHJlc3NPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQEHd3JhcEVycgEJAKwCAgkArAICCQCsAgIJAKwCAgIKbWFuZGF0b3J5IAkApQgBBQdhZGRyZXNzAgEuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEMZ2V0SW50T3JaZXJvAgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQdhZGRyZXNzBQNrZXkAAAEPZ2V0SW50T3JEZWZhdWx0AwdhZGRyZXNzA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFB2FkZHJlc3MFA2tleQUKZGVmYXVsdFZhbAEMZ2V0SW50T3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFB2FkZHJlc3MFA2tleQkBB3dyYXBFcnIBCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIHYWRkcmVzcwNrZXkJAQV2YWx1ZQEJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQdhZGRyZXNzBQNrZXkCATABHGdldEJpZ0ludEZyb21TdHJpbmdPckRlZmF1bHQDB2FkZHJlc3MDa2V5CmRlZmF1bHRWYWwEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBBXZhbHVlAQkAqAMBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFCmRlZmF1bHRWYWwJAAIBAgtNYXRjaCBlcnJvcgEFdG9YMTgCB29yaWdWYWwNb3JpZ1NjYWxlTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFBk1VTFQxOAkAtgIBBQ1vcmlnU2NhbGVNdWx0AQdmcm9tWDE4AgN2YWwPcmVzdWx0U2NhbGVNdWx0CQCgAwEJALwCAwUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUGTVVMVDE4ARFrZXlGYWN0b3J5QWRkcmVzcwACHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MBGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QAAholc19fdm90aW5nRW1pc3Npb25Db250cmFjdAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAAEAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAAAgAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAwAVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwAAQAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAABQAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAYAGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAABwENa2V5RmFjdG9yeUNmZwACESVzX19mYWN0b3J5Q29uZmlnARNrZXlNYW5hZ2VyUHVibGljS2V5AAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5ARprZXlGYWN0b3J5THAyQXNzZXRzTWFwcGluZwEKbHBBc3NldFN0cgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQpscEFzc2V0U3RyCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQNTRVABEGtleUZhY3RvcnlMcExpc3QAAhAlc19fbHBUb2tlbnNMaXN0ASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEKbHBBc3NldFN0cgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQpscEFzc2V0U3RyCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQNTRVABFGtleUZhY3RvcnlQb29sV2VpZ2h0AQ9jb250cmFjdEFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCnBvb2xXZWlnaHQJAMwIAgUPY29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAEKcmVhZExwTGlzdAEHZmFjdG9yeQkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFB2ZhY3RvcnkJARBrZXlGYWN0b3J5THBMaXN0AAIABQNTRVABFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAQdmYWN0b3J5CQC1CQIJARhnZXRTdHJpbmdCeUFkZHJlc3NPckZhaWwCBQdmYWN0b3J5CQENa2V5RmFjdG9yeUNmZwAFA1NFUAEYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHABGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwARdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHABHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAACGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAEha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50AAIeJXMlc19fcmF0ZVBlckJsb2NrTWF4X19jdXJyZW50ARVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAholcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawEba2V5RW1pc3Npb25EdXJhdGlvbkluQmxvY2tzAAIYJXMlc19fZW1pc3Npb25fX2R1cmF0aW9uARNrZXlFbWlzc2lvbkVuZEJsb2NrAAIYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQ9rZXlTdGFrZWRCeVVzZXICDnVzZXJBZGRyZXNzU3RyDGxwQXNzZXRJZFN0cgkAuQkCCQDMCAICDiVzJXMlc19fc3Rha2VkCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNTRVABDmtleVN0YWtlZFRvdGFsAQxscEFzc2V0SWRTdHIJAKwCAgIXJXMlcyVzX19zdGFrZWRfX3RvdGFsX18FDGxwQXNzZXRJZFN0cgEQa2V5Q2xhaW1lZEJ5VXNlcgIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyCQC5CQIJAMwIAgIPJXMlcyVzX19jbGFpbWVkCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNTRVABGWtleUNsYWltZWRCeVVzZXJNaW5SZXdhcmQCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgkAuQkCCQDMCAICGCVzJXMlc19fY2xhaW1lZE1pblJld2FyZAkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBQxscEFzc2V0SWRTdHIFA25pbAUDU0VQARtrZXlDbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmQCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgkAuQkCCQDMCAICGiVzJXMlc19fY2xhaW1lZEJvb3N0UmV3YXJkCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNTRVABD2tleUNsYWltZWRUb3RhbAEMbHBBc3NldElkU3RyCQC5CQIJAMwIAgIWJXMlcyVzX19jbGFpbWVkX190b3RhbAkAzAgCBQxscEFzc2V0SWRTdHIFA25pbAUDU0VQAQpyZWFkU3Rha2VkAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABFWtleUxhc3RUb3RhbExwQmFsYW5jZQEJbHBBc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAgV0b3RhbAkAzAgCAgNiYWwFA25pbAUDU0VQARRrZXlMYXN0VXNlckxwQmFsYW5jZQIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCAgNiYWwFA25pbAUDU0VQARlrZXlUb3RhbExwQmFsYW5jZUludGVncmFsAQlscEFzc2V0SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAICBXRvdGFsCQDMCAICBmJhbElOVAUDbmlsBQNTRVABGGtleVVzZXJMcEJhbGFuY2VJbnRlZ3JhbAIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCAgZiYWxJTlQFA25pbAUDU0VQASZrZXlUb3RhbExwQmFsYW5jZUludGVncmFsTGFzdFVwZEhlaWdodAEJbHBBc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAgV0b3RhbAkAzAgCAgdsYXN0VXBkBQNuaWwFA1NFUAEla2V5VXNlckxwQmFsYW5jZUludGVncmFsTGFzdFVwZEhlaWdodAIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCAgdsYXN0VXBkBQNuaWwFA1NFUAESa2V5V3hQZXJMcEludGVncmFsAQlscEFzc2V0SWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgIGY29tbW9uCQDMCAICBWxwSW50BQNuaWwFA1NFUAEfa2V5V3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodAEJbHBBc3NldElkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAICBmNvbW1vbgkAzAgCAgZscEludEgFA25pbAUDU0VQARBrZXlXeFRvQ2xhaW1Vc2VyAglscEFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgULdXNlckFkZHJlc3MJAMwIAgIFbHBJbnQFA25pbAUDU0VQASNrZXlXeFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodAIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAICBmxwSW50SAUDbmlsBQNTRVABCmtleVd4UGVyTHABCWxwQXNzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAgd3eFBlckxwBQNuaWwFA1NFUAENa2V5V3hQZXJMcFgxOAEJbHBBc3NldElkCQC5CQIJAMwIAgICJXMJAMwIAgUJbHBBc3NldElkCQDMCAICCnd4UGVyTHBYMTgFA25pbAUDU0VQARprZXlXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAIJbHBBc3NldElkC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAICBXVJbnRMBQNuaWwFA1NFUAEZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAMEdHlwZQt1c2VyQWRkcmVzcwZ0eElkNTgJALkJAgkAzAgCAhElcyVzJXMlc19faGlzdG9yeQkAzAgCBQR0eXBlCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFBnR4SWQ1OAUDbmlsBQNTRVABE2Zvcm1hdEhpc3RvcnlSZWNvcmQEC3VzZXJBZGRyZXNzCWxwQXNzZXRJZAR0eXBlBmFtb3VudAkAuQkCCQDMCAICDCVzJXMlcyVkJWQlZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBQlscEFzc2V0SWQJAMwIAgUEdHlwZQkAzAgCCQCkAwEFBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUGYW1vdW50BQNuaWwFA1NFUAEVT3BlcmF0aW9uSGlzdG9yeUVudHJ5BQR0eXBlC3VzZXJBZGRyZXNzCWxwQXNzZXRJZAZhbW91bnQEdHhJZAkBC1N0cmluZ0VudHJ5AgkBGWtleU9wZXJhdGlvbkhpc3RvcnlSZWNvcmQDBQR0eXBlBQt1c2VyQWRkcmVzcwkA2AQBBQR0eElkCQETZm9ybWF0SGlzdG9yeVJlY29yZAQFC3VzZXJBZGRyZXNzBQlscEFzc2V0SWQFBHR5cGUFBmFtb3VudAAOZmFjdG9yeUFkZHJlc3MJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQERa2V5RmFjdG9yeUFkZHJlc3MAAA9mYWN0b3J5Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmZhY3RvcnlBZGRyZXNzAApmYWN0b3J5Q2ZnCQEUcmVhZEZhY3RvcnlDZmdPckZhaWwBBQ9mYWN0b3J5Q29udHJhY3QAEGVtaXNzaW9uQ29udHJhY3QJARhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwBBQpmYWN0b3J5Q2ZnABBib29zdGluZ0NvbnRyYWN0CQEYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsAQUKZmFjdG9yeUNmZwAKYm9vc3RDb2VmZgoAAUAJAPwHBAUQZW1pc3Npb25Db250cmFjdAIVZ2V0Qm9vc3RDb2VmZlJFQURPTkxZBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkAuQkCCQDMCAICAiVzCQDMCAICFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QFA25pbAUDU0VQCQEHd3JhcEVycgECLmxwX3N0YWtpbmdfcG9vbHMgY29udHJhY3QgYWRkcmVzcyBpcyB1bmRlZmluZWQJAQd3cmFwRXJyAQIpaW52YWxpZCBscF9zdGFraW5nX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MBC2tleU5leHRVc2VyAQlscEFzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAghuZXh0VXNlcgUDbmlsBQNTRVABEGdldFVzZXJzTGlzdE5hbWUBCWxwQXNzZXRJZAkAuQkCCQDMCAICBXVzZXJzCQDMCAIFCWxwQXNzZXRJZAUDbmlsBQNTRVABC2tleUxpc3RIZWFkAQhsaXN0TmFtZQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQhsaXN0TmFtZQkAzAgCAgRoZWFkBQNuaWwFA1NFUAELa2V5TGlzdFNpemUBCGxpc3ROYW1lCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCGxpc3ROYW1lCQDMCAICBHNpemUFA25pbAUDU0VQAQtrZXlMaXN0UHJldgIIbGlzdE5hbWUCaWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQhsaXN0TmFtZQkAzAgCBQJpZAkAzAgCAgRwcmV2BQNuaWwFA1NFUAELa2V5TGlzdE5leHQCCGxpc3ROYW1lAmlkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUIbGlzdE5hbWUJAMwIAgUCaWQJAMwIAgIEbmV4dAUDbmlsBQNTRVABDGNvbnRhaW5zTm9kZQIIbGlzdE5hbWUCaWQECmhlYWRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUECnByZXZPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUFAmlkBApuZXh0T3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAMDCQAAAgUCaWQJAQt2YWx1ZU9yRWxzZQIFCmhlYWRPclVuaXQCAAYJAQIhPQIFCnByZXZPclVuaXQFBHVuaXQGCQECIT0CBQpuZXh0T3JVbml0BQR1bml0ARFpbnNlcnROb2RlQWN0aW9ucwIIbGlzdE5hbWUCaWQECmhlYWRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUECGxpc3RTaXplCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtrZXlMaXN0U2l6ZQEFCGxpc3ROYW1lAAAECWNoZWNrTm9kZQMJAQEhAQkBDGNvbnRhaW5zTm9kZQIFCGxpc3ROYW1lBQJpZAYJAQh0aHJvd0VycgECC05vZGUgZXhpc3RzAwkAAAIFCWNoZWNrTm9kZQUJY2hlY2tOb2RlCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC2tleUxpc3RTaXplAQUIbGlzdE5hbWUJAGQCBQhsaXN0U2l6ZQABBQNuaWwDCQECIT0CBQpoZWFkT3JVbml0BQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAkBBXZhbHVlAQUKaGVhZE9yVW5pdAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQkBBXZhbHVlAQUKaGVhZE9yVW5pdAUCaWQFA25pbAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBQJpZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARFkZWxldGVOb2RlQWN0aW9ucwIIbGlzdE5hbWUCaWQECmhlYWRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUECGxpc3RTaXplCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtrZXlMaXN0U2l6ZQEFCGxpc3ROYW1lAAAECnByZXZPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUFAmlkBApuZXh0T3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELa2V5TGlzdFNpemUBBQhsaXN0TmFtZQkAZQIFCGxpc3RTaXplAAEFA25pbAMDCQECIT0CBQpwcmV2T3JVbml0BQR1bml0CQECIT0CBQpuZXh0T3JVbml0BQR1bml0BwkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdE5leHQCBQhsaXN0TmFtZQkBBXZhbHVlAQUKcHJldk9yVW5pdAkBBXZhbHVlAQUKbmV4dE9yVW5pdAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQkBBXZhbHVlAQUKbmV4dE9yVW5pdAkBBXZhbHVlAQUKcHJldk9yVW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQUCaWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUFAmlkBQNuaWwDCQECIT0CBQpuZXh0T3JVbml0BQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lCQEFdmFsdWUBBQpuZXh0T3JVbml0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQkBBXZhbHVlAQUKbmV4dE9yVW5pdAUDbmlsAwkBAiE9AgUKcHJldk9yVW5pdAUEdW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQUCaWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUJAQV2YWx1ZQEFCnByZXZPclVuaXQFA25pbAMJAAACBQJpZAkBC3ZhbHVlT3JFbHNlAgUKaGVhZE9yVW5pdAIACQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBQNuaWwJAQh0aHJvd0VycgEJAKwCAgkArAICCQCsAgICDmludmFsaWQgbm9kZTogBQhsaXN0TmFtZQIBLgUCaWQBG2NhbGNXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAQMc3Rha2VkQnlVc2VyJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvEnd4UGVyTHBJbnRlZ3JhbE5ldxp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdEtFWQMDCQAAAgUmd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRPclplcm8FCnplcm9CaWdJbnQJAL8CAgUMc3Rha2VkQnlVc2VyBQp6ZXJvQmlnSW50BwUKemVyb0JpZ0ludAMJAAACBQxzdGFrZWRCeVVzZXIFCnplcm9CaWdJbnQFEnd4UGVyTHBJbnRlZ3JhbE5ldwMDCQC/AgIFJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvBQp6ZXJvQmlnSW50CQC/AgIFDHN0YWtlZEJ5VXNlcgUKemVyb0JpZ0ludAcJAQV2YWx1ZQEJAKgDAQkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQEIdGhyb3dFcnIBAi1jYWxjV3hQZXJMcEludGVncmFsVXNlckxhc3Q6IHVuZXhwZWN0ZWQgc3RhdGUBFHJlZnJlc2hQb29sSU5URUdSQUxTAwxscEFzc2V0SWRTdHIOcG9vbEFkZHJlc3NTdHINbHBEZWx0YUFtb3VudAQOc3Rha2VkVG90YWxLRVkJAQ5rZXlTdGFrZWRUb3RhbAEFDGxwQXNzZXRJZFN0cgQLc3Rha2VkVG90YWwJALYCAQkBCnJlYWRTdGFrZWQBBQ5zdGFrZWRUb3RhbEtFWQQSbm9uWmVyb1N0YWtlZFRvdGFsAwkAAAIFC3N0YWtlZFRvdGFsBQp6ZXJvQmlnSW50BQlvbmVCaWdJbnQFC3N0YWtlZFRvdGFsBApwb29sV2VpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9mYWN0b3J5Q29udHJhY3QJARRrZXlGYWN0b3J5UG9vbFdlaWdodAEFDnBvb2xBZGRyZXNzU3RyBBJlbWlzc2lvblN0YXJ0QmxvY2sJAQxnZXRJbnRPckZhaWwCBRBlbWlzc2lvbkNvbnRyYWN0CQEVa2V5RW1pc3Npb25TdGFydEJsb2NrAAQUd3hFbWlzc2lvblBlckJsb2NrWDMJAGgCCQEMZ2V0SW50T3JGYWlsAgUQZW1pc3Npb25Db250cmFjdAkBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAFBU1VTFQzBBhwb29sV3hFbWlzc2lvblBlckJsb2NrWDMJAGsDBRR3eEVtaXNzaW9uUGVyQmxvY2tYMwUKcG9vbFdlaWdodAkAaAIFDlBPT0xXRUlHSFRNVUxUBQpib29zdENvZWZmBBJ3eFBlckxwSW50ZWdyYWxLRVkJARJrZXlXeFBlckxwSW50ZWdyYWwBBQxscEFzc2V0SWRTdHIEH3d4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHRLRVkJAR9rZXlXeFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0AQUMbHBBc3NldElkU3RyBAp3eFBlckxwS0VZCQEKa2V5V3hQZXJMcAEFDGxwQXNzZXRJZFN0cgQcd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodAkBD2dldEludE9yRGVmYXVsdAMFBHRoaXMFH3d4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHRLRVkFEmVtaXNzaW9uU3RhcnRCbG9jawQPd3hQZXJMcEludGVncmFsCQEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIFBHRoaXMFEnd4UGVyTHBJbnRlZ3JhbEtFWQQPd3hQZXJMcE9yWmVyb1gzAAAEAmRoCQCWAwEJAMwIAgkAZQIFBmhlaWdodAUcd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodAkAzAgCAAAFA25pbAQJd3hQZXJMcFgzAwkBAiE9AgUPd3hQZXJMcE9yWmVyb1gzAAAJALYCAQUPd3hQZXJMcE9yWmVyb1gzCQC8AgMJALYCAQUYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzCQC2AgEFBU1VTFQ4BRJub25aZXJvU3Rha2VkVG90YWwEDnN0YWtlZFRvdGFsTmV3CQC3AgIFC3N0YWtlZFRvdGFsCQC2AgEFDWxwRGVsdGFBbW91bnQEFW5vblplcm9TdGFrZWRUb3RhbE5ldwMJAAACBQ5zdGFrZWRUb3RhbE5ldwUKemVyb0JpZ0ludAUJb25lQmlnSW50BQ5zdGFrZWRUb3RhbE5ldwQSd3hQZXJMcEludGVncmFsTmV3CQC3AgIFD3d4UGVyTHBJbnRlZ3JhbAkAuQICBQl3eFBlckxwWDMJALYCAQUCZGgEDHd4UGVyTHBYM05ldwkAugICCQC2AgEFGHBvb2xXeEVtaXNzaW9uUGVyQmxvY2tYMwUVbm9uWmVyb1N0YWtlZFRvdGFsTmV3BB93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0TmV3BQZoZWlnaHQEBWRlYnVnCQC5CQIJAMwIAgkApgMBBRJ3eFBlckxwSW50ZWdyYWxOZXcJAMwIAgkApAMBBQJkaAkAzAgCCQCmAwEFCXd4UGVyTHBYMwkAzAgCCQCmAwEFC3N0YWtlZFRvdGFsCQDMCAIJAKQDAQUYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzCQDMCAIJAKQDAQUUd3hFbWlzc2lvblBlckJsb2NrWDMJAMwIAgkApAMBBQpwb29sV2VpZ2h0BQNuaWwCAjo6CQCVCgMFEnd4UGVyTHBJbnRlZ3JhbE5ldwkAzAgCCQELU3RyaW5nRW50cnkCBRJ3eFBlckxwSW50ZWdyYWxLRVkJAKYDAQUSd3hQZXJMcEludGVncmFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBR93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0S0VZBR93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0TmV3CQDMCAIJAQtTdHJpbmdFbnRyeQIFCnd4UGVyTHBLRVkJAKYDAQUMd3hQZXJMcFgzTmV3BQNuaWwFBWRlYnVnARByZWZyZXNoSU5URUdSQUxTBAxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIOcG9vbEFkZHJlc3NTdHINbHBEZWx0YUFtb3VudAQNJHQwMTQ3MjMxNDg0NQkBFHJlZnJlc2hQb29sSU5URUdSQUxTAwUMbHBBc3NldElkU3RyBQ5wb29sQWRkcmVzc1N0cgUNbHBEZWx0YUFtb3VudAQSd3hQZXJMcEludGVncmFsTmV3CAUNJHQwMTQ3MjMxNDg0NQJfMQQRcG9vbEludGVncmFsU1RBVEUIBQ0kdDAxNDcyMzE0ODQ1Al8yBAlwb29sREVCVUcIBQ0kdDAxNDcyMzE0ODQ1Al8zBA9zdGFrZWRCeVVzZXJLRVkJAQ9rZXlTdGFrZWRCeVVzZXICBQ51c2VyQWRkcmVzc1N0cgUMbHBBc3NldElkU3RyBAxzdGFrZWRCeVVzZXIJAQpyZWFkU3Rha2VkAQUPc3Rha2VkQnlVc2VyS0VZBBB3eFRvQ2xhaW1Vc2VyS0VZCQEQa2V5V3hUb0NsYWltVXNlcgIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0S0VZCQEja2V5V3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHQCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBBp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdEtFWQkBGmtleVd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0AgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQNd3hUb0NsYWltVXNlcgkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRB3eFRvQ2xhaW1Vc2VyS0VZBCZ3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodE9yWmVybwkBDGdldEludE9yWmVybwIFBHRoaXMFI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0S0VZBBd3eFBlckxwSW50ZWdyYWxVc2VyTGFzdAkBG2NhbGNXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAQJALYCAQUMc3Rha2VkQnlVc2VyCQC2AgEFJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvBRJ3eFBlckxwSW50ZWdyYWxOZXcFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZBAZNVUxUMTEJAGgCBQVNVUxUOAUFTVVMVDMEEHd4VG9DbGFpbVVzZXJOZXcJAJgDAQkAzAgCCQC3AgIFDXd4VG9DbGFpbVVzZXIJALwCAwkAuAICBRJ3eFBlckxwSW50ZWdyYWxOZXcFF3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0CQC2AgEFDHN0YWtlZEJ5VXNlcgkAtgIBBQZNVUxUMTEJAMwIAgUKemVyb0JpZ0ludAUDbmlsBBp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdE5ldwUSd3hQZXJMcEludGVncmFsTmV3BCN3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodE5ldwUGaGVpZ2h0BAVkZWJ1ZwkAuQkCCQDMCAIJAKYDAQUNd3hUb0NsYWltVXNlcgkAzAgCCQCmAwEFF3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0CQDMCAIJAKQDAQUMc3Rha2VkQnlVc2VyCQDMCAIFCXBvb2xERUJVRwkAzAgCCQCkAwEFBmhlaWdodAUDbmlsAgI6OgkAlQoDBRB3eFRvQ2xhaW1Vc2VyTmV3CQDOCAIFEXBvb2xJbnRlZ3JhbFNUQVRFCQDMCAIJAQtTdHJpbmdFbnRyeQIFEHd4VG9DbGFpbVVzZXJLRVkJAKYDAQUQd3hUb0NsYWltVXNlck5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRLRVkFI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0TmV3CQDMCAIJAQtTdHJpbmdFbnRyeQIFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQCmAwEFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0TmV3BQNuaWwFBWRlYnVnARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQETa2V5TWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAFXBlcm1pc3Npb25EZW5pZWRFcnJvcgkBCHRocm93RXJyAQIRUGVybWlzc2lvbiBkZW5pZWQBCG11c3RUaGlzAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYFFXBlcm1pc3Npb25EZW5pZWRFcnJvcgELbXVzdE1hbmFnZXIBAWkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUVcGVybWlzc2lvbkRlbmllZEVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgUVcGVybWlzc2lvbkRlbmllZEVycm9yCQACAQILTWF0Y2ggZXJyb3IBDHN0YWtlQWN0aW9ucwUBaQlscEFzc2V0SWQLcG9vbEFkZHJlc3MLdXNlckFkZHJlc3MGYW1vdW50BA51c2VyQWRkcmVzc1N0cgkApQgBBQt1c2VyQWRkcmVzcwQMbHBBc3NldElkU3RyCQDYBAEFCWxwQXNzZXRJZAQOcG9vbEFkZHJlc3NTdHIJAKUIAQULcG9vbEFkZHJlc3MED3N0YWtlZEJ5VXNlcktFWQkBD2tleVN0YWtlZEJ5VXNlcgIFDnVzZXJBZGRyZXNzU3RyBQxscEFzc2V0SWRTdHIEDnN0YWtlZFRvdGFsS0VZCQEOa2V5U3Rha2VkVG90YWwBBQxscEFzc2V0SWRTdHIEDHN0YWtlZEJ5VXNlcgkBCnJlYWRTdGFrZWQBBQ9zdGFrZWRCeVVzZXJLRVkEEXJlZnJlc2hTdGFrZWRWb3RlAwkAAAIFDHN0YWtlZEJ5VXNlcgAACQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCEm9uU3Rha2VkVm90ZVVwZGF0ZQkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgYFA25pbAUDbmlsBQR1bml0AwkAAAIFEXJlZnJlc2hTdGFrZWRWb3RlBRFyZWZyZXNoU3Rha2VkVm90ZQQLc3Rha2VkVG90YWwJAQpyZWFkU3Rha2VkAQUOc3Rha2VkVG90YWxLRVkEDSR0MDE4MDY0MTgxODEJARByZWZyZXNoSU5URUdSQUxTBAUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUOcG9vbEFkZHJlc3NTdHIFBmFtb3VudAQQd3hUb0NsYWltVXNlck5ldwgFDSR0MDE4MDY0MTgxODECXzEEDWludGVncmFsU1RBVEUIBQ0kdDAxODA2NDE4MTgxAl8yBAVkZWJ1ZwgFDSR0MDE4MDY0MTgxODECXzMECGxpc3ROYW1lCQEQZ2V0VXNlcnNMaXN0TmFtZQEFDGxwQXNzZXRJZFN0cgQLbGlzdEFjdGlvbnMDCQEMY29udGFpbnNOb2RlAgUIbGlzdE5hbWUFDnVzZXJBZGRyZXNzU3RyBQNuaWwJARFpbnNlcnROb2RlQWN0aW9ucwIFCGxpc3ROYW1lBQ51c2VyQWRkcmVzc1N0cgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFD3N0YWtlZEJ5VXNlcktFWQkAZAIFDHN0YWtlZEJ5VXNlcgUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5zdGFrZWRUb3RhbEtFWQkAZAIFC3N0YWtlZFRvdGFsBQZhbW91bnQJAMwIAgkBFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQUCBXN0YWtlBQ51c2VyQWRkcmVzc1N0cgUMbHBBc3NldElkU3RyBQZhbW91bnQIBQFpDXRyYW5zYWN0aW9uSWQFA25pbAUNaW50ZWdyYWxTVEFURQULbGlzdEFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDnVuc3Rha2VBY3Rpb25zBgFpCWxwQXNzZXRJZAtwb29sQWRkcmVzcwt1c2VyQWRkcmVzcxdscEFzc2V0UmVjaXBpZW50QWRkcmVzcwZhbW91bnQEDnVzZXJBZGRyZXNzU3RyCQClCAEFC3VzZXJBZGRyZXNzBAxscEFzc2V0SWRTdHIJANgEAQUJbHBBc3NldElkBA5wb29sQWRkcmVzc1N0cgkApQgBBQtwb29sQWRkcmVzcwQPc3Rha2VkQnlVc2VyS0VZCQEPa2V5U3Rha2VkQnlVc2VyAgUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgQOc3Rha2VkVG90YWxLRVkJAQ5rZXlTdGFrZWRUb3RhbAEFDGxwQXNzZXRJZFN0cgQMc3Rha2VkQnlVc2VyCQEKcmVhZFN0YWtlZAEFD3N0YWtlZEJ5VXNlcktFWQQLc3Rha2VkVG90YWwJAQpyZWFkU3Rha2VkAQUOc3Rha2VkVG90YWxLRVkEDWludGVncmFsU1RBVEUICQEQcmVmcmVzaElOVEVHUkFMUwQFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIFDnBvb2xBZGRyZXNzU3RyCQEBLQEFBmFtb3VudAJfMgQIbGlzdE5hbWUJARBnZXRVc2Vyc0xpc3ROYW1lAQUMbHBBc3NldElkU3RyBAtsaXN0QWN0aW9ucwMDCQEMY29udGFpbnNOb2RlAgUIbGlzdE5hbWUFDnVzZXJBZGRyZXNzU3RyCQAAAgUGYW1vdW50BQxzdGFrZWRCeVVzZXIHCQERZGVsZXRlTm9kZUFjdGlvbnMCBQhsaXN0TmFtZQUOdXNlckFkZHJlc3NTdHIFA25pbAQRcmVmcmVzaFN0YWtlZFZvdGUDCQAAAgUGYW1vdW50BQxzdGFrZWRCeVVzZXIJAPwHBAUQYm9vc3RpbmdDb250cmFjdAISb25TdGFrZWRWb3RlVXBkYXRlCQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBwUDbmlsBQNuaWwFBHVuaXQDCQAAAgURcmVmcmVzaFN0YWtlZFZvdGUFEXJlZnJlc2hTdGFrZWRWb3RlBBZjbGFpbWVkQnlVc2VyTWluUmV3YXJkCQEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIFBHRoaXMJARlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQQd3hUb0NsYWltVXNlck5ldwgJARByZWZyZXNoSU5URUdSQUxTBAUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUOcG9vbEFkZHJlc3NTdHIAAAJfMQQQYXZhaWxhYmxlVG9DbGFpbQkAuAICBRB3eFRvQ2xhaW1Vc2VyTmV3BRZjbGFpbWVkQnlVc2VyTWluUmV3YXJkBBV0aHJvd0lmTm90aGluZ1RvQ2xhaW0GBAFyAwkAvwICBRBhdmFpbGFibGVUb0NsYWltBQp6ZXJvQmlnSW50CQD8BwQFBHRoaXMCD2NsYWltV3hJTlRFUk5BTAkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUVdGhyb3dJZk5vdGhpbmdUb0NsYWltBQNuaWwFA25pbAUEdW5pdAMJAAACBQFyBQFyAwkAZgIFBmFtb3VudAUMc3Rha2VkQnlVc2VyCQEIdGhyb3dFcnIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnBhc3NlZCBhbW91bnQ9CQCkAwEFBmFtb3VudAIbIGlzIGdyZWF0ZXIgdGhhbiBhdmFpbGFibGU9CQCkAwEFDHN0YWtlZEJ5VXNlcgIMLiBscEFzc2V0SWQ9BQxscEFzc2V0SWRTdHICEi4gc3Rha2VkQnlVc2VyS0VZPQUPc3Rha2VkQnlVc2VyS0VZCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUPc3Rha2VkQnlVc2VyS0VZCQBlAgUMc3Rha2VkQnlVc2VyBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFDnN0YWtlZFRvdGFsS0VZCQBlAgULc3Rha2VkVG90YWwFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRdscEFzc2V0UmVjaXBpZW50QWRkcmVzcwUGYW1vdW50BQlscEFzc2V0SWQJAMwIAgkBFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQUCB3Vuc3Rha2UFDnVzZXJBZGRyZXNzU3RyBQxscEFzc2V0SWRTdHIFBmFtb3VudAgFAWkNdHJhbnNhY3Rpb25JZAUDbmlsBQ1pbnRlZ3JhbFNUQVRFBQtsaXN0QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLhIBaQELY29uc3RydWN0b3IBEWZhY3RvcnlBZGRyZXNzU3RyBAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUZhY3RvcnlBZGRyZXNzAAURZmFjdG9yeUFkZHJlc3NTdHIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jb25zdHJ1Y3RvclYyARZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BAVjaGVrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQECIT0CCQCmCAEFFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFBHVuaXQGAihpbnZhbGlkIHZvdGluZyBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzBQNuaWwDCQAAAgUFY2hla3MFBWNoZWtzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0AAUWdm90aW5nRW1pc3Npb25Db250cmFjdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnNldE1hbmFnZXIBF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEFWNoZWNrTWFuYWdlclB1YmxpY0tleQkA2QQBBRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAACBRVjaGVja01hbmFnZXJQdWJsaWNLZXkFFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAzAgCCQELU3RyaW5nRW50cnkCCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkABRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNvbmZpcm1NYW5hZ2VyAAQCcG0JAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEBWhhc1BNAwkBCWlzRGVmaW5lZAEFAnBtBgkBCHRocm93RXJyAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFBWhhc1BNBQVoYXNQTQQHY2hlY2tQTQMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAnBtBgkBCHRocm93RXJyAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFB2NoZWNrUE0FB2NoZWNrUE0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleU1hbmFnZXJQdWJsaWNLZXkACQDYBAEJAQV2YWx1ZQEFAnBtCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVzdGFrZQADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAQh0aHJvd0VycgECNGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAlscEFzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQMbHBBc3NldElkU3RyCQDYBAEFCWxwQXNzZXRJZAQGYW1vdW50CAUDcG10BmFtb3VudAQOcG9vbEFkZHJlc3NTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9mYWN0b3J5Q29udHJhY3QJARprZXlGYWN0b3J5THAyQXNzZXRzTWFwcGluZwEFDGxwQXNzZXRJZFN0cgkBB3dyYXBFcnIBCQCsAgICFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUMbHBBc3NldElkU3RyBAtwb29sQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOcG9vbEFkZHJlc3NTdHIEC3VzZXJBZGRyZXNzAwkAAAIIBQFpBmNhbGxlcgULcG9vbEFkZHJlc3MIBQFpDG9yaWdpbkNhbGxlcggFAWkGY2FsbGVyCQEMc3Rha2VBY3Rpb25zBQUBaQUJbHBBc3NldElkBQtwb29sQWRkcmVzcwULdXNlckFkZHJlc3MFBmFtb3VudAFpAQhzdGFrZUZvcgEOdXNlckFkZHJlc3NTdHIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAQh0aHJvd0VycgECNGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAlscEFzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQMbHBBc3NldElkU3RyCQDYBAEFCWxwQXNzZXRJZAQGYW1vdW50CAUDcG10BmFtb3VudAQOcG9vbEFkZHJlc3NTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9mYWN0b3J5Q29udHJhY3QJARprZXlGYWN0b3J5THAyQXNzZXRzTWFwcGluZwEFDGxwQXNzZXRJZFN0cgkBB3dyYXBFcnIBCQCsAgICFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUMbHBBc3NldElkU3RyBAtwb29sQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOcG9vbEFkZHJlc3NTdHIEC3VzZXJBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUOdXNlckFkZHJlc3NTdHIJAQd3cmFwRXJyAQIUaW52YWxpZCB1c2VyIGFkZHJlc3MJAQxzdGFrZUFjdGlvbnMFBQFpBQlscEFzc2V0SWQFC3Bvb2xBZGRyZXNzBQt1c2VyQWRkcmVzcwUGYW1vdW50AWkBB3Vuc3Rha2UCDGxwQXNzZXRJZFN0cgZhbW91bnQECWxwQXNzZXRJZAkA2QQBBQxscEFzc2V0SWRTdHIEDnBvb2xBZGRyZXNzU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcBBQxscEFzc2V0SWRTdHIJAQd3cmFwRXJyAQkArAICAhV1bnN1cHBvcnRlZCBscCBhc3NldCAFDGxwQXNzZXRJZFN0cgQLcG9vbEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDnBvb2xBZGRyZXNzU3RyBAljYWxsZXJTdHIJAKUIAQgFAWkGY2FsbGVyBAt1c2VyQWRkcmVzcwMJAAACBQljYWxsZXJTdHIFDnBvb2xBZGRyZXNzU3RyCAUBaQxvcmlnaW5DYWxsZXIIBQFpBmNhbGxlcgQXbHBBc3NldFJlY2lwaWVudEFkZHJlc3MIBQFpBmNhbGxlcgkBDnVuc3Rha2VBY3Rpb25zBgUBaQUJbHBBc3NldElkBQtwb29sQWRkcmVzcwULdXNlckFkZHJlc3MFF2xwQXNzZXRSZWNpcGllbnRBZGRyZXNzBQZhbW91bnQBaQEPdW5zdGFrZUlOVEVSTkFMBAlscEFzc2V0SWQGYW1vdW50C3VzZXJBZGRyZXNzF2xwQXNzZXRSZWNpcGllbnRBZGRyZXNzBAxscEFzc2V0SWRTdHIJANgEAQUJbHBBc3NldElkBAtwb29sQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD2ZhY3RvcnlDb250cmFjdAkBGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAQUMbHBBc3NldElkU3RyCQEHd3JhcEVycgEJAKwCAgIVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQxscEFzc2V0SWRTdHIEC2NoZWNrQ2FsbGVyAwkAAAIIBQFpBmNhbGxlcgULcG9vbEFkZHJlc3MGBRVwZXJtaXNzaW9uRGVuaWVkRXJyb3IDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQEOdW5zdGFrZUFjdGlvbnMGBQFpBQlscEFzc2V0SWQFC3Bvb2xBZGRyZXNzCQEHQWRkcmVzcwEFC3VzZXJBZGRyZXNzCQEHQWRkcmVzcwEFF2xwQXNzZXRSZWNpcGllbnRBZGRyZXNzBQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHY2xhaW1XeAEMbHBBc3NldElkU3RyBA51c2VyQWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEFXRocm93SWZOb3RoaW5nVG9DbGFpbQYEBnJlc3VsdAkA/AcEBQR0aGlzAg9jbGFpbVd4SU5URVJOQUwJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFFXRocm93SWZOb3RoaW5nVG9DbGFpbQUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQBaQERY2xhaW1XeERvTm90VGhyb3cBDGxwQXNzZXRJZFN0cgQOdXNlckFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBBV0aHJvd0lmTm90aGluZ1RvQ2xhaW0HBAZyZXN1bHQJAPwHBAUEdGhpcwIPY2xhaW1XeElOVEVSTkFMCQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBRV0aHJvd0lmTm90aGluZ1RvQ2xhaW0FA25pbAUDbmlsCQCUCgIFA25pbAUGcmVzdWx0AWkBD2NsYWltV3hJTlRFUk5BTAMMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyFXRocm93SWZOb3RoaW5nVG9DbGFpbQQLY2hlY2tDYWxsZXIJAQhtdXN0VGhpcwEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAt1c2VyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFDnVzZXJBZGRyZXNzU3RyCQEHd3JhcEVycgECJWNsYWltV3hJTlRFUk5BTDogaW52YWxpZCB1c2VyIGFkZHJlc3MEDnBvb2xBZGRyZXNzU3RyCQEYZ2V0U3RyaW5nQnlBZGRyZXNzT3JGYWlsAgUPZmFjdG9yeUNvbnRyYWN0CQEma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MBBQxscEFzc2V0SWRTdHIEEGNsYWltZWRCeVVzZXJLRVkJARBrZXlDbGFpbWVkQnlVc2VyAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQPY2xhaW1lZFRvdGFsS0VZCQEPa2V5Q2xhaW1lZFRvdGFsAQUMbHBBc3NldElkU3RyBBljbGFpbWVkQnlVc2VyTWluUmV3YXJkS0VZCQEZa2V5Q2xhaW1lZEJ5VXNlck1pblJld2FyZAIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEG2NsYWltZWRCeVVzZXJCb29zdFJld2FyZEtFWQkBG2tleUNsYWltZWRCeVVzZXJCb29zdFJld2FyZAIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEDWNsYWltZWRCeVVzZXIJARlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAgUEdGhpcwUQY2xhaW1lZEJ5VXNlcktFWQQWY2xhaW1lZEJ5VXNlck1pblJld2FyZAkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRljbGFpbWVkQnlVc2VyTWluUmV3YXJkS0VZBBhjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmQJARlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAgUEdGhpcwUbY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkS0VZBAxjbGFpbWVkVG90YWwJARlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAgUEdGhpcwUPY2xhaW1lZFRvdGFsS0VZBA0kdDAyNTk5NzI2MTA5CQEQcmVmcmVzaElOVEVHUkFMUwQFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIFDnBvb2xBZGRyZXNzU3RyAAAEEHd4VG9DbGFpbVVzZXJOZXcIBQ0kdDAyNTk5NzI2MTA5Al8xBA1pbnRlZ3JhbFNUQVRFCAUNJHQwMjU5OTcyNjEwOQJfMgQFZGVidWcIBQ0kdDAyNTk5NzI2MTA5Al8zBBBhdmFpbGFibGVUb0NsYWltCQCYAwEJAMwIAgkAuAICBRB3eFRvQ2xhaW1Vc2VyTmV3BRZjbGFpbWVkQnlVc2VyTWluUmV3YXJkCQDMCAIFCnplcm9CaWdJbnQFA25pbAMJAMACAgUKemVyb0JpZ0ludAUQYXZhaWxhYmxlVG9DbGFpbQMFFXRocm93SWZOb3RoaW5nVG9DbGFpbQkBCHRocm93RXJyAQIQbm90aGluZyB0byBjbGFpbQkAlAoCBQNuaWwAAAQSd3hBbW91bnRCb29zdFRvdGFsCQCWAwEJAMwIAgkBBWFzSW50AQkAkQMCCQEJYXNBbnlMaXN0AQkA/AcEBRBib29zdGluZ0NvbnRyYWN0AgxjbGFpbVd4Qm9vc3QJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIFDnVzZXJBZGRyZXNzU3RyBQNuaWwFA25pbAAACQDMCAIAAAUDbmlsBA1taW5SZXdhcmRQYXJ0BRBhdmFpbGFibGVUb0NsYWltBA9ib29zdFJld2FyZFBhcnQJAJkDAQkAzAgCCQC5AgIFDW1pblJld2FyZFBhcnQJALYCAQkAZQIFCmJvb3N0Q29lZmYAAQkAzAgCCQC2AgEFEnd4QW1vdW50Qm9vc3RUb3RhbAUDbmlsBAt0b3RhbFJld2FyZAkAtwICBQ1taW5SZXdhcmRQYXJ0BQ9ib29zdFJld2FyZFBhcnQECXd4QXNzZXRJZAkBDGFzQnl0ZVZlY3RvcgEJAJEDAgkBCWFzQW55TGlzdAEJAPwHBAUQZW1pc3Npb25Db250cmFjdAIEZW1pdAkAzAgCCQCgAwEFDW1pblJld2FyZFBhcnQFA25pbAUDbmlsAAAECWVtaXRCb29zdAkBCWFzQW55TGlzdAEJAPwHBAUQZW1pc3Npb25Db250cmFjdAIEZW1pdAkAzAgCCQCgAwEFD2Jvb3N0UmV3YXJkUGFydAUDbmlsBQNuaWwDCQAAAgUJZW1pdEJvb3N0BQllbWl0Qm9vc3QEEmNsYWltZWRCeVVzZXJWYWx1ZQkAtwICCQC3AgIFDWNsYWltZWRCeVVzZXIFDW1pblJld2FyZFBhcnQFD2Jvb3N0UmV3YXJkUGFydAQeY2xhaW1lZEJ5VXNlck1pblJld2FyZFBsdXNQYXJ0CQC3AgIFFmNsYWltZWRCeVVzZXJNaW5SZXdhcmQFDW1pblJld2FyZFBhcnQEK2NsYWltZWRCeVVzZXJCb29zdFJld2FyZFBsdXNCb29zdFJld2FyZFBhcnQJALcCAgUYY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkBQ9ib29zdFJld2FyZFBhcnQEIGNsYWltZWRUb3RhbFBsdXNBdmFpbGFibGVUb0NsYWltCQC3AgIFDGNsYWltZWRUb3RhbAUQYXZhaWxhYmxlVG9DbGFpbQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGNsYWltZWRCeVVzZXJLRVkJAKYDAQUSY2xhaW1lZEJ5VXNlclZhbHVlCQDMCAIJAQtTdHJpbmdFbnRyeQIFGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJAKYDAQUeY2xhaW1lZEJ5VXNlck1pblJld2FyZFBsdXNQYXJ0CQDMCAIJAQtTdHJpbmdFbnRyeQIFG2NsYWltZWRCeVVzZXJCb29zdFJld2FyZEtFWQkApgMBBStjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRQbHVzQm9vc3RSZXdhcmRQYXJ0CQDMCAIJAQtTdHJpbmdFbnRyeQIFD2NsYWltZWRUb3RhbEtFWQkApgMBBSBjbGFpbWVkVG90YWxQbHVzQXZhaWxhYmxlVG9DbGFpbQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwkAoAMBBQ1taW5SZXdhcmRQYXJ0BQl3eEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MJAKADAQUPYm9vc3RSZXdhcmRQYXJ0BQl3eEFzc2V0SWQJAMwIAgkBFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQUCBWNsYWltBQ51c2VyQWRkcmVzc1N0cgUMbHBBc3NldElkU3RyCQCgAwEFEGF2YWlsYWJsZVRvQ2xhaW0IBQFpDXRyYW5zYWN0aW9uSWQFA25pbAkAoAMBBQt0b3RhbFJld2FyZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARtjbGFpbVd4QnVsa0ludGVybmFsUkVBRE9OTFkEC2N1cnJlbnRJdGVyCmxwQXNzZXRJZHMOdXNlckFkZHJlc3NTdHIGcmVzQWNjAwkAAAIFC2N1cnJlbnRJdGVyCQCQAwEFCmxwQXNzZXRJZHMJAJQKAgUDbmlsBQZyZXNBY2MECWxwQXNzZXRJZAkAkQMCBQpscEFzc2V0SWRzBQtjdXJyZW50SXRlcgQEaW5mbwkAtQkCCgABQAkA/AcEBQR0aGlzAg9jbGFpbVd4UkVBRE9OTFkJAMwIAgUJbHBBc3NldElkCQDMCAIFDnVzZXJBZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcFA1NFUAQJdW5jbGFpbWVkCQCRAwIFBGluZm8AAwQHY2xhaW1lZAkAkQMCBQRpbmZvAAQEEXVzZXJWb3RlRmluYWxpemVkCgABQAkA/AcEBRBib29zdGluZ0NvbnRyYWN0AhxnZXRVc2VyVm90ZUZpbmFsaXplZFJFQURPTkxZCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQ51c2VyQWRkcmVzc1N0cgUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BANyZXMJAM0IAgUGcmVzQWNjCQC5CQIJAMwIAgIGJWQlZCVkCQDMCAIFCXVuY2xhaW1lZAkAzAgCBQdjbGFpbWVkCQDMCAIJAKQDAQURdXNlclZvdGVGaW5hbGl6ZWQFA25pbAUDU0VQBANpbnYKAAFACQD8BwQFBHRoaXMCG2NsYWltV3hCdWxrSW50ZXJuYWxSRUFET05MWQkAzAgCCQBkAgULY3VycmVudEl0ZXIAAQkAzAgCBQpscEFzc2V0SWRzCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFA3JlcwUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2ludgUDaW52CQCUCgIFA25pbAUDaW52CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE2NsYWltV3hCdWxrUkVBRE9OTFkCCmxwQXNzZXRJZHMOdXNlckFkZHJlc3NTdHIEA3JlcwkA/AcEBQR0aGlzAhtjbGFpbVd4QnVsa0ludGVybmFsUkVBRE9OTFkJAMwIAgAACQDMCAIFCmxwQXNzZXRJZHMJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFA3JlcwFpAQ9jbGFpbVd4UkVBRE9OTFkCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgQPc3Rha2VkQnlVc2VyS0VZCQEPa2V5U3Rha2VkQnlVc2VyAgUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgQOc3Rha2VkVG90YWxLRVkJAQ5rZXlTdGFrZWRUb3RhbAEFDGxwQXNzZXRJZFN0cgQQY2xhaW1lZEJ5VXNlcktFWQkBEGtleUNsYWltZWRCeVVzZXICBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBBljbGFpbWVkQnlVc2VyTWluUmV3YXJkS0VZCQEZa2V5Q2xhaW1lZEJ5VXNlck1pblJld2FyZAIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEDHN0YWtlZEJ5VXNlcgkBCnJlYWRTdGFrZWQBBQ9zdGFrZWRCeVVzZXJLRVkEC3N0YWtlZFRvdGFsCQEKcmVhZFN0YWtlZAEFDnN0YWtlZFRvdGFsS0VZBA1jbGFpbWVkQnlVc2VyCQEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIFBHRoaXMFEGNsYWltZWRCeVVzZXJLRVkEFmNsYWltZWRCeVVzZXJNaW5SZXdhcmQJARlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAgUEdGhpcwUZY2xhaW1lZEJ5VXNlck1pblJld2FyZEtFWQQOcG9vbEFkZHJlc3NTdHIJARhnZXRTdHJpbmdCeUFkZHJlc3NPckZhaWwCBQ9mYWN0b3J5Q29udHJhY3QJASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEFDGxwQXNzZXRJZFN0cgQKcG9vbFdlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgUPZmFjdG9yeUNvbnRyYWN0CQEUa2V5RmFjdG9yeVBvb2xXZWlnaHQBBQ5wb29sQWRkcmVzc1N0cgQSd3hFbWlzc2lvblBlckJsb2NrCQEMZ2V0SW50T3JGYWlsAgUQZW1pc3Npb25Db250cmFjdAkBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAAEEmVtaXNzaW9uU3RhcnRCbG9jawkBDGdldEludE9yRmFpbAIFEGVtaXNzaW9uQ29udHJhY3QJARVrZXlFbWlzc2lvblN0YXJ0QmxvY2sABAxwYXNzZWRCbG9ja3MDCQBmAgUSZW1pc3Npb25TdGFydEJsb2NrBQZoZWlnaHQAAAkAZQIFBmhlaWdodAUSZW1pc3Npb25TdGFydEJsb2NrBA5wb29sV3hFbWlzc2lvbgkAawMJAGgCBRJ3eEVtaXNzaW9uUGVyQmxvY2sFDHBhc3NlZEJsb2NrcwUKcG9vbFdlaWdodAUOUE9PTFdFSUdIVE1VTFQEDHVzZXJXeFJld2FyZAkAawMFDnBvb2xXeEVtaXNzaW9uBQxzdGFrZWRCeVVzZXIFC3N0YWtlZFRvdGFsBA0kdDAzMDE2MDMwMjcyCQEQcmVmcmVzaElOVEVHUkFMUwQFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIFDnBvb2xBZGRyZXNzU3RyAAAEEHd4VG9DbGFpbVVzZXJOZXcIBQ0kdDAzMDE2MDMwMjcyAl8xBA1pbnRlZ3JhbFNUQVRFCAUNJHQwMzAxNjAzMDI3MgJfMgQFZGVidWcIBQ0kdDAzMDE2MDMwMjcyAl8zBBBhdmFpbGFibGVUb0NsYWltCQCYAwEJAMwIAgkAuAICBRB3eFRvQ2xhaW1Vc2VyTmV3BRZjbGFpbWVkQnlVc2VyTWluUmV3YXJkCQDMCAIFCnplcm9CaWdJbnQFA25pbAQOYm9vc3RJbnZSZXN1bHQJAQlhc0FueUxpc3QBCQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCFGNsYWltV3hCb29zdFJFQURPTkxZCQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCBQ51c2VyQWRkcmVzc1N0cgUDbmlsBQNuaWwEEnd4QW1vdW50Qm9vc3RUb3RhbAkAlgMBCQDMCAIJAQVhc0ludAEJAJEDAgUOYm9vc3RJbnZSZXN1bHQAAAkAzAgCAAAFA25pbAQKYm9vc3REZWJ1ZwkBCGFzU3RyaW5nAQkAkQMCBQ5ib29zdEludlJlc3VsdAABBA1taW5SZXdhcmRQYXJ0BRBhdmFpbGFibGVUb0NsYWltBA9ib29zdFJld2FyZFBhcnQJAJkDAQkAzAgCCQC5AgIFDW1pblJld2FyZFBhcnQJALYCAQkAZQIFCmJvb3N0Q29lZmYAAQkAzAgCCQC2AgEFEnd4QW1vdW50Qm9vc3RUb3RhbAUDbmlsBAt0b3RhbFJld2FyZAkAtwICBQ1taW5SZXdhcmRQYXJ0BQ9ib29zdFJld2FyZFBhcnQJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJXMlcyVkJWQlZCVkJXMJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIJAKYDAQULdG90YWxSZXdhcmQJAMwIAgkApgMBBQ1jbGFpbWVkQnlVc2VyCQDMCAIJAKYDAQUNbWluUmV3YXJkUGFydAkAzAgCCQCmAwEFD2Jvb3N0UmV3YXJkUGFydAkAzAgCAgRzb29uBQNuaWwFA1NFUAFpARRzdGFrZWRCeVVzZXJSRUFET05MWQIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyBAxzdGFrZWRCeVVzZXIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBD2tleVN0YWtlZEJ5VXNlcgIFDnVzZXJBZGRyZXNzU3RyBQxscEFzc2V0SWRTdHIAAAkAlAoCBQNuaWwFDHN0YWtlZEJ5VXNlcgFpARNzdGFrZWRUb3RhbFJFQURPTkxZAQxscEFzc2V0SWRTdHIEC3N0YWtlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEJAQ5rZXlTdGFrZWRUb3RhbAEFDGxwQXNzZXRJZFN0cgAACQCUCgIFA25pbAULc3Rha2VkVG90YWwBaQESdXNlcnNMaXN0VHJhdmVyc2FsAQlscEFzc2V0SWQEC2NoZWNrQ2FsbGVyAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAACAAYJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAhsaXN0TmFtZQkBEGdldFVzZXJzTGlzdE5hbWUBBQlscEFzc2V0SWQECnVzZXJPclVuaXQJAKIIAQkBC2tleU5leHRVc2VyAQUJbHBBc3NldElkBApoZWFkT3JVbml0CQCiCAEJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBAckbWF0Y2gwBQp1c2VyT3JVbml0AwkAAQIFByRtYXRjaDACBFVuaXQEByRtYXRjaDEFCmhlYWRPclVuaXQDCQABAgUHJG1hdGNoMQIEVW5pdAkAlAoCBQNuaWwHAwkAAQIFByRtYXRjaDECBlN0cmluZwQEaGVhZAUHJG1hdGNoMQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlOZXh0VXNlcgEFCWxwQXNzZXRJZAUEaGVhZAUDbmlsBgkAAgECC01hdGNoIGVycm9yAwkAAQIFByRtYXRjaDACBlN0cmluZwQLdXNlckFkZHJlc3MFByRtYXRjaDAEFmNsYWltZWRCeVVzZXJNaW5SZXdhcmQJARlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAgUEdGhpcwkBGWtleUNsYWltZWRCeVVzZXJNaW5SZXdhcmQCBQlscEFzc2V0SWQFC3VzZXJBZGRyZXNzBAtwb29sQWRkcmVzcwkBGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAQUJbHBBc3NldElkBBB3eFRvQ2xhaW1Vc2VyTmV3CAkBEHJlZnJlc2hJTlRFR1JBTFMEBQlscEFzc2V0SWQFC3VzZXJBZGRyZXNzBQtwb29sQWRkcmVzcwAAAl8xBBBhdmFpbGFibGVUb0NsYWltCQC4AgIFEHd4VG9DbGFpbVVzZXJOZXcFFmNsYWltZWRCeVVzZXJNaW5SZXdhcmQEFXRocm93SWZOb3RoaW5nVG9DbGFpbQYEAXIDCQC/AgIFEGF2YWlsYWJsZVRvQ2xhaW0FCnplcm9CaWdJbnQJAPwHBAUEdGhpcwIPY2xhaW1XeElOVEVSTkFMCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBRV0aHJvd0lmTm90aGluZ1RvQ2xhaW0FA25pbAUDbmlsBQR1bml0AwkAAAIFAXIFAXIEDm5leHRVc2VyT3JVbml0CQCiCAEJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQt1c2VyQWRkcmVzcwQHJG1hdGNoMQUObmV4dFVzZXJPclVuaXQDCQABAgUHJG1hdGNoMQIEVW5pdAkAlAoCCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlOZXh0VXNlcgEFCWxwQXNzZXRJZAUDbmlsBwMJAAECBQckbWF0Y2gxAgZTdHJpbmcECG5leHRVc2VyBQckbWF0Y2gxCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleU5leHRVc2VyAQUJbHBBc3NldElkBQhuZXh0VXNlcgUDbmlsBgkAAgECC01hdGNoIGVycm9yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQILTWF0Y2ggZXJyb3IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOb25Nb2RpZnlXZWlnaHQCDGxwQXNzZXRJZFN0cg5wb29sQWRkcmVzc1N0cgMJAQIhPQIIBQFpBmNhbGxlcgUPZmFjdG9yeUNvbnRyYWN0CQEIdGhyb3dFcnIBAhJwZXJtaXNzaW9ucyBkZW5pZWQEDSR0MDMzMDYyMzMxNzIJARRyZWZyZXNoUG9vbElOVEVHUkFMUwMFDGxwQXNzZXRJZFN0cgUOcG9vbEFkZHJlc3NTdHIAAAQSd3hQZXJMcEludGVncmFsTmV3CAUNJHQwMzMwNjIzMzE3MgJfMQQRcG9vbEludGVncmFsU1RBVEUIBQ0kdDAzMzA2MjMzMTcyAl8yBAlwb29sREVCVUcIBQ0kdDAzMzA2MjMzMTcyAl8zBRFwb29sSW50ZWdyYWxTVEFURQECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleQvtHdQ=", "height": 2562879, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: UaHE4eEWLGBCjSmRa3Fx43KGDiCXqnu34e2z1mv5hB1 Next: 46dKdHSxZHcrD88CEobzHgCg2WYXTWUBMCFM8K2CwZxi Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
6-let b = 100000000
6+let b = 1000
77
8-let c = 18
8+let c = 100000000
99
10-let d = toBigInt(1000000000000000000)
10+let d = 18
1111
12-let e = "__"
12+let e = toBigInt(1000000000000000000)
1313
14-let f = b
14+let f = "__"
1515
16-let g = toBigInt(0)
16+let g = c
1717
18-let h = toBigInt(1)
18+let h = toBigInt(0)
1919
20-func i (j) = makeString(["staking.ride:", toString(this), j], " ")
20+let i = toBigInt(1)
21+
22+func j (k) = makeString(["staking.ride:", toString(this), k], " ")
2123
2224
23-func k (j) = throw(i(j))
25+func l (k) = throw(j(k))
2426
2527
26-func l (m) = {
27- let n = m
28- if ($isInstanceOf(n, "List[Any]"))
28+func m (n) = {
29+ let o = n
30+ if ($isInstanceOf(o, "List[Any]"))
2931 then {
30- let o = n
31- o
32+ let p = o
33+ p
3234 }
33- else throw("fail to cast into List[Any]")
35+ else l("fail to cast into List[Any]")
3436 }
3537
3638
37-func p (m) = {
38- let n = m
39- if ($isInstanceOf(n, "Int"))
39+func q (n) = {
40+ let o = n
41+ if ($isInstanceOf(o, "Int"))
4042 then {
41- let q = n
42- q
43+ let r = o
44+ r
4345 }
44- else throw("fail to cast into Int")
46+ else l("fail to cast into Int")
4547 }
4648
4749
48-func r (m) = {
49- let n = m
50- if ($isInstanceOf(n, "String"))
50+func s (n) = {
51+ let o = n
52+ if ($isInstanceOf(o, "String"))
5153 then {
52- let s = n
53- s
54+ let t = o
55+ t
5456 }
55- else throw("fail to cast into Int")
57+ else l("fail to cast into Int")
5658 }
5759
5860
59-func t (m) = {
60- let n = m
61- if ($isInstanceOf(n, "ByteVector"))
61+func u (n) = {
62+ let o = n
63+ if ($isInstanceOf(o, "ByteVector"))
6264 then {
63- let u = n
64- u
65+ let v = o
66+ v
6567 }
66- else throw("fail to cast into Int")
68+ else l("fail to cast into Int")
6769 }
6870
6971
70-func v (w,x) = valueOrErrorMessage(getString(w, x), (("mandatory this." + x) + " is not defined"))
72+func w (x,y) = valueOrErrorMessage(getString(x, y), j((("mandatory this." + y) + " is not defined")))
7173
7274
73-func y (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined"))
75+func z (x,y) = valueOrErrorMessage(getString(x, y), j((((("mandatory " + toString(x)) + ".") + y) + " is not defined")))
7476
7577
76-func z (w,x) = valueOrElse(getInteger(w, x), 0)
78+func A (x,y) = valueOrElse(getInteger(x, y), 0)
7779
7880
79-func A (w,x,B) = valueOrElse(getInteger(w, x), B)
81+func B (x,y,C) = valueOrElse(getInteger(x, y), C)
8082
8183
82-func C (w,x) = valueOrErrorMessage(getInteger(w, x), (("mandatory this." + x) + " is not defined"))
84+func D (x,y) = valueOrErrorMessage(getInteger(x, y), j((("mandatory this." + y) + " is not defined")))
8385
8486
85-func D (w,x) = value(parseBigInt(valueOrElse(getString(w, x), "0")))
87+func E (x,y) = value(parseBigInt(valueOrElse(getString(x, y), "0")))
8688
8789
88-func E (w,x,B) = {
89- let n = getString(w, x)
90- if ($isInstanceOf(n, "String"))
90+func F (x,y,C) = {
91+ let o = getString(x, y)
92+ if ($isInstanceOf(o, "String"))
9193 then {
92- let F = n
93- value(parseBigInt(F))
94+ let G = o
95+ value(parseBigInt(G))
9496 }
95- else if ($isInstanceOf(n, "Unit"))
96- then B
97+ else if ($isInstanceOf(o, "Unit"))
98+ then C
9799 else throw("Match error")
98100 }
99101
100102
101-func G (H,I) = fraction(toBigInt(H), d, toBigInt(I))
103+func H (I,J) = fraction(toBigInt(I), e, toBigInt(J))
102104
103105
104-func J (m,K) = toInt(fraction(m, toBigInt(K), d))
106+func K (n,L) = toInt(fraction(n, toBigInt(L), e))
105107
106108
107-func L () = "%s%s__config__factoryAddress"
109+func M () = "%s%s__config__factoryAddress"
108110
109111
110-func M () = "%s__votingEmissionContract"
112+func N () = "%s__votingEmissionContract"
111113
112114
113-let N = 1
115+let O = 1
114116
115-let O = 2
117+let P = 2
116118
117-let P = 3
119+let Q = 3
118120
119-let Q = 4
121+let R = 4
120122
121-let R = 5
123+let S = 5
122124
123-let S = 6
125+let T = 6
124126
125-let T = 7
127+let U = 7
126128
127-func U () = "%s__factoryConfig"
129+func V () = "%s__factoryConfig"
128130
129131
130-func V () = "%s__managerPublicKey"
132+func W () = "%s__managerPublicKey"
131133
132134
133-func W () = "%s__pendingManagerPublicKey"
135+func X () = "%s__pendingManagerPublicKey"
134136
135137
136-func X () = "%s__stablePoolAddonAddr"
138+func Y (Z) = makeString(["%s%s%s", Z, "mappings__lpAsset2PoolContract"], f)
137139
138140
139-func Y () = "%s__addonAddr"
141+func aa () = "%s__lpTokensList"
140142
141143
142-func Z (aa) = makeString(["%s%s%s", aa, "mappings__lpAsset2PoolContract"], e)
144+func ab (Z) = makeString(["%s%s%s", Z, "mappings__lpAsset2PoolContract"], f)
143145
144146
145-func ab () = "%s__lpTokensList"
147+func ac (ad) = makeString(["%s%s", "poolWeight", ad], f)
146148
147149
148-func ac (aa) = makeString(["%s%s%s", aa, "mappings__lpAsset2PoolContract"], e)
150+func ae (af) = split(valueOrElse(getString(af, aa()), ""), f)
149151
150152
151-func ad (ae) = makeString(["%s%s", "poolWeight", ae], e)
153+func ag (af) = split(z(af, V()), f)
152154
153155
154-func af (ag) = split(valueOrElse(getString(ag, ab()), ""), e)
156+func ah (ai) = addressFromStringValue(ai[P])
155157
156158
157-func ah (ag) = split(y(ag, U()), e)
159+func aj (ai) = addressFromStringValue(ai[S])
158160
159161
160-func ai (aj) = addressFromStringValue(aj[O])
162+func ak (ai) = addressFromStringValue(ai[O])
161163
162164
163-func ak (aj) = addressFromStringValue(aj[R])
165+func al () = "%s%s__ratePerBlock__current"
164166
165167
166-func al (aj) = addressFromStringValue(aj[N])
168+func am () = "%s%s__ratePerBlockMax__current"
167169
168170
169-func am () = "%s%s__ratePerBlock__current"
171+func an () = "%s%s__emission__startBlock"
170172
171173
172-func an () = "%s%s__ratePerBlockMax__current"
174+func ao () = "%s%s__emission__duration"
173175
174176
175-func ao () = "%s%s__emission__startBlock"
177+func ap () = "%s%s__emission__endBlock"
176178
177179
178-func ap () = "%s%s__emission__duration"
180+func aq (ar,as) = makeString(["%s%s%s__staked", ar, as], f)
179181
180182
181-func aq () = "%s%s__emission__endBlock"
183+func at (as) = ("%s%s%s__staked__total__" + as)
182184
183185
184-func ar (as,at) = makeString(["%s%s%s__staked", as, at], e)
186+func au (as,ar) = makeString(["%s%s%s__claimed", ar, as], f)
185187
186188
187-func au (at) = ("%s%s%s__staked__total__" + at)
189+func av (as,ar) = makeString(["%s%s%s__claimedMinReward", ar, as], f)
188190
189191
190-func av (at,as) = makeString(["%s%s%s__claimed", as, at], e)
192+func aw (as,ar) = makeString(["%s%s%s__claimedBoostReward", ar, as], f)
191193
192194
193-func aw (at,as) = makeString(["%s%s%s__claimedMinReward", as, at], e)
195+func ax (as) = makeString(["%s%s%s__claimed__total", as], f)
194196
195197
196-func ax (at,as) = makeString(["%s%s%s__claimedBoostReward", as, at], e)
198+func ay (y) = valueOrElse(getInteger(this, y), 0)
197199
198200
199-func ay (at) = makeString(["%s%s%s__claimed__total", at], e)
201+func az (aA) = makeString(["%s%s%s", aA, "total", "bal"], f)
200202
201203
202-func az (x) = valueOrElse(getInteger(this, x), 0)
204+func aB (aA,aC) = makeString(["%s%s%s", aA, aC, "bal"], f)
203205
204206
205-func aA (aB) = makeString(["%s%s%s", aB, "total", "bal"], e)
207+func aD (aA) = makeString(["%s%s%s", aA, "total", "balINT"], f)
206208
207209
208-func aC (aB,aD) = makeString(["%s%s%s", aB, aD, "bal"], e)
210+func aE (aA,aC) = makeString(["%s%s%s", aA, aC, "balINT"], f)
209211
210212
211-func aE (aB) = makeString(["%s%s%s", aB, "total", "balINT"], e)
213+func aF (aA) = makeString(["%s%s%s", aA, "total", "lastUpd"], f)
212214
213215
214-func aF (aB,aD) = makeString(["%s%s%s", aB, aD, "balINT"], e)
216+func aG (aA,aC) = makeString(["%s%s%s", aA, aC, "lastUpd"], f)
215217
216218
217-func aG (aB) = makeString(["%s%s%s", aB, "total", "lastUpd"], e)
219+func aH (aA) = makeString(["%s%s%s%s", aA, "common", "lpInt"], f)
218220
219221
220-func aH (aB,aD) = makeString(["%s%s%s", aB, aD, "lastUpd"], e)
222+func aI (aA) = makeString(["%s%s%s%s", aA, "common", "lpIntH"], f)
221223
222224
223-func aI (aB) = makeString(["%s%s%s%s", aB, "common", "lpInt"], e)
225+func aJ (aA,aC) = makeString(["%s%s%s%s", aA, aC, "lpInt"], f)
224226
225227
226-func aJ (aB) = makeString(["%s%s%s%s", aB, "common", "lpIntH"], e)
228+func aK (aA,aC) = makeString(["%s%s%s%s", aA, aC, "lpIntH"], f)
227229
228230
229-func aK (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpInt"], e)
231+func aL (aA) = makeString(["%s", aA, "wxPerLp"], f)
230232
231233
232-func aL (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpIntH"], e)
234+func aM (aA) = makeString(["%s", aA, "wxPerLpX18"], f)
233235
234236
235-func aM (aB) = makeString(["%s", aB, "wxPerLp"], e)
237+func aN (aA,aC) = makeString(["%s%s%s%s", aA, aC, "uIntL"], f)
236238
237239
238-func aN (aB) = makeString(["%s", aB, "wxPerLpX18"], e)
240+func aO (aP,aC,aQ) = makeString(["%s%s%s%s__history", aP, aC, aQ], f)
239241
240242
241-func aO (aB,aD) = makeString(["%s%s%s%s", aB, aD, "uIntL"], e)
243+func aR (aC,aA,aP,aS) = makeString(["%s%s%s%d%d%d", aC, aA, aP, toString(height), toString(lastBlock.timestamp), toString(aS)], f)
242244
243245
244-func aP (aQ,aD,aR) = makeString(["%s%s%s%s__history", aQ, aD, aR], e)
246+func aT (aP,aC,aA,aS,aU) = StringEntry(aO(aP, aC, toBase58String(aU)), aR(aC, aA, aP, aS))
245247
246248
247-func aS (aD,aB,aQ,aT) = makeString(["%s%s%s%d%d%d", aD, aB, aQ, toString(height), toString(lastBlock.timestamp), toString(aT)], e)
249+let aV = w(this, M())
250+
251+let aW = addressFromStringValue(aV)
252+
253+let ai = ag(aW)
254+
255+let aX = aj(ai)
256+
257+let aY = ah(ai)
258+
259+let aZ = {
260+ let ba = invoke(aX, "getBoostCoeffREADONLY", nil, nil)
261+ if ($isInstanceOf(ba, "Int"))
262+ then ba
263+ else throw(($getType(ba) + " couldn't be cast to Int"))
264+ }
265+
266+let bb = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], f)), j("lp_staking_pools contract address is undefined"))), j("invalid lp_staking_pools contract address"))
267+
268+func bc (aA) = makeString(["%s%s", aA, "nextUser"], f)
248269
249270
250-func aU (aQ,aD,aB,aT,aV) = StringEntry(aP(aQ, aD, toBase58String(aV)), aS(aD, aB, aQ, aT))
271+func bd (aA) = makeString(["users", aA], f)
251272
252273
253-let aW = v(this, L())
254-
255-let aX = addressFromStringValue(aW)
256-
257-let aj = ah(aX)
258-
259-let aY = ak(aj)
260-
261-let aZ = ai(aj)
262-
263-let ba = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], e)), i("lp_staking_pools contract address is undefined"))), i("invalid lp_staking_pools contract address"))
264-
265-func bb (aB) = makeString(["%s%s", aB, "nextUser"], e)
274+func be (bf) = makeString(["%s%s%s", bf, "head"], f)
266275
267276
268-func bc (aB) = makeString(["users", aB], e)
277+func bg (bf) = makeString(["%s%s%s", bf, "size"], f)
269278
270279
271-func bd (be) = makeString(["%s%s%s", be, "head"], e)
280+func bh (bf,bi) = makeString(["%s%s%s%s", bf, bi, "prev"], f)
272281
273282
274-func bf (be) = makeString(["%s%s%s", be, "size"], e)
283+func bj (bf,bi) = makeString(["%s%s%s%s", bf, bi, "next"], f)
275284
276285
277-func bg (be,bh) = makeString(["%s%s%s%s", be, bh, "prev"], e)
278-
279-
280-func bi (be,bh) = makeString(["%s%s%s%s", be, bh, "next"], e)
281-
282-
283-func bj (be,bh) = {
284- let bk = getString(this, bd(be))
285- let bl = getString(this, bg(be, bh))
286- let bm = getString(this, bi(be, bh))
287- if (if ((bh == valueOrElse(bk, "")))
286+func bk (bf,bi) = {
287+ let bl = getString(this, be(bf))
288+ let bm = getString(this, bh(bf, bi))
289+ let bn = getString(this, bj(bf, bi))
290+ if (if ((bi == valueOrElse(bl, "")))
288291 then true
289- else (bl != unit))
292+ else (bm != unit))
290293 then true
291- else (bm != unit)
294+ else (bn != unit)
292295 }
293296
294297
295-func bn (be,bh) = {
296- let bk = getString(this, bd(be))
297- let bo = valueOrElse(getInteger(this, bf(be)), 0)
298- let bp = if (!(bj(be, bh)))
298+func bo (bf,bi) = {
299+ let bl = getString(this, be(bf))
300+ let bp = valueOrElse(getInteger(this, bg(bf)), 0)
301+ let bq = if (!(bk(bf, bi)))
299302 then true
300- else throw("Node exists")
301- if ((bp == bp))
302- then (([IntegerEntry(bf(be), (bo + 1))] ++ (if ((bk != unit))
303- then [StringEntry(bi(be, bh), value(bk)), StringEntry(bg(be, value(bk)), bh)]
304- else nil)) ++ [StringEntry(bd(be), bh)])
303+ else l("Node exists")
304+ if ((bq == bq))
305+ then (([IntegerEntry(bg(bf), (bp + 1))] ++ (if ((bl != unit))
306+ then [StringEntry(bj(bf, bi), value(bl)), StringEntry(bh(bf, value(bl)), bi)]
307+ else nil)) ++ [StringEntry(be(bf), bi)])
305308 else throw("Strict value is not equal to itself.")
306309 }
307310
308311
309-func bq (be,bh) = {
310- let bk = getString(this, bd(be))
311- let bo = valueOrElse(getInteger(this, bf(be)), 0)
312- let bl = getString(this, bg(be, bh))
313- let bm = getString(this, bi(be, bh))
314- ([IntegerEntry(bf(be), (bo - 1))] ++ (if (if ((bl != unit))
315- then (bm != unit)
312+func br (bf,bi) = {
313+ let bl = getString(this, be(bf))
314+ let bp = valueOrElse(getInteger(this, bg(bf)), 0)
315+ let bm = getString(this, bh(bf, bi))
316+ let bn = getString(this, bj(bf, bi))
317+ ([IntegerEntry(bg(bf), (bp - 1))] ++ (if (if ((bm != unit))
318+ then (bn != unit)
316319 else false)
317- then [StringEntry(bi(be, value(bl)), value(bm)), StringEntry(bg(be, value(bm)), value(bl)), DeleteEntry(bg(be, bh)), DeleteEntry(bi(be, bh))]
318- else if ((bm != unit))
319- then [StringEntry(bd(be), value(bm)), DeleteEntry(bi(be, bh)), DeleteEntry(bg(be, value(bm)))]
320- else if ((bl != unit))
321- then [DeleteEntry(bg(be, bh)), DeleteEntry(bi(be, value(bl)))]
322- else if ((bh == valueOrElse(bk, "")))
323- then [DeleteEntry(bd(be))]
324- else throw(((("invalid node: " + be) + ".") + bh))))
320+ then [StringEntry(bj(bf, value(bm)), value(bn)), StringEntry(bh(bf, value(bn)), value(bm)), DeleteEntry(bh(bf, bi)), DeleteEntry(bj(bf, bi))]
321+ else if ((bn != unit))
322+ then [StringEntry(be(bf), value(bn)), DeleteEntry(bj(bf, bi)), DeleteEntry(bh(bf, value(bn)))]
323+ else if ((bm != unit))
324+ then [DeleteEntry(bh(bf, bi)), DeleteEntry(bj(bf, value(bm)))]
325+ else if ((bi == valueOrElse(bl, "")))
326+ then [DeleteEntry(be(bf))]
327+ else l(((("invalid node: " + bf) + ".") + bi))))
325328 }
326329
327330
328-func br (bs,bt,bu,bv) = if (if ((bt == g))
329- then (bs > g)
331+func bs (bt,bu,bv,bw) = if (if ((bu == h))
332+ then (bt > h)
330333 else false)
331- then g
332- else if ((bs == g))
333- then bu
334- else if (if ((bt > g))
335- then (bs > g)
334+ then h
335+ else if ((bt == h))
336+ then bv
337+ else if (if ((bu > h))
338+ then (bt > h)
336339 else false)
337- then value(parseBigInt(v(this, bv)))
338- else throw("calcWxPerLpIntegralUserLast: unexpected state")
340+ then value(parseBigInt(w(this, bw)))
341+ else l("calcWxPerLpIntegralUserLast: unexpected state")
339342
340343
341-func bw (at,bx,by) = {
342- let bz = au(at)
343- let bA = toBigInt(az(bz))
344- let bB = if ((bA == g))
345- then h
346- else bA
347- let bC = getIntegerValue(aX, ad(bx))
348- let bD = C(aY, ao())
349- let bE = 1000
350- let bF = (C(aY, am()) * bE)
351- let bG = fraction(bF, bC, (f * 3))
352- let bH = aI(at)
353- let bI = aJ(at)
354- let bJ = aM(at)
355- let bK = A(this, bI, bD)
356- let bL = D(this, bH)
344+func bx (as,by,bz) = {
345+ let bA = at(as)
346+ let bB = toBigInt(ay(bA))
347+ let bC = if ((bB == h))
348+ then i
349+ else bB
350+ let bD = getIntegerValue(aW, ac(by))
351+ let bE = D(aX, an())
352+ let bF = (D(aX, al()) * b)
353+ let bG = fraction(bF, bD, (g * aZ))
354+ let bH = aH(as)
355+ let bI = aI(as)
356+ let bJ = aL(as)
357+ let bK = B(this, bI, bE)
358+ let bL = E(this, bH)
357359 let bM = 0
358360 let bN = max([(height - bK), 0])
359361 let bO = if ((bM != 0))
360362 then toBigInt(bM)
361- else fraction(toBigInt(bG), toBigInt(b), bB)
362- let bP = (bA + toBigInt(by))
363- let bQ = if ((bP == g))
364- then h
363+ else fraction(toBigInt(bG), toBigInt(c), bC)
364+ let bP = (bB + toBigInt(bz))
365+ let bQ = if ((bP == h))
366+ then i
365367 else bP
366- let bu = (bL + (bO * toBigInt(bN)))
368+ let bv = (bL + (bO * toBigInt(bN)))
367369 let bR = (toBigInt(bG) / bQ)
368370 let bS = height
369- let bT = makeString([toString(bu), toString(bN), toString(bO), toString(bA), toString(bG), toString(bF), toString(bC)], "::")
370- $Tuple3(bu, [StringEntry(bH, toString(bu)), IntegerEntry(bI, bS), StringEntry(bJ, toString(bR))], bT)
371+ let bT = makeString([toString(bv), toString(bN), toString(bO), toString(bB), toString(bG), toString(bF), toString(bD)], "::")
372+ $Tuple3(bv, [StringEntry(bH, toString(bv)), IntegerEntry(bI, bS), StringEntry(bJ, toString(bR))], bT)
371373 }
372374
373375
374-func bU (at,as,bx,by) = {
375- let bV = bw(at, bx, by)
376- let bu = bV._1
376+func bU (as,ar,by,bz) = {
377+ let bV = bx(as, by, bz)
378+ let bv = bV._1
377379 let bW = bV._2
378380 let bX = bV._3
379- let bE = 1000
380- let bY = ar(as, at)
381- let bs = az(bY)
382- let bZ = aK(at, as)
383- let ca = aL(at, as)
384- let bv = aO(at, as)
385- let cb = D(this, bZ)
386- let bt = z(this, ca)
387- let cc = br(toBigInt(bs), toBigInt(bt), bu, bv)
388- let cd = (b * bE)
389- let ce = max([(cb + fraction((bu - cc), toBigInt(bs), toBigInt(cd))), g])
390- let cf = bu
381+ let bY = aq(ar, as)
382+ let bt = ay(bY)
383+ let bZ = aJ(as, ar)
384+ let ca = aK(as, ar)
385+ let bw = aN(as, ar)
386+ let cb = E(this, bZ)
387+ let bu = A(this, ca)
388+ let cc = bs(toBigInt(bt), toBigInt(bu), bv, bw)
389+ let cd = (c * b)
390+ let ce = max([(cb + fraction((bv - cc), toBigInt(bt), toBigInt(cd))), h])
391+ let cf = bv
391392 let cg = height
392- let bT = makeString([toString(cb), toString(cc), toString(bs), bX, toString(height)], "::")
393- $Tuple3(ce, (bW ++ [StringEntry(bZ, toString(ce)), IntegerEntry(ca, cg), StringEntry(bv, toString(cf))]), bT)
393+ let bT = makeString([toString(cb), toString(cc), toString(bt), bX, toString(height)], "::")
394+ $Tuple3(ce, (bW ++ [StringEntry(bZ, toString(ce)), IntegerEntry(ca, cg), StringEntry(bw, toString(cf))]), bT)
394395 }
395396
396397
397398 func ch () = {
398- let n = getString(V())
399- if ($isInstanceOf(n, "String"))
399+ let o = getString(W())
400+ if ($isInstanceOf(o, "String"))
400401 then {
401- let F = n
402- fromBase58String(F)
402+ let G = o
403+ fromBase58String(G)
403404 }
404- else if ($isInstanceOf(n, "Unit"))
405+ else if ($isInstanceOf(o, "Unit"))
405406 then unit
406407 else throw("Match error")
407408 }
408409
409410
410411 func ci () = {
411- let n = getString(W())
412- if ($isInstanceOf(n, "String"))
412+ let o = getString(X())
413+ if ($isInstanceOf(o, "String"))
413414 then {
414- let F = n
415- fromBase58String(F)
415+ let G = o
416+ fromBase58String(G)
416417 }
417- else if ($isInstanceOf(n, "Unit"))
418+ else if ($isInstanceOf(o, "Unit"))
418419 then unit
419420 else throw("Match error")
420421 }
421422
422423
423-let cj = throw("Permission denied")
424+let cj = l("Permission denied")
424425
425426 func ck (cl) = if ((cl.caller == this))
426427 then true
428429
429430
430431 func cm (cl) = {
431- let n = ch()
432- if ($isInstanceOf(n, "ByteVector"))
432+ let o = ch()
433+ if ($isInstanceOf(o, "ByteVector"))
433434 then {
434- let cn = n
435+ let cn = o
435436 if ((cl.callerPublicKey == cn))
436437 then true
437438 else cj
438439 }
439- else if ($isInstanceOf(n, "Unit"))
440+ else if ($isInstanceOf(o, "Unit"))
440441 then if ((cl.caller == this))
441442 then true
442443 else cj
444445 }
445446
446447
447-func co (cl,aB,cp,aD,cq,aT) = {
448- let as = toString(aD)
449- let at = toBase58String(aB)
450- let bx = toString(cp)
451- let bY = ar(as, at)
452- let bz = au(at)
453- let bs = az(bY)
454- let bA = az(bz)
455- let cr = bU(at, as, bx, -(aT))._2
456- let be = bc(at)
457- let cs = if (if (bj(be, as))
458- then (aT == bs)
448+func co (cl,aA,cp,aC,aS) = {
449+ let ar = toString(aC)
450+ let as = toBase58String(aA)
451+ let by = toString(cp)
452+ let bY = aq(ar, as)
453+ let bA = at(as)
454+ let bt = ay(bY)
455+ let cq = if ((bt == 0))
456+ then invoke(aY, "onStakedVoteUpdate", [as, ar, true], nil)
457+ else unit
458+ if ((cq == cq))
459+ then {
460+ let bB = ay(bA)
461+ let cr = bU(as, ar, by, aS)
462+ let ce = cr._1
463+ let cs = cr._2
464+ let bT = cr._3
465+ let bf = bd(as)
466+ let ct = if (bk(bf, ar))
467+ then nil
468+ else bo(bf, ar)
469+ (([IntegerEntry(bY, (bt + aS)), IntegerEntry(bA, (bB + aS)), aT("stake", ar, as, aS, cl.transactionId)] ++ cs) ++ ct)
470+ }
471+ else throw("Strict value is not equal to itself.")
472+ }
473+
474+
475+func cu (cl,aA,cp,aC,cv,aS) = {
476+ let ar = toString(aC)
477+ let as = toBase58String(aA)
478+ let by = toString(cp)
479+ let bY = aq(ar, as)
480+ let bA = at(as)
481+ let bt = ay(bY)
482+ let bB = ay(bA)
483+ let cs = bU(as, ar, by, -(aS))._2
484+ let bf = bd(as)
485+ let ct = if (if (bk(bf, ar))
486+ then (aS == bt)
459487 else false)
460- then bq(be, as)
488+ then br(bf, ar)
461489 else nil
462- let ct = if ((aT == bs))
463- then invoke(aZ, "onStakedVoteUpdate", [at, as, false], nil)
490+ let cq = if ((aS == bt))
491+ then invoke(aY, "onStakedVoteUpdate", [as, ar, false], nil)
464492 else unit
465- if ((ct == ct))
493+ if ((cq == cq))
466494 then {
467- let cu = D(this, aw(at, as))
468- let ce = bU(at, as, bx, 0)._1
469- let cv = (ce - cu)
470- let cw = true
471- let cx = if ((cv > g))
472- then invoke(this, "claimWxINTERNAL", [at, as, cw], nil)
495+ let cw = E(this, av(as, ar))
496+ let ce = bU(as, ar, by, 0)._1
497+ let cx = (ce - cw)
498+ let cy = true
499+ let cz = if ((cx > h))
500+ then invoke(this, "claimWxINTERNAL", [as, ar, cy], nil)
473501 else unit
474- if ((cx == cx))
475- then if ((aT > bs))
476- then throw(((((((("passed amount=" + toString(aT)) + " is greater than available=") + toString(bs)) + ". lpAssetId=") + at) + ". stakedByUserKEY=") + bY))
477- else (([IntegerEntry(bY, (bs - aT)), IntegerEntry(bz, (bA - aT)), ScriptTransfer(cq, aT, aB), aU("unstake", as, at, aT, cl.transactionId)] ++ cr) ++ cs)
502+ if ((cz == cz))
503+ then if ((aS > bt))
504+ then l(((((((("passed amount=" + toString(aS)) + " is greater than available=") + toString(bt)) + ". lpAssetId=") + as) + ". stakedByUserKEY=") + bY))
505+ else (([IntegerEntry(bY, (bt - aS)), IntegerEntry(bA, (bB - aS)), ScriptTransfer(cv, aS, aA), aT("unstake", ar, as, aS, cl.transactionId)] ++ cs) ++ ct)
478506 else throw("Strict value is not equal to itself.")
479507 }
480508 else throw("Strict value is not equal to itself.")
482510
483511
484512 @Callable(cl)
485-func constructor (cy) = {
486- let cz = cm(cl)
487- if ((cz == cz))
488- then [StringEntry(L(), cy)]
489- else throw("Strict value is not equal to itself.")
490- }
491-
492-
493-
494-@Callable(cl)
495-func constructorV2 (cA) = {
496- let cB = [cm(cl), if ((addressFromString(cA) != unit))
497- then true
498- else "invalid voting emission contract address"]
513+func constructor (cA) = {
514+ let cB = cm(cl)
499515 if ((cB == cB))
500516 then [StringEntry(M(), cA)]
501517 else throw("Strict value is not equal to itself.")
504520
505521
506522 @Callable(cl)
507-func setManager (cC) = {
508- let cz = cm(cl)
509- if ((cz == cz))
523+func constructorV2 (cC) = {
524+ let cD = [cm(cl), if ((addressFromString(cC) != unit))
525+ then true
526+ else "invalid voting emission contract address"]
527+ if ((cD == cD))
528+ then [StringEntry(N(), cC)]
529+ else throw("Strict value is not equal to itself.")
530+ }
531+
532+
533+
534+@Callable(cl)
535+func setManager (cE) = {
536+ let cB = cm(cl)
537+ if ((cB == cB))
510538 then {
511- let cD = fromBase58String(cC)
512- if ((cD == cD))
513- then [StringEntry(W(), cC)]
539+ let cF = fromBase58String(cE)
540+ if ((cF == cF))
541+ then [StringEntry(X(), cE)]
514542 else throw("Strict value is not equal to itself.")
515543 }
516544 else throw("Strict value is not equal to itself.")
520548
521549 @Callable(cl)
522550 func confirmManager () = {
523- let cE = ci()
524- let cF = if (isDefined(cE))
551+ let cG = ci()
552+ let cH = if (isDefined(cG))
525553 then true
526- else throw("No pending manager")
527- if ((cF == cF))
554+ else l("No pending manager")
555+ if ((cH == cH))
528556 then {
529- let cG = if ((cl.callerPublicKey == value(cE)))
557+ let cI = if ((cl.callerPublicKey == value(cG)))
530558 then true
531- else throw("You are not pending manager")
532- if ((cG == cG))
533- then [StringEntry(V(), toBase58String(value(cE))), DeleteEntry(W())]
559+ else l("You are not pending manager")
560+ if ((cI == cI))
561+ then [StringEntry(W(), toBase58String(value(cG))), DeleteEntry(X())]
534562 else throw("Strict value is not equal to itself.")
535563 }
536564 else throw("Strict value is not equal to itself.")
540568
541569 @Callable(cl)
542570 func stake () = if ((size(cl.payments) != 1))
543- then throw("invalid payment - exact one payment must be attached")
571+ then l("invalid payment - exact one payment must be attached")
544572 else {
545- let cH = cl.payments[0]
546- let aB = value(cH.assetId)
547- let at = toBase58String(aB)
548- let aT = cH.amount
549- let bx = valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at))
550- let cI = toString(cl.caller)
551- let as = if ((cI == bx))
552- then toString(cl.originCaller)
553- else cI
554- let bY = ar(as, at)
555- let bz = au(at)
556- let bs = az(bY)
557- let ct = if ((bs == 0))
558- then invoke(aZ, "onStakedVoteUpdate", [at, as, true], nil)
559- else unit
560- if ((ct == ct))
561- then {
562- let bA = az(bz)
563- let cJ = bU(at, as, bx, aT)
564- let ce = cJ._1
565- let cr = cJ._2
566- let bT = cJ._3
567- let be = bc(at)
568- let cs = if (bj(be, as))
569- then nil
570- else bn(be, as)
571- (([IntegerEntry(bY, (bs + aT)), IntegerEntry(bz, (bA + aT)), aU("stake", as, at, aT, cl.transactionId)] ++ cr) ++ cs)
572- }
573- else throw("Strict value is not equal to itself.")
573+ let cJ = cl.payments[0]
574+ let aA = value(cJ.assetId)
575+ let as = toBase58String(aA)
576+ let aS = cJ.amount
577+ let by = valueOrErrorMessage(getString(aW, Y(as)), j(("unsupported lp asset " + as)))
578+ let cp = addressFromStringValue(by)
579+ let aC = if ((cl.caller == cp))
580+ then cl.originCaller
581+ else cl.caller
582+ co(cl, aA, cp, aC, aS)
574583 }
575584
576585
577586
578587 @Callable(cl)
579-func unstake (at,aT) = {
580- let aB = fromBase58String(at)
581- let bx = valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at))
582- let cp = addressFromStringValue(bx)
583- let cK = valueOrElse(getString(cp, Y()), bx)
584- let cI = toString(cl.caller)
585- let aD = if (if ((cI == bx))
586- then true
587- else (cI == cK))
588+func stakeFor (ar) = if ((size(cl.payments) != 1))
589+ then l("invalid payment - exact one payment must be attached")
590+ else {
591+ let cJ = cl.payments[0]
592+ let aA = value(cJ.assetId)
593+ let as = toBase58String(aA)
594+ let aS = cJ.amount
595+ let by = valueOrErrorMessage(getString(aW, Y(as)), j(("unsupported lp asset " + as)))
596+ let cp = addressFromStringValue(by)
597+ let aC = valueOrErrorMessage(addressFromString(ar), j("invalid user address"))
598+ co(cl, aA, cp, aC, aS)
599+ }
600+
601+
602+
603+@Callable(cl)
604+func unstake (as,aS) = {
605+ let aA = fromBase58String(as)
606+ let by = valueOrErrorMessage(getString(aW, Y(as)), j(("unsupported lp asset " + as)))
607+ let cp = addressFromStringValue(by)
608+ let cK = toString(cl.caller)
609+ let aC = if ((cK == by))
588610 then cl.originCaller
589611 else cl.caller
590- let cq = cl.caller
591- co(cl, aB, cp, aD, cq, aT)
612+ let cv = cl.caller
613+ cu(cl, aA, cp, aC, cv, aS)
592614 }
593615
594616
595617
596618 @Callable(cl)
597-func unstakeINTERNAL (aB,aT,aD,cq) = {
598- let at = toBase58String(aB)
599- let cp = addressFromStringValue(valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at)))
600- let cz = if ((cl.caller == cp))
619+func unstakeINTERNAL (aA,aS,aC,cv) = {
620+ let as = toBase58String(aA)
621+ let cp = addressFromStringValue(valueOrErrorMessage(getString(aW, Y(as)), j(("unsupported lp asset " + as))))
622+ let cB = if ((cl.caller == cp))
601623 then true
602624 else cj
603- if ((cz == cz))
604- then co(cl, aB, cp, Address(aD), Address(cq), aT)
625+ if ((cB == cB))
626+ then cu(cl, aA, cp, Address(aC), Address(cv), aS)
605627 else throw("Strict value is not equal to itself.")
606628 }
607629
608630
609631
610632 @Callable(cl)
611-func claimWx (at) = {
612- let as = toString(cl.caller)
613- let cw = true
614- let cL = invoke(this, "claimWxINTERNAL", [at, as, cw], nil)
633+func claimWx (as) = {
634+ let ar = toString(cl.caller)
635+ let cy = true
636+ let cL = invoke(this, "claimWxINTERNAL", [as, ar, cy], nil)
615637 $Tuple2(nil, cL)
616638 }
617639
618640
619641
620642 @Callable(cl)
621-func claimWxDoNotThrow (at) = {
622- let as = toString(cl.caller)
623- let cw = false
624- let cL = invoke(this, "claimWxINTERNAL", [at, as, cw], nil)
643+func claimWxDoNotThrow (as) = {
644+ let ar = toString(cl.caller)
645+ let cy = false
646+ let cL = invoke(this, "claimWxINTERNAL", [as, ar, cy], nil)
625647 $Tuple2(nil, cL)
626648 }
627649
628650
629651
630652 @Callable(cl)
631-func claimWxINTERNAL (at,as,cw) = {
632- let cz = ck(cl)
633- if ((cz == cz))
653+func claimWxINTERNAL (as,ar,cy) = {
654+ let cB = ck(cl)
655+ if ((cB == cB))
634656 then {
635- let aD = valueOrErrorMessage(addressFromString(as), "claimWxINTERNAL: invalid user address")
636- let bx = y(aX, ac(at))
637- let cM = av(at, as)
638- let cN = ay(at)
639- let cO = aw(at, as)
640- let cP = ax(at, as)
641- let cQ = D(this, cM)
642- let cu = D(this, cO)
643- let cR = D(this, cP)
644- let cS = D(this, cN)
645- let cT = bU(at, as, bx, 0)
657+ let aC = valueOrErrorMessage(addressFromString(ar), j("claimWxINTERNAL: invalid user address"))
658+ let by = z(aW, ab(as))
659+ let cM = au(as, ar)
660+ let cN = ax(as)
661+ let cO = av(as, ar)
662+ let cP = aw(as, ar)
663+ let cQ = E(this, cM)
664+ let cw = E(this, cO)
665+ let cR = E(this, cP)
666+ let cS = E(this, cN)
667+ let cT = bU(as, ar, by, 0)
646668 let ce = cT._1
647- let cr = cT._2
669+ let cs = cT._2
648670 let bT = cT._3
649- let cv = max([(ce - cu), g])
650- if ((g >= cv))
651- then if (cw)
652- then throw("nothing to claim")
671+ let cx = max([(ce - cw), h])
672+ if ((h >= cx))
673+ then if (cy)
674+ then l("nothing to claim")
653675 else $Tuple2(nil, 0)
654676 else {
655- let cU = max([p(l(invoke(aZ, "claimWxBoost", [at, as], nil))[0]), 0])
656- let cV = cv
657- let cW = min([(cV * toBigInt(2)), toBigInt(cU)])
677+ let cU = max([q(m(invoke(aY, "claimWxBoost", [as, ar], nil))[0]), 0])
678+ let cV = cx
679+ let cW = min([(cV * toBigInt((aZ - 1))), toBigInt(cU)])
658680 let cX = (cV + cW)
659- let cY = t(l(invoke(aY, "emit", [toInt(cV)], nil))[0])
660- let cZ = l(invoke(aY, "emit", [toInt(cW)], nil))
681+ let cY = u(m(invoke(aX, "emit", [toInt(cV)], nil))[0])
682+ let cZ = m(invoke(aX, "emit", [toInt(cW)], nil))
661683 if ((cZ == cZ))
662684 then {
663685 let da = ((cQ + cV) + cW)
664- let db = (cu + cV)
686+ let db = (cw + cV)
665687 let dc = (cR + cW)
666- let dd = (cS + cv)
667- $Tuple2([StringEntry(cM, toString(da)), StringEntry(cO, toString(db)), StringEntry(cP, toString(dc)), StringEntry(cN, toString(dd)), ScriptTransfer(aD, toInt(cV), cY), ScriptTransfer(aD, toInt(cW), cY), aU("claim", as, at, toInt(cv), cl.transactionId)], toInt(cX))
688+ let dd = (cS + cx)
689+ $Tuple2([StringEntry(cM, toString(da)), StringEntry(cO, toString(db)), StringEntry(cP, toString(dc)), StringEntry(cN, toString(dd)), ScriptTransfer(aC, toInt(cV), cY), ScriptTransfer(aC, toInt(cW), cY), aT("claim", ar, as, toInt(cx), cl.transactionId)], toInt(cX))
668690 }
669691 else throw("Strict value is not equal to itself.")
670692 }
675697
676698
677699 @Callable(cl)
678-func claimWxBulkInternalREADONLY (de,df,as,dg) = if ((de == size(df)))
700+func claimWxBulkInternalREADONLY (de,df,ar,dg) = if ((de == size(df)))
679701 then $Tuple2(nil, dg)
680702 else {
681- let aB = df[de]
703+ let aA = df[de]
682704 let dh = split({
683- let di = invoke(this, "claimWxREADONLY", [aB, as], nil)
684- if ($isInstanceOf(di, "String"))
685- then di
686- else throw(($getType(di) + " couldn't be cast to String"))
687- }, e)
688- let dj = dh[3]
689- let dk = dh[4]
690- let dl = (dg :+ makeString(["%d%d", dj, dk], e))
705+ let ba = invoke(this, "claimWxREADONLY", [aA, ar], nil)
706+ if ($isInstanceOf(ba, "String"))
707+ then ba
708+ else throw(($getType(ba) + " couldn't be cast to String"))
709+ }, f)
710+ let di = dh[3]
711+ let dj = dh[4]
712+ let dk = {
713+ let ba = invoke(aY, "getUserVoteFinalizedREADONLY", [aA, ar], nil)
714+ if ($isInstanceOf(ba, "Int"))
715+ then ba
716+ else throw(($getType(ba) + " couldn't be cast to Int"))
717+ }
718+ let dl = (dg :+ makeString(["%d%d%d", di, dj, toString(dk)], f))
691719 let dm = {
692- let di = invoke(this, "claimWxBulkInternalREADONLY", [(de + 1), df, as, dl], nil)
693- if ($isInstanceOf(di, "List[Any]"))
694- then di
695- else throw(($getType(di) + " couldn't be cast to List[Any]"))
720+ let ba = invoke(this, "claimWxBulkInternalREADONLY", [(de + 1), df, ar, dl], nil)
721+ if ($isInstanceOf(ba, "List[Any]"))
722+ then ba
723+ else throw(($getType(ba) + " couldn't be cast to List[Any]"))
696724 }
697725 if ((dm == dm))
698726 then $Tuple2(nil, dm)
702730
703731
704732 @Callable(cl)
705-func claimWxBulkREADONLY (df,as) = {
706- let dl = invoke(this, "claimWxBulkInternalREADONLY", [0, df, as, nil], nil)
733+func claimWxBulkREADONLY (df,ar) = {
734+ let dl = invoke(this, "claimWxBulkInternalREADONLY", [0, df, ar, nil], nil)
707735 $Tuple2(nil, dl)
708736 }
709737
710738
711739
712740 @Callable(cl)
713-func claimWxREADONLY (at,as) = {
714- let bY = ar(as, at)
715- let bz = au(at)
716- let cM = av(at, as)
717- let cO = aw(at, as)
718- let bs = az(bY)
719- let bA = az(bz)
720- let cQ = D(this, cM)
721- let cu = D(this, cO)
722- let bx = y(aX, ac(at))
723- let bC = getIntegerValue(aX, ad(bx))
724- let dn = C(aY, am())
725- let bD = C(aY, ao())
726- let do = if ((bD > height))
741+func claimWxREADONLY (as,ar) = {
742+ let bY = aq(ar, as)
743+ let bA = at(as)
744+ let cM = au(as, ar)
745+ let cO = av(as, ar)
746+ let bt = ay(bY)
747+ let bB = ay(bA)
748+ let cQ = E(this, cM)
749+ let cw = E(this, cO)
750+ let by = z(aW, ab(as))
751+ let bD = getIntegerValue(aW, ac(by))
752+ let dn = D(aX, al())
753+ let bE = D(aX, an())
754+ let do = if ((bE > height))
727755 then 0
728- else (height - bD)
729- let dp = fraction((dn * do), bC, f)
730- let dq = fraction(dp, bs, bA)
731- let dr = bU(at, as, bx, 0)
756+ else (height - bE)
757+ let dp = fraction((dn * do), bD, g)
758+ let dq = fraction(dp, bt, bB)
759+ let dr = bU(as, ar, by, 0)
732760 let ce = dr._1
733- let cr = dr._2
761+ let cs = dr._2
734762 let bT = dr._3
735- let cv = max([(ce - cu), g])
736- let ds = l(invoke(aZ, "claimWxBoostREADONLY", [at, as], nil))
737- let cU = max([p(ds[0]), 0])
738- let dt = r(ds[1])
739- let cV = cv
740- let cW = min([(cV * toBigInt(2)), toBigInt(cU)])
763+ let cx = max([(ce - cw), h])
764+ let ds = m(invoke(aY, "claimWxBoostREADONLY", [as, ar], nil))
765+ let cU = max([q(ds[0]), 0])
766+ let dt = s(ds[1])
767+ let cV = cx
768+ let cW = min([(cV * toBigInt((aZ - 1))), toBigInt(cU)])
741769 let cX = (cV + cW)
742- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", at, as, toString(cX), toString(cQ), toString(cV), toString(cW), "soon"], e))
770+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", as, ar, toString(cX), toString(cQ), toString(cV), toString(cW), "soon"], f))
743771 }
744772
745773
746774
747775 @Callable(cl)
748-func stakedByUserREADONLY (at,as) = {
749- let bs = valueOrElse(getInteger(ar(as, at)), 0)
750- $Tuple2(nil, bs)
776+func stakedByUserREADONLY (as,ar) = {
777+ let bt = valueOrElse(getInteger(aq(ar, as)), 0)
778+ $Tuple2(nil, bt)
751779 }
752780
753781
754782
755783 @Callable(cl)
756-func usersListTraversal (aB) = {
757- let cz = if ((toBase58String(cl.caller.bytes) == valueOrElse(getString(this, M()), "")))
784+func stakedTotalREADONLY (as) = {
785+ let bB = valueOrElse(getInteger(at(as)), 0)
786+ $Tuple2(nil, bB)
787+ }
788+
789+
790+
791+@Callable(cl)
792+func usersListTraversal (aA) = {
793+ let cB = if ((toBase58String(cl.caller.bytes) == valueOrElse(getString(this, N()), "")))
758794 then true
759795 else cm(cl)
760- if ((cz == cz))
796+ if ((cB == cB))
761797 then {
762- let be = bc(aB)
763- let du = getString(bb(aB))
764- let bk = getString(bd(be))
765- let n = du
766- if ($isInstanceOf(n, "Unit"))
798+ let bf = bd(aA)
799+ let du = getString(bc(aA))
800+ let bl = getString(be(bf))
801+ let o = du
802+ if ($isInstanceOf(o, "Unit"))
767803 then {
768- let dv = bk
804+ let dv = bl
769805 if ($isInstanceOf(dv, "Unit"))
770806 then $Tuple2(nil, false)
771807 else if ($isInstanceOf(dv, "String"))
772808 then {
773809 let dw = dv
774- $Tuple2([StringEntry(bb(aB), dw)], true)
810+ $Tuple2([StringEntry(bc(aA), dw)], true)
775811 }
776812 else throw("Match error")
777813 }
778- else if ($isInstanceOf(n, "String"))
814+ else if ($isInstanceOf(o, "String"))
779815 then {
780- let aD = n
781- let cu = D(this, aw(aB, aD))
782- let cp = y(aX, ac(aB))
783- let ce = bU(aB, aD, cp, 0)._1
784- let cv = (ce - cu)
785- let cw = true
786- let cx = if ((cv > g))
787- then invoke(this, "claimWxINTERNAL", [aB, aD, cw], nil)
816+ let aC = o
817+ let cw = E(this, av(aA, aC))
818+ let cp = z(aW, ab(aA))
819+ let ce = bU(aA, aC, cp, 0)._1
820+ let cx = (ce - cw)
821+ let cy = true
822+ let cz = if ((cx > h))
823+ then invoke(this, "claimWxINTERNAL", [aA, aC, cy], nil)
788824 else unit
789- if ((cx == cx))
825+ if ((cz == cz))
790826 then {
791- let dx = getString(bi(be, aD))
827+ let dx = getString(bj(bf, aC))
792828 let dv = dx
793829 if ($isInstanceOf(dv, "Unit"))
794- then $Tuple2([DeleteEntry(bb(aB))], false)
830+ then $Tuple2([DeleteEntry(bc(aA))], false)
795831 else if ($isInstanceOf(dv, "String"))
796832 then {
797833 let dy = dv
798- $Tuple2([StringEntry(bb(aB), dy)], true)
834+ $Tuple2([StringEntry(bc(aA), dy)], true)
799835 }
800836 else throw("Match error")
801837 }
809845
810846
811847 @Callable(cl)
812-func onModifyWeight (at,bx) = if ((cl.caller != aX))
813- then throw("permissions denied")
848+func onModifyWeight (as,by) = if ((cl.caller != aW))
849+ then l("permissions denied")
814850 else {
815- let dz = bw(at, bx, 0)
816- let bu = dz._1
851+ let dz = bx(as, by, 0)
852+ let bv = dz._1
817853 let bW = dz._2
818854 let bX = dz._3
819855 bW
823859 @Verifier(dA)
824860 func dB () = {
825861 let dC = {
826- let n = ch()
827- if ($isInstanceOf(n, "ByteVector"))
862+ let o = ch()
863+ if ($isInstanceOf(o, "ByteVector"))
828864 then {
829- let cn = n
865+ let cn = o
830866 cn
831867 }
832- else if ($isInstanceOf(n, "Unit"))
868+ else if ($isInstanceOf(o, "Unit"))
833869 then dA.senderPublicKey
834870 else throw("Match error")
835871 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
6-let b = 100000000
6+let b = 1000
77
8-let c = 18
8+let c = 100000000
99
10-let d = toBigInt(1000000000000000000)
10+let d = 18
1111
12-let e = "__"
12+let e = toBigInt(1000000000000000000)
1313
14-let f = b
14+let f = "__"
1515
16-let g = toBigInt(0)
16+let g = c
1717
18-let h = toBigInt(1)
18+let h = toBigInt(0)
1919
20-func i (j) = makeString(["staking.ride:", toString(this), j], " ")
20+let i = toBigInt(1)
21+
22+func j (k) = makeString(["staking.ride:", toString(this), k], " ")
2123
2224
23-func k (j) = throw(i(j))
25+func l (k) = throw(j(k))
2426
2527
26-func l (m) = {
27- let n = m
28- if ($isInstanceOf(n, "List[Any]"))
28+func m (n) = {
29+ let o = n
30+ if ($isInstanceOf(o, "List[Any]"))
2931 then {
30- let o = n
31- o
32+ let p = o
33+ p
3234 }
33- else throw("fail to cast into List[Any]")
35+ else l("fail to cast into List[Any]")
3436 }
3537
3638
37-func p (m) = {
38- let n = m
39- if ($isInstanceOf(n, "Int"))
39+func q (n) = {
40+ let o = n
41+ if ($isInstanceOf(o, "Int"))
4042 then {
41- let q = n
42- q
43+ let r = o
44+ r
4345 }
44- else throw("fail to cast into Int")
46+ else l("fail to cast into Int")
4547 }
4648
4749
48-func r (m) = {
49- let n = m
50- if ($isInstanceOf(n, "String"))
50+func s (n) = {
51+ let o = n
52+ if ($isInstanceOf(o, "String"))
5153 then {
52- let s = n
53- s
54+ let t = o
55+ t
5456 }
55- else throw("fail to cast into Int")
57+ else l("fail to cast into Int")
5658 }
5759
5860
59-func t (m) = {
60- let n = m
61- if ($isInstanceOf(n, "ByteVector"))
61+func u (n) = {
62+ let o = n
63+ if ($isInstanceOf(o, "ByteVector"))
6264 then {
63- let u = n
64- u
65+ let v = o
66+ v
6567 }
66- else throw("fail to cast into Int")
68+ else l("fail to cast into Int")
6769 }
6870
6971
70-func v (w,x) = valueOrErrorMessage(getString(w, x), (("mandatory this." + x) + " is not defined"))
72+func w (x,y) = valueOrErrorMessage(getString(x, y), j((("mandatory this." + y) + " is not defined")))
7173
7274
73-func y (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined"))
75+func z (x,y) = valueOrErrorMessage(getString(x, y), j((((("mandatory " + toString(x)) + ".") + y) + " is not defined")))
7476
7577
76-func z (w,x) = valueOrElse(getInteger(w, x), 0)
78+func A (x,y) = valueOrElse(getInteger(x, y), 0)
7779
7880
79-func A (w,x,B) = valueOrElse(getInteger(w, x), B)
81+func B (x,y,C) = valueOrElse(getInteger(x, y), C)
8082
8183
82-func C (w,x) = valueOrErrorMessage(getInteger(w, x), (("mandatory this." + x) + " is not defined"))
84+func D (x,y) = valueOrErrorMessage(getInteger(x, y), j((("mandatory this." + y) + " is not defined")))
8385
8486
85-func D (w,x) = value(parseBigInt(valueOrElse(getString(w, x), "0")))
87+func E (x,y) = value(parseBigInt(valueOrElse(getString(x, y), "0")))
8688
8789
88-func E (w,x,B) = {
89- let n = getString(w, x)
90- if ($isInstanceOf(n, "String"))
90+func F (x,y,C) = {
91+ let o = getString(x, y)
92+ if ($isInstanceOf(o, "String"))
9193 then {
92- let F = n
93- value(parseBigInt(F))
94+ let G = o
95+ value(parseBigInt(G))
9496 }
95- else if ($isInstanceOf(n, "Unit"))
96- then B
97+ else if ($isInstanceOf(o, "Unit"))
98+ then C
9799 else throw("Match error")
98100 }
99101
100102
101-func G (H,I) = fraction(toBigInt(H), d, toBigInt(I))
103+func H (I,J) = fraction(toBigInt(I), e, toBigInt(J))
102104
103105
104-func J (m,K) = toInt(fraction(m, toBigInt(K), d))
106+func K (n,L) = toInt(fraction(n, toBigInt(L), e))
105107
106108
107-func L () = "%s%s__config__factoryAddress"
109+func M () = "%s%s__config__factoryAddress"
108110
109111
110-func M () = "%s__votingEmissionContract"
112+func N () = "%s__votingEmissionContract"
111113
112114
113-let N = 1
115+let O = 1
114116
115-let O = 2
117+let P = 2
116118
117-let P = 3
119+let Q = 3
118120
119-let Q = 4
121+let R = 4
120122
121-let R = 5
123+let S = 5
122124
123-let S = 6
125+let T = 6
124126
125-let T = 7
127+let U = 7
126128
127-func U () = "%s__factoryConfig"
129+func V () = "%s__factoryConfig"
128130
129131
130-func V () = "%s__managerPublicKey"
132+func W () = "%s__managerPublicKey"
131133
132134
133-func W () = "%s__pendingManagerPublicKey"
135+func X () = "%s__pendingManagerPublicKey"
134136
135137
136-func X () = "%s__stablePoolAddonAddr"
138+func Y (Z) = makeString(["%s%s%s", Z, "mappings__lpAsset2PoolContract"], f)
137139
138140
139-func Y () = "%s__addonAddr"
141+func aa () = "%s__lpTokensList"
140142
141143
142-func Z (aa) = makeString(["%s%s%s", aa, "mappings__lpAsset2PoolContract"], e)
144+func ab (Z) = makeString(["%s%s%s", Z, "mappings__lpAsset2PoolContract"], f)
143145
144146
145-func ab () = "%s__lpTokensList"
147+func ac (ad) = makeString(["%s%s", "poolWeight", ad], f)
146148
147149
148-func ac (aa) = makeString(["%s%s%s", aa, "mappings__lpAsset2PoolContract"], e)
150+func ae (af) = split(valueOrElse(getString(af, aa()), ""), f)
149151
150152
151-func ad (ae) = makeString(["%s%s", "poolWeight", ae], e)
153+func ag (af) = split(z(af, V()), f)
152154
153155
154-func af (ag) = split(valueOrElse(getString(ag, ab()), ""), e)
156+func ah (ai) = addressFromStringValue(ai[P])
155157
156158
157-func ah (ag) = split(y(ag, U()), e)
159+func aj (ai) = addressFromStringValue(ai[S])
158160
159161
160-func ai (aj) = addressFromStringValue(aj[O])
162+func ak (ai) = addressFromStringValue(ai[O])
161163
162164
163-func ak (aj) = addressFromStringValue(aj[R])
165+func al () = "%s%s__ratePerBlock__current"
164166
165167
166-func al (aj) = addressFromStringValue(aj[N])
168+func am () = "%s%s__ratePerBlockMax__current"
167169
168170
169-func am () = "%s%s__ratePerBlock__current"
171+func an () = "%s%s__emission__startBlock"
170172
171173
172-func an () = "%s%s__ratePerBlockMax__current"
174+func ao () = "%s%s__emission__duration"
173175
174176
175-func ao () = "%s%s__emission__startBlock"
177+func ap () = "%s%s__emission__endBlock"
176178
177179
178-func ap () = "%s%s__emission__duration"
180+func aq (ar,as) = makeString(["%s%s%s__staked", ar, as], f)
179181
180182
181-func aq () = "%s%s__emission__endBlock"
183+func at (as) = ("%s%s%s__staked__total__" + as)
182184
183185
184-func ar (as,at) = makeString(["%s%s%s__staked", as, at], e)
186+func au (as,ar) = makeString(["%s%s%s__claimed", ar, as], f)
185187
186188
187-func au (at) = ("%s%s%s__staked__total__" + at)
189+func av (as,ar) = makeString(["%s%s%s__claimedMinReward", ar, as], f)
188190
189191
190-func av (at,as) = makeString(["%s%s%s__claimed", as, at], e)
192+func aw (as,ar) = makeString(["%s%s%s__claimedBoostReward", ar, as], f)
191193
192194
193-func aw (at,as) = makeString(["%s%s%s__claimedMinReward", as, at], e)
195+func ax (as) = makeString(["%s%s%s__claimed__total", as], f)
194196
195197
196-func ax (at,as) = makeString(["%s%s%s__claimedBoostReward", as, at], e)
198+func ay (y) = valueOrElse(getInteger(this, y), 0)
197199
198200
199-func ay (at) = makeString(["%s%s%s__claimed__total", at], e)
201+func az (aA) = makeString(["%s%s%s", aA, "total", "bal"], f)
200202
201203
202-func az (x) = valueOrElse(getInteger(this, x), 0)
204+func aB (aA,aC) = makeString(["%s%s%s", aA, aC, "bal"], f)
203205
204206
205-func aA (aB) = makeString(["%s%s%s", aB, "total", "bal"], e)
207+func aD (aA) = makeString(["%s%s%s", aA, "total", "balINT"], f)
206208
207209
208-func aC (aB,aD) = makeString(["%s%s%s", aB, aD, "bal"], e)
210+func aE (aA,aC) = makeString(["%s%s%s", aA, aC, "balINT"], f)
209211
210212
211-func aE (aB) = makeString(["%s%s%s", aB, "total", "balINT"], e)
213+func aF (aA) = makeString(["%s%s%s", aA, "total", "lastUpd"], f)
212214
213215
214-func aF (aB,aD) = makeString(["%s%s%s", aB, aD, "balINT"], e)
216+func aG (aA,aC) = makeString(["%s%s%s", aA, aC, "lastUpd"], f)
215217
216218
217-func aG (aB) = makeString(["%s%s%s", aB, "total", "lastUpd"], e)
219+func aH (aA) = makeString(["%s%s%s%s", aA, "common", "lpInt"], f)
218220
219221
220-func aH (aB,aD) = makeString(["%s%s%s", aB, aD, "lastUpd"], e)
222+func aI (aA) = makeString(["%s%s%s%s", aA, "common", "lpIntH"], f)
221223
222224
223-func aI (aB) = makeString(["%s%s%s%s", aB, "common", "lpInt"], e)
225+func aJ (aA,aC) = makeString(["%s%s%s%s", aA, aC, "lpInt"], f)
224226
225227
226-func aJ (aB) = makeString(["%s%s%s%s", aB, "common", "lpIntH"], e)
228+func aK (aA,aC) = makeString(["%s%s%s%s", aA, aC, "lpIntH"], f)
227229
228230
229-func aK (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpInt"], e)
231+func aL (aA) = makeString(["%s", aA, "wxPerLp"], f)
230232
231233
232-func aL (aB,aD) = makeString(["%s%s%s%s", aB, aD, "lpIntH"], e)
234+func aM (aA) = makeString(["%s", aA, "wxPerLpX18"], f)
233235
234236
235-func aM (aB) = makeString(["%s", aB, "wxPerLp"], e)
237+func aN (aA,aC) = makeString(["%s%s%s%s", aA, aC, "uIntL"], f)
236238
237239
238-func aN (aB) = makeString(["%s", aB, "wxPerLpX18"], e)
240+func aO (aP,aC,aQ) = makeString(["%s%s%s%s__history", aP, aC, aQ], f)
239241
240242
241-func aO (aB,aD) = makeString(["%s%s%s%s", aB, aD, "uIntL"], e)
243+func aR (aC,aA,aP,aS) = makeString(["%s%s%s%d%d%d", aC, aA, aP, toString(height), toString(lastBlock.timestamp), toString(aS)], f)
242244
243245
244-func aP (aQ,aD,aR) = makeString(["%s%s%s%s__history", aQ, aD, aR], e)
246+func aT (aP,aC,aA,aS,aU) = StringEntry(aO(aP, aC, toBase58String(aU)), aR(aC, aA, aP, aS))
245247
246248
247-func aS (aD,aB,aQ,aT) = makeString(["%s%s%s%d%d%d", aD, aB, aQ, toString(height), toString(lastBlock.timestamp), toString(aT)], e)
249+let aV = w(this, M())
250+
251+let aW = addressFromStringValue(aV)
252+
253+let ai = ag(aW)
254+
255+let aX = aj(ai)
256+
257+let aY = ah(ai)
258+
259+let aZ = {
260+ let ba = invoke(aX, "getBoostCoeffREADONLY", nil, nil)
261+ if ($isInstanceOf(ba, "Int"))
262+ then ba
263+ else throw(($getType(ba) + " couldn't be cast to Int"))
264+ }
265+
266+let bb = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], f)), j("lp_staking_pools contract address is undefined"))), j("invalid lp_staking_pools contract address"))
267+
268+func bc (aA) = makeString(["%s%s", aA, "nextUser"], f)
248269
249270
250-func aU (aQ,aD,aB,aT,aV) = StringEntry(aP(aQ, aD, toBase58String(aV)), aS(aD, aB, aQ, aT))
271+func bd (aA) = makeString(["users", aA], f)
251272
252273
253-let aW = v(this, L())
254-
255-let aX = addressFromStringValue(aW)
256-
257-let aj = ah(aX)
258-
259-let aY = ak(aj)
260-
261-let aZ = ai(aj)
262-
263-let ba = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], e)), i("lp_staking_pools contract address is undefined"))), i("invalid lp_staking_pools contract address"))
264-
265-func bb (aB) = makeString(["%s%s", aB, "nextUser"], e)
274+func be (bf) = makeString(["%s%s%s", bf, "head"], f)
266275
267276
268-func bc (aB) = makeString(["users", aB], e)
277+func bg (bf) = makeString(["%s%s%s", bf, "size"], f)
269278
270279
271-func bd (be) = makeString(["%s%s%s", be, "head"], e)
280+func bh (bf,bi) = makeString(["%s%s%s%s", bf, bi, "prev"], f)
272281
273282
274-func bf (be) = makeString(["%s%s%s", be, "size"], e)
283+func bj (bf,bi) = makeString(["%s%s%s%s", bf, bi, "next"], f)
275284
276285
277-func bg (be,bh) = makeString(["%s%s%s%s", be, bh, "prev"], e)
278-
279-
280-func bi (be,bh) = makeString(["%s%s%s%s", be, bh, "next"], e)
281-
282-
283-func bj (be,bh) = {
284- let bk = getString(this, bd(be))
285- let bl = getString(this, bg(be, bh))
286- let bm = getString(this, bi(be, bh))
287- if (if ((bh == valueOrElse(bk, "")))
286+func bk (bf,bi) = {
287+ let bl = getString(this, be(bf))
288+ let bm = getString(this, bh(bf, bi))
289+ let bn = getString(this, bj(bf, bi))
290+ if (if ((bi == valueOrElse(bl, "")))
288291 then true
289- else (bl != unit))
292+ else (bm != unit))
290293 then true
291- else (bm != unit)
294+ else (bn != unit)
292295 }
293296
294297
295-func bn (be,bh) = {
296- let bk = getString(this, bd(be))
297- let bo = valueOrElse(getInteger(this, bf(be)), 0)
298- let bp = if (!(bj(be, bh)))
298+func bo (bf,bi) = {
299+ let bl = getString(this, be(bf))
300+ let bp = valueOrElse(getInteger(this, bg(bf)), 0)
301+ let bq = if (!(bk(bf, bi)))
299302 then true
300- else throw("Node exists")
301- if ((bp == bp))
302- then (([IntegerEntry(bf(be), (bo + 1))] ++ (if ((bk != unit))
303- then [StringEntry(bi(be, bh), value(bk)), StringEntry(bg(be, value(bk)), bh)]
304- else nil)) ++ [StringEntry(bd(be), bh)])
303+ else l("Node exists")
304+ if ((bq == bq))
305+ then (([IntegerEntry(bg(bf), (bp + 1))] ++ (if ((bl != unit))
306+ then [StringEntry(bj(bf, bi), value(bl)), StringEntry(bh(bf, value(bl)), bi)]
307+ else nil)) ++ [StringEntry(be(bf), bi)])
305308 else throw("Strict value is not equal to itself.")
306309 }
307310
308311
309-func bq (be,bh) = {
310- let bk = getString(this, bd(be))
311- let bo = valueOrElse(getInteger(this, bf(be)), 0)
312- let bl = getString(this, bg(be, bh))
313- let bm = getString(this, bi(be, bh))
314- ([IntegerEntry(bf(be), (bo - 1))] ++ (if (if ((bl != unit))
315- then (bm != unit)
312+func br (bf,bi) = {
313+ let bl = getString(this, be(bf))
314+ let bp = valueOrElse(getInteger(this, bg(bf)), 0)
315+ let bm = getString(this, bh(bf, bi))
316+ let bn = getString(this, bj(bf, bi))
317+ ([IntegerEntry(bg(bf), (bp - 1))] ++ (if (if ((bm != unit))
318+ then (bn != unit)
316319 else false)
317- then [StringEntry(bi(be, value(bl)), value(bm)), StringEntry(bg(be, value(bm)), value(bl)), DeleteEntry(bg(be, bh)), DeleteEntry(bi(be, bh))]
318- else if ((bm != unit))
319- then [StringEntry(bd(be), value(bm)), DeleteEntry(bi(be, bh)), DeleteEntry(bg(be, value(bm)))]
320- else if ((bl != unit))
321- then [DeleteEntry(bg(be, bh)), DeleteEntry(bi(be, value(bl)))]
322- else if ((bh == valueOrElse(bk, "")))
323- then [DeleteEntry(bd(be))]
324- else throw(((("invalid node: " + be) + ".") + bh))))
320+ then [StringEntry(bj(bf, value(bm)), value(bn)), StringEntry(bh(bf, value(bn)), value(bm)), DeleteEntry(bh(bf, bi)), DeleteEntry(bj(bf, bi))]
321+ else if ((bn != unit))
322+ then [StringEntry(be(bf), value(bn)), DeleteEntry(bj(bf, bi)), DeleteEntry(bh(bf, value(bn)))]
323+ else if ((bm != unit))
324+ then [DeleteEntry(bh(bf, bi)), DeleteEntry(bj(bf, value(bm)))]
325+ else if ((bi == valueOrElse(bl, "")))
326+ then [DeleteEntry(be(bf))]
327+ else l(((("invalid node: " + bf) + ".") + bi))))
325328 }
326329
327330
328-func br (bs,bt,bu,bv) = if (if ((bt == g))
329- then (bs > g)
331+func bs (bt,bu,bv,bw) = if (if ((bu == h))
332+ then (bt > h)
330333 else false)
331- then g
332- else if ((bs == g))
333- then bu
334- else if (if ((bt > g))
335- then (bs > g)
334+ then h
335+ else if ((bt == h))
336+ then bv
337+ else if (if ((bu > h))
338+ then (bt > h)
336339 else false)
337- then value(parseBigInt(v(this, bv)))
338- else throw("calcWxPerLpIntegralUserLast: unexpected state")
340+ then value(parseBigInt(w(this, bw)))
341+ else l("calcWxPerLpIntegralUserLast: unexpected state")
339342
340343
341-func bw (at,bx,by) = {
342- let bz = au(at)
343- let bA = toBigInt(az(bz))
344- let bB = if ((bA == g))
345- then h
346- else bA
347- let bC = getIntegerValue(aX, ad(bx))
348- let bD = C(aY, ao())
349- let bE = 1000
350- let bF = (C(aY, am()) * bE)
351- let bG = fraction(bF, bC, (f * 3))
352- let bH = aI(at)
353- let bI = aJ(at)
354- let bJ = aM(at)
355- let bK = A(this, bI, bD)
356- let bL = D(this, bH)
344+func bx (as,by,bz) = {
345+ let bA = at(as)
346+ let bB = toBigInt(ay(bA))
347+ let bC = if ((bB == h))
348+ then i
349+ else bB
350+ let bD = getIntegerValue(aW, ac(by))
351+ let bE = D(aX, an())
352+ let bF = (D(aX, al()) * b)
353+ let bG = fraction(bF, bD, (g * aZ))
354+ let bH = aH(as)
355+ let bI = aI(as)
356+ let bJ = aL(as)
357+ let bK = B(this, bI, bE)
358+ let bL = E(this, bH)
357359 let bM = 0
358360 let bN = max([(height - bK), 0])
359361 let bO = if ((bM != 0))
360362 then toBigInt(bM)
361- else fraction(toBigInt(bG), toBigInt(b), bB)
362- let bP = (bA + toBigInt(by))
363- let bQ = if ((bP == g))
364- then h
363+ else fraction(toBigInt(bG), toBigInt(c), bC)
364+ let bP = (bB + toBigInt(bz))
365+ let bQ = if ((bP == h))
366+ then i
365367 else bP
366- let bu = (bL + (bO * toBigInt(bN)))
368+ let bv = (bL + (bO * toBigInt(bN)))
367369 let bR = (toBigInt(bG) / bQ)
368370 let bS = height
369- let bT = makeString([toString(bu), toString(bN), toString(bO), toString(bA), toString(bG), toString(bF), toString(bC)], "::")
370- $Tuple3(bu, [StringEntry(bH, toString(bu)), IntegerEntry(bI, bS), StringEntry(bJ, toString(bR))], bT)
371+ let bT = makeString([toString(bv), toString(bN), toString(bO), toString(bB), toString(bG), toString(bF), toString(bD)], "::")
372+ $Tuple3(bv, [StringEntry(bH, toString(bv)), IntegerEntry(bI, bS), StringEntry(bJ, toString(bR))], bT)
371373 }
372374
373375
374-func bU (at,as,bx,by) = {
375- let bV = bw(at, bx, by)
376- let bu = bV._1
376+func bU (as,ar,by,bz) = {
377+ let bV = bx(as, by, bz)
378+ let bv = bV._1
377379 let bW = bV._2
378380 let bX = bV._3
379- let bE = 1000
380- let bY = ar(as, at)
381- let bs = az(bY)
382- let bZ = aK(at, as)
383- let ca = aL(at, as)
384- let bv = aO(at, as)
385- let cb = D(this, bZ)
386- let bt = z(this, ca)
387- let cc = br(toBigInt(bs), toBigInt(bt), bu, bv)
388- let cd = (b * bE)
389- let ce = max([(cb + fraction((bu - cc), toBigInt(bs), toBigInt(cd))), g])
390- let cf = bu
381+ let bY = aq(ar, as)
382+ let bt = ay(bY)
383+ let bZ = aJ(as, ar)
384+ let ca = aK(as, ar)
385+ let bw = aN(as, ar)
386+ let cb = E(this, bZ)
387+ let bu = A(this, ca)
388+ let cc = bs(toBigInt(bt), toBigInt(bu), bv, bw)
389+ let cd = (c * b)
390+ let ce = max([(cb + fraction((bv - cc), toBigInt(bt), toBigInt(cd))), h])
391+ let cf = bv
391392 let cg = height
392- let bT = makeString([toString(cb), toString(cc), toString(bs), bX, toString(height)], "::")
393- $Tuple3(ce, (bW ++ [StringEntry(bZ, toString(ce)), IntegerEntry(ca, cg), StringEntry(bv, toString(cf))]), bT)
393+ let bT = makeString([toString(cb), toString(cc), toString(bt), bX, toString(height)], "::")
394+ $Tuple3(ce, (bW ++ [StringEntry(bZ, toString(ce)), IntegerEntry(ca, cg), StringEntry(bw, toString(cf))]), bT)
394395 }
395396
396397
397398 func ch () = {
398- let n = getString(V())
399- if ($isInstanceOf(n, "String"))
399+ let o = getString(W())
400+ if ($isInstanceOf(o, "String"))
400401 then {
401- let F = n
402- fromBase58String(F)
402+ let G = o
403+ fromBase58String(G)
403404 }
404- else if ($isInstanceOf(n, "Unit"))
405+ else if ($isInstanceOf(o, "Unit"))
405406 then unit
406407 else throw("Match error")
407408 }
408409
409410
410411 func ci () = {
411- let n = getString(W())
412- if ($isInstanceOf(n, "String"))
412+ let o = getString(X())
413+ if ($isInstanceOf(o, "String"))
413414 then {
414- let F = n
415- fromBase58String(F)
415+ let G = o
416+ fromBase58String(G)
416417 }
417- else if ($isInstanceOf(n, "Unit"))
418+ else if ($isInstanceOf(o, "Unit"))
418419 then unit
419420 else throw("Match error")
420421 }
421422
422423
423-let cj = throw("Permission denied")
424+let cj = l("Permission denied")
424425
425426 func ck (cl) = if ((cl.caller == this))
426427 then true
427428 else cj
428429
429430
430431 func cm (cl) = {
431- let n = ch()
432- if ($isInstanceOf(n, "ByteVector"))
432+ let o = ch()
433+ if ($isInstanceOf(o, "ByteVector"))
433434 then {
434- let cn = n
435+ let cn = o
435436 if ((cl.callerPublicKey == cn))
436437 then true
437438 else cj
438439 }
439- else if ($isInstanceOf(n, "Unit"))
440+ else if ($isInstanceOf(o, "Unit"))
440441 then if ((cl.caller == this))
441442 then true
442443 else cj
443444 else throw("Match error")
444445 }
445446
446447
447-func co (cl,aB,cp,aD,cq,aT) = {
448- let as = toString(aD)
449- let at = toBase58String(aB)
450- let bx = toString(cp)
451- let bY = ar(as, at)
452- let bz = au(at)
453- let bs = az(bY)
454- let bA = az(bz)
455- let cr = bU(at, as, bx, -(aT))._2
456- let be = bc(at)
457- let cs = if (if (bj(be, as))
458- then (aT == bs)
448+func co (cl,aA,cp,aC,aS) = {
449+ let ar = toString(aC)
450+ let as = toBase58String(aA)
451+ let by = toString(cp)
452+ let bY = aq(ar, as)
453+ let bA = at(as)
454+ let bt = ay(bY)
455+ let cq = if ((bt == 0))
456+ then invoke(aY, "onStakedVoteUpdate", [as, ar, true], nil)
457+ else unit
458+ if ((cq == cq))
459+ then {
460+ let bB = ay(bA)
461+ let cr = bU(as, ar, by, aS)
462+ let ce = cr._1
463+ let cs = cr._2
464+ let bT = cr._3
465+ let bf = bd(as)
466+ let ct = if (bk(bf, ar))
467+ then nil
468+ else bo(bf, ar)
469+ (([IntegerEntry(bY, (bt + aS)), IntegerEntry(bA, (bB + aS)), aT("stake", ar, as, aS, cl.transactionId)] ++ cs) ++ ct)
470+ }
471+ else throw("Strict value is not equal to itself.")
472+ }
473+
474+
475+func cu (cl,aA,cp,aC,cv,aS) = {
476+ let ar = toString(aC)
477+ let as = toBase58String(aA)
478+ let by = toString(cp)
479+ let bY = aq(ar, as)
480+ let bA = at(as)
481+ let bt = ay(bY)
482+ let bB = ay(bA)
483+ let cs = bU(as, ar, by, -(aS))._2
484+ let bf = bd(as)
485+ let ct = if (if (bk(bf, ar))
486+ then (aS == bt)
459487 else false)
460- then bq(be, as)
488+ then br(bf, ar)
461489 else nil
462- let ct = if ((aT == bs))
463- then invoke(aZ, "onStakedVoteUpdate", [at, as, false], nil)
490+ let cq = if ((aS == bt))
491+ then invoke(aY, "onStakedVoteUpdate", [as, ar, false], nil)
464492 else unit
465- if ((ct == ct))
493+ if ((cq == cq))
466494 then {
467- let cu = D(this, aw(at, as))
468- let ce = bU(at, as, bx, 0)._1
469- let cv = (ce - cu)
470- let cw = true
471- let cx = if ((cv > g))
472- then invoke(this, "claimWxINTERNAL", [at, as, cw], nil)
495+ let cw = E(this, av(as, ar))
496+ let ce = bU(as, ar, by, 0)._1
497+ let cx = (ce - cw)
498+ let cy = true
499+ let cz = if ((cx > h))
500+ then invoke(this, "claimWxINTERNAL", [as, ar, cy], nil)
473501 else unit
474- if ((cx == cx))
475- then if ((aT > bs))
476- then throw(((((((("passed amount=" + toString(aT)) + " is greater than available=") + toString(bs)) + ". lpAssetId=") + at) + ". stakedByUserKEY=") + bY))
477- else (([IntegerEntry(bY, (bs - aT)), IntegerEntry(bz, (bA - aT)), ScriptTransfer(cq, aT, aB), aU("unstake", as, at, aT, cl.transactionId)] ++ cr) ++ cs)
502+ if ((cz == cz))
503+ then if ((aS > bt))
504+ then l(((((((("passed amount=" + toString(aS)) + " is greater than available=") + toString(bt)) + ". lpAssetId=") + as) + ". stakedByUserKEY=") + bY))
505+ else (([IntegerEntry(bY, (bt - aS)), IntegerEntry(bA, (bB - aS)), ScriptTransfer(cv, aS, aA), aT("unstake", ar, as, aS, cl.transactionId)] ++ cs) ++ ct)
478506 else throw("Strict value is not equal to itself.")
479507 }
480508 else throw("Strict value is not equal to itself.")
481509 }
482510
483511
484512 @Callable(cl)
485-func constructor (cy) = {
486- let cz = cm(cl)
487- if ((cz == cz))
488- then [StringEntry(L(), cy)]
489- else throw("Strict value is not equal to itself.")
490- }
491-
492-
493-
494-@Callable(cl)
495-func constructorV2 (cA) = {
496- let cB = [cm(cl), if ((addressFromString(cA) != unit))
497- then true
498- else "invalid voting emission contract address"]
513+func constructor (cA) = {
514+ let cB = cm(cl)
499515 if ((cB == cB))
500516 then [StringEntry(M(), cA)]
501517 else throw("Strict value is not equal to itself.")
502518 }
503519
504520
505521
506522 @Callable(cl)
507-func setManager (cC) = {
508- let cz = cm(cl)
509- if ((cz == cz))
523+func constructorV2 (cC) = {
524+ let cD = [cm(cl), if ((addressFromString(cC) != unit))
525+ then true
526+ else "invalid voting emission contract address"]
527+ if ((cD == cD))
528+ then [StringEntry(N(), cC)]
529+ else throw("Strict value is not equal to itself.")
530+ }
531+
532+
533+
534+@Callable(cl)
535+func setManager (cE) = {
536+ let cB = cm(cl)
537+ if ((cB == cB))
510538 then {
511- let cD = fromBase58String(cC)
512- if ((cD == cD))
513- then [StringEntry(W(), cC)]
539+ let cF = fromBase58String(cE)
540+ if ((cF == cF))
541+ then [StringEntry(X(), cE)]
514542 else throw("Strict value is not equal to itself.")
515543 }
516544 else throw("Strict value is not equal to itself.")
517545 }
518546
519547
520548
521549 @Callable(cl)
522550 func confirmManager () = {
523- let cE = ci()
524- let cF = if (isDefined(cE))
551+ let cG = ci()
552+ let cH = if (isDefined(cG))
525553 then true
526- else throw("No pending manager")
527- if ((cF == cF))
554+ else l("No pending manager")
555+ if ((cH == cH))
528556 then {
529- let cG = if ((cl.callerPublicKey == value(cE)))
557+ let cI = if ((cl.callerPublicKey == value(cG)))
530558 then true
531- else throw("You are not pending manager")
532- if ((cG == cG))
533- then [StringEntry(V(), toBase58String(value(cE))), DeleteEntry(W())]
559+ else l("You are not pending manager")
560+ if ((cI == cI))
561+ then [StringEntry(W(), toBase58String(value(cG))), DeleteEntry(X())]
534562 else throw("Strict value is not equal to itself.")
535563 }
536564 else throw("Strict value is not equal to itself.")
537565 }
538566
539567
540568
541569 @Callable(cl)
542570 func stake () = if ((size(cl.payments) != 1))
543- then throw("invalid payment - exact one payment must be attached")
571+ then l("invalid payment - exact one payment must be attached")
544572 else {
545- let cH = cl.payments[0]
546- let aB = value(cH.assetId)
547- let at = toBase58String(aB)
548- let aT = cH.amount
549- let bx = valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at))
550- let cI = toString(cl.caller)
551- let as = if ((cI == bx))
552- then toString(cl.originCaller)
553- else cI
554- let bY = ar(as, at)
555- let bz = au(at)
556- let bs = az(bY)
557- let ct = if ((bs == 0))
558- then invoke(aZ, "onStakedVoteUpdate", [at, as, true], nil)
559- else unit
560- if ((ct == ct))
561- then {
562- let bA = az(bz)
563- let cJ = bU(at, as, bx, aT)
564- let ce = cJ._1
565- let cr = cJ._2
566- let bT = cJ._3
567- let be = bc(at)
568- let cs = if (bj(be, as))
569- then nil
570- else bn(be, as)
571- (([IntegerEntry(bY, (bs + aT)), IntegerEntry(bz, (bA + aT)), aU("stake", as, at, aT, cl.transactionId)] ++ cr) ++ cs)
572- }
573- else throw("Strict value is not equal to itself.")
573+ let cJ = cl.payments[0]
574+ let aA = value(cJ.assetId)
575+ let as = toBase58String(aA)
576+ let aS = cJ.amount
577+ let by = valueOrErrorMessage(getString(aW, Y(as)), j(("unsupported lp asset " + as)))
578+ let cp = addressFromStringValue(by)
579+ let aC = if ((cl.caller == cp))
580+ then cl.originCaller
581+ else cl.caller
582+ co(cl, aA, cp, aC, aS)
574583 }
575584
576585
577586
578587 @Callable(cl)
579-func unstake (at,aT) = {
580- let aB = fromBase58String(at)
581- let bx = valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at))
582- let cp = addressFromStringValue(bx)
583- let cK = valueOrElse(getString(cp, Y()), bx)
584- let cI = toString(cl.caller)
585- let aD = if (if ((cI == bx))
586- then true
587- else (cI == cK))
588+func stakeFor (ar) = if ((size(cl.payments) != 1))
589+ then l("invalid payment - exact one payment must be attached")
590+ else {
591+ let cJ = cl.payments[0]
592+ let aA = value(cJ.assetId)
593+ let as = toBase58String(aA)
594+ let aS = cJ.amount
595+ let by = valueOrErrorMessage(getString(aW, Y(as)), j(("unsupported lp asset " + as)))
596+ let cp = addressFromStringValue(by)
597+ let aC = valueOrErrorMessage(addressFromString(ar), j("invalid user address"))
598+ co(cl, aA, cp, aC, aS)
599+ }
600+
601+
602+
603+@Callable(cl)
604+func unstake (as,aS) = {
605+ let aA = fromBase58String(as)
606+ let by = valueOrErrorMessage(getString(aW, Y(as)), j(("unsupported lp asset " + as)))
607+ let cp = addressFromStringValue(by)
608+ let cK = toString(cl.caller)
609+ let aC = if ((cK == by))
588610 then cl.originCaller
589611 else cl.caller
590- let cq = cl.caller
591- co(cl, aB, cp, aD, cq, aT)
612+ let cv = cl.caller
613+ cu(cl, aA, cp, aC, cv, aS)
592614 }
593615
594616
595617
596618 @Callable(cl)
597-func unstakeINTERNAL (aB,aT,aD,cq) = {
598- let at = toBase58String(aB)
599- let cp = addressFromStringValue(valueOrErrorMessage(getString(aX, Z(at)), ("unsupported lp asset " + at)))
600- let cz = if ((cl.caller == cp))
619+func unstakeINTERNAL (aA,aS,aC,cv) = {
620+ let as = toBase58String(aA)
621+ let cp = addressFromStringValue(valueOrErrorMessage(getString(aW, Y(as)), j(("unsupported lp asset " + as))))
622+ let cB = if ((cl.caller == cp))
601623 then true
602624 else cj
603- if ((cz == cz))
604- then co(cl, aB, cp, Address(aD), Address(cq), aT)
625+ if ((cB == cB))
626+ then cu(cl, aA, cp, Address(aC), Address(cv), aS)
605627 else throw("Strict value is not equal to itself.")
606628 }
607629
608630
609631
610632 @Callable(cl)
611-func claimWx (at) = {
612- let as = toString(cl.caller)
613- let cw = true
614- let cL = invoke(this, "claimWxINTERNAL", [at, as, cw], nil)
633+func claimWx (as) = {
634+ let ar = toString(cl.caller)
635+ let cy = true
636+ let cL = invoke(this, "claimWxINTERNAL", [as, ar, cy], nil)
615637 $Tuple2(nil, cL)
616638 }
617639
618640
619641
620642 @Callable(cl)
621-func claimWxDoNotThrow (at) = {
622- let as = toString(cl.caller)
623- let cw = false
624- let cL = invoke(this, "claimWxINTERNAL", [at, as, cw], nil)
643+func claimWxDoNotThrow (as) = {
644+ let ar = toString(cl.caller)
645+ let cy = false
646+ let cL = invoke(this, "claimWxINTERNAL", [as, ar, cy], nil)
625647 $Tuple2(nil, cL)
626648 }
627649
628650
629651
630652 @Callable(cl)
631-func claimWxINTERNAL (at,as,cw) = {
632- let cz = ck(cl)
633- if ((cz == cz))
653+func claimWxINTERNAL (as,ar,cy) = {
654+ let cB = ck(cl)
655+ if ((cB == cB))
634656 then {
635- let aD = valueOrErrorMessage(addressFromString(as), "claimWxINTERNAL: invalid user address")
636- let bx = y(aX, ac(at))
637- let cM = av(at, as)
638- let cN = ay(at)
639- let cO = aw(at, as)
640- let cP = ax(at, as)
641- let cQ = D(this, cM)
642- let cu = D(this, cO)
643- let cR = D(this, cP)
644- let cS = D(this, cN)
645- let cT = bU(at, as, bx, 0)
657+ let aC = valueOrErrorMessage(addressFromString(ar), j("claimWxINTERNAL: invalid user address"))
658+ let by = z(aW, ab(as))
659+ let cM = au(as, ar)
660+ let cN = ax(as)
661+ let cO = av(as, ar)
662+ let cP = aw(as, ar)
663+ let cQ = E(this, cM)
664+ let cw = E(this, cO)
665+ let cR = E(this, cP)
666+ let cS = E(this, cN)
667+ let cT = bU(as, ar, by, 0)
646668 let ce = cT._1
647- let cr = cT._2
669+ let cs = cT._2
648670 let bT = cT._3
649- let cv = max([(ce - cu), g])
650- if ((g >= cv))
651- then if (cw)
652- then throw("nothing to claim")
671+ let cx = max([(ce - cw), h])
672+ if ((h >= cx))
673+ then if (cy)
674+ then l("nothing to claim")
653675 else $Tuple2(nil, 0)
654676 else {
655- let cU = max([p(l(invoke(aZ, "claimWxBoost", [at, as], nil))[0]), 0])
656- let cV = cv
657- let cW = min([(cV * toBigInt(2)), toBigInt(cU)])
677+ let cU = max([q(m(invoke(aY, "claimWxBoost", [as, ar], nil))[0]), 0])
678+ let cV = cx
679+ let cW = min([(cV * toBigInt((aZ - 1))), toBigInt(cU)])
658680 let cX = (cV + cW)
659- let cY = t(l(invoke(aY, "emit", [toInt(cV)], nil))[0])
660- let cZ = l(invoke(aY, "emit", [toInt(cW)], nil))
681+ let cY = u(m(invoke(aX, "emit", [toInt(cV)], nil))[0])
682+ let cZ = m(invoke(aX, "emit", [toInt(cW)], nil))
661683 if ((cZ == cZ))
662684 then {
663685 let da = ((cQ + cV) + cW)
664- let db = (cu + cV)
686+ let db = (cw + cV)
665687 let dc = (cR + cW)
666- let dd = (cS + cv)
667- $Tuple2([StringEntry(cM, toString(da)), StringEntry(cO, toString(db)), StringEntry(cP, toString(dc)), StringEntry(cN, toString(dd)), ScriptTransfer(aD, toInt(cV), cY), ScriptTransfer(aD, toInt(cW), cY), aU("claim", as, at, toInt(cv), cl.transactionId)], toInt(cX))
688+ let dd = (cS + cx)
689+ $Tuple2([StringEntry(cM, toString(da)), StringEntry(cO, toString(db)), StringEntry(cP, toString(dc)), StringEntry(cN, toString(dd)), ScriptTransfer(aC, toInt(cV), cY), ScriptTransfer(aC, toInt(cW), cY), aT("claim", ar, as, toInt(cx), cl.transactionId)], toInt(cX))
668690 }
669691 else throw("Strict value is not equal to itself.")
670692 }
671693 }
672694 else throw("Strict value is not equal to itself.")
673695 }
674696
675697
676698
677699 @Callable(cl)
678-func claimWxBulkInternalREADONLY (de,df,as,dg) = if ((de == size(df)))
700+func claimWxBulkInternalREADONLY (de,df,ar,dg) = if ((de == size(df)))
679701 then $Tuple2(nil, dg)
680702 else {
681- let aB = df[de]
703+ let aA = df[de]
682704 let dh = split({
683- let di = invoke(this, "claimWxREADONLY", [aB, as], nil)
684- if ($isInstanceOf(di, "String"))
685- then di
686- else throw(($getType(di) + " couldn't be cast to String"))
687- }, e)
688- let dj = dh[3]
689- let dk = dh[4]
690- let dl = (dg :+ makeString(["%d%d", dj, dk], e))
705+ let ba = invoke(this, "claimWxREADONLY", [aA, ar], nil)
706+ if ($isInstanceOf(ba, "String"))
707+ then ba
708+ else throw(($getType(ba) + " couldn't be cast to String"))
709+ }, f)
710+ let di = dh[3]
711+ let dj = dh[4]
712+ let dk = {
713+ let ba = invoke(aY, "getUserVoteFinalizedREADONLY", [aA, ar], nil)
714+ if ($isInstanceOf(ba, "Int"))
715+ then ba
716+ else throw(($getType(ba) + " couldn't be cast to Int"))
717+ }
718+ let dl = (dg :+ makeString(["%d%d%d", di, dj, toString(dk)], f))
691719 let dm = {
692- let di = invoke(this, "claimWxBulkInternalREADONLY", [(de + 1), df, as, dl], nil)
693- if ($isInstanceOf(di, "List[Any]"))
694- then di
695- else throw(($getType(di) + " couldn't be cast to List[Any]"))
720+ let ba = invoke(this, "claimWxBulkInternalREADONLY", [(de + 1), df, ar, dl], nil)
721+ if ($isInstanceOf(ba, "List[Any]"))
722+ then ba
723+ else throw(($getType(ba) + " couldn't be cast to List[Any]"))
696724 }
697725 if ((dm == dm))
698726 then $Tuple2(nil, dm)
699727 else throw("Strict value is not equal to itself.")
700728 }
701729
702730
703731
704732 @Callable(cl)
705-func claimWxBulkREADONLY (df,as) = {
706- let dl = invoke(this, "claimWxBulkInternalREADONLY", [0, df, as, nil], nil)
733+func claimWxBulkREADONLY (df,ar) = {
734+ let dl = invoke(this, "claimWxBulkInternalREADONLY", [0, df, ar, nil], nil)
707735 $Tuple2(nil, dl)
708736 }
709737
710738
711739
712740 @Callable(cl)
713-func claimWxREADONLY (at,as) = {
714- let bY = ar(as, at)
715- let bz = au(at)
716- let cM = av(at, as)
717- let cO = aw(at, as)
718- let bs = az(bY)
719- let bA = az(bz)
720- let cQ = D(this, cM)
721- let cu = D(this, cO)
722- let bx = y(aX, ac(at))
723- let bC = getIntegerValue(aX, ad(bx))
724- let dn = C(aY, am())
725- let bD = C(aY, ao())
726- let do = if ((bD > height))
741+func claimWxREADONLY (as,ar) = {
742+ let bY = aq(ar, as)
743+ let bA = at(as)
744+ let cM = au(as, ar)
745+ let cO = av(as, ar)
746+ let bt = ay(bY)
747+ let bB = ay(bA)
748+ let cQ = E(this, cM)
749+ let cw = E(this, cO)
750+ let by = z(aW, ab(as))
751+ let bD = getIntegerValue(aW, ac(by))
752+ let dn = D(aX, al())
753+ let bE = D(aX, an())
754+ let do = if ((bE > height))
727755 then 0
728- else (height - bD)
729- let dp = fraction((dn * do), bC, f)
730- let dq = fraction(dp, bs, bA)
731- let dr = bU(at, as, bx, 0)
756+ else (height - bE)
757+ let dp = fraction((dn * do), bD, g)
758+ let dq = fraction(dp, bt, bB)
759+ let dr = bU(as, ar, by, 0)
732760 let ce = dr._1
733- let cr = dr._2
761+ let cs = dr._2
734762 let bT = dr._3
735- let cv = max([(ce - cu), g])
736- let ds = l(invoke(aZ, "claimWxBoostREADONLY", [at, as], nil))
737- let cU = max([p(ds[0]), 0])
738- let dt = r(ds[1])
739- let cV = cv
740- let cW = min([(cV * toBigInt(2)), toBigInt(cU)])
763+ let cx = max([(ce - cw), h])
764+ let ds = m(invoke(aY, "claimWxBoostREADONLY", [as, ar], nil))
765+ let cU = max([q(ds[0]), 0])
766+ let dt = s(ds[1])
767+ let cV = cx
768+ let cW = min([(cV * toBigInt((aZ - 1))), toBigInt(cU)])
741769 let cX = (cV + cW)
742- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", at, as, toString(cX), toString(cQ), toString(cV), toString(cW), "soon"], e))
770+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", as, ar, toString(cX), toString(cQ), toString(cV), toString(cW), "soon"], f))
743771 }
744772
745773
746774
747775 @Callable(cl)
748-func stakedByUserREADONLY (at,as) = {
749- let bs = valueOrElse(getInteger(ar(as, at)), 0)
750- $Tuple2(nil, bs)
776+func stakedByUserREADONLY (as,ar) = {
777+ let bt = valueOrElse(getInteger(aq(ar, as)), 0)
778+ $Tuple2(nil, bt)
751779 }
752780
753781
754782
755783 @Callable(cl)
756-func usersListTraversal (aB) = {
757- let cz = if ((toBase58String(cl.caller.bytes) == valueOrElse(getString(this, M()), "")))
784+func stakedTotalREADONLY (as) = {
785+ let bB = valueOrElse(getInteger(at(as)), 0)
786+ $Tuple2(nil, bB)
787+ }
788+
789+
790+
791+@Callable(cl)
792+func usersListTraversal (aA) = {
793+ let cB = if ((toBase58String(cl.caller.bytes) == valueOrElse(getString(this, N()), "")))
758794 then true
759795 else cm(cl)
760- if ((cz == cz))
796+ if ((cB == cB))
761797 then {
762- let be = bc(aB)
763- let du = getString(bb(aB))
764- let bk = getString(bd(be))
765- let n = du
766- if ($isInstanceOf(n, "Unit"))
798+ let bf = bd(aA)
799+ let du = getString(bc(aA))
800+ let bl = getString(be(bf))
801+ let o = du
802+ if ($isInstanceOf(o, "Unit"))
767803 then {
768- let dv = bk
804+ let dv = bl
769805 if ($isInstanceOf(dv, "Unit"))
770806 then $Tuple2(nil, false)
771807 else if ($isInstanceOf(dv, "String"))
772808 then {
773809 let dw = dv
774- $Tuple2([StringEntry(bb(aB), dw)], true)
810+ $Tuple2([StringEntry(bc(aA), dw)], true)
775811 }
776812 else throw("Match error")
777813 }
778- else if ($isInstanceOf(n, "String"))
814+ else if ($isInstanceOf(o, "String"))
779815 then {
780- let aD = n
781- let cu = D(this, aw(aB, aD))
782- let cp = y(aX, ac(aB))
783- let ce = bU(aB, aD, cp, 0)._1
784- let cv = (ce - cu)
785- let cw = true
786- let cx = if ((cv > g))
787- then invoke(this, "claimWxINTERNAL", [aB, aD, cw], nil)
816+ let aC = o
817+ let cw = E(this, av(aA, aC))
818+ let cp = z(aW, ab(aA))
819+ let ce = bU(aA, aC, cp, 0)._1
820+ let cx = (ce - cw)
821+ let cy = true
822+ let cz = if ((cx > h))
823+ then invoke(this, "claimWxINTERNAL", [aA, aC, cy], nil)
788824 else unit
789- if ((cx == cx))
825+ if ((cz == cz))
790826 then {
791- let dx = getString(bi(be, aD))
827+ let dx = getString(bj(bf, aC))
792828 let dv = dx
793829 if ($isInstanceOf(dv, "Unit"))
794- then $Tuple2([DeleteEntry(bb(aB))], false)
830+ then $Tuple2([DeleteEntry(bc(aA))], false)
795831 else if ($isInstanceOf(dv, "String"))
796832 then {
797833 let dy = dv
798- $Tuple2([StringEntry(bb(aB), dy)], true)
834+ $Tuple2([StringEntry(bc(aA), dy)], true)
799835 }
800836 else throw("Match error")
801837 }
802838 else throw("Strict value is not equal to itself.")
803839 }
804840 else throw("Match error")
805841 }
806842 else throw("Strict value is not equal to itself.")
807843 }
808844
809845
810846
811847 @Callable(cl)
812-func onModifyWeight (at,bx) = if ((cl.caller != aX))
813- then throw("permissions denied")
848+func onModifyWeight (as,by) = if ((cl.caller != aW))
849+ then l("permissions denied")
814850 else {
815- let dz = bw(at, bx, 0)
816- let bu = dz._1
851+ let dz = bx(as, by, 0)
852+ let bv = dz._1
817853 let bW = dz._2
818854 let bX = dz._3
819855 bW
820856 }
821857
822858
823859 @Verifier(dA)
824860 func dB () = {
825861 let dC = {
826- let n = ch()
827- if ($isInstanceOf(n, "ByteVector"))
862+ let o = ch()
863+ if ($isInstanceOf(o, "ByteVector"))
828864 then {
829- let cn = n
865+ let cn = o
830866 cn
831867 }
832- else if ($isInstanceOf(n, "Unit"))
868+ else if ($isInstanceOf(o, "Unit"))
833869 then dA.senderPublicKey
834870 else throw("Match error")
835871 }
836872 sigVerify(dA.bodyBytes, dA.proofs[0], dC)
837873 }
838874

github/deemru/w8io/169f3d6 
333.34 ms