tx · 319rJAAw9xqhiwHhkf2aoRxkpy2JsiWLU9sKv1ym55HG

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.02700000 Waves

2023.08.14 17:39 [2710362] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "319rJAAw9xqhiwHhkf2aoRxkpy2JsiWLU9sKv1ym55HG", "fee": 2700000, "feeAssetId": null, "timestamp": 1692024013968, "version": 2, "chainId": 84, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "5TurZTvh4sezLLsSA11iYEwJ87tQps1BaiMacwUADhLiaw28wkMrvNeNJKNKs8T8WL9VvFnf43aHxEiCmkobo5Y" ], "script": "base64:BgKZLwgCEggKBggIAQEBCBIFCgMBCAISAwoBARIDCgEBEgQKAggIEgQKAggIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgASABIFCgMICAQSAwoBCBIDCgEIEgQKAggIEgQKAggIIgNTRVAiBlNDQUxFOCIFTVVMVDgiDlBPT0xXRUlHSFRNVUxUIgd3cmFwRXJyIgNtc2ciCHRocm93RXJyIgRzdHJmIgdhZGRyZXNzIgNrZXkiA2lveiIDaW9kIgpkZWZhdWx0VmFsIgNpb2YiA2FicyIDdmFsIgNhYWwiByRtYXRjaDAiCnZhbEFueUx5c3QiAmFpIgZ2YWxJbnQiG2tleVJlZmVycmFsc0NvbnRyYWN0QWRkcmVzcyIecmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzT3JGYWlsIhZrZXlSZWZlcnJhbFByb2dyYW1OYW1lIhpyZWZlcnJhbFByb2dyYW1OYW1lRGVmYXVsdCITcmVmZXJyYWxQcm9ncmFtTmFtZSIRa2V5RmFjdG9yeUFkZHJlc3MiGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcCIZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcCIUSWR4RmFjdG9yeUNmZ0lkb0RhcHAiFUlkeEZhY3RvcnlDZmdUZWFtRGFwcCIZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcCIVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwIhlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwIhRJZHhGYWN0b3J5Q2ZnRGFvRGFwcCIaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAiGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwIhZJZHhGYWN0b3J5Q2ZnQmlyZHNEYXBwIg1rZXlGYWN0b3J5Q2ZnIhBrZXlGYWN0b3J5THBMaXN0IiZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcyIKbHBBc3NldFN0ciIUa2V5RmFjdG9yeVBvb2xXZWlnaHQiD2NvbnRyYWN0QWRkcmVzcyIba2V5RmFjdG9yeVBvb2xXZWlnaHRIaXN0b3J5Igtwb29sQWRkcmVzcyIDbnVtIhhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwiCnJlYWRMcExpc3QiFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsIgdmYWN0b3J5IhhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwiCmZhY3RvcnlDZmciGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbCIXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwiGWdldEd3eFJld2FyZEFkZHJlc3NPckZhaWwiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudCIha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50IhVrZXlFbWlzc2lvblN0YXJ0QmxvY2siHWtleUJvb3N0aW5nVjJMYXN0VXBkYXRlSGVpZ2h0IhVrZXlCb29zdGluZ1YySW50ZWdyYWwiG2tleUVtaXNzaW9uRHVyYXRpb25JbkJsb2NrcyITa2V5RW1pc3Npb25FbmRCbG9jayINa2V5TmV4dFBlcmlvZCIfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodCINSWR4Q2ZnQXNzZXRJZCITSWR4Q2ZnTWluTG9ja0Ftb3VudCIVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uIhVJZHhDZmdNYXhMb2NrRHVyYXRpb24iEklkeENmZ01hdGhDb250cmFjdCIJa2V5Q29uZmlnIhVyZWFkQ29uZmlnQXJyYXlPckZhaWwiDG1hdGhDb250cmFjdCINZm9ybWF0Q29uZmlnUyIHYXNzZXRJZCINbWluTG9ja0Ftb3VudCIPbWluTG9ja0R1cmF0aW9uIg9tYXhMb2NrRHVyYXRpb24iDGZvcm1hdENvbmZpZyIcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcyIBcyIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCITbWFuYWdlclZhdWx0QWRkcmVzcyILbXVzdE1hbmFnZXIiAWkiAnBkIgJwayIOSWR4TG9ja1VzZXJOdW0iDUlkeExvY2tBbW91bnQiDElkeExvY2tTdGFydCIPSWR4TG9ja0R1cmF0aW9uIg1JZHhMb2NrUGFyYW1LIg1JZHhMb2NrUGFyYW1CIhNrZXlMb2NrUGFyYW1zUmVjb3JkIgt1c2VyQWRkcmVzcyIacmVhZExvY2tQYXJhbXNSZWNvcmRPckZhaWwiF2Zvcm1hdExvY2tQYXJhbXNSZWNvcmRTIgd1c2VyTnVtIgZhbW91bnQiBXN0YXJ0IghkdXJhdGlvbiIGcGFyYW1LIgZwYXJhbUIiEGxhc3RVcGRUaW1lc3RhbXAiCWd3eEFtb3VudCIWZm9ybWF0TG9ja1BhcmFtc1JlY29yZCIOa2V5TmV4dFVzZXJOdW0iEmtleVVzZXIyTnVtTWFwcGluZyISa2V5TnVtMlVzZXJNYXBwaW5nIhZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50IhZrZXlMb2NrUGFyYW1TdGFydEJsb2NrIhRrZXlMb2NrUGFyYW1EdXJhdGlvbiINa2V5TG9ja1BhcmFtSyINa2V5TG9ja1BhcmFtQiIVa2V5TG9ja1BhcmFtQnlQZXJpb2RLIgZwZXJpb2QiFWtleUxvY2tQYXJhbUJ5UGVyaW9kQiIXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQiIGtleVN0YXRzTG9ja3NEdXJhdGlvblN1bUluQmxvY2tzIhJrZXlTdGF0c0xvY2tzQ291bnQiEmtleVN0YXRzVXNlcnNDb3VudCIga2V5VXNlckJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwiImtleVVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwiCWxwQXNzZXRJZCIXa2V5VXNlck1heEJvb3N0SU5URUdSQUwiGGtleVRvdGFsTWF4Qm9vc3RJTlRFR1JBTCIha2V5VXNlckJvb3N0QXZhbGFpYmxlVG9DbGFpbVRvdGFsIhNrZXlVc2VyQm9vc3RDbGFpbWVkIhFrZXlUb3RhbENhY2hlZEd3eCIba2V5VG90YWxDYWNoZWRHd3hDb3JyZWN0aXZlIgdrZXlWb3RlIg1hbW91bnRBc3NldElkIgxwcmljZUFzc2V0SWQiBWVwb2NoIhVrZXlTdGFydEhlaWdodEJ5RXBvY2giEWtleUN1cnJlbnRFcG9jaFVpIhVrZXlWb3RpbmdSZXN1bHRTdGFrZWQiDGxwQXNzZXRJZFN0ciIda2V5Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwiJWtleVZvdGluZ1Jlc3VsdFN0YWtlZExhc3RVcGRhdGVIZWlnaHQiIWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdCIVa2V5Vm90ZVN0YWtlZEludGVncmFsIh1rZXlWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodCIZa2V5Vm90ZVN0YWtlZEludGVncmFsTGFzdCIPa2V5U3Rha2VkQnlVc2VyIg51c2VyQWRkcmVzc1N0ciIPZmFjdG9yeUNvbnRyYWN0IhBlbWlzc2lvbkNvbnRyYWN0Ig9zdGFraW5nQ29udHJhY3QiEWd3eFJld2FyZENvbnRyYWN0IhZscFN0YWtpbmdQb29sc0NvbnRyYWN0IhlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0IhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0Igpib29zdENvZWZmIgFAIhFnZXRUb3RhbENhY2hlZEd3eCIHY29ycmVjdCIOY3VycmVudEVwb2NoVWkiDmtleVRhcmdldEVwb2NoIhF0YXJnZXRFcG9jaE9wdGlvbiIRdG90YWxDYWNoZWRHd3hSYXciFWlzQ29ycmVjdGlvbkFjdGl2YXRlZCIKY29ycmVjdGl2ZSIMSGlzdG9yeUVudHJ5IgR0eXBlIgR1c2VyIglsb2NrU3RhcnQiAWsiAWIiCmhpc3RvcnlLRVkiC2hpc3RvcnlEQVRBIgpTdGF0c0VudHJ5Ig50b3RhbExvY2tlZEluYyILZHVyYXRpb25JbmMiDGxvY2tDb3VudEluYyINdXNlcnNDb3VudEluYyIbbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzS0VZIg1sb2Nrc0NvdW50S0VZIg11c2Vyc0NvdW50S0VZIg50b3RhbEFtb3VudEtFWSIYbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzIgpsb2Nrc0NvdW50Igp1c2Vyc0NvdW50Igt0b3RhbEFtb3VudCINY2FsY0d3eEFtb3VudCIEa1JhdyIEYlJhdyIBaCIFU0NBTEUiD0xvY2tQYXJhbXNFbnRyeSINdXNlckFtb3VudEtFWSINc3RhcnRCbG9ja0tFWSILZHVyYXRpb25LRVkiBGtLRVkiBGJLRVkiDGtCeVBlcmlvZEtFWSIMYkJ5UGVyaW9kS0VZIiJleHRyYWN0T3B0aW9uYWxQYXltZW50QW1vdW50T3JGYWlsIg9leHBlY3RlZEFzc2V0SWQiA3BtdCIZY2FsY1VzZXJHd3hBbW91bnRBdEhlaWdodCIMdGFyZ2V0SGVpZ2h0IgVFTVBUWSISdXNlcjJOdW1NYXBwaW5nS0VZIg1nd3hBbW91bnRDYWxjIhRjYWxjQ3VycmVudEd3eEFtb3VudCIaZ2V0Vm90aW5nRW1pc3Npb25FcG9jaEluZm8iDSR0MDE3MTg2MTc0NzYiEmxhc3RGaW5hbGl6ZWRFcG9jaCIXY3VycmVudEVwb2NoU3RhcnRIZWlnaHQiGGdldFBvb2xBc3NldHNCeUxwQXNzZXRJZCIQaWR4QW1vdW50QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIgdwb29sQ2ZnIhRnZXRVc2VyVm90ZUZpbmFsaXplZCINJHQwMTgxNjcxODI0NyINJHQwMTgyNTAxODMyNSILdXNlclZvdGVLZXkiCHVzZXJWb3RlIhFnZXRVc2VyVm90ZVN0YWtlZCIMc3Rha2VkQnlVc2VyIhVnZXRWb3RpbmdSZXN1bHRTdGFrZWQiDSR0MDE4ODY5MTg5NDkiF3ZvdGluZ1Jlc3VsdFN0YWtlZFN0YXJ0IhJ2b3RpbmdSZXN1bHRTdGFrZWQiHWdldFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsIg0kdDAxOTMxMTE5MzkxIh52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbFByZXYiInZvdGluZ1Jlc3VsdFN0YWtlZExhc3RVcGRhdGVIZWlnaHQiHHZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsRGgiGnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsIiFyZWZyZXNoVm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwiD3N0YWtlZFZvdGVEZWx0YSINJHQwMjAyMjgyMDMwOCIVdm90aW5nUmVzdWx0U3Rha2VkTmV3IhlnZXRVc2VyVm90ZVN0YWtlZEludGVncmFsIg0kdDAyMDkxOTIwOTk5Ig51c2VyVm90ZVN0YWtlZCIadXNlclZvdGVTdGFrZWRJbnRlZ3JhbFByZXYiHnVzZXJWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodCIYdXNlclZvdGVTdGFrZWRJbnRlZ3JhbERoIhZ1c2VyVm90ZVN0YWtlZEludGVncmFsIhlyZWZyZXNoVm90ZVN0YWtlZEludGVncmFsIgRlZGdlIg0kdDAyMTc4NzIxODY3IhF1c2VyVm90ZUZpbmFsaXplZCIHYWN0aW9ucyITdm90aW5nUmVzdWx0QWN0aW9ucyILdm90ZUFjdGlvbnMiG2dldFN0YWtlZFZvdGVzSW50ZWdyYWxzRGlmZiINJHQwMjI3MjEyMjgwMSIddXNlclZvdGVTdGFrZWRJbnRlZ3JhbExhc3RLZXkiGnVzZXJWb3RlU3Rha2VkSW50ZWdyYWxMYXN0IiF2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3RLZXkiHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdCIadXNlclZvdGVTdGFrZWRJbnRlZ3JhbERpZmYiHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsRGlmZiIccmVmcmVzaEJvb3N0RW1pc3Npb25JbnRlZ3JhbCISd3hFbWlzc2lvblBlckJsb2NrIiBib29zdGluZ1YyTGFzdFVwZGF0ZUhlaWdodE9wdGlvbiIYYm9vc3RpbmdWMkluZ2VyZ2FsT3B0aW9uIgtlbWlzc2lvbkVuZCICZGgiEGxhc3RVcGRhdGVIZWlnaHQiFWJvb3N0RW1pc3Npb25QZXJCbG9jayIZYm9vc3RFbWlzc2lvbkludGVncmFsUHJldiIVYm9vc3RFbWlzc2lvbkludGVncmFsIhRpbnRlcm5hbENsYWltV3hCb29zdCIIcmVhZE9ubHkiEHVzZXJSZWNvcmRPcHRpb24iD3VzZXJSZWNvcmRBcnJheSIKdXNlck51bVN0ciIIRU1QVFlTVFIiCnBvb2xXZWlnaHQiDnBvb2xBZGRyZXNzU3RyIiJ1c2VyTHBCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZIiB1c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWSIddXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWwiGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwiDSR0MDI2NDIwMjY1NTkiG3N0YWtlZFZvdGVzSW50ZWdyYWxzQWN0aW9ucyIUdXNlclZvdGVJbnRlZ3JhbERpZmYiFnRvdGFsVm90ZXNJbnRlZ3JhbERpZmYiHXBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsIiF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXciCWRhdGFTdGF0ZSIFZGVidWciC2xvY2tBY3Rpb25zIghjZmdBcnJheSIKYXNzZXRJZFN0ciIJcG10QW1vdW50Ig5uZXh0VXNlck51bUtFWSIOdXNlcklzRXhpc3RpbmciB2NvZWZmWDgiDmdXeEFtb3VudFN0YXJ0IhNnV3hQYXJhbXNSZXN1bHRMaXN0IgNhcnIiEWZhY3RvcnlBZGRyZXNzU3RyIg5sb2NrQXNzZXRJZFN0ciILbWluRHVyYXRpb24iC21heER1cmF0aW9uIgtjaGVja0NhbGxlciIPcmVmZXJyZXJBZGRyZXNzIglzaWduYXR1cmUiDSR0MDMxMTcwMzEyMzUiEWxvY2tBY3Rpb25zUmVzdWx0Ig9yZWZlcnJhbEFkZHJlc3MiBnJlZkludiIRdXBkYXRlUmVmQWN0aXZpdHkiDSR0MDMxNjkzMzE3NTgiDWRlbHRhRHVyYXRpb24iCnVzZXJBbW91bnQiDGxvY2tEdXJhdGlvbiIHbG9ja0VuZCIRcmVtYWluaW5nRHVyYXRpb24iDXVzZXJBbW91bnROZXciD2xvY2tEdXJhdGlvbk5ldyIMbG9ja1N0YXJ0TmV3IgtjdXJyVXNlckd3eCIHZ3d4RGlmZiIXdG90YWxDYWNoZWRHd3hDb3JyZWN0ZWQiDSR0MDM0ODYzMzQ5NjUiEnVzZXJCb29zdEF2YWlsYWJsZSINJHQwMzUwOTczNTE5OCIQbWF4RGVsdGFEdXJhdGlvbiICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5iwEAAWECAl9fAAFiAAgAAWMAgMLXLwABZAUBYwEBZQEBZgkAuQkCCQDMCAICDmJvb3N0aW5nLnJpZGU6CQDMCAIFAWYFA25pbAIBIAEBZwEBZgkAAgEJAQFlAQUBZgEBaAIBaQFqCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUBaQUBagkBAWUBCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQFqAg8gaXMgbm90IGRlZmluZWQBAWsCAWkBagkBC3ZhbHVlT3JFbHNlAgkAmggCBQFpBQFqAAABAWwDAWkBagFtCQELdmFsdWVPckVsc2UCCQCaCAIFAWkFAWoFAW0BAW4CAWkBagkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAWkFAWoJAQFlAQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUBagIPIGlzIG5vdCBkZWZpbmVkAQFvAQFwAwkAZgIAAAUBcAkBAS0BBQFwBQFwAQFxAQFwBAFyBQFwAwkAAQIFAXICCUxpc3RbQW55XQQBcwUBcgUBcwkBAWcBAhtmYWlsIHRvIGNhc3QgaW50byBMaXN0W0FueV0BAXQBAXAEAXIFAXADCQABAgUBcgIDSW50BAF1BQFyBQF1CQEBZwECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEBdgAJALkJAgkAzAgCAgQlcyVzCQDMCAICBmNvbmZpZwkAzAgCAhhyZWZlcnJhbHNDb250cmFjdEFkZHJlc3MFA25pbAUBYQABdwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAWgCBQR0aGlzCQEBdgAAAXgJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlZmVycmFsCQDMCAICC3Byb2dyYW1OYW1lBQNuaWwFAWEAAXkCBnd4bG9jawABegkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQF4BQF5AQFBAAIcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwABQgABAAFDAAIAAUQAAwABRQAEAAFGAAUAAUcABgABSAAHAAFJAAgAAUoACQABSwAKAAFMAAsBAU0AAhElc19fZmFjdG9yeUNvbmZpZwEBTgACECVzX19scFRva2Vuc0xpc3QBAU8BAVAJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUBUAkAzAgCAh5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFA25pbAUBYQEBUQEBUgkAuQkCCQDMCAICBCVzJXMJAMwIAgIKcG9vbFdlaWdodAkAzAgCBQFSBQNuaWwFAWEBAVMCAVQBVQkArAICCQCsAgIJAKwCAgISJXMlc19fcG9vbFdlaWdodF9fBQFUAgJfXwkApAMBBQFVAQFWAAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAWgCBQR0aGlzCQEBQQABAVcACQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBAVYACQEBTgACAAUBYQEBWAEBWQkAtQkCCQEBaAIFAVkJAQFNAAUBYQEBWgECYWEJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYWEFAUMBAmFiAQJhYQkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhYQUBRgECYWMBAmFhCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmFhBQFCAQJhZAECYWEJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYWEFAUsBAmFlAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAmFmAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBAmFnAAIbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQJhaAACHiVzJXNfX3JhdGVQZXJCbG9ja01heF9fY3VycmVudAECYWkAAholcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawECYWoAAhwlcyVzX19ib29zdGluZ1YyX19zdGFydEJsb2NrAQJhawACGiVzJXNfX2Jvb3N0aW5nVjJfX2ludGVncmFsAQJhbAACGCVzJXNfX2VtaXNzaW9uX19kdXJhdGlvbgECYW0AAhglcyVzX19lbWlzc2lvbl9fZW5kQmxvY2sBAmFuAAIOJXNfX25leHRQZXJpb2QBAmFvAAIoJXMlc19fZ3d4UmV3YXJkRW1pc3Npb25QYXJ0X19zdGFydEhlaWdodAACYXAAAQACYXEAAgACYXIAAwACYXMABAACYXQABQECYXUAAgolc19fY29uZmlnAQJhdgAJALUJAgkBAWgCBQR0aGlzCQECYXUABQFhAAJhdwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCCQECYXYABQJhdAECYXgFAmF5AmF6AmFBAmFCAmF3CQC5CQIJAMwIAgIIJXMlZCVkJWQJAMwIAgUCYXkJAMwIAgUCYXoJAMwIAgUCYUEJAMwIAgUCYUIJAMwIAgUCYXcFA25pbAUBYQECYUMFAmF5AmF6AmFBAmFCAmF3CQECYXgFBQJheQkApAMBBQJhegkApAMBBQJhQQkApAMBBQJhQgUCYXcBAmFEAAQBcgkAoggBCQECYWYAAwkAAQIFAXICBlN0cmluZwQCYUUFAXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFFBQR0aGlzAQJhRgAEAmFHCQECYUQABAFyCQCdCAIFAmFHCQECYWUAAwkAAQIFAXICBlN0cmluZwQCYUUFAXIJANkEAQUCYUUDCQABAgUBcgIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJhSAECYUkEAmFKCQEBZwECEVBlcm1pc3Npb24gZGVuaWVkBAFyCQECYUYAAwkAAQIFAXICCkJ5dGVWZWN0b3IEAmFLBQFyAwkAAAIIBQJhSQ9jYWxsZXJQdWJsaWNLZXkFAmFLBgUCYUoDCQABAgUBcgIEVW5pdAMJAAACCAUCYUkGY2FsbGVyBQR0aGlzBgUCYUoJAAIBAgtNYXRjaCBlcnJvcgACYUwAAQACYU0AAgACYU4AAwACYU8ABAACYVAABQACYVEABgECYVIBAmFTCQC5CQIJAMwIAgIKJXMlc19fbG9jawkAzAgCBQJhUwUDbmlsBQFhAQJhVAECYVMJALUJAgkBAWgCBQR0aGlzCQECYVIBBQJhUwUBYQECYVUIAmFWAmFXAmFYAmFZAmFaAmJhAmJiAmJjCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCBQJhVgkAzAgCBQJhVwkAzAgCBQJhWAkAzAgCBQJhWQkAzAgCBQJhWgkAzAgCBQJiYQkAzAgCBQJiYgkAzAgCBQJiYwUDbmlsBQFhAQJiZAcCYVYCYVcCYVgCYVkCYVoCYmECYmMJAQJhVQgFAmFWCQCkAwEFAmFXCQCkAwEFAmFYCQCkAwEFAmFZCQCkAwEFAmFaCQCkAwEFAmJhCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQCkAwEFAmJjAQJiZQACDyVzX19uZXh0VXNlck51bQECYmYBAmFTCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX191c2VyMm51bQkAzAgCBQJhUwUDbmlsBQFhAQJiZwEBVQkAuQkCCQDMCAICGSVzJXMlc19fbWFwcGluZ19fbnVtMnVzZXIJAMwIAgUBVQUDbmlsBQFhAQJiaAECYVYJALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFAmFWCQDMCAICBmFtb3VudAUDbmlsBQFhAQJiaQECYVYJALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFAmFWCQDMCAICBXN0YXJ0BQNuaWwFAWEBAmJqAQJhVgkAuQkCCQDMCAICFiVzJWQlc19fcGFyYW1CeVVzZXJOdW0JAMwIAgUCYVYJAMwIAgIIZHVyYXRpb24FA25pbAUBYQECYmsBAmFWCQC5CQIJAMwIAgIWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkAzAgCBQJhVgkAzAgCAgFrBQNuaWwFAWEBAmJsAQJhVgkAuQkCCQDMCAICFiVzJWQlc19fcGFyYW1CeVVzZXJOdW0JAMwIAgUCYVYJAMwIAgIBYgUDbmlsBQFhAQJibQICYVYCYm4JALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCBQJhVgkAzAgCAgFrCQDMCAIFAmJuBQNuaWwFAWEBAmJvAgJhVgJibgkAuQkCCQDMCAICFyVzJWQlcyVkX19wYXJhbUJ5UGVyaW9kCQDMCAIFAmFWCQDMCAICAWIJAMwIAgUCYm4FA25pbAUBYQECYnAAAh4lcyVzX19zdGF0c19fYWN0aXZlVG90YWxMb2NrZWQBAmJxAAIlJXMlc19fc3RhdHNfX2xvY2tzRHVyYXRpb25TdW1JbkJsb2NrcwECYnIAAhclcyVzX19zdGF0c19fbG9ja3NDb3VudAECYnMAAh0lcyVzX19zdGF0c19fYWN0aXZlVXNlcnNDb3VudAECYnQBAmFWCQC5CQIJAMwIAgIgJXMlZF9fdXNlckJvb3N0RW1pc3Npb25MYXN0SW50VjIJAMwIAgUCYVYFA25pbAUBYQECYnUCAmFWAmJ2CQC5CQIJAMwIAgIgJXMlZF9fdXNlckJvb3N0RW1pc3Npb25MYXN0SW50VjIJAMwIAgUCYVYJAMwIAgUCYnYFA25pbAUBYQECYncBAmFWCQC5CQIJAMwIAgIRJXMlZF9fbWF4Qm9vc3RJbnQJAMwIAgUCYVYFA25pbAUBYQECYngAAhglcyVzX19tYXhCb29zdEludF9fdG90YWwBAmJ5AQJhVgkAuQkCCQDMCAICJCVzJWRfX3VzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbAkAzAgCBQJhVgUDbmlsBQFhAQJiegECYVYJALkJAgkAzAgCAhYlcyVkX191c2VyQm9vc3RDbGFpbWVkCQDMCAIFAmFWBQNuaWwFAWEBAmJBAAIWJXMlc19fZ3d4Q2FjaGVkX190b3RhbAECYkIAAhwlc19fZ3d4Q2FjaGVkVG90YWxDb3JyZWN0aXZlAQJiQwQCYkQCYkUBaQJiRgkAuQkCCQDMCAICCiVzJXMlcyVzJWQJAMwIAgIEdm90ZQkAzAgCBQJiRAkAzAgCBQJiRQkAzAgCCQClCAEFAWkJAMwIAgkApAMBBQJiRgUDbmlsBQFhAQJiRwECYkYJALkJAgkAzAgCAgQlcyVkCQDMCAICC3N0YXJ0SGVpZ2h0CQDMCAIJAKQDAQUCYkYFA25pbAUBYQECYkgACQC5CQIJAMwIAgICJXMJAMwIAgIOY3VycmVudEVwb2NoVWkFA25pbAUBYQECYkkCAmJKAmJGCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICEnZvdGluZ1Jlc3VsdFN0YWtlZAkAzAgCBQJiSgkAzAgCCQCkAwEFAmJGBQNuaWwFAWEBAmJLAgJiSgJiRgkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAhp2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbAkAzAgCBQJiSgkAzAgCCQCkAwEFAmJGBQNuaWwFAWEBAmJMAgJiSgJiRgkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAip2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3RVcGRhdGVIZWlnaHQJAMwIAgUCYkoJAMwIAgkApAMBBQJiRgUDbmlsBQFhAQJiTQMCYkoBaQJiRgkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdAkAzAgCBQJiSgkAzAgCCQClCAEFAWkJAMwIAgkApAMBBQJiRgUDbmlsBQFhAQJiTgMCYkoBaQJiRgkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICEnZvdGVTdGFrZWRJbnRlZ3JhbAkAzAgCBQJiSgkAzAgCCQClCAEFAWkJAMwIAgkApAMBBQJiRgUDbmlsBQFhAQJiTwMCYkoBaQJiRgkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICInZvdGVTdGFrZWRJbnRlZ3JhbExhc3RVcGRhdGVIZWlnaHQJAMwIAgUCYkoJAMwIAgkApQgBBQFpCQDMCAIJAKQDAQUCYkYFA25pbAUBYQECYlADAmJKAWkCYkYJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAhZ2b3RlU3Rha2VkSW50ZWdyYWxMYXN0CQDMCAIFAmJKCQDMCAIJAKUIAQUBaQkAzAgCCQCkAwEFAmJGBQNuaWwFAWEBAmJRAgJiUgJiSgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgZzdGFrZWQJAMwIAgUCYlIJAMwIAgUCYkoFA25pbAUBYQACYlMJAQFWAAACYWEJAQFYAQUCYlMAAmJUCQECYWIBBQJhYQACYlUJAQJhYwEFAmFhAAJiVgkBAmFkAQUCYWEAAmJXCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJALkJAgkAzAgCAgIlcwkAzAgCAhZscFN0YWtpbmdQb29sc0NvbnRyYWN0BQNuaWwFAWEJAQFlAQIubHBfc3Rha2luZ19wb29scyBjb250cmFjdCBhZGRyZXNzIGlzIHVuZGVmaW5lZAkBAWUBAilpbnZhbGlkIGxwX3N0YWtpbmdfcG9vbHMgY29udHJhY3QgYWRkcmVzcwACYlgJALkJAgkAzAgCAgIlcwkAzAgCAhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQNuaWwFAWEAAmJZCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQJiUwUCYlgAAmJaCgACY2EJAPwHBAUCYlQCFWdldEJvb3N0Q29lZmZSRUFET05MWQUDbmlsBQNuaWwDCQABAgUCY2ECA0ludAUCY2EJAAIBCQCsAgIJAAMBBQJjYQIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQJjYgECY2MEAmNkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQJiWQkBAmJIAAQCY2UJALkJAgkAzAgCAgQlcyVzCQDMCAICKXRvdGFsQ2FjaGVkR3d4Q29ycmVjdGlvbl9fYWN0aXZhdGlvbkVwb2NoBQNuaWwFAWEEAmNmCQCaCAIFBHRoaXMFAmNlBAJjZwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYkEAAAAEAmNoAwkBCWlzRGVmaW5lZAEFAmNmCQBnAgUCY2QJAQV2YWx1ZQEFAmNmBwQCY2kDAwUCY2gFAmNjBwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYkIAAAAAAAkAlgMBCQDMCAIAAAkAzAgCCQBkAgUCY2cFAmNpBQNuaWwBAmNqCAJjawJjbAJhVwJjbQJhWQJjbgJjbwJhSQQCY3AJALkJAgkAzAgCAhElcyVzJXMlc19faGlzdG9yeQkAzAgCBQJjawkAzAgCBQJjbAkAzAgCCQDYBAEIBQJhSQ10cmFuc2FjdGlvbklkBQNuaWwFAWEEAmNxCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUCYVcJAMwIAgkApAMBBQJjbQkAzAgCCQCkAwEFAmFZCQDMCAIJAKQDAQUCY24JAMwIAgkApAMBBQJjbwUDbmlsBQFhCQELU3RyaW5nRW50cnkCBQJjcAUCY3EBAmNyBAJjcwJjdAJjdQJjdgQCY3cJAQJicQAEAmN4CQECYnIABAJjeQkBAmJzAAQCY3oJAQJicAAEAmNBCQEBawIFBHRoaXMFAmN3BAJjQgkBAWsCBQR0aGlzBQJjeAQCY0MJAQFrAgUEdGhpcwUCY3kEAmNECQEBawIFBHRoaXMFAmN6CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjdwkAZAIFAmNBBQJjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY3gJAGQCBQJjQgUCY3UJAMwIAgkBDEludGVnZXJFbnRyeQIFAmN5CQBkAgUCY0MFAmN2CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjegkAZAIFAmNEBQJjcwUDbmlsAQJjRQMCY0YCY0cCY0gEAmNJAOgHCQBpAgkAZAIJAGgCBQJjRgUCY0gFAmNHBQJjSQECY0oIAmFTAmFWAmFXAmFYAmFZAmNuAmNvAmJuBAJjSwkBAmJoAQUCYVYEAmNMCQECYmkBBQJhVgQCY00JAQJiagEFAmFWBAJjTgkBAmJrAQUCYVYEAmNPCQECYmwBBQJhVgQCY1AJAQJibQIFAmFWBQJibgQCY1EJAQJibwIFAmFWBQJibgQCYmMJAQJjRQMFAmNuBQJjbwUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjSwUCYVcJAMwIAgkBDEludGVnZXJFbnRyeQIFAmNMBQJhWAkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY00FAmFZCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjTgUCY24JAMwIAgkBDEludGVnZXJFbnRyeQIFAmNPBQJjbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY1AFAmNuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjUQUCY28JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFSAQUCYVMJAQJiZAcFAmFWBQJhVwUCYVgFAmFZBQJjbgUCY28FAmJjBQNuaWwBAmNSAgJhSQJjUwMJAGYCCQCQAwEIBQJhSQhwYXltZW50cwABCQEBZwECG29ubHkgb25lIHBheW1lbnQgaXMgYWxsb3dlZAMJAAACCQCQAwEIBQJhSQhwYXltZW50cwAAAAAEAmNUCQCRAwIIBQJhSQhwYXltZW50cwAAAwkBAiE9AgkBBXZhbHVlAQgFAmNUB2Fzc2V0SWQFAmNTCQEBZwECG2ludmFsaWQgYXNzZXQgaWQgaW4gcGF5bWVudAgFAmNUBmFtb3VudAECY1UCAmFTAmNWBAJjVwIFZW1wdHkEAmNYCQECYmYBBQJhUwQCYVYJAQt2YWx1ZU9yRWxzZQIJAKIIAQUCY1gFAmNXBAJjbgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQECYmsBBQJhVgAABAJjbwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQECYmwBBQJhVgAABAJjWQkBAmNFAwUCY24FAmNvBQJjVgQCYmMDCQBmAgAABQJjWQAABQJjWQUCYmMBAmNaAQJhUwkBAmNVAgUCYVMFBmhlaWdodAECZGEABAJkYgQCY2QJAQV2YWx1ZQEJAJoIAgUCYlkJAQJiSAAEAmRjCQBlAgUCY2QAAQMJAGYCAAAFAmRjCQEBZwECDWludmFsaWQgZXBvY2gJAJQKAgUCY2QFAmRjBAJjZAgFAmRiAl8xBAJkYwgFAmRiAl8yBAJkZAkBBXZhbHVlAQkAmggCBQJiWQkBAmJHAQUCY2QJAJQKAgUCZGMFAmRkAQJkZQECYkoEAmRmAAQEAmRnAAUEAmRoCgACY2EJAPwHBAUCYlMCIGdldFBvb2xDb25maWdCeUxwQXNzZXRJZFJFQURPTkxZCQDMCAIFAmJKBQNuaWwFA25pbAMJAAECBQJjYQIJTGlzdFtBbnldBQJjYQkAAgEJAKwCAgkAAwEFAmNhAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0EAmJECgACY2EJAJEDAgUCZGgFAmRmAwkAAQIFAmNhAgZTdHJpbmcFAmNhCQACAQkArAICCQADAQUCY2ECGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwQCYkUKAAJjYQkAkQMCBQJkaAUCZGcDCQABAgUCY2ECBlN0cmluZwUCY2EJAAIBCQCsAgIJAAMBBQJjYQIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQCUCgIFAmJEBQJiRQECZGkCAmJKAmJSBAJhUwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYlIEAmRqCQECZGEABAJkYwgFAmRqAl8xBAJkZAgFAmRqAl8yBAJkawkBAmRlAQUCYkoEAmJECAUCZGsCXzEEAmJFCAUCZGsCXzIEAmRsCQECYkMEBQJiRAUCYkUFAmFTBQJkYwQCZG0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUCYlkFAmRsAAAFAmRtAQJkbgICYkoCYlIEAmRvCQELdmFsdWVPckVsc2UCCQCaCAIFAmJVCQECYlECBQJiUgUCYkoAAAQCZG0JAQJkaQIFAmJKBQJiUgMJAAACBQJkbwAAAAAFAmRtAQJkcAECYkoEAmRxCQECZGEABAJkYwgFAmRxAl8xBAJkZAgFAmRxAl8yBAJkcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQJiWQkBAmJJAgUCYkoFAmRjAAAEAmRzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJiSQIFAmJKBQJkYwUCZHIFAmRzAQJkdAECYkoEAmR1CQECZGEABAJkYwgFAmR1Al8xBAJkZAgFAmR1Al8yBAJkcwkBAmRwAQUCYkoEAmR2CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJiSwIFAmJKBQJkYwAABAJkdwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYkwCBQJiSgUCZGMFAmRkBAJkeAkAZQIFBmhlaWdodAUCZHcEAmR5CQBkAgkAaAIFAmR4BQJkcwUCZHYFAmR5AQJkegICYkoCZEEEAmRCCQECZGEABAJkYwgFAmRCAl8xBAJkZAgFAmRCAl8yBAJkcwkBAmRwAQUCYkoEAmRDCQBkAgUCZHMFAmRBBAJkeQkBAmR0AQUCYkoJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJiSQIFAmJKBQJkYwUCZEMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJiTAIFAmJKBQJkYwUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYksCBQJiSgUCZGMFAmR5BQNuaWwBAmREAgJiSgJiUgQCZEUJAQJkYQAEAmRjCAUCZEUCXzEEAmRkCAUCZEUCXzIEAmFTCQERQGV4dHJOYXRpdmUoMTA2MikBBQJiUgQCZEYJAQJkbgIFAmJKBQJiUgQCZEcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmJOAwUCYkoFAmFTBQJkYwAABAJkSAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYk8DBQJiSgUCYVMFAmRjBQJkZAQCZEkJAGUCBQZoZWlnaHQFAmRIBAJkSgkAZAIJAGgCBQJkSQUCZEYFAmRHBQJkSgECZEsDAmJKAmJSAmRMBAJkTQkBAmRhAAQCZGMIBQJkTQJfMQQCZGQIBQJkTQJfMgQCYVMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmJSBAJkTgkBAmRpAgUCYkoFAmJSBAJkTwMJAAACBQJkTgAABQNuaWwEAmRBAwUCZEwFAmROCQEBLQEFAmROBAJkUAkBAmR6AgUCYkoFAmRBBAJkSgkBAmREAgUCYkoFAmJSBAJkUQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJPAwUCYkoFAmFTBQJkYwUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYk4DBQJiSgUCYVMFAmRjBQJkSgUDbmlsCQDOCAIFAmRQBQJkUQUCZE8BAmRSAgJiSgJiUgQCZFMJAQJkYQAEAmRjCAUCZFMCXzEEAmRkCAUCZFMCXzIEAmFTCQERQGV4dHJOYXRpdmUoMTA2MikBBQJiUgQCZFQJAQJiUAMFAmJKBQJhUwUCZGMEAmRVCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmRUAAAEAmRWCQECYk0DBQJiSgUCYVMFAmRjBAJkVwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJkVgAABAJkSgkBAmREAgUCYkoFAmJSBAJkeQkBAmR0AQUCYkoEAmRYCQBlAgUCZEoFAmRVBAJkWQkAZQIFAmR5BQJkVwkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJkVAUCZEoJAMwIAgkBDEludGVnZXJFbnRyeQIFAmRWBQJkeQUDbmlsBQJkWAUCZFkBAmRaAAQCZWEJAQFuAgUCYlQJAQJhZwAEAmViCQCaCAIFBHRoaXMJAQJhagAEAmVjCQCaCAIFBHRoaXMJAQJhawAEAmVkCQEBbgIFAmJUCQECYW0ABAJjSAMJAGYCBQZoZWlnaHQFAmVkBQJlZAUGaGVpZ2h0BAJlZQQBcgUCZWIDCQABAgUBcgIDSW50BAJlZgUBcgkAlgMBCQDMCAIJAGUCBQJjSAUCZWYJAMwIAgAABQNuaWwDCQABAgUBcgIEVW5pdAAACQACAQILTWF0Y2ggZXJyb3IEAmVnCQBpAgkAaAIFAmVhCQBlAgUCYloAAQUCYloEAmVoCQELdmFsdWVPckVsc2UCBQJlYwAABAJlaQkAZAIJAGgCBQJlZwUCZWUFAmVoCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhawAFAmVpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWoABQZoZWlnaHQFA25pbAUCZWkBAmVqAwJiSgJiUgJlawQCZWwJAJ0IAgUEdGhpcwkBAmFSAQUCYlIDCQAAAgUCZWwFBHVuaXQJAJUKAwAABQNuaWwCFXVzZXJSZWNvcmQ6OmlzOjplbXB0eQQCZW0JALUJAgkBBXZhbHVlAQUCZWwFAWEEAmVuCQCRAwIFAmVtBQJhTAQCZW8CBWVtcHR5BAJlcAMJAQIhPQIFAmJKBQJlbwQCZXEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQJiUwkBAU8BBQJiSgkBAWUBCQCsAgICFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUCYkoJARFAZXh0ck5hdGl2ZSgxMDUwKQIFAmJTCQEBUQEFAmVxAwUCZWsAAAkBAWcBCQCsAgICKG5vdCByZWFkb25seSBtb2RlOiB1bnN1cHBvcnRlZCBscCBhc3NldCAFAmJKBAJlcgkBAmJ1AgUCZW4FAmJKBAJlcwkBAmJ0AQUCZW4EAmV0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmVyCQEBawIFBHRoaXMFAmVzBAJlaQgJAQJkWgACXzIEAmV1CQBlAgUCZWkFAmV0AwkAZgIAAAUCZXUJAQFnAQISd3JvbmcgY2FsY3VsYXRpb25zBAJldgkBAmRSAgUCYkoFAmJSBAJldwgFAmV2Al8xBAJleAgFAmV2Al8yBAJleQgFAmV2Al8zBAJlegkAawMFAmV1BQJlcAUBZAQCZUEDCQAAAgUCZXkAAAAACQBrAwUCZXoFAmV4BQJleQQCZUIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCZXIFAmVpBQNuaWwFAmV3BAJlQwkAuQkCCQDMCAIJAKQDAQUCZXQJAMwIAgkApAMBBQJldQkAzAgCCQCkAwEFAmVwCQDMCAIJAKQDAQUCZXgJAMwIAgkApAMBBQJleQUDbmlsAgE6CQCVCgMFAmVBBQJlQgUCZUMBAmVEAgJhSQJhWQQCZUUJAQJhdgAEAmVGCQCRAwIFAmVFBQJhcAQCYXkJANkEAQUCZUYEAmF6CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZUUFAmFxBAJhQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmVFBQJhcgQCYUIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJlRQUCYXMDCQECIT0CCQCQAwEIBQJhSQhwYXltZW50cwABCQEBZwECNGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEAmNUCQCRAwIIBQJhSQhwYXltZW50cwAABAJlRwgFAmNUBmFtb3VudAMJAQIhPQIFAmF5CQEFdmFsdWUBCAUCY1QHYXNzZXRJZAkBAWcBCQCsAgIJAKwCAgIeaW52YWxpZCBhc3NldCBpcyBpbiBwYXltZW50IC0gBQJlRgIMIGlzIGV4cGVjdGVkBAJlSAkBAmJlAAQCYlIJAKUIAQgFAmFJBmNhbGxlcgQCZUkJAQlpc0RlZmluZWQBCQCiCAEJAQJiZgEFAmJSBAJlbgMFAmVJCQEFdmFsdWUBCQCiCAEJAQJiZgEFAmJSCQCkAwEJAQFuAgUEdGhpcwUCZUgEAmFWCQENcGFyc2VJbnRWYWx1ZQEFAmVuBAJjbQUGaGVpZ2h0BAJjTAkBAmJpAQUCZW4EAmNNCQECYmoBBQJlbgQCY0sJAQJiaAEFAmVuAwMJAGYCBQJhegUCZUcJAQIhPQIIBQJhSQZjYWxsZXIFAmJXBwkBAWcBCQCsAgICImFtb3VudCBpcyBsZXNzIHRoZW4gbWluTG9ja0Ftb3VudD0JAKQDAQUCYXoDCQBmAgUCYUEFAmFZCQEBZwEJAKwCAgItcGFzc2VkIGR1cmF0aW9uIGlzIGxlc3MgdGhlbiBtaW5Mb2NrRHVyYXRpb249CQCkAwEFAmFBAwkAZgIFAmFZBQJhQgkBAWcBCQCsAgICMHBhc3NlZCBkdXJhdGlvbiBpcyBncmVhdGVyIHRoZW4gbWF4TG9ja0R1cmF0aW9uPQkApAMBBQJhQgMDBQJlSQkAZwIJAGQCCQEBbgIFBHRoaXMFAmNMCQEBbgIFBHRoaXMFAmNNBQJjbQcJAQFnAQI2dGhlcmUgaXMgYW4gYWN0aXZlIGxvY2sgLSBjb25zaWRlciB0byB1c2UgaW5jcmVhc2VMb2NrAwkAZgIJAQFrAgUEdGhpcwUCY0sAAAkBAWcBCQCsAgICNHRoZXJlIGFyZSBsb2NrZWQgV1hzIC0gY29uc2lkZXIgdG8gdXNlIGluY3JlYXNlTG9jayAFAmNLBAJlSgkAawMFAmFZBQFjBQJhQgQCZUsJAGsDBQJlRwUCZUoFAWMEAmVMCQEBcQEJAPwHBAUCYXcCFWNhbGNHd3hQYXJhbXNSRUFET05MWQkAzAgCBQJlSwkAzAgCBQJjbQkAzAgCBQJhWQUDbmlsBQNuaWwEAmNuCQEBdAEJAJEDAgUCZUwAAAQCY28JAQF0AQkAkQMCBQJlTAABBAJibgkApAMBCQEBdAEJAJEDAgUCZUwAAgQCY2cJAQJjYgEHBAJlcwkBAmJ0AQUCZW4EAmVpCAkBAmRaAAJfMgQCZU0DBQJlSQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJlSAkAZAIFAmFWAAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmJmAQUCYlIFAmVuCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJiZwEFAmVuBQJiUgUDbmlsCQCUCgIJAM4IAgkAzQgCCQDOCAIJAM4IAgUCZU0JAQJjSggFAmJSBQJlbgUCZUcFAmNtBQJhWQUCY24FAmNvBQJibgkBAmNyBAUCZUcFAmFZAAEDBQJlSQAAAAEJAQJjaggCBGxvY2sFAmJSBQJlRwUCY20FAmFZBQJjbgUCY28FAmFJCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJlcwUCZWkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJiQQAJAGQCBQJjZwUCZUsFA25pbAUCZUsRAmFJAQtjb25zdHJ1Y3RvcgYCZU4CZU8CYXoCZVACZVECYXcEAmVSCQECYUgBBQJhSQMJAAACBQJlUgUCZVIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJlAAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhdQAJAQJhQwUFAmVPBQJhegUCZVAFAmVRBQJhdwkAzAgCCQELU3RyaW5nRW50cnkCCQEBQQAFAmVOBQNuaWwJAQJjcgQAAAAAAAAAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhSQEHbG9ja1JlZgMCYVkCZVMCZVQEAmVVCQECZUQCBQJhSQUCYVkEAmVWCAUCZVUCXzEEAmVLCAUCZVUCXzIEAmVXCQClCAEIBQJhSQZjYWxsZXIEAmVYAwMJAAACBQJlUwIABgkAAAIFAmVUAQAFBHVuaXQJAPwHBAUBdwIKY3JlYXRlUGFpcgkAzAgCBQF6CQDMCAIFAmVTCQDMCAIFAmVXCQDMCAIFAmVUBQNuaWwFA25pbAMJAAACBQJlWAUCZVgEAmVZCQD8BwQFAmF3AhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAmFJBmNhbGxlcgkAzAgCBQJlSwUDbmlsBQNuaWwDCQAAAgUCZVkFAmVZCQCUCgIFAmVWBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFJAQRsb2NrAQJhWQQCZVoJAQJlRAIFAmFJBQJhWQQCZVYIBQJlWgJfMQQCZUsIBQJlWgJfMgQCZVkJAPwHBAUCYXcCFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkJAMwIAgkApQgBCAUCYUkGY2FsbGVyCQDMCAIFAmVLBQNuaWwFA25pbAMJAAACBQJlWQUCZVkJAJQKAgUCZVYFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYUkBDGluY3JlYXNlTG9jawECZmEEAmVFCQECYXYABAJlRgkAkQMCBQJlRQUCYXAEAmF5CQDZBAEFAmVGBAJhQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmVFBQJhcgQCYUIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJlRQUCYXMEAmVHCQECY1ICBQJhSQUCYXkEAmJSCQClCAEIBQJhSQZjYWxsZXIEAmVtCQECYVQBBQJiUgQCZW4JAJEDAgUCZW0FAmFMBAJmYgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmVtBQJhTQQCY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJlbQUCYU4EAmZjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZW0FAmFPBAJmZAkAZAIFAmNtBQJmYwQCZmUJAJYDAQkAzAgCCQBlAgUCZmQFBmhlaWdodAkAzAgCAAAFA25pbAQCZmYJAGQCBQJmYgUCZUcEAmZnCQBkAgUCZmUFAmZhAwkAZgIAAAUCZmEJAQFnAQIaZHVyYXRpb24gaXMgbGVzcyB0aGVuIHplcm8DCQBmAgUCYUEFAmZnCQEBZwEJAKwCAgItbG9ja0R1cmF0aW9uTmV3IGlzIGxlc3MgdGhlbiBtaW5Mb2NrRHVyYXRpb249CQCkAwEFAmFBAwkAZgIFAmZnBQJhQgkBAWcBCQCsAgICRGRlbHRhRHVyYXRpb24gKyBleGlzdGVkTG9ja0R1cmF0aW9uIGlzIGdyZWF0ZXIgdGhlbiBtYXhMb2NrRHVyYXRpb249CQCkAwEFAmFCBAJlSgkAawMFAmZnBQFjBQJhQgQCZUsJAGsDBQJmZgUCZUoFAWMEAmVZCQD8BwQFAmF3AhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAmFJBmNhbGxlcgkAzAgCBQJlSwUDbmlsBQNuaWwDCQAAAgUCZVkFAmVZBAJmaAUGaGVpZ2h0BAJlTAkBAXEBCQD8BwQFAmF3AhVjYWxjR3d4UGFyYW1zUkVBRE9OTFkJAMwIAgUCZUsJAMwIAgUCZmgJAMwIAgUCZmcFA25pbAUDbmlsBAJjbgkBAXQBCQCRAwIFAmVMAAAEAmNvCQEBdAEJAJEDAgUCZUwAAQQCYm4JAKQDAQkBAXQBCQCRAwIFAmVMAAIEAmZpCQECY1oBBQJiUgQCZmoJAGUCBQJlSwUCZmkDCQBmAgAABQJmagkBAWcBCQCsAgICGGd3eERpZmYgaXMgbGVzcyB0aGVuIDA6IAkApAMBBQJmagQCY2cJAQJjYgEHBAJmawkBAmNiAQYJAM4IAgkAzQgCCQDOCAIJAQJjSggFAmJSBQJlbgUCZmYFAmZoBQJmZwUCY24FAmNvBQJibgkBAmNyBAUCZUcFAmZhAAAAAAkBAmNqCAIEbG9jawUCYlIFAmVHBQJjbQUCZmcFAmNuBQJjbwUCYUkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJiQQAJAGQCBQJjZwUCZmoFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhSQEMY2xhaW1XeEJvb3N0AgJiSgJiUgMJAQIhPQIFAmJVCAUCYUkGY2FsbGVyCQEBZwECEnBlcm1pc3Npb25zIGRlbmllZAQCZmwJAQJlagMFAmJKBQJiUgcEAmZtCAUCZmwCXzEEAmVCCAUCZmwCXzIEAmVDCAUCZmwCXzMJAJQKAgUCZUIJAMwIAgUCZm0FA25pbAJhSQEUY2xhaW1XeEJvb3N0UkVBRE9OTFkCAmJKAmJSBAJmbgkBAmVqAwUCYkoFAmJSBgQCZm0IBQJmbgJfMQQCZUIIBQJmbgJfMgQCZUMIBQJmbgJfMwkAlAoCBQNuaWwJAMwIAgUCZm0JAMwIAgUCZUMFA25pbAJhSQEGdW5sb2NrAQJhUwQCZW0JAQJhVAEFAmFTBAJlbgkAkQMCBQJlbQUCYUwEAmZiCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZW0FAmFNBAJjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmVtBQJhTgQCZmMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJlbQUCYU8EAmZkCQBkAgUCY20FAmZjBAJlRQkBAmF2AAQCYXkJANkEAQkAkQMCBQJlRQUCYXADCQBnAgUCZmQFBmhlaWdodAkBAWcBCQCsAgIJAKwCAgIFd2FpdCAJAKQDAQUCZmQCCiB0byB1bmxvY2sDCQBnAgAABQJmYgkBAWcBAhFub3RoaW5nIHRvIHVubG9jawQCYm4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUCYXcJAQJhbgAAAAkAzQgCCQDNCAIJAM4IAgkBAmNKCAUCYVMFAmVuAAAFAmNtBQJmYwAAAAAJAKQDAQUCYm4JAQJjcgQJAQEtAQUCZmIAAAAAAP///////////wEJAQJjaggCBnVubG9jawUCYVMFAmZiBQJjbQUCZmMAAAAABQJhSQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYVMFAmZiBQJheQJhSQETZ3d4VXNlckluZm9SRUFET05MWQECYVMEAmJjCQECY1oBBQJhUwkAlAoCBQNuaWwJAMwIAgUCYmMFA25pbAJhSQEXdXNlck1heER1cmF0aW9uUkVBRE9OTFkBAmJSBAJlRQkBAmF2AAQCYUIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJlRQUCYXMEAmVsCQCdCAIFBHRoaXMJAQJhUgEFAmJSAwkAAAIFAmVsBQR1bml0CQCUCgIFA25pbAkAlAoCAgRsb2NrBQJhQgQCZW0JALUJAgkBBXZhbHVlAQUCZWwFAWEEAmNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZW0FAmFOBAJmYwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmVtBQJhTwQCZmQJAGQCBQJjbQUCZmMEAmZlCQCWAwEJAMwIAgkAZQIFAmZkBQZoZWlnaHQJAMwIAgAABQNuaWwEAmZvCQBlAgUCYUIFAmZlCQCUCgIFA25pbAkAlAoCAgxpbmNyZWFzZUxvY2sFAmZvAmFJASBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQICYVMCY1YEAmJjCQECY1UCBQJhUwUCY1YJAJQKAgUDbmlsBQJiYwJhSQEZZ2V0VG90YWxDYWNoZWRHd3hSRUFET05MWQAJAJQKAgUDbmlsCQECY2IBBgJhSQEVb25Cb29zdEVtaXNzaW9uVXBkYXRlAAQCZVIDCQAAAggFAmFJBmNhbGxlcgUCYlQGCQECYUgBBQJhSQMJAAACBQJlUgUCZVIJAQJkWgAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYUkBEm9uU3Rha2VkVm90ZVVwZGF0ZQMCYkoCYlICZEwEAmVSAwkAAAIIBQJhSQZjYWxsZXIFAmJVBgkBAmFIAQUCYUkDCQAAAgUCZVIFAmVSBAJkTwkBAmRLAwUCYkoFAmJSBQJkTAkAlAoCBQJkTwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhSQEdZ2V0Vm90aW5nUmVzdWx0U3Rha2VkUkVBRE9OTFkBAmJKCQCUCgIFA25pbAkBAmRwAQUCYkoCYUkBJWdldFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsUkVBRE9OTFkBAmJKCQCUCgIFA25pbAkBAmR0AQUCYkoCYUkBHGdldFVzZXJWb3RlRmluYWxpemVkUkVBRE9OTFkCAmJKAmJSCQCUCgIFA25pbAkBAmRpAgUCYkoFAmJSAmFJASFnZXRVc2VyVm90ZVN0YWtlZEludGVncmFsUkVBRE9OTFkCAmJKAmJSCQCUCgIFA25pbAkBAmREAgUCYkoFAmJSAQJmcAECZnEABAJmcgQBcgkBAmFGAAMJAAECBQFyAgpCeXRlVmVjdG9yBAJhSwUBcgUCYUsDCQABAgUBcgIEVW5pdAgFAmZwD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJmcAlib2R5Qnl0ZXMJAJEDAggFAmZwBnByb29mcwAABQJmclpY1bA=", "height": 2710362, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FisWfXcmP2HDisjzh8QUDSVtj5gya5bWqp5HuzvvbgSt Next: AuGR23H1WV8mAjnRLoKH5dQnxjNH7SeF9ifWm75DfPFJ Diff:
OldNewDifferences
99
1010 let d = c
1111
12-let e = "boosting.ride"
13-
14-let f = 18
15-
16-let g = 1000000000000000000
17-
18-let h = toBigInt(g)
19-
20-let i = [1, 3, 6, 12, 24, 48]
21-
22-let j = 1440
23-
24-let k = 43800
25-
26-func l (m) = makeString([e, ": ", m], "")
12+func e (f) = makeString(["boosting.ride:", f], " ")
2713
2814
29-func n (m) = throw(l(m))
15+func g (f) = throw(e(f))
3016
3117
32-func o (p,q) = valueOrErrorMessage(getString(p, q), l((("mandatory this." + q) + " is not defined")))
18+func h (i,j) = valueOrErrorMessage(getString(i, j), e((("mandatory this." + j) + " is not defined")))
3319
3420
35-func r (p,q) = valueOrElse(getInteger(p, q), 0)
21+func k (i,j) = valueOrElse(getInteger(i, j), 0)
3622
3723
38-func s (p,q,t) = valueOrElse(getInteger(p, q), t)
24+func l (i,j,m) = valueOrElse(getInteger(i, j), m)
3925
4026
41-func u (p,q) = valueOrErrorMessage(getInteger(p, q), l((("mandatory this." + q) + " is not defined")))
27+func n (i,j) = valueOrErrorMessage(getInteger(i, j), e((("mandatory this." + j) + " is not defined")))
4228
4329
44-func v (w) = if ((0 > w))
45- then -(w)
46- else w
30+func o (p) = if ((0 > p))
31+ then -(p)
32+ else p
4733
4834
49-func x (y,z) = if ((y >= 0))
50- then y
51- else n((valueOrElse(z, "value") + " should be positive"))
35+func q (p) = {
36+ let r = p
37+ if ($isInstanceOf(r, "List[Any]"))
38+ then {
39+ let s = r
40+ s
41+ }
42+ else g("fail to cast into List[Any]")
43+ }
5244
5345
54-func A () = makeString(["%s%s", "config", "referralsContractAddress"], a)
46+func t (p) = {
47+ let r = p
48+ if ($isInstanceOf(r, "Int"))
49+ then {
50+ let u = r
51+ u
52+ }
53+ else g("fail to cast into Int")
54+ }
5555
5656
57-let B = addressFromStringValue(o(this, A()))
58-
59-let C = makeString(["%s%s", "referral", "programName"], a)
60-
61-let D = "wxlock"
62-
63-let E = valueOrElse(getString(this, C), D)
64-
65-func F () = "%s%s__config__factoryAddress"
57+func v () = makeString(["%s%s", "config", "referralsContractAddress"], a)
6658
6759
68-let G = 1
60+let w = addressFromStringValue(h(this, v()))
6961
70-let H = 2
62+let x = makeString(["%s%s", "referral", "programName"], a)
7163
72-let I = 3
64+let y = "wxlock"
7365
74-let J = 4
66+let z = valueOrElse(getString(this, x), y)
7567
76-let K = 5
77-
78-let L = 6
79-
80-let M = 7
81-
82-let N = 8
83-
84-let O = 9
85-
86-let P = 10
87-
88-let Q = 11
89-
90-func R () = "%s__factoryConfig"
68+func A () = "%s%s__config__factoryAddress"
9169
9270
93-func S (T) = makeString(["%s%s%s", T, "mappings__lpAsset2PoolContract"], a)
71+let B = 1
72+
73+let C = 2
74+
75+let D = 3
76+
77+let E = 4
78+
79+let F = 5
80+
81+let G = 6
82+
83+let H = 7
84+
85+let I = 8
86+
87+let J = 9
88+
89+let K = 10
90+
91+let L = 11
92+
93+func M () = "%s__factoryConfig"
9494
9595
96-func U (V) = makeString(["%s%s", "poolWeight", V], a)
96+func N () = "%s__lpTokensList"
9797
9898
99-func W (X,Y) = ((("%s%s__poolWeight__" + X) + "__") + toString(Y))
99+func O (P) = makeString(["%s%s%s", P, "mappings__lpAsset2PoolContract"], a)
100100
101101
102-func Z () = addressFromStringValue(o(this, F()))
102+func Q (R) = makeString(["%s%s", "poolWeight", R], a)
103103
104104
105-func aa (ab) = split(o(ab, R()), a)
105+func S (T,U) = ((("%s%s__poolWeight__" + T) + "__") + toString(U))
106106
107107
108-func ac (ad) = addressFromStringValue(ad[H])
108+func V () = addressFromStringValue(h(this, A()))
109109
110110
111-func ae (ad) = addressFromStringValue(ad[K])
111+func W () = split(valueOrElse(getString(V(), N()), ""), a)
112112
113113
114-func af (ad) = addressFromStringValue(ad[G])
114+func X (Y) = split(h(Y, M()), a)
115115
116116
117-func ag (ad) = addressFromStringValue(ad[P])
117+func Z (aa) = addressFromStringValue(aa[C])
118118
119119
120-func ah () = "%s__managerPublicKey"
120+func ab (aa) = addressFromStringValue(aa[F])
121121
122122
123-func ai () = "%s__managerVaultAddress"
123+func ac (aa) = addressFromStringValue(aa[B])
124124
125125
126-func aj () = "%s%s__ratePerBlock__current"
126+func ad (aa) = addressFromStringValue(aa[K])
127127
128128
129-func ak () = "%s%s__ratePerBlockMax__current"
129+func ae () = "%s__managerPublicKey"
130130
131131
132-func al () = "%s%s__emission__startBlock"
132+func af () = "%s__managerVaultAddress"
133133
134134
135-func am () = "%s%s__boostingV2__startBlock"
135+func ag () = "%s%s__ratePerBlock__current"
136136
137137
138-func an () = "%s%s__boostingV2__integral"
138+func ah () = "%s%s__ratePerBlockMax__current"
139139
140140
141-func ao () = "%s%s__emission__duration"
141+func ai () = "%s%s__emission__startBlock"
142142
143143
144-func ap () = "%s%s__emission__endBlock"
144+func aj () = "%s%s__boostingV2__startBlock"
145145
146146
147-let aq = 1
148-
149-let ar = 2
150-
151-let as = 3
152-
153-let at = 4
154-
155-let au = 5
156-
157-let av = 6
158-
159-func aw () = "%s__config"
147+func ak () = "%s%s__boostingV2__integral"
160148
161149
162-func ax () = split(o(this, aw()), a)
150+func al () = "%s%s__emission__duration"
163151
164152
165-let ay = ax()
166-
167-let az = fromBase58String(ay[aq])
168-
169-let aA = valueOrErrorMessage(parseInt(ay[ar]), l("invalid min lock amount"))
170-
171-let aB = valueOrErrorMessage(parseInt(ay[as]), l("invalid min lock duration"))
172-
173-let aC = valueOrErrorMessage(parseInt(ay[at]), l("invalid max lock duration"))
174-
175-let aD = valueOrErrorMessage(addressFromString(ay[au]), l("invalid math contract address"))
176-
177-let aE = valueOrErrorMessage(parseInt(ay[av]), l("invalid blocks in period"))
178-
179-func aF (az,aA,aB,aC,aD) = makeString(["%s%d%d%d%s", az, aA, aB, aC, aD], a)
153+func am () = "%s%s__emission__endBlock"
180154
181155
182-func aG (az,aA,aB,aC,aD) = aF(az, toString(aA), toString(aB), toString(aC), aD)
156+func an () = "%s__nextPeriod"
183157
184158
185-func aH () = {
186- let aI = getString(ai())
187- if ($isInstanceOf(aI, "String"))
159+func ao () = "%s%s__gwxRewardEmissionPart__startHeight"
160+
161+
162+let ap = 1
163+
164+let aq = 2
165+
166+let ar = 3
167+
168+let as = 4
169+
170+let at = 5
171+
172+func au () = "%s__config"
173+
174+
175+func av () = split(h(this, au()), a)
176+
177+
178+let aw = addressFromStringValue(av()[at])
179+
180+func ax (ay,az,aA,aB,aw) = makeString(["%s%d%d%d", ay, az, aA, aB, aw], a)
181+
182+
183+func aC (ay,az,aA,aB,aw) = ax(ay, toString(az), toString(aA), toString(aB), aw)
184+
185+
186+func aD () = {
187+ let r = getString(af())
188+ if ($isInstanceOf(r, "String"))
188189 then {
189- let aJ = aI
190- addressFromStringValue(aJ)
190+ let aE = r
191+ addressFromStringValue(aE)
191192 }
192193 else this
193194 }
194195
195196
196-func aK () = {
197- let aL = aH()
198- let aI = getString(aL, ah())
199- if ($isInstanceOf(aI, "String"))
197+func aF () = {
198+ let aG = aD()
199+ let r = getString(aG, ae())
200+ if ($isInstanceOf(r, "String"))
200201 then {
201- let aJ = aI
202- fromBase58String(aJ)
202+ let aE = r
203+ fromBase58String(aE)
203204 }
204- else if ($isInstanceOf(aI, "Unit"))
205+ else if ($isInstanceOf(r, "Unit"))
205206 then unit
206207 else throw("Match error")
207208 }
208209
209210
210-func aM (aN) = {
211- let aO = n("Permission denied")
212- let aI = aK()
213- if ($isInstanceOf(aI, "ByteVector"))
211+func aH (aI) = {
212+ let aJ = g("Permission denied")
213+ let r = aF()
214+ if ($isInstanceOf(r, "ByteVector"))
214215 then {
215- let aP = aI
216- if ((aN.callerPublicKey == aP))
216+ let aK = r
217+ if ((aI.callerPublicKey == aK))
217218 then true
218- else aO
219+ else aJ
219220 }
220- else if ($isInstanceOf(aI, "Unit"))
221- then if ((aN.caller == this))
221+ else if ($isInstanceOf(r, "Unit"))
222+ then if ((aI.caller == this))
222223 then true
223- else aO
224+ else aJ
224225 else throw("Match error")
225226 }
226227
227228
228-let aQ = 1
229+let aL = 1
229230
230-let aR = 2
231+let aM = 2
231232
232-let aS = 3
233+let aN = 3
233234
234-let aT = 4
235+let aO = 4
235236
236-let aU = 5
237+let aP = 5
237238
238-let aV = 6
239+let aQ = 6
239240
240-func aW (aX,aY) = makeString(["%s%s%s__lock", toString(aX), {
241- let aI = aY
242- if ($isInstanceOf(aI, "ByteVector"))
243- then {
244- let aZ = aI
245- toBase58String(aZ)
246- }
247- else if ($isInstanceOf(aI, "Unit"))
248- then "legacy"
249- else throw("Match error")
250- }], a)
241+func aR (aS) = makeString(["%s%s__lock", aS], a)
251242
252243
253-func ba (aX,aY) = split(o(this, aW(aX, aY)), a)
244+func aT (aS) = split(h(this, aR(aS)), a)
254245
255246
256-func bb (aX) = makeString(["%s%s__gwxAmountTotal", toString(aX)], a)
247+func aU (aV,aW,aX,aY,aZ,ba,bb,bc) = makeString(["%d%d%d%d%d%d%d%d", aV, aW, aX, aY, aZ, ba, bb, bc], a)
257248
258249
259-func bc (bd,be,bf,bg,bh) = makeString(["%d%d%d%d%d%d", toString(bd), toString(be), toString(bf), toString(lastBlock.timestamp), toString(bg), toString(bh)], a)
250+func bd (aV,aW,aX,aY,aZ,ba,bc) = aU(aV, toString(aW), toString(aX), toString(aY), toString(aZ), toString(ba), toString(lastBlock.timestamp), toString(bc))
260251
261252
262-func bi () = "%s__nextUserNum"
253+func be () = "%s__nextUserNum"
263254
264255
265-func bj (aX) = makeString(["%s%s%s__mapping__user2num", aX], a)
256+func bf (aS) = makeString(["%s%s%s__mapping__user2num", aS], a)
266257
267258
268-func bk (Y) = makeString(["%s%s%s__mapping__num2user", Y], a)
259+func bg (U) = makeString(["%s%s%s__mapping__num2user", U], a)
269260
270261
271-func bl () = "%s%s__stats__activeTotalLocked"
262+func bh (aV) = makeString(["%s%d%s__paramByUserNum", aV, "amount"], a)
272263
273264
274-func bm () = "%s%s__stats__locksDurationSumInBlocks"
265+func bi (aV) = makeString(["%s%d%s__paramByUserNum", aV, "start"], a)
275266
276267
277-func bn () = "%s%s__stats__locksCount"
268+func bj (aV) = makeString(["%s%d%s__paramByUserNum", aV, "duration"], a)
278269
279270
280-func bo () = "%s%s__stats__activeUsersCount"
271+func bk (aV) = makeString(["%s%d%s__paramByUserNum", aV, "k"], a)
281272
282273
283-func bp (bq) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bq)], a)
274+func bl (aV) = makeString(["%s%d%s__paramByUserNum", aV, "b"], a)
284275
285276
286-func br (bq,bs) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bq), bs], a)
277+func bm (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "k", bn], a)
287278
288279
289-func bt (bq) = makeString(["%s%d__maxBoostInt", toString(bq)], a)
280+func bo (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "b", bn], a)
290281
291282
292-func bu () = "%s%s__maxBoostInt__total"
283+func bp () = "%s%s__stats__activeTotalLocked"
293284
294285
295-func bv (bq) = makeString(["%s%d__userBoostAvaliableToClaimTotal", toString(bq)], a)
286+func bq () = "%s%s__stats__locksDurationSumInBlocks"
296287
297288
298-func bw (bq) = makeString(["%s%d__userBoostClaimed", toString(bq)], a)
289+func br () = "%s%s__stats__locksCount"
299290
300291
301-func bx () = "%s%s__gwx__total"
292+func bs () = "%s%s__stats__activeUsersCount"
302293
303294
304-func by (bz,bA,p,bB) = makeString(["%s%s%s%s%d", "vote", bz, bA, toString(p), toString(bB)], a)
295+func bt (aV) = makeString(["%s%d__userBoostEmissionLastIntV2", aV], a)
305296
306297
307-func bC (bB) = makeString(["%s%d", "startHeight", toString(bB)], a)
298+func bu (aV,bv) = makeString(["%s%d__userBoostEmissionLastIntV2", aV, bv], a)
308299
309300
310-func bD () = makeString(["%s", "currentEpochUi"], a)
301+func bw (aV) = makeString(["%s%d__maxBoostInt", aV], a)
311302
312303
313-func bE (bF,bB) = makeString(["%s%s%d", "votingResultStaked", bF, toString(bB)], a)
304+func bx () = "%s%s__maxBoostInt__total"
314305
315306
316-func bG (bF,bB) = makeString(["%s%s%d", "votingResultStakedIntegral", bF, toString(bB)], a)
307+func by (aV) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aV], a)
317308
318309
319-func bH (bF,bB) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bF, toString(bB)], a)
310+func bz (aV) = makeString(["%s%d__userBoostClaimed", aV], a)
320311
321312
322-func bI (bF,p,bB) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bF, toString(p), toString(bB)], a)
313+func bA () = "%s%s__gwxCached__total"
323314
324315
325-func bJ (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegral", bF, toString(p), toString(bB)], a)
316+func bB () = "%s__gwxCachedTotalCorrective"
326317
327318
328-func bK (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bF, toString(p), toString(bB)], a)
319+func bC (bD,bE,i,bF) = makeString(["%s%s%s%s%d", "vote", bD, bE, toString(i), toString(bF)], a)
329320
330321
331-func bL (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bF, toString(p), toString(bB)], a)
322+func bG (bF) = makeString(["%s%d", "startHeight", toString(bF)], a)
332323
333324
334-func bM (bN,bF) = makeString(["%s%s%s", "staked", bN, bF], a)
325+func bH () = makeString(["%s", "currentEpochUi"], a)
335326
336327
337-let bO = Z()
328+func bI (bJ,bF) = makeString(["%s%s%d", "votingResultStaked", bJ, toString(bF)], a)
338329
339-let ad = aa(bO)
340330
341-let bP = ae(ad)
331+func bK (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegral", bJ, toString(bF)], a)
342332
343-let bQ = af(ad)
344333
345-let bR = ag(ad)
334+func bL (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bJ, toString(bF)], a)
346335
347-let bS = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), l("lp_staking_pools contract address is undefined"))), l("invalid lp_staking_pools contract address"))
348336
349-let bT = makeString(["%s", "votingEmissionContract"], a)
337+func bM (bJ,i,bF) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bJ, toString(i), toString(bF)], a)
350338
351-let bU = addressFromStringValue(getStringValue(bO, bT))
352339
353-let bV = makeString(["%s", "votingEmissionRateContract"], a)
340+func bN (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegral", bJ, toString(i), toString(bF)], a)
354341
355-let bW = {
356- let bX = invoke(bP, "getBoostCoeffREADONLY", nil, nil)
357- if ($isInstanceOf(bX, "Int"))
358- then bX
359- else throw(($getType(bX) + " couldn't be cast to Int"))
342+
343+func bO (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bJ, toString(i), toString(bF)], a)
344+
345+
346+func bP (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bJ, toString(i), toString(bF)], a)
347+
348+
349+func bQ (bR,bJ) = makeString(["%s%s%s", "staked", bR, bJ], a)
350+
351+
352+let bS = V()
353+
354+let aa = X(bS)
355+
356+let bT = ab(aa)
357+
358+let bU = ac(aa)
359+
360+let bV = ad(aa)
361+
362+let bW = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), e("lp_staking_pools contract address is undefined"))), e("invalid lp_staking_pools contract address"))
363+
364+let bX = makeString(["%s", "votingEmissionContract"], a)
365+
366+let bY = addressFromStringValue(getStringValue(bS, bX))
367+
368+let bZ = {
369+ let ca = invoke(bT, "getBoostCoeffREADONLY", nil, nil)
370+ if ($isInstanceOf(ca, "Int"))
371+ then ca
372+ else throw(($getType(ca) + " couldn't be cast to Int"))
360373 }
361374
362-func bY (aX) = {
363- let aI = getString(this, bj(toString(aX)))
364- if ($isInstanceOf(aI, "String"))
365- then {
366- let aJ = aI
367- valueOrErrorMessage(parseInt(aJ), l("invalid user number"))
368- }
369- else if ($isInstanceOf(aI, "Unit"))
370- then n("invalid user")
371- else throw("Match error")
375+func cb (cc) = {
376+ let cd = getIntegerValue(bY, bH())
377+ let ce = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
378+ let cf = getInteger(this, ce)
379+ let cg = valueOrElse(getInteger(this, bA()), 0)
380+ let ch = if (isDefined(cf))
381+ then (cd >= value(cf))
382+ else false
383+ let ci = if (if (ch)
384+ then cc
385+ else false)
386+ then valueOrElse(getInteger(this, bB()), 0)
387+ else 0
388+ max([0, (cg + ci)])
372389 }
373390
374391
375-func bZ () = valueOrElse(getInteger(this, bx()), 0)
376-
377-
378-func ca (aX) = {
379- let cb = "getLockedGwxAmount"
380- let cc = valueOrErrorMessage({
381- let aI = getString(bU, bV)
382- if ($isInstanceOf(aI, "Unit"))
383- then unit
384- else if ($isInstanceOf(aI, "String"))
385- then {
386- let aJ = aI
387- addressFromString(aJ)
388- }
389- else throw("Match error")
390- }, l("invalid voting emission rate address"))
391- let cd = {
392- let bX = invoke(bU, cb, [toString(aX)], nil)
393- if ($isInstanceOf(bX, "Int"))
394- then bX
395- else throw(($getType(bX) + " couldn't be cast to Int"))
396- }
397- let ce = {
398- let bX = invoke(cc, cb, [toString(aX)], nil)
399- if ($isInstanceOf(bX, "Int"))
400- then bX
401- else throw(($getType(bX) + " couldn't be cast to Int"))
402- }
403- let cf = max([cd, ce])
404- cf
392+func cj (ck,cl,aW,cm,aY,cn,co,aI) = {
393+ let cp = makeString(["%s%s%s%s__history", ck, cl, toBase58String(aI.transactionId)], a)
394+ let cq = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aW), toString(cm), toString(aY), toString(cn), toString(co)], a)
395+ StringEntry(cp, cq)
405396 }
406397
407398
408-func cg (ch,ci,bd,cj,bf,bg,aN) = {
409- let ck = makeString(["%s%s%s%s__history", ch, ci, toBase58String(aN.transactionId)], a)
410- let cl = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(bd), toString(cj), toString(bf), toString(bg)], a)
411- StringEntry(ck, cl)
399+func cr (cs,ct,cu,cv) = {
400+ let cw = bq()
401+ let cx = br()
402+ let cy = bs()
403+ let cz = bp()
404+ let cA = k(this, cw)
405+ let cB = k(this, cx)
406+ let cC = k(this, cy)
407+ let cD = k(this, cz)
408+[IntegerEntry(cw, (cA + ct)), IntegerEntry(cx, (cB + cu)), IntegerEntry(cy, (cC + cv)), IntegerEntry(cz, (cD + cs))]
412409 }
413410
414411
415-func cm (cn,co,cp,cq) = {
416- let cr = bm()
417- let cs = bn()
418- let ct = bo()
419- let cu = bl()
420- let cv = r(this, cr)
421- let cw = r(this, cs)
422- let cx = r(this, ct)
423- let cy = r(this, cu)
424-[IntegerEntry(cr, (cv + co)), IntegerEntry(cs, (cw + cp)), IntegerEntry(ct, (cx + cq)), IntegerEntry(cu, (cy + cn))]
412+func cE (cF,cG,cH) = {
413+ let cI = 1000
414+ (((cF * cH) + cG) / cI)
425415 }
426416
427417
428-func cz (aX,aY,bd,be,bf,bg,bh) = [StringEntry(aW(aX, aY), bc(bd, be, bf, bg, bh))]
418+func cJ (aS,aV,aW,aX,aY,cn,co,bn) = {
419+ let cK = bh(aV)
420+ let cL = bi(aV)
421+ let cM = bj(aV)
422+ let cN = bk(aV)
423+ let cO = bl(aV)
424+ let cP = bm(aV, bn)
425+ let cQ = bo(aV, bn)
426+ let bc = cE(cn, co, height)
427+[IntegerEntry(cK, aW), IntegerEntry(cL, aX), IntegerEntry(cM, aY), IntegerEntry(cN, cn), IntegerEntry(cO, co), IntegerEntry(cP, cn), IntegerEntry(cQ, co), StringEntry(aR(aS), bd(aV, aW, aX, aY, cn, co, bc))]
428+ }
429429
430430
431-func cA (aN,cB) = if ((size(aN.payments) > 1))
432- then n("only one payment is allowed")
433- else if ((size(aN.payments) == 0))
431+func cR (aI,cS) = if ((size(aI.payments) > 1))
432+ then g("only one payment is allowed")
433+ else if ((size(aI.payments) == 0))
434434 then 0
435435 else {
436- let cC = aN.payments[0]
437- if ((value(cC.assetId) != cB))
438- then n("invalid asset id in payment")
439- else cC.amount
436+ let cT = aI.payments[0]
437+ if ((value(cT.assetId) != cS))
438+ then g("invalid asset id in payment")
439+ else cT.amount
440440 }
441441
442442
443-func cD (aX) = valueOrElse(getInteger(this, bb(aX)), 0)
444-
445-
446-func cE () = {
447- let cF = {
448- let cG = value(getInteger(bU, bD()))
449- let cH = (cG - 1)
450- if ((0 > cH))
451- then n("invalid epoch")
452- else $Tuple2(cG, cH)
453- }
454- let cG = cF._1
455- let cH = cF._2
456- let cI = value(getInteger(bU, bC(cG)))
457- $Tuple2(cH, cI)
443+func cU (aS,cV) = {
444+ let cW = "empty"
445+ let cX = bf(aS)
446+ let aV = valueOrElse(getString(cX), cW)
447+ let cn = valueOrElse(getInteger(bk(aV)), 0)
448+ let co = valueOrElse(getInteger(bl(aV)), 0)
449+ let cY = cE(cn, co, cV)
450+ let bc = if ((0 > cY))
451+ then 0
452+ else cY
453+ bc
458454 }
459455
460456
461-func cJ (bF) = {
462- let cK = 4
463- let cL = 5
464- let cM = {
465- let bX = invoke(bO, "getPoolConfigByLpAssetIdREADONLY", [bF], nil)
466- if ($isInstanceOf(bX, "List[Any]"))
467- then bX
468- else throw(($getType(bX) + " couldn't be cast to List[Any]"))
457+func cZ (aS) = cU(aS, height)
458+
459+
460+func da () = {
461+ let db = {
462+ let cd = value(getInteger(bY, bH()))
463+ let dc = (cd - 1)
464+ if ((0 > dc))
465+ then g("invalid epoch")
466+ else $Tuple2(cd, dc)
469467 }
470- let bz = {
471- let bX = cM[cK]
472- if ($isInstanceOf(bX, "String"))
473- then bX
474- else throw(($getType(bX) + " couldn't be cast to String"))
475- }
476- let bA = {
477- let bX = cM[cL]
478- if ($isInstanceOf(bX, "String"))
479- then bX
480- else throw(($getType(bX) + " couldn't be cast to String"))
481- }
482- $Tuple2(bz, bA)
468+ let cd = db._1
469+ let dc = db._2
470+ let dd = value(getInteger(bY, bG(cd)))
471+ $Tuple2(dc, dd)
483472 }
484473
485474
486-func cN (bF,bN) = {
487- let aX = addressFromStringValue(bN)
488- let cO = cE()
489- let cH = cO._1
490- let cI = cO._2
491- let cP = cJ(bF)
492- let bz = cP._1
493- let bA = cP._2
494- let cQ = by(bz, bA, aX, cH)
495- let cR = valueOrElse(getInteger(bU, cQ), 0)
496- cR
475+func de (bJ) = {
476+ let df = 4
477+ let dg = 5
478+ let dh = {
479+ let ca = invoke(bS, "getPoolConfigByLpAssetIdREADONLY", [bJ], nil)
480+ if ($isInstanceOf(ca, "List[Any]"))
481+ then ca
482+ else throw(($getType(ca) + " couldn't be cast to List[Any]"))
483+ }
484+ let bD = {
485+ let ca = dh[df]
486+ if ($isInstanceOf(ca, "String"))
487+ then ca
488+ else throw(($getType(ca) + " couldn't be cast to String"))
489+ }
490+ let bE = {
491+ let ca = dh[dg]
492+ if ($isInstanceOf(ca, "String"))
493+ then ca
494+ else throw(($getType(ca) + " couldn't be cast to String"))
495+ }
496+ $Tuple2(bD, bE)
497497 }
498498
499499
500-func cS (bF,bN) = {
501- let cT = valueOrElse(getInteger(bQ, bM(bN, bF)), 0)
502- let cR = cN(bF, bN)
503- if ((cT == 0))
504- then 0
505- else cR
500+func di (bJ,bR) = {
501+ let aS = addressFromStringValue(bR)
502+ let dj = da()
503+ let dc = dj._1
504+ let dd = dj._2
505+ let dk = de(bJ)
506+ let bD = dk._1
507+ let bE = dk._2
508+ let dl = bC(bD, bE, aS, dc)
509+ let dm = valueOrElse(getInteger(bY, dl), 0)
510+ dm
506511 }
507512
508513
509-func cU (bF) = {
510- let cV = cE()
511- let cH = cV._1
512- let cI = cV._2
513- let cW = valueOrElse(getInteger(bU, bE(bF, cH)), 0)
514- let cX = valueOrElse(getInteger(this, bE(bF, cH)), cW)
515- cX
514+func dn (bJ,bR) = {
515+ let do = valueOrElse(getInteger(bU, bQ(bR, bJ)), 0)
516+ let dm = di(bJ, bR)
517+ if ((do == 0))
518+ then 0
519+ else dm
516520 }
517521
518522
519-func cY (bF) = {
520- let cZ = cE()
521- let cH = cZ._1
522- let cI = cZ._2
523- let cX = cU(bF)
524- let da = valueOrElse(getInteger(this, bG(bF, cH)), 0)
525- let db = valueOrElse(getInteger(this, bH(bF, cH)), cI)
526- let dc = (height - db)
527- let dd = ((dc * cX) + da)
528- dd
523+func dp (bJ) = {
524+ let dq = da()
525+ let dc = dq._1
526+ let dd = dq._2
527+ let dr = valueOrElse(getInteger(bY, bI(bJ, dc)), 0)
528+ let ds = valueOrElse(getInteger(this, bI(bJ, dc)), dr)
529+ ds
529530 }
530531
531532
532-func de (bF,df) = {
533- let dg = cE()
534- let cH = dg._1
535- let cI = dg._2
536- let cX = cU(bF)
537- let dh = (cX + df)
538- let dd = cY(bF)
539-[IntegerEntry(bE(bF, cH), dh), IntegerEntry(bH(bF, cH), height), IntegerEntry(bG(bF, cH), dd)]
533+func dt (bJ) = {
534+ let du = da()
535+ let dc = du._1
536+ let dd = du._2
537+ let ds = dp(bJ)
538+ let dv = valueOrElse(getInteger(this, bK(bJ, dc)), 0)
539+ let dw = valueOrElse(getInteger(this, bL(bJ, dc)), dd)
540+ let dx = (height - dw)
541+ let dy = ((dx * ds) + dv)
542+ dy
540543 }
541544
542545
543-func di (bF,bN) = {
544- let dj = cE()
545- let cH = dj._1
546- let cI = dj._2
547- let aX = addressFromStringValue(bN)
548- let dk = cS(bF, bN)
549- let dl = valueOrElse(getInteger(this, bJ(bF, aX, cH)), 0)
550- let dm = valueOrElse(getInteger(this, bK(bF, aX, cH)), cI)
551- let dn = (height - dm)
552- let do = ((dn * dk) + dl)
553- do
546+func dz (bJ,dA) = {
547+ let dB = da()
548+ let dc = dB._1
549+ let dd = dB._2
550+ let ds = dp(bJ)
551+ let dC = (ds + dA)
552+ let dy = dt(bJ)
553+[IntegerEntry(bI(bJ, dc), dC), IntegerEntry(bL(bJ, dc), height), IntegerEntry(bK(bJ, dc), dy)]
554554 }
555555
556556
557-func dp (bF,bN,dq) = {
558- let dr = cE()
559- let cH = dr._1
560- let cI = dr._2
561- let aX = addressFromStringValue(bN)
562- let ds = cN(bF, bN)
563- let dt = if ((ds == 0))
564- then nil
565- else {
566- let df = if (dq)
567- then ds
568- else -(ds)
569- let du = de(bF, df)
570- let do = di(bF, bN)
571- let dv = [IntegerEntry(bK(bF, aX, cH), height), IntegerEntry(bJ(bF, aX, cH), do)]
572- (du ++ dv)
573- }
574- dt
557+func dD (bJ,bR) = {
558+ let dE = da()
559+ let dc = dE._1
560+ let dd = dE._2
561+ let aS = addressFromStringValue(bR)
562+ let dF = dn(bJ, bR)
563+ let dG = valueOrElse(getInteger(this, bN(bJ, aS, dc)), 0)
564+ let dH = valueOrElse(getInteger(this, bO(bJ, aS, dc)), dd)
565+ let dI = (height - dH)
566+ let dJ = ((dI * dF) + dG)
567+ dJ
575568 }
576569
577570
578-func dw (bF,bN) = {
579- let dx = cE()
580- let cH = dx._1
581- let cI = dx._2
582- let aX = addressFromStringValue(bN)
583- let dy = bL(bF, aX, cH)
584- let dz = valueOrElse(getInteger(this, dy), 0)
585- let dA = bI(bF, aX, cH)
586- let dB = valueOrElse(getInteger(this, dA), 0)
587- let do = di(bF, bN)
588- let dd = cY(bF)
589- let dC = (do - dz)
590- let dD = (dd - dB)
591- $Tuple3([IntegerEntry(dy, do), IntegerEntry(dA, dd)], dC, dD)
571+func dK (bJ,bR,dL) = {
572+ let dM = da()
573+ let dc = dM._1
574+ let dd = dM._2
575+ let aS = addressFromStringValue(bR)
576+ let dN = di(bJ, bR)
577+ let dO = if ((dN == 0))
578+ then nil
579+ else {
580+ let dA = if (dL)
581+ then dN
582+ else -(dN)
583+ let dP = dz(bJ, dA)
584+ let dJ = dD(bJ, bR)
585+ let dQ = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
586+ (dP ++ dQ)
587+ }
588+ dO
592589 }
593590
594591
595-func dE () = {
596- let dF = u(bP, aj())
597- let dG = getInteger(this, am())
598- let dH = getInteger(this, an())
599- let dI = u(bP, ap())
600- let dJ = if ((height > dI))
601- then dI
592+func dR (bJ,bR) = {
593+ let dS = da()
594+ let dc = dS._1
595+ let dd = dS._2
596+ let aS = addressFromStringValue(bR)
597+ let dT = bP(bJ, aS, dc)
598+ let dU = valueOrElse(getInteger(this, dT), 0)
599+ let dV = bM(bJ, aS, dc)
600+ let dW = valueOrElse(getInteger(this, dV), 0)
601+ let dJ = dD(bJ, bR)
602+ let dy = dt(bJ)
603+ let dX = (dJ - dU)
604+ let dY = (dy - dW)
605+ $Tuple3([IntegerEntry(dT, dJ), IntegerEntry(dV, dy)], dX, dY)
606+ }
607+
608+
609+func dZ () = {
610+ let ea = n(bT, ag())
611+ let eb = getInteger(this, aj())
612+ let ec = getInteger(this, ak())
613+ let ed = n(bT, am())
614+ let cH = if ((height > ed))
615+ then ed
602616 else height
603- let dK = {
604- let aI = dG
605- if ($isInstanceOf(aI, "Int"))
617+ let ee = {
618+ let r = eb
619+ if ($isInstanceOf(r, "Int"))
606620 then {
607- let dL = aI
608- max([(dJ - dL), 0])
621+ let ef = r
622+ max([(cH - ef), 0])
609623 }
610- else if ($isInstanceOf(aI, "Unit"))
624+ else if ($isInstanceOf(r, "Unit"))
611625 then 0
612626 else throw("Match error")
613627 }
614- let dM = ((dF * (bW - 1)) / bW)
615- let dN = valueOrElse(dH, 0)
616- let dO = ((dM * dK) + dN)
617- $Tuple2([IntegerEntry(an(), dO), IntegerEntry(am(), height)], dO)
628+ let eg = ((ea * (bZ - 1)) / bZ)
629+ let eh = valueOrElse(ec, 0)
630+ let ei = ((eg * ee) + eh)
631+ $Tuple2([IntegerEntry(ak(), ei), IntegerEntry(aj(), height)], ei)
618632 }
619633
620634
621-func dP (bF,bN,dQ) = {
622- let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
623- let bq = bY(aX)
624- if ((bq == bq))
625- then {
626- let dR = "empty"
627- let dS = if ((bF != dR))
635+func ej (bJ,bR,ek) = {
636+ let el = getString(this, aR(bR))
637+ if ((el == unit))
638+ then $Tuple3(0, nil, "userRecord::is::empty")
639+ else {
640+ let em = split(value(el), a)
641+ let en = em[aL]
642+ let eo = "empty"
643+ let ep = if ((bJ != eo))
628644 then {
629- let dT = valueOrErrorMessage(getString(bO, S(bF)), l(("unsupported lp asset " + bF)))
630- getIntegerValue(bO, U(dT))
645+ let eq = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
646+ getIntegerValue(bS, Q(eq))
631647 }
632- else if (dQ)
648+ else if (ek)
633649 then 0
634- else n(("not readonly mode: unsupported lp asset " + bF))
635- let dU = br(bq, bF)
636- let dV = bp(bq)
637- let dW = valueOrElse(getInteger(this, dU), r(this, dV))
638- let dO = dE()._2
639- let dX = (dO - dW)
640- if ((0 > dX))
641- then n("wrong calculations")
650+ else g(("not readonly mode: unsupported lp asset " + bJ))
651+ let er = bu(en, bJ)
652+ let es = bt(en)
653+ let et = valueOrElse(getInteger(this, er), k(this, es))
654+ let ei = dZ()._2
655+ let eu = (ei - et)
656+ if ((0 > eu))
657+ then g("wrong calculations")
642658 else {
643- let dY = dw(bF, bN)
644- let dZ = dY._1
645- let ea = dY._2
646- let eb = dY._3
647- let ec = fraction(dX, dS, d)
648- let ed = if ((eb == 0))
659+ let ev = dR(bJ, bR)
660+ let ew = ev._1
661+ let ex = ev._2
662+ let ey = ev._3
663+ let ez = fraction(eu, ep, d)
664+ let eA = if ((ey == 0))
649665 then 0
650- else fraction(ec, ea, eb)
651- let ee = ([IntegerEntry(dU, dO)] ++ dZ)
652- let ef = makeString([toString(dW), toString(dX), toString(dS), toString(ea), toString(eb)], ":")
653- $Tuple3(ed, ee, ef)
666+ else fraction(ez, ex, ey)
667+ let eB = ([IntegerEntry(er, ei)] ++ ew)
668+ let eC = makeString([toString(et), toString(eu), toString(ep), toString(ex), toString(ey)], ":")
669+ $Tuple3(eA, eB, eC)
654670 }
655671 }
656- else throw("Strict value is not equal to itself.")
657672 }
658673
659674
660-func eg (aN,eh) = if (!(containsElement(i, eh)))
661- then n("invalid duration")
662- else {
663- let bf = (eh * k)
664- let ei = toBase58String(az)
665- if ((size(aN.payments) != 1))
666- then n("invalid payment - exact one payment must be attached")
667- else {
668- let cC = aN.payments[0]
669- let ej = cC.amount
670- if ((az != value(cC.assetId)))
671- then n((("invalid asset is in payment - " + ei) + " is expected"))
672- else {
673- let ek = bi()
674- let aX = aN.caller
675- let bN = toString(aX)
676- let el = isDefined(getString(bj(bN)))
677- let em = if (el)
678- then value(getString(bj(bN)))
679- else toString(u(this, ek))
680- let bq = parseIntValue(em)
681- let cj = height
682- if (if ((aA > ej))
683- then (aX != bS)
684- else false)
685- then n(("amount is less then minLockAmount=" + toString(aA)))
686- else if ((aB > bf))
687- then n(("passed duration is less then minLockDuration=" + toString(aB)))
688- else if ((bf > aC))
689- then n(("passed duration is greater then maxLockDuration=" + toString(aC)))
690- else {
691- let en = fraction(ej, bf, aC)
692- let eo = bZ()
693- let dV = bp(bq)
694- let dO = dE()._2
695- let ep = cD(aX)
696- let eq = reentrantInvoke(bR, "refreshUserReward", [aX.bytes], nil)
697- if ((eq == eq))
698- then {
699- let er = if (el)
700- then nil
701- else [IntegerEntry(ek, (bq + 1)), StringEntry(bj(bN), em), StringEntry(bk(em), bN)]
702- $Tuple2(((((er ++ cz(aX, aN.transactionId, ej, cj, bf, en, 0)) ++ cm(ej, bf, 1, if (el)
703- then 0
704- else 1)) :+ cg("lock", bN, ej, cj, bf, en, aN)) ++ [IntegerEntry(dV, dO), IntegerEntry(bx(), (eo + en)), IntegerEntry(bb(aX), (ep + en))]), en)
705- }
706- else throw("Strict value is not equal to itself.")
707- }
708- }
709- }
710- }
711-
712-
713-func es (aX,et) = {
714- let eu = ba(aX, et)
715- let ev = parseIntValue(eu[aQ])
716- let cj = parseIntValue(eu[aR])
717- let ew = parseIntValue(eu[aS])
718- let ex = (cj + ew)
719- let bh = parseIntValue(eu[aV])
720- let ey = ((height - cj) / aE)
721- let ez = fraction(toBigInt(ey), (toBigInt((8 * aE)) * h), toBigInt(ew))
722- let eA = if ((height > ex))
723- then ev
724- else (toInt(fraction(toBigInt(ev), (h - pow(toBigInt(5), 1, ez, f, f, DOWN)), h)) - bh)
725- eA
675+func eD (aI,aY) = {
676+ let eE = av()
677+ let eF = eE[ap]
678+ let ay = fromBase58String(eF)
679+ let az = parseIntValue(eE[aq])
680+ let aA = parseIntValue(eE[ar])
681+ let aB = parseIntValue(eE[as])
682+ if ((size(aI.payments) != 1))
683+ then g("invalid payment - exact one payment must be attached")
684+ else {
685+ let cT = aI.payments[0]
686+ let eG = cT.amount
687+ if ((ay != value(cT.assetId)))
688+ then g((("invalid asset is in payment - " + eF) + " is expected"))
689+ else {
690+ let eH = be()
691+ let bR = toString(aI.caller)
692+ let eI = isDefined(getString(bf(bR)))
693+ let en = if (eI)
694+ then value(getString(bf(bR)))
695+ else toString(n(this, eH))
696+ let aV = parseIntValue(en)
697+ let cm = height
698+ let cL = bi(en)
699+ let cM = bj(en)
700+ let cK = bh(en)
701+ if (if ((az > eG))
702+ then (aI.caller != bW)
703+ else false)
704+ then g(("amount is less then minLockAmount=" + toString(az)))
705+ else if ((aA > aY))
706+ then g(("passed duration is less then minLockDuration=" + toString(aA)))
707+ else if ((aY > aB))
708+ then g(("passed duration is greater then maxLockDuration=" + toString(aB)))
709+ else if (if (eI)
710+ then ((n(this, cL) + n(this, cM)) >= cm)
711+ else false)
712+ then g("there is an active lock - consider to use increaseLock")
713+ else if ((k(this, cK) > 0))
714+ then g(("there are locked WXs - consider to use increaseLock " + cK))
715+ else {
716+ let eJ = fraction(aY, c, aB)
717+ let eK = fraction(eG, eJ, c)
718+ let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, cm, aY], nil))
719+ let cn = t(eL[0])
720+ let co = t(eL[1])
721+ let bn = toString(t(eL[2]))
722+ let cg = cb(false)
723+ let es = bt(en)
724+ let ei = dZ()._2
725+ let eM = if (eI)
726+ then nil
727+ else [IntegerEntry(eH, (aV + 1)), StringEntry(bf(bR), en), StringEntry(bg(en), bR)]
728+ $Tuple2(((((eM ++ cJ(bR, en, eG, cm, aY, cn, co, bn)) ++ cr(eG, aY, 1, if (eI)
729+ then 0
730+ else 1)) :+ cj("lock", bR, eG, cm, aY, cn, co, aI)) ++ [IntegerEntry(es, ei), IntegerEntry(bA(), (cg + eK))]), eK)
731+ }
732+ }
733+ }
726734 }
727735
728736
729-@Callable(aN)
730-func constructor (eB,eC,aA,eD,eE,aD) = {
731- let eF = aM(aN)
732- if ((eF == eF))
733- then ([IntegerEntry(bi(), 0), StringEntry(aw(), aG(eC, aA, eD, eE, aD)), StringEntry(F(), eB)] ++ cm(0, 0, 0, 0))
737+@Callable(aI)
738+func constructor (eN,eO,az,eP,eQ,aw) = {
739+ let eR = aH(aI)
740+ if ((eR == eR))
741+ then ([IntegerEntry(be(), 0), StringEntry(au(), aC(eO, az, eP, eQ, aw)), StringEntry(A(), eN)] ++ cr(0, 0, 0, 0))
734742 else throw("Strict value is not equal to itself.")
735743 }
736744
737745
738746
739-@Callable(aN)
740-func lockRef (bf,eG,eH) = {
741- let eI = eg(aN, bf)
742- let eJ = eI._1
743- let en = eI._2
744- let eK = toString(aN.caller)
745- let eL = if (if ((eG == ""))
747+@Callable(aI)
748+func lockRef (aY,eS,eT) = {
749+ let eU = eD(aI, aY)
750+ let eV = eU._1
751+ let eK = eU._2
752+ let eW = toString(aI.caller)
753+ let eX = if (if ((eS == ""))
746754 then true
747- else (eH == base58''))
755+ else (eT == base58''))
748756 then unit
749- else invoke(B, "createPair", [E, eG, eK, eH], nil)
750- if ((eL == eL))
757+ else invoke(w, "createPair", [z, eS, eW, eT], nil)
758+ if ((eX == eX))
751759 then {
752- let eM = invoke(aD, "updateReferralActivity", [toString(aN.caller), en], nil)
753- if ((eM == eM))
754- then $Tuple2(eJ, unit)
760+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
761+ if ((eY == eY))
762+ then $Tuple2(eV, unit)
755763 else throw("Strict value is not equal to itself.")
756764 }
757765 else throw("Strict value is not equal to itself.")
759767
760768
761769
762-@Callable(aN)
763-func lock (bf) = {
764- let eN = eg(aN, bf)
765- let eJ = eN._1
766- let en = eN._2
767- let eM = invoke(aD, "updateReferralActivity", [toString(aN.caller), en], nil)
768- if ((eM == eM))
769- then $Tuple2(eJ, unit)
770+@Callable(aI)
771+func lock (aY) = {
772+ let eZ = eD(aI, aY)
773+ let eV = eZ._1
774+ let eK = eZ._2
775+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
776+ if ((eY == eY))
777+ then $Tuple2(eV, unit)
770778 else throw("Strict value is not equal to itself.")
771779 }
772780
773781
774782
775-@Callable(aN)
776-func claimWxBoost (bF,bN) = if ((bQ != aN.caller))
777- then n("permissions denied")
783+@Callable(aI)
784+func increaseLock (fa) = {
785+ let eE = av()
786+ let eF = eE[ap]
787+ let ay = fromBase58String(eF)
788+ let aA = parseIntValue(eE[ar])
789+ let aB = parseIntValue(eE[as])
790+ let eG = cR(aI, ay)
791+ let bR = toString(aI.caller)
792+ let em = aT(bR)
793+ let en = em[aL]
794+ let fb = parseIntValue(em[aM])
795+ let cm = parseIntValue(em[aN])
796+ let fc = parseIntValue(em[aO])
797+ let fd = (cm + fc)
798+ let fe = max([(fd - height), 0])
799+ let ff = (fb + eG)
800+ let fg = (fe + fa)
801+ if ((0 > fa))
802+ then g("duration is less then zero")
803+ else if ((aA > fg))
804+ then g(("lockDurationNew is less then minLockDuration=" + toString(aA)))
805+ else if ((fg > aB))
806+ then g(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aB)))
807+ else {
808+ let eJ = fraction(fg, c, aB)
809+ let eK = fraction(ff, eJ, c)
810+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
811+ if ((eY == eY))
812+ then {
813+ let fh = height
814+ let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, fh, fg], nil))
815+ let cn = t(eL[0])
816+ let co = t(eL[1])
817+ let bn = toString(t(eL[2]))
818+ let fi = cZ(bR)
819+ let fj = (eK - fi)
820+ if ((0 > fj))
821+ then g(("gwxDiff is less then 0: " + toString(fj)))
822+ else {
823+ let cg = cb(false)
824+ let fk = cb(true)
825+ (((cJ(bR, en, ff, fh, fg, cn, co, bn) ++ cr(eG, fa, 0, 0)) :+ cj("lock", bR, eG, cm, fg, cn, co, aI)) ++ [IntegerEntry(bA(), (cg + fj))])
826+ }
827+ }
828+ else throw("Strict value is not equal to itself.")
829+ }
830+ }
831+
832+
833+
834+@Callable(aI)
835+func claimWxBoost (bJ,bR) = if ((bU != aI.caller))
836+ then g("permissions denied")
778837 else {
779- let eO = dP(bF, bN, false)
780- let eP = eO._1
781- let ee = eO._2
782- let ef = eO._3
783- $Tuple2(ee, [eP])
838+ let fl = ej(bJ, bR, false)
839+ let fm = fl._1
840+ let eB = fl._2
841+ let eC = fl._3
842+ $Tuple2(eB, [fm])
784843 }
785844
786845
787846
788-@Callable(aN)
789-func claimWxBoostREADONLY (bF,bN) = {
790- let eQ = dP(bF, bN, true)
791- let eP = eQ._1
792- let ee = eQ._2
793- let ef = eQ._3
794- $Tuple2(nil, [eP, ef])
847+@Callable(aI)
848+func claimWxBoostREADONLY (bJ,bR) = {
849+ let fn = ej(bJ, bR, true)
850+ let fm = fn._1
851+ let eB = fn._2
852+ let eC = fn._3
853+ $Tuple2(nil, [fm, eC])
795854 }
796855
797856
798857
799-@Callable(aN)
800-func unlock (eR) = {
801- let aX = aN.caller
802- let bN = toString(aX)
803- let aY = fromBase58String(eR)
804- let eu = ba(aX, if ((eR == ""))
805- then unit
806- else aY)
807- let ev = parseIntValue(eu[aQ])
808- let cj = parseIntValue(eu[aR])
809- let ew = parseIntValue(eu[aS])
810- let bh = parseIntValue(eu[aV])
811- let bg = parseIntValue(eu[aU])
812- let ey = ((height - cj) / aE)
813- let eA = es(aX, if ((eR == ""))
814- then unit
815- else aY)
816- let en = fraction(ev, ew, aC)
817- let eS = min([fraction((ey * aE), en, aC), bg])
818- let eT = x((bg - eS), "gwxRemaining")
819- let eU = ca(aX)
820- if ((0 >= ev))
821- then n("nothing to unlock")
858+@Callable(aI)
859+func unlock (aS) = {
860+ let em = aT(aS)
861+ let en = em[aL]
862+ let fb = parseIntValue(em[aM])
863+ let cm = parseIntValue(em[aN])
864+ let fc = parseIntValue(em[aO])
865+ let fd = (cm + fc)
866+ let eE = av()
867+ let ay = fromBase58String(eE[ap])
868+ if ((fd >= height))
869+ then g((("wait " + toString(fd)) + " to unlock"))
870+ else if ((0 >= fb))
871+ then g("nothing to unlock")
872+ else {
873+ let bn = valueOrElse(getInteger(aw, an()), 0)
874+ (((cJ(aS, en, 0, cm, fc, 0, 0, toString(bn)) ++ cr(-(fb), 0, 0, -1)) :+ cj("unlock", aS, fb, cm, fc, 0, 0, aI)) :+ ScriptTransfer(addressFromStringValue(aS), fb, ay))
875+ }
876+ }
877+
878+
879+
880+@Callable(aI)
881+func gwxUserInfoREADONLY (aS) = {
882+ let bc = cZ(aS)
883+ $Tuple2(nil, [bc])
884+ }
885+
886+
887+
888+@Callable(aI)
889+func userMaxDurationREADONLY (bR) = {
890+ let eE = av()
891+ let aB = parseIntValue(eE[as])
892+ let el = getString(this, aR(bR))
893+ if ((el == unit))
894+ then $Tuple2(nil, $Tuple2("lock", aB))
822895 else {
823- let eo = bZ()
824- let ep = cD(aX)
825- let eV = x((ep - eS), "userGwxAmountTotalNew")
826- if ((eU > eV))
827- then n(("locked gwx amount: " + toString(eU)))
828- else {
829- let eq = reentrantInvoke(bR, "refreshUserReward", [aX.bytes], nil)
830- if ((eq == eq))
831- then ((((cz(aX, aY, ev, cj, ew, eT, (bh + eA)) ++ cm(-(eA), 0, 0, 0)) :+ cg("unlock", bN, eA, cj, ew, eS, aN)) :+ ScriptTransfer(aX, eA, az)) ++ [IntegerEntry(bx(), x((eo - eS), "gwxTotal")), IntegerEntry(bb(aX), eV)])
832- else throw("Strict value is not equal to itself.")
833- }
896+ let em = split(value(el), a)
897+ let cm = parseIntValue(em[aN])
898+ let fc = parseIntValue(em[aO])
899+ let fd = (cm + fc)
900+ let fe = max([(fd - height), 0])
901+ let fo = (aB - fe)
902+ $Tuple2(nil, $Tuple2("increaseLock", fo))
834903 }
835904 }
836905
837906
838907
839-@Callable(aN)
840-func gwxUserInfoREADONLY (bN) = {
841- let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
842- let bg = cD(aX)
843- $Tuple2(nil, [bg])
908+@Callable(aI)
909+func getUserGwxAmountAtHeightREADONLY (aS,cV) = {
910+ let bc = cU(aS, cV)
911+ $Tuple2(nil, bc)
844912 }
845913
846914
847915
848-@Callable(aN)
849-func userMaxDurationREADONLY (bN) = $Tuple2(nil, $Tuple2("increaseLock", aC))
916+@Callable(aI)
917+func getTotalCachedGwxREADONLY () = $Tuple2(nil, cb(true))
850918
851919
852920
853-@Callable(aN)
854-func getUserGwxAmountAtHeightREADONLY (bN,eW) = {
855- let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
856- let bg = cD(aX)
857- $Tuple2(nil, bg)
858- }
859-
860-
861-
862-@Callable(aN)
863-func getUserGwxAmount (bN) = {
864- let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
865- let bg = cD(aX)
866- $Tuple2(nil, bg)
867- }
868-
869-
870-
871-@Callable(aN)
872-func getGwxTotalREADONLY () = $Tuple2(nil, bZ())
873-
874-
875-
876-@Callable(aN)
921+@Callable(aI)
877922 func onBoostEmissionUpdate () = {
878- let eF = if ((aN.caller == bP))
923+ let eR = if ((aI.caller == bT))
879924 then true
880- else aM(aN)
881- if ((eF == eF))
882- then dE()
925+ else aH(aI)
926+ if ((eR == eR))
927+ then dZ()
883928 else throw("Strict value is not equal to itself.")
884929 }
885930
886931
887932
888-@Callable(aN)
889-func onStakedVoteUpdate (bF,bN,dq) = {
890- let eF = if ((aN.caller == bQ))
933+@Callable(aI)
934+func onStakedVoteUpdate (bJ,bR,dL) = {
935+ let eR = if ((aI.caller == bU))
891936 then true
892- else aM(aN)
893- if ((eF == eF))
937+ else aH(aI)
938+ if ((eR == eR))
894939 then {
895- let dt = dp(bF, bN, dq)
896- $Tuple2(dt, unit)
940+ let dO = dK(bJ, bR, dL)
941+ $Tuple2(dO, unit)
897942 }
898943 else throw("Strict value is not equal to itself.")
899944 }
900945
901946
902947
903-@Callable(aN)
904-func getVotingResultStakedREADONLY (bF) = $Tuple2(nil, cU(bF))
948+@Callable(aI)
949+func getVotingResultStakedREADONLY (bJ) = $Tuple2(nil, dp(bJ))
905950
906951
907952
908-@Callable(aN)
909-func getVotingResultStakedIntegralREADONLY (bF) = $Tuple2(nil, cY(bF))
953+@Callable(aI)
954+func getVotingResultStakedIntegralREADONLY (bJ) = $Tuple2(nil, dt(bJ))
910955
911956
912957
913-@Callable(aN)
914-func getUserVoteFinalizedREADONLY (bF,bN) = $Tuple2(nil, cN(bF, bN))
958+@Callable(aI)
959+func getUserVoteFinalizedREADONLY (bJ,bR) = $Tuple2(nil, di(bJ, bR))
915960
916961
917962
918-@Callable(aN)
919-func getUserVoteStakedIntegralREADONLY (bF,bN) = $Tuple2(nil, di(bF, bN))
963+@Callable(aI)
964+func getUserVoteStakedIntegralREADONLY (bJ,bR) = $Tuple2(nil, dD(bJ, bR))
920965
921966
922-@Verifier(eX)
923-func eY () = {
924- let eZ = {
925- let aI = aK()
926- if ($isInstanceOf(aI, "ByteVector"))
967+@Verifier(fp)
968+func fq () = {
969+ let fr = {
970+ let r = aF()
971+ if ($isInstanceOf(r, "ByteVector"))
927972 then {
928- let aP = aI
929- aP
973+ let aK = r
974+ aK
930975 }
931- else if ($isInstanceOf(aI, "Unit"))
932- then eX.senderPublicKey
976+ else if ($isInstanceOf(r, "Unit"))
977+ then fp.senderPublicKey
933978 else throw("Match error")
934979 }
935- sigVerify(eX.bodyBytes, eX.proofs[0], eZ)
980+ sigVerify(fp.bodyBytes, fp.proofs[0], fr)
936981 }
937982
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 8
77
88 let c = 100000000
99
1010 let d = c
1111
12-let e = "boosting.ride"
13-
14-let f = 18
15-
16-let g = 1000000000000000000
17-
18-let h = toBigInt(g)
19-
20-let i = [1, 3, 6, 12, 24, 48]
21-
22-let j = 1440
23-
24-let k = 43800
25-
26-func l (m) = makeString([e, ": ", m], "")
12+func e (f) = makeString(["boosting.ride:", f], " ")
2713
2814
29-func n (m) = throw(l(m))
15+func g (f) = throw(e(f))
3016
3117
32-func o (p,q) = valueOrErrorMessage(getString(p, q), l((("mandatory this." + q) + " is not defined")))
18+func h (i,j) = valueOrErrorMessage(getString(i, j), e((("mandatory this." + j) + " is not defined")))
3319
3420
35-func r (p,q) = valueOrElse(getInteger(p, q), 0)
21+func k (i,j) = valueOrElse(getInteger(i, j), 0)
3622
3723
38-func s (p,q,t) = valueOrElse(getInteger(p, q), t)
24+func l (i,j,m) = valueOrElse(getInteger(i, j), m)
3925
4026
41-func u (p,q) = valueOrErrorMessage(getInteger(p, q), l((("mandatory this." + q) + " is not defined")))
27+func n (i,j) = valueOrErrorMessage(getInteger(i, j), e((("mandatory this." + j) + " is not defined")))
4228
4329
44-func v (w) = if ((0 > w))
45- then -(w)
46- else w
30+func o (p) = if ((0 > p))
31+ then -(p)
32+ else p
4733
4834
49-func x (y,z) = if ((y >= 0))
50- then y
51- else n((valueOrElse(z, "value") + " should be positive"))
35+func q (p) = {
36+ let r = p
37+ if ($isInstanceOf(r, "List[Any]"))
38+ then {
39+ let s = r
40+ s
41+ }
42+ else g("fail to cast into List[Any]")
43+ }
5244
5345
54-func A () = makeString(["%s%s", "config", "referralsContractAddress"], a)
46+func t (p) = {
47+ let r = p
48+ if ($isInstanceOf(r, "Int"))
49+ then {
50+ let u = r
51+ u
52+ }
53+ else g("fail to cast into Int")
54+ }
5555
5656
57-let B = addressFromStringValue(o(this, A()))
58-
59-let C = makeString(["%s%s", "referral", "programName"], a)
60-
61-let D = "wxlock"
62-
63-let E = valueOrElse(getString(this, C), D)
64-
65-func F () = "%s%s__config__factoryAddress"
57+func v () = makeString(["%s%s", "config", "referralsContractAddress"], a)
6658
6759
68-let G = 1
60+let w = addressFromStringValue(h(this, v()))
6961
70-let H = 2
62+let x = makeString(["%s%s", "referral", "programName"], a)
7163
72-let I = 3
64+let y = "wxlock"
7365
74-let J = 4
66+let z = valueOrElse(getString(this, x), y)
7567
76-let K = 5
77-
78-let L = 6
79-
80-let M = 7
81-
82-let N = 8
83-
84-let O = 9
85-
86-let P = 10
87-
88-let Q = 11
89-
90-func R () = "%s__factoryConfig"
68+func A () = "%s%s__config__factoryAddress"
9169
9270
93-func S (T) = makeString(["%s%s%s", T, "mappings__lpAsset2PoolContract"], a)
71+let B = 1
72+
73+let C = 2
74+
75+let D = 3
76+
77+let E = 4
78+
79+let F = 5
80+
81+let G = 6
82+
83+let H = 7
84+
85+let I = 8
86+
87+let J = 9
88+
89+let K = 10
90+
91+let L = 11
92+
93+func M () = "%s__factoryConfig"
9494
9595
96-func U (V) = makeString(["%s%s", "poolWeight", V], a)
96+func N () = "%s__lpTokensList"
9797
9898
99-func W (X,Y) = ((("%s%s__poolWeight__" + X) + "__") + toString(Y))
99+func O (P) = makeString(["%s%s%s", P, "mappings__lpAsset2PoolContract"], a)
100100
101101
102-func Z () = addressFromStringValue(o(this, F()))
102+func Q (R) = makeString(["%s%s", "poolWeight", R], a)
103103
104104
105-func aa (ab) = split(o(ab, R()), a)
105+func S (T,U) = ((("%s%s__poolWeight__" + T) + "__") + toString(U))
106106
107107
108-func ac (ad) = addressFromStringValue(ad[H])
108+func V () = addressFromStringValue(h(this, A()))
109109
110110
111-func ae (ad) = addressFromStringValue(ad[K])
111+func W () = split(valueOrElse(getString(V(), N()), ""), a)
112112
113113
114-func af (ad) = addressFromStringValue(ad[G])
114+func X (Y) = split(h(Y, M()), a)
115115
116116
117-func ag (ad) = addressFromStringValue(ad[P])
117+func Z (aa) = addressFromStringValue(aa[C])
118118
119119
120-func ah () = "%s__managerPublicKey"
120+func ab (aa) = addressFromStringValue(aa[F])
121121
122122
123-func ai () = "%s__managerVaultAddress"
123+func ac (aa) = addressFromStringValue(aa[B])
124124
125125
126-func aj () = "%s%s__ratePerBlock__current"
126+func ad (aa) = addressFromStringValue(aa[K])
127127
128128
129-func ak () = "%s%s__ratePerBlockMax__current"
129+func ae () = "%s__managerPublicKey"
130130
131131
132-func al () = "%s%s__emission__startBlock"
132+func af () = "%s__managerVaultAddress"
133133
134134
135-func am () = "%s%s__boostingV2__startBlock"
135+func ag () = "%s%s__ratePerBlock__current"
136136
137137
138-func an () = "%s%s__boostingV2__integral"
138+func ah () = "%s%s__ratePerBlockMax__current"
139139
140140
141-func ao () = "%s%s__emission__duration"
141+func ai () = "%s%s__emission__startBlock"
142142
143143
144-func ap () = "%s%s__emission__endBlock"
144+func aj () = "%s%s__boostingV2__startBlock"
145145
146146
147-let aq = 1
148-
149-let ar = 2
150-
151-let as = 3
152-
153-let at = 4
154-
155-let au = 5
156-
157-let av = 6
158-
159-func aw () = "%s__config"
147+func ak () = "%s%s__boostingV2__integral"
160148
161149
162-func ax () = split(o(this, aw()), a)
150+func al () = "%s%s__emission__duration"
163151
164152
165-let ay = ax()
166-
167-let az = fromBase58String(ay[aq])
168-
169-let aA = valueOrErrorMessage(parseInt(ay[ar]), l("invalid min lock amount"))
170-
171-let aB = valueOrErrorMessage(parseInt(ay[as]), l("invalid min lock duration"))
172-
173-let aC = valueOrErrorMessage(parseInt(ay[at]), l("invalid max lock duration"))
174-
175-let aD = valueOrErrorMessage(addressFromString(ay[au]), l("invalid math contract address"))
176-
177-let aE = valueOrErrorMessage(parseInt(ay[av]), l("invalid blocks in period"))
178-
179-func aF (az,aA,aB,aC,aD) = makeString(["%s%d%d%d%s", az, aA, aB, aC, aD], a)
153+func am () = "%s%s__emission__endBlock"
180154
181155
182-func aG (az,aA,aB,aC,aD) = aF(az, toString(aA), toString(aB), toString(aC), aD)
156+func an () = "%s__nextPeriod"
183157
184158
185-func aH () = {
186- let aI = getString(ai())
187- if ($isInstanceOf(aI, "String"))
159+func ao () = "%s%s__gwxRewardEmissionPart__startHeight"
160+
161+
162+let ap = 1
163+
164+let aq = 2
165+
166+let ar = 3
167+
168+let as = 4
169+
170+let at = 5
171+
172+func au () = "%s__config"
173+
174+
175+func av () = split(h(this, au()), a)
176+
177+
178+let aw = addressFromStringValue(av()[at])
179+
180+func ax (ay,az,aA,aB,aw) = makeString(["%s%d%d%d", ay, az, aA, aB, aw], a)
181+
182+
183+func aC (ay,az,aA,aB,aw) = ax(ay, toString(az), toString(aA), toString(aB), aw)
184+
185+
186+func aD () = {
187+ let r = getString(af())
188+ if ($isInstanceOf(r, "String"))
188189 then {
189- let aJ = aI
190- addressFromStringValue(aJ)
190+ let aE = r
191+ addressFromStringValue(aE)
191192 }
192193 else this
193194 }
194195
195196
196-func aK () = {
197- let aL = aH()
198- let aI = getString(aL, ah())
199- if ($isInstanceOf(aI, "String"))
197+func aF () = {
198+ let aG = aD()
199+ let r = getString(aG, ae())
200+ if ($isInstanceOf(r, "String"))
200201 then {
201- let aJ = aI
202- fromBase58String(aJ)
202+ let aE = r
203+ fromBase58String(aE)
203204 }
204- else if ($isInstanceOf(aI, "Unit"))
205+ else if ($isInstanceOf(r, "Unit"))
205206 then unit
206207 else throw("Match error")
207208 }
208209
209210
210-func aM (aN) = {
211- let aO = n("Permission denied")
212- let aI = aK()
213- if ($isInstanceOf(aI, "ByteVector"))
211+func aH (aI) = {
212+ let aJ = g("Permission denied")
213+ let r = aF()
214+ if ($isInstanceOf(r, "ByteVector"))
214215 then {
215- let aP = aI
216- if ((aN.callerPublicKey == aP))
216+ let aK = r
217+ if ((aI.callerPublicKey == aK))
217218 then true
218- else aO
219+ else aJ
219220 }
220- else if ($isInstanceOf(aI, "Unit"))
221- then if ((aN.caller == this))
221+ else if ($isInstanceOf(r, "Unit"))
222+ then if ((aI.caller == this))
222223 then true
223- else aO
224+ else aJ
224225 else throw("Match error")
225226 }
226227
227228
228-let aQ = 1
229+let aL = 1
229230
230-let aR = 2
231+let aM = 2
231232
232-let aS = 3
233+let aN = 3
233234
234-let aT = 4
235+let aO = 4
235236
236-let aU = 5
237+let aP = 5
237238
238-let aV = 6
239+let aQ = 6
239240
240-func aW (aX,aY) = makeString(["%s%s%s__lock", toString(aX), {
241- let aI = aY
242- if ($isInstanceOf(aI, "ByteVector"))
243- then {
244- let aZ = aI
245- toBase58String(aZ)
246- }
247- else if ($isInstanceOf(aI, "Unit"))
248- then "legacy"
249- else throw("Match error")
250- }], a)
241+func aR (aS) = makeString(["%s%s__lock", aS], a)
251242
252243
253-func ba (aX,aY) = split(o(this, aW(aX, aY)), a)
244+func aT (aS) = split(h(this, aR(aS)), a)
254245
255246
256-func bb (aX) = makeString(["%s%s__gwxAmountTotal", toString(aX)], a)
247+func aU (aV,aW,aX,aY,aZ,ba,bb,bc) = makeString(["%d%d%d%d%d%d%d%d", aV, aW, aX, aY, aZ, ba, bb, bc], a)
257248
258249
259-func bc (bd,be,bf,bg,bh) = makeString(["%d%d%d%d%d%d", toString(bd), toString(be), toString(bf), toString(lastBlock.timestamp), toString(bg), toString(bh)], a)
250+func bd (aV,aW,aX,aY,aZ,ba,bc) = aU(aV, toString(aW), toString(aX), toString(aY), toString(aZ), toString(ba), toString(lastBlock.timestamp), toString(bc))
260251
261252
262-func bi () = "%s__nextUserNum"
253+func be () = "%s__nextUserNum"
263254
264255
265-func bj (aX) = makeString(["%s%s%s__mapping__user2num", aX], a)
256+func bf (aS) = makeString(["%s%s%s__mapping__user2num", aS], a)
266257
267258
268-func bk (Y) = makeString(["%s%s%s__mapping__num2user", Y], a)
259+func bg (U) = makeString(["%s%s%s__mapping__num2user", U], a)
269260
270261
271-func bl () = "%s%s__stats__activeTotalLocked"
262+func bh (aV) = makeString(["%s%d%s__paramByUserNum", aV, "amount"], a)
272263
273264
274-func bm () = "%s%s__stats__locksDurationSumInBlocks"
265+func bi (aV) = makeString(["%s%d%s__paramByUserNum", aV, "start"], a)
275266
276267
277-func bn () = "%s%s__stats__locksCount"
268+func bj (aV) = makeString(["%s%d%s__paramByUserNum", aV, "duration"], a)
278269
279270
280-func bo () = "%s%s__stats__activeUsersCount"
271+func bk (aV) = makeString(["%s%d%s__paramByUserNum", aV, "k"], a)
281272
282273
283-func bp (bq) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bq)], a)
274+func bl (aV) = makeString(["%s%d%s__paramByUserNum", aV, "b"], a)
284275
285276
286-func br (bq,bs) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bq), bs], a)
277+func bm (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "k", bn], a)
287278
288279
289-func bt (bq) = makeString(["%s%d__maxBoostInt", toString(bq)], a)
280+func bo (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "b", bn], a)
290281
291282
292-func bu () = "%s%s__maxBoostInt__total"
283+func bp () = "%s%s__stats__activeTotalLocked"
293284
294285
295-func bv (bq) = makeString(["%s%d__userBoostAvaliableToClaimTotal", toString(bq)], a)
286+func bq () = "%s%s__stats__locksDurationSumInBlocks"
296287
297288
298-func bw (bq) = makeString(["%s%d__userBoostClaimed", toString(bq)], a)
289+func br () = "%s%s__stats__locksCount"
299290
300291
301-func bx () = "%s%s__gwx__total"
292+func bs () = "%s%s__stats__activeUsersCount"
302293
303294
304-func by (bz,bA,p,bB) = makeString(["%s%s%s%s%d", "vote", bz, bA, toString(p), toString(bB)], a)
295+func bt (aV) = makeString(["%s%d__userBoostEmissionLastIntV2", aV], a)
305296
306297
307-func bC (bB) = makeString(["%s%d", "startHeight", toString(bB)], a)
298+func bu (aV,bv) = makeString(["%s%d__userBoostEmissionLastIntV2", aV, bv], a)
308299
309300
310-func bD () = makeString(["%s", "currentEpochUi"], a)
301+func bw (aV) = makeString(["%s%d__maxBoostInt", aV], a)
311302
312303
313-func bE (bF,bB) = makeString(["%s%s%d", "votingResultStaked", bF, toString(bB)], a)
304+func bx () = "%s%s__maxBoostInt__total"
314305
315306
316-func bG (bF,bB) = makeString(["%s%s%d", "votingResultStakedIntegral", bF, toString(bB)], a)
307+func by (aV) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aV], a)
317308
318309
319-func bH (bF,bB) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bF, toString(bB)], a)
310+func bz (aV) = makeString(["%s%d__userBoostClaimed", aV], a)
320311
321312
322-func bI (bF,p,bB) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bF, toString(p), toString(bB)], a)
313+func bA () = "%s%s__gwxCached__total"
323314
324315
325-func bJ (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegral", bF, toString(p), toString(bB)], a)
316+func bB () = "%s__gwxCachedTotalCorrective"
326317
327318
328-func bK (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bF, toString(p), toString(bB)], a)
319+func bC (bD,bE,i,bF) = makeString(["%s%s%s%s%d", "vote", bD, bE, toString(i), toString(bF)], a)
329320
330321
331-func bL (bF,p,bB) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bF, toString(p), toString(bB)], a)
322+func bG (bF) = makeString(["%s%d", "startHeight", toString(bF)], a)
332323
333324
334-func bM (bN,bF) = makeString(["%s%s%s", "staked", bN, bF], a)
325+func bH () = makeString(["%s", "currentEpochUi"], a)
335326
336327
337-let bO = Z()
328+func bI (bJ,bF) = makeString(["%s%s%d", "votingResultStaked", bJ, toString(bF)], a)
338329
339-let ad = aa(bO)
340330
341-let bP = ae(ad)
331+func bK (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegral", bJ, toString(bF)], a)
342332
343-let bQ = af(ad)
344333
345-let bR = ag(ad)
334+func bL (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bJ, toString(bF)], a)
346335
347-let bS = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), l("lp_staking_pools contract address is undefined"))), l("invalid lp_staking_pools contract address"))
348336
349-let bT = makeString(["%s", "votingEmissionContract"], a)
337+func bM (bJ,i,bF) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bJ, toString(i), toString(bF)], a)
350338
351-let bU = addressFromStringValue(getStringValue(bO, bT))
352339
353-let bV = makeString(["%s", "votingEmissionRateContract"], a)
340+func bN (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegral", bJ, toString(i), toString(bF)], a)
354341
355-let bW = {
356- let bX = invoke(bP, "getBoostCoeffREADONLY", nil, nil)
357- if ($isInstanceOf(bX, "Int"))
358- then bX
359- else throw(($getType(bX) + " couldn't be cast to Int"))
342+
343+func bO (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bJ, toString(i), toString(bF)], a)
344+
345+
346+func bP (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bJ, toString(i), toString(bF)], a)
347+
348+
349+func bQ (bR,bJ) = makeString(["%s%s%s", "staked", bR, bJ], a)
350+
351+
352+let bS = V()
353+
354+let aa = X(bS)
355+
356+let bT = ab(aa)
357+
358+let bU = ac(aa)
359+
360+let bV = ad(aa)
361+
362+let bW = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), e("lp_staking_pools contract address is undefined"))), e("invalid lp_staking_pools contract address"))
363+
364+let bX = makeString(["%s", "votingEmissionContract"], a)
365+
366+let bY = addressFromStringValue(getStringValue(bS, bX))
367+
368+let bZ = {
369+ let ca = invoke(bT, "getBoostCoeffREADONLY", nil, nil)
370+ if ($isInstanceOf(ca, "Int"))
371+ then ca
372+ else throw(($getType(ca) + " couldn't be cast to Int"))
360373 }
361374
362-func bY (aX) = {
363- let aI = getString(this, bj(toString(aX)))
364- if ($isInstanceOf(aI, "String"))
365- then {
366- let aJ = aI
367- valueOrErrorMessage(parseInt(aJ), l("invalid user number"))
368- }
369- else if ($isInstanceOf(aI, "Unit"))
370- then n("invalid user")
371- else throw("Match error")
375+func cb (cc) = {
376+ let cd = getIntegerValue(bY, bH())
377+ let ce = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
378+ let cf = getInteger(this, ce)
379+ let cg = valueOrElse(getInteger(this, bA()), 0)
380+ let ch = if (isDefined(cf))
381+ then (cd >= value(cf))
382+ else false
383+ let ci = if (if (ch)
384+ then cc
385+ else false)
386+ then valueOrElse(getInteger(this, bB()), 0)
387+ else 0
388+ max([0, (cg + ci)])
372389 }
373390
374391
375-func bZ () = valueOrElse(getInteger(this, bx()), 0)
376-
377-
378-func ca (aX) = {
379- let cb = "getLockedGwxAmount"
380- let cc = valueOrErrorMessage({
381- let aI = getString(bU, bV)
382- if ($isInstanceOf(aI, "Unit"))
383- then unit
384- else if ($isInstanceOf(aI, "String"))
385- then {
386- let aJ = aI
387- addressFromString(aJ)
388- }
389- else throw("Match error")
390- }, l("invalid voting emission rate address"))
391- let cd = {
392- let bX = invoke(bU, cb, [toString(aX)], nil)
393- if ($isInstanceOf(bX, "Int"))
394- then bX
395- else throw(($getType(bX) + " couldn't be cast to Int"))
396- }
397- let ce = {
398- let bX = invoke(cc, cb, [toString(aX)], nil)
399- if ($isInstanceOf(bX, "Int"))
400- then bX
401- else throw(($getType(bX) + " couldn't be cast to Int"))
402- }
403- let cf = max([cd, ce])
404- cf
392+func cj (ck,cl,aW,cm,aY,cn,co,aI) = {
393+ let cp = makeString(["%s%s%s%s__history", ck, cl, toBase58String(aI.transactionId)], a)
394+ let cq = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aW), toString(cm), toString(aY), toString(cn), toString(co)], a)
395+ StringEntry(cp, cq)
405396 }
406397
407398
408-func cg (ch,ci,bd,cj,bf,bg,aN) = {
409- let ck = makeString(["%s%s%s%s__history", ch, ci, toBase58String(aN.transactionId)], a)
410- let cl = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(bd), toString(cj), toString(bf), toString(bg)], a)
411- StringEntry(ck, cl)
399+func cr (cs,ct,cu,cv) = {
400+ let cw = bq()
401+ let cx = br()
402+ let cy = bs()
403+ let cz = bp()
404+ let cA = k(this, cw)
405+ let cB = k(this, cx)
406+ let cC = k(this, cy)
407+ let cD = k(this, cz)
408+[IntegerEntry(cw, (cA + ct)), IntegerEntry(cx, (cB + cu)), IntegerEntry(cy, (cC + cv)), IntegerEntry(cz, (cD + cs))]
412409 }
413410
414411
415-func cm (cn,co,cp,cq) = {
416- let cr = bm()
417- let cs = bn()
418- let ct = bo()
419- let cu = bl()
420- let cv = r(this, cr)
421- let cw = r(this, cs)
422- let cx = r(this, ct)
423- let cy = r(this, cu)
424-[IntegerEntry(cr, (cv + co)), IntegerEntry(cs, (cw + cp)), IntegerEntry(ct, (cx + cq)), IntegerEntry(cu, (cy + cn))]
412+func cE (cF,cG,cH) = {
413+ let cI = 1000
414+ (((cF * cH) + cG) / cI)
425415 }
426416
427417
428-func cz (aX,aY,bd,be,bf,bg,bh) = [StringEntry(aW(aX, aY), bc(bd, be, bf, bg, bh))]
418+func cJ (aS,aV,aW,aX,aY,cn,co,bn) = {
419+ let cK = bh(aV)
420+ let cL = bi(aV)
421+ let cM = bj(aV)
422+ let cN = bk(aV)
423+ let cO = bl(aV)
424+ let cP = bm(aV, bn)
425+ let cQ = bo(aV, bn)
426+ let bc = cE(cn, co, height)
427+[IntegerEntry(cK, aW), IntegerEntry(cL, aX), IntegerEntry(cM, aY), IntegerEntry(cN, cn), IntegerEntry(cO, co), IntegerEntry(cP, cn), IntegerEntry(cQ, co), StringEntry(aR(aS), bd(aV, aW, aX, aY, cn, co, bc))]
428+ }
429429
430430
431-func cA (aN,cB) = if ((size(aN.payments) > 1))
432- then n("only one payment is allowed")
433- else if ((size(aN.payments) == 0))
431+func cR (aI,cS) = if ((size(aI.payments) > 1))
432+ then g("only one payment is allowed")
433+ else if ((size(aI.payments) == 0))
434434 then 0
435435 else {
436- let cC = aN.payments[0]
437- if ((value(cC.assetId) != cB))
438- then n("invalid asset id in payment")
439- else cC.amount
436+ let cT = aI.payments[0]
437+ if ((value(cT.assetId) != cS))
438+ then g("invalid asset id in payment")
439+ else cT.amount
440440 }
441441
442442
443-func cD (aX) = valueOrElse(getInteger(this, bb(aX)), 0)
444-
445-
446-func cE () = {
447- let cF = {
448- let cG = value(getInteger(bU, bD()))
449- let cH = (cG - 1)
450- if ((0 > cH))
451- then n("invalid epoch")
452- else $Tuple2(cG, cH)
453- }
454- let cG = cF._1
455- let cH = cF._2
456- let cI = value(getInteger(bU, bC(cG)))
457- $Tuple2(cH, cI)
443+func cU (aS,cV) = {
444+ let cW = "empty"
445+ let cX = bf(aS)
446+ let aV = valueOrElse(getString(cX), cW)
447+ let cn = valueOrElse(getInteger(bk(aV)), 0)
448+ let co = valueOrElse(getInteger(bl(aV)), 0)
449+ let cY = cE(cn, co, cV)
450+ let bc = if ((0 > cY))
451+ then 0
452+ else cY
453+ bc
458454 }
459455
460456
461-func cJ (bF) = {
462- let cK = 4
463- let cL = 5
464- let cM = {
465- let bX = invoke(bO, "getPoolConfigByLpAssetIdREADONLY", [bF], nil)
466- if ($isInstanceOf(bX, "List[Any]"))
467- then bX
468- else throw(($getType(bX) + " couldn't be cast to List[Any]"))
457+func cZ (aS) = cU(aS, height)
458+
459+
460+func da () = {
461+ let db = {
462+ let cd = value(getInteger(bY, bH()))
463+ let dc = (cd - 1)
464+ if ((0 > dc))
465+ then g("invalid epoch")
466+ else $Tuple2(cd, dc)
469467 }
470- let bz = {
471- let bX = cM[cK]
472- if ($isInstanceOf(bX, "String"))
473- then bX
474- else throw(($getType(bX) + " couldn't be cast to String"))
475- }
476- let bA = {
477- let bX = cM[cL]
478- if ($isInstanceOf(bX, "String"))
479- then bX
480- else throw(($getType(bX) + " couldn't be cast to String"))
481- }
482- $Tuple2(bz, bA)
468+ let cd = db._1
469+ let dc = db._2
470+ let dd = value(getInteger(bY, bG(cd)))
471+ $Tuple2(dc, dd)
483472 }
484473
485474
486-func cN (bF,bN) = {
487- let aX = addressFromStringValue(bN)
488- let cO = cE()
489- let cH = cO._1
490- let cI = cO._2
491- let cP = cJ(bF)
492- let bz = cP._1
493- let bA = cP._2
494- let cQ = by(bz, bA, aX, cH)
495- let cR = valueOrElse(getInteger(bU, cQ), 0)
496- cR
475+func de (bJ) = {
476+ let df = 4
477+ let dg = 5
478+ let dh = {
479+ let ca = invoke(bS, "getPoolConfigByLpAssetIdREADONLY", [bJ], nil)
480+ if ($isInstanceOf(ca, "List[Any]"))
481+ then ca
482+ else throw(($getType(ca) + " couldn't be cast to List[Any]"))
483+ }
484+ let bD = {
485+ let ca = dh[df]
486+ if ($isInstanceOf(ca, "String"))
487+ then ca
488+ else throw(($getType(ca) + " couldn't be cast to String"))
489+ }
490+ let bE = {
491+ let ca = dh[dg]
492+ if ($isInstanceOf(ca, "String"))
493+ then ca
494+ else throw(($getType(ca) + " couldn't be cast to String"))
495+ }
496+ $Tuple2(bD, bE)
497497 }
498498
499499
500-func cS (bF,bN) = {
501- let cT = valueOrElse(getInteger(bQ, bM(bN, bF)), 0)
502- let cR = cN(bF, bN)
503- if ((cT == 0))
504- then 0
505- else cR
500+func di (bJ,bR) = {
501+ let aS = addressFromStringValue(bR)
502+ let dj = da()
503+ let dc = dj._1
504+ let dd = dj._2
505+ let dk = de(bJ)
506+ let bD = dk._1
507+ let bE = dk._2
508+ let dl = bC(bD, bE, aS, dc)
509+ let dm = valueOrElse(getInteger(bY, dl), 0)
510+ dm
506511 }
507512
508513
509-func cU (bF) = {
510- let cV = cE()
511- let cH = cV._1
512- let cI = cV._2
513- let cW = valueOrElse(getInteger(bU, bE(bF, cH)), 0)
514- let cX = valueOrElse(getInteger(this, bE(bF, cH)), cW)
515- cX
514+func dn (bJ,bR) = {
515+ let do = valueOrElse(getInteger(bU, bQ(bR, bJ)), 0)
516+ let dm = di(bJ, bR)
517+ if ((do == 0))
518+ then 0
519+ else dm
516520 }
517521
518522
519-func cY (bF) = {
520- let cZ = cE()
521- let cH = cZ._1
522- let cI = cZ._2
523- let cX = cU(bF)
524- let da = valueOrElse(getInteger(this, bG(bF, cH)), 0)
525- let db = valueOrElse(getInteger(this, bH(bF, cH)), cI)
526- let dc = (height - db)
527- let dd = ((dc * cX) + da)
528- dd
523+func dp (bJ) = {
524+ let dq = da()
525+ let dc = dq._1
526+ let dd = dq._2
527+ let dr = valueOrElse(getInteger(bY, bI(bJ, dc)), 0)
528+ let ds = valueOrElse(getInteger(this, bI(bJ, dc)), dr)
529+ ds
529530 }
530531
531532
532-func de (bF,df) = {
533- let dg = cE()
534- let cH = dg._1
535- let cI = dg._2
536- let cX = cU(bF)
537- let dh = (cX + df)
538- let dd = cY(bF)
539-[IntegerEntry(bE(bF, cH), dh), IntegerEntry(bH(bF, cH), height), IntegerEntry(bG(bF, cH), dd)]
533+func dt (bJ) = {
534+ let du = da()
535+ let dc = du._1
536+ let dd = du._2
537+ let ds = dp(bJ)
538+ let dv = valueOrElse(getInteger(this, bK(bJ, dc)), 0)
539+ let dw = valueOrElse(getInteger(this, bL(bJ, dc)), dd)
540+ let dx = (height - dw)
541+ let dy = ((dx * ds) + dv)
542+ dy
540543 }
541544
542545
543-func di (bF,bN) = {
544- let dj = cE()
545- let cH = dj._1
546- let cI = dj._2
547- let aX = addressFromStringValue(bN)
548- let dk = cS(bF, bN)
549- let dl = valueOrElse(getInteger(this, bJ(bF, aX, cH)), 0)
550- let dm = valueOrElse(getInteger(this, bK(bF, aX, cH)), cI)
551- let dn = (height - dm)
552- let do = ((dn * dk) + dl)
553- do
546+func dz (bJ,dA) = {
547+ let dB = da()
548+ let dc = dB._1
549+ let dd = dB._2
550+ let ds = dp(bJ)
551+ let dC = (ds + dA)
552+ let dy = dt(bJ)
553+[IntegerEntry(bI(bJ, dc), dC), IntegerEntry(bL(bJ, dc), height), IntegerEntry(bK(bJ, dc), dy)]
554554 }
555555
556556
557-func dp (bF,bN,dq) = {
558- let dr = cE()
559- let cH = dr._1
560- let cI = dr._2
561- let aX = addressFromStringValue(bN)
562- let ds = cN(bF, bN)
563- let dt = if ((ds == 0))
564- then nil
565- else {
566- let df = if (dq)
567- then ds
568- else -(ds)
569- let du = de(bF, df)
570- let do = di(bF, bN)
571- let dv = [IntegerEntry(bK(bF, aX, cH), height), IntegerEntry(bJ(bF, aX, cH), do)]
572- (du ++ dv)
573- }
574- dt
557+func dD (bJ,bR) = {
558+ let dE = da()
559+ let dc = dE._1
560+ let dd = dE._2
561+ let aS = addressFromStringValue(bR)
562+ let dF = dn(bJ, bR)
563+ let dG = valueOrElse(getInteger(this, bN(bJ, aS, dc)), 0)
564+ let dH = valueOrElse(getInteger(this, bO(bJ, aS, dc)), dd)
565+ let dI = (height - dH)
566+ let dJ = ((dI * dF) + dG)
567+ dJ
575568 }
576569
577570
578-func dw (bF,bN) = {
579- let dx = cE()
580- let cH = dx._1
581- let cI = dx._2
582- let aX = addressFromStringValue(bN)
583- let dy = bL(bF, aX, cH)
584- let dz = valueOrElse(getInteger(this, dy), 0)
585- let dA = bI(bF, aX, cH)
586- let dB = valueOrElse(getInteger(this, dA), 0)
587- let do = di(bF, bN)
588- let dd = cY(bF)
589- let dC = (do - dz)
590- let dD = (dd - dB)
591- $Tuple3([IntegerEntry(dy, do), IntegerEntry(dA, dd)], dC, dD)
571+func dK (bJ,bR,dL) = {
572+ let dM = da()
573+ let dc = dM._1
574+ let dd = dM._2
575+ let aS = addressFromStringValue(bR)
576+ let dN = di(bJ, bR)
577+ let dO = if ((dN == 0))
578+ then nil
579+ else {
580+ let dA = if (dL)
581+ then dN
582+ else -(dN)
583+ let dP = dz(bJ, dA)
584+ let dJ = dD(bJ, bR)
585+ let dQ = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
586+ (dP ++ dQ)
587+ }
588+ dO
592589 }
593590
594591
595-func dE () = {
596- let dF = u(bP, aj())
597- let dG = getInteger(this, am())
598- let dH = getInteger(this, an())
599- let dI = u(bP, ap())
600- let dJ = if ((height > dI))
601- then dI
592+func dR (bJ,bR) = {
593+ let dS = da()
594+ let dc = dS._1
595+ let dd = dS._2
596+ let aS = addressFromStringValue(bR)
597+ let dT = bP(bJ, aS, dc)
598+ let dU = valueOrElse(getInteger(this, dT), 0)
599+ let dV = bM(bJ, aS, dc)
600+ let dW = valueOrElse(getInteger(this, dV), 0)
601+ let dJ = dD(bJ, bR)
602+ let dy = dt(bJ)
603+ let dX = (dJ - dU)
604+ let dY = (dy - dW)
605+ $Tuple3([IntegerEntry(dT, dJ), IntegerEntry(dV, dy)], dX, dY)
606+ }
607+
608+
609+func dZ () = {
610+ let ea = n(bT, ag())
611+ let eb = getInteger(this, aj())
612+ let ec = getInteger(this, ak())
613+ let ed = n(bT, am())
614+ let cH = if ((height > ed))
615+ then ed
602616 else height
603- let dK = {
604- let aI = dG
605- if ($isInstanceOf(aI, "Int"))
617+ let ee = {
618+ let r = eb
619+ if ($isInstanceOf(r, "Int"))
606620 then {
607- let dL = aI
608- max([(dJ - dL), 0])
621+ let ef = r
622+ max([(cH - ef), 0])
609623 }
610- else if ($isInstanceOf(aI, "Unit"))
624+ else if ($isInstanceOf(r, "Unit"))
611625 then 0
612626 else throw("Match error")
613627 }
614- let dM = ((dF * (bW - 1)) / bW)
615- let dN = valueOrElse(dH, 0)
616- let dO = ((dM * dK) + dN)
617- $Tuple2([IntegerEntry(an(), dO), IntegerEntry(am(), height)], dO)
628+ let eg = ((ea * (bZ - 1)) / bZ)
629+ let eh = valueOrElse(ec, 0)
630+ let ei = ((eg * ee) + eh)
631+ $Tuple2([IntegerEntry(ak(), ei), IntegerEntry(aj(), height)], ei)
618632 }
619633
620634
621-func dP (bF,bN,dQ) = {
622- let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
623- let bq = bY(aX)
624- if ((bq == bq))
625- then {
626- let dR = "empty"
627- let dS = if ((bF != dR))
635+func ej (bJ,bR,ek) = {
636+ let el = getString(this, aR(bR))
637+ if ((el == unit))
638+ then $Tuple3(0, nil, "userRecord::is::empty")
639+ else {
640+ let em = split(value(el), a)
641+ let en = em[aL]
642+ let eo = "empty"
643+ let ep = if ((bJ != eo))
628644 then {
629- let dT = valueOrErrorMessage(getString(bO, S(bF)), l(("unsupported lp asset " + bF)))
630- getIntegerValue(bO, U(dT))
645+ let eq = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
646+ getIntegerValue(bS, Q(eq))
631647 }
632- else if (dQ)
648+ else if (ek)
633649 then 0
634- else n(("not readonly mode: unsupported lp asset " + bF))
635- let dU = br(bq, bF)
636- let dV = bp(bq)
637- let dW = valueOrElse(getInteger(this, dU), r(this, dV))
638- let dO = dE()._2
639- let dX = (dO - dW)
640- if ((0 > dX))
641- then n("wrong calculations")
650+ else g(("not readonly mode: unsupported lp asset " + bJ))
651+ let er = bu(en, bJ)
652+ let es = bt(en)
653+ let et = valueOrElse(getInteger(this, er), k(this, es))
654+ let ei = dZ()._2
655+ let eu = (ei - et)
656+ if ((0 > eu))
657+ then g("wrong calculations")
642658 else {
643- let dY = dw(bF, bN)
644- let dZ = dY._1
645- let ea = dY._2
646- let eb = dY._3
647- let ec = fraction(dX, dS, d)
648- let ed = if ((eb == 0))
659+ let ev = dR(bJ, bR)
660+ let ew = ev._1
661+ let ex = ev._2
662+ let ey = ev._3
663+ let ez = fraction(eu, ep, d)
664+ let eA = if ((ey == 0))
649665 then 0
650- else fraction(ec, ea, eb)
651- let ee = ([IntegerEntry(dU, dO)] ++ dZ)
652- let ef = makeString([toString(dW), toString(dX), toString(dS), toString(ea), toString(eb)], ":")
653- $Tuple3(ed, ee, ef)
666+ else fraction(ez, ex, ey)
667+ let eB = ([IntegerEntry(er, ei)] ++ ew)
668+ let eC = makeString([toString(et), toString(eu), toString(ep), toString(ex), toString(ey)], ":")
669+ $Tuple3(eA, eB, eC)
654670 }
655671 }
656- else throw("Strict value is not equal to itself.")
657672 }
658673
659674
660-func eg (aN,eh) = if (!(containsElement(i, eh)))
661- then n("invalid duration")
662- else {
663- let bf = (eh * k)
664- let ei = toBase58String(az)
665- if ((size(aN.payments) != 1))
666- then n("invalid payment - exact one payment must be attached")
667- else {
668- let cC = aN.payments[0]
669- let ej = cC.amount
670- if ((az != value(cC.assetId)))
671- then n((("invalid asset is in payment - " + ei) + " is expected"))
672- else {
673- let ek = bi()
674- let aX = aN.caller
675- let bN = toString(aX)
676- let el = isDefined(getString(bj(bN)))
677- let em = if (el)
678- then value(getString(bj(bN)))
679- else toString(u(this, ek))
680- let bq = parseIntValue(em)
681- let cj = height
682- if (if ((aA > ej))
683- then (aX != bS)
684- else false)
685- then n(("amount is less then minLockAmount=" + toString(aA)))
686- else if ((aB > bf))
687- then n(("passed duration is less then minLockDuration=" + toString(aB)))
688- else if ((bf > aC))
689- then n(("passed duration is greater then maxLockDuration=" + toString(aC)))
690- else {
691- let en = fraction(ej, bf, aC)
692- let eo = bZ()
693- let dV = bp(bq)
694- let dO = dE()._2
695- let ep = cD(aX)
696- let eq = reentrantInvoke(bR, "refreshUserReward", [aX.bytes], nil)
697- if ((eq == eq))
698- then {
699- let er = if (el)
700- then nil
701- else [IntegerEntry(ek, (bq + 1)), StringEntry(bj(bN), em), StringEntry(bk(em), bN)]
702- $Tuple2(((((er ++ cz(aX, aN.transactionId, ej, cj, bf, en, 0)) ++ cm(ej, bf, 1, if (el)
703- then 0
704- else 1)) :+ cg("lock", bN, ej, cj, bf, en, aN)) ++ [IntegerEntry(dV, dO), IntegerEntry(bx(), (eo + en)), IntegerEntry(bb(aX), (ep + en))]), en)
705- }
706- else throw("Strict value is not equal to itself.")
707- }
708- }
709- }
710- }
711-
712-
713-func es (aX,et) = {
714- let eu = ba(aX, et)
715- let ev = parseIntValue(eu[aQ])
716- let cj = parseIntValue(eu[aR])
717- let ew = parseIntValue(eu[aS])
718- let ex = (cj + ew)
719- let bh = parseIntValue(eu[aV])
720- let ey = ((height - cj) / aE)
721- let ez = fraction(toBigInt(ey), (toBigInt((8 * aE)) * h), toBigInt(ew))
722- let eA = if ((height > ex))
723- then ev
724- else (toInt(fraction(toBigInt(ev), (h - pow(toBigInt(5), 1, ez, f, f, DOWN)), h)) - bh)
725- eA
675+func eD (aI,aY) = {
676+ let eE = av()
677+ let eF = eE[ap]
678+ let ay = fromBase58String(eF)
679+ let az = parseIntValue(eE[aq])
680+ let aA = parseIntValue(eE[ar])
681+ let aB = parseIntValue(eE[as])
682+ if ((size(aI.payments) != 1))
683+ then g("invalid payment - exact one payment must be attached")
684+ else {
685+ let cT = aI.payments[0]
686+ let eG = cT.amount
687+ if ((ay != value(cT.assetId)))
688+ then g((("invalid asset is in payment - " + eF) + " is expected"))
689+ else {
690+ let eH = be()
691+ let bR = toString(aI.caller)
692+ let eI = isDefined(getString(bf(bR)))
693+ let en = if (eI)
694+ then value(getString(bf(bR)))
695+ else toString(n(this, eH))
696+ let aV = parseIntValue(en)
697+ let cm = height
698+ let cL = bi(en)
699+ let cM = bj(en)
700+ let cK = bh(en)
701+ if (if ((az > eG))
702+ then (aI.caller != bW)
703+ else false)
704+ then g(("amount is less then minLockAmount=" + toString(az)))
705+ else if ((aA > aY))
706+ then g(("passed duration is less then minLockDuration=" + toString(aA)))
707+ else if ((aY > aB))
708+ then g(("passed duration is greater then maxLockDuration=" + toString(aB)))
709+ else if (if (eI)
710+ then ((n(this, cL) + n(this, cM)) >= cm)
711+ else false)
712+ then g("there is an active lock - consider to use increaseLock")
713+ else if ((k(this, cK) > 0))
714+ then g(("there are locked WXs - consider to use increaseLock " + cK))
715+ else {
716+ let eJ = fraction(aY, c, aB)
717+ let eK = fraction(eG, eJ, c)
718+ let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, cm, aY], nil))
719+ let cn = t(eL[0])
720+ let co = t(eL[1])
721+ let bn = toString(t(eL[2]))
722+ let cg = cb(false)
723+ let es = bt(en)
724+ let ei = dZ()._2
725+ let eM = if (eI)
726+ then nil
727+ else [IntegerEntry(eH, (aV + 1)), StringEntry(bf(bR), en), StringEntry(bg(en), bR)]
728+ $Tuple2(((((eM ++ cJ(bR, en, eG, cm, aY, cn, co, bn)) ++ cr(eG, aY, 1, if (eI)
729+ then 0
730+ else 1)) :+ cj("lock", bR, eG, cm, aY, cn, co, aI)) ++ [IntegerEntry(es, ei), IntegerEntry(bA(), (cg + eK))]), eK)
731+ }
732+ }
733+ }
726734 }
727735
728736
729-@Callable(aN)
730-func constructor (eB,eC,aA,eD,eE,aD) = {
731- let eF = aM(aN)
732- if ((eF == eF))
733- then ([IntegerEntry(bi(), 0), StringEntry(aw(), aG(eC, aA, eD, eE, aD)), StringEntry(F(), eB)] ++ cm(0, 0, 0, 0))
737+@Callable(aI)
738+func constructor (eN,eO,az,eP,eQ,aw) = {
739+ let eR = aH(aI)
740+ if ((eR == eR))
741+ then ([IntegerEntry(be(), 0), StringEntry(au(), aC(eO, az, eP, eQ, aw)), StringEntry(A(), eN)] ++ cr(0, 0, 0, 0))
734742 else throw("Strict value is not equal to itself.")
735743 }
736744
737745
738746
739-@Callable(aN)
740-func lockRef (bf,eG,eH) = {
741- let eI = eg(aN, bf)
742- let eJ = eI._1
743- let en = eI._2
744- let eK = toString(aN.caller)
745- let eL = if (if ((eG == ""))
747+@Callable(aI)
748+func lockRef (aY,eS,eT) = {
749+ let eU = eD(aI, aY)
750+ let eV = eU._1
751+ let eK = eU._2
752+ let eW = toString(aI.caller)
753+ let eX = if (if ((eS == ""))
746754 then true
747- else (eH == base58''))
755+ else (eT == base58''))
748756 then unit
749- else invoke(B, "createPair", [E, eG, eK, eH], nil)
750- if ((eL == eL))
757+ else invoke(w, "createPair", [z, eS, eW, eT], nil)
758+ if ((eX == eX))
751759 then {
752- let eM = invoke(aD, "updateReferralActivity", [toString(aN.caller), en], nil)
753- if ((eM == eM))
754- then $Tuple2(eJ, unit)
760+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
761+ if ((eY == eY))
762+ then $Tuple2(eV, unit)
755763 else throw("Strict value is not equal to itself.")
756764 }
757765 else throw("Strict value is not equal to itself.")
758766 }
759767
760768
761769
762-@Callable(aN)
763-func lock (bf) = {
764- let eN = eg(aN, bf)
765- let eJ = eN._1
766- let en = eN._2
767- let eM = invoke(aD, "updateReferralActivity", [toString(aN.caller), en], nil)
768- if ((eM == eM))
769- then $Tuple2(eJ, unit)
770+@Callable(aI)
771+func lock (aY) = {
772+ let eZ = eD(aI, aY)
773+ let eV = eZ._1
774+ let eK = eZ._2
775+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
776+ if ((eY == eY))
777+ then $Tuple2(eV, unit)
770778 else throw("Strict value is not equal to itself.")
771779 }
772780
773781
774782
775-@Callable(aN)
776-func claimWxBoost (bF,bN) = if ((bQ != aN.caller))
777- then n("permissions denied")
783+@Callable(aI)
784+func increaseLock (fa) = {
785+ let eE = av()
786+ let eF = eE[ap]
787+ let ay = fromBase58String(eF)
788+ let aA = parseIntValue(eE[ar])
789+ let aB = parseIntValue(eE[as])
790+ let eG = cR(aI, ay)
791+ let bR = toString(aI.caller)
792+ let em = aT(bR)
793+ let en = em[aL]
794+ let fb = parseIntValue(em[aM])
795+ let cm = parseIntValue(em[aN])
796+ let fc = parseIntValue(em[aO])
797+ let fd = (cm + fc)
798+ let fe = max([(fd - height), 0])
799+ let ff = (fb + eG)
800+ let fg = (fe + fa)
801+ if ((0 > fa))
802+ then g("duration is less then zero")
803+ else if ((aA > fg))
804+ then g(("lockDurationNew is less then minLockDuration=" + toString(aA)))
805+ else if ((fg > aB))
806+ then g(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aB)))
807+ else {
808+ let eJ = fraction(fg, c, aB)
809+ let eK = fraction(ff, eJ, c)
810+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
811+ if ((eY == eY))
812+ then {
813+ let fh = height
814+ let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, fh, fg], nil))
815+ let cn = t(eL[0])
816+ let co = t(eL[1])
817+ let bn = toString(t(eL[2]))
818+ let fi = cZ(bR)
819+ let fj = (eK - fi)
820+ if ((0 > fj))
821+ then g(("gwxDiff is less then 0: " + toString(fj)))
822+ else {
823+ let cg = cb(false)
824+ let fk = cb(true)
825+ (((cJ(bR, en, ff, fh, fg, cn, co, bn) ++ cr(eG, fa, 0, 0)) :+ cj("lock", bR, eG, cm, fg, cn, co, aI)) ++ [IntegerEntry(bA(), (cg + fj))])
826+ }
827+ }
828+ else throw("Strict value is not equal to itself.")
829+ }
830+ }
831+
832+
833+
834+@Callable(aI)
835+func claimWxBoost (bJ,bR) = if ((bU != aI.caller))
836+ then g("permissions denied")
778837 else {
779- let eO = dP(bF, bN, false)
780- let eP = eO._1
781- let ee = eO._2
782- let ef = eO._3
783- $Tuple2(ee, [eP])
838+ let fl = ej(bJ, bR, false)
839+ let fm = fl._1
840+ let eB = fl._2
841+ let eC = fl._3
842+ $Tuple2(eB, [fm])
784843 }
785844
786845
787846
788-@Callable(aN)
789-func claimWxBoostREADONLY (bF,bN) = {
790- let eQ = dP(bF, bN, true)
791- let eP = eQ._1
792- let ee = eQ._2
793- let ef = eQ._3
794- $Tuple2(nil, [eP, ef])
847+@Callable(aI)
848+func claimWxBoostREADONLY (bJ,bR) = {
849+ let fn = ej(bJ, bR, true)
850+ let fm = fn._1
851+ let eB = fn._2
852+ let eC = fn._3
853+ $Tuple2(nil, [fm, eC])
795854 }
796855
797856
798857
799-@Callable(aN)
800-func unlock (eR) = {
801- let aX = aN.caller
802- let bN = toString(aX)
803- let aY = fromBase58String(eR)
804- let eu = ba(aX, if ((eR == ""))
805- then unit
806- else aY)
807- let ev = parseIntValue(eu[aQ])
808- let cj = parseIntValue(eu[aR])
809- let ew = parseIntValue(eu[aS])
810- let bh = parseIntValue(eu[aV])
811- let bg = parseIntValue(eu[aU])
812- let ey = ((height - cj) / aE)
813- let eA = es(aX, if ((eR == ""))
814- then unit
815- else aY)
816- let en = fraction(ev, ew, aC)
817- let eS = min([fraction((ey * aE), en, aC), bg])
818- let eT = x((bg - eS), "gwxRemaining")
819- let eU = ca(aX)
820- if ((0 >= ev))
821- then n("nothing to unlock")
858+@Callable(aI)
859+func unlock (aS) = {
860+ let em = aT(aS)
861+ let en = em[aL]
862+ let fb = parseIntValue(em[aM])
863+ let cm = parseIntValue(em[aN])
864+ let fc = parseIntValue(em[aO])
865+ let fd = (cm + fc)
866+ let eE = av()
867+ let ay = fromBase58String(eE[ap])
868+ if ((fd >= height))
869+ then g((("wait " + toString(fd)) + " to unlock"))
870+ else if ((0 >= fb))
871+ then g("nothing to unlock")
872+ else {
873+ let bn = valueOrElse(getInteger(aw, an()), 0)
874+ (((cJ(aS, en, 0, cm, fc, 0, 0, toString(bn)) ++ cr(-(fb), 0, 0, -1)) :+ cj("unlock", aS, fb, cm, fc, 0, 0, aI)) :+ ScriptTransfer(addressFromStringValue(aS), fb, ay))
875+ }
876+ }
877+
878+
879+
880+@Callable(aI)
881+func gwxUserInfoREADONLY (aS) = {
882+ let bc = cZ(aS)
883+ $Tuple2(nil, [bc])
884+ }
885+
886+
887+
888+@Callable(aI)
889+func userMaxDurationREADONLY (bR) = {
890+ let eE = av()
891+ let aB = parseIntValue(eE[as])
892+ let el = getString(this, aR(bR))
893+ if ((el == unit))
894+ then $Tuple2(nil, $Tuple2("lock", aB))
822895 else {
823- let eo = bZ()
824- let ep = cD(aX)
825- let eV = x((ep - eS), "userGwxAmountTotalNew")
826- if ((eU > eV))
827- then n(("locked gwx amount: " + toString(eU)))
828- else {
829- let eq = reentrantInvoke(bR, "refreshUserReward", [aX.bytes], nil)
830- if ((eq == eq))
831- then ((((cz(aX, aY, ev, cj, ew, eT, (bh + eA)) ++ cm(-(eA), 0, 0, 0)) :+ cg("unlock", bN, eA, cj, ew, eS, aN)) :+ ScriptTransfer(aX, eA, az)) ++ [IntegerEntry(bx(), x((eo - eS), "gwxTotal")), IntegerEntry(bb(aX), eV)])
832- else throw("Strict value is not equal to itself.")
833- }
896+ let em = split(value(el), a)
897+ let cm = parseIntValue(em[aN])
898+ let fc = parseIntValue(em[aO])
899+ let fd = (cm + fc)
900+ let fe = max([(fd - height), 0])
901+ let fo = (aB - fe)
902+ $Tuple2(nil, $Tuple2("increaseLock", fo))
834903 }
835904 }
836905
837906
838907
839-@Callable(aN)
840-func gwxUserInfoREADONLY (bN) = {
841- let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
842- let bg = cD(aX)
843- $Tuple2(nil, [bg])
908+@Callable(aI)
909+func getUserGwxAmountAtHeightREADONLY (aS,cV) = {
910+ let bc = cU(aS, cV)
911+ $Tuple2(nil, bc)
844912 }
845913
846914
847915
848-@Callable(aN)
849-func userMaxDurationREADONLY (bN) = $Tuple2(nil, $Tuple2("increaseLock", aC))
916+@Callable(aI)
917+func getTotalCachedGwxREADONLY () = $Tuple2(nil, cb(true))
850918
851919
852920
853-@Callable(aN)
854-func getUserGwxAmountAtHeightREADONLY (bN,eW) = {
855- let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
856- let bg = cD(aX)
857- $Tuple2(nil, bg)
858- }
859-
860-
861-
862-@Callable(aN)
863-func getUserGwxAmount (bN) = {
864- let aX = valueOrErrorMessage(addressFromString(bN), l("invalid user address"))
865- let bg = cD(aX)
866- $Tuple2(nil, bg)
867- }
868-
869-
870-
871-@Callable(aN)
872-func getGwxTotalREADONLY () = $Tuple2(nil, bZ())
873-
874-
875-
876-@Callable(aN)
921+@Callable(aI)
877922 func onBoostEmissionUpdate () = {
878- let eF = if ((aN.caller == bP))
923+ let eR = if ((aI.caller == bT))
879924 then true
880- else aM(aN)
881- if ((eF == eF))
882- then dE()
925+ else aH(aI)
926+ if ((eR == eR))
927+ then dZ()
883928 else throw("Strict value is not equal to itself.")
884929 }
885930
886931
887932
888-@Callable(aN)
889-func onStakedVoteUpdate (bF,bN,dq) = {
890- let eF = if ((aN.caller == bQ))
933+@Callable(aI)
934+func onStakedVoteUpdate (bJ,bR,dL) = {
935+ let eR = if ((aI.caller == bU))
891936 then true
892- else aM(aN)
893- if ((eF == eF))
937+ else aH(aI)
938+ if ((eR == eR))
894939 then {
895- let dt = dp(bF, bN, dq)
896- $Tuple2(dt, unit)
940+ let dO = dK(bJ, bR, dL)
941+ $Tuple2(dO, unit)
897942 }
898943 else throw("Strict value is not equal to itself.")
899944 }
900945
901946
902947
903-@Callable(aN)
904-func getVotingResultStakedREADONLY (bF) = $Tuple2(nil, cU(bF))
948+@Callable(aI)
949+func getVotingResultStakedREADONLY (bJ) = $Tuple2(nil, dp(bJ))
905950
906951
907952
908-@Callable(aN)
909-func getVotingResultStakedIntegralREADONLY (bF) = $Tuple2(nil, cY(bF))
953+@Callable(aI)
954+func getVotingResultStakedIntegralREADONLY (bJ) = $Tuple2(nil, dt(bJ))
910955
911956
912957
913-@Callable(aN)
914-func getUserVoteFinalizedREADONLY (bF,bN) = $Tuple2(nil, cN(bF, bN))
958+@Callable(aI)
959+func getUserVoteFinalizedREADONLY (bJ,bR) = $Tuple2(nil, di(bJ, bR))
915960
916961
917962
918-@Callable(aN)
919-func getUserVoteStakedIntegralREADONLY (bF,bN) = $Tuple2(nil, di(bF, bN))
963+@Callable(aI)
964+func getUserVoteStakedIntegralREADONLY (bJ,bR) = $Tuple2(nil, dD(bJ, bR))
920965
921966
922-@Verifier(eX)
923-func eY () = {
924- let eZ = {
925- let aI = aK()
926- if ($isInstanceOf(aI, "ByteVector"))
967+@Verifier(fp)
968+func fq () = {
969+ let fr = {
970+ let r = aF()
971+ if ($isInstanceOf(r, "ByteVector"))
927972 then {
928- let aP = aI
929- aP
973+ let aK = r
974+ aK
930975 }
931- else if ($isInstanceOf(aI, "Unit"))
932- then eX.senderPublicKey
976+ else if ($isInstanceOf(r, "Unit"))
977+ then fp.senderPublicKey
933978 else throw("Match error")
934979 }
935- sigVerify(eX.bodyBytes, eX.proofs[0], eZ)
980+ sigVerify(fp.bodyBytes, fp.proofs[0], fr)
936981 }
937982

github/deemru/w8io/026f985 
278.85 ms