tx · zA6j6EDYvB3GAAWCpZvJFNXRXhhNnGpY6FZfzemuy8K

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.02600000 Waves

2023.08.09 15:49 [2703083] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "zA6j6EDYvB3GAAWCpZvJFNXRXhhNnGpY6FZfzemuy8K", "fee": 2600000, "feeAssetId": null, "timestamp": 1691585415374, "version": 2, "chainId": 84, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "54ZmjtiZbNjFJUvH9CfL6J3V53qqHCDJCCzDpY1byCpJ5egRLW1tgRpQ2eghfi2rhDqawAkGr951iD83ewNAqHt6" ], "script": "base64:BgLXLQgCEggKBggIAQEBCBIFCgMBCAISAwoBARIECgIICBIECgIICBIECgIIARIDCgEIEgMKAQgSBAoCCAESAwoBCBIAEgASBQoDCAgEEgMKAQgSAwoBCBIECgIICBIECgIICCIDU0VQIgZTQ0FMRTgiBU1VTFQ4Ig5QT09MV0VJR0hUTVVMVCIQY29udHJhY3RGaWxlbmFtZSIHU0NBTEUxOCIGTVVMVDE4IghNVUxUMThCSSILYmxvY2tzSW5EYXkiDWJsb2Nrc0luTW9udGgiB3dyYXBFcnIiA21zZyIIdGhyb3dFcnIiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPclplcm8iD2dldEludE9yRGVmYXVsdCIKZGVmYXVsdFZhbCIMZ2V0SW50T3JGYWlsIgNhYnMiA3ZhbCIOZW5zdXJlUG9zaXRpdmUiAXYiAW0iG2tleVJlZmVycmFsc0NvbnRyYWN0QWRkcmVzcyIecmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzT3JGYWlsIhZrZXlSZWZlcnJhbFByb2dyYW1OYW1lIhpyZWZlcnJhbFByb2dyYW1OYW1lRGVmYXVsdCITcmVmZXJyYWxQcm9ncmFtTmFtZSIRa2V5RmFjdG9yeUFkZHJlc3MiGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcCIZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcCIUSWR4RmFjdG9yeUNmZ0lkb0RhcHAiFUlkeEZhY3RvcnlDZmdUZWFtRGFwcCIZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcCIVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwIhlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwIhRJZHhGYWN0b3J5Q2ZnRGFvRGFwcCIaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAiGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwIhZJZHhGYWN0b3J5Q2ZnQmlyZHNEYXBwIg1rZXlGYWN0b3J5Q2ZnIiZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcyIKbHBBc3NldFN0ciIUa2V5RmFjdG9yeVBvb2xXZWlnaHQiD2NvbnRyYWN0QWRkcmVzcyIba2V5RmFjdG9yeVBvb2xXZWlnaHRIaXN0b3J5Igtwb29sQWRkcmVzcyIDbnVtIhhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwiFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsIgdmYWN0b3J5IhhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwiCmZhY3RvcnlDZmciGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbCIXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwiGWdldEd3eFJld2FyZEFkZHJlc3NPckZhaWwiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudCIha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50IhVrZXlFbWlzc2lvblN0YXJ0QmxvY2siHWtleUJvb3N0aW5nVjJMYXN0VXBkYXRlSGVpZ2h0IhVrZXlCb29zdGluZ1YySW50ZWdyYWwiG2tleUVtaXNzaW9uRHVyYXRpb25JbkJsb2NrcyITa2V5RW1pc3Npb25FbmRCbG9jayIZa2V5TmV4dFBlcmdldEludE9yRGVmYXVsdCIfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodCINSWR4Q2ZnQXNzZXRJZCITSWR4Q2ZnTWluTG9ja0Ftb3VudCIVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uIhVJZHhDZmdNYXhMb2NrRHVyYXRpb24iEklkeENmZ01hdGhDb250cmFjdCIJa2V5Q29uZmlnIhVyZWFkQ29uZmlnQXJyYXlPckZhaWwiCGNmZ0FycmF5Igdhc3NldElkIg1taW5Mb2NrQW1vdW50Ig9taW5Mb2NrRHVyYXRpb24iD21heExvY2tEdXJhdGlvbiIMbWF0aENvbnRyYWN0Ig1mb3JtYXRDb25maWdTIgxmb3JtYXRDb25maWciHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMiByRtYXRjaDAiAXMiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiE21hbmFnZXJWYXVsdEFkZHJlc3MiC211c3RNYW5hZ2VyIgFpIgJwZCICcGsiDUlkeExvY2tBbW91bnQiDElkeExvY2tTdGFydCIPSWR4TG9ja0R1cmF0aW9uIhpJZHhMb2NrTGFzdFVwZGF0ZVRpbWVzdGFtcCIQSWR4TG9ja0d3eEFtb3VudCIQSWR4TG9ja1d4Q2xhaW1lZCITa2V5TG9ja1BhcmFtc1JlY29yZCILdXNlckFkZHJlc3MiBHR4SWQiAWIiGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsIhVrZXlVc2VyR3d4QW1vdW50VG90YWwiFmZvcm1hdExvY2tQYXJhbXNSZWNvcmQiBmFtb3VudCIFc3RhcnQiCGR1cmF0aW9uIglnd3hBbW91bnQiCXd4Q2xhaW1lZCIOa2V5TmV4dFVzZXJOdW0iEmtleVVzZXIyTnVtTWFwcGluZyISa2V5TnVtMlVzZXJNYXBwaW5nIhdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudCIga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MiEmtleVN0YXRzTG9ja3NDb3VudCISa2V5U3RhdHNVc2Vyc0NvdW50IiBrZXlVc2VyQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTCIHdXNlck51bSIia2V5VXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTCIJbHBBc3NldElkIhdrZXlVc2VyTWF4Qm9vc3RJTlRFR1JBTCIYa2V5VG90YWxNYXhCb29zdElOVEVHUkFMIiFrZXlVc2VyQm9vc3RBdmFsYWlibGVUb0NsYWltVG90YWwiE2tleVVzZXJCb29zdENsYWltZWQiC2tleUd3eFRvdGFsIgdrZXlWb3RlIg1hbW91bnRBc3NldElkIgxwcmljZUFzc2V0SWQiBWVwb2NoIhVrZXlTdGFydEhlaWdodEJ5RXBvY2giEWtleUN1cnJlbnRFcG9jaFVpIhVrZXlWb3RpbmdSZXN1bHRTdGFrZWQiDGxwQXNzZXRJZFN0ciIda2V5Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwiJWtleVZvdGluZ1Jlc3VsdFN0YWtlZExhc3RVcGRhdGVIZWlnaHQiIWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdCIVa2V5Vm90ZVN0YWtlZEludGVncmFsIh1rZXlWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodCIZa2V5Vm90ZVN0YWtlZEludGVncmFsTGFzdCIPa2V5U3Rha2VkQnlVc2VyIg51c2VyQWRkcmVzc1N0ciIPZmFjdG9yeUNvbnRyYWN0IhBlbWlzc2lvbkNvbnRyYWN0Ig9zdGFraW5nQ29udHJhY3QiEWd3eFJld2FyZENvbnRyYWN0IhZscFN0YWtpbmdQb29sc0NvbnRyYWN0IhlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0IhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0Ih1rZXlWb3RpbmdFbWlzc2lvblJhdGVDb250cmFjdCIKYm9vc3RDb2VmZiIBQCIZdXNlck51bWJlckJ5QWRkcmVzc09yRmFpbCIRZ2V0R3d4QW1vdW50VG90YWwiEmdldExvY2tlZEd3eEFtb3VudCIMZnVuY3Rpb25OYW1lIhp2b3RpbmdFbWlzc2lvblJhdGVDb250cmFjdCIYbG9ja2VkVm90aW5nRW1pc3Npb25SYXRlIhRsb2NrZWRWb3RpbmdFbWlzc2lvbiIGbG9ja2VkIgxIaXN0b3J5RW50cnkiBHR5cGUiBHVzZXIiCWxvY2tTdGFydCIKaGlzdG9yeUtFWSILaGlzdG9yeURBVEEiClN0YXRzRW50cnkiDnRvdGFsTG9ja2VkSW5jIgtkdXJhdGlvbkluYyIMbG9ja0NvdW50SW5jIg11c2Vyc0NvdW50SW5jIhtsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3NLRVkiDWxvY2tzQ291bnRLRVkiDXVzZXJzQ291bnRLRVkiDnRvdGFsQW1vdW50S0VZIhhsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MiCmxvY2tzQ291bnQiCnVzZXJzQ291bnQiC3RvdGFsQW1vdW50Ig9Mb2NrUGFyYW1zRW50cnkiImV4dHJhY3RPcHRpb25hbFBheW1lbnRBbW91bnRPckZhaWwiD2V4cGVjdGVkQXNzZXRJZCIDcG10IhVnZXRVc2VyR3d4QW1vdW50VG90YWwiGmdldFZvdGluZ0VtaXNzaW9uRXBvY2hJbmZvIg0kdDAxNDk5NTE1Mjg1Ig5jdXJyZW50RXBvY2hVaSISbGFzdEZpbmFsaXplZEVwb2NoIhdjdXJyZW50RXBvY2hTdGFydEhlaWdodCIYZ2V0UG9vbEFzc2V0c0J5THBBc3NldElkIhBpZHhBbW91bnRBc3NldElkIg9pZHhQcmljZUFzc2V0SWQiB3Bvb2xDZmciFGdldFVzZXJWb3RlRmluYWxpemVkIg0kdDAxNTk3NjE2MDU2Ig0kdDAxNjA1OTE2MTM0Igt1c2VyVm90ZUtleSIIdXNlclZvdGUiEWdldFVzZXJWb3RlU3Rha2VkIgxzdGFrZWRCeVVzZXIiFWdldFZvdGluZ1Jlc3VsdFN0YWtlZCINJHQwMTY2NzgxNjc1OCIXdm90aW5nUmVzdWx0U3Rha2VkU3RhcnQiEnZvdGluZ1Jlc3VsdFN0YWtlZCIdZ2V0Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwiDSR0MDE3MTIwMTcyMDAiHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsUHJldiIidm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodCIcdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxEaCIadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwiIXJlZnJlc2hWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbCIPc3Rha2VkVm90ZURlbHRhIg0kdDAxODAzNzE4MTE3IhV2b3RpbmdSZXN1bHRTdGFrZWROZXciGWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWwiDSR0MDE4NzI4MTg4MDgiDnVzZXJWb3RlU3Rha2VkIhp1c2VyVm90ZVN0YWtlZEludGVncmFsUHJldiIedXNlclZvdGVTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0Ihh1c2VyVm90ZVN0YWtlZEludGVncmFsRGgiFnVzZXJWb3RlU3Rha2VkSW50ZWdyYWwiGXJlZnJlc2hWb3RlU3Rha2VkSW50ZWdyYWwiBGVkZ2UiDSR0MDE5NTk2MTk2NzYiEXVzZXJWb3RlRmluYWxpemVkIgdhY3Rpb25zIhN2b3RpbmdSZXN1bHRBY3Rpb25zIgt2b3RlQWN0aW9ucyIbZ2V0U3Rha2VkVm90ZXNJbnRlZ3JhbHNEaWZmIg0kdDAyMDUzMDIwNjEwIh11c2VyVm90ZVN0YWtlZEludGVncmFsTGFzdEtleSIadXNlclZvdGVTdGFrZWRJbnRlZ3JhbExhc3QiIXZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdEtleSIedm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0Ihp1c2VyVm90ZVN0YWtlZEludGVncmFsRGlmZiIedm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxEaWZmIhxyZWZyZXNoQm9vc3RFbWlzc2lvbkludGVncmFsIhJ3eEVtaXNzaW9uUGVyQmxvY2siIGJvb3N0aW5nVjJMYXN0VXBkYXRlSGVpZ2h0T3B0aW9uIhhib29zdGluZ1YySW5nZXJnYWxPcHRpb24iC2VtaXNzaW9uRW5kIgFoIgJkaCIQbGFzdFVwZGF0ZUhlaWdodCIVYm9vc3RFbWlzc2lvblBlckJsb2NrIhlib29zdEVtaXNzaW9uSW50ZWdyYWxQcmV2IhVib29zdEVtaXNzaW9uSW50ZWdyYWwiFGludGVybmFsQ2xhaW1XeEJvb3N0IghyZWFkT25seSIIRU1QVFlTVFIiCnBvb2xXZWlnaHQiDnBvb2xBZGRyZXNzU3RyIiJ1c2VyTHBCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZIiB1c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWSIddXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWwiGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwiDSR0MDI0MTUyMjQyOTEiG3N0YWtlZFZvdGVzSW50ZWdyYWxzQWN0aW9ucyIUdXNlclZvdGVJbnRlZ3JhbERpZmYiFnRvdGFsVm90ZXNJbnRlZ3JhbERpZmYiHXBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsIiF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXciCWRhdGFTdGF0ZSIFZGVidWciC2xvY2tBY3Rpb25zIg5kdXJhdGlvbk1vbnRocyIVZHVyYXRpb25Nb250aHNBbGxvd2VkIgphc3NldElkU3RyIglwbXRBbW91bnQiDm5leHRVc2VyTnVtS0VZIg51c2VySXNFeGlzdGluZyIKdXNlck51bVN0ciIHY29lZmZYOCIOZ1d4QW1vdW50U3RhcnQiDmd3eEFtb3VudFRvdGFsIhJ1c2VyR3d4QW1vdW50VG90YWwiDGd3eFJld2FyZEludiIDYXJyIhFnZXRXeFdpdGhkcmF3YWJsZSIKdHhJZE9wdGlvbiIPdXNlclJlY29yZEFycmF5Igp1c2VyQW1vdW50Igxsb2NrRHVyYXRpb24iB2xvY2tFbmQiAXQiCGV4cG9uZW50Ig53eFdpdGhkcmF3YWJsZSIRZmFjdG9yeUFkZHJlc3NTdHIiDmxvY2tBc3NldElkU3RyIgttaW5EdXJhdGlvbiILbWF4RHVyYXRpb24iC2NoZWNrQ2FsbGVyIg9yZWZlcnJlckFkZHJlc3MiCXNpZ25hdHVyZSINJHQwMjkyNTIyOTMxNyIRbG9ja0FjdGlvbnNSZXN1bHQiD3JlZmVycmFsQWRkcmVzcyIGcmVmSW52IhF1cGRhdGVSZWZBY3Rpdml0eSINJHQwMjk3NzUyOTg0MCINJHQwMzAxNTAzMDI1MiISdXNlckJvb3N0QXZhaWxhYmxlIg0kdDAzMDM4NDMwNDg1Igd0eElkU3RyIglnd3hCdXJuZWQiDGd3eFJlbWFpbmluZyIPbG9ja2VkR3d4QW1vdW50Igx0YXJnZXRIZWlnaHQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleY0BAAFhAgJfXwABYgAIAAFjAIDC1y8AAWQFAWMAAWUCDWJvb3N0aW5nLnJpZGUAAWYAEgABZwCAgJC7utat8A0AAWgJALYCAQUBZwABaQCgCwABagCY1gIBAWsBAWwJALkJAgkAzAgCBQFlCQDMCAICAjogCQDMCAIFAWwFA25pbAIAAQFtAQFsCQACAQkBAWsBBQFsAQFuAgFvAXAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQFvBQFwCQEBawEJAKwCAgkArAICAg9tYW5kYXRvcnkgdGhpcy4FAXACDyBpcyBub3QgZGVmaW5lZAEBcQIBbwFwCQELdmFsdWVPckVsc2UCCQCaCAIFAW8FAXAAAAEBcgMBbwFwAXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBbwUBcAUBcwEBdAIBbwFwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBbwUBcAkBAWsBCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQFwAg8gaXMgbm90IGRlZmluZWQBAXUBAXYDCQBmAgAABQF2CQEBLQEFAXYFAXYBAXcCAXgBeQMJ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CQERQGV4dHJOYXRpdmUoMTA2MikBBQJhSQUEdGhpcwECYUoABAJhSwkBAmFHAAQCYUgJAJ0IAgUCYUsJAQJhZwADCQABAgUCYUgCBlN0cmluZwQCYUkFAmFICQDZBAEFAmFJAwkAAQIFAmFIAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmFMAQJhTQQCYU4JAQFtAQIRUGVybWlzc2lvbiBkZW5pZWQEAmFICQECYUoAAwkAAQIFAmFIAgpCeXRlVmVjdG9yBAJhTwUCYUgDCQAAAggFAmFND2NhbGxlclB1YmxpY0tleQUCYU8GBQJhTgMJAAECBQJhSAIEVW5pdAMJAAACCAUCYU0GY2FsbGVyBQR0aGlzBgUCYU4JAAIBAgtNYXRjaCBlcnJvcgACYVAAAQACYVEAAgACYVIAAwACYVMABAACYVQABQACYVUABgECYVYCAmFXAmFYCQC5CQIJAMwIAgIMJXMlcyVzX19sb2NrCQDMCAIJAKUIAQUCYVcJAMwIAgQCYUgFAmFYAwkAAQIFAmFIAgpCeXRlVmVjdG9yBAJhWQUCYUgJANgEAQUCYVkDCQABAgUCYUgCBFVuaXQCBmxlZ2FjeQkAAgECC01hdGNoIGVycm9yBQNuaWwFAWEBAmFaAgJhVwJhWAkAtQkCCQEBbgIFBHRoaXMJAQJhVgIFAmFXBQJhWAUBYQECYmEBAmFXCQC5CQIJAMwIAgIUJXMlc19fZ3d4QW1vdW50VG90YWwJAMwIAgkApQgBBQJhVwUDbmlsBQFhAQJiYgUCYmMCYmQCYmUCYmYCYmcJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJjCQDMCAIJAKQDAQUCYmQJAMwIAgkApAMBBQJiZQkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUCYmYJAMwIAgkApAMBBQJiZwUDbmlsBQFhAQJiaAACDyVzX19uZXh0VXNlck51bQECYmkBAmFXCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX191c2VyMm51bQkAzAgCBQJhVwUDbmlsBQFhAQJiagEBWAkAuQkCCQDMCAICGSVzJXMlc19fbWFwcGluZ19fbnVtMnVzZXIJAMwIAgUBWAUDbmlsBQFhAQJiawACHiVzJXNfX3N0YXRzX19hY3RpdmVUb3RhbExvY2tlZAECYmwAAiUlcyVzX19zdGF0c19fbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzAQJibQACFyVzJXNfX3N0YXRzX19sb2Nrc0NvdW50AQJibgACHSVzJXNfX3N0YXRzX19hY3RpdmVVc2Vyc0NvdW50AQJibwECYnAJALkJAgkAzAgCAiAlcyVkX191c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRWMgkAzAgCCQCkAwEFAmJwBQNuaWwFAWEBAmJxAgJicAJicgkAuQkCCQDMCAICICVzJWRfX3VzZXJCb29zdEVtaXNzaW9uTGFzdEludFYyCQDMCAIJAKQDAQUCYnAJAMwIAgUCYnIFA25pbAUBYQECYnMBAmJwCQC5CQIJAMwIAgIRJXMlZF9fbWF4Qm9vc3RJbnQJAMwIAgkApAMBBQJicAUDbmlsBQFhAQJidAACGCVzJXNfX21heEJvb3N0SW50X190b3RhbAECYnUBAmJwCQC5CQIJAMwIAgIkJXMlZF9fdXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsCQDMCAIJAKQDAQUCYnAFA25pbAUBYQECYnYBAmJwCQC5CQIJAMwIAgIWJXMlZF9fdXNlckJvb3N0Q2xhaW1lZAkAzAgCCQCkAwEFAmJwBQNuaWwFAWEBAmJ3AAIQJXMlc19fZ3d4X190b3RhbAECYngEAmJ5AmJ6AW8CYkEJALkJAgkAzAgCAgolcyVzJXMlcyVkCQDMCAICBHZvdGUJAMwIAgUCYnkJAMwIAgUCYnoJAMwIAgkApQgBBQFvCQDMCAIJAKQDAQUCYkEFA25pbAUBYQECYkIBAmJBCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgtzdGFydEhlaWdodAkAzAgCCQCkAwEFAmJBBQNuaWwFAWEBAmJDAAkAuQkCCQDMCAICAiVzCQDMCAICDmN1cnJlbnRFcG9jaFVpBQNuaWwFAWEBAmJEAgJiRQJiQQkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAhJ2b3RpbmdSZXN1bHRTdGFrZWQJAMwIAgUCYkUJAMwIAgkApAMBBQJiQQUDbmlsBQFhAQJiRgICYkUCYkEJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwJAMwIAgUCYkUJAMwIAgkApAMBBQJiQQUDbmlsBQFhAQJiRwICYkUCYkEJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIqdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0VXBkYXRlSGVpZ2h0CQDMCAIFAmJFCQDMCAIJAKQDAQUCYkEFA25pbAUBYQECYkgDAmJFAW8CYkEJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAh52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3QJAMwIAgUCYkUJAMwIAgkApQgBBQFvCQDMCAIJAKQDAQUCYkEFA25pbAUBYQECYkkDAmJFAW8CYkEJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAhJ2b3RlU3Rha2VkSW50ZWdyYWwJAMwIAgUCYkUJAMwIAgkApQgBBQFvCQDMCAIJAKQDAQUCYkEFA25pbAUBYQECYkoDAmJFAW8CYkEJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAiJ2b3RlU3Rha2VkSW50ZWdyYWxMYXN0VXBkYXRlSGVpZ2h0CQDMCAIFAmJFCQDMCAIJAKUIAQUBbwkAzAgCCQCkAwEFAmJBBQNuaWwFAWEBAmJLAwJiRQFvAmJBCQC5CQIJAMwIAgIIJXMlcyVzJWQJAMwIAgIWdm90ZVN0YWtlZEludGVncmFsTGFzdAkAzAgCBQJiRQkAzAgCCQClCAEFAW8JAMwIAgkApAMBBQJiQQUDbmlsBQFhAQJiTAICYk0CYkUJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIGc3Rha2VkCQDMCAIFAmJNCQDMCAIFAmJFBQNuaWwFAWEAAmJOCQEBWQAAAmFjCQEBWgEFAmJOAAJiTwkBAmFkAQUCYWMAAmJQCQECYWUBBQJhYwACYlEJAQJhZgEFAmFjAAJiUgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQC5CQIJAMwIAgICJXMJAMwIAgIWbHBTdGFraW5nUG9vbHNDb250cmFjdAUDbmlsBQFhCQEBawECLmxwX3N0YWtpbmdfcG9vbHMgY29udHJhY3QgYWRkcmVzcyBpcyB1bmRlZmluZWQJAQFrAQIpaW52YWxpZCBscF9zdGFraW5nX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MAAmJTCQC5CQIJAMwIAgICJXMJAMwIAgIWdm90aW5nRW1pc3Npb25Db250cmFjdAUDbmlsBQFhAAJiVAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUCYk4FAmJTAAJiVQkAuQkCCQDMCAICAiVzCQDMCAICGnZvdGluZ0VtaXNzaW9uUmF0ZUNvbnRyYWN0BQNuaWwFAWEAAmJWCgACYlcJAPwHBAUCYk8CFWdldEJvb3N0Q29lZmZSRUFET05MWQUDbmlsBQNuaWwDCQABAgUCYlcCA0ludAUCYlcJAAIBCQCsAgIJAAMBBQJiVwIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQJiWAECYVcEAmFICQCdCAIFBHRoaXMJAQJiaQEJAKUIAQUCYVcDCQABAgUCYUgCBlN0cmluZwQCYUkFAmFICQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQUCYUkJAQFrAQITaW52YWxpZCB1c2VyIG51bWJlcgMJAAECBQJhSAIEVW5pdAkBAW0BAgxpbnZhbGlkIHVzZXIJAAIBAgtNYXRjaCBlcnJvcgECYlkACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJidwAAAAECYloBAmFXBAJjYQISZ2V0TG9ja2VkR3d4QW1vdW50BAJjYgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBAJhSAkAnQgCBQJiVAUCYlUDCQABAgUCYUgCBFVuaXQFBHVuaXQDCQABAgUCYUgCBlN0cmluZwQCYUkFAmFICQCmCAEFAmFJCQACAQILTWF0Y2ggZXJyb3IJAQFrAQIkaW52YWxpZCB2b3RpbmcgZW1pc3Npb24gcmF0ZSBhZGRyZXNzBAJjYwoAAmJXCQD8BwQFAmJUBQJjYQkAzAgCCQClCAEFAmFXBQNuaWwFA25pbAMJAAECBQJiVwIDSW50BQJiVwkAAgEJAKwCAgkAAwEFAmJXAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEAmNkCgACYlcJAPwHBAUCY2IFAmNhCQDMCAIJAKUIAQUCYVcFA25pbAUDbmlsAwkAAQIFAmJXAgNJbnQFAmJXCQACAQkArAICCQADAQUCYlcCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQCY2UJAJYDAQkAzAgCBQJjYwkAzAgCBQJjZAUDbmlsBQJjZQECY2YHAmNnAmNoAmJjAmNpAmJlAmJmAmFNBAJjagkAuQkCCQDMCAICESVzJXMlcyVzX19oaXN0b3J5CQDMCAIFAmNnCQDMCAIFAmNoCQDMCAIJANgEAQgFAmFNDXRyYW5zYWN0aW9uSWQFA25pbAUBYQQCY2sJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQJiYwkAzAgCCQCkAwEFAmNpCQDMCAIJAKQDAQUCYmUJAMwIAgkApAMBBQJiZgUDbmlsBQFhCQELU3RyaW5nRW50cnkCBQJjagUCY2sBAmNsBAJjbQJjbgJjbwJjcAQCY3EJAQJibAAEAmNyCQECYm0ABAJjcwkBAmJuAAQCY3QJAQJiawAEAmN1CQEBcQIFBHRoaXMFAmNxBAJjdgkBAXECBQR0aGlzBQJjcgQCY3cJAQFxAgUEdGhpcwUCY3MEAmN4CQEBcQIFBHRoaXMFAmN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjcQkAZAIFAmN1BQJjbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY3IJAGQCBQJjdgUCY28JAMwIAgkBDEludGVnZXJFbnRyeQIFAmNzCQBkAgUCY3cFAmNwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjdAkAZAIFAmN4BQJjbQUDbmlsAQJjeQcCYVcCYVgCYmMCYmQCYmUCYmYCYmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFWAgUCYVcFAmFYCQECYmIFBQJiYwUCYmQFAmJlBQJiZgUCYmcFA25pbAECY3oCAmFNAmNBAwkAZgIJAJADAQgFAmFNCHBheW1lbnRzAAEJAQFtAQIbb25seSBvbmUgcGF5bWVudCBpcyBhbGxvd2VkAwkAAAIJAJADAQgFAmFNCHBheW1lbnRzAAAAAAQCY0IJAJEDAggFAmFNCHBheW1lbnRzAAADCQECIT0CCQEFdmFsdWUBCAUCY0IHYXNzZXRJZAUC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CQEBLQEFAmRyBAJkdAkBAmRkAgUCYkUFAmRlBAJkbgkBAmRoAgUCYkUFAmJNBAJkdQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJKAwUCYkUFAmFXBQJjRwUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYkkDBQJiRQUCYVcFAmNHBQJkbgUDbmlsCQDOCAIFAmR0BQJkdQUCZHMBAmR2AgJiRQJiTQQCZHcJAQJjRAAEAmNHCAUCZHcCXzEEAmNICAUCZHcCXzIEAmFXCQERQGV4dHJOYXRpdmUoMTA2MikBBQJiTQQCZHgJAQJiSwMFAmJFBQJhVwUCY0cEAmR5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmR4AAAEAmR6CQECYkgDBQJiRQUCYVcFAmNHBAJkQQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJkegAABAJkbgkBAmRoAgUCYkUFAmJNBAJkYwkBAmNYAQUCYkUEAmRCCQBlAgUCZG4FAmR5BAJkQwkAZQIFAmRjBQJkQQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJkeAUCZG4JAMwIAgkBDEludGVnZXJFbnRyeQIFAmR6BQJkYwUDbmlsBQJkQgUCZEMBAmREAAQCZEUJAQF0AgUCYk8JAQJhaQAEAmRGCQCaCAIFBHRoaXMJAQJhbAAEAmRHCQCaCAIFBHRoaXMJAQJhbQAEAmRICQEBdAIFAmJPCQECYW8ABAJkSQMJAGYCBQZoZWlnaHQFAmRIBQJkSAUGaGVpZ2h0BAJkSgQCYUgFAmRGAwkAAQIFAmFIAgNJbnQEAmRLBQJhSAkAlgMBCQDMCAIJAGUCBQJkSQUCZEsJAMwIAgAABQNuaWwDCQABAgUCYUgCBFVuaXQAAAkAAgECC01hdGNoIGVycm9yBAJkTAkAaQIJAGgCBQJkRQkAZQIFAmJWAAEFAmJWBAJkTQkBC3ZhbHVlT3JFbHNlAgUCZEcAAAQCZE4JAGQCCQBoAgUCZEwFAmRKBQJkTQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYW0ABQJkTgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFsAAUGaGVpZ2h0BQNuaWwFAmROAQJkTwMCYkUCYk0CZFAEAmFXCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUCYk0JAQFrAQIUaW52YWxpZCB1c2VyIGFkZHJlc3MEAmJwCQECYlgBBQJhVwMJAAACBQJicAUCYnAEAmRRAgVlbXB0eQQCZFIDCQECIT0CBQJiRQUCZFEEAmRTCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYk4JAQFSAQUCYkUJAQFrAQkArAICAhV1bnN1cHBvcnRlZCBscCBhc3NldCAFAmJFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQJiTgkBAVQBBQJkUwMFAmRQAAAJAQFtAQkArAICAihub3QgcmVhZG9ubHkgbW9kZTogdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQJiRQQCZFQJAQJicQIFAmJwBQJiRQQCZFUJAQJibwEFAmJwBAJkVgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJkVAkBAXECBQR0aGlzBQJkVQQCZE4ICQECZEQAAl8yBAJkVwkAZQIFAmROBQJkVgMJAGYCAAAFAmRXCQEBbQECEndyb25nIGNhbGN1bGF0aW9ucwQCZFgJAQJkdgIFAmJFBQJiTQQCZFkIBQJkWAJfMQQCZFoIBQJkWAJfMgQCZWEIBQJkWAJfMwQCZWIJAGsDBQJkVwUCZFIFAWQEAmVjAwkAAAIFAmVhAAAAAAkAawMFAmViBQJkWgUCZWEEAmVkCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmRUBQJkTgUDbmlsBQJkWQQCZWUJALkJAgkAzAgCCQCkAwEFAmRWCQDMCAIJAKQDAQUCZFcJAMwIAgkApAMBBQJkUgkAzAgCCQCkAwEFAmRaCQDMCAIJAKQDAQUCZWEFA25pbAIBOgkAlQoDBQJlYwUCZWQFAmVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlZgICYU0CZWcEAmVoCQDMCAIAAQkAzAgCAAMJAMwIAgAGCQDMCAIADAkAzAgCABgJAMwIAgAwBQNuaWwDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQJlaAUCZWcJAQFtAQIQaW52YWxpZCBkdXJhdGlvbgQCYmUJAGgCBQJlZwUBagQCZWkJANgEAQUCYXoDCQECIT0CCQCQAwEIBQJhTQhwYXltZW50cwABCQEBbQECNGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEAmNCCQCRAwIIBQJhTQhwYXltZW50cwAABAJlaggFAmNCBmFtb3VudAMJAQIhPQIFAmF6CQEFdmFsdWUBCAUCY0IHYXNzZXRJZAkBAW0BCQCsAgIJAKwCAgIeaW52YWxpZCBhc3NldCBpcyBpbiBwYXltZW50IC0gBQJlaQIMIGlzIGV4cGVjdGVkBAJlawkBAmJoAAQCYVcIBQJhTQZjYWxsZXIEAmJNCQClCAEFAmFXBAJlbAkBCWlzRGVmaW5lZAEJAKIIAQkBAmJpAQUCYk0EAmVtAwUCZWwJAQV2YWx1ZQEJAKIIAQkBAmJpAQUCYk0JAKQDAQkBAXQCBQR0aGlzBQJlawQCYnAJAQ1wYXJzZUludFZhbHVlAQUCZW0EAmNpBQZoZWlnaHQDAwkAZgIFAmFBBQJlagkBAiE9AgUCYVcFAmJSBwkBAW0BCQCsAgICImFtb3VudCBpcyBsZXNzIHRoZW4gbWluTG9ja0Ftb3VudD0JAKQDAQUCYUEDCQBmAgUCYUIFAmJlCQEBbQEJAKwCAgItcGFzc2VkIGR1cmF0aW9uIGlzIGxlc3MgdGhlbiBtaW5Mb2NrRHVyYXRpb249CQCkAwEFAmFCAwkAZgIFAmJlBQJhQwkBAW0BCQCsAgICMHBhc3NlZCBkdXJhdGlvbiBpcyBncmVhdGVyIHRoZW4gbWF4TG9ja0R1cmF0aW9uPQkApAMBBQJhQwQCZW4JAGsDBQJiZQUBYwUCYUMEAmVvCQBrAwUCZWoFAmVuBQFjBAJlcAkBAmJZAAQCZFUJAQJibwEFAmJwBAJkTggJAQJkRAACXzIEAmVxCQECY0MBBQJhVwQCZXIJAP0HBAUCYlECEXJlZnJlc2hVc2VyUmV3YXJkCQDMCAIIBQJhVwVieXRlcwUDbmlsBQNuaWwDCQAAAgUCZXIFAmVyBAJlcwMFAmVsBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFAmVrCQBkAgUCYnAAAQkAzAgCCQELU3RyaW5nRW50cnkCCQECYmkBBQJiTQUCZW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmJqAQUCZW0FAmJNBQNuaWwJAJQKAgkAzggCCQDNCAIJAM4IAgkAzggCBQJlcwkBAmN5BwUCYVcIBQJhTQ10cmFuc2FjdGlvbklkBQJlagUCY2kFAmJlBQJlbwAACQECY2wEBQJlagUCYmUAAQMFAmVsAAAAAQkBAmNmBwIEbG9jawUCYk0FAmVqBQJjaQUCYmUFAmVvBQJhTQkAzAgCCQEMSW50ZWdlckVudHJ5AgUCZFUFAmROCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYncACQBkAgUCZXAFAmVvCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYmEBBQJhVwkAZAIFAmVxBQJlbwUDbmlsBQJlbwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZXQCAmFXAmV1BAJldgkBAmFaAgUCYVcFAmV1BAJldwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmV2BQJhUAQCY2kJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJldgUCYVEEAmV4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXYFAmFSBAJleQkAZAIFAmNpBQJleAQCYmcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJldgUCYVUEAmJmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXYFAmFUBAJlegkAaQIJAGUCBQZoZWlnaHQFAmNpBQFpBAJlQQkAvAIDCQC2AgEFAmV6CQC5AgIJALYCAQkAaAIACAUBaQUBaAkAtgIBBQJleAQCZUIDCQBmAgUGaGVpZ2h0BQJleQkAZQIFAmV3BQJiZwkAoAMBCQC8AgMJALYCAQUCZXcJALgCAgUBaAkAdgYJALYCAQAFAAEFAmVBBQFmBQFmBQRET1dOBQFoBQJlQhECYU0BC2NvbnN0cnVjdG9yBgJlQwJlRAJhQQJlRQJlRgJhRAQCZUcJAQJhTAEFAmFNAwkAAAIFAmVHBQJlRwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYmgAAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmF3AAkBAmFGBQUCZUQFAmFBBQJlRQUCZUYFAmFECQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFFAAUCZUMFA25pbAkBAmNsBAAAAAAAAAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNAQdsb2NrUmVmAwJiZQJlSAJlSQQCZUoJAQJlZgIFAmFNBQJiZQQCZUsIBQJlSgJfMQQCZW8IBQJlSgJfMgQCZUwJAKUIAQgFAmFNBmNhbGxlcgQCZU0DAwkAAAIFAmVIAgAGCQAAAgUCZUkBAAUEdW5pdAkA/AcEBQFBAgpjcmVhdGVQYWlyCQDMCAIFAUQJAMwIAgUCZUgJAMwIAgUCZUwJAMwIAgUCZUkFA25pbAUDbmlsAwkAAAIFAmVNBQJlTQQCZU4JAPwHBAUCYUQCFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkJAMwIAgkApQgBCAUCYU0GY2FsbGVyCQDMCAIFAmVvBQNuaWwFA25pbAMJAAACBQJlTgUCZU4JAJQKAgUCZUsFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU0BBGxvY2sBAmJlBAJlTwkBAmVmAgUCYU0FAmJlBAJlSwgFAmVPAl8xBAJlbwgFAmVPAl8yBAJlTgkA/AcEBQJhRAIWdXBkYXRlUmVmZXJyYWxBY3Rpdml0eQkAzAgCCQClCAEIBQJhTQZjYWxsZXIJAMwIAgUCZW8FA25pbAUDbmlsAwkAAAIFAmVOBQJlTgkAlAoCBQJlSwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTQEMY2xhaW1XeEJvb3N0AgJiRQJiTQMJAQIhPQIFAmJQCAUCYU0GY2FsbGVyCQEBbQECEnBlcm1pc3Npb25zIGRlbmllZAQCZVAJAQJkTwMFAmJFBQJiTQcEAmVRCAUCZVACXzEEAmVkCAUCZVACXzIEAmVlCAUCZVACXzMJAJQKAgUCZWQJAMwIAgUCZVEFA25pbAJhTQEUY2xhaW1XeEJvb3N0UkVBRE9OTFkCAmJFAmJNBAJlUgkBAmRPAwUCYkUFAmJNBgQCZVEIBQJlUgJfMQQCZWQIBQJlUgJfMgQCZWUIBQJlUgJfMwkAlAoCBQNuaWwJAMwIAgUCZVEJAMwIAgUCZWUFA25pbAJhTQEGdW5sb2NrAgJlUwJiYwQCYVcIBQJhTQZjYWxsZXIEAmJNCQClCAEFAmFXBAJhWAkA2QQBBQJlUwQCZXYJAQJhWgIFAmFXAwkAAAIFAmVTAgAFBHVuaXQFAmFYBAJldwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmV2BQJhUAQCY2kJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJldgUCYVEEAmV4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXYFAmFSBAJleQkAZAIFAmNpBQJleAQCYmcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJldgUCYVUEAmJmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXYFAmFUBAJlegkAaQIJAGUCBQZoZWlnaHQFAmNpBQFpBAJlQgkBAmV0AgUCYVcDCQAAAgUCZVMCAAUEdW5pdAUCYVgDCQBmAgUCYmMFAmVCCQEBbQEJAKwCAgIabWF4aW11bSBhbW91bnQgdG8gdW5sb2NrOiAJAKQDAQUCZUIEAmVUCQCWAwEJAMwIAgUCYmMJAMwIAgkAawMJAGgCBQJlegUBaQUCZXcFAmFDBQNuaWwEAmVVCQEBdwIJAGUCBQJiZgUCZVQCDGd3eFJlbWFpbmluZwQCZVYJAQJiWgEFAmFXAwkAZgIFAmVWBQJlVQkBAW0BCQCsAgICE2xvY2tlZCBnd3ggYW1vdW50OiAJAKQDAQUCZVYDCQBnAgAABQJldwkBAW0BAhFub3RoaW5nIHRvIHVubG9jawQCZXAJAQJiWQAEAmVxCQECY0MBBQJhVwQCZXIJAP0HBAUCYlECEXJlZnJlc2hVc2VyUmV3YXJkCQDMCAIIBQJhVwVieXRlcwUDbmlsBQNuaWwDCQAAAgUCZXIFAmVyCQDOCAIJAM0IAgkAzQgCCQDOCAIJAQJjeQcFAmFXBQJhWAUCZXcFAmNpBQJleAUCZVUJAGQCBQJiZwUCYmMJAQJjbAQJAQEtAQUCYmMAAAAAAAAJAQJjZgcCBnVubG9jawUCYk0FAmJjBQJjaQUCZXgFAmVUBQJhTQkBDlNjcmlwdFRyYW5zZmVyAwUCYVcFAmJjBQJhegkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJ3AAkBAXcCCQBlAgUCZXAFAmVUAghnd3hUb3RhbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJhAQUCYVcJAQF3AgkAZQIFAmVxBQJlVAISdXNlckd3eEFtb3VudFRvdGFsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU0BE2d3eFVzZXJJbmZvUkVBRE9OTFkBAmJNBAJhVwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFAmJNCQEBawECFGludmFsaWQgdXNlciBhZGRyZXNzBAJiZgkBAmNDAQUCYVcJAJQKAgUDbmlsCQDMCAIFAmJmBQNuaWwCYU0BF3VzZXJNYXhEdXJhdGlvblJFQURPTkxZAQJiTQkAlAoCBQNuaWwJAJQKAgIMaW5jcmVhc2VMb2NrBQJhQwJhTQEgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkCAmJNAmVXBAJhVwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFAmJNCQEBawECFGludmFsaWQgdXNlciBhZGRyZXNzBAJiZgkBAmNDAQUCYVcJAJQKAgUDbmlsBQJiZgJhTQEQZ2V0VXNlckd3eEFtb3VudAECYk0EAmFXCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUCYk0JAQFrAQIUaW52YWxpZCB1c2VyIGFkZHJlc3MEAmJmCQECY0MBBQJhVwkAlAoCBQNuaWwFAmJmAmFNARNnZXRHd3hUb3RhbFJFQURPTkxZAAkAlAoCBQNuaWwJAQJiWQACYU0BFW9uQm9vc3RFbWlzc2lvblVwZGF0ZQAEAmVHAwkAAAIIBQJhTQZjYWxsZXIFAmJPBgkBAmFMAQUCYU0DCQAAAgUCZUcFAmVHCQECZEQACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNARJvblN0YWtlZFZvdGVVcGRhdGUDAmJFAmJNAmRwBAJlRwMJAAACCAUCYU0GY2FsbGVyBQJiUAYJAQJhTAEFAmFNAwkAAAIFAmVHBQJlRwQCZHMJAQJkbwMFAmJFBQJiTQUCZHAJAJQKAgUCZHMFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU0BHWdldFZvdGluZ1Jlc3VsdFN0YWtlZFJFQURPTkxZAQJiRQkAlAoCBQNuaWwJAQJjVAEFAmJFAmFNASVnZXRWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbFJFQURPTkxZAQJiRQkAlAoCBQNuaWwJAQJjWAEFAmJFAmFNARxnZXRVc2VyVm90ZUZpbmFsaXplZFJFQURPTkxZAgJiRQJiTQkAlAoCBQNuaWwJAQJjTQIFAmJFBQJiTQJhTQEhZ2V0VXNlclZvdGVTdGFrZWRJbnRlZ3JhbFJFQURPTkxZAgJiRQJiTQkAlAoCBQNuaWwJAQJkaAIFAmJFBQJiTQECZVgBAmVZAAQCZVoEAmFICQECYUoAAwkAAQIFAmFIAgpCeXRlVmVjdG9yBAJhTwUCYUgFAmFPAwkAAQIFAmFIAgRVbml0CAUCZVgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAmVYCWJvZHlCeXRlcwkAkQMCCAUCZVgGcHJvb2ZzAAAFAmVaQqnjGQ==", "height": 2703083, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5tq82HhAAub5U8fx747UALvg3hLXamtnW4EbEXtMkR9b Next: 9eVb3p4s8WX1DWApeLM47hFinqjrMK2nfYEqDVNKrjEf Diff:
OldNewDifferences
714714 }
715715
716716
717+func et (aW,eu) = {
718+ let ev = aZ(aW, eu)
719+ let ew = parseIntValue(ev[aP])
720+ let ci = parseIntValue(ev[aQ])
721+ let ex = parseIntValue(ev[aR])
722+ let ey = (ci + ex)
723+ let bg = parseIntValue(ev[aU])
724+ let bf = parseIntValue(ev[aT])
725+ let ez = ((height - ci) / i)
726+ let eA = fraction(toBigInt(ez), (toBigInt((8 * i)) * h), toBigInt(ex))
727+ let eB = if ((height > ey))
728+ then (ew - bg)
729+ else toInt(fraction(toBigInt(ew), (h - pow(toBigInt(5), 1, eA, f, f, DOWN)), h))
730+ eB
731+ }
732+
733+
717734 @Callable(aM)
718-func constructor (et,eu,aA,ev,ew,aD) = {
719- let ex = aL(aM)
720- if ((ex == ex))
721- then ([IntegerEntry(bh(), 0), StringEntry(aw(), aF(eu, aA, ev, ew, aD)), StringEntry(E(), et)] ++ cl(0, 0, 0, 0))
735+func constructor (eC,eD,aA,eE,eF,aD) = {
736+ let eG = aL(aM)
737+ if ((eG == eG))
738+ then ([IntegerEntry(bh(), 0), StringEntry(aw(), aF(eD, aA, eE, eF, aD)), StringEntry(E(), eC)] ++ cl(0, 0, 0, 0))
722739 else throw("Strict value is not equal to itself.")
723740 }
724741
725742
726743
727744 @Callable(aM)
728-func lockRef (be,ey,ez) = {
729- let eA = ef(aM, be)
730- let eB = eA._1
731- let eo = eA._2
732- let eC = toString(aM.caller)
733- let eD = if (if ((ey == ""))
745+func lockRef (be,eH,eI) = {
746+ let eJ = ef(aM, be)
747+ let eK = eJ._1
748+ let eo = eJ._2
749+ let eL = toString(aM.caller)
750+ let eM = if (if ((eH == ""))
734751 then true
735- else (ez == base58''))
752+ else (eI == base58''))
736753 then unit
737- else invoke(A, "createPair", [D, ey, eC, ez], nil)
738- if ((eD == eD))
754+ else invoke(A, "createPair", [D, eH, eL, eI], nil)
755+ if ((eM == eM))
739756 then {
740- let eE = invoke(aD, "updateReferralActivity", [toString(aM.caller), eo], nil)
741- if ((eE == eE))
742- then $Tuple2(eB, unit)
757+ let eN = invoke(aD, "updateReferralActivity", [toString(aM.caller), eo], nil)
758+ if ((eN == eN))
759+ then $Tuple2(eK, unit)
743760 else throw("Strict value is not equal to itself.")
744761 }
745762 else throw("Strict value is not equal to itself.")
749766
750767 @Callable(aM)
751768 func lock (be) = {
752- let eF = ef(aM, be)
753- let eB = eF._1
754- let eo = eF._2
755- let eE = invoke(aD, "updateReferralActivity", [toString(aM.caller), eo], nil)
756- if ((eE == eE))
757- then $Tuple2(eB, unit)
769+ let eO = ef(aM, be)
770+ let eK = eO._1
771+ let eo = eO._2
772+ let eN = invoke(aD, "updateReferralActivity", [toString(aM.caller), eo], nil)
773+ if ((eN == eN))
774+ then $Tuple2(eK, unit)
758775 else throw("Strict value is not equal to itself.")
759776 }
760777
764781 func claimWxBoost (bE,bM) = if ((bP != aM.caller))
765782 then m("permissions denied")
766783 else {
767- let eG = dO(bE, bM, false)
768- let eH = eG._1
769- let ed = eG._2
770- let ee = eG._3
771- $Tuple2(ed, [eH])
784+ let eP = dO(bE, bM, false)
785+ let eQ = eP._1
786+ let ed = eP._2
787+ let ee = eP._3
788+ $Tuple2(ed, [eQ])
772789 }
773790
774791
775792
776793 @Callable(aM)
777794 func claimWxBoostREADONLY (bE,bM) = {
778- let eI = dO(bE, bM, true)
779- let eH = eI._1
780- let ed = eI._2
781- let ee = eI._3
782- $Tuple2(nil, [eH, ee])
795+ let eR = dO(bE, bM, true)
796+ let eQ = eR._1
797+ let ed = eR._2
798+ let ee = eR._3
799+ $Tuple2(nil, [eQ, ee])
783800 }
784801
785802
786803
787804 @Callable(aM)
788-func unlock (eJ,bc) = {
805+func unlock (eS,bc) = {
789806 let aW = aM.caller
790807 let bM = toString(aW)
791- let aX = fromBase58String(eJ)
792- let eK = aZ(aW, if ((eJ == ""))
808+ let aX = fromBase58String(eS)
809+ let ev = aZ(aW, if ((eS == ""))
793810 then unit
794811 else aX)
795- let eL = parseIntValue(eK[aP])
796- let ci = parseIntValue(eK[aQ])
797- let eM = parseIntValue(eK[aR])
798- let eN = (ci + eM)
799- let bg = parseIntValue(eK[aU])
800- let bf = parseIntValue(eK[aT])
801- let eO = ((height - ci) / i)
802- let eP = fraction(toBigInt(eO), (toBigInt((8 * i)) * h), toBigInt(eM))
803- let eQ = if ((height > eN))
804- then (eL - bg)
805- else toInt(fraction(toBigInt(eL), (h - pow(toBigInt(5), 1, eP, f, f, DOWN)), h))
806- if ((bc > eQ))
807- then m(("maximum amount to unlock: " + toString(eQ)))
812+ let ew = parseIntValue(ev[aP])
813+ let ci = parseIntValue(ev[aQ])
814+ let ex = parseIntValue(ev[aR])
815+ let ey = (ci + ex)
816+ let bg = parseIntValue(ev[aU])
817+ let bf = parseIntValue(ev[aT])
818+ let ez = ((height - ci) / i)
819+ let eB = et(aW, if ((eS == ""))
820+ then unit
821+ else aX)
822+ if ((bc > eB))
823+ then m(("maximum amount to unlock: " + toString(eB)))
808824 else {
809- let eR = max([bc, fraction((eO * i), eL, aC)])
810- let eS = w((bf - eR), "gwxRemaining")
811- let eT = bZ(aW)
812- if ((eT > eS))
813- then m(("locked gwx amount: " + toString(eT)))
814- else if ((0 >= eL))
825+ let eT = max([bc, fraction((ez * i), ew, aC)])
826+ let eU = w((bf - eT), "gwxRemaining")
827+ let eV = bZ(aW)
828+ if ((eV > eU))
829+ then m(("locked gwx amount: " + toString(eV)))
830+ else if ((0 >= ew))
815831 then m("nothing to unlock")
816832 else {
817833 let ep = bY()
818834 let eq = cC(aW)
819835 let er = reentrantInvoke(bQ, "refreshUserReward", [aW.bytes], nil)
820836 if ((er == er))
821- then ((((cy(aW, aX, eL, ci, eM, eS, (bg + bc)) ++ cl(-(bc), 0, 0, 0)) :+ cf("unlock", bM, bc, ci, eM, eR, aM)) :+ ScriptTransfer(aW, bc, az)) ++ [IntegerEntry(bw(), w((ep - eR), "gwxTotal")), IntegerEntry(ba(aW), w((eq - eR), "userGwxAmountTotal"))])
837+ then ((((cy(aW, aX, ew, ci, ex, eU, (bg + bc)) ++ cl(-(bc), 0, 0, 0)) :+ cf("unlock", bM, bc, ci, ex, eT, aM)) :+ ScriptTransfer(aW, bc, az)) ++ [IntegerEntry(bw(), w((ep - eT), "gwxTotal")), IntegerEntry(ba(aW), w((eq - eT), "userGwxAmountTotal"))])
822838 else throw("Strict value is not equal to itself.")
823839 }
824840 }
841857
842858
843859 @Callable(aM)
844-func getUserGwxAmountAtHeightREADONLY (bM,eU) = {
860+func getUserGwxAmountAtHeightREADONLY (bM,eW) = {
845861 let aW = valueOrErrorMessage(addressFromString(bM), k("invalid user address"))
846862 let bf = cC(aW)
847863 $Tuple2(nil, bf)
865881
866882 @Callable(aM)
867883 func onBoostEmissionUpdate () = {
868- let ex = if ((aM.caller == bO))
884+ let eG = if ((aM.caller == bO))
869885 then true
870886 else aL(aM)
871- if ((ex == ex))
887+ if ((eG == eG))
872888 then dD()
873889 else throw("Strict value is not equal to itself.")
874890 }
877893
878894 @Callable(aM)
879895 func onStakedVoteUpdate (bE,bM,dp) = {
880- let ex = if ((aM.caller == bP))
896+ let eG = if ((aM.caller == bP))
881897 then true
882898 else aL(aM)
883- if ((ex == ex))
899+ if ((eG == eG))
884900 then {
885901 let ds = do(bE, bM, dp)
886902 $Tuple2(ds, unit)
909925 func getUserVoteStakedIntegralREADONLY (bE,bM) = $Tuple2(nil, dh(bE, bM))
910926
911927
912-@Verifier(eV)
913-func eW () = {
914- let eX = {
928+@Verifier(eX)
929+func eY () = {
930+ let eZ = {
915931 let aH = aJ()
916932 if ($isInstanceOf(aH, "ByteVector"))
917933 then {
919935 aO
920936 }
921937 else if ($isInstanceOf(aH, "Unit"))
922- then eV.senderPublicKey
938+ then eX.senderPublicKey
923939 else throw("Match error")
924940 }
925- sigVerify(eV.bodyBytes, eV.proofs[0], eX)
941+ sigVerify(eX.bodyBytes, eX.proofs[0], eZ)
926942 }
927943
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
1212 let e = "boosting.ride"
1313
1414 let f = 18
1515
1616 let g = 1000000000000000000
1717
1818 let h = toBigInt(g)
1919
2020 let i = 1440
2121
2222 let j = 43800
2323
2424 func k (l) = makeString([e, ": ", l], "")
2525
2626
2727 func m (l) = throw(k(l))
2828
2929
3030 func n (o,p) = valueOrErrorMessage(getString(o, p), k((("mandatory this." + p) + " is not defined")))
3131
3232
3333 func q (o,p) = valueOrElse(getInteger(o, p), 0)
3434
3535
3636 func r (o,p,s) = valueOrElse(getInteger(o, p), s)
3737
3838
3939 func t (o,p) = valueOrErrorMessage(getInteger(o, p), k((("mandatory this." + p) + " is not defined")))
4040
4141
4242 func u (v) = if ((0 > v))
4343 then -(v)
4444 else v
4545
4646
4747 func w (x,y) = if ((x >= 0))
4848 then x
4949 else m((valueOrElse(y, "value") + " should be positive"))
5050
5151
5252 func z () = makeString(["%s%s", "config", "referralsContractAddress"], a)
5353
5454
5555 let A = addressFromStringValue(n(this, z()))
5656
5757 let B = makeString(["%s%s", "referral", "programName"], a)
5858
5959 let C = "wxlock"
6060
6161 let D = valueOrElse(getString(this, B), C)
6262
6363 func E () = "%s%s__config__factoryAddress"
6464
6565
6666 let F = 1
6767
6868 let G = 2
6969
7070 let H = 3
7171
7272 let I = 4
7373
7474 let J = 5
7575
7676 let K = 6
7777
7878 let L = 7
7979
8080 let M = 8
8181
8282 let N = 9
8383
8484 let O = 10
8585
8686 let P = 11
8787
8888 func Q () = "%s__factoryConfig"
8989
9090
9191 func R (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], a)
9292
9393
9494 func T (U) = makeString(["%s%s", "poolWeight", U], a)
9595
9696
9797 func V (W,X) = ((("%s%s__poolWeight__" + W) + "__") + toString(X))
9898
9999
100100 func Y () = addressFromStringValue(n(this, E()))
101101
102102
103103 func Z (aa) = split(n(aa, Q()), a)
104104
105105
106106 func ab (ac) = addressFromStringValue(ac[G])
107107
108108
109109 func ad (ac) = addressFromStringValue(ac[J])
110110
111111
112112 func ae (ac) = addressFromStringValue(ac[F])
113113
114114
115115 func af (ac) = addressFromStringValue(ac[O])
116116
117117
118118 func ag () = "%s__managerPublicKey"
119119
120120
121121 func ah () = "%s__managerVaultAddress"
122122
123123
124124 func ai () = "%s%s__ratePerBlock__current"
125125
126126
127127 func aj () = "%s%s__ratePerBlockMax__current"
128128
129129
130130 func ak () = "%s%s__emission__startBlock"
131131
132132
133133 func al () = "%s%s__boostingV2__startBlock"
134134
135135
136136 func am () = "%s%s__boostingV2__integral"
137137
138138
139139 func an () = "%s%s__emission__duration"
140140
141141
142142 func ao () = "%s%s__emission__endBlock"
143143
144144
145145 func ap () = "%s__nextPeriod"
146146
147147
148148 func aq () = "%s%s__gwxRewardEmissionPart__startHeight"
149149
150150
151151 let ar = 1
152152
153153 let as = 2
154154
155155 let at = 3
156156
157157 let au = 4
158158
159159 let av = 5
160160
161161 func aw () = "%s__config"
162162
163163
164164 func ax () = split(n(this, aw()), a)
165165
166166
167167 let ay = ax()
168168
169169 let az = fromBase58String(ay[ar])
170170
171171 let aA = valueOrErrorMessage(parseInt(ay[as]), k("invalid min lock amount"))
172172
173173 let aB = valueOrErrorMessage(parseInt(ay[at]), k("invalid min lock duration"))
174174
175175 let aC = valueOrErrorMessage(parseInt(ay[au]), k("invalid max lock duration"))
176176
177177 let aD = valueOrErrorMessage(addressFromString(ay[av]), k("invalid math contract address"))
178178
179179 func aE (az,aA,aB,aC,aD) = makeString(["%s%d%d%d%s", az, aA, aB, aC, aD], a)
180180
181181
182182 func aF (az,aA,aB,aC,aD) = aE(az, toString(aA), toString(aB), toString(aC), aD)
183183
184184
185185 func aG () = {
186186 let aH = getString(ah())
187187 if ($isInstanceOf(aH, "String"))
188188 then {
189189 let aI = aH
190190 addressFromStringValue(aI)
191191 }
192192 else this
193193 }
194194
195195
196196 func aJ () = {
197197 let aK = aG()
198198 let aH = getString(aK, ag())
199199 if ($isInstanceOf(aH, "String"))
200200 then {
201201 let aI = aH
202202 fromBase58String(aI)
203203 }
204204 else if ($isInstanceOf(aH, "Unit"))
205205 then unit
206206 else throw("Match error")
207207 }
208208
209209
210210 func aL (aM) = {
211211 let aN = m("Permission denied")
212212 let aH = aJ()
213213 if ($isInstanceOf(aH, "ByteVector"))
214214 then {
215215 let aO = aH
216216 if ((aM.callerPublicKey == aO))
217217 then true
218218 else aN
219219 }
220220 else if ($isInstanceOf(aH, "Unit"))
221221 then if ((aM.caller == this))
222222 then true
223223 else aN
224224 else throw("Match error")
225225 }
226226
227227
228228 let aP = 1
229229
230230 let aQ = 2
231231
232232 let aR = 3
233233
234234 let aS = 4
235235
236236 let aT = 5
237237
238238 let aU = 6
239239
240240 func aV (aW,aX) = makeString(["%s%s%s__lock", toString(aW), {
241241 let aH = aX
242242 if ($isInstanceOf(aH, "ByteVector"))
243243 then {
244244 let aY = aH
245245 toBase58String(aY)
246246 }
247247 else if ($isInstanceOf(aH, "Unit"))
248248 then "legacy"
249249 else throw("Match error")
250250 }], a)
251251
252252
253253 func aZ (aW,aX) = split(n(this, aV(aW, aX)), a)
254254
255255
256256 func ba (aW) = makeString(["%s%s__gwxAmountTotal", toString(aW)], a)
257257
258258
259259 func bb (bc,bd,be,bf,bg) = makeString(["%d%d%d%d%d%d%d", toString(bc), toString(bd), toString(be), toString(lastBlock.timestamp), toString(bf), toString(bg)], a)
260260
261261
262262 func bh () = "%s__nextUserNum"
263263
264264
265265 func bi (aW) = makeString(["%s%s%s__mapping__user2num", aW], a)
266266
267267
268268 func bj (X) = makeString(["%s%s%s__mapping__num2user", X], a)
269269
270270
271271 func bk () = "%s%s__stats__activeTotalLocked"
272272
273273
274274 func bl () = "%s%s__stats__locksDurationSumInBlocks"
275275
276276
277277 func bm () = "%s%s__stats__locksCount"
278278
279279
280280 func bn () = "%s%s__stats__activeUsersCount"
281281
282282
283283 func bo (bp) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bp)], a)
284284
285285
286286 func bq (bp,br) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(bp), br], a)
287287
288288
289289 func bs (bp) = makeString(["%s%d__maxBoostInt", toString(bp)], a)
290290
291291
292292 func bt () = "%s%s__maxBoostInt__total"
293293
294294
295295 func bu (bp) = makeString(["%s%d__userBoostAvaliableToClaimTotal", toString(bp)], a)
296296
297297
298298 func bv (bp) = makeString(["%s%d__userBoostClaimed", toString(bp)], a)
299299
300300
301301 func bw () = "%s%s__gwx__total"
302302
303303
304304 func bx (by,bz,o,bA) = makeString(["%s%s%s%s%d", "vote", by, bz, toString(o), toString(bA)], a)
305305
306306
307307 func bB (bA) = makeString(["%s%d", "startHeight", toString(bA)], a)
308308
309309
310310 func bC () = makeString(["%s", "currentEpochUi"], a)
311311
312312
313313 func bD (bE,bA) = makeString(["%s%s%d", "votingResultStaked", bE, toString(bA)], a)
314314
315315
316316 func bF (bE,bA) = makeString(["%s%s%d", "votingResultStakedIntegral", bE, toString(bA)], a)
317317
318318
319319 func bG (bE,bA) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bE, toString(bA)], a)
320320
321321
322322 func bH (bE,o,bA) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bE, toString(o), toString(bA)], a)
323323
324324
325325 func bI (bE,o,bA) = makeString(["%s%s%s%d", "voteStakedIntegral", bE, toString(o), toString(bA)], a)
326326
327327
328328 func bJ (bE,o,bA) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bE, toString(o), toString(bA)], a)
329329
330330
331331 func bK (bE,o,bA) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bE, toString(o), toString(bA)], a)
332332
333333
334334 func bL (bM,bE) = makeString(["%s%s%s", "staked", bM, bE], a)
335335
336336
337337 let bN = Y()
338338
339339 let ac = Z(bN)
340340
341341 let bO = ad(ac)
342342
343343 let bP = ae(ac)
344344
345345 let bQ = af(ac)
346346
347347 let bR = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), k("lp_staking_pools contract address is undefined"))), k("invalid lp_staking_pools contract address"))
348348
349349 let bS = makeString(["%s", "votingEmissionContract"], a)
350350
351351 let bT = addressFromStringValue(getStringValue(bN, bS))
352352
353353 let bU = makeString(["%s", "votingEmissionRateContract"], a)
354354
355355 let bV = {
356356 let bW = invoke(bO, "getBoostCoeffREADONLY", nil, nil)
357357 if ($isInstanceOf(bW, "Int"))
358358 then bW
359359 else throw(($getType(bW) + " couldn't be cast to Int"))
360360 }
361361
362362 func bX (aW) = {
363363 let aH = getString(this, bi(toString(aW)))
364364 if ($isInstanceOf(aH, "String"))
365365 then {
366366 let aI = aH
367367 valueOrErrorMessage(parseInt(aI), k("invalid user number"))
368368 }
369369 else if ($isInstanceOf(aH, "Unit"))
370370 then m("invalid user")
371371 else throw("Match error")
372372 }
373373
374374
375375 func bY () = valueOrElse(getInteger(this, bw()), 0)
376376
377377
378378 func bZ (aW) = {
379379 let ca = "getLockedGwxAmount"
380380 let cb = valueOrErrorMessage({
381381 let aH = getString(bT, bU)
382382 if ($isInstanceOf(aH, "Unit"))
383383 then unit
384384 else if ($isInstanceOf(aH, "String"))
385385 then {
386386 let aI = aH
387387 addressFromString(aI)
388388 }
389389 else throw("Match error")
390390 }, k("invalid voting emission rate address"))
391391 let cc = {
392392 let bW = invoke(bT, ca, [toString(aW)], nil)
393393 if ($isInstanceOf(bW, "Int"))
394394 then bW
395395 else throw(($getType(bW) + " couldn't be cast to Int"))
396396 }
397397 let cd = {
398398 let bW = invoke(cb, ca, [toString(aW)], nil)
399399 if ($isInstanceOf(bW, "Int"))
400400 then bW
401401 else throw(($getType(bW) + " couldn't be cast to Int"))
402402 }
403403 let ce = max([cc, cd])
404404 ce
405405 }
406406
407407
408408 func cf (cg,ch,bc,ci,be,bf,aM) = {
409409 let cj = makeString(["%s%s%s%s__history", cg, ch, toBase58String(aM.transactionId)], a)
410410 let ck = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(bc), toString(ci), toString(be), toString(bf)], a)
411411 StringEntry(cj, ck)
412412 }
413413
414414
415415 func cl (cm,cn,co,cp) = {
416416 let cq = bl()
417417 let cr = bm()
418418 let cs = bn()
419419 let ct = bk()
420420 let cu = q(this, cq)
421421 let cv = q(this, cr)
422422 let cw = q(this, cs)
423423 let cx = q(this, ct)
424424 [IntegerEntry(cq, (cu + cn)), IntegerEntry(cr, (cv + co)), IntegerEntry(cs, (cw + cp)), IntegerEntry(ct, (cx + cm))]
425425 }
426426
427427
428428 func cy (aW,aX,bc,bd,be,bf,bg) = [StringEntry(aV(aW, aX), bb(bc, bd, be, bf, bg))]
429429
430430
431431 func cz (aM,cA) = if ((size(aM.payments) > 1))
432432 then m("only one payment is allowed")
433433 else if ((size(aM.payments) == 0))
434434 then 0
435435 else {
436436 let cB = aM.payments[0]
437437 if ((value(cB.assetId) != cA))
438438 then m("invalid asset id in payment")
439439 else cB.amount
440440 }
441441
442442
443443 func cC (aW) = valueOrElse(getInteger(this, ba(aW)), 0)
444444
445445
446446 func cD () = {
447447 let cE = {
448448 let cF = value(getInteger(bT, bC()))
449449 let cG = (cF - 1)
450450 if ((0 > cG))
451451 then m("invalid epoch")
452452 else $Tuple2(cF, cG)
453453 }
454454 let cF = cE._1
455455 let cG = cE._2
456456 let cH = value(getInteger(bT, bB(cF)))
457457 $Tuple2(cG, cH)
458458 }
459459
460460
461461 func cI (bE) = {
462462 let cJ = 4
463463 let cK = 5
464464 let cL = {
465465 let bW = invoke(bN, "getPoolConfigByLpAssetIdREADONLY", [bE], nil)
466466 if ($isInstanceOf(bW, "List[Any]"))
467467 then bW
468468 else throw(($getType(bW) + " couldn't be cast to List[Any]"))
469469 }
470470 let by = {
471471 let bW = cL[cJ]
472472 if ($isInstanceOf(bW, "String"))
473473 then bW
474474 else throw(($getType(bW) + " couldn't be cast to String"))
475475 }
476476 let bz = {
477477 let bW = cL[cK]
478478 if ($isInstanceOf(bW, "String"))
479479 then bW
480480 else throw(($getType(bW) + " couldn't be cast to String"))
481481 }
482482 $Tuple2(by, bz)
483483 }
484484
485485
486486 func cM (bE,bM) = {
487487 let aW = addressFromStringValue(bM)
488488 let cN = cD()
489489 let cG = cN._1
490490 let cH = cN._2
491491 let cO = cI(bE)
492492 let by = cO._1
493493 let bz = cO._2
494494 let cP = bx(by, bz, aW, cG)
495495 let cQ = valueOrElse(getInteger(bT, cP), 0)
496496 cQ
497497 }
498498
499499
500500 func cR (bE,bM) = {
501501 let cS = valueOrElse(getInteger(bP, bL(bM, bE)), 0)
502502 let cQ = cM(bE, bM)
503503 if ((cS == 0))
504504 then 0
505505 else cQ
506506 }
507507
508508
509509 func cT (bE) = {
510510 let cU = cD()
511511 let cG = cU._1
512512 let cH = cU._2
513513 let cV = valueOrElse(getInteger(bT, bD(bE, cG)), 0)
514514 let cW = valueOrElse(getInteger(this, bD(bE, cG)), cV)
515515 cW
516516 }
517517
518518
519519 func cX (bE) = {
520520 let cY = cD()
521521 let cG = cY._1
522522 let cH = cY._2
523523 let cW = cT(bE)
524524 let cZ = valueOrElse(getInteger(this, bF(bE, cG)), 0)
525525 let da = valueOrElse(getInteger(this, bG(bE, cG)), cH)
526526 let db = (height - da)
527527 let dc = ((db * cW) + cZ)
528528 dc
529529 }
530530
531531
532532 func dd (bE,de) = {
533533 let df = cD()
534534 let cG = df._1
535535 let cH = df._2
536536 let cW = cT(bE)
537537 let dg = (cW + de)
538538 let dc = cX(bE)
539539 [IntegerEntry(bD(bE, cG), dg), IntegerEntry(bG(bE, cG), height), IntegerEntry(bF(bE, cG), dc)]
540540 }
541541
542542
543543 func dh (bE,bM) = {
544544 let di = cD()
545545 let cG = di._1
546546 let cH = di._2
547547 let aW = addressFromStringValue(bM)
548548 let dj = cR(bE, bM)
549549 let dk = valueOrElse(getInteger(this, bI(bE, aW, cG)), 0)
550550 let dl = valueOrElse(getInteger(this, bJ(bE, aW, cG)), cH)
551551 let dm = (height - dl)
552552 let dn = ((dm * dj) + dk)
553553 dn
554554 }
555555
556556
557557 func do (bE,bM,dp) = {
558558 let dq = cD()
559559 let cG = dq._1
560560 let cH = dq._2
561561 let aW = addressFromStringValue(bM)
562562 let dr = cM(bE, bM)
563563 let ds = if ((dr == 0))
564564 then nil
565565 else {
566566 let de = if (dp)
567567 then dr
568568 else -(dr)
569569 let dt = dd(bE, de)
570570 let dn = dh(bE, bM)
571571 let du = [IntegerEntry(bJ(bE, aW, cG), height), IntegerEntry(bI(bE, aW, cG), dn)]
572572 (dt ++ du)
573573 }
574574 ds
575575 }
576576
577577
578578 func dv (bE,bM) = {
579579 let dw = cD()
580580 let cG = dw._1
581581 let cH = dw._2
582582 let aW = addressFromStringValue(bM)
583583 let dx = bK(bE, aW, cG)
584584 let dy = valueOrElse(getInteger(this, dx), 0)
585585 let dz = bH(bE, aW, cG)
586586 let dA = valueOrElse(getInteger(this, dz), 0)
587587 let dn = dh(bE, bM)
588588 let dc = cX(bE)
589589 let dB = (dn - dy)
590590 let dC = (dc - dA)
591591 $Tuple3([IntegerEntry(dx, dn), IntegerEntry(dz, dc)], dB, dC)
592592 }
593593
594594
595595 func dD () = {
596596 let dE = t(bO, ai())
597597 let dF = getInteger(this, al())
598598 let dG = getInteger(this, am())
599599 let dH = t(bO, ao())
600600 let dI = if ((height > dH))
601601 then dH
602602 else height
603603 let dJ = {
604604 let aH = dF
605605 if ($isInstanceOf(aH, "Int"))
606606 then {
607607 let dK = aH
608608 max([(dI - dK), 0])
609609 }
610610 else if ($isInstanceOf(aH, "Unit"))
611611 then 0
612612 else throw("Match error")
613613 }
614614 let dL = ((dE * (bV - 1)) / bV)
615615 let dM = valueOrElse(dG, 0)
616616 let dN = ((dL * dJ) + dM)
617617 $Tuple2([IntegerEntry(am(), dN), IntegerEntry(al(), height)], dN)
618618 }
619619
620620
621621 func dO (bE,bM,dP) = {
622622 let aW = valueOrErrorMessage(addressFromString(bM), k("invalid user address"))
623623 let bp = bX(aW)
624624 if ((bp == bp))
625625 then {
626626 let dQ = "empty"
627627 let dR = if ((bE != dQ))
628628 then {
629629 let dS = valueOrErrorMessage(getString(bN, R(bE)), k(("unsupported lp asset " + bE)))
630630 getIntegerValue(bN, T(dS))
631631 }
632632 else if (dP)
633633 then 0
634634 else m(("not readonly mode: unsupported lp asset " + bE))
635635 let dT = bq(bp, bE)
636636 let dU = bo(bp)
637637 let dV = valueOrElse(getInteger(this, dT), q(this, dU))
638638 let dN = dD()._2
639639 let dW = (dN - dV)
640640 if ((0 > dW))
641641 then m("wrong calculations")
642642 else {
643643 let dX = dv(bE, bM)
644644 let dY = dX._1
645645 let dZ = dX._2
646646 let ea = dX._3
647647 let eb = fraction(dW, dR, d)
648648 let ec = if ((ea == 0))
649649 then 0
650650 else fraction(eb, dZ, ea)
651651 let ed = ([IntegerEntry(dT, dN)] ++ dY)
652652 let ee = makeString([toString(dV), toString(dW), toString(dR), toString(dZ), toString(ea)], ":")
653653 $Tuple3(ec, ed, ee)
654654 }
655655 }
656656 else throw("Strict value is not equal to itself.")
657657 }
658658
659659
660660 func ef (aM,eg) = {
661661 let eh = [1, 3, 6, 12, 24, 48]
662662 if (!(containsElement(eh, eg)))
663663 then m("invalid duration")
664664 else {
665665 let be = (eg * j)
666666 let ei = toBase58String(az)
667667 if ((size(aM.payments) != 1))
668668 then m("invalid payment - exact one payment must be attached")
669669 else {
670670 let cB = aM.payments[0]
671671 let ej = cB.amount
672672 if ((az != value(cB.assetId)))
673673 then m((("invalid asset is in payment - " + ei) + " is expected"))
674674 else {
675675 let ek = bh()
676676 let aW = aM.caller
677677 let bM = toString(aW)
678678 let el = isDefined(getString(bi(bM)))
679679 let em = if (el)
680680 then value(getString(bi(bM)))
681681 else toString(t(this, ek))
682682 let bp = parseIntValue(em)
683683 let ci = height
684684 if (if ((aA > ej))
685685 then (aW != bR)
686686 else false)
687687 then m(("amount is less then minLockAmount=" + toString(aA)))
688688 else if ((aB > be))
689689 then m(("passed duration is less then minLockDuration=" + toString(aB)))
690690 else if ((be > aC))
691691 then m(("passed duration is greater then maxLockDuration=" + toString(aC)))
692692 else {
693693 let en = fraction(be, c, aC)
694694 let eo = fraction(ej, en, c)
695695 let ep = bY()
696696 let dU = bo(bp)
697697 let dN = dD()._2
698698 let eq = cC(aW)
699699 let er = reentrantInvoke(bQ, "refreshUserReward", [aW.bytes], nil)
700700 if ((er == er))
701701 then {
702702 let es = if (el)
703703 then nil
704704 else [IntegerEntry(ek, (bp + 1)), StringEntry(bi(bM), em), StringEntry(bj(em), bM)]
705705 $Tuple2(((((es ++ cy(aW, aM.transactionId, ej, ci, be, eo, 0)) ++ cl(ej, be, 1, if (el)
706706 then 0
707707 else 1)) :+ cf("lock", bM, ej, ci, be, eo, aM)) ++ [IntegerEntry(dU, dN), IntegerEntry(bw(), (ep + eo)), IntegerEntry(ba(aW), (eq + eo))]), eo)
708708 }
709709 else throw("Strict value is not equal to itself.")
710710 }
711711 }
712712 }
713713 }
714714 }
715715
716716
717+func et (aW,eu) = {
718+ let ev = aZ(aW, eu)
719+ let ew = parseIntValue(ev[aP])
720+ let ci = parseIntValue(ev[aQ])
721+ let ex = parseIntValue(ev[aR])
722+ let ey = (ci + ex)
723+ let bg = parseIntValue(ev[aU])
724+ let bf = parseIntValue(ev[aT])
725+ let ez = ((height - ci) / i)
726+ let eA = fraction(toBigInt(ez), (toBigInt((8 * i)) * h), toBigInt(ex))
727+ let eB = if ((height > ey))
728+ then (ew - bg)
729+ else toInt(fraction(toBigInt(ew), (h - pow(toBigInt(5), 1, eA, f, f, DOWN)), h))
730+ eB
731+ }
732+
733+
717734 @Callable(aM)
718-func constructor (et,eu,aA,ev,ew,aD) = {
719- let ex = aL(aM)
720- if ((ex == ex))
721- then ([IntegerEntry(bh(), 0), StringEntry(aw(), aF(eu, aA, ev, ew, aD)), StringEntry(E(), et)] ++ cl(0, 0, 0, 0))
735+func constructor (eC,eD,aA,eE,eF,aD) = {
736+ let eG = aL(aM)
737+ if ((eG == eG))
738+ then ([IntegerEntry(bh(), 0), StringEntry(aw(), aF(eD, aA, eE, eF, aD)), StringEntry(E(), eC)] ++ cl(0, 0, 0, 0))
722739 else throw("Strict value is not equal to itself.")
723740 }
724741
725742
726743
727744 @Callable(aM)
728-func lockRef (be,ey,ez) = {
729- let eA = ef(aM, be)
730- let eB = eA._1
731- let eo = eA._2
732- let eC = toString(aM.caller)
733- let eD = if (if ((ey == ""))
745+func lockRef (be,eH,eI) = {
746+ let eJ = ef(aM, be)
747+ let eK = eJ._1
748+ let eo = eJ._2
749+ let eL = toString(aM.caller)
750+ let eM = if (if ((eH == ""))
734751 then true
735- else (ez == base58''))
752+ else (eI == base58''))
736753 then unit
737- else invoke(A, "createPair", [D, ey, eC, ez], nil)
738- if ((eD == eD))
754+ else invoke(A, "createPair", [D, eH, eL, eI], nil)
755+ if ((eM == eM))
739756 then {
740- let eE = invoke(aD, "updateReferralActivity", [toString(aM.caller), eo], nil)
741- if ((eE == eE))
742- then $Tuple2(eB, unit)
757+ let eN = invoke(aD, "updateReferralActivity", [toString(aM.caller), eo], nil)
758+ if ((eN == eN))
759+ then $Tuple2(eK, unit)
743760 else throw("Strict value is not equal to itself.")
744761 }
745762 else throw("Strict value is not equal to itself.")
746763 }
747764
748765
749766
750767 @Callable(aM)
751768 func lock (be) = {
752- let eF = ef(aM, be)
753- let eB = eF._1
754- let eo = eF._2
755- let eE = invoke(aD, "updateReferralActivity", [toString(aM.caller), eo], nil)
756- if ((eE == eE))
757- then $Tuple2(eB, unit)
769+ let eO = ef(aM, be)
770+ let eK = eO._1
771+ let eo = eO._2
772+ let eN = invoke(aD, "updateReferralActivity", [toString(aM.caller), eo], nil)
773+ if ((eN == eN))
774+ then $Tuple2(eK, unit)
758775 else throw("Strict value is not equal to itself.")
759776 }
760777
761778
762779
763780 @Callable(aM)
764781 func claimWxBoost (bE,bM) = if ((bP != aM.caller))
765782 then m("permissions denied")
766783 else {
767- let eG = dO(bE, bM, false)
768- let eH = eG._1
769- let ed = eG._2
770- let ee = eG._3
771- $Tuple2(ed, [eH])
784+ let eP = dO(bE, bM, false)
785+ let eQ = eP._1
786+ let ed = eP._2
787+ let ee = eP._3
788+ $Tuple2(ed, [eQ])
772789 }
773790
774791
775792
776793 @Callable(aM)
777794 func claimWxBoostREADONLY (bE,bM) = {
778- let eI = dO(bE, bM, true)
779- let eH = eI._1
780- let ed = eI._2
781- let ee = eI._3
782- $Tuple2(nil, [eH, ee])
795+ let eR = dO(bE, bM, true)
796+ let eQ = eR._1
797+ let ed = eR._2
798+ let ee = eR._3
799+ $Tuple2(nil, [eQ, ee])
783800 }
784801
785802
786803
787804 @Callable(aM)
788-func unlock (eJ,bc) = {
805+func unlock (eS,bc) = {
789806 let aW = aM.caller
790807 let bM = toString(aW)
791- let aX = fromBase58String(eJ)
792- let eK = aZ(aW, if ((eJ == ""))
808+ let aX = fromBase58String(eS)
809+ let ev = aZ(aW, if ((eS == ""))
793810 then unit
794811 else aX)
795- let eL = parseIntValue(eK[aP])
796- let ci = parseIntValue(eK[aQ])
797- let eM = parseIntValue(eK[aR])
798- let eN = (ci + eM)
799- let bg = parseIntValue(eK[aU])
800- let bf = parseIntValue(eK[aT])
801- let eO = ((height - ci) / i)
802- let eP = fraction(toBigInt(eO), (toBigInt((8 * i)) * h), toBigInt(eM))
803- let eQ = if ((height > eN))
804- then (eL - bg)
805- else toInt(fraction(toBigInt(eL), (h - pow(toBigInt(5), 1, eP, f, f, DOWN)), h))
806- if ((bc > eQ))
807- then m(("maximum amount to unlock: " + toString(eQ)))
812+ let ew = parseIntValue(ev[aP])
813+ let ci = parseIntValue(ev[aQ])
814+ let ex = parseIntValue(ev[aR])
815+ let ey = (ci + ex)
816+ let bg = parseIntValue(ev[aU])
817+ let bf = parseIntValue(ev[aT])
818+ let ez = ((height - ci) / i)
819+ let eB = et(aW, if ((eS == ""))
820+ then unit
821+ else aX)
822+ if ((bc > eB))
823+ then m(("maximum amount to unlock: " + toString(eB)))
808824 else {
809- let eR = max([bc, fraction((eO * i), eL, aC)])
810- let eS = w((bf - eR), "gwxRemaining")
811- let eT = bZ(aW)
812- if ((eT > eS))
813- then m(("locked gwx amount: " + toString(eT)))
814- else if ((0 >= eL))
825+ let eT = max([bc, fraction((ez * i), ew, aC)])
826+ let eU = w((bf - eT), "gwxRemaining")
827+ let eV = bZ(aW)
828+ if ((eV > eU))
829+ then m(("locked gwx amount: " + toString(eV)))
830+ else if ((0 >= ew))
815831 then m("nothing to unlock")
816832 else {
817833 let ep = bY()
818834 let eq = cC(aW)
819835 let er = reentrantInvoke(bQ, "refreshUserReward", [aW.bytes], nil)
820836 if ((er == er))
821- then ((((cy(aW, aX, eL, ci, eM, eS, (bg + bc)) ++ cl(-(bc), 0, 0, 0)) :+ cf("unlock", bM, bc, ci, eM, eR, aM)) :+ ScriptTransfer(aW, bc, az)) ++ [IntegerEntry(bw(), w((ep - eR), "gwxTotal")), IntegerEntry(ba(aW), w((eq - eR), "userGwxAmountTotal"))])
837+ then ((((cy(aW, aX, ew, ci, ex, eU, (bg + bc)) ++ cl(-(bc), 0, 0, 0)) :+ cf("unlock", bM, bc, ci, ex, eT, aM)) :+ ScriptTransfer(aW, bc, az)) ++ [IntegerEntry(bw(), w((ep - eT), "gwxTotal")), IntegerEntry(ba(aW), w((eq - eT), "userGwxAmountTotal"))])
822838 else throw("Strict value is not equal to itself.")
823839 }
824840 }
825841 }
826842
827843
828844
829845 @Callable(aM)
830846 func gwxUserInfoREADONLY (bM) = {
831847 let aW = valueOrErrorMessage(addressFromString(bM), k("invalid user address"))
832848 let bf = cC(aW)
833849 $Tuple2(nil, [bf])
834850 }
835851
836852
837853
838854 @Callable(aM)
839855 func userMaxDurationREADONLY (bM) = $Tuple2(nil, $Tuple2("increaseLock", aC))
840856
841857
842858
843859 @Callable(aM)
844-func getUserGwxAmountAtHeightREADONLY (bM,eU) = {
860+func getUserGwxAmountAtHeightREADONLY (bM,eW) = {
845861 let aW = valueOrErrorMessage(addressFromString(bM), k("invalid user address"))
846862 let bf = cC(aW)
847863 $Tuple2(nil, bf)
848864 }
849865
850866
851867
852868 @Callable(aM)
853869 func getUserGwxAmount (bM) = {
854870 let aW = valueOrErrorMessage(addressFromString(bM), k("invalid user address"))
855871 let bf = cC(aW)
856872 $Tuple2(nil, bf)
857873 }
858874
859875
860876
861877 @Callable(aM)
862878 func getGwxTotalREADONLY () = $Tuple2(nil, bY())
863879
864880
865881
866882 @Callable(aM)
867883 func onBoostEmissionUpdate () = {
868- let ex = if ((aM.caller == bO))
884+ let eG = if ((aM.caller == bO))
869885 then true
870886 else aL(aM)
871- if ((ex == ex))
887+ if ((eG == eG))
872888 then dD()
873889 else throw("Strict value is not equal to itself.")
874890 }
875891
876892
877893
878894 @Callable(aM)
879895 func onStakedVoteUpdate (bE,bM,dp) = {
880- let ex = if ((aM.caller == bP))
896+ let eG = if ((aM.caller == bP))
881897 then true
882898 else aL(aM)
883- if ((ex == ex))
899+ if ((eG == eG))
884900 then {
885901 let ds = do(bE, bM, dp)
886902 $Tuple2(ds, unit)
887903 }
888904 else throw("Strict value is not equal to itself.")
889905 }
890906
891907
892908
893909 @Callable(aM)
894910 func getVotingResultStakedREADONLY (bE) = $Tuple2(nil, cT(bE))
895911
896912
897913
898914 @Callable(aM)
899915 func getVotingResultStakedIntegralREADONLY (bE) = $Tuple2(nil, cX(bE))
900916
901917
902918
903919 @Callable(aM)
904920 func getUserVoteFinalizedREADONLY (bE,bM) = $Tuple2(nil, cM(bE, bM))
905921
906922
907923
908924 @Callable(aM)
909925 func getUserVoteStakedIntegralREADONLY (bE,bM) = $Tuple2(nil, dh(bE, bM))
910926
911927
912-@Verifier(eV)
913-func eW () = {
914- let eX = {
928+@Verifier(eX)
929+func eY () = {
930+ let eZ = {
915931 let aH = aJ()
916932 if ($isInstanceOf(aH, "ByteVector"))
917933 then {
918934 let aO = aH
919935 aO
920936 }
921937 else if ($isInstanceOf(aH, "Unit"))
922- then eV.senderPublicKey
938+ then eX.senderPublicKey
923939 else throw("Match error")
924940 }
925- sigVerify(eV.bodyBytes, eV.proofs[0], eX)
941+ sigVerify(eX.bodyBytes, eX.proofs[0], eZ)
926942 }
927943

github/deemru/w8io/169f3d6 
118.58 ms