From c2dfb25965c97aa8f4c223e8758f73b064fe5102 Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Mon, 16 Dec 2024 17:23:14 -0800 Subject: [PATCH] update kns-indexer wit api --- Cargo.lock | 2 + kinode/packages/kns-indexer/Cargo.lock | 11 +++ .../kns-indexer/api/kns-indexer:sys-v0.wit | 24 ++++- .../kns-indexer/kns-indexer/Cargo.toml | 1 + .../kns-indexer/kns-indexer/src/lib.rs | 87 ++++++++++++++---- kinode/packages/kns-indexer/pkg/scripts.json | 4 +- kinode/packages/kns-indexer/state/Cargo.toml | 1 + kinode/packages/kns-indexer/state/src/lib.rs | 68 +++++++------- kinode/wasi_snapshot_preview1.wasm | Bin 81041 -> 53604 bytes 9 files changed, 146 insertions(+), 52 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 49a1eaef..54389439 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4008,6 +4008,7 @@ dependencies = [ "anyhow", "hex", "kinode_process_lib 0.10.0", + "process_macros", "rmp-serde", "serde", "serde_json", @@ -6069,6 +6070,7 @@ name = "state" version = "0.1.0" dependencies = [ "kinode_process_lib 0.10.0", + "process_macros", "serde", "serde_json", "wit-bindgen 0.36.0", diff --git a/kinode/packages/kns-indexer/Cargo.lock b/kinode/packages/kns-indexer/Cargo.lock index eabe91d7..cd661f6c 100644 --- a/kinode/packages/kns-indexer/Cargo.lock +++ b/kinode/packages/kns-indexer/Cargo.lock @@ -1536,6 +1536,7 @@ dependencies = [ "anyhow", "hex", "kinode_process_lib", + "process_macros", "rmp-serde", "serde", "serde_json", @@ -1958,6 +1959,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "process_macros" +version = "0.1.0" +source = "git+https://github.com/kinode-dao/process_macros?rev=626e501#626e501d351e3365480ec6f770d474ed4ae339bf" +dependencies = [ + "quote", + "syn 2.0.90", +] + [[package]] name = "proptest" version = "1.5.0" @@ -2452,6 +2462,7 @@ name = "state" version = "0.1.0" dependencies = [ "kinode_process_lib", + "process_macros", "serde", "serde_json", "wit-bindgen", diff --git a/kinode/packages/kns-indexer/api/kns-indexer:sys-v0.wit b/kinode/packages/kns-indexer/api/kns-indexer:sys-v0.wit index dff6ba57..fd3fb52f 100644 --- a/kinode/packages/kns-indexer/api/kns-indexer:sys-v0.wit +++ b/kinode/packages/kns-indexer/api/kns-indexer:sys-v0.wit @@ -6,7 +6,7 @@ interface kns-indexer { /// human readable name, you would send a NodeInfo request. /// The block parameter specifies the recency of the data: the indexer will /// not respond until it has processed events up to the specified block. - variant indexer-requests { + variant indexer-request { /// return the human readable name for a namehash /// returns an Option namehash-to-name(namehash-to-name-request), @@ -19,6 +19,12 @@ interface kns-indexer { get-state(get-state-request), } + variant indexer-response { + name(option), + node-info(option), + get-state(wit-state), + } + record namehash-to-name-request { hash: string, block: u64, @@ -32,6 +38,22 @@ interface kns-indexer { record get-state-request { block: u64, } + + record wit-kns-update { + name: string, + public-key: string, + ips: list, + ports: list>, // map, but wit doesn't support maps + routers: list, + } + + record wit-state { + chain-id: u64, + contract-address: list, // 20-byte ETH address + names: list>, // map, but wit doesn't support maps + nodes: list>, // map, but wit doesn't support maps + last-block: u64, + } } world kns-indexer-sys-v0 { diff --git a/kinode/packages/kns-indexer/kns-indexer/Cargo.toml b/kinode/packages/kns-indexer/kns-indexer/Cargo.toml index a35fcbea..3a6add0d 100644 --- a/kinode/packages/kns-indexer/kns-indexer/Cargo.toml +++ b/kinode/packages/kns-indexer/kns-indexer/Cargo.toml @@ -12,6 +12,7 @@ alloy-primitives = "0.7.0" alloy-sol-types = "0.7.0" hex = "0.4.3" kinode_process_lib = { git = "https://github.com/kinode-dao/process_lib", rev = "9c441fe" } +process_macros = { git = "https://github.com/kinode-dao/process_macros", rev = "626e501" } rmp-serde = "1.1.2" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/kinode/packages/kns-indexer/kns-indexer/src/lib.rs b/kinode/packages/kns-indexer/kns-indexer/src/lib.rs index 1552fcb6..0fb863f1 100644 --- a/kinode/packages/kns-indexer/kns-indexer/src/lib.rs +++ b/kinode/packages/kns-indexer/kns-indexer/src/lib.rs @@ -1,5 +1,5 @@ use crate::kinode::process::kns_indexer::{ - GetStateRequest, IndexerRequests, NamehashToNameRequest, NodeInfoRequest, + GetStateRequest, IndexerRequest, IndexerResponse, NamehashToNameRequest, NodeInfoRequest, WitKnsUpdate, WitState, }; use alloy_primitives::keccak256; use alloy_sol_types::SolEvent; @@ -17,7 +17,7 @@ wit_bindgen::generate!({ path: "target/wit", world: "kns-indexer-sys-v0", generate_unused_types: true, - additional_derives: [serde::Deserialize, serde::Serialize], + additional_derives: [serde::Deserialize, serde::Serialize, process_macros::SerdeJsonInto], }); #[cfg(not(feature = "simulation-mode"))] @@ -52,14 +52,64 @@ struct State { last_block: u64, } -// note: not defined in wit api right now like IndexerRequests. -#[derive(Clone, Debug, Serialize, Deserialize)] -enum IndexerResponses { - Name(Option), - NodeInfo(Option), - GetState(State), +impl From for WitState { + fn from(s: State) -> Self { + let contract_address: [u8; 20] = s.contract_address.into(); + WitState { + chain_id: s.chain_id.clone(), + contract_address: contract_address.to_vec(), + names: s.names.iter().map(|(k, v)| (k.clone(), v.clone())).collect::>(), + nodes: s.nodes.iter().map(|(k, v)| (k.clone(), v.clone().into())).collect::>(), + last_block: s.last_block.clone(), + } + } } +impl From for State { + fn from(s: WitState) -> Self { + let contract_address: [u8; 20] = s.contract_address.try_into().expect("invalid contract addess: doesn't have 20 bytes"); + State { + chain_id: s.chain_id.clone(), + contract_address: contract_address.into(), + names: HashMap::from_iter(s.names), + nodes: HashMap::from_iter(s.nodes.iter().map(|(k, v)| (k.clone(), v.clone().into()))), + last_block: s.last_block.clone(), + } + } +} + +impl From for WitKnsUpdate { + fn from(k: net::KnsUpdate) -> Self { + WitKnsUpdate { + name: k.name.clone(), + public_key: k.public_key.clone(), + ips: k.ips.clone(), + ports: k.ports.iter().map(|(k, v)| (k.clone(), v.clone())).collect::>(), + routers: k.routers.clone(), + } + } +} + +impl From for net::KnsUpdate { + fn from(k: WitKnsUpdate) -> Self { + net::KnsUpdate { + name: k.name.clone(), + public_key: k.public_key.clone(), + ips: k.ips.clone(), + ports: BTreeMap::from_iter(k.ports), + routers: k.routers.clone(), + } + } +} + +//// note: not defined in wit api right now like IndexerRequest. +//#[derive(Clone, Debug, Serialize, Deserialize)] +//enum IndexerResponse { +// Name(Option), +// NodeInfo(Option), +// GetState(State), +//} + #[derive(Debug, thiserror::Error)] enum KnsError { #[error("Parent node for note not found")] @@ -136,7 +186,7 @@ fn main(our: Address, mut state: State) -> anyhow::Result<()> { // pending_requests temporarily on timeout. // very naughty. - // let mut pending_requests: BTreeMap> = BTreeMap::new(); + // let mut pending_requests: BTreeMap> = BTreeMap::new(); let mut pending_notes: BTreeMap> = BTreeMap::new(); // if block in state is < current_block, get logs from that part. @@ -192,25 +242,26 @@ fn main(our: Address, mut state: State) -> anyhow::Result<()> { let request = serde_json::from_slice(&body)?; match request { - IndexerRequests::NamehashToName(NamehashToNameRequest { ref hash, .. }) => { + IndexerRequest::NamehashToName(NamehashToNameRequest { ref hash, .. }) => { // TODO: make sure we've seen the whole block, while actually // sending a response to the proper place. Response::new() - .body(serde_json::to_vec(&IndexerResponses::Name( + .body(IndexerResponse::Name( state.names.get(hash).cloned(), - ))?) + )) .send()?; } - IndexerRequests::NodeInfo(NodeInfoRequest { ref name, .. }) => { + IndexerRequest::NodeInfo(NodeInfoRequest { ref name, .. }) => { Response::new() - .body(serde_json::to_vec(&IndexerResponses::NodeInfo( - state.nodes.get(name).cloned(), - ))?) + .body(IndexerResponse::NodeInfo( + state.nodes.get(name).map(|n| n.clone().into()), + )) .send()?; } - IndexerRequests::GetState(GetStateRequest { .. }) => { - Response::new().body(serde_json::to_vec(&state)?).send()?; + IndexerRequest::GetState(GetStateRequest { .. }) => { + //Response::new().body(serde_json::to_vec(&state)?).send()?; + Response::new().body(IndexerResponse::GetState(state.clone().into())).send()?; } } } diff --git a/kinode/packages/kns-indexer/pkg/scripts.json b/kinode/packages/kns-indexer/pkg/scripts.json index fdb51c4c..bee99cd1 100644 --- a/kinode/packages/kns-indexer/pkg/scripts.json +++ b/kinode/packages/kns-indexer/pkg/scripts.json @@ -1,5 +1,5 @@ { - "get_block.wasm": { + "get-block.wasm": { "root": false, "public": false, "request_networking": false, @@ -23,4 +23,4 @@ ], "wit_version": 1 } -} \ No newline at end of file +} diff --git a/kinode/packages/kns-indexer/state/Cargo.toml b/kinode/packages/kns-indexer/state/Cargo.toml index 2db0861d..012b3a2d 100644 --- a/kinode/packages/kns-indexer/state/Cargo.toml +++ b/kinode/packages/kns-indexer/state/Cargo.toml @@ -8,6 +8,7 @@ simulation-mode = [] [dependencies] kinode_process_lib = { git = "https://github.com/kinode-dao/process_lib", rev = "9c441fe" } +process_macros = { git = "https://github.com/kinode-dao/process_macros", rev = "626e501" } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" wit-bindgen = "0.36.0" diff --git a/kinode/packages/kns-indexer/state/src/lib.rs b/kinode/packages/kns-indexer/state/src/lib.rs index e286ddcb..3ef3a0d1 100644 --- a/kinode/packages/kns-indexer/state/src/lib.rs +++ b/kinode/packages/kns-indexer/state/src/lib.rs @@ -1,26 +1,29 @@ -use kinode_process_lib::{eth, net, script, Address, Message, Request}; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; +use crate::kinode::process::kns_indexer::{ + GetStateRequest, IndexerRequest, IndexerResponse, +}; +use kinode_process_lib::{eth, script, Address, Message, Request}; wit_bindgen::generate!({ path: "target/wit", - world: "process-v1", + world: "kns-indexer-sys-v0", + generate_unused_types: true, + additional_derives: [serde::Deserialize, serde::Serialize, process_macros::SerdeJsonInto], }); -/// From main kns-indexer process -#[derive(Clone, Debug, Serialize, Deserialize)] -struct State { - chain_id: u64, - // what contract this state pertains to - contract_address: eth::Address, - // namehash to human readable name - names: HashMap, - // human readable name to most recent on-chain routing information as json - // TODO: optional params knsUpdate? also include tba. - nodes: HashMap, - // last block we have an update from - last_block: u64, -} +///// From main kns-indexer process +//#[derive(Clone, Debug, Serialize, Deserialize)] +//struct State { +// chain_id: u64, +// // what contract this state pertains to +// contract_address: eth::Address, +// // namehash to human readable name +// names: HashMap, +// // human readable name to most recent on-chain routing information as json +// // TODO: optional params knsUpdate? also include tba. +// nodes: HashMap, +// // last block we have an update from +// last_block: u64, +//} script!(init); fn init(_our: Address, _args: String) -> String { @@ -28,31 +31,34 @@ fn init(_our: Address, _args: String) -> String { let Ok(Message::Response { body, .. }) = Request::to(("our", "kns-indexer", "kns-indexer", "sys")) - .body( - serde_json::json!({ - "GetState": { - "block": 0 - } - }) - .to_string() - .as_bytes() - .to_vec(), - ) + .body(IndexerRequest::GetState(GetStateRequest { block: 0 })) + // serde_json::json!({ + // "GetState": { + // "block": 0 + // } + // }) + // .to_string() + // .as_bytes() + // .to_vec(), + //) .send_and_await_response(10) .unwrap() else { return "failed to get state from kns-indexer".to_string(); }; - let Ok(state) = serde_json::from_slice::(&body) else { + //let Ok(state) = serde_json::from_slice::(&body) else { + let Ok(IndexerResponse::GetState(state)) = body.try_into() else { return "failed to deserialize state".to_string(); }; // can change later, but for now, just print every known node name - let mut names = state.names.values().map(AsRef::as_ref).collect::>(); + let mut names = state.names.iter().map(|(_k, v)| v.clone()).collect::>(); names.sort(); + let contract_address: [u8; 20] = state.contract_address.try_into().expect("invalid contract addess: doesn't have 20 bytes"); + let contract_address: eth::Address = contract_address.into(); format!( "\nrunning on chain id {}\nCA: {}\n{} known nodes as of block {}\n {}", state.chain_id, - state.contract_address, + contract_address, names.len(), state.last_block, names.join("\n ") diff --git a/kinode/wasi_snapshot_preview1.wasm b/kinode/wasi_snapshot_preview1.wasm index e2a3f4dc95e2a2ed70e37fde7a912d12a0b85c00..9f6a04730c24e9c59d378a6b7ed096b4a5c23773 100644 GIT binary patch literal 53604 zcmdVD3!EHxeJ5D|s_NJD^h`@5$+9Ke)omF@*fZ*P_s9^`6WWguf&m8{9y{(wwWjCQ z{i-Uh+Fci#rir)c*WD$~Yj zT+;Z*>CdwjmLi*-?a+(qCpB5!k}IB}MQBkuj& zIZgliRVNI4<5Y0nUT=5K=$dxb>1wxiyuQ{thRdx^dt=?+=$%N-XXZ1plXh>e+Bvz! zOWm&JR$Htnuj;+3yjw|mR&#%mgOx87-O_S&8K zYU5O^Yis(re%HT>d)w;N?YTy$z4@9(t7F&E`3%6*!@u2L$F8nx+PE3nKn*Q8uGf{r zK=yDn9T%yzod>e*Uozodm$`Hn#v02Z^IQd8E_Y=r^91yD~@j zNV@A9=usoXv^Gx8sjlMyvcFHnb9SfG?#$KO4O=s2++E3win8|&?MdDm54VK7J|8o1 zQF9)3k0-6H*MB58NZ9npQk8yHM*OJ+ySxT?{{(CxYwIyuCdjrN|ic&@oszi-C7%<#EqUdz1I~Mo9(qVB`dBN zVm98X*4AuI8`0S0T`hi44%4Y_G}`OO)Q=i0PDP|H%+=2Hpc?j!hKq-YLAcbH?fUAR zlGi&52S;lU_Edd#K;97-d4qjC>Dye}>Mm=>^wQFLwY9Od-fnEI*-J~4^=hrP1VOL{ zF|F;rM((;VhL3G_Y;ugFNTh+}%8M4ZuBoll@apy&kiiN@6NHhvpv{bi&iqBzD>pj_ z@I&cy9sdRdZu?|8?$ad;_Qz_(!-}LWi5}*`4*)Mse)9WqUXqrOD@Pxpy>OM0(Bkqjsq-a8Qx@M<2Rilyp{kYvWDX^|- z`#jM2AQExNpta#rfkPPT%2l{mhaCux04rX}JE__4%pji6P?iz?0Px#cRke4Kt5Md}0HsUaf9 zt6w!WW5l(o_`bdSHRHem?ZANpR~$5^uAG`WFl9^~xblEuTy^l!f&KAAMtEwkama`q z&<;->*lR@gUwzHBRwBGVarOSanl?3a07nOA3{9KCfBW&jq!|#KLWtm1f%BrQMScHh zJmo*3F9dUYv8PSci&Qmxu(Hniu@xEJAxb#3SB3ufT2*u5q99<35vyLm=Rx7PY* zyVLW8+$~{vgWVTQh~cc+;G*Rach2gZ$$$FlS4gmZ*;+B!D~YiDb{W_PqrHtO2;s@9Q5G*`Pk>eJuX0vwzYq= z+FM>ymg$nKY0hZ(?2*?8wt41?!E5~;y*486kejq$RL7(s?QBe5cR5YFSIwp@JKt>Q zqfR@y+Y4e+o_3W1rrjsv@?05J67vemxr@c``Yk5=PY0IgM5pE4YWgPiiY_RhChH z<{9Je>1g@W`{Vzb!)ej-XS~CN5a+S%U%8LV)?!-xE$S%#cK${!E&5I&ba%IJORXmL z{%*POgIJU(pD*YK@nfwd46b!n|3Ip&_HK#zTR9YVq?g~8iocsDSGi4Yj_H^KJr82t zCXNg)pADVmW8J@gApRw1-M{G_K4R#`d2!B%1*5+%0!#sIR(~MH1s)R@Qc1IXLEIJ- zmR3&PBml4Yf8wxZkr0yrAQt^#Dj861UmPWPZr0|Og4qDnGh23YhqQP6Af5uoTYvt?X?^3+( zh{6J;AZ~y3DeWfl|Hwmh{{AyYH2R-ST^|67xt*DbP5$R#G(c(RiCCNsh}ghU2-YAN zShAc6QHtYzE9k==1JFF5Tsf-CB?C}$<&_xmZoCNGu9wBlu}Jy9>7L9SDLyRfKfVVus2DH&@X@e{oDNf6@hv zBeV^m0Ic8w#^C0z#kFsI>(@RUENF))XTN>lZ~WK4ec#)j1}tW9{&!E^_sDy`^fij@ zC{Dle6-e=qJp5^jX=k*n9Z<>9oNIkC{N%-!@PmCf$%(%4l@EUA+mCC)OUV0XA$Ci*%tR{fNp{_^h<_BT+oeExO!|ItSu z`CV-JI-LHO@4V~%um8ZqpT_ASoc{G!-gW<%ANtx8q|zDQe(DP!e)rQ4e?qNal%p$< za7r6%@n4oEj_~L!dT)OfP)NG7JU#w61wcWc1pAt_4#2#ir}%eynM_T3gB?hTAn=Ft zFwW1*^Y}a1O7iinKH0zg%knY?bM;X4A0duh9SqubrdPD>$WH?V-It#@8<3wy`Qb0Y z6x#;`!nB)&s(=Q8w!!(wQUH3~LJu=R83RQC9w?i)KzQnlk`MJbR&+tG-h>vSVJe$a z7-N$rG>CD6eaNU#r`W4xFUsZsL{M2fuHhOO7u_^8O91y^y`&k_qA+zme3!MI?Ar1l z9&m(|u7ng;<1wO6Mm&rQkAC}I?++CqaCDdObQ=jB^@9AA0MrNdt;wxojxM;suWf|7;BKJ@vIK@B_*&z<~k+90Gb#6ajEZz?}gu zn*xwZ`voYb zuK(&Pq@PFuRsMm;QtuQnymi+b>8lEOB8H0uOPkU)!4Lx!O#GJ=L0kG!Bfh9DUU=t! ze9BnV;*Ur~Jr4o~H^PhBOQ{WDcF{D->j%%$N_%BYOzP42{Tv|?AhZH7yNOf3Ot%b# z9EMiq`bgmf^oRP-Tb038Js?*FAvbzeK$*8H9Kn*a47n<}2+pcrCs!3@Acf8VRs}=a zXIYrhcl+czbh_iBln>Kq<9}!!cp)MvPjaNB-#@`dhp5uD0`Y&xc69lq<(&v(1bP$6 z5Q7z#2KUbyHv}C>Cy+Milwn9*Xmi?8Mp#6&{5b%VAqQMKTsCMapdq3$w3tDfQ!DY; zb0!Wyr%lnX;qGJ?T$qmkd)_5Jf)?FO6+)sD;hGb$tH*_q{-+0s-tI+(%J23Le_QW| zt>UW*Q4S__1<%XzFEH|qxO?h)?TF9~GY|}gBNNfd*wl1<&)%7R`w`#2@~T6JW%NFI z9n4*rbT^49{7li7K`>zohD!*4Vf;t|$-}U&r0e?5*ZytXs{AKZ1z+Vx6CHx)7-%a>?F8-c}zvtucNm@;R$bUY^f4<0n z{#Z*O5~oN1z35A25V^y61ertEB+_@d$+S{tCK0?CByFg-aik62 z0%e!O<>M}OA0nYjU)3R0a9y8Hv5}E(`V+c8=mIe(l=0x(myDiz@dTU=?27?PM2K9L zg*iN{AC~*V!NFv}+ZPnG+!3K9t$6=h0R{|=h=--gxbRT}p%R2CsCsy41s`K@CAerk zm<%pHga1vxgy)aN-#{KE8NtEz1*-PJAe7-^tRimtVpS9LQV}seMA_t6Y!TqLbA}oda&Fvaet=vaIpmZN&;B0_^s5=pGaS2E|Mf<2Nfw(^TKrQ$nLA#x- zC%19#)t|7$*93@~PFolMahyTKD8cBpmxN{ov4`o9VeTb8k4G=M?^sk=L65+)Q z|NXC?mq5Hx2DcW^FaFar=b$&l-B>CJ`d^*DA7}dATxux(RSpf(#g$XI$abg7;k!G$ z&@0DrfbGn7%7^ZTqDG8Io*z8~$!V(Hac3cK&E^hVZv_)!S{Vq3BCA5R9>x!XkBst} zu%aC$Pub*36TQzKmLR>m}dVf^C~f}qSW0*hrC zKBnKU)13$A<4^FuOg;EI{R>|wXbtQcEaP+n6~{jzJ3&_aXZmelC&-jGi(}$VFGeMA+@1N0Y2mUdltH2wbB23P$xOj3>aSSnnd}(0aKpo z<>$oh4uK?ZLnYu~eMuHnDhj+9?(-sjtiDuo!hzE2k|tK)*aEW6+m35Tv3DW&K8w8$ ziCuD4U+CCMi18gY?n=b?b7x|TKes2Q`EzRm5hiDfHZsD3D7%kWz4GIH3-=H&ykwR)TKuNk~To06i6~br{ zFt!yb8YTSfEgH;C%@nb6VNDke3qSFqK_3Q@K+5htQm7*Ir93lHC^T&8{qjK>v(O7I7uZ9HnRhCA0c+LBEqnzgOTIR+9l`Feyx6kFe)%!_Wc;MsKBj&q^X_oFGq`fG#yp zg13;e(8~frA#4m)CfJ`2+(8uk|8od|gx+_oaW>#TaAc?*{J_|TO$>?KcSjM$qMI$l zOyOk2WfqriB0kkQWkfUq)VVrS0w73g!W9X5xTCBKfcCP&%=us?Or`6Ly0W4`<{e~& zDfBp)ggMvvLk>#?ARS1d_}wS_Fyk|cpc*b5hL*%Kc^y9osaREhLMx;9g?ny}1&CRu zDuC`6D$fTV2VI5;6;CCGRl-w5`U1oe#IU1jw4eG3sMJqfF4D{X1ehqe5!amT&#V;~ z$o^P3_h)|&;@qG8afWjfKyojz&wGq_Co+GS5EP@UFg?S*=qhB2vhPDu9#B$*Jo_HkZj=Q#$?oz84`{R>K(OBQPTI1J3xi!x@-+HW?s{aC9VL zLRhdcf$SW@k;;UIu}E$%8BrPENc=7APSXvgd1@6w067fj_hAOyucG8aoeAS7=NVZH zP~-%dB?SV8Lb_NGtXn0=tiVnPD8J6DVfmom_YGke}vnzaOCu$DUWU_=3sF9||vp_Mm80k}L25Tk$R*7kde+w1|rk;hZ z0=f(Ubx>g6akxX?2lcYWk%E30_d!B|@?rQDpmnD@Laq=k_DvbOCJ=xC?_elIVpU89 zN-8dEA*9BEj*0&Vj*ntK*(OA$V)&`wW==~u5?RNpFrE%lCC&0|WF(oIY}V@og>K3s zI(8kD=>t++S5my*H^gBRItH?((>n!G6LRFD`0pyH0I0A?QT_q2O2DG*SDCfEJ~?QG zyOK4!G%$zhu)7*u3M_La{!woNb51ikJgYb~+9%o~LSuP-5>lLYQ}_@VmO{oGzuK1x z*n@D!C)2~Ue!Dj?g64ZnJh$}eC*@Pm| zQU8wMtAJyTC4)QgRlu{yT)v`G1`ZOTUGbHyA?)*&OyaR_6!JTq40|RR=yx!P6qNkL zq#wl_@_#GwrwKI+LGd`&ivIgxDIr`*8%&V8ByE^5`-HT?6a=iWlBvPR6BD2mr05Wl zl^F*_QxOZZBBZAYIZga+Y6e(mF?|v&?Z5Xc-aQyt3i}5g?C(32oOle2nLt9~F{EO^ za-NuVYX9PL0#DM)`n?-*&9kk{0ZD72{BO{qYK^fr21W85k5-jyH1NkIHM8?Yke1X-7qsBof`Mzud7L;`Q z-z2?IGLf@DWUx2n+9zcS+qH3USuuGa{%-c5bOcG$T0kioPN73_ioMI~d*AG!vPZpQ zax|l`Qxex%AN$IZ`MyCJ{bm?o(9cb}w&T}fI|h_++Ac912AA1xFXe|bpW?(~Rdx;~ zHk$(ul8VYTnrJ=Bx?D{Q)kzWW^{10_D<5 z{GAeQ&|W3@SpinqLCbO_&!x#4uwtzC!!lXhCp*Ikx;-W!M%f+zKu~>8jWMg2lG8Fd z#r}6zKnKR+`LjvmcG$NN5>$N%4sm>_tZjo^2Gkws9inIwO^=BaiC7fd5nU&L1jiv* z{`@}~D+rTva!j4rW9f;#J1nMx?p#Q6hM^6b78I>}@DJ;L5&xB!UDA=41^8Pr+!N|vVjs@MYGSWMWvqNb zdI@OqA~^ZhKGdit5YOak6j~6w@<_@Gp!@_{ODHQsG6hUhLmbCT0f)R4 zF!YBknun=|K338A3iHMi0Yyo8!SdHpe~;bFx_b?lzoV|C+$(WxDdxBkT0z~ z=`~>7IqkWQi4y~n%M_JD6V8Ix1anA$+CdNjEGq0!rKhn)wq~0sqRvy2f@O&zDEV#> z2}zU05?1>{iO|k*rb#E|4TwNpRop%=>2yH)?oE&hM>IJM;^Z{OoUN$!1(gH}y6N+Q zMeRH+#v(B5Q{21gAdB*1_K&OngqALsr8Ry0sq-(g0CnW$x3w(vm;mTzE>tsU!27*xoG!SuS z8Vf)k7#L?5n9R0|f#)>gU|e7zP?*K(ZxZfefZIVyBNYcG=Mo|5rC&@j7obC&gcL!L zN`YxL_0cMCIU>x1|3fj#| zGKAzyL~wXV`6CSDdCh?4kn*P=hB(FVb4_Jb9V$W$@F%RQn3CW)JSe1}ASU>zmI2Qe zWN4HxAkKz=UU*1a?9c%b%4gykM72(SiNkL| zDW8A=Pb0^D(lEiK`=lHW&p(9t5Ft_)s8)PUWVAu)< za#ki)7al*ues2={@B?Cx1ArIXi2r28z#J>Fh3QFO%*_5}xJRB&5>Iy08s#`4>Pi^Z^#nzd|Zk z>EmIlgDWaC4nX0Nt2>zyhalxJIJNx4K+tm-gNa&%5#o+=3GPgE@QWzor6yz?G%W3) zFzq16Uf^Wm$6Rj$?c;8H648$BUF2Cv9$REql|u#q1}MkuCrm-GvhwG?!Gxwz62>P( z80>N*Z;)q0m=wMYjr5d$JQZ;7QF4i-MDG#uRhA0323 z=#Ij|2|{_$g@PTD6MTNijXwRoLq9V91UrNACjksmlEAW)Atl+GaU}}@DY&x#m3>si zN=6HKzbv-hglP`;XMjaO5I`kRGg2k+Y_#qfm|jkMOcu00Xg$O8a1epbP0m|D5EU6 zB8_E#lm%i?U9~7ccMP?BOoACUV;HUy?MhlD^1To;a8AP+$_zrEM-eYZLRUe>Q@D3| zvmZdA1;NKKxNGVat{Op79qS2FF-mRkIZlr7gmWyTkyPZ&2za3z9uI|Lz-o_r;hU!i zUekcsRG=?JEy4Nl5TODY3?bN8(yqN=VV4&yINCus_AixuGNi~cG^GP4WcMJzZy{EL zNHmk|Kq((x$EXaI(>Q<+;zZ_%c(N{A$tBB`%kVS_01>?3Qk>voP$CtUCVec76P8?0 znpp%moDexp)kDcJDxvr&hNL8{3fhl<3>0A4e=e~o2U4_#YyWHin&__@(3OgpTJJG; z*+a`UqiTAzc|ARK6Voq>`w^<)(l{0eVU%4zu|rEq_-;!{A-)NRVr-I@;C*`w8oEzE z*^S*t|6x#D7=2tj+5+6|Q7#by!+`>9e;*WZHUI@C|9#QI5NR(5TMj>|eqsSp6kyPODv0D~cwjI923Up;7;qhi zTarm`a1}&2c}#``A90EBL;@7f$e>=<7(tuU9u)MmWv$}`&o^Oe;q-z?0O2S~OTgD> zjU!^2vJi5LzxSZJ5kGe^Y{y#1J^Z;fu~*Ipz2VNTTw-8W&I#8SWo%e58lOnaSpL$- zeT!ORKN?O_QUu`SS=*jDLx~|uA+5*cYih)36BsSxjfPe*an)!s zL=rg~VuGd>WuVry_OS}mwDz+K(qzG-g&&kg;%x}33eseSBwiTdRzZfOfSc169OIhq z=MGxct%5{E#s82OK-#Z@MDT^>?td`4fGyPLWm2+_n!^LsjI#l14zhqPqB=O?IsnBf zU_&Ye#bhRsJR!BTTaY&47NnUdNQ14P4q}x7#_A#^%>Ia4j~fb8mI84C~@d}kXQO;R9LUWYD}A{pnSw9aZsM*N*st_oJpzUa+=9H zHKgHKrxs!L8sd(JtN^cqhrFvXUJX%9y;pK2Dp8#3H5|Fp2|i2MlJJ(+3KbgsI&8xe z!LIA_uk?QP8nmttdyWhmk2ODB5I`7!%LFBH5^TU2!Niad^2uVrQHdZp$q+~pVi@GE zddZg~B_}+1PWa%7e4`6b>1ca$!$Nyz6M!iK>V1wpSD@l7C`#lkK8T^x%?~j@q)<~f z=Dk>dZ1w@jTvDV@{|*G@;ypJWX9IK}fy}igJmQim*TanW@IOf+$yi^d#dZcGKnGZR z0EsYCeCH5c%7*%Ud>44q%|p#Bcm!2Itvk0HO19KL1?{)dm-V+*$qh=t_w%}NdXbqFfEZg z7=OZ&j%&B8d$-~ON*7+Brb4X;20;r{r5@K_f<7>TX7K|%cS6NLxS~nKv*dbt62{@I z^JX*)wT^cx<%gqJV%7-~3E;qWQ$9L|FV}<8lH>$qHpoP%m<^-^xA1C5fI=Gkw@p$a zIH2qNqk^FL{xxp!>t3uWI+mEeH&{y=?9-A@j#B9Kg9$hrpeKmG6_l>H!U~0w1PcT! z55h^wlow@5&=RZ$kCtTZj;2Tw1L5^(7He8jk49r3B|MDcE9M7^XjiJD19*TW2$&Oy zaQweYT&a*e))H4ydA!(-D?6x4lS6KTAcTQr#oVP1%z{$PJ1{=X|6_Q^Ot5^#3as>U zyw@p*dsYbV!@|T#Y=c{Y5gu~hjKzo#LXMOZVcNAp4CR=2xPl(9g9n0Lqs6L`7! z@K`+e!|*}3@|2MBsw0A`@-*15jtCA_M+AqeBZ5QK5pp=UIzkQ?m&oW>qx~eTVXGhX zhw^cvpia=A?h)z|;{Q@f9@3ptgCv6&NqU$dE%*kgK8EEZJ$14ouEE(luHl*@G0B7s z0VsC*3HLsJ&5^V}7VqQJgX-QVU>s$25#cf{S&)?jV!%d@8I**cr{Z=Ep%JbZ+WXbL zWGG}IR4;#1IY8fM3SZxJQOsg-3wh$P5**ffmg7Ayh^HaQpv@vwgTr-uC4aAGqLdf4gPxZC@GoJ4HZ$vVHbPf1F(N4umJA z&+fedg+9A0t_*5CPdiGpO{d^_QhTwi1Jlca9v)BT^B>TfK)DVJ6y`Xr4$spcU^_Iy zxlgMT$pKbM>%C-n70wMw1g4JE%M6zyb)J|sPV|#EuC8`}t!R0Zx^Ie4AA z0($Fic;-<&l>#bctPIp)@}WV;fS`1}vEKp@<>A6?a*77&i(wv3QRO*romAG9Sw>zB zSN+wBCom22Md9b?)fLq4Nsif<-{^j&2X}uScYlj#J@Re zV(d7I)O}(aP>;ztBX{7uCx&lWw5DC}5tVI-JlxBT+=}NVf>ioF%-WehM3ZH{QYW?tRqnC;;KyC z_<(bRk*D%~7c5xB)OPMMj*f}NA+W+ut;ARkdUged?Ih?Y5im|*r?7B{@_y#>gB+bP zy0dsJpc0G7Jg~PK5GrKtB;>H7M3im7KV|-yT~IuT0xp=+G=R&uuOufbu^`qKEq`;` zP5JxYBsR*FB^>yY#!lZa1&opFoCulDjAh@foeAF zGfE&%@vZ?yCdId8fhbE(z)PehJ~pf`f~N56cycZyy1!NwHcB!&WlRXT2<0#A@t$Ru zd0m(PVq8EtIjI=V#L{B}+QCWW#1@5`%uyC7DkTBQw8y|u@ohs%7Gx1BCfbLXh#E-e z$}vRwlm3N~we_Lo?t^&T4hdI8DL~z~C-<_-$V$%K3zD9;_P+cOLVbI!8N>nUWWg{y z;TY1)Q(E&l>(VO6dzaU3)=pQzWrkReT=QLy=U()xoBxIA8_y|UfjwfR@z>o4ZYY0u zkN3tq`D*A12^nvhqWl|p#pgUO{>}G4$hR9l2f6r1KmWn^fBSFW$ah;Nar!q;{o6Nx z?xTMp-^hx0aWDSh$q)R;*T40vPy8)jcDNVk-}xHe4*h{g{v}^K>J0xZ=UtcbHG9rA zZ_yK)rNw_o%9=^7{GUAZoA9-wU(^R)wCc+tyIkW-v}$6v&#pmAP?{jTO=+UC1qk#@ zF(RKgLhXnON{Gkdr#>bn3C%Cii=hOH;CpyLzdEQ$IT1gZ?`wO@UYA}0-Cy79$`qVD z?mzjA|KzjY$uEG7@XWh4GhNlHKuUaoZEf*JoX!IRL+rn&^1H z!WNw%+2q54I>)4#qpSnbQZr+wqdJ!KF-|HQIPo~R63pA+hp(ofVuiS*!cj*u>-amV zg8npDb^(I(J6tMSeO-<;tA7kPzrve<(v!RvI<7sHvW)USX$+USYjfUr&$Z&7iI>;| zYJB<+yI_z6Hw;MPBI}aNlm()$OB9vzN_L8dwd>FsMiQ?bQHQuDUvsFg zsl(qEkYWmjzefCrP@Cftnj z*}IdvtR5iTZ$&568{iq9`+n(x@LEDgceEthX^FwnFjRLFQ$c%TBApX~V=(Pbb7|4v z*G2e}mTd|7Bs-7}qN1`z^`3{=;Z20N2~eyofdKrmP~=xol8rPP_aqP`HG0Wl`5@Me zW3-;2T`2&x;3}`0GF~gEWME%ECBsDYNO~P^UOvMDH>nQ;MD7sOR}hONgoG38Nk_Lv z+mM79Vi$ZUeCu_B(qw z9XK3-HiD}vqC&{9AD`9@W9jOx##Y!_L0Db~;>|v-pteB*4nuGjJca@WbASxo+zQ6W zDLhC8WQmdqdIkh?SOOWw5cM7>RGt80*hWu58i9#Z4y4(KF$c_z9WdplP>AOk|!_|2uVN#2tX2w%pD*g zzd%aEsRxAM0HtjQ0`~7x8X+-)(ue>_X>xQ>>sU&2&_&t@og+U*N+W}U)m;X~eh2By zw@(Rf_D-TE1|?PiS#Xuag-)w{ILshn2q3^AnEp__-X|C>It6Hx#NzLvOpI=b;5l3{ z)FT)7LyiddFnA6zazhqaS~y090q&vPGI9=YYlU7to1CB?0TEddyvxlB-a*}ooTc^P z180#E3ElDdSuXG#h0wXPc%m&F)jod5&Gk0E619P^+s^UxxyMhpdULhbM&qQtaXdAj z&CREdyI(j{pHVxmzADu{Zg21-r48$JyMyof;ET;MO=#Mc2RK51P}vG!K{d6|(=Qce zU6gMTixZ-)ce`R!6DKrHnA-67hlMUSyS#_DjSYUrSeRl}-U*mmw6)RdwW|0u@#%&L z8sol&9MHs~AyzQi2@&KsowmAItf|SbtO;RgqdvhF5Mt3ZwSfG>sv*QOdz)Q*ttqsw zsd?Y3l=tU*?YV|s+d9e5?qR=p(Wo;hK1wTFDDVYzY~R$v?xz@s#yxLp2i(t`xlQEv zRnGt>?(AIo_Ez$Xhr-|o#x~EOt=`(e;;~1LL->sN<|Dp@VQ9MAA&v}hSz>V(HCv*; zeNE#zhVz=Bqi6|nx4wU^+U?EZLsRPem2=H1KEc%hT7&YNUkwe*omAi4RbRI?xU5P4 z$2JYLj^SH){SWREE+MgbuUHWiA}CJi67UgY&E7bzMNMtzuk@mLQS-iw=$~ZX`z9nm zgoOgL6>)mo(6OC{?yj~r#neTIR?S4qaIqE9rcKTJ?%lw8ypMQ_xL6Lm9rkEg!^OX$ zDfWV%`^(=GuD3UO{L=S?He+huhy4bCIxjyqCia=yC4Plc?CY;?=h5W{E5&|O^S(?t zIJ*abr(u6gfaqdhQxykXBG{vd0PFD3JUEZ~faPoLPTTH^D@-l#a@1fmZ#n+<{V#8d zE5r#yQr#Y-+o?OG2i$nyw;dd=ySdh?+v1?9U4N1J+?Iy(7180(RtNBelx7Yvh*%7e z|3brj1BnJ6grw9>t^d_Yf!9ut{4ix8%#jB<%^5nfjRXB-`@UDn!3Vy63NSdbZQ_!~ zf>hi#7OpvCMa3e7!qniGLGcloi+ouWC4%fX?e$YgV#g656;(H#8DoG=cxXbg2wdpo z`=J|#g3hY$sHqVjK^5l6#rnPz8kokEk>RyEbH+#PVrbHBpCrY8IO~X=V%9#M_WTG_ z5NkV5(MR82v53tLYYa`Ch9Tg5vX}}4r(yTQ$Dm9Hn8rq1N@k6UVgg@bY_Dzc)5szu zsa=?-m+cK8%ha}i2w6lZR@flG1|vSOEG7)?;-6R!%z&6hM-O#vNY+O8babP-fe&xW zlQUd4K5fYlNs32tMo>Q0@9^_t08p%lLt7iG0QbhE6o;^3PC<&r>&w+n zwGJk7E=0UfQku>C1f7u|a~-_4uVdf6g)ed14fXYC*)YDo#ZR5~KjLm` zao>c^wd%>Pp-qYnG39)}a;^zGs11Uf;8!g1b!FLNN^F=x_1Vq-9wYWWb$ooeb;=I+ zI$In3h$*`9Q<`qKI3YQ~&BNB++UUW$600H637WK`qrN*cCO<+N*)KO%t=H{tcTRqP zv{zl<+;>P`#z(1J%@(Esjr(q1p)A!oAYO+ptgf$1$`kK;UY{CO`QJt9IH$^c;+d&KX0yQmkJeR11%uZf~tM<|L(rs%u2$ znJIjp7DU2NrEm7y9kaI8Jri!=4nF?68n}C_-Kz%hInZuzN}{{hZqI>KPTKohYissN zSnvFn_*|DL-l*HK>F4m#(39Z#E{;Kfoh^I`w*i@Ps=C%{=&kl-tLwx1TD!eD#X;Ar z8)qanb|g(~c0dbM1|_Gq3{W#sMLF6*}mip5(GQf_bvuX@i>7hCq%0 zR=WdwY=E^7iS;1n?W|YVCKPb#Dh1UyS0kqZ{J9O=ZbTZe8s!lI(y_O?p!6WW;#!K7DrwC^EwS(Je$=w z>$b0Hi|5ej#nL(iV{HKZ(@qihg! z*k+7VD%bNmZGLnQezsf6G<-;4MMV8QQa*pcH;4P7Z;|%Upkx(S?>P{@4nUCPDUoq4 z|_1t;vB+s2FJN!Bi%r3PQOl{PM$jLpTh|Upz z=Nj1C?&LgDE1B9s*HZWGQqqZ75UnHzIPQnzO+LTO*Fo~CNA2Rdqt`@?0-25@d!0!o z)FmjMHDV1)A@$`9K20v3hvgjbFXyLrmT7FXhV}R2dL9zq7Nc^m~tL=oVafnfBVPFWt z=0##TDORt-68=<@i;}y4qG|sIBV@frw4m%^@0?LqgrnV*p7LaYx+h*DmIGpyBHVzA z{<5b1JB+knn&D?))~>6lm{i>24ybPFFZ6F8qeDWtym1v&PUY2cabg$ zRBT(<5oARq3K2M1c9i$-(pr$R0oPIVO@&Y1ld|2}t`v)V;IM7jJw$m|p}W`jyZ%DV zv1J?fM$2wU8^$wu;;zvGLvL#x_7o!ybM2;MR)xs*xUvtvRDG)hvaFxM?l+onD0_vEn=|H)OHpOV$^OdQfZ+%0Xqb?mEX@>ONzefZXpEeEjcW^40Qj{iXA?P+b!xw~ps*IR3_(hboz@5TQZ zAVN#`K0>Xc9sWh_BJfGgN%T%_)c!DoZ>=q_JF;KNf{{psg{+K!S1j2|meKEuYIa`rWDBB9h> zmXZU(-_{<{+6x(a@JgtHtGEWG;%A0H7t??;FCF0gVh*^{4^h zRC=o4H&@r*Krq8Uk*PgVeTcI?+rHr*(e_qv_uG~nR|ch5WV z;(UGCuCF2lvC$CoVsqME|6Ih?f!$*q$e;KalnbtXB!@`#XZJ6C$JzT!PaE2S0nrRt zJJQ&Kpq=qa9O$j~kR7mC3G8u)OJ zNHGr@~HC>jae9iTQP){T%ur*I@U8fFdVKcbJ_KL; zxg4Ruk6ujR#|8v`e~?`Wd|%^1f$u~a`Z{KtpoiG;B)4xErDPnFQ5>XTKy<3DUr8t8 z5I5tB{=+^Y?Hj;ZhdToB;Q7nGR%)6xgi`GdrZq<`#Tm(MBsG|EjavOr^=2J($Lq_VE-Lj%s>sC~j2RO@FM1!TVqJS2%njX$K} zu6KpgjM7ts%EGrU>M1qPT&-GPU2CIs0|8@%7FX~+Am8Sn?GtRi{;RePGklH83Vt#no%JDTF9@=ewBQ|!%zp*)=M)vjhO(oMR&^CjcI>Swk z0?E+Ksy8E{_xh(rB-9Ix_@?b!IbJB#p&n`FjAAs-*YB3WM5p}|Wk-W@lyQ>V8I+@% zLt}cjjBg9u>=O*T6P&iSMKs-KpXNscsjr0#9#RG+`W_<33mp3w=g57&%x_SCqmiTd zjzID4_o;)+r@vwS`NoCz+pYfY?_j(B=Dkt+`&sn&d=9i&JU}fvsFE+m(S!8y4Tseu zwc^AJT<^!{F@@={v1H1_XGDwo!d9bu!l-1xf-W%fOO8NAffN*(BYh(*O7g6Ix4A2N zm8Ub`r;sT+Zmlp@5|`Gl>$Xj+G^2)~(w?C~5RlsI=H)%ddvi`kRFLFb-Es+KmU(%2 zvWTY1VladV;tXx6)Rs&qb_Eu$X~V5T<$Q=Y|mjyVp~6bnoGqd5ZrR6L8`C8qQq-Q^=2Zl;S2#Otk|i( z);i|YWvW}Kj*JOZS}^$3Ln2($ZiyhT+SsbwovxU~ArsNasMpTuv4M)sP-;GtUYJkE zeU+edovm&!sLDaL55H0(QA?qgq1#$Q#PC$hKAm3jYCe~$jVf}s9Z(fY2-=-_=Uja1 z7v3whTb5q=bD50n+TEybc9+{dZw%);cC!SaF1gXeZo0VK$XBZi^;)fwvGb)=zFHBt zjTREdE^SR!3HWI>j0bkix; zaV*J`bV^dPEKtGqR&Pl`9WxbEg@sb8kSY{1wL(6Zt{Cf=JX3zXjc{fg{`f_wOQr0* zon5FG8>M=tSSnS_yDoV;-^Q}2AQ;-vLOs{aH1nxUDbvWMQngCJzT_E(H#B0Jrd`h$ zQuSOWTdL(##d;;UvFmBlseU*+FC*va)C;`wgaT9BU3++2nQT2>OD|M&&1yECU8saU zBQRk)pI$ohvv)|xZD|{^&d}v1m3K_lCsoO_xx#LK#(P?kWe?Vom(n1=PoX+GHY8Ck+o~hVzu6E7VGtzU8}@CF3CRkqm#YIaF?6d7xE1dK(kP*rPGCa zsZp8Qy+|D|8uBvnKLny$rdVtinwe_8m@kyF*~;|e5=7bJB}s->dmfPqpkTc_KmTG` z=l(uhuw)D)LEHoD?dpo<{*>=Qd(tTmQB%xGf*~z>cG^Iu$B{fQ2W?)}c8~rsb z!HVk)uOwB?6p9PE6iinn5Hh98fsZIYEnG6D92S_L_p!j`##k)}{>c@arF^Mrm#W#y z6_-uUQ)LgKDVtAaQ>pqwDxb^do0)v&;MpGmO9S+=pnPB-cB;Lh*;AN2Q>@prsa&d> zTCgiuwlCA{kXBWA3BwZ>a_~#**;=ZR%VrwQLglKh%QRs+<0>7t#fHVSsOUQ0JJwOZxyWt)&SAR{KU7wl%W(ahRey99@Y`BXL6$Tcg8)m`s)C!N0F z#e{~Wf}PJ4sZ*NQPBP>Ik%oZ0A0m$U?DLb8RHma2)y8vcpzvB?wq)vs zTD4la{zFO^rY>0*^3l=x`P=a?6C9UY3pSdWTs>VcG@E#aU;*;vStrMUC!OYMmhh}H zs()#LZ53-rH+Z3O#A)iqVSs$Pj?H?#SxYwy#mci=VpP>?_5lc}dO*+x3os8&n0VyRx4-MvuWk*?EenSfs!<)M_)DLDVtrd^{d zsMRY+cOT8#al(8f41VO;z$|1#DEW>FWI&eW^57X1i3^HXR15E#klQpF7HL_1e3Rc?IE7!rWc_dM8c zHZ7wxK8Jxc;M&Bfq{Q$kFnS>mb&)T^VQef^=5`-?%OXr!!1H-<5z;9R?H&&hR(XVgp7l%UIuxcD`OYcF!2_ z4RX+SLw~@8%uDkg&t+iWI9wl|xmmCm8repn*vvK&+^nR|T&|f5YR@}PoiA2v1sJYy zDH^q^U96;cZ*dT*=^UcqsHm&15v8q-bcxsUKWeOcxsYOuksC<*Jp;C#CGp zU78<*$q|BdCzlVM&(GiCoJ+sva?5hiM%K(c!5L1VF zN`+J<|D(W*qGKDpq&yjrAtf6E5GHLiU8;k)YL&t`AvnmzL{eUov7AT|^dLIyOn#wh zr%LsOQa0VpWGcl=7lIPWju70Aa7Y0JI{kX zSb4MFES2nh7RF*_;kCOS_#*PHsGcHQ+EL6P?9{;A>FPo{U(ZwvmE*gQrH!9k$s5#K z4ehp&sx|VtdNsvNPBERX+_Zb+d;E+!y5vK%W$JL)(y$!zrA)?7H7n2Ey%juuwse}h zW3+c%tl5Q9A)U%(^BF`Sa+T+ux?C8|y3dR(EmyZ`%386I%4M5~bii>;WlNQxx_tU- zVBYNxTrrR2Xt4%&3em7kqgHwTUMKasBprHK+0Dj@g)v}o45-as2R04j8HEy}H*okH zg?iqulyAOh*L2=zI4$8BZH!~v^+K`UOe3j>{9!6zS^T*%;|!Qy>2yDJ*UfPgw6*G` zdOeq}+09zEkuRkyKmF5V#w)B>`Iu}vT}8gTgWM9HzQ7=PMBP%z?&J&AOsxS)@`4!` zR&*!qB?+v`i^q(-^Gfq_2+RWay;{uH3fXK9@vl;*a`Oz5#V`WgxyUZ|Ei=+sRql#w zv)=mrF;g!rZmn;YY1-yp1GiaPsFyNOz6gEgk(R66_A_G!aG_GNH}STj-jeTe7y_pb z$FWe%Wns!z(~V~3XP$fUvGQ^x^sX0EnGCJ93{qLSg>2=8VPx{VOzHpZlssaxO`gAK zSC|`ITru0MAwAZtrV*t`H*1xji#qvz&hX+r?uj?a?J=3B2Vmu#FPT!O%)hb6OC!w& z@WHh3%NECMQ}MR4BGQpLm?6zlGh44`D|h@UO^}^J;OTruI^n?enlvfu?T$S^ zkIGLx3=X5?=1zP4M@%`(6vIy=nZZP{oTKTa98{KityROeH~6+DyCE|Y8*Q0WZenhr z4^iobV#6*V3u)(?NP7HylmH^Jp~uU^IFaQ23SMSzm=WhYV>oFxWIz@${e>5fgMr_< z0#qBVc8SgvQ|9Cum~<)RUKcV8wRE*qt-P`^X0SmcWxTrRt3wD87(p05UCZaQ3)x1h z@~S@@i?@Obp8Oc`)|Yg501&%F-pvl!{PN$>m=6pH1^B26Yj+w0jF~JnWTW0O~3h3u!x*&me?TrbMOsOLmC^i9#JMtWHfF%~GHE$iW z4@Y(sVT~_4G@;g#?@oZLiIPjW&P=$2<*} zyjiSOo5dpH5vw5pO9A+cm%Hv)lhQL~t-XJEgV zj1PQoyiG3rH{r1CUK)1owt)ei_?^7y0(83)!?wx9@he83Ku^m#8ZV%S}ut*ai zK%}5n&(un=hHNB#OO^KJs)R@vwi%kmCHK$&F$s{1dx+)yxM4>SGLatP`VF0n%sZlLePLH!z(wRkQ$W>Gd zz6iS437|p-F=B>nNC?4sr%8sAK-sLuwJ#kM2G!#Vw^cKXaNj)`II=-V#>B_2z`{0T3e{RUQEc5 z!DLcjkpDbE~#f?-XtRO3?=!e-s~K+j{YGLlh@rx zo8BUJ;a@R8U0g2Jss*^HwREmttE0}O@>cPp-4gDAV&DdSOQ7zP)^*oBE>_#Tns5~q}&fP~ucnKaX zdSyc;ymVoSO8`A=;(=#~V}X}L;YS5`on7eh;gxAG>X%*X;WfO+YYT6t66Q-$P^}G= zVT%BZtm{{&=S!LSlr@X6cRrnl?`&mKncQ4DHJ8pG)oz={1I>gC>XCZLd3DVjCgd9B tGr2cR^Q~ye)Xkk-YuBo4-5aLyLIayGSinO;O* literal 81041 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 NdiPn9bfqc$?(fN&vjcdPJLuLAio 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