tx · GDWBcjbXexDAiPSG8eWXFLhTtTULd8B229fgZyLBgbxe

3N5BTH4bjnXn7AAKoj4sswxytsPGmdXUuTx:  -0.02400000 Waves

2023.03.28 08:42 [2509395] smart account 3N5BTH4bjnXn7AAKoj4sswxytsPGmdXUuTx > SELF 0.00000000 Waves

{ "type": 13, "id": "GDWBcjbXexDAiPSG8eWXFLhTtTULd8B229fgZyLBgbxe", "fee": 2400000, "feeAssetId": null, "timestamp": 1679982267561, "version": 2, "chainId": 84, "sender": "3N5BTH4bjnXn7AAKoj4sswxytsPGmdXUuTx", "senderPublicKey": "DyeDJ3fgwVVux2WRkxpLU9BbVjTM96AyV58b7bRFzCBx", "proofs": [ "33aE9W3HSPBkjZDKPnbAcDpA5975wgT4CMQjSVcVJcBPUzakxnhvNEgEreW3NFo2ByZEfnv1Y2UDcZEUzzzwfugo" ], "script": "base64:BgJpCAISAwoBCBIMCgoICAgICAgBCAgIEgQKAggIEgQKAggIEgMKAQgSBwoFCAgIAQgSBwoFCAgICAISBgoECAgICBIECgIICBIECgIICBIDCgEIEgQKAggIEgQKAggIEgQKAhgBEgQKAhgBDAAJc2VwYXJhdG9yAgFfAARrQnV5AgNidXkABmtQcmljZQIFcHJpY2UABWtTZWxsAgRzZWxsABJtYXhBdWN0aW9uRHVyYXRpb24AHgAFdGVhbXMBIIVjlaPziI6w3gwXjghOv5o/krsm2zrodo4W3BQiKkh+AAVXQVZFUwEAAARrQmlkAgNiaWQABnBhdXNlZAYADHN0YXR1c0Zvck5GVAkAlgoEAgRPUEVOAgZDTE9TRUQCCFJFV0FSREVEAghDQU5DRUxFRAALZEFwcEFkZHJlc3MBGgFUSrhPbN7C2pPt9I7pSjb41U9/ldVVW12gAQVpc05mdAEHYXNzZXRJZAQHJG1hdGNoMAkA7AcBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAV0b2tlbgUHJG1hdGNoMAMDCQAAAggFBXRva2VuCGRlY2ltYWxzAAAJAAACCAUFdG9rZW4IcXVhbnRpdHkAAQcJAAACCAUFdG9rZW4KcmVpc3N1YWJsZQcHBw8BaQEJc2V0UGF1c2VkAQVwYXVzZQQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzAwkAAAIFBXBhdXNlAgR0cnVlCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXBhdXNlCQCsAgICBHRydWUFBXBhdXNlBQNuaWwDCQAAAgUGcGF1c2VkBwkAzAgCCQELU3RyaW5nRW50cnkCBQVwYXVzZQkArAICAgVmYWxzZQUFcGF1c2UFA25pbAUDbmlsAWkBCWNyZWF0ZU5mdAoFcGF1c2UIbmZ0X25hbWUJbmZ0X293bmVyD25mdF9kQXBwQWRkcmVzcwhuZnRfdHlwZQhuZnRfdGFncxFuZnRfc2VsbGluZ19wcmljZQ9uZnRfZGVzY3JpcHRpb24KbmZ0X29uU2VsbAhuZnRfZGF0YQQIbmV3VG9rZW4JAMIIBQUIbmZ0X25hbWUFD25mdF9kZXNjcmlwdGlvbgABAAAHBAdpc3N1ZUlkCQC4CAEFCG5ld1Rva2VuBAR0eElkCAUBaQ10cmFuc2FjdGlvbklkAwkAAAIFBXBhdXNlAgR0cnVlCQACAQIgZnVuY3Rpb24gaXMgcGF1c2VkIGZvciBzb21ldGltZXMJAMwIAgUIbmV3VG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2lzc3VlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAgVPd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfdHlwZQUIbmZ0X3R5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfdGFncwUIbmZ0X3RhZ3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAg9uZnRfZEFwcEFkZHJlc3MFD25mdF9kQXBwQWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAhFuZnRfc2VsbGluZ19wcmljZQURbmZ0X3NlbGxpbmdfcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAgpuZnRfb25TZWxsBQpuZnRfb25TZWxsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIIbmZ0X2RhdGEFCG5mdF9kYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFBHR4SWQFCXNlcGFyYXRvcgIJaXNzdWVfbmZ0CQDYBAEFB2lzc3VlSWQFA25pbAFpAQdzZWxsTkZUAgVwcmljZRBwYXltZW50X2N1cnJlbmN5BAR0eElkCAUBaQ10cmFuc2FjdGlvbklkBAZzZWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMECyR0MDIzNTYyNDQxCQCUCgIJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEBnRva2VuMAgFCyR0MDIzNTYyNDQxAl8xBAdhbW91bnQwCAULJHQwMjM1NjI0NDECXzIDCQEBIQEJAQVpc05mdAEFBnRva2VuMAkAAgECEFRva2VuIGlzIG5vdCBORlQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBmtQcmljZQUJc2VwYXJhdG9yCQDYBAEJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUFcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyBQlzZXBhcmF0b3IFBWtTZWxsCQCsAgIJAKwCAgkArAICCQDYBAEFBnRva2VuMAUJc2VwYXJhdG9yCQCkAwEFB2Ftb3VudDAFEHBheW1lbnRfY3VycmVuY3kFA25pbAFpAQZidXlORlQCBW5mdElEEWN1cnJlbnRfbmZ0X293bmVyBAdhc3NldElkCQDZBAEFBW5mdElEBAZhbW91bnQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBBjaGVja093bmVySXNTYW1lBAckbWF0Y2gwCQCdCAIFBHRoaXMJAKwCAgkArAICAgRuZnRfBRFjdXJyZW50X25mdF9vd25lcgIGX293bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQcEBXByaWNlCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgkArAICCQCsAgIFBmtQcmljZQUJc2VwYXJhdG9yBQVuZnRJRAIBXwURY3VycmVudF9uZnRfb3duZXIEDXNlbGxlcl9hbW91bnQJAGgCCQBpAgUGYW1vdW50AOgHAM8HBAxwbGF0Zm9ybV9mZWUJAGgCCQBpAgUGYW1vdW50AOgHABkDCQAAAgURY3VycmVudF9uZnRfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQACAQIpY3VycmVudCBPd25lciBvZiBORlQgbm90IGFibGUgdG8gcHVyY2hhc2UDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQURY3VycmVudF9uZnRfb3duZXIFDXNlbGxlcl9hbW91bnQFBXRlYW1zCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQVuZnRJRAIMcGxhdGZvcm1fZmVlCQCkAwEFDHBsYXRmb3JtX2ZlZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXIFCXNlcGFyYXRvcgUEa0J1eQkArAICCQCsAgIFBW5mdElEBQlzZXBhcmF0b3IJAKQDAQUGYW1vdW50CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBRFjdXJyZW50X25mdF9vd25lcgIGX293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBRFjdXJyZW50X25mdF9vd25lcgIGX293bmVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgIGX293bmVyCQClCAEIBQFpBmNhbGxlcgUDbmlsAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQURY3VycmVudF9uZnRfb3duZXIFDXNlbGxlcl9hbW91bnQFBHVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FBW5mdElEAgxwbGF0Zm9ybV9mZWUJAKQDAQUMcGxhdGZvcm1fZmVlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQRrQnV5CQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgkApAMBBQZhbW91bnQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAFpAQpjYW5jZWxTZWxsAQVuZnRJZAQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAZzZWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBHR4SWQFBW5mdElkAgtfbmZ0X3N0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQZzZWxsZXIAAQkA2QQBBQVuZnRJZAUDbmlsAWkBCmFkZEF1Y3Rpb24FBXN0YXJ0A2VuZApzdGFydFByaWNlCGR1cmF0aW9uEHBheW1lbnRfY3VycmVuY3kEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQFbmZ0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQFcHJpY2UJAQV2YWx1ZQEFCnN0YXJ0UHJpY2UECWVuZEhlaWdodAkAZAIIBQlsYXN0QmxvY2sGaGVpZ2h0BQhkdXJhdGlvbgQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBBFjaGVja05mdEF1Y3Rpb25lZAQHJG1hdGNoMAkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICCQDYBAEFBW5mdElkBQlzZXBhcmF0b3ICC25mdF9zdGF0dXNfCQDYBAEFBmNhbGxlcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAGBwMJAAACBRFjaGVja05mdEF1Y3Rpb25lZAYJAAIBAhdBbHJlYWR5IGluIGF1Y3Rpb24gbGlzdAMJAGYCBQhkdXJhdGlvbgUSbWF4QXVjdGlvbkR1cmF0aW9uCQACAQkArAICAjdEdXJhdGlvbiBpcyB0b28gbG9uZy4gTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzAgCQCkAwEFEm1heEF1Y3Rpb25EdXJhdGlvbgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQJAAIBAhBORlQgbm90IGF0dGFjaGVkAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUFdGVhbXMJAAIBAhBORlQgbm90IGF0dGFjaGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQR0eElkAhZuZnRfc3RhcnRfYXVjdGlvbl9kYXRlCQDYBAEFBmNhbGxlcgUFc3RhcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBHR4SWQCFG5mdF9lbmRfYXVjdGlvbl9kYXRlCQDYBAEFBmNhbGxlcgUDZW5kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIQX25mdF9zdGFydF9wcmljZQUKc3RhcnRQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCCl9uZnRfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIPX25mdF9vbl9hdWN0aW9uCQDYBAEFBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIQX3ByZXZpb3VzX2JpZGRlcgIEbm9uZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCDF9oaWdoZXN0X2JpZAIBMAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCDl93aW5uZXJfb2ZfbmZ0AgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAINX2JpZGRlcl9jb3VudAIBMAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCC19uZnRfc3RhdHVzAgRPUEVOBQNuaWwBaQEIcGxhY2VCaWQFCWF1Y3Rpb25JZAVuZnRJZAluZnRfb3duZXIJYmlkX3ByaWNlEGN1cnJlbnRfY3VycmVuY3kEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAdhc3NldElkCQDZBAEFBW5mdElkBAl0b2tlblR5cGUICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQPY3VycmVudEJpZFByaWNlCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQVZ2V0TGFzdFdpbm5lckJpZFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIMX2hpZ2hlc3RfYmlkBBhnZXRQcmV2aW91c0JpZGRlckFkZHJlc3MJAJ0IAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCEF9wcmV2aW91c19iaWRkZXIED2N1cnJlbnRCaWRDb3VudAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDV9iaWRkZXJfY291bnQEFGdldExhc3RXaW5uZXJBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIOX3dpbm5lcl9vZl9uZnQEEWNoZWNrTmZ0QXVjdGlvbmVkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAILX25mdF9zdGF0dXMDCQECIT0CBRFjaGVja05mdEF1Y3Rpb25lZAIET1BFTgkAAgECFE5vdCBvcGVuIGZvciBhdWN0aW9uAwkAZwIJAQ1wYXJzZUludFZhbHVlAQUVZ2V0TGFzdFdpbm5lckJpZFByaWNlBQ9jdXJyZW50QmlkUHJpY2UJAAIBAiVCaWQgaXMgbGVzcyB0aGVuIHN0YXJ0aW5nL2hpZ2hlc3QgQmlkAwkAAAIFFWdldExhc3RXaW5uZXJCaWRQcmljZQIBMAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIMX2hpZ2hlc3RfYmlkCQCkAwEFD2N1cnJlbnRCaWRQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIOX3dpbm5lcl9vZl9uZnQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAINX2JpZGRlcl9jb3VudAkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBBQ9jdXJyZW50QmlkQ291bnQAAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIHX25mdF9pZAkA2AQBBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgpfbmZ0X293bmVyBQluZnRfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQJAKQDAQUPY3VycmVudEJpZFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIHX3dpbm5lcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAINX2JpZGRlcl9jb3VudAkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBBQ9jdXJyZW50QmlkQ291bnQAAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCB19uZnRfaWQJANgEAQUHYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCCl9uZnRfb3duZXIFCW5mdF9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCD19iaWRfZm9yX25mdF9ieQkA2AQBBQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhBfYmlkX3ByaWNlX3BsYWNlBQliaWRfcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAiZfcHJldmlvdXNfYmlkX2Ftb3VudF9yZWZ1bmRfdG9fYWRkcmVzcwUUZ2V0TGFzdFdpbm5lckFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhtfcHJldm9pdXNfYmlkX2Ftb3VudF9yZWZ1bmQFFWdldExhc3RXaW5uZXJCaWRQcmljZQUDbmlsAwkBAiE9AgUVZ2V0TGFzdFdpbm5lckJpZFByaWNlAgEwCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkBDXBhcnNlSW50VmFsdWUBBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UFCXRva2VuVHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCJl9wcmV2aW91c19iaWRfYW1vdW50X3JlZnVuZF90b19hZGRyZXNzBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCG19wcmV2b2l1c19iaWRfYW1vdW50X3JlZnVuZAUVZ2V0TGFzdFdpbm5lckJpZFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAg1fYmlkZGVyX2NvdW50CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD2N1cnJlbnRCaWRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQJAKQDAQUPY3VycmVudEJpZFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgdfbmZ0X2lkCQDYBAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCCl9uZnRfb3duZXIFCW5mdF9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAkApAMBBQ9jdXJyZW50QmlkUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgdfd2lubmVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAg1fYmlkZGVyX2NvdW50CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD2N1cnJlbnRCaWRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIHX25mdF9pZAkA2AQBBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIKX25mdF9vd25lcgUJbmZ0X293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIPX2JpZF9mb3JfbmZ0X2J5CQDYBAEFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCEF9iaWRfcHJpY2VfcGxhY2UFCWJpZF9wcmljZQUDbmlsBQNuaWwBaQEOYWNjZXB0QmlkT2ZmZXIECWF1Y3Rpb25JZAVuZnRJZBRiaWRfYW1vdW50X2Zyb21fdXNlchBjdXJyZW50X2N1cnJlbmN5BAthc2ltaVN0cmluZwIsOXloSkRmV2pQcHY2dEZqV1JEMUFKeUJRd2F1c0pmMlpkeHpMbjg2VWtubnEEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQKYW1vdW50VW5pdAkA2QQBBRBjdXJyZW50X2N1cnJlbmN5BAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMEB2Fzc2V0SWQJANkEAQUFbmZ0SWQEEmdldE5mdFdpbm5pbmdQcmljZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAQTZ2V0TmZ0V2lubmluZ2Ftb3VudAkAaAIJAGkCCQENcGFyc2VJbnRWYWx1ZQEFEmdldE5mdFdpbm5pbmdQcmljZQDoBwDPBwQMcGxhdGZvcm1fZmVlCQBoAgkAaQIJAQ1wYXJzZUludFZhbHVlAQUSZ2V0TmZ0V2lubmluZ1ByaWNlAOgHABkEEGdldEF1Y3Rpb25XaW5uZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAMJAAACBRBjdXJyZW50X2N1cnJlbmN5BQthc2ltaVN0cmluZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFBmNhbGxlcgUTZ2V0TmZ0V2lubmluZ2Ftb3VudAUKYW1vdW50VW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUQZ2V0QXVjdGlvbldpbm5lcgABBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQICDHBsYXRmb3JtX2ZlZQkApAMBBQxwbGF0Zm9ybV9mZWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhVfYW1vdW50X3BhaWRfdG9fb3duZXIFEmdldE5mdFdpbm5pbmdQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCEF9uZnRfdHJhbnNmZXJfdG8FEGdldEF1Y3Rpb25XaW5uZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAgtfbmZ0X3N0YXR1cwIIUkVXQVJERUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCFV9hbW91bnRfcGFpZF90b19vd25lcgUSZ2V0TmZ0V2lubmluZ1ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAhBfbmZ0X3RyYW5zZmVyX3RvBRBnZXRBdWN0aW9uV2lubmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIIUkVXQVJERUQFA25pbAMJAAACBRBjdXJyZW50X2N1cnJlbmN5AgVXQVZFUwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFBmNhbGxlcgUTZ2V0TmZ0V2lubmluZ2Ftb3VudAUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUQZ2V0QXVjdGlvbldpbm5lcgABBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQICDHBsYXRmb3JtX2ZlZQkApAMBBQxwbGF0Zm9ybV9mZWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhVfYW1vdW50X3BhaWRfdG9fb3duZXIFEmdldE5mdFdpbm5pbmdQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCEF9uZnRfdHJhbnNmZXJfdG8FEGdldEF1Y3Rpb25XaW5uZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAgtfbmZ0X3N0YXR1cwIIUkVXQVJERUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCFV9hbW91bnRfcGFpZF90b19vd25lcgUSZ2V0TmZ0V2lubmluZ1ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAhBfbmZ0X3RyYW5zZmVyX3RvBRBnZXRBdWN0aW9uV2lubmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIIUkVXQVJERUQFA25pbAUDbmlsAWkBDWNhbmNlbEF1Y3Rpb24CCWF1Y3Rpb25JZBBjdXJyZW50X2N1cnJlbmN5BAR0eElkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEBmNhbGxlcggIBQFpBmNhbGxlcgVieXRlcwQNYXVjdGlvblN0YXR1cwkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCC19uZnRfc3RhdHVzBA1iaWRkaW5nV2lubmVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIOX3dpbm5lcl9vZl9uZnQECG5mdE93bmVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIKX25mdF9vd25lcgQFbmZ0SWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg9fbmZ0X29uX2F1Y3Rpb24EDGJpZGRpbmdQcmljZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAMJAAACBQ1iaWRkaW5nV2lubmVyAgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQR0eElkBQlhdWN0aW9uSWQCC19uZnRfc3RhdHVzAghDQU5DRUxFRAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUIbmZ0T3duZXIAAQkA2QQBBQVuZnRJZAUDbmlsAwkBAiE9AgUNYmlkZGluZ1dpbm5lcgIBMAkAAgECQ3Nvb3J5IHlvdSBjYW4ndCBjYW5jZWwgaXQgYmVjYXVzZSBhbHJlYWR5IGF1Y3Rpb24gcGxhY2VkIGJ5IHNvbWVvbmUFA25pbAFpARJtYW51YWxGdW5kVHJhbnNmZXICDXJlY2VwaWVudEFkZHIHbWVzc2FnZQQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAdyZWNpdmVyCQDZBAEFDXJlY2VwaWVudEFkZHIEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEEXJlY2VwaWVudF9wYXltZW50CQBoAgkAaQIFBmFtb3VudADoBwDPBwQMcGxhdGZvcm1fZmVlCQBoAgkAaQIFBmFtb3VudADoBwAZAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQDYBAEFBmNhbGxlcgIJX3RyYW5zZmVyBQZhbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgIMcGxhdGZvcm1fZmVlCQCkAwEFDHBsYXRmb3JtX2ZlZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJANgEAQUGY2FsbGVyAgxfdHJhbnNmZXJfdG8FDXJlY2VwaWVudEFkZHIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQdyZWNpdmVyBRFyZWNlcGllbnRfcGF5bWVudAUEdW5pdAUDbmlsAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUFdGVhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkA2AQBBQZjYWxsZXICCV90cmFuc2ZlcgUGYW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQICDHBsYXRmb3JtX2ZlZQkApAMBBQxwbGF0Zm9ybV9mZWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQDYBAEFBmNhbGxlcgIMX3RyYW5zZmVyX3RvBQ1yZWNlcGllbnRBZGRyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUHcmVjaXZlcgURcmVjZXBpZW50X3BheW1lbnQFBXRlYW1zBQNuaWwFA25pbAFpAQliYWNrVmFsdWUBCWF1Y3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAVuZnRJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCD19uZnRfb25fYXVjdGlvbgQIbmZ0T3duZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgpfbmZ0X293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIRQXVjdGlvbl90aW1lIG92ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCG5mdE93bmVyAAEJANkEAQUFbmZ0SWQFA25pbAFpAQt3aXRoZHJhd0JpZAIHYmlkVHhJZBBjdXJyZW50X2N1cnJlbmN5BAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMEC2FzaW1pU3RyaW5nAiw5eWhKRGZXalBwdjZ0RmpXUkQxQUp5QlF3YXVzSmYyWmR4ekxuODZVa25ucQQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAphbW91bnRVbml0CQDZBAEFEGN1cnJlbnRfY3VycmVuY3kECGJpZFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFB2JpZFR4SWQCDF9oaWdoZXN0X2JpZAQIYXNCaWRkZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUHYmlkVHhJZAIHX3dpbm5lcgQJYmlkRm9yTkZUCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFB2JpZFR4SWQCB19uZnRfaWQDCQAAAgUQY3VycmVudF9jdXJyZW5jeQULYXNpbWlTdHJpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAghfbmZ0X2JpZAIIV0lUSERSQVcJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAgdfbmZ0X2lkBQliaWRGb3JORlQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAhxfYmlkZGluZ19wcmljZV9yZWZ1bmRfYW1vdW50BQhiaWRQcmljZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAQ1wYXJzZUludFZhbHVlAQUIYmlkUHJpY2UFCmFtb3VudFVuaXQFA25pbAMJAAACBRBjdXJyZW50X2N1cnJlbmN5AgVXQVZFUwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCCF9uZnRfYmlkAghXSVRIRFJBVwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCB19uZnRfaWQFCWJpZEZvck5GVAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCHF9iaWRkaW5nX3ByaWNlX3JlZnVuZF9hbW91bnQFCGJpZFByaWNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBDXBhcnNlSW50VmFsdWUBBQhiaWRQcmljZQUEdW5pdAUDbmlsBQNuaWwBaQEQYXV0b21hdGVGdW5jdGlvbgIJYXVjdGlvbklkEGN1cnJlbnRfY3VycmVuY3kEBmNhbGxlcggIBQFpBmNhbGxlcgVieXRlcwQFbmZ0SWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg9fbmZ0X29uX2F1Y3Rpb24ECG5mdE93bmVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIKX25mdF9vd25lcgQLYXNpbWlTdHJpbmcCLDl5aEpEZldqUHB2NnRGaldSRDFBSnlCUXdhdXNKZjJaZHh6TG44NlVrbm5xBAphbW91bnRVbml0CQDZBAEFEGN1cnJlbnRfY3VycmVuY3kEFWdldExhc3RXaW5uZXJCaWRQcmljZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAQUZ2V0TGFzdFdpbm5lckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAQNYmlkZGluZ1dpbm5lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDl93aW5uZXJfb2ZfbmZ0AwkAAAIFDWJpZGRpbmdXaW5uZXICATAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCG5mdE93bmVyAAEJANkEAQUFbmZ0SWQFA25pbAMDCQECIT0CBQ1iaWRkaW5nV2lubmVyAgEwCQAAAgUQY3VycmVudF9jdXJyZW5jeQULYXNpbWlTdHJpbmcHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQhuZnRPd25lcgABCQDZBAEFBW5mdElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkBDXBhcnNlSW50VmFsdWUBBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UFCmFtb3VudFVuaXQFA25pbAMDCQECIT0CBQ1iaWRkaW5nV2lubmVyAgEwCQAAAgUQY3VycmVudF9jdXJyZW5jeQIFV0FWRVMHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQhuZnRPd25lcgABCQDZBAEFBW5mdElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkBDXBhcnNlSW50VmFsdWUBBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UFBHVuaXQFA25pbAUDbmlsAWkBFGJ1eUFsbFByb2R1Y3RzX2FzaW1pAgduZnRJbmZvC3RvdGFsYW1vdW50BAVidXllcggFAWkGY2FsbGVyBAxidXllckJhbGFuY2UJAPAHAgUFYnV5ZXIFBXRlYW1zBAZhbW91bnQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BARuZlQxCQC1CQIJAJEDAgUHbmZ0SW5mbwAAAgFfBARuZlQyCQC1CQIJAJEDAgUHbmZ0SW5mbwABAgFfBARuZlQzCQC1CQIJAJEDAgUHbmZ0SW5mbwACAgFfBARuZlQ0CQC1CQIJAJEDAgUHbmZ0SW5mbwADAgFfBARuZlQ1CQC1CQIJAJEDAgUHbmZ0SW5mbwAEAgFfAwkAZgIFC3RvdGFsYW1vdW50BQZhbW91bnQJAAIBAhx5b3VyIHBheWluZyBhbW91bnQgaXMgd3JvbmcgAwkAZgIFBmFtb3VudAUMYnV5ZXJCYWxhbmNlCQACAQI6QnV5ZXIgZG9lcyBub3QgaGF2ZSBlbm91Z2ggZnVuZHMgdG8gY29tcGxldGUgdGhlIHB1cmNoYXNlLgMJAAACCQCQAwEFB25mdEluZm8AAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9maXJzdF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDEAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMQABAgVwcmljZQkAkQMCBQRuZlQxAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDEAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQxAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQxAAIFBXRlYW1zBQNuaWwDCQAAAgkAkAMBBQduZnRJbmZvAAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPZmlyc3RfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQxAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDEAAQIFcHJpY2UJAJEDAgUEbmZUMQACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEHNlY29uZF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDIAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMgABAgVwcmljZQkAkQMCBQRuZlQyAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDEAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDEAAgUFdGVhbXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMgABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMgACBQV0ZWFtcwUDbmlsAwkAAAIJAJADAQUHbmZ0SW5mbwADCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBzZWNvbmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQyAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDIAAQIFcHJpY2UJAJEDAgUEbmZUMgACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD3RoaXJkX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMwAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQzAAECBXByaWNlCQCRAwIFBG5mVDMAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQxAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQxAAIFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDIAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDIAAgUFdGVhbXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMwABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMwACBQV0ZWFtcwUDbmlsAwkAAAIJAJADAQUHbmZ0SW5mbwAECQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBzZWNvbmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQyAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDIAAQIFcHJpY2UJAJEDAgUEbmZUMgACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD3RoaXJkX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMwAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQzAAECBXByaWNlCQCRAwIFBG5mVDMAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBmb3VydGhfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQ0AAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDQAAQIFcHJpY2UJAJEDAgUEbmZUNAACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQxAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQ0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMQACBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQyAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQyAAIFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDMAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDMAAgUFdGVhbXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUNAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUNAACBQV0ZWFtcwUDbmlsAwkAAAIJAJADAQUHbmZ0SW5mbwAFCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBzZWNvbmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQyAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDIAAQIFcHJpY2UJAJEDAgUEbmZUMgACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD3RoaXJkX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMwAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQzAAECBXByaWNlCQCRAwIFBG5mVDMAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBmb3VydGhfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQ0AAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDQAAQIFcHJpY2UJAJEDAgUEbmZUNAACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpZnRoX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUNQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQ1AAECBXByaWNlCQCRAwIFBG5mVDUAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUNAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQ1AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMQACBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQyAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQyAAIFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDMAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDMAAgUFdGVhbXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUNAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUNAACBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQ1AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQ1AAIFBXRlYW1zBQNuaWwDCQBmAgkAkAMBBQduZnRJbmZvAAUJAAIBAi1zb3JyeSEgbWF4aW11bSBsaW1pdCBvZiB5b3VyICBjYXJ0IGlzIDUgaXRlbXMFA25pbAFpARRidXlBbGxQcm9kdWN0c193YXZlcwIHbmZ0SW5mbwt0b3RhbGFtb3VudAQFYnV5ZXIIBQFpBmNhbGxlcgQMYnV5ZXJCYWxhbmNlCQDwBwIFBWJ1eWVyBQVXQVZFUwQGYW1vdW50CQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQEbmZUMQkAtQkCCQCRAwIFB25mdEluZm8AAAIBXwQEbmZUMgkAtQkCCQCRAwIFB25mdEluZm8AAQIBXwQEbmZUMwkAtQkCCQCRAwIFB25mdEluZm8AAgIBXwQEbmZUNAkAtQkCCQCRAwIFB25mdEluZm8AAwIBXwQEbmZUNQkAtQkCCQCRAwIFB25mdEluZm8ABAIBXwMJAGYCBQt0b3RhbGFtb3VudAUGYW1vdW50CQACAQIceW91ciBwYXlpbmcgYW1vdW50IGlzIHdyb25nIAMJAGYCBQZhbW91bnQFDGJ1eWVyQmFsYW5jZQkAAgECOkJ1eWVyIGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvIGNvbXBsZXRlIHRoZSBwdXJjaGFzZS4DCQAAAgkAkAMBBQduZnRJbmZvAAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPZmlyc3RfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQxAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDEAAQIFcHJpY2UJAJEDAgUEbmZUMQACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQxAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMQACBQR1bml0BQNuaWwDCQAAAgkAkAMBBQduZnRJbmZvAAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPZmlyc3RfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQxAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDEAAQIFcHJpY2UJAJEDAgUEbmZUMQACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEHNlY29uZF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDIAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMgABAgVwcmljZQkAkQMCBQRuZlQyAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDEAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDEAAgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQyAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQyAAIFBHVuaXQFA25pbAMJAAACCQCQAwEFB25mdEluZm8AAwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9maXJzdF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDEAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMQABAgVwcmljZQkAkQMCBQRuZlQxAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQc2Vjb25kX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMgAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQyAAECBXByaWNlCQCRAwIFBG5mVDIAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg90aGlyZF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDMAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMwABAgVwcmljZQkAkQMCBQRuZlQzAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDEAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMQACBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDIAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDIAAgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQzAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQzAAIFBHVuaXQFA25pbAMJAAACCQCQAwEFB25mdEluZm8ABAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9maXJzdF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDEAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMQABAgVwcmljZQkAkQMCBQRuZlQxAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQc2Vjb25kX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMgAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQyAAECBXByaWNlCQCRAwIFBG5mVDIAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg90aGlyZF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDMAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMwABAgVwcmljZQkAkQMCBQRuZlQzAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQZm91cnRoX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUNAAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQ0AAECBXByaWNlCQCRAwIFBG5mVDQAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUNAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDEAAgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQyAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQyAAIFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMwABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMwACBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDQAAgUEdW5pdAUDbmlsAwkAAAIJAJADAQUHbmZ0SW5mbwAFCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBzZWNvbmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQyAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDIAAQIFcHJpY2UJAJEDAgUEbmZUMgACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD3RoaXJkX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMwAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQzAAECBXByaWNlCQCRAwIFBG5mVDMAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBmb3VydGhfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQ0AAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDQAAQIFcHJpY2UJAJEDAgUEbmZUNAACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpZnRoX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUNQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQ1AAECBXByaWNlCQCRAwIFBG5mVDUAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUNAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQ1AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMQACBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDIAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDIAAgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQzAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQzAAIFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUNAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUNAACBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDUAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDUAAgUEdW5pdAUDbmlsAwkAZgIJAJADAQUHbmZ0SW5mbwAFCQACAQItc29ycnkhIG1heGltdW0gbGltaXQgb2YgeW91ciAgY2FydCBpcyA1IGl0ZW1zBQNuaWwAVuRBIw==", "height": 2509395, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 62Tg79ihRh7qyTPbXNMaMcwXmkzAYCSzgywzf2cusKdj Next: 62s5E6YKQvFhydWdS4UFaKmKfpHWmuAy6b3ektxkj9c8 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = base58'9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq'
4+let a = "_"
55
6-@Callable(b)
7-func buyAllProducts (c,d) = {
8- let e = b.caller
9- let f = assetBalance(e, a)
10- let g = value(b.payments[0].amount)
11- let h = split(c[0], "_")
12- let i = split(c[1], "_")
13- let j = split(c[2], "_")
14- let k = split(c[3], "_")
15- let l = split(c[4], "_")
16- if ((d > g))
6+let b = "buy"
7+
8+let c = "price"
9+
10+let d = "sell"
11+
12+let e = 30
13+
14+let f = base58'9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq'
15+
16+let g = base58''
17+
18+let h = "bid"
19+
20+let i = true
21+
22+let j = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED")
23+
24+let k = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq'
25+
26+func l (m) = {
27+ let n = assetInfo(m)
28+ if ($isInstanceOf(n, "Asset"))
29+ then {
30+ let o = n
31+ if (if ((o.decimals == 0))
32+ then (o.quantity == 1)
33+ else false)
34+ then (o.reissuable == false)
35+ else false
36+ }
37+ else false
38+ }
39+
40+
41+@Callable(p)
42+func setPaused (q) = {
43+ let r = p.caller.bytes
44+ if ((q == "true"))
45+ then [StringEntry(q, ("true" + q))]
46+ else if ((i == false))
47+ then [StringEntry(q, ("false" + q))]
48+ else nil
49+ }
50+
51+
52+
53+@Callable(p)
54+func createNft (q,s,t,u,v,w,x,y,z,A) = {
55+ let B = Issue(s, y, 1, 0, false)
56+ let C = calculateAssetId(B)
57+ let D = p.transactionId
58+ if ((q == "true"))
59+ then throw("function is paused for sometimes")
60+ else [B, ScriptTransfer(p.caller, 1, C), StringEntry(((toBase58String(C) + a) + "Owner"), toString(p.caller)), StringEntry(((toBase58String(C) + a) + "nft_type"), v), StringEntry(((toBase58String(C) + a) + "nft_tags"), w), StringEntry(((toBase58String(C) + a) + "nft_dAppAddress"), u), IntegerEntry(((toBase58String(C) + a) + "nft_selling_price"), x), StringEntry(((toBase58String(C) + a) + "nft_onSell"), z), StringEntry(((toBase58String(C) + a) + "nft_data"), A), StringEntry(((toBase58String(D) + a) + "issue_nft"), toBase58String(C))]
61+ }
62+
63+
64+
65+@Callable(p)
66+func sellNFT (E,F) = {
67+ let D = p.transactionId
68+ let G = p.caller.bytes
69+ let H = $Tuple2(value(p.payments[0].assetId), value(p.payments[0].amount))
70+ let I = H._1
71+ let J = H._2
72+ if (!(l(I)))
73+ then throw("Token is not NFT")
74+ else [StringEntry(((c + a) + toBase58String(value(p.payments[0].assetId))), E), StringEntry(((toString(p.caller) + a) + d), (((toBase58String(I) + a) + toString(J)) + F))]
75+ }
76+
77+
78+
79+@Callable(p)
80+func buyNFT (K,L) = {
81+ let m = fromBase58String(K)
82+ let M = value(p.payments[0].amount)
83+ let N = {
84+ let n = getString(this, (("nft_" + L) + "_owner"))
85+ if ($isInstanceOf(n, "String"))
86+ then {
87+ let O = n
88+ O
89+ }
90+ else false
91+ }
92+ let E = getStringValue(((((c + a) + K) + "_") + L))
93+ let P = ((M / 1000) * 975)
94+ let Q = ((M / 1000) * 25)
95+ if ((L == toString(p.caller)))
96+ then throw("current Owner of NFT not able to purchase")
97+ else if ((p.payments[0].assetId == f))
98+ then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(L)), P, f), StringEntry((("nft_" + K) + "platform_fee"), toString(Q)), StringEntry(((toString(p.caller) + a) + b), ((K + a) + toString(M))), DeleteEntry((("nft_" + L) + "_owner")), StringEntry((("nft_" + L) + "_owner"), toString(p.caller)), StringEntry(((K + a) + "_owner"), toString(p.caller))]
99+ else if ((p.payments[0].assetId == unit))
100+ then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(L)), P, unit), StringEntry((("nft_" + K) + "platform_fee"), toString(Q)), StringEntry(((toString(p.caller) + a) + b), ((K + a) + toString(M))), DeleteEntry((("nft_" + L) + "_owner")), StringEntry((("nft_" + L) + "_owner"), toString(p.caller)), StringEntry(((K + a) + "_owner"), toString(p.caller))]
101+ else nil
102+ }
103+
104+
105+
106+@Callable(p)
107+func cancelSell (R) = {
108+ let D = toBase58String(p.transactionId)
109+ let G = p.caller.bytes
110+[StringEntry(((D + R) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(G), 1, fromBase58String(R))]
111+ }
112+
113+
114+
115+@Callable(p)
116+func addAuction (S,T,U,V,F) = {
117+ let D = toBase58String(p.transactionId)
118+ let R = value(p.payments[0].assetId)
119+ let E = value(U)
120+ let W = (lastBlock.height + V)
121+ let r = p.caller.bytes
122+ let X = {
123+ let n = getString(this, (((toBase58String(R) + a) + "nft_status_") + toBase58String(r)))
124+ if ($isInstanceOf(n, "String"))
125+ then {
126+ let O = n
127+ true
128+ }
129+ else false
130+ }
131+ if ((X == true))
132+ then throw("Already in auction list")
133+ else if ((V > e))
134+ then throw(("Duration is too long. Must be less than or equal to 30 " + toString(e)))
135+ else if ((p.payments[0].assetId == unit))
136+ then throw("NFT not attached")
137+ else if ((p.payments[0].assetId == f))
138+ then throw("NFT not attached")
139+ else [StringEntry(((D + "nft_start_auction_date") + toBase58String(r)), S), StringEntry(((D + "nft_end_auction_date") + toBase58String(r)), T), StringEntry((D + "_nft_start_price"), U), StringEntry((D + "_nft_owner"), toString(p.caller)), StringEntry((D + "_nft_on_auction"), toBase58String(R)), StringEntry((D + "_previous_bidder"), "none"), StringEntry((D + "_highest_bid"), "0"), StringEntry((D + "_winner_of_nft"), "0"), StringEntry((D + "_bidder_count"), "0"), StringEntry((D + "_nft_status"), "OPEN")]
140+ }
141+
142+
143+
144+@Callable(p)
145+func placeBid (Y,R,t,Z,aa) = {
146+ let D = toBase58String(p.transactionId)
147+ let r = p.caller.bytes
148+ let m = fromBase58String(R)
149+ let ab = p.payments[0].assetId
150+ let ac = p.payments[0].amount
151+ let ad = getStringValue(this, (Y + "_highest_bid"))
152+ let ae = getString(this, (Y + "_previous_bidder"))
153+ let af = getStringValue(this, (Y + "_bidder_count"))
154+ let ag = getStringValue(this, (Y + "_winner_of_nft"))
155+ let X = getStringValue(this, (Y + "_nft_status"))
156+ if ((X != "OPEN"))
157+ then throw("Not open for auction")
158+ else if ((parseIntValue(ad) >= ac))
159+ then throw("Bid is less then starting/highest Bid")
160+ else if ((ad == "0"))
161+ then [StringEntry((Y + "_highest_bid"), toString(ac)), StringEntry((Y + "_winner_of_nft"), toBase58String(p.caller.bytes)), StringEntry((Y + "_bidder_count"), toString((parseIntValue(af) + 1))), StringEntry((Y + "_nft_id"), toBase58String(m)), StringEntry((Y + "_nft_owner"), t), StringEntry((((D + "_") + Y) + "_highest_bid"), toString(ac)), StringEntry((((D + "_") + Y) + "_winner"), toBase58String(p.caller.bytes)), StringEntry((((D + "_") + Y) + "_bidder_count"), toString((parseIntValue(af) + 1))), StringEntry((((D + "_") + Y) + "_nft_id"), toBase58String(m)), StringEntry((((D + "_") + Y) + "_nft_owner"), t), StringEntry((D + "_bid_for_nft_by"), toBase58String(r)), StringEntry((D + "_bid_price_place"), Z), StringEntry((D + "_previous_bid_amount_refund_to_address"), ag), StringEntry((D + "_prevoius_bid_amount_refund"), ad)]
162+ else if ((ad != "0"))
163+ then [ScriptTransfer(Address(fromBase58String(ag)), parseIntValue(ad), ab), StringEntry((D + "_previous_bid_amount_refund_to_address"), ag), StringEntry((D + "_prevoius_bid_amount_refund"), ad), StringEntry((Y + "_bidder_count"), toString((parseIntValue(af) + 1))), StringEntry((Y + "_highest_bid"), toString(ac)), StringEntry((Y + "_winner_of_nft"), toBase58String(p.caller.bytes)), StringEntry((Y + "_nft_id"), toBase58String(m)), StringEntry((Y + "_nft_owner"), t), StringEntry((((D + "_") + Y) + "_highest_bid"), toString(ac)), StringEntry((((D + "_") + Y) + "_winner"), toBase58String(p.caller.bytes)), StringEntry((((D + "_") + Y) + "_bidder_count"), toString((parseIntValue(af) + 1))), StringEntry((((D + "_") + Y) + "_nft_id"), toBase58String(m)), StringEntry((((D + "_") + Y) + "_nft_owner"), t), StringEntry((D + "_bid_for_nft_by"), toBase58String(r)), StringEntry((D + "_bid_price_place"), Z)]
164+ else nil
165+ }
166+
167+
168+
169+@Callable(p)
170+func acceptBidOffer (Y,R,ah,aa) = {
171+ let ai = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
172+ let D = toBase58String(p.transactionId)
173+ let aj = fromBase58String(aa)
174+ let r = p.caller.bytes
175+ let m = fromBase58String(R)
176+ let ak = getStringValue(this, (Y + "_highest_bid"))
177+ let al = ((parseIntValue(ak) / 1000) * 975)
178+ let Q = ((parseIntValue(ak) / 1000) * 25)
179+ let am = getStringValue(this, (Y + "_winner_of_nft"))
180+ if ((aa == ai))
181+ then [ScriptTransfer(Address(r), al, aj), ScriptTransfer(Address(fromBase58String(am)), 1, m), StringEntry("platform_fee", toString(Q)), StringEntry((D + "_amount_paid_to_owner"), ak), StringEntry((D + "_nft_transfer_to"), am), StringEntry((D + "_nft_status"), "REWARDED"), StringEntry((Y + "_amount_paid_to_owner"), ak), StringEntry((Y + "_nft_transfer_to"), am), StringEntry((Y + "_nft_status"), "REWARDED")]
182+ else if ((aa == "WAVES"))
183+ then [ScriptTransfer(Address(r), al, unit), ScriptTransfer(Address(fromBase58String(am)), 1, m), StringEntry("platform_fee", toString(Q)), StringEntry((D + "_amount_paid_to_owner"), ak), StringEntry((D + "_nft_transfer_to"), am), StringEntry((D + "_nft_status"), "REWARDED"), StringEntry((Y + "_amount_paid_to_owner"), ak), StringEntry((Y + "_nft_transfer_to"), am), StringEntry((Y + "_nft_status"), "REWARDED")]
184+ else nil
185+ }
186+
187+
188+
189+@Callable(p)
190+func cancelAuction (Y,aa) = {
191+ let D = toBase58String(p.transactionId)
192+ let r = p.caller.bytes
193+ let an = getStringValue(this, (Y + "_nft_status"))
194+ let ao = getStringValue(this, (Y + "_winner_of_nft"))
195+ let ap = getStringValue(this, (Y + "_nft_owner"))
196+ let R = getStringValue(this, (Y + "_nft_on_auction"))
197+ let aq = getStringValue(this, (Y + "_highest_bid"))
198+ if ((ao == "0"))
199+ then [StringEntry(((D + Y) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R))]
200+ else if ((ao != "0"))
201+ then throw("soory you can't cancel it because already auction placed by someone")
202+ else nil
203+ }
204+
205+
206+
207+@Callable(p)
208+func manualFundTransfer (ar,as) = {
209+ let r = p.caller.bytes
210+ let at = fromBase58String(ar)
211+ let M = p.payments[0].amount
212+ let au = ((M / 1000) * 975)
213+ let Q = ((M / 1000) * 25)
214+ if ((p.payments[0].assetId == unit))
215+ then [IntegerEntry((toBase58String(r) + "_transfer"), M), StringEntry("platform_fee", toString(Q)), StringEntry((toBase58String(r) + "_transfer_to"), ar), ScriptTransfer(Address(at), au, unit)]
216+ else if ((p.payments[0].assetId == f))
217+ then [IntegerEntry((toBase58String(r) + "_transfer"), M), StringEntry("platform_fee", toString(Q)), StringEntry((toBase58String(r) + "_transfer_to"), ar), ScriptTransfer(Address(at), au, f)]
218+ else nil
219+ }
220+
221+
222+
223+@Callable(p)
224+func backValue (Y) = {
225+ let r = p.caller.bytes
226+ let R = getStringValue(this, (Y + "_nft_on_auction"))
227+ let ap = getStringValue(this, (Y + "_nft_owner"))
228+[StringEntry((Y + "_nft_status"), "Auction_time over"), ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R))]
229+ }
230+
231+
232+
233+@Callable(p)
234+func withdrawBid (av,aa) = {
235+ let r = p.caller.bytes
236+ let ai = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
237+ let D = toBase58String(p.transactionId)
238+ let aj = fromBase58String(aa)
239+ let aw = getStringValue(this, (av + "_highest_bid"))
240+ let ax = getStringValue(this, (av + "_winner"))
241+ let ay = getStringValue(this, (av + "_nft_id"))
242+ if ((aa == ai))
243+ then [StringEntry((av + "_nft_bid"), "WITHDRAW"), StringEntry((av + "_nft_id"), ay), StringEntry((av + "_bidding_price_refund_amount"), aw), ScriptTransfer(p.caller, parseIntValue(aw), aj)]
244+ else if ((aa == "WAVES"))
245+ then [StringEntry((av + "_nft_bid"), "WITHDRAW"), StringEntry((av + "_nft_id"), ay), StringEntry((av + "_bidding_price_refund_amount"), aw), ScriptTransfer(p.caller, parseIntValue(aw), unit)]
246+ else nil
247+ }
248+
249+
250+
251+@Callable(p)
252+func automateFunction (Y,aa) = {
253+ let r = p.caller.bytes
254+ let R = getStringValue(this, (Y + "_nft_on_auction"))
255+ let ap = getStringValue(this, (Y + "_nft_owner"))
256+ let ai = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
257+ let aj = fromBase58String(aa)
258+ let ad = getStringValue(this, (Y + "_highest_bid"))
259+ let ag = getStringValue(this, (Y + "_winner_of_nft"))
260+ let ao = getStringValue(this, (Y + "_winner_of_nft"))
261+ if ((ao == "0"))
262+ then [ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R))]
263+ else if (if ((ao != "0"))
264+ then (aa == ai)
265+ else false)
266+ then [ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R)), ScriptTransfer(Address(fromBase58String(ag)), parseIntValue(ad), aj)]
267+ else if (if ((ao != "0"))
268+ then (aa == "WAVES")
269+ else false)
270+ then [ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R)), ScriptTransfer(Address(fromBase58String(ag)), parseIntValue(ad), unit)]
271+ else nil
272+ }
273+
274+
275+
276+@Callable(p)
277+func buyAllProducts_asimi (az,aA) = {
278+ let aB = p.caller
279+ let aC = assetBalance(aB, f)
280+ let M = value(p.payments[0].amount)
281+ let aD = split(az[0], "_")
282+ let aE = split(az[1], "_")
283+ let aF = split(az[2], "_")
284+ let aG = split(az[3], "_")
285+ let aH = split(az[4], "_")
286+ if ((aA > M))
17287 then throw("your paying amount is wrong ")
18- else if ((g > f))
288+ else if ((M > aC))
19289 then throw("Buyer does not have enough funds to complete the purchase.")
20- else if ((size(c) == 1))
21- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a)]
22- else if ((size(c) == 2))
23- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), StringEntry((((((("second_nft_Info=" + "nftId") + i[0]) + "seller_address") + i[1]) + "price") + i[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(e, 1, fromBase58String(i[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a), ScriptTransfer(Address(fromBase58String(i[1])), parseIntValue(i[2]), a)]
24- else if ((size(c) == 3))
25- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), StringEntry((((((("second_nft_Info=" + "nftId") + i[0]) + "seller_address") + i[1]) + "price") + i[2]), ("buyer" + toString(e))), StringEntry((((((("third_nft_Info=" + "nftId") + j[0]) + "seller_address") + j[1]) + "price") + j[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(e, 1, fromBase58String(i[0])), ScriptTransfer(e, 1, fromBase58String(j[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a), ScriptTransfer(Address(fromBase58String(i[1])), parseIntValue(i[2]), a), ScriptTransfer(Address(fromBase58String(j[1])), parseIntValue(j[2]), a)]
26- else if ((size(c) == 4))
27- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), StringEntry((((((("second_nft_Info=" + "nftId") + i[0]) + "seller_address") + i[1]) + "price") + i[2]), ("buyer" + toString(e))), StringEntry((((((("third_nft_Info=" + "nftId") + j[0]) + "seller_address") + j[1]) + "price") + j[2]), ("buyer" + toString(e))), StringEntry((((((("fourth_nft_Info=" + "nftId") + k[0]) + "seller_address") + k[1]) + "price") + k[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(e, 1, fromBase58String(i[0])), ScriptTransfer(e, 1, fromBase58String(j[0])), ScriptTransfer(e, 1, fromBase58String(k[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a), ScriptTransfer(Address(fromBase58String(i[1])), parseIntValue(i[2]), a), ScriptTransfer(Address(fromBase58String(j[1])), parseIntValue(j[2]), a), ScriptTransfer(Address(fromBase58String(k[1])), parseIntValue(k[2]), a)]
28- else if ((size(c) == 5))
29- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), StringEntry((((((("second_nft_Info=" + "nftId") + i[0]) + "seller_address") + i[1]) + "price") + i[2]), ("buyer" + toString(e))), StringEntry((((((("third_nft_Info=" + "nftId") + j[0]) + "seller_address") + j[1]) + "price") + j[2]), ("buyer" + toString(e))), StringEntry((((((("fourth_nft_Info=" + "nftId") + k[0]) + "seller_address") + k[1]) + "price") + k[2]), ("buyer" + toString(e))), StringEntry((((((("fifth_nft_Info=" + "nftId") + l[0]) + "seller_address") + l[1]) + "price") + l[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(e, 1, fromBase58String(i[0])), ScriptTransfer(e, 1, fromBase58String(j[0])), ScriptTransfer(e, 1, fromBase58String(k[0])), ScriptTransfer(e, 1, fromBase58String(l[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a), ScriptTransfer(Address(fromBase58String(i[1])), parseIntValue(i[2]), a), ScriptTransfer(Address(fromBase58String(j[1])), parseIntValue(j[2]), a), ScriptTransfer(Address(fromBase58String(k[1])), parseIntValue(k[2]), a), ScriptTransfer(Address(fromBase58String(l[1])), parseIntValue(l[2]), a)]
30- else if ((size(c) > 5))
290+ else if ((size(az) == 1))
291+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f)]
292+ else if ((size(az) == 2))
293+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), f)]
294+ else if ((size(az) == 3))
295+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), f), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), f)]
296+ else if ((size(az) == 4))
297+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(aB, 1, fromBase58String(aG[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), f), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), f), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), f)]
298+ else if ((size(az) == 5))
299+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aB))), StringEntry((((((("fifth_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(aB, 1, fromBase58String(aG[0])), ScriptTransfer(aB, 1, fromBase58String(aH[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), f), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), f), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), f), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), f)]
300+ else if ((size(az) > 5))
301+ then throw("sorry! maximum limit of your cart is 5 items")
302+ else nil
303+ }
304+
305+
306+
307+@Callable(p)
308+func buyAllProducts_waves (az,aA) = {
309+ let aB = p.caller
310+ let aC = assetBalance(aB, g)
311+ let M = value(p.payments[0].amount)
312+ let aD = split(az[0], "_")
313+ let aE = split(az[1], "_")
314+ let aF = split(az[2], "_")
315+ let aG = split(az[3], "_")
316+ let aH = split(az[4], "_")
317+ if ((aA > M))
318+ then throw("your paying amount is wrong ")
319+ else if ((M > aC))
320+ then throw("Buyer does not have enough funds to complete the purchase.")
321+ else if ((size(az) == 1))
322+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit)]
323+ else if ((size(az) == 2))
324+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), unit)]
325+ else if ((size(az) == 3))
326+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), unit), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), unit)]
327+ else if ((size(az) == 4))
328+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(aB, 1, fromBase58String(aG[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), unit), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), unit), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit)]
329+ else if ((size(az) == 5))
330+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aB))), StringEntry((((((("fifth_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(aB, 1, fromBase58String(aG[0])), ScriptTransfer(aB, 1, fromBase58String(aH[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), unit), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), unit), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit)]
331+ else if ((size(az) > 5))
31332 then throw("sorry! maximum limit of your cart is 5 items")
32333 else nil
33334 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = base58'9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq'
4+let a = "_"
55
6-@Callable(b)
7-func buyAllProducts (c,d) = {
8- let e = b.caller
9- let f = assetBalance(e, a)
10- let g = value(b.payments[0].amount)
11- let h = split(c[0], "_")
12- let i = split(c[1], "_")
13- let j = split(c[2], "_")
14- let k = split(c[3], "_")
15- let l = split(c[4], "_")
16- if ((d > g))
6+let b = "buy"
7+
8+let c = "price"
9+
10+let d = "sell"
11+
12+let e = 30
13+
14+let f = base58'9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq'
15+
16+let g = base58''
17+
18+let h = "bid"
19+
20+let i = true
21+
22+let j = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED")
23+
24+let k = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq'
25+
26+func l (m) = {
27+ let n = assetInfo(m)
28+ if ($isInstanceOf(n, "Asset"))
29+ then {
30+ let o = n
31+ if (if ((o.decimals == 0))
32+ then (o.quantity == 1)
33+ else false)
34+ then (o.reissuable == false)
35+ else false
36+ }
37+ else false
38+ }
39+
40+
41+@Callable(p)
42+func setPaused (q) = {
43+ let r = p.caller.bytes
44+ if ((q == "true"))
45+ then [StringEntry(q, ("true" + q))]
46+ else if ((i == false))
47+ then [StringEntry(q, ("false" + q))]
48+ else nil
49+ }
50+
51+
52+
53+@Callable(p)
54+func createNft (q,s,t,u,v,w,x,y,z,A) = {
55+ let B = Issue(s, y, 1, 0, false)
56+ let C = calculateAssetId(B)
57+ let D = p.transactionId
58+ if ((q == "true"))
59+ then throw("function is paused for sometimes")
60+ else [B, ScriptTransfer(p.caller, 1, C), StringEntry(((toBase58String(C) + a) + "Owner"), toString(p.caller)), StringEntry(((toBase58String(C) + a) + "nft_type"), v), StringEntry(((toBase58String(C) + a) + "nft_tags"), w), StringEntry(((toBase58String(C) + a) + "nft_dAppAddress"), u), IntegerEntry(((toBase58String(C) + a) + "nft_selling_price"), x), StringEntry(((toBase58String(C) + a) + "nft_onSell"), z), StringEntry(((toBase58String(C) + a) + "nft_data"), A), StringEntry(((toBase58String(D) + a) + "issue_nft"), toBase58String(C))]
61+ }
62+
63+
64+
65+@Callable(p)
66+func sellNFT (E,F) = {
67+ let D = p.transactionId
68+ let G = p.caller.bytes
69+ let H = $Tuple2(value(p.payments[0].assetId), value(p.payments[0].amount))
70+ let I = H._1
71+ let J = H._2
72+ if (!(l(I)))
73+ then throw("Token is not NFT")
74+ else [StringEntry(((c + a) + toBase58String(value(p.payments[0].assetId))), E), StringEntry(((toString(p.caller) + a) + d), (((toBase58String(I) + a) + toString(J)) + F))]
75+ }
76+
77+
78+
79+@Callable(p)
80+func buyNFT (K,L) = {
81+ let m = fromBase58String(K)
82+ let M = value(p.payments[0].amount)
83+ let N = {
84+ let n = getString(this, (("nft_" + L) + "_owner"))
85+ if ($isInstanceOf(n, "String"))
86+ then {
87+ let O = n
88+ O
89+ }
90+ else false
91+ }
92+ let E = getStringValue(((((c + a) + K) + "_") + L))
93+ let P = ((M / 1000) * 975)
94+ let Q = ((M / 1000) * 25)
95+ if ((L == toString(p.caller)))
96+ then throw("current Owner of NFT not able to purchase")
97+ else if ((p.payments[0].assetId == f))
98+ then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(L)), P, f), StringEntry((("nft_" + K) + "platform_fee"), toString(Q)), StringEntry(((toString(p.caller) + a) + b), ((K + a) + toString(M))), DeleteEntry((("nft_" + L) + "_owner")), StringEntry((("nft_" + L) + "_owner"), toString(p.caller)), StringEntry(((K + a) + "_owner"), toString(p.caller))]
99+ else if ((p.payments[0].assetId == unit))
100+ then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(L)), P, unit), StringEntry((("nft_" + K) + "platform_fee"), toString(Q)), StringEntry(((toString(p.caller) + a) + b), ((K + a) + toString(M))), DeleteEntry((("nft_" + L) + "_owner")), StringEntry((("nft_" + L) + "_owner"), toString(p.caller)), StringEntry(((K + a) + "_owner"), toString(p.caller))]
101+ else nil
102+ }
103+
104+
105+
106+@Callable(p)
107+func cancelSell (R) = {
108+ let D = toBase58String(p.transactionId)
109+ let G = p.caller.bytes
110+[StringEntry(((D + R) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(G), 1, fromBase58String(R))]
111+ }
112+
113+
114+
115+@Callable(p)
116+func addAuction (S,T,U,V,F) = {
117+ let D = toBase58String(p.transactionId)
118+ let R = value(p.payments[0].assetId)
119+ let E = value(U)
120+ let W = (lastBlock.height + V)
121+ let r = p.caller.bytes
122+ let X = {
123+ let n = getString(this, (((toBase58String(R) + a) + "nft_status_") + toBase58String(r)))
124+ if ($isInstanceOf(n, "String"))
125+ then {
126+ let O = n
127+ true
128+ }
129+ else false
130+ }
131+ if ((X == true))
132+ then throw("Already in auction list")
133+ else if ((V > e))
134+ then throw(("Duration is too long. Must be less than or equal to 30 " + toString(e)))
135+ else if ((p.payments[0].assetId == unit))
136+ then throw("NFT not attached")
137+ else if ((p.payments[0].assetId == f))
138+ then throw("NFT not attached")
139+ else [StringEntry(((D + "nft_start_auction_date") + toBase58String(r)), S), StringEntry(((D + "nft_end_auction_date") + toBase58String(r)), T), StringEntry((D + "_nft_start_price"), U), StringEntry((D + "_nft_owner"), toString(p.caller)), StringEntry((D + "_nft_on_auction"), toBase58String(R)), StringEntry((D + "_previous_bidder"), "none"), StringEntry((D + "_highest_bid"), "0"), StringEntry((D + "_winner_of_nft"), "0"), StringEntry((D + "_bidder_count"), "0"), StringEntry((D + "_nft_status"), "OPEN")]
140+ }
141+
142+
143+
144+@Callable(p)
145+func placeBid (Y,R,t,Z,aa) = {
146+ let D = toBase58String(p.transactionId)
147+ let r = p.caller.bytes
148+ let m = fromBase58String(R)
149+ let ab = p.payments[0].assetId
150+ let ac = p.payments[0].amount
151+ let ad = getStringValue(this, (Y + "_highest_bid"))
152+ let ae = getString(this, (Y + "_previous_bidder"))
153+ let af = getStringValue(this, (Y + "_bidder_count"))
154+ let ag = getStringValue(this, (Y + "_winner_of_nft"))
155+ let X = getStringValue(this, (Y + "_nft_status"))
156+ if ((X != "OPEN"))
157+ then throw("Not open for auction")
158+ else if ((parseIntValue(ad) >= ac))
159+ then throw("Bid is less then starting/highest Bid")
160+ else if ((ad == "0"))
161+ then [StringEntry((Y + "_highest_bid"), toString(ac)), StringEntry((Y + "_winner_of_nft"), toBase58String(p.caller.bytes)), StringEntry((Y + "_bidder_count"), toString((parseIntValue(af) + 1))), StringEntry((Y + "_nft_id"), toBase58String(m)), StringEntry((Y + "_nft_owner"), t), StringEntry((((D + "_") + Y) + "_highest_bid"), toString(ac)), StringEntry((((D + "_") + Y) + "_winner"), toBase58String(p.caller.bytes)), StringEntry((((D + "_") + Y) + "_bidder_count"), toString((parseIntValue(af) + 1))), StringEntry((((D + "_") + Y) + "_nft_id"), toBase58String(m)), StringEntry((((D + "_") + Y) + "_nft_owner"), t), StringEntry((D + "_bid_for_nft_by"), toBase58String(r)), StringEntry((D + "_bid_price_place"), Z), StringEntry((D + "_previous_bid_amount_refund_to_address"), ag), StringEntry((D + "_prevoius_bid_amount_refund"), ad)]
162+ else if ((ad != "0"))
163+ then [ScriptTransfer(Address(fromBase58String(ag)), parseIntValue(ad), ab), StringEntry((D + "_previous_bid_amount_refund_to_address"), ag), StringEntry((D + "_prevoius_bid_amount_refund"), ad), StringEntry((Y + "_bidder_count"), toString((parseIntValue(af) + 1))), StringEntry((Y + "_highest_bid"), toString(ac)), StringEntry((Y + "_winner_of_nft"), toBase58String(p.caller.bytes)), StringEntry((Y + "_nft_id"), toBase58String(m)), StringEntry((Y + "_nft_owner"), t), StringEntry((((D + "_") + Y) + "_highest_bid"), toString(ac)), StringEntry((((D + "_") + Y) + "_winner"), toBase58String(p.caller.bytes)), StringEntry((((D + "_") + Y) + "_bidder_count"), toString((parseIntValue(af) + 1))), StringEntry((((D + "_") + Y) + "_nft_id"), toBase58String(m)), StringEntry((((D + "_") + Y) + "_nft_owner"), t), StringEntry((D + "_bid_for_nft_by"), toBase58String(r)), StringEntry((D + "_bid_price_place"), Z)]
164+ else nil
165+ }
166+
167+
168+
169+@Callable(p)
170+func acceptBidOffer (Y,R,ah,aa) = {
171+ let ai = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
172+ let D = toBase58String(p.transactionId)
173+ let aj = fromBase58String(aa)
174+ let r = p.caller.bytes
175+ let m = fromBase58String(R)
176+ let ak = getStringValue(this, (Y + "_highest_bid"))
177+ let al = ((parseIntValue(ak) / 1000) * 975)
178+ let Q = ((parseIntValue(ak) / 1000) * 25)
179+ let am = getStringValue(this, (Y + "_winner_of_nft"))
180+ if ((aa == ai))
181+ then [ScriptTransfer(Address(r), al, aj), ScriptTransfer(Address(fromBase58String(am)), 1, m), StringEntry("platform_fee", toString(Q)), StringEntry((D + "_amount_paid_to_owner"), ak), StringEntry((D + "_nft_transfer_to"), am), StringEntry((D + "_nft_status"), "REWARDED"), StringEntry((Y + "_amount_paid_to_owner"), ak), StringEntry((Y + "_nft_transfer_to"), am), StringEntry((Y + "_nft_status"), "REWARDED")]
182+ else if ((aa == "WAVES"))
183+ then [ScriptTransfer(Address(r), al, unit), ScriptTransfer(Address(fromBase58String(am)), 1, m), StringEntry("platform_fee", toString(Q)), StringEntry((D + "_amount_paid_to_owner"), ak), StringEntry((D + "_nft_transfer_to"), am), StringEntry((D + "_nft_status"), "REWARDED"), StringEntry((Y + "_amount_paid_to_owner"), ak), StringEntry((Y + "_nft_transfer_to"), am), StringEntry((Y + "_nft_status"), "REWARDED")]
184+ else nil
185+ }
186+
187+
188+
189+@Callable(p)
190+func cancelAuction (Y,aa) = {
191+ let D = toBase58String(p.transactionId)
192+ let r = p.caller.bytes
193+ let an = getStringValue(this, (Y + "_nft_status"))
194+ let ao = getStringValue(this, (Y + "_winner_of_nft"))
195+ let ap = getStringValue(this, (Y + "_nft_owner"))
196+ let R = getStringValue(this, (Y + "_nft_on_auction"))
197+ let aq = getStringValue(this, (Y + "_highest_bid"))
198+ if ((ao == "0"))
199+ then [StringEntry(((D + Y) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R))]
200+ else if ((ao != "0"))
201+ then throw("soory you can't cancel it because already auction placed by someone")
202+ else nil
203+ }
204+
205+
206+
207+@Callable(p)
208+func manualFundTransfer (ar,as) = {
209+ let r = p.caller.bytes
210+ let at = fromBase58String(ar)
211+ let M = p.payments[0].amount
212+ let au = ((M / 1000) * 975)
213+ let Q = ((M / 1000) * 25)
214+ if ((p.payments[0].assetId == unit))
215+ then [IntegerEntry((toBase58String(r) + "_transfer"), M), StringEntry("platform_fee", toString(Q)), StringEntry((toBase58String(r) + "_transfer_to"), ar), ScriptTransfer(Address(at), au, unit)]
216+ else if ((p.payments[0].assetId == f))
217+ then [IntegerEntry((toBase58String(r) + "_transfer"), M), StringEntry("platform_fee", toString(Q)), StringEntry((toBase58String(r) + "_transfer_to"), ar), ScriptTransfer(Address(at), au, f)]
218+ else nil
219+ }
220+
221+
222+
223+@Callable(p)
224+func backValue (Y) = {
225+ let r = p.caller.bytes
226+ let R = getStringValue(this, (Y + "_nft_on_auction"))
227+ let ap = getStringValue(this, (Y + "_nft_owner"))
228+[StringEntry((Y + "_nft_status"), "Auction_time over"), ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R))]
229+ }
230+
231+
232+
233+@Callable(p)
234+func withdrawBid (av,aa) = {
235+ let r = p.caller.bytes
236+ let ai = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
237+ let D = toBase58String(p.transactionId)
238+ let aj = fromBase58String(aa)
239+ let aw = getStringValue(this, (av + "_highest_bid"))
240+ let ax = getStringValue(this, (av + "_winner"))
241+ let ay = getStringValue(this, (av + "_nft_id"))
242+ if ((aa == ai))
243+ then [StringEntry((av + "_nft_bid"), "WITHDRAW"), StringEntry((av + "_nft_id"), ay), StringEntry((av + "_bidding_price_refund_amount"), aw), ScriptTransfer(p.caller, parseIntValue(aw), aj)]
244+ else if ((aa == "WAVES"))
245+ then [StringEntry((av + "_nft_bid"), "WITHDRAW"), StringEntry((av + "_nft_id"), ay), StringEntry((av + "_bidding_price_refund_amount"), aw), ScriptTransfer(p.caller, parseIntValue(aw), unit)]
246+ else nil
247+ }
248+
249+
250+
251+@Callable(p)
252+func automateFunction (Y,aa) = {
253+ let r = p.caller.bytes
254+ let R = getStringValue(this, (Y + "_nft_on_auction"))
255+ let ap = getStringValue(this, (Y + "_nft_owner"))
256+ let ai = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
257+ let aj = fromBase58String(aa)
258+ let ad = getStringValue(this, (Y + "_highest_bid"))
259+ let ag = getStringValue(this, (Y + "_winner_of_nft"))
260+ let ao = getStringValue(this, (Y + "_winner_of_nft"))
261+ if ((ao == "0"))
262+ then [ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R))]
263+ else if (if ((ao != "0"))
264+ then (aa == ai)
265+ else false)
266+ then [ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R)), ScriptTransfer(Address(fromBase58String(ag)), parseIntValue(ad), aj)]
267+ else if (if ((ao != "0"))
268+ then (aa == "WAVES")
269+ else false)
270+ then [ScriptTransfer(Address(fromBase58String(ap)), 1, fromBase58String(R)), ScriptTransfer(Address(fromBase58String(ag)), parseIntValue(ad), unit)]
271+ else nil
272+ }
273+
274+
275+
276+@Callable(p)
277+func buyAllProducts_asimi (az,aA) = {
278+ let aB = p.caller
279+ let aC = assetBalance(aB, f)
280+ let M = value(p.payments[0].amount)
281+ let aD = split(az[0], "_")
282+ let aE = split(az[1], "_")
283+ let aF = split(az[2], "_")
284+ let aG = split(az[3], "_")
285+ let aH = split(az[4], "_")
286+ if ((aA > M))
17287 then throw("your paying amount is wrong ")
18- else if ((g > f))
288+ else if ((M > aC))
19289 then throw("Buyer does not have enough funds to complete the purchase.")
20- else if ((size(c) == 1))
21- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a)]
22- else if ((size(c) == 2))
23- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), StringEntry((((((("second_nft_Info=" + "nftId") + i[0]) + "seller_address") + i[1]) + "price") + i[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(e, 1, fromBase58String(i[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a), ScriptTransfer(Address(fromBase58String(i[1])), parseIntValue(i[2]), a)]
24- else if ((size(c) == 3))
25- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), StringEntry((((((("second_nft_Info=" + "nftId") + i[0]) + "seller_address") + i[1]) + "price") + i[2]), ("buyer" + toString(e))), StringEntry((((((("third_nft_Info=" + "nftId") + j[0]) + "seller_address") + j[1]) + "price") + j[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(e, 1, fromBase58String(i[0])), ScriptTransfer(e, 1, fromBase58String(j[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a), ScriptTransfer(Address(fromBase58String(i[1])), parseIntValue(i[2]), a), ScriptTransfer(Address(fromBase58String(j[1])), parseIntValue(j[2]), a)]
26- else if ((size(c) == 4))
27- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), StringEntry((((((("second_nft_Info=" + "nftId") + i[0]) + "seller_address") + i[1]) + "price") + i[2]), ("buyer" + toString(e))), StringEntry((((((("third_nft_Info=" + "nftId") + j[0]) + "seller_address") + j[1]) + "price") + j[2]), ("buyer" + toString(e))), StringEntry((((((("fourth_nft_Info=" + "nftId") + k[0]) + "seller_address") + k[1]) + "price") + k[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(e, 1, fromBase58String(i[0])), ScriptTransfer(e, 1, fromBase58String(j[0])), ScriptTransfer(e, 1, fromBase58String(k[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a), ScriptTransfer(Address(fromBase58String(i[1])), parseIntValue(i[2]), a), ScriptTransfer(Address(fromBase58String(j[1])), parseIntValue(j[2]), a), ScriptTransfer(Address(fromBase58String(k[1])), parseIntValue(k[2]), a)]
28- else if ((size(c) == 5))
29- then [StringEntry((((((("first_nft_Info=" + "nftId") + h[0]) + "seller_address") + h[1]) + "price") + h[2]), ("buyer" + toString(e))), StringEntry((((((("second_nft_Info=" + "nftId") + i[0]) + "seller_address") + i[1]) + "price") + i[2]), ("buyer" + toString(e))), StringEntry((((((("third_nft_Info=" + "nftId") + j[0]) + "seller_address") + j[1]) + "price") + j[2]), ("buyer" + toString(e))), StringEntry((((((("fourth_nft_Info=" + "nftId") + k[0]) + "seller_address") + k[1]) + "price") + k[2]), ("buyer" + toString(e))), StringEntry((((((("fifth_nft_Info=" + "nftId") + l[0]) + "seller_address") + l[1]) + "price") + l[2]), ("buyer" + toString(e))), ScriptTransfer(e, 1, fromBase58String(h[0])), ScriptTransfer(e, 1, fromBase58String(i[0])), ScriptTransfer(e, 1, fromBase58String(j[0])), ScriptTransfer(e, 1, fromBase58String(k[0])), ScriptTransfer(e, 1, fromBase58String(l[0])), ScriptTransfer(Address(fromBase58String(h[1])), parseIntValue(h[2]), a), ScriptTransfer(Address(fromBase58String(i[1])), parseIntValue(i[2]), a), ScriptTransfer(Address(fromBase58String(j[1])), parseIntValue(j[2]), a), ScriptTransfer(Address(fromBase58String(k[1])), parseIntValue(k[2]), a), ScriptTransfer(Address(fromBase58String(l[1])), parseIntValue(l[2]), a)]
30- else if ((size(c) > 5))
290+ else if ((size(az) == 1))
291+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f)]
292+ else if ((size(az) == 2))
293+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), f)]
294+ else if ((size(az) == 3))
295+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), f), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), f)]
296+ else if ((size(az) == 4))
297+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(aB, 1, fromBase58String(aG[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), f), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), f), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), f)]
298+ else if ((size(az) == 5))
299+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aB))), StringEntry((((((("fifth_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(aB, 1, fromBase58String(aG[0])), ScriptTransfer(aB, 1, fromBase58String(aH[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), f), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), f), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), f), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), f), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), f)]
300+ else if ((size(az) > 5))
301+ then throw("sorry! maximum limit of your cart is 5 items")
302+ else nil
303+ }
304+
305+
306+
307+@Callable(p)
308+func buyAllProducts_waves (az,aA) = {
309+ let aB = p.caller
310+ let aC = assetBalance(aB, g)
311+ let M = value(p.payments[0].amount)
312+ let aD = split(az[0], "_")
313+ let aE = split(az[1], "_")
314+ let aF = split(az[2], "_")
315+ let aG = split(az[3], "_")
316+ let aH = split(az[4], "_")
317+ if ((aA > M))
318+ then throw("your paying amount is wrong ")
319+ else if ((M > aC))
320+ then throw("Buyer does not have enough funds to complete the purchase.")
321+ else if ((size(az) == 1))
322+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit)]
323+ else if ((size(az) == 2))
324+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), unit)]
325+ else if ((size(az) == 3))
326+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), unit), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), unit)]
327+ else if ((size(az) == 4))
328+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(aB, 1, fromBase58String(aG[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), unit), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), unit), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit)]
329+ else if ((size(az) == 5))
330+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aD[0]) + "seller_address") + aD[1]) + "price") + aD[2]), ("buyer" + toString(aB))), StringEntry((((((("second_nft_Info=" + "nftId") + aE[0]) + "seller_address") + aE[1]) + "price") + aE[2]), ("buyer" + toString(aB))), StringEntry((((((("third_nft_Info=" + "nftId") + aF[0]) + "seller_address") + aF[1]) + "price") + aF[2]), ("buyer" + toString(aB))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aB))), StringEntry((((((("fifth_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aB))), ScriptTransfer(aB, 1, fromBase58String(aD[0])), ScriptTransfer(aB, 1, fromBase58String(aE[0])), ScriptTransfer(aB, 1, fromBase58String(aF[0])), ScriptTransfer(aB, 1, fromBase58String(aG[0])), ScriptTransfer(aB, 1, fromBase58String(aH[0])), ScriptTransfer(Address(fromBase58String(aD[1])), parseIntValue(aD[2]), unit), ScriptTransfer(Address(fromBase58String(aE[1])), parseIntValue(aE[2]), unit), ScriptTransfer(Address(fromBase58String(aF[1])), parseIntValue(aF[2]), unit), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit)]
331+ else if ((size(az) > 5))
31332 then throw("sorry! maximum limit of your cart is 5 items")
32333 else nil
33334 }
34335
35336

github/deemru/w8io/169f3d6 
70.04 ms