diff --git a/Cargo.lock b/Cargo.lock index 77810325..457daf8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -33,7 +33,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", ] [[package]] @@ -93,9 +93,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.58" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" +checksum = "c91f1f46651137be86f3a2b9a8359f9ab421d04d941c62b5982e1ca21113adf9" [[package]] name = "approx" @@ -275,9 +275,9 @@ checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" +checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" dependencies = [ "proc-macro2", "quote", @@ -493,7 +493,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding 0.2.1", - "generic-array 0.14.5", + "generic-array 0.14.6", ] [[package]] @@ -502,7 +502,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", ] [[package]] @@ -584,9 +584,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" [[package]] name = "bzip2-sys" @@ -631,7 +631,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.12", + "semver 1.0.13", "serde", "serde_json", ] @@ -687,14 +687,15 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "6127248204b9aba09a362f6c930ef6a78f2c1b2215f8a7b398c06e1083f17af0" dependencies = [ - "libc", + "js-sys", "num-integer", "num-traits", "time", + "wasm-bindgen", "winapi", ] @@ -717,7 +718,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", ] [[package]] @@ -733,9 +734,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.8" +version = "3.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83" +checksum = "a3dbbb6653e7c55cc8595ad3e1f7be8f32aba4eb7ff7f0fd1163d4f3d137c0a9" dependencies = [ "atty", "bitflags", @@ -750,9 +751,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.2.7" +version = "3.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902" +checksum = "9ba52acd3b0a5c33aeada5cdaa3267cdc7c594a98731d4268cdc1532f4264cb4" dependencies = [ "heck", "proc-macro-error", @@ -792,9 +793,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" dependencies = [ "cache-padded", ] @@ -856,18 +857,18 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7901fbba05decc537080b07cb3f1cadf53be7b7602ca8255786288a8692ae29a" +checksum = "749d0d6022c9038dccf480bdde2a38d435937335bf2bb0f14e815d94517cdce8" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ba1b45d243a4a28e12d26cd5f2507da74e77c45927d40de8b6ffbf088b46b5" +checksum = "e94370cc7b37bf652ccd8bb8f09bd900997f7ccf97520edfc75554bb5c4abbea" dependencies = [ "cranelift-bforest", "cranelift-codegen-meta", @@ -883,33 +884,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54cc30032171bf230ce22b99c07c3a1de1221cb5375bd6dbe6dbe77d0eed743c" +checksum = "e0a3cea8fdab90e44018c5b9a1dfd460d8ee265ac354337150222a354628bdb6" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23f2672426d2bb4c9c3ef53e023076cfc4d8922f0eeaebaf372c92fae8b5c69" +checksum = "5ac72f76f2698598951ab26d8c96eaa854810e693e7dd52523958b5909fde6b2" [[package]] name = "cranelift-entity" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "886c59a5e0de1f06dbb7da80db149c75de10d5e2caca07cdd9fef8a5918a6336" +checksum = "09eaeacfcd2356fe0e66b295e8f9d59fdd1ac3ace53ba50de14d628ec902f72d" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace74eeca11c439a9d4ed1a5cb9df31a54cd0f7fbddf82c8ce4ea8e9ad2a8fe0" +checksum = "dba69c9980d5ffd62c18a2bde927855fcd7c8dc92f29feaf8636052662cbd99c" dependencies = [ "cranelift-codegen", "log", @@ -919,15 +920,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db1ae52a5cc2cad0d86fdd3dcb16b7217d2f1e65ab4f5814aa4f014ad335fa43" +checksum = "d2920dc1e05cac40304456ed3301fde2c09bd6a9b0210bcfa2f101398d628d5b" [[package]] name = "cranelift-native" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dadcfb7852900780d37102bce5698bcd401736403f07b52e714ff7a180e0e22f" +checksum = "f04dfa45f9b2a6f587c564d6b63388e00cd6589d2df6ea2758cf79e1a13285e6" dependencies = [ "cranelift-codegen", "libc", @@ -936,9 +937,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.85.1" +version = "0.85.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84e3410960389110b88f97776f39f6d2c8becdaa4cd59e390e6b76d9d0e7190" +checksum = "31a46513ae6f26f3f267d8d75b5373d555fbbd1e68681f348d99df43f747ec54" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -961,9 +962,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", "crossbeam-utils", @@ -971,9 +972,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -982,9 +983,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" +checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1" dependencies = [ "autocfg", "cfg-if", @@ -996,9 +997,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" +checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" dependencies = [ "cfg-if", "once_cell", @@ -1016,7 +1017,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", "rand_core 0.6.3", "subtle", "zeroize", @@ -1024,11 +1025,11 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ccfd8c0ee4cce11e45b3fd6f9d5e69e0cc62912aa6a0cb1bf4617b0eba5a12f" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", "typenum", ] @@ -1038,7 +1039,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", "subtle", ] @@ -1048,15 +1049,15 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", "subtle", ] [[package]] name = "ctor" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" +checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" dependencies = [ "quote", "syn", @@ -1182,7 +1183,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", ] [[package]] @@ -1255,9 +1256,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5caaa75cbd2b960ff1e5392d2cfb1f44717fffe12fc1f32b7b5d1267f99732a6" +checksum = "c6053ff46b5639ceb91756a85a4c8914668393a03170efd79c8884a529d80656" [[package]] name = "dyn-clonable" @@ -1282,9 +1283,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140206b78fb2bc3edbcfc9b5ccbd0b30699cfe8d348b8b31b330e47df5291a5a" +checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" [[package]] name = "ecdsa" @@ -1337,7 +1338,7 @@ dependencies = [ "crypto-bigint", "der", "ff", - "generic-array 0.14.5", + "generic-array 0.14.6", "group", "rand_core 0.6.3", "sec1", @@ -1399,9 +1400,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "exit-future" @@ -1426,9 +1427,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] @@ -1925,9 +1926,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -1979,9 +1980,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" dependencies = [ "fallible-iterator", "indexmap", @@ -2051,9 +2052,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.3.1" +version = "4.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66d0c1b6e3abfd1e72818798925e16e02ed77e1b47f6c25a95a23b377ee4299" +checksum = "360d9740069b2f6cbb63ce2dbaa71a20d3185350cbb990d7bebeb9318415eb17" dependencies = [ "log", "pest", @@ -2089,9 +2090,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "607c8a29735385251a339424dd462993c0fed8fa09d378f259377df08c126022" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ "ahash", ] @@ -2156,7 +2157,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.5", + "generic-array 0.14.6", "hmac 0.8.1", ] @@ -2179,7 +2180,7 @@ checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa 1.0.2", + "itoa 1.0.3", ] [[package]] @@ -2226,7 +2227,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.2", + "itoa 1.0.3", "pin-project-lite 0.2.9", "socket2", "tokio", @@ -2325,7 +2326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown 0.12.2", + "hashbrown 0.12.3", "serde", ] @@ -2400,9 +2401,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" [[package]] name = "jobserver" @@ -2415,9 +2416,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.58" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" dependencies = [ "wasm-bindgen", ] @@ -2640,9 +2641,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "505e71a4706fa491e9b1b55f51b95d4037d0821ee40131190475f692b35b009b" [[package]] name = "libloading" @@ -2666,9 +2667,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a33a362ce288760ec6a508b94caaec573ae7d3bbbd91b87aa0bad4456839db" +checksum = "da83a57f3f5ba3680950aa3cbc806fc297bc0b289d42e8942ed528ace71b8145" [[package]] name = "libp2p" @@ -3202,9 +3203,9 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ "arrayref", "base64", @@ -3318,11 +3319,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" dependencies = [ - "hashbrown 0.11.2", + "hashbrown 0.12.3", ] [[package]] @@ -3363,12 +3364,6 @@ dependencies = [ "libc", ] -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - [[package]] name = "match_cfg" version = "0.1.0" @@ -3448,7 +3443,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6566c70c1016f525ced45d7b7f97730a2bafb037c788211d0c186ef5b2189f0a" dependencies = [ "hash-db", - "hashbrown 0.12.2", + "hashbrown 0.12.3", "parity-util-mem", ] @@ -3545,7 +3540,7 @@ dependencies = [ "digest 0.10.3", "multihash-derive", "sha2 0.10.2", - "sha3 0.10.1", + "sha3 0.10.2", "unsigned-varint", ] @@ -3689,9 +3684,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" dependencies = [ "bitflags", "cfg-if", @@ -3850,9 +3845,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.1.0" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa" +checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4" [[package]] name = "owning_ref" @@ -4176,9 +4171,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.3.14" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "966eb23bd3a09758b8dac09f82b9d417c00f14e5d46171bf04cffdd9cb2e1eb1" +checksum = "2bb474d0ed0836e185cb998a6b140ed1073d1fbf27d690ecf9ede8030289382c" dependencies = [ "blake2-rfc", "crc32fast", @@ -4232,7 +4227,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c32561d248d352148124f036cac253a644685a21dc9fea383eb4907d7bd35a8f" dependencies = [ "cfg-if", - "hashbrown 0.12.2", + "hashbrown 0.12.3", "impl-trait-for-tuples", "parity-util-mem-derive", "parking_lot 0.12.1", @@ -4323,9 +4318,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" +checksum = "9423e2b32f7a043629287a536f21951e8c6a82482d0acb1eeebfc90bc2225b22" [[package]] name = "pbkdf2" @@ -4359,18 +4354,19 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pest" -version = "2.1.3" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +checksum = "69486e2b8c2d2aeb9762db7b4e00b0331156393555cff467f4163ff06821eef8" dependencies = [ + "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.1.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +checksum = "b13570633aff33c6d22ce47dd566b10a3b9122c2fe9d8e7501895905be532b91" dependencies = [ "pest", "pest_generator", @@ -4378,9 +4374,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.1.3" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +checksum = "b3c567e5702efdc79fb18859ea74c3eb36e14c43da7b8c1f098a4ed6514ec7a0" dependencies = [ "pest", "pest_meta", @@ -4391,13 +4387,13 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.1.3" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +checksum = "5eb32be5ee3bbdafa8c7a18b0a8a8d962b66cfa2ceee4037f49267a50ee821fe" dependencies = [ - "maplit", + "once_cell", "pest", - "sha-1 0.8.2", + "sha-1 0.10.0", ] [[package]] @@ -4517,10 +4513,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "26d50bfb8c23f23915855a00d98b5a35ef2e0b871bb52937bacadb798fbb66c8" dependencies = [ + "once_cell", "thiserror", "toml", ] @@ -4551,9 +4548,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -4579,7 +4576,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac1abe0255c04d15f571427a2d1e00099016506cf3297b53853acd2b7eb87825" dependencies = [ "dtoa", - "itoa 1.0.2", + "itoa 1.0.3", "owning_ref", "prometheus-client-derive-text-encode", ] @@ -4665,9 +4662,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd89aa18fbf9533a581355a22438101fe9c2ed8c9e2f0dcf520552a3afddf2" +checksum = "f446d0a6efba22928558c4fb4ce0b3fd6c89b0061343e390bf01a703742b8125" dependencies = [ "cc", ] @@ -4691,9 +4688,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -4836,9 +4833,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -4856,18 +4853,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685d58625b6c2b83e4cc88a27c4bf65adb7b6b16dbdc413e515c9405b47432ab" +checksum = "ed13bcd201494ab44900a96490291651d200730904221832b9547d24a87d332b" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a043824e29c94169374ac5183ac0ed43f5724dc4556b19568007486bd840fa1f" +checksum = "5234cd6063258a5e32903b53b1b6ac043a0541c8adc1f610f67b0326c7a578fa" dependencies = [ "proc-macro2", "quote", @@ -5165,7 +5162,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.12", + "semver 1.0.13", ] [[package]] @@ -5222,18 +5219,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" +checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" dependencies = [ "base64", ] [[package]] name = "rustversion" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf" +checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" [[package]] name = "rw-stream-sink" @@ -5248,9 +5245,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "safe-mix" @@ -6216,7 +6213,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" dependencies = [ "der", - "generic-array 0.14.5", + "generic-array 0.14.6", "subtle", "zeroize", ] @@ -6291,9 +6288,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" +checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" dependencies = [ "serde", ] @@ -6306,18 +6303,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.139" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6" +checksum = "e590c437916fb6b221e1d00df6e3294f3fccd70ca7e92541c475d6ed6ef5fee2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.139" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb" +checksum = "34b5b8d809babe02f538c2cfec6f2c1ed10804c0e5a6a041a049a4f5588ccc2e" dependencies = [ "proc-macro2", "quote", @@ -6326,11 +6323,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +checksum = "38dd04e3c8279e75b31ef29dbdceebfe5ad89f4d0937213c53f7d49d01b3d5a7" dependencies = [ - "itoa 1.0.2", + "itoa 1.0.3", "ryu", "serde", ] @@ -6346,27 +6343,26 @@ dependencies = [ [[package]] name = "sha-1" -version = "0.8.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", ] [[package]] name = "sha-1" -version = "0.9.8" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" dependencies = [ - "block-buffer 0.9.0", "cfg-if", "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", + "digest 0.10.3", ] [[package]] @@ -6419,9 +6415,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881bf8156c87b6301fc5ca6b27f11eeb2761224c7081e69b409d5a1951a70c86" +checksum = "0a31480366ec990f395a61b7c08122d99bd40544fdb5abcfc1b06bb29994312c" dependencies = [ "digest 0.10.3", "keccak", @@ -6485,9 +6481,12 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "slice-group-by" @@ -6755,7 +6754,7 @@ dependencies = [ "byteorder", "digest 0.10.3", "sha2 0.10.2", - "sha3 0.10.1", + "sha3 0.10.2", "sp-std", "twox-hash", ] @@ -7195,9 +7194,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "ss58-registry" -version = "1.23.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ef98aedad3dc52e10995e7ed15f1279e11d4da35795f5dac7305742d0feb66" +checksum = "a039906277e0d8db996cd9d1ef19278c10209d994ecfc1025ced16342873a17c" dependencies = [ "Inflector", "num-format", @@ -7250,9 +7249,9 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4faebde00e8ff94316c01800f9054fd2ba77d30d9e922541913051d1d978918b" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck", "proc-macro2", @@ -7341,9 +7340,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -7426,18 +7425,18 @@ checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" dependencies = [ "proc-macro2", "quote", @@ -7526,10 +7525,11 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.19.2" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" dependencies = [ + "autocfg", "bytes", "libc", "memchr", @@ -7609,9 +7609,9 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" dependencies = [ "cfg-if", "pin-project-lite 0.2.9", @@ -7632,9 +7632,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" dependencies = [ "once_cell", "valuable", @@ -7701,7 +7701,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32d034c0d3db64b43c31de38e945f15b40cd4ca6d2dcfc26d4798ce8de4ab83" dependencies = [ "hash-db", - "hashbrown 0.12.2", + "hashbrown 0.12.3", "log", "rustc-hex", "smallvec", @@ -7849,9 +7849,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" [[package]] name = "unicode-normalization" @@ -7880,7 +7880,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", "subtle", ] @@ -7995,9 +7995,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -8005,13 +8005,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -8020,9 +8020,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.31" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" +checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad" dependencies = [ "cfg-if", "js-sys", @@ -8032,9 +8032,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8042,9 +8042,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" dependencies = [ "proc-macro2", "quote", @@ -8055,9 +8055,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" +checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" [[package]] name = "wasm-gc-api" @@ -8130,9 +8130,9 @@ dependencies = [ [[package]] name = "wasmtime" -version = "0.38.1" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e76e2b2833bb0ece666ccdbed7b71b617d447da11f1bb61f4f2bab2648f745ee" +checksum = "1f50eadf868ab6a04b7b511460233377d0bfbb92e417b2f6a98b98fef2e098f5" dependencies = [ "anyhow", "backtrace", @@ -8161,9 +8161,9 @@ dependencies = [ [[package]] name = "wasmtime-cache" -version = "0.38.1" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743a9f142d93318262d7e1fe329394ff2e8f86a1df45ae5e4f0eedba215ca5ce" +checksum = "d1df23c642e1376892f3b72f311596976979cbf8b85469680cdd3a8a063d12a2" dependencies = [ "anyhow", "base64", @@ -8181,9 +8181,9 @@ dependencies = [ [[package]] name = "wasmtime-cranelift" -version = "0.38.1" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc0f80afa1ce97083a7168e6b6948d015d6237369e9f4a511d38c9c4ac8fbb9" +checksum = "f264ff6b4df247d15584f2f53d009fbc90032cfdc2605b52b961bffc71b6eccd" dependencies = [ "anyhow", "cranelift-codegen", @@ -8203,9 +8203,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.38.1" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0816d9365196f1f447060087e0f87239ccded830bd54970a1168b0c9c8e824c9" +checksum = "839d2820e4b830f4b9e7aa08d4c0acabf4a5036105d639f6dfa1c6891c73bdc6" dependencies = [ "anyhow", "cranelift-entity", @@ -8223,9 +8223,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.38.1" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c687f33cfa0f89ec1646929d0ff102087052cf9f0d15533de56526b0da0d1b3" +checksum = "ef0a0bcbfa18b946d890078ba0e1bc76bcc53eccfb40806c0020ec29dcd1bd49" dependencies = [ "addr2line", "anyhow", @@ -8249,9 +8249,9 @@ dependencies = [ [[package]] name = "wasmtime-jit-debug" -version = "0.38.1" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b252d1d025f94f3954ba2111f12f3a22826a0764a11c150c2d46623115a69e27" +checksum = "4f4779d976206c458edd643d1ac622b6c37e4a0800a8b1d25dfbf245ac2f2cac" dependencies = [ "lazy_static", "object 0.28.4", @@ -8260,9 +8260,9 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "0.38.1" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace251693103c9facbbd7df87a29a75e68016e48bc83c09133f2fda6b575e0ab" +checksum = "b7eb6ffa169eb5dcd18ac9473c817358cd57bc62c244622210566d473397954a" dependencies = [ "anyhow", "backtrace", @@ -8286,9 +8286,9 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "0.38.1" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d129b0487a95986692af8708ffde9c50b0568dcefd79200941d475713b4f40bb" +checksum = "8d932b0ac5336f7308d869703dd225610a6a3aeaa8e968c52b43eed96cefb1c2" dependencies = [ "cranelift-entity", "serde", @@ -8298,9 +8298,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.58" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -8499,9 +8499,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0608f53c1dc0bad505d03a34bbd49fbf2ad7b51eb036123e896365532745a1" +checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" dependencies = [ "futures", "log", @@ -8513,9 +8513,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.5.6" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b578acffd8516a6c3f2a1bdefc1ec37e547bb4e0fb8b6b01a4cafc886b4442" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] diff --git a/pallets/rmrk-core/src/functions.rs b/pallets/rmrk-core/src/functions.rs index 7fda533f..b99fafb2 100644 --- a/pallets/rmrk-core/src/functions.rs +++ b/pallets/rmrk-core/src/functions.rs @@ -111,9 +111,14 @@ where nft_id: NftId, resource: ResourceTypes, BoundedVec>, adding_on_mint: bool, + resource_id: ResourceId, ) -> Result { + ensure!( + Resources::::get((collection_id, nft_id, resource_id)).is_none(), + Error::::ResourceAlreadyExists + ); + let collection = Self::collections(collection_id).ok_or(Error::::CollectionUnknown)?; - let resource_id = Self::get_next_resource_id(collection_id, nft_id)?; ensure!(collection.issuer == sender, Error::::NoPermission); let (root_owner, _) = Pallet::::lookup_root_owner(collection_id, nft_id)?; @@ -321,7 +326,7 @@ where } } -impl Nft, BoundedResourceTypeOf> for Pallet +impl Nft, BoundedResourceInfoTypeOf> for Pallet where T: pallet_uniques::Config, { @@ -330,19 +335,20 @@ where fn nft_mint( sender: T::AccountId, owner: T::AccountId, + nft_id: NftId, collection_id: CollectionId, royalty_recipient: Option, royalty_amount: Option, metadata: StringLimitOf, transferable: bool, - resources: Option>, + resources: Option>, ) -> sp_std::result::Result<(CollectionId, NftId), DispatchError> { - let nft_id = Self::get_next_nft_id(collection_id)?; + ensure!(!Self::nft_exists((collection_id, nft_id)), Error::::NftAlreadyExists); let collection = Self::collections(collection_id).ok_or(Error::::CollectionUnknown)?; - // Prevent minting when next NFT id is greater than the collection max. + // Prevent minting when nfts_count is greater than the collection max. if let Some(max) = collection.max { - ensure!(nft_id < max, Error::::CollectionFullOrLocked); + ensure!(collection.nfts_count < max, Error::::CollectionFullOrLocked); } // NFT should be pending if minting to another account @@ -389,7 +395,14 @@ where // Add all at-mint resources if let Some(resources) = resources { for res in resources { - Self::resource_add(sender.clone(), collection_id, nft_id, res, true)?; + Self::resource_add( + sender.clone(), + collection_id, + nft_id, + res.resource, + true, + res.id, + )?; } } @@ -405,19 +418,20 @@ where fn nft_mint_directly_to_nft( sender: T::AccountId, owner: (CollectionId, NftId), + nft_id: NftId, collection_id: CollectionId, royalty_recipient: Option, royalty_amount: Option, metadata: StringLimitOf, transferable: bool, - resources: Option>, + resources: Option>, ) -> sp_std::result::Result<(CollectionId, NftId), DispatchError> { - let nft_id = Self::get_next_nft_id(collection_id)?; + ensure!(!Self::nft_exists((collection_id, nft_id)), Error::::NftAlreadyExists); let collection = Self::collections(collection_id).ok_or(Error::::CollectionUnknown)?; - // Prevent minting when next NFT id is greater than the collection max. + // Prevent minting when nfts_count is greater than the collection max. if let Some(max) = collection.max { - ensure!(nft_id < max, Error::::CollectionFullOrLocked); + ensure!(collection.nfts_count < max, Error::::CollectionFullOrLocked); } // Calculate the rootowner of the intended owner of the minted NFT @@ -468,7 +482,14 @@ where // Add all at-mint resources if let Some(resources) = resources { for res in resources { - Self::resource_add(sender.clone(), collection_id, nft_id, res, true)?; + Self::resource_add( + sender.clone(), + collection_id, + nft_id, + res.resource, + true, + res.id, + )?; } } @@ -881,25 +902,6 @@ where } } - pub fn get_next_nft_id(collection_id: CollectionId) -> Result> { - NextNftId::::try_mutate(collection_id, |id| { - let current_id = *id; - *id = id.checked_add(1).ok_or(Error::::NoAvailableNftId)?; - Ok(current_id) - }) - } - - pub fn get_next_resource_id( - collection_id: CollectionId, - nft_id: NftId, - ) -> Result> { - NextResourceId::::try_mutate(collection_id, nft_id, |id| { - let current_id = *id; - *id = id.checked_add(1).ok_or(Error::::NoAvailableResourceId)?; - Ok(current_id) - }) - } - pub fn set_lock(nft: (CollectionId, NftId), lock_status: bool) -> bool { Lock::::mutate(nft, |lock| { *lock = lock_status; diff --git a/pallets/rmrk-core/src/lib.rs b/pallets/rmrk-core/src/lib.rs index b294a979..b6980c8a 100644 --- a/pallets/rmrk-core/src/lib.rs +++ b/pallets/rmrk-core/src/lib.rs @@ -17,7 +17,7 @@ use sp_std::convert::TryInto; use rmrk_traits::{ primitives::*, AccountIdOrCollectionNftTuple, BasicResource, Collection, CollectionInfo, ComposableResource, Nft, NftChild, NftInfo, PhantomType, Priority, Property, PropertyInfo, - Resource, ResourceInfo, ResourceTypes, RoyaltyInfo, SlotResource, + Resource, ResourceInfo, ResourceInfoMin, ResourceTypes, RoyaltyInfo, SlotResource, }; use sp_std::result::Result; @@ -63,6 +63,14 @@ pub type BoundedResourceTypeOf = BoundedVec< ::MaxResourcesOnMint, >; +pub type BoundedResourceInfoTypeOf = BoundedVec< + ResourceInfoMin< + BoundedVec::StringLimit>, + BoundedVec::PartsLimit>, + >, + ::MaxResourcesOnMint, +>; + pub type PropertyInfoOf = PropertyInfo, ValueLimitOf>; pub mod types; @@ -101,27 +109,10 @@ pub mod pallet { type MaxResourcesOnMint: Get; } - #[pallet::storage] - #[pallet::getter(fn next_nft_id)] - pub type NextNftId = StorageMap<_, Twox64Concat, CollectionId, NftId, ValueQuery>; - #[pallet::storage] #[pallet::getter(fn collection_index)] pub type CollectionIndex = StorageValue<_, CollectionId, ValueQuery>; - /// Next available Resource ID. - #[pallet::storage] - #[pallet::getter(fn next_resource_id)] - pub type NextResourceId = StorageDoubleMap< - _, - Twox64Concat, - CollectionId, - Twox64Concat, - NftId, - ResourceId, - ValueQuery, - >; - #[pallet::storage] #[pallet::getter(fn collections)] /// Stores collections info @@ -348,6 +339,7 @@ pub mod pallet { CollectionFullOrLocked, CannotSendToDescendentOrSelf, ResourceAlreadyExists, + NftAlreadyExists, EmptyResource, TooManyRecursions, NftIsLocked, @@ -382,12 +374,13 @@ pub mod pallet { pub fn mint_nft( origin: OriginFor, owner: Option, + nft_id: NftId, collection_id: CollectionId, royalty_recipient: Option, royalty: Option, metadata: BoundedVec, transferable: bool, - resources: Option>, + resources: Option>, ) -> DispatchResult { let sender = ensure_signed(origin)?; if let Some(collection_issuer) = @@ -408,6 +401,7 @@ pub mod pallet { Self::nft_mint( sender, nft_owner, + nft_id, collection_id, royalty_recipient, royalty, @@ -433,12 +427,13 @@ pub mod pallet { pub fn mint_nft_directly_to_nft( origin: OriginFor, owner: (CollectionId, NftId), + nft_id: NftId, collection_id: CollectionId, royalty_recipient: Option, royalty: Option, metadata: BoundedVec, transferable: bool, - resources: Option>, + resources: Option>, ) -> DispatchResult { let sender = ensure_signed(origin.clone())?; @@ -455,6 +450,7 @@ pub mod pallet { Self::nft_mint_directly_to_nft( sender, owner, + nft_id, collection_id, royalty_recipient, royalty, @@ -702,15 +698,17 @@ pub mod pallet { collection_id: CollectionId, nft_id: NftId, resource: BasicResource>, + resource_id: ResourceId, ) -> DispatchResult { let sender = ensure_signed(origin)?; - let resource_id = Self::resource_add( + Self::resource_add( sender, collection_id, nft_id, ResourceTypes::Basic(resource), false, + resource_id, )?; Self::deposit_event(Event::ResourceAdded { nft_id, resource_id }); @@ -725,15 +723,17 @@ pub mod pallet { collection_id: CollectionId, nft_id: NftId, resource: ComposableResource, BoundedVec>, + resource_id: ResourceId, ) -> DispatchResult { let sender = ensure_signed(origin)?; - let resource_id = Self::resource_add( + Self::resource_add( sender, collection_id, nft_id, ResourceTypes::Composable(resource), false, + resource_id, )?; Self::deposit_event(Event::ResourceAdded { nft_id, resource_id }); @@ -748,15 +748,17 @@ pub mod pallet { collection_id: CollectionId, nft_id: NftId, resource: SlotResource>, + resource_id: ResourceId, ) -> DispatchResult { let sender = ensure_signed(origin)?; - let resource_id = Self::resource_add( + Self::resource_add( sender, collection_id, nft_id, ResourceTypes::Slot(resource), false, + resource_id, )?; Self::deposit_event(Event::ResourceAdded { nft_id, resource_id }); diff --git a/pallets/rmrk-core/src/tests.rs b/pallets/rmrk-core/src/tests.rs index 78f86a7b..4152d022 100644 --- a/pallets/rmrk-core/src/tests.rs +++ b/pallets/rmrk-core/src/tests.rs @@ -51,10 +51,11 @@ fn basic_collection() -> DispatchResult { } /// Shortcut for a basic mint (Alice owner, Collection ID 0, Royalty 1.525) -fn basic_mint() -> DispatchResult { +fn basic_mint(id: u32) -> DispatchResult { RMRKCore::mint_nft( Origin::signed(ALICE), None, // if not specified defaults to minter + id, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -114,8 +115,8 @@ fn create_collection_no_max_works() { collection_id: 0, })); // Mint 100 NFTs - for _ in 0..100 { - assert_ok!(basic_mint()); + for id in 0..100 { + assert_ok!(basic_mint(id)); } // Last event should be the 100th NFT creation System::assert_last_event(MockEvent::RmrkCore(crate::Event::NftMinted { @@ -133,8 +134,8 @@ fn lock_collection_works() { // Create a basic collection (has 5 max) assert_ok!(basic_collection()); // Mint 4 NFTs - for _ in 0..4 { - assert_ok!(basic_mint()); + for id in 0..4 { + assert_ok!(basic_mint(id)); } // Lock collection won't work with BOB assert_noop!( @@ -149,13 +150,13 @@ fn lock_collection_works() { collection_id: 0, })); // Attempt to mint in a locked collection should fail - assert_noop!(basic_mint(), Error::::CollectionFullOrLocked); + assert_noop!(basic_mint(5), Error::::CollectionFullOrLocked); // Burn an NFT assert_ok!(RMRKCore::burn_nft(Origin::signed(ALICE), COLLECTION_ID_0, NFT_ID_0, MAX_BURNS)); // Should now have only three NFTS in collection assert_eq!(RMRKCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 3); // Still we should be unable to mint another NFT - assert_noop!(basic_mint(), Error::::CollectionFullOrLocked); + assert_ok!(basic_mint(5)); }); } @@ -166,7 +167,7 @@ fn destroy_collection_works() { // Create a basic collection (has 5 max) assert_ok!(basic_collection()); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Non-empty collection should not be able to be destroyed assert_noop!( RMRKCore::destroy_collection(Origin::signed(ALICE), COLLECTION_ID_0), @@ -224,7 +225,7 @@ fn mint_nft_works() { // Collection nfts_count should be 0 prior to minting assert_eq!(RMRKCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 0); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Minting an NFT should trigger an NftMinted event System::assert_last_event(MockEvent::RmrkCore(crate::Event::NftMinted { owner: AccountIdOrCollectionNftTuple::AccountId(ALICE), @@ -236,6 +237,7 @@ fn mint_nft_works() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), None, + 1, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(20.525)), @@ -248,6 +250,7 @@ fn mint_nft_works() { RMRKCore::mint_nft( Origin::signed(BOB), Some(BOB), + 2, COLLECTION_ID_0, Some(CHARLIE), Some(Permill::from_float(20.525)), @@ -262,6 +265,7 @@ fn mint_nft_works() { RMRKCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + NFT_ID_0, NOT_EXISTING_CLASS_ID, Some(CHARLIE), Some(Permill::from_float(20.525)), @@ -271,6 +275,21 @@ fn mint_nft_works() { ), Error::::CollectionUnknown ); + // Throw NftAlreadyExists when attempting to mint with the same id + assert_noop!( + RMRKCore::mint_nft( + Origin::signed(ALICE), + None, + 1, + COLLECTION_ID_0, + Some(ALICE), + Some(Permill::from_float(20.525)), + bvec![0u8; 20], + true, + None, + ), + Error::::NftAlreadyExists + ); }); } @@ -286,6 +305,7 @@ fn mint_directly_to_nft() { RMRKCore::mint_nft_directly_to_nft( Origin::signed(ALICE), (0, 0), + NFT_ID_0, COLLECTION_ID_0, None, Some(Permill::from_float(20.525)), @@ -300,6 +320,7 @@ fn mint_directly_to_nft() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(BOB), + NFT_ID_0, COLLECTION_ID_0, None, Some(Permill::from_float(20.525)), @@ -318,6 +339,7 @@ fn mint_directly_to_nft() { assert_ok!(RMRKCore::mint_nft_directly_to_nft( Origin::signed(ALICE), (0, 0), + 1, COLLECTION_ID_0, None, Some(Permill::from_float(20.525)), @@ -352,6 +374,7 @@ fn mint_directly_to_nft_with_resources() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(BOB), + NFT_ID_0, COLLECTION_ID_0, None, Some(Permill::from_float(20.525)), @@ -361,15 +384,17 @@ fn mint_directly_to_nft_with_resources() { )); // Compose a resource to add to an NFT - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; // Construct as a BoundedVec of resources which mint_nft will accept - let resources_to_add = bvec![ResourceTypes::Basic(basic_resource)]; + let resources_to_add = + bvec![ResourceInfoMin { id: 0, resource: ResourceTypes::Basic(basic_resource) }]; // ALICE mints NFT directly to BOB-owned NFT (0, 0), with the above resource assert_ok!(RMRKCore::mint_nft_directly_to_nft( Origin::signed(ALICE), (0, 0), + 1, COLLECTION_ID_0, None, Some(Permill::from_float(20.525)), @@ -394,15 +419,15 @@ fn mint_collection_max_logic_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint 5 NFTs (filling collection) - for _ in 0..5 { - assert_ok!(basic_mint()); + for id in 0..5 { + assert_ok!(basic_mint(id)); } // Minting beyond collection max (5) should fail - assert_noop!(basic_mint(), Error::::CollectionFullOrLocked); - // Burn an NFT + assert_noop!(basic_mint(5), Error::::CollectionFullOrLocked); + // Burn one NFT assert_ok!(RMRKCore::burn_nft(Origin::signed(ALICE), COLLECTION_ID_0, 0, MAX_BURNS)); - // Minting should still fail, as burning should not affect "fullness" of collection - assert_noop!(basic_mint(), Error::::CollectionFullOrLocked); + // Minting is allowed + assert_ok!(basic_mint(5)); }); } @@ -416,6 +441,7 @@ fn royalty_recipient_default_works() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + NFT_ID_0, COLLECTION_ID_0, None, // No royalty recipient Some(Permill::from_float(20.525)), @@ -429,6 +455,7 @@ fn royalty_recipient_default_works() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + 1, COLLECTION_ID_0, Some(BOB), // Royalty recipient is BOB Some(Permill::from_float(20.525)), @@ -442,6 +469,7 @@ fn royalty_recipient_default_works() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + 2, COLLECTION_ID_0, None, // No royalty recipient is BOB None, // No royalty amount @@ -455,6 +483,7 @@ fn royalty_recipient_default_works() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + 3, COLLECTION_ID_0, Some(ALICE), // Royalty recipient is ALICE None, // No royalty amount @@ -474,8 +503,8 @@ fn send_nft_to_minted_nft_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFTs (0, 0), (0, 1), (0, 2) - for _ in 0..3 { - assert_ok!(basic_mint()); + for id in 0..3 { + assert_ok!(basic_mint(id)); } // ALICE sends NFT (0, 0) [parent] to Bob assert_ok!(RMRKCore::send( @@ -627,6 +656,7 @@ fn send_non_transferable_fail() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + NFT_ID_0, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -656,6 +686,7 @@ fn mint_non_transferrable_gem_on_to_nft_works() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(BOB), + NFT_ID_0, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -668,6 +699,7 @@ fn mint_non_transferrable_gem_on_to_nft_works() { assert_ok!(RMRKCore::mint_nft_directly_to_nft( Origin::signed(ALICE), (0, 0), + 1, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -732,8 +764,8 @@ fn reject_nft_works() { Error::::NoAvailableNftId ); // Mint NFTs (0, 0), (0, 1), (0, 2) - for _ in 0..3 { - assert_ok!(basic_mint()); + for id in 0..3 { + assert_ok!(basic_mint(id)); } // ALICE sends NFT (0, 1) to NFT (0, 0) assert_ok!(RMRKCore::send( @@ -775,6 +807,7 @@ fn reject_cannot_reject_non_pending_nft() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), None, + NFT_ID_0, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -801,11 +834,12 @@ fn reject_nft_removes_self_from_parents_children() { // Create a basic collection assert_ok!(basic_collection()); // Alice mints (0, 0) for herself - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Alice mints (0, 1) for Bob assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(BOB), + 1, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -835,8 +869,8 @@ fn send_two_nfts_to_same_nft_creates_two_children() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFTs (0, 0), (0, 1), (0, 2) - for _ in 0..3 { - assert_ok!(basic_mint()); + for id in 0..3 { + assert_ok!(basic_mint(id)); } // ALICE sends NFT (0, 1) to NFT (0, 0) assert_ok!(RMRKCore::send( @@ -867,8 +901,8 @@ fn send_nft_removes_existing_parent() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFTs (0, 0), (0, 1), (0, 2), (0, 3) - for _ in 0..4 { - assert_ok!(basic_mint()); + for id in 0..4 { + assert_ok!(basic_mint(id)); } // ALICE sends NFT (0, 1) to NFT (0, 0) assert_ok!(RMRKCore::send( @@ -906,8 +940,8 @@ fn send_to_grandchild_fails() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFTs (0, 0), (0, 1), (0, 2) - for _ in 0..3 { - assert_ok!(basic_mint()); + for id in 0..3 { + assert_ok!(basic_mint(id)); } // Alice sends NFT (0, 1) to NFT (0, 0) assert_ok!(RMRKCore::send( @@ -943,19 +977,20 @@ fn burn_nft_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Add two resources to NFT (to test if burning also burns the resources) - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; assert_ok!(RMRKCore::add_basic_resource( Origin::signed(ALICE), 0, 0, basic_resource.clone(), + 0 )); - assert_ok!(RMRKCore::add_basic_resource(Origin::signed(ALICE), 0, 0, basic_resource,)); + assert_ok!(RMRKCore::add_basic_resource(Origin::signed(ALICE), 0, 0, basic_resource, 1)); // Ensure resources are there assert_eq!(Resources::::iter_prefix((COLLECTION_ID_0, NFT_ID_0)).count(), 2); @@ -993,11 +1028,11 @@ fn burn_nft_with_great_grandchildren_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFTs (0, 0), (0, 1), (0, 2), (0, 3) - for _ in 0..4 { - assert_ok!(basic_mint()); + for id in 0..4 { + assert_ok!(basic_mint(id)); } - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; // Add two resources to the great-grandchild (0, 3) assert_ok!(RMRKCore::add_basic_resource( @@ -1005,6 +1040,7 @@ fn burn_nft_with_great_grandchildren_works() { COLLECTION_ID_0, 3, basic_resource.clone(), + 0 )); assert_ok!(RMRKCore::add_basic_resource( @@ -1012,6 +1048,7 @@ fn burn_nft_with_great_grandchildren_works() { COLLECTION_ID_0, 3, basic_resource, + 1 )); // Ensure resources are there @@ -1056,8 +1093,8 @@ fn burn_nft_beyond_max_recursions_fails_gracefully() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFTs (0, 0), (0, 1), (0, 2), (0, 3) - for _ in 0..5 { - assert_ok!(basic_mint()); + for id in 0..5 { + assert_ok!(basic_mint(id)); } // ALICE sends NFT (0, 1) to NFT (0, 0) assert_ok!(RMRKCore::send( @@ -1114,8 +1151,8 @@ fn burn_child_nft_removes_parents_children() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFTs (0, 0), (0, 1), (0, 2), (0, 3) - for _ in 0..2 { - assert_ok!(basic_mint()); + for id in 0..2 { + assert_ok!(basic_mint(id)); } // ALICE sends NFT (0, 1) to NFT (0, 0) assert_ok!(RMRKCore::send( @@ -1140,7 +1177,7 @@ fn burn_child_nft_removes_parents_children() { #[test] fn create_resource_works() { ExtBuilder::default().build().execute_with(|| { - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; // Adding a resource to non-existent NFT should fail assert_noop!( @@ -1149,15 +1186,16 @@ fn create_resource_works() { 0, // collection_id 0, // nft_id basic_resource, + 0, ), Error::::CollectionUnknown ); // Create a basic collection assert_ok!(basic_collection()); // Mint NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; // Add resource to NFT assert_ok!(RMRKCore::add_basic_resource( @@ -1165,6 +1203,7 @@ fn create_resource_works() { COLLECTION_ID_0, NFT_ID_0, basic_resource, + 0, )); // Successful resource addition should trigger ResourceAdded event System::assert_last_event(MockEvent::RmrkCore(crate::Event::ResourceAdded { @@ -1188,6 +1227,7 @@ fn create_resource_works() { COLLECTION_ID_0, NFT_ID_0, composable_resource, + 1 )); // Create Slot resource @@ -1203,6 +1243,7 @@ fn create_resource_works() { COLLECTION_ID_0, NFT_ID_0, slot_resource, + 2 )); }); } @@ -1212,23 +1253,22 @@ fn create_resource_works() { fn add_resource_on_mint_works() { ExtBuilder::default().build().execute_with(|| { let basic_resource: BasicResource> = - BasicResource { metadata: None }; + BasicResource { metadata: stbd("bafybeiakahlc6") }; // Create a basic collection assert_ok!(basic_collection()); - let basic_resource = BasicResource { metadata: None }; - // Resources to add let resources_to_add = bvec![ - ResourceTypes::Basic(basic_resource.clone()), - ResourceTypes::Basic(basic_resource), + ResourceInfoMin { id: 0, resource: ResourceTypes::Basic(basic_resource.clone()) }, + ResourceInfoMin { id: 1, resource: ResourceTypes::Basic(basic_resource) }, ]; // Mint NFT assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + NFT_ID_0, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -1250,20 +1290,21 @@ fn add_resource_on_mint_beyond_max_fails() { // Create a basic collection assert_ok!(basic_collection()); - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; // Resources to add let resources_to_add = bvec![ - ResourceTypes::Basic(basic_resource.clone()), - ResourceTypes::Basic(basic_resource.clone()), - ResourceTypes::Basic(basic_resource.clone()), - ResourceTypes::Basic(basic_resource), + { ResourceInfoMin { resource: ResourceTypes::Basic(basic_resource.clone()), id: 0 } }, + { ResourceInfoMin { resource: ResourceTypes::Basic(basic_resource.clone()), id: 1 } }, + { ResourceInfoMin { resource: ResourceTypes::Basic(basic_resource.clone()), id: 2 } }, + { ResourceInfoMin { resource: ResourceTypes::Basic(basic_resource), id: 3 } }, ]; // Mint NFT assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + NFT_ID_0, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -1284,6 +1325,7 @@ fn add_resource_pending_works() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(BOB), + NFT_ID_0, COLLECTION_ID_0, Some(BOB), Some(Permill::from_float(1.525)), @@ -1292,7 +1334,7 @@ fn add_resource_pending_works() { None )); - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; // Since BOB isn't collection issuer, he can't add resources assert_noop!( @@ -1301,6 +1343,7 @@ fn add_resource_pending_works() { COLLECTION_ID_0, NFT_ID_0, basic_resource.clone(), + 0, ), Error::::NoPermission ); @@ -1310,7 +1353,8 @@ fn add_resource_pending_works() { Origin::signed(ALICE), COLLECTION_ID_0, NFT_ID_0, - basic_resource + basic_resource, + 0, )); assert_eq!(RMRKCore::resources((0, 0, 0)).unwrap().pending, true); @@ -1343,9 +1387,9 @@ fn resource_removal_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; // Add resource to NFT assert_ok!(RMRKCore::add_basic_resource( @@ -1353,6 +1397,7 @@ fn resource_removal_works() { COLLECTION_ID_0, NFT_ID_0, basic_resource, + 0 )); // Resource res-1 doesn't exist assert_noop!( @@ -1401,6 +1446,7 @@ fn resource_removal_pending_works() { assert_ok!(RMRKCore::mint_nft( Origin::signed(ALICE), Some(BOB), + NFT_ID_0, COLLECTION_ID_0, Some(BOB), Some(Permill::from_float(1.525)), @@ -1409,7 +1455,7 @@ fn resource_removal_pending_works() { None )); - let basic_resource = BasicResource { metadata: None }; + let basic_resource = BasicResource { metadata: stbd("bafybeiakahlc6") }; // Add resource to NFT assert_ok!(RMRKCore::add_basic_resource( @@ -1417,6 +1463,7 @@ fn resource_removal_pending_works() { COLLECTION_ID_0, NFT_ID_0, basic_resource, + 0 )); assert_ok!(RMRKCore::accept_resource(Origin::signed(BOB), COLLECTION_ID_0, NFT_ID_0, 0,)); @@ -1482,7 +1529,7 @@ fn set_property_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // ALICE sets property on NFT assert_ok!(RMRKCore::set_property( Origin::signed(ALICE), @@ -1523,7 +1570,7 @@ fn set_property_with_internal_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Root sets property on NFT assert_ok!(RMRKCore::do_set_property(0, Some(0), key.clone(), value.clone())); // Successful property setting should trigger a PropertySet event @@ -1548,7 +1595,7 @@ fn remove_property_with_internal_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Root sets property on NFT assert_ok!(RMRKCore::do_set_property(0, Some(0), key.clone(), value.clone())); // Successful property setting should trigger a PropertySet event @@ -1573,7 +1620,7 @@ fn set_priority_works() { // Create a basic collection assert_ok!(basic_collection()); // Mint NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // BOB cannot set priority on NFT assert_noop!( diff --git a/pallets/rmrk-equip/src/tests.rs b/pallets/rmrk-equip/src/tests.rs index 2cdb53b9..78be5782 100644 --- a/pallets/rmrk-equip/src/tests.rs +++ b/pallets/rmrk-equip/src/tests.rs @@ -175,6 +175,7 @@ fn equip_works() { assert_ok!(RmrkCore::mint_nft( Origin::signed(ALICE), Some(ALICE), // owner + 0, // nft id 0, // collection ID Some(ALICE), // recipient Some(Permill::from_float(1.525)), // royalties @@ -187,6 +188,7 @@ fn equip_works() { assert_ok!(RmrkCore::mint_nft( Origin::signed(ALICE), Some(ALICE), // owner + 1, // nft id 0, // collection ID Some(ALICE), // recipient Some(Permill::from_float(1.525)), // royalties @@ -199,6 +201,7 @@ fn equip_works() { assert_ok!(RmrkCore::mint_nft( Origin::signed(ALICE), Some(ALICE), // owner + 0, // nft id 1, // collection ID Some(ALICE), // recipient Some(Permill::from_float(1.525)), // royalties @@ -211,6 +214,7 @@ fn equip_works() { assert_ok!(RmrkCore::mint_nft( Origin::signed(ALICE), Some(ALICE), // owner + 1, // nft id 1, // collection ID Some(ALICE), // recipient Some(Permill::from_float(1.525)), // royalties @@ -276,6 +280,7 @@ fn equip_works() { 0, // collection_id 0, // nft id composable_resource, + 0, )); // Attempt to equip sword should fail as the sword doesn't have a resource that is @@ -303,7 +308,8 @@ fn equip_works() { Origin::signed(ALICE), 1, // collection id 0, // nft id - sword_slot_resource_left + sword_slot_resource_left, + 0, )); let flashlight_slot_resource_left = SlotResource { @@ -317,7 +323,8 @@ fn equip_works() { Origin::signed(ALICE), 1, // collection id 1, // nft id - flashlight_slot_resource_left + flashlight_slot_resource_left, + 0, )); // Equipping sword should now work @@ -370,6 +377,7 @@ fn equip_works() { 1, // collection id 0, // nft id sword_slot_resource_right, + 1, )); // Equipping to right-hand should fail (already equipped in left hand) @@ -560,6 +568,7 @@ fn nested_equip_works() { assert_ok!(RmrkCore::mint_nft( Origin::signed(ALICE), None, // owner + 0, // nft id 0, // collection ID Some(ALICE), // recipient Some(Permill::from_float(1.525)), // royalties @@ -572,6 +581,7 @@ fn nested_equip_works() { assert_ok!(RmrkCore::mint_nft( Origin::signed(ALICE), None, // owner + 0, // nft id 1, // collection ID Some(ALICE), // recipient Some(Permill::from_float(1.525)), // royalties @@ -584,6 +594,7 @@ fn nested_equip_works() { assert_ok!(RmrkCore::mint_nft( Origin::signed(ALICE), None, // owner + 0, // nft id 2, // collection ID Some(ALICE), // recipient Some(Permill::from_float(1.525)), // royalties @@ -625,6 +636,7 @@ fn nested_equip_works() { 0, // collection_id 0, // nft id composable_resource_for_person_zero, + 0, )); // Create Composable resource for hat-0 @@ -644,6 +656,7 @@ fn nested_equip_works() { 1, // collection_id 0, // nft id composable_resource_for_hat_zero, + 0, )); // Create Slot resource for gem-0 @@ -659,7 +672,8 @@ fn nested_equip_works() { Origin::signed(ALICE), 2, // collection id 0, // nft id - gem_slot_resource + gem_slot_resource, + 0, )); for i in pallet_rmrk_core::EquippableSlots::::iter_prefix((0, 0)) { diff --git a/pallets/rmrk-market/src/tests.rs b/pallets/rmrk-market/src/tests.rs index 4f79ad95..5bf06ec0 100644 --- a/pallets/rmrk-market/src/tests.rs +++ b/pallets/rmrk-market/src/tests.rs @@ -37,10 +37,11 @@ fn basic_collection() -> DispatchResult { } /// Shortcut for a basic mint (Alice owner, Collection ID 0, Royalty 1.525) -fn basic_mint() -> DispatchResult { +fn basic_mint(id: u32) -> DispatchResult { RmrkCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + id, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -58,9 +59,9 @@ fn list_works() { // Collection nfts_count should be 0 prior to minting assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 0); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Mint another NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(1)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 2); // BOB shouldn't be able to list ALICE's NFT @@ -129,6 +130,7 @@ fn list_non_transferable_fail() { assert_ok!(RmrkCore::mint_nft( Origin::signed(ALICE), Some(ALICE), + NFT_ID_0, COLLECTION_ID_0, Some(ALICE), Some(Permill::from_float(1.525)), @@ -151,7 +153,7 @@ fn buy_works() { // Collection nfts_count should be 0 prior to minting assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 0); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 1); // ALICE lists the NFT successfully @@ -202,7 +204,7 @@ fn buy_wont_work_after_list_expires() { // Collection nfts_count should be 0 prior to minting assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 0); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 1); // ALICE lists the NFT successfully @@ -238,7 +240,7 @@ fn send_wont_work_if_sent_after_list() { // Collection nfts_count should be 0 prior to minting assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 0); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 1); // ALICE lists the NFT successfully @@ -296,8 +298,8 @@ fn send_to_nft_wont_work_after_list() { // Collection nfts_count should be 0 prior to minting assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 0); // Mint an two NFTs - assert_ok!(basic_mint()); - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); + assert_ok!(basic_mint(1)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 2); // ALICE lists the NFT successfully @@ -381,8 +383,8 @@ fn accept_offer_wont_work_if_traded_to_nft_after_list() { // Collection nfts_count should be 0 prior to minting assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 0); // Mint an two NFTs - assert_ok!(basic_mint()); - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); + assert_ok!(basic_mint(1)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 2); // BOB successfully places offer @@ -434,9 +436,9 @@ fn unlist_works() { // Collection nfts_count should be 0 prior to minting assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 0); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Mint another NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(1)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 2); // BOB shouldn't be able to list ALICE's NFT @@ -510,7 +512,7 @@ fn offer_works() { Error::::TokenDoesNotExist ); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 1); // ALICE cannot offer on own NFT @@ -583,7 +585,7 @@ fn offer_withdrawn_works() { Error::::TokenDoesNotExist ); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 1); // ALICE cannot offer on own NFT @@ -668,7 +670,7 @@ fn accept_offer_works() { Error::::TokenDoesNotExist ); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 1); // ALICE cannot offer on own NFT @@ -741,7 +743,7 @@ fn accept_expired_offer_wont_works() { Error::::TokenDoesNotExist ); // Mint an NFT - assert_ok!(basic_mint()); + assert_ok!(basic_mint(0)); // Minting an NFT should cause nfts_count to increase to 1 assert_eq!(RmrkCore::collections(COLLECTION_ID_0).unwrap().nfts_count, 1); // ALICE cannot offer on own NFT diff --git a/tests/src/acceptNft.test.ts b/tests/src/acceptNft.test.ts index eb887300..17c6cfc4 100644 --- a/tests/src/acceptNft.test.ts +++ b/tests/src/acceptNft.test.ts @@ -1,103 +1,175 @@ import { expect } from "chai"; import { getApiConnection } from "./substrate/substrate-api"; -import { - createCollection, - mintNft, - sendNft, - acceptNft -} from "./util/tx"; +import { createCollection, mintNft, sendNft, acceptNft } from "./util/tx"; import { NftIdTuple } from "./util/fetch"; import { isNftChildOfAnother, expectTxFailure } from "./util/helpers"; describe("integration test: accept NFT", () => { - let api: any; - before(async () => { api = await getApiConnection(); }); - - const alice = "//Alice"; - const bob = "//Bob"; - - const createTestCollection = async (issuerUri: string) => { - return await createCollection( - api, - issuerUri, - "accept-metadata", - null, - "acpt" - ); - } - - it("accept NFT", async () => { - const ownerAlice = alice; - const ownerBob = bob; - - const aliceCollectionId = await createTestCollection(alice); - const bobCollectionId = await createTestCollection(bob); - - const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; - - await sendNft(api, "pending", ownerBob, bobCollectionId, childNftId, newOwnerNFT); - await acceptNft(api, alice, bobCollectionId, childNftId, newOwnerNFT); - - const isChild = await isNftChildOfAnother(api, bobCollectionId, childNftId, newOwnerNFT); - expect(isChild).to.be.true; - }); - - it("[negative] unable to accept NFT by a not-an-owner", async () => { - const ownerAlice = alice; - const ownerBob = bob; - - const aliceCollectionId = await createTestCollection(alice); - const bobCollectionId = await createTestCollection(bob); - - const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; - - await sendNft(api, "pending", ownerBob, bobCollectionId, childNftId, newOwnerNFT); - const tx = acceptNft(api, bob, bobCollectionId, childNftId, newOwnerNFT); - - await expectTxFailure(/rmrkCore\.NoPermission/, tx); - }); - - it("[negative] unable to accept non-existing NFT", async () => { - const collectionId = 0; - const maxNftId = 0xFFFFFFFF; - - const owner = alice; - const aliceCollectionId = await createTestCollection(alice); - - const parentNftId = await mintNft(api, alice, owner, aliceCollectionId, "parent-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; - - const tx = acceptNft(api, alice, collectionId, maxNftId, newOwnerNFT); - - await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); - }); - - it("[negative] unable to accept NFT which is not sent", async () => { - const ownerAlice = alice; - const ownerBob = bob; - - const aliceCollectionId = await createTestCollection(alice); - const bobCollectionId = await createTestCollection(bob); - - const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; - - const tx = acceptNft(api, alice, bobCollectionId, childNftId, newOwnerNFT); - - await expectTxFailure(/rmrkCore\.NoPermission/, tx); - - const isChild = await isNftChildOfAnother(api, bobCollectionId, childNftId, newOwnerNFT); - expect(isChild).to.be.false; - }); - - after(() => { api.disconnect(); }); + let api: any; + before(async () => { + api = await getApiConnection(); + }); + + const alice = "//Alice"; + const bob = "//Bob"; + + const createTestCollection = async (issuerUri: string) => { + return await createCollection( + api, + issuerUri, + "accept-metadata", + null, + "acpt" + ); + }; + + it("accept NFT", async () => { + const ownerAlice = alice; + const ownerBob = bob; + + const aliceCollectionId = await createTestCollection(alice); + const bobCollectionId = await createTestCollection(bob); + + const parentNftId = await mintNft( + api, + 0, + alice, + ownerAlice, + aliceCollectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 0, + bob, + ownerBob, + bobCollectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; + + await sendNft( + api, + "pending", + ownerBob, + bobCollectionId, + childNftId, + newOwnerNFT + ); + await acceptNft(api, alice, bobCollectionId, childNftId, newOwnerNFT); + + const isChild = await isNftChildOfAnother( + api, + bobCollectionId, + childNftId, + newOwnerNFT + ); + expect(isChild).to.be.true; + }); + + it("[negative] unable to accept NFT by a not-an-owner", async () => { + const ownerAlice = alice; + const ownerBob = bob; + + const aliceCollectionId = await createTestCollection(alice); + const bobCollectionId = await createTestCollection(bob); + + const parentNftId = await mintNft( + api, + 0, + alice, + ownerAlice, + aliceCollectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 0, + bob, + ownerBob, + bobCollectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; + + await sendNft( + api, + "pending", + ownerBob, + bobCollectionId, + childNftId, + newOwnerNFT + ); + const tx = acceptNft(api, bob, bobCollectionId, childNftId, newOwnerNFT); + + await expectTxFailure(/rmrkCore\.NoPermission/, tx); + }); + + it("[negative] unable to accept non-existing NFT", async () => { + const collectionId = 0; + const maxNftId = 0xffffffff; + + const owner = alice; + const aliceCollectionId = await createTestCollection(alice); + + const parentNftId = await mintNft( + api, + 0, + alice, + owner, + aliceCollectionId, + "parent-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; + + const tx = acceptNft(api, alice, collectionId, maxNftId, newOwnerNFT); + + await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); + }); + + it("[negative] unable to accept NFT which is not sent", async () => { + const ownerAlice = alice; + const ownerBob = bob; + + const aliceCollectionId = await createTestCollection(alice); + const bobCollectionId = await createTestCollection(bob); + + const parentNftId = await mintNft( + api, + 0, + alice, + ownerAlice, + aliceCollectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 0, + bob, + ownerBob, + bobCollectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; + + const tx = acceptNft(api, alice, bobCollectionId, childNftId, newOwnerNFT); + + await expectTxFailure(/rmrkCore\.NoPermission/, tx); + + const isChild = await isNftChildOfAnother( + api, + bobCollectionId, + childNftId, + newOwnerNFT + ); + expect(isChild).to.be.false; + }); + + after(() => { + api.disconnect(); + }); }); diff --git a/tests/src/addResource.test.ts b/tests/src/addResource.test.ts index 5831e7cc..c6c30ccb 100644 --- a/tests/src/addResource.test.ts +++ b/tests/src/addResource.test.ts @@ -36,6 +36,7 @@ describe("integration test: add NFT resource", () => { const nftAlice = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -44,6 +45,7 @@ describe("integration test: add NFT resource", () => { await addNftBasicResource( api, + 0, Alice, "added", collectionIdAlice, @@ -63,6 +65,7 @@ describe("integration test: add NFT resource", () => { const parentNftId = await mintNft( api, + 1, Alice, Alice, collectionIdAlice, @@ -70,6 +73,7 @@ describe("integration test: add NFT resource", () => { ); const childNftId = await mintNft( api, + 2, Alice, Alice, collectionIdAlice, @@ -89,6 +93,7 @@ describe("integration test: add NFT resource", () => { await addNftBasicResource( api, + 1, Alice, "added", collectionIdAlice, @@ -108,6 +113,7 @@ describe("integration test: add NFT resource", () => { const nftAlice = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -155,6 +161,7 @@ describe("integration test: add NFT resource", () => { const firstBasicResourceId = await addNftBasicResource( api, + 0, Alice, "added", collectionIdAlice, @@ -164,6 +171,7 @@ describe("integration test: add NFT resource", () => { const secondBasicResourceId = await addNftBasicResource( api, + 1, Alice, "added", collectionIdAlice, @@ -173,6 +181,7 @@ describe("integration test: add NFT resource", () => { const composableResourceId = await addNftComposableResource( api, + 2, Alice, "added", collectionIdAlice, @@ -185,6 +194,7 @@ describe("integration test: add NFT resource", () => { const slotResourceId = await addNftSlotResource( api, + 3, Alice, "added", collectionIdAlice, @@ -253,6 +263,7 @@ describe("integration test: add NFT resource", () => { const tx = addNftBasicResource( api, + 0, Alice, "added", collectionIdAlice, @@ -274,6 +285,7 @@ describe("integration test: add NFT resource", () => { const nftAlice = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -282,6 +294,7 @@ describe("integration test: add NFT resource", () => { const tx = addNftBasicResource( api, + 0, Bob, "added", collectionIdAlice, @@ -303,6 +316,7 @@ describe("integration test: add NFT resource", () => { const parentNftId = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -310,6 +324,7 @@ describe("integration test: add NFT resource", () => { ); const childNftId = await mintNft( api, + 1, Alice, Alice, collectionIdAlice, @@ -329,6 +344,7 @@ describe("integration test: add NFT resource", () => { const tx = addNftBasicResource( api, + 0, Bob, "added", collectionIdAlice, @@ -350,6 +366,7 @@ describe("integration test: add NFT resource", () => { const nftAlice = await mintNft( api, + 0, Bob, Alice, collectionIdBob, @@ -358,6 +375,7 @@ describe("integration test: add NFT resource", () => { const resourceId = await addNftBasicResource( api, + 0, Bob, "pending", collectionIdBob, @@ -379,6 +397,7 @@ describe("integration test: add NFT resource", () => { const nftAlice = await mintNft( api, + 0, Bob, Alice, collectionIdBob, @@ -406,6 +425,7 @@ describe("integration test: add NFT resource", () => { const nftAlice = await mintNft( api, + 0, Bob, Alice, collectionIdBob, @@ -414,6 +434,7 @@ describe("integration test: add NFT resource", () => { const resourceId = await addNftBasicResource( api, + 0, Bob, "pending", collectionIdBob, @@ -443,6 +464,7 @@ describe("integration test: add NFT resource", () => { const nftAlice = await mintNft( api, + 0, Bob, Alice, collectionIdBob, @@ -451,6 +473,7 @@ describe("integration test: add NFT resource", () => { const wrongNft = await mintNft( api, + 1, Bob, Alice, collectionIdBob, @@ -459,6 +482,7 @@ describe("integration test: add NFT resource", () => { const resourceId = await addNftBasicResource( api, + 0, Bob, "pending", collectionIdBob, diff --git a/tests/src/burnNft.test.ts b/tests/src/burnNft.test.ts index 7d4529da..b44819de 100644 --- a/tests/src/burnNft.test.ts +++ b/tests/src/burnNft.test.ts @@ -1,10 +1,10 @@ import { getApiConnection } from "./substrate/substrate-api"; import { expectTxFailure } from "./util/helpers"; -import { NftIdTuple, getChildren } from './util/fetch'; +import { NftIdTuple, getChildren } from "./util/fetch"; import { burnNft, createCollection, sendNft, mintNft } from "./util/tx"; -import chai from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chai from "chai"; +import chaiAsPromised from "chai-as-promised"; chai.use(chaiAsPromised); const expect = chai.expect; @@ -28,6 +28,7 @@ describe("integration test: burn nft", () => { ).then(async (collectionId) => { const nftId = await mintNft( api, + 0, Alice, Alice, collectionId, @@ -48,6 +49,7 @@ describe("integration test: burn nft", () => { const parentNftId = await mintNft( api, + 0, Alice, Alice, collectionId, @@ -56,6 +58,7 @@ describe("integration test: burn nft", () => { const childNftId = await mintNft( api, + 1, Alice, Alice, collectionId, @@ -67,21 +70,26 @@ describe("integration test: burn nft", () => { await sendNft(api, "sent", Alice, collectionId, childNftId, newOwnerNFT); const childrenBefore = await getChildren(api, collectionId, parentNftId); - expect(childrenBefore.length === 1, 'Error: parent NFT should have children') - .to.be.true; + expect( + childrenBefore.length === 1, + "Error: parent NFT should have children" + ).to.be.true; let child = childrenBefore[0]; - expect(child.collectionId.eq(collectionId), 'Error: invalid child collection Id') - .to.be.true; + expect( + child.collectionId.eq(collectionId), + "Error: invalid child collection Id" + ).to.be.true; - expect(child.nftId.eq(childNftId), 'Error: invalid child NFT Id') - .to.be.true; + expect(child.nftId.eq(childNftId), "Error: invalid child NFT Id").to.be + .true; await burnNft(api, Alice, collectionId, parentNftId); const childrenAfter = await getChildren(api, collectionId, parentNftId); - expect(childrenAfter.length === 0, 'Error: children should be burned').to.be.true; + expect(childrenAfter.length === 0, "Error: children should be burned").to.be + .true; }); it("burn child nft", async () => { @@ -95,6 +103,7 @@ describe("integration test: burn nft", () => { const parentNftId = await mintNft( api, + 0, Alice, Alice, collectionId, @@ -103,6 +112,7 @@ describe("integration test: burn nft", () => { const childNftId = await mintNft( api, + 1, Alice, Alice, collectionId, @@ -114,21 +124,26 @@ describe("integration test: burn nft", () => { await sendNft(api, "sent", Alice, collectionId, childNftId, newOwnerNFT); const childrenBefore = await getChildren(api, collectionId, parentNftId); - expect(childrenBefore.length === 1, 'Error: parent NFT should have children') - .to.be.true; + expect( + childrenBefore.length === 1, + "Error: parent NFT should have children" + ).to.be.true; let child = childrenBefore[0]; - expect(child.collectionId.eq(collectionId), 'Error: invalid child collection Id') - .to.be.true; + expect( + child.collectionId.eq(collectionId), + "Error: invalid child collection Id" + ).to.be.true; - expect(child.nftId.eq(childNftId), 'Error: invalid child NFT Id') - .to.be.true; + expect(child.nftId.eq(childNftId), "Error: invalid child NFT Id").to.be + .true; await burnNft(api, Alice, collectionId, childNftId); const childrenAfter = await getChildren(api, collectionId, parentNftId); - expect(childrenAfter.length === 0, 'Error: children should be burned').to.be.true; + expect(childrenAfter.length === 0, "Error: children should be burned").to.be + .true; }); it("[negative] burn non-existing NFT", async () => { @@ -154,6 +169,7 @@ describe("integration test: burn nft", () => { ).then(async (collectionId) => { const nftId = await mintNft( api, + 0, Alice, Alice, collectionId, diff --git a/tests/src/equipNft.test.ts b/tests/src/equipNft.test.ts index dcd73176..49fc1277 100644 --- a/tests/src/equipNft.test.ts +++ b/tests/src/equipNft.test.ts @@ -31,17 +31,19 @@ async function createTestCollection(api: ApiPromise): Promise { async function mintTestNft( api: ApiPromise, + id: number, collectionId: number ): Promise { - return await mintNft(api, Alice, Alice, collectionId, "nft-metadata"); + return await mintNft(api, id, Alice, Alice, collectionId, "nft-metadata"); } async function mintChildNft( api: ApiPromise, + id: number, collectionId: number, parentNftId: number ): Promise { - const nftChildId = await mintTestNft(api, collectionId); + const nftChildId = await mintTestNft(api, id, collectionId); const parentNFT: NftIdTuple = [collectionId, parentNftId]; @@ -71,6 +73,7 @@ async function addTestComposable( ) { await addNftComposableResource( api, + 0, Alice, "added", collectionId, @@ -91,6 +94,7 @@ async function addTestSlot( ): Promise { return await addNftSlotResource( api, + 0, Alice, "added", collectionId, @@ -125,8 +129,8 @@ describe("integration test: Equip NFT", () => { it("equip nft", async () => { const collectionId = await createTestCollection(api); - const nftParentId = await mintTestNft(api, collectionId); - const nftChildId = await mintChildNft(api, collectionId, nftParentId); + const nftParentId = await mintTestNft(api, 101, collectionId); + const nftChildId = await mintChildNft(api, 102, collectionId, nftParentId); const baseId = await createTestBase(api); @@ -157,8 +161,8 @@ describe("integration test: Equip NFT", () => { it("unequip nft", async () => { const collectionId = await createTestCollection(api); - const nftParentId = await mintTestNft(api, collectionId); - const nftChildId = await mintChildNft(api, collectionId, nftParentId); + const nftParentId = await mintTestNft(api, 105, collectionId); + const nftChildId = await mintChildNft(api, 106, collectionId, nftParentId); const baseId = await createTestBase(api); @@ -203,6 +207,7 @@ describe("integration test: Equip NFT", () => { const nftChildId = await mintNft( api, + 110, Alice, Alice, collectionId, @@ -231,6 +236,7 @@ describe("integration test: Equip NFT", () => { const collectionId = await createTestCollection(api); const nftParentId = await mintNft( api, + 120, Alice, Alice, collectionId, @@ -260,8 +266,8 @@ describe("integration test: Equip NFT", () => { it("[negative] equip NFT by a not-an-owner user", async () => { const collectionId = await createTestCollection(api); - const nftParentId = await mintTestNft(api, collectionId); - const nftChildId = await mintChildNft(api, collectionId, nftParentId); + const nftParentId = await mintTestNft(api, 130, collectionId); + const nftChildId = await mintChildNft(api, 131, collectionId, nftParentId); const baseId = await createTestBase(api); @@ -292,9 +298,14 @@ describe("integration test: Equip NFT", () => { it("[negative] unable to equip NFT onto indirect parent NFT", async () => { const collectionId = await createTestCollection(api); - const nftParentId = await mintTestNft(api, collectionId); - const nftChildId = await mintChildNft(api, collectionId, nftParentId); - const nftGrandchildId = await mintChildNft(api, collectionId, nftChildId); + const nftParentId = await mintTestNft(api, 140, collectionId); + const nftChildId = await mintChildNft(api, 141, collectionId, nftParentId); + const nftGrandchildId = await mintChildNft( + api, + 142, + collectionId, + nftChildId + ); const baseId = await createTestBase(api); @@ -324,8 +335,8 @@ describe("integration test: Equip NFT", () => { it("[negative] unable to equip NFT onto parent NFT with another base", async () => { const collectionId = await createTestCollection(api); - const nftParentId = await mintTestNft(api, collectionId); - const nftChildId = await mintChildNft(api, collectionId, nftParentId); + const nftParentId = await mintTestNft(api, 150, collectionId); + const nftChildId = await mintChildNft(api, 151, collectionId, nftParentId); const baseId = await createTestBase(api); @@ -357,8 +368,8 @@ describe("integration test: Equip NFT", () => { it("[negative] unable to equip NFT into slot with another id", async () => { const collectionId = await createTestCollection(api); - const nftParentId = await mintTestNft(api, collectionId); - const nftChildId = await mintChildNft(api, collectionId, nftParentId); + const nftParentId = await mintTestNft(api, 160, collectionId); + const nftChildId = await mintChildNft(api, 161, collectionId, nftParentId); const baseId = await createTestBase(api); @@ -389,8 +400,8 @@ describe("integration test: Equip NFT", () => { it("[negative] unable to equip NFT with incorrect slot (fixed part)", async () => { const collectionId = await createTestCollection(api); - const nftParentId = await mintTestNft(api, collectionId); - const nftChildId = await mintChildNft(api, collectionId, nftParentId); + const nftParentId = await mintTestNft(api, 170, collectionId); + const nftChildId = await mintChildNft(api, 171, collectionId, nftParentId); const baseId = await createBase(api, Alice, "test-base", "DTBase", [ { @@ -429,8 +440,8 @@ describe("integration test: Equip NFT", () => { it("[negative] unable to equip NFT from a collection that is not allowed by the slot", async () => { const collectionId = await createTestCollection(api); - const nftParentId = await mintTestNft(api, collectionId); - const nftChildId = await mintChildNft(api, collectionId, nftParentId); + const nftParentId = await mintTestNft(api, 180, collectionId); + const nftChildId = await mintChildNft(api, 181, collectionId, nftParentId); const baseId = await createBase(api, Alice, "test-base", "DTBase", [ { diff --git a/tests/src/getOwnedNfts.test.ts b/tests/src/getOwnedNfts.test.ts index 9fa6565e..01fd2c3d 100644 --- a/tests/src/getOwnedNfts.test.ts +++ b/tests/src/getOwnedNfts.test.ts @@ -1,74 +1,83 @@ -import { expect } from 'chai'; -import { getApiConnection } from './substrate/substrate-api'; -import { getOwnedNfts } from './util/fetch'; -import { mintNft, createCollection } from './util/tx'; +import { expect } from "chai"; +import { getApiConnection } from "./substrate/substrate-api"; +import { getOwnedNfts } from "./util/fetch"; +import { mintNft, createCollection } from "./util/tx"; describe("integration test: get owned NFTs", () => { - let api: any; - before(async () => { api = await getApiConnection(); }); + let api: any; + before(async () => { + api = await getApiConnection(); + }); - const alice = '//Alice'; + const alice = "//Alice"; - it("fetch all NFTs owned by a user", async () => { - const owner = alice; - const collectionMetadata = 'aliceCollectionMetadata'; - const collectionMax = null; - const collectionSymbol = 'AliceSym'; - const recipientUri = null; - const royalty = null; - const nftMetadata = 'alice-NFT-metadata'; + it("fetch all NFTs owned by a user", async () => { + const owner = alice; + const collectionMetadata = "aliceCollectionMetadata"; + const collectionMax = null; + const collectionSymbol = "AliceSym"; + const recipientUri = null; + const royalty = null; + const nftMetadata = "alice-NFT-metadata"; - let collectionId = await createCollection( - api, - alice, - collectionMetadata, - collectionMax, - collectionSymbol - ); + let collectionId = await createCollection( + api, + alice, + collectionMetadata, + collectionMax, + collectionSymbol + ); - const nftIds = [ - await mintNft( - api, - alice, - owner, - collectionId, - nftMetadata + '-0', - recipientUri, - royalty - ), - await mintNft( - api, - alice, - owner, - collectionId, - nftMetadata + '-1', - recipientUri, - royalty - ), - await mintNft( - api, - alice, - owner, - collectionId, - nftMetadata + '-2', - recipientUri, - royalty - ) - ]; + const nftIds = [ + await mintNft( + api, + 0, + alice, + owner, + collectionId, + nftMetadata + "-0", + recipientUri, + royalty + ), + await mintNft( + api, + 1, + alice, + owner, + collectionId, + nftMetadata + "-1", + recipientUri, + royalty + ), + await mintNft( + api, + 2, + alice, + owner, + collectionId, + nftMetadata + "-2", + recipientUri, + royalty + ), + ]; - const ownedNfts = await getOwnedNfts(api, alice, collectionId); + const ownedNfts = await getOwnedNfts(api, alice, collectionId); - const isFound = (nftId: number) => { - return ownedNfts.find((ownedNftId) => { - return ownedNftId === nftId - }) !== undefined; - }; + const isFound = (nftId: number) => { + return ( + ownedNfts.find((ownedNftId) => { + return ownedNftId === nftId; + }) !== undefined + ); + }; - nftIds.forEach((nftId) => { - expect(isFound(nftId), `NFT ${nftId} should be owned by ${alice}`) - .to.be.true - }); + nftIds.forEach((nftId) => { + expect(isFound(nftId), `NFT ${nftId} should be owned by ${alice}`).to.be + .true; }); + }); - after(() => { api.disconnect(); }); + after(() => { + api.disconnect(); + }); }); diff --git a/tests/src/interfaces/augment-api-errors.ts b/tests/src/interfaces/augment-api-errors.ts index c76b3632..02a1099b 100644 --- a/tests/src/interfaces/augment-api-errors.ts +++ b/tests/src/interfaces/augment-api-errors.ts @@ -90,6 +90,7 @@ declare module '@polkadot/api-base/types/errors' { CollectionUnknown: AugmentedError; EmptyResource: AugmentedError; MetadataNotSet: AugmentedError; + NftAlreadyExists: AugmentedError; NftIsLocked: AugmentedError; NoAvailableCollectionId: AugmentedError; NoAvailableNftId: AugmentedError; diff --git a/tests/src/interfaces/augment-api-events.ts b/tests/src/interfaces/augment-api-events.ts index b2356f8a..63107a5d 100644 --- a/tests/src/interfaces/augment-api-events.ts +++ b/tests/src/interfaces/augment-api-events.ts @@ -86,6 +86,7 @@ declare module '@polkadot/api-base/types/events' { NFTRejected: AugmentedEvent; NFTSent: AugmentedEvent; PrioritySet: AugmentedEvent; + PropertyRemoved: AugmentedEvent, key: Bytes], { collectionId: u32, maybeNftId: Option, key: Bytes }>; PropertySet: AugmentedEvent, key: Bytes, value: Bytes], { collectionId: u32, maybeNftId: Option, key: Bytes, value: Bytes }>; ResourceAccepted: AugmentedEvent; ResourceAdded: AugmentedEvent; diff --git a/tests/src/interfaces/augment-api-query.ts b/tests/src/interfaces/augment-api-query.ts index 5dc557e0..761a30ff 100644 --- a/tests/src/interfaces/augment-api-query.ts +++ b/tests/src/interfaces/augment-api-query.ts @@ -159,11 +159,6 @@ declare module '@polkadot/api-base/types/storage' { * Lock for NFTs **/ lock: AugmentedQuery | [u32 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable, [ITuple<[u32, u32]>]> & QueryableStorageEntry]>; - nextNftId: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; - /** - * Next available Resource ID. - **/ - nextResourceId: AugmentedQuery Observable, [u32, u32]> & QueryableStorageEntry; /** * Stores nft info **/ diff --git a/tests/src/interfaces/augment-api-tx.ts b/tests/src/interfaces/augment-api-tx.ts index 4be2b837..141d7f40 100644 --- a/tests/src/interfaces/augment-api-tx.ts +++ b/tests/src/interfaces/augment-api-tx.ts @@ -5,7 +5,7 @@ import type { ApiTypes } from '@polkadot/api-base/types'; import type { Bytes, Compact, Option, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec'; import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime'; -import type { PalletUniquesDestroyWitness, RmrkSubstrateRuntimeOriginCaller, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartEquippableList, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, SpCoreVoid, SpFinalityGrandpaEquivocationProof } from '@polkadot/types/lookup'; +import type { PalletUniquesDestroyWitness, RmrkSubstrateRuntimeOriginCaller, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartEquippableList, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfoMin, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, SpCoreVoid, SpFinalityGrandpaEquivocationProof } from '@polkadot/types/lookup'; declare module '@polkadot/api-base/types/submittable' { export interface AugmentedSubmittables { @@ -161,15 +161,15 @@ declare module '@polkadot/api-base/types/submittable' { /** * Create basic resource **/ - addBasicResource: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resource: RmrkTraitsResourceBasicResource | { metadata?: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, u32, RmrkTraitsResourceBasicResource]>; + addBasicResource: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resource: RmrkTraitsResourceBasicResource | { metadata?: any } | string | Uint8Array, resourceId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32, RmrkTraitsResourceBasicResource, u32]>; /** * Create composable resource **/ - addComposableResource: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resource: RmrkTraitsResourceComposableResource | { parts?: any; base?: any; metadata?: any; slot?: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, u32, RmrkTraitsResourceComposableResource]>; + addComposableResource: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resource: RmrkTraitsResourceComposableResource | { parts?: any; base?: any; metadata?: any; slot?: any } | string | Uint8Array, resourceId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32, RmrkTraitsResourceComposableResource, u32]>; /** * Create slot resource **/ - addSlotResource: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resource: RmrkTraitsResourceSlotResource | { base?: any; metadata?: any; slot?: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, u32, RmrkTraitsResourceSlotResource]>; + addSlotResource: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resource: RmrkTraitsResourceSlotResource | { base?: any; metadata?: any; slot?: any } | string | Uint8Array, resourceId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32, RmrkTraitsResourceSlotResource, u32]>; /** * burn nft **/ @@ -206,7 +206,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `royalty`: Permillage reward from each trade for the Recipient * - `metadata`: Arbitrary data about an nft, e.g. IPFS hash **/ - mintNft: AugmentedSubmittable<(owner: Option | null | object | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, royaltyRecipient: Option | null | object | string | Uint8Array, royalty: Option | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array, resources: Option> | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option, u32, Option, Option, Bytes, bool, Option>]>; + mintNft: AugmentedSubmittable<(owner: Option | null | object | string | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, royaltyRecipient: Option | null | object | string | Uint8Array, royalty: Option | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array, resources: Option> | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option, u32, u32, Option, Option, Bytes, bool, Option>]>; /** * Mints an NFT in the specified collection directly to another NFT * Sets metadata and the royalty attribute @@ -218,7 +218,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `royalty`: Permillage reward from each trade for the Recipient * - `metadata`: Arbitrary data about an nft, e.g. IPFS hash **/ - mintNftDirectlyToNft: AugmentedSubmittable<(owner: ITuple<[u32, u32]> | [u32 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], collectionId: u32 | AnyNumber | Uint8Array, royaltyRecipient: Option | null | object | string | Uint8Array, royalty: Option | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array, resources: Option> | null | object | string | Uint8Array) => SubmittableExtrinsic, [ITuple<[u32, u32]>, u32, Option, Option, Bytes, bool, Option>]>; + mintNftDirectlyToNft: AugmentedSubmittable<(owner: ITuple<[u32, u32]> | [u32 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], nftId: u32 | AnyNumber | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, royaltyRecipient: Option | null | object | string | Uint8Array, royalty: Option | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array, resources: Option> | null | object | string | Uint8Array) => SubmittableExtrinsic, [ITuple<[u32, u32]>, u32, u32, Option, Option, Bytes, bool, Option>]>; /** * Rejects an NFT sent from another account to self or owned NFT * diff --git a/tests/src/interfaces/augment-types.ts b/tests/src/interfaces/augment-types.ts index 251c2ec8..c5dded5d 100644 --- a/tests/src/interfaces/augment-types.ts +++ b/tests/src/interfaces/augment-types.ts @@ -1,7 +1,7 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { FinalityGrandpaEquivocationPrecommit, FinalityGrandpaEquivocationPrevote, FinalityGrandpaPrecommit, FinalityGrandpaPrevote, FrameSupportDispatchRawOrigin, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletGrandpaCall, PalletGrandpaError, PalletGrandpaEvent, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletRmrkMarketCall, PalletRmrkMarketError, PalletRmrkMarketEvent, PalletRmrkMarketListInfo, PalletRmrkMarketOffer, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateCall, PalletTemplateError, PalletTemplateEvent, PalletTimestampCall, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentReleases, PalletUniquesCall, PalletUniquesCollectionDetails, PalletUniquesCollectionMetadata, PalletUniquesDestroyWitness, PalletUniquesError, PalletUniquesEvent, PalletUniquesItemDetails, PalletUniquesItemMetadata, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PhantomTypePhantomType, RmrkSubstrateRuntimeOriginCaller, RmrkSubstrateRuntimeRuntime, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpConsensusAuraSr25519AppSr25519Public, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpFinalityGrandpaAppPublic, SpFinalityGrandpaAppSignature, SpFinalityGrandpaEquivocation, SpFinalityGrandpaEquivocationProof, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpVersionRuntimeVersion } from './rmrk'; +import type { FinalityGrandpaEquivocationPrecommit, FinalityGrandpaEquivocationPrevote, FinalityGrandpaPrecommit, FinalityGrandpaPrevote, FrameSupportDispatchRawOrigin, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletGrandpaCall, PalletGrandpaError, PalletGrandpaEvent, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletRmrkMarketCall, PalletRmrkMarketError, PalletRmrkMarketEvent, PalletRmrkMarketListInfo, PalletRmrkMarketOffer, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateCall, PalletTemplateError, PalletTemplateEvent, PalletTimestampCall, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletUniquesCall, PalletUniquesCollectionDetails, PalletUniquesCollectionMetadata, PalletUniquesDestroyWitness, PalletUniquesError, PalletUniquesEvent, PalletUniquesItemDetails, PalletUniquesItemMetadata, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PhantomTypePhantomType, RmrkSubstrateRuntimeOriginCaller, RmrkSubstrateRuntimeRuntime, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceInfoMin, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpConsensusAuraSr25519AppSr25519Public, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpFinalityGrandpaAppPublic, SpFinalityGrandpaAppSignature, SpFinalityGrandpaEquivocation, SpFinalityGrandpaEquivocationProof, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpVersionRuntimeVersion } from './rmrk'; import type { Data, StorageKey } from '@polkadot/types'; import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; @@ -751,6 +751,7 @@ declare module '@polkadot/types/types/registry' { PalletTemplateEvent: PalletTemplateEvent; PalletTimestampCall: PalletTimestampCall; PalletTransactionPaymentChargeTransactionPayment: PalletTransactionPaymentChargeTransactionPayment; + PalletTransactionPaymentEvent: PalletTransactionPaymentEvent; PalletTransactionPaymentReleases: PalletTransactionPaymentReleases; PalletUniquesCall: PalletUniquesCall; PalletUniquesCollectionDetails: PalletUniquesCollectionDetails; @@ -903,6 +904,7 @@ declare module '@polkadot/types/types/registry' { RmrkTraitsResourceBasicResource: RmrkTraitsResourceBasicResource; RmrkTraitsResourceComposableResource: RmrkTraitsResourceComposableResource; RmrkTraitsResourceResourceInfo: RmrkTraitsResourceResourceInfo; + RmrkTraitsResourceResourceInfoMin: RmrkTraitsResourceResourceInfoMin; RmrkTraitsResourceResourceTypes: RmrkTraitsResourceResourceTypes; RmrkTraitsResourceSlotResource: RmrkTraitsResourceSlotResource; RmrkTraitsTheme: RmrkTraitsTheme; diff --git a/tests/src/interfaces/lookup.ts b/tests/src/interfaces/lookup.ts index 61b90917..2668e8d7 100644 --- a/tests/src/interfaces/lookup.ts +++ b/tests/src/interfaces/lookup.ts @@ -347,6 +347,11 @@ export default { key: 'Bytes', value: 'Bytes', }, + PropertyRemoved: { + collectionId: 'u32', + maybeNftId: 'Option', + key: 'Bytes', + }, CollectionLocked: { issuer: 'AccountId32', collectionId: 'u32', @@ -1017,21 +1022,23 @@ export default { _enum: { mint_nft: { owner: 'Option', + nftId: 'u32', collectionId: 'u32', royaltyRecipient: 'Option', royalty: 'Option', metadata: 'Bytes', transferable: 'bool', - resources: 'Option>', + resources: 'Option>', }, mint_nft_directly_to_nft: { owner: '(u32,u32)', + nftId: 'u32', collectionId: 'u32', royaltyRecipient: 'Option', royalty: 'Option', metadata: 'Bytes', transferable: 'bool', - resources: 'Option>', + resources: 'Option>', }, create_collection: { metadata: 'Bytes', @@ -1077,16 +1084,19 @@ export default { collectionId: 'u32', nftId: 'u32', resource: 'RmrkTraitsResourceBasicResource', + resourceId: 'u32', }, add_composable_resource: { collectionId: 'u32', nftId: 'u32', resource: 'RmrkTraitsResourceComposableResource', + resourceId: 'u32', }, add_slot_resource: { collectionId: 'u32', nftId: 'u32', resource: 'RmrkTraitsResourceSlotResource', + resourceId: 'u32', }, accept_resource: { collectionId: 'u32', @@ -1111,7 +1121,14 @@ export default { } }, /** - * Lookup141: rmrk_traits::resource::ResourceTypes, sp_runtime::bounded::bounded_vec::BoundedVec> + * Lookup141: rmrk_traits::resource::ResourceInfoMin, sp_runtime::bounded::bounded_vec::BoundedVec> + **/ + RmrkTraitsResourceResourceInfoMin: { + id: 'u32', + resource: 'RmrkTraitsResourceResourceTypes' + }, + /** + * Lookup143: rmrk_traits::resource::ResourceTypes, sp_runtime::bounded::bounded_vec::BoundedVec> **/ RmrkTraitsResourceResourceTypes: { _enum: { @@ -1121,13 +1138,13 @@ export default { } }, /** - * Lookup143: rmrk_traits::resource::BasicResource> + * Lookup144: rmrk_traits::resource::BasicResource> **/ RmrkTraitsResourceBasicResource: { - metadata: 'Option' + metadata: 'Bytes' }, /** - * Lookup144: rmrk_traits::resource::ComposableResource, sp_runtime::bounded::bounded_vec::BoundedVec> + * Lookup145: rmrk_traits::resource::ComposableResource, sp_runtime::bounded::bounded_vec::BoundedVec> **/ RmrkTraitsResourceComposableResource: { parts: 'Vec', @@ -1136,7 +1153,7 @@ export default { slot: 'Option<(u32,u32)>' }, /** - * Lookup146: rmrk_traits::resource::SlotResource> + * Lookup147: rmrk_traits::resource::SlotResource> **/ RmrkTraitsResourceSlotResource: { base: 'u32', @@ -1144,7 +1161,7 @@ export default { slot: 'u32' }, /** - * Lookup150: pallet_rmrk_market::pallet::Call + * Lookup151: pallet_rmrk_market::pallet::Call **/ PalletRmrkMarketCall: { _enum: { @@ -1181,7 +1198,7 @@ export default { } }, /** - * Lookup151: pallet_uniques::pallet::Call + * Lookup152: pallet_uniques::pallet::Call **/ PalletUniquesCall: { _enum: { @@ -1299,7 +1316,7 @@ export default { } }, /** - * Lookup152: pallet_uniques::types::DestroyWitness + * Lookup153: pallet_uniques::types::DestroyWitness **/ PalletUniquesDestroyWitness: { items: 'Compact', @@ -1307,7 +1324,7 @@ export default { attributes: 'Compact' }, /** - * Lookup154: pallet_utility::pallet::Call + * Lookup155: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { @@ -1331,7 +1348,7 @@ export default { } }, /** - * Lookup156: rmrk_substrate_runtime::OriginCaller + * Lookup157: rmrk_substrate_runtime::OriginCaller **/ RmrkSubstrateRuntimeOriginCaller: { _enum: { @@ -1340,7 +1357,7 @@ export default { } }, /** - * Lookup157: frame_support::dispatch::RawOrigin + * Lookup158: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -1350,19 +1367,19 @@ export default { } }, /** - * Lookup158: pallet_sudo::pallet::Error + * Lookup159: pallet_sudo::pallet::Error **/ PalletSudoError: { _enum: ['RequireSudo'] }, /** - * Lookup159: pallet_template::pallet::Error + * Lookup160: pallet_template::pallet::Error **/ PalletTemplateError: { _enum: ['NoneValue', 'StorageOverflow'] }, /** - * Lookup160: rmrk_traits::base::BaseInfo> + * Lookup161: rmrk_traits::base::BaseInfo> **/ RmrkTraitsBaseBaseInfo: { issuer: 'AccountId32', @@ -1370,13 +1387,13 @@ export default { symbol: 'Bytes' }, /** - * Lookup163: pallet_rmrk_equip::pallet::Error + * Lookup164: pallet_rmrk_equip::pallet::Error **/ PalletRmrkEquipError: { _enum: ['PermissionError', 'ItemDoesntExist', 'EquipperDoesntExist', 'NoAvailableBaseId', 'NoAvailablePartId', 'MustBeDirectParent', 'PartDoesntExist', 'BaseDoesntExist', 'CantEquipFixedPart', 'NoResourceForThisBaseFoundOnNft', 'CollectionNotEquippable', 'ItemHasNoResourceToEquipThere', 'NoEquippableOnFixedPart', 'NeedsDefaultThemeFirst', 'ItemAlreadyEquipped', 'SlotAlreadyEquipped', 'SlotNotEquipped', 'UnknownError', 'ExceedsMaxPartsPerBase', 'TooManyProperties', 'ItemNotEquipped', 'UnequipperMustOwnEitherItemOrEquipper'] }, /** - * Lookup164: rmrk_traits::collection::CollectionInfo, sp_runtime::bounded::bounded_vec::BoundedVec, sp_core::crypto::AccountId32> + * Lookup165: rmrk_traits::collection::CollectionInfo, sp_runtime::bounded::bounded_vec::BoundedVec, sp_core::crypto::AccountId32> **/ RmrkTraitsCollectionCollectionInfo: { issuer: 'AccountId32', @@ -1386,7 +1403,7 @@ export default { nftsCount: 'u32' }, /** - * Lookup165: rmrk_traits::nft::NftInfo> + * Lookup166: rmrk_traits::nft::NftInfo> **/ RmrkTraitsNftNftInfo: { owner: 'RmrkTraitsNftAccountIdOrCollectionNftTuple', @@ -1397,14 +1414,14 @@ export default { transferable: 'bool' }, /** - * Lookup167: rmrk_traits::nft::RoyaltyInfo + * Lookup168: rmrk_traits::nft::RoyaltyInfo **/ RmrkTraitsNftRoyaltyInfo: { recipient: 'AccountId32', amount: 'Permill' }, /** - * Lookup170: rmrk_traits::resource::ResourceInfo, sp_runtime::bounded::bounded_vec::BoundedVec> + * Lookup171: rmrk_traits::resource::ResourceInfo, sp_runtime::bounded::bounded_vec::BoundedVec> **/ RmrkTraitsResourceResourceInfo: { id: 'u32', @@ -1413,31 +1430,31 @@ export default { pendingRemoval: 'bool' }, /** - * Lookup174: rmrk_traits::nft::NftChild + * Lookup175: rmrk_traits::nft::NftChild **/ RmrkTraitsNftNftChild: { collectionId: 'u32', nftId: 'u32' }, /** - * Lookup175: PhantomType::phantom_type, sp_runtime::bounded::bounded_vec::BoundedVec>> + * Lookup176: PhantomType::phantom_type, sp_runtime::bounded::bounded_vec::BoundedVec>> **/ - PhantomTypePhantomType: '[Lookup176;0]', + PhantomTypePhantomType: '[Lookup177;0]', /** - * Lookup176: rmrk_traits::property::PropertyInfo, sp_runtime::bounded::bounded_vec::BoundedVec> + * Lookup177: rmrk_traits::property::PropertyInfo, sp_runtime::bounded::bounded_vec::BoundedVec> **/ RmrkTraitsPropertyPropertyInfo: { key: 'Bytes', value: 'Bytes' }, /** - * Lookup178: pallet_rmrk_core::pallet::Error + * Lookup179: pallet_rmrk_core::pallet::Error **/ PalletRmrkCoreError: { - _enum: ['NoneValue', 'StorageOverflow', 'TooLong', 'NoAvailableCollectionId', 'NoAvailableResourceId', 'MetadataNotSet', 'RecipientNotSet', 'NoAvailableNftId', 'NotInRange', 'RoyaltyNotSet', 'CollectionUnknown', 'NoPermission', 'NoWitness', 'CollectionNotEmpty', 'CollectionFullOrLocked', 'CannotSendToDescendentOrSelf', 'ResourceAlreadyExists', 'EmptyResource', 'TooManyRecursions', 'NftIsLocked', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'CannotRejectNonPendingNft', 'ResourceDoesntExist', 'ResourceNotPending', 'NonTransferable', 'CannotSendEquippedItem'] + _enum: ['NoneValue', 'StorageOverflow', 'TooLong', 'NoAvailableCollectionId', 'NoAvailableResourceId', 'MetadataNotSet', 'RecipientNotSet', 'NoAvailableNftId', 'NotInRange', 'RoyaltyNotSet', 'CollectionUnknown', 'NoPermission', 'NoWitness', 'CollectionNotEmpty', 'CollectionFullOrLocked', 'CannotSendToDescendentOrSelf', 'ResourceAlreadyExists', 'NftAlreadyExists', 'EmptyResource', 'TooManyRecursions', 'NftIsLocked', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'CannotRejectNonPendingNft', 'ResourceDoesntExist', 'ResourceNotPending', 'NonTransferable', 'CannotSendEquippedItem'] }, /** - * Lookup179: pallet_rmrk_market::types::ListInfo + * Lookup180: pallet_rmrk_market::types::ListInfo **/ PalletRmrkMarketListInfo: { listedBy: 'AccountId32', @@ -1445,7 +1462,7 @@ export default { expires: 'Option' }, /** - * Lookup181: pallet_rmrk_market::types::Offer + * Lookup182: pallet_rmrk_market::types::Offer **/ PalletRmrkMarketOffer: { maker: 'AccountId32', @@ -1453,13 +1470,13 @@ export default { expires: 'Option' }, /** - * Lookup182: pallet_rmrk_market::pallet::Error + * Lookup183: pallet_rmrk_market::pallet::Error **/ PalletRmrkMarketError: { _enum: ['NoPermission', 'TokenNotForSale', 'CannotWithdrawOffer', 'CannotUnlistToken', 'CannotOfferOnOwnToken', 'CannotBuyOwnToken', 'UnknownOffer', 'CannotListNftOwnedByNft', 'TokenDoesNotExist', 'OfferTooLow', 'AlreadyOffered', 'OfferHasExpired', 'ListingHasExpired', 'PriceDiffersFromExpected', 'NonTransferable'] }, /** - * Lookup183: pallet_uniques::types::CollectionDetails + * Lookup184: pallet_uniques::types::CollectionDetails **/ PalletUniquesCollectionDetails: { owner: 'AccountId32', @@ -1474,7 +1491,7 @@ export default { isFrozen: 'bool' }, /** - * Lookup186: pallet_uniques::types::ItemDetails + * Lookup187: pallet_uniques::types::ItemDetails **/ PalletUniquesItemDetails: { owner: 'AccountId32', @@ -1483,7 +1500,7 @@ export default { deposit: 'u128' }, /** - * Lookup187: pallet_uniques::types::CollectionMetadata + * Lookup188: pallet_uniques::types::CollectionMetadata **/ PalletUniquesCollectionMetadata: { deposit: 'u128', @@ -1491,7 +1508,7 @@ export default { isFrozen: 'bool' }, /** - * Lookup188: pallet_uniques::types::ItemMetadata + * Lookup189: pallet_uniques::types::ItemMetadata **/ PalletUniquesItemMetadata: { deposit: 'u128', @@ -1499,19 +1516,19 @@ export default { isFrozen: 'bool' }, /** - * Lookup190: pallet_uniques::pallet::Error + * Lookup191: pallet_uniques::pallet::Error **/ PalletUniquesError: { _enum: ['NoPermission', 'UnknownCollection', 'AlreadyExists', 'WrongOwner', 'BadWitness', 'InUse', 'Frozen', 'WrongDelegate', 'NoDelegate', 'Unapproved', 'Unaccepted', 'Locked', 'MaxSupplyReached', 'MaxSupplyAlreadySet', 'MaxSupplyTooSmall'] }, /** - * Lookup191: pallet_utility::pallet::Error + * Lookup192: pallet_utility::pallet::Error **/ PalletUtilityError: { _enum: ['TooManyCalls'] }, /** - * Lookup193: sp_runtime::MultiSignature + * Lookup194: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -1521,39 +1538,39 @@ export default { } }, /** - * Lookup194: sp_core::sr25519::Signature + * Lookup195: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup195: sp_core::ecdsa::Signature + * Lookup196: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup198: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup199: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup199: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup200: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup200: frame_system::extensions::check_genesis::CheckGenesis + * Lookup201: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup203: frame_system::extensions::check_nonce::CheckNonce + * Lookup204: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup204: frame_system::extensions::check_weight::CheckWeight + * Lookup205: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup205: pallet_transaction_payment::ChargeTransactionPayment + * Lookup206: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: 'Compact', /** - * Lookup206: rmrk_substrate_runtime::Runtime + * Lookup207: rmrk_substrate_runtime::Runtime **/ RmrkSubstrateRuntimeRuntime: 'Null' }; diff --git a/tests/src/interfaces/metadata.json b/tests/src/interfaces/metadata.json index 174eeee2..fbed91e7 100644 --- a/tests/src/interfaces/metadata.json +++ b/tests/src/interfaces/metadata.json @@ -1 +1 @@ -{"jsonrpc":"2.0","result":"0x6d6574610e3d03000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f72741c77656967687473405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f727920010454000020000005060024083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00002800000208002c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677330013c5665633c4469676573744974656d3e000030000002340034102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e00060024436f6e73656e7375730800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e000400105365616c0800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e000500144f74686572040028011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000380000030400000008003c00000240004008306672616d655f73797374656d2c4576656e745265636f7264080445014404540124000c01147068617365d4011450686173650001146576656e7444010445000118746f70696373d801185665633c543e0000440858726d726b5f7375627374726174655f72756e74696d65144576656e7400012c1853797374656d04004801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c4772616e64706104006c015470616c6c65745f6772616e6470613a3a4576656e740004002042616c616e636573040080017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404008801a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000600105375646f04008c016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0007003854656d706c6174654d6f64756c6504009c017c70616c6c65745f74656d706c6174653a3a4576656e743c52756e74696d653e00080024526d726b45717569700400a0018470616c6c65745f726d726b5f65717569703a3a4576656e743c52756e74696d653e00090020526d726b436f72650400a4018070616c6c65745f726d726b5f636f72653a3a4576656e743c52756e74696d653e000a0028526d726b4d61726b65740400bc018870616c6c65745f726d726b5f6d61726b65743a3a4576656e743c52756e74696d653e000b001c556e69717565730400c4017870616c6c65745f756e69717565733a3a4576656e743c52756e74696d653e000c001c5574696c6974790400d0015470616c6c65745f7574696c6974793a3a4576656e74000d0000480c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f4c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7258013444697370617463684572726f7200013464697370617463685f696e666f4c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736824011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e4c0c346672616d655f737570706f72741c77656967687473304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735001344469737061746368436c617373000120706179735f666565540110506179730000500c346672616d655f737570706f72741c77656967687473344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000540c346672616d655f737570706f72741c7765696768747310506179730001080c596573000000084e6f0001000058082873705f72756e74696d653444697370617463684572726f72000128144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504005c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400600128546f6b656e4572726f720007002841726974686d65746963040064013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04006801485472616e73616374696f6e616c4572726f72000900005c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7238018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000060082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006000064082873705f72756e74696d653c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000068082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100006c0c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574700134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909097000000274007400000408782000780c4c73705f66696e616c6974795f6772616e6470610c617070185075626c6963000004007c013c656432353531393a3a5075626c696300007c0c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000800c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909098414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000880c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c749001384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f65729801504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c749001384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909900418526573756c740804540194044501580108084f6b040094000000000c45727204005800000100009400000400009804184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100009c0c3c70616c6c65745f74656d706c6174651870616c6c6574144576656e740404540001043c536f6d657468696e6753746f726564080010010c7533320000000130543a3a4163636f756e74496400000859014576656e7420646f63756d656e746174696f6e2073686f756c6420656e64207769746820616e20617272617920746861742070726f7669646573206465736372697074697665206e616d657320666f72206576656e7470706172616d65746572732e205b736f6d657468696e672c2077686f5d0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a00c4470616c6c65745f726d726b5f65717569701870616c6c6574144576656e740404540001142c4261736543726561746564080118697373756572000130543a3a4163636f756e74496400011c626173655f696410011842617365496400000030536c6f74457175697070656410013c6974656d5f636f6c6c656374696f6e100130436f6c6c656374696f6e49640001206974656d5f6e66741001144e6674496400011c626173655f696410011842617365496400011c736c6f745f6964100118536c6f74496400010038536c6f74556e657175697070656410013c6974656d5f636f6c6c656374696f6e100130436f6c6c656374696f6e49640001206974656d5f6e66741001144e6674496400011c626173655f696410011842617365496400011c736c6f745f6964100118536c6f7449640002004845717569707061626c65735570646174656408011c626173655f696410011842617365496400011c736c6f745f6964100118536c6f74496400030044426173654973737565724368616e6765640c01286f6c645f697373756572000130543a3a4163636f756e7449640001286e65775f697373756572000130543a3a4163636f756e74496400011c626173655f69641001184261736549640004000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a40c4070616c6c65745f726d726b5f636f72651870616c6c6574144576656e7404045400013c44436f6c6c656374696f6e43726561746564080118697373756572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000000244e66744d696e7465640c01146f776e6572a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000100244e46544275726e65640801146f776e6572000130543a3a4163636f756e7449640001186e66745f69641001144e667449640002004c436f6c6c656374696f6e44657374726f796564080118697373756572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640003001c4e465453656e7414011873656e646572000130543a3a4163636f756e744964000124726563697069656e74a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000144617070726f76616c5f7265717569726564ac0110626f6f6c0004002c4e4654416363657074656410011873656e646572000130543a3a4163636f756e744964000124726563697069656e74a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640005002c4e465452656a65637465640c011873656e646572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000600344973737565724368616e6765640c01286f6c645f697373756572000130543a3a4163636f756e7449640001286e65775f697373756572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640007002c50726f7065727479536574100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001306d617962655f6e66745f6964b001344f7074696f6e3c4e667449643e00010c6b6579b401344b65794c696d69744f663c543e00011476616c7565b8013c56616c75654c696d69744f663c543e00080040436f6c6c656374696f6e4c6f636b6564080118697373756572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000900345265736f7572636541646465640801186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000a00405265736f7572636541636365707465640801186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000b003c5265736f7572636552656d6f76616c0801186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000c005c5265736f7572636552656d6f76616c41636365707465640801186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000d002c5072696f72697479536574080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000e000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a80c2c726d726b5f7472616974730c6e6674744163636f756e7449644f72436f6c6c656374696f6e4e66745475706c6504244163636f756e74496401000108244163636f756e74496404000001244163636f756e74496400000054436f6c6c656374696f6e416e644e66745475706c650800100130436f6c6c656374696f6e496400001001144e6674496400010000ac0000050000b004184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000b4102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e0000b8102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e0000bc0c4870616c6c65745f726d726b5f6d61726b65741870616c6c6574144576656e7404045400011c44546f6b656e5072696365557064617465641001146f776e6572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001147072696365c001504f7074696f6e3c42616c616e63654f663c543e3e0000048454686520707269636520666f72206120746f6b656e20776173207570646174656424546f6b656e536f6c641401146f776e6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000114707269636518013042616c616e63654f663c543e00010474546f6b656e2077617320736f6c6420746f2061206e6577206f776e65722c546f6b656e4c69737465641001146f776e6572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000114707269636518013042616c616e63654f663c543e0002046c546f6b656e206c6973746564206f6e204d61726b6574706c61636534546f6b656e556e6c69737465640c01146f776e6572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400030474546f6b656e20756e6c6973746564206f6e204d61726b6574706c6163652c4f66666572506c6163656410011c6f666665726572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000114707269636518013042616c616e63654f663c543e0004046c4f666665722077617320706c61636564206f6e206120746f6b656e384f6666657257697468647261776e0c011873656e646572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640005044c4f66666572207761732077697468647261776e344f6666657241636365707465641001146f776e6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000604484f66666572207761732061636365707465640499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909c004184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000c40c3870616c6c65745f756e69717565731870616c6c6574144576656e740804540004490001601c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e1846726f7a656e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640006045c536f6d6520606974656d60207761732066726f7a656e2e18546861776564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640007045c536f6d6520606974656d6020776173207468617765642e40436f6c6c656374696f6e46726f7a656e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400080474536f6d652060636f6c6c656374696f6e60207761732066726f7a656e2e40436f6c6c656374696f6e546861776564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173207468617765642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e744964000b0470546865206d616e6167656d656e74207465616d206368616e6765642e40417070726f7665645472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e444974656d5374617475734368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000e041101412060636f6c6c656374696f6e602068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011064617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c000f04b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001004b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e2c4d65746164617461536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c001104984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e3c4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001204984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73cc01385665633c543a3a4974656d49643e001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e30417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579b4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565b80174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e00140405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c65617265640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579b4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0015040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6eb0015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001604c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001704a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909c8102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e0000cc0000021000d00c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7258013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7258013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c749001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909d408306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000d80000022400dc000002e000e000000408101000e408306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ee8014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65ec016473705f72756e74696d653a3a52756e74696d65537472696e670000e80000061000ec0000050200f00c306672616d655f73797374656d1870616c6c65741043616c6c0404540001242866696c6c5f626c6f636b040114726174696ff4011c50657262696c6c00000405014120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e1872656d61726b04011872656d61726b28011c5665633c75383e000114684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e002823203c7765696768743e202d20604f283129602c23203c2f7765696768743e387365745f686561705f7061676573040114706167657320010c753634000204f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646528011c5665633c75383e0003306453657420746865206e65772072756e74696d6520636f64652e002823203c7765696768743e31012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f64656045012d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e60207768696368206973342020657870656e73697665292e842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e4d0154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c7920746869732069732076657279b8657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2c23203c2f7765696768743e5c7365745f636f64655f776974686f75745f636865636b73040110636f646528011c5665633c75383e000424190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e002823203c7765696768743e8c2d20604f2843296020776865726520604360206c656e677468206f662060636f646560842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e550154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c48626c6f636b2e2023203c2f7765696768743e2c7365745f73746f726167650401146974656d73f801345665633c4b657956616c75653e0005046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973010101205665633c4b65793e000604744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697828010c4b657900011c7375626b65797310010c75333200071011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b28011c5665633c75383e000804a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef40c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000f8000002fc00fc000004082828000101000002280005010c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373090101845065724469737061746368436c6173733c57656967687473506572436c6173733e000009010c346672616d655f737570706f72741c77656967687473405065724469737061746368436c617373040454010d01000c01186e6f726d616c0d0101045400012c6f7065726174696f6e616c0d010104540001246d616e6461746f72790d0101045400000d010c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963110101384f7074696f6e3c5765696768743e0001246d61785f746f74616c110101384f7074696f6e3c5765696768743e0001207265736572766564110101384f7074696f6e3c5765696768743e0000110104184f7074696f6e04045401200108104e6f6e6500000010536f6d65040020000001000015010c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178190101545065724469737061746368436c6173733c7533323e000019010c346672616d655f737570706f72741c77656967687473405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400001d010c346672616d655f737570706f72741c776569676874733c52756e74696d654462576569676874000008011072656164200118576569676874000114777269746520011857656967687400002101082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65ec013452756e74696d65537472696e67000124696d706c5f6e616d65ec013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069732501011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800002501040c436f77040454012901000400290100000029010000022d01002d01000004083101100031010000030800000008003501000005040039010c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c65743d01102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540124045300000400d801185665633c543e000041010c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f7745010124543a3a4d6f6d656e7400004054536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e002823203c7765696768743e31012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e450100000620004901102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454014d01045300000400550101185665633c543e00004d01104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004005101013c737232353531393a3a5075626c6963000051010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d000055010000024d01005901084873705f636f6e73656e7375735f736c6f747310536c6f740000040020010c75363400005d01083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300006101083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965736501016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564b001244f7074696f6e3c4e3e00006501102873705f72756e74696d651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401740453000004007001185665633c543e000069010c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f666d0101bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6699010140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f666d0101bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6699010140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d01084c73705f66696e616c6974795f6772616e6470614445717569766f636174696f6e50726f6f660804480124044e0110000801187365745f6964200114536574496400013065717569766f636174696f6e7101014845717569766f636174696f6e3c482c204e3e00007101084c73705f66696e616c6974795f6772616e6470613045717569766f636174696f6e0804480124044e011001081c507265766f7465040075010139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d697404008d010141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100007501084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c084964017804560179010453017d0100100130726f756e645f6e756d62657220010c7536340001206964656e74697479780108496400011466697273748901011828562c2053290001187365636f6e648901011828562c20532900007901084066696e616c6974795f6772616e6470611c507265766f74650804480124044e01100008012c7461726765745f68617368240104480001347461726765745f6e756d6265721001044e00007d010c4c73705f66696e616c6974795f6772616e6470610c617070245369676e61747572650000040081010148656432353531393a3a5369676e6174757265000081010c1c73705f636f72651c65643235353139245369676e617475726500000400850101205b75383b2036345d0000850100000340000000080089010000040879017d01008d01084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c084964017804560191010453017d0100100130726f756e645f6e756d62657220010c7536340001206964656e74697479780108496400011466697273749501011828562c2053290001187365636f6e649501011828562c20532900009101084066696e616c6974795f6772616e64706124507265636f6d6d69740804480124044e01100008012c7461726765745f68617368240104480001347461726765745f6e756d6265721001044e000095010000040891017d01009901081c73705f636f726510566f6964000100009d010c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909a101102873705f72756e74696d651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a501045300000400ad0101185665633c543e0000a501083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964310101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73a901011c526561736f6e730000a901083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000ad01000002a50100b101102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401b501045300000400b90101185665633c543e0000b501083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720131011c42616c616e6365011800080108696431010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000b901000002b50100bd01083c70616c6c65745f62616c616e6365732052656c65617365730001081856315f305f300000001856325f305f3000010000c1010c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d1010128543a3a42616c616e6365000064d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e61012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e2c7365745f62616c616e63650c010c77686fc501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001206e65775f66726565d1010128543a3a42616c616e63650001306e65775f7265736572766564d1010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d1010128543a3a42616c616e63650002184d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e2823203c7765696768743e4d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e4c7472616e736665725f6b6565705f616c69766508011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d1010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001286b6565705f616c697665ac0110626f6f6c00044405015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fc820206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e2023203c7765696768743e39012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e302020233c2f7765696768743e3c666f7263655f756e7265736572766508010c77686fc501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec5010c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780194011408496404000001244163636f756e74496400000014496e6465780400c90101304163636f756e74496e6465780001000c526177040028011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400cd0101205b75383b2032305d00040000c9010000069400cd01000003140000000800d1010000061800d5010c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047442616c616e636520746f6f206c6f7720746f2073656e642076616c7565484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909d9010c3473705f61726974686d657469632c66697865645f706f696e742446697865645531323800000400180110753132380000dd01086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000e1010c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000028350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e547375646f5f756e636865636b65645f77656967687408011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000118776569676874200118576569676874000128350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292ecc2d2054686520776569676874206f6620746869732063616c6c20697320646566696e6564206279207468652063616c6c65722e2c23203c2f7765696768743e1c7365745f6b657904010c6e6577c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650002285d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e402d204f6e65204442206368616e67652e2c23203c2f7765696768743e1c7375646f5f617308010c77686fc501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e00032c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5010858726d726b5f7375627374726174655f72756e74696d651043616c6c00012c1853797374656d0400f001ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400410101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c4772616e6470610400690101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0004002042616c616e6365730400c10101b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000500105375646f0400e10101a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0007003854656d706c6174654d6f64756c650400e90101cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54656d706c6174654d6f64756c652c2052756e74696d653e00080024526d726b45717569700400ed0101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526d726b45717569702c2052756e74696d653e00090020526d726b436f72650400210201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526d726b436f72652c2052756e74696d653e000a0028526d726b4d61726b65740400590201bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526d726b4d61726b65742c2052756e74696d653e000b001c556e697175657304005d0201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c556e69717565732c2052756e74696d653e000c001c5574696c6974790400690201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e000d0000e9010c3c70616c6c65745f74656d706c6174651870616c6c65741043616c6c04045400010830646f5f736f6d657468696e67040124736f6d657468696e6710010c7533320000085901416e206578616d706c6520646973706174636861626c6520746861742074616b657320612073696e676c65732076616c7565206173206120706172616d657465722c20777269746573207468652076616c756520746f4d0173746f7261676520616e6420656d69747320616e206576656e742e20546869732066756e6374696f6e206d75737420626520646973706174636865642062792061207369676e65642065787472696e7369632e2c63617573655f6572726f72000104d8416e206578616d706c6520646973706174636861626c652074686174206d6179207468726f77206120637573746f6d206572726f722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed010c4470616c6c65745f726d726b5f65717569701870616c6c65741043616c6c040454000118486368616e67655f626173655f69737375657208011c626173655f69641001184261736549640001286e65775f697373756572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650000186c4368616e67652074686520697373756572206f6620612042617365002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6ea02d2060626173655f6964603a20626173655f696420746f206368616e676520697373756572206f66842d20606e65775f697373756572603a20426173652773206e6577206973737565721465717569701401106974656de0015428436f6c6c656374696f6e49642c204e66744964290001206571756970706572e0015428436f6c6c656374696f6e49642c204e667449642900012c7265736f757263655f69641001285265736f75726365496400011062617365100118426173654964000110736c6f74100118536c6f7449640001281d014571756970732061206368696c64204e46542773207265736f7572636520746f206120706172656e74277320736c6f742c20696620616c6c2061726520617661696c61626c652e0901457175697070696e67206f7065726174696f6e7320617265206d61696e7461696e656420696e736964652074686520457175697070696e67732073746f726167652efd014d6f64656c6564206166746572205b657175697020696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f65717569702e6d6429002c506172616d65746572733a0d012d206f726967696e3a205468652063616c6c6572206f66207468652066756e6374696f6e2c206e6f74206e65636573736172696c7920616e797468696e6720656c7365802d206974656d3a204368696c64204e4654206265696e67206571756970706564c02d2065717569707065723a20506172656e74204e46542077686963682077696c6c20657175697020746865206974656d61012d20626173653a204944206f6620746865206261736520776869636820746865206974656d20616e64206571756970706572206d757374206561636820686176652061207265736f75726365207265666572656e63696e6761012d20736c6f743a204944206f662074686520736c6f7420776869636820746865206974656d20616e64206571756970706572206d757374206561636820686176652061207265736f75726365207265666572656e63696e671c756e65717569701001106974656de0015428436f6c6c656374696f6e49642c204e6674496429000128756e6571756970706572e0015428436f6c6c656374696f6e49642c204e667449642900011062617365100118426173654964000110736c6f74100118536c6f744964000238dc556e6571756970732061206368696c64204e46542773207265736f757263652066726f6d2069747320706172656e74277320736c6f742e5043616e206265207375636365737366756c2069665c2d204974656d2068617320626565656e206275726e6564fc2d204974656d20697320657175697070656420616e642065787472696e7369632063616c6c656420627920657175697070696e67206974656d206f776e6572f42d204974656d20697320657175697070656420616e642065787472696e7369632063616c6c6564206279206571756970706572204e4654206f776e65720901457175697070696e67206f7065726174696f6e7320617265206d61696e7461696e656420696e736964652074686520457175697070696e67732073746f726167652efd014d6f64656c6564206166746572205b657175697020696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f65717569702e6d6429002c506172616d65746572733a0d012d206f726967696e3a205468652063616c6c6572206f66207468652066756e6374696f6e2c206e6f74206e65636573736172696c7920616e797468696e6720656c7365882d206974656d3a204368696c64204e4654206265696e6720756e6571756970706564d02d20756e65717569707065723a20506172656e74204e46542077686963682077696c6c20756e657175697020746865206974656d61012d20626173653a204944206f6620746865206261736520776869636820746865206974656d20616e64206571756970706572206d757374206561636820686176652061207265736f75726365207265666572656e63696e6761012d20736c6f743a204944206f662074686520736c6f7420776869636820746865206974656d20616e64206571756970706572206d757374206561636820686176652061207265736f75726365207265666572656e63696e672865717569707061626c650c011c626173655f696410011842617365496400011c736c6f745f6964100118536c6f74496400012c65717569707061626c6573f10101390145717569707061626c654c6973743c426f756e6465645665633c436f6c6c656374696f6e49642c20543a3a0a4d6178436f6c6c656374696f6e7345717569707061626c65506572506172743e2c3e00032061015570646174657320746865206172726179206f6620436f6c6c656374696f6e7320616c6c6f77656420746f20626520657175697070656420746f2061204261736527732073706563696669656420536c6f7420506172742e25024d6f64656c6564206166746572205b65717569707061626c6520696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f65717569707061626c652e6d6429002c506172616d65746572733a01012d206f726967696e3a205468652063616c6c6572206f66207468652066756e6374696f6e2c206d75737420626520697373756572206f66207468652062617365e82d20626173655f69643a20546865204261736520636f6e7461696e696e672074686520536c6f74205061727420746f2062652075706461746564fc2d20706172745f69643a2054686520536c6f7420506172742077686f73652045717569707061626c65204c697374206973206265696e6720757064617465645d012d2065717569707061626c65733a20546865206c697374206f662065717569707061626c657320746861742077696c6c206f76657272696465207468652063757272656e74204571756970706161626c6573206c697374247468656d655f61646408011c626173655f69641001184261736549640001147468656d65f9010144426f756e6465645468656d654f663c543e0004345c416464732061205468656d6520746f206120426173652e15024d6f64656c6564206166746572205b7468656d6561646420696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f7468656d656164642e6d64299c5468656d6573206172652073746f72656420696e20746865205468656d65732073746f72616765050141205468656d65206e616d6564202264656661756c7422206973207265717569726564207072696f7220746f20616464696e67206f74686572205468656d65732e002c506172616d65746572733a01012d206f726967696e3a205468652063616c6c6572206f66207468652066756e6374696f6e2c206d75737420626520697373756572206f66207468652062617365d82d20626173655f69643a20546865204261736520636f6e7461696e696e6720746865205468656d6520746f20626520757064617465645d012d207468656d653a20546865205468656d6520746f2061646420746f2074686520426173652e202041205468656d65206861732061206e616d6520616e642070726f706572746965732c2077686963682061726520616e490120206172726179206f66205b6b65792c2076616c75652c20696e68657269745d2e20205468697320617272617920697320626f756e646564206279204d617850726f706572746965735065725468656d652ecc20202d206b65793a2061726269747261727920426f756e646564537472696e672c20646566696e656420627920636c69656e74d420202d2076616c75653a2061726269747261727920426f756e646564537472696e672c20646566696e656420627920636c69656e746820202d20696e68657269743a206f7074696f6e616c20626f6f6c2c6372656174655f626173650c0124626173655f74797065c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00011873796d626f6cc80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001147061727473090201d901426f756e6465645665633c50617274547970653c537472696e674c696d69744f663c543e2c20426f756e6465645665633c436f6c6c656374696f6e49642c20543a3a0a4d6178436f6c6c656374696f6e7345717569707061626c65506572506172743e2c3e2c20543a3a50617274734c696d69742c3e0005244c437265617465732061206e657720426173652ef5014d6f64656c6564206166746572205b6261736520696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f626173652e6d6429002c506172616d65746572733af02d206f726967696e3a2043616c6c65722c2077696c6c2062652061737369676e65642061732074686520697373756572206f662074686520426173658c2d20626173655f747970653a206d6564696120747970652c20652e672e20227376672209012d2073796d626f6c3a2061726269747261727920636c69656e742d63686f73656e2073796d626f6c2c20652e672e20226b616e617269615f7375706572626972642241012d2070617274733a206172726179206f6620466978656420616e6420536c6f7420706172747320636f6d706f73696e672074686520626173652c20636f6e66696e656420696e206c656e67746820627930202050617274734c696d6974042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef1010c2c726d726b5f74726169747310706172743845717569707061626c654c6973740454426f756e646564436f6c6c656374696f6e4c69737401f501010c0c416c6c00000014456d70747900010018437573746f6d0400f5010154426f756e646564436f6c6c656374696f6e4c69737400020000f501102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540110045300000400cc01185665633c543e0000f9010c2c726d726b5f747261697473147468656d65145468656d650834426f756e646564537472696e6701c858426f756e6465645468656d6550726f7065727469657301fd01000c01106e616d65c80134426f756e646564537472696e6700012870726f70657274696573fd010158426f756e6465645468656d6550726f7065727469657300011c696e6865726974ac0110626f6f6c0000fd01102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454010102045300000400050201185665633c543e000001020c2c726d726b5f747261697473147468656d65345468656d6550726f70657274790434426f756e646564537472696e6701c80008010c6b6579c80134426f756e646564537472696e6700011476616c7565c80134426f756e646564537472696e67000005020000020102000902102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454010d020453000004001d0201185665633c543e00000d020c2c726d726b5f74726169747310706172742050617274547970650834426f756e646564537472696e6701c854426f756e646564436f6c6c656374696f6e4c69737401f5010108244669786564506172740400110201604669786564506172743c426f756e646564537472696e673e00000020536c6f74506172740400150201b8536c6f74506172743c426f756e646564537472696e672c20426f756e646564436f6c6c656374696f6e4c6973743e0001000011020c2c726d726b5f7472616974731070617274244669786564506172740434426f756e646564537472696e6701c8000c010869641001185061727449640001047a1001185a496e64657800010c737263c80134426f756e646564537472696e67000015020c2c726d726b5f747261697473107061727420536c6f74506172740834426f756e646564537472696e6701c854426f756e646564436f6c6c656374696f6e4c69737401f50100100108696410011850617274496400012865717569707061626c65f101019445717569707061626c654c6973743c426f756e646564436f6c6c656374696f6e4c6973743e00010c737263190201544f7074696f6e3c426f756e646564537472696e673e0001047a1001185a496e6465780000190204184f7074696f6e04045401c80108104e6f6e6500000010536f6d650400c800000100001d020000020d020021020c4070616c6c65745f726d726b5f636f72651870616c6c65741043616c6c040454000148206d696e745f6e66741c01146f776e65729801504f7074696f6e3c543a3a4163636f756e7449643e000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000144726f79616c74795f726563697069656e749801504f7074696f6e3c543a3a4163636f756e7449643e00011c726f79616c74792502013c4f7074696f6e3c5065726d696c6c3e0001206d65746164617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001307472616e7366657261626c65ac0110626f6f6c0001247265736f75726365732d0201804f7074696f6e3c426f756e6465645265736f75726365547970654f663c543e3e000024a04d696e747320616e204e465420696e207468652073706563696669656420636f6c6c656374696f6e9c53657473206d6574616461746120616e642074686520726f79616c747920617474726962757465002c506172616d65746572733af02d2060636f6c6c656374696f6e5f6964603a2054686520636f6c6c656374696f6e206f662074686520617373657420746f206265206d696e7465642ed02d20606e66745f6964603a20546865206e66742076616c7565206f662074686520617373657420746f206265206d696e7465642e982d2060726563697069656e74603a205265636569766572206f662074686520726f79616c747901012d2060726f79616c7479603a205065726d696c6c616765207265776172642066726f6d206561636820747261646520666f722074686520526563697069656e74e42d20606d65746164617461603a2041726269747261727920646174612061626f757420616e206e66742c20652e672e20495046532068617368606d696e745f6e66745f6469726563746c795f746f5f6e66741c01146f776e6572e0015428436f6c6c656374696f6e49642c204e6674496429000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000144726f79616c74795f726563697069656e749801504f7074696f6e3c543a3a4163636f756e7449643e00011c726f79616c74792502013c4f7074696f6e3c5065726d696c6c3e0001206d65746164617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001307472616e7366657261626c65ac0110626f6f6c0001247265736f75726365732d0201804f7074696f6e3c426f756e6465645265736f75726365547970654f663c543e3e00012401014d696e747320616e204e465420696e207468652073706563696669656420636f6c6c656374696f6e206469726563746c7920746f20616e6f74686572204e46549c53657473206d6574616461746120616e642074686520726f79616c747920617474726962757465002c506172616d65746572733adc2d2060636f6c6c656374696f6e5f6964603a2054686520636c617373206f662074686520617373657420746f206265206d696e7465642ed02d20606e66745f6964603a20546865206e66742076616c7565206f662074686520617373657420746f206265206d696e7465642e982d2060726563697069656e74603a205265636569766572206f662074686520726f79616c747901012d2060726f79616c7479603a205065726d696c6c616765207265776172642066726f6d206561636820747261646520666f722074686520526563697069656e74e42d20606d65746164617461603a2041726269747261727920646174612061626f757420616e206e66742c20652e672e20495046532068617368446372656174655f636f6c6c656374696f6e0c01206d65746164617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00010c6d6178b0012c4f7074696f6e3c7533323e00011873796d626f6c51020170426f756e646564436f6c6c656374696f6e53796d626f6c4f663c543e0002044c437265617465206120636f6c6c656374696f6e206275726e5f6e66740c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001246d61785f6275726e7310010c753332000304206275726e206e66744864657374726f795f636f6c6c656374696f6e040134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640004044864657374726f7920636f6c6c656374696f6e1073656e640c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001246e65775f6f776e6572a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e00051c11015472616e73666572732061204e46542066726f6d20616e204163636f756e74206f72204e4654204120746f20616e6f74686572204163636f756e74206f72204e46542042002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6ef42d2060636f6c6c656374696f6e5f6964603a20636f6c6c656374696f6e206964206f6620746865206e667420746f206265207472616e73666572726564bc2d20606e66745f6964603a206e6674206964206f6620746865206e667420746f206265207472616e736665727265642d012d20606e65775f6f776e6572603a206e6577206f776e6572206f6620746865206e66742077686963682063616e2062652065697468657220616e206163636f756e74206f722061204e4654286163636570745f6e66740c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001246e65775f6f776e6572a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e000620f44163636570747320616e204e46542073656e742066726f6d20616e6f74686572206163636f756e7420746f2073656c66206f72206f776e6564204e4654002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6ee82d2060636f6c6c656374696f6e5f6964603a20636f6c6c656374696f6e206964206f6620746865206e667420746f206265206163636570746564b02d20606e66745f6964603a206e6674206964206f6620746865206e667420746f20626520616363657074656451012d20606e65775f6f776e6572603a20656974686572206f726967696e2773206163636f756e74204944206f72206f726967696e2d6f776e6564204e46542c2077686963686576657220746865204e46542077617324202073656e7420746f2872656a6563745f6e6674080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000718f452656a6563747320616e204e46542073656e742066726f6d20616e6f74686572206163636f756e7420746f2073656c66206f72206f776e6564204e4654002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6ee82d2060636f6c6c656374696f6e5f6964603a20636f6c6c656374696f6e206964206f6620746865206e667420746f206265206163636570746564b02d20606e66745f6964603a206e6674206964206f6620746865206e667420746f206265206163636570746564606368616e67655f636f6c6c656374696f6e5f697373756572080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001286e65775f697373756572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000818844368616e67652074686520697373756572206f66206120636f6c6c656374696f6e002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6efc2d2060636f6c6c656374696f6e5f6964603a20636f6c6c656374696f6e206964206f6620746865206e667420746f206368616e676520697373756572206f669c2d20606e65775f697373756572603a20436f6c6c656374696f6e2773206e657720697373756572307365745f70726f7065727479100134636f6c6c656374696f6e5f6964e80130436f6c6c656374696f6e49640001306d617962655f6e66745f6964b001344f7074696f6e3c4e667449643e00010c6b6579b401344b65794c696d69744f663c543e00011476616c7565b8013c56616c75654c696d69744f663c543e00090470736574206120637573746f6d2076616c7565206f6e20616e204e46543c6c6f636b5f636f6c6c656374696f6e040134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000a043c6c6f636b20636f6c6c656374696f6e486164645f62617369635f7265736f757263650c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001207265736f757263653d02017c42617369635265736f757263653c537472696e674c696d69744f663c543e3e000b0454437265617465206261736963207265736f757263655c6164645f636f6d706f7361626c655f7265736f757263650c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001207265736f757263654102012101436f6d706f7361626c655265736f757263653c537472696e674c696d69744f663c543e2c20426f756e6465645665633c5061727449642c20543a3a50617274734c696d69740a3e3e000c046843726561746520636f6d706f7361626c65207265736f75726365446164645f736c6f745f7265736f757263650c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001207265736f7572636549020178536c6f745265736f757263653c537472696e674c696d69744f663c543e3e000d045043726561746520736c6f74207265736f757263653c6163636570745f7265736f757263650c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000e04e061636365707420746865206164646974696f6e206f662061206e6577207265736f7572636520746f20616e206578697374696e67204e46543c72656d6f76655f7265736f757263650c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000f043c72656d6f7665207265736f757263655c6163636570745f7265736f757263655f72656d6f76616c0c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964001004cc616363657074207468652072656d6f76616c206f662061207265736f75726365206f6620616e206578697374696e67204e4654307365745f7072696f726974790c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001287072696f726974696573550201a0426f756e6465645665633c5265736f7572636549642c20543a3a4d61785072696f7269746965733e001104a8736574206120646966666572656e74206f72646572206f66207265736f75726365207072696f72697479042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e250204184f7074696f6e0404540129020108104e6f6e6500000010536f6d6504002902000001000029020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c75333200002d0204184f7074696f6e0404540131020108104e6f6e6500000010536f6d650400310200000100003102102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540135020453000004004d0201185665633c543e000035020c2c726d726b5f747261697473207265736f75726365345265736f7572636554797065730834426f756e646564537472696e6701c830426f756e6465645061727473013902010c14426173696304003d02017042617369635265736f757263653c426f756e646564537472696e673e00000028436f6d706f7361626c650400410201bc436f6d706f7361626c655265736f757263653c426f756e646564537472696e672c20426f756e64656450617274733e00010010536c6f7404004902016c536c6f745265736f757263653c426f756e646564537472696e673e000200003902102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540110045300000400cc01185665633c543e00003d020c2c726d726b5f747261697473207265736f757263653442617369635265736f757263650434426f756e646564537472696e6701c8000401206d65746164617461190201544f7074696f6e3c426f756e646564537472696e673e000041020c2c726d726b5f747261697473207265736f7572636548436f6d706f7361626c655265736f757263650834426f756e646564537472696e6701c830426f756e646564506172747301390200100114706172747339020130426f756e6465645061727473000110626173651001184261736549640001206d65746164617461190201544f7074696f6e3c426f756e646564537472696e673e000110736c6f74450201604f7074696f6e3c284261736549642c20536c6f744964293e0000450204184f7074696f6e04045401e00108104e6f6e6500000010536f6d650400e0000001000049020c2c726d726b5f747261697473207265736f7572636530536c6f745265736f757263650434426f756e646564537472696e6701c8000c0110626173651001184261736549640001206d65746164617461190201544f7074696f6e3c426f756e646564537472696e673e000110736c6f74100118536c6f74496400004d020000023502005102102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e00005502102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540110045300000400cc01185665633c543e000059020c4870616c6c65745f726d726b5f6d61726b65741870616c6c65741043616c6c0404540001180c6275790c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000118616d6f756e74c001504f7074696f6e3c42616c616e63654f663c543e3e00002051014275792061206c6973746564204e46542e20456e73757265207468617420746865204e465420697320617661696c61626c6520666f7220707572636861736520616e6420686173206e6f7420726563656e746c79806265656e207075726368617365642c2073656e742c206f72206275726e65642e002c506172616d65746572733ab0092d20606f726967696e60202d204163636f756e74206f662074686520706f74656e7469616c206275796572c8092d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e465490092d20606e66745f696460202d204e4654206964206f662074686520524d524b204e4654e0092d2060616d6f756e7460202d204f7074696f6e616c20707269636520617420776869636820627579657220707572636861736564206174106c697374100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000118616d6f756e7418013042616c616e63654f663c543e00011c65787069726573b001584f7074696f6e3c543a3a426c6f636b4e756d6265723e00012c4d014c697374206120524d524b204e4654206f6e20746865204d61726b6574706c61636520666f722070757263686173652e2041206c697374696e672063616e2062652063616e63656c6c65642c20616e6420697359016175746f6d61746963616c6c7920636f6e736964657265642063616e63656c6c6564207768656e2061206062757960206973206578656375746564206f6e20746f70206f66206120676976656e206c697374696e672e5501416e204e465420746861742068617320616e6f74686572204e465420617320697473206f776e65722043414e4e4f54206265206c69737465642e20416e204e4654206f776e65642062792061204e4654206d757374c066697273742062652073656e7420746f20616e206163636f756e74206265666f7265206265696e67206c69737465642e002c506172616d65746572733aec092d20606f726967696e60202d204163636f756e74206f66206f776e6572206f662074686520524d524b204e465420746f206265206c6973746564c8092d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e465490092d20606e66745f696460202d204e4654206964206f662074686520524d524b204e46548c092d2060616d6f756e7460202d205072696365206f662074686520524d524b204e46540101092d20606578706972657360202d204f7074696f6e616c20426c6f636b4e756d62657220666f72207768656e20746865206c697374696e67206578706972657318756e6c697374080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640002182d01556e6c697374206120524d524b204e4654206f6e20746865204d61726b6574706c61636520616e642072656d6f76652066726f6d2073746f7261676520696e20604c697374696e6773602e002c506172616d65746572733ac42d20606f726967696e60202d204163636f756e74206f776e6572206f6620746865206c697374656420524d524b204e4654c42d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e46548c2d20606e66745f696460202d204e4654206964206f662074686520524d524b204e4654286d616b655f6f66666572100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000118616d6f756e7418013042616c616e63654f663c543e00011c65787069726573b001584f7074696f6e3c543a3a426c6f636b4e756d6265723e00032459014d616b6520616e206f66666572206f6e206120524d524b204e465420666f722070757263686173652e20416e206f666665722063616e20626520736574207769746820616e2065787069726174696f6e207768657265e4746865206f666665722063616e206e6f206c6f6e6765722062652061636365707465642062792074686520524d524b204e4654206f776e6572002c506172616d65746572733aac2d20606f726967696e60202d204163636f756e74206f662074686520706f74656e7469616c206275796572c42d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e46548c2d20606e66745f696460202d204e4654206964206f662074686520524d524b204e4654882d2060616d6f756e7460202d205072696365206f662074686520524d524b204e4654a02d206065787069726174696f6e60202d2045787069726174696f6e206f6620746865206f666665723877697468647261775f6f66666572080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400041c5901576974686472617720616e206f66666572206f6e206120524d524b204e46542c20737563682074686174206974206973206e6f206c6f6e67657220617661696c61626c6520746f20626520616363657074656420627934746865204e4654206f776e6572002c506172616d65746572733adc2d20606f726967696e60202d204163636f756e7420746861742077616e747320746f207769746864726177207468656972206f66666572c42d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e46548c2d20606e66745f696460202d204e4654206964206f662074686520524d524b204e4654306163636570745f6f666665720c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400011c6f666665726572000130543a3a4163636f756e744964000500042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5d020c3870616c6c65745f756e69717565731870616c6c65741043616c6c08045400044900016018637265617465080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011461646d696ec501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000040090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00ac604974656d4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a61012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e657720636f6c6c656374696f6e2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000130667265655f686f6c64696e67ac0110626f6f6c000144190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0049012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e6577206974656d2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e39012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c207375706572757365723420207065726d697373696f6e7321016f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c7769746e6573736102013844657374726f795769746e65737300023c9c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00645765696768743a20604f286e202b206d29602077686572653a542d20606e203d207769746e6573732e6974656d7360782d20606d203d207769746e6573732e6974656d5f6d657461646174617360682d206061203d207769746e6573732e6174747269627574657360106d696e740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500032ca04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e004101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ec82d20606974656d603a20546865206974656d2076616c7565206f6620746865206974656d20746f206265206d696e7465642ed82d206062656e6566696369617279603a2054686520696e697469616c206f776e6572206f6620746865206d696e746564206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012c636865636b5f6f776e6572650201ac4f7074696f6e3c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e0004345844657374726f7920612073696e676c65206974656d2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265206275726e65642e51012d2060636865636b5f6f776e6572603a2049662060536f6d6560207468656e20746865206f7065726174696f6e2077696c6c206661696c2077697468206057726f6e674f776e65726020756e6c657373207468657820206974656d206973206f776e656420627920746869732076616c75652e00b4456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e00385765696768743a20604f283129607c4d6f6465733a2060636865636b5f6f776e65722e69735f736f6d652829602e207472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500053cc04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642ec42d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146974656d73cc01385665633c543a3a4974656d49643e0006449852656576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f6620746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e2829296018667265657a65080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000728c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652066726f7a656e2eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000828a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207468617765642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f2831296044667265657a655f636f6c6c656374696f6e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000924fc446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e0064456d6974732060436f6c6c656374696f6e46726f7a656e602e00385765696768743a20604f283129603c746861775f636f6c6c656374696f6e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000a24dc52652d616c6c6f7720756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265207468617765642e0064456d6974732060436f6c6c656374696f6e546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011461646d696ec501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011c667265657a6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000c30d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000d2c1501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e15012d20606974656d603a20546865206974656d206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001506d617962655f636865636b5f64656c6567617465650201ac4f7074696f6e3c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e000e40110143616e63656c20746865207072696f7220617070726f76616c20666f7220746865207472616e73666572206f6620616e206974656d20627920612064656c65676174652e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3bfc2d20605369676e656460207769746820746865207369676e6572206265696e67207468652041646d696e206f66207468652060636f6c6c656374696f6e603be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e0d012d20606974656d603a20546865206974656d206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e51012d20606d617962655f636865636b5f64656c6567617465603a2049662060536f6d65602077696c6c20656e7375726520746861742074686520676976656e206163636f756e7420697320746865206f6e6520746fb020207768696368207065726d697373696f6e206f66207472616e736665722069732064656c6567617465642e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296044666f7263655f6974656d5f7374617475731c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118697373756572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011461646d696ec501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011c667265657a6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000130667265655f686f6c64696e67ac0110626f6f6c00012469735f66726f7a656eac0110626f6f6c000f4094416c746572207468652061747472696275746573206f66206120676976656e206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00ac2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2e982d20606f776e6572603a20546865206e6577204f776e6572206f662074686973206974656d2ea02d2060697373756572603a20546865206e657720497373756572206f662074686973206974656d2e982d206061646d696e603a20546865206e65772041646d696e206f662074686973206974656d2ea82d2060667265657a6572603a20546865206e657720467265657a6572206f662074686973206974656d2e51012d2060667265655f686f6c64696e67603a20576865746865722061206465706f7369742069732074616b656e20666f7220686f6c64696e6720616e206974656d206f66207468697320636f6c6c656374696f6e2e39012d206069735f66726f7a656e603a2057686574686572207468697320636f6c6c656374696f6e2069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e0456d69747320604974656d5374617475734368616e67656460207769746820746865206964656e74697479206f6620746865206974656d2e00385765696768743a20604f28312960347365745f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579b4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565b80174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001044a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2901604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f6174747269627574650c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579b4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e001138b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d65746164617461100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c0012447453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640013347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011064617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c0014408853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400153090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6eb0015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001628110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c75333200172ce053657420746865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00e44e6f74653a20546869732066756e6374696f6e2063616e206f6e6c792073756363656564206f6e63652070657220636f6c6c656374696f6e2e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e61020c3870616c6c65745f756e69717565731474797065733844657374726f795769746e65737300000c01146974656d73e8010c7533320001386974656d5f6d6574616461746173e8010c75333200012861747472696275746573e8010c7533320000650204184f7074696f6e04045401c5010108104e6f6e6500000010536f6d650400c501000001000069020c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011414626174636804011463616c6c736d0201605665633c3c5420617320436f6e6669673e3a3a43616c6c3e00004c7c53656e642061206261746368206f662064697370617463682063616c6c732e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465783501010c75313600011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c736d0201605665633c3c5420617320436f6e6669673e3a3a43616c6c3e000238ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c64697370617463685f617308012461735f6f726967696e71020154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000328c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292e1d012d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b20543a3a576569676874496e666f3a3a64697370617463685f617328292e2c23203c2f7765696768743e2c666f7263655f626174636804011463616c6c736d0201605665633c3c5420617320436f6e6669673e3a3a43616c6c3e0004387c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d02000002e5010071020858726d726b5f7375627374726174655f72756e74696d65304f726967696e43616c6c65720001081873797374656d0400750201746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000010566f69640400990101110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640001000075020c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e650002000079020c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c65747d020c3c70616c6c65745f74656d706c6174651870616c6c6574144572726f72040454000108244e6f6e6556616c7565000004884572726f72206e616d65732073686f756c642062652064657363726970746976652e3c53746f726167654f766572666c6f77000104f84572726f72732073686f756c6420686176652068656c7066756c20646f63756d656e746174696f6e206173736f6369617465642077697468207468656d2e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090981020c2c726d726b5f74726169747310626173652042617365496e666f08244163636f756e744964010034426f756e646564537472696e6701c8000c01186973737565720001244163636f756e744964000124626173655f74797065c80134426f756e646564537472696e6700011873796d626f6cc80134426f756e646564537472696e67000085020000040ce010100089020000040c10c8c8008d020c4470616c6c65745f726d726b5f65717569701870616c6c6574144572726f720404540001583c5065726d697373696f6e4572726f720000003c4974656d446f65736e7445786973740001004c4571756970706572446f65736e744578697374000200444e6f417661696c61626c65426173654964000300444e6f417661696c61626c65506172744964000400484d7573744265446972656374506172656e740005003c50617274446f65736e7445786973740006003c42617365446f65736e7445786973740007004843616e7445717569704669786564506172740008007c4e6f5265736f75726365466f725468697342617365466f756e644f6e4e66740009005c436f6c6c656374696f6e4e6f7445717569707061626c65000a00744974656d4861734e6f5265736f75726365546f45717569705468657265000b005c4e6f45717569707061626c654f6e466978656450617274000c00584e6565647344656661756c745468656d654669727374000d004c4974656d416c72656164794571756970706564000e004c536c6f74416c72656164794571756970706564000f003c536c6f744e6f74457175697070656400100030556e6b6e6f776e4572726f7200110058457863656564734d617850617274735065724261736500120044546f6f4d616e7950726f706572746965730013003c4974656d4e6f74457175697070656400140094556e65717569707065724d7573744f776e4569746865724974656d4f72457175697070657200150004ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090991020c2c726d726b5f74726169747328636f6c6c656374696f6e38436f6c6c656374696f6e496e666f0c34426f756e646564537472696e6701c834426f756e64656453796d626f6c015102244163636f756e7449640100001401186973737565720001244163636f756e7449640001206d65746164617461c80134426f756e646564537472696e6700010c6d6178b0012c4f7074696f6e3c7533323e00011873796d626f6c51020134426f756e64656453796d626f6c0001286e6674735f636f756e7410010c753332000095020c2c726d726b5f7472616974730c6e66741c4e6674496e666f0c244163636f756e744964010034526f79616c7479416d6f756e7401290234426f756e646564537472696e6701c8001801146f776e6572a801a04163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c4163636f756e7449643e00011c726f79616c7479990201b44f7074696f6e3c526f79616c7479496e666f3c4163636f756e7449642c20526f79616c7479416d6f756e743e3e0001206d65746164617461c80134426f756e646564537472696e670001206571756970706564ac0110626f6f6c00011c70656e64696e67ac0110626f6f6c0001307472616e7366657261626c65ac0110626f6f6c0000990204184f7074696f6e040454019d020108104e6f6e6500000010536f6d6504009d0200000100009d020c2c726d726b5f7472616974730c6e66742c526f79616c7479496e666f08244163636f756e744964010034526f79616c7479416d6f756e7401290200080124726563697069656e740001244163636f756e744964000118616d6f756e7429020134526f79616c7479416d6f756e740000a1020000040c10101000a50200000408e0e000a9020c2c726d726b5f747261697473207265736f75726365305265736f75726365496e666f0834426f756e646564537472696e6701c830426f756e64656450617274730139020010010869641001285265736f7572636549640001207265736f75726365350201a85265736f7572636554797065733c426f756e646564537472696e672c20426f756e64656450617274733e00011c70656e64696e67ac0110626f6f6c00013c70656e64696e675f72656d6f76616cac0110626f6f6c0000ad0200000414101010101000b1020000040c10b0b400b50200000408b902bd0200b9020c2c726d726b5f7472616974730c6e6674204e66744368696c640000080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640000bd02082c5068616e746f6d54797065307068616e746f6d5f7479706504045401c102000400c502000000c1020c2c726d726b5f7472616974732070726f70657274793050726f7065727479496e666f0828426f756e6465644b657901b430426f756e64656456616c756501b80008010c6b6579b40128426f756e6465644b657900011476616c7565b80130426f756e64656456616c75650000c50200000300000000c10200c9020c4070616c6c65745f726d726b5f636f72651870616c6c6574144572726f7204045400016c244e6f6e6556616c7565000004884572726f72206e616d65732073686f756c642062652064657363726970746976652e3c53746f726167654f766572666c6f77000104f84572726f72732073686f756c6420686176652068656c7066756c20646f63756d656e746174696f6e206173736f6369617465642077697468207468656d2e1c546f6f4c6f6e670002005c4e6f417661696c61626c65436f6c6c656374696f6e4964000300544e6f417661696c61626c655265736f757263654964000400384d657461646174614e6f745365740005003c526563697069656e744e6f74536574000600404e6f417661696c61626c654e66744964000700284e6f74496e52616e676500080034526f79616c74794e6f7453657400090044436f6c6c656374696f6e556e6b6e6f776e000a00304e6f5065726d697373696f6e000b00244e6f5769746e657373000c0048436f6c6c656374696f6e4e6f74456d707479000d0058436f6c6c656374696f6e46756c6c4f724c6f636b6564000e007043616e6e6f7453656e64546f44657363656e64656e744f7253656c66000f00545265736f75726365416c726561647945786973747300100034456d7074795265736f7572636500110044546f6f4d616e79526563757273696f6e730012002c4e667449734c6f636b65640013005c43616e6e6f744163636570744e6f6e4f776e65644e66740014005c43616e6e6f7452656a6563744e6f6e4f776e65644e66740015006443616e6e6f7452656a6563744e6f6e50656e64696e674e66740016004c5265736f75726365446f65736e744578697374001700485265736f757263654e6f7450656e64696e67001804d0416363657074696e672061207265736f757263652074686174206973206e6f742070656e64696e672073686f756c64206661696c3c4e6f6e5472616e7366657261626c650019005843616e6e6f7453656e6445717569707065644974656d001a0004ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909cd020c4870616c6c65745f726d726b5f6d61726b6574147479706573204c697374496e666f0c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d6265720110000c01246c69737465645f62790001244163636f756e744964000118616d6f756e7418011c42616c616e636500011c65787069726573b0014c4f7074696f6e3c426c6f636b4e756d6265723e0000d10200000408e00000d5020c4870616c6c65745f726d726b5f6d61726b6574147479706573144f666665720c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d6265720110000c01146d616b65720001244163636f756e744964000118616d6f756e7418011c42616c616e636500011c65787069726573b0014c4f7074696f6e3c426c6f636b4e756d6265723e0000d9020c4870616c6c65745f726d726b5f6d61726b65741870616c6c6574144572726f7204045400013c304e6f5065726d697373696f6e000004bc4e6f207065726d697373696f6e7320666f72206163636f756e7420746f20696e7465726163742077697468204e46543c546f6b656e4e6f74466f7253616c6500010458546f6b656e2063616e6e6f7420626520626f756768744c43616e6e6f7457697468647261774f66666572000204a84f6666657220616c726561647920616363657074656420616e642063616e6e6f742077697468647261774443616e6e6f74556e6c697374546f6b656e000304e443616e6e6f7420756e6c697374204e46542061732069742068617320616c7265616479206265656e20756e6c6973746564206f7220736f6c645443616e6e6f744f666665724f6e4f776e546f6b656e0004048c43616e6e6f74206d616b65206f66666572206f6e204e4654206f6e206f776e204e46544443616e6e6f744275794f776e546f6b656e0005049043616e6e6f7420627579204e4654207468617420697320616c7265616479206f776e656430556e6b6e6f776e4f66666572000604404f6666657220697320756e6b6e6f776e5c43616e6e6f744c6973744e66744f776e656442794e66740007047843616e6e6f74206c697374204e4654206f776e65642062792061204e465444546f6b656e446f65734e6f7445786973740008047843616e6e6f74206c6973742061206e6f6e2d6578697374696e67204e46542c4f66666572546f6f4c6f77000904bc4f666665722069732062656c6f7720746865204f666665724d696e696d756d416d6f756e74207468726573686f6c6438416c72656164794f666665726564000a04e04163636f756e742063616e6e6f74206f66666572206f6e2061204e465420616761696e207769746820616e20616374697665206f666665723c4f6666657248617345787069726564000b04c44163636570746564206f6666657220686173206578706972656420616e642063616e6e6f74206265206163636570746564444c697374696e6748617345787069726564000c04a04c697374696e6720686173206578706972656420616e642063616e6e6f7420626520626f756768746050726963654469666665727346726f6d4578706563746564000d04a8507269636520646966666572732066726f6d207768656e206062757960207761732065786563757465643c4e6f6e5472616e7366657261626c65000e04a44e6f7420706f737369626c6520746f206c697374206e6f6e2d7472616e7366657261626c65204e465404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909dd020c3870616c6c65745f756e697175657314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118002801146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000134746f74616c5f6465706f7369741801384465706f73697442616c616e6365000130667265655f686f6c64696e67ac0110626f6f6c0001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001286174747269627574657310010c75333200012469735f66726f7a656eac0110626f6f6c0000e1020000040c00101000e50200000408001000e9020c3870616c6c65745f756e69717565731474797065732c4974656d44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e744964000120617070726f7665649801444f7074696f6e3c4163636f756e7449643e00012469735f66726f7a656eac0110626f6f6c00011c6465706f7369741801384465706f73697442616c616e63650000ed020c3870616c6c65745f756e697175657314747970657348436f6c6c656374696f6e4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461c8016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c0000f1020c3870616c6c65745f756e6971756573147479706573304974656d4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461c8016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c0000f50200000408b81800f9020c3870616c6c65745f756e69717565731870616c6c6574144572726f7208045400044900013c304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e2857726f6e674f776e6572000304e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730004046c496e76616c6964207769746e657373206461746120676976656e2e14496e55736500050474546865206974656d20494420697320616c72656164792074616b656e2e1846726f7a656e00060484546865206974656d206f7220636f6c6c656374696f6e2069732066726f7a656e2e3457726f6e6744656c6567617465000704f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284e6f44656c6567617465000804785468657265206973206e6f2064656c656761746520617070726f7665642e28556e617070726f766564000904c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000a042501546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e657273686970206f662074686520636f6c6c656374696f6e2069732061636365707461626c652e184c6f636b6564000b044c546865206974656d206973206c6f636b65642e404d6178537570706c7952656163686564000c046c416c6c206974656d732068617665206265656e206d696e7465642e4c4d6178537570706c79416c7265616479536574000d0490546865206d617820737570706c792068617320616c7265616479206265656e207365742e444d6178537570706c79546f6f536d616c6c000e0441015468652070726f7669646564206d617820737570706c79206973206c65737320746f2074686520616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909fd020c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909090103102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301c5011043616c6c01e501245369676e6174757265010503144578747261011503000400280000000503082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040081010148656432353531393a3a5369676e61747572650000001c53723235353139040009030148737232353531393a3a5369676e617475726500010014456364736104000d03014065636473613a3a5369676e61747572650002000009030c1c73705f636f72651c73723235353139245369676e617475726500000400850101205b75383b2036345d00000d030c1c73705f636f7265146563647361245369676e617475726500000400110301205b75383b2036355d0000110300000341000000080015030000041c19031d03210325032d033103350300190310306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e040454000000001d0310306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000210310306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000250310306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004002903010c45726100002903102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff00002d0310306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400e80120543a3a496e6465780000310310306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000003503086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400d101013042616c616e63654f663c543e000039030858726d726b5f7375627374726174655f72756e74696d651c52756e74696d6500000000381853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c600000000000000000000000000000000000000000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510248000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510280400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401002c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301003c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040224dc0400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000e404000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000d4040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01f001481830426c6f636b5765696768747305018501e0d1a93e0100000000204aa9d101000090cd2405000000000170fae4a82e010000010098f73e5d01000001000000000000000090cd2405000000000170823713a30100000100204aa9d1010000010088526a7400000090cd24050000000000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746815013000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e2044625765696768741d014040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e2101d10238726d726b2d73756273747261746538726d726b2d7375627374726174650100000064000000010000002c643365445941c5cb01000000df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000dd718d5cc53262d401000000ab3c0572291feb8b01000000ed99c5acb25eedf503000000bc9d89904f5b923f0100000037c8bb1350a9a2a80100000001000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669783501082a0014a8205468652064657369676e61746564205353383520707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e013901006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c01003d0104000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701002020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0141010004344d696e696d756d506572696f642020e803000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021041757261011041757261082c417574686f726974696573010049010400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010059012000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000031c4772616e647061011c4772616e6470611814537461746501005d0104000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006101040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000e00400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010020200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405201004001059012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e016901016c04384d6178417574686f726974696573101020000000045c204d617820417574686f72697469657320696e20757365019d01042042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200a101040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200b101040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e3853746f7261676556657273696f6e0100bd0104000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e00a020546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e01c10101800c484578697374656e7469616c4465706f7369741840f401000000000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101000000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01d50105485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100d90140000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100dd0104000000018804604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e0006105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01e101018c00017902073854656d706c6174654d6f64756c65013854656d706c6174654d6f64756c650424536f6d657468696e6700001004000001e901019c00017d020824526d726b45717569700124526d726b4571756970181442617365730001040510810204000cd42053746f72657320426173657320696e666f20286973737565722c20626173655f747970652c2073796d626f6c2c20706172747329ec20544f444f2068747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d7375627374726174652f6973737565732f3938f02044656c6574652050617274732066726f6d20426173657320696e666f2c2061732069742773206b65707420696e2050617274732073746f726167651450617274730001080505e00d0204000cb02053746f726573205061727473202865697468657220466978656450617274206f7220536c6f745061727429a8202d20536c6f74506172743a2069642c2065717569707061626c6520286c697374292c207372632c207a60202d204669786564506172743a2069642c207372632c207a284e6578744261736549640100101000000000048c2053746f7265732074686520696e6372656d656e74696e67204e657874426173654964284e6578745061727449640101040510101000000000048c2053746f7265732074686520696e6372656d656e74696e67204e65787450617274496428457175697070696e677300010c0202028502100400040d012053746f72657320457175697070696e677320696e666f20282865717569707065722c20626173652c20736c6f74292c2065717569707065645f7265736f7572636529185468656d657300010c0202028902c804000415012053746f726573205468656d6520696e666f202828626173652c207468656d65206e616d652c2070726f7065727479206b6579292c2070726f70657274792076616c75652901ed0101a008544d617850726f706572746965735065725468656d6510106400000004d8204d6178696d756d20616c6c6f7765642050617274732028656974686572204669786564206f7220536c6f74292070657220426173657c4d6178436f6c6c656374696f6e7345717569707061626c655065725061727410106400000004cc204d6178696d756d206e756d626572206f662050726f7065727469657320616c6c6f77656420666f7220616e79205468656d65018d020920526d726b436f72650120526d726b436f726534244e6578744e667449640101040510101000000000003c436f6c6c656374696f6e496e646578010010100000000000384e6578745265736f7572636549640101080505e01010000000000470204e65787420617661696c61626c65205265736f757263652049442e2c436f6c6c656374696f6e7300010405109102040004602053746f72657320636f6c6c656374696f6e7320696e666f104e6674730001080505e09502040004402053746f726573206e667420696e666f285072696f72697469657300010c020202a10210040004542053746f726573207072696f7269747920696e666f204368696c6472656e0001080505a50294040004642053746f726573206e6674206368696c6472656e20696e666f245265736f757263657300010c020202a102a902040004542053746f726573207265736f7572636520696e666f3c45717569707061626c65426173657300010c020202a1029404000cd02053746f72657320746865206578697374656e6365206f662061206261736520666f72206120706172746963756c6172204e4654dc205468697320697320706f70756c61746564206f6e20606164645f636f6d706f7361626c655f7265736f75726365602c20616e64206973e4207573656420696e2074686520726d726b2d65717569702070616c6c6574207768656e20657175697070696e672061207265736f757263652e3c45717569707061626c65536c6f74730001140202020202ad0294040010dc2053746f72657320746865206578697374656e6365206f6620612042617365202b20536c6f7420666f72206120706172746963756c6172c4204e4654277320706172746963756c6172207265736f757263652e20205468697320697320706f70756c61746564206f6ecc20606164645f736c6f745f7265736f75726365602c20616e64206973207573656420696e2074686520726d726b2d6571756970882070616c6c6574207768656e20657175697070696e672061207265736f757263652e2850726f7065727469657300010c020202b102b8040004b4204172626974726172792070726f70657274696573202f206d65746164617461206f6620616e2061737365742e104c6f636b01010405e0ac04000438204c6f636b20666f72204e4654733044756d6d7953746f726167650000b5020400149c20546869732073746f72616765206973206e6f7420757365642062792074686520636861696e2ec4204974206973206e656564206f6e6c7920666f7220506f6c6b61646f744a532074797065732067656e65726174696f6e2e00d0205468652073746f726564207479706573206172652075736520696e207468652052504320696e74657266616365206f6e6c792c090120506f6c6b61646f744a5320776f6e27742067656e657261746520545320747970657320666f72207468656d20776974686f757420746869732073746f726167652e01210201a40c4c5265736f7572636553796d626f6c4c696d697410100a000000048c20546865206d6178696d756d207265736f757263652073796d626f6c206c656e6774682850617274734c696d697410101900000004cc20546865206d6178696d756d206e756d626572206f662070617274732065616368207265736f75726365206d61792068617665344d61785072696f72697469657310101900000004410120546865206d6178696d756d206e756d626572206f66207265736f757263657320746861742063616e20626520696e636c7564656420696e2061207365747072696f726974792065787472696e73696301c9020a28526d726b4d61726b65740128526d726b4d61726b657408284c69737465644e6674730001080202e0cd02040004742053746f726573206c6973746564204e465420707269636520696e666f184f66666572730001080202d102d5020400046c2053746f726573206f66666572206f6e2061204e465420696e666f01590201bc04484d696e696d756d4f66666572416d6f756e74184000e1f5050000000000000000000000000498204d696e696d756d206f6666657220616d6f756e7420617320612076616c6964206f6666657201d9020b1c556e6971756573011c556e69717565732414436c6173730001040210dd02040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c020202e10294040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e30436c6173734163636f756e740001080202e5029404000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e1441737365740001080202e0e902040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e3c436c6173734d657461646174614f660001040210ed0204000468204d65746164617461206f66206120636f6c6c656374696f6e2e48496e7374616e63654d657461646174614f660001080202e0f10204000454204d65746164617461206f6620616e206974656d2e2441747472696275746500010c020202b102f502040004702041747472696275746573206f66206120636f6c6c656374696f6e2e4c436f6c6c656374696f6e4d6178537570706c79000104021010040004f0204b6565707320747261636b206f6620746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e206d6967687420686176652e015d0201c42044436f6c6c656374696f6e4465706f736974184000a0724e1809000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f736974184000407a10f35a0000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f73697442617365184000a0724e180900000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000a0724e1809000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400010a5d4e8000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410108000000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410102000000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100001000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e01f9020c1c5574696c697479011c5574696c6974790001690201d0044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01fd020d0103041c40436865636b5370656356657273696f6e19031038436865636b547856657273696f6e1d031030436865636b47656e6573697321032438436865636b4d6f7274616c69747925032428436865636b4e6f6e63652d03942c436865636b576569676874310394604368617267655472616e73616374696f6e5061796d656e743503943903","id":"1"} \ No newline at end of file +{"jsonrpc":"2.0","result":"0x6d6574610e4103000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f72741c77656967687473405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f727920010454000020000005060024083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00002800000208002c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677330013c5665633c4469676573744974656d3e000030000002340034102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e00060024436f6e73656e7375730800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e000400105365616c0800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e000500144f74686572040028011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000380000030400000008003c00000240004008306672616d655f73797374656d2c4576656e745265636f7264080445014404540124000c01147068617365d4011450686173650001146576656e7444010445000118746f70696373d801185665633c543e0000440858726d726b5f7375627374726174655f72756e74696d65144576656e7400012c1853797374656d04004801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c4772616e64706104006c015470616c6c65745f6772616e6470613a3a4576656e740004002042616c616e636573040080017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404008801a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000600105375646f04008c016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0007003854656d706c6174654d6f64756c6504009c017c70616c6c65745f74656d706c6174653a3a4576656e743c52756e74696d653e00080024526d726b45717569700400a0018470616c6c65745f726d726b5f65717569703a3a4576656e743c52756e74696d653e00090020526d726b436f72650400a4018070616c6c65745f726d726b5f636f72653a3a4576656e743c52756e74696d653e000a0028526d726b4d61726b65740400bc018870616c6c65745f726d726b5f6d61726b65743a3a4576656e743c52756e74696d653e000b001c556e69717565730400c4017870616c6c65745f756e69717565733a3a4576656e743c52756e74696d653e000c001c5574696c6974790400d0015470616c6c65745f7574696c6974793a3a4576656e74000d0000480c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f4c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7258013444697370617463684572726f7200013464697370617463685f696e666f4c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736824011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e4c0c346672616d655f737570706f72741c77656967687473304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735001344469737061746368436c617373000120706179735f666565540110506179730000500c346672616d655f737570706f72741c77656967687473344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000540c346672616d655f737570706f72741c7765696768747310506179730001080c596573000000084e6f0001000058082873705f72756e74696d653444697370617463684572726f72000128144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504005c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400600128546f6b656e4572726f720007002841726974686d65746963040064013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04006801485472616e73616374696f6e616c4572726f72000900005c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7238018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000060082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006000064082873705f72756e74696d653c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000068082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100006c0c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574700134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909097000000274007400000408782000780c4c73705f66696e616c6974795f6772616e6470610c617070185075626c6963000004007c013c656432353531393a3a5075626c696300007c0c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000800c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909098414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000880c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c749001384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f65729801504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c749001384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909900418526573756c740804540194044501580108084f6b040094000000000c45727204005800000100009400000400009804184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100009c0c3c70616c6c65745f74656d706c6174651870616c6c6574144576656e740404540001043c536f6d657468696e6753746f726564080010010c7533320000000130543a3a4163636f756e74496400000859014576656e7420646f63756d656e746174696f6e2073686f756c6420656e64207769746820616e20617272617920746861742070726f7669646573206465736372697074697665206e616d657320666f72206576656e7470706172616d65746572732e205b736f6d657468696e672c2077686f5d0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a00c4470616c6c65745f726d726b5f65717569701870616c6c6574144576656e740404540001142c4261736543726561746564080118697373756572000130543a3a4163636f756e74496400011c626173655f696410011842617365496400000030536c6f74457175697070656410013c6974656d5f636f6c6c656374696f6e100130436f6c6c656374696f6e49640001206974656d5f6e66741001144e6674496400011c626173655f696410011842617365496400011c736c6f745f6964100118536c6f74496400010038536c6f74556e657175697070656410013c6974656d5f636f6c6c656374696f6e100130436f6c6c656374696f6e49640001206974656d5f6e66741001144e6674496400011c626173655f696410011842617365496400011c736c6f745f6964100118536c6f7449640002004845717569707061626c65735570646174656408011c626173655f696410011842617365496400011c736c6f745f6964100118536c6f74496400030044426173654973737565724368616e6765640c01286f6c645f697373756572000130543a3a4163636f756e7449640001286e65775f697373756572000130543a3a4163636f756e74496400011c626173655f69641001184261736549640004000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a40c4070616c6c65745f726d726b5f636f72651870616c6c6574144576656e7404045400014044436f6c6c656374696f6e43726561746564080118697373756572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000000244e66744d696e7465640c01146f776e6572a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000100244e46544275726e65640801146f776e6572000130543a3a4163636f756e7449640001186e66745f69641001144e667449640002004c436f6c6c656374696f6e44657374726f796564080118697373756572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640003001c4e465453656e7414011873656e646572000130543a3a4163636f756e744964000124726563697069656e74a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000144617070726f76616c5f7265717569726564ac0110626f6f6c0004002c4e4654416363657074656410011873656e646572000130543a3a4163636f756e744964000124726563697069656e74a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640005002c4e465452656a65637465640c011873656e646572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000600344973737565724368616e6765640c01286f6c645f697373756572000130543a3a4163636f756e7449640001286e65775f697373756572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640007002c50726f7065727479536574100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001306d617962655f6e66745f6964b001344f7074696f6e3c4e667449643e00010c6b6579b401344b65794c696d69744f663c543e00011476616c7565b8013c56616c75654c696d69744f663c543e0008003c50726f706572747952656d6f7665640c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001306d617962655f6e66745f6964b001344f7074696f6e3c4e667449643e00010c6b6579b401344b65794c696d69744f663c543e00090040436f6c6c656374696f6e4c6f636b6564080118697373756572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000a00345265736f7572636541646465640801186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000b00405265736f7572636541636365707465640801186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000c003c5265736f7572636552656d6f76616c0801186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000d005c5265736f7572636552656d6f76616c41636365707465640801186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000e002c5072696f72697479536574080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000f000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a80c2c726d726b5f7472616974730c6e6674744163636f756e7449644f72436f6c6c656374696f6e4e66745475706c6504244163636f756e74496401000108244163636f756e74496404000001244163636f756e74496400000054436f6c6c656374696f6e416e644e66745475706c650800100130436f6c6c656374696f6e496400001001144e6674496400010000ac0000050000b004184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000b4102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e0000b8102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e0000bc0c4870616c6c65745f726d726b5f6d61726b65741870616c6c6574144576656e7404045400011c44546f6b656e5072696365557064617465641001146f776e6572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001147072696365c001504f7074696f6e3c42616c616e63654f663c543e3e0000048454686520707269636520666f72206120746f6b656e20776173207570646174656424546f6b656e536f6c641401146f776e6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000114707269636518013042616c616e63654f663c543e00010474546f6b656e2077617320736f6c6420746f2061206e6577206f776e65722c546f6b656e4c69737465641001146f776e6572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000114707269636518013042616c616e63654f663c543e0002046c546f6b656e206c6973746564206f6e204d61726b6574706c61636534546f6b656e556e6c69737465640c01146f776e6572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400030474546f6b656e20756e6c6973746564206f6e204d61726b6574706c6163652c4f66666572506c6163656410011c6f666665726572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000114707269636518013042616c616e63654f663c543e0004046c4f666665722077617320706c61636564206f6e206120746f6b656e384f6666657257697468647261776e0c011873656e646572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640005044c4f66666572207761732077697468647261776e344f6666657241636365707465641001146f776e6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000604484f66666572207761732061636365707465640499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909c004184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000c40c3870616c6c65745f756e69717565731870616c6c6574144576656e740804540004490001601c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e1846726f7a656e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640006045c536f6d6520606974656d60207761732066726f7a656e2e18546861776564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640007045c536f6d6520606974656d6020776173207468617765642e40436f6c6c656374696f6e46726f7a656e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400080474536f6d652060636f6c6c656374696f6e60207761732066726f7a656e2e40436f6c6c656374696f6e546861776564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173207468617765642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e744964000b0470546865206d616e6167656d656e74207465616d206368616e6765642e40417070726f7665645472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e444974656d5374617475734368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000e041101412060636f6c6c656374696f6e602068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011064617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c000f04b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001004b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e2c4d65746164617461536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c001104984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e3c4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001204984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73cc01385665633c543a3a4974656d49643e001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e30417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579b4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565b80174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e00140405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c65617265640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579b4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0015040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6eb0015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001604c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001704a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909c8102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e0000cc0000021000d00c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7258013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7258013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c749001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909d408306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000d80000022400dc000002e000e000000408101000e408306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ee8014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65ec016473705f72756e74696d653a3a52756e74696d65537472696e670000e80000061000ec0000050200f00c306672616d655f73797374656d1870616c6c65741043616c6c0404540001242866696c6c5f626c6f636b040114726174696ff4011c50657262696c6c00000405014120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e1872656d61726b04011872656d61726b28011c5665633c75383e000114684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e002823203c7765696768743e202d20604f283129602c23203c2f7765696768743e387365745f686561705f7061676573040114706167657320010c753634000204f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646528011c5665633c75383e0003306453657420746865206e65772072756e74696d6520636f64652e002823203c7765696768743e31012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f64656045012d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e60207768696368206973342020657870656e73697665292e842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e4d0154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c7920746869732069732076657279b8657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2c23203c2f7765696768743e5c7365745f636f64655f776974686f75745f636865636b73040110636f646528011c5665633c75383e000424190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e002823203c7765696768743e8c2d20604f2843296020776865726520604360206c656e677468206f662060636f646560842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e550154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c48626c6f636b2e2023203c2f7765696768743e2c7365745f73746f726167650401146974656d73f801345665633c4b657956616c75653e0005046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973010101205665633c4b65793e000604744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697828010c4b657900011c7375626b65797310010c75333200071011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b28011c5665633c75383e000804a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef40c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000f8000002fc00fc000004082828000101000002280005010c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373090101845065724469737061746368436c6173733c57656967687473506572436c6173733e000009010c346672616d655f737570706f72741c77656967687473405065724469737061746368436c617373040454010d01000c01186e6f726d616c0d0101045400012c6f7065726174696f6e616c0d010104540001246d616e6461746f72790d0101045400000d010c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963110101384f7074696f6e3c5765696768743e0001246d61785f746f74616c110101384f7074696f6e3c5765696768743e0001207265736572766564110101384f7074696f6e3c5765696768743e0000110104184f7074696f6e04045401200108104e6f6e6500000010536f6d65040020000001000015010c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178190101545065724469737061746368436c6173733c7533323e000019010c346672616d655f737570706f72741c77656967687473405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400001d010c346672616d655f737570706f72741c776569676874733c52756e74696d654462576569676874000008011072656164200118576569676874000114777269746520011857656967687400002101082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65ec013452756e74696d65537472696e67000124696d706c5f6e616d65ec013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069732501011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800002501040c436f77040454012901000400290100000029010000022d01002d01000004083101100031010000030800000008003501000005040039010c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c65743d01102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540124045300000400d801185665633c543e000041010c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f7745010124543a3a4d6f6d656e7400004054536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e002823203c7765696768743e31012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e450100000620004901102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454014d01045300000400550101185665633c543e00004d01104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004005101013c737232353531393a3a5075626c6963000051010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d000055010000024d01005901084873705f636f6e73656e7375735f736c6f747310536c6f740000040020010c75363400005d01083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300006101083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965736501016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564b001244f7074696f6e3c4e3e00006501102873705f72756e74696d651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401740453000004007001185665633c543e000069010c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f666d0101bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6699010140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f666d0101bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6699010140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d01084c73705f66696e616c6974795f6772616e6470614445717569766f636174696f6e50726f6f660804480124044e0110000801187365745f6964200114536574496400013065717569766f636174696f6e7101014845717569766f636174696f6e3c482c204e3e00007101084c73705f66696e616c6974795f6772616e6470613045717569766f636174696f6e0804480124044e011001081c507265766f7465040075010139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d697404008d010141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100007501084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c084964017804560179010453017d0100100130726f756e645f6e756d62657220010c7536340001206964656e74697479780108496400011466697273748901011828562c2053290001187365636f6e648901011828562c20532900007901084066696e616c6974795f6772616e6470611c507265766f74650804480124044e01100008012c7461726765745f68617368240104480001347461726765745f6e756d6265721001044e00007d010c4c73705f66696e616c6974795f6772616e6470610c617070245369676e61747572650000040081010148656432353531393a3a5369676e6174757265000081010c1c73705f636f72651c65643235353139245369676e617475726500000400850101205b75383b2036345d0000850100000340000000080089010000040879017d01008d01084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c084964017804560191010453017d0100100130726f756e645f6e756d62657220010c7536340001206964656e74697479780108496400011466697273749501011828562c2053290001187365636f6e649501011828562c20532900009101084066696e616c6974795f6772616e64706124507265636f6d6d69740804480124044e01100008012c7461726765745f68617368240104480001347461726765745f6e756d6265721001044e000095010000040891017d01009901081c73705f636f726510566f6964000100009d010c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909a101102873705f72756e74696d651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a501045300000400ad0101185665633c543e0000a501083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964310101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73a901011c526561736f6e730000a901083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000ad01000002a50100b101102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401b501045300000400b90101185665633c543e0000b501083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720131011c42616c616e6365011800080108696431010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000b901000002b50100bd01083c70616c6c65745f62616c616e6365732052656c65617365730001081856315f305f300000001856325f305f3000010000c1010c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d1010128543a3a42616c616e6365000064d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e61012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e2c7365745f62616c616e63650c010c77686fc501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001206e65775f66726565d1010128543a3a42616c616e63650001306e65775f7265736572766564d1010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d1010128543a3a42616c616e63650002184d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e2823203c7765696768743e4d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e4c7472616e736665725f6b6565705f616c69766508011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d1010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001286b6565705f616c697665ac0110626f6f6c00044405015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fc820206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e2023203c7765696768743e39012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e302020233c2f7765696768743e3c666f7263655f756e7265736572766508010c77686fc501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec5010c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780194011408496404000001244163636f756e74496400000014496e6465780400c90101304163636f756e74496e6465780001000c526177040028011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400cd0101205b75383b2032305d00040000c9010000069400cd01000003140000000800d1010000061800d5010c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047442616c616e636520746f6f206c6f7720746f2073656e642076616c7565484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909d9010c3473705f61726974686d657469632c66697865645f706f696e742446697865645531323800000400180110753132380000dd01086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000e1010c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000028350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e547375646f5f756e636865636b65645f77656967687408011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000118776569676874200118576569676874000128350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292ecc2d2054686520776569676874206f6620746869732063616c6c20697320646566696e6564206279207468652063616c6c65722e2c23203c2f7765696768743e1c7365745f6b657904010c6e6577c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650002285d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e402d204f6e65204442206368616e67652e2c23203c2f7765696768743e1c7375646f5f617308010c77686fc501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e00032c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5010858726d726b5f7375627374726174655f72756e74696d651043616c6c00012c1853797374656d0400f001ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400410101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c4772616e6470610400690101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0004002042616c616e6365730400c10101b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000500105375646f0400e10101a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0007003854656d706c6174654d6f64756c650400e90101cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54656d706c6174654d6f64756c652c2052756e74696d653e00080024526d726b45717569700400ed0101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526d726b45717569702c2052756e74696d653e00090020526d726b436f72650400210201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526d726b436f72652c2052756e74696d653e000a0028526d726b4d61726b657404005d0201bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526d726b4d61726b65742c2052756e74696d653e000b001c556e69717565730400610201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c556e69717565732c2052756e74696d653e000c001c5574696c69747904006d0201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e000d0000e9010c3c70616c6c65745f74656d706c6174651870616c6c65741043616c6c04045400010830646f5f736f6d657468696e67040124736f6d657468696e6710010c7533320000085901416e206578616d706c6520646973706174636861626c6520746861742074616b657320612073696e676c65732076616c7565206173206120706172616d657465722c20777269746573207468652076616c756520746f4d0173746f7261676520616e6420656d69747320616e206576656e742e20546869732066756e6374696f6e206d75737420626520646973706174636865642062792061207369676e65642065787472696e7369632e2c63617573655f6572726f72000104d8416e206578616d706c6520646973706174636861626c652074686174206d6179207468726f77206120637573746f6d206572726f722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed010c4470616c6c65745f726d726b5f65717569701870616c6c65741043616c6c040454000118486368616e67655f626173655f69737375657208011c626173655f69641001184261736549640001286e65775f697373756572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650000186c4368616e67652074686520697373756572206f6620612042617365002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6ea02d2060626173655f6964603a20626173655f696420746f206368616e676520697373756572206f66842d20606e65775f697373756572603a20426173652773206e6577206973737565721465717569701401106974656de0015428436f6c6c656374696f6e49642c204e66744964290001206571756970706572e0015428436f6c6c656374696f6e49642c204e667449642900012c7265736f757263655f69641001285265736f75726365496400011062617365100118426173654964000110736c6f74100118536c6f7449640001281d014571756970732061206368696c64204e46542773207265736f7572636520746f206120706172656e74277320736c6f742c20696620616c6c2061726520617661696c61626c652e0901457175697070696e67206f7065726174696f6e7320617265206d61696e7461696e656420696e736964652074686520457175697070696e67732073746f726167652efd014d6f64656c6564206166746572205b657175697020696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f65717569702e6d6429002c506172616d65746572733a0d012d206f726967696e3a205468652063616c6c6572206f66207468652066756e6374696f6e2c206e6f74206e65636573736172696c7920616e797468696e6720656c7365802d206974656d3a204368696c64204e4654206265696e67206571756970706564c02d2065717569707065723a20506172656e74204e46542077686963682077696c6c20657175697020746865206974656d61012d20626173653a204944206f6620746865206261736520776869636820746865206974656d20616e64206571756970706572206d757374206561636820686176652061207265736f75726365207265666572656e63696e6761012d20736c6f743a204944206f662074686520736c6f7420776869636820746865206974656d20616e64206571756970706572206d757374206561636820686176652061207265736f75726365207265666572656e63696e671c756e65717569701001106974656de0015428436f6c6c656374696f6e49642c204e6674496429000128756e6571756970706572e0015428436f6c6c656374696f6e49642c204e667449642900011062617365100118426173654964000110736c6f74100118536c6f744964000238dc556e6571756970732061206368696c64204e46542773207265736f757263652066726f6d2069747320706172656e74277320736c6f742e5043616e206265207375636365737366756c2069665c2d204974656d2068617320626565656e206275726e6564fc2d204974656d20697320657175697070656420616e642065787472696e7369632063616c6c656420627920657175697070696e67206974656d206f776e6572f42d204974656d20697320657175697070656420616e642065787472696e7369632063616c6c6564206279206571756970706572204e4654206f776e65720901457175697070696e67206f7065726174696f6e7320617265206d61696e7461696e656420696e736964652074686520457175697070696e67732073746f726167652efd014d6f64656c6564206166746572205b657175697020696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f65717569702e6d6429002c506172616d65746572733a0d012d206f726967696e3a205468652063616c6c6572206f66207468652066756e6374696f6e2c206e6f74206e65636573736172696c7920616e797468696e6720656c7365882d206974656d3a204368696c64204e4654206265696e6720756e6571756970706564d02d20756e65717569707065723a20506172656e74204e46542077686963682077696c6c20756e657175697020746865206974656d61012d20626173653a204944206f6620746865206261736520776869636820746865206974656d20616e64206571756970706572206d757374206561636820686176652061207265736f75726365207265666572656e63696e6761012d20736c6f743a204944206f662074686520736c6f7420776869636820746865206974656d20616e64206571756970706572206d757374206561636820686176652061207265736f75726365207265666572656e63696e672865717569707061626c650c011c626173655f696410011842617365496400011c736c6f745f6964100118536c6f74496400012c65717569707061626c6573f10101390145717569707061626c654c6973743c426f756e6465645665633c436f6c6c656374696f6e49642c20543a3a0a4d6178436f6c6c656374696f6e7345717569707061626c65506572506172743e2c3e00032061015570646174657320746865206172726179206f6620436f6c6c656374696f6e7320616c6c6f77656420746f20626520657175697070656420746f2061204261736527732073706563696669656420536c6f7420506172742e25024d6f64656c6564206166746572205b65717569707061626c6520696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f65717569707061626c652e6d6429002c506172616d65746572733a01012d206f726967696e3a205468652063616c6c6572206f66207468652066756e6374696f6e2c206d75737420626520697373756572206f66207468652062617365e82d20626173655f69643a20546865204261736520636f6e7461696e696e672074686520536c6f74205061727420746f2062652075706461746564fc2d20706172745f69643a2054686520536c6f7420506172742077686f73652045717569707061626c65204c697374206973206265696e6720757064617465645d012d2065717569707061626c65733a20546865206c697374206f662065717569707061626c657320746861742077696c6c206f76657272696465207468652063757272656e74204571756970706161626c6573206c697374247468656d655f61646408011c626173655f69641001184261736549640001147468656d65f9010144426f756e6465645468656d654f663c543e0004345c416464732061205468656d6520746f206120426173652e15024d6f64656c6564206166746572205b7468656d6561646420696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f7468656d656164642e6d64299c5468656d6573206172652073746f72656420696e20746865205468656d65732073746f72616765050141205468656d65206e616d6564202264656661756c7422206973207265717569726564207072696f7220746f20616464696e67206f74686572205468656d65732e002c506172616d65746572733a01012d206f726967696e3a205468652063616c6c6572206f66207468652066756e6374696f6e2c206d75737420626520697373756572206f66207468652062617365d82d20626173655f69643a20546865204261736520636f6e7461696e696e6720746865205468656d6520746f20626520757064617465645d012d207468656d653a20546865205468656d6520746f2061646420746f2074686520426173652e202041205468656d65206861732061206e616d6520616e642070726f706572746965732c2077686963682061726520616e490120206172726179206f66205b6b65792c2076616c75652c20696e68657269745d2e20205468697320617272617920697320626f756e646564206279204d617850726f706572746965735065725468656d652ecc20202d206b65793a2061726269747261727920426f756e646564537472696e672c20646566696e656420627920636c69656e74d420202d2076616c75653a2061726269747261727920426f756e646564537472696e672c20646566696e656420627920636c69656e746820202d20696e68657269743a206f7074696f6e616c20626f6f6c2c6372656174655f626173650c0124626173655f74797065c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00011873796d626f6cc80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001147061727473090201d901426f756e6465645665633c50617274547970653c537472696e674c696d69744f663c543e2c20426f756e6465645665633c436f6c6c656374696f6e49642c20543a3a0a4d6178436f6c6c656374696f6e7345717569707061626c65506572506172743e2c3e2c20543a3a50617274734c696d69742c3e0005244c437265617465732061206e657720426173652ef5014d6f64656c6564206166746572205b6261736520696e746572616374696f6e5d2868747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d737065632f626c6f622f6d61737465722f7374616e64617264732f726d726b322e302e302f696e746572616374696f6e732f626173652e6d6429002c506172616d65746572733af02d206f726967696e3a2043616c6c65722c2077696c6c2062652061737369676e65642061732074686520697373756572206f662074686520426173658c2d20626173655f747970653a206d6564696120747970652c20652e672e20227376672209012d2073796d626f6c3a2061726269747261727920636c69656e742d63686f73656e2073796d626f6c2c20652e672e20226b616e617269615f7375706572626972642241012d2070617274733a206172726179206f6620466978656420616e6420536c6f7420706172747320636f6d706f73696e672074686520626173652c20636f6e66696e656420696e206c656e67746820627930202050617274734c696d6974042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef1010c2c726d726b5f74726169747310706172743845717569707061626c654c6973740454426f756e646564436f6c6c656374696f6e4c69737401f501010c0c416c6c00000014456d70747900010018437573746f6d0400f5010154426f756e646564436f6c6c656374696f6e4c69737400020000f501102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540110045300000400cc01185665633c543e0000f9010c2c726d726b5f747261697473147468656d65145468656d650834426f756e646564537472696e6701c858426f756e6465645468656d6550726f7065727469657301fd01000c01106e616d65c80134426f756e646564537472696e6700012870726f70657274696573fd010158426f756e6465645468656d6550726f7065727469657300011c696e6865726974ac0110626f6f6c0000fd01102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454010102045300000400050201185665633c543e000001020c2c726d726b5f747261697473147468656d65345468656d6550726f70657274790434426f756e646564537472696e6701c80008010c6b6579c80134426f756e646564537472696e6700011476616c7565c80134426f756e646564537472696e67000005020000020102000902102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454010d020453000004001d0201185665633c543e00000d020c2c726d726b5f74726169747310706172742050617274547970650834426f756e646564537472696e6701c854426f756e646564436f6c6c656374696f6e4c69737401f5010108244669786564506172740400110201604669786564506172743c426f756e646564537472696e673e00000020536c6f74506172740400150201b8536c6f74506172743c426f756e646564537472696e672c20426f756e646564436f6c6c656374696f6e4c6973743e0001000011020c2c726d726b5f7472616974731070617274244669786564506172740434426f756e646564537472696e6701c8000c010869641001185061727449640001047a1001185a496e64657800010c737263c80134426f756e646564537472696e67000015020c2c726d726b5f747261697473107061727420536c6f74506172740834426f756e646564537472696e6701c854426f756e646564436f6c6c656374696f6e4c69737401f50100100108696410011850617274496400012865717569707061626c65f101019445717569707061626c654c6973743c426f756e646564436f6c6c656374696f6e4c6973743e00010c737263190201544f7074696f6e3c426f756e646564537472696e673e0001047a1001185a496e6465780000190204184f7074696f6e04045401c80108104e6f6e6500000010536f6d650400c800000100001d020000020d020021020c4070616c6c65745f726d726b5f636f72651870616c6c65741043616c6c040454000148206d696e745f6e66742001146f776e65729801504f7074696f6e3c543a3a4163636f756e7449643e0001186e66745f69641001144e66744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000144726f79616c74795f726563697069656e749801504f7074696f6e3c543a3a4163636f756e7449643e00011c726f79616c74792502013c4f7074696f6e3c5065726d696c6c3e0001206d65746164617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001307472616e7366657261626c65ac0110626f6f6c0001247265736f75726365732d0201904f7074696f6e3c426f756e6465645265736f75726365496e666f547970654f663c543e3e000024a04d696e747320616e204e465420696e207468652073706563696669656420636f6c6c656374696f6e9c53657473206d6574616461746120616e642074686520726f79616c747920617474726962757465002c506172616d65746572733af02d2060636f6c6c656374696f6e5f6964603a2054686520636f6c6c656374696f6e206f662074686520617373657420746f206265206d696e7465642ed02d20606e66745f6964603a20546865206e66742076616c7565206f662074686520617373657420746f206265206d696e7465642e982d2060726563697069656e74603a205265636569766572206f662074686520726f79616c747901012d2060726f79616c7479603a205065726d696c6c616765207265776172642066726f6d206561636820747261646520666f722074686520526563697069656e74e42d20606d65746164617461603a2041726269747261727920646174612061626f757420616e206e66742c20652e672e20495046532068617368606d696e745f6e66745f6469726563746c795f746f5f6e66742001146f776e6572e0015428436f6c6c656374696f6e49642c204e66744964290001186e66745f69641001144e66744964000134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000144726f79616c74795f726563697069656e749801504f7074696f6e3c543a3a4163636f756e7449643e00011c726f79616c74792502013c4f7074696f6e3c5065726d696c6c3e0001206d65746164617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001307472616e7366657261626c65ac0110626f6f6c0001247265736f75726365732d0201904f7074696f6e3c426f756e6465645265736f75726365496e666f547970654f663c543e3e00012401014d696e747320616e204e465420696e207468652073706563696669656420636f6c6c656374696f6e206469726563746c7920746f20616e6f74686572204e46549c53657473206d6574616461746120616e642074686520726f79616c747920617474726962757465002c506172616d65746572733adc2d2060636f6c6c656374696f6e5f6964603a2054686520636c617373206f662074686520617373657420746f206265206d696e7465642ed02d20606e66745f6964603a20546865206e66742076616c7565206f662074686520617373657420746f206265206d696e7465642e982d2060726563697069656e74603a205265636569766572206f662074686520726f79616c747901012d2060726f79616c7479603a205065726d696c6c616765207265776172642066726f6d206561636820747261646520666f722074686520526563697069656e74e42d20606d65746164617461603a2041726269747261727920646174612061626f757420616e206e66742c20652e672e20495046532068617368446372656174655f636f6c6c656374696f6e0c01206d65746164617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00010c6d6178b0012c4f7074696f6e3c7533323e00011873796d626f6c55020170426f756e646564436f6c6c656374696f6e53796d626f6c4f663c543e0002044c437265617465206120636f6c6c656374696f6e206275726e5f6e66740c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001246d61785f6275726e7310010c753332000304206275726e206e66744864657374726f795f636f6c6c656374696f6e040134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640004044864657374726f7920636f6c6c656374696f6e1073656e640c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001246e65775f6f776e6572a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e00051c11015472616e73666572732061204e46542066726f6d20616e204163636f756e74206f72204e4654204120746f20616e6f74686572204163636f756e74206f72204e46542042002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6ef42d2060636f6c6c656374696f6e5f6964603a20636f6c6c656374696f6e206964206f6620746865206e667420746f206265207472616e73666572726564bc2d20606e66745f6964603a206e6674206964206f6620746865206e667420746f206265207472616e736665727265642d012d20606e65775f6f776e6572603a206e6577206f776e6572206f6620746865206e66742077686963682063616e2062652065697468657220616e206163636f756e74206f722061204e4654286163636570745f6e66740c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001246e65775f6f776e6572a801ac4163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c543a3a4163636f756e7449643e000620f44163636570747320616e204e46542073656e742066726f6d20616e6f74686572206163636f756e7420746f2073656c66206f72206f776e6564204e4654002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6ee82d2060636f6c6c656374696f6e5f6964603a20636f6c6c656374696f6e206964206f6620746865206e667420746f206265206163636570746564b02d20606e66745f6964603a206e6674206964206f6620746865206e667420746f20626520616363657074656451012d20606e65775f6f776e6572603a20656974686572206f726967696e2773206163636f756e74204944206f72206f726967696e2d6f776e6564204e46542c2077686963686576657220746865204e46542077617324202073656e7420746f2872656a6563745f6e6674080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000718f452656a6563747320616e204e46542073656e742066726f6d20616e6f74686572206163636f756e7420746f2073656c66206f72206f776e6564204e4654002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6ee82d2060636f6c6c656374696f6e5f6964603a20636f6c6c656374696f6e206964206f6620746865206e667420746f206265206163636570746564b02d20606e66745f6964603a206e6674206964206f6620746865206e667420746f206265206163636570746564606368616e67655f636f6c6c656374696f6e5f697373756572080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001286e65775f697373756572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000818844368616e67652074686520697373756572206f66206120636f6c6c656374696f6e002c506172616d65746572733a942d20606f726967696e603a2073656e646572206f6620746865207472616e73616374696f6efc2d2060636f6c6c656374696f6e5f6964603a20636f6c6c656374696f6e206964206f6620746865206e667420746f206368616e676520697373756572206f669c2d20606e65775f697373756572603a20436f6c6c656374696f6e2773206e657720697373756572307365745f70726f7065727479100134636f6c6c656374696f6e5f6964e80130436f6c6c656374696f6e49640001306d617962655f6e66745f6964b001344f7074696f6e3c4e667449643e00010c6b6579b401344b65794c696d69744f663c543e00011476616c7565b8013c56616c75654c696d69744f663c543e00090470736574206120637573746f6d2076616c7565206f6e20616e204e46543c6c6f636b5f636f6c6c656374696f6e040134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e4964000a043c6c6f636b20636f6c6c656374696f6e486164645f62617369635f7265736f75726365100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001207265736f757263654102017c42617369635265736f757263653c537472696e674c696d69744f663c543e3e00012c7265736f757263655f69641001285265736f757263654964000b0454437265617465206261736963207265736f757263655c6164645f636f6d706f7361626c655f7265736f75726365100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001207265736f757263654502012101436f6d706f7361626c655265736f757263653c537472696e674c696d69744f663c543e2c20426f756e6465645665633c5061727449642c20543a3a50617274734c696d69740a3e3e00012c7265736f757263655f69641001285265736f757263654964000c046843726561746520636f6d706f7361626c65207265736f75726365446164645f736c6f745f7265736f75726365100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001207265736f757263654d020178536c6f745265736f757263653c537472696e674c696d69744f663c543e3e00012c7265736f757263655f69641001285265736f757263654964000d045043726561746520736c6f74207265736f757263653c6163636570745f7265736f757263650c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000e04e061636365707420746865206164646974696f6e206f662061206e6577207265736f7572636520746f20616e206578697374696e67204e46543c72656d6f76655f7265736f757263650c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964000f043c72656d6f7665207265736f757263655c6163636570745f7265736f757263655f72656d6f76616c0c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400012c7265736f757263655f69641001285265736f757263654964001004cc616363657074207468652072656d6f76616c206f662061207265736f75726365206f6620616e206578697374696e67204e4654307365745f7072696f726974790c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640001287072696f726974696573590201a0426f756e6465645665633c5265736f7572636549642c20543a3a4d61785072696f7269746965733e001104a8736574206120646966666572656e74206f72646572206f66207265736f75726365207072696f72697479042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e250204184f7074696f6e0404540129020108104e6f6e6500000010536f6d6504002902000001000029020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c75333200002d0204184f7074696f6e0404540131020108104e6f6e6500000010536f6d650400310200000100003102102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454013502045300000400510201185665633c543e000035020c2c726d726b5f747261697473207265736f757263653c5265736f75726365496e666f4d696e0834426f756e646564537472696e6701c830426f756e64656450617274730139020008010869641001285265736f7572636549640001207265736f757263653d0201a85265736f7572636554797065733c426f756e646564537472696e672c20426f756e64656450617274733e00003902102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540110045300000400cc01185665633c543e00003d020c2c726d726b5f747261697473207265736f75726365345265736f7572636554797065730834426f756e646564537472696e6701c830426f756e6465645061727473013902010c14426173696304004102017042617369635265736f757263653c426f756e646564537472696e673e00000028436f6d706f7361626c650400450201bc436f6d706f7361626c655265736f757263653c426f756e646564537472696e672c20426f756e64656450617274733e00010010536c6f7404004d02016c536c6f745265736f757263653c426f756e646564537472696e673e0002000041020c2c726d726b5f747261697473207265736f757263653442617369635265736f757263650434426f756e646564537472696e6701c8000401206d65746164617461c80134426f756e646564537472696e67000045020c2c726d726b5f747261697473207265736f7572636548436f6d706f7361626c655265736f757263650834426f756e646564537472696e6701c830426f756e646564506172747301390200100114706172747339020130426f756e6465645061727473000110626173651001184261736549640001206d65746164617461190201544f7074696f6e3c426f756e646564537472696e673e000110736c6f74490201604f7074696f6e3c284261736549642c20536c6f744964293e0000490204184f7074696f6e04045401e00108104e6f6e6500000010536f6d650400e000000100004d020c2c726d726b5f747261697473207265736f7572636530536c6f745265736f757263650434426f756e646564537472696e6701c8000c0110626173651001184261736549640001206d65746164617461190201544f7074696f6e3c426f756e646564537472696e673e000110736c6f74100118536c6f744964000051020000023502005502102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e00005902102873705f72756e74696d651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540110045300000400cc01185665633c543e00005d020c4870616c6c65745f726d726b5f6d61726b65741870616c6c65741043616c6c0404540001180c6275790c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000118616d6f756e74c001504f7074696f6e3c42616c616e63654f663c543e3e00002051014275792061206c6973746564204e46542e20456e73757265207468617420746865204e465420697320617661696c61626c6520666f7220707572636861736520616e6420686173206e6f7420726563656e746c79806265656e207075726368617365642c2073656e742c206f72206275726e65642e002c506172616d65746572733ab0092d20606f726967696e60202d204163636f756e74206f662074686520706f74656e7469616c206275796572c8092d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e465490092d20606e66745f696460202d204e4654206964206f662074686520524d524b204e4654e0092d2060616d6f756e7460202d204f7074696f6e616c20707269636520617420776869636820627579657220707572636861736564206174106c697374100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000118616d6f756e7418013042616c616e63654f663c543e00011c65787069726573b001584f7074696f6e3c543a3a426c6f636b4e756d6265723e00012c4d014c697374206120524d524b204e4654206f6e20746865204d61726b6574706c61636520666f722070757263686173652e2041206c697374696e672063616e2062652063616e63656c6c65642c20616e6420697359016175746f6d61746963616c6c7920636f6e736964657265642063616e63656c6c6564207768656e2061206062757960206973206578656375746564206f6e20746f70206f66206120676976656e206c697374696e672e5501416e204e465420746861742068617320616e6f74686572204e465420617320697473206f776e65722043414e4e4f54206265206c69737465642e20416e204e4654206f776e65642062792061204e4654206d757374c066697273742062652073656e7420746f20616e206163636f756e74206265666f7265206265696e67206c69737465642e002c506172616d65746572733aec092d20606f726967696e60202d204163636f756e74206f66206f776e6572206f662074686520524d524b204e465420746f206265206c6973746564c8092d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e465490092d20606e66745f696460202d204e4654206964206f662074686520524d524b204e46548c092d2060616d6f756e7460202d205072696365206f662074686520524d524b204e46540101092d20606578706972657360202d204f7074696f6e616c20426c6f636b4e756d62657220666f72207768656e20746865206c697374696e67206578706972657318756e6c697374080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640002182d01556e6c697374206120524d524b204e4654206f6e20746865204d61726b6574706c61636520616e642072656d6f76652066726f6d2073746f7261676520696e20604c697374696e6773602e002c506172616d65746572733ac42d20606f726967696e60202d204163636f756e74206f776e6572206f6620746865206c697374656420524d524b204e4654c42d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e46548c2d20606e66745f696460202d204e4654206964206f662074686520524d524b204e4654286d616b655f6f66666572100134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e66744964000118616d6f756e7418013042616c616e63654f663c543e00011c65787069726573b001584f7074696f6e3c543a3a426c6f636b4e756d6265723e00032459014d616b6520616e206f66666572206f6e206120524d524b204e465420666f722070757263686173652e20416e206f666665722063616e20626520736574207769746820616e2065787069726174696f6e207768657265e4746865206f666665722063616e206e6f206c6f6e6765722062652061636365707465642062792074686520524d524b204e4654206f776e6572002c506172616d65746572733aac2d20606f726967696e60202d204163636f756e74206f662074686520706f74656e7469616c206275796572c42d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e46548c2d20606e66745f696460202d204e4654206964206f662074686520524d524b204e4654882d2060616d6f756e7460202d205072696365206f662074686520524d524b204e4654a02d206065787069726174696f6e60202d2045787069726174696f6e206f6620746865206f666665723877697468647261775f6f66666572080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400041c5901576974686472617720616e206f66666572206f6e206120524d524b204e46542c20737563682074686174206974206973206e6f206c6f6e67657220617661696c61626c6520746f20626520616363657074656420627934746865204e4654206f776e6572002c506172616d65746572733adc2d20606f726967696e60202d204163636f756e7420746861742077616e747320746f207769746864726177207468656972206f66666572c42d2060636f6c6c656374696f6e5f696460202d20436f6c6c656374696f6e206964206f662074686520524d524b204e46548c2d20606e66745f696460202d204e4654206964206f662074686520524d524b204e4654306163636570745f6f666665720c0134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e6674496400011c6f666665726572000130543a3a4163636f756e744964000500042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e61020c3870616c6c65745f756e69717565731870616c6c65741043616c6c08045400044900016018637265617465080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011461646d696ec501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000040090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00ac604974656d4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a61012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e657720636f6c6c656374696f6e2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000130667265655f686f6c64696e67ac0110626f6f6c000144190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0049012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e6577206974656d2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e39012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c207375706572757365723420207065726d697373696f6e7321016f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c7769746e6573736502013844657374726f795769746e65737300023c9c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00645765696768743a20604f286e202b206d29602077686572653a542d20606e203d207769746e6573732e6974656d7360782d20606d203d207769746e6573732e6974656d5f6d657461646174617360682d206061203d207769746e6573732e6174747269627574657360106d696e740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500032ca04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e004101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ec82d20606974656d603a20546865206974656d2076616c7565206f6620746865206974656d20746f206265206d696e7465642ed82d206062656e6566696369617279603a2054686520696e697469616c206f776e6572206f6620746865206d696e746564206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012c636865636b5f6f776e6572690201ac4f7074696f6e3c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e0004345844657374726f7920612073696e676c65206974656d2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265206275726e65642e51012d2060636865636b5f6f776e6572603a2049662060536f6d6560207468656e20746865206f7065726174696f6e2077696c6c206661696c2077697468206057726f6e674f776e65726020756e6c657373207468657820206974656d206973206f776e656420627920746869732076616c75652e00b4456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e00385765696768743a20604f283129607c4d6f6465733a2060636865636b5f6f776e65722e69735f736f6d652829602e207472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500053cc04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642ec42d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146974656d73cc01385665633c543a3a4974656d49643e0006449852656576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f6620746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e2829296018667265657a65080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000728c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652066726f7a656e2eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000828a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207468617765642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f2831296044667265657a655f636f6c6c656374696f6e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000924fc446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e0064456d6974732060436f6c6c656374696f6e46726f7a656e602e00385765696768743a20604f283129603c746861775f636f6c6c656374696f6e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000a24dc52652d616c6c6f7720756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265207468617765642e0064456d6974732060436f6c6c656374696f6e546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011461646d696ec501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011c667265657a6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000c30d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000d2c1501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e15012d20606974656d603a20546865206974656d206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001506d617962655f636865636b5f64656c6567617465690201ac4f7074696f6e3c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e000e40110143616e63656c20746865207072696f7220617070726f76616c20666f7220746865207472616e73666572206f6620616e206974656d20627920612064656c65676174652e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3bfc2d20605369676e656460207769746820746865207369676e6572206265696e67207468652041646d696e206f66207468652060636f6c6c656374696f6e603be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e0d012d20606974656d603a20546865206974656d206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e51012d20606d617962655f636865636b5f64656c6567617465603a2049662060536f6d65602077696c6c20656e7375726520746861742074686520676976656e206163636f756e7420697320746865206f6e6520746fb020207768696368207065726d697373696f6e206f66207472616e736665722069732064656c6567617465642e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296044666f7263655f6974656d5f7374617475731c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118697373756572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011461646d696ec501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011c667265657a6572c501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000130667265655f686f6c64696e67ac0110626f6f6c00012469735f66726f7a656eac0110626f6f6c000f4094416c746572207468652061747472696275746573206f66206120676976656e206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00ac2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2e982d20606f776e6572603a20546865206e6577204f776e6572206f662074686973206974656d2ea02d2060697373756572603a20546865206e657720497373756572206f662074686973206974656d2e982d206061646d696e603a20546865206e65772041646d696e206f662074686973206974656d2ea82d2060667265657a6572603a20546865206e657720467265657a6572206f662074686973206974656d2e51012d2060667265655f686f6c64696e67603a20576865746865722061206465706f7369742069732074616b656e20666f7220686f6c64696e6720616e206974656d206f66207468697320636f6c6c656374696f6e2e39012d206069735f66726f7a656e603a2057686574686572207468697320636f6c6c656374696f6e2069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e0456d69747320604974656d5374617475734368616e67656460207769746820746865206964656e74697479206f6620746865206974656d2e00385765696768743a20604f28312960347365745f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579b4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565b80174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001044a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2901604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f6174747269627574650c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579b4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e001138b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d65746164617461100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c0012447453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640013347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011064617461c80178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c0014408853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400153090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6eb0015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001628110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c75333200172ce053657420746865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00e44e6f74653a20546869732066756e6374696f6e2063616e206f6e6c792073756363656564206f6e63652070657220636f6c6c656374696f6e2e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e65020c3870616c6c65745f756e69717565731474797065733844657374726f795769746e65737300000c01146974656d73e8010c7533320001386974656d5f6d6574616461746173e8010c75333200012861747472696275746573e8010c7533320000690204184f7074696f6e04045401c5010108104e6f6e6500000010536f6d650400c50100000100006d020c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011414626174636804011463616c6c73710201605665633c3c5420617320436f6e6669673e3a3a43616c6c3e00004c7c53656e642061206261746368206f662064697370617463682063616c6c732e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465783501010c75313600011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73710201605665633c3c5420617320436f6e6669673e3a3a43616c6c3e000238ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c64697370617463685f617308012461735f6f726967696e75020154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6ce5010160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000328c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292e1d012d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b20543a3a576569676874496e666f3a3a64697370617463685f617328292e2c23203c2f7765696768743e2c666f7263655f626174636804011463616c6c73710201605665633c3c5420617320436f6e6669673e3a3a43616c6c3e0004387c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7102000002e5010075020858726d726b5f7375627374726174655f72756e74696d65304f726967696e43616c6c65720001081873797374656d0400790201746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000010566f69640400990101110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640001000079020c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200007d020c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c657481020c3c70616c6c65745f74656d706c6174651870616c6c6574144572726f72040454000108244e6f6e6556616c7565000004884572726f72206e616d65732073686f756c642062652064657363726970746976652e3c53746f726167654f766572666c6f77000104f84572726f72732073686f756c6420686176652068656c7066756c20646f63756d656e746174696f6e206173736f6369617465642077697468207468656d2e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090985020c2c726d726b5f74726169747310626173652042617365496e666f08244163636f756e744964010034426f756e646564537472696e6701c8000c01186973737565720001244163636f756e744964000124626173655f74797065c80134426f756e646564537472696e6700011873796d626f6cc80134426f756e646564537472696e67000089020000040ce01010008d020000040c10c8c80091020c4470616c6c65745f726d726b5f65717569701870616c6c6574144572726f720404540001583c5065726d697373696f6e4572726f720000003c4974656d446f65736e7445786973740001004c4571756970706572446f65736e744578697374000200444e6f417661696c61626c65426173654964000300444e6f417661696c61626c65506172744964000400484d7573744265446972656374506172656e740005003c50617274446f65736e7445786973740006003c42617365446f65736e7445786973740007004843616e7445717569704669786564506172740008007c4e6f5265736f75726365466f725468697342617365466f756e644f6e4e66740009005c436f6c6c656374696f6e4e6f7445717569707061626c65000a00744974656d4861734e6f5265736f75726365546f45717569705468657265000b005c4e6f45717569707061626c654f6e466978656450617274000c00584e6565647344656661756c745468656d654669727374000d004c4974656d416c72656164794571756970706564000e004c536c6f74416c72656164794571756970706564000f003c536c6f744e6f74457175697070656400100030556e6b6e6f776e4572726f7200110058457863656564734d617850617274735065724261736500120044546f6f4d616e7950726f706572746965730013003c4974656d4e6f74457175697070656400140094556e65717569707065724d7573744f776e4569746865724974656d4f72457175697070657200150004ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090995020c2c726d726b5f74726169747328636f6c6c656374696f6e38436f6c6c656374696f6e496e666f0c34426f756e646564537472696e6701c834426f756e64656453796d626f6c015502244163636f756e7449640100001401186973737565720001244163636f756e7449640001206d65746164617461c80134426f756e646564537472696e6700010c6d6178b0012c4f7074696f6e3c7533323e00011873796d626f6c55020134426f756e64656453796d626f6c0001286e6674735f636f756e7410010c753332000099020c2c726d726b5f7472616974730c6e66741c4e6674496e666f0c244163636f756e744964010034526f79616c7479416d6f756e7401290234426f756e646564537472696e6701c8001801146f776e6572a801a04163636f756e7449644f72436f6c6c656374696f6e4e66745475706c653c4163636f756e7449643e00011c726f79616c74799d0201b44f7074696f6e3c526f79616c7479496e666f3c4163636f756e7449642c20526f79616c7479416d6f756e743e3e0001206d65746164617461c80134426f756e646564537472696e670001206571756970706564ac0110626f6f6c00011c70656e64696e67ac0110626f6f6c0001307472616e7366657261626c65ac0110626f6f6c00009d0204184f7074696f6e04045401a1020108104e6f6e6500000010536f6d650400a1020000010000a1020c2c726d726b5f7472616974730c6e66742c526f79616c7479496e666f08244163636f756e744964010034526f79616c7479416d6f756e7401290200080124726563697069656e740001244163636f756e744964000118616d6f756e7429020134526f79616c7479416d6f756e740000a5020000040c10101000a90200000408e0e000ad020c2c726d726b5f747261697473207265736f75726365305265736f75726365496e666f0834426f756e646564537472696e6701c830426f756e64656450617274730139020010010869641001285265736f7572636549640001207265736f757263653d0201a85265736f7572636554797065733c426f756e646564537472696e672c20426f756e64656450617274733e00011c70656e64696e67ac0110626f6f6c00013c70656e64696e675f72656d6f76616cac0110626f6f6c0000b10200000414101010101000b5020000040c10b0b400b90200000408bd02c10200bd020c2c726d726b5f7472616974730c6e6674204e66744368696c640000080134636f6c6c656374696f6e5f6964100130436f6c6c656374696f6e49640001186e66745f69641001144e667449640000c102082c5068616e746f6d54797065307068616e746f6d5f7479706504045401c502000400c902000000c5020c2c726d726b5f7472616974732070726f70657274793050726f7065727479496e666f0828426f756e6465644b657901b430426f756e64656456616c756501b80008010c6b6579b40128426f756e6465644b657900011476616c7565b80130426f756e64656456616c75650000c90200000300000000c50200cd020c4070616c6c65745f726d726b5f636f72651870616c6c6574144572726f72040454000170244e6f6e6556616c7565000004884572726f72206e616d65732073686f756c642062652064657363726970746976652e3c53746f726167654f766572666c6f77000104f84572726f72732073686f756c6420686176652068656c7066756c20646f63756d656e746174696f6e206173736f6369617465642077697468207468656d2e1c546f6f4c6f6e670002005c4e6f417661696c61626c65436f6c6c656374696f6e4964000300544e6f417661696c61626c655265736f757263654964000400384d657461646174614e6f745365740005003c526563697069656e744e6f74536574000600404e6f417661696c61626c654e66744964000700284e6f74496e52616e676500080034526f79616c74794e6f7453657400090044436f6c6c656374696f6e556e6b6e6f776e000a00304e6f5065726d697373696f6e000b00244e6f5769746e657373000c0048436f6c6c656374696f6e4e6f74456d707479000d0058436f6c6c656374696f6e46756c6c4f724c6f636b6564000e007043616e6e6f7453656e64546f44657363656e64656e744f7253656c66000f00545265736f75726365416c7265616479457869737473001000404e6674416c726561647945786973747300110034456d7074795265736f7572636500120044546f6f4d616e79526563757273696f6e730013002c4e667449734c6f636b65640014005c43616e6e6f744163636570744e6f6e4f776e65644e66740015005c43616e6e6f7452656a6563744e6f6e4f776e65644e66740016006443616e6e6f7452656a6563744e6f6e50656e64696e674e66740017004c5265736f75726365446f65736e744578697374001800485265736f757263654e6f7450656e64696e67001904d0416363657074696e672061207265736f757263652074686174206973206e6f742070656e64696e672073686f756c64206661696c3c4e6f6e5472616e7366657261626c65001a005843616e6e6f7453656e6445717569707065644974656d001b0004ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909d1020c4870616c6c65745f726d726b5f6d61726b6574147479706573204c697374496e666f0c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d6265720110000c01246c69737465645f62790001244163636f756e744964000118616d6f756e7418011c42616c616e636500011c65787069726573b0014c4f7074696f6e3c426c6f636b4e756d6265723e0000d50200000408e00000d9020c4870616c6c65745f726d726b5f6d61726b6574147479706573144f666665720c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d6265720110000c01146d616b65720001244163636f756e744964000118616d6f756e7418011c42616c616e636500011c65787069726573b0014c4f7074696f6e3c426c6f636b4e756d6265723e0000dd020c4870616c6c65745f726d726b5f6d61726b65741870616c6c6574144572726f7204045400013c304e6f5065726d697373696f6e000004bc4e6f207065726d697373696f6e7320666f72206163636f756e7420746f20696e7465726163742077697468204e46543c546f6b656e4e6f74466f7253616c6500010458546f6b656e2063616e6e6f7420626520626f756768744c43616e6e6f7457697468647261774f66666572000204a84f6666657220616c726561647920616363657074656420616e642063616e6e6f742077697468647261774443616e6e6f74556e6c697374546f6b656e000304e443616e6e6f7420756e6c697374204e46542061732069742068617320616c7265616479206265656e20756e6c6973746564206f7220736f6c645443616e6e6f744f666665724f6e4f776e546f6b656e0004048c43616e6e6f74206d616b65206f66666572206f6e204e4654206f6e206f776e204e46544443616e6e6f744275794f776e546f6b656e0005049043616e6e6f7420627579204e4654207468617420697320616c7265616479206f776e656430556e6b6e6f776e4f66666572000604404f6666657220697320756e6b6e6f776e5c43616e6e6f744c6973744e66744f776e656442794e66740007047843616e6e6f74206c697374204e4654206f776e65642062792061204e465444546f6b656e446f65734e6f7445786973740008047843616e6e6f74206c6973742061206e6f6e2d6578697374696e67204e46542c4f66666572546f6f4c6f77000904bc4f666665722069732062656c6f7720746865204f666665724d696e696d756d416d6f756e74207468726573686f6c6438416c72656164794f666665726564000a04e04163636f756e742063616e6e6f74206f66666572206f6e2061204e465420616761696e207769746820616e20616374697665206f666665723c4f6666657248617345787069726564000b04c44163636570746564206f6666657220686173206578706972656420616e642063616e6e6f74206265206163636570746564444c697374696e6748617345787069726564000c04a04c697374696e6720686173206578706972656420616e642063616e6e6f7420626520626f756768746050726963654469666665727346726f6d4578706563746564000d04a8507269636520646966666572732066726f6d207768656e206062757960207761732065786563757465643c4e6f6e5472616e7366657261626c65000e04a44e6f7420706f737369626c6520746f206c697374206e6f6e2d7472616e7366657261626c65204e465404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909e1020c3870616c6c65745f756e697175657314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118002801146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000134746f74616c5f6465706f7369741801384465706f73697442616c616e6365000130667265655f686f6c64696e67ac0110626f6f6c0001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001286174747269627574657310010c75333200012469735f66726f7a656eac0110626f6f6c0000e5020000040c00101000e90200000408001000ed020c3870616c6c65745f756e69717565731474797065732c4974656d44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e744964000120617070726f7665649801444f7074696f6e3c4163636f756e7449643e00012469735f66726f7a656eac0110626f6f6c00011c6465706f7369741801384465706f73697442616c616e63650000f1020c3870616c6c65745f756e697175657314747970657348436f6c6c656374696f6e4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461c8016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c0000f5020c3870616c6c65745f756e6971756573147479706573304974656d4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461c8016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656eac0110626f6f6c0000f90200000408b81800fd020c3870616c6c65745f756e69717565731870616c6c6574144572726f7208045400044900013c304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e2857726f6e674f776e6572000304e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730004046c496e76616c6964207769746e657373206461746120676976656e2e14496e55736500050474546865206974656d20494420697320616c72656164792074616b656e2e1846726f7a656e00060484546865206974656d206f7220636f6c6c656374696f6e2069732066726f7a656e2e3457726f6e6744656c6567617465000704f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284e6f44656c6567617465000804785468657265206973206e6f2064656c656761746520617070726f7665642e28556e617070726f766564000904c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000a042501546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e657273686970206f662074686520636f6c6c656374696f6e2069732061636365707461626c652e184c6f636b6564000b044c546865206974656d206973206c6f636b65642e404d6178537570706c7952656163686564000c046c416c6c206974656d732068617665206265656e206d696e7465642e4c4d6178537570706c79416c7265616479536574000d0490546865206d617820737570706c792068617320616c7265616479206265656e207365742e444d6178537570706c79546f6f536d616c6c000e0441015468652070726f7669646564206d617820737570706c79206973206c65737320746f2074686520616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090901030c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909090503102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301c5011043616c6c01e501245369676e6174757265010903144578747261011903000400280000000903082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040081010148656432353531393a3a5369676e61747572650000001c5372323535313904000d030148737232353531393a3a5369676e617475726500010014456364736104001103014065636473613a3a5369676e6174757265000200000d030c1c73705f636f72651c73723235353139245369676e617475726500000400850101205b75383b2036345d000011030c1c73705f636f7265146563647361245369676e617475726500000400150301205b75383b2036355d0000150300000341000000080019030000041c1d03210325032903310335033903001d0310306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000210310306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000250310306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000290310306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004002d03010c45726100002d03102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000310310306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400e80120543a3a496e6465780000350310306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000003903086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400d101013042616c616e63654f663c543e00003d030858726d726b5f7375627374726174655f72756e74696d651c52756e74696d6500000000381853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c600000000000000000000000000000000000000000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510248000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510280400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401002c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301003c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040224dc0400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000e404000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000d4040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01f001481830426c6f636b5765696768747305018501e0d1a93e0100000000204aa9d101000090cd2405000000000170fae4a82e010000010098f73e5d01000001000000000000000090cd2405000000000170823713a30100000100204aa9d1010000010088526a7400000090cd24050000000000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746815013000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e2044625765696768741d014040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e2101d10238726d726b2d73756273747261746538726d726b2d7375627374726174650100000064000000010000002c643365445941c5cb01000000df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000dd718d5cc53262d401000000ab3c0572291feb8b01000000ed99c5acb25eedf503000000bc9d89904f5b923f0100000037c8bb1350a9a2a80100000001000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669783501082a0014a8205468652064657369676e61746564205353383520707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e013901006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c01003d0104000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701002020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0141010004344d696e696d756d506572696f642020e803000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021041757261011041757261082c417574686f726974696573010049010400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010059012000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000031c4772616e647061011c4772616e6470611814537461746501005d0104000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006101040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000e00400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010020200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405201004001059012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e016901016c04384d6178417574686f726974696573101020000000045c204d617820417574686f72697469657320696e20757365019d01042042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200a101040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200b101040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e3853746f7261676556657273696f6e0100bd0104000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e00a020546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e01c10101800c484578697374656e7469616c4465706f7369741840f401000000000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101000000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01d50105485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100d90140000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100dd0104000000018804604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e0006105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01e101018c00017d02073854656d706c6174654d6f64756c65013854656d706c6174654d6f64756c650424536f6d657468696e6700001004000001e901019c000181020824526d726b45717569700124526d726b4571756970181442617365730001040510850204000cd42053746f72657320426173657320696e666f20286973737565722c20626173655f747970652c2073796d626f6c2c20706172747329ec20544f444f2068747470733a2f2f6769746875622e636f6d2f726d726b2d7465616d2f726d726b2d7375627374726174652f6973737565732f3938f02044656c6574652050617274732066726f6d20426173657320696e666f2c2061732069742773206b65707420696e2050617274732073746f726167651450617274730001080505e00d0204000cb02053746f726573205061727473202865697468657220466978656450617274206f7220536c6f745061727429a8202d20536c6f74506172743a2069642c2065717569707061626c6520286c697374292c207372632c207a60202d204669786564506172743a2069642c207372632c207a284e6578744261736549640100101000000000048c2053746f7265732074686520696e6372656d656e74696e67204e657874426173654964284e6578745061727449640101040510101000000000048c2053746f7265732074686520696e6372656d656e74696e67204e65787450617274496428457175697070696e677300010c0202028902100400040d012053746f72657320457175697070696e677320696e666f20282865717569707065722c20626173652c20736c6f74292c2065717569707065645f7265736f7572636529185468656d657300010c0202028d02c804000415012053746f726573205468656d6520696e666f202828626173652c207468656d65206e616d652c2070726f7065727479206b6579292c2070726f70657274792076616c75652901ed0101a008544d617850726f706572746965735065725468656d6510106400000004d8204d6178696d756d20616c6c6f7765642050617274732028656974686572204669786564206f7220536c6f74292070657220426173657c4d6178436f6c6c656374696f6e7345717569707061626c655065725061727410106400000004cc204d6178696d756d206e756d626572206f662050726f7065727469657320616c6c6f77656420666f7220616e79205468656d650191020920526d726b436f72650120526d726b436f72652c3c436f6c6c656374696f6e496e6465780100101000000000002c436f6c6c656374696f6e7300010405109502040004602053746f72657320636f6c6c656374696f6e7320696e666f104e6674730001080505e09902040004402053746f726573206e667420696e666f285072696f72697469657300010c020202a50210040004542053746f726573207072696f7269747920696e666f204368696c6472656e0001080505a90294040004642053746f726573206e6674206368696c6472656e20696e666f245265736f757263657300010c020202a502ad02040004542053746f726573207265736f7572636520696e666f3c45717569707061626c65426173657300010c020202a5029404000cd02053746f72657320746865206578697374656e6365206f662061206261736520666f72206120706172746963756c6172204e4654dc205468697320697320706f70756c61746564206f6e20606164645f636f6d706f7361626c655f7265736f75726365602c20616e64206973e4207573656420696e2074686520726d726b2d65717569702070616c6c6574207768656e20657175697070696e672061207265736f757263652e3c45717569707061626c65536c6f74730001140202020202b10294040010dc2053746f72657320746865206578697374656e6365206f6620612042617365202b20536c6f7420666f72206120706172746963756c6172c4204e4654277320706172746963756c6172207265736f757263652e20205468697320697320706f70756c61746564206f6ecc20606164645f736c6f745f7265736f75726365602c20616e64206973207573656420696e2074686520726d726b2d6571756970882070616c6c6574207768656e20657175697070696e672061207265736f757263652e2850726f7065727469657300010c020202b502b8040004b4204172626974726172792070726f70657274696573202f206d65746164617461206f6620616e2061737365742e104c6f636b01010405e0ac04000438204c6f636b20666f72204e4654733044756d6d7953746f726167650000b9020400149c20546869732073746f72616765206973206e6f7420757365642062792074686520636861696e2ec4204974206973206e656564206f6e6c7920666f7220506f6c6b61646f744a532074797065732067656e65726174696f6e2e00d0205468652073746f726564207479706573206172652075736520696e207468652052504320696e74657266616365206f6e6c792c090120506f6c6b61646f744a5320776f6e27742067656e657261746520545320747970657320666f72207468656d20776974686f757420746869732073746f726167652e01210201a40c4c5265736f7572636553796d626f6c4c696d697410100a000000048c20546865206d6178696d756d207265736f757263652073796d626f6c206c656e6774682850617274734c696d697410101900000004cc20546865206d6178696d756d206e756d626572206f662070617274732065616368207265736f75726365206d61792068617665344d61785072696f72697469657310101900000004410120546865206d6178696d756d206e756d626572206f66207265736f757263657320746861742063616e20626520696e636c7564656420696e2061207365747072696f726974792065787472696e73696301cd020a28526d726b4d61726b65740128526d726b4d61726b657408284c69737465644e6674730001080202e0d102040004742053746f726573206c6973746564204e465420707269636520696e666f184f66666572730001080202d502d9020400046c2053746f726573206f66666572206f6e2061204e465420696e666f015d0201bc04484d696e696d756d4f66666572416d6f756e74184000e1f5050000000000000000000000000498204d696e696d756d206f6666657220616d6f756e7420617320612076616c6964206f6666657201dd020b1c556e6971756573011c556e69717565732414436c6173730001040210e102040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c020202e50294040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e30436c6173734163636f756e740001080202e9029404000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e1441737365740001080202e0ed02040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e3c436c6173734d657461646174614f660001040210f10204000468204d65746164617461206f66206120636f6c6c656374696f6e2e48496e7374616e63654d657461646174614f660001080202e0f50204000454204d65746164617461206f6620616e206974656d2e2441747472696275746500010c020202b502f902040004702041747472696275746573206f66206120636f6c6c656374696f6e2e4c436f6c6c656374696f6e4d6178537570706c79000104021010040004f0204b6565707320747261636b206f6620746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e206d6967687420686176652e01610201c42044436f6c6c656374696f6e4465706f736974184000a0724e1809000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f736974184000407a10f35a0000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f73697442617365184000a0724e180900000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000a0724e1809000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400010a5d4e8000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410108000000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410102000000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100001000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e01fd020c1c5574696c697479011c5574696c69747900016d0201d0044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e0101030d0503041c40436865636b5370656356657273696f6e1d031038436865636b547856657273696f6e21031030436865636b47656e6573697325032438436865636b4d6f7274616c69747929032428436865636b4e6f6e63653103942c436865636b576569676874350394604368617267655472616e73616374696f6e5061796d656e743903943d03","id":"1"} \ No newline at end of file diff --git a/tests/src/interfaces/registry.ts b/tests/src/interfaces/registry.ts index 3df6ba1d..19b6408a 100644 --- a/tests/src/interfaces/registry.ts +++ b/tests/src/interfaces/registry.ts @@ -1,124 +1,9 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { - FinalityGrandpaEquivocationPrecommit, - FinalityGrandpaEquivocationPrevote, - FinalityGrandpaPrecommit, - FinalityGrandpaPrevote, - FrameSupportDispatchRawOrigin, - FrameSupportTokensMiscBalanceStatus, - FrameSupportWeightsDispatchClass, - FrameSupportWeightsDispatchInfo, - FrameSupportWeightsPays, - FrameSupportWeightsPerDispatchClassU32, - FrameSupportWeightsPerDispatchClassU64, - FrameSupportWeightsPerDispatchClassWeightsPerClass, - FrameSupportWeightsRuntimeDbWeight, - FrameSystemAccountInfo, - FrameSystemCall, - FrameSystemError, - FrameSystemEvent, - FrameSystemEventRecord, - FrameSystemExtensionsCheckGenesis, - FrameSystemExtensionsCheckNonce, - FrameSystemExtensionsCheckSpecVersion, - FrameSystemExtensionsCheckTxVersion, - FrameSystemExtensionsCheckWeight, - FrameSystemLastRuntimeUpgradeInfo, - FrameSystemLimitsBlockLength, - FrameSystemLimitsBlockWeights, - FrameSystemLimitsWeightsPerClass, - FrameSystemPhase, - PalletBalancesAccountData, - PalletBalancesBalanceLock, - PalletBalancesCall, - PalletBalancesError, - PalletBalancesEvent, - PalletBalancesReasons, - PalletBalancesReleases, - PalletBalancesReserveData, - PalletGrandpaCall, - PalletGrandpaError, - PalletGrandpaEvent, - PalletGrandpaStoredPendingChange, - PalletGrandpaStoredState, - PalletRmrkCoreCall, - PalletRmrkCoreError, - PalletRmrkCoreEvent, - PalletRmrkEquipCall, - PalletRmrkEquipError, - PalletRmrkEquipEvent, - PalletRmrkMarketCall, - PalletRmrkMarketError, - PalletRmrkMarketEvent, - PalletRmrkMarketListInfo, - PalletRmrkMarketOffer, - PalletSudoCall, - PalletSudoError, - PalletSudoEvent, - PalletTemplateCall, - PalletTemplateError, - PalletTemplateEvent, - PalletTimestampCall, - PalletTransactionPaymentChargeTransactionPayment, - PalletTransactionPaymentEvent, - PalletTransactionPaymentReleases, - PalletUniquesCall, - PalletUniquesCollectionDetails, - PalletUniquesCollectionMetadata, - PalletUniquesDestroyWitness, - PalletUniquesError, - PalletUniquesEvent, - PalletUniquesItemDetails, - PalletUniquesItemMetadata, - PalletUtilityCall, - PalletUtilityError, - PalletUtilityEvent, - PhantomTypePhantomType, - RmrkSubstrateRuntimeOriginCaller, - RmrkSubstrateRuntimeRuntime, - RmrkTraitsBaseBaseInfo, - RmrkTraitsCollectionCollectionInfo, - RmrkTraitsNftAccountIdOrCollectionNftTuple, - RmrkTraitsNftNftChild, - RmrkTraitsNftNftInfo, - RmrkTraitsNftRoyaltyInfo, - RmrkTraitsPartEquippableList, - RmrkTraitsPartFixedPart, - RmrkTraitsPartPartType, - RmrkTraitsPartSlotPart, - RmrkTraitsPropertyPropertyInfo, - RmrkTraitsResourceBasicResource, - RmrkTraitsResourceComposableResource, - RmrkTraitsResourceResourceInfo, - RmrkTraitsResourceResourceTypes, - RmrkTraitsResourceSlotResource, - RmrkTraitsTheme, - RmrkTraitsThemeThemeProperty, - SpConsensusAuraSr25519AppSr25519Public, - SpCoreEcdsaSignature, - SpCoreEd25519Public, - SpCoreEd25519Signature, - SpCoreSr25519Public, - SpCoreSr25519Signature, - SpCoreVoid, - SpFinalityGrandpaAppPublic, - SpFinalityGrandpaAppSignature, - SpFinalityGrandpaEquivocation, - SpFinalityGrandpaEquivocationProof, - SpRuntimeArithmeticError, - SpRuntimeDigest, - SpRuntimeDigestDigestItem, - SpRuntimeDispatchError, - SpRuntimeModuleError, - SpRuntimeMultiSignature, - SpRuntimeTokenError, - SpRuntimeTransactionalError, - SpVersionRuntimeVersion, -} from "@polkadot/types/lookup"; +import type { FinalityGrandpaEquivocationPrecommit, FinalityGrandpaEquivocationPrevote, FinalityGrandpaPrecommit, FinalityGrandpaPrevote, FrameSupportDispatchRawOrigin, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletGrandpaCall, PalletGrandpaError, PalletGrandpaEvent, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletRmrkMarketCall, PalletRmrkMarketError, PalletRmrkMarketEvent, PalletRmrkMarketListInfo, PalletRmrkMarketOffer, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateCall, PalletTemplateError, PalletTemplateEvent, PalletTimestampCall, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletUniquesCall, PalletUniquesCollectionDetails, PalletUniquesCollectionMetadata, PalletUniquesDestroyWitness, PalletUniquesError, PalletUniquesEvent, PalletUniquesItemDetails, PalletUniquesItemMetadata, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PhantomTypePhantomType, RmrkSubstrateRuntimeOriginCaller, RmrkSubstrateRuntimeRuntime, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceInfoMin, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpConsensusAuraSr25519AppSr25519Public, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpFinalityGrandpaAppPublic, SpFinalityGrandpaAppSignature, SpFinalityGrandpaEquivocation, SpFinalityGrandpaEquivocationProof, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpVersionRuntimeVersion } from '@polkadot/types/lookup'; -declare module "@polkadot/types/types/registry" { +declare module '@polkadot/types/types/registry' { export interface InterfaceTypes { FinalityGrandpaEquivocationPrecommit: FinalityGrandpaEquivocationPrecommit; FinalityGrandpaEquivocationPrevote: FinalityGrandpaEquivocationPrevote; @@ -210,6 +95,7 @@ declare module "@polkadot/types/types/registry" { RmrkTraitsResourceBasicResource: RmrkTraitsResourceBasicResource; RmrkTraitsResourceComposableResource: RmrkTraitsResourceComposableResource; RmrkTraitsResourceResourceInfo: RmrkTraitsResourceResourceInfo; + RmrkTraitsResourceResourceInfoMin: RmrkTraitsResourceResourceInfoMin; RmrkTraitsResourceResourceTypes: RmrkTraitsResourceResourceTypes; RmrkTraitsResourceSlotResource: RmrkTraitsResourceSlotResource; RmrkTraitsTheme: RmrkTraitsTheme; diff --git a/tests/src/interfaces/rmrk/types.ts b/tests/src/interfaces/rmrk/types.ts index 04f8e62f..0ba96645 100644 --- a/tests/src/interfaces/rmrk/types.ts +++ b/tests/src/interfaces/rmrk/types.ts @@ -1,57 +1,25 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { - Bytes, - Compact, - Enum, - Null, - Option, - Result, - Struct, - Text, - U8aFixed, - Vec, - bool, - u128, - u16, - u32, - u64, - u8, -} from "@polkadot/types-codec"; -import type { ITuple } from "@polkadot/types-codec/types"; -import type { - AccountId32, - Call, - H256, - MultiAddress, - Perbill, - Permill, -} from "@polkadot/types/interfaces/runtime"; -import type { Event } from "@polkadot/types/interfaces/system"; +import type { Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; +import type { ITuple } from '@polkadot/types-codec/types'; +import type { AccountId32, Call, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime'; +import type { Event } from '@polkadot/types/interfaces/system'; /** @name FinalityGrandpaEquivocationPrecommit */ export interface FinalityGrandpaEquivocationPrecommit extends Struct { readonly roundNumber: u64; readonly identity: SpFinalityGrandpaAppPublic; - readonly first: ITuple< - [FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature] - >; - readonly second: ITuple< - [FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature] - >; + readonly first: ITuple<[FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature]>; + readonly second: ITuple<[FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature]>; } /** @name FinalityGrandpaEquivocationPrevote */ export interface FinalityGrandpaEquivocationPrevote extends Struct { readonly roundNumber: u64; readonly identity: SpFinalityGrandpaAppPublic; - readonly first: ITuple< - [FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature] - >; - readonly second: ITuple< - [FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature] - >; + readonly first: ITuple<[FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature]>; + readonly second: ITuple<[FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature]>; } /** @name FinalityGrandpaPrecommit */ @@ -72,14 +40,14 @@ export interface FrameSupportDispatchRawOrigin extends Enum { readonly isSigned: boolean; readonly asSigned: AccountId32; readonly isNone: boolean; - readonly type: "Root" | "Signed" | "None"; + readonly type: 'Root' | 'Signed' | 'None'; } /** @name FrameSupportTokensMiscBalanceStatus */ export interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; readonly isReserved: boolean; - readonly type: "Free" | "Reserved"; + readonly type: 'Free' | 'Reserved'; } /** @name FrameSupportWeightsDispatchClass */ @@ -87,7 +55,7 @@ export interface FrameSupportWeightsDispatchClass extends Enum { readonly isNormal: boolean; readonly isOperational: boolean; readonly isMandatory: boolean; - readonly type: "Normal" | "Operational" | "Mandatory"; + readonly type: 'Normal' | 'Operational' | 'Mandatory'; } /** @name FrameSupportWeightsDispatchInfo */ @@ -101,7 +69,7 @@ export interface FrameSupportWeightsDispatchInfo extends Struct { export interface FrameSupportWeightsPays extends Enum { readonly isYes: boolean; readonly isNo: boolean; - readonly type: "Yes" | "No"; + readonly type: 'Yes' | 'No'; } /** @name FrameSupportWeightsPerDispatchClassU32 */ @@ -119,8 +87,7 @@ export interface FrameSupportWeightsPerDispatchClassU64 extends Struct { } /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass */ -export interface FrameSupportWeightsPerDispatchClassWeightsPerClass - extends Struct { +export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; @@ -180,16 +147,7 @@ export interface FrameSystemCall extends Enum { readonly asRemarkWithEvent: { readonly remark: Bytes; } & Struct; - readonly type: - | "FillBlock" - | "Remark" - | "SetHeapPages" - | "SetCode" - | "SetCodeWithoutChecks" - | "SetStorage" - | "KillStorage" - | "KillPrefix" - | "RemarkWithEvent"; + readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } /** @name FrameSystemError */ @@ -200,13 +158,7 @@ export interface FrameSystemError extends Enum { readonly isNonDefaultComposite: boolean; readonly isNonZeroRefCount: boolean; readonly isCallFiltered: boolean; - readonly type: - | "InvalidSpecName" - | "SpecVersionNeedsToIncrease" - | "FailedToExtractRuntimeVersion" - | "NonDefaultComposite" - | "NonZeroRefCount" - | "CallFiltered"; + readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } /** @name FrameSystemEvent */ @@ -234,13 +186,7 @@ export interface FrameSystemEvent extends Enum { readonly sender: AccountId32; readonly hash_: H256; } & Struct; - readonly type: - | "ExtrinsicSuccess" - | "ExtrinsicFailed" - | "CodeUpdated" - | "NewAccount" - | "KilledAccount" - | "Remarked"; + readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked'; } /** @name FrameSystemEventRecord */ @@ -297,7 +243,7 @@ export interface FrameSystemPhase extends Enum { readonly asApplyExtrinsic: u32; readonly isFinalization: boolean; readonly isInitialization: boolean; - readonly type: "ApplyExtrinsic" | "Finalization" | "Initialization"; + readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } /** @name PalletBalancesAccountData */ @@ -349,13 +295,7 @@ export interface PalletBalancesCall extends Enum { readonly who: MultiAddress; readonly amount: u128; } & Struct; - readonly type: - | "Transfer" - | "SetBalance" - | "ForceTransfer" - | "TransferKeepAlive" - | "TransferAll" - | "ForceUnreserve"; + readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve'; } /** @name PalletBalancesError */ @@ -368,15 +308,7 @@ export interface PalletBalancesError extends Enum { readonly isExistingVestingSchedule: boolean; readonly isDeadAccount: boolean; readonly isTooManyReserves: boolean; - readonly type: - | "VestingBalance" - | "LiquidityRestrictions" - | "InsufficientBalance" - | "ExistentialDeposit" - | "KeepAlive" - | "ExistingVestingSchedule" - | "DeadAccount" - | "TooManyReserves"; + readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves'; } /** @name PalletBalancesEvent */ @@ -435,17 +367,7 @@ export interface PalletBalancesEvent extends Enum { readonly who: AccountId32; readonly amount: u128; } & Struct; - readonly type: - | "Endowed" - | "DustLost" - | "Transfer" - | "BalanceSet" - | "Reserved" - | "Unreserved" - | "ReserveRepatriated" - | "Deposit" - | "Withdraw" - | "Slashed"; + readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed'; } /** @name PalletBalancesReasons */ @@ -453,14 +375,14 @@ export interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; readonly isAll: boolean; - readonly type: "Fee" | "Misc" | "All"; + readonly type: 'Fee' | 'Misc' | 'All'; } /** @name PalletBalancesReleases */ export interface PalletBalancesReleases extends Enum { readonly isV100: boolean; readonly isV200: boolean; - readonly type: "V100" | "V200"; + readonly type: 'V100' | 'V200'; } /** @name PalletBalancesReserveData */ @@ -486,10 +408,7 @@ export interface PalletGrandpaCall extends Enum { readonly delay: u32; readonly bestFinalizedBlockNumber: u32; } & Struct; - readonly type: - | "ReportEquivocation" - | "ReportEquivocationUnsigned" - | "NoteStalled"; + readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'NoteStalled'; } /** @name PalletGrandpaError */ @@ -501,14 +420,7 @@ export interface PalletGrandpaError extends Enum { readonly isInvalidKeyOwnershipProof: boolean; readonly isInvalidEquivocationProof: boolean; readonly isDuplicateOffenceReport: boolean; - readonly type: - | "PauseFailed" - | "ResumeFailed" - | "ChangePending" - | "TooSoon" - | "InvalidKeyOwnershipProof" - | "InvalidEquivocationProof" - | "DuplicateOffenceReport"; + readonly type: 'PauseFailed' | 'ResumeFailed' | 'ChangePending' | 'TooSoon' | 'InvalidKeyOwnershipProof' | 'InvalidEquivocationProof' | 'DuplicateOffenceReport'; } /** @name PalletGrandpaEvent */ @@ -519,7 +431,7 @@ export interface PalletGrandpaEvent extends Enum { } & Struct; readonly isPaused: boolean; readonly isResumed: boolean; - readonly type: "NewAuthorities" | "Paused" | "Resumed"; + readonly type: 'NewAuthorities' | 'Paused' | 'Resumed'; } /** @name PalletGrandpaStoredPendingChange */ @@ -544,7 +456,7 @@ export interface PalletGrandpaStoredState extends Enum { readonly scheduledAt: u32; readonly delay: u32; } & Struct; - readonly type: "Live" | "PendingPause" | "Paused" | "PendingResume"; + readonly type: 'Live' | 'PendingPause' | 'Paused' | 'PendingResume'; } /** @name PalletRmrkCoreCall */ @@ -552,12 +464,24 @@ export interface PalletRmrkCoreCall extends Enum { readonly isMintNft: boolean; readonly asMintNft: { readonly owner: Option; + readonly nftId: u32; + readonly collectionId: u32; + readonly royaltyRecipient: Option; + readonly royalty: Option; + readonly metadata: Bytes; + readonly transferable: bool; + readonly resources: Option>; + } & Struct; + readonly isMintNftDirectlyToNft: boolean; + readonly asMintNftDirectlyToNft: { + readonly owner: ITuple<[u32, u32]>; + readonly nftId: u32; readonly collectionId: u32; readonly royaltyRecipient: Option; readonly royalty: Option; readonly metadata: Bytes; readonly transferable: bool; - readonly resources: Option>; + readonly resources: Option>; } & Struct; readonly isCreateCollection: boolean; readonly asCreateCollection: { @@ -613,18 +537,21 @@ export interface PalletRmrkCoreCall extends Enum { readonly collectionId: u32; readonly nftId: u32; readonly resource: RmrkTraitsResourceBasicResource; + readonly resourceId: u32; } & Struct; readonly isAddComposableResource: boolean; readonly asAddComposableResource: { readonly collectionId: u32; readonly nftId: u32; readonly resource: RmrkTraitsResourceComposableResource; + readonly resourceId: u32; } & Struct; readonly isAddSlotResource: boolean; readonly asAddSlotResource: { readonly collectionId: u32; readonly nftId: u32; readonly resource: RmrkTraitsResourceSlotResource; + readonly resourceId: u32; } & Struct; readonly isAcceptResource: boolean; readonly asAcceptResource: { @@ -650,24 +577,7 @@ export interface PalletRmrkCoreCall extends Enum { readonly nftId: u32; readonly priorities: Vec; } & Struct; - readonly type: - | "MintNft" - | "CreateCollection" - | "BurnNft" - | "DestroyCollection" - | "Send" - | "AcceptNft" - | "RejectNft" - | "ChangeCollectionIssuer" - | "SetProperty" - | "LockCollection" - | "AddBasicResource" - | "AddComposableResource" - | "AddSlotResource" - | "AcceptResource" - | "RemoveResource" - | "AcceptResourceRemoval" - | "SetPriority"; + readonly type: 'MintNft' | 'MintNftDirectlyToNft' | 'CreateCollection' | 'BurnNft' | 'DestroyCollection' | 'Send' | 'AcceptNft' | 'RejectNft' | 'ChangeCollectionIssuer' | 'SetProperty' | 'LockCollection' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'AcceptResource' | 'RemoveResource' | 'AcceptResourceRemoval' | 'SetPriority'; } /** @name PalletRmrkCoreError */ @@ -689,40 +599,18 @@ export interface PalletRmrkCoreError extends Enum { readonly isCollectionFullOrLocked: boolean; readonly isCannotSendToDescendentOrSelf: boolean; readonly isResourceAlreadyExists: boolean; + readonly isNftAlreadyExists: boolean; readonly isEmptyResource: boolean; readonly isTooManyRecursions: boolean; readonly isNftIsLocked: boolean; readonly isCannotAcceptNonOwnedNft: boolean; readonly isCannotRejectNonOwnedNft: boolean; + readonly isCannotRejectNonPendingNft: boolean; readonly isResourceDoesntExist: boolean; readonly isResourceNotPending: boolean; readonly isNonTransferable: boolean; - readonly type: - | "NoneValue" - | "StorageOverflow" - | "TooLong" - | "NoAvailableCollectionId" - | "NoAvailableResourceId" - | "MetadataNotSet" - | "RecipientNotSet" - | "NoAvailableNftId" - | "NotInRange" - | "RoyaltyNotSet" - | "CollectionUnknown" - | "NoPermission" - | "NoWitness" - | "CollectionNotEmpty" - | "CollectionFullOrLocked" - | "CannotSendToDescendentOrSelf" - | "ResourceAlreadyExists" - | "EmptyResource" - | "TooManyRecursions" - | "NftIsLocked" - | "CannotAcceptNonOwnedNft" - | "CannotRejectNonOwnedNft" - | "ResourceDoesntExist" - | "ResourceNotPending" - | "NonTransferable"; + readonly isCannotSendEquippedItem: boolean; + readonly type: 'NoneValue' | 'StorageOverflow' | 'TooLong' | 'NoAvailableCollectionId' | 'NoAvailableResourceId' | 'MetadataNotSet' | 'RecipientNotSet' | 'NoAvailableNftId' | 'NotInRange' | 'RoyaltyNotSet' | 'CollectionUnknown' | 'NoPermission' | 'NoWitness' | 'CollectionNotEmpty' | 'CollectionFullOrLocked' | 'CannotSendToDescendentOrSelf' | 'ResourceAlreadyExists' | 'NftAlreadyExists' | 'EmptyResource' | 'TooManyRecursions' | 'NftIsLocked' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'CannotRejectNonPendingNft' | 'ResourceDoesntExist' | 'ResourceNotPending' | 'NonTransferable' | 'CannotSendEquippedItem'; } /** @name PalletRmrkCoreEvent */ @@ -734,7 +622,7 @@ export interface PalletRmrkCoreEvent extends Enum { } & Struct; readonly isNftMinted: boolean; readonly asNftMinted: { - readonly owner: AccountId32; + readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple; readonly collectionId: u32; readonly nftId: u32; } & Struct; @@ -782,6 +670,12 @@ export interface PalletRmrkCoreEvent extends Enum { readonly key: Bytes; readonly value: Bytes; } & Struct; + readonly isPropertyRemoved: boolean; + readonly asPropertyRemoved: { + readonly collectionId: u32; + readonly maybeNftId: Option; + readonly key: Bytes; + } & Struct; readonly isCollectionLocked: boolean; readonly asCollectionLocked: { readonly issuer: AccountId32; @@ -812,22 +706,7 @@ export interface PalletRmrkCoreEvent extends Enum { readonly collectionId: u32; readonly nftId: u32; } & Struct; - readonly type: - | "CollectionCreated" - | "NftMinted" - | "NftBurned" - | "CollectionDestroyed" - | "NftSent" - | "NftAccepted" - | "NftRejected" - | "IssuerChanged" - | "PropertySet" - | "CollectionLocked" - | "ResourceAdded" - | "ResourceAccepted" - | "ResourceRemoval" - | "ResourceRemovalAccepted" - | "PrioritySet"; + readonly type: 'CollectionCreated' | 'NftMinted' | 'NftBurned' | 'CollectionDestroyed' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'IssuerChanged' | 'PropertySet' | 'PropertyRemoved' | 'CollectionLocked' | 'ResourceAdded' | 'ResourceAccepted' | 'ResourceRemoval' | 'ResourceRemovalAccepted' | 'PrioritySet'; } /** @name PalletRmrkEquipCall */ @@ -845,6 +724,13 @@ export interface PalletRmrkEquipCall extends Enum { readonly base: u32; readonly slot: u32; } & Struct; + readonly isUnequip: boolean; + readonly asUnequip: { + readonly item: ITuple<[u32, u32]>; + readonly unequipper: ITuple<[u32, u32]>; + readonly base: u32; + readonly slot: u32; + } & Struct; readonly isEquippable: boolean; readonly asEquippable: { readonly baseId: u32; @@ -862,12 +748,7 @@ export interface PalletRmrkEquipCall extends Enum { readonly symbol: Bytes; readonly parts: Vec; } & Struct; - readonly type: - | "ChangeBaseIssuer" - | "Equip" - | "Equippable" - | "ThemeAdd" - | "CreateBase"; + readonly type: 'ChangeBaseIssuer' | 'Equip' | 'Unequip' | 'Equippable' | 'ThemeAdd' | 'CreateBase'; } /** @name PalletRmrkEquipError */ @@ -886,29 +767,15 @@ export interface PalletRmrkEquipError extends Enum { readonly isItemHasNoResourceToEquipThere: boolean; readonly isNoEquippableOnFixedPart: boolean; readonly isNeedsDefaultThemeFirst: boolean; - readonly isAlreadyEquipped: boolean; + readonly isItemAlreadyEquipped: boolean; + readonly isSlotAlreadyEquipped: boolean; + readonly isSlotNotEquipped: boolean; readonly isUnknownError: boolean; readonly isExceedsMaxPartsPerBase: boolean; readonly isTooManyProperties: boolean; - readonly type: - | "PermissionError" - | "ItemDoesntExist" - | "EquipperDoesntExist" - | "NoAvailableBaseId" - | "NoAvailablePartId" - | "MustBeDirectParent" - | "PartDoesntExist" - | "BaseDoesntExist" - | "CantEquipFixedPart" - | "NoResourceForThisBaseFoundOnNft" - | "CollectionNotEquippable" - | "ItemHasNoResourceToEquipThere" - | "NoEquippableOnFixedPart" - | "NeedsDefaultThemeFirst" - | "AlreadyEquipped" - | "UnknownError" - | "ExceedsMaxPartsPerBase" - | "TooManyProperties"; + readonly isItemNotEquipped: boolean; + readonly isUnequipperMustOwnEitherItemOrEquipper: boolean; + readonly type: 'PermissionError' | 'ItemDoesntExist' | 'EquipperDoesntExist' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'MustBeDirectParent' | 'PartDoesntExist' | 'BaseDoesntExist' | 'CantEquipFixedPart' | 'NoResourceForThisBaseFoundOnNft' | 'CollectionNotEquippable' | 'ItemHasNoResourceToEquipThere' | 'NoEquippableOnFixedPart' | 'NeedsDefaultThemeFirst' | 'ItemAlreadyEquipped' | 'SlotAlreadyEquipped' | 'SlotNotEquipped' | 'UnknownError' | 'ExceedsMaxPartsPerBase' | 'TooManyProperties' | 'ItemNotEquipped' | 'UnequipperMustOwnEitherItemOrEquipper'; } /** @name PalletRmrkEquipEvent */ @@ -943,12 +810,7 @@ export interface PalletRmrkEquipEvent extends Enum { readonly newIssuer: AccountId32; readonly baseId: u32; } & Struct; - readonly type: - | "BaseCreated" - | "SlotEquipped" - | "SlotUnequipped" - | "EquippablesUpdated" - | "BaseIssuerChanged"; + readonly type: 'BaseCreated' | 'SlotEquipped' | 'SlotUnequipped' | 'EquippablesUpdated' | 'BaseIssuerChanged'; } /** @name PalletRmrkMarketCall */ @@ -989,13 +851,7 @@ export interface PalletRmrkMarketCall extends Enum { readonly nftId: u32; readonly offerer: AccountId32; } & Struct; - readonly type: - | "Buy" - | "List" - | "Unlist" - | "MakeOffer" - | "WithdrawOffer" - | "AcceptOffer"; + readonly type: 'Buy' | 'List' | 'Unlist' | 'MakeOffer' | 'WithdrawOffer' | 'AcceptOffer'; } /** @name PalletRmrkMarketError */ @@ -1015,22 +871,7 @@ export interface PalletRmrkMarketError extends Enum { readonly isListingHasExpired: boolean; readonly isPriceDiffersFromExpected: boolean; readonly isNonTransferable: boolean; - readonly type: - | "NoPermission" - | "TokenNotForSale" - | "CannotWithdrawOffer" - | "CannotUnlistToken" - | "CannotOfferOnOwnToken" - | "CannotBuyOwnToken" - | "UnknownOffer" - | "CannotListNftOwnedByNft" - | "TokenDoesNotExist" - | "OfferTooLow" - | "AlreadyOffered" - | "OfferHasExpired" - | "ListingHasExpired" - | "PriceDiffersFromExpected" - | "NonTransferable"; + readonly type: 'NoPermission' | 'TokenNotForSale' | 'CannotWithdrawOffer' | 'CannotUnlistToken' | 'CannotOfferOnOwnToken' | 'CannotBuyOwnToken' | 'UnknownOffer' | 'CannotListNftOwnedByNft' | 'TokenDoesNotExist' | 'OfferTooLow' | 'AlreadyOffered' | 'OfferHasExpired' | 'ListingHasExpired' | 'PriceDiffersFromExpected' | 'NonTransferable'; } /** @name PalletRmrkMarketEvent */ @@ -1083,14 +924,7 @@ export interface PalletRmrkMarketEvent extends Enum { readonly collectionId: u32; readonly nftId: u32; } & Struct; - readonly type: - | "TokenPriceUpdated" - | "TokenSold" - | "TokenListed" - | "TokenUnlisted" - | "OfferPlaced" - | "OfferWithdrawn" - | "OfferAccepted"; + readonly type: 'TokenPriceUpdated' | 'TokenSold' | 'TokenListed' | 'TokenUnlisted' | 'OfferPlaced' | 'OfferWithdrawn' | 'OfferAccepted'; } /** @name PalletRmrkMarketListInfo */ @@ -1127,13 +961,13 @@ export interface PalletSudoCall extends Enum { readonly who: MultiAddress; readonly call: Call; } & Struct; - readonly type: "Sudo" | "SudoUncheckedWeight" | "SetKey" | "SudoAs"; + readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs'; } /** @name PalletSudoError */ export interface PalletSudoError extends Enum { readonly isRequireSudo: boolean; - readonly type: "RequireSudo"; + readonly type: 'RequireSudo'; } /** @name PalletSudoEvent */ @@ -1150,7 +984,7 @@ export interface PalletSudoEvent extends Enum { readonly asSudoAsDone: { readonly sudoResult: Result; } & Struct; - readonly type: "Sudid" | "KeyChanged" | "SudoAsDone"; + readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone'; } /** @name PalletTemplateCall */ @@ -1160,21 +994,21 @@ export interface PalletTemplateCall extends Enum { readonly something: u32; } & Struct; readonly isCauseError: boolean; - readonly type: "DoSomething" | "CauseError"; + readonly type: 'DoSomething' | 'CauseError'; } /** @name PalletTemplateError */ export interface PalletTemplateError extends Enum { readonly isNoneValue: boolean; readonly isStorageOverflow: boolean; - readonly type: "NoneValue" | "StorageOverflow"; + readonly type: 'NoneValue' | 'StorageOverflow'; } /** @name PalletTemplateEvent */ export interface PalletTemplateEvent extends Enum { readonly isSomethingStored: boolean; readonly asSomethingStored: ITuple<[u32, AccountId32]>; - readonly type: "SomethingStored"; + readonly type: 'SomethingStored'; } /** @name PalletTimestampCall */ @@ -1183,18 +1017,28 @@ export interface PalletTimestampCall extends Enum { readonly asSet: { readonly now: Compact; } & Struct; - readonly type: "Set"; + readonly type: 'Set'; } /** @name PalletTransactionPaymentChargeTransactionPayment */ -export interface PalletTransactionPaymentChargeTransactionPayment - extends Compact {} +export interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} + +/** @name PalletTransactionPaymentEvent */ +export interface PalletTransactionPaymentEvent extends Enum { + readonly isTransactionFeePaid: boolean; + readonly asTransactionFeePaid: { + readonly who: AccountId32; + readonly actualFee: u128; + readonly tip: u128; + } & Struct; + readonly type: 'TransactionFeePaid'; +} /** @name PalletTransactionPaymentReleases */ export interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; - readonly type: "V1Ancient" | "V2"; + readonly type: 'V1Ancient' | 'V2'; } /** @name PalletUniquesCall */ @@ -1334,31 +1178,7 @@ export interface PalletUniquesCall extends Enum { readonly collection: u32; readonly maxSupply: u32; } & Struct; - readonly type: - | "Create" - | "ForceCreate" - | "Destroy" - | "Mint" - | "Burn" - | "Transfer" - | "Redeposit" - | "Freeze" - | "Thaw" - | "FreezeCollection" - | "ThawCollection" - | "TransferOwnership" - | "SetTeam" - | "ApproveTransfer" - | "CancelApproval" - | "ForceItemStatus" - | "SetAttribute" - | "ClearAttribute" - | "SetMetadata" - | "ClearMetadata" - | "SetCollectionMetadata" - | "ClearCollectionMetadata" - | "SetAcceptOwnership" - | "SetCollectionMaxSupply"; + readonly type: 'Create' | 'ForceCreate' | 'Destroy' | 'Mint' | 'Burn' | 'Transfer' | 'Redeposit' | 'Freeze' | 'Thaw' | 'FreezeCollection' | 'ThawCollection' | 'TransferOwnership' | 'SetTeam' | 'ApproveTransfer' | 'CancelApproval' | 'ForceItemStatus' | 'SetAttribute' | 'ClearAttribute' | 'SetMetadata' | 'ClearMetadata' | 'SetCollectionMetadata' | 'ClearCollectionMetadata' | 'SetAcceptOwnership' | 'SetCollectionMaxSupply'; } /** @name PalletUniquesCollectionDetails */ @@ -1406,22 +1226,7 @@ export interface PalletUniquesError extends Enum { readonly isMaxSupplyReached: boolean; readonly isMaxSupplyAlreadySet: boolean; readonly isMaxSupplyTooSmall: boolean; - readonly type: - | "NoPermission" - | "UnknownCollection" - | "AlreadyExists" - | "WrongOwner" - | "BadWitness" - | "InUse" - | "Frozen" - | "WrongDelegate" - | "NoDelegate" - | "Unapproved" - | "Unaccepted" - | "Locked" - | "MaxSupplyReached" - | "MaxSupplyAlreadySet" - | "MaxSupplyTooSmall"; + readonly type: 'NoPermission' | 'UnknownCollection' | 'AlreadyExists' | 'WrongOwner' | 'BadWitness' | 'InUse' | 'Frozen' | 'WrongDelegate' | 'NoDelegate' | 'Unapproved' | 'Unaccepted' | 'Locked' | 'MaxSupplyReached' | 'MaxSupplyAlreadySet' | 'MaxSupplyTooSmall'; } /** @name PalletUniquesEvent */ @@ -1558,31 +1363,7 @@ export interface PalletUniquesEvent extends Enum { readonly collection: u32; readonly maxSupply: u32; } & Struct; - readonly type: - | "Created" - | "ForceCreated" - | "Destroyed" - | "Issued" - | "Transferred" - | "Burned" - | "Frozen" - | "Thawed" - | "CollectionFrozen" - | "CollectionThawed" - | "OwnerChanged" - | "TeamChanged" - | "ApprovedTransfer" - | "ApprovalCancelled" - | "ItemStatusChanged" - | "CollectionMetadataSet" - | "CollectionMetadataCleared" - | "MetadataSet" - | "MetadataCleared" - | "Redeposited" - | "AttributeSet" - | "AttributeCleared" - | "OwnershipAcceptanceChanged" - | "CollectionMaxSupplySet"; + readonly type: 'Created' | 'ForceCreated' | 'Destroyed' | 'Issued' | 'Transferred' | 'Burned' | 'Frozen' | 'Thawed' | 'CollectionFrozen' | 'CollectionThawed' | 'OwnerChanged' | 'TeamChanged' | 'ApprovedTransfer' | 'ApprovalCancelled' | 'ItemStatusChanged' | 'CollectionMetadataSet' | 'CollectionMetadataCleared' | 'MetadataSet' | 'MetadataCleared' | 'Redeposited' | 'AttributeSet' | 'AttributeCleared' | 'OwnershipAcceptanceChanged' | 'CollectionMaxSupplySet'; } /** @name PalletUniquesItemDetails */ @@ -1624,18 +1405,13 @@ export interface PalletUtilityCall extends Enum { readonly asForceBatch: { readonly calls: Vec; } & Struct; - readonly type: - | "Batch" - | "AsDerivative" - | "BatchAll" - | "DispatchAs" - | "ForceBatch"; + readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch'; } /** @name PalletUtilityError */ export interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; - readonly type: "TooManyCalls"; + readonly type: 'TooManyCalls'; } /** @name PalletUtilityEvent */ @@ -1656,17 +1432,11 @@ export interface PalletUtilityEvent extends Enum { readonly asDispatchedAs: { readonly result: Result; } & Struct; - readonly type: - | "BatchInterrupted" - | "BatchCompleted" - | "BatchCompletedWithErrors" - | "ItemCompleted" - | "ItemFailed" - | "DispatchedAs"; + readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs'; } /** @name PhantomTypePhantomType */ -export interface PhantomTypePhantomType extends Vec {} +export interface PhantomTypePhantomType extends Vec {} /** @name RmrkSubstrateRuntimeOriginCaller */ export interface RmrkSubstrateRuntimeOriginCaller extends Enum { @@ -1674,7 +1444,7 @@ export interface RmrkSubstrateRuntimeOriginCaller extends Enum { readonly asSystem: FrameSupportDispatchRawOrigin; readonly isVoid: boolean; readonly asVoid: SpCoreVoid; - readonly type: "System" | "Void"; + readonly type: 'System' | 'Void'; } /** @name RmrkSubstrateRuntimeRuntime */ @@ -1702,7 +1472,7 @@ export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum { readonly asAccountId: AccountId32; readonly isCollectionAndNftTuple: boolean; readonly asCollectionAndNftTuple: ITuple<[u32, u32]>; - readonly type: "AccountId" | "CollectionAndNftTuple"; + readonly type: 'AccountId' | 'CollectionAndNftTuple'; } /** @name RmrkTraitsNftNftChild */ @@ -1733,7 +1503,7 @@ export interface RmrkTraitsPartEquippableList extends Enum { readonly isEmpty: boolean; readonly isCustom: boolean; readonly asCustom: Vec; - readonly type: "All" | "Empty" | "Custom"; + readonly type: 'All' | 'Empty' | 'Custom'; } /** @name RmrkTraitsPartFixedPart */ @@ -1749,7 +1519,7 @@ export interface RmrkTraitsPartPartType extends Enum { readonly asFixedPart: RmrkTraitsPartFixedPart; readonly isSlotPart: boolean; readonly asSlotPart: RmrkTraitsPartSlotPart; - readonly type: "FixedPart" | "SlotPart"; + readonly type: 'FixedPart' | 'SlotPart'; } /** @name RmrkTraitsPartSlotPart */ @@ -1768,7 +1538,7 @@ export interface RmrkTraitsPropertyPropertyInfo extends Struct { /** @name RmrkTraitsResourceBasicResource */ export interface RmrkTraitsResourceBasicResource extends Struct { - readonly metadata: Option; + readonly metadata: Bytes; } /** @name RmrkTraitsResourceComposableResource */ @@ -1787,6 +1557,12 @@ export interface RmrkTraitsResourceResourceInfo extends Struct { readonly pendingRemoval: bool; } +/** @name RmrkTraitsResourceResourceInfoMin */ +export interface RmrkTraitsResourceResourceInfoMin extends Struct { + readonly id: u32; + readonly resource: RmrkTraitsResourceResourceTypes; +} + /** @name RmrkTraitsResourceResourceTypes */ export interface RmrkTraitsResourceResourceTypes extends Enum { readonly isBasic: boolean; @@ -1795,7 +1571,7 @@ export interface RmrkTraitsResourceResourceTypes extends Enum { readonly asComposable: RmrkTraitsResourceComposableResource; readonly isSlot: boolean; readonly asSlot: RmrkTraitsResourceSlotResource; - readonly type: "Basic" | "Composable" | "Slot"; + readonly type: 'Basic' | 'Composable' | 'Slot'; } /** @name RmrkTraitsResourceSlotResource */ @@ -1819,8 +1595,7 @@ export interface RmrkTraitsThemeThemeProperty extends Struct { } /** @name SpConsensusAuraSr25519AppSr25519Public */ -export interface SpConsensusAuraSr25519AppSr25519Public - extends SpCoreSr25519Public {} +export interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {} /** @name SpCoreEcdsaSignature */ export interface SpCoreEcdsaSignature extends U8aFixed {} @@ -1852,7 +1627,7 @@ export interface SpFinalityGrandpaEquivocation extends Enum { readonly asPrevote: FinalityGrandpaEquivocationPrevote; readonly isPrecommit: boolean; readonly asPrecommit: FinalityGrandpaEquivocationPrecommit; - readonly type: "Prevote" | "Precommit"; + readonly type: 'Prevote' | 'Precommit'; } /** @name SpFinalityGrandpaEquivocationProof */ @@ -1866,7 +1641,7 @@ export interface SpRuntimeArithmeticError extends Enum { readonly isUnderflow: boolean; readonly isOverflow: boolean; readonly isDivisionByZero: boolean; - readonly type: "Underflow" | "Overflow" | "DivisionByZero"; + readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero'; } /** @name SpRuntimeDigest */ @@ -1885,12 +1660,7 @@ export interface SpRuntimeDigestDigestItem extends Enum { readonly isPreRuntime: boolean; readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>; readonly isRuntimeEnvironmentUpdated: boolean; - readonly type: - | "Other" - | "Consensus" - | "Seal" - | "PreRuntime" - | "RuntimeEnvironmentUpdated"; + readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated'; } /** @name SpRuntimeDispatchError */ @@ -1909,17 +1679,7 @@ export interface SpRuntimeDispatchError extends Enum { readonly asArithmetic: SpRuntimeArithmeticError; readonly isTransactional: boolean; readonly asTransactional: SpRuntimeTransactionalError; - readonly type: - | "Other" - | "CannotLookup" - | "BadOrigin" - | "Module" - | "ConsumerRemaining" - | "NoProviders" - | "TooManyConsumers" - | "Token" - | "Arithmetic" - | "Transactional"; + readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional'; } /** @name SpRuntimeModuleError */ @@ -1936,7 +1696,7 @@ export interface SpRuntimeMultiSignature extends Enum { readonly asSr25519: SpCoreSr25519Signature; readonly isEcdsa: boolean; readonly asEcdsa: SpCoreEcdsaSignature; - readonly type: "Ed25519" | "Sr25519" | "Ecdsa"; + readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } /** @name SpRuntimeTokenError */ @@ -1948,21 +1708,14 @@ export interface SpRuntimeTokenError extends Enum { readonly isUnknownAsset: boolean; readonly isFrozen: boolean; readonly isUnsupported: boolean; - readonly type: - | "NoFunds" - | "WouldDie" - | "BelowMinimum" - | "CannotCreate" - | "UnknownAsset" - | "Frozen" - | "Unsupported"; + readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported'; } /** @name SpRuntimeTransactionalError */ export interface SpRuntimeTransactionalError extends Enum { readonly isLimitReached: boolean; readonly isNoLayer: boolean; - readonly type: "LimitReached" | "NoLayer"; + readonly type: 'LimitReached' | 'NoLayer'; } /** @name SpVersionRuntimeVersion */ @@ -1977,4 +1730,4 @@ export interface SpVersionRuntimeVersion extends Struct { readonly stateVersion: u8; } -export type PHANTOM_RMRK = "rmrk"; +export type PHANTOM_RMRK = 'rmrk'; diff --git a/tests/src/interfaces/types-lookup.ts b/tests/src/interfaces/types-lookup.ts index 4fd2dac2..da29dce0 100644 --- a/tests/src/interfaces/types-lookup.ts +++ b/tests/src/interfaces/types-lookup.ts @@ -1,35 +1,11 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -declare module "@polkadot/types/lookup" { - import type { - Bytes, - Compact, - Enum, - Null, - Option, - Result, - Struct, - Text, - U8aFixed, - Vec, - bool, - u128, - u16, - u32, - u64, - u8, - } from "@polkadot/types-codec"; - import type { ITuple } from "@polkadot/types-codec/types"; - import type { - AccountId32, - Call, - H256, - MultiAddress, - Perbill, - Permill, - } from "@polkadot/types/interfaces/runtime"; - import type { Event } from "@polkadot/types/interfaces/system"; +declare module '@polkadot/types/lookup' { + import type { Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; + import type { ITuple } from '@polkadot/types-codec/types'; + import type { AccountId32, Call, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime'; + import type { Event } from '@polkadot/types/interfaces/system'; /** @name FrameSystemAccountInfo (3) */ export interface FrameSystemAccountInfo extends Struct { @@ -71,12 +47,7 @@ declare module "@polkadot/types/lookup" { readonly isPreRuntime: boolean; readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>; readonly isRuntimeEnvironmentUpdated: boolean; - readonly type: - | "Other" - | "Consensus" - | "Seal" - | "PreRuntime" - | "RuntimeEnvironmentUpdated"; + readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated'; } /** @name FrameSystemEventRecord (16) */ @@ -111,13 +82,7 @@ declare module "@polkadot/types/lookup" { readonly sender: AccountId32; readonly hash_: H256; } & Struct; - readonly type: - | "ExtrinsicSuccess" - | "ExtrinsicFailed" - | "CodeUpdated" - | "NewAccount" - | "KilledAccount" - | "Remarked"; + readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked'; } /** @name FrameSupportWeightsDispatchInfo (19) */ @@ -132,14 +97,14 @@ declare module "@polkadot/types/lookup" { readonly isNormal: boolean; readonly isOperational: boolean; readonly isMandatory: boolean; - readonly type: "Normal" | "Operational" | "Mandatory"; + readonly type: 'Normal' | 'Operational' | 'Mandatory'; } /** @name FrameSupportWeightsPays (21) */ export interface FrameSupportWeightsPays extends Enum { readonly isYes: boolean; readonly isNo: boolean; - readonly type: "Yes" | "No"; + readonly type: 'Yes' | 'No'; } /** @name SpRuntimeDispatchError (22) */ @@ -158,17 +123,7 @@ declare module "@polkadot/types/lookup" { readonly asArithmetic: SpRuntimeArithmeticError; readonly isTransactional: boolean; readonly asTransactional: SpRuntimeTransactionalError; - readonly type: - | "Other" - | "CannotLookup" - | "BadOrigin" - | "Module" - | "ConsumerRemaining" - | "NoProviders" - | "TooManyConsumers" - | "Token" - | "Arithmetic" - | "Transactional"; + readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional'; } /** @name SpRuntimeModuleError (23) */ @@ -186,14 +141,7 @@ declare module "@polkadot/types/lookup" { readonly isUnknownAsset: boolean; readonly isFrozen: boolean; readonly isUnsupported: boolean; - readonly type: - | "NoFunds" - | "WouldDie" - | "BelowMinimum" - | "CannotCreate" - | "UnknownAsset" - | "Frozen" - | "Unsupported"; + readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported'; } /** @name SpRuntimeArithmeticError (25) */ @@ -201,14 +149,14 @@ declare module "@polkadot/types/lookup" { readonly isUnderflow: boolean; readonly isOverflow: boolean; readonly isDivisionByZero: boolean; - readonly type: "Underflow" | "Overflow" | "DivisionByZero"; + readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero'; } /** @name SpRuntimeTransactionalError (26) */ export interface SpRuntimeTransactionalError extends Enum { readonly isLimitReached: boolean; readonly isNoLayer: boolean; - readonly type: "LimitReached" | "NoLayer"; + readonly type: 'LimitReached' | 'NoLayer'; } /** @name PalletGrandpaEvent (27) */ @@ -219,7 +167,7 @@ declare module "@polkadot/types/lookup" { } & Struct; readonly isPaused: boolean; readonly isResumed: boolean; - readonly type: "NewAuthorities" | "Paused" | "Resumed"; + readonly type: 'NewAuthorities' | 'Paused' | 'Resumed'; } /** @name SpFinalityGrandpaAppPublic (30) */ @@ -284,24 +232,14 @@ declare module "@polkadot/types/lookup" { readonly who: AccountId32; readonly amount: u128; } & Struct; - readonly type: - | "Endowed" - | "DustLost" - | "Transfer" - | "BalanceSet" - | "Reserved" - | "Unreserved" - | "ReserveRepatriated" - | "Deposit" - | "Withdraw" - | "Slashed"; + readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed'; } /** @name FrameSupportTokensMiscBalanceStatus (33) */ export interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; readonly isReserved: boolean; - readonly type: "Free" | "Reserved"; + readonly type: 'Free' | 'Reserved'; } /** @name PalletTransactionPaymentEvent (34) */ @@ -312,7 +250,7 @@ declare module "@polkadot/types/lookup" { readonly actualFee: u128; readonly tip: u128; } & Struct; - readonly type: "TransactionFeePaid"; + readonly type: 'TransactionFeePaid'; } /** @name PalletSudoEvent (35) */ @@ -329,14 +267,14 @@ declare module "@polkadot/types/lookup" { readonly asSudoAsDone: { readonly sudoResult: Result; } & Struct; - readonly type: "Sudid" | "KeyChanged" | "SudoAsDone"; + readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone'; } /** @name PalletTemplateEvent (39) */ export interface PalletTemplateEvent extends Enum { readonly isSomethingStored: boolean; readonly asSomethingStored: ITuple<[u32, AccountId32]>; - readonly type: "SomethingStored"; + readonly type: 'SomethingStored'; } /** @name PalletRmrkEquipEvent (40) */ @@ -371,12 +309,7 @@ declare module "@polkadot/types/lookup" { readonly newIssuer: AccountId32; readonly baseId: u32; } & Struct; - readonly type: - | "BaseCreated" - | "SlotEquipped" - | "SlotUnequipped" - | "EquippablesUpdated" - | "BaseIssuerChanged"; + readonly type: 'BaseCreated' | 'SlotEquipped' | 'SlotUnequipped' | 'EquippablesUpdated' | 'BaseIssuerChanged'; } /** @name PalletRmrkCoreEvent (41) */ @@ -436,6 +369,12 @@ declare module "@polkadot/types/lookup" { readonly key: Bytes; readonly value: Bytes; } & Struct; + readonly isPropertyRemoved: boolean; + readonly asPropertyRemoved: { + readonly collectionId: u32; + readonly maybeNftId: Option; + readonly key: Bytes; + } & Struct; readonly isCollectionLocked: boolean; readonly asCollectionLocked: { readonly issuer: AccountId32; @@ -466,22 +405,7 @@ declare module "@polkadot/types/lookup" { readonly collectionId: u32; readonly nftId: u32; } & Struct; - readonly type: - | "CollectionCreated" - | "NftMinted" - | "NftBurned" - | "CollectionDestroyed" - | "NftSent" - | "NftAccepted" - | "NftRejected" - | "IssuerChanged" - | "PropertySet" - | "CollectionLocked" - | "ResourceAdded" - | "ResourceAccepted" - | "ResourceRemoval" - | "ResourceRemovalAccepted" - | "PrioritySet"; + readonly type: 'CollectionCreated' | 'NftMinted' | 'NftBurned' | 'CollectionDestroyed' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'IssuerChanged' | 'PropertySet' | 'PropertyRemoved' | 'CollectionLocked' | 'ResourceAdded' | 'ResourceAccepted' | 'ResourceRemoval' | 'ResourceRemovalAccepted' | 'PrioritySet'; } /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (42) */ @@ -490,7 +414,7 @@ declare module "@polkadot/types/lookup" { readonly asAccountId: AccountId32; readonly isCollectionAndNftTuple: boolean; readonly asCollectionAndNftTuple: ITuple<[u32, u32]>; - readonly type: "AccountId" | "CollectionAndNftTuple"; + readonly type: 'AccountId' | 'CollectionAndNftTuple'; } /** @name PalletRmrkMarketEvent (47) */ @@ -543,14 +467,7 @@ declare module "@polkadot/types/lookup" { readonly collectionId: u32; readonly nftId: u32; } & Struct; - readonly type: - | "TokenPriceUpdated" - | "TokenSold" - | "TokenListed" - | "TokenUnlisted" - | "OfferPlaced" - | "OfferWithdrawn" - | "OfferAccepted"; + readonly type: 'TokenPriceUpdated' | 'TokenSold' | 'TokenListed' | 'TokenUnlisted' | 'OfferPlaced' | 'OfferWithdrawn' | 'OfferAccepted'; } /** @name PalletUniquesEvent (49) */ @@ -687,31 +604,7 @@ declare module "@polkadot/types/lookup" { readonly collection: u32; readonly maxSupply: u32; } & Struct; - readonly type: - | "Created" - | "ForceCreated" - | "Destroyed" - | "Issued" - | "Transferred" - | "Burned" - | "Frozen" - | "Thawed" - | "CollectionFrozen" - | "CollectionThawed" - | "OwnerChanged" - | "TeamChanged" - | "ApprovedTransfer" - | "ApprovalCancelled" - | "ItemStatusChanged" - | "CollectionMetadataSet" - | "CollectionMetadataCleared" - | "MetadataSet" - | "MetadataCleared" - | "Redeposited" - | "AttributeSet" - | "AttributeCleared" - | "OwnershipAcceptanceChanged" - | "CollectionMaxSupplySet"; + readonly type: 'Created' | 'ForceCreated' | 'Destroyed' | 'Issued' | 'Transferred' | 'Burned' | 'Frozen' | 'Thawed' | 'CollectionFrozen' | 'CollectionThawed' | 'OwnerChanged' | 'TeamChanged' | 'ApprovedTransfer' | 'ApprovalCancelled' | 'ItemStatusChanged' | 'CollectionMetadataSet' | 'CollectionMetadataCleared' | 'MetadataSet' | 'MetadataCleared' | 'Redeposited' | 'AttributeSet' | 'AttributeCleared' | 'OwnershipAcceptanceChanged' | 'CollectionMaxSupplySet'; } /** @name PalletUtilityEvent (52) */ @@ -732,13 +625,7 @@ declare module "@polkadot/types/lookup" { readonly asDispatchedAs: { readonly result: Result; } & Struct; - readonly type: - | "BatchInterrupted" - | "BatchCompleted" - | "BatchCompletedWithErrors" - | "ItemCompleted" - | "ItemFailed" - | "DispatchedAs"; + readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs'; } /** @name FrameSystemPhase (53) */ @@ -747,7 +634,7 @@ declare module "@polkadot/types/lookup" { readonly asApplyExtrinsic: u32; readonly isFinalization: boolean; readonly isInitialization: boolean; - readonly type: "ApplyExtrinsic" | "Finalization" | "Initialization"; + readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } /** @name FrameSystemLastRuntimeUpgradeInfo (57) */ @@ -795,16 +682,7 @@ declare module "@polkadot/types/lookup" { readonly asRemarkWithEvent: { readonly remark: Bytes; } & Struct; - readonly type: - | "FillBlock" - | "Remark" - | "SetHeapPages" - | "SetCode" - | "SetCodeWithoutChecks" - | "SetStorage" - | "KillStorage" - | "KillPrefix" - | "RemarkWithEvent"; + readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } /** @name FrameSystemLimitsBlockWeights (65) */ @@ -815,8 +693,7 @@ declare module "@polkadot/types/lookup" { } /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (66) */ - export interface FrameSupportWeightsPerDispatchClassWeightsPerClass - extends Struct { + export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; @@ -868,13 +745,7 @@ declare module "@polkadot/types/lookup" { readonly isNonDefaultComposite: boolean; readonly isNonZeroRefCount: boolean; readonly isCallFiltered: boolean; - readonly type: - | "InvalidSpecName" - | "SpecVersionNeedsToIncrease" - | "FailedToExtractRuntimeVersion" - | "NonDefaultComposite" - | "NonZeroRefCount" - | "CallFiltered"; + readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } /** @name PalletTimestampCall (80) */ @@ -883,12 +754,11 @@ declare module "@polkadot/types/lookup" { readonly asSet: { readonly now: Compact; } & Struct; - readonly type: "Set"; + readonly type: 'Set'; } /** @name SpConsensusAuraSr25519AppSr25519Public (83) */ - export interface SpConsensusAuraSr25519AppSr25519Public - extends SpCoreSr25519Public {} + export interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {} /** @name SpCoreSr25519Public (84) */ export interface SpCoreSr25519Public extends U8aFixed {} @@ -907,7 +777,7 @@ declare module "@polkadot/types/lookup" { readonly scheduledAt: u32; readonly delay: u32; } & Struct; - readonly type: "Live" | "PendingPause" | "Paused" | "PendingResume"; + readonly type: 'Live' | 'PendingPause' | 'Paused' | 'PendingResume'; } /** @name PalletGrandpaStoredPendingChange (88) */ @@ -935,10 +805,7 @@ declare module "@polkadot/types/lookup" { readonly delay: u32; readonly bestFinalizedBlockNumber: u32; } & Struct; - readonly type: - | "ReportEquivocation" - | "ReportEquivocationUnsigned" - | "NoteStalled"; + readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'NoteStalled'; } /** @name SpFinalityGrandpaEquivocationProof (91) */ @@ -953,19 +820,15 @@ declare module "@polkadot/types/lookup" { readonly asPrevote: FinalityGrandpaEquivocationPrevote; readonly isPrecommit: boolean; readonly asPrecommit: FinalityGrandpaEquivocationPrecommit; - readonly type: "Prevote" | "Precommit"; + readonly type: 'Prevote' | 'Precommit'; } /** @name FinalityGrandpaEquivocationPrevote (93) */ export interface FinalityGrandpaEquivocationPrevote extends Struct { readonly roundNumber: u64; readonly identity: SpFinalityGrandpaAppPublic; - readonly first: ITuple< - [FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature] - >; - readonly second: ITuple< - [FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature] - >; + readonly first: ITuple<[FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature]>; + readonly second: ITuple<[FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature]>; } /** @name FinalityGrandpaPrevote (94) */ @@ -975,8 +838,7 @@ declare module "@polkadot/types/lookup" { } /** @name SpFinalityGrandpaAppSignature (95) */ - export interface SpFinalityGrandpaAppSignature - extends SpCoreEd25519Signature {} + export interface SpFinalityGrandpaAppSignature extends SpCoreEd25519Signature {} /** @name SpCoreEd25519Signature (96) */ export interface SpCoreEd25519Signature extends U8aFixed {} @@ -985,12 +847,8 @@ declare module "@polkadot/types/lookup" { export interface FinalityGrandpaEquivocationPrecommit extends Struct { readonly roundNumber: u64; readonly identity: SpFinalityGrandpaAppPublic; - readonly first: ITuple< - [FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature] - >; - readonly second: ITuple< - [FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature] - >; + readonly first: ITuple<[FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature]>; + readonly second: ITuple<[FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature]>; } /** @name FinalityGrandpaPrecommit (100) */ @@ -1011,14 +869,7 @@ declare module "@polkadot/types/lookup" { readonly isInvalidKeyOwnershipProof: boolean; readonly isInvalidEquivocationProof: boolean; readonly isDuplicateOffenceReport: boolean; - readonly type: - | "PauseFailed" - | "ResumeFailed" - | "ChangePending" - | "TooSoon" - | "InvalidKeyOwnershipProof" - | "InvalidEquivocationProof" - | "DuplicateOffenceReport"; + readonly type: 'PauseFailed' | 'ResumeFailed' | 'ChangePending' | 'TooSoon' | 'InvalidKeyOwnershipProof' | 'InvalidEquivocationProof' | 'DuplicateOffenceReport'; } /** @name PalletBalancesBalanceLock (105) */ @@ -1033,7 +884,7 @@ declare module "@polkadot/types/lookup" { readonly isFee: boolean; readonly isMisc: boolean; readonly isAll: boolean; - readonly type: "Fee" | "Misc" | "All"; + readonly type: 'Fee' | 'Misc' | 'All'; } /** @name PalletBalancesReserveData (109) */ @@ -1046,7 +897,7 @@ declare module "@polkadot/types/lookup" { export interface PalletBalancesReleases extends Enum { readonly isV100: boolean; readonly isV200: boolean; - readonly type: "V100" | "V200"; + readonly type: 'V100' | 'V200'; } /** @name PalletBalancesCall (112) */ @@ -1083,13 +934,7 @@ declare module "@polkadot/types/lookup" { readonly who: MultiAddress; readonly amount: u128; } & Struct; - readonly type: - | "Transfer" - | "SetBalance" - | "ForceTransfer" - | "TransferKeepAlive" - | "TransferAll" - | "ForceUnreserve"; + readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve'; } /** @name PalletBalancesError (117) */ @@ -1102,22 +947,14 @@ declare module "@polkadot/types/lookup" { readonly isExistingVestingSchedule: boolean; readonly isDeadAccount: boolean; readonly isTooManyReserves: boolean; - readonly type: - | "VestingBalance" - | "LiquidityRestrictions" - | "InsufficientBalance" - | "ExistentialDeposit" - | "KeepAlive" - | "ExistingVestingSchedule" - | "DeadAccount" - | "TooManyReserves"; + readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves'; } /** @name PalletTransactionPaymentReleases (119) */ export interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; - readonly type: "V1Ancient" | "V2"; + readonly type: 'V1Ancient' | 'V2'; } /** @name PalletSudoCall (120) */ @@ -1140,7 +977,7 @@ declare module "@polkadot/types/lookup" { readonly who: MultiAddress; readonly call: Call; } & Struct; - readonly type: "Sudo" | "SudoUncheckedWeight" | "SetKey" | "SudoAs"; + readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs'; } /** @name PalletTemplateCall (122) */ @@ -1150,7 +987,7 @@ declare module "@polkadot/types/lookup" { readonly something: u32; } & Struct; readonly isCauseError: boolean; - readonly type: "DoSomething" | "CauseError"; + readonly type: 'DoSomething' | 'CauseError'; } /** @name PalletRmrkEquipCall (123) */ @@ -1192,13 +1029,7 @@ declare module "@polkadot/types/lookup" { readonly symbol: Bytes; readonly parts: Vec; } & Struct; - readonly type: - | "ChangeBaseIssuer" - | "Equip" - | "Unequip" - | "Equippable" - | "ThemeAdd" - | "CreateBase"; + readonly type: 'ChangeBaseIssuer' | 'Equip' | 'Unequip' | 'Equippable' | 'ThemeAdd' | 'CreateBase'; } /** @name RmrkTraitsPartEquippableList (124) */ @@ -1207,7 +1038,7 @@ declare module "@polkadot/types/lookup" { readonly isEmpty: boolean; readonly isCustom: boolean; readonly asCustom: Vec; - readonly type: "All" | "Empty" | "Custom"; + readonly type: 'All' | 'Empty' | 'Custom'; } /** @name RmrkTraitsTheme (126) */ @@ -1229,7 +1060,7 @@ declare module "@polkadot/types/lookup" { readonly asFixedPart: RmrkTraitsPartFixedPart; readonly isSlotPart: boolean; readonly asSlotPart: RmrkTraitsPartSlotPart; - readonly type: "FixedPart" | "SlotPart"; + readonly type: 'FixedPart' | 'SlotPart'; } /** @name RmrkTraitsPartFixedPart (132) */ @@ -1252,22 +1083,24 @@ declare module "@polkadot/types/lookup" { readonly isMintNft: boolean; readonly asMintNft: { readonly owner: Option; + readonly nftId: u32; readonly collectionId: u32; readonly royaltyRecipient: Option; readonly royalty: Option; readonly metadata: Bytes; readonly transferable: bool; - readonly resources: Option>; + readonly resources: Option>; } & Struct; readonly isMintNftDirectlyToNft: boolean; readonly asMintNftDirectlyToNft: { readonly owner: ITuple<[u32, u32]>; + readonly nftId: u32; readonly collectionId: u32; readonly royaltyRecipient: Option; readonly royalty: Option; readonly metadata: Bytes; readonly transferable: bool; - readonly resources: Option>; + readonly resources: Option>; } & Struct; readonly isCreateCollection: boolean; readonly asCreateCollection: { @@ -1323,18 +1156,21 @@ declare module "@polkadot/types/lookup" { readonly collectionId: u32; readonly nftId: u32; readonly resource: RmrkTraitsResourceBasicResource; + readonly resourceId: u32; } & Struct; readonly isAddComposableResource: boolean; readonly asAddComposableResource: { readonly collectionId: u32; readonly nftId: u32; readonly resource: RmrkTraitsResourceComposableResource; + readonly resourceId: u32; } & Struct; readonly isAddSlotResource: boolean; readonly asAddSlotResource: { readonly collectionId: u32; readonly nftId: u32; readonly resource: RmrkTraitsResourceSlotResource; + readonly resourceId: u32; } & Struct; readonly isAcceptResource: boolean; readonly asAcceptResource: { @@ -1360,28 +1196,16 @@ declare module "@polkadot/types/lookup" { readonly nftId: u32; readonly priorities: Vec; } & Struct; - readonly type: - | "MintNft" - | "MintNftDirectlyToNft" - | "CreateCollection" - | "BurnNft" - | "DestroyCollection" - | "Send" - | "AcceptNft" - | "RejectNft" - | "ChangeCollectionIssuer" - | "SetProperty" - | "LockCollection" - | "AddBasicResource" - | "AddComposableResource" - | "AddSlotResource" - | "AcceptResource" - | "RemoveResource" - | "AcceptResourceRemoval" - | "SetPriority"; - } - - /** @name RmrkTraitsResourceResourceTypes (141) */ + readonly type: 'MintNft' | 'MintNftDirectlyToNft' | 'CreateCollection' | 'BurnNft' | 'DestroyCollection' | 'Send' | 'AcceptNft' | 'RejectNft' | 'ChangeCollectionIssuer' | 'SetProperty' | 'LockCollection' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'AcceptResource' | 'RemoveResource' | 'AcceptResourceRemoval' | 'SetPriority'; + } + + /** @name RmrkTraitsResourceResourceInfoMin (141) */ + export interface RmrkTraitsResourceResourceInfoMin extends Struct { + readonly id: u32; + readonly resource: RmrkTraitsResourceResourceTypes; + } + + /** @name RmrkTraitsResourceResourceTypes (143) */ export interface RmrkTraitsResourceResourceTypes extends Enum { readonly isBasic: boolean; readonly asBasic: RmrkTraitsResourceBasicResource; @@ -1389,15 +1213,15 @@ declare module "@polkadot/types/lookup" { readonly asComposable: RmrkTraitsResourceComposableResource; readonly isSlot: boolean; readonly asSlot: RmrkTraitsResourceSlotResource; - readonly type: "Basic" | "Composable" | "Slot"; + readonly type: 'Basic' | 'Composable' | 'Slot'; } - /** @name RmrkTraitsResourceBasicResource (143) */ + /** @name RmrkTraitsResourceBasicResource (144) */ export interface RmrkTraitsResourceBasicResource extends Struct { - readonly metadata: Option; + readonly metadata: Bytes; } - /** @name RmrkTraitsResourceComposableResource (144) */ + /** @name RmrkTraitsResourceComposableResource (145) */ export interface RmrkTraitsResourceComposableResource extends Struct { readonly parts: Vec; readonly base: u32; @@ -1405,14 +1229,14 @@ declare module "@polkadot/types/lookup" { readonly slot: Option>; } - /** @name RmrkTraitsResourceSlotResource (146) */ + /** @name RmrkTraitsResourceSlotResource (147) */ export interface RmrkTraitsResourceSlotResource extends Struct { readonly base: u32; readonly metadata: Option; readonly slot: u32; } - /** @name PalletRmrkMarketCall (150) */ + /** @name PalletRmrkMarketCall (151) */ export interface PalletRmrkMarketCall extends Enum { readonly isBuy: boolean; readonly asBuy: { @@ -1450,16 +1274,10 @@ declare module "@polkadot/types/lookup" { readonly nftId: u32; readonly offerer: AccountId32; } & Struct; - readonly type: - | "Buy" - | "List" - | "Unlist" - | "MakeOffer" - | "WithdrawOffer" - | "AcceptOffer"; + readonly type: 'Buy' | 'List' | 'Unlist' | 'MakeOffer' | 'WithdrawOffer' | 'AcceptOffer'; } - /** @name PalletUniquesCall (151) */ + /** @name PalletUniquesCall (152) */ export interface PalletUniquesCall extends Enum { readonly isCreate: boolean; readonly asCreate: { @@ -1596,41 +1414,17 @@ declare module "@polkadot/types/lookup" { readonly collection: u32; readonly maxSupply: u32; } & Struct; - readonly type: - | "Create" - | "ForceCreate" - | "Destroy" - | "Mint" - | "Burn" - | "Transfer" - | "Redeposit" - | "Freeze" - | "Thaw" - | "FreezeCollection" - | "ThawCollection" - | "TransferOwnership" - | "SetTeam" - | "ApproveTransfer" - | "CancelApproval" - | "ForceItemStatus" - | "SetAttribute" - | "ClearAttribute" - | "SetMetadata" - | "ClearMetadata" - | "SetCollectionMetadata" - | "ClearCollectionMetadata" - | "SetAcceptOwnership" - | "SetCollectionMaxSupply"; - } - - /** @name PalletUniquesDestroyWitness (152) */ + readonly type: 'Create' | 'ForceCreate' | 'Destroy' | 'Mint' | 'Burn' | 'Transfer' | 'Redeposit' | 'Freeze' | 'Thaw' | 'FreezeCollection' | 'ThawCollection' | 'TransferOwnership' | 'SetTeam' | 'ApproveTransfer' | 'CancelApproval' | 'ForceItemStatus' | 'SetAttribute' | 'ClearAttribute' | 'SetMetadata' | 'ClearMetadata' | 'SetCollectionMetadata' | 'ClearCollectionMetadata' | 'SetAcceptOwnership' | 'SetCollectionMaxSupply'; + } + + /** @name PalletUniquesDestroyWitness (153) */ export interface PalletUniquesDestroyWitness extends Struct { readonly items: Compact; readonly itemMetadatas: Compact; readonly attributes: Compact; } - /** @name PalletUtilityCall (154) */ + /** @name PalletUtilityCall (155) */ export interface PalletUtilityCall extends Enum { readonly isBatch: boolean; readonly asBatch: { @@ -1654,52 +1448,47 @@ declare module "@polkadot/types/lookup" { readonly asForceBatch: { readonly calls: Vec; } & Struct; - readonly type: - | "Batch" - | "AsDerivative" - | "BatchAll" - | "DispatchAs" - | "ForceBatch"; + readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch'; } - /** @name RmrkSubstrateRuntimeOriginCaller (156) */ + /** @name RmrkSubstrateRuntimeOriginCaller (157) */ export interface RmrkSubstrateRuntimeOriginCaller extends Enum { readonly isSystem: boolean; readonly asSystem: FrameSupportDispatchRawOrigin; readonly isVoid: boolean; - readonly type: "System" | "Void"; + readonly type: 'System' | 'Void'; } - /** @name FrameSupportDispatchRawOrigin (157) */ + /** @name FrameSupportDispatchRawOrigin (158) */ export interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; readonly asSigned: AccountId32; readonly isNone: boolean; - readonly type: "Root" | "Signed" | "None"; + readonly type: 'Root' | 'Signed' | 'None'; } - /** @name PalletSudoError (158) */ + /** @name PalletSudoError (159) */ export interface PalletSudoError extends Enum { readonly isRequireSudo: boolean; - readonly type: "RequireSudo"; + readonly type: 'RequireSudo'; } - /** @name PalletTemplateError (159) */ + /** @name PalletTemplateError (160) */ export interface PalletTemplateError extends Enum { readonly isNoneValue: boolean; readonly isStorageOverflow: boolean; - readonly type: "NoneValue" | "StorageOverflow"; + readonly type: 'NoneValue' | 'StorageOverflow'; } - /** @name RmrkTraitsBaseBaseInfo (160) */ + /** @name RmrkTraitsBaseBaseInfo (161) */ export interface RmrkTraitsBaseBaseInfo extends Struct { readonly issuer: AccountId32; readonly baseType: Bytes; readonly symbol: Bytes; } - /** @name PalletRmrkEquipError (163) */ + /** @name PalletRmrkEquipError (164) */ export interface PalletRmrkEquipError extends Enum { readonly isPermissionError: boolean; readonly isItemDoesntExist: boolean; @@ -1723,32 +1512,10 @@ declare module "@polkadot/types/lookup" { readonly isTooManyProperties: boolean; readonly isItemNotEquipped: boolean; readonly isUnequipperMustOwnEitherItemOrEquipper: boolean; - readonly type: - | "PermissionError" - | "ItemDoesntExist" - | "EquipperDoesntExist" - | "NoAvailableBaseId" - | "NoAvailablePartId" - | "MustBeDirectParent" - | "PartDoesntExist" - | "BaseDoesntExist" - | "CantEquipFixedPart" - | "NoResourceForThisBaseFoundOnNft" - | "CollectionNotEquippable" - | "ItemHasNoResourceToEquipThere" - | "NoEquippableOnFixedPart" - | "NeedsDefaultThemeFirst" - | "ItemAlreadyEquipped" - | "SlotAlreadyEquipped" - | "SlotNotEquipped" - | "UnknownError" - | "ExceedsMaxPartsPerBase" - | "TooManyProperties" - | "ItemNotEquipped" - | "UnequipperMustOwnEitherItemOrEquipper"; - } - - /** @name RmrkTraitsCollectionCollectionInfo (164) */ + readonly type: 'PermissionError' | 'ItemDoesntExist' | 'EquipperDoesntExist' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'MustBeDirectParent' | 'PartDoesntExist' | 'BaseDoesntExist' | 'CantEquipFixedPart' | 'NoResourceForThisBaseFoundOnNft' | 'CollectionNotEquippable' | 'ItemHasNoResourceToEquipThere' | 'NoEquippableOnFixedPart' | 'NeedsDefaultThemeFirst' | 'ItemAlreadyEquipped' | 'SlotAlreadyEquipped' | 'SlotNotEquipped' | 'UnknownError' | 'ExceedsMaxPartsPerBase' | 'TooManyProperties' | 'ItemNotEquipped' | 'UnequipperMustOwnEitherItemOrEquipper'; + } + + /** @name RmrkTraitsCollectionCollectionInfo (165) */ export interface RmrkTraitsCollectionCollectionInfo extends Struct { readonly issuer: AccountId32; readonly metadata: Bytes; @@ -1757,7 +1524,7 @@ declare module "@polkadot/types/lookup" { readonly nftsCount: u32; } - /** @name RmrkTraitsNftNftInfo (165) */ + /** @name RmrkTraitsNftNftInfo (166) */ export interface RmrkTraitsNftNftInfo extends Struct { readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple; readonly royalty: Option; @@ -1767,13 +1534,13 @@ declare module "@polkadot/types/lookup" { readonly transferable: bool; } - /** @name RmrkTraitsNftRoyaltyInfo (167) */ + /** @name RmrkTraitsNftRoyaltyInfo (168) */ export interface RmrkTraitsNftRoyaltyInfo extends Struct { readonly recipient: AccountId32; readonly amount: Permill; } - /** @name RmrkTraitsResourceResourceInfo (170) */ + /** @name RmrkTraitsResourceResourceInfo (171) */ export interface RmrkTraitsResourceResourceInfo extends Struct { readonly id: u32; readonly resource: RmrkTraitsResourceResourceTypes; @@ -1781,23 +1548,22 @@ declare module "@polkadot/types/lookup" { readonly pendingRemoval: bool; } - /** @name RmrkTraitsNftNftChild (174) */ + /** @name RmrkTraitsNftNftChild (175) */ export interface RmrkTraitsNftNftChild extends Struct { readonly collectionId: u32; readonly nftId: u32; } - /** @name PhantomTypePhantomType (175) */ - export interface PhantomTypePhantomType - extends Vec {} + /** @name PhantomTypePhantomType (176) */ + export interface PhantomTypePhantomType extends Vec {} - /** @name RmrkTraitsPropertyPropertyInfo (176) */ + /** @name RmrkTraitsPropertyPropertyInfo (177) */ export interface RmrkTraitsPropertyPropertyInfo extends Struct { readonly key: Bytes; readonly value: Bytes; } - /** @name PalletRmrkCoreError (178) */ + /** @name PalletRmrkCoreError (179) */ export interface PalletRmrkCoreError extends Enum { readonly isNoneValue: boolean; readonly isStorageOverflow: boolean; @@ -1816,6 +1582,7 @@ declare module "@polkadot/types/lookup" { readonly isCollectionFullOrLocked: boolean; readonly isCannotSendToDescendentOrSelf: boolean; readonly isResourceAlreadyExists: boolean; + readonly isNftAlreadyExists: boolean; readonly isEmptyResource: boolean; readonly isTooManyRecursions: boolean; readonly isNftIsLocked: boolean; @@ -1826,51 +1593,24 @@ declare module "@polkadot/types/lookup" { readonly isResourceNotPending: boolean; readonly isNonTransferable: boolean; readonly isCannotSendEquippedItem: boolean; - readonly type: - | "NoneValue" - | "StorageOverflow" - | "TooLong" - | "NoAvailableCollectionId" - | "NoAvailableResourceId" - | "MetadataNotSet" - | "RecipientNotSet" - | "NoAvailableNftId" - | "NotInRange" - | "RoyaltyNotSet" - | "CollectionUnknown" - | "NoPermission" - | "NoWitness" - | "CollectionNotEmpty" - | "CollectionFullOrLocked" - | "CannotSendToDescendentOrSelf" - | "ResourceAlreadyExists" - | "EmptyResource" - | "TooManyRecursions" - | "NftIsLocked" - | "CannotAcceptNonOwnedNft" - | "CannotRejectNonOwnedNft" - | "CannotRejectNonPendingNft" - | "ResourceDoesntExist" - | "ResourceNotPending" - | "NonTransferable" - | "CannotSendEquippedItem"; - } - - /** @name PalletRmrkMarketListInfo (179) */ + readonly type: 'NoneValue' | 'StorageOverflow' | 'TooLong' | 'NoAvailableCollectionId' | 'NoAvailableResourceId' | 'MetadataNotSet' | 'RecipientNotSet' | 'NoAvailableNftId' | 'NotInRange' | 'RoyaltyNotSet' | 'CollectionUnknown' | 'NoPermission' | 'NoWitness' | 'CollectionNotEmpty' | 'CollectionFullOrLocked' | 'CannotSendToDescendentOrSelf' | 'ResourceAlreadyExists' | 'NftAlreadyExists' | 'EmptyResource' | 'TooManyRecursions' | 'NftIsLocked' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'CannotRejectNonPendingNft' | 'ResourceDoesntExist' | 'ResourceNotPending' | 'NonTransferable' | 'CannotSendEquippedItem'; + } + + /** @name PalletRmrkMarketListInfo (180) */ export interface PalletRmrkMarketListInfo extends Struct { readonly listedBy: AccountId32; readonly amount: u128; readonly expires: Option; } - /** @name PalletRmrkMarketOffer (181) */ + /** @name PalletRmrkMarketOffer (182) */ export interface PalletRmrkMarketOffer extends Struct { readonly maker: AccountId32; readonly amount: u128; readonly expires: Option; } - /** @name PalletRmrkMarketError (182) */ + /** @name PalletRmrkMarketError (183) */ export interface PalletRmrkMarketError extends Enum { readonly isNoPermission: boolean; readonly isTokenNotForSale: boolean; @@ -1887,25 +1627,10 @@ declare module "@polkadot/types/lookup" { readonly isListingHasExpired: boolean; readonly isPriceDiffersFromExpected: boolean; readonly isNonTransferable: boolean; - readonly type: - | "NoPermission" - | "TokenNotForSale" - | "CannotWithdrawOffer" - | "CannotUnlistToken" - | "CannotOfferOnOwnToken" - | "CannotBuyOwnToken" - | "UnknownOffer" - | "CannotListNftOwnedByNft" - | "TokenDoesNotExist" - | "OfferTooLow" - | "AlreadyOffered" - | "OfferHasExpired" - | "ListingHasExpired" - | "PriceDiffersFromExpected" - | "NonTransferable"; - } - - /** @name PalletUniquesCollectionDetails (183) */ + readonly type: 'NoPermission' | 'TokenNotForSale' | 'CannotWithdrawOffer' | 'CannotUnlistToken' | 'CannotOfferOnOwnToken' | 'CannotBuyOwnToken' | 'UnknownOffer' | 'CannotListNftOwnedByNft' | 'TokenDoesNotExist' | 'OfferTooLow' | 'AlreadyOffered' | 'OfferHasExpired' | 'ListingHasExpired' | 'PriceDiffersFromExpected' | 'NonTransferable'; + } + + /** @name PalletUniquesCollectionDetails (184) */ export interface PalletUniquesCollectionDetails extends Struct { readonly owner: AccountId32; readonly issuer: AccountId32; @@ -1919,7 +1644,7 @@ declare module "@polkadot/types/lookup" { readonly isFrozen: bool; } - /** @name PalletUniquesItemDetails (186) */ + /** @name PalletUniquesItemDetails (187) */ export interface PalletUniquesItemDetails extends Struct { readonly owner: AccountId32; readonly approved: Option; @@ -1927,21 +1652,21 @@ declare module "@polkadot/types/lookup" { readonly deposit: u128; } - /** @name PalletUniquesCollectionMetadata (187) */ + /** @name PalletUniquesCollectionMetadata (188) */ export interface PalletUniquesCollectionMetadata extends Struct { readonly deposit: u128; readonly data: Bytes; readonly isFrozen: bool; } - /** @name PalletUniquesItemMetadata (188) */ + /** @name PalletUniquesItemMetadata (189) */ export interface PalletUniquesItemMetadata extends Struct { readonly deposit: u128; readonly data: Bytes; readonly isFrozen: bool; } - /** @name PalletUniquesError (190) */ + /** @name PalletUniquesError (191) */ export interface PalletUniquesError extends Enum { readonly isNoPermission: boolean; readonly isUnknownCollection: boolean; @@ -1958,31 +1683,16 @@ declare module "@polkadot/types/lookup" { readonly isMaxSupplyReached: boolean; readonly isMaxSupplyAlreadySet: boolean; readonly isMaxSupplyTooSmall: boolean; - readonly type: - | "NoPermission" - | "UnknownCollection" - | "AlreadyExists" - | "WrongOwner" - | "BadWitness" - | "InUse" - | "Frozen" - | "WrongDelegate" - | "NoDelegate" - | "Unapproved" - | "Unaccepted" - | "Locked" - | "MaxSupplyReached" - | "MaxSupplyAlreadySet" - | "MaxSupplyTooSmall"; - } - - /** @name PalletUtilityError (191) */ + readonly type: 'NoPermission' | 'UnknownCollection' | 'AlreadyExists' | 'WrongOwner' | 'BadWitness' | 'InUse' | 'Frozen' | 'WrongDelegate' | 'NoDelegate' | 'Unapproved' | 'Unaccepted' | 'Locked' | 'MaxSupplyReached' | 'MaxSupplyAlreadySet' | 'MaxSupplyTooSmall'; + } + + /** @name PalletUtilityError (192) */ export interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; - readonly type: "TooManyCalls"; + readonly type: 'TooManyCalls'; } - /** @name SpRuntimeMultiSignature (193) */ + /** @name SpRuntimeMultiSignature (194) */ export interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -1990,34 +1700,34 @@ declare module "@polkadot/types/lookup" { readonly asSr25519: SpCoreSr25519Signature; readonly isEcdsa: boolean; readonly asEcdsa: SpCoreEcdsaSignature; - readonly type: "Ed25519" | "Sr25519" | "Ecdsa"; + readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreSr25519Signature (194) */ + /** @name SpCoreSr25519Signature (195) */ export interface SpCoreSr25519Signature extends U8aFixed {} - /** @name SpCoreEcdsaSignature (195) */ + /** @name SpCoreEcdsaSignature (196) */ export interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name FrameSystemExtensionsCheckSpecVersion (198) */ + /** @name FrameSystemExtensionsCheckSpecVersion (199) */ export type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (199) */ + /** @name FrameSystemExtensionsCheckTxVersion (200) */ export type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (200) */ + /** @name FrameSystemExtensionsCheckGenesis (201) */ export type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (203) */ + /** @name FrameSystemExtensionsCheckNonce (204) */ export interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (204) */ + /** @name FrameSystemExtensionsCheckWeight (205) */ export type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (205) */ - export interface PalletTransactionPaymentChargeTransactionPayment - extends Compact {} + /** @name PalletTransactionPaymentChargeTransactionPayment (206) */ + export interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name RmrkSubstrateRuntimeRuntime (206) */ + /** @name RmrkSubstrateRuntimeRuntime (207) */ export type RmrkSubstrateRuntimeRuntime = Null; + } // declare module diff --git a/tests/src/lockCollection.test.ts b/tests/src/lockCollection.test.ts index 9fb52fdf..03930ef6 100644 --- a/tests/src/lockCollection.test.ts +++ b/tests/src/lockCollection.test.ts @@ -53,6 +53,7 @@ describe("integration test: lock collection", () => { for (let i = 0; i < 5; i++) { await mintNft( api, + i, Alice, Alice, collectionId, @@ -76,6 +77,7 @@ describe("integration test: lock collection", () => { await lockCollection(api, Alice, collectionId); const tx = mintNft( api, + 0, Alice, Alice, collectionId, @@ -92,6 +94,7 @@ describe("integration test: lock collection", () => { async (collectionId) => { await mintNft( api, + 0, Alice, Alice, collectionId, @@ -101,6 +104,7 @@ describe("integration test: lock collection", () => { ); const tx = mintNft( api, + 1, Alice, Alice, collectionId, diff --git a/tests/src/mintNft.test.ts b/tests/src/mintNft.test.ts index 0d452beb..e81c3cab 100644 --- a/tests/src/mintNft.test.ts +++ b/tests/src/mintNft.test.ts @@ -34,6 +34,7 @@ describe("integration test: mint new NFT", () => { await mintNft( api, + 200, alice, owner, collectionId, @@ -62,6 +63,7 @@ describe("integration test: mint new NFT", () => { await mintNft( api, + 201, alice, owner, collectionId, @@ -90,6 +92,7 @@ describe("integration test: mint new NFT", () => { await mintNft( api, + 210, alice, owner, collectionId, @@ -107,26 +110,39 @@ describe("integration test: mint new NFT", () => { const nftMetadata = "NFT-with-resources-test-metadata"; const resources = [ { - basic: { - metadata: "basic-resource-nft-minting", + id: 101, + resource: { + basic: { + metadata: "basic-resource-nft-minting", + }, }, }, { - slot: { - metadata: "slot-resource-nft-minting", - slot: 9, + id: 102, + resource: { + slot: { + metadata: "slot-resource-nft-minting", + slot: 9, + }, }, }, + { - composable: { - metadata: "composable-resource-nft-minting", - parts: [0, 5, 2], + id: 103, + resource: { + composable: { + metadata: "composable-resource-nft-minting", + parts: [0, 5, 2], + }, }, }, { - slot: { - metadata: "slot-resource-nft-minting-2", - base: 5, + id: 104, + resource: { + slot: { + metadata: "slot-resource-nft-minting-2", + base: 5, + }, }, }, ]; @@ -141,6 +157,7 @@ describe("integration test: mint new NFT", () => { await mintNft( api, + 211, alice, owner, collectionId, @@ -160,6 +177,7 @@ describe("integration test: mint new NFT", () => { const tx = mintNft( api, + 220, alice, owner, maxCollectionId, @@ -190,6 +208,7 @@ describe("integration test: mint new NFT", () => { const tx = mintNft( api, + 230, bob, owner, collectionId, diff --git a/tests/src/rejectNft.test.ts b/tests/src/rejectNft.test.ts index d79a77d2..0720e304 100644 --- a/tests/src/rejectNft.test.ts +++ b/tests/src/rejectNft.test.ts @@ -1,89 +1,143 @@ import { expect } from "chai"; import { getApiConnection } from "./substrate/substrate-api"; -import { - createCollection, - mintNft, - sendNft, - rejectNft -} from "./util/tx"; +import { createCollection, mintNft, sendNft, rejectNft } from "./util/tx"; import { getChildren, NftIdTuple } from "./util/fetch"; import { isNftChildOfAnother, expectTxFailure } from "./util/helpers"; describe("integration test: reject NFT", () => { - let api: any; - before(async () => { api = await getApiConnection(); }); - - const alice = "//Alice"; - const bob = "//Bob"; - - const createTestCollection = async (issuerUri: string) => { - return await createCollection( - api, - issuerUri, - "reject-metadata", - null, - "rjct" - ); - } - - it("reject NFT", async () => { - const ownerAlice = alice; - const ownerBob = bob; - - const aliceCollectionId = await createTestCollection(alice); - const bobCollectionId = await createTestCollection(bob); - - const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; - - await sendNft(api, "pending", ownerBob, bobCollectionId, childNftId, newOwnerNFT); - await rejectNft(api, alice, bobCollectionId, childNftId); - - const isChild = await isNftChildOfAnother(api, bobCollectionId, childNftId, newOwnerNFT); - expect(isChild, 'Error: rejected NFT is still a child of the target NFT').to.be.false; - }); - - it("[negative] unable to reject NFT by a not-an-owner", async () => { - const ownerAlice = alice; - const ownerBob = bob; - - const aliceCollectionId = await createTestCollection(alice); - const bobCollectionId = await createTestCollection(bob); - - const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; - - await sendNft(api, "pending", ownerBob, bobCollectionId, childNftId, newOwnerNFT); - const tx = rejectNft(api, bob, bobCollectionId, childNftId); - - await expectTxFailure(/rmrkCore\.CannotRejectNonOwnedNft/, tx); - }); - - it("[negative] unable to reject non-existing NFT", async () => { - const maxNftId = 0xFFFFFFFF; - - const collectionId = await createTestCollection(alice); - - const tx = rejectNft(api, alice, collectionId, maxNftId); - - await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); - }); - - it("[negative] unable to reject NFT which is not sent", async () => { - const ownerAlice = alice; - - const collectionId = await createTestCollection(alice); - - const nftId = await mintNft(api, alice, ownerAlice, collectionId, "parent-nft-metadata"); - - const tx = rejectNft(api, alice, collectionId, nftId); - - await expectTxFailure(/rmrkCore\.CannotRejectNonPendingNft/, tx); - }); - - after(() => { api.disconnect(); }); + let api: any; + before(async () => { + api = await getApiConnection(); + }); + + const alice = "//Alice"; + const bob = "//Bob"; + + const createTestCollection = async (issuerUri: string) => { + return await createCollection( + api, + issuerUri, + "reject-metadata", + null, + "rjct" + ); + }; + + it("reject NFT", async () => { + const ownerAlice = alice; + const ownerBob = bob; + + const aliceCollectionId = await createTestCollection(alice); + const bobCollectionId = await createTestCollection(bob); + + const parentNftId = await mintNft( + api, + 0, + alice, + ownerAlice, + aliceCollectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 1, + bob, + ownerBob, + bobCollectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; + + await sendNft( + api, + "pending", + ownerBob, + bobCollectionId, + childNftId, + newOwnerNFT + ); + await rejectNft(api, alice, bobCollectionId, childNftId); + + const isChild = await isNftChildOfAnother( + api, + bobCollectionId, + childNftId, + newOwnerNFT + ); + expect(isChild, "Error: rejected NFT is still a child of the target NFT").to + .be.false; + }); + + it("[negative] unable to reject NFT by a not-an-owner", async () => { + const ownerAlice = alice; + const ownerBob = bob; + + const aliceCollectionId = await createTestCollection(alice); + const bobCollectionId = await createTestCollection(bob); + + const parentNftId = await mintNft( + api, + 0, + alice, + ownerAlice, + aliceCollectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 1, + bob, + ownerBob, + bobCollectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; + + await sendNft( + api, + "pending", + ownerBob, + bobCollectionId, + childNftId, + newOwnerNFT + ); + const tx = rejectNft(api, bob, bobCollectionId, childNftId); + + await expectTxFailure(/rmrkCore\.CannotRejectNonOwnedNft/, tx); + }); + + it("[negative] unable to reject non-existing NFT", async () => { + const maxNftId = 0xffffffff; + + const collectionId = await createTestCollection(alice); + + const tx = rejectNft(api, alice, collectionId, maxNftId); + + await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); + }); + + it("[negative] unable to reject NFT which is not sent", async () => { + const ownerAlice = alice; + + const collectionId = await createTestCollection(alice); + + const nftId = await mintNft( + api, + 0, + alice, + ownerAlice, + collectionId, + "parent-nft-metadata" + ); + + const tx = rejectNft(api, alice, collectionId, nftId); + + await expectTxFailure(/rmrkCore\.CannotRejectNonPendingNft/, tx); + }); + + after(() => { + api.disconnect(); + }); }); diff --git a/tests/src/removeResource.test.ts b/tests/src/removeResource.test.ts index a854e02c..e1997b47 100644 --- a/tests/src/removeResource.test.ts +++ b/tests/src/removeResource.test.ts @@ -40,6 +40,7 @@ describe("Integration test: remove nft resource", () => { const nftAlice = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -48,6 +49,7 @@ describe("Integration test: remove nft resource", () => { const resourceId = await addNftBasicResource( api, + 0, Alice, "added", collectionIdAlice, @@ -76,6 +78,7 @@ describe("Integration test: remove nft resource", () => { const parentNftId = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -83,6 +86,7 @@ describe("Integration test: remove nft resource", () => { ); const childNftId = await mintNft( api, + 1, Alice, Alice, collectionIdAlice, @@ -91,6 +95,7 @@ describe("Integration test: remove nft resource", () => { const resourceId = await addNftBasicResource( api, + 0, Alice, "added", collectionIdAlice, @@ -130,6 +135,7 @@ describe("Integration test: remove nft resource", () => { const nftBob = await mintNft( api, + 0, Alice, Bob, collectionIdAlice, @@ -138,6 +144,7 @@ describe("Integration test: remove nft resource", () => { const resourceId = await addNftBasicResource( api, + 0, Alice, "pending", collectionIdAlice, @@ -173,6 +180,7 @@ describe("Integration test: remove nft resource", () => { const parentNftId = await mintNft( api, + 0, Alice, Bob, collectionIdAlice, @@ -180,6 +188,7 @@ describe("Integration test: remove nft resource", () => { ); const childNftId = await mintNft( api, + 1, Alice, Bob, collectionIdAlice, @@ -188,6 +197,7 @@ describe("Integration test: remove nft resource", () => { const resourceId = await addNftBasicResource( api, + 0, Alice, "pending", collectionIdAlice, @@ -234,6 +244,7 @@ describe("Integration test: remove nft resource", () => { const nftAlice = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -242,6 +253,7 @@ describe("Integration test: remove nft resource", () => { const resourceId = await addNftBasicResource( api, + 0, Alice, "added", collectionIdAlice, @@ -271,6 +283,7 @@ describe("Integration test: remove nft resource", () => { const nftAlice = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -279,6 +292,7 @@ describe("Integration test: remove nft resource", () => { const resourceId = await addNftBasicResource( api, + 0, Alice, "added", collectionIdAlice, @@ -308,6 +322,7 @@ describe("Integration test: remove nft resource", () => { const nftAlice = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -336,6 +351,7 @@ describe("Integration test: remove nft resource", () => { const nftBob = await mintNft( api, + 0, Alice, Bob, collectionIdAlice, @@ -344,6 +360,7 @@ describe("Integration test: remove nft resource", () => { const resourceId = await addNftBasicResource( api, + 0, Alice, "pending", collectionIdAlice, @@ -372,6 +389,7 @@ describe("Integration test: remove nft resource", () => { const nftBob = await mintNft( api, + 0, Alice, Bob, collectionIdAlice, @@ -393,6 +411,7 @@ describe("Integration test: remove nft resource", () => { const nftAlice = await mintNft( api, + 0, Alice, Alice, collectionIdAlice, @@ -401,6 +420,7 @@ describe("Integration test: remove nft resource", () => { const resourceId = await addNftBasicResource( api, + 0, Alice, "added", collectionIdAlice, diff --git a/tests/src/sendNft.test.ts b/tests/src/sendNft.test.ts index 7e830798..a0b54d76 100644 --- a/tests/src/sendNft.test.ts +++ b/tests/src/sendNft.test.ts @@ -5,248 +5,539 @@ import { NftIdTuple } from "./util/fetch"; import { isNftChildOfAnother, expectTxFailure } from "./util/helpers"; describe("integration test: send NFT", () => { - let api: any; - before(async () => { api = await getApiConnection(); }); - - const maxNftId = 0xFFFFFFFF; - - const alice = "//Alice"; - const bob = "//Bob"; - - const createTestCollection = async (issuerUri: string) => { - return await createCollection( - api, - issuerUri, - "nft-collection-metadata", - null, - "nft-collection" - ); - }; - - - it("send NFT to another user", async () => { - const originalOwnerUri = alice; - const newOwnerUri = bob; - - const collectionId = await createTestCollection(alice); - - const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, "nft-metadata"); - - await sendNft(api, "sent", originalOwnerUri, collectionId, nftId, newOwnerUri); - }); - - it("[negative] unable to send non-existing NFT", async () => { - const originalOwnerUri = alice; - const newOwnerUri = bob; - - const collectionId = 0; - const tx = sendNft(api, "sent", originalOwnerUri, collectionId, maxNftId, newOwnerUri); - - await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); - }); - - it("[negative] unable to send NFT by a not-an-owner", async () => { - const originalOwnerUri = alice; - const newOwnerUri = bob; - - const collectionId = await createTestCollection(alice); - - const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, "nft-metadata"); - - const tx = sendNft(api, "sent", newOwnerUri, collectionId, nftId, newOwnerUri); - await expectTxFailure(/rmrkCore\.NoPermission/, tx); - }); - - it("send NFT to another NFT (same owner)", async () => { - const originalOwnerUri = alice; - - const collectionId = await createTestCollection(alice); - - const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; - - await sendNft(api, "sent", alice, collectionId, childNftId, newOwnerNFT); - - const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT); - expect(isChild).to.be.true; - }); - - it("[negative] send non-existing NFT to another NFT", async () => { - const originalOwnerUri = alice; - - const collectionId = await createTestCollection(alice); - - const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "parent-nft-metadata"); - const childNftId = maxNftId; - - const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; - - const tx = sendNft(api, "sent", alice, collectionId, childNftId, newOwnerNFT); - - await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); - - const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT); - expect(isChild).to.be.false; - }); - - it("send NFT to another NFT (by not-an-owner)", async () => { - const originalOwnerUri = alice; - - const collectionId = await createTestCollection(alice); - - const author = alice; - const attacker = bob; - - const parentNftId = await mintNft(api, author, originalOwnerUri, collectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, author, originalOwnerUri, collectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; - - const tx = sendNft(api, "sent", attacker, collectionId, childNftId, newOwnerNFT); - - await expectTxFailure(/rmrkCore\.NoPermission/, tx); - - const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT); - expect(isChild).to.be.false; - }); - - it("[negative] send NFT to non-existing NFT", async () => { - const originalOwnerUri = alice; - - const collectionId = await createTestCollection(alice); - - const parentNftId = maxNftId; - const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; - - const tx = sendNft(api, "sent", alice, collectionId, childNftId, newOwnerNFT); - - await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); - - const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT); - expect(isChild).to.be.false; - }); - - it("send NFT to another NFT owned by another user", async () => { - const ownerAlice = alice; - const ownerBob = bob; - - const aliceCollectionId = await createTestCollection(alice); - const bobCollectionId = await createTestCollection(bob); - - const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; - - await sendNft(api, "pending", bob, bobCollectionId, childNftId, newOwnerNFT); - }); - - it("[negative] unable to send NFT to itself", async () => { - const nftOwner = alice; - const collectionId = await createTestCollection(alice); - - const nftId = await mintNft(api, alice, nftOwner, collectionId, "ouroboros-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [collectionId, nftId]; - - const tx = sendNft(api, "sent", alice, collectionId, nftId, newOwnerNFT); - - await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx); - - const isChild = await isNftChildOfAnother(api, collectionId, nftId, newOwnerNFT); - expect(isChild).to.be.false; - }); - - it("[negative] unable to send NFT to child NFT", async () => { - const originalOwnerUri = alice; - - const collectionId = await createTestCollection(alice); - - const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "child-nft-metadata"); - - const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; - - await sendNft(api, "sent", alice, collectionId, childNftId, newOwnerNFT); - - const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT); - expect(isChild).to.be.true; - - const descendentOwner: NftIdTuple = [collectionId, childNftId]; - const tx = sendNft(api, "sent", alice, collectionId, parentNftId, descendentOwner); - - await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx); - const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, descendentOwner); - expect(isOuroboros).to.be.false; - }); - - it("[negative] unable to send NFT to descendent NFT", async () => { - const originalOwnerUri = alice; - - const collectionId = await createTestCollection(alice); - - const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "child-nft-metadata"); - const grandsonNftId = await mintNft(api, alice, originalOwnerUri, collectionId, "grandson-nft-metadata"); - - const ownerParentNFT: NftIdTuple = [collectionId, parentNftId]; - - await sendNft(api, "sent", alice, collectionId, childNftId, ownerParentNFT); - - const isChild = await isNftChildOfAnother(api, collectionId, childNftId, ownerParentNFT); - expect(isChild).to.be.true; - - const ownerChildNFT: NftIdTuple = [collectionId, childNftId]; - await sendNft(api, "sent", alice, collectionId, grandsonNftId, ownerChildNFT); - - const isGrandson = await isNftChildOfAnother(api, collectionId, grandsonNftId, ownerChildNFT); - expect(isGrandson).to.be.true; - - const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId]; - const tx = sendNft(api, "sent", alice, collectionId, parentNftId, ownerGrandsonNFT); - - await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx); - const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, ownerGrandsonNFT); - expect(isOuroboros).to.be.false; - }); - - it("send nested NFT to another user", async () => { - const originalOwner = alice; - const newOwner = bob; - - const collectionId = await createTestCollection(alice); - - const parentNftId = await mintNft(api, alice, originalOwner, collectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, alice, originalOwner, collectionId, "child-nft-metadata"); - - const parentNftTuple: NftIdTuple = [collectionId, parentNftId]; - - await sendNft(api, "sent", originalOwner, collectionId, childNftId, parentNftTuple); - - await sendNft(api, "sent", originalOwner, collectionId, childNftId, newOwner); - }); - - it("[negative] send nested NFT to another user (by a not-root-owner)", async () => { - const originalOwner = alice; - const newOwner = bob; - - const collectionId = await createTestCollection(alice); - - const parentNftId = await mintNft(api, alice, originalOwner, collectionId, "parent-nft-metadata"); - const childNftId = await mintNft(api, alice, originalOwner, collectionId, "child-nft-metadata"); - - const parentNftTuple: NftIdTuple = [collectionId, parentNftId]; - - await sendNft(api, "sent", originalOwner, collectionId, childNftId, parentNftTuple); - - const tx = sendNft(api, "sent", newOwner, collectionId, childNftId, newOwner); - - await expectTxFailure(/rmrkCore\.NoPermission/, tx); - }); - - after(() => { api.disconnect(); }); + let api: any; + before(async () => { + api = await getApiConnection(); + }); + + const maxNftId = 0xffffffff; + + const alice = "//Alice"; + const bob = "//Bob"; + + const createTestCollection = async (issuerUri: string) => { + return await createCollection( + api, + issuerUri, + "nft-collection-metadata", + null, + "nft-collection" + ); + }; + + it("send NFT to another user", async () => { + const originalOwnerUri = alice; + const newOwnerUri = bob; + + const collectionId = await createTestCollection(alice); + + const nftId = await mintNft( + api, + 300, + alice, + originalOwnerUri, + collectionId, + "nft-metadata" + ); + + await sendNft( + api, + "sent", + originalOwnerUri, + collectionId, + nftId, + newOwnerUri + ); + }); + + it("[negative] unable to send non-existing NFT", async () => { + const originalOwnerUri = alice; + const newOwnerUri = bob; + + const collectionId = 0; + const tx = sendNft( + api, + "sent", + originalOwnerUri, + collectionId, + maxNftId, + newOwnerUri + ); + + await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); + }); + + it("[negative] unable to send NFT by a not-an-owner", async () => { + const originalOwnerUri = alice; + const newOwnerUri = bob; + + const collectionId = await createTestCollection(alice); + + const nftId = await mintNft( + api, + 310, + alice, + originalOwnerUri, + collectionId, + "nft-metadata" + ); + + const tx = sendNft( + api, + "sent", + newOwnerUri, + collectionId, + nftId, + newOwnerUri + ); + await expectTxFailure(/rmrkCore\.NoPermission/, tx); + }); + + it("send NFT to another NFT (same owner)", async () => { + const originalOwnerUri = alice; + + const collectionId = await createTestCollection(alice); + + const parentNftId = await mintNft( + api, + 320, + alice, + originalOwnerUri, + collectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 1, + alice, + originalOwnerUri, + collectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; + + await sendNft(api, "sent", alice, collectionId, childNftId, newOwnerNFT); + + const isChild = await isNftChildOfAnother( + api, + collectionId, + childNftId, + newOwnerNFT + ); + expect(isChild).to.be.true; + }); + + it("[negative] send non-existing NFT to another NFT", async () => { + const originalOwnerUri = alice; + + const collectionId = await createTestCollection(alice); + + const parentNftId = await mintNft( + api, + 330, + alice, + originalOwnerUri, + collectionId, + "parent-nft-metadata" + ); + const childNftId = maxNftId; + + const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; + + const tx = sendNft( + api, + "sent", + alice, + collectionId, + childNftId, + newOwnerNFT + ); + + await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); + + const isChild = await isNftChildOfAnother( + api, + collectionId, + childNftId, + newOwnerNFT + ); + expect(isChild).to.be.false; + }); + + it("send NFT to another NFT (by not-an-owner)", async () => { + const originalOwnerUri = alice; + + const collectionId = await createTestCollection(alice); + + const author = alice; + const attacker = bob; + + const parentNftId = await mintNft( + api, + 340, + author, + originalOwnerUri, + collectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 341, + author, + originalOwnerUri, + collectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; + + const tx = sendNft( + api, + "sent", + attacker, + collectionId, + childNftId, + newOwnerNFT + ); + + await expectTxFailure(/rmrkCore\.NoPermission/, tx); + + const isChild = await isNftChildOfAnother( + api, + collectionId, + childNftId, + newOwnerNFT + ); + expect(isChild).to.be.false; + }); + + it("[negative] send NFT to non-existing NFT", async () => { + const originalOwnerUri = alice; + + const collectionId = await createTestCollection(alice); + + const parentNftId = maxNftId; + const childNftId = await mintNft( + api, + 350, + alice, + originalOwnerUri, + collectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; + + const tx = sendNft( + api, + "sent", + alice, + collectionId, + childNftId, + newOwnerNFT + ); + + await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); + + const isChild = await isNftChildOfAnother( + api, + collectionId, + childNftId, + newOwnerNFT + ); + expect(isChild).to.be.false; + }); + + it("send NFT to another NFT owned by another user", async () => { + const ownerAlice = alice; + const ownerBob = bob; + + const aliceCollectionId = await createTestCollection(alice); + const bobCollectionId = await createTestCollection(bob); + + const parentNftId = await mintNft( + api, + 360, + alice, + ownerAlice, + aliceCollectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 361, + bob, + ownerBob, + bobCollectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId]; + + await sendNft( + api, + "pending", + bob, + bobCollectionId, + childNftId, + newOwnerNFT + ); + }); + + it("[negative] unable to send NFT to itself", async () => { + const nftOwner = alice; + const collectionId = await createTestCollection(alice); + + const nftId = await mintNft( + api, + 370, + alice, + nftOwner, + collectionId, + "ouroboros-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [collectionId, nftId]; + + const tx = sendNft(api, "sent", alice, collectionId, nftId, newOwnerNFT); + + await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx); + + const isChild = await isNftChildOfAnother( + api, + collectionId, + nftId, + newOwnerNFT + ); + expect(isChild).to.be.false; + }); + + it("[negative] unable to send NFT to child NFT", async () => { + const originalOwnerUri = alice; + + const collectionId = await createTestCollection(alice); + + const parentNftId = await mintNft( + api, + 380, + alice, + originalOwnerUri, + collectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 381, + alice, + originalOwnerUri, + collectionId, + "child-nft-metadata" + ); + + const newOwnerNFT: NftIdTuple = [collectionId, parentNftId]; + + await sendNft(api, "sent", alice, collectionId, childNftId, newOwnerNFT); + + const isChild = await isNftChildOfAnother( + api, + collectionId, + childNftId, + newOwnerNFT + ); + expect(isChild).to.be.true; + + const descendentOwner: NftIdTuple = [collectionId, childNftId]; + const tx = sendNft( + api, + "sent", + alice, + collectionId, + parentNftId, + descendentOwner + ); + + await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx); + const isOuroboros = await isNftChildOfAnother( + api, + collectionId, + parentNftId, + descendentOwner + ); + expect(isOuroboros).to.be.false; + }); + + it("[negative] unable to send NFT to descendent NFT", async () => { + const originalOwnerUri = alice; + + const collectionId = await createTestCollection(alice); + + const parentNftId = await mintNft( + api, + 390, + alice, + originalOwnerUri, + collectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 391, + alice, + originalOwnerUri, + collectionId, + "child-nft-metadata" + ); + const grandsonNftId = await mintNft( + api, + 392, + alice, + originalOwnerUri, + collectionId, + "grandson-nft-metadata" + ); + + const ownerParentNFT: NftIdTuple = [collectionId, parentNftId]; + + await sendNft(api, "sent", alice, collectionId, childNftId, ownerParentNFT); + + const isChild = await isNftChildOfAnother( + api, + collectionId, + childNftId, + ownerParentNFT + ); + expect(isChild).to.be.true; + + const ownerChildNFT: NftIdTuple = [collectionId, childNftId]; + await sendNft( + api, + "sent", + alice, + collectionId, + grandsonNftId, + ownerChildNFT + ); + + const isGrandson = await isNftChildOfAnother( + api, + collectionId, + grandsonNftId, + ownerChildNFT + ); + expect(isGrandson).to.be.true; + + const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId]; + const tx = sendNft( + api, + "sent", + alice, + collectionId, + parentNftId, + ownerGrandsonNFT + ); + + await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx); + const isOuroboros = await isNftChildOfAnother( + api, + collectionId, + parentNftId, + ownerGrandsonNFT + ); + expect(isOuroboros).to.be.false; + }); + + it("send nested NFT to another user", async () => { + const originalOwner = alice; + const newOwner = bob; + + const collectionId = await createTestCollection(alice); + + const parentNftId = await mintNft( + api, + 395, + alice, + originalOwner, + collectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 396, + alice, + originalOwner, + collectionId, + "child-nft-metadata" + ); + + const parentNftTuple: NftIdTuple = [collectionId, parentNftId]; + + await sendNft( + api, + "sent", + originalOwner, + collectionId, + childNftId, + parentNftTuple + ); + + await sendNft( + api, + "sent", + originalOwner, + collectionId, + childNftId, + newOwner + ); + }); + + it("[negative] send nested NFT to another user (by a not-root-owner)", async () => { + const originalOwner = alice; + const newOwner = bob; + + const collectionId = await createTestCollection(alice); + + const parentNftId = await mintNft( + api, + 397, + alice, + originalOwner, + collectionId, + "parent-nft-metadata" + ); + const childNftId = await mintNft( + api, + 398, + alice, + originalOwner, + collectionId, + "child-nft-metadata" + ); + + const parentNftTuple: NftIdTuple = [collectionId, parentNftId]; + + await sendNft( + api, + "sent", + originalOwner, + collectionId, + childNftId, + parentNftTuple + ); + + const tx = sendNft( + api, + "sent", + newOwner, + collectionId, + childNftId, + newOwner + ); + + await expectTxFailure(/rmrkCore\.NoPermission/, tx); + }); + + after(() => { + api.disconnect(); + }); }); diff --git a/tests/src/setNftProperty.test.ts b/tests/src/setNftProperty.test.ts index 5d2b86c8..28c365d3 100644 --- a/tests/src/setNftProperty.test.ts +++ b/tests/src/setNftProperty.test.ts @@ -4,82 +4,177 @@ import { expectTxFailure } from "./util/helpers"; import { createCollection, mintNft, sendNft, setNftProperty } from "./util/tx"; describe("integration test: set NFT property", () => { - let api: any; - before(async () => { api = await getApiConnection(); }); - - const alice = "//Alice"; - const bob = "//Bob"; - - const createTestCollection = async (issuerUri: string) => { - return await createCollection( - api, - issuerUri, - "setprop-nft-collection-metadata", - null, - "setprop" - ); - }; - - it("set NFT property", async () => { - const ownerAlice = alice; - - const collectionId = await createTestCollection(alice); - const nftId = await mintNft(api, alice, ownerAlice, collectionId, "prop-nft"); - - await setNftProperty(api, alice, collectionId, nftId, 'test-key', 'test-key-value'); - await setNftProperty(api, alice, collectionId, nftId, 'test-key', 'updated-key-value'); - await setNftProperty(api, alice, collectionId, nftId, 'second-test-key', 'second-test-key-value'); - }); - - it("[negative] unable to set a property of non-existing NFT", async () => { - const collectionId = 0; - const maxNftId = 0xFFFFFFFF; - - const tx = setNftProperty(api, alice, collectionId, maxNftId, 'test-key', 'test-value'); - - await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); - }); - - it("[negative] unable to set a property by not-an-owner", async () => { - const ownerAlice = alice; - - const collectionId = await createTestCollection(alice); - const nftId = await mintNft(api, alice, ownerAlice, collectionId, "prop-nft"); - - const tx = setNftProperty(api, bob, collectionId, nftId, 'test-key', 'test-key-value'); - - await expectTxFailure(/rmrkCore\.NoPermission/, tx); - }); - - it("set a property to nested NFT", async () => { - const ownerAlice = alice; - - const collectionId = await createTestCollection(alice); - const parentNftId = await mintNft(api, alice, ownerAlice, collectionId, "prop-parent-nft"); - const childNftId = await mintNft(api, alice, ownerAlice, collectionId, "prop-child-nft"); - - const ownerNft: NftIdTuple = [collectionId, parentNftId]; - - await sendNft(api, "sent", ownerAlice, collectionId, childNftId, ownerNft); - - await setNftProperty(api, alice, collectionId, childNftId, 'test-key', 'test-key-value'); - }); - - it("[negative] set a property to nested NFT (by not-root-owner)", async () => { - const ownerAlice = alice; - - const collectionId = await createTestCollection(alice); - const parentNftId = await mintNft(api, alice, ownerAlice, collectionId, "prop-parent-nft"); - const childNftId = await mintNft(api, alice, ownerAlice, collectionId, "prop-child-nft"); - - const ownerNft: NftIdTuple = [collectionId, parentNftId]; - - await sendNft(api, "sent", ownerAlice, collectionId, childNftId, ownerNft); - - const tx = setNftProperty(api, bob, collectionId, childNftId, 'test-key', 'test-key-value'); - - await expectTxFailure(/rmrkCore\.NoPermission/, tx); - }); - - after(() => { api.disconnect(); }); + let api: any; + before(async () => { + api = await getApiConnection(); + }); + + const alice = "//Alice"; + const bob = "//Bob"; + + const createTestCollection = async (issuerUri: string) => { + return await createCollection( + api, + issuerUri, + "setprop-nft-collection-metadata", + null, + "setprop" + ); + }; + + it("set NFT property", async () => { + const ownerAlice = alice; + + const collectionId = await createTestCollection(alice); + const nftId = await mintNft( + api, + 300, + alice, + ownerAlice, + collectionId, + "prop-nft" + ); + + await setNftProperty( + api, + alice, + collectionId, + nftId, + "test-key", + "test-key-value" + ); + await setNftProperty( + api, + alice, + collectionId, + nftId, + "test-key", + "updated-key-value" + ); + await setNftProperty( + api, + alice, + collectionId, + nftId, + "second-test-key", + "second-test-key-value" + ); + }); + + it("[negative] unable to set a property of non-existing NFT", async () => { + const collectionId = 0; + const maxNftId = 0xffffffff; + + const tx = setNftProperty( + api, + alice, + collectionId, + maxNftId, + "test-key", + "test-value" + ); + + await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); + }); + + it("[negative] unable to set a property by not-an-owner", async () => { + const ownerAlice = alice; + + const collectionId = await createTestCollection(alice); + const nftId = await mintNft( + api, + 301, + alice, + ownerAlice, + collectionId, + "prop-nft" + ); + + const tx = setNftProperty( + api, + bob, + collectionId, + nftId, + "test-key", + "test-key-value" + ); + + await expectTxFailure(/rmrkCore\.NoPermission/, tx); + }); + + it("set a property to nested NFT", async () => { + const ownerAlice = alice; + + const collectionId = await createTestCollection(alice); + const parentNftId = await mintNft( + api, + 302, + alice, + ownerAlice, + collectionId, + "prop-parent-nft" + ); + const childNftId = await mintNft( + api, + 303, + alice, + ownerAlice, + collectionId, + "prop-child-nft" + ); + + const ownerNft: NftIdTuple = [collectionId, parentNftId]; + + await sendNft(api, "sent", ownerAlice, collectionId, childNftId, ownerNft); + + await setNftProperty( + api, + alice, + collectionId, + childNftId, + "test-key", + "test-key-value" + ); + }); + + it("[negative] set a property to nested NFT (by not-root-owner)", async () => { + const ownerAlice = alice; + + const collectionId = await createTestCollection(alice); + const parentNftId = await mintNft( + api, + 0, + alice, + ownerAlice, + collectionId, + "prop-parent-nft" + ); + const childNftId = await mintNft( + api, + 304, + alice, + ownerAlice, + collectionId, + "prop-child-nft" + ); + + const ownerNft: NftIdTuple = [collectionId, parentNftId]; + + await sendNft(api, "sent", ownerAlice, collectionId, childNftId, ownerNft); + + const tx = setNftProperty( + api, + bob, + collectionId, + childNftId, + "test-key", + "test-key-value" + ); + + await expectTxFailure(/rmrkCore\.NoPermission/, tx); + }); + + after(() => { + api.disconnect(); + }); }); diff --git a/tests/src/setResourcePriorities.test.ts b/tests/src/setResourcePriorities.test.ts index c8046f99..fa0460af 100644 --- a/tests/src/setResourcePriorities.test.ts +++ b/tests/src/setResourcePriorities.test.ts @@ -1,55 +1,85 @@ -import { getApiConnection } from './substrate/substrate-api'; -import { expectTxFailure } from './util/helpers'; -import { mintNft, createCollection, setResourcePriorities } from './util/tx'; +import { getApiConnection } from "./substrate/substrate-api"; +import { expectTxFailure } from "./util/helpers"; +import { mintNft, createCollection, setResourcePriorities } from "./util/tx"; describe("integration test: set NFT resource priorities", () => { - let api: any; - before(async () => { api = await getApiConnection(); }); + let api: any; + before(async () => { + api = await getApiConnection(); + }); - const alice = '//Alice'; - const bob = '//Bob'; + const alice = "//Alice"; + const bob = "//Bob"; - const createTestCollection = (issuerUri: string) => { - return createCollection( - api, - issuerUri, - 'resprio-collection-metadata', - null, - 'resprio' - ); - }; + const createTestCollection = (issuerUri: string) => { + return createCollection( + api, + issuerUri, + "resprio-collection-metadata", + null, + "resprio" + ); + }; - it("set NFT resource priorities", async () => { - const owner = alice; + it("set NFT resource priorities", async () => { + const owner = alice; - const collectionId = await createTestCollection(alice); - const nftId = await mintNft(api, alice, owner, collectionId, 'resprio-nft-metadata'); + const collectionId = await createTestCollection(alice); + const nftId = await mintNft( + api, + 0, + alice, + owner, + collectionId, + "resprio-nft-metadata" + ); - await setResourcePriorities(api, alice, collectionId, nftId, [10, 42]); - }); + await setResourcePriorities(api, alice, collectionId, nftId, [10, 42]); + }); - it("[negative] set NFT resource priorities by a not-an-owner", async () => { - const owner = alice; - const attacker = bob; + it("[negative] set NFT resource priorities by a not-an-owner", async () => { + const owner = alice; + const attacker = bob; - const collectionId = await createTestCollection(alice); - const nftId = await mintNft(api, alice, owner, collectionId, 'resprio-nft-metadata'); + const collectionId = await createTestCollection(alice); + const nftId = await mintNft( + api, + 0, + alice, + owner, + collectionId, + "resprio-nft-metadata" + ); - const tx = setResourcePriorities(api, attacker, collectionId, nftId, [10, 42]); + const tx = setResourcePriorities( + api, + attacker, + collectionId, + nftId, + [10, 42] + ); - await expectTxFailure(/rmrkCore\.NoPermission/, tx); - }); + await expectTxFailure(/rmrkCore\.NoPermission/, tx); + }); - it("[negative] set NFT resource priorities to non-existing NFT", async () => { - const owner = alice; + it("[negative] set NFT resource priorities to non-existing NFT", async () => { + const owner = alice; - const collectionId = 0; - const maxNftId = 0xFFFFFFFF; + const collectionId = 0; + const maxNftId = 0xffffffff; - const tx = setResourcePriorities(api, alice, collectionId, maxNftId, [10, 42]); + const tx = setResourcePriorities( + api, + alice, + collectionId, + maxNftId, + [10, 42] + ); - await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); - }); + await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx); + }); - after(() => { api.disconnect(); }); + after(() => { + api.disconnect(); + }); }); diff --git a/tests/src/util/tx.ts b/tests/src/util/tx.ts index 2d4be901..f67c84b9 100644 --- a/tests/src/util/tx.ts +++ b/tests/src/util/tx.ts @@ -256,6 +256,7 @@ export async function setNftProperty( export async function mintNft( api: ApiPromise, + id: number, issuerUri: string, ownerUri: string | null, collectionId: number, @@ -263,7 +264,9 @@ export async function mintNft( recipientUri: string | null = null, royalty: number | null = null, transferable: boolean = true, - resources: { basic?: any; composable?: any; slot?: any }[] | null = null + resources: + | { resource: { basic?: any; composable?: any; slot?: any }; id: number }[] + | null = null ): Promise { let nftId = 0; const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format; @@ -283,6 +286,7 @@ export async function mintNft( const tx = api.tx.rmrkCore.mintNft( owner, + id, collectionId, recipient, royaltyOptional, @@ -376,16 +380,16 @@ export async function mintNft( let typedNftResource = null; if ( - resource.basic && + resource.resource.basic && Object.prototype.hasOwnProperty.call(nftResource, "Basic") ) { - typedResource = resource.basic!; + typedResource = resource.resource.basic!; typedNftResource = nftResource["Basic" as NftResourceKey]!; } else if ( - resource.composable && + resource.resource.composable && Object.prototype.hasOwnProperty.call(nftResource, "Composable") ) { - typedResource = resource.composable!; + typedResource = resource.resource.composable!; typedNftResource = nftResource[ "Composable" as NftResourceKey ]! as any; @@ -399,10 +403,10 @@ export async function mintNft( continue; } } else if ( - resource.slot && + resource.resource.slot && Object.prototype.hasOwnProperty.call(nftResource, "Slot") ) { - typedResource = resource.slot!; + typedResource = resource.resource.slot!; typedNftResource = nftResource["Slot" as NftResourceKey]! as any; if ( (typedResource.slot != typedNftResource.slot && @@ -1040,11 +1044,12 @@ async function executeResourceCreation( export async function addNftBasicResource( api: ApiPromise, + resId: number, issuerUri: string, expectedStatus: "pending" | "added", collectionId: number, nftId: number, - metadata: string | null + metadata: string ): Promise { const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format; const issuer = privateKey(issuerUri, Number(ss58Format)); @@ -1056,7 +1061,8 @@ export async function addNftBasicResource( const tx = api.tx.rmrkCore.addBasicResource( collectionId, nftId, - basicResource + basicResource, + resId ); const resource = await executeResourceCreation( @@ -1093,6 +1099,7 @@ export async function addNftBasicResource( export async function addNftComposableResource( api: ApiPromise, + resId: number, issuerUri: string, expectedStatus: "pending" | "added", collectionId: number, @@ -1118,7 +1125,8 @@ export async function addNftComposableResource( const tx = api.tx.rmrkCore.addComposableResource( collectionId, nftId, - composableResource + composableResource, + resId ); const resource = await executeResourceCreation( @@ -1163,6 +1171,7 @@ export async function addNftComposableResource( export async function addNftSlotResource( api: ApiPromise, + resId: number, issuerUri: string, expectedStatus: "pending" | "added", collectionId: number, @@ -1180,7 +1189,12 @@ export async function addNftSlotResource( slot: slotId, }) as SlotResource; - const tx = api.tx.rmrkCore.addSlotResource(collectionId, nftId, slotResource); + const tx = api.tx.rmrkCore.addSlotResource( + collectionId, + nftId, + slotResource, + resId + ); const resource = await executeResourceCreation( api, diff --git a/traits/src/lib.rs b/traits/src/lib.rs index cdbcc322..a338bdfb 100644 --- a/traits/src/lib.rs +++ b/traits/src/lib.rs @@ -8,23 +8,24 @@ pub mod base; pub mod collection; pub mod nft; pub mod part; +pub mod phantom_type; pub mod priority; pub mod property; pub mod resource; -pub mod theme; -pub mod phantom_type; mod serialize; +pub mod theme; pub use base::{Base, BaseInfo}; pub use part::{EquippableList, FixedPart, PartType, SlotPart}; pub use theme::{Theme, ThemeProperty}; // pub use part::{PartInfo}; pub use collection::{Collection, CollectionInfo}; -pub use nft::{AccountIdOrCollectionNftTuple, Nft, NftInfo, RoyaltyInfo, NftChild}; +pub use nft::{AccountIdOrCollectionNftTuple, Nft, NftChild, NftInfo, RoyaltyInfo}; pub use priority::Priority; pub use property::{Property, PropertyInfo}; pub use resource::{ - BasicResource, ComposableResource, Resource, ResourceInfo, ResourceTypes, SlotResource, + BasicResource, ComposableResource, Resource, ResourceInfo, ResourceInfoMin, ResourceTypes, + SlotResource, }; pub mod primitives { pub type CollectionId = u32; diff --git a/traits/src/nft.rs b/traits/src/nft.rs index f9cf659c..aba1dd67 100644 --- a/traits/src/nft.rs +++ b/traits/src/nft.rs @@ -78,6 +78,7 @@ pub trait Nft { fn nft_mint( sender: AccountId, owner: AccountId, + nft_id: NftId, collection_id: CollectionId, royalty_recipient: Option, royalty_amount: Option, @@ -88,6 +89,7 @@ pub trait Nft { fn nft_mint_directly_to_nft( sender: AccountId, owner: (CollectionId, NftId), + nft_id: NftId, collection_id: CollectionId, royalty_recipient: Option, royalty_amount: Option, diff --git a/traits/src/resource.rs b/traits/src/resource.rs index f134a76f..86e0d3a0 100644 --- a/traits/src/resource.rs +++ b/traits/src/resource.rs @@ -18,8 +18,8 @@ use crate::{primitives::*, serialize}; #[cfg_attr(feature = "std", serde(bound = "BoundedString: AsRef<[u8]>"))] pub struct BasicResource { /// Reference to IPFS location of metadata - #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))] - pub metadata: Option, + #[cfg_attr(feature = "std", serde(with = "serialize::vec"))] + pub metadata: BoundedString, } #[derive(Encode, Decode, Eq, PartialEq, Clone, RuntimeDebug, TypeInfo, MaxEncodedLen)] @@ -94,9 +94,6 @@ pub enum ResourceTypes { "#) )] pub struct ResourceInfo { - /// id is a 5-character string of reasonable uniqueness. - /// The combination of base ID and resource id should be unique across the entire RMRK - /// ecosystem which pub id: ResourceId, /// Resource @@ -110,6 +107,20 @@ pub struct ResourceInfo { pub pending_removal: bool, } +#[derive(Encode, Decode, Eq, PartialEq, Clone, RuntimeDebug, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(Serialize))] +#[cfg_attr( + feature = "std", + serde(bound = r#" + BoundedString: AsRef<[u8]>, + BoundedParts: AsRef<[PartId]> + "#) +)] +pub struct ResourceInfoMin { + pub id: ResourceId, + pub resource: ResourceTypes, +} + /// Abstraction over a Resource system. pub trait Resource { fn resource_add( @@ -118,6 +129,7 @@ pub trait Resource { nft_id: NftId, resource: ResourceTypes, adding_on_mint: bool, + resource_id: ResourceId, ) -> Result; fn accept( sender: AccountId,