tx · 9YzeBqXEw9wMZ8SzXZxsKSEXkgQwoU4GUZAXkMVLbvT7

3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p:  -0.01700000 Waves

2023.12.02 08:57 [2868628] smart account 3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p > SELF 0.00000000 Waves

{ "type": 13, "id": "9YzeBqXEw9wMZ8SzXZxsKSEXkgQwoU4GUZAXkMVLbvT7", "fee": 1700000, "feeAssetId": null, "timestamp": 1701496635068, "version": 2, "chainId": 84, "sender": "3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p", "senderPublicKey": "Hh3eFP2XFetZSfTxQiM1Ps96f68zi8Zh5ghhCZdjgdFs", "proofs": [ "4L8t1a2NtwjBLA3WvyS4aG6d4oXZX6cfXJsaRM2skeTeCPt87BiXPoaP3FUrHHiM3UbthVRbmusaWGL48d46kiwf" ], "script": "base64:BgI5CAISBAoCCAgSBAoCBAgSBAoCAQgSBQoDCAEIEgMKAQgSAwoBCBIDCgEIEgUKAwgICBIGCgQICAgIRQAHVkVSU0lPTgIFMi4wLjABCWdldFN0ckJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1bml0VGVzdAcACW9yYWNsZUZlZQkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIPY29uZl9vcmFjbGVfZmVlAAtmZWVSZWNlaXZlcgkBCWdldFN0ckJ5SwECEWNvbmZfZmVlX3JlY2VpdmVyAAxhcnR3b3Jrc0RhcHAJAQV2YWx1ZQEJAKYIAQkBCWdldFN0ckJ5SwECEmNvbmZfYXJ0d29ya3NfZGFwcAAIdXNlckRhcHADBQh1bml0VGVzdAkBBXZhbHVlAQkApggBAiMzTXQ0UkdNRXlqU1dZQW9jVFBxZDU1d2RIUVFCM1BVMlVDbQkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIPY29uZl91c2Vyc19kYXBwAA9wdXp6bGVfYXJ0X3Bvb2wJAQlnZXRTdHJCeUsBAhRjb25mX3B1enpsZV9hcnRfcG9vbAARdXNkdFBQQXNzZXRJZF9zdHIJAQlnZXRTdHJCeUsBAhtjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRFRfUFAADmFydEFzc2V0SWRfc3RyCQEJZ2V0U3RyQnlLAQIXY29uZl9hY2NlcHRlZF9hc3NldF9BUlQAEXVzZGNQUEFzc2V0SWRfc3RyCQEJZ2V0U3RyQnlLAQIbY29uZl9hY2NlcHRlZF9hc3NldF9VU0RDX1BQAA9lYXN0QXNzZXRJZF9zdHIJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X0VBU1QAEXB1enpsZUFzc2V0SWRfc3RyCQEJZ2V0U3RyQnlLAQIaY29uZl9hY2NlcHRlZF9hc3NldF9QVVpaTEUAEGV0aFBQQXNzZXRJZF9zdHIJAQlnZXRTdHJCeUsBAhpjb25mX2FjY2VwdGVkX2Fzc2V0X0VUSF9QUAAQd2F2ZXNBc3NldElkX3N0cgIFV0FWRVMADXVzZHRQUEFzc2V0SWQJANkEAQURdXNkdFBQQXNzZXRJZF9zdHIACmFydEFzc2V0SWQJANkEAQUOYXJ0QXNzZXRJZF9zdHIADXVzZGNQUEFzc2V0SWQJANkEAQURdXNkY1BQQXNzZXRJZF9zdHIAC2Vhc3RBc3NldElkCQDZBAEFD2Vhc3RBc3NldElkX3N0cgANcHV6emxlQXNzZXRJZAkA2QQBBRFwdXp6bGVBc3NldElkX3N0cgAMZXRoUFBBc3NldElkCQDZBAEFEGV0aFBQQXNzZXRJZF9zdHIADHdhdmVzQXNzZXRJZAEAABNhbGxfYWNjZXB0ZWRfYXNzZXRzCQDMCAIFEXVzZHRQUEFzc2V0SWRfc3RyCQDMCAIFDmFydEFzc2V0SWRfc3RyCQDMCAIFEXVzZGNQUEFzc2V0SWRfc3RyCQDMCAIFD2Vhc3RBc3NldElkX3N0cgkAzAgCBRFwdXp6bGVBc3NldElkX3N0cgkAzAgCBRB3YXZlc0Fzc2V0SWRfc3RyCQDMCAIFEGV0aFBQQXNzZXRJZF9zdHIFA25pbAAFY2hyaXMJAQlnZXRTdHJCeUsBAgxjb25mX2FkbWluXzEADmNvbW1pc3Npb25fZmVlAAMADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAALdXNlclJlbW92ZWQCB1JFTU9WRUQACmFydElsbGVnYWwCB0lMTEVHQUwADGFydFN1c3BlbmRlZAIJU1VTUEVOREVEAA5kYXBwUnVubmluZ0tleQIUY29uZl9kYXBwX2lzX3J1bm5pbmcAEW1haW50ZW5hbmNlTVNHS2V5AhRjb25mX21haW50ZW5hbmNlX21zZwALZGFwcFJ1bm5pbmcJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUOZGFwcFJ1bm5pbmdLZXkGAA5tYWludGVuYW5jZU1TRwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBRFtYWludGVuYW5jZU1TR0tleQIAAAludW1TYWxlc0sCCW51bV9zYWxlcwENZ2V0VXNlclN0ckJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwBQNrZXkCBUVycm9yARNnZXRBcnR3b3JrUm95YWx0aWVzAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMYXJ0d29ya3NEYXBwBQNrZXkA6AcBDGdldEFydFN0ckJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFDGFydHdvcmtzRGFwcAUDa2V5AgABCWdldEludEJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAQ1rZXlVc2VyU3RhdHVzAQRhZGRyCQCsAgICDHVzZXJfc3RhdHVzXwUEYWRkcgETa2V5QXJ0d29ya1JveWFsdGllcwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUFYXJ0SWQCAV8FBmNhbGxlcgEJa2V5U2lnbklEAgphcnRpc3RBZGRyBWFydElkCQCsAgIJAKwCAgkArAICAgthcnRfc2lnbmlkXwUFYXJ0SWQCAV8FCmFydGlzdEFkZHIBB2tleUZsYWcCCmFydGlzdEFkZHIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUFYXJ0SWQCAV8FCmFydGlzdEFkZHIBCmtleU5GVERhdGEBAmlkCQCsAgICBG5mdF8FAmlkAQpnZXRTYWxlS2V5BAZjYWxsZXIFbmZ0SWQFYXJ0SWQLY3JlYXRvckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINc2FsZTJuZF9pbmZvXwUGY2FsbGVyAgFfBQVuZnRJZAIBXwUFYXJ0SWQCAV8FC2NyZWF0b3JBZGRyAQlnZXRCaWRLZXkECm9mZmVyT3duZXIFbmZ0SWQJc2FsZU93bmVyB29mZmVySWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJb2ZmZXIybmRfBQpvZmZlck93bmVyAgFfBQVuZnRJZAIBXwUJc2FsZU93bmVyAgFfBQdvZmZlcklkARNnZXRJbnRCeUtGcm9tT3JhY2xlAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQlvcmFjbGVGZWUFA2tleQIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkBE2dldEludEJ5S0Zyb21PcmFjbGUBCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQphcnRBc3NldElkARJrZXlBcnRpc3RBZ2VudEFkZHIBCmFydGlzdEFkZHIJAKwCAgINYXJ0aXN0X2FnZW50XwUKYXJ0aXN0QWRkcgEWa2V5U2Vjb25kYXJ5U2hhcmVBZ2VudAEKYXJ0aXN0QWRkcgkArAICAhdhcnRpc3RfYWdlbnRfc2Vjb25kYXJ5XwUKYXJ0aXN0QWRkcgEYa2V5QXJ0aXN0UHVibGljQWdlbnRBZGRyAQphcnRpc3RBZGRyCQCsAgICFGFydGlzdF9wdWJsaWNfYWdlbnRfBQphcnRpc3RBZGRyARxrZXlTZWNvbmRhcnlTaGFyZVB1YmxpY0FnZW50AQphcnRpc3RBZGRyCQCsAgICHmFydGlzdF9wdWJsaWNfYWdlbnRfc2Vjb25kYXJ5XwUKYXJ0aXN0QWRkcgEMaWRDYWxsZXJEYXRlAQFpAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHCQCVCgMJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEJaXNQYXltZW50AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnQgYXR0YWNoZWQEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CQEFdmFsdWUBCAUHcGF5bWVudAZhbW91bnQJAJQKAgUHcGF5bWVudAUGYW1vdW50AQxhc3NldElzVmFsaWQBDGFzc2V0RGV0YWlscwMDAwkAAAIIBQxhc3NldERldGFpbHMIcXVhbnRpdHkAAQkAAAIIBQxhc3NldERldGFpbHMIZGVjaW1hbHMAAAcJAAACCAUMYXNzZXREZXRhaWxzCnJlaXNzdWFibGUHBwkAAAIIBQxhc3NldERldGFpbHMGaXNzdWVyBQxhcnR3b3Jrc0RhcHAHAQxpc1NpZ25BcnRORlQBAmlkBAxhc3NldERldGFpbHMJAQV2YWx1ZQEJAOwHAQUCaWQJAQxhc3NldElzVmFsaWQBBQxhc3NldERldGFpbHMBEGFjY2VwdGVkQXNzZXRJZHMBB2Fzc2V0SWQDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBRNhbGxfYWNjZXB0ZWRfYXNzZXRzBQdhc3NldElkCQACAQJAT25seSAkQVJULCBVU0RULVBQLCBVU0RDLVBQLCBFQVNULCBQVVpaTEUsIEVUSCBvciBXQVZFUyBhY2NlcHRlZAYBDWdldEJpZEFzc2V0SWQBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQVuZnRpZAQJc2FsZU93bmVyCQEJZ2V0U3RyQnlLAQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRpZAMJAAACCQCxAgEFCXNhbGVPd25lcgAACQACAQINTkZUIG5vdCBmb3VuZAQKc2FsZVN0YXR1cwkBCWdldFN0ckJ5SwEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRpZAMJAQIhPQIFCnNhbGVTdGF0dXMCBE9QRU4JAAIBAhBORlQgbm90IGZvciBzYWxlBQlzYWxlT3duZXIBCmdldEJpZERhdGEBA2tleQQHYmlkRGF0YQkBCWdldFN0ckJ5SwEJAKwCAgUDa2V5AgVfT1BFTgMJAAACBQdiaWREYXRhAgAJAAIBAg9PZmZlciBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQHYXNzZXRJZAkBDWdldEJpZEFzc2V0SWQBCQCRAwIFCmJpZERhdGFBcnIAAgkAlQoDBQpiaWREYXRhQXJyBQdhc3NldElkBQdiaWREYXRhAQpnZXRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJAPAHAgUEdGhpcwUBYggJAO8HAQUEdGhpcwlhdmFpbGFibGUBCmFydElzVmFsaWQBCWFydFN0YXR1cwMJAQIhPQIFCWFydFN0YXR1cwUKYXJ0SWxsZWdhbAkBAiE9AgUJYXJ0U3RhdHVzBQxhcnRTdXNwZW5kZWQHAQ5jaGVja0FydFN0YXR1cwIEYWRkcgJpZAQJYXJ0U3RhdHVzCQEMZ2V0QXJ0U3RyQnlLAQkBB2tleUZsYWcCBQRhZGRyBQJpZAMJAQphcnRJc1ZhbGlkAQUJYXJ0U3RhdHVzBgkAAgEJAKwCAgIcT3JpZ2luYWwgQXJ0d29yayBmbGFnZ2VkIGFzIAUJYXJ0U3RhdHVzARFjaGVja0FydGlzdFN0YXR1cwEEYWRkcgQMYXJ0aXN0U3RhdHVzCQENZ2V0VXNlclN0ckJ5SwEJAQ1rZXlVc2VyU3RhdHVzAQUEYWRkcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDXVzZXJTdXNwZW5kZWQJAMwIAgULdXNlclJlbW92ZWQFA25pbAUMYXJ0aXN0U3RhdHVzCQACAQkArAICAhBPcmlnaW5hbCBBcnRpc3QgBQxhcnRpc3RTdGF0dXMGAQxjaGVja05GVEluZm8BB2Fzc2V0SWQEB25mdERhdGEJALUJAgkBDGdldEFydFN0ckJ5SwEJAQprZXlORlREYXRhAQUHYXNzZXRJZAIBXwQJYXJ0U2lnbklECQEMZ2V0QXJ0U3RyQnlLAQkArAICCQCsAgIJAKwCAgIJYXJ0X25hbWVfCQCRAwIFB25mdERhdGEABQIBXwkAkQMCBQduZnREYXRhAAYDAwkBASEBCQEOY2hlY2tBcnRTdGF0dXMCCQCRAwIFB25mdERhdGEABgkAkQMCBQduZnREYXRhAAUJAQEhAQkBEWNoZWNrQXJ0aXN0U3RhdHVzAQkAkQMCBQduZnREYXRhAAYHCQCWCgQHCQCRAwIFB25mdERhdGEABQkAkQMCBQduZnREYXRhAAYFCWFydFNpZ25JRAkAlgoEBgkAkQMCBQduZnREYXRhAAUJAJEDAgUHbmZ0RGF0YQAGBQlhcnRTaWduSUQBDWNoZWNrQVJURXhpc3QCBWFydElkC2NyZWF0b3JBZGRyBAlhcnRTaWduSUQJAQxnZXRBcnRTdHJCeUsBCQEJa2V5U2lnbklEAgULY3JlYXRvckFkZHIFBWFydElkAwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAh1BcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydAMDCQEBIQEJAQ5jaGVja0FydFN0YXR1cwIFC2NyZWF0b3JBZGRyBQVhcnRJZAkBASEBCQERY2hlY2tBcnRpc3RTdGF0dXMBBQtjcmVhdG9yQWRkcgcHBgEMc2V0VHJhbnNmZXJzBwZhbW91bnQHYXNzZXRJZAVuZnRpZAtjcmVhdG9yQWRkcglzYWxlT3duZXIGY2FsbGVyBWFydElkBApjcmVhdG9yQ3V0CQETZ2V0QXJ0d29ya1JveWFsdGllcwEJARNrZXlBcnR3b3JrUm95YWx0aWVzAgULY3JlYXRvckFkZHIFBWFydElkBAVhZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBEmtleUFydGlzdEFnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQKYWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBFmtleVNlY29uZGFyeVNoYXJlQWdlbnQBBQtjcmVhdG9yQWRkcgAABAtwdWJsaWNBZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBGGtleUFydGlzdFB1YmxpY0FnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQQcHVibGljQWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBHGtleVNlY29uZGFyeVNoYXJlUHVibGljQWdlbnQBBQtjcmVhdG9yQWRkcgAABA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQ5jb21taXNzaW9uX2ZlZQBkBBBhbW91bnRGb3JDcmVhdG9yCQBrAwUGYW1vdW50BQpjcmVhdG9yQ3V0AJBOBA5hbW91bnRGb3JPd25lcgkAZQIFBmFtb3VudAkAZAIFDWFtb3VudEZvclNpZ24FEGFtb3VudEZvckNyZWF0b3IEDmFtb3VudEZvckFnZW50AwMJAQIhPQIFBWFnZW50BQtmZWVSZWNlaXZlcgkAZgIFCmFnZW50U2hhcmUAAAcJAGsDBQZhbW91bnQFCmFnZW50U2hhcmUAkE4AAAQUYW1vdW50Rm9yUHVibGljQWdlbnQDAwkBAiE9AgULcHVibGljQWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUQcHVibGljQWdlbnRTaGFyZQAABwkAawMFBmFtb3VudAUQcHVibGljQWdlbnRTaGFyZQCQTgAABCJhbW91bnRfY29tbWlzc2lvbl9mb3Jfc2lnbl90b19zd2FwAwkBAiE9AgUOYW1vdW50Rm9yQWdlbnQAAAkAZQIFDWFtb3VudEZvclNpZ24FDmFtb3VudEZvckFnZW50BQ1hbW91bnRGb3JTaWduBBFhbW91bnRfYXJ0X2JlZm9yZQkBCmdldEJhbGFuY2UBBQphcnRBc3NldElkAwkAAAIFEWFtb3VudF9hcnRfYmVmb3JlBRFhbW91bnRfYXJ0X2JlZm9yZQQPc3dhcF9mZWVfdG9fYXJ0AwkBAiE9AgUHYXNzZXRJZAUKYXJ0QXNzZXRJZAkA/AcECQEHQWRkcmVzcwEJANkEAQUPcHV6emxlX2FydF9wb29sAgRzd2FwCQDMCAIFDmFydEFzc2V0SWRfc3RyCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldElkBSJhbW91bnRfY29tbWlzc2lvbl9mb3Jfc2lnbl90b19zd2FwBQNuaWwFBHVuaXQDCQAAAgUPc3dhcF9mZWVfdG9fYXJ0BQ9zd2FwX2ZlZV90b19hcnQEEGFtb3VudF9hcnRfYWZ0ZXIJAQpnZXRCYWxhbmNlAQUKYXJ0QXNzZXRJZAMJAAACBRBhbW91bnRfYXJ0X2FmdGVyBRBhbW91bnRfYXJ0X2FmdGVyBAtjb21taXNzaW9ucwMJAQIhPQIFDmFtb3VudEZvckFnZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyAwkAAAIFB2Fzc2V0SWQFCmFydEFzc2V0SWQJAGUCBQ1hbW91bnRGb3JTaWduBQ5hbW91bnRGb3JBZ2VudAkAZQIFEGFtb3VudF9hcnRfYWZ0ZXIFEWFtb3VudF9hcnRfYmVmb3JlBQphcnRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQVhZ2VudAUOYW1vdW50Rm9yQWdlbnQFB2Fzc2V0SWQFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIDCQAAAgUHYXNzZXRJZAUKYXJ0QXNzZXRJZAUNYW1vdW50Rm9yU2lnbgkAZQIFEGFtb3VudF9hcnRfYWZ0ZXIFEWFtb3VudF9hcnRfYmVmb3JlBQphcnRBc3NldElkBQNuaWwECmNyZWF0b3JGZWUDCQECIT0CBRRhbW91bnRGb3JQdWJsaWNBZ2VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtwdWJsaWNBZ2VudAUUYW1vdW50Rm9yUHVibGljQWdlbnQFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2NyZWF0b3JBZGRyCQBlAgUQYW1vdW50Rm9yQ3JlYXRvcgUUYW1vdW50Rm9yUHVibGljQWdlbnQFB2Fzc2V0SWQFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULY3JlYXRvckFkZHIFEGFtb3VudEZvckNyZWF0b3IFB2Fzc2V0SWQFA25pbAQIb3duZXJGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQlzYWxlT3duZXIFDmFtb3VudEZvck93bmVyBQdhc3NldElkBAxjb2xsZWN0b3JORlQJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQkA2QQBBQVuZnRpZAkAlgoEBQtjb21taXNzaW9ucwUKY3JlYXRvckZlZQUIb3duZXJGZWUFDGNvbGxlY3Rvck5GVAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEPdmFsaWRhdGVNaW5TZWxsAQVwcmljZQMJAGYCAAAFBXByaWNlCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBgEPcHJvdmlkZUJhc2VEYXRhAgFpBW5mdElkBA0kdDAxMTkzMzExOTczCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMTkzMzExOTczAl8xBAZjYWxsZXIIBQ0kdDAxMTkzMzExOTczAl8yBARkYXRlCAUNJHQwMTE5MzMxMTk3MwJfMwQNJHQwMTE5NzYxMjA0NQkBDGNoZWNrTkZUSW5mbwEFBW5mdElkBAppc1ZhbGlkTkZUCAUNJHQwMTE5NzYxMjA0NQJfMQQFYXJ0SWQIBQ0kdDAxMTk3NjEyMDQ1Al8yBAtjcmVhdG9yQWRkcggFDSR0MDExOTc2MTIwNDUCXzMECWFydFNpZ25JRAgFDSR0MDExOTc2MTIwNDUCXzQJAJkKBwUCaWQFBmNhbGxlcgUEZGF0ZQUKaXNWYWxpZE5GVAUFYXJ0SWQFC2NyZWF0b3JBZGRyBQlhcnRTaWduSUQBDnVwZGF0ZU51bVNhbGVzAAQIbnVtU2FsZXMJAQlnZXRJbnRCeUsBBQludW1TYWxlc0sJAQxJbnRlZ2VyRW50cnkCBQludW1TYWxlc0sJAGQCBQhudW1TYWxlcwABCQZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMGaW52b2tlAQphcHBSdW5uaW5nAgZpc0xpdmUHbWVzc2FnZQQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyBAJpZAkA2AQBCAUGaW52b2tlDXRyYW5zYWN0aW9uSWQDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQxCb29sZWFuRW50cnkCBQ5kYXBwUnVubmluZ0tleQUGaXNMaXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFEW1haW50ZW5hbmNlTVNHS2V5BQdtZXNzYWdlBQNuaWwJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzAWkBB3NlbGxORlQCBXByaWNlBWFzc2V0BA0kdDAxMzExMDEzMTQ2CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDEzMTEwMTMxNDYCXzEEBmFtb3VudAgFDSR0MDEzMTEwMTMxNDYCXzIDCQECIT0CBQZhbW91bnQAAQkAAgECD05vIE5GVCBhdHRhY2hlZAQFbmZ0SWQDAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAQxpc1NpZ25BcnRORlQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkCQACAQIbT25seSBTSUdOIEFydCBORlQgYWNjZXB0ZWQuBA0kdDAxMzM4MDEzNDczCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTMzODAxMzQ3MwJfMQQGY2FsbGVyCAUNJHQwMTMzODAxMzQ3MwJfMgQEZGF0ZQgFDSR0MDEzMzgwMTM0NzMCXzMECmlzVmFsaWRORlQIBQ0kdDAxMzM4MDEzNDczAl80BAVhcnRJZAgFDSR0MDEzMzgwMTM0NzMCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTMzODAxMzQ3MwJfNgQJYXJ0U2lnbklECAUNJHQwMTMzODAxMzQ3MwJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIdQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQDCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUFYXNzZXQJAAIBAkBPbmx5ICRBUlQsIFVTRFQtUFAsIFVTREMtUFAsIEVBU1QsIFBVWlpMRSwgRVRIIG9yIFdBVkVTIGFjY2VwdGVkAwkBASEBCQEPdmFsaWRhdGVNaW5TZWxsAQUFcHJpY2UJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEKZ2V0U2FsZUtleQQFBmNhbGxlcgUFbmZ0SWQFBWFydElkBQtjcmVhdG9yQWRkcgIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUEZGF0ZQIBXwkApAMBBQVwcmljZQIBXwUFYXNzZXQCAV8FBW5mdElkAgFfBQVhcnRJZAIBXwULY3JlYXRvckFkZHICAV8FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAIET1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkBQZjYWxsZXIFA25pbAFpAQ91cGRhdGVTYWxlUHJpY2UDBW5mdElkBXByaWNlBWFzc2V0BA0kdDAxNDM3NTE0NDY4CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTQzNzUxNDQ2OAJfMQQGY2FsbGVyCAUNJHQwMTQzNzUxNDQ2OAJfMgQEZGF0ZQgFDSR0MDE0Mzc1MTQ0NjgCXzMECmlzVmFsaWRORlQIBQ0kdDAxNDM3NTE0NDY4Al80BAVhcnRJZAgFDSR0MDE0Mzc1MTQ0NjgCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTQzNzUxNDQ2OAJfNgQJYXJ0U2lnbklECAUNJHQwMTQzNzUxNDQ2OAJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIwQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQsIGNhbmNlbCB5b3VyIHNhbGUuAwkBASEBBQppc1ZhbGlkTkZUCQACAQIPTm90IGEgdmFsaWQgbmZ0BAlzYWxlT3duZXIJAQlnZXRTdHJCeUsBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkAwkBAiE9AgUJc2FsZU93bmVyBQZjYWxsZXIJAAIBAhZZb3UgZG9uJ3Qgb3duIHRoaXMgTkZUBApzYWxlU3RhdHVzCQEJZ2V0U3RyQnlLAQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAwkBAiE9AgUKc2FsZVN0YXR1cwIET1BFTgkAAgECD1NhbGUgbm90IGFjdGl2ZQMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQVhc3NldAkAAgECQE9ubHkgJEFSVCwgVVNEVC1QUCwgVVNEQy1QUCwgRUFTVCwgUFVaWkxFLCBFVEggb3IgV0FWRVMgYWNjZXB0ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwBBQVwcmljZQkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQZjYWxsZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQC1CQIJAQlnZXRTdHJCeUsBCQCsAgIFB3NhbGVLZXkCBV9PUEVOAgFfCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHc2FsZUtleQIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAJEDAgUIc2FsZUluZm8AAAIBXwkApAMBBQVwcmljZQIBXwUFYXNzZXQCAV8JAJEDAgUIc2FsZUluZm8AAwIBXwkAkQMCBQhzYWxlSW5mbwAEAgFfCQCRAwIFCHNhbGVJbmZvAAUCAV8JAJEDAgUIc2FsZUluZm8ABgUDbmlsAWkBCmNhbmNlbFNhbGUBBW5mdElkBA0kdDAxNTYzNDE1ODc1CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTU2MzQxNTg3NQJfMQQGY2FsbGVyCAUNJHQwMTU2MzQxNTg3NQJfMgQEZGF0ZQgFDSR0MDE1NjM0MTU4NzUCXzMECmlzVmFsaWRORlQIBQ0kdDAxNTYzNDE1ODc1Al80BAVhcnRJZAgFDSR0MDE1NjM0MTU4NzUCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTU2MzQxNTg3NQJfNgQJYXJ0U2lnbklECAUNJHQwMTU2MzQxNTg3NQJfNwQJc2FsZU93bmVyCQEJZ2V0U3RyQnlLAQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAMJAQIhPQIFCXNhbGVPd25lcgUGY2FsbGVyCQACAQIWWW91IGRvbid0IG93biB0aGlzIE5GVAQKc2FsZVN0YXR1cwkBCWdldFN0ckJ5SwEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAMJAQIhPQIFCnNhbGVTdGF0dXMCBE9QRU4JAAIBAg9TYWxlIG5vdCBhY3RpdmUEB3NhbGVLZXkJAQpnZXRTYWxlS2V5BAUGY2FsbGVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyBAhzYWxlSW5mbwkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FBmNhbGxlcgIBXwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQdzYWxlS2V5AgFfBQJpZAIKX0NBTkNFTExFRAkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwILX0NBTkNFTExFRF8JAKQDAQUEZGF0ZQIBXwUCaWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgABCQDZBAEFBW5mdElkBQNuaWwBaQEGYnV5TkZUAQVuZnRJZAQNJHQwMTY3MDYxNjc5OQkBD3Byb3ZpZGVCYXNlRGF0YQIFAWkFBW5mdElkBAJpZAgFDSR0MDE2NzA2MTY3OTkCXzEEBmNhbGxlcggFDSR0MDE2NzA2MTY3OTkCXzIEBGRhdGUIBQ0kdDAxNjcwNjE2Nzk5Al8zBAppc1ZhbGlkTkZUCAUNJHQwMTY3MDYxNjc5OQJfNAQFYXJ0SWQIBQ0kdDAxNjcwNjE2Nzk5Al81BAtjcmVhdG9yQWRkcggFDSR0MDE2NzA2MTY3OTkCXzYECWFydFNpZ25JRAgFDSR0MDE2NzA2MTY3OTkCXzcDCQAAAgkAsQIBBQlhcnRTaWduSUQAAAkAAgECMEFydHdvcmsgbm90IGZvdW5kIG9uIFNJR04gQXJ0LCBjYW5jZWwgeW91ciBzYWxlLgMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQEB3NhbGVLZXkJAQpnZXRTYWxlS2V5BAUJc2FsZU93bmVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyBAhzYWxlSW5mbwkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4DCQAAAgkAsQIBBQhzYWxlSW5mbwAACQACAQIPU2FsZSBOb3QgZm91bmQhBA1zYWxlSW5mb0FycmF5CQC1CQIFCHNhbGVJbmZvAgFfAwkAAAIJALYJAQkAkQMCBQ1zYWxlSW5mb0FycmF5AAEAAAkAAgECCk9mZmVyIG9ubHkEDSR0MDE3Mjk2MTczMzIJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMTcyOTYxNzMzMgJfMQQGYW1vdW50CAUNJHQwMTcyOTYxNzMzMgJfMgQPcGF5bWVudEFzc2V0U3RyAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAIAAwMJAQIhPQIJAJEDAgUNc2FsZUluZm9BcnJheQABCQCkAwEFBmFtb3VudAYJAQIhPQIJAJEDAgUNc2FsZUluZm9BcnJheQACBQ9wYXltZW50QXNzZXRTdHIJAAIBAhpQYXltZW50IGluZm9zIGRvbid0IG1hdGNoLgQNJHQwMTc4NDUxNzk4NAkBDHNldFRyYW5zZmVycwcFBmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAUFbmZ0SWQFC2NyZWF0b3JBZGRyBQlzYWxlT3duZXIFBmNhbGxlcgUFYXJ0SWQEC2NvbW1pc3Npb25zCAUNJHQwMTc4NDUxNzk4NAJfMQQKY3JlYXRvckZlZQgFDSR0MDE3ODQ1MTc5ODQCXzIECG93bmVyRmVlCAUNJHQwMTc4NDUxNzk4NAJfMwQMY29sbGVjdG9yTkZUCAUNJHQwMTc4NDUxNzk4NAJfNAkAzggCCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FCXNhbGVPd25lcgIBXwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQdzYWxlS2V5AgFfBQJpZAIHX0NMT1NFRAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUIc2FsZUluZm8CCF9DTE9TRURfCQCkAwEFBGRhdGUCAV8FAmlkAgFfBQZjYWxsZXIJAMwIAgkBDnVwZGF0ZU51bVNhbGVzAAkAzAgCBQhvd25lckZlZQkAzAgCBQxjb2xsZWN0b3JORlQFA25pbAUKY3JlYXRvckZlZQULY29tbWlzc2lvbnMBaQEIc2V0T2ZmZXIBBW5mdElkBA0kdDAxODM5NTE4NDkyCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTgzOTUxODQ5MgJfMQQKb2ZmZXJPd25lcggFDSR0MDE4Mzk1MTg0OTICXzIEBGRhdGUIBQ0kdDAxODM5NTE4NDkyAl8zBAppc1ZhbGlkTkZUCAUNJHQwMTgzOTUxODQ5MgJfNAQFYXJ0SWQIBQ0kdDAxODM5NTE4NDkyAl81BAtjcmVhdG9yQWRkcggFDSR0MDE4Mzk1MTg0OTICXzYECWFydFNpZ25JRAgFDSR0MDE4Mzk1MTg0OTICXzcDCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQEDSR0MDE4NTUzMTg1ODkJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMTg1NTMxODU4OQJfMQQGYW1vdW50CAUNJHQwMTg1NTMxODU4OQJfMgQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUHYXNzZXRJZAkAAgECEmFzc2V0IG5vdCBhY2NlcHRlZAMJAAACBQZhbW91bnQAAAkAAgECFk9mZmVyIG9mIDAgbm90IGFsbG93ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwBBQZhbW91bnQJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UECXNhbGVPd25lcgkBFWdldFNhbGVPd25lckFuZFN0YXR1cwEFBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkBCWdldEJpZEtleQQFCm9mZmVyT3duZXIFBW5mdElkBQlzYWxlT3duZXIFAmlkAgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUEZGF0ZQIBXwkApAMBBQZhbW91bnQCAV8FB2Fzc2V0SWQCAV8FBW5mdElkAgFfBQVhcnRJZAIBXwULY3JlYXRvckFkZHICAV8FCm9mZmVyT3duZXICAV8FAmlkBQNuaWwBaQELYWNjZXB0T2ZmZXIDBW5mdElkB29mZmVySWQKb2ZmZXJPd25lcgQNJHQwMTkzODIxOTQ3NQkBD3Byb3ZpZGVCYXNlRGF0YQIFAWkFBW5mdElkBAJpZAgFDSR0MDE5MzgyMTk0NzUCXzEEBmNhbGxlcggFDSR0MDE5MzgyMTk0NzUCXzIEBGRhdGUIBQ0kdDAxOTM4MjE5NDc1Al8zBAppc1ZhbGlkTkZUCAUNJHQwMTkzODIxOTQ3NQJfNAQFYXJ0SWQIBQ0kdDAxOTM4MjE5NDc1Al81BAtjcmVhdG9yQWRkcggFDSR0MDE5MzgyMTk0NzUCXzYECWFydFNpZ25JRAgFDSR0MDE5MzgyMTk0NzUCXzcDCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQECXNhbGVPd25lcgkBFWdldFNhbGVPd25lckFuZFN0YXR1cwEFBW5mdElkAwkBAiE9AgUGY2FsbGVyBQlzYWxlT3duZXIJAAIBAiBPbmx5IHNhbGUgb3duZXIgY2FuIGFjY2VwdCBvZmZlcgQGYmlkS2V5CQEJZ2V0QmlkS2V5BAUKb2ZmZXJPd25lcgUFbmZ0SWQFCXNhbGVPd25lcgUHb2ZmZXJJZAQNJHQwMTk3MjkxOTc4NAkBCmdldEJpZERhdGEBBQZiaWRLZXkECmJpZERhdGFBcnIIBQ0kdDAxOTcyOTE5Nzg0Al8xBAdhc3NldElkCAUNJHQwMTk3MjkxOTc4NAJfMgQHYmlkRGF0YQgFDSR0MDE5NzI5MTk3ODQCXzMEB3NhbGVLZXkJAQpnZXRTYWxlS2V5BAUJc2FsZU93bmVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyBAhzYWxlSW5mbwkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4DCQAAAgkAsQIBBQhzYWxlSW5mbwAACQACAQIPU2FsZSBOb3QgZm91bmQhBAZhbW91bnQJAQV2YWx1ZQEJALYJAQkAkQMCBQpiaWREYXRhQXJyAAEEDSR0MDIwMDIwMjAxNTgJAQxzZXRUcmFuc2ZlcnMHBQZhbW91bnQFB2Fzc2V0SWQFBW5mdElkBQtjcmVhdG9yQWRkcgUJc2FsZU93bmVyCQCRAwIFCmJpZERhdGFBcnIABgUFYXJ0SWQEC2NvbW1pc3Npb25zCAUNJHQwMjAwMjAyMDE1OAJfMQQKY3JlYXRvckZlZQgFDSR0MDIwMDIwMjAxNTgCXzIECG93bmVyRmVlCAUNJHQwMjAwMjAyMDE1OAJfMwQMY29sbGVjdG9yTkZUCAUNJHQwMjAwMjAyMDE1OAJfNAQKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBBQdhc3NldElkCQDYBAEJAQV2YWx1ZQEFB2Fzc2V0SWQCBVdBVkVTCQDOCAIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGYmlkS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FCXNhbGVPd25lcgIBXwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBmJpZEtleQIHX0NMT1NFRAkArAICCQCsAgIJAKwCAgkArAICBQdiaWREYXRhAghfQ0xPU0VEXwkApAMBBQRkYXRlAgFfBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQdzYWxlS2V5AgFfBQJpZAIHX0NMT1NFRAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwIOX0NMT1NFRC1PRkZFUl8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8FCm9mZmVyT3duZXICAV8JAKQDAQUGYW1vdW50AgFfBQphc3NldElkU3RyCQDMCAIJAQ51cGRhdGVOdW1TYWxlcwAJAMwIAgUIb3duZXJGZWUJAMwIAgUMY29sbGVjdG9yTkZUBQNuaWwFCmNyZWF0b3JGZWUFC2NvbW1pc3Npb25zAWkBC2NhbmNlbE9mZmVyBAVuZnRJZAdvZmZlcklkCm9mZmVyT3duZXIJc2FsZU93bmVyBA0kdDAyMDk1ODIxMDMyCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyMDk1ODIxMDMyAl8xBAZjYWxsZXIIBQ0kdDAyMDk1ODIxMDMyAl8yBARkYXRlCAUNJHQwMjA5NTgyMTAzMgJfMwMDCQECIT0CBQZjYWxsZXIFCm9mZmVyT3duZXIJAQIhPQIFBmNhbGxlcgUJc2FsZU93bmVyBwkAAgECHVlvdSBjYW5ub3QgY2FuY2VsIHRoaXMgb2ZmZXIuBAZiaWRLZXkJAQlnZXRCaWRLZXkEBQpvZmZlck93bmVyBQVuZnRJZAUJc2FsZU93bmVyBQdvZmZlcklkBA0kdDAyMTIwNDIxMjU5CQEKZ2V0QmlkRGF0YQEFBmJpZEtleQQKYmlkRGF0YUFycggFDSR0MDIxMjA0MjEyNTkCXzEEB2Fzc2V0SWQIBQ0kdDAyMTIwNDIxMjU5Al8yBAdiaWREYXRhCAUNJHQwMjEyMDQyMTI1OQJfMwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBmJpZEtleQIFX09QRU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZiaWRLZXkCCl9DQU5DRUxMRUQJAKwCAgkArAICCQCsAgIJAKwCAgUHYmlkRGF0YQILX0NBTkNFTExFRF8JAKQDAQUEZGF0ZQIBXwUCaWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJpZERhdGFBcnIAAQUHYXNzZXRJZAUDbmlsAH4Cslc=", "height": 2868628, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9bxRgqbELnnbmS5r9QgNxikCPBdzV8mwJDKqP55sPT83 Next: none Diff:
OldNewDifferences
1010
1111 let oracleFee = value(addressFromString(getStrByK("conf_oracle_fee")))
1212
13-let signDapp = value(addressFromString(getStrByK("conf_signweb_dapp")))
14-
1513 let feeReceiver = getStrByK("conf_fee_receiver")
1614
1715 let artworksDapp = value(addressFromString(getStrByK("conf_artworks_dapp")))
1917 let userDapp = if (unitTest)
2018 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
2119 else value(addressFromString(getStrByK("conf_users_dapp")))
22-
23-let whitelistDapp = value(addressFromString(getStrByK("conf_whitelist_dapp")))
2420
2521 let puzzle_art_pool = getStrByK("conf_puzzle_art_pool")
2622
297293 }
298294
299295
300-func validateMinSell (price) = if ((0 >= price))
296+func validateMinSell (price) = if ((0 > price))
301297 then throw("Wrong minimum sell price")
302298 else true
303299
304300
305301 func provideBaseData (i,nftId) = {
306- let $t01213512175 = idCallerDate(i)
307- let id = $t01213512175._1
308- let caller = $t01213512175._2
309- let date = $t01213512175._3
310- let $t01217812247 = checkNFTInfo(nftId)
311- let isValidNFT = $t01217812247._1
312- let artId = $t01217812247._2
313- let creatorAddr = $t01217812247._3
314- let artSignID = $t01217812247._4
302+ let $t01193311973 = idCallerDate(i)
303+ let id = $t01193311973._1
304+ let caller = $t01193311973._2
305+ let date = $t01193311973._3
306+ let $t01197612045 = checkNFTInfo(nftId)
307+ let isValidNFT = $t01197612045._1
308+ let artId = $t01197612045._2
309+ let creatorAddr = $t01197612045._3
310+ let artSignID = $t01197612045._4
315311 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
316312 }
317313
347343
348344 @Callable(i)
349345 func sellNFT (price,asset) = {
350- let $t01331213348 = isPayment(i)
351- let payment = $t01331213348._1
352- let amount = $t01331213348._2
346+ let $t01311013146 = isPayment(i)
347+ let payment = $t01311013146._1
348+ let amount = $t01311013146._2
353349 if ((amount != 1))
354350 then throw("No NFT attached")
355351 else {
358354 else false)
359355 then toBase58String(value(payment.assetId))
360356 else throw("Only SIGN Art NFT accepted.")
361- let $t01358213675 = provideBaseData(i, nftId)
362- let id = $t01358213675._1
363- let caller = $t01358213675._2
364- let date = $t01358213675._3
365- let isValidNFT = $t01358213675._4
366- let artId = $t01358213675._5
367- let creatorAddr = $t01358213675._6
368- let artSignID = $t01358213675._7
357+ let $t01338013473 = provideBaseData(i, nftId)
358+ let id = $t01338013473._1
359+ let caller = $t01338013473._2
360+ let date = $t01338013473._3
361+ let isValidNFT = $t01338013473._4
362+ let artId = $t01338013473._5
363+ let creatorAddr = $t01338013473._6
364+ let artSignID = $t01338013473._7
369365 if ((size(artSignID) == 0))
370366 then throw("Artwork not found on SIGN Art")
371367 else if (!(isValidNFT))
372368 then throw("Not a valid nft")
373369 else if (!(acceptedAssetIds(asset)))
374- then throw("Only SIGN, USDN, USDT or WAVES accepted")
370+ then throw("Only $ART, USDT-PP, USDC-PP, EAST, PUZZLE, ETH or WAVES accepted")
375371 else if (!(validateMinSell(price)))
376372 then throw("Wrong minimum sell price")
377373 else [StringEntry((getSaleKey(caller, nftId, artId, creatorAddr) + "_OPEN"), ((((((((((((toString(date) + "_") + toString(price)) + "_") + asset) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + id)), StringEntry(((("sale2nd_status_" + caller) + "_") + nftId), "OPEN"), StringEntry(("current_owner_on_dapp_" + nftId), caller)]
382378
383379 @Callable(i)
384380 func updateSalePrice (nftId,price,asset) = {
385- let $t01455214645 = provideBaseData(i, nftId)
386- let id = $t01455214645._1
387- let caller = $t01455214645._2
388- let date = $t01455214645._3
389- let isValidNFT = $t01455214645._4
390- let artId = $t01455214645._5
391- let creatorAddr = $t01455214645._6
392- let artSignID = $t01455214645._7
381+ let $t01437514468 = provideBaseData(i, nftId)
382+ let id = $t01437514468._1
383+ let caller = $t01437514468._2
384+ let date = $t01437514468._3
385+ let isValidNFT = $t01437514468._4
386+ let artId = $t01437514468._5
387+ let creatorAddr = $t01437514468._6
388+ let artSignID = $t01437514468._7
393389 if ((size(artSignID) == 0))
394390 then throw("Artwork not found on SIGN Art, cancel your sale.")
395391 else if (!(isValidNFT))
403399 if ((saleStatus != "OPEN"))
404400 then throw("Sale not active")
405401 else if (!(acceptedAssetIds(asset)))
406- then throw("Only SIGN, USDN, USDT or WAVES accepted")
402+ then throw("Only $ART, USDT-PP, USDC-PP, EAST, PUZZLE, ETH or WAVES accepted")
407403 else if (!(validateMinSell(price)))
408404 then throw("Wrong minimum sell price")
409405 else {
419415
420416 @Callable(i)
421417 func cancelSale (nftId) = {
422- let $t01578616027 = provideBaseData(i, nftId)
423- let id = $t01578616027._1
424- let caller = $t01578616027._2
425- let date = $t01578616027._3
426- let isValidNFT = $t01578616027._4
427- let artId = $t01578616027._5
428- let creatorAddr = $t01578616027._6
429- let artSignID = $t01578616027._7
418+ let $t01563415875 = provideBaseData(i, nftId)
419+ let id = $t01563415875._1
420+ let caller = $t01563415875._2
421+ let date = $t01563415875._3
422+ let isValidNFT = $t01563415875._4
423+ let artId = $t01563415875._5
424+ let creatorAddr = $t01563415875._6
425+ let artSignID = $t01563415875._7
430426 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
431427 if ((saleOwner != caller))
432428 then throw("You don't own this NFT")
446442
447443 @Callable(i)
448444 func buyNFT (nftId) = {
449- let $t01685816951 = provideBaseData(i, nftId)
450- let id = $t01685816951._1
451- let caller = $t01685816951._2
452- let date = $t01685816951._3
453- let isValidNFT = $t01685816951._4
454- let artId = $t01685816951._5
455- let creatorAddr = $t01685816951._6
456- let artSignID = $t01685816951._7
445+ let $t01670616799 = provideBaseData(i, nftId)
446+ let id = $t01670616799._1
447+ let caller = $t01670616799._2
448+ let date = $t01670616799._3
449+ let isValidNFT = $t01670616799._4
450+ let artId = $t01670616799._5
451+ let creatorAddr = $t01670616799._6
452+ let artSignID = $t01670616799._7
457453 if ((size(artSignID) == 0))
458454 then throw("Artwork not found on SIGN Art, cancel your sale.")
459455 else if (!(isValidNFT))
469465 if ((parseInt(saleInfoArray[1]) == 0))
470466 then throw("Offer only")
471467 else {
472- let $t01744817484 = isPayment(i)
473- let payment = $t01744817484._1
474- let amount = $t01744817484._2
468+ let $t01729617332 = isPayment(i)
469+ let payment = $t01729617332._1
470+ let amount = $t01729617332._2
475471 let paymentAssetStr = if (isDefined(payment.assetId))
476472 then toBase58String(value(payment.assetId))
477473 else ""
480476 else (saleInfoArray[2] != paymentAssetStr))
481477 then throw("Payment infos don't match.")
482478 else {
483- let $t01799718136 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
484- let commissions = $t01799718136._1
485- let creatorFee = $t01799718136._2
486- let ownerFee = $t01799718136._3
487- let collectorNFT = $t01799718136._4
479+ let $t01784517984 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
480+ let commissions = $t01784517984._1
481+ let creatorFee = $t01784517984._2
482+ let ownerFee = $t01784517984._3
483+ let collectorNFT = $t01784517984._4
488484 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
489485 }
490486 }
496492
497493 @Callable(i)
498494 func setOffer (nftId) = {
499- let $t01854718644 = provideBaseData(i, nftId)
500- let id = $t01854718644._1
501- let offerOwner = $t01854718644._2
502- let date = $t01854718644._3
503- let isValidNFT = $t01854718644._4
504- let artId = $t01854718644._5
505- let creatorAddr = $t01854718644._6
506- let artSignID = $t01854718644._7
495+ let $t01839518492 = provideBaseData(i, nftId)
496+ let id = $t01839518492._1
497+ let offerOwner = $t01839518492._2
498+ let date = $t01839518492._3
499+ let isValidNFT = $t01839518492._4
500+ let artId = $t01839518492._5
501+ let creatorAddr = $t01839518492._6
502+ let artSignID = $t01839518492._7
507503 if (!(isValidNFT))
508504 then throw("Not a valid nft")
509505 else {
510- let $t01870518741 = isPayment(i)
511- let payment = $t01870518741._1
512- let amount = $t01870518741._2
506+ let $t01855318589 = isPayment(i)
507+ let payment = $t01855318589._1
508+ let amount = $t01855318589._2
513509 let assetId = if (!(isDefined(payment.assetId)))
514510 then "WAVES"
515511 else toBase58String(value(payment.assetId))
530526
531527 @Callable(i)
532528 func acceptOffer (nftId,offerId,offerOwner) = {
533- let $t01953419627 = provideBaseData(i, nftId)
534- let id = $t01953419627._1
535- let caller = $t01953419627._2
536- let date = $t01953419627._3
537- let isValidNFT = $t01953419627._4
538- let artId = $t01953419627._5
539- let creatorAddr = $t01953419627._6
540- let artSignID = $t01953419627._7
529+ let $t01938219475 = provideBaseData(i, nftId)
530+ let id = $t01938219475._1
531+ let caller = $t01938219475._2
532+ let date = $t01938219475._3
533+ let isValidNFT = $t01938219475._4
534+ let artId = $t01938219475._5
535+ let creatorAddr = $t01938219475._6
536+ let artSignID = $t01938219475._7
541537 if (!(isValidNFT))
542538 then throw("Not a valid nft")
543539 else {
546542 then throw("Only sale owner can accept offer")
547543 else {
548544 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
549- let $t01988119936 = getBidData(bidKey)
550- let bidDataArr = $t01988119936._1
551- let assetId = $t01988119936._2
552- let bidData = $t01988119936._3
545+ let $t01972919784 = getBidData(bidKey)
546+ let bidDataArr = $t01972919784._1
547+ let assetId = $t01972919784._2
548+ let bidData = $t01972919784._3
553549 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
554550 let saleInfo = getStrByK((saleKey + "_OPEN"))
555551 if ((size(saleInfo) == 0))
556552 then throw("Sale Not found!")
557553 else {
558554 let amount = value(parseInt(bidDataArr[1]))
559- let $t02017220310 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
560- let commissions = $t02017220310._1
561- let creatorFee = $t02017220310._2
562- let ownerFee = $t02017220310._3
563- let collectorNFT = $t02017220310._4
555+ let $t02002020158 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
556+ let commissions = $t02002020158._1
557+ let creatorFee = $t02002020158._2
558+ let ownerFee = $t02002020158._3
559+ let collectorNFT = $t02002020158._4
564560 let assetIdStr = if (isDefined(assetId))
565561 then toBase58String(value(assetId))
566562 else "WAVES"
574570
575571 @Callable(i)
576572 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
577- let $t02111021184 = idCallerDate(i)
578- let id = $t02111021184._1
579- let caller = $t02111021184._2
580- let date = $t02111021184._3
573+ let $t02095821032 = idCallerDate(i)
574+ let id = $t02095821032._1
575+ let caller = $t02095821032._2
576+ let date = $t02095821032._3
581577 if (if ((caller != offerOwner))
582578 then (caller != saleOwner)
583579 else false)
584580 then throw("You cannot cancel this offer.")
585581 else {
586582 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
587- let $t02135621411 = getBidData(bidKey)
588- let bidDataArr = $t02135621411._1
589- let assetId = $t02135621411._2
590- let bidData = $t02135621411._3
583+ let $t02120421259 = getBidData(bidKey)
584+ let bidDataArr = $t02120421259._1
585+ let assetId = $t02120421259._2
586+ let bidData = $t02120421259._3
591587 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
592588 }
593589 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "2.0.0"
55
66 func getStrByK (key) = valueOrElse(getString(this, key), "")
77
88
99 let unitTest = false
1010
1111 let oracleFee = value(addressFromString(getStrByK("conf_oracle_fee")))
1212
13-let signDapp = value(addressFromString(getStrByK("conf_signweb_dapp")))
14-
1513 let feeReceiver = getStrByK("conf_fee_receiver")
1614
1715 let artworksDapp = value(addressFromString(getStrByK("conf_artworks_dapp")))
1816
1917 let userDapp = if (unitTest)
2018 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
2119 else value(addressFromString(getStrByK("conf_users_dapp")))
22-
23-let whitelistDapp = value(addressFromString(getStrByK("conf_whitelist_dapp")))
2420
2521 let puzzle_art_pool = getStrByK("conf_puzzle_art_pool")
2622
2723 let usdtPPAssetId_str = getStrByK("conf_accepted_asset_USDT_PP")
2824
2925 let artAssetId_str = getStrByK("conf_accepted_asset_ART")
3026
3127 let usdcPPAssetId_str = getStrByK("conf_accepted_asset_USDC_PP")
3228
3329 let eastAssetId_str = getStrByK("conf_accepted_asset_EAST")
3430
3531 let puzzleAssetId_str = getStrByK("conf_accepted_asset_PUZZLE")
3632
3733 let ethPPAssetId_str = getStrByK("conf_accepted_asset_ETH_PP")
3834
3935 let wavesAssetId_str = "WAVES"
4036
4137 let usdtPPAssetId = fromBase58String(usdtPPAssetId_str)
4238
4339 let artAssetId = fromBase58String(artAssetId_str)
4440
4541 let usdcPPAssetId = fromBase58String(usdcPPAssetId_str)
4642
4743 let eastAssetId = fromBase58String(eastAssetId_str)
4844
4945 let puzzleAssetId = fromBase58String(puzzleAssetId_str)
5046
5147 let ethPPAssetId = fromBase58String(ethPPAssetId_str)
5248
5349 let wavesAssetId = base58''
5450
5551 let all_accepted_assets = [usdtPPAssetId_str, artAssetId_str, usdcPPAssetId_str, eastAssetId_str, puzzleAssetId_str, wavesAssetId_str, ethPPAssetId_str]
5652
5753 let chris = getStrByK("conf_admin_1")
5854
5955 let commission_fee = 3
6056
6157 let userSuspended = "SUSPENDED"
6258
6359 let userRemoved = "REMOVED"
6460
6561 let artIllegal = "ILLEGAL"
6662
6763 let artSuspended = "SUSPENDED"
6864
6965 let dappRunningKey = "conf_dapp_is_running"
7066
7167 let maintenanceMSGKey = "conf_maintenance_msg"
7268
7369 let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
7470
7571 let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
7672
7773 let numSalesK = "num_sales"
7874
7975 func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
8076
8177
8278 func getArtworkRoyalties (key) = valueOrElse(getInteger(artworksDapp, key), 1000)
8379
8480
8581 func getArtStrByK (key) = valueOrElse(getString(artworksDapp, key), "")
8682
8783
8884 func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
8985
9086
9187 func keyUserStatus (addr) = ("user_status_" + addr)
9288
9389
9490 func keyArtworkRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
9591
9692
9793 func keySignID (artistAddr,artId) = ((("art_signid_" + artId) + "_") + artistAddr)
9894
9995
10096 func keyFlag (artistAddr,artId) = ((("art_flag_" + artId) + "_") + artistAddr)
10197
10298
10399 func keyNFTData (id) = ("nft_" + id)
104100
105101
106102 func getSaleKey (caller,nftId,artId,creatorAddr) = ((((((("sale2nd_info_" + caller) + "_") + nftId) + "_") + artId) + "_") + creatorAddr)
107103
108104
109105 func getBidKey (offerOwner,nftId,saleOwner,offerId) = ((((((("offer2nd_" + offerOwner) + "_") + nftId) + "_") + saleOwner) + "_") + offerId)
110106
111107
112108 func getIntByKFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
113109
114110
115111 let currentCertificationPrice = getIntByKFromOracle(("certification_fee_" + toBase58String(artAssetId)))
116112
117113 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
118114
119115
120116 func keySecondaryShareAgent (artistAddr) = ("artist_agent_secondary_" + artistAddr)
121117
122118
123119 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
124120
125121
126122 func keySecondarySharePublicAgent (artistAddr) = ("artist_public_agent_secondary_" + artistAddr)
127123
128124
129125 func idCallerDate (i) = if (!(dappRunning))
130126 then throw(maintenanceMSG)
131127 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
132128
133129
134130 func isPayment (i) = if ((size(i.payments) == 0))
135131 then throw("No payment attached")
136132 else {
137133 let payment = value(i.payments[0])
138134 let amount = value(payment.amount)
139135 $Tuple2(payment, amount)
140136 }
141137
142138
143139 func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
144140 then (assetDetails.decimals == 0)
145141 else false)
146142 then (assetDetails.reissuable == false)
147143 else false)
148144 then (assetDetails.issuer == artworksDapp)
149145 else false
150146
151147
152148 func isSignArtNFT (id) = {
153149 let assetDetails = value(assetInfo(id))
154150 assetIsValid(assetDetails)
155151 }
156152
157153
158154 func acceptedAssetIds (assetId) = if (!(containsElement(all_accepted_assets, assetId)))
159155 then throw("Only $ART, USDT-PP, USDC-PP, EAST, PUZZLE, ETH or WAVES accepted")
160156 else true
161157
162158
163159 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
164160 then unit
165161 else fromBase58String(assetId)
166162
167163
168164 func getSaleOwnerAndStatus (nftid) = {
169165 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
170166 if ((size(saleOwner) == 0))
171167 then throw("NFT not found")
172168 else {
173169 let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + nftid))
174170 if ((saleStatus != "OPEN"))
175171 then throw("NFT not for sale")
176172 else saleOwner
177173 }
178174 }
179175
180176
181177 func getBidData (key) = {
182178 let bidData = getStrByK((key + "_OPEN"))
183179 if ((bidData == ""))
184180 then throw("Offer not found")
185181 else {
186182 let bidDataArr = split(bidData, "_")
187183 let assetId = getBidAssetId(bidDataArr[2])
188184 $Tuple3(bidDataArr, assetId, bidData)
189185 }
190186 }
191187
192188
193189 func getBalance (assetId) = match assetId {
194190 case b: ByteVector =>
195191 assetBalance(this, b)
196192 case _ =>
197193 wavesBalance(this).available
198194 }
199195
200196
201197 func artIsValid (artStatus) = if ((artStatus != artIllegal))
202198 then (artStatus != artSuspended)
203199 else false
204200
205201
206202 func checkArtStatus (addr,id) = {
207203 let artStatus = getArtStrByK(keyFlag(addr, id))
208204 if (artIsValid(artStatus))
209205 then true
210206 else throw(("Original Artwork flagged as " + artStatus))
211207 }
212208
213209
214210 func checkArtistStatus (addr) = {
215211 let artistStatus = getUserStrByK(keyUserStatus(addr))
216212 if (containsElement([userSuspended, userRemoved], artistStatus))
217213 then throw(("Original Artist " + artistStatus))
218214 else true
219215 }
220216
221217
222218 func checkNFTInfo (assetId) = {
223219 let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
224220 let artSignID = getArtStrByK(((("art_name_" + nftData[5]) + "_") + nftData[6]))
225221 if (if (!(checkArtStatus(nftData[6], nftData[5])))
226222 then !(checkArtistStatus(nftData[6]))
227223 else false)
228224 then $Tuple4(false, nftData[5], nftData[6], artSignID)
229225 else $Tuple4(true, nftData[5], nftData[6], artSignID)
230226 }
231227
232228
233229 func checkARTExist (artId,creatorAddr) = {
234230 let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
235231 if ((size(artSignID) == 0))
236232 then throw("Artwork not found on SIGN Art")
237233 else if (if (!(checkArtStatus(creatorAddr, artId)))
238234 then !(checkArtistStatus(creatorAddr))
239235 else false)
240236 then false
241237 else true
242238 }
243239
244240
245241 func setTransfers (amount,assetId,nftid,creatorAddr,saleOwner,caller,artId) = {
246242 let creatorCut = getArtworkRoyalties(keyArtworkRoyalties(creatorAddr, artId))
247243 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(creatorAddr)), feeReceiver)
248244 let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShareAgent(creatorAddr)), 0)
249245 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(creatorAddr)), feeReceiver)
250246 let publicAgentShare = valueOrElse(getInteger(userDapp, keySecondarySharePublicAgent(creatorAddr)), 0)
251247 let amountForSign = fraction(amount, commission_fee, 100)
252248 let amountForCreator = fraction(amount, creatorCut, 10000)
253249 let amountForOwner = (amount - (amountForSign + amountForCreator))
254250 let amountForAgent = if (if ((agent != feeReceiver))
255251 then (agentShare > 0)
256252 else false)
257253 then fraction(amount, agentShare, 10000)
258254 else 0
259255 let amountForPublicAgent = if (if ((publicAgent != feeReceiver))
260256 then (publicAgentShare > 0)
261257 else false)
262258 then fraction(amount, publicAgentShare, 10000)
263259 else 0
264260 let amount_commission_for_sign_to_swap = if ((amountForAgent != 0))
265261 then (amountForSign - amountForAgent)
266262 else amountForSign
267263 let amount_art_before = getBalance(artAssetId)
268264 if ((amount_art_before == amount_art_before))
269265 then {
270266 let swap_fee_to_art = if ((assetId != artAssetId))
271267 then invoke(Address(fromBase58String(puzzle_art_pool)), "swap", [artAssetId_str, 1], [AttachedPayment(assetId, amount_commission_for_sign_to_swap)])
272268 else unit
273269 if ((swap_fee_to_art == swap_fee_to_art))
274270 then {
275271 let amount_art_after = getBalance(artAssetId)
276272 if ((amount_art_after == amount_art_after))
277273 then {
278274 let commissions = if ((amountForAgent != 0))
279275 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), if ((assetId == artAssetId))
280276 then (amountForSign - amountForAgent)
281277 else (amount_art_after - amount_art_before), artAssetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
282278 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), if ((assetId == artAssetId))
283279 then amountForSign
284280 else (amount_art_after - amount_art_before), artAssetId)]
285281 let creatorFee = if ((amountForPublicAgent != 0))
286282 then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), (amountForCreator - amountForPublicAgent), assetId)]
287283 else [ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)]
288284 let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
289285 let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
290286 $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
291287 }
292288 else throw("Strict value is not equal to itself.")
293289 }
294290 else throw("Strict value is not equal to itself.")
295291 }
296292 else throw("Strict value is not equal to itself.")
297293 }
298294
299295
300-func validateMinSell (price) = if ((0 >= price))
296+func validateMinSell (price) = if ((0 > price))
301297 then throw("Wrong minimum sell price")
302298 else true
303299
304300
305301 func provideBaseData (i,nftId) = {
306- let $t01213512175 = idCallerDate(i)
307- let id = $t01213512175._1
308- let caller = $t01213512175._2
309- let date = $t01213512175._3
310- let $t01217812247 = checkNFTInfo(nftId)
311- let isValidNFT = $t01217812247._1
312- let artId = $t01217812247._2
313- let creatorAddr = $t01217812247._3
314- let artSignID = $t01217812247._4
302+ let $t01193311973 = idCallerDate(i)
303+ let id = $t01193311973._1
304+ let caller = $t01193311973._2
305+ let date = $t01193311973._3
306+ let $t01197612045 = checkNFTInfo(nftId)
307+ let isValidNFT = $t01197612045._1
308+ let artId = $t01197612045._2
309+ let creatorAddr = $t01197612045._3
310+ let artSignID = $t01197612045._4
315311 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
316312 }
317313
318314
319315 func updateNumSales () = {
320316 let numSales = getIntByK(numSalesK)
321317 IntegerEntry(numSalesK, (numSales + 1))
322318 }
323319
324320
325321 @Callable(invoke)
326322 func setConf (key,val) = {
327323 let caller = toString(invoke.caller)
328324 if (containsElement([chris, toString(this)], caller))
329325 then if (contains(key, "conf_"))
330326 then [StringEntry(key, val)]
331327 else throw("Entries starting with conf_ only")
332328 else throw("You are not allowed to change this")
333329 }
334330
335331
336332
337333 @Callable(invoke)
338334 func appRunning (isLive,message) = {
339335 let caller = toString(invoke.caller)
340336 let id = toBase58String(invoke.transactionId)
341337 if (containsElement([chris, toString(this)], caller))
342338 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
343339 else throw("You are not allowed to change this")
344340 }
345341
346342
347343
348344 @Callable(i)
349345 func sellNFT (price,asset) = {
350- let $t01331213348 = isPayment(i)
351- let payment = $t01331213348._1
352- let amount = $t01331213348._2
346+ let $t01311013146 = isPayment(i)
347+ let payment = $t01311013146._1
348+ let amount = $t01311013146._2
353349 if ((amount != 1))
354350 then throw("No NFT attached")
355351 else {
356352 let nftId = if (if (isDefined(payment.assetId))
357353 then isSignArtNFT(value(payment.assetId))
358354 else false)
359355 then toBase58String(value(payment.assetId))
360356 else throw("Only SIGN Art NFT accepted.")
361- let $t01358213675 = provideBaseData(i, nftId)
362- let id = $t01358213675._1
363- let caller = $t01358213675._2
364- let date = $t01358213675._3
365- let isValidNFT = $t01358213675._4
366- let artId = $t01358213675._5
367- let creatorAddr = $t01358213675._6
368- let artSignID = $t01358213675._7
357+ let $t01338013473 = provideBaseData(i, nftId)
358+ let id = $t01338013473._1
359+ let caller = $t01338013473._2
360+ let date = $t01338013473._3
361+ let isValidNFT = $t01338013473._4
362+ let artId = $t01338013473._5
363+ let creatorAddr = $t01338013473._6
364+ let artSignID = $t01338013473._7
369365 if ((size(artSignID) == 0))
370366 then throw("Artwork not found on SIGN Art")
371367 else if (!(isValidNFT))
372368 then throw("Not a valid nft")
373369 else if (!(acceptedAssetIds(asset)))
374- then throw("Only SIGN, USDN, USDT or WAVES accepted")
370+ then throw("Only $ART, USDT-PP, USDC-PP, EAST, PUZZLE, ETH or WAVES accepted")
375371 else if (!(validateMinSell(price)))
376372 then throw("Wrong minimum sell price")
377373 else [StringEntry((getSaleKey(caller, nftId, artId, creatorAddr) + "_OPEN"), ((((((((((((toString(date) + "_") + toString(price)) + "_") + asset) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + id)), StringEntry(((("sale2nd_status_" + caller) + "_") + nftId), "OPEN"), StringEntry(("current_owner_on_dapp_" + nftId), caller)]
378374 }
379375 }
380376
381377
382378
383379 @Callable(i)
384380 func updateSalePrice (nftId,price,asset) = {
385- let $t01455214645 = provideBaseData(i, nftId)
386- let id = $t01455214645._1
387- let caller = $t01455214645._2
388- let date = $t01455214645._3
389- let isValidNFT = $t01455214645._4
390- let artId = $t01455214645._5
391- let creatorAddr = $t01455214645._6
392- let artSignID = $t01455214645._7
381+ let $t01437514468 = provideBaseData(i, nftId)
382+ let id = $t01437514468._1
383+ let caller = $t01437514468._2
384+ let date = $t01437514468._3
385+ let isValidNFT = $t01437514468._4
386+ let artId = $t01437514468._5
387+ let creatorAddr = $t01437514468._6
388+ let artSignID = $t01437514468._7
393389 if ((size(artSignID) == 0))
394390 then throw("Artwork not found on SIGN Art, cancel your sale.")
395391 else if (!(isValidNFT))
396392 then throw("Not a valid nft")
397393 else {
398394 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
399395 if ((saleOwner != caller))
400396 then throw("You don't own this NFT")
401397 else {
402398 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
403399 if ((saleStatus != "OPEN"))
404400 then throw("Sale not active")
405401 else if (!(acceptedAssetIds(asset)))
406- then throw("Only SIGN, USDN, USDT or WAVES accepted")
402+ then throw("Only $ART, USDT-PP, USDC-PP, EAST, PUZZLE, ETH or WAVES accepted")
407403 else if (!(validateMinSell(price)))
408404 then throw("Wrong minimum sell price")
409405 else {
410406 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
411407 let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
412408 [StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
413409 }
414410 }
415411 }
416412 }
417413
418414
419415
420416 @Callable(i)
421417 func cancelSale (nftId) = {
422- let $t01578616027 = provideBaseData(i, nftId)
423- let id = $t01578616027._1
424- let caller = $t01578616027._2
425- let date = $t01578616027._3
426- let isValidNFT = $t01578616027._4
427- let artId = $t01578616027._5
428- let creatorAddr = $t01578616027._6
429- let artSignID = $t01578616027._7
418+ let $t01563415875 = provideBaseData(i, nftId)
419+ let id = $t01563415875._1
420+ let caller = $t01563415875._2
421+ let date = $t01563415875._3
422+ let isValidNFT = $t01563415875._4
423+ let artId = $t01563415875._5
424+ let creatorAddr = $t01563415875._6
425+ let artSignID = $t01563415875._7
430426 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
431427 if ((saleOwner != caller))
432428 then throw("You don't own this NFT")
433429 else {
434430 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
435431 if ((saleStatus != "OPEN"))
436432 then throw("Sale not active")
437433 else {
438434 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
439435 let saleInfo = getStrByK((saleKey + "_OPEN"))
440436 [DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + caller) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CANCELLED"), ((((saleInfo + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftId))]
441437 }
442438 }
443439 }
444440
445441
446442
447443 @Callable(i)
448444 func buyNFT (nftId) = {
449- let $t01685816951 = provideBaseData(i, nftId)
450- let id = $t01685816951._1
451- let caller = $t01685816951._2
452- let date = $t01685816951._3
453- let isValidNFT = $t01685816951._4
454- let artId = $t01685816951._5
455- let creatorAddr = $t01685816951._6
456- let artSignID = $t01685816951._7
445+ let $t01670616799 = provideBaseData(i, nftId)
446+ let id = $t01670616799._1
447+ let caller = $t01670616799._2
448+ let date = $t01670616799._3
449+ let isValidNFT = $t01670616799._4
450+ let artId = $t01670616799._5
451+ let creatorAddr = $t01670616799._6
452+ let artSignID = $t01670616799._7
457453 if ((size(artSignID) == 0))
458454 then throw("Artwork not found on SIGN Art, cancel your sale.")
459455 else if (!(isValidNFT))
460456 then throw("Not a valid nft")
461457 else {
462458 let saleOwner = getSaleOwnerAndStatus(nftId)
463459 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
464460 let saleInfo = getStrByK((saleKey + "_OPEN"))
465461 if ((size(saleInfo) == 0))
466462 then throw("Sale Not found!")
467463 else {
468464 let saleInfoArray = split(saleInfo, "_")
469465 if ((parseInt(saleInfoArray[1]) == 0))
470466 then throw("Offer only")
471467 else {
472- let $t01744817484 = isPayment(i)
473- let payment = $t01744817484._1
474- let amount = $t01744817484._2
468+ let $t01729617332 = isPayment(i)
469+ let payment = $t01729617332._1
470+ let amount = $t01729617332._2
475471 let paymentAssetStr = if (isDefined(payment.assetId))
476472 then toBase58String(value(payment.assetId))
477473 else ""
478474 if (if ((saleInfoArray[1] != toString(amount)))
479475 then true
480476 else (saleInfoArray[2] != paymentAssetStr))
481477 then throw("Payment infos don't match.")
482478 else {
483- let $t01799718136 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
484- let commissions = $t01799718136._1
485- let creatorFee = $t01799718136._2
486- let ownerFee = $t01799718136._3
487- let collectorNFT = $t01799718136._4
479+ let $t01784517984 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
480+ let commissions = $t01784517984._1
481+ let creatorFee = $t01784517984._2
482+ let ownerFee = $t01784517984._3
483+ let collectorNFT = $t01784517984._4
488484 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
489485 }
490486 }
491487 }
492488 }
493489 }
494490
495491
496492
497493 @Callable(i)
498494 func setOffer (nftId) = {
499- let $t01854718644 = provideBaseData(i, nftId)
500- let id = $t01854718644._1
501- let offerOwner = $t01854718644._2
502- let date = $t01854718644._3
503- let isValidNFT = $t01854718644._4
504- let artId = $t01854718644._5
505- let creatorAddr = $t01854718644._6
506- let artSignID = $t01854718644._7
495+ let $t01839518492 = provideBaseData(i, nftId)
496+ let id = $t01839518492._1
497+ let offerOwner = $t01839518492._2
498+ let date = $t01839518492._3
499+ let isValidNFT = $t01839518492._4
500+ let artId = $t01839518492._5
501+ let creatorAddr = $t01839518492._6
502+ let artSignID = $t01839518492._7
507503 if (!(isValidNFT))
508504 then throw("Not a valid nft")
509505 else {
510- let $t01870518741 = isPayment(i)
511- let payment = $t01870518741._1
512- let amount = $t01870518741._2
506+ let $t01855318589 = isPayment(i)
507+ let payment = $t01855318589._1
508+ let amount = $t01855318589._2
513509 let assetId = if (!(isDefined(payment.assetId)))
514510 then "WAVES"
515511 else toBase58String(value(payment.assetId))
516512 if (!(acceptedAssetIds(assetId)))
517513 then throw("asset not accepted")
518514 else if ((amount == 0))
519515 then throw("Offer of 0 not allowed")
520516 else if (!(validateMinSell(amount)))
521517 then throw("Wrong minimum sell price")
522518 else {
523519 let saleOwner = getSaleOwnerAndStatus(nftId)
524520 [StringEntry((getBidKey(offerOwner, nftId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
525521 }
526522 }
527523 }
528524
529525
530526
531527 @Callable(i)
532528 func acceptOffer (nftId,offerId,offerOwner) = {
533- let $t01953419627 = provideBaseData(i, nftId)
534- let id = $t01953419627._1
535- let caller = $t01953419627._2
536- let date = $t01953419627._3
537- let isValidNFT = $t01953419627._4
538- let artId = $t01953419627._5
539- let creatorAddr = $t01953419627._6
540- let artSignID = $t01953419627._7
529+ let $t01938219475 = provideBaseData(i, nftId)
530+ let id = $t01938219475._1
531+ let caller = $t01938219475._2
532+ let date = $t01938219475._3
533+ let isValidNFT = $t01938219475._4
534+ let artId = $t01938219475._5
535+ let creatorAddr = $t01938219475._6
536+ let artSignID = $t01938219475._7
541537 if (!(isValidNFT))
542538 then throw("Not a valid nft")
543539 else {
544540 let saleOwner = getSaleOwnerAndStatus(nftId)
545541 if ((caller != saleOwner))
546542 then throw("Only sale owner can accept offer")
547543 else {
548544 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
549- let $t01988119936 = getBidData(bidKey)
550- let bidDataArr = $t01988119936._1
551- let assetId = $t01988119936._2
552- let bidData = $t01988119936._3
545+ let $t01972919784 = getBidData(bidKey)
546+ let bidDataArr = $t01972919784._1
547+ let assetId = $t01972919784._2
548+ let bidData = $t01972919784._3
553549 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
554550 let saleInfo = getStrByK((saleKey + "_OPEN"))
555551 if ((size(saleInfo) == 0))
556552 then throw("Sale Not found!")
557553 else {
558554 let amount = value(parseInt(bidDataArr[1]))
559- let $t02017220310 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
560- let commissions = $t02017220310._1
561- let creatorFee = $t02017220310._2
562- let ownerFee = $t02017220310._3
563- let collectorNFT = $t02017220310._4
555+ let $t02002020158 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
556+ let commissions = $t02002020158._1
557+ let creatorFee = $t02002020158._2
558+ let ownerFee = $t02002020158._3
559+ let collectorNFT = $t02002020158._4
564560 let assetIdStr = if (isDefined(assetId))
565561 then toBase58String(value(assetId))
566562 else "WAVES"
567563 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry((bidKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((bidKey + "_CLOSED"), ((((bidData + "_CLOSED_") + toString(date)) + "_") + id)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((((((saleInfo + "_CLOSED-OFFER_") + toString(date)) + "_") + id) + "_") + offerOwner) + "_") + toString(amount)) + "_") + assetIdStr)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
568564 }
569565 }
570566 }
571567 }
572568
573569
574570
575571 @Callable(i)
576572 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
577- let $t02111021184 = idCallerDate(i)
578- let id = $t02111021184._1
579- let caller = $t02111021184._2
580- let date = $t02111021184._3
573+ let $t02095821032 = idCallerDate(i)
574+ let id = $t02095821032._1
575+ let caller = $t02095821032._2
576+ let date = $t02095821032._3
581577 if (if ((caller != offerOwner))
582578 then (caller != saleOwner)
583579 else false)
584580 then throw("You cannot cancel this offer.")
585581 else {
586582 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
587- let $t02135621411 = getBidData(bidKey)
588- let bidDataArr = $t02135621411._1
589- let assetId = $t02135621411._2
590- let bidData = $t02135621411._3
583+ let $t02120421259 = getBidData(bidKey)
584+ let bidDataArr = $t02120421259._1
585+ let assetId = $t02120421259._2
586+ let bidData = $t02120421259._3
591587 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
592588 }
593589 }
594590
595591

github/deemru/w8io/6500d08 
130.95 ms