From 068bdc4c12dbc36ea168698b25adeaca0b074c45 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Thu, 5 Oct 2023 12:08:40 +0530 Subject: [PATCH 01/11] fix: update subxt version and kintsugi metadata --- .github/workflows/cargo-test.yml | 2 +- Cargo.lock | 780 +++++++++++++++++++++- runner/Cargo.toml | 2 +- runtime/Cargo.toml | 2 +- runtime/metadata-parachain-kintsugi.scale | Bin 304981 -> 0 bytes runtime/src/assets.rs | 2 +- runtime/src/error.rs | 2 +- runtime/src/lib.rs | 1 - runtime/src/rpc.rs | 8 +- runtime/src/utils/signer.rs | 4 +- 10 files changed, 765 insertions(+), 38 deletions(-) delete mode 100644 runtime/metadata-parachain-kintsugi.scale diff --git a/.github/workflows/cargo-test.yml b/.github/workflows/cargo-test.yml index dc9287c3a..4b8a8b414 100644 --- a/.github/workflows/cargo-test.yml +++ b/.github/workflows/cargo-test.yml @@ -21,7 +21,7 @@ jobs: strategy: matrix: metadata: - - parachain-metadata-interlay +# - parachain-metadata-interlay - parachain-metadata-kintsugi steps: diff --git a/Cargo.lock b/Cargo.lock index 801e479dd..2b623c8ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,6 +36,41 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if 1.0.0", + "cipher", + "cpufeatures", + "opaque-debug 0.3.0", +] + +[[package]] +name = "aes-gcm" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.7.6" @@ -168,6 +203,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.5.2" @@ -180,6 +224,63 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue", + "fastrand 2.0.0", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock", + "autocfg", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock", + "autocfg", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-lite", + "log", + "parking", + "polling", + "rustix 0.37.23", + "slab", + "socket2", + "waker-fn", +] + [[package]] name = "async-lock" version = "2.7.0" @@ -189,6 +290,41 @@ dependencies = [ "event-listener", ] +[[package]] +name = "async-net" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" +dependencies = [ + "async-io", + "async-lock", + "autocfg", + "blocking", + "cfg-if 1.0.0", + "event-listener", + "futures-lite", + "rustix 0.37.23", + "signal-hook", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-task" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921" + [[package]] name = "async-trait" version = "0.1.72" @@ -200,6 +336,18 @@ dependencies = [ "syn 2.0.27", ] +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "atty" version = "0.2.14" @@ -320,6 +468,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "bip39" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +dependencies = [ + "bitcoin_hashes 0.11.0", +] + [[package]] name = "bitcoin" version = "0.30.1" @@ -393,6 +550,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b375d62f341cef9cd9e77793ec8f1db3fc9ce2e4d57e982c8fe697a2c16af3b6" +[[package]] +name = "bitcoin_hashes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" + [[package]] name = "bitcoin_hashes" version = "0.12.0" @@ -460,6 +623,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + [[package]] name = "blake2b_simd" version = "1.0.1" @@ -468,7 +641,7 @@ checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec 0.7.4", - "constant_time_eq", + "constant_time_eq 0.2.6", ] [[package]] @@ -510,6 +683,22 @@ dependencies = [ "byte-tools", ] +[[package]] +name = "blocking" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94c4ef1f913d78636d78d538eec1f18de81e481f44b1be0a81060090530846e1" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "fastrand 2.0.0", + "futures-io", + "futures-lite", + "piper", + "tracing", +] + [[package]] name = "bounded-collections" version = "0.1.8" @@ -528,6 +717,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +[[package]] +name = "bs58" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +dependencies = [ + "tinyvec", +] + [[package]] name = "bstr" version = "1.6.0" @@ -624,6 +822,31 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chacha20" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" +dependencies = [ + "cfg-if 1.0.0", + "cipher", + "cpufeatures", + "zeroize", +] + +[[package]] +name = "chacha20poly1305" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" version = "0.4.26" @@ -639,6 +862,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "clang-sys" version = "1.6.1" @@ -697,12 +929,27 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "concurrent-queue" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "const-oid" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "constant_time_eq" version = "0.2.6" @@ -801,6 +1048,16 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.16" @@ -858,6 +1115,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher", +] + [[package]] name = "curve25519-dalek" version = "2.1.3" @@ -884,6 +1150,46 @@ dependencies = [ "zeroize", ] +[[package]] +name = "curve25519-dalek" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "curve25519-dalek-derive", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.27", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", + "zeroize", +] + [[package]] name = "darling" version = "0.14.4" @@ -1273,6 +1579,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + [[package]] name = "fastrand" version = "2.0.0" @@ -1317,6 +1632,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" + [[package]] name = "fixed-hash" version = "0.8.0" @@ -1405,6 +1726,18 @@ dependencies = [ "serde", ] +[[package]] +name = "frame-metadata" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +dependencies = [ + "cfg-if 1.0.0", + "parity-scale-codec", + "scale-info", + "serde", +] + [[package]] name = "frame-support" version = "4.0.0-dev" @@ -1412,7 +1745,7 @@ source = "git+https://github.com/paritytech//substrate?branch=polkadot-v0.9.42#f dependencies = [ "bitflags 1.3.2", "environmental", - "frame-metadata", + "frame-metadata 15.1.0", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -1559,6 +1892,21 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + [[package]] name = "futures-macro" version = "0.3.28" @@ -1658,10 +2006,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if 1.0.0", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +dependencies = [ + "opaque-debug 0.3.0", + "polyval", ] [[package]] @@ -1852,6 +2208,9 @@ name = "hashbrown" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +dependencies = [ + "serde", +] [[package]] name = "headers" @@ -2162,6 +2521,12 @@ dependencies = [ "hashbrown 0.14.0", ] +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + [[package]] name = "instant" version = "0.1.12" @@ -2196,6 +2561,12 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "intx" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f38a50a899dc47a6d0ed5508e7f601a2e34c3a85303514b5d137f3c10a0c75" + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2671,6 +3042,12 @@ version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +[[package]] +name = "lru" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" + [[package]] name = "mach" version = "0.3.2" @@ -2765,6 +3142,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + [[package]] name = "mime" version = "0.3.17" @@ -2928,6 +3317,18 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -3254,6 +3655,12 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" +[[package]] +name = "parking" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067" + [[package]] name = "parking_lot" version = "0.11.2" @@ -3326,6 +3733,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "peeking_take_while" version = "0.1.2" @@ -3376,6 +3792,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.0", + "futures-io", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -3392,6 +3819,51 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "platforms" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if 1.0.0", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "poly1305" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -4075,6 +4547,17 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + [[package]] name = "ryu" version = "1.0.15" @@ -4183,7 +4666,7 @@ dependencies = [ "base58", "blake2", "either", - "frame-metadata", + "frame-metadata 15.1.0", "parity-scale-codec", "scale-bits", "scale-decode", @@ -4224,7 +4707,7 @@ dependencies = [ "arrayvec 0.5.2", "curve25519-dalek 2.1.3", "getrandom 0.1.16", - "merlin", + "merlin 2.0.1", "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", @@ -4232,6 +4715,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "schnorrkel" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "curve25519-dalek-ng", + "merlin 3.0.0", + "rand_core 0.6.4", + "sha2 0.9.9", + "subtle-ng", + "zeroize", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -4605,6 +5104,12 @@ dependencies = [ "paste", ] +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "slab" version = "0.4.8" @@ -4636,6 +5141,120 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +[[package]] +name = "smol" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" +dependencies = [ + "async-channel", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-net", + "async-process", + "blocking", + "futures-lite", +] + +[[package]] +name = "smoldot" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cce5e2881b30bad7ef89f383a816ad0b22c45915911f28499026de4a76d20ee" +dependencies = [ + "arrayvec 0.7.4", + "async-lock", + "atomic", + "base64 0.21.2", + "bip39", + "blake2-rfc", + "bs58 0.5.0", + "crossbeam-queue", + "derive_more", + "ed25519-zebra", + "either", + "event-listener", + "fnv", + "futures-channel", + "futures-util", + "hashbrown 0.14.0", + "hex", + "hmac 0.12.1", + "itertools", + "libsecp256k1", + "merlin 3.0.0", + "no-std-net", + "nom", + "num-bigint 0.4.3", + "num-rational 0.4.1", + "num-traits", + "pbkdf2 0.12.2", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "ruzstd", + "schnorrkel 0.10.2", + "serde", + "serde_json", + "sha2 0.10.7", + "siphasher", + "slab", + "smallvec", + "smol", + "snow", + "soketto", + "tiny-keccak", + "twox-hash", + "wasmi 0.30.0", +] + +[[package]] +name = "smoldot-light" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2f7b4687b83ff244ef6137735ed5716ad37dcdf3ee16c4eb1a32fb9808fa47" +dependencies = [ + "async-lock", + "blake2-rfc", + "derive_more", + "either", + "event-listener", + "fnv", + "futures-channel", + "futures-util", + "hashbrown 0.14.0", + "hex", + "itertools", + "log", + "lru", + "parking_lot 0.12.1", + "rand 0.8.5", + "serde", + "serde_json", + "siphasher", + "slab", + "smol", + "smoldot", +] + +[[package]] +name = "snow" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9d1425eb528a21de2755c75af4c9b5d57f50a0d4c3b7f1828a4cd03f8ba155" +dependencies = [ + "aes-gcm", + "blake2", + "chacha20poly1305", + "curve25519-dalek 4.1.1", + "rand_core 0.6.4", + "rustc_version", + "sha2 0.10.7", + "subtle", +] + [[package]] name = "socket2" version = "0.4.9" @@ -4731,7 +5350,7 @@ dependencies = [ "bitflags 1.3.2", "blake2", "bounded-collections", - "bs58", + "bs58 0.4.0", "dyn-clonable", "ed25519-zebra", "futures 0.3.28", @@ -4741,7 +5360,7 @@ dependencies = [ "lazy_static", "libsecp256k1", "log", - "merlin", + "merlin 2.0.1", "parity-scale-codec", "parking_lot 0.12.1", "paste", @@ -4749,7 +5368,7 @@ dependencies = [ "rand 0.8.5", "regex", "scale-info", - "schnorrkel", + "schnorrkel 0.9.1", "secp256k1 0.24.3", "secrecy", "serde", @@ -4897,7 +5516,7 @@ name = "sp-metadata-ir" version = "0.1.0" source = "git+https://github.com/paritytech//substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ - "frame-metadata", + "frame-metadata 15.1.0", "parity-scale-codec", "scale-info", "sp-std 5.0.0", @@ -5095,7 +5714,7 @@ dependencies = [ "log", "parity-scale-codec", "sp-std 5.0.0", - "wasmi", + "wasmi 0.13.2", "wasmtime", ] @@ -5218,7 +5837,7 @@ checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", - "schnorrkel", + "schnorrkel 0.9.1", "sha2 0.9.9", "zeroize", ] @@ -5229,19 +5848,24 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + [[package]] name = "subxt" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31a734d66fa935fbda56ba6a71d7e969f424c8c5608d416ba8499d71d8cbfc1f" +checksum = "0ba02ada83ba2640c46e200a1758cc83ce876a16326d2c52ca5db41b7d6645ce" dependencies = [ "base58", "blake2", "derivative", "either", - "frame-metadata", + "frame-metadata 16.0.0", "futures 0.3.28", - "getrandom 0.2.10", "hex", "impl-serde 0.4.0", "jsonrpsee", @@ -5255,6 +5879,7 @@ dependencies = [ "serde", "serde_json", "sp-core-hashing 9.0.0", + "subxt-lightclient", "subxt-macro", "subxt-metadata", "thiserror", @@ -5263,11 +5888,11 @@ dependencies = [ [[package]] name = "subxt-codegen" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2f231d97c145c564bd544212c0cc0c29c09ff516af199f4ce00c8e055f8138" +checksum = "3213eb04567e710aa253b94de74337c7b663eea52114805b8723129763282779" dependencies = [ - "frame-metadata", + "frame-metadata 16.0.0", "heck", "hex", "jsonrpsee", @@ -5281,11 +5906,28 @@ dependencies = [ "tokio", ] +[[package]] +name = "subxt-lightclient" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439a235bedd0e460c110e5341d919ec3a27f9be3dd4c1c944daad8a9b54d396d" +dependencies = [ + "futures 0.3.28", + "futures-util", + "serde", + "serde_json", + "smoldot-light", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + [[package]] name = "subxt-macro" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e544e41e1c84b616632cd2f86862342868f62e11e4cd9062a9e3dbf5fc871f64" +checksum = "cfda460cc5f701785973382c589e9bb12c23bb8d825bfc3ac547b7c672aba1c0" dependencies = [ "darling 0.20.3", "proc-macro-error", @@ -5295,11 +5937,11 @@ dependencies = [ [[package]] name = "subxt-metadata" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01ce5044c81db3404d38c56f1e69d72eff72c54e5913c9bba4c0b58d376031f" +checksum = "0283bd02163913fbd0a5153d0b179533e48b239b953fa4e43baa27c73f18861c" dependencies = [ - "frame-metadata", + "frame-metadata 16.0.0", "parity-scale-codec", "scale-info", "sp-core-hashing 9.0.0", @@ -5387,7 +6029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998" dependencies = [ "cfg-if 1.0.0", - "fastrand", + "fastrand 2.0.0", "redox_syscall 0.3.5", "rustix 0.38.4", "windows-sys 0.48.0", @@ -5417,6 +6059,26 @@ dependencies = [ "thiserror-impl", ] +[[package]] +name = "thiserror-core" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "thiserror-impl" version = "1.0.44" @@ -5467,6 +6129,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -5835,6 +6506,16 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + [[package]] name = "untrusted" version = "0.7.1" @@ -5936,6 +6617,12 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + [[package]] name = "want" version = "0.3.1" @@ -6068,7 +6755,21 @@ checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" dependencies = [ "parity-wasm", "wasmi-validation", - "wasmi_core", + "wasmi_core 0.2.1", +] + +[[package]] +name = "wasmi" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51fb5c61993e71158abf5bb863df2674ca3ec39ed6471c64f07aeaf751d67b4" +dependencies = [ + "intx", + "smallvec", + "spin 0.9.8", + "wasmi_arena", + "wasmi_core 0.12.0", + "wasmparser-nostd", ] [[package]] @@ -6080,6 +6781,12 @@ dependencies = [ "parity-wasm", ] +[[package]] +name = "wasmi_arena" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "401c1f35e413fac1846d4843745589d9ec678977ab35a384db8ae7830525d468" + [[package]] name = "wasmi_core" version = "0.2.1" @@ -6093,6 +6800,18 @@ dependencies = [ "num-traits", ] +[[package]] +name = "wasmi_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + [[package]] name = "wasmparser" version = "0.100.0" @@ -6103,6 +6822,15 @@ dependencies = [ "url 2.4.0", ] +[[package]] +name = "wasmparser-nostd" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724" +dependencies = [ + "indexmap-nostd", +] + [[package]] name = "wasmtime" version = "6.0.2" diff --git a/runner/Cargo.toml b/runner/Cargo.toml index 28400be4f..6d53cce74 100644 --- a/runner/Cargo.toml +++ b/runner/Cargo.toml @@ -24,7 +24,7 @@ signal-hook = "0.3.14" signal-hook-tokio = { version = "0.3.1", features = ["futures-v0_3"] } futures = "0.3.21" backoff = { version = "0.3.0", features = ["tokio"] } -subxt = { version = "0.29.0", default_features = false, features = ["jsonrpsee-ws"] } +subxt = { version = "0.30.0", default_features = false, features = ["jsonrpsee","native"] } sha2 = "0.8.2" [dev-dependencies] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 65a859fef..69d18bfa8 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -41,7 +41,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.42" } # Subxt dependencies -subxt = { version = "0.29.0", default_features = false, features = ["jsonrpsee-ws"] } +subxt = { version = "0.30.0", default_features = false, features = ["jsonrpsee","native"] } jsonrpsee = { version = "0.16", features = ["async-client", "client-ws-transport", "macros", "jsonrpsee-types", "client", "jsonrpsee-ws-client", "jsonrpsee-client-transport"] } bitcoin = { path = "../bitcoin" } diff --git a/runtime/metadata-parachain-kintsugi.scale b/runtime/metadata-parachain-kintsugi.scale deleted file mode 100644 index 8c557970e6044f3835e4ca4795dc6d7a128d5d11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304981 zcmeFa4QOQNc`yFHqoeh#Gfu~?oR066+vD4DGfHPC+O_Pzypi`xD`_J&(n{8cy-s%T z%+bt|G}+P2cs_Qe;D7@OB;Y^-2_)b`0tqCLLJBD)kU|Oxq~JmdDKwBk3JJ8}LJKLR zkiz{v&--!C%sHcv-IW^Of2o_*ob#Ud^Ld}|k3GNRz4Ox#i_~blSu8hNex}?yXm%R; znR2<&t#=kHPhS$k5sq{})SY~v`}Cz-^ivGELWm^(PYe%!_CdSj@7Ztb z+l}PNV!h(;%d~ko=XE?eB1Ys$y-_dwX{j0rnJqW!?e3o6YNw^U=5No^@Oa#8HSSa^ z{g3nQ?)G-IT=nan-uCGV1{jgy;e<$In!{owHP!TLHNR8b@@gIiZ;x~intnUn))~F3 z-pPze%k*~3_cPKw6Vh$@ZNGKLuY@0Fwp)#l`1SCkk?oqd(;k(%`Tb7IyGB2R$Y2%^ ziO~VG=xOSRj7)bgUYZobO-<;{?KYc@R>!SW+fA=i-ko0cTXXvF*_zjGJI;p8ij>UM z8?8OBmX*$ikoiW_Z+V?+qi&vL_q;kbsnI&%79yL<;q34F)t%i=JFEUJ-no={iJ#z< zY1P}sPIb@E$yE2*2_bVhl*V?kUHyo8ByvKW%ZoggcutHbr<$$mUbR!b;}?00(+iiL zc{Tz^6G9}CVlqwRw{Y4RVRXl@`>kp@Q>pIw?M`Nn|G}3sU2E*Lr{vU&etAkgT?DLM z5n>9xOpED5ddUUtg&fJPw){0UT2jo(xmm!S572AR*LSLQf3YIOgdC+|x|3JLIgzyu zj?vr^>2=?$9it`Saiz2Cx18{3LR9qB=IeK=twwzh0KVD8arqUxY;(AIxPAC@0jpjT zOMN$Q{tnu&`MAiHq%$v90TJVXh>_;5*Y=+pk|V412R6Z{hO5$<7c$dnG^^$IlS48? zi{8MNt|oVHS8=ntJ5_Tq#irNt%DY~*K5k}6T?qN3%sStCM{LMu7!6#$%(I!&&C#tG z-Rx9r)y{z<_T`4Yi(U0dw-yPpu+j4BZLdr)yXqa#4mjfD@@u+1?vr_oIq~brNJApK zUf%U9-5TxhC*^DU+qQWa`N9z{z@ob6?f8!PoP1S((A3W&?T3ZC+^u!0?dpyrzF^z$ z>1UDl=Y+dh!Af}XU$X6i*!Wqb{X=48wbj_iPJKl-?PTyE(lQB%>sA_$_@=CxW#V_F z-FY#(vA^nd+gRYYWvR1|-NTPayN5+)qj4J-!Vy1|HDHojvBSS3Egut^b>O5LCi!!D zqs@Ot8of*4Dz!V+I`-)o5(o_a-BAxBZGT@(%(UA+0C=a`?zGVFzslG73t%^(?UsHX z`7k3g^X+o0an}*^Qr__S??|gZ5EH7^OugRagIJXE8=m^n*E;Xo=Zp1rhp5HHE8-7L z4{QEiuT{YoElc^87XOHJU>=9Qcg6UN9zeuS;N_D{;L;UfS=E6Z|JL!x$LC}E^YxC0 z`;8N+N_i8jqaS_qzarivCU~;5Uehb{cI_R1u&1wxKM|wXyw)C%^9sh^v1yNgCYkaD9+e@5E;Z;@H^E55(y zh`&KkE&e;wYFdo0`OTVFMqhu2EpDkFk#;j8cfEm=U_QVRe=p^3-TscWo)h`m8go{Q z;NTqb6DgZz^`KbAlgJ12B0J~rHOg2nPT(JL0u}Q!()JqgyIRQiK$gXMGevX zPbt4!?t*S~+d#<7omxt(`RT}Ln<9Ioyw`l8>k|;kg#1ch5Bqpqe1%>|zWt!cuQqD8 zy-K5lJ{<8#LhkBu@l~YxheU2x&5m3DSpwV9JKMOgZVGqK&hN_!`K7*ZDg&o?ON`zy zy5j0^U2q-8YUQB^}LsKiJ}-;YJh!k#GfbRMveZAthgd_ zbN>GOi4FB?xP1v(g8)-xzSOHln)?L%`#`8$bnAbH@u@X%Dt<>AZ;J_PeAjEPHM$+* zP5v<OjvdX5|erw`J^r&v$Xwde6^aoG`%4_RRG??i#+6(KfKJ)&Sn4Lrh}AmkHp zo6{r`RqO3)dA(bP4Ayq!gb`^Nz1)!FMyw(H1K$5LGj-QDU%BPRUK2u`Uvb;2gY9mu zc2JnI{a*8`HNTRSleSyG)dEK>CrrQd^jjP;u5?y=#@*&_3;Eeb#WyT@!dWd{F5^MT zz3a8zuHw`Sx$FL2EkHYR)Kj9gkmDPdFI%}9jQsA5Tlep}`aSnhZu!LP7bZSX1um!@ z*@@%az$C*xpo1nlfC#}QZY5{+VVW+uLcN_H!%;rPr zqYm6%ui3<9s1%$gpQ5|nXt{t7S79)XlM6QniK%^u3Gq~km|1BgOgT~}@%3hKJ}k}( ziM|io1g|BTh9m$H`sScf?9u8^Q<>|)16~b6M}8%cfQ1ymY}b)t>C3CBcIQQQet#Fz0!g6{gCaCqt!|U#Gw}|Q z->iFga5V_wiIfn#;VtS}AT$XhRni6}WwJX-LMUCsIr%zkmX>F36qi@#Hkam$^J{A> zYsLBNvnzA+bH(+=56(mBR15bTUZ>1XU+dN@?eIKs1S|F0f!R15!T43b*0{TjUES;M z;S}@{&GLN{LtT17l0CayO+^ZU3a z72X91>doW?lp3Dh|H$6URCbeYhm4?O# z8bEzk5fmzto030u8{1Yf<+t%?#l;1%xY|`X+GS-RwcW0^+8virDxlnc>F$8*t3&o` zFWmKOHT=t%hT)_z$pe9BRM=lg=ZA4a2jqdrbnoH{U@oreq}1EVOL#d?P}mj;=Uaz& zx7Fh3Nue=p^hIj~|~uSTRPBgeJIcx9V(XEN2PHv1on z6U_CN_n~zcXzAhUAKe|6g%NTj;gqw244b*Z-lzsYP}3u0oZ~1$loMD z+VcH6HVStRyH>)4OJ{j3pG-|_R#9#?CP^6l$g64roZ zm^x^bBb-&E!vm++*z?_v*S=kFfqu)7!;agHbe7B)pZ>$0|ie`YEb zT!Hpf@6>Rt$!g^@a(acS-W0XG4uc1t54f+`T`gXkzp5lMD2u=zcm>;Yc(3#c_ zh+ryC^8R*k*!fr5z|btqULAZnx~CcX`_K@9AnGYrJ2bV19lPL+Ggk~k1yfStbs(N( zIxRlqWE7~7O~#SQ^z}yF2a-y!1CU`&V=VPKYY8%H=IFgijexcAD=>f1S%#Q(LDGZy zE;vaXG>~$3&4=_)>{|3g>FmdS*fL)fMrUij2ZdAg(}Yutd|G#*?xN;riE_SRcg`r> zqdS+*LkKfE`jpHDCL=X6zXr*sG-vn?sh2U(E)LE^o-nhWR^+hE6(HFiA7^o5(ytHq^ENzCk(&%K}b= zsn2WRANent`XQ+Gjl&mZE^T4X9DSu%DEIatMxp)G-o zS6KK{vu2C#2aGzUEoWW}8a4>v;Jvh6!)vif24xhkl-)z#b#Mqk3-E2&gA8LkD6HC1 zH|v&Y-1E4O^U3hIxqBFPFhg6RzG$^zr>h<0m5#;Y#zKCz+wzry z4D>eL#IFcg$II0`47&_{jqf(kaRZ#SkgHHSczavboi1B36(aiv)KeFqg>?2)OcBFa zO*nWqB^GOiI;P!AyW3sR8ovMsCL9K167ZB2 z2*W#Mo{WyJU-{A9CkL+mgZPae!DrqV{@xoG@xma}nSoiV40v)1V4 zEU(zt4s(*q^1dj@by73+15#0a1Kx4)(@Euxz65?c(VLkXfj>_bBnLi@l?I#*;x%%D zC?~Z5*@h~$16za3&{J@4en@?E^H%Ny{=w|7SKlELmV>goNMHD^Z^>1o$_SaHpw4if zlN*4vn;%l`Zr)P8x1pgVy|Tr3?_+>Ohwg3vfJ9<;|EW@oZJ3ZqZiWjF5P5DL1J1PP z@a(7+C62SAGt@VJD=fqV$MgyDI8dk>znyZ8D^>I;lT#$`LyuYCVb3cZLYCATMPhBg zD<`huZ_*=Z`eWon6 z(vvGUZ_U{mY}VCRht5Gd%g3EVSNC_ES)AdieV0@)-}}D!UTSHJG+urMe$C3G1lF~@ zd3MJy=dP;v@OmVTa?)8RwedvY2KoIk0DLb30N-N(_+cu~9tX-tA+yKEy^z6sYIMF{ zX+X)9l6iO@LE}|EC{`yE3O&fdF_Ju8f*Sk|~w8r2d#(Jg)Ndg{r zzF>P*#w7zZP$9GQuZ7OhB^XWsDrq@NCKOPfpUO#krZf`URWiICeoX9GZb$O?=A6}(7Yr<#*&1Y(Sc{8~L81q}?Wo^TJ+Hez9ybZB3BgP}?M>5YI zN$UrDTMcr?8o!1Zv+7Qr-E0snBPYWT=v$Fpf(1}}G~t5VUwD}iqf1SGl@vdg=5G=H zdq_+uXH4CY#u!&mRvV2PI)U-+N3l!jnX1gB=2kW^kwo)T#2CSY2{A@LPi0h8M^v(LvhdA>S2TG%%PFQMbaPqM#HBhl5kb5=d+k6iN+8CpG9 z`ryfMIEL+WFma~!cdqWSaIeD{aVC}g=|!C#eknDychZ(kE_R!0wG8lf3_SR7S)Tlg7{AH7NQt4 z;$Krs3_`t8M^Q*hPAMx2SQmItfm2FKxUAt{P}wv~Z2Xk4nhQ06N1>^|lHcTq%lbE) zc$Hk2cUdBAcN%-3|%d9;a9QoudsFu_frl@`f0c`3nlv7v$V~_cOm)JKmXunG<<6qk?uX-ciC!U!FL(488_nR4|P`Z#Y>JDmU8aSrOTIl7KhK1 zFFx&vF?#uQ|H~n0F=d+iPTsjR!IopQYZJZQz-T;*U=}jUYL{O~_TU`A6rYze`=?N; z)BeG~`uuy?~2Ggz3gb#H~o_nht2bH!dZ6pY{GqpvBXv-e-sX8bbSt^kFRy zd*|TmXGRWdar}3~=_^W| z4E#{JIOZ@I;^^Upu0MmC{?hosk5bUFKLL2>@h*+ug1h?UDm!kN=r;fy`_wyPTt_ak zS>F+FX>>9ya{2{^LLiTnuf61Zw*w6*g5C2j1r>BQpT0Ep^rb5t`c6*tv%7HBg_C=B zwbn&Q6hbF4R<-h^l$ooI$^mUh8n?Xj6lO>du&W)4Reuyn=v-PnCQ}+$gf}p)Z6YJ2 z{;nKzLJ~pRI(7|vm-#>!20;&-f#t+1d#CSWiN%n{cd~cQ@mk*}Fz=xeW`LixbGJ*) zr8n!<4&I({<|@ra0B8w{sUX)vcr;)MSsS?s`2;c#0-%YP#ydos!~FrNE?{;%Cr0P| zZLsq`&SP?>LO#LlT@5UXEr*KK_uAdofjBS3Q+DpbsX#D$u~97(5*^hMlJGER#>iX% z?C~{nyFicNOA#e%U%)OH`k4@OGo2+2*MX&rf+LRlU`Q-1L-yN%HR_mOKu{YqH~8s$ zB{Ua$3C#uDVb-98_Fy7&5g^@9WO|;7o?n{C^gQcr(fdminPa!_{aO>5d;Ge$FHK|~ zNMF4@Ya(+BJ@<~IiOi{w(>p5A+(ipfaYQC}5+d^q_$|$KT3Q1}^Z3MOKnKSoIs-m_ z(8LGcTQ$GF)7jN5At&q!6H{bdIfU#y-%oaCddbez`)duT$B2?~QWr-&*F(C28K041 z4jQlfExXTw0^q;rq9+?BVY%$p1EQ(zDxz}33qYoys|QeP-A>AJ_FFI3Ilv*WsJ_gp zhuW<;#6-kXx6zl#leD=<}BI!)dP~W(WgH)+rVrQEk*JlYG^lcx;k0!LxxT3Gg zEVMmZB`sYjv~K%&47CCtb6aAp^+~@VfV>%Q8M zW10j9^(e)J0g=;~a6(L)?$vZ*mO9af9B!#PV!MXU5-whlsooIa{5Bn2k%K(4e29yj z;LQ=6Ql_i?_a?~B@FU{ox7QW8b#GVT&G;+e$=}*L@L*wLK|`QO?WRzL)k?~a%2K7jMbvIlB8 zT;ww+G69wOhZ4cODMK%X9KGA3v>5Q>3O`0VE#%Qu>9l%?fy#W+M+sb&OsZM|z|TRf zr_@q1cyW(GC&z*nS2r;9~^$%a6DYBlN(>#N33Yshbigs4`dep>_weKHCXcSS<<+@ zdqeyKcpqG*w-@hovI$2Z_DJ5Rum86X)_(?_YE}V14Ts$aIU|ie`v(TvR0C_HKJ3O}vS;lI6}|p5 zm{Q^_QAqdRP{;sA>9<#WdLR=%1ce;0|F;hcIY5FWo5wSXL`L$9FvGwmf)v!as9Miv z6d%eVAf#veD71!@f_e#|P&rNw3WIx;t3u}EbwpD6%Lwh8rCi4gzK0x553GMFrnrAn z4yvw^>)a^qj2}aO8*i-+=U$hR06R@9So0gLos?W4W|%RXw(V}E>T!AxBW_ir+%fse@IcU_o}HW6M?s>tlyX#M zfj960RqiMpF`#ipYad8Rn{6EZcam`&q}6J1~hWQwvf`z@AHj%H7Df$-E%^MoiFUKjo}@Xej& z467t(rR0RA?8s=;f_#Snkw7*wk{yeAlx~Tl6+2%42y%p75+jdAY0g(n_Sp`c5K{_1 zR=ZoZY8f{8KJm6sy2~}WT@i-=Pf28$>Xhw=Fcw?4GdLH*V;#;lN68AK@KvIgpM`D( zo$2pjQLqQG(YWe!R$}FPdyGCQ6BWxV{kuFI?D9SI3b(G05Z{Bu5%<6Bq}VmUbx-{cTKM_?`KlP<``(9#`{#SYeh1C>9Y|oP&rr=Vbu@S) znlX+Zvy)#eG^E71I=JI*14290Ior^VUgOClVkz7qiUI6ZyL%wdM@ZpE^$TT{MQ;5U zMUDMg;`A>AF z<;ajX;D*j&d+37$F|iEb`Tllk5`!23)q%okpQ4qI*!*!~TaIWmNbcGQ+&2%I*P~+6 z?mln6dn80mP)rpT+hNE1{)Nh=PNTR5Q_rD|HdG_M?*sd?&D7N$G~~jTSEdyIhpf{? z(|u9OJg*bh9}1=;d7C>wcQMhxu z%x>L9yQ5!)HeWly#BS^r)KEG@8R1ibj9?h3Y`}+sd-^mWfIT8sH?J-&&K5r~|FTI} z{ApP7hMt6lHYq+E?Pk<)U@|?jdTI3o3y%0a0CwTxv*Y+Ay?SXq{Dk}-FTI3Tcg92Q z5DbN<>-=yW-%^Do_(FbO##CS8ejV|I3^|dCFGkpYT@R}V0VFd@rg4P5QbObms3Fxb z7W!xS|6w7%e6-1PQ=2@Eo4fdGk24OgRKGLMm(e%=`#SVQs-8wvHc98MAqMV6uZEn5 zNtsp6V#Iryxx;P#T*^17)KN|q>i{>-p%+n*8-w}Cd4m%?n%uNV(u%Bk{yt=Bc;~y6 z*_P8^_?_vQogK(ec%U_!$f={o`wnV6^pB^(918E~uvaiHm;Kt|m zj;~>V9Rba_kp$r;A;bg#U>@N^dmNlW@bVoR=&z)}e>~7vrTFW3FX0oVg!lpC_?W;% zp>PBoDQDeeqLq~#TTMP4=5orc$(I(*)ia1oNg+BU%0le4s{Zy71br@Oq)nqpIT36c zn;4Hm&=YsK-VHdV7~xS)tG9=Uswh~-n=!*lETE6Vl>tl58yMc06RrMLXlJ$&%?LoK z6oW+$=CTEVhm*MSTt;HXKjdJJ+M<(8J%PeHoO_Zd0yaLf5r<4<=@?5z2?6eUl>_0_ zegg}sIJYRXb*2ipzhOl`$zai|GYaOPua4rCT)HXLG7KX~n7{&D^zJ;!BZ51UlKdi< zE>GI%0XJdX2sv>X!Ep%;wFG0PRtP?M;Bp2*6l#wtFjie;{tGwh(Dka?3dpdk=84>~ zYN-$AFei1sg#lu`kz@WA9&>7Z4Ov>A84?}TfaoY86FTfQ)ck`0i)2cwbt-nY3egSp z)EIDLjzCrvg4ttUN5tr$^3=AO$b$syb7#pm|Lp*R-r~)OJr>0GuENC`Bn`wo8&p+* zQ&4b1Ar2J0?;6sBBHtLXynhD${mPmNnxkcBbl7@CCvM=Fnlg;A0;aB@7s znA3Mno|Qp@d?#pe3~B(=vJ#}VW(7&4j4&T!N{+J|_oHVyMCT+A!KpBHT6CxP@Dyi{ ztPzSb>#c$nK5nayp>8_Pb{+?a9MVVf!jFwT&QLP`dzs1w6$GP~E7RO4QgVhkf>Fc z$c%1r7R84VLyC#uVEE?VSNrFYt&aZoa7&e6MvV?tRN#1*O3x2hu~ljGdh zN=!3J%?g`kh)l_xvmF`xK-p2a<_=0z6h^^^ zQ6ViTG^nV!ULp*drkP%7pk@7~loK!FQ>#}*rKX#dXxn@ds=1K8hIrHsgs^ zpeI$4l77GnIy*yJ_sj6zog^p@6xMx^DO0QKT}a!@-iI4hV;DFOHAg7iy6^c8++^Cw zUoR%tt5na-e1Ncal)_ET>8!40ow)Rl--9zuB-E%y8*nAnUV{-w@d!Sl#NWLA`l?OP z8PIXCSI~G+4^jq~5IJ>Jy!b37(ScHXQKFuO!Z$gUKp(e%cPzjGs#D5j3GAa<=oyZw zbm1N{2x}XRtGbvfg~lk26%eZqh#VQbw81kUp<}98g|$o__{bB}vj&;0HzJRQk6IS@ ziv-7nQ+rmGcR>xQyv$<~D?@UI12>038S5bx9%@IR1|5BE3JzfH$m~lY{%8u6-M4sG z!wxRqz-15N+-3S*NDqEpWUsRAVyrHyEgpF;>_4n^d55 zU-KDu2+DOyzdf!T&4mryl(m&ywHoz%m|12P>1@eoaqtcu4_ePTo0y)tyqtir%w1!L z%9I}(+e7se%_URmPq{oKXO`ZEA)cF5kk*4a2Wru6o@EZOe+h7%+F+{K9gFKS`tq_l z1SDy6>Ql*G5jLdcS_70GwzP5@d$hf83 z<#jzY0M(hMn*2AJS|A$OTYbF;J~*^$WSV>h>UX*|s@e^{mWoPO!@vI>F;--PgS`zp z5h7xX6%tEU@!=do_<<$Co*?Z$tP1#ep`xA@!Exw^#yuBus()9vEgxJ($}Z%!-@-ow zG?Gwc*q*g5ugAl`&+~5(hd;!HXVqM+QSXqBoU@dc{+*0%0+sJ=o!K^=4S^qfjtX~; z3S+OUS2!Wv$nbyT`i1_}`nbenHj zya4cmdg1XKoOi)h?zlv9sVNosaQ8UPc)Po^gH#J=iU0mnrd};~kwdN9E^3|+sg!`D z$&I>w0C(FsYe@;FZh};7Fe)E2A!4_3SVEm2ZD3I_JL~t95SJSSoLO5Zt>h{rz+0%D zPPX&D4rlNJ>QzS~rx414XrFGI&LS;0AjNxBT%uZMcV|X)`(qat#) zMkioXcqHWyuL?fuvntf0^8+7K_FBO9K)T1bh)l)$p_qR?zG^g;bB(+8yO_l?I!572pzpE|h7LWd zq)NuI-I0>h_o5B}w+C8PAK+9_zl>{eqLvPS%e&bAx#TaFX2%_0C1MKP$p89zFUawhRq_(2HjrC zi>b}%=sMK}AiwLQRvj&NFPsX4!j0KwUcTXR-Nx-gn#!)iK5@iW>YC8Q3F%^cQTCW> z|76tJgpS{twgXX}ZNL!n*jIEqNCYPwF$(I}qPa`+M72{cILzdqYT3hZ22YEl`xtUo zO&?GO;S)d<<}rn7H<#5FI3DykkaX(q!rJm`EbO34N)@^&z^cWbg@qMNTW!jGolg>R zCK*5*0(#CTB$O~Mk5X)m5&#xGWQLtyBaGIA%v9#2Jiys@rln@!8zo!?J3j3E7?Y$8 zgL@E{jbNY#5kfup3hG4%bLaRPl*2&H!cKUm>!|*K{A{?>gGWyHUh{L#jMT$&Z8f^B z;9T|6U0!)Fq>&LRbg97~)7;cnsRKGg?aFXMrxJZyC#)XP0R1JG_Iw+~Lcpd?An6|I zNr=b;-`MS;2=??7I!9s3|v{eK{n?&EHge2QGXY<~KMBaF9L{ z*@1tAHygqE3hIxbB;PqPg;zu(O=G0rQ^{)a)irRF6}b6rsG`Xm4JaVF+BhfdMVckp zLORBHK+Gw!hcB3pz#4)(S%5_nxx_c%mscMVg6XP3=#{7O0*|aDf;fP3M$R?5$s%%z|iD`OShPyDaBgn_=i+7py zly-N1UyPG;+H$oGBv9Uk8|TuC3aKCzqp^pYA-wC4i&Z`LOO0-=VgcZPh&%?tA{A`> zPXU`Q9BDwm)tbbp$XstAeyS#(5abNl#>mJcEdBu5IQrHBrjdtlXwgNmsr}YLk_9{cLHPS35!31DTp_1sfu#-me63&!b| zcuFj(wwMoDwe{irv6$0G4Rv_=Hg_c6jWoE4)Iw8dxCB3_89^vXX(a4^J4xPdl+vC9 z=ENh3R8F&vAXq)jHdCsb*_jSl$R=O~nI{u+6|F8`hByUqx_lWXHtapLlc}#MJqb2N z*8w3Urs)IY4$pK`5EC~)M3s5yOZVojG~w?QWeV=k{TuV>v4kAOMo#6(zcB?Re*Z9p ziVNbCGy>neJd!+Hz|Y$m-MqE1S@#+0`2II3*;_Jh5_viLLf3CmlG4P;%aZ>F=EjA= z7x+W7T&koj3ZqeVt&Ynu>UwyuBHqB70*$r~3NDxD+CxZSrTcQ={5nO)~&tbk#9cC$7-$7evKwlFeC-Au2c$_)@9$ z0W>QINctA+fp{J~gLy56(zp6|#B#ZIYe;hmsR}_j6vDzl#@+8b%sX1H{G=pxeXU-~5ph<9>j+|oroYjW$ z%vq7ca~n7(^zk+3!YkD_kP+Qz=EE&_#+9JjZ7SY&pdgecukM~I8kskx8mWNf&0DZ$ zlhHKb8%72%Dug>ie-4j$$2*>rEfva-T4hEOoCAnM>kWgOd2F}>>?3@e0ii804xXw; zx##Uy_h8pkjKeR~jb+8R;%l&lP?Dqg9iRvL7J#m*zGj{fS?5hL5f-{I(Nuw9vXS!K2~GlfEU%R6a6EhY|DRHBF+!&0K>Vuht&>b6u~}GoD4#WXy10L<=xNWYl6X2&Y=1i6r#>s1T|JV z-c8fYi^6LZu73n25MDxVX!*1!Vf_`61d&ke3>K{JmBDU-0>$D+Drd*+HWMq0hmB&x zeo2I7lW&}&EUdRO^h+ToGZw|q6SlR4hm7c+TcfL&S9+Zg&g?X5*n2x4!qvDbn0gmD zwIIG3Pb2b>Pl#hfyP7U%fZKDke;YNwa}-@YpMBvTw#?2zoqjM8c6lOTTb3yK(1KPa zf<@q=i@I9fHtc3l&l*Igp!D$FEQlG&BpkrkwH$<-gPNmE#dhs>*jXSkqnZSjB!mvh zj;tsHKzmsl?1p$UpjN`FL@oIWfpf$8;UcN?B_s&yJ;t=9Lf-J;*HJr_hbKsa9hM~7 zgO??X8|X;0Dn=nxfvpynhJw57)k$jGAyJQ*SWsOmt$_0AY|6m`p~l(5Bw(kcLK5mW zBb_~*Fe}GmA2yJYvQB)yWuYEU{cz2&Oa@@}{6a(+N&^B!Z9pjq6e-n=2@6DR5+ASx zMDXgMrMT<*F)*td0DVNKX=pmG+JmXttKVo=Scm#%I0P$o3)?}(ysi&11dCExPI1tvBD5FX*@;5xS z-7d>mtMh^8nmAxKZk185lTZmBku*m9V{WU_f(?hss;?BKW5k^SerjDl*H^LF9-bKx zglU2~q26%I;h&&{$DXBEVsClxnjcB4+Q3%)w0a?`9T?mlyEe4}fK|mcvyL5?0~X0f zcV`zs@;&HM8$gM0BEl^WI7CKydkVnAP+br;EYDohe2;GG=B-sezk>}J11R3JULl%! zBrWLCqP-K`<&4&Knqd^V0t5l9?TYo;qRM-_+^ROM^;BO^w{cfrIl!V%3c6R#DMt7K zAcrcBoDR+mnb+uIaSo`OzQ(~-!mC@ZLWQm5?P@J4q?Cioyo9gs@0{A|z6CyjCZzct zvkrpkMz_TlNfPyx4zM6fv1`R5H#7};0jvPTXAPpUuo*&2>FnnHP$0r&7|iazs-peh zB*tMDMLR&^N3Osf&oI^ z<8H{?g{fQ*L3|DS6C#NAmRpKwFsE9+jun9h{x}=(d#M@ulAe9Ac4qHMd&K(!QUTtP z&_8(2_E8(tE{G#%Tr$zgat$~(!Q&QGQ<*Q3prB6rTX+;Q|A3;xM5qjr z%2P$*Hi(Z>=(lwq#(QK>-_FJR?w9RxM@_ROYJu~J`gi#j)jtgut;s#pZPx|qG z>?XwxE$tXHlCJU?ZHjRF7r;dvpl4QQBF35UE9EfF1>%#m;#`j!R_372Dk?2ju)A`U zdH`QCn35rAiLF0ygy*%OvWmx&O=KncEhwp=fUSD1gQ#rdh*i^1cxzGvyGs*7jrJp{ z&R1B+kJ44#F-Q)Q2q`L6g!Z`NCnRz&kTCWE{1Wm8p)mMh>0N*|wzvm*CA1sqGQgmk zkV|t7L>>6^uo^+$QNRKFTxFrP*Cf9zC@1TFZ3WgUjmfbJ!o7a$QAB5SpS~pIG;Oyg zB*iuiZ1&AKy(xQ5uMFR9^YkIHM4juNRX`nic))qTTy0iCg-pw&SO~QwH&5Uh1eBsk z7cx~sk6;=`rWEb#JVM3cP~1|x1dHLs9IAz2A?kr6P}d6FG9-Q|7=NOq;thf>uHMh3<{Yk@w#e*`^o^J4&iT1=ZU z4E{Kx^W*Nwqns-X2dr(SaJI&@81cZBZo3hG;N~{RF6?*3_|@)#wE`w(nuy{Uu4w=Z zh%8V@s#qg) za4r=!&hIrU-I`zQFR*(YuzS+1MRkTO{e=JbEh>yu?Hx2&z6=J>FYZxjjs1EG6%dR1 zMHSM6dGWu*s=|T&tBt=Ke0C#EpoN{}lH|CA(Q6Yo>eJUYQ2E9BLAYCxNPZ8rgmJnlcJ%sTynaHb^ z3vjaF^CsuE6cF-7AZoY??^L&{RJ>J)3vnF<-z2FFEb^lgw;$ajA>5fQsySNj^lmm> zz%Ryi+%vXJx@sylbpDpEO^celD0vY)e_czOAH-TJ`843P8 zsL;Adm?juUip)%_=+;WWWn-Y!0S3x}j$ zJdNVnVOT@@v*&P7Lum}0gr9{GaI7^GE}H4<N>mbSc*kgtUnPGyemg2^Xs$*;p3DNJ>a_r*vrB^m)G3h0jHQmUUyP0 zdm>o%CU!BgoB+W#u+>kukp@M3CKL2)j^I{8z8+n_Ibd$2wm?j7z>-OBNR<EW&pIv6pJieB^5HTHaV8;1 z?SLyHs;aBW3QLtmUx}3yJwhgV(os@)^HSp4l~FDmfVgL7@^p-ZB_Q*L$bJ-+#oLVPTdBn^nsr}x^eWit69NX93yHFqvuz8q{l za_oxai%;`$P2G9A_Z61)3A3zAhcFJGienr;MF`{53GwN;9-@rHXZsn4&-XJ9pN;D% zo^cqCI)sK9hl$`4Vb?z&*YC;shA+nP4PT7wyPt0u{jcO3(ug?NLiw*?OU@yqDm;Os zAt_N0-_(S*m0eRI89h9SNWRt|;-kC;lyeDeGzIIN!BT9mYd|l9Ba`2a>#Q5Nqg#s& zY-2rr!$X|&FWMNUWbZT|1>_lJb0Ycu$S}VCTsfVR1zm+B!Ig&GkPCCL@sP<&|AsFA z4E5$;PNYhGCsjElcBt>Xp!`*$BUHtX%xXE3y}XY+ySO78*q?MxdVJAS8{GM*-uj-C zbWVPfQ%a*WzrTwBb}%BT!9z~Nz6Q%0RIE|mIg;|L;GD>-A?IH=06$8L<1$KTQxUuQ zlUb+|3DF}rPdIduPjEO?#{?A}Hbvq>)KDtMH7<~7@LV0|aT&P_Fm49DD)TAk7dSuB z?Fco1^xgHt(_Xg`M$7z668qm@ z_OvhS^MKrz!g+mOIex2@3+&ZSX7nd@ARaUWS@E-VFr1Kd_sO&;}*kl5z0T$Nj zg+NFn_o}b#-SPG#5u5p)HvxVt@JFb?%GQRYRe_F&Qxg-pdeE~Na=s9ge?Bw|;1;Bq z#U!pa;3{~RY375T1oE22Ori{@TH+_+l*$7m|2Zj7)jUpND~6rV#mvIf%>1KoZkn&)demERv_FyhjQ~myZ#Yg?;- zYUHXip!GTDD@SaHnLZ5VP~?$wI5HGex`;1^gMyA4h_3pcE{iHK2rC(lGGM|FIp2tx zFtH5!J9Vu9&@@Gu4%C!6X-b+jY6oPB?mN9xn{6_7dn2<&MsOrufa}4s*Mi|ODQ|=h zuBpc z+{4b7Vm99kbq|fc>Uu)guTVogz!km2c`dXeif`S6m7xXyb;>)%1+L(_K&d5kqMQL| zK7fFw9AF^&+T}w5%+n7;)4>f4hWPkhgE5U7DYBktg830Vpo+u$*Rmea%$!5HhFR&e$;_2oDRdK4zy#W-zvd* zkAj8n7#A2r8<0Wy!P17`b$l5EorFp$@QLRTApwe~A@^X|8o7WRowS+QyFn^c8ZYWP($w~Fv(5A@yaedr;&R<6Poom&7AOk9JB~^=Ve8(J0X!3D0Pp1F0yN5&{e+8c{`b#Yc zhDC@^cVJ%nYj}t8pL(SNEwu<6>N)%=a#?R7V|Xtp%j}2IdH*vCwC{U1&Fw-LD*yw` zB|36=a?m%&3@v_OKGTKIdX6Zi3!lMEWQ$WsIHZsn@lKU9h`_+|H;ELieEUTm1|AjO zr(lP#wq`kc9s=Shi*Cj7H)W1;5t2s_Icn&~7yBNQZ#r)Sun)J@HwQijX-YbIL-h*^ z2rS8N`jEg{1zod}G7uAc3d1;i=tQXW$tE)awyLe@3$B^~K0*a@FeC&uakt z-W5q_5|f2W7Mj}%W?s-@9R6HWxj07$EhBKBz0VbnxAyD|qYDhbjalCo9RBRr(e)*W zm!wn_p(SSdOz9vY-^3r$A#2N0YEh(#>FoZkHva_>1(ya_A65JBfSJf-9R{E)NHVIt zzJYQ(zI!#`x=orndR(w9GC%$PVj$p#_f*I!#WK{IMTOq` zI~aC0X8I=V0<#yU?W8rH02gD|g%hr}ikjWI&qL5WjV3-(5bu2-1@bxL9j_M{g9ai^ zqP?WB=4dstb56-(GrM?osFT6|kPq+)c1MNXL^*lON#5^<8i+yCdarTV4+f?K@m&dbQ~}^5s1Cl{ETHcq*IV3@)$8`( zC*-R{J3`D#-VGx?xRyWc{Ln&VNHllblp;*`Lzvnk{zj`^7)L-2+>Y;U^0DM-52kuc~S2X;KaiQYYBWF2Mguc^j*Vo|JzZOubXi=SYo-^CdUn14$yPH&38qkl5u@9CePBn1A0zv-J9@iXMdBjy}37~I#R zy!k{EHmhYR*0z@3xWMM#`*mT=ItFmhlhEBT{v zLt)JsIyV9<{c&=@;*T+obiSmPaS^zjJ6G$?f-b>~?$F=W_2PdKlw^AHM?S;<7H9BFF{)8>p# zh}wOx3MfcW8K9MFBQ zCc5K!miQuDF5^#P*m>*71=s_rBW+UynSRVk6-s?8Tinyq-F*YxiBBnde-1mhbI!8V z>yAA$<&;9DaF8vLv#CV^wdx~RKP97c8(S(>e1QuI0I-3>2H`Fye=H({fCbq1p%A{Z z1TbWaB5bLRBze$6gDD4%!W7cty6#HG-Sbx^G?am^xZS>W{eHX9Az2HqO3rZCkNgm zc5+z-p};&rhq8Czhml902@wbc^-ErMGdv1%t8p^3g;`bS3MuV74XA^0sDsAqGxzpU z*&I$fiUZ%l#omCf4TZ7{3#pzt5nf@};0c4sDUe8+-v`~WfmA#mW5;6!xn!=m!sbOn zX9o4p^}Xw$V3mqtkD-UDvn=@WkBQV2GghR5qMXxyE6QD+<%E8jNKH3Mdh00N5wuz{ zj#Tcr3Mr#-d`hxTEsXh#%>0py{5ZaNUeW*!B2Rab1zDMug6T4j)*rEN zs*gZ%ofZscTc5HMlKmD5>^Pr8eP^!JM%M14U0R8j_l1U(tN_ubrU+Zm61fTsN<;>TI2%zI4_u`}Hu% zvgQ}agW8aQ11MxD{S1Ljyl%*OgI3ye;aG>Hz@=n*E)@pvRVTVvEU@vog>$2i%3y|! z3-ka!6cfl=hokq%{hRzVl|>xsz;O4Nr?*QBZtz99ilhoietz5co22*$UZL3n(bTH9 zu@>ke7|f|W5&#kZ@pU(#Mpr&ahCL=}Hf^2ak#4pwJ%?Of+ep6%)`WYcn@Fi#p`t<3 zQb_qQWsEF^^0&vaL#uWtu3^={u z+A}QB&_knief1UXofIbO;T0|;b@8@4tTR;j{4*F2P3PH^Osu{7tsL(W@=o>Ht^&fr zMZ)_1eh=l`$bbG{5;DDc>6vF?&V`PEU#}oMgA0sEF@cZfYbgJVBuSkE#3P^-jQ#;L zvo)h9&XTA3mqc>PmVPKwp|ZAKfg}DcK{4siPQ1^ZxFzrlk>?J@Gm3u?HpnLg;dguM zLO>N|t8|V)MFMv7^YB4gxcKZi-0(Y%;KwvO-hiBt?*+l7$=56M{yy?BK%>-d)c*rs z0Q2~{#=qdffQ!`fioFyP>bM`yAQP&dkaFo!Ju5*#)l=f^`pBB7g2m1K z(20&ZdHrz(7MsDCZt zX-!YU1EqYM#T!#xho6KlLte)elGg`%1k=m`gKLDlF-=4xsATSbMZZCOex49DD#gr! zte|?%lv1pcV5eLq&LPDL>mX+}2ILr8)X_16%>w-)P27;otiTN#S!jMoBM&(eZ5d`t<0FTxhJ5LNr`hhF`>b$wnnuxP1 z&QQ2^VN{(1IM7io1O>>&`BsP)0=a;3K+?vt(o&NUr6N3y@HC;jQe_ZgI!rjjGSnk+ zQ2nX3b?13hj!-h1LNvf`%&LGwTf`VMz>xFnQ2%zu23du8B9e{3n*qGQzF->cAzLX- z&TG6ja19RpBo7^fyT!Sa{mjLstc?e zL@jDfq2wr)szmNGIIEyU6;c2hM>jEk4f3{e!^BNNUSZaxX~#@LmSfcU>*7LR=Qox> z{nu305?wEnv*rN-NG8O+=>!rJu)OKaL?04 z0xnbvrFxd7?_QcNHD5h9L$Z47wnK%p>5oA06e7L5j4b`iKGCS_>X)h+ zDmDGlAL+!Mph^es1(eOsT^uV-k{b@nLXztccyZLKZhHb_s@X@SBNSRQj^nzkl1-9)-#`-X_8w}ctr{@GrX zJl$FMPu%q}L@p913N)8njxD(xCs{tPy$wA{5HHjgFez!-ud|<>FO@7 zptf`815`yl^f{w#J!~P*9YE2%UEPP&tNxgfDU46G61!W}qrPG1(vM2+46qs$%Ai>* zOyp5@X(f>X8Mct0nGqBLk=iQNdqF%W-}9d9D;x8d-}4@T7w{RIKN#B9;NE2tTtgdz zq86y7=u;-;UJ%tYLpC(%ZJ(F)QuU5lZ;sZ(t-z-^H}nEYnQETXFlDb+?n3WEbqQ=- zH~@%+U%2!z`&*b(cZ$KM$kZM$ko7M!OfaYB&WNx-IhxveU4SGo{g zZ808p{9w@>bxz3qfyuIj44EI?w840VX9$TsHze>M?A{X-;(2;7A!hn<3&*>+$GOC% zinIrQO~LCJm{diegc6!$5p*4Wi1`)aRMl?J56O>1zJebLr#gbKQoF6g_uF{RzmXzm zeke7e(YE4b?CPfbzb1ZaaR~FtAd?c(buJD`q~1Z|Sd7VvG5ZKptAj{1P}q&zh{gDo z_Rj|hQ%>???dF9RJV6V#FP4Yoq|T(Mwu-PiwO|8f+*`n{@)M7FDVB%Axw5j6+(ubW zZS+F?I`VvCNYez=ha;9L%wuy%ZuIY%Ab5d* z;FExW|3TU+x|G!+f&Xwzf0`D1{fBK78N}f+?av^(g+;G*@Enw^3_JU%+yJ5?&Vuni z8%|AWy}k;DTYl#*vDJjxlqsoWi0&#!)=)Qz6og27-ieki=&tsdN%p zjh+GZW{{=~8b?y~Q3SG9Tl0rNTPK@DNAbrSs5#2Y>^|^Fq~1~uXb`%r;JJ8#EnQ>I zOo^!)tvtL!abC_Vy(ytmq6Vc|i2UaGN~Akwg*(6M9lB)11k{YD%nHQxaSS-r zFTc@3xWUrkS=81Wy(|e0b#Q6OP)Of0$HE`G#PAkSCbs@T6oi8JA7{e?p?`+99E=aP z*W*t=g7-i(NGZV@Ow{rtl0p1GqNs?rVZCNJ-heHi9yhyijH|%s4vSVPogse?t6K3Y zccr_{nVwBw+!1XN?J@`tybu}7qZ3ETnpP9P&QeoR-*Y`S58NcGNa z2~Ttnh9Ei`#PJb~)I0dBm*dwwG+2H&N7g%hj78Ww%1lx*HE_}^^$l}cIDwMOeWR2w zpS_YA#yoK37cG}Z*qvFL;L#q6+mf!(&9OwJrH!!ys#Y1J0EU{Y>Ui19m#KItl^)g4MrYBe(l9CZ#NP@Ear zqC%nI)9Et+!{)ouFhNQZdu1 z(oet!-(eCo^esg+px;E%M4$>E=Y5N$B>u8=8CAB_XU12?bZxpJ+|XvS!P#n6QJNs3 z4t1jr9+><&>Ed2dF=~YgP%amlSUZ>963-l=a6GEY1P<`>?!ef?>?(vrXn?pisD~zsAjuYx!OW*Fxri>PgXKA=R$J_o12n1v?Yxofd=Dl^SDCU!e$u(Mx#1w zd`{cgZk&xF;tHHd=>;!cr5N;)56x`wrYv10ShZS1M6v7p6&?Ts*BaPpE2IT$4=jE> zJ_>(&6@OWp@mVKj7NO@x^Hfs?Tyg!Dpp#%~u9_LqQ7R)+DJ{h;e8OuNA=OcK0)#6g zs}G0VegnQR7oUZ?h(`J-uHV(h{?uXDPfq+)Uq9Z%pbi~&4bCjs&t}{2RvPt#J+l^7 zI)aW_fsMM58WLf%1aW~X1P4JIr*0JY&G67eH`T5}Y||fe5!CM@9Vs6?-%Cw`af$>B zx*bCXPKmcu%u5!N2@(z(UG@@SJ_t$pFd4@0ge^1+aDhY}AQ2|*bT!Zqv1z8zQm$I? z3!XISnR-+utK1Ug?EQlh^&M1L#ALBWT+vdif_SZf?(%I0Me3l^;323E!wW2ha~nuT z(08#c%~yz&qRi+5pZ}Ca*&vK>u_?wn+h>^5BxpqPUCRcGDhIBS5S6u7_g~QFNMg13nJ>PP!a4d zWJl*7=t2^c!*oO;8tM-UV#Xr>O?2L7L?>^cv*@*xGK*WHaK)47eF)$@?{aRdwj|W>+_^RA(5c6+|=>NM{WBFwK*xQ2} z%M*NRr4%$!$Ax*BQF^RE6*!#vzPSa1?ts>VfFi1o3#iD%QmVZ%RvE(_EFo=^c2skF zG(TeYsMILaE~P(V^8f8Vy|)@pImoL44U0m(6z<^$K1c=h!4Oni9~}}O9ZK$^zE`K+ z-KiRj7pzRs(NGb@yw<18V#Y##FQYUE4oqP3&t==MZC}1jc`TaM;%*gb3n&goG56%s z3;qEG;Y_EOFZVXNeA(c{hr#iqf09M$-)oK5lo|(h<&}mAa+t_kdDjuI49V}D=J0l? z&l)N$2)XrX!J#OO7T zRD`%QA3fzeqX!C&o)_-bjoCH0KjXT5%sE}kY(@%=e@VFO&~m_DjPXBx%Hx}nLgP<~ z2|gEdi5>CTQ-;T$;X*TcUSw9lIa8&y&!6(GRO5ukzJlUu?RFPKfAN(010E(c^8Y5k zY07Brh`&GORjYAAV^51wq_D1eWvu%rr+oADK%voRL<%7bj`*1)zkHf#2ZMx0y((ZE z1hQe%og@Cyk$-iXg9l@U<}gRaj;WHeu2uI-NB;F`P9ii|XcqG#I|m;zR1+-&_58DQ zx>BJXDl~&@VqwEC@4{T|)nF0fXhi_Te>n1Ir@0-`F++2DzgV*Gm*MmYFP+_L6LAoZ z{KqqyR4{00Rto~I{E+hD0=ACmF4lZILJrHHoaUS&LxyJbf*4&#m@hQ&2x1sMUHL)} z6dHX^OsyIhS6Eb7rK___xI9 z4I}z~{gm&89w;>W{}CfgR8z$fe=&TzdJY~YG;&4c=KTHl`zVY|p`2-Mlj^L)8%e4NNCho z1k~HsC9!Rk-ce^R*St&1G&ycY)04`{J?~%(nef<0uUh`Zko=PN4>#Y!?#eI80?QuT zD&gA|7+{s(1cch8TnIHM9|b%-fq_;y%^5h69w0$&8!iE+FPN!1Ui)?dX$s(KRD<=U_8>vfH*-BPP^`d2mN?3>-uADL~4Y>T%I1g-wN1qoUa`MJ1$Qi z8-&CK-a%p2ELQDKk>5s7{kSn$%0BSy)~=i~$xjzCvUsc-KNr0Zd?<_zj%qN(dk1ydK7dMZ2598N|5kp(Ikbyi1XN9yycS;G=?&1oZDm zB0VG5)DeaO08{89vlW~)fvVJovkBh%aiEwMIRuhR7>5am&O8oi^h6Ni3Fz@^pSpSgbOI#$bb;+9idjpLwZjhn8-|qyA@fZzG=q0)Xi}V02E-5h1EMWb%RG zXEChtu>lT6f)Re%@2e%>*aQY71254)3sgX8phVi0QExlndKFS({qXS}qJt=ST!mt3 zP=UYfuT^K*e9p1OVV{hg?G7QN{vtxgfUl!~2iHN+8@h8U{MfHIx;wj?+ywI?j0dnM zq@xYOh_RScg+)n-qoTdIJ4{kka4C86vKKQzhQMyS+Cm_ZS$H0~z`E_{WywwwPTUmR zV|%>@KjB6T;WLPjLKiA%0gI#zD5_&SyIu4Op9Q#iPN1dYl@WGuk2iFaZfGzqMFZ8Y z27v}<9dJ&@3GzDabhdmv!*x@)#bgPZx$ldQh3WlM8&ESNBE$%kiah4&&Qdy=!pk&T zADrWU^HF1u2Am1biSP~H+NdoR!9ySNdR~w;Ox$_$w`gO(Tt~DV{8w$1hP`hHw4%s2 z6S9K){^PJ?I0re58N%8NHenC)W8tkQG>wE;EoHsz1xRA^%t7WkP=SG1mq-Gspy&X) zli&s(mnGE{iCZ-iqUag+heV1VD$zwd#7Rwvx>kV+akIm`m%2bN0}Gr0mC`jT1<=R{ zSO*f8F5-5qVBcHB(QZmO)$7oeyvD=Sn!|jUb-^W6=s6%|>_H6Ko-a2?7-9{?c^k~1 z|0yv+0IO|;aFPQkpS_Ls(RI5)LFYA`>wukp3a|=rT*QQAu-u9T5~{#Q{HJU|PGk>d4iQ=zx$1HAg0A2!KU) z5%-T76!fHkiV2hJG$7cR4+c~Gpqk?T1(3$VcU4En>I3;l3W!Jy?I^6JEvQ}~hComt z5Kueg<}f1i-Oy>^qp`xTFSv{EUAc^4Mh=&xgBrssyL>hmaib}PkKV~bXaFTW6vp)= zDY&;#yTAc{y}rLC+KEzO8T*37V3c9;vYv|yIi>Uw~aS}VItv=M9e4qRDrCUf= z7spT}_J2zmivMO2AdVx9N%MIB%_1lPDo|mZ9g6@8!?=g9l$LM$NwQ|T4aF;nXM*6x zWAO_iE+L2ow9G+2CCn;H`2R5Zd;1Zs-)h1%rIr7N?L^rhOU6zt`(`Z{{)Vh<43c({ zK`53G4Q*^nYifWZ>H_kZvDY*)UKe&a-I&q%^swsg3>0{pYa}L=%hZMxUEjA-l;!lS zKxuV!B>Nc-_y5nb9cNRp=cuuo{T-FA!Y2W?tK#nukgh08jg8N>Ct{_{dqSqY$qW7) z`GvWD;@Eqb=a0uT;v^nvUb`9Mpw***gMOeo+|Tw{hu(--hu&c8(B}h9Z&k+$MKrxr zTyVFgVjH{`fW{!t|6-C2ek%VI>0efIYk^$1Rth@3pb{eGc2KpVRVT~#1tam0m_`Dlc`#NON2ms>y+ODl zUvrtR*0&p99Fkw55b8z!n38^y$`X<)W{2dVWWu^u^=p+jS@oyJI9Vj=kJQ#938v{0 z7y(y(Po>16(TxDkyFxrHQYn!9r_p!F>|*xJ7+T2a64xzre&%}?z}ehJ20o~#@jo14 zvZ^qSN`z$xyO%Tv;&p63ElcCZxH%QXC-u3SJ>-l+haT!2pXm+AkvHCr|H0ut0pat4 z$@+N%Nj~l7U)ZMIHwUekV-A&t@t#xud8i*i%7?p^9iPH(+NKA47t{mO(-_2i5oWzjS$VU+>=0w-c2DCDxm(6n^7X4D+#lqxw!jZ9GCBQO`* zHGdDliea!!++j~19}Aca7|Mo+>#kO+l$D%0#9$lf!7EtO)AMT=#9IN7;JM}Mv?7n_QV(V&yOq)6pV8@k zq3??G1{{gIr}^C0=-lY4kComGoxt(X_`ROmlMf1?P$pP*m?&CQf)pIM#j1Q4@Q?TM{OX7vhr;1?y&MKaL_%eWn#VGD8OZx43Ee)!#66(9-i6_3#}^Cq5iTUejQ-3kU$!s zGmY=m=_)$bBZr;|SkB)cSi)n95`V$)8~~{JMn52I27XFMaJRorpfE~Y2Y}n8TZ=<& zR9B}Tt)0sU8PxHbcLqi~_(Fl<@B;Ls)q{59ViDg1!c4HUG1sklqA&H!BIN#od}A!a z6Fh>)1!4j#^ebFV^|umcREq(h(_-aX3paYP@+XS@OZj`xFqB1u35v8~F*+AYeVM9V^V}!27xd(eh zIlf0MG9Gq38J26>V~(6Of|HUnMKb@jbuC+P8^CEGSgK292^BF5Z|ie;gb=dY3Vk-} z2LMxN@U?3tSHUvGe0GD`L;j#U@C+cYhzEOqb7W5-zsC58tVbEoh zSs;alPE@ zB2C|RrpL9vqYNzeM(smr&8`Pc6c~3s_X786P8eO%tqohyK2$PjfOJr$TiPE=UxHw8 zY>x&|_+=TD+MgO8^!><}N)FG5snmX(n2rgqK4P{7H8u{vN)IoP_cN6!g)|+fgCo6L zNR`loI{6){R_rpY1md?Bh+AvMqGDxl_8tr=WT+GVY32-F73A?Y^$VVdUaJ(=q|%v} zrFD7%_o5dOD70Ov)7gcOVhrB3WM@l4;UFig%2D1NvzOWK~(mU`3Tv)K{GIyj!a>D zzwEsYXyw;==l}ajSB@r;6S-AdWmn!_C-T1e0avvRtProxA3;PRoAk&7X-MZGuS0hnfeFUb%DeDG5-O8Ple`>1Z;Y&g34YFAk@l zeahn^&A}sr8XP;b)%+$CB@8?BX@e1oHO+4|COgF7RR4K0H=QzNRZ#ptm6r~Lq6c2Sja!~+i&)WkX{OaMv&Y$(_ zsC4?nK!88(>;WQw>g0ztV${xhc*OqHNe|y=f9jlv-(`R5WQPygpE}mzciW#j)8Y5n zpE}UtG5b@eIefqUsiPdGfiJJnIS#+i{?xGzKVX0A%!Yr%{?vgD|EB$^^BI1>{i(wl z{w@1cCo}xp_NR_zc+&pVnGAox{?vgC|2z9rr!oBR?N1%W@Ra?ja~OWm{?s81{|Eb1 zCoudw_U8xqbLdOM$%B<*U$_U;o`4YH6aRZi;~%ah{EutO6-^FTvJB!##GUX}pIYra zz1FzaRztlbI@Z~AJ`zJCXi0Kp(8FB=)9Tb|CweSm;=HIGw|k5ppmvp^ZvcGaj0hWd z=h))4Eqbm-f+lP`ry9QrmDQGA5CET&O(DMh4`c`kppP32!e$0B?QNg-@luddPYYa8)ZLD=|f1;8u#ymJm zL}>0Mnz=*U_ni8cOkYTK4yL2!0v*~O@&Cbco+-dN4-VoDyf*a3vvwfZ;X{VUTwThB ztrSi1u0ld)RR)SiKhy;~ZpJ%O9oB+9Bg&hZOki(vyy0%!1YM;c zi7bF!AY?-Irdz%070|8am+T(5_zWn6(OuGssoW%Quc$Sc>|z#bEI8G^&%_2Wx3=id z@Sr6IhW=dGY}i0FCe)@g2#ux49pd+3(x9`Su{GJLzn;#aOE1RLhLKxcg+7Hvrq5u+ zhzX2gR}pl+gDkGXAgSX7(Y1DiqBdet0Sc#bKpwzhKA>~3?F>3i17>R*AGDbzti3{9 zQ^WUBdoxaAFbOjucdoBmtu%HLS_WoE<)<3cSH16*7M6$0qWYC$~e_C~)nbXUs@ zBaYR(o6tXQ`M>;QMgQ=e0HTZp*DK8Igj&m^na@kcWCN$x&QWbx(9G*79Mvu zhvu+A^W{!D*etKo{v334D?8ijJBMa~&J9Aw`xb*L)htLiG@j+L0>H`lf~~$$gbjyO z8XxmJBJ$rQcox!+EL?o%+%x}Cx8AglVuLkEPgowAY218uQCDgj9TSygd7XBagc8bt zN?$0dTR?j^UQ9)S3*pna_41%BRJawTf3E_OTJ@1f7TA}6qYG=)D7-NkI@D|@(Q&+>h}y>bl~o{Z9h&S1 zl0xZ}=NdCu$^S&gS-QpflfoF%wu5f124OF!#W?brR*jBhb_Dg%qwx4~Yn(&oVKwCC z(vj5Kz@50((mUgl? zcdlZLR|Q%%JZhQ~pBO4T-{2UiO?zW>?&bu2&~>d^+jl1i*!jl{lgaB=fe#yJLY`Lo5~f4Zjc5$o1b&?>&U&b372W(ylV=F zi)Z?l&2Ui&@R5Yl8nK;KK&WM^9wh-?Oy`foAhOqI}g|I)2 znBgAWumxL!NWsAKN78pu(3_19R><<4tGRUk6k9us56)vS?>jM)F78}eTMb^o=z$GF z&=CiOkSQ`5Qx%L9k-NV`+!_%*FQ+b9gy=#&1R-xzryv2KGIwO|+U1r%tG(ctDQ219HT$>?tH*Y9W)HpxVruq11`kq}}9!^cnO8e>Zkm zCEqW?mAOLCnh$-(dAXAkWhTDPq!9#tzy76#){=)=%w7{#N}=lEd`)OEeXmBr;EYWi zj3WDfT|42z9+G5tQ9#cJskylId%*a2&1^Xf;oyR+uyACe=@8StBp~B{4M|+zI_LHuvSYZRMAY?!j2F3tbwW`D!>NfvxwP zgt)qRZjO+fsL!c+>_pWRiPcu~a4!1y9-!DIciiP{Dy+q++YhHR_4uKFSRpDIwJ?8k zUd$yVdP~I4PFl1m1~J^F{#Lw~ipR_r<5rx=JdES_#X&((XsV(g`?-&`6GmIJV{MM_ z;Y`OxO$LgEC!zfZZ5li@doZTK{|w7=Ba9V)DVqjgcWl(zBTSVfvLe>cv~gL!V@4Fl z)yrnYgDf!mM9F3FdXLB8b#oXzSs9xR=Il1D(0bBG$4P6W58FO$(36j+3p?zMgh^>^ z7I%r)oQim_K>ro$gurYjYJTh6I<~H^mbt=zSC~>xe4e64jvB`H+Wfh>K1K(;)P#mjrk#rwKp4Q+v<@gtX-aaNvZW>=IEvH1%>HWC<3-GSUzq?Wp8z zZoyT!b4|)ADMA~z=)(lTw=(BgdWbYTH zY#TE($H`1!a|j(M3=Wb$EmX#;om=#M1v`7l&gg`FPiE289YkZrSA8R$f11Ca;m?q$ zK0a@q8iRaEl}z%CkWV}YB^OLTTBpwb)zxe2cg?$=^(^$4Yd`P|9G>}T{fw$-9Y3z3 zdDvbzuGz>Y@wC`=G4~WIUrg<6+<9r~_{qx~M{HcSx^LcTb(ekOY<)l6Wqo06-xVI@ zA)SFekebI!QmHOn5ISpgT!l2^fKY z{zE}{2iYb`XZ@0|+$JC8yXicSoH9Sb%I$Ma$~Sw8@{d#HQAhu6GXH}mRmk9Ft~IZ% zVpc*NAfI>18SLQSB(4HX2>LOoIFajCr#j*NjVATGjU;3I!)$LBO3;~+eEwhDoEvEKy3DDs%IbFubPv(WK{T09a z`SMfg@IqobXQ&r*&b7ICaLZuafuh*VE3Fo7q}Mp!FQ)1EmCa2A^7G%1rzMXg&?aJG zLk7hHdgE{&|?Y9n%h4;5cXyY$~eN zsc5B~*h z{|R^8Wch4|#(8+c{N{5UPQ!%J^^vri*UyZR`yvj8f8l1ion3er0f>G*%gr^1ji%6V zk!(3q>fM~PpHFq>YGbY40tXc75Z*7=wtd^U-65uE-CAjFVaDrJSvtAnnzDdq@f<*- z>#Jk{7&2u}LEiR-Dq>5Enw7mvu}fB+5gs0{osaKd&VhEI7rQU-7@8ePFCjTZDeN>AIp&_kiCb{8S*^jo9HQ@SDx)>VJ$9_Yu%cei1qsQYF*2$7P5)R=#~~YWP6U;yDE_|0ua!89Q%Bf)f*b z@{qXg+dU^UN|cy~@lX$*kvLM&+#5i!@w4=+3;OCp_-wr-{NB%2P0!@!ug71NLGABa zZN6AZ&*l-hHi>$jB*|Pj8yh&4KQM0kX&A^v5D(HY*4j)o8zv$iLlL|(V7y#OPlRuk zO|f%Kwc#e)x7V+1uJ!%xe1SSF2RXP=T4SJR+5~!n`F2~C^z-2@*~_-oaJJRFpl&ed z!#KUXklwNimW1*BV055o{bI>7J>FxP9yiPM%cW8CJ)`DrRHHO%vS$=A`Gm!{N~7NF z8TF=(S}l$GdC#by+o<)*Skt1foEXq21K?uDvMPE#hOEk2$&{*)vfQS>CF45R5qI^^ z_lDB5mR3`=eQ+xCt_DLpmx&siOkX{*B(XIr(Tp~87RHot{CR}9| z<;NiZt@g_H=FOgMPQ|E1sjH*8{ia;YDxKfi(15@pdYJ%(mR1gCU|Du3kb2~QbQh3G zlNYj~rCBR?e9KT`F+h?LGn>#cI3Pmr6!Dl^)5OcLtpFt zn&hS8%of;zHQZ#X^2{R%@oh%@WvCYueT7>*>yFuFeV162c)phVCO>o8o^W-`BP_hC zpPX~vK#O374^@V=_^R3@p66UiF>=0Yuevr{hyv zStyEQYmS8lrTUx20|nGK);!SSs5_OhDg24#YL?^>Qr42nxg;GssVk?`g@4?nvR|8f za4bMLegpdGbo`^bbuOz=7xpsfYwwqnX|e3aZ1tQN=Rsbr+yC~q^a-|fwISO_Z~L){ z7fQ#G2|MHI$t`Rr%aPWZarnfk%rYE=rFcSj7&hmD|71I2REoV!2auCw;%BFzI~3XE z{wOH;CLLGZYUSvViE!4ZMV45hR`%`BVl1lh>^vylhvn4UE^Kqhvr;XJOXY0S6myL< zPJ3Erv22L+7yS|^Vox!lL1r}!@>GauHAm8RjSgMGUdO_vn$XCM*v#CD`FqmC4rf#8 zd6ZWo{7BVpHP>P+v_^#q;xb+^dtEEumnfW$9_V?E{`|}>#rdu(S-@XtChroUT{(|7 zECm{5`+F%Uin4tPWF0Y*o$cFGL3Y~XYL9tWv`9Px;tY+ycFE~1rXL|GZ=vC(*+KL3 zv0sueqvLnuG1~t5MSn)?3rl*Fk>%Gh4h@S#w!B=k(`U_c!pTKZfb58jk&W%`Bm(wN zb`_aS`|o*p;;SfOwrg#%xa+JqK)46`&FVVeVc(H7t46Rhb~X$bD#9j?xmV!0_O{1U z-y2P-RKER@z+7axmf;VprtX+A8uP#wuB(CUAo;|fRK}*SbXLGkB0YPgu+f=3^8$t2 zL=I#vDk5!v3W4G&$zEseBLYSIRo41|CqwD@WxgUgK}K*6aeXU7ZVKKib@bE7!mA`Jq}HppILQfxSCeno zy5Xl({B44I5i6~TuAjzeF!G+{&xj;ww-5%p1VZyrS58W#8PsUjKIQ6bS{9DxkdE5ECz-xvsU%P7~B5 zseY)cJnQXtLv-L=A=$<^lr4Y3^c)d~;8Dw8DS0aQq9b`)!QZT1i)l7C+k*Edz8Gvs zN-wkN8gxMedM1~J_Qlc8#M%V_-Mq5X=S=r{PvuL!K@O9gyoJ^J3!0nI4*6oqK*!f= zef08u5X>EnTU*LHSix0BAk|F%;nOJ$yt86C2`hipy3H-3MXWy~nxsRD6qC$k2vshT z+5*bD;g5iLKDidFZ9?U%{;dTh1!C*#=R{qCKMe=OZ@A1GmvyKu?3MdO&E6?8hx}0W zhi>cu|B!XA6PzQZb=yFvHTr6N4FHsF`y$HwOMb`({nWI%J{}ica)NwjR%>KqW)mNN zNN3x#Ljw?OA7pN3F^)J+v*#oh0F>f_l9L~*e#COP=-jGU#5xYy4vLP9k;_KCTFV)x z?i+?D!$jE(UqPh^_Pky@Iuzj#li}(I(gJV^(zmsc%?fV?%D$$;g=T-8!gZ+>@h0@a zrMrgpIl;Pn8v=C;8H4o*y4ecMldbYHqAd^>`_%()Zc^p~`faqZ7wWGPjzE)nVnAX1 z`Hdr0wYhA&siclnsGbd4Ul)n$xu!^I#VrScx>zY4r>mpgK~0ee`*T!ycY@R{e2+{X zO1-YG!ah*x0^M@)Si*6>P6W-6#I7T7GU2-9=VmP6#KY@Fb3y=8Renbyq?F*pC8^}= z25@C(TNqZn_xan1Pl{ZIB5IQ4!rJ0cUAVa1{IQNO+Yh4vo@GL*)}Zg_p;Xf>H0%K5j6Q&?31c zvgUiB0C`t3xzGCE`Q%*_XG#zYS3J8_Zx6h(*B2qyy|gXC3z=|zb!Qzhso83+zs0~B zo%r(-u<}zQvo-UqJ%xa3p4VQYL{Fq-@`04lSR4j&-sT1r ze<5LRDq!FNu0-v4`FS{AD~3zPsKxIf`>UTeeBI&>Q8*SB&(Yv#9bcQOY?!GG*>QdC zh|gUHaPk94w=Z9G2u*-wJ$NkamrzkQV80zEwS0BkG#a-$)CuLH-Su*)oFp;AXCKA8 z>P#0r>Gt2aL-<>1I-Q5JrxOpR3r*la;9x!*3l`ub1IMDP`1bv9`8U{CzLH2|!#7nD zD1u<`FZwE@<*arX5Du`iy}D%zu)fU%KObCoBW>^IQC9L-c5i-Y{BU~F$}zvqdp*cI z@|Tsd2~$0KuE_YjWHyW-t{;sJbZFi|?o3Z#qyM=IL1yj|0_RULS zl3Gv}nQqqV5=}`y&tdODEi%117;AMk+|dZyNJEsw>W)C79PMJPY;Hg!SpjxKX@t6t zvXs}V&up4Y#Z@KRk!2H=#=%x$X*YPz!m_x?Yv`{8Xtosbs#J1lj#PARAi;+#82)On z+T}%cH@poRZ$NAl>m}>v@XG`)8=fsAXYunPP1Vng=n`8YH+e1{m$55Jm+~w!i-2?u z@{1I4QSSi(L|$vYxpsfi#z;N~3mqOA>&`o{c(U)f$^(~lAUhut(Km8nN=9g7C)E#(g_|Cnsl#ZDg(dvPx zheg%{*gJ6EWQ;(J{4#$9H%j5%NqUUMp+D0yw7HBUFIu_hikISV zdFX-}%$*h_U&-Ge?CZrjlkv32NIuC`+v&9bOC?>hkfD4<=kx;x-YLJ@?XOkR7rKT# zYnNVQEcm9;`S0Ai^H^+`FwRq#wL<9KUsIB|dsQb3tFqT5EG-0i{|&F{{yFA$O}fx9 zpH68Z#JLfk))o!QP50>(o}&%O`jf-yoJNI_$b)~=y^MkH8J&50dvo1)H<}dO1T51E zAz@WM6|ka`^aSN4$=9^=|4L=y?pK~JY|ZDVVr)8LBH(|kq!Z6e-c|6PNk`w}-e0o6 zlH|WJ<;Ym_t$fBXC>z1!MjZ>_N&b62JQQcmj)y2T9TOFih3+TX)Pq61ML3x{{MlcQT3#jzMoAzw|a{dZuv9&kSp zhxk1~_KRuqcl!4eY4Z1|5Uwrv$VXGSHe5dP0b}Vg7Yt%VPPe}zos|bPn6>{rO=qx# zBRI>*4Wb#hA85Qwrq@$WTsxPJy z-2v=3$XOEOKEvP$IgN~?iXzn6sG=&~(a#DcC+NS#BHYmjb*FQk*-1a547Lbtz!YDp z3^>&-Eyy1d07L&2{7!7==;L!)?oIxjcIUcV?NjNJHhn}6$-J1;*7e)ew<1{P=<%a) z<7=*KUfEuy2e8*2#jyn&ayM2lir~@m+9l$m__d=gPpMQYAQVhRsH}H)*x%-8@>w(4 zU#App586Fqa+I5Y$`c`)t^e?Fs$qB3koBrz02LD(9KoF+c$$ZSKpe-AYq_%sC`VI8VOQHny4UbWs@zXB{(ear+pg`^gq(~!iM8C_-n0`ZZ~#;aI5PO@OJLfAD%szo>Kv&t~~)0d0r#LF@TV%35)e}?;6aT zb+vo}q`K0PONV9}uLaxTtdT%!5o>m;(s%PCWS^?9XEJ#=3Ug~WuV||uOZ9|d-2eCL zUzVtx0>42GSc<#jr6*|h5izOG=h!RkyV4-~g;|*md=I$Tg))0&F$ak!M;+(F`RJ5G zArh?}WloznfKpBtVZw-t?m&3Jf(CL5_)|qh8s)bK4Ql2N%%9E@QA3E{j2?kVZ{NOt z(TRiItXL?(rZ{ZT+J5?q2c}~5F6vyR`kiidE+9@pqXL(IY4y2J;gcn>FPp^`%0>^j=*xhecMWnZ-r?NqXbJgJ0X(MT@rDiy}e z@|jiF1#g1OU3WJcF-wHPFZ2x~=!R3e*Sc*h3O%WwYgg~~sJkS&9?$H7#>W2-^cuYOYmJp&|HI^o zTzRk&`}Qt}h}do=BT-{4qvwH|+w97u5UP2Ejbj!OJkHbZ${6)oSl}H+`L8o*AI8g* zx1f()7n1%7OP#!QDXiH!Fb zh@@zE;h@c!x|^D*H?xo zMKkDs2jJ(cjL^z6qzZtF2mye9w|sQ*K(n12{x+a-7`d#=6dN7jQT$<9S@+9p$Z&>UVqPE!*d> zqXGRND`R8$z5`A6KNgUTWPc3|Q_TxM+_}P52^QzSgCm>LNrD+I zIKUNXd(ixZpwTcs!5bTze6i2Q z;uJ-~{1$Fh{5!s~5I9uac>KArqGNu;O()pH5e`p2SlVgOr+89V{1aSwD7MDMQl}#yp{s~{R_p$eXAVJhsnYQ{bQQGddfzT zF{!6cT;5(aC|XS9S^TF+T2l|EmtukA@Up7UjnHL}$&{$Pxx6Ek*&(j%T&rGPy;Vgk zvzpqqulvgs47swlLn?$+20LvTNfk@zJ$J~DSZQ_264|GvOcu5z1|Oq&5ai6(46(%1 zDv8Q6W`Zjztkq%!z2#K>$_MSOAEZATfBUQXaIC72{`L>n50AKQ*tV$GEwS3TV;#u$ zdT#gDPTa3jTBMy&X#Me)olshRAU~nlXQclLVX`!Lob}PdIM`U*+_=_ORtg*VW*x2D zy}_4mQ&MWZmc@Er-nzDpW4>NJwL^WG9rqdh8lLAta+?1|zI2mV(-mOeC#!NwEN)Xb z*_hoXr1>XkLZJ=zDF}6_IN_lm-BzMx_6v(X0Tw~-L>pHSsiGeD7u*=ip5Le??@xu< zyGCqf0b5?xd)X@;@KjL0_4}*V5-Su0CFvw9*${X}E%^Z%!@jG=z?L%ccQ%dHAJwR4 zJx(mVB~&HMJ)B|YY8Ft2K}XlMQ>|m$SBB+jFVRW?yyUdktX4lf!L>=h*kgsXx2?nV zNisX=(pAYJPE)gKjW?~6Ow~8Ee*!58zMx{DnOw!g0I?aYR(5FWo*h>$A=~91A^SjT zpuYoXiA4VxJ%M$sB1EpZ@;QV2cM6aXP&C~-n&UF4GlK)6_C@PWW&mj~TiFLsGv{&q zj>S3<@=@~E$Q$yAOrOabyPAVMzNJ<@llSgwf2SJ6IME}*(zmTmnr+1-9KxC0`$8`z zs_~K?SEEIF;p8r5Dd?9JzM{4Cu0i1rI(MKF%b^e-R2#oR+^>0Uufk+8EpXx|E_%)1 z=FWOJcN_Jul;3%t(ZzB*%Okj~s%y;Nn7}byMY}S(REHUN2E^jUQA?UzLeaHRqA>W2@ z$`%a2t9_E^^dUTA-*aOqU>~Z+)RH5`lew6k%*Ec5$=~5;rrEZwJ&*p9>$^s6U}Dp; z$f|Icx&Uouhg7_lgZdH=&(J=Ug1M>-uPYi6fGy!SSD+2ASzTXmHCG9N!A)*=Sw~cV znintWz0Yr|#>1jHU7;A?FGD*td{n3gZ7-oa%$q;^te5kzC83XASbaZ$$IC-gyVf=o zCR=RnA>Bh-1~qPn=W^UOBdqzPZ#F2*>0u{SirU_UT(T67EDN~+n#rqy0$x((3MH1y z_na@ciy)E*e9T~^s8zc;cXI}nnSY7JjqCYo)(L1+)%sAOBZmCe4+Pq;2VyrEz2k=7 zR^Tq>;6Q4RWP|X=>}Hm^&&c%mFM`U1Y(y$zwo7jyErFYCebrvqxA}Z`i?XV=oGqju z#ui_(6%Z@CH5aq}^di;i%o#9X&pq__zNtk|$|)1r6+Cu4vazp*hGY{epx5NeE$G+0V7RSn`Pir{hZ2P6Y79 zNmYDd0AV~daW;cn91cG0`Fa#V@GpgBAS$Wg0mP-gReiF$Xh2wG5$)s0N%c8?oMNLy zoh#^EOph=_WWi-obpniy%Z~Rl+54wo%NDDlX5;{;QBa7JE~B&uI_-<;xn?QaZk2nt zom`t-MLr$x`_ow10-oTG#E70`u}CrilhwV=|Mu2x_O~!DzYI~LvMo5H@%hDpSM59?(v`481lzCk<|w3ier2C7|X!?C|}&N#HV+Ib?KD1)qg z8(6HDBa4CL-P#0x<<2p z2-;IY2cm{f`ibFmZ1Q~T8Y&bef)(*Ce?DB;1e^Hy7l3<{a3NV~+$(VmUp-Ds`Mgoz0;r^sVETDe4F(_}uKRLnUg z8Ipf3s(BtkKmNR~!c;I@rIW<(k0Bstmcw)^REwKThezstR5L!>zzTzZLDbPMi z>aSuMG91g7L}7+Jma>+dk@!+rLKI?fNck}0sOcSFeF~v{l`b1x8R4wQq)R@5aNUrB z0s*HDHW23cPe#C4ahS_iA7}FxymtGrjybCg;zjL6twjL|wwdsBQIm-`22{JTx`~-1 zzcOJ@lJZrhONwdrvf`_FW-)3oRl>JXT7@KNyJhawS5yRi4$yWcD?XQc$ClHv3{Oj@ zCP4Vs!4NumAAT`D;RFomPb{v*$?IRvatM-4I=>7x@5{TNzP=-LVyVkyOMEl`ors>K&VW;kFZTqw)k; z5zOvuF1;_#KNaFz3Z^FL>c>^E+3P!>G9B;4 zxj%%ri_c4qhA_;9@{l$U!m1@UrPDvfk6;GhqRtgc2?U^9cNha=-A^%Zsrb6zgzVfJ z@t^{-)5|N-NGO zo``j@@_kDv>3K>`ZpRh{JL&6u){j zJ9NJ^cX8}LjMtQf_dEMRxAfb3?h5H>E9%mxZL4d9WfmIg%Xb{4=i@)C@_)jhqlTQ> zVL7;9B1OdNf!Lez=|@XX_rKyLfdAo>g18yAaJR+R&ZSc@ev_Soln#2%FNW)WP9iXA znr>dmWtHLSpBlPB?QhHSSlyucwz1#HOmhSh(R3$Cd}l5B%wS}TH@}u3@8@ZLa`daX zEW{pM#`2+b{1B?|=Ox%X0*R-o7HS{s>~m>cpw|brP;C)ltm}m(Mx3>8uZ*RRZr7+Ft=a}6XqMe(#T+`5GCh(l z_NNzuwM&q4)~@F-T8N-2;<)b?^M3Rei&00psR(M~XDqwmi zCtz2?_QfJY*|=~%+uz`T zV--pLzzLa5827I27It4=gj+OsT|?uFcN;`4vk+pFr$9*Fy4_M!dns%Wr?g=ZGBXuc z3r;}RVC7~6f*~O=-u==KD{>}Dlnqu@HL3?lT9R*AVJI%6x)7ip=2Rovl(QW+=;o$} zkz`{L4hvio9A8c|dRD7GtEG}QR50MiL&!mwy*pAvCqtI>VN2BIq(5dO{k>cgDWPz< zh0#QiD-S_Qz`Eb2NrN%4z?OpaYuj(4mAg1tvv(8)!d>($9~So$rzq)Gr@Rez^~P%B z@w6UPuH(nCQ((77tuW+5)JKXV?ghJ(y4lPeu0Hu>bsmjK)L7OJj!uBsQju7HYc~by zbjcKw9N$JM0&iF@5!e})WXpnF740FlFZ&~9F`%!Ye~|9$|C`$*f|Nw=WHDYU+9Rga z$|vY!g!fsKkwr2Qr1+d`x*5h@*~!=~7hS`xtTVPQdLcM)Md?r{!e``$s}d-cF|WF8 z7R_eVqN!_SHb$|<$Cx~yKwRSo_7Y%28ElJvc)0lpm z6yfUsfyYk5USe$~@KjM%sRpDA>Na6;zQlHaQ`7MH6TM= zm4(@iAG!!42B_1|JRA8Vxy=a5eO(JyR)GUGCx*EHU( zIecZ}2idtea#C)WrTY8rSlaaKuDb1j8f|6+<8*#Ha4jBL5%plvMwPu)1=LQMR&MWp zCssTwEoRdlAu;Y9$jShR^BJBTPHkFeW{ht4yD>8MjZ4A8S7eK|Y83x^*SIURZTS(} zM5vh$MM#+3H}*NdL{6^@h^b{m?F|E{Jh=Dy50cuYBV%V}d1zq!qa<>$1Q*Gj_Z+uO z-PMg7J8NX#$!tdDK_OEA>yT73@X89RLoYr{Z(Q{kJRE|4DL`Jc@KZ|Pp`K&L1o0^a zjL5-DVBxXC&zQx786dHo;tI|M;+ z!Z>5iXWrh~upEi}4N!RU>2@3$H&2_Ub4|o2?jNb5P~tY?t1JT05+-ClGgl4^wq}|I93sQp@GuboB~l47R&GDV%AqnKM^{7dq%wIqJ&pYAwcPXkn1MTd26>+a1$%3pRxofL zZnN{}{b}5t(_e>8*Df-Re`h1?wG_KiOI}X%U79?6l?wMF9s-H?9LljZI|uZ4L(?X5 zEbvsIwPMEt1i4!G0KS7HKqDh#$AbGO0IP@ij7mll@1oBAxc)gbVkVtG;!kt(P^YX| z*=hP;K=o+k%dl&veK-o{vFeCRTBb=Zs1W=Cc!PLA0M z`$wF&8y}u@6P@hISWR*&A^c@GD(JgEG{Nz*JEAz693+7_G%|XfY{pJ|=i2Hr%vknJ z3O|Q{?%7L@c0yeo)aiJGh`swq(r=$w;14mWY2uJOEgE;Cmo=9*FZv7%TU#F9APn8iA=9R8k+PgIfzM$!}E+kB!2M#iRW zqU~0EyzmHNxF6j)_6OC+9(_4U-aj(-@fD9fXHy^v;%nSnsOR595691o9tK(i?_5?D zXEhS$pAU?rOEOOy&Ys(lS!knknjey6I(KRZ@jIWw3PH>LVPq>8PLP}^Bho}jC7#n< zsW@!0&Ul_Qp`gK1w$;GN9gBltlvB}FvmX8F7Irc$Q^B;v4zX-|F`zK_0Lte^Y;Kit z_el2O=)R?T@(@B6ch&?gC#@3Scp#$)J09HcoFJ+kg+0fCpA4%r`x9gxbg|+@W}1Yy zw`%qFPID9Sn6Q$aEhYJ)_P5*keoZg5zvk2V%l6X+|AkPD(^;AUPg$M;0l5}HB;#kf_N!=3$T=qN8I$8@a1xAB zUjW>IHo3QEt|cEglr}6<^$hd>70vl|i&ZYx(+&&bM(MB$lEv`!WfWBp+t7=mrK&m; zfqVtj-=?-hT~9_cM%*EbLuAxOuC!EgFP<#Mf3r|)%J`-4JSFixvg#ooTG=jF60;}$QKz0N?dp7aK9 z)WEP|3(0U9xIuHc^(_m#h@C4nxD!!0i;*Qo3&rP@cx)}HBYp)A&vByzK`>C%4z`!= z2S!Fem(g4la?2oT7wGP4ATom}DN%ko88Pbn;0R@Mb$ivZ{&|-Iq0B~j)6+zuG;S{& zNmi%fPU~T)Gz^05E*O)#+CfS{EY++&-K4lpk;Jr*jHGJ{ZaTMN-uctv_dsU|S2%A3 zLKWQBB3)`fK9YX5xEn>Uta36FJHAHrIZFEg?^;zZ*i=C4i^tdj3oRosf->PVmaqV#+unRbkXP5%KFwa6^?dF0f1(Kn#R_#eS=84WyKM> z7l)`$i&ULWPduA_865g^KE(52bBAU!|H(@}j|&eQ*GQqrXRN+(>H<0no(eZM;_ESs zpj%a=)bW;xfb2J@odBR*t~~>wyw&f}5C07|U0<;n2aO z;K(asUU&*RVuWtKimd4Hogis!ea~3Z7h?6=Cj&rDB9bVKNU=)302ampSTj0tIESjy z`3RvLc_JjC7x{bICN5a zLo3YudAI1anis&uRT@l~UXRX3IDygW=g;CRK zmXgp!u93PNUN0}c?sl<&%bsH*F3%{ag-gZ|3MJ=6iwV*aKM-ptL6yD;ZXaX(yV(p;4=TMDfJIbAe>ed+RSeI)g<3IyalQ$(X6t4&x;-#gU$ZJpX?-CEVm(Iun8|6izt-CWmUy0{f6y9%OFV=P#}AL57Pc3h z^@6Nhl2>l4e!7Vv1{ybofetchGVE16C3Z|^p(d~dk|>>v7s)PmyLLgV>B7un_N7tS zxZF%w*K(Xk=El^x4(`ts=LQ-TBl$=niZqTnR8|@=ZD; zvDUe8t{V)`e*a9U9t{NPnIE~E>TiI71^oI2D8f;>yi z)s2_Fg!cgrnPAHHH3b8OATDRG42^N_a1nT@#8<>U>wKr=v2`pgRSU~P$ArJ+iziGX zjC!gBN7oG5i3LaESM*o)va=i_o)$;p6EH zI2WXC0=mwnXKrTM4 zd#Kt_k5tEu{$1=`#FXR*FEj}ede)IuX`69#NI*+)wBn)+R$z$7kMIj^?yg{)ctB*N zu;=io{J4bplo#jw&fmfbS|aLHv~sykOKmyW1mpLa^-FZFU%xN?hyMwrshg9${TB`aVO?Cli*H|3WZq?UqB8 z?znzh5smR9A#-2>$*}oO3fX<*PoxX&R{(895nV~228k0eDT6I23Ya$q-3(@kJF*4J z;wK|253Um7f44xgXtKD9h;30oXYSnQblr$)wtJJ_iwi4CUhUee4y+w44fhPLcX8E2 zrsW;(dO$(QqiRFK2l~NO&|~2zBSZrv?;eI0fwdPH%Gn)aR3Nq)WK4c79`fr|UwDvX zqoo{EaK1BW1}3c9$Ah{`6{fz*z{D?|J)z{Z`@~Q>`w{aInSUr5J^SmUD$EiyqU+n* z*xb2xU4Nn6*|jQr!Ng2mgfij6L7}Ak@`i+&CIi%#T37L{AbeKKtkm2kOFyaZIi-m2%Ygs;(yR8qtRIe z)m42GTkcw$P48&hIA*KT{Gp8GZh-O7i|8et)db@52etj_D<%Hy$19 znVwL*7e~^LM`7Y1-?1VNrB~qgdr^UUFOMWIXEV*7qaAt}-L>GY`Hut>?t+|imE=~yTUc{w~F8$kpP&S;t9z7$|Ky$)NgcE|GhDiR^!-`-EW4{TE9P^3@7te2L~U3y^-AVhIt;lcT+0YI6@Vl zl1&KsF2;F^n;siDo%w2e=Sg*hV8N6y0B3A6l2mPCk{~EN==PmuCD62n(iykv{1KMM zBz+-7Y{yy@4GOkl+z9(5pd8!h>QH+9^d>nctuq@66K|F489(LlvW?50Pld?kw)1ZaQX1`bft$d8Q+;7Kk-<6!#)FPabBq8tYx+Mr`RFW^KZ3`Y`~ zD4A`$=w(~`)da6ts6z(o6MiN<>rcThsITss{e~*6y^zvLku91Av&&Oboq%=($Vd$;tSRNNDab`CdWrKr&~v=PYr6AnSO4sx)Y} zKyvy6Y!^)Wjb!ero!e((WG(?9^1%KXgdxWx!r6-|%_m06mW|&`<|!;qEbgV9?Jc^H zBooOAn6#n%SyXXS2aPM86g?_&r1vKzz;#GwQ;_4W0fT-knX&6<^CiEnPmR^}fF*+{ z?IiZ{S6ZFk1D#C9p@mzOB;2GABquLLJ6>R|81MV>gI$35?~=2Zb8}#rCi(YC(#W`A zfrE^XKeMy825+0RO|<(lvlH2gfXP^MD@hBs9&Fh&6xErn8a$xxLkW2TX4-H7Qi6<+Q{-nbFS4Yy(aan*_!1yIx8kJ-fo}DK4Pi1s`eI!{Q84qGWsPa4E zz)!DN75R3Rq!yl@zf3O=3M?w>r3Lp$>X%6sr2tv08Lr>?U~XlN&Fr^$ZL%MSlhY-t z`Lv)@Nv@Z^d}gylI(*1?g`-U?R@@vCupE+0h>=*OYK^P4;zBzVQ-N@uU$r2Qb2$}W;)p)h=r%NPvBxA`7 z@Pio1B0Ml(1rWJEnYNdyTypZ>Wajb)ZW*iHpS&-byS!m;0K?{FJUJHEciO6SCl4ei zdC^DAf*7`!{6=z&#RdZLH1{<5&17zAbMp-KXOWq2w77Z!y=PrEd4F>L@&=5UOQ;C= zh!ww;ob{Q_HhHl{7>tCf*{pKfZzq&E-X@h~JDE(*`&eFmimFFp2Omh1k7Z~=rxyam z8j^bY@SjnFl2z)A>dHNG8%Riu5AWU?NssBTBH2m!HezDo6+Pod#}@2DP4LgNS4Y#) z)#jfMrBimo66MCAPPa*Q)%;KIY+PHtvbu&?A*8?E?*+XBN2~rE=#eC|T%YVCb9^GZ zQ_Uk|MQV|g!*@c`n~E7gJjTmg!&$J;or7U4_CUgP~UgZ zud-18=gtL>HO&e_t64LH%$JNJO8O)lm+rIvVyd(Y9f1C_00KFbWY9~I)xRH<|k{J3uP}>vcB_2D_JiLdXRrtD_P&k z_X?2*WNeZ`9kgJ2L}R?Oqb14g>Sq4~&kUFS-re5>c6e74SXXe*o=jlqXwx!*`MvG7 zeU*RR3xDi6>R|NhJ)eU$dgYX9klkzgDPnO=KdL0%tDH(^Wv*E14EX)QWX^w&*7e3f z9`GOHRA!x`QUso@z9zEYNfv$1X#2TjIpjFBhSFoCwp?l145x5sB-Lcr2*x68xz(Xz z_xh$9RW7S0O`#;mp3v^0xEG&nBCllcJz2)PCmr;%S*rrJyx#cZ&F##De}b6YasvAv7B`y8#G^Qxrq%yMJsw5WCJ)PGuh#@) z*jPHX(dyjX+fDWqp|?pf8%o22<`H8uI@n)0p92F*Ko6MnlG>?n|kpHpaBJ zdvX4ElUb}UcbZ_5o}1U0w?{6RF;iR1r;u52&=MvHvjD>D(W$c9s?1tyH^=n*Ux>#e}}JNo~Ih0%u;EZ8n(A?Wg2OGP|&bfi9k8 z?}lqS@2$paGqXI8cA5RVXkI$!Rkt?H3Oo3gemF_Kq%ytbGI6*18;$>J)QJS>&bM6A3_(rWRF3%r*+4p+t>ouy5nDy zxizCO%9Pt6rii5Mu$ome{*pH>0jM;C_0LhPkvpF(LM{*HfCPnHMN2<8l;S;H-S8GF zO3;W2GJMSqFJ!fLLQWx-7_v0eb95Gyx5z8a1~0h$8f{BU$x~7+j5LceHJTJk)v8h1 zm6p863PPY3!vpEL4pmi@xOar21|$n8JiE2MZRt4{AKz86MPV%gM`HDd+Rw4NdyN(a z&4(AN;t5_J24yu`uk8@fi66!)(9tqEZ2y5YTM!;7EltyqV1&ob3aW-22EjGHI?FAh zy|EZTtNBAxKy(m+z6T(CQAD3#v)TcKH@nN>e3+6lh?|s5w?015vO8g7I`=|`iS_&qR1|&(33aJ{4Uq73hJ<3M%ecHJ?us~$ z@#I@XFNcT|J@x?IHF3X`Kyc>>+HL zECb^E6$5Bx8)L?ShyICMklI*~M1OANif$DYV(NyUWfEwzohu-Ub@n7W(aUqLNH3s~ zbm#?JqhANyBU=#eVk@j)$bDE*zIPViov%l=t*yWdC-^Ugl{p~|`H(u@$Yw&GCQBk> zB33>#dRHn)@eb!%YxUziTiK=0Igbg{y8q*QVnMp^zZfPpyo8M_NGjDLm%8KCM=JQY zd-Z>uT{K;c{2Y~Ibf?>YDDAmq`@a4Uq+R#F`ZWBKbWVg+&lL`No*6}!+Dff1le@I$ zHg<&bexRtg7F-V{LtcD`j{J&9u!Mexsw9SgxfVkjcmCn;htgN&&XF>eYgx0^T(=^2 zD;4J{)g(G7A-8gZ(oB(lv?(n>ftiBB)lEgLP>kOpD+54!JS+P*D?1p-O@QzkOXMNy zZsw;~rP4FXyJdiLvt?Nqi2*iZt8DKc`(R-w>ByvgqMI*}YiTTXrQzPTb#n zC3a)2zc!cR=i;gZ?nJI2tL!Q1v+rDo{hB-~52sX->0q9c$%Xn74Z1WyP-McP1cNnY zw_0ij-&oZ{dWIF>Ap4opXmtB(uddYo+9L+fKkxCqp)}uuq>PvVMDX@8B>?3oN1&sn z{$M^orYOO}FT@A`&B)lq+9oWmrzqf(_lRt46G}}~wB2Jj9p)VE#1d?5a^1%K4Gx$K z_ScDEKeP^#qy^19m!7gh$Yv0u;y$f=tPF%dXxdTi2@$C9?HU#<6?LJ3AnqBcwW?%= z@r^aL9KC(Z+s|dnmAA3ZCZI9F0##J9a(LlkOAn(OU+9%wU-Y$*Rc=Ljt-Y&&Zl=1Z z3wnVW8TNM4C3uB4uxvJ0q_@CMX-pAoy*U`jL{sLI)oKmgbz>E$fLqY=($m(>f(Qxm z-Zd)y&|+NBGLs)xx0_+xwM1oZ<1vth7LUP`?G1+_U}X-tg4J!)%JRXqYTvb@Av#Mv zY2|?F5M%YY1OL;T;`0ux6KKDyH?Sk%d(xA57~<y-V0K8I+M zyUk|SOBI9w!Rb9vOTLaOUHF+A0O6qN5hRl_EhtskhbPp`{ocTFI#&I)-Qi+c+ZDxU zWKAI*igEvypaRSH!P0n-^%_CoNCV68xMZf zXX2~W9Zv;$z?oP-q&fJp^L-xsN}A5)8)>nR8EZa6Ck(REDw(IbOz6@XzjM0|8lHVT z!<7BtMU+peP#dKlLbFH=!xhGrNM%eN0oGX4h&2XPUYWMDbXMM9|<{DH!a&Y zf~a(e0gVa|+XE_ArnpEL^G#u6>9m>Zs%&lM*HObwQrEa&LP$ss)l7}Z zhiBT>E})1EJWimCSgMYlBJ8?!&DIsfb_p##3lN>od~_zR`nyYe-35zyU)+sW+{Vi! zH%-5_Ds?!HEzH<8Lx!&o^VfJN$2Z1a#^y)kD(iW`*8De!pa$kR*E=xd0q5ZXR4FT6 z?p-O~otS!M;{Fut$4ZN8FHZLE3Ykyb9WvhyH#2c&yQPAfmE7GqSG>Z>$k>lU>LVx; zNC-E{ig3n@B<%G1(OywGcCe#e6Q|+!XinmyKNXGgO_F7=m%tBcvR*k>Kb-8)NWFVm z>q`L_!ULef@)ZRR3?@V`1*F*X6ZcKMaXFl$KO>H*pqh2YbQcfE4*lDsYs;@*Fk zrKl0XV9ez7F7>HA+yKv77l8`AshdFkG)MaGWdlwJK|G59Rl5{|L`@G5*fS6NF9RQj zv5-_4&LeqOcIf-sexo3*f^zXiw`cd{XGauqhsI5r(f;h2@e1t1nRxQZ=8sr z-39eojaYWr{WvXS{vpcZ=}6te>EOmUU!9RiNc&O4PRSbq_XC%apy?VBW7Sg^Pp<;< zOuY9u{R0F`lYkkDQ9$|?S&sG=^*e^x({&GahF6C2W+s%-G+nnzstrm9XQ)T)qc99> zFK%q|y5VrOuQIT(vpCkhVcmo2{N8M})_0|S1Qlw`07$)i;=v-Me5{IMW?Rf|jdiYB zGe?~*y?gI34chzXci+3ev(@~BN&%J@+i&x6^ehmj?HeG?6ctuXgihEX@uRHOFniz&ZIvm`bnJeDsLd}i5Z z5G4Y_JGMB*=T@|8*J}P7#?l*Baxs^K4kusO+xgWdeI>hNW1wsO@9o&clSR;non^$( zAEJXjUdrq;_~ZbK7{X)CXKz>#hI^Bm2YS{_)Q**RjKJCba=mx#bGyUgGWJj2>(dDTMYV(Bv?bXW>I4P;k% z4M(xP+JvDRf%<&@%EO8;D4j?~SZj}K5naDBG_SVoL2=pIEW==DT`kDe?b6jQ&Ic0~ zZMD@Nw3ikZE{L=ACdDGn;3b?0qQ%YYn>bwZtvfxo%lU$%p$JqF&0dNDvird8@u|xZ zw?jePdqr+XhW6J7qPI0&$GsFBbdJ~RWm`HCDXrFr#vm`29r&7EM3CF`TOJW-<7aqO zd*>=W0#pg70F^po)!L59V|J>MBE2;y^HKm}_tBipbzr|DB#QYTEo#)v;TNT#kHVJ} zi@F#G%iIvTRQetYOdOY13l8-q+zFWEY*m&tky zX3Sk*PxBi?7h;b9#n3~|qgF6^p_AN3x3TuY9(KvHD5aX2<=R-Xmu*GMEP=jPS2}e_ z+G>aTO4wjTRLl#}P`wXd(<&ERVs~79;Oy~Z07ZNUvOp>-5I+}>H9Xlv5geHD31;}1 z%es;g`Y~b&IB|4o{;-z7&i(KdBI6K@x9nfgC?F#dkwsWLD%KCzZfiR^R%Iv(JcN)1c*F~fU9FoS0;G0J{k5~MJ@Eu;pD?kR zeFSYQ!iK|C?>L@x(cX3%G`MDo+GcYGdTbbMRao@QdXvw6H&B~vG@H@x+9tY}Bhw}S z%n5G!`OVE&C=bjEl!ddp;-6`-aA}j0r!8V42H$rx;PjXJeq-jfg{Cx7Ga+-82w9Hg zRctvl1Y#Yvhe#?t{j8u2?aXhnLs@;|qeV(i28sArch>TorDq`qYR5;pv3NgGYj^0B z>lKf&{#rxxkSb&M$BG*_TX+HKPg#8m&e-($^+xBrniAIr_7%*WvC)H(>U?#14f&+%@|<%0{(8VzA+eZiOsYHB)Ff)_zwH zM99XS0IO(mSU7$T#e(7w0t2L&Yxe#~@S9W5r5A00O3epMpd~Vb$jc3OPE67POOJ~5oM?%psI;*=r_{83LdFF z&{3T3Q(wLmN~D^fFI>VXQbfgH@iw(&_CwW$?Q0Y*CFdoX1A)Uk>&G8YXO14Os!|xH zAiocXkE;iYHC(~>Ax2r8%=96BS$bOuq{>*Y-ZreLeO2a8tsGH_ z&+M&!^uxD~9DVY3{SDWzZmEHXZMfuUvS*_0k~a}|k8$Yehi8s{`1cR<{NuC!;Zc1! z`c(;OZFEq*;nCWBJQ4CO+cz6q)fiw?%Qq+Jq1& zhnbJ~>Q%FMFb1B8Qqpxha`r#h=j7DNVUaE5qxzk195pY&&jn2itW8Cn+#{-<^ut}A zLvB_NkR~n)L%QIhOVT*v=)e(k*&H|odY+HJ9$oJDDdLNC(=?tBIsHDcx#Gfw7^I?E2cq9xU-a7@IrGBAdsd_(4Emt+$lTd8 z1QoL79G!oekXQ}v1NsC8B#`Zb26MvS)-5*F^XQ#1C_eg6ycHqGYf1C6V3FcpphF|U zpn1syCPpLn!p#FjJ6H>VuOc!cLw7T7{eSf#p4zjM1#Nx~caMFITcE-g+ zpGar&>Cc zVo(ZQYWF2BlU4zuO$yYP@Y*-_dR!T&VD-08IT_4v`A z$4xBjIaVzIy2)MH!wULNp}h~9qIVTCZ-Euz8N3*4sLh0Md&G~)Rkg(oY&e+X?kDzn z2hInQH&>XW2hHQ4qq_~-O|U;S{pC~H5AJfailpiTqMLoVbXb7@(q|3b z-1_e3>1CMjH%D*iWt2%{MUd=?b@!bnvTlQHpJ{qmvlsSVxOUst+GU@#JLp$bgd$LWST)yqv%`0{M_W#&}t2{<~thNc!5 z*S@`eWpk}i?K3&i3|fj(TrAJBvA&M4X_H{swP!bo8L)S_ox$w>;m4WWua>+CS<2o4 z00IRFU&;3rlTH5^pO;x49E44uOh(b{`3RfdNy-uUaa`?wQK8~4SEC5;nH@wrZsj51 zcvmoPbs(9gC71;|yiy%qR#9&jG_o{GvFjW`7-v2$Ic2(sy}_{TXu@CzW53aYUN$;A z$ezcdkFw`&dcL@QKjgSZJMr#kiV&%p=2V;@KsL+}KJ7Y1yb%N*HGai!M0(;@zZ;>Q zy>l(zxfYGJeO!yO(-13x=qelnbr75NA|KqnZN|g)-wmZSL0yRz24DzQ2pO^;6PqSe znpdqU0-BNtoy{IvpIHNFm)7Ow8>)W!68*bG&;4z7pPesQa6s^p8R0L|_ARJOSa#UC zQ&3|OuZwi~eEhiE3u-@Ps5n?*J7GS)DafovT1^3C%YKWxEf4I^OQ^``(}Sc`U;-uU}GRL}T!=00hs_sU>?p zm#+ite0TBOv{N0s@vX>jRif(~439hS9vs~T#qpXx159|JKU(QkH94R5a`fG=y0^3M zad!^7f79^3-h)&^Vfebw&D`fPSE`+h=6ub4lFy zXxEOKHWBalar^dhMk-!m`@7S%tNoyKn*9$mT%f!#!XMm|mF;@ZDXy+xasD&tE=>h8 z(2tkV^!Ex?Z~EM|eV*QZ)kEo>j!y!96#x5@rhS~JSXY=Mz`f7RUBnBXTKkcXti0=Z zZY6_;phA>a@$TN!xxK1bCA(oHaFO>AwA51IN8bxLmyhihQszvwA9%X{Qf0J3J?|_)K}W^gvRd!AEX5qAr;#wT4_z-h?)*==7gk+nZhwK!=*++na6jh zNFIy37i4tY*}FinM`VGNlocABWN%UyE>8sHHyFmGT~(+if3Tl>KB7XlEEUZ zy0N26pDp3W_jxV@Y4?M{Vb-&y&+$-G0a{B)2n7g~USwLcA4V9-hvMk2+3ykIPUi>* z@BS4+xAzQ2Hxo1h6)J$a7twOOti6M7w|^1n)--f8>D6SmJZX0jb9_5U*;sPkg9A#5 zW%zV$%{@8{-j~e3vd38S`>UV#ieJGGCI?PX^(-evG}OpovSi+}kg!U8u(@>hp;bs* zEG{sdvi#q<@2LE0!l3NkbBYVJ17m`LyJx0sQ0_#0Z}p|HL2WH)MF+E^Z?dD}OA9+P zN}9be?!!{!GFRB3jm&G#Y*fCJ_fM5!ox_jwVUQ$GV9By)Q;q zukMg+h$ffsBAt)lEvvdh{=+!MHAyVr?vT&6zGVsATPpF=q)#8N$~?iCVUrc*@WN&6sIy6CePe5tARSePQL6YVX#=_ffQ2~6L<9e`m`u{ux2h|Zr0ds7dtLi)N7C2jd%LKYE1`s& zM(oETa8yhhUz`epGD#+Q=JqLaClg201uK&T-078ft3|RFq9w_)bOSdnTA88z<+aM{ zr(3uFV~h5ixEpoXKFmGWcfP86?dMBeC2D4g2ySl6-GuwEO5M z><~sL9r)?^Ob+_=yXoju08Awz&c^b8^54k~PbM8mmE`Y6(g3iMXa+N;&P^fCW9l72f@1Srl!_%dvVh?L{U&oo5Kd#NyU$#0XDoP{;PAT+9 z!m6tEQyNfv)hmw?{y^Tdh%^vuwhB<0e0%q;)fD#K1Bi5-X2+f4h{}t1fK1;V?*UXV z6d%md=IsU0v>g}4fv(S`v!?(S*mK=V`*)*E52S`FNB0h?J-}y{{yUqLqSA`!df$C= z2YMeU$N?+GEV0^N|L2i(_H_O+8D9MHWm}2KZgs7rZW*9(KyE;rLVH4Y$(gEsOR9@f zYE8OWCDHz&^jwId=Q zw#Jt=mp$23xiY+bDiRgs{4mE)c`bPXYD!|#k+!pKB|xA8#qp8_+X{uC1lh|w2e%NI zHc{+Jmu`y>aVHS7t+FRs)NGyAJ&_vJNboHz(*$iwo~*C7#ei5E3n9i7AF-n_726D^ zRBm!5#rMGFd#!UF3H93bjAIq1%{fv1<=SlFl2BAedtdHD@G9e(r^?VzAQEb_CNuH) zEwCpYk3)#N2FJ^6=gj3&fB0H*CS7ny>uloYeKEFg!8^24UyEn6U7fM7t;4(>kv*uh z2axS16*Gl#Q9*H7Lw{;QY9pPacMwAc0$^n3P`bEHyJ&Ei7hH{{%)Fa|>AJ4c8uma} z*p*Q;QNoC9+O-u~Qw0Gd^Nq^>9EhX@gF;0ASu+U>?RHxhIR9^eqFx(e*|>@2Buj2@t7k9BTHvA;~bC`Wx+RwCt*M*!m^kErXaDvxU_ z0s|nCu5XC=M6%9}qj?X6j7thea=q7E)QxyD&1&prL*o>T$?MospoNAcfwb#n4R}I7 zl3G>GQ3M;noV8n4YzR8FUpzYvM?zLO*A1v_&HgwB<_z_CFRRN!-#V-*bf zp{q!rRqqb5Gqq&yLsXu@%pi8$PF{Z`oGEGK1I~xH=xwz(8EW!%FoJ{`wF=V%)q~#X zui=f~y1IUKq^Z3>Wr9o+50mgYm}Odl4>%194Shjp%?1KQa#*{pX#ztl3+`b`qF%ZR zqGT&AG%fKYlUyM9a@BUp9#}Dz{IXi}k#}khu<>T?+X5M~et6yL#uiLXU-*+?xFAx% z@LKXPYc}S{EeNHPL18p-NLJa#w3Oo-&a~lH~qRGYH(LnNr;Q(7-AU_E&~0RlTv*+>L}l-=44ifwg-~+U4SIi z3?wUV)Hx;8ihC*H5>C9`xJi8(>J!&~wqG(=qS8l=N~8Dl%F7a_Vj0TF!i{U&S$h%K zkJcBpmkwr;AQ<3gF@XUjOFoz15m=nW)tn5feT-_Pw~r&LA90zstX65fur{h;stT(O zV{~^aS`u>@95KQd-RMlg8~|TU^9O=z@Qk9W_f2$BEmQnl0TG(z{>yL-8LhL*sm+>d zxi2wL(pBs_9|5K1U~9r;i$u!32?cJszi64Q?O9uyEyVVs_sQO3m7z6fe;y-{#9f9; z#@SoKn`^kxG(ostdZNHwB9oKzC9nlFn(%~!x1I~QJewUDSf)klm?^{?wP(AEN3tb3 zXR6H>h|Swb*9QvpcQ$s7PQ01puF?01-$7Y5-Eehtrwt{FXi012_ImXSsIYyzmOSo6 zJku5cCX^M9%I()NL_%4BRZ%-5rcTC!&UG1Afc&}C1Z01g6?1G;6|+{=GO5((Z3v3! z?Rv=O#u3Npev3RE+kQqib)fe8e=L=O{c%qf*dJRF*njS0QXUr|OQxrEv>GiASf{5h z(#`Kyi#nf4@;`9|1(USynWek>=kZgJrb=ZA*UO@G!1(hrdekx!Y{e30e=?MgUw-uQ z-)Gum8pX`q<`sM#m2@WmKo#4mMXBR!YrOR!9a{e@-+=Mp*3NpbCoA*WR50@A?wg-r zp_S_1N?W=xL%Og-W?%+p_y0W4Ip=-vhaB8ePxtq0evWIR11;T z>qD-gJ*-@xQ$7D>&v6)x!t}a zQ{9i3GenP`isPQi!?zDJn|;UC?^^c9w|D7jmw~(EohBdGq=Tv!pO)AVN z`J-TR;iVaRH9T?ODOg*W0I#jR#l1%6to*dexVZ4vG!aDD+Hs$mh^7Uex&#fTgC(8c zbk6;**?oO>UEJ$CLJD9xEzz7B@oX*6F31fX@i{@oL7_`S8n;5Rl3;gn@?bnwt0BFX zgNpf(OHnH0bTUPlCIVKMMeMoOybDO*_*zp zp8vYf)t=nFO><>oHG)KVm)QzDt4@eq!5XJ*AWT`mP1&t&Fs^0JR59#n|Nl?0ZEx~$ zBeLlP-kQO;?xZRpD&DLCF7&9T9(`B==N& z)86Q&j@%lF)ateE)$)850Wp?na+qLj#>qEqSxkhnEmfnqudlWP_rH-uH+RH!QbtqP zO76VVY92jfU5J&-!HzhN9oduoI}(ZiVyU_LkRwazQPL`Q zL0T>y{>kW-(a=m~{la3gQa`s0IEP@+T&I_pH+*l=t0K%*2vWaY(^`i+;x(j4^2{fS z7-2qJ`+O9(bP^ruh|jw^p5YALZbd!!p^rI6tjP6)4uk?KDV|8LcXf1+x&_b_@AVxAV($r2r|GRR8J??DP9bEM z?N(!lp65BgAyRiaek4O#T}(g=$@}B3&d$!`WLZFu{VIg9L4VXb&kfL#DgabZ9 z&)GsdDi>gCHQ6BRIB?(L@l8#E$5iL!CKg2}I=ZJdb$UrGN^Co`phLdwVrhBs7`R2A zBaZGI1Z=7!ndS4NdpqJjInC#wCX{7J+^LQh5_bxk#%QNHa^7OBCX=-d;To8Azlyy* z_prg@L~k(hv&m2<%Rt;SGNVMHW@s7T)REm5*we8VJ49)+CB*Ui`FOP4D<`dnfFjPG< znQw{Di5G~b&}yLiB$sj5{P5(i_%r?6arAVu$v12*V1hEkB$%O1NW8WOao}+6zaQ?I20s-PnP0 zc)Rs5muY%>yMB7*w4|D1Gab;)lx=oNpmGXz)PJaP;N>(k)hn2k5($dY?U1{HU96>W zlGBzeaB4F%O4Q-|R?VR(nN$l0>&OJVuQO}S%;>KW!eRr+lrEK&G#SsZKlwwyLDCDb z5|kC;Da@2-(GF!HAkaFf*K&!(pHPs~Vu2UspdP2iYl|=OnnZr1lr)YAgh*BNQpaPV zq6vO7X|F(97`mqtc3ae$+!)`3F^=DU`pN2=Hl#GNp}Qah$>N`?ZZ9qF6h`l_RyJ4D zuDbwxoQoXx6IFC^?Zyzmb{Rpx4{Q$IPoLc^UEbo(4Cm&djb4y^6E8FW*bF>WG)zSU z?4i@6&;zqf16!vnm!j_E({nO|&O+*vrEn^X<&~snhcyaVCdeV10L6M?#BJ1BwbhIc zByW>myvY+-rza;Ul<_|Yj1_;Xjx~rz_kGrea>oZrc$MxjvIh;hV=hq${ z->4;hPjy63UG)fU&W<-^*PeI5&g zCrc%}jLALfC{MDP?YdPg4Bk`mU&{G32}Sjr%ME>W7De}koq+nBG!s^o4;!a28eZ#V zG1{Mug%a}@E{siW!a9|Up`6oU(v@X;8g@nYDV@ojkR$yNfx2vc6h>SvyR}AL$vLU! zuBh31?kIPQ_=04e0+Y_5A#`7$sif!FlvNWJC#m6vyy73MI z!NOq3ykHtB)}VGfF9+Y#aoPdbdFn6jAn47=aH8mgLbcxC5q(&{^P_y{N3Z%jKkmNs zlbP@Qc++20>m^KBoDz zJ}IB|@s8+I9o-Gn-Aak`{f-1gQ6d(z*-L=(@G_rr1F&7qYq)UHBYHBC`7ZRXaMvJh z1HrEAD!TT@grsb;*3=4!3Z7}+*SeP8O3s}I!db$08Cb;vf+4LXUgJ>qn_x_3me^F~ zPNsSzq6g3xT-X&d9i&ImHYW76p%Z z_3A`ibF%W8j_x5x25Q^IN-J6>Ln31#WA7}lLCuF9YIs{a$R#ly@x^gikra)t3bhRH zY=qBYx>3K3V4q2E9jGTiRhyAla%+DR_;2XLIuH7Vrb~?3*4Gb0lBHr{aHR)z5{i_+G{^gF`5Vytk zd5e89Ouw=ICB&3 zA^qg|5f7)Il}F;%T5Tuh+cGiFbwuBVP-LdOkBAN^zcML-q{QNUncyjXO|$|3dGF=D5zVD~GYmcF%;Y^3gowEa=m$u1F! zIkjm2HKz*k{#=tyf~iPRm7|~i!?^!d+oP|@k3JYh`}TMDsa1Cy#r8D^yL125s+_-K z6774FRHA)gfA_HNr;8vaNZ7ie`X+vwV8{2_YZx1pxw5HTf#_=}k$ojGkZfJM&Opb7uSc{oO^Cme02_bZO<~t~p`5VSlcVTTr!fX+-Eisp!Z; zMp)T&JI=M?rD91e-Fy$eF?8KKLk6_^?p?xKEtMB*8I~#Tt*xV5$d=^lwdN6S+7ETa zpe(wXv%+%CBQ{6wH?DV%PVKF*@|a&;C~=;?&0U2szjPVqxx!djQ}0G;O+{OHM&G#my_pd_ zL9wa>d@Cn2FbSe51FkhLp7`sAi&KVq&qSx}$6_4aYriNs`&WUC5Bv?zU0dto2X#Gr zSlLBeSqe&4R^A`+2d06S(T2T!Xn(|?DCw3K(KZMxyG-t9Cd14KJi4zTeVCrbk9Vzw zNL+SAq9$+k9>@s?5ph)ITJP^2ox?|-iC$xq$@6Rf2H&qOzQ1mNu771wLLRP;+Ogno z`d0XFmaU3lBtK?=po5y8UOQqgAgINQMW*}4sK4V;u6U&x%fh1&4brOnm) z+J6R_^Xm->qv(zHgXgFIDoFa9{|3dcEsDQ&fA_#reHl>+dStV#I(h~rqw13{!&-+joYOGjX>&Yuq!BCv>M!D!`;wzCx_yu7mRt4m9EIt1UFZ2=wnNRsY^eXMzK8MV)}`h%KdU3 zT}%BwHcA+@XQsm$@i0dQ_n0)DQ|A-=NbH6_o8JFgTUri93B1Zh-+`>?i9O&t`cphc z<}TyC*U9Yqf<~8Dwb2uu*32CIJk&FaZY^#WJs8N0@aIJ0^IM+kj46DHtP zsd|C1^wmmb1v{mpJ&N+2uK?LL{6u+V&(?ooGUE|$L%VV9X4kgsl0*VSrS)TT$2Bye zZdVmZ)OZUPT-qFRjdf9aFw}0G+AOMwE1gR}QD+JLu+9d_gcR5yo%7&$O_50|(yz@7 z5xqEhB=e}Cm4kFa&}Fgiaomj){Xp_Wihvj+l())aChS)mBQVrrwP^lin_99uRP(Ck(_0q8GrB%`OFE)iVF`W;hM%69KXYR4?3sJajLq-9ImGxT zt$s~HA0rD~&m5ZYg4 zH73OCOWvde!xmWWP@Jm>8xeE2KrlwMT4;Ae@}w5H-JaG{!!WhyR)XOj3eKRI6S+|I zL&VZZ1^XGpdRp(&CV{{ z`QedOzsO_GP05zW90kcYbEtDJ40C_Ez6r(~rbjPLzS20_F=B{}92Vh>)M}u$4((Gw z(oH&Z>&)GguFD^dkjJ=hnz?n>7Y{_|L$Tj0uEovCXB&Y?_epjaw2XiLEV4@Ve0dE z;ayvxI-rU_=@|o~aUn3#%aTWD@hd1p3goa;MxdDrO^y?RWsQiiUy+f9IZ9zo>=GUXRf*F^Q)feEV?DRq2UBomBE!dU$j1Pb2;Rqt-FK6uPdPt zBq2mJOn?YC&1!T<;Chu)3LQ3X#au~1j0-ACjSeS|sdI@PyDD%U%DD8b!RM8#BU(48 zS#M3|%(Ek}^@BOYc{lcPj&%uBHX{}a;&6Xk@_Ao|C0Nii$W+3QknT5&@lN}p8~R#H zGTybno6v@cOq<2#>PmmjW#+%JzkBrJB20Kt58EAMXjTJe+$XOx8nsLo6{Ow0@wDVi z#IszinTyV5DyvN!+4aqwwFH|>7|gb7J19=~SWS|sr=d$HZkEtdFp+UwS0IhITi%(W z@Th+vp->dPcb8A>)pot9^=%wwFJ5s^YT4BA*^|&f4O?-tOlUpTImU0Nt(b%@#_?tC zcB+_lT+G5lupRY-esdfTX;p4XxJAoN5p4=HA%RHN@k5?=e#m+rnW+V?HS3BzC5=d6 zlQT~kdvi*BXB@A&My)W?_OEia!g_A4FD|!T&q){)d6xk_yRJp?48ABy1g}(U&g`!E zatq4Pf*;ZQcUf-YJ~`8c{@i^M`z?3hVPr=V>|qao-xlrV?-4XOx%-X~)+Be|?GXlQ zA8hHZ^`cya*-mvZ#{8C9p8RM%20HDoKp2B(nDX@5S( zjhI>-)Dcsr)%B2$ZDwh5jSGN<&k(@$TCO7%47rafPKzFTTuteWnU;9A9Ali1hVuqo z;n6H~Iu+?;x|>ZxG%T4Fu4NK`S%Qa$2^C9^a_0N;htvQYrLs)e;u5EPeqrI1dGe+` z>p%+&g>(ADNjJ`@v5XwHSkGM-+Z{w$3@oY*T22(vc=6GxRf%$-o)2Ftv7q5)sW_tj z2d=*Zb3Q&Ky{cc71xkeirrdwjH#$~g&dfMb?Nx&FF(QTUxWEv=2RLDeq>zfcDVQP` z5anOeNfYT!@JpK6CdAD0-K8Dm3xsSm`#;aE2^)?RuJpldu4)D~cA+<=p-5w7Y-t~P z;_DU8d$M=DRF=>+;dJj5=>gxKf{|agDtR+#WB|i7`d@M8-a0*L2J@Z5QJoq;B`j1| zawOI=`&JbHMAN7en80=e$U&f35mcy&r;reD_SiBhW)d{*C*MVOlz!087i|zP&`P^2 z;5+7S!0A+WC!fHhY{{f3`E+^&NRK(qpIKN7?OXBjfVj=J>93ukQ|Oq%oW)!L;{x0H zQ%XW`w)$+k8OlGSpDw`RuPGuv2+9hp4rVF!k)R27s6Tv9MJIxr&)RIT_e;BqUKFjj ztzx5NPXl$-9+cMxA&|0dl(#p|C{K_g_;syz<}XghV`qow+&KjEu^cY1NX7s*l3+?o z8obr6!vMzsUJ{?@VDf%6jL05E^N)<<1EEL}M{r+F;Q~?`&M!Oj_YsHau6=Lv9#`-^ zwSFWFM*DH0R$Y*1)N228VR8th-O1ypyzHO{vX zU^iWT*PQwNu&Qs~k2?0F7?F`HZ+X2mCjRMgXd7FEbrPfL9DE}Gz~c3tA|~BtJs!gR z-{K*@J&x^d6c30ayS5wh6{G0mC~&M>sAPB9!7g$3)Or=uaKYg+;&8L)s=0e2yRxaz&jN`$K5G5YfiPV#O zo|F6WnE0&qM2twxoga4_Q#Xi8F#mt=rdPZqjoKb-8W;dh4AJBB5okg zA*XuGg9gOKKg=h*t*jOj_N05WVunYphcc;=~gi_Xv~f! zD&&kRv%URboUAq0&+MeasL&KPt*^WX%TPhm(79BWz32@NNA-0&2YZu88XI^XbJhI#bE6P5fjQ)|6-iS0L;6lrCvEHJIL+CXy~&tnl#ti|jSks5psoP!1~JfbI+B zJhEhC!QeVmC1Jsf^iODtUIGB^Pi7chzFH%LxQHl)Ipg(}EN; zMwcXjAb8ugCP80pkKS1Qi9Cad4D!!koCpp56%wK5fDdCT8p9PrBT=)_v(#kJCVRfA zxPQx7wQN4r)4bmdEG6CndN?|*-!emT@=v(Xm}nK%aV$Eu0E z*;!I@u0F~>5LJUyfTb5@@0?PY$?8rFJn{NVFu@K;Y_kx!?TKs?-BR4Mi<$a**o5lM zq=I<7HqNfJ;;6mP?)*oangnVQw!UxV$p`y=*G9fhVa&SCP)XhGvK9e4p<+fRTlk0l zyW6<#y5rZ~m;80u@?UMg<@=q$3Y#buT>Zs2J=vQjsjni$_riS)kW}V-uib`qcs_Py z7YVEeF5jxp3&-2c;q1crT#5PEod`U;Kb~ovRZj(;z4BVLZ}q)$7~jC)#x3e@H0HUq zN-L2Wns7iHt#QsEPq;$eDhRIS#5YF}4oUNQ*zM$t6O`bJTwWU3aQ2N!bOH^^;BZeU z3^E7z4PkHEzHCE~FqhetAkDdvCCGrV3MRS}s~Kk@>PL}i0|gU}pa49fH%Xw_a0#EF zFz;w;p&If{tAU^*y{;F|yFrb|Vpz{PbtI3tSK+Igc_*lpPF2c1?N1(SZWJhDmbh6n zPa~0m?cU5+D)^<&5XH`9t$DbVDk3UY<=y>Ng7uY(UP6ZK>TSkvEt{Wm)vdSK_LMXN zn-?-%b5`fu`@4l@*ljC(*Iu`7gEj#Ju5<#3zyr?$R$7@sy>xT5io}EKx7=>!#8!z$ zIBU^TBj7U?p~wlvctElqpbaLP5&MejY!x%GzUC80c<@1o-l!;BC#e5nU2-SkLvd5W zYHhBP*)u2*3@Zf5J zE5bhUF3E`b_9hFSadOBj8(S(B&O5j~pc7@4#Yzyawe&OnUBSUsIG4V1e41%Q_9c&{ zZ=9r9H1|u}gqGaQ>sSb#gVfK-GM&p-2M*3EVQ&WVT3;RZ<+_KL$%;`kdxvTX%Kj0!2Ux%Nj4|RSZ2NT`h^K24D*YR@?&(}*)?uJ}nbi-8-(I(*Djk#{( z$8J=X5r{eaT-Yupkj3o{iGJ7JsKU)-&PNo3#r62vjFEbr>vxucNpw>#{z%$|@fX=J zwnL$dAs;9LopO{v$<4M#oc3Jo!mgHzX%eG0eyRu=Z)$~}!^%T%Lw`^3qj+yOf+)rG zV+q(EppKACdZF-_NkniTL6=jBa{G{3aW9@8>pM5+;?X(zfyw>4oOpcr&8^?it93Hd zE0L`*HfwOS?b%%1X(;HIyxf=`Wp0qs!Pd_EfERf~#soovP0B||FhOp~^6OA8{=C|c zXe9olgXyGd2tD%YP%C_d#jDgV_@F~qjhBZV>L1CV{$a)Qp6AHFA(+qO9ocVbrTt@& zD~`2k4QB%Nl_O4FNGq2lUYahW6X9|Qp7%vf>Orbnh;?5T8LcmBs!E)w`V?}jP3R8l zSP5~RFT3YFB=W>!b$tiAJizaKNgnc{`o1LmhTriB>o^%iK99;|I{lvsKUp6Z1~tK*z}9qd3e5npy;fFsP@s~q6Cudr&=WTxGBCh z#;$y}htHjBiz_Tav2avvuFeXBq+3JmpWTY(Gi*~qBCrbRwKHZ$iRm*o;pX7!QXHWE z7s%64k0GAi3)|I2Ww?>nZ4m>!Xm=*?TA##sUG?4{PG%uH5t-w{sW+Z$lcJ_qr?er} zLF2&$3GdaAo;@VQaA;)lJ~Q;1%XKz|jZsyCmygPc>v%3Paf+3?wtLa$n21i~x?6MV zG*Bq-!96&@rZ5Qj>hqq<^IATVj7hGYiQrJ-KLm>Pa45`dHQ7C!Ct~~2Lge-&)4sV` z@2UO6pklF2%-)13>_~exmkcz9z^)@<6q#?R*SS!jD4WMli!h|ccAhNzz+KA~q=^7L zcbySf-;~nDjwFs{UoWp$26XL*qh3Ib1(wNNyF)EC)qa~z` z|4iZ{Y3c(SuyvsekX*4-k#Gv?UrqA`wqmHiz*ZM2d^)3rX`LTm!%QZja2f{Nbki;f zc6vt=;IVX`ovGf*KsS=VwQ>}&j^T=_@)=@-zt--Fd`rXuC69s+urL_vYZ=jNG zgOW!N3b*z^E?T_OkQvYHL0Kr-!~qInL#M;)v5^h9n(THmFl6e*iA2QKv4v z4ve^;mJVwW+1ExHf4Isf?AloRWY#xh4&Orm5WjUbpNBeoS|&M=96ZABrFHkA$`|AO zK*>YB8TWm#3ft>&S7HxRgT*@+J`v_FeKYOA$X17}nIV4`lFfX!%6W2I)M^!i$RYE9 z`IYsoREhSKOWx#98I$Wt5GPj;yB=2&XBzJE?tu@>80&Q=kA*ib#I&3`k})PVwz}5T zsU%od&PDu@Kti4Sq7D7^P;Ml8C`TXwOS(on&Yi7#g^+(c5)j#9)lIlqbtA;8+s=h# zY&D!8+6t9=hnZ-Z8x92=*+h@+xN!-KT@{ihaYRqz9FW)*g7d^ z@2YqVmH>%36%e^y48O`7+@ES14H#3VFocd;NGy73FyV4D>4k(lS53kW>@%kDH5n52 z8d>oJ`=Zz8a+A8cBm%@TwKh+@DFRH*@;6HpvOB*nmrViiIMGFW~%ooQ~DU$|b|3 zHmdvi8V2da!r5HhBIHv2+$m6Pk=$*oBB3bFx?;)yGhEzwXnx}%u?$%(4#yMLTzkCp zPLu%n<`=EZr}~@62yC0aF*|)C9vmda)=-|m$mTW1002woNv?C7rS;kybMa%s=MIXG z=TvbhKfY8glgXkuS>4z=Zj~fG?$Od;s9p3%S)!+M5r5c}oqOJ#i{8BJ^iH=Kob;9P zFudCQ@*b@jwu-NrmjPM&BW9??(453&K~Nhy_OpNDiW zHoQ6~ueP@&qL5qehHsl|c`exBC+U3VZM(U8L!0+pQ#FBhIK+HskF9|!^U}h1wQJRN zcewD;z^+?~B|#kv)oj*rF0`rJHuC&CbGawOmJ4QT_^tSDSKgFh?3?uo+he7BWp{wv z;@F>Hi8i3NG`f?bcja8LsZ)zvx#aG+b5C+#{LUQpegh2FzxKR07x72YnK$nj4F6y* z`d}`%5U7S^_so!vX&n6YZXmnLL6PL9igXVXg)N!$>?PMIrQ9@Sxkus|h+3^)yz|bB zrDZa~vQ4)~!Nd>ea?eL&7LJ2Tj#&95a*Au>|0F|-%dHE5-#_Qc$O!R2moLmC?3Yt7 z2wJ0$K0i@wVBposDnEUij@D7YL311^!p7YYJ3D$Ys&z=w`7s)oG2{-S*{(uL}XzZotorW7K<_Ex|od# z@Br3p+&i&wu-~XxWRKG>Jimj-6n7bz1doV$U?Mg8w$E3Wyh44lnGiLMlsG??D~+^9 z4`Rf;QuefLx50!n_JM4~+2ixDCmA?bh|aI6qdY>eNT!OF)$?&?i;}L51>9WqIE}Gl zNAd>xQWtXHSeRPPT$p-h7lyMILNL!C5 z#X#K<>sVImEu;B!Q=3Xw+(A82sw3@XlXc_%hG?Wz%_cAIRgU9R9Bi(YavJaio^0d0 zyC?|rnOyv|@&rm3GmddXc@i;u`gKwR2*4XepSlu=O@rlfr!PQ92WGdihz3HjJdHjh z-}<>+#2=_?&lhsh7q}?~Vj6ZUDM`E)@h-K_9P^zB^t?t82CMC%gL^d`|=dnmsx zQ@%Hf4rs4EaU5MIzq*G8dZOz)uhszKhEBWn-`JU|f^N{BV{$v)$ge#--qhI!i{{)s zohozB5Z(fWT4kG^!bH`Q=)ojD8gNPZ z^Pl7xS#$l2Zx*fD>Gh&(f&+APv(89Qbg+{@I_G0yQO6}DyxajWw7xBg4(*ADWNLje ztq-;PT8!Z~P|irW9NT+3Tjd}PYl8Vr^TWV(fj2y0J{B^AE8?hZo4_1I9(A7<3kV2L!nhE(Y3 zMJ^14^Z|kzq7O9hDE*gk0fmOiWg**ycs=OF#dRlni!ipXFGu6`S|yyJHnJpL1p+MS z5h2rd$__1V7pjqWt&#D$Lj=)6>Xcl>VMyXr;?le@kxnm&jtmrUM!`HJiC-5uveUoN zK$#chPUf7;%@`A{Tv$-|77BoSp{6nQ%n458dy zCRaMwfg|zp04~W=tX#hw8Kvt7)`2kMcJ^U)N#-) zde@&O$FTc?WhwUlz!G(f)e1=@9W#(iF553bG(K5wdkTOs5iD&Xn*ySfOl&d-%&c6> zy|yz=0kK=w2RB{n!M9~uAIP&L0o6_D)Ri08j_nS_ZnsU+u+(huVt%kxAP=42A^7$p z0TPr}_i=h=QZ)h|)3?C%>9)&23sZDZyrIb;Y4L^l3f#N({^iUwmg#`Zli@YDxeUHJ zgKDP(aosF|>)iW1Kk@&a>|R$`EHm7*$h6UD zc+?2#kqd(u6nTf17vdu=Kqx^?t$}!yyl3kN{eoFv-kf9yQb24%qY6x1Ch>J;voP#X zjrjS)`a#C@F;7KAxc!*N9g-CnkJ2_+-xyd|HYe6tw= zppwe0w?t2BO33hH@x;dwisMZNzmUd4(9rzK0}4S@Sw|bp>7Cj{4Tqok9s2p(n#UnC z;SQZ^+xSz1h#t{_5CS1YLUYy;;D8^IZ0YmU^><&BR?5Y)=61L;s&WJxEix`Q{c6RUjajkd6Tu?RR zK`wN`pTvA~>9P|zL8rDY7-C^S0Pvw`Y=1g0ERKD5`Wl6%QM-$rY)iYzH8Ta*`Y!iC zr^|?S*@9TKWcL+&%$0T3YLT5M6M%VI`%*;Vzj#s(Ds>B|fMmnas*ts6F4H_OZ1HOE|}ROXftp;FenC>ZwSru3X>^T zi{7kXPAd&48yiVW`90BLaWmjR4((z31U;mFVf5@K#so#8ODKLom5B%JN(?WrIXhME z?CxE!aGaRW-RQAOmCR}0@*?YLfxZ;Y!zN1F#vqBqOWMRF@oz^Wbq28#sYn_-p0GR$ zrxvRhN_Ca?=Nhe)8!YO2bz@}wHR4`X*ELHSAL`5*^!fYjW{8jqk&%Sli?%%gt^CQ_ zTsHcfh4sRyf@An=*%vN)7jN_$sh>&UCzxT_4d|EN5mHyu>1gv|Y#H}{m+4eG zL{fn}yIym)ml0hN1vT2keN=yW@7sp_W6q$N%P3xNkQ_WWadk0}f@?z16&FiO^&voo zA#0_2aJOKBdy}^{0HNQk1EgQ;0G#nb(Xgqj8S=n>CduWrTxe8n5uuPM zBy|!?Rb(dcaVVO{t3uOKM>?b(Px^Oy@7RQB34<%GF)|DucMVH8i_oLK!t@~dAZBc4 zzA-DZH#XzU*G%@kJFi5d(a@o%X*EifZ4#tDg}Q8AOoTQt9>jmr_$iU1N;t66x@y!n zYLkZKe3rx^yvS>beov%jL4Bp8D&m%MAFCG&=%R)yL+05fkXY9kLAz+B+)G`z6P1$O zH}y9-g5f0s0Td!WXPRjDHI7f;zpt;@RjU)d#p+8Q zy-AL0=M`>xycZITvUG`yx%3ErN?1fa&lho%QRxn68sC3T&Z>0`T+OKIgiA!sIr)aO z8FyQe{b@xxzCk9#XLOo|Z!OJxTACZ$H8mg0BEoSoA-k?Aciu9EavZbSxOP<5N8G}k zWY&C3*8BV;QhU=pqd z;-W2>BMyw!k`mco>^!6u6QYF{X)8@$sF9YDz%G^QmrA&;N*=1FM1Iv4pQa?30b~=y+pg~)B&4IIYrKl?9sgJiLtscPL%A&?z_LyIM40A+54t?ABIJPjsNg5%M+vT2 zg@B3d6rqu!SLRE%tUv3@WV6RmL}<*KVsu0DhSTDKp;208kGs!SdS|DC94*(HjoMM( z>3zBAH4QqmXIfNd=iwVmBV94+$}o^w58mVg;$xhj-kyVji^>rKbK6VAn0EcA1q z6_IZey{GTJicCvE(lEMpRzk8BcQkQ}@2$UyL>EQEyZFJoP5|M3KA6x%E6% z$K>2nhHc(%PECBUU9ImFM6Z?kkp1xwO6S%rPJJ4+-gXtiREH9mW$6|xY%df z(>Hg^wz(^f#2S^+N~_=)~G*gN=ECWG}Dhq zA3{XQ(&}|iFBD?R4+ESn&)ZEDEmiik(?T!2-;-P)JA@9m79Vi7;V2U!+e4U>2rE^G zg!@~yV+9Li6QxbA_{UL1)=RQ=kQrTedmG-UjEH-2^T$NA?^!E&WcV|pPVj#PMPx@waiAZ;Nq zIaU(Zu<@I9B;|hGCB0!KOd;-0+Ro%1uY^UkZR=)LhE16VPI?J1{3jo7$_Ema@#-x&KY=|5rk*9FD-CHWlw#zatVKRs(okib zuH~f6)+xZsUtFw~7dPw2#b(#>9xqC^?2EP*CH)DAdbe0v!Uw5kFIu?z)MlWm2vQbg z`TX+2?k)NA#q;<`?=5{T6YpmFy5uqYB?7&$?J(dY!l`E^4GZB7`$>ZnwozS-x8qN)o-RGd>i{PpO&7mJwJw@wdtLqU{@tG93#8*dy#=5`C~UJ{8MP?OFbkt~`9| z#$!xb`w_abgEowSG48u|n=1md*r$AdrYRbYhnHRa-T88{_8Xn?J2ZxZg%`T;Ethi9vo@sC47_TJ9;O_}ZkH`uOk&kI~tBMbQ1caLs@ zC>~fWZlIuqVd;z0Lg)8BznCe+%YY~?rG~Q6P*LOmWonQ3+RZQe10S9uZWK=jFtD2? z{6F$oU~`mB%*-aU^H@_fet&2DmdsR%#bb7s8WCnX+a9x;GJ#_8tlJ*NS*AS~Iix1* zaMF0S45s7cl8^%aQ+rZtzxQ5sCywd;Os13fUv($WVR|G5y&duUcnNh(K?JAFpyc$q56SR{q3WI63HYCr=KqzAp za+c)Dh@%FPu&FLDT?5=p#n1E^rB$`L+%*1+SG^F2zQyx zEyJ%9h+RN-nD*eWDcm(=NS%r2>tI;f>j}qScO~o6l8CT*F%&|vCAfi6-a1z3+_*MG z5Hh=7-r5pV;}<07{BN0V)ujpNR~VbUw74}3O8AxLBC&?zc!_nX@yc`t9^DFazM5)P z@f)$r#{m~D#WbnHiwCR#xbmu9Ai!LUCqf1JV#(MMHh!V;@<;qrGs<{j^7NHwD6<<1 zN0FdnIF*Jwdy&hz<{A;;tS11M8(PDg4+SbWX}8znEgW> zPvQFw_<9IBgK)PDtrmZKdo|S$LER^|}L5%=-9Hv_?b1zQb92+~s*4cVRVvOq7a92@ISiqJ0J1wmW!vPEw(A;0X zCG!r`U(@}WjiSug6QP#*2P>(wcYHW zML)*HNqfs6rK4~jeN>CqLLiA>tQnF;(jK-1BI?h(a*3jp*({C7sl8d!LlZIeFzpz>#U)EW(pWS-1Wb@*_-V6eSG9)T zyq*og(q>ImURdAuCl3o)NI86wq?=_Ah>A|!D@Ep^r=&j;(s?KC?AN4mdN?#pd;9Z< z!_W3nfygH?=AMw9UNKVk!=?gKrkzbLmU7tK%SQqt1oK+o7eCtBeN^v@5aW5V*DqCD z`H{Y2IPh65?0x)#!J$P_dcwt#KZ(ysPvT}chj;@{yzX1L<7IEue1s6Z!ZST0vD$ad zO*=pSec+rw+1Wkj>{X57Std9K{t_Ewgu+-^T)Lm1D44g=`-pdXZ;XV@41YjY=fGF< zUg_7x=5G@ByDL&!;7pK0LC-R(=}+M?C4Q_Vkvz_$__fY)eMEo5qCz6!Y`(NF9-2rW zacFJ-(PNiNix=iIx0liTDQLXGwB8#&v)k7XoR&~A5?@I_yW2VCaJ3EBv(qaIY`-&| z_!^TGLH`%mTBBAzLCUzbNrOc1(>e} z3SP1E1!mCeJ58#fKxIP+49V1D*14u{M%;k&OFN*uckK+N8oAJy&SdN2(WxU7@uTrO zLoI3h{I!HO?N%%L!WE`ywDCK2T@qA&%_|ap@d};Hz|)Wgxw5IAvY6Jv3s$u&BE5py z?0YjmE>-<3jAB9o0yY&#UurW-aE8x&cY23CeR_J-zKk=K%1E#Wnr^d?zDiO+m}0f7 z1IGK+gS4jWc2wN?=U2j(dlt7xi4kxzTPynVm4Na?M}zTj=^|!?*q&{bmje>?Tbi`+ zEM8`d>){b!P*^9~ilJzjP;Fd}FnC{0acNMmUJdb3MwY7ct))Y_mAslr=kuJ2ezJ$K zgu(8sm@OM6HiEcw62e4Ab5*0SUg=xqcG5JBx)h&{`=RaPtm8*S`@g=vgfCYpDBnH; zDXihOX=$GNDG-?abDn3}86jc|{`?Z5&A;!d{%Co{KjfAIBK0y0>5IId6JK-E7ic6G zmM45_+#@$IUvESn)Jz|tQ5bYoO9^#4udC)O59kxh@KDi}Anb0cQ!j-N8Z=DEHuFW9 zcB5|fjc*Fw4Y}e~4EFpGeKM!(KhyA7503-9-KuOYZ-zdke(9l5VMHD;6FZ<-E8ljj z?V&-d>F|+hoR&dC!B`&Jcsu(HYPQ`JDHD4KudXfx$&{K z)-ZH!E#2}m6wje+9lBC)s9&wreecn;SK6f`4HQf_=r`j&!Q@gk^*)J*aKHA-pAp!&x(gOq1@-%B9TXho(CYb4cX?xX&uxf0YdC?C3AqW<#B~6NvX}FLn)@G7OsA<%eI!Kb5>x@W0?a&Q! zM?~B!SzMhgEp;;&F|WEFa)`8({?6P+^*Shov_|*+RbIl+cgXp7nupx zBP;XF60Vn4K_gWZoY#ZPZy+pqs$6#w#AT|?XcalzFcX&i@J$OfB&-zLc8R5# zX?8hN9Cm2i0k~F&4)gT0^);V;GxL75R=xGek;8Y$9g=V!nK$Pf-?STb4C_p}H{s=E{CTGNg44MH)2?-t z2{+7<>n!Q0mNOU>eWT6c)hcUP_qqYk^xtP3CU*OAJgx$1A0(^6=GYrCIffKLA@WO+ zI5~z2w_(K5PQ-AWU2}4Mah00`PV}x29mU3ykDwqjRjFXcy5iG>Ed(?SC6w%+1@R8B z$A+!AfH}-|{q)K!7ZH9WDj{{jXCxn$T}qLMt>Ha_mP&)LarT%ML1BiboHNHX@BzL` zvyzDtok*-wO(ZJ3bYT%1z!Hmj*Y)_!lqnb_NP~#sO$0nT$Eu2hz7xMBxg#;L7qEBb zP&J`y)$%FJhq}7Kl9xa`OQ@DwV@HTZk=Z*vsb;S3WESDI%)EGkm8yv09qtq`Kff$f z&)u_*FNA3Ah>(`MDGQ6!843KDwaCP0+?4g(1Y!=k`Wi9;?Lr6BJK>Wo+a;HrKI?#G z;K*=@UJ7H!-E?8=auPj;L{|HdMpkpPD1)mnex5w{`X%I$QUf2KyuN^lp;%&#riHqa zbK#8$hH!EecrYX&7^nqelmf~e#ppG$J()Q)GrulEV=~rO^^8^ zL02gwJg^1}32vhW%YqWts5^N^mPmqwG7yGvv|*|jhzSW=-Y2$Wv%Fi-FE$}FT8o7_ zm7Q@G7Vlpp%;6bF{_4?z+zqjR3AvN0%ghcM9Z?j3?2?@Tq@=B)QkcI~=krG{qJa<= z(Y4}mpU1dORurL?Xt(GA9i!2kz(OvNqgSRFRgPF;F)b3IAxop!-}Z))8O{$al55%( z@>7c4NY=#NNg>7s4kkusOHhYdkjF*UC(0a}6s4ud2ClZ&u4l3qqTUkU2d=gvlZdYCK4H63ic{tpC`9OEfDq+Z3r;eLg0*!oEoSeUeXO?+`l{n-Xk9xu49%+6H3qfSgm^9I* z4kV3v!f$^xYIss1=1u@6dyC!yK>-q>)f8(hUt%KsL%wN^Q(Y(Ek`h{%uZKWLYglK1 zsS>J^M>|e8Vn$sO=Q?)?D&Yi2j%kO9`&gN!+zfa8RA{nnzMm>Iu)9p!_@# zpAx#@+sUEmEV^Z$!DmO?piDB5ujl%AJk7vyzS_c){9rN_%M(+zQQ@YqgtpxoFLjs~ z3r50jQ%~C+Ig7akV(tki7nU_W%+GLHuCjlkzMh+7q4Z(mp+>sQmYY*(wK$-QkqJao z-c+@za%280*!>W~T45@lkwH~onBC@P0RohYhIZqpGex>!$yzJq?^jzDK@mNgCmLo>EGT3#Qhta5fRR0` zQ6}7xs}B}ai4PNwr%K36Zry6b9+~^vh6K=EFJCA@8*RS|v6t`TkL}ydys)n_nA2jn z+aPif@>%!Bn?UCFr4d+q;s|yoD(ou5BI^pyi+K=h7Jolr^z!C~o9F>1N3F&n%TMoA zwwYjQ%9jdO(*)9(o`=4DA-We*28Sffgv6p{eGMlZl{8+=o$T5p_*fHy0hB6%@c~od zkLkrFt9)8)iGm;G!l89Xt?s z8A$|31wk0tuYr&uqyq4watK{(J@j+90`2*BXT%>uC_cOIyPel{Mc?hr^{t?m-ddi} z3ydlCXVvK}iu&U*y{cHL3-R4E$z5NpV%hZ02*8}yy|}hVw&+uMuumSoeVBNX^-A28 z2EeBbmFbwDYk$LTtcHRq&{~z6~Jl#=~0-Ru}I@`b)g`QZ%XE%nPqH z@2hNVAa^*}6%R>~)yFLT#>^nDKi^q&G)CVh(f1osamc!ADqJdUat9${O?4+l#zC18 zyaw^57zROGFuB(F3N3{$U{i7X85@)^E9GTa*qwB8`^;V^Ef`?#=k+R`mZ|Vws7G2f zAR0t~-PrPmwu5r$Eo$LUEQM|Yv<*v zSL>1L_A-h7(B-Nb1=nwu{lPjO)P2$w9g=^c5r^g9?{-EiL5?DKwiSl4*kE5ff3-OIJkN*N;ZjFJ0kY0RazeP$B=h`n#bQcqu-iumlFx5(M|gsz;H}&4?|z-e)fn%3_WZ)|DdVN06LJEEgZm ziTFOtC5(l+WAY<|Ceo2I&aNX|52YjBLD`OuX6j9ngp*Jd=UOUCcFw}US&na&PGA5` zHr^g96F#z#CbldI2 zFCV(rXZwk+?g@@@xoAS{RU1<(PLl^g{P|Eo1b&%7t*-2ZcLwX}A2)4c9QCmN>+x&$ z4ut(0Pj&T5&Bb`J3y0pA+r7?dVnKd zrTf{}9H^(dLPD>8H%2-GY}x4Et~jr}!R?aM>t43;-Z9MbatxWabVFaMdBx|zeCJ!^5NmhD35y7O=N<`5&f^~cNXTp+_xi^XeN6o05q;d}A8*&k4*&RaecbOKNA)r1AK~xl zxiiW;FklIJ?h4Na*9*e40oEO!4YC8_*+6??csAHx6rK&Zp73nYT^F7WycdUOgYO6Y z^Q{J7Z+JHNt`E-!-%G-?!S{pV+2HF7&j#NO;o0E(q3~?*{jKn9@b!mhgYQQFEG#wi z_ru}Y;QNvAZ1Cm7v%z;$csBT68lDZl9}Uk2-#~aa_-+o*2H%f`XM^v@{qu;yHyEA` zzJuY};CoqkHu!!bJR5vN;o0Cj6rK&fLU=a#ZVAr@-*9*~_zwH$BL?5C;o0E3Ej$~1 zBjMTLI})A^zT3mI!T0j;Z19bSXM^vK@NDqi8J-QkSNP}K4Zfq{+2Fe?JR5vJ8J-Qk zp9;?g-&lAy_{PJt!FMb?8+^yZv%xnJo(;Ye{`utw-^uW7@VzoT8+?=D+2ETB&j#P$ z4$lVP-Qn5bn-0$g->L9y@ZA%h4ZhR@Xdv1gYRs3 zHu&xf&j#Q9;o0Cj7oH8i2mJFL2H#JIXM^um;o0CjAD#`q2g9?$_g{o(gKs`O8+;4l z+2C6Y&j#O8csBT!qXAE!4ZvbrU=Wtl0t0a+Eif2Y(*gr>EiEu8%V~ju`RcU5;JlC) z7@+HEfkCAblt;Fi5Lufk9eJ3k=eFT40cFrv(P-#k9a6 zy%Y-Ep>jDbFi3aO0)zBt(gK6@zf21Z(udOmgY-3NfkFCr(gK6@ze)=X(nrz)gY>nb zz#T7tH!Uzo|6W>PkUp9g7^JUD3k=f#IxR3re>N>JNFPfJ4ARHb0)zDLrv(P-&xHba z&^(bA7^JUH3k=eKkQNxE|1d2uNZ*ha7^H7Z3k=eKlolAIKc5yDq)(;=2I*6wz#Tci zkQNxEznB&nq;E08nQgY>OwfkFD;qy+})KMn=%@OfKW zV358&Eig!bB`q*We>E*INZ*kb7^Lq^3k=f#HZ3qne=RLANS{s%4AOUn0(T7kdRkzR z{*$!8AbodQV37VsT40d=cWHq^`cKmWgY-RVfkFD-w7?+!@6!T<^q++ScObnlEig#m zpB5OTznK;or2jlEFi1a;78s--ObZOs{~;|fNPjCWFi1a?78s--4h8OL`XAE*gY^k1X}2I>Et78s--OA8FrkEaC&>2Ie62I>Fe3vL}Y%KwS9z##o( zT40d=PFi4){%%@ekUoHm=y7^I(13k=dPqy+})@23R@=^umwcSikTT40cVF)c7i z|If6*ApKWqfkFC5X@NodrL@2x{o}O2ApMiHz##q8w7?+!awu?T)SsmV2I>Em78s;o zNec|pucieC>Ay}34AOs-78s;oOA8FrXVU_M^v}}*gY^Fn1@4UcdRkzRej_a~NdKR- zz##p%X@Nod&9uNEeJ(99NdH}0V37X%w7?+!R$5??emfMnGwMI21qSJVObZOs@1z9= z>37otgY-Y81qSK=8$~<2%RYuo_MxKuL6y3wSk%cpa7xT$Q>BitQS_SKyBW4_%qV|I z`!OFaCw+NsS8mNo^u2T)K{D=9D)U{y*ay?QjL6eTj2#%w9)w5-+lgTQ3dE4;HKNCX zoxrH|+V*PM%Ole~&HZQ02TMd;-|U;+!4`BQcK?p~*phLa?1{R^W2y9g{O^(ED;Tq2 zE4YolfiuiR=^>_|ro!hJI$|_gXpfQ5^I)!!`KgJ*Xpqa27(vp&_assBf&82b@R9IY z057o`;H`#J6&<>_WJITlX`6)zwUv&ee4l+=@|Z&9s~S>-9<1fq`1*PPpf+71skMwh z4!$V>&KrCXCAS!x*A8lX#JgDC1kl7Lv0hnK9nnx2z>jMK4XEO95=|6~u&-zMk>{KL ztU_ljCvYIN>^`yzEpwM2BmySp z0-NavVWMGP#7YYP?73HSRO7uNU$yQ#fs!1O>fXeJ*xw1`ga7BW?i89tT^*DmeC120mlds#b z7(>_@)x?~ss$TLkCkDQ0a|?YZ#QCxoN0Z1t-0D4 z9;a?rJ2RF0%;*&C(Cpakf#?t`u5e=qWC*sdR{thmbG$-i2HZ-e$~DkPz3#6-&Mr?8POih&JZsK!ZRgiKB8)#*tJg9?i7 z=zuY7YHFn692^9$<$?i^FYN-lt{SNVwZM!zg>VfY+?zy$H^;IqG(L!rPQA!S;3k_N zB&@w@QCTCf&1GgksB=$9YwVg>I5pBCJVB}Ur2K9I;%I=vgMm>_9wOn!uudeDAXD66 zDie&=#GzBvlWLlYxw>oxXS1Vlnt{=Y*o@sovA4QbKeUWpwOfyMV5;JS3 z7v*_=VUTG&CL7FRv!Tlp#L=Vp-~zbo3?(JslG#|P^_pN0oyxeju-bqi+G4xru?njt zsbH(;M^ytI`B_kegoX-tR-5D^o@>!2Dkz*a#4Ui2k*X3V%%grL z7rL0}LjC64C`9T%d)uvNN-J(#yftP_nfWS{&Rj5oidHU}I`l&9#V}D^(3S8F7lf=V zY~OY(CZs1JWF*Q&p}U9`21zkjWNHcv>4aU?TnoNm56WaKES&G9Wm14vHfLC3rut@?YCD=!%hfG;Cvz&(Y4kikyf>cf8&=%2 zqrEo1cRSwyfq(k(H|>e`M~|I(b$w4X7B9Vg=Le&B|KPwo-g)<)=+pd+{_Ml2@81)B z9X(g%-~RUKN7nX4`Ixu9AwPfR$sf9LPc&n-YvQ5|}c6HXDNr{_Ni zL?9);1mdNdA)Puy{<(o8AbEmPM{u~3zfdY|j)7V;BIHmMKn z9UHs+8e<8+^xQs%3}?IJn1I%ib!7!Kc1=iKV|&HF7ehs}zAp4TrRjrv7xztizV#4i zF8(zfa&3wPhOhqWi)7WJg@5(x-(7q2{)JyAfJF52Kl#P)Jp9Jz{uIr1H1?nF{A~QK zr+%q}-@o^vH~r$DfBGL@zn9VBfo#= z-~RG1{?ghbAC}+cKmO9MAN!Hh?~&g>@#Wv$^PYEZ!caufOFvlq(GPxQ_V?xYfj|Gb z;h+6GzyAXH{n@|!+0WelTi^Qo^84INulskedhgwj%VPZ5tD-+$fA-VAE-=~U@F|O74N%de;IygIfWE4B2mGb3x=Z12}Kd6g#R*3G9Q-Md$RdVS%viQhHqb4NR1a zXEhFF94Xy?9}K3la@tBqA$T7tXDnEx%>#3%JN2jHhxSIv$SLzS$4jnUA>!=T4;lnL z?(}ue=q@-L=anVj&>k@RJ|@A4g(>iEA@m;doXHFc8obPVIlT-T&(biEZ{e9-)~rZc zFbHxUQo(-2U{V%R(g`!n17faBGGMIHgzocCjrTRZQ0h@j$7*Z9B?wopN;RYu1sB5^I-=(P`cBN-s)o8RV$Dz z;cUGuCK6G+y*Iv`OfN0M$JLaJXes|v7ugiV+5k<5>QdTk?X_9@-~3>gC9_ zxz67eehP{%56a-Lh~`48EV$Rj+SbRXl{vgi*aV;ye+yZS{7)$O`IqH04I7Z?6(4(E z0O%w$#=%$g$T!Jt2ir?WW-Jf1G4_qf0CG5NAw0Cu5w0)rL~^ZWr$&c4++{n?GjgkZP?pqd2&_}d;f zc;7fA65vGCbAlZ&Z2lAy0i}>!M4TLiLqH`h>5gk;?A&3A`-VvlGA;S+Lf>?ya$$Qb zVwB{GB*yK=S*t0__4-Hxa`pY+M^M- z4yAoBa9(J@)Ueyi zuxk}@VO26hgEXf&C-Lj|#&7B-te{HVj&U{Y8~gfp{uf^q&Q-P;*g6L#(d$U+>udb) z@{YQ+877KMh-AsSbn0y=5}Czx;Pe(M3s8Af#VoQq9+#9q(B^u?!GAc$m_u)^ghWqP zj$?w8uPl5OmgnB*PsM;Zb;7sWxgzJ2vBC=@po=_KRt5(ZF};Mvh3^~k$*ZP{2SwB( z@@Iw-&u{7P0?BS&Z;#{`Zo4(@&0pP%zExqwO{FEE>l=II7hWY7sPJDmw@jJL-RDtu z+V&>QT8Kex;*Tp%Xd$|}-Apk}tN;+(Ct;&1;!WikAUB89*H~)!Nz|DujLKftTMPUP zUL8F}z)!xWaBsL9atc2f#r;NWnxIX{mThE@afSFb9Ub{8y+PD>Akgkt&!GQxdPQh! z^ja{t`z9)6R2oW;SbydPrd0Mj@Ecup=L}_%0d%Q^Y!r`U(8H7-h3F&sx%*F_J7mJ* z(|70p_>rgb3t`bzz9YOdsI0=cwL(APyGvDtW>0i;g6${go~##ceWmIl89{3x`O;mai@Q&C%>G3PD^12u?Y9&j2O~Kot?!xR7|CBm&KXi8+c6vn)#ORG369Mu3kKPX;WZea9IcD^nV*D_N zj(S@RVJ~bKw!w+%6$Y8aikx*c%*cPGn(K&z{i;_3hly2Wsnx|QH~Ke&8~y_4$eLw4 zme=aZ&tWevwML8NiimUr$eo#XraP~6K3aOGV?_9ho`~xl;8UC;mnEg4x z--g_65zUb!8+~KB>EHVo0=JI>4%Dl~##k|>w1l}ec6M6ZF|c1s)V7CQ^{-V4)+J_UNtRYY1UNp~AL zXi3pnfyTUsB1o$vv8?MNyHVH&Zh;U`Q8;B!8i3oiKU}rB)O!kSq%};IC#?r;YCLVt zFi7lmzkdR8mBn%NPhueWS(5lX*s?Nj96;*WCj>=O^NMCFEc>%H#Y! zIIi2y(#XR4#Z$MO{v*~*c`Un#E{h&gNTa8eb~|v}gEOZN@l;nS;Y-6V0nlEsGY3he zc%unY!wT8vVGi5@W5Sa5z}aQtGAF~s5Vawdh71K~acE|7wIu#$FhTF?*xx%-tz6!T z?Vnt~JV6bWivC6$Dw;dtjs@edJW?Xuk!A(aoEcL1Hx@7gCJ(Y{(cg5!1aJHTbM9F! z5k8q>H(M7v+i<36Q;WRPw3!Mc;{>{gaM}0iM|`-=M%js1QM2l(s=ZbPbgX zHZg5VKx9X0$UPhw>3BiGnL};3U||f5se@O!0$ayW+ch{44Qf%@Tq&^S8joi?|De2Md^S4Ek9UNX4X~FvzABh?SYlv(d2{ zm;>`ST9`@cQn(Prgc^Fujsg7@iOI$dg-9uMK_``oWgolsJ09J^mnvg;l%;H~oK3$I>0@yfV+JZxGWoUhv zmqB!yC~ie|eE9af-2e_2ifum27xd$i(VkWXTrH`F01}Y#B|75iz0Rw2KO!bS1ruq)_doj z`fV;cn7~$Bcrb*tt4Rh};LpAmy-XixwfKCBN=SpZ_;7M^{7afr39N)hSLKk6;H5IQ zIt-cc>l}-2lA>qwvo0ZzDks>K3w#1}PShi2F(A@vrX-#4CoD@9g(8fCh0|TFhDSht zND2#|$e-rKtg3~N{E!esF7lp8waHMXiW&>60^?6-aV+;4`6WH5m{V?L3aNG~#8krE zSZJxxpDcZaEy|LAuA?jDJ7lf9r_mzbqZh{GmVRYts`yMU>P{ZcTXA}3sP<;+p1Cu( z+|A$TX(;(2c8-fqx1n(tI(~g++Qg1J5?iI8f=De7|-;L@qrEhIhmJ52q?R{vg;84OL`SG zZz%LmBPoQ_%I(?r#f~p=$;*8{KaPBHy$oN8n1^3dp}8G05|PhAQ2epLac>v>Sv$AF zZBLm}uuKUlyH#{sLo!*LT=uveg02z)Q-AAV1uqZsU_IOMk%lk(9v=G42+K#+Z2Ia} z=%epA=$$CQ&ze})R5fAI5UiuS!MIO`_x}IdI~&-#&hx&X!(57_LVI*0w{k%zw~3li zE_Fn^av>{nN|~fBZjwz)l%iE!K=g485m>Lalc1bXZ-_vl49 zyduxyM?lpT1`Xamb>0&+s**n2FZO0| zeZu`{Ut6Sc(`l#EmGs5_{XWAC+@ap)Qr12cvBkZ(iI!u+Ccm>3eM~3=g9zh8XCdwm z<}RHVzR5AvQsWF(m}9c+EutM^5i=HB9vXV$hLMC+Rq0LWkqS4*xV0xNvfdCA2k^ap zKS^2$NrbCs()dedJbV)U^fGUHl7T*aZttfRl0BWf{GH(PHD$?*@sa%X1IYWeNGj8d z)!X00BMS#N&GMe~XeIr6Ws;b@zTpNoHM*dk?N-o-?B*Dr4?aeVV0lM*`B6+9&YicR z@?O?+S$a+1PwlgtuY*;&k#_z$Sj~H>z^;b=3QTr=UAI0-O*Ia~hIRXRN4Us7;Q+Hq z(AW@TwqY~r8k$P)?vy}Of3HkeMY-JF4bO6c!it5XcBMI0eLEkp zxPhI9w|NOU`03@oNYWJrBd+heVdqq9fjceI@N-w>6N`pXTMsrNfTnIC_Vo>Y%Glca z&yK0J#=_aS+hlBpdokOG@dwe#mKV1T-Prf5Ti@#P$@mGv5S?%L_iX!_zAJryfBwF& zNL1pCDj7SzOe_T%tp0-9%~03PswuFki3!odWT$DiPHj@1lJucUIz=zB<7+jPz!(1r z{q#31_0=!UCFG0_W?Bp$O2nKc*@|UnyWpLXAtcXFCzZ7hLn_a!0sYRw27b2ht^53_ zQ2W=BrD^A%{j?ENlUateHFo8PoN#|+)^Xp)2!G2)t_MCIIih&$y!MW8(!Kz}?!LE$J^MCV5d`7Sog=2oAScdA zkLkH|Z#upirvjsJkxb~0{HVn|M;!t;Y3eij{f1*UW}J{wpX)Me|6kc2d{mV5E> zVP`8>Objg_rJc{Z&GGf1FWBVLQ#~IIiBrgZ!2=?ylY490EpaXUUB#iBRwvb~XHQ?3 z6;{4lg%oW1nDc__oUc%$lPh4wCQG1lThR$YC)<&O^X9JO5(!`&hoosnr9oU-VMAqr zjyf!7k+$#x)_ZH$aX%5Iky?Pu*AnU$OxKf{Vi)ald~yqA0kMNVj2UC+e;e|!0(vR) z+q|3(*aew6@NO62;gIlB9Zf6py!!fzp@xR!{6<&OMpw2tU&G#tp|KA8s$(aWTpUTY zw0@N#r&Ilfmxr|<3C?T9HJC;htPuU#GD1V;5>R{#W;VOgT=aWT>v zsw##0WTxf@AfL;#ve>L$s4eSCSFCYoKJCDIFFQ3(V)3LmW@_D}(Ly05@_r`UB=uN9 zt=s1RR>{4tD}2pzZ{Kmj0!5_|tliHa*HSmh8Z90yaSasH%SzI5i--lv^=?qEynfnU z={oM!(e8*rq>$U)*Lrnh?y!nw3F}(wdU^l%45zKAIl6USwvt5QWNM08Fu_p+P!9;D z;6FjXZe_p5>u4POi!TtZOO3u!7R=isBg*6TNxB3Rxr_%7eYo!?ZmmFoPt?eJG-bQv z&&?9-?={Ur&wkAmS7@3WU9t7`Q^CVs$Gtj??XGEFr371fqa@fPeLpvRXU%R8O5-n; zgRXVu&K=XTr~4l5Q(&Hd(uXVQL+Rkb@M6i_li%w!!&P21BGj*<8IJ&5#_wg9)d$Zd z5r$bMW~?_i4#mK0a*0uwHFCSzQUGVmKOuOn2!h^>Zcyek)n9aNtKiP-RyO9Fixy-r zqg5{2YS%*L240$l1(gT7W{%>K#k%1$=+OljE%dT01T9Wlpsr{H=pWm2Vx2K0IL@M}j%A?7=EoHkREp>V<9C z?IEcp8sk*ys92ej-qwQ0{C9IXjk7RSZX*9l-Q)k!`4Z|qt0QBS|Ke|HWl8ab zBCTlEb^{ad;&7n7fDLB4!yc+9JjD}FEZmCs^>}FtwL~GsqsSK|SBh*iGE4Q~T(Psc zjCL#eqd1^@hMolP`T@wH^@|j1(Uo3~d8^!KQdDBO#+wvR-%#R-SV4V*}Y#V+X1UY5$ z@tyJ$+-=}Dr=N1@cin-H%Ql%NS2E-K1JVh~QDwB@Z9-N59Lz`bI8yXbS3XpFHDFUX z(L#GLPmFIKhRbdsB)-k7s_CbrIAKCpV#VpwL5xRND}hd%1eoGM5LE zW3LQpd2m(4X!o91y$%H3T9NU1{uZh6SVD`dko4UQZx|%IPw~AgogyEnqgd#^$)%QN znar<8uuepwa`bs!-~&*-*dutKL-GM~9}{53>N@>m1rV1u)~#$dj0teP4y-)n7q4JQ z>;``^j+j1DNjK68DJ20Gb{s9VkpMXRJ48p*r}}Oo1;POiHH6;=gVB?Gr{`6vNL>e} z<@IIfX2fhkkzfbG59A^Rf#7Cbo~Do}DH}=<^TJcb58)g}I~zYlb?o`NW2cZeqTY@V zrqv^)s9*qtZ=nnMfdlhK_MRT=iKXWJR<4>6K)zW^ND(;+VV#gcRh8euc#oa9`|jzx z@5-3NtiJQL=8~Z?-ToqjyhMeIR1Xa&e*QgR{ zon;1Xl!Z6kOURHd!)REvIi=kklr@vJlG3=Z4v=&;**84sug+L08im?+>-c9JRgX=zP8SQaHYtNeuJ4+JnFN z;}N5Pk!lAv!AL2@#Df(=H&pHhD#Ve|r<8b7(!kk*AN<*+-)sS%0tQus?jo%?Aj3Mt zv&ALIptjy_r~%(XNLq6elK5KysD7+wGoWt!jj-8xX1K4eq1)? z&suUx)ad-n88m zY(e4#PB*^U(5O6)uvd_ze3~ZgH}N>ff`}8Cj3)3@Q;KNisJUA>^f1uMJV()w+n(6c zh2oQam2H&=s_rhsx9r79@LWqj`*0w>)f5dJ!C3rs-!r0w@%&S738Q=~ zMz_8&-?kegtvDCX13OdS1Cz?Jt3{{;4n5@NxoRmkjTvDo+RUKVF8he1Ecc1(ED0E7 zX7XuZnpz_F*!s?-JF@6f7Z|tjbfE}G|MKVQzT@dBS6qHz*WxJvdpve3w`g|F)d9d z^&dm1gZyS zhWf_)*7Tq{XA@5^T2&>>^uNPG<`lo7=}tCkPhn$`DVeK#G3=^yjvajn10e)9Yg3$y zHw9t>UvJofu)ue=$Y=`6>I<3-=&p8aPoYFi)1$>bbhu4PL}n4ZVy2QR!5EqpQACt= zCHRQgT{OpX3gjf51r$;!o3yRn(O#IOFNzUOx4f->bXz-G*Skv<=kx6ah!1>WEBWF@ zksTXty&Hv30@P3yvrs0;)79ou%hO`~%4=Iidk)6Q){l^dG{fvqS%6DV$r7s3k9 z=saU7q01Y87z{~p)iKR5Vb$cGd_Ld>S-bE(bPYyQ_L#PHtW5YXi15+>C6Oa}Y}&rr zRZ;y6EAs1-qi)7Zh5l+ZtLUq!CD+Pgq1aVpVIVJp(GA)yPUdkau&`Dqz@5N1rO_Xg+wmy)UU&>y%~kG0@elua}&( zcrWg8Bt>Lvq)oS>g1q|O3Y$4_Z~6dr>f5leIGefZNUGjKr7vBrZ258}{Q?evZ}g21 zA9Ei_8h;rgsAyi14rKY3kmY;9LWxo$x=#YJ7`DVUM#Hm2xz>~b_H`BbU}!McxuCgh zU-)1Xy$9ZTHS}(7GucG$2ii*Yw_l04FcOSZ?;~B7?5|v690|L8RfMlyiOkr9@E!Yo zqcDC8UcPd*c=?q|`X%u4yM2cSY1ozOf7Pl0XJ?P}(GT4m|*w93?<1M zT3`HTNlVu^(V69{he-?8YVncHYu@E-<+AYD1w8zb=dK7KfyV@hP%B%OFN^Exwt9+%YE3FI%3uo5 z;?7l?l?LFZRb!L3l5Ah$FTCu!Z=;77NMh&_*CWvkkm1@gPH+%z@hFB}n55_=92_R* zF!v`2TOzR=)|OuEJ1*4ihMcFHQcaK9SsppfYL;4iZ=Jtk=T zTlL-VUnR#Hnc%W1_?s#WyywAN_ zX{F^q`e%bz#vdSQL``wbHTO*V0{#YXgq{25f?ldh%qn->Tj4paQWe1w`MBSO)xi2p z;k0KX}UTe}_l)GDr$&CYn5#bxJR@9=WI=6OR0hb{A`->9TtNv$EG3Ro$?FT5a1 z0PX4psg{Y={RxULY{zS- zRiRHLwn(qF5+x`QKOmY8I#-K_GK>cd6mUjC!%}d#61+I8x~f2h+njWKP;_0t$oS`| zF=y!o{Ngi8@FgPygbkqDcLeLK)jqL0PvuhXD(Xi=6H3T*gLlTa(Jwq_C&zrTU^#O9 z_0oe`b?TvYXr$fvYISbYR%p~=RvBAeYALLXvbJ@A@!~B}ae(@bg8C;2@MEWkTYqpd zF3^b1m$DH!Lb2p58DKM|BRF*Dl%Igz&S4OjSW~H?SJb!LWRBFE3Vepp@qq#u(lQVO z>Oz+#AnG&;=-!T?XypwP=gyd=b{prawPa-1D0@t^t{y+<^6A)1?$)t>fdEOf*+bYP zM*F@(b-?DaI;VV0}w4mqXqtuA4~3#Ozj&2h-3dc^Tu==H;4c;UmcD)-Kfu;<8Nu~ z^tS#x56^Pd&Z;^WnLgZZW36}jZ0D|gcWH7v+$eM#3B(`l11ZgrLY%e5MOXnQ#!a`4 zJ*+!Yo}+A(1~AL{bK&fZ&b-8xWX~xg?uJsf)3Fy#ecRX}P5%ioNN5fEiAq_VHoPsR zk|sUU+OaUhIyyz$VUk*-cn|Vv_-K7)9`8e%d{@dDW~a_D+H2f6r7xpBByG_H!II|8 z$G=jXP28E(8?o!A2u&DD?at_U$EiXhj9vG!>Hdwb=Oa5N(435rH;SBRju?Z8@g-q5 zT#&OQ8yD$lT*X+%ydrX@nv+id{Yv_+v@!|u#2pqLsV8^edY~tH!h+9b1PvXjjs0}C z2+r{nUg}Veyw~o)QR|(l{=1Iks1#s$c4;l`_F;bk#{cD>Imw zt`{9}^lHL*L}hRqCMaLc8khi($epho&LF>&>}g$iW3UH zaePbv$;9MlCMV4PZ8YiYBs8GI$<~i{?3-RazrMVR29I3?UfruLf5^7Xl`{D^T(Gxv zk=?lk(xA!e$OPhTiC!6c>xAC&4jLmcuN4zNqaMquFYXSnDLw=r32)Is1J>OgMdiRbPj^@0x9t`N7q=gluw>`&7W@@07`<=Ibf``t~616|J;OSVI4RCx)xK>6-%)Z$4XhCdMhM|W&6T&3mbP3@a-0m z8~jxDP6KFB!1(NrenJUndz_K^(j43xCs!1=-tm z_7uY`lH+j-x~ZPa(zG{y1$3+R-#dId#pN`JyyllX$UufTXb0aA3J4#@ zCY%{s(t2*WT+GA%t||vsjE$-JvVHfi*NN;*n42kB<^AGn;c_l5+BDJS4JiPMpJPrh zgfvuZg`XdS9tdrp^;)sCk4OnrDmr~S^7cnK%M?<|pOR}K8}a3k1H-QC;B-HJdNHB! zwAmy&c1>U=N8E@X&gPF<4_&3m6yXc+9o~8|_eDiv-^oey1*y2xp=72|b~vOWFP_X{ zo+i)qR+1f;(Eo8@NZgQ~>PgV0ozWC7?1F3bBm)ALpCeF(-4o3pE6pU5+h=5f5BbhPlVE}SKC3Kx@tj^qrWM}|f;bKIj5_H@e4|2fdJz201H zp>6@t3+CWq7oKLU^Ho3Bi*20<(zQ1kV8d$2unGQdE$U98~W7blHPPtcAS$XZM^q%%kKA~{=my=D{qhin%V6vVcoII9 zQm1qnBX?e7ns}=S=oY#sg;N(3s8zYCGpIZUB1ia_#i8RxQ4FJFU6%N2hb@$53Cp*O zcnGdKEN2hqN&B8#n{NJKHoCO}jl$w4=+T%a`{0#tpf)p?wOo=@MEz} zvB4SlpF%eRtT9K!R;gsx2s&hj>O0IoCsNZ0m>`@Mn^i^~%hVVFEOCG==}oJbS;qld zRGvcm)(;#AuHgd*x~`ZTq?B4Fp%o4%(c$cPFvYJQKMueRSuqlIs2y5Sk-jg}Ud$qh zebaarVlW{}Z8-ogG8or+AwX7DN3K!qQ1;lNWQnQSC0dRQvkL)%HKg2gjS}#4&|-&B zH{k8aW4g;SMX-y;VodA^((CnXf3dqs+M6ZGjWE)|FB+%0e-0DArC#e%wg4JErOuyh z-US|ObnZh?$+(XVEFk1=dWVKyu?h@1qGYp29Zn#V)#Uf@y7IhFoI*fR@mV&*?QX~G zN@FS=P$=Me5$93h3CtY6_bZk)BXi@nihQAj_rJI(J@S|`{ZTWPR_~BU;%>W)EZ0(Q zbjDVCE37$K#dJ_>EG*ga=2%RyQ0+f)JZRJan|KB2F}R942LMRBJYzXc9z`Gwqjw&X zi^du-c`i1hR>22w-ray@^x$_N2dXwYwZxlT#6{|fl#&s#hs8KPa7WxCnuiU_A@T3r zag<8$uY3R87CPXti)T0yKNg6WYwPNZ>aZFV_gw5?ALt;0T;SzEdbz)t_IFFoCPLZ7 zS5S{z+)HNF*p5F@n~DZZ0nr$ST}jIz37o=TX3qK=o-K<%I5<7ulW3~~bn>R2<#!=i zSlp)fNf88jYWS;Msasl=18lV|hcg&+9Fw(Bx?MPm$s1T92ZaZQ<*+f@<0ilBE4FWdv0vt87JT77lnWE4k=+NN>gUX zny4DklH@TVeDET)R%wTL))g7M$iyKiaD@OY&RBn2hi&7Dq;+sxF$3WSTRB`XQ_-Og z?f-XJPaft@!HG~5WD+b%o&?N0cRK?sh=(wY>iE2T$esjRc zAnunum|S`2=tB!ChfkBI`Y)N{{bT+&f?_Ywa5shn}%a`#) z_3*KyGZ0_+qM$`dpEqjq8BKoAdfSSe3Q&BKLm&KzuOJ+{^lLE#DO7et6-J#Y`Ubra`HlI+6yg;Au1hcQ_v z>Zo3*vIb3N-YttX2aUrO7->W$4tC!Js2_Lh>er{t%+y3~=>;cfAO;QXLQct5OKoMI z`9deVuk*cc$T}xq?=nkeJ15+tPm)hVd;~=WMl*?nD?`Okxz+D_KUj#WMK~avo1m1V zv2rrEawMkQYTE}jA?pvJ6zLHcH>Rc;K?ip>ik!REBv6!lV`e#LG#6CL`YAgp+!{Bi zt3bVq35YYf-o|{cw@>-trwaX(?i#hlQ<^8Zy~E{!oU~^hWa;(2=@0RVJ=1?;-%K=$ zEZwN{Pu-mnOeRX)l7Sw(PtYXq$z8%j^T4LXuOpMwE&=tWG|P3k`{xB!oL2T{q3(Kh zr{P-=Os(ul>Ghl~QB~IaLO;N)u>bHtskUnq#^TGAQ`Br)K&yz2tXgekdU3BoGCLgk zZh4t6vCN%;h-gQ*hw5;ge;w-+#rtLJ9M3%dZ4;~c!wUVve!!j%_qnxaxz|(3O()?7 zci()Vv)FQ=+P*+)a_|m|(cy@Yw}%n&(Mj|~W!d`DtV?!bU-ic7;%ebKEYV{Xxz4hmBH472ft{ry1KJg8% zb>`aXoLxAJ5x)WI@3xx{L?wX_Np4?9O>S_h2~067+t{|>^ty+bo4kj*w^P2ZI5_KJ zC_lad=OEnKjdBA|D#8y=mbw+B2z(mqK!d*pa@@Mh@xP1#*qn zR86~W%q@hWv-WU)`7JyQr4O}Zjd%y%Is!q)5Lm^$-M3wh_igLQM&K)WJVq6gP&||4 zpRsp;&>gEL?faCu6oh}m6pG$6|6Db$U3*`2z4z}<7Ur1 z2?+yYi+r~mPC<$!P(A6Zu)9rkS8dF>537?y#p76#K^~6@pp8$kCv-A6o4X8H*7~YB z{Y{|wt+J!HiGjk=Q0}eHA}7QX16F#&vy)1tQ}Pba(YN z14A6<%XU6T90S6zf*5;8A=TROaKqqHkS(2`QxJ~Yc-eRu?{0a9mw=94iha$1D!k!H zhtT?Y*FEh8g`Z`QCc zUe&P1K77boxWJTUJt^`KIdzDjd?N3!W?zV5X~(Pwve#MZz@48{E0P}VO|OA--#&2v z$izCgcdxe?JV~GIO@Et@4-Gs}#T;{F%75Fj&$W%vBP&g&21fdlufKV=$25#1M$8=w zMz(7Pm`^KHJ58ns#)Ejwe^kcpoi#;7o#F4$3)T@~=%|1-X%E2WRZy?5HfbO|qxb5u zMSH9y2%|3Y1`7Q2sowNSfOBHt!QuO6t%pn+f1xc_Z~9bE|Cp}XM#V&;!m0QOe zRVL_VZuY=|j&Z9$w_N2jo21@U;8Z0ko!QM@O79)`C;Lvg6bM`D{Ig#PQglIR z*CQ?5;fdYe>hZyWtrad(2jfdsy7L-k#e8td9Lqfqx$6-cW|1f*$|u`byr>w|2k`Gn z4?2bZcK|AEh;z!ArTmS%sMc@3W&hlvdDTZPw7agecA0g?mx}4)m1aMFowYF8)vpsw z0f*`Xr??G|8t>G9-1mU|xn#Lxn=GoMA4X7HN$e^kdah6`!@XIiStz|d61Uljq>L?) zk8j~eh@RqIjRs-)aNe~44%(bGE*OP%>BiPCGr_v&6czAT05B2{>&^SyaoSS$R@Btx z8m+hQ3z=aH+8ssa2m!Qk+@>>7TsWeLF~%#D)Lymp)J6-~ZB6cOYQp!>{Y zeMm?f%=x09QrFdZih{*WV^Ux!&H6(qGd6%z4wTL&Ur_NC%B7Y6v=XoL)Sr zYgMVaf}0zAjnWn4r?e#mx@;J8I7qNDlk$m*_af+prEtgqqU=$;LFErr9Uz-dAz5(T z1EKIEUG*V}iN+p_SUMJ94i>(&e9%1L%_^E3s4T%?m7yAg4DYKq8`-EIx648ib(aeV zl^h9#B#)JL8L7-K@K9}YiJHAb8I>EPVF(J8ftH=MPKHM|;hq@f*i} zDxCE!qZ;p!TLo+0bXK1>k1fK5WA20w8B(y@K0UTuqEgq#7B;dG2g8q@`-w7w&l{Ea zv}mSrAiGg?M5e{^#+45iE@}jWOwH{WZ2Sang`izB;!?w4^U0neaRn3%UwC!BcuI>} zY78GWj%Oz7b06qA4VRvrJ3v9sItghIjh)ZZ;-%`G2~d{8x20j?1C!nf-vP|+zjzUZv|HIx zr0KGw~A)nIZR;B=WxKj5pzUb**ZtqhxB3F$I3w0n+ZdfyRR!8j@g^o z=&npl>#}HRIJu53yr$v9qPq@HHxEVJZ1q^Ufq9tR>T(kBQKwnik1B>~Iv`B5HkVdu z<;CB2GK?-GG}sEJPDsfRYr)MHGzni#Sd<^z-_)WUDp$TJy1NKca8KzxI^!-EzQ$_` z#WXu06gQ|8Rhhbq4Wdli<)un+hFT4DSfjL1Qu8uX!v96TgT>z4`4 z&@K*xEjlv-&UlJqmVUf9{aDZ7=1zyCM66bVS5&{FCv5IA0FdE=!duBRj>Oa~bKIyi ztUDLH52O73NLrv8px07+A433{1>vUcWuiZu4_aTt^mHSjDKZQ7z;U^o`^^>N4f*GV zs4<$qC{)f2}jN2|I@J4@FG7Dp!Q7w;m83hgK@{a)Si zkEG~>pS{z4-?@SY-y2~?2dZb=?X}i{y?f7~uB^{zxMTO8pe^);+S*fwc^t!Z<&$Xvej6A$C3T}FL@!(`f6-&3APj7Z8uQ3)Mw<~ z!*q+#b-E=n* z8h+m`?X!64fjb%vv}k;z1ln5-v<~OmBIXYdJof5(dU7})VQO{JS5mBFaIVUy#>R0c zg0#ege7fX$gnRfsf6=cz&Yy7)F1F@czRB_YB}cum=f?$$gZX#X3?h8>+xjZ~gWmKD zodkk=WG@+aO>>7ph9TP*G}VQZ`A}h+p`mZS35~>)6(fTwoNi5{gWyF~Xwx$PK#Rr0 z<-vSiVXRJORg7ir3cC%JJ~>dQN5DmZj9IQW2jSPj5mj`|5NcBdI9x9<<8lc%87a+t zZOuq_=poaZhMp2*8HZX=<0e)1yfrHsJF+(69ZW+2;5oUBKVoC)0jW`)Iyf9;c`c{g z^wYiR3q6CAnkNjjVY?n0(zPqe1LZG{Z>-EWmc!R}d3l+G>3~}8`Q=Rq#O>Ybrw2~& z)9#_aV^|S&%27Vwo4$mN|IEOdUHCzq`qJXp;jtN7E5e0oa!oRZ!WEwv0O|_;V>ei< zT+^^QJdZ)3fLlp`N?s+5#2`Dqp+zvamq^F6DmqFEh;rsO809F;6!^AH_=PPKmbzee zj4c1`S@X^mgE9%JhAXxv-3y?UbZ3&>VIcQIHflzt4m4EXen}HvQ{LefOo)O^?iWgc z`@PMc%;NP3g;V4{Vl7d~)v7n$v_c(OyFp>`O*gT`;G2#YXs~uGu<&zXWJDsmfRC*r zggBCUo)I!0zz67F){o@?yTu`ig0O^vgj~|rb2gii!67XyeCznEr2hDXkBm&=-J>G=sjyFaT?pcaY5#**Cb#X2ERT> z1l|xigtU-i&@Af-_dsZgA+C8KIa|Fst4?sF?9(fF;<~ft>MdDy*6M=IeqxjPcR#59 zJVB(+!bBfLs2U$LQ`=VBQjeKp!&x#_0Dhje#{I>&QP+%T*Bq|$ywiIZujC@}!}qBp ze@La^3w-|E_A_6{gpJ`^c4#DHw^Ec2oClN|#wn97VcL)$+j3gAlf|q$V{L927yJ^$ zJxm3UB@;b#kg|Cq(uLej%R-2;;PTG$Q>xA5y1rM*4kVc>HfS|gT8jb7(-_oW!;-aq zLch3zN1~<_XJt23baR!uIaj8YL+;2Dp#dTpG;qB@$JR&!Z9-+e3wG>W_)dLnY<{Xv zVIVWHJ(2<#n^(um%Swi61$H+8Q6b`_6>2DIBZ!(t2TMd-bp$OWOGF7YC^B#^G{TJ+ zcI~P776-d@ngpi;cUZN;M$N_sIk)>K0%OftOmFgKSj^zlMtsIB(bJ-D!m{pTsbhdw zmV9wbs}XmnL@(7e>9@?P&=tn4_ax3>_TU{n&VnN_)83(1D&#;sTb&}=KbP#N+7??kpgl}{uc_1cUom0Kx;xg57GaWmgaE6*DFAP*AMfFer zQ89LDM&czo`vnrld}DSaa?3h-X!SU_ILsVYuEu+NzX+eFBTdJL?TZqCwL^;xW$9OX z({J=ttMN|5mj;%|72qG`!tl!_ewZIe|KqbNKaz3%FY)L2~2w>rW)fO+3?hPm;X%o+SC7jQRYVlH@@&;(x`@zx?SW`OI*V{5gOB zm+BXi^L+MJ{=1R?o+mHo*ZFyt|9-^pKf#zkV6GeaIm~}g^83H!=iB-3ef+nL|K7=e zPx1M`wb;p}*Mn@J-kD-jMA4(Ob7CgV!GBt83rF|9-S_U$XOSZ|Ap@UwTWj^LMsg zpX~g-e*XN^kKCJ#{M&c2mwz)el(}Z~D`h|77;& zk$?S{e>U;KncD}F-~a1V-#&5gKYhzxx9#5jjq8%fb|i2A-)~QI-AZ zKRa+kQoZ@wWZM8gZ@)JA+`#AhZ%u#aqhmc!|HW5l-~3E^V!HBs&kQ7kzy7sBj^RhK4SYI5+&DFE!d$I8*5#r_(EmBNH(& zAnSxD_R7gQ2$A13l&U1xAT0bSRMd2$Yx~3VZ#i)|TD703F zj`{7>IpMchm+9l7Oux9W1h(q_CpC)B6u=ScI)WAH#0zTcrs8D;#JbXv!ad43|J~Gx z8iux`7`yphT*a_0zg*o=c1sg(FP|a!za_Kf{$((7FkH&{I^)GjmFSCBHBlI+ptEWs71u0_dueU8GSj*3YBtqIUuN+!DG7 zS3+grs0o9bY9)<1^wT7>PBFt@B3cD%CZCl`c+*X=4vevm1;`A;(?kKP1IHK~Hw1HP zllA%aGk0)TS-ok;CV{=l-%-${kaAHk&|pAsXr)e+=_>=P!%Bw0g_Xu%`Yr8(PvG!( z)krtT3wLbdYi}v>$F0APOvxk8&1r2e6eA>b_?w7@^c%hDw-D%!>J)2e*4J0k{I?y$ zGelqj0KJ@K`F=43;$WM)%0s-~lzQBt=tQyAyTjaix~ze~vFXYk3Q8u)4ci%L%_!Jo zEA4!`km!8S-5l*>y8DR{l4OtG>1^&27mLN>Pi1GrYqP~lAUkv8CCSYi!80}Etfdtr zgZ#m4m#y+JhOAs}-{~2EZ$*tSh2B%IQP4&OQu|w|o6-PGj;^Qf4 z(aB8tWBDUhuYmU5^LTn2D@f49*+h?;E!zWAIhq&yM zr{pE3)OKb2m_KopTuF*U+8YmT9~-eJ?v^uPWBVm;gXMWo7kYU6r8!nb>S5{BX8ex9 LN48)3;P(Fmw)tMo diff --git a/runtime/src/assets.rs b/runtime/src/assets.rs index 1b0fb13ea..548646a13 100644 --- a/runtime/src/assets.rs +++ b/runtime/src/assets.rs @@ -1,6 +1,6 @@ use crate::{types::*, AssetMetadata, Error}; use lazy_static::lazy_static; -use primitives::{CurrencyId, CurrencyInfo}; +use primitives::{CurrencyId, CurrencyInfo}; //ToDo: V15 metadata (remove currencyId) use std::{ collections::BTreeMap, sync::{Mutex, MutexGuard}, diff --git a/runtime/src/error.rs b/runtime/src/error.rs index aec11e1f2..31640d187 100644 --- a/runtime/src/error.rs +++ b/runtime/src/error.rs @@ -110,7 +110,7 @@ impl Error { Error::SubxtRuntimeError(SubxtError::Runtime(DispatchError::Module(module_error))) => { match module_error.as_root_error::() { Ok(root_error) => format!("{:?}", root_error), - Err(_) => format!("Unknown error: {:?}", module_error.raw()), + Err(_) => format!("Unknown error: {:?}", module_error.to_string()), } } err => err.to_string(), diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 533c692a0..aa287a48f 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -176,7 +176,6 @@ pub struct WrapperKeepOpaque { pub struct InterBtcRuntime; impl Config for InterBtcRuntime { - type Index = ::Index; type Hash = ::Hash; type AccountId = AccountId; type Address = Self::AccountId; diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index 1594c3347..7669621af 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -272,7 +272,7 @@ impl InterBtcParachain { let tx_progress = self .api .tx() - .create_signed_with_nonce(&call, &self.signer, nonce, Default::default())? + .create_signed_with_nonce(&call, &self.signer, nonce as u64, Default::default())? .submit_and_watch() .await?; @@ -1130,7 +1130,7 @@ impl OraclePallet for InterBtcParachain { let head = Some(self.get_finalized_block_hash().await?); let result: BalanceWrapper<_> = self .api - .rpc() + .rpc() // ToDo: V15 Metadata (import from metadata) .request( "oracle_wrappedToCollateral", rpc_params![BalanceWrapper { amount }, currency_id, head], @@ -1144,7 +1144,7 @@ impl OraclePallet for InterBtcParachain { let head = Some(self.get_finalized_block_hash().await?); let result: BalanceWrapper<_> = self .api - .rpc() + .rpc() // ToDo: V15 Metadata (import from metadata) .request( "oracle_collateralToWrapped", rpc_params![BalanceWrapper { amount }, currency_id, head], @@ -1608,7 +1608,7 @@ impl VaultRegistryPallet for InterBtcParachain { let result = self .api .rpc() - .request("vaultRegistry_getVaultsByAccountId", rpc_params![account_id, head]) + .request("vaultRegistry_getVaultsByAccountId", rpc_params![account_id, head]) //ToDo: V15 metadata (something can be figured out using get_vaults_by_account_id) .await?; Ok(result) } diff --git a/runtime/src/utils/signer.rs b/runtime/src/utils/signer.rs index e5ec06826..cf5865f3c 100644 --- a/runtime/src/utils/signer.rs +++ b/runtime/src/utils/signer.rs @@ -57,8 +57,8 @@ where Pair: PairT, Pair::Signature: Into, { - fn account_id(&self) -> &T::AccountId { - &self.account_id + fn account_id(&self) -> T::AccountId { + self.account_id.clone() } fn address(&self) -> T::Address { From 7119bfbd2294529f4351b3e8837c748437762f79 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Thu, 5 Oct 2023 12:14:37 +0530 Subject: [PATCH 02/11] ci: comment out clippy check temporary. --- .github/workflows/cargo-test.yml | 6 +++--- test.sh | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100755 test.sh diff --git a/.github/workflows/cargo-test.yml b/.github/workflows/cargo-test.yml index 4b8a8b414..54a226f5d 100644 --- a/.github/workflows/cargo-test.yml +++ b/.github/workflows/cargo-test.yml @@ -42,9 +42,9 @@ jobs: run: | cargo fmt --all -- --check - run: rustup component add clippy - - name: clippy - run: | - cargo clippy --release --workspace --features ${{ matrix.metadata }} +# - name: clippy +# run: | +# cargo clippy --release --workspace --features ${{ matrix.metadata }} - name: check run: | cargo check --release --workspace --features ${{ matrix.metadata }} diff --git a/test.sh b/test.sh new file mode 100755 index 000000000..4b5c3971a --- /dev/null +++ b/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +export RUST_LOG="info,regalloc=warn" +export BITCOIN_RPC_URL="http://127.0.0.1:18443" +export BITCOIN_RPC_USER="rpcuser" +export BITCOIN_RPC_PASS="rpcpassword" +export ELECTRS_URL="http://localhost:3002" +sudo docker-compose up -d bitcoind bitcoin-cli electrs +cargo test --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind -- --nocapture From 4fb83d429ed8137c47948dab9a69a9ab3547a232 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Thu, 5 Oct 2023 12:18:15 +0530 Subject: [PATCH 03/11] fix: add kintsugi metadata. --- runtime/metadata-parachain-kintsugi.scale | Bin 0 -> 246589 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 runtime/metadata-parachain-kintsugi.scale diff --git a/runtime/metadata-parachain-kintsugi.scale b/runtime/metadata-parachain-kintsugi.scale new file mode 100644 index 0000000000000000000000000000000000000000..846543c3c8d6f970c17801ca7fd16cfe0d352621 GIT binary patch literal 246589 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 Q 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

