tx · 7uf1i3VGBdpJQMbwpQHqwh3SbW2vCWdhV2k9NZY7yzwC

3N4nTJ5sSp5X5ChS2bBBmwNMn1eeRzT1FoP:  -0.02800000 Waves

2022.08.30 12:34 [2207013] smart account 3N4nTJ5sSp5X5ChS2bBBmwNMn1eeRzT1FoP > SELF 0.00000000 Waves

{ "type": 13, "id": "7uf1i3VGBdpJQMbwpQHqwh3SbW2vCWdhV2k9NZY7yzwC", "fee": 2800000, "feeAssetId": null, "timestamp": 1661852069405, "version": 2, "chainId": 84, "sender": "3N4nTJ5sSp5X5ChS2bBBmwNMn1eeRzT1FoP", "senderPublicKey": "EsqRXDXnACFAdXz6EPhF1SbKyeV7MVuoyDqmXsMz7ySv", "proofs": [ "4ZcFXywMak8DgS8Hj55a2Ut84qdAqYwBNzmeathVmsrh9JjHrKCyNHLJBVWyb5MVUWSytgHZkKz3gvJbvBttVqNQ" ], "script": "base64:BgJ/CAISAwoBCBIDCgEIEgASBAoCAQQSBwoFAQEBAQQSAwoBARIAEgcKBQEBAQgBEgQKAgEBEgMKAQESBAoCCAgSBAoCCAgSBAoCCAESABIDCgEIEgUKAwEBARIECgIIARIECgIBARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCE4ABnNjYWxlOACAwtcvAAxzY2FsZThCaWdJbnQJALYCAQCAwtcvAAdzY2FsZTE4CQC2AgEAgICQu7rWrfANAAp6ZXJvQmlnSW50CQC2AgEAAAAJb25lQmlnSW50CQC2AgEAAQAKc2xpcHBhZ2U0RAkAtgIBCQBlAgUGc2NhbGU4CQBpAgkAaAIFBnNjYWxlOAABBQZzY2FsZTgABUFtdWx0AgMxMDAABURjb252AgExAANTRVACAl9fAAVFTVBUWQIAAApQb29sQWN0aXZlAAEAClBvb2xQdXREaXMAAgAOUG9vbE1hdGNoZXJEaXMAAwAMUG9vbFNodXRkb3duAAQADmlkeFBvb2xBZGRyZXNzAAEACWlkeFBvb2xTdAACAAlpZHhMUEFzSWQAAwAJaWR4QW1Bc0lkAAQACWlkeFByQXNJZAAFAAtpZHhBbXRBc0RjbQAGAA1pZHhQcmljZUFzRGNtAAcAC2lkeElBbXRBc0lkAAgADWlkeElQcmljZUFzSWQACQAPaWR4RmFjdFN0YWtDbnRyAAEAEGlkeEZhY3RTbGlwcENudHIABwARaWR4RmFjdEd3eFJld0NudHIACgAFZGVsYXkCCSVzX19kZWxheQECdDECB29yaWdWYWwNb3JpZ1NjYWxlTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFB3NjYWxlMTgJALYCAQUNb3JpZ1NjYWxlTXVsdAECZjECA3ZhbA9yZXN1bHRTY2FsZU11bHQJAKADAQkAvAIDBQN2YWwJALYCAQUPcmVzdWx0U2NhbGVNdWx0BQdzY2FsZTE4AQJ0cwMDYW10CHJlc1NjYWxlCGN1clNjYWxlCQBrAwUDYW10BQhyZXNTY2FsZQUIY3VyU2NhbGUBA2FicwEDdmFsAwkAvwICBQp6ZXJvQmlnSW50BQN2YWwJAL4CAQUDdmFsBQN2YWwBAmZjAAITJXNfX2ZhY3RvcnlDb250cmFjdAEDbXBrAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBBHBtcGsAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAnBsAAIRJXMlc19fcHJpY2VfX2xhc3QBAnBoAgFoAXQJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFoCQDMCAIJAKQDAQUBdAUDbmlsBQNTRVABA3BhdQICdWEEdHhJZAkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAnVhAgJfXwUEdHhJZAEDZ2F1AgJ1YQR0eElkCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUCdWECAl9fBQR0eElkAQJhYQACDyVzX19hbW91bnRBc3NldAECcGEAAg4lc19fcHJpY2VBc3NldAEDYW1wAAIHJXNfX2FtcAEDYWRhAAINJXNfX2FkZG9uQWRkcgEFbGdvdGMBBmNhbGxlcgkAuQkCCQDMCAICFyVzJXNfX2xhc3RHZXRPbmVUa25DYWxsCQDMCAIFBmNhbGxlcgUDbmlsBQNTRVABBWxzb3RjAQZjYWxsZXIJALkJAgkAzAgCAhclcyVzX19sYXN0UHV0T25lVGtuQ2FsbAkAzAgCBQZjYWxsZXIFA25pbAUDU0VQAQRmY2ZnAAIRJXNfX2ZhY3RvcnlDb25maWcBBG10cGsAAhglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAnBjAgZpQW10QXMFaVByQXMJAKwCAgkArAICCQCsAgIJAKwCAgIIJWQlZCVzX18FBmlBbXRBcwICX18FBWlQckFzAghfX2NvbmZpZwEDbWJhAQViQVN0cgkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQViQVN0cgEDYXBzAAIMJXNfX3NodXRkb3duARxrZXlBbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoAAIdJXNfX2FsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2gBA3RvZQMDb3JWBnNlbmRyVgZtYXRjaFYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIRRmFpbGVkOiBvcmRWYWxpZD0JAKUDAQUDb3JWAgsgc25kclZhbGlkPQkApQMBBQZzZW5kclYCDCBtdGNoclZhbGlkPQkApQMBBQZtYXRjaFYBA3N0cgEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZ2YWxTdHIFByRtYXRjaDAFBnZhbFN0cgkAAgECE2ZhaWwgY2FzdCB0byBTdHJpbmcBBHN0cmYCBGFkZHIDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEYWRkcgUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFBGFkZHIJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIMIG5vdCBkZWZpbmVkBQNuaWwCAAEEaW50ZgIEYWRkcgNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQRhZGRyBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUEYWRkcgkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAgwgbm90IGRlZmluZWQFA25pbAIAAANmY2EJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQRzdHJmAgUEdGhpcwkBAmZjAAABQQkBBHN0cmYCBQR0aGlzCQEDYW1wAAEDaWdzAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQNmY2EJAQNhcHMABwECbXAACQDZBAEJAQRzdHJmAgUDZmNhCQEEbXRwawABA2dwYwAEBWFtdEFzCQEEc3RyZgIFBHRoaXMJAQJhYQAEB3ByaWNlQXMJAQRzdHJmAgUEdGhpcwkBAnBhAAQIaVByaWNlQXMJAQRpbnRmAgUDZmNhCQEDbWJhAQUHcHJpY2VBcwQGaUFtdEFzCQEEaW50ZgIFA2ZjYQkBA21iYQEFBWFtdEFzCQC1CQIJAQRzdHJmAgUDZmNhCQECcGMCCQCkAwEFBmlBbXRBcwkApAMBBQhpUHJpY2VBcwUDU0VQAQNnZmMACQC1CQIJAQRzdHJmAgUDZmNhCQEEZmNmZwAFA1NFUAERZGF0YVB1dEFjdGlvbkluZm8KDWluQW10QXNzZXRBbXQPaW5QcmljZUFzc2V0QW10CG91dExwQW10BXByaWNlCnNsaXBCeVVzZXIMc2xpcHBhZ2VSZWFsCHR4SGVpZ2h0C3R4VGltZXN0YW1wDHNsaXBhZ2VBbUFtdAxzbGlwYWdlUHJBbXQJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFDWluQW10QXNzZXRBbXQJAMwIAgkApAMBBQ9pblByaWNlQXNzZXRBbXQJAMwIAgkApAMBBQhvdXRMcEFtdAkAzAgCCQCkAwEFBXByaWNlCQDMCAIJAKQDAQUKc2xpcEJ5VXNlcgkAzAgCCQCkAwEFDHNsaXBwYWdlUmVhbAkAzAgCCQCkAwEFCHR4SGVpZ2h0CQDMCAIJAKQDAQULdHhUaW1lc3RhbXAJAMwIAgkApAMBBQxzbGlwYWdlQW1BbXQJAMwIAgkApAMBBQxzbGlwYWdlUHJBbXQFA25pbAUDU0VQARFkYXRhR2V0QWN0aW9uSW5mbwYOb3V0QW10QXNzZXRBbXQQb3V0UHJpY2VBc3NldEFtdAdpbkxwQW10BXByaWNlCHR4SGVpZ2h0C3R4VGltZXN0YW1wCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUOb3V0QW10QXNzZXRBbXQJAMwIAgkApAMBBRBvdXRQcmljZUFzc2V0QW10CQDMCAIJAKQDAQUHaW5McEFtdAkAzAgCCQCkAwEFBXByaWNlCQDMCAIJAKQDAQUIdHhIZWlnaHQJAMwIAgkApAMBBQt0eFRpbWVzdGFtcAUDbmlsBQNTRVABDWdldEFjY0JhbGFuY2UBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAEEY3BiaQIIcHJBbXRYMTgIYW1BbXRYMTgJALwCAwUIcHJBbXRYMTgFB3NjYWxlMTgFCGFtQW10WDE4AQN2YWQDAkExAkEyCHNsaXBwYWdlBARkaWZmCQC8AgMJALgCAgUCQTEFAkEyBQxzY2FsZThCaWdJbnQFAkEyBARwYXNzCQC/AgIJALgCAgUIc2xpcHBhZ2UJAQNhYnMBBQRkaWZmBQp6ZXJvQmlnSW50AwkBASEBBQRwYXNzCQACAQkArAICAgpCaWcgc2xwZzogCQCmAwEFBGRpZmYJAJQKAgUEcGFzcwkAmQMBCQDMCAIFAkExCQDMCAIFAkEyBQNuaWwBAnZkAwJEMQJEMARzbHBnBARkaWZmCQC8AgMFAkQwBQxzY2FsZThCaWdJbnQFAkQxBARmYWlsCQC/AgIFBHNscGcFBGRpZmYDAwUEZmFpbAYJAL8CAgUCRDAFAkQxCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApgMBBQJEMAIBIAkApgMBBQJEMQIBIAkApgMBBQRkaWZmAgEgCQCmAwEFBHNscGcFBGZhaWwBA3BjcAQKYW1Bc3NldERjbQpwckFzc2V0RGNtBWFtQW10BXByQW10BAthbXRBc0FtdFgxOAkBAnQxAgUFYW1BbXQFCmFtQXNzZXREY20ECnByQXNBbXRYMTgJAQJ0MQIFBXByQW10BQpwckFzc2V0RGNtCQEEY3BiaQIFCnByQXNBbXRYMTgFC2FtdEFzQW10WDE4AQpjYWxjUHJpY2VzAwVhbUFtdAVwckFtdAVscEFtdAQDY2ZnCQEDZ3BjAAQIYW10QXNEY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFC2lkeEFtdEFzRGNtBAdwckFzRGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQ1pZHhQcmljZUFzRGNtBAhwcmljZVgxOAkBA3BjcAQFCGFtdEFzRGNtBQdwckFzRGNtBQVhbUFtdAUFcHJBbXQECGFtQW10WDE4CQECdDECBQVhbUFtdAUIYW10QXNEY20ECHByQW10WDE4CQECdDECBQVwckFtdAUHcHJBc0RjbQQIbHBBbXRYMTgJAQJ0MQIFBWxwQW10BQZzY2FsZTgEDWxwUHJJbkFtQXNYMTgJAQRjcGJpAgUIYW1BbXRYMTgFCGxwQW10WDE4BA1scFBySW5QckFzWDE4CQEEY3BiaQIFCHByQW10WDE4BQhscEFtdFgxOAkAzAgCBQhwcmljZVgxOAkAzAgCBQ1scFBySW5BbUFzWDE4CQDMCAIFDWxwUHJJblByQXNYMTgFA25pbAEPY2FsY3VsYXRlUHJpY2VzAwVhbUFtdAVwckFtdAVscEFtdAQBcAkBCmNhbGNQcmljZXMDBQVhbUFtdAUFcHJBbXQFBWxwQW10CQDMCAIJAQJmMQIJAJEDAgUBcAAABQZzY2FsZTgJAMwIAgkBAmYxAgkAkQMCBQFwAAEFBnNjYWxlOAkAzAgCCQECZjECCQCRAwIFAXAAAgUGc2NhbGU4BQNuaWwBA2VnbwQGdHhJZDU4CnBtdEFzc2V0SWQIcG10THBBbXQLdXNlckFkZHJlc3MEA2NmZwkBA2dwYwAEBGxwSWQJAJEDAgUDY2ZnBQlpZHhMUEFzSWQEBGFtSWQJAJEDAgUDY2ZnBQlpZHhBbUFzSWQEBHBySWQJAJEDAgUDY2ZnBQlpZHhQckFzSWQEBWFtRGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQtpZHhBbXRBc0RjbQQFcHJEY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFDWlkeFByaWNlQXNEY20EA3N0cwkAkQMCBQNjZmcFCWlkeFBvb2xTdAQHbHBFbWlzcwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFBGxwSWQCC1dyb25nIExQIGlkCHF1YW50aXR5AwkBAiE9AgUEbHBJZAUKcG10QXNzZXRJZAkAAgECD1dyb25nIHBtdCBhc3NldAQJYW1CYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQEDGFtQmFsYW5jZVgxOAkBAnQxAgUJYW1CYWxhbmNlBQVhbURjbQQJcHJCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQEDHByQmFsYW5jZVgxOAkBAnQxAgUJcHJCYWxhbmNlBQVwckRjbQQLY3VyUHJpY2VYMTgJAQRjcGJpAgUMcHJCYWxhbmNlWDE4BQxhbUJhbGFuY2VYMTgECGN1clByaWNlCQECZjECBQtjdXJQcmljZVgxOAUGc2NhbGU4BAtwbXRMcEFtdFgxOAkBAnQxAgUIcG10THBBbXQFBnNjYWxlOAQKbHBFbWlzc1gxOAkBAnQxAgUHbHBFbWlzcwUGc2NhbGU4BAtvdXRBbUFtdFgxOAkAvAIDBQxhbUJhbGFuY2VYMTgFC3BtdExwQW10WDE4BQpscEVtaXNzWDE4BAtvdXRQckFtdFgxOAkAvAIDBQxwckJhbGFuY2VYMTgFC3BtdExwQW10WDE4BQpscEVtaXNzWDE4BAhvdXRBbUFtdAkBAmYxAgULb3V0QW1BbXRYMTgFBWFtRGNtBAhvdXRQckFtdAkBAmYxAgULb3V0UHJBbXRYMTgFBXByRGNtBAVzdGF0ZQMJAAACBQZ0eElkNTgCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQhvdXRBbUFtdAMJAAACBQRhbUlkAgVXQVZFUwUEdW5pdAkA2QQBBQRhbUlkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQhvdXRQckFtdAMJAAACBQRwcklkAgVXQVZFUwUEdW5pdAkA2QQBBQRwcklkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQNnYXUCCQClCAEFC3VzZXJBZGRyZXNzBQZ0eElkNTgJARFkYXRhR2V0QWN0aW9uSW5mbwYFCG91dEFtQW10BQhvdXRQckFtdAUIcG10THBBbXQFCGN1clByaWNlBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECcGwABQhjdXJQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBoAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUIY3VyUHJpY2UFA25pbAkAnAoKBQhvdXRBbUFtdAUIb3V0UHJBbXQFBGFtSWQFBHBySWQFCWFtQmFsYW5jZQUJcHJCYWxhbmNlBQdscEVtaXNzBQtjdXJQcmljZVgxOAUDc3RzBQVzdGF0ZQEDZXBvDAZ0eElkNTgIc2xpcHBhZ2UHaW5BbUFtdAZpbkFtSWQHaW5QckFtdAZpblBySWQLdXNlckFkZHJlc3MGaXNFdmFsBmVtaXRMcAppc09uZUFzc2V0BnBtdEFtdAVwbXRJZAQDY2ZnCQEDZ3BjAAQEbHBJZAkA2QQBCQCRAwIFA2NmZwUJaWR4TFBBc0lkBAdhbUlkU3RyCQCRAwIFA2NmZwUJaWR4QW1Bc0lkBAdwcklkU3RyCQCRAwIFA2NmZwUJaWR4UHJBc0lkBAlpbkFtSWRTdHIJAJEDAgUDY2ZnBQtpZHhJQW10QXNJZAQJaW5QcklkU3RyCQCRAwIFA2NmZwUNaWR4SVByaWNlQXNJZAQGYW10RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQtpZHhBbXRBc0RjbQQIcHJpY2VEY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFDWlkeFByaWNlQXNEY20EA3N0cwkAkQMCBQNjZmcFCWlkeFBvb2xTdAQEbHBFbQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQRscElkAghXciBscCBhcwhxdWFudGl0eQQJYW1CYWxhbmNlAwUGaXNFdmFsCQENZ2V0QWNjQmFsYW5jZQEFB2FtSWRTdHIDAwUKaXNPbmVBc3NldAkAAAIFBXBtdElkBQdhbUlkU3RyBwkAZQIJAQ1nZXRBY2NCYWxhbmNlAQUHYW1JZFN0cgUGcG10QW10AwUKaXNPbmVBc3NldAkBDWdldEFjY0JhbGFuY2UBBQdhbUlkU3RyCQBlAgkBDWdldEFjY0JhbGFuY2UBBQdhbUlkU3RyBQdpbkFtQW10BAlwckJhbGFuY2UDBQZpc0V2YWwJAQ1nZXRBY2NCYWxhbmNlAQUHcHJJZFN0cgMDBQppc09uZUFzc2V0CQAAAgUFcG10SWQFB3BySWRTdHIHCQBlAgkBDWdldEFjY0JhbGFuY2UBBQdwcklkU3RyBQZwbXRBbXQDBQppc09uZUFzc2V0CQENZ2V0QWNjQmFsYW5jZQEFB3BySWRTdHIJAGUCCQENZ2V0QWNjQmFsYW5jZQEFB3BySWRTdHIFB2luUHJBbXQED2luQW1Bc3NldEFtdFgxOAkBAnQxAgUHaW5BbUFtdAUGYW10RGNtBA9pblByQXNzZXRBbXRYMTgJAQJ0MQIFB2luUHJBbXQFCHByaWNlRGNtBAx1c2VyUHJpY2VYMTgJAQRjcGJpAgUPaW5QckFzc2V0QW10WDE4BQ9pbkFtQXNzZXRBbXRYMTgEDGFtQmFsYW5jZVgxOAkBAnQxAgUJYW1CYWxhbmNlBQZhbXREY20EDHByQmFsYW5jZVgxOAkBAnQxAgUJcHJCYWxhbmNlBQhwcmljZURjbQQBcgMJAAACBQRscEVtAAAEC2N1clByaWNlWDE4BQp6ZXJvQmlnSW50BAtzbGlwcGFnZVgxOAUKemVyb0JpZ0ludAQIbHBBbXRYMTgJAHYGCQC5AgIFD2luQW1Bc3NldEFtdFgxOAUPaW5QckFzc2V0QW10WDE4AAAJALYCAQAFAAEAAAUERE9XTgkAlwoFCQECZjECBQhscEFtdFgxOAUGc2NhbGU4CQECZjECBQ9pbkFtQXNzZXRBbXRYMTgFBmFtdERjbQkBAmYxAgUPaW5QckFzc2V0QW10WDE4BQhwcmljZURjbQkBBGNwYmkCCQC3AgIFDHByQmFsYW5jZVgxOAUPaW5QckFzc2V0QW10WDE4CQC3AgIFDGFtQmFsYW5jZVgxOAUPaW5BbUFzc2V0QW10WDE4BQtzbGlwcGFnZVgxOAQLY3VyUHJpY2VYMTgJAQRjcGJpAgUMcHJCYWxhbmNlWDE4BQxhbUJhbGFuY2VYMTgED3NsaXBwYWdlUmVhbFgxOAkAvAIDCQEDYWJzAQkAuAICBQtjdXJQcmljZVgxOAUMdXNlclByaWNlWDE4BQdzY2FsZTE4BQtjdXJQcmljZVgxOAQLc2xpcHBhZ2VYMTgJAQJ0MQIFCHNsaXBwYWdlBQZzY2FsZTgDAwkBAiE9AgULY3VyUHJpY2VYMTgFCnplcm9CaWdJbnQJAL8CAgUPc2xpcHBhZ2VSZWFsWDE4BQtzbGlwcGFnZVgxOAcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUPc2xpcHBhZ2VSZWFsWDE4AgMgPiAJAKYDAQULc2xpcHBhZ2VYMTgEDWxwRW1pc3Npb25YMTgJAQJ0MQIFBGxwRW0FBnNjYWxlOAQKcHJWaWFBbVgxOAkAvAIDBQ9pbkFtQXNzZXRBbXRYMTgFC2N1clByaWNlWDE4BQdzY2FsZTE4BAphbVZpYVByWDE4CQC8AgMFD2luUHJBc3NldEFtdFgxOAUHc2NhbGUxOAULY3VyUHJpY2VYMTgEDGV4cGVjdGVkQW10cwMJAL8CAgUKcHJWaWFBbVgxOAUPaW5QckFzc2V0QW10WDE4CQCUCgIFCmFtVmlhUHJYMTgFD2luUHJBc3NldEFtdFgxOAkAlAoCBQ9pbkFtQXNzZXRBbXRYMTgFCnByVmlhQW1YMTgEEWV4cEFtdEFzc2V0QW10WDE4CAUMZXhwZWN0ZWRBbXRzAl8xBBNleHBQcmljZUFzc2V0QW10WDE4CAUMZXhwZWN0ZWRBbXRzAl8yBAhscEFtdFgxOAkAvAIDBQ1scEVtaXNzaW9uWDE4BRNleHBQcmljZUFzc2V0QW10WDE4BQxwckJhbGFuY2VYMTgJAJcKBQkBAmYxAgUIbHBBbXRYMTgFBnNjYWxlOAkBAmYxAgURZXhwQW10QXNzZXRBbXRYMTgFBmFtdERjbQkBAmYxAgUTZXhwUHJpY2VBc3NldEFtdFgxOAUIcHJpY2VEY20FC2N1clByaWNlWDE4BQtzbGlwcGFnZVgxOAQJY2FsY0xwQW10CAUBcgJfMQQOY2FsY0FtQXNzZXRQbXQIBQFyAl8yBA5jYWxjUHJBc3NldFBtdAgFAXICXzMECGN1clByaWNlCQECZjECCAUBcgJfNAUGc2NhbGU4BAxzbGlwcGFnZUNhbGMJAQJmMQIIBQFyAl81BQZzY2FsZTgDCQBnAgAABQljYWxjTHBBbXQJAAIBAgdMUCA8PSAwBAllbWl0THBBbXQDCQEBIQEFBmVtaXRMcAAABQljYWxjTHBBbXQEBmFtRGlmZgkAZQIFB2luQW1BbXQFDmNhbGNBbUFzc2V0UG10BAZwckRpZmYJAGUCBQdpblByQW10BQ5jYWxjUHJBc3NldFBtdAQNJHQwMTU2MDExNTk0NgMDBQppc09uZUFzc2V0CQAAAgUFcG10SWQFB2FtSWRTdHIHCQCUCgIFBnBtdEFtdAAAAwMFCmlzT25lQXNzZXQJAAACBQVwbXRJZAUHcHJJZFN0cgcJAJQKAgAABQZwbXRBbXQJAJQKAgUOY2FsY0FtQXNzZXRQbXQFDmNhbGNQckFzc2V0UG10BAp3cml0ZUFtQW10CAUNJHQwMTU2MDExNTk0NgJfMQQKd3JpdGVQckFtdAgFDSR0MDE1NjAxMTU5NDYCXzIEC2NvbW1vblN0YXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECcGwABQhjdXJQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBoAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUIY3VyUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBA3BhdQIFC3VzZXJBZGRyZXNzBQZ0eElkNTgJARFkYXRhUHV0QWN0aW9uSW5mbwoFCndyaXRlQW1BbXQFCndyaXRlUHJBbXQFCWVtaXRMcEFtdAUIY3VyUHJpY2UFCHNsaXBwYWdlBQxzbGlwcGFnZUNhbGMFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFBmFtRGlmZgUGcHJEaWZmBQNuaWwJAJ8KDQUJY2FsY0xwQW10BQllbWl0THBBbXQFCGN1clByaWNlBQlhbUJhbGFuY2UFCXByQmFsYW5jZQUEbHBFbQUEbHBJZAUDc3RzBQtjb21tb25TdGF0ZQUGYW1EaWZmBQZwckRpZmYFBmluQW1JZAUGaW5QcklkAQNtb2EBBW9yZGVyBANjZmcJAQNncGMABAdhbXRBc0lkCQCRAwIFA2NmZwUJaWR4QW1Bc0lkBAZwckFzSWQJAJEDAgUDY2ZnBQlpZHhQckFzSWQEA3N0cwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUJaWR4UG9vbFN0BAhhbXRBc0RjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwULaWR4QW10QXNEY20EB3ByQXNEY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFDWlkeFByaWNlQXNEY20ED2FjY0FtdEFzQmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQdhbXRBc0lkBA5hY2NQckFzQmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQZwckFzSWQEC2N1clByaWNlWDE4AwkAAAIIBQVvcmRlcglvcmRlclR5cGUFA0J1eQkBA3BjcAQFCGFtdEFzRGNtBQdwckFzRGNtCQBkAgUPYWNjQW10QXNCYWxhbmNlCAUFb3JkZXIGYW1vdW50BQ5hY2NQckFzQmFsYW5jZQkBA3BjcAQFCGFtdEFzRGNtBQdwckFzRGNtCQBlAgUPYWNjQW10QXNCYWxhbmNlCAUFb3JkZXIGYW1vdW50BQ5hY2NQckFzQmFsYW5jZQQIY3VyUHJpY2UJAQJmMQIFC2N1clByaWNlWDE4BQZzY2FsZTgDAwMJAQNpZ3MABgkAAAIFA3N0cwUOUG9vbE1hdGNoZXJEaXMGCQAAAgUDc3RzBQxQb29sU2h1dGRvd24JAAIBAg1BZG1pbiBibG9ja2VkBApvckFtdEFzc2V0CAgFBW9yZGVyCWFzc2V0UGFpcgthbW91bnRBc3NldAQKb3JBbXRBc1N0cgMJAAACBQpvckFtdEFzc2V0BQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQpvckFtdEFzc2V0BAlvclByQXNzZXQICAUFb3JkZXIJYXNzZXRQYWlyCnByaWNlQXNzZXQECW9yUHJBc1N0cgMJAAACBQlvclByQXNzZXQFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFCW9yUHJBc3NldAMDCQECIT0CBQpvckFtdEFzU3RyBQdhbXRBc0lkBgkBAiE9AgUJb3JQckFzU3RyBQZwckFzSWQJAAIBAglXciBhc3NldHMECm9yZGVyUHJpY2UIBQVvcmRlcgVwcmljZQQIcHJpY2VEY20JAGsDBQZzY2FsZTgFB3ByQXNEY20FCGFtdEFzRGNtBA5jYXN0T3JkZXJQcmljZQkBAnRzAwUKb3JkZXJQcmljZQUGc2NhbGU4BQhwcmljZURjbQQRaXNPcmRlclByaWNlVmFsaWQDCQAAAggFBW9yZGVyCW9yZGVyVHlwZQUDQnV5CQBnAgUIY3VyUHJpY2UFDmNhc3RPcmRlclByaWNlCQBnAgUOY2FzdE9yZGVyUHJpY2UFCGN1clByaWNlBgECY2cBAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAgoxIHBtbnQgZXhwBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQKcG10QXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAZwbXRBbXQIBQNwbXQGYW1vdW50BAFyCQEDZWdvBAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEFCnBtdEFzc2V0SWQFBnBtdEFtdAgFAWkGY2FsbGVyBAhvdXRBbUFtdAgFAXICXzEECG91dFByQW10CAUBcgJfMgQDc3RzCQENcGFyc2VJbnRWYWx1ZQEIBQFyAl85BAVzdGF0ZQgFAXIDXzEwAwMJAQNpZ3MABgkAAAIFA3N0cwUMUG9vbFNodXRkb3duCQACAQkArAICAg9BZG1pbiBibG9ja2VkOiAJAKQDAQUDc3RzCQCXCgUFCG91dEFtQW10BQhvdXRQckFtdAUGcG10QW10BQpwbXRBc3NldElkBQVzdGF0ZQECY3AJBmNhbGxlcgR0eElkB2FtQXNQbXQHcHJBc1BtdAhzbGlwcGFnZQZlbWl0THAKaXNPbmVBc3NldAZwbXRBbXQFcG10SWQEAXIJAQNlcG8MBQR0eElkBQhzbGlwcGFnZQgJAQV2YWx1ZQEFB2FtQXNQbXQGYW1vdW50CAkBBXZhbHVlAQUHYW1Bc1BtdAdhc3NldElkCAkBBXZhbHVlAQUHcHJBc1BtdAZhbW91bnQICQEFdmFsdWUBBQdwckFzUG10B2Fzc2V0SWQFBmNhbGxlcgcFBmVtaXRMcAUKaXNPbmVBc3NldAUGcG10QW10BQVwbXRJZAQDc3RzCQENcGFyc2VJbnRWYWx1ZQEIBQFyAl84AwMDCQEDaWdzAAYJAAACBQNzdHMFClBvb2xQdXREaXMGCQAAAgUDc3RzBQxQb29sU2h1dGRvd24JAAIBCQCsAgICCEJsb2NrZWQ6CQCkAwEFA3N0cwUBcgEBbQAEByRtYXRjaDAJAKIIAQkBA21wawADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJwbQAEByRtYXRjaDAJAKIIAQkBBHBtcGsAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgACcGQJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAECbW0BAWkEByRtYXRjaDAJAQFtAAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yFQFpAQtjb25zdHJ1Y3RvcgECZmMEAWMJAQJtbQEFAWkDCQAAAgUBYwUBYwkAzAgCCQELU3RyaW5nRW50cnkCCQECZmMABQJmYwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnNldE1hbmFnZXIBF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAFjCQECbW0BBQFpAwkAAAIFAWMFAWMEAmNtCQDZBAEFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAIFAmNtBQJjbQkAzAgCCQELU3RyaW5nRW50cnkCCQEEcG1wawAFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY29uZmlybU1hbmFnZXIABAFwCQECcG0ABANocG0DCQEJaXNEZWZpbmVkAQUBcAYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUDaHBtBQNocG0EA2NwbQMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAXAGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFA2NwbQUDY3BtCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQNtcGsACQDYBAEJAQV2YWx1ZQEFAXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBBHBtcGsABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEDcHV0AgRzbGlwCWF1dG9TdGFrZQQHZmFjdENmZwkBA2dmYwAEC3N0YWtpbmdDbnRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdmYWN0Q2ZnBQ9pZHhGYWN0U3Rha0NudHICCldyIHN0IGFkZHIECHNsaXBDbnRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdmYWN0Q2ZnBRBpZHhGYWN0U2xpcHBDbnRyAgpXciBzbCBhZGRyAwkAZgIAAAUEc2xpcAkAAgECDldyb25nIHNsaXBwYWdlAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAFlCQECY3AJCQClCAEIBQFpBmNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAkQMCCAUBaQhwYXltZW50cwABBQRzbGlwBgcAAAIABAllbWl0THBBbXQIBQFlAl8yBAlscEFzc2V0SWQIBQFlAl83BAVzdGF0ZQgFAWUCXzkEBmFtRGlmZggFAWUDXzEwBAZwckRpZmYIBQFlA18xMQQEYW1JZAgFAWUDXzEyBARwcklkCAUBZQNfMTMEAXIJAPwHBAUDZmNhAgRlbWl0CQDMCAIFCWVtaXRMcEFtdAUDbmlsBQNuaWwDCQAAAgUBcgUBcgQCZWwEByRtYXRjaDAFAXIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQGbGVnYWN5BQckbWF0Y2gwCQD8BwQFBmxlZ2FjeQIEZW1pdAkAzAgCBQllbWl0THBBbXQFA25pbAUDbmlsBQR1bml0AwkAAAIFAmVsBQJlbAQCc2EDCQBmAgUGYW1EaWZmAAAJAPwHBAUIc2xpcENudHICA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRhbUlkBQZhbURpZmYFA25pbAUDbmlsAwkAAAIFAnNhBQJzYQQCc3ADCQBmAgUGcHJEaWZmAAAJAPwHBAUIc2xpcENudHICA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRwcklkBQZwckRpZmYFA25pbAUDbmlsAwkAAAIFAnNwBQJzcAQIbHBUcm5zZnIDBQlhdXRvU3Rha2UEAnNzCQD8BwQFC3N0YWtpbmdDbnRyAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQlscEFzc2V0SWQFCWVtaXRMcEFtdAUDbmlsAwkAAAIFAnNzBQJzcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJZW1pdExwQW10BQlscEFzc2V0SWQFA25pbAkAzggCBQVzdGF0ZQUIbHBUcm5zZnIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJcHV0T25lVGtuBQthbUFzc2V0UGFydAtwckFzc2V0UGFydAVvdXRMcAhzbGlwcGFnZQlhdXRvU3Rha2UEA2NmZwkBA2dmYwAEC3N0YWtpbmdDbnRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQNjZmcFD2lkeEZhY3RTdGFrQ250cgIKV3Igc3QgYWRkcgQIc2xpcENudHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFA2NmZwUQaWR4RmFjdFNsaXBwQ250cgIKV3Igc2wgYWRkcgQHZ3d4Q250cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUDY2ZnBRFpZHhGYWN0R3d4UmV3Q250cgILV3IgZ3d4IGFkZHIEB3Bvb2xDZmcJAQNncGMABARhbUlkCQCRAwIFB3Bvb2xDZmcFCWlkeEFtQXNJZAQEcHJJZAkAkQMCBQdwb29sQ2ZnBQlpZHhQckFzSWQEBWFtRGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcG9vbENmZwULaWR4QW10QXNEY20EBXByRGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcG9vbENmZwUNaWR4UHJpY2VBc0RjbQQFYWRkb24JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBA2FkYQACAAQLdXNlckFkZHJlc3MDCQAAAgUFYWRkb24JAKUIAQgFAWkGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIIBQFpBmNhbGxlcgQNYWRkb25Db250cmFjdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEDYWRhAAIJbm8gYWRkb25zAhphZGRvbiBhZGRyZXNzIGluIG5vdCB2YWxpZAQFY2hlY2sJAP0HBAUNYWRkb25Db250cmFjdAISZW5zdXJlQ2FuUHV0T25lVGtuCQDMCAIJAKUIAQULdXNlckFkZHJlc3MFA25pbAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawMDAwMJAGcCAAAFCHNsaXBwYWdlBgkAZwIAAAULYW1Bc3NldFBhcnQGCQBnAgAABQtwckFzc2V0UGFydAYJAGcCAAAFBW91dExwCQACAQIMV3JvbmcgcGFyYW1zAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQILMSBwbW50IGV4cGQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABApwbXRBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQGcG10QW10CAUDcG10BmFtb3VudAMJAGYCAICt4gQFBnBtdEFtdAkAAgECDVdyb25nIHBtdCBhbXQECWFtQmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkBAlwckJhbGFuY2UJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAQNJHQwMjQ4NTkyNTQzNQMJAAACBQpwbXRBc3NldElkBQRhbUlkAwMJAGYCBQZwbXRBbXQFCWFtQmFsYW5jZQYJAGYCBQthbUFzc2V0UGFydAUGcG10QW10CQACAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAkAmAoGCQBlAgUJYW1CYWxhbmNlBQZwbXRBbXQFCXByQmFsYW5jZQkAZQIFBnBtdEFtdAULYW1Bc3NldFBhcnQFC3ByQXNzZXRQYXJ0AAAAAAMJAAACBQpwbXRBc3NldElkBQRwcklkAwMJAGYCBQZwbXRBbXQFCXByQmFsYW5jZQYJAGYCBQtwckFzc2V0UGFydAUGcG10QW10CQACAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAkAmAoGBQlhbUJhbGFuY2UJAGUCBQlwckJhbGFuY2UFBnBtdEFtdAAAAAAJAGUCBQZwbXRBbXQFC3ByQXNzZXRQYXJ0BQthbUFzc2V0UGFydAkAAgECEHdyb25nIHBtdEFzc2V0SWQEDGFtQmFsYW5jZU5vdwgFDSR0MDI0ODU5MjU0MzUCXzEEDHByQmFsYW5jZU5vdwgFDSR0MDI0ODU5MjU0MzUCXzIEDHZpcnRTd2FwSW5BbQgFDSR0MDI0ODU5MjU0MzUCXzMEDXZpcnRTd2FwT3V0UHIIBQ0kdDAyNDg1OTI1NDM1Al80BAx2aXJ0U3dhcEluUHIIBQ0kdDAyNDg1OTI1NDM1Al81BA12aXJ0U3dhcE91dEFtCAUNJHQwMjQ4NTkyNTQzNQJfNgQCRDAJAPwHBAUHZ3d4Q250cgIFY2FsY0QJAMwIAgkApAMBBQxhbUJhbGFuY2VOb3cJAMwIAgkApAMBBQxwckJhbGFuY2VOb3cJAMwIAgUBQQkAzAgCBQVBbXVsdAkAzAgCBQVEY29udgUDbmlsBQNuaWwEAkQxCQD8BwQFB2d3eENudHICBWNhbGNECQDMCAIJAKYDAQkAtgIBCQBlAgkAZAIFDGFtQmFsYW5jZU5vdwUMdmlydFN3YXBJbkFtBQ12aXJ0U3dhcE91dEFtCQDMCAIJAKYDAQkAtgIBCQBlAgkAZAIFDHByQmFsYW5jZU5vdwUMdmlydFN3YXBJblByBQ12aXJ0U3dhcE91dFByCQDMCAIFAUEJAMwIAgUFQW11bHQJAMwIAgUFRGNvbnYFA25pbAUDbmlsBAZEMHZzRDEJAQJ2ZAMJAKcDAQkBA3N0cgEFAkQxCQCnAwEJAQNzdHIBBQJEMAUKc2xpcHBhZ2U0RAMJAAACBQZEMHZzRDEFBkQwdnNEMQQGZXN0UHV0CQECY3AJCQClCAEIBQFpBmNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQRhbUlkBQthbUFzc2V0UGFydAkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUEcHJJZAULcHJBc3NldFBhcnQFCHNsaXBwYWdlBgYFBnBtdEFtdAUKcG10QXNzZXRJZAQHZXN0aW1MUAgFBmVzdFB1dAJfMgQJbHBBc3NldElkCAUGZXN0UHV0Al83BAVzdGF0ZQgFBmVzdFB1dAJfOQQGYW1EaWZmCAUGZXN0UHV0A18xMAQGcHJEaWZmCAUGZXN0UHV0A18xMQQJbHBDYWxjUmVzCQEDdmFkAwkAtgIBBQdlc3RpbUxQCQC2AgEFBW91dExwCQC2AgEFCHNsaXBwYWdlBAllbWl0THBBbXQJAKADAQgFCWxwQ2FsY1JlcwJfMgQBZQkA/AcEBQNmY2ECBGVtaXQJAMwIAgUJZW1pdExwQW10BQNuaWwFA25pbAMJAAACBQFlBQFlBAJlbAQHJG1hdGNoMAUBZQMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAZsZWdhY3kFByRtYXRjaDAJAPwHBAUGbGVnYWN5AgRlbWl0CQDMCAIFCWVtaXRMcEFtdAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZWwFAmVsBAJzYQMJAGYCBQZhbURpZmYAAAkA/AcEBQhzbGlwQ250cgIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUEYW1JZAUGYW1EaWZmBQNuaWwFA25pbAMJAAACBQJzYQUCc2EEAnNwAwkAZgIFBnByRGlmZgAACQD8BwQFCHNsaXBDbnRyAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQRwcklkBQZwckRpZmYFA25pbAUDbmlsAwkAAAIFAnNwBQJzcAQIbHBUcm5zZnIDBQlhdXRvU3Rha2UEAnNzCQD8BwQFC3N0YWtpbmdDbnRyAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQlscEFzc2V0SWQFCWVtaXRMcEFtdAUDbmlsAwkAAAIFAnNzBQJzcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJZW1pdExwQW10BQlscEFzc2V0SWQFA25pbAkAzggCBQVzdGF0ZQUIbHBUcm5zZnIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcHV0Rm9yRnJlZQEHbWF4U2xwZwMJAGYCAAAFB21heFNscGcJAAIBAgpXcm9uZyBzbHBnAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAZlc3RQdXQJAQJjcAkJAKUIAQgFAWkGY2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAQ9BdHRhY2hlZFBheW1lbnQCCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQFpCHBheW1lbnRzAAEFB21heFNscGcHBwAAAgAIBQZlc3RQdXQCXzkBaQEDZ2V0AAQBcgkBAmNnAQUBaQQJb3V0QW10QW10CAUBcgJfMQQIb3V0UHJBbXQIBQFyAl8yBAZwbXRBbXQIBQFyAl8zBApwbXRBc3NldElkCAUBcgJfNAQFc3RhdGUIBQFyAl81BAFiCQD8BwQFA2ZjYQIEYnVybgkAzAgCBQZwbXRBbXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUGcG10QW10BQNuaWwDCQAAAgUBYgUBYgUFc3RhdGUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJZ2V0T25lVGtuBQpleGNoUmVzdWx0B25vdFVzZWQJb3V0QW1vdW50Cm91dEFzc2V0SWQIc2xpcHBhZ2UDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAgsxIHBtbnQgZXhwZAQDY2ZnCQEDZ3BjAAQEbHBJZAkAkQMCBQNjZmcFCWlkeExQQXNJZAQEYW1JZAkAkQMCBQNjZmcFCWlkeEFtQXNJZAQEcHJJZAkAkQMCBQNjZmcFCWlkeFByQXNJZAQFYW1EY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFC2lkeEFtdEFzRGNtBAVwckRjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUNaWR4UHJpY2VBc0RjbQQDc3RzCQCRAwIFA2NmZwUJaWR4UG9vbFN0BAdmYWN0Q2ZnCQEDZ2ZjAAQHZ3d4Q250cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHZmFjdENmZwURaWR4RmFjdEd3eFJld0NudHICCldyIHNsIGFkZHIEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAVhZGRvbgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEDYWRhAAIABAt1c2VyQWRkcmVzcwMJAAACBQVhZGRvbgkApQgBCAUBaQZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcggFAWkGY2FsbGVyBAZ0eElkNTgJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQKcG10QXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAZwbXRBbXQIBQNwbXQGYW1vdW50BA1hZGRvbkNvbnRyYWN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAQNhZGEAAglubyBhZGRvbnMCGmFkZG9uIGFkZHJlc3MgaW4gbm90IHZhbGlkBAVjaGVjawkA/QcEBQ1hZGRvbkNvbnRyYWN0AhJlbnN1cmVDYW5HZXRPbmVUa24JAMwIAgkApQgBBQt1c2VyQWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrAwkAZgIAgJTr3AMFBnBtdEFtdAkAAgECDU1pbiBwbXQgMTAgTFADAwMJAGYCAAAFCHNsaXBwYWdlBgkAZgIAAAUKZXhjaFJlc3VsdAYJAGYCAAAFCW91dEFtb3VudAkAAgECDFdyb25nIHBhcmFtcwMJAQIhPQIFBGxwSWQJANgEAQUKcG10QXNzZXRJZAkAAgECCFdyb25nIExQBAFyCQEDZWdvBAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEFCnBtdEFzc2V0SWQFBnBtdEFtdAgFAWkGY2FsbGVyBAplc3RpbUFtQW10CAUBcgJfMQQKZXN0aW1QckFtdAgFAXICXzIECWFtQmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkBAlwckJhbGFuY2UJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAQNJHQwMzA0NjYzMDkyMwMJAAACBQpvdXRBc3NldElkBQRhbUlkCQCZCgcJAGUCBQlhbUJhbGFuY2UFCmVzdGltQW1BbXQJAGUCBQlwckJhbGFuY2UFCmVzdGltUHJBbXQFCmV4Y2hSZXN1bHQFCmVzdGltUHJBbXQAAAAACQBkAgUKZXN0aW1BbUFtdAUKZXhjaFJlc3VsdAMJAAACBQpvdXRBc3NldElkBQRwcklkCQCZCgcJAGUCBQlhbUJhbGFuY2UFCmVzdGltQW1BbXQJAGUCBQlwckJhbGFuY2UFCmVzdGltUHJBbXQAAAAABQpleGNoUmVzdWx0BQplc3RpbUFtQW10CQBkAgUKZXN0aW1QckFtdAUKZXhjaFJlc3VsdAkAAgECEHdyb25nIG91dEFzc2V0SWQEDGFtQmFsYW5jZU5vdwgFDSR0MDMwNDY2MzA5MjMCXzEEDHByQmFsYW5jZU5vdwgFDSR0MDMwNDY2MzA5MjMCXzIEDHZpcnRTd2FwSW5BbQgFDSR0MDMwNDY2MzA5MjMCXzMEDXZpcnRTd2FwT3V0UHIIBQ0kdDAzMDQ2NjMwOTIzAl80BAx2aXJ0U3dhcEluUHIIBQ0kdDAzMDQ2NjMwOTIzAl81BA12aXJ0U3dhcE91dEFtCAUNJHQwMzA0NjYzMDkyMwJfNgQIdG90YWxHZXQIBQ0kdDAzMDQ2NjMwOTIzAl83AwMJAGYCAAAFDHZpcnRTd2FwSW5BbQYJAGYCAAAFDHZpcnRTd2FwSW5QcgkAAgECCldyb25nIGNhbGMEAkQwCQD8BwQFB2d3eENudHICBWNhbGNECQDMCAIJAKQDAQUMYW1CYWxhbmNlTm93CQDMCAIJAKQDAQUMcHJCYWxhbmNlTm93CQDMCAIFAUEJAMwIAgUFQW11bHQJAMwIAgUFRGNvbnYFA25pbAUDbmlsBAJEMQkA/AcEBQdnd3hDbnRyAgVjYWxjRAkAzAgCCQCkAwEJAGQCCQBlAgUMYW1CYWxhbmNlTm93BQx2aXJ0U3dhcEluQW0FDXZpcnRTd2FwT3V0QW0JAMwIAgkApAMBCQBlAgkAZAIFDHByQmFsYW5jZU5vdwUNdmlydFN3YXBPdXRQcgUMdmlydFN3YXBJblByCQDMCAIFAUEJAMwIAgUFQW11bHQJAMwIAgUFRGNvbnYFA25pbAUDbmlsBAZEMHZzRDEJAQJ2ZAMJAKcDAQkBA3N0cgEFAkQxCQCnAwEJAQNzdHIBBQJEMAUKc2xpcHBhZ2U0RAMJAAACBQZEMHZzRDEFBkQwdnNEMQQIZmluYWxSZXMJAQN2YWQDCQC2AgEFCHRvdGFsR2V0CQC2AgEFCW91dEFtb3VudAkAtgIBBQhzbGlwcGFnZQMJAAACBQhmaW5hbFJlcwUIZmluYWxSZXMEDSR0MDMxNjI4MzE3MzIDCQAAAgUKb3V0QXNzZXRJZAUEYW1JZAkAlAoCCQCgAwEIBQhmaW5hbFJlcwJfMgAACQCUCgIAAAkAoAMBCAUIZmluYWxSZXMCXzIEBW91dEFtCAUNJHQwMzE2MjgzMTczMgJfMQQFb3V0UHIIBQ0kdDAzMTYyODMxNzMyAl8yBAhjdXJQclgxOAkBBGNwYmkCCQECdDECBQlwckJhbGFuY2UFBXByRGNtCQECdDECBQlhbUJhbGFuY2UFBWFtRGNtBAVjdXJQcgkBAmYxAgUIY3VyUHJYMTgFBnNjYWxlOAQFc3RhdGUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MJAGQCBQVvdXRBbQUFb3V0UHIDCQAAAgUKb3V0QXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUKb3V0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEDZ2F1AgkApQgBBQt1c2VyQWRkcmVzcwUGdHhJZDU4CQERZGF0YUdldEFjdGlvbkluZm8GBQVvdXRBbQUFb3V0UHIFBnBtdEFtdAUFY3VyUHIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwbAAFBWN1clByCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECcGgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQVjdXJQcgUDbmlsAwkAAAIFBXN0YXRlBQVzdGF0ZQQEYnVybgkA/AcEBQNmY2ECBGJ1cm4JAMwIAgUGcG10QW10BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCnBtdEFzc2V0SWQFBnBtdEFtdAUDbmlsAwkAAAIFBGJ1cm4FBGJ1cm4FBXN0YXRlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWdldE5vTGVzcwISbm9MZXNzVGhlbkFtdEFzc2V0FG5vTGVzc1RoZW5QcmljZUFzc2V0BAFyCQECY2cBBQFpBAhvdXRBbUFtdAgFAXICXzEECG91dFByQW10CAUBcgJfMgQGcG10QW10CAUBcgJfMwQKcG10QXNzZXRJZAgFAXICXzQEBXN0YXRlCAUBcgJfNQMJAGYCBRJub0xlc3NUaGVuQW10QXNzZXQFCG91dEFtQW10CQACAQkArAICCQCsAgIJAKwCAgIJRmFpbGVkOiAgCQCkAwEFCG91dEFtQW10AgMgPCAJAKQDAQUSbm9MZXNzVGhlbkFtdEFzc2V0AwkAZgIFFG5vTGVzc1RoZW5QcmljZUFzc2V0BQhvdXRQckFtdAkAAgEJAKwCAgkArAICCQCsAgICCEZhaWxlZDogCQCkAwEFCG91dFByQW10AgMgPCAJAKQDAQUUbm9MZXNzVGhlblByaWNlQXNzZXQEFGJ1cm5MUEFzc2V0T25GYWN0b3J5CQD8BwQFA2ZjYQIEYnVybgkAzAgCBQZwbXRBbXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUGcG10QW10BQNuaWwDCQAAAgUUYnVybkxQQXNzZXRPbkZhY3RvcnkFFGJ1cm5MUEFzc2V0T25GYWN0b3J5BQVzdGF0ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ11bnN0YWtlQW5kR2V0AQZhbW91bnQEDWNoZWNrUGF5bWVudHMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAg1ObyBwbW50cyBleHBkBgMJAAACBQ1jaGVja1BheW1lbnRzBQ1jaGVja1BheW1lbnRzBANjZmcJAQNncGMABApmYWN0b3J5Q2ZnCQEDZ2ZjAAQJbHBBc3NldElkCQDZBAEJAJEDAgUDY2ZnBQlpZHhMUEFzSWQEB3N0YWtpbmcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCmZhY3RvcnlDZmcFD2lkeEZhY3RTdGFrQ250cgIKV3Igc3QgYWRkcgQKdW5zdGFrZUludgkA/AcEBQdzdGFraW5nAgd1bnN0YWtlCQDMCAIJANgEAQUJbHBBc3NldElkCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUKdW5zdGFrZUludgUKdW5zdGFrZUludgQBcgkBA2VnbwQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBBQlscEFzc2V0SWQFBmFtb3VudAgFAWkGY2FsbGVyBANzdHMJAQ1wYXJzZUludFZhbHVlAQgFAXICXzkEBXN0YXRlCAUBcgNfMTAEAXYDAwkBA2lncwAGCQAAAgUDc3RzBQxQb29sU2h1dGRvd24JAAIBCQCsAgICCUJsb2NrZWQ6IAkApAMBBQNzdHMGAwkAAAIFAXYFAXYEBWJ1cm5BCQD8BwQFA2ZjYQIEYnVybgkAzAgCBQZhbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUJbHBBc3NldElkBQZhbW91bnQFA25pbAMJAAACBQVidXJuQQUFYnVybkEFBXN0YXRlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGFjdGl2YXRlAghhbXRBc1N0cgdwckFzU3RyAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIJAKUIAQUDZmNhCQACAQIGZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAAUIYW10QXNTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAnBhAAUHcHJBc1N0cgUDbmlsAgdzdWNjZXNzAWkBBHNldFMCAWsBdgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyCQEEc3RyZgIFBHRoaXMJAQNhZGEABQJwZAkAzAgCCQELU3RyaW5nRW50cnkCBQFrBQF2BQNuaWwBaQEEc2V0SQIBawF2AwkBAiE9AgkApQgBCAUBaQZjYWxsZXIJAQRzdHJmAgUEdGhpcwkBA2FkYQAFAnBkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQFrBQF2BQNuaWwBaQEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQEDZ3BjAAFpARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQdhc3NldElkCQCUCgIFA25pbAkBDWdldEFjY0JhbGFuY2UBBQdhc3NldElkAWkBGWNhbGNQcmljZXNXcmFwcGVyUkVBRE9OTFkDBWFtQW10BXByQW10BWxwQW10BAJwcgkBCmNhbGNQcmljZXMDBQVhbUFtdAUFcHJBbXQFBWxwQW10CQCUCgIFA25pbAkAzAgCCQCmAwEJAJEDAgUCcHIAAAkAzAgCCQCmAwEJAJEDAgUCcHIAAQkAzAgCCQCmAwEJAJEDAgUCcHIAAgUDbmlsAWkBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCA3ZhbAxyZXNTY2FsZU11bHQJAJQKAgUDbmlsCQECZjECCQCnAwEFA3ZhbAUMcmVzU2NhbGVNdWx0AWkBFHRvWDE4V3JhcHBlclJFQURPTkxZAgdvcmlnVmFsDW9yaWdTY2FsZU11bHQJAJQKAgUDbmlsCQCmAwEJAQJ0MQIFB29yaWdWYWwFDW9yaWdTY2FsZU11bHQBaQEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAghwckFtdFgxOAhhbUFtdFgxOAkAlAoCBQNuaWwJAKYDAQkBBGNwYmkCCQCnAwEFCHByQW10WDE4CQCnAwEFCGFtQW10WDE4AWkBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQZ0eElkNTgIc2xpcHBhZ2UHaW5BbUFtdAZpbkFtSWQHaW5QckFtdAZpblBySWQHdXNyQWRkcgZpc0V2YWwGZW1pdExwCQCUCgIFA25pbAkBA2VwbwwFBnR4SWQ1OAUIc2xpcHBhZ2UFB2luQW1BbXQFBmluQW1JZAUHaW5QckFtdAUGaW5QcklkBQd1c3JBZGRyBQZpc0V2YWwFBmVtaXRMcAcAAAIAAWkBI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZBAZ0eElkNTgHcG10QXNJZAhwbXRMcEFtdAd1c3JBZGRyBAFyCQEDZWdvBAUGdHhJZDU4BQdwbXRBc0lkBQhwbXRMcEFtdAkBEUBleHRyTmF0aXZlKDEwNjIpAQUHdXNyQWRkcgkAlAoCBQNuaWwJAJwKCggFAXICXzEIBQFyAl8yCAUBcgJfMwgFAXICXzQIBQFyAl81CAUBcgJfNggFAXICXzcJAKYDAQgFAXICXzgIBQFyAl85CAUBcgNfMTABAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJAQFtAAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAgVPcmRlcgQFb3JkZXIFByRtYXRjaDAECm1hdGNoZXJQdWIJAQJtcAAECm9yZGVyVmFsaWQJAQNtb2EBBQVvcmRlcgQLc2VuZGVyVmFsaWQJAPQDAwgFBW9yZGVyCWJvZHlCeXRlcwkAkQMCCAUFb3JkZXIGcHJvb2ZzAAAIBQVvcmRlcg9zZW5kZXJQdWJsaWNLZXkEDG1hdGNoZXJWYWxpZAkA9AMDCAUFb3JkZXIJYm9keUJ5dGVzCQCRAwIIBQVvcmRlcgZwcm9vZnMAAQUKbWF0Y2hlclB1YgMDAwUKb3JkZXJWYWxpZAULc2VuZGVyVmFsaWQHBQxtYXRjaGVyVmFsaWQHBgkBA3RvZQMFCm9yZGVyVmFsaWQFC3NlbmRlclZhbGlkBQxtYXRjaGVyVmFsaWQDCQABAgUHJG1hdGNoMAIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAXMFByRtYXRjaDAEB25ld0hhc2gJAPYDAQkBBXZhbHVlAQgFAXMGc2NyaXB0BAthbGxvd2VkSGFzaAkA2wQBCQEFdmFsdWUBCQCdCAIFA2ZjYQkBHGtleUFsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2gABAtjdXJyZW50SGFzaAkA8QcBBQR0aGlzAwMJAAACBQthbGxvd2VkSGFzaAUHbmV3SGFzaAkBAiE9AgULY3VycmVudEhhc2gFB25ld0hhc2gHBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5CQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXm8emkr", "height": 2207013, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BKQuFviKjXvX831vGSc8VCHrUhW2Cpy1o1v6xfhJzP4i Next: CkimVPiA9nR9jVsEgoVbHmhMsudRKaAK7NxVMQENQdbn Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "__"
4+let a = 100000000
55
6-let b = ""
6+let b = toBigInt(100000000)
77
8-let c = 1
8+let c = toBigInt(1000000000000000000)
99
10-let d = 3
10+let d = toBigInt(0)
1111
12-let e = 4
12+let e = toBigInt(1)
1313
14-let f = 5
14+let f = toBigInt((a - ((a * 1) / a)))
1515
16-let g = 1
16+let g = "100"
1717
18-func h () = "%s__factoryContract"
18+let h = "1"
19+
20+let i = "__"
21+
22+let j = ""
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 1
33+
34+let p = 2
35+
36+let q = 3
37+
38+let r = 4
39+
40+let s = 5
41+
42+let t = 6
43+
44+let u = 7
45+
46+let v = 8
47+
48+let w = 9
49+
50+let x = 1
51+
52+let y = 7
53+
54+let z = 10
55+
56+let A = "%s__delay"
57+
58+func B (C,D) = fraction(toBigInt(C), c, toBigInt(D))
1959
2060
21-func i () = "%s__managerPublicKey"
61+func E (F,G) = toInt(fraction(F, toBigInt(G), c))
2262
2363
24-func j () = "%s__pendingManagerPublicKey"
64+func H (I,J,K) = fraction(I, J, K)
2565
2666
27-func k () = "%s__poolAddress"
67+func L (F) = if ((d > F))
68+ then -(F)
69+ else F
2870
2971
30-func l () = "%s__amountAsset"
72+func M () = "%s__factoryContract"
3173
3274
33-func m () = "%s__priceAsset"
75+func N () = "%s__managerPublicKey"
3476
3577
36-func n () = "%s__adminPubKeys"
78+func O () = "%s__pendingManagerPublicKey"
3779
3880
39-func o () = "%s__amp"
81+func P () = "%s%s__price__last"
4082
4183
42-func p (q) = ("%s%d__amp__" + toString(q))
84+func Q (R,S) = makeString(["%s%s%d%d__price__history", toString(R), toString(S)], i)
4385
4486
45-func r () = "%s__factoryConfig"
87+func T (U,V) = ((("%s%s%s__P__" + U) + "__") + V)
4688
4789
48-func s (t,u) = (((("%d%d%s__" + t) + "__") + u) + "__config")
90+func W (U,V) = ((("%s%s%s__G__" + U) + "__") + V)
4991
5092
51-func v (w) = ("%s%s%s__mappings__baseAsset2internalId__" + w)
93+func X () = "%s__amountAsset"
5294
5395
54-func x (y,z) = valueOrErrorMessage(getString(y, z), makeString(["mandatory ", toString(y), ".", z, " not defined"], ""))
96+func Y () = "%s__priceAsset"
5597
5698
57-func A (y,z) = valueOrErrorMessage(getInteger(y, z), makeString(["mandatory ", toString(y), ".", z, " not defined"], ""))
99+func Z () = "%s__amp"
58100
59101
60-let B = addressFromStringValue(x(this, k()))
102+func aa () = "%s__addonAddr"
61103
62-let C = addressFromStringValue(x(B, h()))
63104
64-func D () = {
65- let E = x(B, l())
66- let F = x(B, m())
67- let G = A(C, v(F))
68- let t = A(C, v(E))
69- split(x(C, s(toString(t), toString(G))), a)
105+func ab (ac) = makeString(["%s%s__lastGetOneTknCall", ac], i)
106+
107+
108+func ad (ac) = makeString(["%s%s__lastPutOneTknCall", ac], i)
109+
110+
111+func ae () = "%s__factoryConfig"
112+
113+
114+func af () = "%s%s__matcher__publicKey"
115+
116+
117+func ag (ah,ai) = (((("%d%d%s__" + ah) + "__") + ai) + "__config")
118+
119+
120+func aj (ak) = ("%s%s%s__mappings__baseAsset2internalId__" + ak)
121+
122+
123+func al () = "%s__shutdown"
124+
125+
126+func am () = "%s__allowedLpStableScriptHash"
127+
128+
129+func an (ao,ap,aq) = throw(((((("Failed: ordValid=" + toString(ao)) + " sndrValid=") + toString(ap)) + " mtchrValid=") + toString(aq)))
130+
131+
132+func ar (F) = {
133+ let as = F
134+ if ($isInstanceOf(as, "String"))
135+ then {
136+ let at = as
137+ at
138+ }
139+ else throw("fail cast to String")
70140 }
71141
72142
73-func H () = split(x(C, r()), a)
143+func au (av,aw) = valueOrErrorMessage(getString(av, aw), makeString(["mandatory ", toString(av), ".", aw, " not defined"], ""))
74144
75145
76-func I () = {
77- let J = getString(i())
78- if ($isInstanceOf(J, "String"))
146+func ax (av,aw) = valueOrErrorMessage(getInteger(av, aw), makeString(["mandatory ", toString(av), ".", aw, " not defined"], ""))
147+
148+
149+let ay = addressFromStringValue(au(this, M()))
150+
151+let az = au(this, Z())
152+
153+func aA () = valueOrElse(getBoolean(ay, al()), false)
154+
155+
156+func aB () = fromBase58String(au(ay, af()))
157+
158+
159+func aC () = {
160+ let aD = au(this, X())
161+ let aE = au(this, Y())
162+ let aF = ax(ay, aj(aE))
163+ let ah = ax(ay, aj(aD))
164+ split(au(ay, ag(toString(ah), toString(aF))), i)
165+ }
166+
167+
168+func aG () = split(au(ay, ae()), i)
169+
170+
171+func aH (aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aI), toString(aJ), toString(aK), toString(aL), toString(aM), toString(aN), toString(aO), toString(aP), toString(aQ), toString(aR)], i)
172+
173+
174+func aS (aT,aU,aV,aL,aO,aP) = makeString(["%d%d%d%d%d%d", toString(aT), toString(aU), toString(aV), toString(aL), toString(aO), toString(aP)], i)
175+
176+
177+func aW (aX) = if ((aX == "WAVES"))
178+ then wavesBalance(this).available
179+ else assetBalance(this, fromBase58String(aX))
180+
181+
182+func aY (aZ,ba) = fraction(aZ, c, ba)
183+
184+
185+func bb (bc,bd,be) = {
186+ let bf = fraction((bc - bd), b, bd)
187+ let bg = ((be - L(bf)) > d)
188+ if (!(bg))
189+ then throw(("Big slpg: " + toString(bf)))
190+ else $Tuple2(bg, min([bc, bd]))
191+ }
192+
193+
194+func bh (bi,bj,bk) = {
195+ let bf = fraction(bj, b, bi)
196+ let bl = (bk > bf)
197+ if (if (bl)
198+ then true
199+ else (bj > bi))
200+ then throw(((((((toString(bj) + " ") + toString(bi)) + " ") + toString(bf)) + " ") + toString(bk)))
201+ else bl
202+ }
203+
204+
205+func bm (bn,bo,bp,bq) = {
206+ let br = B(bp, bn)
207+ let bs = B(bq, bo)
208+ aY(bs, br)
209+ }
210+
211+
212+func bt (bp,bq,bu) = {
213+ let bv = aC()
214+ let bw = parseIntValue(bv[t])
215+ let bx = parseIntValue(bv[u])
216+ let by = bm(bw, bx, bp, bq)
217+ let ba = B(bp, bw)
218+ let aZ = B(bq, bx)
219+ let bz = B(bu, a)
220+ let bA = aY(ba, bz)
221+ let bB = aY(aZ, bz)
222+[by, bA, bB]
223+ }
224+
225+
226+func bC (bp,bq,bu) = {
227+ let bD = bt(bp, bq, bu)
228+[E(bD[0], a), E(bD[1], a), E(bD[2], a)]
229+ }
230+
231+
232+func bE (bF,bG,bH,bI) = {
233+ let bv = aC()
234+ let bJ = bv[q]
235+ let bK = bv[r]
236+ let bL = bv[s]
237+ let bM = parseIntValue(bv[t])
238+ let bN = parseIntValue(bv[u])
239+ let bO = bv[p]
240+ let bP = valueOrErrorMessage(assetInfo(fromBase58String(bJ)), "Wrong LP id").quantity
241+ if ((bJ != bG))
242+ then throw("Wrong pmt asset")
243+ else {
244+ let bQ = aW(bK)
245+ let bR = B(bQ, bM)
246+ let bS = aW(bL)
247+ let bT = B(bS, bN)
248+ let bU = aY(bT, bR)
249+ let bV = E(bU, a)
250+ let bW = B(bH, a)
251+ let bX = B(bP, a)
252+ let bY = fraction(bR, bW, bX)
253+ let bZ = fraction(bT, bW, bX)
254+ let ca = E(bY, bM)
255+ let cb = E(bZ, bN)
256+ let cc = if ((bF == ""))
257+ then nil
258+ else [ScriptTransfer(bI, ca, if ((bK == "WAVES"))
259+ then unit
260+ else fromBase58String(bK)), ScriptTransfer(bI, cb, if ((bL == "WAVES"))
261+ then unit
262+ else fromBase58String(bL)), StringEntry(W(toString(bI), bF), aS(ca, cb, bH, bV, height, lastBlock.timestamp)), IntegerEntry(P(), bV), IntegerEntry(Q(height, lastBlock.timestamp), bV)]
263+ $Tuple10(ca, cb, bK, bL, bQ, bS, bP, bU, bO, cc)
264+ }
265+ }
266+
267+
268+func cd (bF,be,ce,cf,cg,ch,bI,ci,cj,ck,cl,cm) = {
269+ let bv = aC()
270+ let bJ = fromBase58String(bv[q])
271+ let cn = bv[r]
272+ let co = bv[s]
273+ let cp = bv[v]
274+ let cq = bv[w]
275+ let cr = parseIntValue(bv[t])
276+ let cs = parseIntValue(bv[u])
277+ let bO = bv[p]
278+ let ct = valueOrErrorMessage(assetInfo(bJ), "Wr lp as").quantity
279+ let bQ = if (ci)
280+ then aW(cn)
281+ else if (if (ck)
282+ then (cm == cn)
283+ else false)
284+ then (aW(cn) - cl)
285+ else if (ck)
286+ then aW(cn)
287+ else (aW(cn) - ce)
288+ let bS = if (ci)
289+ then aW(co)
290+ else if (if (ck)
291+ then (cm == co)
292+ else false)
293+ then (aW(co) - cl)
294+ else if (ck)
295+ then aW(co)
296+ else (aW(co) - cg)
297+ let cu = B(ce, cr)
298+ let cv = B(cg, cs)
299+ let cw = aY(cv, cu)
300+ let bR = B(bQ, cr)
301+ let bT = B(bS, cs)
302+ let cx = if ((ct == 0))
79303 then {
80- let K = J
81- fromBase58String(K)
304+ let bU = d
305+ let cy = d
306+ let bz = pow((cu * cv), 0, toBigInt(5), 1, 0, DOWN)
307+ $Tuple5(E(bz, a), E(cu, cr), E(cv, cs), aY((bT + cv), (bR + cu)), cy)
82308 }
83- else if ($isInstanceOf(J, "Unit"))
309+ else {
310+ let bU = aY(bT, bR)
311+ let cz = fraction(L((bU - cw)), c, bU)
312+ let cy = B(be, a)
313+ if (if ((bU != d))
314+ then (cz > cy)
315+ else false)
316+ then throw(((("Price slippage " + toString(cz)) + " > ") + toString(cy)))
317+ else {
318+ let cA = B(ct, a)
319+ let cB = fraction(cu, bU, c)
320+ let cC = fraction(cv, c, bU)
321+ let cD = if ((cB > cv))
322+ then $Tuple2(cC, cv)
323+ else $Tuple2(cu, cB)
324+ let cE = cD._1
325+ let cF = cD._2
326+ let bz = fraction(cA, cF, bT)
327+ $Tuple5(E(bz, a), E(cE, cr), E(cF, cs), bU, cy)
328+ }
329+ }
330+ let cG = cx._1
331+ let cH = cx._2
332+ let cI = cx._3
333+ let bV = E(cx._4, a)
334+ let cJ = E(cx._5, a)
335+ if ((0 >= cG))
336+ then throw("LP <= 0")
337+ else {
338+ let cK = if (!(cj))
339+ then 0
340+ else cG
341+ let cL = (ce - cH)
342+ let cM = (cg - cI)
343+ let cN = if (if (ck)
344+ then (cm == cn)
345+ else false)
346+ then $Tuple2(cl, 0)
347+ else if (if (ck)
348+ then (cm == co)
349+ else false)
350+ then $Tuple2(0, cl)
351+ else $Tuple2(cH, cI)
352+ let cO = cN._1
353+ let cP = cN._2
354+ let cQ = [IntegerEntry(P(), bV), IntegerEntry(Q(height, lastBlock.timestamp), bV), StringEntry(T(bI, bF), aH(cO, cP, cK, bV, be, cJ, height, lastBlock.timestamp, cL, cM))]
355+ $Tuple13(cG, cK, bV, bQ, bS, ct, bJ, bO, cQ, cL, cM, cf, ch)
356+ }
357+ }
358+
359+
360+func cR (cS) = {
361+ let bv = aC()
362+ let cT = bv[r]
363+ let cU = bv[s]
364+ let bO = parseIntValue(bv[p])
365+ let bw = parseIntValue(bv[t])
366+ let bx = parseIntValue(bv[u])
367+ let cV = aW(cT)
368+ let cW = aW(cU)
369+ let bU = if ((cS.orderType == Buy))
370+ then bm(bw, bx, (cV + cS.amount), cW)
371+ else bm(bw, bx, (cV - cS.amount), cW)
372+ let bV = E(bU, a)
373+ if (if (if (aA())
374+ then true
375+ else (bO == m))
376+ then true
377+ else (bO == n))
378+ then throw("Admin blocked")
379+ else {
380+ let cX = cS.assetPair.amountAsset
381+ let cY = if ((cX == unit))
382+ then "WAVES"
383+ else toBase58String(value(cX))
384+ let cZ = cS.assetPair.priceAsset
385+ let da = if ((cZ == unit))
386+ then "WAVES"
387+ else toBase58String(value(cZ))
388+ if (if ((cY != cT))
389+ then true
390+ else (da != cU))
391+ then throw("Wr assets")
392+ else {
393+ let db = cS.price
394+ let cs = fraction(a, bx, bw)
395+ let dc = H(db, a, cs)
396+ let dd = if ((cS.orderType == Buy))
397+ then (bV >= dc)
398+ else (dc >= bV)
399+ true
400+ }
401+ }
402+ }
403+
404+
405+func de (df) = if ((size(df.payments) != 1))
406+ then throw("1 pmnt exp")
407+ else {
408+ let dg = value(df.payments[0])
409+ let bG = value(dg.assetId)
410+ let cl = dg.amount
411+ let cx = bE(toBase58String(df.transactionId), toBase58String(bG), cl, df.caller)
412+ let ca = cx._1
413+ let cb = cx._2
414+ let bO = parseIntValue(cx._9)
415+ let cc = cx._10
416+ if (if (aA())
417+ then true
418+ else (bO == n))
419+ then throw(("Admin blocked: " + toString(bO)))
420+ else $Tuple5(ca, cb, cl, bG, cc)
421+ }
422+
423+
424+func dh (ac,V,di,dj,be,cj,ck,cl,cm) = {
425+ let cx = cd(V, be, value(di).amount, value(di).assetId, value(dj).amount, value(dj).assetId, ac, false, cj, ck, cl, cm)
426+ let bO = parseIntValue(cx._8)
427+ if (if (if (aA())
428+ then true
429+ else (bO == l))
430+ then true
431+ else (bO == n))
432+ then throw(("Blocked:" + toString(bO)))
433+ else cx
434+ }
435+
436+
437+func dk () = {
438+ let as = getString(N())
439+ if ($isInstanceOf(as, "String"))
440+ then {
441+ let dl = as
442+ fromBase58String(dl)
443+ }
444+ else if ($isInstanceOf(as, "Unit"))
84445 then unit
85446 else throw("Match error")
86447 }
87448
88449
89-func L () = {
90- let J = getString(j())
91- if ($isInstanceOf(J, "String"))
450+func dm () = {
451+ let as = getString(O())
452+ if ($isInstanceOf(as, "String"))
92453 then {
93- let K = J
94- fromBase58String(K)
454+ let dl = as
455+ fromBase58String(dl)
95456 }
96- else if ($isInstanceOf(J, "Unit"))
457+ else if ($isInstanceOf(as, "Unit"))
97458 then unit
98459 else throw("Match error")
99460 }
100461
101462
102-func M (N) = {
103- let O = throw("Permission denied")
104- let J = I()
105- if ($isInstanceOf(J, "ByteVector"))
463+let dn = throw("Permission denied")
464+
465+func do (df) = {
466+ let as = dk()
467+ if ($isInstanceOf(as, "ByteVector"))
106468 then {
107- let P = J
108- if ((N.callerPublicKey == P))
469+ let dp = as
470+ if ((df.callerPublicKey == dp))
109471 then true
110- else O
472+ else dn
111473 }
112- else if ($isInstanceOf(J, "Unit"))
113- then if ((N.caller == this))
474+ else if ($isInstanceOf(as, "Unit"))
475+ then if ((df.caller == this))
114476 then true
115- else O
477+ else dn
116478 else throw("Match error")
117479 }
118480
119481
120-func Q () = {
121- let J = getString(n())
122- if ($isInstanceOf(J, "String"))
123- then {
124- let K = J
125- if ((size(K) == 0))
126- then nil
127- else split(K, a)
128- }
129- else nil
130- }
131-
132-
133-func R (N) = if (containsElement(Q(), toBase58String(N.callerPublicKey)))
134- then true
135- else M(N)
136-
137-
138-func S (N) = if ((N.caller == B))
139- then true
140- else throw("caller must be the pool")
141-
142-
143-@Callable(N)
144-func constructor (T) = {
145- let U = M(N)
146- if ((U == U))
147- then [StringEntry(k(), T)]
482+@Callable(df)
483+func constructor (M) = {
484+ let dq = do(df)
485+ if ((dq == dq))
486+ then [StringEntry(M(), M)]
148487 else throw("Strict value is not equal to itself.")
149488 }
150489
151490
152491
153-@Callable(N)
154-func setManager (V) = {
155- let U = M(N)
156- if ((U == U))
492+@Callable(df)
493+func setManager (dr) = {
494+ let dq = do(df)
495+ if ((dq == dq))
157496 then {
158- let W = fromBase58String(V)
159- if ((W == W))
160- then [StringEntry(j(), V)]
497+ let ds = fromBase58String(dr)
498+ if ((ds == ds))
499+ then [StringEntry(O(), dr)]
161500 else throw("Strict value is not equal to itself.")
162501 }
163502 else throw("Strict value is not equal to itself.")
165504
166505
167506
168-@Callable(N)
507+@Callable(df)
169508 func confirmManager () = {
170- let X = L()
171- let Y = if (isDefined(X))
509+ let bD = dm()
510+ let dt = if (isDefined(bD))
172511 then true
173512 else throw("No pending manager")
174- if ((Y == Y))
513+ if ((dt == dt))
175514 then {
176- let Z = if ((N.callerPublicKey == value(X)))
515+ let du = if ((df.callerPublicKey == value(bD)))
177516 then true
178517 else throw("You are not pending manager")
179- if ((Z == Z))
180- then [StringEntry(i(), toBase58String(value(X))), DeleteEntry(j())]
518+ if ((du == du))
519+ then [StringEntry(N(), toBase58String(value(bD))), DeleteEntry(O())]
181520 else throw("Strict value is not equal to itself.")
182521 }
183522 else throw("Strict value is not equal to itself.")
185524
186525
187526
188-@Callable(N)
189-func setAdmins (aa) = {
190- let U = M(N)
191- if ((U == U))
192- then [StringEntry(n(), makeString(aa, a))]
527+@Callable(df)
528+func put (dv,dw) = {
529+ let dx = aG()
530+ let dy = valueOrErrorMessage(addressFromString(dx[x]), "Wr st addr")
531+ let dz = valueOrErrorMessage(addressFromString(dx[y]), "Wr sl addr")
532+ if ((0 > dv))
533+ then throw("Wrong slippage")
534+ else if ((size(df.payments) != 2))
535+ then throw("2 pmnts expd")
536+ else {
537+ let dA = dh(toString(df.caller), toBase58String(df.transactionId), AttachedPayment(value(df.payments[0]).assetId, value(df.payments[0]).amount), df.payments[1], dv, true, false, 0, "")
538+ let cK = dA._2
539+ let dB = dA._7
540+ let cc = dA._9
541+ let cL = dA._10
542+ let cM = dA._11
543+ let bK = dA._12
544+ let bL = dA._13
545+ let cx = invoke(ay, "emit", [cK], nil)
546+ if ((cx == cx))
547+ then {
548+ let dC = {
549+ let as = cx
550+ if ($isInstanceOf(as, "Address"))
551+ then {
552+ let dD = as
553+ invoke(dD, "emit", [cK], nil)
554+ }
555+ else unit
556+ }
557+ if ((dC == dC))
558+ then {
559+ let dE = if ((cL > 0))
560+ then invoke(dz, "put", nil, [AttachedPayment(bK, cL)])
561+ else nil
562+ if ((dE == dE))
563+ then {
564+ let dF = if ((cM > 0))
565+ then invoke(dz, "put", nil, [AttachedPayment(bL, cM)])
566+ else nil
567+ if ((dF == dF))
568+ then {
569+ let dG = if (dw)
570+ then {
571+ let dH = invoke(dy, "stake", nil, [AttachedPayment(dB, cK)])
572+ if ((dH == dH))
573+ then nil
574+ else throw("Strict value is not equal to itself.")
575+ }
576+ else [ScriptTransfer(df.caller, cK, dB)]
577+ (cc ++ dG)
578+ }
579+ else throw("Strict value is not equal to itself.")
580+ }
581+ else throw("Strict value is not equal to itself.")
582+ }
583+ else throw("Strict value is not equal to itself.")
584+ }
585+ else throw("Strict value is not equal to itself.")
586+ }
587+ }
588+
589+
590+
591+@Callable(df)
592+func putOneTkn (dI,dJ,dK,be,dw) = {
593+ let bv = aG()
594+ let dy = valueOrErrorMessage(addressFromString(bv[x]), "Wr st addr")
595+ let dz = valueOrErrorMessage(addressFromString(bv[y]), "Wr sl addr")
596+ let dL = valueOrErrorMessage(addressFromString(bv[z]), "Wr gwx addr")
597+ let dM = aC()
598+ let bK = dM[r]
599+ let bL = dM[s]
600+ let bM = parseIntValue(dM[t])
601+ let bN = parseIntValue(dM[u])
602+ let dN = valueOrElse(getString(this, aa()), "")
603+ let bI = if ((dN == toString(df.caller)))
604+ then df.originCaller
605+ else df.caller
606+ let dO = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa()), "no addons")), "addon address in not valid")
607+ let dP = reentrantInvoke(dO, "ensureCanPutOneTkn", [toString(bI)], nil)
608+ if ((dP == dP))
609+ then if (if (if (if ((0 >= be))
610+ then true
611+ else (0 >= dI))
612+ then true
613+ else (0 >= dJ))
614+ then true
615+ else (0 >= dK))
616+ then throw("Wrong params")
617+ else if ((size(df.payments) != 1))
618+ then throw("1 pmnt expd")
619+ else {
620+ let dg = value(df.payments[0])
621+ let bG = toBase58String(value(dg.assetId))
622+ let cl = dg.amount
623+ if ((10000000 > cl))
624+ then throw("Wrong pmt amt")
625+ else {
626+ let bQ = aW(bK)
627+ let bS = aW(bL)
628+ let dQ = if ((bG == bK))
629+ then if (if ((cl > bQ))
630+ then true
631+ else (dI > cl))
632+ then throw("invalid payment amount")
633+ else $Tuple6((bQ - cl), bS, (cl - dI), dJ, 0, 0)
634+ else if ((bG == bL))
635+ then if (if ((cl > bS))
636+ then true
637+ else (dJ > cl))
638+ then throw("invalid payment amount")
639+ else $Tuple6(bQ, (bS - cl), 0, 0, (cl - dJ), dI)
640+ else throw("wrong pmtAssetId")
641+ let dR = dQ._1
642+ let dS = dQ._2
643+ let dT = dQ._3
644+ let dU = dQ._4
645+ let dV = dQ._5
646+ let dW = dQ._6
647+ let bj = invoke(dL, "calcD", [toString(dR), toString(dS), az, g, h], nil)
648+ let bi = invoke(dL, "calcD", [toString(toBigInt(((dR + dT) - dW))), toString(toBigInt(((dS + dV) - dU))), az, g, h], nil)
649+ let dX = bh(parseBigIntValue(ar(bi)), parseBigIntValue(ar(bj)), f)
650+ if ((dX == dX))
651+ then {
652+ let dY = dh(toString(df.caller), toBase58String(df.transactionId), AttachedPayment(fromBase58String(bK), dI), AttachedPayment(fromBase58String(bL), dJ), be, true, true, cl, bG)
653+ let dZ = dY._2
654+ let dB = dY._7
655+ let cc = dY._9
656+ let cL = dY._10
657+ let cM = dY._11
658+ let ea = bb(toBigInt(dZ), toBigInt(dK), toBigInt(be))
659+ let cK = toInt(ea._2)
660+ let dA = invoke(ay, "emit", [cK], nil)
661+ if ((dA == dA))
662+ then {
663+ let dC = {
664+ let as = dA
665+ if ($isInstanceOf(as, "Address"))
666+ then {
667+ let dD = as
668+ invoke(dD, "emit", [cK], nil)
669+ }
670+ else unit
671+ }
672+ if ((dC == dC))
673+ then {
674+ let dE = if ((cL > 0))
675+ then invoke(dz, "put", nil, [AttachedPayment(fromBase58String(bK), cL)])
676+ else nil
677+ if ((dE == dE))
678+ then {
679+ let dF = if ((cM > 0))
680+ then invoke(dz, "put", nil, [AttachedPayment(fromBase58String(bL), cM)])
681+ else nil
682+ if ((dF == dF))
683+ then {
684+ let dG = if (dw)
685+ then {
686+ let dH = invoke(dy, "stake", nil, [AttachedPayment(dB, cK)])
687+ if ((dH == dH))
688+ then nil
689+ else throw("Strict value is not equal to itself.")
690+ }
691+ else [ScriptTransfer(df.caller, cK, dB)]
692+ (cc ++ dG)
693+ }
694+ else throw("Strict value is not equal to itself.")
695+ }
696+ else throw("Strict value is not equal to itself.")
697+ }
698+ else throw("Strict value is not equal to itself.")
699+ }
700+ else throw("Strict value is not equal to itself.")
701+ }
702+ else throw("Strict value is not equal to itself.")
703+ }
704+ }
193705 else throw("Strict value is not equal to itself.")
194706 }
195707
196708
197709
198-@Callable(N)
199-func unstakeAndGetOneTkn (ab,ac,ad,ae,af,ag) = {
200- let ah = if ((size(N.payments) != 0))
710+@Callable(df)
711+func putForFree (eb) = if ((0 > eb))
712+ then throw("Wrong slpg")
713+ else if ((size(df.payments) != 2))
714+ then throw("2 pmnts expd")
715+ else {
716+ let dY = dh(toString(df.caller), toBase58String(df.transactionId), AttachedPayment(value(df.payments[0]).assetId, value(df.payments[0]).amount), df.payments[1], eb, false, false, 0, "")
717+ dY._9
718+ }
719+
720+
721+
722+@Callable(df)
723+func get () = {
724+ let cx = de(df)
725+ let ec = cx._1
726+ let cb = cx._2
727+ let cl = cx._3
728+ let bG = cx._4
729+ let cc = cx._5
730+ let ed = invoke(ay, "burn", [cl], [AttachedPayment(bG, cl)])
731+ if ((ed == ed))
732+ then cc
733+ else throw("Strict value is not equal to itself.")
734+ }
735+
736+
737+
738+@Callable(df)
739+func getOneTkn (ee,ef,eg,eh,be) = if ((size(df.payments) != 1))
740+ then throw("1 pmnt expd")
741+ else {
742+ let bv = aC()
743+ let bJ = bv[q]
744+ let bK = bv[r]
745+ let bL = bv[s]
746+ let bM = parseIntValue(bv[t])
747+ let bN = parseIntValue(bv[u])
748+ let bO = bv[p]
749+ let dx = aG()
750+ let dL = valueOrErrorMessage(addressFromString(dx[z]), "Wr sl addr")
751+ let dg = value(df.payments[0])
752+ let dN = valueOrElse(getString(this, aa()), "")
753+ let bI = if ((dN == toString(df.caller)))
754+ then df.originCaller
755+ else df.caller
756+ let bF = toBase58String(df.transactionId)
757+ let bG = value(dg.assetId)
758+ let cl = dg.amount
759+ let dO = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa()), "no addons")), "addon address in not valid")
760+ let dP = reentrantInvoke(dO, "ensureCanGetOneTkn", [toString(bI)], nil)
761+ if ((dP == dP))
762+ then if ((1000000000 > cl))
763+ then throw("Min pmt 10 LP")
764+ else if (if (if ((0 > be))
765+ then true
766+ else (0 > ee))
767+ then true
768+ else (0 > eg))
769+ then throw("Wrong params")
770+ else if ((bJ != toBase58String(bG)))
771+ then throw("Wrong LP")
772+ else {
773+ let cx = bE(toBase58String(df.transactionId), toBase58String(bG), cl, df.caller)
774+ let ei = cx._1
775+ let ej = cx._2
776+ let bQ = aW(bK)
777+ let bS = aW(bL)
778+ let ek = if ((eh == bK))
779+ then $Tuple7((bQ - ei), (bS - ej), ee, ej, 0, 0, (ei + ee))
780+ else if ((eh == bL))
781+ then $Tuple7((bQ - ei), (bS - ej), 0, 0, ee, ei, (ej + ee))
782+ else throw("wrong outAssetId")
783+ let dR = ek._1
784+ let dS = ek._2
785+ let dT = ek._3
786+ let dU = ek._4
787+ let dV = ek._5
788+ let dW = ek._6
789+ let el = ek._7
790+ if (if ((0 > dT))
791+ then true
792+ else (0 > dV))
793+ then throw("Wrong calc")
794+ else {
795+ let bj = invoke(dL, "calcD", [toString(dR), toString(dS), az, g, h], nil)
796+ let bi = invoke(dL, "calcD", [toString(((dR - dT) + dW)), toString(((dS + dU) - dV)), az, g, h], nil)
797+ let dX = bh(parseBigIntValue(ar(bi)), parseBigIntValue(ar(bj)), f)
798+ if ((dX == dX))
799+ then {
800+ let em = bb(toBigInt(el), toBigInt(eg), toBigInt(be))
801+ if ((em == em))
802+ then {
803+ let en = if ((eh == bK))
804+ then $Tuple2(toInt(em._2), 0)
805+ else $Tuple2(0, toInt(em._2))
806+ let eo = en._1
807+ let ep = en._2
808+ let eq = aY(B(bS, bN), B(bQ, bM))
809+ let er = E(eq, a)
810+ let cc = [ScriptTransfer(bI, (eo + ep), if ((eh == "WAVES"))
811+ then unit
812+ else fromBase58String(eh)), StringEntry(W(toString(bI), bF), aS(eo, ep, cl, er, height, lastBlock.timestamp)), IntegerEntry(P(), er), IntegerEntry(Q(height, lastBlock.timestamp), er)]
813+ if ((cc == cc))
814+ then {
815+ let es = invoke(ay, "burn", [cl], [AttachedPayment(bG, cl)])
816+ if ((es == es))
817+ then cc
818+ else throw("Strict value is not equal to itself.")
819+ }
820+ else throw("Strict value is not equal to itself.")
821+ }
822+ else throw("Strict value is not equal to itself.")
823+ }
824+ else throw("Strict value is not equal to itself.")
825+ }
826+ }
827+ else throw("Strict value is not equal to itself.")
828+ }
829+
830+
831+
832+@Callable(df)
833+func getNoLess (et,eu) = {
834+ let cx = de(df)
835+ let ca = cx._1
836+ let cb = cx._2
837+ let cl = cx._3
838+ let bG = cx._4
839+ let cc = cx._5
840+ if ((et > ca))
841+ then throw(((("Failed: " + toString(ca)) + " < ") + toString(et)))
842+ else if ((eu > cb))
843+ then throw(((("Failed: " + toString(cb)) + " < ") + toString(eu)))
844+ else {
845+ let ev = invoke(ay, "burn", [cl], [AttachedPayment(bG, cl)])
846+ if ((ev == ev))
847+ then cc
848+ else throw("Strict value is not equal to itself.")
849+ }
850+ }
851+
852+
853+
854+@Callable(df)
855+func unstakeAndGet (ew) = {
856+ let ex = if ((size(df.payments) != 0))
201857 then throw("No pmnts expd")
202858 else true
203- if ((ah == ah))
859+ if ((ex == ex))
204860 then {
205- let ai = D()
206- let aj = H()
207- let ak = fromBase58String(ai[d])
208- let al = valueOrErrorMessage(addressFromString(aj[g]), "Wr st addr")
209- let am = invoke(al, "unstake", [toBase58String(ak), ab], nil)
210- if ((am == am))
861+ let bv = aC()
862+ let ey = aG()
863+ let dB = fromBase58String(bv[q])
864+ let ez = valueOrErrorMessage(addressFromString(ey[x]), "Wr st addr")
865+ let eA = invoke(ez, "unstake", [toBase58String(dB), ew], nil)
866+ if ((eA == eA))
211867 then {
212- let an = invoke(B, "getOneTkn", [ac, ad, ae, af, ag], [AttachedPayment(ak, ab)])
213- if ((an == an))
214- then nil
868+ let cx = bE(toBase58String(df.transactionId), toBase58String(dB), ew, df.caller)
869+ let bO = parseIntValue(cx._9)
870+ let cc = cx._10
871+ let eB = if (if (aA())
872+ then true
873+ else (bO == n))
874+ then throw(("Blocked: " + toString(bO)))
875+ else true
876+ if ((eB == eB))
877+ then {
878+ let eC = invoke(ay, "burn", [ew], [AttachedPayment(dB, ew)])
879+ if ((eC == eC))
880+ then cc
881+ else throw("Strict value is not equal to itself.")
882+ }
215883 else throw("Strict value is not equal to itself.")
216884 }
217885 else throw("Strict value is not equal to itself.")
221889
222890
223891
224-@Callable(N)
225-func setAmp (ao) = {
226- let U = R(N)
227- if ((U == U))
228- then {
229- let ap = invoke(B, "setS", [o(), ao], nil)
230- let aq = invoke(B, "setS", [p(height), ao], nil)
231- $Tuple2(nil, $Tuple2(ap, aq))
232- }
233- else throw("Strict value is not equal to itself.")
892+@Callable(df)
893+func activate (eD,eE) = if ((toString(df.caller) != toString(ay)))
894+ then throw("denied")
895+ else $Tuple2([StringEntry(X(), eD), StringEntry(Y(), eE)], "success")
896+
897+
898+
899+@Callable(df)
900+func setS (eF,eB) = if ((toString(df.caller) != au(this, aa())))
901+ then dn
902+ else [StringEntry(eF, eB)]
903+
904+
905+
906+@Callable(df)
907+func setI (eF,eB) = if ((toString(df.caller) != au(this, aa())))
908+ then dn
909+ else [IntegerEntry(eF, eB)]
910+
911+
912+
913+@Callable(df)
914+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aC())
915+
916+
917+
918+@Callable(df)
919+func getAccBalanceWrapperREADONLY (aX) = $Tuple2(nil, aW(aX))
920+
921+
922+
923+@Callable(df)
924+func calcPricesWrapperREADONLY (bp,bq,bu) = {
925+ let eG = bt(bp, bq, bu)
926+ $Tuple2(nil, [toString(eG[0]), toString(eG[1]), toString(eG[2])])
234927 }
235928
236929
237-@Verifier(ar)
238-func as () = {
239- let at = {
240- let J = I()
241- if ($isInstanceOf(J, "ByteVector"))
930+
931+@Callable(df)
932+func fromX18WrapperREADONLY (F,eH) = $Tuple2(nil, E(parseBigIntValue(F), eH))
933+
934+
935+
936+@Callable(df)
937+func toX18WrapperREADONLY (C,D) = $Tuple2(nil, toString(B(C, D)))
938+
939+
940+
941+@Callable(df)
942+func calcPriceBigIntWrapperREADONLY (aZ,ba) = $Tuple2(nil, toString(aY(parseBigIntValue(aZ), parseBigIntValue(ba))))
943+
944+
945+
946+@Callable(df)
947+func estimatePutOperationWrapperREADONLY (bF,be,ce,cf,cg,ch,eI,ci,cj) = $Tuple2(nil, cd(bF, be, ce, cf, cg, ch, eI, ci, cj, false, 0, ""))
948+
949+
950+
951+@Callable(df)
952+func estimateGetOperationWrapperREADONLY (bF,eJ,bH,eI) = {
953+ let cx = bE(bF, eJ, bH, addressFromStringValue(eI))
954+ $Tuple2(nil, $Tuple10(cx._1, cx._2, cx._3, cx._4, cx._5, cx._6, cx._7, toString(cx._8), cx._9, cx._10))
955+ }
956+
957+
958+@Verifier(eK)
959+func eL () = {
960+ let eM = {
961+ let as = dk()
962+ if ($isInstanceOf(as, "ByteVector"))
242963 then {
243- let P = J
244- P
964+ let dp = as
965+ dp
245966 }
246- else if ($isInstanceOf(J, "Unit"))
247- then ar.senderPublicKey
967+ else if ($isInstanceOf(as, "Unit"))
968+ then eK.senderPublicKey
248969 else throw("Match error")
249970 }
250- sigVerify(ar.bodyBytes, ar.proofs[0], at)
971+ let as = eK
972+ if ($isInstanceOf(as, "Order"))
973+ then {
974+ let cS = as
975+ let eN = aB()
976+ let eO = cR(cS)
977+ let eP = sigVerify(cS.bodyBytes, cS.proofs[0], cS.senderPublicKey)
978+ let eQ = sigVerify(cS.bodyBytes, cS.proofs[1], eN)
979+ if (if (if (eO)
980+ then eP
981+ else false)
982+ then eQ
983+ else false)
984+ then true
985+ else an(eO, eP, eQ)
986+ }
987+ else if ($isInstanceOf(as, "SetScriptTransaction"))
988+ then {
989+ let dl = as
990+ let eR = blake2b256(value(dl.script))
991+ let eS = fromBase64String(value(getString(ay, am())))
992+ let eT = scriptHash(this)
993+ if (if ((eS == eR))
994+ then (eT != eR)
995+ else false)
996+ then true
997+ else sigVerify(eK.bodyBytes, eK.proofs[0], eM)
998+ }
999+ else sigVerify(eK.bodyBytes, eK.proofs[0], eM)
2511000 }
2521001
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "__"
4+let a = 100000000
55
6-let b = ""
6+let b = toBigInt(100000000)
77
8-let c = 1
8+let c = toBigInt(1000000000000000000)
99
10-let d = 3
10+let d = toBigInt(0)
1111
12-let e = 4
12+let e = toBigInt(1)
1313
14-let f = 5
14+let f = toBigInt((a - ((a * 1) / a)))
1515
16-let g = 1
16+let g = "100"
1717
18-func h () = "%s__factoryContract"
18+let h = "1"
19+
20+let i = "__"
21+
22+let j = ""
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 1
33+
34+let p = 2
35+
36+let q = 3
37+
38+let r = 4
39+
40+let s = 5
41+
42+let t = 6
43+
44+let u = 7
45+
46+let v = 8
47+
48+let w = 9
49+
50+let x = 1
51+
52+let y = 7
53+
54+let z = 10
55+
56+let A = "%s__delay"
57+
58+func B (C,D) = fraction(toBigInt(C), c, toBigInt(D))
1959
2060
21-func i () = "%s__managerPublicKey"
61+func E (F,G) = toInt(fraction(F, toBigInt(G), c))
2262
2363
24-func j () = "%s__pendingManagerPublicKey"
64+func H (I,J,K) = fraction(I, J, K)
2565
2666
27-func k () = "%s__poolAddress"
67+func L (F) = if ((d > F))
68+ then -(F)
69+ else F
2870
2971
30-func l () = "%s__amountAsset"
72+func M () = "%s__factoryContract"
3173
3274
33-func m () = "%s__priceAsset"
75+func N () = "%s__managerPublicKey"
3476
3577
36-func n () = "%s__adminPubKeys"
78+func O () = "%s__pendingManagerPublicKey"
3779
3880
39-func o () = "%s__amp"
81+func P () = "%s%s__price__last"
4082
4183
42-func p (q) = ("%s%d__amp__" + toString(q))
84+func Q (R,S) = makeString(["%s%s%d%d__price__history", toString(R), toString(S)], i)
4385
4486
45-func r () = "%s__factoryConfig"
87+func T (U,V) = ((("%s%s%s__P__" + U) + "__") + V)
4688
4789
48-func s (t,u) = (((("%d%d%s__" + t) + "__") + u) + "__config")
90+func W (U,V) = ((("%s%s%s__G__" + U) + "__") + V)
4991
5092
51-func v (w) = ("%s%s%s__mappings__baseAsset2internalId__" + w)
93+func X () = "%s__amountAsset"
5294
5395
54-func x (y,z) = valueOrErrorMessage(getString(y, z), makeString(["mandatory ", toString(y), ".", z, " not defined"], ""))
96+func Y () = "%s__priceAsset"
5597
5698
57-func A (y,z) = valueOrErrorMessage(getInteger(y, z), makeString(["mandatory ", toString(y), ".", z, " not defined"], ""))
99+func Z () = "%s__amp"
58100
59101
60-let B = addressFromStringValue(x(this, k()))
102+func aa () = "%s__addonAddr"
61103
62-let C = addressFromStringValue(x(B, h()))
63104
64-func D () = {
65- let E = x(B, l())
66- let F = x(B, m())
67- let G = A(C, v(F))
68- let t = A(C, v(E))
69- split(x(C, s(toString(t), toString(G))), a)
105+func ab (ac) = makeString(["%s%s__lastGetOneTknCall", ac], i)
106+
107+
108+func ad (ac) = makeString(["%s%s__lastPutOneTknCall", ac], i)
109+
110+
111+func ae () = "%s__factoryConfig"
112+
113+
114+func af () = "%s%s__matcher__publicKey"
115+
116+
117+func ag (ah,ai) = (((("%d%d%s__" + ah) + "__") + ai) + "__config")
118+
119+
120+func aj (ak) = ("%s%s%s__mappings__baseAsset2internalId__" + ak)
121+
122+
123+func al () = "%s__shutdown"
124+
125+
126+func am () = "%s__allowedLpStableScriptHash"
127+
128+
129+func an (ao,ap,aq) = throw(((((("Failed: ordValid=" + toString(ao)) + " sndrValid=") + toString(ap)) + " mtchrValid=") + toString(aq)))
130+
131+
132+func ar (F) = {
133+ let as = F
134+ if ($isInstanceOf(as, "String"))
135+ then {
136+ let at = as
137+ at
138+ }
139+ else throw("fail cast to String")
70140 }
71141
72142
73-func H () = split(x(C, r()), a)
143+func au (av,aw) = valueOrErrorMessage(getString(av, aw), makeString(["mandatory ", toString(av), ".", aw, " not defined"], ""))
74144
75145
76-func I () = {
77- let J = getString(i())
78- if ($isInstanceOf(J, "String"))
146+func ax (av,aw) = valueOrErrorMessage(getInteger(av, aw), makeString(["mandatory ", toString(av), ".", aw, " not defined"], ""))
147+
148+
149+let ay = addressFromStringValue(au(this, M()))
150+
151+let az = au(this, Z())
152+
153+func aA () = valueOrElse(getBoolean(ay, al()), false)
154+
155+
156+func aB () = fromBase58String(au(ay, af()))
157+
158+
159+func aC () = {
160+ let aD = au(this, X())
161+ let aE = au(this, Y())
162+ let aF = ax(ay, aj(aE))
163+ let ah = ax(ay, aj(aD))
164+ split(au(ay, ag(toString(ah), toString(aF))), i)
165+ }
166+
167+
168+func aG () = split(au(ay, ae()), i)
169+
170+
171+func aH (aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aI), toString(aJ), toString(aK), toString(aL), toString(aM), toString(aN), toString(aO), toString(aP), toString(aQ), toString(aR)], i)
172+
173+
174+func aS (aT,aU,aV,aL,aO,aP) = makeString(["%d%d%d%d%d%d", toString(aT), toString(aU), toString(aV), toString(aL), toString(aO), toString(aP)], i)
175+
176+
177+func aW (aX) = if ((aX == "WAVES"))
178+ then wavesBalance(this).available
179+ else assetBalance(this, fromBase58String(aX))
180+
181+
182+func aY (aZ,ba) = fraction(aZ, c, ba)
183+
184+
185+func bb (bc,bd,be) = {
186+ let bf = fraction((bc - bd), b, bd)
187+ let bg = ((be - L(bf)) > d)
188+ if (!(bg))
189+ then throw(("Big slpg: " + toString(bf)))
190+ else $Tuple2(bg, min([bc, bd]))
191+ }
192+
193+
194+func bh (bi,bj,bk) = {
195+ let bf = fraction(bj, b, bi)
196+ let bl = (bk > bf)
197+ if (if (bl)
198+ then true
199+ else (bj > bi))
200+ then throw(((((((toString(bj) + " ") + toString(bi)) + " ") + toString(bf)) + " ") + toString(bk)))
201+ else bl
202+ }
203+
204+
205+func bm (bn,bo,bp,bq) = {
206+ let br = B(bp, bn)
207+ let bs = B(bq, bo)
208+ aY(bs, br)
209+ }
210+
211+
212+func bt (bp,bq,bu) = {
213+ let bv = aC()
214+ let bw = parseIntValue(bv[t])
215+ let bx = parseIntValue(bv[u])
216+ let by = bm(bw, bx, bp, bq)
217+ let ba = B(bp, bw)
218+ let aZ = B(bq, bx)
219+ let bz = B(bu, a)
220+ let bA = aY(ba, bz)
221+ let bB = aY(aZ, bz)
222+[by, bA, bB]
223+ }
224+
225+
226+func bC (bp,bq,bu) = {
227+ let bD = bt(bp, bq, bu)
228+[E(bD[0], a), E(bD[1], a), E(bD[2], a)]
229+ }
230+
231+
232+func bE (bF,bG,bH,bI) = {
233+ let bv = aC()
234+ let bJ = bv[q]
235+ let bK = bv[r]
236+ let bL = bv[s]
237+ let bM = parseIntValue(bv[t])
238+ let bN = parseIntValue(bv[u])
239+ let bO = bv[p]
240+ let bP = valueOrErrorMessage(assetInfo(fromBase58String(bJ)), "Wrong LP id").quantity
241+ if ((bJ != bG))
242+ then throw("Wrong pmt asset")
243+ else {
244+ let bQ = aW(bK)
245+ let bR = B(bQ, bM)
246+ let bS = aW(bL)
247+ let bT = B(bS, bN)
248+ let bU = aY(bT, bR)
249+ let bV = E(bU, a)
250+ let bW = B(bH, a)
251+ let bX = B(bP, a)
252+ let bY = fraction(bR, bW, bX)
253+ let bZ = fraction(bT, bW, bX)
254+ let ca = E(bY, bM)
255+ let cb = E(bZ, bN)
256+ let cc = if ((bF == ""))
257+ then nil
258+ else [ScriptTransfer(bI, ca, if ((bK == "WAVES"))
259+ then unit
260+ else fromBase58String(bK)), ScriptTransfer(bI, cb, if ((bL == "WAVES"))
261+ then unit
262+ else fromBase58String(bL)), StringEntry(W(toString(bI), bF), aS(ca, cb, bH, bV, height, lastBlock.timestamp)), IntegerEntry(P(), bV), IntegerEntry(Q(height, lastBlock.timestamp), bV)]
263+ $Tuple10(ca, cb, bK, bL, bQ, bS, bP, bU, bO, cc)
264+ }
265+ }
266+
267+
268+func cd (bF,be,ce,cf,cg,ch,bI,ci,cj,ck,cl,cm) = {
269+ let bv = aC()
270+ let bJ = fromBase58String(bv[q])
271+ let cn = bv[r]
272+ let co = bv[s]
273+ let cp = bv[v]
274+ let cq = bv[w]
275+ let cr = parseIntValue(bv[t])
276+ let cs = parseIntValue(bv[u])
277+ let bO = bv[p]
278+ let ct = valueOrErrorMessage(assetInfo(bJ), "Wr lp as").quantity
279+ let bQ = if (ci)
280+ then aW(cn)
281+ else if (if (ck)
282+ then (cm == cn)
283+ else false)
284+ then (aW(cn) - cl)
285+ else if (ck)
286+ then aW(cn)
287+ else (aW(cn) - ce)
288+ let bS = if (ci)
289+ then aW(co)
290+ else if (if (ck)
291+ then (cm == co)
292+ else false)
293+ then (aW(co) - cl)
294+ else if (ck)
295+ then aW(co)
296+ else (aW(co) - cg)
297+ let cu = B(ce, cr)
298+ let cv = B(cg, cs)
299+ let cw = aY(cv, cu)
300+ let bR = B(bQ, cr)
301+ let bT = B(bS, cs)
302+ let cx = if ((ct == 0))
79303 then {
80- let K = J
81- fromBase58String(K)
304+ let bU = d
305+ let cy = d
306+ let bz = pow((cu * cv), 0, toBigInt(5), 1, 0, DOWN)
307+ $Tuple5(E(bz, a), E(cu, cr), E(cv, cs), aY((bT + cv), (bR + cu)), cy)
82308 }
83- else if ($isInstanceOf(J, "Unit"))
309+ else {
310+ let bU = aY(bT, bR)
311+ let cz = fraction(L((bU - cw)), c, bU)
312+ let cy = B(be, a)
313+ if (if ((bU != d))
314+ then (cz > cy)
315+ else false)
316+ then throw(((("Price slippage " + toString(cz)) + " > ") + toString(cy)))
317+ else {
318+ let cA = B(ct, a)
319+ let cB = fraction(cu, bU, c)
320+ let cC = fraction(cv, c, bU)
321+ let cD = if ((cB > cv))
322+ then $Tuple2(cC, cv)
323+ else $Tuple2(cu, cB)
324+ let cE = cD._1
325+ let cF = cD._2
326+ let bz = fraction(cA, cF, bT)
327+ $Tuple5(E(bz, a), E(cE, cr), E(cF, cs), bU, cy)
328+ }
329+ }
330+ let cG = cx._1
331+ let cH = cx._2
332+ let cI = cx._3
333+ let bV = E(cx._4, a)
334+ let cJ = E(cx._5, a)
335+ if ((0 >= cG))
336+ then throw("LP <= 0")
337+ else {
338+ let cK = if (!(cj))
339+ then 0
340+ else cG
341+ let cL = (ce - cH)
342+ let cM = (cg - cI)
343+ let cN = if (if (ck)
344+ then (cm == cn)
345+ else false)
346+ then $Tuple2(cl, 0)
347+ else if (if (ck)
348+ then (cm == co)
349+ else false)
350+ then $Tuple2(0, cl)
351+ else $Tuple2(cH, cI)
352+ let cO = cN._1
353+ let cP = cN._2
354+ let cQ = [IntegerEntry(P(), bV), IntegerEntry(Q(height, lastBlock.timestamp), bV), StringEntry(T(bI, bF), aH(cO, cP, cK, bV, be, cJ, height, lastBlock.timestamp, cL, cM))]
355+ $Tuple13(cG, cK, bV, bQ, bS, ct, bJ, bO, cQ, cL, cM, cf, ch)
356+ }
357+ }
358+
359+
360+func cR (cS) = {
361+ let bv = aC()
362+ let cT = bv[r]
363+ let cU = bv[s]
364+ let bO = parseIntValue(bv[p])
365+ let bw = parseIntValue(bv[t])
366+ let bx = parseIntValue(bv[u])
367+ let cV = aW(cT)
368+ let cW = aW(cU)
369+ let bU = if ((cS.orderType == Buy))
370+ then bm(bw, bx, (cV + cS.amount), cW)
371+ else bm(bw, bx, (cV - cS.amount), cW)
372+ let bV = E(bU, a)
373+ if (if (if (aA())
374+ then true
375+ else (bO == m))
376+ then true
377+ else (bO == n))
378+ then throw("Admin blocked")
379+ else {
380+ let cX = cS.assetPair.amountAsset
381+ let cY = if ((cX == unit))
382+ then "WAVES"
383+ else toBase58String(value(cX))
384+ let cZ = cS.assetPair.priceAsset
385+ let da = if ((cZ == unit))
386+ then "WAVES"
387+ else toBase58String(value(cZ))
388+ if (if ((cY != cT))
389+ then true
390+ else (da != cU))
391+ then throw("Wr assets")
392+ else {
393+ let db = cS.price
394+ let cs = fraction(a, bx, bw)
395+ let dc = H(db, a, cs)
396+ let dd = if ((cS.orderType == Buy))
397+ then (bV >= dc)
398+ else (dc >= bV)
399+ true
400+ }
401+ }
402+ }
403+
404+
405+func de (df) = if ((size(df.payments) != 1))
406+ then throw("1 pmnt exp")
407+ else {
408+ let dg = value(df.payments[0])
409+ let bG = value(dg.assetId)
410+ let cl = dg.amount
411+ let cx = bE(toBase58String(df.transactionId), toBase58String(bG), cl, df.caller)
412+ let ca = cx._1
413+ let cb = cx._2
414+ let bO = parseIntValue(cx._9)
415+ let cc = cx._10
416+ if (if (aA())
417+ then true
418+ else (bO == n))
419+ then throw(("Admin blocked: " + toString(bO)))
420+ else $Tuple5(ca, cb, cl, bG, cc)
421+ }
422+
423+
424+func dh (ac,V,di,dj,be,cj,ck,cl,cm) = {
425+ let cx = cd(V, be, value(di).amount, value(di).assetId, value(dj).amount, value(dj).assetId, ac, false, cj, ck, cl, cm)
426+ let bO = parseIntValue(cx._8)
427+ if (if (if (aA())
428+ then true
429+ else (bO == l))
430+ then true
431+ else (bO == n))
432+ then throw(("Blocked:" + toString(bO)))
433+ else cx
434+ }
435+
436+
437+func dk () = {
438+ let as = getString(N())
439+ if ($isInstanceOf(as, "String"))
440+ then {
441+ let dl = as
442+ fromBase58String(dl)
443+ }
444+ else if ($isInstanceOf(as, "Unit"))
84445 then unit
85446 else throw("Match error")
86447 }
87448
88449
89-func L () = {
90- let J = getString(j())
91- if ($isInstanceOf(J, "String"))
450+func dm () = {
451+ let as = getString(O())
452+ if ($isInstanceOf(as, "String"))
92453 then {
93- let K = J
94- fromBase58String(K)
454+ let dl = as
455+ fromBase58String(dl)
95456 }
96- else if ($isInstanceOf(J, "Unit"))
457+ else if ($isInstanceOf(as, "Unit"))
97458 then unit
98459 else throw("Match error")
99460 }
100461
101462
102-func M (N) = {
103- let O = throw("Permission denied")
104- let J = I()
105- if ($isInstanceOf(J, "ByteVector"))
463+let dn = throw("Permission denied")
464+
465+func do (df) = {
466+ let as = dk()
467+ if ($isInstanceOf(as, "ByteVector"))
106468 then {
107- let P = J
108- if ((N.callerPublicKey == P))
469+ let dp = as
470+ if ((df.callerPublicKey == dp))
109471 then true
110- else O
472+ else dn
111473 }
112- else if ($isInstanceOf(J, "Unit"))
113- then if ((N.caller == this))
474+ else if ($isInstanceOf(as, "Unit"))
475+ then if ((df.caller == this))
114476 then true
115- else O
477+ else dn
116478 else throw("Match error")
117479 }
118480
119481
120-func Q () = {
121- let J = getString(n())
122- if ($isInstanceOf(J, "String"))
123- then {
124- let K = J
125- if ((size(K) == 0))
126- then nil
127- else split(K, a)
128- }
129- else nil
130- }
131-
132-
133-func R (N) = if (containsElement(Q(), toBase58String(N.callerPublicKey)))
134- then true
135- else M(N)
136-
137-
138-func S (N) = if ((N.caller == B))
139- then true
140- else throw("caller must be the pool")
141-
142-
143-@Callable(N)
144-func constructor (T) = {
145- let U = M(N)
146- if ((U == U))
147- then [StringEntry(k(), T)]
482+@Callable(df)
483+func constructor (M) = {
484+ let dq = do(df)
485+ if ((dq == dq))
486+ then [StringEntry(M(), M)]
148487 else throw("Strict value is not equal to itself.")
149488 }
150489
151490
152491
153-@Callable(N)
154-func setManager (V) = {
155- let U = M(N)
156- if ((U == U))
492+@Callable(df)
493+func setManager (dr) = {
494+ let dq = do(df)
495+ if ((dq == dq))
157496 then {
158- let W = fromBase58String(V)
159- if ((W == W))
160- then [StringEntry(j(), V)]
497+ let ds = fromBase58String(dr)
498+ if ((ds == ds))
499+ then [StringEntry(O(), dr)]
161500 else throw("Strict value is not equal to itself.")
162501 }
163502 else throw("Strict value is not equal to itself.")
164503 }
165504
166505
167506
168-@Callable(N)
507+@Callable(df)
169508 func confirmManager () = {
170- let X = L()
171- let Y = if (isDefined(X))
509+ let bD = dm()
510+ let dt = if (isDefined(bD))
172511 then true
173512 else throw("No pending manager")
174- if ((Y == Y))
513+ if ((dt == dt))
175514 then {
176- let Z = if ((N.callerPublicKey == value(X)))
515+ let du = if ((df.callerPublicKey == value(bD)))
177516 then true
178517 else throw("You are not pending manager")
179- if ((Z == Z))
180- then [StringEntry(i(), toBase58String(value(X))), DeleteEntry(j())]
518+ if ((du == du))
519+ then [StringEntry(N(), toBase58String(value(bD))), DeleteEntry(O())]
181520 else throw("Strict value is not equal to itself.")
182521 }
183522 else throw("Strict value is not equal to itself.")
184523 }
185524
186525
187526
188-@Callable(N)
189-func setAdmins (aa) = {
190- let U = M(N)
191- if ((U == U))
192- then [StringEntry(n(), makeString(aa, a))]
527+@Callable(df)
528+func put (dv,dw) = {
529+ let dx = aG()
530+ let dy = valueOrErrorMessage(addressFromString(dx[x]), "Wr st addr")
531+ let dz = valueOrErrorMessage(addressFromString(dx[y]), "Wr sl addr")
532+ if ((0 > dv))
533+ then throw("Wrong slippage")
534+ else if ((size(df.payments) != 2))
535+ then throw("2 pmnts expd")
536+ else {
537+ let dA = dh(toString(df.caller), toBase58String(df.transactionId), AttachedPayment(value(df.payments[0]).assetId, value(df.payments[0]).amount), df.payments[1], dv, true, false, 0, "")
538+ let cK = dA._2
539+ let dB = dA._7
540+ let cc = dA._9
541+ let cL = dA._10
542+ let cM = dA._11
543+ let bK = dA._12
544+ let bL = dA._13
545+ let cx = invoke(ay, "emit", [cK], nil)
546+ if ((cx == cx))
547+ then {
548+ let dC = {
549+ let as = cx
550+ if ($isInstanceOf(as, "Address"))
551+ then {
552+ let dD = as
553+ invoke(dD, "emit", [cK], nil)
554+ }
555+ else unit
556+ }
557+ if ((dC == dC))
558+ then {
559+ let dE = if ((cL > 0))
560+ then invoke(dz, "put", nil, [AttachedPayment(bK, cL)])
561+ else nil
562+ if ((dE == dE))
563+ then {
564+ let dF = if ((cM > 0))
565+ then invoke(dz, "put", nil, [AttachedPayment(bL, cM)])
566+ else nil
567+ if ((dF == dF))
568+ then {
569+ let dG = if (dw)
570+ then {
571+ let dH = invoke(dy, "stake", nil, [AttachedPayment(dB, cK)])
572+ if ((dH == dH))
573+ then nil
574+ else throw("Strict value is not equal to itself.")
575+ }
576+ else [ScriptTransfer(df.caller, cK, dB)]
577+ (cc ++ dG)
578+ }
579+ else throw("Strict value is not equal to itself.")
580+ }
581+ else throw("Strict value is not equal to itself.")
582+ }
583+ else throw("Strict value is not equal to itself.")
584+ }
585+ else throw("Strict value is not equal to itself.")
586+ }
587+ }
588+
589+
590+
591+@Callable(df)
592+func putOneTkn (dI,dJ,dK,be,dw) = {
593+ let bv = aG()
594+ let dy = valueOrErrorMessage(addressFromString(bv[x]), "Wr st addr")
595+ let dz = valueOrErrorMessage(addressFromString(bv[y]), "Wr sl addr")
596+ let dL = valueOrErrorMessage(addressFromString(bv[z]), "Wr gwx addr")
597+ let dM = aC()
598+ let bK = dM[r]
599+ let bL = dM[s]
600+ let bM = parseIntValue(dM[t])
601+ let bN = parseIntValue(dM[u])
602+ let dN = valueOrElse(getString(this, aa()), "")
603+ let bI = if ((dN == toString(df.caller)))
604+ then df.originCaller
605+ else df.caller
606+ let dO = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa()), "no addons")), "addon address in not valid")
607+ let dP = reentrantInvoke(dO, "ensureCanPutOneTkn", [toString(bI)], nil)
608+ if ((dP == dP))
609+ then if (if (if (if ((0 >= be))
610+ then true
611+ else (0 >= dI))
612+ then true
613+ else (0 >= dJ))
614+ then true
615+ else (0 >= dK))
616+ then throw("Wrong params")
617+ else if ((size(df.payments) != 1))
618+ then throw("1 pmnt expd")
619+ else {
620+ let dg = value(df.payments[0])
621+ let bG = toBase58String(value(dg.assetId))
622+ let cl = dg.amount
623+ if ((10000000 > cl))
624+ then throw("Wrong pmt amt")
625+ else {
626+ let bQ = aW(bK)
627+ let bS = aW(bL)
628+ let dQ = if ((bG == bK))
629+ then if (if ((cl > bQ))
630+ then true
631+ else (dI > cl))
632+ then throw("invalid payment amount")
633+ else $Tuple6((bQ - cl), bS, (cl - dI), dJ, 0, 0)
634+ else if ((bG == bL))
635+ then if (if ((cl > bS))
636+ then true
637+ else (dJ > cl))
638+ then throw("invalid payment amount")
639+ else $Tuple6(bQ, (bS - cl), 0, 0, (cl - dJ), dI)
640+ else throw("wrong pmtAssetId")
641+ let dR = dQ._1
642+ let dS = dQ._2
643+ let dT = dQ._3
644+ let dU = dQ._4
645+ let dV = dQ._5
646+ let dW = dQ._6
647+ let bj = invoke(dL, "calcD", [toString(dR), toString(dS), az, g, h], nil)
648+ let bi = invoke(dL, "calcD", [toString(toBigInt(((dR + dT) - dW))), toString(toBigInt(((dS + dV) - dU))), az, g, h], nil)
649+ let dX = bh(parseBigIntValue(ar(bi)), parseBigIntValue(ar(bj)), f)
650+ if ((dX == dX))
651+ then {
652+ let dY = dh(toString(df.caller), toBase58String(df.transactionId), AttachedPayment(fromBase58String(bK), dI), AttachedPayment(fromBase58String(bL), dJ), be, true, true, cl, bG)
653+ let dZ = dY._2
654+ let dB = dY._7
655+ let cc = dY._9
656+ let cL = dY._10
657+ let cM = dY._11
658+ let ea = bb(toBigInt(dZ), toBigInt(dK), toBigInt(be))
659+ let cK = toInt(ea._2)
660+ let dA = invoke(ay, "emit", [cK], nil)
661+ if ((dA == dA))
662+ then {
663+ let dC = {
664+ let as = dA
665+ if ($isInstanceOf(as, "Address"))
666+ then {
667+ let dD = as
668+ invoke(dD, "emit", [cK], nil)
669+ }
670+ else unit
671+ }
672+ if ((dC == dC))
673+ then {
674+ let dE = if ((cL > 0))
675+ then invoke(dz, "put", nil, [AttachedPayment(fromBase58String(bK), cL)])
676+ else nil
677+ if ((dE == dE))
678+ then {
679+ let dF = if ((cM > 0))
680+ then invoke(dz, "put", nil, [AttachedPayment(fromBase58String(bL), cM)])
681+ else nil
682+ if ((dF == dF))
683+ then {
684+ let dG = if (dw)
685+ then {
686+ let dH = invoke(dy, "stake", nil, [AttachedPayment(dB, cK)])
687+ if ((dH == dH))
688+ then nil
689+ else throw("Strict value is not equal to itself.")
690+ }
691+ else [ScriptTransfer(df.caller, cK, dB)]
692+ (cc ++ dG)
693+ }
694+ else throw("Strict value is not equal to itself.")
695+ }
696+ else throw("Strict value is not equal to itself.")
697+ }
698+ else throw("Strict value is not equal to itself.")
699+ }
700+ else throw("Strict value is not equal to itself.")
701+ }
702+ else throw("Strict value is not equal to itself.")
703+ }
704+ }
193705 else throw("Strict value is not equal to itself.")
194706 }
195707
196708
197709
198-@Callable(N)
199-func unstakeAndGetOneTkn (ab,ac,ad,ae,af,ag) = {
200- let ah = if ((size(N.payments) != 0))
710+@Callable(df)
711+func putForFree (eb) = if ((0 > eb))
712+ then throw("Wrong slpg")
713+ else if ((size(df.payments) != 2))
714+ then throw("2 pmnts expd")
715+ else {
716+ let dY = dh(toString(df.caller), toBase58String(df.transactionId), AttachedPayment(value(df.payments[0]).assetId, value(df.payments[0]).amount), df.payments[1], eb, false, false, 0, "")
717+ dY._9
718+ }
719+
720+
721+
722+@Callable(df)
723+func get () = {
724+ let cx = de(df)
725+ let ec = cx._1
726+ let cb = cx._2
727+ let cl = cx._3
728+ let bG = cx._4
729+ let cc = cx._5
730+ let ed = invoke(ay, "burn", [cl], [AttachedPayment(bG, cl)])
731+ if ((ed == ed))
732+ then cc
733+ else throw("Strict value is not equal to itself.")
734+ }
735+
736+
737+
738+@Callable(df)
739+func getOneTkn (ee,ef,eg,eh,be) = if ((size(df.payments) != 1))
740+ then throw("1 pmnt expd")
741+ else {
742+ let bv = aC()
743+ let bJ = bv[q]
744+ let bK = bv[r]
745+ let bL = bv[s]
746+ let bM = parseIntValue(bv[t])
747+ let bN = parseIntValue(bv[u])
748+ let bO = bv[p]
749+ let dx = aG()
750+ let dL = valueOrErrorMessage(addressFromString(dx[z]), "Wr sl addr")
751+ let dg = value(df.payments[0])
752+ let dN = valueOrElse(getString(this, aa()), "")
753+ let bI = if ((dN == toString(df.caller)))
754+ then df.originCaller
755+ else df.caller
756+ let bF = toBase58String(df.transactionId)
757+ let bG = value(dg.assetId)
758+ let cl = dg.amount
759+ let dO = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa()), "no addons")), "addon address in not valid")
760+ let dP = reentrantInvoke(dO, "ensureCanGetOneTkn", [toString(bI)], nil)
761+ if ((dP == dP))
762+ then if ((1000000000 > cl))
763+ then throw("Min pmt 10 LP")
764+ else if (if (if ((0 > be))
765+ then true
766+ else (0 > ee))
767+ then true
768+ else (0 > eg))
769+ then throw("Wrong params")
770+ else if ((bJ != toBase58String(bG)))
771+ then throw("Wrong LP")
772+ else {
773+ let cx = bE(toBase58String(df.transactionId), toBase58String(bG), cl, df.caller)
774+ let ei = cx._1
775+ let ej = cx._2
776+ let bQ = aW(bK)
777+ let bS = aW(bL)
778+ let ek = if ((eh == bK))
779+ then $Tuple7((bQ - ei), (bS - ej), ee, ej, 0, 0, (ei + ee))
780+ else if ((eh == bL))
781+ then $Tuple7((bQ - ei), (bS - ej), 0, 0, ee, ei, (ej + ee))
782+ else throw("wrong outAssetId")
783+ let dR = ek._1
784+ let dS = ek._2
785+ let dT = ek._3
786+ let dU = ek._4
787+ let dV = ek._5
788+ let dW = ek._6
789+ let el = ek._7
790+ if (if ((0 > dT))
791+ then true
792+ else (0 > dV))
793+ then throw("Wrong calc")
794+ else {
795+ let bj = invoke(dL, "calcD", [toString(dR), toString(dS), az, g, h], nil)
796+ let bi = invoke(dL, "calcD", [toString(((dR - dT) + dW)), toString(((dS + dU) - dV)), az, g, h], nil)
797+ let dX = bh(parseBigIntValue(ar(bi)), parseBigIntValue(ar(bj)), f)
798+ if ((dX == dX))
799+ then {
800+ let em = bb(toBigInt(el), toBigInt(eg), toBigInt(be))
801+ if ((em == em))
802+ then {
803+ let en = if ((eh == bK))
804+ then $Tuple2(toInt(em._2), 0)
805+ else $Tuple2(0, toInt(em._2))
806+ let eo = en._1
807+ let ep = en._2
808+ let eq = aY(B(bS, bN), B(bQ, bM))
809+ let er = E(eq, a)
810+ let cc = [ScriptTransfer(bI, (eo + ep), if ((eh == "WAVES"))
811+ then unit
812+ else fromBase58String(eh)), StringEntry(W(toString(bI), bF), aS(eo, ep, cl, er, height, lastBlock.timestamp)), IntegerEntry(P(), er), IntegerEntry(Q(height, lastBlock.timestamp), er)]
813+ if ((cc == cc))
814+ then {
815+ let es = invoke(ay, "burn", [cl], [AttachedPayment(bG, cl)])
816+ if ((es == es))
817+ then cc
818+ else throw("Strict value is not equal to itself.")
819+ }
820+ else throw("Strict value is not equal to itself.")
821+ }
822+ else throw("Strict value is not equal to itself.")
823+ }
824+ else throw("Strict value is not equal to itself.")
825+ }
826+ }
827+ else throw("Strict value is not equal to itself.")
828+ }
829+
830+
831+
832+@Callable(df)
833+func getNoLess (et,eu) = {
834+ let cx = de(df)
835+ let ca = cx._1
836+ let cb = cx._2
837+ let cl = cx._3
838+ let bG = cx._4
839+ let cc = cx._5
840+ if ((et > ca))
841+ then throw(((("Failed: " + toString(ca)) + " < ") + toString(et)))
842+ else if ((eu > cb))
843+ then throw(((("Failed: " + toString(cb)) + " < ") + toString(eu)))
844+ else {
845+ let ev = invoke(ay, "burn", [cl], [AttachedPayment(bG, cl)])
846+ if ((ev == ev))
847+ then cc
848+ else throw("Strict value is not equal to itself.")
849+ }
850+ }
851+
852+
853+
854+@Callable(df)
855+func unstakeAndGet (ew) = {
856+ let ex = if ((size(df.payments) != 0))
201857 then throw("No pmnts expd")
202858 else true
203- if ((ah == ah))
859+ if ((ex == ex))
204860 then {
205- let ai = D()
206- let aj = H()
207- let ak = fromBase58String(ai[d])
208- let al = valueOrErrorMessage(addressFromString(aj[g]), "Wr st addr")
209- let am = invoke(al, "unstake", [toBase58String(ak), ab], nil)
210- if ((am == am))
861+ let bv = aC()
862+ let ey = aG()
863+ let dB = fromBase58String(bv[q])
864+ let ez = valueOrErrorMessage(addressFromString(ey[x]), "Wr st addr")
865+ let eA = invoke(ez, "unstake", [toBase58String(dB), ew], nil)
866+ if ((eA == eA))
211867 then {
212- let an = invoke(B, "getOneTkn", [ac, ad, ae, af, ag], [AttachedPayment(ak, ab)])
213- if ((an == an))
214- then nil
868+ let cx = bE(toBase58String(df.transactionId), toBase58String(dB), ew, df.caller)
869+ let bO = parseIntValue(cx._9)
870+ let cc = cx._10
871+ let eB = if (if (aA())
872+ then true
873+ else (bO == n))
874+ then throw(("Blocked: " + toString(bO)))
875+ else true
876+ if ((eB == eB))
877+ then {
878+ let eC = invoke(ay, "burn", [ew], [AttachedPayment(dB, ew)])
879+ if ((eC == eC))
880+ then cc
881+ else throw("Strict value is not equal to itself.")
882+ }
215883 else throw("Strict value is not equal to itself.")
216884 }
217885 else throw("Strict value is not equal to itself.")
218886 }
219887 else throw("Strict value is not equal to itself.")
220888 }
221889
222890
223891
224-@Callable(N)
225-func setAmp (ao) = {
226- let U = R(N)
227- if ((U == U))
228- then {
229- let ap = invoke(B, "setS", [o(), ao], nil)
230- let aq = invoke(B, "setS", [p(height), ao], nil)
231- $Tuple2(nil, $Tuple2(ap, aq))
232- }
233- else throw("Strict value is not equal to itself.")
892+@Callable(df)
893+func activate (eD,eE) = if ((toString(df.caller) != toString(ay)))
894+ then throw("denied")
895+ else $Tuple2([StringEntry(X(), eD), StringEntry(Y(), eE)], "success")
896+
897+
898+
899+@Callable(df)
900+func setS (eF,eB) = if ((toString(df.caller) != au(this, aa())))
901+ then dn
902+ else [StringEntry(eF, eB)]
903+
904+
905+
906+@Callable(df)
907+func setI (eF,eB) = if ((toString(df.caller) != au(this, aa())))
908+ then dn
909+ else [IntegerEntry(eF, eB)]
910+
911+
912+
913+@Callable(df)
914+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aC())
915+
916+
917+
918+@Callable(df)
919+func getAccBalanceWrapperREADONLY (aX) = $Tuple2(nil, aW(aX))
920+
921+
922+
923+@Callable(df)
924+func calcPricesWrapperREADONLY (bp,bq,bu) = {
925+ let eG = bt(bp, bq, bu)
926+ $Tuple2(nil, [toString(eG[0]), toString(eG[1]), toString(eG[2])])
234927 }
235928
236929
237-@Verifier(ar)
238-func as () = {
239- let at = {
240- let J = I()
241- if ($isInstanceOf(J, "ByteVector"))
930+
931+@Callable(df)
932+func fromX18WrapperREADONLY (F,eH) = $Tuple2(nil, E(parseBigIntValue(F), eH))
933+
934+
935+
936+@Callable(df)
937+func toX18WrapperREADONLY (C,D) = $Tuple2(nil, toString(B(C, D)))
938+
939+
940+
941+@Callable(df)
942+func calcPriceBigIntWrapperREADONLY (aZ,ba) = $Tuple2(nil, toString(aY(parseBigIntValue(aZ), parseBigIntValue(ba))))
943+
944+
945+
946+@Callable(df)
947+func estimatePutOperationWrapperREADONLY (bF,be,ce,cf,cg,ch,eI,ci,cj) = $Tuple2(nil, cd(bF, be, ce, cf, cg, ch, eI, ci, cj, false, 0, ""))
948+
949+
950+
951+@Callable(df)
952+func estimateGetOperationWrapperREADONLY (bF,eJ,bH,eI) = {
953+ let cx = bE(bF, eJ, bH, addressFromStringValue(eI))
954+ $Tuple2(nil, $Tuple10(cx._1, cx._2, cx._3, cx._4, cx._5, cx._6, cx._7, toString(cx._8), cx._9, cx._10))
955+ }
956+
957+
958+@Verifier(eK)
959+func eL () = {
960+ let eM = {
961+ let as = dk()
962+ if ($isInstanceOf(as, "ByteVector"))
242963 then {
243- let P = J
244- P
964+ let dp = as
965+ dp
245966 }
246- else if ($isInstanceOf(J, "Unit"))
247- then ar.senderPublicKey
967+ else if ($isInstanceOf(as, "Unit"))
968+ then eK.senderPublicKey
248969 else throw("Match error")
249970 }
250- sigVerify(ar.bodyBytes, ar.proofs[0], at)
971+ let as = eK
972+ if ($isInstanceOf(as, "Order"))
973+ then {
974+ let cS = as
975+ let eN = aB()
976+ let eO = cR(cS)
977+ let eP = sigVerify(cS.bodyBytes, cS.proofs[0], cS.senderPublicKey)
978+ let eQ = sigVerify(cS.bodyBytes, cS.proofs[1], eN)
979+ if (if (if (eO)
980+ then eP
981+ else false)
982+ then eQ
983+ else false)
984+ then true
985+ else an(eO, eP, eQ)
986+ }
987+ else if ($isInstanceOf(as, "SetScriptTransaction"))
988+ then {
989+ let dl = as
990+ let eR = blake2b256(value(dl.script))
991+ let eS = fromBase64String(value(getString(ay, am())))
992+ let eT = scriptHash(this)
993+ if (if ((eS == eR))
994+ then (eT != eR)
995+ else false)
996+ then true
997+ else sigVerify(eK.bodyBytes, eK.proofs[0], eM)
998+ }
999+ else sigVerify(eK.bodyBytes, eK.proofs[0], eM)
2511000 }
2521001

github/deemru/w8io/169f3d6 
232.42 ms