From 336fe466bfb3d6aa9a260913b813eef5ab468c85 Mon Sep 17 00:00:00 2001 From: "Lex Darlog (DRL)" <3897975+Lex-DRL@users.noreply.github.com> Date: Mon, 21 Jul 2025 21:14:38 +0500 Subject: [PATCH] README --- README.md | 57 ++++++++++++++++++++++++++++++++++---------- img/screenshot2.png | Bin 0 -> 270769 bytes 2 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 img/screenshot2.png diff --git a/README.md b/README.md index 34ad443..593ee58 100644 --- a/README.md +++ b/README.md @@ -3,25 +3,58 @@ > "Simple is better than complex." _— Zen of Python_ # `String Constructor` (Text-Formatting) nodes - -There's already a plenty of string-formatting nodes for ComfyUI. But this node pack takes a different approach: -- First, you prepare a dictionary of named sub-strings (chunks of text with assigned keyword/tag to reference them with). -- Then, right before `CLIP Text Encode`, you construct a final prompt fom this dictionary of available parts, connected **as a single input**. The compilation itself is done using python's [string formatting syntax](https://docs.python.org/3/library/string.html#format-examples)... **Don't panic!** You don't need to be a programmer - just look below for a quick introduction. -- Unlike many other _(giant uber-mega)_ node packs, this one strictly adheres to the modular philosophy: it's minimal and self-sufficient. +... for ComfyUI. [🔄 Updates ChangeLog](CHANGELOG.md) +### TL;DR + +- Build your dictionary of available text chunks once. Pass it further as a single line (bus/pipe design). +- Easily reuse these sub-strings to build many variations of a prompt as needed. +- It's especially handy for regional prompting (aka area composition). +- ... +- PROFIT! +  -## Syntax +## The purpose of the pack -For those who are unfamiliar with python's string formatting, the rules are very simple: -- You need to name (set tags/**keys** for) your sub-strings the same way python variables are named: only ASCII letters, digits and underscore are allowed + the name can't start with a digit. So: - - ✅ `valid_name`, `other_valid_name`, `YetAnother_ValidName`, `name3`. - - ❌ `wrong name with spaces`, `wrong-name.with:punctuation`, `3name`. -- Then, you simply put your `{substring_name}` inside curly braces (no spaces between) in the formatting template - and voila! This pattern will be replaced with the actual sub-string. +There's already a plenty of string-formatting nodes for ComfyUI. But this node pack takes a different approach: +- First, you **prepare** a dictionary of named sub-strings _(chunks of text with assigned keyword/tag to reference them with)_ - of whatever size you like: + - it could be just two mostly used chunks, or it could be dozens of individual descriptions for highly narrow/specific parts of the subject - your choice! +- When constructing a text prompt, you can use **ANY** such sub-strings from the dict (or none at all), in **ANY** order you like, while connecting only a **SINGLE** bus/pipe-like input with the whole dictionary. No need to fiddle around connecting a bunch of wires every time you'd like to slightly rearrange the prompt, compiled from the same parts. There's just a single node, single input _(with all the available text pieces contained within it)_, single text field - and that's it. + - This changes your workflow drastically. Since you can compose an entirely new prompt from the same dictionary with just one node, you're no longer pushed to reusing the same spaghetti of pre-encoded conditionings (for different parts of the prompt) - instead, you can just build a new conditioning in-place, right there, next to `KSampler`. + - The text-compilation itself is done with python's [string formatting syntax](https://docs.python.org/3/library/string.html#format-examples) in its most native form... **Don't panic!** You don't need to be a programmer: this dictionary is basically just a bunch of "search and replace" rules wrapped into a single entity. Just look below for a quick introduction. +- You can easily update **some** items in the dict down the line - to tweak only relevant parts of the prompt, while preserving the rest of them. +- Unlike many other _(giant uber-mega)_ node packs, this one strictly adheres to the modular philosophy: it's minimal and self-sufficient. It's designed to only do string formatting and nothing else. + +For example, in the screenshot shown above, this is the dictionary we get in the end (as the `Preview` node confirms): + +| Chunk Name | Chunk Text | +|----------------|--------------------------------------------| +| `model_prefix` |
score_9, score_8_up, score_7_up| +| `char1_short` |
1boy, blond, short hair| +| `char1_long` |
1boy, smiling, blue eyes, blond, short hair,| + +And then, we can do **this** with the same input dictionary: + + + + +## String-Formatting syntax + +To build an actual text from those pieces, we utilize string formatting with the corresponding node. + +The rules are very simple: +- In the text-formatting node, you simply put your `{substring_name}` inside curly braces (no spaces between) - and voila! This pattern will be replaced with the actual sub-string. + - For your convenience, the string-formatting node itself can show the actual output to avoid any guessing. +- Also keep in mind, that while naming your sub-strings, you must follow the same restrictions python imposes on any variable names: only ASCII letters, digits and underscore are allowed + the name can't start with a digit. So: + - ✅ `valid_name`, `other_valid_name`, `YetAnother_ValidName`, `name4`. + - ❌ `wrong name with spaces`, `wrong-name.with:punctuation`, `4name`. + - Don't worry, the node pack will warn you if you type an invalid name. > [!NOTE] > For advanced users: -> Internally, a built-in `str.format()` is called with keyword arguments from `str_dict`, which is literally just a dict... though, an immutable one. +> Internally, just a built-in `str.format()` is called with keyword arguments from the passed Format-Dict, which is literally just a dict with string keys... though, all the nodes in the pack ensure they return it as an immutable one. +> > So any formatting patterns are available (like `{float_value:.3f}`) + `Add ANY to Format-Dict` node is there for exactly that. diff --git a/img/screenshot2.png b/img/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..15ff4c0139770b92779f032a7409524e68a4c6ca GIT binary patch literal 270769 zcmeEv2~-o;zdwqIijcN0s0h(or78+)C1QYR(PB##_oXNSQLzdMi+~W42q>u{;!;74 z5Yei*u!#~NBmt=`A_N5?kc0tQf{=wZfo$`?gT<${t$n|9`p)~m)1K4zpfk+OoqNCc z`~586Ik|Czv+;x(6ZG`-jK5vCX0x8_1uV~xg*1%EO$%JUfb->AUN&R^@LRnB}3 zei-Audi`oWz05cxji&+ldA#4cU4eRfpB+K|9o2XMeN;~mzWME%)mx9cOSDSH{
sitting on a motorcycle, wearing a leather jacket
UB z8Z{m3nZ8h&zCrLOj{^j;M!|hw57tYJT@;Gh0;?R*0zs=p+^m|kW40eNf>hxKX2L$< zeho*cZiOfdIKmAOj~U*t70!c)L(+q+?;kA$Q4Th=iCNL@pU#6H$z7Og%^H6zd2G7fIt_+YcvNS_kFKvM&J`$*BHiTPC zCV3qB$QPHc#?vN9;yR>KO}3|vfA2AtR?TD~#sg^PILt((n($qj^J9lc;fo*_Em|gs z)l28XdErN)TR2S#TGM{Qce0N#_xU3CEWUX6L&7-$khN1=z8(w()ceoe%gx1Z#9oHT z*667ElW*wnZ|A>#I_j<1c-nlBQ{^BnH?n#W+d3Ga{xWB+FSj{x0Axx5NDX9Y)Sh}t z3?HN-=tEud9$67CyyK0wNa-6Y50MYK#Y?l>F4A|HNWBO34dj&IYX$DVJd}3WDw|qR zDpOR2quieB3=+M4)Y7lX&a2Em;_uy1?qpDGGW9g$NbmYJ)s=Q7xHU{>AAegxb94mQ zAN|8=bZ%!Wojf&lS1WuBB8=t3FDQsDv(#{CK3S!76(JxZaeYQbOpu_?m>pW0b})PW z8CAsSaw;PB5ye4AM=>PsR+Oj}&Kkw&>%$=z)T%^nZ6p=$ PxiEC)4qilfe1S5OMSeM0&m>pZNL{<*A)7YRWY1&W-Go9l~^c2WqOO zDHEN8h +gME83;{|91SJ8M_b^%uXs+Gd8 z#p*e2EnKq1Jybk}3F-!jRCLCe03Z)b<>KuXO6I3E%JC*#65k DEsUg5RA&W8{Hil(GDSO;l*M~0W$Z!c zAC>N U-=H-5BkS)+#r^OXpaD{SC{%DwEn`Ci)~_>hkC_R^ zCwKy>!5S>S;WY?PO^kA$+Y%nqpn$7a>OSUSU(*I9(6P?V&20*y4keO+M~fVXV4bln zTN73y=pX^m&=T+ay$zgbax~sba{_1O4>B5!I3n^SoL_c{Jo>cb$Fd=SYiD9Ut&chq zIP_?TiD+j=fZ!>}q>CH7vp~(oJSe@MOdGIHBR%IDmo`q=hcV?lX@S4-yc#TfAwws2 z4bX4eitH^S0XI|tMS2itJ_wcC6z2JMX*{FvDv|VFwj&rN_|nE1!gf+}B?*+iB1hg; zqsk!ft9HfEvx11xt!v&(x<6Q+zu17*p#W)oBLDRJM7wITSj|-99#bWkOEh%2$Xl+U zsgR~eh~U6|XK3$KPnPH?fK8l$2Y&7vHNHXKIM`&Y6u45=CrqYk2GG r{2H@oljf56 B#uhx-X6MWEK+I;#o{{&ZA MMn3bJ)!gK_7(uyR@F*!-d6KGi}i0m*_!jP^>|-JWvBjJBL|K zrCrWK#B_)Gq;W`!9ge^hwHQ(zKIOZmzyzJIB@)#Y5iLaX5JUHsO_*_#?W5@>X&c?y z`yb)*Hx7jPx5N-iddziaopLsL1atEQ4!|=`scvB@8=J@8ULQ2f&*1G^tT3USRy{)z z&u_eEUeP=D<`aEyi{H)DfeiubJxm${9N4VkmYCvZlJEwOR0BV!3{GrJDic%`lJJ5q z#COqes6(XY!y~RZf35RaVbUCu5YdGr%p$a}yHVa4h}49#5UMtj8&ROk(uOFOnFUH> zy^tM;pyq(Ki5aFQzIbswakmU*vsFC?ai{~f3(j>rEu}IU_2m~N%XU*L5atZe4T#2e zNyg9oa@F>aY&Ag3;;Q(B4V<=!Iu82kk{u} >LLbg`TLkSo6gz`W3Ue$r~Mh z#ejA*hI*1&$IQoNM2#x8& sgo4&20aGjFpoX2FDRIx2W!p;5UjVcj&= z?83&yM*tusyNRNq=h+|)_E6gX*&*^GWgeXym}Q3be2ha)zWTb-o+QMje^m>OvYGKd zK=b>rI xF*^3lRdz`jQDeUc)|o bVG~U1 zi6)zAJV(PXk{din3oscD$B~|jT&ve0gAAyyyu9SdwWh<~iBcTz64LfqH@`Pa|Hemf zAkd5>(su@uC|&UqtjLkI69*SYN-G=@YrC&q{(gQ@nEb{Cl+?GS2~@@+ppF*;Q JdTZb}5yt9djA;3C!?gu2v@%KMGFDtOSaM2pr6 zco=hjYdqnHm6EYh1io|}9YsLawOl#gN2c-|t%j7KhfRf>9Z%cTgC0B`@{C=yULx h}!A-qU6sB^3f#iS#RaT84P2bBK-e_$2?QQj@X3xx=K+evW8@ zT~2^N+qPZ4QwoFFiKw2vd?Y}kss4d}<3~n8n84_iMYv{l2z0{|zj7a_R?-uf7n9pg zFB1U;zE)@vA=-{qnS;+(sXrPqKk=jq(aG0@sY2!}&e$E%fCS6tj!nG?TY)rA8umEDoH-xlb;t?kw zR~dSj@+Ll9|JU37!-~cZ91v5%PT{0%N1LE4ELnS(ws|zEnTMk4oZ!*3vE!~Kz20$G z48NqT%5n98bE`q?jCw#_=eD`Us~cY$7th9e_*MI2SXq@8lo aX)5 zbCW4oBh9Tc47&j0F|cDaBb@K}d{21WeqEjy$%9BUvY@v6gQVzl=0Nv$p#D~Q!lpsp zI}Ej;$u0J=6OLR8{p^96SA&^A(e%fOIuq}Sl0!^#7pAe=1L P~Ky;W$CP+nwUvIUpu5JF15KT3K!ZP zh?! 9;7X}5E o7HH0`XK6I1o&}L_V9} zR{&7wb&^K*>!XUb=sH%1vNmf?aKLyso8;ri>!8+cmdCI4vgW28J$p$h)y$fc9#~+9 zU#DqtdbTy6U7WA=FHIrc`$g3<+YBZcXz{KK7Ig3of?~yiz`coRtLnMXZ0Nb?qW;h2 zx>?NEdXHJjjpL`D-Z7+DXn+#53CYH8bv#BgOIuWjC$xB^-`=8Vh;9;hGs*2$w8GC> zZO73k(Rv8ayih?L;@Mg)O!&zcVo9T&YQ^J!^+56LxkotSGb8+a&;1WH616+Yn8+^# zeV4+fGg+J%rD(6=k-q-zINr=bJHlrzl AM@1JJyERGER t711pI@V_Q1+uiltb~DuJm;C&QB}gnoBZf% z|90EIAX;oVV5lG3?`x_yV9FshGVrKd%dryL^$PnPI;z+552n{~+NdHgm4oTqth|4% zm}kXMVZu`>TF#`J+s*U)XD9PcVq6RTF?mm}K-G0L)Rn)p9|O~fN`t?OpidAk5AFxw zEQi0>i6zg>t!39;8}oU&Fx CS(uT5hknujdz*CU9nP2Lw0Fl02$_w@6SV30 zFKc3QOzS!tK8WbH+%v;+3_<;_xqh$>mVfklGUGgcH&}GZj1ybR+^r_&y4Ph={*CT! zZKJ_5{+)s&Hliy|i5rYOH;0aj_%_jbxykj?c#!2$v&)UOf7Z48`;6>A=!t%wS@gSR z^UK?{lzhJ;vwlTJ_Nr+CQ24R*%jFbvtNWrvPaO`*Z`#^Nu>mKt8%+6{V03a2-^>9d zExq+CnjHqTgbot$4=!p<5aztU;IoFw7_-gDq*AsyPH&i} T7Lu|Y&C%I+S1(a z0;0A*Ka8P=8|HU>Uupt_QU9PZ{!;e)a-Z`>iY-0&?^g`8S~WA}*OeiwlHyn26K0nD zVhiY>K;j-RZCx<>QP7c@UXwHFV%Hq!^a*V>c`qetgZa|Lu9=5vPL9r=^V)>i%vHHJ z8DLfcp+(?H4|e@n>rt67-c@V;|9ww)YUaPkVuG#O$p>0U5{57Z8dd}M!Y+o+7gCuN zMVurk9vHhu$O YhQYE>c7;>_wLpJer8w5g)p}NeN3_3=s#0WE^|7n`YY*B!|l1s%Ko^|ks{UJ0o gq7udv*eqP%X8k>&McGacBN&V91qE;lDy@=iPrW4@T3C-yo0%L zSN>Hewd$CkK_!n(4 SLmF7^OJAp<+1QDMQCqBccN z0}-L}#Ne4Rl1_DzYR6-)pH<1Bea`ly(GnuWYqX)GW`5~yy!!!-aE03r(lHhQZ&gf) zOY8{kndS-ijdyRIAH}X;D~aRd^*3#W#zb|jHi`%tZ;X+fv!kJ**~x%SYo$p7JWd7u zN8dB?ZiT+rawfz_n{Bjn0vV5*ab=J{7W{qk$j9sEaF>b^K8Ma;KMm%I_1X}iwBb|g z{A^5=dYJ(#4SwI(@>=vh9Z2xdYdJV|A%A4frK=LS5c&$L02hY7Q_+PUL%$CWA8-9C z9bi-GN1B_Yo!3HgH}m5g*G|>4HpN%v#za?Ke&68^kZvyC;awTz$UH^Zc4=hsc2``3 zSuWcv(89z2kcftQO#Ndc!?$j^s4Fcc4pY?m<`Db^i_1TXLWm6?JBcHXG*emkM(+1b z q}HlyylcIxjDx^z4y;AnzMJ9vUCI4)=I}Ke&R@bq#gELBH)Oq z$>x%UW0*X}jo4??Zl<-EU6%uuLb)ymwD#WoIZ5!@MvJ3pz0eA?#zb%RG3=zAvTFtg zUeWhGnTvsJ_`ZNJgxO8)M$hmml_tn{!LvuKL3Di}I<$`1lS%pNGjvU9`5Yq$%svhH z7w9Sawc}udmru2McRLqWqwz1{-iRxOzJtUR1PacskwO^74f%4Dlg304n&d%N4%5+m zfmI&_eFh$W6mXM6eC -UUHcnB1f46b%w=eY*?k2k`!TuGsFQW$@rHb8W=83w@cNh50Z?LV|1 ztJcVff}4}>5oU5wDTLN{3}E(!s!Znuv(!T_WWc6LuHT1LP_<~N$Os iD{+nJ9ICUS`;h!mNCxTe5_?b2@G!@8$lMs;a>Dn?MKF$9kUUPVw zvJ)H-h^m6hD3jjv)%2t+$jzzW>-mpidcnPbFFvXpW+9v2)KaKH<88Z65`snt@v%*L ze`Szs9$b3^T-<`1= %5S17I5n6K|fCC=7 zFsdL*r}=|Z **A3W=tix)B-sh4Y09D<2j2xt&zI_Vr-rJN7=c9nn#@0uKc;U;oIw{SLD zYkIZpx?&DvnjAz$Y7_!qnP!l8ONd0RL3^P(6PDcz3agKV
kQ_ za8qh+j^B*WO77^$Aa8LP3_-N*2eAP^w1QEwCUkFnw5dDz_jct?JxmKG){k^f`!zS1 z7+oob37+TxuMG07l>+eezpukOE`Q;!lnF}{3}1!Cr}X-?nuoqBnUCQjeZ};9RfFmW zjXsQX;mGORi5#-C_ifA*D#1V2tB??3T>G}0q1Xv3Gr*WOpSV4NobiLLn2g{!uC9Ni zd*iv*g{*PRTzMzlS)V~JkUvX=+#bRgK4?&MC+RZCKf11A&Qc|d67dm)FDEoZgNKre zw@>$O)G3p`ZmW)C0oxKZb`4B^-iMD<*6?BUc{E#lMi!Z+7N<`VGi+SJB(9dwyfmMS zD#e1MQ8h9&UaBGOkRP=L;sr7^syZ9Bg46i@0Ipw`zS{zZLmyD1jyh_hJ&Sb|Pt24B zArgR&xgdlfS(j|V>i=xT^XA5(py{bAThRaJyu$}iAJra%49t8!5yASzmWgn>g`N4Z z7apW<(h?M0#h}r_JO7;?8sCvBF*FXLQxvPkFB>yt`5Cfvzi9?6OaPn>h*^7rNTJzt zL~3=Px4{57E@@)=xe&LAf4zO0nlW~tfNb) zwLIeZk7j37f+tiyk#4C{cow5ie+UWt{fqeIu4X8r4FgZ|S&$#%&O!XLD)T{p{Nwx( z2&5t*?|;8lO_2+6&n>CbHIMH1EH^DXaU@w7OxA+5FG$yUFrB;__#0m!EmNXxjKfcL zPNmday@kF)PyZ`K24S1E#=idoUxy*JTVev?;%}p9FgAEqeCF3dlof#es{T}qgK>Y+ zd hIzWzX>UP7u#DM zKK!$I*{Z3>i+5g%dM$4r#0Hl`mP-p?4gxN3*)Io4FE*a)b`ng>aGB_N;?P+xEzAyv zt4ZD%?)A0}xQMf6Dz~Oh0;8wD+fSq^-D$Vwxx}l<|LgVt(eoq0z*X(=mO?*2CFnw* zs^unHE55QAkNpKf7nj9&A~RmI!TlKcy!UdSUzz4h4I(8+;H63d4d?&O8}F^gO^xGB zGQ8ga9@7XL%TpI(iMEeh1MpQamj1_W{FCw0OU(FV2=>ofk3md%m5Bbj<>HE%?ssyz z-0m#uY1uD&p@H^;-*-EKU0?@Ri>bqeB4UPhdkKU4*+k;8fV6{CE+2 z-XF)d|E~(zBE9&+x$#-&yrM$jEFPQT0mq90=~llnvic#Ks+ZSn B z;xXv}rqKu9-fhi(JCOL`p9a1v7Mz7eOZi5^iG>-!^^3#8k@y}rxCpu4Y!PJ{i0yp2 zS3Mz9qS9y{>uBcn89iHRY}K|O;EsWr*QB3SeNv^rQU@PN$sl)H$SnKU+bWkmag^~s z(fHXQRmw)C@U3eYlJnxHj(!##=lKcic%gEzuWB u{k>4j<;GWPOav|5GmtpbOrh;()w1z}W$uIG z<0DV%fjM9Q>&@xRqBVD=KQdf|W)N%uaE+oW_D2Yu7}!$jd~3m#{dc*-21^Bg3Ba+! zX$Y_ZU_5kF=oBF5SANC&unX(>87T4Zx9NkvaO*!;%@+v6v* H<1>b83XFv##VK1qX zCqPshPfazmYX6$`S~I30Mb;r@rc&6zYbOexqrmX2*8-@UdYSg|8l_xArCTNV$Bc;( zSP%g>t0wa3k?0|WGXpk7uTh+TE&Aip*TTA80O t^Fic5xRx$BK(9P*m z9rJ{Tx$Dk#u6yu%WUqiypO+-8r&CmTcFF_sr?zD{h}Y@@938c0RVs4ZZQb&FVf62F zBvruO{#px6S7Lxvf$kvlr@|TJB5Oo5CO>WL$2#VnglGm=e=r)9YW4ki7Fat(6TAbs z$o^pEFm=fO^=+cI*#Toj{t;LnPrL~0-jw-$ACO6N25CWL*KG#2AiEBO-@(%#+be94 zQoZ31HvR2lqQu^DQv|fxKHu{gii&~jCAu?k#Mc>uKdb@k=22(IYtAy6u=rcd+aQtK z;psz*cw7%37nzjl9|)Zr4PAcxNB%ZKC`63|W{NjKrbRC=q~2EFe!E5^hXOyS++9dF zfiB~|0Qw*^gMzD|<}C0J)?Qy>Oauc0k%Xb~oUHPEgR=l
XHg|0JNIqb{!yTARG=>W?0M>gQU^}oKfrYU;GsvJ$_g2g2|bF9 zg1Om2R&QOidrDgy_;R!GIoUJpaaIlDn9+Mqk2V(9)wBw<91sx5cc{gC-%V;aBPDgM zEH7%QpB#)HLEUta>ByIEScm%RvS-FVcKe8yOd*9X*+wk-=J_7}j8=?GFeE5+`R=`} z;@ ~5W=~xWMdNH3(sIRVj2=EKkW8wOyK{*Q)YVK(n1}?k`o$5@lbRo^19`NW? z6{*e>-K48hHXWpwvECYP`rS8I{>4L5S7K~Zz#X4%r^5P{Q^VPq$=u*whez9$=qj*w zeTt~C=>yl~ZBQcl(Zg*~Jt)+)sN0;7!Y0%!j;pg)aG{^7Pmz ke1SHp;UnlHkL#8Dc&56USsJAQ_mXUw;v{lB>5=+PQ~UaVRd<|Sd@K-HG7u` z4P>KHpj~+8iI@|poAVcRU 3ZA4&&*yUiZV?m~9GMTgxXY zDpD-%*y)cy*)!B*jm6D;pPs2w7+l@KPpNw2R4qXMvn}B%Z2Czmg|&iFrMKh7+z8)O zYb6<{lA<+TQzLQ@4JydC*?j!s(itIAeUF9R$CwWn*&L4ws;9gaUbz7^efrz~&|U3Y zSOLOAaN$ar;9t>KGaNI7?Umr}tceMg*lNuTM;l8P6ow3inhZjruqVFl046#aws0RE z1-a(K7ao$k` wPX`m$J!o2sm(#L;?~CQ@z@jW*4!#&+`MO$aj!pcdp4~>$ghOm0Gbh zp*8bCyrwE<605LwqvCN~v_>>Nt_45g%w?ASoD6&X9QIi0gLQl`7~>sJvUOEzNwIY% zUu#T=R06&U2s zNDarJ=dh;Xg*9j&_AJD96aS`Yfjo3;KP1pXQukn{Bv#i*s>t%}$97Q_zqJXFmzpFC zJMSuNe@=?Hgj!%mqS=@GSayL^Aw^`~X6n_#3F>iCYDLb(VO0w6R|5s+`V$cf)bUit zSyHPgb5;TIeb>IX)RAM^yIbQwR--*C&)xFJtJ|t$J5`jmG92U2+wV9YE3hcdh?We` zNW#YXYv5$66WA%a4P8sW_ShXsKf#?Apf)N4ig#Z|vs<#m6Mr=o_AW&wo-#s%wgFq) zhLiPe>p(#EC6*SN5DmMKwwezbo3roh%EFm=8wbE=Z_#__Mu(onpZ#&C3c4?vyfpvE zmn9|mQKvhrO9WcnpuXiMayWd}MHlig8lj7M#Ej6TJu^?X^$eoIVsG0i%iol1@|cNZ zfQFKTjIfz{b04Wv*vcumo8%tKOLX(D&{z+gCI4 GpP)kJf{RyAr09L$raCjMS1&6 z^OL@0vY7`^1@E-cWjt0!=$AdV;Y?#zumnWA78pe8Q9jKk4@SS9LfGz}Uzn%y6osN? zmGvvr6;k(7f7C!!VkZh!X{-{$tk+24TB_DB5O8*m22sExDlN&3C&V-d>?Uau%~QIq z@g?@bScbixdf9CUxo-#RH$DH*PtfhX!_jF`+T(wr4r^sMG;QD5V|&nNn!jLC|9w0< zTGashWa_mvqHudY -;NxL z^hsIj5_KF^0(smSX{vUkb!{&*Z*mC}`e#zuT;RV}9(_~F2`;67p>AdwK{rzW2CMUG z-}dy9iu|ii-jujxi(~BE`DvFV>e$KUxLr4BnG+nV*nPd$A0ZW<=r-tgqOg=7RD9K7 z*j0YoXzWh%l>C&;7g^RP31#mZUTjT%)_Yaex# X%BgH$KmB8-==?%-Gm$IoWO{uGVhlE$u_+!(O`c0QS0?Th;YrJh=FM zJV0;Tk&_6$hZX#)uoA7U#923Lsv}Aw)#)gO*-tl6!B0Ld-<6vwIi|6^)Wfx@heT&I zW+eR0Gv!liZt-zuRNCT=3r`q#-_WdaKwA$+Q8~a9H0PZVtWO|nw~{}*@LxMC$@jVv zmqo{!1vIp7Vqx6+Vg9QcAJc^{9A*lu{63QzXC8_7<(>BUKcfN_?#7X9tm@F`{ip)Y zNF}^$X}a2n332w-X=5x2M{LgA7k-d7OBR0(b$&Kl4W-0@0Pm*y z-i}Y@&!SHtE4Bmr{jHJ(G-o)(GdBHV(rkx{y_S)Xf`fe4F7fDvO%^r!lC{TgKlXa^ z3ksfjtPZ6PJP0;kiad3j70>qk@Kdq1(bt)LFC;W6%X6NAKU5YNb>+`jQGV<>P>^u?Qmu zg*pprPKmYu{b;L|#A ZYO{Da?IO fM1Vf)Hy92K>lhEhmWh}>3Qu8x?!(6 z`(l@ZKCIF;arq8QyrLb)@t`KE(&N0J_7;m{*kz6^@l9Y&xRb6{THo`adJKhncr~H0 z$Z?3DIilwQ^4-q+Zl{TK>Kk4>C{4}k73p*;+@xW*kCCWywmmG5U60cDvP$h&JG%@= zb`5TAamunTxlXZX;>k`~dsKkm;op~@L}IrJ!ea>~J4QMVU~epvA4nr{$!OG&g@}I_ z3ibYID)s`aLf@%9#QEWNv9rh){JkJmkyXk4g4fcNRhwx-=$q0_)eugYZw~^sfzEIo zX_d~ht6AD@riHzu&{(>Cz`1*pxkBs?swIjVyMw-oS IVh4;>fWMdl#3uyG*cs>#RH<^SF&e>(k j&rp$hsGCT9{$*xhi39eFK_j<%*&5Tb0rJh)1~ z{7R)D{L}Y~-&wk 9jf|G-Et`rUW(O($+~yBf#gbW=8=ZfaFOXR92H z !vDC(3PK)kr|$p4}tf~pZxUw>Z|Yx{PuXP-2#yoNrk*}#X2m1 z0`H}momYGUS6_Yl5W hZlA}fH>rRi+ zg};9Z#mSZl{fWVxlasv~73XeoY0UOhmXb#4NgL1~ $w^p- z{IFePYMs#|d@;K#qo==L;qv>%H5+F*-sx0(&F5(ELRtxCqtb`DVJ2fIFg5P@fYTta zdZgW^GveC{Il_B9V1-dVi>rlK_yoVO@)hqFDf0c*Kc&u(Yg=6TjAb8=#ry;cl~!zd zOcB|)(BJQyQIV#l!=V#e*XC$=tH7QN8ps^;<~hZqm2}-aV?DW2z)+64>^EM9O+rW? zJ+gu_zzxfveE)u#R~D~^Km9bkz(c?J4tx`?uGotZpD{tM%nc|J6+K0K=Y-eOyf~2f zA0=|N1m|DGp}W&uNbm5?;oGcFf{vpWvK%+)KOO`g^63s{vQQ `M$ z+4$-EMYZ$2%>1DW`q|^cFt~z?rF{cL0dLo#9 NY_*vp+ zm>IV^%qfMzhH-_>O{Knlzqy9hXh89?_7AK2!zWu-l>fJsW3&CoYHhv79Em;{G8;LS zPP4G8#6Q_Hz+aNm_Jq(Mzuw0RmfC1h5J%`ccT+f)TDc;3TbO*$XUqJwg3lItX!)C~ zufiwrTQm8oWnH>je}e7}mfs4m%imdiUpw-lmCFx!F(^_I&y(l%PI|_jIA)MJEY@r3 z2!rDcj?2?TPk3%$RZ-FbgR;!SaPU^DE1gl8&pCU%?~I8b7{QGnEW?eel7;*frRn5n zn~ECCDt>2c!rw4FU_ y>jruDHk+vsB?MQSr+2xG;A)|`miWi4>|}XDQvU~rPpyZ+jmF^WPS|qn ziEQ%8Hktde+{|kC4|%ijP>?^60RuwIh?|7}DcMGxewS BS-coJVFpMskZn6k1E21 z*(jKF(?w0+Y_ 9g-L@&V7!bLd-DfWz#I79E&dqD6LO02za#)wa;ZL z{Vm<@oy7UV_TO87da~N7giwu3@qplrY2@q&1K4t~jSPMF!XWaBOFVCkZ> z0}Kd1U7*cxb_xIK;`?mzu4^dNORcLGdL6di^=$;_*+I!g_v*h~A}VrR_3ZiUMVclC z&nCNs?dcIKc$Rk%fGo5tzqrmQ!M+7?_wqP-!kC2-MyhXUTDEf+U6P`v1=r$``$L3r z-Y$8Kk-f?B{lbU6_+THn(oe9!KD19n{ooRUJdC$lSh5^<7(R_)8?Py8{fzkln)&1| z$i+^nq6A;)88aL1kVQNVS=PK|6MsoWe*I)8DC-cFUJP5{2fn~acExZ$FZqHiA%0lN zD4va3guu4llI5=Oo$mQ4T5r$=j0ss1*iNIMP=4c#^ 2W!yNZDeouMF4C}j|mX~(mx{AH6R%5XoNMn^0CbM zUewFDhR9CwmU4!zitpZib`p6Y$r+8cYe)WI1$J !4ziVH*PAk4|%ZcxXJ;<@X8qSd(jI>>}VxgH6Co*lI>w;?U{kt(o1J zO)dcl?TgvzI7HW~d9={u%pH>K!SAP{ljF2m5y&`N{B%94;CR#R!TKKvf_qiJtu41hSAzN6tjt#!1U?YH+FyhK z60+vFF>O697XVg;=0^3AHRCa3nMUQ!E%BNzcQ<*RU%B`22W4G<6^Z(6KwV*F_Ge{f z7SWMQg>Zn;t($?n?k3;a9Lv@=TggsE%HXvkY83dT Fd zQY1i#o%ux%Hts%Q9z&RTZet4(4wmUp9vWMPRC oS@ zr4Kd=fJ683+g-qRN+heCOk9b?2MDn-CtdE!pR2>{Jvi9!lGEO6Oib!|tDD7d$kK)R z_FFe|fk1gyX4DNMi(LNzjYl?ico(_UQc7rA9ZYg~bht6!6VzjpriodU`xdg5aUgDc z6?x6f7Z`#DLFi=_?8X%r+wO-n0(Q}PGHzmC_ZN3}_x-s7VNkKjB(+|k^Q3b}9vD?+ zB&Dd7-L42<0h{Yhr$iSJUZ>K)Gdb&%5wXJ*cZKayd&aDf#wg39zT!UB3cluBk1oG$ zg+TamCRtJoye&~zVZB 8!AYy|)*A}TZutv}q4nNkFW zY%}xLN*98_ik$gru{uR17k-4fU;XS6UfqvvC6 _*cbUtour%tOEqiW37qunndTU*#ZJ)D*92BU$ED@%Sg|@GkNP?S ?ogJ$)?lnej_4+)`7z9_;jk%T zv`s4VEf498srcDTo+CaP>W{`khFr3f=_Sma&t34VwjB!C 4DmYY#z*<2gd&Vl)PeF?V+5q9=pl}F+aQEa*mDo@B}}8 z#_Y&g6Y}iFc^qM^P0A3reTLUIzQ #dE09`rj6G! z#@V;$PwY3O@7%02MoP$u*C5#S+mqB;G*#Ri%8^S5C)mh`QMon@oK$FZvM+Z(f!7^; zq?Vdu_Qq{T@&wn>z88()W1v*Zi_VY1VL98)gy`AY(|FLcW4y=qhWY=K5%VqL|1F+- zMNie0n3Yj?in&U3%7%%b)#J)k;t9Ss@8apvUS~eRi9ui9)cIDe;X8b`EM&9;=?^hZ znT4vE+8r7?gbSG$JLt56)jr}S8pf`Aa*t*5-AyvKCG_8js6FZ3spE!WpPw6?X!t7d zytT=uX^x`GB8YQ5wm5OG15XRSwzhmeBWw`6n~j!` ~`3oo9>lg)G}9CnTDWzh+qC3ow)+svtBy#{q#KB$gVd zJyQ*_)PPWpN5h(2tCW@u2lH9Ue=ePhV?C*#*dRDt;=iRMDZ+n@jG=S3*i%2j!P@&! zL(%Tm{KnkvzG>o;O&4v1nN%#BGP5p+XVE$YbzDC3j*rf&DYIS@i?fORAeQWuTqoQz zr*AgpC6ip-Qy=m;$-iieW0Tfku3A(QjZWji&dr15gll-?u#l$qTJ9WDwYjY4IhguP zkAA_J`*p&7C*mxN^K``ea#~8x8?lafG}%%SCnko7RW5BQn32s8%In=!_YlM ivb z*;fb2ap?0r@?>VE8O7amnuv){)=JqumK7gl?qrk38KqCq6MpVSGoIxmXCt3)9EN$( zqM4wYoQ&-+ud~?hTBxQ%xZBBDzW Tx^5#2kBe6Fi|O_!Bg48ydA%RXeHls1Z#QX$?Hvn{ z;42z_sc#%rty1!#>LKPuuUvyt<)oM6H(TfRjbvlyJe9)qjMl>tMK{Tu;DMEqZ4~G4 z@bc 6p^`<(G=@IcQ46-sd}?SV??)7%$Q*s zid{nO`)v?$>&h&@tfB`<%^@n%tW`FDxT-v-gix)+(YO%}CYR3g*(~O;-TbVUN=iOs zxbZ2Mu>ck&qrkL&bJuwp-(u=?27Jf%AdL&gC*E1M-l1ui!Ov|TO}4B%T7g#zaWOdI zr|oj-#RZ>6Qqp{r$>t<%> R3_qbbZ=Y6EiUg!02P<(~%sZUQ=Pe{z*Mh%-XALd>J<83(}>@5&nn5 zS+zQwFmaay=7J7ctJ#+Av`=h!+kJgQ6K7l${0HJ-1gX2>GYVhHOo{9Ap~jHz%~T!I&k!c I^#pPp6gJl392{8!tBz*ld`Pd*LFD?cf}?YCtU8Ir$EeVxw@8U3Np_4ULu^ zRTempR}ETb*;ut13-i{pd0YcYT^qsZxbW7VX)$Z50klD5)BBXhxg1ODl3KxC<7yUk zel>9o_NGNmYBr$Bb7(BobqAl(XbHe;ZdV4?h{sUytZkXSkZb}%gM}kkfk$hoxIdLE zX0XMsE*?Q?vT&wg0t+{FznxY*@&vc? !K!5 IpiRs7&tJg+rqV6?MXouti*pF`oDa(?@h z%BgxS`z8z0D(7V9FmYSyxyCrB36Z`znZ{;@BlY;UXxoDK7j%n{$ClBD3wiL+Hs{7y z`n8TG8}cljo^`Y4aC!>g=+#BU8FFh<*bqC#y_J~Z(Mp^3OnUUb>M7sOtu$3i7e6oy zX!FGl-R<1uR+-rRWW q5BE*-*xa+=KCvR~$YxxztoG(Wjy{|sC4=2IcrBuO} zn=M-}HYZEbH=Hdy&oWn@Cfh^7q@g6i^dfuK^RT9w9iixpd5y_+YW}_06S2>?)P?ta zNHUCePnmKZYAd3*taB;K(@B1Bzk}9Nt+H#N@ ooh;O)CsP{^`boGz-Uu zdbT@N@QELfH80zFdwz$wKb22)dWj0_>mCx1l*^jC{b+oH WEt$G$w)1>%Z2t*R5dldiO?lEZ7PZCGTS#YEqf>w*y_kf2 z{MmzYNXUjPqs@gZybraD#(0rE8JgqB_GrKhW1~xC8buonbp&GhrDE@;r=Y1UTMQw~ z;AVU|Eh-HXNV ?*Z84fAs3?_qlecK&pnPj@NF9gxCddK{x4U z%97D4*qHd_d(6Ff@8`*{Aco7-9^3Hc1Yg;;WEXx}bgHpjV@B;%G~dmn(5u-4)J|FI zx@K@l(pU`44UKBM+~>#<(?(MW1(9v`NEszXcI!f8qx*?bP6mNkq4K<>LFMP|`1}FY zM>jMYS|qIHLtOTF^t7;y=iTXupwS&Y-4o64@)pdv1^KfOk6XynipWF4zX%w_Vw$6f zKxEn(j^`p)dW&b0qxVT9HDhKH{mjl?6OXvK{+J?%1Xf|}iKhe8xzwS<;v0D+*YEKO zR_v_5e6m$Y-m%r)`=Bwd-lkEKC(f|FQNcJ0HZRRj%@9a#CfZI~+Ak#A3Fv^#bNe9G zBunF+v3+}*@?Bh*@g$_#`SN^+W>tMdtOABc6)n{*2j*q0p1yJ#bc@|vCUcDT&TvGi z)p4y0JZ8(5>D$?nOMu4++Yl^3xFGD~(CnK$57{5O0^RH@k-7(0WlpxXsJ$FX^wmk5 z_6>6F%qtF$_26XS@9BCfXCBpag yQ`=d~+q>Ia zB)VkfF=dW$MkV$*i}eY}3s|-mo9jMzINqpanRrL6l3EJ)O@LVSC=>z4Pj#&-Z6thM zI6dc0g%OO5qB&mk%__6g3_R_iqmo+pP7 7V45a@pEiSt2%gXI_-9 z8Jw ie?$$QVhOYCaOz6bO?v@wRk(^GQB z(Zfbf-wc>Yh*JbxeL97lb4{+&;8fw_HO Qza81lRg-AyrKp0zAfhh~(QQNFl5nu15{NT{QZ1H>2 zs>!0yfizkH{)limn<*Sp5p91meNJ%V;f?j@&wFBx+aGyePTWZ=`F?wt`DGVoN?N8t zasNrIs1FGvxe-@v%|wC;b>7ffzQG}Mz_iU4VUnIpPWBNJ9~*o|0*qKfhbqp-)+KT9 z7jcD`JYBEZ8>rH95i(EfgrH!AsHCqYS7iaPsZLcXJh&2#sE(!}cOvylZqdV$kQ9Y8 zEA8nTmK}M-l=&7884^*8X#>ylZOtBobM(h}aSRqh#x;!T4VEFj$BcxqQlS?G|0x$T zG#0vfc!9)fIy1Zqid#Iqv$WcDlbsvi(e8_=+(r+?eSJp20zX|uuPbmBG$?|oJ*-*C zzIoQr@CkCX6s3s0ZSbjpS_lP2Ul@M8Dt{R{^rQdr8S(7(s_R6o%G4vvmBuix?*)9J(R`s}9`*vI5e)Uu#mrMtX zjv)}T+@pPXuGyTJyyA)~YA+(Dj@L;#PH!*oWEq>rLh4Y#J6%%LdmceX$WVuFWXz!D zY3-)976Ao-13sPPUB$TauEh1lm->=QiF|P>jV^QhuUpG^GRTcsKk;rcuucnMF`*x% z%oFaYrg0{Xy*gUR*`9v&y=90C={B5F>kM~ro0-d)zJ;v$*YiDdJ|oQ+is%o`Ck>`3 z7jNQ8pSs4vh;S*bWJe5SgbwW (wWTXXgboFfamnj zNQ0V&JtBweGcAkN+pvICHofoZQydydgr;QcbmzbN36qns@Gpc#0R >f+P;{l_b}tr*iV$b9^R;PG!j`$S;T5;ViyX=V_^SiTw o z#?nP+<+3hrD}-p?y_-OCetCtaV~nbJGt!tlPEM@Sw&1LAYNcR%l0GZ75^c2bimOek zXaOP5dR9hG?2$w_GdMJ)k;r0qW9EhDUA{2qqkXmmB$&-6_a>7htRqz4dQUV^5PJ*W zJ4<6SEEPhuQF0&=k#eoJ@S)Mj>FtRM=j|+>*$otj8wj*Nr3yMoT$MIOb!7u$f*3=k zfIMWcRV8Gf2O)2n>$ZpNLR#yzG;X2!$9q@Nvhp;MZ!alYKe>4B@2r9Kw}F=F&pr>I zdS_`JZO$MdYkt#WnyO16_!?!qS=aVrwTnT)(g8dPJ~G08k)j8RyL9BV(=&ZeknS^g z!IeI)U4OfN^z4+;;r1id_|v7amf_p0()J5f*6K9%c9H %k^m-0rpO=h<#ZBC3|rek8oN zQ|u)Y!T++9xB7OhNzbyT>K`d~-(X@)fx3nA0r|NrIKRNnv^)WOX?4$K)W0~@zGM8Y zV#<*m+K%%Fw$J31q%~WHfa(W!?wPqtwwpq<^3!_$J^^j7?>E9;#@sO)Es$tv`?yKPvOyh+m*+!lKE}=<0Ld-V7otCRdWaB)X^Nv;#gjXqm#c9TIS! z%86EXaZ5}XI?V6E1G+^WbmN#Y?jQ$q_d@m{pyLl97;M0e{gU|%s(q%PaDRr}XAjK$ zrRy@c0yNaUhCjdQI%bGFSo+`2p}a1L1)%I2D0LDdS&H2y*gi?ggzZ7q+dNX1bddo| zbCXX9abM_=NBzVhy{3s4CA`5z`y+En7aNWK7`5?>G1&zL47)2SD30Ev7m%&BZJIc| zpw_qecu)46pK5Utdu!d(H}bkm|M4~mMbRxJW-i3n8$rcSw~t>0%s3&h^9JIJm5WaN zgWvMJ?ped@0mY9RsalCDIEMZINyc)ja#?b8K{6vW31-&4b<(KO@mDg(-Y@@mt ~UpJ9R s6&>E&}Q;wE>_y#Zxs@{B=A&g=1$p(`v27p$G;qDw5ANlSE!j+guVljcw?>SI{M z5CrCZ9KAsO7_o=9;rn+MNw$TOv?UZ&-mL`5Pn$iwM`=s(=1p~%X_)Mt$Rgo{L-#x9 z<{9hAoSgZVe-3HFxp~WR$El7eM8Zr7T^X-W6G1jb-`~TZJ2X<;6IHVR @Pp86|7)F|Ce^)<@l {j?P8ltY3WhC><7%7jA!jaGf%~VkTU3&RMMaFPT{EdqomHRwg=Mu=5RL zwG}#LF9!1%JZ0Ek&-YEhc7;_9aZ};eJ&W vp z7_Gbkp5-LZK1&tTAJV@R6~;5-U}1TR#%IV*Tl%$hgCeedEG5`h8FYuP{|t8-#h}yF zW&V0T{~vd##8Sin(3J%XYfHKKF-3?MEF54XFUeIP$4pB^VJRW^`-Hb6BrH%7GTYs+ zglNU~aIsC&2h59jqVz`l6(1*vFJ($2`Oogm%emK!8Q9-vV}JjC#nmIs%(M$hZ@>A@ zx7=>8`%k{h@XmL2CAQOgQ@>N&qEg|Il8a;);>WQa138U$aPAMUiFypDwyaka09|dC zYJDyZzAaXXcU%aU)Y>oKqKQ=nBSnq{vH#>^?Jd{>OLovQ;RUPlvTWlQ>|N}S1{_T} zQT8eIG^%}IA5&NbXK2cig!9KQKAxuTn(pE}2Y}^I()tz?0GHDMqoGbh&!IDo+M$~l zGpYjhLuHn{L-@@_HtV5ME5qM3W4(p3_7dg)pClrxsmXs-o TNV6tc~U9#yh$ip3{VX2pYN@BDPz)c{in;mHR=kOiXbM1~Rw4CF~>Fj+Cy% z|NK{?Bv6rgd; 1^NJg%htMDUYT@;=uMGfo)!84s%KU^%Jf2#&D)5 z#Q1FUNP57wK53?6I%7h>;+E6g;Sa*~xfdDTFIYzePjH5br#Fd?#n&?FzBzlSt9ZIy zaOX@*oV9F1Kn$*ovypcb1^HI#Zwd52T}NWd3p5n#6ts*NgnX;OV-I264UuQTjMu`X zboXV(#Fld5|63XKkRAVr$=oYau@_Uf#lVIzSMUu=aVbz%=Q@U0nb dg0|73+Y+Go@$46UVNMz6NpImOb^CXa6JfLO1^e#s_h8Z9cYD;qN)40Xi? zDIfU>2ad92Gh4A(_up pttsfx(aNs0%-jP|N+DA~K zg@GOkziLrwT-|we7p*Q{p7G0GGT=Z9w_c&vHcwA2&jxohh8@KdE$&(OuK83?B;L8o z->KSgfD*%11i;Lka`VvUDkoP)*}?W9d!>nL7Smkwk%mE!B#FZU&Vqwk_eQTha-z|- zcfp5p-J^1+xhip<#-qquwykQYrQt8 m ar#zCUpj`JuQ5{*{jbY(Z^>?M+$-66@gL~RGUQQ zdY6Z>aSVbI*3n!GNMGc=(fXO=v$HrE{QH>G6tU_}4h?+K=dx3h*&}LmpXYNXAhBVu zwCI9HsFhsGxt7fRQ1Z#W2Rb6y^a&yE%tA+mZ{@CUc?f~&Hm&bDx0wAWrDmmE_W?r? z-R6-s#WAMSoT94k?~#ZAGWm&K#TEcn>0ipA^HGUMyD5CYxtrm)H`p}t(H-0L_d7Y8 z4_WBHEeG$2HK*@cP(@oQkJpC`a%#1v+}Yc1D`T GQXw=yYV42V5^uLr?`SiEE;B41(IbR*X$!Azm zr|fCgblC*5I9iL)X9K)B+hyK)1S%&J*u{_gs%cm~;J$Z7UiRHUK+{yC k#ua45-N8%?Q;m*okI7$|I-Rj(9`i{_)Y)u@`5&$P8F zNytp6q zGw2(Q|MR%1$dOD*9l=a#t*7@xU^4V(#3uvsT0@@a=kEWa>=bH@Ik69sii>;npOJd% z>q~VDUv3zME6ZyZeGcGf-En0LuXqWS_;nv2w?l=j6_m8TcBxniWvgYbkvZ4qKXmud zME$X(;+^*`=Lh!qsc8Umv-7o#m&E_a*_X#dy?=45ZhLWW%95=O(O4oh*4EoC`%ZR} zvW9G7RFaA)`>v?$46^Tp?3HcovhQP^!5E(NHP!9b?~mts=D&KqeCIRgd$!Lx=lwqR zI0@xZ7elFloYe`eb5#l3v|BKHtPwF5s_SN^#uc%aXtC}hd}D=1`E~Z-6!VTZo{Dx; z5?F$4$VVFA7U!$73^)VpWxVWiahKC0f0^`R9?PZPe0y!FHj@rJFImG!o`DYSGCg8I zAY+ePvY%rhS=nijan85x$Q6dW>%0$m?diO-i8kIuW5{+imaEdR-J1>dL}rbVig=em zY$sCEve3&h`2Q_wLI3Rm`D8X~W7y^}jltFN0ZQs``r>pExRKbl&Exug7%XTE!|s z&o?2wLI}Bp%Z^v4T6fqb`7bQ`f|HS*azRNtNZR8A0#A`1 k$wS%xK3Nzh4%v?#D zWJ_p&KSO3D3{s2HY`BWFy<27O%)(|L%(_!XZB{o|7uTI>JW+_Bkfg4@&!4SeuG`RQ z piHqt}%dXIh^UR<$1_0g%}vC!53chtR(uLZOe3~TyCJ=yzI3gk4Enpq4E zH27JrD+X%pL&8o&=Mv4N2#OZ^S~W!(f83f4% z3T0)$o`PWKJ!ds|lO2h05(p-Y_^V%Xp1%u!ahJ_fFwbsnq2zE?u|DQMfI%r9S zyjwZz5YP5?HPPnn*9ytUHGOeIcPfsnr{d0pdZo|XTdWy%=Up@j$$Ohfs_gXPVR*t~ z&!%4FixjG7n%>!Rfll*~3<{MA+w2{dmz43EZ)-HZj(DuaHVRpZRx8={C{-V?9?^y| zEBpP4y>+wyF#2{ *80d%= zSMMecxmWIY=+%yJ{=D7Yp59>w%|qv{{u`v^dgRNe5zMHUhdACPQA?|+v11|=|A^GH z|K(iisi#o`Q%jifk;P@Sc` zO0-(>jF62ddvFrwk>!*vQ~3Mc`0?3W_xLmm><*05g*(faH`zrNPp>I)Xiu@m+x93` z9gnV5CU#F_ZS1N8XIJ0Adkt^7yq#+Px<_FQ*4bA#;Cxg)4@0i%Crf(_Clo&CPeE z9rP_;zGO{ucQ^z*HWumG4pygO&hx{EvETY%o4^K}^zQ4| 4`Kk)Gc|eVEKLW zorL}UD)##ZMBKh6C3mf{dBj{>?u%4aq}aZ $6%Tt1 +tL*(1)Qa(R;vd+Ji~R=vdC0|eum20xt9@|!JV8YL#j3kk zdiA;tAuM`!pRZ`mC&f%s*^Jk0RQf{Z!oDUh4;^*st)BSc0$oCJtBy=RSfjIvF;qtP zu8jW0u{ QPO3S*62InYOgbW_)&W`wX^(M1{8FAkBX>08Z{b?sd_SN8~G(ihqg7C zg kECf8PdX jo3^Uv@NL)LSsD _PF zl?dCfyBX>K{(V|d7m6F0`eEjZwcxrs;hGx8y6^=%vBnOo4TSx#hI#H;Co2TZMj+ z|CpLy>s+uF<7QFO{kqjQ&CX-^LTjNX%S=RA{V8-?c9x>>&X-|YY{G0^i|cns|7y#r zXiOP*c@|laFKMsgoZ8J#Og5ZOz)Y{TI1hkp?v|vT5FD&})8br;%Sz8z9eio%nrEG1 z-g|5*isoC2kHAGrapvLApab8)Bl7W$8 e_e4jRhpVAOG4{1va*!%%Nh5&mW?$8E%LzC7k%GY&3P7 zFOiw*Js^FkYJqkMSTAh1H8Ps8zRV+MyO8+$=zyQ)jW )(gd7u{KaM@9Z_j?=@I zxKCO-8w?{)H>eZ<27$EC`Go;DZb3?pIC;miaFQ-`%*tQ(u(lg#0iCzkuO|!Dj0}Ft zEJH0lL%K2%Llu5w7KYPRsi`_)T7c>_h0$g?ldYy36OLJ15P6oh !e;O8j3I3=CaB5 zx24MRrom-7266JBiLsJYj+s?~YSmNm-{vFNCZ5R*>1Sy8>9K4Oq&6&OA05*=*N-dT zqILIAR)UrJ?S1+O->I1lIrzy_NRn0&GLn_%kzI}A#E|;0ql8S~z98#k{{z<;>4#>P zp{pY&Rjl_!AIGA%WrdXbY!KYYA|1k1?=3JEsu)i6zl2liTAfa-mfIb~9fM^?e9K`0 z *pkCqHXuPHhbvgnN?Zbknh?-7)Gtj*aF zRQ5&d4#NkcS2`X(RAkK_J37U7PO5`BYgG ezgkv$%JZBw*}5Cl9KO>UFY^B^<=A7MaXzaW> Uma24cM**o<|nwSOm3XzF#>h zbDs1O6zv;|bL>%Nr1LX2^FD2r*+t*zz};(#1@l!*#>uyWe?4lrrq+wyEHb=ZcBOQC zaWqR6HQSt(K9{Wfy78>f>uo6Ihm-;`3qaj^;oL!Ogj)RZXs{HZw_9xQ9%wA9@FcKF zp0Fjv5(shlnzNsOo227OO^>zi)0pYA7s<}Me}}j=ToCJ0*l_d%9qrj~r_VI2`|s(! z$5)02KBmVCI7w0C-RAZ(a(2G`W!`XvuC49HCfZyUU`P0v7vByQJgtVcFimxwi{q<_ zAfMHCAf c)V)RcohFLCElbB{{n@(r*7m z8&IOt87zyfL Xbg&YfB2XMaUO2|{{_>bD;vpp_&ow&-UgkPd2L+@Ir zsezbmVmBPPB1}gspik=A4;TANkagp;pn!ptWi?-(N|l%WFEZA5Bp5X%v@(VcZK2X< zuuVEOUl8a0UF~|^O=_9Rx#S_Th;iYqU!A9YeJW4g=9h+Ck31D*KaHMt-uzn%Q`;*+ zT~dD>^3Cnt_q@F6r+>w6iA`O-L^yLha0=)^o_1uhuSC*<#1M8ivfa#O`a1Y#*R>^1 z0p0f(f3Z=mwvJW?s!xg2NzEXuu;oUspA6C)!5?x=RZshP&IHfJ{7Mmdt7)xME_4<^ z%z?6WxEt?Ri=Qe|BHViZ+UlgS52hPKq$xrE@|Pjv&i9fZ$K$nWsHhUmXEfdV0w6Me z!%*L?vRWU>L4GS_>hJ%@Z!G|g!Ww~yPa@QWUpjSHB$O|IbN!P+q!~Z-DzAo))JdbN z* UH$0=ua0f68u6D2q9>6zO;2`w!3FIr9>J zI4)}g`}?=Q@EyK~8jZC%Pet{}+%j*Rx9Z=-;guj1r7Rt!=3o5}dFv8R?53j! zMnYVp@Iun5$}fKw&@O*7 a@Ts--?U{$|Ne`|Wu&ba=BNtaSfLMI~sq z_u{l%|IaU*iLDqhW_!58)WYBY97rK}dRLWqrUFmi%csC9_1MCl$9uHh{(W{x>32O7 z#nikNxFTg4y*8)J$k+Kx=Ba-Mwev>ak-FWQmj8@;Q&DMoG%z-$^6VdZ(MtSV`QOOi zxEW*1G2OiR^Vg8a{NlGiYjtLsV5jHSI&1rPUnVR*6-G^IK2<`fGO@X*d(-xD_=rRc zx6EAF`XkIRny~nzSFK6o)mC-C%ViKN`SCB!)LXVb`lmm#3&oA>fTW1(h!hjvqB{p| z7=Eg)kEY^hF%64o^C3PD(UISM-lty(amR9qn1u)Rt-j4HG(DU~m&JZDgkKnxH)9Bw z-o}E6z-=jBfYBd^*!64PNMQ^9myooihxp;RfVz~NXA>IS@c-3U@Rclt$#nYGy@llg zgO`5w+`s<{Bl@TpNKnErMAO67=SK2xj`MdG=`Ete8Ix)LPf6AYsn{VYoTM@;WhOBF zH}Cb0die*z?P4Fy7;BA8ReuG-Qf_GZL5}pRpZ;H8H=0F*;r1uS+5;Qs!3~41yFgZZ zZ19rUW?UN0qNZX }7W zwEfxF&4R>GTruqys=WA!7e5mq^P6(JeW4Dd0g5h!{$ea*Fj$+Lb~$zt(wY4ndxbgo z-Sm3fTDWacZIf0O EgFA!sAp@tJ7aD^WLMmq}*4Q=9}{bz=V zDzhv*sK#~#(%SsYfRbN9=FJ=ze^9$~1sFOON)kl2j6IBYU5k<#8MR;N$wBx<<3hsq zxCpFgwW^+`qOT`MXWOjcN>|Hlg(I}4q+AMdZbRh*rJ+=tANa?bA^B5YWv^iUXG8pY zY-JSL#Omzi&<45J!9Raz1V2sYZP!?qy5_O9{ZuLi yH zO6l*7e7$LVjQY;UVfa|OmN9~(=7sh)QTl@g_|j1N2twqp%`d|aGw0oz4Zl_wIwj#K zmp TKxo5OF9En6RMj72&Rc;qhP16DO3@#>pI923Eab>zGr; z8v+?uw~+kA90^Yc>TUUUZa(+iHcubj!o2?eQZy(1VcfB8oFV5 CSzj0&;f&aJGBL2B~|Xw8|mGH8=qetT4z&Ma;47X_?jO z=?9mb2`jdL^fl2& KE*k>!1kve%Q>i?XD S|ZEWCBD$m+^R29S;Y#=NXN;i+YDc&?@h?%}1TH_4L&dU4A|i zwe8AInm&g5zv7)9`myW_IX)%{F!=@QXxH;|BUkVr|8NWMT^(XUEB1HgP2TtZYw$EK zu#{tWW8pc>(=D5idgW>oVfVS8>r+8{6SEAni-=RdEb|9?`Z3650`dmSNXEJ)7BrGe z*a)UO<~duL@G9O6p3m`tW#VN{?r|dtc*s7G&-*6UDg6TaGohUN*5@5yo}6~DBf9W} z|C&Yq>=)^wOAiD~au tAU@yR7OE$^lTb;0QK;AkLU?v}0uZ+l>4Q9e37fu;3rpE0iB| zq{P*;iLHLyl&;i318sy|t@wlM+WIul6wqwmFq*@!$XhryF;Fe#rp!U=ngu$W0NU+P z^E3H~<3BvPQ+OT!deB^N-{zq{{gs`o59>@SQ_J3z?MTl(CwCZ&r8>8bD871U4)Co? zBg 8}Z9aIni}*HuxKhX1Bu2spo^qLPuQi$MmujS*uE0H~+qL8K9?^(nm`_8@BgW zxL Q1D*-~M-ebA_nF z-(|`%7^1hC=qgP0y0tkh{1J!Z)i)@+1S-tYIZ!(@Fg7<>S>!9FAWojhtTe-yD7ws6 zdR77yIN6byNqi mEtyT!VOA%$7$}XA4?o6z=bzJ3*OR9u?sg75 z#BF<`q48<|M%R32@zxL(2&M?D9M^h9_P7$?+9Er`4>2~T39vuX)P?l-`MgFK4h!+4 z39GfKWcRpk7Rjnh6rCwOf%UwoF=K9E+ t5-JnU|;g{^o=p_xAa?S77ZJN$R_@u8l`GCXoRL8V|WlW=eOQv %VT5voy6G6ndf}Fmy9W1=>ANX^Cymd<_2Zg$D5y& zTllmW?cNqBz4d-`aw@&x!YOD#0g>0K; `H5WQ8SHNN43F*H!GBOad(N2- zTsfl^4#-N2Q A5x6(evSR|7<=VJ)J0BuI+qQqn9Jdu zSYSLAzM@c!JvZ#XnPKh~KB}3eRmOz4|2-d)Q}D3gLD^Q?+)Dh-otV<8o;$NswDZzC zD2MVN1ouyu ST*Pslwg$A)6^#_P z+%qE8yFl3vmRO`CR=k{d1rS_JI2G}D&Ipu7-?G5jJ0l+Rbrd&D 7CTC;b0!$NO|L#c9KN%-S z$IL@u5tYXzP=2Dmjb@{Xz4hqry?YI5chs2;byKzE+wM!Q4& !kmx43@lM<}HMbqmt5U*v_ z5nOACC(Uy@sCJzaX4Diim|dr5gM$d@Z8W!6P8qI^|J}S$$3zx%6q@UK`0zR3eX^%- z9UpA}Kt3|XP~T#cIk3EUZ}+1zhrN3XcW(>VJ~F!Fh{tm#&_S@h 3F`DR}EV)Q|6#oh#$~rkjQ)9)_plo8sy|Pm`2MfHV4%no*5%C9& zr(U~)s1Q^3;zi}oSD7JWgm4Yx>9R>KfdZ$T*Y?)#8)d!QMh`+(!d>zY<*}b=%qFiq z3tb7s)6wnY*!RKz2{7#PYnDFRa{toiP`3EWd^0l3iSwx5+-egBoa0Ak3bt=|*V)q; z*vCS7%-BxS^D)F{du#`i7wA<{A53yKH+az78shZuGxU(|RdXDNtqIU|GD2uHy-LU# z%U>6hzj41DX_RmsD}A|lDEM2nS{?Mx =e&1_% L|Ml7zfJnUP-mlM5)8J02;XF z*jl)y1DW}FYE?b0H}Ybon6`b)P5{!D_8yEsSYX~tlol{Q$ugj(yOWGAaOK3Gb9MUm zAUFGIv4x>WWe5}GZ96{N9aM+Y*@)^AE@KEj1VZGMMl=j{Al#HSjtVm*5Yo#&1H3 zhWD_OhV8m$kAqEA|2`}AK|!w`cTbuQ@v<89!!me_e6N89>KtE3_DLXeDp^lzLWpvj z*4IMKt4(NMbF&6yZr?uXiTgsaVf`eW!&sr=JxjExfquau+%}}Z{c1Op2rPcM!P V4n1^;8&%GlWj@oojUX*A FMIZwb}$SP1vM!Tfcu^3J?qm2xeEom z-2?F)`?@W+UwKx^;`~ARNeDj`VC )r0h*Uq@gJg<%fj@J^^2W% zRi`}aRY@C7q&kWh58G`@D?I=9f}(&>_}%2rl>T*2wr@ BCj$s5TOc9%0VWjYEyM6 P1O*7G`0L`x1P3gn}_gYLVJjt z)y2xVef>F~XPq1=gYp32olBV!GcMO(;JQTeYV9E$jJX)@MGb8xEZU${`3cpVjC3Pd z`2#D6I8zH{U{FVVw&fy)sG^GDogw@td_%7wnE79n2aXlg?Vw>@#pFE1vq?f6oSl9B z842@EI}S?sCcPPbv_cdZIRYS5#$!zMl+k&$}md?j}f_{KJBC9oi9}(#h4e+C*S;N z1rD$GRCor-J1>9w3VOmhx+{e9 |-3fFRZD>HUxlj=IC(m}|1RZaqFCY!~nl`Tv4;Ii6mqi##fwUF)nH?$# z9Zs8!ve;6~?VTeb#rRq46_)SM%G|lHqr#J}vceM(-^I?$e|qit8+bf%0>Ek!L%V}S z&E^O2zO=%HL d*OtFwAoG@XAj#LHYYy1Wr2kVnW81Bc8xY$Z{-8W(6;EP$KK=Eg^Rr<*tK^XV znO;@Y{Os$O&^gTB7k(cxo)r;Y#CSY?BO!ceH=+0q?u0cwa3yX**hi6%xhlywLeC{9 zUVnv@^4uZW($Yd4DqVlbA4TRhZnk+LB`;q*X;D5J_$CFSH w^OkYa6qaEbPKsRD+2+BY+|>c!8~!K_G-01{qH>2}3meZZjg Sb}KMTfif1I#T zHSUloItpNa9{=hGu_xvs9)zHrAA8zs&pcR4_CY57MA)$8G^z>#Cle@Lk#$wDZz}FA z8k-qUIkf(ysGVY24gB~hmpz~L70beM;_s(C-|}AHXzeFPP^%3hAEF<=CF_BZfo`TJ zb~0M6HFFU^%%q*mYtI_Xa~KN2eRgaC#vPt&Og~#!O8?mQQN&Q=be;Z&oOAnr?kJw| zp&MI(G;#BjoeJ!i9xNWcoj4wDoGL0Y?oaT<=Pn9IeHhtQKTXrij@ $P0mt!J8|EHaGpG8M@1~T5eBsn|%y% zMN`T#J|s+YO%6BGGW7+gc4ehKdECydwdQ=}k6)wiqFA;Ly6`dOx!?wWj_t}Bnt#E% zKoqVXixaMTG5)M)4~6j)8YrM4Y%VKbxorRVD*m8B+8gxbb*knLOK}rLiuIJXy`?|2 zEOyw}O7TIo{Ny#chMFI%f)Mg;-D*N8 )53HI=1Dd#GT5v%i zN|AvOmStv(68Y(AIx6}!Y@M_yZmiQ*z^VMe?o!~%2HRv?AC+lE7Xo9qVH;t_i %hwroJG*zvZT# z^9+p?%NUTAQ^?+?$qde|m2`9wxf24&&AGqX_Y(af2BvNmar8>NIc~CThe$lpRk5t2 zIt|sBH !d7xEs4LO3g!FY_SiSG0 OyRB1?P9rDEaz 1d|i9u zK4oaVQH7|)@o;M(;kj53UKR(8bKU+ION^`>di=DZDhP~SVsYv?V(bH_(oX8B@K^Qh z>CC-3-686=$4B>$opo=e$iZs9;`FojWkMPCYR2f*>L?e?3))O=vWVN-;B6-j5|IWo zS2qBgmAO(&hIKm{`IB{Gb?Yui#&Ub!L^U1O9b|UwdxZl)wwZ7wiK#jS@uuEg4qkiA zqx4~Lib(X@)7BmHPzS}mYv@_ZT+BoMSKQy%()?J8@B=X^Ak2ka<`()2`C#1GWg&W9 z1BLG<_dI&glyzHP>hRJVlS8e4%ULSmyJEJ6Gvp4elDxw4nC#qz*TG%|Y%6oOXI#bt z2ilyY`JfkBhP)5I>BUg?<|)r5Q=3=RK*IENN2|RK?~e9&-2O0YHorH`iZ{{9Tt}F< zW9VHEQ-c51iWVeLbLg}KD@&o~PwRSqUk>u)e=eq{1Jm_*0Q$kFiCzgr;-CTSqr1Gb z&=ii=77jZLSPbI?3pgG~+#353m_y&*yQ*PLBJ AvvarfNRl|BPvduTd1gr^7xP=Pwk-%dx9NSu$)& zTmLFL{O)X*(y$Fs&| 1 zu&1%l!y0Hrm0Y##k+|G#1yUm$5-&SGx9xXzkFCniA5^BVqR37|MZx!fqX0oq;Y&jD zo 7$4KXC~>*2G%lvGPLZ{qX`Ek4|&|Kj)D7#!#VF)Z?Z9xy^8YB$KHomMz52$dCtSy$%N5HFk{iQ@l2Q!!(Ezag* zTFXQ=CMEj!uS%vcyYT35r<(2sNsDf3O#Wd$?p;}oDqWPtYsk(A301f$NRohC9!hw? zEzi{9V|5dAxys+&t)VmDvf_^W>Iq)%v-l57l{`doPFk`>9{EA=z0B71YmXVj{{Wg@ zS&sO7lBbM}>o};*=N=@+Y1l}@2518t4?G|Kw9Q_8PQcYtg9#+fcU3R}XH(-0I13k@ zy1149hKSB54OIaN9ovB*ggVOg9fb6i&su4l>}91KmsDlY?*Z8%(&4oyHFq5YU8Lq# z5#p%98E!tjjR8?=F(8>X!^U`;p=