From 9190699021ad0666d71a6e036b8b092b0081bfa9 Mon Sep 17 00:00:00 2001 From: martinsumner Date: Sat, 4 Mar 2017 20:36:53 +0000 Subject: [PATCH] Add HEAD path description --- docs/PATHS.md | 92 ++++++++++++++++++++++++++++++++++++++ docs/pics/get_timing.png | Bin 0 -> 24716 bytes docs/pics/head_timing.png | Bin 0 -> 42546 bytes 3 files changed, 92 insertions(+) create mode 100644 docs/PATHS.md create mode 100644 docs/pics/get_timing.png create mode 100644 docs/pics/head_timing.png diff --git a/docs/PATHS.md b/docs/PATHS.md new file mode 100644 index 0000000..0963e23 --- /dev/null +++ b/docs/PATHS.md @@ -0,0 +1,92 @@ +# HEAD Path + +To fulfil a HEAD request, the request needs to take the following path: + +- Check the Bookie's Ledger Cache, if not found +- Forward to the Penciller, and check the in-memory Level 0, and if not found +- Check each persisted Level of the merge tree, and if not found +- Return not_found + +Each of these steps is now described in more detail. + +## The Bookie's Ledger Cache + +The Bookie's Ledger Cache is formed from two parts: + +- An ets-table configured as an ordered_set +- An index using sequences of hashes in an array (which isn't used in this check) + +The index is an array with 256 slots. Every key that is added to the ledger is hashed using a hash function in leveled_codec - this will either return an integer, or the atom no_lookup. The atom no_lookup indicates that the key will never need to be looked up directly (it will only be used in range scans), and so there is no need to add the hash for this key to any index or bloom filter. + +If the hashing of the key returns an integer, this is split into a 1 byte slot part and a 3-byte hash part. The slot is used to lookup the index within the array, looking up this index returns a binary under that index of the array, and the hash is appended to that binary (to be precise a 1:1/bitstring then the last 23 bits of the hash). + +The index is not used as part of the HEAD process in the Bookie. Instead the Bookie does an ets:lookup (which is assumed to be as fast for detecting non presence as checking the hash against the index). If the Key is present in the ets ordered_set (the ledger cache), then the Key and value (which is actually just metadata) is returned, and this is used to form the HEAD response. No further lookup action is required. + +If the lookup does not return an entry, then the Bookie must request that the Penciller try and answer the request. To assist with this lookup the Bookie will first calculate the hash (so that the hash is not required to be recalculated at each stage of the Penciller lookup). + +## Penciller - check in-memory Level Zero + +The Penciller on receiving a request to lookup a Key (with hash), needs to check first in its in-memory view of level-zero. Level zero is formed of a: + +- a list of trees, with each tree being the output of an export of a Ledger Cache (it is exported using ets:tab2list, and then converted to a tree using leveled_tree:from_orderedset). +- an index of hashes, which is an array that has accumulated the index arrays formed within the Bookie's Ledger cache. + +The index of hashes is used to find which of the trees in the list of trees that the Key may be present in. The hash is converted into a slot and lookup hash part, and the binary is pulled from the entry in the array that aligns with the slot. + +The binary is walked, if the first bit of any chunk of the binary is a 1, then the next 23 bits represent a hash that has been added to the index. If that hash matches the hash of the Key there is a potential match for the tree in that 'position'. If the first bit is a zero, then the next 7 bits are the position, the position in the list of trees for the tree whose hash entries follow. Walking the binary should return a list of positions of trees where the Key may be found. + +Based on the position list, the Penciller now needs to look for the Key in each of the trees referred to in the position list. Normally, this would expect to have a low false positive count - so should be either 0 or 1 trees, although it could be more. + +The tree lookups themselves are dependent on the implementation chosen within leveled_tree. All the implementations have roughly equivalent performance characteristics, and the implementations are designed to: + +- be rapidly built from a sorted list; +- support efficient lookup of keys that are present; +- support efficient lookups to help build range queries; +- allow for rapid flattening to list. + +The levelzero cache normally has between 0 and 20 trees, but can have more, and each tree will normally have about 2000 key entries. + +If the key is not present in levelzero, the Penciller must check the persisted merge tree for the result. + +The implementation of the levelzero memory is in the leveled_pmem module. + +## Penciller - check Merge Tree + +To check the merge tree, at each level it is necessary to check the manifest to find a file at the level which may be in range for the lookup. Once the manifest returns a file, the file process is itself called to check for presence of the Key. If the Key is not found, the next level should be checked until the bottom of the merge tree is hit, and not_found can be safely assumed. + +The manifest at the top two levels is a simple list, but a leveled_tree implementation is used at lower levels. The manifest is normally up to 8 ^ n files at level n. The files are ordered by key, so only one file may possibly contain each key. + +The lookup process within a file goes through the following stages: + +- lookup the sst_slot within the file that the key may be present in by checking a tree containing the first key in every sst_slot (there are normally 256 slots of 128 keys each in the file), and if a sst_slot is a candidate +- Check for possible presence in a bloom filter for the sst_slot, if result is maybe present then +- lookup the block within the sst_slot (there are 4 blocks in each sst_slot), and the position in the block using the sst_slot index, and if blocks and positions are returned +- read the blocks, convert from binary_to_term, and call lists:nth to check the Key in each potential position. + +The tree to lookup the sst_slot is an implementation from leveled_tree. The bloom to quick-check the sst_slot is an implementation of leveled_tinybloom. The sst_slot implementation based on indexed blocks is within leveled_sst and is described as follows: + +One of the most critical considerations in the sst_slot index implementation has been the cost of the binary_to_term and term_to_binary calls for different sizes of slots and different data types. Microbenchmarking indicated that flat lists were the fastest. However, the lists need scanning at query time - and so give longer lookups. Bigger slots did better at term_to_binary time. However binary_to_term is an often repeated task, and this is better with smaller slots. + +The outcome has been to divide the slot into four small blocks to minimise the binary_to_term time. A binary index is provided for the slot for all Keys that are directly fetchable (i.e. standard keys not index keys). + +The division and use of a list saves about 100 microseconds per fetch when compared to using a 128-member gb:tree. The binary index is cacheable and doubles as a not_present filter, as it is based on a 17-bit hash (so 0.0039 fpr). + +## Performance stats + +The following performance charts sees the timings for the different parts of a GET broken down over the course of a 6 hour Riak test: + +![](pics/get_timing.png) + +The head request takes around 200 to 250 microseconds on average if the value is not present, and 400 to 450 microseconds if it is found. However, the time to find it depends very much on what level it is found: + +![](pics/head_timing.png) + +Finding in level zero takes less than 50 microseconds, level 1 takes 400 microseconds, and level 2 takes 450 microseconds. These timings are recorded by the Penciller, whereas the previous timings are recorded by the Bookie (so include the ordered_set lookup and message overhead as well as the Penciller timings). + +Looking at the timings within a SST file. Request timings from the perspective of the SST file processes are: + +- Not present after slot lookup and tiny_bloom check - 9 microseconds +- Not present after slot lookup and tiny_bloom check and block_index check - 20 microseconds +- Found after all of the above and fetching/de-serialisation of the block - 300 microseconds + +Note that the fetching/de-serialising is about 6 times slower real-world tests when compared to direct local benchmark tests - the difference is assumed to be the cache advantages gained from repeatedly testing the same sst_slot when micro-benchmarking. diff --git a/docs/pics/get_timing.png b/docs/pics/get_timing.png new file mode 100644 index 0000000000000000000000000000000000000000..470e575cb7447a7883e9190a8333d17e8506fc32 GIT binary patch literal 24716 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 literal 0 HcmV?d00001 diff --git a/docs/pics/head_timing.png b/docs/pics/head_timing.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0c86de1ebd4cc54d1e2ce594a21fd50369eb53 GIT binary patch literal 42546 zcmd42Wl&tr8Z|mGNP;E=cMBo72Pe3@4H{s8Ai-S|+}$;}4K}z3cL?qfJTOR*!R6cJ zea|^x-Cy_5t-4c{%4TNo?%v%`KeE>9U`2Tew3h@gK_C#Cl%%LK2!sp)fgYE=(ECavaeFPwd~7q<7-7~Ai}+?s_LzK2VpnLmD!_>^Kp z`e6GywXMO#WSYUE6zaZQz8ciVp`i)3D096W9=#bpl*K0{bp}TH_hVA4dUF5o^;i6` z3cP=>g)~wBy&|JW`uFO2hvC0hAOn_vufG2G39{#*kN*AAulqmu{r8El|7!*l=gGf6 z|L+N(|2FggVaFeodwP3^^Yhk!CWO1EI5wHzmhG3wsFoNwFV(tD6)rV;cPdX|>d`zb z^TX$LSY*Woey@s&IJD@d-m!GRmqu&(f4?exGJeM+PhwWqG7;n>qh4NGy5d~e*(>_b z!yuu@$JzlM#UIBinyfM>)FOp5IFU%4-BLdjhC_9C8x3p!y^pM83wwk``*}=V#jKcr zkA!;h2N#0>&M(>BC7p;8%)?mC-lCv7B;7=0$8w6R?S$vmzmG?Kz47lZerFqBrK$Cv zv&=iEJ;~*>zURIchtDkh{~C*WK=$AF%u#D{yhmC`cj`#t+5GSCK1Ui=|5TdhUNZ>1niJ7~V4a`~6#E506Dl zVC~6vbli?`(~E3TcDoyWA1A)U#Wmb&8lLg|pZhpiP8Ql6_BC(vqqHgKJ5dr-hz z-s+^N@buw^@aTsf*KbsRax>?>%s1=CGw6DoeYiLDPVcjTLFWZ9Y7j{8)x*Z43I<-e zbRmNXemHEWr(cPfn{0l3@&aSy@1EuR=N{i5v4*85KTs0&Zv5H%{_g9~e^>v-;jRTT z)1Idjw9Oe9hBWDlp?rGCO^LnW5-r;C-){bHWwJ_evbCaAC1>Z!T4ig7MJcKDx|WQ+ zmR{@3>rtn<5qJR+3=J3)72|`4`1*9(@z0O$7QyJAW{Fnyo8L2tuJ2UNdLE^DuFy6G zg4@H)s7w*!?Lb~8O^i-P4lco_Y-s{BR};z{mv1BA*+RAz@WmgNpi=C?ZABFV)40AH zt&z(zoW_-PvUYc_Ffh6*&-Sc!dYo^5hIf93ZPsnxWjS*)jgNT8L_>98)Ph0f1`DCV zsLM|3_kIwZY=WwgAXrS;AY;Xu5#3|A^rw5Em7yn2@8sLZ(MKoWqSXgY<20r--vFKd z@%_8*16oX54z*pTc-@X&h5-`3j!V@bQ-8Od0e zP_aKwTXE;qp%gD|cDZY$L7CwzrU^)IzRVE3Ra$N)xh438`AN{uV)FB%s>U2LhYnZW z4>!C()u)yoX95}i3+9y%r5!MZsYfDGvhlqO)XCSj}07uhX>6v3u7 zO%h-dmz48WEXAUtG(YeK4V{Gx%oANUvl%KMzS+H`Y^G5Zl3Jt=m^5?eKlX-7M>~?l z)po}+&*rf-)M zhy<4|Ol+>W&7`>>FxBs$T#>IOm#Jq-tFfoql&D8~9M16f{_A z>-ViL6>yYp=|P~N_!0>{7OOn%{-Q;yUo`Yqv$}Pq#(!hd#>d_)2Euc8I8Ct*7UFQS zM0|hxmN0=J7FY~SJ^o&O!SkDu%Dd$`xfFip%cDNR9e?W3gU5U1k2=n-3&x2SKwlHXQ>&{`6YYw^tiK zRhMN~QzVLN(@q0;M+-K$R0y7d)O>@$NJOa9TkZSE# zBSf?_Z22|^f;h0r>dMr}k3>;Gpif))2YiByX5t!#)#VayLubF=JNMgFVe>7Jtvq;* zY#Q-Ef{~jRn*5>A&2?vDKAX)N4Jf_B@@`tZ#XIpdh+9NknLH8^?`{IY;Mn(@NtF&U zoMK=f&yVs4(QhN%8e-yQraHX#mU5C5&|1;&}F*q(VFG7_}e_TA^x{T}7O zQr{U{6~w?vEPgpke)}ek#>m&(7MNiinM>DFF@`k2Q~n%vi&tv?q2ZT~ds+1vmMAqm zOd0nGliP~L_9#a`({q&IHjZb>LMI_tT1&3XlzP%;Jw*C8R>jkH&_dHvwELRtgXN40$7H&`6+-fnj4bwGefJwli7(Yr5&NLiiM%$ThG0 zqn@c@X@47{4BR90?1Bfd?6%{1x)$%N9IvF5RKe|x>l_ujCpe>FAB>hgjH3TEkPej< zqV7KRT(e864%6(V3utvMu(GyC<_Rx1NygBCWX9oC}_X>mEcojo{wNEI+xo zkhW^|dU<4W;d_2{x9*L~)kd>leH=1riIB@1p_8imA~GH-y_XtS-H+i*;XPu>O+;xb z2n!IAc5hy>jC9f^g6~f5gCqIl5e;gM#B`KjNOdn0<<@7e*bzqEV`4I5C{UUV&& zg&bw9LNa+>j!VDQp-0x%B*j9G3L9xHE{VZ|R_8S^)C@Nnb>vGk1|{0LhUCG+K0Pmq zE!gM|Z9Bo?VawT8$(eJEx|8lmdI{|CLO6{nZ#TUS5jeTn4COuGprJ;;d~N&)j|VYb zZ{eGurI}W<7qQ2yk(cN#tq}YU90egKYFH#ERG#yiPZW`nmd|KTp3IIpbv?;ruy))S z7XzR5T)9gu2y%M&6JFAr`JbrRos8oajmEfk${n+HUhIT6Co9b;@0;}1q69q!M~RPk zS*`@vM`No9$n<0@>=1+9z|RQ(;0rsgtUtLeu3FW)n6g`|{66ru@YfiE9@`*my7vsH z?LyF@hIFYffaU%k#yN{#oI?JEbkIaGL1fNKrgz+J&zzfkc0tTaMQNCpWWXTS7_g`Q3ihdPYOHKh8DMWB9_c zE9tH^cb#s3GOf7-c{gO5Z{TCJH;j3ZDAj)SR#m+{P8G@R=JWYcjveObO%<3#t%h5_ zonB_$#+D>7N_9tMu8BRFZ;4SdhOTCC49zmlrd z%sdffqB+5{-m8O$~q8yZfJu!cbSkoVK0 z2JUaMy9I4#+9Jj)$G1IgllDu;&WSub-+eb%TJ~8nH`Ay#?9u!S7IA^q!YbPy>=&MB zG*HAC1)YhO)wePvl6gE=FzN=Lbf%=_sR7sRp+Xw^Sf|%8GI=!q!L}G=WYA-ztZ*FM zeD`u_`!Uw91|sm_cvzJVj53xFZO9>narY%=jE8 zv+Wf(jk)#IQqQW^muiO=!C|qfrzJpYFLK3h*T>LO_%5u6RbKK&n8~HXTSEHEdpl!A zz+)$yps4a7xGy~+kaSo3Vh5eSHada{(-;n5@)<1N3ewn_cb1QD;L0IoW08O>P-$Z7rbb|#Te)n&z$0XaOoxtX_E~%9bx+;nQeehofz8gp@fgh;43a z2E9?O|0gUh-mbaScYWs^3o> zl)bJOV>Ns#JWX4*Y4c!q#otOAe_N1DO}u&oCPg6d&sYU6>z3nzJ^cnM!_miaFq}+p44(I zz#X>_%26Tl<(SQhAyZ@8U5_K&>CgU{A$XcgR<0U(D~qx;^y9gQbo$Ab zbh)L2Sc4k*nUB8$MFdb69IKoWTLmuKRqVfvm~xe{HwQtg*1Z-Q)0%y-od>PnRZpk_ zv10ud^YIlA*?~n=GV{($3sytfKzdc&djyU8$0v>akH!};!KC}X zSEa*}%Q2}r-19=qLz}+H5UkufK_%X=G5)=JxU=4`URV^C58+?ppV>~^%5TM6_B<)l zCoeHD=@-snQMyY?!m|R(GAib|lJwhEob);D<@=z$@yC0ZePz`^>8{QpGzadvbX3Dx zPro;;Kk*@IN{J22sB3A$X^{E69!rn3?bWD48b0d1_u{(VZfaD(OZ8cAnQ(H7e7Fdn z6|_WlS4`eC!v3H^u(}oI5f8ZiSb1v5*k+k?^n~M|uh7HBLtghyPn2nXZu*=7R^&KX(!$zdQRF zkG0@|Fo{@&UGN$EVEy@b>HaCPVMtdJW1SDuVskt04(S<@#&$CF;|t;P$mmww-*J!} za^m-%$mpJ}?_W=eU9AZ2STyBIVd!l6wld|FFPwhtgXO|Ceh0jara2sApG(i%#4a=q z4mJ?cL?u(|CtsW+wMuA7ImMH1tKs%DVy1NQY!7+0&c~W?m+UZd`fKh-!)Bk=D|=1G zig1RVx$0Y+6PxX4U{oAW(}K)$1uqpuGok$KXf+`l`S;ZxyICeSef{-(qqS^~NclEz z`f}HuZhc7+9`n3N>xg|8p<|`MeD}<$m6TIYW0CgCr(eHIYJ7AedSCm8^S37FJj^Km zR@Q8<(54 zmA&W51Nl-fNvPHQ;9yry1picc;n_IrL3YbPnn>(Qo#`+#aE(>1{XK+x&r{t*CgJ2t zY-JArlY&;OEywii^9UM5R5KdaH2!V;4EkRtT5Eg}3aDSZ2J?&)}KI0G4We?@-lOOQH;+u;s{MJ*O`U}6QIaXcB^4VO9 zLpF@=z46Jrw$TQ5(Lnmx^jL|4k=f7^NPOHu-l^n1O|o*hFqW%$0eeQQ!yMkg`DZm; zrKR;x5gDiXQpjByj@I>1@)QSiOaJ4q;(%@Ng;7Se3ccJ`h}|0+xjQjgDv27&bC5ed zHH%>!1h!`xfVPoZ`TyJr#+>ukpS{Mqb=~}Kb*GVux*OK09kGYQLSsmd9_rZfiO2sL zq#>Rg>SLtcQHD`_lCVtA?^5ERL1kzdO7C^d052E0V|Q*zMK>}LC}9F6QZmN3xi_s- zgJfg(#1ZlvT7zbD!F^W3oWCj?<(s!J;JR(RpY{hKb&UMUUXF+(QBtA4)FIX$bU0a0 z+Dp-NsK9o{!YjMUB%9N3G0>RCv$EYxcW5f?5r8(F1lJf2ApKc9SwM_U#7SWFaGq3W ze$~7yW${Q7V8(O@oGAcN+1`V5&e>QL#V|(c>-Wnf(_Yq!$4EyOKL9eed~dz89~=sV zZ##n{y08cPd2&DQxxj)^+*`haeE=s%6MIb zMv`4@jXz{Wkr@k5czQmlbGt~fO+Vf_HAyHG!8ZGCgmXRInr}3qGfT1Lei^!3PuqS- zVkYPob2z3Kr6tfh{bGp{)_s#-xY$cU9mK_=FwGUME{s zTD<)M7^`g3Wr$OY8Sqg9Br8N?Pe^u7HJu}YsyP$LQmZtUNoy*Fc}`;V6003u7uT54 zzMo0orQK3Y&x&uT#B{U%py(!7k$BT%vp(5;lg;5cw$~w@I8X3drG86^+kEYZfY4d? zI4oH6&lC;TRXqww_-&KpoPYQkV&IPMZD-oI?}e3Q_g7dYQ4iHQ${@+&dtVEpG1>P& z)-o9cGAI<$IdOpuD$Xn2cK+?0`Qd;`uK-A_RU&zt)q9UkwDI671?jON*&TqRDPB(6 zY>O?mMW;6s>0a!p?kqKzUytst$66V=mylcRuO<460zJKx>j`E{fFZ!iJ%7{Ta-lGm&F@hI2i zD>+15#yCuU#f63epcepGn=}T^{ZMDpP~P4#VX8A$?qgK)2HN^9=}tl62uM=Z&E`9< zNt5rV3QkWoqZPu_d;$oB^dQ^4$b-=&h1J-y}Nq#t1=;8f2Sen=1xDab}+j2s3nc~nkR5V7>(vo2$Q4Y+*W~p#N4-ZP!OLWP5 z>oI4iF4Iv30kN6GvxTZddQ;=ECyp8Ie{Fa(G-#B_#?p?w0Z94G_w4ISY+R@VU$SLM zR(iAEFJ!J5pqV9JX6h8&7b$Z4gfHWJ?4`x>DNfe0Z_az>)=Y+gb*eO=}uu!U*!K}P4O-w|y`Q6BodpESL z;^nKJ6Eo}wcz66hPN2%6s?@|kBO(L4>PRxX{L z-m2^W+@}nhT)g2vUlerTygkEUCGrNkH*RBA6fgp2rD5C|1CFVYoXoJ0F==o$M5|0h z2KGnRPT4dC-e%9}#NUJ1wdbSiY+H0vMQ>LTw<`eJy?y(@Q+*Ahphq&nq4OOq1s~ij zS8Yvxm{_r)$O?_vSskB#uJbRzy+}Riet+6q&!9j=kG;`gC77K@;OsN`!Qxve% z();+?HP2DN$OMNLJ;CFZ=kD8I!{auD4)iNNbiDEvAA2<-o9!;0uMu-TRGMI*Ul5rR zQ1h?_#lIQdI4&P^7_QG+iJ#H44gC|d!{c@tri*+&s8B~j(5Pf zvhv+$y^Gkv1JOrkzSwAcNMQJvj|yUaa4}@G5m_1Q<@&Ds@xXp#Q5wJsGy&K$n_hn) z$OJ(4}F9Q{ecCM z+iq)2*HtphyLXit+E*~oc<+?8@bJ1{>xDH@sn`IZ`*!QC`PawKans3CG5Wm!wgd(` zmI}?q14Ti5kmmz=^@w*q@Xb5YPh4uMZ;DG?(VuWXw2=iERm=py7fpXrh(Mf=xNlf= zM|v%#y#xtS5W>xfc6bC9@5VJ1V!8XHVpI}zTWDJ#@s|%Ql#t}ZSRvHiKv32I+`9dH z5GdFTT3}m$ySW;n(ThAkEVXmF<4-p(qn@`Fr)x3KGJT@KQM$35mg>aX_0Ys~d;^v! zOUaN&pnij{ckC=4M-@i7y=ie7nM$zto_Fu-K6Z(ex+5zH!tr(-b8#VR0?|7jLmrPG zdS?cD&jq&i1Z=;*eR=|b?9*4=rys_hjkiN`;Nn;fPvWPP?`IrNYI~ovmo@1_z~4P_ zA$0x2eTDdTqrQ6LrN)Mbo2j&Xve$#OMCdEf;D!NpH;|Cf)e5AhXnYcQ1QPNfB>hZ! zxiQ<<-APGYo)SwGG3i6dHb5fJq_avx>BKf}>+-ARu$a6DT|#}cX9&)<`=CGpJ^l!+ z%!?R9kWdFc(7=Jq)P8`YnZ314CNLO?T9AmZL}NL}0iM7)p;pb44QC_UJFqr2jY#Vo68`2M$Z&TxHR zntj=ABXB%n!x1si5HmH<5Wc2VCBS6^q-wGX;6MdMNDl}s=Pafv&ulvz|KRN;2(q89 z+K?|HmpytUMC+qI9cVQ#wJL>q&L%a2^x%Xq=tPT|E!(O_6=3 zeo_j)$1&rQy{i^-ya=gsV0Mb0P5Bl$?}Tuf`P0ElxSn~5$b&#@Sb!b=facae#PgLZ z@rQ0Bev`X29*DYm<=gA3Z(?n!jOCT#dmlFCWD+GhX|0B&DIB7nA-NgxhXZzjuFq#l zDw?KcW8}8F54^QjL&Z(j9abc~atM_LDJEb(;Kq33^9+mGU`VF@1O`;cWz8Y3Ga8uW zX#}B2vmgx!WD7`lBvo~hF?1HMvCN`?*g=;9NKu4DhR?2N!%hlV&N z&sei({xQy7C=~UuyjWWe{@7KvaFmC;d;rHn%kY|hpE!hRL{>Qmm(SfE%%`7d7;)+7 zQK!;{s96m;2=oL~fS%7wauJRu0W9k4QBD2PhRlOKZZFk&Aku3AdGE}`BQmnnADFII zB7cBM>Q&O>8TTx;?fuiRBFR?soo72gJtHx^`Y0P@C2I})$D(J>~m-KzDSt8^|Bbh%8)4K(ynRtzO%5v4s|N-9MWz! z7i?{C%Q(ex{1MrUa0i(-8P23m;_~@x-Ent%%}Zo-HN#L~L8t)9h1m8t+}!BRW-lPm zF?qu@Iq~R|IpxwV4QC^|TSt@j1a?h1P!d5P{h&?sG?T67G3Wa zPk66a1j)ZhD^O8*LQ<8kK8eqDZc&k?h&NtG@aJDab}oy!jg9!dshPxG!V&Cx7V|}v zS=9}7#xs`kajmWV{c;TTO10y!coZuG@UDwJUpc)mfPb*W@F*Q(6s>H9F1IFuPnVvt zNgtqn`OVc~u~;AHvXM=YWzBTL;7;m!&&4#3GHx=}*D7@v%cSI$kFDBkbDk@_+-8YB zBUQe7mRQEI|1(oJVQO!8n7$BXf}{Vaa?D7UPA8hh8~c%M^ASD{9It)=HIx_q%iL_E z`er*8!y(oqKmF0886b7AhqiHX&^#olTZ}Dp9*={Cdb_5hOB-h!+^Vdej2S=-QgiJS zfNgs)JX!#Gb4q;8du-@8EP4KGM^~h@O?ChD2Ix50MP0Ub%B;$qqJ^h#VD^67dM7#{ zn$Qr+W?092>`J}h_hvz2S}FbVhs(SBowEzcQN_V!JUw+mfu8~wt7X7jO!=PP$Zj{r zg@Jebs@5@jPC_gv!l3t@5!^Y$y?I?&#;v-Pr<=|j1tZZCO@zG?jR;qQ@@zp=@bXPf zJ~0eQiZ`u$8X<;S>h1_h1H6V4BLBnUC4)aYwazR{$b@9h4Ya`Yg? z2SfYUYmt!^^?=BX(Amn-a$%djV@=ASg3nae$tAT=g8a$zSU?Fh0x)X;dRTp8-BPl5 zG+gBR?25Ka@R~f3XwD=KI?lzXg#03Nx#;cVXc`Gm&t8()PCM>{VeKQjlR^bF_P0#p zc&M4~ms;!S#L_A8-r%&GDr5L6vEg3wEBLo@^Qinmc8no$BRg;l^uG;MF+xhYoFHlR7aJ}@=vCJW9x@T$5YuG$6GjSb(Ui)*FL5IJJK39F zXAM%JX$(veBiKihtS|>~q8yd_Qn1S>1>FMfE*EHlk`tE*tT#FBRiKAND=k`GTkd<6 zCW>_+f`t7feJ#E;Yl@H7I%$m zy&0>t*gr1a5!Exvziq1OOH7Ipkl89|%@rzDobJ0l^$EL#kyO5aWV202rhe_;vEV2^ zWMJKKgc?dC{z^f#YvOq*lcO$+HpqwNPvCvkAwaNWoaV)A3~8M^xLpf5+#kdkcEHpzG;@WvZGJXIc%t#PEU)ik0q*#dxEWw%3zz zKk;RcU4Q)o-J6=dk&V^g&B#5{GlA!a`MTUOZd<)q6XBaHd|Itu&|f&WlX1%K%Tl)+ zh&Y9aTy))^DiAs@PUp=F=xD_7B_D4JX6``D^sT(~d8P_-%CMAMG~LA>AZ22?#4l}l zA1XTV1397*mXB_rg3GTUA5YxH&-I&Avq_KAUGCIieBY{t z1}EN$G`@5Tfo`qa3ka&;fIN{ty^Y-uv-F#i&)Oc{qVlzr>_xFsa$k6NfP0gq@uAm} zT$03~avc-1ZXR|5MbS*eWS z7FS%OBfr)&HfkdrHY%M-V#mAeVxy9e%3QZX3a1?$t+Ua3QFUvHLmn4gfV*2fD&`nx zJGrvn8GL(M^}M|cbN$BwaY65^1-i~%SVbjm17`Bz?!NEz=ENqD8E&)}n>*o)z2Bo$ zo{%|^1CnFUgO`H7aaoeR`L|rG=Wo$)P+A8>A>j^@PF%$yFLzCI60>@HmQFVK2b<*R z3Tw;Xo;70aQdA7k4AEqF3rOnYex9E2#3wy)YT{D;3gMTIj}$BsAN9lBtr|o!Exe_k zyZG%)w~@y>NHXxwGYIiK=~dYLDNMuo=@IJc36gUM4oCr&E90|k=JQWlSA_C_#xG)Z z1O=$W^H%0{Y!0{JTM9vpPu~L&G1@;-wE1@6& z?F$`w!X!!gA1Q0Zg>i0DS-*rzdmatt(vw3^4PxEVS(nL#$lsMl=JjbT!VD#DCvlzd zUxPJmmNDG4;a_76!<$|5V><6_)ljRY5+3DH6~0F`?-tR^-7dhMgs4N;!{lef9f%Ur zeFpR`MZ&^^PNsn9X=yq+xvvZqT_JTt@@U8cErZ2fDL^G!?+?kn){31+DXcA>ZadP^ z1aoy&g;Ww)f9S-sBGT$!fKY^{HSYM7kW@NYPF`j7fxmiWSAOH9-1!{$C7pv=UDkfl z?E}8{r>cEzb9vXBv{^;Ev5nWOZbPk5X(|b!$0x*?gCyjoHvX;ZzEgZVmnfl+M2Bs* zF9F%Wp0~alW9oU|ObF?1V@8Avr^msjMK~`srwBR_PEKU4<9^u0LxM&zBlB{1z+z?? zvZn#Vs5v0EoTm*Bg9X9_O9`I)@I0xMLK~179c|b_{z$`dWoLK1mJ3gwCFsHL}Od@^vn=z z^5_psU9}A7*Dc-Vm)5Cf5*;S8(32}O2g|k0Qz3}^yKvcU9{y(&EQ@zB3v;+T9Yyg$ z+N+O(4U4~iAZMie=mLNql{5A?2;dz7O|sl@zxHW*dV`ELXQogyfxtPen8oyI`h;ML zaw4hMMH+j)tH_O?!LyVeY*}uu+aC;x)d4ekII7#F7t}OmPx8c(1@qlpb}n7%ys)+A zEizijnB-r=!j&IY)|Iu1O}EFLg8e#dyXTRLkzd5TYEt5u0CrDgl%Acn6T(CvC4S+K zUA;zb(tP}A_fL1{nL)wvi1D@nR)}g}FRA%$9{85>hq=~QLZhKOo9jWWcs-~JlWi;k zJk)Fmd7{VvIorT*nqtLrhr-;_YZ*Jg7|s$N>K3w(yhAV^O^zUh-mI_?Dp09+jRR8J z?a;R0JT5}>06(sFc42a0jJv%TSVKFPH^-6MX$KOtWrDp!FNh!ccJMnXGRM&HgOgjU zZFjtDv3?;UJ4WUtAzM z?DCr~*-4y)Aeqy86V?jb|;^;SG?6Pv)E`!(=uqIGfcdp|+aunE-Q ze|pDhsjF)66f28)=lG_aG_EaF8;$f#hZtg}RA93~)8gp@9HBAHf&cmjc*QWpxe0eU zlc$FaAO*b?{o$}&u&`Cb%ys&so^A)*%WRou)P8y=f z_UPO1XyT=)8QwQCOLWNdiu6QMG{pm8I% zyk0}W>+Bs5`xM^@$KbC@l&?-$^^}n(>^$B~*QlvyXHB=9G5A{I>*$4Xh@S4PQy z*M=0C(x306M(O!M66B>-!{H2Ju?KYum4E6Fl!_9BYJLz3x)UrVIB^{l=Rpd;lzXTg ztK9hsWM^(^JO~I3o8ES@PQNY;tHU^=1XfiZUq=C)T~oK zwHmUgFn4Bc*o&Vu+_$hZ?QfE>gT6lviE2k2M&3+I&o~b9k6)}OOGaBc+-J5?r_1l~ zZ!F*F%$}|F?E3zlnv`Tqot+JPzPxK-~4=r>HUK zk*E@v$Yw^$J&Y51<|y+nxy~RS&-G}-cp;lhhlg1%w$(-1A!w8BH72EP5nDL`7WK_~ z=}$b(&S9*B!;QU5&r<#Cy07QCF2#Lb@n51{WStqC*W1RjA^?8fP zDTkhNIwxbZt{yp$##G^=`qJj8V`$syV~)p^kNqv0O}bz>ra+B#OGG?Svbd-&DS>BO zz@qUY;tPcKSj(8=%fXjjoli+us>d2VNb{$kAeVGGyKg&HP{pUAMmDZAyOkX8=j^AL z#YN!!ajuKzER8|OAH$w~4IRP+Xc975Sq(devmTx$|I&;NAUJ8RMw|l5zj5m?j1Ss) z1I00`(7KSQA;_h@zn$rsj zL{(G2fQx=#<1d0|Ut!CnT{tdH$JQ))n7lVEtsaUT3r?Z!oW zjs3BRli(TEJceg!_}(Dac?9Ix09kO+7|~xfxn-4?e)sog3fHRI{V9qRrnE(VU9;KDS-Bav+}2DD9G)SD&(}vj zJqr1X7bJLPSu#M(SIcHVqy7F`h;0u2qAgJQ9seUTCrEI7&WrTt3ekz(M=nxxOM}u} zzz$RMA*+U;HJf&wX!tXmfb}G{inkT5;=_C7Z1}GFS(d;tR;dRa4e76wx)!D?&1JtT zO&R!Du$M(~W4gr$Ybx^hf8#X!O_Fn@=t$p!5zK6*KyxCxPmHJLYePmaeymcU#;ccp zfG0)zAnmo_<_FFQy$l+r(P7;h9(|{m)O5N9%=unO@z2MG6OzvN!Qt-}CI6;UwjZcO z&kSy9NM>3vxe5B4y>c=#Fd^K@_2l)tQ=T6al4s8ZM9_B@1!RD@1^7sxUG)JvNiOGl zk;VdXF0MlOjyM3$?@tEi7d_(|fDu?mP8Zlfe)k(((S-ZF7Idw&gs3ikX=AB$7H4P} z%gARzRE_O_l46PAnVii7bMSiiCDRfsI|&=+#S^@J~+u% zO-fxOyW)$)Q%oGn>6Hro_W6n+~`)2>z|bkjKcJ|}f!jXv*q@=3}w`EE#L zk$u)b3EOCsUwb|=fP=*aoN~VYZunz^x8*n6&;uSVMan)KWp$B8fNPn-rZ756@9v^i zAQk4`j!`p!BCn%BBau2jfk4zqA3FVNkt^=R&3ZlhPm$o1N z6z>P%5-&H7AE>z__5fC*U$=o@q4zktJLp`O1g*nvZcLo^-I=tx%){BLyw0aD1`+DqWh{YKpI zLKnNW>*%@Slw%c|QXG2n>B8EdfL~aSX19yWa`BND!-{adOT}YJN5=5$8Gm@y?=dN? znTb5y!V!xd-!p6VyVD=~oICOIZtg%vO=gEu>?qu^!Y3uo!f*Dbq*)V(!CjW9=vU{5 z-KdLeG^hG@1`Sns?-0gP96;P{I#o$st{4_x6W26sH6^x@PaY&*Dp9e8@fPWdWfM0*}eVE>7=fjR2=^U!F%x7{ymlV)AUbG>N#`Y!%^ zaFWYt`R4d=FYM>6f&N?Nj&bBF>#J`WNkR}S3{RlIS<9vBen>;Mhl*umK2YC;jcso2 zFCDAjC~xIzM{wSj96zD)b}Mu|1nLv3^p4XQrj0&jf>P@_0R=m2FGc}2QP)_YA}6NY z;;p8AQpB#cjfUMe#uIONlxbEa=CS$`oNs5qYkj;ckU?ZuxnXr4pf^t@UqTDaxfj}rHJ+nvI~ zdZoRqoR61~3$T01+>>{(N_5QUFTEKo3#6j^DM6R5eXc(kmt!2dR5x0>`}NMw7! zq8AQf{=~)#^oWMJ5l8l2#NJ=_Je+F{1V~=ssO0O-aV+tR8mV~Q2=&XE-$8a#FY7|E z#-QVvVDV$dlPIF$k;YBk{F6$k`8g(=owy)3r`=J7tw!}*`xxc`&|t?~!PwpGj(+hl zZFdtB;-O=vnb zu~)t@G~}gYB_WmG;n8CLnL>?)a_9{KRE*IP`yu)$UR5;)Imt2?mqPc*1)h4wOs@EuXSW`-3YO~okeO-mi! zxQ-Tyu)u#c1_2M_5V&gdbgV##{5{fOGn{jod8aySWY~0vh1kD8^d@Owjf!DWuZPii zUmio@ZP>$=g#gtFkX{iO)de_txGwMs-x$L*fnW3w zyS;2$IP>psCB>`nBR^q_Kd&7sgT?~{+WV9MtgL(GV4U43Gt&6~6Zg&6IVu{O&oqF5uXRYI}8~R?Ny&K=CjPkd$8q z-fF=~6QCq;9HmPI9olY)>wWptsr$fMBSu|wJk40Cjr447mjVDZb*7Ek6A+)6de;Nz zd$7hc{)LKCc*gl>Va|n))(#X#@RwI%fWNWe9QAu@&O=Q*$vS;hJj7n22yOi8c~=bJ zL?)KcK=tXCrtly=0D*9T0rdg{@+B28T{@u6Ic-0Rw&M30Wu2e+JoOqa zM0@OoyFrMV_}lMzNcfFq87 zb2%$;9vX^C{}z{v#{#&%QIXt4kB=s}_&`hmK0@`FI7W>Dqb+=;1cfio+2Em0c?1mWt|mm0syt1#;5_CZ`e=zpSK5% ziE4%^0?pOjn-n^hM+75uy8)Or#Lf>_3$plMbZz*bL)KLfxr7hP^u&j8M@wjvZFRv| z)kP7bS~O3I`0Z&5aiqgJvAb;iqTJ{xz`QZqCE^=0NwEk(-^(Y_kgMW&8v&&4VlDdL z*C(?Bc6W2Mm6}nVaXHCeG9Z~yYhbC(F?Wwxu=1ofL7u|e&;{Qx@?kgOc zXE{7JZ^o;SzMZvWIDXC^t#7Ew<$z$`L4D9l8wsC85?7$GUy`v{Y+AW}N z0N>Pg%-?rlkFf(^qP)NGu$2vLSA&AhIM}&h7@7gBan{cXFoP;AApVhFS-R$6NeWc$ ze6oqav&EC$*`a9Z%A})Y*Qxv{n@C?+< z7n~jUfrE9glkJk&AKiTZr?yAaqt$WXbMF3%9&x1x+mPISyvfR@^Puc&WP@$!g;kCz zISWj0DUOuDJcg{vuhNGFm$xH^6ZJ1(>+`n)Y%>7PqJgffgK(>8UIdWa8g5YXWtk-g z*c;t#-Pm~BVdopAIH~Ir1D4@|1wbJXYi3k7aiOYd{7nPwbyHk|)o!c2`DvruABewI zihBhU%Rug>7ptN-V(Gy^d5zxz-l?B!d^LVx17bjc0|MR2Zmb!>z4@uzak$|nfrWAT zMe61JIxYz};OElR2^5rO-87As);T-Y(H~kF2T}d4)t68Z-mLiEK15aXXtFQ{n+yZp zU>_ni`eGFiSh)4JzmIJ^nsy9RsU%&;EV^3v{3d3b-zx;oy;QgLrc(_ZYpb_(n+KP#>r@%z+dAEL#Q&x#PKK ztTgdlZL=B5*99HPV*ttqT4ShG=VO3n>I&na7zt3cpy-D5FXGSl1~H{c3;m;u({(iwp2HHV z>7AThlWMs5(UFTww55%ttHc)j#Jp{-q~zcX+4{u*TBwohSW4L3hU7NkU%sH~sMTv~ zwVKC|j#duygqPd*2t}7SeevLg#%9MgExBvzMU3(H0zsIzGcUi;5q5CdGI0c1JeKs^ z@$>ySuKE>EMQ5R%DxWy|Ay$`KMnnAQrL0Ezpmme+uh_v)DE&O=u4%|jLFtPDgXdN> z%MbT%#TxEc?9ImKWxZyy{tk|<1f3w4bb{S?GIFvOgkE5qfH%V-mXH;DQxDT=Ix?|V4b(No1s5U zZTG=Hc`97A*0yNasx%Q2S1FlhRvL|2$e1$3F*JUkz=ZAsYS~a+%Ejbgf+{tzB7m&D z=(!aIzRqL%x1S2ISMd!m7D4^VsWi;-Y!7(y@>a@GQ4su+`CA%k9f73mz66}kX{V6+ z*uD>gp@211OOGZr)|-teEAcqs6UN25@QL3dM-fh=VhHzwPzF{-NT45O15{HH6>A#$ zbY3E?q7pP%K`Aa8P=27^j(vE5bTfRTA4n638TVyx-he~(M(}Ge1_JvFB@t(ngB zAQHAJ(r;fOG)2Sk?gEvTzrCxxCe#&B`u7;)*NdnUUnSg1m7ATg67EAa&ABhuf%}l= zzw`&gJtd*RU$v8WNyD7Ruzj>4awN4*4-Y*ATw0L6sf0^e2w$c6E1c4e)=FGp*BJ~s z2`tZ~^pvQ{SRPk-ut8cV8F1rv1ENSn*pU3ZfkyzGcYG-t;Q7hEe%$PEnMLqr@bell zGoU;vz=enNw5_l&PfNig9?TpVlYwX1y58Te(3%vlyBe&t&A8CvR#DUr=K)GE7^^AJ z3MKnKUa>o z`r@W4RjKT;Pp)lho1++gwJM4U%io#d`|M|-1RNQ*!PAaeKku%j#?=!LIlQJGe!wGc zmoonc)FRq@?iek1impBYj!P!|a#AyAjB;`nS@?*Y9Ve#5I0!2plP}ony=+0m~z?0e8*+C=*t8yTxWq z+Ba?L6D9q-1g;Pm9{D?k3{GsH(S!eThUM<0qPOyq@**BA%MYqzi*#ITrciqV zD!gx>UIPMM|NY-Dz`o|~ z)BhVCQ_j!N>ss>Pz}{pl+`!!o;38G6mkwonnZz9ZwUBQ2=XJC#T9Rfs62|k5uQAu& zN=_7Y70SP#D5=$%*m}5!StEY`mJ(8YdJT)VH6#G@c56+BHrVV_Dh?&I7GSnS*JH!_ zCfEWV+8z5`2(VpZFzaDc6&P@1HJUAvg$s+@kLyPMBVnOLw@@^Kj;HA3$l(wfAo7r1 zz9H`1e?D_Fo3rLU6aMJ`5aF$^V6@y7l*et&6v#C-=NffEM=L_Lyvuy?|8a%z(!S=` z6wwIM#^DeSl5pE@g#3Zo3)!K@@e-=%pf2KeT)}SDf!BaRT|U0q!;()hO38;!nT4Mr z=0E!@6_1)-v0!!Pu=dmccj}W{*@63zM)VKT?|;P6|4*>^{{N0)d?CKZoRiRpAwQ`x zXAN(U*H#LYaDdX%@^nbahAf3kvCaA=l30K!>}}B8Jm$%0w%C50E$kvuAt^`~yiNc4 zzw)jU67>Iyz|-KU*U!na15%Wpb7uQrIgVKDidb&O3-PEFIhdGS)V{@QzQ(l!ALjcG z5CF?(%N$h<3i_+{v{Y56FsPqy8JpyN#E3;XUv9td9%iwZfb45hztKp4EP)F#7^I1u z8D0J{#B})ANxJQv&!dYvPOB7^bQ@qP;o7|>@ceRd4v?X)8(;OFjMsO7!)QXgp17NE zmc`$syW<5bz9-i-NlPzbx2tUAeBo0T|EqUDq?vCyFlJnJx-Q8SIh+kEd%ulHk`jC= zXERyk5=DiiG3fQRDAIf{!8tH}A*yVcW&0#|r|K}Od_dalJd(BVMen~)!4a*%)Fkk} zxhEBeyv%?6I3w7EmRwRM_gWMdzmxpB|5R){hxu|l;DDak2Zm4wYd^*NDt9d3T~1 z-H&OFh`donf=@YL|9%*bUo-rbf^F3^oFh5o>xyz~6O+A!fY+N?E#n8WazRR!8Y2$g zI~}_d)Xq^!y{?@a=d=gua%~IdVps$Otg$!r!MS~1XZxX(Y$Eb;=u|bN)rI%JWGVs?e?NB*?5 zbXp5SEC(`oam&@_pLgw4xLv{$F@gb$=$gKNhXKd0@qZu+x;2l~BTYw3rZvus&JWv1 zBa=k_clp0&fUJY6(tJ9GwD;mU*GRHj zp+WyS3^zUtYh2YKHI(|$cyj7ny2;qmXja;$@=Vct$vvKbhTX2(qlqk=^=q=PU%Y(t z6&`G+N2U$@ap@p6rKK)2Nyr3$O*~;V^F|({@gqmVEVZ$oZz>}MKsgQk&eyeQFgyBc zV6JCm2~c4rONh1qc?E>_*9yyM5L!TWEF=irEwjnY%Z>pMyU$x=+ zM3wt#&$%8QSVCsG%$gd>2%dp5wpb-ZHehp%MTd5FiTex}NGNFx5Nm%03bi>2Z!FHU zp#n#!^X6~?MN>UUU5t&>m^sX+$g~-fvz2DH0DV(F?eov`d-cpJj;mj#Bz9x7lNux}DnwS_c{&ue1GBfyV@;*Kl%2X2;97`cAo9|`R_0&?oT@l#x zApwei+QbfioBwBtq+XEuuLr!V0l!godxM_RYweO~k)vuh9Q#LS)k}39ukz&|#=r=d zb}8{Ze3i1r;H%G=|NDyrVK|}SKQHkbulAa@|Mx-#Hy_{yDV6~}iOT9!n;pKhV^RF* zc0T^3!yuc56--s_wI>pEy_0W{oBb)SmmaHf;B}^o*+upuu;3yl-X-?{-SP0nmDCmE z#k;_Rb?D)S#fqz5&3@y$_&M`P-R>@QdOEw#_8Ke}*2Rakl!ANU$@<~?VJB3reGFz2v965D`~wumB#nVKK~mh+(44>>7_!@-sX+A)s^@8)5DA~ zI#Sn9f8kG!mY@xjlx%;@KS$6{|B03XC8WmLC>QduUcNwy=A!?Uig^h8Vm&iUC-Ed7 zciq+=2bG4t#;8WCM`*rm&1%sXBoOyW4)Xn9V@$hrU?y&V`4_A5d922EMWgt~piL-p za&5_CLjR2j^&S-;`Cq#T*NATT*DZqkXLsQKy$tt13O3nrucJsMeR)QzSPFYL5}^oqyT9SDKl{|5*H|x<`LeAdwPz8gPlp%e)p3mIq7>no_m?Fv9#p&xG6BG3NC{3g-J|Tx#eq`*T zNXxBQ{aoEvI^40_om(-RSpBJf?p&~&c<5`Cq!Y|O-OxSfhmTKnWI1#a}!K9W$xsib6HkgbW$umqvQBKWMLAG?G|Uo z!+>u8CYtE=Gi|Sx(i0Cc8ws!KLP3f6yO?cN5$aV=nZh;Cl4nnJJ-B(0*DgTcgl*S8 z65;r`e-?5AiT%(%Tyyi9h#aDKLGxD$aTxZFs`1=HtrOOj zZ5O%Nu6e!1G9JiX0dYq~d6Y@%6M$xDZMn#_wtQDT+)OS21WtEROql;BDBpE=erQl? zrT+V$PLI{{$*~E#;(C#`Dh_!S(=MiHtzGg1O+b#@jqk+A#KfwqZ(40$dQfy8_Zlsa zY3*EjRj=Z)C&j}5Qq=R)8n5kf2o-$=le zVB2w)^SF-VoHiyZpFo+!Q!l(DzD9`DL9HeEFsHQ0;gh^9aSWqy`lxD@gEco&4;z%x zeSWeNaMeCcu<0ZT>8%36x&N2DI?_AJ6yxvObfiNdM6Po3hCIoJ7Ol_&+?-r^eMPMK zz*G$h!MWb1@&n>o1y`ZSGS02M>iI3ITF8C=(x>J^=UZ-J4gU#so}eoRhx(*4otcy zugDZFiY=meA%|QuN)Z<7Zy@Ixt+?LWzM=FI^vbo}7zobwKWl%t*`Bf<(W=^X%!wGc z2b=GE3DWac{s_s}X(RSSwLQBJCwaZB+jM`n`bgFcoNjUIb&B$=Xy%_vu~X19{#ZX+ zbgQlqMG`nbN9|DWBPwA>Z{x2$?En+|2r+xJc!GemfYK%oShZ09Nw2+>2`dRB#cIR@@CUvpE$+kA;#nN zfhUIpW-e=+D@WvJN~{?M_wI|ZJm`NE?qx+jRz`jY7IwNV>%RK7VXQ~kj~#!|E0sULzyI4iC!z=~^1b)+%KaMR zbxXniL^)pevrx8cUHvp+zYlQIVJ)6<7_Bw}?TkHVh$x0fPJw7Q6<^)+!3MWW59grH zvUaPiVO&}WT#W1;l%lWb=*ulEh9M*qrHqDHk)AWfqlM&%#b}J^t)c2{?(`B-+u2w+*>cw#F{WALco1n) ze*R>wYQPrvU?E$;Up(Aw%;{UGe#9H-g5*RL@fEWP*Q%gMq8!4j=g4u>=viblM?8JU zR)(?P%APuW?+&+)<--z{R6tdo>vZ`n#qzvJ6DWm~@v_G?r>#9;Jx?KTD!}_N|5&c3GZ^JF34fpXJ^i09p-h#U1xGv!vv~SKFD!D47Yh{{kAfw3 zI^mJMo&5{Y9t#|j2M{o+y=ulTTQifo>@9*~Ty#q$*G?mE(xoj)5Ddlc&%wNXFKT%O1VCehup(qukN$8-owt% z7-Vy@?d!Y8ky31$`edNT=R#K4wD|+IftX?f=OB^qYJ>9noR#{rnE$@z+GpBFjf^C8 zH0_qqu>(Gdy{ zdP1VG|NGs01*T$V`%1FWFSr^SDB_+xcgT@yC=ne!sMbYdr6-r%oA=a4Fvl*#>FGjw z4eKy|-SVAfv~Nc3eS3%rS}{HxbwCP19nDPO2>-LJM#z0H@)c*JSZPw>OUDJ*x+$l- z3{M4=ayq2M2fuv{M{#@<23A36Pt|tDEV^lp9`~h0V4E{iMFh`LxDKjwQ%nCRm$RUB zm@=j%k=TC;FQN}l(C2)WRr`>=y8nw-Sm9Z+OIsc8m&Dhg7)SVv;OSjYrI4VL;q~;~ zv)^r#wewr=#yr-%ix@_b-jD1t6Wo7xS!vPn8StJV|BsvY+zoS!;Hu(P5opCq_+`el zA0&`>s7G~&_MJ%I^WMY*uwVQkTVXjQ{XPQu%{)>2ZVG#!3O_^Vf4vo3J1{Qn*RBbX zoP5*1>)b}p@Q44Ih~_7+COX5@kO(0GTqPx^+b~%~9CJLMrN;JheyKZhAgWW;YfX|q zCnLsIRetAl(b!UoTbq&E>Kf;a%>n$snaE+^n91sA0!?p zbY^dC_~vK_IvF*Khi#kMNGC91M0Q2y_t-rZdD4%ARe;{5Z?F}fSX3)=C4k*8{m49` z4~M~^)r*>fbx&mi-F`7!_2LxLu~ET}*s;_~p7%Y=ZfkO~d}?DzQU4fyoaEiFGa*o*EtAriNyZTp=HV4=0SU*|>1kN|Dj z21b^9r(;-X+9>tR1GNGO1A1;?Z3TZ zJo}y??@J5s;;Gy**Ajf95Xhx-KRN$SR6yvEO?Hx~&=W$#$^M0pdK!JzpFi{%lVQcD zSH%;CpJ<`W98pcY?9$-ziTrMV@;t^(_1mol63Vv8rhQ&YE*bL}YzIQgZQn;s7v5 zc!*7hrn-*L9m4*c-%2JspC5&6#=co!^LUxK1rkBNt%|S&+UK+^jB`zv9^8j~T!^FsX`jJ0FbH=* z1Vxy+(#a4*k{%OFHwupirOL*flq&v~rK@3TnkMg~FvU6pMK7kBXXzDedeHxp=Jhr! z_j{^0uO3b-OXo0G4#&)?kIhw7S|!uD|6T^eJDN9T;n(wx(A-kdq_=2kN zBkS3a$~^wN<~_7@OQbEr>$J}fEVUT?bJ|&$tTcU^U5j2SHa={2y%}vlG}szH_nzii zfeJVQOf8v?k;2V$=rE6HzX+K7Mjqhl!iJfc^b3SQpzZ=t{IqkiTTLGO7*8I1^sxz| z-)@#6#`yO1-X{kIbjv|oy+g}&4c=_rc$av z3xiK#0|%8)vp0f3;v#d1r?S*|N5%Rm0UCEF@;w6A8#;BBmvtXde5~=E-KD)obMZ}| zw{nIYb<&Q&ehe1^Ky~4KjJ9hnmj*d=v);Mq_BP)7xDDvzr=r1HIH=cK#;EUskMCBl zg&t#f6wkOs3Qh7|nVi0GZ$=z8nYsSd*GDkd@$$(&%4!kHJ!jqIIAg1@J=g^?ZpVuNhlFjY z=L7VF;^N}%(mj+zZ3RRwgqv)CTL57HTwuQcabQ(;#>CBL7%?nCKi5>X9mjqku?`=A z+3IsWFur{d#_{>D`X3K+>OE9hB>7+b-#8eEE@;RbFb|n-ao9fnvGf;xS`Jb7z`-Lq)1J)i* zmCg=`jN5LBaRNIQsF)xXGTv>)%&OMQke%=~EOr$m7o)3#o{H`j!HafG%%ugL7?daS zLx`OUKa}LjdGxD$tusgB*383c6CB@m)q|A<0;`zY>YF)q4F$hlm~Yi6-&;oFEMmW%AZm5G?Gv+;MldDQ#r&!?!_@$V9(5!QtaYJ}*-B ztql`X8F!z>i;fA#bQv9>(LjU2jlrR@>hP(^7fZRsgw?+jZsX9bogAa)O`Wo?=y4j4 zrJ9ciLe*=CiLqFgxEgxo3L>3Ds%NJP*1Mbvm9UGgfN?4Z^Df|l|7l{mZE^(6d?M*FSV4g+WytJ3VLwj~2VXe}!-S zRPb26H9a_S_szocY8oQPZ#5ggFe+H03(N!r%*59`kbVFY)(JwOs;T8oU|1>z?%koj zeuM8E$R_IdPnW>_TuT`cwmw;e8`i=-#RPo#R%4{yXokma!ehh6vp3dc>s0%3j8+0* z*<81$;H*%I*e%;nRNgG3?eeNG4mT1B2RpU6tVE6FwWcL*VJe8h;wEVfTIp4AUJO5b+ibFa zL#Hl4jwGyA0Ybu?e0L7Tf3{&*Up=?rWj-)UAU!wO+BYD;|#>4_jD3>A%R$dlFiHSb3@Gm8AYlSduamR}at#i@gB)NWY&sq}) zcUo1Bx>aKn5P^hEQvRi!aaQl?%YXvsg&T*yfb(>6hBS=6ocd!P*s2#S)xw8 zcC}sex&Q;*;Z0w)lQkm;2}yTb7t_CALmC_A#8eeKF;JuEeyG><57G1TngZ8#$!a-3aM!>lWIjJ~a20B^epjY?Q1N&{4xEtm==x zeGN`D0B4fu1V)c({5Qb9QVqocziFn`GrB{{@USRlv3WA9>c`(?zzs3!D zKQY0%r+fMCFmFWF#!vPV^!it$!X5J|`TKy>DbDI#oy$Wskfi=FmMbB2V}jw}KuW*a z3Q)XRISF)9Qk_}Brnn;1XatC#3l#;cY|t9;Z<5Yw;-b{$;u6EOB%UC--zo_=5pY5l z^+x|^S{=)5!v`$GpANp=t7t2-e4U5%Bo@UfBMU;v+X2kLlFms_2$sN&NrDpqmsvU) z8f~ss4jQF2a7WQ+7B(zB3%kjP(|p9h={VpsPr>8^G{@3MY zQeJmLUWaq@9uI`Q=v*81Rvn=}@MvO;$ETq|;#O0N3hgzyKr{t5YlW?R5}1HkYxj^f zFTxDm=r^}Yg%5UifW3@H30n_J-yvXdj7@0_6YZ8?LaVdi1*z}?g`|uYTTPmwI{))7 z9%WXvaW9vcQXhR{kQ$L>){u-CGPE+!Ti3OcXGY9rx#5T#*5?8?T`)BA-A#)C*zCk*TkA@?hf6BfJp{IKmT96)SH!0NaE>!R}diY>Ae2Pj9(90bwR? z{e1h9hg$(#(YSIIu(l;7YKOQ2IW6avf|Uw`MoGjs?gpIOOF|lC#_Vzre4Y&j+3!Gy z0V^0uPe)^mfp+KGH-ME7dNgVLPA?bGkXEZG&dAdJv`naZL-qBuq~0d7m;kF$MGN1L zdb6-ZINq(8!TEsF-aAR+Oo-kGlOx@FapC1<)7Fcjr2Ue0>p@ zN7qV;tCu&$a<(`(YB62U!gsf+^7K^`+3oL1E3hyz&gxj>skk?2ao( z@UCF}dqzM>S3t>_tVzdjnWshv>ELgVKi_AaT%{b&xSksVTLGAKb&8S=1BAV9KV^5l zo9a%-`asA8l(3{3 z(EL}PjiB-oT$D!{`S8Ez#E%;0%GAt;MR#UQ%3+APpoRYY)ZFdLm4mzwHm?>)p-Sh& z>s@u@7s3YTQ(jeD$4(J9SAmMCz+-cQJ3?16V>!Uq05BtH!LNCEOj({0+;l)1?Iq@H zUR+!g-1=N# zm!qCWwEmWOk=GoQTlm-);2l?}{7Fp}wJCi(8Oqh=hk>DA(tAJ#_>O_Aa{gxiLHu)A zt`UYI3jX<&4SY-T%R%E5id+=Bc8zQ1)tNBwFfjgnFUXvfCWprliV5nd0w%VzoIrj^ z_2vpw(!6YU!(;QKUj44>$y{4?Jqc?zUA@#zm*35wJAZ)Dy1MLE!<;`4QBChA;2!c$ z@3iw>^={hA^Bk&gv!sKm0HtEXL%;g+tIwm3=nqCZJ1)w+dAK>LyPWC^tkkCKUfc_) zyK0GKov1nxfJIS{a4~L<=kSH@BtAD%KbM>3&3PHsJad)j8#{Fe4pqn(`|lgOCzpLe zGj)UN!O^9T?@LBflpGzJzK^djeJth#(?(6yph-=6*{O$l`^AsPEe+}F#%naK;%8;v zQFJj8IuZx7>I(8hogIt1;QnO~>GtE}^0EEw|K)YW{<^SQ{%attE3ee%6cOM+j2AAJ zfqf*P@|_(zV&W#n_pW!w`Ra=(n#7hDqh&7)%Lk9j=$ZGQ1Y9Amu) zz(HxsIUp$Gf8Tl~InR~L=`<}754yK*dv&=b7r3=O4$k4g@#ayijEnXA26 zGdS6rOTopLKLKJA%HBJAa=}|FGVgt);F4z?nec*eUDp=e?i9m-1qUZCi>hG(s=utQ zt)V$0<;5ix?GR(0mo^H~xd=p*LUW-!>!r!GR~^&5W^BhJKy<3S<@%2l9FG*$OhrDo z9vdJ1MojPSNDm7l31F^sIcjMc?_7Qw?PPRxbvhUn7$0G?X>E!4dSIdIti8k4_XMqV zn|H0!Xq&TW!F=8f?o$;9TUN{Z9X?zRK;|Z>m4}hZqdd>i_@sG&8pFAwQmJxmCNQ@6 z3>}v2+3}x$=v_YU*H>ikb?7=@ z`1a^6Yk!r5v)IU2%)4;qtv*$T_MFseaO=ELYvx{jaJ6_khG@xn)uK+nZM3$Ahaa|D z7QS$Kq4&j%wr!{`^5sJEMIwPJcmHrQL3?_Yg~V{kp_)Ml#pyI&YU+t^W!B|Jjo8%% zcSKgJ_xNFj%!%Q`#N_Ex#ge2P&)Ft)=_;QU1H0~p{M1{m8OQZF<_5&qG9wC@7Z>mM z_TR$&S#&)wS+A>`7-QtJX^6|&o`N{c#~A~e^ttD{wsMv44Nct%N{p{7<=Cf-+z-FJ z9Ku-5&849~HcM2z7jOq$HdS5Eu8a8QF$)b#|J-oNnyJk*S_VpX)!m1|ROFw&xKIaT2QaSxd8_hi)2TL7OBL3{8ZI8QIX`ZuP z_oCs8;4d{BOlQ3+_^X=CJw7e(gF8m~v1j`4+c0@kIgZRqZOx8V!<@cDq7AOBj;xac zkbH?wPHUZy_s^nEQ!h$%5EIo3^=%YlT;A2@6X0>4`N=M)(yFhZZ0G(+`0^QuKABmL zqy7&N-eep-oZ!LHW>#~J=4B3)fxu}8*-?d(S~FLuB1 zU%Gd97Axtr-DiqaO8fl#&YhW$LtVir#{oKs1euf;9pa16F6L*KPJ?(uZ1&#{1-DIH zHf8QrZh1KUaD^<^s7-GN)B|+O2u$sZ-j;2TC>rINE3FQqc`w?Mk*DpT3BpQ}S42gGGi`J}B0%?HG;t~4VNguLc~=N~FY?S@}zLi0F5`*7URd%O;3IrviN^x0HX zf%e*kzKJXF2$4CqMH=k;(orI+20sw~|O zh!|me;-{UHJ(39nXU{K&M${BrSM#FzFgotNk1uj@HW}luwP!CA$g zaTjaRZu-=pdGBLgVU8S+t{c4F>!{0}KdWUunHDDM>ZRuEQ|Jy3Dqy2yUQ18?)vm&c z+tpKZQEwom*=CCr>H|H)a^4r;6qlyU)VXtoAB@94cLY{}VhS}tB z2!~^xK@s00#!6+5q zn@r8dNAVUO+$1(6u1)w@9Z7?{IZDsFGU^k)w!XcWHp!T}c10L9hDY)Ou-!skq|Kxiqu!@5TBbczj^7Mt|82%*Z<-oW`OH10j$ zX8Z1xu-cT?ZIbVrGc&!JTAWa;s>)4r##tiAWV15xg$iso;Y|JnM6YJJ zZfrQW&VqOzt0Uq0)x_Jxz{Y0b%f^}7bIh^EHk-2<{4XMfzzYeLKlf^S{*CXvSGpdU znWFZC$L!Bh%!D?`PeTfq-^Ang@G8p^w`>kv`;Ij)23npeu&ZOQo#3W!gZVuOqYuB znpY0x)uV%yI5v)Uw6UD3`f3WBW#jp^u9@3irKTsV(RdwHr9arre9;JEWwnHPT7#x} zvi0(f%XHi^jw|UMqk-7r^zDh8nn|`ao>KbJknReepAXuvd;9{j)BI{r#QDtUrDF(| z{fhnY37=NFwTpB{;LOWz>P;LQj`(b`Oq_r^!r7{LbUXI4g#A zijf#pn0A^=|B{xN_)z3@;3HG2U;h^of#zL`Y16vXv!KcaJ2lA=_ex>IceRDa8ZWMb zFWeisTEbDzE|O`9fF$f&CNm{4MFJOaEM_g3R~Z3J4`k@Oo=zIK^VxShpCtyZHU&YJ zB-v^7fdFGib-599t2IK=NbRu&7w$nn9IgsgE}}H96ACj?9?$cJBhIrNh5`)8PE=>d znaasVjD3YPKFXP{CZH@Q@+8zoYBKHrST;*1g^-mcSk)JSp?~yy6>vCe}5K`S)HtvqsVc!BZvOQlR#mUzzyYh<5 zdC3$!?;+mceQj&I!oq<{>NI@0WBormWZHf^dtuAD=7)i+Q}-o@UzgqKW_~lQQPv9Y zR9AfUUTdYWR<~YadO6hIUd(S#o8(zVvF2fb5ai7;aGl;;4ww*Va$W3+1515%JUX^o z&3$sX*wH`1fOcs4P=j>Fb3<>D1Sh#~D$4s+zh7jIu!WNFnP8B`>23g6<4;@9enfH` zJj0^k2F`ey{*=QOkUe8s9h~~EEntzPxL|8dM1UhCyn%lnwNetf2{5!K*|-#!R@gN~ zUf-&csD)i2@Y}sWdZD6W0VyZJ=2QJ@M{@y!WN=+>8t>;3jdyBOY8>m9i^X@jGGfUc z11XDHV{Em;=10v4cye1dd1^HKSR=jdTXQdx+sgJNZPhV<3nO;8X-a}2br4147m_7L zL3>F0wb9L~b)J31Hlm2FO-$st($w#&fFu&h_)j& zC)&v~hk)X$WMc)OyuU-n`h$77FLn0ggQ#Zy6W0OeN}5tT8$z83RRcpyr|SOiQ#A>H02Pwlkc0UW!gwc^9Z($ zK`RtZ*sN9e+z|TGJ5%@ag``J!y~+CVc2_oidLp`5pkbo<&Bj=h_{67k3^bS9yeW&htD00c$5j>IxJ2+nFsT``)jdlWsRUOdWeC70D_W=`JkwiqT>be z6iV2Zq5yoh*G5<7T9`zlQ}OO8FRyj?m(B%Am@?({`!P}VG$fCie!;mtVJG)6yT~%! zrC85~M%(-4dU9Zpd!=eZb$L$ru@+%oU3ej>hq)O~bu z8ot4!jW?@n%lAEae*bXmR}lna(VrLexTAo^AUKwz zi^%ZQR%0jAR@wD%o)=6#Pn*q~pk(O@&o&a3MqtwRyXK;vXD2m&4BuMUXFnBYPFQf0 zRi`&FnF2tF^e$Pii29ivwQ;>6=7b9*#%!Z0mWd$He9RSuFzlBH{nN4IL<(3E%DhMr zfOFdReQVip3jyinp>_>{0X*{pJJE{E1hljRyOY9rpG6p(BS|&@0_l$w%3*mUTf`Hk z_nK^5g(V@8IuUR0w-US%?@@*%c7+TJzYQJy`Sg9sQrg{|nn@2A#Ujt3Hd|UVrP^P` z-0r&rwDSY|yOdDl6PCsFe4YOBaM7y6$_nUqE#1eNTBqWPK$jf7k8aB~E>0W9qz^eA zL!E)9hFZ$77&+9GHWzs4+%F66AM6H&T##%vd|A90xI6k}BZ77sYU0pacxGo4 zjdI$bCt^%&btLLK!e6^3>@Uyb&-knM*mq&Vq>HcU+pz1tua!zFUiSE}B9#kz$C;2# zFB<9oRS<>yP!uK9nrxU)In?#bRwk>&2L@a=F`d%dAKp(v`PTicMMoo}Ak3sZ0$D7- zA#RPBn|L+AHBY4rbt-mfU{T!~rP9{Hvs1K~c`Vi>OwInPA#T*K@c240c1a*f;3IJ7 z@#@xy>m(Vq{n77MD=PeMrpq!!=F>Af#Cp^#i}BT-i| z-2dIhd<)eGrivi;zYSGraw$=}qqmesob8)8Ll5h~Cc%U=3>6(=G^~NTf zr%HVKvsba-+XR6a>~bEy*WY*SIep*$nuhn_HO;;kQ?+f=z9dFHh~g}(9!)Q|>rME5 zXsrr0akP58abIE^)%{CQYVsj)@ehcJ{Ei07gfqWq(|kFUVNsJ@ZEGns)bycO#54>3n`Y2O7OtAd z5-DJIIB_8?f7;Yr3{-LB%<_k!sjFb@Vv61_dv>m5Mye9Htb8-VjY_Lq1wT zB}Z`RARkf)vV{dn8<}m2{&c|ajGqlrrilMYd{$EF6v9Si7-CCyRWp`X`T;=cpG)`5 zBi3XOP2Dp(3hCXC`d%h+=%W(0Ef^RZiP7O5Z$e{c91|+*w)5|8!Bx3L( z?XFkSQOkCyHNL(*6Df_6RvX%8q{SVU9WSjoXc*s{A$4W`8lZF^r~YB>h`-d9CVUa$ z*6~MFGP`Ahotks3MZ|0<0d4&)&+9om!kKT@M&+nmS)_hpTYRlgQ)R^<4vXnS@n81K zRe80~lJl1$c^Z50%cbd!rE#P-M3*9}32OR96`P9*GnpAZOCA&ircPACPo0{pt;UH7 zGoBLaovO-TsbZ{_tui%^_)?#!oW|o2%*L=cmCqzsf76p&7A2@|>k%w2YB)&p;E@W? z4a@IYw2xG4t#iok+Ng7Q*s`0q(1E0=C|~zBT5)%|nhp;5h|WLKNXgfu$c@H&Ojv(C zE7EPFQ=68zdOEZ^uv54%zpuGk0Ub;+y4?S=&r46&P(JDx;C$*hV(wxz8WjU`7LdnXP11 zYjomLhIgSf(iiz&1tFxc8=@T&jQ=@*Q;9Igvyo%xL#iDyd;h1^u!;+tGx_=7M*S5S z5MynOwgh4?PQ>>!8xq(Il%BJ7jL!&b3RaPQnf5cc_)bY3R9_L4ugEtzeJBtPu0MT? zvA$5L!_iT_#~glQ3uFH0!-gQ>3Jq!UZ9a z^{7tW73`rK({6ejm~$4{EYZ%LT4+-RF0rm29#%Viuq(Kdm(R@>i9$@U37nV)nXq@$ zN*BV3D|MO@uUC*OYA6Uha&ySnm~zWP%!}Y!>4jHL6GVc?s4eAreDZT;yQ)>9hf*3C z-{X2VDct$eH9-J&c3IOON-9j91`VzBm5t{qbGwXfwc0HBB~pbR_L!if=p@-zIax3D z;=DP@JiD)UCJ}R6|VAn1w*+qcJyOySn*A}em z46SjtfB#-AR)$xhD2-FL?ziEbYls8g&g&JH>JOa72_qq6Ka4aDkg(SI0_Ay%uzIoL zRsGrN@sOSj{hS$TKDWT|g&gmN<5bXo#P_u@?p+R9wP92?t%`o(2TLW=9Co`KcgG=n zQb(88>MB?J?;_#H+E??wF5ktiU)~*Z#K<}_mOI0fs^0dfvcczZj zTA88HxQkf%nHI->T)0= z*rMrVR~_t)oKy-)@t6f+>rLfqVfJ+8=;9qIM^p*?M)W0caHOWsBcZ)`#jl|d7mVyS zV)WzSSJXIC(^yuDnGFSEKf%b<)4q7m&S)Vmb+a5VH9C*on7Z-^pQ{c0W6W zASW4N3e|Gpe#h0Cq8kl)Cm{zq0>ee zTpQ$h9(al1&=!)HMkDe`MJv6IhP%b;N<|W7-b>7k49wGI)^aG8@wQ?uXTBD>l>jwo z=7b65UiiY$v;y9$siO_)epRSqSfXrgOkrR)(_7uzi6>D_uQy28)83jzX%j^Ws!kW= zPuDs*K}h}Sb(FR4hxE>o(Ud-xayoH^?s%T@XG#!vH~ zg=Ql%KhCUFa#{0k6Ik-!VikjyX6+6rjzC7?`(B*+BiJN4g#?sr2oAE0i1>A8*0z-y zPuWbOK%TVv%*Qb!D;^!*-B?mqeR)FR;2V*u=#sT1H;EhPw5{(KSnpXqs}x{WDk3~f zfWo?7sBCk1nPCiX^)_u~2d%kpd(bEtxQx}O8Bl@+k)TG}mLCJ~EX{s;>)n;hEL2OX z7rcHi?N|Pk}hks#fc zU1WYcy}C{p$&|Awl{kt(`t12|w2Pk_GXNy6B*}%iwtklt+51HFb8&{+u}5~#No-gY zFW)G!Gx%Hg%6$<9aR`43TK$fvamb`@h#*A;IL)f+dGS)HG;w!e#V2sZ#n`RGKVD6z z6aJx*k#2~3@80`X#pIy%so@9FW#H(V%Gk#0k&Ar#2twc#vY}O-qKRL1O>O5L)ucgM z!bsNAafHBy83{evOtrC=1MbrR(K=<0QRz{UcASF4(4u1V2^HwR;Y;-vVnuGGy+@tK zJ5MpZ72Nm_pBZu|s;Kb|sZvRtWJwDxc7>4&h0undh8bfW#?r`8c3E2d>=G3vL`2M(X6%C$ zV~J#)nd}*|4T|i-b7oMlp4anwJFD?g!V}miq)s>PF{JQt(ggM`)-9cX zswn+IzK5>Wyz$pme3|mlsB6%SP2$xWoR*-5?iEttxJu+P-oZva4d}ed*?YF|du5Xc z+#QVOb}fYlC;io3cR{O9)>x(C!ydlF{dzS2t`-5SWv--ebr&u_D2e#g+n6@LqqR9K zvcNbd?9P2S$q!RD?0&Yaias23ke$kQ+5bu;m)Bqax`5jCy%0{vv@SoiDBM#|w*TU@ zV=$*=jh6W{WomZt$s@SpQ?8NnNhr$rcwXlSnCDK2*J!eH5xiyPDZ{mOZ^EQsG&5c( zxrZ1V&cL{g=~C->Nk)shT`EY#pT)lrEyu7M-yN!=>c8I`SEQD*TD9v;U~p zPw}a%CodMZ9c@u&Tq6y6qDboJMB4jWkMiRrW}=DkX?*)tJ7Jn*?ZKY;n13iM&Dfn1 z=U;6HlH=siYS#zc+Mxwh*o;68a0Y4{jns{i^UDt+?^LNz!{N}VFUP=yCgRh%c8M?L zAZ6_uD>A)J3*1*c1$@O*b?-D&bPbW>0^2Qv=*_wpB zSHlNkg6xh|O}_poyFMJLGbLlU?=UmnPSmNKsaBUsCbCthJ|J-^dDI*HAmn7G$$N!2 ztGT`)Fhe(wKh&R_T_2^M3v`ral(^^p?0%?kV%DJ|Su4xZl1cFSpKno@C^3ghhQH@I z!xkj2hO+;;{g6bB4I$+(eh>z-QqAC4G|O~FNBY8YG@wES>CoP)h$~{?T>;0Z+G^mN z|B6i7mUlH|_Op%OmEDaOL*fmOY@qx!Z%3eD<2h{A5m&BX!#^&6ve(Yvwxbe^IU-eK zRvYJBd@g|z_1EHK%jaXbHY68%!i3!sJv$9Sgx&9bmLQgKi$NObgS}Mq$5Bi5j3U;9{z1iRrwtTm+ga)3bhbLe1^z2zk2$>W+INqjRaoSUj5 zHi@Xu_nCgzOqcp>V*BN@gaaoh9zKf&j;Wr%%X)Kcp+uqk)!^6z=ep4r-%?7i#Vk|7 zO!XPyy%>bJTV5&;SqyBf%4Q@$d9whbYulfx^_}WiEvcdQ=eKiD7EfJDk@ZU_-A^TN ztjU9D*%8s?$^F*#Voymf&OyP}eSFeO1>WqKN>d=~J;vz`rVU?hSaBtYpB6&y| zr5D$Q+6K28C$&xuQ;F5LAeg}QWL)NoWOE?K2z446mj*#{@V50He|yNv^pWS!5}+QP zn@^!Nv4Z+wP5L>qu0TacZ@Hai?>IIeNEyWt0bL%iy&AO|#Jv~ne>kyr3}VNkp$m0% zFy!G6@MzH;|8#@`qq442r?iU+An|xnNkZW6@ga5{4X{(3{vHfdgBcQNTwR6 zrJ|I%Wq~MZENt_~g*{Pk68_rcWAY4xHjIOQ8D~YVLhdx&wBToiH*+X^<7;RjKzM=3 zeFod6T7+EkM{;|@>qF|qP1Fs~8dC+mUVbM#Gjj-8CFmD9gQWpqU-)~A|3+?dRsFlB zwzkn8%(`Qf^Bdk!+V7j$aXtndM@aQ{@xp1btq-fDIJCJKf;>i8q~_q8fGvBfr8o|# z8~w9+n7?!Xe_QdJkfM3F`^zSUlE*0WS0XnndzfYDf3q{j5K_!UvJ52K_vEfqCVL8D z71n`NhIZV_-o{}NF~5;Bzc9~*3FOjKsiET&3lQ@dSazZS!)Y1tAD%hm9n|r(Qx5{a zP2jiaqgq!lc+1UL&YOUrj+9H3DtvV3lfEBcpz~(e)>k&jZ9m?=Lp0^>+IrU^m)iv$ zUZJcvRk-WNGUm)Y8tcJ!TmQ|&YNBKp<~wom`sebgx{Cv&xV?VKr`r4d=n}-I*F14v zC-Tt&(F}uYT5L!EOB(1nWGbi-GY2OZLqSX)FS6DoT&hw@2DFt51=*X z;nLPCB2|`hiAFhkmYuVii)FS`c}-opnK9;wqkgX%XnIlbD}w%eWsKs7-L<5vAa=W ztpWhOAdL9<4`j?j#OS~xMcnNS3X5cj^~#&?yrcf!I8!d}=2zR+rV>Crd@{gUTmLoJ zg-c;;mb=qRd}T4hMv%jivlLR83l*f+o9!vQdZ<+4-5d9Nq-F~or$|m&a-ZZuLD;5O3c)h4aK& za+cwc)zpHEX?al7ylFMJ6Q(xUuqtOAvFqP_hMpeYJ7mRf&;D}cB`rAFLP$ZD>XVQm za)hQqVV+lm!g+at%Sl{l&9pEJAs$a-+__#)n>$z!OV;^+MiL3b$^||v9;>Vt9Z7x0 zSq=jvPFJ;U^8yojN zFRQss$3Q@DCmf;G(`DyTf*kktt0r$G+j4gVZ?StCKkYdA>t_2KeE2_zKp}@&?bVdB)V}NazS;(WXoMQrA9CZoVPs&B zv%2g0RLC94F9I?>a77O0k&p~wK8*A9u4UiNhgay)Fco6)V%-O>ybibNP}x{ceUME2 zs+ry$t%Xtb+P4;fu1=0(injpcMkJ1$I}45OJiRXJ1GiXmIeBLU8qLHunK%#uIOtkC zRrpE<(3h#j?d!}osz7ilC$w4ctq?8k8V;IDOt|Kk9`Svv4fu#dSwn!0JGG_{0A-m- z>6e>=NQoeJ5%}%lc&aI-BK16CFS*wzGdcTaf0Uopj6y#X7zHP|uz+HAbZY04f8kGB zX|z@o0K@I(?*)^Vr;9}|9j=kiicj#i@S1jc))T@58SfoBAhn@+juGO;?bZQQp9^N) z-!GKQKA&*J5bDns2UHmX*jV7UC`Qq!VpWYM5=u=2FyC2kL^(k2e0+kYjhVuH9VW?;j2GpvV-uJcJmLRhvtPl*e>up1*BDmkHeb*ODF~DJ3lqIiC(VL~V#e<2d3(nJ0 z-}KQZ>rU3NV_pL~Q(hI;{2(^GMr=YBOn>3fsenRq5rRUAR5hT zZ{ON~V5&M^Q8(u1R&G?OZUO4RnzM~VTWtb2AL91K>^s3M*Awa`x9`=5Lixv=;rQ?% z1TA|=yJ40QC*HN-v+3j5r?X3G84)}6!gZ$BD#}l5Ul$GEs`^uvT~Yd-woS9pH8c(S zqBQrU=!-*q@3$npM!V~XsX&F4j!1EkpSgxQ$J)b%gggryTt>h9zxr0LB)HI+7|2DR zgxnvSBZ)qDZ-EFWbDBhyjeY97W{wI8`#|K1??Nk%T0m=e6u|2C3)uCy(ab5XYX z4Cmjh{(5)vv|vO^!-$_6(>Q6Er>gFxU|lw2U^DEbTLj~TaBbGf~Qwg znIv21i%gp!)dO&^ykd&ME3ioAD063iX#;J=O8($bdgDOe-@7?cf3eyLrLfTy`#wi+ zMUfEaR?ak`s39HZY3zI*pUVgUQrR^_MNI834Pl9YbOEGL_Yi0a6zdJ*+eYUxdyQHC lsDl0hdjTbAz0%yF!KT<18~oPGwS~D@U+1cJ?s@CG{{{kPQ~dw{ literal 0 HcmV?d00001