From 6216edaea9f2c2d26879633fe21037213b1a4441 Mon Sep 17 00:00:00 2001 From: mappu Date: Mon, 23 Sep 2013 06:43:21 +0000 Subject: [PATCH] commit all archived files --- README.md | 15 +++ dist-archive/rren.cpp | 238 ++++++++++++++++++++++++++++++++++++++++++ dist-archive/rren.exe | Bin 0 -> 25088 bytes doc/rren.png | Bin 0 -> 8664 bytes 4 files changed, 253 insertions(+) create mode 100644 README.md create mode 100644 dist-archive/rren.cpp create mode 100644 dist-archive/rren.exe create mode 100644 doc/rren.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..d82d49e --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# rren + +![](https://img.shields.io/badge/written%20in-C%2B%2B-blue) + +A command-line batch renaming client for Windows, using TR1 regexes. + +Supports ECMA regexes, string find/replace, and propercasing using globbing file masks. Uses TR1 regexes (so it semi-predates C++11). + +Original project page: https://code.google.com/p/rren/ + + +## Download + +- [⬇️ rren.exe](dist-archive/rren.exe) *(24.50 KiB)* +- [⬇️ rren.cpp](dist-archive/rren.cpp) *(5.72 KiB)* diff --git a/dist-archive/rren.cpp b/dist-archive/rren.cpp new file mode 100644 index 0000000..f6c5395 --- /dev/null +++ b/dist-archive/rren.cpp @@ -0,0 +1,238 @@ +// rren + +#define RREN_VERSION L"1.1" + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#ifdef _WIN32 + #ifndef _WIN32_WINNT + #define _WIN32_WINNT 0x0500 + #endif + #include +#else + #define EXIT_SUCCESS 0 + #define EXIT_FAILURE 1 +#endif + +#include +#include + +#include +#include +#include +using namespace std; + +struct twostr { + wstring first; + wstring second; +}; + +enum RREN_MODES { + RREN_MODE_NONE, + RREN_MODE_REGEX, + RREN_MODE_REPLACE, + RREN_MODE_PCASE +}; + +#define BUFF 255 +typedef vector V2STR; +V2STR vFiles; + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#define PRINT_ARGS wprintf( \ + L"rren v" RREN_VERSION L"\n" \ + L"Usage: rren mode filemask \n" \ + L" -e ECMA Regex rren -e filemask \"find\" \"replace\"\n" \ + L" -r Find/Replace rren -r filemask \"find\" \"replace\"\n" \ + L" -p Proper case rren -p filemask\n") +#define PRINT_INVALID_ARGS \ + wprintf(L"Invalid number of arguments.\n\n"); \ + PRINT_ARGS; + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Applies a find/replace ECMAScript regex over all twostr::first in vFiles +bool do_regex(wchar_t* wcFind, wchar_t* wcReplace) { + + // Initialise variables + tr1::wregex rFind; + wstring sReplace = wcReplace; + try {rFind.assign(wcFind);} catch (...) { + wprintf(L"Invalid search regex.\n"); + return false; + } + + // Loop over vFiles + for (V2STR::iterator vi = vFiles.begin(); vi != vFiles.end(); vi++) { + vi->second = tr1::regex_replace(vi->first, rFind, sReplace); + } + + return true; +} + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Applies a find/replace string search over all twostr::first in vFiles +bool do_replace(wchar_t* wcFind, wchar_t* wcReplace) { + + // Initialise variables + if (std::wstring(wcReplace).find(wcFind) != wstring::npos) { + wprintf(L"Recursive find/replace.\n"); + return false; + } + size_t pos = wstring::npos; + size_t flen = wcslen(wcFind); + + // Loop over vFiles + for (V2STR::iterator vi = vFiles.begin(); vi != vFiles.end(); vi++) { + vi->second.assign(vi->first); + for(;;) { + pos = vi->second.find(wcFind); + if (pos == wstring::npos) break; + vi->second.replace(pos, flen, wcReplace); + } + } + + return true; +} + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Returns the proper-case version of a wstring +wstring proper_case(wstring wsInputString) { + wstring wBuff(wsInputString); + size_t pos = wstring::npos; + + // All lowercase + for (;;) { + if (++pos > wBuff.size()) break; + wBuff[pos] = towlower(wBuff[pos]); + } + + // First character becomes uppercase + if (wBuff.size() > 0) wBuff[0] = towupper(wBuff[0]); + + // Everything following a space becomes uppercase + pos = 0; + for (;;) { + pos = wBuff.find(L" ", pos+1); + if (pos == wstring::npos) break; + if (wBuff.size() >= (pos+1)) { + wBuff[pos+1] = towupper(wBuff[pos+1]); + } else break; + } + + return wBuff; +} + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Modifies the case of all twostr::first in vFiles +bool do_pcase() { + for (V2STR::iterator vi = vFiles.begin(); vi != vFiles.end(); vi++) { + vi->second = proper_case(vi->first); + } + return true; +} + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Program entry point +int wmain(int argc, wchar_t* argv[]) { + + // Variables + WIN32_FIND_DATA wfd; + HANDLE hFind = 0; + wchar_t wCwd[BUFF] = {0}; + wstring sSearch; + twostr tsNext; + int iMode = RREN_MODE_NONE; + + // Validate command-line arguments + if (argc < 3) { + PRINT_ARGS; return EXIT_FAILURE; + } else if (_wcsnicmp(argv[1], L"-e", 2)==0) { + if (argc != 5) { + PRINT_INVALID_ARGS; return EXIT_FAILURE; + } else iMode = RREN_MODE_REGEX; + } else if (_wcsnicmp(argv[1], L"-r", 2)==0) { + if (argc != 5) { + PRINT_INVALID_ARGS; return EXIT_FAILURE; + } else iMode = RREN_MODE_REPLACE; + } else if (_wcsnicmp(argv[1], L"-p", 2)==0) { + if (argc != 3) { + PRINT_INVALID_ARGS; return EXIT_FAILURE; + } else iMode = RREN_MODE_PCASE; + } else { + wprintf(L"Invalid mode.\n"); + PRINT_ARGS; + return EXIT_FAILURE; + } + + // Create search mask from working directory + GetCurrentDirectory(BUFF-1, wCwd); + if (!wcslen(wCwd)) return EXIT_FAILURE; + sSearch.assign(wCwd); + sSearch.append(L"\\"); + sSearch.append(argv[2]); + + // Get all file matches + hFind = FindFirstFileW(sSearch.c_str(), &wfd); + if (!hFind) { + wprintf(L"No files.\n"); + return EXIT_FAILURE; + } + vFiles.clear(); + tsNext.first.clear(); + tsNext.second.clear(); + do { + if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + tsNext.first.assign(wfd.cFileName); + vFiles.push_back(tsNext); + } + } while (FindNextFile(hFind, &wfd)); + if (vFiles.empty()) { + wprintf(L"No files.\n"); + return EXIT_FAILURE; + } + + // Apply transform based on argument + switch (iMode) { + case RREN_MODE_REGEX: + if (!do_regex(argv[3], argv[4])) return EXIT_FAILURE; + break; + case RREN_MODE_REPLACE: + if (!do_replace(argv[3], argv[4])) return EXIT_FAILURE; + break; + case RREN_MODE_PCASE: + if (!do_pcase()) return EXIT_FAILURE; + break; + default: + wprintf(L"Invalid mode.\n"); + PRINT_ARGS; return EXIT_FAILURE; + } + + // Display all results + for (V2STR::iterator vi = vFiles.begin(); vi != vFiles.end(); vi++) { + wprintf(L"%s\n--> %s\n", vi->first.c_str(), vi->second.c_str()); + } + + // Prompt for apply + wprintf(L"\nApply changes? (y/n) "); + wint_t gwc = getwchar(); + if (gwc == 'Y' || gwc == 'y') { + wprintf(L"Applying changes... "); + int count = vFiles.size(), done = 0; + for (V2STR::iterator vi = vFiles.begin(); vi != vFiles.end(); vi++) { + if (MoveFile(vi->first.c_str(), vi->second.c_str()) == TRUE) done++; + } + wprintf(L"done (%d / %d).\n", done, count); + } else { + wprintf(L"No changes were made.\n"); + } + + // Clean up + return EXIT_SUCCESS; +} + diff --git a/dist-archive/rren.exe b/dist-archive/rren.exe new file mode 100644 index 0000000000000000000000000000000000000000..9b647db45e9444bb0790570d4f8e8109cc642397 GIT binary patch literal 25088 zcmeFXXHb(}_cxkOfB*pk1PBlyV5Ejl3?+mvEun-Kn$kp?kN`?Iv=AaiMa4$5f{3Ve zl_E_*KomhhiVX!6%MB=MUhZd}|Ga134`=3_59iZaGi&|!D%YA_zFceX<>FTY00RI3 z$S(8w06^<5{!8Tl$p3q>vFjF9Y8M6E6C71;1v-x^dqy5g#KtGYMI?m8U=N1G#>O$R z2g0xktXS-!Sgehk2R0@yG)zZCLxsa8I4~E{cUr*JI)_3aWEK+gV; z@*jOy{MY_p_)p9|cOU@$Z_3@g_jdFBzoisMAi&}O!N*=yAHsja7kB0VOz7W3|G!Yy z?#g%L^!{TC-jy4>?6=GRM;v)KPA4HT;oz?8Ke_(hqkm%p|26z?A_D+j|6BY2NB2iGJvmkp&L2^ zpmVsgqOlTDVkQ%q}mrA31S7A0p4IWc@I>^u( zDca%l>zN!T4#7>sVZ9wsu?K<`c4Qml(DL5Vr~0|hCPCAiEgTVyZ%|+aa)CR@URX%q zS`ugnDs-=aCzrJ$g%Ehocq>6{gyKJax=S127VlFwFClfiwZ7r$gY(Xa>zDz70;AgL zIQ|`!crq$?lPSxyd;FA37ywANzl`MrxyUFW{~4O~LHl4ULP_)k8R4b}WaxgRz}t!o zJiIo=^g~Kf(Ky_IE#P|DG~Y4-6M)X0WtwpLJZm)fI~RSb<4U7tI*PQ#RH(v3t!*Ayqew%5wKS#FvUzVW?%MK&Cia^1l10aT%RY|nn#bo4 zwm;r;!ZyO+2rt+h%<^2`{^A4-BJc6TXPUi5#}U5^`fY!MNZ(n)n@R?=Q6gd^;XEoR zoC{}nL6i88{*Z=Q|8UJUduS8ebe`8B4`SzjLcZurEPwjTZ#}L#cGIv52O(`I33s%O z##;aG5|vdz@j`Ke%^{nq8$_sD5==1+PEwGY6EkLtlm3e3oN#f-@NaxJCT`G0N(ohb zI(~TebKEnRK^l)$pDMRj1NUg{fR;2sbltDJVTkL|^ATw-^?QKHS=zJLTFUUZEKNW9 zfe$rb-AUtuSM$J4b7td!M~ML@JMQ2405)>15xBZ9N6<|^yf<{)So~Y=ImK2c3PZ9T zq;?eL3g~ya|4{Q6F+TM$bjmSFUb#}(a%hGIoBTD{`ALq>LQ zsHS5(7IL!4zlceWH+UmSfd7(@e1%iue&+H)ayzM^Au=MQ&s!s6x$LIKgIAVbo{Pk@ zQbk>*jTL$6n9Z>PW~jN?NykWlr~5PWq&2nejjEpnrX|6|>`OE7qk|!e=1z}nn4wLt z)@%zvZ{~u10Us+WM=jLfeKnKM2b=dnU&EdOs?b*a9DS_(f@B^1wMa~fD7u|_?iO-& zsv}ic3f}?L&f+lI<}HUPuX4CVt{n=zBaLjC;yYz0Te36Ia9%7V0s3?l#0By5e$10H zP|0!$U~bH0a>&e&7F4Q9V|RFaI)JRJWnyi=W0BO2x~9dYPq8*`q1PbnU-0*E+d-j- zX8%OfZ8IR1gwX%G2sO44fJCnKK7;S@bK{u4Tvrq?1xWgt>~^y6xQMj3x5uT%#y7b> ztZPs3{o>esTt0Il3mvyV%diaP_CjxJ_z740^!CULhTU5BNG%RO_Ttsh%bXVj1t}uJ zX^D5kq!TdQ5so0?)z!@$?^Yf&@iVOG29TKg3cXPVFtnF06ZU!hx<%9n_)!Df4R;o< ztvOWC#$7zaj2EzEzul(%lf7aApIsX?1E4rLxGoV7D}p~+O?(=!wGcQPfH)SpCR2o) z0?{yQ7c{S7;V&v~eh*J=QmF1MvKcU64BxXS6@Uuv2a0Dj`m2RA_+Uv;Ix=!2XeFTO z^b3*STx*O`Q8)Q@%qd+^WPIQ8sqow`mOf5vrZdD({q{dvARB!&_Q}_=*+Llts#!KStJYst7xb4A+X^T9?vF zY|uid(WnRjMF(Bz>ABVyy0l?cRD?YpT|9AHM(_oq>tY&`)l+NGfoZu8$aU}l#c*`Y z#8f<0%!{8L&%R|fQJHt|2Y*siM6UHD&arIkBY2|w*N+|wd^(P<1nyy>GtLqgroy@G z6+KG`MxuGl$4=i#;CGG>DYd$*r{@T=194ln%kaaK4c*$E*J8bMou{tn#! zp*@Mb&ge?wooD-dr?jK6MN-F*9ZXBKwEr(yA(BKttch8JFrD{_N1r*Fa%HAz^ZZ~6 zWEISV$Vw+yy%-_m?#@8^7k7GJ*-!G*o~d70JrRjPKYBL}gM^|VuXTm9w|xoq&8FWlB!T&VbQBZs?_O2-Nkv` z%HxeBhu3(w#plJDC>xViScPMIhvggYmWGNab@opfd0UWc|8`YCbD0Of4;o9NQ)S`X zS3U+5l{{^T#Oa$V&9D02Ma~RcRlE1G{IYnL!AMPanKC=bcDr{d%LfuQP*!a)blOzr z(!uWX0RY^tzqzHU1|ETh;_!L0ixhYi1VfBtsr z0Yy?|6GN-w%IE5DC+Z!*Ca4=7bEZjTyZ$<~9`}Vw$-#3h`Q+N0LOIDvf0MeC!w6MuX_NUoWv1x+T`= zn8y8f$BRkj1cC!c08sBht(1E8-lS-QDxnQ?JaY;F61?CX)smUf9y3ASsjnqU>~2 z?tuT-2X#4NUrc;u_-YkOp$QUCqv&_Nx1Y9(Ea}mWiKMLoux}Tu7@y++jn{m``k`gv ziLME%S=GWD;|QfFXRi&9CKSq?JI!6?^q$O0R9`FNA^zD9Mf`4I@C?UD@yKM!zM{;T zpbB|_!7M2ek$4Up#EFN*mfcwlc9=I{w-TAG$nUue(R^+?>io$=u9;~w* z{UG^!p=aj&eValEzpa)T{Y*_mP$I*p`l16Q6os)OhPR4F?m+~x0m?yngO+R%x4&23 zT6#=CRKQ+%2r2xrg|tWPba!EQ&=RcnM5auGSqV(sE&+ag#iy)6;WyV7&dH6A%H?00 z<-HR;IOh1Od-YZQJm4Gp%2Um;HgU-Lzw&=I2iZS?iBNC!1u|(`j130e7@mmV*_r;> zt}sEGObi8qXE2E%*5b4Ayy4TbE=Y%ihY@QYzQ>w>_ZcPMh1SOR=Q5${zn|Pa9EISX zrak0Aio4bi*1Bu<(}V`7Qk(~o@#68xvYh*&Q00hys`;`wo71`3(?0&v-uBr85gxO$ z9RiLRJ6#@%Kjrfh;pY^bEz_5|8l8whw-fL6cKVv zqfCnb|h-6pnnF&p_PmGUd56KE&3DT$%~+^BYt} z(w@oxt~Kr+RdkGSuD z)=O@{U%jH~Xw_5qwa=28Q~R~>jG9A@YJI7VruA4}uJ}8BoNZ0Wn-vIPPB-NQTtU+OHb&u6{?I4Ry;*e?#G${QxiOB>-~W`j>>jE)uT zV+dfhLLW8aj}sTxkhw!&N_kVsihq+wC&15uzm?7vyGK_8*n@n7XIoz<@AnH6O%tb2 zRTaS(20uGO?sdnTj=>KjRA&0hoG%aERF-R5{yB>A4%G$t-$Slro?{wKRgVMy^r!iM z62*<>(L2A!VxJ#w1l052O@@G*LJkSmqmGYkD(GXQI#JPc+&iy69>ePgj^9`*e7|Iq z-$^yE&u@^&g?YCl1l+EZCujUtyDz-nHWS{{xv3br*o{`X4p_I1|Ht!(+<5ZolrMue~^!PW>< z1$t4q%+wzFJ>Ho;agVXfGjjK6D5neuk56*1{Jezm)M{D*S#N7LK-G&jjHi!aoOzWq zPrsGm1N`x&4qsrB0hylab)md~xdTh-9VjEL**ltG-}bc{r=UGdFyH=yEud=eWLnMy z3s5c21&w1x+;1^XI)o=xl|MWT|FkinebP~_x>immZ7Td z+P-Axwzu>gH*^zIJk&#LZvkLcP8yLHN_D}5wO-B`2DGSZ!EL|}&eVddhbm${C4Csd zq33spkK!+hg0`89DT8y$CG-Yty)_~npd13G$i$k$B%@bR6Um~H zara82jkJ7LBN3e02}(;egS}HMzavQ6I4so^-pJH^{SEm3wRG1Ler&|xjP+pjXU)Gl zUvwQNotdIS8rR3)*TB$XP*P`Pn#YhVz!t$0XsgXXk$Vd&GR%sEC4Tfo zoXshra-}^A#04Oep7`Ur>316fYp$roe3;#1o$jAn=lJG=&>#alOgTvUxp7)%G%s28 z$pDbGYT72=_$mMFiZ1E9R%r42-qfRJWF|U{iWnHMtdS8WsBUFH&Jy~d`4v8X9db!e zb-qsvcCv`4H5M`6JRXmAp-Y(Du-hqXcK?JB@c7PJ4xj`$rgQrOdM#gr-1Du#h{Juv zn*mNTKflATvewK!Vip=nJ4t?mE8{6zdWcvV1XVczG2(UAUkXDT8rhuD5Lm3DV z5|w-ym?tSIzXyV9dD*Npo1&PKf;^uhAzBcVNXGOSqCuF=?T*b5V+xKFh##=iGKI~@ z4Syj(qyr625jHyk$#8GABl~@(7(q#vC3pC6Wm%AUI^1A03O#x<(sH`{)WMBLSr;+Ux3U-i zB*3B8>euG1J0h%9(T#iAnH^GtMXBf?q`yolo;{-e^eaNEDTjbT>7FR*6aL0YM1L;| zB`=rVpliab_U#vUA{p?D_C@FwBC}P?q`o{Avy&G+w0u^d^&9{XEUPn8zCkX(af_xp zM0GWlgnkH3RfVB3p5=h^&n};$oY8CIcyp`XhS)Y93TkaQ5~+6Y@dlcXJy(?6b4x?f~=p&1^>vc+F4cWKksdRn(rxhq z%>C=s{Bo;6b>vg-wzt@2vC~ebd1MbwOnaSB42okJ(H9hu;20q-fptV<+qVWi9ds{n z?VN)akq6%2cFgo{DPQoBB0XjaxAOVnk1bZ0`a@a_*8puI;Yuv%^z&=KnpYL2#@!?1 zUlnvi7>5g`1z}QpDsE{@abzKO*XG|uvHZH_X72pw&snF8b#S@SFzyt`;CDN}&Hwue zfT)fY$Rm_PCkORj5l+kAG=ngci04>Gtdr#*kC4+OfdNqDs`nMj=;s z>}wPd_7Q#(J;`)YgMtGi0D=I}bcZSs3<7~6ayU2RE=fhGAk5}CP)PtT5C=70fhIFQ z8jPFCV=&%^MQ0z1Wd>}U5?MvLg`d;W9^#!qj}DmvDOO5p>3Y2N$sZOX43?ohV!1hf zNovzJk|lNmF7*?i_RYsz1iBZ6WJ#nlVcq9@$J4dTKp^fvA_#TvyL1-i_5Er6eU#yP zdDCciy2EuDnGt5e^>qIl&w)(q2Es9@kojy6FTNNpC|ONE$_bOOU?2@od|{{FG3>%Nl%Ka59xfpAYg^$*ymZG8Z&h@hxPvX zVnxvg4*|JfG(W%=D`@#gvOu!433-OzBH@^i99-cSL#pNg`Z0bxkE)=>Z*H? z7b4n4g6*SJyhI5UA4%Pi2ulWpl%snYZqX@nk8693`{F^!HY zip%xp>SlMz_0t?LCU$?B%kvuK9MlU}h{l~yP(4#<@-7QPz&$>i0{MdCIoPE)VGGQD zssQsJ#_O&kH?+H&VI&zd=nEw-0X{p0CxOY`N}_we$2UrMVu(iytnyj9!&Wp1m8hFQ z@{H4&(}3?&|M3yvf!6d0ak9%om3`8hayDADM)|oJ!d9ir-%}wdI0q?+CN&Tw2?~~; ztNY`sPEo8k-VyAN?U^OP&Fv8wtDh2ja!Z(?Yoavna72N(&X$AZ2hw21kOuoG8ot67 zM)h2605P@FHT7_}Uo0A=Su*MZk_;EFmZ&@KLpcyVLDh_u`ULjh-)ESh&(LKlG09M| z<6dI6gAKrrLfs%83G`hLXrxB{T*}dbmwy(^r+dD(699@bYjH7>xU*leM3R9N441a= z>v_DH>d8(6eC}q3on1lc+Fd$nJ3hLRJUFdja`*}1hVmPj!A3&7`$;45N9ktG;NAOO zj462FGS^W4%3%NumCo=fGwyzK^rj{il*I9F_CT3Rn?hWSg+g0*1`o>&ye-q~9sAB5 z64aaHkc#!yBMAh$cgKz%Zp1^wl}-A!cWX3h_LzV(ftq$mTTCTMHp_|4fh$x_Ib6=H zZHJ!?PtRP{i6@!J3oIpc+2B%8FnNV}C+6|A1VKnJas;s#1H7wOFTZ;@`pjm^Lla0O zcY~<*YiJNVN@FsWQirTIiGk>!(YkjozshTeKRf|sBAxEu>-rg;#(eXak#p|vPtScg zmc8xt`9D=rxN2E@Gpo%97pCuL1ha_yV$-_QXn5|?u_L$>(b3S?dXH#W*r8W>G9Up0 z5TCXB?yX=`O#B{Js@djAr*g8XAybyikF@|l08p}+8rW2T({4G5RJGgtP<8z2m97J| z4Mg>YSeb>ScoxE779criZD1pK!Mp_lQb#VraeXrth0^IniBYc6r6>aa_esV^GI07Dcv`SLI&zMm_{P zpgMp>kk~AqtxB<8!n?E-ZRbN@E3{i_B8(NWE3b~{>a@8)m|ouQ;-g5NB8XZ~N_^b! z$7qg@aZOdvYh~*k^Y0f8(;S!KHHP&+LXSCqe-V8EN#%kB9K0V@Qs7k-3TEbsk<{m^ z?d|lyx@-75*Lo4Qw=q`SebpP_wb|(1~ z=bDf{WM74L^SbqqZCy9AVVV@KW1}HN$djc+4BE*>iM7w`mrkJVZ9<};{%bNz=k$#G zrSLj$%X(r|F9|01p1PIY20aEs>={jTPsU(|G0oIrEQXUVAVeg?8h_f`pH2M@5MT>{ zl6UHmXMLNmGOqgmNgPk&V%53`nHC3Fmcd{x|K!gOW|oF#WxtKmj*g0`DNkFr&_O?NB zZ>A~t>I8)B7$&lQ8n8zEcv9+Av)hbsFC{SfrTvBd$|s`*R$oZr))t0mhaYJ$X%J1O zvnA912BldwGwr&luV55xwbU$NzWg^W8W9DV^|la$t7>)FlZ%Y|ql6e>P8e?C+tCh` zj>iOZ4+PFsX{H@ID#BC%G24-{xXJGb5jdEc?%bU+ZRtUuK@!Jxi_U9Vldw5IW^BO|YpJ6$CL91<0g*G11TBKG3Z-m?1<;}4{@keX0u2Mx7} zAd&t+|I4vXu;#hg-sPjJfe5vijKx1u@T2{(`t`qPreFy-6Afo==jUjZLlcM6nI-uR zJ;^dLoXCE35XTF-cIJdwbf|b{b~l-Ep#Uci4SFlEY~!=XgR5`^rb?VFw{s|n0PmUf zABdX(%q+Tr-5QOKIQV#@&)XNa--qE}-VtTIqC*UXV+pmc!X!KI;E*a&k3~f+#M6Hn zI>B>ND(1Y(tV4C>{g;V#R*O{|I+g+((6&v=FmK&|#){Gz&u zjtb7HF*m7ypFM=1EYl^o*n?v8efWE4-bA1F_10B5u#}OFBMC7vJi)Ek4e+52IaiXx z2~+>gjm{N9>ojPOsJ0ADmH#N&a^Wc^_^IgVH_F^#A+Q-^SXA`QWY{&hc zyC|{QQq{Ib4@6>; zCWP?4aW06cg)AGBb-Pk!TssmV_=9Lr(+aaUReiwj`He&?V~ii0MPn`#JK}xzJ0~mY zfR5^4yd#fgkXtmb62x_iN-VS7{0l*+OJ0RkRY48azR25dM^8h3dwA36jfUiumljH-IZH`d-kf<~_@o=_B{1%ON*f zG#BP|xsraJZcX%!n6vv8`iM}7j6ufDADKGsLk~VB;vm!j@)A0C$XJ7BoDXfo05NPv zDyC8UxetLlVs)R!-PF;EKu{kd!io66CkNU#6j(pxY0{2xTI%fe<~xviw*+fk_{#j< ztCfni=mzee3;XS&gGzp@STbC1smBej2RGagVv0#gJkmM8-u!$2IiM5x)nVrXmzIP!#`gYA zH^1G&Mj&O?xK{wY7Yc>IU;+RrThFv4DF0M(NmiZc;|GvGi(i~hk8|?T=x$E&7-?0c zy-RwQGkJ#al>KG-JH4RTe2l{nf)`x2X;r-5^Wie*vaBn$?!9o7;BCz6!H)ULh_Kz? z;m5NE&jyYxcbD6o`QX<4Sv>YlfwR9Uk0pW(=ns>8ux{&I&o#Yl@gVO|DM#W9FCS}D zlepV6p?Z1P*?VBQ#nBb1>59PTo_Qb~veX>MK^yL+_;h9T+w4UG4e`VBpR$hH@wPcA z{BJ8`uy7^5&5+&(JXi8bNZgncJusvVCQ_;kQm1c~0dk75nuz>cOLE4|huW9Is!G(ekqgX_=0==-kOw;+`4vg7n)Gbn~S| zLR4pMv5FX6Hfshmo7D_g$InutDYg39x6XmjxdeKnib>hnoGmTSO+Kwy&XctW9f^b`b3%*6jQAXP&ML>w-O^Jss0Z$*=3Ob6X&0q4m<1WSNmD9A z<ROw-nY_+%;JPJ1#- z=Pi7h+nc$O1?-SfNp+SCbPj}T{uKHkU9X#d6718;W+p@lwPr8Oi^yeipW+kO%!Qc& zGqmBjL_0H<{JPL{|d6~P1DNJMc z>m76+@RQJq0-r`i15C0NlkGOA;(bGx zB`Ztb%aV+OHuv|3?&UWIx$0ggb$*s6`C}|uUgwaA>DPE4!K{5u2Z-|Ng*&-;VA+9s zBmJ%?qKJ|JutMg-y~zxN2fc7+**-! z154wqvmq%m-5SN8*eMX$UO&84_}7!nCle}0jiL1yZnT-2HD})AdnxWOS{0Xo=RsjL zBGVC(C0R3~#@%;uQdzq|ijN z1dfX)(6q^%>E^p5VY7p`*GNu3>|lnCj{<>aqY_;#R4@*SL=vNPa|o+Yh{mA6ouZRj z;s0obd#OiOnK(U0NS`3gjyXEq6)C%Q2aRT5IG4404JFqs3skL@&DzMtEsxe7dozAq zEk8~*uMl^JDvG@S1KRdb9Jl<3weHYjYMG7m_KK6nYAwP~9=onmIDHrmt^d@k7=S$V z@Ii_VKZt3F)l1%zdgyJ3i4+i`ElQV^XszM^Sh?S;#!xtLvlo~xaaQ>Kbya!Kr1}4y)tQbT^uDO{I99aP?6*^jhE-r#Z^=aS%^*ji73yjZ{Kq z>6pJAQ44yRjLr#L2X36-Mx^&_AZKDD3r&>`G@$og&j8~0s5bZVaK4ahP(Y?sX^-vRX6 z58}UafBj>!%q!Q2&aJJ=4rxxD5^|>}<)-3W@Iugd(8EcUs$a2ywq%6nAn9pO;0k?F z73l)*j}l`mKL0y?88b2QsRR3pG?R!JaD7?P!L5mhf}bSsF*@ihoT+BIuZZil>1{g` z?m2wW#^g8Qh4G6%NU2))!KKe~H{aU7rMZie(oF5|w`o09o?hc`E?Es5KZnAnGi?{? z>oK#!a|>_Bn!#PbZ1jQkJKOHyZqHGpuu&$VrIi`=Ja-UE(%cBQo;GY2oPWv->vfa? z`e-*(40Laapll^-XYHyF0bCFc+0QS82$!d#r;AS9Yt|lNQ@=CZoeR#sQBbK!m#&Xh zi_~ZaQ|nlHF$Iemarx09JZm7Y5ZKdjP%_-iHahzt@{99xyPvTyy4>?o2PKXKzyl2R zO|CqI-6-O%z)l}`=yuc+D7>m|+>fJ1w&ve8hw`HbvzLIEfx7nqc%*POR4JZoXDaak zPReBpoXWEW#MdC&SCqVy z`*no(!_9o8XwszwV#$ZxF06e%P8wH9tcGsE9P5pOKj*$c?uTr?t4J@`bSq|RYpI?? zN{ebrU~y(uDTzfMJyHwck5450T1c0@Srl~5AYu!dMt)H!t!#O$^2~I5%EK-%mRKZw zz&Ln7;)0qa5Dz_5qPhbIG-7A-LJQZJv|}>4;!C2MrlzSv-kmkMp9*R4EDI?LQrZY| zC2sCqN6s4%bdTmR41F50zTIo%G;NeH|5If!S|FhpEP`x0r*iRuQ1%&>?rhFO+e$Jz zd%5WRQuM)1cNlgDEHiN}wc5Sv8Oo4%25VPtQt8gaSosh{InK|OtFR_9%@m2CqbWp= zNvu#kD&?1eUIJ_U4!!eG8hYzh$CC})UsiqNlEPeVf|UQx)SK6SC96{FiNE}*FR^hb z&nB_qsf@l;z2*i(){naMl9F4IIOQ>0ARqupk& zFN%GNEJ30VYM+(^ie4>7R~HlXh94vP3>-~Bp+D-i;^YA@|5?nnulpf9qSPHJY*M+T zL`2*n+Nnn7u(w7m&y2Gg2%a#EIM(KC#!R(x7?!|HBqyr$h*x~CF*N#n`t_q|E*Y!G-ie#_Ka6)&QX<*3WLZTvlCE%+ zRyBUjCFb;>4!;nhDAm%HYe$NlSlJ04q-DP+!73u0m8>{*oi{nYrmZcEc26Mw(p6P1 ze=7DlkuAv52t;IR>&pTc1|NZ+2}Ee3%#niHi-c%2o%hqk@U!P+x ztoo_}2{)EfQ1p&>gs)X1_o?0xtjCeq-_%8m18uKF>DAi4E!=>aUN2gIE^Mu>O3W|b z`@VmCEfR?f`oNJkhH7VXjjj=quYeJ6?xt@=4H41L17uM&u@f)cXa95*h~f>_iFmQR zVsY@0g2$l1dAA*RE&A!&5WxOr%ALXeJqAt6<)YCB;UBp59d#`MSHnrAEKzm{$d*(X z^i(|lc&gY{H*_5Nl`)KTLu(0TQU4Vtf+DA@w&mLZHB?wjrojh83XZfA|^h0#1;5CNj5P| z!kfepOcFCl;UtSc*+_d4Xcf>Km=C9%+HY>D;hHdnx)UAhWe6b>V$zn(ybIKAuJes; zMw58&B!dS;HV#S`nFN=LG5UYrr#1V zXic=CI@7P*u_%?^ANoX4POF|WJz<6|F>{<*E4 z_d8rL5Jx1WTQsT_Mn~ft27O_S;KxUD++PH<*d_1XiR2($Dhjfye%$p^>@F zx#^rFpyPxUzGD@pOQD=w-v&v8BWwhGRqR1QDP8!MJG$D)Cc=}8gSLCsvrDxrE}k#t zVc@ZGAFJ`t;7aFNhEyRfB-_o-@Xsp3@4Bs7z_zcdXQRJEqJZ&$t6Ms5zux_nqSd|4 zEsGT5rwO7|{bHs>uKgdaQ%@4%v=(8RuVDuT>WgyU{k{3f|LyBu7fTVMh-D@!cwr~l ztS3>3s%rrk3|!mXs%M+4YDZ~{WeUn$mm~Ur!s~CJJ4HRB5#V}LdZV(r<}*m`SR&B* ztG$I?zDyv|r zh}O0K*(R{OIhbj#7G!qWu)tI88*k77e3&HVfi~^3U?6*w%+UOk(YjI(Pay7E$`N(OQDsN=cDjYE-3Srrb>TA9-66KJ0evDB{S@lvKaV$WK8g6e7xc zFLclA1IqV{ltyfB)n7qmkXBtKt?wT(hu$2sAgr=KtnTTzfWbm4HRUv|1jN@zeq$gP zS2Sn|C?s8zEoU@^#ozJ+&Srt~LwaWdw_9E+a)}%>A?{K6G$9BK{=m253LJqzBH7(2 zP`TVgP1bZ!FI(+|-f(zUv%`@mP&j<%Nt4!Y#NIBDx^PMlYyQ#KgcAv#k%Fh&C=OQn zn5zQ@C;|MMNgKnHle73TIu-2w&#~NY z^x_pkn}riu4=txqt(Ol{xYEvTo|e^CzoX9F1rBpW=dPUT;CV72$|7K`uKNxR!L)U| zx}Z$!!d`DzRjA1obZ^i-^dCU0KK6D8U?sTgv_pu;RiAHNr+h$4FFqOFMBN-8j$XOJ z5O~ko;+||(wUHU)wP87nHa3$%6(uP#G@0N+@3pQ=OU!go9@W7OF8s^o8hHCG+u87U%%L8mv zveLP%U|)d`q>`eNM@6Hx2PoBk@Vwbr-2=YuYFQoo^yA7 zCelQ)>o1~NbADn6ulaZ4PI9v51=2#K*oCgcVa>uOD?EFZPh3PTg8<93uK1FD=%?Ax zV5^iy2G_=bk)**TIun{n0ZPlo>v1DD!&>Ny%Xx-|gp#Mrw^U@kEo1qot9;lh;)v7dH z+b^>*w1rmq3^27eTNN0izy9UXbB zXBT1fzBfa<Y4bOkqvV?thV}?ymgJ z`%!yWb*>Yw%5Lv=-y_ddnh4sNsYw|!jXtGAk8_=qnwG@WPo#YQ#hhKni-+wyb=dzXC^dE zgWP~7mJ}CQ8rC914|l)RZ%o6gIPowHL*NYd$!Uxrfya>3=^gvK^4HX~BwI22S##v6 z5|I&nNl8&ry!fnxO=oXdu2Y|fl8&&h0Klvs9kSb}@AT4y z!4UqO`1o!=$+F`NJlypXV6TSm+PyBoFJmRUr_#@i4KiFsrX!BJ(n&LV*j}u!4u+`d zA3&0=J+XnsYA8J)!<>JM0Ognw)yNgnjufRfpm$Z(K)@bRA z>!gAslYEg0iUida6QO{OiND+xNSm&ootEd{a9x*Rsc8&7k?K_>YbZNb`Tg-xQO)^l zn9FD|^Q54x_KT>Y63q17iWiq(tjrWu)}CiEZMC#&E^j7+tF~F!XlK0Xhu}$auAv08 z3qXss;8ja1IW77vcU}06&6ZgY>WX0O5#r{9gj-wyY*{4HWwpo;c--cTQ&z}z#ze() zO`DR!{iTm6vK)B!G9}6GN!o_ZnhJy$1CnEsJNMNellvm!h`Q54x zHvou%F+<~NnK?}Wb~8i$shgD=9+%+&4`1B$KLuoYK;OfqRnV4q=$ z1%+Xu2i|u%HKT)oz2_8!o)Anc47RJ9#L8dVfbEb?A z%-^_UyVXC;QiG0==+awak3{uHT~t^R@CvYb-Ne$~xr-il?dP%?Z+bXEWN6UdDp=FZ zZ85*&->n$PceXI%ImlO}08aJ?oco+5YBkS(+7r~DeaekxlI-88gZ>f?^=F1Nn87By zq`~w{V|oTMU2#l@c}hv9Q5JxSUo(d8g-4F=-sxyEH7w7tf4A+dDe9&((EuQmr84-! z4G7U?g&p)eEpG1rB?@#a$AA3{f&TspYN6<3vuav63(<;Lu`;vm6_0%;qMy(%L`zT= z8O<@2WC|t;Tdv+$OFg7(ut_vJ@tV@x*wbnKPa8Z{`tvPcT?RMn9+DORccU0N-1A_KN9t`O2rvYO=>DYGE*jH?0{ zWirwI2^_l>*9GpeZ2~@9wud8eNwcBj?X+mnFw+(N=pgAcLQ+aBfA85ntT>y zKZd0cg~(Ir_~ULO#KChSb0Xm^JIpa*{d?+|LY5{k5-$8pIMGuZz=R3!OA3V7aCDN* z{Nfi6+n?YKtH}O{l>!H{l#cWQ_sJ&-ZGXfT__b>KB+l@BkUsJl@mP96Lj2jP<+nv) zgQzNjAJMlI;}h+uY3*8Wo4`Pbof?;(g0MVk#=c+Iwz3`@uIwI7wy+5E^n@hla(i2vx4X83@BVNFV!VBO+j|(`@_R49@EwQ`dN1%l4N@O|)CN6p^q?j_1KoWPaohB~MRFl%Aqa zpagp@o%;me(!CA%`S-mhKsSgIys5y1$uko_X{u#?7$2$2RB88v)OnEV^$qLX=9i)+ zT?1%M7!vZ}m@BGRR}Jodp#*dKNDqop?r8%pSy~)Sd$IeFH!m#y8FB@+rFBa9+`cWE zCQuXrhDnpd<%2ceD{AOZ+05v7MXN&uRmK5Tk(Ff)$F6jyRj^eS38}o7hxGllZxia3@wD2S#gU8j2WHI5>m& zSe(IN_5}y3gLRXki?fesL2#JxYpjokG$W+BEH{)NqQbA04TUot7@DQzJcpl`2TOuQ zqxlXVLs)BP=TFCHwM;`nF#sa@Qg5V}=}H^rlBTz*p-*Epj`}$v%%Ti2WTwTyU6l=` z1UrPvmX($=9Bin*;~OwfT8`- zz4|Io?Y1WFm^oY0dt94CP!8(O5@zzFHqOrIpT$5;+Xal4e!e=Affj%0+auAyI3(&QoPspAKthg3sKZixYL#)1%}Wv3h`w_mKWFH3N&+sNe9|XJsY6^V z%15C;4&plbLJRLni-A5DZ*zBfHBw#HcbbG!LCP#1#UN}`veS_*mZBn&%m^Za=}Vfn z4VJJDVO7I#d4WZBk9{1A>n0qhUe3t*$OZ>)^1tlcT9D_nKZw|K2jo`|-_)XbSuLW*je_m_r{t;6rfA;9yTPsH*y{zeGdSazJ0J17{Ya}(Z5EpU}%CBOe*px>ypo8dMWtLL= z8Xz^-H3Vm{PYe#Z?xHGi=9oY z2^ti!(qG7&(3}!36$ELp2J|7q6Pi7z33)2Y+d4r<*VrFXJhd+2?!uQry>VCOZ@kUA z&4NF7`Awg#_M`PpqQMGeotvoHW!oq;eH>1`2`gF>(&T2TT9GA#Co|G$G{Au}CkspW z+YUDS5ETTBk7FbVoX(Zz#zClY$Mhk(Q38#>fv-}o-wfXSRMkk*d``W)jl9yV)1)Hz zze@S?s3x+e?`#ktfrK3lO4t--Ng#+IAPJj6K*A1!gpdRh$TnG6M4c$0A|eq`R8&-O znPCg4h~g5&B`63eVh|i)1{EbL4vwIp`NC|^%=5i}eDC@0In~`&eXH)Rx_y$meX4(2 z9?f?Hfr=5`x@1F(y^0io{FVgtU~n5|@_s}hXwdmfuECO@2ZMHeL#XS#KP&-%HKX-c zUFs{2Alox4{4C^}l$7{;9<;jn#(-$|P0hBe8?DzNe^3A>Eioae>-u}l1loE?9B+8# zmc-HzO9JIa1|V;=d6C%{wr2m3CS2qrD-1@?+;b;6pzg$0L99!%B_YlS-kUTzuHLG5 z1y3SIobi6TgG!$fHyF2Oh_TB*eZA-`fOrw6;dELwCRqP0l5s4k@|k-J-kgSjd_I zQq0%3jw!b#dpb8(ppBNmspmrO+QtPT0)$h0lXe(pqgInFlQQ*zO&YxmWGQS7_;Wz4 zkwahqm&i?Khsw~Ko7*7I#WpUE95@*@e{a8m1wj0||7-CbAtE_)lPLV5Q`}A5zFlCS zDmLj?DBKL(Yn4wc)dg-xhBfUzxhCp;Z){XtX%O+lkAV-bij8a>gjeH0%Wor}7eyIF zZq?3eCMRybRo8iPUvJ97CYiYZsf7v)mY3eye+_L#dyCVZ1p6!cd(Gd0n3^%gc6AcM#wD7p*RDj=Zb%+K6O!Bt8sTZJEqs(E z#YUgec=TEn3B0vrdvPra6jH2uqiUXir(ay=nXntWS!HJtzPU3lr4`h*TQ+&uJq2Bs zY|x2~6-WA>e=U*q1eP3VNP;G8S#l;-$wNnU8HJ1lt&&gW$&2-YtEacWs5$wo``{_< zhp+DB4eqm1bj9WSm>+NMy%7#$%%5~PlaNt$`kd+TWumTSQArqC5B04%FS^c4w@L(> z=^Q^8EtjXYc6Zim)Sf(TGkU+G(1;=LIm8+@1)RaWb6YyNt1-1Wp>hHPhtHNiXP09Q z6QVh zGSQfcQO(*V-uL{bznxWtU3{Z_YUkA4$=Vdw@cf%y`GJaA1xf}^ApX+P%E)PgYf3QE3YI@8F@iHhkiV|FYX>WVppdo!${xpyuM0QHU93@ z$KR?Twrx?rOv7s&55Jn%VVsB5*Dm$;%qr-;fAQ`%tt*ua5&2eIGmwnQ*l9#IR@^IMXR-4u8nl)-MVLUM4Dh_n$V^a4D0ViR!|*eXTmB8HxMX>!mazqdm5K7 z>E$f3^*p^l>csQmkuY!1r5+}y8JepOTdaF}Q<yQ+JZ01x$KaHPb^sl9HR_*t z;DTyjX~XF?*M3Duie^Kl8lp9%GdhkD4hL>(uO4<^aQBGVv@v0ZK4~)MblJQf>4AX; zbgZk|XL;>bCceY#)T%Lqt#>`z!ZyJ?HMp~h2wR|@x6^#0r)=iy4yFC)g{*9cn!cG7-EIwI`O@2-pI*+amib&u+h;tf zsXJn`e!s=iHjRsRQYY&0cvbzeQjM{hBe4TeNXe&}=QRpMNuXBEMB&&%=_>PQQ&-V2 zAn=sMN@F=I@v@;@L%T|*-QE1$<^z94QK7>16k128vHi%%L$u7z%roL~vqSr{qg%e% z%1Y;yS5n+{?9I()v}|~UVJ}7^%JE|fE6~IN+mE(gvV8kK4afejvp;U>c+~HRh+&l! z-L?9VJa*Z|{iA9Zia$?Kv&a>0!!c)BJBZ`ecNECw?v-ACx zQ=Euu@hoH~>*SFbt%s|gndoi}L*}flaex$Q2z5PvA{b4*o$)9J0ftBIb#cX&Q~`TT z2-`Dq`1Nq=Ma@pqF0HEPe5B3DX$8an=UCIq%@dyRK}3`0vRFkD@HiW`a$9m5Cp}|2 zVgeXgS-wU(+_@ot+d7f{L-U;2)}c2qj%ghdt@_5jqq_tw+H2&4)+jd@8v9r^W43+M z)bp{1`otdriZrAe<2Jx7M$3}U;eAa zIZ(RSH~xq8PP^MW>Qb895k%dxJb#3A`U?>8sLJD0Gr=3&G5sF*s3AGy+?BT$vxtgY zw#!lRq|Rw#;xB$rTw)1E%Qe2!6{9X`;uZq5_?J%_+|EKd*Li)uUKiBQ*Y?89^L704 z_J2ZQ?Y##1lNn1lhU<6FS!H}<5FZxrbEcXz#dBUw@3FM$SK5rTH{Q|KPaaN+sdO?V zQ6M|J%#R)SD%CPINwpoEH5mi`WMFXH=7O|-$6Lr|;C&yY>`P<46SXtC-KAS(7<4F@ z6n!BJOutMRKj^bNcKgx8V`F($aNSq{vh3^N>BFbWCTI7Jchul*_W4Ty4aPV9Z*F{v zZwGO2w(2@Fbqn8UU#QWUN_ljlzc3a!N6Ns9%36F-XZE=vr=dp2(~99{E2b?>0y0Cm zIJkb@*T}qC=#B7%DOll*4y0oY37c-X@hNjUZ*~xxlAK{fwIN&bgc>g4pV+3 zPIm??y;>(ElLgCpig6rI{v)Eg! z4+-#go8-&+X!rzg`Osa>>It%9VzpX(?3jUjgkeiZzrON2yR8oGa+j4O4&}#DSsz!1 zTLVLZze)DYFG>kAyxstM%;9u)YNvx(K#8InhhGxBQtI9MQje_L{C~Oo~lwh1OB_QN?ddHeks&L$hUZ4Tfar+%IWU;@&?Ld$Hh2*3mOJiq>q z4&cKCU|kA;st>3~y}rs@%7F>_YdEkstw-`$0InA+ATYu6tnMH40SiR$?U# zU1?g&ylM)Bq`<@pYvj?U7DO1~Xvc{}Z}L+t%pLsz39v;+!R!^LN+VMQ($tZ0b-5-0 zrYY9>S*60*ue42eUghAMxOr=mQ{FbmwLVrlx=Zd}Eo=$?koB3l0(~}4sLJ;=&X;_rRr^dy4r@nlIcmeODj?G%%*%W7~bYfxT&kN5(FP*hsL>>f4Y0M z(FGObPa&_(v=WxD4rM>4C9t&FSDSm>ngsgZ$J2G!&EHhKBp{qt00RO3fG_~zl3~`N z+DLQsW~aPzT}p!WJ!{Am4(7Gm9o8LXrAZR<~zGWQXJQY1p_wv=ZH^u0$gssf0^Z__ASKxX@>CMhS z2U;=5I51@Jdb3?KCQo~1Ws@Rh>5xB~PXFckw{STni%u1C`QFj%(3)IyeBuQTj+5@| zB^ddnYWv>nYujdqqPNTt%~Y3U4RMkb5R;qt!Y6V}BQ=eF8?jfW?hb7gaDaW@hP-gn9y zRu$r0B_<)24{D_bFH-VZ(0DjPcAqaTf6%8dyl)R3=~ALM3nUUmz?>Y~>i*zmy*Md_ zmsJjUz41U8z+$?y=WymO)+$qoBNdP=eV6%*HzL5$GUfe|PJjxkk4uvs<*slO8iF1j zQ(i4VNJ9D^xB(x*y8yxznOyAV-#3y%!`b@FYT;e#4J5{*%f72NSYWjq-gP_P3j7Gp z5Z<=!k-+08YYX5++(p?W@sPi3t=5NWP;Npt;Qs9W5Ume|tX&h+j^6i?uIQf7ctTPfb)&S*rLc+b3;3^>#b6$dt61G!40hU5FI747p1mvX7?m zkElyy%E1rRI($j{lv&Frtm|X9W4{5)!`8*QLc0-eKu>Jclx5#iN@LwplndBbzYMI# zGFuBK4_HX7P?eU7ydNxX`8hY0{*Vo?vho}*JB6~hmmT*$|@Jrpo@ZPZg_g3hfGpZd50Dj^hL9g)?jiI!e2z|qh_cCd(HJf1bHdAJy5 z2tYa1nk$u`f3%#&frO;2p;Op8@_7f>3b;IF;N)(nGBBXeuOKYghW3^B3e(deFh_1uMN$?$y}rBxZU=V9I>=HA{JX?TalJn#_rNu?erbI`zYjj% z4u>mFzRRVwgT?)pynbzexgk!{-%!l6Z&zwJ;N->lhAx<-a(WblROf`vkvs(hOm@6*-ls*MD)d@C8R)DjXBV;Qs z-<(amZvVIjJY(qbc>JMzdX?tfqfDZqEhbl-hi|NStkD&coYE+JytSio!n%5)>6~%` z^h>WHd;qU%Jbs<1Ik3=ZIR})97BfzbquAZkY8E$xlg2ZOsRus zMUqk?g`-V}(1SQxbUxg@VtVv5$Ztzmc{8ke&){Q;o>jrjRdQ#-^Mlv!l9idDdpXh& zy@kPUOZZcKh~^c1W^=PcF5yx9)9NXg0`J_eV^8-zt$*rXvDvkGB7e-m4pRn3Dv&L% zX#Xy6Ji{*h4N2T`VQ)*0mA4dH-f}a+C^Y-m4RzNP8n6m6uGZf@TY++8sOovZ^x zh6vgLS}#FTVnq1XiE7ZvTX?|74!pB3Ar^UYlw?L`a?-eXLnAjuHmceDW`GLtjjNKS zm0^5s$s4&eSAmc(9eVo-PmaTDxZrhYc(lXY?037VEQ&zjgyhrH={e-plm`Z%C`_Ti zSKHq)Wtc^9=b`hEqZ?c`rzanqSpuA!o}l)sO^ zoAqP5kP+$9LPz(O8@k=cNbW94)I!1!F_Fm4tdt&00(irq-h!I1b|DqSE5rXjNOQjDS* z8WfsgG?O~qdihhPKUZX|8zG{{lfY@@o0sDA*c8qh6TR?YK>$7V!OKmbMd|5uei*?s zDyBos8RjtTXgpeAb&IiyU^~YANIiS_kU_L5`vzs1ekQ7~Dp-`2iQjqUrMeoDM{!;s z@qPAXM@mCXgf%MZr}5#es9b>=`!SnN5Wuyse`T7)7ZH6^>FJqxUt3&214KA$uRCzb ziIF}PqaVQU2X8W2_@ILm>lnS)w+X2JYUGMHjqnTfi#pMMiHavv$4tr0vXzJ1?QVsG z;x|>AyiK?AqT{VNgg_Dj{$PL0XfS>yjqVWdcx6>4;hd6Ss7Z&t+|FhrQx5DYN^f&A z6qgZP^hkbQ0EK^^FE$zS3AzLGUJ~*jS50H6=x&@yQ zk7n&fp25c}KPr6)ej1y2yzLiE#n*Lw-5Rj~&(7m68jUVPI#|8<&s9n!h(*G0tiqdV z#jg$smT5|@0*C?Y4@p*;V=?=D>hFg+25cZFRZN9OTjG89PqhjS%%ccOf^BRXLD=~5 z=u-a=czrhq>7^7^lyUZ9&t(=#D+`Kh^Djkwf;#BfFt4YqkP4P<46^*eLD5oB!aj4l z0t>r4WnHktX}Q#d%%VEvwZvwn;ghO;{g`@wC*TR*!2$H2SLa-mE?F| z_QLh@z~c#o_a>Y>7Em1Z8&4!)lmeND*4mAB9-Kq6?Pjxi8(wRX_XowL z`;)CGXJ4cN>|?mjOEN7H7pxm_$4H>c+YMoF_-nOj*`lot&vQf4cl>k#f*PY4Pvr@F27ZFLIV`{P&MD=1-bZa?whj*37Ln(hWs@#^*4TGL zd%;6MEw+C51$T*JR=ty!Au>#(G4roH{}ft9_F%Km>ZTE$uTo&1u)32)Zrd2LZ1@>PJ7zT9 zIGfnopTiZz{_K7^tzz8RViz`|w!e;z;!y-pD%&V+p5BZESdU_f^^SH+EqfmO?_!z9 zWHSUQ+pw+{n*t&$>>%Rx-$`(nTb8Xwxmb^zweo8W-LUPq`XUG?*{@-{O|%U!`RC*W z!L^ThjT6gph6dAnbhS5aD0cm@Rgq0E~+(&cY=bY5|uC@6lL zjdxxi5}-Mq$%=9xTpxT1uxf|u4-wn`Duk8Drr~^_dAm- z!mHt?RVg;?I$ClxH3eN9ytSxJgP`L`fN(ENLl{MV4|55V5np=xn*(d-qW+NHhF^^TL? z!0cJEFGTcfF?25(lGZV))geRfy1jBvJT(cNUewjtqxgA9?YBDQ#ZYaT(7TunDJj5S z^aBEbGo<``TB<`3e<0wX+MJe5I8yXEj`(Y1jOvhM4oQ--}c1zmF$HlNN>Xl#&2jaR$Kiw&+W~Qv7-_ zQKkCdV0WvR<6q4}y@JRdJYdzor2l`+9}wSaY;v_3HHrVS_LqF|nZW)Ja&2{oMPHKC z7~rvL*C+l^0K@};0B?0lL1(A3a?v?#7DwP?E#h<53aAV^n<8*xGpT&8fSV?CqH@`5 zDFU{0mWwr7{nyJ(qYH$wbiRPe<@i{;IAg8X>FS`--a@`eAPiO~H~){;aDV8jH3f94 zh|d(}{%!}YZr*(QcOvyDbQ+1z%wn?CNsr*~oBzBWn4?xzZ~Hl+^ej3H&00MASW^VS zoGfl8oo|g6F$vVg#KOlqjlvSpt=D;D{x;N%ubM?mj?erfppwW5i z6pYTH{^g7JUlJkV&shIwoWG(UtX2@J-A6C(cYUn0nH-#}HJU?VtC_IBR>3*e-xKTX z9~o_p&iX6%p3YcjR~M|StFwpoBC7wQqg+0LPh~KL>ixAk+4Hf^@o-n)6Q#14)DU`Z zv^pw_issCo2%$%56q{eQ{+(ur2fQ`N**(@r%>)O12ki>?08^X)&+A%T$_14D7H&g$X? zKv-0)KS>=n8jJP&b>yGdfKV=l7RpTJQ~0^+*{ZYC#r%^%qw&=d1OQ^0e4&WKQp*;@ z_%}~je981T7sRL2)#C@|Fn?G6T@m2x>$3PFibcl@gfu)pf)I$0Uj*o>X0ha2j47?kUn(Lc-=N-z z0T)@2ypoITR^R1kg6|H9et3zw4Hb<4e8l+-N37G)5$3l&FIbN`$rv+d=~MP{e46BZ zT<5xRJ_6tA`lG&(##tE)(dk+(KS_xl|-=d=yHmdl~-${pEq3T{0v7T!O^* z4h5T=sA9#SJFHE8Xe6oodfZQBaxfSzZ0zR<8$-#(suR2wH5#Dn{9?0)EZ+Tw!z9zMK1J@ezEDH@GFd-iNDSMIO&xUO+b zVWFF=tCa0$LF3?ItOK11(WN$ZWMq0KY=mAoCc3k%D@z@hBqx9%+ihk&2l)^FF*%63!(^-Q zNJ>a_m}aX;#>B+nP>bO&Cx&wycPI`AJL-4#^LUB1ieR`gMPE8>qu7BuQhw(Vf=-)Y zIeGaOa(U#VX`yft;2FX-h{+~C7t*MBJ#W3b%!!~2fKggoqgG`EU%vy4qO#Wg#--UK z^=V9nIc3$Fp1wmxpmrx#!W5~7(>;>9(N$d*rIh%PP#>7(7REgTxv2pjuP}XZ-b8{6 zxf&qMr3V}Xxxs(M29d33)%bLGrg^_hy?Le0EAge~VwJ&V55*7S#DHiM*57 zCQ;8)U$}23K|`0ZWt-7lifP)O%as3Z8>N|2pha>i9`e&Ac!h?lLLqgf4LTRw z3$i(Wt#(Up351#~^DnFIF3Sa)1oXwaiJ~#=4Uc642->53Tu`;;i5r@sL4w*u3146h!Lu zVU((c?u?W>?QT+ocd4~5-s%V2eW+D*Zpg|;-L6R}YBPD|RjOOhn_n5<%MhNn0=vEb z_6d^KNxEPc+pbA#e8u*1gZgfT`Wq2H5)w7%Qn@yX1Jl32^;GM_0^Hq~7~5+wQfXP4 zc06*^oAw%c%u`DBAR}K$Ybi#N+&@V>kx*)FNdQyJtSjDys_vFde(($2AR38owhHX` zZ=@uqTsRAdHVyIRXWLvW!Q^id3ZQawa$-hVTQg|m&E?UxhRHozYBOWjr%#nm%-vrf zeHwT!RHm62))cthzDind{Qae7VY=r}_8Q^I!+B(`q`>g`E`(l6m-(323OAV%m8j_Q z;w^Pk_HEC>6Y;@HMrTEi}VB{eIhDy2IGrLRjWX#P;qMl=dO0#3*Y;Uu<9 zi?F^ow!Z@Sxc+>@!VKtO$OZx>NP+BKs5X&c-QA%D1=x7zZzPygziSzEEQ9(&MGrIWMW zohVhGTwSg3@l!GX#DLUFde*oTZ(@b-sDyARwaynWPnF&Cm|8=pO5xm6B`RT5!me~9 zYGdI0_ocTgk+g{h`p(2)n{<;d3hqxCk_`Ohvm#RCLNubYfKzi&z*hbdZE;%Ze`sDV zEGjBG6I&uKGT}E?-y zqK|=n`ccP0AP9fU1LdPNWN9f-5F^dEWBuICX`{rZ>uIKhDSXpGwX#(iEt#pcu|T># z=KI^aKCf6m5-Eah+F9a_LZ}R+#Kg2K_GKvvaUqAx?9eO?$;rv`)b&{&t4#tejmF`r zta=55>Q!;j=kWa_BE!B#tc66KI{n@d0~WcnNHYvn*0ocFB$ z)In{uAoXR43xyc^>=0`8lnECE?>}r}dhnj&u=DtXP5a8Y-(R4g7|XW<5}$4efajK2 zd%ti+Rn<_&*3-ZaUS3}Gh{x=DHbSup=c7FgZWqf9xvJ#9JR-~Ls=mb5oO>16T@esJllj?{e}!%;SO~C?pgIS0Z=IP%-8weY)J5CiF3|3Jl?%4j!HkB z>Q^lpc#^`t=W?+v6`i|M*keoqdCE*XBj$r5u_hDw99h*xScKmR{nPn0)2_raJAY77LMi zjY)#h=PwOD^Szy&Z;s`t%!H~cqb7UzN{r@m_dgpgOlf_y-%_eSa#$4b=CwMqqlxd- zVPdu_pTC@4jTcUz-^Uck-@OPv^BoRP^r0mf-DQ}~k9er(m45lTP&XpX$7++7#T*KS zOnGbOr_blCMW%Nt1?HfY3h#@p$3JqGM%@_>ZyE6UYag)E*`0J`ER>y_Kk=&6W@Jj2 zlA_!DcF?@)!dng9;2lDMMe)4kZiz+72TOPfJwzf7P`RJ<*-X$FYX>-6>K(7S;GdP%& zyvAw_Q}u=07?bW-s31@){L!O-vXC@vF`HeV5HKM$w=j?wQAKj<>oerY*!p3_hc%rOfm z##-O}+}s6jZo8k7l9Kp4_R-xGLF$~p%Eph_K)xG3j=MEfmTn#B1##Yp^{EU-XCd-( z|J=O;5NKwZj0;{N<9_}6l^7^yoRbASGBPr1fM_iq9UWbp@9RS6Vk_Ms+!osg-U+Ui zP_WxY3%D~Tz7JV&F3tw zCYY&HJ;%=rZ0kZm8gBdRh3cWMd=O-}WYy+kVJpzeA8WEdpJ`@BssB{~O8~Q0Oa$bZFTdvl;f8@Vg`pK3 z;)*+`lfTE7`j)!NUgwPOS+qc<15V_dj=Ti37^@OjPc&DU8)3s%*qtjVXwxK|1l2TR z4p0#MJMSRXas3KG_W)Z%n*>*D;Ga zwuVjf*nqM(UUKnA)D^2TqvqP&t+Hxlmz7NgH)-SWu2HSWS9!2Q*^ByyiJivnhZif^CqQFx_ZE8RKSN z>#ij!4qGJKZV`|?w|Vh%u`+%@ANO%!aQqg2-!+S$%T(t&tFf$Nbic+Fo;$kQ$*Yso zN&CY#OH%haCLK%uj`fR0`t2QTzVrPH=Ub1w8W%0Jqiv#_R|4pgl`T?{D=u|Iy?ELz zuJ}?{>7smNU}T53O`$5KsMfy*1<$IwI!ua>2!7#x_*XPt9Lkp&$*?4bxXH={ z&JLsFzMM4oFj`bODNe=tt@+__G!pbiN`v~`|O%|maKh~ z8mn;TxAD8X>7kzOrOg>IE6C=TJu;Lj5a+fGFB_C1;l7#@t}Gd{Xn1BA zHLUXsCGJ`dU9AW<9%>AYva8DM?&5N}eyx*9uK*>O`~v?y zpZr6(c=YsZ-+A9O>!^$U?)$TxWZ7G7;fbRc#Bv7<9P-A?7VnLofCoSEb}3~pQr3pm zRHRDD7gV`{Y)o^BG@uY9%&57OHlphy1{>WTL8m#6+$(LUf}S;017{%jn+e;6N}adv zfPUPZ0gy>UARfsRijSkcq?Z~HmsDvkTAb=kof>{RGR7DTcsr}e@2;1N+{eow^21!b zVj5RDyU!*>L#U0xkqP69-NzFXwQW*7CCK+Z%l+F~S6QYBW6rD7{=YN)Ehb`4YRibF zs@AUVu6x8&Hhn9`7AphQ=0IE?ei!@{&6Q8d}WFN#KbFRhCTKKJ@3s|Xoa_;sO@E% z62U*=XGT??$NUqLW@1X2xLX`yUw;*=J^J37=I%DvSNK4Zvgs>R49}!|6OdSUfwr$| zf08zzU1wtKXI;=S`*XFht&VO>jo=V&CB2ZHz{p)Q7FR6znlR=y>dCmXLGra6 zg~$4)B4PjFb?~3}^RxYB)6fk9ZhlicXXf5WZg?IfU$dzZ=r8aU8++iSwy1$2OhT-T zf`5xTUhoV4a8oiqrK-!&>HAQ6=N9>;eoPB~On=z@0-8Y547Erg{oMQ=Yu~3GD7c0X z0k5SPRxGh)1jqF!I@bR4rJ~6Nv4(e$+~DN7h9BWA9t1!a zCaBe-)+Q!hd_nJtT3y1K{a0`U-UatAq%A!jn znd$$+2&uF-HP!8#$i7?XQZ2Cg`qL4u)!+$VOhXk>C7AJmPzsbL zZE4V30cVeBn_U@rc14rqb@RaC<2d)Ji-eP{(Le$54bg?kW(ZZ~p&}v=25uO;?`;*9 zq`z%df7_6N3)`=aWOtZ03{Ge*)Q=A&C|2X=%}Ryb#WVG0HAFVVJv?TT5so>pY=LOU zqV|eQ3L^y%A!xAG7+=8~CAPP50rie1jr+;-xUe#{bep^G#p&)+Qclu#=#D~rN$#8Q zqf3^^qGmp@qVcz)L#-=?e?=-$cl@p#t52jzzV7oZt~=4dho;nsuU3dSL|w{2B|t7- z*=@FCI4vx{DhiZi@^SHWzpu`>AiO{+D$BqS+GAWHP4wgKFD+D{aa6X!SCU6IZQ4utE)U|qI{Wg zQM7qCAzB>qi25MYyEW}}K(2wJ7^>DpI*be6iz)D(X$gN8>z9hmaI+A|rRvWIV)chD zF}1u=2X+Q`YBTJ78j`s1D}^#q1fE5j)kE{#+3);%xwBHmmtL6apDYMS@;k;-WMY1q zABe&e2KI-z1Vo`(iZYmU)NaIVRV{t?{|)+wyLEP`Su8f|lH$qAcM8aX=C|yoJxIE= zVWsWm$uWCU*2bd%k5c5#=P|ehDfaej&tqB!3M64S8VS`eS&HucyVU)h#${LDDjS5t zN4edR*udQGM|84mDma*Uo@`y5{nk;a|2m=f&kda9X4q6y;52U5@lT7<7E>TSvxKSD zBCYd&fY9x9=tJbyk!xS077ZmoTe6!o9k0$X|IM?CHGaBUk#qU^D8y=G2{2ePWPe8M zSLjXI{75mXc7$y}i+D5Us|eS(mqgxH55eYwn_q<~K@Ayoe1ea%$UOF;`;zCqDzApt z0IecF;bfk1&b2dS|8&D*`n!bl3XJuZHBOngK-X)WqY{`F@cU=WDIkGypTjXebG8;& z`oh$rbs>&Cz@a3%WVmw)=zr(*A&H!J3oDKezL(U9_2$gy`=r2WOd1Wo+Xh+o>uToe ztgv|+xn!X2qQwHV=bkqXlOy`V7NiP7?7y?Zb|rOsE$Q4XPEit6{2hx!6&?E#%rY zbzQI6!5wm9!>T1obhpsGnZ@bJq1bC9JXwkV_Bf?oV-vnsK{)UHTO+8gjX$m)0maq` zwe&vMlNEXvepfT;YU!XIgdogqMeI6GXp7El+8@UoQ70)v*w<8iZ<|TpxPh6W!-QiB z)LOe~v%JntHWOurbxS`N3{UXiH+M4nb6n4%_Y>Ke`TEIC0sdPkj&OVzyhfwJ(1N{< zR1ThvloeXv{JTg;6MAvt=gw1XKd*)ThXDZnKafA64KgwYpsF&^#UrY)o0(pgQ*=iT8u=Ka!{C!Furf45fArpq zMH4#fMhKon@83sp8)MDuGPM_0unDavOqJuF>0$I z;=^mW?f*Tfvmw~fi~QpLF(g7mOxkYixE{t8JcN3hRb;95VX)+Rdpv634LWsW=2SNs zUt~GFwd;Izp?Qj7G#AhF^}5&T##PYH+bWOnVA{LiolFarQ+f~(C_@wIi>Gz|zYN2k zq@I<4H|m|NKxh6vmn!_b#_Jc?eI^hy4Bdp*n>zwxeq0#__jhc_&mIZW;01w3!UyBoNhh`X$`I-BYcwlQew)|Zo= zo}Qkat?GuCoBaCq>ugslcIGeuPFDg~j=*he2pkT7`t<&D>e65_z>JHFiv!n_=r3#l zu>=xwJ=os^E{fOI)})r;E!;o=7vO>0}* z#$b9`PsQe8WWCzn`W07LSeTlc>J>luuZ|-lBje+?dn}OKe^mzh`#ppcoc-y4QMLvK z23s&O$xBaJVgH#jGP)3^rFBVRLG!-YU$NHX4JP}*kV(?s9Xm~3D(RhJ%fxLuNY;>~%1D0OltW(*0;oDt)d;i#w@ z8yV@Z8JMR@OFjkw#v}f17r{t(N6Qf>B6$?#$tm?yo*Du<0^$kHaPKX%JK%Ei7NMf$ T2V#MLV}SIujP90cIzInj(U}@X literal 0 HcmV?d00001