import type { Action, AssetType, BytesType, Float32Type, Float64Type, Int16Type, Int32Type, Int64Type, Int8Type, NameType, UInt16Type, UInt32Type, UInt64Type, UInt8Type, } from '@wharfkit/antelope' import { ABI, Asset, Blob, Bytes, Float32, Float64, Int16, Int32, Int64, Int8, Name, Struct, UInt16, UInt32, UInt64, UInt8, Variant, } from '@wharfkit/antelope' import type {ActionOptions, ContractArgs, PartialBy, Table} from '@wharfkit/contract' import {Contract as BaseContract} from '@wharfkit/contract' export const abiBlob = Blob.from( 'DmVvc2lvOjphYmkvMS4xDRBBVE9NSUNfQVRUUklCVVRFwgF2YXJpYW50X2ludDhfaW50MTZfaW50MzJfaW50NjRfdWludDhfdWludDE2X3VpbnQzMl91aW50NjRfZmxvYXQzMl9mbG9hdDY0X3N0cmluZ19JTlQ4X1ZFQ19JTlQxNl9WRUNfSU5UMzJfVkVDX0lOVDY0X1ZFQ19VSU5UOF9WRUNfVUlOVDE2X1ZFQ19VSU5UMzJfVkVDX1VJTlQ2NF9WRUNfRkxPQVRfVkVDX0RPVUJMRV9WRUNfU1RSSU5HX1ZFQw1BVFRSSUJVVEVfTUFQHnBhaXJfc3RyaW5nX0FUT01JQ19BVFRSSUJVVEVbXQpET1VCTEVfVkVDCWZsb2F0NjRbXQlGTE9BVF9WRUMJZmxvYXQzMltdCUlOVDE2X1ZFQwdpbnQxNltdCUlOVDMyX1ZFQwdpbnQzMltdCUlOVDY0X1ZFQwdpbnQ2NFtdCElOVDhfVkVDBWJ5dGVzClNUUklOR19WRUMIc3RyaW5nW10KVUlOVDE2X1ZFQwh1aW50MTZbXQpVSU5UMzJfVkVDCHVpbnQzMltdClVJTlQ2NF9WRUMIdWludDY0W10JVUlOVDhfVkVDB3VpbnQ4W10uBkZPUk1BVAACBG5hbWUGc3RyaW5nBHR5cGUGc3RyaW5nC2FjY2VwdG9mZmVyAAEIb2ZmZXJfaWQGdWludDY0CmFkZGNvbGF1dGgAAg9jb2xsZWN0aW9uX25hbWUEbmFtZQ5hY2NvdW50X3RvX2FkZARuYW1lDGFkZGNvbmZ0b2tlbgACDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAxhZGRub3RpZnlhY2MAAg9jb2xsZWN0aW9uX25hbWUEbmFtZQ5hY2NvdW50X3RvX2FkZARuYW1lDGFkbWluY29sZWRpdAABG2NvbGxlY3Rpb25fZm9ybWF0X2V4dGVuc2lvbghGT1JNQVRbXQxhbm5vdW5jZWRlcG8AAgVvd25lcgRuYW1lEnN5bWJvbF90b19hbm5vdW5jZQZzeW1ib2wIYXNzZXRzX3MACAhhc3NldF9pZAZ1aW50NjQPY29sbGVjdGlvbl9uYW1lBG5hbWULc2NoZW1hX25hbWUEbmFtZQt0ZW1wbGF0ZV9pZAVpbnQzMglyYW1fcGF5ZXIEbmFtZQ1iYWNrZWRfdG9rZW5zB2Fzc2V0W10ZaW1tdXRhYmxlX3NlcmlhbGl6ZWRfZGF0YQd1aW50OFtdF211dGFibGVfc2VyaWFsaXplZF9kYXRhB3VpbnQ4W10JYmFja2Fzc2V0AAQFcGF5ZXIEbmFtZQthc3NldF9vd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA10b2tlbl90b19iYWNrBWFzc2V0CmJhbGFuY2VzX3MAAgVvd25lcgRuYW1lCnF1YW50aXRpZXMHYXNzZXRbXQlidXJuYXNzZXQAAgthc3NldF9vd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NAtjYW5jZWxvZmZlcgABCG9mZmVyX2lkBnVpbnQ2NA1jb2xsZWN0aW9uc19zAAcPY29sbGVjdGlvbl9uYW1lBG5hbWUGYXV0aG9yBG5hbWUMYWxsb3dfbm90aWZ5BGJvb2wTYXV0aG9yaXplZF9hY2NvdW50cwZuYW1lW10Pbm90aWZ5X2FjY291bnRzBm5hbWVbXQptYXJrZXRfZmVlB2Zsb2F0NjQPc2VyaWFsaXplZF9kYXRhB3VpbnQ4W10IY29uZmlnX3MABQ1hc3NldF9jb3VudGVyBnVpbnQ2NBB0ZW1wbGF0ZV9jb3VudGVyBWludDMyDW9mZmVyX2NvdW50ZXIGdWludDY0EWNvbGxlY3Rpb25fZm9ybWF0CEZPUk1BVFtdEHN1cHBvcnRlZF90b2tlbnMRZXh0ZW5kZWRfc3ltYm9sW10JY3JlYXRlY29sAAcGYXV0aG9yBG5hbWUPY29sbGVjdGlvbl9uYW1lBG5hbWUMYWxsb3dfbm90aWZ5BGJvb2wTYXV0aG9yaXplZF9hY2NvdW50cwZuYW1lW10Pbm90aWZ5X2FjY291bnRzBm5hbWVbXQptYXJrZXRfZmVlB2Zsb2F0NjQEZGF0YQ1BVFRSSUJVVEVfTUFQC2NyZWF0ZW9mZmVyAAUGc2VuZGVyBG5hbWUJcmVjaXBpZW50BG5hbWUQc2VuZGVyX2Fzc2V0X2lkcwh1aW50NjRbXRNyZWNpcGllbnRfYXNzZXRfaWRzCHVpbnQ2NFtdBG1lbW8Gc3RyaW5nDGNyZWF0ZXNjaGVtYQAEEmF1dGhvcml6ZWRfY3JlYXRvcgRuYW1lD2NvbGxlY3Rpb25fbmFtZQRuYW1lC3NjaGVtYV9uYW1lBG5hbWUNc2NoZW1hX2Zvcm1hdAhGT1JNQVRbXQtjcmVhdGV0ZW1wbAAHEmF1dGhvcml6ZWRfY3JlYXRvcgRuYW1lD2NvbGxlY3Rpb25fbmFtZQRuYW1lC3NjaGVtYV9uYW1lBG5hbWUMdHJhbnNmZXJhYmxlBGJvb2wIYnVybmFibGUEYm9vbAptYXhfc3VwcGx5BnVpbnQzMg5pbW11dGFibGVfZGF0YQ1BVFRSSUJVVEVfTUFQDGRlY2xpbmVvZmZlcgABCG9mZmVyX2lkBnVpbnQ2NA9leHRlbmRlZF9zeW1ib2wAAgNzeW0Gc3ltYm9sCGNvbnRyYWN0BG5hbWUMZXh0ZW5kc2NoZW1hAAQRYXV0aG9yaXplZF9lZGl0b3IEbmFtZQ9jb2xsZWN0aW9uX25hbWUEbmFtZQtzY2hlbWFfbmFtZQRuYW1lF3NjaGVtYV9mb3JtYXRfZXh0ZW5zaW9uCEZPUk1BVFtdDGZvcmJpZG5vdGlmeQABD2NvbGxlY3Rpb25fbmFtZQRuYW1lBGluaXQAAAxsb2NrdGVtcGxhdGUAAxFhdXRob3JpemVkX2VkaXRvcgRuYW1lD2NvbGxlY3Rpb25fbmFtZQRuYW1lC3RlbXBsYXRlX2lkBWludDMyDGxvZ2JhY2thc3NldAADC2Fzc2V0X293bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0DGJhY2tlZF90b2tlbgVhc3NldAxsb2didXJuYXNzZXQACQthc3NldF9vd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA9jb2xsZWN0aW9uX25hbWUEbmFtZQtzY2hlbWFfbmFtZQRuYW1lC3RlbXBsYXRlX2lkBWludDMyDWJhY2tlZF90b2tlbnMHYXNzZXRbXRJvbGRfaW1tdXRhYmxlX2RhdGENQVRUUklCVVRFX01BUBBvbGRfbXV0YWJsZV9kYXRhDUFUVFJJQlVURV9NQVAPYXNzZXRfcmFtX3BheWVyBG5hbWUHbG9nbWludAAKCGFzc2V0X2lkBnVpbnQ2NBFhdXRob3JpemVkX21pbnRlcgRuYW1lD2NvbGxlY3Rpb25fbmFtZQRuYW1lC3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzIPbmV3X2Fzc2V0X293bmVyBG5hbWUOaW1tdXRhYmxlX2RhdGENQVRUUklCVVRFX01BUAxtdXRhYmxlX2RhdGENQVRUUklCVVRFX01BUA1iYWNrZWRfdG9rZW5zB2Fzc2V0W10XaW1tdXRhYmxlX3RlbXBsYXRlX2RhdGENQVRUUklCVVRFX01BUAtsb2duZXdvZmZlcgAGCG9mZmVyX2lkBnVpbnQ2NAZzZW5kZXIEbmFtZQlyZWNpcGllbnQEbmFtZRBzZW5kZXJfYXNzZXRfaWRzCHVpbnQ2NFtdE3JlY2lwaWVudF9hc3NldF9pZHMIdWludDY0W10EbWVtbwZzdHJpbmcLbG9nbmV3dGVtcGwACAt0ZW1wbGF0ZV9pZAVpbnQzMhJhdXRob3JpemVkX2NyZWF0b3IEbmFtZQ9jb2xsZWN0aW9uX25hbWUEbmFtZQtzY2hlbWFfbmFtZQRuYW1lDHRyYW5zZmVyYWJsZQRib29sCGJ1cm5hYmxlBGJvb2wKbWF4X3N1cHBseQZ1aW50MzIOaW1tdXRhYmxlX2RhdGENQVRUUklCVVRFX01BUApsb2dzZXRkYXRhAAQLYXNzZXRfb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQIb2xkX2RhdGENQVRUUklCVVRFX01BUAhuZXdfZGF0YQ1BVFRSSUJVVEVfTUFQC2xvZ3RyYW5zZmVyAAUPY29sbGVjdGlvbl9uYW1lBG5hbWUEZnJvbQRuYW1lAnRvBG5hbWUJYXNzZXRfaWRzCHVpbnQ2NFtdBG1lbW8Gc3RyaW5nCW1pbnRhc3NldAAIEWF1dGhvcml6ZWRfbWludGVyBG5hbWUPY29sbGVjdGlvbl9uYW1lBG5hbWULc2NoZW1hX25hbWUEbmFtZQt0ZW1wbGF0ZV9pZAVpbnQzMg9uZXdfYXNzZXRfb3duZXIEbmFtZQ5pbW11dGFibGVfZGF0YQ1BVFRSSUJVVEVfTUFQDG11dGFibGVfZGF0YQ1BVFRSSUJVVEVfTUFQDnRva2Vuc190b19iYWNrB2Fzc2V0W10Ib2ZmZXJzX3MABwhvZmZlcl9pZAZ1aW50NjQGc2VuZGVyBG5hbWUJcmVjaXBpZW50BG5hbWUQc2VuZGVyX2Fzc2V0X2lkcwh1aW50NjRbXRNyZWNpcGllbnRfYXNzZXRfaWRzCHVpbnQ2NFtdBG1lbW8Gc3RyaW5nCXJhbV9wYXllcgRuYW1lHHBhaXJfc3RyaW5nX0FUT01JQ19BVFRSSUJVVEUAAgNrZXkGc3RyaW5nBXZhbHVlEEFUT01JQ19BVFRSSUJVVEULcGF5b2ZmZXJyYW0AAgVwYXllcgRuYW1lCG9mZmVyX2lkBnVpbnQ2NApyZW1jb2xhdXRoAAIPY29sbGVjdGlvbl9uYW1lBG5hbWURYWNjb3VudF90b19yZW1vdmUEbmFtZQxyZW1ub3RpZnlhY2MAAg9jb2xsZWN0aW9uX25hbWUEbmFtZRFhY2NvdW50X3RvX3JlbW92ZQRuYW1lCXNjaGVtYXNfcwACC3NjaGVtYV9uYW1lBG5hbWUGZm9ybWF0CEZPUk1BVFtdDHNldGFzc2V0ZGF0YQAEEWF1dGhvcml6ZWRfZWRpdG9yBG5hbWULYXNzZXRfb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQQbmV3X211dGFibGVfZGF0YQ1BVFRSSUJVVEVfTUFQCnNldGNvbGRhdGEAAg9jb2xsZWN0aW9uX25hbWUEbmFtZQRkYXRhDUFUVFJJQlVURV9NQVAMc2V0bWFya2V0ZmVlAAIPY29sbGVjdGlvbl9uYW1lBG5hbWUKbWFya2V0X2ZlZQdmbG9hdDY0CnNldHZlcnNpb24AAQtuZXdfdmVyc2lvbgZzdHJpbmcLdGVtcGxhdGVzX3MABwt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDHRyYW5zZmVyYWJsZQRib29sCGJ1cm5hYmxlBGJvb2wKbWF4X3N1cHBseQZ1aW50MzINaXNzdWVkX3N1cHBseQZ1aW50MzIZaW1tdXRhYmxlX3NlcmlhbGl6ZWRfZGF0YQd1aW50OFtdDnRva2VuY29uZmlnc19zAAIIc3RhbmRhcmQEbmFtZQd2ZXJzaW9uBnN0cmluZwh0cmFuc2ZlcgAEBGZyb20EbmFtZQJ0bwRuYW1lCWFzc2V0X2lkcwh1aW50NjRbXQRtZW1vBnN0cmluZwh3aXRoZHJhdwACBW93bmVyBG5hbWURdG9rZW5fdG9fd2l0aGRyYXcFYXNzZXQjAK5ai+aqEDILYWNjZXB0b2ZmZXLTBC0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEFjY2VwdCBhbiBvZmZlcgpzdW1tYXJ5OiAnVGhlIG9mZmVyIHdpdGggdGhlIGlkIHt7bm93cmFwIG9mZmVyX2lkfX0gaXMgYWNjZXB0ZWQnCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KVGhlIHJlY2lwaWVudCBvZiB0aGUgb2ZmZXIgd2l0aCB0aGUgaWQge3tvZmZlcl9pZH19IGFjY2VwdHMgdGhlIG9mZmVyLgoKVGhlIGFzc2V0cyBmcm9tIGVpdGhlciBzaWRlIHNwZWNpZmllZCBpbiB0aGUgb2ZmZXIgYXJlIGF1dG9tYXRpY2FsbHkgdHJhbnNmZXJyZWQgdG8gdGhlIHJlc3BlY3RpdmUgb3RoZXIgc2lkZS4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIG9mZmVyLgo8L2Rpdj4AQMvaRIpSMgphZGRjb2xhdXRowQUtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBNYWtlIGFuIGFjY291bnQgYXV0aG9yaXplZCBpbiBhIGNvbGxlY3Rpb24Kc3VtbWFyeTogJ0FkZCB0aGUgYWNjb3VudCB7e25vd3JhcCBhY2NvdW50X3RvX2FkZH19IHRvIHRoZSBhdXRob3JpemVkX2FjY291bnRzIGxpc3Qgb2YgdGhlIGNvbGxlY3Rpb24ge3tub3dyYXAgY29sbGVjdGlvbl9uYW1lfX0nCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KQWRkcyB0aGUgYWNjb3VudCB7e2FjY291bnRfdG9fYWRkfX0gdG8gdGhlIGF1dGhvcml6ZWRfYWNjb3VudHMgbGlzdCBvZiB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19LgoKVGhpcyBhbGxvd3Mge3thY2NvdW50X3RvX2FkZH19IHRvIGJvdGggY3JlYXRlIGFuZCBlZGl0IHRlbXBsYXRlcyBhbmQgYXNzZXRzIG9mIHRoaXMgY29sbGVjdGlvbi4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb2xsZWN0aW9uJ3MgYXV0aG9yLgo8L2Rpdj4wFaR5TYpSMgxhZGRjb25mdG9rZW7eBC0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEFkZCB0b2tlbiB0byBzdXBwb3J0ZWQgbGlzdApzdW1tYXJ5OiAnQWRkcyBhIHRva2VuIHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBiYWNrIGFzc2V0cycKaWNvbjogaHR0cHM6Ly9hdG9taWNhc3NldHMuaW8vaW1hZ2UvbG9nbzI1Ni5wbmcjMTA4QUVFMzUzMEY0RUIzNjhBNEIwQzI4ODAwODk0Q0ZCQUJGNDY1MzRGNDgzNDVCRjY0NTMwOTA1NTRDNTJENQotLS0KPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+ClRoZSB0b2tlbiB3aXRoIHRoZSBzeW1ib2wge3t0b2tlbl9zeW1ib2x9fSBmcm9tIHRoZSB0b2tlbiBjb250cmFjdCB7e3Rva2VuX2NvbnRyYWN0fX0gaXMgYWRkZWQgdG8gdGhlIHN1cHBvcnRlZF90b2tlbnMgbGlzdC4KClRoaXMgbWVhbnMgdGhhdCBhc3NldHMgY2FuIHRoZW4gYmUgYmFja2VkIHdpdGggdGhhdCBzcGVjaWZpYyB0b2tlbi4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7JGFjdGlvbi5hY2NvdW50fX0uCjwvZGl2PoCQ8ctlOlMyDGFkZG5vdGlmeWFjY+8LLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQWRkIGFuIGFjY291bnQgdG8gYSBjb2xsZWN0aW9uJ3Mgbm90aWZ5IGxpc3QKc3VtbWFyeTogJ0FkZCB0aGUgYWNjb3VudCB7e25vd3JhcCBhY2NvdW50X3RvX2FkZH19IHRvIHRoZSBub3RpZnlfYWNjb3VudHMgbGlzdCBvZiB0aGUgY29sbGVjdGlvbiB7e25vd3JhcCBjb2xsZWN0aW9uX25hbWV9fScKaWNvbjogaHR0cHM6Ly9hdG9taWNhc3NldHMuaW8vaW1hZ2UvbG9nbzI1Ni5wbmcjMTA4QUVFMzUzMEY0RUIzNjhBNEIwQzI4ODAwODk0Q0ZCQUJGNDY1MzRGNDgzNDVCRjY0NTMwOTA1NTRDNTJENQotLS0KCjxiPkRlc2NyaXB0aW9uOjwvYj4KPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgpBZGRzIHRoZSBhY2NvdW50IHt7YWNjb3VudF90b19hZGR9fSB0byB0aGUgbm90aWZ5X2FjY291bnRzIGxpc3Qgb2YgdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fS4KClRoaXMgd2lsbCBtYWtlIHt7YWNjb3VudF90b19hZGR9fSBnZXQgbm90aWZpY2F0aW9ucyBkaXJlY3RseSBvbiB0aGUgYmxvY2tjaGFpbiB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgcGVyZm9ybWVkOgotIE9uZSBvciBtb3JlIGFzc2V0cyBvZiB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19IGlzIHRyYW5zZmVycmVkCi0gQW4gYXNzZXQgb2YgdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fSBpcyBtaW50ZWQKLSBBbiBhc3NldCBvZiB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19IGhhcyBpdHMgbXV0YWJsZSBkYXRhIGNoYW5nZWQKLSBBbiBhc3NldCBvZiB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19IGlzIGJ1cm5lZAotIEFuIGFzc2V0IG9mIHRoZSBjb2xsZWN0aW9uIHt7Y29sbGVjdGlvbl9uYW1lfX0gZ2V0cyBiYWNrZWQgd2l0aCBjb3JlIHRva2VucwotIEEgdGVtcGxhdGUgb2YgdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fSBpcyBjcmVhdGVkCgp7e2FjY291bnRfdG9fYWRkfX0gaXMgYWJsZSB0byBhZGQgY29kZSB0byB0aGVpciBvd24gc21hcnQgY29udHJhY3QgdG8gaGFuZGxlIHRoZXNlIG5vdGlmaWNhdGlvbnMuIAo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbGxlY3Rpb24ncyBhdXRob3IuCgp7e2FjY291bnRfdG9fYWRkfX0gbWF5IG5vdCBtYWtlIGFueSB0cmFuc2FjdGlvbnMgdGhyb3cgd2hlbiByZWNlaXZpbmcgYSBub3RpZmljYXRpb24uIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcHVycG9zZWx5IGJsb2NraW5nIGNlcnRhaW4gdHJhbnNmZXJzIGJ5IG1ha2luZyB0aGUgdHJhbnNhY3Rpb24gdGhyb3cuCgpJdCBpcyB0aGUgY29sbGVjdGlvbiBhdXRob3IncyByZXNwb25zaWJpbGl0eSB0byBlbmZvcmNlIHRoYXQgdGhpcyBkb2VzIG5vdCBoYXBwZW4uCjwvZGl2PpBdUpGi6WQyDGFkbWluY29sZWRpdO0ELS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogRXh0ZW5kIGNvbGxlY3Rpb25zIHNjaGVtYQpzdW1tYXJ5OiAnRXh0ZW5kcyB0aGUgc2NoZW1hIHRvIHNlcmlhbGl6ZSBjb2xsZWN0aW9uIGRhdGEgYnkgb25lIG9yIG1vcmUgbGluZXMnCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KVGhlIGZvbGxvd2luZyBGT1JNQVQgbGluZXMgYXJlIGFkZGVkIHRvIHRoZSBzY2hlbWEgdGhhdCBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBjb2xsZWN0aW9ucyBkYXRhOgp7eyNlYWNoIGNvbGxlY3Rpb25fZm9ybWF0X2V4dGVuc2lvbn19CiAgICAtIG5hbWU6IHt7dGhpcy5uYW1lfX0gLCB0eXBlOiB7e3RoaXMudHlwZX19Cnt7L2VhY2h9fQo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2Yge3skYWN0aW9uLmFjY291bnR9fS4KPC9kaXY+QKtKCk1N5zQMYW5ub3VuY2VkZXBv8ActLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBBbm5vdW5jZXMgYSBkZXBvc2l0CnN1bW1hcnk6ICd7e25vd3JhcCBvd25lcn19IGFkZHMgdGhlIHN5bWJvbCB7e25vd3JhcCBzeW1ib2xfdG9fYW5ub3VuY2V9fSB0byBoaXMgYmFsYW5jZSB0YWJsZSByb3cnCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KVGhpcyBhY3Rpb24gaXMgdXNlZCB0byBhZGQgYSB6ZXJvIHZhbHVlIGFzc2V0IHRvIHRoZSBxdWFudGl0aWVzIHZlY3RvciBvZiB0aGUgYmFsYW5jZSByb3cgd2l0aCB0aGUgb3duZXIge3tvd25lcn19LgpJZiB0aGVyZSBpcyBubyBiYWxhbmNlIHJvdyB3aXRoIHRoZSBvd25lciB7e293bmVyfX0sIGEgbmV3IG9uZSBpcyBjcmVhdGVkLgpBZGRpbmcgc29tZXRoaW5nIHRvIGEgdmVjdG9yIGluY3JlYXNlcyB0aGUgUkFNIHJlcXVpcmVkLCB0aGVyZWZvcmUgdGhpcyBjYW4ndCBiZSBkb25lIGRpcmVjdGx5IGluIHRoZSByZWNlaXB0IG9mIHRoZSB0cmFuc2ZlciBhY3Rpb24sIHNvIHVzaW5nIHRoaXMgYWN0aW9uIGEgemVybyB2YWx1ZSBpcyBhZGRlZCBzbyB0aGF0IHRoZSBSQU0gcmVxdWlyZWQgZG9lc24ndCBjaGFuZ2Ugd2hlbiBhZGRpbmcgdGhlIHJlY2VpdmVkIHF1YW50aXR5IGluIHRoZSB0cmFuc2ZlciBhY3Rpb24gbGF0ZXIuCgpCeSBjYWxsaW5nIHRoaXMgYWN0aW9uLCB7e3BheWVyfX0gcGF5cyBmb3IgdGhlIFJBTSBvZiB0aGUgYmFsYW5jZSB0YWJsZSByb3cgd2l0aCB0aGUgb3duZXIge3tvd25lcn19Lgo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2Yge3twYXllcn19Lgo8L2Rpdj4AAMgKYwOROQliYWNrYXNzZXTiBi0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEJhY2tzIGFuIGFzc2V0IHdpdGggdG9rZW5zCnN1bW1hcnk6ICd7e25vd3JhcCBwYXllcn19IGJhY2tzIHRoZSBhc3NldCB3aXRoIHRoZSBJRCB7e25vd3JhcCBhc3NldF9pZH19IHdpdGgge3tub3dyYXAgdG9rZW5fdG9fYmFja319JwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cnt7cGF5ZXJ9fSBiYWNrcyBhbiB0aGUgYXNzZXQgd2l0aCB0aGUgSUQge3thc3NldF9pZH19IG93bmVkIGJ5IHt7YXNzZXRfb3duZXJ9fSB3aXRoIHt7dG9rZW5fdG9fYmFja319Lgp7e3BheWVyfX0gbXVzdCBoYXZlIGF0IGxlYXN0IGFzIG1hbnkgdG9rZW5zIGluIGhpcyBiYWxhbmNlLiB7e3Rva2VuX3RvX2JhY2t9fSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB7e3BheWVyfX0ncyBiYWxhbmNlLgpUaGUgdG9rZW5zIGJhY2tlZCB0byB0aGlzIGFzc2V0IGNhbiBiZSByZXRyZWl2ZWQgYnkgYnVybmluZyB0aGUgYXNzZXQsIGluIHdoaWNoIGNhc2UgdGhlIG93bmVyIGF0IHRoZSB0aW1lIG9mIHRoZSBidXJuIHdpbGwgcmVjZWl2ZSB0aGUgdG9rZW5zLgoKe3twYXllcn19IHBheXMgZm9yIHRoZSBmdWxsIFJBTSBjb3N0IG9mIHRoZSBhc3NldC4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7cGF5ZXJ9fS4KPC9kaXY+AADICmMzrz4JYnVybmFzc2V0zQQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBCdXJuIGFuIGFzc2V0CnN1bW1hcnk6ICd7e25vd3JhcCBhc3NldF9vd25lcn19IGJ1cm5zIGhpcyBhc3NldCB3aXRoIHRoZSBpZCB7e25vd3JhcCBhc3NldF9pZH19JwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cnt7YXNzZXRfb3duZXJ9fSBidXJucyBoaXMgYXNzZXQgd2l0aCB0aGUgaWQge3thc3NldF9pZH19LgoKSWYgdGhlcmUgcHJldmlvdXNseSB3ZXJlIGNvcmUgdG9rZW5zIGJhY2tlZCBmb3IgdGhpcyBhc3NldCwgdGhlc2UgY29yZSB0b2tlbnMgYXJlIHRyYW5zZmVycmVkIHRvIHt7YXNzZXRfb3duZXJ9fS4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7YXNzZXRfb3duZXJ9fS4KPC9kaXY+AK5ai0aFpkELY2FuY2Vsb2ZmZXKNBC0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IENhbmNlbCBhbiBvZmZlcgpzdW1tYXJ5OiAnVGhlIG9mZmVyIHdpdGggdGhlIGlkIHt7bm93cmFwIG9mZmVyX2lkfX0gaXMgY2FuY2VsbGVkJwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+ClRoZSBjcmVhdG9yIG9mIHRoZSBvZmZlciB3aXRoIHRoZSBpZCB7e29mZmVyX2lkfX0gY2FuY2VscyB0aGlzIG9mZmVyLiBUaGUgb2ZmZXIgaXMgZGVsZXRlZCBmcm9tIHRoZSBvZmZlcnMgdGFibGUuCjwvZGl2PgoKPGI+Q2xhdXNlczo8L2I+CjxkaXYgY2xhc3M9ImNsYXVzZXMiPgpUaGlzIGFjdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY3JlYXRvciBvZiB0aGUgb2ZmZXIuCjwvZGl2PgAAiBSpbNRFCWNyZWF0ZWNvbMkRLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ3JlYXRlIGNvbGxlY3Rpb24Kc3VtbWFyeTogJ3t7bm93cmFwIGF1dGhvcn19IGNyZWF0ZXMgYSBuZXcgY29sbGVjdGlvbiB3aXRoIHRoZSBuYW1lIHt7Y29sbGVjdGlvbl9uYW1lfX0nCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4Ke3thdXRob3J9fSBjcmVhdGVzIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCB0aGUgbmFtZSB7e2NvbGxlY3Rpb25fbmFtZX19LgoKe3sjaWYgYXV0aG9yaXplZF9hY2NvdW50c319VGhlIGZvbGxvd2luZyBhY2NvdW50cyBhcmUgYWRkZWQgdG8gdGhlIGF1dGhvcml6ZWRfYWNjb3VudHMgbGlzdCwgYWxsb3dpbmcgdGhlbSBjcmVhdGUgYW5kIGVkaXQgdGVtcGxhdGVzIGFuZCBhc3NldHMgd2l0aGluIHRoaXMgY29sbGVjdGlvbjoKICAgIHt7I2VhY2ggYXV0aG9yaXplZF9hY2NvdW50c319CiAgICAgICAgLSB7e3RoaXN9fQogICAge3svZWFjaH19Cnt7ZWxzZX19Tm8gYWNjb3VudHMgYXJlIGFkZGVkIHRvIHRoZSBhdXRob3JpemVkX2FjY291bnRzIGxpc3QuCnt7L2lmfX0KCnt7I2lmIG5vdGlmeV9hY2NvdW50c319VGhlIGZvbGxvd2luZyBhY2NvdW50cyBhcmUgYWRkZWQgdG8gdGhlIG5vdGlmeV9hY2NvdW50cyBsaXN0LCB3aGljaCBtZWFucyB0aGF0IHRoZXkgZ2V0IG5vdGlmaWVkIG9uIHRoZSBibG9ja2NoYWluIG9mIGFueSBhY3Rpb25zIHJlbGF0ZWQgdG8gYXNzZXRzIGFuZCB0ZW1wbGF0ZXMgb2YgdGhpcyBjb2xsZWN0aW9uOgogICAge3sjZWFjaCBub3RpZnlfYWNjb3VudHN9fQogICAgICAgIC0ge3t0aGlzfX0KICAgIHt7L2VhY2h9fQp7e2Vsc2V9fU5vIGFjY291bnRzIGFyZSBhZGRlZCB0byB0aGUgbm90aWZ5X2FjY291bnRzIGxpc3QuCnt7L2lmfX0KCnt7I2lmIGFsbG93X25vdGlmeX19SXQgd2lsbCBiZSBwb3NzaWJsZSB0byBhZGQgbW9yZSBhY2NvdW50cyB0byB0aGUgbm90aWZ5X2FjY291bnRzIGxpc3QgbGF0ZXIuCnt7ZWxzZX19SXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gYWRkIG1vcmUgYWNjb3VudHMgdG8gdGhlIG5vdGlmeV9hY2NvdW50cyBsaXN0IGxhdGVyLgp7ey9pZn19CgpUaGUgbWFya2V0X2ZlZSBmb3IgdGhpcyBjb2xsZWN0aW9uIHdpbGwgYmUgc2V0IHRvIHt7bWFya2V0X2ZlZX19LiAzcmQgcGFydHkgbWFya2V0cyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhpcyB2YWx1ZSB0byBjb2xsZWN0IGZlZXMgZm9yIHRoZSBjb2xsZWN0aW9uIGF1dGhvciwgYnV0IGFyZSBub3QgcmVxdWlyZWQgdG8gZG8gc28uCgp7eyNpZiBkYXRhfX1UaGUgY29sbGVjdGlvbnMgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBmb2xsb3dpbmcgZGF0YToKICAgIHt7I2VhY2ggZGF0YX19CiAgICAgICAgLSBuYW1lOiB7e3RoaXMua2V5fX0gLCB2YWx1ZToge3t0aGlzLnZhbHVlfX0KICAgIHt7L2VhY2h9fQp7e2Vsc2V9fVRoZSBjb2xsZWN0aW9uIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBhbnkgZGF0YS4Ke3svaWZ9fQo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2Yge3thdXRob3J9fS4KCkNyZWF0aW5nIGNvbGxlY3Rpb25zIHdpdGggdGhlIHB1cnBvc2Ugb2YgY29uZnVzaW5nIG9yIHRha2luZyBhZHZhbnRhZ2Ugb2Ygb3RoZXJzLCBlc3BlY2lhbGx5IGJ5IGltcGVyc29uYXRpbmcgb3RoZXIgd2VsbCBrbm93biBicmFuZHMsIHBlcnNvbmFsaXRpZXMgb3IgZGFwcHMgaXMgbm90IGFsbG93ZWQuCgpJZiB0aGUgbm90aWZ5IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgdXNlZCwgdGhlIG5vdGlmeSBhY2NvdW50cyBtYXkgbm90IG1ha2UgYW55IHRyYW5zYWN0aW9ucyB0aHJvdyB3aGVuIHJlY2VpdmluZyB0aGUgbm90aWZpY2F0aW9uLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHB1cnBvc2VseSBibG9ja2luZyBjZXJ0YWluIHRyYW5zZmVycyBieSBtYWtpbmcgdGhlIHRyYW5zYWN0aW9uIHRocm93LgoKSXQgaXMgdGhlIGNvbGxlY3Rpb24gYXV0aG9yJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5mb3JjZSB0aGF0IHRoaXMgZG9lcyBub3QgaGFwcGVuLgo8L2Rpdj4ArlqLqmzURQtjcmVhdGVvZmZlcqwKLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ3JlYXRlIGFuIG9mZmVyCnN1bW1hcnk6ICd7e25vd3JhcCBzZW5kZXJ9fSBtYWtlcyBhbiBvZmZlciB0byB7e25vd3JhcCByZWNpcGllbnR9fScKaWNvbjogaHR0cHM6Ly9hdG9taWNhc3NldHMuaW8vaW1hZ2UvbG9nbzI1Ni5wbmcjMTA4QUVFMzUzMEY0RUIzNjhBNEIwQzI4ODAwODk0Q0ZCQUJGNDY1MzRGNDgzNDVCRjY0NTMwOTA1NTRDNTJENQotLS0KCjxiPkRlc2NyaXB0aW9uOjwvYj4KPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgp7e3NlbmRlcn19IG1ha2VzIHRoZSBmb2xsb3dpbmcgb2ZmZXIgdG8ge3tyZWNpcGllbnR9fS4KCnt7I2lmIHNlbmRlcl9hc3NldF9pZHN9fXt7c2VuZGVyfX0gZ2l2ZXMgdGhlIGFzc2V0cyB3aXRoIHRoZSBmb2xsb3dpbmcgaWRzOgogICAge3sjZWFjaCBzZW5kZXJfYXNzZXRfaWRzfX0KICAgICAgICAtIHt7dGhpc319CiAgICB7ey9lYWNofX0Ke3tlbHNlfX17e3NlbmRlcn19IGRvZXMgbm90IGdpdmUgYW55IGFzc2V0cy4Ke3svaWZ9fQoKe3sjaWYgcmVjaXBpZW50X2Fzc2V0X2lkc319e3tyZWNpcGllbnR9fSBnaXZlcyB0aGUgYXNzZXRzIHdpdGggdGhlIGZvbGxvd2luZyBpZHM6CiAgICB7eyNlYWNoIHJlY2lwaWVudF9hc3NldF9pZHN9fQogICAgICAgIC0ge3t0aGlzfX0KICAgIHt7L2VhY2h9fQp7e2Vsc2V9fXt7cmVjaXBpZW50fX0gZG9lcyBub3QgZ2l2ZSBhbnkgYXNzZXRzLgp7ey9pZn19CgpJZiB7e3JlY2lwaWVudH19IGFjY2VwdHMgdGhlIG9mZmVyLCB0aGUgYXNzZXRzIHdpbGwgYXV0b21hdGljYWxseSBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgcmVzcGVjdGl2ZSBzaWRlcy4KCnt7I2lmIG1lbW99fVRoZXJlIGlzIGEgbWVtbyBhdHRhY2hlZCB0byB0aGUgb2ZmZXIgc3RhdGluZzoKICAgIHt7bWVtb319Cnt7ZWxzZX19Tm8gbWVtbyBpcyBhdHRhY2hlZCB0byB0aGUgb2ZmZXIuCnt7L2lmfX0KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7c2VuZGVyfX0uCgpDcmVhdGluZyBvZmZlcnMgdGhhdCBkbyBub3Qgc2VydmUgYW55IHB1cnBvc2Ugb3RoZXIgdGhhbiBzcGFtbWluZyB0aGUgcmVjaXBpZW50IGlzIG5vdCBhbGxvd2VkLgoKe3tzZW5kZXJ9fSBtdXN0IG5vdCB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbm90aWZpY2F0aW9uIHRoZXkgcmVjZWl2ZSB3aGVuIHRoZSBvZmZlciBpcyBhY2NlcHRlZCBvciBkZWNsaW5lZCBpbiBhIHdheSB0aGF0IGhhcm1zIHt7cmVjaXBpZW50fX0uCjwvZGl2PmCkagirbNRFDGNyZWF0ZXNjaGVtYdIKLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ3JlYXRlIGEgc2NoZW1hCnN1bW1hcnk6ICd7e25vd3JhcCBhdXRob3JpemVkX2NyZWF0b3J9fSBjcmVhdGVzIGEgbmV3IHNjaGVtYSB3aXRoIHRoZSBuYW1lIHt7bm93cmFwIHNjaGVtYV9uYW1lfX0nCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4Ke3thdXRob3JpemVkX2NyZWF0b3J9fSBjcmVhdGVzIGEgbmV3IHNjaGVtYSB3aXRoIHRoZSBuYW1lIHt7c2NoZW1hX25hbWV9fS4gVGhpcyBzY2hlbWEgYmVsb25ncyB0byB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19Cgp7eyNpZiBzY2hlbWFfZm9ybWF0fX1UaGUgc2NoZW1hIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZm9sbG93aW5nIEZPUk1BVCBsaW5lcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlcmlhbGl6ZSB0ZW1wbGF0ZSBhbmQgYXNzZXQgZGF0YToKICAgIHt7I2VhY2ggc2NoZW1hX2Zvcm1hdH19CiAgICAgICAgLSBuYW1lOiB7e3RoaXMubmFtZX19ICwgdHlwZToge3t0aGlzLnR5cGV9fQogICAge3svZWFjaH19Cnt7ZWxzZX19VGhlIHNjaGVtYSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYW55IEZPUk1BVCBsaW5lcy4Ke3svaWZ9fQoKT25seSBhdXRob3JpemVkIGFjY291bnRzIG9mIHRoZSB7e2NvbGxlY3Rpb25fbmFtZX19IGNvbGxlY3Rpb24gd2lsbCBiZSBhYmxlIHRvIGV4dGVuZCB0aGUgc2NoZW1hIGJ5IGFkZGluZyBhZGRpdGlvbmFsIEZPUk1BVCBsaW5lcyBpbiB0aGUgZnV0dXJlLCBidXQgdGhleSB3aWxsIG5vdCBiZSBhYmxlIHRvIGRlbGV0ZSBwcmV2aW91c2x5IGFkZGVkIEZPUk1BVCBsaW5lcy4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7YXV0aG9yaXplZF9jcmVhdG9yfX0uCgp7e2F1dGhvcml6ZWRfY3JlYXRvcn19IGhhcyB0byBiZSBhbiBhdXRob3JpemVkIGFjY291bnQgaW4gdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fS4KCkNyZWF0aW5nIHNjaGVtYXMgd2l0aCB0aGUgcHVycG9zZSBvZiBjb25mdXNpbmcgb3IgdGFraW5nIGFkdmFudGFnZSBvZiBvdGhlcnMsIGVzcGVjaWFsbHkgYnkgaW1wZXJzb25hdGluZyBvdGhlciB3ZWxsIGtub3duIGJyYW5kcywgcGVyc29uYWxpdGllcyBvciBkYXBwcyBpcyBub3QgYWxsb3dlZC4KPC9kaXY+AGKVKqts1EULY3JlYXRldGVtcGzMCy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IENyZWF0ZSBhIHRlbXBsYXRlCnN1bW1hcnk6ICd7e25vd3JhcCBhdXRob3JpemVkX2NyZWF0b3J9fSBjcmVhdGVzIGEgbmV3IHRlbXBsYXRlIHdoaWNoIGJlbG9uZ3MgdG8gdGhlIHt7bm93cmFwIGNvbGxlY3Rpb25fbmFtZX19IGNvbGxlY3Rpb24gYW5kIHVzZXMgdGhlIHt7bm93cmFwIHNjaGVtYV9uYW1lfX0gc2NoZW1hJwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cnt7YXV0aG9yaXplZF9jcmVhdG9yfX0gY3JlYXRlcyBhIG5ldyB0ZW1wbGF0ZSB3aGljaCBiZWxvbmdzIHRvIHRoZSB7e2NvbGxlY3Rpb25fbmFtZX19IGNvbGxlY3Rpb24uCgpUaGUgc2NoZW1hIHt7c2NoZW1hX25hbWV9fSBpcyB1c2VkIGZvciB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgdGVtcGxhdGUncyBkYXRhLgoKe3sjaWYgdHJhbnNmZXJhYmxlfX1UaGUgYXNzZXRzIHdpdGhpbiB0aGlzIHRlbXBsYXRlIHdpbGwgYmUgdHJhbnNmZXJhYmxlCnt7ZWxzZX19VGhlIGFzc2V0cyB3aXRoaW4gdGhpcyB0ZW1wbGF0ZSB3aWxsIG5vdCBiZSB0cmFuc2ZlcmFibGUKe3svaWZ9fQoKe3sjaWYgYnVybmFibGV9fVRoZSBhc3NldHMgd2l0aGluIHRoaXMgdGVtcGxhdGUgd2lsbCBiZSBidXJuYWJsZQp7e2Vsc2V9fVRoZSBhc3NldHMgd2l0aGluIHRoaXMgdGVtcGxhdGUgd2lsbCBub3QgYmUgYnVybmFibGUKe3svaWZ9fQoKe3sjaWYgbWF4X3N1cHBseX19QSBtYXhpbXVtIG9mIHt7bWF4X3N1cHBseX19IGFzc2V0cyBjYW4gZXZlciBiZSBjcmVhdGVkIHdpdGhpbiB0aGlzIHRlbXBsYXRlLgp7e2Vsc2V9fVRoZXJlIGlzIG5vIG1heGltdW0gYW1vdW50IG9mIGFzc2V0cyB0aGF0IGNhbiBiZSBjcmVhdGVkIHdpdGhpbiB0aGlzIHRlbXBsYXRlLgp7ey9pZn19Cgp7eyNpZiBpbW11dGFibGVfZGF0YX19VGhlIGltbXV0YWJsZSBkYXRhIG9mIHRoZSB0ZW1wbGF0ZSBpcyBzZXQgdG86CiAgICB7eyNlYWNoIGltbXV0YWJsZV9kYXRhfX0KICAgICAgICAtIG5hbWU6IHt7dGhpcy5rZXl9fSAsIHZhbHVlOiB7e3RoaXMudmFsdWV9fQogICAge3svZWFjaH19Cnt7ZWxzZX19Tm8gaW1tdXRhYmxlIGRhdGEgaXMgc2V0IGZvciB0aGUgdGVtcGxhdGUuCnt7L2lmfX0KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7YXV0aG9yaXplZF9jcmVhdG9yfX0uCgp7e2F1dGhvcml6ZWRfY3JlYXRvcn19IGhhcyB0byBiZSBhbiBhdXRob3JpemVkIGFjY291bnQgaW4gdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fS4KPC9kaXY+cNVaVE0XkUoMZGVjbGluZW9mZmVykQQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBEZWNsaW5lIGFuIG9mZmVyCnN1bW1hcnk6ICdUaGUgb2ZmZXIgd2l0aCB0aGUgaWQge3tub3dyYXAgb2ZmZXJfaWR9fSBpcyBkZWNsaW5lZCcKaWNvbjogaHR0cHM6Ly9hdG9taWNhc3NldHMuaW8vaW1hZ2UvbG9nbzI1Ni5wbmcjMTA4QUVFMzUzMEY0RUIzNjhBNEIwQzI4ODAwODk0Q0ZCQUJGNDY1MzRGNDgzNDVCRjY0NTMwOTA1NTRDNTJENQotLS0KCjxiPkRlc2NyaXB0aW9uOjwvYj4KPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgpUaGUgcmVjaXBpZW50IG9mIHRoZSBvZmZlciB3aXRoIHRoZSBpZCB7e29mZmVyX2lkfX0gZGVjbGluZXMgdGhlIG9mZmVyLiBUaGUgb2ZmZXIgaXMgZGVsZXRlZCBmcm9tIHRoZSBvZmZlcnMgdGFibGUuCjwvZGl2PgoKPGI+Q2xhdXNlczo8L2I+CjxkaXYgY2xhc3M9ImNsYXVzZXMiPgpUaGlzIGFjdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBvZmZlci4KPC9kaXY+YKRqCKepclcMZXh0ZW5kc2NoZW1hmQYtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBFeHRlbmQgc2NoZW1hCnN1bW1hcnk6ICdFeHRlbmRzIHRoZSBzY2hlbWEge3tub3dyYXAgc2NoZW1hX25hbWV9fSBieSBhZGRpbmcgb25lIG9yIG1vcmUgRk9STUFUIGxpbmVzJwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+ClRoZSBzY2hlbWEge3tzY2hlbWFfbmFtZX19IGJlbG9uZ2luZyB0byB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19IGlzIGV4dGVuZGVkIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIEZPUk1BVCBsaW5lcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlcmlhbGl6ZSB0ZW1wbGF0ZSBhbmQgYXNzZXQgZGF0YToKe3sjZWFjaCBzY2hlbWFfZm9ybWF0X2V4dGVuc2lvbn19CiAgICAtIG5hbWU6IHt7dGhpcy5uYW1lfX0gLCB0eXBlOiB7e3RoaXMudHlwZX19Cnt7L2VhY2h9fQo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2Yge3thdXRob3JpemVkX2VkaXRvcn19LgoKe3thdXRob3JpemVkX2VkaXRvcn19IGhhcyB0byBiZSBhbiBhdXRob3JpemVkIGFjY291bnQgaW4gdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fS4KPC9kaXY+4JfLdCZ3Ll0MZm9yYmlkbm90aWZ58AQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBEaXNhbGxvdyBjb2xsZWN0aW9uIG5vdGlmaWNhdGlvbnMKc3VtbWFyeTogJ1NldHMgdGhlIGFsbG93X25vdGlmeSB2YWx1ZSBvZiB0aGUgY29sbGVjdGlvbiB7e25vd3JhcCBjb2xsZWN0aW9uX25hbWV9fSB0byBmYWxzZScKaWNvbjogaHR0cHM6Ly9hdG9taWNhc3NldHMuaW8vaW1hZ2UvbG9nbzI1Ni5wbmcjMTA4QUVFMzUzMEY0RUIzNjhBNEIwQzI4ODAwODk0Q0ZCQUJGNDY1MzRGNDgzNDVCRjY0NTMwOTA1NTRDNTJENQotLS0KCjxiPkRlc2NyaXB0aW9uOjwvYj4KPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgpUaGUgYWxsb3dfbm90aWZ5IHZhbHVlIG9mIHRoZSBjb2xsZWN0aW9uIHt7Y29sbGVjdGlvbl9uYW1lfX0gaXMgc2V0IHRvIGZhbHNlLgpUaGlzIG1lYW5zIHRoYXQgaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gYWRkIGFjY291bnRzIHRvIHRoZSBub3RpZnlfYWNjb3VudHMgbGlzdCBsYXRlci4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb2xsZWN0aW9uJ3MgYXV0aG9yLgo8L2Rpdj4AAAAAAJDddARpbml02AQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBJbml0aWFsaXplIGNvbmZpZyB0YWJsZXMKc3VtbWFyeTogJ0luaXRpYWxpemUgdGhlIHRhYmxlcyAiY29uZmlnIiBhbmQgInRva2VuY29uZmlnIiBpZiB0aGV5IGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQgYmVmb3JlJwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+CkluaXRpYWxpemUgdGhlIHRhYmxlcyAiY29uZmlnIiBhbmQgInRva2VuY29uZmlnIiBpZiB0aGV5IGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQgYmVmb3JlLiBJZiB0aGV5IGhhdmUgYmVlbiBpbml0aWFsaXplZCBiZWZvcmUsIG5vdGhpbmcgd2lsbCBoYXBwZW4uCjwvZGl2PgoKPGI+Q2xhdXNlczo8L2I+CjxkaXYgY2xhc3M9ImNsYXVzZXMiPgpUaGlzIGFjdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB7eyRhY3Rpb24uYWNjb3VudH19Lgo8L2Rpdj6gsolVqgwRjQxsb2NrdGVtcGxhdGWMBy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IExvY2tzIGEgdGVtcGxhdGUKc3VtbWFyeTogJ3t7bm93cmFwIGF1dGhvcml6ZWRfZWRpdG9yfX0gbG9ja3MgdGhlIHRlbXBsYXRlIHdpdGggdGhlIGlkIHt7bm93cmFwIHRlbXBsYXRlX2lkfX0gYmVsb25naW5nIHRvIHRoZSBjb2xsZWN0aW9uIHt7bm93cmFwIGNvbGxlY3Rpb25fbmFtZX19JwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cnt7YXV0aG9yaXplZF9lZGl0b3J9fSBsb2NrcyB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgaWQge3t0ZW1wbGF0ZV9pZH19IGJlbG9uZ2luZyB0byB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19LgoKVGhpcyBzZXRzIHRoZSB0ZW1wbGF0ZSdzIG1heGltdW0gc3VwcGx5IHRvIHRoZSB0ZW1wbGF0ZSdzIGN1cnJlbnQgc3VwcGx5LCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgYXNzZXRzIHJlZmVyZW5jaW5nIHRoaXMgdGVtcGxhdGUgY2FuIGJlIG1pbnRlZC4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7YXV0aG9yaXplZF9jcmVhdG9yfX0uCgp7e2F1dGhvcml6ZWRfY3JlYXRvcn19IGhhcyB0byBiZSBhbiBhdXRob3JpemVkIGFjY291bnQgaW4gdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fS4KClRoZSB0ZW1wbGF0ZSdzIGlzc3VlZCBzdXBwbHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KPC9kaXY+kBXGBiJzGI0MbG9nYmFja2Fzc2V0AJAVxmZefRiNDGxvZ2J1cm5hc3NldAAAAAAgTycZjQdsb2dtaW50AACuWotyNRmNC2xvZ25ld29mZmVyAABilSpzNRmNC2xvZ25ld3RlbXBsAACAySZlhRmNCmxvZ3NldGRhdGEAAK5aeJqbGY0LbG9ndHJhbnNmZXIAAADICmOTp5MJbWludGFzc2V0vA4tLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBNaW50IGFuIGFzc2V0CnN1bW1hcnk6ICd7e25vd3JhcCBhdXRob3JpemVkX21pbnRlcn19IG1pbnRzIGFuIGFzc2V0IHdoaWNoIHdpbGwgYmUgb3duZWQgYnkge3tub3dyYXAgbmV3X2Fzc2V0X293bmVyfX0nCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4Ke3thdXRob3JpemVkX21pbnRlcn19IG1pbnRzIGFuIGFzc2V0IG9mIHRoZSB0ZW1wbGF0ZSB3aGljaCBiZWxvbmdzIHRvIHRoZSB7e3NjaGVtYV9uYW1lfX0gc2NoZW1hIG9mIHRoZSB7e2NvbGxlY3Rpb25fbmFtZX19IGNvbGxlY3Rpb24uIFRoZSBhc3NldCB3aWxsIGJlIG93bmVkIGJ5IHt7bmV3X2Fzc2V0X293bmVyfX0uCgp7eyNpZiBpbW11dGFibGVfZGF0YX19VGhlIGltbXV0YWJsZSBkYXRhIG9mIHRoZSBhc3NldCBpcyBzZXQgdG86CiAgICB7eyNlYWNoIGltbXV0YWJsZV9kYXRhfX0KICAgICAgICAtIG5hbWU6IHt7dGhpcy5rZXl9fSAsIHZhbHVlOiB7e3RoaXMudmFsdWV9fQogICAge3svZWFjaH19Cnt7ZWxzZX19Tm8gaW1tdXRhYmxlIGRhdGEgaXMgc2V0IGZvciB0aGUgYXNzZXQuCnt7L2lmfX0KCnt7I2lmIG11dGFibGVfZGF0YX19VGhlIG11dGFibGUgZGF0YSBvZiB0aGUgYXNzZXQgaXMgc2V0IHRvOgogICAge3sjZWFjaCBtdXRhYmxlX2RhdGF9fQogICAgICAgIC0gbmFtZToge3t0aGlzLmtleX19ICwgdmFsdWU6IHt7dGhpcy52YWx1ZX19CiAgICB7ey9lYWNofX0Ke3tlbHNlfX1ObyBtdXRhYmxlIGRhdGEgaXMgc2V0IGZvciB0aGUgYXNzZXQuCnt7L2lmfX0KCnt7I2lmIHF1YW50aXRpZXNfdG9fYmFja319VGhlIGFzc2V0IHdpbGwgYmUgYmFja2VkIHdpdGggdGhlIGZvbGxvd2luZyB0b2tlbnMgYW5kIHt7YXV0aG9yaXplZF9taW50ZXJ9fSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IHRoYXQgYW1vdW50IG9mIHRva2VucyBpbiB0aGVpciBiYWxhbmNlOgogICAge3sjZWFjaCBxdWFudGl0aWVzX3RvX2JhY2t9fQogICAgICAgIC0ge3txdWFudGl0aWVzX3RvX2JhY2t9fQogICAge3svZWFjaH19Cnt7L2lmfX0KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7YXV0aG9yaXplZF9taW50ZXJ9fS4KCnt7YXV0aG9yaXplZF9taW50ZXJ9fSBoYXMgdG8gYmUgYW4gYXV0aG9yaXplZCBhY2NvdW50IGluIHRoZSBjb2xsZWN0aW9uIHRoYXQgdGhlIHRlbXBsYXRlIHdpdGggdGhlIGlkIHt7dGVtcGxhdGVfaWR9fSBiZWxvbmdzIHRvLgoKTWludGluZyBhc3NldHMgdGhhdCBjb250YWluIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByZXF1aXJlcyB0aGUgcGVybWlzc2lvbiBvZiB0aGUgYWxsIHJpZ2h0cyBob2xkZXJzIG9mIHRoYXQgaW50ZWxsZWN0dWFsIHByb3BlcnR5LgoKTWludGluZyBhc3NldHMgd2l0aCB0aGUgcHVycG9zZSBvZiBjb25mdXNpbmcgb3IgdGFraW5nIGFkdmFudGFnZSBvZiBvdGhlcnMsIGVzcGVjaWFsbHkgYnkgaW1wZXJzb25hdGluZyBvdGhlciB3ZWxsIGtub3duIGJyYW5kcywgcGVyc29uYWxpdGllcyBvciBkYXBwcyBpcyBub3QgYWxsb3dlZC4KCk1pbnRpbmcgYXNzZXRzIHdpdGggdGhlIHB1cnBvc2Ugb2Ygc3BhbW1pbmcgb3Igb3RoZXJ3aXNlIG5lZ2F0aXZlbHkgaW1wYWNpbmcge3tuZXdfb3duZXJ9fSBpcyBub3QgYWxsb3dlZC4KPC9kaXY+AKS5V61FvakLcGF5b2ZmZXJyYW2JBC0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFBheXMgUkFNIGZvciBleGlzdGluZyBvZmZlcgpzdW1tYXJ5OiAne3tub3dyYXAgcGF5ZXJ9fSB3aWxsIHBheSBmb3IgdGhlIFJBTSBjb3N0IG9mIHRoZSBvZmZlciB7e25vd3JhcCBvZmZlcl9pZH19JwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cnt7cGF5ZXJ9fSBwYXlzIGZvciB0aGUgUkFNIGNvc3Qgb2YgdGhlIG9mZmVyIHt7b2ZmZXJfaWR9fS4gVGhlIG9mZmVyIGl0c2VsZiBpcyBub3QgbW9kaWZpZWQKPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7cGF5ZXJ9fS4KPC9kaXY+AEDL2kSKpLoKcmVtY29sYXV0aOkFLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogUmVtb3ZlIGFuIGFjY291bnQncyBhdXRob3JpemF0aW9uIGluIGEgY29sbGVjdGlvbgpzdW1tYXJ5OiAnUmVtb3ZlIHRoZSBhY2NvdW50IHt7bm93cmFwIGFjY291bnRfdG9fcmVtb3ZlfX0gZnJvbSB0aGUgYXV0aG9yaXplZF9hY2NvdW50cyBsaXN0IG9mIHRoZSBjb2xsZWN0aW9uIHt7bm93cmFwIGNvbGxlY3Rpb25fbmFtZX19JwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+ClJlbW92ZXMgdGhlIGFjY291bnQge3thY2NvdW50X3RvX3JlbW92ZX19IGZyb20gdGhlIGF1dGhvcml6ZWRfYWNjb3VudHMgbGlzdCBvZiB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19LgoKVGhpcyByZW1vdmVzIHt7YWNjb3VudF90b19yZW1vdmV9fSdzIHBlcm1pc3Npb24gdG8gYm90aCBjcmVhdGUgYW5kIGVkaXQgdGVtcGxhdGVzIGFuZCBhc3NldHMgb2YgdGhpcyBjb2xsZWN0aW9uLgo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbGxlY3Rpb24ncyBhdXRob3IuCjwvZGl2PoCQ8ctlOqW6DHJlbW5vdGlmeWFjY/sFLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogUmVtb3ZlIGFuIGFjY291bnQgZnJvbSBhIGNvbGxlY3Rpb24ncyBub3RmaXkgbGlzdApzdW1tYXJ5OiAnUmVtb3ZlIHRoZSBhY2NvdW50IHt7bm93cmFwIGFjY291bnRfdG9fcmVtb3ZlfX0gZnJvbSB0aGUgbm90aWZ5X2FjY291bnRzIGxpc3Qgb2YgdGhlIGNvbGxlY3Rpb24ge3tub3dyYXAgY29sbGVjdGlvbl9uYW1lfX0nCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KUmVtb3ZlcyB0aGUgYWNjb3VudCB7e2FjY291bnRfdG9fcmVtb3ZlfX0gZnJvbSB0aGUgbm90aWZ5X2FjY291bnRzIGxpc3Qgb2YgdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fS4KCnt7YWNjb3VudF90b19yZW1vdmV9fSB3aWxsIHRoZXJlZm9yZSBubyBsb25nZXIgcmVjZWl2ZSBub3RpZmljYXRpb25zIGZvciBhbnkgb2YgdGhlIGFjdGlvbnMgcmVsYXRlZCB0byB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19Lgo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbGxlY3Rpb24ncyBhdXRob3IuCjwvZGl2PmCySVlhbLLCDHNldGFzc2V0ZGF0YboILS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogU2V0IHRoZSBtdXRhYmxlIGRhdGEgb2YgYW4gYXNzZXQKc3VtbWFyeTogJ3t7bm93cmFwIGF1dGhvcml6ZWRfZWRpdG9yfX0gc2V0cyB0aGUgbXV0YWJsZSBkYXRhIG9mIHRoZSBhc3NldCB3aXRoIHRoZSBpZCB7e25vd3JhcCBhc3NldF9pZH19IG93bmVkIGJ5IHt7bm93cmFwIGFzc2V0X293bmVyfX0nCmljb246IGh0dHBzOi8vYXRvbWljYXNzZXRzLmlvL2ltYWdlL2xvZ28yNTYucG5nIzEwOEFFRTM1MzBGNEVCMzY4QTRCMEMyODgwMDg5NENGQkFCRjQ2NTM0RjQ4MzQ1QkY2NDUzMDkwNTU0QzUyRDUKLS0tCgo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4Ke3sjaWYgbmV3X211dGFibGVfZGF0YX19e3thdXRob3JpemVkX2VkaXRvcn19IHNldHMgdGhlIG11dGFibGUgZGF0YSBvZiB0aGUgYXNzZXQgd2l0aCB0aGUgaWQge3thc3NldF9pZH19IG93bmVkIGJ5IHt7bm93cmFwIGFzc2V0X293bmVyfX0gdG8gdGhlIGZvbGxvd2luZzoKICAgIHt7I2VhY2ggbmV3X211dGFibGVfZGF0YX19CiAgICAgICAgLSBuYW1lOiB7e3RoaXMua2V5fX0gLCB2YWx1ZToge3t0aGlzLnZhbHVlfX0KICAgIHt7L2VhY2h9fQp7e2Vsc2V9fXt7YXV0aG9yaXplZF9lZGl0b3J9fSBjbGVhcnMgdGhlIG11dGFibGUgZGF0YSBvZiB0aGUgYXNzZXQgd2l0aCB0aGUgaWQge3thc3NldF9pZH19IG93bmVkIGJ5IHt7YXNzZXRfb3duZXJ9fS4Ke3svaWZ9fQo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2Yge3thdXRob3JpemVkX2VkaXRvcn19LgoKe3thdXRob3JpemVkX2VkaXRvcn19IGhhcyB0byBiZSBhbiBhdXRob3JpemVkIGFjY291bnQgaW4gdGhlIGNvbGxlY3Rpb24gdGhhdCB0aGUgYXNzZXQgd2l0aCB0aGUgaWQge3thc3NldF9pZH19IGJlbG9uZ3MgdG8uIChBbiBhc3NldCBiZWxvbmdzIHRvIHRoZSBjb2xsZWN0aW9uIHRoYXQgdGhlIHRlbXBsYXRlIGl0IGlzIHdpdGhpbiBiZWxvbmdzIHRvKQo8L2Rpdj4AgMkmRYqywgpzZXRjb2xkYXRhjwUtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBTZXQgY29sbGVjdGlvbiBkYXRhCnN1bW1hcnk6ICdTZXRzIHRoZSBkYXRhIG9mIHRoZSBjb2xsZWN0aW9uIHt7bm93cmFwIGNvbGxlY3Rpb25fbmFtZX19JwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cnt7I2lmIGRhdGF9fVNldHMgdGhlIGRhdGEgb2YgdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fSB0byB0aGUgZm9sbG93aW5nCiAgICB7eyNlYWNoIGRhdGF9fQogICAgICAgIC0gbmFtZToge3t0aGlzLmtleX19ICwgdmFsdWU6IHt7dGhpcy52YWx1ZX19CiAgICB7ey9lYWNofX0Ke3tlbHNlfX1DbGVhcnMgdGhlIGRhdGEgb2YgdGhlIGNvbGxlY3Rpb24ge3tjb2xsZWN0aW9uX25hbWV9fQp7ey9pZn19CjwvZGl2PgoKPGI+Q2xhdXNlczo8L2I+CjxkaXYgY2xhc3M9ImNsYXVzZXMiPgpUaGlzIGFjdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29sbGVjdGlvbidzIGF1dGhvci4KPC9kaXY+oNTKCl4js8IMc2V0bWFya2V0ZmVlgAUtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBTZXQgY29sbGVjdGlvbiBtYXJrZXQgZmVlCnN1bW1hcnk6ICdTZXRzIHRoZSBtYXJrZXQgZmVlIG9mIHRoZSBjb2xsZWN0aW9uIHt7bm93cmFwIGNvbGxlY3Rpb25fbmFtZX19JwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQoKPGI+RGVzY3JpcHRpb246PC9iPgo8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+ClRoZSBtYXJrZXRfZmVlIGZvciB0aGUgY29sbGVjdGlvbiB7e2NvbGxlY3Rpb25fbmFtZX19IHdpbGwgYmUgc2V0IHRvIHt7bWFya2V0X2ZlZX19LiAzcmQgcGFydHkgbWFya2V0cyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhpcyB2YWx1ZSB0byBjb2xsZWN0IGZlZXMgZm9yIHRoZSBjb2xsZWN0aW9uIGF1dGhvciwgYnV0IGFyZSBub3QgcmVxdWlyZWQgdG8gZG8gc28uCjwvZGl2PgoKPGI+Q2xhdXNlczo8L2I+CjxkaXYgY2xhc3M9ImNsYXVzZXMiPgpUaGlzIGFjdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29sbGVjdGlvbidzIGF1dGhvci4KPC9kaXY+AMCkDl+1s8IKc2V0dmVyc2lvbuwDLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogU2V0IHRva2VuY29uZmlnIHZlcnNpb24Kc3VtbWFyeTogJ1NldHMgdGhlIHZlcnNpb24gaW4gdGhlIHRva2VuY29uZmlncyB0YWJsZSB0byB7e25vd3JhcCBuZXdfdmVyc2lvbn19JwppY29uOiBodHRwczovL2F0b21pY2Fzc2V0cy5pby9pbWFnZS9sb2dvMjU2LnBuZyMxMDhBRUUzNTMwRjRFQjM2OEE0QjBDMjg4MDA4OTRDRkJBQkY0NjUzNEY0ODM0NUJGNjQ1MzA5MDU1NEM1MkQ1Ci0tLQo8Yj5EZXNjcmlwdGlvbjo8L2I+CjxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KVGhlIHZlcnNpb24gaW4gdGhlIHRva2VuY29uZmlncyB0YWJsZSBpcyBzZXQgdG8ge3tuZXdfdmVyc2lvbn19Lgo8L2Rpdj4KCjxiPkNsYXVzZXM6PC9iPgo8ZGl2IGNsYXNzPSJjbGF1c2VzIj4KVGhpcyBhY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIHBlcm1pc3Npb24gb2Yge3skYWN0aW9uLmFjY291bnR9fS4KPC9kaXY+AAAAVy08zc0IdHJhbnNmZXLLBi0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFRyYW5zZmVyIEFzc2V0cwpzdW1tYXJ5OiAnU2VuZCBvbmUgb3IgbW9yZSBhc3NldHMgZnJvbSB7e25vd3JhcCBmcm9tfX0gdG8ge3tub3dyYXAgdG99fScKaWNvbjogaHR0cHM6Ly9hdG9taWNhc3NldHMuaW8vaW1hZ2UvbG9nbzI1Ni5wbmcjMTA4QUVFMzUzMEY0RUIzNjhBNEIwQzI4ODAwODk0Q0ZCQUJGNDY1MzRGNDgzNDVCRjY0NTMwOTA1NTRDNTJENQotLS0KCjxiPkRlc2NyaXB0aW9uOjwvYj4KPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgp7e2Zyb219fSB0cmFuc2ZlcnMgb25lIG9yIG1vcmUgYXNzZXRzIHdpdGggdGhlIGZvbGxvd2luZyBpZHMgdG8ge3t0b319Ogp7eyNlYWNoIGFzc2V0X2lkc319CiAgICAtIHt7dGhpc319Cnt7L2VhY2h9fQoKe3sjaWYgbWVtb319VGhlcmUgaXMgYSBtZW1vIGF0dGFjaGVkIHRvIHRoZSB0cmFuc2ZlciBzdGF0aW5nOgogICAge3ttZW1vfX0Ke3tlbHNlfX1ObyBtZW1vIGlzIGF0dGFjaGVkIHRvIHRoZSB0cmFuc2Zlci4Ke3svaWZ9fQoKSWYge3t0b319IGRvZXMgbm90IG93biBhbnkgYXNzZXRzLCB7e2Zyb219fSBwYXlzIHRoZSBSQU0gZm9yIHRoZSBzY29wZSBvZiB7e3RvfX0gaW4gdGhlIGFzc2V0cyB0YWJsZS4KPC9kaXY+Cgo8Yj5DbGF1c2VzOjwvYj4KPGRpdiBjbGFzcz0iY2xhdXNlcyI+ClRoaXMgYWN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHt7ZnJvbX19LgoKVHJhbnNmZXJzIHRoYXQgZG8gbm90IHNlcnZlIGFueSBwdXJwb3NlIG90aGVyIHRoYW4gc3BhbW1pbmcgdGhlIHJlY2lwaWVudCBhcmUgbm90IGFsbG93ZWQuCjwvZGl2PgAAANzc1LLjCHdpdGhkcmF37AQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBXaXRoZHJhd3MgZnVuZ2libGUgdG9rZW5zCnN1bW1hcnk6ICd7e25vd3JhcCBvd25lcn19IHdpdGhkcmF3cyB7e3Rva2VuX3RvX3dpdGhkcmF3fX0gZnJvbSBoaXMgYmFsYW5jZScKaWNvbjogaHR0cHM6Ly9hdG9taWNhc3NldHMuaW8vaW1hZ2UvbG9nbzI1Ni5wbmcjMTA4QUVFMzUzMEY0RUIzNjhBNEIwQzI4ODAwODk0Q0ZCQUJGNDY1MzRGNDgzNDVCRjY0NTMwOTA1NTRDNTJENQotLS0KCjxiPkRlc2NyaXB0aW9uOjwvYj4KPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgp7e293bmVyfX0gd2l0aGRyYXdzIHt7dG9rZW5fdG9fd2l0aGRyYXd9fSB0aGF0IHRoZXkgcHJldmlvdXNseSBkZXBvc2l0ZWQgYW5kIGhhdmUgbm90IHlldCBzcGVudCBvdGhlcndpc2UuClRoZSB0b2tlbnMgd2lsbCBiZSB0cmFuc2ZlcnJlZCBiYWNrIHRvIHt7b3duZXJ9fSBhbmQgd2lsbCBiZSBkZWR1Y3RlZCBmcm9tIHt7b3duZXJ9fSdzIGJhbGFuY2UuCjwvZGl2PgoKPGI+Q2xhdXNlczo8L2I+CjxkaXYgY2xhc3M9ImNsYXVzZXMiPgpUaGlzIGFjdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB7e293bmVyfX0uCjwvZGl2PggAAAAA4KwwNgNpNjQAAAhhc3NldHNfcwAAAFihaaI5A2k2NAAACmJhbGFuY2VzX3MA8KQuIxUjRQNpNjQAAA1jb2xsZWN0aW9uc19zAAAAADC3JkUDaTY0AAAIY29uZmlnX3MAAAAA4KvWogNpNjQAAAhvZmZlcnNfcwAAAAAbqRrCA2k2NAAACXNjaGVtYXNfcwAAwCqbWKXKA2k2NAAAC3RlbXBsYXRlc19zgJlbk6KpIM0DaTY0AAAOdG9rZW5jb25maWdzX3MAAAABwgF2YXJpYW50X2ludDhfaW50MTZfaW50MzJfaW50NjRfdWludDhfdWludDE2X3VpbnQzMl91aW50NjRfZmxvYXQzMl9mbG9hdDY0X3N0cmluZ19JTlQ4X1ZFQ19JTlQxNl9WRUNfSU5UMzJfVkVDX0lOVDY0X1ZFQ19VSU5UOF9WRUNfVUlOVDE2X1ZFQ19VSU5UMzJfVkVDX1VJTlQ2NF9WRUNfRkxPQVRfVkVDX0RPVUJMRV9WRUNfU1RSSU5HX1ZFQxYEaW50OAVpbnQxNgVpbnQzMgVpbnQ2NAV1aW50OAZ1aW50MTYGdWludDMyBnVpbnQ2NAdmbG9hdDMyB2Zsb2F0NjQGc3RyaW5nCElOVDhfVkVDCUlOVDE2X1ZFQwlJTlQzMl9WRUMJSU5UNjRfVkVDCVVJTlQ4X1ZFQwpVSU5UMTZfVkVDClVJTlQzMl9WRUMKVUlOVDY0X1ZFQwlGTE9BVF9WRUMKRE9VQkxFX1ZFQwpTVFJJTkdfVkVDAA==' ) export const abi = ABI.from(abiBlob) export namespace Types { @Variant.type( 'variant_int8_int16_int32_int64_uint8_uint16_uint32_uint64_float32_float64_string_INT8_VEC_INT16_VEC_INT32_VEC_INT64_VEC_UINT8_VEC_UINT16_VEC_UINT32_VEC_UINT64_VEC_FLOAT_VEC_DOUBLE_VEC_STRING_VEC', [ Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64, 'string', Bytes, {type: Int16, array: true}, {type: Int32, array: true}, {type: Int64, array: true}, {type: UInt8, array: true}, {type: UInt16, array: true}, {type: UInt32, array: true}, {type: UInt64, array: true}, {type: Float32, array: true}, {type: Float64, array: true}, 'string[]', ] ) export class variant_int8_int16_int32_int64_uint8_uint16_uint32_uint64_float32_float64_string_INT8_VEC_INT16_VEC_INT32_VEC_INT64_VEC_UINT8_VEC_UINT16_VEC_UINT32_VEC_UINT64_VEC_FLOAT_VEC_DOUBLE_VEC_STRING_VEC extends Variant { declare value: | Int8 | Int16 | Int32 | Int64 | UInt8 | UInt16 | UInt32 | UInt64 | Float32 | Float64 | string | Bytes | Int16[] | Int32[] | Int64[] | UInt8[] | UInt16[] | UInt32[] | UInt64[] | Float32[] | Float64[] | string[] } @Struct.type('FORMAT') export class FORMAT extends Struct { @Struct.field('string') declare name: string @Struct.field('string') declare type: string } @Struct.type('acceptoffer') export class acceptoffer extends Struct { @Struct.field(UInt64) declare offer_id: UInt64 } @Struct.type('addcolauth') export class addcolauth extends Struct { @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare account_to_add: Name } @Struct.type('addconftoken') export class addconftoken extends Struct { @Struct.field(Name) declare token_contract: Name @Struct.field(Asset.Symbol) declare token_symbol: Asset.Symbol } @Struct.type('addnotifyacc') export class addnotifyacc extends Struct { @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare account_to_add: Name } @Struct.type('admincoledit') export class admincoledit extends Struct { @Struct.field(FORMAT, {array: true}) declare collection_format_extension: FORMAT[] } @Struct.type('announcedepo') export class announcedepo extends Struct { @Struct.field(Name) declare owner: Name @Struct.field(Asset.Symbol) declare symbol_to_announce: Asset.Symbol } @Struct.type('assets_s') export class assets_s extends Struct { @Struct.field(UInt64) declare asset_id: UInt64 @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare schema_name: Name @Struct.field(Int32) declare template_id: Int32 @Struct.field(Name) declare ram_payer: Name @Struct.field(Asset, {array: true}) declare backed_tokens: Asset[] @Struct.field(UInt8, {array: true}) declare immutable_serialized_data: UInt8[] @Struct.field(UInt8, {array: true}) declare mutable_serialized_data: UInt8[] } @Struct.type('backasset') export class backasset extends Struct { @Struct.field(Name) declare payer: Name @Struct.field(Name) declare asset_owner: Name @Struct.field(UInt64) declare asset_id: UInt64 @Struct.field(Asset) declare token_to_back: Asset } @Struct.type('balances_s') export class balances_s extends Struct { @Struct.field(Name) declare owner: Name @Struct.field(Asset, {array: true}) declare quantities: Asset[] } @Struct.type('burnasset') export class burnasset extends Struct { @Struct.field(Name) declare asset_owner: Name @Struct.field(UInt64) declare asset_id: UInt64 } @Struct.type('canceloffer') export class canceloffer extends Struct { @Struct.field(UInt64) declare offer_id: UInt64 } @Struct.type('collections_s') export class collections_s extends Struct { @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare author: Name @Struct.field('bool') declare allow_notify: boolean @Struct.field(Name, {array: true}) declare authorized_accounts: Name[] @Struct.field(Name, {array: true}) declare notify_accounts: Name[] @Struct.field(Float64) declare market_fee: Float64 @Struct.field(UInt8, {array: true}) declare serialized_data: UInt8[] } @Struct.type('extended_symbol') export class extended_symbol extends Struct { @Struct.field(Asset.Symbol) declare sym: Asset.Symbol @Struct.field(Name) declare contract: Name } @Struct.type('config_s') export class config_s extends Struct { @Struct.field(UInt64) declare asset_counter: UInt64 @Struct.field(Int32) declare template_counter: Int32 @Struct.field(UInt64) declare offer_counter: UInt64 @Struct.field(FORMAT, {array: true}) declare collection_format: FORMAT[] @Struct.field(extended_symbol, {array: true}) declare supported_tokens: extended_symbol[] } @Struct.type('pair_string_ATOMIC_ATTRIBUTE') export class pair_string_ATOMIC_ATTRIBUTE extends Struct { @Struct.field('string') declare key: string @Struct.field( variant_int8_int16_int32_int64_uint8_uint16_uint32_uint64_float32_float64_string_INT8_VEC_INT16_VEC_INT32_VEC_INT64_VEC_UINT8_VEC_UINT16_VEC_UINT32_VEC_UINT64_VEC_FLOAT_VEC_DOUBLE_VEC_STRING_VEC ) declare value: variant_int8_int16_int32_int64_uint8_uint16_uint32_uint64_float32_float64_string_INT8_VEC_INT16_VEC_INT32_VEC_INT64_VEC_UINT8_VEC_UINT16_VEC_UINT32_VEC_UINT64_VEC_FLOAT_VEC_DOUBLE_VEC_STRING_VEC } @Struct.type('createcol') export class createcol extends Struct { @Struct.field(Name) declare author: Name @Struct.field(Name) declare collection_name: Name @Struct.field('bool') declare allow_notify: boolean @Struct.field(Name, {array: true}) declare authorized_accounts: Name[] @Struct.field(Name, {array: true}) declare notify_accounts: Name[] @Struct.field(Float64) declare market_fee: Float64 @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare data: pair_string_ATOMIC_ATTRIBUTE[] } @Struct.type('createoffer') export class createoffer extends Struct { @Struct.field(Name) declare sender: Name @Struct.field(Name) declare recipient: Name @Struct.field(UInt64, {array: true}) declare sender_asset_ids: UInt64[] @Struct.field(UInt64, {array: true}) declare recipient_asset_ids: UInt64[] @Struct.field('string') declare memo: string } @Struct.type('createschema') export class createschema extends Struct { @Struct.field(Name) declare authorized_creator: Name @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare schema_name: Name @Struct.field(FORMAT, {array: true}) declare schema_format: FORMAT[] } @Struct.type('createtempl') export class createtempl extends Struct { @Struct.field(Name) declare authorized_creator: Name @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare schema_name: Name @Struct.field('bool') declare transferable: boolean @Struct.field('bool') declare burnable: boolean @Struct.field(UInt32) declare max_supply: UInt32 @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare immutable_data: pair_string_ATOMIC_ATTRIBUTE[] } @Struct.type('declineoffer') export class declineoffer extends Struct { @Struct.field(UInt64) declare offer_id: UInt64 } @Struct.type('extendschema') export class extendschema extends Struct { @Struct.field(Name) declare authorized_editor: Name @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare schema_name: Name @Struct.field(FORMAT, {array: true}) declare schema_format_extension: FORMAT[] } @Struct.type('forbidnotify') export class forbidnotify extends Struct { @Struct.field(Name) declare collection_name: Name } @Struct.type('init') export class init extends Struct {} @Struct.type('locktemplate') export class locktemplate extends Struct { @Struct.field(Name) declare authorized_editor: Name @Struct.field(Name) declare collection_name: Name @Struct.field(Int32) declare template_id: Int32 } @Struct.type('logbackasset') export class logbackasset extends Struct { @Struct.field(Name) declare asset_owner: Name @Struct.field(UInt64) declare asset_id: UInt64 @Struct.field(Asset) declare backed_token: Asset } @Struct.type('logburnasset') export class logburnasset extends Struct { @Struct.field(Name) declare asset_owner: Name @Struct.field(UInt64) declare asset_id: UInt64 @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare schema_name: Name @Struct.field(Int32) declare template_id: Int32 @Struct.field(Asset, {array: true}) declare backed_tokens: Asset[] @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare old_immutable_data: pair_string_ATOMIC_ATTRIBUTE[] @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare old_mutable_data: pair_string_ATOMIC_ATTRIBUTE[] @Struct.field(Name) declare asset_ram_payer: Name } @Struct.type('logmint') export class logmint extends Struct { @Struct.field(UInt64) declare asset_id: UInt64 @Struct.field(Name) declare authorized_minter: Name @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare schema_name: Name @Struct.field(Int32) declare template_id: Int32 @Struct.field(Name) declare new_asset_owner: Name @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare immutable_data: pair_string_ATOMIC_ATTRIBUTE[] @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare mutable_data: pair_string_ATOMIC_ATTRIBUTE[] @Struct.field(Asset, {array: true}) declare backed_tokens: Asset[] @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare immutable_template_data: pair_string_ATOMIC_ATTRIBUTE[] } @Struct.type('lognewoffer') export class lognewoffer extends Struct { @Struct.field(UInt64) declare offer_id: UInt64 @Struct.field(Name) declare sender: Name @Struct.field(Name) declare recipient: Name @Struct.field(UInt64, {array: true}) declare sender_asset_ids: UInt64[] @Struct.field(UInt64, {array: true}) declare recipient_asset_ids: UInt64[] @Struct.field('string') declare memo: string } @Struct.type('lognewtempl') export class lognewtempl extends Struct { @Struct.field(Int32) declare template_id: Int32 @Struct.field(Name) declare authorized_creator: Name @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare schema_name: Name @Struct.field('bool') declare transferable: boolean @Struct.field('bool') declare burnable: boolean @Struct.field(UInt32) declare max_supply: UInt32 @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare immutable_data: pair_string_ATOMIC_ATTRIBUTE[] } @Struct.type('logsetdata') export class logsetdata extends Struct { @Struct.field(Name) declare asset_owner: Name @Struct.field(UInt64) declare asset_id: UInt64 @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare old_data: pair_string_ATOMIC_ATTRIBUTE[] @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare new_data: pair_string_ATOMIC_ATTRIBUTE[] } @Struct.type('logtransfer') export class logtransfer extends Struct { @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare from: Name @Struct.field(Name) declare to: Name @Struct.field(UInt64, {array: true}) declare asset_ids: UInt64[] @Struct.field('string') declare memo: string } @Struct.type('mintasset') export class mintasset extends Struct { @Struct.field(Name) declare authorized_minter: Name @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare schema_name: Name @Struct.field(Int32) declare template_id: Int32 @Struct.field(Name) declare new_asset_owner: Name @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare immutable_data: pair_string_ATOMIC_ATTRIBUTE[] @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare mutable_data: pair_string_ATOMIC_ATTRIBUTE[] @Struct.field(Asset, {array: true}) declare tokens_to_back: Asset[] } @Struct.type('offers_s') export class offers_s extends Struct { @Struct.field(UInt64) declare offer_id: UInt64 @Struct.field(Name) declare sender: Name @Struct.field(Name) declare recipient: Name @Struct.field(UInt64, {array: true}) declare sender_asset_ids: UInt64[] @Struct.field(UInt64, {array: true}) declare recipient_asset_ids: UInt64[] @Struct.field('string') declare memo: string @Struct.field(Name) declare ram_payer: Name } @Struct.type('payofferram') export class payofferram extends Struct { @Struct.field(Name) declare payer: Name @Struct.field(UInt64) declare offer_id: UInt64 } @Struct.type('remcolauth') export class remcolauth extends Struct { @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare account_to_remove: Name } @Struct.type('remnotifyacc') export class remnotifyacc extends Struct { @Struct.field(Name) declare collection_name: Name @Struct.field(Name) declare account_to_remove: Name } @Struct.type('schemas_s') export class schemas_s extends Struct { @Struct.field(Name) declare schema_name: Name @Struct.field(FORMAT, {array: true}) declare format: FORMAT[] } @Struct.type('setassetdata') export class setassetdata extends Struct { @Struct.field(Name) declare authorized_editor: Name @Struct.field(Name) declare asset_owner: Name @Struct.field(UInt64) declare asset_id: UInt64 @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare new_mutable_data: pair_string_ATOMIC_ATTRIBUTE[] } @Struct.type('setcoldata') export class setcoldata extends Struct { @Struct.field(Name) declare collection_name: Name @Struct.field(pair_string_ATOMIC_ATTRIBUTE, {array: true}) declare data: pair_string_ATOMIC_ATTRIBUTE[] } @Struct.type('setmarketfee') export class setmarketfee extends Struct { @Struct.field(Name) declare collection_name: Name @Struct.field(Float64) declare market_fee: Float64 } @Struct.type('setversion') export class setversion extends Struct { @Struct.field('string') declare new_version: string } @Struct.type('templates_s') export class templates_s extends Struct { @Struct.field(Int32) declare template_id: Int32 @Struct.field(Name) declare schema_name: Name @Struct.field('bool') declare transferable: boolean @Struct.field('bool') declare burnable: boolean @Struct.field(UInt32) declare max_supply: UInt32 @Struct.field(UInt32) declare issued_supply: UInt32 @Struct.field(UInt8, {array: true}) declare immutable_serialized_data: UInt8[] } @Struct.type('tokenconfigs_s') export class tokenconfigs_s extends Struct { @Struct.field(Name) declare standard: Name @Struct.field('string') declare version: string } @Struct.type('transfer') export class transfer extends Struct { @Struct.field(Name) declare from: Name @Struct.field(Name) declare to: Name @Struct.field(UInt64, {array: true}) declare asset_ids: UInt64[] @Struct.field('string') declare memo: string } @Struct.type('withdraw') export class withdraw extends Struct { @Struct.field(Name) declare owner: Name @Struct.field(Asset) declare token_to_withdraw: Asset } } export const TableMap = { assets: Types.assets_s, balances: Types.balances_s, collections: Types.collections_s, config: Types.config_s, offers: Types.offers_s, schemas: Types.schemas_s, templates: Types.templates_s, tokenconfigs: Types.tokenconfigs_s, } export interface TableTypes { assets: Types.assets_s balances: Types.balances_s collections: Types.collections_s config: Types.config_s offers: Types.offers_s schemas: Types.schemas_s templates: Types.templates_s tokenconfigs: Types.tokenconfigs_s } export type RowType = T extends keyof TableTypes ? TableTypes[T] : any export type TableNames = keyof TableTypes export namespace ActionParams { export namespace Type { export interface FORMAT { name: string type: string } export interface pair_string_ATOMIC_ATTRIBUTE { key: string value: Type.variant_int8_int16_int32_int64_uint8_uint16_uint32_uint64_float32_float64_string_INT8_VEC_INT16_VEC_INT32_VEC_INT64_VEC_UINT8_VEC_UINT16_VEC_UINT32_VEC_UINT64_VEC_FLOAT_VEC_DOUBLE_VEC_STRING_VEC } export type variant_int8_int16_int32_int64_uint8_uint16_uint32_uint64_float32_float64_string_INT8_VEC_INT16_VEC_INT32_VEC_INT64_VEC_UINT8_VEC_UINT16_VEC_UINT32_VEC_UINT64_VEC_FLOAT_VEC_DOUBLE_VEC_STRING_VEC = | Int8Type | Int16Type | Int32Type | Int64Type | UInt8Type | UInt16Type | UInt32Type | UInt64Type | Float32Type | Float64Type | string | BytesType | Int16Type[] | Int32Type[] | Int64Type[] | UInt8Type[] | UInt16Type[] | UInt32Type[] | UInt64Type[] | Float32Type[] | Float64Type[] | string[] | Types.variant_int8_int16_int32_int64_uint8_uint16_uint32_uint64_float32_float64_string_INT8_VEC_INT16_VEC_INT32_VEC_INT64_VEC_UINT8_VEC_UINT16_VEC_UINT32_VEC_UINT64_VEC_FLOAT_VEC_DOUBLE_VEC_STRING_VEC } export interface acceptoffer { offer_id: UInt64Type } export interface addcolauth { collection_name: NameType account_to_add: NameType } export interface addconftoken { token_contract: NameType token_symbol: Asset.SymbolType } export interface addnotifyacc { collection_name: NameType account_to_add: NameType } export interface admincoledit { collection_format_extension: Type.FORMAT[] } export interface announcedepo { owner: NameType symbol_to_announce: Asset.SymbolType } export interface backasset { payer: NameType asset_owner: NameType asset_id: UInt64Type token_to_back: AssetType } export interface burnasset { asset_owner: NameType asset_id: UInt64Type } export interface canceloffer { offer_id: UInt64Type } export interface createcol { author: NameType collection_name: NameType allow_notify: boolean authorized_accounts: NameType[] notify_accounts: NameType[] market_fee: Float64Type data: Type.pair_string_ATOMIC_ATTRIBUTE[] } export interface createoffer { sender: NameType recipient: NameType sender_asset_ids: UInt64Type[] recipient_asset_ids: UInt64Type[] memo: string } export interface createschema { authorized_creator: NameType collection_name: NameType schema_name: NameType schema_format: Type.FORMAT[] } export interface createtempl { authorized_creator: NameType collection_name: NameType schema_name: NameType transferable: boolean burnable: boolean max_supply: UInt32Type immutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] } export interface declineoffer { offer_id: UInt64Type } export interface extendschema { authorized_editor: NameType collection_name: NameType schema_name: NameType schema_format_extension: Type.FORMAT[] } export interface forbidnotify { collection_name: NameType } export interface init {} export interface locktemplate { authorized_editor: NameType collection_name: NameType template_id: Int32Type } export interface logbackasset { asset_owner: NameType asset_id: UInt64Type backed_token: AssetType } export interface logburnasset { asset_owner: NameType asset_id: UInt64Type collection_name: NameType schema_name: NameType template_id: Int32Type backed_tokens: AssetType[] old_immutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] old_mutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] asset_ram_payer: NameType } export interface logmint { asset_id: UInt64Type authorized_minter: NameType collection_name: NameType schema_name: NameType template_id: Int32Type new_asset_owner: NameType immutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] mutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] backed_tokens: AssetType[] immutable_template_data: Type.pair_string_ATOMIC_ATTRIBUTE[] } export interface lognewoffer { offer_id: UInt64Type sender: NameType recipient: NameType sender_asset_ids: UInt64Type[] recipient_asset_ids: UInt64Type[] memo: string } export interface lognewtempl { template_id: Int32Type authorized_creator: NameType collection_name: NameType schema_name: NameType transferable: boolean burnable: boolean max_supply: UInt32Type immutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] } export interface logsetdata { asset_owner: NameType asset_id: UInt64Type old_data: Type.pair_string_ATOMIC_ATTRIBUTE[] new_data: Type.pair_string_ATOMIC_ATTRIBUTE[] } export interface logtransfer { collection_name: NameType from: NameType to: NameType asset_ids: UInt64Type[] memo: string } export interface mintasset { authorized_minter: NameType collection_name: NameType schema_name: NameType template_id: Int32Type new_asset_owner: NameType immutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] mutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] tokens_to_back: AssetType[] } export interface payofferram { payer: NameType offer_id: UInt64Type } export interface remcolauth { collection_name: NameType account_to_remove: NameType } export interface remnotifyacc { collection_name: NameType account_to_remove: NameType } export interface setassetdata { authorized_editor: NameType asset_owner: NameType asset_id: UInt64Type new_mutable_data: Type.pair_string_ATOMIC_ATTRIBUTE[] } export interface setcoldata { collection_name: NameType data: Type.pair_string_ATOMIC_ATTRIBUTE[] } export interface setmarketfee { collection_name: NameType market_fee: Float64Type } export interface setversion { new_version: string } export interface transfer { from: NameType to: NameType asset_ids: UInt64Type[] memo: string } export interface withdraw { owner: NameType token_to_withdraw: AssetType } } export interface ActionNameParams { acceptoffer: ActionParams.acceptoffer addcolauth: ActionParams.addcolauth addconftoken: ActionParams.addconftoken addnotifyacc: ActionParams.addnotifyacc admincoledit: ActionParams.admincoledit announcedepo: ActionParams.announcedepo backasset: ActionParams.backasset burnasset: ActionParams.burnasset canceloffer: ActionParams.canceloffer createcol: ActionParams.createcol createoffer: ActionParams.createoffer createschema: ActionParams.createschema createtempl: ActionParams.createtempl declineoffer: ActionParams.declineoffer extendschema: ActionParams.extendschema forbidnotify: ActionParams.forbidnotify init: ActionParams.init locktemplate: ActionParams.locktemplate logbackasset: ActionParams.logbackasset logburnasset: ActionParams.logburnasset logmint: ActionParams.logmint lognewoffer: ActionParams.lognewoffer lognewtempl: ActionParams.lognewtempl logsetdata: ActionParams.logsetdata logtransfer: ActionParams.logtransfer mintasset: ActionParams.mintasset payofferram: ActionParams.payofferram remcolauth: ActionParams.remcolauth remnotifyacc: ActionParams.remnotifyacc setassetdata: ActionParams.setassetdata setcoldata: ActionParams.setcoldata setmarketfee: ActionParams.setmarketfee setversion: ActionParams.setversion transfer: ActionParams.transfer withdraw: ActionParams.withdraw } export type ActionNames = keyof ActionNameParams export class Contract extends BaseContract { constructor(args: PartialBy) { super({ client: args.client, abi: abi, account: args.account || Name.from('atomicassets'), }) } action( name: T, data: ActionNameParams[T], options?: ActionOptions ): Action { return super.action(name, data, options) } table(name: T, scope?: NameType): Table> { return super.table(name, scope, TableMap[name]) } }