tx · 8XJcRSSKPzAJGhVTbMxdopfJM3XvLhLDgBEqCyjNq8hJ

3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p:  -0.01600000 Waves

2023.02.03 06:54 [2432925] smart account 3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p > SELF 0.00000000 Waves

{ "type": 13, "id": "8XJcRSSKPzAJGhVTbMxdopfJM3XvLhLDgBEqCyjNq8hJ", "fee": 1600000, "feeAssetId": null, "timestamp": 1675395264847, "version": 2, "chainId": 84, "sender": "3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p", "senderPublicKey": "Hh3eFP2XFetZSfTxQiM1Ps96f68zi8Zh5ghhCZdjgdFs", "proofs": [ "49vbRLErqdCMak919eUJgC1oMN97yN5PTUmvF5fpGg8dDKFiztg6DrjMGrwsHTRnwkd4hYdGrPPrDhEfLLjKjopw" ], "script": "base64:BgI5CAISBAoCCAgSBAoCBAgSBAoCAQgSBQoDCAEIEgMKAQgSAwoBCBIDCgEIEgUKAwgICBIGCgQICAgIOgAHVkVSU0lPTgIFMS4xLjUBCWdldFN0ckJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1bml0VGVzdAcACW9yYWNsZUZlZQkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIPY29uZl9vcmFjbGVfZmVlAAhzaWduRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIRY29uZl9zaWdud2ViX2RhcHAAC2ZlZVJlY2VpdmVyCQEJZ2V0U3RyQnlLAQIRY29uZl9mZWVfcmVjZWl2ZXIADGFydHdvcmtzRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQISY29uZl9hcnR3b3Jrc19kYXBwAAh1c2VyRGFwcAMFCHVuaXRUZXN0CQEFdmFsdWUBCQCmCAECIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEFdmFsdWUBCQCmCAEJAQlnZXRTdHJCeUsBAg9jb25mX3VzZXJzX2RhcHAADXdoaXRlbGlzdERhcHAJAQV2YWx1ZQEJAKYIAQkBCWdldFN0ckJ5SwECE2NvbmZfd2hpdGVsaXN0X2RhcHAAC3NpZ25Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1NJR04AC3VzZG5Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRE4AC3VzZHRBc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRFQADHdhdmVzQXNzZXRJZAEAAAVjaHJpcwkBCWdldFN0ckJ5SwECDGNvbmZfYWRtaW5fMQAHc2lnbkN1dAADAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEAAphcnRJbGxlZ2FsAgdJTExFR0FMAAxhcnRTdXNwZW5kZWQCCVNVU1BFTkRFRAAOZGFwcFJ1bm5pbmdLZXkCFGNvbmZfZGFwcF9pc19ydW5uaW5nABFtYWludGVuYW5jZU1TR0tleQIUY29uZl9tYWludGVuYW5jZV9tc2cAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDmRhcHBSdW5uaW5nS2V5BgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwURbWFpbnRlbmFuY2VNU0dLZXkCAAAJbnVtU2FsZXNLAgludW1fc2FsZXMBDWdldFVzZXJTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAUDa2V5AgVFcnJvcgETZ2V0QXJ0d29ya1JveWFsdGllcwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFDGFydHdvcmtzRGFwcAUDa2V5AOgHAQxnZXRBcnRTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQxhcnR3b3Jrc0RhcHAFA2tleQIAAQlnZXRJbnRCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAENa2V5VXNlclN0YXR1cwEEYWRkcgkArAICAgx1c2VyX3N0YXR1c18FBGFkZHIBE2tleUFydHdvcmtSb3lhbHRpZXMCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIOYXJ0X3JveWFsdGllc18FBWFydElkAgFfBQZjYWxsZXIBCWtleVNpZ25JRAIKYXJ0aXN0QWRkcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQphcnRpc3RBZGRyAQdrZXlGbGFnAgphcnRpc3RBZGRyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZmxhZ18FBWFydElkAgFfBQphcnRpc3RBZGRyAQprZXlORlREYXRhAQJpZAkArAICAgRuZnRfBQJpZAEKZ2V0U2FsZUtleQQGY2FsbGVyBW5mdElkBWFydElkC2NyZWF0b3JBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDXNhbGUybmRfaW5mb18FBmNhbGxlcgIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgEJZ2V0QmlkS2V5BApvZmZlck93bmVyBW5mdElkCXNhbGVPd25lcgdvZmZlcklkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCW9mZmVyMm5kXwUKb2ZmZXJPd25lcgIBXwUFbmZ0SWQCAV8FCXNhbGVPd25lcgIBXwUHb2ZmZXJJZAETZ2V0SW50QnlLRnJvbU9yYWNsZQEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUJb3JhY2xlRmVlBQNrZXkCH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJARNnZXRJbnRCeUtGcm9tT3JhY2xlAQkArAICAhJjZXJ0aWZpY2F0aW9uX2ZlZV8JANgEAQULc2lnbkFzc2V0SWQBEmtleUFydGlzdEFnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAg1hcnRpc3RfYWdlbnRfBQphcnRpc3RBZGRyARZrZXlTZWNvbmRhcnlTaGFyZUFnZW50AQphcnRpc3RBZGRyCQCsAgICF2FydGlzdF9hZ2VudF9zZWNvbmRhcnlfBQphcnRpc3RBZGRyARhrZXlBcnRpc3RQdWJsaWNBZ2VudEFkZHIBCmFydGlzdEFkZHIJAKwCAgIUYXJ0aXN0X3B1YmxpY19hZ2VudF8FCmFydGlzdEFkZHIBHGtleVNlY29uZGFyeVNoYXJlUHVibGljQWdlbnQBCmFydGlzdEFkZHIJAKwCAgIeYXJ0aXN0X3B1YmxpY19hZ2VudF9zZWNvbmRhcnlfBQphcnRpc3RBZGRyAQxpZENhbGxlckRhdGUBAWkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cJAJUKAwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQlpc1BheW1lbnQBAWkDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAkAlAoCBQdwYXltZW50BQZhbW91bnQBDGFzc2V0SXNWYWxpZAEMYXNzZXREZXRhaWxzAwMDCQAAAggFDGFzc2V0RGV0YWlscwhxdWFudGl0eQABCQAAAggFDGFzc2V0RGV0YWlscwhkZWNpbWFscwAABwkAAAIIBQxhc3NldERldGFpbHMKcmVpc3N1YWJsZQcHCQAAAggFDGFzc2V0RGV0YWlscwZpc3N1ZXIFDGFydHdvcmtzRGFwcAcBDGlzU2lnbkFydE5GVAECaWQEDGFzc2V0RGV0YWlscwkBBXZhbHVlAQkA7AcBBQJpZAkBDGFzc2V0SXNWYWxpZAEFDGFzc2V0RGV0YWlscwEQYWNjZXB0ZWRBc3NldElkcwEHYXNzZXRJZAMDAwMDCQECIT0CBQdhc3NldElkCQDYBAEFC3NpZ25Bc3NldElkCQECIT0CBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQCBVdBVkVTBwkBAiE9AgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQHBwYBDWdldEJpZEFzc2V0SWQBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQVuZnRpZAQJc2FsZU93bmVyCQEJZ2V0U3RyQnlLAQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRpZAMJAAACCQCxAgEFCXNhbGVPd25lcgAACQACAQINTkZUIG5vdCBmb3VuZAQKc2FsZVN0YXR1cwkBCWdldFN0ckJ5SwEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRpZAMJAQIhPQIFCnNhbGVTdGF0dXMCBE9QRU4JAAIBAhBORlQgbm90IGZvciBzYWxlBQlzYWxlT3duZXIBCmdldEJpZERhdGEBA2tleQQHYmlkRGF0YQkBCWdldFN0ckJ5SwEJAKwCAgUDa2V5AgVfT1BFTgMJAAACBQdiaWREYXRhAgAJAAIBAg9PZmZlciBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQHYXNzZXRJZAkBDWdldEJpZEFzc2V0SWQBCQCRAwIFCmJpZERhdGFBcnIAAgkAlQoDBQpiaWREYXRhQXJyBQdhc3NldElkBQdiaWREYXRhAQphcnRJc1ZhbGlkAQlhcnRTdGF0dXMDCQECIT0CBQlhcnRTdGF0dXMFCmFydElsbGVnYWwJAQIhPQIFCWFydFN0YXR1cwUMYXJ0U3VzcGVuZGVkBwEOY2hlY2tBcnRTdGF0dXMCBGFkZHICaWQECWFydFN0YXR1cwkBDGdldEFydFN0ckJ5SwEJAQdrZXlGbGFnAgUEYWRkcgUCaWQDCQEKYXJ0SXNWYWxpZAEFCWFydFN0YXR1cwYJAAIBCQCsAgICHE9yaWdpbmFsIEFydHdvcmsgZmxhZ2dlZCBhcyAFCWFydFN0YXR1cwERY2hlY2tBcnRpc3RTdGF0dXMBBGFkZHIEDGFydGlzdFN0YXR1cwkBDWdldFVzZXJTdHJCeUsBCQENa2V5VXNlclN0YXR1cwEFBGFkZHIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQ11c2VyU3VzcGVuZGVkCQDMCAIFC3VzZXJSZW1vdmVkBQNuaWwFDGFydGlzdFN0YXR1cwkAAgEJAKwCAgIQT3JpZ2luYWwgQXJ0aXN0IAUMYXJ0aXN0U3RhdHVzBgEMY2hlY2tORlRJbmZvAQdhc3NldElkBAduZnREYXRhCQC1CQIJAQxnZXRBcnRTdHJCeUsBCQEKa2V5TkZURGF0YQEFB2Fzc2V0SWQCAV8ECWFydFNpZ25JRAkBDGdldEFydFN0ckJ5SwEJAQlrZXlTaWduSUQCCQCRAwIFB25mdERhdGEABgkAkQMCBQduZnREYXRhAAUDAwkBASEBCQEOY2hlY2tBcnRTdGF0dXMCCQCRAwIFB25mdERhdGEABgkAkQMCBQduZnREYXRhAAUJAQEhAQkBEWNoZWNrQXJ0aXN0U3RhdHVzAQkAkQMCBQduZnREYXRhAAYHCQCWCgQHCQCRAwIFB25mdERhdGEABQkAkQMCBQduZnREYXRhAAYFCWFydFNpZ25JRAkAlgoEBgkAkQMCBQduZnREYXRhAAUJAJEDAgUHbmZ0RGF0YQAGBQlhcnRTaWduSUQBDWNoZWNrQVJURXhpc3QCBWFydElkC2NyZWF0b3JBZGRyBAlhcnRTaWduSUQJAQxnZXRBcnRTdHJCeUsBCQEJa2V5U2lnbklEAgULY3JlYXRvckFkZHIFBWFydElkAwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAh1BcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydAMDCQEBIQEJAQ5jaGVja0FydFN0YXR1cwIFC2NyZWF0b3JBZGRyBQVhcnRJZAkBASEBCQERY2hlY2tBcnRpc3RTdGF0dXMBBQtjcmVhdG9yQWRkcgcHBgEMc2V0VHJhbnNmZXJzBwZhbW91bnQHYXNzZXRJZAVuZnRpZAtjcmVhdG9yQWRkcglzYWxlT3duZXIGY2FsbGVyBWFydElkBApjcmVhdG9yQ3V0CQETZ2V0QXJ0d29ya1JveWFsdGllcwEJARNrZXlBcnR3b3JrUm95YWx0aWVzAgULY3JlYXRvckFkZHIFBWFydElkBAVhZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBEmtleUFydGlzdEFnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQKYWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBFmtleVNlY29uZGFyeVNoYXJlQWdlbnQBBQtjcmVhdG9yQWRkcgAABAtwdWJsaWNBZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBGGtleUFydGlzdFB1YmxpY0FnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQQcHVibGljQWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBHGtleVNlY29uZGFyeVNoYXJlUHVibGljQWdlbnQBBQtjcmVhdG9yQWRkcgAABA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQdzaWduQ3V0AGQEEGFtb3VudEZvckNyZWF0b3IJAGsDBQZhbW91bnQFCmNyZWF0b3JDdXQAkE4EDmFtb3VudEZvck93bmVyCQBlAgUGYW1vdW50CQBkAgUNYW1vdW50Rm9yU2lnbgUQYW1vdW50Rm9yQ3JlYXRvcgQOYW1vdW50Rm9yQWdlbnQDAwkBAiE9AgUFYWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUKYWdlbnRTaGFyZQAABwkAawMFBmFtb3VudAUKYWdlbnRTaGFyZQBkAAAEFGFtb3VudEZvclB1YmxpY0FnZW50AwMJAQIhPQIFC3B1YmxpY0FnZW50BQtmZWVSZWNlaXZlcgkAZgIFEHB1YmxpY0FnZW50U2hhcmUAAAcJAGsDBQZhbW91bnQFEHB1YmxpY0FnZW50U2hhcmUAZAAAAwYJAAIBCQCsAgIJAKwCAgkArAICAhFhbW91bnRGb3JBZ2VudCA9IAkApAMBBQ5hbW91bnRGb3JBZ2VudAIaIC8gYW1vdW50Rm9yUHVibGljQWdlbnQgPSAJAKQDAQUUYW1vdW50Rm9yUHVibGljQWdlbnQEC2NvbW1pc3Npb25zAwkBAiE9AgUOYW1vdW50Rm9yQWdlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIJAGUCBQ1hbW91bnRGb3JTaWduBQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUFYWdlbnQFDmFtb3VudEZvckFnZW50BQdhc3NldElkBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwECmNyZWF0b3JGZWUDCQECIT0CBRRhbW91bnRGb3JQdWJsaWNBZ2VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtwdWJsaWNBZ2VudAUUYW1vdW50Rm9yUHVibGljQWdlbnQFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2NyZWF0b3JBZGRyCQBlAgUQYW1vdW50Rm9yQ3JlYXRvcgUUYW1vdW50Rm9yUHVibGljQWdlbnQFB2Fzc2V0SWQFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULY3JlYXRvckFkZHIFEGFtb3VudEZvckNyZWF0b3IFB2Fzc2V0SWQFA25pbAQIb3duZXJGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQlzYWxlT3duZXIFDmFtb3VudEZvck93bmVyBQdhc3NldElkBAxjb2xsZWN0b3JORlQJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQkA2QQBBQVuZnRpZAkAlgoEBQtjb21taXNzaW9ucwUKY3JlYXRvckZlZQUIb3duZXJGZWUFDGNvbGxlY3Rvck5GVAEPdmFsaWRhdGVNaW5TZWxsAgdhc3NldElkBXByaWNlBAxtaW5TZWxsV2F2ZXMDBQh1bml0VGVzdAAKCQETZ2V0SW50QnlLRnJvbU9yYWNsZQECDndhdmVzX21pbl9zZWxsBAttaW5TZWxsVXNkbgDAhD0EC21pblNlbGxTaWduAwUIdW5pdFRlc3QAAQkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgMDAwMDAwkAAAIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQJAGYCBQttaW5TZWxsVXNkbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwkAAAIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQJAGYCBQttaW5TZWxsVXNkbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwkAAAIFB2Fzc2V0SWQJANgEAQULc2lnbkFzc2V0SWQJAGYCBQttaW5TZWxsU2lnbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwMJAAACBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAYJAAACBQdhc3NldElkAgVXQVZFUwkAZgIFDG1pblNlbGxXYXZlcwUFcHJpY2UHCQECIT0CBQVwcmljZQAABwcGAQ9wcm92aWRlQmFzZURhdGECAWkFbmZ0SWQEDSR0MDEwODA3MTA4NDcJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEwODA3MTA4NDcCXzEEBmNhbGxlcggFDSR0MDEwODA3MTA4NDcCXzIEBGRhdGUIBQ0kdDAxMDgwNzEwODQ3Al8zBA0kdDAxMDg1MDEwOTE5CQEMY2hlY2tORlRJbmZvAQUFbmZ0SWQECmlzVmFsaWRORlQIBQ0kdDAxMDg1MDEwOTE5Al8xBAVhcnRJZAgFDSR0MDEwODUwMTA5MTkCXzIEC2NyZWF0b3JBZGRyCAUNJHQwMTA4NTAxMDkxOQJfMwQJYXJ0U2lnbklECAUNJHQwMTA4NTAxMDkxOQJfNAkAmQoHBQJpZAUGY2FsbGVyBQRkYXRlBQppc1ZhbGlkTkZUBQVhcnRJZAULY3JlYXRvckFkZHIFCWFydFNpZ25JRAEOdXBkYXRlTnVtU2FsZXMABAhudW1TYWxlcwkBCWdldEludEJ5SwEFCW51bVNhbGVzSwkBDEludGVnZXJFbnRyeQIFCW51bVNhbGVzSwkAZAIFCG51bVNhbGVzAAEJBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBCmFwcFJ1bm5pbmcCBmlzTGl2ZQdtZXNzYWdlBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIEAmlkCQDYBAEIBQZpbnZva2UNdHJhbnNhY3Rpb25JZAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDmRhcHBSdW5uaW5nS2V5BQZpc0xpdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgURbWFpbnRlbmFuY2VNU0dLZXkFB21lc3NhZ2UFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEHc2VsbE5GVAIFcHJpY2UFYXNzZXQEDSR0MDExOTg0MTIwMjAJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMTE5ODQxMjAyMAJfMQQGYW1vdW50CAUNJHQwMTE5ODQxMjAyMAJfMgMJAQIhPQIFBmFtb3VudAABCQACAQIPTm8gTkZUIGF0dGFjaGVkBAVuZnRJZAMDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkBDGlzU2lnbkFydE5GVAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQHCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhtPbmx5IFNJR04gQXJ0IE5GVCBhY2NlcHRlZC4EDSR0MDEyMjU0MTIzNDcJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxMjI1NDEyMzQ3Al8xBAZjYWxsZXIIBQ0kdDAxMjI1NDEyMzQ3Al8yBARkYXRlCAUNJHQwMTIyNTQxMjM0NwJfMwQKaXNWYWxpZE5GVAgFDSR0MDEyMjU0MTIzNDcCXzQEBWFydElkCAUNJHQwMTIyNTQxMjM0NwJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMjI1NDEyMzQ3Al82BAlhcnRTaWduSUQIBQ0kdDAxMjI1NDEyMzQ3Al83AwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAh1BcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydAMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQVhc3NldAkAAgECJ09ubHkgU0lHTiwgVVNETiwgVVNEVCBvciBXQVZFUyBhY2NlcHRlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFBWFzc2V0BQVwcmljZQkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQpnZXRTYWxlS2V5BAUGY2FsbGVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyAgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQRkYXRlAgFfCQCkAwEFBXByaWNlAgFfBQVhc3NldAIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgIBXwUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAgRPUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0SWQFBmNhbGxlcgUDbmlsAWkBD3VwZGF0ZVNhbGVQcmljZQMFbmZ0SWQFcHJpY2UFYXNzZXQEDSR0MDEzMjI3MTMzMjAJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxMzIyNzEzMzIwAl8xBAZjYWxsZXIIBQ0kdDAxMzIyNzEzMzIwAl8yBARkYXRlCAUNJHQwMTMyMjcxMzMyMAJfMwQKaXNWYWxpZE5GVAgFDSR0MDEzMjI3MTMzMjACXzQEBWFydElkCAUNJHQwMTMyMjcxMzMyMAJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMzIyNzEzMzIwAl82BAlhcnRTaWduSUQIBQ0kdDAxMzIyNzEzMzIwAl83AwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAjBBcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydCwgY2FuY2VsIHlvdXIgc2FsZS4DCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQECXNhbGVPd25lcgkBCWdldFN0ckJ5SwEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0SWQDCQECIT0CBQlzYWxlT3duZXIFBmNhbGxlcgkAAgECFllvdSBkb24ndCBvd24gdGhpcyBORlQECnNhbGVTdGF0dXMJAQlnZXRTdHJCeUsBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FBmNhbGxlcgIBXwUFbmZ0SWQDCQECIT0CBQpzYWxlU3RhdHVzAgRPUEVOCQACAQIPU2FsZSBub3QgYWN0aXZlAwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFBWFzc2V0CQACAQInT25seSBTSUdOLCBVU0ROLCBVU0RUIG9yIFdBVkVTIGFjY2VwdGVkAwkBASEBCQEPdmFsaWRhdGVNaW5TZWxsAgUFYXNzZXQFBXByaWNlCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBAdzYWxlS2V5CQEKZ2V0U2FsZUtleQQFBmNhbGxlcgUFbmZ0SWQFBWFydElkBQtjcmVhdG9yQWRkcgQIc2FsZUluZm8JALUJAgkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4CAV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzYWxlS2V5AgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQhzYWxlSW5mbwAAAgFfCQCkAwEFBXByaWNlAgFfBQVhc3NldAIBXwkAkQMCBQhzYWxlSW5mbwADAgFfCQCRAwIFCHNhbGVJbmZvAAQCAV8JAJEDAgUIc2FsZUluZm8ABQIBXwkAkQMCBQhzYWxlSW5mbwAGBQNuaWwBaQEKY2FuY2VsU2FsZQEFbmZ0SWQEDSR0MDE0NDY4MTQ3MDkJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxNDQ2ODE0NzA5Al8xBAZjYWxsZXIIBQ0kdDAxNDQ2ODE0NzA5Al8yBARkYXRlCAUNJHQwMTQ0NjgxNDcwOQJfMwQKaXNWYWxpZE5GVAgFDSR0MDE0NDY4MTQ3MDkCXzQEBWFydElkCAUNJHQwMTQ0NjgxNDcwOQJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxNDQ2ODE0NzA5Al82BAlhcnRTaWduSUQIBQ0kdDAxNDQ2ODE0NzA5Al83BAlzYWxlT3duZXIJAQlnZXRTdHJCeUsBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkAwkBAiE9AgUJc2FsZU93bmVyBQZjYWxsZXIJAAIBAhZZb3UgZG9uJ3Qgb3duIHRoaXMgTkZUBApzYWxlU3RhdHVzCQEJZ2V0U3RyQnlLAQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAwkBAiE9AgUKc2FsZVN0YXR1cwIET1BFTgkAAgECD1NhbGUgbm90IGFjdGl2ZQQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQZjYWxsZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgpfQ0FOQ0VMTEVECQCsAgIJAKwCAgkArAICCQCsAgIFCHNhbGVJbmZvAgtfQ0FOQ0VMTEVEXwkApAMBBQRkYXRlAgFfBQJpZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAEJANkEAQUFbmZ0SWQFA25pbAFpAQZidXlORlQBBW5mdElkBA0kdDAxNTU0MDE1NjMzCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTU1NDAxNTYzMwJfMQQGY2FsbGVyCAUNJHQwMTU1NDAxNTYzMwJfMgQEZGF0ZQgFDSR0MDE1NTQwMTU2MzMCXzMECmlzVmFsaWRORlQIBQ0kdDAxNTU0MDE1NjMzAl80BAVhcnRJZAgFDSR0MDE1NTQwMTU2MzMCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTU1NDAxNTYzMwJfNgQJYXJ0U2lnbklECAUNJHQwMTU1NDAxNTYzMwJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIwQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQsIGNhbmNlbCB5b3VyIHNhbGUuAwkBASEBBQppc1ZhbGlkTkZUCQACAQIPTm90IGEgdmFsaWQgbmZ0BAlzYWxlT3duZXIJARVnZXRTYWxlT3duZXJBbmRTdGF0dXMBBQVuZnRJZAQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQlzYWxlT3duZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgMJAAACCQCxAgEFCHNhbGVJbmZvAAAJAAIBAg9TYWxlIE5vdCBmb3VuZCEEDXNhbGVJbmZvQXJyYXkJALUJAgUIc2FsZUluZm8CAV8DCQAAAgkAtgkBCQCRAwIFDXNhbGVJbmZvQXJyYXkAAQAACQACAQIKT2ZmZXIgb25seQQNJHQwMTYxMzAxNjE2NgkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAxNjEzMDE2MTY2Al8xBAZhbW91bnQIBQ0kdDAxNjEzMDE2MTY2Al8yBA9wYXltZW50QXNzZXRTdHIDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAgADAwkBAiE9AgkAkQMCBQ1zYWxlSW5mb0FycmF5AAEJAKQDAQUGYW1vdW50BgkBAiE9AgkAkQMCBQ1zYWxlSW5mb0FycmF5AAIFD3BheW1lbnRBc3NldFN0cgkAAgECGlBheW1lbnQgaW5mb3MgZG9uJ3QgbWF0Y2guBA0kdDAxNjY3MjE2ODExCQEMc2V0VHJhbnNmZXJzBwUGYW1vdW50CAUHcGF5bWVudAdhc3NldElkBQVuZnRJZAULY3JlYXRvckFkZHIFCXNhbGVPd25lcgUGY2FsbGVyBQVhcnRJZAQLY29tbWlzc2lvbnMIBQ0kdDAxNjY3MjE2ODExAl8xBApjcmVhdG9yRmVlCAUNJHQwMTY2NzIxNjgxMQJfMgQIb3duZXJGZWUIBQ0kdDAxNjY3MjE2ODExAl8zBAxjb2xsZWN0b3JORlQIBQ0kdDAxNjY3MjE2ODExAl80CQDOCAIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwIIX0NMT1NFRF8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8FBmNhbGxlcgkAzAgCCQEOdXBkYXRlTnVtU2FsZXMACQDMCAIFCG93bmVyRmVlCQDMCAIFDGNvbGxlY3Rvck5GVAUDbmlsBQpjcmVhdG9yRmVlBQtjb21taXNzaW9ucwFpAQhzZXRPZmZlcgEFbmZ0SWQEDSR0MDE3MjIyMTczMTkJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxNzIyMjE3MzE5Al8xBApvZmZlck93bmVyCAUNJHQwMTcyMjIxNzMxOQJfMgQEZGF0ZQgFDSR0MDE3MjIyMTczMTkCXzMECmlzVmFsaWRORlQIBQ0kdDAxNzIyMjE3MzE5Al80BAVhcnRJZAgFDSR0MDE3MjIyMTczMTkCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTcyMjIxNzMxOQJfNgQJYXJ0U2lnbklECAUNJHQwMTcyMjIxNzMxOQJfNwMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQNJHQwMTczODAxNzQxNgkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAxNzM4MDE3NDE2Al8xBAZhbW91bnQIBQ0kdDAxNzM4MDE3NDE2Al8yBAdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQdhc3NldElkCQACAQISYXNzZXQgbm90IGFjY2VwdGVkAwkAAAIFBmFtb3VudAAACQACAQIWT2ZmZXIgb2YgMCBub3QgYWxsb3dlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFB2Fzc2V0SWQFBmFtb3VudAkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEJZ2V0QmlkS2V5BAUKb2ZmZXJPd25lcgUFbmZ0SWQFCXNhbGVPd25lcgUCaWQCBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQRkYXRlAgFfCQCkAwEFBmFtb3VudAIBXwUHYXNzZXRJZAIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgIBXwUKb2ZmZXJPd25lcgIBXwUCaWQFA25pbAFpAQthY2NlcHRPZmZlcgMFbmZ0SWQHb2ZmZXJJZApvZmZlck93bmVyBA0kdDAxODIxODE4MzExCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTgyMTgxODMxMQJfMQQGY2FsbGVyCAUNJHQwMTgyMTgxODMxMQJfMgQEZGF0ZQgFDSR0MDE4MjE4MTgzMTECXzMECmlzVmFsaWRORlQIBQ0kdDAxODIxODE4MzExAl80BAVhcnRJZAgFDSR0MDE4MjE4MTgzMTECXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTgyMTgxODMxMQJfNgQJYXJ0U2lnbklECAUNJHQwMTgyMTgxODMxMQJfNwMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQDCQECIT0CBQZjYWxsZXIFCXNhbGVPd25lcgkAAgECIE9ubHkgc2FsZSBvd25lciBjYW4gYWNjZXB0IG9mZmVyBAZiaWRLZXkJAQlnZXRCaWRLZXkEBQpvZmZlck93bmVyBQVuZnRJZAUJc2FsZU93bmVyBQdvZmZlcklkBA0kdDAxODU2NTE4NjIwCQEKZ2V0QmlkRGF0YQEFBmJpZEtleQQKYmlkRGF0YUFycggFDSR0MDE4NTY1MTg2MjACXzEEB2Fzc2V0SWQIBQ0kdDAxODU2NTE4NjIwAl8yBAdiaWREYXRhCAUNJHQwMTg1NjUxODYyMAJfMwQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQlzYWxlT3duZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgMJAAACCQCxAgEFCHNhbGVJbmZvAAAJAAIBAg9TYWxlIE5vdCBmb3VuZCEEBmFtb3VudAkBBXZhbHVlAQkAtgkBCQCRAwIFCmJpZERhdGFBcnIAAQQNJHQwMTg4NTYxODk5NAkBDHNldFRyYW5zZmVycwcFBmFtb3VudAUHYXNzZXRJZAUFbmZ0SWQFC2NyZWF0b3JBZGRyBQlzYWxlT3duZXIJAJEDAgUKYmlkRGF0YUFycgAGBQVhcnRJZAQLY29tbWlzc2lvbnMIBQ0kdDAxODg1NjE4OTk0Al8xBApjcmVhdG9yRmVlCAUNJHQwMTg4NTYxODk5NAJfMgQIb3duZXJGZWUIBQ0kdDAxODg1NjE4OTk0Al8zBAxjb2xsZWN0b3JORlQIBQ0kdDAxODg1NjE4OTk0Al80BAphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEFB2Fzc2V0SWQJANgEAQkBBXZhbHVlAQUHYXNzZXRJZAIFV0FWRVMJAM4IAgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUHc2FsZUtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZiaWRLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGYmlkS2V5AgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIFB2JpZERhdGECCF9DTE9TRURfCQCkAwEFBGRhdGUCAV8FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFCHNhbGVJbmZvAg5fQ0xPU0VELU9GRkVSXwkApAMBBQRkYXRlAgFfBQJpZAIBXwUKb2ZmZXJPd25lcgIBXwkApAMBBQZhbW91bnQCAV8FCmFzc2V0SWRTdHIJAMwIAgkBDnVwZGF0ZU51bVNhbGVzAAkAzAgCBQhvd25lckZlZQkAzAgCBQxjb2xsZWN0b3JORlQFA25pbAUKY3JlYXRvckZlZQULY29tbWlzc2lvbnMBaQELY2FuY2VsT2ZmZXIEBW5mdElkB29mZmVySWQKb2ZmZXJPd25lcglzYWxlT3duZXIEDSR0MDE5Nzk0MTk4NjgJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE5Nzk0MTk4NjgCXzEEBmNhbGxlcggFDSR0MDE5Nzk0MTk4NjgCXzIEBGRhdGUIBQ0kdDAxOTc5NDE5ODY4Al8zAwMJAQIhPQIFBmNhbGxlcgUKb2ZmZXJPd25lcgkBAiE9AgUGY2FsbGVyBQlzYWxlT3duZXIHCQACAQIdWW91IGNhbm5vdCBjYW5jZWwgdGhpcyBvZmZlci4EBmJpZEtleQkBCWdldEJpZEtleQQFCm9mZmVyT3duZXIFBW5mdElkBQlzYWxlT3duZXIFB29mZmVySWQEDSR0MDIwMDQwMjAwOTUJAQpnZXRCaWREYXRhAQUGYmlkS2V5BApiaWREYXRhQXJyCAUNJHQwMjAwNDAyMDA5NQJfMQQHYXNzZXRJZAgFDSR0MDIwMDQwMjAwOTUCXzIEB2JpZERhdGEIBQ0kdDAyMDA0MDIwMDk1Al8zCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGYmlkS2V5AgVfT1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBmJpZEtleQIKX0NBTkNFTExFRAkArAICCQCsAgIJAKwCAgkArAICBQdiaWREYXRhAgtfQ0FOQ0VMTEVEXwkApAMBBQRkYXRlAgFfBQJpZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBQdhc3NldElkBQNuaWwAdlIkHg==", "height": 2432925, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9wZRxJJs8sKk8MtLPUGqNTbW3aVKVzGecNjXqkPMqECN Next: 4BorXrQigpr2mEAdonQaT3jFhfTJBR3VmFD4XScAReXp Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VERSION = "1.1.5"
5+
46 func getStrByK (key) = valueOrElse(getString(this, key), "")
57
68
79 let unitTest = false
810
911 let oracleFee = value(addressFromString(getStrByK("conf_oracle_fee")))
12+
13+let signDapp = value(addressFromString(getStrByK("conf_signweb_dapp")))
1014
1115 let feeReceiver = getStrByK("conf_fee_receiver")
1216
1519 let userDapp = if (unitTest)
1620 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1721 else value(addressFromString(getStrByK("conf_users_dapp")))
22+
23+let whitelistDapp = value(addressFromString(getStrByK("conf_whitelist_dapp")))
1824
1925 let signAssetId = fromBase58String(getStrByK("conf_accepted_asset_SIGN"))
2026
8793 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
8894
8995
90-func keySecondaryShare (artistAddr) = ("artist_agent_secondary_" + artistAddr)
96+func keySecondaryShareAgent (artistAddr) = ("artist_agent_secondary_" + artistAddr)
97+
98+
99+func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
100+
101+
102+func keySecondarySharePublicAgent (artistAddr) = ("artist_public_agent_secondary_" + artistAddr)
91103
92104
93105 func idCallerDate (i) = if (!(dappRunning))
194206 }
195207
196208
209+func checkARTExist (artId,creatorAddr) = {
210+ let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
211+ if ((size(artSignID) == 0))
212+ then throw("Artwork not found on SIGN Art")
213+ else if (if (!(checkArtStatus(creatorAddr, artId)))
214+ then !(checkArtistStatus(creatorAddr))
215+ else false)
216+ then false
217+ else true
218+ }
219+
220+
197221 func setTransfers (amount,assetId,nftid,creatorAddr,saleOwner,caller,artId) = {
198222 let creatorCut = getArtworkRoyalties(keyArtworkRoyalties(creatorAddr, artId))
199223 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(creatorAddr)), feeReceiver)
200- let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShare(creatorAddr)), 0)
224+ let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShareAgent(creatorAddr)), 0)
225+ let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(creatorAddr)), feeReceiver)
226+ let publicAgentShare = valueOrElse(getInteger(userDapp, keySecondarySharePublicAgent(creatorAddr)), 0)
201227 let amountForSign = fraction(amount, signCut, 100)
202228 let amountForCreator = fraction(amount, creatorCut, 10000)
203229 let amountForOwner = (amount - (amountForSign + amountForCreator))
206232 else false)
207233 then fraction(amount, agentShare, 100)
208234 else 0
209- let commissions = if ((amountForAgent != 0))
210- then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
211- else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
212- let creatorFee = ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)
213- let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
214- let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
215- $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
235+ let amountForPublicAgent = if (if ((publicAgent != feeReceiver))
236+ then (publicAgentShare > 0)
237+ else false)
238+ then fraction(amount, publicAgentShare, 100)
239+ else 0
240+ if (true)
241+ then throw(((("amountForAgent = " + toString(amountForAgent)) + " / amountForPublicAgent = ") + toString(amountForPublicAgent)))
242+ else {
243+ let commissions = if ((amountForAgent != 0))
244+ then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
245+ else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
246+ let creatorFee = if ((amountForPublicAgent != 0))
247+ then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), (amountForCreator - amountForPublicAgent), assetId)]
248+ else [ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)]
249+ let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
250+ let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
251+ $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
252+ }
216253 }
217254
218255
255292
256293
257294 func provideBaseData (i,nftId) = {
258- let $t098419881 = idCallerDate(i)
259- let id = $t098419881._1
260- let caller = $t098419881._2
261- let date = $t098419881._3
262- let $t098859954 = checkNFTInfo(nftId)
263- let isValidNFT = $t098859954._1
264- let artId = $t098859954._2
265- let creatorAddr = $t098859954._3
266- let artSignID = $t098859954._4
295+ let $t01080710847 = idCallerDate(i)
296+ let id = $t01080710847._1
297+ let caller = $t01080710847._2
298+ let date = $t01080710847._3
299+ let $t01085010919 = checkNFTInfo(nftId)
300+ let isValidNFT = $t01085010919._1
301+ let artId = $t01085010919._2
302+ let creatorAddr = $t01085010919._3
303+ let artSignID = $t01085010919._4
267304 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
268305 }
269306
299336
300337 @Callable(i)
301338 func sellNFT (price,asset) = {
302- let $t01105911095 = isPayment(i)
303- let payment = $t01105911095._1
304- let amount = $t01105911095._2
339+ let $t01198412020 = isPayment(i)
340+ let payment = $t01198412020._1
341+ let amount = $t01198412020._2
305342 if ((amount != 1))
306343 then throw("No NFT attached")
307344 else {
310347 else false)
311348 then toBase58String(value(payment.assetId))
312349 else throw("Only SIGN Art NFT accepted.")
313- let $t01133311426 = provideBaseData(i, nftId)
314- let id = $t01133311426._1
315- let caller = $t01133311426._2
316- let date = $t01133311426._3
317- let isValidNFT = $t01133311426._4
318- let artId = $t01133311426._5
319- let creatorAddr = $t01133311426._6
320- let artSignID = $t01133311426._7
350+ let $t01225412347 = provideBaseData(i, nftId)
351+ let id = $t01225412347._1
352+ let caller = $t01225412347._2
353+ let date = $t01225412347._3
354+ let isValidNFT = $t01225412347._4
355+ let artId = $t01225412347._5
356+ let creatorAddr = $t01225412347._6
357+ let artSignID = $t01225412347._7
321358 if ((size(artSignID) == 0))
322359 then throw("Artwork not found on SIGN Art")
323360 else if (!(isValidNFT))
334371
335372 @Callable(i)
336373 func updateSalePrice (nftId,price,asset) = {
337- let $t01233012423 = provideBaseData(i, nftId)
338- let id = $t01233012423._1
339- let caller = $t01233012423._2
340- let date = $t01233012423._3
341- let isValidNFT = $t01233012423._4
342- let artId = $t01233012423._5
343- let creatorAddr = $t01233012423._6
344- let artSignID = $t01233012423._7
374+ let $t01322713320 = provideBaseData(i, nftId)
375+ let id = $t01322713320._1
376+ let caller = $t01322713320._2
377+ let date = $t01322713320._3
378+ let isValidNFT = $t01322713320._4
379+ let artId = $t01322713320._5
380+ let creatorAddr = $t01322713320._6
381+ let artSignID = $t01322713320._7
345382 if ((size(artSignID) == 0))
346383 then throw("Artwork not found on SIGN Art, cancel your sale.")
347384 else if (!(isValidNFT))
371408
372409 @Callable(i)
373410 func cancelSale (nftId) = {
374- let $t01360013844 = provideBaseData(i, nftId)
375- let id = $t01360013844._1
376- let caller = $t01360013844._2
377- let date = $t01360013844._3
378- let isValidNFT = $t01360013844._4
379- let artId = $t01360013844._5
380- let creatorAddr = $t01360013844._6
381- let artSignID = $t01360013844._7
411+ let $t01446814709 = provideBaseData(i, nftId)
412+ let id = $t01446814709._1
413+ let caller = $t01446814709._2
414+ let date = $t01446814709._3
415+ let isValidNFT = $t01446814709._4
416+ let artId = $t01446814709._5
417+ let creatorAddr = $t01446814709._6
418+ let artSignID = $t01446814709._7
382419 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
383420 if ((saleOwner != caller))
384421 then throw("You don't own this NFT")
398435
399436 @Callable(i)
400437 func buyNFT (nftId) = {
401- let $t01469814791 = provideBaseData(i, nftId)
402- let id = $t01469814791._1
403- let caller = $t01469814791._2
404- let date = $t01469814791._3
405- let isValidNFT = $t01469814791._4
406- let artId = $t01469814791._5
407- let creatorAddr = $t01469814791._6
408- let artSignID = $t01469814791._7
438+ let $t01554015633 = provideBaseData(i, nftId)
439+ let id = $t01554015633._1
440+ let caller = $t01554015633._2
441+ let date = $t01554015633._3
442+ let isValidNFT = $t01554015633._4
443+ let artId = $t01554015633._5
444+ let creatorAddr = $t01554015633._6
445+ let artSignID = $t01554015633._7
409446 if ((size(artSignID) == 0))
410447 then throw("Artwork not found on SIGN Art, cancel your sale.")
411448 else if (!(isValidNFT))
421458 if ((parseInt(saleInfoArray[1]) == 0))
422459 then throw("Offer only")
423460 else {
424- let $t01530015336 = isPayment(i)
425- let payment = $t01530015336._1
426- let amount = $t01530015336._2
461+ let $t01613016166 = isPayment(i)
462+ let payment = $t01613016166._1
463+ let amount = $t01613016166._2
427464 let paymentAssetStr = if (isDefined(payment.assetId))
428465 then toBase58String(value(payment.assetId))
429466 else ""
432469 else (saleInfoArray[2] != paymentAssetStr))
433470 then throw("Payment infos don't match.")
434471 else {
435- let $t01585015989 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
436- let commissions = $t01585015989._1
437- let creatorFee = $t01585015989._2
438- let ownerFee = $t01585015989._3
439- let collectorNFT = $t01585015989._4
440- ([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(), creatorFee, ownerFee, collectorNFT] ++ commissions)
472+ let $t01667216811 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
473+ let commissions = $t01667216811._1
474+ let creatorFee = $t01667216811._2
475+ let ownerFee = $t01667216811._3
476+ let collectorNFT = $t01667216811._4
477+ (([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)
441478 }
442479 }
443480 }
448485
449486 @Callable(i)
450487 func setOffer (nftId) = {
451- let $t01641716514 = provideBaseData(i, nftId)
452- let id = $t01641716514._1
453- let offerOwner = $t01641716514._2
454- let date = $t01641716514._3
455- let isValidNFT = $t01641716514._4
456- let artId = $t01641716514._5
457- let creatorAddr = $t01641716514._6
458- let artSignID = $t01641716514._7
488+ let $t01722217319 = provideBaseData(i, nftId)
489+ let id = $t01722217319._1
490+ let offerOwner = $t01722217319._2
491+ let date = $t01722217319._3
492+ let isValidNFT = $t01722217319._4
493+ let artId = $t01722217319._5
494+ let creatorAddr = $t01722217319._6
495+ let artSignID = $t01722217319._7
459496 if (!(isValidNFT))
460497 then throw("Not a valid nft")
461498 else {
462- let $t01657816614 = isPayment(i)
463- let payment = $t01657816614._1
464- let amount = $t01657816614._2
499+ let $t01738017416 = isPayment(i)
500+ let payment = $t01738017416._1
501+ let amount = $t01738017416._2
465502 let assetId = if (!(isDefined(payment.assetId)))
466503 then "WAVES"
467504 else toBase58String(value(payment.assetId))
482519
483520 @Callable(i)
484521 func acceptOffer (nftId,offerId,offerOwner) = {
485- let $t01743517528 = provideBaseData(i, nftId)
486- let id = $t01743517528._1
487- let caller = $t01743517528._2
488- let date = $t01743517528._3
489- let isValidNFT = $t01743517528._4
490- let artId = $t01743517528._5
491- let creatorAddr = $t01743517528._6
492- let artSignID = $t01743517528._7
522+ let $t01821818311 = provideBaseData(i, nftId)
523+ let id = $t01821818311._1
524+ let caller = $t01821818311._2
525+ let date = $t01821818311._3
526+ let isValidNFT = $t01821818311._4
527+ let artId = $t01821818311._5
528+ let creatorAddr = $t01821818311._6
529+ let artSignID = $t01821818311._7
493530 if (!(isValidNFT))
494531 then throw("Not a valid nft")
495532 else {
498535 then throw("Only sale owner can accept offer")
499536 else {
500537 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
501- let $t01778917844 = getBidData(bidKey)
502- let bidDataArr = $t01778917844._1
503- let assetId = $t01778917844._2
504- let bidData = $t01778917844._3
538+ let $t01856518620 = getBidData(bidKey)
539+ let bidDataArr = $t01856518620._1
540+ let assetId = $t01856518620._2
541+ let bidData = $t01856518620._3
505542 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
506543 let saleInfo = getStrByK((saleKey + "_OPEN"))
507544 if ((size(saleInfo) == 0))
508545 then throw("Sale Not found!")
509546 else {
510547 let amount = value(parseInt(bidDataArr[1]))
511- let $t01808718225 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
512- let commissions = $t01808718225._1
513- let creatorFee = $t01808718225._2
514- let ownerFee = $t01808718225._3
515- let collectorNFT = $t01808718225._4
548+ let $t01885618994 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
549+ let commissions = $t01885618994._1
550+ let creatorFee = $t01885618994._2
551+ let ownerFee = $t01885618994._3
552+ let collectorNFT = $t01885618994._4
516553 let assetIdStr = if (isDefined(assetId))
517554 then toBase58String(value(assetId))
518555 else "WAVES"
519- ([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(), creatorFee, ownerFee, collectorNFT] ++ commissions)
556+ (([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)
520557 }
521558 }
522559 }
526563
527564 @Callable(i)
528565 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
529- let $t01904519120 = idCallerDate(i)
530- let id = $t01904519120._1
531- let caller = $t01904519120._2
532- let date = $t01904519120._3
566+ let $t01979419868 = idCallerDate(i)
567+ let id = $t01979419868._1
568+ let caller = $t01979419868._2
569+ let date = $t01979419868._3
533570 if (if ((caller != offerOwner))
534571 then (caller != saleOwner)
535572 else false)
536573 then throw("You cannot cancel this offer.")
537574 else {
538575 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
539- let $t01929419349 = getBidData(bidKey)
540- let bidDataArr = $t01929419349._1
541- let assetId = $t01929419349._2
542- let bidData = $t01929419349._3
576+ let $t02004020095 = getBidData(bidKey)
577+ let bidDataArr = $t02004020095._1
578+ let assetId = $t02004020095._2
579+ let bidData = $t02004020095._3
543580 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
544581 }
545582 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VERSION = "1.1.5"
5+
46 func getStrByK (key) = valueOrElse(getString(this, key), "")
57
68
79 let unitTest = false
810
911 let oracleFee = value(addressFromString(getStrByK("conf_oracle_fee")))
12+
13+let signDapp = value(addressFromString(getStrByK("conf_signweb_dapp")))
1014
1115 let feeReceiver = getStrByK("conf_fee_receiver")
1216
1317 let artworksDapp = value(addressFromString(getStrByK("conf_artworks_dapp")))
1418
1519 let userDapp = if (unitTest)
1620 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1721 else value(addressFromString(getStrByK("conf_users_dapp")))
22+
23+let whitelistDapp = value(addressFromString(getStrByK("conf_whitelist_dapp")))
1824
1925 let signAssetId = fromBase58String(getStrByK("conf_accepted_asset_SIGN"))
2026
2127 let usdnAssetId = fromBase58String(getStrByK("conf_accepted_asset_USDN"))
2228
2329 let usdtAssetId = fromBase58String(getStrByK("conf_accepted_asset_USDT"))
2430
2531 let wavesAssetId = base58''
2632
2733 let chris = getStrByK("conf_admin_1")
2834
2935 let signCut = 3
3036
3137 let userSuspended = "SUSPENDED"
3238
3339 let userRemoved = "REMOVED"
3440
3541 let artIllegal = "ILLEGAL"
3642
3743 let artSuspended = "SUSPENDED"
3844
3945 let dappRunningKey = "conf_dapp_is_running"
4046
4147 let maintenanceMSGKey = "conf_maintenance_msg"
4248
4349 let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
4450
4551 let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
4652
4753 let numSalesK = "num_sales"
4854
4955 func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
5056
5157
5258 func getArtworkRoyalties (key) = valueOrElse(getInteger(artworksDapp, key), 1000)
5359
5460
5561 func getArtStrByK (key) = valueOrElse(getString(artworksDapp, key), "")
5662
5763
5864 func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
5965
6066
6167 func keyUserStatus (addr) = ("user_status_" + addr)
6268
6369
6470 func keyArtworkRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
6571
6672
6773 func keySignID (artistAddr,artId) = ((("art_signid_" + artId) + "_") + artistAddr)
6874
6975
7076 func keyFlag (artistAddr,artId) = ((("art_flag_" + artId) + "_") + artistAddr)
7177
7278
7379 func keyNFTData (id) = ("nft_" + id)
7480
7581
7682 func getSaleKey (caller,nftId,artId,creatorAddr) = ((((((("sale2nd_info_" + caller) + "_") + nftId) + "_") + artId) + "_") + creatorAddr)
7783
7884
7985 func getBidKey (offerOwner,nftId,saleOwner,offerId) = ((((((("offer2nd_" + offerOwner) + "_") + nftId) + "_") + saleOwner) + "_") + offerId)
8086
8187
8288 func getIntByKFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
8389
8490
8591 let currentCertificationPrice = getIntByKFromOracle(("certification_fee_" + toBase58String(signAssetId)))
8692
8793 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
8894
8995
90-func keySecondaryShare (artistAddr) = ("artist_agent_secondary_" + artistAddr)
96+func keySecondaryShareAgent (artistAddr) = ("artist_agent_secondary_" + artistAddr)
97+
98+
99+func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
100+
101+
102+func keySecondarySharePublicAgent (artistAddr) = ("artist_public_agent_secondary_" + artistAddr)
91103
92104
93105 func idCallerDate (i) = if (!(dappRunning))
94106 then throw(maintenanceMSG)
95107 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
96108
97109
98110 func isPayment (i) = if ((size(i.payments) == 0))
99111 then throw("No payment attached")
100112 else {
101113 let payment = value(i.payments[0])
102114 let amount = value(payment.amount)
103115 $Tuple2(payment, amount)
104116 }
105117
106118
107119 func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
108120 then (assetDetails.decimals == 0)
109121 else false)
110122 then (assetDetails.reissuable == false)
111123 else false)
112124 then (assetDetails.issuer == artworksDapp)
113125 else false
114126
115127
116128 func isSignArtNFT (id) = {
117129 let assetDetails = value(assetInfo(id))
118130 assetIsValid(assetDetails)
119131 }
120132
121133
122134 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
123135 then (assetId != toBase58String(wavesAssetId))
124136 else false)
125137 then (assetId != "WAVES")
126138 else false)
127139 then (assetId != toBase58String(usdnAssetId))
128140 else false)
129141 then (assetId != toBase58String(usdtAssetId))
130142 else false)
131143 then false
132144 else true
133145
134146
135147 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
136148 then unit
137149 else fromBase58String(assetId)
138150
139151
140152 func getSaleOwnerAndStatus (nftid) = {
141153 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
142154 if ((size(saleOwner) == 0))
143155 then throw("NFT not found")
144156 else {
145157 let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + nftid))
146158 if ((saleStatus != "OPEN"))
147159 then throw("NFT not for sale")
148160 else saleOwner
149161 }
150162 }
151163
152164
153165 func getBidData (key) = {
154166 let bidData = getStrByK((key + "_OPEN"))
155167 if ((bidData == ""))
156168 then throw("Offer not found")
157169 else {
158170 let bidDataArr = split(bidData, "_")
159171 let assetId = getBidAssetId(bidDataArr[2])
160172 $Tuple3(bidDataArr, assetId, bidData)
161173 }
162174 }
163175
164176
165177 func artIsValid (artStatus) = if ((artStatus != artIllegal))
166178 then (artStatus != artSuspended)
167179 else false
168180
169181
170182 func checkArtStatus (addr,id) = {
171183 let artStatus = getArtStrByK(keyFlag(addr, id))
172184 if (artIsValid(artStatus))
173185 then true
174186 else throw(("Original Artwork flagged as " + artStatus))
175187 }
176188
177189
178190 func checkArtistStatus (addr) = {
179191 let artistStatus = getUserStrByK(keyUserStatus(addr))
180192 if (containsElement([userSuspended, userRemoved], artistStatus))
181193 then throw(("Original Artist " + artistStatus))
182194 else true
183195 }
184196
185197
186198 func checkNFTInfo (assetId) = {
187199 let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
188200 let artSignID = getArtStrByK(keySignID(nftData[6], nftData[5]))
189201 if (if (!(checkArtStatus(nftData[6], nftData[5])))
190202 then !(checkArtistStatus(nftData[6]))
191203 else false)
192204 then $Tuple4(false, nftData[5], nftData[6], artSignID)
193205 else $Tuple4(true, nftData[5], nftData[6], artSignID)
194206 }
195207
196208
209+func checkARTExist (artId,creatorAddr) = {
210+ let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
211+ if ((size(artSignID) == 0))
212+ then throw("Artwork not found on SIGN Art")
213+ else if (if (!(checkArtStatus(creatorAddr, artId)))
214+ then !(checkArtistStatus(creatorAddr))
215+ else false)
216+ then false
217+ else true
218+ }
219+
220+
197221 func setTransfers (amount,assetId,nftid,creatorAddr,saleOwner,caller,artId) = {
198222 let creatorCut = getArtworkRoyalties(keyArtworkRoyalties(creatorAddr, artId))
199223 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(creatorAddr)), feeReceiver)
200- let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShare(creatorAddr)), 0)
224+ let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShareAgent(creatorAddr)), 0)
225+ let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(creatorAddr)), feeReceiver)
226+ let publicAgentShare = valueOrElse(getInteger(userDapp, keySecondarySharePublicAgent(creatorAddr)), 0)
201227 let amountForSign = fraction(amount, signCut, 100)
202228 let amountForCreator = fraction(amount, creatorCut, 10000)
203229 let amountForOwner = (amount - (amountForSign + amountForCreator))
204230 let amountForAgent = if (if ((agent != feeReceiver))
205231 then (agentShare > 0)
206232 else false)
207233 then fraction(amount, agentShare, 100)
208234 else 0
209- let commissions = if ((amountForAgent != 0))
210- then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
211- else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
212- let creatorFee = ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)
213- let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
214- let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
215- $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
235+ let amountForPublicAgent = if (if ((publicAgent != feeReceiver))
236+ then (publicAgentShare > 0)
237+ else false)
238+ then fraction(amount, publicAgentShare, 100)
239+ else 0
240+ if (true)
241+ then throw(((("amountForAgent = " + toString(amountForAgent)) + " / amountForPublicAgent = ") + toString(amountForPublicAgent)))
242+ else {
243+ let commissions = if ((amountForAgent != 0))
244+ then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
245+ else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
246+ let creatorFee = if ((amountForPublicAgent != 0))
247+ then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), (amountForCreator - amountForPublicAgent), assetId)]
248+ else [ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)]
249+ let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
250+ let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
251+ $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
252+ }
216253 }
217254
218255
219256 func validateMinSell (assetId,price) = {
220257 let minSellWaves = if (unitTest)
221258 then 10
222259 else getIntByKFromOracle("waves_min_sell")
223260 let minSellUsdn = 1000000
224261 let minSellSign = if (unitTest)
225262 then 1
226263 else (currentCertificationPrice * 2)
227264 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
228265 then (minSellUsdn > price)
229266 else false)
230267 then (price != 0)
231268 else false)
232269 then true
233270 else if (if ((assetId == toBase58String(usdtAssetId)))
234271 then (minSellUsdn > price)
235272 else false)
236273 then (price != 0)
237274 else false)
238275 then true
239276 else if (if ((assetId == toBase58String(signAssetId)))
240277 then (minSellSign > price)
241278 else false)
242279 then (price != 0)
243280 else false)
244281 then true
245282 else if (if (if ((assetId == toBase58String(wavesAssetId)))
246283 then true
247284 else (assetId == "WAVES"))
248285 then (minSellWaves > price)
249286 else false)
250287 then (price != 0)
251288 else false)
252289 then false
253290 else true
254291 }
255292
256293
257294 func provideBaseData (i,nftId) = {
258- let $t098419881 = idCallerDate(i)
259- let id = $t098419881._1
260- let caller = $t098419881._2
261- let date = $t098419881._3
262- let $t098859954 = checkNFTInfo(nftId)
263- let isValidNFT = $t098859954._1
264- let artId = $t098859954._2
265- let creatorAddr = $t098859954._3
266- let artSignID = $t098859954._4
295+ let $t01080710847 = idCallerDate(i)
296+ let id = $t01080710847._1
297+ let caller = $t01080710847._2
298+ let date = $t01080710847._3
299+ let $t01085010919 = checkNFTInfo(nftId)
300+ let isValidNFT = $t01085010919._1
301+ let artId = $t01085010919._2
302+ let creatorAddr = $t01085010919._3
303+ let artSignID = $t01085010919._4
267304 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
268305 }
269306
270307
271308 func updateNumSales () = {
272309 let numSales = getIntByK(numSalesK)
273310 IntegerEntry(numSalesK, (numSales + 1))
274311 }
275312
276313
277314 @Callable(invoke)
278315 func setConf (key,val) = {
279316 let caller = toString(invoke.caller)
280317 if (containsElement([chris, toString(this)], caller))
281318 then if (contains(key, "conf_"))
282319 then [StringEntry(key, val)]
283320 else throw("Entries starting with conf_ only")
284321 else throw("You are not allowed to change this")
285322 }
286323
287324
288325
289326 @Callable(invoke)
290327 func appRunning (isLive,message) = {
291328 let caller = toString(invoke.caller)
292329 let id = toBase58String(invoke.transactionId)
293330 if (containsElement([chris, toString(this)], caller))
294331 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
295332 else throw("You are not allowed to change this")
296333 }
297334
298335
299336
300337 @Callable(i)
301338 func sellNFT (price,asset) = {
302- let $t01105911095 = isPayment(i)
303- let payment = $t01105911095._1
304- let amount = $t01105911095._2
339+ let $t01198412020 = isPayment(i)
340+ let payment = $t01198412020._1
341+ let amount = $t01198412020._2
305342 if ((amount != 1))
306343 then throw("No NFT attached")
307344 else {
308345 let nftId = if (if (isDefined(payment.assetId))
309346 then isSignArtNFT(value(payment.assetId))
310347 else false)
311348 then toBase58String(value(payment.assetId))
312349 else throw("Only SIGN Art NFT accepted.")
313- let $t01133311426 = provideBaseData(i, nftId)
314- let id = $t01133311426._1
315- let caller = $t01133311426._2
316- let date = $t01133311426._3
317- let isValidNFT = $t01133311426._4
318- let artId = $t01133311426._5
319- let creatorAddr = $t01133311426._6
320- let artSignID = $t01133311426._7
350+ let $t01225412347 = provideBaseData(i, nftId)
351+ let id = $t01225412347._1
352+ let caller = $t01225412347._2
353+ let date = $t01225412347._3
354+ let isValidNFT = $t01225412347._4
355+ let artId = $t01225412347._5
356+ let creatorAddr = $t01225412347._6
357+ let artSignID = $t01225412347._7
321358 if ((size(artSignID) == 0))
322359 then throw("Artwork not found on SIGN Art")
323360 else if (!(isValidNFT))
324361 then throw("Not a valid nft")
325362 else if (!(acceptedAssetIds(asset)))
326363 then throw("Only SIGN, USDN, USDT or WAVES accepted")
327364 else if (!(validateMinSell(asset, price)))
328365 then throw("Wrong minimum sell price")
329366 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)]
330367 }
331368 }
332369
333370
334371
335372 @Callable(i)
336373 func updateSalePrice (nftId,price,asset) = {
337- let $t01233012423 = provideBaseData(i, nftId)
338- let id = $t01233012423._1
339- let caller = $t01233012423._2
340- let date = $t01233012423._3
341- let isValidNFT = $t01233012423._4
342- let artId = $t01233012423._5
343- let creatorAddr = $t01233012423._6
344- let artSignID = $t01233012423._7
374+ let $t01322713320 = provideBaseData(i, nftId)
375+ let id = $t01322713320._1
376+ let caller = $t01322713320._2
377+ let date = $t01322713320._3
378+ let isValidNFT = $t01322713320._4
379+ let artId = $t01322713320._5
380+ let creatorAddr = $t01322713320._6
381+ let artSignID = $t01322713320._7
345382 if ((size(artSignID) == 0))
346383 then throw("Artwork not found on SIGN Art, cancel your sale.")
347384 else if (!(isValidNFT))
348385 then throw("Not a valid nft")
349386 else {
350387 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
351388 if ((saleOwner != caller))
352389 then throw("You don't own this NFT")
353390 else {
354391 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
355392 if ((saleStatus != "OPEN"))
356393 then throw("Sale not active")
357394 else if (!(acceptedAssetIds(asset)))
358395 then throw("Only SIGN, USDN, USDT or WAVES accepted")
359396 else if (!(validateMinSell(asset, price)))
360397 then throw("Wrong minimum sell price")
361398 else {
362399 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
363400 let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
364401 [StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
365402 }
366403 }
367404 }
368405 }
369406
370407
371408
372409 @Callable(i)
373410 func cancelSale (nftId) = {
374- let $t01360013844 = provideBaseData(i, nftId)
375- let id = $t01360013844._1
376- let caller = $t01360013844._2
377- let date = $t01360013844._3
378- let isValidNFT = $t01360013844._4
379- let artId = $t01360013844._5
380- let creatorAddr = $t01360013844._6
381- let artSignID = $t01360013844._7
411+ let $t01446814709 = provideBaseData(i, nftId)
412+ let id = $t01446814709._1
413+ let caller = $t01446814709._2
414+ let date = $t01446814709._3
415+ let isValidNFT = $t01446814709._4
416+ let artId = $t01446814709._5
417+ let creatorAddr = $t01446814709._6
418+ let artSignID = $t01446814709._7
382419 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
383420 if ((saleOwner != caller))
384421 then throw("You don't own this NFT")
385422 else {
386423 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
387424 if ((saleStatus != "OPEN"))
388425 then throw("Sale not active")
389426 else {
390427 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
391428 let saleInfo = getStrByK((saleKey + "_OPEN"))
392429 [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))]
393430 }
394431 }
395432 }
396433
397434
398435
399436 @Callable(i)
400437 func buyNFT (nftId) = {
401- let $t01469814791 = provideBaseData(i, nftId)
402- let id = $t01469814791._1
403- let caller = $t01469814791._2
404- let date = $t01469814791._3
405- let isValidNFT = $t01469814791._4
406- let artId = $t01469814791._5
407- let creatorAddr = $t01469814791._6
408- let artSignID = $t01469814791._7
438+ let $t01554015633 = provideBaseData(i, nftId)
439+ let id = $t01554015633._1
440+ let caller = $t01554015633._2
441+ let date = $t01554015633._3
442+ let isValidNFT = $t01554015633._4
443+ let artId = $t01554015633._5
444+ let creatorAddr = $t01554015633._6
445+ let artSignID = $t01554015633._7
409446 if ((size(artSignID) == 0))
410447 then throw("Artwork not found on SIGN Art, cancel your sale.")
411448 else if (!(isValidNFT))
412449 then throw("Not a valid nft")
413450 else {
414451 let saleOwner = getSaleOwnerAndStatus(nftId)
415452 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
416453 let saleInfo = getStrByK((saleKey + "_OPEN"))
417454 if ((size(saleInfo) == 0))
418455 then throw("Sale Not found!")
419456 else {
420457 let saleInfoArray = split(saleInfo, "_")
421458 if ((parseInt(saleInfoArray[1]) == 0))
422459 then throw("Offer only")
423460 else {
424- let $t01530015336 = isPayment(i)
425- let payment = $t01530015336._1
426- let amount = $t01530015336._2
461+ let $t01613016166 = isPayment(i)
462+ let payment = $t01613016166._1
463+ let amount = $t01613016166._2
427464 let paymentAssetStr = if (isDefined(payment.assetId))
428465 then toBase58String(value(payment.assetId))
429466 else ""
430467 if (if ((saleInfoArray[1] != toString(amount)))
431468 then true
432469 else (saleInfoArray[2] != paymentAssetStr))
433470 then throw("Payment infos don't match.")
434471 else {
435- let $t01585015989 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
436- let commissions = $t01585015989._1
437- let creatorFee = $t01585015989._2
438- let ownerFee = $t01585015989._3
439- let collectorNFT = $t01585015989._4
440- ([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(), creatorFee, ownerFee, collectorNFT] ++ commissions)
472+ let $t01667216811 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
473+ let commissions = $t01667216811._1
474+ let creatorFee = $t01667216811._2
475+ let ownerFee = $t01667216811._3
476+ let collectorNFT = $t01667216811._4
477+ (([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)
441478 }
442479 }
443480 }
444481 }
445482 }
446483
447484
448485
449486 @Callable(i)
450487 func setOffer (nftId) = {
451- let $t01641716514 = provideBaseData(i, nftId)
452- let id = $t01641716514._1
453- let offerOwner = $t01641716514._2
454- let date = $t01641716514._3
455- let isValidNFT = $t01641716514._4
456- let artId = $t01641716514._5
457- let creatorAddr = $t01641716514._6
458- let artSignID = $t01641716514._7
488+ let $t01722217319 = provideBaseData(i, nftId)
489+ let id = $t01722217319._1
490+ let offerOwner = $t01722217319._2
491+ let date = $t01722217319._3
492+ let isValidNFT = $t01722217319._4
493+ let artId = $t01722217319._5
494+ let creatorAddr = $t01722217319._6
495+ let artSignID = $t01722217319._7
459496 if (!(isValidNFT))
460497 then throw("Not a valid nft")
461498 else {
462- let $t01657816614 = isPayment(i)
463- let payment = $t01657816614._1
464- let amount = $t01657816614._2
499+ let $t01738017416 = isPayment(i)
500+ let payment = $t01738017416._1
501+ let amount = $t01738017416._2
465502 let assetId = if (!(isDefined(payment.assetId)))
466503 then "WAVES"
467504 else toBase58String(value(payment.assetId))
468505 if (!(acceptedAssetIds(assetId)))
469506 then throw("asset not accepted")
470507 else if ((amount == 0))
471508 then throw("Offer of 0 not allowed")
472509 else if (!(validateMinSell(assetId, amount)))
473510 then throw("Wrong minimum sell price")
474511 else {
475512 let saleOwner = getSaleOwnerAndStatus(nftId)
476513 [StringEntry((getBidKey(offerOwner, nftId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
477514 }
478515 }
479516 }
480517
481518
482519
483520 @Callable(i)
484521 func acceptOffer (nftId,offerId,offerOwner) = {
485- let $t01743517528 = provideBaseData(i, nftId)
486- let id = $t01743517528._1
487- let caller = $t01743517528._2
488- let date = $t01743517528._3
489- let isValidNFT = $t01743517528._4
490- let artId = $t01743517528._5
491- let creatorAddr = $t01743517528._6
492- let artSignID = $t01743517528._7
522+ let $t01821818311 = provideBaseData(i, nftId)
523+ let id = $t01821818311._1
524+ let caller = $t01821818311._2
525+ let date = $t01821818311._3
526+ let isValidNFT = $t01821818311._4
527+ let artId = $t01821818311._5
528+ let creatorAddr = $t01821818311._6
529+ let artSignID = $t01821818311._7
493530 if (!(isValidNFT))
494531 then throw("Not a valid nft")
495532 else {
496533 let saleOwner = getSaleOwnerAndStatus(nftId)
497534 if ((caller != saleOwner))
498535 then throw("Only sale owner can accept offer")
499536 else {
500537 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
501- let $t01778917844 = getBidData(bidKey)
502- let bidDataArr = $t01778917844._1
503- let assetId = $t01778917844._2
504- let bidData = $t01778917844._3
538+ let $t01856518620 = getBidData(bidKey)
539+ let bidDataArr = $t01856518620._1
540+ let assetId = $t01856518620._2
541+ let bidData = $t01856518620._3
505542 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
506543 let saleInfo = getStrByK((saleKey + "_OPEN"))
507544 if ((size(saleInfo) == 0))
508545 then throw("Sale Not found!")
509546 else {
510547 let amount = value(parseInt(bidDataArr[1]))
511- let $t01808718225 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
512- let commissions = $t01808718225._1
513- let creatorFee = $t01808718225._2
514- let ownerFee = $t01808718225._3
515- let collectorNFT = $t01808718225._4
548+ let $t01885618994 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
549+ let commissions = $t01885618994._1
550+ let creatorFee = $t01885618994._2
551+ let ownerFee = $t01885618994._3
552+ let collectorNFT = $t01885618994._4
516553 let assetIdStr = if (isDefined(assetId))
517554 then toBase58String(value(assetId))
518555 else "WAVES"
519- ([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(), creatorFee, ownerFee, collectorNFT] ++ commissions)
556+ (([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)
520557 }
521558 }
522559 }
523560 }
524561
525562
526563
527564 @Callable(i)
528565 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
529- let $t01904519120 = idCallerDate(i)
530- let id = $t01904519120._1
531- let caller = $t01904519120._2
532- let date = $t01904519120._3
566+ let $t01979419868 = idCallerDate(i)
567+ let id = $t01979419868._1
568+ let caller = $t01979419868._2
569+ let date = $t01979419868._3
533570 if (if ((caller != offerOwner))
534571 then (caller != saleOwner)
535572 else false)
536573 then throw("You cannot cancel this offer.")
537574 else {
538575 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
539- let $t01929419349 = getBidData(bidKey)
540- let bidDataArr = $t01929419349._1
541- let assetId = $t01929419349._2
542- let bidData = $t01929419349._3
576+ let $t02004020095 = getBidData(bidKey)
577+ let bidDataArr = $t02004020095._1
578+ let assetId = $t02004020095._2
579+ let bidData = $t02004020095._3
543580 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
544581 }
545582 }
546583
547584

github/deemru/w8io/3ef1775 
139.36 ms