From f08874f5c4296d288169f5c3ad6b507be78eef1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Mon, 11 May 2026 19:03:37 +0800 Subject: [PATCH] feat(ui): optimize CTA buttons with contextual copy and fix static export build issues CTA Optimization: - Implement scenario-based CTA text across 6 key locations - Add responsive Header CTA with icon+compact design - Enhance CTA Section with vision-driven copy Bug Fixes: - Fix useSearchParams() build failure with dynamic import wrapper - Remove useSearchParams() from PageTransition component - Fix React 19 useEffect lint errors via useSyncExternalStore UI Enhancements: - Add ripple effects and gradient animations to Button - Enhance loading skeleton with branded pulse animation --- --full-page | Bin 0 -> 56243 bytes src/app/(marketing)/services/page.tsx | 2 +- src/app/(marketing)/solutions/[id]/client.tsx | 2 +- src/app/globals.css | 50 ++- src/app/layout.tsx | 14 +- src/components/analytics/GoogleAnalytics.tsx | 26 +- .../analytics/GoogleAnalyticsWrapper.tsx | 12 + src/components/layout/client-layout.tsx | 16 + src/components/layout/header.tsx | 42 ++- src/components/sections/challenge-section.tsx | 23 +- src/components/sections/cta-section.tsx | 159 ++++++++-- src/components/sections/hero-section-v2.tsx | 11 +- .../sections/product-matrix-section.tsx | 23 +- .../sections/social-proof-section.tsx | 10 +- src/components/seo/structured-data.tsx | 63 ++++ src/components/ui/button.tsx | 50 ++- src/components/ui/hero-ink-background.tsx | 295 ++++++++++++++++++ src/components/ui/loading-skeleton.tsx | 2 +- src/components/ui/page-transition.tsx | 48 +++ src/components/ui/scroll-progress.tsx | 58 +++- 20 files changed, 794 insertions(+), 112 deletions(-) create mode 100644 --full-page create mode 100644 src/components/analytics/GoogleAnalyticsWrapper.tsx create mode 100644 src/components/layout/client-layout.tsx create mode 100644 src/components/ui/hero-ink-background.tsx create mode 100644 src/components/ui/page-transition.tsx diff --git a/--full-page b/--full-page new file mode 100644 index 0000000000000000000000000000000000000000..cd1e6ab6639b2a3156d111e12389dee4819f3432 GIT binary patch literal 56243 zcmeEuS5T8(+b&pNks=}@)q;qC6zLrmklqO>9qGOICMu#JAiW3a5K8F1DFV_$C-hJx zp|?;2Bzy6G^ZzINcpvR=hMB++LZ0>9>t5G=m3&oKl_MjeBOxLpB2$o;(Ig_e3ckJc z@}EoKA%P_dLqv3oNI~YMws+db?2RU}147qseQE&eNTTu6m!5<(J?*NeU&92cU(vH= zeUH;*XM60x9##>jF8_7IZ@gmr)Rp@Pk3tAxGZ5$*zX8J;ABp=+*n4gm`^xm~)6?W+ zssMB!?MOBO_Y%?j$If}iSY!4!qVJv7OOMJYEDgdT6hvP&E6f$(Y&1t>*5I9) zClP%>mJ^M<^2K zD(ZP27+2?=bn*x1@~h_(ajW0Ny846q>)ck-SVcx?EpswGTAuXr1DN`0d%Ze*0d3e{+$}-gDIuCRhtVCU2sGW5>oRrUe zMT|c+BUQ@g=?LGPFwp~z0;0=pvQIu3@m=Y-yZEZuooFZA?mf8jKRa3XpX@aLTwuDU z2hCJg3th_Fqdml2Ts#rc@C~qT&Xmkf4{p_v)tW}MvqW+lHm_s5L($KKo6Vx)gUz{g zo~mVYgv|sfMfSq<{<)7L*{LVmIQp_W7DP&}h$DX8uR6yK`d8V?JDQxC znc1-Ail&vdXWEXc+FspNb87-AJ@#mjqJ*?WJLmlK~$I{8i*-&5PDbGui%+THr-dGNXvEzX`gVM&=- zH=t8J&#KAg!AB8(tKj7)j;Bq9UrC%B+I4jmzx?24aO~)$V6C}+WMatt@uYemlF(~V zeV}`@`)=8#w4b>5Bi%cFzy0H6X1NkRs{z@WKYx<^>&-~e z0|v#;HDMN&+Rsw!L0j7bVfrxf2SPN%O-{*Z2UzBy$X`oMlihPW{a&hD71(4U>aLo@*Z8~%weP>`{O+U zGc_}FrWhCCC1r1ur<0QU=zh5I_U1x1Ia0z{WpaPRWLru`M#d6xCz+-4Go^;c4Hv6L zv!&aMiwLp++=EAa9dQAx-5*Mvs=hl8ewL@WM9m+=Hw#(vR2deT6;a-B|4g$zxY+bQ z?tTg*Ytu+957W;h8s00Hcw#=Ih{-Fj1hKkv)~`iQ82Xj``BR)5Zs*N)#J+DCrtl>q zT*^Zfzi*R^`bXv4*C82;*)J>B*fzfF6kS`h_iG7*^#qyMMxvY9#ng(|eOIgPkg7>M znV=!*sJpnhI80Uf5YCTo-g#=m(m7M_#@%|hSNyip$QdzNX@xA(<@P(=NH`sYwRL>i zyn9XmgHl;m^z&QqqxoBig<)zLlAdZj?epy~Bvufn8wiPM6i$Aro(t~cIwIxbci6Ql z@k89-_mqol>5x&_ZRbxia~Fa^xOjJB_EdFyBEWZA6{{B2qg`imsJM(^5X~xJNEeeU zy;gm>Ipgwm@)<8wfZcfUkRqp1llPCKVxqZH!$#b}x^AIn2Q=__$F!NCoXk6^r2{vT zc=!8@h#UHBua|phXed`PUK2Ma4bv&1Gfz$v_t_heBKV_|t>OX?(nMVU@;n!AFW&v_ zNbPvKLCU?hsdGIvd_{s@A$1Gtl7B1zdI}jWDF+>Go0L;zjX|FF(e-DKr|F%V76g_J zEwr|azMvir^Sd9UD8CB`zmJ5i2J2>+MO@1+%coYW)H9=laJi-Ckflfctf zms4^k<8x%DPq^ziERVosTrc^@ZgZ-d!)dOGnq7OM%(NW_Dbij&NVi%Y&JC-evzcx1 zIN4jq^rz-e6mvx>aW_{P)Vr>am+-kAt|Q@={VAzJPIL8c`Ik0p9HtXE^*#4jG^iua zTX31up{i-ZnJyCQEGwM)H3jNt*a4|jgLKt#!xYkV{qPfbYT~tacS+LSqy*K^uZQy* zt!CJMuLfI6UuzG$Mx-y_dU+#mcw{62DI{}y&eS~b9$B`ldAO9%l!$~?I-L)_artgY z<_#B@!{5Ig91$Z0b0~O(Hlr}AT6a4Yhn>vs;+OD5y|gfswMGf?fXcBM$txUh@H^T9 zZ+fgyi`5E|#-Uq!b~x=s{Zb0I!mLFmxQ7|Y;M5nin95U01-Do5$&=S(^V}`RiwXLU z^_w-*iiunfP{NSh{Suv$sgD$rbtXSQ^u%*;JQlJYUD=qdWE6FuXz(bq96Y09RplQz zSu29KU=dejYzb;gR+t?|;3F7`WH7|BavNCF4CJWg=Di}YHBK`K@`y)=<7q;}tA!wy0&JhY6&I>19MXc9bSjA z){5>>gBw-@zRk_78U7VMSTwA$<@|7(y@7osl1Tyw-Z^hRFPCwPxTxsV$t{RWyybSo zI#;~!INaE{+7=Qrcb8M|=`K4p1(W}lsv+1NM=Xg3S&KX8N2pdOR7(ttQsBo9h; zWL{Z{R@_?AO&YEZ19ieFif|_$tbL*V8EzfE-d}Ls6hy#pw-Ss(R-V1BD0oop4`tGE z^o{+#u@xWZP0uEJp2dVTssy($OEx@(>a_jz>;|!Ie0MT5E%Q7LlpmLN!FNg5VJNGh zpeLx>wa*+n#S>RC$nsast|=mMR+52d$HqbDkV?z`vLLWF+FpOx#)^6qx#8`BJE^{IQ+jGreDXLooVx;(4`EB&4%FRLrDLj^N=~{68vibT9r9t~Cwb;Ye zSIN+nCEVS}u(07hQvQKLt^BGpudSIvr|*ws!;aJCP_rp=Vu=Yko&A*}7~&YSt(kf> zf7^T&M$mp@@X|1g5T3kj`Q*vY8reZQpUp^ig+=)zW~xPmjAj43yuWo-JzqUiD-yU| z{ti&%wj-l6(j{Ejtv1(A;7)0U&cVfras38Of9AFW*+;NL&vL^yGel4S{93m4)z{FV zj3yNJSsRdPb!b!v2ZDy$#pGA)FkRz@?(@N|=7SxO&TZVXyVRAcEAIMNK8i^K+{!BO z1jTsv!qU@0X$rQ&z{5$a&FNaWQFFtu5=+0Wdd#S~hUfWaElToiN1EEnL%lbSEtW0? z7dA!;<0)FmJ+luo;&WY!5Ng@$;V99s9S^E?LS6Jl0U2$Uaj%j&{mBZ8bZmaNcTWk5 zN7V}tF}%0xtmbl}zFVx7uZlGCa{&MBL!XFc-@VPN2~tr~_&U$N@I`D&iAFNvD=V~a zDN<~!`N)VbpfJ?af${F%-|lSXtn4t~!8j+6JHz4!Yh!MbQI;c=3IXPzqus=ZrD%og zhGv6T?mvRxfO>DF@tSp#GXAXMV%I5NNh_7kN_lHj@w-??=Z;hJ!T87P6yt?ja_3Qs zm1`}dT`q`L@7+bv;Md=59*6_H+&xilHn!kBX^|+BAL=#Jy)8Z^?w-c2Tbkx;l0I@j z@OZ(n(eoTMIZ#YB`5fgL;y%2CZggviL9g%0rQGQPcH`DJR#KHvb`kVKI+zWKqZ#Z) zH=u&~ft6~}&>#fSMjP#hag=(mm(-4y7dcKIp@NLVM_V{@n6e~MYEtL?xzi|L>eE!@ z;I#GNkKpl*o7_$6B~$f9$wmPOkY$Ji27PYFs`+&65Wet|BH(5!AFQf>y_H2V&U?H0 zD9uV^bFNwcd{!?GG1b!!v!L+qTE)8c8;6zp%nOIvP=7-7w?JXnO zZp&YyA|iIvZgTpup5Ke*t_^FD-D+9h*;djw!hv z$Me_`vBQ;zltUV}VXwU%HJAPIRv7`~do#X@>5aI;&|`}!nh-);bvt3(6YDEV>63&5`*+)o^Cq)akglQlNdH4dn5G2kz?$YNC2 z(9uT&@ImR)LgBJDTG$gCK_@WGHC|z%bX8S$nb)Exsg+%Kz1ML7DxpI%;wNZap*Yo3 zuy#{NDthj-?-wKARhAO&km>tDXBrZUp1z<62l`1o8uo{k4$_Ma@Z>jFpgE6yvY z_i~+r#7HlH&BDjUbLf&YiBB9s8(K!+W;1_eT5RIyF8K@79SKttuCT7Bell5PbUU8Y z?gy(l@|zTP8{P-2qmJk6+J&rh=CBS?(jI-dh0*o44OHH|4N#Lz8b#ZXj~mUpw{8uL z`cRFK+eW5Rk-+&DH>tWVc2s`5xIX~Z2O(4}M%7Hu5K1N_PH!*bXZ0UtnJucN2_M~5 zz|Ymdig7KvjSDGur5gDaiv_>RQr;gvd~NJuKJXck1OMRy)_BHivs+{Yvfz+v$}w$C zF=>=P`jUx2(*`RtV{~3!|8HSF)OIK`}vdsa9>(TpvKsqXvk!R4qNz=qGX?@`WD$UY&Z|*G+jyIu*~q6(0tvVK;23a;xd( zZfybx8iCPXH?YX~hXS+jE{O+6IRHe2WGkpftYL=UlC48gtFnbDi;=}Q(BWZh@C}&U z>Ywb}rR0*?uOl=SHR`8DGj=Zy2#NURugbPt>&aurdE~tChJxX0a>lg)ENn$`?+-KD za5equKQ;zeoAKwTMFQ}>LJ17Gi&HfYc60u=0S$;+H-y|KkxO<2_sA(mzU^K2S) zipIlv&!j0Na$2X3sF7#56m|Q`jF-!H9@K@ZMIk0q`KwIBLXpE2xTLuAs&cln!tbf` zg%9CLZS*Z*-8b zKcxK)f+`m@bja1a6D5f&kgOnQ!~M~l^_p=B^&RPZyQnvddw~8$!pIVrd>~QUS8O$M zR6+hk5r2q9mgwt74JS6XI8-}W+oVQb?e-)q8+WWUOKsCC;bLagivg zslAwr*5R$=#{IsdV$TirUc8%Z)@H+fk5fNJ0LZ{yeKs!VPtab7x4MZ6=nc-mpI2wb zrq*mRU_H87@teV%V1kA?WC-uCXZ3Z2YtssNqjG4)q@d1+$K4eH8N$s0$Z~2sLcm={ zhkXsRf!XDJlU{VkeVfKTsG}7*(|C}Q#DV(wFiS$U|DRXBdl^cv`QGpExIC(`{2C=j zwR*x{A@21FkJ*gsIam*LZ6A-NC(NDgOBvfr%};noVwB%>?jWzLT6l6F3s~i=dY9qaURf9t}ks z2HCI4Sauv|8=3(u$8o{+s$oyqsn;C}PKxkOHy7sZWAx;kUUXeStxg?7PO8L9G~-1f z_Em}Xc|{S^&3;~PLx!*Z5qN<`eIly<=`M^1+ooW3rq0Ez<6f?@?9J+!>Pl{`x`g0Q zx3OIGD6z~ET0AcFexP^fH(GX~)p;|YOJ%lbx}hL&$MdgGDZNPk9jL+bl#H6`&inL{ z&7*7@&6`GJmIuFAzwCo4!)Ea_8NIe<8AjVo8k;m2|9y>m{xNC%n++|a&C^4AMM-vD zSXGv{S>Af(x-guyP`X@{OF*Mr{jGemVy>!$LAjjV!5!aPgoo*8_5%u9-rvgi7Z(id zaMy;^r$5G&C8G>V97bwC9zGybA)c{|Sijl(ZT+%dq}!Ee1NB4+nAhLJLe?+>L6D## z_Rh8Np+LPxPlwI2HA)@~eLg;g+F?zKa8`L@dUZ%>58aEAzLnTlRB9D#J*Wo@9$!umzO*x*yj{3G_{`gc*2n zPYbQGF3-(os6|S7YPFSXUX8E4Lh^JW&3ov zSx&5}c0ymmQY!jyX9*os(sMPjxh;5}a3a22C1^c^R;t`o>1;K~iGh*QV{7JyTdOr3 zqx%{%tsO#Xp%-wzuCJx?!o#EJ8xJ5l0Q_EWR7d^BX=+E+wHO~T7CwW~DFG}#npq0( z{De&#@IOC5u21U@ylwIK5l}c_hm}6HDSD~X?CXI^Tgw<1s#5%o3Op@osfjNiBiG`2 z`nDp6uF$rs@SWL~ZEWDUeCIvUTDMYK)gjZ5*T}SoAk5Qg`b9r-5l`Z!tAC!R8@nJl zC?-TWkL}n_J&t(B*fGXqu47zx|uA-r(XEVa9U@58s z^_7aXYKP|8n;%Ent{Iog-cIEqipO$9q8LQpT`hRSZkE(hG_#!M=mRs?tHD`|ii_sw zuhdB*SeXvp{XPz{YW5pMt1*&T;%~Dk7KCaH$r^?Q;ZO4KwnPqCT9({wKGCbT4Z$;| z-4>f2Z0nM+}~Sc@z@(dGV38FOG(x5zc*(z1Je{i8altZ3l9sMU-dNa_%Uf>p(`HL5&6S)lc$#9yTBsVu7bKnNPLYKC19(ixRGp5m9yhJcy|Wb0&kFRm#_F|^DYI++ z8bX6$5bJl| zpryK__#(k(OZoJHQVFlN_r&R<9&0o8m2_KTUR$FWh;CxS>ybPa0mCsR7BUu7fr|7f zPOZFeSRX{1NOoquFW+E7A!bM^>9x;~BeTWw*QJeHqGS-!#>FrW07=uvPV-vH=>?x1 z7rlWtUSmhu?zRBN?+It>s%V`}*4rk;iI%B>971fXPFhwfgoV#A)S_9TnTk=5Q*Cv6 zX8EOEj>r1AXoBtMj&K^guajz7Qf!!~LAF|>m&at^8D}%Cc%%c4VLmo;&3l3{mKfRM z7`LBBJdr1i@tDgFo3pg8xrM>5geWf{E%A27*X;;n2Cs{ht+}>Tq)tjSa}}B8BDIly z%u#7#KZo6~BoP%mscpVA!h(5LS_SE7!SzswBAVoM?dD*Ej>tx(#otu*c6Euc0 zuQBDzZ%F}^i3c{Y_}1g^!O<@1I4k7%!)<*`jFZfV1HyHo(^jj)`@C8ex+UMMUnS!> zf_MlL4dxy@RtP_p%ORK&__r@#B8N?%Dka~xief?@M@D0CPx+|(G79C1Rc3@dJim5L zVHyu%9#O5%-uMi3x#FmW@k&a)xyDVKO)0?r-C6mQR3oR15pr*kaAx%u%^BFdr+`+- z#{?>^wq}$^gkrWSagqF#URZR$Vo7kqXIC3Q{*3vdj z()7KJ&A&jK%bD*g@}B-~SupiUakTwDnZBE)Qvs8(4J$l>3ON~hs1Bry>CTRk+=fw3 zT2(*v$U!qjPb^8h=H*Y->BZW1Ol>cKL*KoH@su@W^aciIJ8s5W=T+MjcByABG zAj;x%Krw|R8aQ%xwCQP2H1tenUqct`N+`0R04^##dKvnb(FxO+oP8xXBzr6l(4kjZ zsgm09&~&R5ZwJFC;I?Im)k>2=QU$&u!$s8Q6i^S=5cdRZ<9x0KXnN$N*u586p0a~O zxIg1zP!wS9YweJTJ?(G3@f?6lKU5`x+OS|^*D{qGF(U((VuHOM1TCn;5i`89Mqhdv)zSy_jcl%ZGj=6Oqz$ zoueba?PekC!3S<+Ww>mQxRt5uBJw+;nl=Thwv0dbRYxB#o|V?hUMbnROshQ8a@nsX zEhc}LI{s2i}I!vpTaf1vQZtt3NZ@k_3|bfrAf$yiDs|etuf`M#1Lf^+*0K!LFkPcf5A~ ztU8D_=V2PoG`COxB$Mm}ao=`p_#2}%`bpDJH<$h3N0GoSb4u!+GKTOW1AU9Ussm>{ zWRvu?9CnT4#`Z+H^r~*W(R%Cpt7X)w_&y_i+a#c{Xuf#cyZO1B+Jl>geb z>2G9?Wow$wkdFNkOw_sdPBS*89>yV>UzER!Ki$?98*8~UI9MqH58d}Qlt}etxY~O` z$c&0Z-V^~+a4{L{`{xs3T#!mYVn1_PfyVN;K}u1Y&DtEFWnY=NP<(%eRO_##bHAn{ zof6IW8YL4xU51#iEnc%8iEE#{=6v$c+1DH^#ar*1g>`?vlu2TJ$lU@9-2#J+j)?Yk z4zhTbxXTBiDxDNe-vp1(c+J;LJ8GTX-2YnT4WZ%-N1pA~zwTRXHVKg2kPe~ZyqI)V zGbCqQuDxM#40!>Lb^ZWzMyLMCCiadZsVw`+3cdLRR+ZHkvtZDic4}=7JjYpP+GIsG zBijAEL)Y?o3cG!X%VG=l#MmM@mSN!wqe1%K(xK#IcZY%S1h;$N9N3E7)BbwEm=me( zk*QPsMg!%pr(@XQK15aHgqqu%Vb;@+T)nA^x8jcxoXu-7aR{~a?@i#GdbuGLalo^r z*UCO&>xW;-jsl2Stk*5?qbJM3duw_gMm1cSp5k^BHnK(&h3p_G$^8!(peffjUZPJ8 z?WcGL*jWcuOF+uo<^hs6TT*Lj&9HIt1d3L{f>WBKLco)N@xSHThhUfD}41X1k&%ChW@eHm>R$>gLRrP(B|jnu0b` z1VwP8x{*x_Tf3;udk4#hlo?yc^Wp5-p}!f0-2pgZuC$0i#M&ufJ(I(!8_sH-_$yh7 zy7c7jR&jJD*iHHs#uSS0q9arSj_hrRi7H@!AfUoNpuLN57kRF2Gs-2F2)6F0RvWNw zGIiW<5Ze|YQ$4SA3rK81FB10#X7O1uBM6T|kaiH5wt~m|$E|AADf?ILQGCpQ&TQRb zZnzHvg_EOCeddF&k9rPymDM9HToX*M(W|v@3XUC)lk$9vkf^;3lP&$@^7F*Q9e0As zP>OqM%AN&Og7HpNru6lzuLLH?SaW?qt(5Q-*JX{{ez(#J)VdZp-o9thUr>N3j;T+?CoAp10IxkUQY+=}8%zlPP~ za`D7W+p&oe>Lmfk{Fi<>K!?uxV^u7?QK=?{l}kwDAc0o5BF;4q3I_@@dco0_A3qAj z3(w`1+S67`+O`jFw%e%6kseSMydw-Najz0(%}(x(9v(oe18lRBRg5DOFq%(d1N#{d zw0p*xGRce#>GgzhykoVMzPDaSF_nC175sXzj&z!-8=CoH6reCAo+9YrJE9`Anmm?~ zwVdZ#?x~Eu9rlx?P3PTX;TGZdr0D%aLtNr%&(sqlIT=}WO9kTaNYVunTW_8DB`HZ$ zP0||g=f8QaRjqn!mj+ZB5}uf=UH;1pl~vbxitUD7v+EhY%XqW4p3Uo{C~W^pS_HDy zZSw>hI$}@VJD#$ufL;vg4~nlnNO+c0z3)v{hIGoB+7@_N98mi;oe6h5$t>6Z7>kl_ zFzFOH-T=CqVJD;@5uqoiT3zG-3^2S_qv@F z>KmsG3yetHg9f4rgBlo7-h&ioIdZtMJ^8+Pu=P2tNLE4;Er=lbPW42Yr}i5!YiH_x zNgjcLeT8X<-Ng>buWE5>`&@O-yKYkKoWut%6IO=Z%|~;7NJFneD!BuFY^4#>z%8OC z*mHBLkokpi|J2tfYEXM7Ufa>99tFvdT9@kyHHX}8cdLAEY|7~g-~G;h1~t5Y82Sl0 zB&Canoo*|<5m_Jof`~UGP`IV>F&I}a{BBTLZ`kjj{oyI&KAKs7(@p!xjk^FQMoj%FoB-(SMsGWD)vWLGgxK2 zHeo4+%PIO(>>pCX(&*N4PGDMx#A}k(*da^V??l~~!e3yrka6*WMB~81KDc~d=Xp4H zi?GMqs7{HV&)6%elfP6FSRiVz2pHZp<_uhR;FIm1WJ0PFPc+>RDF-+X<&W*R+)Y`w z3~|o;*l@4Pn@Y1bYm33QdnF*@*;~!k4uc9iZXd|b9lz1bS!-3Dn{pC>;kP^k|8N!6 z+Pb!L2%oo|$XC1XmhQRM6m;rqlIs|69^axJrvpXOkE{U+E%c+*N4M4;T#@gUCn_m9 zXK+&BHn5O=$(ehFLIp@Ihj|281+1jE*aZWnj{au%K2}7VBBaJG#HfVa?bMyx<~lh; z0qGeauI`07(@MafP6hN?Y3L#VPf?X_*UUkhdg8ag z5`6)5O#p&aXidR`c9<+l>CtSHsGT3P)~)BOV?r58(z?C>PYd0xOCI~yy47m7WywlR z8;!e@{FO}aatqCRkqH~)KMnMf2%n#@jyv*8Ar_T93LhO+>COD*!lLZsduZyG^&pN* zQ5jOpk9m3h#*}KBkGglqf<*4WIW7gvE$8xqJvfP38fSuB*K2^GDBR1ICVmqYLKQ1? zl+1i(zAEvs^>P~8=|K~MNesW8dziN^#kDoxcXHxn?}}b22VK$Ix69E_b(4OwCsDF~ zbz4incDc31Nsf7OKVni`frlmcY|G1tY7>;! zZM^>JUOKBpRO%NoFp~hSW~k+66-g`FbIW$7=s}@Nb&ZN7t&n3HFBV9cW>C}d;Z4j@=fTeYDwASm0Ct@n$cZd4+SyAK(!>1hEc z&Y_y-v1IOL^{X518qrsf4& znO3UJ7Z(>LPdE5B@95oBWMrp90^39v*Cvgx1_w`Tr~pTM_0R9aRRJ)$;k0y9zN5(9 zhJ|{ZBb}hVb#8Tbug?9X6FcqkzTI+{tB$rcW~1J4+DCj=VTja5`RRmucyTN+0lcHA z5)nQXQi+=4A`34g}~Vyu_gWPw`vcL~-O3^#viN!gsRU z&6|Hem&oA_Xp>pog6|@&6UF$CqQK#ZTkj@*%MmA8W80jUCgLsp2sg704s3$e=Gkc# zvF~^?Q|T%f?No+DNhHy#LxIjlUozj=Eg>)MhWRtgQ($iV(!-m8VO1OD5*pb=5mg2? zptIgw3ahhqNX^LApqxmHH7I}A0gMSYVHGL>00Wq;>egS`(+a51O#=Q%NAixTT%uwjH*my6FpB9=zABV9Z8U23?FlA{Xwk2WZ)!aK z>~#hTn}-Hk@H?NZ{TXp(v~}=`*;?gONsraxjb+@t1oE8%ya8swdU~g?$AMbNf0g>Hfel6Xt`9tqFY{L05QZ zjAFKC<7n7H0pb#8 z1XRLr?IS6psP=tl;P!HXGP#YcM@#s5=Dr&ntCn7kO$j94WTb@Bm)I5jF5;BYs!|@6 zIzWhRE2j#UfDY|zcyQftXEtS8%P!UppAfSkUQGP+q*KqW*B4vlu_{xa2(997j1Ox+ zwPJ&aYh|8Yb+m^m!jtRHo7J?*bl$#MdaHP6@^rRuV%9HQ!aFf#ImH#d6CE+oiazbj z&Db>0&~mtAgIq)H#mkMm=JL{T-wqP>^y$4m7Nct-xr@9jYsa#ANl5T(5A*;W;CF}h z=m2A%gI~`>s8bta_Qo8`oO(7|jR`zfB`~WL~Hry{*#d$tr`@jypFqj-RE215&I`m81@Rfhu@=5Mn zH!pX$Y+XMbP%9mMxC+yOo4TXo3eZEWQn+nBIl`Vc8o73}P-3>*tQ`r_=`ZXyKa6O-Gl1A}8jYQA z)h&^$4AmubH57OV#}Pa*7M;un(ao^C%p&0hDU>WwlVf85c0 z+^1FF+2>}R1=%lMRJUhnp9z$vScQ@^jw)pScHH8()aoa6&=~VCtx@yRz;QTWQE+Tn zebO6yIerav$HEx+EBJ|vWUib8D;TDe~#9POFA78dk9HUq=@kp06y%BX%#<8t5Cu z_ZpX0p7IxLS63GS9GS4;fa3EPd5fH>F!bpDb{D9IG zgE&9kZnf%7P`NLopew{ctkfqeL=P@P&q>eJfB4WFuWZo>xcULCO?$)%-tIXyj6?5C;} z^m~Cn$Z??6tc!dT=?fdqRmza^^vw`3A%3V|{x0O?r?^|AB-WuI{rNHu8ps(CAHVnL z-8)_y4)?9ns$GK0ujpvo>5MbGN~CO4a@Za1?zPbbho4Y>US3f-!T1mY_9OShI@@*l z-I#vKS5x?Nk<&Zz^N}ld49BJjf5y|^X?%;40l_Ik7pQV9^w63fAf%Y%8mVEqHDpjTKVE=2i{^( z_u*iC;I^BL(Rn8;^S5QOVyTD#kb@XO1!=J3F}74nZsH-HY6l}5yFO~Vk!Bn)a5$*m z70R@pCKo~n$4IR#q{+>8AEqhjOMc7$?Ok`s+-pTR5KDh34bR+mfo38H|JmOECbShd zu}Vbr=_znt?_`*#&YRY2YS$F&`2QM`N=TRR73Z}}U=U!pV1qnU+I{r=1iPlD@wW29 zluk=kvc2<(U}W~A)w1Xfm*4VUS3+@QR745Ct4YGGJuEQV=@!2+RaNDas`mj_Ai%2& zu(R8C$FQKSsF%~d=IVjPP%e_eX6p|-*fPoDKCZxivXM_G;agRoUr-K83wSs=4IB9N zYwXdAQa+1cS;OvfiURi^#_81~Go|@oJfGfg{)W6k{=2N>|ChI#rLXm}y(_#o3d-Uq z{(UosSKpY4snIP8pZry0vQl>WPo6wOET5l@vN9M8zbHQ+pY*nvJsv5)QSM@;1{DRs zJ2uDx@fL2`%|wB&E4FS=igqt*IC%Vnwi2%A-t3t7=#i< zKy(f82||i=&`P~~Gfy>#ycT|iTu2D#kA-HOrNPMAipSaUSpakau2x$WxZi%6MM+qq zhor$iA1O5ya|=~F_xSVuAxSrdUc@&)guLG7Yf~1$6JM|!ClQ$ zD8y?D^QxOQAtAFjQQAB7wRb+N0|OCnSS^zYy1dLBy&rc?A^Qk=f%pd-J} z28~^z7~sS{jDmdLZO&cr_I=YzYbk#oy3kSQki-a_wioe}+j;tb>fW@agh%c*QLxM)+h@YNSm(>Fc0L1%T7u$ye@HS& z;D_w)RyS`JemSRE?a#Va3!N+Pa*gQgATh*G3*C+3Tm@Bkd|nh?wfc<@;f2}Gc6QP!J@>BbNzfE({$Wz2!Q#$b8+0MML$Mr)^5vL+T%+Yq^ zP9X88%bTok?5}aPu_L~}DUo-=(+WOmw=&5^#i+TL-FouS@bbn6q48em>osMov|aU1 zt#@KgUp{ws;Mwjyaa$>-GLq5%H~&0od z?m4Kq!weFhP!S?FR&^!1t)GJ5%gY1#9_w(t57%qExR@E57clv+OUgfPj>YgvEJgSk zmeVGzD%{&UZKL%|Do4U6DPsiB7a6Yua?#*wk{QGM(K|1VQya^P%}t7DNWYGe%r7ou z=uAe`Y(z>OdDFCBWgxs=JJXY(xDi^l4eyvJ`p>8nFtS*uCswW6h;79U5773wf4Ulf zn}}9H#=s!$Dv?dFV3A$<8lT{}Q)j#ARp)3$Fb-XQ!R|bu@kes$$&C@di8|V^!a*Qt z#f0H0AED*#`z{SXXL&XfD@aa6OGIr#WW)UdDy;ji*$TX=Z=oI}^Y88qZxiL$W>SJI z9Um0hrR9677AoDV@z8t)ni&m6DY#w)oAQ6FUMG5x{^Jtq1IEmQ4Z-4F(r@vpyJf1x z2JUs&?!EA(>HHXD2q9m(=-doXJbmAMKI7$S54W)P{FI|IaBqp|JFzu{M}h1hvrS)~1#w#kNY%aH4^K$&D=Xz=AGg2OPIA@RWr5Cw zh=x{(A^Q?F1ZdsSoh6Ucqwn;%e-IiBqE~yOh6G| zyZG)wJ2TPci*F2qiAXOVov&Wvxp-`&{-^EYkx2K!{|`@iPx_RXcX++^ipj+_zqmFE zx-6XVTL0oFB6H!(*GLCJ7(h}mRW)So2^I8P_OmUg0%i^cc z09Bm=S^QEz6+OM*-#?UmEp8aqn-{laIO5BvPgia(xB-yNB;o51$OJk7z}7=4?n6b~ zEIC+!YP<=o;1}^7@Wte}2n(qK(2~T*m?dNE#LkG z@TC7fgN%gJa7$YB#DR3ezkTR?Ll)G8liNsr~8_;6~DJPJH;HCzPmeqO)-4A{I* z)_;ZEyoe~__HF)MOie~&VS5mS%4vI>ubNKD{JLPx4=gAL2|Iq)dnv*=@WcYpnKU}~vft*ovr4`VDf&*`B9cKYQ{hwvN`%l|K=9i*7z95aqb|5Pw zlXRiF>ORnBgwT2en{u`77zzF{dr``|rSw1>psSK(Gqz3LR#2g{j3U z2+!F5PJ0kA>wzpxvqKv+dX}s;uoD7-X%+{E4dU*QVCmp*EAuWsa)D^|GO;k}9Tz9S zP@(qi%m<(WqXio51a?u;ZLMY9%vT}WzOywBsWEO(X^+vVPM&zL{uF@=hIuJU>cSNU z7m1grU=;l;;6lKk!-(uw((cjH7KYjtgq1HB((6M%l+m&oHPt=B0dq-T&?YTzf7R^b zFnuBVnuz@4NWR)MD<|-k9RYPs*k>=N6N?$R$i8s&z_I{qtHZbZVgG4}n#DYz9yr9W zXH2d?nF9&Qa`7AEb`5iF;8Oc!n_9RUH+V5Y2XA#s4JJq1_tGxS0zw)1$WlY^i+k?? zRXzZuinYf<&G-T=dSk)29c=B{CZEdxEWvGJ;l6*fdwQw-Hd(taOPz(nGa$D3Tl{Ce zvLEmdgiItQCC$5m81Hxs(L|x|!J3g42rH`BIh&qZYS&y;x-@(>nb%@300C&FwaQ|n zX1$@>7r~cE8iEMtUZ4<5Tk*bB@2`{ID|^>Lg8g){^xw%T-?wi7rvk`&Zw+OKb_N|U zTt64mpwPuZ%EUd^;$Ve=9}8lUSKH*Gm@YIN+U>ETL^ni1K>;9^MS|del7w9rqnYLW z^LslZ=s_h^f$csZdD{xw8P*QxWM<8+s7|(He(B(jiqz5npMc?fIt(68jP%EHC z817ut1@zaT{ZCAHENj%T6A)L6e@`^~9Z6G2?9aFj#B&+qfDEpsd=7X*NRk7xG#!6& z1345(sM&KA;peHHouIvY0iro2Wd|_P{ZWDkTeH*a(EqFnxeJN=J$~Rp2T9P{Ip3m~ zg%kn18pm1KufpYem$-@*pon;`3}%AVd%+jFGaoMR0V`Gu)iG}%5yxHx9f5`;H0wU{ z{h>4n3!3@_`oDp^y*eKZo=-2R9JDr^8@^b6J^{At>({SAHoXX4{DXdl#dBjK)1=k3 z{aQrV@89C!qeNm^)k?MU5r8^wabML8Fwb@DS1*4j3s2iv{}atzUS5tqO4vZDU3^-~ z`%#%YH!jN>Tc}>0t+X0QV23D*=u{i@Vq@!JU9fvaQ*cddKt+_4rGUKM@OFgI9O$lc z%bJ*seLb-KGJx|J$h{X?SQ=yhp%dhVxjCp>TqoS@y%p@o0#E>*FC^;Q)cq=KWB#F6;`-WlXifF|FLuQBiRoF zdAQ0Oe+A<`!N~#zC01e4dyP%3$o3puBzqfRK4(W0nhRzEHYUn}i*!c&{lP^Bz3Fhu z4k*;M;N}A=bB(1h4eW)nIA9FYg=w#T@T$E4r7~@!Osfa|jtDQG5%@4HR zht~2ua?2AZTSq$#KLC2yp|RRowMAFKt`GfKZ;+W5Kw>9BTj^(7(SCZ%1sdH=4JaX< zx`PPdM)`L>Yb*Ju&9uhqR~7g?4+UX2LA6+pJ!9kql&N;RZEJuPWB`&2<$v;pMs;pY z6@5K{+i9Pi2kXduO2&W?c+r$+L{vn0cLuBEVP8wPlnq{~l`$EZ?)aoPB4;ts$8w%l zM3Uu>u}|1JIf%NpB+9l=-&*1(mspFBj|x8S1^hF&Vx^p(!b{`ygO({Q&jyONg`3^r=f)S+>?~4BOrF1FCzv)>!Kt>y zv1eeo-KN&snGs3GZ-vd1uT@lcLw$WC5F8oNe0R+@on4E&v zGSdB8pqBrRu`!`U463JjX=3NXPD?l+xDAN6eU)x~_7A@mumGPvInRkpEeho1Tb>B3 zrn_r@Ace6H5hn-){kyXsU(bILI)Z1btkf+^0!q7hM5#Kpu8%N^KqqP?EbN948;|M$ zc@5VQRCF>Q#P=w-*h0zH_g8WyjLC{iN0{AD5OemnC+^#quOc;R|Dh+kWv>d`s}|1| zyh(*mLg=Ep6UD4bY%z!rkr8ePs(5DogyD`#U3e0>Pv$Js%pgI{QwQm}F@cJK;Jw?~Hs`pFwt^PxTJ zTB(MEv7`S(-g`zhxprNnh++X1MGz6O0|KG~0@9^RFChU!vrvP8N|QhU3sn&dMS6!M zl%OPlbU{>*PG~`hqI3|Xcg~8>_l)tLG0wj;#`$sHKij>B?3=q>*Sgl4YtFfH{TI+C z#TSKHQodK{W!((2_T2*Ome!MU$wfvA^K`tWjHJB#RO!5D>%*b@*_wA(p{ZU=QIy*x7n$3K` zDqm1}oz8aohM(u6LfM-wIFkfTkNyV{+NI8PFmf|_&dvHuU(4uL|5T&Z zuPUPm=^07Wcp>cyIgJ3GfVqWtcDd}A&5j@DGAFA#&*yCPNMC9nu5xjUw0bbDz=F1P zU;0hh?DT&zP*lB<>Hz*J_DT+flk9gNV%vyI1F$@CY90$!S`tG`r!KCmm{#-fG9LHl zIe6MCp&~Hd`R!!ZDkEl7l*<{oC@9Bt%IdxLcHY;o7x|x!lvQZ_)%??dBxNfEj0>JJ zp7!3Rrj$giTsaboA)4ZR|;La-H36w{Wa?`%u z0;$U8+TuL+MwQ=c1@kP_4NKGgrrEkYB3k65!M?v6qjQZiG_-3$_9_JSCJJ>xn9A%T z`^?)%h@7Y2|H8MFLVfiPj8hD))n~3KDk?&~U|wV|iFohxZ{c>EM{5bk_=0WAI5cr$35F{t?P)Tqy%@Z4M?sEhN4TnrZ!YYCGAOP`KR zEdd^|@o6vltZ4i7rIZV;cN^*N583eo8LonqrEoC#U0?_k?XF!Hd_V~pPZ7{lCBVai zO!?Vn4)kIS5~P}~HMOf5jiTuD@E{&N1y=vwWSBC`wdm(3WIDjn=6AyzD2LaeN-wf) zxE*vC2=8FHu#j|;k1q)?o;~*yN}YW2y)L9_(6MzcJ!#;k`K``@RmFt`jAc;U>3I@3 zJV4&WFb*iCXC3F|b=DxyGWdYson-@|taQy!g#yAN?49Q%inJgC3q$-I{PisQ*V;8$ zDJyUTJCiPgLmty<_4Y#s{EYM*Dy*fczF&!@uwEc@Gzwtd^nsdTn3ow0(f|?|4h`Ka zVhg1M(!Z$Vu{F(&sk^rCM@HCvf&+Zd%Kc}oH=9jml4TPG0FZ}Jh9rq~c0zyP~%9Q?za zqEm3d8|Cs?xfX^0K z5gAQ;Kz~k4PHCIcW1RpbpO>un00&|}r8u>i1Fu|uZ7joDvj2zQ&UqPJ-Uo11`&bgjL1acPP?n5YlMn3^Aqz7x&C*WrF z*6QdfbvgR@<%(Gq*kXCl=uj~w;Fyh5-~(h2fMwnrHxW45)&-Z7mQRI zuCyJ<+Sq;5Vbk*PGJHQ&^%K*8Pq5S(brw`5ieOxYx@qJ0H>f8HD!Fx0Ii>j~3FvzF zmAIw2rwi9%o!qO(*oekijSxfr-AF^7P#Zz-C(*Gzy+!ENt5<;Q$aqeeywnu6EWKCz zbf5JRt`ZKob&-L>_ zj@;{yT7}&V()CfvcK|K;JG4ZL^tiVwj7t7(OH+m2Uj)m7Df6sw4M9)61)!RP$F9_D zlt3JVC{&^Cr+hNK)(uR4{ATtp0vR_3a3Jm15H!uh7_mg8ptROGJ$=1|?(ZBFrr6FX zo!LPLLIBIOYulL^m-Ih;TpOH@35_ji?yCFVuz`RBaDTA9aU4GFeEe%UZ&!tAuE6lh zQ@Dlpx#4fqLPkbLG>*K?q0w?k2?NicX3B{IM05cBVf?o1Q>6(@MY&{ z*xqi|N8GAbN8Y|YCc-3|#gNhcs@o_56cETPMDQ43ATX!74hJF{fkwTP#WcroWZ!R~ zuRPk~9CFE$D1?GqQ$qtQ8giZcST!K7BO$SkF`~JyK~RaBKU$3m7zWgm{DtdRWr4`a zYxiyf9EzdhA&_+gagW$I?dj~uc=d!prsw-bfXiqt?V||LFx5wWq7sS;y^x%N#n(d__DD;89Ket-`@Y5L*2Cl4Ml_b%`6Gf>tp z#J|UM5r44XCz`#x4Y!<#fL)ma{DuzimLEB~|Kge8-kKZS`bn}}@=WW|>Fgi=lucGJ z-vc1`$u=5E+&5GCh4Emqj86yaKpp^yFzi=YBIWmgY0$@kKT*oCoBH%MS)n|rFdmSi zL>c#gyMSAi`JQ$IL}7rXI2K<*Ar2d}4~Pzb2BIH{W+nkxu`t;K){9Vih(RZjJ9{B_ z|G$SSeS0|Y5!+jcgn(N8JEpj0m2ni>8{&^w8)SB1)Iv2Tf4by622PPq2oKmWSBn8kp*fkD67kg}a zZdh7=SBr#KqOj1W%39Z=$#u!H6v7E;K-wOLaqt8F_^*O1?Y+l(RXh~F6T>G?cvKN2 zQ_wJwJOb`+V{)UAV@>@9RAmc3QcE@Q+fB&asv^t4uj*>WaEt|m_4uDh4`nTUX6Z8= z4Z#3qJl*^57o0|ONn4+e7?^2A1NbUJ06=vW?hNt=)FV`#g6~pqK-prq1*lOKuGq6yuE)>3ox-JPwT7Wc~ z)^};&g5+!!S~wK~fYg@&>gGRcD%tydVh(EK~(cf>oLHc_HusNR5TZ+u1w|rhg2v4sd6eH{VRu0G-%I+>IytAheHK z&ksU3On#~N4lKVWK%}GPAyIOL{5-XqxB=;x=V(-22s?P#ZNdxMg#O9D0L;U-|*FZ%5@ z|Fhu_4;LYuYI$`ogf0Vx$TxU}4C?gJEoaD6fI-~<TVLR_1#v^`AczIpiSk1hSye&XBo7!(Gs45NV@S zX#j&9KK<;ChL!0oB3My*>fzM@!Snk$WUp&d^^@WFr&l<94kQgaWU>kI$MyLb?I2g@G2_gK!7xR!i2}(fCTNJ4N)1r(a z>uk7S2)3mohJj$Mv0rV~=EHL$oWKo~d1{sFQQn}y#oUbi?FnZPC=1F9=5i&q01Dh zZ+dLM8TA;rYx*5|Pj;hQr}ca{wqTg&G_Qgl%cnUzkuXQ<`2?j65Cht^)mb;dmonf& zrQofN$_wx=YZOZNp?WX8xeyko{fh;hbsYdnU>q^&9i+5OVkWFs8wPh^B@s;dPKw*! z7>gYr1miwoJUXns!pB`C?c-%6$fvv@(+&}9EqDV0o$F-s}QHkJ;piC4|V678nBl<#(*<({C8%H{wFv8iv^Uy zAr(HRY~PmS4@Rv2VoVq`6|159B@d~Kz2*IaTXn(VjLZfH%LHx^6O>Tv1$)xI>Fr;5 z*$i{OY(F%_X{g@NVW#C?(~yJij#F-hQ(_&uk=1YpT03xue1nz2H)bHbQGB=W0d%|l zbITd^L3=qIOx;0viJ_uaMK%-p>Yu^9yAK?<&3Xm?J?lvY{G`|A-E%AkIL03Q!7cq! z`!GA89PpR9$lUD5w(yJdOwxva!h+m}Mkjbk*m$bAvkiZOP%zP+@dZBZ)pQ3#KBPf3 zq-lVu#e!9s$9M-}_WlIK5;%$~ci8#b-L3S1C?=T&$-u|l_t;P_aZlZ*L>WY!51@na z)C`V=Hc2>>ar^>krkt#;Oci;Id3S9)_v9hcx)k>X!y4AO+EoZb5M=&Re!CAhA_1Gr z8oFM6_yFAcX|==FO8a(}BK-U+8W;Z)aG(8`g{W-}Kk>hXefU2~mWeMC6@0t3lXpda z+7fE6|MEp}yNDOUoj!F#%Ua-3OpfA>GOL#HknYmxZgMuLN8CU5nI(k1PORs040*4T zLE(vs=Hlk&E~q>FxUKQF%uc3`U5p%JpnMtf{J%+x)H>~8h?TxTIq~170tew=t+fVA z6WHZIg3_WZEzZ!l>)4gZm(+?F7JpTpKq#WaJpi445B3L?WX(2!Q5HcO(lK{64Azqu zFsdS)A()rm&)|9wk&WRse1)C8o`IZ#phANYO)E_qL12CS$dVFcfB z=6U)dUWywi_n=gW51?ly z1}NMg`oy4;0K@7BDK{0)AsgSz4~L^o$-DAw+j82n3v#+{pMaF9r+9P$-UcIgdsM8- zr%GP@4B5^2^Mm5Fny539innT?LNO6^@`1+`768Xe0e`5_(YGJH2Ad8j2AtG%7;^t4 zaEbj4>1HKRfF$bR1IPgiCSpqqI_2~GutKBub6}M*XlEmOu6^&-zx*^jXsHC@1`x@7 zz4m1Tn##$5jlW<4x3;B)^Rw7FyNPa3>+*gj@CNk<{Nxw@l+OqhmEVF-D2rZG*t=`B z8#dS~5XQOy|0>8f130cJpljt>c=%lWD7-wwd8>DwGDe~_NUtru`s}=7UIMfTpBCI4 zwex*Qf&@r3A%$rwOUv9Z&fl+JZy-A4u?zTM zDB0RQBpe_Y%$x0lWI-wtD%zu$t-tI39jKvt!J_wuOzR(G$zcVwh1BbpA!T+?FFxSH z+ZA$&O9VcFplz=Y$HY8&zvAcgVO z1IZWar)1HKaM?DeuvMJ8iw*-=gY&=!;_tc-!%L(-y)JYMjzVJ+H>>_L6W(Cv!WTc! zC>pLm_7dUqYf7M^I|CR8KU=|ZoVDlB%D`Rnn~AqJWJe>qlF%^mPW#LeFsQrp`|B%N zHOEN9(>?1(6&_1zj&}}HRVQMlYWo$YgtBKeG;d7*8kvvR6Kj*eACYJ)V^h;HurUBT z@3ha%Os82Ghdo7-(xA(Pssl4_Wuh4EZ;jzM0R|Mq&Y&2H8n79QN<}bIO4Z@(lBJNP z%ay0zLX`I%tP$3YGhra*gb(wzY?mD^@2iY|D`*D15E;=9|MXEX03c)`2aLobfm#I7 z!1UMWiWsM1K$;ltbk^*Qu?$ebiw00L5x&$dQf&h)U(T;x;u46cey*P86)W$7EWawS z+nTqbq;u|D_$@FX#3VA?o6`O)J`mjk_~*;)Ef)GXCOodbAhguE=TgK)i{hsJiz?U< zOrh|SNP<(kmUr-AVSJJO1{5I@B3}(zRO`U}*(ix^=@V3aeZPn`Wn$ZU=ODj0b7vOPP9LGxQxLQ?H zH?tv&fo;&ZMG{^`i!&^--A}sAYOm9NGgsp0h%X9cRbcc$y{?g!QR|)V^1(n^ZF1tK zA}T4G_QWqIVdt~tHg7?qO?B1G851Y-$xWCi@s7Du?wxxoR-s7@r4V^MUeyD_(qfYr z2|v^GHsRlle`RD4J7N&e>4M6QJ=M+^3mln!`6J&BNPkbwEvp>UMP8o^u^J}96-K*y({O*62Q9q2F>iU~jz~f>%K{QP0|MTq%nPc%4 zblC31Vk#Z|=M$}iobwNQDwyrS|Hu<~Kd>h)D6a$)%esh$W2fs+#@pXrLp?c+Qey!P zU5gKJT1wuQ5}coyV7W5yoQ_`7Zg26b5Fi%d593bEAEb=ARxY9t`QRHiAd8I(zlrr< zKQcZXWy`5j(fFeqY@Sl05}@Ca<-xzBl84_%h;pKrnL^H7{)=NE?q?e#(JZ>6Q&nGLbv^Ly9Eg&5jYQL3W2<^Y9mlUGMcZF4 zJ+1CcpZD~ncF1=5AI5)cxOl?zz!=iwTGt3su)W(gg?gvh&z%<9Q8oWaP`;@YS6OzH zv{tCgom_UAq7?t<%7N(g{6k~-Tq}VnnWQgTmA7!LxWPTA{M!0<&|p}L$kmB!?n}XV zU+UaNq#V;^dClC3ZgA(Gl0UJ7>5%oVADo#nF|1(*3X4%?Oad*fRq9;ubBai4!`;tQN`Q4CiMZDEW3x9z5I5|%|u?F?+q!H0Mu4tXQ zg~(F*m3`F(pOuSx?^)G-%STuxMzF~u*;%jIcNSwczB#$tT>AQnP>uD=_#W1prGUl# z**kK2jM)r^IVpP40VXf0&xFx$YqMiAX`N6E78O+yH9qhd8GMA!lQR{cmR(H42;-c? zIsAb_0A^r!l9X}=w6!qxpxT~`wWgT}i5hH&4qs*x$*KJNnfG{mjJ=O63t86WhN<@7 z12wdl)MLo6(nlz}kvYaYH({j46?e=I;up2tK_9+U@kl9CWbn?)TZ@G&`LBq`>Ac-? zqVt9cW+Gqbo?c)4HRdz*KHu?Ik0zp815#pKigK4!)?VBMBnpbqmK1&~f|V)X57`!j zj!fvk@vL39omgTp1*Y=*H2cHW6itF8Brd!b3XR7OK&nl0u}J&oui|nnJ8i~y_;H$` z$0e5_o_x~j9cFCi!`jm*+PLlvGSo=W({bG>Bxx{hSf*a}O98wVL`dmirEfx4zJitJ z&gctW-q{N3Y~ALXa4hBqdqoDL-o4l-yF1=9U&!lS`&=R_1J`GHCvTyjWTPZu<@;z@ zCch>bQOT7ZG6boWSCz%|lyF7=c2`=fPlW0r;uox5yJA*zgS^(uJ(yqZOR0AVGOxe? zNYgiPQDUU=1=^mK=E=4NzlvW>WUtpOt5X!-M$A)vmOMs33YT8@O-wtNfU67?1GNM| zc?)ChbtmXlQ6wabhssY!_{vXh6X}|pMQAyDNdns)XchxrO)hVM_Wqe&Kcce!_#j_0 z5}lD3gcHQL^rdi9MbJ3E$9_o?pKylM5% z1)l$60U+9IE+1q`No$^a_#zQ2IzdWjd%ZLYLkG=Pfd1RW1SXZ zxikj3&i)4yUVOgLl__@Mlj_oO_R%*#4kcoYZ94P4Lu)S#rQdN-6phAsPBH~%o?*(l zMj2o*^;uMo1a2m$5#4Zath!bZ@kn>QX@A5zGVz|Z$ApfaEX!SqKY2`=58q07iW&?d zE6A}nWg)*?M=en zkyzQ&QTrD^0-44YzW$4)%7AH1QA3^ZueS*tan9&|ynmg~Fu-=bE{@;V}*gV%}D$huy(0#iuC2&06DtCr5ss<{Hg{ z&X)f=3+MSM#K}aMAjT$f`}Gq{3%Y{V;b$OnCw>OOH>Q1lXmuD)^ChdI4H&c$@25HU3gKGcG)CX3xn`^B>Sq zl(d+E1_Jq;V?E2bWLtufv2lZyn2;wH$)WQ>J;?^^E5PKOgE-L@iVBI@1~&VYOjl3p zlP*B%d_Rs-y|T`!f;yqHHV2F%xnsR9O-IV2G0xQDo^*A#d_9*M0O<x!7Li#9TP|M5}ltpJ@8+1Gn=NvE`}`&CVDC@xAb<0Mle>C5X?|ZA6cD z_2S%){fzCI{(kvuRZi@|U&QZ3Hq|ef>Ee%W>IE6$sE8^)d^H4ZB$Y2^d+HZ7`=lqUV-&`J zC}dmyEC2+w@rJNi+%{(CJgv;c-&AF(Y|1jiKmUG_XI%Qb0UGKn^{Au%60AotjeN6V z4fnM`T6v4RvK~|SZ4Z5_%2NM>E{(Ag=DhKd5QByD!0IqL^%NB$<>ZOP4`J4xH_6ms zd0`z_&Sbq^^O%rs-#;<)5OhdWt?4&Xo3*&^vY6s@T?T2#qEaLa)-s33ceNkyX%ye? znjhoCgiz#>LZdowIm&t(3TPWqE>TE7H_tyC`9h-8&ZJ7zsm?qWoLP{@wH-PSw98WJ;_FDnQV7CocMTAy3RSmaeJiXxxt zWBOH#cPJ|kQ1y_O#LL}kWdjm+c4lO{9ZQSpR&SsKVj_ zA*KXZ@lltOIUlp+@5B9c2mjZ4>s8%RGTZf4jWu&o*PACNN^M&@m$IxY;KByZn*G71 zkvV5m4xW?c%w29v#+TeWh!9}v&pCf=Nx1t`>N1Q|OJUGWPuP;>#%>hc@4TFvfk<~v zPPq_1HgcmtysA5|s&Hc~Ges|Ri@V?go|9O$#28@}mSG>m5&Jki{{E7lA$1B54e%aM=aDUAW&e`8 zjd3787^@WRETox@n1)83&~1ZY-Yia8U3i*3j2R;125-(Hq!&k~pQ%J=m}D68H&1#A zj5Ntgov*Ym z?hU;0x9K@(g@eLjxwvdpeBA9XHxi6PB$#r~p3ix+8OeJ|v2AO}{fM*1i2g*hTawb3L3?hd=%vlUm*%`h zjRTE$tR1K#PI$L5NElJ46>R^=xn1ahlex1s_OfuZ+G5&gUvdn zJ3Bq8F>`{ITym+i+WvKNdh8MjxXButf_zm}=Zv7d2u)8Tml8-aOq8OS6Ra485!%DnjRIxi> zsK-Oohf*bi)WfYCv=~Jy^tlrE@Y~Ria|!L-?CtM5iQ3!5FI;7MU`*%BOwvILrm5i| z?SNipPs^Amny%MMk6c5yx%OX4WF#mJys;Yj6r2xYNObq4a4s-3;_wXGULP4yPo<+22bY|4KS>^ zDJtL88onr|ST^G%7a)7Q)fr_{H?XlgO!3##eMc5rD#K-jzSw$_sJB`~z5UJHy)TtV z-!*C z)O&rbl|momghn3hb_jm=rkc61Ho@voce&@*_h*XnINv3$HvEVpD%rwtuzfmI5I zUY8?PVn4{-n=mYMPd@Nx0p9(%OMf;0$oD5?g!4PcSnt7omXskN9bgs0V$1+jBp<*R z>3%s{v?GD(uGiIQ_pV#FWT|Aog0czWPD;*!>j`?$nd1!X5=&EZ!a1cN8xIT*)=o67 z0d#M26+k-D3_FfT+k4`}Y&qqvC<+%q`%4+bJ$q*#3>>orcNevDvSxARopHHJ9E}s?SopezC-7k24hwv;X5>q;0Lj=MqKuuvyYV_=5_a~7vU@JC zdpwz@irMY-6VF1zW)Noa`?5w-S>-UlWDO>fzUT-+dWo$*pNX9D>MA*8o`kLycslkD zbF|+(iE{ZjVkZ{52TN9j1N0&nuDy%96S-X`p5$ufFx@o}(<`H$Le;v#zj>a)EgpKbuZHGq(n~$~$D1zAT;EQ0 z_@kDkps%iv({(>vVl~{U>DZYa;qK&&n1Tr^Jf?B?K_9x5ay3WxKo>o&EZs}i{bVWM zgo%pj`OY&iNr`2`@``V+0MT6=i4%1fy(M~e(Z+G-yzF6BonE)dG#OEI=kF(8B?fd% zNF>A!;pr)9##2{ItPG{3yxnJ$G-nW6#{H2ofd^M60Bx;0HgUh`gtYQiGIBr6^t&iF zog-^Z$Z2hfzzR?A6~<#8B{(C=k}Yq=R8QHEhS%47rJ84u30*Pci@pQFN7n;)?BuLR zE)=`_-X>gBa-m%v4eC7QyV4>9$SVDfHxtudZsvQ9#u5xl@zScNK=az}AFsiswp$HT zK)A^@wvUT*)0&?3;L+;Gjvq~KY%FQQiMUJYX#%f;L6lpZgLg`&fje+xL3V--Wp8up zQiPKnt$Hi{=vyA?<-g+96&T|(W4vPC<|JtZsmp;VYPz}@Wd!eCJ=(RxH7I|Sobat` z1zwG#wUo5PY(?L^otUnw^j-s2U~ycXH{Td+!D4H$jHM~yEh)( zWi^sAJp9>&g-e3Ww7JFk^76WA{4y3#&2HcGv-!VR0Ba3CazyUbZ{aDvP6M7I+LYUM&0i&35k+q3t=sxt# z>?exFr;y(fY6;2Aa;72=9d#VL^Wxq|e7HbM?wk~;vEMmg#vQw9!^Oq50t|RQQJ2xy z`+IV@L2gViju5^IcN7v5=kSrcM zH#pag0Tu43KlB19>CMrVBP1FJIU?>?urc|dPdM;-kvJ5POj@s~kEW@Re01Zn3ImlqBuE#1eNAR%1vMYGE#kBf-wWjvDrQDeMwv0L(+!0HRN9}!_ zvI{TpqKE&MK)h^SFabySxCYHtA*@i>+w6R_=g5Ln*LBYA1%h4%-STTrFJmC*x|XnM zL7p-3c3`|320>KF33dZIGt7CsDZMzwTZ6Sa7z_Fh5`B*pryb=f^47es0@14B>OM<; zz{YWN*kx333S77-81UXp+VshVwe>knT3;gt5R6ay=r#yw0$p?Z? zyN^L0V*($zs1R#%by`fsp*M{Xb?Le>?SlbE;is${ zxaT_{yJ`%0X}7eLzuLj{au+ad5gdl(BE;%9*IGS|Ex6S7)) zCMG_T7z*ss+7^k4y@pR`4`c~D5c2b4UdC&pkB0|g`&;@;dUL8Lo?L6?N2zxAoh1_v z6PWV6^6AyICect}n!4G1a>hsBr3*BUcuo!gJDoAgqDAP}mq=4qWbiU^!cn0Lx*Ju8 zP1S`F#@!NfzPnUz`QNvN<`z*W_kP|=ro$CaQBmDa=I%-1mY@d%rNe#4nr@p8JOlza z79BnH_`9~AwePg#XuuQtE}duJs#0R!JZ>X9b&^@he$?T#?0hLxk*lm7v>HZ(tEZfN zo)W!QdFIU$3k!Sxao@Ub`*C0AK1k(0=2~dml|T=bFCivqJP znNV^x_3S&To1wnCb*2!)c@?~uS5V`#D)MeP64A6UoQSgfyhj_e7iCq~!EN&^5(XKb3DI%8z&kJ%}aYmvleEka8ag*l%Z zS(mtiv`9M5ddTiPmYndDRirG18@#r&cS5;`bvu`H4t}~`jn1hzF0hoDF4R#Vzry>u ztVNRd5#D14pVua@?d4pFUZNCGj^UP1+uc|%`Cjo*uLs3_p2<01$V|4p;PH00(d%)1 z0bjSr^|$>~xs#o_-PYaT3pt@PxIxWw{lm@EQH_Qq9&JbIK z*zqLV!IVZa=8;e~F({MdPT8gwFNJ3pvkiW0jHQWTqvFGacM?C)0i>iTBY&HynlGM} zlgO2aCU^CPd>I?GsAy2i`3k&EcAz|N%|rcomJo#|Sst@S%@Ue*o9!sfT|zep6OMPHi{kMS+7|H-@?yGJoIk{jhNHUDDZO0B z7-mQ6L4Z8>ZiG5F8U=(8{)TLqVUrD`fsn%yZKn#tb8kO!*NY3!rB`az*IggY+nsZ} zbj>@Fdkmc{PufeoS@8fm5H^g#F;UwN8(W`G}%@#xH&V@5|oejxEu0x;Eb6Rz{! z0`^&#eO?v2!>gsoQ!NKwq?Sncc(KL6da+)A|KW8pV;;9dcbb`-*81Zmgo{jAI3;Xo zvA~Z&`lRNa?`)?uolgr!enk!;lfEl{eOvD36gFPE41E>wlIU5Ej~%Li=4*BD%m}CB zyv4_~&cRX7szIAjwoq9^ndX zzPu(oYO-$jGY#I_(!gyvk1W7|STcGcEb2Gcc`C8fW08A5n2UT9ZF33dP-n4_%p|`c zvo<{w4xg+PiVrrsMv?d2$Fj~C28`sZhQWY(hrdck6P{cb^~9Ye`FdEr?9Lz<6FG+N z77-Kqt0=9*q_Z<7BX1pMAP^1RT8fZv zq4VLl>#E$}4{gTJbB;v+iFy>hOf_f+tqHhO^~SpAaJlHv`Y8Gom82cLb5Z48bcdsW zz-?wlGE@LgGo7zK@*t4&SCwA6vQ(<5eKBUaN#gzHRDvX!uXb8CkRk%0b(dYP*Pmeh z4%lCCsh5sSuQl=~7aY#}A}ne2)RY^OJV&r@~nine*%J zYCqF2CBx8=tg%QkOZvgX)e5K4Y7+9;>{Po7F0Xk7jb)<5T2cU()Pa-t^g4GO45 z@JfC&NkyztMC5@+VT>|jHFh=n+nig24_UFM+s*s3lF=R7h>;;N_0yEZrq)?}{!M>N zwQb}rWfyV&L<_e{WHd5MsPcg1H^vb016%`Le@u|d^8nae>1iysG2C zVz2#76Ud(bL$Ov;AofLV0!lzkf2k66JR8ePGzZ4OPtYX1zkI&aqQlqlIJmhydjAn& zppcbaq#YaXrM(xklVF`mqd09leH2a0T-)i<@NU;wzYiv|n%IimE721pb3Pjijv^Z=+rfiY?(=!qW)?B>PU@D_O###?42@ z(2|nlRE?6>zyq(kO(8Mqvb&ihUK#!%b};Ptdo)VGK)3-6y3Kc3bXnQ$tmmNTbkH_H zUSM*!9qW-??)y!&7-4hNaoKkbg za_LZ9CJ`YI74p|m6|P=(KH(EBA-U_<+4?Mb3hZ(}6}%9%lPTY$=}TS`$6Z3EQ@^Bb z@wsbMc2{A%8*8!+l#RYLx#>F?Muwf$gFZMiw%Z|2>`rj8pTd)v4{kPrUIz|z8QIC^ zkf*zVN%ISPr?E1A8;%8&IP~S5J33>_>^l3f>|h`#r6lZp=~2q1WP>|AR+@9?z16Pn?4jkRTa$iSRG%-3f-F|_!NecS?)tMgro8M9)^b}0 zK2i*t@yK`ejK2t-izGE#6SdEF1_kT-0IX{u$gI&&<(jX0m!))sS?C}s)jp0X&kY+{ zl*g2rpF!}d6IQ@^PhvUSSmYL{=rPaa3}g@*$j-i~1nP>!vZYa~@rX${;@=BY;+kQ)tHsX)Fe{QE=ODoAF+sC^SaiI8dXxxB8RieZc z*^5G2?$GVx72P4(V)E7au*Is)8O`Z+;KS0CMl)(sjSB~pIo`YZSc+X|fq9i3A1A|! zl7t;Z@n^#_PD{Yggznrt2=iLIU!)MW0%->u~x7G|z0wEut zfg%NCmHZ7MA zFHYth?h22VO$_MT35>n;@3{x}vh1^ad)<^6awA~~xN#KgCl@Ib&GSke$GF6kGv4NS{_OHjJud+jzl$hsMNiFSKjJ5C3WdIA&2=;X-2AgD zG|R+AL(-!jQtjBZ(VbZksJm`nFx|23oy+uX6mw zJeyW=p)nJnc%JUO?c7DQJ7rI)gMPjOik1}3p~t`RVKlij8O9u?!1*3W-zojkVA7P$ zMj~LYK~Q$;p;b|8h-10&x;kbY&ew32f&SpG?dkwvVshiEIR1n|OFt zs)xEs(jD6HL8^*M)ib#xE-6&gZF&mFf8pQ0{GB3ToPlD~eDrBmqEJfokf=}P(?Mt> z`gdj!`_Pu?`UZAU=wsbn2BNv4Y)87+pxBLpU4RQHW9m9TAIgj=ux4^mZ{a6|fNFpIc1dt~t(KKwmeQ+vyrl-`>2r|@tV#pC=+fw zkW%TGK#lJ@I*jb;+MVIA1>>>%i%Tp7`TV)4NDy*uU?1?Euk*xKOSM4H6OB9YF~H7r zerz*$qF|tVRpetZR(j!n#o7!tLBhHFV$n%T?~@ZZDgDGz9R-1^FT1|YTkK3fzX?wp#l*IjCm006Q4CcF!NY;_SbhD!r_#8>C{58 zRg8$;C8P7E1Mx65DSjs4K)%PhvuDoy^8gfo38T)YzkfiSV+_gw4md+w%Ka=NLIH#( zfO1^51_d~H`O6s_D%NVZu!q3#2D_61?1 zEpW1g9>%u>X%b5aSj_(EeU|~6Q7!zvG7Le$L7DHZm>a|5ZPsYG?&E5_jZ2o~zqcrU z5Gf?>`rWL|V;o#!&1Ua|aR5kkVn7LPG_1#csVh_TLYIFmWz6wRU_3%2$A|B2!cF*+ zr+@W+aL*w|Wzw&cZOML3aZPFNKaKThk7?hxMcE!@g$%1QV$Jp4_ZP;D4#>>QTr2Wx zde0i<9E-WlO?`A~^ud7JJ+vZP8x?<+VQqE#$u*GaKvV0YWoXRn7-XnKxeq}Aqdc7; z+g}@$xoZ61pSnM!1|(+D|NBqznU^;G`>7%CK)AV=%Ae}%KWuPEs$^zyu8~&C{$1+B z(z5>%{^nQ?F2+k^`k&V6TS`kUJ1fF5&uZU1<$QezJ9hds-!9HwJLJ;mp61-XY^H2t zVseP{-RY%pgOrG&okoPChJ}F_Zp2>Nm9>1FS!?XfOm$J+&nqS8m9B zpkW6*m4M>` z$mfdQ+}Qxlp$z@KK_Lk3BY0Is8*@%!3mSd_Axfxsb)|1-sQ$3#{!#@xsY^o$P@+VTf zSM?@H5;aXz)=RQ}k5xR`BO&qPbBTRscGl%JIf*vBeBn7s&!yUPmlERQ#GULl&@V98 z(^f*>f|Th?$`E(9K?=h~d-T}HI@T-9&%Xyc%n4rf(Rb_++A(!ZMow4*?^ z3VMy|>EeE%a4NWdF9j5a(T-P)^ACV|x8TFN4#Pc4q4&TrO;!nF#ep_#aq5kaUY_8Y2*(ir)Yp zg#G#h85;OTOu*gxEOwcm!j7eZh4j;FJk=^W>86RE-R4^XL54%VQ|G8Y9v%xYOY$!e zgWC;i|F7=eDk{#XYqQ1Oo#5{71b26LcXxM(;7;KLNpJ}6?iSn~65JsW=r`x|_qSa1 z=3nnzT?Ut*5eWaBR0tr<7UV(CrVc;)C4lROto0TB*xLEfDj;cpd&^`cJ z(8FaLm zSYBn5q905>||5T-Pbh14dr^OJ0BSRs?oq!hL zpZFFYV#L{o84nx#s9}}D@H!-Y4}cwuXjVriLdFJwkl$_ulvnn*KB#f+f-Ng6q)?#$ z4e1l-7&jasYIs~ZxOiu6y2nxP1~dpj6)cbMn~4=Ne8+he&*5DnzWevyt?zSdo@t{W zJ%I z>mRz_S+}>tz<}=D4H|`)@A6ks!htyYTN}bFJv=spA5x&Zv$;xkT}ZEuq+Tk|fN#gr zEZDvKs|hTTI{B56i*el@wWWavA9Kub^yZaptD)3`U@Y<_pG`II6+kbgA2eWZReCe8v40( z0f=zM6FSiqPMe05YPs`mzdMyY?2FJ46M@Z17f+hDUsI^|}Ew zQ69JB??cn{GZ%M{mjy)U^MGd+AD_STf4!LuW0CJc24%jbG0$x=&#N&J&tqnhh*)%l znkBSW9339xV?!9G=zFW%Ww3sZP1|h*#F#|d-|Yhau1m5AUF~jn%RW6E5-xIa^A)@P zHOu<3d)L+SWK~9jZq1_7rV@Sy<3RYfbbGSxs)P%&0Y?%ZNlcy?tP{_^1b8W+JyixZ zN^|j>CZao7dqaDQ1snjgPhUsT0?IpvX^Gs_h)Sk)UG=*t3v%qdr&Qb6AP6;Q1R|haoZ-z0C+i5>^5*`a1+(ES&DB z3&?$jkFOmC0WB>w)MQni430G@zM%+%wmy(LVCDK?fw>^yR+e~;yPQ=oHAl^yyMBxl zs;mYev+6lx3<2x@P+K2j`zsqNp~-tC_|Oz^aIAND+Pf1fnl04K6f=_h_2G1QaG=w` zF&%h9+33Y7&PsT{{FM0fyP`1YcbhEtK3p3)KP4;uLXFNM!=+v!^F z@A#E2i=Td2*D7Zp0PBjcUm(7*5b#nGk|oAPA0Z@+0z~^{VI^SQBND%Xb<4G@h@a37 z)8!lj_I8)H`yp*W{2g7d5}KT={Ln`c>r;(Y8QcnI1C1Y7Xm&^_W!xt}7|~jh5HKZ* z!g-AqBY&p1Sh-9J4cyy|)inGHC?{TNAX?*AK&*Ar#B|12d!EJEcrxEMKbx<6H=<|I7mL0DWIEldWz--a(?)J1zx_ z!OtG7&B%`{K%VqU3jMs&`%YB|A8L9hjujKxt>{XxvE4eMxy^Z>pJV5h{F!rrq} z{^J9n&}_p{ow2_#2~Xgr&}ic4DX2^+Ne&~z;Y;MnOzZY>?m6zFZ;KV4b4;{II_i;IA8c9nBo9_nZ zq?@kD6ar{z|77K(j_7%gwH~2)BL)Ys#W>WUz;6-oP@XWoL^wzOwPBhJH%ZyM+h6pb zJIsHdb6p|r4&n=vP=>_l43m<`tof312{!7ar0-ZcY}MQDL^0uaKAr2fTRq)Y=RnKs z++`{x&%!=kZv621^|(`xTdj6;4qrGa%ACsWe6u`%z?Wu^fTRFy{72 zL#=!XJ&7`HBpS%Q2LW0#z!{mIeh!?*mA>zzEl!@IOYk(uG>ZZTKR2;3!+EjfXdLOS z`JL<}-=m3ch3OD)@DG!Tc-ZM%Da63NQEv>g`Fw;qbHx^d;SeTV7ozqZpv3;(VCu-a zqp{ONWMi0FPrKgI--Z^1BT?U3y-VC0bJj#CJ(IkiwXNx4jhQn~jgJVsdM9u-XP4|} zCim380B?(Kb~&YiI$feHcXwC5LVn69v8_~3i3kwz>fg-eIVq~%4N``R5FXd&Czuuc znZ0^fE6#cp>k-Nl>JHqb@S+^eYB^~YKFNyQ#Du(^2!GrZ5~eUD^OSz5h`C4DAWmc| z!M(Dmkf!Gs!!8JaS-uVVO>Rd~c#~x?q2j9n^*6L7xi(&j)c34ykI4_WAZfOR`U!S| zWNiey(vCCrK#xo>6Lm3TT-DfPUXr`jq#m|woed^|Z$oGL z{um)7M{8bJW+ii40u z98G5-3f7uFb^97CbE(%s@3~D5MepWu0bBTT+kDdyIrHs@`|+C~!}5gkv5}{86+s=n z_tlqxKA93F`=GbmRM>*;hbOsry}w)5@rDZyT6bqC=hqFNMvs)}dX!7#o|NjW|_^1Yl@xW!{Kg+R_gWaM}b z431HX5Gl}OE5SqlV-N^=;6u@5PpNpZ8hp0-U#fLDG2s!G=Ka;Hn zBm0z+iAMzhshLAe(owgF&D|RUJr`;l7QulLe_2k~WiFwSb){(CExNX17Bh9Bu|nYdGVJWC=SH`_Qm{p@$au$r zu9PZ|l_D;vatBh*UY@dd+kDG&m+3|v^WMuTBZh;Qk3v|F8!tB-R`@ACcUW&>z?j8V z(^pePl4B_%9r+jY=IB>4Gc^yQV@4jo)1N2c(j)1Zx_O}H#k6*VyGfbjD}|jK6RBsk%V=2XLWvwh*u&q9^s!+((g^v-RUw z5P7f{saa5H6Y)zao3>Ty_>$}o-qQp?HOJrKOu}@_F$ZX-to76jvPLp|o!FCqh0nm6695=LHLK#~^L0v&Me=%W4$NWaI_VkTDXFa?Y z|7G*1IMV_wN^0tLh#$#_G_ZXL=q3AhWeWJ~9+Ioy%9N{gV6Y&;{e~*hIm|>X)c+*G zu7Yn+u;XiHb}Be{7l2cu3*NKNHCb98^kdV9~jyzS+37P zQXWOt*?1Eb!1b!GM9cvxykQ|zi~1&nTl29cCIlqpNQPmP+t?J6HklA=kICxz0;vG@ z@6ZP#x&3YOZg^ODlbIV2t~AiSAMc$i6k`|xNG(zceN%bjf86GRQz?FchxU_+aTHnm zu!;H1mHiXylp{;*UD$kP#%LvP#$@SprKR%PR=}AIr}ff}x2v;ObgLD%>H}^mwLu4I z^s}CHZmK`a5|vF2Cq28U8Vt{diTutt0%RPC1=<1!(!T|Eq!w?ny7=5a)8ThMVs*Yj zK(S7=4{0)K-(Ti^4MHUos5LRD`Sy0eQ698IZJea|zSp`n+1;tl*!7Dn$4UKd0`Ys# zs-tD$6L-=l-1OWTQ7nkBma7 za}Km>LdlK?!L&Uww5BF#PNnepGFDuqrIS-Mz%>VHoXy`)w(qZ1ay%B2l-Xk4ffe4l zyH5vT#~OSnb^_UQa8HC|X9IT5sU!xpU2llc0nFGTHPVYQI8|;+WKotEhJZv1E^N5M z@IK!ul4H$pN<%QSligz3GVc)uS+lF^HaH%-jr>D&;}(7eiQh64a)1~nvJhBU46D@a zbwZ0{7z+QTg?6pNnGF9rA7w~`O#xS*2TbQNhXJXaYMGZ$7-hEXbjnod8HEE}&wAEA zzeOc5l--YjqR#lBL(&vQR{3fJPZ8w9uZzo6M4{^T8gmna=enLB6m$R8?b_&GCr%MU zQK`r(hRU5n-SZxqSVFAWN6xMQGucQYefl9~+6@t@V@zN{g7bR}^Zw69tJIMJ+zI6f z9rw?_I6U;?zSI^uJmVp-)W%qsrK#Ai)vBSu)uM_@cc(eszR_`W<1C0kvMo~zDLRh^ zQ;gZt!Jn=&NQRpNn$S(?@Ooe}DFcR8_?i5G4e{}th6SNS}C<5kK@ z6u-z|j`0+t)JP5ao+k%GdA1nunq!3bsLU1LU^5F{?k7iMJ-n2%S%8m1HEdw2S}d4V znR$T34>NHeJ3d{9Nc12;U&3k^r)P3lL@+EdEb#zKWQn~qv6U|Zt{T)<)qpf+2f9;L9 z_)@!V7+X4R-*^SzE>e$(&XSRejlthqqsX=J?e2TkJ8nA1uKZB43DC-UyjVE4W?E%l ztoO2rHOrGuQ2e;7WA`?|#X)bm{rc4U<#p+1I%}i*PfbvsbYdiBzTn>7qAnt@PMa*` ztYzTcO;4W7@pr-V@Kd|@x;x(;@@WFsfx=c{zvW6)#QX#I&AoZm$%1>u)|siXRkkD4 z_m|6z%$}lr776_#mw^${(r0Nth6gweyF>7wiTp^Pa%6V&=z zD=B6YhlQ~I6chd_MKRS?gd{NP6bdr}x0q5&toXux4s+f8a|k5dPXzYV2|P)VNu*{* z0-sP2ow-a0pvYU?AYz?=T&~*js@1RQ`$ARD@!h3;>t5q156FS$@!IaSBxvzI$SRd@cGNuubpV56(EMG$ zXJJ5!FKgPtYb*7r2BZFkV&NSEBC34X%3kZTCAklZ6VX& zRoSoDpi`v!e1<;SRbzbOgAYPjysY2D)Y*l!3>RJ;3BO~Y zDLPIUnx@k-x2`_~o}$$3yD_Q^DeEGTK{Nu=a8kU+d*vAI(J*8qMbvMgN@65}Ba=tH z`hHTHa>?dd*Q^FINW58cD-#)s-g;7CRJ%tw5CL+~_F_ENI>hO#9PkmzvHQqc^h$%la*=FFV}}|3wo7lO#QzRQ5rWLcW~4mx45)_-14^kI8;r{k1}SBhN$? z>{IT3zi=DTUxZL?K*0$C{wun#bUq)?OasM@bLe=9o0j$WJfEJ-04U6qs=#L-J|{@| zA+CCuUJXeW9W94^m9kn)ONz|@)a1Gt@akSmz^RH+de{c^O6ZW{gJxYw)ehQ@W8yL_ zH87M@kXRw-3U)<;Qac*$lj^MGp=UGQ`pZRNp)#gen@{fDjMwLd_S+B$e@2_$Fz$Gw zD2`qqM%YT9umF+*^7V$k`KdNR?eT`S5;5yG+H^>yauXKNylK)?y(jsYOXWuk(KN}2{!8hK7hIN}v5~Ga5M2--7GPXaIW{f-Y4d*Gs zbm*l-uNZcSkZ8pm@PF?GCQt@_xq3WLp9ezmYwwWbUm6B9$=*!3@Q`)M7?XXp>XGCM zAPTT%$%Q1RSa9H3Y!OZDP!}u{IB3!``|?(UqQe(inZrL_0_Aq9@cxBZ5D5GDdoOri zLU+9fR_&yHYKFe}a7ynNa(anXn;Fg31LEFV=j)>H8qPXeW~Bzvc`u{URZA==NlY=C zo3{^1XF_~a3ak~<0dVeP1kSHF*9iSbvpwB=KhXnt{onRo zH!fdk1d`dS={&UhuYJupye|1nyu+gk?ScXZC}iJ7dS?LZVABK%9~8$w)MpPIuxd(- zyP!S7#7}tXD}i%|Z6{Td{<1(B@T?~t_%dgXhW@c;TnXKDnT{twhwhL68wkq3T}2k` zd9_T{hd%lPuaM)3e=s++ab9`W}mw3uV?2XXxma^-ZhkGc-GDs z-{wq8{7QzBa22X5PH<(Wvdl63a@coz9mFjETOrZh1z5Yl*NV%f zi2=eg?02Xy$7=6+%%tYP>=-6=P#nsjLE*2uumoBqG6LPeGq4vqkjkdF+YW|g4T!Q( zx~5$uNZ3)oTb0mNO^~x)u3iJ|Z;=;(ej4zrhjFvISNyWtZ*`$rU>o~I#^fRvL2T=U z$01C~Z%^I^imeQ}!K_bSqQg@kinTydr8YpLv4B7eVBHT5QhF5&b8M97Jq8S0WXq&Y z`c(n@ZK-SrkPlLkW8BBQ+VfwVi-17{#%aSz)r8beGs`waqx|xik#H<(rfrS^Nvx9; zA*wtXU53E0>R}L3D+7D=DcP9YNiug)s-jyS#i@}7NcUR7IsND9pg@s@96lrYEbraF zY3sA&>|I%e2a*Iks@OEe7g9_>1ugF5Ga){jY*;!k57q8ayNjwsofr;Tu4_3-4x!+q z9)aV17@T7#?}#Z0__S*dp%iZCTnQ5ULW$r?eF_wIRYNK!Tra>0TM1De;Qmk_MTms85!0sMlQgVVYgxMeu zZXTn9{kb|EJ=}b4V_uansk3h%Uy#KHfN`u3?D>f)Rz8^Vn13%f`8ORfPoB_}6DNLu z#Z)nA!iM+}M>lAI88iSV7jZ6%QRFa`+Lf~uu% zZj(5U>c}GB_1NanTCB1gX37pgdQm8A z`ZRdEbS^q(MfJ^5WjU4-c=%25I8Fmy4CwAdr{NUizd6Q-T+kpWTpc&j!m&8uoKrOW zRd5l)ANnTEH(c4M;b=2|21F)BZnNG}hShUvp`1`@h>8&6yhia42dCr>=d7ozS&mG)djVbZFs0JkO1a(6s%;e5^L;ylJYN6!!U?=?mOy zraVp?pSEc?_>&oo)(?BVi;UH zmy511RQw1viPP943008`;~Z+OIstflfOWl{bVj^*E%yY zS}Yos$E=X`O5n3LVl5fPs7*t+QtwfJ52KQm42n&IHyuMb4EZ6tL}3X&gJ$SJc4;5dWNLvB3sCnv4Or$Dh?9tH zt4p%)sBL3Jm=}GrG~$n}Fsby2X-t!!3rii%Y>_gVYqXlB9}U#TM77rd9h6U0$w~=^ zLqvr>l}Hy?Q&xt;*#d8GrrsOLGQ>%ezto{kEmnNQgS&q4%4>iere<;gdnnZ&k}lLd zU_nRcOZ~_y%&r25B7(b_8)~L=#rX{jtMEu%ZkBWpm_0ClWwpDUiYyFJhfHfPKzta0 z{amwQ(SxluspCEJxHuK4)FO*tB%Y`JXr=nu+7N98&dp6T)R|QoyvDjLb&9J^ ztp8+9O0fEg6)GlgPV!f)hrhWLM2XJiF`%EJKdz5+VMpTkzdMGgtypWjH9N{4 zoA3+4f(xI?nYFx-nfy%EQ!#*>%touN{g)>{|5_4s679nQYEPK%j2zcwsM|}+@0nh~ zz8@{=i|z4p`gsnaTvtK44IE4zo9LYw4xchL2Rq;OzzrD!U%3*+TnRN2Hf?WD&C2LrPuQeV~rbX_>u_(^iA0f?~d zwJ;O9BcsDBL5{JDa3e-L~vW;GjfobF8cC3RNuIOr;vtBmo3#l~Csq>M#p|9#{{ z_nW|nO@mg?3Y0_^!^ISc1pUAq&i)U|rhpxxRTnTft$rP9y@xqbeW`+-^lGyW>@6N< z?k!rJcBH^a^f7iYsOjp=*FkYDfv$IeMLkNDRFT1Igl!8RuyvURB5Rmb?CE3G-qU0P zzj4i>LPL<{ZIH=nF_rMRt$GO2DXNo9qi>z?{1fH+xcVq%S@|pHLKqt1EL}IZ)AC`5 zxNmGy2{_Z5zfP$L`V$0BkwAyI!gT#`w<&1JzdC9cu$MU`W!E$!qLXJ6BBxRcoQQVW*!YY& znQWWMiEvKn#}pO^6(7*&HHqZtyOMq|;u_hADPK-d`iGVqm+dU=V(VM|tw4F1h-#AA zWy7KX*N=!HF-*1S+b-hwiHu*W8g)}ilIWsdRfOqXb2g3o>AFFZ>7m<+>=IxqFKrgZ zlbjwX#&y`A#xRuENno8%ZYo90)X<bK@ZjK+sG&X#O5@{l3Nc z4QnnK&Q2v%!aag>4)sNo0oM%$`r1L39jK%J!vTWKl3gnj0zAInn?+o?%fd6z;VI#b z#7nf@bDe@mghN^}Gjm^4eg<&Q+iTz~$qTCJeM-3opNA#R5rL;5GF7kuf(vgUi~Q0) z7E+-n*iOVSB1KT)<}FwIb+`Drmd?MV?<1J)O6WNW2Zt;|*z&wSLK_W^2KcZ{p`f}z zyG0-*7yc7qjX7nB|9KG%2K+#THOvUXm;E);Or8&U;Q+l4P9|L-d}TX#+m)(2+u)RO z5Up1{-rZ8XMFDOQruaJ^?ycsdifdR%OakSqzJ!&aH9Q)qBCbX!GRR9j?r@h zJVJM{j>fN4{}t!lrRuFcMJ=eD=t82Gj^s{2yr|HEP-KQKmvY z2&9#(7BVSh{&+3{?zc!c^8#E;%}eY(B@S&b6sc?~4bk8WSf9^}LE zZJW_xtvrh^%Ro4ccs3G;JK|Brb)S}4_D{2zV&Y*i8!jZe5X!?P=&s3*B`#ntpAV5= ztk;S7;o#FsN_tE>Xx*nsz_l;MXLJ5 zdxe7p;b{c5LLauknksPwf-fLnw3ws~I$OJ(;gcAUImi<)Mt)LG_U>2l&oTl~&yS|M@{4|4MzF-cifN7Y*!W89w?hz^^iVcSVl-rz%s2<(qBWeGgZ~ zkk5*u!?A-lR%2awM-3Nn)EmxQTzdyLNUe{dQk{W@5SF&*xx5HEtab>i(O`ZI(1h>~ zsYs$2mtv}VW=?hu)Q$I}(_}E)UG4m#NvnsaRfj-PKozR z@9`wa)*^k)6b8n5@tk$61PV09(@eX;c%sD;5FY59iN*0wG$7|XJ}eh|II38bB(vsz zCb)z(by`bDM-joRw!6RQU$O9vb#iZWq9g^`i1(6xpGu$> z=Z+V2CCrAwFJp%A4%MC|6Y7vdsy~be7bzKkn+^U-xgz~LTZ16$=*AczPEmw_wmM(| zP=rp$6s8`QH3Xd;#+T#9h!V2ix9qQ$Qg*7^4kaf;=*pFYLxtJ(f{j~omTGcRcXvEJ zD2~P#MHJWgwRg|N$HD^UmvN3J169R3I=n~MW-ax;RQg<|GW*Mbksi>*sSvjOxCleP zIrV}Bb4bW1GJ-`BQ(hsT>?kg&{uMC3-<5Hyj@>5%q}Yv0c1pgcZsAipJ zD&$qj%1|sCnHNwfM3h7H$Kc<^!6Kt(EGW%VY_d%3nSB<3cE+4<|XLC2q zYRI0>Lv6aNGMK69UmdHybt>`lie6F%Hhf)Q^`JXQJp+&%wQzFZ+UCnfjNNkQ|V zPTIIq@cM!1=Lz9z4mAt;`kx2oo}Uv|7Ydl@xOpum;{{v<6PvDMUkZGsBpjyxybn5n zcUeF9F`u=m-!9-#F1?+8Ex|4Ho--sR@;bC{2Gi>>S&GYfeX2X-@pvH6byvjQzE_Eq zzFcSX;7~(1=&J!{LkWIsn);POO2|zK_L)!8B9LuLD8>ce7<+3<_>ex2 zhkL4D<<0IfW~#FIg{#iDc$^A(nF3S1`^}~F{s5~UJ?~S0&*+}Qx4SZ6`y+|N(Ac~o zU)7X!+Rb(pxIN0zSs@cYvic}!&+{j1w9+^kNVKr?ym}14WB0LQd@$u7O7b2e6scpB zjNGLC2uE1W>m`ETWqy`ajb&B!&8Q57FdyVt<2vyff*wi{g}V|}3i#Kqr3lAQCY~q~ z%odrTz>Yd}9TCiXxoCOM^mYz7B0^EzgcQaKCZpT2mL>a(o_)M$dsMFd8%eVDcyU|< z3*yhxq8clv#yu<*!cQzIb?o52o?~6VQDlWwu&E31g>Qw zaP)A$N+%>2n9I=o{Sx;Z$b;h^2K!2xMI?6Sp|2@1N3xS?0Gq^zW<<*oty`=Z9p&RV zhE?|(WPv^GXNL0SZOP1{QU}A+wkxA@w`=Q#6C!W8zIV$gnxx%20oOP$B(XkQtPCRw zlEGIu>4C~dZzrIRgct57w&{4dON3qt(NQ8$PM4SLoXyWC)f5l&Wz2-KKhdfv%Dpxe zzFNf-iO0W=CAUEDMV3cny07p$`A`N>m@P70`eJJX0bW@eq6XR+zjTeEdL^>Gy|nSw{sQincu6UbCvj{_ zKBj$Q05(bNCNL(3%btaIL0@Ik(Oe1aWKM;3;3sCo%`bXje3iAF^U%ZnGVy}8#i_;}?K*E|57mjf4ga?~25A|lCyZbQ^_J25)GQuzC5_{uvJ z918bw*`LZ4#3FPY)>IUiwVahmwt4rNLRS|W~phw0hv4kK5aS=c@&RrPC` zSX~flK{7LyC)aCI^7QjoQyCzK4^rIe7a+<>hpL`q?LxH)Bh~pDwy$}Q!VJ=^ie<+< z^XmS1eL4sP#)=ZBsZKRZS4-Hl-A%%LRF6{}I9orvEjA|2zH8UM%*RL02oW|+3nVwZ z;qP>vH1%1hiX5Z5{VeYAcd z)2@7*8Z?cTGJfzb+<5%U(!|p9B4X$FqqX3%#vKura$75TEZiyLy z=G-$UK!ztOManNx*6-_pn_u>>(4oM!iiN2f5Wq-e*7xhg9AjE?_#2sY-wco$^|t~0 zaYiIn6GGcq}FoaN)Hih_Xw-U?{Ayn(caxFH-izeUQj^{L8%tKGTc zQuh2gC%Coa@Ni4R>;o%n>D8iccxYy!tM5A@*@5FsRO>B_u1AudLbL0~RuB52X|;!; zJV=B=$M(vZ9sSaHEddYV4n>v}EmoQf1D)?iwuus0aV$YE(0RRo`p2EXeb>8&8H{{Z z+M;3;C% z{YWwJ#oX=r$+jLS@MulKj(uY63j%KneV&xx!FZ8_!pXvw_?VUVN!R#tJQcuI2CV9c zZbPq`PN~E2YaykjGgtk;eCpeEy#Ol1e;gP=91=3(n}V^NT+Rhfm?Q4$F~8NtHuRxo zXH-6#wJ$DeoO4N?08S{g$}QQ3p|%`>)&9SNi&eh%8BPb&;n;F zv><2jPV6)&+)_67Y%LnegP=*mC5l(^biaj}P(ILocXi?5rLhPv9)6~Qa_@VK?QZ&n zl^FyLU7@T7A0sH%g{4L#yJV}0J6U9znvvGX1V_n226(8hud)*xQ>=YWJ<&rfkxT|YNfPQtOJ%xb75p1SQ z(M*KPrQEZGXCV~()I;TtQ~xdam7jpp5p6wOE`0v5J%n-^>g6_-pfW?Yq42suF#Q7c zDQ0rj46MO=VbMciK(mn!mw(v>1)OVkxJqY_#{KP}v8swox(ITAiGtZ|=Cn&oyg9Xeq;WrOfU)I*aayQ9TMupcA5^)IsY zh-~OZIV)awS0o`Cj?2@Mw^*DqMK<2W5bIWgZ}APg!elulxt*95eTZXn4x>b7n_183 z)F^*vx9B*eAg8Z>9gfcaMgN(C+WaFWOouyxZ+eJmT4@oy!TINMjXAZ3f9c7w>cOM4 zJYT)wSFx<H7*hseG`oD6&9v|EG|mrDeP zkQxKaLRLQZC3EH#3LwOSMxky=^cx}a$4TiosX`v3AA)xdtKkR^Gd~b*V{eb^A|yqO zPe`EGtrnS&Q1I?25*=^jUxItF)N#i+3%a?C3Z+ovCl3zgw;aL9wFt# zZuMBW111W%&XM2ePh0-cVcd1k*XW{Jbl-&pKzZJ;g4T1l;;cfOj5e>VmnQ97i>(lSCK zI9H(0!HbBURHG+Hd?Xf5C&{9~cNm>68nAcey9aMVhTM~C3{GB8j=WXXUu5Z?bgdwl zm*{gS6qk(&LBkCx&r`IlV%A#|UJ$UHz@nsu78i(!A-6{4gs+X?XC-@^VE8KAZsz!?vNmTE2wKtBB2`pz%~ z=py4`N|iApjtLDqPik6H$lV4HrnASwSLU^06KKPrZ)uTAFg zSK@6X@sx8uQBM6$*%SxD6ZGT!R=_?7i#Dqh9^%*x=&XF;kID$LJ)Q0~{UCm+U_KWS zw{=>dsG;uq&f&ThAgTTN7JD?04L_tpA2$S@l7(U6vH2FlSXX2v0B@=*anYtOiN|YZ zQ3;hB-ihZnZg@?aPEv7DnD-ED3KNd5HjF)$tlQy1$3=RaSRvJ)i+z=iSYm4cnz2n7 z0S2P0rh1#^An0a_e&`VtL$-+gdom8pbqyfm_~f+Od^-%pzVd0KCp|lUj6t7V?hx(< zCb1UhlJshvR_m!+Cd%kKe^}Z%e4(e^{$mc~6VzzF4hqyywMPx;K9vMaeMga_2wF95 zzkeh>IXgM9FEfFlJW8 z${3wkMtf~jDprdAULYY&k(kU%LaehmhFUcJ(K|7?*bT9qqG>>iOoNtWYbk-*9^RPf zZdxm1vf?m*)%KX_fQ*v=eGjKtM@2}fFWiK_LMcBkh#EPHB!x>;S=S6{ zcw`(_{v;Iii2M%Cw*{6>d!R()XT?Q?DyTAD%SW7;)h0pTz{i0TjCx)XPY zyBrw0wUr`SmbUtQlezUdJ_CT{U$)?iG#zl;g*65OQKas}Ki4$BfDY&&oUXy-akhi8 z^z|(fKd93-id(DRLOci1D2|yrE&PpsOqkF}TVt^(4?SF{L?R!;q7H9~3*a7Rt2)dg zl1fTR-!_+4;8k$4+7thENF;C{wT8j+Z89k(rWTzx|N50na0yzp_{(V!6kMBXpF$OE zwt9)Dm&No)gu#Py6wN^*dR&5lRs>9E#A}EibaSRfP$e@li22iAtHYA3WsUBRk|u0( z#OTJ~Bb<%k{GQ4{;w?-reXQ)hq z-lcj$&gM}d)z`K$p)=lE(apjSxyK5--I#RJ6h+)REx^_*m&IhHmGdI4^`q5!6qP*NXb2ISFGkGV;Q26+`>4 zt&X!(V-s^OKe7=l;Z*!;RSw@qfT&{jkI~cX=RZFohf@Dt!!hd}|APzW0tOV2g zzxy`emKWCAUfD|OfBoQL+pyKu)%$x7=@g>M zub|#pI^h+&T6+3o*FfMAB|oOB|N5OEYFdLf7dg4O(lL}pwV9pLf z&!BrfHSp^HE;-;;Q~@M~?*QiCSqg_zMN;)0M7pzV=fv<$=ldOIE~g7tzvy2T`5D>B z|M3s`70zxsQEl8S#KbhM3I)L>4tzoTA5Ed^rPA+}6SD&6v|$u1i%I|UHvrwCz}5ih zUYEP;doNO|#Qz zy(uI~92Ol0&|C|E)raQi8?7vYf`-dCsS8szl^nbm_76Im8tVg841T?x?tcuV_sEN7 zA>Dd?MgQ{ChhYEzJ_oD{27s#vDg_z<5*KI~`TT+hv_S(9ek3C9%!}JH8t)hThgB_& z+oZIXppVI!oV&-`tcPY#LyXFt9B p0cbitK3v2Rmw*po{=Kh-1Z&BMyuKj4)&L#>la*AGs1-8_`)_j@;p6}S literal 0 HcmV?d00001 diff --git a/src/app/(marketing)/services/page.tsx b/src/app/(marketing)/services/page.tsx index dc97db4..a6bc49a 100644 --- a/src/app/(marketing)/services/page.tsx +++ b/src/app/(marketing)/services/page.tsx @@ -91,7 +91,7 @@ export default function ServicesPage() { asChild > - 立即咨询 + 获取服务报价 diff --git a/src/app/(marketing)/solutions/[id]/client.tsx b/src/app/(marketing)/solutions/[id]/client.tsx index 444abd4..8e98b89 100644 --- a/src/app/(marketing)/solutions/[id]/client.tsx +++ b/src/app/(marketing)/solutions/[id]/client.tsx @@ -138,7 +138,7 @@ export function SolutionDetailClient({ solution, relatedProducts }: SolutionDeta diff --git a/src/app/globals.css b/src/app/globals.css index 49fb1df..5afeae1 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -65,12 +65,12 @@ --color-accent-cyan-rgb: 8, 145, 178; --color-footer-bg: #1C1C1C; - --color-cta-bg: #FAFAFA; + --color-cta-bg: #1a0a0f; --color-hero-dark-end: #1C1C1C; - --color-footer-text: #A0A0A0; - --color-footer-text-muted: #666666; - --color-footer-text-dim: #999999; - --color-footer-text-link: #E0E0E0; + --color-footer-text: #B0B0B0; + --color-footer-text-muted: #8C8C8C; + --color-footer-text-dim: #A0A0A0; + --color-footer-text-link: #E5E5E5; --color-footer-border: #333333; --color-challenge-isolation: #FEF2F4; @@ -149,8 +149,8 @@ --color-primary-lighter: #262626; --color-primary-rgb: 229, 229, 229; - --color-brand-primary: #E04A68; - --color-brand-primary-hover: #F06880; + --color-brand-primary: #D43650; + --color-brand-primary-hover: #E04A68; --color-brand-primary-light: #C41E3A; --color-brand-primary-bg: rgba(196, 30, 58, 0.15); @@ -185,14 +185,14 @@ --color-warning-bg: rgba(217, 119, 6, 0.15); --color-info: #8C8C8C; --color-info-bg: #1A1A1A; - --color-error: #E04A68; + --color-error: #D43650; --color-error-bg: rgba(196, 30, 58, 0.15); --color-accent-blue: #3B82F6; --color-accent-purple: #8B5CF6; --color-accent-cyan: #06B6D4; - --color-brand-primary-rgb: 224, 74, 104; + --color-brand-primary-rgb: 212, 54, 80; --color-warning-rgb: 245, 158, 11; --color-success-rgb: 34, 197, 94; --color-accent-blue-rgb: 59, 130, 246; @@ -355,7 +355,7 @@ @layer utilities { .container-wide { width: 100%; - max-width: 1200px; + max-width: 1280px; margin-left: auto; margin-right: auto; padding-left: var(--spacing-lg); @@ -629,3 +629,33 @@ body { width: 100%; } } + +@keyframes ripple { + 0% { + transform: scale(0); + opacity: 0.5; + } + 100% { + transform: scale(4); + opacity: 0; + } +} + +.animate-ripple { + animation: ripple 0.6s ease-out forwards; +} + +@keyframes skeletonPulse { + 0%, 100% { + background-color: var(--color-skeleton-bg); + opacity: 1; + } + 50% { + background-color: color-mix(in srgb, var(--color-brand-primary) 8%, var(--color-skeleton-bg)); + opacity: 0.8; + } +} + +.skeleton-brand { + animation: skeletonPulse 2s ease-in-out infinite; +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0b6e391..16c4c32 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -4,16 +4,17 @@ import { Ma_Shan_Zheng, Noto_Sans_SC } from "next/font/google"; import "./globals.css"; import { Suspense } from "react"; import { ThemeProvider } from "@/contexts/theme-context"; -import { GoogleAnalytics } from "@/components/analytics/GoogleAnalytics"; +import { GoogleAnalyticsWrapper } from "@/components/analytics/GoogleAnalyticsWrapper"; import { CookieConsent } from "@/components/analytics/CookieConsent"; import { PerformanceTracker } from "@/components/analytics/PerformanceTracker"; import { OutboundLinkTracker } from "@/components/analytics/OutboundLinkTracker"; import { ScrollDepthTracker } from "@/components/analytics/ScrollDepthTracker"; -import { OrganizationSchema, WebsiteSchema } from "@/components/seo/structured-data"; +import { OrganizationSchema, WebsiteSchema, LocalBusinessSchema } from "@/components/seo/structured-data"; import { MobileTabBar } from "@/components/layout/mobile-tab-bar"; import { ErrorBoundary } from "@/components/ui/error-boundary"; import { ScrollProgress } from "@/components/ui/scroll-progress"; import { BackToTop } from "@/components/ui/back-to-top"; +import { ClientLayout } from "@/components/layout/client-layout"; const geistSans = localFont({ src: "./fonts/geist-sans.woff2", @@ -133,8 +134,11 @@ export default function RootLayout({ + + + - + - {children} + + {children} + diff --git a/src/components/analytics/GoogleAnalytics.tsx b/src/components/analytics/GoogleAnalytics.tsx index 09d9099..73c473a 100644 --- a/src/components/analytics/GoogleAnalytics.tsx +++ b/src/components/analytics/GoogleAnalytics.tsx @@ -2,16 +2,28 @@ import Script from 'next/script'; import { usePathname, useSearchParams } from 'next/navigation'; -import { useEffect, Suspense } from 'react'; +import { useEffect, Suspense, useSyncExternalStore } from 'react'; const GA_MEASUREMENT_ID = process.env.NEXT_PUBLIC_GA_MEASUREMENT_ID || ''; +function useIsMounted() { + return useSyncExternalStore( + (callback) => { + window.addEventListener('resize', callback); + return () => window.removeEventListener('resize', callback); + }, + () => true, + () => false + ); +} + function GoogleAnalyticsContent() { const pathname = usePathname(); const searchParams = useSearchParams(); + const mounted = useIsMounted(); useEffect(() => { - if (!GA_MEASUREMENT_ID || typeof window === 'undefined') {return;} + if (!GA_MEASUREMENT_ID || !mounted || typeof window === 'undefined') {return;} const url = pathname + (searchParams.toString() ? `?${searchParams.toString()}` : ''); @@ -22,9 +34,9 @@ function GoogleAnalyticsContent() { page_location: window.location.origin + url, }); } - }, [pathname, searchParams]); + }, [pathname, searchParams, mounted]); - if (!GA_MEASUREMENT_ID) {return null;} + if (!GA_MEASUREMENT_ID || !mounted) {return null;} return ( <> @@ -61,11 +73,13 @@ function GoogleAnalyticsContent() { } export function GoogleAnalytics() { - if (!GA_MEASUREMENT_ID) {return null;} + const mounted = useIsMounted(); + + if (!GA_MEASUREMENT_ID || !mounted) {return null;} return ( ); -} +} \ No newline at end of file diff --git a/src/components/analytics/GoogleAnalyticsWrapper.tsx b/src/components/analytics/GoogleAnalyticsWrapper.tsx new file mode 100644 index 0000000..e99489f --- /dev/null +++ b/src/components/analytics/GoogleAnalyticsWrapper.tsx @@ -0,0 +1,12 @@ +'use client'; + +import dynamic from 'next/dynamic'; + +const GoogleAnalytics = dynamic( + () => import('./GoogleAnalytics').then((mod) => mod.GoogleAnalytics), + { ssr: false } +); + +export function GoogleAnalyticsWrapper() { + return ; +} \ No newline at end of file diff --git a/src/components/layout/client-layout.tsx b/src/components/layout/client-layout.tsx new file mode 100644 index 0000000..a2895e1 --- /dev/null +++ b/src/components/layout/client-layout.tsx @@ -0,0 +1,16 @@ +'use client'; + +import { ReactNode } from 'react'; +import { PageTransition } from '@/components/ui/page-transition'; + +interface ClientLayoutProps { + children: ReactNode; +} + +export function ClientLayout({ children }: ClientLayoutProps) { + return ( + + {children} + + ); +} diff --git a/src/components/layout/header.tsx b/src/components/layout/header.tsx index 36dac06..144e4d0 100644 --- a/src/components/layout/header.tsx +++ b/src/components/layout/header.tsx @@ -4,7 +4,7 @@ import { Suspense, useState, useEffect, useCallback } from 'react'; import { StaticLink } from '@/components/ui/static-link'; import Image from 'next/image'; import { usePathname } from 'next/navigation'; -import { Menu, X } from 'lucide-react'; +import { Menu, X, MessageCircle } from 'lucide-react'; import { AnimatePresence, motion } from 'framer-motion'; import { Button } from '@/components/ui/button'; import { ThemeToggle } from '@/components/ui/theme-toggle'; @@ -75,25 +75,25 @@ function HeaderContent() { return ( <> -
- - {COMPANY_INFO.name} {item.label} - - + @@ -176,7 +187,7 @@ function HeaderContent() { {isOpen && ( - -
setIsOpen(false)} aria-hidden="true" /> - setIsOpen(false)}> - 立即咨询 + + 咨询专家
diff --git a/src/components/sections/challenge-section.tsx b/src/components/sections/challenge-section.tsx index dd9669d..07ba369 100644 --- a/src/components/sections/challenge-section.tsx +++ b/src/components/sections/challenge-section.tsx @@ -32,7 +32,7 @@ export function ChallengeSection() { const shouldReduceMotion = useReducedMotion(); return ( -
+
{CHALLENGES.map((challenge, index) => ( - + initial={shouldReduceMotion ? {} : { opacity: 0, x: index === 0 ? -32 : index === 1 ? 0 : 32 }} + whileInView={{ opacity: 1, x: 0 }} + viewport={{ once: true, margin: '-80px' }} + transition={{ duration: 0.55, delay: index * 0.12, ease: [0.16, 1, 0.3, 1] }} + > + + ))}
diff --git a/src/components/sections/cta-section.tsx b/src/components/sections/cta-section.tsx index 29d72dc..6cd8e6f 100644 --- a/src/components/sections/cta-section.tsx +++ b/src/components/sections/cta-section.tsx @@ -1,9 +1,10 @@ 'use client'; -import { motion } from 'framer-motion'; +import { useRef, useState } from 'react'; +import { motion, useMotionValue, useSpring, useTransform } from 'framer-motion'; import { StaticLink } from '@/components/ui/static-link'; import { Button } from '@/components/ui/button'; -import { ArrowRight } from 'lucide-react'; +import { ArrowRight, Sparkles } from 'lucide-react'; import { COMPANY_INFO } from '@/lib/constants'; import { useReducedMotion } from '@/hooks/use-reduced-motion'; @@ -19,46 +20,158 @@ interface CTASectionProps { export function CTASection({ title = '开启您的数字化转型之旅', description = `与${COMPANY_INFO.shortName}一起,让技术成为您业务增长的核心引擎`, - primaryLabel = '立即咨询', + primaryLabel = '开启数字化转型之旅', primaryHref = '/contact', secondaryLabel = '了解方案', secondaryHref = '/solutions', }: CTASectionProps) { const shouldReduceMotion = useReducedMotion(); + const containerRef = useRef(null); + const mouseX = useMotionValue(0); + const mouseY = useMotionValue(0); + const [isHovered, setIsHovered] = useState(false); + + const springX = useSpring(mouseX, { stiffness: 80, damping: 20 }); + const springY = useSpring(mouseY, { stiffness: 80, damping: 20 }); + + const glowX = useTransform(springX, [0, 1], ['-10%', '110%']); + const glowY = useTransform(springY, [0, 1], ['-10%', '110%']); + + function handleMouseMove(e: React.MouseEvent) { + if (!containerRef.current || shouldReduceMotion) {return;} + const rect = containerRef.current.getBoundingClientRect(); + mouseX.set((e.clientX - rect.left) / rect.width); + mouseY.set((e.clientY - rect.top) / rect.height); + } return ( -
-
+
setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + className="relative py-24 md:py-32 overflow-hidden" + style={{ backgroundColor: 'var(--color-cta-bg)' }} + > +
+ + + {!shouldReduceMotion && ( + <> + + + + + )} + +
+ +
+
+
-

+ + + 开始合作 + + +

{title}

-

+

{description}

- -
diff --git a/src/components/sections/hero-section-v2.tsx b/src/components/sections/hero-section-v2.tsx index 9ac0a60..33f4c88 100644 --- a/src/components/sections/hero-section-v2.tsx +++ b/src/components/sections/hero-section-v2.tsx @@ -4,6 +4,7 @@ import { useCallback, useRef, useState } from 'react'; import { motion } from 'framer-motion'; import { StaticLink } from '@/components/ui/static-link'; import { Button } from '@/components/ui/button'; +import { HeroInkBackground } from '@/components/ui/hero-ink-background'; import { COMPANY_INFO } from '@/lib/constants'; import { ArrowRight, MessageSquare, Search, Rocket, Handshake } from 'lucide-react'; import { useReducedMotion } from '@/hooks/use-reduced-motion'; @@ -51,13 +52,7 @@ export function HeroSectionV2() { aria-labelledby="hero-heading" className="relative min-h-screen flex flex-col justify-center overflow-hidden bg-[var(--color-bg-primary)]" > -
+
@@ -102,7 +97,7 @@ export function HeroSectionV2() { > diff --git a/src/components/sections/product-matrix-section.tsx b/src/components/sections/product-matrix-section.tsx index 542941e..f7f26e3 100644 --- a/src/components/sections/product-matrix-section.tsx +++ b/src/components/sections/product-matrix-section.tsx @@ -9,7 +9,7 @@ export function ProductMatrixSection() { const shouldReduceMotion = useReducedMotion(); return ( -
+
{PRODUCTS.map((product, index) => ( - + initial={shouldReduceMotion ? {} : { opacity: 0, y: 28 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true, margin: '-60px' }} + transition={{ duration: 0.5, delay: index * 0.08, ease: [0.16, 1, 0.3, 1] }} + > + + ))}
diff --git a/src/components/sections/social-proof-section.tsx b/src/components/sections/social-proof-section.tsx index cd274ae..3bb3bab 100644 --- a/src/components/sections/social-proof-section.tsx +++ b/src/components/sections/social-proof-section.tsx @@ -31,7 +31,7 @@ export function SocialProofSection() { const shouldReduceMotion = useReducedMotion(); return ( -
+
diff --git a/src/components/seo/structured-data.tsx b/src/components/seo/structured-data.tsx index 8cb391e..9a52c9c 100644 --- a/src/components/seo/structured-data.tsx +++ b/src/components/seo/structured-data.tsx @@ -99,3 +99,66 @@ export function BreadcrumbSchema({ items }: { items: BreadcrumbItem[] }) { /> ); } + +export function LocalBusinessSchema() { + const schema = { + "@context": "https://schema.org", + "@type": "LocalBusiness", + "@id": "https://www.novalon.cn/#business", + "name": COMPANY_INFO.name, + "image": "https://www.novalon.cn/og-image.jpg", + "url": "https://www.novalon.cn", + "email": COMPANY_INFO.email, + "description": "专注于企业数字化转型服务,提供软件开发、云计算、数据分析、信息安全等一站式解决方案", + "address": { + "@type": "PostalAddress", + "streetAddress": "成都市高新区", + "addressLocality": "成都市", + "addressRegion": "四川省", + "postalCode": "610000", + "addressCountry": "CN" + }, + "geo": { + "@type": "GeoCoordinates", + "latitude": 30.5728, + "longitude": 104.0668 + }, + "openingHoursSpecification": [ + { + "@type": "OpeningHoursSpecification", + "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "opens": "09:00", + "closes": "18:00" + } + ], + "priceRange": "$$", + "currenciesAccepted": "CNY", + "paymentAccepted": "Cash, Credit Card, Bank Transfer", + "areaServed": [ + { "@type": "City", "name": "成都" }, + { "@type": "State", "name": "四川" }, + { "@type": "Country", "name": "中国" } + ], + "hasOfferCatalog": { + "@type": "OfferCatalog", + "name": "数字化转型服务", + "itemListElement": [ + { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "软件开发服务" } }, + { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "云计算解决方案" } }, + { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "数据分析与BI" } }, + { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "信息安全咨询" } }, + { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "企业IT架构设计" } }, + ] + }, + "sameAs": [ + "https://www.novalon.cn" + ] + }; + + return ( +