From 2f8569f30c937a8db7c33df799ff172623040c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 12 Feb 2026 17:08:24 +0800 Subject: [PATCH] Add Registry20 GUID management and DPAPI support Introduce tools and UI to read, write, backup and restore QQ Registry20 GUIDs using Windows DPAPI. Adds a Python CLI (guid_tool.py) for local Registry20 operations and a new TypeScript package napcat-dpapi with native bindings for DPAPI. Implements Registry20Utils in the webui-backend to protect/unprotect Registry20, plus backup/restore/delete helpers. Exposes new backend API handlers and routes (get/set GUID, backups, restore, reset, restart) and integrates frontend GUIDManager component and qq_manager controller methods. Propagates QQ data path via WebUiDataRuntime (setter/getter) and wires it up in framework/shell; updates Vite alias and package.json to include the new dpapi workspace. Includes native addon binaries for win32 x64/arm64 and basic tsconfig/readme/license for the new package. --- packages/napcat-dpapi/LICENSE | 21 ++ packages/napcat-dpapi/README.md | 4 + packages/napcat-dpapi/index.ts | 65 ++++ packages/napcat-dpapi/package.json | 18 + packages/napcat-dpapi/tsconfig.json | 10 + packages/napcat-framework/napcat.ts | 1 + .../dpapi/win32-arm64/@primno+dpapi.node | Bin 0 -> 125440 bytes .../dpapi/win32-x64/@primno+dpapi.node | Bin 0 -> 137728 bytes packages/napcat-shell/base.ts | 1 + packages/napcat-shell/vite.config.ts | 1 + packages/napcat-webui-backend/package.json | 1 + .../napcat-webui-backend/src/api/QQLogin.ts | 119 +++++++ .../napcat-webui-backend/src/helper/Data.ts | 9 + .../src/router/QQLogin.ts | 21 ++ .../napcat-webui-backend/src/types/index.ts | 1 + .../napcat-webui-backend/src/utils/guid.ts | 116 +++++++ .../src/components/guid_manager.tsx | 317 ++++++++++++++++++ .../src/controllers/qq_manager.ts | 32 ++ .../src/pages/dashboard/config/login.tsx | 10 + .../src/pages/qq_login.tsx | 21 +- pnpm-lock.yaml | 9 + 21 files changed, 776 insertions(+), 1 deletion(-) create mode 100644 packages/napcat-dpapi/LICENSE create mode 100644 packages/napcat-dpapi/README.md create mode 100644 packages/napcat-dpapi/index.ts create mode 100644 packages/napcat-dpapi/package.json create mode 100644 packages/napcat-dpapi/tsconfig.json create mode 100644 packages/napcat-native/dpapi/win32-arm64/@primno+dpapi.node create mode 100644 packages/napcat-native/dpapi/win32-x64/@primno+dpapi.node create mode 100644 packages/napcat-webui-backend/src/utils/guid.ts create mode 100644 packages/napcat-webui-frontend/src/components/guid_manager.tsx diff --git a/packages/napcat-dpapi/LICENSE b/packages/napcat-dpapi/LICENSE new file mode 100644 index 00000000..cc72d92f --- /dev/null +++ b/packages/napcat-dpapi/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Xavier Monin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/napcat-dpapi/README.md b/packages/napcat-dpapi/README.md new file mode 100644 index 00000000..d7f8c6af --- /dev/null +++ b/packages/napcat-dpapi/README.md @@ -0,0 +1,4 @@ +# @primno/dpapi + +## 协议与说明 +全部遵守原仓库要求 \ No newline at end of file diff --git a/packages/napcat-dpapi/index.ts b/packages/napcat-dpapi/index.ts new file mode 100644 index 00000000..40dc29f4 --- /dev/null +++ b/packages/napcat-dpapi/index.ts @@ -0,0 +1,65 @@ +/** + * napcat-dpapi - Windows DPAPI wrapper + * + * Loads the native @primno+dpapi.node addon from the runtime + * native/dpapi/ directory using process.dlopen, consistent + * with how other native modules (ffmpeg, packet, pty) are loaded. + */ + +import { fileURLToPath } from 'node:url'; +import path, { dirname } from 'node:path'; + +export type DataProtectionScope = 'CurrentUser' | 'LocalMachine'; + +export interface DpapiBindings { + protectData (dataToEncrypt: Uint8Array, optionalEntropy: Uint8Array | null, scope: DataProtectionScope): Uint8Array; + unprotectData (encryptData: Uint8Array, optionalEntropy: Uint8Array | null, scope: DataProtectionScope): Uint8Array; +} + +let dpapiBindings: DpapiBindings | null = null; +let loadError: Error | null = null; + +function getAddonPath (): string { + // At runtime, import.meta.url resolves to dist/ directory. + // Native files are at dist/native/dpapi/{platform}-{arch}/@primno+dpapi.node + const importDir = dirname(fileURLToPath(import.meta.url)); + const platform = process.platform; // 'win32' + const arch = process.arch; // 'x64' or 'arm64' + return path.join(importDir, 'native', 'dpapi', `${platform}-${arch}`, '@primno+dpapi.node'); +} + +function loadDpapi (): DpapiBindings { + if (dpapiBindings) { + return dpapiBindings; + } + if (loadError) { + throw loadError; + } + try { + const addonPath = getAddonPath(); + const nativeModule: { exports: DpapiBindings } = { exports: {} as DpapiBindings }; + process.dlopen(nativeModule, addonPath); + dpapiBindings = nativeModule.exports; + return dpapiBindings; + } catch (e) { + loadError = e as Error; + throw new Error(`Failed to load DPAPI native addon: ${(e as Error).message}`); + } +} + +export const isPlatformSupported = process.platform === 'win32'; + +export function protectData (data: Uint8Array, optionalEntropy: Uint8Array | null, scope: DataProtectionScope): Uint8Array { + return loadDpapi().protectData(data, optionalEntropy, scope); +} + +export function unprotectData (data: Uint8Array, optionalEntropy: Uint8Array | null, scope: DataProtectionScope): Uint8Array { + return loadDpapi().unprotectData(data, optionalEntropy, scope); +} + +export const Dpapi = { + protectData, + unprotectData, +}; + +export default Dpapi; diff --git a/packages/napcat-dpapi/package.json b/packages/napcat-dpapi/package.json new file mode 100644 index 00000000..e41cebd9 --- /dev/null +++ b/packages/napcat-dpapi/package.json @@ -0,0 +1,18 @@ +{ + "name": "napcat-dpapi", + "version": "0.0.1", + "private": true, + "type": "module", + "main": "index.ts", + "exports": { + ".": { + "import": "./index.ts" + } + }, + "devDependencies": { + "@types/node": "^22.0.1" + }, + "engines": { + "node": ">=18.0.0" + } +} \ No newline at end of file diff --git a/packages/napcat-dpapi/tsconfig.json b/packages/napcat-dpapi/tsconfig.json new file mode 100644 index 00000000..b0b9beb2 --- /dev/null +++ b/packages/napcat-dpapi/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "." + }, + "include": [ + "./**/*.ts" + ] +} \ No newline at end of file diff --git a/packages/napcat-framework/napcat.ts b/packages/napcat-framework/napcat.ts index 882c64bc..5a1c1d3d 100644 --- a/packages/napcat-framework/napcat.ts +++ b/packages/napcat-framework/napcat.ts @@ -78,6 +78,7 @@ export async function NCoreInitFramework ( // 启动WebUi WebUiDataRuntime.setWorkingEnv(NapCatCoreWorkingEnv.Framework); + WebUiDataRuntime.setQQDataPath(loaderObject.core.dataPath); InitWebUi(logger, pathWrapper, logSubscription, statusHelperSubscription).then().catch(e => logger.logError(e)); // 使用 NapCatAdapterManager 统一管理协议适配器 const adapterManager = new NapCatAdapterManager(loaderObject.core, loaderObject.context, pathWrapper); diff --git a/packages/napcat-native/dpapi/win32-arm64/@primno+dpapi.node b/packages/napcat-native/dpapi/win32-arm64/@primno+dpapi.node new file mode 100644 index 0000000000000000000000000000000000000000..8edda4f3269b156972de75de06a5a57b13e1264c GIT binary patch literal 125440 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

