tx · Ajom89W8cuwZjD2rJb91uyrTxnF149vusVg3H7cRstdv

3N9be2mwrA52WJho6DiesZkk4351GvpnWuj:  -0.04000000 Waves

2022.10.18 13:26 [2277712] smart account 3N9be2mwrA52WJho6DiesZkk4351GvpnWuj > SELF 0.00000000 Waves

{ "type": 13, "id": "Ajom89W8cuwZjD2rJb91uyrTxnF149vusVg3H7cRstdv", "fee": 4000000, "feeAssetId": null, "timestamp": 1666088861647, "version": 1, "sender": "3N9be2mwrA52WJho6DiesZkk4351GvpnWuj", "senderPublicKey": "6mzmbCza9iqbzxMEELcEA4Xc9NeF4CYpbTtz1zMK3C7x", "proofs": [ "4wxJTrPN5EUds1fTPoanqRexyxz4kh2VJobmNm7VMUGzPNUZX4QsGjQcskmH2ztrAfmjV6ijZinn7FktPSCKCHyd", "3CPjubERQdeK65h43urR5XVFsbYgzkBEWmgtpjqjcwjpkd5xNt9VeAeZ2fYro7mBHodjHJNdT8YYFV2eugW7Mfi1", "3EbBhwcHT3rkx5bwW14ec6BbGJC4Z4U386vi8gw7NCJaRUgNTCC3Byg9RxTkR31pbYNvDbnxCT3RvN6Vn2mJRuYW" ], "script": "base64:BgJXCAISDgoMCAgICAgIAQEBAQEBEgUKAwgIARIAEgASBQoDCAEIEgMKAQESBAoCAQgSABIFCgMIAQESBAoCAQESBAoCCAESBQoDCAEBEgYKBAgIAQESABIAqwEBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQVsY2FsYwEBbAkAuQgBBQFsAQ5nZXROdW1iZXJCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAQxnZXRCb29sQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQNrZXkHARhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkCB2FkZHJlc3MDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFB2FkZHJlc3MFA2tleQAAARhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkCB2FkZHJlc3MDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFA2tleQIAARZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQdhZGRyZXNzBQNrZXkHAQlhc0FueUxpc3QBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAFsBQckbWF0Y2gwBQFsCQACAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEHYXNCeXRlcwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQHdmFsQnl0ZQUHJG1hdGNoMAUHdmFsQnl0ZQkAAgECHGZhaWwgdG8gY2FzdCBpbnRvIEJ5dGVWZWN0b3IBCWFzUGF5bWVudAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAg9BdHRhY2hlZFBheW1lbnQEAXAFByRtYXRjaDAFAXAJAAIBAiFmYWlsIHRvIGNhc3QgaW50byBBdHRhY2hlZFBheW1lbnQBEmFzU3dhcFBhcmFtc1NUUlVDVAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAiMoSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEludCwgSW50KQQGc3RydWN0BQckbWF0Y2gwBQZzdHJ1Y3QJAAIBAh1mYWlsIHRvIGNhc3QgaW50byBUdXBsZTUgaW50cwADU0VQAgJfXwAHV0FWRUxFVACAwtcvAAVQQVVMSQDAhD0ACFBSSUNFTEVUAMCEPQAOREVGQVVMVFNXQVBGRUUAoJwBAAtCUlBST1RFQ1RFRACgjQYADElkeE5ldEFtb3VudAAAAAxJZHhGZWVBbW91bnQAAQAOSWR4R3Jvc3NBbW91bnQAAgAZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAABABhJZHhDb250cm9sQ2ZnQXVjdGlvbkRhcHAAAgAUSWR4Q29udHJvbENmZ1JwZERhcHAAAwAVSWR4Q29udHJvbENmZ01hdGhEYXBwAAQAHElkeENvbnRyb2xDZmdMaXF1aWRhdGlvbkRhcHAABQAVSWR4Q29udHJvbENmZ1Jlc3REYXBwAAYAHUlkeENvbnRyb2xDZmdOb2RlUmVnaXN0cnlEYXBwAAcAHElkeENvbnRyb2xDZmdOc2J0U3Rha2luZ0RhcHAACAAZSWR4Q29udHJvbENmZ01lZGlhdG9yRGFwcAAJABxJZHhDb250cm9sQ2ZnU3VyZlN0YWtpbmdEYXBwAAoAIElkeENvbnRyb2xDZmdHbnNidENvbnRyb2xsZXJEYXBwAAsAF0lkeENvbnRyb2xDZmdSZXN0VjJEYXBwAAwAG0lkeENvbnRyb2xDZmdHb3Zlcm5hbmNlRGFwcAANARFrZXlDb250cm9sQWRkcmVzcwACHCVzJXNfX2NvbmZpZ19fY29udHJvbEFkZHJlc3MBDWtleUNvbnRyb2xDZmcAAhElc19fY29udHJvbENvbmZpZwEUcmVhZENvbnRyb2xDZmdPckZhaWwBB2NvbnRyb2wJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFB2NvbnRyb2wJAQ1rZXlDb250cm9sQ2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCCmNvbnRyb2xDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQpjb250cm9sQ2ZnBQNpZHgJAKwCAgItQ29udHJvbCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAPY29udHJvbENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARFrZXlDb250cm9sQWRkcmVzcwACIzNONE5TN2Q0Sm85YTZGMTRMaUZVS0tZVmRVa2tmMmVQNFp4AApjb250cm9sQ2ZnCQEUcmVhZENvbnRyb2xDZmdPckZhaWwBBQ9jb250cm9sQ29udHJhY3QADG1hdGhDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFFUlkeENvbnRyb2xDZmdNYXRoRGFwcAATbnNidFN0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFHElkeENvbnRyb2xDZmdOc2J0U3Rha2luZ0RhcHAAE3N1cmZTdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRxJZHhDb250cm9sQ2ZnU3VyZlN0YWtpbmdEYXBwABdnbnNidENvbnRyb2xsZXJDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFIElkeENvbnRyb2xDZmdHbnNidENvbnRyb2xsZXJEYXBwAA9hdWN0aW9uQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRhJZHhDb250cm9sQ2ZnQXVjdGlvbkRhcHAAFG5vZGVSZWdpc3RyeUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUdSWR4Q29udHJvbENmZ05vZGVSZWdpc3RyeURhcHAAEmdvdmVybmFuY2VDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFG0lkeENvbnRyb2xDZmdHb3Zlcm5hbmNlRGFwcAASTmV1dHJpbm9Bc3NldElkS2V5AhFuZXV0cmlub19hc3NldF9pZAAOQm9uZEFzc2V0SWRLZXkCDWJvbmRfYXNzZXRfaWQAEkF1Y3Rpb25Db250cmFjdEtleQIQYXVjdGlvbl9jb250cmFjdAAWTnNidFN0YWtpbmdDb250cmFjdEtleQITbnNidFN0YWtpbmdDb250cmFjdAAWTGlxdWlkYXRpb25Db250cmFjdEtleQIUbGlxdWlkYXRpb25fY29udHJhY3QADlJQRENvbnRyYWN0S2V5AgxycGRfY29udHJhY3QAEUNvbnRvbENvbnRyYWN0S2V5AhBjb250cm9sX2NvbnRyYWN0AA9NYXRoQ29udHJhY3RLZXkCDW1hdGhfY29udHJhY3QAG0JhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbEtleQIbYmFsYW5jZV93YXZlc19sb2NrX2ludGVydmFsAB5CYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWxLZXkCHmJhbGFuY2VfbmV1dHJpbm9fbG9ja19pbnRlcnZhbAAVTWluV2F2ZXNTd2FwQW1vdW50S2V5AhVtaW5fd2F2ZXNfc3dhcF9hbW91bnQAGE1pbk5ldXRyaW5vU3dhcEFtb3VudEtleQIYbWluX25ldXRyaW5vX3N3YXBfYW1vdW50ABtOb2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlLZXkCFG5vZGVfb3JhY2xlX3Byb3ZpZGVyABVOZXV0cmlub091dEZlZVBhcnRLZXkCGG5ldXRyaW5vT3V0X3N3YXBfZmVlUGFydAASV2F2ZXNPdXRGZWVQYXJ0S2V5AhV3YXZlc091dF9zd2FwX2ZlZVBhcnQBD2tleU5vZGVSZWdpc3RyeQEHYWRkcmVzcwkArAICAgQlc19fBQdhZGRyZXNzAAhQcmljZUtleQIFcHJpY2UADVByaWNlSW5kZXhLZXkCC3ByaWNlX2luZGV4AAxJc0Jsb2NrZWRLZXkCCmlzX2Jsb2NrZWQBEmdldFByaWNlSGlzdG9yeUtleQEFYmxvY2sJAKwCAgkArAICBQhQcmljZUtleQIBXwkApAMBBQVibG9jawEYZ2V0SGVpZ2h0UHJpY2VCeUluZGV4S2V5AQVpbmRleAkArAICCQCsAgIFDVByaWNlSW5kZXhLZXkCAV8JAKQDAQUFaW5kZXgBFWdldFN0YWtpbmdOb2RlQnlJbmRleAEDaWR4CQEOZ2V0U3RyaW5nQnlLZXkBCQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICBWxlYXNlCQDMCAIJAKQDAQUDaWR4CQDMCAICC25vZGVBZGRyZXNzBQNuaWwFA1NFUAEcZ2V0U3Rha2luZ05vZGVBZGRyZXNzQnlJbmRleAEDaWR4CQERQGV4dHJOYXRpdmUoMTA2MikBCQEVZ2V0U3Rha2luZ05vZGVCeUluZGV4AQUDaWR4AR9nZXRSZXNlcnZlZEFtb3VudEZvclNwb25zb3JzaGlwAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgVsZWFzZQkAzAgCAhdzcG9uc29yc2hpcFdhdmVzUmVzZXJ2ZQUDbmlsBQNTRVAJAGgCAOgHBQdXQVZFTEVUARhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkBBW93bmVyCQCsAgICFWJhbGFuY2VfdW5sb2NrX2Jsb2NrXwUFb3duZXIBDWdldExlYXNlSWRLZXkBCW5vZGVJbmRleAkAuQkCCQDMCAICBiVzJWQlcwkAzAgCAgVsZWFzZQkAzAgCCQCkAwEFCW5vZGVJbmRleAkAzAgCAgJpZAUDbmlsBQNTRVABFmdldExlYXNlSWRCeUFkZHJlc3NLZXkBC25vZGVBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICDmxlYXNlQnlBZGRyZXNzCQDMCAIFC25vZGVBZGRyZXNzCQDMCAICAmlkBQNuaWwFA1NFUAERZ2V0TGVhc2VBbW91bnRLZXkBCW5vZGVJbmRleAkAuQkCCQDMCAICBiVzJWQlcwkAzAgCAgVsZWFzZQkAzAgCCQCkAwEFCW5vZGVJbmRleAkAzAgCAgZhbW91bnQFA25pbAUDU0VQARpnZXRMZWFzZUFtb3VudEJ5QWRkcmVzc0tleQELbm9kZUFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIObGVhc2VCeUFkZHJlc3MJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgIGYW1vdW50BQNuaWwFA1NFUAEYZ2V0TGVhc2VHcm91cE5vZGVMaXN0S2V5AQhncm91cE51bQkAuQkCCQDMCAICBiVzJWQlcwkAzAgCAgpsZWFzZUdyb3VwCQDMCAIJAKQDAQUIZ3JvdXBOdW0JAMwIAgIIbm9kZUxpc3QFA25pbAUDU0VQARBtaW5Td2FwQW1vdW50S0VZAQhzd2FwVHlwZQkArAICCQCsAgICBG1pbl8FCHN3YXBUeXBlAgxfc3dhcF9hbW91bnQBDnRvdGFsTG9ja2VkS0VZAQhzd2FwVHlwZQkArAICAg1iYWxhbmNlX2xvY2tfBQhzd2FwVHlwZQEUdG90YWxMb2NrZWRCeVVzZXJLRVkCCHN3YXBUeXBlBW93bmVyCQC5CQIJAMwIAgIMYmFsYW5jZV9sb2NrCQDMCAIFCHN3YXBUeXBlCQDMCAIFBW93bmVyBQNuaWwCAV8BFmJhbGFuY2VMb2NrSW50ZXJ2YWxLRVkBCHN3YXBUeXBlCQCsAgIJAKwCAgIIYmFsYW5jZV8FCHN3YXBUeXBlAg5fbG9ja19pbnRlcnZhbAEabm9kZUJhbGFuY2VMb2NrSW50ZXJ2YWxLRVkAAhpiYWxhbmNlX25vZGVfbG9ja19pbnRlcnZhbAENb3V0RmVlUGFydEtFWQEIc3dhcFR5cGUJAKwCAgUIc3dhcFR5cGUCEE91dF9zd2FwX2ZlZVBhcnQBEXN3YXBzVGltZWZyYW1lS0VZAAIPc3dhcHNfdGltZWZyYW1lAQ5iclByb3RlY3RlZEtFWQACF21pbl9CUl9wcm90ZWN0aW9uX2xldmVsARFtaW5Td2FwQW1vdW50UkVBRAEIc3dhcFR5cGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEG1pblN3YXBBbW91bnRLRVkBBQhzd2FwVHlwZQAAARJzd2Fwc1RpbWVmcmFtZVJFQUQACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARFzd2Fwc1RpbWVmcmFtZUtFWQAAoAsBD3RvdGFsTG9ja2VkUkVBRAEIc3dhcFR5cGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvdGFsTG9ja2VkS0VZAQUIc3dhcFR5cGUAAAEVdG90YWxMb2NrZWRCeVVzZXJSRUFEAghzd2FwVHlwZQVvd25lcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEUdG90YWxMb2NrZWRCeVVzZXJLRVkCBQhzd2FwVHlwZQUFb3duZXIAAAEXYmFsYW5jZUxvY2tJbnRlcnZhbFJFQUQBCHN3YXBUeXBlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZiYWxhbmNlTG9ja0ludGVydmFsS0VZAQUIc3dhcFR5cGUAoAsBG25vZGVCYWxhbmNlTG9ja0ludGVydmFsUkVBRAAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBGm5vZGVCYWxhbmNlTG9ja0ludGVydmFsS0VZAAABARhrZXlTd2FwVXNlclNwZW50SW5QZXJpb2QBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhVzd2FwVXNlclNwZW50SW5QZXJpb2QJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARVrZXlVc2VyTGFzdFN3YXBIZWlnaHQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhJ1c2VyTGFzdFN3YXBIZWlnaHQJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAgZhbW91bnQFcHJpY2UJAGsDCQBrAwUGYW1vdW50BQhQUklDRUxFVAUFcHJpY2UFB1dBVkVMRVQFBVBBVUxJARZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAgZhbW91bnQFcHJpY2UJAGsDCQBrAwUGYW1vdW50BQVwcmljZQUIUFJJQ0VMRVQFBVBBVUxJBQdXQVZFTEVUARJjb252ZXJ0V2F2ZXNUb0JvbmQCBmFtb3VudAVwcmljZQkBFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8CBQZhbW91bnQFBXByaWNlARZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AQlqc29uQXJyYXkJALUJAgUJanNvbkFycmF5AgEsARFtaW5Td2FwQW1vdW50RkFJTAIIc3dhcFR5cGUNbWluU3dhcEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgICGFRoZSBzcGVjaWZpZWQgYW1vdW50IGluIAUIc3dhcFR5cGUCKyBzd2FwIGlzIGxlc3MgdGhhbiB0aGUgcmVxdWlyZWQgbWluaW11bSBvZiAJAKQDAQUNbWluU3dhcEFtb3VudAEVZW1lcmdlbmN5U2h1dGRvd25GQUlMAAkAAgECWmNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50aWxsIHJlYWN0aXZhdGlvbiBieSBlbWVyZ2VuY3kgb3JhY2xlcwEOcHJpY2VJbmRleEZBSUwFBWluZGV4CnByaWNlSW5kZXgLaW5kZXhIZWlnaHQMdW5sb2NrSGVpZ2h0D3ByZXZJbmRleEhlaWdodAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICI2ludmFsaWQgcHJpY2UgaGlzdG9yeSBpbmRleDogaW5kZXg9CQCkAwEFBWluZGV4AgwgcHJpY2VJbmRleD0JAKQDAQUKcHJpY2VJbmRleAINIGluZGV4SGVpZ2h0PQkApAMBBQtpbmRleEhlaWdodAIOIHVubG9ja0hlaWdodD0JAKQDAQUMdW5sb2NrSGVpZ2h0AhEgcHJldkluZGV4SGVpZ2h0PQkApAMBBQ9wcmV2SW5kZXhIZWlnaHQAD25ldXRyaW5vQXNzZXRJZAkA2QQBCQEOZ2V0U3RyaW5nQnlLZXkBBRJOZXV0cmlub0Fzc2V0SWRLZXkACnByaWNlSW5kZXgJARhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkCBQ9jb250cm9sQ29udHJhY3QFDVByaWNlSW5kZXhLZXkACWlzQmxvY2tlZAkBFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkCBQ9jb250cm9sQ29udHJhY3QFDElzQmxvY2tlZEtleQAYbm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5CQDZBAEJAQ5nZXRTdHJpbmdCeUtleQEFG05vZGVPcmFjbGVQcm92aWRlclB1YktleUtleQALYm9uZEFzc2V0SWQJANkEAQIsRjNpYXh6cnVGZUt1amZWZllTWkVrZWpwamg2N3dtUmZQQ1JIaU5tV0twM1oAFWRlcHJlY2F0ZWRCb25kQXNzZXRJZAkA2QQBAiw5NzVha1pCZm5NajUxM1U3TVphSEt6UXJtc0V4NWFFM3dkV0tUckhCaGJqRgAQbmV1dHJpbm9Db250cmFjdAUEdGhpcwAMY3VycmVudFByaWNlCQEYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AgUPY29udHJvbENvbnRyYWN0BQhQcmljZUtleQEbY2hlY2tJc1ZhbGlkTWluU3BvbnNvcmVkRmVlAQJ0eAQOTUlOVFJBTlNGRVJGRUUAoI0GBBZTcG9uc29yZWRGZWVVcHBlckJvdW5kAOgHBA9yZWFsTmV1dHJpbm9GZWUJARZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAgUOTUlOVFJBTlNGRVJGRUUFDGN1cnJlbnRQcmljZQQObWluTmV1dHJpbm9GZWUJAGgCBQ9yZWFsTmV1dHJpbm9GZWUAAgQObWF4TmV1dHJpbm9GZWUJAGsDBQ9yZWFsTmV1dHJpbm9GZWUFFlNwb25zb3JlZEZlZVVwcGVyQm91bmQAZAQIaW5wdXRGZWUJAQV2YWx1ZQEIBQJ0eBRtaW5TcG9uc29yZWRBc3NldEZlZQMDCQBnAgUIaW5wdXRGZWUFDm1pbk5ldXRyaW5vRmVlCQBnAgUObWF4TmV1dHJpbm9GZWUFCGlucHV0RmVlBwkAAAIIBQJ0eAdhc3NldElkBQ9uZXV0cmlub0Fzc2V0SWQHAQ9nZXRQcmljZUhpc3RvcnkBBWJsb2NrCQEYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AgUPY29udHJvbENvbnRyYWN0CQESZ2V0UHJpY2VIaXN0b3J5S2V5AQUFYmxvY2sBFWdldEhlaWdodFByaWNlQnlJbmRleAEFaW5kZXgJARhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkCBQ9jb250cm9sQ29udHJhY3QJARhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkBBQVpbmRleAEWa2V5TG9ja1BhcmFtVXNlckFtb3VudAELdXNlckFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgILcGFyYW1CeVVzZXIJAMwIAgULdXNlckFkZHJlc3MJAMwIAgIGYW1vdW50BQNuaWwFA1NFUAAMc0lkeFN3YXBUeXBlAAEACnNJZHhTdGF0dXMAAgAMc0lkeEluQW1vdW50AAMACXNJZHhQcmljZQAEABBzSWR4T3V0TmV0QW1vdW50AAUAEHNJZHhPdXRGZWVBbW91bnQABgAPc0lkeFN0YXJ0SGVpZ2h0AAcAEnNJZHhTdGFydFRpbWVzdGFtcAAIAA1zSWR4RW5kSGVpZ2h0AAkAEHNJZHhFbmRUaW1lc3RhbXAACgAUc0lkeFNlbGZVbmxvY2tIZWlnaHQACwAUc0lkeFJhbmRVbmxvY2tIZWlnaHQADAAJc0lkeEluZGV4AA0AEHNJZHhXaXRoZHJhd1R4SWQADgALc0lkeE1pblJhbmQADwALc0lkeE1heFJhbmQAEAARc0lkeE91dFN1cmZBbW91bnQAEQAGc0lkeEJSABIBB3N3YXBLRVkCC3VzZXJBZGRyZXNzBHR4SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDU0VQAQtzdHJTd2FwREFUQRIIc3dhcFR5cGUGc3RhdHVzCGluQW1vdW50BXByaWNlDG91dE5ldEFtb3VudAxvdXRGZWVBbW91bnQLc3RhcnRIZWlnaHQOc3RhcnRUaW1lc3RhbXAJZW5kSGVpZ2h0DGVuZFRpbWVzdGFtcBBzZWxmVW5sb2NrSGVpZ2h0EHJhbmRVbmxvY2tIZWlnaHQFaW5kZXgMd2l0aGRyYXdUeElkB3JhbmRNaW4HcmFuZE1heApvdXRTdXJmQW10AmJyCQC5CQIJAMwIAgIkJXMlcyVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlcyVkJWQlZCVkCQDMCAIFCHN3YXBUeXBlCQDMCAIFBnN0YXR1cwkAzAgCBQhpbkFtb3VudAkAzAgCBQVwcmljZQkAzAgCBQxvdXROZXRBbW91bnQJAMwIAgUMb3V0RmVlQW1vdW50CQDMCAIFC3N0YXJ0SGVpZ2h0CQDMCAIFDnN0YXJ0VGltZXN0YW1wCQDMCAIFCWVuZEhlaWdodAkAzAgCBQxlbmRUaW1lc3RhbXAJAMwIAgUQc2VsZlVubG9ja0hlaWdodAkAzAgCBRByYW5kVW5sb2NrSGVpZ2h0CQDMCAIFBWluZGV4CQDMCAIFDHdpdGhkcmF3VHhJZAkAzAgCBQdyYW5kTWluCQDMCAIFB3JhbmRNYXgJAMwIAgUKb3V0U3VyZkFtdAkAzAgCBQJicgUDbmlsBQNTRVABD3BlbmRpbmdTd2FwREFUQQMIc3dhcFR5cGUNaW5Bc3NldEFtb3VudBBzZWxmVW5sb2NrSGVpZ2h0CQELc3RyU3dhcERBVEESBQhzd2FwVHlwZQIHUEVORElORwkApAMBBQ1pbkFzc2V0QW1vdW50AgEwAgEwAgEwCQCkAwEFBmhlaWdodAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAIBMAIBMAkApAMBBRBzZWxmVW5sb2NrSGVpZ2h0AgEwAgEwAgROVUxMAgEwAgEwAgEwAgEwAQ5maW5pc2hTd2FwREFUQQkJZGF0YUFycmF5BXByaWNlDG91dE5ldEFtb3VudAxvdXRGZWVBbW91bnQQcmFuZFVubG9ja0hlaWdodAVpbmRleAx3aXRoZHJhd1R4SWQKb3V0U3VyZkFtdAJicgkBC3N0clN3YXBEQVRBEgkAkQMCBQlkYXRhQXJyYXkFDHNJZHhTd2FwVHlwZQIIRklOSVNIRUQJAJEDAgUJZGF0YUFycmF5BQxzSWR4SW5BbW91bnQJAKQDAQUFcHJpY2UJAKQDAQUMb3V0TmV0QW1vdW50CQCkAwEFDG91dEZlZUFtb3VudAkAkQMCBQlkYXRhQXJyYXkFD3NJZHhTdGFydEhlaWdodAkAkQMCBQlkYXRhQXJyYXkFEnNJZHhTdGFydFRpbWVzdGFtcAkApAMBBQZoZWlnaHQJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAJEDAgUJZGF0YUFycmF5BRRzSWR4U2VsZlVubG9ja0hlaWdodAkApAMBBRByYW5kVW5sb2NrSGVpZ2h0CQCkAwEFBWluZGV4BQx3aXRoZHJhd1R4SWQJAJEDAgUJZGF0YUFycmF5BQtzSWR4TWluUmFuZAkAkQMCBQlkYXRhQXJyYXkFC3NJZHhNYXhSYW5kCQCkAwEFCm91dFN1cmZBbXQJAKQDAQUCYnIBEnN3YXBEYXRhRmFpbE9yUkVBRAILdXNlckFkZHJlc3MIc3dhcFR4SWQEB3N3YXBLZXkJAQdzd2FwS0VZAgULdXNlckFkZHJlc3MFCHN3YXBUeElkCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQdzd2FwS2V5CQCsAgICEW5vIHN3YXAgZGF0YSBmb3IgBQdzd2FwS2V5BQNTRVABCWFwcGx5RmVlcwMOYW1vdW50T3V0R3Jvc3MLaW5BbXRUb1NVUkYHZmVlUGFydAQJZmVlQW1vdW50CQBrAwUOYW1vdW50T3V0R3Jvc3MFB2ZlZVBhcnQFBVBBVUxJCQDMCAIJAGUCBQ5hbW91bnRPdXRHcm9zcwUJZmVlQW1vdW50CQDMCAIFCWZlZUFtb3VudAUDbmlsAQNhYnMBAXgDCQBmAgAABQF4CQEBLQEFAXgFAXgBCnNlbGVjdE5vZGUBDXVubGVhc2VBbW91bnQEDWFtb3VudFRvTGVhc2UJAGUCCQBlAggJAO8HAQUQbmV1dHJpbm9Db250cmFjdAlhdmFpbGFibGUFDXVubGVhc2VBbW91bnQJAR9nZXRSZXNlcnZlZEFtb3VudEZvclNwb25zb3JzaGlwAAQKb2xkTGVhc2VkMAkBDmdldE51bWJlckJ5S2V5AQkBEWdldExlYXNlQW1vdW50S2V5AQAABApvbGRMZWFzZWQxCQEOZ2V0TnVtYmVyQnlLZXkBCQERZ2V0TGVhc2VBbW91bnRLZXkBAAEECm5ld0xlYXNlZDAJAGQCBQ1hbW91bnRUb0xlYXNlBQpvbGRMZWFzZWQwBApuZXdMZWFzZWQxCQBkAgUNYW1vdW50VG9MZWFzZQUKb2xkTGVhc2VkMQMDCQBmAgUKbmV3TGVhc2VkMAAABgkAZgIFCm5ld0xlYXNlZDEAAAQGZGVsdGEwCQEDYWJzAQkAZQIFCm5ld0xlYXNlZDAFCm9sZExlYXNlZDEEBmRlbHRhMQkBA2FicwEJAGUCBQpuZXdMZWFzZWQxBQpvbGRMZWFzZWQwAwkAZwIFBmRlbHRhMQUGZGVsdGEwCQCUCgIAAAUKbmV3TGVhc2VkMAkAlAoCAAEFCm5ld0xlYXNlZDEJAJQKAgD///////////8BAAABCHRoaXNPbmx5AQFpAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQItUGVybWlzc2lvbiBkZW5pZWQ6IHRoaXMgY29udHJhY3Qgb25seSBhbGxvd2VkBgEWcHJlcGFyZVVubGVhc2VBbmRMZWFzZQENdW5sZWFzZUFtb3VudAQJbm9kZVR1cGxlCQEKc2VsZWN0Tm9kZQEFDXVubGVhc2VBbW91bnQECW5vZGVJbmRleAgFCW5vZGVUdXBsZQJfMQQObmV3TGVhc2VBbW91bnQIBQlub2RlVHVwbGUCXzIDCQBmAgUObmV3TGVhc2VBbW91bnQAAAQKbGVhc2VJZEtleQkBDWdldExlYXNlSWRLZXkBBQlub2RlSW5kZXgECG9sZExlYXNlCQCcCAIFBHRoaXMFCmxlYXNlSWRLZXkEDnVubGVhc2VPckVtcHR5AwkBCWlzRGVmaW5lZAEFCG9sZExlYXNlCQDMCAIJAQtMZWFzZUNhbmNlbAEJAQV2YWx1ZQEFCG9sZExlYXNlBQNuaWwFA25pbAQObGVhc2VBbW91bnRLZXkJARFnZXRMZWFzZUFtb3VudEtleQEFCW5vZGVJbmRleAQFbGVhc2UJAMQIAgkBHGdldFN0YWtpbmdOb2RlQWRkcmVzc0J5SW5kZXgBBQlub2RlSW5kZXgFDm5ld0xlYXNlQW1vdW50CQDOCAIFDnVubGVhc2VPckVtcHR5CQDMCAIFBWxlYXNlCQDMCAIJAQtCaW5hcnlFbnRyeQIFCmxlYXNlSWRLZXkJAQVsY2FsYwEFBWxlYXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERZ2V0TGVhc2VBbW91bnRLZXkBBQlub2RlSW5kZXgFDm5ld0xlYXNlQW1vdW50BQNuaWwFA25pbAEMcmVhZE5vZGVJbmZvAQdub2RlSWR4BAtub2RlQWRkcmVzcwkBHGdldFN0YWtpbmdOb2RlQWRkcmVzc0J5SW5kZXgBBQdub2RlSWR4BAxsZWFzZWRBbXRLRVkJARFnZXRMZWFzZUFtb3VudEtleQEFB25vZGVJZHgECWxlYXNlZEFtdAkBDmdldE51bWJlckJ5S2V5AQUMbGVhc2VkQW10S0VZBApsZWFzZUlkS0VZCQENZ2V0TGVhc2VJZEtleQEFB25vZGVJZHgEB2xlYXNlSWQJAQV2YWx1ZQEJAJwIAgUEdGhpcwUKbGVhc2VJZEtFWQkAlwoFBQtub2RlQWRkcmVzcwUMbGVhc2VkQW10S0VZBQlsZWFzZWRBbXQFCmxlYXNlSWRLRVkFB2xlYXNlSWQBCmNvbW1vblN3YXAFCHN3YXBUeXBlCXBtdEFtb3VudA51c2VyQWRkcmVzc1N0cgZ0eElkNTgbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZBA5zd2FwTGltaXRTcGVudAgFG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQJfMgQOYmxja3MyTG10UmVzZXQIBRtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkCXzMEEXdhdmVzU3dhcExpbWl0TWF4CAUbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZAl82BBB1c2RuU3dhcExpbWl0TWF4CAUbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZAl83BA1taW5Td2FwQW1vdW50CQERbWluU3dhcEFtb3VudFJFQUQBBQhzd2FwVHlwZQQLdG90YWxMb2NrZWQJAQ90b3RhbExvY2tlZFJFQUQBBQhzd2FwVHlwZQQRdG90YWxMb2NrZWRCeVVzZXIJARV0b3RhbExvY2tlZEJ5VXNlclJFQUQCBQhzd2FwVHlwZQUOdXNlckFkZHJlc3NTdHIEC25vZGVBZGRyZXNzCQEVZ2V0U3Rha2luZ05vZGVCeUluZGV4AQAABAxwcmljZUJ5SW5kZXgJAQ9nZXRQcmljZUhpc3RvcnkBCQEVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AQUKcHJpY2VJbmRleAQMaXNTd2FwQnlOb2RlCQAAAgULbm9kZUFkZHJlc3MFDnVzZXJBZGRyZXNzU3RyBBZiYWxhbmNlTG9ja01heEludGVydmFsAwUMaXNTd2FwQnlOb2RlCQEbbm9kZUJhbGFuY2VMb2NrSW50ZXJ2YWxSRUFEAAkBF2JhbGFuY2VMb2NrSW50ZXJ2YWxSRUFEAQUIc3dhcFR5cGUEEHNlbGZVbmxvY2tIZWlnaHQJAGQCBQZoZWlnaHQFFmJhbGFuY2VMb2NrTWF4SW50ZXJ2YWwEDnN3YXBVc2RuVm9sdW1lAwkAAAIFCHN3YXBUeXBlAghuZXV0cmlubwUJcG10QW1vdW50CQEWY29udmVydFdhdmVzVG9OZXV0cmlubwIFCXBtdEFtb3VudAUMcHJpY2VCeUluZGV4BAxzd2FwTGltaXRNYXgDCQAAAgUIc3dhcFR5cGUCCG5ldXRyaW5vBRB1c2RuU3dhcExpbWl0TWF4CQEWY29udmVydFdhdmVzVG9OZXV0cmlubwIFEXdhdmVzU3dhcExpbWl0TWF4BQxwcmljZUJ5SW5kZXgDCQBmAgUNbWluU3dhcEFtb3VudAUJcG10QW1vdW50CQERbWluU3dhcEFtb3VudEZBSUwCBQhzd2FwVHlwZQUNbWluU3dhcEFtb3VudAMDCQEBIQEFDGlzU3dhcEJ5Tm9kZQkAZgIFDnN3YXBMaW1pdFNwZW50AAAHCQACAQkArAICAjpZb3UgaGF2ZSBleGNlZWRlZCBzd2FwIGxpbWl0ISBOZXh0IGFsbG93ZWQgc3dhcCBoZWlnaHQgaXMgCQCkAwEJAGQCBQZoZWlnaHQFDmJsY2tzMkxtdFJlc2V0AwMJAQEhAQUMaXNTd2FwQnlOb2RlCQBmAgUOc3dhcFVzZG5Wb2x1bWUFDHN3YXBMaW1pdE1heAcJAAIBCQCsAgIJAKwCAgkArAICAi5Zb3UgaGF2ZSBleGNlZWRlZCB5b3VyIHN3YXAgbGltaXQhIFJlcXVlc3RlZDogCQCkAwEFDnN3YXBVc2RuVm9sdW1lAg0sIGF2YWlsYWJsZTogCQCkAwEFDHN3YXBMaW1pdE1heAMFCWlzQmxvY2tlZAkBFWVtZXJnZW5jeVNodXRkb3duRkFJTAAECWxlYXNlUGFydAMJAAACBQhzd2FwVHlwZQIFd2F2ZXMJARZwcmVwYXJlVW5sZWFzZUFuZExlYXNlAQAABQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5U3dhcFVzZXJTcGVudEluUGVyaW9kAQUOdXNlckFkZHJlc3NTdHIFDnN3YXBVc2RuVm9sdW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5VXNlckxhc3RTd2FwSGVpZ2h0AQUOdXNlckFkZHJlc3NTdHIFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFHRvdGFsTG9ja2VkQnlVc2VyS0VZAgUIc3dhcFR5cGUFDnVzZXJBZGRyZXNzU3RyCQBkAgURdG90YWxMb2NrZWRCeVVzZXIFCXBtdEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGdldEJhbGFuY2VVbmxvY2tCbG9ja0tleQEFDnVzZXJBZGRyZXNzU3RyBRBzZWxmVW5sb2NrSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG90YWxMb2NrZWRLRVkBBQhzd2FwVHlwZQkAZAIFC3RvdGFsTG9ja2VkBQlwbXRBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB3N3YXBLRVkCBQ51c2VyQWRkcmVzc1N0cgUGdHhJZDU4CQEPcGVuZGluZ1N3YXBEQVRBAwUIc3dhcFR5cGUFCXBtdEFtb3VudAUQc2VsZlVubG9ja0hlaWdodAUDbmlsBQlsZWFzZVBhcnQFBHVuaXQAD25NZXRyaWNJZHhQcmljZQAAABtuTWV0cmljSWR4VXNkbkxvY2tlZEJhbGFuY2UAAQAcbk1ldHJpY0lkeFdhdmVzTG9ja2VkQmFsYW5jZQACABFuTWV0cmljSWR4UmVzZXJ2ZQADABduTWV0cmljSWR4UmVzZXJ2ZUluVXNkbgAEABRuTWV0cmljSWR4VXNkblN1cHBseQAFABFuTWV0cmljSWR4U3VycGx1cwAGABhuTWV0cmljSWR4U3VycGx1c1BlcmNlbnQABwAMbk1ldHJpY0lkeEJSAAgAFG5NZXRyaWNJZHhOc2J0U3VwcGx5AAkAF25NZXRyaWNJZHhNYXhOc2J0U3VwcGx5AAoAFG5NZXRyaWNJZHhTdXJmU3VwcGx5AAsADGJGdW5jSWR4U3VyZgAAAA1iRnVuY0lkeFdhdmVzAAEADGJGdW5jSWR4VXNkbgACABRiRnVuY0lkeFJlc2VydmVTdGFydAADABNiRnVuY0lkeFN1cHBseVN0YXJ0AAQAD2JGdW5jSWR4QlJTdGFydAAFABJiRnVuY0lkeFJlc2VydmVFbmQABgARYkZ1bmNJZHhTdXBwbHlFbmQABwANYkZ1bmNJZHhCUkVuZAAIAAxiRnVuY0lkeFJlc3QACQASYkZ1bmNJZHhXYXZlc1ByaWNlAAoBD2NhbGNXaXRoZHJhd1cyVQIHd2F2ZXNJbgVwcmljZQQLb3V0QW10R3Jvc3MJARZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAgUHd2F2ZXNJbgUFcHJpY2UJAJsKCQULb3V0QW10R3Jvc3MFD25ldXRyaW5vQXNzZXRJZAAABQR1bml0AAAFB3dhdmVzSW4AAAAAAAABD2NhbGNXaXRoZHJhd1UyVwUGdXNkbkluBXByaWNlAmJyDnJlc2VydmVzSW5Vc2RuCnVzZG5TdXBwbHkEC2JyUHJvdGVjdGVkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ5iclByb3RlY3RlZEtFWQAFC0JSUFJPVEVDVEVEBBltYXhBbGxvd2VkVXNkbkJlZm9yZU1pbkJyAwkAZwIFC2JyUHJvdGVjdGVkBQJicgAACQBrAwkAZQIFDnJlc2VydmVzSW5Vc2RuCQBrAwULYnJQcm90ZWN0ZWQFCnVzZG5TdXBwbHkFBVBBVUxJBQVQQVVMSQkAZQIFBVBBVUxJBQticlByb3RlY3RlZAQWYWxsb3dlZFVzZG5CZWZvcmVNaW5CcgMJAGYCBQZ1c2RuSW4FGW1heEFsbG93ZWRVc2RuQmVmb3JlTWluQnIFGW1heEFsbG93ZWRVc2RuQmVmb3JlTWluQnIFBnVzZG5JbgQVYWxsb3dlZFVzZG5BZnRlck1pbkJyAwkAZgIFBnVzZG5JbgUZbWF4QWxsb3dlZFVzZG5CZWZvcmVNaW5CcgkAawMJAGUCBQZ1c2RuSW4FGW1heEFsbG93ZWRVc2RuQmVmb3JlTWluQnIFAmJyBQVQQVVMSQAABAthbGxvd2VkVXNkbgkAZAIFFmFsbG93ZWRVc2RuQmVmb3JlTWluQnIFFWFsbG93ZWRVc2RuQWZ0ZXJNaW5CcgQJdXNkbjJTVVJGCQBlAgUGdXNkbkluBQthbGxvd2VkVXNkbgQLb3V0QW10R3Jvc3MJARZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAgULYWxsb3dlZFVzZG4FBXByaWNlCQCbCgkFC291dEFtdEdyb3NzBQR1bml0BQl1c2RuMlNVUkYFD25ldXRyaW5vQXNzZXRJZAULb3V0QW10R3Jvc3MFC2FsbG93ZWRVc2RuBRltYXhBbGxvd2VkVXNkbkJlZm9yZU1pbkJyBRZhbGxvd2VkVXNkbkJlZm9yZU1pbkJyBRVhbGxvd2VkVXNkbkFmdGVyTWluQnIBDGNhbGNXaXRoZHJhdwQIc3dhcFR5cGUIaW5BbW91bnQFcHJpY2UPbmV1dHJpbm9NZXRyaWNzBApvdXRGZWVQYXJ0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ1vdXRGZWVQYXJ0S0VZAQUIc3dhcFR5cGUFDkRFRkFVTFRTV0FQRkVFAwMJAGYCAAAFCm91dEZlZVBhcnQGCQBnAgUKb3V0RmVlUGFydAUFUEFVTEkJAAIBCQCsAgIJAKwCAgkArAICAh5pbnZhbGlkIG91dEZlZVBhcnQgY29uZmlnIGZvciAFCHN3YXBUeXBlAhIgc3dhcDogb3V0RmVlUGFydD0JAKQDAQUKb3V0RmVlUGFydAQLYnJQcm90ZWN0ZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDmJyUHJvdGVjdGVkS0VZAAULQlJQUk9URUNURUQEAkJSCQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUMbk1ldHJpY0lkeEJSBA5yZXNlcnZlc0luVXNkbgkBBWFzSW50AQkAkQMCBQ9uZXV0cmlub01ldHJpY3MFF25NZXRyaWNJZHhSZXNlcnZlSW5Vc2RuBAp1c2RuU3VwcGx5CQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUUbk1ldHJpY0lkeFVzZG5TdXBwbHkEDG91dERhdGFUdXBsZQMJAAACBQhzd2FwVHlwZQIFd2F2ZXMJAQ9jYWxjV2l0aGRyYXdXMlUCBQhpbkFtb3VudAUFcHJpY2UDCQAAAgUIc3dhcFR5cGUCCG5ldXRyaW5vCQEPY2FsY1dpdGhkcmF3VTJXBQUIaW5BbW91bnQFBXByaWNlBQJCUgUOcmVzZXJ2ZXNJblVzZG4FCnVzZG5TdXBwbHkJAAIBCQCsAgICFlVuc3VwcG9ydGVkIHN3YXAgdHlwZSAFCHN3YXBUeXBlBAtvdXRBbXRHcm9zcwgFDG91dERhdGFUdXBsZQJfMQQKb3V0QXNzZXRJZAgFDG91dERhdGFUdXBsZQJfMgQPaW5BbXRUb1N1cmZQYXJ0CAUMb3V0RGF0YVR1cGxlAl8zBAlpbkFzc2V0SWQIBQxvdXREYXRhVHVwbGUCXzQECnVubGVhc2VBbXQIBQxvdXREYXRhVHVwbGUCXzUEDHBheW91dHNBcnJheQkBCWFwcGx5RmVlcwMFC291dEFtdEdyb3NzBQ9pbkFtdFRvU3VyZlBhcnQFCm91dEZlZVBhcnQECW91dE5ldEFtdAkAkQMCBQxwYXlvdXRzQXJyYXkFDElkeE5ldEFtb3VudAQJb3V0RmVlQW10CQCRAwIFDHBheW91dHNBcnJheQUMSWR4RmVlQW1vdW50BApvdXRTdXJmQW10AwkAZwIAAAUPaW5BbXRUb1N1cmZQYXJ0AAAECnN1cmZSZXN1bHQJAQlhc0FueUxpc3QBCQD8BwQFDG1hdGhDb250cmFjdAIUc3VyZkZ1bmN0aW9uUkVBRE9OTFkJAMwIAgUPaW5BbXRUb1N1cmZQYXJ0CQDMCAIFCWluQXNzZXRJZAUDbmlsBQNuaWwJAQVhc0ludAEJAJEDAgUKc3VyZlJlc3VsdAUMYkZ1bmNJZHhTdXJmCQCZCgcFCW91dE5ldEFtdAUKb3V0QXNzZXRJZAUKb3V0U3VyZkFtdAUPaW5BbXRUb1N1cmZQYXJ0BQp1bmxlYXNlQW10BQlvdXRGZWVBbXQFC291dEFtdEdyb3NzAQ5jb21tb25XaXRoZHJhdwUHYWNjb3VudAVpbmRleAhzd2FwVHhJZAx3aXRoZHJhd1R4SWQPbmV1dHJpbm9NZXRyaWNzBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWNjb3VudAQJZGF0YUFycmF5CQESc3dhcERhdGFGYWlsT3JSRUFEAgUHYWNjb3VudAUIc3dhcFR4SWQEEHNlbGZVbmxvY2tIZWlnaHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkYXRhQXJyYXkFFHNJZHhTZWxmVW5sb2NrSGVpZ2h0BAhzd2FwVHlwZQkAkQMCBQlkYXRhQXJyYXkFDHNJZHhTd2FwVHlwZQQIaW5BbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkYXRhQXJyYXkFDHNJZHhJbkFtb3VudAQKc3dhcFN0YXR1cwkAkQMCBQlkYXRhQXJyYXkFCnNJZHhTdGF0dXMEC3N0YXJ0SGVpZ2h0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGF0YUFycmF5BQ9zSWR4U3RhcnRIZWlnaHQECm91dEZlZVBhcnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDW91dEZlZVBhcnRLRVkBBQhzd2FwVHlwZQUOREVGQVVMVFNXQVBGRUUEC3RvdGFsTG9ja2VkCQEPdG90YWxMb2NrZWRSRUFEAQUIc3dhcFR5cGUEEXRvdGFsTG9ja2VkQnlVc2VyCQEVdG90YWxMb2NrZWRCeVVzZXJSRUFEAgUIc3dhcFR5cGUFB2FjY291bnQEDHVubG9ja0hlaWdodAUQc2VsZlVubG9ja0hlaWdodAQLaW5kZXhIZWlnaHQJARVnZXRIZWlnaHRQcmljZUJ5SW5kZXgBBQVpbmRleAQPcHJldkluZGV4SGVpZ2h0CQEVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AQkAZQIFBWluZGV4AAEEDHByaWNlQnlJbmRleAkBD2dldFByaWNlSGlzdG9yeQEFC2luZGV4SGVpZ2h0AwUJaXNCbG9ja2VkCQEVZW1lcmdlbmN5U2h1dGRvd25GQUlMAAMJAQIhPQIFCnN3YXBTdGF0dXMCB1BFTkRJTkcJAAIBAh9zd2FwIGhhcyBiZWVuIGFscmVhZHkgcHJvY2Vzc2VkAwkAZgIFDHVubG9ja0hlaWdodAUGaGVpZ2h0CQACAQkArAICCQCsAgICEXBsZWFzZSB3YWl0IGZvcjogCQCkAwEFDHVubG9ja0hlaWdodAIfIGJsb2NrIGhlaWdodCB0byB3aXRoZHJhdyBmdW5kcwMDAwkAZgIFBWluZGV4BQpwcmljZUluZGV4BgkAZgIFDHVubG9ja0hlaWdodAULaW5kZXhIZWlnaHQGAwkBAiE9AgUPcHJldkluZGV4SGVpZ2h0AAAJAGcCBQ9wcmV2SW5kZXhIZWlnaHQFDHVubG9ja0hlaWdodAcJAQ5wcmljZUluZGV4RkFJTAUFBWluZGV4BQpwcmljZUluZGV4BQtpbmRleEhlaWdodAUMdW5sb2NrSGVpZ2h0BQ9wcmV2SW5kZXhIZWlnaHQEDXdpdGhkcmF3VHVwbGUJAQxjYWxjV2l0aGRyYXcEBQhzd2FwVHlwZQUIaW5BbW91bnQFDHByaWNlQnlJbmRleAUPbmV1dHJpbm9NZXRyaWNzBAxvdXROZXRBbW91bnQIBQ13aXRoZHJhd1R1cGxlAl8xBApvdXRBc3NldElkCAUNd2l0aGRyYXdUdXBsZQJfMgQKb3V0U3VyZkFtdAgFDXdpdGhkcmF3VHVwbGUCXzMED2luQW10VG9TdXJmUGFydAgFDXdpdGhkcmF3VHVwbGUCXzQECnVubGVhc2VBbXQIBQ13aXRoZHJhd1R1cGxlAl81BAxvdXRGZWVBbW91bnQIBQ13aXRoZHJhd1R1cGxlAl82BAtvdXRBbXRHcm9zcwgFDXdpdGhkcmF3VHVwbGUCXzcDCQBnAgAABQtvdXRBbXRHcm9zcwkAAgECE2JhbGFuY2UgZXF1YWxzIHplcm8EAkJSCQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUMbk1ldHJpY0lkeEJSBAVzdGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFHRvdGFsTG9ja2VkQnlVc2VyS0VZAgUIc3dhcFR5cGUFB2FjY291bnQJAGUCBRF0b3RhbExvY2tlZEJ5VXNlcgUIaW5BbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b3RhbExvY2tlZEtFWQEFCHN3YXBUeXBlCQBlAgULdG90YWxMb2NrZWQFCGluQW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQxvdXROZXRBbW91bnQFCm91dEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB3N3YXBLRVkCBQdhY2NvdW50BQhzd2FwVHhJZAkBDmZpbmlzaFN3YXBEQVRBCQUJZGF0YUFycmF5BQxwcmljZUJ5SW5kZXgFDG91dE5ldEFtb3VudAUMb3V0RmVlQW1vdW50BQx1bmxvY2tIZWlnaHQFBWluZGV4BQx3aXRoZHJhd1R4SWQFCm91dFN1cmZBbXQFAkJSBQNuaWwEDXN1cmZDb25kaXRpb24DCQBmAgUKb3V0U3VyZkFtdAAABAtpc3N1ZVJlc3VsdAkA/AcEBQ9hdWN0aW9uQ29udHJhY3QCCWlzc3VlU3VyZgkAzAgCBQpvdXRTdXJmQW10CQDMCAIFB2FjY291bnQFA25pbAUDbmlsAwkAAAIFC2lzc3VlUmVzdWx0BQtpc3N1ZVJlc3VsdAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAADCQAAAgUNc3VyZkNvbmRpdGlvbgUNc3VyZkNvbmRpdGlvbgkAlQoDBQVzdGF0ZQkBD0F0dGFjaGVkUGF5bWVudAIFCm91dEFzc2V0SWQFDG91dEZlZUFtb3VudAUKdW5sZWFzZUFtdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLg8BaQELY29uc3RydWN0b3IMEm5ldXRyaW5vQXNzZXRJZFBybQ5ib25kQXNzZXRJZFBybRJhdWN0aW9uQ29udHJhY3RQcm0WbGlxdWlkYXRpb25Db250cmFjdFBybQ5ycGRDb250cmFjdFBybRtub2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlQcm0bYmFsYW5jZVdhdmVzTG9ja0ludGVydmFsUHJtHmJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbFBybRVtaW5XYXZlc1N3YXBBbW91bnRQcm0YbWluTmV1dHJpbm9Td2FwQW1vdW50UHJtFW5ldXRyaW5vT3V0RmVlUGFydFBybRJ3YXZlc091dEZlZVBhcnRQcm0EC2NoZWNrQ2FsbGVyCQEIdGhpc09ubHkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE25vIHBheW1lbnRzIGFsbG93ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUSTmV1dHJpbm9Bc3NldElkS2V5BRJuZXV0cmlub0Fzc2V0SWRQcm0JAMwIAgkBC1N0cmluZ0VudHJ5AgUOQm9uZEFzc2V0SWRLZXkFDmJvbmRBc3NldElkUHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFEkF1Y3Rpb25Db250cmFjdEtleQUSYXVjdGlvbkNvbnRyYWN0UHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkFFmxpcXVpZGF0aW9uQ29udHJhY3RQcm0JAMwIAgkBC1N0cmluZ0VudHJ5AgUOUlBEQ29udHJhY3RLZXkFDnJwZENvbnRyYWN0UHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFG05vZGVPcmFjbGVQcm92aWRlclB1YktleUtleQUbbm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRtCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWxLZXkFG2JhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbFBybQkAzAgCCQEMSW50ZWdlckVudHJ5AgUeQmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsS2V5BR5iYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWxQcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFFU1pbldhdmVzU3dhcEFtb3VudEtleQUVbWluV2F2ZXNTd2FwQW1vdW50UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkFGG1pbk5ldXRyaW5vU3dhcEFtb3VudFBybQkAzAgCCQEMSW50ZWdlckVudHJ5AgUVTmV1dHJpbm9PdXRGZWVQYXJ0S2V5BRVuZXV0cmlub091dEZlZVBhcnRQcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFEldhdmVzT3V0RmVlUGFydEtleQUSd2F2ZXNPdXRGZWVQYXJ0UHJtBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY29uc3RydWN0b3JWMgMMbWF0aENvbnRyYWN0E25zYnRTdGFraW5nQ29udHJhY3QUc3dhcHNUaW1lZnJhbWVCbG9ja3MEC2NoZWNrQ2FsbGVyCQEIdGhpc09ubHkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE25vIHBheW1lbnRzIGFsbG93ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUPTWF0aENvbnRyYWN0S2V5BQxtYXRoQ29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUWTnNidFN0YWtpbmdDb250cmFjdEtleQUTbnNidFN0YWtpbmdDb250cmFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEXN3YXBzVGltZWZyYW1lS0VZAAUUc3dhcHNUaW1lZnJhbWVCbG9ja3MFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNzd2FwV2F2ZXNUb05ldXRyaW5vAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECLHN3YXBXYXZlc1RvTmV1dHJpbm8gcmVxdWlyZSBvbmx5IG9uZSBwYXltZW50BANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQJAAIBAilPbmx5IFdhdmVzIHRva2VuIGlzIGFsbG93ZWQgZm9yIHN3YXBwaW5nLgQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAZ0eElkNTgJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQQc3dhcFBhcmFtc1NUUlVDVAkBEmFzU3dhcFBhcmFtc1NUUlVDVAEJAPwHBAUEdGhpcwIbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIAAAUDbmlsBQNuaWwEEGNvbW1vblN3YXBSZXN1bHQJAQpjb21tb25Td2FwBQIFd2F2ZXMIBQNwbXQGYW1vdW50BQt1c2VyQWRkcmVzcwUGdHhJZDU4BRBzd2FwUGFyYW1zU1RSVUNUBRBjb21tb25Td2FwUmVzdWx0AWkBE3N3YXBOZXV0cmlub1RvV2F2ZXMAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIsc3dhcE5ldXRyaW5vVG9XYXZlcyByZXF1aXJlIG9ubHkgb25lIHBheW1lbnQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQ9uZXV0cmlub0Fzc2V0SWQJAAIBAjpPbmx5IGFwcHJvcHJpYXRlIE5ldXRyaW5vIHRva2VucyBhcmUgYWxsb3dlZCBmb3Igc3dhcHBpbmcuBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBnR4SWQ1OAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBBBzd2FwUGFyYW1zU1RSVUNUCQESYXNTd2FwUGFyYW1zU1RSVUNUAQkA/AcEBQR0aGlzAhtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAMwIAgULdXNlckFkZHJlc3MJAMwIAgAABQNuaWwFA25pbAQQY29tbW9uU3dhcFJlc3VsdAkBCmNvbW1vblN3YXAFAghuZXV0cmlubwgFA3BtdAZhbW91bnQFC3VzZXJBZGRyZXNzBQZ0eElkNTgFEHN3YXBQYXJhbXNTVFJVQ1QFEGNvbW1vblN3YXBSZXN1bHQBaQEId2l0aGRyYXcDB2FjY291bnQFaW5kZXgIc3dhcFR4SWQEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE25vIHBheW1lbnRzIGFsbG93ZWQED25ldXRyaW5vTWV0cmljcwkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUDbmlsBQNuaWwEAkJSCQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUMbk1ldHJpY0lkeEJSBAtjb21tb25UdXBsZQkBDmNvbW1vbldpdGhkcmF3BQUHYWNjb3VudAUFaW5kZXgFCHN3YXBUeElkBQR0eElkBQ9uZXV0cmlub01ldHJpY3MEBXN0YXRlCAULY29tbW9uVHVwbGUCXzEEA2ZlZQgFC2NvbW1vblR1cGxlAl8yBAp1bmxlYXNlQW10CAULY29tbW9uVHVwbGUCXzMEEXVubGVhc2VJbnZPckVtcHR5CQD8BwQFBHRoaXMCF2ludGVybmFsVW5sZWFzZUFuZExlYXNlCQDMCAIFCnVubGVhc2VBbXQFA25pbAUDbmlsAwkAAAIFEXVubGVhc2VJbnZPckVtcHR5BRF1bmxlYXNlSW52T3JFbXB0eQQJZ25zYnREYXRhCQEJYXNBbnlMaXN0AQkA/AcEBRdnbnNidENvbnRyb2xsZXJDb250cmFjdAIUZ25zYnRJbmZvU1lTUkVBRE9OTFkJAMwIAgIACQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsBA1nbnNidEFtdFRvdGFsCQEFYXNJbnQBCQCRAwIFCWduc2J0RGF0YQABBBVnbnNidEFtdEZyb21TdXJmVG90YWwJAQVhc0ludAEJAJEDAgkBCWFzQW55TGlzdAEJAJEDAgUJZ25zYnREYXRhAAMAAwQLc3VyZkZlZUFtdDEDCQECIT0CBQ1nbnNidEFtdFRvdGFsAAAJAGsDCAUDZmVlBmFtb3VudAUVZ25zYnRBbXRGcm9tU3VyZlRvdGFsBQ1nbnNidEFtdFRvdGFsAAAEC3N1cmZGZWVBbXQyAwkBAiE9AgUNZ25zYnRBbXRUb3RhbAAACQBrAwgFA2ZlZQZhbW91bnQJAGUCBQVQQVVMSQUCQlIFBVBBVUxJAAAECnN1cmZGZWVBbXQJAJYDAQkAzAgCBQtzdXJmRmVlQW10MQkAzAgCBQtzdXJmRmVlQW10MgUDbmlsBApuc2J0RmVlQW10CQBlAggFA2ZlZQZhbW91bnQFCnN1cmZGZWVBbXQEC3N1cmZEZXBvc2l0AwkAZgIFCnN1cmZGZWVBbXQAAAQHc3VyZkludgkA/AcEBRNzdXJmU3Rha2luZ0NvbnRyYWN0AgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIIBQNmZWUHYXNzZXRJZAUKc3VyZkZlZUFtdAUDbmlsAwkAAAIFB3N1cmZJbnYFB3N1cmZJbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFC3N1cmZEZXBvc2l0BQtzdXJmRGVwb3NpdAQLbnNidERlcG9zaXQDCQBmAgUKbnNidEZlZUFtdAAABAduc2J0SW52CQD8BwQFE25zYnRTdGFraW5nQ29udHJhY3QCB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggFA2ZlZQdhc3NldElkBQpuc2J0RmVlQW10BQNuaWwDCQAAAgUHbnNidEludgUHbnNidEludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgULbnNidERlcG9zaXQFC25zYnREZXBvc2l0BQVzdGF0ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARdpbnRlcm5hbFVubGVhc2VBbmRMZWFzZQENdW5sZWFzZUFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLGludGVybmFsVW5sZWFzZUFuZExlYXNlIGlzIG5vdCBwdWJsaWMgbWV0aG9kCQEWcHJlcGFyZVVubGVhc2VBbmRMZWFzZQEFDXVubGVhc2VBbW91bnQBaQESdHJhbnNmZXJVc2RuVG9Vc2VyAgZhbW91bnQEYWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUPYXVjdGlvbkNvbnRyYWN0CQACAQIjT25seSBhdWN0aW9uIGNvbnRyYWN0IGlzIGF1dGhvcml6ZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgUGYW1vdW50BQ9uZXV0cmlub0Fzc2V0SWQFA25pbAFpAQthY2NlcHRXYXZlcwADAwkBAiE9AggFAWkGY2FsbGVyBQ9hdWN0aW9uQ29udHJhY3QJAQIhPQIIBQFpBmNhbGxlcgUSZ292ZXJuYW5jZUNvbnRyYWN0BwkAAgECQ0N1cnJlbnRseSBvbmx5IGF1Y3Rpb24gYW5kIGdvdmVybmFuY2UgY29udHJhY3RzIGFyZSBhbGxvd2VkIHRvIGNhbGwJAJQKAgkBFnByZXBhcmVVbmxlYXNlQW5kTGVhc2UBAAACB3N1Y2Nlc3MBaQEPYXBwcm92ZUxlYXNpbmdzAwZuTGlzdFMIZ3JvdXBOdW0EbEFtdAQFbklkeHMJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwUDbmlsBAdtbmdQdWJTCQELdmFsdWVPckVsc2UCCQCiCAECHCVzJXNfX2NmZ19fbGVhc2luZ01hbmFnZXJQdWICLDdBVU1YNTR1a1lNWXZQbW1hN3lvRmY1TmpaaHM0QnU1bnozRXo5RVY4c3VyBAZtbmdQdWIJANkEAQUHbW5nUHViUwQObm9kZVJlZ0FkZHJTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQIfJXMlc19fY2ZnX19ub2Rlc1JlZ2lzdHJ5QWRkcmVzcwIjM1A5dktxUUtqVWRtcFhBZmlXYXU4a3JSRVlBWTFYcjY5cEUEC25vZGVSZWdBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5ub2RlUmVnQWRkclN0cgQRbEdyb3VwTm9kZUxpc3RLRVkJARhnZXRMZWFzZUdyb3VwTm9kZUxpc3RLZXkBBQhncm91cE51bQQKbEdyTm9kZU9wdAkAnQgCBQR0aGlzBRFsR3JvdXBOb2RlTGlzdEtFWQMJAQlpc0RlZmluZWQBBQpsR3JOb2RlT3B0CQACAQkArAICCQCsAgICBmdyb3VwIAkApAMBBQhncm91cE51bQIUIGFscmVhZHkgaW5pdGlhbGl6ZWQEBW5MaXN0CQC1CQIFBm5MaXN0UwUDU0VQBAhleHBDb3VudAkAkAMBBQVuSWR4cwMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUGbW5nUHViCQACAQIeYXBwcm92ZUxlYXNpbmdzIG5vdCBhdXRob3JpemVkBA0kdDAzNDY5NTM0NzU3CQEMcmVhZE5vZGVJbmZvAQAABAZuQWRkcjAIBQ0kdDAzNDY5NTM0NzU3Al8xBAhsQW10S0VZMAgFDSR0MDM0Njk1MzQ3NTcCXzIEBWxBbXQwCAUNJHQwMzQ2OTUzNDc1NwJfMwQHbElkS0VZMAgFDSR0MDM0Njk1MzQ3NTcCXzQEBGxJZDAIBQ0kdDAzNDY5NTM0NzU3Al81BAVuZXdMMAkAxAgCBQZuQWRkcjAJAGUCBQVsQW10MAkAaAIFBGxBbXQFCGV4cENvdW50BAp2YWxpZGF0aW9uCQD8BwQFC25vZGVSZWdBZGRyAhp2YWxpZGF0ZUFuZEFwcHJvdmVMZWFzaW5ncwkAzAgCBQZuTGlzdFMFA25pbAUDbmlsAwkAAAIFCnZhbGlkYXRpb24FCnZhbGlkYXRpb24KASNmb3JFYWNoTm9kZVZhbGlkYXRlQW5kR2VuZXJhdGVMZWFzZQIBYQFpBARub2RlCQCRAwIFBW5MaXN0BQFpBAJsYQkAxAgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQRub2RlBQRsQW10CQDOCAIFAWEJAMwIAgUCbGEJAMwIAgkBC0JpbmFyeUVudHJ5AgkBFmdldExlYXNlSWRCeUFkZHJlc3NLZXkBBQRub2RlCQEFbGNhbGMBBQJsYQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmdldExlYXNlQW1vdW50QnlBZGRyZXNzS2V5AQUEbm9kZQUEbEFtdAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgURbEdyb3VwTm9kZUxpc3RLRVkFBm5MaXN0UwkAzAgCCQELQmluYXJ5RW50cnkCBQdsSWRLRVkwCQEFbGNhbGMBBQVuZXdMMAkAzAgCCQEMSW50ZWdlckVudHJ5AgUIbEFtdEtFWTAIBQVuZXdMMAZhbW91bnQJAMwIAgkBC0xlYXNlQ2FuY2VsAQUEbElkMAkAzAgCBQVuZXdMMAUDbmlsCgACJGwFBW5JZHhzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJASNmb3JFYWNoTm9kZVZhbGlkYXRlQW5kR2VuZXJhdGVMZWFzZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERcmViYWxhbmNlTGVhc2luZ3MCBmFtb3VudAhncm91cE51bQQFbklkeHMJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwUDbmlsBAdtbmdQdWJTCQELdmFsdWVPckVsc2UCCQCiCAECHCVzJXNfX2NmZ19fbGVhc2luZ01hbmFnZXJQdWICLDdBVU1YNTR1a1lNWXZQbW1hN3lvRmY1TmpaaHM0QnU1bnozRXo5RVY4c3VyBAZtbmdQdWIJANkEAQUHbW5nUHViUwQRbEdyb3VwTm9kZUxpc3RLRVkJARhnZXRMZWFzZUdyb3VwTm9kZUxpc3RLZXkBBQhncm91cE51bQQGbkxpc3RTCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwURbEdyb3VwTm9kZUxpc3RLRVkEBW5MaXN0CQC1CQIFBm5MaXN0UwUDU0VQAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQZtbmdQdWIJAAIBAiByZWJhbGFuY2VMZWFzaW5ncyBub3QgYXV0aG9yaXplZAQKdW5sZWFzZUFtdAkAZAIJAGkCBQZhbW91bnQJAJADAQUFbkxpc3QAAQQNJHQwMzU5OTczNjA1OQkBDHJlYWROb2RlSW5mbwEAAAQGbkFkZHIwCAUNJHQwMzU5OTczNjA1OQJfMQQIbEFtdEtFWTAIBQ0kdDAzNTk5NzM2MDU5Al8yBAVsQW10MAgFDSR0MDM1OTk3MzYwNTkCXzMEB2xJZEtFWTAIBQ0kdDAzNTk5NzM2MDU5Al80BARsSWQwCAUNJHQwMzU5OTczNjA1OQJfNQQFbmV3TDAJAMQIAgUGbkFkZHIwCQBkAgUFbEFtdDAJAGgCBQp1bmxlYXNlQW10CQCQAwEFBW5MaXN0CgEUZm9yRWFjaE5vZGVEb1VubGVhc2UCAWEBaQQEbm9kZQkAkQMCBQVuTGlzdAUBaQQGbElkS0VZCQEWZ2V0TGVhc2VJZEJ5QWRkcmVzc0tleQEFBG5vZGUEA2xJZAkBEUBleHRyTmF0aXZlKDEwNTIpAgUEdGhpcwUGbElkS0VZBAdsQW10S0VZCQEaZ2V0TGVhc2VBbW91bnRCeUFkZHJlc3NLZXkBBQRub2RlBARsQW10CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQdsQW10S0VZBAN1bGEJAQtMZWFzZUNhbmNlbAEJAQV2YWx1ZQEFA2xJZAQCbGEJAMQIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEbm9kZQkAZQIFBGxBbXQFCnVubGVhc2VBbXQJAM4IAgUBYQkAzAgCCQELTGVhc2VDYW5jZWwBCQEFdmFsdWUBBQNsSWQJAMwIAgUCbGEJAMwIAgkBC0JpbmFyeUVudHJ5AgUGbElkS0VZCQEFbGNhbGMBBQJsYQkAzAgCCQEMSW50ZWdlckVudHJ5AgUHbEFtdEtFWQgFAmxhBmFtb3VudAUDbmlsCQDOCAIKAAIkbAUFbklkeHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBFGZvckVhY2hOb2RlRG9VbmxlYXNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAkAzAgCCQELQmluYXJ5RW50cnkCBQdsSWRLRVkwCQEFbGNhbGMBBQVuZXdMMAkAzAgCCQEMSW50ZWdlckVudHJ5AgUIbEFtdEtFWTAIBQVuZXdMMAZhbW91bnQJAMwIAgkBC0xlYXNlQ2FuY2VsAQUEbElkMAkAzAgCBQVuZXdMMAUDbmlsAWkBG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQIOdXNlckFkZHJlc3NTdHIJZ25zYnREaWZmBAlnbnNidERhdGEJAQlhc0FueUxpc3QBCQD8BwQFF2duc2J0Q29udHJvbGxlckNvbnRyYWN0AhRnbnNidEluZm9TWVNSRUFET05MWQkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAQIZ25zYnRBbXQJAGQCCQEFYXNJbnQBCQCRAwIFCWduc2J0RGF0YQAABQlnbnNidERpZmYEDWduc2J0QW10VG90YWwJAGQCCQEFYXNJbnQBCQCRAwIFCWduc2J0RGF0YQABBQlnbnNidERpZmYEDXN3YXBMaW1pdERhdGEJAQlhc0FueUxpc3QBCQD8BwQFDG1hdGhDb250cmFjdAIVY2FsY1N3YXBMaW1pdFJFQURPTkxZCQDMCAIFCGduc2J0QW10BQNuaWwFA25pbAQXd2F2ZXNTd2FwTGltaXRJblVzZG5NYXgJAQVhc0ludAEJAJEDAgUNc3dhcExpbWl0RGF0YQAABBF3YXZlc1N3YXBMaW1pdE1heAkBBWFzSW50AQkAkQMCBQ1zd2FwTGltaXREYXRhAAEEEHVzZG5Td2FwTGltaXRNYXgJAQVhc0ludAEJAJEDAgUNc3dhcExpbWl0RGF0YQACBA5sYXN0U3dhcEhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEVa2V5VXNlckxhc3RTd2FwSGVpZ2h0AQUOdXNlckFkZHJlc3NTdHIAAAQXc3dhcExpbWl0VGltZWxpZmVCbG9ja3MJARJzd2Fwc1RpbWVmcmFtZVJFQUQABBlwYXNzZWRCbG9ja3NBZnRlckxhc3RTd2FwCQBlAgUGaGVpZ2h0BQ5sYXN0U3dhcEhlaWdodAQRaXNTd2FwVGltZWxpZmVOZXcJAGcCBRlwYXNzZWRCbG9ja3NBZnRlckxhc3RTd2FwBRdzd2FwTGltaXRUaW1lbGlmZUJsb2NrcwQUc3dhcExpbWl0U3BlbnRJblVzZG4DBRFpc1N3YXBUaW1lbGlmZU5ldwAACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARhrZXlTd2FwVXNlclNwZW50SW5QZXJpb2QBBQ51c2VyQWRkcmVzc1N0cgAABA5ibGNrczJMbXRSZXNldAMFEWlzU3dhcFRpbWVsaWZlTmV3AAAJAGUCBRdzd2FwTGltaXRUaW1lbGlmZUJsb2NrcwUZcGFzc2VkQmxvY2tzQWZ0ZXJMYXN0U3dhcAkAlAoCBQNuaWwJAJkKBwUXd2F2ZXNTd2FwTGltaXRJblVzZG5NYXgFFHN3YXBMaW1pdFNwZW50SW5Vc2RuBQ5ibGNrczJMbXRSZXNldAUIZ25zYnRBbXQFDWduc2J0QW10VG90YWwFEXdhdmVzU3dhcExpbWl0TWF4BRB1c2RuU3dhcExpbWl0TWF4AWkBHWNhbGNXaXRoZHJhd1Jlc3VsdFNZU1JFQURPTkxZAwhzd2FwVHlwZQhpbkFtb3VudAVwcmljZQQPbmV1dHJpbm9NZXRyaWNzCQEJYXNBbnlMaXN0AQkA/AcEBQxtYXRoQ29udHJhY3QCGmNhbGNOZXV0aW5vTWV0cmljc1JFQURPTkxZBQNuaWwFA25pbAkAlAoCBQNuaWwJAQxjYWxjV2l0aGRyYXcEBQhzd2FwVHlwZQUIaW5BbW91bnQFBXByaWNlBQ9uZXV0cmlub01ldHJpY3MBaQEUcmVwbGFjZUNvbW11bml0eU5vZGUECm9sZEFkZHJTdHIKbmV3QWRkclN0cghncm91cE51bQ1wZW5hbHR5QW1vdW50BAdtbmdQdWJTCQELdmFsdWVPckVsc2UCCQCiCAECHCVzJXNfX2NmZ19fbGVhc2luZ01hbmFnZXJQdWICLDdBVU1YNTR1a1lNWXZQbW1hN3lvRmY1TmpaaHM0QnU1bnozRXo5RVY4c3VyBAZtbmdQdWIJANkEAQUHbW5nUHViUwMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUGbW5nUHViCQACAQIjcmVwbGFjZUNvbW11bml0eU5vZGUgbm90IGF1dGhvcml6ZWQECGdyb3VwS2V5CQEYZ2V0TGVhc2VHcm91cE5vZGVMaXN0S2V5AQUIZ3JvdXBOdW0EDmdyb3VwTm9kZUxpc3RTCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwUIZ3JvdXBLZXkDCQEBIQEJAQhjb250YWlucwIFDmdyb3VwTm9kZUxpc3RTBQpvbGRBZGRyU3RyCQACAQkArAICCQCsAgIJAKwCAgIGR3JvdXAgCQCkAwEFCGdyb3VwTnVtAhogZG9lcyBub3QgY29udGFpbiBhZGRyZXNzIAUKb2xkQWRkclN0cgQJZG9SZXBsYWNlCQD8BwQFFG5vZGVSZWdpc3RyeUNvbnRyYWN0AhNyZXBsYWNlQXBwcm92ZWROb2RlCQDMCAIFCm9sZEFkZHJTdHIJAMwIAgUKbmV3QWRkclN0cgkAzAgCBQhncm91cE51bQkAzAgCBQ1wZW5hbHR5QW1vdW50BQNuaWwFA25pbAMJAAACBQlkb1JlcGxhY2UFCWRvUmVwbGFjZQQNb2xkTGVhc2VJZEtleQkBFmdldExlYXNlSWRCeUFkZHJlc3NLZXkBBQpvbGRBZGRyU3RyBA5vbGRMZWFzZUFtdEtleQkBGmdldExlYXNlQW1vdW50QnlBZGRyZXNzS2V5AQUKb2xkQWRkclN0cgQIbGVhc2VBbXQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFDm9sZExlYXNlQW10S2V5BA1uZXdMZWFzZUlkS2V5CQEWZ2V0TGVhc2VJZEJ5QWRkcmVzc0tleQEFCm9sZEFkZHJTdHIEDm5ld0xlYXNlQW10S2V5CQEaZ2V0TGVhc2VBbW91bnRCeUFkZHJlc3NLZXkBBQpvbGRBZGRyU3RyBAhuZXdMZWFzZQkAxAgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQpuZXdBZGRyU3RyBQhsZWFzZUFtdAQVdXBkYXRlZEdyb3VwTm9kZUxpc3RTCQC5CQIJALUJAgUOZ3JvdXBOb2RlTGlzdFMFCm9sZEFkZHJTdHIFCm5ld0FkZHJTdHIJAJQKAgkAzAgCCQELTGVhc2VDYW5jZWwBCQERQGV4dHJOYXRpdmUoMTA1NykBBQ1vbGRMZWFzZUlkS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFDW9sZExlYXNlSWRLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUOb2xkTGVhc2VBbXRLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgUIZ3JvdXBLZXkFFXVwZGF0ZWRHcm91cE5vZGVMaXN0UwkAzAgCBQhuZXdMZWFzZQkAzAgCCQELQmluYXJ5RW50cnkCBQ1uZXdMZWFzZUlkS2V5CQEFbGNhbGMBBQhuZXdMZWFzZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUObmV3TGVhc2VBbXRLZXkFCGxlYXNlQW10BQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEfdXBkYXRlUmVzZXJ2ZXNBbmROZXV0cmlub1N1cHBseQAKARZnZXROdW1iZXJCeUtleUludGVybmFsAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAduTWV0cml4CQEJYXNBbnlMaXN0AQkA/AcEBQxtYXRoQ29udHJhY3QCGmNhbGNOZXV0aW5vTWV0cmljc1JFQURPTkxZBQNuaWwFA25pbAQDaWR4CQEWZ2V0TnVtYmVyQnlLZXlJbnRlcm5hbAECInVwZGF0ZVJlc2VydmVzQW5kTmV1dHJpbm9TdXBwbHlJZHgEBm5ld0lkeAkAZAIFA2lkeAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCAiJ1cGRhdGVSZXNlcnZlc0FuZE5ldXRyaW5vU3VwcGx5SWR4BQZuZXdJZHgJAMwIAgkBDEludGVnZXJFbnRyeQICB3Jlc2VydmUJAQVhc0ludAEJAJEDAgUHbk1ldHJpeAADCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5uZXV0cmlub1N1cHBseQkBBWFzSW50AQkAkQMCBQduTWV0cml4AAUJAMwIAgkBDEludGVnZXJFbnRyeQICDnJlc2VydmVzSW5Vc2RuCQEWY29udmVydFdhdmVzVG9OZXV0cmlubwIJAQVhc0ludAEJAJEDAgUHbk1ldHJpeAADCQEFYXNJbnQBCQCRAwIFB25NZXRyaXgAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIHc3VycGx1cwkBBWFzSW50AQkAkQMCBQduTWV0cml4AAYJAMwIAgkBDEludGVnZXJFbnRyeQICB2RlZmljaXQJAQEtAQkBBWFzSW50AQkAkQMCBQduTWV0cml4AAYFA25pbAFpARZ3YXZlc0JhbGFuY2VzVnNQYXltZW50AAQBYgkA7wcBBQR0aGlzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhZ3YXZlc0JhbGFuY2VfYXZhaWxhYmxlCAUBYglhdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQICFHdhdmVzQmFsYW5jZV9yZWd1bGFyCAUBYgdyZWd1bGFyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhd3YXZlc0JhbGFuY2VfZ2VuZXJhdGluZwgFAWIKZ2VuZXJhdGluZwkAzAgCCQEMSW50ZWdlckVudHJ5AgIWd2F2ZXNCYWxhbmNlX2VmZmVjdGl2ZQgFAWIJZWZmZWN0aXZlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg13YXZlc19wYXltZW50CAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDbmlsAQJ0eAEGdmVyaWZ5AAQCaWQJANgEAQgFAnR4AmlkBBNwdWJLZXlBZG1pbnNMaXN0U3RyCQC5CQIJAMwIAgIsRXh0RUVLMTlubUtqOW1DcG5XeXZFRUpGWUFUTE1jVkVNdm9oaFVIa3lITm0JAMwIAgIsRXY1cHk1RmZCUVg5Y1pwWUtuZlFyVEI0OUJ5ZjhRbXBaV2VEVlJpbTR5VjcJAMwIAgIsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIJAMwIAgIsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIFA25pbAUDU0VQBBBwdWJLZXlBZG1pbnNMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPY29udHJvbENvbnRyYWN0Agwlc19fbXVsdGlzaWcFE3B1YktleUFkbWluc0xpc3RTdHIFA1NFUAQFY291bnQJAGQCCQBkAgkAZAIDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAAAAAEAAAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAEAAQAAAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAgABAAADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwADCQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAADAAIAAAQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIVU3BvbnNvckZlZVRyYW5zYWN0aW9uBAlzcG9uc29yVHgFByRtYXRjaDADCQEbY2hlY2tJc1ZhbGlkTWluU3BvbnNvcmVkRmVlAQUJc3BvbnNvclR4CQBnAgUFY291bnQAAwcJAGcCBQVjb3VudAADlw42pw==", "chainId": 84, "height": 2277712, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FBKpVvYZtNmJoLSRfrT4K54ipi1SzUzGcHGVAr44x6No Next: HfuG7NEucEjM7vF7E2obE6yPmbk9G5nSchDuNxQwBGCm Diff:
OldNewDifferences
131131
132132 let S = 11
133133
134-func T () = "%s%s__config__controlAddress"
134+let T = 12
135+
136+let U = 13
137+
138+func V () = "%s%s__config__controlAddress"
135139
136140
137-func U () = "%s__controlConfig"
141+func W () = "%s__controlConfig"
138142
139143
140-func V (W) = split(a(W, U()), z)
144+func X (Y) = split_4C(a(Y, W()), z)
141145
142146
143-func X (Y,Z) = valueOrErrorMessage(addressFromString(Y[Z]), ("Control cfg doesn't contain address at index " + toString(Z)))
147+func Z (aa,ab) = valueOrErrorMessage(addressFromString(aa[ab]), ("Control cfg doesn't contain address at index " + toString(ab)))
144148
145149
146-let aa = addressFromStringValue(valueOrElse(getString(this, T()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
150+let ac = addressFromStringValue(valueOrElse(getString(this, V()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
147151
148-let Y = V(aa)
152+let aa = X(ac)
149153
150-let ab = X(Y, L)
154+let ad = Z(aa, L)
151155
152-let ac = X(Y, P)
156+let ae = Z(aa, P)
153157
154-let ad = X(Y, R)
158+let af = Z(aa, R)
155159
156-let ae = X(Y, S)
160+let ag = Z(aa, S)
157161
158-let af = X(Y, J)
162+let ah = Z(aa, J)
159163
160-let ag = X(Y, O)
164+let ai = Z(aa, O)
161165
162-let ah = "neutrino_asset_id"
166+let aj = Z(aa, U)
163167
164-let ai = "bond_asset_id"
168+let ak = "neutrino_asset_id"
165169
166-let aj = "auction_contract"
170+let al = "bond_asset_id"
167171
168-let ak = "nsbtStakingContract"
172+let am = "auction_contract"
169173
170-let al = "liquidation_contract"
174+let an = "nsbtStakingContract"
171175
172-let am = "rpd_contract"
176+let ao = "liquidation_contract"
173177
174-let an = "control_contract"
178+let ap = "rpd_contract"
175179
176-let ao = "math_contract"
180+let aq = "control_contract"
177181
178-let ap = "balance_waves_lock_interval"
182+let ar = "math_contract"
179183
180-let aq = "balance_neutrino_lock_interval"
184+let as = "balance_waves_lock_interval"
181185
182-let ar = "min_waves_swap_amount"
186+let at = "balance_neutrino_lock_interval"
183187
184-let as = "min_neutrino_swap_amount"
188+let au = "min_waves_swap_amount"
185189
186-let at = "node_oracle_provider"
190+let av = "min_neutrino_swap_amount"
187191
188-let au = "neutrinoOut_swap_feePart"
192+let aw = "node_oracle_provider"
189193
190-let av = "wavesOut_swap_feePart"
194+let ax = "neutrinoOut_swap_feePart"
191195
192-func aw (b) = ("%s__" + b)
196+let ay = "wavesOut_swap_feePart"
197+
198+func az (b) = ("%s__" + b)
193199
194200
195-let ax = "price"
201+let aA = "price"
196202
197-let ay = "price_index"
203+let aB = "price_index"
198204
199-let az = "is_blocked"
205+let aC = "is_blocked"
200206
201-func aA (aB) = ((ax + "_") + toString(aB))
207+func aD (aE) = ((aA + "_") + toString(aE))
202208
203209
204-func aC (aD) = ((ay + "_") + toString(aD))
210+func aF (aG) = ((aB + "_") + toString(aG))
205211
206212
207-func aE (Z) = g(makeString(["%s%d%s", "lease", toString(Z), "nodeAddress"], z))
213+func aH (ab) = g(makeString(["%s%d%s", "lease", toString(ab), "nodeAddress"], z))
208214
209215
210-func aF (Z) = addressFromStringValue(aE(Z))
216+func aI (ab) = addressFromStringValue(aH(ab))
211217
212218
213-func aG () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * A))
219+func aJ () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * A))
214220
215221
216-func aH (aI) = ("balance_unlock_block_" + aI)
222+func aK (aL) = ("balance_unlock_block_" + aL)
217223
218224
219-func aJ (aK) = makeString(["%s%d%s", "lease", toString(aK), "id"], z)
225+func aM (aN) = makeString(["%s%d%s", "lease", toString(aN), "id"], z)
220226
221227
222-func aL (aM) = makeString(["%s%s%s", "leaseByAddress", aM, "id"], z)
228+func aO (aP) = makeString(["%s%s%s", "leaseByAddress", aP, "id"], z)
223229
224230
225-func aN (aK) = makeString(["%s%d%s", "lease", toString(aK), "amount"], z)
231+func aQ (aN) = makeString(["%s%d%s", "lease", toString(aN), "amount"], z)
226232
227233
228-func aO (aM) = makeString(["%s%s%s", "leaseByAddress", aM, "amount"], z)
234+func aR (aP) = makeString(["%s%s%s", "leaseByAddress", aP, "amount"], z)
229235
230236
231-func aP (aQ) = makeString(["%s%d%s", "leaseGroup", toString(aQ), "nodeList"], z)
237+func aS (aT) = makeString(["%s%d%s", "leaseGroup", toString(aT), "nodeList"], z)
232238
233239
234-func aR (aS) = (("min_" + aS) + "_swap_amount")
240+func aU (aV) = (("min_" + aV) + "_swap_amount")
235241
236242
237-func aT (aS) = ("balance_lock_" + aS)
243+func aW (aV) = ("balance_lock_" + aV)
238244
239245
240-func aU (aS,aI) = makeString(["balance_lock", aS, aI], "_")
246+func aX (aV,aL) = makeString(["balance_lock", aV, aL], "_")
241247
242248
243-func aV (aS) = (("balance_" + aS) + "_lock_interval")
249+func aY (aV) = (("balance_" + aV) + "_lock_interval")
244250
245251
246-func aW () = "balance_node_lock_interval"
252+func aZ () = "balance_node_lock_interval"
247253
248254
249-func aX (aS) = (aS + "Out_swap_feePart")
255+func ba (aV) = (aV + "Out_swap_feePart")
250256
251257
252-func aY () = "swaps_timeframe"
258+func bb () = "swaps_timeframe"
253259
254260
255-func aZ () = "min_BR_protection_level"
261+func bc () = "min_BR_protection_level"
256262
257263
258-func ba (aS) = valueOrElse(getInteger(this, aR(aS)), 0)
264+func bd (aV) = valueOrElse(getInteger(this, aU(aV)), 0)
259265
260266
261-func bb () = valueOrElse(getInteger(this, aY()), 1440)
267+func be () = valueOrElse(getInteger(this, bb()), 1440)
262268
263269
264-func bc (aS) = valueOrElse(getInteger(this, aT(aS)), 0)
270+func bf (aV) = valueOrElse(getInteger(this, aW(aV)), 0)
265271
266272
267-func bd (aS,aI) = valueOrElse(getInteger(this, aU(aS, aI)), 0)
273+func bg (aV,aL) = valueOrElse(getInteger(this, aX(aV, aL)), 0)
268274
269275
270-func be (aS) = valueOrElse(getInteger(this, aV(aS)), 1440)
276+func bh (aV) = valueOrElse(getInteger(this, aY(aV)), 1440)
271277
272278
273-func bf () = valueOrElse(getInteger(this, aW()), 1)
279+func bi () = valueOrElse(getInteger(this, aZ()), 1)
274280
275281
276-func bg (bh) = makeString(["%s%s", "swapUserSpentInPeriod", bh], z)
282+func bj (bk) = makeString(["%s%s", "swapUserSpentInPeriod", bk], z)
277283
278284
279-func bi (bh) = makeString(["%s%s", "userLastSwapHeight", bh], z)
285+func bl (bk) = makeString(["%s%s", "userLastSwapHeight", bk], z)
280286
281287
282-func bj (bk,bl) = fraction(fraction(bk, C, bl), A, B)
288+func bm (bn,bo) = fraction(fraction(bn, C, bo), A, B)
283289
284290
285-func bm (bk,bl) = fraction(fraction(bk, bl, C), B, A)
291+func bp (bn,bo) = fraction(fraction(bn, bo, C), B, A)
286292
287293
288-func bn (bk,bl) = bm(bk, bl)
294+func bq (bn,bo) = bp(bn, bo)
289295
290296
291-func bo (bp) = split(bp, ",")
297+func br (bs) = split(bs, ",")
292298
293299
294-func bq (aS,br) = throw(((("The specified amount in " + aS) + " swap is less than the required minimum of ") + toString(br)))
300+func bt (aV,bu) = throw(((("The specified amount in " + aV) + " swap is less than the required minimum of ") + toString(bu)))
295301
296302
297-func bs () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
303+func bv () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
298304
299305
300-func bt (aD,bu,bv,bw,bx) = throw(((((((((("invalid price history index: index=" + toString(aD)) + " priceIndex=") + toString(bu)) + " indexHeight=") + toString(bv)) + " unlockHeight=") + toString(bw)) + " prevIndexHeight=") + toString(bx)))
306+func bw (aG,bx,by,bz,bA) = throw(((((((((("invalid price history index: index=" + toString(aG)) + " priceIndex=") + toString(bx)) + " indexHeight=") + toString(by)) + " unlockHeight=") + toString(bz)) + " prevIndexHeight=") + toString(bA)))
301307
302308
303-let by = fromBase58String(g(ah))
309+let bB = fromBase58String(g(ak))
304310
305-let bu = i(aa, ay)
311+let bx = i(ac, aB)
306312
307-let bz = k(aa, az)
313+let bC = k(ac, aC)
308314
309-let bA = fromBase58String(g(at))
315+let bD = fromBase58String(g(aw))
310316
311-let bB = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
317+let bE = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
312318
313-let bC = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
319+let bF = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
314320
315-let bD = this
321+let bG = this
316322
317-let bE = i(aa, ax)
323+let bH = i(ac, aA)
318324
319-func bF (bG) = {
320- let bH = 100000
321- let bI = 1000
322- let bJ = bm(bH, bE)
323- let bK = (bJ * 2)
324- let bL = fraction(bJ, bI, 100)
325- let bM = value(bG.minSponsoredAssetFee)
326- if (if ((bM >= bK))
327- then (bL >= bM)
325+func bI (bJ) = {
326+ let bK = 100000
327+ let bL = 1000
328+ let bM = bp(bK, bH)
329+ let bN = (bM * 2)
330+ let bO = fraction(bM, bL, 100)
331+ let bP = value(bJ.minSponsoredAssetFee)
332+ if (if ((bP >= bN))
333+ then (bO >= bP)
328334 else false)
329- then (bG.assetId == by)
335+ then (bJ.assetId == bB)
330336 else false
331337 }
332338
333339
334-func bN (aB) = i(aa, aA(aB))
340+func bQ (aE) = i(ac, aD(aE))
335341
336342
337-func bO (aD) = i(aa, aC(aD))
343+func bR (aG) = i(ac, aF(aG))
338344
339345
340-func bP (bh) = makeString(["%s%s%s", "paramByUser", bh, "amount"], z)
346+func bS (bk) = makeString(["%s%s%s", "paramByUser", bk, "amount"], z)
341347
342348
343-let bQ = 1
349+let bT = 1
344350
345-let bR = 2
351+let bU = 2
346352
347-let bS = 3
353+let bV = 3
348354
349-let bT = 4
355+let bW = 4
350356
351-let bU = 5
357+let bX = 5
352358
353-let bV = 6
359+let bY = 6
354360
355-let bW = 7
361+let bZ = 7
356362
357-let bX = 8
363+let ca = 8
358364
359-let bY = 9
365+let cb = 9
360366
361-let bZ = 10
367+let cc = 10
362368
363-let ca = 11
369+let cd = 11
364370
365-let cb = 12
371+let ce = 12
366372
367-let cc = 13
373+let cf = 13
368374
369-let cd = 14
375+let cg = 14
370376
371-let ce = 15
377+let ch = 15
372378
373-let cf = 16
379+let ci = 16
374380
375-let cg = 17
381+let cj = 17
376382
377-let ch = 18
383+let ck = 18
378384
379-func ci (bh,cj) = makeString(["%s%s", bh, cj], z)
385+func cl (bk,cm) = makeString(["%s%s", bk, cm], z)
380386
381387
382-func ck (aS,cl,cm,bl,cn,co,cp,cq,cr,cs,ct,cu,aD,cv,cw,cx,cy,cz) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d", aS, cl, cm, bl, cn, co, cp, cq, cr, cs, ct, cu, aD, cv, cw, cx, cy, cz], z)
388+func cn (aV,co,cp,bo,cq,cr,cs,ct,cu,cv,cw,cx,aG,cy,cz,cA,cB,cC) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d", aV, co, cp, bo, cq, cr, cs, ct, cu, cv, cw, cx, aG, cy, cz, cA, cB, cC], z)
383389
384390
385-func cA (aS,cB,ct) = ck(aS, "PENDING", toString(cB), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(ct), "0", "0", "NULL", "0", "0", "0", "0")
391+func cD (aV,cE,cw) = cn(aV, "PENDING", toString(cE), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(cw), "0", "0", "NULL", "0", "0", "0", "0")
386392
387393
388-func cC (cD,bl,cn,co,cu,aD,cv,cy,cz) = ck(cD[bQ], "FINISHED", cD[bS], toString(bl), toString(cn), toString(co), cD[bW], cD[bX], toString(height), toString(lastBlock.timestamp), cD[ca], toString(cu), toString(aD), cv, cD[ce], cD[cf], toString(cy), toString(cz))
394+func cF (cG,bo,cq,cr,cx,aG,cy,cB,cC) = cn(cG[bT], "FINISHED", cG[bV], toString(bo), toString(cq), toString(cr), cG[bZ], cG[ca], toString(height), toString(lastBlock.timestamp), cG[cd], toString(cx), toString(aG), cy, cG[ch], cG[ci], toString(cB), toString(cC))
389395
390396
391-func cE (bh,cF) = {
392- let cG = ci(bh, cF)
393- split(valueOrErrorMessage(getString(this, cG), ("no swap data for " + cG)), z)
397+func cH (bk,cI) = {
398+ let cJ = cl(bk, cI)
399+ split(valueOrErrorMessage(getString(this, cJ), ("no swap data for " + cJ)), z)
394400 }
395401
396402
397-func cH (cI,cJ,cK) = {
398- let cL = fraction(cI, cK, B)
399-[(cI - cL), cL]
403+func cK (cL,cM,cN) = {
404+ let cO = fraction(cL, cN, B)
405+[(cL - cO), cO]
400406 }
401407
402408
403-func cM (cN) = if ((0 > cN))
404- then -(cN)
405- else cN
409+func cP (cQ) = if ((0 > cQ))
410+ then -(cQ)
411+ else cQ
406412
407413
408-func cO (cP) = {
409- let cQ = ((wavesBalance(bD).available - cP) - aG())
410- let cR = f(aN(0))
411- let cS = f(aN(1))
412- let cT = (cQ + cR)
413- let cU = (cQ + cS)
414- if (if ((cT > 0))
414+func cR (cS) = {
415+ let cT = ((wavesBalance(bG).available - cS) - aJ())
416+ let cU = f(aQ(0))
417+ let cV = f(aQ(1))
418+ let cW = (cT + cU)
419+ let cX = (cT + cV)
420+ if (if ((cW > 0))
415421 then true
416- else (cU > 0))
422+ else (cX > 0))
417423 then {
418- let cV = cM((cT - cS))
419- let cW = cM((cU - cR))
420- if ((cW >= cV))
421- then $Tuple2(0, cT)
422- else $Tuple2(1, cU)
424+ let cY = cP((cW - cV))
425+ let cZ = cP((cX - cU))
426+ if ((cZ >= cY))
427+ then $Tuple2(0, cW)
428+ else $Tuple2(1, cX)
423429 }
424430 else $Tuple2(-1, 0)
425431 }
426432
427433
428-func cX (r) = if ((r.caller != this))
434+func da (r) = if ((r.caller != this))
429435 then throw("Permission denied: this contract only allowed")
430436 else true
431437
432438
433-func cY (cP) = {
434- let cZ = cO(cP)
435- let aK = cZ._1
436- let da = cZ._2
437- if ((da > 0))
439+func db (cS) = {
440+ let dc = cR(cS)
441+ let aN = dc._1
442+ let dd = dc._2
443+ if ((dd > 0))
438444 then {
439- let db = aJ(aK)
440- let dc = getBinary(this, db)
441- let dd = if (isDefined(dc))
442- then [LeaseCancel(value(dc))]
445+ let de = aM(aN)
446+ let df = getBinary(this, de)
447+ let dg = if (isDefined(df))
448+ then [LeaseCancel(value(df))]
443449 else nil
444- let de = aN(aK)
445- let df = Lease(aF(aK), da)
446- (dd ++ [df, BinaryEntry(db, d(df)), IntegerEntry(aN(aK), da)])
450+ let dh = aQ(aN)
451+ let di = Lease(aI(aN), dd)
452+ (dg ++ [di, BinaryEntry(de, d(di)), IntegerEntry(aQ(aN), dd)])
447453 }
448454 else nil
449455 }
450456
451457
452-func dg (dh) = {
453- let aM = aF(dh)
454- let di = aN(dh)
455- let dj = f(di)
456- let dk = aJ(dh)
457- let dl = value(getBinary(this, dk))
458- $Tuple5(aM, di, dj, dk, dl)
458+func dj (dk) = {
459+ let aP = aI(dk)
460+ let dl = aQ(dk)
461+ let dm = f(dl)
462+ let dn = aM(dk)
463+ let do = value(getBinary(this, dn))
464+ $Tuple5(aP, dl, dm, dn, do)
459465 }
460466
461467
462-func dm (aS,dn,do,dp,dq) = {
463- let dr = dq._2
464- let ds = dq._3
465- let dt = dq._6
466- let du = dq._7
467- let br = ba(aS)
468- let dv = bc(aS)
469- let dw = bd(aS, do)
470- let aM = aE(0)
471- let dx = bN(bO(bu))
472- let dy = (aM == do)
473- let dz = if (dy)
474- then bf()
475- else be(aS)
476- let ct = (height + dz)
477- let dA = if ((aS == "neutrino"))
478- then dn
479- else bm(dn, dx)
480- let dB = if ((aS == "neutrino"))
481- then du
482- else bm(dt, dx)
483- if ((br > dn))
484- then bq(aS, br)
485- else if (if (!(dy))
486- then (dr > 0)
468+func dp (aV,dq,dr,ds,dt) = {
469+ let du = dt._2
470+ let dv = dt._3
471+ let dw = dt._6
472+ let dx = dt._7
473+ let bu = bd(aV)
474+ let dy = bf(aV)
475+ let dz = bg(aV, dr)
476+ let aP = aH(0)
477+ let dA = bQ(bR(bx))
478+ let dB = (aP == dr)
479+ let dC = if (dB)
480+ then bi()
481+ else bh(aV)
482+ let cw = (height + dC)
483+ let dD = if ((aV == "neutrino"))
484+ then dq
485+ else bp(dq, dA)
486+ let dE = if ((aV == "neutrino"))
487+ then dx
488+ else bp(dw, dA)
489+ if ((bu > dq))
490+ then bt(aV, bu)
491+ else if (if (!(dB))
492+ then (du > 0)
487493 else false)
488- then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + ds))))
489- else if (if (!(dy))
490- then (dA > dB)
494+ then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + dv))))
495+ else if (if (!(dB))
496+ then (dD > dE)
491497 else false)
492- then throw(((("You have exceeded your swap limit! Requested: " + toString(dA)) + ", available: ") + toString(dB)))
493- else if (bz)
494- then bs()
498+ then throw(((("You have exceeded your swap limit! Requested: " + toString(dD)) + ", available: ") + toString(dE)))
499+ else if (bC)
500+ then bv()
495501 else {
496- let dC = if ((aS == "waves"))
497- then cY(0)
502+ let dF = if ((aV == "waves"))
503+ then db(0)
498504 else nil
499- $Tuple2(([IntegerEntry(bg(do), dA), IntegerEntry(bi(do), height), IntegerEntry(aU(aS, do), (dw + dn)), IntegerEntry(aH(do), ct), IntegerEntry(aT(aS), (dv + dn)), StringEntry(ci(do, dp), cA(aS, dn, ct))] ++ dC), unit)
505+ $Tuple2(([IntegerEntry(bj(dr), dD), IntegerEntry(bl(dr), height), IntegerEntry(aX(aV, dr), (dz + dq)), IntegerEntry(aK(dr), cw), IntegerEntry(aW(aV), (dy + dq)), StringEntry(cl(dr, ds), cD(aV, dq, cw))] ++ dF), unit)
500506 }
501507 }
502508
503509
504-let dD = 0
510+let dG = 0
505511
506-let dE = 1
512+let dH = 1
507513
508-let dF = 2
514+let dI = 2
509515
510-let dG = 3
516+let dJ = 3
511517
512-let dH = 4
518+let dK = 4
513519
514-let dI = 5
520+let dL = 5
515521
516-let dJ = 6
522+let dM = 6
517523
518-let dK = 7
524+let dN = 7
519525
520-let dL = 8
526+let dO = 8
521527
522-let dM = 9
528+let dP = 9
523529
524-let dN = 10
530+let dQ = 10
525531
526-let dO = 11
532+let dR = 11
527533
528-let dP = 0
534+let dS = 0
529535
530-let dQ = 1
536+let dT = 1
531537
532-let dR = 2
538+let dU = 2
533539
534-let dS = 3
540+let dV = 3
535541
536-let dT = 4
542+let dW = 4
537543
538-let dU = 5
544+let dX = 5
539545
540-let dV = 6
546+let dY = 6
541547
542-let dW = 7
548+let dZ = 7
543549
544-let dX = 8
550+let ea = 8
545551
546-let dY = 9
552+let eb = 9
547553
548-let dZ = 10
554+let ec = 10
549555
550-func ea (eb,bl) = {
551- let ec = bm(eb, bl)
552- $Tuple9(ec, by, 0, unit, 0, eb, 0, 0, 0)
556+func ed (ee,bo) = {
557+ let ef = bp(ee, bo)
558+ $Tuple9(ef, bB, 0, unit, 0, ee, 0, 0, 0)
553559 }
554560
555561
556-func ed (ee,bl,cz,ef,eg) = {
557- let eh = valueOrElse(getInteger(this, aZ()), E)
558- let ei = if ((eh >= cz))
562+func eg (eh,bo,cC,ei,ej) = {
563+ let ek = valueOrElse(getInteger(this, bc()), E)
564+ let el = if ((ek >= cC))
559565 then 0
560- else fraction((ef - fraction(eh, eg, B)), B, (B - eh))
561- let ej = if ((ee > ei))
562- then ei
563- else ee
564- let ek = if ((ee > ei))
565- then fraction((ee - ei), cz, B)
566+ else fraction((ei - fraction(ek, ej, B)), B, (B - ek))
567+ let em = if ((eh > el))
568+ then el
569+ else eh
570+ let en = if ((eh > el))
571+ then fraction((eh - el), cC, B)
566572 else 0
567- let el = (ej + ek)
568- let em = (ee - el)
569- let ec = bj(el, bl)
570- $Tuple9(ec, unit, em, by, ec, el, ei, ej, ek)
573+ let eo = (em + en)
574+ let ep = (eh - eo)
575+ let ef = bm(eo, bo)
576+ $Tuple9(ef, unit, ep, bB, ef, eo, el, em, en)
571577 }
572578
573579
574-func en (aS,cm,bl,eo) = {
575- let ep = valueOrElse(getInteger(this, aX(aS)), D)
576- if (if ((0 > ep))
580+func eq (aV,cp,bo,er) = {
581+ let es = valueOrElse(getInteger(this, ba(aV)), D)
582+ if (if ((0 > es))
577583 then true
578- else (ep >= B))
579- then throw(((("invalid outFeePart config for " + aS) + " swap: outFeePart=") + toString(ep)))
584+ else (es >= B))
585+ then throw(((("invalid outFeePart config for " + aV) + " swap: outFeePart=") + toString(es)))
580586 else {
581- let eh = valueOrElse(getInteger(this, aZ()), E)
582- let eq = q(eo[dL])
583- let ef = q(eo[dH])
584- let eg = q(eo[dI])
585- let er = if ((aS == "waves"))
586- then ea(cm, bl)
587- else if ((aS == "neutrino"))
588- then ed(cm, bl, eq, ef, eg)
589- else throw(("Unsupported swap type " + aS))
590- let ec = er._1
591- let es = er._2
592- let et = er._3
593- let eu = er._4
594- let ev = er._5
595- let ew = cH(ec, et, ep)
596- let ex = ew[F]
597- let ey = ew[G]
598- let cy = if ((0 >= et))
587+ let ek = valueOrElse(getInteger(this, bc()), E)
588+ let et = q(er[dO])
589+ let ei = q(er[dK])
590+ let ej = q(er[dL])
591+ let eu = if ((aV == "waves"))
592+ then ed(cp, bo)
593+ else if ((aV == "neutrino"))
594+ then eg(cp, bo, et, ei, ej)
595+ else throw(("Unsupported swap type " + aV))
596+ let ef = eu._1
597+ let ev = eu._2
598+ let ew = eu._3
599+ let ex = eu._4
600+ let ey = eu._5
601+ let ez = cK(ef, ew, es)
602+ let eA = ez[F]
603+ let eB = ez[G]
604+ let cB = if ((0 >= ew))
599605 then 0
600606 else {
601- let ez = l(invoke(ab, "surfFunctionREADONLY", [et, eu], nil))
602- q(ez[dP])
607+ let eC = l(invoke(ad, "surfFunctionREADONLY", [ew, ex], nil))
608+ q(eC[dS])
603609 }
604- $Tuple7(ex, es, cy, et, ev, ey, ec)
610+ $Tuple7(eA, ev, cB, ew, ey, eB, ef)
605611 }
606612 }
607613
608614
609-func eA (eB,aD,cF,cv,eo) = {
610- let bh = addressFromStringValue(eB)
611- let cD = cE(eB, cF)
612- let ct = parseIntValue(cD[ca])
613- let aS = cD[bQ]
614- let cm = parseIntValue(cD[bS])
615- let eC = cD[bR]
616- let cp = parseIntValue(cD[bW])
617- let ep = valueOrElse(getInteger(this, aX(aS)), D)
618- let dv = bc(aS)
619- let dw = bd(aS, eB)
620- let bw = ct
621- let bv = bO(aD)
622- let bx = bO((aD - 1))
623- let dx = bN(bv)
624- if (bz)
625- then bs()
626- else if ((eC != "PENDING"))
615+func eD (eE,aG,cI,cy,er) = {
616+ let bk = addressFromStringValue(eE)
617+ let cG = cH(eE, cI)
618+ let cw = parseIntValue(cG[cd])
619+ let aV = cG[bT]
620+ let cp = parseIntValue(cG[bV])
621+ let eF = cG[bU]
622+ let cs = parseIntValue(cG[bZ])
623+ let es = valueOrElse(getInteger(this, ba(aV)), D)
624+ let dy = bf(aV)
625+ let dz = bg(aV, eE)
626+ let bz = cw
627+ let by = bR(aG)
628+ let bA = bR((aG - 1))
629+ let dA = bQ(by)
630+ if (bC)
631+ then bv()
632+ else if ((eF != "PENDING"))
627633 then throw("swap has been already processed")
628- else if ((bw > height))
629- then throw((("please wait for: " + toString(bw)) + " block height to withdraw funds"))
630- else if (if (if ((aD > bu))
634+ else if ((bz > height))
635+ then throw((("please wait for: " + toString(bz)) + " block height to withdraw funds"))
636+ else if (if (if ((aG > bx))
631637 then true
632- else (bw > bv))
638+ else (bz > by))
633639 then true
634- else if ((bx != 0))
635- then (bx >= bw)
640+ else if ((bA != 0))
641+ then (bA >= bz)
636642 else false)
637- then bt(aD, bu, bv, bw, bx)
643+ then bw(aG, bx, by, bz, bA)
638644 else {
639- let eD = en(aS, cm, dx, eo)
640- let cn = eD._1
641- let es = eD._2
642- let cy = eD._3
643- let et = eD._4
644- let ev = eD._5
645- let co = eD._6
646- let ec = eD._7
647- if ((0 >= ec))
645+ let eG = eq(aV, cp, dA, er)
646+ let cq = eG._1
647+ let ev = eG._2
648+ let cB = eG._3
649+ let ew = eG._4
650+ let ey = eG._5
651+ let cr = eG._6
652+ let ef = eG._7
653+ if ((0 >= ef))
648654 then throw("balance equals zero")
649655 else {
650- let eq = q(eo[dL])
651- let eE = [IntegerEntry(aU(aS, eB), (dw - cm)), IntegerEntry(aT(aS), (dv - cm)), ScriptTransfer(bh, cn, es), StringEntry(ci(eB, cF), cC(cD, dx, cn, co, bw, aD, cv, cy, eq))]
652- let eF = if ((cy > 0))
656+ let et = q(er[dO])
657+ let eH = [IntegerEntry(aX(aV, eE), (dz - cp)), IntegerEntry(aW(aV), (dy - cp)), ScriptTransfer(bk, cq, ev), StringEntry(cl(eE, cI), cF(cG, dA, cq, cr, bz, aG, cy, cB, et))]
658+ let eI = if ((cB > 0))
653659 then {
654- let eG = invoke(af, "issueSurf", [cy, eB], nil)
655- if ((eG == eG))
660+ let eJ = invoke(ah, "issueSurf", [cB, eE], nil)
661+ if ((eJ == eJ))
656662 then 0
657663 else throw("Strict value is not equal to itself.")
658664 }
659665 else 0
660- if ((eF == eF))
661- then $Tuple3(eE, AttachedPayment(es, co), ev)
666+ if ((eI == eI))
667+ then $Tuple3(eH, AttachedPayment(ev, cr), ey)
662668 else throw("Strict value is not equal to itself.")
663669 }
664670 }
666672
667673
668674 @Callable(r)
669-func constructor (eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS) = {
670- let eT = cX(r)
671- if ((eT == eT))
675+func constructor (eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV) = {
676+ let eW = da(r)
677+ if ((eW == eW))
672678 then if ((size(r.payments) != 0))
673679 then throw("no payments allowed")
674- else [StringEntry(ah, eH), StringEntry(ai, eI), StringEntry(aj, eJ), StringEntry(al, eK), StringEntry(am, eL), StringEntry(at, eM), IntegerEntry(ap, eN), IntegerEntry(aq, eO), IntegerEntry(ar, eP), IntegerEntry(as, eQ), IntegerEntry(au, eR), IntegerEntry(av, eS)]
680+ else [StringEntry(ak, eK), StringEntry(al, eL), StringEntry(am, eM), StringEntry(ao, eN), StringEntry(ap, eO), StringEntry(aw, eP), IntegerEntry(as, eQ), IntegerEntry(at, eR), IntegerEntry(au, eS), IntegerEntry(av, eT), IntegerEntry(ax, eU), IntegerEntry(ay, eV)]
675681 else throw("Strict value is not equal to itself.")
676682 }
677683
678684
679685
680686 @Callable(r)
681-func constructorV2 (ab,ac,eU) = {
682- let eT = cX(r)
683- if ((eT == eT))
687+func constructorV2 (ad,ae,eX) = {
688+ let eW = da(r)
689+ if ((eW == eW))
684690 then if ((size(r.payments) != 0))
685691 then throw("no payments allowed")
686- else [StringEntry(ao, ab), StringEntry(ak, ac), IntegerEntry(aY(), eU)]
692+ else [StringEntry(ar, ad), StringEntry(an, ae), IntegerEntry(bb(), eX)]
687693 else throw("Strict value is not equal to itself.")
688694 }
689695
693699 func swapWavesToNeutrino () = if ((size(r.payments) != 1))
694700 then throw("swapWavesToNeutrino require only one payment")
695701 else {
696- let eV = value(r.payments[0])
697- if (isDefined(eV.assetId))
702+ let eY = value(r.payments[0])
703+ if (isDefined(eY.assetId))
698704 then throw("Only Waves token is allowed for swapping.")
699705 else {
700- let bh = toString(r.caller)
701- let dp = toBase58String(r.transactionId)
702- let eW = x(invoke(this, "swapParamsByUserSYSREADONLY", [bh, 0], nil))
703- let eX = dm("waves", eV.amount, bh, dp, eW)
704- eX
706+ let bk = toString(r.caller)
707+ let ds = toBase58String(r.transactionId)
708+ let eZ = x(invoke(this, "swapParamsByUserSYSREADONLY", [bk, 0], nil))
709+ let fa = dp("waves", eY.amount, bk, ds, eZ)
710+ fa
705711 }
706712 }
707713
711717 func swapNeutrinoToWaves () = if ((size(r.payments) != 1))
712718 then throw("swapNeutrinoToWaves require only one payment")
713719 else {
714- let eV = value(r.payments[0])
715- if ((eV.assetId != by))
720+ let eY = value(r.payments[0])
721+ if ((eY.assetId != bB))
716722 then throw("Only appropriate Neutrino tokens are allowed for swapping.")
717723 else {
718- let bh = toString(r.caller)
719- let dp = toBase58String(r.transactionId)
720- let eW = x(invoke(this, "swapParamsByUserSYSREADONLY", [bh, 0], nil))
721- let eX = dm("neutrino", eV.amount, bh, dp, eW)
722- eX
724+ let bk = toString(r.caller)
725+ let ds = toBase58String(r.transactionId)
726+ let eZ = x(invoke(this, "swapParamsByUserSYSREADONLY", [bk, 0], nil))
727+ let fa = dp("neutrino", eY.amount, bk, ds, eZ)
728+ fa
723729 }
724730 }
725731
726732
727733
728734 @Callable(r)
729-func withdraw (eB,aD,cF) = {
730- let cj = toBase58String(r.transactionId)
735+func withdraw (eE,aG,cI) = {
736+ let cm = toBase58String(r.transactionId)
731737 if ((size(r.payments) != 0))
732738 then throw("no payments allowed")
733739 else {
734- let eo = l(invoke(ab, "calcNeutinoMetricsREADONLY", nil, nil))
735- let eq = q(eo[dL])
736- let eY = eA(eB, aD, cF, cj, eo)
737- let eE = eY._1
738- let eZ = eY._2
739- let ev = eY._3
740- let fa = invoke(this, "internalUnleaseAndLease", [ev], nil)
741- if ((fa == fa))
740+ let er = l(invoke(ad, "calcNeutinoMetricsREADONLY", nil, nil))
741+ let et = q(er[dO])
742+ let fb = eD(eE, aG, cI, cm, er)
743+ let eH = fb._1
744+ let fc = fb._2
745+ let ey = fb._3
746+ let fd = invoke(this, "internalUnleaseAndLease", [ey], nil)
747+ if ((fd == fd))
742748 then {
743- let fb = l(invoke(ae, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
744- let fc = q(fb[1])
745- let fd = q(l(fb[3])[3])
746- let fe = if ((fc != 0))
747- then fraction(eZ.amount, fd, fc)
749+ let fe = l(invoke(ag, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
750+ let ff = q(fe[1])
751+ let fg = q(l(fe[3])[3])
752+ let fh = if ((ff != 0))
753+ then fraction(fc.amount, fg, ff)
748754 else 0
749- let ff = if ((fc != 0))
750- then fraction(eZ.amount, (B - eq), B)
755+ let fi = if ((ff != 0))
756+ then fraction(fc.amount, (B - et), B)
751757 else 0
752- let fg = max([fe, ff])
753- let fh = (eZ.amount - fg)
754- let fi = if ((fg > 0))
758+ let fj = max([fh, fi])
759+ let fk = (fc.amount - fj)
760+ let fl = if ((fj > 0))
755761 then {
756- let fj = invoke(ad, "deposit", nil, [AttachedPayment(eZ.assetId, fg)])
757- if ((fj == fj))
762+ let fm = invoke(af, "deposit", nil, [AttachedPayment(fc.assetId, fj)])
763+ if ((fm == fm))
758764 then nil
759765 else throw("Strict value is not equal to itself.")
760766 }
761767 else nil
762- if ((fi == fi))
768+ if ((fl == fl))
763769 then {
764- let fk = if ((fh > 0))
770+ let fn = if ((fk > 0))
765771 then {
766- let fl = invoke(ac, "deposit", nil, [AttachedPayment(eZ.assetId, fh)])
767- if ((fl == fl))
772+ let fo = invoke(ae, "deposit", nil, [AttachedPayment(fc.assetId, fk)])
773+ if ((fo == fo))
768774 then nil
769775 else throw("Strict value is not equal to itself.")
770776 }
771777 else nil
772- if ((fk == fk))
773- then eE
778+ if ((fn == fn))
779+ then eH
774780 else throw("Strict value is not equal to itself.")
775781 }
776782 else throw("Strict value is not equal to itself.")
782788
783789
784790 @Callable(r)
785-func internalUnleaseAndLease (cP) = if ((r.caller != this))
791+func internalUnleaseAndLease (cS) = if ((r.caller != this))
786792 then throw("internalUnleaseAndLease is not public method")
787- else cY(cP)
793+ else db(cS)
788794
789795
790796
791797 @Callable(r)
792-func transferUsdnToUser (bk,fm) = if ((r.caller != af))
798+func transferUsdnToUser (bn,fp) = if ((r.caller != ah))
793799 then throw("Only auction contract is authorized")
794- else [ScriptTransfer(addressFromStringValue(fm), bk, by)]
800+ else [ScriptTransfer(addressFromStringValue(fp), bn, bB)]
795801
796802
797803
798804 @Callable(r)
799-func acceptWaves () = if ((r.caller != af))
800- then throw("Currently only auction contract is allowed to call")
801- else $Tuple2(cY(0), "success")
805+func acceptWaves () = if (if ((r.caller != ah))
806+ then (r.caller != aj)
807+ else false)
808+ then throw("Currently only auction and governance contracts are allowed to call")
809+ else $Tuple2(db(0), "success")
802810
803811
804812
805813 @Callable(r)
806-func approveLeasings (fn,aQ,fo) = {
807- let fp = [0, 1, 2, 3, 4, 5, 6, 7]
808- let fq = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
809- let fr = fromBase58String(fq)
810- let fs = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
811- let ft = addressFromStringValue(fs)
812- let fu = aP(aQ)
813- let fv = getString(this, fu)
814- if (isDefined(fv))
815- then throw((("group " + toString(aQ)) + " already initialized"))
814+func approveLeasings (fq,aT,fr) = {
815+ let fs = [0, 1, 2, 3, 4, 5, 6, 7]
816+ let ft = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
817+ let fu = fromBase58String(ft)
818+ let fv = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
819+ let fw = addressFromStringValue(fv)
820+ let fx = aS(aT)
821+ let fy = getString(this, fx)
822+ if (isDefined(fy))
823+ then throw((("group " + toString(aT)) + " already initialized"))
816824 else {
817- let fw = split(fn, z)
818- let fx = size(fp)
819- if ((r.callerPublicKey != fr))
825+ let fz = split(fq, z)
826+ let fA = size(fs)
827+ if ((r.callerPublicKey != fu))
820828 then throw("approveLeasings not authorized")
821829 else {
822- let fy = dg(0)
823- let fz = fy._1
824- let fA = fy._2
825- let fB = fy._3
826- let fC = fy._4
827- let fD = fy._5
828- let fE = Lease(fz, (fB - (fo * fx)))
829- let fF = invoke(ft, "validateAndApproveLeasings", [fn], nil)
830- if ((fF == fF))
830+ let fB = dj(0)
831+ let fC = fB._1
832+ let fD = fB._2
833+ let fE = fB._3
834+ let fF = fB._4
835+ let fG = fB._5
836+ let fH = Lease(fC, (fE - (fr * fA)))
837+ let fI = invoke(fw, "validateAndApproveLeasings", [fq], nil)
838+ if ((fI == fI))
831839 then {
832- func fG (fH,r) = {
833- let fI = fw[r]
834- let fJ = Lease(addressFromStringValue(fI), fo)
835- (fH ++ [fJ, BinaryEntry(aL(fI), d(fJ)), IntegerEntry(aO(fI), fo)])
840+ func fJ (fK,r) = {
841+ let fL = fz[r]
842+ let fM = Lease(addressFromStringValue(fL), fr)
843+ (fK ++ [fM, BinaryEntry(aO(fL), d(fM)), IntegerEntry(aR(fL), fr)])
836844 }
837845
838- ([StringEntry(fu, fn), BinaryEntry(fC, d(fE)), IntegerEntry(fA, fE.amount), LeaseCancel(fD), fE] ++ {
839- let fK = fp
840- let fL = size(fK)
841- let fM = nil
842- func fN (fO,fP) = if ((fP >= fL))
843- then fO
844- else fG(fO, fK[fP])
846+ ([StringEntry(fx, fq), BinaryEntry(fF, d(fH)), IntegerEntry(fD, fH.amount), LeaseCancel(fG), fH] ++ {
847+ let fN = fs
848+ let fO = size(fN)
849+ let fP = nil
850+ func fQ (fR,fS) = if ((fS >= fO))
851+ then fR
852+ else fJ(fR, fN[fS])
845853
846- func fQ (fO,fP) = if ((fP >= fL))
847- then fO
854+ func fT (fR,fS) = if ((fS >= fO))
855+ then fR
848856 else throw("List size exceeds 8")
849857
850- fQ(fN(fN(fN(fN(fN(fN(fN(fN(fM, 0), 1), 2), 3), 4), 5), 6), 7), 8)
858+ fT(fQ(fQ(fQ(fQ(fQ(fQ(fQ(fQ(fP, 0), 1), 2), 3), 4), 5), 6), 7), 8)
851859 })
852860 }
853861 else throw("Strict value is not equal to itself.")
858866
859867
860868 @Callable(r)
861-func rebalanceLeasings (bk,aQ) = {
862- let fp = [0, 1, 2, 3, 4, 5, 6, 7]
863- let fq = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
864- let fr = fromBase58String(fq)
865- let fu = aP(aQ)
866- let fn = a(this, fu)
867- let fw = split(fn, z)
868- if ((r.callerPublicKey != fr))
869+func rebalanceLeasings (bn,aT) = {
870+ let fs = [0, 1, 2, 3, 4, 5, 6, 7]
871+ let ft = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
872+ let fu = fromBase58String(ft)
873+ let fx = aS(aT)
874+ let fq = a(this, fx)
875+ let fz = split(fq, z)
876+ if ((r.callerPublicKey != fu))
869877 then throw("rebalanceLeasings not authorized")
870878 else {
871- let ev = ((bk / size(fw)) + 1)
872- let fR = dg(0)
873- let fz = fR._1
874- let fA = fR._2
875- let fB = fR._3
876- let fC = fR._4
877- let fD = fR._5
878- let fE = Lease(fz, (fB + (ev * size(fw))))
879- func fS (fH,r) = {
880- let fI = fw[r]
881- let fT = aL(fI)
882- let fU = getBinaryValue(this, fT)
883- let fV = aO(fI)
884- let fo = getIntegerValue(this, fV)
885- let fW = LeaseCancel(value(fU))
886- let fJ = Lease(addressFromStringValue(fI), (fo - ev))
887- (fH ++ [LeaseCancel(value(fU)), fJ, BinaryEntry(fT, d(fJ)), IntegerEntry(fV, fJ.amount)])
879+ let ey = ((bn / size(fz)) + 1)
880+ let fU = dj(0)
881+ let fC = fU._1
882+ let fD = fU._2
883+ let fE = fU._3
884+ let fF = fU._4
885+ let fG = fU._5
886+ let fH = Lease(fC, (fE + (ey * size(fz))))
887+ func fV (fK,r) = {
888+ let fL = fz[r]
889+ let fW = aO(fL)
890+ let fX = getBinaryValue(this, fW)
891+ let fY = aR(fL)
892+ let fr = getIntegerValue(this, fY)
893+ let fZ = LeaseCancel(value(fX))
894+ let fM = Lease(addressFromStringValue(fL), (fr - ey))
895+ (fK ++ [LeaseCancel(value(fX)), fM, BinaryEntry(fW, d(fM)), IntegerEntry(fY, fM.amount)])
888896 }
889897
890898 ({
891- let fK = fp
892- let fL = size(fK)
893- let fM = nil
894- func fN (fO,fP) = if ((fP >= fL))
895- then fO
896- else fS(fO, fK[fP])
899+ let fN = fs
900+ let fO = size(fN)
901+ let fP = nil
902+ func fQ (fR,fS) = if ((fS >= fO))
903+ then fR
904+ else fV(fR, fN[fS])
897905
898- func fQ (fO,fP) = if ((fP >= fL))
899- then fO
906+ func fT (fR,fS) = if ((fS >= fO))
907+ then fR
900908 else throw("List size exceeds 8")
901909
902- fQ(fN(fN(fN(fN(fN(fN(fN(fN(fM, 0), 1), 2), 3), 4), 5), 6), 7), 8)
903- } ++ [BinaryEntry(fC, d(fE)), IntegerEntry(fA, fE.amount), LeaseCancel(fD), fE])
910+ fT(fQ(fQ(fQ(fQ(fQ(fQ(fQ(fQ(fP, 0), 1), 2), 3), 4), 5), 6), 7), 8)
911+ } ++ [BinaryEntry(fF, d(fH)), IntegerEntry(fD, fH.amount), LeaseCancel(fG), fH])
904912 }
905913 }
906914
907915
908916
909917 @Callable(r)
910-func swapParamsByUserSYSREADONLY (do,fX) = {
911- let fb = l(invoke(ae, "gnsbtInfoSYSREADONLY", [do, 0, 0], nil))
912- let fY = (q(fb[0]) + fX)
913- let fc = (q(fb[1]) + fX)
914- let fZ = l(invoke(ab, "calcSwapLimitREADONLY", [fY], nil))
915- let ga = q(fZ[0])
916- let dt = q(fZ[1])
917- let du = q(fZ[2])
918- let gb = valueOrElse(getInteger(this, bi(do)), 0)
919- let gc = bb()
920- let gd = (height - gb)
921- let ge = (gd >= gc)
922- let gf = if (ge)
918+func swapParamsByUserSYSREADONLY (dr,ga) = {
919+ let fe = l(invoke(ag, "gnsbtInfoSYSREADONLY", [dr, 0, 0], nil))
920+ let gb = (q(fe[0]) + ga)
921+ let ff = (q(fe[1]) + ga)
922+ let gc = l(invoke(ad, "calcSwapLimitREADONLY", [gb], nil))
923+ let gd = q(gc[0])
924+ let dw = q(gc[1])
925+ let dx = q(gc[2])
926+ let ge = valueOrElse(getInteger(this, bl(dr)), 0)
927+ let gf = be()
928+ let gg = (height - ge)
929+ let gh = (gg >= gf)
930+ let gi = if (gh)
923931 then 0
924- else valueOrElse(getInteger(this, bg(do)), 0)
925- let ds = if (ge)
932+ else valueOrElse(getInteger(this, bj(dr)), 0)
933+ let dv = if (gh)
926934 then 0
927- else (gc - gd)
928- $Tuple2(nil, $Tuple7(ga, gf, ds, fY, fc, dt, du))
935+ else (gf - gg)
936+ $Tuple2(nil, $Tuple7(gd, gi, dv, gb, ff, dw, dx))
929937 }
930938
931939
932940
933941 @Callable(r)
934-func calcWithdrawResultSYSREADONLY (aS,cm,bl) = {
935- let eo = l(invoke(ab, "calcNeutinoMetricsREADONLY", nil, nil))
936- $Tuple2(nil, en(aS, cm, bl, eo))
942+func calcWithdrawResultSYSREADONLY (aV,cp,bo) = {
943+ let er = l(invoke(ad, "calcNeutinoMetricsREADONLY", nil, nil))
944+ $Tuple2(nil, eq(aV, cp, bo, er))
937945 }
938946
939947
940948
941949 @Callable(r)
942-func replaceCommunityNode (gg,gh,aQ,gi) = {
943- let fq = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
944- let fr = fromBase58String(fq)
945- if ((r.callerPublicKey != fr))
950+func replaceCommunityNode (gj,gk,aT,gl) = {
951+ let ft = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
952+ let fu = fromBase58String(ft)
953+ if ((r.callerPublicKey != fu))
946954 then throw("replaceCommunityNode not authorized")
947955 else {
948- let gj = aP(aQ)
949- let gk = a(this, gj)
950- if (!(contains(gk, gg)))
951- then throw(((("Group " + toString(aQ)) + " does not contain address ") + gg))
956+ let gm = aS(aT)
957+ let gn = a(this, gm)
958+ if (!(contains(gn, gj)))
959+ then throw(((("Group " + toString(aT)) + " does not contain address ") + gj))
952960 else {
953- let gl = invoke(ag, "replaceApprovedNode", [gg, gh, aQ, gi], nil)
954- if ((gl == gl))
961+ let go = invoke(ai, "replaceApprovedNode", [gj, gk, aT, gl], nil)
962+ if ((go == go))
955963 then {
956- let gm = aL(gg)
957- let gn = aO(gg)
958- let go = getIntegerValue(gn)
959- let gp = aL(gg)
960- let gq = aO(gg)
961- let gr = Lease(addressFromStringValue(gh), go)
962- let gs = makeString(split(gk, gg), gh)
963- $Tuple2([LeaseCancel(getBinaryValue(gm)), DeleteEntry(gm), DeleteEntry(gn), StringEntry(gj, gs), gr, BinaryEntry(gp, d(gr)), IntegerEntry(gq, go)], unit)
964+ let gp = aO(gj)
965+ let gq = aR(gj)
966+ let gr = getIntegerValue(gq)
967+ let gs = aO(gj)
968+ let gt = aR(gj)
969+ let gu = Lease(addressFromStringValue(gk), gr)
970+ let gv = makeString(split(gn, gj), gk)
971+ $Tuple2([LeaseCancel(getBinaryValue(gp)), DeleteEntry(gp), DeleteEntry(gq), StringEntry(gm, gv), gu, BinaryEntry(gs, d(gu)), IntegerEntry(gt, gr)], unit)
964972 }
965973 else throw("Strict value is not equal to itself.")
966974 }
971979
972980 @Callable(r)
973981 func updateReservesAndNeutrinoSupply () = {
974- func gt (c) = {
982+ func gw (c) = {
975983 let n = getInteger(this, c)
976984 if ($isInstanceOf(n, "Int"))
977985 then {
978- let fH = n
979- fH
986+ let fK = n
987+ fK
980988 }
981989 else 0
982990 }
983991
984- let gu = l(invoke(ab, "calcNeutinoMetricsREADONLY", nil, nil))
985- let Z = gt("updateReservesAndNeutrinoSupplyIdx")
986- let gv = (Z + 1)
987-[IntegerEntry("updateReservesAndNeutrinoSupplyIdx", gv), IntegerEntry("reserve", q(gu[3])), IntegerEntry("neutrinoSupply", q(gu[5])), IntegerEntry("reservesInUsdn", bm(q(gu[3]), q(gu[0]))), IntegerEntry("surplus", q(gu[6])), IntegerEntry("deficit", -(q(gu[6])))]
992+ let gx = l(invoke(ad, "calcNeutinoMetricsREADONLY", nil, nil))
993+ let ab = gw("updateReservesAndNeutrinoSupplyIdx")
994+ let gy = (ab + 1)
995+[IntegerEntry("updateReservesAndNeutrinoSupplyIdx", gy), IntegerEntry("reserve", q(gx[3])), IntegerEntry("neutrinoSupply", q(gx[5])), IntegerEntry("reservesInUsdn", bp(q(gx[3]), q(gx[0]))), IntegerEntry("surplus", q(gx[6])), IntegerEntry("deficit", -(q(gx[6])))]
988996 }
989997
990998
991999
9921000 @Callable(r)
9931001 func wavesBalancesVsPayment () = {
994- let gw = wavesBalance(this)
995-[IntegerEntry("wavesBalance_available", gw.available), IntegerEntry("wavesBalance_regular", gw.regular), IntegerEntry("wavesBalance_generating", gw.generating), IntegerEntry("wavesBalance_effective", gw.effective), IntegerEntry("waves_payment", value(r.payments[0]).amount)]
1002+ let gz = wavesBalance(this)
1003+[IntegerEntry("wavesBalance_available", gz.available), IntegerEntry("wavesBalance_regular", gz.regular), IntegerEntry("wavesBalance_generating", gz.generating), IntegerEntry("wavesBalance_effective", gz.effective), IntegerEntry("waves_payment", value(r.payments[0]).amount)]
9961004 }
9971005
9981006
999-@Verifier(bG)
1000-func gx () = {
1001- let gy = toBase58String(bG.id)
1002- let gz = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1003- let gA = split(valueOrElse(getString(aa, "%s__multisig"), gz), z)
1004- let gB = ((((if (sigVerify(bG.bodyBytes, bG.proofs[0], fromBase58String(gA[0])))
1007+@Verifier(bJ)
1008+func gA () = {
1009+ let gB = toBase58String(bJ.id)
1010+ let gC = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1011+ let gD = split(valueOrElse(getString(ac, "%s__multisig"), gC), z)
1012+ let gE = ((((if (sigVerify(bJ.bodyBytes, bJ.proofs[0], fromBase58String(gD[0])))
10051013 then 1
1006- else 0) + (if (sigVerify(bG.bodyBytes, bG.proofs[1], fromBase58String(gA[1])))
1014+ else 0) + (if (sigVerify(bJ.bodyBytes, bJ.proofs[1], fromBase58String(gD[1])))
10071015 then 1
1008- else 0)) + (if (sigVerify(bG.bodyBytes, bG.proofs[2], fromBase58String(gA[2])))
1016+ else 0)) + (if (sigVerify(bJ.bodyBytes, bJ.proofs[2], fromBase58String(gD[2])))
10091017 then 1
1010- else 0)) + (if (sigVerify(bG.bodyBytes, bG.proofs[3], fromBase58String(gA[3])))
1018+ else 0)) + (if (sigVerify(bJ.bodyBytes, bJ.proofs[3], fromBase58String(gD[3])))
10111019 then 2
10121020 else 0))
1013- let n = bG
1021+ let n = bJ
10141022 if ($isInstanceOf(n, "SponsorFeeTransaction"))
10151023 then {
1016- let gC = n
1017- if (bF(gC))
1018- then (gB >= 3)
1024+ let gF = n
1025+ if (bI(gF))
1026+ then (gE >= 3)
10191027 else false
10201028 }
1021- else (gB >= 3)
1029+ else (gE >= 3)
10221030 }
10231031
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b,c) = valueOrErrorMessage(getString(b, c), makeString(["mandatory ", toString(b), ".", c, " is not defined"], ""))
55
66
77 func d (e) = calculateLeaseId(e)
88
99
1010 func f (c) = valueOrElse(getInteger(this, c), 0)
1111
1212
1313 func g (c) = valueOrElse(getString(this, c), "")
1414
1515
1616 func h (c) = valueOrElse(getBoolean(this, c), false)
1717
1818
1919 func i (b,c) = valueOrElse(getInteger(b, c), 0)
2020
2121
2222 func j (b,c) = valueOrElse(getString(addressFromStringValue(b), c), "")
2323
2424
2525 func k (b,c) = valueOrElse(getBoolean(b, c), false)
2626
2727
2828 func l (m) = {
2929 let n = m
3030 if ($isInstanceOf(n, "List[Any]"))
3131 then {
3232 let e = n
3333 e
3434 }
3535 else throw("fail to cast into List[Any]")
3636 }
3737
3838
3939 func o (m) = {
4040 let n = m
4141 if ($isInstanceOf(n, "String"))
4242 then {
4343 let p = n
4444 p
4545 }
4646 else throw("fail to cast into String")
4747 }
4848
4949
5050 func q (m) = {
5151 let n = m
5252 if ($isInstanceOf(n, "Int"))
5353 then {
5454 let r = n
5555 r
5656 }
5757 else throw("fail to cast into Int")
5858 }
5959
6060
6161 func s (t) = {
6262 let n = t
6363 if ($isInstanceOf(n, "ByteVector"))
6464 then {
6565 let u = n
6666 u
6767 }
6868 else throw("fail to cast into ByteVector")
6969 }
7070
7171
7272 func v (m) = {
7373 let n = m
7474 if ($isInstanceOf(n, "AttachedPayment"))
7575 then {
7676 let w = n
7777 w
7878 }
7979 else throw("fail to cast into AttachedPayment")
8080 }
8181
8282
8383 func x (m) = {
8484 let n = m
8585 if ($isInstanceOf(n, "(Int, Int, Int, Int, Int, Int, Int)"))
8686 then {
8787 let y = n
8888 y
8989 }
9090 else throw("fail to cast into Tuple5 ints")
9191 }
9292
9393
9494 let z = "__"
9595
9696 let A = 100000000
9797
9898 let B = 1000000
9999
100100 let C = 1000000
101101
102102 let D = 20000
103103
104104 let E = 100000
105105
106106 let F = 0
107107
108108 let G = 1
109109
110110 let H = 2
111111
112112 let I = 1
113113
114114 let J = 2
115115
116116 let K = 3
117117
118118 let L = 4
119119
120120 let M = 5
121121
122122 let N = 6
123123
124124 let O = 7
125125
126126 let P = 8
127127
128128 let Q = 9
129129
130130 let R = 10
131131
132132 let S = 11
133133
134-func T () = "%s%s__config__controlAddress"
134+let T = 12
135+
136+let U = 13
137+
138+func V () = "%s%s__config__controlAddress"
135139
136140
137-func U () = "%s__controlConfig"
141+func W () = "%s__controlConfig"
138142
139143
140-func V (W) = split(a(W, U()), z)
144+func X (Y) = split_4C(a(Y, W()), z)
141145
142146
143-func X (Y,Z) = valueOrErrorMessage(addressFromString(Y[Z]), ("Control cfg doesn't contain address at index " + toString(Z)))
147+func Z (aa,ab) = valueOrErrorMessage(addressFromString(aa[ab]), ("Control cfg doesn't contain address at index " + toString(ab)))
144148
145149
146-let aa = addressFromStringValue(valueOrElse(getString(this, T()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
150+let ac = addressFromStringValue(valueOrElse(getString(this, V()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
147151
148-let Y = V(aa)
152+let aa = X(ac)
149153
150-let ab = X(Y, L)
154+let ad = Z(aa, L)
151155
152-let ac = X(Y, P)
156+let ae = Z(aa, P)
153157
154-let ad = X(Y, R)
158+let af = Z(aa, R)
155159
156-let ae = X(Y, S)
160+let ag = Z(aa, S)
157161
158-let af = X(Y, J)
162+let ah = Z(aa, J)
159163
160-let ag = X(Y, O)
164+let ai = Z(aa, O)
161165
162-let ah = "neutrino_asset_id"
166+let aj = Z(aa, U)
163167
164-let ai = "bond_asset_id"
168+let ak = "neutrino_asset_id"
165169
166-let aj = "auction_contract"
170+let al = "bond_asset_id"
167171
168-let ak = "nsbtStakingContract"
172+let am = "auction_contract"
169173
170-let al = "liquidation_contract"
174+let an = "nsbtStakingContract"
171175
172-let am = "rpd_contract"
176+let ao = "liquidation_contract"
173177
174-let an = "control_contract"
178+let ap = "rpd_contract"
175179
176-let ao = "math_contract"
180+let aq = "control_contract"
177181
178-let ap = "balance_waves_lock_interval"
182+let ar = "math_contract"
179183
180-let aq = "balance_neutrino_lock_interval"
184+let as = "balance_waves_lock_interval"
181185
182-let ar = "min_waves_swap_amount"
186+let at = "balance_neutrino_lock_interval"
183187
184-let as = "min_neutrino_swap_amount"
188+let au = "min_waves_swap_amount"
185189
186-let at = "node_oracle_provider"
190+let av = "min_neutrino_swap_amount"
187191
188-let au = "neutrinoOut_swap_feePart"
192+let aw = "node_oracle_provider"
189193
190-let av = "wavesOut_swap_feePart"
194+let ax = "neutrinoOut_swap_feePart"
191195
192-func aw (b) = ("%s__" + b)
196+let ay = "wavesOut_swap_feePart"
197+
198+func az (b) = ("%s__" + b)
193199
194200
195-let ax = "price"
201+let aA = "price"
196202
197-let ay = "price_index"
203+let aB = "price_index"
198204
199-let az = "is_blocked"
205+let aC = "is_blocked"
200206
201-func aA (aB) = ((ax + "_") + toString(aB))
207+func aD (aE) = ((aA + "_") + toString(aE))
202208
203209
204-func aC (aD) = ((ay + "_") + toString(aD))
210+func aF (aG) = ((aB + "_") + toString(aG))
205211
206212
207-func aE (Z) = g(makeString(["%s%d%s", "lease", toString(Z), "nodeAddress"], z))
213+func aH (ab) = g(makeString(["%s%d%s", "lease", toString(ab), "nodeAddress"], z))
208214
209215
210-func aF (Z) = addressFromStringValue(aE(Z))
216+func aI (ab) = addressFromStringValue(aH(ab))
211217
212218
213-func aG () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * A))
219+func aJ () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * A))
214220
215221
216-func aH (aI) = ("balance_unlock_block_" + aI)
222+func aK (aL) = ("balance_unlock_block_" + aL)
217223
218224
219-func aJ (aK) = makeString(["%s%d%s", "lease", toString(aK), "id"], z)
225+func aM (aN) = makeString(["%s%d%s", "lease", toString(aN), "id"], z)
220226
221227
222-func aL (aM) = makeString(["%s%s%s", "leaseByAddress", aM, "id"], z)
228+func aO (aP) = makeString(["%s%s%s", "leaseByAddress", aP, "id"], z)
223229
224230
225-func aN (aK) = makeString(["%s%d%s", "lease", toString(aK), "amount"], z)
231+func aQ (aN) = makeString(["%s%d%s", "lease", toString(aN), "amount"], z)
226232
227233
228-func aO (aM) = makeString(["%s%s%s", "leaseByAddress", aM, "amount"], z)
234+func aR (aP) = makeString(["%s%s%s", "leaseByAddress", aP, "amount"], z)
229235
230236
231-func aP (aQ) = makeString(["%s%d%s", "leaseGroup", toString(aQ), "nodeList"], z)
237+func aS (aT) = makeString(["%s%d%s", "leaseGroup", toString(aT), "nodeList"], z)
232238
233239
234-func aR (aS) = (("min_" + aS) + "_swap_amount")
240+func aU (aV) = (("min_" + aV) + "_swap_amount")
235241
236242
237-func aT (aS) = ("balance_lock_" + aS)
243+func aW (aV) = ("balance_lock_" + aV)
238244
239245
240-func aU (aS,aI) = makeString(["balance_lock", aS, aI], "_")
246+func aX (aV,aL) = makeString(["balance_lock", aV, aL], "_")
241247
242248
243-func aV (aS) = (("balance_" + aS) + "_lock_interval")
249+func aY (aV) = (("balance_" + aV) + "_lock_interval")
244250
245251
246-func aW () = "balance_node_lock_interval"
252+func aZ () = "balance_node_lock_interval"
247253
248254
249-func aX (aS) = (aS + "Out_swap_feePart")
255+func ba (aV) = (aV + "Out_swap_feePart")
250256
251257
252-func aY () = "swaps_timeframe"
258+func bb () = "swaps_timeframe"
253259
254260
255-func aZ () = "min_BR_protection_level"
261+func bc () = "min_BR_protection_level"
256262
257263
258-func ba (aS) = valueOrElse(getInteger(this, aR(aS)), 0)
264+func bd (aV) = valueOrElse(getInteger(this, aU(aV)), 0)
259265
260266
261-func bb () = valueOrElse(getInteger(this, aY()), 1440)
267+func be () = valueOrElse(getInteger(this, bb()), 1440)
262268
263269
264-func bc (aS) = valueOrElse(getInteger(this, aT(aS)), 0)
270+func bf (aV) = valueOrElse(getInteger(this, aW(aV)), 0)
265271
266272
267-func bd (aS,aI) = valueOrElse(getInteger(this, aU(aS, aI)), 0)
273+func bg (aV,aL) = valueOrElse(getInteger(this, aX(aV, aL)), 0)
268274
269275
270-func be (aS) = valueOrElse(getInteger(this, aV(aS)), 1440)
276+func bh (aV) = valueOrElse(getInteger(this, aY(aV)), 1440)
271277
272278
273-func bf () = valueOrElse(getInteger(this, aW()), 1)
279+func bi () = valueOrElse(getInteger(this, aZ()), 1)
274280
275281
276-func bg (bh) = makeString(["%s%s", "swapUserSpentInPeriod", bh], z)
282+func bj (bk) = makeString(["%s%s", "swapUserSpentInPeriod", bk], z)
277283
278284
279-func bi (bh) = makeString(["%s%s", "userLastSwapHeight", bh], z)
285+func bl (bk) = makeString(["%s%s", "userLastSwapHeight", bk], z)
280286
281287
282-func bj (bk,bl) = fraction(fraction(bk, C, bl), A, B)
288+func bm (bn,bo) = fraction(fraction(bn, C, bo), A, B)
283289
284290
285-func bm (bk,bl) = fraction(fraction(bk, bl, C), B, A)
291+func bp (bn,bo) = fraction(fraction(bn, bo, C), B, A)
286292
287293
288-func bn (bk,bl) = bm(bk, bl)
294+func bq (bn,bo) = bp(bn, bo)
289295
290296
291-func bo (bp) = split(bp, ",")
297+func br (bs) = split(bs, ",")
292298
293299
294-func bq (aS,br) = throw(((("The specified amount in " + aS) + " swap is less than the required minimum of ") + toString(br)))
300+func bt (aV,bu) = throw(((("The specified amount in " + aV) + " swap is less than the required minimum of ") + toString(bu)))
295301
296302
297-func bs () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
303+func bv () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
298304
299305
300-func bt (aD,bu,bv,bw,bx) = throw(((((((((("invalid price history index: index=" + toString(aD)) + " priceIndex=") + toString(bu)) + " indexHeight=") + toString(bv)) + " unlockHeight=") + toString(bw)) + " prevIndexHeight=") + toString(bx)))
306+func bw (aG,bx,by,bz,bA) = throw(((((((((("invalid price history index: index=" + toString(aG)) + " priceIndex=") + toString(bx)) + " indexHeight=") + toString(by)) + " unlockHeight=") + toString(bz)) + " prevIndexHeight=") + toString(bA)))
301307
302308
303-let by = fromBase58String(g(ah))
309+let bB = fromBase58String(g(ak))
304310
305-let bu = i(aa, ay)
311+let bx = i(ac, aB)
306312
307-let bz = k(aa, az)
313+let bC = k(ac, aC)
308314
309-let bA = fromBase58String(g(at))
315+let bD = fromBase58String(g(aw))
310316
311-let bB = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
317+let bE = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
312318
313-let bC = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
319+let bF = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
314320
315-let bD = this
321+let bG = this
316322
317-let bE = i(aa, ax)
323+let bH = i(ac, aA)
318324
319-func bF (bG) = {
320- let bH = 100000
321- let bI = 1000
322- let bJ = bm(bH, bE)
323- let bK = (bJ * 2)
324- let bL = fraction(bJ, bI, 100)
325- let bM = value(bG.minSponsoredAssetFee)
326- if (if ((bM >= bK))
327- then (bL >= bM)
325+func bI (bJ) = {
326+ let bK = 100000
327+ let bL = 1000
328+ let bM = bp(bK, bH)
329+ let bN = (bM * 2)
330+ let bO = fraction(bM, bL, 100)
331+ let bP = value(bJ.minSponsoredAssetFee)
332+ if (if ((bP >= bN))
333+ then (bO >= bP)
328334 else false)
329- then (bG.assetId == by)
335+ then (bJ.assetId == bB)
330336 else false
331337 }
332338
333339
334-func bN (aB) = i(aa, aA(aB))
340+func bQ (aE) = i(ac, aD(aE))
335341
336342
337-func bO (aD) = i(aa, aC(aD))
343+func bR (aG) = i(ac, aF(aG))
338344
339345
340-func bP (bh) = makeString(["%s%s%s", "paramByUser", bh, "amount"], z)
346+func bS (bk) = makeString(["%s%s%s", "paramByUser", bk, "amount"], z)
341347
342348
343-let bQ = 1
349+let bT = 1
344350
345-let bR = 2
351+let bU = 2
346352
347-let bS = 3
353+let bV = 3
348354
349-let bT = 4
355+let bW = 4
350356
351-let bU = 5
357+let bX = 5
352358
353-let bV = 6
359+let bY = 6
354360
355-let bW = 7
361+let bZ = 7
356362
357-let bX = 8
363+let ca = 8
358364
359-let bY = 9
365+let cb = 9
360366
361-let bZ = 10
367+let cc = 10
362368
363-let ca = 11
369+let cd = 11
364370
365-let cb = 12
371+let ce = 12
366372
367-let cc = 13
373+let cf = 13
368374
369-let cd = 14
375+let cg = 14
370376
371-let ce = 15
377+let ch = 15
372378
373-let cf = 16
379+let ci = 16
374380
375-let cg = 17
381+let cj = 17
376382
377-let ch = 18
383+let ck = 18
378384
379-func ci (bh,cj) = makeString(["%s%s", bh, cj], z)
385+func cl (bk,cm) = makeString(["%s%s", bk, cm], z)
380386
381387
382-func ck (aS,cl,cm,bl,cn,co,cp,cq,cr,cs,ct,cu,aD,cv,cw,cx,cy,cz) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d", aS, cl, cm, bl, cn, co, cp, cq, cr, cs, ct, cu, aD, cv, cw, cx, cy, cz], z)
388+func cn (aV,co,cp,bo,cq,cr,cs,ct,cu,cv,cw,cx,aG,cy,cz,cA,cB,cC) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d", aV, co, cp, bo, cq, cr, cs, ct, cu, cv, cw, cx, aG, cy, cz, cA, cB, cC], z)
383389
384390
385-func cA (aS,cB,ct) = ck(aS, "PENDING", toString(cB), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(ct), "0", "0", "NULL", "0", "0", "0", "0")
391+func cD (aV,cE,cw) = cn(aV, "PENDING", toString(cE), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(cw), "0", "0", "NULL", "0", "0", "0", "0")
386392
387393
388-func cC (cD,bl,cn,co,cu,aD,cv,cy,cz) = ck(cD[bQ], "FINISHED", cD[bS], toString(bl), toString(cn), toString(co), cD[bW], cD[bX], toString(height), toString(lastBlock.timestamp), cD[ca], toString(cu), toString(aD), cv, cD[ce], cD[cf], toString(cy), toString(cz))
394+func cF (cG,bo,cq,cr,cx,aG,cy,cB,cC) = cn(cG[bT], "FINISHED", cG[bV], toString(bo), toString(cq), toString(cr), cG[bZ], cG[ca], toString(height), toString(lastBlock.timestamp), cG[cd], toString(cx), toString(aG), cy, cG[ch], cG[ci], toString(cB), toString(cC))
389395
390396
391-func cE (bh,cF) = {
392- let cG = ci(bh, cF)
393- split(valueOrErrorMessage(getString(this, cG), ("no swap data for " + cG)), z)
397+func cH (bk,cI) = {
398+ let cJ = cl(bk, cI)
399+ split(valueOrErrorMessage(getString(this, cJ), ("no swap data for " + cJ)), z)
394400 }
395401
396402
397-func cH (cI,cJ,cK) = {
398- let cL = fraction(cI, cK, B)
399-[(cI - cL), cL]
403+func cK (cL,cM,cN) = {
404+ let cO = fraction(cL, cN, B)
405+[(cL - cO), cO]
400406 }
401407
402408
403-func cM (cN) = if ((0 > cN))
404- then -(cN)
405- else cN
409+func cP (cQ) = if ((0 > cQ))
410+ then -(cQ)
411+ else cQ
406412
407413
408-func cO (cP) = {
409- let cQ = ((wavesBalance(bD).available - cP) - aG())
410- let cR = f(aN(0))
411- let cS = f(aN(1))
412- let cT = (cQ + cR)
413- let cU = (cQ + cS)
414- if (if ((cT > 0))
414+func cR (cS) = {
415+ let cT = ((wavesBalance(bG).available - cS) - aJ())
416+ let cU = f(aQ(0))
417+ let cV = f(aQ(1))
418+ let cW = (cT + cU)
419+ let cX = (cT + cV)
420+ if (if ((cW > 0))
415421 then true
416- else (cU > 0))
422+ else (cX > 0))
417423 then {
418- let cV = cM((cT - cS))
419- let cW = cM((cU - cR))
420- if ((cW >= cV))
421- then $Tuple2(0, cT)
422- else $Tuple2(1, cU)
424+ let cY = cP((cW - cV))
425+ let cZ = cP((cX - cU))
426+ if ((cZ >= cY))
427+ then $Tuple2(0, cW)
428+ else $Tuple2(1, cX)
423429 }
424430 else $Tuple2(-1, 0)
425431 }
426432
427433
428-func cX (r) = if ((r.caller != this))
434+func da (r) = if ((r.caller != this))
429435 then throw("Permission denied: this contract only allowed")
430436 else true
431437
432438
433-func cY (cP) = {
434- let cZ = cO(cP)
435- let aK = cZ._1
436- let da = cZ._2
437- if ((da > 0))
439+func db (cS) = {
440+ let dc = cR(cS)
441+ let aN = dc._1
442+ let dd = dc._2
443+ if ((dd > 0))
438444 then {
439- let db = aJ(aK)
440- let dc = getBinary(this, db)
441- let dd = if (isDefined(dc))
442- then [LeaseCancel(value(dc))]
445+ let de = aM(aN)
446+ let df = getBinary(this, de)
447+ let dg = if (isDefined(df))
448+ then [LeaseCancel(value(df))]
443449 else nil
444- let de = aN(aK)
445- let df = Lease(aF(aK), da)
446- (dd ++ [df, BinaryEntry(db, d(df)), IntegerEntry(aN(aK), da)])
450+ let dh = aQ(aN)
451+ let di = Lease(aI(aN), dd)
452+ (dg ++ [di, BinaryEntry(de, d(di)), IntegerEntry(aQ(aN), dd)])
447453 }
448454 else nil
449455 }
450456
451457
452-func dg (dh) = {
453- let aM = aF(dh)
454- let di = aN(dh)
455- let dj = f(di)
456- let dk = aJ(dh)
457- let dl = value(getBinary(this, dk))
458- $Tuple5(aM, di, dj, dk, dl)
458+func dj (dk) = {
459+ let aP = aI(dk)
460+ let dl = aQ(dk)
461+ let dm = f(dl)
462+ let dn = aM(dk)
463+ let do = value(getBinary(this, dn))
464+ $Tuple5(aP, dl, dm, dn, do)
459465 }
460466
461467
462-func dm (aS,dn,do,dp,dq) = {
463- let dr = dq._2
464- let ds = dq._3
465- let dt = dq._6
466- let du = dq._7
467- let br = ba(aS)
468- let dv = bc(aS)
469- let dw = bd(aS, do)
470- let aM = aE(0)
471- let dx = bN(bO(bu))
472- let dy = (aM == do)
473- let dz = if (dy)
474- then bf()
475- else be(aS)
476- let ct = (height + dz)
477- let dA = if ((aS == "neutrino"))
478- then dn
479- else bm(dn, dx)
480- let dB = if ((aS == "neutrino"))
481- then du
482- else bm(dt, dx)
483- if ((br > dn))
484- then bq(aS, br)
485- else if (if (!(dy))
486- then (dr > 0)
468+func dp (aV,dq,dr,ds,dt) = {
469+ let du = dt._2
470+ let dv = dt._3
471+ let dw = dt._6
472+ let dx = dt._7
473+ let bu = bd(aV)
474+ let dy = bf(aV)
475+ let dz = bg(aV, dr)
476+ let aP = aH(0)
477+ let dA = bQ(bR(bx))
478+ let dB = (aP == dr)
479+ let dC = if (dB)
480+ then bi()
481+ else bh(aV)
482+ let cw = (height + dC)
483+ let dD = if ((aV == "neutrino"))
484+ then dq
485+ else bp(dq, dA)
486+ let dE = if ((aV == "neutrino"))
487+ then dx
488+ else bp(dw, dA)
489+ if ((bu > dq))
490+ then bt(aV, bu)
491+ else if (if (!(dB))
492+ then (du > 0)
487493 else false)
488- then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + ds))))
489- else if (if (!(dy))
490- then (dA > dB)
494+ then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + dv))))
495+ else if (if (!(dB))
496+ then (dD > dE)
491497 else false)
492- then throw(((("You have exceeded your swap limit! Requested: " + toString(dA)) + ", available: ") + toString(dB)))
493- else if (bz)
494- then bs()
498+ then throw(((("You have exceeded your swap limit! Requested: " + toString(dD)) + ", available: ") + toString(dE)))
499+ else if (bC)
500+ then bv()
495501 else {
496- let dC = if ((aS == "waves"))
497- then cY(0)
502+ let dF = if ((aV == "waves"))
503+ then db(0)
498504 else nil
499- $Tuple2(([IntegerEntry(bg(do), dA), IntegerEntry(bi(do), height), IntegerEntry(aU(aS, do), (dw + dn)), IntegerEntry(aH(do), ct), IntegerEntry(aT(aS), (dv + dn)), StringEntry(ci(do, dp), cA(aS, dn, ct))] ++ dC), unit)
505+ $Tuple2(([IntegerEntry(bj(dr), dD), IntegerEntry(bl(dr), height), IntegerEntry(aX(aV, dr), (dz + dq)), IntegerEntry(aK(dr), cw), IntegerEntry(aW(aV), (dy + dq)), StringEntry(cl(dr, ds), cD(aV, dq, cw))] ++ dF), unit)
500506 }
501507 }
502508
503509
504-let dD = 0
510+let dG = 0
505511
506-let dE = 1
512+let dH = 1
507513
508-let dF = 2
514+let dI = 2
509515
510-let dG = 3
516+let dJ = 3
511517
512-let dH = 4
518+let dK = 4
513519
514-let dI = 5
520+let dL = 5
515521
516-let dJ = 6
522+let dM = 6
517523
518-let dK = 7
524+let dN = 7
519525
520-let dL = 8
526+let dO = 8
521527
522-let dM = 9
528+let dP = 9
523529
524-let dN = 10
530+let dQ = 10
525531
526-let dO = 11
532+let dR = 11
527533
528-let dP = 0
534+let dS = 0
529535
530-let dQ = 1
536+let dT = 1
531537
532-let dR = 2
538+let dU = 2
533539
534-let dS = 3
540+let dV = 3
535541
536-let dT = 4
542+let dW = 4
537543
538-let dU = 5
544+let dX = 5
539545
540-let dV = 6
546+let dY = 6
541547
542-let dW = 7
548+let dZ = 7
543549
544-let dX = 8
550+let ea = 8
545551
546-let dY = 9
552+let eb = 9
547553
548-let dZ = 10
554+let ec = 10
549555
550-func ea (eb,bl) = {
551- let ec = bm(eb, bl)
552- $Tuple9(ec, by, 0, unit, 0, eb, 0, 0, 0)
556+func ed (ee,bo) = {
557+ let ef = bp(ee, bo)
558+ $Tuple9(ef, bB, 0, unit, 0, ee, 0, 0, 0)
553559 }
554560
555561
556-func ed (ee,bl,cz,ef,eg) = {
557- let eh = valueOrElse(getInteger(this, aZ()), E)
558- let ei = if ((eh >= cz))
562+func eg (eh,bo,cC,ei,ej) = {
563+ let ek = valueOrElse(getInteger(this, bc()), E)
564+ let el = if ((ek >= cC))
559565 then 0
560- else fraction((ef - fraction(eh, eg, B)), B, (B - eh))
561- let ej = if ((ee > ei))
562- then ei
563- else ee
564- let ek = if ((ee > ei))
565- then fraction((ee - ei), cz, B)
566+ else fraction((ei - fraction(ek, ej, B)), B, (B - ek))
567+ let em = if ((eh > el))
568+ then el
569+ else eh
570+ let en = if ((eh > el))
571+ then fraction((eh - el), cC, B)
566572 else 0
567- let el = (ej + ek)
568- let em = (ee - el)
569- let ec = bj(el, bl)
570- $Tuple9(ec, unit, em, by, ec, el, ei, ej, ek)
573+ let eo = (em + en)
574+ let ep = (eh - eo)
575+ let ef = bm(eo, bo)
576+ $Tuple9(ef, unit, ep, bB, ef, eo, el, em, en)
571577 }
572578
573579
574-func en (aS,cm,bl,eo) = {
575- let ep = valueOrElse(getInteger(this, aX(aS)), D)
576- if (if ((0 > ep))
580+func eq (aV,cp,bo,er) = {
581+ let es = valueOrElse(getInteger(this, ba(aV)), D)
582+ if (if ((0 > es))
577583 then true
578- else (ep >= B))
579- then throw(((("invalid outFeePart config for " + aS) + " swap: outFeePart=") + toString(ep)))
584+ else (es >= B))
585+ then throw(((("invalid outFeePart config for " + aV) + " swap: outFeePart=") + toString(es)))
580586 else {
581- let eh = valueOrElse(getInteger(this, aZ()), E)
582- let eq = q(eo[dL])
583- let ef = q(eo[dH])
584- let eg = q(eo[dI])
585- let er = if ((aS == "waves"))
586- then ea(cm, bl)
587- else if ((aS == "neutrino"))
588- then ed(cm, bl, eq, ef, eg)
589- else throw(("Unsupported swap type " + aS))
590- let ec = er._1
591- let es = er._2
592- let et = er._3
593- let eu = er._4
594- let ev = er._5
595- let ew = cH(ec, et, ep)
596- let ex = ew[F]
597- let ey = ew[G]
598- let cy = if ((0 >= et))
587+ let ek = valueOrElse(getInteger(this, bc()), E)
588+ let et = q(er[dO])
589+ let ei = q(er[dK])
590+ let ej = q(er[dL])
591+ let eu = if ((aV == "waves"))
592+ then ed(cp, bo)
593+ else if ((aV == "neutrino"))
594+ then eg(cp, bo, et, ei, ej)
595+ else throw(("Unsupported swap type " + aV))
596+ let ef = eu._1
597+ let ev = eu._2
598+ let ew = eu._3
599+ let ex = eu._4
600+ let ey = eu._5
601+ let ez = cK(ef, ew, es)
602+ let eA = ez[F]
603+ let eB = ez[G]
604+ let cB = if ((0 >= ew))
599605 then 0
600606 else {
601- let ez = l(invoke(ab, "surfFunctionREADONLY", [et, eu], nil))
602- q(ez[dP])
607+ let eC = l(invoke(ad, "surfFunctionREADONLY", [ew, ex], nil))
608+ q(eC[dS])
603609 }
604- $Tuple7(ex, es, cy, et, ev, ey, ec)
610+ $Tuple7(eA, ev, cB, ew, ey, eB, ef)
605611 }
606612 }
607613
608614
609-func eA (eB,aD,cF,cv,eo) = {
610- let bh = addressFromStringValue(eB)
611- let cD = cE(eB, cF)
612- let ct = parseIntValue(cD[ca])
613- let aS = cD[bQ]
614- let cm = parseIntValue(cD[bS])
615- let eC = cD[bR]
616- let cp = parseIntValue(cD[bW])
617- let ep = valueOrElse(getInteger(this, aX(aS)), D)
618- let dv = bc(aS)
619- let dw = bd(aS, eB)
620- let bw = ct
621- let bv = bO(aD)
622- let bx = bO((aD - 1))
623- let dx = bN(bv)
624- if (bz)
625- then bs()
626- else if ((eC != "PENDING"))
615+func eD (eE,aG,cI,cy,er) = {
616+ let bk = addressFromStringValue(eE)
617+ let cG = cH(eE, cI)
618+ let cw = parseIntValue(cG[cd])
619+ let aV = cG[bT]
620+ let cp = parseIntValue(cG[bV])
621+ let eF = cG[bU]
622+ let cs = parseIntValue(cG[bZ])
623+ let es = valueOrElse(getInteger(this, ba(aV)), D)
624+ let dy = bf(aV)
625+ let dz = bg(aV, eE)
626+ let bz = cw
627+ let by = bR(aG)
628+ let bA = bR((aG - 1))
629+ let dA = bQ(by)
630+ if (bC)
631+ then bv()
632+ else if ((eF != "PENDING"))
627633 then throw("swap has been already processed")
628- else if ((bw > height))
629- then throw((("please wait for: " + toString(bw)) + " block height to withdraw funds"))
630- else if (if (if ((aD > bu))
634+ else if ((bz > height))
635+ then throw((("please wait for: " + toString(bz)) + " block height to withdraw funds"))
636+ else if (if (if ((aG > bx))
631637 then true
632- else (bw > bv))
638+ else (bz > by))
633639 then true
634- else if ((bx != 0))
635- then (bx >= bw)
640+ else if ((bA != 0))
641+ then (bA >= bz)
636642 else false)
637- then bt(aD, bu, bv, bw, bx)
643+ then bw(aG, bx, by, bz, bA)
638644 else {
639- let eD = en(aS, cm, dx, eo)
640- let cn = eD._1
641- let es = eD._2
642- let cy = eD._3
643- let et = eD._4
644- let ev = eD._5
645- let co = eD._6
646- let ec = eD._7
647- if ((0 >= ec))
645+ let eG = eq(aV, cp, dA, er)
646+ let cq = eG._1
647+ let ev = eG._2
648+ let cB = eG._3
649+ let ew = eG._4
650+ let ey = eG._5
651+ let cr = eG._6
652+ let ef = eG._7
653+ if ((0 >= ef))
648654 then throw("balance equals zero")
649655 else {
650- let eq = q(eo[dL])
651- let eE = [IntegerEntry(aU(aS, eB), (dw - cm)), IntegerEntry(aT(aS), (dv - cm)), ScriptTransfer(bh, cn, es), StringEntry(ci(eB, cF), cC(cD, dx, cn, co, bw, aD, cv, cy, eq))]
652- let eF = if ((cy > 0))
656+ let et = q(er[dO])
657+ let eH = [IntegerEntry(aX(aV, eE), (dz - cp)), IntegerEntry(aW(aV), (dy - cp)), ScriptTransfer(bk, cq, ev), StringEntry(cl(eE, cI), cF(cG, dA, cq, cr, bz, aG, cy, cB, et))]
658+ let eI = if ((cB > 0))
653659 then {
654- let eG = invoke(af, "issueSurf", [cy, eB], nil)
655- if ((eG == eG))
660+ let eJ = invoke(ah, "issueSurf", [cB, eE], nil)
661+ if ((eJ == eJ))
656662 then 0
657663 else throw("Strict value is not equal to itself.")
658664 }
659665 else 0
660- if ((eF == eF))
661- then $Tuple3(eE, AttachedPayment(es, co), ev)
666+ if ((eI == eI))
667+ then $Tuple3(eH, AttachedPayment(ev, cr), ey)
662668 else throw("Strict value is not equal to itself.")
663669 }
664670 }
665671 }
666672
667673
668674 @Callable(r)
669-func constructor (eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS) = {
670- let eT = cX(r)
671- if ((eT == eT))
675+func constructor (eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV) = {
676+ let eW = da(r)
677+ if ((eW == eW))
672678 then if ((size(r.payments) != 0))
673679 then throw("no payments allowed")
674- else [StringEntry(ah, eH), StringEntry(ai, eI), StringEntry(aj, eJ), StringEntry(al, eK), StringEntry(am, eL), StringEntry(at, eM), IntegerEntry(ap, eN), IntegerEntry(aq, eO), IntegerEntry(ar, eP), IntegerEntry(as, eQ), IntegerEntry(au, eR), IntegerEntry(av, eS)]
680+ else [StringEntry(ak, eK), StringEntry(al, eL), StringEntry(am, eM), StringEntry(ao, eN), StringEntry(ap, eO), StringEntry(aw, eP), IntegerEntry(as, eQ), IntegerEntry(at, eR), IntegerEntry(au, eS), IntegerEntry(av, eT), IntegerEntry(ax, eU), IntegerEntry(ay, eV)]
675681 else throw("Strict value is not equal to itself.")
676682 }
677683
678684
679685
680686 @Callable(r)
681-func constructorV2 (ab,ac,eU) = {
682- let eT = cX(r)
683- if ((eT == eT))
687+func constructorV2 (ad,ae,eX) = {
688+ let eW = da(r)
689+ if ((eW == eW))
684690 then if ((size(r.payments) != 0))
685691 then throw("no payments allowed")
686- else [StringEntry(ao, ab), StringEntry(ak, ac), IntegerEntry(aY(), eU)]
692+ else [StringEntry(ar, ad), StringEntry(an, ae), IntegerEntry(bb(), eX)]
687693 else throw("Strict value is not equal to itself.")
688694 }
689695
690696
691697
692698 @Callable(r)
693699 func swapWavesToNeutrino () = if ((size(r.payments) != 1))
694700 then throw("swapWavesToNeutrino require only one payment")
695701 else {
696- let eV = value(r.payments[0])
697- if (isDefined(eV.assetId))
702+ let eY = value(r.payments[0])
703+ if (isDefined(eY.assetId))
698704 then throw("Only Waves token is allowed for swapping.")
699705 else {
700- let bh = toString(r.caller)
701- let dp = toBase58String(r.transactionId)
702- let eW = x(invoke(this, "swapParamsByUserSYSREADONLY", [bh, 0], nil))
703- let eX = dm("waves", eV.amount, bh, dp, eW)
704- eX
706+ let bk = toString(r.caller)
707+ let ds = toBase58String(r.transactionId)
708+ let eZ = x(invoke(this, "swapParamsByUserSYSREADONLY", [bk, 0], nil))
709+ let fa = dp("waves", eY.amount, bk, ds, eZ)
710+ fa
705711 }
706712 }
707713
708714
709715
710716 @Callable(r)
711717 func swapNeutrinoToWaves () = if ((size(r.payments) != 1))
712718 then throw("swapNeutrinoToWaves require only one payment")
713719 else {
714- let eV = value(r.payments[0])
715- if ((eV.assetId != by))
720+ let eY = value(r.payments[0])
721+ if ((eY.assetId != bB))
716722 then throw("Only appropriate Neutrino tokens are allowed for swapping.")
717723 else {
718- let bh = toString(r.caller)
719- let dp = toBase58String(r.transactionId)
720- let eW = x(invoke(this, "swapParamsByUserSYSREADONLY", [bh, 0], nil))
721- let eX = dm("neutrino", eV.amount, bh, dp, eW)
722- eX
724+ let bk = toString(r.caller)
725+ let ds = toBase58String(r.transactionId)
726+ let eZ = x(invoke(this, "swapParamsByUserSYSREADONLY", [bk, 0], nil))
727+ let fa = dp("neutrino", eY.amount, bk, ds, eZ)
728+ fa
723729 }
724730 }
725731
726732
727733
728734 @Callable(r)
729-func withdraw (eB,aD,cF) = {
730- let cj = toBase58String(r.transactionId)
735+func withdraw (eE,aG,cI) = {
736+ let cm = toBase58String(r.transactionId)
731737 if ((size(r.payments) != 0))
732738 then throw("no payments allowed")
733739 else {
734- let eo = l(invoke(ab, "calcNeutinoMetricsREADONLY", nil, nil))
735- let eq = q(eo[dL])
736- let eY = eA(eB, aD, cF, cj, eo)
737- let eE = eY._1
738- let eZ = eY._2
739- let ev = eY._3
740- let fa = invoke(this, "internalUnleaseAndLease", [ev], nil)
741- if ((fa == fa))
740+ let er = l(invoke(ad, "calcNeutinoMetricsREADONLY", nil, nil))
741+ let et = q(er[dO])
742+ let fb = eD(eE, aG, cI, cm, er)
743+ let eH = fb._1
744+ let fc = fb._2
745+ let ey = fb._3
746+ let fd = invoke(this, "internalUnleaseAndLease", [ey], nil)
747+ if ((fd == fd))
742748 then {
743- let fb = l(invoke(ae, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
744- let fc = q(fb[1])
745- let fd = q(l(fb[3])[3])
746- let fe = if ((fc != 0))
747- then fraction(eZ.amount, fd, fc)
749+ let fe = l(invoke(ag, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
750+ let ff = q(fe[1])
751+ let fg = q(l(fe[3])[3])
752+ let fh = if ((ff != 0))
753+ then fraction(fc.amount, fg, ff)
748754 else 0
749- let ff = if ((fc != 0))
750- then fraction(eZ.amount, (B - eq), B)
755+ let fi = if ((ff != 0))
756+ then fraction(fc.amount, (B - et), B)
751757 else 0
752- let fg = max([fe, ff])
753- let fh = (eZ.amount - fg)
754- let fi = if ((fg > 0))
758+ let fj = max([fh, fi])
759+ let fk = (fc.amount - fj)
760+ let fl = if ((fj > 0))
755761 then {
756- let fj = invoke(ad, "deposit", nil, [AttachedPayment(eZ.assetId, fg)])
757- if ((fj == fj))
762+ let fm = invoke(af, "deposit", nil, [AttachedPayment(fc.assetId, fj)])
763+ if ((fm == fm))
758764 then nil
759765 else throw("Strict value is not equal to itself.")
760766 }
761767 else nil
762- if ((fi == fi))
768+ if ((fl == fl))
763769 then {
764- let fk = if ((fh > 0))
770+ let fn = if ((fk > 0))
765771 then {
766- let fl = invoke(ac, "deposit", nil, [AttachedPayment(eZ.assetId, fh)])
767- if ((fl == fl))
772+ let fo = invoke(ae, "deposit", nil, [AttachedPayment(fc.assetId, fk)])
773+ if ((fo == fo))
768774 then nil
769775 else throw("Strict value is not equal to itself.")
770776 }
771777 else nil
772- if ((fk == fk))
773- then eE
778+ if ((fn == fn))
779+ then eH
774780 else throw("Strict value is not equal to itself.")
775781 }
776782 else throw("Strict value is not equal to itself.")
777783 }
778784 else throw("Strict value is not equal to itself.")
779785 }
780786 }
781787
782788
783789
784790 @Callable(r)
785-func internalUnleaseAndLease (cP) = if ((r.caller != this))
791+func internalUnleaseAndLease (cS) = if ((r.caller != this))
786792 then throw("internalUnleaseAndLease is not public method")
787- else cY(cP)
793+ else db(cS)
788794
789795
790796
791797 @Callable(r)
792-func transferUsdnToUser (bk,fm) = if ((r.caller != af))
798+func transferUsdnToUser (bn,fp) = if ((r.caller != ah))
793799 then throw("Only auction contract is authorized")
794- else [ScriptTransfer(addressFromStringValue(fm), bk, by)]
800+ else [ScriptTransfer(addressFromStringValue(fp), bn, bB)]
795801
796802
797803
798804 @Callable(r)
799-func acceptWaves () = if ((r.caller != af))
800- then throw("Currently only auction contract is allowed to call")
801- else $Tuple2(cY(0), "success")
805+func acceptWaves () = if (if ((r.caller != ah))
806+ then (r.caller != aj)
807+ else false)
808+ then throw("Currently only auction and governance contracts are allowed to call")
809+ else $Tuple2(db(0), "success")
802810
803811
804812
805813 @Callable(r)
806-func approveLeasings (fn,aQ,fo) = {
807- let fp = [0, 1, 2, 3, 4, 5, 6, 7]
808- let fq = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
809- let fr = fromBase58String(fq)
810- let fs = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
811- let ft = addressFromStringValue(fs)
812- let fu = aP(aQ)
813- let fv = getString(this, fu)
814- if (isDefined(fv))
815- then throw((("group " + toString(aQ)) + " already initialized"))
814+func approveLeasings (fq,aT,fr) = {
815+ let fs = [0, 1, 2, 3, 4, 5, 6, 7]
816+ let ft = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
817+ let fu = fromBase58String(ft)
818+ let fv = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
819+ let fw = addressFromStringValue(fv)
820+ let fx = aS(aT)
821+ let fy = getString(this, fx)
822+ if (isDefined(fy))
823+ then throw((("group " + toString(aT)) + " already initialized"))
816824 else {
817- let fw = split(fn, z)
818- let fx = size(fp)
819- if ((r.callerPublicKey != fr))
825+ let fz = split(fq, z)
826+ let fA = size(fs)
827+ if ((r.callerPublicKey != fu))
820828 then throw("approveLeasings not authorized")
821829 else {
822- let fy = dg(0)
823- let fz = fy._1
824- let fA = fy._2
825- let fB = fy._3
826- let fC = fy._4
827- let fD = fy._5
828- let fE = Lease(fz, (fB - (fo * fx)))
829- let fF = invoke(ft, "validateAndApproveLeasings", [fn], nil)
830- if ((fF == fF))
830+ let fB = dj(0)
831+ let fC = fB._1
832+ let fD = fB._2
833+ let fE = fB._3
834+ let fF = fB._4
835+ let fG = fB._5
836+ let fH = Lease(fC, (fE - (fr * fA)))
837+ let fI = invoke(fw, "validateAndApproveLeasings", [fq], nil)
838+ if ((fI == fI))
831839 then {
832- func fG (fH,r) = {
833- let fI = fw[r]
834- let fJ = Lease(addressFromStringValue(fI), fo)
835- (fH ++ [fJ, BinaryEntry(aL(fI), d(fJ)), IntegerEntry(aO(fI), fo)])
840+ func fJ (fK,r) = {
841+ let fL = fz[r]
842+ let fM = Lease(addressFromStringValue(fL), fr)
843+ (fK ++ [fM, BinaryEntry(aO(fL), d(fM)), IntegerEntry(aR(fL), fr)])
836844 }
837845
838- ([StringEntry(fu, fn), BinaryEntry(fC, d(fE)), IntegerEntry(fA, fE.amount), LeaseCancel(fD), fE] ++ {
839- let fK = fp
840- let fL = size(fK)
841- let fM = nil
842- func fN (fO,fP) = if ((fP >= fL))
843- then fO
844- else fG(fO, fK[fP])
846+ ([StringEntry(fx, fq), BinaryEntry(fF, d(fH)), IntegerEntry(fD, fH.amount), LeaseCancel(fG), fH] ++ {
847+ let fN = fs
848+ let fO = size(fN)
849+ let fP = nil
850+ func fQ (fR,fS) = if ((fS >= fO))
851+ then fR
852+ else fJ(fR, fN[fS])
845853
846- func fQ (fO,fP) = if ((fP >= fL))
847- then fO
854+ func fT (fR,fS) = if ((fS >= fO))
855+ then fR
848856 else throw("List size exceeds 8")
849857
850- fQ(fN(fN(fN(fN(fN(fN(fN(fN(fM, 0), 1), 2), 3), 4), 5), 6), 7), 8)
858+ fT(fQ(fQ(fQ(fQ(fQ(fQ(fQ(fQ(fP, 0), 1), 2), 3), 4), 5), 6), 7), 8)
851859 })
852860 }
853861 else throw("Strict value is not equal to itself.")
854862 }
855863 }
856864 }
857865
858866
859867
860868 @Callable(r)
861-func rebalanceLeasings (bk,aQ) = {
862- let fp = [0, 1, 2, 3, 4, 5, 6, 7]
863- let fq = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
864- let fr = fromBase58String(fq)
865- let fu = aP(aQ)
866- let fn = a(this, fu)
867- let fw = split(fn, z)
868- if ((r.callerPublicKey != fr))
869+func rebalanceLeasings (bn,aT) = {
870+ let fs = [0, 1, 2, 3, 4, 5, 6, 7]
871+ let ft = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
872+ let fu = fromBase58String(ft)
873+ let fx = aS(aT)
874+ let fq = a(this, fx)
875+ let fz = split(fq, z)
876+ if ((r.callerPublicKey != fu))
869877 then throw("rebalanceLeasings not authorized")
870878 else {
871- let ev = ((bk / size(fw)) + 1)
872- let fR = dg(0)
873- let fz = fR._1
874- let fA = fR._2
875- let fB = fR._3
876- let fC = fR._4
877- let fD = fR._5
878- let fE = Lease(fz, (fB + (ev * size(fw))))
879- func fS (fH,r) = {
880- let fI = fw[r]
881- let fT = aL(fI)
882- let fU = getBinaryValue(this, fT)
883- let fV = aO(fI)
884- let fo = getIntegerValue(this, fV)
885- let fW = LeaseCancel(value(fU))
886- let fJ = Lease(addressFromStringValue(fI), (fo - ev))
887- (fH ++ [LeaseCancel(value(fU)), fJ, BinaryEntry(fT, d(fJ)), IntegerEntry(fV, fJ.amount)])
879+ let ey = ((bn / size(fz)) + 1)
880+ let fU = dj(0)
881+ let fC = fU._1
882+ let fD = fU._2
883+ let fE = fU._3
884+ let fF = fU._4
885+ let fG = fU._5
886+ let fH = Lease(fC, (fE + (ey * size(fz))))
887+ func fV (fK,r) = {
888+ let fL = fz[r]
889+ let fW = aO(fL)
890+ let fX = getBinaryValue(this, fW)
891+ let fY = aR(fL)
892+ let fr = getIntegerValue(this, fY)
893+ let fZ = LeaseCancel(value(fX))
894+ let fM = Lease(addressFromStringValue(fL), (fr - ey))
895+ (fK ++ [LeaseCancel(value(fX)), fM, BinaryEntry(fW, d(fM)), IntegerEntry(fY, fM.amount)])
888896 }
889897
890898 ({
891- let fK = fp
892- let fL = size(fK)
893- let fM = nil
894- func fN (fO,fP) = if ((fP >= fL))
895- then fO
896- else fS(fO, fK[fP])
899+ let fN = fs
900+ let fO = size(fN)
901+ let fP = nil
902+ func fQ (fR,fS) = if ((fS >= fO))
903+ then fR
904+ else fV(fR, fN[fS])
897905
898- func fQ (fO,fP) = if ((fP >= fL))
899- then fO
906+ func fT (fR,fS) = if ((fS >= fO))
907+ then fR
900908 else throw("List size exceeds 8")
901909
902- fQ(fN(fN(fN(fN(fN(fN(fN(fN(fM, 0), 1), 2), 3), 4), 5), 6), 7), 8)
903- } ++ [BinaryEntry(fC, d(fE)), IntegerEntry(fA, fE.amount), LeaseCancel(fD), fE])
910+ fT(fQ(fQ(fQ(fQ(fQ(fQ(fQ(fQ(fP, 0), 1), 2), 3), 4), 5), 6), 7), 8)
911+ } ++ [BinaryEntry(fF, d(fH)), IntegerEntry(fD, fH.amount), LeaseCancel(fG), fH])
904912 }
905913 }
906914
907915
908916
909917 @Callable(r)
910-func swapParamsByUserSYSREADONLY (do,fX) = {
911- let fb = l(invoke(ae, "gnsbtInfoSYSREADONLY", [do, 0, 0], nil))
912- let fY = (q(fb[0]) + fX)
913- let fc = (q(fb[1]) + fX)
914- let fZ = l(invoke(ab, "calcSwapLimitREADONLY", [fY], nil))
915- let ga = q(fZ[0])
916- let dt = q(fZ[1])
917- let du = q(fZ[2])
918- let gb = valueOrElse(getInteger(this, bi(do)), 0)
919- let gc = bb()
920- let gd = (height - gb)
921- let ge = (gd >= gc)
922- let gf = if (ge)
918+func swapParamsByUserSYSREADONLY (dr,ga) = {
919+ let fe = l(invoke(ag, "gnsbtInfoSYSREADONLY", [dr, 0, 0], nil))
920+ let gb = (q(fe[0]) + ga)
921+ let ff = (q(fe[1]) + ga)
922+ let gc = l(invoke(ad, "calcSwapLimitREADONLY", [gb], nil))
923+ let gd = q(gc[0])
924+ let dw = q(gc[1])
925+ let dx = q(gc[2])
926+ let ge = valueOrElse(getInteger(this, bl(dr)), 0)
927+ let gf = be()
928+ let gg = (height - ge)
929+ let gh = (gg >= gf)
930+ let gi = if (gh)
923931 then 0
924- else valueOrElse(getInteger(this, bg(do)), 0)
925- let ds = if (ge)
932+ else valueOrElse(getInteger(this, bj(dr)), 0)
933+ let dv = if (gh)
926934 then 0
927- else (gc - gd)
928- $Tuple2(nil, $Tuple7(ga, gf, ds, fY, fc, dt, du))
935+ else (gf - gg)
936+ $Tuple2(nil, $Tuple7(gd, gi, dv, gb, ff, dw, dx))
929937 }
930938
931939
932940
933941 @Callable(r)
934-func calcWithdrawResultSYSREADONLY (aS,cm,bl) = {
935- let eo = l(invoke(ab, "calcNeutinoMetricsREADONLY", nil, nil))
936- $Tuple2(nil, en(aS, cm, bl, eo))
942+func calcWithdrawResultSYSREADONLY (aV,cp,bo) = {
943+ let er = l(invoke(ad, "calcNeutinoMetricsREADONLY", nil, nil))
944+ $Tuple2(nil, eq(aV, cp, bo, er))
937945 }
938946
939947
940948
941949 @Callable(r)
942-func replaceCommunityNode (gg,gh,aQ,gi) = {
943- let fq = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
944- let fr = fromBase58String(fq)
945- if ((r.callerPublicKey != fr))
950+func replaceCommunityNode (gj,gk,aT,gl) = {
951+ let ft = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
952+ let fu = fromBase58String(ft)
953+ if ((r.callerPublicKey != fu))
946954 then throw("replaceCommunityNode not authorized")
947955 else {
948- let gj = aP(aQ)
949- let gk = a(this, gj)
950- if (!(contains(gk, gg)))
951- then throw(((("Group " + toString(aQ)) + " does not contain address ") + gg))
956+ let gm = aS(aT)
957+ let gn = a(this, gm)
958+ if (!(contains(gn, gj)))
959+ then throw(((("Group " + toString(aT)) + " does not contain address ") + gj))
952960 else {
953- let gl = invoke(ag, "replaceApprovedNode", [gg, gh, aQ, gi], nil)
954- if ((gl == gl))
961+ let go = invoke(ai, "replaceApprovedNode", [gj, gk, aT, gl], nil)
962+ if ((go == go))
955963 then {
956- let gm = aL(gg)
957- let gn = aO(gg)
958- let go = getIntegerValue(gn)
959- let gp = aL(gg)
960- let gq = aO(gg)
961- let gr = Lease(addressFromStringValue(gh), go)
962- let gs = makeString(split(gk, gg), gh)
963- $Tuple2([LeaseCancel(getBinaryValue(gm)), DeleteEntry(gm), DeleteEntry(gn), StringEntry(gj, gs), gr, BinaryEntry(gp, d(gr)), IntegerEntry(gq, go)], unit)
964+ let gp = aO(gj)
965+ let gq = aR(gj)
966+ let gr = getIntegerValue(gq)
967+ let gs = aO(gj)
968+ let gt = aR(gj)
969+ let gu = Lease(addressFromStringValue(gk), gr)
970+ let gv = makeString(split(gn, gj), gk)
971+ $Tuple2([LeaseCancel(getBinaryValue(gp)), DeleteEntry(gp), DeleteEntry(gq), StringEntry(gm, gv), gu, BinaryEntry(gs, d(gu)), IntegerEntry(gt, gr)], unit)
964972 }
965973 else throw("Strict value is not equal to itself.")
966974 }
967975 }
968976 }
969977
970978
971979
972980 @Callable(r)
973981 func updateReservesAndNeutrinoSupply () = {
974- func gt (c) = {
982+ func gw (c) = {
975983 let n = getInteger(this, c)
976984 if ($isInstanceOf(n, "Int"))
977985 then {
978- let fH = n
979- fH
986+ let fK = n
987+ fK
980988 }
981989 else 0
982990 }
983991
984- let gu = l(invoke(ab, "calcNeutinoMetricsREADONLY", nil, nil))
985- let Z = gt("updateReservesAndNeutrinoSupplyIdx")
986- let gv = (Z + 1)
987-[IntegerEntry("updateReservesAndNeutrinoSupplyIdx", gv), IntegerEntry("reserve", q(gu[3])), IntegerEntry("neutrinoSupply", q(gu[5])), IntegerEntry("reservesInUsdn", bm(q(gu[3]), q(gu[0]))), IntegerEntry("surplus", q(gu[6])), IntegerEntry("deficit", -(q(gu[6])))]
992+ let gx = l(invoke(ad, "calcNeutinoMetricsREADONLY", nil, nil))
993+ let ab = gw("updateReservesAndNeutrinoSupplyIdx")
994+ let gy = (ab + 1)
995+[IntegerEntry("updateReservesAndNeutrinoSupplyIdx", gy), IntegerEntry("reserve", q(gx[3])), IntegerEntry("neutrinoSupply", q(gx[5])), IntegerEntry("reservesInUsdn", bp(q(gx[3]), q(gx[0]))), IntegerEntry("surplus", q(gx[6])), IntegerEntry("deficit", -(q(gx[6])))]
988996 }
989997
990998
991999
9921000 @Callable(r)
9931001 func wavesBalancesVsPayment () = {
994- let gw = wavesBalance(this)
995-[IntegerEntry("wavesBalance_available", gw.available), IntegerEntry("wavesBalance_regular", gw.regular), IntegerEntry("wavesBalance_generating", gw.generating), IntegerEntry("wavesBalance_effective", gw.effective), IntegerEntry("waves_payment", value(r.payments[0]).amount)]
1002+ let gz = wavesBalance(this)
1003+[IntegerEntry("wavesBalance_available", gz.available), IntegerEntry("wavesBalance_regular", gz.regular), IntegerEntry("wavesBalance_generating", gz.generating), IntegerEntry("wavesBalance_effective", gz.effective), IntegerEntry("waves_payment", value(r.payments[0]).amount)]
9961004 }
9971005
9981006
999-@Verifier(bG)
1000-func gx () = {
1001- let gy = toBase58String(bG.id)
1002- let gz = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1003- let gA = split(valueOrElse(getString(aa, "%s__multisig"), gz), z)
1004- let gB = ((((if (sigVerify(bG.bodyBytes, bG.proofs[0], fromBase58String(gA[0])))
1007+@Verifier(bJ)
1008+func gA () = {
1009+ let gB = toBase58String(bJ.id)
1010+ let gC = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1011+ let gD = split(valueOrElse(getString(ac, "%s__multisig"), gC), z)
1012+ let gE = ((((if (sigVerify(bJ.bodyBytes, bJ.proofs[0], fromBase58String(gD[0])))
10051013 then 1
1006- else 0) + (if (sigVerify(bG.bodyBytes, bG.proofs[1], fromBase58String(gA[1])))
1014+ else 0) + (if (sigVerify(bJ.bodyBytes, bJ.proofs[1], fromBase58String(gD[1])))
10071015 then 1
1008- else 0)) + (if (sigVerify(bG.bodyBytes, bG.proofs[2], fromBase58String(gA[2])))
1016+ else 0)) + (if (sigVerify(bJ.bodyBytes, bJ.proofs[2], fromBase58String(gD[2])))
10091017 then 1
1010- else 0)) + (if (sigVerify(bG.bodyBytes, bG.proofs[3], fromBase58String(gA[3])))
1018+ else 0)) + (if (sigVerify(bJ.bodyBytes, bJ.proofs[3], fromBase58String(gD[3])))
10111019 then 2
10121020 else 0))
1013- let n = bG
1021+ let n = bJ
10141022 if ($isInstanceOf(n, "SponsorFeeTransaction"))
10151023 then {
1016- let gC = n
1017- if (bF(gC))
1018- then (gB >= 3)
1024+ let gF = n
1025+ if (bI(gF))
1026+ then (gE >= 3)
10191027 else false
10201028 }
1021- else (gB >= 3)
1029+ else (gE >= 3)
10221030 }
10231031

github/deemru/w8io/026f985 
398.13 ms