tx · HbHJtiTr29qYXBqd6mpeChfpyEF6xP2Rgjf9sBknSczN 3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37: -0.02100000 Waves 2024.05.15 13:29 [3107017] smart account 3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37 > SELF 0.00000000 Waves
{ "type": 13, "id": "HbHJtiTr29qYXBqd6mpeChfpyEF6xP2Rgjf9sBknSczN", "fee": 2100000, "feeAssetId": null, "timestamp": 1715768971175, "version": 2, "chainId": 84, "sender": "3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37", "senderPublicKey": "vmMXxwQAMUAoisvL193ptPiTtaWQqL5YNu2zs1ouTbY", "proofs": [ "3z1uDVuMSHb5C5K6p4JEcxWybxs9MvQmyRWvcqkc3aqtCdnPKuUtJGR6xf2F1XUB9Rv2GVEezHdqbKWVVCwrVzTr" ], "script": "base64:BwI9CAISAwoBCBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGFMACXNlcGFyYXRvcgICX18AB2NoYWluSWQJAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEACGNoYWluSWRXAQFXABBjb250cmFjdEZpbGVuYW1lAhdmdXR1cmVzX2NhbGN1bGF0b3IucmlkZQAFbXVsdDgAgMLXLwAMbXVsdDE4QmlnSW50CQC2AgEAgICQu7rWrfANAA13YXZlc0RlY2ltYWxzAAgADHVzZHREZWNpbWFscwAGAAt3YXZlc1N0cmluZwIFV0FWRVMADXF1ZXVlSXRlbVNpemUAIAAEYmlnMAkAtgIBAAAACWtNdWx0aXNpZwIMJXNfX211bHRpc2lnAQdrU3RhdHVzAgRkYXBwBHR4SWQJALkJAgkAzAgCAgolc19fc3RhdHVzCQDMCAIFBGRhcHAJAMwIAgUEdHhJZAUDbmlsBQlzZXBhcmF0b3IACWtTaHV0ZG93bgIMJXNfX3NodXRkb3duAAtrUHVibGljS2V5cwIOJXNfX3B1YmxpY0tleXMAEWtNYXRjaGVyUHVibGljS2V5AhQlc19fbWF0Y2hlclB1YmxpY0tleQEFdG9YMTgCB29yaWdWYWwNb3JpZ1NjYWxlTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFDG11bHQxOEJpZ0ludAkAtgIBBQ1vcmlnU2NhbGVNdWx0AQdmcm9tWDE4AgN2YWwPcmVzdWx0U2NhbGVNdWx0CQCgAwEJALwCAwUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUMbXVsdDE4QmlnSW50AQ92YWxpZGF0ZUFkZHJlc3MBB2FkZHJlc3MJAQlpc0RlZmluZWQBCQCmCAEFB2FkZHJlc3MBB3dyYXBFcnIBAXMJAKwCAgkArAICBRBjb250cmFjdEZpbGVuYW1lAgI6IAUBcwEIdGhyb3dFcnIBAXMJAAIBCQEHd3JhcEVycgEFAXMBDHBhcnNlQXNzZXRJZAEFaW5wdXQDCQAAAgUFaW5wdXQFC3dhdmVzU3RyaW5nBQR1bml0CQDZBAEFBWlucHV0AQ9hc3NldElkVG9TdHJpbmcBBWlucHV0AwkAAAIFBWlucHV0BQR1bml0BQt3YXZlc1N0cmluZwkA2AQBCQEFdmFsdWUBBQVpbnB1dAESZ2V0QXNzZXRJbmZvT3JGYWlsAQdhc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUHYXNzZXRJZAkBB3dyYXBFcnIBAhJpbnZhbGlkIGFzc2V0IGluZm8BFmdldEFzc2V0RGVjaW1hbHNPckZhaWwBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIEVW5pdAUNd2F2ZXNEZWNpbWFscwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAdhc3NldElkBQckbWF0Y2gwCAkBEmdldEFzc2V0SW5mb09yRmFpbAEFB2Fzc2V0SWQIZGVjaW1hbHMJAAIBAgtNYXRjaCBlcnJvcgEFcG93MTABAW4JAGwGAAoAAAUBbgAAAAAFBERPV04BDXBvdzEwRGVjaW1hbHMBB2Fzc2V0SWQJAQVwb3cxMAEJARZnZXRBc3NldERlY2ltYWxzT3JGYWlsAQUHYXNzZXRJZAAPa0ZhY3RvcnlBZGRyZXNzAhIlc19fZmFjdG9yeUFkZHJlc3MAFGZhY3RvcnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMFD2tGYWN0b3J5QWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IADmZhY3RvcnlBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIFFGZhY3RvcnlBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECF2ludmFsaWQgZmFjdG9yeSBhZGRyZXNzAAxrVXNkdEFzc2V0SWQCDyVzX191c2R0QXNzZXRJZAARdXNkdEFzc2V0SWRPcHRpb24EByRtYXRjaDAJAJ0IAgUOZmFjdG9yeUFkZHJlc3MFDGtVc2R0QXNzZXRJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAQxwYXJzZUFzc2V0SWQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgALdXNkdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgURdXNkdEFzc2V0SWRPcHRpb24JAQd3cmFwRXJyAQIVaW52YWxpZCB1c2R0IGFzc2V0IGlkAA5rUHJpY2VzQWRkcmVzcwIVJXNfX2NhbGN1bGF0b3JBZGRyZXNzAAhzaHV0ZG93bgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ5mYWN0b3J5QWRkcmVzcwUJa1NodXRkb3duBwELbXVzdEFkZHJlc3MCBmNhbGxlcgdhZGRyZXNzAwkAAAIFBmNhbGxlcgUHYWRkcmVzcwYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkAQhtdXN0VGhpcwEGY2FsbGVyCQELbXVzdEFkZHJlc3MCBQZjYWxsZXIFBHRoaXMBC211c3RGYWN0b3J5AQZjYWxsZXIJAQttdXN0QWRkcmVzcwIFBmNhbGxlcgUOZmFjdG9yeUFkZHJlc3MBCW11c3RBZG1pbgEPY2FsbGVyUHVibGljS2V5BAhtdWx0aXNpZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUOZmFjdG9yeUFkZHJlc3MFCWtNdWx0aXNpZwQOcHVibGljS2V5c0xpc3QJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUIbXVsdGlzaWcFC2tQdWJsaWNLZXlzBQlzZXBhcmF0b3IDCQEPY29udGFpbnNFbGVtZW50AgUOcHVibGljS2V5c0xpc3QJANgEAQUPY2FsbGVyUHVibGljS2V5BgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQADmtBY2NvdW50U2NyaXB0AhElc19fYWNjb3VudFNjcmlwdAENYWNjb3VudFNjcmlwdAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwUOa0FjY291bnRTY3JpcHQJAQd3cmFwRXJyAQIZYWNjb3VudCBzY3JpcHQgaXMgbm90IHNldAANa1Jld2FyZEFtb3VudAIQJXNfX3Jld2FyZEFtb3VudAEMcmV3YXJkQW1vdW50AAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzBQ1rUmV3YXJkQW1vdW50CQEHd3JhcEVycgECGHJld2FyZCBhbW91bnQgaXMgbm90IHNldAAOa0FjY291bnRzTGltaXQCESVzX19hY2NvdW50c0xpbWl0ABRhY2NvdW50c0xpbWl0RGVmYXVsdAAUAQ1hY2NvdW50c0xpbWl0AAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwUOa0FjY291bnRzTGltaXQFFGFjY291bnRzTGltaXREZWZhdWx0AQprRGVwb3NpdGVkAQ5hY2NvdW50QWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIJZGVwb3NpdGVkCQDMCAIJAKUIAQUOYWNjb3VudEFkZHJlc3MFA25pbAUJc2VwYXJhdG9yAQ9kZXBvc2l0ZWRPcHRpb24BDmFjY291bnRBZGRyZXNzCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEKa0RlcG9zaXRlZAEFDmFjY291bnRBZGRyZXNzAQdrQ3JlZGl0Ag5hY2NvdW50QWRkcmVzcwdhc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICBmNyZWRpdAkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQdhc3NldElkBQNuaWwFCXNlcGFyYXRvcgEJa0xldmVyYWdlAQ5hY2NvdW50QWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIIbGV2ZXJhZ2UJAMwIAgkApQgBBQ5hY2NvdW50QWRkcmVzcwUDbmlsBQlzZXBhcmF0b3IBEWtTeW50aGV0aWNBc3NldElkAQtiYXNlQXNzZXRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgIQc3ludGhldGljQXNzZXRJZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQFA25pbAUJc2VwYXJhdG9yAQxrQmFzZUFzc2V0SWQBEHN5bnRoZXRpY0Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICC2Jhc2VBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBRBzeW50aGV0aWNBc3NldElkBQNuaWwFCXNlcGFyYXRvcgAUUkVRVUVTVF9TVEFUVVNfRU1QVFkAAAAUUkVRVUVTVF9TVEFUVVNfUkVBRFkAAQEOa1JlcXVlc3RTdGF0dXMBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkA2AQBBQlyZXF1ZXN0SWQJAMwIAgIGc3RhdHVzBQNuaWwFCXNlcGFyYXRvcgEYa0FjY291bnRDcmVhdG9yUHVibGljS2V5AQ5hY2NvdW50QWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgkApQgBBQ5hY2NvdW50QWRkcmVzcwkAzAgCAhBjcmVhdG9yUHVibGljS2V5BQNuaWwFCXNlcGFyYXRvcgEWa1JlcXVlc3RPd25lclB1YmxpY0tleQEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAkAzAgCAg5vd25lclB1YmxpY0tleQUDbmlsBQlzZXBhcmF0b3IBFWtSZXF1ZXN0QW1vdW50QXNzZXRJZAEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAkAzAgCAg1hbW91bnRBc3NldElkBQNuaWwFCXNlcGFyYXRvcgEUa1JlcXVlc3RQcmljZUFzc2V0SWQBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkA2AQBBQlyZXF1ZXN0SWQJAMwIAgIMcHJpY2VBc3NldElkBQNuaWwFCXNlcGFyYXRvcgEca1JlcXVlc3RJZFRvQWNjb3VudFB1YmxpY0tleQEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAkAzAgCAhtyZXF1ZXN0SWRUb0FjY291bnRQdWJsaWNLZXkFA25pbAUJc2VwYXJhdG9yARprQWNjb3VudEFkZHJlc3NUb1JlcXVlc3RJZAEOYWNjb3VudEFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAIJAKUIAQUOYWNjb3VudEFkZHJlc3MJAMwIAgIZYWNjb3VudEFkZHJlc3NUb1JlcXVlc3RJZAUDbmlsBQlzZXBhcmF0b3IBDmtSZXF1ZXN0c1F1ZXVlAAkAuQkCCQDMCAICAiVzCQDMCAICDXJlcXVlc3RzUXVldWUFA25pbAUJc2VwYXJhdG9yAQ1yZXF1ZXN0c1F1ZXVlAAkBC3ZhbHVlT3JFbHNlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBDmtSZXF1ZXN0c1F1ZXVlAAEAAQ5rQWNjb3VudHNRdWV1ZQAJALkJAgkAzAgCAgIlcwkAzAgCAg1hY2NvdW50c1F1ZXVlBQNuaWwFCXNlcGFyYXRvcgENYWNjb3VudHNRdWV1ZQAJAQt2YWx1ZU9yRWxzZQIJAJwIAgUOZmFjdG9yeUFkZHJlc3MJAQ5rQWNjb3VudHNRdWV1ZQABAAEQa1JlcXVlc3RzQnlPd25lcgEMb3duZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZXF1ZXN0cwkAzAgCCQClCAEFDG93bmVyQWRkcmVzcwUDbmlsBQlzZXBhcmF0b3IBD3JlcXVlc3RzQnlPd25lcgEMb3duZXJBZGRyZXNzCQELdmFsdWVPckVsc2UCCQCcCAIFDmZhY3RvcnlBZGRyZXNzCQEQa1JlcXVlc3RzQnlPd25lcgEFDG93bmVyQWRkcmVzcwEAAQxrUGFpckFsbG93ZWQCDWFtb3VudEFzc2V0SWQMcHJpY2VBc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQ1hbW91bnRBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQxwcmljZUFzc2V0SWQJAMwIAgILcGFpckFsbG93ZWQFA25pbAUJc2VwYXJhdG9yAQtwYWlyQWxsb3dlZAINYW1vdW50QXNzZXRJZAxwcmljZUFzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUOZmFjdG9yeUFkZHJlc3MJAQxrUGFpckFsbG93ZWQCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQHAQZrUHJpY2UBB2Fzc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUHYXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBD2dldEN1cnJlbnRQcmljZQEHYXNzZXRJZAQQbWF0Y2hlclB1YmxpY0tleQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUOZmFjdG9yeUFkZHJlc3MFEWtNYXRjaGVyUHVibGljS2V5CQEHd3JhcEVycgECGmludmFsaWQgbWF0Y2hlciBwdWJsaWMga2V5BA5tYXRjaGVyQWRkcmVzcwkApwgBBRBtYXRjaGVyUHVibGljS2V5BAVwcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDm1hdGNoZXJBZGRyZXNzCQEGa1ByaWNlAQUHYXNzZXRJZAkBB3dyYXBFcnIBCQCsAgICGWludmFsaWQgcHJpY2UsIGFzc2V0SWQgPSAJAQ9hc3NldElkVG9TdHJpbmcBBQdhc3NldElkBQVwcmljZQEPY2FsY1RvdGFsQ3JlZGl0AwdjcmVkaXRBB2NyZWRpdEIMY3VycmVudFByaWNlCQC3AgIJALwCAwUHY3JlZGl0QQUMY3VycmVudFByaWNlBQxtdWx0MThCaWdJbnQFB2NyZWRpdEIBEGNhbGNUb3RhbEJhbGFuY2UDCGJhbGFuY2VBCGJhbGFuY2VCDGN1cnJlbnRQcmljZQkAtwICCQC8AgMFCGJhbGFuY2VBBQxjdXJyZW50UHJpY2UFDG11bHQxOEJpZ0ludAUIYmFsYW5jZUIBB2NhbGNQbmwCDHRvdGFsQmFsYW5jZQt0b3RhbENyZWRpdAkAuAICBQx0b3RhbEJhbGFuY2UFC3RvdGFsQ3JlZGl0ARNjYWxjQ3JlZGl0QXZhaWxhYmxlAwdkZXBvc2l0CGxldmVyYWdlC3RvdGFsQ3JlZGl0CQC4AgIJALwCAwUHZGVwb3NpdAUIbGV2ZXJhZ2UFDG11bHQxOEJpZ0ludAULdG90YWxDcmVkaXQBEGNhbGNSZWFsSW5DcmVkaXQCBmNyZWRpdAdiYWxhbmNlAwkAvwICBQZjcmVkaXQFBGJpZzAJALgCAgUGY3JlZGl0BQdiYWxhbmNlBQRiaWcwAQhjYWxjRnJlZQIGY3JlZGl0B2JhbGFuY2UDCQC/AgIFBmNyZWRpdAUEYmlnMAkAuAICBQdiYWxhbmNlBQZjcmVkaXQFBGJpZzABDmNhbGNTaG9ydFByaWNlAgRmcmVlDHJlYWxJbkNyZWRpdAMJAL8CAgUMcmVhbEluQ3JlZGl0BQRiaWcwCQCYAwEJAMwIAgUEYmlnMAkAzAgCCQC8AgMFBGZyZWUFDG11bHQxOEJpZ0ludAUMcmVhbEluQ3JlZGl0BQNuaWwFBGJpZzABDWNhbGNMb25nUHJpY2UCBGZyZWUMcmVhbEluQ3JlZGl0AwkAvwICBQxyZWFsSW5DcmVkaXQFBGJpZzAJAJgDAQkAzAgCBQRiaWcwCQDMCAIJALwCAwUMcmVhbEluQ3JlZGl0BQxtdWx0MThCaWdJbnQFBGZyZWUFA25pbAUEYmlnMAEPY2FsY1N0YXJ0TWFyZ2luBA1yZWFsSW5DcmVkaXRBDXJlYWxJbkNyZWRpdEIMY3VycmVudFByaWNlDnNldHRpbmdzTWFyZ2luCQC8AgMJALcCAgkAvAIDBQ1yZWFsSW5DcmVkaXRBBQxjdXJyZW50UHJpY2UFDG11bHQxOEJpZ0ludAUNcmVhbEluQ3JlZGl0QgUOc2V0dGluZ3NNYXJnaW4FDG11bHQxOEJpZ0ludAEQY2FsY01hcmdpblN1cHBseQMUc2V0dGluZ3NNYXJnaW5TdXBwbHkOc2V0dGluZ3NNYXJnaW4Lc3RhcnRNYXJnaW4JALwCAwUUc2V0dGluZ3NNYXJnaW5TdXBwbHkFC3N0YXJ0TWFyZ2luBQ5zZXR0aW5nc01hcmdpbgEUY2FsY0xpcXVpZGF0aW9uUHJpY2UGB2RlcG9zaXQMbWFyZ2luU3VwcGx5DXJlYWxJbkNyZWRpdEENcmVhbEluQ3JlZGl0QgpzaG9ydFByaWNlCWxvbmdQcmljZQQRbGlxdWlkYXRpb25QcmljZUEDCQBmAgUNcmVhbEluQ3JlZGl0QQAACQBkAgkAaQIJAGUCBQdkZXBvc2l0BQxtYXJnaW5TdXBwbHkFDXJlYWxJbkNyZWRpdEEFCnNob3J0UHJpY2UAAAQRbGlxdWlkYXRpb25QcmljZUIDCQBmAgUNcmVhbEluQ3JlZGl0QgAACQBlAgUJbG9uZ1ByaWNlCQBpAgkAZQIFB2RlcG9zaXQFDG1hcmdpblN1cHBseQkAaQIFDXJlYWxJbkNyZWRpdEEFCWxvbmdQcmljZQAACQBkAgURbGlxdWlkYXRpb25QcmljZUEFEWxpcXVpZGF0aW9uUHJpY2VCARlnZXRBc3NldHNCeUFjY291bnRBZGRyZXNzAQ5hY2NvdW50QWRkcmVzcwQJcmVxdWVzdElkCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ5mYWN0b3J5QWRkcmVzcwkBGmtBY2NvdW50QWRkcmVzc1RvUmVxdWVzdElkAQUOYWNjb3VudEFkZHJlc3MJAQd3cmFwRXJyAQIwaW52YWxpZCBhY2NvdW50IGFkZHJlc3M6IHJlcXVlc3QgaWQgaXMgdW5kZWZpbmVkBA1hbW91bnRBc3NldElkCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEVa1JlcXVlc3RBbW91bnRBc3NldElkAQUJcmVxdWVzdElkCQEHd3JhcEVycgECF2ludmFsaWQgYW1vdW50IGFzc2V0IGlkBAxwcmljZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARRrUmVxdWVzdFByaWNlQXNzZXRJZAEFCXJlcXVlc3RJZAkBB3dyYXBFcnIBAhdpbnZhbGlkIGFtb3VudCBwcmljZSBpZAkAlAoCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQKAWkBBGluaXQBEWZhY3RvcnlBZGRyZXNzU3RyBAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQgFAWkGY2FsbGVyAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tGYWN0b3J5QWRkcmVzcwURZmFjdG9yeUFkZHJlc3NTdHIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5yZXF1ZXN0QWNjb3VudAIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzBBBhbW91bnRBc3NldElkU3RyCQCRAwIFBGFyZ3MAAAQPcHJpY2VBc3NldElkU3RyCQCRAwIFBGFyZ3MAAQQLdXNlckFkZHJlc3MJAKcIAQUPY2FsbGVyUHVibGljS2V5BAlyZXF1ZXN0SWQJAPcDAQkAywECCQDLAQIIBQt1c2VyQWRkcmVzcwVieXRlcwkA2QQBBRBhbW91bnRBc3NldElkU3RyCQDZBAEFD3ByaWNlQXNzZXRJZFN0cgQNYW1vdW50QXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFEGFtb3VudEFzc2V0SWRTdHIEDHByaWNlQXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFD3ByaWNlQXNzZXRJZFN0cgQSdXNlclJlcXVlc3RzTnVtYmVyCQBpAgkAsQIBCQEQa1JlcXVlc3RzQnlPd25lcgEFC3VzZXJBZGRyZXNzBQ1xdWV1ZUl0ZW1TaXplBAZjaGVja3MJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAhUxIHBheW1lbnQgaXMgcmVxdWlyZWQJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQGCQEIdGhyb3dFcnIBAg1pbnZhbGlkIGFzc2V0CQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAQxyZXdhcmRBbW91bnQABgkBCHRocm93RXJyAQIOaW52YWxpZCBhbW91bnQJAMwIAgMJAQtwYWlyQWxsb3dlZAIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAYJAQh0aHJvd0VycgECE3BhaXIgaXMgbm90IGFsbG93ZWQJAMwIAgMJAAACCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEOa1JlcXVlc3RTdGF0dXMBBQlyZXF1ZXN0SWQFBHVuaXQGCQEIdGhyb3dFcnIBAhlhY2NvdW50IGlzIGFscmVhZHkgZXhpc3RzCQDMCAIDCQBmAgkBDWFjY291bnRzTGltaXQABRJ1c2VyUmVxdWVzdHNOdW1iZXIGCQEIdGhyb3dFcnIBCQCsAgICEmFjY291bnRzIGxpbWl0IGlzIAkApAMBCQENYWNjb3VudHNMaW1pdAAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNJHQwMTA3ODIxMjEzOAMJAAACCQDIAQEJAQ1hY2NvdW50c1F1ZXVlAAAACQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOZmFjdG9yeUFkZHJlc3MJAQxyZXdhcmRBbW91bnQABQR1bml0BQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMaW50ZWdlckVudHJ5CQDMCAIJAQ5rUmVxdWVzdFN0YXR1cwEFCXJlcXVlc3RJZAkAzAgCBRRSRVFVRVNUX1NUQVRVU19FTVBUWQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBDmtSZXF1ZXN0c1F1ZXVlAAkAzAgCCQDLAQIJAQ1yZXF1ZXN0c1F1ZXVlAAUJcmVxdWVzdElkBQNuaWwFA25pbAUDbmlsBBBhY2NvdW50UHVibGljS2V5CQDJAQIJAQ1hY2NvdW50c1F1ZXVlAAUNcXVldWVJdGVtU2l6ZQQOYWNjb3VudEFkZHJlc3MJAKcIAQUQYWNjb3VudFB1YmxpY0tleQQOY3JlYXRvckFkZHJlc3MJAKcIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDmZhY3RvcnlBZGRyZXNzCQEYa0FjY291bnRDcmVhdG9yUHVibGljS2V5AQUOYWNjb3VudEFkZHJlc3MJAQd3cmFwRXJyAQIaaW52YWxpZCBjcmVhdG9yIHB1YmxpYyBrZXkJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5jcmVhdG9yQWRkcmVzcwkBDHJld2FyZEFtb3VudAAFBHVuaXQFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEOa0FjY291bnRzUXVldWUACQDMCAIJAMoBAgkBDWFjY291bnRzUXVldWUABQ1xdWV1ZUl0ZW1TaXplBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgxpbnRlZ2VyRW50cnkJAMwIAgkBDmtSZXF1ZXN0U3RhdHVzAQUJcmVxdWVzdElkCQDMCAIFFFJFUVVFU1RfU1RBVFVTX1JFQURZBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEca1JlcXVlc3RJZFRvQWNjb3VudFB1YmxpY0tleQEFCXJlcXVlc3RJZAkAzAgCBRBhY2NvdW50UHVibGljS2V5BQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBBQ5hY2NvdW50QWRkcmVzcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAUDbmlsBQNuaWwFA25pbAQHYWN0aW9ucwgFDSR0MDEwNzgyMTIxMzgCXzEEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMTA3ODIxMjEzOAJfMgkAlAoCBQdhY3Rpb25zCQDOCAIFDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC2JpbmFyeUVudHJ5CQDMCAIJARZrUmVxdWVzdE93bmVyUHVibGljS2V5AQUJcmVxdWVzdElkCQDMCAIFD2NhbGxlclB1YmxpY0tleQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBEGtSZXF1ZXN0c0J5T3duZXIBBQt1c2VyQWRkcmVzcwkAzAgCCQDLAQIJAQ9yZXF1ZXN0c0J5T3duZXIBBQt1c2VyQWRkcmVzcwUJcmVxdWVzdElkBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEVa1JlcXVlc3RBbW91bnRBc3NldElkAQUJcmVxdWVzdElkCQDMCAIFEGFtb3VudEFzc2V0SWRTdHIFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC3N0cmluZ0VudHJ5CQDMCAIJARRrUmVxdWVzdFByaWNlQXNzZXRJZAEFCXJlcXVlc3RJZAkAzAgCBQ9wcmljZUFzc2V0SWRTdHIFA25pbAUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKYWRkQWNjb3VudAIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzBBBjcmVhdG9yUHVibGljS2V5CQDZBAEJAJEDAgUEYXJncwAABBBhY2NvdW50UHVibGljS2V5BQ9jYWxsZXJQdWJsaWNLZXkEDmFjY291bnRBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQOY3JlYXRvckFkZHJlc3MJAKcIAQUQY3JlYXRvclB1YmxpY0tleQQGY2hlY2tzCQDMCAIDCQAAAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBGGtBY2NvdW50Q3JlYXRvclB1YmxpY0tleQEFDmFjY291bnRBZGRyZXNzBQR1bml0BgkBCHRocm93RXJyAQIZYWNjb3VudCBpcyBhbHJlYWR5IGV4aXN0cwkAzAgCAwQHJG1hdGNoMAkA8QcBBQ5hY2NvdW50QWRkcmVzcwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQAAAgUBYgkA8RUBCQENYWNjb3VudFNjcmlwdAAHBgkBCHRocm93RXJyAQIOaW52YWxpZCBzY3JpcHQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNJHQwMTMzOTMxNDM5NQMJAAACCQDIAQEJAQ1yZXF1ZXN0c1F1ZXVlAAAACQCUCgIFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEOa0FjY291bnRzUXVldWUACQDMCAIJAMsBAgkBDWFjY291bnRzUXVldWUABRBhY2NvdW50UHVibGljS2V5BQNuaWwFA25pbAUDbmlsBAlyZXF1ZXN0SWQJAMkBAgkBDXJlcXVlc3RzUXVldWUABQ1xdWV1ZUl0ZW1TaXplCQCUCgIFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgxpbnRlZ2VyRW50cnkJAMwIAgkBDmtSZXF1ZXN0U3RhdHVzAQUJcmVxdWVzdElkCQDMCAIFFFJFUVVFU1RfU1RBVFVTX1JFQURZBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEca1JlcXVlc3RJZFRvQWNjb3VudFB1YmxpY0tleQEFCXJlcXVlc3RJZAkAzAgCBRBhY2NvdW50UHVibGljS2V5BQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEOa1JlcXVlc3RzUXVldWUACQDMCAIJAMoBAgkBDXJlcXVlc3RzUXVldWUABQ1xdWV1ZUl0ZW1TaXplBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBBQ5hY2NvdW50QWRkcmVzcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwINdHJhbnNmZXJXYXZlcwkAzAgCCAUOY3JlYXRvckFkZHJlc3MFYnl0ZXMJAMwIAgkBDHJld2FyZEFtb3VudAAFA25pbAUDbmlsBQNuaWwEB2FjdGlvbnMIBQ0kdDAxMzM5MzE0Mzk1Al8xBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDEzMzkzMTQzOTUCXzIJAJQKAgUHYWN0aW9ucwkAzggCBQ5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEYa0FjY291bnRDcmVhdG9yUHVibGljS2V5AQUOYWNjb3VudEFkZHJlc3MJAMwIAgUQY3JlYXRvclB1YmxpY0tleQUDbmlsBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdkZXBvc2l0Ag9jYWxsZXJQdWJsaWNLZXkEYXJncwQHcGF5bWVudAkAkQMCCAUBaQhwYXltZW50cwAABAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAhUxIHBheW1lbnQgaXMgcmVxdWlyZWQJAMwIAgMJAAACCAUHcGF5bWVudAdhc3NldElkBQt1c2R0QXNzZXRJZAYJAQh0aHJvd0VycgECDWludmFsaWQgYXNzZXQFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQOYWNjb3VudEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFBGFyZ3MAAAkBB3dyYXBFcnIBAhdpbnZhbGlkIGFjY291bnQgYWRkcmVzcwQHYWN0aW9ucwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5hY2NvdW50QWRkcmVzcwgFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkBQNuaWwEDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGludGVnZXJFbnRyeQkAzAgCCQEKa0RlcG9zaXRlZAEFDmFjY291bnRBZGRyZXNzCQDMCAIJAGQCCQELdmFsdWVPckVsc2UCCQEPZGVwb3NpdGVkT3B0aW9uAQUOYWNjb3VudEFkZHJlc3MAAAgFB3BheW1lbnQGYW1vdW50BQNuaWwFA25pbAUDbmlsCQCUCgIFB2FjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3Ag9jYWxsZXJQdWJsaWNLZXkEYXJncwQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyBQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEC3VzZXJBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQOYWNjb3VudEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFBGFyZ3MAAAkBB3dyYXBFcnIBAhdpbnZhbGlkIGFjY291bnQgYWRkcmVzcwQGYW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQRhcmdzAAEJAQd3cmFwRXJyAQIOaW52YWxpZCBhbW91bnQEB2Fzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFBGFyZ3MAAgQLaW52b2NhdGlvbnMJAMwIAgkA/AcEBQ5hY2NvdW50QWRkcmVzcwINdHJhbnNmZXJBc3NldAkAzAgCCAULdXNlckFkZHJlc3MFYnl0ZXMJAMwIAgUGYW1vdW50CQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZib3Jyb3cCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQOYWNjb3VudEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFBGFyZ3MAAAkBB3dyYXBFcnIBAhdpbnZhbGlkIGFjY291bnQgYWRkcmVzcwQHYXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEJAJEDAgUEYXJncwABBAlhbW91bnRSYXcJALYJAQkAkQMCBQRhcmdzAAIEDSR0MDE2NTAyMTY1NzkJARlnZXRBc3NldHNCeUFjY291bnRBZGRyZXNzAQUOYWNjb3VudEFkZHJlc3MEDWFtb3VudEFzc2V0SWQIBQ0kdDAxNjUwMjE2NTc5Al8xBAxwcmljZUFzc2V0SWQIBQ0kdDAxNjUwMjE2NTc5Al8yBAlkZXBvc2l0ZWQJAQV0b1gxOAIJAQt2YWx1ZU9yRWxzZQIJAQ9kZXBvc2l0ZWRPcHRpb24BBQ5hY2NvdW50QWRkcmVzcwAACQENcG93MTBEZWNpbWFscwEFDHByaWNlQXNzZXRJZAQMY3VycmVudFByaWNlCQEFdG9YMTgCCQEPZ2V0Q3VycmVudFByaWNlAQUNYW1vdW50QXNzZXRJZAkBDXBvdzEwRGVjaW1hbHMBBQt1c2R0QXNzZXRJZAQHY3JlZGl0QQkBBXRvWDE4AgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBB2tDcmVkaXQCBQ5hY2NvdW50QWRkcmVzcwUNYW1vdW50QXNzZXRJZAAACQENcG93MTBEZWNpbWFscwEFDWFtb3VudEFzc2V0SWQEB2NyZWRpdEIJAQV0b1gxOAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQdrQ3JlZGl0AgUOYWNjb3VudEFkZHJlc3MFDHByaWNlQXNzZXRJZAAACQENcG93MTBEZWNpbWFscwEFDHByaWNlQXNzZXRJZAQLdG90YWxDcmVkaXQJAQ9jYWxjVG90YWxDcmVkaXQDBQdjcmVkaXRBBQdjcmVkaXRCBQxjdXJyZW50UHJpY2UED2xldmVyYWdlRGVmYXVsdAADBAhsZXZlcmFnZQkBBXRvWDE4AgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBCWtMZXZlcmFnZQEFDmFjY291bnRBZGRyZXNzBQ9sZXZlcmFnZURlZmF1bHQAAQQPY3JlZGl0QXZhaWxhYmxlCQETY2FsY0NyZWRpdEF2YWlsYWJsZQMFCWRlcG9zaXRlZAUIbGV2ZXJhZ2UFC3RvdGFsQ3JlZGl0CQCUCgIFA25pbAkAzAgCCQEHZnJvbVgxOAIFD2NyZWRpdEF2YWlsYWJsZQkBDXBvdzEwRGVjaW1hbHMBBQxwcmljZUFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVyZXBheQIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBzZXRQYWlyQWxsb3dhbmNlAg9jYWxsZXJQdWJsaWNLZXkEYXJncwQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIJAQltdXN0QWRtaW4BBQ9jYWxsZXJQdWJsaWNLZXkFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQQYW1vdW50QXNzZXRJZFN0cgkAkQMCBQRhcmdzAAAED3ByaWNlQXNzZXRJZFN0cgkAkQMCBQRhcmdzAAEECGFsbG93U3RyCQCRAwIFBGFyZ3MAAgQNYW1vdW50QXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFEGFtb3VudEFzc2V0SWRTdHIEDHByaWNlQXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFD3ByaWNlQXNzZXRJZFN0cgQFYWxsb3cJAAACBQhhbGxvd1N0cgIEdHJ1ZQQLaW52b2NhdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMYm9vbGVhbkVudHJ5CQDMCAIJAQxrUGFpckFsbG93ZWQCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQJAMwIAgUFYWxsb3cFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFhZGRTeW50aGV0aWNBc3NldAIPY2FsbGVyUHVibGljS2V5BGFyZ3MEDmJhc2VBc3NldElkU3RyCQCRAwIFBGFyZ3MAAAQLYmFzZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBQ5iYXNlQXNzZXRJZFN0cgQQc3ludGhldGljQXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIJAMwIAgkBCW11c3RBZG1pbgEFD2NhbGxlclB1YmxpY0tleQkAzAgCAwkAAAIJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARFrU3ludGhldGljQXNzZXRJZAEFC2Jhc2VBc3NldElkBQR1bml0BgkBCHRocm93RXJyAQISaW52YWxpZCBiYXNlIGFzc2V0CQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIQaW52YWxpZCBwYXltZW50cwkAzAgCAwkAAAIJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJAQxrQmFzZUFzc2V0SWQBBRBzeW50aGV0aWNBc3NldElkBQR1bml0BgkBCHRocm93RXJyAQIXaW52YWxpZCBzeW50aGV0aWMgYXNzZXQFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQLaW52b2NhdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILc3RyaW5nRW50cnkJAMwIAgkBEWtTeW50aGV0aWNBc3NldElkAQULYmFzZUFzc2V0SWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFEHN5bnRoZXRpY0Fzc2V0SWQFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC3N0cmluZ0VudHJ5CQDMCAIJAQxrQmFzZUFzc2V0SWQBBRBzeW50aGV0aWNBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFC2ludm9jYXRpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmRvU2h1dGRvd24CD2NhbGxlclB1YmxpY0tleQRhcmdzBAZjaGVja3MJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIJAQltdXN0QWRtaW4BBQ9jYWxsZXJQdWJsaWNLZXkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQLaW52b2NhdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMYm9vbGVhbkVudHJ5CQDMCAIFCWtTaHV0ZG93bgkAzAgCBgUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFC2ludm9jYXRpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAMDCQEJaXNEZWZpbmVkAQUUZmFjdG9yeUFkZHJlc3NPcHRpb24JAQlpc0RlZmluZWQBCQCdCAIFDmZhY3RvcnlBZGRyZXNzBQlrTXVsdGlzaWcHBAckbWF0Y2gwCQCdCAIFDmZhY3RvcnlBZGRyZXNzBQlrTXVsdGlzaWcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAhtdWx0aXNpZwUHJG1hdGNoMAQJc3RhdHVzS2V5CQEHa1N0YXR1cwIJAKUIAQUEdGhpcwkA2AQBCAUCdHgCaWQEBnN0YXR1cwkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhtdWx0aXNpZwUJc3RhdHVzS2V5BwUGc3RhdHVzBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleauwFXg=", "height": 3107017, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CD5g85vYA2m5vvcK62RtTKu1afc3XFYE1UFzpK4KHEit Next: DWTqoGQSuGF6NAXgKqhvQSAXoa2ZikgzsGJF9ao5Mq5F Diff:
Old | New | Differences | |
---|---|---|---|
282 | 282 | ||
283 | 283 | ||
284 | 284 | func bB (al) = { | |
285 | - | let aw = fromBase58String(valueOrErrorMessage(getString(P, aC(al)), A("invalid account address"))) | |
285 | + | let aw = fromBase58String(valueOrErrorMessage(getString(P, aC(al)), A("invalid account address: request id is undefined"))) | |
286 | 286 | let aL = D(valueOrErrorMessage(getString(P, az(aw)), A("invalid amount asset id"))) | |
287 | 287 | let aM = D(valueOrErrorMessage(getString(P, aA(aw)), A("invalid amount price id"))) | |
288 | 288 | $Tuple2(aL, aM) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 7 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = take(drop(this.bytes, 1), 1) | |
7 | 7 | ||
8 | 8 | let c = base58'2W' | |
9 | 9 | ||
10 | 10 | let d = "futures_calculator.ride" | |
11 | 11 | ||
12 | 12 | let e = 100000000 | |
13 | 13 | ||
14 | 14 | let f = toBigInt(1000000000000000000) | |
15 | 15 | ||
16 | 16 | let g = 8 | |
17 | 17 | ||
18 | 18 | let h = 6 | |
19 | 19 | ||
20 | 20 | let i = "WAVES" | |
21 | 21 | ||
22 | 22 | let j = 32 | |
23 | 23 | ||
24 | 24 | let k = toBigInt(0) | |
25 | 25 | ||
26 | 26 | let l = "%s__multisig" | |
27 | 27 | ||
28 | 28 | func m (n,o) = makeString(["%s__status", n, o], a) | |
29 | 29 | ||
30 | 30 | ||
31 | 31 | let p = "%s__shutdown" | |
32 | 32 | ||
33 | 33 | let q = "%s__publicKeys" | |
34 | 34 | ||
35 | 35 | let r = "%s__matcherPublicKey" | |
36 | 36 | ||
37 | 37 | func s (t,u) = fraction(toBigInt(t), f, toBigInt(u)) | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func v (w,x) = toInt(fraction(w, toBigInt(x), f)) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func y (z) = isDefined(addressFromString(z)) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func A (B) = ((d + ": ") + B) | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func C (B) = throw(A(B)) | |
50 | 50 | ||
51 | 51 | ||
52 | 52 | func D (E) = if ((E == i)) | |
53 | 53 | then unit | |
54 | 54 | else fromBase58String(E) | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func F (E) = if ((E == unit)) | |
58 | 58 | then i | |
59 | 59 | else toBase58String(value(E)) | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | func G (H) = valueOrErrorMessage(assetInfo(H), A("invalid asset info")) | |
63 | 63 | ||
64 | 64 | ||
65 | 65 | func I (H) = { | |
66 | 66 | let J = H | |
67 | 67 | if ($isInstanceOf(J, "Unit")) | |
68 | 68 | then g | |
69 | 69 | else if ($isInstanceOf(J, "ByteVector")) | |
70 | 70 | then { | |
71 | 71 | let H = J | |
72 | 72 | G(H).decimals | |
73 | 73 | } | |
74 | 74 | else throw("Match error") | |
75 | 75 | } | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func K (L) = pow(10, 0, L, 0, 0, DOWN) | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | func M (H) = K(I(H)) | |
82 | 82 | ||
83 | 83 | ||
84 | 84 | let N = "%s__factoryAddress" | |
85 | 85 | ||
86 | 86 | let O = { | |
87 | 87 | let J = getString(this, N) | |
88 | 88 | if ($isInstanceOf(J, "String")) | |
89 | 89 | then { | |
90 | 90 | let B = J | |
91 | 91 | addressFromString(B) | |
92 | 92 | } | |
93 | 93 | else if ($isInstanceOf(J, "Unit")) | |
94 | 94 | then unit | |
95 | 95 | else throw("Match error") | |
96 | 96 | } | |
97 | 97 | ||
98 | 98 | let P = valueOrErrorMessage(O, A("invalid factory address")) | |
99 | 99 | ||
100 | 100 | let Q = "%s__usdtAssetId" | |
101 | 101 | ||
102 | 102 | let R = { | |
103 | 103 | let J = getString(P, Q) | |
104 | 104 | if ($isInstanceOf(J, "String")) | |
105 | 105 | then { | |
106 | 106 | let B = J | |
107 | 107 | D(B) | |
108 | 108 | } | |
109 | 109 | else if ($isInstanceOf(J, "Unit")) | |
110 | 110 | then unit | |
111 | 111 | else throw("Match error") | |
112 | 112 | } | |
113 | 113 | ||
114 | 114 | let S = valueOrErrorMessage(R, A("invalid usdt asset id")) | |
115 | 115 | ||
116 | 116 | let T = "%s__calculatorAddress" | |
117 | 117 | ||
118 | 118 | let U = valueOrElse(getBoolean(P, p), false) | |
119 | 119 | ||
120 | 120 | func V (W,z) = if ((W == z)) | |
121 | 121 | then true | |
122 | 122 | else C("permission denied") | |
123 | 123 | ||
124 | 124 | ||
125 | 125 | func X (W) = V(W, this) | |
126 | 126 | ||
127 | 127 | ||
128 | 128 | func Y (W) = V(W, P) | |
129 | 129 | ||
130 | 130 | ||
131 | 131 | func Z (aa) = { | |
132 | 132 | let ab = addressFromStringValue(getStringValue(P, l)) | |
133 | 133 | let ac = split(getStringValue(ab, q), a) | |
134 | 134 | if (containsElement(ac, toBase58String(aa))) | |
135 | 135 | then true | |
136 | 136 | else C("not allowed") | |
137 | 137 | } | |
138 | 138 | ||
139 | 139 | ||
140 | 140 | let ad = "%s__accountScript" | |
141 | 141 | ||
142 | 142 | func ae () = valueOrErrorMessage(getBinary(P, ad), A("account script is not set")) | |
143 | 143 | ||
144 | 144 | ||
145 | 145 | let af = "%s__rewardAmount" | |
146 | 146 | ||
147 | 147 | func ag () = valueOrErrorMessage(getInteger(P, af), A("reward amount is not set")) | |
148 | 148 | ||
149 | 149 | ||
150 | 150 | let ah = "%s__accountsLimit" | |
151 | 151 | ||
152 | 152 | let ai = 20 | |
153 | 153 | ||
154 | 154 | func aj () = valueOrElse(getInteger(P, ah), ai) | |
155 | 155 | ||
156 | 156 | ||
157 | 157 | func ak (al) = makeString(["%s%s", "deposited", toString(al)], a) | |
158 | 158 | ||
159 | 159 | ||
160 | 160 | func am (al) = getInteger(P, ak(al)) | |
161 | 161 | ||
162 | 162 | ||
163 | 163 | func an (al,H) = makeString(["%s%s%s", "credit", toString(al), F(H)], a) | |
164 | 164 | ||
165 | 165 | ||
166 | 166 | func ao (al) = makeString(["%s%s", "leverage", toString(al)], a) | |
167 | 167 | ||
168 | 168 | ||
169 | 169 | func ap (aq) = makeString(["%s%s", "syntheticAssetId", F(aq)], a) | |
170 | 170 | ||
171 | 171 | ||
172 | 172 | func ar (as) = makeString(["%s%s", "baseAssetId", F(as)], a) | |
173 | 173 | ||
174 | 174 | ||
175 | 175 | let at = 0 | |
176 | 176 | ||
177 | 177 | let au = 1 | |
178 | 178 | ||
179 | 179 | func av (aw) = makeString(["%s%s", toBase58String(aw), "status"], a) | |
180 | 180 | ||
181 | 181 | ||
182 | 182 | func ax (al) = makeString(["%s%s", toString(al), "creatorPublicKey"], a) | |
183 | 183 | ||
184 | 184 | ||
185 | 185 | func ay (aw) = makeString(["%s%s", toBase58String(aw), "ownerPublicKey"], a) | |
186 | 186 | ||
187 | 187 | ||
188 | 188 | func az (aw) = makeString(["%s%s", toBase58String(aw), "amountAssetId"], a) | |
189 | 189 | ||
190 | 190 | ||
191 | 191 | func aA (aw) = makeString(["%s%s", toBase58String(aw), "priceAssetId"], a) | |
192 | 192 | ||
193 | 193 | ||
194 | 194 | func aB (aw) = makeString(["%s%s", toBase58String(aw), "requestIdToAccountPublicKey"], a) | |
195 | 195 | ||
196 | 196 | ||
197 | 197 | func aC (al) = makeString(["%s%s", toString(al), "accountAddressToRequestId"], a) | |
198 | 198 | ||
199 | 199 | ||
200 | 200 | func aD () = makeString(["%s", "requestsQueue"], a) | |
201 | 201 | ||
202 | 202 | ||
203 | 203 | func aE () = valueOrElse(getBinary(P, aD()), base58'') | |
204 | 204 | ||
205 | 205 | ||
206 | 206 | func aF () = makeString(["%s", "accountsQueue"], a) | |
207 | 207 | ||
208 | 208 | ||
209 | 209 | func aG () = valueOrElse(getBinary(P, aF()), base58'') | |
210 | 210 | ||
211 | 211 | ||
212 | 212 | func aH (aI) = makeString(["%s%s", "requests", toString(aI)], a) | |
213 | 213 | ||
214 | 214 | ||
215 | 215 | func aJ (aI) = valueOrElse(getBinary(P, aH(aI)), base58'') | |
216 | 216 | ||
217 | 217 | ||
218 | 218 | func aK (aL,aM) = makeString(["%s%s%s", F(aL), F(aM), "pairAllowed"], a) | |
219 | 219 | ||
220 | 220 | ||
221 | 221 | func aN (aL,aM) = valueOrElse(getBoolean(P, aK(aL, aM)), false) | |
222 | 222 | ||
223 | 223 | ||
224 | 224 | func aO (H) = makeString(["%s", F(H)], a) | |
225 | 225 | ||
226 | 226 | ||
227 | 227 | func aP (H) = { | |
228 | 228 | let aQ = fromBase58String(valueOrErrorMessage(getString(P, r), A("invalid matcher public key"))) | |
229 | 229 | let aR = addressFromPublicKey(aQ) | |
230 | 230 | let aS = valueOrErrorMessage(getInteger(aR, aO(H)), A(("invalid price, assetId = " + F(H)))) | |
231 | 231 | aS | |
232 | 232 | } | |
233 | 233 | ||
234 | 234 | ||
235 | 235 | func aT (aU,aV,aW) = (fraction(aU, aW, f) + aV) | |
236 | 236 | ||
237 | 237 | ||
238 | 238 | func aX (aY,aZ,aW) = (fraction(aY, aW, f) + aZ) | |
239 | 239 | ||
240 | 240 | ||
241 | 241 | func ba (bb,bc) = (bb - bc) | |
242 | 242 | ||
243 | 243 | ||
244 | 244 | func bd (be,bf,bc) = (fraction(be, bf, f) - bc) | |
245 | 245 | ||
246 | 246 | ||
247 | 247 | func bg (bh,bi) = if ((bh > k)) | |
248 | 248 | then (bh - bi) | |
249 | 249 | else k | |
250 | 250 | ||
251 | 251 | ||
252 | 252 | func bj (bh,bi) = if ((bh > k)) | |
253 | 253 | then (bi - bh) | |
254 | 254 | else k | |
255 | 255 | ||
256 | 256 | ||
257 | 257 | func bk (bl,bm) = if ((bm > k)) | |
258 | 258 | then max([k, fraction(bl, f, bm)]) | |
259 | 259 | else k | |
260 | 260 | ||
261 | 261 | ||
262 | 262 | func bn (bl,bm) = if ((bm > k)) | |
263 | 263 | then max([k, fraction(bm, f, bl)]) | |
264 | 264 | else k | |
265 | 265 | ||
266 | 266 | ||
267 | 267 | func bo (bp,bq,aW,br) = fraction((fraction(bp, aW, f) + bq), br, f) | |
268 | 268 | ||
269 | 269 | ||
270 | 270 | func bs (bt,br,bu) = fraction(bt, bu, br) | |
271 | 271 | ||
272 | 272 | ||
273 | 273 | func bv (be,bw,bp,bq,bx,by) = { | |
274 | 274 | let bz = if ((bp > 0)) | |
275 | 275 | then (((be - bw) / bp) + bx) | |
276 | 276 | else 0 | |
277 | 277 | let bA = if ((bq > 0)) | |
278 | 278 | then (by - ((be - bw) / (bp / by))) | |
279 | 279 | else 0 | |
280 | 280 | (bz + bA) | |
281 | 281 | } | |
282 | 282 | ||
283 | 283 | ||
284 | 284 | func bB (al) = { | |
285 | - | let aw = fromBase58String(valueOrErrorMessage(getString(P, aC(al)), A("invalid account address"))) | |
285 | + | let aw = fromBase58String(valueOrErrorMessage(getString(P, aC(al)), A("invalid account address: request id is undefined"))) | |
286 | 286 | let aL = D(valueOrErrorMessage(getString(P, az(aw)), A("invalid amount asset id"))) | |
287 | 287 | let aM = D(valueOrErrorMessage(getString(P, aA(aw)), A("invalid amount price id"))) | |
288 | 288 | $Tuple2(aL, aM) | |
289 | 289 | } | |
290 | 290 | ||
291 | 291 | ||
292 | 292 | @Callable(bC) | |
293 | 293 | func init (bD) = { | |
294 | 294 | let bE = X(bC.caller) | |
295 | 295 | if ((bE == bE)) | |
296 | 296 | then $Tuple2([StringEntry(N, bD)], unit) | |
297 | 297 | else throw("Strict value is not equal to itself.") | |
298 | 298 | } | |
299 | 299 | ||
300 | 300 | ||
301 | 301 | ||
302 | 302 | @Callable(bC) | |
303 | 303 | func requestAccount (aa,bF) = { | |
304 | 304 | let bG = [if (!(U)) | |
305 | 305 | then true | |
306 | 306 | else C("not allowed"), Y(bC.caller)] | |
307 | 307 | if ((bG == bG)) | |
308 | 308 | then { | |
309 | 309 | let bH = bF[0] | |
310 | 310 | let bI = bF[1] | |
311 | 311 | let bJ = addressFromPublicKey(aa) | |
312 | 312 | let aw = sha256(((bJ.bytes + fromBase58String(bH)) + fromBase58String(bI))) | |
313 | 313 | let aL = D(bH) | |
314 | 314 | let aM = D(bI) | |
315 | 315 | let bK = (size(aH(bJ)) / j) | |
316 | 316 | let bL = [if ((size(bC.payments) == 1)) | |
317 | 317 | then true | |
318 | 318 | else C("1 payment is required"), if ((bC.payments[0].assetId == unit)) | |
319 | 319 | then true | |
320 | 320 | else C("invalid asset"), if ((bC.payments[0].amount == ag())) | |
321 | 321 | then true | |
322 | 322 | else C("invalid amount"), if (aN(aL, aM)) | |
323 | 323 | then true | |
324 | 324 | else C("pair is not allowed"), if ((getInteger(P, av(aw)) == unit)) | |
325 | 325 | then true | |
326 | 326 | else C("account is already exists"), if ((aj() > bK)) | |
327 | 327 | then true | |
328 | 328 | else C(("accounts limit is " + toString(aj())))] | |
329 | 329 | if ((bL == bL)) | |
330 | 330 | then { | |
331 | 331 | let bM = if ((size(aG()) == 0)) | |
332 | 332 | then $Tuple2([ScriptTransfer(P, ag(), unit)], [invoke(P, "integerEntry", [av(aw), at], nil), invoke(P, "binaryEntry", [aD(), (aE() + aw)], nil)]) | |
333 | 333 | else { | |
334 | 334 | let bN = take(aG(), j) | |
335 | 335 | let al = addressFromPublicKey(bN) | |
336 | 336 | let bO = addressFromPublicKey(valueOrErrorMessage(getBinary(P, ax(al)), A("invalid creator public key"))) | |
337 | 337 | $Tuple2([ScriptTransfer(bO, ag(), unit)], [invoke(P, "binaryEntry", [aF(), drop(aG(), j)], nil), invoke(P, "integerEntry", [av(aw), au], nil), invoke(P, "binaryEntry", [aB(aw), bN], nil), invoke(P, "stringEntry", [aC(al), toBase58String(aw)], nil)]) | |
338 | 338 | } | |
339 | 339 | let bP = bM._1 | |
340 | 340 | let bQ = bM._2 | |
341 | 341 | $Tuple2(bP, (bQ ++ [invoke(P, "binaryEntry", [ay(aw), aa], nil), invoke(P, "binaryEntry", [aH(bJ), (aJ(bJ) + aw)], nil), invoke(P, "stringEntry", [az(aw), bH], nil), invoke(P, "stringEntry", [aA(aw), bI], nil)])) | |
342 | 342 | } | |
343 | 343 | else throw("Strict value is not equal to itself.") | |
344 | 344 | } | |
345 | 345 | else throw("Strict value is not equal to itself.") | |
346 | 346 | } | |
347 | 347 | ||
348 | 348 | ||
349 | 349 | ||
350 | 350 | @Callable(bC) | |
351 | 351 | func addAccount (aa,bF) = { | |
352 | 352 | let bG = [if (!(U)) | |
353 | 353 | then true | |
354 | 354 | else C("not allowed"), Y(bC.caller)] | |
355 | 355 | if ((bG == bG)) | |
356 | 356 | then { | |
357 | 357 | let bR = fromBase58String(bF[0]) | |
358 | 358 | let bN = aa | |
359 | 359 | let al = addressFromPublicKey(aa) | |
360 | 360 | let bO = addressFromPublicKey(bR) | |
361 | 361 | let bL = [if ((getBinary(P, ax(al)) == unit)) | |
362 | 362 | then true | |
363 | 363 | else C("account is already exists"), if ({ | |
364 | 364 | let J = scriptHash(al) | |
365 | 365 | if ($isInstanceOf(J, "ByteVector")) | |
366 | 366 | then { | |
367 | 367 | let bS = J | |
368 | 368 | (bS == blake2b256_32Kb(ae())) | |
369 | 369 | } | |
370 | 370 | else false | |
371 | 371 | }) | |
372 | 372 | then true | |
373 | 373 | else C("invalid script")] | |
374 | 374 | if ((bL == bL)) | |
375 | 375 | then { | |
376 | 376 | let bT = if ((size(aE()) == 0)) | |
377 | 377 | then $Tuple2(nil, [invoke(P, "binaryEntry", [aF(), (aG() + bN)], nil)]) | |
378 | 378 | else { | |
379 | 379 | let aw = take(aE(), j) | |
380 | 380 | $Tuple2(nil, [invoke(P, "integerEntry", [av(aw), au], nil), invoke(P, "binaryEntry", [aB(aw), bN], nil), invoke(P, "binaryEntry", [aD(), drop(aE(), j)], nil), invoke(P, "stringEntry", [aC(al), toBase58String(aw)], nil), invoke(P, "transferWaves", [bO.bytes, ag()], nil)]) | |
381 | 381 | } | |
382 | 382 | let bP = bT._1 | |
383 | 383 | let bQ = bT._2 | |
384 | 384 | $Tuple2(bP, (bQ ++ [invoke(P, "binaryEntry", [ax(al), bR], nil)])) | |
385 | 385 | } | |
386 | 386 | else throw("Strict value is not equal to itself.") | |
387 | 387 | } | |
388 | 388 | else throw("Strict value is not equal to itself.") | |
389 | 389 | } | |
390 | 390 | ||
391 | 391 | ||
392 | 392 | ||
393 | 393 | @Callable(bC) | |
394 | 394 | func deposit (aa,bF) = { | |
395 | 395 | let bU = bC.payments[0] | |
396 | 396 | let bG = [if (!(U)) | |
397 | 397 | then true | |
398 | 398 | else C("not allowed"), Y(bC.caller), if ((size(bC.payments) == 1)) | |
399 | 399 | then true | |
400 | 400 | else C("1 payment is required"), if ((bU.assetId == S)) | |
401 | 401 | then true | |
402 | 402 | else C("invalid asset")] | |
403 | 403 | if ((bG == bG)) | |
404 | 404 | then { | |
405 | 405 | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
406 | 406 | let bP = [ScriptTransfer(al, bU.amount, bU.assetId)] | |
407 | 407 | let bQ = [invoke(P, "integerEntry", [ak(al), (valueOrElse(am(al), 0) + bU.amount)], nil)] | |
408 | 408 | $Tuple2(bP, bQ) | |
409 | 409 | } | |
410 | 410 | else throw("Strict value is not equal to itself.") | |
411 | 411 | } | |
412 | 412 | ||
413 | 413 | ||
414 | 414 | ||
415 | 415 | @Callable(bC) | |
416 | 416 | func withdraw (aa,bF) = { | |
417 | 417 | let bG = [if (!(U)) | |
418 | 418 | then true | |
419 | 419 | else C("not allowed"), Y(bC.caller)] | |
420 | 420 | if ((bG == bG)) | |
421 | 421 | then { | |
422 | 422 | let bJ = addressFromPublicKey(aa) | |
423 | 423 | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
424 | 424 | let bV = valueOrErrorMessage(parseInt(bF[1]), A("invalid amount")) | |
425 | 425 | let H = D(bF[2]) | |
426 | 426 | let bW = [invoke(al, "transferAsset", [bJ.bytes, bV, H], nil)] | |
427 | 427 | $Tuple2(nil, bW) | |
428 | 428 | } | |
429 | 429 | else throw("Strict value is not equal to itself.") | |
430 | 430 | } | |
431 | 431 | ||
432 | 432 | ||
433 | 433 | ||
434 | 434 | @Callable(bC) | |
435 | 435 | func borrow (aa,bF) = { | |
436 | 436 | let bG = [if (!(U)) | |
437 | 437 | then true | |
438 | 438 | else C("not allowed"), Y(bC.caller)] | |
439 | 439 | if ((bG == bG)) | |
440 | 440 | then { | |
441 | 441 | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
442 | 442 | let H = D(bF[1]) | |
443 | 443 | let bX = parseInt(bF[2]) | |
444 | 444 | let bY = bB(al) | |
445 | 445 | let aL = bY._1 | |
446 | 446 | let aM = bY._2 | |
447 | 447 | let bZ = s(valueOrElse(am(al), 0), M(aM)) | |
448 | 448 | let aW = s(aP(aL), M(S)) | |
449 | 449 | let aU = s(valueOrElse(getInteger(P, an(al, aL)), 0), M(aL)) | |
450 | 450 | let aV = s(valueOrElse(getInteger(P, an(al, aM)), 0), M(aM)) | |
451 | 451 | let bc = aT(aU, aV, aW) | |
452 | 452 | let ca = 3 | |
453 | 453 | let bf = s(valueOrElse(getInteger(P, ao(al)), ca), 1) | |
454 | 454 | let cb = bd(bZ, bf, bc) | |
455 | 455 | $Tuple2(nil, [v(cb, M(aM))]) | |
456 | 456 | } | |
457 | 457 | else throw("Strict value is not equal to itself.") | |
458 | 458 | } | |
459 | 459 | ||
460 | 460 | ||
461 | 461 | ||
462 | 462 | @Callable(bC) | |
463 | 463 | func repay (aa,bF) = { | |
464 | 464 | let bG = [if (!(U)) | |
465 | 465 | then true | |
466 | 466 | else C("not allowed"), Y(bC.caller)] | |
467 | 467 | if ((bG == bG)) | |
468 | 468 | then $Tuple2(nil, unit) | |
469 | 469 | else throw("Strict value is not equal to itself.") | |
470 | 470 | } | |
471 | 471 | ||
472 | 472 | ||
473 | 473 | ||
474 | 474 | @Callable(bC) | |
475 | 475 | func setPairAllowance (aa,bF) = { | |
476 | 476 | let bG = [if (!(U)) | |
477 | 477 | then true | |
478 | 478 | else C("not allowed"), Y(bC.caller), Z(aa)] | |
479 | 479 | if ((bG == bG)) | |
480 | 480 | then { | |
481 | 481 | let bH = bF[0] | |
482 | 482 | let bI = bF[1] | |
483 | 483 | let cc = bF[2] | |
484 | 484 | let aL = D(bH) | |
485 | 485 | let aM = D(bI) | |
486 | 486 | let cd = (cc == "true") | |
487 | 487 | let bW = [invoke(P, "booleanEntry", [aK(aL, aM), cd], nil)] | |
488 | 488 | $Tuple2(nil, bW) | |
489 | 489 | } | |
490 | 490 | else throw("Strict value is not equal to itself.") | |
491 | 491 | } | |
492 | 492 | ||
493 | 493 | ||
494 | 494 | ||
495 | 495 | @Callable(bC) | |
496 | 496 | func addSyntheticAsset (aa,bF) = { | |
497 | 497 | let ce = bF[0] | |
498 | 498 | let aq = D(ce) | |
499 | 499 | let as = bC.payments[0].assetId | |
500 | 500 | let bG = [if (!(U)) | |
501 | 501 | then true | |
502 | 502 | else C("not allowed"), Y(bC.caller), Z(aa), if ((getString(P, ap(aq)) == unit)) | |
503 | 503 | then true | |
504 | 504 | else C("invalid base asset"), if ((size(bC.payments) == 1)) | |
505 | 505 | then true | |
506 | 506 | else C("invalid payments"), if ((getString(P, ar(as)) == unit)) | |
507 | 507 | then true | |
508 | 508 | else C("invalid synthetic asset")] | |
509 | 509 | if ((bG == bG)) | |
510 | 510 | then { | |
511 | 511 | let bW = [invoke(P, "stringEntry", [ap(aq), F(as)], nil), invoke(P, "stringEntry", [ar(as), F(aq)], nil)] | |
512 | 512 | $Tuple2(nil, bW) | |
513 | 513 | } | |
514 | 514 | else throw("Strict value is not equal to itself.") | |
515 | 515 | } | |
516 | 516 | ||
517 | 517 | ||
518 | 518 | ||
519 | 519 | @Callable(bC) | |
520 | 520 | func doShutdown (aa,bF) = { | |
521 | 521 | let bL = [Y(bC.caller), Z(aa)] | |
522 | 522 | if ((bL == bL)) | |
523 | 523 | then { | |
524 | 524 | let bW = [invoke(P, "booleanEntry", [p, true], nil)] | |
525 | 525 | $Tuple2(nil, bW) | |
526 | 526 | } | |
527 | 527 | else throw("Strict value is not equal to itself.") | |
528 | 528 | } | |
529 | 529 | ||
530 | 530 | ||
531 | 531 | @Verifier(cf) | |
532 | 532 | func cg () = if (if (isDefined(O)) | |
533 | 533 | then isDefined(getString(P, l)) | |
534 | 534 | else false) | |
535 | 535 | then { | |
536 | 536 | let J = getString(P, l) | |
537 | 537 | if ($isInstanceOf(J, "String")) | |
538 | 538 | then { | |
539 | 539 | let ab = J | |
540 | 540 | let ch = m(toString(this), toBase58String(cf.id)) | |
541 | 541 | let ci = valueOrElse(getBoolean(addressFromStringValue(ab), ch), false) | |
542 | 542 | ci | |
543 | 543 | } | |
544 | 544 | else false | |
545 | 545 | } | |
546 | 546 | else sigVerify(cf.bodyBytes, cf.proofs[0], cf.senderPublicKey) | |
547 | 547 |
github/deemru/w8io/169f3d6 77.29 ms ◑