From 6f5bf8d48bda3f415796428f16b33be662a08329 Mon Sep 17 00:00:00 2001 From: csharptest Date: Tue, 4 Oct 2011 15:11:52 -0500 Subject: [PATCH] Removed dependency on Rhino.Mocks Added CleanAll batch file Added the now rhino-free service test to silverlight --- build/CleanAll.bat | 5 + lib/NUnit/tools/nunit-console.exe.config | 4 +- lib/Rhino.Mocks.dll | Bin 287744 -> 0 bytes lib/Rhino.Mocks.xml | 4849 ----------------- lib/nunit-license.txt | 15 - lib/rhino-license.txt | 25 - src/ProtoGen.Test/ProtoGen.Test.csproj | 4 - .../ProtocolBuffers.Test(Silverlight).csproj | 1 + .../ProtocolBuffers.Test.csproj | 4 - src/ProtocolBuffers.Test/ServiceTest.cs | 153 +- src/ProtocolBuffers.sln | 4 +- .../ProtocolBuffersLite.Test.csproj | 4 - .../ProtocolBuffersLiteMixed.Test.csproj | 4 - 13 files changed, 109 insertions(+), 4963 deletions(-) create mode 100644 build/CleanAll.bat delete mode 100644 lib/Rhino.Mocks.dll delete mode 100644 lib/Rhino.Mocks.xml delete mode 100644 lib/nunit-license.txt delete mode 100644 lib/rhino-license.txt diff --git a/build/CleanAll.bat b/build/CleanAll.bat new file mode 100644 index 0000000000..64df6f3f39 --- /dev/null +++ b/build/CleanAll.bat @@ -0,0 +1,5 @@ +@echo off +CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 "/t:Clean" "/p:BuildConfiguration=Release;TargetVersion=2" +CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 "/t:Clean" "/p:BuildConfiguration=Debug;TargetVersion=2" +CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 "/t:Clean" "/p:BuildConfiguration=Release_Silverlight;TargetVersion=2" +CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 "/t:Clean" "/p:BuildConfiguration=Debug_Silverlight;TargetVersion=2" diff --git a/lib/NUnit/tools/nunit-console.exe.config b/lib/NUnit/tools/nunit-console.exe.config index 08ee954714..30453c9b85 100644 --- a/lib/NUnit/tools/nunit-console.exe.config +++ b/lib/NUnit/tools/nunit-console.exe.config @@ -1,8 +1,8 @@ - - + + diff --git a/lib/Rhino.Mocks.dll b/lib/Rhino.Mocks.dll deleted file mode 100644 index 5ebbe568761983bd937acecbd3ce033f063dfc68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287744 zcmd44378#4)jnR+-M8;HGs$EoGf9S!3520p5{CU|5C|ZMVKIPUSVUwG0*&`3fVtcu zD&iJEWz(pL!MLEJ2nZqyD&oT8h~feS5D*m+7u=Wdf8TSey8GU_lf>`){?GHv19Q9U zoH}*t)TvXas!mlOcHH}nZ;T1>|I05Ma|eF;Z;|}n_@7k(ch9-A+uT}waPA!)hdwy> zwP!A?4V_nwofoS{?Rc<#CJ@}ZMY8>+52cWBwUL$7?zQA6j%r=GT;tE)86l3sG4 zF^6{e=J{)v9qdYb%5={ycNB~{4qV}f|Gs}Ao`>+TikvReXHWS?g7D8@a}VH1pY7*Z zFT6~Z|I%OkD#*rM1iFXvc~xLeCF$0G*9WE(X-@%fi&of1-hT#s%erC>8Ix2HDGQdL zcHwgT9&#)S1x)G+zO(;^j5%pRwN^a^iNYIrG$CG2Xl8T~1hSxd+SxG>$*Td+lz};U z0^a@vXaA8WqCWoj4s-p*o+(=3C4cQOO92S*yUM0*?5B6cqohrTF+IlfYm2~XslpuL z_8nlOccjBi!5i8H@Y>!Puu-_?&)NK=83dQVg#3BJ`yFMJXK51#-Y3Ae^dhiS5+1Je zA~XpE==lvK23`#nEH$VmUJZXs4G;^A<+sPY0W{0PPn|e1pe5tgi4=oRJ~Q2qL9!Hs zvr-KDNcQR^@5gA2u%t*am@5ruGlyjnPk#HP4wO%~mPg4amDD71j&>dq}Sh70d-V9h`Yd8mlR*z-pO#fIT3lMlYTHt zHSqg3bX1UJ21?=R9Q=ZM4b;7;2ig4$;c{gg;1R!nLkEy|CUSt+G~@atW6+fG1)^4- z^Hz-;az;vgCDY_fK# zfuy;my$468nEQc0qfL9x>5IWvsnZm?`g?=QYM>Q+f;GK4)02xK`%-V%6JEXyV#0sD z`JVjf$w0B%2$WP4k-_har!h;RCl}bqqSsUCDT)$EZq~lPx3qpQQd!TpVf^yN(p2RI zr@_F|-k>KaUcPKYAX!g+`Q?`fdR0?RPYJpV&SA_<E2AGPeLABY3)Ew^+L7cJ{3eR(5JlD6ZYh_QiW`v>nZdWdy3M;tfUz6=86D3 z|H`IXP(f(3W|%Xf*dxNbs`C--5PpnqQYr`X)0vO^@zzz4pWdLqH`m`AW;p20S1v#% zlaB|;a-pEVMO&|Y^%m%KPi{4IxFdo-l%kpVqo$-M2Z`r;Li`Q2)u8TFE>SAfr}AA; z&J;G>!i^~|ggT(*q$l?y=W;ZeD_RSIoS{f>&~6810lE~cq)OrZKbRtbJwX$S@T8R% zlpe4tJ$^nZc-6a;o@(pX6KWOHz6$oG9!~a9AeDQ;#GvsC%DpxV!f-}(5YJ_k?}RDa z0|-Sx9VaKR#Zx?o+*#a7h{kJqq!(18F@7CK`?632?RnpGBR0=^qc|`VX^&G zeyCgqH!D9_7|IV#Px--0B=ReptHI+TZROVh#H%xJB7!FQkzBl0ll-KhIsuU1)+)b+ z7*9+ghCM1JUBZeI+67Unk%TPC*hXcEaRRbDR|LpHtSp&tGh~ULo{>*RmWkjf%Y!m{ z2hJfW*PcGdYI7uc@ahEl@ir6Nu6HD7P;>KI;q?;XmB{fhaH}80d$esfS8JK*OPMk~ zDf1XDlOR8evbh~^IkP*;T$*)lcGYC^j!0BE|lm@9OSX z?;xY02Z_OV+YUvha_BbafY$LW%U{UeFb=T|Mvzmz$@f|4Hqy%bM`VUZ~p z@la|z;%TKy>=5^5bGbah1H-kqX!;r_A}hYsPD1k1_y3{E{E$haMXQQ8JI4u=?4QQtPlIev@am zGOs+{kXTc{hd-IL_uxp;yb16s>xDWHCUq!PV7bvW6m;46c@Z{hf|&t@Gtjl3T@nan zyR$I=k@XlHp&r6CY5}H!Dl7+%Wel^-V~Xn6dC<_^4=~JUoP00L%J&ON1x3CIZ=L^d z%NMq(Nxttu{Z_GFE%S#nSaGBC2a$QX0&8LYx=u6(2^E~+;c8jI@4;+|Gc_)P&u0Y> z)Mmk(jO3wIpiA8tJwavPJK`I-Gv-qASp5csu0@N2MZ2MWC$}9?nxw8A8y14jyR@$C z|IT(u8+&zPhhh`NbrZ*;rL!Tw+OI%(S}i>NLU>|s9SAX`weWPZv+c0w@G9sJz=sgl zEWLs`4YV&;-k`JzZ?8r&gw0(2`vPE}mCp@yWfQ~3YIt=Lh9zc(7@eSGt3i>Q{!UTx z0)`7)ZqDqF=MS*lSz@wFVShCjnDf?#14=|>u{NAh-A+n^{1;@uCrJ3K|f=!m_G))rT+)})8NQ7Gk|gEquO53{B+*^cM2Nq zzzW-bb3GDtKGX?a&-N)yc;Uui!XlPT=DgW1C5<-FRe>iVNN9h|&*zV?XNTwsv{zwz z40GmsRp`uFaTFQ}J}AdR49!oy0+^~4g0&~i8j>D6dK6|%*-kqNc_kcU7LCaW=H(Ug z+K*q-?%_HQ<|&@p*NnbJx{CDa+kdWoI@=#mC-w(e@>D;1M?wRK#C#H@Pz9p+qQ|yQ zMAigVerEx+Z|24K|8$yHl(l*Y^vkO=t9H|EDNJD(Ga>B{S-)e3Wytk+yqg=9CP7*} zs_sZQJT}eeh*v#Y3MBI8*acV($^kyzL^<4~ruop}mML>w%?sZ{#kk!!p5_ zRJ(qg$m&hP6zNyrg2!ezU2IjhZD8p#e1v8v6nlGy4^$2_P4pUgcf^hN!Q=D|UMnYB z59Q-d;RB1JP!i_Z96r$289s8Nvv+0qfU+fg5I4p$U#mE>JlrijTq!&de{*<%12ut% zZ%o1iapOfB=iy%A;j_X6@i&Kup(Y+YvkU5dpW}gjBpjv9@#;i`s+21jp6sh16);Ii zmBZ=Q?!fpSX=pAxry_v~bE@xv*|u{kuEUo==K<0ga6Q$HeL4quNb36-NHoK-mJXAq z>-pLFJRDEt1Jty&q3Ot9PP&c$_DjAFJ%r>}4cYe}{UOD`3P_i#a?d zg`-&X7n85fL9)(I^U7-k4*`QPfS7GK+4&HtF+Yj|xuzMsXfj zoPmwec|yyY1V{H9dN1R!YFOK1$=c6yBBw zoAlSjsl7H!BB8-Do+rF-az0;3;cd$xjTe;%%6$xM@vy|w32HS)69nHP|d*!eOU4TrufHhF8)6iA6;hi z=>JFYu_Us2_}H`~|0irNzOVSN-(37q@lV`b{G#H&VRP^?E}2f^M<;CzJ<&DdPZ9h# zZZ`fj!9RJk@uv%ZhcP=$st&@>E~dH=rbQQ;z?bTvFZ-l3NW+T`Y}G-xk2*`>wFO|R zNk<)g3x&gAwuf)2@MtplkivJK2-khutpx7ZcFQ1S`_Meizh?$4^_#2@4HMswRscU0 z8tn6AeP}zyKYw%acT{`~N1I1~C&j;T)A*h&*z6+sLG+f5WN`AK&DdS(uiOawCUpd! zep?;EI1S}e$Zs_lNFA!xH*42J3_us zCB7eB1AMh3eTjLr_3IGbI9>6s-4q`7e@X9yo5DLw@jf&e-o|YG+05I<)-Uk<2!f%L zEB^E@+=qLWO+X^$xH&kC&6x-MbETX*#thCl;NFV=ds{LDVLD5g_1)EfJWun$%WaKE zQ8?mFz&m$2+QXMCd}K2C`3lE4)trBr8$C=#$yt55Q1OS`;xn}cf2HDMNvWBB??@o~ zHW#Jk&v4-@GTA6sV8u`~=Je{M9Dk|9gd2j^d0Ek%0>q0`It#lcBblG+)*{^$rd+8A zQ0UzZdRoBVnC7=Bi#ysd^0Ix5zosQt=xtgiR&AQ=HU?$F{DFIA(G&7J&|m{XqQsT< zeOm_SDU180{x)_b5{k>p{Sqw;{z7wE`=@jo1g7~yt}B~MH6QgOJ{YPyjsd7cHs|)j z3<-5+rqRXn$Z|*bl}EBW3f}?Ze}XeXn-A-ijqV-5FR~GYG z1gS7qTHjZC(KmnsHPrcXA0SwMspX&?e*9+qlw~E=t5Y$WT`teUeMrm-w zWaq?6SAd`Ew_uacuqN{!X>A@v9-XE>n~+qY4dAPtcQF(;FJZJS_ls3~hl% zG3)vz1cx!yqcqBv$MYe0jt|8jl#uilb|UN;DuKe9wS|GDoklh}ZTJy(b(QY?_ow^r zW%FKS`)mDcc0}L*diY_8z^esqAcdO-5Y%Wl<*i?N} z?asTIQ}uVrqt43*VcQP}&d13c3a6$fjZ@B@_M*nh@&mUpix?B zJXLP&;KKaM8on_@W=6#nOL+B6hgr0rjM0b}>yengbu70J3$0XHv3g}28;Kp(BS73n zKIG%qpai5z{jWlLK1Q3BB#I#)1G6-axq_O@j0{{3%t)aiyYep@k9{RNgA0cm$q zbhV^jmaETzW+y@u^H7(LuA(g46_gAk85e?p$s?3e^iYcymKnAcy7bnZP;m`AB-Nm+ zIR7rT18jBgNSA>G4aQODgNU>GhH?%eNA<807qyf25t+ymU$)Nlt<;Wa zpXd8eAT1C`#uDg&LHu5uwbY{6hueg=4dJhlPa;A}%3bJ1cOxki6jJu`5mpAn)^$aV zFZqhdeFcn>CwsJL)ija<^A2VSCjCMCjA#x9U zHMc`V4yy7-jFPjfL1P!FTe1$OaY5e@+I2$wC=V@4v)lG6i%h;nyuJm&f^`^n+bB>Q+ z3*2EunO6290-|wyauG$TJH&d&M{#dQ2Pnn0!E)Ce6jcI z=7K_LeGx!}mRh5)`=3);eutScQ*C|k$PNZ>gZVjW*gbkxp%`wCJplk4TdF>Tww30v zV0Z*2ZJx0DD+jCo);%dZYE+vk4Tl+8!n9%~1glfZE=Iu9U{*0AiIbuIA#e5u-;awP zW~k6Cj7Z#{Ph~B7lCp-VZ9gu_e##T1=dVEWf7!n%{80J8aBSl+Tl<&# z-A@b8(KyO)>f_fW?HyE)2D>&mFlg*1x`8G0R5ysLc6-yfoEM&jdOj<4tDcjP_Ag)N z)k&N~o9n|DB!YtPI}h2QS;Wb&@$+kBdmfl*D~6f$6HKov4^q0yE3zcYRAEk(m+Q*RbVde#)W0|&^$Zr}ALEGs2bUeS#J@4a1SRM$YrARaRvCtnOB3H&Ty z3L>yN;%tU5{s$ap`f8L}{07!bdO+%bunb>u_Gp!j%*~lYXJ5}u%|Mpg8!10TxYw|s6AH75RdsdB$-X{z z>rtnqzes;CS7w1`Z7#BQdK$nqT!`o3H6@~Lqcl1v(&)1^<~7sUY66YydOycO%nP8e zP*C{W+>sx}j~gf5{?JsFF+r{gY=6x2^pBY)aNl28zzYnP_N#zL3`;@nRQye{*?dz? z&|yp;^Z6^bhJ;%D)V|KjFF`Aeuyw_y1gJ8V(s*Gs8!4+f4uui?A$Y)d3F2Uai1q-Y zIILoW9Ntx$e`bQ%D~Qo);LqWlhomstB0<@SDAiYVb6!q7Y4Hqg3I6UXy6m)xURd*x zzZcU)iWJ__X>K&k~u$r=zgynJ70p15c2E8ym_M zxQ0+v_H*$h#v#bem~0hlz95|mq!sA6gPp09WfACW;cN?KE4@nQtLW2=QLh8GrL?K? zaba6NVEQ2DjTC|2$07z6vC9M^+Ltdu?5Thw6S}&_H9{{WU95F`(QPW zuXadF=CriIyC{uUw9**mY^5JuHwe-;&DtNtF+zE1e*6Y}PR0f8gP)A=n3Mg|-IP92 z;?*GM)rm$2VTZ)9uuih)F-$2z*7)DagVuEqq2Wh9GR0@J^PGb}Np`^r%+lGKP}y+kdJAMJpm5fUVb`8bw*dPXvgU|AU0pLZu|HBNhq z+4pcg`rSJ+)!c%z_m;9R+82dIZzhLceG#4q;+JrEt@=f1rVcyd>Jj#P2(L8sapa5P z#Fff^^>JXtH9U6~bp5X&%N#g#arrXw1LVYEr4Lzn2(Q=^>H^DJJvWFHI-ESOIseJL zP#Zc3)txiMwZnKh2;1Inj!rk& z`!YugkGfQbg|V_P=g%;p;?TDBRSToE67KjkbWf~iR|V4N$lFytALXd;T~rU88p6c@ z^{{Fy`N~75mHUMd+JBS-A>x!(5oDcll*77@q=mHI35+Rna7=A?!V@Zk_Tt37H%}Z0 z6|AulB?tOrNmk9ER=F*(s{t`Vd-|)pPer7BPho(%C*0y?M)fdFo!OJe>#XYQ^mQ=d z0;v)>AJ;(_WjM`+$Pm+47~K{j*wEFB0M&z@u8T$uBmpvppXg%zQJGj?WJ*%Ckk$}4S5cBaurA?rmZ_@yp`{{#@qPgH{Q;lpm7O* zx^ox^1)s!K7jmMnCkgF3v&uv#Sq0ewOql8g5Q-*WLIV7gF(Nw?oHzadO>>Z$B z5cJ4wm^^A3zSz}M(=z5zSm8&Pf~2c;7QSo~a2#jbX#R6H z0f)ukX#O{E0*)&jHkyCMCg2xr0{)gw!0Q`c_XEJuttOcEbvjlQWwi zS8pVEt1)vMj6dIm>~Q;m`_>dUzN-n#>6>p@_S;iDKmI~9qNBGZ@ZOQ))t&}g8uJX$%;if<*arb0i&rp>fzh*xK#+smE8bFJpRTK>CPJ|^PqUop#y-h(F$wqzlU zuh?Y4gIY*S89j2o^l~lZy;4S6giIc)FQMngivW_H+zbZ-o*l0SNY;N^L9+zpSd_8Q zRS@-ZZL~F>-_P>>>VHs@UFxzrbq8hDs#87YGUT~Zcutvx5RhD2I0Ben5mN2#ah!8R zw28A_Vs=Qth>Ep3Q{5IoYn4>Ma7yNpDxrn=a#j_i0e0POhAWc{sjbyByVq`-zf`gr z{_dZIKQ*I|0ctCfp9X1d3y$od0Jc=7y>chT8j-2Ak!=WH2I{gL*Wx7uqQgaT2GvEY zCbCIpJ95-B2htVV(?Y&z$6O5RI7K8E4#>t8@#cRis{uy?BP@(#oL7e;z5)qclo^cQ zhbL}|Wo{;Lycf-WC}(Yp?Be$$hjzSe0InW|s%OiBPf@DgFqu52m=7V-CzR$Ypf05U zp!sFb2}6}C13GpDkg5JMEkJw$DS+$VBJgtFja-?I-eL-rydMur*Y|Zut;-myI*Yw3 zsP=%2rK#=&a$xFHY5ix+keGn@)6G4>$xHD+lj7SLg30mcqJE#v;19w1xOk&wOfi@< zo6o0t5ZwPoaBs_y>Qr~?wLQn$Vo4paHb)KOdNGJ?xoe(YnZ_b8t z1rz7YE*pt}GJB@YVAqyFnbIo6tV2=$9-E9XtjokW%0Sj>?`7Q>Z#agGv@6zW(fTXS zeH+E`gj1B^zrIT$t=^J1RTb( zupvyr#jEg|DhX)GqV7%<7q}u94qN_w{DN%Kcnr5O( z2*U|>oamSa*bp5!b`5R=5ni;wqOO!-$)5z%{mlaJNiol9ot8{eC#DDeYnG!Abs&}r zvMHq=wpI>Gf!6Z#(HBrVcwW?cdA~{CsW-4C>}OmB`c0eiC~<7CaQO7X;S@o4cLS>P^z^La*$W)@M1=+*>r_wkCG`#pvGOB858>`^en`lGM zE=h`rKMJZYC1w#pd>xaLdUTr`k>}r923t&5(q`~dvSfJV;H~W$e@qF|iYn%;HkgFQ z*DEIVS24G2gGs2PNfS6ZrWi<}neaZt{0NL~5Z+axliun!*cNU_))kmcG9;87Yk&h8 zrIEVwA~z9XX7*C9oCgvTm(p2KO4@%l@`Ou?t@O1wp{rn?a;#i7I0MhP1dAr^K!_#& zIQ|SLhO8)Y3r{wO=h(hhGJ7Ixz$32OX?5O<$t@cz)K&IZuutcMXf4RXDhb3ct2_Nx zI{B1NGD&Vj=Z4AXq-)5218W3y1~A=9*N~kLP+~b=ohU8+Li!-b zVX8dY*}aRHCHe&UlaMGa!>cn{Og{%tO_XKQ>XJUr*a+4|URW+gsuH?KPexv|*tI{wsIh*!s; z5Y*NQ+m_4J4o^YK457=zM9q6V&ga_-0eRnt0bdDR+V6j2-IYvY3P{p!`PHu;INhy+ z1l1#wXEd=e$9~oV zL+As@QwA?&!j3h(`0jotTUvH0iv?qtoi0p|Qb! zgf-BxQv%RTg!M)YXpifdITaiu{_Nvx^;%xG4|&>BbJH??^f25U<2)mw8ANgUg8kZ#tFm=fxl+8Q>YOkptOsQC@Ts zGObOluxyIpVzlpi#oAwmDrxAwXY_eElHiAPTP!O>-J>!52r8l?up%ACcOVIs2D)iZ}eu31L zR-UczZp=AA%PONGn(Fc%XW_8L&MGucg@p0UN;OWyb25L`_{#%@PMuh>t{f35$i)Ms zY_~zT05e9-P8h!flyDLy7k^RIhK<2HJYz(LCMz6H7fOb0_v)51e6MZ`>1QEr2|Kl- z{A3I|9c-aN`ObTfzXrO8DqTW!3P^|CtMh%OxG?ap@h)}KZ2}e>&!qBx4vN!NIRF`^ z`O)X`f=ggAd%O*Gf?Gt*L1>DMv2+LX)p`9`z%xdxXgTq*h~_IYo!^lAx>6T6yie`i;Z)Vi_)TBEjh zRoAs%OWf-A;8+IQCjICgnQ6`ji^mX0*VsuL&3bYg#>$n!KgYjx89mgiHzav&@2u#Ag%MM6Y4zC2Ep&Wii*o=Aliq1@0s|?*wby~p0?9T zYYd8x>E1aAW{c4Oc9<@mri;8<{wpuaGchzW4SNq>1m)LhEV`StpRYu`I?M9oWki1q zkm4%i7Nop67s$lQ+*OKmxxj?|W3R*bQ`HE zv2K{0lo05UNoL63fW!-x^BMHD`3R!{aA#z2B_vNt%*-T9^r9xOqV70Z73A9(xV5&2 zOU62c`{KDFIwFh^1fI%gmgpb8w*bb264v@Qp#EWg4a0G61|tgx@UD+($!>~|GiBVd zMl)+oxPsEJ$ZKKRwII(gaR0YtUkg0bX#-@&ke4x1YkKpzl211-Y4!1ZIgl`FsP~F; z4rMt$09TNE{N4%#w_*nP4i-MZfu}S8m9`-;7B%`Zk`dPuQ$vSYhTNErTk3NRY5|2B z_LVe*UOYOa{AI(-FFTobOUwwqPJ#JpbQfqObFmzV$yqv07pGgtJAuprSbZR!l}P4T zH`x0k*;I37XpH{FQih#R)c%B`oVMwhJ<*P;?SHG}YvX_XPi+4SiB;UB?SF@sn;B1E zoWQf2Q_|;xH8k&(Jk9mO{ds6KwUuW<8EGW7e-+HO$n$RIv8K&hm9sgjd39n}7tP>C z^X;VIC*~`Pt+{OD`995j0bO?#NIu6fF@6&`!4KR5{+z=fTPekPc%wKN zB!obq1ad+kGgjoq2fRXLS0|>b8MV2MV9FwryiBa3uZU!=ub^~3pmfOVCg@N^?ddE; z$yX~KR#xe-vD)%Okzut7O+obKYY&^QYl+%-7Fdi>2E2bGeXPAQ+) zP0A-_wJAQ!(vBaWlm_Lb@o`#L#K*O%Z*~ukzAX*)CrGpT?1NwXI_d)tS>>$v-+WT= z{HVwdWG96R59GYTrwP|;U@-GAa*09Ja6QT8W)-gerkS14dvRtF<;zy7-DpjgA1G>U zik5-pE$qZg7J&<>M8Np-Jbpa6yF&cws$7F4yX(bk&mjc4_B^r9 zGU4jUCGTRB--tXYiaQAmx{XQ@L&jv&bHU}ceW+U!6evn<6MJ$3Q|Tp))2VbJ_S@iD zH`!!iTCZbImWmI>NCQy-$0Td^d46ZXd`aY|vAVwelLS^1{K8*7r$^4k>Sv!Ex?c^cQrSChTi9Ai4IUj*-8n%?p zYx!@b)%wnL5Qx*Cyr=dgFVL4l+dm`1%dJCQAociF>&1(t#=1-8*dF=|1)=Ol7&Q74#y8 z{cupbU)nV24sw1p9}H!T!Y%-7>t-9mwl;(!aZ_>v&`N18P;GuTezf#{qc864w{5bRPrF3sA5ryG2*1LYC*FC z9%YYIn~zKuB;eV+__xoBtPz^=eVfm&f%Vb(CM3FG@EQ&zlQ0WJM!(1;EoAxK-4 zDa-$k;N~gipRKK}&vvkVU441EUL0z?FUeTm^}8!iZ!GU@qRX}tt@$Fp!P>B##13&! zcoB+wwuug8VEZ0M67~?~Cf*VxQkXSuHiW~;G;j7ohF=N2KHJ@C;Pk32>DM5U3|BH_ za>VxP#ER!i6{UR{r-C%|8=CGWe%eA#NXqN?B}Kk2l-Ciw^7bYn zaje>Dc>yb0A!UJfJicDk)!qRk>wZ(rZU=~2#@EhJYZm3ziHnIZRn+-Eft=lXL1n4% zs{v;T6>^|wUk68e&2RAbBJn2CE{=i-sX#A9Rns1e-~+K+=$f3~PD2O==*!Ldxp*B4 zKvB?5x*(YQ#-BwBe{aFB?kfZM3IeM~%;bm2WJwV}p8^7YK7$|Kkwh<)PtVB;C{Kmt zqo>$1J^7VAxz6<*%31nNKm$pBXH3mv(7d8*qe5hh%f|OCG}rvV*~LBs_RZf^4)Hx8 zRtiB*bOM4!TYL!|rHd-|9l|MP!kM|Kl7%E&>N*&ys&(cTVz4y@eM2FGc&ol2QV2u{ z)tm8{2_Vjbo@oZT{(Cr7VI@@o>mb`wICfoVaguI_c=R^4HvzwMX8tAh&5X@KW^B$? z@15m#JfXj}r63G*%3(CL%BHl6;?w;{bd3XNv^z2F$^q)f6)m^e`Z!4HVyhiK_5^Nc zP|!9ltZeq_262|{1!VTH)NY!0VAC7B#O5)IgPhqfJzRuL?n@7a6~}=>7ef@qtRF~r ztkFLfrK{0j$OW087`+-PP+e^>!6$%WG{*yC$6zDptZ_}sYeBgemk8zX0md1GKLCXQ zx_);>vag^QC9t32Du@Em57nFbcgT4V^8+sF`d zn_OZN<>e&CPbqR&r8k5)CJJr-JF^nQ5kl8?BC&ibv4T{tM`FFiJ`S0;-=H$%p3fuT zaz<-in{~W@(CIjQ(cO}ltU8tC$}{(oqr8Yh&Ou}C?BGNYg*c;3tZYG=CRjutpdi|l z%LLRQZ<%=u@TpFKB>1eKNy1%IS5Ev)67Z$+NxY);eW~-l=7KM4oT7_6*phW_uENPe ze*lVs`(~P|FpotmgYk`E0#CG~?|_ytD>aWow`+?`n`J zJcAk~7u`8)le^9Nm$;ZqJwrRpy5Nf%(rumj*&X$eO32|^Ocb{wp}a`h7bznRBZrki z7(?sXFR>VkLz8MLFcOz|%y0f@#E%&q+0v}r@*gKf2N5WX>2CvOw$DYH1IGNp~jZVgrPvX%MsLUWhtz$eSjX*C5Yc1(F zfv86FKbbX*lMf};a}(z5$3~M60_oT?WKO-rjV*J{LezgB*3GNajex*0yr9wSJA?=; zwGG%RSEd40qy0Rl)}F=p2D^NY`dp>%4LDI1whPte2@l2i8K4#8r}5Xhxm2NoCTYB1 zg?%`iQeEu`XnsX2RIf^te*uC`+s9xk#_b5A#PK-9ry)G34*eZ?p#AX=kt!E!@`J`& zRcZTzoazr0Odl2gVj8=4Hvy6{-_&VL0WyGnf!K`!9jP(5|*P|I!i@Lzf|p?Bc35Wwa%C zRk%Ol*svl;1{s1mC>WX8n!c{e%PibfKFq&LDwL%qwUX$AV&jmPDn<5t1pFVRr9Cz z5=k<3>#EEL`evHRWJT5K^HkG7?jttOHozNpk-*ijyB;)*sNf0&r!t zDD5w{*;xd+g&4twMKT+YN+yo!yN)1zCFtof-zL9tm@qKY{GIKqu92VCO zVg>6gE0n*BI8^J>eVrVJ@;Bx&FWIm1>MS9Yzivq;4M(x%7UXW|Q`34#uy}@Q%=2DL zm6pJkCN)vszqu))qpDcVpr9|tPhulo4BhEkHc=AF*)}*+;mq3t59Q4GSt_&RA)JXa zgL0~f!n*Jve^U{Kb&~buZ>xx0yKDmz=duhd6w(o)XtuU8`LdG9 zJ_2w0VRabTVI;QTuip;{04)Isqb2CfA^{lP(^0IZQ1=GP>oLc{zx12y2(nveR|YW+ zwz^c3Z@r%{{0Rxm8IIvEMQ%S@2C|)A{3DdNjTq8lJ;u-l59P-R6P#io;SnU1D|7e~ z{{+vqpW;vSGyK8rU4`gO&`LZ7ZL4mP&qXR9RK8TIVJOAiEENf=YDI#B5wcI^3Kl1L z5MYDlFbg6J@uT>I0is7h7=5H5J5#Z{>d6ffd>+!}`(yNr^L>j%W`9I1mb|9ygS(a}a zAXbQL9B@&v1n1ftrkbsb;K2Ry<4I^$^avR8B#tb;3LRfoc+`{P2w8m>%(8+bWU{C6 zi-}dyGH07Z;TU{?W%||Ukwfn}XkH^o=X}=p4fh60!;8;md>Hz{5J1`wc*EN+B$NFZbfyup0rV5xyu1ZaW*j>senL_I zof1V6zjAlI4hM3`@bYDPW6vJKfsc@+_*e9xg z8@%+38JWqqwUO8wm*OPW%&{nRn`1TfyL0%0CHgbJ;h6a_*}2#^O={=bU(e6qMEu%Q z;3OGBEzcctuhJKl-b#o^K6%$d%Hn#4lD|dkx0*Q7Ma)tAMV7G2wL@b0ZxdWatxrTv zc<2V*+l9xcv!t5fUlI5k^q|%{1ag+qpc>bF3>9Zb|o#*geuIvZcw2tUkc)^kzP}YLf8D@}Fn$*s3FPTNj`C}Gzz-HN~su0WoRfVs<;$>vpxrh8cs ziyenj2nq0%Q9|I5EjNb%#)@&47vkoZ#UQH`DohgE#rStf)s_?D;uckh=9u&BeQpq* zWyVxiSxSc>&3&l@47DYPwg*VbeX2bWx zrdzP@W?_4n=xTJ^_(fC!+n}~T>OHp)NgF0ECDpb17jE)^Xm-GOKos^QP%SbPWHzz zN&;p5gV$%58Xv&BJ>YEPl?oF3J5%`cB01-$f3=9CP(R_~+k8}T zV`fV}%zbbnR@zfjInd|AH@_K&6FmbIjF<4YDM`=wHiY++`hggtqHp46K;F`?2S}k`gS1vBcnpm#d?0Jeap%~X(PS-ea4l6Fd)s&2c3eU-U8O}PR-N!GY z%MG0a(8iDj zUYo>=BlfuAC?#p}a}syHOLN&@%_3^qN_V$}?gK!PW}Ad=XxQ$15Wju9Cj{EIJ2^;t zqm!k!DL(RS>()%dNy5pB{dO))C}#rsc3b_SSNoCVpe0OjLIJDqdjQ ztqoq;90Pj$5l_FLpj|*bf=3ez6v*OQIX`|hdWLA2E^tXRKIp`)Yg^iut#jXkISl0- zDE#PwE)DpveVG21m#<;E6L!}6@YgToqaOTr;eLgK(D`^7KMf2Pw_<#Fpk#34jyTD@ zDM#h9017n_-3vxsd}Np0n{_D5vqwj`mWA*05eK_(KeoR=kYAzi$2m~PT_r3GH#gi4 z9^#M%iVfQZ+2%}%?vp}nxq~Cq%nf*cjmlZ61_N)HO1dny(d zN%`ZaYHw|ro{2e;d3~?xG`QLVg`Z^M*^|v#_{kRjW3cBeg2Dr{70NwTc(Vg4bxFoC z>BM_%?c4}7f}_cX!AV*0BsUOx_4i30?fcSE`sB70*S`iw1`N8SIg@#UxQG_W*ol`| zL5~P#c9=<13yQ`RsaaadEd3-;#iW-zr05F#d;wP!kMNIvSo^nku zOC7_yF#_lZF8e8RF*KvUfU}@6MjgZ+nDv|iy)Rjn zw$HULA|O0rIhkOj4HV#m)CC`BImPl6Rbz0Dw5X;B2YL`|R6?d+ZHJzc$cU3L^Ln%2 zb!O^f@GZ|bnYkrA_l``L_=M$@oeHRg{`x4Yi`bb^_5)G@m1RqUq4`r-P9Y;8&0*zJ zkbEkMu3~?FExz_hF$CD0kosr^a<&4z{$FfoPmtMmu=+5?JOJ)5B7fr;#Z~G-goWX3 zD?b7$+AD#Qv&A?(CamMbH`2Ua2_)rvZ5{?(xgL8z)C>U{kTJF=v=y-}(qCK)_JsW~ z=n3V!1snlNz4+KA`x{ot^YJvwgOSMWwpu%U36%z^Cy(~h+U3)a8mO*MF>vzDJ6SiA z;~8Ww7}+z(Cy6S`c>zJhaSP@*z&uFBGfT}GcWW%LXSV6s{xuz>iG4*~*ZREb7d;H;h9o`( z9jq@T?U}4)P;=paL1DF_#no^wmiE=qEClpRlJ|1yeOpP5^i=hjB-Q#cy2V=~9ds0F z9$p+F><^sUyW|*oaanD&mQ~gKd#U??on;PR}3T69=mLuy8)O?nJKd5L$jT zWy0JWt_9$C5E`Lc+EHdnst*tem;Z8dBRHO=oz%Opn(oHfS0yI5^quf%mTo z58EM8r~mTNJGovX`3ensmkv?#7cqvU!@yi8H`e8Dq4Uym&_mzLQoL9Q-s(VFU_ z*yJIti^}_(R^E_(%UVYu!L#=YeEjVxlU%r1$M>XCS|`Q7Pw_8F@$V!)-`nDUSMlGG z;@?AjzE8mCSpR+HH;C|(FpPBNA!mm0{D9JYXF^j~kJd545zXR1r1}|!?@K7F7-_4x1OvG{hay6SG!`o=#MOh?@2L4cf*Czy9~09kq$`Q(@y*)+KCmf*72h(L7{&2O8P(h!>Cq; z419yq$|UAV*XN$j@TqGtG5nw%!0YPEP`L>Vt1jf_yx4Qh>$S0EvRaW}aTvIfGyC}! zhbv>+&t3JEmfG*3ILL@KZY+`5n8`W_Kp> zi+>7m4tE9dZ1M{ih0Y-Y=AROuI22z@oOo=n(-lgbcw0A1k?LwGt^`H7<`732 zc4#KLep5tIHPeB$2+wqz?JMeQd*&oF|1y2%y%T}ZM8xUGQ6bwlnD=KhfDM7p?U#z|yB>hNwho;&niIC9H{8=%?ne z`D|KgTQuj`C9r&Fq_|Y&(;f@L& z7dRxC>Vq7yF)Kk3iGa)b1HlLOtq}^3|F^~eRHe!*@y8$A8Hn*N_+u)IC1KYzfx7CC z?Up7)lCXQ4FdzwgAVJHD_r#-+ckR#b?qbGg=4}SQ{usvRCQ2%!?02oRdOPMtJ8Dz; zjZahdK?7!q2NG_?kM`9Up|ONn^$o^wxD3XSc*?9-Co(JwZUo1jn`5JZt3af$<1Wdh zjL!lQWqb}liSB+K^qJn=M~LD`Dm;jB6ScJ;C&D4y8gEuppxmDqlGGQjv+&KgJ#4Zx z$Yd{YYQJq>Hm`<^haqE-hVGUuX?=-b0Zeg({1tQ1<*;a>j*wmMG1X#}=#1aENtgjW zmhJk=K5%a8ghWWS_24(onQ?D2V)3(W#h6fpBsxxQFZ1x z&mZqV^<~BwM7UNNB1Ma{TpG@C-x?5sz>wTV)EK%{nlqIj@PH0YWtng|zYGvA;E<8m>8bj8 zyQ`iuZ`0UAe}xP0dn%j+lq7vJj0}rWj2Gc1?=U_DkFLpmZbmf&+*qgdaN!93+zIp! zYt5!AZ2s1BAVWPbI~SqwJ|(MgG=ag#r?3xi$$Tj&NVehYRj61Ue0o6c^^b{F>-sWLv9d z$kXro&i`e4%ZSpUt&L=Wke(#tP?{Db_Sf0wtp9d98p-KSFZ}eE!SX9r-UOAx>Bk<3 zmYU!WaQrw9|Gx?UUxfcL`4&H;aw8ssvDcslteXJqii9O;0wy9zI3i8JWETlXrU?kw zK*CXJ!r7AW+BD&KNjN%9SS$(0qzP=?VC;2i0-cdyY-yT6XT*)~tZS1qLfegTR|21F zxV%3^1k4irAdkp5YuE2UW(+r9;ZLq{Cw>&?PADxC6IYmsiDPjrIPvPlR&${`im@b9 zW^|M-Qu;7_i)1YMD)OPsyYQ3f;aZf(grqzoCFLEL)O>qXg7xFsY3F?M{Yd!Dsz~wi zKyG{u*&XhY=)Wfj$4rf1kH@53!cN=>>XWQc*a0uCaoj_H<1ZG+tDyDjc?&O?Yl+8 zA?Yyk8jPJRB@kIl@ajZPwi0v%-<_tc4)d_mWgwDj;}|vsgYp=*`hv2$J$a?1qtQ4_ zl=?eXc`2`~e%=d8XoGL#C()BNNp~YuyIU}Jim*z=Y(L1-`kvDIZkATIz3)@_cleWQ zD4J`(_d+I1C=)apA)DD`EK;TAS`A*6lv8Ih@u^_CK_rlE!d1y$Ny*BbDi}LW>PIB& zGKy}ELKde3Vy6z0wxy2g(&pQ{Hiz_B7vi7Mg1?}Ko7Tfs-v?>QleO#jlQ*l!oFnkv zD(?i`2Qs+)UIMnm%+aDp<8THvrcNwE$(c*$xO`c*1yiR>TQLxe5UQcTkj7B}RiFv6 ziApQ)W>q8!-@9O$L}MU^t~+XOo~c9HJf6+Ibd7Q zD}$|w*}0q@aqC)9xp{ma9O-DPfXK1chPpA<{buJkXjApsY@23%xCb+BkWGImlTJV5 zt&qZTYLA!&ItuqhYUI_K;0#m+(m}H`yW&{qmkG`{H2P6SKfVQ`&K{WqN%cGx6yX9h z4t&AbvWy10F{IC~f2fTe#aNK85jfqQn3k2xg4$cC$3H*`BGc>~dK`(cBR|AXVn=wN z7!<*rpmHEe5(qgy#~G%zq4ZKjAu_X!;hp&bS%yQHPaz&enQM!+)9}LpC?}L)?5u1h z+4r*j>S4}Vi4Z?N z8%W8h=Xg=PQ?q#Iw8JZ#OF{2+;>mrz2qThH)Vz`OKtS}fj&4>&v5ulWuuAFGS$a{= z9Fw#zEE~Ccmv`%oLIT6sNNE0+;}^nIl4sX(=p&cLs>;`!9P7TB`PCh&}!S{$ym$sxB89`T~c0$1D~vT|`%& zbHDKJx9J3$F3&VPueNm6A)-OUW?eq0WeD_!`b9EWiX!DMV>PGW37!o0zxd9jQEs$qOy zb6%a_e@u84-F2#B>!R?FE1as=7Jh@mDV4VHbqc2h+QL7ja2mk2@XsimiqQhk$^GS@ z6?pVv)KI>T;*hjGv<{zF8ZZFOG-M9IRO>r&FKtf<`wJ<)j;EbSG}Uck-Rp;o)ntno_DG`e5o#^##s7Hdq>;K*$Ab__drXuW8s z;ws9#B?^AY%<{U;%pU68t3pg(d$t5S?*?DUskFHWNosaGbCD5gXO1uxHQ(?r~JUu za^9^#J*$2l{n7n^_$?_P>sJ^jJD7d8%RXSU%UYIr^et;yKW|;j;vT^6$o^eNlcOzZ zVg?6m%{8&wJk+Cw&V)5F%4QTf9&Dx4pU{!-kGCWCRE8;M!^zXbj@F6^JgGOiiFG>6 z@95}>k9(wEAUxDDg#C^irQ0MnoNF8iJ?_r+N1t^N<)aIJh%r9}9}cBEj6MgP=xu`N zP4TA$@lAa0wtoKtWMC*XU7-OyiHqimaV*9)n*WT`h1ka@(dlV9bMbNkX7ptQ*&nA2 zx^pr=z>?Sy#yn`9)f~j&zk~!I(f?Ic)Oi8qo%1B+(XGYgP6nr`+i>G>j6)U0ew5}2r*Oq z5tQ%MNjqK%7HVa@H;4{9%pccaE#>}B=`vqSxjL5qek1T+(E20c>HM;Z2K?&yD`YFf zS6o7Z9XGj7zXxc%BxML{Tm)E6olGv2K-|ep`dnLq=UBoloV^>w-b4&Ke^ELZ)3C1Z z;egmZKd@zAdu<>u8pKw@*WVkU-M{9DV2NCI zRK^$WQAq^5(3BgzUBlS*kJ91=t@{t~Pjh514d z_X%+ssFX6?q^EdHgq);jH$t==)^lNmR%-4%kaI11NM=~D?qwffNB5z(*tnJus#z20K$Za7#6K#l~P0LboB#385Wx3b6w|f*(qMrznbY~IkV*PLoIf1SrpKV z-pT~I8mwG7n8l3`O+tq0Wj)3tff`x?TLyjrw6y^l1M?%cA?tgz8~0krGWt9Gml>L# zfH1x8pz$PsgT_<*@nuYt3zpx88Z>@^#Ke!`xJ6sC9p%!OnEj@?d{Q-1t*sDL&1~jf9=8FG;XN+=0bI;^eY08FDjOh@U z0W?_-vgllJ%N;Qngb#o~Dz8pqRbQIQ@3>P?;=}my zdqA+ke40B|BP$c7zpK)>RZ8d|Jb^yHdODFl^Jz_6=yMHAgz?XeFyz_!^9A`9#vW3B z{83;f9YpNJ&S(&H1On)W(NmN0#MgzrBEOZ525<7Vo^Z4^o^~(Lt{urJ*wAnM5xYx> zn+rFDMt|7tZ@XvXQc}A^$a=7#PdvR&@CPX35>L83LeL04sK%1e~c`Kyw?crBvu_% z*p7Iyxq9=&$@6=|?7Zta7aWEww5DHcW>0VVXn9#oR!*b~NZRGdHw+)7um*Xu8ew@D zy$4r4W0WaMy?PL#s{YZT=Ec#DX%QNSaU}HB4plu|f-a>-?nop;{~ks{*^|K6sl2Xt zYbLY62p+)>@)0g{8kh_=Z%|ybwnZg>gu~QuW_fv=u5z^T5e`7+Bc=SzympWzF$2ZD z=Ny5$!hF$>@YSoP*{Jw4KW|!l3AmR$&7fnNW3^6KKuB7rtAu9!J|v({jKu==H1z1z z1moMhFzKafKEI30cofzRq0JSJI{D=6TQ_lw{IW8ucD}sj<16*`48FGD798$k0t*T5 zUUQME6phJva zZKp#kL`Qx-K}YE4Qim=O_-`h_kE=aL9b(3d3C-%zrhM_LSCehs-y>hf7k?hFiJ!eP zal_*qAg$I@J5RmR%^b()o%}0NbB=K(8qa$l7OECJVNYsldQm#ZXy{AbiBvsO4yBp|7^ zWdzCkpr;8<3x>*zFKu`YX-(LJMJGx&VaW=%_}Qe}yEZSIML_rv^BSK^ReD&j=t619Jr~2ojhdkOrm#HW+-vyhW1f4qu{iieju5AZ5Lj2xu!<6lumc|ApOJF=hH(Fnb zC$HQqEOJEN&OYGx4{a7f&`C#Irtq75x40YkpUontv@@bF_ub z&jNElIQlH>?#bQo%l82Y(TZOOb~)c!7(5miSZX9ZCotRKfB1s3TX`CO55)f~@PB0$ z{){IMT$fD5#uJCAt8zNwXF3(=svN_2_6AXjuF64tPaL$a${u__JB71Ljh~agbKDp| zH+>KBu3dt2Yt-$(Tl?#g?}2|2a>)1_e}s`3`!oI|1IkV)1sYEyvLU=1BB~vObr|$) zE(U6_QT#fjH2#2GrUF@lOB@T(JIXYpP>k+D=H-Oo?yDd-X9zo&?j&npe0)Np*&n%8 z+Nu605O-!v>N-rnhpCCp(=p}CivLnue5NM&f$aa?A^5WJXd|blKrxe|tj?4TrX}Xi zloyC6>HH(}-FhH46QIbd%L^z7j9`?ge0$fcQ$jMq*HuCZ?UFi}3e;c|*oYGbV;Z!j znLLq7GI~QXtbWr3er-a%rnRY8Xoi4$cZ!?DSNdzih&dd2rCl^11^zcx4wPnA4##X- z4*b&aByu1%Bg_7Y)Y@XF`-@fgIi|1Zurm>o9!&y8bprPYy!@=y!7TK5C<5>T4Xj^7qqAx<~t7vj;y*FdM=39`{ z#PyIN$Ku$%ZQ+Tj9&4XJG1ZggPfYjNx7*T3A65~K-PabrEP;QgE&Qwm{@u3lWN4X$ z|77Txg#TnHnS}pjXldm?^^CMLHj3?_wRsiQ;JYK*n+XY;mwmpCTuMY0to}v zmY~$Bkb>;q>CK4_`8ecUN1wH8J^g|(I*+6tw|6c~1qG}Myz)pxAl85L6qk8SWE6i7 zEg63we@dZj!|RGZMhMvp#e{)*+}<5y7f!_c6U>W++54GKR=x4@X*^>GI(`tp(QGnY z(3S6jF8#QCa*xK3*7t%2cXaFp8tIpeHI6_S*EqqV*>jO0I{40sr-Lt`!Y@jTSy%?p zkLI96yL~Gx^BOE^r(dJpOtlNRzFi%9@@a1t&l+p;&#~dFcwgm9~#s)GMGzv&{ynAK=X#HN~UJn6)=+tFV z-+oOpjC%rZ)=|oS5%T}3DSzS%OjId4Q}eJ4Nq6 z5_;y<36Pj&ag<{0;g$NlXa@)_{vlh{=^gvo9?0@%^5IM0@?DUaRa6&Z_Cb{Ir=enj zp6aza%5V43R{T}y=ped;yujz3j>7fcX&VI#o$kQh(>S}dfURhwbQw&y$pBd4TWrO2 zv%?~d_jK`I|5919tr8=sZQo_~11J9xcu@T(DxxKOx$4xN@Uj!x$jR4Lbqvp8y8AHY zgrx#}b{F8Z`K(np6C-ido_#~%A_&oDKv_DegA5-#J(ZpsfVrY6Kwg}s}`T2J_daEH! zM-Th6mqEi8?#?tEE5Nf%6yimAk|U%pm5#8aCIg46IB82ruaU3kf~oisu+UrZ{GKq! z+nMD8o`Jq-Pq4?8(y*r(9n1=};d1m8oO}aXi534BnJTg3Wz$oRKa4ymTnan|APArw zU&lJz0`03bQ*S5U@PWLrr_)XlIj8FF0#{uYuZcOf+puRLJzb8$a{LhhCY1UyBxXwG z>m;Re{?glxQoBL>|D)|o;H0XK^)I*g*`S$WW?;a92-q4y#BIQhMNkw$0TI`67#bKE z=3@7-wvEKNM5AVNNidoOV~oZuFENQRQIlviiwjv?l1MhQo5aMI#F#ww|9w^G+@-q* zNdE8XkLi2QsZ*y;Rh>FjXS;-}T`P04O{Ug>FWAh5O>5-vU%8N-Y93C$e1m)$PQHu) z4@P(!QCO+Ty5?1>8Hu++Vjk&n>q>Jo=x8<&iEK6yjcL82$~G$QUZqqHYE1Rs)g9w$wn)ve{P4SgW7I{T3d=&sZ7za13k*?h&f$GqU;T71Rd<{WtvN z7T`}^llFo7gnT(NB_{ZdVYz476IzY<8#R-XW?1omcv_(sf;Ys*S9qwnX|bm zFNMFjpd1^Tld|QS-LHfx%(%W`VxPlb!g~(&SiBf3FvysU=aDgZIo`EE+L8NI9ehaf zhsY`R5PupQoV}az)arc(f4v8om`PiFV~HY+Oe_xg@x z(F5^#8Y?~C!t1HW2ED@xNXPCQDbbDb(RI{Br&5B2YbYK@#>otO!uxSZ80x{r4Zm>- z{7k4I#ZLKR8_Y-QsEUD)GRip*?)8ame@h*mX9O7;R;C}Xt#gtRGiju!<1`>n7jkasL-Gn)4Qxo< z(ASv3mYVU*!R`K;b9Oc-Kp(EcCJW7h75h=*3=7KI;P)Nb0pXy$BErV7xUwIm;dSg( z|M>;lIXyySk)Vj6corLt-T^K&Ct36$5&+kMF&K->2a-F;q!529Q9NZ@j;SP2Z%AoQ zrBOvT)ry4N9@KBqa&5N>7$I>kF4|<>%WvO8ebA0Y?atGHK1Fn`b41Jbp8%&`dl)(> zc_cB$JI6<}HQe@osy0dF&d9b2S+jbWDX#dW~$gzSL-6i_-#KTFCZw&cc@e+(pne3@IQKjwBd6-a-CFJm&l} zZHR3`a;&8O+)p*|J5Y)_xfg+H28UX`L_{O{UnqKCD}@`$(Sqt1KB{_@a+2*xl@mBI z@5PF&4rU=B2JT<_S&D0n;1XZf_gZDdk5xFhXr(U{+g8k=pm>E3Kg?lVdIovaTIYux zYL{E(TNT(;iu1`L+PL6MU^VAG=tIg$5aZxu2j9of7>o%*+r6-k?xYg9i;sR!YL1ur zl#T26PoYrQmd=72flnm25zYjQ?KG!<};=+LnHO0Zmg?vsI+fc`hQH^rW?*j4yaa|~O zN))~x#5(50SyQq#Hy79|;?1#gKVA1ea7-$_i4NDcqRb!d1a(a*WwtnXI_@;2TX#Qe z`^v5~l(O)95Q0NvA_8X`L~tol;w;_$Hdzm;p4$Tkk`7b25cE3MIUE z;|2S1`SEs~i<^&jIJSO|LcwH=nTizy*qq1|MxtQn{J@oHlfExQUN(W@&bxs);q9AI zhh|u8V8uXT0788kPNWV3G6I5Lj)@GxGLSe9_vKC^edY!Pd@%vHZsIjl{1tkRccU~b zyhj#u3?0)JJJ=-STueE{3$sZ2>VS0bohVdC^G_YCm)RhmOgROuhJ(A46)l{^R-6{y!fUBq{O@{$RgZtoUp^Yz}!Hb zs$7!XZ$OV^83EUYoOk$9-fzH- z=7ug9U?J{WQ5EIu|;9N#z- zuTkeHLLDSR+*}f8K(}Y%XH?QDINOPSG^rg!YCD8l>olJfMlk{?Dk-jwf^?4!BQjJ( zvGZqlL`>(mquUdov@)!Bu#D>5L3}#V7L%ziEdQK? zbSF`m1k&MGbD3&VJv>A{q|~dP1EUl4YiU)3L6Y|V2(}}DX7kc9nVk#uCfgp|ITq1e zZDU-{PQsmM%sZSoKFf*xp(_qN-*wS1Ug|B z(S%vZ#zNW~$#amy4~ZZIei?twfn<)|dJGuTz_xtoWG}ySW!u~2d=${1V_o4IE@usL z(HAytON5ZS0Cnl2X^on3Pfa6d4kn-&d~nQLI4FmCJ1AgK5DOhx2!WBvu(N`UAHY4@ z4X4L01fqq!ZK2~#GdbIo2vvTjrFopwi!tW`k+1h>v|G6XkJN!eFF>9Ky9hUgUE<5s z2zo(uq~vgvjO+5Y_ZOhmpcwpKPHrfIKyVgnn4ci~S+nG;)?>gE5arXC^zKhT1+Qrj2>YIScFx=&@_IbX16bb^sG1PaAAu z=>69q@ez>dujFZ;%EpZd!m&e@zu9@mDLylj)>ECiG!f<3@(KVjy zrp9zF#Tx=!Su$lG$1_@8SGWuYR~AQ=DN+<&4zVEn8OkSeOMw7flPsCsf}ylG5e5yD z?1HR>+3~Z(IT}{tC!||-yYt9;oDhBmZM8P=_o&3!Kun~2|BWoTq;X!z@czvW!KVK$U#EcqZ^nZo?`gXE!jTQH}KTNR+ciVWe>VjBXhrhLD2&DlNN}1wLLN;PStEOOx z`Ma30NY)x?Lkn9f7d^A|CV3yrtpeg;goGWMP3FjHj@>)#kk{tD3hp+fWv4T&gp9W7 z)}4cdXv}#3K(1a)0R$)yb0j*zGiThU6!UH-tHnlj;C@&3{&!z1$9Gng?pO9G>tlu2-)5EG{{}cr(BH^#RsW!a`Q2z2 zI;7uMcBQ<}KwBHqeuowZ3X|tw1dg=C0pe+;ZKNS~9qUfISGaI8T5R?b!Y#t}3s_IS zA0}^`TjI{kv|2Ye)_G*hzG=~w%yI?=-4g%$RDoceviieNm9;g>)juGca5((~wqU-1 zcO|soxs$wd#c<~i2A8cjW?|@9O;8xRdp28eTpXIAzvD>L_jbGvBdzlIRA_T4w%KBT z=Oh`)Cd=Avxq(TEawC2;ep~Kx-%xH1g^jtAa+Bm(deibfkpqR66480{z*QV3CLVAD ztDP{`_)k-~$^o_;cQM&H4sIL^tXP2q!<@Cpup|rIKXE$8CC_zBq(dQqlT|BDdSD8` zGy_n54+Z)8DnJhr`eJqrps$U=?Wg#OZG<|xA$2l-_#?>E3e!?;j%VDUL?)X-xGU{V z%ioIZD$ElNCY+v|#34*F!Tt81{Icp@47~aXO*Sy9vW3YBi`w){U&sEn~e6 zagUP~-ZuzNhxt^dHd;({I2&`PnM|dt?Rv}>xy?=4CXB~APFUEjIyj* zSVrg7mDHR^2<+OHDUZ;ddEl9>-#IaEwj7}=lEbqjb~eMF8IEO%2UK+lj_e4Go+Gj& zva**Ej^A#lI1DXr9*KdqxtT~NQ3%+1xwE;&$&SooFJ(I0l5NS&1_BS?Z--0gV`*mp z0G6j^7jW|^9|_3{Bk^Laq%}KA@EOw5x*fPB+Zx>uY-zOEzfg>`beoU;nK1Si4RKd6 ztwj|X&DRij=GmdtV1LEzP%7^tlW=(ETSKY5K}=IeAyo$}V80293K{7j2kt{Eh?{5O z4_l`DTH7t>Tfn&XY)00*?3UuuE_gXwHpe>fFpfaF=nmzPXbOg1_iwJISE& zWXJf>KH~|lc~zR;f;ZV`{1)A3e4wS~Km!J9CInJ5j8KHx1C8WZL$KX=B5Me?8&9$| zOw#SflWh%?4H#;eSfd8nbUfLz+IE6Y)7%4~5A2GWnAgLu>>{A$^nY#<-{2R1n32js zZuX$u6v1aNg?=fQ{T{P_lCwovhlEWQvW1-?;;Cc9$1bh$vN#KTedxy&kj!~k@ zzWZZ*D41Qqoy+{Hd8~G4GBo#m<^?f|1YmW6lPT}@F%7^lE1lfMrAS?KM1-tMICS@n zD-9pARaX$PHM7m`^^MDSf_1S#T}jSQg(FQ&bp%n`E?m!*3}`C+3Zq>%snKH!GdiKV zs=}doTQHW$suJjs$f_APpOD;mkRQxIW0M9~uS4rJ3S8~WH%~j**$9EGCf~Fzb(M!r z!B!IkC+mj*nGk?9gj&ilIVBCP44yS;ZN^t6{IG>AEW8Tdgu}r^n~qCj{#wNtR!6Xj z%2-p&z)I13Vp2W!F5Gdyn0`fzGX$z{v>2L;8 z&GoTtx&;xxP7JUG#(UWTqDj02=s}1d%Vt`zfjt11E@s!jhK|(*xSL)(|J zfoygqTXKiN$m|#a6A-C-?EhZX@Sp8zYf~FH9t5=&&H@8FTXI_<#2ws=zZ;7~N^Bv| zto9cFDuCVZuvsKM1*5y8xn_w#X+kC1c3)FfyamM%K`PYnc0Znsmq#HP!DB0bV&yje z;2PR?{MxlZz2jjc?TA|0GYIh%n8piKxG~~_!thqu7{A!DMT}u zdW-WaLbtNe7AxH4=VLSI-UBh5x@0VaGkt3@yzVO!!=+98j>OgjNU{DKkr-|!6+(1g zo1r?qG831@OF4D?ARS$0QmnW6mm$IHfKWe=+=Fawy5iovqW5P3|%yH6!as zHfW62sEgEkw}=i-;0x!(fa+-);U*`p@zM+Ago&53S$~cU;9o`#T&zqsJ96a6W<}hR z9f{5Q^*oS(Y_}O6Ki(Vp&dGK}Hw}14(6ZwC&oRFZr}tW!pG(v6%C@xXD~p-k{`K%x zfzSYqWPF5I)?)w~5F`Mr0YDY<%1R7CYjb0E6qcddFeloS&3YN}@d9tz#CbDE!F|j& z1p`^|)vysRPLzbB+KfiE?J?O?0cJ1+A~RwzfLw^ow(GVTm6vQO~d*fM76df~YJ)!R!GVZ~}4x`$A`+DmJkC zhY764Gq9S6ev=)~z-oe%oe+vVuLXIQz6lzAhKU3$kGtBKYl4QLZwZH>p~y>tYc(j0 zT3TfSGE>3?WF*ZTeuch9Nt5Wbg0vt+eG5uTbZkkJ5Otzeyotz`IJ5?@HAh7gB~409 ztcqO6n^5jvVQ@q9Br+JTfs>s?24lEYaZlFhHJ}+$ou(-}b9j>wHm4!%!Is*C4Hy`C zP^D&sk%p<&^z6Y(txthOw*du*kb)q@eXFJ5ts3GUYAHC>fPsQTswoJNMk$cU_t477 zcamY(PrxpAWqb_6M856e$Ty>r?-VyX#gBZa3>EoK2}iy*?(KsnZ^8)tQ~aZ^!TO8+=6U56+zgz*#PJY0(JmR*SK&8fFM)VJ1suf-abXv} ztWw5?hqx0vptA+ngW=#vvRDU;oh&g~%#2r$ck_`G1WUM+lpL)xcO}}T)f~yp!VfVd8*0u1 zH-sdh2|trdxkmiaZzN*}K=}MVs>yTe3Oi2Q-f$K5L4x`R$Jn)?!uT$~7Qr^b$ELT- zhl?EzSY1LY>=?QjR@A9e&8aTd#jne#zt}u&l(PZt|DyPL_S68@1_*#fA6BnNt#WJd zh>DS?i(K_xGsrj%A6@SZf#lx^4E$rDc^B9mlfRM7e@GoHqll?#fId@D@oxnB+mgwh zMh&{*NHz^}Jal-*kUKhZms1Y|3U6Vi-8U$!IkMfTYcrCSDy?`K;q)4Ho@3>y6Yjdf zj7J4R_}_qgH}f&MFTZdCv*`$-5EuBuX=)d%JRx#~asEbzaE$Ra;lGSkkr;q6MI8`5 z!u+beE_HGT*EdvlrwG^hx02|MKoFDhtihF^MzDgrD8sZt3bKVkHa^Ii&C`GiXPv-S zJ^oXZA)`^Oio*|Av~h|9Q|UZOI)k9DlY=nStd5t1A=|znoJSxB(!!Hd06~|sAZF)7 z6-WqW<>ZY{>EN`0KYt<{BFvmlc#A-2p9F3u@uzyY^FciF@H|1v_-|&K!5pm%CRZxU z--sSsv;17lZ+JXnTeWyz3unU2T?kG0SL5`qMmMP1AW;ibGK}d@)tEGb!t`-uOGXtY zi5ab~K1(@Q%ymj!x*b$OTWDHT_Z#KzAZifCb{RY36=R3SQi*s=#QTQM!u;K(&% zDSM4rI@UR@JNIrBu*>UfcKZhs5vE;gbPETQsv#(~Je@r*`( z$*T#;axx)<#AK$$8;%56+vwMpznkb9ykO?e8%bc!BkP#s-|^LqJCZnP zzodM6+VBbE6BzY*GOBH+WmK$lM0e*1tlY;s$9H#*$AFJdu@swu8AnHSq+g6;p^={3 zWM@##^gcEW&Pb_`dJvxbGk2Cz zVnx`ox*Zg*uP-Bj<<^d0YlC)S)C!- zw>D!MQaPD(BV;~<;?qmX<9d?sW~Rb+3dl`(QFq7RO=tCbxbp;nUKKj!bYfioM#hMH z1^M}?UsaneLv0rz0ZYI9sWq}}0uVRHokwUHS-4F^#uYw9YB)6vGIOMP6W9@ejWP}U z)M3r5ho7C?Pr(ekcRB5lxvy*67}tS+{He#uY99Te8>vjju~$Hn+Nnf}-|&s0H^6ydn`81f((jF(2i_gfm}VZCZs3Q6rTmgZlz@-Vv;nd3duedbqj9j>j_Mmz=!pFYVrMO^9~vc zY0pFc9BZt6AQEvQ+(iB)%9HqmIo8SYn`J~V&lO81RD?Gk6Ylzy4*)WN%^fvh!wb3 zFSLWO4Jt8s8%%$l%bNk{ES0f_6GwO877@3^mlTd=<$$ja8`kX2@X*X(xUmAa*@Z69 z6LgQGTzRTg@7>9or{EckP(CE&{KgpN9chhu?I5D9H8&bRwuK5Cm+vo*Ranv=_;!|q zvXKS14`SH@mkWLj)hXo;HU??hU6O{zpbHxsGS2;Y?F?ur(DCuckN~$p*F{)X?-uA} z$#Vk^{I{JmFNSj1%Hy=*-@*7Nx3Gz9a7Gmsp|fL(SEZFIzC%-TLCQNdr4=cKxsZGE zx-WuTxpqijzuT6LVU_w+JM&6I4dbdPK=p!uA6wu{hL6$CbV+J!_#JMX2&y?zP9o&gwyE5`Y zQZ$sh>7UgF7x{v9Gp!HKSx2KXJ9hx31sSptIAxaW#5*RPG$HqKVmED0IkQm7 zF+rPUbEHHEa>ZomHkk$hI)$cVVJ^l4-!=%7_+#e!N#&v9!yPTOeatraz@XarzOy%c zQ^l02SyKFQxn-V|xTDI5+T(6Zc_x2gpeRb1p2PVXD^KT7qI?8@V91Y@-$eN+`AwEF z{?aO_z6`+Wz-CO`mzc_ZT6pg^CCf((2z2_chUnuH%HO3T@yx=LKIy z`^Apq&@T?+Lc*UMv(&DfZmu{q&ekd7V?m_XwbE6hC}CxeSeaJS)GnBwz5 zzmdG0^v3KJa;T3=i#n)uD)ij9sroVRN&INK+`CcVCEioa3Ld3YW@%>;p3foPxXkwj z7Ur{l?Lp})i|OS;IR1NQ|}sn%-yo`RYc4*{ZpYVWOh5 zqzyfd&gjX(ebrQv^}xIPtCq#Vo`sJApP8)6t%6szgWNy?^78~&eaGiT=XH!g`;2Lg zm5;B{K2O`ntVsJP_sO8+63LI{eoCBfiEuIF4Yb5P@c~SP6X@qulpBnci|2k;T^={# z)hdtMD^Py(-pbQ8stcWG2PV2YwyUWAWyHpA+Z!G_U3E#`FHoa=O7y-QDR0_OM-1P8 z1p~s>n*KS;c?|ULV7ZugD0E=PSiHx)DR?x8p{L?eI-iaIW8PuRrOnbZuua-K&An*J z8PHqgJqeNLeu3&W7xT~4Sdi8;<{i#Q^fV`}$f0fQuTJ3{*r?D=(YhYsUn}i{JzWdT z=oaUc*gvn7cA;;ff41-Iq_uyJat=9B?~?Aoex`o` z^R=vZ`w37#v(0|{iFkIs>1eYWa%}X0?@S2YUT*-706=}$mu#NhYhP8IA-)qXv*$`A zxVztLO=hciBv1{0oE^H=zessHfI^c#M*(E}Y|?PFPnbr*jrytfs(GESYn>VI7!+_a z^?RrUrX6-8C}R(?TcJ#7{ABQIlQ97if(@JpuapV+_N6xmScLIL;8q(LV1D?iYrZw%Ih?L2WKQ^FHWNhFa zn&h5|i$wleXU3^IPIRE(b6mb%+d`K4AA@j9WOse^s}8;n4R;#H+WFUEa<1wlii4cZ z&0;&G-lXrFQOEBH!OSL1vT)0Z2yfv9u>Tq2aUG$w!N0=K@JwmFt0t|~iT$Vb9>qba z4@v92A((%kR{cKBXKK(I(}vPxbaQ`&vN!CZi{s}0CeQ5W{zo*@>^mZ};m*V(l;0ib z6AJ)zUk%(UGhclq%yr$i+~0v(dJpuGQf-JzmDTw59Ckvqp8IRoLw;A*)2j6_3-$14 zf9l~kp|3;zUy*uZxmQ7JT})Kp&HV*0T{IbP?oW8Ex9P70=`Z6ESLLvOgR>ZhCIH;Y z&4GF)N2k5H_~oR3D%Iwl#OH+G2CD#V-aMP%=FQh^7RSX6Y73IGPyP|oRy-N`7_gPJ z5>1DaR-#eyPC+hiO%*MEi;(aKQpUrS&}$JzGF@B%DDPB)LdeiqlZPa4k zLZss+GpFlh#brng;o26)#q0tyutJD zFr;E555D&}8RpJg!iv*+;U4sJ%ApGCe* zkIVGC)*dTd!c>{#JyXFx;wRXKDX&JzS`piTSq{?bmPnY+awv6fiKN&R(&Ls`xlJJj zZi!r!-2^t7B)BD3@0|;c0D98kmRP^0ME$v6XkTXSR#d`!nRjBUk-MF@`=!E@wrY5$ zR>1#S;aPn(JX0&+f2;6pKs7v5efXG+_rE86(0A!SIEAUhZRb^<`CVIQ0Ob^~ND`)s zJdNr0aiBK39Fu#I|Dd!G!pFc0^hV5j`3i#(%6Z_m4Ur9wB)|RSyd2<|!6?qaAFHk% z42}kyk+xc1|3%AE#*uuH4O4wyxXy5Nh5r`#ST3i?VVF2{VU6&w_=#*=FaGC&8V+^4GSOI9-3~&tBMi#@J`|$dz@{F|%lT%Af5u zP#m*Ocbo^P6?F>1CPyHckb~t;S_rl}0>K1xb%5Zwlnu|F59KjME@i7sLdBd*y+cm_ zQ)O(&D%04@NTF;iFkQiDm4E#ILITJ)pD?R|Hi&=1!jRA${xs;7{%+bk3fZ{ppFb6x zm1S_*7ow=-g1#rBYtS9ISGEj)f8>M(x>a0T-}7D{v@0R8Bk-}$)qMGzrRaWyzU!t-pxRrWgRkJ7g)ZPtS!!*nB}Yu_+ENy8-N#4tfb^2Lv8 zOCusWj3R1^i&xPUK1m3C2Z1Vlx&X%;R$LFMVTVd93=r;QPq#5u&*hmLdi~`@ny3aR zr9Ce^0jq6IiH$m0c#>;F<T5E(@^aOA5k!1_4<&GNChcQM-O$Gf~c zih8kF=ui-ET}Z)@r}XNbU1tVxUVjLTFf&aZUQufZms=Vtx4NR7y$|fH5X_n(V9pM~ ztQ`X8oDfXk5HRP3VAc--b3q7ZU_}PxFZ(k{@o*iW+#=X*p&^${k|&27r3iP4%zWEBv{Y z@X~&!`Z2G0$g_MMRC-t{!k?*_n^w80j!kt(SG>1ZypN5%FLAeD z0G!(|#Gl-SzDfwMSG!{jEOeq90MLnx@Iyrk%VLw#Mu-S)mi8^0&!Un1nH@V=cjxdO ztX<`Ms@oCN*@NT?xo=Zk%!%My&8^Q{NPkRC8D6*Y)zE79(%4_fhBjJc107R)?boH> zRJc^?%3TgLk-E6tg3-@~nE@#2Lj zSZ2Cg;$L5*ERVJP+q8V|5apTfmiV`-yv|WwQKNo(*sa&^0TFhNiUfGwAjrp}a#kEy z*Px*q2Z^Z0aUmE*-XI17`pNjt!4-H@orSG5Oq4vsH{IKFE$VcOJ>*dz+nA&C2fAbY z;shNi`Qn6|Zp&Roe9>=9yr}p&jR6C z*jt612w#@F#XJeSI82z)H`d8?)VVrZr;gq4)j9>lTf;iVllRZXKqpO0t=)^s`KTMU z+&ZB4^@y}$m5WiOTVjrPH+bQb>bLbY0NhfeJlTluQ@jJE$}I2bH<(=9-XRqgKkDb; z103rCfo*^Mv9u*+p85m(hx>4;PB7PF+W}T>@EMFdQNyGL+oUOfz}<-{sn+`#azLKe zJE_ss9A24M9Zfrr0@sIX(4Y%Cq4r@LFWXh_m$q(EdiY}NpE*O)LSV{Ww?rr*RtksS zZP6(|f)EH5Yti3OD^PE=yx%N-&x8z3*;RYCiTfOOfRH=brogYK*(jt=va<^4JRbs! z>SdNpH~%y^n3w}tXzk8vYutmWI!+HE+~Eq4&XT2cmJCa1XaMwH*ZJ&vkhukxXIEs7 z>@CjGE9@QCaq+M37Jj=elj?*asy|quQSGq(EbVZf>Jx!%>g3BmSo@)-;$lpt6)U}{ z27Nm2-9xFjHOQHsq%b_Rvt!C*n1>`F_U;)zU4yqz@0CxZu;3`1(kV<`YityQ5zAN# zz<~@Ar|hlYy2J=}JuQ=pkp)J}E`ND(l!;a%`$Z-?$97wu4VP~?d_m~M9Fa~FaUl-7 zuD$C;(Yr3d8#*2tSP5|hASOFqSQKD?&E14od@>;A-Gv8Hvj%-mYo|%2y^j-Tw9l$d zY{tA0_2B`LNi27>07|!@WfgD7@?8#%#N;s3OTntUm2F)7rH8dmCvszyrCvXn$wO;q zE{8h17PfAiwHqA{Hg!5*6B^Xih!P%x#IPyz6$Gd-vu^XWH(4gp3SxT`JDBO;+E3Zj zEeFmKy>z<1DLAArMidbEMXyXhC0|>Vm$vINN$W6%(4yQJ&?WWOcb(0YR8+%l1u7>s zdq!ANO4Fla(;8&3(*pRog>P+cH}lR1IK^WT!*5eth$qzjDEV5kx0pT|^B${_7se5O zwtn0c6PJz_xbct2QxI!>MGh6WlZjSMD z^xXA}QeW{(ioW;`{H>S24aIljnRi9t#Bib&igYyUu)!~401rOCs=OHC>_YKB zk+zuI?upCF9h8$!omAJhVp-C=Mk;W<5`K9Adm6yy05*oG5M>yym9mUEbz>>3IF0>i zq6#_o>s|}w3H^B^u16o5kSya*%pI*{8T|;K58#+F6$JfN==a4a{z#|qk09`xjN#mS zm`#v=is@-1o22;LukKIzxc9X%0_9)Kp?~mCk!{R-2mn!C)BOK2`J^D49|z;H=BW8` z@2epIq+5L@3_c7k^SnZZMG}IUg=be_a_eBlbR_5Chls8p3HXMpsIqL7^VTE9%?;qM z$&C1U;aJr2I7!?UK3_GDza3^#gvXdc-FNx8_nj~T+kUpK;s2yD6Y7i z37J6HSgdd+sLf$?t)gjsKz%=lD(&*z;_@jq}k5|B_^t^O6Ji8-i?Jj}h z;o^w`euAou47Du60JJqiTc|8nz*rX7ni?|wvRGesj;k&!^Bo;rB^;to3`5Qd)#YSP zr$aUiL@QL8DXp`r%Y|qis-4QyIa>C_N*Rn9LIx)d313?V^Q+;7wlVu5gH!fecJDGc zwYsdxV9Y*bu&}zE$Y9JqWU#2Z+f3YT4P9GH4${1{VzpUt0z%tKo&V z_Wh8-s=b!oy9`!WmlYYb??VP_tILTD+V>%Yi>u4+M>|yp{aSWTr3~7Jkio!^@U>;I zp&DLjYugVQ6!uzn?=l#yE-Nx<+lLG`RhJVPwCzI%TdK?LM>|yp+p5dTm^_pWE*%oS zwhXpc!|w-eaoIz#L(7hWessLSBS5}aVf{vhyF7p!vp2Xa0=Ut8gS#q#Yu_8(I|8`2 zy}@0(PdL{(5dOe*gbU&-otRt~3SPx+)cMI%G0E!Y+Q1s@@;C`UW_@suyZtVB+#NZ_ z9l!~fN_-WQ9;-~p8hjP3+<`YTTE2N&*4YSLH;~3$5zbJd#9-vQH{f7_gh8ZWHw^-B zxOR&HXn<}7P{;L{GsRJm>zI6f1Jtt|LLMxDf4yHca^ItG5}uGAPjZ9)b< zT(_B+{dP3toG~Xa-xK8(`wG1vlb%SWDD*#L+$)*Zs6Ur;@)U1l-+J+<`|y zZe-8%gHnoAxUJq2!6*j;-Q3$)4i_9COXnpWXZUbED>EO5$Q0PkH8CszkkS{IGsHWE z*E)@Gkl>casI1wW5hSp6-sP+V^W1y^%M?dO=2bpO90u&|05gwQ1dmtZvA7r{`@LMt z4|l$X8g38D`;$8fq<2Bv@eS9rP!1ct{H&vp>ZtrTLW-kB{@CFa)KK&|N4rcCUq~t5n@xY3izIZMws1twpJ=%%r@l02$IDSI%bKA#JKlhOT~Mli2U& z{v+&4XXxFo-<2KXPgs#Jm20qe@4&zNYv7T)6g`2PXUd;Sk_-ur)m z^Hcu@PRp;))F@-~KFd7U?;56m>fFtJ%-jA~bh_I4U)V?f{gVIps`68d=b&5d;G~fB z<@vBW#jByox%Z1@v3BBAu}1HRWKc(!Fuf^Wye5*Pwx!Zm-69zG(^d&^ZCmvK+hWeH z8e6p$^hazJ6TEBLBVnufVr&)eiR#GdxQFEtX2jdPcM{IpvXKrp<2YYo9d60sRl6v* zXd5y$Jv2DVa924(o&iV;`oA_rlIPR0{5~H8U>)o@$x$0x@84gGS)dWZYOH%hTa%pD?p1;O&A>-a5gb3ZS+($ufE52PWV(Q|w3i!$x_HlbgM z#ZhQ2!b8#Tvm{S>M2X3$sBdJAM)o)1*}ItuILRb0x8McqPZK~auAFUyGc|ZG_|=Rr z)d(X9g!QQR<7YAexND<6grZ21oT>d~|Ln67?zy z+(^M^xRn2R5anzRUbDuz>5pJ%OX^W$zUH333i3kP>XDz+Wd=2Xm#*J#T1% zZ$cu7g(&FlasP#wyGeNH?9`hFI)`f=DUl1cldQoWE~^4jsxnu z*niL(F4&_P!|{V=Q1*nukKc}|#oHl>9qiCDcAemEzZB2LVOM+3?^LM+ukUkkZ;b#| z#6Gp-p%KorsP8ALC->r1v3^p?&`z(x*P@=Z5jCbWjYQI*9nB>WeB= z5vD-R7od3L$NH+x@g!~<_C5^MY8TPVs3HdY+fiiQn_I55$~9QSEP8PfKnWhzM_ukUL{qrK+50$) z91euoQ^h`jq`Q%%tN%bv+IZ`8?sF*X-GeMaOiPU0b8o9YWooX1&iWg|K-VWwEG7O) z?mnO?ehYt^;S+fGvi48nPotO-L-6NGaEc?s*8m9n&+_;YT0eznHqB7*#C}i!L|+A> zr1v=f0&R0z7@Vas);llW>a2gi?oV?OyPhy+n2euXPojlkENM%g|}n;OIJd2#`-3ttb4KPi__%%OUjq7fX-Q!5PwD1 z#hB{%9ff~g;jgR-&(sR|Hx>TsN_boUutw;dTe_+;zhhcTMu`~ngTBf^!6^g_^l0uw zV0bL|88E>6FZ{`U7JusZ(2JPN%a&LGmXz}ZG|A(-u*ni4+2$5M2f#8bc17pQq|xls z(RnHKzxx1#a{A8x_j!|`{ifcz2)Rkp2=D0&$gAt3G)FqQFXE-%iKVF*28ILFV|`$2d|-CSU(m%3x#15!6l zSYZB{Ct7msLjVK6L?xa@wtScfExx3j@oN@%>8RM| z{S~w>h#s{sB*d2*MYx#O>zeK;EU4NalaNhp?E)VcQ&BfW0pkCKi``JrmAgbiF2!~O zNIO=(nXmEkE&NH8-_M`c@=pD^6+b@TEMGdL9VM2Fv|IWbQ!Dz;IE7~g)$mNMfbUdz zQc?}i)C%|s3jeX1@Ju!Eynk&iW`k88Mm_8H@R<{mQS>6HAYS}ZjLY9YHnm>ZPeabQd zq%@CHnwe9JW~T3p=A)EmcA09LnOdQ*$0$7eRy90RE8y`34vsA!tO?K53ix9c{FjXmxM4rD50p&=3Jq8m21^%&A2K)AvQg zJWIpv`$IznNNIRO`yg{_(ZKY5(XhbMaOeKe5CKvejBR30EgG0U6b<3My&nf028Fwc z2I^wwe$;n5U1%&3B%;5z4=>hymaWLIcisV9XKMZ@knd}oIN2DCn26!$9{f06%K?n@ zd4B|3<&!Hn^x@+Lga{`!q|&<3mz2ABIieB7>B1BV_QKkTMK=VuDP|7P4{`hz8*J%5 zE1;`_Zf*D3norsy`S3>{1~S2QduV?&B1-b`GyF-E|BFAk7XP#Ojn;dP;w5+luZ*Wm zt?1w9DLnC3!!xx4{sM(30TFoH?rzN|VUc{PpQ%2+j57;N?IFB|!w({?)rA~fGJy*= zA*t&y&FSK^Y;K99>`Jz~xql!T7f^6XCmbVk4s#LktqR)X&4Ytdm+YM6mPoF=_No$xdnMj ze_C2mabeLG$tHnmA+sWz@uXWKxz|kqCF$U?0&toD`prlOEvf*FOixK)girrfDsb4R z|C&iqUotM=D_e)QTa~N~KVFCM%y($o%3lPz=sI7*4?BDq$NIhCIO=2{N2|qge*}m2 z9ZzMs$r665#?yn%TMm5hRJbt`Q0qEBTKVf`ocQHOPgS{H@65RJmIs6JqkWB0H)EMn*Ab z3QBF4_SLwfO?IoqHewCg&85-$po^ID^-ed+zfH;qbZbY{3&}`s*H7P81g}qvak64S{K2*ufy)i)GBr`Fd^CMJwj6$Xr850%igMGi8oS~ z2}75S%RS_`SJYc6c*{e~J31e(sAnkHg@D~f*uWiKuu^G9_&&X_Au$-Av@d*8>tU8p zq_#otLin`ie;xV0zexsbAYW#>TjJjeI^fqm4ibfiuy6bb3&hKh;>Xv^8u{M{=i71a zvq}q5RM4tzxli+nyJr3uG@rO5`8S)noyU>kcct7nL4NUD_)~ri>6UNjLRt78!`6W* zFkarb0f9{NESxvBB9HcidVRmrASecLSbmuI9U$<@sj_`xJ=~vXYo{Iv>hYck)nN6L z-p^MEQ>A}#nMZplC?69#M>^hFxOldbz}L0Rvq8g+C2?-7L|%l*cOY5PV^ z+7e@8DJ4~jub3XUNoe45PV|Xu|)mh-8!4OI3)h{Xlv69ia3)ep>z+VHR?5Xv@^WeTeKI&sM<3iqA%XMd#ey60}HZ zMl|{yAaduhjln!MWi+jGwjx{&}sBAl}{-ZyA2ofKaaW^@D=ZNxxim;rYYQnu_jbPj))a+LfLKU)}6`X4^f2oqo><; zdOyN*@yAR^h`)o|`<2J!74_|>LXUSksjwbVWk2J$n2rJL&j|~;z5sl6d+7hxJHm{@ ztW!ekv98?_m`N3HCROCRu7wP98k?NSkkK&iGvMm`uYt3ru2_JW>Qk}uKghb=*(l|t z-14jBpqrG>!=~Oy7AeaC{4tc4DPdy^iElpe{Z8=>8hrl*L@HkXR|M^AQM4O}Kx_J~ z()kC)yUE~vJ%aFmq6jw+fv}RVqQkSe5qnDlnVhPWmmWN1GZsnMe z?{L0C95K0Ve*5d!Zm1)_jAzJd6;b4;hrL+ zUGq_czilFEx+#3`;0jb@f3?3i5bys|f5#jM?LJ7cF{6&HS=J$%8S{2PDza+nTO!*| zJ=@((SgsM`%h=Wi1om9NfisFQbRA6$1h=Uh(Dhvns5(}>P@c&VbFbO+<$BJLzzmvmJGW%>DPM^toSv+FN3l_e;QuA+O*K_bZ-SwO>*F(@vI;71;{El;TfFTsDFEYIlwW z4%G~?J8V*Iof}Gy6N#&^259ysN2P1B(sfBSUAku^$9#;lTSEY(d$rY}Sndjn3m|Xj zZ@@Rje~6SX{Sb|)Xt(Acs`)<}Du1fx|F|+g>U%0KY&(+Wq9*`4R)-M;Q_;# zd=8s5RuJdNmZC;1OZ*1l&GA-P;cHMoKPdM;Y}855;C`5Fvh#e|#)1cM4JKXM-s*GU zBq6y(8P1egG*^b&`Pta90|sSeA5fV>R}HO%Q+eB*wJ@fOM+`g zFfe8LNmYKpc498pCEeT50|uNPT@Q3`46FjZK2&eI`;s>4S>G@ zK%q7h%HZ5yn0p$&=t4K4a2lT|O|ii{$ZX^1tKS0+qkp!=_&skTKk(1qz+1>a+qxIO z$NFb;72h_4Zy*r6T?3+2rK0mMgjP}*49!efm_fMSEZbh>(7-XzevgZ zf>EC8y*QUie!NHxumH>t&kw!?vw``cKj4Sm#>iE5DZN@~_s0X-HHroHlR=^@6bZ&y@F+{3 zGsa84UqdWZ*_YvGs+G3pR(YlO-CirS#zG&Xk}7c`!7POSfCT>$q}$S#-jv*Ld415< zx{=t$%J#}aX6HC;x8u^w862?@8vI0vt@e&#$OXAo`+aC)x**LBZ>t;H)~CZjaid0sm=|DjO1{|-@X^?+l=M?x@v zt%A|Dt2+o2EDekN!gPk8ZQXZ<@cyj^Ue15s6~OonQQEZLyP03LW}!U!L{N6GJPEIf z{SpEU#!6i`|D@t!R?PbVwZ>W=)%S4Q!p|HpXQBi9x`VAO1SMc4~JE2_v2U=qLvhw($a6L769ID4tjMnby9eZC5$_tOJh-_Qfr@kJ7AunseJQ{*| zZ3vjhLNNcVfC>&-{wcjM0sbY0b`U zkkPY>k3cwMaEJ?AiV4trL4AGKMaUmHEcZ#gG&t#mcPG}a(5LYc=XuECwa=_7?cK!_ z71-UDT%mPODv>;s{#i+90^mtu+PfR@D}-9X4>z!`F*D^RT@=J<*~iiH2&6{tx@dDY zUZ-n;xa+^Q{5xWdm4DBlmhwyZkvRk8wMX*eLEZqTXG}R3aC2y3Qcy_Qu#NmP@&g;0 zkONFVCa+@Nspz}tS%mPgtc7P^lG;Z)aJK0rFldkRRseCd3Y;~ChyEaZ1g&)ybS<>e zY3k53D$6Y%1C6yX|K7du+9q|EHs$9^$6r8j%zHhgyvSpJtyShlE%S<$d1GH?lCU+7 z^DE^K{fW4qNLzzP9R-j`bI&Q|*dQi`aJ0@X{Wq}ZuEgh!Dt#**_kKrw{^>8J)!Mc& z%~OjjA(9=uJi*KxY5A8}zGB?8ef{#>;hL9;*Fsp{K+ZNw@S5{B4mnGaqRsPL>;wa(~lu zTyk_vT#a-~T#Sqqu2pst%D$>)xw`0`%QhEz79@x5QZjx72{Yxo~0D8@5%A z00?ZAj?W3fb7>RHz8UJiENjQKR0zh2RgPCl@%b|Xle-ei>E^D&-{P8%ggf`Z!k0-~=mfFiq8}r0E~+tO70-%Np1A7>e66JA zx-v>yk%$gn8yfwFqY}&q#(>R><4<`6YqjftDQ7Y8W|eN{2;FM2;4KK%lAK`CEOEId zL0RI9_bfzO9*L)_gZSh#+ajeSZE>Y7En26bED=L7i7KumV)9Tamh29TmPdjJAmhbgVJ9WaAT_-=~Z2wVr@9Vd2`uoevcFj5B z&j0!JLC4*4W!<({;_Z{K-TbA`f1&rX+dpyjhWnqpdh6;Vuc~|Y)$0pidhXAY4}0vO zFMj^O&N0jSx6GW}-}~Y8!CRKr?LK17&R<=+bn-bTzx~t6KbEfP`b+)$CSP`W$1)d7 zocQNV#62=gXHN&?oniR@8z+DJk!=rt;F~{w%Z0D}{hN1Obl9;+C!cu#doH@bec;ZX z_+Ov?YVp)NZhhawTb8`~!^x|cZ9MMlxBTXNe|)3<-mx#d_G;V2QD^+@uK#+^=<_zM z`SRjbU%CGmBb#@;KJK>ppPcgE?|pZ9A~R#+6Tg3T;VC^Y|NW4M`@VGW0lV**_4DS3 zvcJCT``HuTd&oU9jQ4 zZy)-^^yR~^oBz3&PJL`w)4?+yapwKJ=fpq#%l*WO=R9-B4cCu+eaeT9>bY_BwqxIS z*pH7{v*V6ym#5o)^FO8MuIyR#+C$HMb@0H0%L{(|;7gzX?b*j&b^4EH{Ht*9&+fVO zPm>Qi^so1focqbu_k8PzsTaP`cFUoz0d!A?%z)N+@tTg;*~3wd}`f=#YdN)ar|k&?O8eJ$6p?I z>2DL`M;-9eJB}az>FFp1A>2ohS`J(Ny$>;nt_TW{I|NgDh+y43bx0ZZ*`rBqb z{NSzgpE>Tl6Mp~bal6{r9r5x7r|xF8&<{?3ZC>f+@yTO;{P7PzcEq;DqelMXr{74=S$gUm>Jk6rjL4?xQ>RTm zYT7Z=xj_imTJ+=ZKM*?|xOA}4H?XG2)Kxnj=iY@#J8P*k;x~@-Uc@{H&gu77BJZQK zhsiww2cCS^f|KxmAKw3P{4nRh?RZ(Twr{|jdb-!UuIMatmd)=g6bGGUOY^g(+p z%sburEgSN^gZWiX_xgOX*s}&n8w%crd||LJUv#>A*XDcINGe-E3v zZ0m-+vti@P{=VM%efj=Xi+a}Q9Z*>uEcEmZ3}Wh3aBP+IK>`;EvB9sn*X!>G%06$v z=^I$shh}z%ig))7tjce32G{0`d1rlJv4|?2-ou^V>CT3p!NGiCz$xU{0HSYTAYV|< zJ9+S^IM`Ddbn=&M?CA$N>o@ci^2aC!z-&6C`dHm+a4)#>RS1nAtJ z{{G@zZzBlz`B4ZlJHMqjzk#$a^OmhGc$=N|`N6f`D$w8yWNCg7uN(3`gFP$z^NR(V z*rm|CE&1M!;P(2S!Cpvs4P;kzyp4lP@~hA2DfFx_0--YBEA*}D8|dj@FtEvkfP_73 z2E0Q4bY((F10K8R3d9*Am@hs3XB50GTb*w32e}X& zOgCEU6`&4KLMwQudsTi=)g+RvFAE^`o`GJ<9~{gVob}$Sjs5why-)#YOn-h2G;JA0 zFt~vEt9yE(TKP@+fk9CZ=n801>b1$C=Oy_K{eUO0H+aQ9khT?%y#fQ=Yw<9b50;gui>!*vJWAOrCX{=bx3q8l#(wsKK;xxz8RCjdH?A!97W!7^ z3q_}I{f7ShdXNlKRQk)j*@5yHHgD_&f#Cl}LPDy21CaR^Qy`>e{XNCOdD8QSXfTz? zIqrlR-Q9D0&<9t|9`FXXuJ<+;wKXRht{%Q0Fh@9>Xfe9Gokd<@J^IBWu)g5T9@y$E zHrghf3BSzQx}irp9ZeDY9`uAZVe6dy+MZ2)(2vS4v3Ov4zR zXLF&C`qAC*tyv;6q}`Dh2zje{IcvZwvNO9M-~(XMru^Aj6b1y!UT&L(x;7Sy z=&L88@2rJ|3L{$rQwsp;%7&=R+FvobL?8RBO{kAXpz45Z;* zbSvD4K)MkKXd^w&nmkNp5A^f&o(-^wMKss%QGBJS{SH4ww-r7^`ZgPCv4!IVh0b5U z4xiuPyypd+T@S0{*9yDs4XhCxpsFd43%xZk)=pn>-uexLTVc`HqbK$CukR_WV@G6X zm(gdv^y`%y`}$R6tMh0ktdO@E?R2CPnokS}Fg&vhg`TbE`3%|-W=X#=iR4`YMwsdS zFunb-%?4qw*5shGtQ~Y#7rgaS|7wnVw)(!}(n08HFN_igt{zqwU{JFwr3AMvwW+UQ zhaacdw=J*b1WpG-u_tPseSwEfjpKK;rTPBVp-#yWH(w|~*k)iEM2f98gqtG|hcXeN z9reXD7oCB8k=AYi1NZcksXTqXLYfF!pUvoH5wGXi&#FT;&=$`zLSo*$^?e+`1+5MO zHn(ThD%Eo+&w6iD-n`6RI&t5Iu*=ymuo)Q1`g-AO4fqa zLW=&=Kz{Q{`PF>`d21FGV!^;_4{}^H0JBpp=GU+6-zwId3bjsMCRpnhKZzuOO1v=Q{%3qQ<7zTasjqRY8gW0>(mjW#qT-qNnQIkpIiPb@>7D*^KC? zhf+-c%`eJtUfS;sTIIk{xvp=6ns(6y8MV~O(ayiMDp{-0-ba2qMJP~Df8RDKJ6Bvq zQSbee+~Me1zVG0Pdu3{-Z6O87z#|VO6rTkPW2K>yTPYw7)$f)d8)ar;9jeRx>uS#HE@^Gsch`klP?d#R_*>-3I z(MIR;tE3}h_*&`CN%Q8sJt$}6{EuX4e)se2I-V-qAMbL2h^wc z6pCwm`sZ-WRF%MBAcHhRA-~^?*iFlEatnv7;$b-e8v%*B?LIGX8dbKkj2Cv_l$HCt@y9bf73`-|rh+E^6B-kyn67x6+O#4^C zgL2M7kK)+2%29z2!XrY|%jPXB^b8dH=uDE6fS9|nIOwf+&Vc^qS1v)=4X%PHP7=VC z9O&QbaNt;yUxNT2z9*e4KakQ_a078WQ28Peoq#fOUIGRDh@)5PT4*Kb==5&p`@77*~ql5Vk7%>=bBbJ3D2^+S$Z_P$SmSTeg9~3R1J#gKNV!`@)1G7@x zI?%fWUTxUT5hf${oV|V}kRn2vpWmDhLczJvv%Xb~HCGRjzSMLSaj8h5V^S6)S}XJ+ zp!M6e^)z&*zM_u5kadtDyjx&9j6=9Wezl~UjwsK5MpXqzELI5NqDR*g9{Rw~pL%`<1DmZD3o&!3d<@5A^Drk_>l z)1>)*h`{|f-+UGY9@Y~~+d#YAS3GL~Za+FO;QNX`;A*_v`k~^8VOGm*9xCT#9-I-* zQ6cI8G5J-eW2V4=#*D#&fyFXCga_!IgBSk5={*D50Ozv#MtUn+bC~FGw|Zh}vKtRZ?>i7WU_-VuWfD z+HJ!OZ$tN-zQN6X#r$kE5^pd~9DZO)`DXGK7x*$C<1fOs4c*HMn9!Umyu zdWo`1lA(vWsNDuCk|nNE(UIr5!K|W;Lk3o-Au*_70#2ez>B|E!>L){^zz>-kT!>I9 z^02s|Q-vWQo1__Nl|C$`D&b9jF|z_0aQN7WKpm;_%eE|DjUh^>0EKHlBv~j>@?c8v z*_4u6igX+~&m~dI0yt65;sN4R=YF2fPvLC8Z#kfEMB)cx)0x32DT5PkM?ryOA`99A%?>X-<6(P0%ovkC~)u z)%DK15*-3Dv#o2@)|j*$S~cLkp2mvhreUQy%i99bvLWW^jHaNpAuQZB^%g9{$Ck6n z3bwM`IB*I(_6ohPAZC{4V83z^Vj>JZCzc!|qVbja)`B4_!0sgqNxs!J5p2syh{e~F z5UyqdHl~v#wCsRkFXGryU8g=6!?{)BE}@ovwG7oM3(B@tRWxJP?nLF4UdkFG=u}2# zO>EJ!TQMW$wn4F;MgI{Qk$m^WqHsHx??iQYm_mcbWDk}z8( zrm6~tn)KF%zQSksaSSMHh#=YYVAL4(CIB^1_ClNJBV;zHgArLL_KFUXB*R_fI*i6fMMy{S%6+Jw|US@tRHX#fK7z2J>gNvsg z*5lN3sERG9!j5DzP>g>bLzRy+ZwaMs66JDbW))rQ3I@eXhteY5IuzLK(6mv*!rGNk zcJ=;H*o`=)*7qWtT3NU-tPGDiSk9%cUyz zrour}T?fA9=~k?flZEi0R`N8JOG6H4%f|plR27&L*<@!~UT(Ve(Bd+J3puMr?F5`1 z*gTBD6xv`Q$h&eySNqyL_5Q8e`OvwuXAc+mZ_%1^j~2(46YLS7X$*n_-cfAT4d?PB zK!17|i^pY6te<0>XqM`w1;S_%tVSA*QQVB9(u^lA>MZZ`S{vGXx>N#>R@}) zLNq54;u)uA&U=wo0@tCNpNlkMXU330KZdvDsL|zUBx7=sQ}$A^YeCG6ERv?GNRT~_`o@)(utd~n_2j2Q}JDIC)rbwA$WF{iBA;SunW=eGwA~jzD@nR{V zgS>K$*>tY3qD+gp&PxL_Y?ud-=I6A`qY5zg2j}OP&a_Z}jp#(9W(~oZ!P-WQ$`Nws z7FkC;moXaGmHMk~o=K`GYcePJcu#R^H$!2mU)FtWN&K#A;vn0T_015#*#xG;_pX^u z8335CLP7Ld4>7DpOIAN2#{^Ju24^4-xh`xPzNTo_l=`6eDpm6<%GN%B?R+dzNe*pr z90zSIBiBg`9MPY*)n4 z%MkKTZHPhnLPKML&eWa<=gmU0RBAph1YyTGgN~t7YnRV4TZj=fIE%;}^BxT?1RJ?0eSQmtnVQyq_AegrYIsC$ba89-Wn+?}f(`XP6Hv1+k z!ifZ@W0)%$C!RO%Tq4wDwJWlW>o8$1M)jDxLOMP^CX0A+6jVU?BPH~LJoJ408L1T-60;Q*m z#84R#kh1JfpMQ)a>R??+EqrWsW@Y-k9mUyDKAJnJ&`utgHK4MBh;iRMNkTPna36#^ zKjkR)6b-94)#Z0+O;a8`QbUR#q-HE<7`?x}$74~#% z+Zvo&YO$(?zFL#37)>V4YUZ+0v>)pEsq@JdNTS? zp9~@ThM2=LoQNu9^<-4IAWd_`P3oqLs9IVRgf+7i8{((2Em+_IjoV*-bEym^ILKF*JrHw^WiEiOy6Y(?X0SLo^LABPy`u z>dNW`E9N48b{?)Yf)7P)?p#xe9u59FOYziffTzy zjDco(DHa7w%=LK6pDqtNr8y(j7_Xf=owPdvGUZTY$sCJ>(KF~-xnCT5EJgzZ&-4hJ zVYhb#-!A&=+w7XUr@4?76=WHBZimjq z*$j%&;uXsa>!HeOr0$dh+i7z=i@%1WPDMFf3dk;vYD>03QpTjvh2a?@ z(~i>@J|klNm*=iv=4X~YZl093BAJX26p-aHN2ONEUNAMvB+Bl(#_}xXtZY&H z+8`^+-3KPS30pWF*VL$SFWGDdSWaZiU4w`B$XyKZdy%O z8}Pe$kv`{4j#rFd8FDi@0xtC}u z7rxWjiF|IOS8K5680E&a5~Z-QZ{y5y)R%dbplY)3v{;YPK+2jr8Oy42PCCmr7)^UV z0*H6PTDFCW;37Wnzb1?O4k-@9j{jo>C!zjcwHJ`?QH&{E;=`>NrCOl8ic-+(PO#cZ z6evFqNEBgcObpF}73k<;eBnJ9+1o?_$AQRajAOU}F3OU_2CR&Ps_HU~Fsy%%m_a8V zDS5FLijlOLW0wQVvrV7*#Jm$3R!`(&VMaJ>szQpEoROx*OCyi~^o0ShgvaIiCV&XL zFYM!-DX#gF!7Ake6>#@Vj~~;yqs@#d_F5U-kOs`NhBD{N7%REEnry3)C%L4Il2*$N zkSzw21F?+sPOwjn-P@ung~r8%LZxwj88e?w61uE)fvPYMEeOls)&o3Q*_yA zm_o#FSQ%X(X931*AlzvS^T%|$`%{6Dbnyx|^@PSq(%nwGj4=(1r8GM8It6B!iX@4s zkwdbfPg5$>SHQxxiY!ML{F1h}Zm68LaHfO0w_xXH-EkpWzP2TrgnOAvXdCZQ^FuD3 ztg;Nl$m1U~$KH5uIKAYW1qeaWIytl8n;qyYT&J0HN_1>?r ztAMYjkyy;85{iTTprdKLA9jc65HJKq$L5w%WpI^N4rVZ)PS#sx=JA-1BA&S@I1k6N z{qiKB<%Jz(TwyWvY`?o?AkMTr(IzMw4Uo7c8K!Qw&Xuj*H#+7PHjrXdb4d zH$yd;lU^@$)##g{8a8GfdIjAKZW-tO5O4*4vbN-6>@bUu9iNmWfwTyF`j@-*p##* zMXXa?v!f);BFobwvgu-MHt~xg+Ok8J;cGGs1WP>TF1eJw+A$@r4h+} zDrL%&!$0k3?y^!W;#w75!M(9lL~$2dqB++YbnIshTR?^4A+DvC5#_k4Ku~zd)C`Q< z&u|@!R!%K5(2p)~cQLcgF*x&X=YU5S-?0#^upu$8U92nfhwx;<#B<@$v;y<14`Yl$ zz8`Y7*09*=;015a%XUQoVZxbSz>TF$Ey?~qN2lkPE4fODnYw6D$y7qjG}q8duBF6m zyRcBnwv#99wGXs(32@2+uj#{dw((qqW!XNx)UTiA<1Qb-=i0$2kRB(<*-9)(^)b=F#qx zfqpfIBD>;4@g9kK5sOOCT`_Mq+a{T;q+YG@%gPTTwE(t zH8Chk%H%s$_0cEU##Oobp@I?d2^Nt}c5g)0N-=HtHtLC&QOeaSXtZoVOD7i_Z0~gz z1ElLpi-FRWmdcgFUT0x;eai6cThu<8s#y{KO33y+ibg4KcV$vny~)wfAS`QJ-EL76 zXcKRG3#QVyUq95~%YHqnT1qQ?wNPC1r*V^z6B4I;hV2wp3xN>JIVw>VtCw~?D}p3a z247_jMpQv0)X(9WPLG3GLI#Ixx+eNv3*_kixpdANEn)Z&K9TuiLkxh!(RO_+mLOJAD>6s;^-B&0;N75bNvR8cGcEMZ!$M`B(@~19_CpR zGf?~C6w9g!Ta#mq&Qq-!H-m*`M%Q`-tyBaoS{^I`QIu=H%ZnU)SY0Lf%^@rLVYDj? zSSDPDp@=(a+5+1Jkn#8U4>d$8U+ z(vEAV??_XuyiA32$U8AaO_%AR??huJ4|Ov7PBbRSjQ`)M#)1sFR&z%*$HQnQ^p!g+uWR^!_l{C~dJWb);my z5;$5k-Eu;G7HAHdqt~nK%4`fsk3JLeNjSRC097|Ak--_Y%qSJWY2L`7_vrHImT?=+ zv>u=jNm~kSSB&*SUPwrGd(v#bx-ugd zZ)S*VV`@BDn`IKWIQvUo&DDv5M3ig{R8@Hns=EL%{Bu=zdWk(6dtx4DQj-o{d2V89 z0D^~y?AoxC87pR2=Yt#Gd7P>u7QAk7DhUzSd&<5!oU_{j|H(49Kg`WUDn=MgIA1f! ze0cF07RO3-U0_V7N-u{fi=~dBDxU)$oc8q26gkoa3Of|U^nZ!65ZpAtp_&U-KooVvVXj)Mpnw@x@D zr9Y~W5v+wy{)R))P?D*gAgWkIN9eF5e6tLb*)rd9_I!`d&8%MF-iUu63ExM<_Z|Li zMyLyfXU|UGNd)uxB{ubL&(pmn-LaQaFIfDxvSISf(z)g5@Cf1aEIuQ}gTw?~>0MaD zWwxzZbI1i9m(N)cGvK3ht@Dd>eChMlnng~nd6IxRdt4w}NMo=-nW9lxiiTl~bufJ`^F+&In1ddj zThc{wjX3%6xQsXS;I|aG#Du9Vr`_IX+K`IlM5AWw_+A5!3>P?7O|qPE0if3eK!@Bwk0FS?pz08 zW1hxQ%uTNkROiI64)^cpRG!k9rnhE!c z)Aov)hP*^Lvu7W78hczZz&blEasOl-B|+LJ>(L%fvc))m;W~V^4UO-sie&M z)WlD5HG#np2V~*Saa3uz4;cRvpB7JJUyFK(Z$wE_4x7Kpb6}oaHQ<{GiH!b4M!{r^#8f;kq#=oLX~bOxFfxuu53UnUxExL{2Yfk5(ZMAGy5XhbCI- zf>(=tiLeE!fvm8`Bu)tb{9~KNY1@8@F4i%!7L3 zh!=xZDg!6>8@*(`LQI7~jR?S@Q%kHGXFhWR=lu=y2=AItPh_%BJZ?GVRJF{r>VnaN z7s|*eHe$40Ifep$f2aY~DVEZpj$?z;D_GGU26ptij^;_(GBia-DbMpQK@fx;!LemM z`4~7RT)ip#a7Hd~3F%E>GtZ)Xl|Bp7?XOf7An7qMijMKo+hzIETT76Z`jv<-p|KQt zvG>d}s2<|B5r-(29d&v;ezCI=4$|~?R#5U>cQT^(bOSL99>*CEEzw5qH+0pL4vO@h z=PDj58m;KmtyA3^ zXS>m|+fviv2vj**d;OHoJ(QH@gH=doVV#Z1(Cb{%6;+0j?P*jrgE7pnpJ#<5F)N|= z*cRIx)%G;5{M)Pwny-`&Ryx`k^@%e=Rt(?$!;aSV^mlmX#)0*9JUl;M%q`De*8a;5w_?BkDBaA` z6>Znt0OE&V&lUbGSFt#Mo}=sX32gc(*xKk7P`|b=O@Pit??LZ)2&_%OAm)i)()?Wr|aY&U0BvZ2lvs+8C0$CfSNWB@)?DJb$t$M zuunaSObNT?!aIW(*j2G@sL4R0e-Cw`$MS8vAm1&`nhN=0 z{h#5mw^ivY#mcVq&>1fyTXnXsGSqs$ZikwSq0sj#IoU?TF$7w;qt zkLcrQagGa1KGfK^&Epy^Sb!lh5^KhUjCP5(&r1ZWO{2dK=@N)DFXk}3y~@-U*hcK8 z;w5{zBRcek-waTLMpl`^Twx@C?ju~PsP>9Rh_M!_7ztE2r<@(_InunHbF4MKvC4#{ zL+WtZ5hI>3tWxmubdtLCkzY_Cw*0I+dIU>}R}zlmJcedUS~gol%tWxa*aD}gt-XK4 z>N3tnL9ww@P1(?h=P_iZMAKXjPZ!5@o2HeywP|P zApB|u`mGxS{LN+`qY*&Ml%GHg;sXa9yQ}+@K7)hNxdj>c9yXS8G2>kZx5+3wE=8Zp z$mQJ*y8z;|m5>Y1w=VHaBFbj;RkathQ#`zmE5hXgLCkY&&)PcL3Z^Ki!(a8Z_gizC zwLvY(4Qwttow3hYxoGFxJnndjJz; ziQ|jM#+~@N%jXf}=A$;}+ODf6%OF_4CBP_58O)JUiep-vU+J<5t%lQeJ61-B8BIKA zPqMd)%bY*QwCu>5g)W|6>qUR7ics?5Lx`=zBFB~yW$UPg@37B1?ei}CyxTtSvCn($ z^S*4UgDoDM|0pW}5c|1OGNCk$S zy_}D<7BL3lydu0EU23|FoM#mf2nKzQy0G{l`q(Gh#xjcV?l%dbcsvxt z&toJJ5>_(}SLY;A6yt_yNRnG|>G3$_7v6)NLrfDpi{@3fdQ~+K5|MOv8wxWRui`Q< zK>^QK+6;i$vJEO+^mUM8&Z*LLXe1Ia0na#JU^zDRF)r)L^i{EYO-4Oc+f-Y~gL7EC z9#mcp@;eFMXleTCx`GgHbEG9N-mvINv8AFXHQ7Jng^1WdSKO+1rKQSt-=Vz4fNy*y zj9gtzYJ{^Ugc`0N#HlnTE2tV?#y%tVOOHvNwe|DLr`KM`dnTdR>E1M&usaS~X6Zwp z`_q?Q<|fMAwY~IYN4&WgdvI7|xsR@EY)#DlTrXz^XYt%oT;?@<{~JSP?(l7H+NDeP zG|Lumu1CX+PG6J1^mHqCkcKVw9BV3Cae$WPx7*{{wF#Tx9!KOJCuC1B3m7Ny@tyZl zJo>(WOXu6EUf)_+Fnc;(D9>DF%NY>wBmC`(7aUhQ#JZWfEEXP-@1+pxLRw)zQrJ4= z_ekS3nbWGbR!vGGs@Td=656A3Nxhz$j&0LoNai9mIvR)bemtl zl#+ZJgFmDBGFq)LQkdNJKKCySzfX8Ax0G}U7Tr=1Ysi>xcfohe@6C|$PC#V1-1q{?(z#YKf~I6f)AQhW%H?`O`LmAwQ_)_a z0DB1_FA&{)l^cFvGG#w~gf$@k=>VZS+<8iV;z zlxR{_JmktMVf$T2va(SWQnSd)wctL6x9rC^50#p>o<5M}2WX^@%Gap+oL5=0n9lUH z3g(ULWg`Lc;fIK}Dw?HJxYs(%C|ZWStf2WA==Ft4n#n*BL9UnP7;uY1KIov^uo1CU z+=WfnXe)8CmoRNPOPrS0r1$2mJ|=p9!nBGEEKP@EIiVCO>6OxkpiEMJsd1I5)_OJO zy8|@b*qDzX(}ExIcaf+4z^7+y!R5L)Jx7pP$+lIO)z@n_;#kG0IMuT z+|=ao40Ilzb_jxc3LS$}?d1q{=j7WXCkpu<A~a|daQ(R zgM4eD8hN}t(5oi1KF3%8VrlJ1^4f~`sjcMR+8nycc_1nP9O+*^*A0-TRl5iUMcZbaIg+ zY*Vw2__KLlwyqTud$ljt)0?#C#Jah z(5Bk9o_9s{lx=RfPn9W+AyzaIK~KR{$_@iko0vrxR$0AM%A+#C%`75WQgu6{HrRvu z(UnE*Epun{UkY_TNb6YEj%V2eL0KwZFWzz*6-iMd=LMHn(jXNBr+E_c6?Aak+yY7l`IgrItcAk zs7$gOm8A{GM3ODJSt}Ng74Vu})DK!h@WJ4-Fl)7N+;b~at_hh}TW@lZiKWgPcsTaq z_Awh@21b?|3wq1eJ**w>6=zjK;+0t5Jl=Z2Nme9lN>k(dv@u+)tYphCu?781KC`@F z=kE4;3+EBn7C0#ErG*edZBoXzoigv1a*0MbLf0nQa9~m^%TyD%l7yc`&d$%uGMU~T z54)@p$zxZ#%A#&akOE$oz`} zWKcPmmi*Wk$k{G+2-zrJz*Ala2`$@$V?=q96jA_?h z41A}>IPdo4Lk28bLYf{$;$tGk^a-=aEuNpm8yzCg8Y>@?L&z`T_U|5~(ew&OT=ja7{K)=DKM zE9vV8pEC|%S3E1p7I@~8O!r=}8qLcE3!=mW0!g~g6~b8w7(IAS==EUV~LpVq!Cl40YQc_S{5=rR1Xu#5+8FbkytclCa!?D{9RHl zqcIyhz-+&8Y-T#x>%+lPxlk4{11y^%e~Mom?XvApJy$LSG7CI?lr8ajJ%Og99PAUk z&2M3T#&t6Ms3=%Qrn(~2o6E+0mK_Q$;4;AF1~;fT{TTA^OXWV0&SFfD{La?Q6 z*S4SG7YU1pFE1GYSjNiW(U1wWW!fDv?T(aoXH2^@rQH?N?n-HQ$F#ds+C4Gto|JZP zOuILw-51mDOKC?A$3#LUgh#NABj))X!P1Px#LTj_AD^Bi1O0Wb4BqJ4P@At9Fv+ z>lO+plGoZI4c>K((5G~d-eybLWi6G`&SG)z5EZe+;AXk7GT9w&No%f8Ib%h=IrJz) zCtZb;7QjcnLnBJR9G2R4(QJ)J6C0c+=Ql(cz8N`as;AUgt;6(42C8Fo-+3l+f$E={8e z8C^-hh8V8sBpQM7g9TQ0!02Gr)p3!l6APCHHg)BpRkni&-j%LezaP+l@7`x8po8r(2kDIxZqS%u&!Z0WP1S zSo3b2yra8lCegFmA4Ohw-zf*Ai>@)78N|#UQ4lAvrk1$Jy1ZoOzQ7D@XM29Qu{TAe znaE7BghJ-aeq3l443wk^6+EMDh87)hntkXji80Gb&ELKf{Rew|K*aP3S2rVKGSwEc ziRS!rjS*3$;bDqMK>9Iy7M~Uu81+fv4L`Z-lb)J*Tudm2E6*=1bN)e1IaW3>k{KtR*(zbji-cy%`c8q7mF zVlBNua!U1lG!uNlBL!Kc+=Sx4Cco{NY1W1Qj{AX)vzl?`$&#Gzl9yH2O~%+w!lFq9 zsi)nI#G;ceJaZ%iWbiMhEsClncl`itDVVb+5@A{gryjh5%Qm<_a(Cg|eGVo#9iJ~O z?uECXpN^qXY(WRt>L& zgfwA2q__<^jB2{u6gQo=pk{e1$*Qu7CH4xd*n@g^EC~8IYjI-fkasxYemQ!>uxQaG z?A^Ry>E%#ataZriiHPhC>6RV`WkRvorireK5$Q1OJra5X1W}-MT?tJ?isC42zaYbv zm2ml!CW0$JBGgV0ed)1{O+lJ@(1bliTvkx&IdakqlBo~vij0^P2!KsRANXk>Hw@yQ zN8yrTu3NYx93~-CK_nG1xHyfnqPRS?amWT-{rP!Kk8`Djx-NK3S+$>sMTsT+gzfVpT&vCVOo*T+*e9je3zIEAlp3wV?PZfuYPxIX* zXPLBCu|#Z*_@!co@7dxa;b)5l!V1k;JD2%hBvx(dh_y7Z(A(oPR{pZ}xm=v5ruW;V z-4-#y;k9q;=_9Y}rI(7!^uAd9LwbsJ-%39Ts)0}ZqQ|7ZjynE!{YJpfQ$?}<+4-L7 z(-63X3o=(hmZMYCGf%3Jxxf@QnWkk!l21HW%`NqdYMwHSG-RXCGwaLDMF|d${cCWsmvgM6R9t5Qqn`q zdb&V9J?#)w!k;G2F;wgl{+Emhiao0R34{KZXpg`Bf}#pBsn-jNIfFmR71H0UQEIlh zX-_Yeys=(v7NhF<3Z*rF{NNicT%b0W?n(2RR-Q@$^L}AKBa+lAQ*ZDQ^=bW6#|(Ct zg_o(PS(z&5v{f7|Znd^Fv%;bn!spIMtM!w=W zO;kj&1}EX!OVk>c2BmM2oTFjRI8c&8C~w*z)ZY0pk&Zgm$)$|Y=klT$Jx-2FE!z~s z=NH81YF)(5ZB9bor>Cxwx@vvpV%w4I6QQ0WyGE(BM*BW3k{-_%hl+t)RA+%n6>2o1 zX}+H!*QG&#Z;wbi!dDy+w3^}>>dhDbgf?9q?BrX^OR@gLNd_OOgBzF>o285MAW9vH z(jO;H=|aPy;xR(c@V9F7tvS2`5SRHDAWQu3oKS5`ldv^H)XG~yL*zF{oUgo9l&KYs zKx85T`R5NAP-&*cev3v00w}VxSYd1MVz+MxL@|I`<;e{LMYE|ntpcc)MTeR(L6D?= zK97!CE%1jJ((jxG_i1*#*;PiYhBPSgsdG^;5R&aq`kE(|=kaRlsypXO$r;VAz)2cU z)RQ7vDpx~^dQ@T&K>X*Yf$#0l6@A4Zb1-<&R>E#PsKq1of-bALwqSCw7~7 z(^r+4-mm4Dm!tdrAhZ8UB|zb77Xkf%5`A>*CsD798k+9_4$#FJIucDy^DTMpIr-|W z`E+$sC0!@dFvK(cL4>0AoGs24lO`{i&!?pIY4OogIv3D(q?hs14_$#J|2KR8`jhN!}|K6qS*TgW%0ubqOjPL zt4hW7p8H{XQ=bpfj$kWBPZK&tJwa(I+y@-d8rv~S+AaGG>&(VNco-^gCi(t#FGX(|2Ku%A>AflOs9m-imIDejV< z1xm4NP?N6jhsyWa4!{YlxJfe6mD7Imz4%n`_(f4-xT)Z z*L&f2tum)S$6K@bAS229s^X+L;lirAGm0zf34=GO?Z<88aRcG%UlqdxldcuaGK#oA ziWFZh>9i+(K`iRbCLO()7A8EmTH~#6iCj(>XHrYCx9aF!dG+kE--xp!P9nz$9Iu-TVR5t8U2#_2Yw>hYNKqZfejH4{ z_9Frux!R@*;hK@Sxe;{EkLO93(C(h+2<@*H#V(%=ElS0HLAC-HYBMFO(e9*ppHM1Z z(*8_T+}#>m=h06gUwslk%`%2Ix_(t?jD)5&H*W7dO+fm*N_7_t$L&lUd|b;kth92+ zeQ#>T8Cv3X)mrj3P6&W~w(Ti)+BW7F14}m)Qj%uE5}>s+K(W7fnPSNqon&&-b|)#X2yDEHqgwqYu-v>s$-PKLrZxzrQGU$w^eJtEScs++w>5v;1ll!~MwB2O;}T zH`%&%A7;BrW015F(Mhf?g2JTX6i42=A@4GBNV|vsX$^8lqG@ItExF& zX=!sg6pw?d?eO~wlyH?-R3T&WIpcIGN)og_Tp`Gp3yI!HL2)N47?O37RSezQ%+FO6<3!2Dgk;FGTjjo2y{Z+BNwCfZs+D=6DJ$dk{Zwuw*Ko7A zoskdh??)iT*m2sbS}%*Idi&Z+R%k06Nh`;f&sdaRj$?5d3(^g;&Cpg`PF*H;3a;@hI>~+Vs|WoH{c7J5yC_odBKEgX6N_e-zzQqCQ++<-1g| zxLZuCqm-Qa_h$f3@*(fOiOt|K0Dpq?cw{5g_)NwXbZdI?<2N^!h@0YC;}i9ZAJkPJ zOtJ|lEWX*iORp8fh@2(EbF>@+ElNFTB0}O*$0A8dzm@qqMk-HmL)gXom;do#2zw%t zDi}^U2Mw=o+i)|3)L)T+YP~sl|HVHXyu=;CRTa2tFxX4$kw5xVd*qSgrhM^`A!!P( z5&;SCs0+3$^yMsHWPGP5Zb)Ta2mU16OZy#z(-xY-$o>EKoeUD z9WFMUm3;P#M{0|bZ-)+IjeDORWop}h z0uuFgQsYdf`GdtrS=)8snM+*}aq(<4^=J$Ug+9)tiK^8@^d&|R&AG|TSw~`7;zkoL z3f3C%G17$DL#2K%4Mk>Ex84=M@sRcBW{9fARQ28T)2qwpR!}#A2sX3OXw_6{@Nvl1g)>rdzop#wm2s0F)v$CTrB>Za9k=jt!MsABf=8!1 zvZQH0DzajWKApo}MNAaOLZzcxwbVyc6P$>Z+A0QS@|LPgw8V52Czlz$?}XD5AVQH! zCI6v_Cy`}!Z5_BvJS&vTdn0XrwS4sNK{BMk8$KtsII6^o$7nG(9gA=ztwmx{k$`lk z)Vo`fQo3-HB!9%eON3rh!JfEBvcy{L*AJupIKbz5|xjvM;-k7|5}6z8qsh~hoL0$1*cP|9|`bzSv) z+#p?smmh}&B%BsZ>=wT=*~LM=xcfH54=m(kvPAhP_OgVdP3U8C)#o= zp=^&)z6~r3m)$I%q^sjc7?77klB~V*wBHFzFS{4-s~*igOuIT||FDgNA5vkg#o32! z#snqzCHT|cMw_o$Oa*GQdWIq??0ATLsM(Txj{AQ}NzhzrLtqDDpL&RXB!RigN8h4P zUvkqKc-jm`!6%B+{JTS;1f0%M5@h|Py3SLz5%$fZtrowazI%mjpT5_>+-05a^Fstfz z?(pKQ$g+0(B>8GvVoc0?&C*AzEHBZkKAIJ_Ol(d2yW*5-dH2P?n?;=2s^Y`h-f^a- z-~?kAdx?RIJE~BKrCdl|1CCoXPCu@bJw}Y|zHeIOOKeyvsS|5xr(2eqkQ(AM$^9#^ zmwUz*mlGuR@5{+=-rcXgja!4QR{gq)Z!7cTD)46O1>e?O(2?NqB<7)C>wZ*RRsJ_#}##M%-p z66O-x^JWckEhfRZ)d^*U*+qEuRJ;n&z(i!8)3CCpatSdh`-$*TK=^%9-{*Ku`1A>` zO!`fpCL-y@CnUW?V=@nm(Mhm2hZ&({k@tGt6PeC_j9lTV*z2THGU0^0u@Xk|S)-R5 zs<{zg&QfP--}ioHYe!W6ZHcS(e=Wjur6$^;<3W&=bDz9RhFEuBpGGNm6-on^8Xnhp zO@6exZ;gUT;8DSn9sDK-HF0tp9hv7$Aku1*1-N?Tf8rPXI_5JB2GG29}bM z1|1i%t#XVIWkKd0(iDN2mO4OM1S4pv>8jt!e1#|oF zw-S5Zs(IA}w6$58heDz+>Z)4F zMf2Uflr*AfveIfVl5+!A6zSqUg{7?t7H>P6#l&&axMS&FvU2^wdEDL0MYw9!N1q&} z)Os}aC67wA=o=t~q<_V}ggg0QY9wkchtxHzR5r()Aj(Nf2NSxBHSp`w0<_I{ojvNb z>d)~SG1R}OG_&a1`vs36%MEors$o4`>x{0qR=?hgvEES>@9QS!hry3nb*|jF6?dsj z?<}1)y~MYGf?8u2W4KH%Y?*MpPlF#{l1e69|Cc#B)u~V@d6g@;)!k=K)+a%FyZ|R5 z{utdap%+wBH3ga&0pOP7Xqh<|dQ`t6kn;>#S5?dhcvp%QGg7Yn+D0!l4^~=vIBO$^ zL=xHI=!Ftx{U%9n*(L;&mM5VwwN>omC(sz3tSfl0JwmYC5EECwsK!KU*Wjvn&o%it zXQFtYGa=H?07Ze_tKKJQO*ew1;&k_<+fl24=sX_f!PW~9!(RV)r^7PdEBE6%rFm0V zy&kHf1!ph~QVcE3X|DSXIv1H+4K^MRX^>3_xhmr|^Kknq^cf4Frk@6+}Q+rAD z#;uo9l`HxeWUhnsY_~3-4g}myvLee|O0>dQs*7k91HS2%9+X6zb{Rgl%$BwOVt2P& z?Uda(=w|iqy|Q@j9R+Jrn+XX!sarbO&OP*;0Av@4IeCgMoPPr1{>drkIoU@ry-qq)K&(U9`_w z!o*UYlB4Xi#XH)=>ngqPdg94J!6n%RGhRv`Db9B9h99OLkFDA0C1<0$lzKhX)8j{= zdtd#0g_=Vba)Wg7L064WnRLBi0^wS17uUz~T~I$!bt~}mmi)v+v$K`(lit!_^f3!J zNW%BER!p5TjmK{UYvuL*Zrt$u3gc^%Q%JrhMZC%HBv-L}X{~pY)2|(r^S#o*qF%z> z-6t%hw&POpe#V+ktdjxNPq0KQ1G`*XG1KHOjbD=QIp`*8CPf!*%D@`kH6MjSF7Uso zqu6nXIaR#at1Ubz5r#3#^;ZKm1 z6!%H(>&2;(;&GED%J40XZ({PA>0Uv?TGX@CWogZ`BuP5mi(@VJy7GG{_|Fx4h0TPo zV#|?fi=_F;FR0s=?(9~$*s6waaHHy#yI|)S69(@R=6++6k@ylL99;@?=yUp3&fvDf zB~-chSatLPJL=mm-QVZf^7&MXay05wM$LX>`82a9dt|(}uTd1GueIwHJKo}87OXW~qY&wLx9U6NqRIjx`O7HbaNA{-0W zY3o<&kY>bNNQoCxEv2fvsMTmUB@3&Anoqb|^HoZ#j1ikJegVGMlTH;)TrP);Te_!p+DJ>h6>n>>K7C}0c0|bH^6na1XGMH z^?RZAt+x^84c(>7KJJOIzZIrPvrrs41Ab=Tgbtj61Ji!+aqw3aWNE#PT8c!Ew_I?2 zVt-@DzzCmv2FADVZ#*zCR`7MuzaAL4(PK9jLpwNdD3BEpL z!5eEMM1Hg_L~b11NAz#Dm(d%C8YKK|I7_&3+jaXJSBrWj>BjBvBC)=sEAhtRcaywt zXHW8t_4knR?p=K{Zrq`v{GAVB{jUbb75(dhiE$uZ|4FSel|{i&jDpfV6yggEjWg`^ zpVk_qBZlzCE#Bmf#o*3?@ohVm0SX(p)c23B|6J%+YzmyWZwNS71D~ypG)4)uCls&_ z>}$ng`z`-^jxU^$!SYfK468ts%& z2FXncMYJ>J)Yj;HYeXU7Yk$8M(kwLES*UsLXy=lJ45G%ynrN2t8!Mw5&jtFmaA;>^ zr5@TTLnDpOm%aApkl;Bm&``i8#Z!RD0}OR@NHBi3HZBYT@@6x9-xljC&{36p2|zR+ z5SlDSc-p*oyR{$N_^?Aa(%3xd&?zKR`|E-I8lY#yP;B<3dQ@u`Q2QqXEFX{Hf1E~u z1@`$`ZLAm@p!E>)QH%hAaH((2gnvV7ii5|Iarm@^!U_Y85*d$!X4L-I10r$?S{5A| ztjYpFWl?-&{iWjOq8M5)iZ39Mw%7O|{`jfMBgK&HHUq_%$N%oX|Bcmme`E4%bKgFF z^1Aolcy{uC|JSvzee$3F(K9#wH~;pw554|Bo&Fzh-}&^{p7@_9|IdR@eeBS0{cral z-T8a}&%gL*ANcg|T>0RuzxkE_b=UFE7yj%2ag?SBIp z063rzK{qt047;$GxR3v5 zfn<)@QEOA1w4?mpZRss(jj-%!`9<0z0H!Y zp6;`Dj!;hcK0+&ZQA#CeNIOT0VAkhd#O|@4lzxuV8uguoX8F69I!7s|zdMK>CU=go za5hJ&yJ=65D6UWasW)LuJ!*8y(fGAJnlZQ()65G$!nArkN}lj=H|2#Dja0e9sBooO zohLt&idtt046H@)t&C6 zXm8OjlC^nlrtFuyT};`h?_X+R(OW>9J!G1!?3;ol-yL*UORe+^sq<};Va4u&V)%|j zcO5!>=x|qreEzEs6cQB$N)W|Q*WUFpewOXA<)!jXWc#ts)_|AZH&E=#e$5&S=0I^< zmeAy7&+12IN^7*yqp~t39Hy_q7H$A(&`ibUI!Eon5@j*qph%c9CZI=OIiFKsjvSzI&h;>r)$(*+6lpXV~xSHW_o1x02^)TJz2F z2eWQ(Dw79w6Hrlx8iAA_I|hoO>9zSwYzD3wy1{U4h}$!{xVZeR{SpN~kt^);pU(lM zG<`yESE(&?2DZ#8w$1@d>*{suBLARfx9;$r%}J>CMNb$^X(@EmK=Gb4OzU*(Vcrm5 z48Kg(T;L}x_;G-|jCGBU;Jl@h2~w+=qA8SG zyf{$IYB2gifD?fO{Fep}#;9f48`-VqvVY&&T;}IZ7MEw{nrq9=`RDWl9lX?irP<=g zu@=r>X|7$IZ_d(Wtk6T|36>N}P`!oFe=NY?0%%=D{^LXX-htv>nq1Yv6OO$#I_-)iVuV}8@_-n775h2sB{ z<=!<=jB2_~Jf=zBBKekqqM1sw>RL7bt&CK;3z1v2wMFt<>tc(_TO_}=HoL(7|D!z% z!GAE6w68xju)Z07Z{*bc?B&&kwJV4CapOx1E&WgiziJf{Q(F0x2e&ojj~(3B3_qFi z0P3XvzpWX5$mM~h`O9moGmE!1Px1px3$y%gjQy~CvK_kwMp1oX6&>8(80D`%OjPDk!V|Ua zb-teBZ-&1cYTIjr+sBHb?Tz+s;`97X4Q(H7HwjD+Zl4$@XXELi?GueUq4gK^@p+{^ z$wzyrwtc4}*D3i$eSA^LFYCk7envA-sP^byV2~9n+7)*wZl*+su5pWs(RZW0O&|LN z#m5yo$;bL1$mVCZK&3ygnA!T2_w`+&Z5j8J@VY+!kPnNtX}PiffAi6PK%rL@`hh-P zRzN?SVD*AjF@u(u}8qXPpHm%khD)y>A{#=P)QCVzqlpXD8NS!(#>wn6} zh9K{(ss1OGt08rMq>q=t`oiG$(MxJ^<4LA*o04}Jgl>5xzWz-mYNQ*x^)W;vo0>Ij zdfw@V8sB(scR;Th9b+5V8dd2tDxo$yB8?4$;Y%eZI$u_feSDwLCjE?VzI%B4O`X4l zUi^FWaQMDCd_Nh!kA-hx4-=(T+Pq&w+PqCkO*M85)Bfs5wv@A8ZyQ^`h3O>;LV=fWEdB10;|$KoN}O&6@12d^RQ;6Wg1$fssbN-W+6x z36ML0ozkO}9UyrJpW$?)32_~#5XlqvSyuyeLVMPkx)`zQH`HnlzzqPT;~GVUjyCUM~h2 z?I^&jG(*`D5)1>RSh~&!ngb(%2)ql>Cs>;OVup=tYrvxHBP>K#l6{XCd3&HDe zj5}`ILnF-lKx3X%&K@QJ#~Z+6uAkV(Tj+ok*_f#Em?JiS6Lsn#ZZ<&G3okOrj z1Z#{2{W$Ep!?oBXN#S7ZU55v=#PW#j-G_&=YDQF(OcC?`M!THl>E2FlTbud;Sw5B-F5*L*%G~hmD5YWR1 z8&504y56_*@PL!qjYT~WoaL;4(VHA%fV;&KUkufDihw-=?Q$~6XRUFIU;+`tzxG!aa=|!WbYi3nDkrItWrlf!)oaP^AR$q*eZ0tZZ$s|A9ky5_N_uLMF}ACb=93 zo}>pgM@p^kxNcw6(jaK=(*OwURvA&oN&XpvMkOYY19Uawp`eD0?kPm7cG^njaAET3 z={?2J2+_voA8W357K0Wei1d;ihdk7lmItx5mIrLR`x|yTTbS(MT|l)urft;6cnp?a z6k$0~Ii1@YjXn=y)&P-JhNd~A2lu`b3G>KOt&IpLgq}`schjNq0!QhEgKlTLWKp8A z{u+}_^KCofZK|vVjlI6^`2G408!_k9<2za7LTd(~4zC;Y2B4i|3sM~+?}{}5Cl#C? ziODYLMk8$FQO=F+3vx~=LCo#n7sQ;>N-1~!z98k4nhCiZ_5~rQ^oopo@4g`8l+z{R zCiVppM_#XlyJ=sLaLVl?;128y0#5mT<=gxA1^K2DTZp$3XOeD`MsJjun;0*rfCY$U z{bifoHiC%A$ss<^m;@R{0OT(6u^4pRJAs>@*$W)%(_z8ij0zMy&0rKk}w?J;@g34XZmDw2SpuC}SM(ikJL>W&7uA)=K*a5`}86 z4weQar)la3b#^;0jebDLDtB0zVmDqF2wt=D5-$V`Q)v=hUa$Rxb^3%u@VW-uew}|1 z1pvRUKgm>j1QY|j{WA+|R+Z{-D9u7s+KCw`o#z$Y;}ElNQp^S5514f#8j*>1R8Pw= z>LCM^TIW7;EpJGW?@+wP!U!(VlE^ph$-Y_Un1hS7X$bCI1QI$N8Er2BaR^b36~R-D zxad+*h1+lJt>m@e0Q+p#$Yk&ys994l(dZ>Z1e-U)pNvb@WgC45j9eB%J5Sr^XYBL0 z?Q_LGKc~<2?`)Sk+MW+1o!1ZC?HVVWte(0#Ay3K$|H8W#Q62O}H9F5RKoO)*)%<8tv(PPN5qea983#{Z0t&!_prJuD z>wFTk@TO0~^Y(?alK99*yI_;+LF>^Z1-?x_5wALFy`g&G(_8t1BkM`0j*$Y@=sS&0 zh$04I`Ul2Eb9{r~LK713{8GX*gl{vBiYfjA+l+w$5Do+Q3RUGB1zn!U!mAFpVkG&KaF$Q0n4DbBC8@6urgi#>Pj^_+FfCpp(}n z?}@8dmQ7n3+N=u3gt03e8KFbbhRlSNAu!#l%`l z?QY^#x`SA(q0wRp5Ne~)8u6z1ewqk z8iWQU8YIR%rl2FOQ?FT>&YI0i`;$iaYkUHOaARMx|IE`@-jvs$V#S8#nbENIqBB+Q z{D6&;FflsXmhOzmn=+1IMVumuRn=;N2M-xM(G-?Ytf`-e4F_Ys95 z*`POl-(x?siuSqTW~PnZNUU1piN+IjQE#~FvN5D`8$+(<85Z^&9vHl_K+UumqJy== zGo)gU#thdc8H?pXlH@5C>bU~Rcyqs%YsC^b)@+xB#d%}R)7JuV zthhjx6RP-V<2kC>^kWI8YTaAFBCJ^BxGZHwvWxl5}+Y6}T z@`xE)=dlAwA#HTpgxE%4CiAd>vIapK-$LQW&vsIPuMzlEwG@TX9q42u`$xHX{Mm2Xmd#2G&c7M zGJP4Kd<#oZi!Y?>FWOYCzi2JqY@bisry5Z!7CFY}=%$%v__Cz??bB3>&BM0PX=&TM z&B#h$s?7!uK%0i-&4ct>vxW{T7wdio^KF)Kr-6L$$gm*4mq};kcY0!B~w z8cyp3cADkjuT({7=A6LnUz`#EJ-axtk3vYaH8iQ3F-|>u2CJ}H*GGl z%cvb%RWWFR!#uUVv18j|Z7~g;uV@hReFnm@0j!N^O2G$O`R%`D#%m+{7>PtLj?6J2 z(_?gGCRht68M|q2B82NB0aqbz{Ly~ew%NfLB@r})4h&yQDF!~2XZ+V?!a^s*cgIz}gmi92*=P8bg^%)xE?>b6aX)Y+EQ2nivDh z7sj=e=4JMyPv*^dDRxzPp|S0uSlQGVu)kpIaJAg^sGQa2ykw&}TrD^@9ExU5jxnMa z#>blV3WQ_Z$A)ic?(AvSOJCQ-)~DGqoNQC!v3e-pm8!<~H+S?jK30Ekb620{$Bc~L z)!fnB!Pt&arK^iEM*qV2^-W#v=>}?S$3$~?-)_9tyPG@vRT|qFs`Yd=22NhkvP+|~ z#}g5+%GM;R#|H2k~D(GMMd!Hdo zb^GTF4l#OT|G2ombKJzz@d#A=Z%G|(|I{Gd#PnPQj+So5JthplBQkyu>5CQybe^aE z?E#cXs@l$vJ+q8)q~5MnEdL|eZl#T>1g*gB_u)`rU$)%cjd@{0u^8C7Z>I#(`giEKt@=|VXiV&$h%ZF63SiRPI$mK(q~^qklu0%! zH2`Niq$Tc?UIVQmf&rsmFKUfx`+pyY2{#T*+$dT5Q@ePzXCFGZCCGYinCCha2XCa; zN!N*px>UZ(7p}Vr~j>}FC1R5MuFD+m-S*0=-DCxL8E;aBgDMb5cN)iiN?l^sBm<{>`E9E)G1$f zJ}PTNdvXUjCZt5q^X*CdsTjRoi)MSq?V46+CT5}2lQl^fwj4Ym-L(CbLDs&aS$&F~ z0M;R&B#OaDRsjw7fQ&r1YbOHc+LMq>eFVK9_|ZA7xz93}pA68L_A=UjaWAL`^W~(B z5YM6j2Cnvv4QM7tHOfFE0_K)?sdr;d{}gKY19PM8Z?XzC+TX4d8WHn5sad&zvk@jr zXLS_*(;Wfpz87o%(3EZb2Q+(3!}oJ==z`XkIoqrsU(hY zsK0Z#Iar_A#z4sEJRynNd7#n$;poOCDV^-)m`Sq?g;WNk#IUP-3Pjeh$4QVa7-@U> zl7&qr2g;i0092vY*|q~s{*$8{m#xcB+vin=fTk_&-yqyJEHzw0urRG2zG`&PTeJ)4 zxcb{U4z4u}ls@V29-)*zG;QNV@z(t^m2~ixNB93AO#}DlH1d`rY)Ap@Rgr z9b{s66Rq=C<8Peg#=JhJ$ip#1!D&7~F`A7AFyJt zSojC_`Gh_(xa;#X_W9fPxniH6(wFTk@TTRz>W#c%6`!|^uPD4>pkt09+*#uj38v4E!Pj|7CGoNYf^Al0hd$T8X<ItL*I2ceRQPrK{E;$8G)8u;N?{YpC!0u; z*fA=?UQih~+vk(^seT)q$N1FlPvQIR({QtSSYbr9y5GFbGMap{zq8Lf85g@Rb#T%M z>3|jSf?pw%jSf(aJ4t9eW3<7|OjU3HR09kyS;L$#4-OC1hK4!wCoobUHak#_E=|<`!FxPf;lkF2D!^1hdGUu)dTC)%Esd)dpq zENJSM@-;=%3lRhV;4qB_(`m52##!f#P2p zX{>)sN#C;iv<0rf@s4nOjtVBPMqT>f35l$~XoG#%@XnoZx|ZNuYzYV15DmT3DXqSt z7T*x8(~PAtyhFIF)wz+p2U24_amU*c??uARdQo7HAYcEQ^%;_XO!98nQ#Va&`gmk%udxnEo$X0ji-S80F+JD5yQ{V1T}-GGhAj;+ZaP! z`{kVwok(-4ab}l-RM)V!Q%vL-hLL9o0liC|xjyl4tfJ zmOSj$z#4#DtX)66v+LM*YUyfxUaGKhrs%E6AOQ+;Td+m zxNms7wWrF~1dQz!b^!lAEQIus49sn8JzkU~wFVOq_yF7LoQolegnHv2J>! z)NMSa;|4NsMRXkMXokA^s7yyk(bB4 zr`TY>mdXJ{{p4nH3(#ALadMm(is* zU+qbV1S^Xs>J_W~1N(eU^E6616eM=OAS7}xf{@lUCCx$3#OI*BdL2;$QbvW7QOD04hMzY)@|s29p&=DO z6c`Pxf5*DKXrHGo3Dutdxyixjel(K(??Qe+k&`k+90=BkM*E7oBjpzDzY)G5R(d8e zX`3u0+Z4K;I4e!PHmXKc-%E|-p#tNuXwxTV575G=^)LJi#`ZjuX_rdocZf6(D~aJ= zJ#5iCWAx7V4DVDJy_A+-WN`drgq}}|M68Ak03g!_kG7*EqSErHY#-`g`xi~fI-fDT z`AaMiw0a9wL^0`$G;~R8-Drs%$Kk6!dvAd5P-c&ou)oJ9!atkF^}pAc{}jezaQ8N@ z-mkIUtB?B)g0G;FNGFH9C$`n7j(Z44It&f{k=`sK0q~Uiw{GzQampBN*eEuxi!}SB z=;TSq?~_Kq3r^a{hp(5*f!qdA8Eo-DGm_K96vye%Ki(2JqIG`EKW4})nUev22Awa& zq!7@8-}$k9zG}CWK8un@G4=jqeY|?x@Lne7b;rL+3HUSogI`}GQ~cWKH0eq;nk;>c z4`E`IEw!fo8mqb}52dd&zJFL+JvhJzjmdy-6*PG@N&ZDbA~60yhFO;{3GtWqL$nNV z{T1b4A7PY;8$-2X9Q02HIsTC6$vo6(q!P+DHL5%kLT6)4g($t)<4buFAtA2p0bqo&*}B& z^!jtTLx@d2iAXb|>AY%c-p@6@pBvYF^5)^apo3 z@b(dD<;a9HzdXDrKm}mbG!y}VCLp31dI*e7oe^pqc`#r^uePN4HmTijt$$|tAa}tC zX@0Q4WA=RtUI0&mg1=W8tx=6R!q7tGg7sIFlQ9Lv67vMe+hPszJe?bF)Dv&4zmme8 z=Wm22v%!jz;Rq9GfY@vf@AjCZ#aO`@Olz$`HR@ek|IdaG^$r9k+*k-k}!@xeyG0ir=Gm@I?Z0jQgMuIr_lJ$o}E&QjftnP`eC-t0#a4eYO~3 z(-0niGdq?QGRD{_7;Vh6;3aFq$ogmc#O|jd**+SF7}G77A2bQ10gJipOkwRCl6cTO zF(IZNE8rkJDfNUriC1kDTKytVHs<9mj|?<)9R>$!6oFCn6x%U27@2YIHuY+Mkyw=jZ@?on+jLT4&|P^P=@9jU8*N zChtcI{%B%2zL3}XGSz;!(fKlD^JOWt-;hE}l3M+Sv|4RbRmOVuR)04(|5X+JDl^&W z{1Gsjm9Fzg4%Z*4zs;d{BTqMXYwJzp-)0%!+}G&*1sQa(xlg_Pg%yOV(D}YUijrlU zJba8cQL#6NqKO4l@bIAPT%M;rsx&Y>YSa_1TNK~NKP|#A(2M@Pd9!-DIYgv|Z9W+y z#}qk6ZA{1^>3${MA0np}IUOR06*;V~uq$h0fL&SrHm&|am7;&8aXomaHu47Cy(O5? zG&o|1K5Wu&99K1w*}5hRJ2d~)gKd#9tQT@A|WajgYv zTW7?O$?+ZN32uVM3JN2XhOyM`t3FnqtU?K}kO`Dkt@P43MJpYt*srk~OyRk-##M zgH#kte+20=;m<@OW09Gd`;{c|iNQZ4VZ8Pk4R-%MPJAK8L}3ictP{3hzIsq#9n=Ql z3@AV7+buVfzd_c<8#aH~soCfJRHhX_Q^2Z@F#rf~O&zV>$gwfT0Umtip;w-FBnp&VJ9GL6{lb zr1tnshp(c6|9Qawvclhle<^C3D@P?%`&94`Ly^pUCfUX=;>b!X#;35A2>f|6I)kNfQ4t$SaF_6&`l|7~*nKhG>*dU5#lYyHxO z4}E@0PEJgv$H1?ue;hQ?e(dnRqWA?`?6K9X;?w(hE zBI>ByZ*MDm&vuQ8uzIz6bZUof*zg zdXzQ(nmq7qUYi%xrkW#lWxoXfK!EF)gm+)+2Y-=gN0KUL5-5 zu^EdFJu>e=S!`0v;Z~k%hM&|fb_u`{_H$^@*DR$44*nqp=CCz>6Ir~pH7EgGmt+OO4 z+ev_`ct9de6Sa zeGi>E7&`J{b)T}5>`AS*=b7%LzI&zkkx=^+)xQpZwq3xS;*RT2T-cokB2_&C}^;UtGf}QXmRA;#&2QLDkGVnKDSenQ&miiPN!k2*!Svh=V zEB5%xr&bzRHpQG7!{PYll`9}_fvka*t*nCh8J(%6c!lCUiiTB~ZMO}Sl&W0Voj$t29``Qb%gQ~aCC7}sKJ?IE^h=C!!; zp>)Q+Heqcm)_-jZ#BrV}YYl8192?kF$gX4yq2x-og351Ri!EINA{;}fB5Xg5R;CY~A6A5A#!{S0*<31FNM}kYZlSn?;vS0cP~1=PV~S3y zTSsmFLT7GJyiJj>!!dZR!`^Ka?G$^h!}Up_IA$HL!}N7Ho|o6*Xg5%NlS)=nJV4nq z>u{&lufwZ^+~(Z=_gB@iWT)P>dt| zwKxH;$Unu#^>8iLkA(RAdOS0K{bo4cl7+{6*JGRSugBItqxdD1St)kNH|udmSE$Sb zs%zYUwc2gKyUcF`){WWFV}pUE!f`7$dIRpFrzp;YXkg2sd@Ht|&TOSvLGb{^&naG} z_y@#xOeygyX~+B_wqcPaaS(e`971sv#TgVAKy1a9m*B43%uzyP2H~O&PjqV!_tj|U)^XNvbHG$$ZiiUN1?Hyq;`2 z2ww5V+~7Y?mQPYyJJJ@ACwwe|4`~nOOw3IB7-VLxnLp`#2W+J^{9*}P`H;JuLYKDFFT!D5`{Hg}-KlT1g6IsiZwLqagMesfH8` ze;)!%cAy@D;V(Pna!>ZlbX;8<`i~QarmwnlyLLT>OCV2c%a(y+991dqI6bjBkbB zkIb!`3pJ1Kwaw{p91-UojZ!^70T1+KJvq~zN zM;+!%I{^ajYAKgGT#?H8)$KsI#R`gwQYj|ZKl+!s_YQ|JQ7#-C4EH=n_Nr!|WM*+73%ZXifyGuS_*4AL{~U(zDdEcj*-?|?GWbMWT` z@T%++YAxXv`{YGj-7MCD^o>xs1kJEU&>hHyOSw?*?u#DTDtrPsRCMd_q@q{VC^X&EVpWzxttWN(L(OW0IWwa_zE@-w05D0eoS!>7P3 zVY5jWgkFU2bv@Z-p==s;6X*_G%9cqYW^3CFUJC6XMVtGtROllp_s^Y>YQ(g;vJ|9}l4O{RJuut!PRq-ypU zshIQ;8%f$n^*&~gla5gC5POnzj&zLuk933NWRpqCLL6BQn?mvhUF9d(G*SfRPOurI z?xd6KS<)k-}sonvp2te{2w9D9d$K|F{-$#*F?K-Ak$8bi9s4wGh3y^HK~ z(gKk?DZ>*4TMoLx8rT`it*2ZA`wnuRY%6FJZ)BHA?~|^wMk;v>F)9@JWWauLD7g_;qF^#fu!gJsWx-2-?K|W@ZKNv2m39 zhXqi{8K7y>9TuYCos&zsJIto!!i-id-o03bM}u%^g|QmY9d?&RQ_1fscOS%pJXsT| zHGi7g{2O#oYRjLYl5Q_!E1rBd<=T@v@Htd36f^}s+WsZVbq5`kEPOF39aJm%^8)I9 z5$F!{=PN0zM1;_=Vf>JNRCLpRmp`>J97GgI`emw zt&Fk9LGYLE_$O3y2IYG58fs-eXdds)Pf^K2Dw)K;rrhgPGKrt1+`E+P!!J|rGs^Yh zS4hX6!TyqYBk3&UOmZr}PyLOjTq=J^x!MC!Xwy7bYxKSvDU_xf06F z=POBX39Tl5AXG$c)__jQ^Z7bz<4$ zySgj{E^8itmwHHE_SiB8`oMrII30w!gH-QjP@`19ourK*lTyHsQxBicvgO`k1^hIr zd>N_`73|4A2hEi?prFkMocmHL`4JDGk{c*@NT`Bzlt)qSV^D~EjK`49QtlIO zCpD64co)(`(s4e3)Oxusx4(RX4>sbp4PG9zoUs!;#h3%Dn+#GxsiYC0OywjWZN!zI zMmojQNiTz@DPQsl)Jh?U!T0aeDYp%zf@YFFqq$H5aF7r2OWN8I>r(Wi7 zk){jnAuSZzOZ7H_uwFUob<&UgJQq+%fpX^T(*X}3@?sZt2uUIDFqBosw*3fW0t33Vpb z33Vei2=yfWE|f%SUZs8}1$wwEa)T(>YK69fLrvRZ@3sXoSkFgI5?qx45PTQJhnr-$ z4$-6=d?YD}^d}z;f}hBPZm_@j7;1B>(339p{^Ao%c%^fx-c6oC+DQ7FXOhZDxA-&E z$^mNSA3lp(IZnBM`17Q5q&s{r>37mS{(?)%2Rz%QB>Y3grKBt^B=MCvKUG@nQqLsi zxYTPUEuoQlQ%Mgg58k@y$-0r+N-Iqq{^nF$_~FAsc!wNk%UB19Ma;iLFx$pLA-)6W zgV|vgp`SUSpW*B*l{rr>TxKy)_czv6kGJUjeW(jRapOH8YR8@&%lPnK5Um`u!4$P) z*E2SF6)*g~Dc%QS7dq}ku|LHWjw2t=`@`7M`Cy2XAsX0BJ`~PBPdzT>kHYaPDp|@$ z!tq;t48%$($=PB4B*fEvBE)(=8R9jHcd30zdK%7jkg(-G5@v@H zY758DN-w~1Hk1iwi=~$!u9R}%%qFPI#qka}6U-{1JoGCqgZPQEh5{QIpl2}yjTwz*Augx4W#2oly&U_@}EKXDTTD^r}hGXNbj?VldWAAsMcQ4jfISjF@@_7e?;R&TjhcP)5l_w!i zr8tvf7R5yrH$zltREn6(US%ZouFb-!8w@^P>~X`!4xQOk zhSomq*$g}~7?Jr05x zOm`^kTO;n4(QpQKEFC{*>RAwO^FEoL#3D@EU24Ih@_2 z5pomug^w`sC+JLjAo`nz!$`tSLw(@S51J-JUpP}7=QKEv$J*Gsv)-mza6TDY2xh}g z_z0#wQjIgsf%8wBvLVhjErPhvv;^XE({hMwOsgPnFcm>NyG&c)xZ1QG;t|tsIP};PFzttEa@!9(p@Z8;5ECK7A9!^81mbkJ<8=ImIL4OoN@*?o zo6bPp7u@O~V!vFBq1to-j+eM$@9Uvu&R&PunU%SXfqgaE?TX&A(`_}JsdH=Fp)32* z?Ps6nyY+XsKYYgIJcQ`Q+PA_L?%WC=b9%JG{V<5);}kPm-Gug^Yjp==ZY#XYiXd|K zMym&KW`bdrIDetlP-yK|tB+v(cqW(yw8lr6$kq?wOk8WcUP-M7!@eEcdZ>>N zTTZdM^%yvFhT_i z9REk|IR4L|onZE*JI=QeTHx$9wS$isc&A`AdDx(qHtP-^*m4NO=I0lG(_}dA8?a@Tdr9g4tb) zt=r%+ym$;^Oq)Bdff zdz9i+6sNbvUKY0<4=pc;*nGVT+fIS&^%}(;6w4rT_IBGD6kmi`)piNQqZGe{);K%g z79X*Hq%*%z)XMxp$G6)K?l1y=Ooc1v>A4*0;yswld^}gddUi1t!I^rc1V$U^`6?WT zdG3Pa&QP*>RQ=$1OwJ&R!zhlRIELalh@Ab8+Mfk68202|Sfz!Ym3j-yJV!zcYbkD` zxRv4_iu)*5Lu~GGndkdZ{&y8)gaKm>o%x1((H=waDsa}|847dx%kuz?;U2WWSu3yi zAqIG1)=qJ-*D*NrwCM!Ig{CtQM|u4Kagx^+h|hZc3en{8N5@?Dk{7nK#tX0eZZBNb zO0S`?PX>Ga1Lu#xdFavWzCO--UXpoCj?xZe8;J0|Svy>3-0ko^SUW7=1I{!+iwD z!R%uDp%5F|_kms(n)*X*q`Cao9{2N~6dzDL)n=I4z*>2yLB#K<4fK6!^Ln<2^J8)> z6oVjg7U8`S%2dO17RGK69o}Q;vF>p*?)E1sPK4Hyy)z-=I{fz-$J}y8JD%=RvgNqB zB%XQ1yQQRd+?<`|Qn%$8v%%~M?>R8$#|_!A0+YOR;dq93KE!Nj4ZdIUZrcI>Wd=Vf zR`+?Yf%Do|jmLiPVzb0jg3u+VW8ND<(}YfYZ#65dKEsv z%dlyR19>t3FjOu}>~PTBo~;kpl-i-#+<|#Vps;r*C{ou+b4Qj+(#GP;u4ehs1-Z&j&2^=KC_+0lC=IDY_ujS*@mXUR4 z1*BXyp~IhM_|AreOkh=-Xw*Gf0|`q$H1}lpTuSz0De#Ako7b~9%O+t-)zX`lYB_2%iFtNz zDcOf*lC&B1VFfO^zAOb_3Mh7DUsli+g(clB$*hc|&8Rr&Z363)omlFG(wIa;MhS*c6O;q16e$>FTtrQ~DGzeh`(X)Kk5ZSFIt zu}m#TZH{1NE+t2@>n^#G%sru{l~F8~gsoJVN3jH57Rx9$UMop$j$sWh^`2lUJ+YM% z_I!t6%M)y-&|*+JD->D|8q2DL;9qo>Ct01)o(_?gaqPBGC1^bJ@1?c*A?PWVD0B!k zfn^BQbZ}TEvK*nWNLz(!Nlu~j9lAov23@@@8O*)6*29k-l0mVgr8M{du|!fn%qZ3J zKQ>cnF=!IoBD5SdnVk~a2+Cylg!Xh8WtqZa6S0SURtcKQ#tVH2dYY{gIs}@=4r($r zbr@@z&YFboko=RV6_ezHxm2Mxq=lp!X7O2Lp3Vw|f_x@eX0S?935)fK1f3S@>@&&o z47)D0r^6)6Oy=1~TZtY%Tg}h1IH4q;>6Te6O=u9*%VJq1ZIx!T98x~?Fv>EURSI?X znQeKV)eG(EFxxVRdG^&-qK8kmWiCq=O7eNxGLK~m4T5?vvaKX-M%k=N2xl~()oLZ_ z8qH_*q!Kp5XF23pvNneiK5Hy5F`Lj6J{v8I*+5-ySaR4jp{IS`vMglwHs08#X%NBYAw1t%lm4RMk)gDGHt*5(xz7npi@x(Y?V=x{_q}?_+dgMo zq_*x@VQ$G;I-YCEc|>*G=aTE$@sg!nZ)JGLh8C%lJN{~^&~vjpp0&KAE5GAkE-LDH z+eN!NK5)@TP_I(2SNk9R+)?#y$^F~0weLQ?Bz_O}t}b`8x1~j9vzPCC%{jG`xx)M& zYoOI_bi-EOW9EUFZgj)`s#t;$j=GAa3t=l&EL#ZYP{m4xa1K?hObD;T`|P+7UWfNt zoe*A!{p_|7UWffGd63pS&V4_t62j}SpVbQCb%1(8xDp?*put)_yeic!SqQI6HA@%5 z>+m7FE`+P}A@dxf)x%Z#kOh%y81BylELqEO+!F^_x)83}0X9ttuk-bCyq7>M$+$v3VclB2!U$?6g_+b+Usb_%|`=Q|A9D=I~j& zqi+q1)n)blj3tts499t#rITt*c#nO~wrZm1j?dXuAzZT)%zZevnakWPf0|FQSQ7RS z=6i|_Bx!Aa$!3zYHosz3T1k_S#o_xEtJQMU!&fZfF>F)2DyP|aQW1-=boD*W%F-~0 zJ@oQD!;b43;9JYClC=K5W3eNs6`I3Y)kmC#VCkc=WG)*E>vDnRkhDj|ORPZ%`>SWl z<5&{=t1#Cy&;Q8(Kf-eOI5^vq;akt*^xV_Fmsu96(QQ7g=Z~yVXt`xJs7@2#VtEnN zAXH)b%hJF+$6%X{{4mL1liOv>Imkr{;bTDqOA)$7B}a>TUcMFP1~yIPEWTK8RkPqO zZeZm?co#RYgQ8xj??T_7*m04I_g&)qGpi-#vjM)#L5WY`$V%84-(ufiS&qkZ!~c3qR{W#7HNe=yH1*;P2aPY zyR3=S$nlEZW%slkUFm#o(((<$g`R_gI>qyW@MG zWszz)<{q-GE;+`lv>d~n#Ot*jGx%{onU8-8+stLbAcY4_Kxyl#ay-WV2Klx2b(P7_ zz*DJY2^;3;>1X2W^?GK%R=kST$g!R~w@t)Wir7fMAU_YDE;Pk2+^-EkpMg0nY4U?V zYCvB#>S8~KUprmP{CfGd*R{cKpo?CGoOg51W3OLYi`4yoPrB%s-_w5Z;}g-tF~2!} z@FP53Oa0(SXSz!Knt!ZPqaO3y>t}Jv9rN>b(K$aq7v1vncTs!)02g)fx4LMQKfW>@ zzp#fF{DX9zgmDJz`qHn$9O9x^{adtI>E#!y=Pvt|`M2o0-`g(w$M1l@O)vQn)+|hy z>hG#n|Itk7p{1mc|EK=0`r1E2Z)GZ!jO3>O;fxyH@H#|t8wvN)dH+bBspU9c6+1sJ zgjdDEZ|j=l*NK}aQ7inI-%`Igo}jD5uQN~Awb!o;&(?L!uPZOrbjAH35>M3is(%tcD1=wD4-cB6mBg#rhi?_atJ#Owl5&~9e}%a(pF0&x=CWa= zn?ld|U-R$FE1%YK%OID`m1&xG`CEOHc_pcl<1XmO>xFO^^y8k>v1B91UC@sY6vAuU zj~^7mz0{942;mOt&(mgT^>Byu=Q+B*_8-VANhPKa{crjY;5(smdy*Qt#b>`cg~yXF^Gp8w&5!VOp^$(F{;52hRAinJ;1=*G z$2RDhGQh({1)#_D+#3NM14i&d(Zg)WjpC(3Sn_ecRR~Ky!OKY6W8~Q8Ry;lkm|$tq zrvZThy42c$Fc&Hdq}ldfVE%Me1kPaRF1BORDFfzp1=RpY78D z)A&toCERefGr0G&IF?2?ob3!AuZiPqXYjc~INN7hq(@fZ-WI9(fen^?eo%~Mdtg<-a(-TDf1uTOId2j=0pl#-?l0h|8#%UFz%w3 z$qBzXS{tx~SCX_D?c(S4k`DrQ@g|p&yZO$SsdrkXJ^VBY+f=Q4_;pevKM~Z?x15`E zv1BeAXbtnN;Auj&L2a$?@G6q_SYF8oF2R!8RjK4zq+E7B$jACFFI|c`C&L|5#qW`7 z81AzwZp&+~cNG**(q{BNFDGd;s^)bjlLavUFUeVm<2R#mdDo$KMyhay!9jS)n{=CTVi5x!mT;%R6sU+Pi7rDPC+VdB=jRd$#P^CPA@ zE;!xVqDjG%tXK5h{NOBWqpo$qFIj)lwLdt|`kSt=gZG)6bnWtAX}#7gk2}FzH0bix7%KDJ+6sv?Q!KDTvTnR7AaE* zSHdDy3gMbrq=7|RNu0aCK5CqMfG%9mU?Hd41oc|fIyBvC({tXTldKWC?4fzq7+sHq zuC&HB%VT2bSxa2A)On#+-xj?RT59bqWzfj-*v8P4)-FxH}s6P zyOdUp!aJ_Y+EbdQtHRn_${{%!jx$j@C4}SbD@CrydNmBM(EurK1FDF97J9)tNXjNT z8O~vdlv#o~C&M|UNa-6%CY(d6WGmHjIEPeey%4U_qtcemS`KHFCRLJZ7_R3CY1ONk zt6{j-Bc!@5s9g4KXruLUDf=~)HluWDm97fwlhPKFlVK0zq_Q`#q}Iv=DPgN7>|v60 zn}n^TTPI1W+c1}J!k-#Vk!A|vPn)JltAwtGRs~Fv%7t#jjHXBjN!m}-rb_YKwI1-N zX-`YpB<$f2>(f%DChB3jbXo{|m@Zux_2@TZ(&!y6t;~>Ck+79p))~?fQX@CnD$LJH z^`sK!X_Et=m2!4sy%J`#xdqOW*qf*#7H4Z8m?do$8e$6xd|vY2rRApD;sWPL1*8(T z!Ils>S8CXeIn?05Y{|P!D_Lgi>id!u|CXjhwh@7gq#RNSJ7XIYxLB$q;W#VIIZ}hj zU9wFK%#pnJP@AToZO;VeO7WW5CEHw3hS2Y}mjahatAzfv6$Iu<)uP@lTXEnrsZQvj zZ42l&sn}!++YSoai#-%GbC_GeGAUlj8nz2^sY0<~<$?K9rcm#&eSyoR9HB?Tssmq< zBFnW_o(lUIv{UH0uunj-Z(~lI-wG*#qbX^EsEqT6!J(RG#u-^jLNC~8T)8{@_0c)jnq3?XGzH6mvLd(Pc3@nrigtms= z1Ch(`4G~mjt>ea{K)TgM#*H^E>7@GH9bTP}fsIrBbG@ znL(SRJY9=}HcLBotqXcpa_TAz+9EaRIui7nq`ceQ!w*5POEz7%g5Hn@>hccWDrM@5 z58fu_=^7KfUD_%1rJq~C4yjt#g5Vv}d7+aqhn*68PwVfpUw-hLl1=Ek-zrdw&_8|~ zgLg?Yg*GekLA#|wO{QC6+k$sXr%1&nDSS8RJZY(^P59fvWs<21d(d`WnY2(7^9!$n zT$NBLsY%El{vqT%-=}&k0klWT6dC|3mkNZQ1idX)>A9o9l~S#qI~u%C^4zbrGCTb9 z;CH2Xp4cPUg&MmCsKi~ zqrsm_PN5pe)ksZ3XQ0jFl6SS%%9-#p!6&4Jq+Ir6_=Vsvr1K&-BygYkE2)XJj9m|J z3_dL-f2h?P4!JYZXkAUg-$>pEv|JqIzLl~`OWD8SH-o>Es)Wv2S;$!_;Ug>wpAsA4 z9&%2aOUh+25ndtZrS(EdpbJu!&=}A~saEK@hzj#1$#f7~$z@9-_JIZRr*#3y5kY6NrM9X~!tz47hNE=vVM5*uZQnt`7&>vD0 zX(@A$tT11fY)7%)Qf7`UwO*GJNck)bayO(DU84hTNauyRLGDj!)iJD>&-#)Qoz#kH zXyn_$e@f#?#ilWl!$SU)N=Z)sOymeq18D$&VcSqX+pEZpAUH; z%@xW8F?pv@5lE72^?J{TD6(=~Yo!KyH^}iq??oOBHp-d0J`6U=TSz6WI&x7+EBTbJ zWg)F)_PN%|r;%&S9`amL39F4<9nwawByC`qBa408$oE9aaluu=ZDs!xTD_~0s61ll$@Bu${a`2%nwW%TA#lQJX`&qi}Pxd4&HO-DXYw?rgG_gfd zXF~jB<;&(7oev3+{WY5>G~-oP)^m=6cQv)BQ0fHqW%d9k*l;EjPpLImXvFH zKgumMOvd){-z!IWEv2?#J8I~P|sa4caz8KiV5v5FC;BBrAAM%B*&__p#$VZlD5`^bTh62g%^A|KJ~?K2OP{lC#h zjjNj~+k~**qjG`})*CLT3SkeA$>}5<^{CJ^xk}`4)FWlj+U8MD2puiQ>UuhKjGRW& z<}g;S`xZ+Uv8mC|hmMo;zH6?xD0G6ng`}07C|BvZywLy2w>6nwj9wW!Nrsmgz?XI% zCdt!;aMY9KY9SnTrtBo)sEb0U$ewjruY@g&E)AV3r|8-i`m|g~(%PIR?-ar|r_0qs z*yarR2npNl68el>CvvzFGv%w_V-J`s51l0|KQwE9=xjNXq|I-xJYLTo3w=S()^#E@ zTP}4exj;Uy=dPF+%5@@#*Kd)0QwXo$V%hT?_NVR0m*rR?9CePILc)>NhUUr{x-Nz; zl^5#zC3Km*Ue`aN1#-0}Q&IF;%SyRUXj`;mTPa^9X){_SXPs}JZA`!#c|A$Xt(DFO|#gml=F%GkRP0Cu#k?EyoFA zfA7cxg|NR$IgO;vcAuODGvYnA{3yqC=&-Sex+o-iUE#|PTPR@ zc2PdBiJ4=KpeCWtv2DXH$?;dQzZyO?c8PDj>?Aq)s91QVlU(pC=HRv9u|8pt6IvA; z6m~^6{ifyi#72cR$m4|$$94_-N#3a|DXdYxF7!j}kg%WSgeI(~?Z~V0KoahdkzrTm z3|$k$n&fO<&xPHPZ<31G!`Pg#f8_XU*owBZ?#ly7PVQwd4tpRU*K(|z{q-=WoY!RP zX@4_}E2iI@>s6Q~1&?9w9{ug*VJ&*pzQk9Tx(L2sYSDN*%9~oj*WvDidTFF(po3wG zlBM-vnr*KMGbn|m8n?yvQ=qFNx5j=3WcmYpZ*;@n4N9aC_HIy8Ni`gMHz+fOuy=z} zMJi!$+UuZR@^x&bh<#+g9A;EXg}%1`5!On{yrJcOwBHZ&P!0T3wsoWHDcUZ!` zmDs z4R2Nr-{LzlJY3{zc$Q;Yc!aKnj=AB{N*%RQ!tx!9!(){Af3SxV_J(6kxLwK8wKF_U zDJK;{?m&1~CF2g3EMof|r^CA|^`sK^wc}!VPbL1Y*2-1K_3++G8ok9*!U&Tq%UR#l@WZcJA@?r0~MIuIg@Q+7UVX{DcXorJ9fMD$lY@xyoEJ!#lVetTAQ z)QCrwSV_|>o!W*yrj(NK&Uri{O}VM%O!F<{K;ANyG;QqU7MiBSlN#M{FQqBzLU>oD zDcL0LK1x$cg>d(zDGj82hL6x`N|1tW=CZdsO^O(yWRY<0(<4SId75bMqm)8jSrMa@ zY7#y!EsA(TX&{xb1D#eyj8nF#*k%d)zSH`MroeH$%x;$`O)whi570 zh489mDa;*9HqsrQr7RS}>yV|KB5AuWOPT9|CAGbqrFgcb9_S9pQpS^T@1BX6tt=G6 zy*pdkLeg59tyF6{wkNI*a`E&6MtF<_J+EYuO4t{1mm=mUO}c)Kn5)>lus^Mp7nEcY z?(4rIUQou9Y8a0CMWvKf!hVap8}XuYlcYVX%~u$`L{e*IzG5bo!1Xgk&R0@&xkoNg zGKAjnkpmYfc_eJbEAl0!mXvS05$7AZNb#l@TIMnL&Ox9|q2SI}%r7fjgc3T3*>aQy zp)sAKBbO){^dihW)4a}|BlDCTl9RvOxd*6LSO3W6^cV@huTqOT`-HC0^;YMzmK91I zy+AXMecX9?xfp>I1+j9jf85&EU`g2)ZZO?tUz9^+kBMs8M2^dih$ zX72J<FyXXJazR#F~&ugl%YDy2L`D|x(&G3o>5x-P${kCkkjmb=m= zF3PEtMQW0|PLKFp@r=?G(Y1fn38g7o)4;AHqP|p8W1973)M=$$XlmEVQD>BtSS|Nb z*Q}^-m1#m7y3UXKPB|j=bGrUlw&)sTYcj ze>>`mlIhUu4T?Vy^^845T)-~FsW(xUrON@3?>$__?d$(cH9%^b2R35woGbW&onj!Rbx3GY=>OGQ^ztnAH zw5PhTHdF-uj9ix5J%0$c+u`jyKjP9t`3f=7{2b$HJn&_2=7S%fm zOX9QdoM?+WP}j@R{%QuPhTdHgq_RF(Qv0oCkZS7NT+b^qSdG)ftld{fhpM%MFy~}= zuY{>Lh45YpQ#}V`E|0}@FO3dUQ-)|IaSoB{>7kUPNADQ*JV|?;h*2|#VGhT+BRWPc z)MQHSzAw6yS}By?{Vz)=^|a8`?lA$K)Ow-0kc(4UDz#!-2Dv!ZQ>di-2hp9?IH5PY ze+)|21pRqix~OTooY7s?OkD>p-PCMdUXeZ2a!s%jC!>3+r$*EKcvbhh=tR}?anySD zW%nPW`>N~5pi0SlGbd18ZU%vHb6}y!Rz_D&kh)%-WEArvq5S-y(H7= z=GNn8bc%Y9gsbEgnWB2q3pAY!dw)bt(`3SukE%0CTFFP%9G8-hsZN)YBh`9R3G?f5 zH+rO6FdoNQ#5(s-V@9i{r!@8N;U4q2dWwW?R+yhq>$Dv0vnSM>Bzz^TIpzs<%LJ^K z%SQDu$Bb38Cu*7j8mHbS6|n_9nxdal7iM6tkq7w%#Y|MoNm>sXYBfpQAsOm%Jr^F6 zq2AMETGQjKWs2(mKWru6w3(DBl-j*(%oKIJ(8xIWy}i0nXclP;sf6wB;TAAOtrU8< zM^C8Npvm-6kK~xCsxk?Cz-Om}mZ@qrDVLq>kzkvqHjteBryl1l)78YuG#2(3Ny*gI zDgkp_NqHi2bE4l1R&@9zFRa0g{ zYRq%$G?KPTS!y;3$2mGCOFgYCGv)>LItjk#OK2OmNM%oBD~)dW9-PH$kPyDsVX>Ml zgzvLitY!$|yI>ZpIYRgMt|EmqTn z@Lf01gAl$u=w&rW)Wi4SysQ=q;k$!!)hZ!;U(XUXVY=1>t{HrAD}6cDH3=2wJT;SY z@a~y}7h>{6u14LTuqXyTFqFP()Kdw|@Pi|Tet~+gs0T%xSn?Ise}>irmRzaYgs|jl zHI}43Vy;#*h46JAYt#agwv*SW>q#Z-Zo=xAHLCkF*e2#)iz!rXnoLs99Wh1fKuyfr zvkbI_q+Q#h=5cy_)T48xF135lDk#}JhweR3Mi=WE((_PEiLM!t+pMb)>b<7c>0_xd zzo9ni`Xc5HRhdb1cfs(y zq+E8e=N0qYYWytB!7I6X-Z8(UkL*Iv+L%hUoN^`Xde6Fu_f+R|Sh9q<_4+ZUN;PGn zwAFoI^(JYn^u8MRpIovo#rD3Msq2@R{c4>ilXtH_V?I)EYohP+K2mM7sRtI=YfR)p zHIY=pI`z68b4Yb+Ia9A*_d%xTsiY~bSF!n!8Y?t|lqK{Em8=qajdFED@00xJX#Jh( zCC468vxOR=-eI*~$kZE^G8aqcvdG?Y>|wP*s9Wz=u}9Rjd0H!jdKa6IstvllVvnll zU(o7}?CleKOf7#=D>=D$KV#JI?i_nUy)9JQy9dbh z67^?#v-ercNi|aF{oac0q?#b~DdbM6=|YzwcS@b6iQVtL&-{hz6l#;`@cmLXE!5id zPdsb+QXME1owx*YnL;UvSIl3kb4l7A{*}6Z5!S1r@0U)i>5EbDo0!Btv8Pq`vZmRI zgJaLATQt#g<2PzK3D+|<_8ZlytHNBX)@d^3CXR}&Rd17W8U9|M1?*M->o>gZ)! zz3x5Vi{*v_T{W?ip;FiBSjAAM>sqW4{s2^Sy*sh33^rXCVm%D0x(s$NL&9<_naBQ3 zJQ?j{$PmIuB8y>_P$4M5P$h(qS;2<$B)mo)eQk!DT8?&dn88+nZ8mazK8i3T3gPon zlp#|SJ&Q&g3PcW{ouUm}L=K-*qYX!d@HsWw&>)1*snG`0E7SwMJ2u)7D}>Lm(S|fl z^b8wqm@9Jl3>$4I6*+u&Y_#E^$l)_=w4q)IpJAg7H$_Rj8)FPXD`=HqerCJfkU+{e zc_szg9fouvYmyl>O%s&#wsbNq)D>orGZgBIwRbU8ih8k0@Ec;oX`zIqVskgcb-g6~ zzSv+|iM{8WlA&aGL!>6?p~BqVkRWp7lFnMX8`6d5CMmY=hG{~0zxOZ{2;u$S!%!-; zI%&3Vf}vJuS5n)s1Ve)+>Y=CMx-M@^PlNj^8VlsEn0px_HJJ`4b+`96r0BT{b8kcX ze>Cks%KncE{-d3`UJ2-JaB4Drl{CSUWM~ljk)*7~v1pINNd_|scjOgwk|9o$=`UEb zJ_aZTUp1;@XrDxTi<0}CvkcO6Bl`@n4>F|Dx@hm( z7-YyIIr*eM9eoEIvW1=n4Kd_sD@eN_rMVT4`F$R-rx;fKC%1(J?^UPVK`qB#=`#XK zUM1z4O8TVRhZ-W+;1$a??I2Af<(n$|OoCjw&>_-wP3#M3WvIb@E!AV^L5~=MNO+~E z+lLuuYGO@&X4_K@c|zCwyksA4aOx#1%#RuBMecT=Jo{sY+d{nWD*FgSP+{}Ft}u@@ z#Az~_`ku3lG-Q!#xL4nOkUJ&h+xLP0C_`Ei)~n&&><|1$8*J-PjrAN44TCA0fhE~!IH%ahW^nDlljy2@0$6PLhKj3K}XE-j@uWy&o@djms z*56|=mZuD9C7Q-SZh~PvsnKm>-?Ns9hHRl(r1e5Q?JxRHG;9@G4E<#o%7vEqonV<{ zI7P~5MSVBhCmGT=YUAA0cbk2(VWH6OzPmsLn%v%oRhnYhDfAKaH^p#-gx6@Fd5WP{ zSA~75;kG8zmwl`4(+%cQ>>=NDw(lWOq)JXAM_H&O7-mD18(5Ucv&BKeaz=xJfEvA<3uh zvkYaMF{k~Uc5d?>phiNQE$aFo_5P3g{YS(6ezLdJ8|HV-K2L9RnBPtN3od$S&vucU zV}Xmj951=Z>{#fcP{(3J6^*)v5A$<#!E#x;UH-}%SyI8RvFy4w5-``gPDY5`N_W8kgn^deT_@+ z*X)HZdT1{)lu}8p&0@nr)_Z7w-4ILC+T3bL&~w-9 zTMb#d9@@7VDqTwMFdWo#*X%nC=XE`_?=;+VDY?sFdZW3&YxZ4+NL>%@yA3HMt@pR| z6&&a3ZE=+|dXG!aVJ+9SIN4#vzZimF@M#Un@s3ItB{|-6(GbV}W_hfDJLf>N)G^SX ztDMmvx#S$yk9EBU{T+5uyyK{gk{nJK4RL(dERQni?_{&o5zwEjoYALTat`a4x(+~p z@E1zN{0_kU&bTPa@vV!7IO>|^@hS9ozFF!p=+9No=nF16hxL-Kv(VpV7sWe%bWxI{ z(M3ZXzckC^N9gZbv(!P*pR1hFzq{ld*6X@%L4SX`DBf|?MM;i-Tr|XSw^<%izq6JH z%~Ct`^Zt*V(GOj64l6f`74!&#dUCVWgnrlTvT-!+LG3Y8F=p%XwkXD(x<)xv<0)NF zIt<1JQcdzB{mxlT|7jDn7599;DYM@shnq1-XjZ>bpg5uIe#Pci#xxSV8yD8Bl`%(` zGrG00QV4gshp|alyrZo#a+~(3u{b%&(axBmYlx$Ru~cZBr^9M7)(YV+_cJQnwR&Sb zozecrcp==^R%4c~ct?=2Tvw7K)YzbFh$GzSzoWSohc()mE`<9!)>xp+8ErRK3*k=g zWW1>>-qG0@w^M870L&rYI8E0OM-Ssxp%E~L-p2DnxRaBN?r&=KhQS>A7!!qX?@6BIR+V#mj(;QjGEumO8SH)g&h?>{nra$#|Wly)OMFqp2KQal*Ua6x&P2RFc-i zLgOkeN4+mHW>jFwBDSgD3P*19z3EZbuh_9f*T?_SnSPrfx0C8=b6;YtB5C*L65~N# z&gi8^r!I$enemhm-l@xtwYuURuNcqkN^-0+Hs~7SSZi$3L|3}lXnGq*-N^AyEjD`U zaz?K=nsqs>CB`5jyl+d5k-Fj?n~ib0k{quY6Lbx6Y&9lpa>Ko}(>Pw_@V?z?%+%$K ze$zNpm&3Z-I9CYo;v|(lx}f&$wQb8}8Qkjg=yYck%niYF*Cg z{l+7@9M)>%aUr~?4;WADigz3|*6B)e95&YL8sa!+ysF6!?}r+r@{YEicu&_D-E}#m zKQnska#%k%`U~M5e$r^u74P`M7^^GEaoQNKYl!0;W1=RyMGo)qv&IZv&geSh zG+hqs55_D}5AV(M##JJR_sV%=naJU8y1ri_#Doa3?xFBwT3rJLuxPYi|MHB%+4G7|fpn#xkQ3UZ`P!v$q|9ejLOgaX* ze)rz*_y4}<`QWLy>YO@t>eQ)I)zv+do*Jg)D*n#CR@U(<{?2}$DZ2W85^>7zTtg$0 zd&uAI8<~?>TGFWlBo^Y`>Q&spXvg6jOM5j(eG3?Hkv! z&%~+ZeG$LfFB;VO`@rS)mQtWx5 z?_o;r8bbfpLlr~_{k(??3{iC7*Bh)>^>C)7ofh5u4XTr4(Dg}7)hXAd{1MSiU(J+! zPSi}_$dv4_nf`%?3JhtcAM{XloxSwaOp$jthIs3i_1wG2OR+|_)Wey2Ox%#tGSWw1 z`X<#qCMKlpi}2O=8Pv>_;7C8+dxP8Rmz@4O#PDxh3p&3vP`@Oasd*_^M>f2XzfqHMI>Y6P}2@DC;GmJXY>Ci_Rb(W;S5Qje5sG}Z&^hE|mJp}1* zNJ^m|f^_FbvRa<&oceW4NuN3OEDseO>C{Ulg>PM59~q+WlayGQ5*-<;_uk|lJ5En} zmWP@i(OR!yirzez7J0RPzpT^A>TC2>21Qn1qi>Xycr~SeWE;KSpf;rxM7Grf-{Ky` zCe*dl(GlU{F7pQYegvu@eU zJ?P(}uCpF!P`{?^4e6ryG$?1PCA^ECW>7JyBO|-&+YKr!bu_4b2DQ9PWn?$Kbc@uv zrOWN04ja_S)GAQoZCQ6)>TFQH26a#B+{g(15rcXn6;Gb^wFb2+6;Gb^I)i#E^`Xc} zz22ZcOMMj7S%W&2Iy*E<4}3@VAkvOHqx5it3QU_F8m*@pR5a?M^+JQnPOFLRuJ1Fb zVQJ5RDt%XK8JG3~sKW+zXWB?mWp!MKd3YIAwWRdN($2N*sn;6RxU}_=J@qFEU22GN^ab_J+jhHIjnPmz**B3m)o2NbWHtPp0jQjML8=)Ng5DfwF9q zI(_>tbjIu92GzE2U`V{))1c`2ZXdnSP4(Ry(np_UP^o<_;eGUKrsVscuG9Az6n%Dm zo!;|3>Op?$b)D|J-92`^B~EYSp}vm1UXSunfguU{BoB4enW(=ZDLub0o;BPsEK{gL?-FZ9n=HZc9rX=v%IJ9mfFm*)P)VFI?uD)H?aV+KP zhZ|A)hunh*bVY>b>S+emk*S%I(yw#v4awD48B_sN`wYpLZn5a0=SOZYJ=ZN?Pm&am zs8FvoC>led{;)yO7z*`OMmriqp?-=fdF3k9FET~D@a)J!J@8}ci3(R$WRc#}pr*M- zf|?{L9$%3@(?d;C3+i4vCa}b zOHx?3(<4gsQ64HWYKUHKQ1lf127R@sEw&w;YI(<3 zuD51NUePP`YnhUfRiP(INxpBa&?hssO^}@xdaZ|=2I>>0q?WPzL8d4o=S7Xx&w8i@ zQRDQ$J=D9@QmNN^sA*A^dYwU$)f4njn3^vF(rcn_)x$qyU$f4M`XmpvJZh5ufrknV zxm|Dlx$J?o+@W7G~*xx;6dvkeT`xrle)FJo7L!{r#xf9;$zd39K7F5u3JjU2Cw(EuPIGj>Ug4ppftqPh zS^BQ1hxFba>Wip{^+8NgyTFhI`eaGz z_oVL)S*R~EsQFC2VNf+p?K7ws(-%4y>h%V-ktzI)G5Wh(e~+nfgZhN2G^S>W{pq-y z*R#GN$@$_$dVSO*`cg^p{llYr9aAy}AJqd7u};{zJnAvM!b1gyEYdf6sOb@l^}xd< zDX-{D^g)u+X~iwkCmVI-!6o`qre=ws5Ir@z^9Z%W8`3jgjCx96%hY^vbw+*EQr&XY z-86 z>HKB=kEABscpz=~X>SQi628s+SrR#o1bYDO1vCYxUt@Q#0>sykPpZmV8 zPnJ}(xNhEU-_c(%s2PdrQSa(&4at~p=}}wtEe1tb!}s(Lm^z}|m=P5Ho_^7&qif@P zy5$7-(2TB)+x2S=imr{@^(=#;YvXo(ltIz8al1ZAQaG(W*KNB#)2O4X;rn{6LDALl zeZ9`0=xX@Be%NS7=aBbx-;-{Cj*fg^zm};Z%0n4F!guPq26ZT7kMje))Sx5xy_Yp8dcVG!Df*R@2c7%%eFjDI z@P&Swsc#gThl9H16pvPr=MU=g<$?5fb>3~i)RSbLPP6%yKFFYGRu1b`21T=SSYOJN z{51ZsUT4(NtQ^+Al@y;*4(s@lWr`j?9Uj%gnYx=#xJUI2gQ8hEs#i!!KH(nKA2#Yz z1`I{rYJ(cU)F%dY15>9Zg=oDc`l#OK@6_KcF?PVj=x=!Cxc@HlghA2YMgHLY&O=p3 zR7HR9p{gS0MxW6SvKCqae>i{8&wHqcqkq%`|G^&Q)$voK9)9*{slhi_&U>iJh{vNF zsH%u%(Z4im_p3*;CbT5vHxEVa8mOv>7oz`Y)J`S{tSMm6(Ll@aeoH}_Cvr%$7HzMi_8&|T5~9;!0pi|9ZPMg8F?_}DVp zUx=r!CiL6rRvxM{;)m#~JrwoVu2H*iPhCx@+P#B^s*GsSy_1Kc{vsN+i}cjhgkIG> z+Cx=Fbm|`Cp{Tz;joMx3sjCU?(>=jMRYqiVPw`OHUq+*LnV!0u(81mNdno+HZTDOc zMg0wI)NYWct|qjq`(O`M88NT>Fb_rj-Q1|%EuOlX(5JhP_E41(uXG>pp{Tz*8nv73 zsjCUy+I^~rs*L!&`%Di-{oUKB-CR#yP3Woa^E^~##P8h~cqr;`Nuzc(p1PXQpdL?o zD9l5TXFU}4_j03luXyTeLX&%}@lcf!MLpJgDC+OsM(yf6bv2>mdu;Pil@ZlFKJrl1 z-@Zoe_Iv7TLZ9k!z(Z9=tnE?np{T!qG-`L+Q&$uENsk{qRAt2R9>01h>d)q7UJrJI zqIIkFZ04aVBU<$g@KDs>HI3S}@zm9X#`SFLp(-Qtdv^6u)L-vL?czLjv@iAXP_(}^ zP}JY`joKx6Bx^$b+9r9Z%81II$sVdIVtUWCM(z4~>ZreT4@LboP}E;0*WsjUjk@OU zp8dRf^4>~+XS%R$f3GaL(~3I=JkT@CtID8efg0d-kg0F*Ch5C-W_z8Nb!dn0!g*Ov z%WK?Y1BP|T@#-omuFLi6ZPdMry4*%q=Xva`34N?*frqM$c(&(24^wHxZG zs|kI(=Wq{I8F8fNXb(m0CV34v*>am#g<;Dl1FSK(d2M9s8=S13j<~~XpFz>5G?Tp! zo7zqFI>nT{zn$uJ(U7Eb&r~nx8NS}~)qbj18-t=xaHe`)XHfJB&Qz~K21RcQo#r)) zDcY}zn#7dsVVYO9l!Rp~Bc^%Pnk1{dR+}WN8u`UdQIvbf%9xhA zbC%Z!k`mt!@Q#_~b-q!ZZH!o zjp{BMby8>7AKlmfmz=Y_dP_?9aet#4)lD+$WPi1d>Q)ht=roL&``}zYR zv%OlM<=JdT-wK@Vm1Iy?Ww(u)?NuQug}&=I+v^R3qHhJx_WHn(q;Cbz_PWRv&F!^l z7ygrs5NbEatJ!QEE9D!ZM-{iRwpXy3s`yo9YP*cf#L*0n)GuZ3W_h!W zUkHR z#k$8RIll0iThi=vSxcPD*M^&FyPL`hrgDm@EOnYO8?~w!1k}VxljLJOx~6DuYc5N_ z9pOC+I6O0 zWNb?gmEFC_a#N0+M>(@{uI21sjxRm@3(x5X=vNiHxc8%53t5kp zmt`qq)+R0gnI(T@zezt+^t!z&BUz4u){82BgQO;wb1SokrnS^c70rf{d;m}p!Hlwe zIh3trt+Y*ID{f2u;`Ptm`{g+8SW==Kbrd+Nh-E&#c~TXpSOaNxm!)JJ%d9{Is>b}9 z+op1@l#yPQ{{Qzehc#c@oV;|SA7L?bK4EM302NWroYu_g2-F1GZ{cXPiVH0B-(i(` z)Mg9GONyAlR$b0o86nk>QN`UXdAYKbl+i2KSJSeL&!&8{yp)l)NxYZ)ZQ!_PmN@RR zj0f6t6d}hbW4>uC>Hj6{?S@)Kn0tAE$NLnoBXck2vbo30^(8Gax02-ro)M`+md$Y@ z{X>$P5yMZiyzE7mU=*v%;0evDd`qf`@zQMMQ!_%mM-4IFn=lbwxQneCBQ$#o&E zrSZCVfa7eHd3MY`lzi!>OQUMoNwxp1eC1xu{aS~+EtDq*#W*?0^MhP3a&>sIWEfBt z4P`~p-`XjnBiG9Dc4e6!%n9dvA}P~>ujzz1pKw{$c7u#&=#g!Eaa(h_5AQQ(PG9E8 zH6rDkVm#|1Njc++kQ_qXS6)$rxvxUjFdV2E_u#Ttj`23GtzvEFR`)Qcsa03DSzbZp zPH5KlsTbKS&)BkD%l1f)Su&kRM^A+-mT2ND6X!dW zHQv<~ahmzR09B(bMv&!KF_I5eAy=+EX}k%J`{|aP3o}NbmAoI(1npNAaTPzcxHR7? z;<=YA)!IbTUzU-xBlk(!uiQmx)hJ>M&x@QRS$>0OTzVjzEk8Y6g=Zr9X@B+z6=SJ_ zjAnR7a*83@z;XLcMzuxUz}C98kz@sP2vuhO|HaexD}y%`lku1Rm5t>*O~t)bjmqZ1&vx0SLRTydp{)Ga3>2rnmE8Z zkDGLo{i>mj`10z1DU{YqpG*H!%xk4QId{oiCe5mls?ZdTlEK(bdNE0sbErM#TVldFg7P@=6l8jx9hCF`U8mJ12Soj}L zbS=W-?bfC+Ul9+OWT@6+^dh}V_DGxEGcGNp$T5%6Jqwe#uP33?V)&oRs*rp+BQy&t z*J^@l6|s_0Mo2@y8qba*Hn0YYF?_d+CI8H!IaT4M-CQg6OG&psX}{e)QiWB=SjNql zI*CuUR-^WE`pyAd@juvSx#lL1;>2Bve zp$qhAB8s)qjJVszFh_clR+(lzPmbbPm61byi@}$7Oy)ICwW?7od#C8t#P#4SqG|6^ z=69Zbov$YHWMbZpS{Yt@PlSmI9NYD zr*-!t$JO+@FJs9Zd*l;MNRISB$y|yHq>e&g#9TwX8)L5ne{j2lLq&w>5Soye`=)&bL3OoORb2@ z@uh|jn#51j^)6$^99I+-?)Wjs?QTybtAfg!=)@j4#QdhwIEo{!2g?lbq0!v{RK#dT znqT)PZkMylEYtABTM?w zEH|M0?!fRKYctD}W_;rdeB9ZwJ?6e-S&r*YuBEan?qm7+K%DD}hP3S@O#E%Ubh@{!<+DNk)DjgFZ=df0k-4Q?2`R z7Wo|GMU1pDN6HXi<4CJvr&c*^d5;L7v+??jF{0{^cU z`6;K2rOU0g|7jkhXi)`4jwWaZErKk^nV+Lb))HSc`1_e}-rpqWa(ZNx9_3bqsyJyX zpFvqOIKMGp%3n^K+^eq~X=V@qJF)$Lz5MUp70qWtd2W%jDf#kBZNItU971JHw7ew8 zB7&JO<5RXhY@xQ7i&7cG<~1VY_R6s><>l&-@@8zh?x^>FW`j9~n?4DVXE}-H(;c11 zRMD14Z9V}uoQBq zvv(59OWzhrpPOpm;@-()X763TEajWVe*>p+@ANs2Dt_l)=nhLUR>3H?M6L)~mhmq+ z9r$x4Le=<;$t>C3Q>zFmlV##aZIb^A^KV06s*vS7xnFv=pmJNy;L9GR=DS#?0aYRO zH*gd|<;MJ5xG%Gvmy@5%`fC_vS@v!oOFujnR0N^B7xTED=eCLHQ5CW*M|Zg%ue?q_ zYhwAoX3v#vSj{$n#WvS-kLEa+_qpaMqOv;<|6FbyW8auoP*ceRE$P!qxe^=nyE$?l zU2c6fm2cp5(`V z_LcRrqi(SFKc&GUc3#F3;#=7seCB1EyG#2)+VkI`%_??X(L$=Vv7Put^1o!~f463v z*!veOCmB22k551U1^fSB_F@-b{^b#oq|W1N_HT^q|F0f(aqPc1Qj%}R>uy{sDJ+Zt-A6Rx#1hd|LmIERL@WB z&#>WiLTGVI14_O;X*4}=$TNS#cit?mfFZ zo=CmK9uY6<#r5K5q%k5ve2H`fX@-&{E{YUkQThsBB@-!2lxjKPUm4)As$ zKY)I|6qVW$Q36ZykggKPM6@^|mTD(OEz(l$JET)cKZ@XC{>f%2_3R5_yzRiec(SDf6?G ze33mRW`beK{KPv^K9W5&WP<3Pco)ju6YqzfQ`rj{7qk2`DF2kbl5sWqqTenK6H3m5 z&M@JhL$-a9y&l$HlaqRNSIkxyN0^Ar*#i0GoZ!y0&{tqcYf%%L9n)0|b^PF*FX$K8 zmI-OL*0Z(ic|_~^ylqI2RA*!)-!mFEGY#fY5WTa%t|VzMClt#h9^=!nN_p6LB?JGd?3#*n#U zK)2bUCq#M94KbNwO3vPpOfe^Cc4(M*6y^D1Sey zp1&iM#_~fua?5?aM6 zZ|CBDx!SKC&W5d4lvbxgYs8DKa$Btx6_)r`qm}n_S6$Odp|_@uRz5*_g7R5z+g?+Y zL%G-X3KJ)DyZ4%_oXzbGRPrz`wr2%!dIZ(>gS9oGBV#u5h&FN@Zsb{5qj={P^xBAD zE4vf^cjgW3bxPGWm*bRrQC$H1S)B=NtvwFxsMP?UYkhU-DfOLJx3oH?e$;A7>r?7o ztzU9NhH-rB@4@Mh@&$2K-ca=0F>h~3vY=neUeCXYMlm@O{5bGw6cxP!HS%62+q{P3 zWDUnjvdGB$5p9cro%lE5ytNzivSV7aytfwD?bcr2+Kj}DQ5KC>RwsTV%^F^zG@Da; z&Br_F?gWm@yR+A5UXRzI?ZMX9sza_>desGSd!E0eD>x+`7K^I9dwcaX%J<|g=~aQa zUC}E``?-BdNR~$HaWSIwRrdBK;7?sB#vaU@0DL8TTd!nM1J9GSAM{exm-2dbXr`WS zv&TvJX)ixueH5+b{k@127!tyqF!f@fCAh?S(b`siNjH{M_G+oN!gW<_1-xMcQfyH9C1(ZuIZRmcJH?hV zrYW0$n za7pWMZ6|Y%w0Z&M)2&_xo@@0c@CoS8R0H!5gk+)@M5B5ZV; zRXi6}n1zc`Z8(amc#gtENIv2m@_~r+l_`F)dC*hWnf9o<&LwJx{8iUfXfz{`3<~Z% zU&Q7o#&*K{!qcPX3m5lGvze(L!!J5j@f=n0ET3iXjbN*Gh;@Mrog>tkZbxE9s3bo^ zjq5hF*9diSVn*y}_2>2rofAY}{`Q#BDn;xbp3^-%M|*f?bG6gIz0pZTe$porS(bJGL5BNY*|IKUDKvR9k56S6gW9&s9PTx5ds?Iuw2yyGA9vfEi!b?E=TZTqUmX zsB^AT2n-WL3-^XxP^T8|k6kaX#q905%DshO#WvHPDBRGNcBi}Ao&o=RczZ>m=$*+Y znG0fXYkTi7u^t-ED0PJ`d(TxqDs=Sr)4nL|+|f@v0j##r-V!E$EewNXXwihw9co-r z$KH>?X4*vu7De=4EQS>&^xmPC75TK^p;i?gbyizwcM1~=iYSVnDjFJ6ZF#Y105rT_ zM7!wgMa3v@MQt?i0MXj6qLGn{)x$;PljDqkXZ(rrcSd_L)%r4qFt%mv!q}7XdLUgH zOMA~(hD089*066gg{yc%Xbr{^hcm+nl;?`7;+uQdSZJ@CuRL5_4*9u}KJ8D4CyQ~4 zP{?od+5ed$t25Rq;%zo$Ru4}J*IMYx6(*(({1}?=9{6edQP!Al-q%)WbbToi zH3QS5mhl@@>)0oC7TVM5INtpDIjUWo zwRPaPn7j7}u5_FbpADoF(J{u;jA9URoQ#pc{XD;m`6RO#?_mv!KB3Wj$WCbV{;^Kt zxZy_k2%GiX)PAxz{B(&A2tVXUnjh|vvd5qCkGGw6d}7qo{Nmky$< za0afzq%Am3vAhOJKg+v=y0`PQd^YGMr=R8cpljm7EWZxw0PJ|p>(HZ>><#GzKj2q8 z*c)dJB%hpRpIl_lMfQ@PC8z}FJ)Eq%#*qgS(UmJEvXw$ka* z+e&NM8~(o-~YRw%jX)nyJU9UEX4WpF0=#O7dOR1`^gF3B}nqgE^{q;DGOo$m+%S3$oL0i&|u=w z{Dz5el&|A)U1y~|YK=zTo^OdA%qLr%;jiQI`fM}t4+@;)xt$F1jB zTCdSB(yV98*K0=ypNf0iLNWigB<(a z(dcfdt95bW`M6T+&+RSoW!7I3EzxVVrP;m1%dEYxF9|8N()E=5=^Iby*oe?(3f+l3 z!n5`WYkP#}?hz~Pb+yc?u~Pihu$OAsOKX|GiutRUb3}STyp$IdzZk3X>i88Fzac-y zonZbN%hf{`I#*c615SAS1xwVB$oOW~>xRU{(|NK_yq`5^NZ)umRrZhH!FQ%R z#6Ywn4t|5tdNZ_zSSJoChz~*UIC)y{f**+Ax>p!DxJR%)%$$isN?2wNUUo~rffr(3 zI)v~!XbZ8v%=i}Ljv>S2qtSL0<9Nm?uz}>Gt$T)8!sDz*hg8QWTg#H~i;uH@KjdNH z`5}wr>#Vf%$D!?Vlxam=5NhdGX&R_?^?~5mPXmyW*!xJM?D*ZD41D?%UtaFz2v0lgGm$A$m@TW&y5VJ}bI@eq8 zEJeFl!;j;FrvXKqdz!kmjw~>YS+bFiHS=$lVFe;vKJYsBpDaF`F zr9OR5fD;0wz32?efgx+OJ*736yLmxjeb#9EOFQ+sAlfEI0Qa`;3H+h-`aTz|7fVz6 zD9{`TpWAPsouP9g%_BX#xF7;=NbfU2w7H>syB(G;H)Qo`W}}r@Yx^o7(@|@y4@f|n z-X*`0N4L>Nt7#*TZX=ItBSvvPZljI%(v2A1Rk0g+q@5Icqj)EU-Xz{hq4$t?Qpg*f z6ncO7GC@1QGC}VIpR4q|VOWRxjHhh0(oflF?VrHjk{&fe&^s#+LVrP@gI?sfJznIo zQ?Li8ARzADcy!T>am+~uc5jyne94)|oDyJQ$Oy*Kj1z!2^qIotS&VamFFEHkE@oWD zd~3T&f}1cs}ltS!YTbu6$#jn#E=N*e_{t&IgvvfK)s zY`FtiWvK!_Vx0wCWW5_$W1R5uM&L#3+dyI42DI3A0(ILbKyTY; zz;N3az-w)XfL(3%z$n`ZU{BlMfxT@%0?`ADUq0JBF zwYHwXH*9ghjkW~f9$PAKpDhD;+BN`q)|L-kYaa-F!(Iy9Xdlrm0-uZbao)^%s~|!7dY?ce2DXY&PO^Q<-FXvmh*|uH#wi?+{yVI=Wm?Pb9VP4y$kWKWy+U03%y3* zFBFzLAM~2V`9iOe_}ix!or}DZ@%^G#olkmc_>RK{=QCa!o+)o|uJUTf`8uz54x+bs zX-*;Db-vGeA7{On7D9HP^h!nkuJg3lNY1^Q&*410`Et$^n!n5WpytOoAJJS3CHZO1 z+j0JA^Hk1XX+Dzk9nI%(eysU&&VOs(t~K=^>^%$la%Y(LGR`}AYu6CJi+3vLG2YGE z2(iqxo1h3G`>y<5ydzTA0Ri{+e8 zZJ~80`py>ZkZ*8Sw;0L!gDsXbe^HBfIe)UnG0vZ9p>-ko=UcSnd{v87&eyaU$@#h# zb2#77VmaqqTD0j#{cdd$j(oQ>qGfFqJMKQ^rX=y>e+u6b=oO6GlB<2VElrf#?Gn45wpIW9Xe6}z> z!AA_F_6vM0$agzm^(o{04WC-hH~Clw5&s>ZG|u1ispk9xpIXj$`P6g%xlecr$sO>i z=KQcvn^MyIwa-${72h`ame)>aTiTZm5g3+Ft`uZ;6NzdFu~ z{led-`XPQv$agx2`wi#(4!@b4Kj>G@^=ths?~vSjzgo`U@*Dmh$-nD2lk+e9mU4c^ zFXn_=Y9QaKcn{L{`H(!`lo$P^lkpNoKN)+-%IqJ{&k#J`&;%AJ=edC z^9TLwIA7?Wwx9Tm{OdV?(m(tQqMz}v=KOj8dd^q*mmMJf8h^_{%Gdd)alXO7mh&zC zmM@9F)xVna_x;1aBKl+hGS2t-*KxkzKl~8!zw)o;{Fr~*VWPkFuRB8d_x|BWDgVL0 zn)7r1mSaR;^iShl38?4X7LZm?{N@3*ocjiZe@(O_pp5g-0LwQ-UlUNqd3Zn_=bZx5 zjuSs3pqld@0pZ^g-8-O~^XmiZIZp{FJ3;*PfLhM80@6+roflBcd2xW{JEDgKRC7K& zppNsK0?JMie@sB#Y0Ae3Sk6#BDWHt=DFJny&j?8Sf%tO*>N&qRApA$79|)-Cd_h1x z=Z^=Joh5!vfaNF3mj$G8{#-yU=Pw3WekT6vfNIWP3kW|)^qT=?oNo@O+m<^XD2+Aun_-=<3f6zC8#C!`ZQBvPDznP#HIXs6Rp2UnP9aeN*{F!gJi}bizpV`RA5Dds@Ko92lm`oQBp2G8yNB%X~} zNB@NWh_IYQ(q6!FgA<1)`twR@=eQ-2>M5>c!Esx0TjF#`_&a7N-iH=0w!$4H?z)E( zM>-x!tnt(@Ly1<*szi$D)u09^u0vU_g^h`I9!YncxHauSO)Pulqr}fWQl$StVm;`U z>=p71jh>Pm@3$;_I`JpuGaY{0eJ@Cfx@OC!uds(oacY&P_>5vOg>#oqBRH z`VVvZavlVJ|Act9Im{X6q%pQnrkVO@{Zm|ZPG07SN~Tf9I(nm3Ec`sv6D1@;DK+_V zBlg_!lL=YctBSGL6mnTc;c)JmcHCP~8fM_wWa(AfyW6q1rX{a*%!0)I$!?90a!ZP= zSjSTs(=Y?wHpns6CNE%%Rzf-{>9ypylDDC>0R4TGe87`P=N{;AIr1F`lIgmzz)=Cc zC(wEUkA|Ya9q;Cr?(z?iq!srIavz71;&MC$EdePDxDQ^RDHQn+CAcN2rMcW5ZG0TX z9$$7%*@eiWamS=kgpn^+I^>mWBuo8S1JUMPM0&uC{Zc6Ua)B;~EK79zv?ygHYKFiP zc|D?exjBVqm^gBcQ7<$eYBK?n>|`u%ygqJ4oP^SxBkCwEiY#fblLD)~wB_M$b- zI?eu3l-oJZqPLZf-&5N;jt9A;qMgG(?JPJeS(4`VY-&`RTs!R?@oChvl$B=~ijl^9 zb7mUNu)i_G@=BPOHaJa|ZcHmrqckzCDy=&0zBHPhhtgU*o=tlt&4qYcoAyDPELS-8 zr1ejzfG&CcqCN8vWWG!L2|fItMq}3c{^n@W7qi-TrsJ(-xh_eL)}}jM)A!oG?()Bq zNA{c*Z2L}k=hqCkJNC@a9=?(`VQzz$xZ(`m(fpLvs4~59}n_zl=fZe z7~A*OzCMlvSTlEkd%!URNU{3>xJgNiKvC^dP*kFItj|bg~L|oGU4di5hD_K%206}K<}N%51Hfn-Gm-Lm6%%GB>?4X2nqRE=n^mt>H z(%j~!H>~fKj+@fQ;lIR*>Fa{l1yuoMX*P7N3z9f5{qgj|ptC_W>1TtULD}UX>Xr0h z{Cgu^3)X_)PTvl$#1GRa2klOu9<)DwcF>{pdxE}Bzdz`^^oc=a&6)HX9`E_|cGwH; z8RXA)4sYZ$5`r_fC6LvvGiX1--Ax9?9a-Hi<5Tv?r$G&+_zd!=%aI+Fj@B|l^H7>- zq6cM+OQ$Q{(2VDU%22l|s66ADpa~hbXOJz_*VK%5@EER6xSP2NX?yzojFC9U(Ed}C zfgKy?fG{Ufl#g`0f?B$lBhH(!)8*I<4KCx(kJew9a~FD|bCF!x65W07%Q%GEdZcwh z62C*a1|vC_aWTV|SrgP8w;&BO$XrXiVn2L6w=?gCuo(=7&ttyi{ej!^l@Up3ZzaQ=a5WvmE6M zXuB`ymCR2$;>mk7BGM}7e4VES&9v0r(5IxgWPX&n8~@um_Cedx%;T99ZSEw!L6nR+ zNxS{#9s|v$)OITKC|mwRraV`>92YV>2fG}9WVYznu(GLLP(Qlzu4Eq&eN8`?<9E-h z>i}v7VsKkRRKI&2z51quvVXrr8MH12_ItM9i~V*v)*!`V1-cw|@Sp9s z$*6y^-#h*6nA>$h65s1LDoDtBhZ_gOpALluY z*Pd}U=z;#9!utMLX$$(3#0AL6m`MZmcK@^e(t;*BxAl+3_|Nv+2^oLKr~Mx={dYM? z$GG$#`j6yQ@OyupluTtUD**pvv5H&{T5lm)ZV$D~q7j{CPrLot1w474Xy@pSGVM)r z?Yd84>EP~iWM{<#8%xN2z1XBd#&ucN9@j2N%XyiEmU~=FvX;Q6Wm&~MS1yN+J?b6I z;B#4e@G6#QShKXFk|(qJ2M2G$Jnupew7w5y9nSJcY)~ETQ>TocX~xJyqhzRa6fTE+FjBcPap~DO#gRQ{`&qK7L}iLI8Y^AVh@!RBK3fZ> z(;+4DO_%IH+t$uxo%>26ZH1>CFZLsg$x>-$|Afo0iFVw}hU`zWKg*^$mNQoD_ySZz zRM1Wr>lx80u9Nq4bSHe#7>yhcjmVMHBA615fb$&Mg-Lsdoa=JjQLzg=7i#GL5QDqR zI4O)|zKp~1In)^t&`? z6>^Fwd48g^-kO|n>{UMCeU`mBhps0QX-?cHMA9g)_wE^@oNDPlpK`K6N>GUsS-Umo z^PB@YorCFW=5icH>1*bk$2dtpS*_)gO%j{u2IRJLICII`Ho4cL+$~pn%H?R-9eYY1 zVQ#D=E0=o9%Z&&oD+lI|1RpUT+&Oquu8$)jnC=C}=h8iczoRMVHpsXj_2+zg?)_*( zt>)(@1V0AK1)cZj%6rXcK>4GFBvwJg`5fB0Xl1^Gn#17Z1e<#X_EYZ{b5n!Wyo_MC zXDHY6XcnkMR<{I2SAw8Cinvxx;VO@uXgarUOX!+6fHgGu!F?We&l2ZoLo-e@O!W0k z6Xlk6<9{#> zU@%1tC918+o0vBRHKoB4t5Lo`PvQd9;fV-1%aLy4b~4^c=SuKq2hR>B&#gn5a`RK< zjd`q^wtZq=m;45*cRsH3`4ZFe`{kQc4(dwsOY(;z?`NQ!XO?r9 zZ^|F{Ck+$xtNz3xS+a3f{yn@x+~fP-l*=`A54rM)`3r(fDdWJ(o|P4ZMg^ zKF9n^jgMs4=D*2lbN*JAle(!!mfp`_f{6Jx|G8j)$8*6m628yhmhc1SkM;pM$LI6E zMK4OhJ;C4RdjSIqoCWO)$Tr#~+*V!-PP>B0f|J291*?PUxy6ixIOn#6?1BRDXl;;% zlv5f6nV|(Q2FvI!E4UppF2~8>nFSAVX>mbz0m)JRG?E*M=U%6z?*;Vg<9NWan)5db zHgUd{?RcNdpBB*i+*|M(uTg6ICG)>7ILY}B1?M>bqrk1pQkWU!Rd_Dgy~g|sf8+HM zT&OzT{Zrra(;2z5T~$b{u021Ir8??|WZM_oowNhElk})W*^;E)iPj*MDSj!Z^+$P^ z!d`_*g>*KQ=$5CP+PLM@3tPkMGzWRG=K+tmiDPavsBi@Sn_E&(Hy4IE%M05(Clt;p ze1O^)(g+q5E-Iw-WZ}z&uNE#ukFOh?jo{>S6uej1+4)J~XTYxtj{#2=O5dD;mXW#V zfiI&aJ-3*Ro)A3SK0>_j&F8&670`}84(H3VKzB`uj@Lmx; zd-A4=Bzr9+~^k5?MoOQ1Q0@?mHBs z8^$oSc(N0}-GaB9(7V<({8cmF<%@TGG(*V?f8E?1lsBjrpjv|R0p$zI50pQs08oLT z9H4?g1%q;e3IP=gsx_z%z>cDexE5a;>LmJz&f0&kYK5p3uZZWxt0=uDUJ~oX%i;}iHi*^uOX}CeCUCZhx5V3G zvv>!ktth=Gw&VXtVu$!xyf5~OonoK(Kzt!S6bHch3V(flNPH%afO}LN6esc5*WZCU z4eA{J=J^-#gZNeaC=}&q(M&lfyp{9#>*Wg~NclwsD~jS&RHe0|DQy&s5~kRdwu-Lw zP?{+*N^>PvX{q#4e3S&mPf1n$l?)|7$y5TBeu_gGpadyJXgyE~Q3j!930e+UIw&KQ z&dQBS7iFZs+0m{I{vXiLTo#x)9W@)V%U*>+zoDIy`I_hQE@cAejh3x$} z+y6UrWG|M{YfzKK zmmFC;iRC9VR*l{d$$Lj10zNVNTi{COOOC9SntvZf_L%vy)~sOzTPtxVmnF*4$?<;4 zy_h*CM*kg}PmMkYJTqEcC&bUAZNPK4kUi=cFO-AF1OnTS4h41{(+=2kOef&=jIJ?} zC=VPH0~|4iJT`hvACxDINe0dwL;k#L40-9nG3nqeVwu`815jQwrU1BpObM`V%rM~2 zF*gA}9a9ecirXF^GXdobVZ_3Yu^L_d6z(2|-LcgPeFsgz$Nn9>u99vpj2Fhlqc%2(dVij4 zS2KU}*hKK_81sUtRo5|uA9C$M#*>Wa8SUdpXAooOaedJ?Y8;LFugJ%Y>koMs^S~8V9)WSCw=@X z=KKvx}Qb{_S z&T>#CSsqqNmdNqSv3F;FLgh~IQyCk_%qQSC)z+_aFZczO2Z2K?$#RM1-1`K^$&7Qj z_F=}y8EZ`PvemN6qtLUalCI#dSAL7~g)!d)FK1O#d)}&~c(70S0hl}C*MC97k_ogf zo?(2Mv1yFu`qR3QYvj!dmIU`ok?Up41TXx=HvNu~iu17*=)k#I6|Hb;Rz(}|RM8G6 zX1tjb=VcYAUq4_soRw9afE~adI47%k8&3$ZH`=MVgk1$p6xRS#L>RCybf`Edw+Hse zX&CCqx>>X-3rdOsVJ{O&#L$vPU$MnzM0^!1*$ml_6M#L1HgG*^R-4 zVjIr)Do)V10Jq~5uiz9-_&(k?q~at!7Ud6sDo)emfgfS4_!U~9iu3eDU_DO%cyBgN z{3_1XQ-D8+X}}A(1Hf!4cLFWSETFE;0X9?a0(vR;0KJvDz!u6p=xhm8@wTG}fI-Sb zz-yHGz_!XlV4U(Out<3vI89j$tWuT$=P6GD?^m7%KBg=KKCUc>wnacy)F{sapH!X) zKCi3*{{H!80|auX2#R9**eQPu+g*8|r@G2)vsKv7~+pyj?v6yhA+#oU9%L-m88M`ME&+wuO2e<#|AOKs|x-13>&r zp!ywfrTRTMF9H#D>OX*As%L;-sXqd(+E2h{+Bu+~b^#cIcRDE|6o_@C{RZry{Q*u# zpej-|MZxbiXvoAcAiS+vfsbo;;3BOVaIw}L_=MI1xCC#5g8wx?;FDSaaJA+D{!I%8 zzN&=)-_TkC*K1b+-_))FZqUMj8?|=85485c54DcKqgp56F}yJf@rHLp;dg?xNZ_|x zH1LGh19(P@0iM-jfj?<+z@N1~z;oL5!1G!n(94nx`8$3O zmOFrNTBe|v4M6zHG7b2VWjb(|q3-mKvmeSkD{yt5hvEiQT762wOSVgTUwWZ;{#Mhu=Pn`to3PN zoOKy6-ntyv$NDVrI_vYm>#Zw*iPjf^$<~+9HU)_N*7^#{E}$yw1*)f!K$w8&EC;s$!6J6L6SyGjO=|ZQw}jyTF^RTY({^~*5lAn1H{Z)PXL!$zXLvF{T}$N^&hBx4v1aIdIseefY^nsKcc)6sEU`Y zKLJlz&jHU^F90uCe+4SG-+;|*e*jz96ctxJo2Duv2nf&HtiS}D9hhiq228Rw2PWHE z08?x}z*L(bu-Fy=9B6X@2ibywBWxkS(Y98=3AU?%Q*74&XW7DlciGwj@3FN9-fQa! zoNMa@oM-ET-tPw@s%_nX^KFs9*KN_jH*7tC>uoW>H*K-NjkY+*ZvtX3we>-HGY~tf z?RwzbwnX4ITQYE`EfuvN01?Tyz9@eR#Cz9m=_v03s^T+SCd!`!@jHXI{wVJQBIa!a zQ2qj_iUYPB;6Ym+@Jm|(_+J54amZE#JZu{X&JiGX61P0k>0fX&xfKK~ez&7@KfMNEzz;OFK zV0-%mzz+6@fSv90fnDqifsyt{fl>CyfzkHGz&QI7V7&cFU?2O_!0YVGfY;lX0~77f z0+Z~|1C#A5fNAy@fqm^S0W<8c0JH3CfK~Qafz$1;0cY4>2i|F451eV=0Gwst1e|T( z44h|w8@SZ|F7QSBR^Uta_kb_kcK~0r?}Q)L0kP-XKLl>He+=AY-vxZjz8kp3{u%IX z`(EHX_Wi&e_5*13J`mAj{}T9t{SfeT`w{T>0&zvQ9|P{Ue+~S?ejIqfeggQV{X5`S z_V0m*?Ee5Bv7Z4Rwf_h_X8#E|Tt5drBY>(X(=Pza^AwN**8c$BqbnMAbzK8K zs9S*#>2@tas9KyY0q>CTn^!bHDei7Q4tQ_#O5lCXZ*A_Q^lEv%t*dgYPok}x za-UB!@P40E;DbJWfe-tn0~h#Y0w3||4}8qW4qW6j0QiJY4zR{25BQW%0dT2L5%3wG zfwp1F)qW-TyCgeKzoUu+MR{>6q_!y2{|KCTQ^dI93B~2bS>Tr!m*D(2s`wV1=kCB0 z+VbLikZvnpz&N@1X(OLj{IaJsqjn}g zcvf+B@jb=&6+ckiT^UszuO#ES=^*76Wt?&wo_^j1$r@#)vQF8oY)Ada%IC_LO1*MQ z`ANBmI!*Og%Zo#i=zn`7msC@XM18#aaB-TNt3FaZNF5G(oVvL9sp93u&lj&Mo}yN( zuM|I|E>f4NFQ}{4SBu|N*A>^P8;U-x6wRYw2w1 zZi%;~TXHO=mXVe*TthRq75}&M+)++xr-#~U&>xvNA9;AY8gX}-_ca7-=BVAbcKCf;1Ru2vR9No45gKC_a}M zrgS5B;WMTdl;Lh!=GPf{f|1{DcjI>tOjv^ zH>+23J_h(dNB?1^smb3r^@K3 z%IK%c=%>o)rwZ+DEHB$nH~O0ndHOfQpl2BU&oKI*Ve~)4=zj+KCp|ON9By}~(e6&8 z-JNJh|7IF?%{1(qY1lQ>uxqAa*G$8%nb2$Jc2e&wL+>m@?<~WfS!hT9W*hahjr!R} z{cOYD*@nHd4SQ$9UeZ5XE#mfbjP`Sk_H&H(bBy+L(4PMNf9;*$YnxRV$KSMhVb1BU z)Z57PLU5tXm9CZ&Lz-Ec``J1~3#D6Q7nk-eX^Qhg9g^mEV7uCd7vAWdpf@sRDJ8@Z ze@s+VoQQ&W;idn;bbg=ne!8TiUJ4U-Lh|fA=lOom_j#W8N7Hjyi^NeRjv{dsiK9py zMdBzDM^W?ba`WCcZIks#9blo3UODY<31^akmt=wKljmxHh;pxHh;pxHkD}D__<+;5*Zh}{>4e)c>Y_rtm;@K4~Mz(0Y10{?{k?fH}N!@4KICBY@ZCBY@Z zCBY?yv+FPEhjmYZPk~Q?Pk~Q?Pk~Q?PYG}L*_0pNXVdVc;Yq`jh9?bA8lE&fX?W7& zvHMfn53m0$^*fJ!1A7_U#&)ouW52|Hh5Z`)E%rO?57-~EKRFxqe&+ZW>~GjVu(z-$ z?N5TM4et)^2sVv<7JCxA_d)ZEdN1sKK&uf?c$fTX@7Tb!_vT@1AE^a>GG_~5wXr`o$s*L$Z}dadrmvyUeWJStUcyXItS&kq?NIp zY(aj3j>7g)G^c4I(o~RFR{aY*Fikq2A+1@4uY=lWryO`itug8^w~KF4uZ++I&7vJ2 z+J9$Uffv&%VW3sL^XiXjT{132Oye1+bxyq*9jBbWd12`o@^gC;fE6X{(EaoBMpBHw)A+3_jS}(Pz7gR&bOOGR_2>va9 zPbxNx-*8qh(-G6>syNQMk#Kx_pPeg{E{5ZGV7KaEOjhxJ9sPOl#d1iyQ?)K5oEh} P>xb@QjrXMeXBqehKmMN| diff --git a/lib/Rhino.Mocks.xml b/lib/Rhino.Mocks.xml deleted file mode 100644 index f36b92f133..0000000000 --- a/lib/Rhino.Mocks.xml +++ /dev/null @@ -1,4849 +0,0 @@ - - - - Rhino.Mocks - - - - - Interface for constraints - - - - - determains if the object pass the constraints - - - - - And operator for constraints - - - - - Not operator for constraints - - - - - Or operator for constraints - - - - - Allow overriding of || or && - - - - - - - Allow overriding of || or && - - - - - - - Gets the message for this constraint - - - - - - Initializes a new constraint object. - - The expected object, The actual object is passed in as a parameter to the method - - - - Evaluate this constraint. - - The actual object that was passed in the method call to the mock. - True when the constraint is met, else false. - - - - Checks if the properties of the object - are the same as the properies of the object. - - The expected object - The actual object - True when both objects have the same values, else False. - - - - - - - - - This is the real heart of the beast. - - - - Used by CheckReferenceType to check all properties of the reference type. - - The expected object - The actual object - True when both objects have the same values, else False. - - - - Used by CheckReferenceType to check all fields of the reference type. - - The expected object - The actual object - True when both objects have the same values, else False. - - - - Checks the items of both collections - - The expected collection - - True if both collections contain the same items in the same order. - - - - Builds a propertyname from the Stack _properties like 'Order.Product.Price' - to be used in the error message. - - A nested property name. - - - - Rhino.Mocks uses this property to generate an error message. - - - A message telling the tester why the constraint failed. - - - - - Constrain that the public field has a specified value - - - - - Constrain that the public field matches another constraint. - - - - - Creates a new instance. - - Name of the public field. - Constraint to place on the public field value. - - - - Creates a new instance, specifying a disambiguating - for the public field. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - Constraint to place on the public field value. - - - - Determines if the object passes the constraint. - - - - - Gets the message for this constraint - - - - - - Creates a new instance. - - Name of the public field. - Expected value. - - - - Creates a new instance, specifying a disambiguating - for the public field. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - Expected value. - - - - Constrain that the property has a specified value - - - - - Constrain that the property matches another constraint. - - - - - Creates a new instance. - - Name of the property. - Constraint to place on the property value. - - - - Creates a new instance, specifying a disambiguating - for the property. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Constraint to place on the property value. - - - - Determines if the object passes the constraint. - - - - - Gets the message for this constraint - - - - - - Creates a new instance. - - Name of the property. - Expected value. - - - - Creates a new instance, specifying a disambiguating - for the property. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Expected value. - - - - Constrain that the parameter must be of the specified type - - - - - Creates a new instance. - - Type. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that determines whether an object is the same object as another. - - - - - Creates a new instance. - - Obj. - - - - Determines if the object passes the constraints. - - - - - Gets the message for this constraint. - - - - - Evaluate a parameter using constraints - - - - - Create new instance - - - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain that the list contains the same items as the parameter list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain that the parameter is one of the items in the list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain that the object is inside the parameter list - - - - - Creates a new instance. - - In list. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Applies another AbstractConstraint to the collection count. - - - - - Creates a new instance. - - The constraint that should be applied to the collection count. - - - - Determines if the parameter conforms to this constraint. - - - - - Gets the message for this constraint. - - - - - Applies another AbstractConstraint to a specific list element. - - - - - Creates a new instance. - - The zero-based index of the list element. - The constraint that should be applied to the list element. - - - - Determines if the parameter conforms to this constraint. - - - - - Gets the message for this constraint - - - - - - Constrains that all elements are in the parameter list - - - - - Initializes a new instance of the class. - - The these. - - - - determains if the object pass the constraints - - - - - - - Gets the message for this constraint - - - - - - Combines two constraints, constraint pass if either is fine. - - - - - Creates a new instance. - - C1. - C2. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Negate a constraint - - - - - Creates a new instance. - - C1. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Combines two constraints - - - - - - Creates a new instance. - - C1. - C2. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constrain the argument to validate according to regex pattern - - - - - Creates a new instance. - - Pattern. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument contains the specified string. - - - - - Creates a new instance. - - Inner string. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument ends with the specified string - - - - - Creates a new instance. - - End. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an argument start with the specified string - - - - - Creates a new instance. - - Start. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever an object equals another - - - - - Creates a new instance. - - Obj. - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that always returns true - - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Constraint that evaluate whatever a comparable is greater than another - - - - - Creates a new instance. - - - - - determains if the object pass the constraints - - - - - Gets the message for this constraint - - - - - - Central location for constraints - - - - - Evaluate a greater than constraint for . - - The object the parameter should be greater than - - - - Evaluate a less than constraint for . - - The object the parameter should be less than - - - - Evaluate a less than or equal constraint for . - - The object the parameter should be less than or equal to - - - - Evaluate a greater than or equal constraint for . - - The object the parameter should be greater than or equal to - - - - Evaluate an equal constraint for . - - The object the parameter should equal to - - - - Evaluate a not equal constraint for . - - The object the parameter should not equal to - - - - Evaluate a same as constraint. - - The object the parameter should the same as. - - - - Evaluate a not same as constraint. - - The object the parameter should not be the same as. - - - - A constraints that accept anything - - - - - - A constraint that accept only nulls - - - - - - A constraint that accept only non null values - - - - - - A constraint that accept only value of the specified type - - - - - A constraint that accept only value of the specified type - - - - - Evaluate a parameter using a predicate - - The predicate to use - - - - Provides access to the constraintes defined in the class to be used in context - with the syntax. - - The type of the argument - - - - Evaluate a greater than constraint for . - - The object the parameter should be greater than - - - - Evaluate a less than constraint for . - - The object the parameter should be less than - - - - Evaluate a less than or equal constraint for . - - The object the parameter should be less than or equal to - - - - Evaluate a greater than or equal constraint for . - - The object the parameter should be greater than or equal to - - - - Evaluate an equal constraint for . - - The object the parameter should equal to - - - - Evaluate a not equal constraint for . - - The object the parameter should not equal to - - - - Evaluate a same as constraint. - - The object the parameter should the same as. - - - - Evaluate a not same as constraint. - - The object the parameter should not be the same as. - - - - Throws NotSupportedException. Don't use Equals to define constraints. Use Equal instead. - - - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - A constraints that accept anything - - - - - - A constraint that accept only nulls - - - - - - A constraint that accept only non null values - - - - - - A constraint that accept only value of the specified type. - The check is performed on the type that has been defined - as the argument type. - - - - - Central location for constraints about lists and collections - - - - - Determines whether the specified obj is in the paramter. - The parameter must be IEnumerable. - - Obj. - - - - - Determains whatever the parameter is in the collection. - - - - - Determains that the parameter collection is identical to the specified collection - - - - - Determines that the parameter collection has the specified number of elements. - - The constraint that should be applied to the collection count. - - - - Determines that an element of the parameter collections conforms to another AbstractConstraint. - - The zero-based index of the list element. - The constraint which should be applied to the list element. - - - - Determines that all elements of the specified collection are in the the parameter collection - - The collection to compare against - The constraint which should be applied to the list parameter. - - - - Provides access to the constraintes defined in the class to be used in context - with the syntax. - - - - - Determines whether the specified object is in the paramter. - The parameter must be IEnumerable. - - Obj. - - - - - Determains whatever the parameter is in the collection. - - - - - Determains that the parameter collection is identical to the specified collection - - - - - Determines that the parameter collection has the specified number of elements. - - The constraint that should be applied to the collection count. - - - - Determines that an element of the parameter collections conforms to another AbstractConstraint. - - The zero-based index of the list element. - The constraint which should be applied to the list element. - - - - Determines that all elements of the specified collection are in the the parameter collection - - The collection to compare against - The constraint which should be applied to the list parameter. - - - - Throws NotSupportedException. Don't use Equals to define constraints. Use Equal instead. - - - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Provides a dummy field to pass as out or ref argument. - - - - - - Dummy field to satisfy the compiler. Used for out and ref arguments. - - - - - Central location for constraints for object's properties - - - - - Constrains the parameter to have property with the specified value - - Name of the property. - Expected value. - - - - - Constrains the parameter to have property with the specified value. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Expected value. - - - - - Constrains the parameter to have a property satisfying a specified constraint. - - Name of the property. - Constraint for the property. - - - - Constrains the parameter to have a property satisfying a specified constraint. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - Constraint for the property. - - - - Determines whether the parameter has the specified property and that it is null. - - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is null. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is not null. - - Name of the property. - - - - - Determines whether the parameter has the specified property and that it is not null. - - The type that declares the property, used to disambiguate between properties. - Name of the property. - - - - - constraints the parameter to have the exact same property values as the expected object. - - An object, of the same type as the parameter, whose properties are set with the expected values. - An instance of the constraint that will do the actual check. - - The parameter's public property values and public field values will be matched against the expected object's - public property values and public field values. The first mismatch will be reported and no further matching is done. - The matching is recursive for any property or field that has properties or fields of it's own. - Collections are supported through IEnumerable, which means the constraint will check if the actual and expected - collection contain the same values in the same order, where the values contained by the collection can have properties - and fields of their own that will be checked as well because of the recursive nature of this constraint. - - - - - Central location for constraints for object's public fields - - - - - Constrains the parameter to have a public field with the specified value - - Name of the public field. - Expected value. - - - - - Constrains the parameter to have a public field with the specified value. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - Expected value. - - - - - Constrains the parameter to have a public field satisfying a specified constraint. - - Name of the public field. - Constraint for the public field. - - - - Constrains the parameter to have a public field satisfying a specified constraint. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - Constraint for the public field. - - - - Determines whether the parameter has the specified public field and that it is null. - - Name of the public field. - - - - - Determines whether the parameter has the specified public field and that it is null. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - - - - - Determines whether the parameter has the specified public field and that it is not null. - - Name of the public field. - - - - - Determines whether the parameter has the specified public field and that it is not null. - - The type that declares the public field, used to disambiguate between public fields. - Name of the public field. - - - - - Central location for all text related constraints - - - - - Constrain the argument to starts with the specified string - - - - - Constrain the argument to end with the specified string - - - - - Constrain the argument to contain the specified string - - - - - Constrain the argument to validate according to regex pattern - - - - - Provides access to the constraintes defined in the class to be used in context - with the syntax. - - - - - Constrain the argument to starts with the specified string - - - - - - Constrain the argument to end with the specified string - - - - - Constrain the argument to contain the specified string - - - - - Constrain the argument to validate according to regex pattern - - - - - Throws NotSupportedException. Don't use Equals to define constraints. Use Equal instead. - - - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - An expectaton violation was detected. - - - - - Creates a new instance. - - Message. - - - - Serialization constructor - - - - - Signals that an object was call on a mock repostiroy which doesn't - belong to this mock repository or not a mock - - - - - Creates a new instance. - - Message. - - - - Serialization constructor - - - - - Abstract class that holds common information for - expectations. - - - - - Interface to validate that a method call is correct. - - - - - Validate the arguments for the method. - This method can be called numerous times, so be careful about side effects - - The arguments with which the method was called - - - - Add an actual method call to this expectation - - - - - Returns the return value or throw the exception and setup any output / ref parameters - that has been set. - - - - - Allow to set the return value in the future, if it was already set. - - - - - Gets the error message. - - - - - - Range of expected calls - - - - - Number of call actually made for this method - - - - - If this expectation is still waiting for calls. - - - - - The return value for a method matching this expectation - - - - - Gets or sets the exception to throw on a method matching this expectation. - - - - - Gets a value indicating whether this instance's action is staisfied. - A staisfied instance means that there are no more requirements from - this method. A method with non void return value must register either - a return value or an exception to throw. - - - - - Gets the method this expectation is for. - - - - - Gets or sets what special condtions there are for this method - repeating. - - - - - Gets a value indicating whether this expectation was satisfied - - - - - Specify whatever this expectation has a return value set - You can't check ReturnValue for this because a valid return value include null. - - - - - An action to execute when the method is matched. - - - - - Set the out / ref parameters for the method call. - The indexing is zero based and ignores any non out/ref parameter. - It is possible not to pass all the parameters. This method can be called only once. - - - - - Documentation Message - - - - - Gets the invocation for this expectation - - The invocation. - - - - Number of actuall calls made that passed this expectation - - - - - Range of expected calls that should pass this expectation. - - - - - The return value for a method matching this expectation - - - - - The exception to throw on a method matching this expectation. - - - - - The method this expectation is for. - - - - - The return value for this method was set - - - - - Whether this method will repeat - unlimited number of times. - - - - - A delegate that will be run when the - expectation is matched. - - - - - The arguments that matched this expectation. - - - - - Documentation message - - - - - The method originalInvocation - - - - - Get the hash code - - - - - Add an actual actualMethodCall call to this expectation - - - - - Allow to set the return value in the future, if it was already set. - - - - - Returns the return value or throw the exception and setup output / ref parameters - - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Creates a new instance. - - The originalInvocation for this method, required because it contains the generic type infromation - - - - Creates a new instance. - - Expectation. - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Determines if this object equal to obj - - - - - The error message for these arguments - - - - - Asserts that the delegate has the same parameters as the expectation's method call - - - - - Setter for the outpur / ref parameters for this expecataion. - Can only be set once. - - - - - Specify whatever this expectation has a return value set - You can't check ReturnValue for this because a valid return value include null. - - - - - Gets the method this expectation is for. - - - - - Gets the originalInvocation for this expectation - - The originalInvocation. - - - - Gets or sets what special condtions there are for this method - - - - - Range of expected calls - - - - - Number of call actually made for this method - - - - - If this expectation is still waiting for calls. - - - - - Gets a value indicating whether this expectation was satisfied - - - - - The return value for a method matching this expectation - - - - - An action to execute when the method is matched. - - - - - Gets or sets the exception to throw on a method matching this expectation. - - - - - Gets a value indicating whether this instance's action is staisfied. - A staisfied instance means that there are no more requirements from - this method. A method with non void return value must register either - a return value or an exception to throw or an action to execute. - - - - - Documentation message - - - - - Gets the error message. - - - - - - Expectation that matchs any arguments for the method. - - - - - Creates a new instance. - - Invocation for this expectation - - - - Creates a new instance. - - Expectation. - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Summary description for ArgsEqualExpectation. - - - - - Creates a new instance. - - Expected args. - The invocation for this expectation - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Get the expected args. - - - - - Call a specified callback to verify the expectation - - - - - Creates a new instance. - - Expectation. - Callback. - - - - Creates a new instance. - - Invocation for this expectation - Callback. - - - - Validate the arguments for the method on the child methods - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - Expect the method's arguments to match the contraints - - - - - Creates a new instance. - - Invocation for this expectation - Constraints. - - - - Creates a new instance. - - Expectation. - Constraints. - - - - Validate the arguments for the method. - - The arguments with which the method was called - - - - Determines if the object equal to expectation - - - - - Get the hash code - - - - - Gets the error message. - - - - - - ExpectationsList - - - - - Dictionary - - - - - Dictionary class - - - - - Create a new instance of ProxyStateDictionary - - - - - Operation on a remoting proxy - - - It is not possible to directly communicate to a real proxy via transparent proxy. - Transparent proxy impersonates a user type and only methods of that user type are callable. - The only methods that are guaranteed to exist on any transparent proxy are methods defined - in Object: namely ToString(), GetHashCode(), and Equals()). - - These three methods are the only way to tell the real proxy to do something. - Equals() is the most suitable of all, since it accepts an arbitrary object parameter. - The RemotingProxy code is built so that if it is compared to an IRemotingProxyOperation, - transparentProxy.Equals(operation) will call operation.Process(realProxy). - This way we can retrieve a real proxy from transparent proxy and perform - arbitrary operation on it. - - - - - Implementation of IInvocation based on remoting proxy - - Some methods are marked NotSupported since they either don't make sense - for remoting proxies, or they are never called by Rhino Mocks - - - - Generates remoting proxies and provides utility functions - - - - - Create the proxy using remoting - - - - - Check whether an object is a transparent proxy with a RemotingProxy behind it - - Object to check - true if the object is a transparent proxy with a RemotingProxy instance behind it, false otherwise - We use Equals() method to communicate with the real proxy behind the object. - See IRemotingProxyOperation for more details - - - - Retrieve a mocked object from a transparent proxy - - Transparent proxy with a RemotingProxy instance behind it - Mocked object associated with the proxy - We use Equals() method to communicate with the real proxy behind the object. - See IRemotingProxyOperation for more details - - - - Allows to call a method and immediatly get it's options. - - - - - Interface to allows to call a method and immediatly get it's options. - - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - Creates a new instance. - - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - Allows to call a method and immediatly get it's options. - Set the expected number for the call to Any() - - - - - Creates a new instance. - - Proxy. - Mocked instance. - - - - Get the method options for the call - - The method call should go here, the return value is ignored - - - - This class is reponsible for taking a delegate and creating a wrapper - interface around it, so it can be mocked. - - - - - The scope for all the delegate interfaces create by this mock repositroy. - - - - - Gets a type with an "Invoke" method suitable for use as a target of the - specified delegate type. - - - - - - - Raise events for all subscribers for an event - - - - - Raise events for all subscribers for an event - - - - - Raise the event - - - - - The most common form for the event handler signature - - - - - Create an event raise for the specified event on this instance. - - - - - Creates a new instance of EventRaiser - - - - - Raise the event - - - - - The most common signature for events - Here to allow intellisense to make better guesses about how - it should suggest parameters. - - - - - Allows to define what would happen when a method - is called. - - - - - Allows to define what would happen when a method - is called. - - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Allow to override this return value in the future - - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Call the original method on the class, bypassing the mocking layers. - - - - - - Call the original method on the class, optionally bypassing the mocking layers. - - - - - - Use the property as a simple property, getting/setting the values without - causing mock expectations. - - - - - Get an event raiser for the last subscribed event. - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Documentation message for the expectation - - Message - - - - Better syntax to define repeats. - - - - - Allows to specify the number of time for method calls - - - - - Repeat the method twice. - - - - - Repeat the method once. - - - - - Repeat the method at least once, then repeat as many time as it would like. - - - - - Repeat the method any number of times. - This has special affects in that this method would now ignore orderring. - - - - - Set the range to repeat an action. - - Min. - Max. - - - - Set the amount of times to repeat an action. - - - - - This method must not appear in the replay state. - This has special affects in that this method would now ignore orderring. - - - - - Creates a new instance. - - the repository for this expectation - the recorder for this proxy - the proxy for this expectation - Expectation. - If the expectation still can be replaced by a Constraint call - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Set the return value for the method, but allow to override this return value in the future - - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Call the original method on the class, bypassing the mocking layers. - - - - - - Call the original method on the class, optionally bypassing the mocking layers - - - - - - Use the property as a simple property, getting/setting the values without - causing mock expectations. - - - - - Gets the event raiser for the last event - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Repeat the method twice. - - - - - Repeat the method once. - - - - - Repeat the method at least once, then repeat as many time as it would like. - - - - - This method must not appear in the replay state. - - - - - Documentation message for the expectation - - Message - - - - Repeat the method any number of times. - - - - - Set the range to repeat an action. - - Min. - Max. - - - - Set the amount of times to repeat an action. - - - - - Better syntax to define repeats. - - - - - This class will provide hash code for hashtables without needing - to call the GetHashCode() on the object, which may very well be mocked. - This class has no state so it is a singelton to avoid creating a lot of objects - that does the exact same thing. See flyweight patterns. - - - - - Get the hash code for a proxy object without calling GetHashCode() - on the object. - - - - - Compares two instances of mocked objects - - - - - Compare two mocked objects - - - - - The next hash code value for a mock object. - This is safe for multi threading. - - - - - The sole instance of - - - - - Doesn't log anything, just makes happy noises - - - - - Log expectations - allows to see what is going on inside Rhino Mocks - - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - This is a dummy type that is used merely to give DynamicProxy the proxy instance that - it needs to create IProxy's types. - - - - - Interface to find the repository of a mocked object - - - - - Return true if it should call the original method on the object - instead of pass it to the message chain. - - The method to call - - - - Register a method to be called on the object directly - - - - - Register a property on the object that will behave as a simple property - - - - - Check if the method was registered as a property method. - - - - - Do get/set on the property, according to need. - - - - - Do add/remove on the event - - - - - Get the subscribers of a spesific event - - - - - Gets the declaring type of the method, taking into acccount the possible generic - parameters that it was created with. - - - - - Clears the state of the object, remove original calls, property behavior, subscribed events, etc. - - - - - Get all the method calls arguments that were made against this object with the specificed - method. - - - Only method calls in replay mode are counted - - - - - Records the method call - - - - - The unique hash code of this mock, which is not related - to the value of the GetHashCode() call on the object. - - - - - Gets the repository. - - - - - Gets the implemented types by this mocked object - - The implemented. - - - - Gets or sets the constructor arguments. - - The constructor arguments. - - - - Create a new instance of - - - - - Return true if it should call the original method on the object - instead of pass it to the message chain. - - The method to call - - - - Register a method to be called on the object directly - - - - - Register a property on the object that will behave as a simple property - - - - - Check if the method was registered as a property method. - - - - - Do get/set on the property, according to need. - - - - - Do add/remove on the event - - - - - Get the subscribers of a spesific event - - - - - Gets the declaring type of the method, taking into acccount the possible generic - parameters that it was created with. - - - - - Get all the method calls arguments that were made against this object with the specificed - method. - - - - - Only method calls in replay mode are counted - - - - - Records the method call - - - - - - - Clears the state of the object, remove original calls, property behavior, subscribed events, etc. - - - - - The unique hash code of this proxy, which is not related - to the value of the GetHashCode() call on the object. - - - - - Gets the repository. - - - - - Gets or sets the constructor arguments. - - The constructor arguments. - - - - Gets the implemented types by this mocked object - - The implemented. - - - - Range for expected method calls - - - - - Creates a new instance. - - Min. - Max. - - - - Return the string representation of this range. - - - - - Gets or sets the min. - - - - - - Gets or sets the max. - - - - - - Records all the expectations for a mock and - return a ReplayDynamicMockState when Replay() - is called. - - - - - Records all the expectations for a mock - - - - - Different actions on this mock - - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Get the options for the last method call - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - Gets the matching verify state for this state - - - - - Get the options for the last method call - - - - - Get the options for the last method call - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Verify that this mock expectations have passed. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Asserts the previous method is closed (had an expectation set on it so we can replay it correctly) - - - - - Gets the last expectation. - - - - - Gets the total method calls count. - - - - - Get the options for the last method call - - - - - Gets the matching verify state for this state - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Records all the expectations for a mock and - return a ReplayPartialMockState when Replay() - is called. - - - - - Creates a new instance. - - Repository. - The proxy that generates the method calls - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Options for special repeat option - - - - - This method can be called only as many times as the IMethodOptions.Expect allows. - - - - - This method should never be called - - - - - This method can be call any number of times - - - - - This method will call the original method - - - - - This method will call the original method, bypassing the mocking layer - - - - - This method will simulate simple property behavior - - - - - Validate all expectations on a mock and ignores calls to - any method that was not setup properly. - - - - - Validate all expectations on a mock - - - - - The repository for this state - - - - - The proxy object for this state - - - - - Get the options for the last method call - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Add a method call for this state' mock. - This allows derived method to cleanly get a the setupresult behavior while adding - their own. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Get the options for the last method call - - - - - Gets the matching verify state for this state - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Gets a mock state that match the original mock state of the object. - - - - - Validate all expectations on a mock and ignores calls to - any method that was not setup properly. - - - - - Creates a new instance. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Gets a mock state that match the original mock state of the object. - - - - - Summary description for RhinoInterceptor. - - - - - Creates a new instance. - - - - - Intercept a method call and direct it to the repository. - - - - - Behave like a stub, all properties and events acts normally, methods calls - return default values by default (but can use expectations to set them up), etc. - - - - - Initializes a new instance of the class. - - The proxy that generates the method calls - Repository. - - - - We don't care much about expectations here, so we will remove the exepctation if - it is not closed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - - Validate expectations on recorded methods, but in general completely ignoring them. - Similar to except that it would return a - when BackToRecord is called. - - - - - Initializes a new instance of the class. - - The previous state for this method - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Gets a mock state that match the original mock state of the object. - - - - - Rudimetry implementation that simply logs methods calls as text. - - - - - Initializes a new instance of the class. - - The writer. - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - Write rhino mocks log info to the trace - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - if set to true [log recorded]. - if set to true [log replayed]. - if set to true [log unexpected]. - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - Writes log information as stack traces about rhino mocks activity - - - - - Allows to redirect output to a different location. - - - - - Logs the expectation as is was recorded - - The invocation. - The expectation. - - - - Logs the expectation as it was recorded - - The invocation. - The expectation. - - - - Logs the unexpected method call. - - The invocation. - The message. - - - - Validate arguments for methods - - - - - Validate that the passed argument is not null. - - The object to validate - The name of the argument - - If the obj is null, an ArgumentNullException with the passed name - is thrown. - - - - - Validate that the arguments are equal. - - Expected args. - Actual Args. - - - - Validate that the two argument are equals, including validation for - when the arguments are collections, in which case it will validate their values. - - - - - This method is safe for use even if any of the objects is a mocked object - that override equals. - - - - - Throw an object already verified when accessed - - - - - Create a new instance of VerifiedMockState - - The previous mock state, used to get the initial record state - - - - Add a method call for this state' mock. - - The invocation for this method - The method that was called - The arguments this method was called with - - - - Verify that this mock expectations have passed. - - - - - Verify that we can move to replay state and move - to the reply state. - - - - - Gets a mock state that match the original mock state of the object. - - - - - Get the options for the last method call - - - - - Set the exception to throw when Verify is called. - This is used to report exception that may have happened but where caught in the code. - This way, they are reported anyway when Verify() is called. - - - - - Gets the matching verify state for this state - - - - - Get the options for the last method call - - - - - Records the actions on all the mocks created by a repository. - - - - - Records the specified call with the specified args on the mocked object. - - - - - Get the expectation for this method on this object with this arguments - - - - - This check the methods that were setup using the SetupResult.For() - or LastCall.Repeat.Any() and that bypass the whole expectation model. - - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Removes all the repeatable expectations for proxy. - - Mocked object. - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Adds the recorder and turn it into the active recorder. - - Recorder. - - - - Moves to previous recorder. - - - - - Gets the recorded expectation or null. - - - - - Gets the next expected calls string. - - - - - Moves to parent recorder. - - - - - Set the expectation so it can repeat any number of times. - - - - - Removes the expectation from the recorder - - - - - Clear the replayer to call (and all its chain of replayers) - This also removes it from the list of expectations, so it will never be considered again - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Marker interface used to indicate that this is a partial mock. - - - - - Options for CallOriginalMethod - - - - - No expectation is created, the method will be called directly - - - - - Normal expectation is created, but when the method is later called, it will also call the original method - - - - - Base class for method recorders, handle delegating to inner recorder if needed. - - - - - List of the expected actions on for this recorder - The legal values are: - * Expectations - * Method Recorders - - - - - The current recorder. - - - - - The current replayer; - - - - - The parent recorder of this one, may be null. - - - - - This contains a list of all the replayers that should be ignored - for a spesific method call. A replayer gets into this list by calling - ClearReplayerToCall() on its parent. This list is Clear()ed on each new invocation. - - - - - All the repeatable methods calls. - - - - - Counts the recursion depth of the current expectation search stack - - - - - Creates a new instance. - - - - - Creates a new instance. - - Parent recorder. - Repeatable methods - - - - Records the specified call with the specified args on the mocked object. - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Remove the all repeatable expectations for proxy. - - Mocked object. - - - - Set the expectation so it can repeat any number of times. - - - - - Removes the expectation from the recorder - - - - - Adds the recorder and turn it into the active recorder. - - Recorder. - - - - Moves to previous recorder. - - - - - Moves to parent recorder. - - - - - Gets the recorded expectation or null. - - - - - Clear the replayer to call (and all its chain of replayers). - This also removes it from the list of expectations, so it will never be considered again - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the next expected calls string. - - - - - Handles the real getting of the recorded expectation or null. - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Handle the real execution of this method for the derived class - - - - - Should this replayer be considered valid for this call? - - - - - This check the methods that were setup using the SetupResult.For() - or LastCall.Repeat.Any() and that bypass the whole expectation model. - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Handle the real execution of this method for the derived class - - - - - Ordered collection of methods, methods must arrive in specified order - in order to pass. - - - - - Unordered collection of method records, any expectation that exist - will be matched. - - - - - The parent recorder we have redirected to. - Useful for certain edge cases in orderring. - See: FieldProblem_Entropy for the details. - - - - - Creates a new instance. - - Parent recorder. - Repeatable methods - - - - Creates a new instance. - - - - - Records the specified call with the specified args on the mocked object. - - Mocked object. - Method. - Expectation. - - - - Get the expectation for this method on this object with this arguments - - Invocation for this method - Mocked object. - Method. - Args. - True is the call was recorded, false otherwise - - - - Gets the all expectations for a mocked object and method combination, - regardless of the expected arguments / callbacks / contraints. - - Mocked object. - Method. - List of all relevant expectation - - - - Gets the all expectations for proxy. - - Mocked object. - List of all relevant expectation - - - - Replaces the old expectation with the new expectation for the specified proxy/method pair. - This replace ALL expectations that equal to old expectations. - - Proxy. - Method. - Old expectation. - New expectation. - - - - Handle the real execution of this method for the derived class - - - - - Handles the real getting of the recorded expectation or null. - - - - - Handle the real execution of this method for the derived class - - - - - Gets the next expected calls string. - - - - - Create an exception for an unexpected method call. - - - - - Gets a value indicating whether this instance has expectations that weren't satisfied yet. - - - true if this instance has expectations; otherwise, false. - - - - - Creates a new instance. - - Parent recorder. - Repetable methods - - - - Creates a new instance. - - - - - Handles the real getting of the recorded expectation or null. - - - - - Get the expectation for this method on this object with this arguments - - - - - Gets the next expected calls string. - - - - - Hold an expectation for a method call on an object - - - - - Creates a new instance. - - Proxy. - Method. - Expectation. - - - - Determains if the object equal to this instance - - Obj. - - - - - Gets the hash code. - - - - - - Gets the proxy. - - - - - - Gets the method. - - - - - - Gets the expectation. - - - - - - Holds a pair of mocked object and a method - and allows to compare them against each other. - This allows us to have a distinction between mockOne.MyMethod() and - mockTwo.MyMethod()... - - - - - Creates a new instance. - - Proxy. - Method. - - - - Determains whatever obj equals to this instance. - ProxyMethodPairs are equals when they point to the same /instance/ of - an object, and to the same method. - - Obj. - - - - - Gets the hash code. - - - - - - Gets the proxy. - - - - - - Gets the method. - - - - - - Change the recorder from ordered to unordered and vice versa - - - - - Creates a new instance. - - - - - Disposes this instance. - - - - - Utility class for dealing with messing generics scenarios. - - - - - There are issues with trying to get this to work correctly with open generic types, since this is an edge case, - I am letting the runtime handle it. - - - - - Gets the real type, including de-constructing and constructing the type of generic - methods parameters. - - The type. - The invocation. - - - - - Because we need to support complex types here (simple generics were handled above) we - need to be aware of the following scenarios: - List[T] and List[Foo[T]] - - - - - Utility class for working with method calls. - - - - - Return the string representation of a method call and its arguments. - - The method - The method arguments - Invocation of the method, used to get the generics arguments - Delegate to format the parameter - The string representation of this method call - - - - Return the string representation of a method call and its arguments. - - The invocation of the method, used to get the generic parameters - The method - The method arguments - The string representation of this method call - - - - Delegate to format the argument for the string representation of - the method call. - - - - - Utility to get the default value for a type - - - - - The default value for a type. - Null for reference types and void - 0 for value types. - First element for enums - Note that we need to get the value even for opened generic types, such as those from - generic methods. - - Type. - The invocation. - the default value - - - - Defines constraints and return values for arguments of a mock. - Only use Arg inside a method call on a mock that is recording. - Example: - ExpectCall( - mock.foo( - Arg<int>.Is.GreaterThan(2), - Arg<string>.Is.Anything - )); - Use Arg.Text for string specific constraints - Use Arg<ListClass>.List for list specific constraints - - - - - - Register the predicate as a constraint for the current call. - - The predicate. - default(T) - - Allow you to use code to create constraints - - demo.AssertWasCalled(x => x.Bar(Arg{string}.Matches(a => a.StartsWith("b") && a.Contains("ba")))); - - - - - - Define a complex constraint for this argument by passing several constraints - combined with operators. (Use Is in simple cases.) - Example: Arg<string>.Matches(Is.Equal("Hello") || Text.EndsWith("u")); - - Constraints using Is, Text and List - Dummy to satisfy the compiler - - - - Define a Ref argument. - - Constraints for this argument - value returned by the mock - - - - - Define a out parameter. Use it together with the keyword out and use the - Dummy field available by the return value. - Example: mock.foo( out Arg<string>.Out("hello").Dummy ); - - - - - - - Define a simple constraint for this argument. (Use Matches in simple cases.) - Example: - Arg<int>.Is.Anthing - Arg<string>.Is.Equal("hello") - - - - - Define Constraints on list arguments. - - - - - Use the Arg class (without generic) to define Text constraints - - - - - Define constraints on text arguments. - - - - - Used to manage the static state of the Arg<T> class"/> - - - - - Resets the static state - - - - - Returns return values for the out and ref parameters - Note: the array returned has the size of the number of out and ref - argument definitions - - - - - - Returns the constraints for all arguments. - Out arguments have an Is.Anything constraint and are also in the list. - - - - - - What should BackToRecord clear - - - - - Retain all expectations and behaviors and return to mock - - - - - All expectations - - - - - Event subscribers for this instance - - - - - Methods that should be forwarded to the base class implementation - - - - - Properties that should behave like properties - - - - - Remove all the behavior of the object - - - - - This class defines a lot of method signatures, which we will use - to allow compatability on net-2.0 - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - dummy - - - - - Allows expectations to be set on methods that should never be called. - For methods with void return value, you need to use LastCall or - DoNotExpect.Call() with a delegate. - - - - - Sets LastCall.Repeat.Never() on /any/ proxy on /any/ repository on the current thread. - This method if not safe for multi threading scenarios. - - - - - Accepts a delegate that will execute inside the method which - LastCall.Repeat.Never() will be applied to. - It is expected to be used with anonymous delegates / lambda expressions and only one - method should be called. - - - IService mockSrv = mocks.CreateMock(typeof(IService)) as IService; - DoNotExpect.Call(delegate{ mockSrv.Stop(); }); - ... - - - - - Allows to set expectation on methods that has return values. - For methods with void return value, you need to use LastCall - - - - - The method options for the last call on /any/ proxy on /any/ repository on the current thread. - This method if not safe for multi threading scenarios, use . - - - - - Accepts a delegate that will execute inside the method, and then return the resulting - instance. - It is expected to be used with anonymous delegates / lambda expressions and only one - method should be called. - - - IService mockSrv = mocks.CreateMock(typeof(IService)) as IService; - Expect.Call(delegate{ mockSrv.Start(); }).Throw(new NetworkException()); - ... - - - - - Get the method options for the last method call on the mockInstance. - - - - - A delegate that can be used to get better syntax on Expect.Call(delegate { foo.DoSomething(); }); - - - - - Allows to set various options for the last method call on - a specified object. - If the method has a return value, it's recommended to use Expect - - - - - Allows to get an interface to work on the last call. - - The mocked object - Interface that allows to set options for the last method call on this object - - - - Set the return value for the method. - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Set the return value for the method. This overload is needed for LastCall.Return(null) - - The object the method will return - IRepeat that defines how many times the method will return this value - - - - Throws the specified exception when the method is called. - - Exception to throw - - - - Ignores the arguments for this method. Any argument will be matched - againt this method. - - - - - Add constraints for the method's arguments. - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Set a callback method for the last call - - - - - Call the original method on the class, bypassing the mocking layers, for the last call. - - - - - Call the original method on the class, optionally bypassing the mocking layers, for the last call. - - - - - Set a delegate to be called when the expectation is matched. - The delegate return value will be returned from the expectation. - - - - - Gets an interface that will raise the last event when called. - - - - - Set the parameter values for out and ref parameters. - This is done using zero based indexing, and _ignoring_ any non out/ref parameter. - - - - - Documentation message for the expectation - - Message - - - - Use the property as a simple property, getting/setting the values without - causing mock expectations. - - - - - Better syntax to define repeats. - - - - - Accessor for the current mocker - - - - - The current mocker - - - - - Creates proxied instances of types. - - - Adds optional new usage: - using(mockRepository.Record()) { - Expect.Call(mock.Method()).Return(retVal); - } - using(mockRepository.Playback()) { - // Execute code - } - N.B. mockRepository.ReplayAll() and mockRepository.VerifyAll() - calls are taken care of by Record/Playback - - - - - This is a map of types to ProxyGenerators. - - - - - This is used to record the last repository that has a method called on it. - - - - - this is used to get to the last proxy on this repository. - - - - - For mock delegates, maps the proxy instance from intercepted invocations - back to the delegate that was originally returned to client code, if any. - - - - - All the proxies in the mock repositories - - - - - This is here because we can't put it in any of the recorders, since repeatable methods - have no orderring, and if we try to handle them using the usual manner, we would get into - wierd situations where repeatable method that was defined in an orderring block doesn't - exists until we enter this block. - - - - - Creates a new instance. - - - - - Move the repository to ordered mode - - - - - Move the repository to un-ordered mode - - - - - Creates a mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a strict mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a remoting mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a strict remoting mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a remoting mock for the specified type. - - - Arguments for the class' constructor, if mocking a concrete class - - - - - Creates a strict remoting mock for the specified type. - - - Arguments for the class' constructor, if mocking a concrete class - - - - - Creates a mock from several types, with strict semantics. - Only may be a class. - - - - - Creates a strict mock from several types, with strict semantics. - Only may be a class. - - - - - Creates a mock from several types, with strict semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class. - - - - Creates a strict mock from several types, with strict semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class. - - - - Creates a mock from several types, with dynamic semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - - - - Creates a mock from several types, with dynamic semantics. - Only may be a class. - - The main type to mock. - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class. - - - - Creates a dynamic mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a dynamic mock for the specified type. - - Type. - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a dynamic mock for the specified type. - - - Arguments for the class' constructor, if mocking a concrete class - - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Arguments for the class' constructor. - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Extra interface types to mock. - - - - Creates a mock object that defaults to calling the class methods. - - Type. - Extra interface types to mock. - Arguments for the class' constructor. - - - - Creates a mock object using remoting proxies - - Type to mock - must be MarshalByRefObject - Mock object - Proxy mock can mock non-virtual methods, but not static methods - Creates the mock state for this proxy - - - - Cause the mock state to change to replay, any further call is compared to the - ones that were called in the record state. - - the object to move to replay state - - - - Cause the mock state to change to replay, any further call is compared to the - ones that were called in the record state. - - the object to move to replay state - - - - - Move the mocked object back to record state. - Will delete all current expectations! - - - - - Move the mocked object back to record state. - Optionally, can delete all current expectations, but allows more granularity about how - it would behave with regard to the object state. - - - - - Verify that all the expectations for this object were fulfilled. - - the object to verify the expectations for - - - - Get the method options for the last call on - mockedInstance. - - The mock object - Method options for the last call - - - - Maps an invocation proxy back to the mock object instance that was originally - returned to client code which might have been a delegate to this proxy. - - The mock object proxy from the intercepted invocation - The mock object - - - - This is provided to allow advance extention functionality, where Rhino Mocks standard - functionality is not enough. - - The type to mock - Delegate that create the first state of the mocked object (usualy the record state). - Additional types to be implemented, this can be only interfaces - optional arguments for the constructor - - - - - Method: GetMockedObject - Get an IProxy from a mocked object instance, or throws if the - object is not a mock object. - - - - - Method: GetMockedObjectOrNull - Get an IProxy from a mocked object instance, or null if the - object is not a mock object. - - - - - Pops the recorder. - - - - - Pushes the recorder. - - New recorder. - - - - All the mock objects in this repository will be moved - to record state. - - - - - All the mock objects in this repository will be moved - to record state. - - - - - Replay all the mocks from this repository - - - - - Verify all the mocks from this repository - - - - - Gets the proxy generator for a specific type. Having a single ProxyGenerator - with multiple types linearly degrades the performance so this implementation - keeps one ProxyGenerator per type. - - - - - Set the exception to be thrown when verified is called. - - - - - Creates a mock for the spesified type. - - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a strict mock for the spesified type. - - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a dynamic mock for the specified type. - - Arguments for the class' constructor, if mocking a concrete class - - - - Creates a mock object from several types. - - - - - Creates a strict mock object from several types. - - - - - Create a mock object from several types with dynamic semantics. - - - - - Create a mock object from several types with partial semantics. - - - - - Create a mock object from several types with strict semantics. - - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class - - - - Create a strict mock object from several types with strict semantics. - - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class - - - - Create a mock object from several types with dynamic semantics. - - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class - - - - Create a mock object from several types with partial semantics. - - Extra interface types to mock. - Arguments for the class' constructor, if mocking a concrete class - - - - Create a mock object with from a class that defaults to calling the class methods - - Arguments for the class' constructor, if mocking a concrete class - - - - Create a stub object, one that has properties and events ready for use, and - can have methods called on it. It requires an explicit step in order to create - an expectation for a stub. - - The arguments for constructor. - - - - Create a stub object, one that has properties and events ready for use, and - can have methods called on it. It requires an explicit step in order to create - an expectation for a stub. - - The type. - The arguments for constructor. - - - - - Generates a stub without mock repository - - The arguments for constructor. - - - - - Generates the stub without mock repository - - The type. - The arguments for constructor. - - - - Returns true if the passed mock is currently in replay mode. - - The mock to test. - True if the mock is in replay mode, false otherwise. - - - - Generate a mock object without needing the mock repository - - - - - Determines whether the specified proxy is a stub. - - The proxy. - - - - - - - - - - - - - - Gets the recorder. - - - - - - Gets the replayer for this repository. - - - - - - Gets the last proxy which had a method call. - - - - - Delegate: CreateMockState - This is used internally to cleanly handle the creation of different - RecordMockStates. - - - - - Used for [assembly: InternalsVisibleTo(RhinoMocks.StrongName)] - Used for [assembly: InternalsVisibleTo(RhinoMocks.NormalName)] - - - - - Strong name for the Dynamic Proxy assemblies. Used for InternalsVisibleTo specification. - - - - - Normal name for dynamic proxy assemblies. Used for InternalsVisibleTo specification. - - - - - Logs all method calls for methods - - - - - Setup method calls to repeat any number of times. - - - - - Get the method options and set the last method call to repeat - any number of times. - This also means that the method would transcend ordering - - - - - Get the method options for the last method call on the mockInstance and set it - to repeat any number of times. - This also means that the method would transcend ordering - - - - - Allows easier access to MockRepository, works closely with Mocker.Current to - allow access to a context where the mock repository is automatially verified at - the end of the code block. - - - - - Initialize a code block where Mocker.Current is initialized. - At the end of the code block, all the expectation will be verified. - This overload will create a new MockRepository. - - The code that will be executed under the mock context - - - - Initialize a code block where Mocker.Current is initialized. - At the end of the code block, all the expectation will be verified. - This overload will create a new MockRepository. - - The mock repository to use, at the end of the code block, VerifyAll() will be called on the repository. - The code that will be executed under the mock context - - - - Create a FluentMocker - - The mock repository to use. - - - - A method with no arguments and no return value that will be called under the mock context. - - - - - FluentMocker implements some kind of fluent interface attempt - for saying "With the Mocks [mocks], Expecting (in same order) [things] verify [that]." - - - - - Interface to verify previously defined expectations - - - - - Verifies if a piece of code - - - - - Defines unordered expectations - - A delegate describing the expectations - an IMockVerifier - - - - Defines ordered expectations - - A delegate describing the expectations - an IMockVerifier - - - - Verifies previously defined expectations - - - - diff --git a/lib/nunit-license.txt b/lib/nunit-license.txt deleted file mode 100644 index 4beb762c93..0000000000 --- a/lib/nunit-license.txt +++ /dev/null @@ -1,15 +0,0 @@ -Copyright © 2002-2007 Charlie Poole -Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov -Copyright © 2000-2002 Philip A. Craig - -This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. - -Portions Copyright © 2002-2007 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig - -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. diff --git a/lib/rhino-license.txt b/lib/rhino-license.txt deleted file mode 100644 index 1c8a46e470..0000000000 --- a/lib/rhino-license.txt +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2005 - 2008 Ayende Rahien (ayende@ayende.com) -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Ayende Rahien nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/src/ProtoGen.Test/ProtoGen.Test.csproj b/src/ProtoGen.Test/ProtoGen.Test.csproj index 5325be5180..a3883ccf47 100644 --- a/src/ProtoGen.Test/ProtoGen.Test.csproj +++ b/src/ProtoGen.Test/ProtoGen.Test.csproj @@ -59,10 +59,6 @@ False ..\..\lib\NUnit\lib\nunit.framework.dll - - False - ..\..\lib\Rhino.Mocks.dll - diff --git a/src/ProtocolBuffers.Test/ProtocolBuffers.Test(Silverlight).csproj b/src/ProtocolBuffers.Test/ProtocolBuffers.Test(Silverlight).csproj index 4ff2e676fc..9842dd6ad1 100644 --- a/src/ProtocolBuffers.Test/ProtocolBuffers.Test(Silverlight).csproj +++ b/src/ProtocolBuffers.Test/ProtocolBuffers.Test(Silverlight).csproj @@ -117,6 +117,7 @@ + diff --git a/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj b/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj index 24547a47b2..2b270afdc4 100644 --- a/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj +++ b/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj @@ -62,10 +62,6 @@ False ..\..\lib\NUnit\lib\nunit.framework.dll - - False - ..\..\lib\Rhino.Mocks.dll - diff --git a/src/ProtocolBuffers.Test/ServiceTest.cs b/src/ProtocolBuffers.Test/ServiceTest.cs index 4678ca7b25..ee28ca1c67 100644 --- a/src/ProtocolBuffers.Test/ServiceTest.cs +++ b/src/ProtocolBuffers.Test/ServiceTest.cs @@ -38,9 +38,6 @@ using System; using Google.ProtocolBuffers.Descriptors; using Google.ProtocolBuffers.TestProtos; using Microsoft.VisualStudio.TestTools.UnitTesting; -using Rhino.Mocks; -using Rhino.Mocks.Constraints; -using Is = Rhino.Mocks.Constraints.Is; namespace Google.ProtocolBuffers { @@ -77,10 +74,9 @@ namespace Google.ProtocolBuffers [TestMethod] public void CallMethodFoo() { - MockRepository mocks = new MockRepository(); FooRequest fooRequest = FooRequest.CreateBuilder().Build(); FooResponse fooResponse = FooResponse.CreateBuilder().Build(); - IRpcController controller = mocks.StrictMock(); + IRpcController controller = new RpcTestController(); bool fooCalled = false; @@ -98,60 +94,18 @@ namespace Google.ProtocolBuffers doneHandlerCalled = true; }); - using (mocks.Record()) - { - // No mock interactions to record - } - service.CallMethod(FooDescriptor, controller, fooRequest, doneHandler); Assert.IsTrue(doneHandlerCalled); Assert.IsTrue(fooCalled); - mocks.VerifyAll(); - } - - private delegate void CallFooDelegate(MethodDescriptor descriptor, IRpcController controller, - IMessage request, IMessage response, Action doneHandler); - - /// - /// Tests the generated stub handling of Foo. By this stage we're reasonably confident - /// that the choice between Foo and Bar is arbitrary, hence the lack of a corresponding Bar - /// test. - /// - [TestMethod] - [Ignore, System.ComponentModel.Description("Crashes Mono - needs further investigation")] - public void GeneratedStubFooCall() - { - FooRequest fooRequest = FooRequest.CreateBuilder().Build(); - MockRepository mocks = new MockRepository(); - IRpcChannel mockChannel = mocks.StrictMock(); - IRpcController mockController = mocks.StrictMock(); - TestGenericService service = TestGenericService.CreateStub(mockChannel); - Action doneHandler = mocks.StrictMock>(); - - using (mocks.Record()) - { - // Nasty way of mocking out "the channel calls the done handler". - Expect.Call(() => mockChannel.CallMethod(null, null, null, null, null)) - .IgnoreArguments() - .Constraints(Is.Same(FooDescriptor), Is.Same(mockController), Is.Same(fooRequest), - Is.Same(FooResponse.DefaultInstance), Is.Anything()) - .Do((CallFooDelegate) ((p1, p2, p3, response, done) => done(response))); - doneHandler(FooResponse.DefaultInstance); - } - - service.Foo(mockController, fooRequest, doneHandler); - - mocks.VerifyAll(); } [TestMethod] public void CallMethodBar() { - MockRepository mocks = new MockRepository(); BarRequest barRequest = BarRequest.CreateBuilder().Build(); BarResponse barResponse = BarResponse.CreateBuilder().Build(); - IRpcController controller = mocks.StrictMock(); + IRpcController controller = new RpcTestController(); bool barCalled = false; @@ -169,19 +123,109 @@ namespace Google.ProtocolBuffers doneHandlerCalled = true; }); - using (mocks.Record()) - { - // No mock interactions to record - } - service.CallMethod(BarDescriptor, controller, barRequest, doneHandler); Assert.IsTrue(doneHandlerCalled); Assert.IsTrue(barCalled); - mocks.VerifyAll(); } + [TestMethod] + public void GeneratedStubFooCall() + { + IRpcChannel channel = new RpcTestChannel(); + IRpcController controller = new RpcTestController(); + TestGenericService service = TestGenericService.CreateStub(channel); + FooResponse fooResponse = null; + Action doneHandler = r => fooResponse = r; + + service.Foo(controller, FooRequest.DefaultInstance, doneHandler); + + Assert.IsNotNull(fooResponse); + Assert.IsFalse(controller.Failed); + } + + [TestMethod] + public void GeneratedStubBarCallFails() + { + IRpcChannel channel = new RpcTestChannel(); + IRpcController controller = new RpcTestController(); + TestGenericService service = TestGenericService.CreateStub(channel); + BarResponse barResponse = null; + Action doneHandler = r => barResponse = r; + + service.Bar(controller, BarRequest.DefaultInstance, doneHandler); + + Assert.IsNull(barResponse); + Assert.IsTrue(controller.Failed); + } + + #region RpcTestController + private class RpcTestController : IRpcController + { + public string TestFailedReason { get; set; } + public bool TestCancelled { get; set; } + public Action TestCancelledCallback { get; set; } + + void IRpcController.Reset() + { + TestFailedReason = null; + TestCancelled = false; + TestCancelledCallback = null; + } + + bool IRpcController.Failed + { + get { return TestFailedReason != null; } + } + + string IRpcController.ErrorText + { + get { return TestFailedReason; } + } + + void IRpcController.StartCancel() + { + TestCancelled = true; + if (TestCancelledCallback != null) + TestCancelledCallback(this); + } + void IRpcController.SetFailed(string reason) + { + TestFailedReason = reason; + } + + bool IRpcController.IsCanceled() + { + return TestCancelled; + } + + void IRpcController.NotifyOnCancel(Action callback) + { + TestCancelledCallback = callback; + } + } + #endregion + #region RpcTestChannel + private class RpcTestChannel : IRpcChannel + { + public MethodDescriptor TestMethodCalled { get; set; } + + void IRpcChannel.CallMethod(MethodDescriptor method, IRpcController controller, IMessage request, IMessage responsePrototype, Action done) + { + TestMethodCalled = method; + try + { + done(FooResponse.DefaultInstance); + } + catch (Exception e) + { + controller.SetFailed(e.Message); + } + } + } + #endregion + #region TestServiceImpl private class TestServiceImpl : TestGenericService { private readonly Action> fooHandler; @@ -213,5 +257,6 @@ namespace Google.ProtocolBuffers barHandler(request, done); } } + #endregion } } \ No newline at end of file diff --git a/src/ProtocolBuffers.sln b/src/ProtocolBuffers.sln index f9c7550247..e174eddbfb 100644 --- a/src/ProtocolBuffers.sln +++ b/src/ProtocolBuffers.sln @@ -1,5 +1,5 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "proto", "proto", "{1F896D5C-5FC2-4671-9216-781CB8187EC7}" ProjectSection(SolutionItems) = preProject ..\protos\tutorial\addressbook.proto = ..\protos\tutorial\addressbook.proto diff --git a/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj b/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj index d10aac15ba..0adb9135d4 100644 --- a/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj +++ b/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj @@ -43,10 +43,6 @@ False ..\..\lib\NUnit\lib\nunit.framework.dll - - False - ..\..\lib\Rhino.Mocks.dll - diff --git a/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.csproj b/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.csproj index b0a2b7c1ef..e516198a43 100644 --- a/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.csproj +++ b/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.csproj @@ -43,10 +43,6 @@ False ..\..\lib\NUnit\lib\nunit.framework.dll - - False - ..\..\lib\Rhino.Mocks.dll -