tx · 3P1kaoW1vZHheFai94Xa5CfRaQe3iAFRFpw443svSAqE

3PAd9Aqg3cQSzu26MFYWQYcjSXPVCJtuf5V:  -0.10000000 Waves

2024.01.26 14:02 [4014169] smart account 3PAd9Aqg3cQSzu26MFYWQYcjSXPVCJtuf5V > SELF 0.00000000 Waves

{ "type": 13, "id": "3P1kaoW1vZHheFai94Xa5CfRaQe3iAFRFpw443svSAqE", "fee": 10000000, "feeAssetId": null, "timestamp": 1706272355000, "version": 2, "chainId": 87, "sender": "3PAd9Aqg3cQSzu26MFYWQYcjSXPVCJtuf5V", "senderPublicKey": "Ajf56x532JLzVoourPv9FW75kYsvScNxztPnt1enhNkS", "proofs": [ "2EGhWN4AKZqj1n9s1WtRQd4K1Q7SLVPpJf91rc2FgxywNhe86e5bYnj4aPUSrkQWX9V7Ad5F2BLoyCNtQpBcpWXR", "3oAYQr9cWAHgjHgYxdcBbzeMVYpogR7B6gTdMvWM4UM9amKSfDMvbuBpqef1gna7up4TK2Ft3VmDmKaM7xSExaah" ], "script": "base64:BgKBAQgCEgkKBwgICAEICAgSABIECgIIARIAEgMKAQgSABIGCgQICAgIEgYKBAgICAgSBAoCCAgSBAoCCAgSAwoBBBIDCgEEEggKBgQIAQgICBIHCgUECAgIARIGCgQECAQIEgUKAwQICBIDCgEEEgQKAggEEgQKAggEEgMKAQQSAwoBBCQAC2F4bHlBZGRyZXNzCQEHQWRkcmVzcwEBGgFXz8h13gt2/Imb93uvCUhEZwkqUEc/D0ItAAdheGx5TFBzCQDMCAICLDdLWmJKclZvcHdKaGtkd2JlMWVGREJiZXg0ZGtZNjNNeGpUTmpxWHRyemoxCQDMCAICLEJ0dzNHMWo0d1FnZHA0OVBUeGFGa052bjc1ZFF0cUdETTdlalFwcEhuV0MxCQDMCAICLEJpU3pGZThuU0w3OG9aYWViZm9pbjV2Qlo1UHplNmQ3a2FlaWpMcXI1eFplCQDMCAICLEYyQUtrQTUxM2s1eUhFSmtMc1U2dld4Q1lZazgxMUdwakxod0V2MldHd1o5CQDMCAICLDRDUTVDUEdMWExiV0JVczJKQmpLVWFScUY0OUNtS0hrd3p2UGdTdlFwQVFWCQDMCAICLDZpTUI2TEtTcmd2OXdhRXZFbk42WWR5eDdkZnhQbkdjVHc4MzE4V1ZtNWJSBQNuaWwAEmF4bHlGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBARoBVw0BWZY1FHCZ5lzdPjsnXRNYpbnNNV3lwgAScmVzZXJ2ZUZ1bmRBZGRyZXNzCQEHQWRkcmVzcwEBGgFXHuH7QDFrgebsS1YbBSxRoZNu3wmxPNLBAAtyZXNlcnZlRnVuZAAUABFhZ2dyZWdhdG9yQWRkcmVzcwkBB0FkZHJlc3MBARoBV50MqsYTUaluy4D3Y33BZHji73JNqAy60wARc2h1dGRvd25XaGl0ZWxpc3QJAMwIAgEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEJAMwIAgEaAVdjDQOBpn9bVNIcueQoKvOngDTw2LWN1WUJAMwIAgEaAVez1ZJUSQmaKhD7xvifEHar7z8PcqWJFYwJAMwIAgEaAVf4+voCJsBRi+xqO0YzSdIccbB1i/mkypoJAMwIAgEaAVer3aoi85i5H0XYLNSn6vkSYq+JNmpQO3IJAMwIAgEaAVcwORzRpGYYO35/49jeov24Z5j/V00RJp0FA25pbAEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEHYWRkcmVzcwkBASEBAwMDCQECIT0CBQdhZGRyZXNzCQEHQWRkcmVzcwEBGgFXknk9t7KW82FEBfQVEbQTU5SFwS21x/ezCQECIT0CBQdhZGRyZXNzCQEHQWRkcmVzcwEBGgFXd6rO0XhW6KmeXquV77/p4XFYdV4ymnGBBwkBAiE9AgUHYWRkcmVzcwkBB0FkZHJlc3MBARoBV9fhI1GOfKuIWtXXKJd12Ih104+uIwWm4QcJAQIhPQIFB2FkZHJlc3MJAQdBZGRyZXNzAQEaAVer3aoi85i5H0XYLNSn6vkSYq+JNmpQO3IHARR2ZXJpZnlTZW50aW5lbFJpZ2h0cwEHYWRkcmVzcwkBASEBAwkBAiE9AgUHYWRkcmVzcwUScmVzZXJ2ZUZ1bmRBZGRyZXNzCQECIT0CBQdhZGRyZXNzBQtheGx5QWRkcmVzcwcBDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMAkAlgoEAAAAgNrECQCA6JImAIC0iRMDCQAAAgIFV0FWRVMFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDh6xcDCQAAAgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24FByRtYXRjaDAJAJYKBAAAAIDaxAkAgOiSJgCAtIkTAwkAAAICLERTYmJoTHNTVGVEZzVMc2l1ZmsyQW5laDNEalZxSnVQcjJNOXVVMWd3eTVwBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgMLXLwMJAAACAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQUHJG1hdGNoMAkAlgoEAAAAgIenDgCA6JImAIC0iRMDCQAAAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFByRtYXRjaDAJAJYKBAAAAMDw9QsAgOiSJgCAtIkTAwkAAAICLDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51BQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDVVWUJQcHE0V29VNW40TXdwRmtnSm5XM0ZxNEIxdTN1a3BLMzNpazRRZXJSBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDJ0aHNBQ3VIbXpETXVOZXpQTTMyd2c5YTNCd1V6QldEZVNLYWtnejNjdzIxBQckbWF0Y2gwCQCWCgQAgIl6AIC0iRMAgOiSJgCAwtcvAwkAAAICK1lpTmJvZkZ6QzE3akVISENNd3JSY3B5OU1ycmphYk1NTFp4ZzhnNXhtZjcFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDokiYJAJYKBAAAAIDaxAkAgOiSJgCA6JImAAZTY2FsZTgAgMLXLwAHU2NhbGUxMACAyK+gJQAHU2NhbGUxNgkAaAIFBlNjYWxlOAUGU2NhbGU4AAlkYXlCbG9ja3MAoAsBCmxpSW50VG9TdHIBAmxpCgEBZgIFYWNjdW0EbmV4dAkArAICCQCsAgIFBWFjY3VtCQCkAwEFBG5leHQCASwKAAIkbAUCbGkKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQx0cnlHZXRTdHJpbmcBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABDHRyeUdldEJpbmFyeQEDa2V5BAckbWF0Y2gwCQCcCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwBQFiAQABDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBDWdldEFzc2V0Qnl0ZXMBCmFzc2V0SWRTdHIDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMFBHVuaXQJANkEAQUKYXNzZXRJZFN0cgEKZ2V0QmFsYW5jZQEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQphc3NldElkU3RyAQ9nZXRNYXJrZXRBc3NldHMACQC1CQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMCASwBEmdldEFzc2V0c01heFN1cHBseQAEAXMJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9tYXhzdXBwbHkDCQAAAgUBcwIACQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQUDbmlsCQC1CQIFAXMCASwBDWdldE91dGRhdGVkVXIBCmFzc2V0SWRTdHIEBGRvd24JAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlBQdTY2FsZTE2AwkAAAIFBGRvd24AAAAACQBrAwUGU2NhbGU4CQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQUHU2NhbGUxNgUEZG93bgELZ2V0SW50ZXJlc3QBCmFzc2V0SWRTdHIEAnVyCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIEBWN1cnZlCQEMZ2V0UmF0ZUN1cnZlAQUKYXNzZXRJZFN0cgQEcmF0ZQkAZAIIBQVjdXJ2ZQJfMQMJAGcCCAUFY3VydmUCXzMFAnVyCQBrAwUCdXIIBQVjdXJ2ZQJfMggFBWN1cnZlAl8zCQBkAggFBWN1cnZlAl8yCQBrAwkAZQIFAnVyCAUFY3VydmUCXzMIBQVjdXJ2ZQJfNAkAZQIAgMLXLwgFBWN1cnZlAl8zCQCWAwEJAMwIAgkAawMFBHJhdGUFBlNjYWxlOAkAaAIFCWRheUJsb2NrcwDtAgkAzAgCAAEFA25pbAEQdG9rZW5SYXRlc1JlY2FsYwEKYXNzZXRJZFN0cgMJAQIhPQIJAM8IAgUHYXhseUxQcwUKYXNzZXRJZFN0cgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfc1JhdGUFB1NjYWxlMTYJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5sYXN0UmF0ZUhlaWdodAUGaGVpZ2h0BQNuaWwECGludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQphc3NldElkU3RyBAJ1cgkBDWdldE91dGRhdGVkVXIBBQphc3NldElkU3RyBBBsYXN0UmVjYWxjSGVpZ2h0CQENdHJ5R2V0SW50ZWdlcgECDmxhc3RSYXRlSGVpZ2h0BAlsYXN0QlJhdGUJAJYDAQkAzAgCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlCQDMCAIFB1NjYWxlMTYFA25pbAQIbmV3QlJhdGUJAGQCBQlsYXN0QlJhdGUJAGgCCQBlAgUGaGVpZ2h0BRBsYXN0UmVjYWxjSGVpZ2h0BQhpbnRlcmVzdAQJbGFzdFNSYXRlCQCWAwEJAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld1NSYXRlCQBkAgUJbGFzdFNSYXRlCQBpAgkAaAIJAGgCCQBlAgUGaGVpZ2h0BRBsYXN0UmVjYWxjSGVpZ2h0CQBrAwUIaW50ZXJlc3QFAnVyBQZTY2FsZTgJAGUCAGQFC3Jlc2VydmVGdW5kAGQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlBQhuZXdTUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfYlJhdGUFCG5ld0JSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5sYXN0UmF0ZUhlaWdodAUGaGVpZ2h0BQNuaWwBDWdldEFjdHVhbFJhdGUCCmFzc2V0SWRTdHIIcmF0ZVR5cGUKAQFmAgVhY2N1bQV0b2tlbgQGcmVjYWxjCQEQdG9rZW5SYXRlc1JlY2FsYwEFBXRva2VuCQCUCgIDCQECIT0CBQV0b2tlbgUKYXNzZXRJZFN0cggFBWFjY3VtAl8xAwkAAAIFCHJhdGVUeXBlAgVzUmF0ZQgJAJEDAgUGcmVjYWxjAAAFdmFsdWUICQCRAwIFBnJlY2FsYwABBXZhbHVlCQDOCAIIBQVhY2N1bQJfMgUGcmVjYWxjCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwBBWdldFVyAQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyBARkb3duCQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMAAAV2YWx1ZQUHU2NhbGUxNgkAawMFBlNjYWxlOAkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzAAEFdmFsdWUFB1NjYWxlMTYFBGRvd24BC3JhdGVzUmVjYWxjAAoBAWYCBWFjY3VtBXRva2VuCQDOCAIFBWFjY3VtCQEQdG9rZW5SYXRlc1JlY2FsYwEFBXRva2VuCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAEVZ2V0VG9rZW5QcmljZVdpdGhSaXNrAgphc3NldElkU3RyDHJpc2tBdmVyc2l0eQMDCQAAAgUKYXNzZXRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kGCQAAAgUKYXNzZXRJZFN0cgIsSEdnYWJUcVVTOFd0VkZVSnpmbXJURE1nRWNjSnVaTEJQaEZnUUZ4dm5zb1cJAJQKAgDAhD0AwIQ9BAVwcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgkBB0FkZHJlc3MBARoBV0lm0MvzivVXeq38IW9xxVuJiCvQgbOxfwkArAICBQphc3NldElkU3RyAgdfdHdhcDVCBAlyaXNrTGV2ZWwJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQdBZGRyZXNzAQEaAVdJZtDL84r1V3qt/CFvccVbiYgr0IGzsX8JAKwCAgUKYXNzZXRJZFN0cgIKX3Jpc2tMZXZlbAMJAQIhPQIJAM8IAgUHYXhseUxQcwUKYXNzZXRJZFN0cgUEdW5pdAQBcAoAAUAJAP0HBAULYXhseUFkZHJlc3MCGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZCQDMCAIFCmFzc2V0SWRTdHIFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQFwBQFwCQCUCgIFAXAFAXAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBnAgUMcmlza0F2ZXJzaXR5BQlyaXNrTGV2ZWwJAJQKAgUFcHJpY2UFBXByaWNlCQACAQkArAICCQCsAgICG29yYWNsZSBwcmljZXMgZG9uJ3QgbWF0Y2g6IAkApAMBBQVwcmljZQIjIGlzIHRoZSBwcmljZSwgYnV0IHJpc2sgaXMgdG9vIGhpZ2gBDWdldFRva2VuUHJpY2UBCmFzc2V0SWRTdHIJARVnZXRUb2tlblByaWNlV2l0aFJpc2sCBQphc3NldElkU3RyAAEBDmNhbGNBc3NldFNjYWxlAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOARJjYWxjVXNlckNvbGxhdGVyYWwBB2FkZHJlc3MEFHVzZXJDb2xsYXRlcmFsSW52b2tlCQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgIABQNuaWwFA25pbAMJAAACBRR1c2VyQ29sbGF0ZXJhbEludm9rZQUUdXNlckNvbGxhdGVyYWxJbnZva2UEE3VzZXJDb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFFHVzZXJDb2xsYXRlcmFsSW52b2tlAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECJGlzc3VlIHdoaWxlIGRvaW5nIGluLWRhcHAgaW52b2NhdGlvbgMJAAACBRN1c2VyQ29sbGF0ZXJhbFZhbHVlBRN1c2VyQ29sbGF0ZXJhbFZhbHVlBRN1c2VyQ29sbGF0ZXJhbFZhbHVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5zdXBwbHlJbnRlcm5hbAMKYXNzZXRJZFN0cgthc3NldEFtb3VudAdhZGRyZXNzAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkBAskdDA5MDQ4OTExNQkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQskdDA5MDQ4OTExNQJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQskdDA5MDQ4OTExNQJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBQRET1dOBAltYXhTdXBwbHkEByRtYXRjaDAJAKIIAQkArAICAhBzZXR1cF9tYXhTdXBwbHlfBQphc3NldElkU3RyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBeAUHJG1hdGNoMAkBDXBhcnNlSW50VmFsdWUBBQF4AAAECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQQbmV3VG90YWxTdXBwbGllZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAQEcmF0ZQgJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFc1JhdGUCXzEECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE25ld1RvdGFsU3VwcGxpZWRVc2QJAGsDCQBrAwUQbmV3VG90YWxTdXBwbGllZAUEcmF0ZQUHU2NhbGUxNggFCmFzc2V0UHJpY2UCXzEFCmFzc2V0U2NhbGUDCQAAAgkAswkCCQEMdHJ5R2V0U3RyaW5nAQIMc2V0dXBfdG9rZW5zBQphc3NldElkU3RyBQR1bml0CQACAQIpdGhpcyBhc3NldCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBtYXJrZXQDAwkBAiE9AgUJbWF4U3VwcGx5AAAJAGYCBRNuZXdUb3RhbFN1cHBsaWVkVXNkBQltYXhTdXBwbHkHCQACAQIzbWF4IHRvdGFsIHN1cHBseSBmb3IgdGhpcyB0b2tlbiByZWFjaGVkIGluIHRoZSBwb29sCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIFEG5ld1RvdGFsU3VwcGxpZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0BQthc3NldEFtb3VudAEOYm9ycm93SW50ZXJuYWwECmFzc2V0SWRTdHILYXNzZXRBbW91bnQHYWRkcmVzcwtzdXBwbHlMYXRlcgQNJHQwMTAzMzcxMDQwNAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAxMDMzNzEwNDA0Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDEwMzM3MTA0MDQCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQUHQ0VJTElORwQSY29sbGF0ZXJhbFZhbHVlSW52CQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCixib3Jyb3dlZCwJAKQDAQUGYW1vdW50BQNuaWwFA25pbAMJAAACBRJjb2xsYXRlcmFsVmFsdWVJbnYFEmNvbGxhdGVyYWxWYWx1ZUludgQPY29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRJjb2xsYXRlcmFsVmFsdWVJbnYDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIfY2FuJ3QgZ2V0IHVzZXIgY29sbGF0ZXJhbCB2YWx1ZQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMJAQIhPQIJAM8IAgUHYXhseUxQcwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECHXRoaXMgdG9rZW4gY2Fubm90IGJlIGJvcnJvd2VkAwMJAQEhAQULc3VwcGx5TGF0ZXIJAGYCAAAFD2NvbGxhdGVyYWxWYWx1ZQcJAAIBAiF5b3UgaGF2ZSB0byBzdXBwbHkgbW9yZSB0byBib3Jyb3cEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyAwkAZgIFBmFtb3VudAkAZQIFDWFzc2V0U3VwcGxpZWQFDWFzc2V0Qm9ycm93ZWQJAAIBAhx0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGQCBRF1c2VyQXNzZXRCb3Jyb3dlZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZAIFDWFzc2V0Qm9ycm93ZWQFBmFtb3VudAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQUFYlJhdGUFA25pbAULYXNzZXRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4VAWkBDWZsYXNoUG9zaXRpb24HBHVzZXILc0Fzc2V0SWRTdHILYkFzc2V0SWRTdHIHYkFtb3VudA9jYWxsYmFja0FkZHJlc3MQY2FsbGJhY2tGdW5jdGlvbgxjYWxsYmFja0FyZ3MDCQECIT0CCAUBaQZjYWxsZXIFC2F4bHlBZGRyZXNzCQACAQIgYXZhaWxhYmxlIG9ubHkgZm9yIEF4bHkgcHJvdG9jb2wECWJvcnJvd1JlcwkBDmJvcnJvd0ludGVybmFsBAULYkFzc2V0SWRTdHIFB2JBbW91bnQFBHVzZXIGBAhiQXNzZXRJZAkBDWdldEFzc2V0Qnl0ZXMBBQtiQXNzZXRJZFN0cgQIY2FsbGJhY2sJAP0HBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUPY2FsbGJhY2tBZGRyZXNzBRBjYWxsYmFja0Z1bmN0aW9uCQC1CQIFDGNhbGxiYWNrQXJncwIBLAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIYkFzc2V0SWQFB2JBbW91bnQFA25pbAMJAAACBQhjYWxsYmFjawUIY2FsbGJhY2sEB3NBbW91bnQKAAFABQhjYWxsYmFjawMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUHc0Ftb3VudAUHc0Ftb3VudAQJc3VwcGx5UmVzCQEOc3VwcGx5SW50ZXJuYWwDBQtzQXNzZXRJZFN0cgUHc0Ftb3VudAUEdXNlcgQPY29sbGF0ZXJhbFZhbHVlCgABQAkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQR1c2VyCQDMCAIGCQDMCAIJAKwCAgkArAICBQtzQXNzZXRJZFN0cgIKLHN1cHBsaWVkLAkApAMBBQdzQW1vdW50BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUPY29sbGF0ZXJhbFZhbHVlBQ9jb2xsYXRlcmFsVmFsdWUEC2JvcnJvd1ZhbHVlCgABQAkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQR1c2VyCQDMCAIGCQDMCAIJAKwCAgkArAICBQtiQXNzZXRJZFN0cgIKLGJvcnJvd2VkLAkApAMBBQdiQW1vdW50BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgULYm9ycm93VmFsdWUFC2JvcnJvd1ZhbHVlAwkAZgIFC2JvcnJvd1ZhbHVlBQ9jb2xsYXRlcmFsVmFsdWUJAAIBAh5ub3QgZW5vdWdoIGNvbGxhdGVyYWwgcHJvdmlkZWQJAM4IAggFCWJvcnJvd1JlcwJfMQgFCXN1cHBseVJlcwJfMQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZzdXBwbHkAAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECmF4bHlOb3RpZnkJAPwHBAUSYXhseUZhcm1pbmdBZGRyZXNzAgpsZW5kQWN0aW9uCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFCmFzc2V0SWRTdHIFA25pbAUDbmlsAwkAAAIFCmF4bHlOb3RpZnkFCmF4bHlOb3RpZnkJAQ5zdXBwbHlJbnRlcm5hbAMFCmFzc2V0SWRTdHIFC2Fzc2V0QW1vdW50CQClCAEIBQFpBmNhbGxlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwIKYXNzZXRJZFN0cgthc3NldEFtb3VudAQNJHQwMTMyMzgxMzMwNQkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQ0kdDAxMzIzODEzMzA1Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDEzMjM4MTMzMDUCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQKYXhseU5vdGlmeQkA/AcEBRJheGx5RmFybWluZ0FkZHJlc3MCCmxlbmRBY3Rpb24JAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUKYXNzZXRJZFN0cgUDbmlsBQNuaWwDCQAAAgUKYXhseU5vdGlmeQUKYXhseU5vdGlmeQQSY29sbGF0ZXJhbFZhbHVlSW52CQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCixzdXBwbGllZCwJAKQDAQkBAS0BBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwkAZgIAAAUPY29sbGF0ZXJhbFZhbHVlCQACAQIyeW91IGRvbnQgaGF2ZSBlbm91Z2ggY29sbGF0ZXJhbCBmb3IgdGhpcyBvcGVyYXRpb24DCQBmAgUGYW1vdW50CQBlAgUNYXNzZXRTdXBwbGllZAUNYXNzZXRCb3Jyb3dlZAkAAgECKnRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIG1hcmtldAMJAGYCBQZhbW91bnQJAGUCBRF1c2VyQXNzZXRTdXBwbGllZAURdXNlckFzc2V0Qm9ycm93ZWQJAAIBAip0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVyZXBheQADCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAJAAIBAhwxIHBheW1lbnQgaGFzIHRvIGJlIGF0dGFjaGVkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Fzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNJHQwMTUxMjIxNTE4OQkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAxNTEyMjE1MTg5Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDE1MTIyMTUxODkCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBAphbW91bnRMZWZ0CQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAQLcmVwYXlBbW91bnQDCQBnAgUKYW1vdW50TGVmdAAABQZhbW91bnQFEXVzZXJBc3NldEJvcnJvd2VkAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0CQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGUCBRF1c2VyQXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgUNYXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQDCQBnAgUKYW1vdW50TGVmdAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEBLQEFCmFtb3VudExlZnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAWkBCHJlcGF5Rm9yAQdhZGRyZXNzAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwkBASEBCQEUdmVyaWZ5U2VudGluZWxSaWdodHMBCAUBaQZjYWxsZXIJAAIBAhxhdmFpbGFibGUgb25seSBmb3Igd2hpdGVsaXN0AwkAAAIFB2FkZHJlc3MCBmdsb2JhbAkAAgECIHlvdSBjYW4ndCByZXBheSBmb3IgZXZlcnlvbmUgOl8pAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDSR0MDE2NjUyMTY3MTkJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMTY2NTIxNjcxOQJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQ0kdDAxNjY1MjE2NzE5Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBAphbW91bnRMZWZ0CQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAQLcmVwYXlBbW91bnQDCQBnAgUKYW1vdW50TGVmdAAABQZhbW91bnQFEXVzZXJBc3NldEJvcnJvd2VkBBFleHRyYUFtb3VudFJlc3VsdAMJAGcCBQphbW91bnRMZWZ0AAAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAQEtAQUKYW1vdW50TGVmdAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwEDndpdGhkcmF3UmVzdWx0AwkAAAIIBQFpBmNhbGxlcgULYXhseUFkZHJlc3MKAQRmb2xkAgVhY2N1bQphc3NldElkU3RyBAx1c2VyU3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIDCQBmAgUMdXNlclN1cHBsaWVkAAAJAM4IAgUFYWNjdW0JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUMdXNlclN1cHBsaWVkBQNuaWwFBWFjY3VtCgACJGwFB2F4bHlMUHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDgJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIBQNuaWwDCQAAAgkAswkCCQEMdHJ5R2V0U3RyaW5nAQIMc2V0dXBfdG9rZW5zBQphc3NldElkU3RyBQR1bml0CQACAQIpdGhpcyBhc3NldCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBtYXJrZXQJAM4IAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZQIFDWFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0BRFleHRyYUFtb3VudFJlc3VsdAUOd2l0aGRyYXdSZXN1bHQBaQETYWRkSW50ZXJlc3RFWFRFUk5BTAAEBmFtb3VudAkAawMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AFAAZAQHYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldElkBAZlYXJuZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUGaGVpZ2h0BQNuaWwJAM4IAgUMc3RhdGVDaGFuZ2VzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGsDBQdTY2FsZTE2BQZhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFA25pbAFpAQdwcmVJbml0BAZ0b2tlbnMEbHR2cwNsdHMJcGVuYWx0aWVzCgEBZgIFYWNjdW0FdG9rZW4JAM4IAgUFYWNjdW0JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUFdG9rZW4CBl9iUmF0ZQUHU2NhbGUxNgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX3NSYXRlBQdTY2FsZTE2BQNuaWwDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5BAVyYXRlcwoAAiRsCQC1CQIFBnRva2VucwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCAgxzZXR1cF90b2tlbnMFBnRva2VucwkAzAgCCQELU3RyaW5nRW50cnkCAgpzZXR1cF9sdHZzBQRsdHZzCQDMCAIJAQtTdHJpbmdFbnRyeQICCXNldHVwX2x0cwUDbHRzCQDMCAIJAQtTdHJpbmdFbnRyeQICD3NldHVwX3BlbmFsdGllcwUJcGVuYWx0aWVzCQDMCAIJAQxCb29sZWFuRW50cnkCAgxzZXR1cF9hY3RpdmUGBQNuaWwFBXJhdGVzAWkBDGluaXROZXdUb2tlbgQFdG9rZW4DbHR2Amx0B3BlbmFsdHkDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVcUeViFwPoaZ+cUNI0M98TwbUXt9hz5PUEHCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAgxzZXR1cF90b2tlbnMJAKwCAgkArAICCQEMdHJ5R2V0U3RyaW5nAQIMc2V0dXBfdG9rZW5zAgEsBQV0b2tlbgkAzAgCCQELU3RyaW5nRW50cnkCAgpzZXR1cF9sdHZzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECCnNldHVwX2x0dnMCASwFA2x0dgkAzAgCCQELU3RyaW5nRW50cnkCAglzZXR1cF9sdHMJAKwCAgkArAICCQEMdHJ5R2V0U3RyaW5nAQIJc2V0dXBfbHRzAgEsBQJsdAkAzAgCCQELU3RyaW5nRW50cnkCAg9zZXR1cF9wZW5hbHRpZXMJAKwCAgkArAICCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfcGVuYWx0aWVzAgEsBQdwZW5hbHR5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfYlJhdGUFB1NjYWxlMTYJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUFdG9rZW4CBl9zUmF0ZQUHU2NhbGUxNgUDbmlsAWkBD3VwZGF0ZVBhcmFtZXRlcgIDa2V5A3ZhbAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBVxR5WIXA+hpn5xQ0jQz3xPBtRe32HPk9QQcJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkJAQ1wYXJzZUludFZhbHVlAQUDdmFsBQNuaWwBaQEMdXBkYXRlU3RyaW5nAgNrZXkDdmFsAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXFHlYhcD6GmfnFDSNDPfE8G1F7fYc+T1BBwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAFpARJjbGFpbVRvUmVzZXJ2ZUZ1bmQBBWRlYnVnBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABAVyYXRlcwgJAQ1nZXRBY3R1YWxSYXRlAgkAkQMCBQZhc3NldHMAAAIFc1JhdGUCXzIEAmxpCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwKAQFmAgVhY2N1bQFuAwkAZwIFAW4JAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQZhc3NldHMFAW4ED2F1dG9zdGFrZUFtb3VudAkBDHRyeUdldFN0cmluZwEJAKwCAgIRYXV0b3N0YWtlX2Ftb3VudF8FCmFzc2V0SWRTdHIEBmFtb3VudAkAZQIJAGQCCQBkAgkAZAIJAQpnZXRCYWxhbmNlAQUKYXNzZXRJZFN0cgkBDXRyeUdldEludGVnZXIBCQCsAgICEWF1dG9zdGFrZV9hbW91bnRfBQphc3NldElkU3RyAwkBAiE9AgUPYXV0b3N0YWtlQW1vdW50AgAJAQ1wYXJzZUludFZhbHVlAQUPYXV0b3N0YWtlQW1vdW50AAAJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwkAZAIJAGgCBQFuAAMAAQV2YWx1ZQUHU2NhbGUxNgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzCQBoAgUBbgADBXZhbHVlBQdTY2FsZTE2BANpbnYDCQBmAgkBDXRyeUdldEludGVnZXIBCQCsAgICEWF1dG9zdGFrZV9hbW91bnRfBQphc3NldElkU3RyAAAJAPwHBAUEdGhpcwIMdW5zdGFrZVRva2VuCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgkAlgMBCQDMCAIFBmFtb3VudAkAzAgCAAAFA25pbAUDbmlsBQNuaWwAAAMJAAACBQNpbnYFA2ludgkAzggCBQVhY2N1bQkAzAgCBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQJcGFyYW1ldGVyCgACJGwFAmxpCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAoBAmYyAgVhY2N1bQFuAwkAZwIFAW4JAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQZhc3NldHMFAW4JAM4IAgUFYWNjdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUScmVzZXJ2ZUZ1bmRBZGRyZXNzCQCWAwEJAMwIAgkAkQMCBQlwYXJhbWV0ZXIFAW4JAMwIAgAABQNuaWwJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsAwUFZGVidWcJAAIBCQEKbGlJbnRUb1N0cgEFCXBhcmFtZXRlcgkAlAoCCgACJGwFAmxpCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQJmMgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwFCXBhcmFtZXRlcgFpAQhzaHV0ZG93bgEIc2h1dGRvd24DCQAAAgkAzwgCBRFzaHV0ZG93bldoaXRlbGlzdAgIBQFpBmNhbGxlcgVieXRlcwUEdW5pdAkAAgECF3VzZXIgbm90IGluIGEgd2hpdGVsaXN0CQDMCAIJAQxCb29sZWFuRW50cnkCAgxzZXR1cF9hY3RpdmUJAQEhAQUIc2h1dGRvd24FA25pbAFpAQlsaXF1aWRhdGUGBWRlYnVnB2FkZHJlc3MLYXNzZXRBbW91bnQLc0Fzc2V0SWRTdHILYkFzc2V0SWRTdHIIcm91dGVTdHIDCQEBIQEJARZ2ZXJpZnlMaXF1aWRhdG9yUmlnaHRzAQgFAWkGY2FsbGVyCQACAQIcYXZhaWxhYmxlIGZvciB3aGl0ZWxpc3Qgb25seQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAQOdXNlckNvbGxhdGVyYWwJARJjYWxjVXNlckNvbGxhdGVyYWwBBQdhZGRyZXNzAwkAAAIFDnVzZXJDb2xsYXRlcmFsBQ51c2VyQ29sbGF0ZXJhbAQNJHQwMjI4NTUyMjkxNwkBDWdldEFjdHVhbFJhdGUCBQtzQXNzZXRJZFN0cgIFc1JhdGUEBXNSYXRlCAUNJHQwMjI4NTUyMjkxNwJfMQQLcmF0ZXNSZXN1bHQIBQ0kdDAyMjg1NTIyOTE3Al8yBA0kdDAyMjkyMjIyOTkxCQENZ2V0QWN0dWFsUmF0ZQIFC2JBc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAyMjkyMjIyOTkxAl8xBBJyYXRlc1JlY2FsY1Jlc3VsdDIIBQ0kdDAyMjkyMjIyOTkxAl8yBAxzQXNzZXRBbW91bnQJAGsDBQthc3NldEFtb3VudAUHU2NhbGUxNgUFc1JhdGUEEGN1cnJlbnRTUG9zaXRpb24JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyBBNjdXJyZW50QlBvc2l0aW9uVmFsCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgQQY3VycmVudEJQb3NpdGlvbgMJAGYCBRNjdXJyZW50QlBvc2l0aW9uVmFsAAAFE2N1cnJlbnRCUG9zaXRpb25WYWwJAAIBAiB1c2VyIGhhcyBubyBib3Jyb3cgaW4gdGhpcyB0b2tlbgMJAGYCBQ51c2VyQ29sbGF0ZXJhbAAACQACAQIYdXNlciBjYW4ndCBiZSBsaXF1aWRhdGVkAwkAZgIFDHNBc3NldEFtb3VudAUQY3VycmVudFNQb3NpdGlvbgkAAgECMnBvc2l0aW9uIHRvIGxpcXVpZGF0ZSBpcyBiaWdnZXIgdGhhbiB1c2VyJ3Mgc3VwcGx5BANpbnYDCQECIT0CCQDPCAIFB2F4bHlMUHMFC3NBc3NldElkU3RyBQR1bml0BAVwb3NJZAkAkQMCCQC1CQIFB2FkZHJlc3MCAV8AAQQJYWRkcmVzc0lkCQCRAwIJALUJAgUHYWRkcmVzcwIBXwAACQD9BwQFC2F4bHlBZGRyZXNzAglsaXF1aWRhdGUJAMwIAgUJYWRkcmVzc0lkCQDMCAIFBXBvc0lkCQDMCAIFDHNBc3NldEFtb3VudAUDbmlsBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQOYmFsYW5jZTBCZWZvcmUJAQpnZXRCYWxhbmNlAQULc0Fzc2V0SWRTdHIDCQAAAgUOYmFsYW5jZTBCZWZvcmUFDmJhbGFuY2UwQmVmb3JlBA5iYWxhbmNlMUJlZm9yZQkBCmdldEJhbGFuY2UBBQtiQXNzZXRJZFN0cgMJAAACBQ5iYWxhbmNlMUJlZm9yZQUOYmFsYW5jZTFCZWZvcmUEDmV4Y2hhbmdlSW52b2tlCQD8BwQFEWFnZ3JlZ2F0b3JBZGRyZXNzAgRzd2FwCQDMCAIFCHJvdXRlU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFC3NBc3NldElkU3RyBQthc3NldEFtb3VudAUDbmlsAwkAAAIFDmV4Y2hhbmdlSW52b2tlBQ5leGNoYW5nZUludm9rZQQKYXNzZXQwU29sZAkAZQIFDmJhbGFuY2UwQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC3NBc3NldElkU3RyAwkAAAIFCmFzc2V0MFNvbGQFCmFzc2V0MFNvbGQEDGFzc2V0MUJvdWdodAkAZQIJAQpnZXRCYWxhbmNlAQULYkFzc2V0SWRTdHIFDmJhbGFuY2UxQmVmb3JlAwkAAAIFDGFzc2V0MUJvdWdodAUMYXNzZXQxQm91Z2h0BAthc3NldDBQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULc0Fzc2V0SWRTdHICXzEEC2Fzc2V0MFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtzQXNzZXRJZFN0cgQJYXNzZXQwVXNkCQBrAwUKYXNzZXQwU29sZAULYXNzZXQwUHJpY2UFC2Fzc2V0MFNjYWxlBAthc3NldDFQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULYkFzc2V0SWRTdHICXzIEC2Fzc2V0MVNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtiQXNzZXRJZFN0cgQJYXNzZXQxVXNkCQBrAwUMYXNzZXQxQm91Z2h0BQthc3NldDFQcmljZQULYXNzZXQxU2NhbGUEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9wZW5hbHRpZXMCASwJAQV2YWx1ZQEJAM8IAgkBD2dldE1hcmtldEFzc2V0cwAFC2JBc3NldElkU3RyBBFsaXF1aWRhdGlvblByb2ZpdAkAZQIFCWFzc2V0MVVzZAkAawMFCWFzc2V0MFVzZAkAZQIFBlNjYWxlOAUHcGVuYWx0eQUGU2NhbGU4BAxzQXNzZXRDaGFuZ2UJAGsDBQphc3NldDBTb2xkBQdTY2FsZTE2BQVzUmF0ZQQMYkFzc2V0Q2hhbmdlCQBrAwkAawMFDGFzc2V0MUJvdWdodAUHU2NhbGUxNgUFYlJhdGUJAGUCBQZTY2FsZTgJAGsDBRFsaXF1aWRhdGlvblByb2ZpdAUGU2NhbGU4BQlhc3NldDFVc2QFBlNjYWxlOAMJAGYCBQphc3NldDBTb2xkBQthc3NldEFtb3VudAkAAgECI21vcmUgYXNzZXRzIGV4Y2hhbmdlZCB0aGFuIGV4cGVjdGVkAwkAZgIAAAURbGlxdWlkYXRpb25Qcm9maXQJAAIBAi9wcmljZSBpbXBhY3QgaXMgYmlnZ2VyIHRoYW4gbGlxdWlkYXRpb24gcGVuYWx0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyCQBlAgUQY3VycmVudFNQb3NpdGlvbgUMc0Fzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCBRBjdXJyZW50QlBvc2l0aW9uBQxiQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyBQxzQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBQxiQXNzZXRDaGFuZ2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtsaXF1aWRhdGVWMgUFZGVidWcHYWRkcmVzcwtzQXNzZXRJZFN0cgtiQXNzZXRJZFN0chBsaXF1aWRhdGVQZXJjZW50AwkBASEBCQEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEIBQFpBmNhbGxlcgkAAgECHGF2YWlsYWJsZSBmb3Igd2hpdGVsaXN0IG9ubHkDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQEDnVzZXJDb2xsYXRlcmFsCQESY2FsY1VzZXJDb2xsYXRlcmFsAQUHYWRkcmVzcwMJAAACBQ51c2VyQ29sbGF0ZXJhbAUOdXNlckNvbGxhdGVyYWwEEGN1cnJlbnRTUG9zaXRpb24JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyBBBjdXJyZW50QlBvc2l0aW9uCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgMJAAACCQDPCAIFB2F4bHlMUHMFC3NBc3NldElkU3RyBQR1bml0CQACAQIOd3JvbmcgbHAgYXNzZXQDCQBnAgAABRBjdXJyZW50QlBvc2l0aW9uCQACAQIgdXNlciBoYXMgbm8gYm9ycm93IGluIHRoaXMgdG9rZW4DAwkAZgIFDnVzZXJDb2xsYXRlcmFsAAAGCQAAAgUQY3VycmVudEJQb3NpdGlvbgAACQACAQIYdXNlciBjYW4ndCBiZSBsaXF1aWRhdGVkBAhiQXNzZXRJZAkBDWdldEFzc2V0Qnl0ZXMBBQtiQXNzZXRJZFN0cgQMbWFya2V0QXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQJYXNzZXQxTnVtCQEFdmFsdWUBCQDPCAIFDG1hcmtldEFzc2V0cwULYkFzc2V0SWRTdHIECWFzc2V0ME51bQkBBXZhbHVlAQkAzwgCBQxtYXJrZXRBc3NldHMFC3NBc3NldElkU3RyBAdwZW5hbHR5CQENcGFyc2VJbnRWYWx1ZQEJAQV2YWx1ZQEJAJEDAgkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfcGVuYWx0aWVzAgEsBQlhc3NldDFOdW0EDSR0MDI2NzA2MjY3NjgJAQ1nZXRBY3R1YWxSYXRlAgULYkFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDI2NzA2MjY3NjgCXzEEC3JhdGVzUmVzdWx0CAUNJHQwMjY3MDYyNjc2OAJfMgQHYkFtb3VudAkAawMFEGN1cnJlbnRCUG9zaXRpb24FBWJSYXRlBQdTY2FsZTE2BAdsQW1vdW50CQBrAwUHYkFtb3VudAUQbGlxdWlkYXRlUGVyY2VudABkBBJsQW1vdW50V2l0aFBlbmFsdHkJAGsDBQdsQW1vdW50CQBkAgUGU2NhbGU4BQdwZW5hbHR5BQZTY2FsZTgECGxiQW1vdW50CQBrAwUHbEFtb3VudAUHU2NhbGUxNgUFYlJhdGUEBXBvc0lkCQCRAwIJALUJAgUHYWRkcmVzcwIBXwABBAlhZGRyZXNzSWQJAJEDAgkAtQkCBQdhZGRyZXNzAgFfAAAECXNBbW91bnRMcAoAAUAJAP0HBAULYXhseUFkZHJlc3MCCWxpcXVpZGF0ZQkAzAgCBQlhZGRyZXNzSWQJAMwIAgUFcG9zSWQJAMwIAgUSbEFtb3VudFdpdGhQZW5hbHR5BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUJc0Ftb3VudExwBQlzQW1vdW50THAEB3NBbW91bnQJAGsDBQlzQW1vdW50THAFB1NjYWxlMTYICQCRAwIFC3JhdGVzUmVzdWx0CQBkAgkAaAIFCWFzc2V0ME51bQADAAEFdmFsdWUDBQVkZWJ1ZwkAAgECFWxpcXVpZGF0aW9uIHdpbGwgcGFzcwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFEmxBbW91bnRXaXRoUGVuYWx0eQUHbEFtb3VudAUIYkFzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRTUG9zaXRpb24FB3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRCUG9zaXRpb24FCGxiQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgUHc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIFCGxiQW1vdW50BQNuaWwFC3JhdGVzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWdldFVzZXJDb2xsYXRlcmFsBAVkZWJ1ZwdhZGRyZXNzDW1pbnVzQm9ycm93ZWQLYWZ0ZXJDaGFuZ2UEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAEBGx0dnMJALUJAgkBDHRyeUdldFN0cmluZwECCnNldHVwX2x0dnMCASwEA2x0cwkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIJc2V0dXBfbHRzAgEsBAVyYXRlcwgJAQ1nZXRBY3R1YWxSYXRlAgkAkQMCBQZhc3NldHMAAAIFc1JhdGUCXzIEDWNoYW5nZUhhbmRsZXIJALUJAgULYWZ0ZXJDaGFuZ2UCASwKAQFmAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQJAJADAQUGYXNzZXRzBQVhY2N1bQQMdXNlclN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfCQCRAwIFBmFzc2V0cwUEbmV4dAQMdXNlckJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfCQCRAwIFBmFzc2V0cwUEbmV4dAQTbmVlZFRva2VuQWNjb3VudGluZwMJAAACBQthZnRlckNoYW5nZQIAAwMJAQIhPQIFDHVzZXJCb3Jyb3dlZAAABgkBAiE9AgUMdXNlclN1cHBsaWVkAAAGBwYDBRNuZWVkVG9rZW5BY2NvdW50aW5nBAphc3NldFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBCQCRAwIFBmFzc2V0cwUEbmV4dAQKYXNzZXRQcmljZQkBDWdldFRva2VuUHJpY2UBCQCRAwIFBmFzc2V0cwUEbmV4dAkAZQIJAGQCBQVhY2N1bQkAawMJAGsDCQBrAwkAZAIFDHVzZXJTdXBwbGllZAMDAwkBAiE9AgULYWZ0ZXJDaGFuZ2UCAAkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgAACQCRAwIFBmFzc2V0cwUEbmV4dAcJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAQIIc3VwcGxpZWQHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUNY2hhbmdlSGFuZGxlcgACAAAICQCRAwIFBXJhdGVzCQBoAgUEbmV4dAADBXZhbHVlBQdTY2FsZTE2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbHR2cwUEbmV4dAUGU2NhbGU4CAUKYXNzZXRQcmljZQJfMQUKYXNzZXRTY2FsZQMFDW1pbnVzQm9ycm93ZWQJAGsDCQBrAwkAawMJAGQCBQx1c2VyQm9ycm93ZWQDAwMJAQIhPQIFC2FmdGVyQ2hhbmdlAgAJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAAkAkQMCBQZhc3NldHMFBG5leHQHCQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAECCGJvcnJvd2VkBwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDWNoYW5nZUhhbmRsZXIAAgAACAkAkQMCBQVyYXRlcwkAZAIJAGgCBQRuZXh0AAMAAQV2YWx1ZQUHU2NhbGUxNgUGU2NhbGU4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbHRzBQRuZXh0CAUKYXNzZXRQcmljZQJfMgUKYXNzZXRTY2FsZQAABQVhY2N1bQQGcmVzdWx0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwDBQVkZWJ1ZwkAAgEJAKQDAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBDGdldEFzc2V0RGVidAMFZGVidWcHYWRkcmVzcwphc3NldElkU3RyBAx1c2VyQm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEBHJhdGUICQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlAl8xBAZyZXN1bHQJAGsDBQx1c2VyQm9ycm93ZWQFBHJhdGUFB1NjYWxlMTYDBQVkZWJ1ZwkAAgEJAKQDAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBCWdldFByaWNlcwEFZGVidWcEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAKAQFmAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQJAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRQcmljZQkBFWdldFRva2VuUHJpY2VXaXRoUmlzawIJAJEDAgUGYXNzZXRzBQRuZXh0AAMJAKwCAgkArAICCQCsAgIJAKwCAgUFYWNjdW0JAKQDAQgFCmFzc2V0UHJpY2UCXzECASwJAKQDAQgFCmFzc2V0UHJpY2UCXzICAXwEBnJlc3VsdAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAwUFZGVidWcJAAIBBQZyZXN1bHQJAJQKAgUDbmlsBQZyZXN1bHQBaQEZY2FsY3VsYXRlVXRpbGl6YXRpb25SYXRpbwIKYXNzZXRJZFN0cgVkZWJ1ZwMFBWRlYnVnCQACAQkApAMBCQEFZ2V0VXIBBQphc3NldElkU3RyCQCUCgIFA25pbAkBBWdldFVyAQUKYXNzZXRJZFN0cgFpARNjYWxjdWxhdGVPdXRkYXRlZFVSAgphc3NldElkU3RyBWRlYnVnAwUFZGVidWcJAAIBCQCkAwEJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgkAlAoCBQNuaWwJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgFpARNjYWxjdWxhdGVUb2tlblJhdGVzAQVkZWJ1ZwoBAWYCBWFjY3VtCmFzc2V0SWRTdHIEBXJhdGVzCQEQdG9rZW5SYXRlc1JlY2FsYwEFCmFzc2V0SWRTdHIJAJQKAgkArAICCQCsAgIJAKwCAgkArAICCAUFYWNjdW0CXzEJAKQDAQgJAJEDAgUFcmF0ZXMAAQV2YWx1ZQIBfAkApAMBCAkAkQMCBQVyYXRlcwAABXZhbHVlAgEsCQDOCAIIBQVhY2N1bQJfMgUFcmF0ZXMECXBhcmFtZXRlcgoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgIABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAwUFZGVidWcJAAIBCAUJcGFyYW1ldGVyAl8xCQCUCgIIBQlwYXJhbWV0ZXICXzIIBQlwYXJhbWV0ZXICXzEBaQEXY2FsY3VsYXRlVG9rZW5zSW50ZXJlc3QBBWRlYnVnCgEBZgIFYWNjdW0KYXNzZXRJZFN0cgQEcmF0ZQkAawMJAQtnZXRJbnRlcmVzdAEFCmFzc2V0SWRTdHIFCWRheUJsb2NrcwUGU2NhbGU4CQCsAgIJAKwCAgUFYWNjdW0JAKQDAQUEcmF0ZQIBLAQJcGFyYW1ldGVyCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAMFBWRlYnVnCQACAQUJcGFyYW1ldGVyCQCUCgIFA25pbAUJcGFyYW1ldGVyAQJ0eAEGdmVyaWZ5AAMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAEg/XXg3oez6DuanjNsQ3pWRVALIo9nVy/USV6BgJV9XQEGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAAASCQpp9/Me/Ta3E4MktVjg3Z8DeDRSAIRX8xeT7HVuKEewYDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAAASCrbxa8v207ZHzhqtYYnaB9Vbwn7a+w8MVfVlHIR6e+DwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAEgKbckhk5myg/hITioMUdwF/LzLKDoZhzjA4uiFMJALjsHBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAEgg+9yjO0MVG+H/6tptnuhDhRCcXb/2yh0N7GUlEBy6A2E9HlU", "height": 4014169, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GizFyRV8cWRw9hGEGxn8NZE38yTdyqNCaejp6XLbA3wT Next: GXeptUFu1Z2v2tiQG2CLhDiLhBuNaMHpozfgmTtBhqUk Diff:
OldNewDifferences
799799
800800
801801 @Callable(aR)
802-func liquidateV2 (bB,i,aT,aU) = if (!(h(aR.caller)))
802+func liquidateV2 (bB,i,aT,aU,cl) = if (!(h(aR.caller)))
803803 then throw("available for whitelist only")
804804 else if (!(G("setup_active")))
805805 then throw("market is stopped")
819819 then throw("user can't be liquidated")
820820 else {
821821 let ba = L(aU)
822- let cl = N()
823- let cm = value(indexOf(cl, aU))
824- let bz = parseIntValue(value(split(H("setup_penalties"), ",")[cm]))
825- let cn = ad(aU, "bRate")
826- let aL = cn._1
827- let bO = cn._2
822+ let cm = N()
823+ let cn = value(indexOf(cm, aU))
824+ let co = value(indexOf(cm, aT))
825+ let bz = parseIntValue(value(split(H("setup_penalties"), ",")[cn]))
826+ let cp = ad(aU, "bRate")
827+ let aL = cp._1
828+ let bO = cp._2
828829 let aV = fraction(bU, aL, p)
829- let co = fraction(aV, 25, 100)
830- let cp = fraction(co, (n + bz), n)
831- let cq = fraction(co, p, aL)
830+ let cq = fraction(aV, cl, 100)
831+ let cr = fraction(cq, (n + bz), n)
832+ let cs = fraction(cq, p, aL)
832833 let bV = split(i, "_")[1]
833834 let bW = split(i, "_")[0]
834- let bc = {
835- let ap = reentrantInvoke(a, "liquidate", [bW, bV, cp], nil)
835+ let ct = {
836+ let ap = reentrantInvoke(a, "liquidate", [bW, bV, cr], nil)
836837 if ($isInstanceOf(ap, "Int"))
837838 then ap
838839 else throw(($getType(ap) + " couldn't be cast to Int"))
839840 }
840- if ((bc == bc))
841- then if (bB)
842- then throw("liquidation will pass")
843- else ([ScriptTransfer(aR.caller, (cp - co), ba), IntegerEntry(((i + "_supplied_") + aT), (bS - bc)), IntegerEntry(((i + "_borrowed_") + aU), (bU - cq)), IntegerEntry(("total_supplied_" + aT), (D(("total_supplied_" + aT)) - bc)), IntegerEntry(("total_borrowed_" + aU), (D(("total_borrowed_" + aU)) - cq))] ++ bO)
841+ if ((ct == ct))
842+ then {
843+ let bc = fraction(ct, p, bO[((co * 3) + 1)].value)
844+ if (bB)
845+ then throw("liquidation will pass")
846+ else ([ScriptTransfer(aR.caller, (cr - cq), ba), IntegerEntry(((i + "_supplied_") + aT), (bS - bc)), IntegerEntry(((i + "_borrowed_") + aU), (bU - cs)), IntegerEntry(("total_supplied_" + aT), (D(("total_supplied_" + aT)) - bc)), IntegerEntry(("total_borrowed_" + aU), (D(("total_borrowed_" + aU)) - cs))] ++ bO)
847+ }
844848 else throw("Strict value is not equal to itself.")
845849 }
846850 }
850854
851855
852856 @Callable(aR)
853-func getUserCollateral (bB,i,cr,cs) = {
857+func getUserCollateral (bB,i,cu,cv) = {
854858 let bC = N()
855859 let bu = split(H("setup_ltvs"), ",")
856860 let bv = split(H("setup_lts"), ",")
857861 let ai = ad(bC[0], "sRate")._2
858- let ct = split(cs, ",")
862+ let cw = split(cv, ",")
859863 func t (u,v) = if ((v >= size(bC)))
860864 then u
861865 else {
862866 let bp = D(((i + "_supplied_") + bC[v]))
863- let cu = D(((i + "_borrowed_") + bC[v]))
864- let cv = if ((cs == ""))
865- then if (if ((cu != 0))
867+ let cx = D(((i + "_borrowed_") + bC[v]))
868+ let cy = if ((cv == ""))
869+ then if (if ((cx != 0))
866870 then true
867871 else (bp != 0))
868872 then true
869873 else false
870874 else true
871- if (cv)
875+ if (cy)
872876 then {
873877 let aG = ar(bC[v])
874878 let aE = aq(bC[v])
875- ((u + fraction(fraction(fraction((bp + (if (if (if ((cs != ""))
876- then (ct[0] == bC[v])
879+ ((u + fraction(fraction(fraction((bp + (if (if (if ((cv != ""))
880+ then (cw[0] == bC[v])
877881 else false)
878- then (ct[1] == "supplied")
882+ then (cw[1] == "supplied")
879883 else false)
880- then parseIntValue(ct[2])
881- else 0)), ai[(v * 3)].value, p), parseIntValue(bu[v]), n), aE._1, aG)) - (if (cr)
882- then fraction(fraction(fraction((cu + (if (if (if ((cs != ""))
883- then (ct[0] == bC[v])
884+ then parseIntValue(cw[2])
885+ else 0)), ai[(v * 3)].value, p), parseIntValue(bu[v]), n), aE._1, aG)) - (if (cu)
886+ then fraction(fraction(fraction((cx + (if (if (if ((cv != ""))
887+ then (cw[0] == bC[v])
884888 else false)
885- then (ct[1] == "borrowed")
889+ then (cw[1] == "borrowed")
886890 else false)
887- then parseIntValue(ct[2])
891+ then parseIntValue(cw[2])
888892 else 0)), ai[((v * 3) + 1)].value, p), n, parseIntValue(bv[v])), aE._2, aG)
889893 else 0))
890894 }
891895 else u
892896 }
893897
894- let cw = {
898+ let cz = {
895899 let w = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
896900 let x = size(w)
897901 let y = 0
906910 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
907911 }
908912 if (bB)
909- then throw(toString(cw))
910- else $Tuple2(nil, cw)
913+ then throw(toString(cz))
914+ else $Tuple2(nil, cz)
911915 }
912916
913917
914918
915919 @Callable(aR)
916920 func getAssetDebt (bB,i,l) = {
917- let cu = D(((i + "_borrowed_") + l))
921+ let cx = D(((i + "_borrowed_") + l))
918922 let aG = ar(l)
919923 let V = ad(l, "bRate")._1
920- let cw = fraction(cu, V, p)
924+ let cz = fraction(cx, V, p)
921925 if (bB)
922- then throw(toString(cw))
923- else $Tuple2(nil, cw)
926+ then throw(toString(cz))
927+ else $Tuple2(nil, cz)
924928 }
925929
926930
935939 ((((u + toString(aE._1)) + ",") + toString(aE._2)) + "|")
936940 }
937941
938- let cw = {
942+ let cz = {
939943 let w = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
940944 let x = size(w)
941945 let y = ""
950954 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
951955 }
952956 if (bB)
953- then throw(cw)
954- else $Tuple2(nil, cw)
957+ then throw(cz)
958+ else $Tuple2(nil, cz)
955959 }
956960
957961
10251029 }
10261030
10271031
1028-@Verifier(cx)
1029-func cy () = if (if (if (sigVerify(cx.bodyBytes, cx.proofs[0], base58'J4QQBsh6FGgZbijQPMDZ7GtNALx2N15K3eHvGhjq43Lt'))
1032+@Verifier(cA)
1033+func cB () = if (if (if (sigVerify(cA.bodyBytes, cA.proofs[0], base58'J4QQBsh6FGgZbijQPMDZ7GtNALx2N15K3eHvGhjq43Lt'))
10301034 then true
1031- else sigVerify(cx.bodyBytes, cx.proofs[0], base58'Ajf56x532JLzVoourPv9FW75kYsvScNxztPnt1enhNkS'))
1035+ else sigVerify(cA.bodyBytes, cA.proofs[0], base58'Ajf56x532JLzVoourPv9FW75kYsvScNxztPnt1enhNkS'))
10321036 then true
1033- else if (sigVerify(cx.bodyBytes, cx.proofs[0], base58'CYCxuKusNeomQkH9wbcEd4rRP1mDYMc7bw8pr82Agi4N'))
1034- then sigVerify(cx.bodyBytes, cx.proofs[0], base58'3oqguA2LUTZFFjJCJ62UybbXFTLwv88tSJ3oMrNSGhiA')
1037+ else if (sigVerify(cA.bodyBytes, cA.proofs[0], base58'CYCxuKusNeomQkH9wbcEd4rRP1mDYMc7bw8pr82Agi4N'))
1038+ then sigVerify(cA.bodyBytes, cA.proofs[0], base58'3oqguA2LUTZFFjJCJ62UybbXFTLwv88tSJ3oMrNSGhiA')
10351039 else false)
10361040 then true
1037- else sigVerify(cx.bodyBytes, cx.proofs[0], base58'9t2BGHP6EddYu5xvArqDkhHPGbf8ZiYUaWgFcEPtRZhE')
1041+ else sigVerify(cA.bodyBytes, cA.proofs[0], base58'9t2BGHP6EddYu5xvArqDkhHPGbf8ZiYUaWgFcEPtRZhE')
10381042
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = Address(base58'3PLsYkBw7taejV1J3qWPCN2yeyVRu31d5HW')
55
66 let b = ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", "Btw3G1j4wQgdp49PTxaFkNvn75dQtqGDM7ejQppHnWC1", "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe", "F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", "4CQ5CPGLXLbWBUs2JBjKUaRqF49CmKHkwzvPgSvQpAQV", "6iMB6LKSrgv9waEvEnN6Ydyx7dfxPnGcTw8318WVm5bR"]
77
88 let c = Address(base58'3P37f8Y3rNpKzSkHNVZMAStXdpmNBgftHN9')
99
1010 let d = Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe')
1111
1212 let e = 20
1313
1414 let f = Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
1515
1616 let g = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
1717
1818 func h (i) = !(if (if (if ((i != Address(base58'3PFHNdEPu71QwBAnc2HZPcrbxoseNfUvHEA')))
1919 then (i != Address(base58'3PCqdm1mAoQqR46oZotFanmqb5CLUvrKEo2'))
2020 else false)
2121 then (i != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'))
2222 else false)
2323 then (i != Address(base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3'))
2424 else false)
2525
2626
2727 func j (i) = !(if ((i != d))
2828 then (i != a)
2929 else false)
3030
3131
3232 func k (l) = {
3333 let m = l
3434 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == m))
3535 then $Tuple4(2000000, 25000000, 80000000, 100000000)
3636 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == m))
3737 then $Tuple4(2000000, 25000000, 80000000, 100000000)
3838 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == m))
3939 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4040 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == m))
4141 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4242 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == m))
4343 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4444 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == m))
4545 then $Tuple4(2000000, 40000000, 80000000, 150000000)
4646 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == m))
4747 then $Tuple4(0, 20000000, 80000000, 40000000)
4848 else if (("WAVES" == m))
4949 then $Tuple4(2000000, 30000000, 80000000, 50000000)
5050 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == m))
5151 then $Tuple4(0, 20000000, 80000000, 40000000)
5252 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == m))
5353 then $Tuple4(0, 20000000, 80000000, 100000000)
5454 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == m))
5555 then $Tuple4(0, 30000000, 80000000, 40000000)
5656 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == m))
5757 then $Tuple4(0, 25000000, 80000000, 40000000)
5858 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == m))
5959 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6060 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == m))
6161 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6262 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == m))
6363 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6464 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == m))
6565 then $Tuple4(2000000, 40000000, 80000000, 100000000)
6666 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == m))
6767 then $Tuple4(2000000, 30000000, 80000000, 80000000)
6868 else $Tuple4(0, 20000000, 80000000, 80000000)
6969 }
7070
7171
7272 let n = 100000000
7373
7474 let o = 10000000000
7575
7676 let p = (n * n)
7777
7878 let q = 1440
7979
8080 func r (s) = {
8181 func t (u,v) = ((u + toString(v)) + ",")
8282
8383 let w = s
8484 let x = size(w)
8585 let y = ""
8686 func z (A,B) = if ((B >= x))
8787 then A
8888 else t(A, w[B])
8989
9090 func C (A,B) = if ((B >= x))
9191 then A
9292 else throw("List size exceeds 12")
9393
9494 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
9595 }
9696
9797
9898 func D (E) = {
9999 let m = getInteger(this, E)
100100 if ($isInstanceOf(m, "Int"))
101101 then {
102102 let F = m
103103 F
104104 }
105105 else 0
106106 }
107107
108108
109109 func G (E) = {
110110 let m = getBoolean(this, E)
111111 if ($isInstanceOf(m, "Boolean"))
112112 then {
113113 let F = m
114114 F
115115 }
116116 else false
117117 }
118118
119119
120120 func H (E) = {
121121 let m = getString(this, E)
122122 if ($isInstanceOf(m, "String"))
123123 then {
124124 let F = m
125125 F
126126 }
127127 else ""
128128 }
129129
130130
131131 func I (E) = {
132132 let m = getBinary(this, E)
133133 if ($isInstanceOf(m, "ByteVector"))
134134 then {
135135 let F = m
136136 F
137137 }
138138 else base58''
139139 }
140140
141141
142142 func J (K) = {
143143 let m = K
144144 if ($isInstanceOf(m, "ByteVector"))
145145 then {
146146 let F = m
147147 toBase58String(F)
148148 }
149149 else "WAVES"
150150 }
151151
152152
153153 func L (l) = if ((l == "WAVES"))
154154 then unit
155155 else fromBase58String(l)
156156
157157
158158 func M (l) = if ((l == "WAVES"))
159159 then wavesBalance(this).available
160160 else assetBalance(this, fromBase58String(l))
161161
162162
163163 func N () = split(H("setup_tokens"), ",")
164164
165165
166166 func O () = {
167167 let P = H("setup_maxsupply")
168168 if ((P == ""))
169169 then [-1, -1, -1, -1, -1, -1, -1]
170170 else split(P, ",")
171171 }
172172
173173
174174 func Q (l) = {
175175 let R = fraction(D(("total_supplied_" + l)), D((l + "_sRate")), p)
176176 if ((R == 0))
177177 then 0
178178 else fraction(n, fraction(D(("total_borrowed_" + l)), D((l + "_bRate")), p), R)
179179 }
180180
181181
182182 func S (l) = {
183183 let T = Q(l)
184184 let U = k(l)
185185 let V = (U._1 + (if ((U._3 >= T))
186186 then fraction(T, U._2, U._3)
187187 else (U._2 + fraction((T - U._3), U._4, (100000000 - U._3)))))
188188 max([fraction(V, n, (q * 365)), 1])
189189 }
190190
191191
192192 func W (l) = if ((indexOf(b, l) != unit))
193193 then [IntegerEntry((l + "_sRate"), p), IntegerEntry((l + "_bRate"), p), IntegerEntry("lastRateHeight", height)]
194194 else {
195195 let X = S(l)
196196 let T = Q(l)
197197 let Y = D("lastRateHeight")
198198 let Z = max([D((l + "_bRate")), p])
199199 let aa = (Z + ((height - Y) * X))
200200 let ab = max([D((l + "_sRate")), p])
201201 let ac = (ab + ((((height - Y) * fraction(X, T, n)) * (100 - e)) / 100))
202202 [IntegerEntry((l + "_sRate"), ac), IntegerEntry((l + "_bRate"), aa), IntegerEntry("lastRateHeight", height)]
203203 }
204204
205205
206206 func ad (l,ae) = {
207207 func t (u,af) = {
208208 let ag = W(af)
209209 $Tuple2(if ((af != l))
210210 then u._1
211211 else if ((ae == "sRate"))
212212 then ag[0].value
213213 else ag[1].value, (u._2 ++ ag))
214214 }
215215
216216 let w = N()
217217 let x = size(w)
218218 let y = $Tuple2(0, nil)
219219 func z (A,B) = if ((B >= x))
220220 then A
221221 else t(A, w[B])
222222
223223 func C (A,B) = if ((B >= x))
224224 then A
225225 else throw("List size exceeds 12")
226226
227227 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
228228 }
229229
230230
231231 func ah (l) = {
232232 let ai = W(l)
233233 let R = fraction(D(("total_supplied_" + l)), ai[0].value, p)
234234 fraction(n, fraction(D(("total_borrowed_" + l)), ai[1].value, p), R)
235235 }
236236
237237
238238 func aj () = {
239239 func t (u,af) = (u ++ W(af))
240240
241241 let w = N()
242242 let x = size(w)
243243 let y = nil
244244 func z (A,B) = if ((B >= x))
245245 then A
246246 else t(A, w[B])
247247
248248 func C (A,B) = if ((B >= x))
249249 then A
250250 else throw("List size exceeds 12")
251251
252252 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
253253 }
254254
255255
256256 func ak (l,al) = if (if ((l == "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"))
257257 then true
258258 else (l == "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW"))
259259 then $Tuple2(1000000, 1000000)
260260 else {
261261 let am = getIntegerValue(Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t'), (l + "_twap5B"))
262262 let an = getIntegerValue(Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t'), (l + "_riskLevel"))
263263 if ((indexOf(b, l) != unit))
264264 then {
265265 let ao = {
266266 let ap = reentrantInvoke(a, "getShareAssetPriceREADONLY", [l], nil)
267267 if ($isInstanceOf(ap, "Int"))
268268 then ap
269269 else throw(($getType(ap) + " couldn't be cast to Int"))
270270 }
271271 if ((ao == ao))
272272 then $Tuple2(ao, ao)
273273 else throw("Strict value is not equal to itself.")
274274 }
275275 else if ((al >= an))
276276 then $Tuple2(am, am)
277277 else throw((("oracle prices don't match: " + toString(am)) + " is the price, but risk is too high"))
278278 }
279279
280280
281281 func aq (l) = ak(l, 1)
282282
283283
284284 func ar (l) = {
285285 let as = if ((l == "WAVES"))
286286 then 8
287287 else value(assetInfo(fromBase58String(l))).decimals
288288 pow(10, 0, as, 0, 0, DOWN)
289289 }
290290
291291
292292 func at (i) = {
293293 let au = invoke(this, "getUserCollateral", [false, i, true, ""], nil)
294294 if ((au == au))
295295 then {
296296 let av = {
297297 let m = au
298298 if ($isInstanceOf(m, "Int"))
299299 then {
300300 let aw = m
301301 aw
302302 }
303303 else throw("issue while doing in-dapp invocation")
304304 }
305305 if ((av == av))
306306 then av
307307 else throw("Strict value is not equal to itself.")
308308 }
309309 else throw("Strict value is not equal to itself.")
310310 }
311311
312312
313313 func ax (l,ay,i) = if (!(G("setup_active")))
314314 then throw("market is stopped")
315315 else {
316316 let az = ad(l, "sRate")
317317 let aA = az._1
318318 let aB = az._2
319319 let aC = fraction(ay, p, aA, DOWN)
320320 let aD = {
321321 let m = getString(("setup_maxSupply_" + l))
322322 if ($isInstanceOf(m, "String"))
323323 then {
324324 let aw = m
325325 parseIntValue(aw)
326326 }
327327 else 0
328328 }
329329 let aE = aq(l)
330330 let aF = (D(((i + "_supplied_") + l)) + aC)
331331 let V = ad(l, "sRate")._1
332332 let aG = ar(l)
333333 let aH = fraction(fraction(aF, V, p), aE._1, aG)
334334 if ((indexOf(H("setup_tokens"), l) == unit))
335335 then throw("this asset is not supported by the market")
336336 else if (if ((aD != 0))
337337 then (aH > aD)
338338 else false)
339339 then throw("max total supply for this token reached in the pool")
340340 else $Tuple2(([IntegerEntry(((i + "_supplied_") + l), aF), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) + aC))] ++ aB), ay)
341341 }
342342
343343
344344 func aI (l,ay,i,aJ) = {
345345 let aK = ad(l, "bRate")
346346 let aL = aK._1
347347 let aB = aK._2
348348 let aC = fraction(ay, p, aL, CEILING)
349349 let aM = invoke(this, "getUserCollateral", [false, i, true, ((l + ",borrowed,") + toString(aC))], nil)
350350 if ((aM == aM))
351351 then {
352352 let aN = {
353353 let m = aM
354354 if ($isInstanceOf(m, "Int"))
355355 then {
356356 let aw = m
357357 aw
358358 }
359359 else throw("can't get user collateral value")
360360 }
361361 if (!(G("setup_active")))
362362 then throw("market is stopped")
363363 else if ((indexOf(b, l) != unit))
364364 then throw("this token cannot be borrowed")
365365 else if (if (!(aJ))
366366 then (0 > aN)
367367 else false)
368368 then throw("you have to supply more to borrow")
369369 else {
370370 let aO = D(("total_supplied_" + l))
371371 let aP = D(("total_borrowed_" + l))
372372 let aQ = D(((i + "_borrowed_") + l))
373373 if ((aC > (aO - aP)))
374374 then throw("this amount is not available")
375375 else $Tuple2(([IntegerEntry(((i + "_borrowed_") + l), (aQ + aC)), IntegerEntry(("total_borrowed_" + l), (aP + aC))] ++ [IntegerEntry((l + "_bRate"), aL)]), ay)
376376 }
377377 }
378378 else throw("Strict value is not equal to itself.")
379379 }
380380
381381
382382 @Callable(aR)
383383 func flashPosition (aS,aT,aU,aV,aW,aX,aY) = if ((aR.caller != a))
384384 then throw("available only for Axly protocol")
385385 else {
386386 let aZ = aI(aU, aV, aS, true)
387387 let ba = L(aU)
388388 let bb = reentrantInvoke(addressFromStringValue(aW), aX, split(aY, ","), [AttachedPayment(ba, aV)])
389389 if ((bb == bb))
390390 then {
391391 let bc = {
392392 let ap = bb
393393 if ($isInstanceOf(ap, "Int"))
394394 then ap
395395 else throw(($getType(ap) + " couldn't be cast to Int"))
396396 }
397397 if ((bc == bc))
398398 then {
399399 let bd = ax(aT, bc, aS)
400400 let aN = {
401401 let ap = invoke(this, "getUserCollateral", [false, aS, true, ((aT + ",supplied,") + toString(bc))], nil)
402402 if ($isInstanceOf(ap, "Int"))
403403 then ap
404404 else throw(($getType(ap) + " couldn't be cast to Int"))
405405 }
406406 if ((aN == aN))
407407 then {
408408 let be = {
409409 let ap = invoke(this, "getUserCollateral", [false, aS, true, ((aU + ",borrowed,") + toString(aV))], nil)
410410 if ($isInstanceOf(ap, "Int"))
411411 then ap
412412 else throw(($getType(ap) + " couldn't be cast to Int"))
413413 }
414414 if ((be == be))
415415 then if ((be > aN))
416416 then throw("not enough collateral provided")
417417 else (aZ._1 ++ bd._1)
418418 else throw("Strict value is not equal to itself.")
419419 }
420420 else throw("Strict value is not equal to itself.")
421421 }
422422 else throw("Strict value is not equal to itself.")
423423 }
424424 else throw("Strict value is not equal to itself.")
425425 }
426426
427427
428428
429429 @Callable(aR)
430430 func supply () = if (if ((size(aR.payments) != 1))
431431 then true
432432 else (aR.payments[0].amount == 0))
433433 then throw("1 payment has to be attached")
434434 else {
435435 let l = J(aR.payments[0].assetId)
436436 let ay = aR.payments[0].amount
437437 let bf = invoke(c, "lendAction", [toString(aR.caller), l], nil)
438438 if ((bf == bf))
439439 then ax(l, ay, toString(aR.caller))
440440 else throw("Strict value is not equal to itself.")
441441 }
442442
443443
444444
445445 @Callable(aR)
446446 func withdraw (l,ay) = {
447447 let bg = ad(l, "sRate")
448448 let aA = bg._1
449449 let aB = bg._2
450450 let aC = fraction(ay, p, aA, CEILING)
451451 let i = toString(aR.caller)
452452 let aO = D(("total_supplied_" + l))
453453 let aP = D(("total_borrowed_" + l))
454454 let bh = D(((i + "_supplied_") + l))
455455 let aQ = D(((i + "_borrowed_") + l))
456456 let bf = invoke(c, "lendAction", [toString(aR.caller), l], nil)
457457 if ((bf == bf))
458458 then {
459459 let aM = invoke(this, "getUserCollateral", [false, i, true, ((l + ",supplied,") + toString(-(aC)))], nil)
460460 if ((aM == aM))
461461 then {
462462 let aN = {
463463 let m = aM
464464 if ($isInstanceOf(m, "Int"))
465465 then {
466466 let aw = m
467467 aw
468468 }
469469 else throw("can't get user collateral value")
470470 }
471471 if (!(G("setup_active")))
472472 then throw("market is stopped")
473473 else if ((0 > aN))
474474 then throw("you dont have enough collateral for this operation")
475475 else if ((aC > (aO - aP)))
476476 then throw("this amount is not available on the market")
477477 else if ((aC > (bh - aQ)))
478478 then throw("this amount is not available for this user")
479479 else ([IntegerEntry(((i + "_supplied_") + l), (D(((i + "_supplied_") + l)) - aC)), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) - aC)), ScriptTransfer(aR.caller, ay, L(l))] ++ aB)
480480 }
481481 else throw("Strict value is not equal to itself.")
482482 }
483483 else throw("Strict value is not equal to itself.")
484484 }
485485
486486
487487
488488 @Callable(aR)
489489 func repay () = if (!(G("setup_active")))
490490 then throw("market is stopped")
491491 else if (if ((size(aR.payments) != 1))
492492 then true
493493 else (aR.payments[0].amount == 0))
494494 then throw("1 payment has to be attached")
495495 else {
496496 let l = J(aR.payments[0].assetId)
497497 let ay = aR.payments[0].amount
498498 let bi = ad(l, "bRate")
499499 let aL = bi._1
500500 let aB = bi._2
501501 let aC = fraction(ay, p, aL, CEILING)
502502 let i = toString(aR.caller)
503503 let aO = D(("total_supplied_" + l))
504504 let aP = D(("total_borrowed_" + l))
505505 let aQ = D(((i + "_borrowed_") + l))
506506 let bj = (aQ - aC)
507507 let bk = if ((bj >= 0))
508508 then aC
509509 else aQ
510510 if ((indexOf(H("setup_tokens"), l) == unit))
511511 then throw("this asset is not supported by the market")
512512 else (([IntegerEntry(((i + "_borrowed_") + l), (aQ - bk)), IntegerEntry(("total_borrowed_" + l), (aP - bk))] ++ aB) ++ (if ((bj >= 0))
513513 then nil
514514 else [ScriptTransfer(aR.caller, -(bj), aR.payments[0].assetId)]))
515515 }
516516
517517
518518
519519 @Callable(aR)
520520 func repayFor (i) = if (!(G("setup_active")))
521521 then throw("market is stopped")
522522 else if (!(j(aR.caller)))
523523 then throw("available only for whitelist")
524524 else if ((i == "global"))
525525 then throw("you can't repay for everyone :_)")
526526 else if (if ((size(aR.payments) != 1))
527527 then true
528528 else (aR.payments[0].amount == 0))
529529 then throw("1 payment has to be attached")
530530 else {
531531 let l = J(aR.payments[0].assetId)
532532 let ay = aR.payments[0].amount
533533 let bl = ad(l, "bRate")
534534 let aL = bl._1
535535 let aB = bl._2
536536 let aC = fraction(ay, p, aL, CEILING)
537537 let aO = D(("total_supplied_" + l))
538538 let aP = D(("total_borrowed_" + l))
539539 let aQ = D(((i + "_borrowed_") + l))
540540 let bj = (aQ - aC)
541541 let bk = if ((bj >= 0))
542542 then aC
543543 else aQ
544544 let bm = if ((bj >= 0))
545545 then nil
546546 else [ScriptTransfer(aR.caller, -(bj), aR.payments[0].assetId)]
547547 let bn = if ((aR.caller == a))
548548 then {
549549 func bo (u,l) = {
550550 let bp = D(((i + "_borrowed_") + l))
551551 if ((bp > 0))
552552 then (u ++ [IntegerEntry(((i + "_supplied_") + l), 0), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) - bp))])
553553 else u
554554 }
555555
556556 let w = b
557557 let x = size(w)
558558 let y = nil
559559 func z (A,B) = if ((B >= x))
560560 then A
561561 else bo(A, w[B])
562562
563563 func C (A,B) = if ((B >= x))
564564 then A
565565 else throw("List size exceeds 8")
566566
567567 C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
568568 }
569569 else nil
570570 if ((indexOf(H("setup_tokens"), l) == unit))
571571 then throw("this asset is not supported by the market")
572572 else ((([IntegerEntry(((i + "_borrowed_") + l), (aQ - bk)), IntegerEntry(("total_borrowed_" + l), (aP - bk))] ++ aB) ++ bm) ++ bn)
573573 }
574574
575575
576576
577577 @Callable(aR)
578578 func addInterestEXTERNAL () = {
579579 let aC = fraction(aR.payments[0].amount, 80, 100)
580580 let K = aR.payments[0].assetId
581581 let l = J(K)
582582 let bq = D(("autostake_lastEarned_" + l))
583583 let br = D(("autostake_lastBlock_" + l))
584584 let bs = if (if ((br == height))
585585 then true
586586 else (aC == 0))
587587 then nil
588588 else [IntegerEntry(("autostake_preLastEarned_" + l), bq), IntegerEntry(("autostake_preLastBlock_" + l), br), IntegerEntry(("autostake_lastEarned_" + l), (bq + aC)), IntegerEntry(("autostake_lastBlock_" + l), height)]
589589 (bs ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, aC, D(("total_supplied_" + l)))))])
590590 }
591591
592592
593593
594594 @Callable(aR)
595595 func preInit (bt,bu,bv,bw) = {
596596 func t (u,af) = (u ++ [IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)])
597597
598598 if ((aR.caller != this))
599599 then throw("admin only")
600600 else {
601601 let ai = {
602602 let w = split(bt, ",")
603603 let x = size(w)
604604 let y = nil
605605 func z (A,B) = if ((B >= x))
606606 then A
607607 else t(A, w[B])
608608
609609 func C (A,B) = if ((B >= x))
610610 then A
611611 else throw("List size exceeds 12")
612612
613613 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
614614 }
615615 ([StringEntry("setup_tokens", bt), StringEntry("setup_ltvs", bu), StringEntry("setup_lts", bv), StringEntry("setup_penalties", bw), BooleanEntry("setup_active", true)] ++ ai)
616616 }
617617 }
618618
619619
620620
621621 @Callable(aR)
622622 func initNewToken (af,bx,by,bz) = if (if ((aR.caller != this))
623623 then (aR.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
624624 else false)
625625 then throw("admin only")
626626 else [StringEntry("setup_tokens", ((H("setup_tokens") + ",") + af)), StringEntry("setup_ltvs", ((H("setup_ltvs") + ",") + bx)), StringEntry("setup_lts", ((H("setup_lts") + ",") + by)), StringEntry("setup_penalties", ((H("setup_penalties") + ",") + bz)), IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)]
627627
628628
629629
630630 @Callable(aR)
631631 func updateParameter (E,bA) = if (if ((aR.caller != this))
632632 then (aR.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
633633 else false)
634634 then throw("admin only")
635635 else [IntegerEntry(E, parseIntValue(bA))]
636636
637637
638638
639639 @Callable(aR)
640640 func updateString (E,bA) = if (if ((aR.caller != this))
641641 then (aR.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
642642 else false)
643643 then throw("admin only")
644644 else [StringEntry(E, bA)]
645645
646646
647647
648648 @Callable(aR)
649649 func claimToReserveFund (bB) = {
650650 let bC = N()
651651 let ai = ad(bC[0], "sRate")._2
652652 let s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
653653 func t (u,bD) = if ((bD >= size(bC)))
654654 then u
655655 else {
656656 let l = bC[bD]
657657 let bE = H(("autostake_amount_" + l))
658658 let aC = ((((M(l) + D(("autostake_amount_" + l))) + (if ((bE != ""))
659659 then parseIntValue(bE)
660660 else 0)) + fraction(D(("total_borrowed_" + l)), ai[((bD * 3) + 1)].value, p)) - fraction(D(("total_supplied_" + l)), ai[(bD * 3)].value, p))
661661 let bF = if ((D(("autostake_amount_" + l)) > 0))
662662 then invoke(this, "unstakeToken", [l, max([aC, 0])], nil)
663663 else 0
664664 if ((bF == bF))
665665 then (u ++ [aC])
666666 else throw("Strict value is not equal to itself.")
667667 }
668668
669669 let bG = {
670670 let w = s
671671 let x = size(w)
672672 let y = nil
673673 func z (A,B) = if ((B >= x))
674674 then A
675675 else t(A, w[B])
676676
677677 func C (A,B) = if ((B >= x))
678678 then A
679679 else throw("List size exceeds 12")
680680
681681 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
682682 }
683683 func bH (u,bD) = if ((bD >= size(bC)))
684684 then u
685685 else {
686686 let l = bC[bD]
687687 (u ++ [ScriptTransfer(d, max([bG[bD], 0]), L(l))])
688688 }
689689
690690 if (bB)
691691 then throw(r(bG))
692692 else $Tuple2({
693693 let w = s
694694 let x = size(w)
695695 let y = nil
696696 func bI (A,B) = if ((B >= x))
697697 then A
698698 else bH(A, w[B])
699699
700700 func bJ (A,B) = if ((B >= x))
701701 then A
702702 else throw("List size exceeds 12")
703703
704704 bJ(bI(bI(bI(bI(bI(bI(bI(bI(bI(bI(bI(bI(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
705705 }, bG)
706706 }
707707
708708
709709
710710 @Callable(aR)
711711 func shutdown (bK) = if ((indexOf(g, aR.caller.bytes) == unit))
712712 then throw("user not in a whitelist")
713713 else [BooleanEntry("setup_active", !(bK))]
714714
715715
716716
717717 @Callable(aR)
718718 func liquidate (bB,i,ay,aT,aU,bL) = if (!(h(aR.caller)))
719719 then throw("available for whitelist only")
720720 else if (!(G("setup_active")))
721721 then throw("market is stopped")
722722 else {
723723 let bM = at(i)
724724 if ((bM == bM))
725725 then {
726726 let bN = ad(aT, "sRate")
727727 let aA = bN._1
728728 let bO = bN._2
729729 let bP = ad(aU, "bRate")
730730 let aL = bP._1
731731 let bQ = bP._2
732732 let bR = fraction(ay, p, aA)
733733 let bS = D(((i + "_supplied_") + aT))
734734 let bT = D(((i + "_borrowed_") + aU))
735735 let bU = if ((bT > 0))
736736 then bT
737737 else throw("user has no borrow in this token")
738738 if ((bM > 0))
739739 then throw("user can't be liquidated")
740740 else if ((bR > bS))
741741 then throw("position to liquidate is bigger than user's supply")
742742 else {
743743 let bF = if ((indexOf(b, aT) != unit))
744744 then {
745745 let bV = split(i, "_")[1]
746746 let bW = split(i, "_")[0]
747747 reentrantInvoke(a, "liquidate", [bW, bV, bR], nil)
748748 }
749749 else nil
750750 if ((bF == bF))
751751 then {
752752 let bX = M(aT)
753753 if ((bX == bX))
754754 then {
755755 let bY = M(aU)
756756 if ((bY == bY))
757757 then {
758758 let bZ = invoke(f, "swap", [bL, 0], [AttachedPayment(L(aT), ay)])
759759 if ((bZ == bZ))
760760 then {
761761 let ca = (bX - M(aT))
762762 if ((ca == ca))
763763 then {
764764 let cb = (M(aU) - bY)
765765 if ((cb == cb))
766766 then {
767767 let cc = aq(aT)._1
768768 let cd = ar(aT)
769769 let ce = fraction(ca, cc, cd)
770770 let cf = aq(aU)._2
771771 let cg = ar(aU)
772772 let ch = fraction(cb, cf, cg)
773773 let bz = parseIntValue(split(H("setup_penalties"), ",")[value(indexOf(N(), aU))])
774774 let ci = (ch - fraction(ce, (n - bz), n))
775775 let cj = fraction(ca, p, aA)
776776 let ck = fraction(fraction(cb, p, aL), (n - fraction(ci, n, ch)), n)
777777 if ((ca > ay))
778778 then throw("more assets exchanged than expected")
779779 else if ((0 > ci))
780780 then throw("price impact is bigger than liquidation penalty")
781781 else [IntegerEntry(((i + "_supplied_") + aT), (bS - cj)), IntegerEntry(((i + "_borrowed_") + aU), (bU - ck)), IntegerEntry(("total_supplied_" + aT), (D(("total_supplied_" + aT)) - cj)), IntegerEntry(("total_borrowed_" + aU), (D(("total_borrowed_" + aU)) - ck))]
782782 }
783783 else throw("Strict value is not equal to itself.")
784784 }
785785 else throw("Strict value is not equal to itself.")
786786 }
787787 else throw("Strict value is not equal to itself.")
788788 }
789789 else throw("Strict value is not equal to itself.")
790790 }
791791 else throw("Strict value is not equal to itself.")
792792 }
793793 else throw("Strict value is not equal to itself.")
794794 }
795795 }
796796 else throw("Strict value is not equal to itself.")
797797 }
798798
799799
800800
801801 @Callable(aR)
802-func liquidateV2 (bB,i,aT,aU) = if (!(h(aR.caller)))
802+func liquidateV2 (bB,i,aT,aU,cl) = if (!(h(aR.caller)))
803803 then throw("available for whitelist only")
804804 else if (!(G("setup_active")))
805805 then throw("market is stopped")
806806 else {
807807 let bM = at(i)
808808 if ((bM == bM))
809809 then {
810810 let bS = D(((i + "_supplied_") + aT))
811811 let bU = D(((i + "_borrowed_") + aU))
812812 if ((indexOf(b, aT) == unit))
813813 then throw("wrong lp asset")
814814 else if ((0 >= bU))
815815 then throw("user has no borrow in this token")
816816 else if (if ((bM > 0))
817817 then true
818818 else (bU == 0))
819819 then throw("user can't be liquidated")
820820 else {
821821 let ba = L(aU)
822- let cl = N()
823- let cm = value(indexOf(cl, aU))
824- let bz = parseIntValue(value(split(H("setup_penalties"), ",")[cm]))
825- let cn = ad(aU, "bRate")
826- let aL = cn._1
827- let bO = cn._2
822+ let cm = N()
823+ let cn = value(indexOf(cm, aU))
824+ let co = value(indexOf(cm, aT))
825+ let bz = parseIntValue(value(split(H("setup_penalties"), ",")[cn]))
826+ let cp = ad(aU, "bRate")
827+ let aL = cp._1
828+ let bO = cp._2
828829 let aV = fraction(bU, aL, p)
829- let co = fraction(aV, 25, 100)
830- let cp = fraction(co, (n + bz), n)
831- let cq = fraction(co, p, aL)
830+ let cq = fraction(aV, cl, 100)
831+ let cr = fraction(cq, (n + bz), n)
832+ let cs = fraction(cq, p, aL)
832833 let bV = split(i, "_")[1]
833834 let bW = split(i, "_")[0]
834- let bc = {
835- let ap = reentrantInvoke(a, "liquidate", [bW, bV, cp], nil)
835+ let ct = {
836+ let ap = reentrantInvoke(a, "liquidate", [bW, bV, cr], nil)
836837 if ($isInstanceOf(ap, "Int"))
837838 then ap
838839 else throw(($getType(ap) + " couldn't be cast to Int"))
839840 }
840- if ((bc == bc))
841- then if (bB)
842- then throw("liquidation will pass")
843- else ([ScriptTransfer(aR.caller, (cp - co), ba), IntegerEntry(((i + "_supplied_") + aT), (bS - bc)), IntegerEntry(((i + "_borrowed_") + aU), (bU - cq)), IntegerEntry(("total_supplied_" + aT), (D(("total_supplied_" + aT)) - bc)), IntegerEntry(("total_borrowed_" + aU), (D(("total_borrowed_" + aU)) - cq))] ++ bO)
841+ if ((ct == ct))
842+ then {
843+ let bc = fraction(ct, p, bO[((co * 3) + 1)].value)
844+ if (bB)
845+ then throw("liquidation will pass")
846+ else ([ScriptTransfer(aR.caller, (cr - cq), ba), IntegerEntry(((i + "_supplied_") + aT), (bS - bc)), IntegerEntry(((i + "_borrowed_") + aU), (bU - cs)), IntegerEntry(("total_supplied_" + aT), (D(("total_supplied_" + aT)) - bc)), IntegerEntry(("total_borrowed_" + aU), (D(("total_borrowed_" + aU)) - cs))] ++ bO)
847+ }
844848 else throw("Strict value is not equal to itself.")
845849 }
846850 }
847851 else throw("Strict value is not equal to itself.")
848852 }
849853
850854
851855
852856 @Callable(aR)
853-func getUserCollateral (bB,i,cr,cs) = {
857+func getUserCollateral (bB,i,cu,cv) = {
854858 let bC = N()
855859 let bu = split(H("setup_ltvs"), ",")
856860 let bv = split(H("setup_lts"), ",")
857861 let ai = ad(bC[0], "sRate")._2
858- let ct = split(cs, ",")
862+ let cw = split(cv, ",")
859863 func t (u,v) = if ((v >= size(bC)))
860864 then u
861865 else {
862866 let bp = D(((i + "_supplied_") + bC[v]))
863- let cu = D(((i + "_borrowed_") + bC[v]))
864- let cv = if ((cs == ""))
865- then if (if ((cu != 0))
867+ let cx = D(((i + "_borrowed_") + bC[v]))
868+ let cy = if ((cv == ""))
869+ then if (if ((cx != 0))
866870 then true
867871 else (bp != 0))
868872 then true
869873 else false
870874 else true
871- if (cv)
875+ if (cy)
872876 then {
873877 let aG = ar(bC[v])
874878 let aE = aq(bC[v])
875- ((u + fraction(fraction(fraction((bp + (if (if (if ((cs != ""))
876- then (ct[0] == bC[v])
879+ ((u + fraction(fraction(fraction((bp + (if (if (if ((cv != ""))
880+ then (cw[0] == bC[v])
877881 else false)
878- then (ct[1] == "supplied")
882+ then (cw[1] == "supplied")
879883 else false)
880- then parseIntValue(ct[2])
881- else 0)), ai[(v * 3)].value, p), parseIntValue(bu[v]), n), aE._1, aG)) - (if (cr)
882- then fraction(fraction(fraction((cu + (if (if (if ((cs != ""))
883- then (ct[0] == bC[v])
884+ then parseIntValue(cw[2])
885+ else 0)), ai[(v * 3)].value, p), parseIntValue(bu[v]), n), aE._1, aG)) - (if (cu)
886+ then fraction(fraction(fraction((cx + (if (if (if ((cv != ""))
887+ then (cw[0] == bC[v])
884888 else false)
885- then (ct[1] == "borrowed")
889+ then (cw[1] == "borrowed")
886890 else false)
887- then parseIntValue(ct[2])
891+ then parseIntValue(cw[2])
888892 else 0)), ai[((v * 3) + 1)].value, p), n, parseIntValue(bv[v])), aE._2, aG)
889893 else 0))
890894 }
891895 else u
892896 }
893897
894- let cw = {
898+ let cz = {
895899 let w = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
896900 let x = size(w)
897901 let y = 0
898902 func z (A,B) = if ((B >= x))
899903 then A
900904 else t(A, w[B])
901905
902906 func C (A,B) = if ((B >= x))
903907 then A
904908 else throw("List size exceeds 12")
905909
906910 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
907911 }
908912 if (bB)
909- then throw(toString(cw))
910- else $Tuple2(nil, cw)
913+ then throw(toString(cz))
914+ else $Tuple2(nil, cz)
911915 }
912916
913917
914918
915919 @Callable(aR)
916920 func getAssetDebt (bB,i,l) = {
917- let cu = D(((i + "_borrowed_") + l))
921+ let cx = D(((i + "_borrowed_") + l))
918922 let aG = ar(l)
919923 let V = ad(l, "bRate")._1
920- let cw = fraction(cu, V, p)
924+ let cz = fraction(cx, V, p)
921925 if (bB)
922- then throw(toString(cw))
923- else $Tuple2(nil, cw)
926+ then throw(toString(cz))
927+ else $Tuple2(nil, cz)
924928 }
925929
926930
927931
928932 @Callable(aR)
929933 func getPrices (bB) = {
930934 let bC = N()
931935 func t (u,v) = if ((v >= size(bC)))
932936 then u
933937 else {
934938 let aE = ak(bC[v], 3)
935939 ((((u + toString(aE._1)) + ",") + toString(aE._2)) + "|")
936940 }
937941
938- let cw = {
942+ let cz = {
939943 let w = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
940944 let x = size(w)
941945 let y = ""
942946 func z (A,B) = if ((B >= x))
943947 then A
944948 else t(A, w[B])
945949
946950 func C (A,B) = if ((B >= x))
947951 then A
948952 else throw("List size exceeds 12")
949953
950954 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
951955 }
952956 if (bB)
953- then throw(cw)
954- else $Tuple2(nil, cw)
957+ then throw(cz)
958+ else $Tuple2(nil, cz)
955959 }
956960
957961
958962
959963 @Callable(aR)
960964 func calculateUtilizationRatio (l,bB) = if (bB)
961965 then throw(toString(ah(l)))
962966 else $Tuple2(nil, ah(l))
963967
964968
965969
966970 @Callable(aR)
967971 func calculateOutdatedUR (l,bB) = if (bB)
968972 then throw(toString(Q(l)))
969973 else $Tuple2(nil, Q(l))
970974
971975
972976
973977 @Callable(aR)
974978 func calculateTokenRates (bB) = {
975979 func t (u,l) = {
976980 let ai = W(l)
977981 $Tuple2(((((u._1 + toString(ai[1].value)) + "|") + toString(ai[0].value)) + ","), (u._2 ++ ai))
978982 }
979983
980984 let bG = {
981985 let w = N()
982986 let x = size(w)
983987 let y = $Tuple2("", nil)
984988 func z (A,B) = if ((B >= x))
985989 then A
986990 else t(A, w[B])
987991
988992 func C (A,B) = if ((B >= x))
989993 then A
990994 else throw("List size exceeds 12")
991995
992996 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
993997 }
994998 if (bB)
995999 then throw(bG._1)
9961000 else $Tuple2(bG._2, bG._1)
9971001 }
9981002
9991003
10001004
10011005 @Callable(aR)
10021006 func calculateTokensInterest (bB) = {
10031007 func t (u,l) = {
10041008 let V = fraction(S(l), q, n)
10051009 ((u + toString(V)) + ",")
10061010 }
10071011
10081012 let bG = {
10091013 let w = N()
10101014 let x = size(w)
10111015 let y = ""
10121016 func z (A,B) = if ((B >= x))
10131017 then A
10141018 else t(A, w[B])
10151019
10161020 func C (A,B) = if ((B >= x))
10171021 then A
10181022 else throw("List size exceeds 12")
10191023
10201024 C(z(z(z(z(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
10211025 }
10221026 if (bB)
10231027 then throw(bG)
10241028 else $Tuple2(nil, bG)
10251029 }
10261030
10271031
1028-@Verifier(cx)
1029-func cy () = if (if (if (sigVerify(cx.bodyBytes, cx.proofs[0], base58'J4QQBsh6FGgZbijQPMDZ7GtNALx2N15K3eHvGhjq43Lt'))
1032+@Verifier(cA)
1033+func cB () = if (if (if (sigVerify(cA.bodyBytes, cA.proofs[0], base58'J4QQBsh6FGgZbijQPMDZ7GtNALx2N15K3eHvGhjq43Lt'))
10301034 then true
1031- else sigVerify(cx.bodyBytes, cx.proofs[0], base58'Ajf56x532JLzVoourPv9FW75kYsvScNxztPnt1enhNkS'))
1035+ else sigVerify(cA.bodyBytes, cA.proofs[0], base58'Ajf56x532JLzVoourPv9FW75kYsvScNxztPnt1enhNkS'))
10321036 then true
1033- else if (sigVerify(cx.bodyBytes, cx.proofs[0], base58'CYCxuKusNeomQkH9wbcEd4rRP1mDYMc7bw8pr82Agi4N'))
1034- then sigVerify(cx.bodyBytes, cx.proofs[0], base58'3oqguA2LUTZFFjJCJ62UybbXFTLwv88tSJ3oMrNSGhiA')
1037+ else if (sigVerify(cA.bodyBytes, cA.proofs[0], base58'CYCxuKusNeomQkH9wbcEd4rRP1mDYMc7bw8pr82Agi4N'))
1038+ then sigVerify(cA.bodyBytes, cA.proofs[0], base58'3oqguA2LUTZFFjJCJ62UybbXFTLwv88tSJ3oMrNSGhiA')
10351039 else false)
10361040 then true
1037- else sigVerify(cx.bodyBytes, cx.proofs[0], base58'9t2BGHP6EddYu5xvArqDkhHPGbf8ZiYUaWgFcEPtRZhE')
1041+ else sigVerify(cA.bodyBytes, cA.proofs[0], base58'9t2BGHP6EddYu5xvArqDkhHPGbf8ZiYUaWgFcEPtRZhE')
10381042

github/deemru/w8io/873ac7e 
296.50 ms