From fae5d3eb7f836e2f4e20ce29b1bdd8491c9c4c5b Mon Sep 17 00:00:00 2001 From: Changhua Date: Fri, 20 Jan 2023 11:17:48 +0800 Subject: [PATCH] Add Launcher --- WeChatFerry.sln | 7 ++ launcher/Launcher.cpp | 11 +++ launcher/Launcher.h | 137 +++++++++++++++++++++++++++ launcher/Launcher.resx | 123 ++++++++++++++++++++++++ launcher/icon.ico | Bin 0 -> 174448 bytes launcher/launcher.aps | Bin 0 -> 177008 bytes launcher/launcher.rc | 71 ++++++++++++++ launcher/launcher.vcxproj | 151 ++++++++++++++++++++++++++++++ launcher/launcher.vcxproj.filters | 40 ++++++++ launcher/launcher.vcxproj.user | 4 + launcher/resource.h | 16 ++++ sdk/SDK.vcxproj | 1 + spy/Spy.vcxproj | 2 + spy/rpc_server.cpp | 32 +++++-- 14 files changed, 585 insertions(+), 10 deletions(-) create mode 100644 launcher/Launcher.cpp create mode 100644 launcher/Launcher.h create mode 100644 launcher/Launcher.resx create mode 100644 launcher/icon.ico create mode 100644 launcher/launcher.aps create mode 100644 launcher/launcher.rc create mode 100644 launcher/launcher.vcxproj create mode 100644 launcher/launcher.vcxproj.filters create mode 100644 launcher/launcher.vcxproj.user create mode 100644 launcher/resource.h diff --git a/WeChatFerry.sln b/WeChatFerry.sln index 4c077b5..edf529f 100644 --- a/WeChatFerry.sln +++ b/WeChatFerry.sln @@ -15,6 +15,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdk", "sdk\sdk.vcxproj", "{ {4DE80B82-5F6A-4C4C-9D16-1574308110FA} = {4DE80B82-5F6A-4C4C-9D16-1574308110FA} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launcher", "launcher\launcher.vcxproj", "{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}" + ProjectSection(ProjectDependencies) = postProject + {ABFCB647-137F-478B-A73E-F0B1E3ADC215} = {ABFCB647-137F-478B-A73E-F0B1E3ADC215} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Release|x86 = Release|x86 @@ -26,6 +31,8 @@ Global {2FC45612-A106-42D1-871F-1DE704095B2C}.Release|x86.Build.0 = Release|Win32 {ABFCB647-137F-478B-A73E-F0B1E3ADC215}.Release|x86.ActiveCfg = Release|Win32 {ABFCB647-137F-478B-A73E-F0B1E3ADC215}.Release|x86.Build.0 = Release|Win32 + {B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}.Release|x86.ActiveCfg = Release|Win32 + {B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/launcher/Launcher.cpp b/launcher/Launcher.cpp new file mode 100644 index 0000000..1bcd190 --- /dev/null +++ b/launcher/Launcher.cpp @@ -0,0 +1,11 @@ +#include "Launcher.h" + +using namespace launcher; + +[STAThreadAttribute] + +int main() { + Launcher launcher; + launcher.ShowDialog(); + return 0; +} diff --git a/launcher/Launcher.h b/launcher/Launcher.h new file mode 100644 index 0000000..00967af --- /dev/null +++ b/launcher/Launcher.h @@ -0,0 +1,137 @@ +#pragma once + +#include "../sdk/sdk.h" + +namespace launcher { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + /// + /// Launcher 摘要 + /// + public ref class Launcher : public System::Windows::Forms::Form + { + public: + Launcher(void) + { + InitializeComponent(); + // + //TODO: 在此处添加构造函数代码 + // + } + + protected: + /// + /// 清理所有正在使用的资源。 + /// + ~Launcher() + { + if (components) + { + delete components; + } + } + private: System::Windows::Forms::Button^ Start; + private: System::Windows::Forms::Button^ Stop; + protected: + + protected: + + + protected: + + private: + /// + /// 必需的设计器变量。 + /// + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + void InitializeComponent(void) + { + this->Start = (gcnew System::Windows::Forms::Button()); + this->Stop = (gcnew System::Windows::Forms::Button()); + this->SuspendLayout(); + // + // Start + // + this->Start->Font = (gcnew System::Drawing::Font(L"宋体", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, + static_cast(134))); + this->Start->Location = System::Drawing::Point(36, 39); + this->Start->Name = L"Start"; + this->Start->Size = System::Drawing::Size(100, 40); + this->Start->TabIndex = 0; + this->Start->Text = L"启动"; + this->Start->UseVisualStyleBackColor = true; + this->Start->Click += gcnew System::EventHandler(this, &Launcher::Start_Click); + // + // Stop + // + this->Stop->Enabled = false; + this->Stop->Font = (gcnew System::Drawing::Font(L"宋体", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, + static_cast(134))); + this->Stop->Location = System::Drawing::Point(177, 39); + this->Stop->Name = L"Stop"; + this->Stop->Size = System::Drawing::Size(100, 40); + this->Stop->TabIndex = 1; + this->Stop->Text = L"关闭"; + this->Stop->UseVisualStyleBackColor = true; + this->Stop->Click += gcnew System::EventHandler(this, &Launcher::Stop_Click); + // + // Launcher + // + this->AutoScaleDimensions = System::Drawing::SizeF(6, 12); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(308, 122); + this->Controls->Add(this->Stop); + this->Controls->Add(this->Start); + this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle; + this->MaximizeBox = false; + this->Name = L"Launcher"; + this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; + this->Text = L"WeChatFerry Launcher"; + this->FormClosing += gcnew System::Windows::Forms::FormClosingEventHandler(this, &Launcher::Launcher_FormClosing); + this->ResumeLayout(false); + + } +#pragma endregion + private: System::Void Start_Click(System::Object^ sender, System::EventArgs^ e) { + this->Start->Enabled = false; + this->Stop->Enabled = true; + WxInitSDK(); + } + private: System::Void Stop_Click(System::Object^ sender, System::EventArgs^ e) { + this->Stop->Enabled = false; + this->Start->Enabled = true; + WxDestroySDK(); + } + private: System::Void Launcher_Closing(System::Object^ sender, System::EventArgs^ e) { + if (this->Stop->Enabled) { // 已经启动 + WxDestroySDK(); + } + } + private: System::Void Launcher_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) + { + if (this->Stop->Enabled) { // 已经启动 + System::Windows::Forms::DialogResult ret; + ret = MessageBox::Show("确定退出?", "警告", MessageBoxButtons::YesNo, MessageBoxIcon::Question); + if (ret == System::Windows::Forms::DialogResult::Yes) { + WxDestroySDK(); + e->Cancel = false; + } + else { + e->Cancel = true; + } + } + } + }; +} diff --git a/launcher/Launcher.resx b/launcher/Launcher.resx new file mode 100644 index 0000000..61bc649 --- /dev/null +++ b/launcher/Launcher.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/launcher/icon.ico b/launcher/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..77c7d4f1d9323e91764f2d759d9cdf81d3af4819 GIT binary patch literal 174448 zcmeF42Y_5v)qp1i*ib_!0m6n}q&Er04Lu+ry{P;|ih`g50#bzC5G3^8q*uj;Ac%A} z1OZVL>7iu<2&j~$x*<#E|Gu~PE^jAqW@mP1HwnzsFXz5n&OP_s`rgbAx!i!=Q)@S2EiObu7jKxike{>%nnEj*T?6;S;$R*b0P2qS z$~rg-u7O?QE3g)93pc|i5cAJR_zc(!R)+QAP`CsZfS51Jk;L5y!$O*NUIjP6<#0Yc z2AhFp23&E)6^S$);!Z{$6vFEJC9DKL4VkO+orwef`0iwXo6TS$_+mD6{BZagED84g z^)M8=j5+UN5739!rEiQA`@;6yH~KJ%Pb&y<);9{ShKu0@XadKAmt!sQOS)_flNRfn zpYVpDJ@$=log1dBH~KMuYyT10WJgA3+M8mpc!rh*QrkZh6B!rBpegt zJ#tNW6x6dh%nPyHK*Fx$uEW-S0Cdh9!sc^6oDBPe>yL5fao)Pt-2pd*a2Ff2g?O=^ z@53vg4T+gbuzvT4_rW%v3fG44JxKk!GQ_4$CrtzOTmrubW<+P*rn!FJ2S>uMLEjz$ z4}tk@%XE6v5vIeI@FJ`g?u}a&#)D(Rb+WTB2a z1MG*b!u_I1eefGtJj9tV;(Gl6*hl*K8qgN|#Wvjte*)Jz%eXF1gtftYeef4p+WUAJ z4mfAtgs+AB#gI#duz9?XcG>PT;C7e?7J>)iAV~B@{mKw$o_hmJmdK~>eZcV(_XXGO zr(rcnt4_kk1@!4-&wu2{OnD<$i@qy)#SA+IVfNS7V zaBjQ=kAiz`=Qtz09%z3YOWL$E90v+hBWQF9Q5A?A+Ae4Z$i9dWE4CDr$REPrpp{6NRQ?8oqaVC#(?8R-&x-A zu@Gzw7lL-51dgF%s=LIS4+g;=;8>ps55w)?-259%gx|szP}JvL6sK+|6WgL)&WrDY zXClXv^JaB$%}Mg5ihf~(c@9en)0WHSTL^$WST{M>Jh(O2GPo_*oEwxI z*EA@1&Z+0->c>sa)stRNz6F{F=N34*A$RJ@jk&R{jpWPcS_b5EZFNB>x;=*thmqiO zU~=&Q*x%249TnI9_3U@~<(GG!|N6@#VNMN1ZVEpI_w1@vubzNw(JHVnxc<0b{R~FK z=5RK=4J|MndR@Odz`bByxDwuicK8Ua>pl2iz%=8310~npatuR ztFSV-PP<1R1UtgZ@N1YKGOIB@O;)CmZX4{&kHP)XJtXyiaF~ z^{V3tI20B!kHjn9BX@@n;YLWt6EbF-PMQXT!F@~{jt2X#Gp}LLr*}Xe#=}l99M%MV zxhL!b55qIC40P%!6)+#zra!{J!2anhVmP2}+UU9AT`;fm6L1XKZtXh}k}{o2N(5qF zr1L=?&XX=ByoV9+AMi}F8(avDuosLB_fwFgpiBAgZp;t*K;Jz8^I8TO8AA9PaNc}3 z#uwx{m3V!zQA|gAcKRl40!hCjJtt_R=f6P^>zJGHgP;wIr*u0$98VvE?e&b4lu70B zz6qS?+sAaI<6;{89c-WZmW9di0ccmE3u*lm;I9zRe5U;vY`6N8xn#ZZA}*HSo3QB^o4C%hs&4f<~kr0dv=`&M`dwo9eC&ixW>`^v_5cbNz3;97VKHV5OJXRE^2 z;98Qd-#N1}Yy^g5+Wv%X`#7+Cch$#oO8dz6J`dVZN%`5yZ=d`Jnqf)kw(gk0yn&I( ziJ%{jgvGDD_Sz&Z=8cjx;~k?bz&Y>%JOryjW|>$vOU5$DHNmyTG5iEH!WLjX&I8B# z>aZ(Z43ojS4KEE9*B$MNWs%Owec%C5_a~rFCV}<63)*L#<84bw#zEB88;P!@4M^wt zhHwbDmt6~2!6{&WJ7zk^UvKIxRrbOQFU*Y{J2u*sJVTYrUrQ_B1H6NX*P8^!69%O#Z>s za)amHFjs%(hKJ`*-tarHS$=$eY`$e$UA{FpINz45M|ER9|46JdpZ7h5pB0UU&i53{ z*WOd$j@ni8z)bG}*8jLJ&q3JdDfi@=-fj&HwtLQ58{F6K0?+j`%zo<*c((VPu`TQY zdx7Wekx&nVg8V761@ho|z-Q5Zx8FL!bD-y^M(`~5Z}6P*8B7b(^XW@)Cp;74v|XCP zvroU-Z(SE(e6hBBzVkWcUl8q4PJ#Epv#sZSpE=U$K2JvfA4^zW{bGNp%Xzma=*wu= z+l23cV_|z(4?Gt;&bNUd!bNZz_#ELm*Zvs|{bGNp$1!{?w1T#4x98{$VJ^tDCB_Ho ze4PlEe;KyF=%R}<%T=pWs6+jZ^}xi!L#&hU>iK&Zw)2eV0!p2 z$(Dq_3(JFRS;@Lh5A24Fe!rRU(lM>1f`Y_Y2I)A9ZE#K`>yYVLm+|1(y#;LdMEC)? z?iFo&NLvi~Fj(#p7!F0tWYwRJi)E3nvyMUa-U!JUOy`YZ(vtd+=Y#oW3j7gv25njn zM#8>u6dVtS!p~p|dhsVHregTe=Li3Y*<6#K=6KsRy$2ILuh<1KN*g5q$G{Zv> z=WG*Ub!6(VG&1T!o&?r!z0S)_RmOvTb{Uv|Y`9+wc_8c$4X`XM1g@8xgYN|F<2@l$ zcTXeL2hIb>gFf93rc-Ae*f*|SuYmUd3TB7t@*811><&@)sC3?tu0QHwWw5=Sx(vfW z&>zmN>FOfRJo@Mp(5C&MQ%A}U^*CPM2lG7*qryA#F8SjP>FVAK^!=yc+)0v^fo+k` z!&`6)B;ywu)4xI3ed<+kAD#_j6*12y#5sSbv){Y{`~KaKX9Ci5SCZDLtRN85w?@YC ze^@M&l4lUMUU>!qt&mTm5fi-Z~lwGboGpcq+F7z z#6Kb5Jji<>>R-+Hl>UL-uMQi*d@(JRZhQ5gKC8<}x6GZO{@+1o9>UtWKG=5C-H*CG zGsGs5H~PnM6Ze2K32SrA)+3qHy)R+M=M-?R#X6&OPHDSmjA5o%a+x27gXPuZo|lYK zWF@LP^I9&jA@W5~?_JP2Hwc@@HQe!T`Z!3+bt)<&5X&GP$L<5_a-NQW9_b6uKO0m2 zAE3V1p#eJeg|K7iJ+Oa98P}7`a^N^V7UDYnJmFm-nXldHC0}A2((!&EOag6x2lP#s zam~H?_W;MO?OPGLtEOnWWx=_1G{k;rC44zJcjt!0#;+rGrmzj{59h;QA@-d<_1-bjWj~8X z5pP`wf%+%H5)hMnEY%TkJvT(t}J6hn*C)N`{^sj zr7!QnzO9E1VNsva3eVrfN1LtFd_zK<{cbyc05`$k;1zfuY>&488=R*%zvXTt_NlNNBzBl5hLK-`CqaMR4_)R7_c8BR3I83;_Xw;7F-IFzXtpIG8hV-stpHLLfTgIsb@G8+P(sDjz#NI=UmXK ztI~jF1J0Yaz~RVb9ECLVSkI!6xfiAK4GQ_{j4SA)1&E7%`5(d~%_F_Jf{uBR`b@w0 z3}7G60liTjeWP^VUJQ;KIT1SNTCXahFuG(oG=pvU0LFsrLZ=@qsmF5R9J2~x$BK4; z23Npfs6<`Kyy^;A*L`3ctnVHe1&)g(Pf0~2nlHS^Ta57c;dxM>X{DxBlwbXzjeCIm z&{WU{ZFvRmfb-!vI1G-2Q^0*fn_U-Ok1b=^d9@C7yQfxUXo<|!75l<5a3I_Z+M-R} zVS8<-Ywbu#)}j*C^;r^iCvz7$AB=z_;CgrvT<2eeiQxY6M>q@igk>Q)5A>OF6)MJ_ z*e8zjdBMJMt}FqL`^3-43N_cV*E~@3K&2k&_{NZbWA0T%@^|Q_ws**uT!(B5GM8&G zy*H~5DRapPMLG!loLKAd;Pm74!-;?2x+Ew#F%>y+L)I9Ko z^ML1j@IBD#urc)dJ4E_fE8+^sG$z;|isc9aVH&QP-QoX5MmetR!eiIcH6w%zv= zKLy_j#c`W%i*5S^d~f`Aklq*Ool4w2;5#zQe+*xTO3dn)yxIiz`Ig|gE$qKm;(Ryg zd%y!=Yj7T~1sj0xY!8Bq;4XL+#(`_y1hD;+VI}C7HkDh6_COuDR=o+aukBB5J`YC1 zf>3nqlBOQh=YqHvE=#xt)ahDqB@6-cmTO|4N$ZoYDu^f#a#7CYc|W z2G^05LHjGxVP?w&c1F4<$F|>1c$JV=vEIT0Q4i8Fe-qet>uQH_;JL7{SmwR?!rpNX zVb@mYreV)lNqaI2W<-YkOCtXQvF)x|i7r1+s@4_i(mw0^1H}5?C%ik9WqZiy`f@o$ z9s2WW7!C9K*^<8#kiLjd^dl`R@%~W4_Jg`S$7}^<*^<^@PB`jCx*t3O(SE~2p<6ZP z3Aj$jaTN79e{Ti-xjgte!`iSb90_N^m2ee!jyn$i3bDL#J(^418XhvBKia<~;eUs^ z^}qd4mfu4@_uMx@+x0{2L+?GOIWJy-|AKo?Y-2I$8D<2OWkb2`&B_<*a6dT@qCF20 z_Vb{uB3XOt=$ld(>G<>a+CtxsUt#pi5nSbz?oS3Ao2<=ZBEYz3%EH zU(!d&10nYNVT9+0?}GEG74(Z^egp}iqy=^~8>=j+@sd$D~n{i38}o+mK&1Dv2Z^80w5-ecfZvr!uiM&xBMdgZyURS_`svyj+y5=&3oqlq^SjSH z_rn#i1|+t`{NB?Z_thQ2{oV2S9jJqtty6}!t0TPzKEi!w8`Kfd?!QAEGanHi2g%xr z?5v|$z&v38zX4H?>qnO&-otEg5yX5-+cz(C<~Iz>z;h7uen5CPm~I>x7dRUk^WRI@ zG1jR!214E?koQ2$?;3YFWcoOkEtKT9?j_-Qh`MZ}{nwe@FgTX)fS6DDG`M~g=5@_^ zAJTbGHeWigg+iS5Ii6zvYYFS`PQ9tTt`+WaanG{fj{xJl^g>FBwCz zJonK~>xt`(^?Oe0Qg6tsPalP-^HsuIg|w(Pks;2p{vgEs*3-pT@gAw3x52!hfxfVB zy67$E#xeotO|08~+ajh#J>h_Ruxi0b+<{>VcoOC z#SrWM6JgugS>AA9JLCso-giN}leEsv6$V0i$9sDGxgTuaTivBhiMo-tDfayo!uvv( zHidirbTvdjxkk)sT5m4P2RtvvxosVHLo&8{qd%)`sLy&=hV=gZ0QZZSp1!6(} zHpl9=(8W*bGL?jb9>>7#5dG`g;`-KQELNg7D=+$@zn3F?7sUFU_g{zU+7#mUM8^Jk zjPP`R%BruNxL7B0UGV%EZJI*(OjrP>v#T84={!*fa(x&N>3WXi-Z7polGGW_NN1$- zyI#0wcFEhD8+8S?M7{*kHhum}SS6m-Dy@gIQMdb?`$rtd)}emSKAGc;c*{D^Z-r>n zp&`CfQ%dHKI+3n@&qAzE`5gQR+}q3YJ^7N~Xhu4Iz5#!PHi&u+p9Su#nYI}Z`t4z` zoc`Jc5}#%k>P2MKi*ygR&UntU?y2xkI0YOhOM&O7WN$}mlfJ0~*Uk}eBs>5gL2S3u zHUAix2Z~y38Y~Qd2g~WRWSuBlsFw-oPkf84hx5U`Hf_6M+w(l!4cEhka2|MexDB3! z_aN;*%jv_1z&1=b-wRDAkG42|;(5~k-`RM7|GO_Q>j3AT=Rwzi|3aZ3%DuPW{szvW zA&~gEJNrXE$CEydb$!27dHoX7Jr^$m$@$p0QdcN55V;^Y=aP9I;?=PsG=b;NSHUr0 ze-`$!cDBR&;C^xqxPJ|)bPc6UY>VqeY`u}s9YoOyPeGzZHyTTNR?NHjTZ$q(n5Q~!bIHb!Mz8hTQ)72zl%4k z`Fk3nE^v=I4`MyPAe_wWv|i%OyEl9aF|Tq8>;}c!@0#SAoi1beR&f1ESCfQ|gLUC` zFmD?;AB>+ae@`Q>zWVA!A38UJ_@1|w@Q&6a@e22gA%6?$v3w`@wlQYyl*WPM{~&l9 zq7VK>Grs}vLBF`)#r)1W$5EHO)woe7IIb>*Sl^?BheKjd$}aD<;{Z4p+;f(O z&U}S7g*4YG&wi)E$uJU(>yq93z~0CYKzpWu^%bq7i;@a&qF&_c@FGMXTu0b-yF!gU z%Wge^5y%%H+HnWrKD7h=vF`5@{v_1x{(BMhY2A8@I^yRh>k;-W6Wi`tU=!1&FRxIC z>+uEPUaJlIz;(AC`oxBy*EM)+NUxKwL;FE;R_e>PN8QwA8=c?o0rBjmbp6>1rkk^| zY^4%ii9eAG!%^@C#D0ID@ZsRPRH^D7=eMqa>-m*11)@!!(a(aF!T#z|J(df2{`&^p z3!g%)=S{-S!+vdhx-rzPjq}5?5cfsxb1b|Jr^5)a4M}^_-eZI9@(i{m+z07C(&l&Iei#Ryq1T6H!Lj2U@;SX8)&$R#M}udF zN#ME?+pW~cr@=7j)}K9XQ>EpiEyzXS2jDYLq3znQZ+uQ^foH&cPl02_v(En@-QF1X zOmr=51XWvGDs5+X`LQkO6Xa5GFx&&S*ZC0JQm)h&`si%1-JbQjGhwDk*Uo_Regqr^ zj_H4b>z4C*3OF9bvxM{HMbKwwfNP$9oZ)l4H%|50HN10hOss3C$G6wz>za?LAKx}OKM*;F8V0r;Q$Lp9 zSs2^WUO$$~#=MWd7R#caO8Nh^y79PKQ+tFjf->c{5uZ3FX74aoM~0=Y&cKh2QC z0DpyHV1DehhSp|G8sA>ua#*e*PsPny+L)I3o0K+OX+4}3v9!26f@?#g$wJHhTS%e;H*t8Pg7Wf0+AU;<2m$*>Ca zRn`5f*Y7T!b=Fyq0pBwZhN0m5cHhm_!xCV;@BHIfQF^})Tn>IF7vJ+5-U#}&9o4K% z+XD+BeRug2_yznKd`CSIe0M9)g7MeD4`CDdD)>(KHHdzR@_FLwp_(T5i!N;j-%qaq zzTotfc;8{q{g*1mLGy9>9Y=T(TG z6SWaez8{li$IKXqy^fi=;M?#I$nuMEes1JvV|T%g;JP9=!2_UAKY&=?&rtlV=>H(D zKNAVt2Q#B9y4ZBxb=T<^SrRUSk03oBoGX5IbTb?R8^TcVyBMy$e*Zz7EAv7%?{kD#hotT<2F*k_(LUrFa1X>jw;lTBWf%v3hGZKnZci+OJQ<>Yl#jv& z@pG)1$SsK}*cQi)ZT~BzZGVsZi{UHKtIrWBAM4qk@V_8kkDqJ0$5rh2zVv6b2e~3V z3~8HPTRg}4xnxz$P!H(mtwEop>$7kC?6XJTo3|V+2pfa#nFD&|?@)dLZg((p2e2lR3 zsaL)))v%}=X9fnxurO5Ao{)cOWO|&tKW$m5 zuC%S?hGQMbQSds%cD+q_D=51?F)#8+hp?iC(1sbgvl#KL6QQ)+?U* zR{+P(REWAxA>5s^TLNlWM5ePA1X7B~xT z2iMtufoHOh1Mee!7Vc7;EH^TsjN0uRE~ za2)IlJHTe(TJ$?mhqx}U4&|6q^*q)aI1d?ZaxJj$%dRizSP(e@)Z>`gAEN$w2(Jw5 z!}2f~k}--*>QRF8{eFnHJWY5glx<5jGg@!phsbD?@<+yZ_g%P4F1aL@UyS_Y;5~?X zJTD~a<=7nZE`fYDrQyF<@NaFl4Obe}t_!X6uw8uVtLW|AtuR4Z=Ib ze(fw!L4fknmY=2cs^7I@y73tD>xV1h6R@vd2G@#2SFAqXBZtAQ;FwR_kq2U`XuJRp0MYeF8OR@%das2Aye^e{v_mG8h$U_R(! z4PA?=2j+n7;4w(o_Zs(KhoWr_Y0kYk-aS7w7~fY{s8gHPgg-;tX4eAG?mjQ{c)n3q z{jM7;!P(&WOxN=|_q&66GMgIDe5AV`#IlnKFJG)orlKB1sz2a3x));oQM!ho3F|?! zb|XvHWO{h68bo*JB! z+M%>vKBu{6cuv|3mV-rLUeIrz&lZAZ!F2Qa9OK?y=ojb6c-R<{x=Xb&Za^#N&<;Bj~W?gGc2>&h!&dRAG>>#tM5{i|Ew*ua<% zc|NE^v~Rli4pnnV5k=IgJ@(ZKFb1B3sSxeziPTrFGhSbX*`bI9(?^>(a2zt$ub;nS ze0NtUI~&sZo~)(ilv8g(*~IP;XPP>ffdk-I;2QEF#62Y1nk7FapKZ7Y+zZ_U+`qbO zPG-90z;#@`*7pgNv*%gPwe=kM6F5g3!h5{Tx{M@GWO>4;fn~3O?Vz)N3CDbM60V2M zU^E;HXMpo5`sZW9?s><8ZCM?XGXk=xE#)Lw9vm;PL#*$l5TB_cq`4jz?#+{l+q{gj zOOVI@jrA%23$`usOJ>DHhV&(o?jy0hKKA*sSg{_*s}tsi+aT6Af$%~wonGStM-0R4zJeXIA+LqBUt-vCp}*6`lCW`s3y?8?T9({9Ls|Fqn^NUpCG7a0uD)tTs2f}l z-MgZ_o*|MsoUVts*v8`sXRVj#7F&Z-We*`7*SlDs(stLGukbQ1unjUk3t8qW=<)hn zSWniy^@ek26X9sD>-2X_lk^qh7DIZy50;q%_rc1L&fX<#8Y}>w`C~h$68;Np0Mpf{ zf)MYV|06^j-y^(bNb6EhwQoWl%OibX73+VVaOSgZ$UhHq3pf~D6OwZ`vZQ&Y!yxz? zSauH>cG5{FO*fxaM4EVhI2O|5?gs9iZzb!iMxu2DTszw!`shx=!%UkIm-PnR+tSaN zt~*~ft-r2dhilF+Ao|Ds;Wyx(n%LT3_BiMHoO=NE?f@+iZL1J{th zL9|C7`95nE=ocS_dR%wE4UUzxEmv?q-QLk3j-uYA{m2G*5u#nnzr)ud^L$ec`_LWh zU!3q*h-oZ&GJEaaoP|*UmHQ#^R#^zZS~ya`TlUIFLvJPt`5^FAI}!^6ShBG`&uE^rThTw z6W{yHaNopsMO%>da1m%{+HU*zSvU)}hM|z0)sRt57ioOJ{dysA4>}s|gLsyTb=W8W zguS2+y6Bo&ZnO&=_wKQef@3|lA<7SldlH-jC%`^13N{9Pun}wpdxQSC3e@F%O^?l} z@886q3(H?~%{4R4m?_pL?zLe}S^}Go0_RtjpJMw=`vjaTuCdCGA-$%=ylJUlt^xhp zr_T+=+S;3VY_=~wchtkda5uaISz{pG?owg>_yn8^8^BCEm&)}WZAivE(sRfNaL(Ke z&w_KtGu&s8_KQCB`M`DNWw;0QiD!nPFdLL>!Yq@|HihqV+V4xkdaxtx5AJdL?#FNt zxQ1;4o)3I}>-RJ8EaTXkp*0WGJW%sM%>y+L)I3mi4|M*dBATllZsmt0qt52eaBE$z zGi-Xull+)w2=fz=17dtjD%_k3H`Vj|mLWes6xrO^5uP@{pP4i~F3(S9@wPxOv)u_JQs7Nw}q*a9aqUm=2TQ z9|k2q4V+fTFOeEHtG`Z~gi)7o>ImC$^ivXVL&Q8bgdZ*K2shQ|o0ELRHxHbav%Gm) z_@^O++Xy#?Fau0ANgn>OXh*m;$=(q*l1n}D>Sfs9Asr3P(D^&0{3z*!`8y!GcGWyk z^FYl5H4oH0Q1d{|12qrSJW%sM%>y+L)I2cDc!1Ba{H)N=_7(^vpB>IJ4VXm@4Sx4~ z9&5wN@E}|XeivpIZPmNy5W{`#9d!c@2J{#eId~anS zzg3e+?g#i;de)^+1AcDqci{Z)#uP|@2f^>KjDjo`U%EK`0Di~7wRv^e8T?Ly--o*x zyj(M`f-B&BI3D~?*jnIs$dd1EApL&BNVpOF&QRL#G5i+s>%f=J*RjF2J+L5hb8u~L zhS$OG&BV1L`YcQOJ(@S+&u}5wXV-x1OIH3EcOU8Ybu{NoBW*KliDP{j_}#91!EsuS zzoY+($#Qg<=O?aj$S<4UZSxXv82lX^zr}o6jrh;d{}H77#rg83*?VbgGR~0hhkL?9 zP_Ezg+Z51;t>E7}y$}BbeOs!JT!Y5JB?Wo!;{Ho<_N1M;haY}e|E~y_!v|2xXZFi$ za6eoGuIKid-%0lSfEz;td;`7{A%plc=MWQcVt+u;^i0jgGC<{+5?k)chF z$rHe}I^Fgdeu?;FVHwUsv-vjx)xOZJZu-Xp7@s-}{W2Zm(hY z(W_xCNYnu@MrMBXxQ8Me;WJ3L&38H5`WxHG z%<}yeY5f7uT8}{5PQ$N&XV}c&cPQ6R%LjgnEUd$OebNX+pjUp0<&i7HL`c^+h5I9+ z*JG;Ows)5gTcU3qgD*hZUc){c_{`Rws-o$Z4eW{ZS+KAU?>~k6z%^;!xMro55+C)r zr+S`T1eS!QVHhk9u4nr9M^HHSU283qRy)JP+7sTreUtFJkoM1e-1`hyjdA%E^t2S{ zPuFF*6>fpiusSRO`geWU15SV|;STr<_$>K6JO}@P``{YzIV!E&wa#;2uiDX9ofYiz zdGB1925H+p5A|v!xEVZTs8YkAxoAVcEce$f*$ZyY9RQ{vCddtG094yp+=KnD!aSwdDbr0@e2af6)0=n5q3A?L%%1j`_479_QY*xW}WwvM>i+ z1!>*(t;mh;k}wzs!R&tj z0IBWUfO~D!t^5Tf&)Yq*yFbfdXB?w97PP^!=h!s8M<&Ix$Ti_rh(7Y2XsdkLZXvc-bCF88p`h#A}t_{D2 z^jW5zd-s4I`zV%0o(IwIQJxsnE4917^G7?8S>wpH)-hR;SwW}IOs*ZCC8J-`^5~GS zBHb}_C~F;8XXrmRq{r-;(mdfgXko(c*Urh+!EOme1 zp4-wsx|92go`uP;KK-&UWW9%U?B4~>i*DPP={O=oS?h71NZV}qq>x^$cr33R0e8cH z!F}X4xCly~JxGsh=T?Lt2KP&O0-W1P9~LzrB!u6i(T@E=-=y18k^d>H9@m_2foGPq zF2f(g`H-{?*`0Ys)7=}uapqN6&&9-*9D}55>!NTk6qa`!o(A@BrVYk}?eMHsSl<2Z z+tBTMH1h=ZMHZd`%U*v{dbTD!847KBhd9@`isn;h?+;&d- zEKtgvveVQP_&&05-F%w3rA^PeLOIL3=4)G_z25%~y7T`IjD0Ky#Z-ryf`EPuZC#!~#=DwS?{^*Bu zps3BE{3^&7q0n!i5~n}A9lPYw#yQ~zNbC8K`%zG|4Ytd5IGiEALtfYSw2n`>KNi%V z<%V9xsS}omEFYX4(lhIbX~-?$pAhGeHs1`(KxSDZO{3lJ53U<8fb&3J0qeGJOZqPA zAzwW>XVboWD#RDHAys}^@;+Wrej4|eL$`CVWCbM>(QW%&=Wl_u?S>zNAy8C&m zKG;x)yc*JNFzlQ@^olF4C_0YHt*4s#!hWeutAfvKX}jIK4}p?4hjiE1!sm~F5x1e~ zQ>RX?rrDXgf*soGbLiWUZj0fGur8ErPp0xdiVU{6KmP&>?RDK=(mcg3(*o`}g>&a> z;vA2~idQ{8*y4P1-W9gT`&+@WGQ;-*ZGd^f=j$nuw)aEslRXPr)K8{?`~HPcSbqDE zUbK9*6H@cpec0DW836RCG6n~?7v zNb9+P``JpBFRHi-3Dyg9z+q7MOst(#;A$8SCEHmAa}pJy9?$6O!5?5Mq2cFm$G&Bbw+Ig*OITdb$H6hVci6254 z=hg&Bx52Z|BBswwm-c`@bbS9BK7q8|g<;RC&X>P}`Okr4;rp;Z8~{Irli(_7hRM(d zg}Msw-yqKzNX99$VpmxP^uO;Y()zWx`KNN(y^-locoT$wEf+Mog?;* zOslZ0=YZcq19(2`amy?VbHg2ww)tu9mxLbc?(2f?bKqQ98V-ZMKzH*Y-Ns78Z=?Ta z*a_x`WE}LSok54|-ZhZ6$My3orqAq`HiG@I1ndph!$jz9UpOz^bA2v79Y%tCWv~4n zeHwKkn;`9f-(8F{z1+*Zf%%XPuphXOtpo$1TveU(3*yc8*=5Pw6;Y9ZJ66GCi;@ zveYxm1kx8aZ>cNjQs)S8tw`IH4m+=0+e)eHOfw&NUbzC&dOqfUXXwn^p8@L)9Efy| zN822C$M}xU^`+Pq%BrI=RW|BK%hyO>)%>L{(*uVhv&MeZ>3Z$@TuNPMTF|)~@)d|W zlz)dMp)+rP2do=h8w;N+-HTi|i<)Fw;0$ECU4>!Wy@Gj5T|t*Re*%R%()aI?-eCUj zF7xo+8qY{$z`ZT4=QQq3>rPFdrCT?+#~1q0b@s4QpSgyzmfsQHg>>7};op!p50q?2 zYA^p9dH+>H-=9hIY*JF6iRJ;v{tJ+{$@Og`C^^Twt)Q0~tUs_G@>NLN_$>F@p5)1@ zDx|qzI%eO7ba}&`{WgZ8I?{SWKKH}#LRKGW<1XdA=MB0%&$yQt+I1aqWt}n7_Vq+OX-nWxq|Z)in_VmS2=83_!<-)15!zr|hQaNSZinIL z!G1~F+vAG*pkT1carP@Hw7Z449cT7F2yO68c@q?#VLu|yeWjxHun%0FsnYL2W1BcW zo`k|am_*!OQ1&{ISy3NEVpDRCK`sNohC<(a@B55y&tZLFUfC+KFZRI>gtN{czK?M~ zm^bDvTX`R440brCH-P(~@SN{Bx)qXVEo2{AQXRG02kxEwL*d!Mw)oucxn%hZFT616 zuj*!5> z>eQExk#)f{?}t!mqic?PaPqDQ*_$f+y{z_veXtKqg2MKB@B7VPz)0xxGaYqAzw6U6 z@CszvDl4}XoajkFz!9L7mk7r!DlDeiL&3bm^WZK%d6+d za0mPwvi4W&o(lKFRxs0@(R$+hbQ#*DUtD8$hlj!T7V8Jcru&BZE`>wD_Y>>DvM>}D zfrWzfemPhlwuc|VW$*~7r`TAxe*0q*91la|IXZ3o7bQ&l;@BJ(+UtA8V&gI0H~P=# zAD^XPgnz)JVE_CDo`9FZbv zo4yLSQ_m#O@9qb4LMd~S5zO;TX98mZo zKL7i!dITH;e*o7S*PU|Llh`M5y>d;u16J*%x&s^)>32WlRud7$Qjng?ngsCl5~ftm+u9;kVs=7C%;KSQo@pVvCA?(=Ya zXSi)}YiBr@8yUlGbXg3y5FQ-LHl@M@WBfG3^&NTIa&>JnzBSjFZwq=_2ITW?13U6G z6W7MQS5tjH-;R4)4L9%)Wm=Jm$B1YhoS&9tZ6;h7!Y%dr)&Xs~M4e%(M`hm3o#D2@ zd7F`#juD+<8lMig56TTn@(|xXe;uW`rVUI~)rW8kYU|thAMwpecyQZb!r0!516z}D zLtbaL))8;BJHmC-Xh%o5z0P*DQL=S#dtE!Wx7D?wv%O9ib##fTgp+oKaMJeH`qp}^ zO2RE2;lw}94J{4%#AP}!3F9&&I>PmdZ(ACP3O-N5_60N>Zy({vB#cK}a99#<@95Jc zoHyLi5ua}&j5^EaTXOb6OJh5QD1hxPjkKnzu_;G-O9LI2Yeyvmo z&feZXi#4;tx^?>t`;j4gZFi#2;a>H6^tq-c9_` z@ehWoNb9*;X=q!nJ_)xos+zg?O2&9cCFJGms2ooarUR49!B-!`Iaau>M-nV}q z9h3WBu8cKJkQ?Ctha2J=kee`nE}`ST_HWGtH4oH0Q1d{|12qrSJW%sM%>y+L)I3o0 zK+OX+57azR^FYl5H4oH0Q1d{|12qrSJW%t%jP}4)S6!7m{q)oQ?}_^T<>Wj1evi3! zeX%_dzN_xvDX#$EgrC7~Fq?miSG&HL9-x2Y-!%9)CQabqllZrT{tb_Rx49(b&O7hC zFQx;&#I3SlVIJ5E?CYrz|8`6HF8FuQwZCKe0*w>@1`KAWU)O^xzu>g4&tLPxP*@o@fKB0Ruo-L-*c@s6T2K!QK<3|Y6K_A7=HEMyg_oez-`KuS z`q!b>|9#m1!M~oh{oBDcz&Up+{2u(fe*gaV4e)QG-v;NazmX9!{#9`A_HU=pfqlXG zy%=+SjxgWd;EeEfAlHR{ny`J@b}1Wfl1)HTWVew>#uZt z8#-Qx@!)R^TmXNEPa&PJRQN{n&IMI&{g+prz69s`BCso52a}+Zeks*w)k<>=?hCcK zUxneSAH(n5`8VSGz@MNMs?}fB*7FRu`MUwW3#x(#zPu{*A^5vr&Ub$Y<3p%+fAvJ) z2iWl}e3D_$mBjfw24CKe>t)OJ9eCc}5UvH!Z9VCySjOjb*Ja0#XLB)ZTsh~tsOK~C z{~7j#1Ho|+)0Cba_Jv-0;LBOu=j-tMWeej&&vh?D+P~d}J^OtGlb{){f+jc!_5h#B zwt=lf*nT_&eg?k)-{pAr^F3bSInr~+uVE!@^c->q6x#C&ajV0Zvjcn4YJC>`s{ibZ zthKe!-`+bXeYW$wZlCN9>TnFr0rpi<%N%ndk8Ac2SRWiK$HApwpZ^MuhUA?ta#45? z3hjAj{NTV}Oi+HAp3b0b}&Cqto63-4Wegn*-7}EY z|1r+9#0Z~V-D7H3R}bJD{pfr8CMY~dM;}Hxi9C%k{E92C7%(H}6gFu0oNx?uH)bCr z&xT-`t`7JT-vxiTr|QE}eLsctKfu?ZU)T9k-GeRmr{{vvFcIQ7&5{#HUlVF$0H+2& zcuw07Jhx~0%sA7=!VuT_nQaZlF5BXna3r|a7i)*{cY=FHsbN*sH0uiJ>ypnvRjs&$ zGVKZf?Yb=pmwL8uA>Hxe8j-Z4gxVRF6m3KLdEo>oHU>NsUITu1(dYJB2e@8t4?Yt& z!Ok!YlINH{H=>{d>P`9)Sr7L?F<(t0ZFg|o7HFCIZnZJ60kYIO;PdJU;CqHXYlvqf z^~1XGBIswIr+w%7DEt_fCSSj<3Dl`gj>$1F6|(yOE#miKt)C_OK6WBDN1ty>*mpo# zZ8OgHeFKvGv3xaU)Q$WARG5pikyRwcArlpKSowFxN8Iv~)XTcp~v@L(*5J^i`VXb5hW| z4Du<6b(WGJlJ92N5t2EGoUUr)!13*~uV>leU^_Mg%kBoA-FAUduraIz3&G*wJG??W zrVw`|%#d^Gbd9V+1Z~kz3&2%SY`r^+v_9GE&};pJ;Cd+Zcd2{#gxlZ{7yI2)}2z~ObgI?=j1tvmapSUJfvmXofmwVrW9myO(&gd?ydi}NuhQnVV%O{T#KMeY+ zZufwzGwODY{sr6vA7!Lx+1eLzH&b`=3|e&u%mfN)oBi(^Z~|n_w-1Ql6{`LW9^SKB zzt19teeBxv16UMB!-Fsd`l64E>2wV`8nkgH=&kCT5Zi{_1m1!yUtCChpM183UVU2+ zk3(VIza(z1C!To1Jgz~#Dj;eSvk6 zuR~$I-d_uSGWM$4m|iNQjnNmL^LPIAG%d-9`Kw}Y@9~@50J-a-)?oL zGnhXx0_n4U)R&g0_!*%2D!nWNu8F>jDYm{?*BjtE*6V$y92==eyWCHU%~i*RgT*t_EMj= zxu;zX(UwAa7HPBDx7}Uji+a8x|Hkg#{6I#kAo=?^`+%|#27k70++yd; zvd=0}akK-u5ln(Yo4vO!W1(O6`)FH~)SLJUxeYiDvuyM{x;2#T*N}H8avZz_uAlNM zTnB4H+4{6Mo8?#I zZh~YFM3$?%YWY&nfWxW(2`FagxujL}>|=YN4pxKh18XDajpu|)8$wxi4g}BmUkMmC z&a_HZCS^kTCS=w#%j?8DHp=TDYj_4iuln~|6GgL{uxmYv2u5B6j7?sZ1m zTkX1S6RZILfUNf4LcDuJ*;Sht7J%PDmd^KyA05}8vK9A1M(l`Vb$7zW-b?uWa}x8` zvrHdYF=JGQw!3zCKFd0*_#STmkgqHwV_xKrko7F-c(?&78dGIe-os4T;u!Ef&!dnv zUX7aw>p;%$EX?Yc?FfuOz6e?EevJ6xPCc{zih>Qm@(Kg0O>q% zu4mcp^T8$H*}f00=^xd$0X#eW7P8vwdT=!OTv(P-<_m0u^xROW*Ym}h(C^QB-8BH4 zwB0@aStztS-oH)SH)n=@tGo7;N~aCB)w5|MWWDdPy^q84P)b#oH1mSvMZH;P$w|bo z56L*`Qg{a61e<0@`tHtW9(|C7=cMG^dh4yX&S0x6uO8d=y?g#>DE5xZec$)+u8Cz= zVqWlFNi$^m?n>fk$g_SqjleeTUltyMEc;{J?@9N(P>$M}CXe=l^K%zyf!Llx>6t%y zF0aIR%BbIWpRSXIIz9961m>wkZNKG>wjpxhg+dgulMJJ?_CmDd6V}6`N-n@E!C-h&rS6Jn=1<>3o#c&}b*p_39>QhuD@v>G-%E zJl9rqUdpPwT5;H-uifi?cY8CGTFa)8ekmktSx;=Bto4lo_xVB}y+&N}?gZHr^)sZ5 zw!(1uHIy0yz8iQ7M#Bt!uSNaw_v?lbJ_25V!v09#dzQHhhC+}1Y*{!2vi#)Uzl3>a zwM(0!9HLee*Wue>Lh`^=3u z-e~=&LZMH*_j#g6`$|vjsb(4Mj(*igu94mO)U{v|oC)p;$@4CS3evfI9Z&%|fLM-baq zO!^Eo2`+;j!SPd-^Dla0pU+EpEjS$RhpfFf%f5HX>v_;KZm;@Yrw1L*Z|8YdeLr)J zkXiM*_S$QczkQ>9?(avz>qXjH*nZao=i|fRny?%A*}dy@G9Hj6-C{a;mea>e!$@#% z|1G=%pF&~1#qM7s?}3o4$H>QGS@kxCJmsjHsq=((_+5}~-~p(__l^bE zj+fzH@HznwfStj2XJ3O&g4`PEUVbQ?4t}2g1o+<8=Z-927mIV>x*ax!s;h83$Ru>uH?*J{it|HKD3=KJ5>5+y8!^ zcmrhFdm(%Oz!~x1LP^`%7va!$+wXqb0G@RxL2u@4mJiE~b1iuuJg0sY>=*6pi{>Xf zgMObutTW3_&nYwQ=YG|2j6Mk8ksU;MT{s?^!L_`v$AbFbfqpR za2PVHt&b4DxOsYeg?g;d_ALOO$6bS~KE{Ji$F+UxdEGPa?D6jginWD2+TwZL_wFO% zC*ax5cZ6?48@N7a&6RTE^zjEU5pIEFz;m6?bJknTv_6ZsPS^oHgu*ts54i{R`1eEN z_s`McI{S6F6z+k$LwFCQebnnVsw1#4av$*B-~Dh0oD18*ywGi3<^ji$`IiO9gF26e z^WZvgY}^O-X`%1Dp8|ge^IZf#27SFUI40HKtu1|-!TMnpco7QQ;2Cx=Nc>u<9cP?z zMpBOQ_U|d+94f5Cai=erfgaVPU9l|EzPb@SmlxJ${f>iVO+!}HB=ZM6les^;zKnoZ zp|CFRe*@a%*e~myK}7~tAv1Q_CfDNIAgc|I^~Cl{tD~H{UGGnT|3Q|1<359HzU*NH?K3a9#<~}m>W6fi z^;cAn22n;_qy7qMeWk*ek+#seVYO{f4|1@5_|2F3(xdL0Vs_@CD@U&ADb7%0E`5zCRJ~S!4$G zYGqYxE35$jghIc$o?Q%O_YHZ~=lnVg3iV~(TSt%9WXf5W>zALCWa%!9n?k%RyOfiS;N$nN^U*+GM=*C|zu(568ca!fxO9OoT$8 zdGA`jIF!{M^D$T4C$|Ro=B#n0-q&C>41}_D7iO{?=PlQpeIe^i7TfbY>D%9Y^UW21 zufaONGyj>8^{nJs!2kYQkK0k$uKv8ocH8F~a57}I?|;M}3;MY%)655s0q2a*-A{t& zBY6RS0gjKdbr!1_9oD7qN5JKve&6~08=eBM5uVGTn3~LZ%BfpiW8Q)|p3>4fR)tI* zGkc_V2UbS@1JZ4aVdv_0Az#@|(%+P^k3BbemK5tr&ilx+b#<3fT`(7@zX3J^&xeD0 z`ZwT|Rp(dWQHZ`s%PGYF1ZIh6zG6Pae%Ddw>-WL;zv(u{u%8R92FZ9Srt6CmAKJMX z@|WN_HToefClFr`v$Rj5{m4bY&n?nzjA4Cn3k-*f&ug>FxUg-3d6B0<*0Zrbc?b4@ zS-S7j{Sw-;F|ycM%JYGH_b}fdRJxz0>zY}^!3XyJiSQxB@t>BSY0rnbVPDeGuD#90F%Uv3ai#CPD+u^6j?2v#!v#rIGIU#m+v)KL(?qNAFa#>hAA2 zY>#8!bN;Vj3Z%z+I{Z3md%-My-tW%Gac`%cp7)y}?SsPbWYT{GzKfk@=0vm=IS72d z_ZiQ9y|8`p{w>lDgkHb1=+6H$Lptq@^I`+S4@2}rmh|r=u7h>hKRrLp3{5C%gZ5#k z&%4WkXMFoMt6eef4br~{bx>6A7cIfI2G&Em4iwu9^pk1N!eKBpzFVG|e1cuc84tM- z>VR!oq$g=DB)CUiRDJ zhaYY`+@oCUe-EY3_qNON{8tzSGyR&@*Z#!^`fn(l4(~!%->2jBug?hIf+ZLO{eEVm zUTwDTmWKa>+n^lV9mBtdH6R)PeeK^_L4WYYJji{)&pn(Y=|0a2dp7tp91mZG!QkH8 zCrwr_*yldW`5Dux;5_~qvg|92YayTS^cRIbv2j*bs!zbVyf%2|>uw#5{`H-K&ri3* zv9Kl7gX5`3YXjwyxry{l?%M7iwL6>%4}tG!%Ne8E==kt?cO-l%&iFkYhxjM@U7zm{ ze*^nB_H}pCy!Oo#a1)GyeZeuY7Ay-xVG*znSs460W*Dpt8-siK58-^c6J7$>n{xYH zJALMJE%O<6v8%4SDrs9!ee-21hrjfdb9W{1IjRLJ@qHX8mT}K@Z+;bgj`$0VhkM~3 zxF4L;{{Z{>E%*?oLex`n3iqVnz-Sl_wROJFM?gmfzV{J)?lYfjg3ncsg;$``b6R(O zZMtiFD?9@?z`?LK%+u7=)a(EDdOx}C3t0_);5hKPe}3@1wI`eczlX=cbDw?ZI$dg= z@Lb`U&*wFtAtu4Ya6KFY+r#qUK4hI=NPo`ijS79^T0Ac-1l0DXAT4WuIGOH?Ki8t=SywBd&UJ9TrhzC9LT$Sf5XGG#O%I9 z_FX>VFSUPajjws2=7E|AY96S0pyq*^2WlRud7$Qjng?ngsCl5~ftm+u9;kVs=7E|A zY96S0pyq*^2lPPxi*&UYG^VAoYeZAQeXi?$d-}dTH?TE*->kPj&p*xE)O}lW|9N#S z1^3Mb_sQ*m&iozfKEFp@eamd0-?!!l=JRuY-dioX`h0%c=k+%moMvRl)nw7seXh>< z+~AJXn9^kIIWR5PU`h*>78wk-VZM9%1W>u|8b*OEme6Bs$ zQ9a=X@412@P24x7@9V=o(yO_C`uk?{H<*gS=$Y<*t*+@Uo8%g;$IJXJ_2_Ky4m-JT zs!!cxcdp}pT)w@*b|g-0YM3^_%-pwkq_^k1;s0&6v8e%%;XR{tRpk}8|n+N9y=G*G^kJWphT+Q_zV}hc| zh22TdeSY7b^ju;DIdTmh_en=51F9|Q$#9QR9rv;SbNRMJbJA$sml%bf_Kpsrtr*D_ zMqYE$Vk2@%H2>;xt|qIQmcyeR_syEwnyXKGh+vBfoB0P1c(qcLIno&KnI8=;u3jzm zNjgJ}i?)UPj!{OXp?v2ki}w^xMp3*+VX_!vPdinPaYAY%_cl4_FtaM|8SHp@nzeCH zrwmBi-%&G}!+o>aElk_mC>!nv#`}&j*j{))pd-DZqhs^*PtcciG&P6&F!>SD9;?IB z#`Zew$E0xI&>_Q=?HEr)g(=%PbmEX`rnFa-)Sg^T9UajzzB~FZi4Q{|nHENbKx@Z{ zFk_;yrNewOByOcYlG6OsWJ-H3RAaAGQ%grF^R&<}bZ@BMMJKr$O!MmK`cCy!;MJ*4 zg=OyC1ps z<+C5$@U^D#V@4lw@wp>6UudE2zVYPOcmGNLm}R%!{l-g{-*o)cBhEf+pa1Rt%{EkP|er@hG)_HXKahpH9%c%LUe{|Wg>z#l2M^7$0 zXxOk}4NJdt`#-mv=kfK9xNOdE9{kI?VOwl>KyLj06J8#F=N8{yVB|e-{ov$Xzq{*0 zv#+@8V?*X1vcsys+HmLN>-M>#zU{~Ft#N#QmE+&M@9eWL`Qc0J?Xt~$k8HTce-AqE z<+LL zEB@_WRmxmu|nz-ZwmSOv}^>-&pB;H@&&?@y|cL z;5TnRa*2888L+|d-8MaE=-&=ppIPmIHFkY;rGtkYKWVFB?h+260W#Jmd*SZ}9Czq8R9cbzxo_3P*V$s<#nx0!F_whMp1 z;f_l_e9;ysEi=4n&Q-6!^ucw0xc}Goo^Zkkx17A$Jo|pI^tVRrIQ61Gj9BXR@lT9g zX6$J%Z8`M+JGbs{IGne;yH<@()YW?pt8WmUW%Uv*qO4w`MG!<=y{z74u?Qh*qKj@< zZxJnek3>nqClaskzwrJtzsxyvo_Xe;xzBy(PO?twYX2i*_`|10c!t`eZd%@cPD&j@ z6G42oFWqHhex2Ymfd_NH2yY|Gs2IJ7`afzXTPPpMC~xs92@kVx?rxAL^mW4H1G2H5%LC?ggn4TxRw6bszq zEkIo0xbnD1j1a(O>{f~nR0ky8T)?<248w|dD2kCt@~dc`JxyYoR#NOU$D%4%vvj&! zO-GF>{j#kKedl9tqoWwnoHLaiiG7K}$Y+LF6&h8Tybf1t*ob6l4Z;bc&=Wf18|t-L zRwy_8h{>Zb4Rqs8*TU30W^EbfWHEl;Ekl!%z+_`=+uBn*E}O z0wzB}8RVBAx^g%Y&)&6M71ak9X5KX(^Ln=>oHU4u8q%XUJtq!=KMPsoKn|!+g#Iwy zr`2K5yHb{ultpS9QjIS4GoI|wyB;O&^%BA4k=UNPumXMqQ245@ja zb0xIEGb%uI6qun;!020-!}~^HzfN`ul=lUd&M&T|b;`5()`ryhocXG8pTv|-izRP_2BJqgYKL5igL}Fs1#BM1-EUAQYY=3U%a*&ssM^a!F|<; zp%Y-CZs(iraJ!6$u9qh+UwkiD${)Q!>>F4>lZ^?!JHxIcHyU%^W#~sGkYb`R`SI6W zS;THEn2dVG2XgaiDX!0JiO@r~?3+RSnb5w^M-HqXX*ssF-Z6iFoX$k!4w3<&xY@Ue z5slu$N86ka#`6>;)qc9!oum9T!baLUq9CiMSpz0>aL24bPaX?7>L~Cb+dtdIbM=ws z_5Mxr(+itxg)jXHDcbQ}AGt7~Sfhfz9>pOZ(iEz_fu9zBVO|7f52 zO{*rJDkLu5ovlFpK1*aWd~I|P(aP7E-g6^$IwM0XL|qlIUsR`NxMdJAWw!dO3AOP9 z{JMtCKlWW(j+sf-{1}Y~&NYRC(9B<`EI0HfXYlWe0}le^hMu6fkqPjg5X=;oE_Hge zE|b!2=nu@vhIhUxDj`i`M?w2FG1A44cyC zOet;W{=QI#N26}6R`et>0B7`gxT0F`p7!Au54$Vfx4gW`?#xe_E@}4!n-V>B%Fq^R z^8r@0DlzoAEolY0`kmJaPw|)GUmP`xF9%ima+>Q>civ<#LGEd1=@X1<&lzxPfZPB9 z!Lc@CF9yGOZ9TpSA8Z(^dH2ZL%w*BvzWB(p5r&$0w1!n-Ttx>Q%)pj(#lO)cef_&J zbu{NiP9&_{OnGZdk#Ho-dsc%lo&EPtZyiY^t?gPr52Dp=bLU>E#CqmG|8>ZBb_!u( zA9Ap76l`h6mqiI&G!w!iG4f0iiUn4S*DzUM{6a_WP(PME#10Z&ROnj z({;%vPlsiQc>5jzv|5s!a|=HXDvq+&o?fIBA5jsWaz%`GS<!8HAw7Zw;y2?HQ+=KQ$Wz+x*#*WI@gAImj*P z5m69{aeJzBF6bMN9XehE8MBX#gd^;wiM~mjj0?et2fdN>u5-+z$Psi>e9MBdUd7KO zlK5%}1?&n<`!CbDO264^WU?DVZl3H)Zcn*r54#=Gz4ztT;a}qCL-H3_GCGbhxt44^ za_e|<=kpMk@|LN=ut{oNzZ*kSG$DOfTvAk?fkBgvPwvADYgQfv$J?lZz<+Vite6rz zgOfjE#n;WZKl~4m*8ieS=EqBJGJh458@hP{b}TiSTku`6mM|ZKmQ==NTGq#U6p)Dn zJ0BNrt2~{D9N)}-aJ^c%6pX?JJz(Jt;JKZE%n!C=b6;)pg`MjIY?M?A?8(07J9Qcz zb`KJz#Z~`$m4u|R>|^O22Wee)G^jy45H294h3t?DC2ddih{vLzK-M2r&0DPTgfv;U z%V^CfE#8%6b9n+SRs)7YYf?gS?3(ZwXK1MmC>I=@`Dv4u%J+c+e;(iH_5Ia>)Jz*q zd*GwJh!GoQg+#yIfH8EjHlND8ai{kCXnU3i{=((_AAOy3Gl_-uB9m%qS( zCWqWl#Vk=pkxr$l7bEB>+Lq-S+7X``7Wc4N+ubc1t~gM_aH&Wv@cBajT~fCx3t5tB zoxRxSOvhE}nAKp;4#DOUSB1mkP0eFO+dDE;9WpTNZLBCsBalPhY78<@#k9%UFh@Ui z+(78M){`w6+Bbq1-4EjF;J%2cL2PS_l5ow4AR@Xo5F zKbSRR{}lAckpg*>vJxlcN^ZY|iM8oH(Q^DZTT`xtJpMV;Zjn9%<@F1IJjH$Ma!)x? zWh~1Olg_t;yU-Ax7ursRQK6?4ll!JEKKSyh@l>nIm~&0Pw@C9&z)4$DZn{>dPES>$ zrN>qdPd@ZOHxq{MO*<3@4%;Nga{fng5z31UNIi=9f{B|(^~ypIsA8nND2!ho?lAq~ zdz9Mx6d2@BZK&hDx}>d-rRpRZUDhi)%8{I)RQ)R>dZ-OZG-4k8#6a9f07>=wmq!pB z5+4)0{V+I*s)B_+1|~a8YqDAqhF+i{p!v4%d5ma~FVJh+JU@I*6Od040Gnri7MkGU z+<+S3k!CvCF=XI4atv%jU2;FzUeNoX&t)ZI@PqR8pYq@8!o*9Xe#zr4`9AXTozm8V z5m+6#-y!)!mDDm z+3Mc2Gsw$dmZ;|EzUcX?$HlhOAjo+&Q+&xQV$HPax*s(=1 z){GILrpb7AivQ?1bNuM@KPZj+ZKYaRDigW=2`>H{7V{P_KzRRbUR`ALDpnt2?wD_&}pXs|rQlph& zK;^Tdpic3rcoY1qb!#N%l{`}I6)75?s3}k=D*YrwwYoHPoxgw=`*Y?i_S-f-pD6E< zrc^~|PWZpSwd%Y(Lk%xUVm*+D_b&`G@#XpM2v_0C9@IOYhYGdWECa52%cQ6x{#u1T zcFKSx+4|8lo_J`j?asF!y0g(@u-$5$xH&juXqqwC=?Y|T5 zmMy!b*K2jP#i&y&1w^!~hguMF(#L1nx-?}EBb=qh&9YVBFw)h9@dpgCi8|3P^HTgb^OOvQ%*0n^@13}| z1V3f}FzYk~_)Cg*+0tEB*KWVhsm&lwjch^Zh?ZraI0SB!_|V_WAJsjlIrVr+{6HxD zmXC9I;Muf#9@F-bL|`y&>;!FcN6goJjUe0XHp8j}TNhutq7dy>DfwZcJ4`NfJ1)gD zMo6!5I8&d|iV4tu z#tN@?vF)E4V1!_ovh34RE;mkg@Ai8N67(CsRgEJ;558Z+iy>0{&z^(8Gv_-zk!fJC zFlDCic3&dPFkNvrG_GL6k*DiD(>~v+9)S5)LClemq8PDD`Q1r1K~f`6ZM&k#0Crd& z69n^}SC><|imt4pk@w5cWjR7->dRUoGgNgo>~P}yCSzW9xkb+5nm7-ymv=|9{^vMP zNg9V#rZO67mw4r|Sr#KZ<(m|0;8*Cfa@eQOXa`Cv^EavOUrmZ6AsMX1W~%a62sx5F zG3#-4r0|#QHe#bWi#{RlXAOBm78IM%1b<04hb6ucyp1t&53@W&HqLyj4@>_l+RDC9 zGNZ{_U9(LRFK^J}XA$h>>S$E{dxp-e;+YBwkLJEHj`y9TFda^yXhEX4-k#-=6WMLQ z>;YRv?^5>vg{&LFyQz7Hr1~M=?f$NyeO#3G*CBl%gitJN6FyXnn5wTbP7j|QVeFn7EyliVytj7C9Jv4r z^v^a8!-ZM+NevVDP!M*kX%=3+=UMYKWk>E3j$#R*`h3{r6`I7>$jj^u-D)jq{ z0?wMV9$!TYuf-@`F&a_2!F)R1kPn{)P{}Quxss|$6t2Q^Z_~y0{(GfywxCCH#^^TV zzSaDVHyy&Qdr#u#PP6abq-`(FzRf1AbH#a~-HrOPER=Eu4zu2lTa(NZ4S(P3Ijc5G=G5 zJ+xG^FRvl@QRBY0y|-HVVH)2;4%}(S2bKmeO;2T*lJ7yJbq*}pcjAC?8<U?&VhTl$RgF(gDtyi`eFzpPa4kD^2ok8|4T#?N^{@NQ z)mM}qm5dja4M8Urm6)YNKyDa+v9Imkkzr-tVSNoDF=$@T%cfu4*f`BX}@3ti^C>tX_G$uYhE;?^WT`e_lw$7_w z768$&!0Py}%*HgBI$T7K={`2zO$2NUQ%)IFK3`1Y5P zZ2 zoA9>^tm8x(U>wROvQ1BfJQHJBtqrG8wvSmWV+nN%` zQce_gE-(P3W4+{3=w@s*M3%ua&8@w$R|+mQOR$m@ZP2h9iF2wQzPCpN+8-`$x+TBv~+fci>{v^NR7o1*I5|^EWwl zh2ZPh>Sc#zY^04PbSAuxgwuV?DOrX;>zNTP<7~iR4B_AKQ|ye(CC4U@UAZ{>`-m+J zWG$@k^i8uHXa0y1z1xSc?~h!Ci4V6-JrGhpUHRi;Slv?g@6YVx%orLMM)I_(lQ#S$ zE~K;1!OIA~2UfgqP@=j1J=CrWo*~3vL&^hU>#LfMqP@O5WctRIriZ&>fV%-AnzF>^ zat-H+lm9}%Wsn)qYo1e^su7MskAgqi=i1{hEvYez`Tl>ESP(MNlnjlT#(wQozLGJl zUbzAsUDrHfg9Z6wxt7Tuz6l!veU4K3Q_pRk+H6-#=s;okpk!_m=C#pJewNf?d3@O` z6SppQG=IX&AZTsM&g&FL_m($SW)pI_R`Fz4c%=UrAB9&lj-pl~`6V-}A=F-pD7$e% zOLJw=Ko;Kc6*?ARL^(6|)~jiT6x)ta7?O#eqva75Qi8`MXhKc4%t`F3EC~j04EDI8> zG#-DFwO65O@s1WOyh1F-dJb8q%gfc!n_*{A3xNB~O)S^=buc*yeLy8j2CaqjV!ign zd?eTei0=u~=tJ#;+*JZUS9;$mVX0T*_pVE4aR(nqPR~@{nS6wkxnFG0KD%% zBYGU50;R>Vd5N@S4cQmiZw0*Meb;X=~n2L(cFlVtqp zs2KZyv0A^cHn!>N`3CkhDkGgm9bg>;gu!lG`IjQfuP)^O2{JGVeH~_CFj_cG;!M@_ zD(|^9VT%SEoxL{Sa1nQAuo;=no<*P*rKS4hA6T@6DkA?Gt0jQ9a9kW~O zI8souPIxYp3gopZ_d|Zel-QFa^v1U6;zloo|h`J2boSNV%1O0g;}YGn>s9SMl0o6avT~9{AfM%J^c@33-pp41mcg>qm9s zU}+-*fI_G}Zq>`+el&c|6OqfsAu3Iu-~a8yrRct@g~qW@3lUEr*S*z-0fbg^1f8@7 zsIH%9dH4sU*=yTT`4zv9g-JF}({h(YYt*_dw?fFlqMPp8cHC^0A3w2AWG1%T51lLM z4_xIZb843o{`i%yxTzf)rKW!LatHmZeQ#!1yW2kF5$~1iyS-^EEo&^dC>heojTykN zpjyAXG0^2iI!}z?&zOvE^dNRNb~H}g0ohKt*wQO78=5{d7L|J4RK6iDq^SAN{ojy{ zEFpQO<=86+W@dGRC@+7p`pA-ECX9tUhZ*?MqydDc@c*NZIO5`IT<#vAQA|<<4HzalT9tLQe{g_euxMExhfg1#x;uCO86eq_=3f z$wSz5=MTrA!SbG}fE-EW@4v4d6l)=UqvEBTf{W|+lng(pvNK}dFu@x7MT-i8YtN`u!5Kto=d2%X1ua|q^5z(sSlCen3$i+!YhzWvVsEopJ<@u$;bGrP zVhpiJy}!Y&x_ACS6@+c&nr?aq`9t5F|2!bVWx@yrl`f1zutt5+@C?@7)CPFeIC3`4 z;*}-OihBWaG7Q6&4>0lG<;JNqbDT8PjbW!=Q0Ldl4h^zFvE7;)2>Nn0^l_Cgg*yuG=xc8y+7ZAj;+WX!k?cjUqlJb??b2#eo zDaH(MIr3x6X$~(T40`;_&Eq}0427lD{sXX3?)h273b!9fPBCo2u*~m5?*@x0cg-1ds-3N8(3EHdFP-xf*ls zA35=v0QR+5Z}%rLk%Kp-FT@NL1+Lg0%(ImqX?Y(Il(zVOxNJ&(dM^AV<6*rXWV01w z&IniQ`N>I}F>ptAyxMO#`(ha0$HnM4h=(Bd9t~H2?P_nZYm4y@7|vkQ9MH$vUEm>yma$Ri9}DP3W*S*n`fJi8Lg$tTihH#rSw z@oo9;Z@Y9|Va()q9l$Qr(zHiVkcxs~@V}tjTLs~DC(#fjX1h{<5uc@1gx*rfvuziM zTkP`;GY}%g5<%?7=O;zlwnb9uvtsX^^mGddm()r08j?EExRVo9VlEBf{$5db2?E<%;MT zaE4DQw@9YzZ@)9ilO`paYx12rhXhqKZH2%K@!PEGCGET;3F1RYH_H-j^^kXsLqMD* z>YzDNLmu9g{Z+Xe`WqbSAG`5B{dWA-!IKqz!Od!`z{Htwfr03IY}R7a|B2f^Hjpuk z@?AFL_&QR5<>X5)9itlIY04+F+w$f$$?+EUgt^;Y5cA1o^?(;{ye(5P%gNdCvH3u8 z#r@QiA(;la2(X@!8y79`Bi2T{z#_>2TvJ8xO0ardUgwdvn|%qGr@(BdStx`VWCCx2 zd~$*PXMoBNFQi~X4~dTaoM&%ck;qnJ&=c?0BPd``g({-&*6#-Q0JcO7{T&p6{#=Sc1z6wqRj9Puz-RoORXKX z?Mm|n(?LHEw{1}$ckn8xhpVJQM;2CAhDK3 zQ&igFsno;&DrKHC(^-wA+G;A-w1>VpCIW^9AC>3uA3L)N$ioT5S`*pL-!+AO*v=WP zY4P12<7hmY+l%$feJA;C;c`QG6b*o)toT0#^L;vLw_l%8aTacCihe7|`HMEBZ2RQ> zSHr$^VyY*BbHYV#nUm6`cK8uZ4;8O_Eh5-$N^3M zX-euPhcB4YX@C)_DlUE{aLuWp-%rnQi}nx^OT1c=w-h<4ZF{KF60h?Aj08pOokvxy z59|~N;yE6{B0xx!Xot{E5sYQR%$Fc7X{b=s0?r~}W#&%=hKZ&x%8YsXJwGv8E9h-W z#3E1ZMDFM2q@sL9mA~)wxOBLWxcm7fC1xZ;Z*>C6V=H5V#CM#lG`lDE2vvc63{xjW zf81#@!0~Yjh}XkF%W)%H~^FO?jL(H4ul%9uSEJNOU~q-BAc^ zd{BONW^~32Dj41VXE1v8rYslnoJFraM{}1v*}@0J2Vq~QXNXB%A3OXZ=FbbSm3OQX zOC<%;lgH=dKv@Of2wfyg_C%}fmjW-G3I>QXSWw#JU_x6bC@C;7$j{{XFG@Wn7mzUt z(bX4!BkBm77u$A-CnKET9fi7lhxVCX8JX`(epz^EJ%>MNCCzG;m88b8s7QX!_fa+} z7|wKHkI->|&2I}-IGoU^&_H8sM4Q{0AkKLqfo5J7$Q<|t`}cJFWcWmSUP@fkC=m(K z;e!^O%chgado{U$)Raj%=1Eaq?wk6PPq)`+TiWSUF{897QCg>pkNRN)DyrCIa|Ux0 z@~KAVwrkhaP$~>C#mSDOEIXVA@}JL&TNN`$w6vB~A;QGSm^vZfn>DMWP;J!oEq zQJKeH=Sin8$rE2NqxfBiIG#I65Sy>)kLS+0^Q8><(a`Y1>=XlcstT+<@Y@j=`Wya| z$swMNBleaVQ}t^;Wlw%JryHUelkHpXG*EtxEPH==nd$JK?ooD@qwl75Pq@#wzCN*p zwEJctpm=O1oQN5lp?e(C^>HXUkG=B{n<@)CbYyA4OXb|J%s#ISTBc7XQ6ms|{3D!9 z^ml-_naSHj3thAz=@~1yS#XyEgH5|!;tetpP>h=lwWXxy^fh=<85K=HOlh|8qujs| zQ&BM<`O`@;iHI_&amb9xr75K-SmpxPb)`L~(IgvVu1<201G= zB`bdd;r$ZU|JI9PRH>9af@v{ete<2o4mdl-7?vDH$IQtz{r3c;l`QBSc%w?dz~IO6 z!rDa&HmH@hdZco<%21YL(d(}eQ1PbN`mP8Jd$Y_LK|d>Yc_Gtw*NnJRxjr4LFCH<+ zD}3Y`5VW{>GQWnIvEd?YVEa~vOBPf?F_G~@ z;-iabB)nKX#>{8i!NpouL9^0t!mfd~hg&d5dbM4Jiujt~w#c=H{bY-nTF~d5=B1e0 zaPh?c%WTYuenv7$SyYUsqF2T+8z!s1`z`py`N_{}0O6;Luy+A*4Z$TZ z%9&_wRKXgJ(3DpA@rt0Njq=B-EFGkx3i$UUxMO&Z{<>%O*;Wy5J|SI$A3qkL4m#r zx4WlTa!z?760K7DR#A1Z*S`S(fEsPfD}b?w-@Xq2;KLVGDYZ z-|w$3_j~t9w!q64x$A(Fm!u-kxQ!)&5!1Le zJM`0w(!n4*`)7hLQVIc}Ak6Hrt;yNk1hCif;pmaZDZ0R6@i2jKktk;2_?peMz_m%$ zyd%+v#@FY5Z$=B_o%IB?c!tsU34F7ysZ2IWAnf5;#PD-v(utfoaDKw7^Q`RcoE&+~ zD}1%C6WgQrvnHXzMWf4(R|_;;grV_|@}A$I{bYGQC&i5<&X6HBo@h2@uIf;M@1A*b zO`8kE8#WxWe-N?8pF7p7si`QyX|hD$(^KjSR_WLCH5QIJgsmE3fFu`|gH+6}EiZmt zKn>rjw&yhg_`P;^VMd)o#28oX%&&)G+hN=*t&g-^_|C%g5A;;(4B#8y9 zZG5sF0Y~bNksItdbyt2+WKvQrP=i^N*wr_%FQUfDSmXwerisnLPb9xYj%cTX&HjVrBC)a&wl|vD##7$N)svg&2F;}h3UupdPl4b_=;0>4 zkw=k$3SYWa%3vbvivo5k`lU$5&lKrY8m7@Avf)(7uk5Z`0L5X6)qRl>5^Y8o;n$g>X{iaCcghg#tHC3^0gWhA|!s%wFCOy z_MxfLM-_j>H%bO|qoMizR9@u0)QFpl@*4^noQ?;%EzMnqEOt(f(l=diG-Y1a_u?%X zBumVWa!R{E&Lh4V81nt*vBjMgOzuI5+QPe3-wl64KBEA*!4G;@tI?l8Iy0oN)V-x) zt?P`sxwRyYM7Y}?hQ~ef{l}z72^8hx7kvjJ8vn~FVz*8k!tg7FPc9bRjL&Y&*Q75W z_o-p^mw5rr*4=^Tk3mN)Z5I`Wh)VrR7AquNpGe+?_HH!sr|G0>vk-rX3K>bJpd(NY z8Y8VZkWA@(A#OoIN-=il1hdR>(KpP?zR#tr7ML)5J~t)# zp(W?b!mRo;L2K-5<--g?^nupqwxs~6=bKGq>GsmwezGjqz;jANyqIov%3OXp;WuEk zAh9%uc5v~|O(fxmjzS{^S?4ruZ+AU9c-pLzEGFUG*V%*6gma4ts@;`pk%N z5U#U2MX5iozBPY+)BE3(h@5ZUsVhByld=G+ij%yQuH(bo57%ha%m#zXaN{dK^?;R{-u<_Ne?}Xe{bW^DlfZ{lBLmXe;Ox`H1azBk0-%PRriQ9`6#`j43rTnq< z`ReeQjFJm&Y7a2i?vO` z9$-CX(N$uvZ&PgGNae@Lh_vQB)<4dgqV~cSjv2p?$zVi<6`5T($L<}k>3*UOEXIs*WI2-G-bTE1Up~{I)#Lc;@VK!eGal*ra*qA?Tr}r!)%PhQH8kF= z3hl$Klqp~LJ!jqRzRCH_WP9J+?r~kA=|mvQ$_ErS;o)e@f6Dh$~8tm=(=yh|93j|v>BK>Tu65aDDeX#2#nb=7s7mR8I3`7{i`Cg3kJ~=IqdvG25 zx0OrhyS_1_2#ZcMm&`Y5-(0{u3BJ@_!IuMmpwsj#IxjyW3Kc#Sc~Zf!%tU2&F&d#m zz@@@ktuPir>7NAHX)nExps1kN5@5Z0+R8uCACqRsa#!Cd)8!9H^GoGI=Ai|@(N}I| zX*-ZjCK>5juC6mKzr@*zT}lh60utYy@oMuc7#K%x$fd!V7zkz7cX-A>5Aw(J<{%-0 z#Ukzjz)XO$V!Qhe`LE(#-fFk1RPo9Kfstn+?U(D6Vd7Rpir?)C>C|Ac-?v@|3$auf zMFVKIm?6OsD2jd#&Qt%nZ>KW>z}OXhbv~;vP!hOZmF4sHP>F&wk(R;#p&T?wg?8Zw z_+tY9wM8^Qvj3Tiv3ZRS5Tu!)*ZbDTo`g-QwV)QrE0xH%Hb$G|#aKXDx_5e%R17#T z`^s`|$v9!kPM1v(T)JlXzB%Up+EiGPtqSEFT(*IbmW39aV5&&=WyPR&Y1qTZAqn-e zJta4oR7nML2Sp_@bD@_C>a-OIspc0=IWH2qGbL3c+ecW#RICJu4GUqK`DT2;7{Ld?_#iRPes*CKfhhs z!!oj7&`c5E1YEquY68NK9(O36dHO;lXIES`k|t*TW}i$Lj!b|QsLPqR3K|pE^OHz` w%A%-~%rXwuGol|wfoXL(|G$I$&@D0hzfV7#&a;m1{yYHSng$y0)a;}G55ygkr~m)} literal 0 HcmV?d00001 diff --git a/launcher/launcher.aps b/launcher/launcher.aps new file mode 100644 index 0000000000000000000000000000000000000000..7e28a9874336639bcd9c296b22c56b24cb4f81c7 GIT binary patch literal 177008 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

$ew6zR4z9hp(-i!;Sxkj8s?2t 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 M4-+o^r*`ST0EJUR*#H0l literal 0 HcmV?d00001 diff --git a/launcher/launcher.rc b/launcher/launcher.rc new file mode 100644 index 0000000..8af2e2c --- /dev/null +++ b/launcher/launcher.rc @@ -0,0 +1,71 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// (壬й) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(936) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON1 ICON "C:\\Projs\\WeChatFerry\\launcher\\icon.ico" + +#endif // (壬й) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/launcher/launcher.vcxproj b/launcher/launcher.vcxproj new file mode 100644 index 0000000..ff368f2 --- /dev/null +++ b/launcher/launcher.vcxproj @@ -0,0 +1,151 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {B11ADC6F-20DA-4DEF-A8A0-60374427D4C6} + v4.7.2 + ManagedCProj + launcher + 10.0 + + + + Application + true + v142 + true + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + true + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + Level3 + WIN32;NDEBUG;%(PreprocessorDefinitions) + + + $(OutDir)sdk.lib;%(AdditionalDependencies) + Windows + main + + + xcopy /y $(OutDir)launcher.exe $(OutDir)out\launcher + + + Copy files + + + + + Level3 + WIN32;_DEBUG;%(PreprocessorDefinitions) + + + + + + + + Level3 + _DEBUG;%(PreprocessorDefinitions) + + + + + + + + Level3 + NDEBUG;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + CppForm + + + + + + Launcher.h + + + + + + + + + + + + \ No newline at end of file diff --git a/launcher/launcher.vcxproj.filters b/launcher/launcher.vcxproj.filters new file mode 100644 index 0000000..ea37648 --- /dev/null +++ b/launcher/launcher.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + + + 头文件 + + + 头文件 + + + + + 资源文件 + + + + + 资源文件 + + + \ No newline at end of file diff --git a/launcher/launcher.vcxproj.user b/launcher/launcher.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/launcher/launcher.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/launcher/resource.h b/launcher/resource.h new file mode 100644 index 0000000..4e82c98 --- /dev/null +++ b/launcher/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ ɵİļ +// launcher.rc ʹ +// +#define IDI_ICON1 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/sdk/SDK.vcxproj b/sdk/SDK.vcxproj index 2e67e0a..b491701 100644 --- a/sdk/SDK.vcxproj +++ b/sdk/SDK.vcxproj @@ -127,6 +127,7 @@ xcopy /y $(OutDir)sdk.dll $(OutDir)out\cpp +xcopy /y $(OutDir)sdk.dll $(OutDir)out\launcher xcopy /y $(OutDir)sdk.dll $(OutDir)out\java\src\main\resources\win32-x86 xcopy /y $(OutDir)sdk.dll $(SolutionDir)python\wcferry xcopy /y $(SolutionDir)TEQuant.jpeg $(OutDir)out\cpp diff --git a/spy/Spy.vcxproj b/spy/Spy.vcxproj index 1ea8be9..4e5e2b9 100644 --- a/spy/Spy.vcxproj +++ b/spy/Spy.vcxproj @@ -133,9 +133,11 @@ cd $(OutDir) md out\cpp +md out\launcher md out\java\src\main\java md out\java\src\main\resources\win32-x86 xcopy /y $(OutDir)spy.dll $(OutDir)out\cpp +xcopy /y $(OutDir)spy.dll $(OutDir)out\launcher xcopy /y $(OutDir)spy.dll $(OutDir)out\java\src\main\resources\win32-x86 xcopy /y $(OutDir)spy.dll $(SolutionDir)python\wcferry diff --git a/spy/rpc_server.cpp b/spy/rpc_server.cpp index dae37cf..6fda256 100644 --- a/spy/rpc_server.cpp +++ b/spy/rpc_server.cpp @@ -31,7 +31,7 @@ extern std::string GetSelfWxid(); // Defined in spy.cpp using namespace std; -using grpc::CallbackServerContext; +using grpc::CallbackServerContext; using grpc::Server; using grpc::ServerBuilder; using grpc::ServerUnaryReactor; @@ -231,7 +231,8 @@ public: static DWORD lThreadId = 0; static bool lIsRunning = false; -static ServerBuilder lBuilder; +static ServerBuilder lBuilder; +static WcfImpl lService; static unique_ptr &GetServer() { @@ -243,14 +244,13 @@ static unique_ptr &GetServer() static int RunServer() { string server_address("0.0.0.0:10086"); - WcfImpl service; lBuilder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); lBuilder.AddChannelArgument(GRPC_ARG_KEEPALIVE_TIME_MS, 2000); lBuilder.AddChannelArgument(GRPC_ARG_KEEPALIVE_TIMEOUT_MS, 3000); lBuilder.AddChannelArgument(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS, 1); - lBuilder.RegisterService(&service); - + lBuilder.RegisterService(&lService); + unique_ptr &server = GetServer(); LOG_INFO("Server listening on {}", server_address); LOG_DEBUG("server: {}", fmt::ptr(server)); @@ -261,7 +261,11 @@ static int RunServer() } int RpcStartServer() -{ +{ + if (lIsRunning) { + return 0; + } + HANDLE rpcThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RunServer, NULL, NULL, &lThreadId); if (rpcThread != 0) { CloseHandle(rpcThread); @@ -272,12 +276,20 @@ int RpcStartServer() int RpcStopServer() { - if (lIsRunning) { - UnListenMessage(); + if (lIsRunning) { + Empty empty; + Response rsp; + CallbackServerContext context; + unique_ptr &server = GetServer(); - LOG_DEBUG("server: {}", fmt::ptr(server)); + LOG_DEBUG("server: {}", fmt::ptr(server)); + if (gIsListening) { + //UnListenMessage(); // Do it in RpcDisableRecvMsg + lService.RpcDisableRecvMsg(&context, &empty, &rsp); + } server->Shutdown(); - LOG_INFO("Server stoped."); + LOG_INFO("Server stoped."); + lIsRunning = false; } return 0;