tx · 34yy3epDTCAyDKooLbwXjWWcw3p5pf1bxVrFLmrGTmdY

3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ:  -0.03500000 Waves

2022.11.25 11:28 [3397833] smart account 3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ > SELF 0.00000000 Waves

{ "type": 13, "id": "34yy3epDTCAyDKooLbwXjWWcw3p5pf1bxVrFLmrGTmdY", "fee": 3500000, "feeAssetId": null, "timestamp": 1669364913710, "version": 2, "chainId": 87, "sender": "3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ", "senderPublicKey": "BWnMC6WjWvjJRc2jc1XibbL3RSvL2mFekrvRxpJGdtp1", "proofs": [ "", "2ARV5n8ijbVhASkxKD4NV9MLzMAWYJpNdikEmqqunN27gGajdYPRyq94FaZNBvstVLNfydW1RJk6gV9Bfr4Hrquz", "2UjH9tk4orePWdQj2S45raHYACLsfKigL4G3VQkHYF1b3aZd3zZN1RykzAzAkhgMSMAnNJvhJNkYe9dmoX5n6FLd" ], "script": "base64:BgJQCAISBAoCAQgSAwoBCBIUChIIAQEIAQEBAQEBAQEYBAEBBBgSBAoCAQgSBAoCAQgSBAoCAQgSBQoDAQEIEgMKAQESAwoBARIECgIBARIAEgBMAAlrZXlBY3RpdmUCBmFjdGl2ZQALa0FjdGl2ZUdsb2ICFGFjdGl2ZV9hbGxfY29udHJhY3RzAA9rZXlBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA9rZXlBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA9rZXlBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zACFrZXlMYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMCIWxhdW5jaHBhZF9kYXRhX3RyYW5zYWN0aW9uX3N0YXR1cwASa2V5TGF1bmNocGFkTmV4dElkAhFsYXVuY2hwYWRfbmV4dF9pZAAUa2V5TGF1bmNocGFkQWN0aXZlSWQCE2xhdW5jaHBhZF9hY3RpdmVfaWQADWtleUluaXRDYWxsZXICC2luaXRfY2FsbGVyAAprZXlBZGRyZXNzAghfYWRkcmVzcwANa2V5SW5pdEhlaWdodAIMX2luaXRfaGVpZ2h0AA5rZXlTdGFydEhlaWdodAINX3N0YXJ0X2hlaWdodAARa2V5RmluYWxpc2VIZWlnaHQCEF9maW5hbGlzZV9oZWlnaHQADGtleUNvbWlzc2lvbgIKX2NvbWlzc2lvbgAKa2V5QXNzZXRJZAIJX2Fzc2V0X2lkABNrZXlUb3RhbFRva2VuQW1vdW50AhNfdG90YWxfdG9rZW5fYW1vdW50ABprZXlUb3RhbEFtb3VudEJ1eUFzc2V0U29sZAIVX3RvdGFsX2J1eV9hc3NldF9zb2xkABJrZXlUb2tlbnNQZXJUaWNrZXQCEl90b2tlbnNfcGVyX3RpY2tldAAQa2V5UHJpY2VQZXJUb2tlbgIQX3ByaWNlX3Blcl90b2tlbgAQa2V5U3dvcFBlclRpY2tldAIQX3N3b3BfcGVyX3RpY2tldAAWa2V5U3dvcGZpVGlja2V0c0Ftb3VudAIXX3RpY2tldHNfc3dvcGZpX21lbWJlcnMAF2tleUNhbXBhaWduVG9rZW5zQW1vdW50AhNfdG9rZW5zX2FjY2Vzc19saXN0ABZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uAhZfdG9rZW5zX3Blcl9hbGxvY2F0aW9uABNrZXlUaWNrZXRMYXN0TnVtYmVyAhNfdGlja2V0X2xhc3RfbnVtYmVyABNrZXlHb3Zlcm5hbmNlU3Rha2VkAg1fR1N3b3BfYW1vdW50AAxrZXlVc2VyUmVmSWQCB19yZWZfaWQADWtleVZlcmlmeUhhc2gCDF92ZXJpZnlfaGFzaAALa2V5RHVyYXRpb24CCV9kdXJhdGlvbgAca2V5QW1vdW50QnV5QXNzZXRJbk1hcmtldGluZwInX3RvdGFsX3B1cmNoYXNlZF9idXlfYXNzZXRfaW5fbWFya2V0aW5nACVrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nRmluYWxpemVkAjFfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmdfZmluYWxpemVkABNrZXlUcmFuc2ZlckJ1eUFzc2V0AhNfdHJhbnNmZXJfYnV5X2Fzc2V0ABRrZXlGcmVlelN3b3BEdXJhdGlvbgIVX2ZyZWV6ZV9zd29wX2R1cmF0aW9uABhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4CGF9mcmVlemVfYWRkaXRpb25hbF90b2tlbgAQa2V5RnJlZXplVG9rZW5JZAIQX2ZyZWV6ZV90b2tlbl9pZAAWa2V5RnJlZXplVG9rZW5EdXJhdGlvbgIWX2ZyZWV6ZV90b2tlbl9kdXJhdGlvbgAXa2V5RnJlZXplVG9rZW5QZXJUaWNrZXQCGF9mcmVlemVfdG9rZW5fcGVyX3RpY2tldAALa2V5QnV5VG9rZW4CCl9idXlfdG9rZW4ADmtleUNsYWltUGFyYW1zAg1fY2xhaW1fcGFyYW1zABtrZXlIaWdoQ29tcGV0aXRpb25Db21pc3Npb24CG19oaWdoX2NvbXBldGl0aW9uX2NvbWlzc2lvbgAWa2V5SGlnaENvbXBldGl0aW9uU2FsZQIWX2hpZ2hfY29tcGV0aXRpb25fc2FsZQAVa2V5SENUaWNrZXRMYXN0TnVtYmVyAiRfaGlnaF9jb21wZXRpdGlvbl90aWNrZXRfbGFzdF9udW1iZXIAGGtleUhpZ2hDb21wZXRpdGlvbkFtb3VudAIZX3RpY2tldHNfaGlnaF9jb21wZXRpdGlvbgAca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQwImX3RvdGFsX2J1eV9hc3NldF9zb2xkX2hpZ2hfY29tcGV0aXRpb24AFGtleVVzZXJDbGFpbWVkVG9rZW5zAg9fY2xhaW1lZF90b2tlbnMAF2tleVVzZXJDbGFpbWVkQnV5VG9rZW5zAhNfY2xhaW1lZF9idXlfdG9rZW5zABprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudAIPX2JvdWdodF90aWNrZXRzAA5rZXlVc2VyVGlja2V0cwIPX3RpY2tldHNfbnVtYmVyABBrZXlVc2VySENUaWNrZXRzAiBfdGlja2V0c19udW1iZXJfaGlnaF9jb21wZXRpdGlvbgAca2V5VXNlckhDQm91Z2h0VGlja2V0c0Ftb3VudAIgX2JvdWdodF90aWNrZXRzX2hpZ2hfY29tcGV0aXRpb24AG2tleVVzZXJBdmFpbGFibGVBbGxvY2F0aW9ucwIdX2F2YWlsYWJsZV9wdXJjaGFzZV9tYXJrZXRpbmcAIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nAiFfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucwITX2JvdWdodF9hbGxvY2F0aW9ucwASa2V5VXNlckNsYWltU3RhdHVzAg1fY2xhaW1fc3RhdHVzABprZXlVc2VyV2lubmVkVGlja2V0c0Ftb3VudAIPX3RpY2tldHNfcmVzdWx0AClrZXlVc2VyV2lubmVkSGlnaENvbXBldGl0aW9uVGlja2V0c0Ftb3VudAIgX3RpY2tldHNfcmVzdWx0X2hpZ2hfY29tcGV0aXRpb24AEmtleVVzZXJGcmVlemVUb2tlbgIUX2ZyZWV6ZV90b2tlbl9hbW91bnQABm9yYWNsZQkBB0FkZHJlc3MBARoBV4r/CGiaNbpAzWF08hI33qY38Po4zugeOAAKZ292ZXJuYW5jZQkBB0FkZHJlc3MBARoBV8lXnLdvepYMywgiOQ98homAomzcs7cW7QAQY29tbWlzc2lvbldhbGxldAkBB0FkZHJlc3MBARoBV6BRpy/wPSJ8xbXfMYJKm3TgPPkqMILhZwASc3Rha2luZ1VTRE5BZGRyZXNzCQEHQWRkcmVzcwEBGgFX5A6nNk+SC9eXz6QdPzUbz0Nq66o883GdAARVU0ROASC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QASYWRtaW5QdWJLZXlTdGFraW5nASCyPZ8dhjeaV4XmI1H04Td7I49qWAHdPugNaMCOdHtYKAAUbWF4QWxsb2NhdGlvbnNBbW91bnQAAgARYWN0aXZlTGF1bmNocGFkSWQJAQt2YWx1ZU9yRWxzZQIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFFGtleUxhdW5jaHBhZEFjdGl2ZUlkAP///////////wEBC2dldEFkbWluUHViAQtrZXlBZG1pblB1YgQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFC2tleUFkbWluUHViAwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgECGUFkbWluIHB1YmxpYyBrZXkgaXMgZW1wdHkADGFkbWluUHViS2V5MQkBC2dldEFkbWluUHViAQUPa2V5QWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJAQtnZXRBZG1pblB1YgEFD2tleUFkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQELZ2V0QWRtaW5QdWIBBQ9rZXlBZG1pblB1YktleTMBDGdldEFzc2V0SW5mbwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAQIc3RyaW5nSWQJANgEAQUCaWQEBGluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJpZAkArAICCQCsAgICBkFzc2V0IAUIc3RyaW5nSWQCDiBkb2Vzbid0IGV4aXN0CQCVCgMFCHN0cmluZ0lkCAUEaW5mbwRuYW1lCAUEaW5mbwhkZWNpbWFscwMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAkAlQoDAgVXQVZFUwIFV0FWRVMACAkAAgECC01hdGNoIGVycm9yARJnZXRMYXVuY2hwYWROZXh0SWQACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEmtleUxhdW5jaHBhZE5leHRJZAABARBzdGFrZWRVc2RuQW1vdW50AAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJzdGFraW5nVVNETkFkZHJlc3MJAKwCAgkArAICCQCsAgICDHJwZF9iYWxhbmNlXwkA2AQBBQRVU0ROAgFfCQClCAEFBHRoaXMAAAAGYWN0aXZlCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCWtleUFjdGl2ZQYACmFjdGl2ZUdsb2IJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlBQtrQWN0aXZlR2xvYgYBCGlzQWN0aXZlAAMDBQZhY3RpdmUFCmFjdGl2ZUdsb2IHBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcBCGFzc2V0U3RyAwkAAAIFCGFzc2V0U3RyAgVXQVZFUwkAlgoEBQR1bml0AgVXQVZFUwIFV0FWRVMACAQIc3RyaW5nSWQFCGFzc2V0U3RyBAJpZAkA2QQBBQhhc3NldFN0cgQEaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmlkCQCsAgIJAKwCAgIGQXNzZXQgBQhzdHJpbmdJZAIOIGRvZXNuJ3QgZXhpc3QJAJYKBAUCaWQFCHN0cmluZ0lkCAUEaW5mbwRuYW1lCAUEaW5mbwhkZWNpbWFscwwBaQENaGFzaGluZ1JhbmRvbQILbGF1bmNocGFkSWQEaGFzaAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFDWtleVZlcmlmeUhhc2gFBGhhc2gFA25pbAFpAQppbml0Q2FsbGVyAQdhZGRyZXNzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtleUluaXRDYWxsZXIFB2FkZHJlc3MFA25pbAFpAQRpbml0Eg5wcm9qZWN0QWRkcmVzcwtzdGFydEhlaWdodAhkdXJhdGlvbghidXlUb2tlbgpjb21taXNzaW9uD3Rva2Vuc1BlclRpY2tldA1wcmljZVBlclRva2VuE3N3b3BmaVRpY2tldHNBbW91bnQUY2FtcGFpZ25Ub2tlbnNBbW91bnQTdG9rZW5zUGVyQWxsb2NhdGlvbg1zd29wUGVyVGlja2V0EnN3b3BGcmVlemVEdXJhdGlvbgtjbGFpbVBhcmFtcxNIaWdoQ29tcGV0aXRpb25TYWxlGGhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhxoaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50FWZyZWV6ZUFkZGl0aW9uYWxUb2tlbgxmcmVlemVQYXJhbXMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQClCAEIBQFpBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rZXlJbml0Q2FsbGVyAgAJAAIBAilPbmx5IHByb2plY3QgYWRtaW4gY2FuIGNhbGwgaW5pdCBmdW5jdGlvbgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkAZgIFBmhlaWdodAULc3RhcnRIZWlnaHQJAAIBAjNTdGFydCBoZWlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gYmxvY2tjaGFpbiBoZWlnaHQDAwUVZnJlZXplQWRkaXRpb25hbFRva2VuCQECIT0CCQCQAwEFDGZyZWV6ZVBhcmFtcwADBwkAAgECJEZyZWV6ZSBwYXJhbXMgbGlzdCBtdXN0IGhhdmUgMyBpdGVtcwQLbGF1bmNocGFkSWQJARJnZXRMYXVuY2hwYWROZXh0SWQABA5sYXVuY2hwYWRJZFN0cgkApAMBBQtsYXVuY2hwYWRJZAQLJHQwNjUwMDY1NzUJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwNjUwMDY1NzUCXzEECnBtdEFzc2V0SWQIBQskdDA2NTAwNjU3NQJfMgQLJHQwNjU4NDY2NTcJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAULJHQwNjU4NDY2NTcCXzEEDHBtdEFzc2V0TmFtZQgFCyR0MDY1ODQ2NjU3Al8yBAtwbXREZWNpbWFscwgFCyR0MDY1ODQ2NjU3Al8zBBVmcmVlemVBZGRpdGlvbmFsRW50cnkDBRVmcmVlemVBZGRpdGlvbmFsVG9rZW4JAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFGGtleUZyZWV6ZUFkZGl0aW9uYWxUb2tlbgYJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUQa2V5RnJlZXplVG9rZW5JZAkAkQMCBQxmcmVlemVQYXJhbXMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUWa2V5RnJlZXplVG9rZW5EdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGZyZWV6ZVBhcmFtcwABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDmxhdW5jaHBhZElkU3RyBRdrZXlGcmVlemVUb2tlblBlclRpY2tldAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGZyZWV6ZVBhcmFtcwACBQNuaWwFA25pbAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDXBtdFN0ckFzc2V0SWQCCl9sYXVuY2hwYWQFC2xhdW5jaHBhZElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrZXlMYXVuY2hwYWROZXh0SWQJAGQCBQtsYXVuY2hwYWRJZAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFCmtleUFkZHJlc3MFDnByb2plY3RBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDmxhdW5jaHBhZElkU3RyBQ1rZXlJbml0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFDmtleVN0YXJ0SGVpZ2h0BQtzdGFydEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgULa2V5RHVyYXRpb24FCGR1cmF0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFC2tleUJ1eVRva2VuBQhidXlUb2tlbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUUa2V5RnJlZXpTd29wRHVyYXRpb24FEnN3b3BGcmVlemVEdXJhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUTa2V5VG90YWxUb2tlbkFtb3VudAUJcG10QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFCmtleUFzc2V0SWQFDXBtdFN0ckFzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFDGtleUNvbWlzc2lvbgUKY29tbWlzc2lvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUTa2V5VGlja2V0TGFzdE51bWJlcgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDmxhdW5jaHBhZElkU3RyBRVrZXlIQ1RpY2tldExhc3ROdW1iZXIAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUSa2V5VG9rZW5zUGVyVGlja2V0BQ90b2tlbnNQZXJUaWNrZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFEGtleVByaWNlUGVyVG9rZW4FDXByaWNlUGVyVG9rZW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFEGtleVN3b3BQZXJUaWNrZXQFDXN3b3BQZXJUaWNrZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFFmtleVN3b3BmaVRpY2tldHNBbW91bnQFE3N3b3BmaVRpY2tldHNBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFF2tleUNhbXBhaWduVG9rZW5zQW1vdW50BRRjYW1wYWlnblRva2Vuc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgUTdG9rZW5zUGVyQWxsb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFDmxhdW5jaHBhZElkU3RyBQ5rZXlDbGFpbVBhcmFtcwkAuQkCBQtjbGFpbVBhcmFtcwIBLAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUWa2V5SGlnaENvbXBldGl0aW9uU2FsZQUTSGlnaENvbXBldGl0aW9uU2FsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUba2V5SGlnaENvbXBldGl0aW9uQ29taXNzaW9uBRhoaWdoQ29tcGV0aXRpb25Db21pc3Npb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFGGtleUhpZ2hDb21wZXRpdGlvbkFtb3VudAUcaGlnaENvbXBldGl0aW9uVGlja2V0c0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa2V5TGF1bmNocGFkQWN0aXZlSWQFC2xhdW5jaHBhZElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtleUluaXRDYWxsZXICAAUDbmlsBRVmcmVlemVBZGRpdGlvbmFsRW50cnkBaQEQY29tbWl0U3dvcGZpU2FsZQILbGF1bmNocGFkSWQFcmVmSWQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAECyR0MDkyNjM5MzM4CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFCyR0MDkyNjM5MzM4Al8xBApwbXRBc3NldElkCAULJHQwOTI2MzkzMzgCXzIECyR0MDkzNDM5NDkzCQEWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwEJAQV2YWx1ZQEJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlCdXlUb2tlbgQKYnV5QXNzZXRJZAgFCyR0MDkzNDM5NDkzAl8xBA1idXlBc3NldFN0cklkCAULJHQwOTM0Mzk0OTMCXzIEDGJ1eUFzc2V0TmFtZQgFCyR0MDkzNDM5NDkzAl8zBBBidXlBc3NldERlY2ltYWxzCAULJHQwOTM0Mzk0OTMCXzQEC3N0YWtlZFN3b3BzCQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdmVybmFuY2UJAKwCAgkApQgBCAUBaQZjYWxsZXIFE2tleUdvdmVybmFuY2VTdGFrZWQAAAQXYWxsb3dlZFRpY2tldHNBbW91bnRBbGwJAGkCBQtzdGFrZWRTd29wcwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlTd29wUGVyVGlja2V0BBNib3VnaHRUaWNrZXRzQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudAAABBRhbGxvd2VkVGlja2V0c0Ftb3VudAkAZQIFF2FsbG93ZWRUaWNrZXRzQW1vdW50QWxsBRNib3VnaHRUaWNrZXRzQW1vdW50BAtzdGFydEhlaWdodAkBBXZhbHVlAQkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFDmtleVN0YXJ0SGVpZ2h0BAhkdXJhdGlvbgkBBXZhbHVlAQkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFC2tleUR1cmF0aW9uBBVmcmVlemVBZGRpdGlvbmFsVG9rZW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4HAwkBAiE9AgURYWN0aXZlTGF1bmNocGFkSWQFC2xhdW5jaHBhZElkCQACAQI3VGhlcmUgaXMgbm8gYWN0aXZlIGxhdW5jaHBhZCBvciB0aGlzIGxhdW5jaHBhZCBpcyBlbmRlZAMJAGYCBQtzdGFydEhlaWdodAUGaGVpZ2h0CQACAQIeTGF1bmNocGFkIHNhbGUgbm90IHN0YXJ0ZWQgeWV0AwkAZgIFBmhlaWdodAkAZAIFC3N0YXJ0SGVpZ2h0BQhkdXJhdGlvbgkAAgECFExhdW5jaHBhZCBzYWxlIGVuZGVkAwMJAQEhAQUVZnJlZXplQWRkaXRpb25hbFRva2VuAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkBAiE9AgUKcG10QXNzZXRJZAUKYnV5QXNzZXRJZAcJAAIBCQCsAgIJAKwCAgIYT25lIGF0dGFjaGVkIHBheW1lbnQgaW4gBQxidXlBc3NldE5hbWUCCSBleHBlY3RlZAMDBRVmcmVlemVBZGRpdGlvbmFsVG9rZW4DCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIGCQECIT0CBQpwbXRBc3NldElkBQpidXlBc3NldElkBwQNZnJlZXplVG9rZW5JZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlGcmVlemVUb2tlbklkCQACAQkArAICCQCsAgIJAKwCAgIpVHdvIGF0dGFjaGVkIHBheW1lbnRzIGV4cGVjdGVkOiBGaXJzdCBpbiAFDGJ1eUFzc2V0TmFtZQIMLCBzZWNvbmQgaW4gBQ1mcmVlemVUb2tlbklkAwMJAGcCAAAFF2FsbG93ZWRUaWNrZXRzQW1vdW50QWxsBgkAZwIAAAUUYWxsb3dlZFRpY2tldHNBbW91bnQJAAIBAipOb3QgZW5vdWdodCBTV09QIGluIHN0YWtpbmcgdG8gYnV5IHRpY2tldHMECnRva2VuUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUQa2V5UHJpY2VQZXJUb2tlbgQPdG9rZW5zUGVyVGlja2V0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEmtleVRva2Vuc1BlclRpY2tldAQNJHQwMTEzMDUxMTQ0OQkBFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFCmtleUFzc2V0SWQEB3Rva2VuSWQIBQ0kdDAxMTMwNTExNDQ5Al8xBA90b2tlblN0ckFzc2V0SWQIBQ0kdDAxMTMwNTExNDQ5Al8yBA50b2tlbkFzc2V0TmFtZQgFDSR0MDExMzA1MTE0NDkCXzMEDXRva2VuRGVjaW1hbHMIBQ0kdDAxMTMwNTExNDQ5Al80BAt0aWNrZXRQcmljZQkAawMFD3Rva2Vuc1BlclRpY2tldAUKdG9rZW5QcmljZQkAbAYACgAABQ10b2tlbkRlY2ltYWxzAAAAAAUERE9XTgQTY29tbWlzc2lvblBlclRpY2tldAkAawMFC3RpY2tldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFDGtleUNvbWlzc2lvbgBkBA9idXlUaWNrZXRBbW91bnQJAGkCBQlwbXRBbW91bnQJAGQCBQt0aWNrZXRQcmljZQUTY29tbWlzc2lvblBlclRpY2tldAQWYWxsb3dlZEJ1eVRpY2tldEFtb3VudAkAlwMBCQDMCAIFD2J1eVRpY2tldEFtb3VudAkAzAgCBRRhbGxvd2VkVGlja2V0c0Ftb3VudAUDbmlsBBxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uCQBoAgUWYWxsb3dlZEJ1eVRpY2tldEFtb3VudAkAZAIFC3RpY2tldFByaWNlBRNjb21taXNzaW9uUGVyVGlja2V0BAZjaGFuZ2UJAGUCBQlwbXRBbW91bnQFHGFsbG93ZWRCdXlQcmljZVdpdGhDb21pc3Npb24DCQAAAgUPYnV5VGlja2V0QW1vdW50AAAJAAIBCQCsAgIJAKwCAgIMTm90IGVub3VnaHQgBQxidXlBc3NldE5hbWUCDyB0byBidXkgdGlja2V0cwMJAQIhPQIFBmNoYW5nZQAACQACAQkArAICCQCsAgIJAKwCAgkArAICAhZXcm9uZyBwYXltZW50LiBUbyBidXkgCQCkAwEFFmFsbG93ZWRCdXlUaWNrZXRBbW91bnQCGHRpY2tldHMgeW91IG5lZWQgdG8gcGF5IAkApAMBBRxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uBQxidXlBc3NldE5hbWUEFWZyZWV6ZUFkZGl0aW9uYWxFbnRyeQMFFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbgQNZnJlZXplVG9rZW5JZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlGcmVlemVUb2tlbklkBBRmcmVlemVUb2tlblBlclRpY2tldAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRdrZXlGcmVlemVUb2tlblBlclRpY2tldAQNJHQwMTI2MTMxMjcwMAkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBA9wbXRBbW91bnRGcmVlemUIBQ0kdDAxMjYxMzEyNzAwAl8xBBBwbXRBc3NldElkRnJlZXplCAUNJHQwMTI2MTMxMjcwMAJfMgQNJHQwMTI3MTcxMjgwOAkBDGdldEFzc2V0SW5mbwEFCnBtdEFzc2V0SWQEE3BtdEZyZWV6ZVN0ckFzc2V0SWQIBQ0kdDAxMjcxNzEyODA4Al8xBBJwbXRGcmVlemVBc3NldE5hbWUIBQ0kdDAxMjcxNzEyODA4Al8yBBFwbXRGcmVlemVEZWNpbWFscwgFDSR0MDEyNzE3MTI4MDgCXzMEEG5lZWRGcmVlemVUb2tlbnMJAGgCBRRmcmVlemVUb2tlblBlclRpY2tldAUPYnV5VGlja2V0QW1vdW50AwMJAQIhPQIFE3BtdEZyZWV6ZVN0ckFzc2V0SWQFDWZyZWV6ZVRva2VuSWQGCQECIT0CBRBuZWVkRnJlZXplVG9rZW5zBQ9wbXRBbW91bnRGcmVlemUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEFlvdSBuZWVkIHRvIGFkZCAJAKQDAQUQbmVlZEZyZWV6ZVRva2VucwIBIAUScG10RnJlZXplQXNzZXROYW1lAhQgYXMgYSBzZWNvbmQgcGF5bWVudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFEmtleVVzZXJGcmVlemVUb2tlbgUPcG10QW1vdW50RnJlZXplBQNuaWwFA25pbAQYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBQ5rZXlVc2VyVGlja2V0cwIABBZsYXN0Qm91Z2h0VGlja2V0TnVtYmVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFE2tleVRpY2tldExhc3ROdW1iZXIEC2JvdWdodFJhbmdlCQCsAgIJAKwCAgkApAMBCQBkAgUWbGFzdEJvdWdodFRpY2tldE51bWJlcgABAgEtCQCkAwEJAGQCBRZsYXN0Qm91Z2h0VGlja2V0TnVtYmVyBRZhbGxvd2VkQnV5VGlja2V0QW1vdW50BBtuZXdVc2VyQm91Z2h0VGlja2V0c051bWJlcnMJAKwCAgUYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzAwkBAiE9AgUYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzAgAJAKwCAgIBLAULYm91Z2h0UmFuZ2UJAKwCAgIABQtib3VnaHRSYW5nZQQDaW52AwkAAAIFCmJ1eUFzc2V0SWQFBFVTRE4JAPwHBAUSc3Rha2luZ1VTRE5BZGRyZXNzAgxsb2NrTmV1dHJpbm8FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUJcG10QW1vdW50BQNuaWwAAAMJAAACBQNpbnYFA2ludgQJYmFzZUVudHJ5CQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudAkAZAIFE2JvdWdodFRpY2tldHNBbW91bnQFFmFsbG93ZWRCdXlUaWNrZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUTa2V5VGlja2V0TGFzdE51bWJlcgkAZAIFFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIFFmFsbG93ZWRCdXlUaWNrZXRBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFDmtleVVzZXJUaWNrZXRzBRtuZXdVc2VyQm91Z2h0VGlja2V0c051bWJlcnMFA25pbAUVZnJlZXplQWRkaXRpb25hbEVudHJ5AwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUMa2V5VXNlclJlZklkCQDOCAIFCWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUMa2V5VXNlclJlZklkBQVyZWZJZAUDbmlsBQliYXNlRW50cnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUY29tbWl0QWNjZXNzTGlzdFNhbGUCC2xhdW5jaHBhZElkBXJlZklkCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABA0kdDAxNDg3OTE0OTU0CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFDSR0MDE0ODc5MTQ5NTQCXzEECnBtdEFzc2V0SWQIBQ0kdDAxNDg3OTE0OTU0Al8yBA0kdDAxNDk1OTE1MTA5CQEWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwEJAQV2YWx1ZQEJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlCdXlUb2tlbgQKYnV5QXNzZXRJZAgFDSR0MDE0OTU5MTUxMDkCXzEEDWJ1eUFzc2V0U3RySWQIBQ0kdDAxNDk1OTE1MTA5Al8yBAxidXlBc3NldE5hbWUIBQ0kdDAxNDk1OTE1MTA5Al8zBBBidXlBc3NldERlY2ltYWxzCAUNJHQwMTQ5NTkxNTEwOQJfNAQTdXNlclVzZG5Jbk1hcmtldGluZwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUga2V5VXNlckFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcAAAQPdXNkbkluTWFya2V0aW5nCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUca2V5QW1vdW50QnV5QXNzZXRJbk1hcmtldGluZwAABBFib3VnaHRBbGxvY2F0aW9ucwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUYa2V5VXNlckJvdWdodEFsbG9jYXRpb25zAAAECmNvbW1pc3Npb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUMa2V5Q29taXNzaW9uBAp0b2tlblByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEGtleVByaWNlUGVyVG9rZW4EE3Rva2Vuc1BlckFsbG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgQNJHQwMTU3NzgxNTkyMgkBFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFCmtleUFzc2V0SWQEB3Rva2VuSWQIBQ0kdDAxNTc3ODE1OTIyAl8xBA90b2tlblN0ckFzc2V0SWQIBQ0kdDAxNTc3ODE1OTIyAl8yBA50b2tlbkFzc2V0TmFtZQgFDSR0MDE1Nzc4MTU5MjICXzMEDXRva2VuRGVjaW1hbHMIBQ0kdDAxNTc3ODE1OTIyAl80BBxhbGxvY2F0aW9uUHJpY2VXaXRoQ29taXNzaW9uCQBrAwkAawMFCnRva2VuUHJpY2UFE3Rva2Vuc1BlckFsbG9jYXRpb24JAGwGAAoAAAUNdG9rZW5EZWNpbWFscwAAAAAFBERPV04JAGQCAGQFCmNvbW1pc3Npb24AZAQLc3RhcnRIZWlnaHQJAQV2YWx1ZQEJAJoIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQ5rZXlTdGFydEhlaWdodAQIZHVyYXRpb24JAQV2YWx1ZQEJAJoIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlEdXJhdGlvbgMJAQIhPQIFEWFjdGl2ZUxhdW5jaHBhZElkBQtsYXVuY2hwYWRJZAkAAgECN1RoZXJlIGlzIG5vIGFjdGl2ZSBsYXVuY2hwYWQgb3IgdGhpcyBsYXVuY2hwYWQgaXMgZW5kZWQDCQBmAgULc3RhcnRIZWlnaHQFBmhlaWdodAkAAgECHkxhdW5jaHBhZCBzYWxlIG5vdCBzdGFydGVkIHlldAMJAGYCBQZoZWlnaHQJAGQCBQtzdGFydEhlaWdodAUIZHVyYXRpb24JAAIBAhRMYXVuY2hwYWQgc2FsZSBlbmRlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQECIT0CBQpwbXRBc3NldElkBQpidXlBc3NldElkCQACAQkArAICCQCsAgICGE9uZSBhdHRhY2hlZCBwYXltZW50IGluIAUMYnV5QXNzZXROYW1lAgkgZXhwZWN0ZWQDCQBnAgURYm91Z2h0QWxsb2NhdGlvbnMFFG1heEFsbG9jYXRpb25zQW1vdW50CQACAQkArAICCQCsAgICEVlvdSBjYW4gYnV5IG9ubHkgCQCkAwEFFG1heEFsbG9jYXRpb25zQW1vdW50AgthbGxvY2F0aW9ucwMDCQECIT0CBRxhbGxvY2F0aW9uUHJpY2VXaXRoQ29taXNzaW9uBQlwbXRBbW91bnQJAQIhPQIJAGgCBRxhbGxvY2F0aW9uUHJpY2VXaXRoQ29taXNzaW9uAAIFCXBtdEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAjJXcm9uZyBwYXltZW50LiBZb3UgY2FuIGJ1eSAxIG9yIDIgYWxsb2NhdGlvbnMgZm9yIAkApAMBBRxhbGxvY2F0aW9uUHJpY2VXaXRoQ29taXNzaW9uBQxidXlBc3NldE5hbWUCDyBwZXIgYWxsb2NhdGlvbgQUYnV5QWxsb2NhdGlvbnNBbW91bnQJAGkCBQlwbXRBbW91bnQFHGFsbG9jYXRpb25QcmljZVdpdGhDb21pc3Npb24EA2ludgMJAAACBQpidXlBc3NldElkBQRVU0ROCQD8BwQFEnN0YWtpbmdVU0ROQWRkcmVzcwIMbG9ja05ldXRyaW5vBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCnBtdEFzc2V0SWQFCXBtdEFtb3VudAUDbmlsAAADCQAAAgUDaW52BQNpbnYECWJhc2VFbnRyeQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucwkAZAIFEWJvdWdodEFsbG9jYXRpb25zBRRidXlBbGxvY2F0aW9uc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nCQBkAgUTdXNlclVzZG5Jbk1hcmtldGluZwUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFHGtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcJAGQCBQ91c2RuSW5NYXJrZXRpbmcFCXBtdEFtb3VudAUDbmlsAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUMa2V5VXNlclJlZklkCQDOCAIFCWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUMa2V5VXNlclJlZklkBQVyZWZJZAUDbmlsBQliYXNlRW50cnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZY29tbWl0SGlnaENvbXBldGl0aW9uU2FsZQILbGF1bmNocGFkSWQFcmVmSWQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDE4MTgwMTgyNTUJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMTgxODAxODI1NQJfMQQKcG10QXNzZXRJZAgFDSR0MDE4MTgwMTgyNTUCXzIEDSR0MDE4MjYwMTg0MTAJARZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAQkBBXZhbHVlAQkAnQgCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFC2tleUJ1eVRva2VuBApidXlBc3NldElkCAUNJHQwMTgyNjAxODQxMAJfMQQNYnV5QXNzZXRTdHJJZAgFDSR0MDE4MjYwMTg0MTACXzIEDGJ1eUFzc2V0TmFtZQgFDSR0MDE4MjYwMTg0MTACXzMEEGJ1eUFzc2V0RGVjaW1hbHMIBQ0kdDAxODI2MDE4NDEwAl80BAtzdGFydEhlaWdodAkBBXZhbHVlAQkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFDmtleVN0YXJ0SGVpZ2h0BAhkdXJhdGlvbgkBBXZhbHVlAQkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFC2tleUR1cmF0aW9uBBVib3VnaHRIQ1RpY2tldHNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQAAAQTaGlnaENvbXBldGl0aW9uU2FsZQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFFmtleUhpZ2hDb21wZXRpdGlvblNhbGUHAwkBAiE9AgURYWN0aXZlTGF1bmNocGFkSWQFC2xhdW5jaHBhZElkCQACAQI3VGhlcmUgaXMgbm8gYWN0aXZlIGxhdW5jaHBhZCBvciB0aGlzIGxhdW5jaHBhZCBpcyBlbmRlZAMJAQEhAQUTaGlnaENvbXBldGl0aW9uU2FsZQkAAgECNFRoZXJlIGlzIG5vIGhpZ2ggY29tcGV0aXRpb24gc2FsZSBmb3IgdGhpcyBsYXVuY2hwYWQDCQBmAgULc3RhcnRIZWlnaHQFBmhlaWdodAkAAgECHkxhdW5jaHBhZCBzYWxlIG5vdCBzdGFydGVkIHlldAMJAGYCBQZoZWlnaHQJAGQCBQtzdGFydEhlaWdodAUIZHVyYXRpb24JAAIBAhRMYXVuY2hwYWQgc2FsZSBlbmRlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQECIT0CBQpwbXRBc3NldElkBQpidXlBc3NldElkCQACAQkArAICCQCsAgICGE9uZSBhdHRhY2hlZCBwYXltZW50IGluIAUMYnV5QXNzZXROYW1lAgkgZXhwZWN0ZWQECnRva2VuUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUQa2V5UHJpY2VQZXJUb2tlbgQPdG9rZW5zUGVyVGlja2V0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEmtleVRva2Vuc1BlclRpY2tldAQNJHQwMTk1ODMxOTcyNwkBFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFCmtleUFzc2V0SWQEB3Rva2VuSWQIBQ0kdDAxOTU4MzE5NzI3Al8xBA90b2tlblN0ckFzc2V0SWQIBQ0kdDAxOTU4MzE5NzI3Al8yBA50b2tlbkFzc2V0TmFtZQgFDSR0MDE5NTgzMTk3MjcCXzMEDXRva2VuRGVjaW1hbHMIBQ0kdDAxOTU4MzE5NzI3Al80BAt0aWNrZXRQcmljZQkAawMFD3Rva2Vuc1BlclRpY2tldAUKdG9rZW5QcmljZQkAbAYACgAABQ10b2tlbkRlY2ltYWxzAAAAAAUERE9XTgQTY29tbWlzc2lvblBlclRpY2tldAkAawMFC3RpY2tldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbgBkBA9idXlUaWNrZXRBbW91bnQJAGkCBQlwbXRBbW91bnQJAGQCBQt0aWNrZXRQcmljZQUTY29tbWlzc2lvblBlclRpY2tldAQVYnV5UHJpY2VXaXRoQ29taXNzaW9uCQBoAgUPYnV5VGlja2V0QW1vdW50CQBkAgULdGlja2V0UHJpY2UFE2NvbW1pc3Npb25QZXJUaWNrZXQEBmNoYW5nZQkAZQIFCXBtdEFtb3VudAUVYnV5UHJpY2VXaXRoQ29taXNzaW9uAwkAAAIFD2J1eVRpY2tldEFtb3VudAAACQACAQkArAICCQCsAgICDE5vdCBlbm91Z2h0IAUMYnV5QXNzZXROYW1lAg8gdG8gYnV5IHRpY2tldHMDCQECIT0CBQZjaGFuZ2UAAAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIWV3JvbmcgcGF5bWVudC4gVG8gYnV5IAkApAMBBQ9idXlUaWNrZXRBbW91bnQCGHRpY2tldHMgeW91IG5lZWQgdG8gcGF5IAkApAMBBRVidXlQcmljZVdpdGhDb21pc3Npb24FDGJ1eUFzc2V0TmFtZQQYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlVc2VySENUaWNrZXRzAgAEFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUVa2V5SENUaWNrZXRMYXN0TnVtYmVyBAtib3VnaHRSYW5nZQkArAICCQCsAgIJAKQDAQkAZAIFFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIAAQIBLQkApAMBCQBkAgUWbGFzdEJvdWdodFRpY2tldE51bWJlcgUPYnV5VGlja2V0QW1vdW50BBtuZXdVc2VyQm91Z2h0VGlja2V0c051bWJlcnMJAKwCAgUYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzAwkBAiE9AgUYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzAgAJAKwCAgIBLAULYm91Z2h0UmFuZ2UJAKwCAgIABQtib3VnaHRSYW5nZQQDaW52AwkAAAIFCmJ1eUFzc2V0SWQFBFVTRE4JAPwHBAUSc3Rha2luZ1VTRE5BZGRyZXNzAgxsb2NrTmV1dHJpbm8FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUJcG10QW1vdW50BQNuaWwAAAMJAAACBQNpbnYFA2ludgQJYmFzZUVudHJ5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUca2V5VXNlckhDQm91Z2h0VGlja2V0c0Ftb3VudAkAZAIFFWJvdWdodEhDVGlja2V0c0Ftb3VudAUPYnV5VGlja2V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFFWtleUhDVGlja2V0TGFzdE51bWJlcgkAZAIFFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIFD2J1eVRpY2tldEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUQa2V5VXNlckhDVGlja2V0cwUbbmV3VXNlckJvdWdodFRpY2tldHNOdW1iZXJzBQNuaWwDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBQxrZXlVc2VyUmVmSWQJAM4IAgUJYmFzZUVudHJ5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBQxrZXlVc2VyUmVmSWQFBXJlZklkBQNuaWwFCWJhc2VFbnRyeQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhmaW5hbGlzZQMLbGF1bmNocGFkSWQJdnJmSGVpZ2h0CnNlY3JldFdvcmQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkECXNhdmVkSGFzaAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQ1rZXlWZXJpZnlIYXNoBAhjYWxjSGFzaAkA2AQBCQD3AwEJAMsBAgkAmgMBBQl2cmZIZWlnaHQJAJsDAQUKc2VjcmV0V29yZAMJAQIhPQIFCGNhbGNIYXNoBQlzYXZlZEhhc2gJAAIBAhx2cmYgSGVpZ2h0IGhhc2ggbm90IG1hdGNoaW5nBA0kdDAyMjM0MDIyNDkwCQEWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwEJAQV2YWx1ZQEJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlCdXlUb2tlbgQKYnV5QXNzZXRJZAgFDSR0MDIyMzQwMjI0OTACXzEEDWJ1eUFzc2V0U3RySWQIBQ0kdDAyMjM0MDIyNDkwAl8yBAxidXlBc3NldE5hbWUIBQ0kdDAyMjM0MDIyNDkwAl8zBBBidXlBc3NldERlY2ltYWxzCAUNJHQwMjIzNDAyMjQ5MAJfNAQOcHJvamVjdEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUKa2V5QWRkcmVzcwQKY29tbWlzc2lvbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQxrZXlDb21pc3Npb24EDGNvbW1pc3Npb25IQwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRtrZXlIaWdoQ29tcGV0aXRpb25Db21pc3Npb24EEnRyYW5zZmVyZWRCdXlBc3NldAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFE2tleVRyYW5zZmVyQnV5QXNzZXQAAAQbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFGmtleVRvdGFsQW1vdW50QnV5QXNzZXRTb2xkBBZzd29wZmlIQ0J1eUFzc2V0QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQwAABBZzd29wZmlNZW1iZXJzQ29taXNzaW9uCQBrAwUbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50BQpjb21taXNzaW9uAGQEEXN3b3BmaUhDQ29taXNzaW9uCQBrAwUWc3dvcGZpSENCdXlBc3NldEFtb3VudAUMY29tbWlzc2lvbkhDAGQEHnRvdGFsQW1vdW50QnV5QXNzZXRJbk1hcmtldGluZwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBSVrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nRmluYWxpemVkBBJtYXJrZXRpbmdDb21pc3Npb24JAGsDBR50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcFCmNvbW1pc3Npb24AZAQNdW5zdGFrZUFtb3VudAkAZQIJAGQCCQBkAgkAZAIJAGQCCQBkAgUbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50BR50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcFFnN3b3BmaU1lbWJlcnNDb21pc3Npb24FEm1hcmtldGluZ0NvbWlzc2lvbgUWc3dvcGZpSENCdXlBc3NldEFtb3VudAURc3dvcGZpSENDb21pc3Npb24FEnRyYW5zZmVyZWRCdXlBc3NldAMJAGYCBRJ0cmFuc2ZlcmVkQnV5QXNzZXQJAGQCCQBkAgUbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50BR50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcFFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQJAAIBAihDYW4ndCB0cmFuc2ZlciBuZWdhdGl2ZSB2YWx1ZSB0byBwcm9qZWN0BANpbnYDCQAAAgUKYnV5QXNzZXRJZAUEVVNETgkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDnVubG9ja05ldXRyaW5vCQDMCAIFDXVuc3Rha2VBbW91bnQJAMwIAgkA2AQBBQRVU0ROBQNuaWwFA25pbAAAAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEWtleUZpbmFsaXNlSGVpZ2h0BQZoZWlnaHQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOcHJvamVjdEFkZHJlc3MJAGUCCQBkAgkAZAIFG3N3b3BmaU1lbWJlcnNCdXlBc3NldEFtb3VudAUWc3dvcGZpSENCdXlBc3NldEFtb3VudAUedG90YWxBbW91bnRCdXlBc3NldEluTWFya2V0aW5nBRJ0cmFuc2ZlcmVkQnV5QXNzZXQFCmJ1eUFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUQY29tbWlzc2lvbldhbGxldAkAZAIJAGQCBRZzd29wZmlNZW1iZXJzQ29taXNzaW9uBRJtYXJrZXRpbmdDb21pc3Npb24FEXN3b3BmaUhDQ29taXNzaW9uBQpidXlBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFY2xhaW0BC2xhdW5jaHBhZElkCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABA1ib3VnaHRUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudAAABA9ib3VnaHRIQ1RpY2tldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQAAAQRYm91Z2h0QWxsb2NhdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucwAABA91c2VyQ2xhaW1TdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFEmtleVVzZXJDbGFpbVN0YXR1cwcEDmZpbmFsaXplSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAURa2V5RmluYWxpc2VIZWlnaHQAAAMJAAACBQ5maW5hbGl6ZUhlaWdodAAACQACAQIxWW91IGNhbid0IGNsYWltIGJlY2F1c2UgcmVzdWx0cyBhcmUgbm90IGZpbmFsaXplZAMFD3VzZXJDbGFpbVN0YXR1cwkAAgECF1lvdSBhcmUgYWxyZWFkeSBjbGFpbWVkAwMDCQAAAgUNYm91Z2h0VGlja2V0cwAACQAAAgURYm91Z2h0QWxsb2NhdGlvbnMAAAcJAAACBQ9ib3VnaHRIQ1RpY2tldHMAAAcJAAIBAi5Zb3UgY2FuJ3QgY2xhaW0gYmVjYXVzZSB5b3UgZG9uJ3QgYnV5IGFueXRoaW5nBA0kdDAyNTU3NDI1NzUxCQEWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlCdXlUb2tlbgkA2AQBBQRVU0ROBApidXlBc3NldElkCAUNJHQwMjU1NzQyNTc1MQJfMQQNYnV5QXNzZXRTdHJJZAgFDSR0MDI1NTc0MjU3NTECXzIEDGJ1eUFzc2V0TmFtZQgFDSR0MDI1NTc0MjU3NTECXzMEEGJ1eUFzc2V0RGVjaW1hbHMIBQ0kdDAyNTU3NDI1NzUxAl80BA13b25uZWRUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRprZXlVc2VyV2lubmVkVGlja2V0c0Ftb3VudAAABA93b25uZWRIQ1RpY2tldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFKWtleVVzZXJXaW5uZWRIaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50AAAEFGF3YWlsYWJsZUFsbG9jYXRpb25zCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRtrZXlVc2VyQXZhaWxhYmxlQWxsb2NhdGlvbnMAAAQKY29tbWlzc2lvbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQxrZXlDb21pc3Npb24EDGNvbW1pc3Npb25IQwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbgAABBJhbGxvd2VkQWxsb2NhdGlvbnMJAJcDAQkAzAgCBRFib3VnaHRBbGxvY2F0aW9ucwkAzAgCBRRhd2FpbGFibGVBbGxvY2F0aW9ucwUDbmlsBAp0b2tlblByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEGtleVByaWNlUGVyVG9rZW4ED3Rva2Vuc1BlclRpY2tldAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRJrZXlUb2tlbnNQZXJUaWNrZXQEDSR0MDI2NjY3MjY4MTEJARZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQprZXlBc3NldElkBAd0b2tlbklkCAUNJHQwMjY2NjcyNjgxMQJfMQQPdG9rZW5TdHJBc3NldElkCAUNJHQwMjY2NjcyNjgxMQJfMgQOdG9rZW5Bc3NldE5hbWUIBQ0kdDAyNjY2NzI2ODExAl8zBA10b2tlbkRlY2ltYWxzCAUNJHQwMjY2NjcyNjgxMQJfNAQLdGlja2V0UHJpY2UJAGsDBQ90b2tlbnNQZXJUaWNrZXQFCnRva2VuUHJpY2UJAGwGAAoAAAUNdG9rZW5EZWNpbWFscwAAAAAFBERPV04EE3Rva2Vuc1BlckFsbG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgQUdHJhbnNmZXJUb2tlbnNBbW91bnQJAGQCCQBkAgkAaAIFDXdvbm5lZFRpY2tldHMFD3Rva2Vuc1BlclRpY2tldAkAaAIFEmFsbG93ZWRBbGxvY2F0aW9ucwUTdG9rZW5zUGVyQWxsb2NhdGlvbgkAaAIFD3dvbm5lZEhDVGlja2V0cwUPdG9rZW5zUGVyVGlja2V0BBtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMJAGgCCQBlAgURYm91Z2h0QWxsb2NhdGlvbnMFEmFsbG93ZWRBbGxvY2F0aW9ucwUTdG9rZW5zUGVyQWxsb2NhdGlvbgQWYnV5QXNzZXRGb3JBbGxvY2F0aW9ucwkAawMJAGsDBRtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMFCnRva2VuUHJpY2UJAGwGAAoAAAUNdG9rZW5EZWNpbWFscwAAAAAFBERPV04JAGQCAGQFCmNvbW1pc3Npb24AZAQaYnV5QXNzZXRGb3JVbndvbm5lZFRpY2tldHMJAGsDCQBoAgkAZQIFDWJvdWdodFRpY2tldHMFDXdvbm5lZFRpY2tldHMFC3RpY2tldFByaWNlCQBkAgBkBQpjb21taXNzaW9uAGQEHGJ1eUFzc2V0Rm9ySENVbndvbm5lZFRpY2tldHMJAGsDCQBoAgkAZQIFD2JvdWdodEhDVGlja2V0cwUPd29ubmVkSENUaWNrZXRzBQt0aWNrZXRQcmljZQkAZAIAZAUMY29tbWlzc2lvbkhDAGQED2NsYWltZWRCdXlUb2tlbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUXa2V5VXNlckNsYWltZWRCdXlUb2tlbnMAAAMDAwkAZgIAAAUWYnV5QXNzZXRGb3JBbGxvY2F0aW9ucwYJAGYCAAAFGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzBgkAZgIAAAUcYnV5QXNzZXRGb3JIQ1Vud29ubmVkVGlja2V0cwkAAgECUkVycm9yIHdpdGggYWxsb3dlZCBhbGxvY2F0aW9uIHBhcmFtIG9yIHdvbm5lZCB0aWNrZXRzIHBhcmFtIHBsZWFzZSBjb250YWN0IHN1cHBvcnQEFnJldHVybmVkQnV5QXNzZXRBbW91bnQJAGUCCQBkAgkAZAIFGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzBRxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzBRZidXlBc3NldEZvckFsbG9jYXRpb25zBQ9jbGFpbWVkQnV5VG9rZW4EEHRyYW5zZmVyQnV5QXNzZXQDCQBmAgUWcmV0dXJuZWRCdXlBc3NldEFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUWcmV0dXJuZWRCdXlBc3NldEFtb3VudAUKYnV5QXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFF2tleVVzZXJDbGFpbWVkQnV5VG9rZW5zBRZyZXR1cm5lZEJ1eUFzc2V0QW1vdW50BQNuaWwFA25pbAQDaW52AwMJAGYCBRZyZXR1cm5lZEJ1eUFzc2V0QW1vdW50AAAJAAACBQpidXlBc3NldElkBQRVU0ROBwkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDnVubG9ja05ldXRyaW5vCQDMCAIFFnJldHVybmVkQnV5QXNzZXRBbW91bnQJAMwIAgkA2AQBBQRVU0ROBQNuaWwFA25pbAAAAwkAAAIFA2ludgUDaW52BA1jbGFpbWVkUGFyYW1zCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQ5rZXlDbGFpbVBhcmFtcwIIY2xhaW1BbGwCASwDCQAAAgkAkQMCBQ1jbGFpbWVkUGFyYW1zAAACCGNsYWltQWxsBA50cmFuc2ZlclRva2VucwMJAGYCBRR0cmFuc2ZlclRva2Vuc0Ftb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUUdHJhbnNmZXJUb2tlbnNBbW91bnQFB3Rva2VuSWQFA25pbAUDbmlsCQDOCAIJAM4IAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFEmtleVVzZXJDbGFpbVN0YXR1cwYJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRRrZXlVc2VyQ2xhaW1lZFRva2VucwUUdHJhbnNmZXJUb2tlbnNBbW91bnQFA25pbAUOdHJhbnNmZXJUb2tlbnMFEHRyYW5zZmVyQnV5QXNzZXQDCQAAAgkAkQMCBQ1jbGFpbWVkUGFyYW1zAAACC2NsYWltUGVyaW9kBA1jbGFpbWVkVG9rZW5zCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRRrZXlVc2VyQ2xhaW1lZFRva2VucwAABAx1bmxvY2tQZXJpb2QJAQV2YWx1ZQEJALYJAQkAkQMCBQ1jbGFpbWVkUGFyYW1zAAIEC2Jsb2NrSGVpZ2h0CQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDWNsYWltZWRQYXJhbXMAAwUOZmluYWxpemVIZWlnaHQEDHVubG9ja0hlaWdodAkAZAIFDHVubG9ja1BlcmlvZAULYmxvY2tIZWlnaHQEEmFsbG93ZWRTdGFydEFtb3VudAkAawMFFHRyYW5zZmVyVG9rZW5zQW1vdW50CQEFdmFsdWUBCQC2CQEJAJEDAgUNY2xhaW1lZFBhcmFtcwABAGQEE2FsbG93ZWRUb2tlbnNBbW91bnQJAGQCBRJhbGxvd2VkU3RhcnRBbW91bnQDCQBmAgUGaGVpZ2h0BQtibG9ja0hlaWdodAkAZQIJAGsDCQBlAgUUdHJhbnNmZXJUb2tlbnNBbW91bnQFEmFsbG93ZWRTdGFydEFtb3VudAkAZQIJAJcDAQkAzAgCBQZoZWlnaHQJAMwIAgUMdW5sb2NrSGVpZ2h0BQNuaWwFC2Jsb2NrSGVpZ2h0BQx1bmxvY2tQZXJpb2QFDWNsYWltZWRUb2tlbnMJAGUCAAAFDWNsYWltZWRUb2tlbnMEEGNsYWltU3RhdHVzRW50cnkDCQBnAgUUdHJhbnNmZXJUb2tlbnNBbW91bnQJAGQCBQ1jbGFpbWVkVG9rZW5zBRNhbGxvd2VkVG9rZW5zQW1vdW50CQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUSa2V5VXNlckNsYWltU3RhdHVzBgUDbmlsBQNuaWwDAwkAZgIFE2FsbG93ZWRUb2tlbnNBbW91bnQAAAYJAGYCBRZyZXR1cm5lZEJ1eUFzc2V0QW1vdW50AAAEDnRyYW5zZmVyVG9rZW5zAwkAZgIFE2FsbG93ZWRUb2tlbnNBbW91bnQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFFGtleVVzZXJDbGFpbWVkVG9rZW5zCQBkAgUNY2xhaW1lZFRva2VucwUTYWxsb3dlZFRva2Vuc0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFE2FsbG93ZWRUb2tlbnNBbW91bnQFB3Rva2VuSWQFA25pbAUDbmlsCQDOCAIFEHRyYW5zZmVyQnV5QXNzZXQFDnRyYW5zZmVyVG9rZW5zCQACAQIQTm90aGluZyB0byBjbGFpbQkAAgECFlVua25vd24gY2xhaW0gZnVuY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQY2xhaW1GcmVlemVUb2tlbgELbGF1bmNocGFkSWQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFGGtleUZyZWV6ZUFkZGl0aW9uYWxUb2tlbgcDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAURa2V5RmluYWxpc2VIZWlnaHQJAAIBAjFZb3UgY2FuJ3QgY2xhaW0gYmVjYXVzZSByZXN1bHRzIGFyZSBub3QgZmluYWxpemVkAwkBASEBBRVmcmVlemVBZGRpdGlvbmFsVG9rZW4JAAIBAjlUaGVyZSBhcmUgbm8gYWRkaXRpb25hbCB0b2tlbiBmcmVlemluZyBmb3IgdGhpcyBsYXVuY2hwYWQEB3Rva2VuSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlGcmVlemVUb2tlbklkBBF1c2VyVG9rZW5zRnJlZXplZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUSa2V5VXNlckZyZWV6ZVRva2VuAAAEC3N0YXJ0SGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUOa2V5U3RhcnRIZWlnaHQAAAQIZHVyYXRpb24JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlEdXJhdGlvbgAABBNmcmVlemVUb2tlbkR1cmF0aW9uCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFFmtleUZyZWV6ZVRva2VuRHVyYXRpb24EDmJsb2NrRW5kSGVpZ2h0CQBkAgkAZAIFC3N0YXJ0SGVpZ2h0BQhkdXJhdGlvbgUTZnJlZXplVG9rZW5EdXJhdGlvbgMJAAACBRF1c2VyVG9rZW5zRnJlZXplZAAACQACAQI4WW91IGFyZSBhbHJlYWR5IGNsYWltZWQgeW91ciB0b2tlbnMgb3Igbm90IHBhaWQgYW55dGhpbmcDCQBmAgUOYmxvY2tFbmRIZWlnaHQFBmhlaWdodAkAAgEJAKwCAgIZWW91ciB0b2tlbnMgZnJlZXplZCB0ZWVsIAkApAMBBQ5ibG9ja0VuZEhlaWdodAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFEXVzZXJUb2tlbnNGcmVlemVkBQd0b2tlbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUSa2V5VXNlckZyZWV6ZVRva2VuAAAFA25pbAFpARB0cmFuc2ZlckJ1eUFzc2V0AgtsYXVuY2hwYWRJZAZhbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDnByb2plY3RBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFCmtleUFkZHJlc3MEDSR0MDMyOTc2MzMxMjYJARZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAQkBBXZhbHVlAQkAnQgCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFC2tleUJ1eVRva2VuBApidXlBc3NldElkCAUNJHQwMzI5NzYzMzEyNgJfMQQNYnV5QXNzZXRTdHJJZAgFDSR0MDMyOTc2MzMxMjYCXzIEDGJ1eUFzc2V0TmFtZQgFDSR0MDMyOTc2MzMxMjYCXzMEEGJ1eUFzc2V0RGVjaW1hbHMIBQ0kdDAzMjk3NjMzMTI2Al80BBJ0cmFuc2ZlcmVkQnV5QXNzZXQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRNrZXlUcmFuc2ZlckJ1eUFzc2V0AAAEA2ludgMDCQBmAgUGYW1vdW50AAAJAAACBQpidXlBc3NldElkBQRVU0ROBwkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDnVubG9ja05ldXRyaW5vCQDMCAIFBmFtb3VudAkAzAgCCQDYBAEFBFVTRE4FA25pbAUDbmlsAAADCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUTa2V5VHJhbnNmZXJCdXlBc3NldAkAZAIFEnRyYW5zZmVyZWRCdXlBc3NldAUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnByb2plY3RBZGRyZXNzBQZhbW91bnQFCmJ1eUFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEFBmFjdGl2ZQkAAgECFURBcHAgYWxyZWFkeSBpbmFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUJa2V5QWN0aXZlBwUDbmlsAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMFBmFjdGl2ZQkAAgECE0RBcHAgYWxyZWFkeSBhY3RpdmUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCWtleUFjdGl2ZQYFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUSYWRtaW5QdWJLZXlTdGFraW5nBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAg9EYXRhVHJhbnNhY3Rpb24EA2R0eAUHJG1hdGNoMAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlBSFrZXlMYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMHBQ1zaWduZWRCeUFkbWluBwUTbXVsdGlTaWduZWRCeUFkbWluc0Ught8=", "height": 3397833, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5viUKyPzTSCPq7zgaEdT6xApWdBxhpBEhdXSYRz8UtkV Next: 9fGTo7f2ptP9h1GBhiaZStmkBykKAQxwmpbmtiFDZpRU Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyActive = "active"
5+
6+let kActiveGlob = "active_all_contracts"
57
68 let keyAdminPubKey1 = "admin_pub_1"
79
4749
4850 let keyTicketLastNumber = "_ticket_last_number"
4951
50-let keyGovernanceStaked = "_SWOP_amount"
52+let keyGovernanceStaked = "_GSwop_amount"
5153
5254 let keyUserRefId = "_ref_id"
5355
156158 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
157159
158160
161+func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
162+
163+
159164 let active = valueOrElse(getBoolean(this, keyActive), true)
160165
161-func isActive () = if (active)
166+let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
167+
168+func isActive () = if (if (active)
169+ then activeGlob
170+ else false)
162171 then unit
163172 else throw("DApp is inactive at this moment")
164173
202211 else {
203212 let launchpadId = getLaunchpadNextId()
204213 let launchpadIdStr = toString(launchpadId)
205- let $t063786453 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
206- let pmtAmount = $t063786453._1
207- let pmtAssetId = $t063786453._2
208- let $t064626535 = getAssetInfo(pmtAssetId)
209- let pmtStrAssetId = $t064626535._1
210- let pmtAssetName = $t064626535._2
211- let pmtDecimals = $t064626535._3
214+ let $t065006575 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
215+ let pmtAmount = $t065006575._1
216+ let pmtAssetId = $t065006575._2
217+ let $t065846657 = getAssetInfo(pmtAssetId)
218+ let pmtStrAssetId = $t065846657._1
219+ let pmtAssetName = $t065846657._2
220+ let pmtDecimals = $t065846657._3
212221 let freezeAdditionalEntry = if (freezeAdditionalToken)
213222 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
214223 else nil
219228
220229 @Callable(i)
221230 func commitSwopfiSale (launchpadId,refId) = valueOrElse(isActive(), {
222- let $t091419216 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
223- let pmtAmount = $t091419216._1
224- let pmtAssetId = $t091419216._2
225- let $t092219371 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
226- let buyAssetId = $t092219371._1
227- let buyAssetStrId = $t092219371._2
228- let buyAssetName = $t092219371._3
229- let buyAssetDecimals = $t092219371._4
231+ let $t092639338 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
232+ let pmtAmount = $t092639338._1
233+ let pmtAssetId = $t092639338._2
234+ let $t093439493 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
235+ let buyAssetId = $t093439493._1
236+ let buyAssetStrId = $t093439493._2
237+ let buyAssetName = $t093439493._3
238+ let buyAssetDecimals = $t093439493._4
230239 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
231240 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
232241 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
262271 else {
263272 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
264273 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
265- let $t01118311327 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
266- let tokenId = $t01118311327._1
267- let tokenStrAssetId = $t01118311327._2
268- let tokenAssetName = $t01118311327._3
269- let tokenDecimals = $t01118311327._4
274+ let $t01130511449 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
275+ let tokenId = $t01130511449._1
276+ let tokenStrAssetId = $t01130511449._2
277+ let tokenAssetName = $t01130511449._3
278+ let tokenDecimals = $t01130511449._4
270279 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
271280 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
272281 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
282291 then {
283292 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
284293 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
285- let $t01249112578 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
286- let pmtAmountFreeze = $t01249112578._1
287- let pmtAssetIdFreeze = $t01249112578._2
288- let $t01259512686 = getAssetInfo(pmtAssetId)
289- let pmtFreezeStrAssetId = $t01259512686._1
290- let pmtFreezeAssetName = $t01259512686._2
291- let pmtFreezeDecimals = $t01259512686._3
294+ let $t01261312700 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
295+ let pmtAmountFreeze = $t01261312700._1
296+ let pmtAssetIdFreeze = $t01261312700._2
297+ let $t01271712808 = getAssetInfo(pmtAssetId)
298+ let pmtFreezeStrAssetId = $t01271712808._1
299+ let pmtFreezeAssetName = $t01271712808._2
300+ let pmtFreezeDecimals = $t01271712808._3
292301 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
293302 if (if ((pmtFreezeStrAssetId != freezeTokenId))
294303 then true
322331
323332 @Callable(i)
324333 func commitAccessListSale (launchpadId,refId) = valueOrElse(isActive(), {
325- let $t01475714832 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
326- let pmtAmount = $t01475714832._1
327- let pmtAssetId = $t01475714832._2
328- let $t01483714987 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
329- let buyAssetId = $t01483714987._1
330- let buyAssetStrId = $t01483714987._2
331- let buyAssetName = $t01483714987._3
332- let buyAssetDecimals = $t01483714987._4
334+ let $t01487914954 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
335+ let pmtAmount = $t01487914954._1
336+ let pmtAssetId = $t01487914954._2
337+ let $t01495915109 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
338+ let buyAssetId = $t01495915109._1
339+ let buyAssetStrId = $t01495915109._2
340+ let buyAssetName = $t01495915109._3
341+ let buyAssetDecimals = $t01495915109._4
333342 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
334343 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
335344 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
336345 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
337346 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
338347 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
339- let $t01565615800 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
340- let tokenId = $t01565615800._1
341- let tokenStrAssetId = $t01565615800._2
342- let tokenAssetName = $t01565615800._3
343- let tokenDecimals = $t01565615800._4
348+ let $t01577815922 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
349+ let tokenId = $t01577815922._1
350+ let tokenStrAssetId = $t01577815922._2
351+ let tokenAssetName = $t01577815922._3
352+ let tokenDecimals = $t01577815922._4
344353 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
345354 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
346355 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
380389
381390 @Callable(i)
382391 func commitHighCompetitionSale (launchpadId,refId) = valueOrElse(isActive(), {
383- let $t01805818133 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
384- let pmtAmount = $t01805818133._1
385- let pmtAssetId = $t01805818133._2
386- let $t01813818288 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
387- let buyAssetId = $t01813818288._1
388- let buyAssetStrId = $t01813818288._2
389- let buyAssetName = $t01813818288._3
390- let buyAssetDecimals = $t01813818288._4
392+ let $t01818018255 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
393+ let pmtAmount = $t01818018255._1
394+ let pmtAssetId = $t01818018255._2
395+ let $t01826018410 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
396+ let buyAssetId = $t01826018410._1
397+ let buyAssetStrId = $t01826018410._2
398+ let buyAssetName = $t01826018410._3
399+ let buyAssetDecimals = $t01826018410._4
391400 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
392401 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
393402 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
407416 else {
408417 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
409418 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
410- let $t01946119605 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
411- let tokenId = $t01946119605._1
412- let tokenStrAssetId = $t01946119605._2
413- let tokenAssetName = $t01946119605._3
414- let tokenDecimals = $t01946119605._4
419+ let $t01958319727 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
420+ let tokenId = $t01958319727._1
421+ let tokenStrAssetId = $t01958319727._2
422+ let tokenAssetName = $t01958319727._3
423+ let tokenDecimals = $t01958319727._4
415424 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
416425 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
417426 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
452461 if ((calcHash != savedHash))
453462 then throw("vrf Height hash not matching")
454463 else {
455- let $t02221822368 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
456- let buyAssetId = $t02221822368._1
457- let buyAssetStrId = $t02221822368._2
458- let buyAssetName = $t02221822368._3
459- let buyAssetDecimals = $t02221822368._4
464+ let $t02234022490 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
465+ let buyAssetId = $t02234022490._1
466+ let buyAssetStrId = $t02234022490._2
467+ let buyAssetName = $t02234022490._3
468+ let buyAssetDecimals = $t02234022490._4
460469 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
461470 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
462471 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
501510 else false)
502511 then throw("You can't claim because you don't buy anything")
503512 else {
504- let $t02545225629 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
505- let buyAssetId = $t02545225629._1
506- let buyAssetStrId = $t02545225629._2
507- let buyAssetName = $t02545225629._3
508- let buyAssetDecimals = $t02545225629._4
513+ let $t02557425751 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
514+ let buyAssetId = $t02557425751._1
515+ let buyAssetStrId = $t02557425751._2
516+ let buyAssetName = $t02557425751._3
517+ let buyAssetDecimals = $t02557425751._4
509518 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
510519 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
511520 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
514523 let allowedAllocations = min([boughtAllocations, awailableAllocations])
515524 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
516525 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
517- let $t02654526689 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
518- let tokenId = $t02654526689._1
519- let tokenStrAssetId = $t02654526689._2
520- let tokenAssetName = $t02654526689._3
521- let tokenDecimals = $t02654526689._4
526+ let $t02666726811 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
527+ let tokenId = $t02666726811._1
528+ let tokenStrAssetId = $t02666726811._2
529+ let tokenAssetName = $t02666726811._3
530+ let tokenDecimals = $t02666726811._4
522531 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
523532 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
524533 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
613622 @Callable(i)
614623 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
615624 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
616- let $t03285433004 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
617- let buyAssetId = $t03285433004._1
618- let buyAssetStrId = $t03285433004._2
619- let buyAssetName = $t03285433004._3
620- let buyAssetDecimals = $t03285433004._4
625+ let $t03297633126 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626+ let buyAssetId = $t03297633126._1
627+ let buyAssetStrId = $t03297633126._2
628+ let buyAssetName = $t03297633126._3
629+ let buyAssetDecimals = $t03297633126._4
621630 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
622631 let inv = if (if ((amount > 0))
623632 then (buyAssetId == USDN)
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyActive = "active"
5+
6+let kActiveGlob = "active_all_contracts"
57
68 let keyAdminPubKey1 = "admin_pub_1"
79
810 let keyAdminPubKey2 = "admin_pub_2"
911
1012 let keyAdminPubKey3 = "admin_pub_3"
1113
1214 let keyLaunchpadDataTransactionStatus = "launchpad_data_transaction_status"
1315
1416 let keyLaunchpadNextId = "launchpad_next_id"
1517
1618 let keyLaunchpadActiveId = "launchpad_active_id"
1719
1820 let keyInitCaller = "init_caller"
1921
2022 let keyAddress = "_address"
2123
2224 let keyInitHeight = "_init_height"
2325
2426 let keyStartHeight = "_start_height"
2527
2628 let keyFinaliseHeight = "_finalise_height"
2729
2830 let keyComission = "_comission"
2931
3032 let keyAssetId = "_asset_id"
3133
3234 let keyTotalTokenAmount = "_total_token_amount"
3335
3436 let keyTotalAmountBuyAssetSold = "_total_buy_asset_sold"
3537
3638 let keyTokensPerTicket = "_tokens_per_ticket"
3739
3840 let keyPricePerToken = "_price_per_token"
3941
4042 let keySwopPerTicket = "_swop_per_ticket"
4143
4244 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4345
4446 let keyCampaignTokensAmount = "_tokens_access_list"
4547
4648 let keyTokensPerAllocation = "_tokens_per_allocation"
4749
4850 let keyTicketLastNumber = "_ticket_last_number"
4951
50-let keyGovernanceStaked = "_SWOP_amount"
52+let keyGovernanceStaked = "_GSwop_amount"
5153
5254 let keyUserRefId = "_ref_id"
5355
5456 let keyVerifyHash = "_verify_hash"
5557
5658 let keyDuration = "_duration"
5759
5860 let keyAmountBuyAssetInMarketing = "_total_purchased_buy_asset_in_marketing"
5961
6062 let keyAmountBuyAssetInMarketingFinalized = "_total_purchased_buy_asset_in_marketing_finalized"
6163
6264 let keyTransferBuyAsset = "_transfer_buy_asset"
6365
6466 let keyFreezSwopDuration = "_freeze_swop_duration"
6567
6668 let keyFreezeAdditionalToken = "_freeze_additional_token"
6769
6870 let keyFreezeTokenId = "_freeze_token_id"
6971
7072 let keyFreezeTokenDuration = "_freeze_token_duration"
7173
7274 let keyFreezeTokenPerTicket = "_freeze_token_per_ticket"
7375
7476 let keyBuyToken = "_buy_token"
7577
7678 let keyClaimParams = "_claim_params"
7779
7880 let keyHighCompetitionComission = "_high_competition_comission"
7981
8082 let keyHighCompetitionSale = "_high_competition_sale"
8183
8284 let keyHCTicketLastNumber = "_high_competition_ticket_last_number"
8385
8486 let keyHighCompetitionAmount = "_tickets_high_competition"
8587
8688 let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
8789
8890 let keyUserClaimedTokens = "_claimed_tokens"
8991
9092 let keyUserClaimedBuyTokens = "_claimed_buy_tokens"
9193
9294 let keyUserBoughtTicketsAmount = "_bought_tickets"
9395
9496 let keyUserTickets = "_tickets_number"
9597
9698 let keyUserHCTickets = "_tickets_number_high_competition"
9799
98100 let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
99101
100102 let keyUserAvailableAllocations = "_available_purchase_marketing"
101103
102104 let keyUserAmountBuyAssetInMarketing = "_purchased_buy_asset_in_marketing"
103105
104106 let keyUserBoughtAllocations = "_bought_allocations"
105107
106108 let keyUserClaimStatus = "_claim_status"
107109
108110 let keyUserWinnedTicketsAmount = "_tickets_result"
109111
110112 let keyUserWinnedHighCompetitionTicketsAmount = "_tickets_result_high_competition"
111113
112114 let keyUserFreezeToken = "_freeze_token_amount"
113115
114116 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
115117
116118 let governance = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
117119
118120 let commissionWallet = Address(base58'3PGYafJ2GuqPckmZNywet8moiPnBHz51Xdg')
119121
120122 let stakingUSDNAddress = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
121123
122124 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
123125
124126 let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
125127
126128 let maxAllocationsAmount = 2
127129
128130 let activeLaunchpadId = valueOrElse(getIntegerValue(this, keyLaunchpadActiveId), -1)
129131
130132 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
131133 case string: String =>
132134 fromBase58String(string)
133135 case nothing =>
134136 throw("Admin public key is empty")
135137 }
136138
137139
138140 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
139141
140142 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
141143
142144 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
143145
144146 func getAssetInfo (assetId) = match assetId {
145147 case id: ByteVector =>
146148 let stringId = toBase58String(id)
147149 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
148150 $Tuple3(stringId, info.name, info.decimals)
149151 case waves: Unit =>
150152 $Tuple3("WAVES", "WAVES", 8)
151153 case _ =>
152154 throw("Match error")
153155 }
154156
155157
156158 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
157159
158160
161+func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
162+
163+
159164 let active = valueOrElse(getBoolean(this, keyActive), true)
160165
161-func isActive () = if (active)
166+let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
167+
168+func isActive () = if (if (active)
169+ then activeGlob
170+ else false)
162171 then unit
163172 else throw("DApp is inactive at this moment")
164173
165174
166175 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
167176 then unit
168177 else throw("Only admin can call this function")
169178
170179
171180 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
172181 then $Tuple4(unit, "WAVES", "WAVES", 8)
173182 else {
174183 let stringId = assetStr
175184 let id = fromBase58String(assetStr)
176185 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
177186 $Tuple4(id, stringId, info.name, info.decimals)
178187 }
179188
180189
181190 @Callable(i)
182191 func hashingRandom (launchpadId,hash) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]))
183192
184193
185194
186195 @Callable(i)
187196 func initCaller (address) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry(keyInitCaller, address)]))
188197
189198
190199
191200 @Callable(i)
192201 func init (projectAddress,startHeight,duration,buyToken,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket,swopFreezeDuration,claimParams,HighCompetitionSale,highCompetitionComission,highCompetitionTicketsAmount,freezeAdditionalToken,freezeParams) = valueOrElse(isActive(), if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
193202 then throw("Only project admin can call init function")
194203 else if ((size(i.payments) != 1))
195204 then throw("One attached payment expected")
196205 else if ((height > startHeight))
197206 then throw("Start height must be greater than blockchain height")
198207 else if (if (freezeAdditionalToken)
199208 then (size(freezeParams) != 3)
200209 else false)
201210 then throw("Freeze params list must have 3 items")
202211 else {
203212 let launchpadId = getLaunchpadNextId()
204213 let launchpadIdStr = toString(launchpadId)
205- let $t063786453 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
206- let pmtAmount = $t063786453._1
207- let pmtAssetId = $t063786453._2
208- let $t064626535 = getAssetInfo(pmtAssetId)
209- let pmtStrAssetId = $t064626535._1
210- let pmtAssetName = $t064626535._2
211- let pmtDecimals = $t064626535._3
214+ let $t065006575 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
215+ let pmtAmount = $t065006575._1
216+ let pmtAssetId = $t065006575._2
217+ let $t065846657 = getAssetInfo(pmtAssetId)
218+ let pmtStrAssetId = $t065846657._1
219+ let pmtAssetName = $t065846657._2
220+ let pmtDecimals = $t065846657._3
212221 let freezeAdditionalEntry = if (freezeAdditionalToken)
213222 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
214223 else nil
215224 ([IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), duration), StringEntry((launchpadIdStr + keyBuyToken), buyToken), IntegerEntry((launchpadIdStr + keyFreezSwopDuration), swopFreezeDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyHCTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry((launchpadIdStr + keyHighCompetitionComission), highCompetitionComission), IntegerEntry((launchpadIdStr + keyHighCompetitionAmount), highCompetitionTicketsAmount), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
216225 })
217226
218227
219228
220229 @Callable(i)
221230 func commitSwopfiSale (launchpadId,refId) = valueOrElse(isActive(), {
222- let $t091419216 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
223- let pmtAmount = $t091419216._1
224- let pmtAssetId = $t091419216._2
225- let $t092219371 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
226- let buyAssetId = $t092219371._1
227- let buyAssetStrId = $t092219371._2
228- let buyAssetName = $t092219371._3
229- let buyAssetDecimals = $t092219371._4
231+ let $t092639338 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
232+ let pmtAmount = $t092639338._1
233+ let pmtAssetId = $t092639338._2
234+ let $t093439493 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
235+ let buyAssetId = $t093439493._1
236+ let buyAssetStrId = $t093439493._2
237+ let buyAssetName = $t093439493._3
238+ let buyAssetDecimals = $t093439493._4
230239 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
231240 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
232241 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
233242 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
234243 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
235244 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
236245 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
237246 if ((activeLaunchpadId != launchpadId))
238247 then throw("There is no active launchpad or this launchpad is ended")
239248 else if ((startHeight > height))
240249 then throw("Launchpad sale not started yet")
241250 else if ((height > (startHeight + duration)))
242251 then throw("Launchpad sale ended")
243252 else if (if (!(freezeAdditionalToken))
244253 then if ((size(i.payments) != 1))
245254 then true
246255 else (pmtAssetId != buyAssetId)
247256 else false)
248257 then throw((("One attached payment in " + buyAssetName) + " expected"))
249258 else if (if (freezeAdditionalToken)
250259 then if ((size(i.payments) != 2))
251260 then true
252261 else (pmtAssetId != buyAssetId)
253262 else false)
254263 then {
255264 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
256265 throw(((("Two attached payments expected: First in " + buyAssetName) + ", second in ") + freezeTokenId))
257266 }
258267 else if (if ((0 >= allowedTicketsAmountAll))
259268 then true
260269 else (0 >= allowedTicketsAmount))
261270 then throw("Not enought SWOP in staking to buy tickets")
262271 else {
263272 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
264273 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
265- let $t01118311327 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
266- let tokenId = $t01118311327._1
267- let tokenStrAssetId = $t01118311327._2
268- let tokenAssetName = $t01118311327._3
269- let tokenDecimals = $t01118311327._4
274+ let $t01130511449 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
275+ let tokenId = $t01130511449._1
276+ let tokenStrAssetId = $t01130511449._2
277+ let tokenAssetName = $t01130511449._3
278+ let tokenDecimals = $t01130511449._4
270279 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
271280 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
272281 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
273282 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
274283 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
275284 let change = (pmtAmount - allowedBuyPriceWithComission)
276285 if ((buyTicketAmount == 0))
277286 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
278287 else if ((change != 0))
279288 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + buyAssetName))
280289 else {
281290 let freezeAdditionalEntry = if (freezeAdditionalToken)
282291 then {
283292 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
284293 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
285- let $t01249112578 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
286- let pmtAmountFreeze = $t01249112578._1
287- let pmtAssetIdFreeze = $t01249112578._2
288- let $t01259512686 = getAssetInfo(pmtAssetId)
289- let pmtFreezeStrAssetId = $t01259512686._1
290- let pmtFreezeAssetName = $t01259512686._2
291- let pmtFreezeDecimals = $t01259512686._3
294+ let $t01261312700 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
295+ let pmtAmountFreeze = $t01261312700._1
296+ let pmtAssetIdFreeze = $t01261312700._2
297+ let $t01271712808 = getAssetInfo(pmtAssetId)
298+ let pmtFreezeStrAssetId = $t01271712808._1
299+ let pmtFreezeAssetName = $t01271712808._2
300+ let pmtFreezeDecimals = $t01271712808._3
292301 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
293302 if (if ((pmtFreezeStrAssetId != freezeTokenId))
294303 then true
295304 else (needFreezeTokens != pmtAmountFreeze))
296305 then throw((((("You need to add " + toString(needFreezeTokens)) + " ") + pmtFreezeAssetName) + " as a second payment"))
297306 else [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), pmtAmountFreeze)]
298307 }
299308 else nil
300309 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
301310 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
302311 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
303312 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
304313 then ("," + boughtRange)
305314 else ("" + boughtRange)))
306315 let inv = if ((buyAssetId == USDN))
307316 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
308317 else 0
309318 if ((inv == inv))
310319 then {
311320 let baseEntry = ([IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount), (boughtTicketsAmount + allowedBuyTicketAmount)), IntegerEntry((toString(launchpadId) + keyTicketLastNumber), (lastBoughtTicketNumber + allowedBuyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets), newUserBoughtTicketsNumbers)] ++ freezeAdditionalEntry)
312321 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
313322 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
314323 else baseEntry
315324 }
316325 else throw("Strict value is not equal to itself.")
317326 }
318327 }
319328 })
320329
321330
322331
323332 @Callable(i)
324333 func commitAccessListSale (launchpadId,refId) = valueOrElse(isActive(), {
325- let $t01475714832 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
326- let pmtAmount = $t01475714832._1
327- let pmtAssetId = $t01475714832._2
328- let $t01483714987 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
329- let buyAssetId = $t01483714987._1
330- let buyAssetStrId = $t01483714987._2
331- let buyAssetName = $t01483714987._3
332- let buyAssetDecimals = $t01483714987._4
334+ let $t01487914954 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
335+ let pmtAmount = $t01487914954._1
336+ let pmtAssetId = $t01487914954._2
337+ let $t01495915109 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
338+ let buyAssetId = $t01495915109._1
339+ let buyAssetStrId = $t01495915109._2
340+ let buyAssetName = $t01495915109._3
341+ let buyAssetDecimals = $t01495915109._4
333342 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
334343 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
335344 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
336345 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
337346 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
338347 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
339- let $t01565615800 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
340- let tokenId = $t01565615800._1
341- let tokenStrAssetId = $t01565615800._2
342- let tokenAssetName = $t01565615800._3
343- let tokenDecimals = $t01565615800._4
348+ let $t01577815922 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
349+ let tokenId = $t01577815922._1
350+ let tokenStrAssetId = $t01577815922._2
351+ let tokenAssetName = $t01577815922._3
352+ let tokenDecimals = $t01577815922._4
344353 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
345354 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
346355 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
347356 if ((activeLaunchpadId != launchpadId))
348357 then throw("There is no active launchpad or this launchpad is ended")
349358 else if ((startHeight > height))
350359 then throw("Launchpad sale not started yet")
351360 else if ((height > (startHeight + duration)))
352361 then throw("Launchpad sale ended")
353362 else if (if ((size(i.payments) != 1))
354363 then true
355364 else (pmtAssetId != buyAssetId))
356365 then throw((("One attached payment in " + buyAssetName) + " expected"))
357366 else if ((boughtAllocations >= maxAllocationsAmount))
358367 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
359368 else if (if ((allocationPriceWithComission != pmtAmount))
360369 then ((allocationPriceWithComission * 2) != pmtAmount)
361370 else false)
362371 then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + buyAssetName) + " per allocation"))
363372 else {
364373 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
365374 let inv = if ((buyAssetId == USDN))
366375 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
367376 else 0
368377 if ((inv == inv))
369378 then {
370379 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations), (boughtAllocations + buyAllocationsAmount)), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing), (userUsdnInMarketing + pmtAmount)), IntegerEntry((toString(launchpadId) + keyAmountBuyAssetInMarketing), (usdnInMarketing + pmtAmount))]
371380 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
372381 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
373382 else baseEntry
374383 }
375384 else throw("Strict value is not equal to itself.")
376385 }
377386 })
378387
379388
380389
381390 @Callable(i)
382391 func commitHighCompetitionSale (launchpadId,refId) = valueOrElse(isActive(), {
383- let $t01805818133 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
384- let pmtAmount = $t01805818133._1
385- let pmtAssetId = $t01805818133._2
386- let $t01813818288 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
387- let buyAssetId = $t01813818288._1
388- let buyAssetStrId = $t01813818288._2
389- let buyAssetName = $t01813818288._3
390- let buyAssetDecimals = $t01813818288._4
392+ let $t01818018255 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
393+ let pmtAmount = $t01818018255._1
394+ let pmtAssetId = $t01818018255._2
395+ let $t01826018410 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
396+ let buyAssetId = $t01826018410._1
397+ let buyAssetStrId = $t01826018410._2
398+ let buyAssetName = $t01826018410._3
399+ let buyAssetDecimals = $t01826018410._4
391400 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
392401 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
393402 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
394403 let highCompetitionSale = valueOrElse(getBoolean(this, (toString(launchpadId) + keyHighCompetitionSale)), false)
395404 if ((activeLaunchpadId != launchpadId))
396405 then throw("There is no active launchpad or this launchpad is ended")
397406 else if (!(highCompetitionSale))
398407 then throw("There is no high competition sale for this launchpad")
399408 else if ((startHeight > height))
400409 then throw("Launchpad sale not started yet")
401410 else if ((height > (startHeight + duration)))
402411 then throw("Launchpad sale ended")
403412 else if (if ((size(i.payments) != 1))
404413 then true
405414 else (pmtAssetId != buyAssetId))
406415 then throw((("One attached payment in " + buyAssetName) + " expected"))
407416 else {
408417 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
409418 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
410- let $t01946119605 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
411- let tokenId = $t01946119605._1
412- let tokenStrAssetId = $t01946119605._2
413- let tokenAssetName = $t01946119605._3
414- let tokenDecimals = $t01946119605._4
419+ let $t01958319727 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
420+ let tokenId = $t01958319727._1
421+ let tokenStrAssetId = $t01958319727._2
422+ let tokenAssetName = $t01958319727._3
423+ let tokenDecimals = $t01958319727._4
415424 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
416425 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
417426 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
418427 let buyPriceWithComission = (buyTicketAmount * (ticketPrice + commissionPerTicket))
419428 let change = (pmtAmount - buyPriceWithComission)
420429 if ((buyTicketAmount == 0))
421430 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
422431 else if ((change != 0))
423432 then throw((((("Wrong payment. To buy " + toString(buyTicketAmount)) + "tickets you need to pay ") + toString(buyPriceWithComission)) + buyAssetName))
424433 else {
425434 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets)), "")
426435 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyHCTicketLastNumber))
427436 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + buyTicketAmount)))
428437 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
429438 then ("," + boughtRange)
430439 else ("" + boughtRange)))
431440 let inv = if ((buyAssetId == USDN))
432441 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
433442 else 0
434443 if ((inv == inv))
435444 then {
436445 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount), (boughtHCTicketsAmount + buyTicketAmount)), IntegerEntry((toString(launchpadId) + keyHCTicketLastNumber), (lastBoughtTicketNumber + buyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets), newUserBoughtTicketsNumbers)]
437446 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
438447 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
439448 else baseEntry
440449 }
441450 else throw("Strict value is not equal to itself.")
442451 }
443452 }
444453 })
445454
446455
447456
448457 @Callable(i)
449458 func finalise (launchpadId,vrfHeight,secretWord) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
450459 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
451460 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
452461 if ((calcHash != savedHash))
453462 then throw("vrf Height hash not matching")
454463 else {
455- let $t02221822368 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
456- let buyAssetId = $t02221822368._1
457- let buyAssetStrId = $t02221822368._2
458- let buyAssetName = $t02221822368._3
459- let buyAssetDecimals = $t02221822368._4
464+ let $t02234022490 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
465+ let buyAssetId = $t02234022490._1
466+ let buyAssetStrId = $t02234022490._2
467+ let buyAssetName = $t02234022490._3
468+ let buyAssetDecimals = $t02234022490._4
460469 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
461470 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
462471 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
463472 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
464473 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
465474 let swopfiHCBuyAssetAmount = valueOrElse(getInteger(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
466475 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
467476 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
468477 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
469478 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
470479 let unstakeAmount = ((((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission) - transferedBuyAsset)
471480 if ((transferedBuyAsset > ((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiHCBuyAssetAmount)))
472481 then throw("Can't transfer negative value to project")
473482 else {
474483 let inv = if ((buyAssetId == USDN))
475484 then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
476485 else 0
477486 if ((inv == inv))
478487 then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
479488 else throw("Strict value is not equal to itself.")
480489 }
481490 }
482491 }))
483492
484493
485494
486495 @Callable(i)
487496 func claim (launchpadId) = valueOrElse(isActive(), {
488497 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
489498 let boughtHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
490499 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
491500 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
492501 let finalizeHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)), 0)
493502 if ((finalizeHeight == 0))
494503 then throw("You can't claim because results are not finalized")
495504 else if (userClaimStatus)
496505 then throw("You are already claimed")
497506 else if (if (if ((boughtTickets == 0))
498507 then (boughtAllocations == 0)
499508 else false)
500509 then (boughtHCTickets == 0)
501510 else false)
502511 then throw("You can't claim because you don't buy anything")
503512 else {
504- let $t02545225629 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
505- let buyAssetId = $t02545225629._1
506- let buyAssetStrId = $t02545225629._2
507- let buyAssetName = $t02545225629._3
508- let buyAssetDecimals = $t02545225629._4
513+ let $t02557425751 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
514+ let buyAssetId = $t02557425751._1
515+ let buyAssetStrId = $t02557425751._2
516+ let buyAssetName = $t02557425751._3
517+ let buyAssetDecimals = $t02557425751._4
509518 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
510519 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
511520 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
512521 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
513522 let commissionHC = valueOrElse(getInteger(this, (toString(launchpadId) + keyHighCompetitionComission)), 0)
514523 let allowedAllocations = min([boughtAllocations, awailableAllocations])
515524 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
516525 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
517- let $t02654526689 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
518- let tokenId = $t02654526689._1
519- let tokenStrAssetId = $t02654526689._2
520- let tokenAssetName = $t02654526689._3
521- let tokenDecimals = $t02654526689._4
526+ let $t02666726811 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
527+ let tokenId = $t02666726811._1
528+ let tokenStrAssetId = $t02666726811._2
529+ let tokenAssetName = $t02666726811._3
530+ let tokenDecimals = $t02666726811._4
522531 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
523532 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
524533 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
525534 let notAllowedAllocationsTokens = ((boughtAllocations - allowedAllocations) * tokensPerAllocation)
526535 let buyAssetForAllocations = fraction(fraction(notAllowedAllocationsTokens, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
527536 let buyAssetForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
528537 let buyAssetForHCUnwonnedTickets = fraction(((boughtHCTickets - wonnedHCTickets) * ticketPrice), (100 + commissionHC), 100)
529538 let claimedBuyToken = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens)), 0)
530539 if (if (if ((0 > buyAssetForAllocations))
531540 then true
532541 else (0 > buyAssetForUnwonnedTickets))
533542 then true
534543 else (0 > buyAssetForHCUnwonnedTickets))
535544 then throw("Error with allowed allocation param or wonned tickets param please contact support")
536545 else {
537546 let returnedBuyAssetAmount = (((buyAssetForUnwonnedTickets + buyAssetForHCUnwonnedTickets) + buyAssetForAllocations) - claimedBuyToken)
538547 let transferBuyAsset = if ((returnedBuyAssetAmount > 0))
539548 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens), returnedBuyAssetAmount)]
540549 else nil
541550 let inv = if (if ((returnedBuyAssetAmount > 0))
542551 then (buyAssetId == USDN)
543552 else false)
544553 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
545554 else 0
546555 if ((inv == inv))
547556 then {
548557 let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), "claimAll"), ",")
549558 if ((claimedParams[0] == "claimAll"))
550559 then {
551560 let transferTokens = if ((transferTokensAmount > 0))
552561 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
553562 else nil
554563 (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), transferTokensAmount)] ++ transferTokens) ++ transferBuyAsset)
555564 }
556565 else if ((claimedParams[0] == "claimPeriod"))
557566 then {
558567 let claimedTokens = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens)), 0)
559568 let unlockPeriod = value(parseInt(claimedParams[2]))
560569 let blockHeight = (value(parseInt(claimedParams[3])) + finalizeHeight)
561570 let unlockHeight = (unlockPeriod + blockHeight)
562571 let allowedStartAmount = fraction(transferTokensAmount, value(parseInt(claimedParams[1])), 100)
563572 let allowedTokensAmount = (allowedStartAmount + (if ((height > blockHeight))
564573 then (fraction((transferTokensAmount - allowedStartAmount), (min([height, unlockHeight]) - blockHeight), unlockPeriod) - claimedTokens)
565574 else (0 - claimedTokens)))
566575 let claimStatusEntry = if ((transferTokensAmount >= (claimedTokens + allowedTokensAmount)))
567576 then [BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)]
568577 else nil
569578 if (if ((allowedTokensAmount > 0))
570579 then true
571580 else (returnedBuyAssetAmount > 0))
572581 then {
573582 let transferTokens = if ((allowedTokensAmount > 0))
574583 then [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), (claimedTokens + allowedTokensAmount)), ScriptTransfer(i.caller, allowedTokensAmount, tokenId)]
575584 else nil
576585 (transferBuyAsset ++ transferTokens)
577586 }
578587 else throw("Nothing to claim")
579588 }
580589 else throw("Unknown claim function")
581590 }
582591 else throw("Strict value is not equal to itself.")
583592 }
584593 }
585594 })
586595
587596
588597
589598 @Callable(i)
590599 func claimFreezeToken (launchpadId) = valueOrElse(isActive(), {
591600 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
592601 if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
593602 then throw("You can't claim because results are not finalized")
594603 else if (!(freezeAdditionalToken))
595604 then throw("There are no additional token freezing for this launchpad")
596605 else {
597606 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
598607 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
599608 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
600609 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
601610 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
602611 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
603612 if ((userTokensFreezed == 0))
604613 then throw("You are already claimed your tokens or not paid anything")
605614 else if ((blockEndHeight > height))
606615 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
607616 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
608617 }
609618 })
610619
611620
612621
613622 @Callable(i)
614623 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
615624 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
616- let $t03285433004 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
617- let buyAssetId = $t03285433004._1
618- let buyAssetStrId = $t03285433004._2
619- let buyAssetName = $t03285433004._3
620- let buyAssetDecimals = $t03285433004._4
625+ let $t03297633126 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626+ let buyAssetId = $t03297633126._1
627+ let buyAssetStrId = $t03297633126._2
628+ let buyAssetName = $t03297633126._3
629+ let buyAssetDecimals = $t03297633126._4
621630 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
622631 let inv = if (if ((amount > 0))
623632 then (buyAssetId == USDN)
624633 else false)
625634 then invoke(stakingUSDNAddress, "unlockNeutrino", [amount, toBase58String(USDN)], nil)
626635 else 0
627636 if ((inv == inv))
628637 then [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), (transferedBuyAsset + amount)), ScriptTransfer(projectAddress, amount, buyAssetId)]
629638 else throw("Strict value is not equal to itself.")
630639 }))
631640
632641
633642
634643 @Callable(i)
635644 func shutdown () = valueOrElse(isAdminCall(i), if (!(active))
636645 then throw("DApp already inactive")
637646 else [BooleanEntry(keyActive, false)])
638647
639648
640649
641650 @Callable(i)
642651 func activate () = valueOrElse(isAdminCall(i), if (active)
643652 then throw("DApp already active")
644653 else [BooleanEntry(keyActive, true)])
645654
646655
647656 @Verifier(tx)
648657 func verify () = {
649658 let multiSignedByAdmins = {
650659 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
651660 then 1
652661 else 0
653662 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
654663 then 1
655664 else 0
656665 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
657666 then 1
658667 else 0
659668 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
660669 }
661670 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
662671 then true
663672 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
664673 then true
665674 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
666675 then true
667676 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
668677 match tx {
669678 case dtx: DataTransaction =>
670679 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
671680 then signedByAdmin
672681 else false
673682 case _ =>
674683 multiSignedByAdmins
675684 }
676685 }
677686

github/deemru/w8io/6500d08 
126.64 ms