tx · 5akbAKPHLiWAnJeDXJP8ZQ6qXNhNRULj8PfUiuaEpxy8

3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH:  -0.03700000 Waves

2023.05.30 14:26 [3666159] smart account 3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH > SELF 0.00000000 Waves

{ "type": 13, "id": "5akbAKPHLiWAnJeDXJP8ZQ6qXNhNRULj8PfUiuaEpxy8", "fee": 3700000, "feeAssetId": null, "timestamp": 1685445981393, "version": 2, "chainId": 87, "sender": "3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH", "senderPublicKey": "8DxbUxhy23djr6kUEE1Jzp7oVJXBsHNaATLRiABpkSde", "proofs": [ "4vUNNzARsvK4XaKWY8u5rXP97aFY8vsueBdAgXs2AZtezVwW5vQXR9KFqUVFZk9MMx6621anMSmGPekJXAkKANyx" ], "script": "base64:BgKPAQgCEgASBAoCCAESBAoCCAESABIDCgEIEgMKAQgSBAoCCAESBAoCCAESBAoCCAESABIGCgQICAgIEgYKBAgICAgSBAoCCAgSBAoCCAgSAwoBBBIDCgEIEgMKAQQSCAoGBAgBCAgIEgUKAwQICBIGCgQECAQIEgMKAQQSBAoCCAQSBAoCCAQSAwoBBBIDCgEEHgAScmVzZXJ2ZUZ1bmRBZGRyZXNzCQEHQWRkcmVzcwEBGgFXHuH7QDFrgebsS1YbBSxRoZNu3wmxPNLBAAtyZXNlcnZlRnVuZAAUABFhZ2dyZWdhdG9yQWRkcmVzcwkBB0FkZHJlc3MBARoBV50MqsYTUaluy4D3Y33BZHji73JNqAy60wAJb3JhY2xlU3RyAiMzUFBYVktqTjZuUk16WGVlZ2NZaGZpaWM5NnBkMmM5OEVrbQARc2h1dGRvd25XaGl0ZWxpc3QJAMwIAgEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEJAMwIAgEaAVdjDQOBpn9bVNIcueQoKvOngDTw2LWN1WUJAMwIAgEaAVez1ZJUSQmaKhD7xvifEHar7z8PcqWJFYwJAMwIAgEaAVf4+voCJsBRi+xqO0YzSdIccbB1i/mkypoJAMwIAgEaAVer3aoi85i5H0XYLNSn6vkSYq+JNmpQO3IJAMwIAgEaAVcwORzRpGYYO35/49jeov24Z5j/V00RJp0FA25pbAEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEHYWRkcmVzcwkBASEBAwMJAQIhPQIFB2FkZHJlc3MJAQdBZGRyZXNzAQEaAVd3qs7ReFboqZ5eq5Xvv+nhcVh1XjKacYEJAQIhPQIFB2FkZHJlc3MJAQdBZGRyZXNzAQEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEHCQECIT0CBQdhZGRyZXNzCQEHQWRkcmVzcwEBGgFXq92qIvOYuR9F2CzUp+r5EmKviTZqUDtyBwEMZ2V0UmF0ZUN1cnZlAQphc3NldElkU3RyBAckbWF0Y2gwBQphc3NldElkU3RyAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLEhHZ2FiVHFVUzhXdFZGVUp6Zm1yVERNZ0VjY0p1WkxCUGhGZ1FGeHZuc29XBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLDM0TjlZY0VFVExXbjkzcVlRNjRFc1AxeDg5dFNydUpVNDRSckVNU1hYRVBKBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLDZYdEhqcFhiczlSUkpQMlNyOUdVeVZxekFDY2J5OVRrVGhIWG5qVkM1Q0RKBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLEFqc282blRUanB0dTJVSEx4NmhmU1hWdEhGdFJCSkNrS1lkNVNBeWo3emY1BQckbWF0Y2gwCQCWCgQAgIl6AIC0iRMAgOiSJgCAo8NHAwkAAAICLEhFQjhRYXc5eHJXcFdzOHRIc2lBVFlHQldEQnRQMlM3a2NQQUxyTXU0M0FTBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAgVXQVZFUwUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAixBdHF2NTlFWXpqRkd1aXRLVm5NUms2SDhGdWtqb1Yza3RQb3JiRXlzMjVvbgUHJG1hdGNoMAkAlgoEAAAAgNrECQCA6JImAIC0iRMDCQAAAgIsRFNiYmhMc1NUZURnNUxzaXVmazJBbmVoM0RqVnFKdVByMk05dVUxZ3d5NXAFByRtYXRjaDAJAJYKBAAAAIDaxAkAgOiSJgCAwtcvAwkAAAICLDh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBQckbWF0Y2gwCQCWCgQAAACAh6cOAIDokiYAgLSJEwMJAAACAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAUHJG1hdGNoMAkAlgoEAAAAwPD1CwCA6JImAIC0iRMDCQAAAgIsOExRVzhmN1A1ZDVQWk03R3RaRUJnYXFSUEdTelMzRGZQdWlYclVSSjRBSlMFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDh6xcDCQAAAgIsNDc0alRlWXgycjJWYTM1Nzk0dENTY0FYV0pHOWhVMkhjZ3h6TW93YVpVbnUFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDh6xcDCQAAAgIsNVVZQlBwcTRXb1U1bjRNd3BGa2dKblczRnE0QjF1M3VrcEszM2lrNFFlclIFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDh6xcDCQAAAgIsMnRoc0FDdUhtekRNdU5lelBNMzJ3ZzlhM0J3VXpCV0RlU0tha2d6M2N3MjEFByRtYXRjaDAJAJYKBACAiXoAgLSJEwCA6JImAIDC1y8DCQAAAgIrWWlOYm9mRnpDMTdqRUhIQ013clJjcHk5TXJyamFiTU1MWnhnOGc1eG1mNwUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOiSJgkAlgoEAAAAgNrECQCA6JImAIDokiYABlNjYWxlOACAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2CQBoAgUGU2NhbGU4BQZTY2FsZTgACWRheUJsb2NrcwCgCwEKbGlJbnRUb1N0cgECbGkKAQFmAgVhY2N1bQRuZXh0CQCsAgIJAKwCAgUFYWNjdW0JAKQDAQUEbmV4dAIBLAoAAiRsBQJsaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEMdHJ5R2V0QmluYXJ5AQNrZXkEByRtYXRjaDAJAJwIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIBAAEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQpnZXRCYWxhbmNlAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFCmFzc2V0SWRTdHIBD2dldE1hcmtldEFzc2V0cwAJALUJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAESZ2V0QXNzZXRzTWF4U3VwcGx5AAQBcwkBDHRyeUdldFN0cmluZwECD3NldHVwX21heFN1cHBseQMJAAACBQFzAgAJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BBQNuaWwJALUJAgUBcwIBLAENZ2V0T3V0ZGF0ZWRVcgEKYXNzZXRJZFN0cgQEZG93bgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUFB1NjYWxlMTYDCQAAAgUEZG93bgAAAAAJAGsDBQZTY2FsZTgJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQdTY2FsZTE2BQRkb3duAQtnZXRJbnRlcmVzdAEKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQFY3VydmUJAQxnZXRSYXRlQ3VydmUBBQphc3NldElkU3RyBARyYXRlCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUCdXIJAGsDBQJ1cggFBWN1cnZlAl8yCAUFY3VydmUCXzMJAGQCCAUFY3VydmUCXzIJAGsDCQBlAgUCdXIIBQVjdXJ2ZQJfMwgFBWN1cnZlAl80CQBlAgCAwtcvCAUFY3VydmUCXzMJAJYDAQkAzAgCCQBrAwUEcmF0ZQUGU2NhbGU4CQBoAgUJZGF5QmxvY2tzAO0CCQDMCAIAAQUDbmlsARB0b2tlblJhdGVzUmVjYWxjAQphc3NldElkU3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQQbGFzdFJlY2FsY0hlaWdodAkBDXRyeUdldEludGVnZXIBAg5sYXN0UmF0ZUhlaWdodAQJbGFzdEJSYXRlCQCWAwEJAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAUIaW50ZXJlc3QECWxhc3RTUmF0ZQkAlgMBCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdTUmF0ZQkAZAIFCWxhc3RTUmF0ZQkAaQIJAGgCCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAkAawMFCGludGVyZXN0BQJ1cgUGU2NhbGU4CQBlAgBkBQtyZXNlcnZlRnVuZABkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQUIbmV3U1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQhuZXdCUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIObGFzdFJhdGVIZWlnaHQFBmhlaWdodAUDbmlsAQ1nZXRBY3R1YWxSYXRlAgphc3NldElkU3RyCHJhdGVUeXBlCgEBZgIFYWNjdW0FdG9rZW4EBnJlY2FsYwkBEHRva2VuUmF0ZXNSZWNhbGMBBQV0b2tlbgkAlAoCAwkBAiE9AgUFdG9rZW4FCmFzc2V0SWRTdHIIBQVhY2N1bQJfMQMJAAACBQhyYXRlVHlwZQIFc1JhdGUICQCRAwIFBnJlY2FsYwAABXZhbHVlCAkAkQMCBQZyZWNhbGMAAQV2YWx1ZQkAzggCCAUFYWNjdW0CXzIFBnJlY2FsYwoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDgJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAQVnZXRVcgEKYXNzZXRJZFN0cgQFcmF0ZXMJARB0b2tlblJhdGVzUmVjYWxjAQUKYXNzZXRJZFN0cgQEZG93bgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzAAAFdmFsdWUFB1NjYWxlMTYJAGsDBQZTY2FsZTgJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwABBXZhbHVlBQdTY2FsZTE2BQRkb3duAQtyYXRlc1JlY2FsYwAKAQFmAgVhY2N1bQV0b2tlbgkAzggCBQVhY2N1bQkBEHRva2VuUmF0ZXNSZWNhbGMBBQV0b2tlbgoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgBDWdldFRva2VuUHJpY2UBCmFzc2V0SWRTdHIDAwkAAAIFCmFzc2V0SWRTdHICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBgkAAAIFCmFzc2V0SWRTdHICLEhHZ2FiVHFVUzhXdFZGVUp6Zm1yVERNZ0VjY0p1WkxCUGhGZ1FGeHZuc29XCQCUCgIAwIQ9AMCEPQQFZGF0YTMEBGludjMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUJb3JhY2xlU3RyAglnZXRUV0FQNjAJAMwIAgUKYXNzZXRJZFN0cgkAzAgCBwUDbmlsBQNuaWwDCQAAAgUEaW52MwUEaW52MwQHJG1hdGNoMAUEaW52MwMJAAECBQckbWF0Y2gwAgooSW50LCBJbnQpBAF4BQckbWF0Y2gwBQF4CQACAQIVZXJyb3Igb2YgcHJpY2Ugb3JhY2xlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVkYXRhNAkBEUBleHRyTmF0aXZlKDEwNTApAgkBB0FkZHJlc3MBARoBV0lm0MvzivVXeq38IW9xxVuJiCvQgbOxfwkArAICBQphc3NldElkU3RyAgdfdHdhcDVCBAtkYXRhMzRSYXRpbwkAawMIBQVkYXRhMwJfMQCQTgUFZGF0YTQDAwkAZgIFC2RhdGEzNFJhdGlvANRICQBmAgDMUwULZGF0YTM0UmF0aW8HBQVkYXRhMwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhpvcmFjbGUgcHJpY2VzIGRvbid0IG1hdGNoIAkApAMBCAUFZGF0YTMCXzECBCB2cyAJAKQDAQUFZGF0YTQCBSBmb3IgBQphc3NldElkU3RyAQ5jYWxjQXNzZXRTY2FsZQEKYXNzZXRJZFN0cgQIZGVjaW1hbHMDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMACAgJAQV2YWx1ZQEJAOwHAQkA2QQBBQphc3NldElkU3RyCGRlY2ltYWxzCQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgESY2FsY1VzZXJDb2xsYXRlcmFsAQdhZGRyZXNzBBR1c2VyQ29sbGF0ZXJhbEludm9rZQkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAICAAUDbmlsBQNuaWwDCQAAAgUUdXNlckNvbGxhdGVyYWxJbnZva2UFFHVzZXJDb2xsYXRlcmFsSW52b2tlBBN1c2VyQ29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRR1c2VyQ29sbGF0ZXJhbEludm9rZQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiRpc3N1ZSB3aGlsZSBkb2luZyBpbi1kYXBwIGludm9jYXRpb24DCQAAAgUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLhkBaQEGc3VwcGx5AAMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAkAAgECHDEgcGF5bWVudCBoYXMgdG8gYmUgYXR0YWNoZWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYXNzZXRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAskdDA4ODIzODg5MAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQskdDA4ODIzODg5MAJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQskdDA4ODIzODg5MAJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBQRET1dOBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQJbWF4U3VwcGx5BAckbWF0Y2gwCQCiCAEJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXgFByRtYXRjaDAJAQ1wYXJzZUludFZhbHVlAQUBeAkBDXRyeUdldEludGVnZXIBCQCsAgICEHNldHVwX21heFN1cHBseV8FCmFzc2V0SWRTdHIECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQQbmV3VG90YWxTdXBwbGllZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAQEcmF0ZQgJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFc1JhdGUCXzEECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE25ld1RvdGFsU3VwcGxpZWRVc2QJAGsDCQBrAwUQbmV3VG90YWxTdXBwbGllZAUEcmF0ZQUHU2NhbGUxNggFCmFzc2V0UHJpY2UCXzEFCmFzc2V0U2NhbGUDCQAAAgkAswkCCQEMdHJ5R2V0U3RyaW5nAQIMc2V0dXBfdG9rZW5zBQphc3NldElkU3RyBQR1bml0CQACAQIpdGhpcyBhc3NldCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBtYXJrZXQDAwkBAiE9AgUJbWF4U3VwcGx5AAAJAGYCBRNuZXdUb3RhbFN1cHBsaWVkVXNkBQltYXhTdXBwbHkHCQACAQIzbWF4IHRvdGFsIHN1cHBseSBmb3IgdGhpcyB0b2tlbiByZWFjaGVkIGluIHRoZSBwb29sCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBRBuZXdUb3RhbFN1cHBsaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAFpAQh3aXRoZHJhdwIKYXNzZXRJZFN0cgthc3NldEFtb3VudAQNJHQwMTAxOTMxMDI2MAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQ0kdDAxMDE5MzEwMjYwAl8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDEwMTkzMTAyNjACXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQSY29sbGF0ZXJhbFZhbHVlSW52CQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCixzdXBwbGllZCwJAKQDAQkBAS0BBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwkAZgIAAAUPY29sbGF0ZXJhbFZhbHVlCQACAQIyeW91IGRvbnQgaGF2ZSBlbm91Z2ggY29sbGF0ZXJhbCBmb3IgdGhpcyBvcGVyYXRpb24DCQBmAgUGYW1vdW50CQBlAgUNYXNzZXRTdXBwbGllZAUNYXNzZXRCb3Jyb3dlZAkAAgECKnRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIG1hcmtldAMJAGYCBQZhbW91bnQJAGUCBRF1c2VyQXNzZXRTdXBwbGllZAURdXNlckFzc2V0Qm9ycm93ZWQJAAIBAip0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZib3Jyb3cCCmFzc2V0SWRTdHILYXNzZXRBbW91bnQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA0kdDAxMTgzMjExODk5CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDExODMyMTE4OTkCXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAUNJHQwMTE4MzIxMTg5OQJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBWJSYXRlBQdDRUlMSU5HBBJjb2xsYXRlcmFsVmFsdWVJbnYJAPwHBAUEdGhpcwIRZ2V0VXNlckNvbGxhdGVyYWwJAMwIAgcJAMwIAgUHYWRkcmVzcwkAzAgCBgkAzAgCCQCsAgIJAKwCAgUKYXNzZXRJZFN0cgIKLGJvcnJvd2VkLAkApAMBBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwkAZgIAAAUPY29sbGF0ZXJhbFZhbHVlCQACAQIheW91IGhhdmUgdG8gc3VwcGx5IG1vcmUgdG8gYm9ycm93BA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgMJAGYCBQZhbW91bnQJAGUCBQ1hc3NldFN1cHBsaWVkBQ1hc3NldEJvcnJvd2VkCQACAQIcdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZAIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBkAgUNYXNzZXRCb3Jyb3dlZAUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVyZXBheQADCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAJAAIBAhwxIHBheW1lbnQgaGFzIHRvIGJlIGF0dGFjaGVkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Fzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNJHQwMTM0NzIxMzUzOQkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAxMzQ3MjEzNTM5Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDEzNDcyMTM1MzkCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBAphbW91bnRMZWZ0CQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAQLcmVwYXlBbW91bnQDCQBnAgUKYW1vdW50TGVmdAAABQZhbW91bnQFEXVzZXJBc3NldEJvcnJvd2VkAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0CQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGUCBRF1c2VyQXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgUNYXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQDCQBnAgUKYW1vdW50TGVmdAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEBLQEFCmFtb3VudExlZnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAWkBCHJlcGF5Rm9yAQdhZGRyZXNzAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDSR0MDE0OTIyMTQ5ODkJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMTQ5MjIxNDk4OQJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQ0kdDAxNDkyMjE0OTg5Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBAphbW91bnRMZWZ0CQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAQLcmVwYXlBbW91bnQDCQBnAgUKYW1vdW50TGVmdAAABQZhbW91bnQFEXVzZXJBc3NldEJvcnJvd2VkAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0CQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGUCBRF1c2VyQXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgUNYXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQDCQBnAgUKYW1vdW50TGVmdAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEBLQEFCmFtb3VudExlZnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAWkBDXN0YWtlVG9rZW5BbGwBCmFzc2V0SWRTdHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAixvbmx5IGZvciBpbnRlcm5hbCBzbWFydCBjb250cmFjdCBpbnZvY2F0aW9ucwQGYW1vdW50CQEKZ2V0QmFsYW5jZQEFCmFzc2V0SWRTdHIEA2ludgkA/AcEBQR0aGlzAgpzdGFrZVRva2VuCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnN0YWtlVG9rZW4CCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMDCQAAAgUKYXNzZXRJZFN0cgIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV+QOpzZPkgvXl8+kHT81G89DauuqPPNxnQIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQBkAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFX9xU1EcXtcoVTVBDw3RtN4mo807RodylaAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASB1FhA4gHYNVWV+SfOusdvmGZxqEGgfyVVh+kpGWncwHAUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEJAGQCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFCmFzc2V0SWRTdHICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVdraDjhA9SajJ8SG8YsvCMHOQvN7RLXCl8CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBIJLR9EriEQEr9H7q3iGOPcX7yfJ9zoey7VIZ8DpOJFj1BQZhbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAZAIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAFpAQx1bnN0YWtlVG9rZW4CCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMDCQAAAgUKYXNzZXRJZFN0cgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV/cVNRHF7XKFU1QQ8N0bTeJqPNO0aHcpWgIHdW5TdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxCQBlAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgd1bnN0YWtlCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEBGJhbDAJAQpnZXRCYWxhbmNlAQIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wDCQAAAgUEYmFsMAUEYmFsMAQEaW52MgkA/AcECQEHQWRkcmVzcwEBGgFX+3Xq6xP9GcDLCNyPYLN+A7oRjq2Pt9DrAhdnbnNidFJld2FyZHNTWVNSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAAIFBGludjIFBGludjIEDHRvcHVwUmV3YXJkcwQHJG1hdGNoMAUEaW52MgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAXgFByRtYXRjaDAECHNlY29uZEVsCQCRAwIFAXgAAQQHJG1hdGNoMQUIc2Vjb25kRWwDCQABAgUHJG1hdGNoMQIGU3RyaW5nBAhzZWNvbmRFbAUHJG1hdGNoMQQJdXNkblZhbHVlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIJALUJAgUIc2Vjb25kRWwCAV8AAQIBOgABBAp3YXZlc1ZhbHVlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIJALUJAgUIc2Vjb25kRWwCAV8AAAIBOgABAwMJAQIhPQIFCXVzZG5WYWx1ZQAABgkBAiE9AgUKd2F2ZXNWYWx1ZQAABAh1c2RuQmFsMAkBCmdldEJhbGFuY2UBAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAMJAAACBQh1c2RuQmFsMAUIdXNkbkJhbDAECXdhdmVzQmFsMAkBCmdldEJhbGFuY2UBAgVXQVZFUwMJAAACBQl3YXZlc0JhbDAFCXdhdmVzQmFsMAQEaW52MwkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgxjbGFpbVJld2FyZHMFA25pbAUDbmlsAwkAAAIFBGludjMFBGludjMECXdhdmVzQmFsMQkBCmdldEJhbGFuY2UBAgVXQVZFUwMJAAACBQl3YXZlc0JhbDEFCXdhdmVzQmFsMQQEaW52NAkA/AcECQEHQWRkcmVzcwEBGgFXzhQUnRZYA+RDTHr1peyyn62/zbOD+SmiAgRzd2FwCQDMCAICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0CQBlAgUJd2F2ZXNCYWwxBQl3YXZlc0JhbDAFA25pbAMJAAACBQRpbnY0BQRpbnY0BAh1c2RuQmFsMQkBCmdldEJhbGFuY2UBAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAMJAAACBQh1c2RuQmFsMQUIdXNkbkJhbDEEBGludjUJAPwHBAkBB0FkZHJlc3MBARoBV0DqoVxlgSg9dIRbV2Ce++N5K7fcirSQdwIEc3dhcAkAzAgCAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEJAGUCBQh1c2RuQmFsMQUIdXNkbkJhbDAFA25pbAMJAAACBQRpbnY1BQRpbnY1BARpbnY2CQD8BwQFBHRoaXMCC2FkZEludGVyZXN0CQDMCAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMCQDMCAIJAGUCCQEKZ2V0QmFsYW5jZQECLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQRiYWwwBQNuaWwFA25pbAMJAAACBQRpbnY2BQRpbnY2AAIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAQABAAADCQAAAgUMdG9wdXBSZXdhcmRzBQx0b3B1cFJld2FyZHMJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAGUCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBaQELYWRkSW50ZXJlc3QCCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIYb25seSBmb3Igc2VsZiBpbnZvY2F0aW9uBAZlYXJuZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgQLY2xlYW5BbW91bnQJAGsDBQZhbW91bnQAUABkBAxzdGF0ZUNoYW5nZXMDAwkAAAIFCmxhc3RIZWlnaHQFBmhlaWdodAYJAAACBQZhbW91bnQAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICGGF1dG9zdGFrZV9wcmVMYXN0RWFybmVkXwUKYXNzZXRJZFN0cgUGZWFybmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICF2F1dG9zdGFrZV9wcmVMYXN0QmxvY2tfBQphc3NldElkU3RyBQpsYXN0SGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgkAZAIFBmVhcm5lZAULY2xlYW5BbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIFBmhlaWdodAUDbmlsCQDOCAIFDHN0YXRlQ2hhbmdlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBrAwUHU2NhbGUxNgULY2xlYW5BbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFA25pbAFpARNhZGRJbnRlcmVzdEVYVEVSTkFMAAQGYW1vdW50CQBrAwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAUABkBAdhc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQEBmVhcm5lZAkBDXRyeUdldEludGVnZXIBCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgQKbGFzdEhlaWdodAkBDXRyeUdldEludGVnZXIBCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBAxzdGF0ZUNoYW5nZXMDAwkAAAIFCmxhc3RIZWlnaHQFBmhlaWdodAYJAAACBQZhbW91bnQAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICGGF1dG9zdGFrZV9wcmVMYXN0RWFybmVkXwUKYXNzZXRJZFN0cgUGZWFybmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICF2F1dG9zdGFrZV9wcmVMYXN0QmxvY2tfBQphc3NldElkU3RyBQpsYXN0SGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgkAZAIFBmVhcm5lZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBQZoZWlnaHQFA25pbAkAzggCBQxzdGF0ZUNoYW5nZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAawMFB1NjYWxlMTYFBmFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUDbmlsAWkBB3ByZUluaXQEBnRva2VucwRsdHZzA2x0cwlwZW5hbHRpZXMKAQFmAgVhY2N1bQV0b2tlbgkAzggCBQVhY2N1bQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX2JSYXRlBQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfc1JhdGUFB1NjYWxlMTYFA25pbAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkEBXJhdGVzCgACJGwJALUJAgUGdG9rZW5zAgEsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQICDHNldHVwX3Rva2VucwUGdG9rZW5zCQDMCAIJAQtTdHJpbmdFbnRyeQICCnNldHVwX2x0dnMFBGx0dnMJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzBQNsdHMJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzBQlwZW5hbHRpZXMJAMwIAgkBDEJvb2xlYW5FbnRyeQICDHNldHVwX2FjdGl2ZQYFA25pbAUFcmF0ZXMBaQEMaW5pdE5ld1Rva2VuBAV0b2tlbgNsdHYCbHQHcGVuYWx0eQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIMc2V0dXBfdG9rZW5zCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAUFdG9rZW4JAMwIAgkBC1N0cmluZ0VudHJ5AgIKc2V0dXBfbHR2cwkArAICCQCsAgIJAQx0cnlHZXRTdHJpbmcBAgpzZXR1cF9sdHZzAgEsBQNsdHYJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAUCbHQJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAUHcGVuYWx0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX2JSYXRlBQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfc1JhdGUFB1NjYWxlMTYFA25pbAFpAQ91cGRhdGVQYXJhbWV0ZXICA2tleQN2YWwDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVcUeViFwPoaZ+cUNI0M98TwbUXt9hz5PUEHCQACAQIKYWRtaW4gb25seQkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5CQENcGFyc2VJbnRWYWx1ZQEFA3ZhbAUDbmlsAWkBDHVwZGF0ZVN0cmluZwIDa2V5A3ZhbAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBVxR5WIXA+hpn5xQ0jQz3xPBtRe32HPk9QQcJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwBaQESY2xhaW1Ub1Jlc2VydmVGdW5kAQVkZWJ1ZwQGYXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQFcmF0ZXMICQENZ2V0QWN0dWFsUmF0ZQIJAJEDAgUGYXNzZXRzAAACBXNSYXRlAl8yBAJsaQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYFA25pbAoBAWYCBWFjY3VtAW4DCQBnAgUBbgkAkAMBBQZhc3NldHMFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFBmFzc2V0cwUBbgQPYXV0b3N0YWtlQW1vdW50CQEMdHJ5R2V0U3RyaW5nAQkArAICAhFhdXRvc3Rha2VfYW1vdW50XwUKYXNzZXRJZFN0cgQGYW1vdW50CQBlAgkAZAIJAGQCCQBkAgkBCmdldEJhbGFuY2UBBQphc3NldElkU3RyCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIRYXV0b3N0YWtlX2Ftb3VudF8FCmFzc2V0SWRTdHIDCQECIT0CBQ9hdXRvc3Rha2VBbW91bnQCAAkBDXBhcnNlSW50VmFsdWUBBQ9hdXRvc3Rha2VBbW91bnQAAAkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzCQBkAgkAaAIFAW4AAwABBXZhbHVlBQdTY2FsZTE2CQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMJAGgCBQFuAAMFdmFsdWUFB1NjYWxlMTYJAM4IAgUFYWNjdW0JAMwIAgUGYW1vdW50BQNuaWwECXBhcmFtZXRlcgoAAiRsBQJsaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgKAQJmMgIFYWNjdW0BbgMJAGcCBQFuCQCQAwEFBmFzc2V0cwUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgUGYXNzZXRzBQFuCQDOCAIFBWFjY3VtCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEnJlc2VydmVGdW5kQWRkcmVzcwkAlgMBCQDMCAIJAJEDAgUJcGFyYW1ldGVyBQFuCQDMCAIAAAUDbmlsCQENZ2V0QXNzZXRCeXRlcwEFCmFzc2V0SWRTdHIFA25pbAMFBWRlYnVnCQACAQkBCmxpSW50VG9TdHIBBQlwYXJhbWV0ZXIJAJQKAgoAAiRsBQJsaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQECZjICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDgJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIBQlwYXJhbWV0ZXIBaQEHcmVTZXR1cAEKYXNzZXRJZFN0cgQLbGFzdFJlc2V0dXAJAQ10cnlHZXRJbnRlZ2VyAQIScmVzZXR1cF9sYXN0VXBkYXRlAwkAZgIFCWRheUJsb2NrcwkAZQIFBmhlaWdodAULbGFzdFJlc2V0dXAJAAIBAiBjYW4gYmUgdXBkYXRlZCBvbmx5IG9uY2UgcGVyIGRheQQDbHRzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAglzZXR1cF9sdHMCASwEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAEAnVyCQEFZ2V0VXIBBQphc3NldElkU3RyBAZ0ZW1wTFQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICBnNldHVwXwUKYXNzZXRJZFN0cgIHX3RlbXBMVAQCbHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZhc3NldHMJAQV2YWx1ZQEJAM8IAgUGYXNzZXRzBQphc3NldElkU3RyAwkAZgIFAnVyAICV9SoJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgZzZXR1cF8FCmFzc2V0SWRTdHICB190ZW1wTFQJAGsDBQZ0ZW1wTFQA900AkE4FA25pbAMDCQBmAgUCbHQFBnRlbXBMVAkAZgIAgJX1KgUCdXIHCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIGc2V0dXBfBQphc3NldElkU3RyAgdfdGVtcExUCQBrAwUGdGVtcExUAKlOAJBOBQNuaWwFA25pbAFpAQhzaHV0ZG93bgEIc2h1dGRvd24DCQAAAgkAzwgCBRFzaHV0ZG93bldoaXRlbGlzdAgIBQFpBmNhbGxlcgVieXRlcwUEdW5pdAkAAgECF3VzZXIgbm90IGluIGEgd2hpdGVsaXN0CQDMCAIJAQxCb29sZWFuRW50cnkCAgxzZXR1cF9hY3RpdmUJAQEhAQUIc2h1dGRvd24FA25pbAFpAQlsaXF1aWRhdGUGBWRlYnVnB2FkZHJlc3MLYXNzZXRBbW91bnQLc0Fzc2V0SWRTdHILYkFzc2V0SWRTdHIIcm91dGVTdHIDCQEBIQEJARZ2ZXJpZnlMaXF1aWRhdG9yUmlnaHRzAQgFAWkGY2FsbGVyCQACAQIodGVtcG9yYXJpbHkgYXZhaWxhYmxlIGZvciB3aGl0ZWxpc3Qgb25seQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAQOdXNlckNvbGxhdGVyYWwJARJjYWxjVXNlckNvbGxhdGVyYWwBBQdhZGRyZXNzAwkAAAIFDnVzZXJDb2xsYXRlcmFsBQ51c2VyQ29sbGF0ZXJhbAQNJHQwMjg0MzMyODQ5NQkBDWdldEFjdHVhbFJhdGUCBQtzQXNzZXRJZFN0cgIFc1JhdGUEBXNSYXRlCAUNJHQwMjg0MzMyODQ5NQJfMQQLcmF0ZXNSZXN1bHQIBQ0kdDAyODQzMzI4NDk1Al8yBA0kdDAyODUwMDI4NTY5CQENZ2V0QWN0dWFsUmF0ZQIFC2JBc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAyODUwMDI4NTY5Al8xBBJyYXRlc1JlY2FsY1Jlc3VsdDIIBQ0kdDAyODUwMDI4NTY5Al8yBAxzQXNzZXRBbW91bnQJAGsDBQthc3NldEFtb3VudAUHU2NhbGUxNgUFc1JhdGUEEGN1cnJlbnRTUG9zaXRpb24JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyBBNjdXJyZW50QlBvc2l0aW9uVmFsCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgQQY3VycmVudEJQb3NpdGlvbgMJAGYCBRNjdXJyZW50QlBvc2l0aW9uVmFsAAAFE2N1cnJlbnRCUG9zaXRpb25WYWwJAAIBAiB1c2VyIGhhcyBubyBib3Jyb3cgaW4gdGhpcyB0b2tlbgMJAGYCBQ51c2VyQ29sbGF0ZXJhbAAACQACAQIYdXNlciBjYW4ndCBiZSBsaXF1aWRhdGVkAwkAZgIFDHNBc3NldEFtb3VudAUQY3VycmVudFNQb3NpdGlvbgkAAgECMnBvc2l0aW9uIHRvIGxpcXVpZGF0ZSBpcyBiaWdnZXIgdGhhbiB1c2VyJ3Mgc3VwcGx5BA5iYWxhbmNlMEJlZm9yZQkBCmdldEJhbGFuY2UBBQtzQXNzZXRJZFN0cgMJAAACBQ5iYWxhbmNlMEJlZm9yZQUOYmFsYW5jZTBCZWZvcmUEDmJhbGFuY2UxQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC2JBc3NldElkU3RyAwkAAAIFDmJhbGFuY2UxQmVmb3JlBQ5iYWxhbmNlMUJlZm9yZQQOZXhjaGFuZ2VJbnZva2UJAPwHBAURYWdncmVnYXRvckFkZHJlc3MCBHN3YXAJAMwIAgUIcm91dGVTdHIJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQULc0Fzc2V0SWRTdHIFC2Fzc2V0QW1vdW50BQNuaWwDCQAAAgUOZXhjaGFuZ2VJbnZva2UFDmV4Y2hhbmdlSW52b2tlBAphc3NldDBTb2xkCQBlAgUOYmFsYW5jZTBCZWZvcmUJAQpnZXRCYWxhbmNlAQULc0Fzc2V0SWRTdHIDCQAAAgUKYXNzZXQwU29sZAUKYXNzZXQwU29sZAQMYXNzZXQxQm91Z2h0CQBlAgkBCmdldEJhbGFuY2UBBQtiQXNzZXRJZFN0cgUOYmFsYW5jZTFCZWZvcmUDCQAAAgUMYXNzZXQxQm91Z2h0BQxhc3NldDFCb3VnaHQEC2Fzc2V0MFByaWNlCAkBDWdldFRva2VuUHJpY2UBBQtzQXNzZXRJZFN0cgJfMQQLYXNzZXQwU2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFC3NBc3NldElkU3RyBAlhc3NldDBVc2QJAGsDBQphc3NldDBTb2xkBQthc3NldDBQcmljZQULYXNzZXQwU2NhbGUEC2Fzc2V0MVByaWNlCAkBDWdldFRva2VuUHJpY2UBBQtiQXNzZXRJZFN0cgJfMgQLYXNzZXQxU2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFC2JBc3NldElkU3RyBAlhc3NldDFVc2QJAGsDBQxhc3NldDFCb3VnaHQFC2Fzc2V0MVByaWNlBQthc3NldDFTY2FsZQQHcGVuYWx0eQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAkBBXZhbHVlAQkAzwgCCQEPZ2V0TWFya2V0QXNzZXRzAAULYkFzc2V0SWRTdHIEEWxpcXVpZGF0aW9uUHJvZml0CQBlAgUJYXNzZXQxVXNkCQBrAwUJYXNzZXQwVXNkCQBlAgUGU2NhbGU4BQdwZW5hbHR5BQZTY2FsZTgEDHNBc3NldENoYW5nZQkAawMFCmFzc2V0MFNvbGQFB1NjYWxlMTYFBXNSYXRlBAxiQXNzZXRDaGFuZ2UJAGsDCQBrAwUMYXNzZXQxQm91Z2h0BQdTY2FsZTE2BQViUmF0ZQkAZQIFBlNjYWxlOAkAawMFEWxpcXVpZGF0aW9uUHJvZml0BQZTY2FsZTgFCWFzc2V0MVVzZAUGU2NhbGU4AwkAZgIFCmFzc2V0MFNvbGQFC2Fzc2V0QW1vdW50CQACAQIjbW9yZSBhc3NldHMgZXhjaGFuZ2VkIHRoYW4gZXhwZWN0ZWQDCQBmAgAABRFsaXF1aWRhdGlvblByb2ZpdAkAAgECL3ByaWNlIGltcGFjdCBpcyBiaWdnZXIgdGhhbiBsaXF1aWRhdGlvbiBwZW5hbHR5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCBRBjdXJyZW50U1Bvc2l0aW9uBQxzQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRCUG9zaXRpb24FDGJBc3NldENoYW5nZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIFDHNBc3NldENoYW5nZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIFDGJBc3NldENoYW5nZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2xpcXVpZGF0ZVYyAwVkZWJ1ZwdhZGRyZXNzC3NBc3NldElkU3RyAwkBASEBCQEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEIBQFpBmNhbGxlcgkAAgECKHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3Igd2hpdGVsaXN0IG9ubHkDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQECGJBc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2JBc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQhiQXNzZXRJZAQMYkFzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQOdXNlckNvbGxhdGVyYWwJARJjYWxjVXNlckNvbGxhdGVyYWwBBQdhZGRyZXNzAwkAAAIFDnVzZXJDb2xsYXRlcmFsBQ51c2VyQ29sbGF0ZXJhbAMJAGYCBQ51c2VyQ29sbGF0ZXJhbAAACQACAQIYdXNlciBjYW4ndCBiZSBsaXF1aWRhdGVkBAxtYXJrZXRBc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABAlhc3NldDFOdW0JAQV2YWx1ZQEJAM8IAgUMbWFya2V0QXNzZXRzBQtiQXNzZXRJZFN0cgQJYXNzZXQwTnVtCQEFdmFsdWUBCQDPCAIFDG1hcmtldEFzc2V0cwULc0Fzc2V0SWRTdHIEDSR0MDMxNzI0MzE3ODYJAQ1nZXRBY3R1YWxSYXRlAgULYkFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDMxNzI0MzE3ODYCXzEEC3JhdGVzUmVzdWx0CAUNJHQwMzE3MjQzMTc4NgJfMgQLYXNzZXQxUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC2JBc3NldElkU3RyAl8yBAthc3NldDFTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULYkFzc2V0SWRTdHIECmJBbW91bnRVc2QJAGsDBQxiQXNzZXRBbW91bnQFC2Fzc2V0MVByaWNlBQthc3NldDFTY2FsZQQHcGVuYWx0eQkBDXBhcnNlSW50VmFsdWUBCQEFdmFsdWUBCQCRAwIJALUJAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAUJYXNzZXQxTnVtBAthc3NldDBQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULc0Fzc2V0SWRTdHICXzEEC2Fzc2V0MFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtzQXNzZXRJZFN0cgQKc0Ftb3VudFVzZAkAawMFCmJBbW91bnRVc2QJAGQCBQZTY2FsZTgFB3BlbmFsdHkFBlNjYWxlOAQMc0Fzc2V0QW1vdW50CQBrAwUKc0Ftb3VudFVzZAULYXNzZXQwU2NhbGUFC2Fzc2V0MFByaWNlBAdiQW1vdW50CQBrAwUMYkFzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQQHc0Ftb3VudAkAawMFDHNBc3NldEFtb3VudAUHU2NhbGUxNggJAJEDAgULcmF0ZXNSZXN1bHQJAGQCCQBoAgUJYXNzZXQwTnVtAAMAAQV2YWx1ZQQQY3VycmVudFNQb3NpdGlvbgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIEE2N1cnJlbnRCUG9zaXRpb25WYWwJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBBBjdXJyZW50QlBvc2l0aW9uAwkAZgIFE2N1cnJlbnRCUG9zaXRpb25WYWwAAAUTY3VycmVudEJQb3NpdGlvblZhbAkAAgECIHVzZXIgaGFzIG5vIGJvcnJvdyBpbiB0aGlzIHRva2VuAwkAZgIFB3NBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQMFBWRlYnVnCQACAQIVbGlxdWlkYXRpb24gd2lsbCBwYXNzCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxzQXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQULc0Fzc2V0SWRTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRTUG9zaXRpb24FB3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRCUG9zaXRpb24FB2JBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyBQdzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgUHYkFtb3VudAUDbmlsBQtyYXRlc1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFnZXRVc2VyQ29sbGF0ZXJhbAQFZGVidWcHYWRkcmVzcw1taW51c0JvcnJvd2VkC2FmdGVyQ2hhbmdlBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABARsdHZzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAgpzZXR1cF9sdHZzAgEsBANsdHMJALUJAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAQFcmF0ZXMICQENZ2V0QWN0dWFsUmF0ZQIJAJEDAgUGYXNzZXRzAAACBXNSYXRlAl8yBA1jaGFuZ2VIYW5kbGVyCQC1CQIFC2FmdGVyQ2hhbmdlAgEsCgEBZgIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0CQCQAwEFBmFzc2V0cwUFYWNjdW0EDHVzZXJTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwkAkQMCBQZhc3NldHMFBG5leHQEDHVzZXJCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwkAkQMCBQZhc3NldHMFBG5leHQEE25lZWRUb2tlbkFjY291bnRpbmcDCQAAAgULYWZ0ZXJDaGFuZ2UCAAMDCQECIT0CBQx1c2VyQm9ycm93ZWQAAAYJAQIhPQIFDHVzZXJTdXBwbGllZAAABgcGAwUTbmVlZFRva2VuQWNjb3VudGluZwQKYXNzZXRTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQkAkQMCBQZhc3NldHMFBG5leHQECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQkAkQMCBQZhc3NldHMFBG5leHQJAGUCCQBkAgUFYWNjdW0JAGsDCQBrAwkAawMJAGQCBQx1c2VyU3VwcGxpZWQDAwMJAQIhPQIFC2FmdGVyQ2hhbmdlAgAJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAAkAkQMCBQZhc3NldHMFBG5leHQHCQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAECCHN1cHBsaWVkBwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDWNoYW5nZUhhbmRsZXIAAgAACAkAkQMCBQVyYXRlcwkAaAIFBG5leHQAAwV2YWx1ZQUHU2NhbGUxNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGx0dnMFBG5leHQFBlNjYWxlOAgFCmFzc2V0UHJpY2UCXzEFCmFzc2V0U2NhbGUDBQ1taW51c0JvcnJvd2VkCQBrAwkAawMJAGsDCQBkAgUMdXNlckJvcnJvd2VkAwMDCQECIT0CBQthZnRlckNoYW5nZQIACQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAAJAJEDAgUGYXNzZXRzBQRuZXh0BwkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgABAghib3Jyb3dlZAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAIAAAgJAJEDAgUFcmF0ZXMJAGQCCQBoAgUEbmV4dAADAAEFdmFsdWUFB1NjYWxlMTYFBlNjYWxlOAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2x0cwUEbmV4dAgFCmFzc2V0UHJpY2UCXzIFCmFzc2V0U2NhbGUAAAUFYWNjdW0EBnJlc3VsdAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAMFBWRlYnVnCQACAQkApAMBBQZyZXN1bHQJAJQKAgUFcmF0ZXMFBnJlc3VsdAFpAQlnZXRQcmljZXMBBWRlYnVnBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMACgEBZgIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0CQCQAwEFBmFzc2V0cwUFYWNjdW0ECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQkAkQMCBQZhc3NldHMFBG5leHQJAKwCAgkArAICCQCsAgIJAKwCAgUFYWNjdW0JAKQDAQgFCmFzc2V0UHJpY2UCXzECASwJAKQDAQgFCmFzc2V0UHJpY2UCXzICAXwEBnJlc3VsdAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAMFBWRlYnVnCQACAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBGWNhbGN1bGF0ZVV0aWxpemF0aW9uUmF0aW8CCmFzc2V0SWRTdHIFZGVidWcDBQVkZWJ1ZwkAAgEJAKQDAQkBBWdldFVyAQUKYXNzZXRJZFN0cgkAlAoCBQNuaWwJAQVnZXRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlT3V0ZGF0ZWRVUgIKYXNzZXRJZFN0cgVkZWJ1ZwMFBWRlYnVnCQACAQkApAMBCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIJAJQKAgUDbmlsCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlVG9rZW5SYXRlcwEFZGVidWcKAQFmAgVhY2N1bQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAggFBWFjY3VtAl8xCQCkAwEICQCRAwIFBXJhdGVzAAEFdmFsdWUCAXwJAKQDAQgJAJEDAgUFcmF0ZXMAAAV2YWx1ZQIBLAkAzggCCAUFYWNjdW0CXzIFBXJhdGVzBAlwYXJhbWV0ZXIKAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgICAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAMFBWRlYnVnCQACAQgFCXBhcmFtZXRlcgJfMQkAlAoCCAUJcGFyYW1ldGVyAl8yCAUJcGFyYW1ldGVyAl8xAWkBF2NhbGN1bGF0ZVRva2Vuc0ludGVyZXN0AQVkZWJ1ZwoBAWYCBWFjY3VtCmFzc2V0SWRTdHIEBHJhdGUJAGsDCQELZ2V0SW50ZXJlc3QBBQphc3NldElkU3RyBQlkYXlCbG9ja3MFBlNjYWxlOAkArAICCQCsAgIFBWFjY3VtCQCkAwEFBHJhdGUCASwECXBhcmFtZXRlcgoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgDBQVkZWJ1ZwkAAgEFCXBhcmFtZXRlcgkAlAoCBQNuaWwFCXBhcmFtZXRlcgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkoqlEJ", "height": 3666159, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2bG79DykiCtMsxVsAcDnmCiXrSgatCs6hhW6HGnUR3VQ Next: HgTN9do3zaLcqvnYg1QxLQ3BNb7mjh2dJL4P3pSCr2Hc Diff:
OldNewDifferences
261261 }
262262 let al = getIntegerValue(Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t'), (i + "_twap5B"))
263263 let am = fraction(ai._1, 10000, al)
264- if (if ((am > 9000))
265- then (11000 > am)
264+ if (if ((am > 9300))
265+ then (10700 > am)
266266 else false)
267267 then ai
268268 else throw(((((("oracle prices don't match " + toString(ai._1)) + " vs ") + toString(al)) + " for ") + i))
445445
446446
447447 @Callable(as)
448+func repayFor (g) = if (!(D("setup_active")))
449+ then throw("market is stopped")
450+ else if (if ((size(as.payments) != 1))
451+ then true
452+ else (as.payments[0].amount == 0))
453+ then throw("1 payment has to be attached")
454+ else {
455+ let i = G(as.payments[0].assetId)
456+ let at = as.payments[0].amount
457+ let aP = aa(i, "bRate")
458+ let aL = aP._1
459+ let aw = aP._2
460+ let ax = fraction(at, m, aL, CEILING)
461+ let aE = A(("total_supplied_" + i))
462+ let aF = A(("total_borrowed_" + i))
463+ let aH = A(((g + "_borrowed_") + i))
464+ let aN = (aH - ax)
465+ let aO = if ((aN >= 0))
466+ then ax
467+ else aH
468+ if ((indexOf(E("setup_tokens"), i) == unit))
469+ then throw("this asset is not supported by the market")
470+ else (([IntegerEntry(((g + "_borrowed_") + i), (aH - aO)), IntegerEntry(("total_borrowed_" + i), (aF - aO))] ++ aw) ++ (if ((aN >= 0))
471+ then nil
472+ else [ScriptTransfer(as.caller, -(aN), as.payments[0].assetId)]))
473+ }
474+
475+
476+
477+@Callable(as)
448478 func stakeTokenAll (i) = if ((as.caller != this))
449479 then throw("only for internal smart contract invocations")
450480 else {
451481 let ax = J(i)
452- let aP = invoke(this, "stakeToken", [i, ax], nil)
453- if ((aP == aP))
482+ let aQ = invoke(this, "stakeToken", [i, ax], nil)
483+ if ((aQ == aQ))
454484 then nil
455485 else throw("Strict value is not equal to itself.")
456486 }
462492 then throw("only for internal smart contract invocations")
463493 else if ((i == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
464494 then {
465- let aQ = A("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
466- let aP = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ax)])
467- if ((aP == aP))
468- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aQ + ax))]
495+ let aR = A("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
496+ let aQ = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ax)])
497+ if ((aQ == aQ))
498+ then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aR + ax))]
469499 else throw("Strict value is not equal to itself.")
470500 }
471501 else if ((i == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
472502 then {
473- let aQ = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
474- let aP = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ax)])
475- if ((aP == aP))
476- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aQ + ax))]
503+ let aR = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
504+ let aQ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ax)])
505+ if ((aQ == aQ))
506+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aR + ax))]
477507 else throw("Strict value is not equal to itself.")
478508 }
479509 else if ((i == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
480510 then {
481- let aQ = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
482- let aP = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ax)])
483- if ((aP == aP))
484- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aQ + ax))]
511+ let aR = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
512+ let aQ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ax)])
513+ if ((aQ == aQ))
514+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aR + ax))]
485515 else throw("Strict value is not equal to itself.")
486516 }
487517 else nil
493523 then throw("only for internal smart contract invocations")
494524 else if ((i == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
495525 then {
496- let aQ = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
497- let aP = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ax], nil)
498- if ((aP == aP))
499- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aQ - ax))]
526+ let aR = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
527+ let aQ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ax], nil)
528+ if ((aQ == aQ))
529+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aR - ax))]
500530 else throw("Strict value is not equal to itself.")
501531 }
502532 else if ((i == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
503533 then {
504- let aQ = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
505- let aP = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ax], nil)
506- if ((aP == aP))
534+ let aR = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
535+ let aQ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ax], nil)
536+ if ((aQ == aQ))
507537 then {
508- let aR = J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
509- if ((aR == aR))
538+ let aS = J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
539+ if ((aS == aS))
510540 then {
511- let aS = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
512- if ((aS == aS))
541+ let aT = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
542+ if ((aT == aT))
513543 then {
514- let aT = {
515- let j = aS
544+ let aU = {
545+ let j = aT
516546 if ($isInstanceOf(j, "List[Any]"))
517547 then {
518548 let ak = j
519- let aU = ak[1]
520- let aV = aU
521- if ($isInstanceOf(aV, "String"))
549+ let aV = ak[1]
550+ let aW = aV
551+ if ($isInstanceOf(aW, "String"))
522552 then {
523- let aU = aV
524- let aW = parseIntValue(split(split(aU, "_")[1], ":")[1])
525- let aX = parseIntValue(split(split(aU, "_")[0], ":")[1])
526- if (if ((aW != 0))
553+ let aV = aW
554+ let aX = parseIntValue(split(split(aV, "_")[1], ":")[1])
555+ let aY = parseIntValue(split(split(aV, "_")[0], ":")[1])
556+ if (if ((aX != 0))
527557 then true
528- else (aX != 0))
558+ else (aY != 0))
529559 then {
530- let aY = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
531- if ((aY == aY))
560+ let aZ = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
561+ if ((aZ == aZ))
532562 then {
533- let aZ = J("WAVES")
534- if ((aZ == aZ))
563+ let ba = J("WAVES")
564+ if ((ba == ba))
535565 then {
536566 let aj = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
537567 if ((aj == aj))
538568 then {
539- let ba = J("WAVES")
540- if ((ba == ba))
569+ let bb = J("WAVES")
570+ if ((bb == bb))
541571 then {
542- let bb = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (ba - aZ))])
543- if ((bb == bb))
572+ let bc = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bb - ba))])
573+ if ((bc == bc))
544574 then {
545- let bc = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
546- if ((bc == bc))
575+ let bd = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
576+ if ((bd == bd))
547577 then {
548- let bd = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bc - aY))])
549- if ((bd == bd))
578+ let be = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bd - aZ))])
579+ if ((be == be))
550580 then {
551- let be = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aR)], nil)
552- if ((be == be))
581+ let bf = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aS)], nil)
582+ if ((bf == bf))
553583 then 2
554584 else throw("Strict value is not equal to itself.")
555585 }
573603 }
574604 else 0
575605 }
576- if ((aT == aT))
577- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aQ - ax))]
606+ if ((aU == aU))
607+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aR - ax))]
578608 else throw("Strict value is not equal to itself.")
579609 }
580610 else throw("Strict value is not equal to itself.")
591621 func addInterest (i,ax) = if ((as.caller != this))
592622 then throw("only for self invocation")
593623 else {
594- let bf = A(("autostake_lastEarned_" + i))
595- let bg = A(("autostake_lastBlock_" + i))
596- let bh = fraction(ax, 80, 100)
597- let bi = if (if ((bg == height))
624+ let bg = A(("autostake_lastEarned_" + i))
625+ let bh = A(("autostake_lastBlock_" + i))
626+ let bi = fraction(ax, 80, 100)
627+ let bj = if (if ((bh == height))
598628 then true
599629 else (ax == 0))
600630 then nil
601- else [IntegerEntry(("autostake_preLastEarned_" + i), bf), IntegerEntry(("autostake_preLastBlock_" + i), bg), IntegerEntry(("autostake_lastEarned_" + i), (bf + bh)), IntegerEntry(("autostake_lastBlock_" + i), height)]
602- (bi ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, bh, A(("total_supplied_" + i)))))])
631+ else [IntegerEntry(("autostake_preLastEarned_" + i), bg), IntegerEntry(("autostake_preLastBlock_" + i), bh), IntegerEntry(("autostake_lastEarned_" + i), (bg + bi)), IntegerEntry(("autostake_lastBlock_" + i), height)]
632+ (bj ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, bi, A(("total_supplied_" + i)))))])
603633 }
604634
605635
609639 let ax = fraction(as.payments[0].amount, 80, 100)
610640 let H = as.payments[0].assetId
611641 let i = G(H)
612- let bf = A(("autostake_lastEarned_" + i))
613- let bg = A(("autostake_lastBlock_" + i))
614- let bi = if (if ((bg == height))
642+ let bg = A(("autostake_lastEarned_" + i))
643+ let bh = A(("autostake_lastBlock_" + i))
644+ let bj = if (if ((bh == height))
615645 then true
616646 else (ax == 0))
617647 then nil
618- else [IntegerEntry(("autostake_preLastEarned_" + i), bf), IntegerEntry(("autostake_preLastBlock_" + i), bg), IntegerEntry(("autostake_lastEarned_" + i), (bf + ax)), IntegerEntry(("autostake_lastBlock_" + i), height)]
619- (bi ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, ax, A(("total_supplied_" + i)))))])
648+ else [IntegerEntry(("autostake_preLastEarned_" + i), bg), IntegerEntry(("autostake_preLastBlock_" + i), bh), IntegerEntry(("autostake_lastEarned_" + i), (bg + ax)), IntegerEntry(("autostake_lastBlock_" + i), height)]
649+ (bj ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, ax, A(("total_supplied_" + i)))))])
620650 }
621651
622652
623653
624654 @Callable(as)
625-func preInit (bj,bk,bl,bm) = {
655+func preInit (bk,bl,bm,bn) = {
626656 func q (r,ac) = (r ++ [IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)])
627657
628658 if ((as.caller != this))
629659 then throw("admin only")
630660 else {
631661 let af = {
632- let t = split(bj, ",")
662+ let t = split(bk, ",")
633663 let u = size(t)
634664 let v = nil
635665 func w (x,y) = if ((y >= u))
642672
643673 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
644674 }
645- ([StringEntry("setup_tokens", bj), StringEntry("setup_ltvs", bk), StringEntry("setup_lts", bl), StringEntry("setup_penalties", bm), BooleanEntry("setup_active", true)] ++ af)
675+ ([StringEntry("setup_tokens", bk), StringEntry("setup_ltvs", bl), StringEntry("setup_lts", bm), StringEntry("setup_penalties", bn), BooleanEntry("setup_active", true)] ++ af)
646676 }
647677 }
648678
649679
650680
651681 @Callable(as)
652-func initNewToken (ac,bn,bo,bp) = if ((as.caller != this))
682+func initNewToken (ac,bo,bp,bq) = if ((as.caller != this))
653683 then throw("admin only")
654- else [StringEntry("setup_tokens", ((E("setup_tokens") + ",") + ac)), StringEntry("setup_ltvs", ((E("setup_ltvs") + ",") + bn)), StringEntry("setup_lts", ((E("setup_lts") + ",") + bo)), StringEntry("setup_penalties", ((E("setup_penalties") + ",") + bp)), IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)]
684+ else [StringEntry("setup_tokens", ((E("setup_tokens") + ",") + ac)), StringEntry("setup_ltvs", ((E("setup_ltvs") + ",") + bo)), StringEntry("setup_lts", ((E("setup_lts") + ",") + bp)), StringEntry("setup_penalties", ((E("setup_penalties") + ",") + bq)), IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)]
655685
656686
657687
658688 @Callable(as)
659-func updateParameter (B,bq) = if (if ((as.caller != this))
689+func updateParameter (B,br) = if (if ((as.caller != this))
660690 then (as.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
661691 else false)
662692 then throw("admin only")
663- else [IntegerEntry(B, parseIntValue(bq))]
693+ else [IntegerEntry(B, parseIntValue(br))]
664694
665695
666696
667697 @Callable(as)
668-func updateString (B,bq) = if (if ((as.caller != this))
698+func updateString (B,br) = if (if ((as.caller != this))
669699 then (as.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
670700 else false)
671701 then throw("admin only")
672- else [StringEntry(B, bq)]
702+ else [StringEntry(B, br)]
673703
674704
675705
676706 @Callable(as)
677-func claimToReserveFund (br) = {
678- let bs = K()
679- let af = aa(bs[0], "sRate")._2
707+func claimToReserveFund (bs) = {
708+ let bt = K()
709+ let af = aa(bt[0], "sRate")._2
680710 let p = [0, 1, 2, 3, 4, 5, 6]
681- func q (r,bt) = if ((bt >= size(bs)))
711+ func q (r,bu) = if ((bu >= size(bt)))
682712 then r
683713 else {
684- let i = bs[bt]
685- let bu = E(("autostake_amount_" + i))
686- let ax = ((((J(i) + A(("autostake_amount_" + i))) + (if ((bu != ""))
687- then parseIntValue(bu)
688- else 0)) + fraction(A(("total_borrowed_" + i)), af[((bt * 3) + 1)].value, m)) - fraction(A(("total_supplied_" + i)), af[(bt * 3)].value, m))
714+ let i = bt[bu]
715+ let bv = E(("autostake_amount_" + i))
716+ let ax = ((((J(i) + A(("autostake_amount_" + i))) + (if ((bv != ""))
717+ then parseIntValue(bv)
718+ else 0)) + fraction(A(("total_borrowed_" + i)), af[((bu * 3) + 1)].value, m)) - fraction(A(("total_supplied_" + i)), af[(bu * 3)].value, m))
689719 (r ++ [ax])
690720 }
691721
692- let bv = {
722+ let bw = {
693723 let t = p
694724 let u = size(t)
695725 let v = nil
703733
704734 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
705735 }
706- func bw (r,bt) = if ((bt >= size(bs)))
736+ func bx (r,bu) = if ((bu >= size(bt)))
707737 then r
708738 else {
709- let i = bs[bt]
710- (r ++ [ScriptTransfer(a, max([bv[bt], 0]), I(i))])
739+ let i = bt[bu]
740+ (r ++ [ScriptTransfer(a, max([bw[bu], 0]), I(i))])
711741 }
712742
713- if (br)
714- then throw(o(bv))
743+ if (bs)
744+ then throw(o(bw))
715745 else $Tuple2({
716746 let t = p
717747 let u = size(t)
718748 let v = nil
719- func bx (x,y) = if ((y >= u))
749+ func by (x,y) = if ((y >= u))
720750 then x
721- else bw(x, t[y])
751+ else bx(x, t[y])
722752
723- func by (x,y) = if ((y >= u))
753+ func bz (x,y) = if ((y >= u))
724754 then x
725755 else throw("List size exceeds 8")
726756
727- by(bx(bx(bx(bx(bx(bx(bx(bx(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
728- }, bv)
757+ bz(by(by(by(by(by(by(by(by(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
758+ }, bw)
729759 }
730760
731761
732762
733763 @Callable(as)
734764 func reSetup (i) = {
735- let bz = A("resetup_lastUpdate")
736- if ((n > (height - bz)))
765+ let bA = A("resetup_lastUpdate")
766+ if ((n > (height - bA)))
737767 then throw("can be updated only once per day")
738768 else {
739- let bl = split(E("setup_lts"), ",")
740- let bs = K()
769+ let bm = split(E("setup_lts"), ",")
770+ let bt = K()
741771 let Q = ae(i)
742- let bA = A((("setup_" + i) + "_tempLT"))
743- let bo = parseIntValue(bs[value(indexOf(bs, i))])
772+ let bB = A((("setup_" + i) + "_tempLT"))
773+ let bp = parseIntValue(bt[value(indexOf(bt, i))])
744774 if ((Q > 90000000))
745- then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bA, 9975, 10000))]
746- else if (if ((bo > bA))
775+ then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bB, 9975, 10000))]
776+ else if (if ((bp > bB))
747777 then (90000000 > Q)
748778 else false)
749- then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bA, 10025, 10000))]
779+ then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bB, 10025, 10000))]
750780 else nil
751781 }
752782 }
754784
755785
756786 @Callable(as)
757-func shutdown (bB) = if ((indexOf(e, as.caller.bytes) == unit))
787+func shutdown (bC) = if ((indexOf(e, as.caller.bytes) == unit))
758788 then throw("user not in a whitelist")
759- else [BooleanEntry("setup_active", !(bB))]
789+ else [BooleanEntry("setup_active", !(bC))]
760790
761791
762792
763793 @Callable(as)
764-func liquidate (br,g,at,bC,bD,bE) = if (!(f(as.caller)))
794+func liquidate (bs,g,at,bD,bE,bF) = if (!(f(as.caller)))
765795 then throw("temporarily available for whitelist only")
766796 else if (!(D("setup_active")))
767797 then throw("market is stopped")
768798 else {
769- let bF = ap(g)
770- if ((bF == bF))
799+ let bG = ap(g)
800+ if ((bG == bG))
771801 then {
772- let bG = aa(bC, "sRate")
773- let av = bG._1
774- let bH = bG._2
775- let bI = aa(bD, "bRate")
776- let aL = bI._1
777- let bJ = bI._2
778- let bK = fraction(at, m, av)
779- let bL = A(((g + "_supplied_") + bC))
780- let bM = A(((g + "_borrowed_") + bD))
781- let bN = if ((bM > 0))
782- then bM
802+ let bH = aa(bD, "sRate")
803+ let av = bH._1
804+ let bI = bH._2
805+ let bJ = aa(bE, "bRate")
806+ let aL = bJ._1
807+ let bK = bJ._2
808+ let bL = fraction(at, m, av)
809+ let bM = A(((g + "_supplied_") + bD))
810+ let bN = A(((g + "_borrowed_") + bE))
811+ let bO = if ((bN > 0))
812+ then bN
783813 else throw("user has no borrow in this token")
784- if ((bF > 0))
814+ if ((bG > 0))
785815 then throw("user can't be liquidated")
786- else if ((bK > bL))
816+ else if ((bL > bM))
787817 then throw("position to liquidate is bigger than user's supply")
788818 else {
789- let bO = J(bC)
790- if ((bO == bO))
819+ let bP = J(bD)
820+ if ((bP == bP))
791821 then {
792- let bP = J(bD)
793- if ((bP == bP))
822+ let bQ = J(bE)
823+ if ((bQ == bQ))
794824 then {
795- let bQ = invoke(c, "swap", [bE, 0], [AttachedPayment(I(bC), at)])
796- if ((bQ == bQ))
825+ let bR = invoke(c, "swap", [bF, 0], [AttachedPayment(I(bD), at)])
826+ if ((bR == bR))
797827 then {
798- let bR = (bO - J(bC))
799- if ((bR == bR))
828+ let bS = (bP - J(bD))
829+ if ((bS == bS))
800830 then {
801- let bS = (J(bD) - bP)
802- if ((bS == bS))
831+ let bT = (J(bE) - bQ)
832+ if ((bT == bT))
803833 then {
804- let bT = ah(bC)._1
805- let bU = an(bC)
806- let bV = fraction(bR, bT, bU)
807- let bW = ah(bD)._2
808- let bX = an(bD)
809- let bY = fraction(bS, bW, bX)
810- let bp = parseIntValue(split(E("setup_penalties"), ",")[value(indexOf(K(), bD))])
811- let bZ = (bY - fraction(bV, (k - bp), k))
812- let ca = fraction(bR, m, av)
813- let cb = fraction(fraction(bS, m, aL), (k - fraction(bZ, k, bY)), k)
814- if ((bR > at))
834+ let bU = ah(bD)._1
835+ let bV = an(bD)
836+ let bW = fraction(bS, bU, bV)
837+ let bX = ah(bE)._2
838+ let bY = an(bE)
839+ let bZ = fraction(bT, bX, bY)
840+ let bq = parseIntValue(split(E("setup_penalties"), ",")[value(indexOf(K(), bE))])
841+ let ca = (bZ - fraction(bW, (k - bq), k))
842+ let cb = fraction(bS, m, av)
843+ let cc = fraction(fraction(bT, m, aL), (k - fraction(ca, k, bZ)), k)
844+ if ((bS > at))
815845 then throw("more assets exchanged than expected")
816- else if ((0 > bZ))
846+ else if ((0 > ca))
817847 then throw("price impact is bigger than liquidation penalty")
818- else [IntegerEntry(((g + "_supplied_") + bC), (bL - ca)), IntegerEntry(((g + "_borrowed_") + bD), (bN - cb)), IntegerEntry(("total_supplied_" + bC), (A(("total_supplied_" + bC)) - ca)), IntegerEntry(("total_borrowed_" + bD), (A(("total_borrowed_" + bD)) - cb))]
848+ else [IntegerEntry(((g + "_supplied_") + bD), (bM - cb)), IntegerEntry(((g + "_borrowed_") + bE), (bO - cc)), IntegerEntry(("total_supplied_" + bD), (A(("total_supplied_" + bD)) - cb)), IntegerEntry(("total_borrowed_" + bE), (A(("total_borrowed_" + bE)) - cc))]
819849 }
820850 else throw("Strict value is not equal to itself.")
821851 }
834864
835865
836866 @Callable(as)
837-func liquidateV2 (br,g,bC) = if (!(f(as.caller)))
867+func liquidateV2 (bs,g,bD) = if (!(f(as.caller)))
838868 then throw("temporarily available for whitelist only")
839869 else if (!(D("setup_active")))
840870 then throw("market is stopped")
841871 else {
842- let cc = as.payments[0].assetId
843- let bD = G(cc)
844- let cd = as.payments[0].amount
845- let bF = ap(g)
846- if ((bF == bF))
847- then if ((bF > 0))
872+ let cd = as.payments[0].assetId
873+ let bE = G(cd)
874+ let ce = as.payments[0].amount
875+ let bG = ap(g)
876+ if ((bG == bG))
877+ then if ((bG > 0))
848878 then throw("user can't be liquidated")
849879 else {
850- let ce = K()
851- let cf = value(indexOf(ce, bD))
852- let cg = value(indexOf(ce, bC))
853- let ch = aa(bD, "bRate")
854- let aL = ch._1
855- let bH = ch._2
856- let bW = ah(bD)._2
857- let bX = an(bD)
858- let ci = fraction(cd, bW, bX)
859- let bp = parseIntValue(value(split(E("setup_penalties"), ",")[cf]))
860- let bT = ah(bC)._1
861- let bU = an(bC)
862- let cj = fraction(ci, (k + bp), k)
863- let bK = fraction(cj, bU, bT)
864- let ck = fraction(cd, m, aL)
865- let cl = fraction(bK, m, bH[((cg * 3) + 1)].value)
866- let bL = A(((g + "_supplied_") + bC))
867- let bM = A(((g + "_borrowed_") + bD))
868- let bN = if ((bM > 0))
869- then bM
880+ let cf = K()
881+ let cg = value(indexOf(cf, bE))
882+ let ch = value(indexOf(cf, bD))
883+ let ci = aa(bE, "bRate")
884+ let aL = ci._1
885+ let bI = ci._2
886+ let bX = ah(bE)._2
887+ let bY = an(bE)
888+ let cj = fraction(ce, bX, bY)
889+ let bq = parseIntValue(value(split(E("setup_penalties"), ",")[cg]))
890+ let bU = ah(bD)._1
891+ let bV = an(bD)
892+ let ck = fraction(cj, (k + bq), k)
893+ let bL = fraction(ck, bV, bU)
894+ let cl = fraction(ce, m, aL)
895+ let cm = fraction(bL, m, bI[((ch * 3) + 1)].value)
896+ let bM = A(((g + "_supplied_") + bD))
897+ let bN = A(((g + "_borrowed_") + bE))
898+ let bO = if ((bN > 0))
899+ then bN
870900 else throw("user has no borrow in this token")
871- if ((cl > bL))
901+ if ((cm > bM))
872902 then throw("position to liquidate is bigger than user's supply")
873- else if (br)
903+ else if (bs)
874904 then throw("liquidation will pass")
875- else ([ScriptTransfer(as.caller, bK, I(bC)), IntegerEntry(((g + "_supplied_") + bC), (bL - cl)), IntegerEntry(((g + "_borrowed_") + bD), (bN - ck)), IntegerEntry(("total_supplied_" + bC), (A(("total_supplied_" + bC)) - cl)), IntegerEntry(("total_borrowed_" + bD), (A(("total_borrowed_" + bD)) - ck))] ++ bH)
905+ else ([ScriptTransfer(as.caller, bL, I(bD)), IntegerEntry(((g + "_supplied_") + bD), (bM - cm)), IntegerEntry(((g + "_borrowed_") + bE), (bO - cl)), IntegerEntry(("total_supplied_" + bD), (A(("total_supplied_" + bD)) - cm)), IntegerEntry(("total_borrowed_" + bE), (A(("total_borrowed_" + bE)) - cl))] ++ bI)
876906 }
877907 else throw("Strict value is not equal to itself.")
878908 }
880910
881911
882912 @Callable(as)
883-func getUserCollateral (br,g,cm,cn) = {
884- let bs = K()
885- let bk = split(E("setup_ltvs"), ",")
886- let bl = split(E("setup_lts"), ",")
887- let af = aa(bs[0], "sRate")._2
888- let co = split(cn, ",")
889- func q (r,s) = if ((s >= size(bs)))
913+func getUserCollateral (bs,g,cn,co) = {
914+ let bt = K()
915+ let bl = split(E("setup_ltvs"), ",")
916+ let bm = split(E("setup_lts"), ",")
917+ let af = aa(bt[0], "sRate")._2
918+ let cp = split(co, ",")
919+ func q (r,s) = if ((s >= size(bt)))
890920 then r
891921 else {
892- let cp = A(((g + "_supplied_") + bs[s]))
893- let cq = A(((g + "_borrowed_") + bs[s]))
894- let cr = if ((cn == ""))
895- then if (if ((cq != 0))
922+ let cq = A(((g + "_supplied_") + bt[s]))
923+ let cr = A(((g + "_borrowed_") + bt[s]))
924+ let cs = if ((co == ""))
925+ then if (if ((cr != 0))
896926 then true
897- else (cp != 0))
927+ else (cq != 0))
898928 then true
899929 else false
900930 else true
901- if (cr)
931+ if (cs)
902932 then {
903- let aB = an(bs[s])
904- let az = ah(bs[s])
905- ((r + fraction(fraction(fraction((cp + (if (if (if ((cn != ""))
906- then (co[0] == bs[s])
933+ let aB = an(bt[s])
934+ let az = ah(bt[s])
935+ ((r + fraction(fraction(fraction((cq + (if (if (if ((co != ""))
936+ then (cp[0] == bt[s])
907937 else false)
908- then (co[1] == "supplied")
938+ then (cp[1] == "supplied")
909939 else false)
910- then parseIntValue(co[2])
911- else 0)), af[(s * 3)].value, m), parseIntValue(bk[s]), k), az._1, aB)) - (if (cm)
912- then fraction(fraction(fraction((cq + (if (if (if ((cn != ""))
913- then (co[0] == bs[s])
940+ then parseIntValue(cp[2])
941+ else 0)), af[(s * 3)].value, m), parseIntValue(bl[s]), k), az._1, aB)) - (if (cn)
942+ then fraction(fraction(fraction((cr + (if (if (if ((co != ""))
943+ then (cp[0] == bt[s])
914944 else false)
915- then (co[1] == "borrowed")
945+ then (cp[1] == "borrowed")
916946 else false)
917- then parseIntValue(co[2])
918- else 0)), af[((s * 3) + 1)].value, m), k, parseIntValue(bl[s])), az._2, aB)
947+ then parseIntValue(cp[2])
948+ else 0)), af[((s * 3) + 1)].value, m), k, parseIntValue(bm[s])), az._2, aB)
919949 else 0))
920950 }
921951 else r
922952 }
923953
924- let cs = {
954+ let ct = {
925955 let t = [0, 1, 2, 3, 4, 5, 6]
926956 let u = size(t)
927957 let v = 0
935965
936966 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
937967 }
938- if (br)
939- then throw(toString(cs))
940- else $Tuple2(af, cs)
968+ if (bs)
969+ then throw(toString(ct))
970+ else $Tuple2(af, ct)
941971 }
942972
943973
944974
945975 @Callable(as)
946-func getPrices (br) = {
947- let bs = K()
948- func q (r,s) = if ((s >= size(bs)))
976+func getPrices (bs) = {
977+ let bt = K()
978+ func q (r,s) = if ((s >= size(bt)))
949979 then r
950980 else {
951- let az = ah(bs[s])
981+ let az = ah(bt[s])
952982 ((((r + toString(az._1)) + ",") + toString(az._2)) + "|")
953983 }
954984
955- let cs = {
985+ let ct = {
956986 let t = [0, 1, 2, 3, 4, 5, 6]
957987 let u = size(t)
958988 let v = ""
966996
967997 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
968998 }
969- if (br)
970- then throw(cs)
971- else $Tuple2(nil, cs)
999+ if (bs)
1000+ then throw(ct)
1001+ else $Tuple2(nil, ct)
9721002 }
9731003
9741004
9751005
9761006 @Callable(as)
977-func calculateUtilizationRatio (i,br) = if (br)
1007+func calculateUtilizationRatio (i,bs) = if (bs)
9781008 then throw(toString(ae(i)))
9791009 else $Tuple2(nil, ae(i))
9801010
9811011
9821012
9831013 @Callable(as)
984-func calculateOutdatedUR (i,br) = if (br)
1014+func calculateOutdatedUR (i,bs) = if (bs)
9851015 then throw(toString(N(i)))
9861016 else $Tuple2(nil, N(i))
9871017
9881018
9891019
9901020 @Callable(as)
991-func calculateTokenRates (br) = {
1021+func calculateTokenRates (bs) = {
9921022 func q (r,i) = {
9931023 let af = T(i)
9941024 $Tuple2(((((r._1 + toString(af[1].value)) + "|") + toString(af[0].value)) + ","), (r._2 ++ af))
9951025 }
9961026
997- let bv = {
1027+ let bw = {
9981028 let t = K()
9991029 let u = size(t)
10001030 let v = $Tuple2("", nil)
10081038
10091039 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10101040 }
1011- if (br)
1012- then throw(bv._1)
1013- else $Tuple2(bv._2, bv._1)
1041+ if (bs)
1042+ then throw(bw._1)
1043+ else $Tuple2(bw._2, bw._1)
10141044 }
10151045
10161046
10171047
10181048 @Callable(as)
1019-func calculateTokensInterest (br) = {
1049+func calculateTokensInterest (bs) = {
10201050 func q (r,i) = {
10211051 let S = fraction(P(i), n, k)
10221052 ((r + toString(S)) + ",")
10231053 }
10241054
1025- let bv = {
1055+ let bw = {
10261056 let t = K()
10271057 let u = size(t)
10281058 let v = ""
10361066
10371067 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10381068 }
1039- if (br)
1040- then throw(bv)
1041- else $Tuple2(nil, bv)
1069+ if (bs)
1070+ then throw(bw)
1071+ else $Tuple2(nil, bw)
10421072 }
10431073
10441074
1045-@Verifier(ct)
1046-func cu () = sigVerify(ct.bodyBytes, ct.proofs[0], ct.senderPublicKey)
1075+@Verifier(cu)
1076+func cv () = sigVerify(cu.bodyBytes, cu.proofs[0], cu.senderPublicKey)
10471077
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe')
55
66 let b = 20
77
88 let c = Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
99
1010 let d = "3PPXVKjN6nRMzXeegcYhfiic96pd2c98Ekm"
1111
1212 let e = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
1313
1414 func f (g) = !(if (if ((g != Address(base58'3PCqdm1mAoQqR46oZotFanmqb5CLUvrKEo2')))
1515 then (g != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'))
1616 else false)
1717 then (g != Address(base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3'))
1818 else false)
1919
2020
2121 func h (i) = {
2222 let j = i
2323 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == j))
2424 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2525 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == j))
2626 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2727 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == j))
2828 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2929 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == j))
3030 then $Tuple4(2000000, 25000000, 80000000, 100000000)
3131 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == j))
3232 then $Tuple4(2000000, 25000000, 80000000, 100000000)
3333 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == j))
3434 then $Tuple4(2000000, 40000000, 80000000, 150000000)
3535 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == j))
3636 then $Tuple4(0, 20000000, 80000000, 40000000)
3737 else if (("WAVES" == j))
3838 then $Tuple4(2000000, 30000000, 80000000, 50000000)
3939 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == j))
4040 then $Tuple4(0, 20000000, 80000000, 40000000)
4141 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == j))
4242 then $Tuple4(0, 20000000, 80000000, 100000000)
4343 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == j))
4444 then $Tuple4(0, 30000000, 80000000, 40000000)
4545 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == j))
4646 then $Tuple4(0, 25000000, 80000000, 40000000)
4747 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == j))
4848 then $Tuple4(2000000, 30000000, 80000000, 50000000)
4949 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == j))
5050 then $Tuple4(2000000, 30000000, 80000000, 50000000)
5151 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == j))
5252 then $Tuple4(2000000, 30000000, 80000000, 50000000)
5353 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == j))
5454 then $Tuple4(2000000, 40000000, 80000000, 100000000)
5555 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == j))
5656 then $Tuple4(2000000, 30000000, 80000000, 80000000)
5757 else $Tuple4(0, 20000000, 80000000, 80000000)
5858 }
5959
6060
6161 let k = 100000000
6262
6363 let l = 10000000000
6464
6565 let m = (k * k)
6666
6767 let n = 1440
6868
6969 func o (p) = {
7070 func q (r,s) = ((r + toString(s)) + ",")
7171
7272 let t = p
7373 let u = size(t)
7474 let v = ""
7575 func w (x,y) = if ((y >= u))
7676 then x
7777 else q(x, t[y])
7878
7979 func z (x,y) = if ((y >= u))
8080 then x
8181 else throw("List size exceeds 8")
8282
8383 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
8484 }
8585
8686
8787 func A (B) = {
8888 let j = getInteger(this, B)
8989 if ($isInstanceOf(j, "Int"))
9090 then {
9191 let C = j
9292 C
9393 }
9494 else 0
9595 }
9696
9797
9898 func D (B) = {
9999 let j = getBoolean(this, B)
100100 if ($isInstanceOf(j, "Boolean"))
101101 then {
102102 let C = j
103103 C
104104 }
105105 else false
106106 }
107107
108108
109109 func E (B) = {
110110 let j = getString(this, B)
111111 if ($isInstanceOf(j, "String"))
112112 then {
113113 let C = j
114114 C
115115 }
116116 else ""
117117 }
118118
119119
120120 func F (B) = {
121121 let j = getBinary(this, B)
122122 if ($isInstanceOf(j, "ByteVector"))
123123 then {
124124 let C = j
125125 C
126126 }
127127 else base58''
128128 }
129129
130130
131131 func G (H) = {
132132 let j = H
133133 if ($isInstanceOf(j, "ByteVector"))
134134 then {
135135 let C = j
136136 toBase58String(C)
137137 }
138138 else "WAVES"
139139 }
140140
141141
142142 func I (i) = if ((i == "WAVES"))
143143 then unit
144144 else fromBase58String(i)
145145
146146
147147 func J (i) = if ((i == "WAVES"))
148148 then wavesBalance(this).available
149149 else assetBalance(this, fromBase58String(i))
150150
151151
152152 func K () = split(E("setup_tokens"), ",")
153153
154154
155155 func L () = {
156156 let M = E("setup_maxSupply")
157157 if ((M == ""))
158158 then [-1, -1, -1, -1, -1, -1, -1]
159159 else split(M, ",")
160160 }
161161
162162
163163 func N (i) = {
164164 let O = fraction(A(("total_supplied_" + i)), A((i + "_sRate")), m)
165165 if ((O == 0))
166166 then 0
167167 else fraction(k, fraction(A(("total_borrowed_" + i)), A((i + "_bRate")), m), O)
168168 }
169169
170170
171171 func P (i) = {
172172 let Q = N(i)
173173 let R = h(i)
174174 let S = (R._1 + (if ((R._3 >= Q))
175175 then fraction(Q, R._2, R._3)
176176 else (R._2 + fraction((Q - R._3), R._4, (100000000 - R._3)))))
177177 max([fraction(S, k, (n * 365)), 1])
178178 }
179179
180180
181181 func T (i) = {
182182 let U = P(i)
183183 let Q = N(i)
184184 let V = A("lastRateHeight")
185185 let W = max([A((i + "_bRate")), m])
186186 let X = (W + ((height - V) * U))
187187 let Y = max([A((i + "_sRate")), m])
188188 let Z = (Y + ((((height - V) * fraction(U, Q, k)) * (100 - b)) / 100))
189189 [IntegerEntry((i + "_sRate"), Z), IntegerEntry((i + "_bRate"), X), IntegerEntry("lastRateHeight", height)]
190190 }
191191
192192
193193 func aa (i,ab) = {
194194 func q (r,ac) = {
195195 let ad = T(ac)
196196 $Tuple2(if ((ac != i))
197197 then r._1
198198 else if ((ab == "sRate"))
199199 then ad[0].value
200200 else ad[1].value, (r._2 ++ ad))
201201 }
202202
203203 let t = K()
204204 let u = size(t)
205205 let v = $Tuple2(0, nil)
206206 func w (x,y) = if ((y >= u))
207207 then x
208208 else q(x, t[y])
209209
210210 func z (x,y) = if ((y >= u))
211211 then x
212212 else throw("List size exceeds 8")
213213
214214 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
215215 }
216216
217217
218218 func ae (i) = {
219219 let af = T(i)
220220 let O = fraction(A(("total_supplied_" + i)), af[0].value, m)
221221 fraction(k, fraction(A(("total_borrowed_" + i)), af[1].value, m), O)
222222 }
223223
224224
225225 func ag () = {
226226 func q (r,ac) = (r ++ T(ac))
227227
228228 let t = K()
229229 let u = size(t)
230230 let v = nil
231231 func w (x,y) = if ((y >= u))
232232 then x
233233 else q(x, t[y])
234234
235235 func z (x,y) = if ((y >= u))
236236 then x
237237 else throw("List size exceeds 8")
238238
239239 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
240240 }
241241
242242
243243 func ah (i) = if (if ((i == "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"))
244244 then true
245245 else (i == "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW"))
246246 then $Tuple2(1000000, 1000000)
247247 else {
248248 let ai = {
249249 let aj = invoke(addressFromStringValue(d), "getTWAP60", [i, false], nil)
250250 if ((aj == aj))
251251 then {
252252 let j = aj
253253 if ($isInstanceOf(j, "(Int, Int)"))
254254 then {
255255 let ak = j
256256 ak
257257 }
258258 else throw("error of price oracle")
259259 }
260260 else throw("Strict value is not equal to itself.")
261261 }
262262 let al = getIntegerValue(Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t'), (i + "_twap5B"))
263263 let am = fraction(ai._1, 10000, al)
264- if (if ((am > 9000))
265- then (11000 > am)
264+ if (if ((am > 9300))
265+ then (10700 > am)
266266 else false)
267267 then ai
268268 else throw(((((("oracle prices don't match " + toString(ai._1)) + " vs ") + toString(al)) + " for ") + i))
269269 }
270270
271271
272272 func an (i) = {
273273 let ao = if ((i == "WAVES"))
274274 then 8
275275 else value(assetInfo(fromBase58String(i))).decimals
276276 pow(10, 0, ao, 0, 0, DOWN)
277277 }
278278
279279
280280 func ap (g) = {
281281 let aq = invoke(this, "getUserCollateral", [false, g, true, ""], nil)
282282 if ((aq == aq))
283283 then {
284284 let ar = {
285285 let j = aq
286286 if ($isInstanceOf(j, "Int"))
287287 then {
288288 let ak = j
289289 ak
290290 }
291291 else throw("issue while doing in-dapp invocation")
292292 }
293293 if ((ar == ar))
294294 then ar
295295 else throw("Strict value is not equal to itself.")
296296 }
297297 else throw("Strict value is not equal to itself.")
298298 }
299299
300300
301301 @Callable(as)
302302 func supply () = if (!(D("setup_active")))
303303 then throw("market is stopped")
304304 else if (if ((size(as.payments) != 1))
305305 then true
306306 else (as.payments[0].amount == 0))
307307 then throw("1 payment has to be attached")
308308 else {
309309 let i = G(as.payments[0].assetId)
310310 let at = as.payments[0].amount
311311 let au = aa(i, "sRate")
312312 let av = au._1
313313 let aw = au._2
314314 let ax = fraction(at, m, av, DOWN)
315315 let g = toString(as.caller)
316316 let ay = {
317317 let j = getString(("setup_maxSupply_" + i))
318318 if ($isInstanceOf(j, "String"))
319319 then {
320320 let ak = j
321321 parseIntValue(ak)
322322 }
323323 else A(("setup_maxSupply_" + i))
324324 }
325325 let az = ah(i)
326326 let aA = (A(((g + "_supplied_") + i)) + ax)
327327 let S = aa(i, "sRate")._1
328328 let aB = an(i)
329329 let aC = fraction(fraction(aA, S, m), az._1, aB)
330330 if ((indexOf(E("setup_tokens"), i) == unit))
331331 then throw("this asset is not supported by the market")
332332 else if (if ((ay != 0))
333333 then (aC > ay)
334334 else false)
335335 then throw("max total supply for this token reached in the pool")
336336 else ([IntegerEntry(((g + "_supplied_") + i), aA), IntegerEntry(("total_supplied_" + i), (A(("total_supplied_" + i)) + ax))] ++ aw)
337337 }
338338
339339
340340
341341 @Callable(as)
342342 func withdraw (i,at) = {
343343 let aD = aa(i, "sRate")
344344 let av = aD._1
345345 let aw = aD._2
346346 let ax = fraction(at, m, av, CEILING)
347347 let g = toString(as.caller)
348348 let aE = A(("total_supplied_" + i))
349349 let aF = A(("total_borrowed_" + i))
350350 let aG = A(((g + "_supplied_") + i))
351351 let aH = A(((g + "_borrowed_") + i))
352352 let aI = invoke(this, "getUserCollateral", [false, g, true, ((i + ",supplied,") + toString(-(ax)))], nil)
353353 if ((aI == aI))
354354 then {
355355 let aJ = {
356356 let j = aI
357357 if ($isInstanceOf(j, "Int"))
358358 then {
359359 let ak = j
360360 ak
361361 }
362362 else throw("can't get user collateral value")
363363 }
364364 if (!(D("setup_active")))
365365 then throw("market is stopped")
366366 else if ((0 > aJ))
367367 then throw("you dont have enough collateral for this operation")
368368 else if ((ax > (aE - aF)))
369369 then throw("this amount is not available on the market")
370370 else if ((ax > (aG - aH)))
371371 then throw("this amount is not available for this user")
372372 else ([IntegerEntry(((g + "_supplied_") + i), (A(((g + "_supplied_") + i)) - ax)), IntegerEntry(("total_supplied_" + i), (A(("total_supplied_" + i)) - ax)), ScriptTransfer(as.caller, at, I(i))] ++ aw)
373373 }
374374 else throw("Strict value is not equal to itself.")
375375 }
376376
377377
378378
379379 @Callable(as)
380380 func borrow (i,at) = {
381381 let g = toString(as.caller)
382382 let aK = aa(i, "bRate")
383383 let aL = aK._1
384384 let aw = aK._2
385385 let ax = fraction(at, m, aL, CEILING)
386386 let aI = invoke(this, "getUserCollateral", [false, g, true, ((i + ",borrowed,") + toString(ax))], nil)
387387 if ((aI == aI))
388388 then {
389389 let aJ = {
390390 let j = aI
391391 if ($isInstanceOf(j, "Int"))
392392 then {
393393 let ak = j
394394 ak
395395 }
396396 else throw("can't get user collateral value")
397397 }
398398 if (!(D("setup_active")))
399399 then throw("market is stopped")
400400 else if ((0 > aJ))
401401 then throw("you have to supply more to borrow")
402402 else {
403403 let aE = A(("total_supplied_" + i))
404404 let aF = A(("total_borrowed_" + i))
405405 let aH = A(((g + "_borrowed_") + i))
406406 if ((ax > (aE - aF)))
407407 then throw("this amount is not available")
408408 else ([IntegerEntry(((g + "_borrowed_") + i), (aH + ax)), IntegerEntry(("total_borrowed_" + i), (aF + ax)), ScriptTransfer(as.caller, at, I(i))] ++ aw)
409409 }
410410 }
411411 else throw("Strict value is not equal to itself.")
412412 }
413413
414414
415415
416416 @Callable(as)
417417 func repay () = if (!(D("setup_active")))
418418 then throw("market is stopped")
419419 else if (if ((size(as.payments) != 1))
420420 then true
421421 else (as.payments[0].amount == 0))
422422 then throw("1 payment has to be attached")
423423 else {
424424 let i = G(as.payments[0].assetId)
425425 let at = as.payments[0].amount
426426 let aM = aa(i, "bRate")
427427 let aL = aM._1
428428 let aw = aM._2
429429 let ax = fraction(at, m, aL, CEILING)
430430 let g = toString(as.caller)
431431 let aE = A(("total_supplied_" + i))
432432 let aF = A(("total_borrowed_" + i))
433433 let aH = A(((g + "_borrowed_") + i))
434434 let aN = (aH - ax)
435435 let aO = if ((aN >= 0))
436436 then ax
437437 else aH
438438 if ((indexOf(E("setup_tokens"), i) == unit))
439439 then throw("this asset is not supported by the market")
440440 else (([IntegerEntry(((g + "_borrowed_") + i), (aH - aO)), IntegerEntry(("total_borrowed_" + i), (aF - aO))] ++ aw) ++ (if ((aN >= 0))
441441 then nil
442442 else [ScriptTransfer(as.caller, -(aN), as.payments[0].assetId)]))
443443 }
444444
445445
446446
447447 @Callable(as)
448+func repayFor (g) = if (!(D("setup_active")))
449+ then throw("market is stopped")
450+ else if (if ((size(as.payments) != 1))
451+ then true
452+ else (as.payments[0].amount == 0))
453+ then throw("1 payment has to be attached")
454+ else {
455+ let i = G(as.payments[0].assetId)
456+ let at = as.payments[0].amount
457+ let aP = aa(i, "bRate")
458+ let aL = aP._1
459+ let aw = aP._2
460+ let ax = fraction(at, m, aL, CEILING)
461+ let aE = A(("total_supplied_" + i))
462+ let aF = A(("total_borrowed_" + i))
463+ let aH = A(((g + "_borrowed_") + i))
464+ let aN = (aH - ax)
465+ let aO = if ((aN >= 0))
466+ then ax
467+ else aH
468+ if ((indexOf(E("setup_tokens"), i) == unit))
469+ then throw("this asset is not supported by the market")
470+ else (([IntegerEntry(((g + "_borrowed_") + i), (aH - aO)), IntegerEntry(("total_borrowed_" + i), (aF - aO))] ++ aw) ++ (if ((aN >= 0))
471+ then nil
472+ else [ScriptTransfer(as.caller, -(aN), as.payments[0].assetId)]))
473+ }
474+
475+
476+
477+@Callable(as)
448478 func stakeTokenAll (i) = if ((as.caller != this))
449479 then throw("only for internal smart contract invocations")
450480 else {
451481 let ax = J(i)
452- let aP = invoke(this, "stakeToken", [i, ax], nil)
453- if ((aP == aP))
482+ let aQ = invoke(this, "stakeToken", [i, ax], nil)
483+ if ((aQ == aQ))
454484 then nil
455485 else throw("Strict value is not equal to itself.")
456486 }
457487
458488
459489
460490 @Callable(as)
461491 func stakeToken (i,ax) = if ((as.caller != this))
462492 then throw("only for internal smart contract invocations")
463493 else if ((i == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
464494 then {
465- let aQ = A("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
466- let aP = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ax)])
467- if ((aP == aP))
468- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aQ + ax))]
495+ let aR = A("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
496+ let aQ = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ax)])
497+ if ((aQ == aQ))
498+ then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aR + ax))]
469499 else throw("Strict value is not equal to itself.")
470500 }
471501 else if ((i == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
472502 then {
473- let aQ = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
474- let aP = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ax)])
475- if ((aP == aP))
476- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aQ + ax))]
503+ let aR = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
504+ let aQ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ax)])
505+ if ((aQ == aQ))
506+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aR + ax))]
477507 else throw("Strict value is not equal to itself.")
478508 }
479509 else if ((i == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
480510 then {
481- let aQ = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
482- let aP = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ax)])
483- if ((aP == aP))
484- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aQ + ax))]
511+ let aR = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
512+ let aQ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ax)])
513+ if ((aQ == aQ))
514+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aR + ax))]
485515 else throw("Strict value is not equal to itself.")
486516 }
487517 else nil
488518
489519
490520
491521 @Callable(as)
492522 func unstakeToken (i,ax) = if ((as.caller != this))
493523 then throw("only for internal smart contract invocations")
494524 else if ((i == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
495525 then {
496- let aQ = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
497- let aP = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ax], nil)
498- if ((aP == aP))
499- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aQ - ax))]
526+ let aR = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
527+ let aQ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ax], nil)
528+ if ((aQ == aQ))
529+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aR - ax))]
500530 else throw("Strict value is not equal to itself.")
501531 }
502532 else if ((i == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
503533 then {
504- let aQ = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
505- let aP = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ax], nil)
506- if ((aP == aP))
534+ let aR = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
535+ let aQ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ax], nil)
536+ if ((aQ == aQ))
507537 then {
508- let aR = J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
509- if ((aR == aR))
538+ let aS = J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
539+ if ((aS == aS))
510540 then {
511- let aS = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
512- if ((aS == aS))
541+ let aT = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
542+ if ((aT == aT))
513543 then {
514- let aT = {
515- let j = aS
544+ let aU = {
545+ let j = aT
516546 if ($isInstanceOf(j, "List[Any]"))
517547 then {
518548 let ak = j
519- let aU = ak[1]
520- let aV = aU
521- if ($isInstanceOf(aV, "String"))
549+ let aV = ak[1]
550+ let aW = aV
551+ if ($isInstanceOf(aW, "String"))
522552 then {
523- let aU = aV
524- let aW = parseIntValue(split(split(aU, "_")[1], ":")[1])
525- let aX = parseIntValue(split(split(aU, "_")[0], ":")[1])
526- if (if ((aW != 0))
553+ let aV = aW
554+ let aX = parseIntValue(split(split(aV, "_")[1], ":")[1])
555+ let aY = parseIntValue(split(split(aV, "_")[0], ":")[1])
556+ if (if ((aX != 0))
527557 then true
528- else (aX != 0))
558+ else (aY != 0))
529559 then {
530- let aY = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
531- if ((aY == aY))
560+ let aZ = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
561+ if ((aZ == aZ))
532562 then {
533- let aZ = J("WAVES")
534- if ((aZ == aZ))
563+ let ba = J("WAVES")
564+ if ((ba == ba))
535565 then {
536566 let aj = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
537567 if ((aj == aj))
538568 then {
539- let ba = J("WAVES")
540- if ((ba == ba))
569+ let bb = J("WAVES")
570+ if ((bb == bb))
541571 then {
542- let bb = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (ba - aZ))])
543- if ((bb == bb))
572+ let bc = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bb - ba))])
573+ if ((bc == bc))
544574 then {
545- let bc = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
546- if ((bc == bc))
575+ let bd = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
576+ if ((bd == bd))
547577 then {
548- let bd = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bc - aY))])
549- if ((bd == bd))
578+ let be = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bd - aZ))])
579+ if ((be == be))
550580 then {
551- let be = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aR)], nil)
552- if ((be == be))
581+ let bf = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aS)], nil)
582+ if ((bf == bf))
553583 then 2
554584 else throw("Strict value is not equal to itself.")
555585 }
556586 else throw("Strict value is not equal to itself.")
557587 }
558588 else throw("Strict value is not equal to itself.")
559589 }
560590 else throw("Strict value is not equal to itself.")
561591 }
562592 else throw("Strict value is not equal to itself.")
563593 }
564594 else throw("Strict value is not equal to itself.")
565595 }
566596 else throw("Strict value is not equal to itself.")
567597 }
568598 else throw("Strict value is not equal to itself.")
569599 }
570600 else 1
571601 }
572602 else 1
573603 }
574604 else 0
575605 }
576- if ((aT == aT))
577- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aQ - ax))]
606+ if ((aU == aU))
607+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aR - ax))]
578608 else throw("Strict value is not equal to itself.")
579609 }
580610 else throw("Strict value is not equal to itself.")
581611 }
582612 else throw("Strict value is not equal to itself.")
583613 }
584614 else throw("Strict value is not equal to itself.")
585615 }
586616 else nil
587617
588618
589619
590620 @Callable(as)
591621 func addInterest (i,ax) = if ((as.caller != this))
592622 then throw("only for self invocation")
593623 else {
594- let bf = A(("autostake_lastEarned_" + i))
595- let bg = A(("autostake_lastBlock_" + i))
596- let bh = fraction(ax, 80, 100)
597- let bi = if (if ((bg == height))
624+ let bg = A(("autostake_lastEarned_" + i))
625+ let bh = A(("autostake_lastBlock_" + i))
626+ let bi = fraction(ax, 80, 100)
627+ let bj = if (if ((bh == height))
598628 then true
599629 else (ax == 0))
600630 then nil
601- else [IntegerEntry(("autostake_preLastEarned_" + i), bf), IntegerEntry(("autostake_preLastBlock_" + i), bg), IntegerEntry(("autostake_lastEarned_" + i), (bf + bh)), IntegerEntry(("autostake_lastBlock_" + i), height)]
602- (bi ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, bh, A(("total_supplied_" + i)))))])
631+ else [IntegerEntry(("autostake_preLastEarned_" + i), bg), IntegerEntry(("autostake_preLastBlock_" + i), bh), IntegerEntry(("autostake_lastEarned_" + i), (bg + bi)), IntegerEntry(("autostake_lastBlock_" + i), height)]
632+ (bj ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, bi, A(("total_supplied_" + i)))))])
603633 }
604634
605635
606636
607637 @Callable(as)
608638 func addInterestEXTERNAL () = {
609639 let ax = fraction(as.payments[0].amount, 80, 100)
610640 let H = as.payments[0].assetId
611641 let i = G(H)
612- let bf = A(("autostake_lastEarned_" + i))
613- let bg = A(("autostake_lastBlock_" + i))
614- let bi = if (if ((bg == height))
642+ let bg = A(("autostake_lastEarned_" + i))
643+ let bh = A(("autostake_lastBlock_" + i))
644+ let bj = if (if ((bh == height))
615645 then true
616646 else (ax == 0))
617647 then nil
618- else [IntegerEntry(("autostake_preLastEarned_" + i), bf), IntegerEntry(("autostake_preLastBlock_" + i), bg), IntegerEntry(("autostake_lastEarned_" + i), (bf + ax)), IntegerEntry(("autostake_lastBlock_" + i), height)]
619- (bi ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, ax, A(("total_supplied_" + i)))))])
648+ else [IntegerEntry(("autostake_preLastEarned_" + i), bg), IntegerEntry(("autostake_preLastBlock_" + i), bh), IntegerEntry(("autostake_lastEarned_" + i), (bg + ax)), IntegerEntry(("autostake_lastBlock_" + i), height)]
649+ (bj ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, ax, A(("total_supplied_" + i)))))])
620650 }
621651
622652
623653
624654 @Callable(as)
625-func preInit (bj,bk,bl,bm) = {
655+func preInit (bk,bl,bm,bn) = {
626656 func q (r,ac) = (r ++ [IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)])
627657
628658 if ((as.caller != this))
629659 then throw("admin only")
630660 else {
631661 let af = {
632- let t = split(bj, ",")
662+ let t = split(bk, ",")
633663 let u = size(t)
634664 let v = nil
635665 func w (x,y) = if ((y >= u))
636666 then x
637667 else q(x, t[y])
638668
639669 func z (x,y) = if ((y >= u))
640670 then x
641671 else throw("List size exceeds 8")
642672
643673 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
644674 }
645- ([StringEntry("setup_tokens", bj), StringEntry("setup_ltvs", bk), StringEntry("setup_lts", bl), StringEntry("setup_penalties", bm), BooleanEntry("setup_active", true)] ++ af)
675+ ([StringEntry("setup_tokens", bk), StringEntry("setup_ltvs", bl), StringEntry("setup_lts", bm), StringEntry("setup_penalties", bn), BooleanEntry("setup_active", true)] ++ af)
646676 }
647677 }
648678
649679
650680
651681 @Callable(as)
652-func initNewToken (ac,bn,bo,bp) = if ((as.caller != this))
682+func initNewToken (ac,bo,bp,bq) = if ((as.caller != this))
653683 then throw("admin only")
654- else [StringEntry("setup_tokens", ((E("setup_tokens") + ",") + ac)), StringEntry("setup_ltvs", ((E("setup_ltvs") + ",") + bn)), StringEntry("setup_lts", ((E("setup_lts") + ",") + bo)), StringEntry("setup_penalties", ((E("setup_penalties") + ",") + bp)), IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)]
684+ else [StringEntry("setup_tokens", ((E("setup_tokens") + ",") + ac)), StringEntry("setup_ltvs", ((E("setup_ltvs") + ",") + bo)), StringEntry("setup_lts", ((E("setup_lts") + ",") + bp)), StringEntry("setup_penalties", ((E("setup_penalties") + ",") + bq)), IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)]
655685
656686
657687
658688 @Callable(as)
659-func updateParameter (B,bq) = if (if ((as.caller != this))
689+func updateParameter (B,br) = if (if ((as.caller != this))
660690 then (as.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
661691 else false)
662692 then throw("admin only")
663- else [IntegerEntry(B, parseIntValue(bq))]
693+ else [IntegerEntry(B, parseIntValue(br))]
664694
665695
666696
667697 @Callable(as)
668-func updateString (B,bq) = if (if ((as.caller != this))
698+func updateString (B,br) = if (if ((as.caller != this))
669699 then (as.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
670700 else false)
671701 then throw("admin only")
672- else [StringEntry(B, bq)]
702+ else [StringEntry(B, br)]
673703
674704
675705
676706 @Callable(as)
677-func claimToReserveFund (br) = {
678- let bs = K()
679- let af = aa(bs[0], "sRate")._2
707+func claimToReserveFund (bs) = {
708+ let bt = K()
709+ let af = aa(bt[0], "sRate")._2
680710 let p = [0, 1, 2, 3, 4, 5, 6]
681- func q (r,bt) = if ((bt >= size(bs)))
711+ func q (r,bu) = if ((bu >= size(bt)))
682712 then r
683713 else {
684- let i = bs[bt]
685- let bu = E(("autostake_amount_" + i))
686- let ax = ((((J(i) + A(("autostake_amount_" + i))) + (if ((bu != ""))
687- then parseIntValue(bu)
688- else 0)) + fraction(A(("total_borrowed_" + i)), af[((bt * 3) + 1)].value, m)) - fraction(A(("total_supplied_" + i)), af[(bt * 3)].value, m))
714+ let i = bt[bu]
715+ let bv = E(("autostake_amount_" + i))
716+ let ax = ((((J(i) + A(("autostake_amount_" + i))) + (if ((bv != ""))
717+ then parseIntValue(bv)
718+ else 0)) + fraction(A(("total_borrowed_" + i)), af[((bu * 3) + 1)].value, m)) - fraction(A(("total_supplied_" + i)), af[(bu * 3)].value, m))
689719 (r ++ [ax])
690720 }
691721
692- let bv = {
722+ let bw = {
693723 let t = p
694724 let u = size(t)
695725 let v = nil
696726 func w (x,y) = if ((y >= u))
697727 then x
698728 else q(x, t[y])
699729
700730 func z (x,y) = if ((y >= u))
701731 then x
702732 else throw("List size exceeds 8")
703733
704734 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
705735 }
706- func bw (r,bt) = if ((bt >= size(bs)))
736+ func bx (r,bu) = if ((bu >= size(bt)))
707737 then r
708738 else {
709- let i = bs[bt]
710- (r ++ [ScriptTransfer(a, max([bv[bt], 0]), I(i))])
739+ let i = bt[bu]
740+ (r ++ [ScriptTransfer(a, max([bw[bu], 0]), I(i))])
711741 }
712742
713- if (br)
714- then throw(o(bv))
743+ if (bs)
744+ then throw(o(bw))
715745 else $Tuple2({
716746 let t = p
717747 let u = size(t)
718748 let v = nil
719- func bx (x,y) = if ((y >= u))
749+ func by (x,y) = if ((y >= u))
720750 then x
721- else bw(x, t[y])
751+ else bx(x, t[y])
722752
723- func by (x,y) = if ((y >= u))
753+ func bz (x,y) = if ((y >= u))
724754 then x
725755 else throw("List size exceeds 8")
726756
727- by(bx(bx(bx(bx(bx(bx(bx(bx(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
728- }, bv)
757+ bz(by(by(by(by(by(by(by(by(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
758+ }, bw)
729759 }
730760
731761
732762
733763 @Callable(as)
734764 func reSetup (i) = {
735- let bz = A("resetup_lastUpdate")
736- if ((n > (height - bz)))
765+ let bA = A("resetup_lastUpdate")
766+ if ((n > (height - bA)))
737767 then throw("can be updated only once per day")
738768 else {
739- let bl = split(E("setup_lts"), ",")
740- let bs = K()
769+ let bm = split(E("setup_lts"), ",")
770+ let bt = K()
741771 let Q = ae(i)
742- let bA = A((("setup_" + i) + "_tempLT"))
743- let bo = parseIntValue(bs[value(indexOf(bs, i))])
772+ let bB = A((("setup_" + i) + "_tempLT"))
773+ let bp = parseIntValue(bt[value(indexOf(bt, i))])
744774 if ((Q > 90000000))
745- then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bA, 9975, 10000))]
746- else if (if ((bo > bA))
775+ then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bB, 9975, 10000))]
776+ else if (if ((bp > bB))
747777 then (90000000 > Q)
748778 else false)
749- then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bA, 10025, 10000))]
779+ then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bB, 10025, 10000))]
750780 else nil
751781 }
752782 }
753783
754784
755785
756786 @Callable(as)
757-func shutdown (bB) = if ((indexOf(e, as.caller.bytes) == unit))
787+func shutdown (bC) = if ((indexOf(e, as.caller.bytes) == unit))
758788 then throw("user not in a whitelist")
759- else [BooleanEntry("setup_active", !(bB))]
789+ else [BooleanEntry("setup_active", !(bC))]
760790
761791
762792
763793 @Callable(as)
764-func liquidate (br,g,at,bC,bD,bE) = if (!(f(as.caller)))
794+func liquidate (bs,g,at,bD,bE,bF) = if (!(f(as.caller)))
765795 then throw("temporarily available for whitelist only")
766796 else if (!(D("setup_active")))
767797 then throw("market is stopped")
768798 else {
769- let bF = ap(g)
770- if ((bF == bF))
799+ let bG = ap(g)
800+ if ((bG == bG))
771801 then {
772- let bG = aa(bC, "sRate")
773- let av = bG._1
774- let bH = bG._2
775- let bI = aa(bD, "bRate")
776- let aL = bI._1
777- let bJ = bI._2
778- let bK = fraction(at, m, av)
779- let bL = A(((g + "_supplied_") + bC))
780- let bM = A(((g + "_borrowed_") + bD))
781- let bN = if ((bM > 0))
782- then bM
802+ let bH = aa(bD, "sRate")
803+ let av = bH._1
804+ let bI = bH._2
805+ let bJ = aa(bE, "bRate")
806+ let aL = bJ._1
807+ let bK = bJ._2
808+ let bL = fraction(at, m, av)
809+ let bM = A(((g + "_supplied_") + bD))
810+ let bN = A(((g + "_borrowed_") + bE))
811+ let bO = if ((bN > 0))
812+ then bN
783813 else throw("user has no borrow in this token")
784- if ((bF > 0))
814+ if ((bG > 0))
785815 then throw("user can't be liquidated")
786- else if ((bK > bL))
816+ else if ((bL > bM))
787817 then throw("position to liquidate is bigger than user's supply")
788818 else {
789- let bO = J(bC)
790- if ((bO == bO))
819+ let bP = J(bD)
820+ if ((bP == bP))
791821 then {
792- let bP = J(bD)
793- if ((bP == bP))
822+ let bQ = J(bE)
823+ if ((bQ == bQ))
794824 then {
795- let bQ = invoke(c, "swap", [bE, 0], [AttachedPayment(I(bC), at)])
796- if ((bQ == bQ))
825+ let bR = invoke(c, "swap", [bF, 0], [AttachedPayment(I(bD), at)])
826+ if ((bR == bR))
797827 then {
798- let bR = (bO - J(bC))
799- if ((bR == bR))
828+ let bS = (bP - J(bD))
829+ if ((bS == bS))
800830 then {
801- let bS = (J(bD) - bP)
802- if ((bS == bS))
831+ let bT = (J(bE) - bQ)
832+ if ((bT == bT))
803833 then {
804- let bT = ah(bC)._1
805- let bU = an(bC)
806- let bV = fraction(bR, bT, bU)
807- let bW = ah(bD)._2
808- let bX = an(bD)
809- let bY = fraction(bS, bW, bX)
810- let bp = parseIntValue(split(E("setup_penalties"), ",")[value(indexOf(K(), bD))])
811- let bZ = (bY - fraction(bV, (k - bp), k))
812- let ca = fraction(bR, m, av)
813- let cb = fraction(fraction(bS, m, aL), (k - fraction(bZ, k, bY)), k)
814- if ((bR > at))
834+ let bU = ah(bD)._1
835+ let bV = an(bD)
836+ let bW = fraction(bS, bU, bV)
837+ let bX = ah(bE)._2
838+ let bY = an(bE)
839+ let bZ = fraction(bT, bX, bY)
840+ let bq = parseIntValue(split(E("setup_penalties"), ",")[value(indexOf(K(), bE))])
841+ let ca = (bZ - fraction(bW, (k - bq), k))
842+ let cb = fraction(bS, m, av)
843+ let cc = fraction(fraction(bT, m, aL), (k - fraction(ca, k, bZ)), k)
844+ if ((bS > at))
815845 then throw("more assets exchanged than expected")
816- else if ((0 > bZ))
846+ else if ((0 > ca))
817847 then throw("price impact is bigger than liquidation penalty")
818- else [IntegerEntry(((g + "_supplied_") + bC), (bL - ca)), IntegerEntry(((g + "_borrowed_") + bD), (bN - cb)), IntegerEntry(("total_supplied_" + bC), (A(("total_supplied_" + bC)) - ca)), IntegerEntry(("total_borrowed_" + bD), (A(("total_borrowed_" + bD)) - cb))]
848+ else [IntegerEntry(((g + "_supplied_") + bD), (bM - cb)), IntegerEntry(((g + "_borrowed_") + bE), (bO - cc)), IntegerEntry(("total_supplied_" + bD), (A(("total_supplied_" + bD)) - cb)), IntegerEntry(("total_borrowed_" + bE), (A(("total_borrowed_" + bE)) - cc))]
819849 }
820850 else throw("Strict value is not equal to itself.")
821851 }
822852 else throw("Strict value is not equal to itself.")
823853 }
824854 else throw("Strict value is not equal to itself.")
825855 }
826856 else throw("Strict value is not equal to itself.")
827857 }
828858 else throw("Strict value is not equal to itself.")
829859 }
830860 }
831861 else throw("Strict value is not equal to itself.")
832862 }
833863
834864
835865
836866 @Callable(as)
837-func liquidateV2 (br,g,bC) = if (!(f(as.caller)))
867+func liquidateV2 (bs,g,bD) = if (!(f(as.caller)))
838868 then throw("temporarily available for whitelist only")
839869 else if (!(D("setup_active")))
840870 then throw("market is stopped")
841871 else {
842- let cc = as.payments[0].assetId
843- let bD = G(cc)
844- let cd = as.payments[0].amount
845- let bF = ap(g)
846- if ((bF == bF))
847- then if ((bF > 0))
872+ let cd = as.payments[0].assetId
873+ let bE = G(cd)
874+ let ce = as.payments[0].amount
875+ let bG = ap(g)
876+ if ((bG == bG))
877+ then if ((bG > 0))
848878 then throw("user can't be liquidated")
849879 else {
850- let ce = K()
851- let cf = value(indexOf(ce, bD))
852- let cg = value(indexOf(ce, bC))
853- let ch = aa(bD, "bRate")
854- let aL = ch._1
855- let bH = ch._2
856- let bW = ah(bD)._2
857- let bX = an(bD)
858- let ci = fraction(cd, bW, bX)
859- let bp = parseIntValue(value(split(E("setup_penalties"), ",")[cf]))
860- let bT = ah(bC)._1
861- let bU = an(bC)
862- let cj = fraction(ci, (k + bp), k)
863- let bK = fraction(cj, bU, bT)
864- let ck = fraction(cd, m, aL)
865- let cl = fraction(bK, m, bH[((cg * 3) + 1)].value)
866- let bL = A(((g + "_supplied_") + bC))
867- let bM = A(((g + "_borrowed_") + bD))
868- let bN = if ((bM > 0))
869- then bM
880+ let cf = K()
881+ let cg = value(indexOf(cf, bE))
882+ let ch = value(indexOf(cf, bD))
883+ let ci = aa(bE, "bRate")
884+ let aL = ci._1
885+ let bI = ci._2
886+ let bX = ah(bE)._2
887+ let bY = an(bE)
888+ let cj = fraction(ce, bX, bY)
889+ let bq = parseIntValue(value(split(E("setup_penalties"), ",")[cg]))
890+ let bU = ah(bD)._1
891+ let bV = an(bD)
892+ let ck = fraction(cj, (k + bq), k)
893+ let bL = fraction(ck, bV, bU)
894+ let cl = fraction(ce, m, aL)
895+ let cm = fraction(bL, m, bI[((ch * 3) + 1)].value)
896+ let bM = A(((g + "_supplied_") + bD))
897+ let bN = A(((g + "_borrowed_") + bE))
898+ let bO = if ((bN > 0))
899+ then bN
870900 else throw("user has no borrow in this token")
871- if ((cl > bL))
901+ if ((cm > bM))
872902 then throw("position to liquidate is bigger than user's supply")
873- else if (br)
903+ else if (bs)
874904 then throw("liquidation will pass")
875- else ([ScriptTransfer(as.caller, bK, I(bC)), IntegerEntry(((g + "_supplied_") + bC), (bL - cl)), IntegerEntry(((g + "_borrowed_") + bD), (bN - ck)), IntegerEntry(("total_supplied_" + bC), (A(("total_supplied_" + bC)) - cl)), IntegerEntry(("total_borrowed_" + bD), (A(("total_borrowed_" + bD)) - ck))] ++ bH)
905+ else ([ScriptTransfer(as.caller, bL, I(bD)), IntegerEntry(((g + "_supplied_") + bD), (bM - cm)), IntegerEntry(((g + "_borrowed_") + bE), (bO - cl)), IntegerEntry(("total_supplied_" + bD), (A(("total_supplied_" + bD)) - cm)), IntegerEntry(("total_borrowed_" + bE), (A(("total_borrowed_" + bE)) - cl))] ++ bI)
876906 }
877907 else throw("Strict value is not equal to itself.")
878908 }
879909
880910
881911
882912 @Callable(as)
883-func getUserCollateral (br,g,cm,cn) = {
884- let bs = K()
885- let bk = split(E("setup_ltvs"), ",")
886- let bl = split(E("setup_lts"), ",")
887- let af = aa(bs[0], "sRate")._2
888- let co = split(cn, ",")
889- func q (r,s) = if ((s >= size(bs)))
913+func getUserCollateral (bs,g,cn,co) = {
914+ let bt = K()
915+ let bl = split(E("setup_ltvs"), ",")
916+ let bm = split(E("setup_lts"), ",")
917+ let af = aa(bt[0], "sRate")._2
918+ let cp = split(co, ",")
919+ func q (r,s) = if ((s >= size(bt)))
890920 then r
891921 else {
892- let cp = A(((g + "_supplied_") + bs[s]))
893- let cq = A(((g + "_borrowed_") + bs[s]))
894- let cr = if ((cn == ""))
895- then if (if ((cq != 0))
922+ let cq = A(((g + "_supplied_") + bt[s]))
923+ let cr = A(((g + "_borrowed_") + bt[s]))
924+ let cs = if ((co == ""))
925+ then if (if ((cr != 0))
896926 then true
897- else (cp != 0))
927+ else (cq != 0))
898928 then true
899929 else false
900930 else true
901- if (cr)
931+ if (cs)
902932 then {
903- let aB = an(bs[s])
904- let az = ah(bs[s])
905- ((r + fraction(fraction(fraction((cp + (if (if (if ((cn != ""))
906- then (co[0] == bs[s])
933+ let aB = an(bt[s])
934+ let az = ah(bt[s])
935+ ((r + fraction(fraction(fraction((cq + (if (if (if ((co != ""))
936+ then (cp[0] == bt[s])
907937 else false)
908- then (co[1] == "supplied")
938+ then (cp[1] == "supplied")
909939 else false)
910- then parseIntValue(co[2])
911- else 0)), af[(s * 3)].value, m), parseIntValue(bk[s]), k), az._1, aB)) - (if (cm)
912- then fraction(fraction(fraction((cq + (if (if (if ((cn != ""))
913- then (co[0] == bs[s])
940+ then parseIntValue(cp[2])
941+ else 0)), af[(s * 3)].value, m), parseIntValue(bl[s]), k), az._1, aB)) - (if (cn)
942+ then fraction(fraction(fraction((cr + (if (if (if ((co != ""))
943+ then (cp[0] == bt[s])
914944 else false)
915- then (co[1] == "borrowed")
945+ then (cp[1] == "borrowed")
916946 else false)
917- then parseIntValue(co[2])
918- else 0)), af[((s * 3) + 1)].value, m), k, parseIntValue(bl[s])), az._2, aB)
947+ then parseIntValue(cp[2])
948+ else 0)), af[((s * 3) + 1)].value, m), k, parseIntValue(bm[s])), az._2, aB)
919949 else 0))
920950 }
921951 else r
922952 }
923953
924- let cs = {
954+ let ct = {
925955 let t = [0, 1, 2, 3, 4, 5, 6]
926956 let u = size(t)
927957 let v = 0
928958 func w (x,y) = if ((y >= u))
929959 then x
930960 else q(x, t[y])
931961
932962 func z (x,y) = if ((y >= u))
933963 then x
934964 else throw("List size exceeds 8")
935965
936966 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
937967 }
938- if (br)
939- then throw(toString(cs))
940- else $Tuple2(af, cs)
968+ if (bs)
969+ then throw(toString(ct))
970+ else $Tuple2(af, ct)
941971 }
942972
943973
944974
945975 @Callable(as)
946-func getPrices (br) = {
947- let bs = K()
948- func q (r,s) = if ((s >= size(bs)))
976+func getPrices (bs) = {
977+ let bt = K()
978+ func q (r,s) = if ((s >= size(bt)))
949979 then r
950980 else {
951- let az = ah(bs[s])
981+ let az = ah(bt[s])
952982 ((((r + toString(az._1)) + ",") + toString(az._2)) + "|")
953983 }
954984
955- let cs = {
985+ let ct = {
956986 let t = [0, 1, 2, 3, 4, 5, 6]
957987 let u = size(t)
958988 let v = ""
959989 func w (x,y) = if ((y >= u))
960990 then x
961991 else q(x, t[y])
962992
963993 func z (x,y) = if ((y >= u))
964994 then x
965995 else throw("List size exceeds 8")
966996
967997 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
968998 }
969- if (br)
970- then throw(cs)
971- else $Tuple2(nil, cs)
999+ if (bs)
1000+ then throw(ct)
1001+ else $Tuple2(nil, ct)
9721002 }
9731003
9741004
9751005
9761006 @Callable(as)
977-func calculateUtilizationRatio (i,br) = if (br)
1007+func calculateUtilizationRatio (i,bs) = if (bs)
9781008 then throw(toString(ae(i)))
9791009 else $Tuple2(nil, ae(i))
9801010
9811011
9821012
9831013 @Callable(as)
984-func calculateOutdatedUR (i,br) = if (br)
1014+func calculateOutdatedUR (i,bs) = if (bs)
9851015 then throw(toString(N(i)))
9861016 else $Tuple2(nil, N(i))
9871017
9881018
9891019
9901020 @Callable(as)
991-func calculateTokenRates (br) = {
1021+func calculateTokenRates (bs) = {
9921022 func q (r,i) = {
9931023 let af = T(i)
9941024 $Tuple2(((((r._1 + toString(af[1].value)) + "|") + toString(af[0].value)) + ","), (r._2 ++ af))
9951025 }
9961026
997- let bv = {
1027+ let bw = {
9981028 let t = K()
9991029 let u = size(t)
10001030 let v = $Tuple2("", nil)
10011031 func w (x,y) = if ((y >= u))
10021032 then x
10031033 else q(x, t[y])
10041034
10051035 func z (x,y) = if ((y >= u))
10061036 then x
10071037 else throw("List size exceeds 8")
10081038
10091039 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10101040 }
1011- if (br)
1012- then throw(bv._1)
1013- else $Tuple2(bv._2, bv._1)
1041+ if (bs)
1042+ then throw(bw._1)
1043+ else $Tuple2(bw._2, bw._1)
10141044 }
10151045
10161046
10171047
10181048 @Callable(as)
1019-func calculateTokensInterest (br) = {
1049+func calculateTokensInterest (bs) = {
10201050 func q (r,i) = {
10211051 let S = fraction(P(i), n, k)
10221052 ((r + toString(S)) + ",")
10231053 }
10241054
1025- let bv = {
1055+ let bw = {
10261056 let t = K()
10271057 let u = size(t)
10281058 let v = ""
10291059 func w (x,y) = if ((y >= u))
10301060 then x
10311061 else q(x, t[y])
10321062
10331063 func z (x,y) = if ((y >= u))
10341064 then x
10351065 else throw("List size exceeds 8")
10361066
10371067 z(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10381068 }
1039- if (br)
1040- then throw(bv)
1041- else $Tuple2(nil, bv)
1069+ if (bs)
1070+ then throw(bw)
1071+ else $Tuple2(nil, bw)
10421072 }
10431073
10441074
1045-@Verifier(ct)
1046-func cu () = sigVerify(ct.bodyBytes, ct.proofs[0], ct.senderPublicKey)
1075+@Verifier(cu)
1076+func cv () = sigVerify(cu.bodyBytes, cu.proofs[0], cu.senderPublicKey)
10471077

github/deemru/w8io/3ef1775 
303.47 ms