|xaFPc?#uCH_b(X6&}{hI4^;rgi83C*fH-MRi` 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 literal 0 HcmV?d00001 diff --git a/packages/napcat-native/dpapi/win32-x64/@primno+dpapi.node b/packages/napcat-native/dpapi/win32-x64/@primno+dpapi.node new file mode 100644 index 0000000000000000000000000000000000000000..b9c3c50c2e64289528466de07d8c721afa72d31b GIT binary patch literal 137728 zcmdqKdwi6|_4vO@cF6(>&!R+wqOQ8uSiD4IH8EaxVOO4ojYI{(dLcGm@FNPsE?^Nz z+(cO(R%z8%Tie>ZZMDVL%Eej}f+WaQPyuZft<@*4wx~6NweIhIW}e+F7p!P0~Z^*^%b{*#*Ts-8ft~2OppN`#4K9^60TZq-+VwY=xit2y5T8I>+@>lF? zBC9TxdmQ+#W0rnW=rc2Mb-%|)&mxwwNo zmpxbH3aW-WiH$|B2c&8LBK{!xPmNzUH%|P+)lQS8?@m8*+5NQY)S1^_6Timgdi4*) z0@L*b&$DYl!^x{{>yHj#FpOn%PX0!W}qN`K11Wzo4{l=5^DilTmQ#nnAjk=OG8= z8&y#3|5rgX`EHeItxoPON*rriW~G^~*!fhE%Pzay87>QZ10E{XSbMEiD|9RHu@qopgSD!3(_Ms9W`5P*4ejz+vUnNVRe5{MJafGYP|Pp zY6M=YsBd*qe9$VHe)cV=yNK+f7yc`BJE*<(V0BbFbpUDaD(N2`OM7k+pwiWR7l}Mc zNA|-r)3JcxUY*Tmmzq|OJ)A(Uxf>L|)8)?s({2py*LZT7R?$8Pa{6Ok9F)!^KQU&X zVp>rKWVPA)i7=Cyl`$){$4st1F*>rxOiOUjF>@NCRNPWcZ@Wj=3hroU>z`)O#(bOanM(|un5mn5E2NQTYIJ3A(MX10m=U$y4v6%mBCE%&-!i)r0GED zM;5u(y3coIhQzGRrnOxv_>>A_);N&d6;-feP^NT0YF*}yT0^oG=co=OMoMkg65acn z4ffworC|D@fZ!);T~QsiZmNx1e+ykbG89y`rnK0VIds3skBJmonI@e`P4Pk0@#WN>8smj@VyT6&FVF8+N=#{Z z(L%p5bWD|*dLpnzp(U}99JOZm7&QY(uZofOu%xy38Ey9xh^5C@hUkyr=q1&TH&vDK z+rWYD${(CIe5x`Lnf6puf~IdbQ<3euG&p~a;ym8w|3CTvv6)I_yCW2)mehPBTQSxF z)a?K&tQ!Q}q>>YU)5^8KJ4Wzf$=$j}20Aol$`x02F#<~k2kG)_c-Rk-uz|QWPpY^y z4||al*QDcalQ@y_lJ9mMcb&vFIdNNb+{F?XbK+jmapy^#Fcc}fL&x<>oal2B_pXk6 zQQ~|Ox8I-ezi4--kV?#29krg%R`hy``?Cpu@lGO_-x4ymKm8<|?dvLvm#;E`W?Gx= zUyqdMm9P}6TNwG2efXu6_sImURQxIVZd0VD&rDtHi=}QA>InZ)s6#RHlp>uXC?~w= zR_60=)A|G^YYYuR7`H+wA%{?It!jYk+63pZbTm&Ou!xtk6gSW$sqdp`{qRdPUHdB{+do$99 zbmWBswICjV0*XW}!YbZ09rAVp$D*G|sw_Q>4bMc8Qjj>vYWoClHM`LWX{# z7L8?Up?X({6ReYC{Qg&h*~M?Wr1pG-1Q@B67}-fuTW3-7~%5rtQ3{a@Bz~pT59-WfhJ?Rl4HGC?ZCV+XEPR(`p2zLXHpXT;I^7KtufKD>`ntX)V!ngr@C6DAJ^d zY0?!!OSQ|?ut#~=|AICYE%`O+oT&z-;=LCnixAH-7b;r16m}r5!*u$_e0ml`1au?v z)b9Qd%}dU$RQfD5QLsi+^Vw0=r6H*513%ag4IdzAo!LCdOc^z=pj&wtp)};PmgpaGD`49Cs~aGW5hguC4Mw2jW?%GZG*I!?@qpZR8#tAa=VI8Fz~3X z{TTe=@p^E#NOp}$r9gws%x@JkKjmTn^5cCc=G*^L6Z7G1Ib?1PD`YCIJ81Xlz#?0?Jx75-R&l0uz~-czdR->WI5h}F;dc%^4WldeD+gCptEWt%VpXM z=)odp2bigeuVs$X0ye0i4;JWy6m)7$MP8$Q+YMi2yD@YCat$#m0NXUc+e~Y1PF|gK zoJRUCjr3(ard)khmuR@iMLLix+o;PPBaqD05JVs%@j{v;I2frD{h6Qh4qlLHjUTFE z8Msx3h4*tu%c!I)CQF~w<+t&$|MHO z(eN7{RSloZ!#-XbzF+V`|x&Gf)(!*KD;< z**{(A(?9VtmVo)C_(}huRsBnGrP%gDTHli8844Qwq}F}`At7pLb!f$48RvAxSEX^R zS*$(Titk{B6!KY4QiC<#8?!`?u;MjSe+ul7{MPx3N*{AFK1Li>T%@YlrmMKMzlw5Q z#rEIyS5f1X#Ll9s5cM}#OSWR7lPZfc!w0?Qs(qG4Dz*2ov*)o$7XEKb65_hKlOb~W1126J>GZ%^sucs}_TI@u}xkWQYMPrhrP((`rlS^4Ctl3eh& z!s}9Wl#7a4e}SZ?qNa>Or;esBt&F0zMAMhO7Xseusl0>N_vloRX>Y##>+S< z90;;hm$pA6vpczFYQYK!-2gG*7BiBvQswPOXyn>{bh5Cj|6)EmR^)pKlP%hlBi~0W z`M$P9D#UnZcP~&KJ&1hyRVGh=OX_ifq)>6tw4H!&z!-gHF)CStoxbpFEjlwJ!dpg86rWxd)=j(F4RV*|dsd793`j z&r}bB$X*eSqPZDW%)RSHeX16DTdmp=%06#eL2ss5nPeyT6Tm^nV>sq^hac$i*c-KW ztdwD8Xzb<@vfSAnqrc48nypdCj$>^yQn~K8RVj`pl=q&cNS7wH$jtI&!U9zuLItD493d2!f_{ zBgV|z17?h$#)kB{heeSe$>$8Se%qX|X>F8p&-aQdT5r#(G1KmogoD;^F^y3>%=EY- zL`A|~lg%`kt$UR<_FPP`Cz|!0#+|fE3Lf&;f-;MG(_?>d1eHVYZ5FX+dhUs4 z^6g!iu=ZrU_Dhmx?TMup_!`m|7MZE5nYNqFlni>7kH^HV|-wSct z6XjR_)L32?n(#SDZLnS!q+;q7ypGM`HJU#8Fw=Tbp;pkT&>OREt5kT6igne&YYdBQ z&DgZN?n~qKHPCi2ynb)EgIB@$et2CVY1SSyb&HRtoiBJ*q`Enp%o?*}4r*Nkix5R? z!~(g|uJIJPq8OV)YuzU!SR7mX!H_-9LH1B8$s8fbUe3;F9?&~(Yzzv>LD7%0JXw!H z=*p|R>>0PoAUyfD48j)q-S1EMf>O-A5IL(lgn=?72``03g&A6zsKPY-ifQ=mfr5|Z znp(vqWIVC2wZ1z;#>(=1`u99@Xi_n3;#kmBv1wreW8M#t(##Hw_g7LEQ7mE|Q#~s> zV<-z#V`y8Tg-9xNmR4f5QYC3oleCC6dYfLON%Qgz^@|SDBz&z=1hy!?-(Yzn;-CkB zdU03}|CoK5lBDLxubbL>$PDb1>GbyD(mtnJRS|VpQ5M++4kQq>diJTo<}buJY*h+O*;glRpem}T$1 z)Ju|*_i)>t_BU9MYgMw^+3S*$q_@7S#em24W`68jXqVoSVFzw2EUhEM1Rkgsc&ul3 zD}H|z`k7xap>osLY=!EhfMbDc9V%?P+P)F8MV~xQHC!SloZa8*!unhO_PO<+(UCd4 zzy2TnQ`LX8@#KCDSa8q=*l(!@{PEfC7V@ioV zuW*;JALoi6%KUklPBVZ0^hUl9f`+Kop;pp)Df%*NYxYA%wIHezeM0TErnLp$oUJ%r z_v%Jbdux?R*xCE&5e44b#!BOKNdx7Z?EnmUzr}H@?0rFLYNBWjMod;BDc}0L!oZK# zXbc4H=f4I99F;g|ckASqeDd!lS^e$bzrVcxf84)|=>~n6bwK~B^Zl#O_b;rd-Sg3p zs4i8yUr)b#=;!wIQ-%{_`(szGr*EHG*wer2PS4wS z(SWG6Cu}_VMhxn;&;W(^N0W2?B}RKqsiX$0L{}xcN$@jONl;VrQRjb<5|W47YHcLkkB`@f{1Bv^n< zMRpifkuCl3&jP-vP`7;^c*-=a$b+X*6M+QyuQ}kK(%`96S`t|S_+|azCjq_<@JC24 zX`$-DK-~jh<|rE05AqF`JJRC2Rc7i*C4yLE%t+09;ndBIvDD3zVW~#jMwH~3Y=z4Y zn)I{)!mnX6CYwgpw4XR|rU558zp=<@|GuczR9!S1UM$EHo36s%=XLKg2gZe8*u6b$ z0;tjXt5Dkis)CPLOGsx2e_;iOW78J=jaMkq_$!)?dx3PK(Yqf4f9$~gt8~}uN8mo# za|7y&uy?HkU9a;vbniS?3T@5@)PyjNq- z`oan>rvf4FTmIMZCpqvh{zCYBv1}&yxQ+I5slXxc;@t3<`_p%^1N1lnYBdObEAnGb zVa8yx_x@EJUD6HM^q+2lq72g*!%Mot|9uv_T{p5*{bx7v?Hv&#@=>lr*K9SPVwP(^ za`?8bk+g#{*c-RVPJB8o!qpx>sK3FVTmBNKywsU5->}<0gu+5Wta$!6Q>w%P_kF;9 zK2iJ}^SmMoty=9v@-bPc@5?iO`?l`mw0+tbv~NLIhw7R{V|Ln!S#?a6fH19v-V8ok z3t^b^9rlB|-0XlFlLsZ%(V%@ipsdJb0GX!Mz6|sU(5Y6$%R_10rfA_aL}5_%Rfmxh znlDA#-o)!8$?DM6V1%E=W2a_ow&MBWMXn6nGy6raCK__Rze8sH+mIAmEKr4Qqq|U6 zWc*yE@pQlCh(x3P4BcG%(a>Vg@k+O2fw|d=B|yVS-4bFG$+Yfok#>vM)9Grf2(s$m zDH?u|og(9|4{3pYCpOKfY$c?32>?{p3B<@Ap9nkl_;AIU6^vT*OxYNp61qBcRp?6b zr4Z%mwwDo$))vf}XFnkF7TS4B@4meKl=FVa$)aSa+~e}OQ{Qz`SLoa;bGaw<=RQj3 zRzO>shs=^g{^S%pMQ3Z+Vt>3-wLs-M@-Hga3#*)5rB1G8_VWd~K6*vv`fV=P>myYI znVr8W$hBGLT9nK6l*(mI462$Q*Qx)LOZ`C}#tj89ES)Qy%QYvTD^!r{I-Tq2T&|1r zxsEKzb%D;cM?7`}%_H||&#^l7mHh9N`r(hh|nhA8$Or|f9#?_e|EuGhYr!@#d} zW>v#R!GF5q&K%5@`CQ3@T)))0nsT}B&F8wRAXlr-bxtnV&G}qs7v#D^=NgvFHHKVE zY0ENuXhE*8>0JL<;q>O%Jgm%i)zuseEYlgERT(u`{OF`yPoK%<1($ylJf|xj%0b+m z&-GwIuBUab*|}W5%IBI@kn6iTS7R<$QgUT0?1~~6YZ>WFJ7!YT!XyUg!Ghshiocw! zbJ9@rZN<9BL3=uj7~S{lWH}>=F#<6bO=>P>Uvm0N`|s6zG=Ev{V8ozKDZASqs9Uo- zm+}#-{iXKVQ)yFfKc%Ka?fzpx3nBDzRR~qCtfpCZ0_9a!cbK)ou$Z?iPvdF$JjwfD zJVObUr&P$qAI|4V6UNvc^c%}n{PiibYHjeVa4Tnd7{vWf?2V0R(92$+t+Md~&keJq zqqa}2ow0O0fIHsx#xY@dPj=IajkGiL@vhEyN{lC0ckC)om-&jSvYU!wsEE+&j zmf$bZ1F=!g6^}?5bws%>rsko?KM`o5&9VC3iD4>|PO#Q@1sB!#ZsKW5edg23@QLX& zI2A+y)$)Fr9JB-yj0z1150;TFpkj@K@vlv!O`!K!pSv_YzSk#ti7J$w->x1cC!cM z*ZI@-kOpxL-N`PSU8b5RgQu+`vV=jPPIDGXlk)2$OvreSX)?kcjCSo67qY1Je$<)@ z?sha-*YId0CW^gmwK?+HhV;oN$Le>@nP}EOH>WX#Zzbzkjoe_?_s*FBv?7&DLykI- zZv}G5fqc4YVP+Q?r`jWdA?^&yH{i&a^{le9ZL$x|!CnJKqR-^11*tjm*=YS5du4H-M*y7CQwt#f6<~=htG<73G&a@1%Bf8a0v3X$a z#5XWLRVav^kSLCKa2#H6AbL)oez;(^V(ni=M@rnTcI+A9Alvrh;HkX3P_e&oS6rWlR}G*vMqjjF!hQb~b+T zKjK#n1kAtuCx2iCu<wKT%*Hn5 z4&N?eLx<-|xI~BJ68@MiTiP%~!WkW&CgIm~c&dcA>F~7@?$+TZ2|uO7S4#MIIy_mz zKh@z068^3ZH%i#j;h2OM>aZ!{Svnk+@C`Z~l<*Zge6EDY>u{}vN9*vJ5A zhfkL9F;4!M2_LG%BP70*u)|09eO!+)Yh#cYruy=gY<4DmW@o4G`j2t!O|bLaxz5)+ z0Oqh^L+=G-qHx~M3JoJ{JlDv2Fn*|n_Y#JS#NU?riXA!m?`(X4eJL_#gMG97_P$LH zVDv6$Ec#)kJ>O*_DDm!`@eqrgy;ue;C!Ur62ChnV$#;t4Rq}IK@)M4Opvfo_tLn1f zK_$p|?5B7bPj=9TD!gX5$g@|Zs<{5%k0%i9XOftbrv$R z4C;}FyiVH}?^wia4=yiCp4WnUQV`9X90 zh9UE_yq<^sm21>#oRjQzq>Yd z)vLQ!(sGww1?;7aiNcHcZC3{u@3lPt*&z&XVYwXikZmKx?Ub%;Ps;Nq33fN4TVckZ zJnw&ArO}BR`xWW>Y!d9t2VufF;S%CqbmIovTC+8{c(dI~$ar#x!mHJl`Gs!4FNs~c z6!wMQHQ66a1uIjHjE(7a{J&Y{?Y2H)c+jbgx{7P5e_?4&NAKTheR`BE+UEq(-6qg; zh%n(vPcF)MS%;RR+wMR)sBVA7X!|XhL6)^$J*D^iniu5fam~7H#o>cw{;`!YfIzmwr(Szj4RpI?9{I1}*qB@5lvXv*^xDczoL5hK-hdn`gSv${R^J0ZPscvFYWrnHpocH@=IQCBF(WlFqN{!xzr zj=BB0NOZ7r|2ij>N4Y-aH{Gb_bwxTwxHx-zdr9r* zF@93J6tUsAS_A=;#a>GmeNsfkfb5yI?3HPz$T)vegfYYJg=3KYj!eRI#kgP6Xch68 zsw1EN6(#s9{*X^k>-5{af`bWCy%7m{!JQ0R(MtQn~cMnkEbVH?n-y!djN?G)poxA*I4dI%| zZnLJ-TuI~j1N!m2)bv+n8sSc6#R<{`y54AhyoJ}xd__z(#=M2 zseQw>F4r;$feNJzg7y@;fuOx#!^^=kXnb2oLJA#XpMQgTDYeUq&AeMs-aeZoyAO8_ zCo(6$MDJ!?*er9HBb#5lg+KP%8xT*h^TU$=E=mkl{Mxke4#I=>8)`f!1SX@Yv;I)z zHVwwb3M5FAVVys_9E?a`?@~bGK9Ije7@8;*Z__vXJ69>_9{W}Th5dZ-di~xTr?mnD zf1}d1o(QFj>}jxT`$MSR>GLrAEVA=55DcA2fy_Jk4(j>ca$XrFUDnRT4IH|g^FQ`S z2wX<4s{NHjfL8Uv9_-jOiMXCX4bt|dJWq-nt8h2EW&J_(`XJJt1x$O@qjdRWB@<$0UBX5*P$#boB zawb19WyN5a_4Re3%EW}&$koR3i-%$Ntu#xXHl20@1dcor+NtnAV_TD;SK%`G|y zcp2RGN}|-ft76lOYP9G_4v$^LxEAk>yW2S9WcPt0bd^6K-*O!mno4^r*go${p0H7J zcPSldqU^lNNfLHmJ3xxH(~*jA6f3Fdw$^VvX(c1;vez&bXgAY8v|U9a!q9$?vsX+PUIe~s7@y`OLwFB{n zNC%)u?lg>yfXTi>5iO>sV7B7V1R=e0W?9^uHcRYIr77X138vT+7ldJ^7ac~;P&0kh zp-ZInd1X8@hoHqu-v?wXHk1&Z?DCrRug&b$vr^{bzGdIGRM}lT3d=72g0h-DOcbM^ z;`ctzq^~o661F-%G_ zyCspj>R*w;&!-ypSbI|wKTTX=Cd+qrAoEYyeL>bRyFHz}xLRDU^E%+p@v8Hh1{AyE z$DTJs9!GeV?fn$R)jua-VpZ1aj%oa~bJno1<++Jd4WVRDQ8?vkBA6*9ZV~}DVnWvY z5$pMgwKJ6btn~KlLg`Scw4GL2AJ8D$OM_^RvFdLFXAK5OF+h%_EK2h2!&ktlU1{?Z z>Fid@P(o*45g;L4zx(z>H6~suOhg>^K2zk9{dUG<*Js_HS9ukTbbEFX5=9J-@hm}O z)!V~n9Z9Btc6(O#C;ggW>ZoNp!;waEB!#J{Xp7nThTj~#g}rt^MMoG(44BYi#D84Z zIbDV#TFWz+a=+h|?D2Mct|KV(D&=V=6zc2r$FEBE_`5wZULhXF-z%x3JOs(z_h-R88Qvpcta|J4 zS!JfNYB%;C&nv`)j8$(OI%{kmR4`<%522}d_WDl9y4!m5r59M@1>$)nJtH}KL zdGq-4A5+pym4A;112TKCnS7md9p#H1fEBZb2|()Eb?B^tJia!a6dG}5pjMV)S{(UU z1zd&vuj#1s#Q#F$?(g8O|8GA%@G2(cfjZ`TABawScFDvoaFtSJQGj-G%&Q8$Qk2vY zIRIfyVL43|P9v&nn+Ee>AsDgB?$?H$kjsH>kaK6WAzWBkSr5?f+I)yv z^5W;zVvgJrwl4WJwC$Y;#+{K?u{G9hrZ4f!f zQlos-Qlwh%)vdp8zt*n~S&g4=dna`%lL^nM*hrk4F%FB>ml@<214tFdk35Z{9O8+; z-mYd`u^JJQv(gA5t(!uT8#XL14ya2#l-v^aQm?(mp^W|K9UMDXduIB^3DaWljv>{+ z_OkK^SYkjZxh|V=hb_~scGkADy0lyB7r#nJlJ@xfV4ZL5cc>etPDPksip_az?842xQB)YGz5 zv^loOM`zgB!;C1N)7swOB%N2L{wuj&!?fuB^U+k1AR;~_WSJlUhvu@PXlh_o-`(Pj zMSgA-?E3`8sd6b(oE~Eu;f?}^6&yrZ3*1y@UkDG0)NBn~J?-xqZLg_(Q@o+%hOF6q zg)d^QiCFJiFQ&fTluL)c4gpKfO4)P>B zht zV+TmA>9a>6hr^apvz75T+EyzZj`7CQ6*vD9dbh?@qB@~a9BFpiegX>*X`xWQSWr4}|KU zH`=2Jn(SISC_)yJ4>HMF0dBT0N52t#vp1wJWO$Y_5e#E^n^y(86E5jYBcTYC5DRbJ5@}?T;mYA z2MuF9&mSRVrtthF?~`~gH=c|vK!XZvduzC;b*75|@99= z(*0(4WV7FM?{L-|sBNazV8{m6Z^b{hbHW>>i#laxvGv;PR z@|#|lQ%S&RI}%+TLGAsr)&0NLE<}oZ-?pVLmW~Jd6^ebjgF>OSmZ;8F`Q@^W_`+;4 zbenCq1JQ34=g<;m8_HC&!*Um^p zYBCb9-$p9>pb<#MkU+RN+SPJC2`dT3=@s{7D@5+ih}m^03T%_7C&G zL@88?gZ;e;j%}vOUZ~2WPCEL5*sgBUaX5J@ogv?D`w|UHiQt@l1WnpLN5@M6(aV*d ziIy=H9dicz?AXqu*5zL0svJ;G$=wRQ_JABL>#ACNFKb46Jk{PU0c(6Mw{po=$50c? zTS;S6O$U2xY!<*-gyU!-B>INE{zNID)Preah>v4*7c;u(ItR9+DcSTF_}kuO(=Hyn zlTB|@xHs8kyOK@s5_7qCZEy!IY4oc7Ihq7W+IM-beR9%C+NU^wjC)ODcxkf+^1D#N zO3bE+HPF6~DtNf`OfyE#o*hd2mB2t+?7NA-L7ZuBSj09w z2sB&knrGd-D{(2_Bkn|l74n}VEH$~Ocuvr?LL8Lsh@WjXH@YE%p=Qa&NTg_$Eq+fK zf9B{umoGk?Y*i+X{6H;NYLhH;mVQ8gl50$nLuU4kej2r}7c-32I5{)WtUDr(x#beM z2qN)8dX!ja8D`E6^=&|xV*!%Xx( zovjyKGJ5o`_#v$qG>qptsPzKrTKu@oq4xW3_5^@?U)yx~~se3r(Z_eG!XDcmx`TUgdLTZ8l5RS^u=c>)rTe8F#E83ol-IN&beH z&0lv8YRB7TUawJx`*@y3tG=t<631V&-)vmEw1>{tfXHi zWH+o+_Szx%RmwyW3-e z(UKP&F^x;U$m49qum1u3n<fOh6Fl83;o!z8z_j{k|l5-cNF7B9`N z4%Kg&xuO2hgy{9z4#8>%<&)=jx#B*{-9_2NF#rdJ;>I9{U&LCAurL_Chaf4z^-tVR$Tg zGjL%RFU4y|v5VBdbYoQsPf*+HqWg(8!Y>VAV#HyL1MR;D0hm0VdmD*VGfn0u^b9ve z85VZhsF&x@2n!I#e^g(wFJ39@z+^8lXxC&WP7o{WGDe!&qtq}2!g0cf{IrmL$9Jhl z;`>UxTyw#~)ANig_+XJHH;_{$i&iKG;$JB=Dos!N=Hs@>Y)9L=#0NDUT}O6cu*|KgvlX=h1dQSxLi>Ac`vL*l zh44zem+QQm*Z;1`?|mF%|AHyO-bbl@%9-GKpZ%Wo&?f+M+eNDErNlYABl1p52HC#> zg#8bIIthYf;UD)BUyxV0)MICr4+BkCKhJuzn;rukUTj*vX>7r(}I zoDi=D(b%~c>m8}`Tf|y>?6ai4FqKhKL9l z6u)}XGlQ8IG@@7fBhRTkHSLH+2m-q#)_gg;WS4lyrQJu!poPL#Xc)^WVXM{S(q-$% zHV+#bE!k?;zdX~cj9xu6ZLy~u8cIjA7#^O3vsOB-X1gx)k-dDZmWcF|6c*VP2zM)Dg4p ze536r60n9u)0cT|Q_ifU2K3%dT&QkAW!#81UtMVzNl(*dC2Zzfo2}PqK;q13-TW$} z?LH|iwO9nmJ50bxBkljlNes@cpezwZb zMt+vs-SYdt8Go-Df3Mxg;e!Ll|C`|38GkvOpvIqpEgb(zWT~51mKaz!&uyfm>dk%o zKx=fFLja@Qg%q%Pd7c7Bye;U20;*+H1+OPcKvO_d-)Q&$JqaAU_KQg%B4d3Z34A6; zJN}m>@QE7U90@$~?7>Lj7wX7J&;KhV@M?rH-zh&Y$j@f^d5)i@_8R$hbfrQbpzera z(I~(C=C+(v6x$LxY9bkGAqT~sh0rdNE;#n;JP+Hi z{gd5J2gGVG9q_VoaF7mMQ`nL~e@pi7z^zsLbl|In#oqg8zTf>FIFkZPKc@r1urmf) z?ud^jH|iCvzM5jzqk#^EK?dZFSlWb<_cmBqOYykGXCJd*%vz%EY66dPBm{PbYwkMb zJ1GZ^STzqvNifN^gCrL1R-JvCYUxE~4b~=cFJDFi3)96*0(&H6y|@VX2H=aa+!Xl` z6m3>4=jw>IQiSbU?+Da~0uM`(2Q%~z%+OWBjx5iHAHlMe85%MBw5XdhVAf-g5NeQ{i#TJ-szr=3bGcYu zVfW^T*+aqj(ZnM1ef#R;WdXSxbdfQ|+s{ z<3m@II9jSmR2G1r!;ZRuZhKZh&C{T9nLd|uI6{AOYwha^$PH1}dNbKn>$1N}Us!Wg zaHEkuBp_j+2cU&Je7GQ&KScI*fdE&w#16(Ud)jqH!?it@^Nc|K;e?TM?&>$ zjeEq;?s}6LXD7zEM@+hA$wl5s&6~PXm6~dJKyuL2r6R=MqS@%JKLc*7T-axYTYagB z&;ETzCet`fjvZKqE{0QaN{&Ow_Jg?uBE#0nzRc)(Hln!7bF% zV&7Ayywv=m>_#&Q2zR9Yy@k((vTMTi*DZ}t$723K?`^Ca7PpJL5_pSQ*Q#U4avXVT z)OrEq;pD}T2hT=O^RP4oFQ$jdO(=-fv{X0uO4L}b_@1!`uX zdc>@TMIp=&_46@4+|A6jN>88#$DDU8OLF55wrdz$zbih({*Fw*=J9^|lsMKJ6X>*y zAK|u)o#arvz?FsBo>$J?Fape2;0Su z#O)F-OhFEU2@gH|4RDdxxad(hKvoF@lpSGspD8xUpbL$wmj75vFfXv)msme`A!sdg zo>1oOvs<1PC``d0@T(Cf=oMR7gVimV0=w!kxy%!Q`0WKAX4FX{@RM_~o!r3a;L5te z{_{qnTGt3~>F29lYX5tz73*!EP(Zrj5&J_H!mJGa^Wi=6UIJg=V6Qum)r`GOgczRx z_Hz=z2XiX^8&&qBDsip+vX8V6KYNsO=2Gpui-eRd&))ClSQ@1E$K8TCIWX{ZrC&R& z3*ok=FYYKJiCKx4V`2PFPTJsbaU)Y++)2sn~k3oZRV=YlFPjP`wK&UTCdz-Ic zI<(}O=j{EN=XH`ae>coCC`s+&W(M=zt>!Frqo@>XS=j2ftC?Rg&qoemo{Q=u9R{a2 z01#O!ypvn`=eGc2DqM0*rDBG#v_*26*WU_pL!#0LC?66a^(RVOLIU|>#80EP* zP-GXJV}G4kVUsaymz;~3VK#eXC9i`%%-Jv4Kl3V9dAjD4q3mV~EyOpG=8(m2?;ZyI z!8oOT;reR>(~S0Om?4=7i`)0mOp!SpS(uAHCOngwc@VZKxTbHyHWz8OnU3_tfQXSC zmZ>g|v^TTJj9K$r8srum{Ic%KW}Tfu6F(xgiNAQszI*r$?BQeL&20?+w|u$%%FoRw z3<7xmY^Okuri1Q~#Z{|P$)o^`Z)$x*hjGVHm^Z8HVEke^m5f4P$1MyZ+-239Iai2m z_E{}Y3wGdx-{n_Ro1!oddVnf=4IkXDc&K~{1iG`|hAi#l-c_>>Hpm6y4eAc_hahCJP{$bNT-&~wG`xrz-gvOneQ{04hh0x_bUcWq( zbA7J(72-C0?@JQB!yYXSshjMJM_SKUTRG>op0BoczGk9=*HS2EZ484Jkfe^vgQb_k z2#+f8tfj@3T#UdRX}?d^6!8iL!PQyzYt`tx#Oo3muA2a-ibX`H(UAZ8PrvLx z!_g?}^;*D4o*|ILQtc>7O9F~#s40}wlsKPrfTlD7P3b=6Bc!#Zwm=Ig3<*#8Gl2q) z3CK^|OGS0`4mbCdL;a*0k;mh};6VNU6!xyNPEbTMj5Uas^`xjS<`h z^(58%kSu$uH0m!`3q1`xlwB)}F2P8+{t2~uGVa)=79DvR8H46WBl! zdfQLtP7CxPaAounxQno->or7Gj_UTJd945zTW`qVhY87@qBMGj(Cl2J?VCc1ZzF}m z*3Xxb9JZd8C5I-!uL}Vl@`4oFVXr2WBEYaifaf{{c&1{FYO58HY#k{oR8+@Y74GM- zscNpF5c)BEW{F_KRH60b5_XKjAgB z)JGmMlFLAX6GCz9?IPf5t(x0f{*{$}Lc>L7|ixKs+>MJEN(f z7g^9$-|&cW$5ch}7+=v>hjf9F)-^)M{Zx;>YG1{sQO*{CkAtt@mzE7Af6XiSPny;{ z+#ykSx!Y(H9n);S)otJXs$ifeRBKDL+z;K1%C4wc*Jh8Mt|tUVWEzQh1#rtKR&K*ikr+M4w6~oV&ufD z%@M%6qgWxEvaOw69vOytgw=F2lIB{a1)F|wYkFT5JCG$?XkxAj3%nrUK4paM=M&X4fEm>A9Xd2u% zz#BisOm@4a-p@jUN{=8Fe1b}X3ZJE)htHtwd6;4vZ&aw{!VB4R)pn@^Xt4#I-VHSbw?eq9Guq}6m;95uU>BX~W}Sm07BL0N%Ek_{hSpg1v~PfA7h}(xjuqINpTV|1*}HBl+sb zQ9{|!t?^YE7X55O0C%Ika4Y@{AFI}sxe}vtt(K+v%wfrSYFVC@%axkPsb#r8mqYqx z-0?IetPD*A@ZC&V>jI*cUy;_}|>vhE^+G_-yH6E>;W%|Y5SjpCS z(0Fo*x>FcU5q0PR;9x_QMK|V1F||GRi3m#4~$DpKL<)IA zq@zTwb>IMi2r0L?O;v%ij#Q_tJrb2u&A*&ekq<`*9E-FYs`fdxzjvxg?t{+3+}DV9 zq8>&qC`V?a9bwsEPhcG-+F%FmuIUS{5aJ1~6zZv)5loEKYsUET;kpv2hg)b8hS@q# zQ_qla-Qf7ZzEZ!@{sBYB9tZStgbeE(Ci!aw%;rhhr_P%^k2*>w7RZJ=M>f!>Z!%!Pmu8kpW}_n}uoR*Kd{)1+3M<*4z$R5kO{ZT|?@ zZ!*$TD1==Aa9COFg@Yl=uM#C)4ddSKP-PuaUjnKenF!bS80mqM-x^ny`K7YmyeL-( zoVW$rW%!Z(Xv1lB&UCxYwz#W~S)TxhL48MovqZlcOqa~Op>>|7$*WD4hIKQ%kmTv= z&arU^kmL>pd?Tc!4C|P2AW60M(N=edB-iIj601(O;)V@5lH8)pJ0#idzyW|J$@P$= zRG~?dvi4NW*bYfP6lfs{_Z&Y|3Bk`|MWEczaXt5(3{m!;hN(?-O7V*c0&0;4#hlR! ztyEi$(mq$3rx(D4{Pt;Vf}jyDL%uoo7T7^@O)!7PNZk`=rZ}=LcAk)LQHbSHh%J8{ zMTdsi1_%Yisi;{usw^I1*S{=UvIQGW5B4KIDOf;{2erzg%_N(G+*1i+%mt(Loz_pp)wtWh+pk4w?K0CpkLcFxPv)=7K2+s5XPBuas*#};vfxrvFBUNEKgoG9 zd=xZgYd)KqD>vJ#(l5S(v}_8JMYkIPE2|^Uii!z!lfCgpVb2;e*HiiNA*r-3c3T58 z<+1cdyk1yoUFMe0tUQIKIgCC=!&wc+&?$mBz8(|ZLM+^Hgbntc+p<{6VP<&Hf6_6<1CBC<0=okjYwY;-3@6d5(KIJ`>BV z8vhvu3U-&;XUiFJ<+g4SoMo;gXiB3%bwgTQi?o(sdLRzXRVg`Y!l6|f6;ocXb=t7t_%!4A5d))N~}y8oFYkC=&-%`@-ji ze%}1=^wUm-{q$49oBbBzD<<^wSCM0>xmETH1Zcb9p0?Z1^6Id9A*0qcLMTuY*SpFk zD)t{w&|A@*f92#vc4jsU%U293g#RWtXK2QcTeLU47*X5EAxN(GlT!hGokj5z`#I}D zj}Ne*9HEw|eVxVeA)Gnm;G?r-^#j2DWdH=!YP2}Uo+#j|9_w4UL3g7ZrK7NbVIj-5)hPDbV9Y^p@BJiGz8b4* z?)2t9{ZOYjgJy`cmD}DaSuNEHh#dUHl~Rxsk{mr&M?ViNEP9L-OP3W(%f7Ipee>2j zvLa@2MsG(b>31m)(@@>O#5E!Da1X7JMMq);PGkPi$PRIH_wmuBs%TxPDlwp&L;DOh zxocGJ#K|EmO1_@t-r_laE?BH~C5GES$F$QO3`$m|edtok!H8ujdV$h^o%4@-8mvzH z1~`(n15a45J(a?#xpSc_<+)3NDP3V^XU?t~3wU!pO0Qh2BNpc;cjK7LJ^J>KH|3{0 z{8d~ld)H8B8G7{INX|Sa<<= z$EMx8t#gY+yRaA!>(kvwZ?Bu|Jg^ zIR|hKh+Pn;fxIL!8c1k`AYSpB9(xEYGnwPBlAd8{_A`BzpL2z$FrXR22dYHQ(B?pI z8NIfBhz7^O-$M`we>xrafP#gA{^s2YhEU!dw=ZWt|NU6zv;CU^h0!+2c$#+K2I_(>PjwchU#D&sJ?Yt|So-FM zlIOeF@tcfb*E@d6Vn)n5U+?&ZoM?9Z&LSu~ey8$u*phu5VMf|auJy{k>kKw-u_cRs z0v|H?l8*4Qx=X$B3(RJ8$CAVJTt)9}yd|5J1J_y&Vae!q?kG(I@A>G32 ztDZ{4Vf^QuN`DL*4+q@Mv}}Tt!7u)+knOYb8Aa#QGzoSWm-d&@>bI!g(q>VfmhzOb zt>t4*#vQWYiPhg8m~7m6DnW5BM^Oi=9cPC@{4jXMBiQiGLgRJp%2kM8j!){fty5&Z zJ(>d6XpB+#l}IsKS*=>h0fZQxc$kVqtmbHQqq;xH+Cv}0Y9kv@Sq!k8$#fhec-h3u zP8OL9*0rzW{A-Vlbx@r^Z2?evOmQeRARUq`;btEeZC+=V49OAq3-*~LP zWMl7xC_lCvoxqt3dl8iCu*(u9h{gVR_iy0_RZj$VQwZTE^j)YX*)Oq`%3XL!e`qUj zM-vky{#4xc#^N2Cx0A?H8E6z*nf#bXSS9s!3VU+i?RRNM{f-64hv9aT6SoB0O))MB z>CcoUQ^wc-zMOZNRoM4(OpIl#SC+%8Ib>^i(E;Ppd7*-cUl;1)ieDG4nv z%C4>FtnQLqWk{gj#?WFgHLd?}nLj@cU3Mdz+p-68uyNoTS&YCZEokHv^itXOYaWkz zajj;xN80oIqco?TCJ_$1=7u*jT`{U1r~O~S#o^w^X1Shs?XddOZvQ<_@k%NQ@`b`2 ztm8EQHvZ)(JBR#_jPLU?PMP-~h~7_tcj$xDSfo?M$=6G8O9{!H38}Hea`Pg&wA7X^h z<666ee=G{s|0gkk+lWI?76sehi+dt%eTgH4+cb%y{Gu#AIQuleR88{?yIsuMYTJ&puUzsLdXoH17Gp5iR%(1UYs1Bzrv(|Q>N zfnnhj+}>z?qj%06v+iQ=oLl+Aj+bwHMMsYHnj=?p%4Gg2Yz`I6=hpnu`b)gC`RW{+ zhcv#*K9ZJ8o2#;2X5AR?oHsM4gsh#0uT*ERYxK_Mz(PLzyO>4fwJN*bthJ<4UW^}VN^B?qszAv*;<=p7 z4QTt+xwMQ^D#u@E=5LZqi3)Glo4%O?`1Q^%UCH{2Ya?^#g*aT5u9$Dh4M!c={J+ot z=TYZPLu3>=t%+V z$yRJ$&Z!zM(%^EcR}!zOvn6?5v4GDOc(nTE-jwrxbUnN$xk*Sfs*V*#t+wpaK(T9S z6z4j1tEl*VxBrsnH1N$x61E%1=)&ApG0TeGbwROI6b;lzOC4_vbjd-6Jzo<9(v4^Qy0)t$(c z#~^ZVuJzb??9U(U~IptfoDWRI zJTSqVoDTEIS*&@-YIov~NkqWWr&!MmyLmBgI^r z*HfHQFKfqCV*FEw?od+tM>Hnu(B~t@lf_X^+8R%CP%QXNa?kKc+VrPKJrgm;^rXl7 zqcF-n!$Vf5G3L3Eoe2*La$-F;>vyY?=M7iwK1GfJ9bq4JIJaTB4wK>f9u&5M;asT4 zjGn$Op3zGh$nHL)X`W`@i4U?Iy zlOak3xzCt=qLzg|ab&Abl$%NJp03%tc8sqm!?`^+hG<8%z3NCNncASkDqEVZ_%?-v zPcv4G-IcldV~@pYRrl8?>aM<0)U-~ofuQ)vW?!N{Tk(r!%4@DVSUXP+#HQwX*N)b; z%|rUL1d|G*`3iSq9nV%AD;27W#E6jB^c>tuUAkj(>R2u?s{OhzQJJkchq{<&sVQFR zQMTe`-lbpM4v}_ql2g%3o>+vAb-UGFhv`QHKB0BK7KkWEV6U0(tf$*|F<>FCk^X?& z(>R9dvCALR*H+?arSFQg-%i8Kg&BX_(sFA&{{63eyjt_obetJ^w+?6%bM18j;c)6~_ zl|1jKZFGEXWDEao{_p1h9&X%+dz>|ci&i6ck=!4&1B7)5!m4omsg{7>9!n2e=G(;y zF0hMqBp+6@pat*6xM5xOE(qzcKl~J<)?|On{5>l2Un=rd6^T2%-kW1C&p?57cw6DR z5+$}5RZ}L}RMwZWxEv%hj6pem*!Vux!N0BE#XAP5HYm!LVEqk4C}JX&(ku zPZ`CjX1e^SJ6P-lfS3mmv*3iD2>t`Hnk{VKzJ5V;+j9-VTiGhlJnXE{aS4?EU!r*q zSC0#Y_~jBzrT=h0?!CfJlIp9-@U{cf)pr*5FXZqrc%gG?>nV>Zt*Ue-ql!)%Qbxs9 zhjSBoh%cVlPl8A8JAYJq*`uO`EpqAddqgRLrEse3jqo7*e4sFG!5AveW_$W#fo|O2 zm0L~cq`#JRN`9rvi&~+ZT#VLP=-+RKi`B;R963#nQ-dbcI%<21Oxhjhw)JFql?-~T zMJd4!fPLCSu4^@ziWhDI%+1jep9~g*FfNv zXmXDyF^Ib|JOFkn(05iRxNv4YrR*^C%c~Me}f?om_9dfKfBre@I3(74Pz74PmC28*DMlADCWGC`s!>iJ!&@3#c<_ZmL2H7EPHrzrHsyy z*}mk;Jp^1zDE*wk+DH}Mi(rI{*gX9_ck@I|kL*#}cPjD%U)<&R&Xl=_@{EZ;F*f`*kt$36!3OjJdR5mLG6U=>hvB^RyjGRbUG~kaV7!esQ!bh;e zB{?cSTQSMOlZfGwP^`*x+*7 zN@7{CDk>+A~Q2d(OF!&%J+KK1|l$Yp>^Tt@T^K*ZM8erCOJ}8uwit{<3l3@sY~r zHIY)OwV?VUP!gY$1G$x@c@LdfyV*(>r#hwfytR(2=>ZL9%6=@>hy5gq5wL~hi}g;42FLogmQ zWk*m#*{fx9)bq~}CPn@oix?E4+PsO7rQp}#-tG`@ryFfM9ks5fI>F>zoDlT1%|ANm zSf`+3?FRcObZ?dO#Ln4AYiQHna;ic!Px>YZOi{RX29FI>fofWQYV87ryvTaVid9?n zd$H>hLq_YJa*B+Px%PIPL$Asu2JIl*=+BRpr?ajQWEC4zDFNMfdaKWiI56{N)fyZu z^|DmGir``9@@~*6rcV&;!)Y6A2V_*aSsC^FChH3(wJj|gVtt3k#P2AKRadQ3j-4)y z=R(76QRQ-^FI}v45IP2@;n|U4X28o($HqLf2(R4E-|;tzf?!59)xy4SuwFv;ZFVzj zM{>BO+Bz^qYUUK+;%e)2p3Q?vCzSdMnzKj)JMu|XKN{f|T z#EbP@pCbOGo&_n&g&s;3c%6L?J3}hKU)4+;10a>H@b&WJeN;XteC1$wRI5nKUb`l zgHps&Smm8a-7e6GMz zKCY_MzKS#7rs{8Izi-t>ddFbPE+vKa6yMQa79AxoFQ^x@Xt=ywEIG}h9G;m>)d?T( z8xwzJ)qpR)jTX6Vu%ZAqS&$%{`-B+z2{DJv3z>_3XvVZhWylaY)dB;9d?KHjVB2&$ z7u2!r#r0f|QFX46>RUF6cDf4Id<$aeDZsktfa`9dYDk9RHfch5r7@G7;J~5U_PLiq z;v!QHe-^~BB~}G7W1YD~m}ci_$~H{AUkeYQ?!m4B%U{p=Y4{ljU(pt|ZP`c;k z@Sl|nynSK`Z*EQg#t=2UVnoiSkCe3ulUK@u)D4LZo_-MHN&AV*5Dvw}HWF6K1f|cJ z2A%qGb+BV{x9sb|_+%_hCR>{BKnV>gG_#hQ5o_aiDfBghh+=SaI~QH-`=M+x~ZcW<<*Sm#ZVY@Bx~J%h}hc+qi0SkK7d$BRyt z=O=hhJB*T)GXJcnmvuFm-Ms#d|06Q)nH&RXLu{A1gk&Y|UaR=s0x>*tz9or)>>3%~y{Xm4w@uHg$ z1}C!55Z*`N-~lJGR{Qx*TQDG#QPMQ83lGOt;VQB4XSKGS)B81EGFq29Ohn8g20Teh z)@$5yvHjQ$P<73wTwK(Z3I-cs{ooGxh%7}vqSKbP%qFjVD^R!0T2J%3$GQ3%ZjlI| zVl(6q|3Z-y18leNdhdI#BrD4cL!M)e{UnuA5_fCF9<|Q(m z_V)*QH}C2z{Z%h(r=Bpvy!9x z2FIuGc3l9=ENB>+Qn6@SOVj#7T+`xc4`w4)YK+5pY=sY5$4-w=cG;{{ny(R$>NLmcH17Us zWUn{^&-*c;gy%(~Oc$DD9(1R&*lo%g^uD|0x9w9;>ioD^XD79;MGhy7v)pyrH}|*i zbGPXHQ>Y#Au?c`@2U^4Ja(?|kE~iYFqx%t)e#jUe(+B$v1y$cAph0GmXKj@9wA6b@ z4fq0AR5ha9T9I@jdk3F4qiBFxR-r_UL8)7YglYWql$2A~5*ke{N zWker+lx*DB$%aMaI4mHn^$cpQEwz43BohO!m^mg;7^VDtLLXUduavjJdNq$w&9HQT zz4XDN&-|pQl5sS*e^2F0&nn%+9kIZ_gvvmLj^d-!S|a6{WHy6ytRM8g%(QOkeW|mq z=zW=GP3?U#tckrZ)2+(hmxa~|nU`3jbor>>_f}wFIe3@xu|WW+0l}NXl876dc%TQk z{7XgF5J{)K8ZMf4O6xFECDDgit3{t&A?s_sSV~?pR?rG)tWbPR4#PSChV|CxI;m7? zdaWQen?=t{4o&eF~kgCy(+>}^cE7?@CYWNTbjtMA0%EE zBTmbxCRyweoo}0V3i=9|w9Uq% z2~uq_CB>W-QhHBHT|rl3eV~D*Zt8;w%1S2s&_QO=!OK(^Ap;FEM~gn;Jxz`F?oZBp zDPHDUO-^{Y)&nndMz7|g#eC~AHJ2Q8T1)rsJuU9MO6Qqs=C=0BH%;fe<;eL==Wm#` zht@Sh=V>gZ%beRetghKQ&tY|K2i?;~8;tj&NewOsHuoErOl=~I!sOvDt7MDO9T!j|DqWztKq4V zU;mh8-D%zXl_JGDAF5lW|M5lZC1X%XQ|&e_(V7Ql{V{G z`+R}E7umwt9gi+3-O=DyT4x-?GFwzunXQ#=>6x5{PY78RAfhjW=|gyW) zzbDmaMCw8{b4w%B`y>z9$(6B_^{(K&*kmZcPGj#|qhH(mTJ$}*B)GvgZWMa6Wm-9^ zc)1=uHmy{6Cv#2WEk;6g91Z?hW%53`Z%VlW!$?>;$uM8>#V;}i=mzEly-Se;TSI<+uK@#vs8YI18ft+o5`?XHmIQli?gg0qv zV05c*ZPo<;H*Dy~E z5qVB_GZY$!WOUViL}X0QZyO))zZ;)zY!ru$j}M}=OrrnoFnQ9$q?&3^qe}A?88y}-xY=!;Ag$EHb@`#gHNB6qBEvNc z#KcYLww*ZclVEGMv*0#m0Fg6(B@04OgMnwmlj8SXm1rfvtQyr7lJqvr}Dz{Weu;TSvbOw$Y)8!26 z3+(T-jDzhcK+M{i7skpeYaP2px*hWDi9BDmE*QHe%UUY6_G$I(Oe<)$H2GR0WL0a= z7fg-m88d#=3jHPAK*8~DuWY!leD^Y6#-+Fj=<%;1=IC^gGYvbD(tE2XoE+J!I8_X7 z4aY}vE4Rm*kJX*6EX6Efme3}1XhZJ_r}o~k6$gQAm6`;v)S53@585AB$wV^e7yIK2^FuZBF(F_rix==nh0pv)+{m?# z5>TLc$+Ln`?jq6!QBE>q7a*@~brTjRuL)J0ozb8zm6^qT9}AAbh4{4ixU&uO4ctFk zCSDO0U`IB2MAU-Yrr^r%!eL5O(oCnKR(Dboa=yKC}QV%n=70te<_x z^Vx__vfL!#p6KJ3=Zrgj!l?@ia1__d-MQ^^+2b}@cd0eY*mOkR^)JuyHTIkvL9ILm zj=C#cQfrE8ScsTSRu2^>u$9R2HCm?&esAnKbwOd!F74^;xenj*wMGRde6>4RXueg` zNxNrj?dVTJCwx@(n(~%uZEAp2;#q9?AVctV1$8Qarpuq1@~6(<66V0~Z#fqyrcDc1 zCk}8r%qWbE@K;A#gv-Z%&Nl4wo9mL*)*6JJz<<=?-?fwHWXa)Q0;25mV@1Of69YTz z$7(>ZoD=M`tW|H}G{=qP4%@qRLi(K%6JR6sfU7yBFKqq^@;A5ot7*90Iwgm*z7p!L zJ%NQAD2T%p!HV%^1`|knA9)%etsq>*56l|rexUDmg zm>Kn5f@e}Cb;}f8GKNyE7XFx7C`!#~5RaSZ7kaC2E)U10lH}cKQbH9@nX2rn*Tgtf z3KmjgYY_ztDG`3WAJx~Fj8F!|Lhr$X(p_ZB>QeVQh7%n0s6ZBe*`LNiE12{c$O16m zDkslOg~n9L78*_Showq>)vTI-Z9>K|@fcu{jb|3=XqQMYs76%!v=8a096%&uCLY)3 zWLa^}2nq_Q^rkmUTUZ{qf)p#TQ(Ox6Nbv}hs(w|uB zf*9O_6%3Y1qm=~lQ82qzTskIms3#&)y@$)B=laI7JKRC@{a$%qhMo7S>)y7)(HDL$ zDm@4oGvAhPv&}GX#PHWFIuXHwHWG#9nk}PojkdTCn4OsBEaA#W*AR|d8JxwEt1jir zOP`zfN`2L(*UP(?_v!koOK%-h5p24TLg*&t(%qZ61cPB+1c(? zVtLW%_8AUQH@K|TD87X0nJ#3rC~=j%z-zw6d}MmMt-?)cT*k%`n`cG8J{TF=;atKq zZ}9k)Q3P8h(XS6ghIKffcQZHRQ}Y_W_)kPEr}GIH&lRmu zBQ7zC;zG<8e}1LWl#*Gn$RbUl0IgyxDY&R=&GIH0?3U(1XUghs+Alp^^nM?~>>;?I zQK&WCW+^R(^C2%~DSBiMvS}eW_nE<5*a%t8az<}@(>~ePUCnZ5jI6ck`1@*-_3COK zPZU{%K6qZLZOKlxLc??Y%~$y0yo1&xpIe`& zbAGpI_m=0dkNwk}k}E4(?j5Y;;IZ=P^c=-f?Xo#^PKYf*grA+nh~5Aqk%Pi>$mJIc zk%t71RqIH>jux21U{tCVz=PW=J^PR>%vk|f|6I$kS$T3ec=5O^YByJarSd|U=g@LMUT zeg(hDXdZ^&(sqG!kgn)E<@JGyC&a%uQ$YIQU(VqO{D-69v^>0<8?0x9aW~_SQl)rP zQyM;>$D6Be@j6KC>T(iV*L*C=6dUG(^!*dBtntJ<(p__z4R6=C83xH%VrbLp67EzV941GknI2UdX)P7 zTk0`49fxz9E!H`J1HRDghBhB%{YsqTnj35+_z)U&n1v32AV+$g*6~mQY53?9RAz@* zTR1wz*h0h2K3Nra4m_XLi5kXfT|_zBBS<MUl9CrSU-ir zV9$L-qkCDpo@2u2iI(Viy>U2X;}{O|+cOc6K)91a;Bt-vCrsPjIx9V9dr;U3 zOF4`bNJ7p)LF9YcGdTBe`QBC5J0F)fPW(Q4jI2lq{mAQHYKRpDh@if^q`r93Q!)}U zXSGDeijE_&79w>9nUCcePoICu7UfRLx{KAb);XHU>^^!E>vR&MBkd9O0MfuH<|Z3u z6@qObEub5fyhryj9Ap_H9Pu`@N09Kvj72Cu_A~@@ ze)Ef<`BMDm?3!v<^9A(B@AwMZr4su{=iFpd%2J4YEFWCYqB0!4NTcy#M641d@9Bx0 z2s@o?#C|ErGCtv*Qp#(d;LFB=uFM7}aF%xy|M#>5Yw7ER=a-O)r*c&O(U zxkRu%c|1_`{fsGwTEJN;50DkkW94B04}*CyVs}YDxuPu@yDdL)6ysMj=9){gG1LE= zngpEzmHz!&d4-V7Yin6H#hfU9oO$7UL2z6sezZ5(_I_@yV*~iqS3NR(UiEjf!!_)D zIkNfrJ*^AM0=RARHSL$JeBKD(@&SIw%eZqov()c+!%j1Qhin$rqasj&ZTU!8LKR;{ z{sa(dVbf=-vnNMC%MFi?epVDN!fOEi9CPJQbw9@#@<2bwoFfnPbIgf6geu;(ht!B) zUZ@6gT71F@u4nxtdKzLmM*NZ-fhTgOSFKk?76Li;sx^)$AqYaO8Mc}~-XzluCB%%_Fmqj+_ESRI^7{E)$e??F+PD*5j1GPcg=r;9r0 z8vU}87kfd%AFX;4y`86X!9`*Jsw(C#kH>~<%(kd?O8CrEbBGC7U~v>aQT`kk?QtYW znQf<@CGkg{T0fM)ICW?~fm863+;EZ_`^`c&%(heiNXg+(C0|1R{7e39mp^aIpEu-B z*QsY=Jsn;rdDlkY%TJ=E5ZW=`RGI_+<+NfC7DroEBYm!)tf@-TK3{lYZ&Pp8O>NLk zy-o`Kj{KP+O~pi9H+70`s#i5NIWFC}N=ezbd%PYkaU}}5dT#dsmIvP2 z{2V-Pel5go@QPn!SD=I6Ce9DQPvpd^<#@7z5=rsSJ;?jglK`!U2qujrc7AXsMTT8fqe0k@v;^tJqT2k8HIMdEUeB*#4{pL<}TO~r} z{mNCu^9mcDI)Sqg=6N`bI8c1D?J#06>TuUGSe&c`5;{nTCl7RC@S|@aEt_7)GOx9pJ3n=4EI7J&TqL zK~;x`{`eFoEw^0P(q7pCo1|P+tu&;L26Pc*I9g>0Uq%IAiDP?4 z0KtMHPM9x9CWSc32>Xd|&oq_sgmPkz<vtfI6+&Fx`w^T6gZen`Vp7 zNUUKzGS82PWLYD7LfrW*0bqNEAa0DZh6z1F4a4M^MMoPd6R~}AUzLbXhdvm~p*!`8 z?&0HdHqdM4QnD0#x)ggH#SWk#wo6TDd`Q({(H=OWis>osWG za5>)ODa zwht`ERk7YOVJn}LxennwAD&l>nb=q7s;T~k4|uNv`*#j4^qIWW@JlV`+_UT2sSI-nx9 zm&1@?(TyX!g2vGH>c)ggU2FZ@tDD%K_k@Qd`V1Ff&Al3Z0GHUU{z?MpYHV*fuD%aI z$`KF_urooj=bs8Ml`2UROP}4Yl??MO+smUpIgtTUxHowQ^iX7+Jm)9JswnIex0i$I zz`M?0PXj#U9E7SPuftm^(W$kfs*N6WxR#xvQYmxw%qEGR-jD@@o?heF)kt3O=fu`r zwGBdG%ZbvKNTISPwKh}YU$b?Rf!ny{jzy!a-ZZ_(4CMk2z_k-*%`gi=(CgUK&!-F{ zTISJ{zUk{M*o(Pu31+C&(_Z@sfp$pSqQVo39+3m(mk3%=%J=XXfPlA5~{?g`!ub z{kF1&s^POH3n>+rk}gV@7(iwcsH{f4J4vK#J=LWWv{anf(gqs+gvoPKYhYsWjC>J2zM zK5-%I6-GHe@q6;X_)ok|9tQAG%R`{*6OjrP_~Nw=>to2P6^40^#0+H>U3N-($f~-H zEw36J#?)7DtGl8TbjkO(;(>JX>p=_7^0|KV&v~cUnzK1sfc7jH{a!vF@*|g6MXy6H zdW+c^#aF)DI)F>Z4sWrbM@eu7HQl#Vy1FAb=zy~=x<|dKjw?YgT^5F+E}tpfTAYLp za;`pE#(O|APq#qzL7%a?gHA|Gl~7aMTS^_ntQIOYrxy$Vveq)EuvZr7=cPPL2R5q? zY^aUR&X*i(tji@wh&CI=$!Da3{P=|q>u8GC6-`|OwA4N#awCN3npf^O|Karv*1+Se za{!BHRjus+8C-1!hpjN%+N`1{vcngdZDo!LIT7ccHuw+Mb2|sk%}wPbAxI_{H*$`@ zSm!f+!&YpzNPnzsrs!4nvZ)E7M!A#oIf4!FCYMI@SxzqNeCpK8TTuZDFR8Z4d12Of zol=W+)4H#imb7lnt%9rSo!1hC;^S3ss>KgnvrzO>BQz3NVYuM33lHknBh3dT*esXCUJ*uB8u5F|U{g>Nmk52@5C$31Kk(TTezFfWeiyXS}HeSP;}xGRT!U#7b- znrEUTZna85t6+L{F4?WyGKd+6kQEz#c0}6TbiCRL->Cvf|JKb<;eQ>$&ClLvB(h98 zHAkQT`USvs0^mPqCu(TRx5^aUrn3ze6E;qE1`yx?rRz!Nc{qpf%TM$~Who%%@g zO3;q5_Ra^1wJcV%Q8OmSbL4cD0KYMk9BS;Ibjq70>9Q!82N>mD+rE5ARcrHW z3v(%}efgTQ9TQq3dCE3G-nu93;7t}oJ1uE^ucvW;cieCyo`8nc*KPJH9_~6GaB9Uv zrQEmhDB0l6L{H3>7SIDD;4rw}9v=zFd$75}_WU&;H?e2)Y#FY=eq%4TWP3sR&!N*F4I1TnN^-jO-zCJ=KE2=XAQ}kH$jrif&WH| zB`nJVr4yFR6&jw)noH-7vimW7FY>-E#^`my6VSba=#y;POydpKQ%bfcsxHLur(G(G z5CdUb)me*O|7l9En8KGDf z3OjKVjjyvCUn4Zz{3%UssKc>-$=WI+cPNCqHVa#bR~vkTS{q`HRVgNW!wH?BvYb^} z|Kxd4r}WjaUt)~tr;z3|1gBQKgX0Nf^VcvIi67I%pm_kyQ<40TXy4i?mD#?IDSF+` zm9@~QlDzZ3>Y;)sJ!A*HS41(=tx?h~(}+*Y#^<*T5X%OY^_AJl$JSm@ncZ=Ls#6Ij z+5cwAl4p4F%C1(sOaMjy3(q35IQ$NjSf{*{q46L8vr@$;bGcDx1z9*0)Sbd5f!VZ! z4oKY&r6X$)^RaYCP zsT*hFE8Alqq9M3Dz+TJQN`>cvJPjEYUxGdiwRlJWXm{VK&+Khw|Bck8#3JpNZmtE|6kK;D6& ziu0Ib1(;L1#TA@OXy&2Pry}cGm36RnxrEWBz?N<1B4CSzKvFoZ3F^yQ$bk;G5&a}P z@@J67k*L7LP*O5i$ci%8`G5%6QJxp8HHz&)6DDn0sn+&YEQzJ)@kw`vKK~nceoqoJ zDx@zpRl*hQctuvd0yFZ&_0l{|6Oa#=<<9YT`GeVPGNpH>OV7+%S2IFEE|*`I>h@=2 zxY0X1bBSQf&rHwsdwPDR-_s+d-}}zcbz|%qT4>KuNm8JvC~`7AMeR6yjolaJ~Ea4vW6~@k?EL%eOU?ju>UBTXc#$^>T!ktMK8pYi4hHU_Ch zx%3E&iVx@lCaP{?_CpI0vqi_06Vt6@+H?$}q@oXX%u_n1nwWp;m|y4^FEOv_7-V%) zvO!Fzj=5dO%p&GZ9rHaMGl!UsI%bBBSxC$p9Wz8y zGH#^&4;`5+k$TFix!%wV2XXB4!Evh7?<#V08Z=$eHXXB3#~@lM+N@)q(=juN8KBF4 zLdVn*b3mv0iNvVd`iyUU0^`G?+N6)H%vEV1>=BlsgwME+e>Vy${c z&ci*{`gyuMZ*4782*0IwKaDg+nejN9U^}nD|vM z!?c(C&5r`g{6LOZ#B1}d9AISrU8V+JaFKolip_&W6mmFxJFJKOIL$Mhrbh?^++YRsOk*=#FlytBOPwv_`rG3b?hyv2i0L(NWfLWf`$mw!MOmtal)2p;6dXw}peS z9il+mU`;wpHB>30X|2o!?OXy>aOQT!iE~9*ypfjp%~q&MpNZ1*pEDVa9-QHALpMx$ zLzoraO*K*lyT?K3g~r8h%nGtRJ*ic)tvtYQ4A^mGE zD<%e#Qyo>>udZLgueTt@63g3L`rn@rFLi81LQ8*G%cb-?Qd$`Oi6}z4~XvCf@tCnZ%khpoVl1C8}{H?5< zCne*Oy9!_tUJmYMO3Xwd@pZoIZj&*n^&FUg%T}H(gE=Xy~@wMQ0u~nI(e;`dmLoZEVQmLC-OWv`y z<}0-on_R~>N`Bf4(^ELa*OEJ=Pm3+3r`G*mQkCv!DqPOx^knY!$N%m5-wB#~8&+V* zFn@H=@h(_$9<-3CGj)rS$&s#Oy;*z$ehb*&`+PFYPlFYE4A0*AI{sCaWvOL&zL+aF z6vJwTj|p*eP{pg?RzF7oWy8ke1w)I(e1WRxz`W8G!HQ1}&u8<|pHQC$PB@t?Av);! z#I7zKEw^1Do~YQsd;veG!CO=j@_aI{1UdLdklB-J(6I1T<4H$cQDNUgW-@U<91#)o zN?7=eZ%mJGIw^&?qF<0CWFAP&A{0(VrmJD<87wkTnbmSm=$rc!AyRO7+0ewp9kH=h{$W^_eD!@OP# z`q?D;o&J^~Nof3S`ssP20=eksT1*_c`x}*SWY}`1JGRnm&|Cdk&G=7~rx9nEd(+WB zm*{Ywl7M{x`w2c4TMKcy6mj@lh6+czY%as33LJbv%Vi@us5E_g;#%UU-%72d;m0#$ z6O)J$9tshk<Uz8jz&x7T8aMC5u^5-pA(&4&d9iqf#J82Fhb1B!Z&0Yg=+BI+@ zX9eX7#ZFlda5hL(u1h?~(iB*AaianXvd78U_w#%{yZ+XRGqQ>`N`V*cDPFMJU$G8p zq-(+LlgxX5G_w!z_Gc$=q$&GzlGjS$P`%uro189h&SX%6yyPSa1|&Ta?xB^Z=ER)WH0sRTvIArcHu3WWBnUcTnKTrTAjHS#!4kT$q(<5y?@=Cm>v=?M`L z37HqSbFHk7*EQ2&_g!&27!$A}1QhKJE6NZ-Rq#8LUkyJmzbX7Ka?Or)+Qr zOUc|4-I;AvY$m}G&0@i}nNv`Q)5+7JlfBT%26Xat(A@6|1z}%r7 z3!r_%_KTfJdoiUx=#Y zwNSk>P@gBn6_lj|6ly>@w;7{bjT5+1YNCATrIRP7NoWHSx^sa;)=zY2H`c7ykKv<@ zik(6}PY0T=W+z!~61r4Qns=?13bl#fA#}8>c`JxYuHJ?*kS6z%&otiJy+v{gKKnDt zMA3-(DwN=5ayc-2A*w}4AA)jucKgiNtvfJ9pfd3h;%dHwTnHlBKm*HmgfBJ&b0qc_ zVm;lid$0L-Wg-oxIM@+*7&aa21XZqfq)5Y|mrYKrhy z4Y}~OblOidHOx2^3d{g4+wt%W+^kW+S-KV(l{`&pP%_=lvcH5!b1Ev$pqyr1LnD(X z$vrVxJ;A$VJ~^#P(*8Zk0@fY!=)+i>6ZkBYU2VQ_GGBRQsj&u3)_}rfFWWg&G$kw619pbl(a-ZLA*)C(?sxADVBXt zNP6ii&yVVOw{;aF8CEgpo)Jw^xPASP7*N>$t8K;v?D(f1xZU z)6_#oj>gr&r*ZeDZQt>q{~@FXo}49h+ON?M5l%=18oN!{<=90e;G@J=H2qJB7;GCu zR1*7y)C0upt$EN(NhRePV0Fmz5O|#(^G~%_a-B}bJy5UM!g`Mrw9KsS!n>}dK|Dhm z7JYG?oRpDEI^~Rhtyl>0Wizfw50eS^`X!cTgr`+)@ zCT+Jo7J}(7>dI(?E5$Y;dQlJZm5T;9ey^xU(9$^_Q}Wr;3f4|3 zEbz9Rq0Ulr?Z(_MknkEDHteFT$SVB(p-VU)rMaTEm8H3yXre#W3^Lm*11dn9ss^-| zkT>FgRt=KLz0dHxD#kmU;E7M6ky3%@pxSb*f1!G}i|(c3)3ho|qD5t;IFiS8p7}Xq z4>z`HCtFYcCnU9~NO4C~{xg<~+VW`>`Fm;p#GM<5vGK^@5%n%a8t-v2-!3mtL;XFnWRk767%2ON{ zkoL+PKqIX2Lv-IkbVDDB5XPNl9wHJs7r5 zpti@~MGx5e{axkBqpe5mqMj$TTT=Z{ACx0=PhfVaeG>*m;)Gy@m?+ifgI%dfOhc*n zUkK}EsN%!aFzE_U(DFtx?;OuSRBdAtj7gOg`(Y!tS|h2QnRa%j5z!4PEPlkdX+P2W zMr0%CN8s=3H%Ip$L~r59WJ%rv2xfXpZUigMn+~3%DOXBU#P)EFHd`&ULC^^ZPE}`0 z+0dr*n<+NZY$alr1d7MvnLn~Q7}fzAfn4wBh^A}+jbQ)KC>bx|z{h+^E8Vqcp7^Za za~4;`i`=aOh69*lU28hO5prLoVSy2H5o;{)VyJ$%h>gv_QX(J6Ur#O4jkW`rklfmV z%51~#gDIw9h`Be_Y)*7>>SC(t?}2a$?BcrjS_clHZhRzF@&!PQ1)dcKbH?Mo>K~Rz z3WK2eZ{Xo2CTLDAHG_q*+UG%)F-L4NZh3Be(G~rp$l1(ygKb|^;WeL`|G<7YaBpn! z{l33Jr)1gZ#Fxc+5l>HhIh0sKi#Vo!;5@!hbKLV!X_B|PCOkN`Mm#^I+Jc-+T=WUj zJJ*jypFGWM{#epXa;*&YoOglig~yJ|8kv*jOTFYXU#eIW3p^Dv1CN9%)`seF4d3ay zHx3;L7GvmM{amUVW>@vVRw-tAPK&Vzqx1^6f{S_1B_4LA7+Oy`c1Cuf!0*3-`s)J zHN>o78q|_vhPc+b-+Dq0ccAWdH46o72A;xITYabD_&mYDA}!0i(DlNTZq+|_r;u4o z$6m$RB6oYZ?)``))b|vW`*yP4SS@o0aM*_@OvOjxG)k znvm5`!enl8JpG3~s;)j%_ z4B&o91m5u(u8?`-E=0enlEIT?<99Xhr7%n>D`vdtcoSC({+h@`t~);>vT^af1(EZV z*Y1W`;NISX;@&SQ>0VVzr%#viXEH<=KZGU8Q#_?6=clkWxir^MAb6N4HFZo@L+$g4 zkD=`lJ}s$0;)r3=gwGD9rp1RHoMzsm*5ah)xo5Zd3(mu17(K7Yw4`;>c7OKd+~nml zFOi3KP+A9BddTv+jFoSBZe==4tIE+pkk;~@Ah)$%MjcG4*eYn( z%aJb*^rcFU@hU=ZC?+tK*;8`yJpuRl)!d&57~Y!*7}&Zx4D+5cX}N&n15{UX#zFcB z#qAE7H^bq{8Fn_!Bf(+Vs5BgII`H4Yp%g9De-8&&w3z|Oz~VI5vq&@7<}^fm3b-qE zN`6j5hocChtUU)~7G<&mRL--Z^2!mRfLrKidb zdaB5NQ_B_9(br^k$u1l89Go}K_3QwMR1Knn246>Z5vrTEoCaSEy$F_)0H`OA44%%p zn`E-cm7C&}NC8WB=jow}PC+s=#ETNCvj#ByoA<#6%l@rg6j}4piHVo2@WtWD@*L>BFFyFD+UxCsFobz+$8RSEc}8Uh^$n9Mm&(_F9zA$4a;k5w zuR7Zoy?%TaPhz*^8z*F2_ zD#~^L@wx;PBiE8yEhw0izl8tbM*Cn}3W~94B(4M$1yTkDlDlux9{&y~r{5!HssB=B z+pog!IKRZeldnDcYotUhBr%Va=B}MwogJ+ok82+I#DLgyURE}X+$DSi|MN6i$}!g_ zPSm_>A76X$B+60dtSU}WcZcc|ii_WkQ&m^<=RzhRdp$>WkPi4_w~xnFfq<%Nod9b% zH7IX>(o-eg_`Rv9w#2itqtcXkk%xxUyIS*uVB0rPu0m!N?wqvTzpthx(0Q?=~-2yG8j!NztD(t4K8M6(jpWGdjszW{1 zt~f%vtm)$8&(;oS(A_Vj~n+jargI+ z`?3dx@*<(Z&Cq&I7t|_2_M66W;D~_m=mBnO*qSPNqDJ7#=2f!f9MvCl@m880=-TZX zg5TA+6L&NW74A{nEH?>n;SmfmPHxd0ama*^O&+gQd?v>a%q`YPMmrHj8*oUU6$86& zkH53p8+JCHH!6IrtQ5Pfqv^3Mo`hWWXa@dO(P3W!H>-D>zY1xWfLmR`TnTP-XQ>-7 zto-t8Yaric)9zXIYzDsE`V^eR3Mx~3yKLyywrenyD3%W#%}0tJgmPoENtBuZqOus-UX>>Rz~dg~r570Pa->TK=P z61+2pWfi>z^ zGNkpGHIX{O8U=&VCBQ9WIeU4fY2HPLoDqsnTq~BZM?4^O<(KjybGbJMg5=I>Ip<^c zh=+~ZR$H#!|3dHMn~reOr$|K};iQjR_q5gd#n&PLVm=*=oF)jY(jTAfAjEf7(c|~4 zecLZY+;a?qH&rr@*=WR^ezttVpQDx?Cub-k{sc-uZEZ~H>QQ!yBR%U7`7g8(S@X~m3 zhx4s+H|wK}+zmXW&llRVx1w2`u@QddqIj+d-`b#B1d|N3L>hx9#KHF5RJ5d$v8|!B zBg)ujhU(ks4`(?JMoQ&+DnIvA^~s)yQzRI-&hK%4UIfa$B4~Do;w2vpR5CZw4l5o( z$=ue+K9?OHFGPHu(nblK7OIne@}y4xEmUYg==W+7z0I-qi|B2f)D4Lz)mN>P21x#L zu(5PPy!v95VQpa6X_?$i!ILtr*fKKbsq6Ql1~NBUtLUvligJg|cbJRk&{}l?K{S;e z8R%_Z)k&d|BG0~vdrxB{&v?9#$ELHm;efQ;a z?;yd^{L1h44U_Jwe`ES*5YuG60hc{0b5E6A?MH zYMm<^cfjwtjX_-kShqscK9rE{yN$-V9_a6 z>sG;hQBhUvo_2Tm=nm(_Boq3h!#UZ0Vp11hg|3Fe#uKGqGvj3Y%yBDi)n4b|-;);< ztoTVpq>1pg(TO*R{w*@&d2m>kbqjwnVL+1Q{Av)z#fuISq)NP%pz@JltRVgqiDyi9 zcN?xhkJ-*!Bq98#ms@Ws0;n72E7o2xEim7vE*_i0l*wjD&iAw7c~xRNSr^GH5kXPu za0+kHmBv)18yIp9`E)qv^D6&r3BD+BY|Jd9sOg@)&PwSBy>m7Hl85L-^Kk-Kvz%A4 z9^jAaq20MsUC(i0GNo zdcjPUUT{3YxrR@Gu3Z9V+Er*%QgV#2!}%mp@=rylagnV{bl$C8Mjc% zt-lit+A&VLFXpde;l7>2%=q!)3p-Y-@~5AOCw^RX$#3>JcpscO6TZ+b}@($}wpFrlTPdgqzj5K70-`t0q4 zsgQ$xKs2+y=&ELt7tId_%oW`{3E_fm?70w?#;}0v*_p_b+DZfFWoH%!9i0sUe6Aj2 z`U?G?uDJ!~#rcjk@^p+3!FaT-oUe10wVI$n=3lWW>`L2XBTQde%t1CR&5}F&(KAMD zVJWf*eQFS*ijKTx#HargKTz0sYz=T1+L?-pQhY<9uOm;EP~su}L?_-aWQFffW_C~P}cuK^JT%IUgP$paM%2Rn6P;83-l&XnHE zo~q5AxuIKV?!C@GJVx8pDqO)sbfQz;?GH0JTIOB|!d24auVwcDYyL zWdY*4L?&v{5+WiWMxBc#WuydLxsWHpA=OH{@+10f{TGy;jX^Gu0^&teBzZ|p3Kk49 zo>%!td)3uXioa7Nz7k^eTFoOG(UU!7z85k-w;qA{^_dssvfVte^&k?HCHX*(=u8lQO+FmD?cbaZiIdMOEtZABcC%{nS)J8n&sfn;fwJue16Gv^+ z?!Hjx^Xz{kLU5|>Eg_(im1f=aDs>MfA2ol3ryDtYiE$*7`dq)Hy*P5c3v zPUo-t72rsfe0_2zWksgTYnc;vmzQL^{JAPKU?s$MQZU2a1H{eBK&6Nu4?LuNX(=)y zY2;98q#`$HkE#Vsxy`lg5jx?kxpr9ibp9S4KG~?BGNEZg_4EMC=V-IGvL;lW&#`3B zqUuWSB1A}e^~-d6TLfM83}A-Vf0JqnrL{)r-Rcw5y*ml`^nzzvZmMKVy581EZ|^K7 zrro=xncf{mnbrmSgp9eyLe=;v3Y5h(46NDns@Ydhaz{Pd|X~@`q)F)BF_i$6LZ%-BuxHpH7@^MbPwtjjph@AUo>N`UxY!249Pc?^u z2qzbt9P7qy#vXsR!xbKcBp}#j;XIKsA~3Dx^1fQUnmHq3d!#NIR} zZY^bL1;AFvn9~bGp4Y&^M!sWx$g_FwV1ORon+btt?@`Lf4%l_#$FGZea+3wW zBFygb;?qwZDX{JoTuYS8^p6dn7P zwW}(X+A}$~AyU-jsh@Z24*X2?WXqvjSYQFsb?w$1vzuvmuaI*Hh`2hx z_(RZa6L(20OvLCVzrih+YvpUf=dB9Etf=JNQzM{c(ODhd>FDT?Puk0@-xt98~yW67^Jv+0q9IiXxVG9X) zoM-bke>e|k@vxw1k2CkntgIZ@vV*LGm)>7o+KOetx?ptYv7F>_2P@VED>g%Z203m` z{`ohO@tYlV_wHBebpQ6hd|+udKc8Fvc;!zWf0`OeDB+`a*lLG62#uyTDK^+-=|EL7 zZ)I)Vp!%IVYB}uGmUK=rAO3lxg6iA8)cY^}YRS^(fgI;g=_hyQ$(wnqv!DC}8zqr{ z;G;TdRYCTSmk%z@dbwwT9)UFcUp}yl_V1GR?~?ZKlJ@Vi+rP_h|E?z8{#{M~yY@fU zr~Qj}rQ0u0y8ZH`+b>VL{fl?0_DewfCFt9J*PnWH7t-x#Xs+DO7%`@myVaPU0!^Vu z)5T~O_Z`hfpg(__8o+dZc3MtYEcJ0VfkBi%mGZ|ce>f(9d-Q0~>X)LI;oP;AtJS>Yz&pJ5-R}%|!0?&v@v1J@oyG%f(Jn ztZ_TPcns@IS-P$Qrxs$!a>?LOEDJF( zE6gbLw@e?5Tt0_yBv?7MfNu?a^tTuV+&^E?5X*00VHS{gQm%Z@i%C9jF5mMcU%K2r zMM^f3PC{i*G2Wcs`d3aZ)al4wn6A~XP`$34in&}?i;-^^ty8z#_1jge*OilURq43^ zqkwC{+vTKQKA)t$3RjHaG)e)`o_$%4KzpD7{xZ0l!P!{P~WTKi_42E*;44VwUXED_OEjudgG1c_ZZz-uI{u zf8MIYU+<9cz|vTw4uAZp4u96F!(Z(nv{91LwB~TkXSWy5RN|9N;_c0_nB-gP*j$sJyZXXQ-g@CBZwhQSyfUb?A3l_Mo3HWdj*r#E{y9uA>m^6l%Pl$GBxq#D zxbFH9fBzkx{eer)=c<+Fnte$z58rX~=evSmIcT=@VnMlA3d+5{lK81!{#-I$lGRDF zIeZ8T8opT2@RfpwuTP_4=Bc#d5N!Ow5wP*X49unZ%qdywz(~I-q#PP3fy^-dO#??MiJW!S9Dh>_VfzuU% zh3jPB9M{RgI{7eNK6rzvbwo}lk~?1fLnLZKM_Tnb}V(3x9OU5 z!=rlXLsazAXlWq@M!HGq3Oih69@57HaBq4#ixM|{)84iLv?@HtwKDtM+=9q8V#b>4 z3}1qv=0Zb%jJzLwzR~^{d@glR|BL4qj7_<+vL^QMXF;oBa(5#IJc|%6AJFB`chw4( z-rE&Cp)I(qJ-i7{OwLM0JCEF+_;NQ5Nen}NBYUTJ1{{f7+zbXPVE}1rQS`=2&Mwz_ ztrZ`^JHj&9NB7lMYs8nsUS}nq*`@O+6Z+XJ@ek|gE{R{ka|S-kYrU#diQf%{SLze(wjLm6h27)K2c6hCB%N5dF&p1U zXiCaO2ZGrAw0xn>0&~n6v*>%BbwRN%Nt#Sa(ko1jnyQ^yS*@-I+RQeIzjTJyGV(Q6 zJDs0l{qhvys^X2b8m;vl!~FYC<v1kwvLlJ4X)a%W=h|H z6ELM?G|Xj>s$%?NVzVh^E?c3Bday+W1FiGWvRkK03DLSaSseiZ8vz&gppy#t>9_Yf z@iTU$cJ4X(Tidx!J{{7|4jnhkdVvQsE^{JgEc`#!>J?LI^#UpHziqXMgaq`lTC9v~ zD;pQj%nBpp3owGHZt!$r2FjbN6>rTD1#dm1$jFZcU#qFs1pg_u6d~u&?d8w43x@Fc@TlcY>Mi;xYa>oIG!^YIs{=jaL1Nw^EpN%^IZp>E)%o zUpHtUuvK#v*)Fyr%eG1$^FfQi3VmCn4eOm_`!re-|L+=|*RRpd$4R3bPEvzWsakxc zeqqp!ax27(85cAlGp_G2Nc*iK=`+!S8#4o7jUZEWVP)2me5;Vhl%XUp=_G;ytk_hg6r?yCjWKq#^0po&92Eg_r|%`i}lz)cnmh z^JBGTRjp0?WELa7iv`?zw)N`|#mr0>)7ZZlvvyYcOGCde>i#TUb8Y_*vj6E1nUW+uCCRQphH=uazWeE+m|JCU-$-l!|9}4vLSTa2HORjc z?J!-{MhEOF{|fE+Zw}~mmK|Pg$Ir3D<#zZ>JABR#x7y*yc9@mY)M zi|p_|JN%s;uCl|8cKEg(erkuX9ID-=c35tQ)pj`D4rke6qa8kBhtJsI8awQ=!?*3w zvcvs$SeUKr8)b);c6fmuUSfyW+Tl%hxWo>BWQUL1;UDa9r5&!Z!`JQbLp%J&4u|IG z`p4Pf1$KCe9oE_5ZFacO4u4{YPuSrqJ6vyvZ`+||hx_d?&z={(p%Z-hD`zPG5Yc{+@n6EF7S}yFb$9 z)*W}`^!b0+-!D5xfA=Q!`(fqT5x330;l|T$TzF&V`)fMiGn4w~s~eM}+Mjid4j0<# zo-}m2%AgKs+;;PAvlravzHwpwjdQ}^pM9HMaMu=H?xE?wd;JaW>uVCy?23&s_Od3 z_i&S&Iv^^b=BTK6K}SW!3+I4%K@%MT6|-apW)zgmGzV?;0?rO`<(UAHxrlnx#FQ`^F;f| z{P_@<_Wm9`*n?|{dsBUcdFaDEcvlauBQDdA^3X?n=m&b}^&a|I4}F{mAM3#rJi?Fn z;K?3*ss}fC@N^HJ;lXbvF6+za!Ob4_IUYREgIkHq^QFv#R}h!|a|3bNUv>}=ll|F4 zUq>8%1cSQ<;$4aRXNvyQjd(P1sZaLM=XmJLiT9%LRm3BS*AdqdZzkTIc(_rd--mbt zaT(r7TwWin#AW^4iNlNzcV!;-6~tx!UM4QbqZ;C}{_BXhqxkBH%lt5t$giv)9r4~| zpG-W8xYa|yf%pK@*AkcUHxSp6UYjM->q$J0cr@`G;{AzlAl`*|HE}sU*AfpQeLZnG zetM3V4i9_(Y>^)se>8E~zY>Vc`Y{rh7j@70J;yiC@yYZ2_8bqwsXxo{uEwMPmr?ro z@*=v-%q&xp#Vo52c(&P+od;+&6=j?9gcaHq+0DSEM`oryCl?LKBQtZpsmSim7hAIJ zg*NE}@#aaAnQ1X)<%*ag-X*#7?U}ft7oFro1$A_*F{Z!^>0`$-)&q{?!J`Mr+*^cYq19qD zLH?1&fF1Uy0nkZfVnFa11kceJr9T@Ci2WU+Vq+l=FlP$jK)~pJj4cP82eJ&L4+L5U z2mL`m03-%vFi39@1pQVBGLU&7#>MmPrmQ?mUkHoNxH!v$V-5FZMtiB%QaE3l zF(cmM=IM&;aG#s4TTpDWnYqr0l~%C8Ww#jHA8G~si?P8-V-(FNstW>mS{Tii`KIDL zyDq!1KnB%i=M@$e+jw4$*f&hJ>xZZK-Gk@aMV(_7T?!J*^8kj z%(+F@JX5wM-%?=L<(sUsoR%Ej-(*G9yUWg1S2|agj4u5@&5|*@&{}%EO2cv&o9#NA z#a?VH;LT*5kj#v!>FJYsEL7X-&o0a~EivWNFzWOl8;_$HjF;&!uIR>Fin49FR@d;r zbmMT?NXj!66}f43Cc92tO5F8{Hk+xG>Xm{d=fbIO%g!lv3(PHaNrm}V9HDj7vlhY? zL^l;5)t$oRB^cD{d|?Vn-us|uH{kNw5cwk>`~l$ps2~Ts6k6~#9vl|?TIk`0 zp%#3d2Y<+ezYJe|c2DmW4<1bUkoUv#J{DJ(WF94A-BkXhVLI}FvNNxCvamtS4DE}zLP>?T2{2w5Y=zmDqN3L0lkw{40OP-2x@8UUo3L(nhpSr7 z7e&3;l3R}pewt8AdWi`%U$=!YpJe)^3m&i5|e;N?;wFLyz*$#qs zuYq8`J_SMjHz25=0~Lt(xZzMKSU=KLEfVAC%Y@a0dkJd@_Yu|-9wa7c&D#BXAI>N(*^@I(C z4#H+aRv_}}PpBmfC)5!}6UGr52#tg?ek<`Z!V1Dl!fL`=!g|89gjWdt3q`(kgvo?P z!nEQ7mIA8+>2RH#4bO(@ImK+EEtjR4> z5T1ua4a8GyBR0iUz$RLer@hX>Yag^SsEOE!-f z!oagxDTcH01Mr3L**Sm^M=p*J5QhbgAs)yr_!loIE}|PYh|_M#&$8fnfezv?LS9#I{HTTmYB`;c%>; z4tD`qu4zyYivh=jKenuhznI60@rZP65E|1FWe0Cc7w;d16Y1yjw9rSS&zqkchuDwP-_k!3a*57Bh{q}LZ!pxU8UB{Kl?Q$B z-$1yUp$-1iIepMlSSPb&HX8Dn4}Xi`pL7;zl^8Y?>Q}f5I*%&}s|afd7eal;KrP|* z7Tr>QC!PfDA>1Npml$>CjJwtFVgkqmEE}tKi9mWrQ_^TAR>Y32O-Da|bID z`UJu5yYP9?U$P;UJjnM_UU#{C zgp>6q;*_!deSWSVAD)Xv5I5Eiwvc-YdS?QEmtP#MFvmDP;uw$v+yePF1Cudg9sH~9 zg>m4BT>zt;dw7|nzsnCk4;S(9^C4d{23M{9U3k$0ZIBBY7IQCC|NHtb;k6+8JjNjV zfQ+H_^f5j8G#3M9x5GGH1odcxv_+20P?{yJG*FxzBI7&wFHn9%}?0=3G82BX7O_(ANs%RUz2o%t;K?B-UALqnPN~vb|&; zT9#8hyJ32XHp|4^JWHZAw<8$VGro`!w z)9aRLFa?!fI5lbVcrazSrjls28Vd7rvr8d1ngmF<*z$7=_+XBX@4avJ{SQ32ref{7ht@y*$fFw`d;E!wPi}gu^6AabY}vYP z`;MK@KKJ~t7j{>@xaXypUwQSl>et_RbMISkzf<$>d++btf8c}K4?p_&;3uDcR`>ZA zUmp7E>u(MpIr{B)$G$&af8yk+(?9(9Q^U`{{QBGPfBeJI*mUOXx$_sAFJ8KQ1%4Hu zX}r9BeEr(^2LuKMw{6#68xqpvVlEzP%I4ODZlpCj}Oq*_)k(!ncUoyy;bCan5>+Ao2QUArT zLg4Q3dW5d>KJh$&b9Cr-5cd|8RS}12JMOB9Z?5y!bnbkW4|8jMa) z9Iw^r;)sU{$`XjneGRZZz6|RU=Sa~Rh~peFx(wnGf-)mPHk0Y)nK8koa zak1*in2xwg`e@<_#P!4ziN_I7BA!5;-f2f_N2i4GjR*#Jz~u689#4n79vd zIe+3yyn*!mH_;%CX5wu~@Be^kPk-X!!~=-S`PLxf(WDP19!I<_@nqudh-VOQPdtaX zmUs#A5aM!PD3rLI7wSN~ob1DhZy?^0_zvQoh*uL2CtgcDg7{(Lk;EH_cOl+Pyeo14 z2St5#BOXrt2IA4gyAzKit|OjIya(|N;ysDy5bs62gm@J3a^k&-Zy?@>_zvQIiB}Wv zN4%DJf8vLU4A4%Lw9KVK* zu8jC7;uXY46R#vbhIkcmg?J5dm3STT1mg9?6Nx*BClO~AqP*jYhZCPbJev4K;&H?$ z5l<#QnRo{ADa3P#-$=ZK_*CNM#HSJ8Kzus!9mEa9tBI!)uO&W<_+jF+i8m0xiFh+{ z3vvIoqWp`9hZD~u9!-2D@i^idx&cWh?n7M8_qHLPLHYpVIm82rmkaSh$zl@RwKUQWCX@eRZSi0>dCNW7YOF!5UAk;D%ZA4A+h zTqAE7*NgH75Z4k9B(5VKOk7Vql6V5~F~l>7Yv_hDhj;+-65@fx%ZW!4-#~l}@hajP z9gc=@|3^GP$0@5L9!R`ih9~Zj;iH5-dzi{gTuVHVxQ_T3;(FqmXc0a^h9_>2;fWii z{Xk)FmG;ETq&@KpX|EUdmC~Mgm9!^bBkf~_eVw!?UN7y5JEVP_uxF2m@&^*v64#6s zdY#l0*GqkZ&?iVeaf9UJh2AK6vfx(9rwU#sxk2y>;y%j+uOuExyo$J3#bhuKjH{IJ zy=s_YMJLzAl4)fv8)jtD;rft3ai@v1t>|zaPN1;EbsTi_VI~$`4$bF^RbB>KVTbeG z=x|*Q9j?EjE1-A_h+B!nyV+cis~G5To);aiW1uUd=i?%FD{)+9gCu^>#?Vrxl~;x@fD$2>&tKTTVqjHR>am|;d1d<8-(rACd+c|}W%}6vFh9~B`ytk! zEI;ScXk|BQj$(&-JUV|?k(_^`iX{$zaEZ?SwdJV0(Ry_s(9h4np- z?;FD!zS>mlNbmk%Y}9^(2EkO-AZ`9xcE|D?=Ft#m%BZlXED%AWx2$v z;zVb=;dzJUkonH%Aew z=OpM+!r?gL-i~5Cam6Uc73^_ycmOfJV2q-N-3sNwni)qeBUUwC?V8WqX_~X1#dtKC z&7kzfc#`BiU&KBTSN?E)8&k_5doiAjbG8d!cW}It=bIQGT>1iDe)sVK?G0}I1nVyi zd|LKzabCN|G57NziI25;JV&CRxz2yl&&E0H+r8hohm-X-0rHMc)XM~C{}b2kWas%L z>M7BgZ&6Q)&T&iBlk0pG^_1j1|B84&5#@BxhseLHoHAbqs$r3@sm}98japPDIvz+C@@}rOJ86sbE zoO%&H$vKY5dY0E!4390*GQ1o`#C;~#ha7)p{mJoGq&LM`PLW=^vmXijL}$AS`>AgE z!PIYZ?)MV*@@$jm+l_8|v^O}%5m_F2ofq*Zx|JVmXQuPK5c+W*;SC=88P5J8;+LZ) z)(6Iy=DcnTp6u2SP(RJ>x{uu8EWhhMUtH<2U${FtZ!E`sM)SM_rO{UL+#~L`UF%R% zttI_o^3V}KN?cF;MdAs>D~TJ3uOV(E{uyyA@vn%N5&wdC1@WE4D~Z2Oyo&ff;x)v- zBVI>bt`pP~KS+89@pp)`ZK6JEiOY46e#Et;e}Z^4@kPYtx=jz_38c@KdRj-*5I2xs z-Uk|q-%fff@z;pUbwIgJSWbF*{>XJeAF|&-dU=1dgZMq9m+OSS#H&d!$7#84DAyHh zNxzxw4-;QYyn(nJmz#;dM0)@2qJEzvF4sBa{bD%jSCd|@Q??-5dV;P3GsEr%Za~1d;{_Q#CH&XnRqqvuZhE*gh?kJQh&ZEl)F9&Jq+d^b z1M#iIcMyMpcr|f(eXk|{D(Mds-%DJsL&|m62GW<4K7;Z*l6W)e)^8P?e_H9X@O#11><+^n=@eI;0Bwk73yA#hL zy@_}@>Dv)6Aw5mQF&*jKlfInv4-?-&d4%WM zmh>gWt)w4K{4nWP5!X}tA;dS3y-K`+?C&MsOgv47C;Oqq{ht%^tZ2T3pY5ey)nO!|D{8N}}(UQYRoC!Rz4yNQ>OevIU#zmvF* z^m^juq<@n52I6A&4));?FD898@tMTqR*U)xC0`5lHp0;k$5!eXA_SjzJYi$@%xEq5Pynz4)GmQPw{sm zUPAf|;zrVUCSFc@F{=RUxc7_lj3xaB(%(gV2l4I1tBEfrUQ2ugAh`&XA1MzJ#Jn_e*J*C%$crEE4Cw`dtEyUyQ7v&vByn*yfiOYQ|3B;R8e;;up zg^wfd|AL6GjCc;|M-dMv{Yv8Hl;5tzqe(xHcpUKp;uU1yjd(KYGbN|=h7->q{W9Wm z-<6Jd4(YRqZ=m>ZAYMXxBk=@^KbCko={FItBz_z5!xUd%;?<TBt;EIrEWQ~doOs?f!E>uS&w^QAcW$Ot z5Ba=pq17qLb7^%)@`bdjBKaa(J&`;QX8Yaa&x4sbcaC!&?z|9YA>8?`9(tTDb=Tu; zr#qLk-7@`BxANkwroPe1fbZW3C+4N_ z4GMgl#TAcOuff>?;lz4PwzHlwFERXm5TO_AH)fdamK^he@ws!?dx&B_4gb39@vW$q zTwVv|d~iOkI*Ik51hmnSz_S?&vNEhaJgD3=Y_JJ?JV^8ev5nfTxb4-exb9S z1uyW3-|Fm_LN8b0WP11(iF^F6elF~nI{TrRm%-jI?QtFk-@b9@+0bS!xu?Emcznyq z-Cn#)iasJeS9=S-z}bF+=Q#U~;Q8<_kb8Uu&h`^}x%w#Mx4P9QmPfn`>q_71?6)F3 z&W^jsU+ke@>=qx+w_Dseu76-G!in{$TxWfX^+UPpjO)(0UME*u#X2+dlzb1lbhv5vODSzlt^ zYmxK(5bH~>{LA$p>4Q85Mh{tkVx4S}a~v1zi*i*R*Vl3VQLeV*?_1zHo$GuQ>x6Pu z9rd{WBvV6<;~@SOPONXa>&5xz(j(7z_CK)>h<}9>>%(&Qf!L4W-hae;k=&(#dQ9Kl z9^-e72Vy$3FL;hK zKZ4^Mo5BfRz(&V%^`B{`G#J>F^&KCZ8>RDQK@J0`=bq1y%TVEkPeoV(4yyCP!bl?rh-@Q)$)QrY9y(VWl zx#Q1UYGcdBIyuIJamx6xy1YPSH%Nk&MO<^82`h?njtbOeAn3|OevYdW(a&ALUvU@E zNmsGyt+|*F>!IC?5RDJNZbz(Ky#6+hDX}XN4gOEuiCA;%wR;fDD(0<5bS!-HLBz^C z0@otezw*jDM8ovV^@uF3%_E3)@9%mP(Xl194o#!#Zf;n=|$8h#BSzj{FUuNu1(G4SfBG2M}xl0OXy#}qlBaW%da?A?jHIw z`qwFIIO6VAO0D~gdh99j{X(-WgIJCILs01=MD6)%q-_dJ^W(ZBBW1041Dp5~bF z%jmu6Z}nfxQG5DFj+M8MeGC1|zFNzX{q`fr%6G@Sjs8`$DmYd?cba2OP24-&{*n7R z>SO9TR=yWe!{eWx#L@Ux9>=oaM>w+hcQ|UNH*j=}3wamqE5k=~EUU}nSg~+5N9|89 zanw)zPVjP{_t3un`GFkkUQXxecxoBPvVtuft8@oBR=j$KBediD7*6-#IDvJ!9LvsE za5QSFIo3PA=cwQByN{P+`9O|!UDE`wEENbJXGA^AIKWYV|8E=&jgP;$Fc6d$O9Ok;jqfFF4)4cEc!ly19o$)?|4Y)e`@AveY)ER z7_NTYIF1Pi=X0!#U(Hef=x&bMBVTefcsFy@b?RD+;VMEBIM$rY=2-vUJser-a~z@n zajdLt;%E)+#K-fh{81ds_T0>oomj!qaB(w7>*f6%tA1+W=y)sWBTTPs`5=zQels{$ zzFox8syxEcv7?%!?%Gj~dgZFX-0mM^_=FXS9Ia*9936RgajY7@UGO#^a;$mv7moTF z!3Qy%;hPwNlc#e`*ly*hZ(J*Q-N9(f3 zI97IggJa#3M>#q|E_2iub@>#-!+FHfaCI(6W1nRl>&I>sn6Q^)+0gGe)`eUV{@-`` z48zwwHil#6xVaq5jx6P9o%cA$iqBu?=oos0W96!5j)wZ6I-dUGE*$kf12}5$9nCSp zcM8Y)k~th5r*b%2Czfz5tGtJ!w&@X$`Z3!$I&OP~qv7R!9F3>H6#C#(9BT$NanvSh zKF9PEQndo-bmyqg7{rlHkLOqyKb2!;)Lf2M?}Z!`U3M~=n%=#`am>CEgQ*Ezi0x-x=+(MvH@9w zuds4V_+&XpV}}Pg>QbNJSb6VGj`gpIU_VnBvxF`Nl+d;!}+rJn;`-|lbZ6E$LJ~uyW%=j~3 z#?MwpZ2je?v++UioEV#vv@bqn>jC2@_g;*DYEXAwVb<07Pu@COy?Xl3@g4Q!{&BdR zDZ5GsZ0q3Tuk8EskDAVp`YK+N5A9kqWmkMV{YZzpxSjI;dA~{DWSxi)+ndt;pvF&m z=ZEt%>d*WV|Ld8^8-kVwC?9y$SnqwNCVs{Tu<|oVtF$Zl6@2k7*$n371KGN@E z%9JQ&eQ?jix(%U9z$u@Hl7spy*DTwfo0ZaC$(}JHq9VA5GNSLCYbEWQ<3H+J+q*nf zt1PtV-=6kxeY~ijaAoX66MoxK<)`fY_FR|do3u*DuV(hSbh5MZ&gmE4`E5>HZAG zO4r2?ez&lvBmVcu(L=tOGFIvQK+&=Wb4Mk7{(X(Vtr@1wU%ceprgia3b>#z&G0CHp zJ{iyc(eBt7<&BYEbB^sBrF`(wuk}BliBz6%+jmvkr^A&uUhkh~pFT=Szq|b5zOii- z$Bn0g*iFIIj(wHp`+tAAH|wobe$n*l>d&Ek#euOQPI>J7+@8j-B#a z-_w1Nvi0>*lWh+VR8D3nOCR=)Q)0cJ`lV0fU?pJIgLBTMjZ%{L&1x=ucZ71*)YQJ` z$5G1WwD_-dCx$Dtn(j5NNFA-T-+1WHE3@L1qu)fY8WgNo>W`0KU)P~Ae%qX1+GT5d zD(MJ3B`!rpYHh$eQs>yy$;Jl=8(-4@en1Qdt@QbN$wa{>ttiog4?M`YZG29<#5$ zL9eV&fAhCO9enBF;B?#SmmTr_PMU(c-=QkI_qN&hXk>Hzv#)*JH7{CG9t!L^IVd|? zxq0B`cRL3C89yrWHXhbwpG`!(x-9HWfNJK{M0SZ`%z)tVRYIyge9-EjlUpA@Tf z|FYAja&@F~Pyf=k+S$XD^BU6&rJs*cPM&{%miC!o<+A_AENe9Upvr+`Nv~%clJ4;ZKEn{S-ce&Z7~^6r=y0 z+uEo~kM#AY--#Wo1nCpoIbMuYvb%hJ=eQ(Q8DSqaFCcrg@_oeXv+f=jt86>6N3-su z5lYvG`j1`}*H_W6>)ft9WUO*6HUEL{;)f`mf9`qjSARf1J+|o1b#wYDtNRYhO!>C0 zvTwLw|HiG2@v&nEmOI8xROU@Ozx|0n`YWf6Q|?%CV;^NuY0}AYZTl&j=^gxaeWxmO zKl{4Vppq#{^8BNvHyg$)Jw8eK<ZeeN`6@E=Fs_B)ZNtn1piYCukmvTVz@<&AAd zE9Y(R#>8GsP_8$>qpR-@|Nc}RZLVlm)cmQ2UeY|<_31xVUGvKB%`5*@U-`E3d2RNe z>aF9ZY_g089@uOA`QCr3{@s^3-fi=z>h<7+<_~_prq=wXd8y68YwE9>HV0=NpZfZTtLjJH zD!j$^O|10X8 zyEMGKa@u9}Q@_Jgl1E-vkCf#ljL=!@YV_`>_uk!fNu5`*enrE#m((uS z{gKxFm(;7j-ZQw{?n~<1*$a*T*l2hpB+kC1Ms7)j z|CiLtuKVxlKk$<3b>q^DUv>ijN)7zKq#hZjefYuOE~+s(i#k8`%|+Gg>C@9bfA6At zR6FyRs247(Vt(zS`e)69Z3o|VQMFYEH=nj%R9{$fD(KCdFRJxFe|@DY`J(#cz$aE5 zh`p%xJ6SjRvhJe#RfQ&WdfSWYrSOew-o4nYsv{ehrvBKhei^QRK=Wm@I{Htzk$R_D zefG?v_OCzRtZuwlbH3)WW_3!{bB-VGZdPAkSF^XTy;%*v+XVlc)iA%3_t^Ai_1N2c zmOeVRS*_f%N;9QD=(%fF{lbl98oy>WVTIN3rs zbuYbrL4E(XdjFogE~u+Vy}IbxCoZV9TS`_=z3+nB_Q2yI{-qbx7k9><{%*kqHNRN% z-bb@8s1rNiV*h-?1@(bziTfR~7u3DqPh1flbwLeSwlTk?!v)p4GU(=duM28tV^b$% z(|PrSkx7d#oH(zVYFGBz_W60WbKbk1^4>kK#z#IAIQhl%YK1NB^RZ8#S8M9ZM^9P{ z`ka-Wa#o&KBNu2!Jay}N^y%+!>3d$i64Ni%eEyvJQ^&gMxj&s#x1Rj%{RM~5sk5~Y z4JiNcoVxbXqyu~3IH%U!q*>(q{5kd6gS{F}Po7hM&seGd;=yyO(KkagtL&UQdXZu5 z@3)>)Po^$=OQ_)H(G=-yO65?0-(}*nIMrHr>vt z`}c*M=-D2)K?DEKsZUHjmbK>0S#^}};O+H4oK>d|{O;|f!)Mik-M#Or{^+cFV$HT= z%3EjEx$mS_e!cswIz_X1*NV+&)dh8XPK|o_tXh_=>FHa3R=q9kg-Iuto>k`?=fr-R ze^!0`vvVJOY&@%ewD^OQN7Bx!mycvwnkSxBQ~r2P-*@y`^`7ou^`0MdR-G|tUY}QV zXVoz7AiSmB=d0R)eTOPlbNP(gX7|={YyLQ+dhI;Dci_o0>Ve{C*B<%mjQZ1aw{3a& z!!zp4e!Y$u-#Vj)jd`)dm>18eJ!_Z7MQuH!X0Hez*!8h9>Vy9CzwG${=;Ky)h+BC^ z{bRz1pU*8mqb9fc{>%fpXVm8YPi203%Nh0Ek^z^yrk+tJcBp^8bmAFx&)(T{PmeyM zUh1~+_nQZwQQy%Hm~yJu8THj)f6iDEenzeMT(5~}dqy>S?dxBwIiuzbe)_FD&o`+z zetzxgX}>n9kCxq7)4RS&tu(}F0>1(rxH9GPhfQk8$eSL#_;!<;FhH}*=jA5V_uVt= zy6$XJH-(<=m$<1(-Re_4*Y;48+M%jEw5q&GP5JccxJ$P;sl)rOtTq%iseLtHFMBDc zNo`zLX6-qzN!_z#?eZtnn$&esli`1pI@j3w(btqF_4wY$OJ>D3sr^GMdusYOsU??t ztbDC|lltS#gqGE&uCP~d=l6$Gr3WXniTs$JGD^_sT~gg8`bA)e!qA1 zz(#eL{+6FIdNrzjlD9|bBSFtyqgtlbynVS1aK|;RgY|wXN~{Dp^iDaclxa#I@DVeSKqz8#-Y|e+55L2UvsFh z{5Hroc(+5{uFVNtxy_*(@7TTV+b11rdVpq>`mjSiX(@i`x%(aJo!W8!J?;elOLf1e zZgZ#yE=&sSQ{+%Dhn8-9WuZg8va|7vlq`pOcd@PVk2wz2C-$2QkIrzY`^}vWPM+*g zwLXdPAM7TrdhI}*Lyer*{gt(Phx&8BC0ESR4%OesYh{AYp^jWSV?UBaZ&DK z3rmI1n86o#{^BpgNla*UeMoBm3#g^<^Lj+FAyw=*+d=4|X6%0|KYvL`cr5!$tR?)*_lmXR`zFQL`R*|PzA%382tT@|%d-?Lu=6b_WY6GhX81KVdtsq2 zudrYND==AeGZ$FwneZhgd#1%^E3{?i7R;B+sB8lIj2=Bre!-60=N4r;zipdowG@~k zN-Cf;K2w1iKDlQx*(hd@?<4bg;p102{9)R~7XAgWEK|1J9wzdY4PTM6Tj0xonCHx5 z`~0{T{yewt>5_dR|8kR1Q2sff56>U`U}kQCCDUrduTt4_EwJRw{VBZ7GT&me6lCMt zJAC4)2)-xAVzbPqQI?UGnAlN6hQ-91v$A7G4L4h2;zkY0&YC}B#PCsZmKdHP_$HD} z2fs&W$;^SO$b(YA_rokKnUgd;9zA-w8^g?j6Zzob;G0(_D}H;gWemb@f>gRi0TH(5 z%>zJL?eM{+@g}>8^WuV*KB=768*5I8zK37+QY|Q%J7sM zrZd?V6ywM5ir~lspP1w0irnVRCg#HLmO5<)>dcVQfx3M7&V(+@qBH3h!za?rx|z8J z_Bj4IFHsAy25EtB@4+XvDe{53LjDzQQ{IFEJ2Y>pD~^KVygVIzV9ivZ<1vgYo)66| z<4MoSwYf*bTgw&L1Ya`5PRQ_cV0kH~>>TJo77_I|Bld-sZgO6r2aKMaF@1O9Kd)U^fg^{}8E z2D&g0T{{fp<~9$~uuUM(fjkCs2xK3~c94fbE`j_6;s7}UQU_84@(jpYkO6uPivsBe z(g~zJh%dG@)O9fz)yo51Nj={Gm!ltZ-TrCvK{2hAsTiNWIxE;Ag_T`f$Rj? z4DtjBI%O!NH%!Ay0C$7*hvW7j45SQrH^3hNzXmaaoB^o;*#MFN;x}Bw{)~mZft&*Q z3glgoT_BHv+yydXgoX_U=>gIK#22Iy!W{$o5abn*bt5%wHOTECg&-!7G>{1(BSHFs z{D0xxQ_*$xV$olK56X2MY7*S^2Df7jf^kTPdkpY60ffhkgq(W{$&p^H65=WGh)dcc zqJ6cSzSiv+^%#eA?&)H@?#`WAAx!v}&^JA7-0g8+g&u6AGr(~Ph-dmzk8#SJxaR}Y zad$eflRoZtl^%9748~dQrn_DqWSkfd)4=%Z+``HD-0dpCPIpMdnp?4x_LzPg*hpu9 z@DeiDU?=tVQ^$Pcv&H660{#k$`ts` zE0A6(@Y}!Bpr3=hXMn|6kRk9=-ZGF+K!&6-b{EL2_cGSB8or~pfw4zH3LazZVUQ4b zA*K(=Y><^8c|D=NL5_n=?xkTfL3V;10MSRmxCZi39~iSidh~^{E*i$L(Ha&pM#Ex2 ztRPE3mV-P7@-E0JkUnEU4-yM94I~336C@j?5Tq33ZjgsSwu0;e*$475h;bZjmYFH? zz7elKkhf)l@N_W{`Y_aw0n#t?fd%{o@r}dOwDD;V9UOk|fsxrs&#xUY??k)9N3qVw zkG|P-v)KxFqVzYbI5*FHGd*Gmzd=@W7MODP1^h)p_Zi5fr1YuqBmAtUn}!X7&!yU< z^7%Hwni$9<=%rtjUe9!J4Z{!4IsJwXVY*R}&ob4Z_A=&?^C)Oo_)gvufOhN~KO9yXqm9Z!>Ky_gQpvq2(ye%-*q zlk+GWzozRjZq!HFir|nXz;#~hDi80|hHhR=4=?5p%A)V8>AhGvWD3qT-tNo*kz$zn zR{qUzjE5P$m=R!*t;m)gr60n*z^@GLgdZ;-`u}%0jgN-;jDu|Wc`?6KFFnVhfasqE z<0PSD9%H(1p`QD}A3cayU;-2^!7Iv(Mf43|9n-t9j(~jY-Va(qg$!a<< zb^_|m4ncb`=;Ywf{^Ac~lbf9;(1!)a`mw;FepXGWKMPF{WudVlEOd{^S;P&#&{mz8 zNDc01`fFGv0$7A667>b6Z9=Ow3&xZL{u9VYL0+3!l4{tEXXR#p8g%& z*J9akfdey$SD>y3baS6iyxAs*CIWs;x@~L+*0#ydigk4-m|$lrSqlg2LAHYU_(N}G zUK`=iE2PW{b$7du-<@9h-YgaTSwx^0meYXkQv)`+AHko4AXYCt%~?bjZx#S~@`6DH z(`Wz{&r>5DG=qpdCHURvmB;Rew(Qx4X=5Xye!^HleH*KvQH0YSb1O?fAU@~3*hXO= z2JIdO_33YIWArl!djptkhV-N7z=09OE6@OCH~N3*&A#w5v(Z?7o>n*B76A?swnbam zyRaGvG`J^RpCJl3^xzPQhmEF9Fl{aIZf#x8=SL-akEA7h|npksg0!FcXwt7+%Q+QkO3c0&W}{cHS;JtF;B zB!ms2cy-Z?%>dcaO1v#~a9+FFYT9X7yDX@`?!M4B^{lOC5c8w{9CaM-TQqRrI|L3! zgUkT&^AFTw!zRG}rO!CkQ|N7U~wmR$|z2xck(t}wiIL|r_4RvVi+tuKeEuyP8YX?89?(;pOy(I6hj#*v%D;-J)nXt^s}r z@FL*o-iG6SZae~h5MKL5umeWLI=>px$FQ7UV7nHc1^M$JloJv8p!*o>953RE7!brF za@s@R(Xn=p;QGKi7+I~pMjt&qR}SEp0j7P3u|kkXAbrGWxR|T~e4g@i3et&yAEED{ z>A)Zt&KNKcKA_tU&!YG|`Xr=@h`iu_#tu>*{($4NAW|>6)Qf)B7Wx^CF&^Vf2;NWG zyqtYx&)tlj0{I%si;ka{Hn`u42!y^E0DaLP`eGaCi+(I(DD=hfKo)KWNe^J*&^F;i z!yKXY(D%4~FxW%=K$;P$9UUF&L+WI`=I1iDd7)_Y?*QKeLBv!M|1NyNBF47n3H#%K z`#}&fJYqmAeGt<|eW!ewCji0Y&4B;R_8ZWrz>_Q5W+U=)wQ^2&31nT&omiLjj;u>; z80*p`>LH>plwH%CwRHs52h_Ex@wNIG@qQJ@02sPiM1L6XHA7m}TS2dh421DBj79G0 zKV#XUL1hk32{g}m@FCJ@G$02pIn3{8b`hhH<=i2G(f zcEkAz<0c=w`S`45ZNKm{xZhv%J_pYWvOT_khOrAEb#y++dwg*{68GfNw)Yme%>nt* z!&U8&-4Y9#2WL=;Eb@iabd8K;j7wGzf9l8K| zu90c}unnfRw?n^CVXg)+#4RmpvlDFgfLxLJ!t)u@>X6FE6@Hhi=@!ho*@K{t16eny z!){QA-G)XuI@fos34!qypPevY`uXs^LEg{c+yUDNu#Es)IEU&(I%rrB*=2wox-C^4 zTFuw+-HfRqGG7sRog63TgD~{td*J2<1dkEX;V~bt?cOZV?8SUzH7o=s3$V@MdCw~I z7~)pXJkR33R<8;0f_oeoGZ10yXsy1Ue1)-HATnRA*>rmq>K){t*;qjT@ZZ=RgLHm% zON-y{Lmh;K!S&zl>dUe%pW6##AV?ClH?I%u5BPj5%O`o~K-M`nlyzRGb--OhU0{uP znh|Z+7TONRKe(skwG$l#n3mprn;{85d#8Pq$Y>893{lLr}u_)dO#Z% zY0rSMU^dvLvmiPzE4<`+3HJh!Rv3)6cs~%)8}CCx;66mlI@w(JA$TswVf$hkVBC-J zIA?L55KG!)ySmhtlRgW%j1b{ao#<_Gsu`25i7y;>OFzqNz1!u=1_Vc0qt zgLu8-_3f|s&vLH9bIjRulCcj#Dr7#oLRfoexDW3H@pOdt34?Jtl;6{ZU^|;bpsls6 zv#o<8q`rM!+Zs_OsDAe34~(V$$km@k;*p0W=x0_DEl;>$z-{$if_VzFz&<^Gt zf()8qFBWX`ZS~wa4{@7*g8LjwF9hd8Aa8Q6Le}+qu!(PA><6;LdnRZL2Rx&T>k!U?VCy>JGmPvcTV54i8w+{^qOe)T?eUNx9ME!+h4 z=;zP++3#ZA&38lF-^2W4%US(J_|1b$@IBt&#dE$p*97^pAh;`oa3 z=`cOs??Ry8X<7R(;C?cu?aUVWO#A2gbibZy_&DNvo)FJqfpGr|&j>JPc1#U%$Tm3+ z&og}j;Td1{JDAY)hkUixN4^SzHPB!U>muto492SWJntkRY!`pH=V-^eq;__6tnW}4 zQq$h~ob^>l4GZn0VZ$koh+#o+4)=t6lE{|#t8gy+z`38X8`cq^e$c%G&-HkHjED(< z`K?n^tGnhwFV|=zY>Z$d`cQ!L*%EtA zL4=0=4lB>%`M72w}oc|*hk3MVGz;rb0Cx-vJE&f0M6E$WFMx9J zukz4o!5`Nv(P6tG!Zaj%ei9zFbaJiN-OfyDx?9S8G<&3lHgH*D;fG-#j4z786+O1FJUM>E}{FFnwo(}V~1N;*}JnKf<;+iHp_xx!8Nji>J(!m(~n_5o; z*DO8bH}D& zW%_Zgq>uW#R_Xo>TrgKJf|4)yOiT+2ciOW|^euOi$;xQFl~ z!tV($5r&@^@r)%*C7e&VjPMb{D#Cq)-xD?y`dtw5g%QRPP9w}BTuk^l;U2<+gbjpV zRK9S+DIWFozRrE;-~8f&YYmAWTExb;1F~;~pBXmH z!d^z#-om58e?Ba=<%x}#jI|S~wz|LaPglCI8LqhHwn(;%QvPQ<2agCFzOPVjDrD?; zSG=?#vXpHRekQXy6Lw0%*1M&+Q|>cLL+r}5ms%|{-v?W0-1lqxiW23RisW|7Quebe z#R5~l#q832DKxF@&m1J;!9)w^vwp;KY=ui0JLZb-y1Pyfw8){{A=+2OQv~~8on=4i ziY+^f_QG}+cDy%SZ(HVvEmCl`^9$tv*S(+)S4vLvOy0JzAEsq&rh)~svd_3e6&Hw_ zGQ*sm%NOg&Y{EUjlzXknJ@hJ#mTLuSIhRPp;#|IS$Qe{KKIt^s-dK6pty z&*Rk}r5bn*NG*u97p%d7d;`b-0D(JD#<%_0XfB3r&x?mJ zRA%B9b@IYd7wKY)tq8_xG=X`n%i@{=hb;UW%yk;z+UVwI06*N*)0!KLI&ggmrOiQa zaSszr{#ULFJKT?f?q>4065dC+iSP}=!-T&PvOh)mu7o29rxIonE+bq=xQ(!y@F3w) z!aoQ_&Evhe$bU3p9HD_Qhp>!r2jRIo+jrV`F0Tu8W_ z@Ik^#!etgcAu<35|pWge8QJ5bhwXCj5x-C}9KPB|<;y z7h!}^gmHx932!3IBP=6)kZ>d6^Mrc|d12tsMz2X0dkQ}f#18*N#_mDCsqmf#z0GjN zo9{-SXtP+@jT2I*O_(}t=pb_*tVo<-Nw^h#X3I_f?+agp`>Oy+sdEhJ6inlrYR^kD zS?$F(OHyG0?xbS@=r^^na8a>!BHbL}&U&~=Xi+mO*Jdv^<;^Tul3M^*p)miU=gUwO|!Psp+Gm0&?QiH`dztEO%f)_ZF3X7o_Ha7OJu}?O$1UKLG z9Js47gC`5~hMc68!a$Uto||t;EP?`9@Cf$UPcF!{=knX3w5c#uB|{MQEaYgsC98PB z0*g)N zvN-FKu?>(1C{Z4~jAb!TgqN{$cutrVYuBxBq-fyH1Qupf~@W(7NijQ8MAH3(C4vuq~lUf*DSVM8aH&Ct9>@N@;e-DD>Hgc7K~GR=gN zTxW0Db((zS2Ox6O#et#(04=qXdr+V!`F-$``&wM zQi{ncG6Q+}9&<@2F4jHl%0QnqyIBlxu&D?+R%<%kzcMd=7V@GXhZt7yc1nXs5!jr{ zk5et81y^I=cZ=yg$Tgf87?*g-2YOG2-)!jm7W8AiFeMn^iVE{A(~IraVrUx1y1V(p zi3+KhFkTEnClM5sorEzIUrIyo*=!@@eT9lJTcklT&t~mhBMEQ$Fj-4{m}2Z7EqgSK z@PF@yZayCK*nq#cyPm}-x9Gl@e+ci`#GIWt`jg*1h%2eT49cmrYvCygU@!=VkamV8 z;(bSPmxFhCF6Vyi@@@UdKeYAtJEir1S}*e<(HP!(e(Op_eHd;N=*VgPeNY+C^{|rO zchyq8Bwf$&zs+B~Io#S`k%aEL?!PSy|Ivs{S=sP(y&xxd;iA0!fBH6zR_MdG&y*ZNou(@IL-0R1`{AnIy229+~I6CjBj%6NQcy#Dr z?Y}(yJ+9pjSuS(-7Zaw@{nhWk!^aEa{dcZ`|7w~Tuef&qt0Desca81`n&~>GA0)14 z|5aQ;?h3^lOY#1@I0&+g^1t0_{>FKEIB#;Y+}KX&Bro0|j|66k-zztiobN;5o-`Mf^`1~^b#zdz0jR_f~wRrOi7vyG(r2=WjTD9Z9R?*V1 zH9Jh-Gq0`LwXlI_HY|E;cGLOqML2)+AYmHJFj6(OYOhAQY-fqU6vh>_wRHHjjmzY^ z?SKzFp0=&Umx`+b9)_*i;jBMj3V=dAogjXXAz+-qUBq7}+)wy9;W5IW3C|H~5=Hp7 zgb{?j35O8I6HX?aNoXR>CoCnri*POBlY~17Um<*#@Dsu#gg+2A5?&?jNaf{~{=fN; z7S?P*@Lk6;z}G>V;TV2*gIxw;-@+9J*5|u{_`|UQFb6~n$5z0VAQ%?c@CSqndp+Pw z9Uxw?aeq(k1ni}Gw>lT;DhVQUk~Mf{udw7$D9Bz|!8Zo(KMAh#<{yTnG4G zA9z>kdpHKX2!iieAqGanJs2D#b^=)j$B11)Ho&p_`%w4})tY{=)&l;BPkkoK{0Rj6j{`6l_D`6>-wOB(9pnCl9=JyV+YT@YF2W^X zqXj%i$80dDK`Ow%9`MuAur~(d2TT}4^#FKeEWB%54>o{TK`>nwkNXnA4*Z!4?<*w0 z+6o*aJ_WK2juXZ)HV>p6j&lIFfM9-J20Tv3^?>>$(Y}Zi$HTsRuulf8MS){P#{{Uy z6Hs2jn2E5T503SK@R}Bn6LBQ$VY(Uo;{bPpnBf@rH8p@>y11ukJP01+KBh3HrOCKKzJDe z2Tm8qi05a(`3N?+$7w1E#)J3}2(~ruv8p3~#4{jRKW70aq(MCJGF&p?V;~#gcq8C7 z5G)sb9)*pZ3Gbf3aU5V42*#fWSOVfZdERD-6d`fN3CTUjq0&2-a==|I^O-$GTOPar`iDpyCV#5vvS6 z;Pf^Dwhk9l;7)5CrpUx9gA_&W*zV}u-B#C)6qQ)x)T$F|WLjnFIqhkC+MXW;1{Ro5 zjhJRGP;`bWh-F-$z{IK(>o4^4+;b#qH2R-0VaeCe_rCW%=e*B*p7%NB+VjGvkzDHt zJa)Y|{werH6nu>Ngm<8Yal-W*7(ea1;q6G;J8+2PJi?>C7f#Lka|KWLy$U0~7rx8) z3AhKzIZNde#9h==t`&sFrA+X*_3|VIH6(c=JmC92 ze9rgE*V)$tNuLCK2FV%^e}nJxB5BXS3EI#63qSZx<_DjG2T!{ZIs3_b`qp(MTp??bz! z4_sXJ=0Sy@uX*=qH~bzN(?__gPA$U=uQthVd>ZaS3+oR42^DD%H^|{8&&v@x3@>bX zed6$5i}gZ#4_;t<*PVfvIIJDo6Yz^j#&#ogki^x72Yi1Jp6HUF^bf&HQ31aeZfbjL zVGg=zj`kz)#GAeIoC25nUbqg)_~)SId*Si7c>R~ai0_3l-wSv8J_ifF7uJ!*bxruZ z->%$B4j{Q!20no#XO`?Ef6yTrCp_skug@v)O}>x9_aT{wE8)j|pNID#^(j7Q!at+k zc;$BH9IeL3VI8IMCfxZg>N7qEODKRBexXCY;fwIXJG`;Qp^IdVwBhq;!Z?*XSuaS& zvjlzs$-PKP8=A)pFTTt3YhV#cf8i~@-v=K@GAAQ=`hL%=@ZG*&3qR}o-S7{n!#D%q zW`0l`AApOvuleR7+2;i(6R9k0UkexN9M{0w~mL24R41()5&+&;r+IcTGOw6|gWes6At zs~#Y4X^%noN6ee_f$2lk5WKL5WDbS%z86{#@~okc@U;V;9b9WAyaGx8Bk;gaxTmxq zgg^bM7uOK(e2AJrdjX#RGscgffh8pKDLjniJfTPU{Qq;-6nz%Mtw?es12rUlgok}U z4_`m@&J%-IqP-kjf_on2Sn*IhOguazgbyKu_J`q;$Gr0kzlLPJ?1c~d?E|RJqa(~e zyaY);WZ=OkxbK{20Czmewdo_gY($LsB)ko+#dqN9r@Xo+JoRaQmUF_`Gv3&QHzApm zeempGczLn`p7BfSA^n%a%}DO=96aM!j9=Q}#YpC705AECcdZ){%%NR);nmN3bDo9+WXQ3ww20b_*Wk)y`8>t5NjQ5P&kEYp@OiWkuN==_LP%m) z;T7lz?HTwqI*LC6zZ5uT;WNyQ@Vu9h%iQZ3xEm?YdR%z|&oTTi_~w`5`J51gw;?%y z2fl6bG0JNCtcE{EGx!1Ad=lrx&%x};#DU)dZ+N-qi*V`{TJNMel6+VLTS&%m%4uwSg5va91OJHR**&#{F`>1z3-3mA_%571ow|-s zL*+I6{)or-;3b#V!VHr03zxl?vC$rZbyVV56K+zeulPB5-WgnyiU9u7F z!gnGWX9BiRNUn7j?MTJTUI53O&1ac;#sNR+dksE|;`EVsFE2R98;|U}a}SdKefUE( zBCauf4vq1_W&8~S$>+uxOrR)UI9TDeE9cS=wYe9<>!MzJ5x(p^&P|N6xzgomj(L#H zg04sHhY=j0$Rp$`eC7Gf)6Y3Sl>I=Yzfkr95igYeJj4rS?~T=rQz-jL7a!#S_aUgw!vcG|}3uUhdX&1^q57I7_Jr~3aWxoX( zkMMrq%RA@tE_vcfkMgeZ$M8aV-&>9q%Dcegh4SvIc%i%>D_$t?^obYByP)EQ@}8!6 zp}dPJUbracd7-?IChbCbS5Lf9-i?zn3+4SbX%}ASx63|$n%_>9e(~RnGw|XJ{7+|q z+Ryb-{vU_o?FAG07wv5IwXhFVDz!+tj>pD7|C@PBZp)nNf4zRy^onJXX_c+ex5*ao ztEMko`}T99(`t4H-(6hC{_(S`rmvmNPQT^NFFRpoT{b(r<*K=BRZg%qyJ~vp_O0h< z*QaN?l@=twk_wc%WheA&5CK2Z$NI^IGf#Zx%Xv$?`oV%RcCf= z-{PORA zePND6_uCz*|vFh`?R`q(_7ce7n4^_Z(KK*ot;*fzi^(J z<^TRFGt2*BOf$=02#&*Nmj7+u_~D;##=rVG!84NkRw`>{v)nFs%00dpF)mNa!Ahv2 zRuYwDC0)r>a+Q3gP%$g*N~hAV3@XElVg!t!5i(RGY!s@+YN@JKyVZVmSRGfDTCk?p zBDGj8QA^b_wS28u(`xNnx7M!>YvYZy9Bp05|{TD@KG*8BBgeOy<} zpsAV>GiD~tl$kN}X3^Blw%IlN=Fl9QN+Z}%8<9q=k!YkEnMS@*Y-o*kqub~=hK+GU zX$G5WGt!JT6U|gJ)66%EO|98(cANd?usLojtzb)SMOv{|qLpf8TKQJ7rM23vZmZuK zw#F^R3RsY_dAH#9-GMuFNAB32xFk`A=eFdM7SMuPNK>`27SW(J!@c%tcew{Lw4AX+HpH+r|q0wuuHaSckG@$ut)a9 z4mcqv>_nZolXTKf&M7!0$8Z(0&B>ucB;MVpgO8fs)1Ul z7Oq8W@mjK$uH|ZlTB&A|X}yIko74j2SJ=<5G`Ur%m+EG{Q}5LW^-+CN511h{Y(~wv znKaX8&McTE(=@&CV)`_|AJTZ$dDRXbwG?1Y`NGj`rC+M31jit*;HWv8L!jUDYFcOi$=3J)`IKqOR#}y{q^2p+44?ag8* zLo?b&*XSEVV{FKV%sk(fz(QSUw|Z2<0kv>MEzGbA^Q^-nD^X)DwjDaMOREMnR#Jdf z6lVpM7;lFWPZ({AjLVR7d9toZ-f0V&*CqG*WZ#hd8=ESbm7z}cs7oR0P=<=rZ%tY% zbvI7sO;UT)RNox+w?G9hQG-pYaEChFv-;GNAr)mzO;PLs_c6qs40A7|{B8QhfB)SK F{1w-i57+ '@/napcat-common': resolve(__dirname, '../napcat-common'), '@/napcat-onebot': resolve(__dirname, '../napcat-onebot'), '@/napcat-pty': resolve(__dirname, '../napcat-pty'), + '@/napcat-dpapi': resolve(__dirname, '../napcat-dpapi'), '@/napcat-webui-backend': resolve(__dirname, '../napcat-webui-backend'), '@/napcat-image-size': resolve(__dirname, '../napcat-image-size'), '@/napcat-protocol': resolve(__dirname, '../napcat-protocol'), diff --git a/packages/napcat-webui-backend/package.json b/packages/napcat-webui-backend/package.json index b3b140b7..ce36f97b 100644 --- a/packages/napcat-webui-backend/package.json +++ b/packages/napcat-webui-backend/package.json @@ -26,6 +26,7 @@ "json5": "^2.2.3", "multer": "^2.0.1", "napcat-common": "workspace:*", + "napcat-dpapi": "workspace:*", "napcat-pty": "workspace:*", "ws": "^8.18.3" }, diff --git a/packages/napcat-webui-backend/src/api/QQLogin.ts b/packages/napcat-webui-backend/src/api/QQLogin.ts index 2ce7df04..38b2ad12 100644 --- a/packages/napcat-webui-backend/src/api/QQLogin.ts +++ b/packages/napcat-webui-backend/src/api/QQLogin.ts @@ -4,6 +4,22 @@ import { WebUiDataRuntime } from '@/napcat-webui-backend/src/helper/Data'; import { WebUiConfig } from '@/napcat-webui-backend/index'; import { isEmpty } from '@/napcat-webui-backend/src/utils/check'; import { sendError, sendSuccess } from '@/napcat-webui-backend/src/utils/response'; +import { Registry20Utils } from '@/napcat-webui-backend/src/utils/guid'; + +// 获取 Registry20 路径的辅助函数 +const getRegistryPath = () => { + // 优先从 WebUiDataRuntime 获取早期设置的 dataPath + let dataPath = WebUiDataRuntime.getQQDataPath(); + if (!dataPath) { + // 回退: 从 OneBotContext 获取 + const oneBotContext = WebUiDataRuntime.getOneBotContext(); + dataPath = oneBotContext?.core?.dataPath; + } + if (!dataPath) { + throw new Error('QQ data path not available yet'); + } + return Registry20Utils.getRegistryPath(dataPath); +}; // 获取QQ登录二维码 export const QQGetQRcodeHandler: RequestHandler = async (_, res) => { @@ -147,3 +163,106 @@ export const QQPasswordLoginHandler: RequestHandler = async (req, res) => { } return sendSuccess(res, null); }; + +// 重置设备信息 +export const QQResetDeviceIDHandler: RequestHandler = async (_, res) => { + try { + const registryPath = getRegistryPath(); + // 自动备份 + try { + await Registry20Utils.backup(registryPath); + } catch (e) { + // 忽略备份错误(例如文件不存在) + } + + await Registry20Utils.delete(registryPath); + return sendSuccess(res, { message: 'Device ID reset successfully (Registry20 deleted)' }); + } catch (e) { + return sendError(res, `Failed to reset Device ID: ${(e as Error).message}`); + } +}; + +// 获取设备 GUID +export const QQGetDeviceGUIDHandler: RequestHandler = async (_, res) => { + try { + const registryPath = getRegistryPath(); + const guid = await Registry20Utils.readGuid(registryPath); + return sendSuccess(res, { guid }); + } catch (e) { + // 可能是文件不存在,或者非 Windows 平台,或者解密失败 + return sendError(res, `Failed to get GUID: ${(e as Error).message}`); + } +}; + +// 设置设备 GUID +export const QQSetDeviceGUIDHandler: RequestHandler = async (req, res) => { + const { guid } = req.body; + if (!guid || typeof guid !== 'string' || guid.length !== 32) { + return sendError(res, 'Invalid GUID format, must be 32 hex characters'); + } + try { + const registryPath = getRegistryPath(); + // 自动备份 + try { + await Registry20Utils.backup(registryPath); + } catch { } + + await Registry20Utils.writeGuid(registryPath, guid); + return sendSuccess(res, { message: 'GUID set successfully' }); + } catch (e) { + return sendError(res, `Failed to set GUID: ${(e as Error).message}`); + } +}; + +// 获取备份列表 +export const QQGetGUIDBackupsHandler: RequestHandler = async (_, res) => { + try { + const registryPath = getRegistryPath(); + const backups = Registry20Utils.getBackups(registryPath); + return sendSuccess(res, backups); + } catch (e) { + return sendError(res, `Failed to get backups: ${(e as Error).message}`); + } +}; + +// 恢复备份 +export const QQRestoreGUIDBackupHandler: RequestHandler = async (req, res) => { + const { backupName } = req.body; + if (!backupName) { + return sendError(res, 'Backup name is required'); + } + try { + const registryPath = getRegistryPath(); + await Registry20Utils.restore(registryPath, backupName); + return sendSuccess(res, { message: 'Restored successfully' }); + } catch (e) { + return sendError(res, `Failed to restore: ${(e as Error).message}`); + } +}; + +// 创建备份 +export const QQCreateGUIDBackupHandler: RequestHandler = async (_, res) => { + try { + const registryPath = getRegistryPath(); + const backupPath = await Registry20Utils.backup(registryPath); + return sendSuccess(res, { message: 'Backup created', path: backupPath }); + } catch (e) { + return sendError(res, `Failed to backup: ${(e as Error).message}`); + } +}; + +// 重启NapCat +export const QQRestartNapCatHandler: RequestHandler = async (_, res) => { + try { + const result = await WebUiDataRuntime.requestRestartProcess(); + if (result.result) { + return sendSuccess(res, { message: result.message || 'Restart initiated' }); + } else { + return sendError(res, result.message || 'Restart failed'); + } + } catch (e) { + return sendError(res, `Restart error: ${(e as Error).message}`); + } +}; + + diff --git a/packages/napcat-webui-backend/src/helper/Data.ts b/packages/napcat-webui-backend/src/helper/Data.ts index cc8092a7..f272b632 100644 --- a/packages/napcat-webui-backend/src/helper/Data.ts +++ b/packages/napcat-webui-backend/src/helper/Data.ts @@ -16,6 +16,7 @@ const LoginRuntime: LoginRuntimeType = { }, QQLoginError: '', QQVersion: 'unknown', + QQDataPath: '', OneBotContext: null, onQQLoginStatusChange: async (status: boolean) => { LoginRuntime.QQLoginStatus = status; @@ -167,6 +168,14 @@ export const WebUiDataRuntime = { return LoginRuntime.QQVersion; }, + setQQDataPath (dataPath: string) { + LoginRuntime.QQDataPath = dataPath; + }, + + getQQDataPath (): string { + return LoginRuntime.QQDataPath; + }, + setWebUiConfigQuickFunction (func: LoginRuntimeType['WebUiConfigQuickFunction']): void { LoginRuntime.WebUiConfigQuickFunction = func; }, diff --git a/packages/napcat-webui-backend/src/router/QQLogin.ts b/packages/napcat-webui-backend/src/router/QQLogin.ts index 81b0fe91..48e7372f 100644 --- a/packages/napcat-webui-backend/src/router/QQLogin.ts +++ b/packages/napcat-webui-backend/src/router/QQLogin.ts @@ -11,6 +11,13 @@ import { setAutoLoginAccountHandler, QQRefreshQRcodeHandler, QQPasswordLoginHandler, + QQResetDeviceIDHandler, + QQRestartNapCatHandler, + QQGetDeviceGUIDHandler, + QQSetDeviceGUIDHandler, + QQGetGUIDBackupsHandler, + QQRestoreGUIDBackupHandler, + QQCreateGUIDBackupHandler, } from '@/napcat-webui-backend/src/api/QQLogin'; const router: Router = Router(); @@ -34,5 +41,19 @@ router.post('/SetQuickLoginQQ', setAutoLoginAccountHandler); router.post('/RefreshQRcode', QQRefreshQRcodeHandler); // router:密码登录 router.post('/PasswordLogin', QQPasswordLoginHandler); +// router:重置设备信息 +router.post('/ResetDeviceID', QQResetDeviceIDHandler); +// router:重启NapCat +router.post('/RestartNapCat', QQRestartNapCatHandler); +// router:获取设备GUID +router.post('/GetDeviceGUID', QQGetDeviceGUIDHandler); +// router:设置设备GUID +router.post('/SetDeviceGUID', QQSetDeviceGUIDHandler); +// router:获取GUID备份列表 +router.post('/GetGUIDBackups', QQGetGUIDBackupsHandler); +// router:恢复GUID备份 +router.post('/RestoreGUIDBackup', QQRestoreGUIDBackupHandler); +// router:创建GUID备份 +router.post('/CreateGUIDBackup', QQCreateGUIDBackupHandler); export { router as QQLoginRouter }; diff --git a/packages/napcat-webui-backend/src/types/index.ts b/packages/napcat-webui-backend/src/types/index.ts index f19259be..d0464871 100644 --- a/packages/napcat-webui-backend/src/types/index.ts +++ b/packages/napcat-webui-backend/src/types/index.ts @@ -49,6 +49,7 @@ export interface LoginRuntimeType { QQLoginInfo: SelfInfo; QQLoginError: string; QQVersion: string; + QQDataPath: string; onQQLoginStatusChange: (status: boolean) => Promise; onWebUiTokenChange: (token: string) => Promise; onRefreshQRCode: () => Promise; diff --git a/packages/napcat-webui-backend/src/utils/guid.ts b/packages/napcat-webui-backend/src/utils/guid.ts new file mode 100644 index 00000000..1bfd5d7f --- /dev/null +++ b/packages/napcat-webui-backend/src/utils/guid.ts @@ -0,0 +1,116 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import os from 'node:os'; +import { protectData, unprotectData } from 'napcat-dpapi'; + +const GUID_HEADER = Buffer.from([0x00, 0x00, 0x00, 0x14]); +const XOR_KEY = 0x10; + +/** + * Unprotects data using Windows DPAPI via napcat-dpapi. + */ +function dpapiUnprotect (filePath: string): Buffer { + const encrypted = fs.readFileSync(filePath); + return Buffer.from(unprotectData(encrypted, null, 'CurrentUser')); +} + +/** + * Protects data using Windows DPAPI and writes to file. + */ +function dpapiProtectAndWrite (filePath: string, data: Buffer): void { + const encrypted = protectData(data, null, 'CurrentUser'); + fs.writeFileSync(filePath, Buffer.from(encrypted)); +} + +export class Registry20Utils { + static getRegistryPath (dataPath: string): string { + return path.join(dataPath, 'nt_qq', 'global', 'nt_data', 'msf', 'Registry20'); + } + + static readGuid (registryPath: string): string { + if (!fs.existsSync(registryPath)) { + throw new Error('Registry20 file not found'); + } + if (os.platform() !== 'win32') { + throw new Error('Registry20 decryption is only supported on Windows'); + } + + const decrypted = dpapiUnprotect(registryPath); + + if (decrypted.length < 20) { + throw new Error(`Decrypted data too short (got ${decrypted.length} bytes, need 20)`); + } + + // Decode payload: header(4) + obfuscated_guid(16) + const payload = decrypted.subarray(4, 20); + const guidBuf = Buffer.alloc(16); + for (let i = 0; i < 16; i++) { + const payloadByte = payload[i] ?? 0; + guidBuf[i] = (~(payloadByte ^ XOR_KEY)) & 0xFF; + } + + return guidBuf.toString('hex'); + } + + static writeGuid (registryPath: string, guidHex: string): void { + if (guidHex.length !== 32) { + throw new Error('Invalid GUID length, must be 32 hex chars'); + } + if (os.platform() !== 'win32') { + throw new Error('Registry20 encryption is only supported on Windows'); + } + + const guidBytes = Buffer.from(guidHex, 'hex'); + const payload = Buffer.alloc(16); + for (let i = 0; i < 16; i++) { + const guidByte = guidBytes[i] ?? 0; + payload[i] = XOR_KEY ^ (~guidByte & 0xFF); + } + + const data = Buffer.concat([GUID_HEADER, payload]); + + // Create directory if not exists + const dir = path.dirname(registryPath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + dpapiProtectAndWrite(registryPath, data); + } + + static getBackups (registryPath: string): string[] { + const dir = path.dirname(registryPath); + const baseName = path.basename(registryPath); + if (!fs.existsSync(dir)) return []; + + return fs.readdirSync(dir) + .filter(f => f.startsWith(`${baseName}.bak.`)) + .sort() + .reverse(); + } + + static backup (registryPath: string): string { + if (!fs.existsSync(registryPath)) { + throw new Error('Registry20 does not exist'); + } + const timestamp = new Date().toISOString().replace(/[-:T.]/g, '').slice(0, 14); + const backupPath = `${registryPath}.bak.${timestamp}`; + fs.copyFileSync(registryPath, backupPath); + return backupPath; + } + + static restore (registryPath: string, backupFileName: string): void { + const dir = path.dirname(registryPath); + const backupPath = path.join(dir, backupFileName); + if (!fs.existsSync(backupPath)) { + throw new Error('Backup file not found'); + } + fs.copyFileSync(backupPath, registryPath); + } + + static delete (registryPath: string): void { + if (fs.existsSync(registryPath)) { + fs.unlinkSync(registryPath); + } + } +} diff --git a/packages/napcat-webui-frontend/src/components/guid_manager.tsx b/packages/napcat-webui-frontend/src/components/guid_manager.tsx new file mode 100644 index 00000000..c92e7cf5 --- /dev/null +++ b/packages/napcat-webui-frontend/src/components/guid_manager.tsx @@ -0,0 +1,317 @@ +import { Button } from '@heroui/button'; +import { Input } from '@heroui/input'; +import { Divider } from '@heroui/divider'; +import { Chip } from '@heroui/chip'; +import { Listbox, ListboxItem } from '@heroui/listbox'; +import { Spinner } from '@heroui/spinner'; +import { useEffect, useState, useCallback } from 'react'; +import toast from 'react-hot-toast'; +import { MdContentCopy, MdDelete, MdRefresh, MdSave, MdRestorePage, MdBackup } from 'react-icons/md'; + +import QQManager from '@/controllers/qq_manager'; +import useDialog from '@/hooks/use-dialog'; + +interface GUIDManagerProps { + /** 是否显示重启按钮 */ + showRestart?: boolean; + /** 紧凑模式(用于弹窗场景) */ + compact?: boolean; +} + +const GUIDManager: React.FC = ({ showRestart = true, compact = false }) => { + const dialog = useDialog(); + const [currentGUID, setCurrentGUID] = useState(''); + const [inputGUID, setInputGUID] = useState(''); + const [backups, setBackups] = useState([]); + const [loading, setLoading] = useState(false); + const [saving, setSaving] = useState(false); + const [restarting, setRestarting] = useState(false); + + const isValidGUID = (guid: string) => /^[0-9a-fA-F]{32}$/.test(guid); + + const fetchGUID = useCallback(async () => { + setLoading(true); + try { + const data = await QQManager.getDeviceGUID(); + setCurrentGUID(data.guid); + setInputGUID(data.guid); + } catch (error) { + const msg = (error as Error).message; + setCurrentGUID(''); + setInputGUID(''); + if (!msg.includes('not found')) { + toast.error(`获取 GUID 失败: ${msg}`); + } + } finally { + setLoading(false); + } + }, []); + + const fetchBackups = useCallback(async () => { + try { + const data = await QQManager.getGUIDBackups(); + setBackups(data); + } catch { + // ignore + } + }, []); + + useEffect(() => { + fetchGUID(); + fetchBackups(); + }, [fetchGUID, fetchBackups]); + + const handleCopy = () => { + if (currentGUID) { + navigator.clipboard.writeText(currentGUID); + toast.success('已复制到剪贴板'); + } + }; + + const handleSave = async () => { + if (!isValidGUID(inputGUID)) { + toast.error('GUID 格式无效,需要 32 位十六进制字符'); + return; + } + setSaving(true); + try { + await QQManager.setDeviceGUID(inputGUID); + setCurrentGUID(inputGUID); + toast.success('GUID 已设置,重启后生效'); + await fetchBackups(); + } catch (error) { + const msg = (error as Error).message; + toast.error(`设置 GUID 失败: ${msg}`); + } finally { + setSaving(false); + } + }; + + const handleDelete = () => { + dialog.confirm({ + title: '确认删除', + content: '删除 Registry20 后,QQ 将在下次启动时生成新的设备标识。确定要删除吗?', + confirmText: '删除', + cancelText: '取消', + onConfirm: async () => { + try { + await QQManager.resetDeviceID(); + setCurrentGUID(''); + setInputGUID(''); + toast.success('已删除,重启后生效'); + await fetchBackups(); + } catch (error) { + const msg = (error as Error).message; + toast.error(`删除失败: ${msg}`); + } + }, + }); + }; + + const handleBackup = async () => { + try { + await QQManager.createGUIDBackup(); + toast.success('备份已创建'); + await fetchBackups(); + } catch (error) { + const msg = (error as Error).message; + toast.error(`备份失败: ${msg}`); + } + }; + + const handleRestore = (backupName: string) => { + dialog.confirm({ + title: '确认恢复', + content: `确定要从备份 "${backupName}" 恢复吗?当前的 Registry20 将被覆盖。`, + confirmText: '恢复', + cancelText: '取消', + onConfirm: async () => { + try { + await QQManager.restoreGUIDBackup(backupName); + toast.success('已恢复,重启后生效'); + await fetchGUID(); + await fetchBackups(); + } catch (error) { + const msg = (error as Error).message; + toast.error(`恢复失败: ${msg}`); + } + }, + }); + }; + + const handleRestart = () => { + dialog.confirm({ + title: '确认重启', + content: '确定要重启 NapCat 吗?这将导致当前连接断开。', + confirmText: '重启', + cancelText: '取消', + onConfirm: async () => { + setRestarting(true); + try { + await QQManager.restartNapCat(); + toast.success('重启指令已发送'); + } catch (error) { + const msg = (error as Error).message; + toast.error(`重启失败: ${msg}`); + } finally { + setRestarting(false); + } + }, + }); + }; + + if (loading) { + return ( +