&yV^}ua?@UED&*Dr4#uFr3V%7 ze^%WzYzN{x5{6;9YvlS%9*0VO%Egx2%rm>g@pkPQxr$hNs{B00OGw1G5Lim+>R7MdD)+@kCsig@&V58)w zn9eXM+JRt9=5%;Uz<$b2J9~pJy^J-}Scr;WUP-W0fc)^DS^|Bcg?~-;kKGeQ(LlE# zJty8ZIc8fJp4f2~rDtaR8@M~*b{+0qpufk*iGh}WJ!Fm)?6-;GM#S&HNoW>;t+B*mt83-mjeuw>^>hIn0n8i> z$nUSAG88#!|2`oz*Umoq6dIY;kFUV*kCXYMb~8R&Y@yaBQs@l!Q3Vp!GV}#3wXP*P zF_}sEeIhmMX2-8m&7;2V*AoAppg7~FDt~QPZlZ=$0@1{n4^b5V;SI|Hvi6)|Fm*ok zIBrS2Ec6TD)jkWCiKR17mEr3>=y(@%I2^dt134WK(z&Tmi_RWm>!FV6ciJ*3rx$T~ zm9JpB$1dsBs=*@iEgE;JhocEk8 z9Pm5604Nz1;Yye?m6Ry5&>V2cs|xtmajU12vOrJx5*U=b3Ubp!EcL_gz~~xrpxH|} zl3SK|M1R4T6c{=c0VB{CMcOJU0Sg4rW(YeJb1sFwHUy5qFimB+PDL8=gEcn;hl%Kp3B!S-w5?=AWKnk^`bW(BqCBBEux^qJ~9qvuMqYk_%kUNE_UwBz84BmY^frW z828SL2LuIXBNG4u{@*6hzlR994g+G~!622U7A;w6w1lV)`4B2T3;YM!#c2H!SZuF> z04DL;W6LP4V9WsmgkR>RQurVQkB&?nt4XL`MyT1 zASwdk#!dkMe>CY<$iOxTP%n;6$s)dE8#Jrc*?uf3=>i+^v%(=?iCv)iZOL?^p zR8vFCA|6SwzTrEbKoW44Bb{AcDP~EQQL%PLhN{fA`e74h5{XU4wBX%eC@js8xrGVQ%FPsy9D$CM*%R{fwNIE#q2ppFNqkD zNwMIJH?|LM7VA!i9vhpMn`gIdLM|{M`~q`O+n4|xFkbf)kIlyj7xjYDI;%w{M&eTRh{}^7Fmlhh62Au35Om^$_9ME^tpfToNjfEzy7ZkA@qwF1T8$O#3U zD=O0QUtL2;S}zB`3%-r-$q$`H5{r^^HymH539AwPnBKu>H_T_8PER1z$U_l?;^z zT}(<_H*y|zK?lL_{T~n%d<|9MR&$RMbMlXhOalU{L^j-{7B%Xf2*cw07ELXvW#T!i zvLq3=xF@ZT2LXzFg{G_rBprj0qp(3yp`h190y!Ikgj-R9jnl*c@$OI}6N^ZSu_W%l z^fc{)`J})2R|l9ovbpfrbc{Zi1UxyUGTE)Q zo=ZyPzCh+i^vP-o_ZC2FgUWPz`|2I>T>MDG@CeFO!-I8a)HmP?4cL8fEh%SoDl;`z zL>A}`HpRp}g-T0#v&K9W*OLBZHHAoWkpkxyc`<$*MP4!FN!cFkV2NcKaNJDF_3#WT z>LqR-Zq75_lxHF{uI_jf&ex)rOihC-stDu$tR{*Jn`)-uLn$*j!BICV4S@o#x_970 z>*y=tsE;)bp3xsauShcZ*&y|;1Su}^St1uK=Yj)i4nJJb^*s@grJFap;Q-xtZ*p6q zH#4;^IMpQ5Sm7_|i;&BHu_g3&g->_Wo8}9f9$&aid?EgWY%R1YUrGx6!!G^jj2MO& z+sKM^u=C-OgXcVR+-o?rC|eL__CeM>(9y&-57 z>MDEf<35aw=3Z%sy3y#Dlvo}iS%3Q1?q%0D-LZQpdOf;1%i1{8o7Uj;*?xe8mu~CB~8%A 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ȆO8FXlud8e^Amyy$ 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 BX>b4l literal 0 HcmV?d00001 From 2e4073e7e7a704a31fcf23685a2f85537e7706a0 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Thu, 5 Oct 2023 12:38:01 +0530 Subject: [PATCH 04/11] fix: fix test cases. --- runtime/src/rpc.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index 7669621af..a7546bfc8 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -479,7 +479,7 @@ impl InterBtcParachain { self.api .tx() - .create_signed_with_nonce(&call, &self.signer, nonce, Default::default()) + .create_signed_with_nonce(&call, &self.signer, nonce.into(), Default::default()) .unwrap() .submit_and_watch() .await @@ -506,7 +506,7 @@ impl InterBtcParachain { // submit tx but don't watch self.api .tx() - .create_signed_with_nonce(&call, &self.signer, nonce, Default::default()) + .create_signed_with_nonce(&call, &self.signer, nonce.into(), Default::default()) .unwrap() .submit() .await @@ -515,7 +515,7 @@ impl InterBtcParachain { // should call with the same nonce self.api .tx() - .create_signed_with_nonce(&call, &self.signer, nonce, Default::default()) + .create_signed_with_nonce(&call, &self.signer, nonce.into(), Default::default()) .unwrap() .submit_and_watch() .await From 0ef30f0d224ea12564bc0fd24b97668c3c0f3f31 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Thu, 5 Oct 2023 15:53:20 +0530 Subject: [PATCH 05/11] fix: add feature flag for running test in sudo. --- runtime/Cargo.toml | 1 + runtime/src/integration/mod.rs | 36 ++++++++++++++++++++-------- scripts/run_parachain_node_with_sudo | 7 ++++++ test.sh | 2 +- 4 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 scripts/run_parachain_node_with_sudo diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 69d18bfa8..bddd0d1b2 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -12,6 +12,7 @@ testing-utils = [ ] parachain-metadata-interlay = [] parachain-metadata-kintsugi = [] +run-test-with-sudo = [] [dependencies] serde = { version = "1.0.136", features = ["derive"] } diff --git a/runtime/src/integration/mod.rs b/runtime/src/integration/mod.rs index 121ee9594..6842deb6e 100644 --- a/runtime/src/integration/mod.rs +++ b/runtime/src/integration/mod.rs @@ -173,16 +173,32 @@ pub async fn with_timeout(future: T, duration: Duration) -> T::Output } pub async fn start_chain() -> std::io::Result { - let _stop_previous_instance = Command::new("docker") - .arg("compose") - .arg("rm") - .arg("-v") - .arg("-s") - .arg("-f") - .arg("interbtc") - .status() - .unwrap(); - let command = Command::new("sh").arg("../scripts/run_parachain_node.sh").spawn(); + let command = if cfg!(feature = "run-test-with-sudo") { + let _stop_previous_instance = Command::new("sudo") + .arg("docker") + .arg("compose") + .arg("rm") + .arg("-v") + .arg("-s") + .arg("-f") + .arg("interbtc") + .status() + .unwrap(); + Command::new("sh") + .arg("../scripts/run_parachain_node_with_sudo.sh") + .spawn() + } else { + let _stop_previous_instance = Command::new("docker") + .arg("compose") + .arg("rm") + .arg("-v") + .arg("-s") + .arg("-f") + .arg("interbtc") + .status() + .unwrap(); + Command::new("sh").arg("../scripts/run_parachain_node.sh").spawn() + }; command } diff --git a/scripts/run_parachain_node_with_sudo b/scripts/run_parachain_node_with_sudo new file mode 100644 index 000000000..5348e88ea --- /dev/null +++ b/scripts/run_parachain_node_with_sudo @@ -0,0 +1,7 @@ +#!/bin/bash + +# Change directory to the specified folder +cd .. + +# Start parachain instance +sudo docker compose up -d interbtc \ No newline at end of file diff --git a/test.sh b/test.sh index 4b5c3971a..dd6ea4417 100755 --- a/test.sh +++ b/test.sh @@ -6,4 +6,4 @@ export BITCOIN_RPC_USER="rpcuser" export BITCOIN_RPC_PASS="rpcpassword" export ELECTRS_URL="http://localhost:3002" sudo docker-compose up -d bitcoind bitcoin-cli electrs -cargo test --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind -- --nocapture +cargo test --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind run-test-with-sudo -- --nocapture From 73204a6421e127a7b9ccd8735ae5ff351030949b Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Thu, 5 Oct 2023 15:55:00 +0530 Subject: [PATCH 06/11] fix: add feature flag in script. --- test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.sh b/test.sh index dd6ea4417..8add4d998 100755 --- a/test.sh +++ b/test.sh @@ -6,4 +6,4 @@ export BITCOIN_RPC_USER="rpcuser" export BITCOIN_RPC_PASS="rpcpassword" export ELECTRS_URL="http://localhost:3002" sudo docker-compose up -d bitcoind bitcoin-cli electrs -cargo test --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind run-test-with-sudo -- --nocapture +cargo test --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind --features run-test-with-sudo -- --nocapture From 01ad9bdf7f91c625832d1b6af6a8a5f64285e272 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Thu, 5 Oct 2023 16:25:43 +0530 Subject: [PATCH 07/11] fix: fix scripts. --- ...parachain_node_with_sudo => run_parachain_node_with_sudo.sh} | 0 test.sh | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename scripts/{run_parachain_node_with_sudo => run_parachain_node_with_sudo.sh} (100%) diff --git a/scripts/run_parachain_node_with_sudo b/scripts/run_parachain_node_with_sudo.sh similarity index 100% rename from scripts/run_parachain_node_with_sudo rename to scripts/run_parachain_node_with_sudo.sh diff --git a/test.sh b/test.sh index 8add4d998..2bbe8b4b9 100755 --- a/test.sh +++ b/test.sh @@ -6,4 +6,4 @@ export BITCOIN_RPC_USER="rpcuser" export BITCOIN_RPC_PASS="rpcpassword" export ELECTRS_URL="http://localhost:3002" sudo docker-compose up -d bitcoind bitcoin-cli electrs -cargo test --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind --features run-test-with-sudo -- --nocapture +cargo test test_fund_rich_user_fails --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind --features run-test-with-sudo -- --nocapture From 0adcb0897cf120bb711834048ec4930ec48c1192 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Fri, 6 Oct 2023 17:06:20 +0530 Subject: [PATCH 08/11] fix: convert rpcs to apis. --- runtime/Cargo.toml | 1 + runtime/src/assets.rs | 2 +- runtime/src/integration/mod.rs | 14 +- runtime/src/rpc.rs | 189 +++++++++--------- runtime/src/types.rs | 2 + ...run_parachain_node_with_specific_target.sh | 6 + scripts/run_parachain_node_with_sudo.sh | 2 - test.sh | 2 +- 8 files changed, 120 insertions(+), 98 deletions(-) create mode 100644 scripts/run_parachain_node_with_specific_target.sh diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index bddd0d1b2..491ba5b64 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -13,6 +13,7 @@ testing-utils = [ parachain-metadata-interlay = [] parachain-metadata-kintsugi = [] run-test-with-sudo = [] +run-test-with-specific-node-target = [] [dependencies] serde = { version = "1.0.136", features = ["derive"] } diff --git a/runtime/src/assets.rs b/runtime/src/assets.rs index 548646a13..1b0fb13ea 100644 --- a/runtime/src/assets.rs +++ b/runtime/src/assets.rs @@ -1,6 +1,6 @@ use crate::{types::*, AssetMetadata, Error}; use lazy_static::lazy_static; -use primitives::{CurrencyId, CurrencyInfo}; //ToDo: V15 metadata (remove currencyId) +use primitives::{CurrencyId, CurrencyInfo}; use std::{ collections::BTreeMap, sync::{Mutex, MutexGuard}, diff --git a/runtime/src/integration/mod.rs b/runtime/src/integration/mod.rs index 6842deb6e..2db3ae06b 100644 --- a/runtime/src/integration/mod.rs +++ b/runtime/src/integration/mod.rs @@ -187,7 +187,19 @@ pub async fn start_chain() -> std::io::Result { Command::new("sh") .arg("../scripts/run_parachain_node_with_sudo.sh") .spawn() - } else { + } + else if cfg!(feature = "run-test-with-specific-node-target") { + let _stop_previous_instance = Command::new("sh") + .arg("-c") + .arg("lsof -ti :9944 | xargs kill") + .status() + .unwrap(); + + Command::new("sh") + .arg("../scripts/run_parachain_node_with_specific_target.sh") + .spawn() + } + else { let _stop_previous_instance = Command::new("docker") .arg("compose") .arg("rm") diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index a7546bfc8..a16449462 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -15,7 +15,7 @@ use module_bitcoin::{ parser::{parse_block_header, parse_transaction}, types::FullTransactionProof, }; -use primitives::{BalanceWrapper, UnsignedFixedPoint}; +use primitives::UnsignedFixedPoint; use serde_json::Value; use std::{convert::TryInto, future::Future, ops::Range, sync::Arc, time::Duration}; use subxt::{ @@ -272,7 +272,7 @@ impl InterBtcParachain { let tx_progress = self .api .tx() - .create_signed_with_nonce(&call, &self.signer, nonce as u64, Default::default())? + .create_signed_with_nonce(&call, &self.signer, nonce.into(), Default::default())? .submit_and_watch() .await?; @@ -988,16 +988,17 @@ impl ReplacePallet for InterBtcParachain { &self, account_id: AccountId, ) -> Result, Error> { - let head = Some(self.get_finalized_block_hash().await?); - let result: Vec = self - .api - .rpc() - .request("replace_getNewVaultReplaceRequests", rpc_params![account_id, head]) + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().replace_api().get_new_vault_replace_requests(account_id); + let result: Vec> = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) .await?; join_all( result .into_iter() - .map(|key| async move { self.get_replace_request(key).await.map(|value| (key, value)) }), + .map(|key| async move { self.get_replace_request(*key).await.map(|value| (*key, value)) }), ) .await .into_iter() @@ -1009,16 +1010,17 @@ impl ReplacePallet for InterBtcParachain { &self, account_id: AccountId, ) -> Result, Error> { - let head = Some(self.get_finalized_block_hash().await?); - let result: Vec = self - .api - .rpc() - .request("replace_getOldVaultReplaceRequests", rpc_params![account_id, head]) + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().replace_api().get_old_vault_replace_requests(account_id); + let result: Vec> = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) .await?; join_all( result .into_iter() - .map(|key| async move { self.get_replace_request(key).await.map(|value| (key, value)) }), + .map(|key| async move { self.get_replace_request(*key).await.map(|value| (*key, value)) }), ) .await .into_iter() @@ -1127,29 +1129,33 @@ impl OraclePallet for InterBtcParachain { /// Converts the amount in btc to dot, based on the current set exchange rate. async fn wrapped_to_collateral(&self, amount: u128, currency_id: CurrencyId) -> Result { - let head = Some(self.get_finalized_block_hash().await?); - let result: BalanceWrapper<_> = self - .api - .rpc() // ToDo: V15 Metadata (import from metadata) - .request( - "oracle_wrappedToCollateral", - rpc_params![BalanceWrapper { amount }, currency_id, head], - ) - .await?; + let head = self.get_finalized_block_hash().await?; + + // Create a runtime API payload that calls into + // `Core_version` function. + let runtime_api_call = metadata::apis().oracle_api().wrapped_to_collateral(BalanceWrapper { amount }, currency_id); + + let result: BalanceWrapper = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) + .await?.unwrap(); + Ok(result.amount) } /// Converts the amount in dot to btc, based on the current set exchange rate. async fn collateral_to_wrapped(&self, amount: u128, currency_id: CurrencyId) -> Result { - let head = Some(self.get_finalized_block_hash().await?); - let result: BalanceWrapper<_> = self - .api - .rpc() // ToDo: V15 Metadata (import from metadata) - .request( - "oracle_collateralToWrapped", - rpc_params![BalanceWrapper { amount }, currency_id, head], - ) - .await?; + let head = self.get_finalized_block_hash().await?; + // Create a runtime API payload that calls into + // `Core_version` function. + let runtime_api_call = metadata::apis().oracle_api().collateral_to_wrapped(BalanceWrapper { amount }, currency_id); + + let result: BalanceWrapper = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) + .await?.unwrap(); Ok(result.amount) } @@ -1240,16 +1246,17 @@ impl IssuePallet for InterBtcParachain { &self, account_id: AccountId, ) -> Result, Error> { - let head = Some(self.get_finalized_block_hash().await?); - let result: Vec = self - .api - .rpc() - .request("issue_getVaultIssueRequests", rpc_params![account_id, head]) + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().issue_api().get_vault_issue_requests(account_id); + let result: Vec> = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) .await?; join_all( result .into_iter() - .map(|key| async move { self.get_issue_request(key).await.map(|value| (key, value)) }), + .map(|key| async move { self.get_issue_request(*key).await.map(|value| (*key, value)) }), ) .await .into_iter() @@ -1346,16 +1353,17 @@ impl RedeemPallet for InterBtcParachain { &self, account_id: AccountId, ) -> Result, Error> { - let head = Some(self.get_finalized_block_hash().await?); - let result: Vec = self - .api - .rpc() - .request("redeem_getVaultRedeemRequests", rpc_params![account_id, head]) + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().redeem_api().get_vault_redeem_requests(account_id); + let result: Vec> = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) .await?; join_all( result .into_iter() - .map(|key| async move { self.get_redeem_request(key).await.map(|value| (key, value)) }), + .map(|key| async move { self.get_redeem_request(*key).await.map(|value| (*key, value)) }), ) .await .into_iter() @@ -1470,14 +1478,12 @@ impl BtcRelayPallet for InterBtcParachain { /// check that the block with the given block is included in the main chain of the relay, with sufficient /// confirmations async fn verify_block_header_inclusion(&self, block_hash: H256Le) -> Result<(), Error> { - let head = Some(self.get_finalized_block_hash().await?); - let result: Result<(), metadata::DispatchError> = self - .api - .rpc() - .request( - "btcRelay_verifyBlockHeaderInclusion", - rpc_params![Into::::into(block_hash), head], - ) + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().btc_relay_api().verify_block_header_inclusion(Into::::into(block_hash).into());// V15 + let result: Result<(), metadata::DispatchError> = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) .await?; result.map_err(|err| { @@ -1604,12 +1610,16 @@ impl VaultRegistryPallet for InterBtcParachain { } async fn get_vaults_by_account_id(&self, account_id: &AccountId) -> Result, Error> { - let head = Some(self.get_finalized_block_hash().await?); - let result = self - .api - .rpc() - .request("vaultRegistry_getVaultsByAccountId", rpc_params![account_id, head]) //ToDo: V15 metadata (something can be figured out using get_vaults_by_account_id) - .await?; + let head = self.get_finalized_block_hash().await?; + + let runtime_api_call = metadata::apis().vault_registry_api().get_vaults_by_account_id(account_id.clone()); + + let result = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) + .await?.unwrap(); + Ok(result) } @@ -1707,55 +1717,48 @@ impl VaultRegistryPallet for InterBtcParachain { amount_btc: u128, collateral_currency: CurrencyId, ) -> Result { - let head = Some(self.get_finalized_block_hash().await?); - let result: BalanceWrapper<_> = self - .api - .rpc() - .request( - "vaultRegistry_getRequiredCollateralForWrapped", - rpc_params![BalanceWrapper { amount: amount_btc }, collateral_currency, head], - ) - .await?; - + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().vault_registry_api().get_required_collateral_for_wrapped(BalanceWrapper {amount: amount_btc}, collateral_currency);// V15 + let result: BalanceWrapper = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) + .await?.unwrap(); Ok(result.amount) } /// Get the amount of collateral required for the given vault to be at the /// current SecureCollateralThreshold with the current exchange rate async fn get_required_collateral_for_vault(&self, vault_id: VaultId) -> Result { - let head = Some(self.get_finalized_block_hash().await?); - let result: BalanceWrapper<_> = self - .api - .rpc() - .request( - "vaultRegistry_getRequiredCollateralForVault", - rpc_params![vault_id, head], - ) - .await?; + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().vault_registry_api().get_required_collateral_for_vault(vault_id);// V15 + let result: BalanceWrapper = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) + .await?.unwrap(); Ok(result.amount) } async fn get_vault_total_collateral(&self, vault_id: VaultId) -> Result { - let head = Some(self.get_finalized_block_hash().await?); - let result: BalanceWrapper<_> = self - .api - .rpc() - .request("vaultRegistry_getVaultTotalCollateral", rpc_params![vault_id, head]) - .await?; - + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().vault_registry_api().get_vault_total_collateral(vault_id);// V15 + let result: BalanceWrapper = self.api + .runtime_api() + .at(head) + .call(runtime_api_call) + .await?.unwrap(); Ok(result.amount) } async fn get_collateralization_from_vault(&self, vault_id: VaultId, only_issued: bool) -> Result { - let head = Some(self.get_finalized_block_hash().await?); - let result: UnsignedFixedPoint = self - .api - .rpc() - .request( - "vaultRegistry_getCollateralizationFromVault", - rpc_params![vault_id, only_issued, head], - ) - .await?; + let head = self.get_finalized_block_hash().await?; + let runtime_api_call = metadata::apis().vault_registry_api().get_collateralization_from_vault(vault_id, only_issued);// V15 + let result: UnsignedFixedPoint = *self.api + .runtime_api() + .at(head) + .call(runtime_api_call) + .await?.unwrap(); Ok(result.into_inner()) } diff --git a/runtime/src/types.rs b/runtime/src/types.rs index edf0f4506..3534843d9 100644 --- a/runtime/src/types.rs +++ b/runtime/src/types.rs @@ -160,6 +160,8 @@ mod metadata_aliases { pub type VaultId = metadata::runtime_types::interbtc_primitives::VaultId; pub type VaultCurrencyPair = metadata::runtime_types::interbtc_primitives::VaultCurrencyPair; + pub type BalanceWrapper = metadata::runtime_types::interbtc_primitives::BalanceWrapper; + #[cfg(feature = "parachain-metadata-interlay")] pub type EncodedCall = metadata::runtime_types::interlay_runtime_parachain::RuntimeCall; #[cfg(feature = "parachain-metadata-kintsugi")] diff --git a/scripts/run_parachain_node_with_specific_target.sh b/scripts/run_parachain_node_with_specific_target.sh new file mode 100644 index 000000000..1a577d017 --- /dev/null +++ b/scripts/run_parachain_node_with_specific_target.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Paste your chain working here +cd /Users/nakul/Desktop/Interlay_Work/node/interbtc + +./target/release/interbtc-parachain --dev --instant-seal \ No newline at end of file diff --git a/scripts/run_parachain_node_with_sudo.sh b/scripts/run_parachain_node_with_sudo.sh index 5348e88ea..2c9817bb5 100644 --- a/scripts/run_parachain_node_with_sudo.sh +++ b/scripts/run_parachain_node_with_sudo.sh @@ -1,7 +1,5 @@ #!/bin/bash -# Change directory to the specified folder -cd .. # Start parachain instance sudo docker compose up -d interbtc \ No newline at end of file diff --git a/test.sh b/test.sh index 2bbe8b4b9..d7de8694d 100755 --- a/test.sh +++ b/test.sh @@ -6,4 +6,4 @@ export BITCOIN_RPC_USER="rpcuser" export BITCOIN_RPC_PASS="rpcpassword" export ELECTRS_URL="http://localhost:3002" sudo docker-compose up -d bitcoind bitcoin-cli electrs -cargo test test_fund_rich_user_fails --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind --features run-test-with-sudo -- --nocapture +cargo test test_fund_rich_user_fails --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind --features run-test-with-specific-node-target -- --nocapture From ae39b758e6c47e27b6287dd7153f2b72a30d8af6 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Sat, 7 Oct 2023 21:15:03 +0530 Subject: [PATCH 09/11] ci: fmt fixed. --- runtime/src/integration/mod.rs | 6 +- runtime/src/rpc.rs | 113 +++++++++++++-------------------- 2 files changed, 45 insertions(+), 74 deletions(-) diff --git a/runtime/src/integration/mod.rs b/runtime/src/integration/mod.rs index 2db3ae06b..7f8709589 100644 --- a/runtime/src/integration/mod.rs +++ b/runtime/src/integration/mod.rs @@ -187,8 +187,7 @@ pub async fn start_chain() -> std::io::Result { Command::new("sh") .arg("../scripts/run_parachain_node_with_sudo.sh") .spawn() - } - else if cfg!(feature = "run-test-with-specific-node-target") { + } else if cfg!(feature = "run-test-with-specific-node-target") { let _stop_previous_instance = Command::new("sh") .arg("-c") .arg("lsof -ti :9944 | xargs kill") @@ -198,8 +197,7 @@ pub async fn start_chain() -> std::io::Result { Command::new("sh") .arg("../scripts/run_parachain_node_with_specific_target.sh") .spawn() - } - else { + } else { let _stop_previous_instance = Command::new("docker") .arg("compose") .arg("rm") diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index a16449462..cfe31833f 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -989,12 +989,10 @@ impl ReplacePallet for InterBtcParachain { account_id: AccountId, ) -> Result, Error> { let head = self.get_finalized_block_hash().await?; - let runtime_api_call = metadata::apis().replace_api().get_new_vault_replace_requests(account_id); - let result: Vec> = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?; + let runtime_api_call = metadata::apis() + .replace_api() + .get_new_vault_replace_requests(account_id); + let result: Vec> = self.api.runtime_api().at(head).call(runtime_api_call).await?; join_all( result .into_iter() @@ -1011,12 +1009,10 @@ impl ReplacePallet for InterBtcParachain { account_id: AccountId, ) -> Result, Error> { let head = self.get_finalized_block_hash().await?; - let runtime_api_call = metadata::apis().replace_api().get_old_vault_replace_requests(account_id); - let result: Vec> = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?; + let runtime_api_call = metadata::apis() + .replace_api() + .get_old_vault_replace_requests(account_id); + let result: Vec> = self.api.runtime_api().at(head).call(runtime_api_call).await?; join_all( result .into_iter() @@ -1133,13 +1129,11 @@ impl OraclePallet for InterBtcParachain { // Create a runtime API payload that calls into // `Core_version` function. - let runtime_api_call = metadata::apis().oracle_api().wrapped_to_collateral(BalanceWrapper { amount }, currency_id); + let runtime_api_call = metadata::apis() + .oracle_api() + .wrapped_to_collateral(BalanceWrapper { amount }, currency_id); - let result: BalanceWrapper = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?.unwrap(); + let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); Ok(result.amount) } @@ -1149,13 +1143,11 @@ impl OraclePallet for InterBtcParachain { let head = self.get_finalized_block_hash().await?; // Create a runtime API payload that calls into // `Core_version` function. - let runtime_api_call = metadata::apis().oracle_api().collateral_to_wrapped(BalanceWrapper { amount }, currency_id); + let runtime_api_call = metadata::apis() + .oracle_api() + .collateral_to_wrapped(BalanceWrapper { amount }, currency_id); - let result: BalanceWrapper = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?.unwrap(); + let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); Ok(result.amount) } @@ -1248,11 +1240,7 @@ impl IssuePallet for InterBtcParachain { ) -> Result, Error> { let head = self.get_finalized_block_hash().await?; let runtime_api_call = metadata::apis().issue_api().get_vault_issue_requests(account_id); - let result: Vec> = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?; + let result: Vec> = self.api.runtime_api().at(head).call(runtime_api_call).await?; join_all( result .into_iter() @@ -1355,11 +1343,7 @@ impl RedeemPallet for InterBtcParachain { ) -> Result, Error> { let head = self.get_finalized_block_hash().await?; let runtime_api_call = metadata::apis().redeem_api().get_vault_redeem_requests(account_id); - let result: Vec> = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?; + let result: Vec> = self.api.runtime_api().at(head).call(runtime_api_call).await?; join_all( result .into_iter() @@ -1479,12 +1463,11 @@ impl BtcRelayPallet for InterBtcParachain { /// confirmations async fn verify_block_header_inclusion(&self, block_hash: H256Le) -> Result<(), Error> { let head = self.get_finalized_block_hash().await?; - let runtime_api_call = metadata::apis().btc_relay_api().verify_block_header_inclusion(Into::::into(block_hash).into());// V15 - let result: Result<(), metadata::DispatchError> = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?; + let runtime_api_call = metadata::apis() + .btc_relay_api() + .verify_block_header_inclusion(Into::::into(block_hash).into()); // V15 + let result: Result<(), metadata::DispatchError> = + self.api.runtime_api().at(head).call(runtime_api_call).await?; result.map_err(|err| { let dispatch_error = subxt::error::DispatchError::decode_from(err.encode(), self.api.metadata()) @@ -1612,13 +1595,11 @@ impl VaultRegistryPallet for InterBtcParachain { async fn get_vaults_by_account_id(&self, account_id: &AccountId) -> Result, Error> { let head = self.get_finalized_block_hash().await?; - let runtime_api_call = metadata::apis().vault_registry_api().get_vaults_by_account_id(account_id.clone()); + let runtime_api_call = metadata::apis() + .vault_registry_api() + .get_vaults_by_account_id(account_id.clone()); - let result = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?.unwrap(); + let result = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); Ok(result) } @@ -1718,12 +1699,10 @@ impl VaultRegistryPallet for InterBtcParachain { collateral_currency: CurrencyId, ) -> Result { let head = self.get_finalized_block_hash().await?; - let runtime_api_call = metadata::apis().vault_registry_api().get_required_collateral_for_wrapped(BalanceWrapper {amount: amount_btc}, collateral_currency);// V15 - let result: BalanceWrapper = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?.unwrap(); + let runtime_api_call = metadata::apis() + .vault_registry_api() + .get_required_collateral_for_wrapped(BalanceWrapper { amount: amount_btc }, collateral_currency); // V15 + let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); Ok(result.amount) } @@ -1731,34 +1710,28 @@ impl VaultRegistryPallet for InterBtcParachain { /// current SecureCollateralThreshold with the current exchange rate async fn get_required_collateral_for_vault(&self, vault_id: VaultId) -> Result { let head = self.get_finalized_block_hash().await?; - let runtime_api_call = metadata::apis().vault_registry_api().get_required_collateral_for_vault(vault_id);// V15 - let result: BalanceWrapper = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?.unwrap(); + let runtime_api_call = metadata::apis() + .vault_registry_api() + .get_required_collateral_for_vault(vault_id); // V15 + let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); Ok(result.amount) } async fn get_vault_total_collateral(&self, vault_id: VaultId) -> Result { let head = self.get_finalized_block_hash().await?; - let runtime_api_call = metadata::apis().vault_registry_api().get_vault_total_collateral(vault_id);// V15 - let result: BalanceWrapper = self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?.unwrap(); + let runtime_api_call = metadata::apis() + .vault_registry_api() + .get_vault_total_collateral(vault_id); // V15 + let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); Ok(result.amount) } async fn get_collateralization_from_vault(&self, vault_id: VaultId, only_issued: bool) -> Result { let head = self.get_finalized_block_hash().await?; - let runtime_api_call = metadata::apis().vault_registry_api().get_collateralization_from_vault(vault_id, only_issued);// V15 - let result: UnsignedFixedPoint = *self.api - .runtime_api() - .at(head) - .call(runtime_api_call) - .await?.unwrap(); + let runtime_api_call = metadata::apis() + .vault_registry_api() + .get_collateralization_from_vault(vault_id, only_issued); // V15 + let result: UnsignedFixedPoint = *self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); Ok(result.into_inner()) } From f50531afe5d9f2f0f6a367fa4b1aa3c5c2f7231a Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Mon, 9 Oct 2023 12:21:48 +0530 Subject: [PATCH 10/11] fix: add error handling. --- .github/workflows/cargo-test.yml | 6 +-- bitcoin/src/electrs/mod.rs | 2 +- bitcoin/src/light/mod.rs | 2 +- oracle/src/feeds/dia_fair_price.rs | 2 +- runtime/src/rpc.rs | 68 ++++++++++++++++++++++++------ runtime/src/utils/account_id.rs | 4 +- test.sh | 3 +- vault/src/cli.rs | 9 +--- vault/src/connection_manager.rs | 2 +- vault/src/system.rs | 8 ++-- 10 files changed, 71 insertions(+), 35 deletions(-) diff --git a/.github/workflows/cargo-test.yml b/.github/workflows/cargo-test.yml index 54a226f5d..4b8a8b414 100644 --- a/.github/workflows/cargo-test.yml +++ b/.github/workflows/cargo-test.yml @@ -42,9 +42,9 @@ jobs: run: | cargo fmt --all -- --check - run: rustup component add clippy -# - name: clippy -# run: | -# cargo clippy --release --workspace --features ${{ matrix.metadata }} + - name: clippy + run: | + cargo clippy --release --workspace --features ${{ matrix.metadata }} - name: check run: | cargo check --release --workspace --features ${{ matrix.metadata }} diff --git a/bitcoin/src/electrs/mod.rs b/bitcoin/src/electrs/mod.rs index 536d3defe..5e34ebfd0 100644 --- a/bitcoin/src/electrs/mod.rs +++ b/bitcoin/src/electrs/mod.rs @@ -266,7 +266,7 @@ impl ElectrsClient { ) -> Result, Error> { let script = ScriptBuilder::new() .push_opcode(opcodes::OP_RETURN) - .push_slice(&data.as_fixed_bytes()) + .push_slice(data.as_fixed_bytes()) .into_script(); let script_hash = { diff --git a/bitcoin/src/light/mod.rs b/bitcoin/src/light/mod.rs index 1c6ba6cf7..09e069ad0 100644 --- a/bitcoin/src/light/mod.rs +++ b/bitcoin/src/light/mod.rs @@ -84,7 +84,7 @@ impl BitcoinLight { } async fn get_coinbase_txid(&self, block_hash: &BlockHash) -> Result { - Ok(self.electrs.get_coinbase_txid(&block_hash).await?) + Ok(self.electrs.get_coinbase_txid(block_hash).await?) } } diff --git a/oracle/src/feeds/dia_fair_price.rs b/oracle/src/feeds/dia_fair_price.rs index cc4a10e4c..6fd843075 100644 --- a/oracle/src/feeds/dia_fair_price.rs +++ b/oracle/src/feeds/dia_fair_price.rs @@ -28,7 +28,7 @@ impl Default for DiaFairPriceApi { fn extract_response(value: Value, alias: &str) -> Option { value .as_array()? - .into_iter() + .iter() .find(|entry| matches!(entry.get("Token").and_then(|value| value.as_str()), Some(token) if token.to_uppercase() == alias))? .get("FairPrice")? .as_f64() diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index cfe31833f..bca8754a0 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -23,7 +23,7 @@ use subxt::{ client::OnlineClient, events::StaticEvent, metadata::DecodeWithMetadata, - rpc::{rpc_params, RpcClientT}, + rpc::RpcClientT, storage::{address::Yes, StorageAddress}, tx::TxPayload, utils::Static, @@ -1133,9 +1133,15 @@ impl OraclePallet for InterBtcParachain { .oracle_api() .wrapped_to_collateral(BalanceWrapper { amount }, currency_id); - let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); + let result: Result = + self.api.runtime_api().at(head).call(runtime_api_call).await?; - Ok(result.amount) + let balance: BalanceWrapper = result.map_err(|err| { + let dispatch_error = subxt::error::DispatchError::decode_from(err.encode(), self.api.metadata()) + .unwrap_or(subxt::error::DispatchError::Other); + Error::SubxtRuntimeError(SubxtError::Runtime(dispatch_error)) + })?; + Ok(balance.amount) } /// Converts the amount in dot to btc, based on the current set exchange rate. @@ -1147,9 +1153,16 @@ impl OraclePallet for InterBtcParachain { .oracle_api() .collateral_to_wrapped(BalanceWrapper { amount }, currency_id); - let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); + let result: Result = + self.api.runtime_api().at(head).call(runtime_api_call).await?; - Ok(result.amount) + let balance: BalanceWrapper = result.map_err(|err| { + let dispatch_error = subxt::error::DispatchError::decode_from(err.encode(), self.api.metadata()) + .unwrap_or(subxt::error::DispatchError::Other); + Error::SubxtRuntimeError(SubxtError::Runtime(dispatch_error)) + })?; + + Ok(balance.amount) } async fn has_updated(&self, key: &OracleKey) -> Result { @@ -1702,8 +1715,15 @@ impl VaultRegistryPallet for InterBtcParachain { let runtime_api_call = metadata::apis() .vault_registry_api() .get_required_collateral_for_wrapped(BalanceWrapper { amount: amount_btc }, collateral_currency); // V15 - let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); - Ok(result.amount) + let result: Result = + self.api.runtime_api().at(head).call(runtime_api_call).await?; + + let balance: BalanceWrapper = result.map_err(|err| { + let dispatch_error = subxt::error::DispatchError::decode_from(err.encode(), self.api.metadata()) + .unwrap_or(subxt::error::DispatchError::Other); + Error::SubxtRuntimeError(SubxtError::Runtime(dispatch_error)) + })?; + Ok(balance.amount) } /// Get the amount of collateral required for the given vault to be at the @@ -1713,8 +1733,15 @@ impl VaultRegistryPallet for InterBtcParachain { let runtime_api_call = metadata::apis() .vault_registry_api() .get_required_collateral_for_vault(vault_id); // V15 - let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); - Ok(result.amount) + let result: Result = + self.api.runtime_api().at(head).call(runtime_api_call).await?; + + let balance: BalanceWrapper = result.map_err(|err| { + let dispatch_error = subxt::error::DispatchError::decode_from(err.encode(), self.api.metadata()) + .unwrap_or(subxt::error::DispatchError::Other); + Error::SubxtRuntimeError(SubxtError::Runtime(dispatch_error)) + })?; + Ok(balance.amount) } async fn get_vault_total_collateral(&self, vault_id: VaultId) -> Result { @@ -1722,8 +1749,15 @@ impl VaultRegistryPallet for InterBtcParachain { let runtime_api_call = metadata::apis() .vault_registry_api() .get_vault_total_collateral(vault_id); // V15 - let result: BalanceWrapper = self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); - Ok(result.amount) + let result: Result = + self.api.runtime_api().at(head).call(runtime_api_call).await?; + + let balance: BalanceWrapper = result.map_err(|err| { + let dispatch_error = subxt::error::DispatchError::decode_from(err.encode(), self.api.metadata()) + .unwrap_or(subxt::error::DispatchError::Other); + Error::SubxtRuntimeError(SubxtError::Runtime(dispatch_error)) + })?; + Ok(balance.amount) } async fn get_collateralization_from_vault(&self, vault_id: VaultId, only_issued: bool) -> Result { @@ -1731,8 +1765,16 @@ impl VaultRegistryPallet for InterBtcParachain { let runtime_api_call = metadata::apis() .vault_registry_api() .get_collateralization_from_vault(vault_id, only_issued); // V15 - let result: UnsignedFixedPoint = *self.api.runtime_api().at(head).call(runtime_api_call).await?.unwrap(); - Ok(result.into_inner()) + let result: Result, metadata::DispatchError> = + self.api.runtime_api().at(head).call(runtime_api_call).await?; + + let balance: UnsignedFixedPoint = *result.map_err(|err| { + let dispatch_error = subxt::error::DispatchError::decode_from(err.encode(), self.api.metadata()) + .unwrap_or(subxt::error::DispatchError::Other); + Error::SubxtRuntimeError(SubxtError::Runtime(dispatch_error)) + })?; + + Ok(balance.into_inner()) } /// For testing purposes only. Sets the current vault client release. diff --git a/runtime/src/utils/account_id.rs b/runtime/src/utils/account_id.rs index 6ae04ea82..cd8dd5db1 100644 --- a/runtime/src/utils/account_id.rs +++ b/runtime/src/utils/account_id.rs @@ -30,7 +30,7 @@ impl AccountId32 { pub fn to_sp_core_account_id(&self) -> Sp_AccountId32 { let account_id = self.0.clone(); - (*account_id).clone().into() + (*account_id).clone() } } @@ -73,7 +73,7 @@ impl<'de> Deserialize<'de> for AccountId32 { impl From for AccountId32 { fn from(value: sp_runtime::AccountId32) -> Self { - AccountId32(Static(value.into())) + AccountId32(Static(value)) } } impl From for AccountId32 { diff --git a/test.sh b/test.sh index d7de8694d..fb7f9b9e9 100755 --- a/test.sh +++ b/test.sh @@ -6,4 +6,5 @@ export BITCOIN_RPC_USER="rpcuser" export BITCOIN_RPC_PASS="rpcpassword" export ELECTRS_URL="http://localhost:3002" sudo docker-compose up -d bitcoind bitcoin-cli electrs -cargo test test_fund_rich_user_fails --release --workspace --features parachain-metadata-kintsugi --features uses-bitcoind --features run-test-with-specific-node-target -- --nocapture +cargo test --release --features parachain-metadata-kintsugi --features run-test-with-specific-node-target -- --nocapture +lsof -ti :9944 | xargs kill \ No newline at end of file diff --git a/vault/src/cli.rs b/vault/src/cli.rs index f4340e701..87409b6e4 100644 --- a/vault/src/cli.rs +++ b/vault/src/cli.rs @@ -19,18 +19,13 @@ impl FromStr for RestartPolicy { } } -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Default)] pub enum LoggingFormat { + #[default] Full, Json, } -impl Default for LoggingFormat { - fn default() -> Self { - LoggingFormat::Full - } -} - impl FromStr for LoggingFormat { type Err = String; fn from_str(code: &str) -> Result { diff --git a/vault/src/connection_manager.rs b/vault/src/connection_manager.rs index 63eeffb66..cad7f293f 100644 --- a/vault/src/connection_manager.rs +++ b/vault/src/connection_manager.rs @@ -128,7 +128,7 @@ impl ConnectionManager { match service.start().await { Err(backoff::Error::Permanent(err)) => { tracing::warn!("Disconnected: {}", err); - return Err(err.into()); + return Err(err); } Err(backoff::Error::Transient(err)) => { tracing::warn!("Disconnected: {}", err.to_human()); diff --git a/vault/src/system.rs b/vault/src/system.rs index 24f79745a..6b781e2a7 100644 --- a/vault/src/system.rs +++ b/vault/src/system.rs @@ -568,9 +568,7 @@ impl VaultService { } async fn run_service(&self) -> Result<(), BackoffError> { - self.validate_bitcoin_network() - .await - .map_err(|err| BackoffError::Permanent(err))?; + self.validate_bitcoin_network().await.map_err(BackoffError::Permanent)?; let account_id = self.btc_parachain.get_account_id().clone(); let parsed_auto_register = self @@ -594,7 +592,7 @@ impl VaultService { .btc_parachain .get_bitcoin_confirmations() .await - .map_err(|err| Error::RuntimeError(err))?, + .map_err(Error::RuntimeError)?, }; tracing::info!("Using {} bitcoin confirmations", num_confirmations); @@ -669,7 +667,7 @@ impl VaultService { Arc::new(Box::new( OrderedVaultsDelay::new(self.btc_parachain.clone()) .await - .map_err(|err| Error::RuntimeError(err))?, + .map_err(Error::RuntimeError)?, )) }; From 4261d6a09bd9ba4013e56570befdd4287aaf0e1c Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Mon, 9 Oct 2023 12:27:53 +0530 Subject: [PATCH 11/11] fix: add missing import for test case. --- runtime/src/rpc.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index bca8754a0..07a2697da 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -18,6 +18,8 @@ use module_bitcoin::{ use primitives::UnsignedFixedPoint; use serde_json::Value; use std::{convert::TryInto, future::Future, ops::Range, sync::Arc, time::Duration}; +#[cfg(feature = "testing-utils")] +use subxt::rpc::rpc_params; use subxt::{ blocks::ExtrinsicEvents, client::OnlineClient,