tx · Gd9tEpzj3GAwyDaA1Jm8RhM129BXjRaCHaDNGb2DJbv6

3N3DnVffnUyZtz2MRbk5U7giN112WempMNd:  -0.03100000 Waves

2023.03.30 12:51 [2512521] smart account 3N3DnVffnUyZtz2MRbk5U7giN112WempMNd > SELF 0.00000000 Waves

{ "type": 13, "id": "Gd9tEpzj3GAwyDaA1Jm8RhM129BXjRaCHaDNGb2DJbv6", "fee": 3100000, "feeAssetId": null, "timestamp": 1680169901115, "version": 2, "chainId": 84, "sender": "3N3DnVffnUyZtz2MRbk5U7giN112WempMNd", "senderPublicKey": "3c1wAgvTRCNXCGMidVnB1j4gTYUqtwHR9tNNu2v4ZUNk", "proofs": [ "5ucEAbPCY8UiWeMB2A2gFWAioc2oS5TKe8VbjNe6NmuDKmfTM8W33exPbKLGJAY27JKGf9HMnmYPiz1r8CkK6rjN" ], "script": "base64:BgKUAQgCEgkKBwgICAEICAgSABIECgIIARIECgIIARIAEgMKAQgSBAoCCAESBAoCCAESBAoCCAESABIGCgQICAgIEgQKAggIEgQKAggIEgMKAQQSAwoBCBIDCgEEEggKBgQIAQgICBIFCgMECAgSBgoEBAgECBIFCgMECAgSAwoBBBIECgIIBBIECgIIBBIDCgEEEgMKAQQhABJyZXNlcnZlRnVuZEFkZHJlc3MJAQdBZGRyZXNzAQEaAVR5kbUvJUKjlFFOUXUmV1bpUpTF5flA7NkAC3Jlc2VydmVGdW5kABQADGZsYXNoTG9hbkZlZQDAhD0AEWFnZ3JlZ2F0b3JBZGRyZXNzCQEHQWRkcmVzcwEBGgFUeZG1LyVCo5RRTlF1JldW6VKUxeX5QOzZAAlvcmFjbGVTdHICIzNONEtiTW5KSDhGYU05NGpxeE5GZTJveVo4R0I3Wjh5VkJQABFzaHV0ZG93bldoaXRlbGlzdAkAzAgCARoBV9fhI1GOfKuIWtXXKJd12Ih104+uIwWm4QkAzAgCARoBV2MNA4Gmf1tU0hy55Cgq86eANPDYtY3VZQkAzAgCARoBV7PVklRJCZoqEPvG+J8QdqvvPw9ypYkVjAkAzAgCARoBV/j6+gImwFGL7Go7RjNJ0hxxsHWL+aTKmgkAzAgCARoBV6vdqiLzmLkfRdgs1Kfq+RJir4k2alA7cgkAzAgCARoBVzA5HNGkZhg7fn/j2N6i/bhnmP9XTREmnQUDbmlsARZ2ZXJpZnlMaXF1aWRhdG9yUmlnaHRzAQdhZGRyZXNzCQEBIQEJAQIhPQIFB2FkZHJlc3MJAQdBZGRyZXNzAQEaAVR5kbUvJUKjlFFOUXUmV1bpUpTF5flA7NkBDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiw4RHRNdHBWd1ZxNjJzZGNWRlZ6aDZudXByZ3pHN0xTanBMZEhuUW5yQUZnWQUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwyNUZFcUVqUmtxSzZ5Q2tpVDdMejZTQVl6N2dVRkN0eGZDQ2huclZGRDVBVAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAgVXQVZFUwUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwkAlgoEAAAAgNrECQCA6JImAIDokiYABlNjYWxlOACAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2CQBoAgUGU2NhbGU4BQZTY2FsZTgACWRheUJsb2NrcwCgCwEKbGlJbnRUb1N0cgECbGkKAQFmAgVhY2N1bQRuZXh0CQCsAgIJAKwCAgUFYWNjdW0JAKQDAQUEbmV4dAIBLAoAAiRsBQJsaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAENdHJ5R2V0Qm9vbGVhbgEDa2V5BAckbWF0Y2gwCQCbCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEMdHJ5R2V0U3RyaW5nAQNrZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAQx0cnlHZXRCaW5hcnkBA2tleQQHJG1hdGNoMAkAnAgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAUBYgEAAQ5nZXRBc3NldFN0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWICBVdBVkVTAQ1nZXRBc3NldEJ5dGVzAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFCmFzc2V0SWRTdHIBCmdldEJhbGFuY2UBCmFzc2V0SWRTdHIDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUKYXNzZXRJZFN0cgEPZ2V0TWFya2V0QXNzZXRzAAkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIMc2V0dXBfdG9rZW5zAgEsARJnZXRBc3NldHNNYXhTdXBwbHkABAFzCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfbWF4c3VwcGx5AwkAAAIFAXMCAAkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEFA25pbAkAtQkCBQFzAgEsAQ1nZXRPdXRkYXRlZFVyAQphc3NldElkU3RyBARkb3duCQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQUHU2NhbGUxNgMJAAACBQRkb3duAAAAAAkAawMFBlNjYWxlOAkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfYlJhdGUFB1NjYWxlMTYFBGRvd24BC2dldEludGVyZXN0AQphc3NldElkU3RyBAJ1cgkBDWdldE91dGRhdGVkVXIBBQphc3NldElkU3RyBAVjdXJ2ZQkBDGdldFJhdGVDdXJ2ZQEFCmFzc2V0SWRTdHIEBHJhdGUJAGQCCAUFY3VydmUCXzEDCQBnAggFBWN1cnZlAl8zBQJ1cgkAawMFAnVyCAUFY3VydmUCXzIIBQVjdXJ2ZQJfMwkAZAIIBQVjdXJ2ZQJfMgkAawMJAGUCBQJ1cggFBWN1cnZlAl8zCAUFY3VydmUCXzQJAGUCAIDC1y8IBQVjdXJ2ZQJfMwkAlgMBCQDMCAIJAGsDBQRyYXRlBQZTY2FsZTgJAGgCBQlkYXlCbG9ja3MA7QIJAMwIAgABBQNuaWwBEHRva2VuUmF0ZXNSZWNhbGMBCmFzc2V0SWRTdHIECGludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQphc3NldElkU3RyBAJ1cgkBDWdldE91dGRhdGVkVXIBBQphc3NldElkU3RyBBBsYXN0UmVjYWxjSGVpZ2h0CQENdHJ5R2V0SW50ZWdlcgECDmxhc3RSYXRlSGVpZ2h0BAlsYXN0QlJhdGUJAJYDAQkAzAgCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlCQDMCAIFB1NjYWxlMTYFA25pbAQIbmV3QlJhdGUJAGQCBQlsYXN0QlJhdGUJAGgCCQBlAgUGaGVpZ2h0BRBsYXN0UmVjYWxjSGVpZ2h0BQhpbnRlcmVzdAQJbGFzdFNSYXRlCQCWAwEJAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld1NSYXRlCQBkAgUJbGFzdFNSYXRlCQBpAgkAaAIJAGgCCQBlAgUGaGVpZ2h0BRBsYXN0UmVjYWxjSGVpZ2h0CQBrAwUIaW50ZXJlc3QFAnVyBQZTY2FsZTgJAGUCAGQFC3Jlc2VydmVGdW5kAGQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlBQhuZXdTUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfYlJhdGUFCG5ld0JSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5sYXN0UmF0ZUhlaWdodAUGaGVpZ2h0BQNuaWwBDWdldEFjdHVhbFJhdGUCCmFzc2V0SWRTdHIIcmF0ZVR5cGUKAQFmAgVhY2N1bQV0b2tlbgQGcmVjYWxjCQEQdG9rZW5SYXRlc1JlY2FsYwEFBXRva2VuCQCUCgIDCQECIT0CBQV0b2tlbgUKYXNzZXRJZFN0cggFBWFjY3VtAl8xAwkAAAIFCHJhdGVUeXBlAgVzUmF0ZQgJAJEDAgUGcmVjYWxjAAAFdmFsdWUICQCRAwIFBnJlY2FsYwABBXZhbHVlCQDOCAIIBQVhY2N1bQJfMgUGcmVjYWxjCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgEFZ2V0VXIBCmFzc2V0SWRTdHIEBXJhdGVzCQEQdG9rZW5SYXRlc1JlY2FsYwEFCmFzc2V0SWRTdHIEBGRvd24JAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwAABXZhbHVlBQdTY2FsZTE2CQBrAwUGU2NhbGU4CQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMAAQV2YWx1ZQUHU2NhbGUxNgUEZG93bgELcmF0ZXNSZWNhbGMACgEBZgIFYWNjdW0FdG9rZW4JAM4IAgUFYWNjdW0JARB0b2tlblJhdGVzUmVjYWxjAQUFdG9rZW4KAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDWdldFRva2VuUHJpY2UBCmFzc2V0SWRTdHIEBGludjMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUJb3JhY2xlU3RyAglnZXRUV0FQNjAJAMwIAgUKYXNzZXRJZFN0cgkAzAgCBwUDbmlsBQNuaWwDCQAAAgUEaW52MwUEaW52MwQFZGF0YTMEByRtYXRjaDAFBGludjMDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQBeAUHJG1hdGNoMAUBeAkAAgECFWVycm9yIG9mIHByaWNlIG9yYWNsZQMJAAACBQVkYXRhMwUFZGF0YTMFBWRhdGEzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5jYWxjQXNzZXRTY2FsZQEKYXNzZXRJZFN0cgQIZGVjaW1hbHMDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMACAgJAQV2YWx1ZQEJAOwHAQkA2QQBBQphc3NldElkU3RyCGRlY2ltYWxzCQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgESY2FsY1VzZXJDb2xsYXRlcmFsAQdhZGRyZXNzBBR1c2VyQ29sbGF0ZXJhbEludm9rZQkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAICAAUDbmlsBQNuaWwDCQAAAgUUdXNlckNvbGxhdGVyYWxJbnZva2UFFHVzZXJDb2xsYXRlcmFsSW52b2tlBBN1c2VyQ29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRR1c2VyQ29sbGF0ZXJhbEludm9rZQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiRpc3N1ZSB3aGlsZSBkb2luZyBpbi1kYXBwIGludm9jYXRpb24DCQAAAgUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOc3VwcGx5SW50ZXJuYWwDCmFzc2V0SWRTdHILYXNzZXRBbW91bnQHYWRkcmVzcwMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAQLJHQwNTg3MDU5MzcJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFc1JhdGUEBXNSYXRlCAULJHQwNTg3MDU5MzcCXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAULJHQwNTg3MDU5MzcCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQUERE9XTgQJbWF4U3VwcGx5BAckbWF0Y2gwCQCiCAEJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXgFByRtYXRjaDAJAQ1wYXJzZUludFZhbHVlAQUBeAAABAphc3NldFByaWNlCQENZ2V0VG9rZW5QcmljZQEFCmFzc2V0SWRTdHIEEG5ld1RvdGFsU3VwcGxpZWQJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQEBHJhdGUICQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlAl8xBAphc3NldFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQphc3NldElkU3RyBBNuZXdUb3RhbFN1cHBsaWVkVXNkCQBrAwkAawMFEG5ld1RvdGFsU3VwcGxpZWQFBHJhdGUFB1NjYWxlMTYIBQphc3NldFByaWNlAl8xBQphc3NldFNjYWxlAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0AwMJAQIhPQIFCW1heFN1cHBseQAACQBmAgUTbmV3VG90YWxTdXBwbGllZFVzZAUJbWF4U3VwcGx5BwkAAgECM21heCB0b3RhbCBzdXBwbHkgZm9yIHRoaXMgdG9rZW4gcmVhY2hlZCBpbiB0aGUgcG9vbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBRBuZXdUb3RhbFN1cHBsaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAULYXNzZXRBbW91bnQBDmJvcnJvd0ludGVybmFsAwphc3NldElkU3RyC2Fzc2V0QW1vdW50B2FkZHJlc3MECyR0MDcyMTY3MjgzCQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFCyR0MDcyMTY3MjgzAl8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFCyR0MDcyMTY3MjgzAl8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEEmNvbGxhdGVyYWxWYWx1ZUludgkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAIJAKwCAgkArAICBQphc3NldElkU3RyAgosYm9ycm93ZWQsCQCkAwEFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUSY29sbGF0ZXJhbFZhbHVlSW52BRJjb2xsYXRlcmFsVmFsdWVJbnYED2NvbGxhdGVyYWxWYWx1ZQQHJG1hdGNoMAUSY29sbGF0ZXJhbFZhbHVlSW52AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECH2Nhbid0IGdldCB1c2VyIGNvbGxhdGVyYWwgdmFsdWUDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQDCQBmAgAABQ9jb2xsYXRlcmFsVmFsdWUJAAIBAiF5b3UgaGF2ZSB0byBzdXBwbHkgbW9yZSB0byBib3Jyb3cEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyAwkAZgIFBmFtb3VudAkAZQIFDWFzc2V0U3VwcGxpZWQFDWFzc2V0Qm9ycm93ZWQJAAIBAhx0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGQCBRF1c2VyQXNzZXRCb3Jyb3dlZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZAIFDWFzc2V0Qm9ycm93ZWQFBmFtb3VudAUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAULYXNzZXRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ZAWkBDWZsYXNoUG9zaXRpb24HBHVzZXILc0Fzc2V0SWRTdHILYkFzc2V0SWRTdHIHYkFtb3VudA9jYWxsYmFja0FkZHJlc3MQY2FsbGJhY2tGdW5jdGlvbgxjYWxsYmFja0FyZ3MECWJvcnJvd1JlcwkBDmJvcnJvd0ludGVybmFsAwULYkFzc2V0SWRTdHIFB2JBbW91bnQFBHVzZXIECGJBc3NldElkCQENZ2V0QXNzZXRCeXRlcwEFC2JBc3NldElkU3RyBAhjYWxsYmFjawkA/QcECQERQGV4dHJOYXRpdmUoMTA2MikBBQ9jYWxsYmFja0FkZHJlc3MFEGNhbGxiYWNrRnVuY3Rpb24JALUJAgUMY2FsbGJhY2tBcmdzAgEsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhiQXNzZXRJZAUHYkFtb3VudAUDbmlsAwkAAAIFCGNhbGxiYWNrBQhjYWxsYmFjawQHc0Ftb3VudAoAAUAFCGNhbGxiYWNrAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQdzQW1vdW50BQdzQW1vdW50BAlzdXBwbHlSZXMJAQ5zdXBwbHlJbnRlcm5hbAMFC3NBc3NldElkU3RyBQdzQW1vdW50BQR1c2VyBA9jb2xsYXRlcmFsVmFsdWUKAAFACQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFBHVzZXIJAMwIAgYJAMwIAgkArAICCQCsAgIFC3NBc3NldElkU3RyAgosc3VwcGxpZWQsCQCkAwEFB3NBbW91bnQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQ9jb2xsYXRlcmFsVmFsdWUFD2NvbGxhdGVyYWxWYWx1ZQQLYm9ycm93VmFsdWUKAAFACQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFBHVzZXIJAMwIAgYJAMwIAgkArAICCQCsAgIFC2JBc3NldElkU3RyAgosYm9ycm93ZWQsCQCkAwEFB2JBbW91bnQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQtib3Jyb3dWYWx1ZQULYm9ycm93VmFsdWUDCQBmAgULYm9ycm93VmFsdWUFD2NvbGxhdGVyYWxWYWx1ZQkAAgECHm5vdCBlbm91Z2ggY29sbGF0ZXJhbCBwcm92aWRlZAkAzggCCAUJYm9ycm93UmVzAl8xCAUJc3VwcGx5UmVzAl8xCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBnN1cHBseQADAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAJAAIBAhwxIHBheW1lbnQgaGFzIHRvIGJlIGF0dGFjaGVkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Fzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkBDnN1cHBseUludGVybmFsAwUKYXNzZXRJZFN0cgULYXNzZXRBbW91bnQJAKUIAQgFAWkGY2FsbGVyAWkBCHdpdGhkcmF3Agphc3NldElkU3RyC2Fzc2V0QW1vdW50BA0kdDAxMDgyNjEwODkzCQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFDSR0MDEwODI2MTA4OTMCXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAUNJHQwMTA4MjYxMDg5MwJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBQdDRUlMSU5HBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQNYXNzZXRTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgQNYXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQRdXNlckFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBBJjb2xsYXRlcmFsVmFsdWVJbnYJAPwHBAUEdGhpcwIRZ2V0VXNlckNvbGxhdGVyYWwJAMwIAgcJAMwIAgUHYWRkcmVzcwkAzAgCBgkAzAgCCQCsAgIJAKwCAgUKYXNzZXRJZFN0cgIKLHN1cHBsaWVkLAkApAMBCQEBLQEFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUSY29sbGF0ZXJhbFZhbHVlSW52BRJjb2xsYXRlcmFsVmFsdWVJbnYED2NvbGxhdGVyYWxWYWx1ZQQHJG1hdGNoMAUSY29sbGF0ZXJhbFZhbHVlSW52AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECH2Nhbid0IGdldCB1c2VyIGNvbGxhdGVyYWwgdmFsdWUDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQDCQBmAgAABQ9jb2xsYXRlcmFsVmFsdWUJAAIBAjJ5b3UgZG9udCBoYXZlIGVub3VnaCBjb2xsYXRlcmFsIGZvciB0aGlzIG9wZXJhdGlvbgMJAGYCBQZhbW91bnQJAGUCBQ1hc3NldFN1cHBsaWVkBQ1hc3NldEJvcnJvd2VkCQACAQIqdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgbWFya2V0AwkAZgIFBmFtb3VudAkAZQIFEXVzZXJBc3NldFN1cHBsaWVkBRF1c2VyQXNzZXRCb3Jyb3dlZAkAAgECKnRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlcgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQthc3NldEFtb3VudAkBDWdldEFzc2V0Qnl0ZXMBBQphc3NldElkU3RyBQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBmJvcnJvdwIKYXNzZXRJZFN0cgthc3NldEFtb3VudAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEA3JlcwkBDmJvcnJvd0ludGVybmFsAwUKYXNzZXRJZFN0cgULYXNzZXRBbW91bnQFB2FkZHJlc3MEBmFtb3VudAgFA3JlcwJfMgkAzggCCAUDcmVzAl8xCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFCmFzc2V0SWRTdHIFA25pbAFpAQVyZXBheQADCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAJAAIBAhwxIHBheW1lbnQgaGFzIHRvIGJlIGF0dGFjaGVkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Fzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNJHQwMTI5NjAxMzAyNwkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAxMjk2MDEzMDI3Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDEyOTYwMTMwMjcCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBAphbW91bnRMZWZ0CQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAQLcmVwYXlBbW91bnQDCQBnAgUKYW1vdW50TGVmdAAABQZhbW91bnQFEXVzZXJBc3NldEJvcnJvd2VkAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0CQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGUCBRF1c2VyQXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgUNYXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQDCQBnAgUKYW1vdW50TGVmdAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEBLQEFCmFtb3VudExlZnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAWkBDXN0YWtlVG9rZW5BbGwBCmFzc2V0SWRTdHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAixvbmx5IGZvciBpbnRlcm5hbCBzbWFydCBjb250cmFjdCBpbnZvY2F0aW9ucwQGYW1vdW50CQEKZ2V0QmFsYW5jZQEFCmFzc2V0SWRTdHIEA2ludgkA/AcEBQR0aGlzAgpzdGFrZVRva2VuCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnN0YWtlVG9rZW4CCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMDCQAAAgUKYXNzZXRJZFN0cgIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV+QOpzZPkgvXl8+kHT81G89DauuqPPNxnQIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQBkAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFX9xU1EcXtcoVTVBDw3RtN4mo807RodylaAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASB1FhA4gHYNVWV+SfOusdvmGZxqEGgfyVVh+kpGWncwHAUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEJAGQCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFCmFzc2V0SWRTdHICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVdraDjhA9SajJ8SG8YsvCMHOQvN7RLXCl8CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBIJLR9EriEQEr9H7q3iGOPcX7yfJ9zoey7VIZ8DpOJFj1BQZhbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAZAIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAFpAQx1bnN0YWtlVG9rZW4CCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMDCQAAAgUKYXNzZXRJZFN0cgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV/cVNRHF7XKFU1QQ8N0bTeJqPNO0aHcpWgIHdW5TdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxCQBlAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgd1bnN0YWtlCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEBGJhbDAJAQpnZXRCYWxhbmNlAQIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wDCQAAAgUEYmFsMAUEYmFsMAQEaW52MgkA/AcECQEHQWRkcmVzcwEBGgFX+3Xq6xP9GcDLCNyPYLN+A7oRjq2Pt9DrAhdnbnNidFJld2FyZHNTWVNSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAAIFBGludjIFBGludjIEDHRvcHVwUmV3YXJkcwQHJG1hdGNoMAUEaW52MgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAXgFByRtYXRjaDAECHNlY29uZEVsCQCRAwIFAXgAAQQHJG1hdGNoMQUIc2Vjb25kRWwDCQABAgUHJG1hdGNoMQIGU3RyaW5nBAhzZWNvbmRFbAUHJG1hdGNoMQQJdXNkblZhbHVlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIJALUJAgUIc2Vjb25kRWwCAV8AAQIBOgABBAp3YXZlc1ZhbHVlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIJALUJAgUIc2Vjb25kRWwCAV8AAAIBOgABAwMJAQIhPQIFCXVzZG5WYWx1ZQAABgkBAiE9AgUKd2F2ZXNWYWx1ZQAABAh1c2RuQmFsMAkBCmdldEJhbGFuY2UBAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAMJAAACBQh1c2RuQmFsMAUIdXNkbkJhbDAECXdhdmVzQmFsMAkBCmdldEJhbGFuY2UBAgVXQVZFUwMJAAACBQl3YXZlc0JhbDAFCXdhdmVzQmFsMAQEaW52MwkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgxjbGFpbVJld2FyZHMFA25pbAUDbmlsAwkAAAIFBGludjMFBGludjMECXdhdmVzQmFsMQkBCmdldEJhbGFuY2UBAgVXQVZFUwMJAAACBQl3YXZlc0JhbDEFCXdhdmVzQmFsMQQEaW52NAkA/AcECQEHQWRkcmVzcwEBGgFXzhQUnRZYA+RDTHr1peyyn62/zbOD+SmiAgRzd2FwCQDMCAICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0CQBlAgUJd2F2ZXNCYWwxBQl3YXZlc0JhbDAFA25pbAMJAAACBQRpbnY0BQRpbnY0BAh1c2RuQmFsMQkBCmdldEJhbGFuY2UBAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAMJAAACBQh1c2RuQmFsMQUIdXNkbkJhbDEEBGludjUJAPwHBAkBB0FkZHJlc3MBARoBV0DqoVxlgSg9dIRbV2Ce++N5K7fcirSQdwIEc3dhcAkAzAgCAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEJAGUCBQh1c2RuQmFsMQUIdXNkbkJhbDAFA25pbAMJAAACBQRpbnY1BQRpbnY1BARpbnY2CQD8BwQFBHRoaXMCC2FkZEludGVyZXN0CQDMCAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMCQDMCAIJAGUCCQEKZ2V0QmFsYW5jZQECLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQRiYWwwBQNuaWwFA25pbAMJAAACBQRpbnY2BQRpbnY2AAIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAQABAAADCQAAAgUMdG9wdXBSZXdhcmRzBQx0b3B1cFJld2FyZHMJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAGUCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBaQELYWRkSW50ZXJlc3QCCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIYb25seSBmb3Igc2VsZiBpbnZvY2F0aW9uBAZlYXJuZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgQLY2xlYW5BbW91bnQJAGsDBQZhbW91bnQAUABkBAxzdGF0ZUNoYW5nZXMDAwkAAAIFCmxhc3RIZWlnaHQFBmhlaWdodAYJAAACBQZhbW91bnQAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICGGF1dG9zdGFrZV9wcmVMYXN0RWFybmVkXwUKYXNzZXRJZFN0cgUGZWFybmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICF2F1dG9zdGFrZV9wcmVMYXN0QmxvY2tfBQphc3NldElkU3RyBQpsYXN0SGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgkAZAIFBmVhcm5lZAULY2xlYW5BbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIFBmhlaWdodAUDbmlsCQDOCAIFDHN0YXRlQ2hhbmdlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBrAwUHU2NhbGUxNgULY2xlYW5BbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFA25pbAFpARNhZGRJbnRlcmVzdEVYVEVSTkFMAAQGYW1vdW50CQBrAwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAUABkBAdhc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQEBmVhcm5lZAkBDXRyeUdldEludGVnZXIBCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgQKbGFzdEhlaWdodAkBDXRyeUdldEludGVnZXIBCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBAxzdGF0ZUNoYW5nZXMDAwkAAAIFCmxhc3RIZWlnaHQFBmhlaWdodAYJAAACBQZhbW91bnQAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICGGF1dG9zdGFrZV9wcmVMYXN0RWFybmVkXwUKYXNzZXRJZFN0cgUGZWFybmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICF2F1dG9zdGFrZV9wcmVMYXN0QmxvY2tfBQphc3NldElkU3RyBQpsYXN0SGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgkAZAIFBmVhcm5lZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBQZoZWlnaHQFA25pbAkAzggCBQxzdGF0ZUNoYW5nZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAawMFB1NjYWxlMTYFBmFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUDbmlsAWkBB3ByZUluaXQEBnRva2VucwRsdHZzA2x0cwlwZW5hbHRpZXMKAQFmAgVhY2N1bQV0b2tlbgkAzggCBQVhY2N1bQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX2JSYXRlBQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfc1JhdGUFB1NjYWxlMTYFA25pbAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkEBXJhdGVzCgACJGwJALUJAgUGdG9rZW5zAgEsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgIMc2V0dXBfdG9rZW5zBQZ0b2tlbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgIKc2V0dXBfbHR2cwUEbHR2cwkAzAgCCQELU3RyaW5nRW50cnkCAglzZXR1cF9sdHMFA2x0cwkAzAgCCQELU3RyaW5nRW50cnkCAg9zZXR1cF9wZW5hbHRpZXMFCXBlbmFsdGllcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgIMc2V0dXBfYWN0aXZlBgUDbmlsBQVyYXRlcwFpAQ91cGRhdGVQYXJhbWV0ZXICA2tleQN2YWwDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVcUeViFwPoaZ+cUNI0M98TwbUXt9hz5PUEHCQACAQIKYWRtaW4gb25seQkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5CQENcGFyc2VJbnRWYWx1ZQEFA3ZhbAUDbmlsAWkBDHVwZGF0ZVN0cmluZwIDa2V5A3ZhbAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBVxR5WIXA+hpn5xQ0jQz3xPBtRe32HPk9QQcJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwBaQESY2xhaW1Ub1Jlc2VydmVGdW5kAQVkZWJ1ZwQGYXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQFcmF0ZXMICQENZ2V0QWN0dWFsUmF0ZQIJAJEDAgUGYXNzZXRzAAACBXNSYXRlAl8yBAJsaQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgEBZgIFYWNjdW0BbgMJAGcCBQFuCQCQAwEFBmFzc2V0cwUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgUGYXNzZXRzBQFuBA9hdXRvc3Rha2VBbW91bnQJAQx0cnlHZXRTdHJpbmcBCQCsAgICEWF1dG9zdGFrZV9hbW91bnRfBQphc3NldElkU3RyBAZhbW91bnQJAGUCCQBkAgkAZAIJAGQCCQEKZ2V0QmFsYW5jZQEFCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhFhdXRvc3Rha2VfYW1vdW50XwUKYXNzZXRJZFN0cgMJAQIhPQIFD2F1dG9zdGFrZUFtb3VudAIACQENcGFyc2VJbnRWYWx1ZQEFD2F1dG9zdGFrZUFtb3VudAAACQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMJAGQCCQBoAgUBbgADAAEFdmFsdWUFB1NjYWxlMTYJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwkAaAIFAW4AAwV2YWx1ZQUHU2NhbGUxNgQDaW52AwkAZgIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhFhdXRvc3Rha2VfYW1vdW50XwUKYXNzZXRJZFN0cgAACQD8BwQFBHRoaXMCDHVuc3Rha2VUb2tlbgkAzAgCBQphc3NldElkU3RyCQDMCAIJAJYDAQkAzAgCBQZhbW91bnQJAMwIAgAABQNuaWwFA25pbAUDbmlsAAADCQAAAgUDaW52BQNpbnYJAM4IAgUFYWNjdW0JAMwIAgUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECXBhcmFtZXRlcgoAAiRsBQJsaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBAmYyAgVhY2N1bQFuAwkAZwIFAW4JAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQZhc3NldHMFAW4JAM4IAgUFYWNjdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUScmVzZXJ2ZUZ1bmRBZGRyZXNzCQCWAwEJAMwIAgkAkQMCBQlwYXJhbWV0ZXIFAW4JAMwIAgAABQNuaWwJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsAwUFZGVidWcJAAIBCQEKbGlJbnRUb1N0cgEFCXBhcmFtZXRlcgkAlAoCCgACJGwFAmxpCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQJmMgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUJcGFyYW1ldGVyAWkBB3JlU2V0dXABCmFzc2V0SWRTdHIEC2xhc3RSZXNldHVwCQENdHJ5R2V0SW50ZWdlcgECEnJlc2V0dXBfbGFzdFVwZGF0ZQMJAGYCBQlkYXlCbG9ja3MJAGUCBQZoZWlnaHQFC2xhc3RSZXNldHVwCQACAQIgY2FuIGJlIHVwZGF0ZWQgb25seSBvbmNlIHBlciBkYXkEA2x0cwkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIJc2V0dXBfbHRzAgEsBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABAJ1cgkBBWdldFVyAQUKYXNzZXRJZFN0cgQGdGVtcExUCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgZzZXR1cF8FCmFzc2V0SWRTdHICB190ZW1wTFQEAmx0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGYXNzZXRzCQEFdmFsdWUBCQDPCAIFBmFzc2V0cwUKYXNzZXRJZFN0cgMJAGYCBQJ1cgCAlfUqCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIGc2V0dXBfBQphc3NldElkU3RyAgdfdGVtcExUCQBrAwUGdGVtcExUAPdNAJBOBQNuaWwDAwkAZgIFAmx0BQZ0ZW1wTFQJAGYCAICV9SoFAnVyBwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBnNldHVwXwUKYXNzZXRJZFN0cgIHX3RlbXBMVAkAawMFBnRlbXBMVACpTgCQTgUDbmlsBQNuaWwBaQEIc2h1dGRvd24BCHNodXRkb3duAwkAAAIJAM8IAgURc2h1dGRvd25XaGl0ZWxpc3QICAUBaQZjYWxsZXIFYnl0ZXMFBHVuaXQJAAIBAhd1c2VyIG5vdCBpbiBhIHdoaXRlbGlzdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgIMc2V0dXBfYWN0aXZlCQEBIQEFCHNodXRkb3duBQNuaWwBaQEJbGlxdWlkYXRlBgVkZWJ1ZwdhZGRyZXNzC2Fzc2V0QW1vdW50C3NBc3NldElkU3RyC2JBc3NldElkU3RyCHJvdXRlU3RyAwkBASEBCQEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEIBQFpBmNhbGxlcgkAAgECKHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3Igd2hpdGVsaXN0IG9ubHkDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQEDnVzZXJDb2xsYXRlcmFsCQESY2FsY1VzZXJDb2xsYXRlcmFsAQUHYWRkcmVzcwMJAAACBQ51c2VyQ29sbGF0ZXJhbAUOdXNlckNvbGxhdGVyYWwEDSR0MDI1OTQ3MjYwMDkJAQ1nZXRBY3R1YWxSYXRlAgULc0Fzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFDSR0MDI1OTQ3MjYwMDkCXzEEC3JhdGVzUmVzdWx0CAUNJHQwMjU5NDcyNjAwOQJfMgQNJHQwMjYwMTQyNjA4MwkBDWdldEFjdHVhbFJhdGUCBQtiQXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMjYwMTQyNjA4MwJfMQQScmF0ZXNSZWNhbGNSZXN1bHQyCAUNJHQwMjYwMTQyNjA4MwJfMgQMc0Fzc2V0QW1vdW50CQBrAwULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBBBjdXJyZW50U1Bvc2l0aW9uCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgQTY3VycmVudEJQb3NpdGlvblZhbAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIEEGN1cnJlbnRCUG9zaXRpb24DCQBmAgUTY3VycmVudEJQb3NpdGlvblZhbAAABRNjdXJyZW50QlBvc2l0aW9uVmFsCQACAQIgdXNlciBoYXMgbm8gYm9ycm93IGluIHRoaXMgdG9rZW4DCQBmAgUOdXNlckNvbGxhdGVyYWwAAAkAAgECGHVzZXIgY2FuJ3QgYmUgbGlxdWlkYXRlZAMJAGYCBQxzQXNzZXRBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQQOYmFsYW5jZTBCZWZvcmUJAQpnZXRCYWxhbmNlAQULc0Fzc2V0SWRTdHIDCQAAAgUOYmFsYW5jZTBCZWZvcmUFDmJhbGFuY2UwQmVmb3JlBA5iYWxhbmNlMUJlZm9yZQkBCmdldEJhbGFuY2UBBQtiQXNzZXRJZFN0cgMJAAACBQ5iYWxhbmNlMUJlZm9yZQUOYmFsYW5jZTFCZWZvcmUEDmV4Y2hhbmdlSW52b2tlCQD8BwQFEWFnZ3JlZ2F0b3JBZGRyZXNzAgRzd2FwCQDMCAIFCHJvdXRlU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFC3NBc3NldElkU3RyBQthc3NldEFtb3VudAUDbmlsAwkAAAIFDmV4Y2hhbmdlSW52b2tlBQ5leGNoYW5nZUludm9rZQQKYXNzZXQwU29sZAkAZQIFDmJhbGFuY2UwQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC3NBc3NldElkU3RyAwkAAAIFCmFzc2V0MFNvbGQFCmFzc2V0MFNvbGQEDGFzc2V0MUJvdWdodAkAZQIJAQpnZXRCYWxhbmNlAQULYkFzc2V0SWRTdHIFDmJhbGFuY2UxQmVmb3JlAwkAAAIFDGFzc2V0MUJvdWdodAUMYXNzZXQxQm91Z2h0BAthc3NldDBQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULc0Fzc2V0SWRTdHICXzEEC2Fzc2V0MFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtzQXNzZXRJZFN0cgQJYXNzZXQwVXNkCQBrAwUKYXNzZXQwU29sZAULYXNzZXQwUHJpY2UFC2Fzc2V0MFNjYWxlBAthc3NldDFQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULYkFzc2V0SWRTdHICXzIEC2Fzc2V0MVNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtiQXNzZXRJZFN0cgQJYXNzZXQxVXNkCQBrAwUMYXNzZXQxQm91Z2h0BQthc3NldDFQcmljZQULYXNzZXQxU2NhbGUEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9wZW5hbHRpZXMCASwJAQV2YWx1ZQEJAM8IAgkBD2dldE1hcmtldEFzc2V0cwAFC2JBc3NldElkU3RyBBFsaXF1aWRhdGlvblByb2ZpdAkAZQIFCWFzc2V0MVVzZAkAawMFCWFzc2V0MFVzZAkAZQIFBlNjYWxlOAUHcGVuYWx0eQUGU2NhbGU4BAxzQXNzZXRDaGFuZ2UJAGsDBQphc3NldDBTb2xkBQdTY2FsZTE2BQVzUmF0ZQQMYkFzc2V0Q2hhbmdlCQBrAwkAawMFDGFzc2V0MUJvdWdodAUHU2NhbGUxNgUFYlJhdGUJAGUCBQZTY2FsZTgJAGsDBRFsaXF1aWRhdGlvblByb2ZpdAUGU2NhbGU4BQlhc3NldDFVc2QFBlNjYWxlOAMJAGYCBQphc3NldDBTb2xkBQthc3NldEFtb3VudAkAAgECI21vcmUgYXNzZXRzIGV4Y2hhbmdlZCB0aGFuIGV4cGVjdGVkAwkAZgIAAAURbGlxdWlkYXRpb25Qcm9maXQJAAIBAi9wcmljZSBpbXBhY3QgaXMgYmlnZ2VyIHRoYW4gbGlxdWlkYXRpb24gcGVuYWx0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyCQBlAgUQY3VycmVudFNQb3NpdGlvbgUMc0Fzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCBRBjdXJyZW50QlBvc2l0aW9uBQxiQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyBQxzQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBQxiQXNzZXRDaGFuZ2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtsaXF1aWRhdGVWMgMFZGVidWcHYWRkcmVzcwtzQXNzZXRJZFN0cgMJAQEhAQkBFnZlcmlmeUxpcXVpZGF0b3JSaWdodHMBCAUBaQZjYWxsZXIJAAIBAih0ZW1wb3JhcmlseSBhdmFpbGFibGUgZm9yIHdoaXRlbGlzdCBvbmx5AwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkBAhiQXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtiQXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQUIYkFzc2V0SWQEDGJBc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDnVzZXJDb2xsYXRlcmFsCQESY2FsY1VzZXJDb2xsYXRlcmFsAQUHYWRkcmVzcwMJAAACBQ51c2VyQ29sbGF0ZXJhbAUOdXNlckNvbGxhdGVyYWwDCQBmAgUOdXNlckNvbGxhdGVyYWwAAAkAAgECGHVzZXIgY2FuJ3QgYmUgbGlxdWlkYXRlZAQMbWFya2V0QXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQJYXNzZXQxTnVtCQEFdmFsdWUBCQDPCAIFDG1hcmtldEFzc2V0cwULYkFzc2V0SWRTdHIECWFzc2V0ME51bQkBBXZhbHVlAQkAzwgCBQxtYXJrZXRBc3NldHMFC3NBc3NldElkU3RyBA0kdDAyOTIzODI5MzAwCQENZ2V0QWN0dWFsUmF0ZQIFC2JBc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAyOTIzODI5MzAwAl8xBAtyYXRlc1Jlc3VsdAgFDSR0MDI5MjM4MjkzMDACXzIEC2Fzc2V0MVByaWNlCAkBDWdldFRva2VuUHJpY2UBBQtiQXNzZXRJZFN0cgJfMgQLYXNzZXQxU2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFC2JBc3NldElkU3RyBApiQW1vdW50VXNkCQBrAwUMYkFzc2V0QW1vdW50BQthc3NldDFQcmljZQULYXNzZXQxU2NhbGUEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkBBXZhbHVlAQkAkQMCCQC1CQIJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9wZW5hbHRpZXMCASwFCWFzc2V0MU51bQQLYXNzZXQwUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC3NBc3NldElkU3RyAl8xBAthc3NldDBTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULc0Fzc2V0SWRTdHIECnNBbW91bnRVc2QJAGsDBQpiQW1vdW50VXNkCQBkAgUGU2NhbGU4BQdwZW5hbHR5BQZTY2FsZTgEDHNBc3NldEFtb3VudAkAawMFCnNBbW91bnRVc2QFC2Fzc2V0MFNjYWxlBQthc3NldDBQcmljZQQHYkFtb3VudAkAawMFDGJBc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUEB3NBbW91bnQJAGsDBQxzQXNzZXRBbW91bnQFB1NjYWxlMTYICQCRAwIFC3JhdGVzUmVzdWx0CQBkAgkAaAIFCWFzc2V0ME51bQADAAEFdmFsdWUEEGN1cnJlbnRTUG9zaXRpb24JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyBBNjdXJyZW50QlBvc2l0aW9uVmFsCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgQQY3VycmVudEJQb3NpdGlvbgMJAGYCBRNjdXJyZW50QlBvc2l0aW9uVmFsAAAFE2N1cnJlbnRCUG9zaXRpb25WYWwJAAIBAiB1c2VyIGhhcyBubyBib3Jyb3cgaW4gdGhpcyB0b2tlbgMJAGYCBQdzQW1vdW50BRBjdXJyZW50U1Bvc2l0aW9uCQACAQIycG9zaXRpb24gdG8gbGlxdWlkYXRlIGlzIGJpZ2dlciB0aGFuIHVzZXIncyBzdXBwbHkDBQVkZWJ1ZwkAAgECFWxpcXVpZGF0aW9uIHdpbGwgcGFzcwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMc0Fzc2V0QW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFC3NBc3NldElkU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCBRBjdXJyZW50U1Bvc2l0aW9uBQdzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCBRBjdXJyZW50QlBvc2l0aW9uBQdiQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgUHc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIFB2JBbW91bnQFA25pbAULcmF0ZXNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERZ2V0VXNlckNvbGxhdGVyYWwEBWRlYnVnB2FkZHJlc3MNbWludXNCb3Jyb3dlZAthZnRlckNoYW5nZQQGYXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQEbHR2cwkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIKc2V0dXBfbHR2cwIBLAQDbHRzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAglzZXR1cF9sdHMCASwEBXJhdGVzCAkBDWdldEFjdHVhbFJhdGUCCQCRAwIFBmFzc2V0cwAAAgVzUmF0ZQJfMgQNY2hhbmdlSGFuZGxlcgkAtQkCBQthZnRlckNoYW5nZQIBLAoBAWYCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAkAkAMBBQZhc3NldHMFBWFjY3VtBAx1c2VyU3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8JAJEDAgUGYXNzZXRzBQRuZXh0BAx1c2VyQm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8JAJEDAgUGYXNzZXRzBQRuZXh0BBNuZWVkVG9rZW5BY2NvdW50aW5nAwkAAAIFC2FmdGVyQ2hhbmdlAgADAwkBAiE9AgUMdXNlckJvcnJvd2VkAAAGCQECIT0CBQx1c2VyU3VwcGxpZWQAAAYHBgMFE25lZWRUb2tlbkFjY291bnRpbmcECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEJAJEDAgUGYXNzZXRzBQRuZXh0BAphc3NldFByaWNlCQENZ2V0VG9rZW5QcmljZQEJAJEDAgUGYXNzZXRzBQRuZXh0CQBlAgkAZAIFBWFjY3VtCQBrAwkAawMJAGsDCQBkAgUMdXNlclN1cHBsaWVkAwMDCQECIT0CBQthZnRlckNoYW5nZQIACQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAAJAJEDAgUGYXNzZXRzBQRuZXh0BwkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgABAghzdXBwbGllZAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAIAAAgJAJEDAgUFcmF0ZXMJAGgCBQRuZXh0AAMFdmFsdWUFB1NjYWxlMTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsdHZzBQRuZXh0BQZTY2FsZTgIBQphc3NldFByaWNlAl8xBQphc3NldFNjYWxlAwUNbWludXNCb3Jyb3dlZAkAawMJAGsDCQBrAwkAZAIFDHVzZXJCb3Jyb3dlZAMDAwkBAiE9AgULYWZ0ZXJDaGFuZ2UCAAkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgAACQCRAwIFBmFzc2V0cwUEbmV4dAcJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAQIIYm9ycm93ZWQHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUNY2hhbmdlSGFuZGxlcgACAAAICQCRAwIFBXJhdGVzCQBkAgkAaAIFBG5leHQAAwABBXZhbHVlBQdTY2FsZTE2BQZTY2FsZTgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsdHMFBG5leHQIBQphc3NldFByaWNlAl8yBQphc3NldFNjYWxlAAAFBWFjY3VtBAZyZXN1bHQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwUFZGVidWcJAAIBCQCkAwEFBnJlc3VsdAkAlAoCBQVyYXRlcwUGcmVzdWx0AWkBDGdldEFzc2V0RGVidAMFZGVidWcHYWRkcmVzcwphc3NldElkU3RyBAx1c2VyQm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEBHJhdGUICQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlAl8xBAZyZXN1bHQJAGsDBQx1c2VyQm9ycm93ZWQFBHJhdGUFB1NjYWxlMTYDBQVkZWJ1ZwkAAgEJAKQDAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBCWdldFByaWNlcwEFZGVidWcEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAKAQFmAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQJAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRQcmljZQkBDWdldFRva2VuUHJpY2UBCQCRAwIFBmFzc2V0cwUEbmV4dAkArAICCQCsAgIJAKwCAgkArAICBQVhY2N1bQkApAMBCAUKYXNzZXRQcmljZQJfMQIBLAkApAMBCAUKYXNzZXRQcmljZQJfMgIBfAQGcmVzdWx0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMFBWRlYnVnCQACAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBGWNhbGN1bGF0ZVV0aWxpemF0aW9uUmF0aW8CCmFzc2V0SWRTdHIFZGVidWcDBQVkZWJ1ZwkAAgEJAKQDAQkBBWdldFVyAQUKYXNzZXRJZFN0cgkAlAoCBQNuaWwJAQVnZXRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlT3V0ZGF0ZWRVUgIKYXNzZXRJZFN0cgVkZWJ1ZwMFBWRlYnVnCQACAQkApAMBCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIJAJQKAgUDbmlsCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlVG9rZW5SYXRlcwEFZGVidWcKAQFmAgVhY2N1bQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAggFBWFjY3VtAl8xCQCkAwEICQCRAwIFBXJhdGVzAAEFdmFsdWUCAXwJAKQDAQgJAJEDAgUFcmF0ZXMAAAV2YWx1ZQIBLAkAzggCCAUFYWNjdW0CXzIFBXJhdGVzBAlwYXJhbWV0ZXIKAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgICAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwUFZGVidWcJAAIBCAUJcGFyYW1ldGVyAl8xCQCUCgIIBQlwYXJhbWV0ZXICXzIIBQlwYXJhbWV0ZXICXzEBaQEXY2FsY3VsYXRlVG9rZW5zSW50ZXJlc3QBBWRlYnVnCgEBZgIFYWNjdW0KYXNzZXRJZFN0cgQEcmF0ZQkAawMJAQtnZXRJbnRlcmVzdAEFCmFzc2V0SWRTdHIFCWRheUJsb2NrcwUGU2NhbGU4CQCsAgIJAKwCAgUFYWNjdW0JAKQDAQUEcmF0ZQIBLAQJcGFyYW1ldGVyCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwUFZGVidWcJAAIBBQlwYXJhbWV0ZXIJAJQKAgUDbmlsBQlwYXJhbWV0ZXIBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5jahD9w==", "height": 2512521, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3gSjYHB5cDyaA8C2TpVfH5VohtjTrCFNvwYQ89jx4wHh Next: HwYBcakQpBd7RegB8bZNGsTpr4ySph3dKbhHAGMdiZtw Diff:
OldNewDifferences
329329 func flashPosition (aL,aM,aN,aO,aP,aQ,aR) = {
330330 let aS = aC(aN, aO, aL)
331331 let aT = J(aN)
332- let aU = invoke(addressFromStringValue(aP), aQ, split(aR, ","), [AttachedPayment(aT, aO)])
332+ let aU = reentrantInvoke(addressFromStringValue(aP), aQ, split(aR, ","), [AttachedPayment(aT, aO)])
333333 if ((aU == aU))
334334 then {
335335 let aV = {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
55
66 let b = 20
77
88 let c = 1000000
99
1010 let d = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
1111
1212 let e = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
1313
1414 let f = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
1515
1616 func g (h) = !((h != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
1717
1818
1919 func i (j) = {
2020 let k = j
2121 if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == k))
2222 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2323 else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == k))
2424 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2525 else if (("WAVES" == k))
2626 then $Tuple4(2000000, 30000000, 80000000, 50000000)
2727 else $Tuple4(0, 20000000, 80000000, 80000000)
2828 }
2929
3030
3131 let l = 100000000
3232
3333 let m = 10000000000
3434
3535 let n = (l * l)
3636
3737 let o = 1440
3838
3939 func p (q) = {
4040 func r (s,t) = ((s + toString(t)) + ",")
4141
4242 let u = q
4343 let v = size(u)
4444 let w = ""
4545 func x (y,z) = if ((z >= v))
4646 then y
4747 else r(y, u[z])
4848
4949 func A (y,z) = if ((z >= v))
5050 then y
5151 else throw("List size exceeds 6")
5252
5353 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
5454 }
5555
5656
5757 func B (C) = {
5858 let k = getInteger(this, C)
5959 if ($isInstanceOf(k, "Int"))
6060 then {
6161 let D = k
6262 D
6363 }
6464 else 0
6565 }
6666
6767
6868 func E (C) = {
6969 let k = getBoolean(this, C)
7070 if ($isInstanceOf(k, "Boolean"))
7171 then {
7272 let D = k
7373 D
7474 }
7575 else false
7676 }
7777
7878
7979 func F (C) = {
8080 let k = getString(this, C)
8181 if ($isInstanceOf(k, "String"))
8282 then {
8383 let D = k
8484 D
8585 }
8686 else ""
8787 }
8888
8989
9090 func G (C) = {
9191 let k = getBinary(this, C)
9292 if ($isInstanceOf(k, "ByteVector"))
9393 then {
9494 let D = k
9595 D
9696 }
9797 else base58''
9898 }
9999
100100
101101 func H (I) = {
102102 let k = I
103103 if ($isInstanceOf(k, "ByteVector"))
104104 then {
105105 let D = k
106106 toBase58String(D)
107107 }
108108 else "WAVES"
109109 }
110110
111111
112112 func J (j) = if ((j == "WAVES"))
113113 then unit
114114 else fromBase58String(j)
115115
116116
117117 func K (j) = if ((j == "WAVES"))
118118 then wavesBalance(this).available
119119 else assetBalance(this, fromBase58String(j))
120120
121121
122122 func L () = split(F("setup_tokens"), ",")
123123
124124
125125 func M () = {
126126 let N = F("setup_maxsupply")
127127 if ((N == ""))
128128 then [-1, -1, -1, -1, -1, -1, -1]
129129 else split(N, ",")
130130 }
131131
132132
133133 func O (j) = {
134134 let P = fraction(B(("total_supplied_" + j)), B((j + "_sRate")), n)
135135 if ((P == 0))
136136 then 0
137137 else fraction(l, fraction(B(("total_borrowed_" + j)), B((j + "_bRate")), n), P)
138138 }
139139
140140
141141 func Q (j) = {
142142 let R = O(j)
143143 let S = i(j)
144144 let T = (S._1 + (if ((S._3 >= R))
145145 then fraction(R, S._2, S._3)
146146 else (S._2 + fraction((R - S._3), S._4, (100000000 - S._3)))))
147147 max([fraction(T, l, (o * 365)), 1])
148148 }
149149
150150
151151 func U (j) = {
152152 let V = Q(j)
153153 let R = O(j)
154154 let W = B("lastRateHeight")
155155 let X = max([B((j + "_bRate")), n])
156156 let Y = (X + ((height - W) * V))
157157 let Z = max([B((j + "_sRate")), n])
158158 let aa = (Z + ((((height - W) * fraction(V, R, l)) * (100 - b)) / 100))
159159 [IntegerEntry((j + "_sRate"), aa), IntegerEntry((j + "_bRate"), Y), IntegerEntry("lastRateHeight", height)]
160160 }
161161
162162
163163 func ab (j,ac) = {
164164 func r (s,ad) = {
165165 let ae = U(ad)
166166 $Tuple2(if ((ad != j))
167167 then s._1
168168 else if ((ac == "sRate"))
169169 then ae[0].value
170170 else ae[1].value, (s._2 ++ ae))
171171 }
172172
173173 let u = L()
174174 let v = size(u)
175175 let w = $Tuple2(0, nil)
176176 func x (y,z) = if ((z >= v))
177177 then y
178178 else r(y, u[z])
179179
180180 func A (y,z) = if ((z >= v))
181181 then y
182182 else throw("List size exceeds 6")
183183
184184 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
185185 }
186186
187187
188188 func af (j) = {
189189 let ag = U(j)
190190 let P = fraction(B(("total_supplied_" + j)), ag[0].value, n)
191191 fraction(l, fraction(B(("total_borrowed_" + j)), ag[1].value, n), P)
192192 }
193193
194194
195195 func ah () = {
196196 func r (s,ad) = (s ++ U(ad))
197197
198198 let u = L()
199199 let v = size(u)
200200 let w = nil
201201 func x (y,z) = if ((z >= v))
202202 then y
203203 else r(y, u[z])
204204
205205 func A (y,z) = if ((z >= v))
206206 then y
207207 else throw("List size exceeds 6")
208208
209209 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
210210 }
211211
212212
213213 func ai (j) = {
214214 let aj = invoke(addressFromStringValue(e), "getTWAP60", [j, false], nil)
215215 if ((aj == aj))
216216 then {
217217 let ak = {
218218 let k = aj
219219 if ($isInstanceOf(k, "(Int, Int)"))
220220 then {
221221 let al = k
222222 al
223223 }
224224 else throw("error of price oracle")
225225 }
226226 if ((ak == ak))
227227 then ak
228228 else throw("Strict value is not equal to itself.")
229229 }
230230 else throw("Strict value is not equal to itself.")
231231 }
232232
233233
234234 func am (j) = {
235235 let an = if ((j == "WAVES"))
236236 then 8
237237 else value(assetInfo(fromBase58String(j))).decimals
238238 pow(10, 0, an, 0, 0, DOWN)
239239 }
240240
241241
242242 func ao (h) = {
243243 let ap = invoke(this, "getUserCollateral", [false, h, true, ""], nil)
244244 if ((ap == ap))
245245 then {
246246 let aq = {
247247 let k = ap
248248 if ($isInstanceOf(k, "Int"))
249249 then {
250250 let al = k
251251 al
252252 }
253253 else throw("issue while doing in-dapp invocation")
254254 }
255255 if ((aq == aq))
256256 then aq
257257 else throw("Strict value is not equal to itself.")
258258 }
259259 else throw("Strict value is not equal to itself.")
260260 }
261261
262262
263263 func ar (j,as,h) = if (!(E("setup_active")))
264264 then throw("market is stopped")
265265 else {
266266 let at = ab(j, "sRate")
267267 let au = at._1
268268 let av = at._2
269269 let aw = fraction(as, n, au, DOWN)
270270 let ax = {
271271 let k = getString(("setup_maxSupply_" + j))
272272 if ($isInstanceOf(k, "String"))
273273 then {
274274 let al = k
275275 parseIntValue(al)
276276 }
277277 else 0
278278 }
279279 let ay = ai(j)
280280 let az = (B(((h + "_supplied_") + j)) + aw)
281281 let T = ab(j, "sRate")._1
282282 let aA = am(j)
283283 let aB = fraction(fraction(az, T, n), ay._1, aA)
284284 if ((indexOf(F("setup_tokens"), j) == unit))
285285 then throw("this asset is not supported by the market")
286286 else if (if ((ax != 0))
287287 then (aB > ax)
288288 else false)
289289 then throw("max total supply for this token reached in the pool")
290290 else $Tuple2(([IntegerEntry(((h + "_supplied_") + j), az), IntegerEntry(("total_supplied_" + j), (B(("total_supplied_" + j)) + aw))] ++ av), as)
291291 }
292292
293293
294294 func aC (j,as,h) = {
295295 let aD = ab(j, "bRate")
296296 let aE = aD._1
297297 let av = aD._2
298298 let aw = fraction(as, n, aE, CEILING)
299299 let aF = invoke(this, "getUserCollateral", [false, h, true, ((j + ",borrowed,") + toString(aw))], nil)
300300 if ((aF == aF))
301301 then {
302302 let aG = {
303303 let k = aF
304304 if ($isInstanceOf(k, "Int"))
305305 then {
306306 let al = k
307307 al
308308 }
309309 else throw("can't get user collateral value")
310310 }
311311 if (!(E("setup_active")))
312312 then throw("market is stopped")
313313 else if ((0 > aG))
314314 then throw("you have to supply more to borrow")
315315 else {
316316 let aH = B(("total_supplied_" + j))
317317 let aI = B(("total_borrowed_" + j))
318318 let aJ = B(((h + "_borrowed_") + j))
319319 if ((aw > (aH - aI)))
320320 then throw("this amount is not available")
321321 else $Tuple2(([IntegerEntry(((h + "_borrowed_") + j), (aJ + aw)), IntegerEntry(("total_borrowed_" + j), (aI + aw))] ++ av), as)
322322 }
323323 }
324324 else throw("Strict value is not equal to itself.")
325325 }
326326
327327
328328 @Callable(aK)
329329 func flashPosition (aL,aM,aN,aO,aP,aQ,aR) = {
330330 let aS = aC(aN, aO, aL)
331331 let aT = J(aN)
332- let aU = invoke(addressFromStringValue(aP), aQ, split(aR, ","), [AttachedPayment(aT, aO)])
332+ let aU = reentrantInvoke(addressFromStringValue(aP), aQ, split(aR, ","), [AttachedPayment(aT, aO)])
333333 if ((aU == aU))
334334 then {
335335 let aV = {
336336 let aW = aU
337337 if ($isInstanceOf(aW, "Int"))
338338 then aW
339339 else throw(($getType(aW) + " couldn't be cast to Int"))
340340 }
341341 if ((aV == aV))
342342 then {
343343 let aX = ar(aM, aV, aL)
344344 let aG = {
345345 let aW = invoke(this, "getUserCollateral", [false, aL, true, ((aM + ",supplied,") + toString(aV))], nil)
346346 if ($isInstanceOf(aW, "Int"))
347347 then aW
348348 else throw(($getType(aW) + " couldn't be cast to Int"))
349349 }
350350 if ((aG == aG))
351351 then {
352352 let aY = {
353353 let aW = invoke(this, "getUserCollateral", [false, aL, true, ((aN + ",borrowed,") + toString(aO))], nil)
354354 if ($isInstanceOf(aW, "Int"))
355355 then aW
356356 else throw(($getType(aW) + " couldn't be cast to Int"))
357357 }
358358 if ((aY == aY))
359359 then if ((aY > aG))
360360 then throw("not enough collateral provided")
361361 else (aS._1 ++ aX._1)
362362 else throw("Strict value is not equal to itself.")
363363 }
364364 else throw("Strict value is not equal to itself.")
365365 }
366366 else throw("Strict value is not equal to itself.")
367367 }
368368 else throw("Strict value is not equal to itself.")
369369 }
370370
371371
372372
373373 @Callable(aK)
374374 func supply () = if (if ((size(aK.payments) != 1))
375375 then true
376376 else (aK.payments[0].amount == 0))
377377 then throw("1 payment has to be attached")
378378 else {
379379 let j = H(aK.payments[0].assetId)
380380 let as = aK.payments[0].amount
381381 ar(j, as, toString(aK.caller))
382382 }
383383
384384
385385
386386 @Callable(aK)
387387 func withdraw (j,as) = {
388388 let aZ = ab(j, "sRate")
389389 let au = aZ._1
390390 let av = aZ._2
391391 let aw = fraction(as, n, au, CEILING)
392392 let h = toString(aK.caller)
393393 let aH = B(("total_supplied_" + j))
394394 let aI = B(("total_borrowed_" + j))
395395 let ba = B(((h + "_supplied_") + j))
396396 let aJ = B(((h + "_borrowed_") + j))
397397 let aF = invoke(this, "getUserCollateral", [false, h, true, ((j + ",supplied,") + toString(-(aw)))], nil)
398398 if ((aF == aF))
399399 then {
400400 let aG = {
401401 let k = aF
402402 if ($isInstanceOf(k, "Int"))
403403 then {
404404 let al = k
405405 al
406406 }
407407 else throw("can't get user collateral value")
408408 }
409409 if (!(E("setup_active")))
410410 then throw("market is stopped")
411411 else if ((0 > aG))
412412 then throw("you dont have enough collateral for this operation")
413413 else if ((aw > (aH - aI)))
414414 then throw("this amount is not available on the market")
415415 else if ((aw > (ba - aJ)))
416416 then throw("this amount is not available for this user")
417417 else ([IntegerEntry(((h + "_supplied_") + j), (B(((h + "_supplied_") + j)) - aw)), IntegerEntry(("total_supplied_" + j), (B(("total_supplied_" + j)) - aw)), ScriptTransfer(aK.caller, as, J(j))] ++ av)
418418 }
419419 else throw("Strict value is not equal to itself.")
420420 }
421421
422422
423423
424424 @Callable(aK)
425425 func borrow (j,as) = {
426426 let h = toString(aK.caller)
427427 let bb = aC(j, as, h)
428428 let aw = bb._2
429429 (bb._1 ++ [ScriptTransfer(aK.caller, aw, J(j))])
430430 }
431431
432432
433433
434434 @Callable(aK)
435435 func repay () = if (!(E("setup_active")))
436436 then throw("market is stopped")
437437 else if (if ((size(aK.payments) != 1))
438438 then true
439439 else (aK.payments[0].amount == 0))
440440 then throw("1 payment has to be attached")
441441 else {
442442 let j = H(aK.payments[0].assetId)
443443 let as = aK.payments[0].amount
444444 let bc = ab(j, "bRate")
445445 let aE = bc._1
446446 let av = bc._2
447447 let aw = fraction(as, n, aE, CEILING)
448448 let h = toString(aK.caller)
449449 let aH = B(("total_supplied_" + j))
450450 let aI = B(("total_borrowed_" + j))
451451 let aJ = B(((h + "_borrowed_") + j))
452452 let bd = (aJ - aw)
453453 let be = if ((bd >= 0))
454454 then aw
455455 else aJ
456456 if ((indexOf(F("setup_tokens"), j) == unit))
457457 then throw("this asset is not supported by the market")
458458 else (([IntegerEntry(((h + "_borrowed_") + j), (aJ - be)), IntegerEntry(("total_borrowed_" + j), (aI - be))] ++ av) ++ (if ((bd >= 0))
459459 then nil
460460 else [ScriptTransfer(aK.caller, -(bd), aK.payments[0].assetId)]))
461461 }
462462
463463
464464
465465 @Callable(aK)
466466 func stakeTokenAll (j) = if ((aK.caller != this))
467467 then throw("only for internal smart contract invocations")
468468 else {
469469 let aw = K(j)
470470 let bf = invoke(this, "stakeToken", [j, aw], nil)
471471 if ((bf == bf))
472472 then nil
473473 else throw("Strict value is not equal to itself.")
474474 }
475475
476476
477477
478478 @Callable(aK)
479479 func stakeToken (j,aw) = if ((aK.caller != this))
480480 then throw("only for internal smart contract invocations")
481481 else if ((j == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
482482 then {
483483 let bg = B("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
484484 let bf = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', aw)])
485485 if ((bf == bf))
486486 then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bg + aw))]
487487 else throw("Strict value is not equal to itself.")
488488 }
489489 else if ((j == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
490490 then {
491491 let bg = B("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
492492 let bf = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', aw)])
493493 if ((bf == bf))
494494 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bg + aw))]
495495 else throw("Strict value is not equal to itself.")
496496 }
497497 else if ((j == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
498498 then {
499499 let bg = B("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
500500 let bf = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', aw)])
501501 if ((bf == bf))
502502 then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bg + aw))]
503503 else throw("Strict value is not equal to itself.")
504504 }
505505 else nil
506506
507507
508508
509509 @Callable(aK)
510510 func unstakeToken (j,aw) = if ((aK.caller != this))
511511 then throw("only for internal smart contract invocations")
512512 else if ((j == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
513513 then {
514514 let bg = B("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
515515 let bf = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [aw], nil)
516516 if ((bf == bf))
517517 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bg - aw))]
518518 else throw("Strict value is not equal to itself.")
519519 }
520520 else if ((j == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
521521 then {
522522 let bg = B("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
523523 let bf = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [aw], nil)
524524 if ((bf == bf))
525525 then {
526526 let bh = K("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
527527 if ((bh == bh))
528528 then {
529529 let bi = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
530530 if ((bi == bi))
531531 then {
532532 let bj = {
533533 let k = bi
534534 if ($isInstanceOf(k, "List[Any]"))
535535 then {
536536 let al = k
537537 let bk = al[1]
538538 let bl = bk
539539 if ($isInstanceOf(bl, "String"))
540540 then {
541541 let bk = bl
542542 let bm = parseIntValue(split(split(bk, "_")[1], ":")[1])
543543 let bn = parseIntValue(split(split(bk, "_")[0], ":")[1])
544544 if (if ((bm != 0))
545545 then true
546546 else (bn != 0))
547547 then {
548548 let bo = K("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
549549 if ((bo == bo))
550550 then {
551551 let bp = K("WAVES")
552552 if ((bp == bp))
553553 then {
554554 let aj = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
555555 if ((aj == aj))
556556 then {
557557 let bq = K("WAVES")
558558 if ((bq == bq))
559559 then {
560560 let br = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bq - bp))])
561561 if ((br == br))
562562 then {
563563 let bs = K("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
564564 if ((bs == bs))
565565 then {
566566 let bt = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bs - bo))])
567567 if ((bt == bt))
568568 then {
569569 let bu = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (K("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bh)], nil)
570570 if ((bu == bu))
571571 then 2
572572 else throw("Strict value is not equal to itself.")
573573 }
574574 else throw("Strict value is not equal to itself.")
575575 }
576576 else throw("Strict value is not equal to itself.")
577577 }
578578 else throw("Strict value is not equal to itself.")
579579 }
580580 else throw("Strict value is not equal to itself.")
581581 }
582582 else throw("Strict value is not equal to itself.")
583583 }
584584 else throw("Strict value is not equal to itself.")
585585 }
586586 else throw("Strict value is not equal to itself.")
587587 }
588588 else 1
589589 }
590590 else 1
591591 }
592592 else 0
593593 }
594594 if ((bj == bj))
595595 then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bg - aw))]
596596 else throw("Strict value is not equal to itself.")
597597 }
598598 else throw("Strict value is not equal to itself.")
599599 }
600600 else throw("Strict value is not equal to itself.")
601601 }
602602 else throw("Strict value is not equal to itself.")
603603 }
604604 else nil
605605
606606
607607
608608 @Callable(aK)
609609 func addInterest (j,aw) = if ((aK.caller != this))
610610 then throw("only for self invocation")
611611 else {
612612 let bv = B(("autostake_lastEarned_" + j))
613613 let bw = B(("autostake_lastBlock_" + j))
614614 let bx = fraction(aw, 80, 100)
615615 let by = if (if ((bw == height))
616616 then true
617617 else (aw == 0))
618618 then nil
619619 else [IntegerEntry(("autostake_preLastEarned_" + j), bv), IntegerEntry(("autostake_preLastBlock_" + j), bw), IntegerEntry(("autostake_lastEarned_" + j), (bv + bx)), IntegerEntry(("autostake_lastBlock_" + j), height)]
620620 (by ++ [IntegerEntry((j + "_sRate"), (B((j + "_sRate")) + fraction(n, bx, B(("total_supplied_" + j)))))])
621621 }
622622
623623
624624
625625 @Callable(aK)
626626 func addInterestEXTERNAL () = {
627627 let aw = fraction(aK.payments[0].amount, 80, 100)
628628 let I = aK.payments[0].assetId
629629 let j = H(I)
630630 let bv = B(("autostake_lastEarned_" + j))
631631 let bw = B(("autostake_lastBlock_" + j))
632632 let by = if (if ((bw == height))
633633 then true
634634 else (aw == 0))
635635 then nil
636636 else [IntegerEntry(("autostake_preLastEarned_" + j), bv), IntegerEntry(("autostake_preLastBlock_" + j), bw), IntegerEntry(("autostake_lastEarned_" + j), (bv + aw)), IntegerEntry(("autostake_lastBlock_" + j), height)]
637637 (by ++ [IntegerEntry((j + "_sRate"), (B((j + "_sRate")) + fraction(n, aw, B(("total_supplied_" + j)))))])
638638 }
639639
640640
641641
642642 @Callable(aK)
643643 func preInit (bz,bA,bB,bC) = {
644644 func r (s,ad) = (s ++ [IntegerEntry((ad + "_bRate"), n), IntegerEntry((ad + "_sRate"), n)])
645645
646646 if ((aK.caller != this))
647647 then throw("admin only")
648648 else {
649649 let ag = {
650650 let u = split(bz, ",")
651651 let v = size(u)
652652 let w = nil
653653 func x (y,z) = if ((z >= v))
654654 then y
655655 else r(y, u[z])
656656
657657 func A (y,z) = if ((z >= v))
658658 then y
659659 else throw("List size exceeds 6")
660660
661661 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
662662 }
663663 ([StringEntry("setup_tokens", bz), StringEntry("setup_ltvs", bA), StringEntry("setup_lts", bB), StringEntry("setup_penalties", bC), BooleanEntry("setup_active", true)] ++ ag)
664664 }
665665 }
666666
667667
668668
669669 @Callable(aK)
670670 func updateParameter (C,bD) = if (if ((aK.caller != this))
671671 then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
672672 else false)
673673 then throw("admin only")
674674 else [IntegerEntry(C, parseIntValue(bD))]
675675
676676
677677
678678 @Callable(aK)
679679 func updateString (C,bD) = if (if ((aK.caller != this))
680680 then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
681681 else false)
682682 then throw("admin only")
683683 else [StringEntry(C, bD)]
684684
685685
686686
687687 @Callable(aK)
688688 func claimToReserveFund (bE) = {
689689 let bF = L()
690690 let ag = ab(bF[0], "sRate")._2
691691 let q = [0, 1, 2, 3, 4, 5]
692692 func r (s,bG) = if ((bG >= size(bF)))
693693 then s
694694 else {
695695 let j = bF[bG]
696696 let bH = F(("autostake_amount_" + j))
697697 let aw = ((((K(j) + B(("autostake_amount_" + j))) + (if ((bH != ""))
698698 then parseIntValue(bH)
699699 else 0)) + fraction(B(("total_borrowed_" + j)), ag[((bG * 3) + 1)].value, n)) - fraction(B(("total_supplied_" + j)), ag[(bG * 3)].value, n))
700700 let bf = if ((B(("autostake_amount_" + j)) > 0))
701701 then invoke(this, "unstakeToken", [j, max([aw, 0])], nil)
702702 else 0
703703 if ((bf == bf))
704704 then (s ++ [aw])
705705 else throw("Strict value is not equal to itself.")
706706 }
707707
708708 let bI = {
709709 let u = q
710710 let v = size(u)
711711 let w = nil
712712 func x (y,z) = if ((z >= v))
713713 then y
714714 else r(y, u[z])
715715
716716 func A (y,z) = if ((z >= v))
717717 then y
718718 else throw("List size exceeds 6")
719719
720720 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
721721 }
722722 func bJ (s,bG) = if ((bG >= size(bF)))
723723 then s
724724 else {
725725 let j = bF[bG]
726726 (s ++ [ScriptTransfer(a, max([bI[bG], 0]), J(j))])
727727 }
728728
729729 if (bE)
730730 then throw(p(bI))
731731 else $Tuple2({
732732 let u = q
733733 let v = size(u)
734734 let w = nil
735735 func bK (y,z) = if ((z >= v))
736736 then y
737737 else bJ(y, u[z])
738738
739739 func bL (y,z) = if ((z >= v))
740740 then y
741741 else throw("List size exceeds 6")
742742
743743 bL(bK(bK(bK(bK(bK(bK(w, 0), 1), 2), 3), 4), 5), 6)
744744 }, bI)
745745 }
746746
747747
748748
749749 @Callable(aK)
750750 func reSetup (j) = {
751751 let bM = B("resetup_lastUpdate")
752752 if ((o > (height - bM)))
753753 then throw("can be updated only once per day")
754754 else {
755755 let bB = split(F("setup_lts"), ",")
756756 let bF = L()
757757 let R = af(j)
758758 let bN = B((("setup_" + j) + "_tempLT"))
759759 let bO = parseIntValue(bF[value(indexOf(bF, j))])
760760 if ((R > 90000000))
761761 then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bN, 9975, 10000))]
762762 else if (if ((bO > bN))
763763 then (90000000 > R)
764764 else false)
765765 then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bN, 10025, 10000))]
766766 else nil
767767 }
768768 }
769769
770770
771771
772772 @Callable(aK)
773773 func shutdown (bP) = if ((indexOf(f, aK.caller.bytes) == unit))
774774 then throw("user not in a whitelist")
775775 else [BooleanEntry("setup_active", !(bP))]
776776
777777
778778
779779 @Callable(aK)
780780 func liquidate (bE,h,as,aM,aN,bQ) = if (!(g(aK.caller)))
781781 then throw("temporarily available for whitelist only")
782782 else if (!(E("setup_active")))
783783 then throw("market is stopped")
784784 else {
785785 let bR = ao(h)
786786 if ((bR == bR))
787787 then {
788788 let bS = ab(aM, "sRate")
789789 let au = bS._1
790790 let bT = bS._2
791791 let bU = ab(aN, "bRate")
792792 let aE = bU._1
793793 let bV = bU._2
794794 let bW = fraction(as, n, au)
795795 let bX = B(((h + "_supplied_") + aM))
796796 let bY = B(((h + "_borrowed_") + aN))
797797 let bZ = if ((bY > 0))
798798 then bY
799799 else throw("user has no borrow in this token")
800800 if ((bR > 0))
801801 then throw("user can't be liquidated")
802802 else if ((bW > bX))
803803 then throw("position to liquidate is bigger than user's supply")
804804 else {
805805 let ca = K(aM)
806806 if ((ca == ca))
807807 then {
808808 let cb = K(aN)
809809 if ((cb == cb))
810810 then {
811811 let cc = invoke(d, "swap", [bQ, 0], [AttachedPayment(J(aM), as)])
812812 if ((cc == cc))
813813 then {
814814 let cd = (ca - K(aM))
815815 if ((cd == cd))
816816 then {
817817 let ce = (K(aN) - cb)
818818 if ((ce == ce))
819819 then {
820820 let cf = ai(aM)._1
821821 let cg = am(aM)
822822 let ch = fraction(cd, cf, cg)
823823 let ci = ai(aN)._2
824824 let cj = am(aN)
825825 let ck = fraction(ce, ci, cj)
826826 let cl = parseIntValue(split(F("setup_penalties"), ",")[value(indexOf(L(), aN))])
827827 let cm = (ck - fraction(ch, (l - cl), l))
828828 let cn = fraction(cd, n, au)
829829 let co = fraction(fraction(ce, n, aE), (l - fraction(cm, l, ck)), l)
830830 if ((cd > as))
831831 then throw("more assets exchanged than expected")
832832 else if ((0 > cm))
833833 then throw("price impact is bigger than liquidation penalty")
834834 else [IntegerEntry(((h + "_supplied_") + aM), (bX - cn)), IntegerEntry(((h + "_borrowed_") + aN), (bZ - co)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - cn)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - co))]
835835 }
836836 else throw("Strict value is not equal to itself.")
837837 }
838838 else throw("Strict value is not equal to itself.")
839839 }
840840 else throw("Strict value is not equal to itself.")
841841 }
842842 else throw("Strict value is not equal to itself.")
843843 }
844844 else throw("Strict value is not equal to itself.")
845845 }
846846 }
847847 else throw("Strict value is not equal to itself.")
848848 }
849849
850850
851851
852852 @Callable(aK)
853853 func liquidateV2 (bE,h,aM) = if (!(g(aK.caller)))
854854 then throw("temporarily available for whitelist only")
855855 else if (!(E("setup_active")))
856856 then throw("market is stopped")
857857 else {
858858 let aT = aK.payments[0].assetId
859859 let aN = H(aT)
860860 let cp = aK.payments[0].amount
861861 let bR = ao(h)
862862 if ((bR == bR))
863863 then if ((bR > 0))
864864 then throw("user can't be liquidated")
865865 else {
866866 let cq = L()
867867 let cr = value(indexOf(cq, aN))
868868 let cs = value(indexOf(cq, aM))
869869 let ct = ab(aN, "bRate")
870870 let aE = ct._1
871871 let bT = ct._2
872872 let ci = ai(aN)._2
873873 let cj = am(aN)
874874 let cu = fraction(cp, ci, cj)
875875 let cl = parseIntValue(value(split(F("setup_penalties"), ",")[cr]))
876876 let cf = ai(aM)._1
877877 let cg = am(aM)
878878 let cv = fraction(cu, (l + cl), l)
879879 let bW = fraction(cv, cg, cf)
880880 let aO = fraction(cp, n, aE)
881881 let aV = fraction(bW, n, bT[((cs * 3) + 1)].value)
882882 let bX = B(((h + "_supplied_") + aM))
883883 let bY = B(((h + "_borrowed_") + aN))
884884 let bZ = if ((bY > 0))
885885 then bY
886886 else throw("user has no borrow in this token")
887887 if ((aV > bX))
888888 then throw("position to liquidate is bigger than user's supply")
889889 else if (bE)
890890 then throw("liquidation will pass")
891891 else ([ScriptTransfer(aK.caller, bW, J(aM)), IntegerEntry(((h + "_supplied_") + aM), (bX - aV)), IntegerEntry(((h + "_borrowed_") + aN), (bZ - aO)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - aV)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - aO))] ++ bT)
892892 }
893893 else throw("Strict value is not equal to itself.")
894894 }
895895
896896
897897
898898 @Callable(aK)
899899 func getUserCollateral (bE,h,cw,cx) = {
900900 let bF = L()
901901 let bA = split(F("setup_ltvs"), ",")
902902 let bB = split(F("setup_lts"), ",")
903903 let ag = ab(bF[0], "sRate")._2
904904 let cy = split(cx, ",")
905905 func r (s,t) = if ((t >= size(bF)))
906906 then s
907907 else {
908908 let cz = B(((h + "_supplied_") + bF[t]))
909909 let cA = B(((h + "_borrowed_") + bF[t]))
910910 let cB = if ((cx == ""))
911911 then if (if ((cA != 0))
912912 then true
913913 else (cz != 0))
914914 then true
915915 else false
916916 else true
917917 if (cB)
918918 then {
919919 let aA = am(bF[t])
920920 let ay = ai(bF[t])
921921 ((s + fraction(fraction(fraction((cz + (if (if (if ((cx != ""))
922922 then (cy[0] == bF[t])
923923 else false)
924924 then (cy[1] == "supplied")
925925 else false)
926926 then parseIntValue(cy[2])
927927 else 0)), ag[(t * 3)].value, n), parseIntValue(bA[t]), l), ay._1, aA)) - (if (cw)
928928 then fraction(fraction(fraction((cA + (if (if (if ((cx != ""))
929929 then (cy[0] == bF[t])
930930 else false)
931931 then (cy[1] == "borrowed")
932932 else false)
933933 then parseIntValue(cy[2])
934934 else 0)), ag[((t * 3) + 1)].value, n), l, parseIntValue(bB[t])), ay._2, aA)
935935 else 0))
936936 }
937937 else s
938938 }
939939
940940 let cC = {
941941 let u = [0, 1, 2, 3, 4, 5]
942942 let v = size(u)
943943 let w = 0
944944 func x (y,z) = if ((z >= v))
945945 then y
946946 else r(y, u[z])
947947
948948 func A (y,z) = if ((z >= v))
949949 then y
950950 else throw("List size exceeds 6")
951951
952952 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
953953 }
954954 if (bE)
955955 then throw(toString(cC))
956956 else $Tuple2(ag, cC)
957957 }
958958
959959
960960
961961 @Callable(aK)
962962 func getAssetDebt (bE,h,j) = {
963963 let cA = B(((h + "_borrowed_") + j))
964964 let aA = am(j)
965965 let T = ab(j, "bRate")._1
966966 let cC = fraction(cA, T, n)
967967 if (bE)
968968 then throw(toString(cC))
969969 else $Tuple2(nil, cC)
970970 }
971971
972972
973973
974974 @Callable(aK)
975975 func getPrices (bE) = {
976976 let bF = L()
977977 func r (s,t) = if ((t >= size(bF)))
978978 then s
979979 else {
980980 let ay = ai(bF[t])
981981 ((((s + toString(ay._1)) + ",") + toString(ay._2)) + "|")
982982 }
983983
984984 let cC = {
985985 let u = [0, 1, 2, 3, 4, 5]
986986 let v = size(u)
987987 let w = ""
988988 func x (y,z) = if ((z >= v))
989989 then y
990990 else r(y, u[z])
991991
992992 func A (y,z) = if ((z >= v))
993993 then y
994994 else throw("List size exceeds 6")
995995
996996 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
997997 }
998998 if (bE)
999999 then throw(cC)
10001000 else $Tuple2(nil, cC)
10011001 }
10021002
10031003
10041004
10051005 @Callable(aK)
10061006 func calculateUtilizationRatio (j,bE) = if (bE)
10071007 then throw(toString(af(j)))
10081008 else $Tuple2(nil, af(j))
10091009
10101010
10111011
10121012 @Callable(aK)
10131013 func calculateOutdatedUR (j,bE) = if (bE)
10141014 then throw(toString(O(j)))
10151015 else $Tuple2(nil, O(j))
10161016
10171017
10181018
10191019 @Callable(aK)
10201020 func calculateTokenRates (bE) = {
10211021 func r (s,j) = {
10221022 let ag = U(j)
10231023 $Tuple2(((((s._1 + toString(ag[1].value)) + "|") + toString(ag[0].value)) + ","), (s._2 ++ ag))
10241024 }
10251025
10261026 let bI = {
10271027 let u = L()
10281028 let v = size(u)
10291029 let w = $Tuple2("", nil)
10301030 func x (y,z) = if ((z >= v))
10311031 then y
10321032 else r(y, u[z])
10331033
10341034 func A (y,z) = if ((z >= v))
10351035 then y
10361036 else throw("List size exceeds 6")
10371037
10381038 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
10391039 }
10401040 if (bE)
10411041 then throw(bI._1)
10421042 else $Tuple2(bI._2, bI._1)
10431043 }
10441044
10451045
10461046
10471047 @Callable(aK)
10481048 func calculateTokensInterest (bE) = {
10491049 func r (s,j) = {
10501050 let T = fraction(Q(j), o, l)
10511051 ((s + toString(T)) + ",")
10521052 }
10531053
10541054 let bI = {
10551055 let u = L()
10561056 let v = size(u)
10571057 let w = ""
10581058 func x (y,z) = if ((z >= v))
10591059 then y
10601060 else r(y, u[z])
10611061
10621062 func A (y,z) = if ((z >= v))
10631063 then y
10641064 else throw("List size exceeds 6")
10651065
10661066 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
10671067 }
10681068 if (bE)
10691069 then throw(bI)
10701070 else $Tuple2(nil, bI)
10711071 }
10721072
10731073
10741074 @Verifier(cD)
10751075 func cE () = sigVerify(cD.bodyBytes, cD.proofs[0], cD.senderPublicKey)
10761076

github/deemru/w8io/169f3d6 
89.66 ms