From 505c6201035c94aae0307704ce3d3837bce38e95 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 13 Sep 2025 10:48:33 +0800 Subject: [PATCH] =?UTF-8?q?improve:PowerPoint=E8=81=94=E5=8A=A8=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/App.xaml.cs | 21 ++++++++ Ink Canvas/Helpers/PPTManager.cs | 49 ++++++++++++++++++ ...vasForClass.csproj.AssemblyReference.cache | Bin 163390 -> 35826 bytes 3 files changed, 70 insertions(+) diff --git a/Ink Canvas/App.xaml.cs b/Ink Canvas/App.xaml.cs index 6a8c1d4e..3766fc55 100644 --- a/Ink Canvas/App.xaml.cs +++ b/Ink Canvas/App.xaml.cs @@ -292,6 +292,27 @@ namespace Ink_Canvas { string reason = e.Reason == SessionEndReasons.Logoff ? "用户注销" : "系统关机"; WriteCrashLog($"系统会话即将结束: {reason}"); + + // 清理PowerPoint进程守护 + try + { + // 获取主窗口实例并清理PowerPoint进程守护 + var mainWindow = Application.Current.MainWindow as MainWindow; + if (mainWindow != null) + { + // 通过反射调用StopPowerPointProcessMonitoring方法 + var method = mainWindow.GetType().GetMethod("StopPowerPointProcessMonitoring", + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + method?.Invoke(mainWindow, null); + + WriteCrashLog("PowerPoint进程守护已在系统关机时清理"); + } + } + catch (Exception ex) + { + WriteCrashLog($"清理PowerPoint进程守护失败: {ex.Message}"); + } + DeviceIdentifier.SaveUsageStatsOnShutdown(); } diff --git a/Ink Canvas/Helpers/PPTManager.cs b/Ink Canvas/Helpers/PPTManager.cs index 146e4e51..47235093 100644 --- a/Ink Canvas/Helpers/PPTManager.cs +++ b/Ink Canvas/Helpers/PPTManager.cs @@ -443,6 +443,55 @@ namespace Ink_Canvas.Helpers LogHelper.WriteLogToFile($"取消PPT事件注册失败: {ex.GetType().Name} - {ex.Message}", LogHelper.LogType.Warning); } + // 释放COM对象 + try + { + if (Marshal.IsComObject(CurrentSlide)) + { + Marshal.ReleaseComObject(CurrentSlide); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"释放CurrentSlide COM对象失败: {ex}", LogHelper.LogType.Warning); + } + + try + { + if (Marshal.IsComObject(CurrentSlides)) + { + Marshal.ReleaseComObject(CurrentSlides); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"释放CurrentSlides COM对象失败: {ex}", LogHelper.LogType.Warning); + } + + try + { + if (Marshal.IsComObject(CurrentPresentation)) + { + Marshal.ReleaseComObject(CurrentPresentation); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"释放CurrentPresentation COM对象失败: {ex}", LogHelper.LogType.Warning); + } + + try + { + if (Marshal.IsComObject(PPTApplication)) + { + Marshal.ReleaseComObject(PPTApplication); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"释放PPTApplication COM对象失败: {ex}", LogHelper.LogType.Warning); + } + // 清理引用 PPTApplication = null; CurrentPresentation = null; diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache index 7126526b8065bb22cace03c7629c451ca3ed88d3..44b9fc7383ebb573862944afd3220347eedadfaa 100644 GIT binary patch delta 68 zcmdn@hx5~PCJr`6eFg>w#>B}NZ9_N4zR=(9TgD{MxY^ZUjXPu5WX4*9?e1|*i~@{t YK(_kyf;=Yn?I9&hKN+Xzlrwbz010vyTmS$7 literal 163390 zcmeHQ37pi_{of!0ihu}IsY3CpB9PhH8<5&%SztMqmEGmgu{JxCUB;bBhD>IcMJ=d! zR#8zwD%SPBiU*3VC|X<{i$%$63H1}7FV z<+YPSbu~3(YHHP&F>x*`gu-Gxo)V&RSEx>CA5+5#9b7V0S6w4YywCzUXucWK<%V}a&Pqo-8-P&J3#Io z(A~Sc2pmT#^sWS_{rV{H=Qmadi~7QQFh!fcz3kmSE85N<-8t#fzh7AOmr>96*}^|K zX4KCY|77jsYxvO@Y5H@p(6CjT0R8K#(Ra)~s8i$*90mx>M&SQR zkNBV5y&K+OuVVjM>Hrb$2bd54^$_b_^p2trpyWh{zoCIu*FY=CCQ2DE7(&>%Em7@2@# z#s<`O2XyU1?e2y{n?r!lKJW2u%bKn!+w#BwsXa) zeRm8wcWLu&YgXSe_Ji++?s#b9-_tvd99uYh3lFI$(Jh#tR!)LY&4)YS>7-Hn z?tJ9gaaG%piS*>@!}e^S@Y;z?y{-#Hh(mz2B*eqv%9dbhYil@C5{X30gRuY1f$)!0 zsOZ=XcLH8kDZ#K)^eR!cO7}X8lG!oRWYG*4FcLiw~TX z4tXo1Sc|U_h1O_WO0qwX&BHXPIvj@h-4c!EJK|V_cgP?ZpAEZ^{ldvIa4WNoB9{;3 zrq9l(E3;G6A=#S7C7hI?%uI+^j_F4Q#kd+wbO~HM8qQ;8r$4R^S00zjeNdre;h#oc zu3aYc0#tR9Za+K6)X4&3g7gP>nwt-f_z~QGSWb*FR@4l@&ejRQ_yzG$J9>;6;B_wk zS&d;SnvjtK0H22Wp!uSV7>8gnsw$BUGl3aKz0KUc|*?d&B5D zqt&MmZo4ak+gw+jlEt{<#Rqv1f=n6Xeok_*Aqrs!F7zP{zLA;&QR{iH2o-|heF|}f>RzH8)e|<)d$&n&OPam%N=mlwU+Xr zV1|riq6=$^5Xf!KE3>Pppym~L;;R0gx5?~`?aV6JU{^fYWnrgJGP8d4_R{&m9x5&QE2B z(Q)v6o(nJ0rbS*zJ6J!{n(OkSh4qOBDGKs8Z03TPMSz2-;_Rwmbo&A^v$k89>XN?l;IB0;!SA@(RTRN ztdJj+e*e6Ln`8X%pkOOR_5x|I`jOAq-SK_My&elsA(;)Q(yJg*3+;&xghSfqEzMfSqT`AE?h6XBO80 zCyQM#hMCc^MVEKXXQbM=T40Sz2`QT7LE>{q6eK$4F%i=zP@9`DHBGUo+*Yfcm_tr; zSNceY-5hCXihm6rFCMI57HxRI6EHAJg#lHfDJz+v+f@>{m_7NH7DZ^BJB=(m zvn49c4kh=&#nr@9C=%deUkYP63NVGlSU3flI>Yi}28Z;zbfj^W2e9Hz;Q_d^*dZa4 z-l?Ah_-sysg)O1#NIWV;lb|?~EJ`6(NVV~DD8Yr>!2DPDu*gqSX^Ub zaR?O9f=i~$DoQ|6E40d_2CQ^stIkqrqvSNdTP|{fT7s|rP%@8>;P$Y05>}TnhjS>gJy$zSQ(q$4eniZRQB>$pRSty zmu;_BcHQ&Ny8Vk^Dr#Ld{GhYSzj$%`G4+yo#;R{#`D)fP8wXvtWyAilKg}8X^q04P z^w7KajT1+{^i|oLj}@Oa_ouHn?YXw!@w=}1>hAOIKP~#nt_KfXf9U)h?wVFH^Ud|$ zSIu~LdU)HL@3I$GG?eXWeBj2XjvYQ?+q=77-~9IArq&hZulD^LT0_0zkJtP|s@&&5 z<|KM=$Z~2t0=bK#ObmxhC${hvl_j8(Q)#dmjs*itUOB>tXsJA)=ZcQIr?vq7b%{b<+Xx&N*mz2c;8<*DXZPoF)t=gPmW7#-REbiWfn zT$Oxy?nC|l^L4{_$NqTM7ss8u=(C3=J~Lz8h0lI|#cMmSUvt6enIAte?DHQCd+^$o zKiIPD;)jv&SaRg5+Zwws+Q^)osXs(~pdqkQQmdk>q_nDxt12($imNy-0tW+CdUI5I z;0f#q%)2CtoPuXZWrp)2%~@ib7~&;{dNDAq13J zwxm*nsPdAKYV|JQVky2Um5Aw5&pZBH5f8lzu?gp{kzZ+c3sz+5pww;?lxU3(D2>(- zsk|gWZ*(^t&KyuwShawf(mFyg2$j^ef6_4y$u;G(geQzyp`u%h71cY&iy!oG12R(&k-1d?GD0?u`TF!7;J4KjG znOc^(EE1f^SCp2uOsp)fs8EXr_ewj-Q3*Ai_Mp<{1Dq4^pe-cF&m4V^{^VcS5H$ec zzB{&(^HSLbqhyfb!5|$R3Slhn;6TH}>JzabK^1~@lDK*tx+VHUmQ6We)**^IfkCyF zpo3PYhqV3=M2aR!h$>=j!q5c>SjMH4i3cSLt+>=IY9j_t!O{>my&H~e4uzz!%Q$Lp^%BGA7~;K2fwH1#p+d6|?EwCEE>@k0BJB{=vt!_5Ioe@H zQv4e%i=4H*7zW4ta9Bodzxr0QZwBIasITT`!bRu$ARTV5JEGGCG2*bGJDS1=(?!e@ z8W;364J&?Y9$xKpcml8kPfd@69!#Kg(D*i@Ek)YpcsO)1*Y>{E%YBERI{(eEpx+D!A%hAJ&YKp!B(Q_V&!z=1%OV)YBg;S$ z6%ZXMsnmr>Kq!4~1Tr`Yh78|Y8#x9!9Q!F>A+rlRh46Dmpl1ku%(n@6N`pY412#zW zD}o@ou0h@Kb~$wSrMFi!x1X}^{O2!OQF8TZo3H=+#UWci>e%Py_Te*=fk`7iJ?_Z! zpNwo-R($llliuDCt!jO_>XaL=eX%3*@Yj>xPh5Ox&DS>_x?tQTpVn_Wocq36(Y;6TAd00?2g_pzxn-Dv}8Xpn74F$`A8c|kOQp^U6 zgHaB%~?xB*^F;AHnl|ERBf4u+GDBqh5uUYF)4qGQYzj9rk) z-QR$*zgR&mDJI+1F(#d-<7IQeBrhE+m5_(&_`z!UH&AqWB2TF+t0o4 zU;ljT@t3}=K7CI|W%%~BFK&AMv3LJ)&5qxVUDx&c`R8um_1Kc9{yB5-!v05pHhuN7 z<2D?{6p#P%)q~$0Idt{2%*e_uyQAkU+<5qV54?VV-_$e0`5)}_=V>=TckKG^SDsjV z%cdRIzq8*Xr*7Tv>m5jWT)O+=H;3+?x`Ao4@JMt}1sTGUW?32JC$@z7U=X~Pl}uDL zOBh5kXqGUnKs#sxp5|=pr|@nX&tRG~I=JibHyH9pkWpCB!hrDDqYZeE$bBK&I~Wf!enr#Npa%S^=Tns0>wu}(0nlsxzEGgo zf!vK(daXYBRPNss=C{oILMjF}--W{r3Khc=6jRjOs6J-I7>*S!#XRh?1J<&ie;DQn z)2n$d;;(W0v7g`Uh{wOfuVy-MAZcdK1XU1YKfgMu@xoQs_)PM)s_<&Uc`c{$VP!w0 zylGktRp61que1@Oq36-25i*Vl%<^%-4+$H^9AqRtCdif*F_(FShHYS0CfREALc_x4 z$DgQT;TW~qECf;7WeRxWaaUi{k??Adk&xDO0}dv0b(EkW-22*+2H*_}x(-t=!>o^j zX&YdFzftf8Z%}Y9Dlfs$;WS-Xf*N&KR)s zT*m%r5I8MxrP7Df{U;#}2K`|eU#V0qry}GlKHv{%wnGJib(IZf7c`IgLvxWR*KFn4p z{@%Cm5mwS%6yI;n_D(OLIFX1&!zc??DdYlupB+k8s(Q*tYCE6@AUg<8)una*KA7-_|E-Y^1?Wa0;( zZUvHa6SoM`D0^fL=-;v*#sp~Uz z`5ir_N01U0*7P%%JCiIa%cDERJWJ&*z)fj-5Bv-s80r1YvdM*;c@W|Bsp1tbb{r!xOMJ*GKVQhT`1?hT;pvXo3dfM1L-}0^)iy z7T2EKR-hQJ?~1{haE>Ji*I!N$yujC;?Cl8d!)Pyq(VGhgM(IhTdWD$8*c?niO;?IH z79OBx8yi(Iz91K>(rFNAbvCKl_sDi7Wj@aOWgO^v01V@C8Ha}p0{O&vJSC_rKc>b& z+B{s;TtoYmrd$#a!JN#>C5>42TUcC&_jp0!r2TFhl+x?6z^8rE1Xcajd1@sn-+Oz) zscFikzm|e79gtUtT7Bo*LV)e*pi)+oluF7V>wt#Kx5nqI*#;9b;xdhfMc}=;kbsxg z4+FBU%#5tGYu$oQUm^7sQsgx*)DjR676P*2;sbR;`$AD_PlD~*d9d6PRfW)hMngT~ z>a5F%dUoksOtX5dkPy*s9}Q@^Av0RqrAv_1S<@bhY(qIztDED{Wj(M2F}t{nL~cq1a(%nsxBLC&2T0*ov~E~q8y+a{P8k_HH54`%f_6NgPl_oCRv?+n z2>{^Zpdb&6KdciX{4!pmfiKaFYq6@MTd$y0{J~_b(6$J}TMJ1mw$ncYAYYwXBep}+ zhi07d>ax1+Ys0-v8@{y=pjla{3*uT5&noBelm^BZgcqsK*~*MyoSm9Qr^MZb1i#sP zWB}ZYG6QaQDgyQCfFU$g~*@zH$EpXqg53l~_6;Krf z8nh*+spqM*8wvtmWloY)i6$=DP6Jiqf*qgP>Q5)Zz`Z}sNBWY1n+gg_)4O2+&=qzD zfS_inqjd=UbSys|3(c!SO~)z-lY1d3pU=yz@JOO24v=oaaMUzKBQsi<|`Mg?#gjkBeFoj zqObBs4>dvyy)dBWFKl$5Af_MV@iUzK7!R=xtr_d^_w-$2)_I7SDq_qLJLm8nytZSL zf)Wbikpxmr7r{7_;cAPv^K}J)lo@(pK*{B1l+17uK}g?X)~$fIT%a#g)Y#v{Hhb=* z=Wf93JOr=?QIffq7+9;Mo+y)(ruLC2b-+BM@x>XaSXBLPEdW5v(Gvr(ovj5_R7BId zubmi2lOUY01Nu6kuLC-#1OCcW2<_x0Fyq1B8B#P-oru!VlPqmNE*(8H5wHlHHxvYL zX6l3iGtac%dAHEgkD&Mw6ofp58bR?Q>qgUHq^Kb0+#y(*(h52eVAHa0>=CmVQSmbC z#$JaEfJd@!>=7a8=WK+^d#TD{^ursa(=<6!O>=CTGLz|gi;CR!g`mh~ z>VpB+&am8d0%Qel^tv3$)x5vDVjaywv;zoRE~YaYm|?^$GMt(HXZh zxtHn5Hx(GrnzbQ~yr;m)fQOEg~(A-RdfOv(Y>u_MUjibdp zT?cU=R^cPdlqKcY*05V!<7!V~HObE5+qiI7V?3#Ip6Q{KBwikyuD;MOx9D={E(rLf zcfp_lpKi6|1SNeZZA3Kgne01h0c=7I9*8?1CGDc*RUV+EF2X=gX}(#q4^ke=LArW* zt%vwXI!xK@+yIWtFgRwtgdn4{`^iJ&*irq_H*0&DS?k5R7u{5$iABBoMJ(C8ESq$6 z@p9dZrT(kZQd7QiTtpBiIMGoP)p0*#9zp`?52mUt@H2Q|J8^gv9Mya3jCEK;$Und#-a9g96ND1Kz!j>W49 zLOYv_>H84jXt;zEN^yeSR906tkOK%v3OQBhMctU+ilDtixv=ITjy z2+ei%UIU>n>$rK@LTDcO>Ma}wc$o7DGKF@&-+QWgkuR_6P0e*s1?6j&aPmBm#~kCj zX!<8vH?HN&=e*uxAjZpl`J8<)0H&5NpYt+;lm#A&aUIHBhGJjY>}ATP7mLIV(;Zmu z&241LV+HT<5 zL$qAfA}*T)R>rZ7z<&$2i_DPVlNl|u5ZHUrGD|12qGgur_8PQw8O&T)U47lMm+6-G zd64EaBPOepgXt-M7VqMGWN+(%TRHMa*dQRCQzCPq( zijZNXdNOWmykf1Eke&xcw;6uvU52BnE7#DklAT`A|`gBQyfz!AE}?vfSP1Eoq)C2 z9#XZa!T#1m4Yr3pGeG$oO?&MjHG=KV2C96`)z@4h_$kg@8YUjCW_r#~334>fW6cb| z1!3t$Ts%hAzz|(i3I$z3M!%#cE&Zlo5VCOzC-IR6F5C{_6QUv)1x1-?@JNF2$7hGf z>?AE>n8m|u;wli zll^v3{w7Z3~D4h^@E z&vC`lWxdaJz13GNdzoVCiEWOj{(L?xN)Z)TwKp_SB^o8M&8<151~ZW^W*JE>&-Lh<3&3BTr}xxxP+XNc!O3-Lr=01o3?l;Hvx<5)4g0g zl)DoK%+wYS<-U%frC-;>-;dW{JcMM1A~^CyOD}2zr_Fa2IB8h9>xq-je)+WlAl#tU z2F`UkHJu9|?$y3*&e-S3;_z054{_RQm{(<#-{ zxxCDQ2s%eYOXBP-Haa_Vld))+-{!fWGj~@E=y{IG#hLqZ0;7Jqq|C=zHCvA=Rx=rF zG*fnhDH*U1?q4k?8hNQB8s?LxjAGCIEeF<*}{O<_~PODpc1pQpvj9W*}F zRoo}1SnOL?0nHuo;kTE;uNS2?6+FRvgV%7e7~)$|dEvsc0z(Rzk}b}((waH1w+O>t zme$PK2Llvqr8RS2<`x|Lsg-_eB@z~>{9FO9SX|?o36ADu76c>f5|1$2-LwlWLf5Z6 zH@0bwH(*vOcW2!KE61&Bm$fd}qdLA?=c{#K>jzN^u|leimqQ6NV^Zt1tJ1Hxh>hN>by@mgfJl>Cm*p}aDS`3Z{9MuvgkXd4aT5X7!>IzKKAfTv(EeDf*#>{kPzwib@BmJ&?4?TAJ@em=H9b4>CJ!Oh z`belDixpUsSh2NebTfqqvEFldvmTB;q4WUq&XVC-y2Te z<}Khiis5$PV`UNJg0T1!P7wH5lN4=hqnExUu7N5%6Li33i5#;Jo>aQmbnW(@!T@(m zT{1xWFKLi&i3|a9XVqRmN~LldMsYt%)ytw(w|fh-+Ad=Fq>&GURp=@xV68##IUw7y zO{Cx~Cd1+rDm|)_lMb}^76#Dbu4M0%0ckI$A+0q!1ZthtnSH4Bp;j>#GOvLDervQ| zY~I$uOJP2N0$kN8S&S>2xYdZD& z5R=W@@}RiaK(gy@4ByEBgowZUux1|T8!Gdn6f)9CqjDEp3zrZlq-c_#23EwI-qKK* ztRB@$A=@Ly?5m9&IZ4-hy)1=nuR{i`C8dz<5h3te?r2QSagEo9*Zn6!zQxW8e@(t# zp)SA$0e5=fTp)9QSr|BN!M5%ozpI09>=MEtEvX}#1j$}7lvK-6%gvJ_B$Kgwp$8N# zYPk1#=wRqUuMB9rT5~bMj6ma~->gi`!dzl^$1zO`L{RI!F(B!AB;;+K0)f;5S3+Gk#$Cp2-`4MCw!Rnpy{T%q z2~y{S-QJ?HI-ymh;VD_ksqOb>m5fC&^>V*At6ec5DcSGM>g8_1sGl#Sh%#(B`un|& zEPLZZs9NG21dmPa!a=#lB|vM8z?v>Jlp|VW4wOqLV{zB?!b7?AuGm7k^vem#IlG0r zk8(cBA#=G<^Ti+V-aJ+`k-40ZY6a!!L2(XH{f_b(4f~cKf1>JZoSwmArVz?T++tSc zBZXr`+w7nLC)a1Pt8Ee`=vm-tnZBv*doTAY@8vr0;90`}5c`1(cWC%abWd$&DVGt9 zHC=5n&U2mj0Gqx4s+F?bBz7`gL=e)C@A!%9embTC!tk%PFcSJDwHW=cy+g?6Brjoy zr0$#slqB7VH6e!XLRNQ4b&aQW#GrVdWmY_MTuk88S@YcSgd$B0y0tLJ zkL5tjfX|IqvDn`l$!<2gCwZHSPbkBj2kU^^8^aP$kC77~C3%}R$yto;c$&9qvr7hW z)#Yv4Btu}<*^s&8TiUjgCXfzH`7@LH&T@Bic0`~v_P$A@MA*xhdp3BQpGz>u3^Z^ZUiPKgqaBrKQ zMY#2{z`gB08NiklxVKHmEvWT#2^4e2&zPb^l;?|+yr?09XD5V1#j`ps%EiPs>e3{V zE}+#A$$7m+r1P?dNX|YOkWH&0lJhdRfXvq!Row&o0emyPmzn9;dl0k&)4fheq-3xh ziSLN=ooo}oOnU>*X}Tgo%pi_iS*BwVIdAtcbY;0O1_WKDMXxMhzt=#i>-MqB_Pr0K zy$njdSP>7Ved7{77GrT`a^U|2`Kut+Nuq%$S%;*ph_^t&B7AzeBHltT48W3oN!Qw~dy%yb1Y6)m!fYsrF_B*w2d)3aZ15iLD7)3f)%fR%bPJ^N)o zQu;`VumKH&kCYfE^AGK8@WxDUuG4LJseeOLE=kGH@j44#e-$W7Md)D?7V}DP^42)l zx18Dy17xnSGXMlNolPnAqcnb$MnU5Ojna6OBD4Uw92K1pE+%4)Z{fQ}Q2rex4q<>& zX11c%5rt5nB4i|yo1#S((c=^$yS*|Xpdm%bE+vA9&Sro5i0C6?K_j9UONf963>FGi z(s-stB|a>p50q0H2$E2YmY!^lh{aveyj((Lts@4gBTI;^T};r;*?rIaV76*+VI$m+ z!1S^Rj2COv@tmJ2CSkTYtG?23lSE&%*k+EaEdr*OYt(b}z<`w68uc6(`3MP+jA0m! zP25_;=_6z>L&%#v@FOndTiBVhoM1sdWSanC5~PR24|MNoa7on6GVD&XL&~CG@i!j& z743A#0Ho(@c|UeY5Lk8A(da9lzT&B@B+VT18KqX^!720Vj8@-LxBr5JYHdl3=lSNH zHIqVc5qUCH9f?PUXi}Cqut!6P6;fb3piqJfw}X_NWGEgDOJY)NmEmkg)n}5Cb~dbT zM4k)#n;*#0{D7(X0nq$_ zvH1Z*^VQ|YE$W9ld@3(zOUVE6V`@?{SdVXtz^A~_#>S6nNVR}GAv55XiMH)XIVc};-Rn+#>33s_*-njYEEX| zvQ}7qHO5wlPMx%yF63e{US^dSEV6riAN+{e zX&?(Y%!5*kaZZwJ0H5nlr-G@|CW$E_(j-OObZKopzHK>X!L;txfbJz(UDXHhKJQ*0 zif`AjL=?ad4DfH>L~Ak8v_8z|lVVDOqp1sV;1BDB2)~SE2KIOewd6tk%#ckuZ?84Zi@4H`sA=33x38S05cJ*mJ?OS_R21waLgi`Fg! zc$JKbg8nq`k<%tHz8?r^2?8o+s+>5~FHJ4i?n9ZtweeI8%EG*Rb*y<58{=TI@@-tW z3!Le<8t*CET1;>3DS3?zbTf0ID77bIT$pFIGjoN49?w#3z~=IiD96@t2`EBgH3aoE z??*BLKN8~|YPdKraq3N)>+-&hmV2k%26G#PYeZYj9}A8!_5|I?DcYvyH^jKE7|;-t ztag_72x$p7^}O5(SPD8K0Z{?Oa-tnkxr<%c$!Qz?^q8Th;z82gMLnID08bpuay%o= zALrdeP2y#{xB0G3yu5@5SgVEdd)#%6(-kS+C<9GJDGkL=OM%Veqwyx7O6T26P2a=m z{6Ip4mvBNGkCZ&Vu}cVpI)5EeC^O(guI2LA_v{zz?aoP3wZoX%~H+l9;iDPe zo`=5ne#&Lc5P&fH10fFhzz9J<>#3`qG%lbtE&v(_z3Qdq0bS#|VH1ujD(btksOU;? z+OH4z1K!VXtPU3Sg*eC*-Ti#`yHfRuFT6H?+mSa8`sj?J%b#R+?4CVt`?>f1>z{8u z{?eD#r|;>g4Bx)?#Z9k2_U<39+3~xv>$+Y)|J?1n9$WI%KW7eJ*#GFyrmtRh+=io= z;_+X;dhnYghpv8>8Ckhycl4Zv8xMc)f!FWvn|ek#|AT%0JniP^j$PmV$`fmE*|g*O zclLYa)UEq{y#uYBT)O+=H;3+?x`COc^h^g+meb)XgZ#vnFdqzp*Rqm{VbIkg6z(;6 z_u&Z84zvF|Q+9m6q#O}rytYro+Xon_(deWD2E2yZzXL{G%Zn>ZDvOwtE%K+pcgnys z2%|-(B}E|=gj?E_V%{t(57m<&%mP0kOuFTVKf38huRtapV)_j;$k+!(KEfu#+H-wZ zLPi1q!#26q)YO2|RLrSm-)#r{@x;q7Y%aNY)~grwz2L}?FS}<))%$1O^M7Oi_Spla zf86rOfO~?>)sGDrdDUZ=jeWT7#4F_bJFiXF{_YlO(T4{=bI?;;AKG-oSu@Xk>iuu7 zJ?D-qhLjw5!Xu-`4xM`P6Y@{{{28%q@y2=o*mTQXA2E%lZs>T|@^(X|#ayJUm9J_6tv5mI&SJTPUi9?1{n{bty5XPz@!5A}W^p>G^0Q0cA9UXI z35oHi{`>434p_*1JN)niPcMxW|Nia)V-I}i(tnM=toYUcE}VGh`mbhRe($K~|K9J> z?ZppY+2@gaPwg}L!+ZYp;Bh?tWzJc}?ST*8$udBP>b z3{>MFQ@Nx)F%f*UYQe^e`f~V;;rxQxDE-ypOJhFxJv?Y4AJ2O9J^I5i2ZCy9Nss`7 zSKhT2GU_Pr@{MAfA+vtJE3la z-SRbn1o#O9c}jnv!2ll^%`wjA12wiYfZ9nkonU~{&TiO>9173u^B&)}tm&GvEf4%~ z@*zdLCjWQyeIHINlKYORxb>}VJ6D|AcgK)(mp0$FX7wFoKlpCwj)yi*zIE__Z{2$1 z5wX)Qsoa0gbNhTXd}h1w@DYp8y`^f#XyJ>cPp-L%JHF_5U-K^>_S75O-uXOS{MYUu zRiD#*-Ju^J_2k%t|Fm=1TQ^siP8zlE&PSddSG5f(JWrlJY|r)yubs%8XzT@HLDXHg zICs)uI9%BhENyKKM@k}*NO=$rLAo0uUsKE(6h&>zrKCe{f*hpkPp8>qYeBUY*$$94 z07ChpG8TAba1Lr&1!iw-Q?d(`-w{3^e$5AMTV8;Cez5v*%)dpl7d8=(Dm;gWk>RDD zF}%440n`JWhFVsE8QccJcp=P>sZJ*O zI7mAOiTrbMB7aEJXF~?3NeK8;D%lduGj;Po)lP{Fmgnru@YJ)1bP0UD#7-G y!^l&~{{>6UYdH;Q$x0#{1x&JS6FX38v;xMk^#&vV^#3KGn0wI;o3^(z!2bi|l9xpQ