From c803682b8bc49efca5f05a426be4d00dbd59f2ca Mon Sep 17 00:00:00 2001 From: eleksir Date: Fri, 24 Nov 2023 02:29:56 +0300 Subject: [PATCH] Update README.md, Design.txt and some comments here and there --- Design.txt | 7 ------- README.md | 24 ++++++++++++++++-------- assets/avatar.png | Bin 0 -> 26536 bytes data/sample_config.json | 5 +++-- lib.go | 8 ++++---- main.go | 18 +++++++++++------- 6 files changed, 34 insertions(+), 28 deletions(-) create mode 100644 assets/avatar.png diff --git a/Design.txt b/Design.txt index 2b1975d..de078cc 100644 --- a/Design.txt +++ b/Design.txt @@ -1,12 +1,5 @@ Oсобенности реализации клиентской части. -Общие положения ------------------------------------------------------------------------------------------------------------------------- - -Nick для room-ов един и не может задаваться на per-conference основе. На этом завязаны отсылка ping-ов и определение -pong-ов, как минимум. Хотя формально джойниться можно с любым ником :) но что-то не хочется потом распутывать этот -клубок. - XEP-0410 MUC Self-Ping (Schrödinger's Chat) ------------------------------------------------------------------------------------------------------------------------ diff --git a/README.md b/README.md index 8dbc01b..140b1f3 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,17 @@ # Buny Jabber Bot -Простой бот, работающий по протоколу xmpp. Его задача - банить абьюзеров чата. - -Этот бот автоматизирует уборку человеческой грязи. Самый важный вопрос, который следует себе задать перед его -использованием - а не забаню ли я кого-то лишнего? + + + + + + + + +
БаниПростой бот, работающий по протоколу xmpp. Его задача - банить абьюзеров чата. При его +создании не стояло задачи сделать что-то красивое в архитектурном или каком-то другм плане.
Этот бот автоматизирует уборку человеческой грязи. Самый важный вопрос, который следует себе +задать перед его использованием - а не забаню ли я кого-то лишнего? +
## Что он может? @@ -11,12 +19,12 @@ работает по классическим механикам (шифрованный канал связи, без возможности коммуникации в незашифрованном виде), без поддержки механизма start tls. (Что-то в гошке или на стороне сервера при выборе StartTLS не работает.) * Имеет возможность заносить пользователей в бан-лист, согласно заданным в чёрном списке правилам: - - по совпадению с регулярными выражениями в nick-е или jid-е злодея - - по регулярным выражениям характерных фраз. + - По совпадению с регулярными выражениями в nick-е или jid-е злодея + - По регулярным выражениям характерных фраз. - Правила можно настроить как глобально, для всех комнат, где присутствует бот, так и для каждой комнаты отдельно. - При изменении списка правил бота не надо перезапускать, достаточно отдать ему команду rehash либо в приват, либо прям в чатике. -* Есть настройка заходить в разные комнаты под разными никами +* Есть настройка заходить в разные комнаты под разными никами. ## Что он не может? @@ -48,7 +56,7 @@ make Почему нельзя оставить комнату анонимной? А тут всё просто, в банлист заносится реальный jid пользователя, а не его ник. Соответственно, бот должен видеть этот самый реальный jid. В анонимной комнате бот не сможет увидеть реальный jid. -А автокик - это конечно хорошо, но есть нюанс: можно, например, гадить ником, поэтому бот в автокик не умеет. +А автокик - это, конечно, хорошо, но есть нюанс: можно, например, гадить ником, поэтому бот в автокик не умеет. ## Как работает бан? diff --git a/assets/avatar.png b/assets/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd4ddae74e043599e69b517ea341cbec4a8742d GIT binary patch literal 26536 zcmV)5K*_&}P){00009a7bBm000ie z000ie0hKEb8vp-j50H7HE(BlUH$8X*}ROQWyqyY5z zKbVP#0I2BOOR2p5`1TTSJ`z9=HwF=y=;1RRzovh_hVgq+9M}Km!WJw@3`K~s?+1XK z%SDMnF-nMun6o^OF|rZ1oaec4RH4k8GS9QjQ077kho-iL8`_@BBF}glifnnZPpvN_ zG>YY7I?G*&#G)V~RgE#Gl)U$WQ<4-z%<@dXBh6ouB=n8U$DcBuO?X!%1XZP@lobRJ z1588^6_J#bpzp|uNd;g%UYJH95} z-{e&mFjyj^CblsbQ?cW8T-ebzi9lqGQKBr%%Boa_h`f7(z9aE>6^Q`_DMszaD0#vg zL(sQp6ODWIW(z?KJUrQPgN_#_db6{@gXTl^U7_nJ=I;uZe#!0qy2Fl-r34~!S#F$F zRS^-c5E}-O zf|NlD(1VSSZs@I+zrDp#+8{da+wnI&EP+6J3>@_CR=qjin$xdReEa64Jj*jjP#!PJ z%FN6RRw6@8l42x+A41*i%PK3YjEP7IkRr?9yL!5uEs_cu!8JRkfhu^|Ae!p!3~zq|f-JjyRWf*#`?K}bX#c=P)H=Rf)BVlpeq%ukmmk1tG_ z6G%YmXgH&wkM~!+^%Tc%f62U*2rS3Ys7myXBPZo?c?1Z3NA$nO(OVkTkCEk8gpMIz z6@)x@1~6h+$r-6i8$;Tz>zkWxR@(R8e>|y*qnlzTCeCc0WyTt45{)VtV5=+#XwXDt z7%CuD(zkX@1SL{X1QG#E0z}mSj1B<`I{pXJqqBJUF-np_NJ2?0(fya-y#C1-w;`U` z>~MC9AAaxACm-5rl>jA;j6|xcqRMZ)%R`7ARrrnW(wGpb5|p6==y$Aw-f@}urQQ0q zht<*43>gL|NTQ?yC1TA9xr0?95u&6-T`y4v)uC;gVOUjVPE1e|5(U^AV~t@e0!9GS zw8(e6p$h>JFUgD##C(iHJSK_+il8KjN}>cHD53(S3@|{dM5FZSm}!7Oq=pnwNeMQ< zpuW9dzx-wr`jzH<%XGwkQX@-xy&7H>>=@D8cjbD6lw&-3}+=dag~id$Qc7`nE7pd z8q>H0Bp|9HB_90@v2)H!2r;yhLL7YXhqhf0-8QCyDEQF&&=T#fLrQ6LQf+mBK3a%y83asIX?|+>7R#w+gjm52}3^>`}%MGJ|E)h zPyWbUo;IwSgbA$2eB2Q;k)*!c*I>ieHk(bmKE%zQ>o#U4vWbRyQk;D9{^WE8B32@! zV=DO1RQ}i1O~c@gBje0?GCg>#HzkXX3P~hH03}f-SYw%aJm;9*iWpLYMM8?20>|k4 zc7JtsJ}u8)eznOn>k>QVq={8ozzU;aB?1|s%yQ8rscR4Gwf2X@UR5qui)z|fw<$6% zGBy+x9`FPK2`GXFqCilaXOq&dPFGJqx$M_r_f_-apKj|H2kuG+882B(cYpJbv%I+a zli#O#MoJc-BpF-j{r>tkwcX+F?&jqyD4=qGb2A*;(#I9KyEF{ec9Kk4JlX!%kN^Gu zz(odtLGngve<>0A*XyRuW;hC1Hiq_ol9xOrM=_>BL|8jVAv50602-Xt815H~$>qiQ z)m5(AAsr^u+3CU>)4;yAM23|iDuZfN01!X`1q^`zC1T2fyex8LCyT{zoE<*jHqZR} z<&d^R9-ZuV-~QEK<@2)o?e964=UJ{kw)eL$KmWz`=U@8GJ~l0j5J*&vq*;D?6NQV0X9D|Z2R!d;m|YZmlyH$ zd{ND6o9X4FY_Yt#yqqpq%p4^Ri)E6OoSP(xP=HF&s2ZV(9?Fhmi8F43MB)w-fm&=- zD{exkXLS1e`NgLC`Jdgc|EZVTe1E;K%Iyn4=MSr!F+JbeA!e{)?7GEKso3^6k? z8|A!8;!;YgEg2}m+Hx}a@Y7FRQ6yFZ6oN4eIST%5q47)Q>ziu$DEDewS!?K>4Iw}Y zOn{8WLJB065Yy1dyZh~7TRYARm#KKBFqzuv1exL3rEcf*gHEWbDr?GmI+N-2VD0wP z5Aqk^+=hN2vXDcu#79pSmzP(IWtHV7uZqc3G;N4GYg$5t6+;{YB=udp%k#>Vg^B`_ zl4o|zPLY6cEUW-PR0I^pRO9%xhLKBtuHXN6kJpd==l|!|czI9v{pQcRz?_&UY2L-9 zmjYx+4Z#o*n3w@WLY_^RxyafMk><0O9%85`oas;zls(0WeaKGVymk&D*~z zV6Dk8){y_IrHH7iTI;5>`Or!1;~)`|jM3PedK*}Rk^IT!Y3=W5(CM^@jJ(ov9<$6Z z%99VDoTZqBsJrbFDy!AWWL8)cMMF#tL&*#(0Wq-|;VY69`aV|0k`1RAh?I@%`Z_Bl zGe(jSk9q7vO*=YUeJEo`)C2)6*}^>f;i|B+fBet?aJb&*ZOKK|gb;>c14uBIe#B5F z1wmNBLL4}2oQ=lPtUUSj!^;257^vWAoK_!Klo}Tg%XY6=s)xI=HLF$e?a^W z`1Ft!JpflAdQ-R)!7!VqZo@FBC;?1nR?d7A*RS`B^8D%f(=-e*^z&ujhOZarU0&6W zLYXC|rYuuc#j?_}l<73u>^_DUA>I*p#Dk;=B15D~!N>i6|Ki1$``zJW^~9NM%$GH3 ziu~&3GbmNn6o>>RBsx0Eq$(p0Noq)mKwu>ZAVjfT%ood5Y`Spg9gv1Wx<2>fppMy) zDnXzT5?P`#(NN=b>#$2<{{4@C@TY&Aov)OS*}l@d`THA3uc9(y{SP(QL%#ox^v!?w zpMKQ$9W&DrlA;IblO8~eH|dc=DF$C3HYoAgk%gqto-JPnSNepTGPf z(XHyu=I#rG-K@-+dZyNx-dbZ!vNjCi=XL!}QJpg~6{r|%N^7dVjo*Cp^ZWbPlgZ`D z>WRy8W0=_xv0-DaI~>+cy`Ilk&hRm`zICqzuo8%wXhbb#GzFmm33-uCPtW~6T)%v^ z-EK5V26o0U$Pg1zGCb~N?=)uEb37E3T`WKTqu)LI@F@&|`2n@~E@Jm4D`q~TW*CFz z@vHCX`yc$L->jP^iCUK(Llmh#z&?13o@z=dh7f}{Ow(%SY$1s>QS^zF%Ph~CCpn%x zEtZS8THxY*IxlT$&1`DQB4h@kpZ9(J>G%GystQ7HSjiNIr^e)}MwL?}!x`XiZeK2z=hnG5P&|lK!{i)id*Jsf!OEAQz4uf&0k%_dVb4BlAtfL7?c71$f!A))@V8$_IELw>13V)+iVIb zAsM!HbJ(n3e)#bpO{OdF_e5-r1r^LQHW?wtS{Ij1t|LKiQ$mAT#nYc3QZG}fa z`fT-sk9}?;iDAj`22FiH)ZU=;N563N7XNx1#1dePDa(>ZGzdz7IYM=Mw4gEXsjA!= zQdq;3u-mmMcB|#Yu8jEJ`@=wJQup(pZ@RjgBEWkfVzT&y=YclR$ZFP<_B2!eiWelS@vk!?cq*?e+RWxrE>Ps{e}zy3weHcMuP zNs##D>guCUf8b1Mlr2nVOXiHmkUAEYW3f5L((fK`)%+p5e|IM=!4RM%1Y!jd879Lc zbTRsO10ACU6TrmIID%A#J3X1P*wtiJZ*O;ZuaXZZkIGqP%FL}6^CFwfCq)|ia<(w8 zj3Kghw>O7ZFL$RWpDb68JMW1!vzaj~g5KV|+HBg-KK(x6RD>B!1+inwp;pB}Enp2h zCbia_tS;{EUIY)9y~()73Y!TwCY06u$&(+veEAb+vy;<{EH5NMH2|bSP*IAY7B<4T z*<<(PKmAe0^zEO0HL;n}+=4$@J}&kW`<=-P5%HDp3zORd%z6Z3b?jKkJL&sBKYo?m zl^;67V*mgXGcl7HaevaIkJ1>4vdlRP7K!sRpIsQ=_1dpXd&p1p>U8zdljYULa#9-B zL~uhNkys=%lB>Eym+tT5eE#9Zqszg!eTdE&XG$iQw1542y*hiEPcHjeXqcEyGVoi(1g%3m5)jot`zR=D;;O1jJs7ete zq>*x+Kc0U7kAJ8A_Wx~P>>61C)%_P=zka#Kbm5hP>VaibqFgT38X-gxNonj0q=$C= zce_qUb${?aZ;K>LY5+NwTm&dWN@U4oV-=wmLeMd86|ki%Kr)1Mk-OZ*ZFke87w>(v z`r!Sm)uM8giDv^NF~-=3L08LDASw-;?cvL>ZWr?puijgL_I(JD$!vL+yVCn~clQsV z;`HSGG*tV;?P57)MA7($J)`2RodE`#RM(PXmQ~Icn{_jpTpEUgiA0rskf!yE**vA_ zoV_^z`1y-}xPJAubA_`+$e;k?m}&zGuu@{SBz}3d`u>0X-M{%i{^sW9Zk8_G>pP+Y z+{SPw%o)q+qDqSsD)IoOBr1~UIUAE6aDjgX3=GNgc!Z|eOVM!W@F5; zDFmpJwT2!0*fFcg;^2pNe|>ghf9w07e(>nLa8{Cr!5j_^!De|?l}oA|8)B2%-fwo@ z*~NR09(_{IX7{gu5yE0Io8|eE&=14&o7?9nCl^It4V}!U%c96NHDD%0Q81Op&A>|% zOX@|N7?Uy6Np-$E+=&*9F{h3I#VFfNUlvQ}@)0#VJ^%RGv(ImC>Z?cRL_rY%0usQ0 zC=wWn8i5z|XCG!ye{}x&|MeP!EwHefOcY@sjaB0`E;-~_;A>LSq|ug>$Df`5;xAuzzBN>-7!jk2#PGy7`_0W?{&}`sa+awf zQN$P?=sSwBGx#eZmj^#HYP}uT3e_<97($Fu62@YibX0e>Y+UB7F@~*SCXvH_Uy^?K z!PC=KX~_E?+xsD=>1=vBnHSC_pwX1n%l*wdNcZIFC&hF@lKgP!+9tDRwU{$oD0aK; zc6Y4@|iVx@Z@X`jsTdGb7V8S zUN?*RijLh{cY6ACz5dyHySuzt2?8`8>yx)^FA)f_5pKDFTl&LxXQa$wtQaLt!d(mp z(%pb~>p{%K5&DMkLnA-s*R`Hhl?XQZWGzV1w|(+n71m^yvauep%+8Q=&RGj$1{nnf zPi=kmbbh%kOsaRgu5WBLd3<{Ekp&2irk;&WO8bL%Zg#p@PO6HSL*H*Vb&_;?y2>&o z<3l&B@2{<`rqk2RWpy(cn?JOoAWD*OcXzwn(dy(AsKPMB00qbbA+wU_tG=a4HHD77 zf#9sWI9)t{{_L<%%cTJYAa^dG%@(h3UM}X7EXx4`f+7({keL7(8xBAcGt95-?s~mH zxG6a&BnU$AHW%yI88QsA1ZP!65+EbtY0Sj`Ws$#CeLL(`^V}Hj_qF#_RGGEL8fVBd z8DosK)>_N_06nR6_3m<(efs#!rTX^nna1IK^@pp|4{TnFf1xp?lv1L*_237+eEcNO zKwu4Nx7i)`-Rg9iPfMf@Y7d8-y53!0KF;##;M?8y@aV~zH4#W6Atm1rX}7z}@|88M zh7EB+WR!BG89>(g#cbR6TaY83GF2kc8#xEH`CdYEki4&Y_)v4UT@ax!{y~E zkpYIcwT}WivKEw7MSU@|AAaxs7eB50W*e2DxyE3UyKA;fMU^r)#t(hw92@(uNc@f5Rdfu$wmtZvQ)ArFN)+@Q3s)5` zBZ`KI0fN4ZF(luU46|aozWIu!|M-JXGRx2b+SP~c&E2cj;@nW))b+{b)oh*-4GIZe zee>!W8@E`MWMqGTJz10?$!7h0S{0c=ySrb%es%u%O2kWOi9$+s*WTaUJ{yM4*-weQ z4-HdvHX3$dhFHM4?9`ZRf?=*ej>l?`xSCYVw|$>aXBEr>$ddZ=^N*i>wQXBj=DCjK z%A7<%W4E}>&Yn)c`r?~JD}z}QdGgW6AOG-&uNS(bdS%J`LcKVzp5jX3w11bkVQ-{>5SUih08J5aWH@Zmlh+)smUWR1ga-*i1wqqELn!C;$Uq zx|}AHO;a})7biqhkYUJjS(WAM{ob!mG6kv1n@aac=&?3X*9~i>n6O`-S(EpD+q24$ z()DiFfBB2siUUE3_aR0JMV2|{k$v;8`>bu*1IGjAbV!F{J1R1(?bMsX- znU>Qy4A-0W?e_kwi96fv_ZD55acuYZub$7Qlgz?MZ>&OV4fm3=T{ebu3`Hs>)rPJ z>X9ofYXcla>fjIC&2H$_Wkd9}q;}{IebY?JN)wEAMO6Z9Sgh@bzA1{SD$|(iNFWVm zCA@A!EVGi+H|m@H3z2kw_O#6W%e&7(wwjzD4$rrnmzNjkLBjp*&&t^u zapObRwfhiWFRH9L{Gw~tpM3C}Hm_b@zyA8!FRniNkYo^D$M{nb(;RlU*Sx*QY8537 z&ZzJ2f~USaF+f$#fNS86i1K2;-QCQWE7GVG2@179=dxR}*Gh#_56Xx#C|Bh&FBWZI z7nK7BP0ku?z`rG$B zFsMqtx$R;oGB!vD$QtrG^xyW4PyS@+5C`b6_3b*eFB~06wuTNWchDQ)HQ}YP2hnW| z*CHEe19U)3l(Nhcr>0qp?!a5c0b1MKo}69;Z;hR@$p9u;;tY~BHp$-~cALW?*-UrM zeH$At53`l9(IinBBRLp6BIX)_IHHp8M%A}%(xd3{T?0^vy?lB>hHP#kC6F@d*pnKE zC_;)!f=FVd7=6FJ|M+`nkIM$by_LG}H@7!mPbc%m@=}Ijz5aISO<7DO#r^hrQ7tUl zrrsN#RFioa`WMfC7KY|@`8fLY^;dgjQ$-OX*W3E+>}laxwM)89DRiB5T}rXatVOau1BO5Zi#eLw`-p+=Z9dP-Y=~Ka07tm+NL8YvoayMf>G;DjXv3@;Q{M{HdOlyJJjNgyO<^)M#=6+H*F*OL^XlkE*(h=-WiIz|E7BQO zg$F7KTT808Zw^&upaeunkQ9Bt?z`6a$aAQot|bW+esNOLUg>Q|i^qWQhCt1*h5!H{ z07*naRE0589sU_CqabH; zI)uJyw|DEi#d2|a{_)Trnz~L&X5}f!?zZ=a?P7M~hoSH4^Th=ugl?DHl-p^&>u#^N z)A@&!$pNgPA$+Rm^z4$w9Zb-np|eY@*g zjUI(X3P=G(iK5IdFTel1J1hL;(1oV$d`u5r|53q5Oh)KUXX7{%_Rgpch?Er%WFNp% z8|^fcESfz+!S@76!wS1eOsqbKDvrS>-%~b4x(l8%JjH_~0$JuN_^OSn)w#3uE1M_TX=W*7lwjy9kkcx?lEFbzVg$87a97|M!G_I`i(W3J7@w~3<)Bz8KT5unx9>qmT@-i((cf0_WQ2y zB?%`SMX$h-S^O)J$g$@k27GLB0Jey(zOUWX4TclsXfsd%DWxbeSuzHsVl+5nRU2Z6 zA+}8_^SsC_-|hSEdbfV1uxzv)x?$K|TzntG^?nC&c`@HKFLvwOdAVxZASmavM}4=B zz81-Xw~P6EyZzUqlth}Q^#Me)%w5fAPnOFkLNk?E@9lK*+e4@IzNlues!1WKPn1kD zM7iPeu-^y2W5Y~F%|Mg^i8(NLF>X@~AP~DG3`{e}``ztwaq8Q~ci*)88yV8*r?U)X zQSV?G)*=K@>9UHv=Xo_N7pr-Hw%u%+L+!ghg(#{?Bpv&!N74};scLwjt{oe($6+>w z{dd3rZ~vda{4e{ahH=RNBn$ymAW@=SL*JzK9@?m4b$UWXUAOM)mwpJ@ zBul9~>|doQ^Xc4@>)OE@BOu@ILoede{xAgZ=b$J^f}!nW;Kl5+>o!L^az#**ibXQ&>*Q_mU5X?S66M{ZO+p#D--~#t_P`xsPF!n^Lt^3E&BcBn^Zn zg1>k-y53b#7r8Z?}GPLQ4P(v_d|0s zr_jPT2t6R+985?8@1X{+z~W?DP3`I=y}19jGDc)(Y~h^YX_1vwEeaoE-wo})IUMS~ z^EwWnk${v0sth`gGBZ7NSqWCfTwQ$d{f`g-<*UEQGv`%;k?|yeiA+>hiK3iR-t^r8 zHJe}*DQQYwfYG?oprL`8ajpSFNL`L-d>Fj%Vt{yR4jmgDY83Xv_uv1mtEV4#{qETp zKfSx#lgxLUo>B>|lf=IBLkGhr)9Dj%W$nCei|r;aGf9KYClg4%U+1%FX2}~;ab(3* z*&+>8Z-&gitT?D!CC!-CurnmS->a-xnT?|q+Wp;Pa#|VF*C`mlBXlr8k-;%o(Y8n) zvn9l!EM4aG;zV-OFgoT+#e*0~FqGLc%aP~RY&t)Svfu9OebY1zG^K~K^WCY(bqimj`fu>EmFSQZd2mv&98O|eA6Cmp##&>hb^Wy~ z_KIF2S#z4Zd5UCB<%g4JU)@cz{bBd>t4HvDSZ{sb@zs-)`O-QAQlHt0BiGhpK98up zrWRyGm@vt#mDoZQYQdRdODU#dYY7rYy+m%|3^EIAz={-L7>1#s#o`RmGPhM>clEZc z=41ZOBe`WHsaYnQS!?IhS>N^bq1hg`P2G?WkP$%;g}lvf0Gkp)xZunN+4pskPjYKj z$$Ot-0+F-1!iuP%6hl7R0E`n!1VS2OkhX;i{17B;Bxv#`hMaLt&TGg*2%?qfLS#9g zePn2fQ0BInO^2K7zx&PKdcQ1Jgs|QI*J@S^Mb()xbEeW}#d{xruj&8f`Sa2u7FqS^ z@drdqUw60H{|F6reP7oFh9)~i%Sq$XPL%n6Cu_yhsP1K$2h6r3<-#;yr_z5F=?9S zu-*Bg_dfJPH`1p^j2f!en#{nl+AhSVZG#b-PXM%aFQUvEjn7DlNhpV+9^5)om7y>k zBgZ%l4N}1A3W(~Pje1x}Qx93;Z3Z6H`@Zi|3`L$lnoge@b7pPjh!ztfd=BBFn9mpQ z?VIH=Y(k_YSBw?s6_Uw$^8R~2jNbRdfz&;|`fPQ2wp=bg|CuZDZIxdhwm<2cUqGk# zH{t$9bJq}bj$~&QQDsaj@?w9#^WCPjnUdyga+cVyXXSJqx1`7{^-)K^j)ID0+vBS3KF(7nHS|WTb?YsW@z^H_I?|O zAYkjrh@@vPzU90)n-&LuNJt7HV;YN#E>a1c*t^lNK!(IuI~oHGJ~)2 z@*0DOLfURuR09+I(5>%Ys!aFWb~SU>R1qeo5MoL&bt^YF_4$QPX7l;tgS*W$TNdCs z$U&mZSOs}L&9ZsdDwE#b9cELnT1=;p+jjH%_SN~tV-eH!!5CrY%$!?R->st$AVoOj zh9sbGccD79jzMai>-*=<%m7FNGeD4p6mh7*7V{;N;_Acq^I|SZg_B}CnM|2?ZF^r; zbCJXpkG^{JI>*@pjE!0YNf5&dz&S^bbDPg6lhu6Dbwk^ARzrC9^2J~L&ELcc8-+6& zlO#;2aFczI|Qii3xs?uDP8r zuOPABh246H8o&PL`F7jbEVucx?o1zD!R7Mg<5zb-@!h4QNkv&oUScQF8e^QBM{l3M zcu^K7%SB_25t&+d;oQ~X5Ml_Yr<3_|K?|biG2qsOc6uc-rwQk5+Zp1&9JIpEEhj|botTW z{q3`#{o-dYu3y#dz}6VHc{S-h*{Z7e@x`M*c=k0rCn;HSxlt1%Ns=UVa(Y?U;rjLc zVtKJ#%=<3v_uO`;nubu_Rud?kwWX#a4tWaMW}OVLr*09WPf7gXo5Q!xMrWTeQHm-$ zSPK=T1Qm20>K4@uN#JsN{Pd%Iav~VVK%iorImw*$9-xj4M4?HD84xG~=>ds}1O~_u zjab^lAk7iEA<{g{%%k@o-`?LQ0&-3&ZPzhbYn&!ZLE?}?h%rPFbhD1mVf{E>$>X}C+Fp2m58&ly5DSl zO6O-MWsy&2^X+cG*$hPU$4@>pW(Jq}p>LX+Da(sVRn4=k@<~Dzmle+DUEi&@_e3a) zY`@z%a{^>}F^KF4$*{M!xVt&Tpjj@?=6RNbW8dD_2MqxLqDP8o8Z1}1dXIh3a=JXf z`o1k^X+&Kpk-5(D#d_m6Yq9P`$taA%0Ot5Elq0101}6X!AA99*-=HPOVQEtP`t}x# z#9}>5N-3l^brjhcOTkJ=F(na=oS3D`ZCM#Zu^=i_r3r%{RE&y^AsK@_L!P0lF?5*D z&~(T$TCR-ZLXiE%U;ee_-~Fv0{dj(M`uCrI@$K#U>DAe6QvTylKVL3qzx(4KoSmJY zUHtI+dRT8nH4h>wq-r{S@$&g!{N-PL{p=fKvLwXT5Og*xPL}yT~_m} zVloFkyd_8#+Cq1ytLmF?24h&%j725D$EL@zx4~~39`x4x;{lu@CK4!-+LMd3?O`8c zANqkUWt62Mwz0RygqSoPafTFQ+xTK$xPmh43zIVM&}2RZctkI8NJNMMWllw*O^cIr z96I!Yj4gyFFRpL9A^W30{NAVE`{DHT?8}?A$;<1z`yc)8zhB?J-qpPzXFI>R{K3`L z@K68rvzTn2my(7gYOL)C@1vH^EmtQ=X}{mTc)j`dMaR@$KFW)n`eFCzbQTj=`Lt=w z;h?J(g`kJsKF`#9)CUy#;Qh{6F)YTw49e|&y@{rc|pZhw1d4!!R~ z2q{SPQ5EA`mlOgW2WcI%Q6{k_iDf`SuqpGQ=)GjNZ(Gk6i)G%{Lzkc#!Z4l9|4nn) zM^6_QPnM^)sPft3v?v#OF+UtON%+S<{x=t=tFzNbnvl80r=R}bZ2CyWX2leVHk;dB z-F)!bCufg8n9WZvE}v#a^|PP-^q>CeCvCmIzkAtz+b`zX<>ixYorb#O$EtdIcXv}w zvYah+_^(kT!~Ip3fkXvJxy)hf84 zj$NQ4%?fxC1tIbtr1y6Ax3_o7s;a7dJUySyriVvIr{`zm@gy%YQi>=N79k%P6>|d1 z!b*fP<*EpaIA2Vc2h{gI-1By*AJyWWuA?CeKm`~K)9ulx=g+U~@7}p|`5$L#{Pbx4 z;P~#t$ESJ8A_0-PapPJ)4ipPS80d66Z@hT}BI0UcKNyX!1!iOC;PIp5y}hdkm#!&g zRFK@g_jr+ygLt?;j1`y9o;)ox-;1QI>dp1*&z?U&JNrzd%wY=%)+gjfYiaYNq#H~2U% z_PaFdS40G`s8%+Lh`eYfB4{0`I0(8)7kig)U4LslnVe6?r>7_9le0ygTd~gDIM&XU z#j=jN#xvDg<)%)fVA)S*Atn}UP@Rrm=&B|k1&vY}g1{yEwC-N+_4oGnZ{`n|fBf>^ z{bwf+pPxiYWK5^i=_N^QS^*-tK+}i_t|lhdx<4Fw3O${%3G>RvQK*AhnYeOPq-E0S zzWvti`(OFHUw``kdpm;U;=X?OuKSR;yw zH8tI@(nt}tJt0jP!XlI;ohWiACl3^-al95qai=>B0t2I=m{rpjLui}m#goWNBnG~9 z`OW6iEuKn5P)aEgs6g**gq!PIH?Q4XWQ%b+Ny}_HpH8QzrB5rD*}OK)T4|$95+>2+ z0oC(`&n9r)PHd%yh;A4wtxgp*t6q0F9PQDQdq*ed%e3nDMo}kXDZ{V>-*otjK!`=P zPO&Lqv-hmSSX7-BwTY9c)6EO_)xC#j)5WrIWhLjclvI4{_WREdpWSk`>rR{0wK(z zFt~C#PLlHU=scT4{At{s#8EOB4*UJSF;JSATfsU3+zN(eYTB9F!lW0`FWOa`##;z6 zHN6H((OQ4d?ROn)Syl6Sn&yk5UQCy#MLDC~Dg*%~&UA^p+AmYTbO!L2C3Ox#2-S#* z5or^6@8N8JFxc1_9bDg1Nq?Cyi{)grzP^gTyj;lNV5Ln9vJT=91W8uZ_a8i2X7bzL z{r=a#`Diwsla6#GSy>lWe)i)Z-n)PA;oUzT9@oP+_q}i!T$xM{XAA7^qLW~K9m@sI zPZ5WJM_EeK`dZZpLR2+5ux5aK+o-qV!K}7xu2tGgkc7Fb0cAzpbT(bg7wIw`hv#7w zbvm8?pdZGu(hP`U65@-N89*FFyeIEpuvlAGLUSS$5i5Z(8c`(gi#TidRAke;yG~XGPHqWcp%TvNl@2PSEX_8 zLT8WKV9vK3FS3HAF|x64?)ki|3NVC~gUDjJSS*NHY2EJ+2E$>$-;0yj1cnvA;L)_b zB_!Y%c7GX^ZSq@grQRB-kRS%6Ji;hQhTZjp?W=h)&x^UYk}i(UPoJEQ=PbisxE}^x z&w1gd+7KAdOAYixqk~W<;hVRve(}}AMX@Nd>3{k82Wx8`5!?79T2ZUyMG!1X`AFgP z^z88Y>G`xQ@)TmaonaVu2ZPN(>m&-VUVmeAdv|y5(%SlFolcXalf)eYddXEKzNqdk ziW4Gd%f;GoJzXA6&a2HWu@($07Z?oT9jdYlU1{XPMPD={G``r26h_m*e)vUCPEJZ; z<;4-GrW)k634K-PMR`7%L{S(=QPN4)N9#cpMp3A>MvH;4kbHZ;w?=R8t(6Pn_SfWv z90^E7aiA%Tdp+vyiLbN%-l%tTYjEfJ;WM8Si-7OW=$Hm;(qNwEY zH=nFU)sMcvGhQw`?;PBGbI?zy&Z~J<^}AhK_3`@^BZx_qDr;9JoiIr{vw1Kau7^=E zU#7k8Ac~@@SoC`R(fTL~q9BX}90Xw;M{yKGM4{79`o7veIe#36h|M`{9tWH)PR^+a zBk6VgNs4TV;X0T-H7q&uBp#$zHfbs_1aVpwqft5<1+xj2&U+8%d|g-8)nORNaRO-P zU6$vI%)hK#;M&+5rKGLRq6TJv(LZyBZQeUT$e?! z*Tsq{x`GG*z&TfzMXxtHIM{#s?C!N2J6ErblrmYGS5m46gje*9Xm$^E-OEs&5Nq;_xtd!ap<1l(@b1FpHIi*B{17 zC+>8=yGsEtO#A{c1hu*}tsp>?Cop$Ay-pkiTie&&J7x9r@%hQ|;b#x;|6lAjXp7f2 z`#<|HAHMPCL0;LKlqlNV7@eP=9-ltHe(gFjiE}SW@HUaI*qVqs#Nm&B`oV0TO=b_v z(s#PO`TS_HSZr=4cfNmXIOrTbfAq(XKYHud8$Y>oyB9gC=e8=OQ34gy>u%bLoUgsD z7;D<}wGPf6oOqY64H1PHk1<&DVR04&>qG{PuoYbx9gT<^6AgOt#zxTVIZBm*s%p|I zQbwPgozEB3AT+FvcMc#`)h6_c$+@a5rjyf9nJ9`ogW>vLW%pNB^s0tN*^ z&zH_SF0$$VL3gyNy`P>O9|nPbB58 zsiXFjj(`Cqr+|3sv(-TfCg;_7%1 zfrSHkkaEx@NtI7Ko#g87PMyXi9-@hSb7}@A@UE(Cy}r501ajgV%|2-pz(%&EuDrK$ zK0f*5?|=Qtr=KXLcJ_ASDBjrGG+fQj5Bo85C|jf6-sbzhm=)=S;lL!G8VTk+&%Kvk zuN#Jm^Sz>2ltp1B)uvqE&;+Cfbco3evl%un0peb699SLjU;@~C@f#b#V68elo=6>l zVq&Ekd-J|8jNT-=tC$mQ;72b#hH45O zT+92Qt=`y`%v@&4?VnN}X zU<6EH@152LOb)`HAzkMWyw_HIRpy1Q|B~HTMB|r8^sj5-c|n3|SAu-gway~m)h_FH zjF(KL0{p5iSep2Z8J#Gui^4mvNWWCGUYQ=GnTSO(UB7x|YqSnUr1ZUSzFI7oJ3BjX z+vN>EuL}thSOdV8B%i z;*bOL(l=`MRg;A(52p;eyW20p1iOKlfXJ}h)5B>x z?eDl&{^MdlziReBef&ifAkI0E3$cQMaig9$%JY1Db~c-jqcAkgVQhlX zdR`XQm;LqgI4Zq^_h1HbyWmA}7IF{-y*8k2wa{Pse#A*%zkPfE%dcnm@0AcRw1@KG zReRb>L$6WwZ%H;F5z$(C=e_7}tL(kTi@&0B@QNxQt-7dQe$XoD!E&*zZQ1Dxm*shV zZr#EJJxHTHMF5yMjze3MA_ZYy`KxwyRtGq(bcmEvfRJ;E(Vj$XNoWE#5%I1ny|d0+ zagIP`Sx=|aZ|;4?jJI#SG3bU_akfmKhVirQ{U=%r2zdeLkaVCm6oCmwC&qNpP6=qS zBee7v2E>bV<)bKxwl<50-&DR1nN6!D_EMtV3MakTJs@U?5D_bUD{uOnCR6~eDrl4J zyo@0>ai$16?}!|+^^&KlU5pRoy`8pX4PsVIQs(9O>@3n@(p#fIX;$za-UDqR3C-}C z<`0MfjZ*#UZ5ke^c))t^MZ^n4fvt7*>Dk#g_rBIawX@46jOOW=L3p~gqrC_L%76;w zIijRx6^MtmrLws;F%Yqke^EcjD#lfWWv`3(?_7EQ^x5M_Gq?_`*9ii*^~tvOxKcHw zrk}6f#V>~}(hgtv+m@j|=z;up26#^WzH)~~S{0+EP;)F3~dO#l1; z{ok|k{K~_$RZr<3>7W2GN zRnwdXS+!cPJ|O6YYksLCL_d4}JPZO81YsC7qpDUbLwMa1e%D3KY$Ea2S}fADILONC zoa~ti(v!1aY;L?gTK}nVUm!xxI+tbnP-2rkZjo41F+ZzmraU5x-l~zhA=C(HX%4k2N(-8mwAOJ~3K~$ED z`{mEOB_d`bQ|PZ2()#%D=(BF`4HGrBc}FDOq_e-hTR)$?dHL#~KbW7M zogN)k-o5qi?e~BBBgN4L0wIEx5aY{duZR~oS7d3rT-vH4@r3gH^qXGSZI0Hb=Z|)F z>*1h1Hrt{HwdaO5C>H=4l{I)Pb?HoGRdXc1*i5Th2_WFcSt#PoQ4)toMW!qbUb{tG zsR1+&xedA@&`}f>d6s3_$mr>`Csm#id|Aw=v(LOd-QBe!({$kg@gA+VYI~lGcz7TP z;2c~dZYvOv+QQazC+$#17o5%>i7Enem{z$APltDiq%Dg@lsCz ztsk3zaoz$jMhD&&9$sqJXHLF)`t)~eTbDY6J#q#@n$>81G~d`942G_*D_a9tUt8bW z-D4eGh=;CJdO&DId;#*}oUijTT`Z^PWwx|cnPm+m73W4lo`&0Xr(~V z+@!wkoMQ$viX5E|S{Swv6J$ZS(5eI0w7R)?RSow55P<-={y+{c1xF{Ri-ppfsBS+a zb7OZBX(n2{kmhW@hwk?WyY^y}JkPQ$%d+`=UR70Dl|@;cou0*U-05`UB<}Tk zQ5c0`7zBaRN-Isg0?@y`=LIBUiD3dA){q)?i9ov~JkFO-9^C!i&G!c(^&zCRzH<4> z^5~2M1ExW=v8>CR@4S=r`|w_Aqr7ea1PB1iA7nsxRV;HrJXCL&5k_GU2EBgIJ73pzS(Q~)=XthVF7qre zt7@@WoSvNmFvcWtk|arzbo%{X7=}?CX>FSDh?OF);0Z{8v4)EXES76f4i!io%_IDB zah@K2-MMn(zcMtG8jePLSFbFV^HQqX`b)Rp-nn^$JBe#;-fA^A&Ya*O0%u*3XN!4V zWVS5IJUu&lW~;K->8uSlm&H2s6!3vY6u{e6E%l`$Ub9u0k#w*~VI4F<9E4C;sH+)Q zQ*DS^mnJ^&0yP+etbmFk0(4iaVW-F`{*- zl!#bjQAA2ac}NXU2xA1DBOy6EPByl$c7hG54RdsGple<>(_(e(u) z1R?4vvJBmBNxM`ld0HX>T8J3rQ4I$DciujD{%oRko{-Uv1E6L` z7*TkTs<0&n3M45+|%=yaKW_UP`v-n#YAT5po*NGI#O;Y3Ur z1c8Pk=RI+g3^%d4CpdUl7kR#1+OnwfG+)lD^LLcR8i+>KKuOPgVB|1|Desli;ub; zP&0P`zO9dW5%Jy;gq-zt>1>rR7TIE+7t7i7d^wvEq}S_4Q7F#0^FYCZURiPvihxcB z^EuKCaST%JvA7B=NW3V5W;ok^{U$-OR%|7%UTQsn3IGSFhU3^IX#@~Fa}JjNAb9)j z;U7MkPA2tev<_C41GNI25D~>H41=P`C*vsyO8to{)j+60LR6%qJltVG+xOFzA+*_tvw4 z6~qy$3blo9(gtb6q6<}lFvNU`B8N7u-MxpcVXJc!_LUBRK!A2goU9_krgkHB5LDN$ zuitp1dw%|mI8_LhD5bgKBQc9oDvILaaMF0o9HTu$DfJ2o7Y9Kcra0`0*979Xg|p!;w>|9ueLGSSFT2cn5e ztRfbokbDhmtD?x3lYFtr(&b`4T`p!(WV+q1(aKxvom0w)ZvfFsWMNdbsHTfW7KLrZ zlBK9BsJIQhXf;Bzx#AepIr1D`1@GGl33Z7guXHeFJs_pMyeK!W5I1TwIda`z^8TIo zj}9fzov_nvnh6acKv=ZVI_&k<53XL{s$G`lukr7VUI*ya(D0ReLLekWN;ScC!&6XN z8-p-R`u(`7!tu$>`Z0nb%u9+kysFjl4t< zK>^%M>j7ObsEt7opeWGkH2tCNIG-}}O3zhTX%)P*|GouE0A9q3R0o&#uU#8|{`o1v zHm&4ZHNS2UHf^1*eMCW+7`*CdUM@-gWtB2|`S&j!Rm7x8dD6^L5CrWo48Rx|gSy-r&zfm|@9z=Sx&B89c>XM?~CY>jN0sc_sg z3G+oUjb8r70`Wd0KHb{d`QU@S<#P7;ai&d|83Zrl7{tWIN)UutW=IS4dhk}-a;s|IuGaNjjt|iM(;?AxPnMkc9v|swdZ8t&c?eXO+gST&wj?W*FA1I2X zRSSMGa2BiF{!jM%|B}(a#d#8tGC^JXs!B}=W1&i94$B-S1kq~D8%_X_fso^|H3Pg^VH<>P{vbM)$0pWEsK)VT9p2 z@+D>q7>$sjxGjz~8D$tCiIJv=5;QvgA`nmBN?jIJH34hZ(Q2=+lAb0mA`dA57e?y) z-`^XL^KZVc6iZcmS2rnve`%_nyvFXYF2n2A;ngtbRsFaZ-bbk@x0Fj7#!82d1E>JC zAg{r`ReN;gJk5#by}{VKsJ5k;r56OMh`R3vuB%k2ydv-Eg52EDM&;tp1t6eCy<3Bb zxD%L-G>wORVo6gsg?uibdVM(ON8O7EDXStSYPEwATn5E z6*B1+vb3t%HDz~HaMONg_|99K^XYOrDK!&_gk&`(Tvpcqb{x3^vR}39D{JvOxBmit zZ>kwU!Nk4p2QleD}* z00d*uiIAs=LIe>s!Fdsat+1F+JE%;+gubBR_OD9WZKaC|a8h}{IM^R0(ef}~8l4bX zfB?nfff}$v&V$r{`#=BN%NtqRuR$*@0Db#Ec{Ku}SAMuCo01|$lBct;nG>zM0uo9c zB(Go{f(V|V0$7hm@3gc4W07uT`PHY-Htyb~2VW=Fxvj0laKNk0*tHRf+wXt-_4;Qu1ucrg zHKX6Ct8rj5kONnwQ#K&(mvz^c%TQwHjWCa=*o$1LfDR?G<_b@yCy|6kb$m z9rFqUAwa$zN4}mH_V-@xq!;S;lOL7&6Om&TDAI`(ZZ;n$$y=w#{U=YKnW!hyU6eAJ zWwn*kp{ToQn&er`z7x6`&5xd*WZOd(t^iO0Al$|x;5M8Qw@S6i3pvq2urbvRu%bnm;O~ez3;f_&uw{#7l?^_Z+-*B?B6_H{_*ZNhfb2zl8C9DPm9dLWtCK3l;i;_6gWI8=lglQ)@jZu zYB!=%tQ5idTEwkB2)89EgrZ|kdgn#@`MtuCI!(#Z4{qJ^p?b=A=qkzP2pF3q_!^3& znYpYDq6pI&x_!i5SPLjLGa$TxmNo0=9UZeW0tHel^{TdbN(7K*F15~Y-5Q-7pPigf zipnwdTEqXHcK_4*<)6PtgcuY$3dyL+X*QnMpMEx)PSijA{Qns3|71FollFv6R+TkZUOYrXu62G2d!@mA2;4eUNHftJ4VnKUghvxD2cTfSEFM3z^K1Ye z+A-W$#j^Hq-dNx0MJ!)?Z)=O$9EuP|?Yapg?4lzmYZwpb+d)>|!3**nDoCT~lp`?r z1g62rTb0h%Cpl1MZ93==ZoPHA{N(8Te9?;sgYGbdsl4~dzKj3@q&~gZqltx5|8HOPYV#Gb<8B7H*+zO&{76RB(s`6AD&1^i0AZS&=+7OEfp2-R- zW$OKdwXC4=Q4!WVmu<^S@+yw=5B6dS}lCS*2$es-k7$a5TYqg(IZ z*}b~|vdHb#A0l_CUEM4ka6#R|>DLn0<7 zW)f$ecjCzlEc7@nzqtQwS;MKYMqsTGfEJxJJOBEA_TIJiYX`~Zh7IH6^YnQ@E*7kH z*{C)yF^Lq`1tGkJVkixGc!#n;zO0ox*1{Z&00zvrjU|e_r^4gB)9t+d&M=DOPd}}y z`YcZNlqg64A@R(gxroTRvMj6PljEclgwY03Z`j+|-oB(bI6XOe{_I&*R;)q~CMXE6 zQlJW?h?+iPqazxuZ-`=L3=zS5qNYg01PBQ;X|0Ia))nf~dtVC*>mNNoJ3L<&);NYE zZ@m)=bC}ACu{Zzl_42`?8?EzTxOJWiaUL0aWq-8R4HY^X{eF@~(X$>VhL?Q7ffjg& zx?ZIYjYcsEGl>UL(i=v-jlz~uXGkKp zt{B3K8^FxNE5%V1F>#hIYwH|*EquBtzkK*?p4V2iX9#%*=R~=h6e7X4cl~sppJcf@ zq?&FyXW^?aA5bS?c%#W|jk=fiE^TjaU)iaG!dU6rn`v{peFXjZke zCNP~i7VBK?i=y-p%i%ZA?tlICw4%U~as(@0h@FTPC@>^u2|$U0Wz<%N&J&z393~3~ z@eFsmNbfzXHwOIU_eVc`<8iDPOtqkeL_|Qju%5CWD(!&=4s1uiN<(rZfEI(JZ{*|%DP?XWdK8gQLR#FZgobN9e?dh5eMcQ6b?V{NruERE(M(25nCP#FVT zm&=6^JKAd>l(b?(JSEQX{Pwl&aLmi+OL53(ZG ze>(&6Tao0qSs^d~yEtphsv7i%CWy04imGx__lA)%ij)CsFC@gi;oP>Lk%-8sCX*3i zwX-?g+uPgTTN{R?3@gK=gF%oG$*PYw-#mVBw5auu>tIE@}q1^oIivD$0DBEdVh_ zu|jR@EGxWtNMquakZ2>!zzl|1M}~*}eiTPZryB-fSYcvT+_VCSZ*o&{*4nzN>$0|K zQJ+uKhlgj&N@@yg(M@0|EqvBa(rca%@~x0~%YBDS|Z0;T0{?X5)%~2_f zC&%6K;rSc;$Jh5u9wOFKWwj1U&5qbNnX@!renmeZa&0b6Uh8aov!~74f0o@FIux^t z<3xbkR%KDPbZ`L#&RPG0QTXjLGJ^rq4Lx7Z&(EJLdwF}<3AJxFr!);Y4DsTft7~g3 z>s*@Ur{~kVkB*Mc=anc+%E7cLR?~KU@fK*h1Zb6HGJr;zoS0aE8|0BnH^wXch)&HRXnKyfU5p5)N-)_{_5+m zZ%+{Trao(}SnHHht;dt5(Z}N@kQ@NuSICSgLKK7t2M4>m``P^T=&0D=-sp9b)kmP! z9p&>ZJ3l#D%obyG|G$(OOKe^KLPOS9&2}|Hj2anUc~o0 z(azS^2k-x2cW=kK)AN(XCm-KCK0=Ili)<&$xXh~ANW@*xTw7j20~V?#glkGa49}XQFnsr&TeshNcWZNJGM+tqIzN0qJ3U=QVR-xI zhx_Yhqbo+8oh{Z(`E@R*641t8CrrfCQW%7UaM78jR(10?iQ>`v`uE>^ z_ty2RanzYkXJ3B#6_yheK!ATm%vLS$;Yhb^F>h>00lv4f9n_)0o~EW34Z$ znv^wKOkf&48l_bb##_7lwk$m~xoVs*zJ5MCT*}ggmb6!46Dg50fcL%`03-mfc*Tt} zJ82b#p(YZ|(uwrDx8Hc@om&UHyX(Eqy>A};;SV35o}6{!WPf+_!}q_}?F94bvMlRa zT7+sljD}KO^7h)<*}sNCaOFmn3@hRp!7*6Co|r^P$cr={3{Zsc!dL&-?e5^Lv);L? zEUnjzdFq^7Ut7C$aQVTL!@P2EBIE>UShJ)+o>uH)veq6QA5)!2%7yHWW`@)@54Bof zU+>0=bL1Qq-hcGPgC}EK>w#ltGE51ewGt8Qy#qP&4v?k-(M)d#i6RPg5Jv&L?L_*{ z_ul&FfBDI1eO;_SefI40&p$sqI~n#nmoHuV=l}BKt&R0ETYNqnPv&RdOK)RaK^*m> z@Vd@=WWKDMwy}6@Ai=a+&|7ak$_lOgbl}FEr9p6ceQuUI}7pLFb#=WDXrKj(u62b-8lZiop*ow zvpbtRYh~%~KY8-&fBm}EUoxyT2^g5_PB3=t=0=!rSVI2SvXFWv!_5K>b-}GQwHC`KI!oVCH?5Amc zdUA4hvfR7eyK;GNcY9-zF1&XTgEm!eTzpf75^;WWYwO0FZ$?T2cyD4NOp5>s@hte01gV!NHYF0?M;I2&67; zxh!g@RkBl*NB18ruUzR4*2@4+pqRm|Jgjq-(E;F_%vQgKK=9qBf93K1^^YS~teo@A zP>Oc8H=jN|K07-(K04am+8%b3x8A(=?C@D#r$V0E!$(@=OoW*N6DVUGktKq7EhJ5A zHi$sI{>Yf#(dpvTFTQzpJVi1fugH1T_O-Ol-(V795e0}M($t=AnxPnRpuczftq0a{v^MZo#IBHdd9^~zW=@3Kl#a> z;aVrN)#smn^YL#!IeqxR)%o?k(Lesn&)&Upv!mHC*Unj6Ef@2_pqIq4b&i=r!>o)D zc@ghxiw@}>56seFk)yxfh%u0$Bs8<8q(Q^*cjK$8!CcJ?y%zfu@0@e4$jc~5m`O2R zy>jV`FYkWy^%raFYajmjC&NzXXFvKup6B-;Ju9t$(fK9>Vi9(NqNseMY17OD12t@7 zKxyXO%4heUJUkkg2x?*9B7FX0Z?tH&Kv)=J2%#cHFq-yuw?6#f-M8Mkp~7HZ=D+>L z?|${Gf1jS7Y$U;*w{QLA!}m9D9)zrzpv0H(S&@}xzJIXa5X^{31)4=04P$CA@PZOP z?CjW#pFV#YC(&pv5~)Ngfg`w!%9h|IQuW_+(d*#W=9L@V!@8mg@Y@rf|)v<#ChK~WrF}#N=IST>GpykU~R}GCf=S- zc{29ib;N7$y!cvRn}Pv=Z|RHuY4-mY@IQL#ck;UDiiin}z*kk_y;q7w+{Whc=Rf;# zx||KI`n#jF-- z@rz&n;mP5NgYjTl@n=Mcn23eQi+AKb$SI=8=s_pBdGq>>H?Cd3zL#|3(z?Uvhrj;S zFFt?rm0gZ|dd=F0kzyJA5QE;~P zU96ZubyYQmNA=<}F-SSczyJEv-~Rry(i=zYfR!fEi;vPwkp*g_)M%}L>*kH0{NUZu z#=wNedO18ge{}EOXTSS(b$#ggXdbSu_4`9t+hVz#_#d4geKb4yl|nikoF=`RRTt#YP$mEN`2BCXNGs*N z_s$!mnW-rAI7}jEqbxIdef;GYUv)Yk{Nq1#2ZK9zZfAM%hd+K+&2#a>4HHh8qAb00 zbirX1fEcXK#*0rs|2oY}gn>t+w0f}_8qSy%SBHkXare@}?)PrrzOui!xt=IPvqkpx zH;+F3{YSIIr!qa?u*J2)N3hJnFiDIFI0!`ypcE+~ux9UUnr3V3LjnmL@QQyHW(Kih z(#+n5FdeT)i^b;2dBMu7pwh;ItTdib{wkfTzw=@yR?0gk;)B4Lz~p(Fh!|UMYZE!D zXY()r{TE>py!qh|d!4}#Ke#iW&*z_f;Q@jo(jxV2wwz8EYrRg>7t{1olK7+J)ARA9 z;qZHA5Ln1xME>3@xHt)J-njDK?YC}R+v~<%O(@dh*|XnmH0T9EP}j9*F06nU!VK}wd*`dF?j+qNh<-t5U*Q|nPLziyZvv%49rd@I+&(&e z9t19o@+i_uYl3P}!2cAxHzGL16b50QmtG`^q9}@%Y09=HmW?Frr&enJs9t>bZ@(y6 z-hS`HwYA{~KX`9Gn>{@|wGK>drK%l`C-W-@I|TNyASFUahbO=J&Bx>EOh`8)cN8(0 zRYO{ZK+*2z#+^Iwyz|x@>uY_$dsm-NW?z2t$^9=rpPiqove+%tewAubbXTXA`*R0NP~H5gFY+Pb>iO)ic#YIIM4mq1WYAc81`Za=Yh$bSE9*_%z>pmWxZ zvnbZeC?U4)KhV#}OU||3b%^6=I-NJOL4rUpvs86VIP3(2-Y}a6wOz11oK3#?)xQ&& z_dop6tsDDQ{^9@l*WWySe#9yek;=MdR(TCy8i_rCb__})F5&4yXtwbh!f)}$Uv-E*!6jlE(M z7~;e$aU^P0!X#p)>Z($TwN~Eyi_G!GS#sgyAc`1lOsIk=sKQ>-d8;T6=W{#gJTR=Z zj)8#xay|09C{4{{R;UeLbVRpdJ(JQwS(de}YHNcqD5qzE4Yqc-%i~FSJRX#O6Rsxz z?CJAQe*H_Q)Qz{^JGgTBpGE)T-+ps+eCnWGS&q-nD{DihW@!8Q@#K@wzgp%cDGd=u zGXe~uF<~cu`_|3xfA7t`?d>>V0+zGs^T*HbeSP=-=by-8+N<(mU3abR+j=N&KrV)3 zk)_eL7u!L{D`jeLt<%AUdY6buSysjbAok+uCFkA-6y#e}o&b2$?ui-^tVaYfRtJ7GFdhFB_i7dr7l2j=NzLFmpPYY;3OCz0KK|_d-|i zh*zXJ)Q=|TfB5}Jm7z6?xb8WQ9PHpaIa8*3SD?J5PfTT%_wFWLICCMabwdj#1~f zj@JsapJ(69C(z`KDuaMY|3w|c7p~)Py_&mFguro>WN9wz5=L>HbpHR^&abD5Ad2EM zcV_ngF6>gQ8b||}0)`ii@yYLxh9?tvuo6jE3zBxXt(|seXXlR(TO(hDgh;FRnga^WXBRnsL$WBtBqL zFXyAXdy9ZjFvf*pP~^$c(cta*aB$Galrjc&wfr@il;7^A;~$%+skh$jHfpzRawB_M zrnd2|@tpM$q8K}j6%fgoztV}ru_L(%@@Wh&ktX}=nv0M zPmTv!nr3OtsN+(6zb{8OH|w(GkB@O|8nX36Q1Ok?l4&v_RI>6G2q$ z@1rp2(nV#A(FVx2=e`z#uU1hMx~&Da3gMYt*8y&428