From e2bfa98754dc43f2a0baebd0c35e99ef3a2803f1 Mon Sep 17 00:00:00 2001 From: zhaojingkui <1553836110@qq.com> Date: Thu, 24 Oct 2024 18:15:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86UDP=E9=80=9A?= =?UTF-8?q?=E4=BF=A1=E5=92=8C=E9=83=A8=E5=88=86=E5=A4=8D=E5=90=88=E7=AE=A1?= =?UTF-8?q?=E6=8E=A7=E4=BA=A4=E4=BA=92=E6=B6=88=E6=81=AF=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 54 +++++- {src/pPowerManger => bin}/pPowerManger.moos | 0 src/pPowerManger/PowerManger.cpp | 49 ++++- src/pPowerManger/PowerManger.h | 25 ++- src/pPowerManger/ccuUdpMsg.h | 189 ++++++++++++++++++++ test/model/ccu.slx | Bin 0 -> 78952 bytes 6 files changed, 306 insertions(+), 11 deletions(-) rename {src/pPowerManger => bin}/pPowerManger.moos (100%) create mode 100644 src/pPowerManger/ccuUdpMsg.h create mode 100644 test/model/ccu.slx diff --git a/.vscode/settings.json b/.vscode/settings.json index 21231eb..dd08119 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,57 @@ { "files.associations": { - "list": "cpp" + "list": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "map": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp" } } \ No newline at end of file diff --git a/src/pPowerManger/pPowerManger.moos b/bin/pPowerManger.moos similarity index 100% rename from src/pPowerManger/pPowerManger.moos rename to bin/pPowerManger.moos diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index c6148cd..2a13780 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -9,9 +9,17 @@ #include "MBUtils.h" #include "ACTable.h" #include "PowerManger.h" +#include "MOOS/libMOOS/Utils/ConsoleColours.h" using namespace std; + +bool _ListenCB(void * pParam) +{ + PowerManger* pMe = (PowerManger* )pParam; + return pMe->ListenLoopCCU(); +} + //--------------------------------------------------------- // Constructor() @@ -75,7 +83,7 @@ bool PowerManger::Iterate() { AppCastingMOOSApp::Iterate(); // Do your thing here! - AppCastingMOOSApp::PostReport(); + //AppCastingMOOSApp::PostReport(); return(true); } @@ -111,8 +119,15 @@ bool PowerManger::OnStartUp() reportUnhandledConfigWarning(orig); } - + registerVariables(); + + if(m_pCcuUdpComm = setUdpScoket(IPORT)) + MOOSTrace("UDP set succeed"); + else + MOOSTrace("UDP set faile"); + m_ListenThread.Initialise(_ListenCB,this); + m_ListenThread.Start(); return(true); } @@ -144,6 +159,32 @@ bool PowerManger::buildReport() return(true); } +//------------------------------------------------------------ +// Procedure: setUdpScoket() +XPCUdpSocket* PowerManger::setUdpScoket(long lPort) +{ + XPCUdpSocket* pUdpSocket = new XPCUdpSocket(lPort); + try + { + pUdpSocket->vBindSocket(); + } + catch(const std::exception& e) + { + std::cerr << e.what() << '\n'; + return NULL; + } + return pUdpSocket; +} - - +bool PowerManger::ListenLoopCCU() +{ + unsigned char Buff[MAX_UDP_PKT_SIZE]; + cout << "------------------" << endl; + while(!m_ListenThread.IsQuitRequested()) + { + int nRead = m_pCcuUdpComm->iRecieveMessage(Buff,sizeof(Buff)); + cout<^|mj2noA1TzqDR;#V8qgwagd(}E| zwrbr2XRD&E69-xqq>AJBKKJHkKoX*#-}n3f{9nKJ^Fbwf&OOh0&U2o9o*UPrO4WKC z=D#mE8%9(zOlZa7ke|=-VLD}yDx?Ofry#tdzYOY=4HtA8FM~jyjl}W~+u-Un} z3m$NHxh?pp&UbF#xBG7NgT%2HJgQ4rf%Qs?9i@Dj)cBIMqKka5%Nx3OJmGUC&hF zc#T?Ah4UpRs0L?0=U>2o$@4E$xNsEqe|GxEU;o;4?AWnS180Qq9N6gTzZh$u3q?OPZO+{J%>n7y1JcBVgjH+SbQcPRk)^jQb4G3Jv|&-(q2ro=P<2Vl?$0108q1`O zY~+O7UqKr;Y`FO9#k2mydp729{HK0hefZN`NBs*Hjqx7xXh3>?u5ilS%A7?Z-#^e7 zls*{WcEJx@?pE#yIXGA}&Q=7qDr%V1qkX$}5zjxKgT+k^tjg(HW5$_9b(@O3Uf%ur zlz)%9fki*W_}^Qm+!xcc=akKxH&2^CfBnOUYKo$^-twy3u#SY3uG1d}I8nNt1CE_Ip?;cOwb}kk9ox6>nVGqb z&*x7KthayK{LVwxa%ChD(Y7A zTE1gPpVy@&z1=?k;if3>N~LOhfbxa6Dcp`7C0-5H7t$-I?#&R*d-w&X&Dh{C!rVV0 z^xw9v*VJ2?yKWcfGzswCuxMAlCb4(#wXqAud8Pes-k0slER6SRn9#4^oOp?(+v-oHYHRj?oLIOj&$#uJ792y9Zp^uARKI zb$m`v?%8waZkLqae)i&4an6T1f>$N`-d@-wJ#c<&+NFZwgfXj+8Qcty3_J7H!Bt&C zO0oi;=Ip6CHh7{KC=Cs0?l-CB!qW|gFU~Ffv_1HA#J(<#4TlHcdXn*bmw{;)*G<`S zHzRWXt5?I;57^1yaFf?{_wTpsv&zT3Oe|s?E zpVDFC7q8#UXku*H^e{Mj;_OI%$mHvLM>jwHq#>tkY2LatWT`jomR|gQ9LF&Y7=xA=*mDwsTtFd@k9!b7#)YiM~a5=4$V+S~{uwuluTV z+#1bV++@n!xofkZ-D&UX>G?-UB~GhKLE5_?_;I?r7Zf&6*;0kmYP6>CAWaJ5CjK08B>wJZZ?dT2rn+z9cvu@Y$Z|xjx)K4g`0;Fi%(~Ca^f6 zxbRAEKR>_5e8sn?0!s!AFD=|&`f5Sx<9++8g@0%mP_7l*=M`1PW-6)n4CMaQ>-!5+PBqQPH@P>y>sYVO zH;DrVtoz7wcig#^v9Yh3RJrUoS~DOzdg6kt8{-SEckIyN`O8L`i`o}Ah+EU*c@NJ$ zTaG?HdF)ucO10W2{qnNTk9LH-ep!63%bO>4xdV6isVn|x(VdfXSCY>kTwH%{Y=eQT zB7bbN8ix-wuiEU}DnY)d9uyCPRLa{o5(Mb?ldM|DD~m4-FTT+G{)M$Oj~zcQgsAeH zv^0O$kd7@|w!D+wrSy-}-Xq@(t6#tV>Y*i%a2z5V^Um!3*l=^!;-#%Gybas*#-jwZ zE__z{Xy4lrwVU`vVeF+7vjxS!%O~HPC7+a+G$em{@qh)9X`|L#jVep4So32i8DW4zY&-@;@s=en0&b9 zBoZY)wiTo&EK@X|MoR2RgKV6u-EnRW@4X8CKr z*%8z`$vFL5_T6TCUO&I`vS8`tBA~VXrD#R$!VM+YMQtW4N^;=7fxMv zb5iG+$NS#y?X_{>`jTryV71a?tA-cvGg&p$W5hauqq;?|GG z*Tt98ew)w;==Z*~A!+O2o8kG!OG#vbS9j`*AMJX)Cgt>km-xF*YE+f#wc-X2Trk5U zY0ZH;ojcw6DQQ<``%lLoc~BhwxFeT);oDDIPJ@7nneTt}aS1t*4=!!gX7rr@Nz3qp zNu3{^IlH_^{aV$H&;LkCyMKQ5)MXi>b;mvT4cL=Ye0F#Cv&OsMcHFo-{`&@=z1r0~ zyQ=5XBJAG%bFp0#6BDPO>hgA2(ufzgYZUG6>^@o(s^2iInj25Er?^-C$hWWO2vR2b zsDEE{E~azzkn6*@?|uEeKaSJA{2|v9SH{dYyu7zE?bSa|rY@T|uW6G0q%a4^V@t+g z!6#?&LZCwOnrL?~UbCh{@uU3C8`2-AO-_Oe?%tz^@ptJrs^a?>{Qvs;vs=2Ix1MAf zj&rvcoC&ErF?$3>EeBP^*?R^?&*q0|_r2Z*fpqcDCH~}aK0DoIGt{ zdir`8Yb#>rulZ$64NTbg_KV6+;+~qzVdZ})g zSBvzg{JKruB0pSb_>)5orq-*Sxm}aLWoU_Jcu`)rJoy>%!dO@e+D-GPO{-UUZBOTy zC0*SXO`A4t&!h*~j`N^=tH=Z2)V=id_VJPz;+IADKAXR_1;)NCIv0CkWAeW04KDn# zMfGF#y3ISyJih$Y{LX1_UcDgvf4IfSbqfNAhF`zZt;O&ymr9cFLe5`$_{YzXLdmLQ z)7qCdZPB65l`9b~^G#FTw+n_o@`K$Q`1k%QjYS!YW_TuF`%;;|GPXtFtG^FS zT?VN%{OQrQwYLdyegnbj{>A4dts^~m|2=wK-4@phW?kHvym832>~7${%j@9og3(}aP4-vdit#1ZxWazBULcXR0B zW<%!1ba`F0XYbqeE8B1uQtzIc-w)d}aKsDh!uj(BL^@AsBp}Alj<<#QXO2?20<85} z;DUyS4jsCGec!&yUyW*dc>J{w{6}pofDF6{!A?%)TK(NqWMQ9s3|O^gi}(D&zctFs zf4FC8$;B#c_*nXQu!i>nqnZzzi~iT#@ZUMf!EnZL1VTIy3papu)VYT_y0?`^YX*x5s!D?ZT|ZC_I(p~ z64?$#Irj5TefA&fdqzeyFJ#7+m#072vit1W`1v{aR}XMoIq~;R(lL{|y!mIx2<2g6 z$j0^S)1L(W*0Nqr(7oNqA4E*Os_~r}7tj?h1(fK~=G8fi#%}$7QSXF=BVa5DDbKg# zSG<08x690BvnDTFH(+P{FJHz%ns<+mzWs6aQ4IrgioVRe7ISELt-wY&uK0h44jr)e zVdCVoBX*`v{%umTwN}=xN2f0$N9-d68n|)hqAH^*70Sj9ESXYk-}TrtbAP${By{8_ zFYhgwn7gR+q|cK6sSKO%r=qn|4U|>#<9zDLVKEILw8ULqGpY|Iz z;Jif-?y#OY&oz=(E{(=dWzmInz7q)Xm9VHe9_rU}6*Bn8{t;2q`CS!p+!zEobe(;l+uBxyOzji&H&0`xH2GE2QO~ zr^h$CVL`Qh$Uf1BLm`k(ie#N2{{1;4>v5#mtqDSfmn@9=@YHtl`$GOhUDxs;6? zf7+gYe&WhEH@h_*{57nW#y_8J)~~umaNvHg3u{Nt=sarM?Q26HU+CGb+4BCHong=r z#HxYzTYB%@$_IN&uHhuDc(k`vL#(xzPmg;R+voR{U!OYDHg>_f=7Bj!ZtLzXohW@n8{^w{zx>&Okh*~hEk?fj zY4<>Fk^kqtlZS7eB)ajz@|7zeT-BexaO>!gTQ&K)J1$O(=+Q$0-LWjNLDK47njHCL z-{>*4a7e9IZM>r(es}UoAly`g9%DZ4~?~T16nLgY3At&|H%i;$O@((4!pFiE@ z?Esj!a1bX9toLBZzS8+bw-egno82&xKZF!Hw6*)~BU4%ygRy!{g_zxtx3t^g0I{JU zZusB7)W{24NvxB3^X3)YgoN4m&mqqu7;KM=g>x>4zdrmHR^IAvlbd(?bOz_c{M&o8 zpD80t_pWQfF|=xsJZ!Mx#eE#~ROpY~hntUk555sv`1?;G+pmwC?SudL$+E@4xoOjT^I$ubtG87YuJb?!==)Vx68_5q<7^ z&%LV(i4KdZp_ceZ=Z!aX}qV_pL@MiYF|;Pj;HOcvVQE=t6v>Vjj7>xoP-E2 zAL{$4TD59Nn_6IuYnKL^BA}DywUg?2x z1q-{pef6yR!lbGk4!7mv!)IDfi8#US(xuCkxm8B>+O9m=`1Y+^?b^2O2IND&sgoEJ zGid=Nr*cmW?5Wu)3s%?f*ehb{ph1HSd0`DyHx73Ab;2P z>a`o6|8wh{e!j1}UeqM-)Ga64E&TccXpOaF>WW4FdvV|kjR8ZiR8QOccwZ(7d0bv2 zpB(6u^UL&sdvfkg^u3n4X;XKJxb&d_zFWau?cVX%N?_}DfCn&H{Bjj!D$$zMz=6G;AZ();-Kf@q_ zrzg78bm{2Pm0!O&J#t1X7)kx-`y1m|#&mgeWCWOAnDzIU%|^a@!rOS^eD1v(n=?y^ z(oI>A-9|aobMHU0qJy`EX%|_KFbY0DlKAJvd$|p$~YxjN;GA{IHua%E(bnl$`@QmNxc}uTo zc5z?!!Cn$~4<_qRzofl3q(9F!o-28trN5}@QgT(_WWf9<69lK?5VBepDBTMYS$u!( z#zBWCHG6sG`kRXdS>3yLZ=4@4kssbmA`Md5Ac!Hxhlh`Ab?@uXVt(KFpzp93w`VpM zC?{;#aieDRf&jmqw`m*qtOy!YU6}h|*J|Ur{<6a7duH?GrNEzVTw;e!DW$ zm)^Yh$ImHN3xwO3c4b?7-h=Np_S?E9FR8FJK0cmkg#6(p`MCv4zLz!cpKDl6C=}ZFmm)kv5)_P-?qU->GSM0XUnmEk4o1D zuDe}l6wYs`lsg1b$A)y0VsML)jqBE_i}O`r9GDyHbE6SYUAklRqs(22NlDF~`5nEu zqxwG^l6KXrRek!587t18Pe3GV`<3~B7s3{}cCda??xBxier+9I`g~S@cL?~7fq_X@ z1_kHLw|Lr|%d$q4jn+@LDYXQ)!hl;QM`s=T= zPWx{En%jR{0VLp=-+z(|any*@3QsLPFP&4Ecy-s+W`}#Grxz~JzI;3DQgW{6CkXB# zI=93(b7z&K&rD$_h=z%sA9BgCygD%$E z^C+!dz4-L>bi;28+R@Qaghkul={V}vT2uJuu4lh35g_CDpL21hm&5PeQBb@=uhSV$ z3NIB*?>#W@*RdZN|Da~73NLRZQL==jr1g7;m#*nC(_@amaZQJg9gV+!*fwJ7is-p3 zU~4787|6kqFhWhVEefoX-uG(I#<{braDTb2Yd!RXRH})O`V2xlI0Y$@mw&FIfuS&QTmv}kLMS`8Nw!)a=QM6wi7 zpB_{FjrZ$4yB_`e!I&z|ng!K3)9Fd`&imlwW1m_T?#zggN*B|Id5(7^!m^j9wU?ZS zjTyer7rKHtdjCARi3sh5)snVGxCLXX*NzVg`U+OUrL)?PQcG^+iat7Xc7R6%K~bhM zxkdl9d*AayRJ{#)e8|O?$eiDhvv=u{%5a{8XwOj!OaWXE?~9X zN|Wf;*b~kNUi4-@Z&_yo%TI zb?c&j`O<5{-A@gi8Yc=f*Mg;>JH}sYfVjWNeg8NT#b{WI1ZNucXrNBjHj! zEq$E_yT9e+l}`-FWsqr)4{i#H-~AxJxZ)IIK0$NCpFoKF zXv->>eG%oxVH3p^ZQI@`x8tv~J4RHVdHhhMWZe0S7uO(mzc{YlowWQ3&Gx?;Oy_hE z)8QpInY;XO{UU@`5dZ(W*0%N@GkYMz6ZwbFr{659()IXvX)}jLMvmY7^UqK;Qwp9O z{C%f><(jo?>wi#n&a0DEIin^a4}%O1@=4oXF8Rdlqjo*O;UK~YyXw|j>t|Ax={6uK7x23SE(m(eGA@#%B zFQ;^C-d=Tj`c@97>y0hPBH?*VY%t12zxjyMb=Qndi-z1kA2}tWRZmZ3%I`~;i{AMld|YyNBeWM` z-&=hew=<`EIA@w4s&CkSW&Qo?FDK98aH{f2Ex`Rj@RZu-B&V%Aw>RyQN3}6Q#1$0^ z6DQq7=%wv2giyEmBJ@;-^Ls2SDl$Mt9e-SM{O&VoNt`84<4<~@32Z(YDUs86CGF~c zx6^Y9l2NxxN|y!=Y1*xMY_R8F*u-7+N<4-f9t?AR*WI~qx)ARFu-Sk?gVw;UF8a*_ z8nyAIb&Ybjw0&e|{>5YTO^FeUjE(jLDg;uG)E|HI;WilbI6;W19U8WN?oVyMLn0FY zKYVlii({Rdf!zjI1Gj8R@6@Tvztsl+)>!;oS;F}b>uLV!GPE=zsnfSNAh|i5$gr5u z4Z&ZIjTCkz-(Q_YgION9-PrIBkDDoskDyV0QJirl-1YX(T@;o_QZZUJ#_G17D@&^<~kml`n2 zUEH7N$M@>wCg9^oELziJF3onTbjZmee_LdqbUAk14<}UVSL4wszhv+CNncB1{eA1?6R#0d2$9P(3qHK~+NWeC@4)7d9kcEOV-2fb0{$P=Q~=nYbhfhCURcbX~! zGgZnjn$N?cd46Q&-t_W?P8aQ69_v`6ArysoWTPYoP{ydz7)0g4B+~Q@HI<+u?7=gA z9q>Mj;<>xgtMaaBRm^^pRSAU7S0yZuZZE0Y2u#_Xd@oGFbu^|v6=BNvA^b+u-_Lv= zt@z5qbnFqa`tpB@{_&KO(m}*fELSCl#<@u-jl#4lo_SSe&zh4n<}D&CV62Sh$iU2H10yFi@ zlhP;&Dnv;DUBO_)cZiUXAjGcAHH7SF78)U+iV?z@GLeXHPms_gqA_|m64?oUVsrZAL>MTIA(GMR`=9I^ZrAPDq zzm%OXj6ZZ`-hrJTM{Y~~qP}?1((Z*z$3`9g{acQ%Qtj`w)QhBu$Nb!YQ~9;T&3Hbu zrL}wf_{Z&S=c707*p}2IqjpN~*rM#T&7Hr$8U69-yifV6LrW!(PfQpR{@u6ArIG9F z-23RmYhJ77h$}D7D?D~Mti#l8J(lJ#*>tSvx6HeR=aaWQTUGzfk3;UYoD{Nb(22%F z9^L);S?nh7us$aixs56K`q`ch|FnBkys^&FXP@oQEIwNBIzF~!leW>-6SW(E{q>~{ z&sSdYOMO{4WaHqq$D5ZfkMN5Vo!k82n;p$7ck8|5;z{nEEf-*?Zom3XovoMJ z1gA#IH>~!&==MakdtfewHg@XrR(_YqvIm2k z4qMfDYR+=Q^Cyq5uGf6u9G?&T}tq{SO!3xy>K^@{7Z7 zd7IVFtGpe( zZra8w=bB#HbaLHl`S&-Ie`@eY(no)^Pph(cZl`(A3jV26w0PY5VSf(V+n~XM3qb>0 zX%7CFwqW(>sS{$2fM{YQm28@1s1=eM6cdJxj9kXmp2=tgvn&<5Xp`S+Uf z9lMIR1b=>_zt>^mtoco@JgY2zS@&7|!nW&*&dsi~mt(tYzm3z>6JXa$svxdo?V>Q- zCnH9>LM2VnNz=*cq_=bZk4Zfac-0&CxTIt7qx9VNOEzaVShDG(Aj7~Osi!WVX|?i} z;?(P*Ek7&eb?meI#Ly$90rP&ieLuhP^Xdz{b0?hsahf2bT8F}86ZWYeo!%f?>NbCB z^=67!oP&RKSjb(t|H#LlJ(o9;{dB13Z)-oE)8va)tM+&AzNu1!w*8BGjms)po~r11 z{L_Q((Vk-;XZ}6xw>}$ZtWW%Hp?v1$Mmxgl&P!kB`9;yWR_-@$o!LLW>%m?_i-fJK z^$WWEXhNp(>(i%8Gx836dp+^dv^oW`)T9^t?hjiW{&jcHx!oI_U6;h!H$5yRWaZCY zz7Jef`I%}6Z&T@4on?L6KWn#V%lYqycawa+bynSke*3?z)U4g8;l!3Jx%9ybmpOv2L*ibd8?RI6Gk9vRVb@->w z!_MBH)BI@D?;9@P)Mr-zj@oZ;q;!vYIpABP{-|*03VH25^O6U+4QoEG!Mc)K4Li$y z`aI+H{d=}2Z{DhVDJi|HY%N{ad-t77!F6?sr}pjiI9oa|PWEzOOV1A13b)I4|Hawb zP%~#@eivJgyVbgXj{#Wtain*fVDaWlJ#wv%iqmN`D4jt?>B+h$PCXuTfaro3-yJDE zm_4ocv}KDMIRhIB|7Kry{+XH@7l?epS9}Rpwrz`Pl}7PZrq+S{duKj9jeCu z@Hpp4^_Z|;e+LA`&Yi9wuU`J)>4^5CR;wzFeMk*DwB@^1KV*1@Rf})1NPY8QV(8kc zg3IX7*I_|5Oxb+j7aj?=0S z+>|lw^oO4}@tjb(i~p{yiBC2@8-)OtNOkg{;bnw( zh{w}or?43kYz*RrmQ6_?Qhr;gAA&Ro+^{X;YO>^;JLazWRWUPZO}ps2USIW`P^*e8 zBL4c`4d=t=Y4+XO^WtSrX|pjqq|$|{Kg`|sW96f5?%v}c*?8{J?dX~ty4DGHZ+dG& zr$ZOL{ja5W$ZFSKzPfqePVP5?CT+blWclxt8h&-<1LN+M{K09GghmgmHb@x0{oaK+ zGgo{Pd?mF0>IHWuRM*wH7MwI^b(5Vn>X&BKUa-Qa%{M`7yWKy!xnuLAV_#HppL4oP z%)_^X*X~L_{FJ-@#kZBd%4=G>VPs(1)|k1iv*!HbU4}cQ6JzhM0RgVzr;Rg0gk`~S zA#obQs7aGLe>&Q$9%pFGl*ks9Yt{MX!#=9?#Wk|_28_*X74>N~?cXJf_}ed|-)k*^D<9vSYDwUD>saYf@z;+74jtRGrC!g7?&BM12Yy?S=a%rrs}*54Z(ga{(DRyd-|YEG zpYOX|eL?V=HILn|7{9H(8$P zJ>D-U_`~82KYSam=*|hwdG=u7osJEDKF#I$REY`v#{b~r5e;89`StH#qr+p8hOJR% z&7Ro%gXzZyc}@P?&~9_juKWM?e7(&3?yjK9wS#7^GyeLq{PyxAX~n5K8>o}6xAn;9 zzZ(1bfwv1rR$+w_Rt>{cKl`LK0Y)kL!Mz$wq)sAFr4&Xr6$0TzcG`J}E-@k86r$6s z4H?PMni;9q@jQezGNke}cv^`%l|Ilt)nLf*_w>|bl60v@y3~+5M5{~Fd&srvp6N<2 zPx>k8>7Ma?FTOyUj6eBaemo(M$76zE0R+G!Jsksp9&Jo#8QctXIL+Qy?ruh-N)hPp z$MX>={P+s4m(b6P>&;WjxiX$W!4=4q0w2CmAoB8-v7WzC10PnAAl0WuD)c0(WBUOU ziZg`(!!lva2UDriOqEt=4-Xpv78|~oRIZfqe7SNTnUL!(^%ZgbOpj8i5FwNp5K*){f#qxV@syG$S5i_w*IVQ*<$CkI6kI9g>%$c&_)?j`OXlV6 z#WyV$j-yI1$=1kIby|%ohf;_QIwKX}S>{7}&4A62YAAIDsKl9JSbV%>GTiHs`EdnG zFJG>=mq5;y^8Ng{N~OZri|-|)M1BJEay_lqYx1^9w3uv%z2%e7*?EM10w1BTH=iq~ zWD2ggpH##ZiIm=4zLY2R@sj%reEs|^>xR)`p#JYMk10F^B2ifg$jDU&u~MqmgO=vs zSt@D}O%{hTG2{SG`ZxBg3?2ALWyltD`8;o5Z;`;q8&OB|r!1J>C}WPA9nSAY&LB$? z5ue9X`X~ilA8(-#*ITJjaQ(<1J_?yg?j=;pe1#U00Cxk(sjrC67$+1cmA=?Tr5|Bm zFRq^#kI(g^e0(UdoKPxaL)Ikng2(<((VBj^nZ6F_O#`VEBy ztRa}Kf()?UC3>uRPrMO_GXG*dR)-U7mzMGPg54l5KarGDNCglDUO20A0muk3!1b01 zD4|rTp!jk&&`qW#{{=`j8ZE>DRIxY|s9F7LH9bvrwN@wQ^7wpjY>!`nr(8=uumwt$ z>gkB0-gNRUzuUs86p(Z(rHaytL)22eUL}u1SRa`hIg$W!9c7?+AcPf^?QlYjNR5KZ z5(CQeOL-tk1|_%0fP`q|JM#f%h=FCoeg+<5B#*EW%)f0POV3BfmRY*qpd#3izpMr@ z=;c?abH@IUMps`~x=4 z3^b)Lm5AqnV;xno*&W4P*OZEU$=^MxdeoOYB5N&7RjL@ zfJ(=I^gf!^xt@k|pwMlZXH5}W*0N{a{{Gr9j!ejdA*qmZDJcbp z6v&lanZQTEm3jM$6n-+1Q0h}gEwWo2s?t$%TAq{KaSU30P`YrHPLJ$zc@Q%Zz#|Un zi0@n{k?EMTG?L2|e!fC)5Jl*Xb;xB<^pvkRSIOgx_;L{+wP1cWG%6zyF}EjsEZ8kG zbMyNwm0c!lG1;)!`>)eiE|W?XK2omI%LhJzpHjw^3gq~MFXV}QMP6RMaxZqBjF6|d z+g8fk$|m|dyKHEpu`^CBvkfkx$Iv%`sAdvFa`yQ5I0%;AGu0D_y*d#k%l>9!#Q;4# z2l5s99~2$=&HNQD*lo`#t07IaduJhOF|{4=e}F4eBmhVI-FL;M!@;heNO6`{b}0t{ zh6qjx^zKr|Od(9*fJWpSB2!a{yWl}jVJl^6JI6#I6PtOmd}jLnU2zw=qFUKJy9sYQ zhu#U|0iFs|?A}HRn3rKP!~h*)ZtXsg;Z zvB}w^jmm&%_*m=*C_PXsqhUoWRU|7N=#F%>Noxm~ifh~=;XQ>T9YMa;xYNJJW=IDc z$?x>v?r!l$O{4}jHd-A4j;9nl>5xEosYa^K&Vd0!e@I*g4AE#c_=F_U<4vEK7RP`k z;xUNRknFx*E>%-z0Z6cplM*yg+2j_MiAoasc?6{dBb`%c@Qa~P&n1y&nik_02{&5@ zOqjK~#iN8ER-?`~{TfD(M1+Psr45tg8-uO=@|yLv@Fowpv`c1i`A*X z_q4x-0G4?m3PuQl0^QZ93y`9OD*@4j1UeEGr8ko93>-6W~nA>k@D z2*S)qem4^}#=OP7wK_#_oJ$5MNUciIFqmOy$a7e7c$T9_fTuNg5x2uW8`^pxJJ)Qu zQ@c63iQ&g47$_@~4Re+E!O@hO#7_qo*wJAS}XCU6|mE(cNs*fO|&dGC{hDAoS4J@JP)4Dv;m$@ zmJxt*9;2GxCWq^@fRHV67i-8W)z-_3l??(7-AFo%;bY=|L}^n}K(AN`1RWv+I7&1W zscA%Dm<}T_!1VJ`C+cCDh>Z838N&1w!cJBWjhT??gx8Wyj|+5{r{XM%Tgeo}=d;4l ziu76&KIG|^fuzDu01wP7(RNgjPAAQ_S{MXSke);n=fnSM!m=p2kqDe})7jYh_Y3VM_BLt9@Y)wMnhhAant4 zFl87*Q5p#%>kc#Z+6o{CBNGQpgJ9uf7dl(nJ%sg8Am8VEhC$vDMPAOVWOv_ zxou=UIY8Dtir>p|0eyI*r5PDStXs2zz&;yP-A*} zHW72Sdv9%`vwMm9XxL>If?6L&x|-c2L0EVc$-dhFdbtugN)8lev%~f2-eZUarVFwl z=A~D(B67eaNOw`L524dh6@!=Cde#It?Vk1Kd%L#zWuIUX2o_c|*Bir_L}m?^w^>7i zoDf-drZ*?UOxs-!bu*tZ-!OLs?20WyPcsU%T(e?P8#zMoK-N=h-YQ0slFfkWLl3o) z4>p6Xq0A3(u-CQ&DP5*YPSG{JtWI=gT!hK~H2KJsf!xla&z)R^}P)jj<<_5eZUcSNKRva=p9-6xZ9^*Ox0oqLRz^ z6^Qs!KV%mKhyq&aEBYvuQN`plt7#Dw3EhZ!W04I!2kz;=8~NX8ERbEXvxfrv z0`%WK{O{UBHgQ4r#pVn;a1a08zyGfNLy$;M?vL9FP~pFa&lGn4uXdD4Ix_)5(Qu=N z4z}5Dq63$i1$Hgs!9p`(5!T0X#VmP8f7G?mfH`)};$^#J2QDTH{Qt`(GhR@lL8V3r znq7(QvK_dtEbxE*vdiziSxAe_G$t1f*^2qc*tWvt-nzlLQDM@|%KEO3t@?%rQ zif%5HRmA)qu9QTFdzGnPHI*vFF;_|;$4EFHCCDV@L&EV2T2;T(jgvBuNG6Xk)vH!m z;p${8YOU>{Mk2&?xdQ3~P(?usa01;)GK2n|Ex_~fk@CE~P$?>vDM)?2pMdL!3Q?}i zM<|r}iu`!E6Jv_l1egzi!u%Mv3e5bK`5QWgYPu1_mkQ;SuRzKbdZUux8(uh9>ZRm! zDS4Q(NJ|s3YEIv6j zG9)1~HYO;(uQe5DD3F=4iA?k-HY+|ui32jQga+*NK0Y#~h+NlEdif#9=PTob8&MAG zD^!Z)A~Z^(e32zKRr%46Mmr`d1rc_!c@C6;vY(j&X_3UBU>O}i&|vebEQK7RhDvFX z4~nR{DEUTdhyoW|L_WCaBt^Zdkm6COUA4V35nx8cW*+AF7<>y zz9><_jV^TSK@GVt{w0$06v;PHGEC_Q_Bd%8C+Y1K}0nsvwa)r3g$ck`Y`{OD`4q zq3o6~r2J%3Kao)6h?UAtB%wm{e)NkFM;W(p%)m_d|4>R4kG* zaUNHufP@tByu1WFDGHH%z1b=(n!2WpTt%et_7e$k1%k)Ly#*rKaR!T-Ne)hxX$JcgFnwvWaFi4v^-9>eBCMn$8Re${3;E#|1>~E+8_eX*1Gg&qK0Z7z zzEI@r5G%_xj!?5eSm8&b!bYGbT_#uh_{#j`K4q$G z%xAvLO!l!X17w9LZTGlBMZVITFY*&9QU0$~g3VF+FOuau-s#dx_JBa(6F*kf#t)K9EF~=UQXM zPGKJ@_FK!?0P}VR=~9fO5UoN{j+-xDUUHrgn@KLh`a-w+358x)}Wv4nxA@UOVD5ZW}1@r@C8g4p>q~Hm;Ovo2{3A|uoh%7P<4UHU{ zFbo#Zj44Zd4B=j7Dy)BbBcEP43-7Mq`h2~d8CQ;%{~@tu1O)9f>de15p|rZu#BK^`%%R-KxFH3%a-Yx ztw21IsS=DpO)$#r%G3#3WItP}WQqJE@bA*nBw97f8$)bLk;>vzW|a;L7t645`NBm@ z`$JGvk7_Lxlz|Iusu;l+dT z3_%%@&cHNsLmk(7y|7}2&dp$%}5 zTCE*ohK1>8G!SKMMAf-;f#$!rKr%C6T8M46jWdaBm|{LaR@wV(^E~t3skU=Qa?(k4bf@! zdh>`xJw>Z{wkWuQaY1Uhv1oRQCYPuu#rxMG+%qj#2yDm&SPGpxRq`mUHiIFCySO59 zkuXdGO5;)RjB6!EFss9Ti`0{c1!dqqETxFlNFw8$05kK)gI)$^C$NRM=3sxhb|o+# z&NfJ<*}_V$0S(j`pjA~od?@0p2dmNC*dgNfG=sZ15xt#FdV;dF9<`yUX_ACshC6zv zQW|oh$PE|i=*vO&S7VuuXl`JM8^10J{!mJ;HKK_x9k)_xj9R0fWd3k3j*f>oULuaY z3b!Eo$s^MdaYXMjR|X+K6JrI*?h{UeQ_)~Pie~P1E+Zi3`jG|=j38s%VwTxc8YozY zU@Aqfwb)2cYYkX7hF#t`5x8ia5I-t1*48*-HD?*4#O2*9XMWkR(|cF~UDl%zcvVjBj~`i%wdFT7X5*JE;cK395Husmg!gfuu-aX72Tqm zZ6)jQC}Nul-B~!tS~p57Rg_to!-o=BTXY?Ql518LDmaxHnN%zeFKDkxq0y}Xn7sl; zmIt9{pHNH*y6F-Tjf?4umh(|S+N@O_$VBomBEhj&ju%fCz?)_VoP$S&N}?--AvYDJ z=?U82xJKgeK@gv~nq)99+L>~}bxR{18$)2f!nLxKlXhJYcTU$#!}gNu=sT?p+rv2k z@>-*#O#&$y%i0lz;wjwF)8J+#Gd+W^6GG4%Lw3k?>>N%_rnSHs9Kta(S|GC>LYj$B zF26C;BUz_+2yfYZ23VnYOeh8mw&6a~CrBhQpOJMqu)VDSn44YpEMxlwW-xMyI)i{i zYum)r30howb;dEKqsS1BJ=F%XAoTNbv?|lX$)n9!l9qDz#efN#=w2NzFN1UXbK%8x z!W}53wdk%`*`fT$B~P4eQo1UK)+Dwn?|uDolyO=jKrq_N`_;j?G)>`BTaZ3jWx(}P zwE`^Ria(ByPVp4_-Z89#03IIkz9Y?^q)QJV77eR)n8J!61MQ3(Gh7}|?<(}{`;0ej z6GcZ^!Oujig}@$jY4R9wc2Jj zroFN+oj^_S5ZWK0)q_?SLm4D$xG}_dH8PzCoUErCqHgqjrZ=t7>G??0?RSTU31$pe zYo!JR64>dS%wc-8Ns)kR5_mppN|%r-)kvV_oJ)6xCW&bOrX$t~d+*&uex~BeAzjKG z5T{6zRt%AvOk#OxOg4}+1BgBPH0wmhlGJOtcS6`0^T9?Xt_#zG(lOi6U(?crel9b{ zF?g5;G?b%v0Q|6Ugx^3-Cut0$Z-k^yxIb7Em?QVglCoT4B_CXF^| z$Oc-h3JT5fHX@anZVZ;SIk184=q@LOVD%fBoUWc>&N8{hpPXQynJ{FC3Mx(qTY!{K z#UiqbzyakZ)w`ub;v)uNf1oKmN2SX%vK?T2W4h`5GK>%dyDO7&qhl=;6r(+p*NN%jc$>)}2lj^J zK}5lZs}1@fjUrU0Mv8zu#R+#iwkwwK4C6qCs*w-JnIL)l)B^QK{X^Mtq;$gO^;j|}aD41}CgZ&Lv5&Z^uvL|{ArJeb1 z_6)&_S513GQHbm!PoO4$Ignb`bZ3)=?&4snnpQscImCKQh*59Q!V7a^=0!VFKy+DCAmTzBLP{iY?4xf!#$~PhvQ(|u zRmEiomt56QN@k>6_59!QQ!C6HgJ(z&u&^xB@kEot)H=BAbkQlS-pJ4p<;^lhv>tt8 zY(3roRre!40hubLD$8ArW=C2F3J1oD9!tji=dwdmDLIqqBOTf7a{?VFpe3B%6>uhe zg6vX^RO1pn8YpN|5_Gs?!2~JHC^=aIGfBKugQgH>c*jd1?cRbZCGIiyMox{wE+Gr# zQa+A`4^kpr^Zp~r?C&t8O*W4nSGEI@jfoV5_qGs6T&jM@fh34X_?Jz2;5BY(`ikdc zhnbyAh&6?aW9hv@V<@H`lChcS867#Yw%(d;fFKn8icDTMR3vhfq>-6@7LKN%$r*TB zc!uiW=4w)C!%|OtYUk&LaG1IBmYDifmI3FCjt^Nc!jZr>ajV%HVOthgLI4v*LAo71PID>VPiOD2F1LIMDOZEV0aQRVH%5B zvf>p}nb|ujR6-V69y$V&zF_n?$0(Y-E7IVP*fSN+f&l_P(g7s$ge}Ufc!XKlg=&XD zPwANh;)LPN18lHzWq{c(t61Q6xy((FTJ@okd85vV{dR3Mau{q zDmdOr%YgEWay*Jg#~h$zBdQgUFHxhRluq+%`IzsF^xRn-j zym+g}L*Fwx#R;?{>)NTVl@MaV+l478qj|G}HP9`Ik?$Z|34u|5s1pLC%P{&En|;{| zW`ZZn)WO>9NCj#v9_>E~ZAqhJYOoO<_RWu}U?jX|6c75PM2x% z<^pv8gs2s3X-CJpXrer)k$Mez6pMWTtdLX z$+@BfqGTpgJ(b!U?Ngm?iEXV7(d9ZNf201sk%*`hWT0W>sbtn}3`)qznY0FZ z0v$gi4@Dz%XQU;apEF^p={C!iV!)JB;ADL-|5YON$1lbUl_Cm7F{QJ85zoNZ8(yd4|@q@stLlm5CeCpFsGvVw|80pkKA=GIP})qfrnEp-o0dVJw0@IoL9kxmxb%Sy_l>95FxCtY9$h>eKOO9SlE} zf{By6;2Kn%n?VmFlNBB4?(D8&gjA=%0;&I{)C~4r5z#x8B5j#TCcSJ@#ctUl85E_} zq>vv%*0O{CS2HmL8B`G9_5%^R?qUZ84i+%Hg@w3ZJRkeQ#{vj3=PnjF$W&Uu2o;=E zf0)r@Ddq|+9Wird@=((Y92^#(n5U;J?D6sg$8{=ZP!h;aa0M{VfbRH8Wd*QNB)zXU z1d+_F+@w3)#bmb}?|{u16E*0+91p>hQB)UCDg@BiTue$E90P|z%j3<(dI+p2l>u)u zWIk{_fV`xKDP3?zYDua}X^6*L{h(A0w8V6*dI$%xJV8#8b4cq$O3Eh;l$uN4`jRE` z!P|b_+96P6%yRSbcJSVa1iHk+g>zyJSiwoL1_eTn+0`15IW3M(Rar>qXUiJ8f)is6 zTG5%YhBcoWS1>l68&^OrC&xLo%{d^uj`tEdJ39>SHls|GfkWsZ@63#O7uGe+VxETbo>+6(+`fom&^Lv?oDh=;jj+KCv}1t*qbCe+6~&9}aLo~AxZ!aB@#YyPb}&ZJ zK08v=E{mB67G-7& zu_KX6+5m^Wk5W~(C{(J3dPL2I7459df2KecQ7?ol5yp>Js7>#VCV_d9Lnj;U$hlxL zf8YvBh?&8~9IkW{d|+lKW-`jb)wV053*em1Y=0OX`ijL14e6jp9B#BY=4<;;hz?4K z3JNB7#Ykgx6uv73d7-InCH@K}#S24;+ zC8Qn~jF{?T`%j?fM@23L`KQ694!vFf&K66$fEf7=<}yNXwmIDCm{7J4Kr9a>E2Mxe z7A+^qtFsU=a>63!Wm;v%^fZ^!&viVlDYs!eJLC$(U`%ly5id^Wh9F{xvlr}bS-D~v zf+nIa$q-36Q2Q?z9Rx$Vrct6b(!m4}&tBoZ87=}fP;i9^k)6VsOMGBYI0Z~FbyCwh zghTZ&Y1yEl1Jva8c`jeZ2iDkc9kVw3N5KSwXpq`SasxW2U`#&2(Xlc;i|%9O;N+R< zND`c+5;$BfMHa>>g-A`7Q$WIJVe(W`0q!6SMW!|A)Cg`kfuPMlQl{Y)3IwH#`E5>{ z<7pvM^^}XSLAV-)H_X~VJ5n=PQMq`Ns{@gXL6Zfh8U`^5?3XiXMT-lz7nYv6|3bf7 zmQHIsrj==jNj+9P3aoS_f@ZoVA++v?P+svG@&0YAL5`U9b^R#!W>alid3G>7AqqdhyV&xtZIOALoxwT zFQz>PArMe-w9%GLW%q#2gGEWnjcJ!9fhqmq{9(}Rh6?Ox%LB|F28$Nya6{h33q@vM zH(SOsOoW1Zc5Gy<6AF~WofJTtU+~C20xayVIL zjbr&58by*4C;_9>s5S@LktIW}1{yO=9Z|3vqnf-cH$I^^Y!$1Q!{EhHE}1#ZK+8?? zfcL$R&KFd4ADtvENE8`~X>$LB6u6d+4ciSUo3wibhU&;-BQ#MUxpPLH^4HRPD?tK|i|p8yS}F+N5zHKgn{j z5f#_k1F)#}rev8a3O8Qf0ZFnKXpjWKh28}3y!&J{hOun-9#23v3b~^H{5fGdgM=0O zE)gJvuFjA|M#V)&(X|JzjlzOyDGF~*2~&r>IN1ei+eBw9jrv_0OC*V%3vw=vjh3d7 zRA@RnVY&pLfIxse6<2*-gQmmVM5DO`PBz(`2z@vDnO;V~GCIvKsQaKVhoCK3xnts5 zF3j9)A8%%ms=37Evagq!q19Tw8lC9};kZ!|b37^V zf)h0HE$wYO2MN(;!bT>As}6C*gP4L~Copu!4V5N59O4jWuME841RAS;7nhs?ht_31`j67-6GQ6%-`AJCILy;7I_V zZdZpwP+S|MTNjuFjRPt}rkV`}ax;^qvshw;QKQQyTF8Z=B;BB+yXDihMb1cq8Ex%5 z*MY5;rzeiK)1@(nr}<8}lUeMzcL*Q=PaSdkpqm`As5J<&AhC9nJMKghn@u{*(Xpd_ z+Om3#cHfDlbR1%_=kPgMtLa>zU^+qtrJ<9jX2UCGbR2D@n?FW34JXfGF*JLpuEJJ$ zzHFY%KubvO%u%4u9=!71;Nd*FFu>&exd2Ic$HwJzaST>#>*%>K&WU^HWHff%p3CE8 z1ao%@&1g&)iAgfTRbfnKqq9Bs=Cp4FGwED~nyFr9ZNs#jQi1wgP(oI~mviR1}3GaS|It z&-wHWl+`dfo${)uY@n5ZV~O-TYKg`SbhrCr5Wa1g)%2zl%ez5%UM@y{iFk!iZj<7s z3);&f#&)KFoj~4$!r(@NNo8JH!neHhjy#9_XQwME(^7z8FjJE*I+#s5yOxbmIei4V zy_KOwsg>&kY2E{!N$8m@!}S^IZuj(X^16|C92cimXQNXVUF}b%b{%0!II*g*x$iV9 zllVjJ&pVA`J(BmCk#X7}`w?i2H>zDHEK@`B9s^0SPx^a|BWZH-F0@Eg*pQAbq#c~A zY^OmSmAnopog}~XuJ59W+35?xsNr&X!ZPDb$!k&=?IOly9`H^qUuJAL=^y;Q6N44s zcPNv;fB*5AI!I?H?(0Cblvy?2YY`dyzNjapXTXts-_g-hIVn+pznvzp0(;-FVd+`_ z38P^6yKgtC^GVRAQ5tgb)n1t1!FJ&`Ke^fnO=fSk<)Z8KQ_KaR_TL+217od|oxg;l z>@Xtdtu0`i@9C>wv;>3Wr&60VlASUZn^CNbW(96*VA?>Npd^ND5~?O?W*dve2G+4o zE@yq(8D~+%fG*=(*nqXsMLxuvsU;Oz}l$!ieQoaQd2DLosiz- z1JZTE#&mXo?X@YJy(%Ly%}UB$+$z3ROsi6mQ&W$wG&lz z2=DBxv$04e#u^h*YC5j@coqK>9Gy<=mhOMzPY<+G`^c*NM`z z24&<4{R!zAVA@;9j7F;gB|7&ozBJ1V6(Gq7VK&D`dzKYx1ttPz%W)OVQr>H!v#E}F zv^+QxPUK=MO8;!{RN1gswi>RERdUH@jKu=0Uph><4Xi1NuO9kC+l9ys>;dLTyO$!xf#1`eMwAGz5twliH=u&KAh>sXu?+*#7} z9xPvzVh&QvVSb!72EgIH<1n^wd#9;F+z2+#jKUd&JWVMKTn}QCmJ|-WJu}*F7>8Wu zAi*s<0!faJ(RF_~EIxtZe!|4TQnY~6xjvY+f|-7XcvQ6AG9U-5cBRX(gQ4ui#N4G1 z80nAXI^MMPKwiPeR(~O!X3!d7^pIj|bQgobK_xieRpIg;#NpPS8i^lm z9MDrzcHT4NfCQ!+Ja}0xY3NROAaNO4(^%We@pm1KD5^ z&rA4=v=JSG3*JPbK>NEq_Pqx(UFuC?SHdnXPsxlVg46I$<5(}stOMywA|w)M?o8)8 zvDt${Ur%@!nL=3De6pBIsCNklpj#IaD5myqF4L@Ae1dsWmj@A4t@4bfvKE(zn@J=I zisQRHidG2B)d`o!pk*A9Jaqpb`(?8b5T5jt%c!6Kg*b_+Qc;eZH8OPk!S$D9gHoML zmlmUnZAiH{xY2TnMT{AZp%T1_$2Q++2M#Pw#2vs1Zwh&2=D*SIYYO*2-#$1e=-p(dU zcKUu_cV?-7dM@owyE8j8yP1t~===2U+?<}7-b51Ld@>IT5`7VTO>iF-6@n5KR1|^; zqM|;Ch?f^Z6hZMjr~beG`tLn!RIrEc=}XnAQ>RXybE?j%Q!cbsO?#stpDjl06<9}? zS+&6nH7G5HXe5Y*1%1ES1ZLWJ{Ase5j5)sIEzRTnmnmkZp3UZ`YmIi z7_~2I5rdQ$QoYe#z7&%XJ!gY#=$K{#thZ>|L6gFPLCYs_A^XZ`H)=Cn`nWZ43_8Ku zo;N5CaQh^=&=Y;gF(P?*lRg_brd5jwFeH(|6@-qafHGQXmg72)C`?pY&(X*TM)H1itRG>o*p4lh*L&H>#=1@n#s+ytfNJ`4L` zh#}!YY1UWeD$=^CGCAX{vAw^AW5M!uqGeeO)?7F1_=J9NgOL zo~$O4VBl=!8i^jc0VH*Wz|}<7om{!8{8VA8IF(MP!+C0HeNC^Io~6n)X)N?BYv*m%MvxGV+>r4bl{0(Ij(b zMuj`M?_cI#`*+!7*q7glAHC$F@Nv4QOx?X1XRTmb%81FB>1(Y9qvxGfh>WFShvmX# zP|2=kR*W=uEa)WsI2kK9AXfoV!oaEq7xLP{a8O4gVQGrx+~I?6=96n*ts}CXT$Uex zuCP~@R%2?>>I6jvn;cKF7{H-;R$+E6#c`Ysn0)6GmZj+*lq$j1Ra;XC+8K%AJ6?U#%%$55 zWGE~f6Z|%u=&MUt*I?ROgdFmj@Gv8V%F1XB+-s_=l}HBXDsmqR+)77tkh>rpo7>B? z(jl}uFLsACB?3}_xJZP_zA!sGPuJgIgCdAVewT(v-gpbx{tl_O8ujU9E+6gBSjB$z z@$76`9!MfHK#NON=_EX%qtPKWPAx4m$2llvpU+FkCM^koPgdBhi^K|+`Z?ATP*tRg zvb{8DK%NT>gMTcC&p!?dARw%E_9(hx4r>G4SjM|6q42Ebpp%u@BNr81B&NZ(w2fah z0^|Zs&SXLxrBh3?@+-nBu5E071A6KT?>2`>s$fAhr z^1$t(Y%nM3-PlFa1RR#)?Fc#;;n_!S0qg{*ss>f3{5KG#npkgyC)SXmjR;#FD=Skq*G z!PjXSgbpkoFvR{7v^{wV3eplJD!D0s*0Nc8lTAG9uM6pL&~hm{V~;$#@`3yAH4J(_rgscCDeZ3!J2;&|r!*+O;v~JpjoO~t+(mm)hjgyI0@)=u zC`5_9a8yHV6(IE$Qi4}Tl)eqCH9n?IY-lapbTGEske9B7v_;EhnLr$=;|JI(4Jn5> zkz*vI>XJ{7nKJ}+d9hu5u@Uw+_#UDFIEyWW)8m34q`!K;$EAV`tyyV5L(71cq{``l z7j`lD9(m3x>m$15mR0_vI(7wyyE1kU`%OJW!|+s8}LhYz?1Y zPE(k=n$ddbCgiF6p8iJ-M5O0?bwcjY*f>eR;>o$bHg74K=6qIHM~IC?C_xK>R5Gdu zXIn=|u$N3=ZA6)p)(?iG>Ezbo;r@k8X4Kj0?X)QLV+&DNw?=7LN12^|HbYf1SM%9? zp|y$Ee70*uL z5iVvV8l($Bj2Sn{Q!l>!)k|PndOoa^d_3Ik?u{XXPo~$eJJodlB{n1>IGr@RS`j@> zBt}N#a$BCI&AMLRB9ApI9H@F3E%hXJj)Gvy($qDF`)%Fa7)jGYMfh&-4ag3#1%k&S zR}nmRNUKT{m8;Q-?x{o}Pp|f;9HLUvS;sPi6!Ue4B@u3l8zZotk<@yGMMO}Kd{rc& zT#EXx8`Hp!X;QV0H1W#5v@6Mo-KAdN)`lK>TpxC^yJMFg(!JWrnXoj)i#@u5 zX42Bu4vhzPO{o)CXPa=Tliva}o9Q*3l$c-9*TRlavU=eg3i6e~Za6S0)iBsa8;PO? zS+cd_S8t8G9S9$8-lftUuK(k^%?K^hfRHzK4p#Y_#8`z*!Ww@HgW;?yt=`Iiw9{JB ze$^OZvMJ#re`AET6fX8q)DK}ct(9xY!wFPam%GQz?iRKod8gbp;u?e{+^tBPL$DIu z0BoyFjL_8?+(hJSi=-MzPNa zW71dSnQ}f|%U5#6Qn^s96iSsUR&k|tA)7Dd3%NqATqxx#p{T5OaG(Oauvmx@A@2@4 z#1!07EVQZ~DFys}hZAhc7=4aQ6_Nz8Q14IyFb&*@^IZG+$6YkHehezGvoImzXk6Y}TiP)=9dRtJX4JL&&L@h^!dOK%r!Lv!u_=C!YNH(ca;Q`s|LS>5MselTk=qD{s2{GXz#7PArrK?sSJE2x9FJSc?Yy|v|CF6gCx8o(FSC!iw zC|BAX?5;G2T!;xgGGltJ*XUL7dwMgM#Y_Eqe>_W{%;gdNyDsKdM0;%B6bmD9ZEWs~ zg%xpQY;KFi7112eQJLF#n&;`A^*B#3%?)u?n8#wFDOzLmX|Zri+z{rjSXdWbA*d}p z>KS^-_x!m+uj>PIQOu3SwH0$-)ElB9%&b^!h#Mc_fo`k-x-`m)O3Q+e6s6So8gYX@jb+J$t?Gn>13VTP?`y(6mRAPm3gLzJ&<^7Pp137edF-3S3!rNg?NYxQM8ClD;H3}K z_@Lhm2l!ht9~ z*XRCIeXGC6)PRt`(K`t7odGyzY6#zf0`%rl}bVB+&Sk1gQ_-eKODZxC*n z&jZlB$t`e$+_ux8#D!^A{x|!Feu5847BIibHoR?W>cY1#kCc;qg;f_x55wbnvrpxm zAP;3&N{PCT9c7O|ZFO_KT(w+H^$P7`s@U&!QngC8nkp8$<$k49uGMmmN$fUH6mYX1 z0Ju;s=BvG8FIB2^0l3(&rmCHCCsnEzbJc#Y*3WhAB>xWBiy3W8mfXpw?lBC$lhgVk zA+&LO)h%2J4*&EHVG#)Ncem#r{yN}14lqx+ApSJ(gV?d1{8x9)v*f@-CKZ=6^