From 1537e4e17071b254053346686c3377c49e88c777 Mon Sep 17 00:00:00 2001 From: CloneTrooper1019 Date: Thu, 9 Apr 2020 12:27:39 -0500 Subject: [PATCH] Bug fixes and improvements to installer. - Progress bar is now scaled relative to the number of files rather than file sizes. - Fixed a bug where files could be written more than once in some circumstances. --- ProjectSrc/Bootstrapper/FileManifest.cs | 3 ++ ProjectSrc/Forms/StudioBootstrapper.cs | 52 ++++++++++++++++-------- ProjectSrc/Program.cs | 14 +++++++ RobloxStudioModManager.exe | Bin 577536 -> 578048 bytes 4 files changed, 52 insertions(+), 17 deletions(-) diff --git a/ProjectSrc/Bootstrapper/FileManifest.cs b/ProjectSrc/Bootstrapper/FileManifest.cs index f2b19c1..0dc3ed8 100644 --- a/ProjectSrc/Bootstrapper/FileManifest.cs +++ b/ProjectSrc/Bootstrapper/FileManifest.cs @@ -24,6 +24,9 @@ private FileManifest(string data) if (path == null || signature == null) break; + if (path.StartsWith("ExtraContent")) + path = path.Replace("ExtraContent", "content"); + Add(path, signature); } catch diff --git a/ProjectSrc/Forms/StudioBootstrapper.cs b/ProjectSrc/Forms/StudioBootstrapper.cs index 3d08d4f..8c320b1 100644 --- a/ProjectSrc/Forms/StudioBootstrapper.cs +++ b/ProjectSrc/Forms/StudioBootstrapper.cs @@ -29,7 +29,9 @@ public partial class StudioBootstrapper : Form private FileManifest fileManifest; private bool forceInstall = false; private bool exitWhenClosed = true; - private int actualProgressBarSum = 0; + + private int actualProgress = 0; + private HashSet writtenFiles; public SystemEvent StartEvent { get; private set; } private Task autoExitTask; @@ -130,8 +132,8 @@ private void incrementProgressBarMax(int count) } else { - actualProgressBarSum += count; - progressBar.Maximum = Math.Max(progressBar.Maximum, actualProgressBarSum); + actualProgress += count; + progressBar.Maximum = Math.Max(progressBar.Maximum, actualProgress); } } @@ -497,23 +499,28 @@ private static string fixFilePath(string pkgName, string filePath) private async Task installPackage(string branch, Package package) { string pkgName = package.Name; + var pkgInfo = pkgRegistry.GetSubKey(pkgName); string studioDir = GetStudioDirectory(); string downloads = getDirectory(studioDir, "downloads"); - string oldSig = pkgRegistry.GetString(pkgName); + string oldSig = pkgInfo.GetString("Signature"); string newSig = package.Signature; if (oldSig == newSig && !forceInstall) { + int fileCount = pkgInfo.GetInt("NumFiles"); echo($"Package '{pkgName}' hasn't changed between builds, skipping."); + + incrementProgressBarMax(fileCount); + incrementProgress(fileCount); + return; } string zipFileUrl = $"https://s3.amazonaws.com/setup.{branch}.com/{buildVersion}-{pkgName}"; string zipExtractPath = Path.Combine(downloads, package.Name); - incrementProgressBarMax(package.Size); echo($"Installing package {zipFileUrl}"); var localHttp = new WebClient(); @@ -542,9 +549,15 @@ private async Task installPackage(string branch, Package package) } ZipArchive archive = ZipFile.OpenRead(zipExtractPath); - string localRootDir = null; + var deferred = new Dictionary(); + + int numFiles = archive.Entries + .Select(entry => entry.FullName) + .Where(name => !name.EndsWith("/")) + .Count(); - var reprocess = new Dictionary(); + string localRootDir = null; + incrementProgressBarMax(numFiles); foreach (ZipArchiveEntry entry in archive.Entries) { @@ -616,7 +629,7 @@ private async Task installPackage(string branch, Package package) { // Check back on this file after we extract the regular files, // so we can make sure this is extracted to the correct directory. - reprocess.Add(entry, newFileSig); + deferred.Add(entry, newFileSig); } else { @@ -629,10 +642,10 @@ private async Task installPackage(string branch, Package package) } // Process any files that we deferred from writing immediately. - foreach (ZipArchiveEntry entry in reprocess.Keys) + foreach (ZipArchiveEntry entry in deferred.Keys) { string file = entry.FullName; - string newFileSig = reprocess[entry]; + string newFileSig = deferred[entry]; if (localRootDir != null) file = localRootDir + file; @@ -642,21 +655,25 @@ private async Task installPackage(string branch, Package package) // Update the signature in the package registry so we can check // if this zip file needs to be updated in future versions. - pkgRegistry.SetValue(pkgName, package.Signature); + + pkgInfo.SetValue("Signature", package.Signature); + pkgInfo.SetValue("NumFiles", numFiles); } private void writePackageFile(string studioDir, string pkgName, string file, string newFileSig, ZipArchiveEntry entry) { string filePath = fixFilePath(pkgName, file); - int length = (int)entry.Length; + + if (writtenFiles.Contains(filePath)) + return; if (!forceInstall) { - string oldFileSig = fileRegistry.GetValue(filePath, "") as string; + string oldFileSig = fileRegistry.GetString(filePath); if (oldFileSig == newFileSig) { - incrementProgress(length); + incrementProgress(); return; } } @@ -681,7 +698,8 @@ private void writePackageFile(string studioDir, string pkgName, string file, str echo($"FILE WRITE FAILED: {filePath} (This build may not run as expected!)"); } - incrementProgress(length); + incrementProgress(); + writtenFiles.Add(filePath); } public static string GetStudioDirectory() @@ -758,6 +776,7 @@ public async Task RunInstaller(string branch, bool setStartEvent = false) setStatus($"Installing Version {versionId} of Roblox Studio..."); var taskQueue = new List(); + writtenFiles = new HashSet(); echo("Grabbing package manifest..."); var pkgManifest = await PackageManifest.Get(branch, buildVersion); @@ -765,7 +784,7 @@ public async Task RunInstaller(string branch, bool setStartEvent = false) echo("Grabbing file manifest..."); fileManifest = await FileManifest.Get(branch, buildVersion); - progressBar.Maximum = 1; + progressBar.Maximum = 5000; progressBar.Value = 0; progressBar.Style = ProgressBarStyle.Continuous; @@ -778,7 +797,6 @@ public async Task RunInstaller(string branch, bool setStartEvent = false) } await Task.WhenAll(taskQueue); - echo("Writing AppSettings.xml..."); string appSettings = Path.Combine(studioDir, "AppSettings.xml"); diff --git a/ProjectSrc/Program.cs b/ProjectSrc/Program.cs index 32fe0f2..99910ab 100644 --- a/ProjectSrc/Program.cs +++ b/ProjectSrc/Program.cs @@ -38,6 +38,15 @@ public static bool GetBool(this RegistryKey key, string name) return result; } + public static int GetInt(this RegistryKey key, string name) + { + string value = key.GetString(name); + int result = 0; + + int.TryParse(value, out result); + return result; + } + public static RegistryKey GetSubKey(params string[] path) { return MainRegistry.GetSubKey(path); @@ -53,6 +62,11 @@ public static bool GetBool(string name) return MainRegistry.GetBool(name); } + public static int GetInt(string name) + { + return MainRegistry.GetInt(name); + } + public static void SetValue(string name, object value) { MainRegistry.SetValue(name, value); diff --git a/RobloxStudioModManager.exe b/RobloxStudioModManager.exe index d69164abc7fe0221dfcbd987e55be6ba98c0de2c..3b4c98f4b91fd97fecabd390517ebd1b15523bcd 100644 GIT binary patch delta 36275 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

-?)S8ee#*3Mu3+O ze5*d^<~~7~C~%h}Ecn4jK%ng+7wHZ9V>jn%xFq5&JD9?bA1s}s7C&ew{=JFA0{v4( zM$XDARm2${WjHP{x++Wjr;4~M0#6mI;`|(fLm3`mcpJmb44+|{MBp;$`P@&iIOi!1 z1!@ADfpi7#$W_J8+Ib;WT;?Nqe}JldQ;F87;s=HDZ}K6g3C#g~RiSXJ2uh>$sqsA-dFuY>`rP~~S(Og9u-uDvpm(9*o#ev8+hbn$51k}Vwl!$RPRDDwosh$-k%A)YRkXO84 zNQ#b>t*p|7wFKisBHO*<)Ec7q_mk;`bp&6?C+I66Z)KK~R}P0)R^_f1Ex2=#x{ z;T5+)n^&CdA^2SbL2VP;`;Q_*hV&<;8S)U&h!uk>*WNB%2) zRI$Z78xe3Yb9Sy*=w(#d1{jCqVu<|li>;!uK=f)FkBE6KXI^Njsd|q>72nOK>;hCp z0s7c0?&Y$7hliZvC;zIjDm)w+Gs-uk`gx@{7o&5Fwb^-2G10%az$vB&))uJZJ}bHL z>s%_9)tii41eh+ydao%{#Tf7BFm!1?8T8Lag8R|OswmAOcopX>&=G#|Qa|eH6SF8k zFqiVV1*CZ>ciH_gS`{CJ=4r6~MnAQ+FZ$ybF{C&3?%nL(ncOwab;Ql+OE3-Y^@@Mg zk{gHSQUE^1p=ZzDQR5fA>M2MU=Tg2LdB4ccCdy79mD0jQKgU6o=UM+F89Qn;uTW6f zD+VB9y`new_gh@ep>*oYExjpl4uPI7o>ZN^d&u-c#YX5u+A$!D<^m-Q!ZhzlyiYG;9?vjWK?kx zkM&o46fsvdQnWvTxWTaO?dj(fFO<<7poJ(2tL-d%IXxCm6LI!d}Q3{Mw%t7t0>r?(aPq9a>Y0}IadrRqG6-gQ80d3+?9sm zQL@cZEYh>a7Z-@_L9+crWf8dNRqcSJHDd?-F$yv?MW4V>!p)|H$C&#|N0*P{JYo0c z5oW=Egnj8D%qdi0TBcZ1O=!BvV5X=VUA|WMuu_odca?-Sih+#XQ$M;~#mBAV@p*No zI16f8flXlEP2f4PY8Y6hmvo*3E@|0aH@bYa)GAsT+ZiUE7l<~(G_j88EEJc~3&`H=$Vk7e&W-YgfM}grsX%ePWk93#V!YKWE4q@9^6c>(_qt>Vw(MaI5iY=d}-v6U>jS-fKC)Y!I1#cRxbmqoXV zw-^hd6|JalCu6G=!gh#vQm~iA9>#XD(l^9=jNzsOX1^`=3K{fExJmDb4;Wi+Vh33A za{Qt$MBfpgFghEH|0waUIGEDj_rxLQoeo~B=n`Ktw#Z7@C*o_yX0h|X5Z^L3oQ?Tb ze8<=U<{ifG6_K9?a|4fxBaHnS@rMen(tjAeg_)}KGh?`e2QO3lg|T&P8csSAsd*FC zj}qCE%-A;WQJtCAM?FcdY1#_7k>MX0YC0!3IZpI>#2ki; z8BPV1L`&JpfRoEw0LuoP3;6FmGRr=IjCd_O1WIlnf?xCvK|>>|l*Ib-8KAt>_d>wu z!%@I*%H{%U8S?>uELs3~sAw@@u~tCH!{r30_9dZ9+$2=bl(VvkQdD~_R4-;jhXE#y z$oF0kZd=)nXz@u7YUTZal9*S0JLuCHo>X=Z@`u^zv(m^=!>qwoe?=bGa*rVS)WUT1S}VEW{ur$D)q;Tndc7|vw)M?h8V$fmx(%}4N; zAa(ITbd5*c5_t~4pboC)EW>X1Nx-sxWc%6N-&dz^MS=I5$lg+>L=Z}nc%=R%P(Cam z`pMjydqd>#JJVkSC9U8scw%ZH^>lOD?rxu*%ATuZcyeFzpW%bM%HH>Bk~q~$J#ktA zwQpnbExvI(3gNu`VPZs>-^-X^713dQ@CNphKD3EP~8o6 zYZb|#q$efqCMC(u@7ILyRNamYzhA5qS%6nr3Luk|FYlJu&Q$yOCDCA`3P`miu2$>7 zo>4Oh@RgDUtY|1yM5W(1ZpJ`;JV_#8l`mKu<(Y>Fu(i9%&M^siNB zfnsvC@=HLPs#1@BuNp?o1zXO4(n&2ypvt|LMSzE-MLosJ4W-Lawwz17#&DBuIVhF( zo4A@=0k2k5DoZJqG(t06y%wqsS7&m#rMf!VjtBmS%#51X&{^(=jgWb?fo3{`@*^gz zBxNF+giRTbh#571gXD#|h<|G3<7nSst^WZ0+42uCl2u-UJc&x;Q!9CBKl^FB?Nv~A z+jes+X92d^Qyu;xO6Bv^dnaa0qhXR5sgj;#yNzbs{W$*_Gum3E4(zK{3a%zDoHT;M z(4ZKSg~}&X0sCpK@;R5Hh)I<Es_{z``nNDe@ZUdm@G`TpYQn* z&~TAa<&Rd1j8YEL8yQ;cMywn?PBK~c1gjEI#oT)8lvK^BItvw&(K71Eu_}j;l~vzm zBTA0lus1m($X*JlIb89z4F73&U>BC@$O3%B765Fp7XmJ{Q_$TSDn|vOqWLLC7-1WM zOs)~^n(6l6Mrn%B|CCAX*C(9DsOcM^ao>RIldbQmxKJ62>Z#)>^0W~U9e^pKN0ho? zM$IS|N;S)%pUU*)&>Ba3G;y;?>o*?sI~cn<=gCS5TkZP|%>Iybkc^#15lKELKF%eq zTT)}udS+g2e>RVpgBe?Be=RQ)YDSv8w;Kn^ia6Ee?Q6`$Z#JD}@;v_Y0#9ARN5Ca+!S#gUi$#Gnv6nHbVuK@H9Au0Y6f#Pl+wU`FjKU~5dQnR%a=8@yo!w}Ce|OxQx< z&uU1^5}6eS_Cv)zfow6+#2zl$5YYVMenwY_8#DeE2;gs=8*09ZYzyRwv5YMgUxi)@ z;MN;=U8J;bz#D;lyv&qwQ zBaWK9AHk~;KjPyBGW#}QeZ|{-4Xmx#?m$1B|LC$0%r!vk#iu4V99Vxbxu3yX3anAI znOJeDJ7=I+%-FNy8=nt7+Wa9{i||@i;qk!n$a(3gxH76c{2NKoY77a z_YX0!eHcwAiH}U|sB?GVBoP{F@S0ssIj4yECgwmRMvL2r;`~EuV!_>kv7&yMfd$as z(?q9<)c_kOCNvwoNx;Sn`-uj2W54E{2_k#Afeox^&N)kbYGStsn{y_Ll_Lz^X?de^ z&Jmd-2}3tke`B94!Y9%BOBha^EKWJe5G5y`CuWQ%%y8m)Vi{u#K_}kB2FAnbJQ2Y& ziZSq7a?TeWj4fo|R51~+AO>%8POG?wv8(O71`Lv?iLJm;|JC-~AfeltxzJt`%oNka zi>By5D`)0R7jKxnot2jWd*9%piUu)5)Z>i>TEqmDn<-YBSbo(dIkUtu6U)SNew)a` zJ4|v8Y!i8eX=V%CM1+}F+auY7y*g|_lb|wm*VDQ8;Vq(j% zx?U+V@g{@r)kL)Kj+`sS1V$H%pGz}ET)bdn>oK)-h{1T^pdh`YuT><(O2$@*=NqH; z1!Ako8y5N8u8C95H6)*iByu#doUxmQ#s4y}PfhF(zRk`>B6BiH-Ym4A(`E%0iHRnv zm+s72EFLzo$4kctuIAsdpg}n{ze2uN%stPj;&jjcoa@BPCiXAyXF1En`tuE?n;SPf zSBSSvY*9X8ADP&?$ags_#JDLWd9~P}g+*|MxQEe&q9V;6)Wwq~=FQ6t-XuO@%oro9 zgncR%TqtOa+#+tDMwl^1ZV}GugwaHk6TC&#Ft$*CJ&9!#QkDQjMNydxL8NO^26ejZpl9KBjT`$O$fdqZ^HLDRNu{FM&l_#?NM>Ri7v0% z;P{)k;xaZy9Q}Pqb z=3o!@owPZ)TU=#UK^5*1!>;M6aE};gV#Iq_48E5AZv@-BVl2>PE8Y{GOL_{vCzhKS z6?|VjdtDFj{o_pAE8b+@V)1XeRNDJ1-l5}oq{E__L9>@IL;?j(ChlsJnCg8zxUUfI6iq#L7hpB-n+A)zcKwzgPoKp!6Z6*EFN=!lC}<@Mkp zF^n;zD?UF?@^dlPl-y!{FW7_Gl=p)F7899g#Kjk4!k37GK`~Fv$mn9dA+c7AA&1*Dyr)df? zJ58lj#rGm|Z%-A+7yLmCWZq(g%I?4qqRqtSE4u?n#4Tny(()g1)%`tM{v%eJ81asZ z!GBKjv=Gp-CQ8ho#pH*Q%n&e)QT#K8=rM62^A?LTxUo z;`87yVx_5*Y7o-34^ugg1dM;_W=4(hlBCoMB`G-}H)BGUr1fS&QX@;(ZtPYA>=qLv zo<(~3kscmi4De-7gD(?bx&Av36^iqMNr?MT12Gt>Y$KoFk3=(?=qrhniz#o=KW9bb z1`uThPLQ~qa*#|fC*{x2CiqGTQ!0~rNf`13WkG)w2~oV)4_gw$%SmV)zSQ`C zpZ`;stE?mVFrX~nO8=nZ|-;`0sFM6orHT@}%Z>r6_LBZ{^mP@^| zo1OgMl>Yxor}#V0)kX`t(3eI}%OaCq_ghL&5aDXBk=mC^DZ^bsGPeGiZ8S17(;`k} zf4Ccn@@NCrKU|jAn+Wp%;>rlh;>vnM1x4?N1tfEF8d0WY5UfT>O5*fdf}MQ{KG8sM z9JCRn{FEAk6tFUGL}`7w6Cs%lVWQ&~bef9Eu6(Ze-+5Gxk)Meemc_*UWC0l$la!}u zmj!VxqB09#h~WwopY)ps85%OU`v2B(hL3N>H8{X#YezBw+{{{baBWI>BVWKFF>+hh1v)bl68_4Y-vfe<5N%+3N=V zeRPm4JltieL($A@aJxn9f<=lTQAu3Dqc*jeF^#C*(};|}TK)T_LgZ3mz*PUG8hQ@T zC`riipUO_nry5}d7eSfLwft9ejnE_bdy=>DT-gmN{!^u!Z3yhOG?S0DWQ( z=jStA$Z!e6wSc)en2_cd1uao83fg%bWJ;UmNxBDKYa#XnfDK|J=l1{(!vFrQkADK- z?E3Qnm4XX#7$?btmZqY1Ji&jQy8!uTYZoJbv2&>?5k;=mBEqF2Tq?q)O1M-#!@(ja zv|5bd{8&J&gY{xV<#+ggV@sV)8X?je-GCV(uk^L3FAXA31;#>kA@Wqg1hk`6s*t|% z;e{9~YNfH_iM#<)k;NG~TS7HucoVd2sGK4dNn7e>NEMc%zHO4EEUk}9(^+0pj?`W+ zT}*imj4ORx0AC%jQ#xqboPPin|K$5r+Hd*E_Z8F?x!h1hRnFy>&E=NO<(3VG3JEtQ z1g~PajA64x6p!+Ac7+^N`qcITT;5nO@3+u3Jo#*>T)}j04+><8wJ4A&YL%+mQmIyX zJ8~-6QyVA9qofJJb5Y>crdD~9^n-UM;7$3nK_3&mTy9bVMRCBb{o|mY&~LW<81$@_ zACMmK+$V2D{$b=ddA7=$&e&OS!>*$|U9TevQfzX^z(?Rw#1+Z!OEj zw%YN^Ul7!@l+7H}n>k=Tmf7_SAeoIpctjcuxLUcbzqV4TQ2y#)rv&A78TSExiZ%u1 zYy0{{GdjYD12g$xA;TpMS1?@7@G0df`~u7hrKQj(UR1uy`m3@>p$Ir4%`M)H%AC2> zFuKg#5BkHPYq{G%e-0OXN2K1lK2011<7tq3*T1G5QQoWYiLar$R$3xm>)LN=kv98x zDJvvWy@HFakQ&P1d}T|nPqav-u3aem4@AHu=y_jREj=H~w5*msL0QR4dX7jxmwc!= zkUxmOfp~YHF99FQ_+Dw2`ocJ^SrXYl1NpE>u{KNB51@9Jmbj4rS3TuFcJ8-4r96gK zlGCWyN5OS1Qkv6iZIR@nUCI+YZ<=o&5X^wn(?Wxu#&DvByTV5+?gwC)wTc7AZTYi}X@ClxXTI928udt4?7P%7E zCwTIi1Iiz*Z*%lY%INyrtdjCg{e9Ls@=pbut*!C_$2RK`X==kD`F)o8$dueRU_T^Z zu9sC9iV5mjp4MI#8dX0>9$s(7_tC=#%$8TneugE%f%vl)j~0GwX|*<14pomx)s-XF zR_llThC&6+lFxFqKVia`f^KP&{8zk`Hd`qeo2@jAM@feUWQrDUWQ+7^{w`&dv?MZJ z9c3jW;5iM+16*+noO6ct0j~a_?-w5WWhRwzpvzEf$oTBp3hg9GDZFzxh~Uhn1BJs`i7@B@;_!)0e;106L9z(`NNEUphWsM0X~^I4Dg0b zpLl~u!5n!|-pRH-X1>~Wn$2M;&OFnmIV@-Nn+)V$%wi4;jnrlzP7QKg0a!=5Ri&@w|4J=e5H;uVu5SLnYDumY;pwZQ0yGM_KYHOCDv(B8wycBb!I1 zXB=814%v#hf?7*)KP+R&e`Tw+lp)_F&uctlD^fqqE|nCXU4rUA8&vy#p$+O=Zm&>_ z`&HW~S^D?~+nZEh{)zTx_2b;p_Ew9x=xqBDDS}^JJR;rJA4{rbY$3t>oU|;xRC}I% zlp2HQnl0Nxv*l*X^C2tp?R8dOe4}DOv!iJv#}?zVPSi>=78iDX&MF+ zty&u(N?VN2#k)0biB_#leCJ22ev|xe!B%@S)`ES2v=%hWO2Oy$7Ik{)8<_Y&ezSv? zP+DlYq2vL_9CdHM4UQ$8r$u6uW1)IQ0b&9!#h7N;Y`MTiZS7S?@UpCD9nF@K zAkFG)DqeE5NcYvzw0#R!)KMzO6Gwitl)wzT8l77!HA`~do0?;-iR7m3aqQ>5Uu`K0 z&5%}Gw$*&>ct9PWyH?$((g36V%up;LcjZ$xr}RU`(t}tF9#eZ)+MO?2vdhw)E2KZ5 zN?KF0o%5xvl3eF%Yoy;UWuy8Q=GN70`Vnae!t;pKC+h;Iw%YPaR-1F9`cJHT52$Z= zE_JT9WVmS|URX>+@#Y3<$Igt)okyg@kQpU)4M;d?uXmesj@pDbp0CwU!&{w4)M(*$ zP|l5Pfd9Ve_dN24N?vxZ7AG~n<$Mek?*V+XcE5AKnBY9(j9_D7chzgstJulpi!EsZ zSG{x^Lc=Xi2}WG`Vqr-G;KaH@aB0h2!jox{6@dZE$0J(yJwX4P|9bOc*BmW>i3#!0xOl2va$oNxvXw3tDDQ}I(VR7#c&yqZ|p8TgLwB>={_QzjFUo>EGh=ON6FM| zN#3HN-J|5w@T%1Y)p+xiTonX&VFS`8O-mc?Zj(A(1n)pzlF2KQJQ4DeOkSDH22E#k zFJ^Psa|14Bqt~;E>)FKhY~t5EZDX&A2td9sz5}O?(Qfx#R?)#KI=FC?{K9}A-L(p> z=xZe!W)(`JVT{8qXw7^Xp=uTTS)Cgr+n#n6Ms|MMGHKTUo3sp@v%YEjoY!L6I(4&c#GEWEg5bO+s~PMn7MCbURy2RmS`V*6!ck&BGaV% zwnWD|MW!xrBMj}XY+0i?%tip(q!4Y&j_U2J6T z4#1FDD)hV>;Szbi8j&Rma%=GCuF3&>i<1DW#OZ)_Vm9C)aZp1tTzm;Qh8bswgUFxD za2mslgazu_MKxet3MPaDI)nRJ@e8 zmMPjkP7X+9uaHTR#Lyx?BQ7hl$S;9nVM=d?!x>Iv*eNd+?)=4^znkGR40~Hh&v1s* z7%pabH^XNb9$;wE6cX*ta5%$h3>P!Jo8dDIds|s4!)Xi`GrXJOcI#3xBL5lA??ZlB z{sGQg@ISAFeul#tPGh*3;oYi6>}MD`z|dmj0t|;UoW^i5!@C(i!|(vZkbS9mGk+MM zr&q{HWvAjQ=JZ}`02lSz#}wfrdWhjLhEFlv@6t75xQSiFa2Uh=45y|My_2EHSSq&m z3IVDGQvpX8bOP!HYXG|np3T?<$$iLI7ItPX712WB#qY@#h5)}Q90u4wG!^i&kjSEr zR$dk}Ct!;hG<-A@#evs6428WyB{rvY{4j>1 zfb$GH8Hz%tFx<{?Dt?tOx3XwWh#5r$I~i_gxTcuty_rr>|MrdfEfXELI`%mZIlgri zIr}LlS{z1kU8LKj1%lsj8u4jYiIsM5u3tJv>euI~xkMjunnh2Kozwf3LH4^3QAi=__ z{{ZgDro6Xa!ky}jauslg&kYzT_5yxenxj|071h>@049rjaIq+fdjVx}AEp8sUw-t$ zmE(A+9B_hEA+p3d$Y)_KufVTgU5LD2T#S4#aU=5h#1Q!caWnD-;uhqK#J$KDiTjZ+ z7Jo**So{U~-r^zTdy9vWFAKl06@5&16*^rzn*ab~+?g+s<4*1XL1H`kM{ zU9Jnt4Y%Cb_|dzodcvM{G5WHvz>2Qid|n@-jKevT?9CU77AFRhE1DSnu(~#e<$Sht!1-+-)7YS7=@bGlsDNQhqi z?oj=vJsJA_?}pObX1C96z4+pBtss`Jm2^7ZZSWlMeao$u92b-LsI z(}ImtYQ^B=rOA%E#!Z*LKT}FOk$!Lg%u6RkN3_nJp?|Trx25ltetOY+ft)&I#NZ** zrc4>p)_&>5t@DRp+}hp_6Nh)*qJPyj)HD9F*`o|AX2ga}pE9LhpZ39N*=@7`5FOHh z3dG>{xtC3Ei;ifE>Cb#HaMf4mNr7JVV)$jT*o@h8$3|ziPnp-hUJRZ+OKo zU|)$oeqUMDgx1*18FSB?5o?FzMv+3OuWJyej%W~ruWY+?pPs*E z@hQ?!Y0C?vqy_Sp(PO1=q^z;FT)VeEJ-wGT-RDin-h~^}SGAlb-LU1W)1-QJRpdR3i+Mx*KbV;MczO@ODI0XLRRZ;WNso^Bb( zD9H|-9s?fU;06(CiDQ&vG@Cv@j?sl3I6v$JTpA6L5RGRPWCu?3*#q}9P2UKdAKC5~ z&)Ce!XgvK=0%L5uK_Vj%GXXI(5VHU=>vn@gwkOUypSWw|Kv{qZh(Sj>tU18Oux1e( zLr}0wu;W>qD8;~~?!CI!i*9RfSKjWhl#PQ?=)*xakPa~5Is{}ZOjHzO`g3r5(K5C< mjMD{vGd8sItzZLU_U(KtIDV-!$rx=H