+ +
+ ); + } + + return ( +
+ {/* 当前 GUID 显示 */} +
+
当前设备 GUID
+
+ {currentGUID ? ( + + {currentGUID} + + ) : ( + + 未设置 / 不存在 + + )} + {currentGUID && ( + + )} + +
+
+ + + + {/* 设置 GUID */} +
+
设置 GUID
+
+ 0 && !isValidGUID(inputGUID)} + errorMessage={inputGUID.length > 0 && !isValidGUID(inputGUID) ? '需要32位十六进制字符' : undefined} + classNames={{ + input: 'font-mono text-sm', + }} + maxLength={32} + /> +
+
+ + + +
+
+ 修改或删除 GUID 后需重启 NapCat 才能生效,操作前会自动备份 +
+
+ + {/* 备份恢复 */} + {backups.length > 0 && ( + <> + +
+
+ 备份列表 + (点击恢复) +
+
+ handleRestore(key as string)} + > + {backups.map((name) => ( + } + className='font-mono text-xs' + > + {name} + + ))} + +
+
+ + )} + + {/* 重启 */} + {showRestart && ( + <> + + + + )} +
+ ); +}; + +export default GUIDManager; diff --git a/packages/napcat-webui-frontend/src/controllers/qq_manager.ts b/packages/napcat-webui-frontend/src/controllers/qq_manager.ts index 05dccb44..32ed5d9d 100644 --- a/packages/napcat-webui-frontend/src/controllers/qq_manager.ts +++ b/packages/napcat-webui-frontend/src/controllers/qq_manager.ts @@ -101,4 +101,36 @@ export default class QQManager { passwordMd5, }); } + + public static async resetDeviceID () { + await serverRequest.post>('/QQLogin/ResetDeviceID'); + } + + public static async restartNapCat () { + await serverRequest.post>('/QQLogin/RestartNapCat'); + } + + public static async getDeviceGUID () { + const data = await serverRequest.post>('/QQLogin/GetDeviceGUID'); + return data.data.data; + } + + public static async setDeviceGUID (guid: string) { + await serverRequest.post>('/QQLogin/SetDeviceGUID', { guid }); + } + + public static async getGUIDBackups () { + const data = await serverRequest.post>('/QQLogin/GetGUIDBackups'); + return data.data.data; + } + + public static async restoreGUIDBackup (backupName: string) { + await serverRequest.post>('/QQLogin/RestoreGUIDBackup', { backupName }); + } + + public static async createGUIDBackup () { + const data = await serverRequest.post>('/QQLogin/CreateGUIDBackup'); + return data.data.data; + } } + diff --git a/packages/napcat-webui-frontend/src/pages/dashboard/config/login.tsx b/packages/napcat-webui-frontend/src/pages/dashboard/config/login.tsx index aa1e96e3..bb1e39b9 100644 --- a/packages/napcat-webui-frontend/src/pages/dashboard/config/login.tsx +++ b/packages/napcat-webui-frontend/src/pages/dashboard/config/login.tsx @@ -1,11 +1,13 @@ import { Input } from '@heroui/input'; import { Button } from '@heroui/button'; +import { Divider } from '@heroui/divider'; import { useRequest } from 'ahooks'; import { useEffect, useState } from 'react'; import { Controller, useForm } from 'react-hook-form'; import toast from 'react-hot-toast'; import SaveButtons from '@/components/button/save_buttons'; +import GUIDManager from '@/components/guid_manager'; import PageLoading from '@/components/page_loading'; import QQManager from '@/controllers/qq_manager'; @@ -131,6 +133,14 @@ const LoginConfigCard = () => { 重启进程将关闭当前 Worker 进程,等待 3 秒后启动新进程 + +
+
设备 GUID 管理
+
+ GUID 是设备登录唯一识别码,存储在 Registry20 文件中。修改后需重启生效。 +
+ +
); }; diff --git a/packages/napcat-webui-frontend/src/pages/qq_login.tsx b/packages/napcat-webui-frontend/src/pages/qq_login.tsx index 1268d806..68744964 100644 --- a/packages/napcat-webui-frontend/src/pages/qq_login.tsx +++ b/packages/napcat-webui-frontend/src/pages/qq_login.tsx @@ -6,8 +6,11 @@ import { useEffect, useRef, useState } from 'react'; import { toast } from 'react-hot-toast'; import { useNavigate } from 'react-router-dom'; import CryptoJS from 'crypto-js'; +import { MdSettings } from 'react-icons/md'; import logo from '@/assets/images/logo.png'; +import GUIDManager from '@/components/guid_manager'; +import Modal from '@/components/modal'; import HoverEffectCard from '@/components/effect_card'; import { title } from '@/components/primitives'; @@ -174,6 +177,8 @@ export default function QQLoginPage () { } }; + const [showGUIDManager, setShowGUIDManager] = useState(false); + useEffect(() => { const timer = setInterval(() => { onUpdateQrCode(); @@ -210,7 +215,12 @@ export default function QQLoginPage () { - +
+ + +
@@ -266,6 +276,15 @@ export default function QQLoginPage () { + {showGUIDManager && ( + } + size='lg' + hideFooter + onClose={() => setShowGUIDManager(false)} + /> + )} ); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bfcbd7eb..9f6d8116 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -128,6 +128,12 @@ importers: specifier: ^22.0.1 version: 22.19.1 + packages/napcat-dpapi: + devDependencies: + '@types/node': + specifier: ^22.0.1 + version: 22.19.1 + packages/napcat-framework: dependencies: napcat-adapter: @@ -441,6 +447,9 @@ importers: napcat-common: specifier: workspace:* version: link:../napcat-common + napcat-dpapi: + specifier: workspace:* + version: link:../napcat-dpapi napcat-pty: specifier: workspace:* version: link:../napcat-pty