tx · GGGA5D1SSAVko2S72QKLnxhGPU7zieJFsVyZBa6txCKm

3N8sfbgCJCsLbcWYRiVKm6ivccPLMsQmVDx:  -0.02900000 Waves

2022.10.24 17:25 [2286613] smart account 3N8sfbgCJCsLbcWYRiVKm6ivccPLMsQmVDx > SELF 0.00000000 Waves

{ "type": 13, "id": "GGGA5D1SSAVko2S72QKLnxhGPU7zieJFsVyZBa6txCKm", "fee": 2900000, "feeAssetId": null, "timestamp": 1666621499008, "version": 1, "sender": "3N8sfbgCJCsLbcWYRiVKm6ivccPLMsQmVDx", "senderPublicKey": "G4Ha5wvhDpHGy5koVJsmfWC2zwF89jXDUmWBb28mRyrr", "proofs": [ "Jf19jzHu49nL75gzp65gRgdB5CMhxFEAV65SoW2EEWrVHbA2upRCE5FwjcmoHXmg4jRjxmJKbC9kqZcQk5vMAtE" ], "script": "base64:BgKyJwgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBAoCCAgSABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIgJmYyIDbXBrIgRwbXBrIgJwbCICcGgiAWgiCXRpbWVzdGFtcCIDcGF1Igt1c2VyQWRkcmVzcyIEdHhJZCIDZ2F1IgJhYSICcGEiBmtleUZlZSIKZmVlRGVmYXVsdCIDZmVlIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDc0ODQ3NjUwIg5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIg9jYWxjUHJpY2VCaWdJbnQiCHByQW10WDE4IghhbUFtdFgxOCIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSINb3JkZXJBbXRBc3NldCIQb3JkZXJBbXRBc3NldFN0ciIPb3JkZXJQcmljZUFzc2V0IhJvcmRlclByaWNlQXNzZXRTdHIiCm9yZGVyUHJpY2UiCHByaWNlRGNtIhBjYXN0ZWRPcmRlclByaWNlIhFpc09yZGVyUHJpY2VWYWxpZCIJY29tbW9uR2V0IgFpIgNwbXQiBnBtdEFtdCIJY29tbW9uUHV0IgphbUFzc2V0UG10IgpwckFzc2V0UG10IgZlc3RQdXQiBGVtaXQiBmFtb3VudCIHZW1pdEludiINZW1pdEludkxlZ2FjeSIHJG1hdGNoMCIVbGVnYWN5RmFjdG9yeUNvbnRyYWN0Igd0YWtlRmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCINJHQwMjIxNjcyMjM0NSILcG9vbEFkZHJlc3MiDWFtb3VudEFzc2V0SWQiE2Ftb3VudEFzc2V0RGVjaW1hbHMiEnByaWNlQXNzZXREZWNpbWFscyIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI2NzUyMjk2OCIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMjk3MjIzMTIxIhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzMjQzMjMzMDIiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyIOcGF5bWVudEJhbGFuY2UiFHBheW1lbnRCYWxhbmNlQmlnSW50IgxzdXBwbHlCaWdJbnQiC2NoZWNoU3VwcGx5Ig1kZXBvc2l0QmlnSW50Igtpc3N1ZUFtb3VudCIOcG9vbFByb3BvcnRpb24iD2Ftb3VudEFzc2V0UGFydCIOcHJpY2VBc3NldFBhcnQiCWxwQW10Qm90aCIFYm9udXMiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCINJHQwMjUzNTcyNTUxOCIKYW1EZWNpbWFscyIKcHJEZWNpbWFscyIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCIKb3V0QmFsYW5jZSIQb3V0QmFsYW5jZUJpZ0ludCIOcmVkZWVtZWRCaWdJbnQiCWFtb3VudFJhdyINJHQwMjY1OTAyNjY0MCILdG90YWxBbW91bnQiDSR0MDI2NjQ0MjY4NzAiC291dEFtQW1vdW50IgtvdXRQckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciCGN1clByWDE4IgFyIg5zdW1PZkdldEFzc2V0cyIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgJwZCICcGsiF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52IgttYXhTbGlwcGFnZSIMbWluT3V0QW1vdW50IglhdXRvU3Rha2UiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDMxMzM0MzE0NjEiE2VtaXRBbW91bnRFc3RpbWF0ZWQiCmVtaXRBbW91bnQiCHN0YWtlSW52IgdzZW5kRmVlIg0kdDAzMjE4NzMyMzIyIg1vdXRBc3NldElkU3RyIg1pc0dldERpc2FibGVkIg0kdDAzMjkxMDMzMDQyIg9hbW91bnRFc3RpbWF0ZWQiB2J1cm5JbnYiDWFzc2V0VHJhbnNmZXIiDSR0MDMzNjc0MzM4MTIiDXVuc3Rha2VBbW91bnQiCnVuc3Rha2VJbnYiDSR0MDM0MzYyMzQ0ODUiCW91dEFtdEFtdCIUYnVybkxQQXNzZXRPbkZhY3RvcnkiEm5vTGVzc1RoZW5BbXRBc3NldCIUbm9MZXNzVGhlblByaWNlQXNzZXQiDWNoZWNrUGF5bWVudHMiD2NoZWNrUG9vbFN0YXR1cyILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiDXBvb2xMUEJhbGFuY2UiCnByaWNlc0xpc3QiD2xwQW10QXNzZXRTaGFyZSIRbHBQcmljZUFzc2V0U2hhcmUiCnBvb2xXZWlnaHQiDGN1clByaWNlQ2FsYyIMYW1CYWxhbmNlUmF3IgxwckJhbGFuY2VSYXciD2FtQmFsYW5jZVJhd1gxOCIPcHJCYWxhbmNlUmF3WDE4IhBwYXltZW50THBBc3NldElkIgxwYXltZW50THBBbXQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNoYQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBSAFJCQCgAwEJALwCAwUBSAkAtgIBBQFJBQFkAQFKAwFLAUwBTQkAawMFAUsFAUwFAU0BAU4BAUgDCQC/AgIFAWUFAUgJAL4CAQUBSAUBSAEBTwACEyVzX19mYWN0b3J5Q29udHJhY3QBAVAAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBUQACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEBUgACESVzJXNfX3ByaWNlX19sYXN0AQFTAgFUAVUJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFUCQDMCAIJAKQDAQUBVQUDbmlsBQFqAQFWAgFXAVgJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQFXAgJfXwUBWAEBWQIBVwFYCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUBVwICX18FAVgBAVoAAg8lc19fYW1vdW50QXNzZXQBAmFhAAIOJXNfX3ByaWNlQXNzZXQAAmFiAgclc19fZmVlAAJhYwkAawMABQUBYgCQTgACYWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWIFAmFjAQJhZQACESVzX19mYWN0b3J5Q29uZmlnAQJhZgACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYWcBAmFoCQCsAgIJAKwCAgIIJXMlcyVzX18FAmFoAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAECYWkCAmFqAmFrCQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJhagICX18FAmFrAghfX2NvbmZpZwECYWwBAmFtCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFtAQJhbgACDCVzX19zaHV0ZG93bgECYW8BAmFwCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwUCYXABAmFxAAIXJXNfX2FsbG93ZWRMcFNjcmlwdEhhc2gAAmFyAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYXMDAmF0AmF1AmF2CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhdAINIHNlbmRlclZhbGlkPQkApQMBBQJhdQIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYXYBAmF3AgJheAJheQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmF4BQJheQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheAkAzAgCAgEuCQDMCAIFAmF5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmF6AgJheAJheQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmF4BQJheQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheAkAzAgCAgEuCQDMCAIFAmF5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFBAQJhQgkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhQgUDbmlsAgEgAAJhQwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF3AgUEdGhpcwkBAU8AAAJhRAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF3AgUCYUMFAmFyAQJhRQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYUMJAQJhbgAHAQJhRgAJANkEAQkBAmF3AgUCYUMJAQJhZgABAmFHAAQCYUgJAQJhdwIFBHRoaXMJAQFaAAQCYUkJAQJhdwIFBHRoaXMJAQJhYQAEAmFrCQECYXoCBQJhQwkBAmFsAQUCYUkEAmFqCQECYXoCBQJhQwkBAmFsAQUCYUgJALUJAgkBAmF3AgUCYUMJAQJhaQIJAKQDAQUCYWoJAKQDAQUCYWsFAWoBAmFKAQJhSwMJAAACBQJhSwUBaQUEdW5pdAkA2QQBBQJhSwECYUwBAmFLAwkAAAIFAmFLBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmFLAQJhTQECYU4JAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhTgUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFOBQFwCQDZBAEJAJEDAgUCYU4FAXEJAQJhSgEJAJEDAgUCYU4FAXIJAQJhSgEJAJEDAgUCYU4FAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTgUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFOBQF1AAJhTwkBAmFNAQkBAmFHAAACYVAFAmFPAAJhUQgFAmFQAl8xAAJhUggFAmFQAl8yAAJhUwgFAmFQAl8zAAJhVAgFAmFQAl80AAJhVQgFAmFQAl81AAJhVggFAmFQAl82AAJhVwgFAmFQAl83AQJhWAAJALUJAgkBAmF3AgUCYUMJAQJhZQAFAWoAAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYVgABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJhWgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmFYAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYmEKAmJiAmJjAmJkAmJlAmJmAmJnAmJoAmJpAmJqAmJrCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiYgkAzAgCCQCkAwEFAmJjCQDMCAIJAKQDAQUCYmQJAMwIAgkApAMBBQJiZQkAzAgCCQCkAwEFAmJmCQDMCAIJAKQDAQUCYmcJAMwIAgkApAMBBQJiaAkAzAgCCQCkAwEFAmJpCQDMCAIJAKQDAQUCYmoJAMwIAgkApAMBBQJiawUDbmlsBQFqAQJibAYCYm0CYm4CYm8CYmUCYmgCYmkJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJibQkAzAgCCQCkAwEFAmJuCQDMCAIJAKQDAQUCYm8JAMwIAgkApAMBBQJiZQkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkFA25pbAUBagECYnABAmJxAwkAAAIFAmJxAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJicQECYnICAmJzAmJ0CQC8AgMFAmJzBQFkBQJidAECYnUEAmJ2AmJ3AmJ4AmJ5BAJiegkBAUQCBQJieAUCYnYEAmJBCQEBRAIFAmJ5BQJidwkBAmJyAgUCYkEFAmJ6AQJiQgMCYngCYnkCYkMEAmJECQECYUcABAJiRQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF0BAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF1BAJiRwkBAmJ1BAUCYkUFAmJGBQJieAUCYnkEAmJ0CQEBRAIFAmJ4BQJiRQQCYnMJAQFEAgUCYnkFAmJGBAJiSAkBAUQCBQJiQwUBYgQCYkkJAQJicgIFAmJ0BQJiSAQCYkoJAQJicgIFAmJzBQJiSAkAzAgCBQJiRwkAzAgCBQJiSQkAzAgCBQJiSgUDbmlsAQJiSwMCYngCYnkCYkMEAmJMCQECYkIDBQJieAUCYnkFAmJDCQDMCAIJAQFHAgkAkQMCBQJiTAAABQFiCQDMCAIJAQFHAgkAkQMCBQJiTAABBQFiCQDMCAIJAQFHAgkAkQMCBQJiTAACBQFiBQNuaWwBAmJNBAJiTgJiTwJiUAFXBAJiRAkBAmFHAAQCYlEJAJEDAgUCYkQFAXEEAmJSCQCRAwIFAmJEBQFyBAJiUwkAkQMCBQJiRAUBcwQCYnYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdAQCYncJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdQQCYlQJAJEDAgUCYkQFAXAEAmJVCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCYlEJAKwCAgkArAICAgZBc3NldCAFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQMJAQIhPQIFAmJRBQJiTwkAAgECFUludmFsaWQgYXNzZXQgcGFzc2VkLgQCYlYJAQJicAEFAmJSBAJiVwkBAUQCBQJiVgUCYnYEAmJYCQECYnABBQJiUwQCYlkJAQFEAgUCYlgFAmJ3BAJiWgkBAmJyAgUCYlkFAmJXBAJjYQkBAUcCBQJiWgUBYgQCY2IJAQFEAgUCYlAFAWIEAmNjCQEBRAIFAmJVBQFiBAJjZAkAvAIDBQJiVwUCY2IFAmNjBAJjZQkAvAIDBQJiWQUCY2IFAmNjBAJjZgkBAUcCBQJjZAUCYnYEAmNnCQEBRwIFAmNlBQJidwQCY2gDCQAAAgUCYk4CAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAVcFAmNmAwkAAAIFAmJSAgVXQVZFUwUEdW5pdAkA2QQBBQJiUgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFXBQJjZwMJAAACBQJiUwIFV0FWRVMFBHVuaXQJANkEAQUCYlMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVkCCQClCAEFAVcFAmJOCQECYmwGBQJjZgUCY2cFAmJQBQJjYQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVIABQJjYQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjYQUDbmlsCQCcCgoFAmNmBQJjZwUCYlIFAmJTBQJiVgUCYlgFAmJVBQJiWgUCYlQFAmNoAQJjaQkCYk4CY2oCY2sCY2wCY20CY24BVwJjbwJjcAQCYkQJAQJhRwAEAmJRCQDZBAEJAJEDAgUCYkQFAXEEAmNxCQCRAwIFAmJEBQFyBAJjcgkAkQMCBQJiRAUBcwQCY3MJAJEDAgUCYkQFAXYEAmN0CQCRAwIFAmJEBQF3BAJiRQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF0BAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF1BAJiVAkAkQMCBQJiRAUBcAQCYlUICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlEJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlECDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjdQkA2AQBCQELdmFsdWVPckVsc2UCBQJjbAkA2QQBAgVXQVZFUwQCY3YJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY24JANkEAQIFV0FWRVMDAwkBAiE9AgUCY3EFAmN1BgkBAiE9AgUCY3IFAmN2CQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCYlYDBQJjbwkBAmJwAQUCY3EJAGUCCQECYnABBQJjcQUCY2sEAmJYAwUCY28JAQJicAEFAmNyCQBlAgkBAmJwAQUCY3IFAmNtBAJjdwkBAUQCBQJjawUCYkUEAmN4CQEBRAIFAmNtBQJiRgQCY3kJAQJicgIFAmN4BQJjdwQCYlcJAQFEAgUCYlYFAmJFBAJiWQkBAUQCBQJiWAUCYkYEAmN6AwkAAAIFAmJVAAAEAmJaBQFlBAJjQQUBZQQCYkgJAHYGCQC5AgIFAmN3BQJjeAAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUcCBQJiSAUBYgkBAUcCBQJjdwUCYkUJAQFHAgUCY3gFAmJGCQECYnICCQC3AgIFAmJZBQJjeAkAtwICBQJiVwUCY3cFAmNBBAJiWgkBAmJyAgUCYlkFAmJXBAJjQQkAvAIDCQEBTgEJALgCAgUCYloFAmN5BQFkBQJiWgQCY0IJAQFEAgUCY2oFAWIDAwkBAiE9AgUCYloFAWUJAL8CAgUCY0EFAmNCBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJjQQIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmNCBAJjYwkBAUQCBQJiVQUBYgQCY0MJALwCAwUCY3cFAmJaBQFkBAJjRAkAvAIDBQJjeAUBZAUCYloEAmNFAwkAvwICBQJjQwUCY3gJAJQKAgUCY0QFAmN4CQCUCgIFAmN3BQJjQwQCY0YIBQJjRQJfMQQCY0cIBQJjRQJfMgQCYkgJALwCAwUCY2MFAmNHBQJiWQkAlwoFCQEBRwIFAmJIBQFiCQEBRwIFAmNGBQJiRQkBAUcCBQJjRwUCYkYFAmJaBQJjQQQCY0gIBQJjegJfMQQCY0kIBQJjegJfMgQCY0oIBQJjegJfMwQCY2EJAQFHAggFAmN6Al80BQFiBAJjSwkBAUcCCAUCY3oCXzUFAWIDCQBnAgAABQJjSAkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQCY0wDCQEBIQEFAmNwAAAFAmNIBAJjTQkAZQIFAmNrBQJjSQQCY04JAGUCBQJjbQUCY0oEAmNPCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUgAFAmNhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAgUBVwUCYk4JAQJiYQoFAmNJBQJjSgUCY0wFAmNhBQJjagUCY0sFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNNBQJjTgUDbmlsCQCfCg0FAmNIBQJjTAUCY2EFAmJWBQJiWAUCYlUFAmJRBQJiVAUCY08FAmNNBQJjTgUCY2wFAmNuAQJjUAECY1EEAmJECQECYUcABAJjUgkAkQMCBQJiRAUBcgQCY1MJAJEDAgUCYkQFAXMEAmJUCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXAEAmJFCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXQEAmJGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXUEAmNUCQECYnABBQJjUgQCY1UJAQJicAEFAmNTBAJiWgMJAAACCAUCY1EJb3JkZXJUeXBlBQNCdXkJAQJidQQFAmJFBQJiRgkAZAIFAmNUCAUCY1EGYW1vdW50BQJjVQkBAmJ1BAUCYkUFAmJGCQBlAgUCY1QIBQJjUQZhbW91bnQFAmNVBAJjYQkBAUcCBQJiWgUBYgMDAwkBAmFFAAYJAAACBQJiVAUBbQYJAAACBQJiVAUBbgkAAgECHEV4Y2hhbmdlIG9wZXJhdGlvbnMgZGlzYWJsZWQEAmNWCAgFAmNRCWFzc2V0UGFpcgthbW91bnRBc3NldAQCY1cDCQAAAgUCY1YFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmNWBAJjWAgIBQJjUQlhc3NldFBhaXIKcHJpY2VBc3NldAQCY1kDCQAAAgUCY1gFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmNYAwMJAQIhPQIFAmNXBQJjUgYJAQIhPQIFAmNZBQJjUwkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EAmNaCAUCY1EFcHJpY2UEAmRhCQBrAwUBYgUCYkYFAmJFBAJkYgkBAUoDBQJjWgUBYgUCZGEEAmRjAwkAAAIIBQJjUQlvcmRlclR5cGUFA0J1eQkAZwIFAmNhBQJkYgkAZwIFAmRiBQJjYQYBAmRkAQJkZQMJAQIhPQIJAJADAQgFAmRlCHBheW1lbnRzAAEJAAIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQCZGYJAQV2YWx1ZQEJAJEDAggFAmRlCHBheW1lbnRzAAAEAmJPCQEFdmFsdWUBCAUCZGYHYXNzZXRJZAQCZGcIBQJkZgZhbW91bnQEAmN6CQECYk0ECQDYBAEIBQJkZQ10cmFuc2FjdGlvbklkCQDYBAEFAmJPBQJkZwgFAmRlBmNhbGxlcgQCY2YIBQJjegJfMQQCY2cIBQJjegJfMgQCYlQJAQ1wYXJzZUludFZhbHVlAQgFAmN6Al85BAJjaAgFAmN6A18xMAMDCQECYUUABgkAAAIFAmJUBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiVAkAlwoFBQJjZgUCY2cFAmRnBQJiTwUCY2gBAmRoAwJkZQJjagJjcAMJAQIhPQIJAJADAQgFAmRlCHBheW1lbnRzAAIJAAIBAh9leGFjdGx5IDIgcGF5bWVudHMgYXJlIGV4cGVjdGVkBAJkaQkBBXZhbHVlAQkAkQMCCAUCZGUIcGF5bWVudHMAAAQCZGoJAQV2YWx1ZQEJAJEDAggFAmRlCHBheW1lbnRzAAEEAmRrCQECY2kJCQDYBAEIBQJkZQ10cmFuc2FjdGlvbklkBQJjaggFAmRpBmFtb3VudAgFAmRpB2Fzc2V0SWQIBQJkagZhbW91bnQIBQJkagdhc3NldElkCQClCAEIBQJkZQZjYWxsZXIHBQJjcAQCYlQJAQ1wYXJzZUludFZhbHVlAQgFAmRrAl84AwMDCQECYUUABgkAAAIFAmJUBQFsBgkAAAIFAmJUBQFuCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiVAUCZGsBAmRsAQJkbQQCZG4JAPwHBAUCYUMCBGVtaXQJAMwIAgUCZG0FA25pbAUDbmlsAwkAAAIFAmRuBQJkbgQCZG8EAmRwBQJkbgMJAAECBQJkcAIHQWRkcmVzcwQCZHEFAmRwCQD8BwQFAmRxAgRlbWl0CQDMCAIFAmRtBQNuaWwFA25pbAUEdW5pdAMJAAACBQJkbwUCZG8FAmRtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJkcgECZG0EAmRzCQBrAwUCZG0FAmFkBQFiCQCUCgIJAGUCBQJkbQUCZHMFAmRzAQJkdAQCZHUCZHYBVwFYBAJkdwkAAAIFAVgFBHVuaXQEAmR4CQECYU0BCQECYUcABAJkeQgFAmR4Al8xBAJiVAgFAmR4Al8yBAJiUQgFAmR4Al8zBAJkeggFAmR4Al80BAJjUwgFAmR4Al81BAJkQQgFAmR4Al82BAJkQggFAmR4Al83BAJkQwkBAmJwAQkBAmFMAQUCZHoEAmRECQECYnABCQECYUwBBQJjUwQCZEUDCQAAAgUCZHYFAmR6BgMJAAACBQJkdgUCY1MHCQECYUEBAg1pbnZhbGlkIGFzc2V0BAJkRgMFAmR3CQCUCgIFAmRDBQJkRAMFAmRFCQCUCgIJAGUCBQJkQwUCZHUFAmRECQCUCgIFAmRDCQBlAgUCZEQFAmR1BAJkRwgFAmRGAl8xBAJkSAgFAmRGAl8yBAJkSQMFAmRFCQCUCgIFAmR1AAAJAJQKAgAABQJkdQQCZEoIBQJkSQJfMQQCZEsIBQJkSQJfMgQCZEwICQECZHIBBQJkSgJfMQQCZE0ICQECZHIBBQJkSwJfMQQCZE4JAQJkcgEFAmR1BAJkTwgFAmROAl8xBAJkcwgFAmROAl8yBAJkUAkAZAIFAmRHBQJkTAQCZFEJAGQCBQJkSAUCZE0EAmNhCQEBRwIJAQJicgIJAQFEAgUCZFEFAmRCCQEBRAIFAmRQBQJkQQUBYgQCZFIDBQJkRQUCZEcFAmRIBAJkUwkAtgIBBQJkUgQCZFQJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiUQkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJiUQIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmRVAwkAvwICBQJkVAUBZgYJAAIBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmRVBQJkVQQCZFYJALYCAQUCZE8EAmRXCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmRUCQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZFYFAWQFAmRTAAgAEgUERE9XTgUBZAUBZAUDbmlsBAJjTwMFAmR3BQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFSAAUCY2EJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY2EJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVYCCQClCAEJAQV2YWx1ZQEFAVcJANgEAQkBBXZhbHVlAQUBWAkBAmJhCgUCZEoFAmRLBQJkVwUCY2EAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJkWAkAawMFAmRIBQFiBQJkRwQCZFkJAGsDBQJkdQUBYgkAZAIFAmRYBQFiBAJkWgkAZQIFAmR1BQJkWQQCZWEJAKADAQkAvAIDBQJkVAkAtgIBBQJkWgkAtgIBBQJkSAQCZWIDCQAAAgUCZWEAAAMJAAACBQJkVwAAAAAJAAIBAhdib251cyBjYWxjdWxhdGlvbiBlcnJvcgkAawMJAGUCBQJkVwUCZWEFAWIFAmVhCQCWCgQFAmRXBQJjTwUCZHMFAmViCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlYwUCZWQCZE8CZHYBVwFYBAJkdwkAAAIFAVgFBHVuaXQEAmVlCQECYU0BCQECYUcABAJkeQgFAmVlAl8xBAJiVAgFAmVlAl8yBAJiUQgFAmVlAl8zBAJkeggFAmVlAl80BAJjUwgFAmVlAl81BAJlZggFAmVlAl82BAJlZwgFAmVlAl83BAJlaAkAzAgCAwkAAAIFAmR2BQJiUQYJAAIBAhBpbnZhbGlkIGxwIGFzc2V0BQNuaWwDCQAAAgUCZWgFAmVoBAJlaQMJAAACBQJlZAUCZHoGAwkAAAIFAmVkBQJjUwcJAQJhQQECDWludmFsaWQgYXNzZXQEAmVqAwUCZWkJALYCAQkBAmJwAQkBAmFMAQUCZHoJALYCAQkBAmJwAQkBAmFMAQUCY1MEAmVrCQECYnABCQECYUwBBQJkegQCZWwJAQJicAEJAQJhTAEFAmNTBAJlbQMFAmVpBQJlawUCZWwEAmVuCQC2AgEFAmVtBAJkVAkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJRCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZW8JALYCAQUCZE8EAmVwCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmVqCQC4AgIFAWQJAHYGCQC4AgIFAWQJALoCAgkAuQICBQJlbwUBZAUCZFQAEgUBaAAAABIFBERPV04FAWQFA25pbAQCZXEJAQJkcgEFAmVwBAJlcggFAmVxAl8xBAJkcwgFAmVxAl8yBAJlcwMFAmVpCQCWCgQFAmVyAAAJAGUCBQJlawUCZXAFAmVsCQCWCgQAAAUCZXIFAmVrCQBlAgUCZWwFAmVwBAJldAgFAmVzAl8xBAJldQgFAmVzAl8yBAJldggFAmVzAl8zBAJldwgFAmVzAl80BAJleAkBAmJyAgkBAUQCBQJldwUCZWcJAQFEAgUCZXYFAmVmBAJjYQkBAUcCBQJleAUBYgQCY08DBQJkdwUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFZAgkApQgBCQEFdmFsdWUBBQFXCQDYBAEJAQV2YWx1ZQEFAVgJAQJibAYFAmV0BQJldQUCZE8FAmNhBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUgAFAmNhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNhBQNuaWwEAmV5CQECYk0EAgAJAQJhTAEFAmJRBQJkTwUEdGhpcwQCZXoJAGQCCAUCZXkCXzEIBQJleQJfMgQCZWIDCQAAAgUCZXoAAAMJAAACBQJlcgAAAAAJAAIBAhdib251cyBjYWxjdWxhdGlvbiBlcnJvcgkAawMJAGUCBQJlcgUCZXoFAWIFAmV6CQCWCgQFAmVyBQJjTwUCZHMFAmViCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlQQAEAmRwCQCiCAEJAQFQAAMJAAECBQJkcAIGU3RyaW5nBAJlQgUCZHAJANkEAQUCZUIDCQABAgUCZHACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZUMABAJkcAkAoggBCQEBUQADCQABAgUCZHACBlN0cmluZwQCZUIFAmRwCQDZBAEFAmVCAwkAAQIFAmRwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmVEAQJkZQQCZUUJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQCZHAJAQJlQQADCQABAgUCZHACCkJ5dGVWZWN0b3IEAmVGBQJkcAMJAAACCAUCZGUPY2FsbGVyUHVibGljS2V5BQJlRgYFAmVFAwkAAQIFAmRwAgRVbml0AwkAAAIIBQJkZQZjYWxsZXIFBHRoaXMGBQJlRQkAAgECC01hdGNoIGVycm9yGQJkZQEKc2V0TWFuYWdlcgECZUcEAmVICQECZUQBBQJkZQMJAAACBQJlSAUCZUgEAmVJCQDZBAEFAmVHAwkAAAIFAmVJBQJlSQkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQAFAmVHBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBDmNvbmZpcm1NYW5hZ2VyAAQCZUoJAQJlQwAEAmVLAwkBCWlzRGVmaW5lZAEFAmVKBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJlSwUCZUsEAmVMAwkAAAIIBQJkZQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmVKBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJlTAUCZUwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVAACQDYBAEJAQV2YWx1ZQEFAmVKCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFRAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlAQNwdXQCAmNqAmVNAwkAZgIAAAUCY2oJAAIBAiBJbnZhbGlkIHNsaXBwYWdlVG9sZXJhbmNlIHBhc3NlZAQCZGsJAQJkaAMFAmRlBQJjagYEAmNMCAUCZGsCXzIEAmJRCAUCZGsCXzcEAmNoCAUCZGsCXzkEAmNNCAUCZGsDXzEwBAJjTggFAmRrA18xMQQCZU4IBQJkawNfMTIEAmVPCAUCZGsDXzEzBAJkbgkA/AcEBQJhQwIEZW1pdAkAzAgCBQJjTAUDbmlsBQNuaWwDCQAAAgUCZG4FAmRuBAJkbwQCZHAFAmRuAwkAAQIFAmRwAgdBZGRyZXNzBAJkcQUCZHAJAPwHBAUCZHECBGVtaXQJAMwIAgUCY0wFA25pbAUDbmlsBQR1bml0AwkAAAIFAmRvBQJkbwQCZVADCQBmAgUCY00AAAkA/AcEBQJhWgIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmVOBQJjTQUDbmlsBQNuaWwDCQAAAgUCZVAFAmVQBAJlUQMJAGYCBQJjTgAACQD8BwQFAmFaAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZU8FAmNOBQNuaWwFA25pbAMJAAACBQJlUQUCZVEEAmVSAwUCZU0EAmVTCQD8BwQFAmFZAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiUQUCY0wFA25pbAMJAAACBQJlUwUCZVMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGUGY2FsbGVyBQJjTAUCYlEFA25pbAkAzggCBQJjaAUCZVIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBCnB1dEZvckZyZWUBAmVUAwkAZgIAAAUCZVQJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZGsJAQJkaAMFAmRlBQJlVAcIBQJkawJfOQJkZQEJcHV0T25lVGtuAgJlVQJlVgQCZVcDAwkBAmFFAAYJAAACBQJhUgUBbAYJAAACBQJhUgUBbgQCZWgJAMwIAgMJAQEhAQUCZVcGCQECYUEBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkZQhwYXltZW50cwABBgkBAmFBAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWgFAmVoBAJlWAkAkQMCCAUCZGUIcGF5bWVudHMAAAQCZHYIBQJlWAdhc3NldElkBAJkdQgFAmVYBmFtb3VudAQBVwgFAmRlBmNhbGxlcgQBWAgFAmRlDXRyYW5zYWN0aW9uSWQEAmVZCQECZHQEBQJkdQUCZHYFAVcFAVgEAmVaCAUCZVkCXzEEAmNPCAUCZVkCXzIEAmRzCAUCZVkCXzMEAmViCAUCZVkCXzQEAmZhAwMJAGYCBQJlVQAACQBmAgUCZVUFAmVaBwkAAgEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZVUFA25pbAIABQJlWgQCZG4JAQJkbAEFAmZhAwkAAAIFAmRuBQJkbgQCZVIDBQJlVgQCZmIJAPwHBAUCYVkCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFTBQJmYQUDbmlsAwkAAAIFAmZiBQJmYgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkZQZjYWxsZXIFAmZhBQJhUwUDbmlsBAJmYwMJAGYCBQJkcwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFEBQJkcwUCZHYFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjTwUCZVIFAmZjBQJmYQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZQERcHV0T25lVGtuUkVBRE9OTFkCAmR2AmR1BAJmZAkBAmR0BAUCZHUJAQJhSgEFAmR2BQR1bml0BQR1bml0BAJlWggFAmZkAl8xBAJjTwgFAmZkAl8yBAJkcwgFAmZkAl8zBAJlYggFAmZkAl80CQCUCgIFA25pbAkAlQoDBQJlWgUCZHMFAmViAmRlAQlnZXRPbmVUa24CAmZlAmVVBAJmZgMJAQJhRQAGCQAAAgUCYVIFAW4EAmVoCQDMCAIDCQEBIQEFAmZmBgkBAmFBAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZGUIcGF5bWVudHMAAQYJAQJhQQECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVoBQJlaAQCZWQJAQJhSgEFAmZlBAJlWAkAkQMCCAUCZGUIcGF5bWVudHMAAAQCZHYIBQJlWAdhc3NldElkBAJkTwgFAmVYBmFtb3VudAQBVwgFAmRlBmNhbGxlcgQBWAgFAmRlDXRyYW5zYWN0aW9uSWQEAmZnCQECZWMFBQJlZAUCZE8FAmR2BQFXBQFYBAJmaAgFAmZnAl8xBAJjTwgFAmZnAl8yBAJkcwgFAmZnAl8zBAJlYggFAmZnAl80BAJkbQMDCQBmAgUCZVUAAAkAZgIFAmVVBQJmaAcJAAIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVVBQNuaWwCAAUCZmgEAmZpCQD8BwQFAmFDAgRidXJuCQDMCAIFAmRPBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR2BQJkTwUDbmlsAwkAAAIFAmZpBQJmaQQCZmoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBVwUCZG0FAmVkBQNuaWwEAmZjAwkAZgIFAmRzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUQFAmRzBQJlZAUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNPBQJmagUCZmMFAmRtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlARFnZXRPbmVUa25SRUFET05MWQICZWQCZE8EAmZrCQECZWMFCQECYUoBBQJlZAUCZE8FAmFTBQR1bml0BQR1bml0BAJmaAgFAmZrAl8xBAJjTwgFAmZrAl8yBAJkcwgFAmZrAl8zBAJlYggFAmZrAl80CQCUCgIFA25pbAkAlQoDBQJmaAUCZHMFAmViAmRlARN1bnN0YWtlQW5kR2V0T25lVGtuAwJmbAJmZQJlVQQCZmYDCQECYUUABgkAAAIFAmFSBQFuBAJlaAkAzAgCAwkBASEBBQJmZgYJAQJhQQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRlCHBheW1lbnRzAAAGCQECYUEBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaAUCZWgEAmVkCQECYUoBBQJmZQQCZm0JAPwHBAUCYVkCB3Vuc3Rha2UJAMwIAgkA2AQBBQJhUwkAzAgCBQJmbAUDbmlsBQNuaWwDCQAAAgUCZm0FAmZtBAJmbgkBAmVjBQUCZWQFAmZsBQJhUwUEdW5pdAUEdW5pdAQCZmgIBQJmbgJfMQQCY08IBQJmbgJfMgQCZHMIBQJmbgJfMwQCZWIIBQJmbgJfNAQCZG0DAwkAZgIFAmVVAAAJAGYCBQJlVQUCZmgHCQACAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJlVQUDbmlsAgAFAmZoBAJmaQkA/AcEBQJhQwIEYnVybgkAzAgCBQJmbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhUwUCZmwFA25pbAMJAAACBQJmaQUCZmkEAmZqCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkZQZjYWxsZXIFAmRtBQJlZAUDbmlsBAJmYwMJAGYCBQJkcwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFEBQJkcwUCZWQFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjTwUCZmoFAmZjBQJkbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZQEDZ2V0AAQCY3oJAQJkZAEFAmRlBAJmbwgFAmN6Al8xBAJjZwgFAmN6Al8yBAJkZwgFAmN6Al8zBAJiTwgFAmN6Al80BAJjaAgFAmN6Al81BAJmcAkA/AcEBQJhQwIEYnVybgkAzAgCBQJkZwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiTwUCZGcFA25pbAMJAAACBQJmcAUCZnAFAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlAQlnZXROb0xlc3MCAmZxAmZyBAJjegkBAmRkAQUCZGUEAmNmCAUCY3oCXzEEAmNnCAUCY3oCXzIEAmRnCAUCY3oCXzMEAmJPCAUCY3oCXzQEAmNoCAUCY3oCXzUDCQBmAgUCZnEFAmNmCQACAQkArAICCQCsAgIJAKwCAgIcbm9MZXNzVGhlbkFtdEFzc2V0IGZhaWxlZDogIAkApAMBBQJjZgIDIDwgCQCkAwEFAmZxAwkAZgIFAmZyBQJjZwkAAgEJAKwCAgkArAICCQCsAgICHW5vTGVzc1RoZW5QcmljZUFzc2V0IGZhaWxlZDogCQCkAwEFAmNnAgMgPCAJAKQDAQUCZnIEAmZwCQD8BwQFAmFDAgRidXJuCQDMCAIFAmRnBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJPBQJkZwUDbmlsAwkAAAIFAmZwBQJmcAUCY2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBDXVuc3Rha2VBbmRHZXQBAmRtBAJmcwMJAQIhPQIJAJADAQgFAmRlCHBheW1lbnRzAAAJAAIBAhhObyBwYXltZW50cyBhcmUgZXhwZWN0ZWQGAwkAAAIFAmZzBQJmcwQCYkQJAQJhRwAEAmJRCQDZBAEJAJEDAgUCYkQFAXEEAmZtCQD8BwQFAmFZAgd1bnN0YWtlCQDMCAIJANgEAQUCYlEJAMwIAgUCZG0FA25pbAUDbmlsAwkAAAIFAmZtBQJmbQQCY3oJAQJiTQQJANgEAQgFAmRlDXRyYW5zYWN0aW9uSWQJANgEAQUCYlEFAmRtCAUCZGUGY2FsbGVyBAJiVAkBDXBhcnNlSW50VmFsdWUBCAUCY3oCXzkEAmNoCAUCY3oDXzEwBAJmdAMDCQECYUUABgkAAAIFAmJUBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiVAYDCQAAAgUCZnQFAmZ0BAJmcAkA/AcEBQJhQwIEYnVybgkAzAgCBQJkbQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiUQUCZG0FA25pbAMJAAACBQJmcAUCZnAFAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlAQhhY3RpdmF0ZQICZnUCZnYDCQECIT0CCQClCAEIBQJkZQZjYWxsZXIJAKUIAQUCYUMJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEBWgAFAmZ1CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQAFAmZ2BQNuaWwCB3N1Y2Nlc3MCZGUBHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkACQCUCgIFA25pbAkBAmFHAAJkZQEcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQECYnEJAJQKAgUDbmlsCQECYnABBQJicQJkZQEZY2FsY1ByaWNlc1dyYXBwZXJSRUFET05MWQMCYngCYnkCYkMEAmJMCQECYkIDBQJieAUCYnkFAmJDCQCUCgIFA25pbAkAzAgCCQCmAwEJAJEDAgUCYkwAAAkAzAgCCQCmAwEJAJEDAgUCYkwAAQkAzAgCCQCmAwEJAJEDAgUCYkwAAgUDbmlsAmRlARR0b1gxOFdyYXBwZXJSRUFET05MWQIBRQFGCQCUCgIFA25pbAkApgMBCQEBRAIFAUUFAUYCZGUBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAUgBSQkAlAoCBQNuaWwJAQFHAgkApwMBBQFIBQFJAmRlAR5jYWxjUHJpY2VCaWdJbnRXcmFwcGVyUkVBRE9OTFkCAmJzAmJ0CQCUCgIFA25pbAkApgMBCQECYnICCQCnAwEFAmJzCQCnAwEFAmJ0AmRlASNlc3RpbWF0ZVB1dE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQkCYk4CY2oCY2sCY2wCY20CY24BVwJjbwJjcAkAlAoCBQNuaWwJAQJjaQkFAmJOBQJjagUCY2sFAmNsBQJjbQUCY24FAVcFAmNvBQJjcAJkZQEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmJOAmJPAmJQAVcEAmN6CQECYk0EBQJiTgUCYk8FAmJQCQERQGV4dHJOYXRpdmUoMTA2MikBBQFXCQCUCgIFA25pbAkAnAoKCAUCY3oCXzEIBQJjegJfMggFAmN6Al8zCAUCY3oCXzQIBQJjegJfNQgFAmN6Al82CAUCY3oCXzcJAKYDAQgFAmN6Al84CAUCY3oCXzkIBQJjegNfMTACZGUBDXN0YXRzUkVBRE9OTFkABAJiRAkBAmFHAAQCYlEJANkEAQkAkQMCBQJiRAUBcQQCY1IJAJEDAgUCYkQFAXIEAmNTCQCRAwIFAmJEBQFzBAJjcwkAkQMCBQJiRAUBdgQCY3QJAJEDAgUCYkQFAXcEAmJFCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXQEAmJGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXUEAmZ3CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJRCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY1QJAQJicAEFAmNSBAJjVQkBAmJwAQUCY1MEAmZ4AwkAAAIFAmZ3AAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmJCAwUCY1QFAmNVBQJmdwQCY2EAAAQCZnkJAQFHAgkAkQMCBQJmeAABBQFiBAJmegkBAUcCCQCRAwIFAmZ4AAIFAWIEAmZBCQEFdmFsdWUBCQCaCAIFAmFDCQECYW8BCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjVAkAzAgCCQCkAwEFAmNVCQDMCAIJAKQDAQUCZncJAMwIAgkApAMBBQJjYQkAzAgCCQCkAwEFAmZ5CQDMCAIJAKQDAQUCZnoJAMwIAgkApAMBBQJmQQUDbmlsBQFqAmRlASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECY2sEAmJECQECYUcABAJiUQkA2QQBCQCRAwIFAmJEBQFxBAJjcQkAkQMCBQJiRAUBcgQCYlIJANkEAQUCY3EEAmNyCQCRAwIFAmJEBQFzBAJiUwkA2QQBBQJjcgQCYkUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdAQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdQQCYlQJAJEDAgUCYkQFAXAEAmZ3CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJRCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY1QJAQJicAEFAmNxBAJjVQkBAmJwAQUCY3IEAmJ6CQEBRAIFAmNUBQJiRQQCYkEJAQFEAgUCY1UFAmJGBAJiWgMJAAACBQJmdwAABQFlCQECYnICBQJiQQUCYnoEAmN3CQEBRAIFAmNrBQJiRQQCY3gJALwCAwUCY3cFAmJaBQFkBAJjbQkBAUcCBQJjeAUCYkYEAmRrCQECY2kJAgAAoMIeBQJjawUCYlIFAmNtBQJiUwIABgcEAmNICAUCZGsCXzEEAmZCCAUCZGsCXzMEAmJWCAUCZGsCXzQEAmJYCAUCZGsCXzUEAmJVCAUCZGsCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNICQDMCAIJAKQDAQkBAUcCBQJiWgUBYgkAzAgCCQCkAwEFAmJWCQDMCAIJAKQDAQUCYlgJAMwIAgkApAMBBQJiVQkAzAgCBQJiVAkAzAgCCQCkAwEFAmNrCQDMCAIJAKQDAQUCY20FA25pbAUBagJkZQEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECY20EAmJECQECYUcABAJiUQkA2QQBCQCRAwIFAmJEBQFxBAJjcQkAkQMCBQJiRAUBcgQCYlIJANkEAQUCY3EEAmNyCQCRAwIFAmJEBQFzBAJiUwkA2QQBBQJjcgQCYkUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdAQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdQQCYlQJAJEDAgUCYkQFAXAEAmZ3CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJRCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZkMJAQJicAEFAmNxBAJmRAkBAmJwAQUCY3IEAmZFCQEBRAIFAmZDBQJiRQQCZkYJAQFEAgUCZkQFAmJGBAJiWgMJAAACBQJmdwAABQFlCQECYnICBQJmRgUCZkUEAmN4CQEBRAIFAmNtBQJiRgQCY3cJALwCAwUCY3gFAWQFAmJaBAJjawkBAUcCBQJjdwUCYkUEAmRrCQECY2kJAgAAoMIeBQJjawUCYlIFAmNtBQJiUwIABgcEAmNICAUCZGsCXzEEAmZCCAUCZGsCXzMEAmJWCAUCZGsCXzQEAmJYCAUCZGsCXzUEAmJVCAUCZGsCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNICQDMCAIJAKQDAQkBAUcCBQJiWgUBYgkAzAgCCQCkAwEFAmJWCQDMCAIJAKQDAQUCYlgJAMwIAgkApAMBBQJiVQkAzAgCBQJiVAkAzAgCCQCkAwEFAmNrCQDMCAIJAKQDAQUCY20FA25pbAUBagJkZQETZXZhbHVhdGVHZXRSRUFET05MWQICZkcCZkgEAmN6CQECYk0EAgAFAmZHBQJmSAUEdGhpcwQCY2YIBQJjegJfMQQCY2cIBQJjegJfMgQCYlYIBQJjegJfNQQCYlgIBQJjegJfNgQCYlUIBQJjegJfNwQCY2EIBQJjegJfOAQCYlQJAQ1wYXJzZUludFZhbHVlAQgFAmN6Al85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY2YJAMwIAgkApAMBBQJjZwkAzAgCCQCkAwEFAmJWCQDMCAIJAKQDAQUCYlgJAMwIAgkApAMBBQJiVQkAzAgCCQCmAwEFAmNhCQDMCAIJAKQDAQUCYlQFA25pbAUBagECZkkBAmZKAAQCZksEAmRwCQECZUEAAwkAAQIFAmRwAgpCeXRlVmVjdG9yBAJlRgUCZHAFAmVGAwkAAQIFAmRwAgRVbml0CAUCZkkPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmRwBQJmSQMJAAECBQJkcAIFT3JkZXIEAmNRBQJkcAQCZkwJAQJhRgAEAmF0CQECY1ABBQJjUQQCYXUJAPQDAwgFAmNRCWJvZHlCeXRlcwkAkQMCCAUCY1EGcHJvb2ZzAAAIBQJjUQ9zZW5kZXJQdWJsaWNLZXkEAmF2CQD0AwMIBQJjUQlib2R5Qnl0ZXMJAJEDAggFAmNRBnByb29mcwABBQJmTAMDAwUCYXQFAmF1BwUCYXYHBgkBAmFzAwUCYXQFAmF1BQJhdgMJAAECBQJkcAIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmVCBQJkcAQCZk0JAPYDAQkBBXZhbHVlAQgFAmVCBnNjcmlwdAQCZk4JANsEAQkBBXZhbHVlAQkAnQgCBQJhQwkBAmFxAAQCZk8JAPEHAQUEdGhpcwMDCQAAAgUCZk4FAmZNCQECIT0CBQJmTwUCZk0HBgkA9AMDCAUCZkkJYm9keUJ5dGVzCQCRAwIIBQJmSQZwcm9vZnMAAAUCZksJAPQDAwgFAmZJCWJvZHlCeXRlcwkAkQMCCAUCZkkGcHJvb2ZzAAAFAmZLRPeGew==", "chainId": 84, "height": 2286613, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ArbbLQJmaveagnFNCdyuyrwAvR3uxqG8y4ArAsENd4VM Next: 9tsbf7YTHtHGhAtotbchW7e8H4KAnyMP6wDeXCBUr6oe Diff:
OldNewDifferences
518518 let dX = fraction(dH, b, dG)
519519 let dY = fraction(du, b, (dX + b))
520520 let dZ = (du - dY)
521- let ea = fraction(dT, toBigInt(dZ), toBigInt(dH))
522- let eb = toInt(fraction((toBigInt(dW) - ea), c, ea))
521+ let ea = toInt(fraction(dT, toBigInt(dZ), toBigInt(dH)))
522+ let eb = if ((ea == 0))
523+ then if ((dW == 0))
524+ then 0
525+ else throw("bonus calculation error")
526+ else fraction((dW - ea), b, ea)
523527 $Tuple4(dW, cO, ds, eb)
524528 }
525529 else throw("Strict value is not equal to itself.")
575579 else [StringEntry(Y(toString(value(W)), toBase58String(value(X))), bl(et, eu, dO, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
576580 let ey = bM("", aL(bQ), dO, this)
577581 let ez = (ey._1 + ey._2)
578- let eb = fraction((er - ez), b, ez)
582+ let eb = if ((ez == 0))
583+ then if ((er == 0))
584+ then 0
585+ else throw("bonus calculation error")
586+ else fraction((er - ez), b, ez)
579587 $Tuple4(er, cO, ds, eb)
580588 }
581589 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (H,I) = toInt(fraction(H, toBigInt(I), d))
6666
6767
6868 func J (K,L,M) = fraction(K, L, M)
6969
7070
7171 func N (H) = if ((e > H))
7272 then -(H)
7373 else H
7474
7575
7676 func O () = "%s__factoryContract"
7777
7878
7979 func P () = "%s__managerPublicKey"
8080
8181
8282 func Q () = "%s__pendingManagerPublicKey"
8383
8484
8585 func R () = "%s%s__price__last"
8686
8787
8888 func S (T,U) = makeString(["%s%s%d%d__price__history", toString(T), toString(U)], j)
8989
9090
9191 func V (W,X) = ((("%s%s%s__P__" + W) + "__") + X)
9292
9393
9494 func Y (W,X) = ((("%s%s%s__G__" + W) + "__") + X)
9595
9696
9797 func Z () = "%s__amountAsset"
9898
9999
100100 func aa () = "%s__priceAsset"
101101
102102
103103 let ab = "%s__fee"
104104
105105 let ac = fraction(5, b, 10000)
106106
107107 let ad = valueOrElse(getInteger(this, ab), ac)
108108
109109 func ae () = "%s__factoryConfig"
110110
111111
112112 func af () = "%s%s__matcher__publicKey"
113113
114114
115115 func ag (ah) = (("%s%s%s__" + ah) + "__mappings__poolContract2LpAsset")
116116
117117
118118 func ai (aj,ak) = (((("%d%d%s__" + aj) + "__") + ak) + "__config")
119119
120120
121121 func al (am) = ("%s%s%s__mappings__baseAsset2internalId__" + am)
122122
123123
124124 func an () = "%s__shutdown"
125125
126126
127127 func ao (ap) = ("%s%s__poolWeight__" + ap)
128128
129129
130130 func aq () = "%s__allowedLpScriptHash"
131131
132132
133133 let ar = "%s__feeCollectorAddress"
134134
135135 func as (at,au,av) = throw(((((("order validation failed: orderValid=" + toString(at)) + " senderValid=") + toString(au)) + " matcherValid=") + toString(av)))
136136
137137
138138 func aw (ax,ay) = valueOrErrorMessage(getString(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], ""))
139139
140140
141141 func az (ax,ay) = valueOrErrorMessage(getInteger(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], ""))
142142
143143
144144 func aA (aB) = throw(makeString(["lp.ride:", aB], " "))
145145
146146
147147 let aC = addressFromStringValue(aw(this, O()))
148148
149149 let aD = addressFromStringValue(aw(aC, ar))
150150
151151 func aE () = valueOrElse(getBoolean(aC, an()), false)
152152
153153
154154 func aF () = fromBase58String(aw(aC, af()))
155155
156156
157157 func aG () = {
158158 let aH = aw(this, Z())
159159 let aI = aw(this, aa())
160160 let ak = az(aC, al(aI))
161161 let aj = az(aC, al(aH))
162162 split(aw(aC, ai(toString(aj), toString(ak))), j)
163163 }
164164
165165
166166 func aJ (aK) = if ((aK == i))
167167 then unit
168168 else fromBase58String(aK)
169169
170170
171171 func aL (aK) = if ((aK == unit))
172172 then i
173173 else toBase58String(value(aK))
174174
175175
176176 func aM (aN) = $Tuple7(addressFromStringValue(aN[o]), parseIntValue(aN[p]), fromBase58String(aN[q]), aJ(aN[r]), aJ(aN[s]), parseIntValue(aN[t]), parseIntValue(aN[u]))
177177
178178
179179 let aO = aM(aG())
180180
181181 let aP = aO
182182
183183 let aQ = aP._1
184184
185185 let aR = aP._2
186186
187187 let aS = aP._3
188188
189189 let aT = aP._4
190190
191191 let aU = aP._5
192192
193193 let aV = aP._6
194194
195195 let aW = aP._7
196196
197197 func aX () = split(aw(aC, ae()), j)
198198
199199
200200 let aY = valueOrErrorMessage(addressFromString(aX()[B]), "incorrect staking address")
201201
202202 let aZ = valueOrErrorMessage(addressFromString(aX()[C]), "incorrect staking address")
203203
204204 func ba (bb,bc,bd,be,bf,bg,bh,bi,bj,bk) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bb), toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh), toString(bi), toString(bj), toString(bk)], j)
205205
206206
207207 func bl (bm,bn,bo,be,bh,bi) = makeString(["%d%d%d%d%d%d", toString(bm), toString(bn), toString(bo), toString(be), toString(bh), toString(bi)], j)
208208
209209
210210 func bp (bq) = if ((bq == "WAVES"))
211211 then wavesBalance(this).available
212212 else assetBalance(this, fromBase58String(bq))
213213
214214
215215 func br (bs,bt) = fraction(bs, d, bt)
216216
217217
218218 func bu (bv,bw,bx,by) = {
219219 let bz = D(bx, bv)
220220 let bA = D(by, bw)
221221 br(bA, bz)
222222 }
223223
224224
225225 func bB (bx,by,bC) = {
226226 let bD = aG()
227227 let bE = parseIntValue(bD[t])
228228 let bF = parseIntValue(bD[u])
229229 let bG = bu(bE, bF, bx, by)
230230 let bt = D(bx, bE)
231231 let bs = D(by, bF)
232232 let bH = D(bC, b)
233233 let bI = br(bt, bH)
234234 let bJ = br(bs, bH)
235235 [bG, bI, bJ]
236236 }
237237
238238
239239 func bK (bx,by,bC) = {
240240 let bL = bB(bx, by, bC)
241241 [G(bL[0], b), G(bL[1], b), G(bL[2], b)]
242242 }
243243
244244
245245 func bM (bN,bO,bP,W) = {
246246 let bD = aG()
247247 let bQ = bD[q]
248248 let bR = bD[r]
249249 let bS = bD[s]
250250 let bv = parseIntValue(bD[t])
251251 let bw = parseIntValue(bD[u])
252252 let bT = bD[p]
253253 let bU = valueOrErrorMessage(assetInfo(fromBase58String(bQ)), (("Asset " + bQ) + " doesn't exist")).quantity
254254 if ((bQ != bO))
255255 then throw("Invalid asset passed.")
256256 else {
257257 let bV = bp(bR)
258258 let bW = D(bV, bv)
259259 let bX = bp(bS)
260260 let bY = D(bX, bw)
261261 let bZ = br(bY, bW)
262262 let ca = G(bZ, b)
263263 let cb = D(bP, b)
264264 let cc = D(bU, b)
265265 let cd = fraction(bW, cb, cc)
266266 let ce = fraction(bY, cb, cc)
267267 let cf = G(cd, bv)
268268 let cg = G(ce, bw)
269269 let ch = if ((bN == ""))
270270 then nil
271271 else [ScriptTransfer(W, cf, if ((bR == "WAVES"))
272272 then unit
273273 else fromBase58String(bR)), ScriptTransfer(W, cg, if ((bS == "WAVES"))
274274 then unit
275275 else fromBase58String(bS)), StringEntry(Y(toString(W), bN), bl(cf, cg, bP, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
276276 $Tuple10(cf, cg, bR, bS, bV, bX, bU, bZ, bT, ch)
277277 }
278278 }
279279
280280
281281 func ci (bN,cj,ck,cl,cm,cn,W,co,cp) = {
282282 let bD = aG()
283283 let bQ = fromBase58String(bD[q])
284284 let cq = bD[r]
285285 let cr = bD[s]
286286 let cs = bD[v]
287287 let ct = bD[w]
288288 let bE = parseIntValue(bD[t])
289289 let bF = parseIntValue(bD[u])
290290 let bT = bD[p]
291291 let bU = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
292292 let cu = toBase58String(valueOrElse(cl, fromBase58String("WAVES")))
293293 let cv = toBase58String(valueOrElse(cn, fromBase58String("WAVES")))
294294 if (if ((cq != cu))
295295 then true
296296 else (cr != cv))
297297 then throw("Invalid amt or price asset passed.")
298298 else {
299299 let bV = if (co)
300300 then bp(cq)
301301 else (bp(cq) - ck)
302302 let bX = if (co)
303303 then bp(cr)
304304 else (bp(cr) - cm)
305305 let cw = D(ck, bE)
306306 let cx = D(cm, bF)
307307 let cy = br(cx, cw)
308308 let bW = D(bV, bE)
309309 let bY = D(bX, bF)
310310 let cz = if ((bU == 0))
311311 then {
312312 let bZ = e
313313 let cA = e
314314 let bH = pow((cw * cx), 0, toBigInt(5), 1, 0, DOWN)
315315 $Tuple5(G(bH, b), G(cw, bE), G(cx, bF), br((bY + cx), (bW + cw)), cA)
316316 }
317317 else {
318318 let bZ = br(bY, bW)
319319 let cA = fraction(N((bZ - cy)), d, bZ)
320320 let cB = D(cj, b)
321321 if (if ((bZ != e))
322322 then (cA > cB)
323323 else false)
324324 then throw(((("Price slippage " + toString(cA)) + " exceeded the passed limit of ") + toString(cB)))
325325 else {
326326 let cc = D(bU, b)
327327 let cC = fraction(cw, bZ, d)
328328 let cD = fraction(cx, d, bZ)
329329 let cE = if ((cC > cx))
330330 then $Tuple2(cD, cx)
331331 else $Tuple2(cw, cC)
332332 let cF = cE._1
333333 let cG = cE._2
334334 let bH = fraction(cc, cG, bY)
335335 $Tuple5(G(bH, b), G(cF, bE), G(cG, bF), bZ, cA)
336336 }
337337 }
338338 let cH = cz._1
339339 let cI = cz._2
340340 let cJ = cz._3
341341 let ca = G(cz._4, b)
342342 let cK = G(cz._5, b)
343343 if ((0 >= cH))
344344 then throw("Invalid calculations. LP calculated is less than zero.")
345345 else {
346346 let cL = if (!(cp))
347347 then 0
348348 else cH
349349 let cM = (ck - cI)
350350 let cN = (cm - cJ)
351351 let cO = [IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca), StringEntry(V(W, bN), ba(cI, cJ, cL, ca, cj, cK, height, lastBlock.timestamp, cM, cN))]
352352 $Tuple13(cH, cL, ca, bV, bX, bU, bQ, bT, cO, cM, cN, cl, cn)
353353 }
354354 }
355355 }
356356
357357
358358 func cP (cQ) = {
359359 let bD = aG()
360360 let cR = bD[r]
361361 let cS = bD[s]
362362 let bT = parseIntValue(bD[p])
363363 let bE = parseIntValue(bD[t])
364364 let bF = parseIntValue(bD[u])
365365 let cT = bp(cR)
366366 let cU = bp(cS)
367367 let bZ = if ((cQ.orderType == Buy))
368368 then bu(bE, bF, (cT + cQ.amount), cU)
369369 else bu(bE, bF, (cT - cQ.amount), cU)
370370 let ca = G(bZ, b)
371371 if (if (if (aE())
372372 then true
373373 else (bT == m))
374374 then true
375375 else (bT == n))
376376 then throw("Exchange operations disabled")
377377 else {
378378 let cV = cQ.assetPair.amountAsset
379379 let cW = if ((cV == unit))
380380 then "WAVES"
381381 else toBase58String(value(cV))
382382 let cX = cQ.assetPair.priceAsset
383383 let cY = if ((cX == unit))
384384 then "WAVES"
385385 else toBase58String(value(cX))
386386 if (if ((cW != cR))
387387 then true
388388 else (cY != cS))
389389 then throw("Wrong order assets.")
390390 else {
391391 let cZ = cQ.price
392392 let da = fraction(b, bF, bE)
393393 let db = J(cZ, b, da)
394394 let dc = if ((cQ.orderType == Buy))
395395 then (ca >= db)
396396 else (db >= ca)
397397 true
398398 }
399399 }
400400 }
401401
402402
403403 func dd (de) = if ((size(de.payments) != 1))
404404 then throw("exactly 1 payment is expected")
405405 else {
406406 let df = value(de.payments[0])
407407 let bO = value(df.assetId)
408408 let dg = df.amount
409409 let cz = bM(toBase58String(de.transactionId), toBase58String(bO), dg, de.caller)
410410 let cf = cz._1
411411 let cg = cz._2
412412 let bT = parseIntValue(cz._9)
413413 let ch = cz._10
414414 if (if (aE())
415415 then true
416416 else (bT == n))
417417 then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
418418 else $Tuple5(cf, cg, dg, bO, ch)
419419 }
420420
421421
422422 func dh (de,cj,cp) = if ((size(de.payments) != 2))
423423 then throw("exactly 2 payments are expected")
424424 else {
425425 let di = value(de.payments[0])
426426 let dj = value(de.payments[1])
427427 let dk = ci(toBase58String(de.transactionId), cj, di.amount, di.assetId, dj.amount, dj.assetId, toString(de.caller), false, cp)
428428 let bT = parseIntValue(dk._8)
429429 if (if (if (aE())
430430 then true
431431 else (bT == l))
432432 then true
433433 else (bT == n))
434434 then throw(("Put operation is blocked by admin. Status = " + toString(bT)))
435435 else dk
436436 }
437437
438438
439439 func dl (dm) = {
440440 let dn = invoke(aC, "emit", [dm], nil)
441441 if ((dn == dn))
442442 then {
443443 let do = {
444444 let dp = dn
445445 if ($isInstanceOf(dp, "Address"))
446446 then {
447447 let dq = dp
448448 invoke(dq, "emit", [dm], nil)
449449 }
450450 else unit
451451 }
452452 if ((do == do))
453453 then dm
454454 else throw("Strict value is not equal to itself.")
455455 }
456456 else throw("Strict value is not equal to itself.")
457457 }
458458
459459
460460 func dr (dm) = {
461461 let ds = fraction(dm, ad, b)
462462 $Tuple2((dm - ds), ds)
463463 }
464464
465465
466466 func dt (du,dv,W,X) = {
467467 let dw = (X == unit)
468468 let dx = aM(aG())
469469 let dy = dx._1
470470 let bT = dx._2
471471 let bQ = dx._3
472472 let dz = dx._4
473473 let cS = dx._5
474474 let dA = dx._6
475475 let dB = dx._7
476476 let dC = bp(aL(dz))
477477 let dD = bp(aL(cS))
478478 let dE = if ((dv == dz))
479479 then true
480480 else if ((dv == cS))
481481 then false
482482 else aA("invalid asset")
483483 let dF = if (dw)
484484 then $Tuple2(dC, dD)
485485 else if (dE)
486486 then $Tuple2((dC - du), dD)
487487 else $Tuple2(dC, (dD - du))
488488 let dG = dF._1
489489 let dH = dF._2
490490 let dI = if (dE)
491491 then $Tuple2(du, 0)
492492 else $Tuple2(0, du)
493493 let dJ = dI._1
494494 let dK = dI._2
495495 let dL = dr(dJ)._1
496496 let dM = dr(dK)._1
497497 let dN = dr(du)
498498 let dO = dN._1
499499 let ds = dN._2
500500 let dP = (dG + dL)
501501 let dQ = (dH + dM)
502502 let ca = G(br(D(dQ, dB), D(dP, dA)), b)
503503 let dR = if (dE)
504504 then dG
505505 else dH
506506 let dS = toBigInt(dR)
507507 let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
508508 let dU = if ((dT > f))
509509 then true
510510 else throw("initial deposit requires all coins")
511511 if ((dU == dU))
512512 then {
513513 let dV = toBigInt(dO)
514514 let dW = max([0, toInt(((dT * (sqrtBigInt((d + ((dV * d) / dS)), 8, 18, DOWN) - d)) / d))])
515515 let cO = if (dw)
516516 then nil
517517 else [IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca), StringEntry(V(toString(value(W)), toBase58String(value(X))), ba(dJ, dK, dW, ca, 0, 0, height, lastBlock.timestamp, 0, 0))]
518518 let dX = fraction(dH, b, dG)
519519 let dY = fraction(du, b, (dX + b))
520520 let dZ = (du - dY)
521- let ea = fraction(dT, toBigInt(dZ), toBigInt(dH))
522- let eb = toInt(fraction((toBigInt(dW) - ea), c, ea))
521+ let ea = toInt(fraction(dT, toBigInt(dZ), toBigInt(dH)))
522+ let eb = if ((ea == 0))
523+ then if ((dW == 0))
524+ then 0
525+ else throw("bonus calculation error")
526+ else fraction((dW - ea), b, ea)
523527 $Tuple4(dW, cO, ds, eb)
524528 }
525529 else throw("Strict value is not equal to itself.")
526530 }
527531
528532
529533 func ec (ed,dO,dv,W,X) = {
530534 let dw = (X == unit)
531535 let ee = aM(aG())
532536 let dy = ee._1
533537 let bT = ee._2
534538 let bQ = ee._3
535539 let dz = ee._4
536540 let cS = ee._5
537541 let ef = ee._6
538542 let eg = ee._7
539543 let eh = [if ((dv == bQ))
540544 then true
541545 else throw("invalid lp asset")]
542546 if ((eh == eh))
543547 then {
544548 let ei = if ((ed == dz))
545549 then true
546550 else if ((ed == cS))
547551 then false
548552 else aA("invalid asset")
549553 let ej = if (ei)
550554 then toBigInt(bp(aL(dz)))
551555 else toBigInt(bp(aL(cS)))
552556 let ek = bp(aL(dz))
553557 let el = bp(aL(cS))
554558 let em = if (ei)
555559 then ek
556560 else el
557561 let en = toBigInt(em)
558562 let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
559563 let eo = toBigInt(dO)
560564 let ep = max([0, toInt(((ej * (d - pow((d - ((eo * d) / dT)), 18, h, 0, 18, DOWN))) / d))])
561565 let eq = dr(ep)
562566 let er = eq._1
563567 let ds = eq._2
564568 let es = if (ei)
565569 then $Tuple4(er, 0, (ek - ep), el)
566570 else $Tuple4(0, er, ek, (el - ep))
567571 let et = es._1
568572 let eu = es._2
569573 let ev = es._3
570574 let ew = es._4
571575 let ex = br(D(ew, eg), D(ev, ef))
572576 let ca = G(ex, b)
573577 let cO = if (dw)
574578 then nil
575579 else [StringEntry(Y(toString(value(W)), toBase58String(value(X))), bl(et, eu, dO, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
576580 let ey = bM("", aL(bQ), dO, this)
577581 let ez = (ey._1 + ey._2)
578- let eb = fraction((er - ez), b, ez)
582+ let eb = if ((ez == 0))
583+ then if ((er == 0))
584+ then 0
585+ else throw("bonus calculation error")
586+ else fraction((er - ez), b, ez)
579587 $Tuple4(er, cO, ds, eb)
580588 }
581589 else throw("Strict value is not equal to itself.")
582590 }
583591
584592
585593 func eA () = {
586594 let dp = getString(P())
587595 if ($isInstanceOf(dp, "String"))
588596 then {
589597 let eB = dp
590598 fromBase58String(eB)
591599 }
592600 else if ($isInstanceOf(dp, "Unit"))
593601 then unit
594602 else throw("Match error")
595603 }
596604
597605
598606 func eC () = {
599607 let dp = getString(Q())
600608 if ($isInstanceOf(dp, "String"))
601609 then {
602610 let eB = dp
603611 fromBase58String(eB)
604612 }
605613 else if ($isInstanceOf(dp, "Unit"))
606614 then unit
607615 else throw("Match error")
608616 }
609617
610618
611619 func eD (de) = {
612620 let eE = throw("Permission denied")
613621 let dp = eA()
614622 if ($isInstanceOf(dp, "ByteVector"))
615623 then {
616624 let eF = dp
617625 if ((de.callerPublicKey == eF))
618626 then true
619627 else eE
620628 }
621629 else if ($isInstanceOf(dp, "Unit"))
622630 then if ((de.caller == this))
623631 then true
624632 else eE
625633 else throw("Match error")
626634 }
627635
628636
629637 @Callable(de)
630638 func setManager (eG) = {
631639 let eH = eD(de)
632640 if ((eH == eH))
633641 then {
634642 let eI = fromBase58String(eG)
635643 if ((eI == eI))
636644 then [StringEntry(Q(), eG)]
637645 else throw("Strict value is not equal to itself.")
638646 }
639647 else throw("Strict value is not equal to itself.")
640648 }
641649
642650
643651
644652 @Callable(de)
645653 func confirmManager () = {
646654 let eJ = eC()
647655 let eK = if (isDefined(eJ))
648656 then true
649657 else throw("No pending manager")
650658 if ((eK == eK))
651659 then {
652660 let eL = if ((de.callerPublicKey == value(eJ)))
653661 then true
654662 else throw("You are not pending manager")
655663 if ((eL == eL))
656664 then [StringEntry(P(), toBase58String(value(eJ))), DeleteEntry(Q())]
657665 else throw("Strict value is not equal to itself.")
658666 }
659667 else throw("Strict value is not equal to itself.")
660668 }
661669
662670
663671
664672 @Callable(de)
665673 func put (cj,eM) = if ((0 > cj))
666674 then throw("Invalid slippageTolerance passed")
667675 else {
668676 let dk = dh(de, cj, true)
669677 let cL = dk._2
670678 let bQ = dk._7
671679 let ch = dk._9
672680 let cM = dk._10
673681 let cN = dk._11
674682 let eN = dk._12
675683 let eO = dk._13
676684 let dn = invoke(aC, "emit", [cL], nil)
677685 if ((dn == dn))
678686 then {
679687 let do = {
680688 let dp = dn
681689 if ($isInstanceOf(dp, "Address"))
682690 then {
683691 let dq = dp
684692 invoke(dq, "emit", [cL], nil)
685693 }
686694 else unit
687695 }
688696 if ((do == do))
689697 then {
690698 let eP = if ((cM > 0))
691699 then invoke(aZ, "put", nil, [AttachedPayment(eN, cM)])
692700 else nil
693701 if ((eP == eP))
694702 then {
695703 let eQ = if ((cN > 0))
696704 then invoke(aZ, "put", nil, [AttachedPayment(eO, cN)])
697705 else nil
698706 if ((eQ == eQ))
699707 then {
700708 let eR = if (eM)
701709 then {
702710 let eS = invoke(aY, "stake", nil, [AttachedPayment(bQ, cL)])
703711 if ((eS == eS))
704712 then nil
705713 else throw("Strict value is not equal to itself.")
706714 }
707715 else [ScriptTransfer(de.caller, cL, bQ)]
708716 (ch ++ eR)
709717 }
710718 else throw("Strict value is not equal to itself.")
711719 }
712720 else throw("Strict value is not equal to itself.")
713721 }
714722 else throw("Strict value is not equal to itself.")
715723 }
716724 else throw("Strict value is not equal to itself.")
717725 }
718726
719727
720728
721729 @Callable(de)
722730 func putForFree (eT) = if ((0 > eT))
723731 then throw("Invalid value passed")
724732 else {
725733 let dk = dh(de, eT, false)
726734 dk._9
727735 }
728736
729737
730738
731739 @Callable(de)
732740 func putOneTkn (eU,eV) = {
733741 let eW = if (if (aE())
734742 then true
735743 else (aR == l))
736744 then true
737745 else (aR == n)
738746 let eh = [if (!(eW))
739747 then true
740748 else aA("put operation is blocked by admin"), if ((size(de.payments) == 1))
741749 then true
742750 else aA("exactly 1 payment are expected")]
743751 if ((eh == eh))
744752 then {
745753 let eX = de.payments[0]
746754 let dv = eX.assetId
747755 let du = eX.amount
748756 let W = de.caller
749757 let X = de.transactionId
750758 let eY = dt(du, dv, W, X)
751759 let eZ = eY._1
752760 let cO = eY._2
753761 let ds = eY._3
754762 let eb = eY._4
755763 let fa = if (if ((eU > 0))
756764 then (eU > eZ)
757765 else false)
758766 then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
759767 else eZ
760768 let dn = dl(fa)
761769 if ((dn == dn))
762770 then {
763771 let eR = if (eV)
764772 then {
765773 let fb = invoke(aY, "stake", nil, [AttachedPayment(aS, fa)])
766774 if ((fb == fb))
767775 then nil
768776 else throw("Strict value is not equal to itself.")
769777 }
770778 else [ScriptTransfer(de.caller, fa, aS)]
771779 let fc = if ((ds > 0))
772780 then [ScriptTransfer(aD, ds, dv)]
773781 else nil
774782 $Tuple2(((cO ++ eR) ++ fc), fa)
775783 }
776784 else throw("Strict value is not equal to itself.")
777785 }
778786 else throw("Strict value is not equal to itself.")
779787 }
780788
781789
782790
783791 @Callable(de)
784792 func putOneTknREADONLY (dv,du) = {
785793 let fd = dt(du, aJ(dv), unit, unit)
786794 let eZ = fd._1
787795 let cO = fd._2
788796 let ds = fd._3
789797 let eb = fd._4
790798 $Tuple2(nil, $Tuple3(eZ, ds, eb))
791799 }
792800
793801
794802
795803 @Callable(de)
796804 func getOneTkn (fe,eU) = {
797805 let ff = if (aE())
798806 then true
799807 else (aR == n)
800808 let eh = [if (!(ff))
801809 then true
802810 else aA("get operation is blocked by admin"), if ((size(de.payments) == 1))
803811 then true
804812 else aA("exactly 1 payment are expected")]
805813 if ((eh == eh))
806814 then {
807815 let ed = aJ(fe)
808816 let eX = de.payments[0]
809817 let dv = eX.assetId
810818 let dO = eX.amount
811819 let W = de.caller
812820 let X = de.transactionId
813821 let fg = ec(ed, dO, dv, W, X)
814822 let fh = fg._1
815823 let cO = fg._2
816824 let ds = fg._3
817825 let eb = fg._4
818826 let dm = if (if ((eU > 0))
819827 then (eU > fh)
820828 else false)
821829 then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
822830 else fh
823831 let fi = invoke(aC, "burn", [dO], [AttachedPayment(dv, dO)])
824832 if ((fi == fi))
825833 then {
826834 let fj = [ScriptTransfer(W, dm, ed)]
827835 let fc = if ((ds > 0))
828836 then [ScriptTransfer(aD, ds, ed)]
829837 else nil
830838 $Tuple2(((cO ++ fj) ++ fc), dm)
831839 }
832840 else throw("Strict value is not equal to itself.")
833841 }
834842 else throw("Strict value is not equal to itself.")
835843 }
836844
837845
838846
839847 @Callable(de)
840848 func getOneTknREADONLY (ed,dO) = {
841849 let fk = ec(aJ(ed), dO, aS, unit, unit)
842850 let fh = fk._1
843851 let cO = fk._2
844852 let ds = fk._3
845853 let eb = fk._4
846854 $Tuple2(nil, $Tuple3(fh, ds, eb))
847855 }
848856
849857
850858
851859 @Callable(de)
852860 func unstakeAndGetOneTkn (fl,fe,eU) = {
853861 let ff = if (aE())
854862 then true
855863 else (aR == n)
856864 let eh = [if (!(ff))
857865 then true
858866 else aA("get operation is blocked by admin"), if ((size(de.payments) == 0))
859867 then true
860868 else aA("no payments are expected")]
861869 if ((eh == eh))
862870 then {
863871 let ed = aJ(fe)
864872 let fm = invoke(aY, "unstake", [toBase58String(aS), fl], nil)
865873 if ((fm == fm))
866874 then {
867875 let fn = ec(ed, fl, aS, unit, unit)
868876 let fh = fn._1
869877 let cO = fn._2
870878 let ds = fn._3
871879 let eb = fn._4
872880 let dm = if (if ((eU > 0))
873881 then (eU > fh)
874882 else false)
875883 then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
876884 else fh
877885 let fi = invoke(aC, "burn", [fl], [AttachedPayment(aS, fl)])
878886 if ((fi == fi))
879887 then {
880888 let fj = [ScriptTransfer(de.caller, dm, ed)]
881889 let fc = if ((ds > 0))
882890 then [ScriptTransfer(aD, ds, ed)]
883891 else nil
884892 $Tuple2(((cO ++ fj) ++ fc), dm)
885893 }
886894 else throw("Strict value is not equal to itself.")
887895 }
888896 else throw("Strict value is not equal to itself.")
889897 }
890898 else throw("Strict value is not equal to itself.")
891899 }
892900
893901
894902
895903 @Callable(de)
896904 func get () = {
897905 let cz = dd(de)
898906 let fo = cz._1
899907 let cg = cz._2
900908 let dg = cz._3
901909 let bO = cz._4
902910 let ch = cz._5
903911 let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
904912 if ((fp == fp))
905913 then ch
906914 else throw("Strict value is not equal to itself.")
907915 }
908916
909917
910918
911919 @Callable(de)
912920 func getNoLess (fq,fr) = {
913921 let cz = dd(de)
914922 let cf = cz._1
915923 let cg = cz._2
916924 let dg = cz._3
917925 let bO = cz._4
918926 let ch = cz._5
919927 if ((fq > cf))
920928 then throw(((("noLessThenAmtAsset failed: " + toString(cf)) + " < ") + toString(fq)))
921929 else if ((fr > cg))
922930 then throw(((("noLessThenPriceAsset failed: " + toString(cg)) + " < ") + toString(fr)))
923931 else {
924932 let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
925933 if ((fp == fp))
926934 then ch
927935 else throw("Strict value is not equal to itself.")
928936 }
929937 }
930938
931939
932940
933941 @Callable(de)
934942 func unstakeAndGet (dm) = {
935943 let fs = if ((size(de.payments) != 0))
936944 then throw("No payments are expected")
937945 else true
938946 if ((fs == fs))
939947 then {
940948 let bD = aG()
941949 let bQ = fromBase58String(bD[q])
942950 let fm = invoke(aY, "unstake", [toBase58String(bQ), dm], nil)
943951 if ((fm == fm))
944952 then {
945953 let cz = bM(toBase58String(de.transactionId), toBase58String(bQ), dm, de.caller)
946954 let bT = parseIntValue(cz._9)
947955 let ch = cz._10
948956 let ft = if (if (aE())
949957 then true
950958 else (bT == n))
951959 then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
952960 else true
953961 if ((ft == ft))
954962 then {
955963 let fp = invoke(aC, "burn", [dm], [AttachedPayment(bQ, dm)])
956964 if ((fp == fp))
957965 then ch
958966 else throw("Strict value is not equal to itself.")
959967 }
960968 else throw("Strict value is not equal to itself.")
961969 }
962970 else throw("Strict value is not equal to itself.")
963971 }
964972 else throw("Strict value is not equal to itself.")
965973 }
966974
967975
968976
969977 @Callable(de)
970978 func activate (fu,fv) = if ((toString(de.caller) != toString(aC)))
971979 then throw("permissions denied")
972980 else $Tuple2([StringEntry(Z(), fu), StringEntry(aa(), fv)], "success")
973981
974982
975983
976984 @Callable(de)
977985 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aG())
978986
979987
980988
981989 @Callable(de)
982990 func getAccBalanceWrapperREADONLY (bq) = $Tuple2(nil, bp(bq))
983991
984992
985993
986994 @Callable(de)
987995 func calcPricesWrapperREADONLY (bx,by,bC) = {
988996 let bL = bB(bx, by, bC)
989997 $Tuple2(nil, [toString(bL[0]), toString(bL[1]), toString(bL[2])])
990998 }
991999
9921000
9931001
9941002 @Callable(de)
9951003 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
9961004
9971005
9981006
9991007 @Callable(de)
10001008 func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
10011009
10021010
10031011
10041012 @Callable(de)
10051013 func calcPriceBigIntWrapperREADONLY (bs,bt) = $Tuple2(nil, toString(br(parseBigIntValue(bs), parseBigIntValue(bt))))
10061014
10071015
10081016
10091017 @Callable(de)
10101018 func estimatePutOperationWrapperREADONLY (bN,cj,ck,cl,cm,cn,W,co,cp) = $Tuple2(nil, ci(bN, cj, ck, cl, cm, cn, W, co, cp))
10111019
10121020
10131021
10141022 @Callable(de)
10151023 func estimateGetOperationWrapperREADONLY (bN,bO,bP,W) = {
10161024 let cz = bM(bN, bO, bP, addressFromStringValue(W))
10171025 $Tuple2(nil, $Tuple10(cz._1, cz._2, cz._3, cz._4, cz._5, cz._6, cz._7, toString(cz._8), cz._9, cz._10))
10181026 }
10191027
10201028
10211029
10221030 @Callable(de)
10231031 func statsREADONLY () = {
10241032 let bD = aG()
10251033 let bQ = fromBase58String(bD[q])
10261034 let cR = bD[r]
10271035 let cS = bD[s]
10281036 let cs = bD[v]
10291037 let ct = bD[w]
10301038 let bE = parseIntValue(bD[t])
10311039 let bF = parseIntValue(bD[u])
10321040 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
10331041 let cT = bp(cR)
10341042 let cU = bp(cS)
10351043 let fx = if ((fw == 0))
10361044 then [e, e, e]
10371045 else bB(cT, cU, fw)
10381046 let ca = 0
10391047 let fy = G(fx[1], b)
10401048 let fz = G(fx[2], b)
10411049 let fA = value(getInteger(aC, ao(toString(this))))
10421050 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cT), toString(cU), toString(fw), toString(ca), toString(fy), toString(fz), toString(fA)], j))
10431051 }
10441052
10451053
10461054
10471055 @Callable(de)
10481056 func evaluatePutByAmountAssetREADONLY (ck) = {
10491057 let bD = aG()
10501058 let bQ = fromBase58String(bD[q])
10511059 let cq = bD[r]
10521060 let bR = fromBase58String(cq)
10531061 let cr = bD[s]
10541062 let bS = fromBase58String(cr)
10551063 let bE = parseIntValue(bD[t])
10561064 let bF = parseIntValue(bD[u])
10571065 let bT = bD[p]
10581066 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
10591067 let cT = bp(cq)
10601068 let cU = bp(cr)
10611069 let bz = D(cT, bE)
10621070 let bA = D(cU, bF)
10631071 let bZ = if ((fw == 0))
10641072 then e
10651073 else br(bA, bz)
10661074 let cw = D(ck, bE)
10671075 let cx = fraction(cw, bZ, d)
10681076 let cm = G(cx, bF)
10691077 let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
10701078 let cH = dk._1
10711079 let fB = dk._3
10721080 let bV = dk._4
10731081 let bX = dk._5
10741082 let bU = dk._6
10751083 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cH), toString(G(bZ, b)), toString(bV), toString(bX), toString(bU), bT, toString(ck), toString(cm)], j))
10761084 }
10771085
10781086
10791087
10801088 @Callable(de)
10811089 func evaluatePutByPriceAssetREADONLY (cm) = {
10821090 let bD = aG()
10831091 let bQ = fromBase58String(bD[q])
10841092 let cq = bD[r]
10851093 let bR = fromBase58String(cq)
10861094 let cr = bD[s]
10871095 let bS = fromBase58String(cr)
10881096 let bE = parseIntValue(bD[t])
10891097 let bF = parseIntValue(bD[u])
10901098 let bT = bD[p]
10911099 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
10921100 let fC = bp(cq)
10931101 let fD = bp(cr)
10941102 let fE = D(fC, bE)
10951103 let fF = D(fD, bF)
10961104 let bZ = if ((fw == 0))
10971105 then e
10981106 else br(fF, fE)
10991107 let cx = D(cm, bF)
11001108 let cw = fraction(cx, d, bZ)
11011109 let ck = G(cw, bE)
11021110 let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
11031111 let cH = dk._1
11041112 let fB = dk._3
11051113 let bV = dk._4
11061114 let bX = dk._5
11071115 let bU = dk._6
11081116 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cH), toString(G(bZ, b)), toString(bV), toString(bX), toString(bU), bT, toString(ck), toString(cm)], j))
11091117 }
11101118
11111119
11121120
11131121 @Callable(de)
11141122 func evaluateGetREADONLY (fG,fH) = {
11151123 let cz = bM("", fG, fH, this)
11161124 let cf = cz._1
11171125 let cg = cz._2
11181126 let bV = cz._5
11191127 let bX = cz._6
11201128 let bU = cz._7
11211129 let ca = cz._8
11221130 let bT = parseIntValue(cz._9)
11231131 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cf), toString(cg), toString(bV), toString(bX), toString(bU), toString(ca), toString(bT)], j))
11241132 }
11251133
11261134
11271135 @Verifier(fI)
11281136 func fJ () = {
11291137 let fK = {
11301138 let dp = eA()
11311139 if ($isInstanceOf(dp, "ByteVector"))
11321140 then {
11331141 let eF = dp
11341142 eF
11351143 }
11361144 else if ($isInstanceOf(dp, "Unit"))
11371145 then fI.senderPublicKey
11381146 else throw("Match error")
11391147 }
11401148 let dp = fI
11411149 if ($isInstanceOf(dp, "Order"))
11421150 then {
11431151 let cQ = dp
11441152 let fL = aF()
11451153 let at = cP(cQ)
11461154 let au = sigVerify(cQ.bodyBytes, cQ.proofs[0], cQ.senderPublicKey)
11471155 let av = sigVerify(cQ.bodyBytes, cQ.proofs[1], fL)
11481156 if (if (if (at)
11491157 then au
11501158 else false)
11511159 then av
11521160 else false)
11531161 then true
11541162 else as(at, au, av)
11551163 }
11561164 else if ($isInstanceOf(dp, "SetScriptTransaction"))
11571165 then {
11581166 let eB = dp
11591167 let fM = blake2b256(value(eB.script))
11601168 let fN = fromBase64String(value(getString(aC, aq())))
11611169 let fO = scriptHash(this)
11621170 if (if ((fN == fM))
11631171 then (fO != fM)
11641172 else false)
11651173 then true
11661174 else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
11671175 }
11681176 else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
11691177 }
11701178

github/deemru/w8io/026f985 
115.47 ms