ycX8?"})eF鴣Vkmh1 YY- Ly~g8=B gw {{j-G]hqDm?zMcDm4"7'^m7(£ÖnKiM -|4+#|a#r{|nDm[-QxqBnRFGyc(xяn2`BOCa­^ b- >u4kˈ4֊MW߷# -(v0d Y1TcdQXz6U3E3h0˓-i%VyFHkPEvzYKޔ'Z:F2J˷KӃW9WAiƨO:zY;kQuE@QJswrݙ@;'ww&'j7Z ?M<6=TrR1}LAo1uլߨz@?.Ɠ_Aq}iYX_߼}ұS᱈o>{s?3\~<^~C7| 귃=gswGWC9^Lw^d՘VNzՓSO]:Vyyx/۵h]7 3F|Dww5strX?9D;3/My͙@g]LEj 1fjkjvk xG E?ǓGg!Ϟv&{7{{};[V}r~]'FϘOqI@_1l?٩y9BsU7I7ϢVrIh!wwc}-o5|>nZgrOuUTnؽןN蝋rN M:iЁUj? ;q|qjׯ;gמvVݟtEjNO ]'_3v˫wyyqz^S7>|}~q|~[In+.^[u]>]_\\_ȷG }F/__ͷgsJ~}~ueus~v;b?'0?k"v^"s,3go53u_쮙wޣ׸jk/i/Mhvٯaɤ~á0 ;1X}ToEU#QzwwAw:4v=}׭֌GIqtBJiZ&x?|iM4. >_Xw2ɳ1vͿ0WfMy>5-D[nZ|~ѩogڹ $5ڷGuݹH F7۩ J0FB Ms=5Ư=$m*gV}_㝽FVo}n=]u; цҠ?42ofH>?=vIK6`V{v=3uAk'a֬2gfԔX~lWɭ*?[4[_Sv$ $ag7uĈ&1O?qꝝ{{/c1ct=}ɞvftk-24T՝G?u|‹NuPK}eq?O|&yV7zek/vuEot3yѣn{ߟ'UBH#b'WW;W.{2z]iR¯^gwwwdb5H+G]V%BΘ٫O̓>[!;7&Ꮌp3֛q>˾Ɨ3$w/v΍?Ʀ#4Z{>RsZ*=LfLuy~~Dg2mgsƛ.06Ѭ>dO$ռJmo ԙ}W:5ُ~;>?~wOl8so'g>,Qrtj}΢`Ů#Xc,>9YAeIS  sꐊϨCj@/B]GcP3jޟ+7>~zsHa2n?$ܼZzuSBp1_"6IjWϫikgu|&jw^=G_zZNDfi *)1a˃@|T 37]۫D<,5ݘ=]1 znBo'WV/vuO2R?~)pR"2*M Xg)6qyejbd8Y7/fQ @c1!}$Q~nltֶ21݇`m=:DP\<іO)ZXbn\Cjԫ7K:=jjS)؎EROSUxYrb b3c+HfіH?A@S7ut^_h t4A}tՍ'N+2YHDYkΙ[:-?T_5f= wnF0f榮%0y'W.079IN KgחA&o+^b [NF8f.,x3׭Y j+/MrcEu.t o~Pf3B2.\7m`q#%\4i [k<ZYgi7HB7_ZSƓJ1FEfΐw|_ZU"z0s3YHlK ۽gN4Į}3Ϯvd U3lݔ̤\1ZO)5S3dG03=˗|Vϲ/Y~bP2s~EsRG@'0ukj2[Y#6*'{v]_^/ª܂%/ԟR1͗pczx|S>^ 84cfpz1u~F.Sڥ?rzΝcį/!AgC#?ߥ?Oh?X|^0xuꏟy hVĿ3-M}x9MD=< 6_ COoR>PD=>}eo>>?xzNA;{zȹإp M)H1l03¬r*.Ɠ哸ir%'sOpzsl&YzcX ʌԝb]e&;,ѳK0){˙?c:D!\2r<K&[hr8KQ{e1WՏn=1V`"3\PEL r=r?iK}r (ÌQ}*R<'Џ8Ho/擣Dw} IM.E 7yk!,Pݰnfar WCSbXDLGf|2307BRwM6is;~o¼W]f#v =z _f3_lMDǎH:֑ 4;8:Hz?F#6نSt(~=P+;}W(؝ٷ'cta~`}?FR9_W}~2$rt&$xFLSn`jꓹHhw^wZEz/d \I:>RZ\Pxy>gG_Qg¹Zm"oOWw7#^,dFJ2]MjsN^<0`M ٚAU?>L2;$`:PӳVUI DIOyt۴͍]7PoFaIt|- 4߄e3*'r{Sθ2:oyv_8f%[ri]xab-JTz?<16l鏦Gk(?N @̩jn"]:^<%&7h̛5Wť 2;c}63`rs=]^z<3\IcԻIɔ>8Vb&. -g?S(\O(Ok@PIE0%]-3~rYr؛SvJwsS?[\B،YOnOb$SΌ_Nw͜muf0 ]Jr2^kԘpI")/N ]_c _=~WÅ ]CW_&(ʕK O˰)h/ _gg֙Yxy-O%ֆ83sɝIg.ˋMOKJU|oשa^.j̊;P_!}G,t2A#.JNF:\FJ {KmTοgYd1&t$Sb5ڂݭW> kvvxs{q|0ie2)_w?9k˔N>d]:ۻwsSIwOOS.';JT5߇֧;:VR j倹f<`_}ScvO;Gw>Ҙ컻ţ'e2'+]XaKO*IxZ&OOw-TsN8]}{>ao;^E; ~Ef}vp4<=`ܪquVwe&x;p߽;LJOtKtttStѦ~c<`;|w{%`/޿xX\k^\\~:u>8__|ztݑ˷·ӳGtүyKֺ~z2U>?VG%gObG Џ~p[pzMn.3tv^?FuѸ>3bU1vVoMݯ]I'cs]zǝ ؼO-h{Vt.}kTXx*;nX?t&b|='^Д }q~k]LSzyX۪r}CwI5yn ީg󄞜^/UΓY~=ܯ<:p>< e_ ^=-w'ֵz=0(_/dO;kbcM>V>] JX:y]{ot9~=Ȍ͓pwCLi1{|) x9,_}:'7Ggk.;|/T gk'E>"yekdy$&C\?ydjŒsVzTVR[*_zt`=:>%+Y㳱S,j'd~7Rx<0U,s8|'w?Cd/?9mLCRCzq[7vd^;W>`5qcqmyt)*S|xS')KLV@8:>W.!ϑVI?>W+{ir3ƷK;L\\5KoDNjɎ;Ec;E:ӈfkxGs=v?^'OB7Ǟ^ӣՕr~1::G4U|m! 6b]t0D"E}7;..;{88)7շ{OL~O''߾^HxmϹ8 o>|t]Vx]rEx#ώ'^r!S=mxOT&e⌮}Oξ5%T?=xK^|,~jk_0B 7_tݷO}#pu~+==v'Ut:x$ߎ'1X%wʿ:wow~<HQ)oϬ{ɷttS'$9Nuۥׯ?\~e%t^#T{Gxٱ?V[9g8W] o3$*Ѵs;(~L s2v>V's%-l}*^f`;ReH|^=WkV޽mm!i2amr~>oEwܞ#\כU8;lp}Ib߶c|=9hiu?ɔoOJ%;ч_W׭[j?/#i|rĭ.{d_^>09~t1Ϋh9Bs/yB~X?|V;s'$B~b ز!oǟ;oCoуѻk3J7o%sK0 ޸PuOgPnʵ|Uͼ{Z;^&c83!h8I{~B-kT>w:Õ[߲7اc8I@l/oQj&~zNƉQi'28d B7X3rߠfSki>ũ[B |G.Vrhwj<ի7(h+1?t?QI$W?ɋ飙M{jußwqJ\8p܏hk>iOjNj?\γrp낃^TΤ{SY+9.IZ[bzFS:_M24̧;$_lBۋຝݒW/R~:!ث-B[ZX?ΐ$Ĺzvr^?&s{4}7BΦ8Ùqtua7IvXז467@'o7I=Żimg|naƓz|.ƪf'WeE ~'UٓշҁCK;~r}O:|}i~j o;f\jQ%Vug;>[臨1 ?}>gc^=C脙G4V^fwC g[N|~=G[5ߛCT.<^`#tTW2),fBJW^ Eܝ&0X2t{Ń3'So%v/')o b,f.?KHh~'فH:髣 1Za:Dh12v8ENȽk[84 Pu8%X +[Zk9属3 q!d>+R*;-7YrdRӂ.hʌOi l6gͿpRH<1sz6Sc gZՂ&_\{ZD:!WoK3̼aSGAa>qfK+Y4W=$'DLFXh6"JtIh\ՙꁉSecKt vfK ڊjt:5X6c,[0swI~(yu6}no.հHMF&q? ?4ПeLF]?y=W/r$|zFSxH a:4aN։~Qrg)wί?]&ID?*r~N,ӿPI~ᦏXO|2L-LJ$/|{⿜Hzc'uN:_YI'[.I὜΢ez;MEE8Ο_XnZY) >E*aejضx r3~/n?6ڛd ӉMfYb0;=4Wq>NDI"#*bM'C_j_p;Ro>f`/\vvϦylٍӯ 9ɘfSS9sdaL;Q}\*4N7~^bğ=M2U47әV$uyi^ZO8+OHρrEdZ/ctڞcAXsmuhg>s џkPX|,-6AD{7k+{\y?<1ã\^eͰiQhj<7[[^S/.1CIE/R߽iVhrNOwYQd; o@Wyn܏: vm%2cIL@o 58Չ@s}BvCU^9UUŘq\+~slSaz#^=F4rT!-(  YɖK?, ;p^mɽv?dtXFOsO8*/iBӗ7rԅ+0%0)!Y^| yDTO]|8Pz J c>͒I2YliJ,\*o? ,%7و-C \Ӳ DFX=+훌QdpBdGqנ%džM1C`Xxhh͍[fH `ՈAuRZ-*AV˜&G*o(x yB@B&?G^41<]f3̰c2U"j3#o%CA<@<Ξ/&¬p!a-p{,uI}t$m=L7pXAa@!yyвfRmޢWuޕN}I!0.::&#+b+ 1tCi%@d˅DQ<:eׯ>P:}JӶY8fnj>W[~Ta9IqCkr*Pn->.4eMi'y4|i1RʥE*rWʃ/ljŲ'P2BOۣ5 uT챾O7}gZ10be6BJbr0nµP3` FFL.i 2d;1P|Ұ)˂¹@SrXޢ- b5 #TX.]R>|qû eJ ed gP<"=5@MiWr ^(i=:⠄,?<2"*Đ4@mtnPxc/DGYFƢkm9h:BT슞D^\GjZ|vu͆CMae'jg}YfKfY`a0u,rT++IrZF of9ÄIί/zS8`lQ%hI` 9*˴y%d@N XJ @Yk\,9Hk`n,)-ew\{TżC9і\O09dfr `TJ>?P;S -I$AZL}]FC 0NG K_:5VLR ]30GB$yfg6a~ -E,|@Qr62ɕ<hRϚ5ȟ'S&,yy~lAN/|R-xXϊ0.Ĭ4Z]| n`RյS&7bc(9$KY%Q&l$$;aHYxh&iv&ש]T_]|P߾joFU=m$jET!CZZ^+EVIڿX@4L0 ԝ12rPv~a!oւר0lq2ͳg\M6KʢKr3)Rx&愹b~@ j^<Q#a@6jPNwmYr'k9PNIrxٲ 8zI/U) !B@ ߎ°' ǼQ} q'X~ڱA37AqB ^*{bzNO" W±m꧚LHu}Dlq4l#2'SD.ATʍDH4X+BF}.mxñNr痐"iEŇ 3yF(z-bвfRmޢWuS*jB°D}NhG!!$Ō1$rbNhX%^}F&HA+YځVEi'Eͷ/EH6^cm!d~цAAw e`SVN=QEE`?0\OmF)MȤ@FS_q\D,rؤkṗQzgk;%Nq*ѥ%)ebЧr1 Ȭ)bZj^,. MepHA02`d+SZ~\UU'PUqS_8By2=dIr=Ldp!; #FN>eN h orxH=oD,ϰAiC] T;m=8vũ.V2S.2I Dz8f%2;)oܖsUFUHU kӣNlz(ľFV~ɓP=Sv>>]_fio˂3wI<#y:t,E͉u-7 KG9nGҲjMxCJC%Idh6'6º:$e3ajȡ-l4Cl5:E\!ǰmU*-^ "C7tl;eGC *Q>}|NL l@I2HN] ˰FC˪0'p{Kb, IMSn 5|2^e:oc-eVY bfCA~HSL•"d=ȱʲ"U8̾8E=G4Զ"dg>2I)? RNc6h/y%BRR{A2 <zca)-*J +FA>h{r2Zr.ۂ QM- Q DR=z&3X jPQr—"`hAť2L#e|ڔ6 ӂ(XmHvn~/amdk29n2 ásZ&Rna.Eo2DݑȌ÷m50'yѲ(Ͷ]{9 (04cL9]’~k)Heh>-f9KXfh)7' tAmtu3̖[bXr. A ^7Sa'`ջM KUULIg?x忐gs"4LaHsP ذ[!M2׉sX .1IeΟMk0+/rmp@3ӊxLˎ M9q"1p|Lы)W ^cqj//շ/^RoN_vБhv3 lQe)Z? .*f) T ezC'8<$Ǖ葴O8@FS??݌F''+"E$VsFf;f^(?1IRV+.++B#@^5*( ?UXPUX!9KR2K+[m)<"Q%M6EOQIrR"AmH>+YpMĬM>?%sE 4e XoE"힢=YZ@HA$, Vq _jDORDap'TKȴd-q(Z$;<<4x^Kl:ݔxL-mҟձBb(#&1e*܀"a$V2V" KPK )L+E߬uiPV;DaqCJ!ŘEIGi\޳LJ caX".TKj 0`ښˀu]y.C!MqZ0JV/Y5 q$5\YѼp2Ux LzN} 9ykj1G\6M`T| q0nmP "aOl&2a8מք f|LT1+! h L:0h5\KKnCaNX.UTpVM"ճkM#0Bi@:RL Իww#fٮ~^H2^CwwψХ7ÿKNָi67@}l|ʼ7A{z:\NaY Y:VN=AiDEp,H"ӉS~^:FuҾ,#r#/'!PZVV bxZ*hĈGi+j#m~r8YbTjVJT8Ē[&Ls Hƌu);L9&;-=6lR$n9V DIALT6 SC4KuaJQYYFa`0zSU^[KܾynztH*l''p{xcF`ڷ[R7,ZEjwsk2_Ԥ:8 kgZߔr3x c]i ‚=dx숔q 5ary%NZ)in0v@j6>A@_l0csю0Z;zI苜;};&Uu#{tl^j~}KazY6⠋K%`S0LiTp o_ɻ?^]Q0gV{KwCkAUf Zr ŷ8D٣iuEKɼ0)U~ei2L :@%b Ŏ[l-Dԇ"֚24ؓ<RŘ@C.'O+k8T VS&n 4@-cLB ^m# r_*bAȸ/LJ/K`I*A+N`s2K,JfΰRz  N7Q$Y!2,Ty]ꔶ/H-}Ɇ]"&8m&O P HTb}&$hA$KgBh;v1 3d,bt[*[%a" zj%T PKAЖ?h8$3 eTƀXb}~{j;5y_YF f=(`  M5-xCQ] ߈JaK5)[B],@C5Y;lTJŰG=o0jДhԍv4;ɱ}F-zN0U2{3ti2`|ņ(1o =#?(vry|!4:torPgNR &602#TBF@P. I!n@V=7(\{HfHRo.kGno]TĭyAX b`[ḑDe s{NAq ^ӧް+mѡ5x{L4i&Ǡ\КFn^'C@]"T[&H$<{v8Nܡ sMA+ 1Ap"K0ȃ)ŤgDmkAn29g0Lg0|:O,Zm%Lh#U^kMBe$&1(9v ʫVx(jj}5tw9B=rCRչk 7rdcڦ >"z~l1hj)<,WJaЇUr&I gZax_Tv]+jbe lĀCq%-VU@.p|Eњi傘|Ń6^i(er*ta! @-cKm)*.>ef(Fsvkѽck!a(rS =a~ziD=guYAT-q vu y)}(i,M2Օ9'hٹ4pb}o@dQZَGT>I1&r(,oh;@SR A tc[9.CVtylP3l8Z$2@^~NRvahD9M y tr lnWn,أg9M5FV/ `#6\n7!oX2HHW!'*0/w 'Y.K-GaF#r#UC -tP(#&px\2'!'*te Lˡ8$=QZRye 1tEʫ "%V2'pc!AUI-1Kat F9(1l"SN Jl3FM}1¸( H(l*$yTc`k}fX-Un,x –wt ?d`7Z;}AwWwb'nJ3$5j8 =PFzjÁar+!಴ xFYZIzbELhҊ4T˹9&m1K) ї;Å5,r8BFfkh ߳~d0'%>R2F R Vz;ա C1"Xna1RLv',C_z|HHNc4ákcYg*1 rI> &b"b7&U2r_EIJƱte3݀|yI9ZhS IWaDeְ$VhJ%mEmBlzv`?X&DP*ChaW؊8k$+hhe6!-&MU*vEOUZ"/ #5x $sXcE#5Z&v'olZښ ،~!AMajQTѕ%#r4 @D${RuEѦZ2 cm|TqĬUY*bl%+ Ƌc+[hyG-ǎÎ79$HD 3P9t"W \8l.ͺU* Yyr$y@6<[>nj| FoSL}4 Dry&ZiiKn <#9w``.@1CT h u_s#-螪MIYaȡ.c;]w\I-#,í=g 鶽ڪ(#*N354c!1Tm1פYוm#*X=0SRR+7Ŷ*Z> 1PH>5 ͼMH~/ח/>HPIŀiq Gkgf,\],E!ֆ>yB F$7i w@Eĥ &W.={ }z`r2Уv=>4'_]|P߾j1n:wz%JZKL\au}4E\u2lFdW(/;;GcV #0 ^ CqKy\ץN duϨ5%n_rU f@һ7c6<֑]T؃\%2TD$,#n)bf˱<ƂM4 :@A' -ICwO2샊, ;s43Fڞb}DO>I9G8&N$A/WN&Fz$utzr0w Pvr5pa%\ZH0z^ Hh Qm$8nqb=1T'mSu5zQ5?l(;&qE9jYPC<2S} ($2c!7⤖6`K#)uux RFT*]ś\B'C!&Lt u씲*|)}Vf`lFX&!(mnIe_s 6o9tvzdN^3hdF&o f"3w_䄬`#aU;5/k]!x""*$BѐM!HN;5fsܨX$շ['_Iӥd+BOhG #N"df}e$l8.8rQ0A!&uJD#Ci.6l3z֏n`EqvۆU~ecZ]PƝZKSɲF@l^l5&AlQwǦ|-sce[a`a;@Ffkh ߳~딊8tH0L׈WyKEdG; 2]Iv*-ub$%N !tZ}p͘#C4OjcI&FoI)@jWP^Wg 0f0ʌBݎ8nq->d22c`:WI;&+r-շ&C Q& ] ah1"ɒ˽%CcbHlZ*K| O 6G\Ӳ ܆e #ԄY%U Tacڑe94F/ Fh)um=e _iVP啣#T$H@z2lfCo8aڏixf J*~"UJ8g*#y֢Nl haJ@y\eɹeARb^ ~kFi[( )}q!rrbˬ^74)k1"P8JPF*IԅCvF@9"î~`,@澿>y}y nWDcY ,MRYCI]6+gXQynj)P2+&[/fDYK80w,'QN"E @=gHmJ5bF "C%^ fER  bc\g2Aվ?J+1 vV.&mQ7@* b8mVP!l!`LS]; ) y[c@ga[넠[*=7#IG"jX[ѡ0)ZX [|y}?բ۞FFÊC>TB*,%r!9@b"$drD(\?ÅZ@xܭ| {M6ٕ[ P/h~{ZXh[KMl+YEU~h݃lVa$+irEgζxf A!Q-z+Vkzqc*mXhJ8prLoz0~EV >qQu䉐jJpJ@}}0(j4 O;`}|USYFdM'2A5K,#>OHlu<'iI&Ҏ%WbFF) 5\JY]jW) O=&tOfB}΅ xu.n=_pԒN䕮m. @Z>1/80Zdכ K:.d'"cE,͋RƸv-.;򧇇TK pYx(YvzFbML\Y mkB0 qRMk.L$ϒӂ=v[V/9aQ[Y(Z[NS ՞Ӕ}& K>7ۂݔ>9%A~bs'wVcЍmr)ŀC50ԜB  RuBHE¯X.+Z 0' %v]*a#tBkq)}_ :LmG¶_˯6)K~jT g9z/ #DdKi-K}Wn$ ުEtW-Ysf{.p `AӸUNBz7bVE5ZFhJ@Y$ z[!c+yj4xqnxMqHYg^/K8v[hZd2E 6FrkF#PH%H@\A7\$:#sRy_'+$0I,:A )0Yph#)u9#&=VYc nl8^ݞ`iR`Mj!evs f:9^ HEONsh,nj:cZ`8x]$KuY <*\qZ`^fLhi4g-X.Zs'tU0L'nBC|wFmcWр{qtJA,ŖNhǦ6bf:93W. pZN֥d SdZ<۪h\++P%:x]z@9gN҄ 96*Xd1=jqX $*miVhyU9<9ڮuFxDyZYI4u:9Ua[G͡,N`r˷7|u FFxzhK!Kdc~IBBҀ"9*OT |[t F&u^bm!2>) xZThDHJ4j"鳛 &2حVq-r佩" ђA7oYk+Ѷ=7G ?rڒYB+# kF?f Nu"=P\_;.m)e_OQ"V^@M20oUx 4SFu(7-37y׆D'wtPH+!'x e`kb99A@"1[*iyn[@W%+e_*FmXcCaTNwlz8FlL:2HnjKP4ĀS;S^m Qv+y/ .ȤhYZE1l M{v{RX iQE֤-j`L)N$I$OK py-žd8{p/mWA(eaϏz|`Ԡ)'I2T)3Nzϲ ֫bɻDNN*G =6t+~DZˠX!2)Ї%Tvf*1)n/z}c@,u}ZM-ZnCaQu6M23c2sSZ-K~/(?. @wawH1"+$\yc" r{.Y.Ɩm4X! ї;Å5/HJiaR֡xROP] 7D85˗꫋sz]-jXfkoKrҪ]aOM0%xJt ޮ> ͊G ͠uN~3  [ǍdceJ%dlD"BxJځ;t~F~C0V )(s0d1$䐲=)NG #,z;~1 Mn]$aD߄ jܠM(BFxXI-eiY6"&S 5eil/L+@wwmטo^ z1m 2Aa3KC7"bjoTIɋPBO5VkJ!#)W'[C Q٤Ai?u)FF(F1S=H1X* [o2BO VR!JؒEFH IiſctRɘDfb$%W\ E4:b10W(:.CEvcZ)1bAvTqTQm+#3𹑤9+䞠چ?w6H*oovAST]5-wkOKբ>n6!/1WV#t{k|`$A YeTa$,&&wŴzm8!w;m=8vDo4^#N?jPCYra[*RWƢkm9h:B@ĂtEW@EPWђcA݈F"1Lc<'&U#ev6p0Eu2eT}gkf1\5, ÕVDMڎ_RAM)F3qb2X!E5zjˈTͶ7@>;?P/_\]B7bIΙy Lô*f`u&4UrX0'q(oDn /)…lHXەrB؀x&Pl }=uU &1GX.9ސ b[LSJ$̖̋j$@LQA48"R&˘kb*BTݿ.7VQumt,ͶzHDg7y[22ؔ.'2x6 td:gK9LJOm1W|a_r/^O6%Yk󜙩zM s?(ֽq7fl41@kGtB쟧΄7<+ YF oH5 :x-Ta-QM54 XZ 4S 0<1N,~ꅥmY_CW:p'ܗ F '2`hbЖ)^TQB9 ,aqיT'u7h8R O =^")b4^dpH TFBo LydE=ϣ{ࣺEV0͐ 3RYnú =fǬI<+RqQtGRO g$|A '^߶AC%Y/Ij "`L4H` 4  kUc͚r1>e0ZtV( UhFSUmn2CA<+%KkpI@ (lsQ'RSjp$K`f{ V:cvAI@7Q5gO@ 1Yȱ=ZF@i"Z]U}Qt [/hjc[Hb¨D[*NVԹ lSI!M 5wooS GJmP(e8 (!1PEqbqb }OXn&`7` I*%SZaW-7af';`f*Xߧ3r2R|WHٺg[Sj{Qs,JRm6_.M(oF t)F6{44 ^86IeO0<ȀLE1 L: F>I`9x$jn~U(QJ@"s\umDZuؾPB' 9 6)^!\ m"Χ.E21!;1^eJfpX At̶s:Nݎh0馛pVO I'y$wBEgl&2U.@5P[=3Q=]d;sp2dtÜ &8lꙆZ8mhAZ4]&(_ - Fv0'YUB7J+B9N$]m6HYYTlٺb]mja%j22g 6 ]#dLH.`!Ş@¢D@2EJ @t@0LExIAVI.tOTAn$G"Y[֛9 ox}Q\1"t&. zOw5U-D r FZ/J%Qr YrLj f7L) `AV Á)4d/5-"MEմL k6m%U:(L\%-6гFP|l3C#zͮEG[Sj@B )Fxx:#wrԛ@J{eLB7#R4P vHi iؠֈ pN$ULY(u!OFy2EȬaĉCl2BA,HjG(\8yzZ12troċ,"vOx\zQ|%ȣ$_N,P^à+&݊$ĕg骃Y'rF@T ՙtHk`P.@ٌҬ8Z~F0.ğY%;ټbܿC<=[]XrĈ0%^@fKS7;`XTD YsҮSvrW2&r tgUcY=--0z_`'W<Ծe!*bO0[_zi{(MqW"2A dzZFXLQUBRV)X-@HĔ2Yr= P0I綷7f=:HGr[KWN yqX1z$\ r @JJʬd0n#q/1-"j=+ƸW`-ACRz ':" Nr,,]L>1h%uEm$ #PZƭbˍ `,9+{J^e8 aLqz' LA dؕ!R6 :p*GRn8% + $T7Ίs3M`#6^14UIRZ>=҄rhY&6nj8+d5() LJq  ]>;Ԭh};B]eæ|#Io2-,AF)S(`>.%hk!֍+z5Baٶb:`S-naJEeKZƏ$L 49E7`w}ȷ\W$2 K+"}aAumnbI!>(~GLtF'`<;= .7@* #"R 0Q̕B?G'B'9^9!2ke6.#QIR 桗]Rumt-s!ZA9Fmn'+ipw;B L]b |n$iʽRxU@r7HC<2xaՎn0XD"U\rqpa2oBd]A_9z^Gh(jaߒ.+ss")&X[ƀf#Pں6P| Ջ UbD$4c0lomSXq`9i1UЈJiy6_"Mo tO?D&j5mV Jcijc[Hb¨DK.{f(wDٕ١hyʘ/H3gZm^" Ğߴ]KqԌ4Aux4 *r)Winh0Ⱛo[(r9BmB`J>w@!Ech#]}M0)ۃ^S{-OU ²DaGr=k2.@yx;ZDYӏ4<4zQ%=U |]0rbqz80$KU:$$n s iad>"eI}4"HSb̌Y+5AG*I^|,[KZe@*n;ChPAE&BՋq HuP\>hFF2LXle1Ȃ9%'`{V|_hŘ5c1y!5VE4ֶuVZ #L5Ș5D)4"``[CJp 5)23nj#0բpۋh\KX'k\)QhJwB-z>=Aݙ4ӱE1j//WԷ/0ZUh4ܗY 4ZlLÆlD 9 _^_Ux  =aGT+eEF%[Ym%dȘ8r1@ր'OUh2zQ)0PRwf y1# {"cO/KYSH1W)Ki/TOn$@11'sҾȑc3AՇzUp#^mS6vUHZEjы 4E]6-VJ}]=zjspv5?L.UL3TlAA7! 5-vR,`Fe CR\ BHd?5͈r+ rD?%L(A풐YmJ8hfY(1?sXe2;ʃ"yH^7ABhh|'PC[K{i "V;lV)ej jXR(`vaokf8#0laaԍcz}f]b .vv<谦;IȀ@ BWp&8(YQðAajv]נcV1'ZFdJ;yJD &#Q& hzC2M!d~.s+$q6qLQ* PQ8v'ɊTz4մlcЈ%e2It:#kٚ|gj6G|˙Zvj{p\dfʤ HTD$0Qކn_Cs9!50PC [o/59@RaHa vDLJGFĵ *`&MnqB@WCU '7-75FYBLSgzSJg$1m'FF6N(m`PL,Xf}W,o${Q^`"k`P ]1mwXiצfS{"tFcѵtsnCHRf1YN+Q+aGÑjxjɽv?dt a$X0PYT\To>YZ))8a#[?ŧW& ˲#RǑPMVMz{8$EK84Z.C YϪ 4nTd}VĄ瞜 $=^6 @P{$wE1GA[mwMg}ݕzszuE; A 9ղ´|@v#c)l `EȠ0 $Y& (9%W[a blεQ? tlNӛ\m _nxwe{v[.&uķH};ƃbFON1Ke Q`tf#uL@spC]Xf 18O]pt` kF";+W~$1VHp|yI9M!6 Ei?-aPXh55bDż#w"`Z}ALT  дpTQ ~Ȗ$o)CqMp(!}em@rdO1E/0F UyO@'$]g(h Cό I6(P:H1Z@<$.l2A("GFNA;ZH Fk ٌU2vps@rI@wD̶b{#16e 4΀eBy1/K%,צ@TwL#%@@M"䃍H(+ؓm_&4-Mw$1ar"]y[b 52;mTr.Ĉ\1XB&IԱ2i/ ܁4# -8mNC9\5uc ʑ@ke˖x XPzjM+0Q)IO9-^ɶ  yE^W;\Ĩ#5jAjH=STTm9"At7b„Dڈ ̀4 ȑ'őD6.>o_auh4E:nmq>Eq0d6G C woo9Z\T;%X-G`}Ox Lʆ*?ntIbg@ϖ4mL@Y~2zY ` PP'+A(w;m{`tՁ=4:n!cJe ۖ$At[2\[ Հ"6H )̃| xk]R9:ϔa †+NS 8V#VS &pIuuμ)004RnQ vwbmzJCr^it\!r,2@0>ݏmlxqTD#/(1u |V%AF7b9ԩc@,TR#. Txw`9b!Tٶ"7r3 IGk v #mы,R3'5d e+-{(R={hy6rR8w`enSL"n#Pla3AG=~_c 9Xel-\Ň.ީgޜ^x{JR2f#誜ݓ=rbL-PLbR`4<G0ХD:GB  51S"LUV _)^>(LJz\O! ʥ^ Kp)[ L^8'DYf%IReF1O>Ϛ҆mQqjő+NCP`dfhPhPd2z8h|%NL]OA>JX1u3D1+MKTO*hW6 'm VEH&)A&RRDO`EW$z  )yx) 35.ZKDghEߗΓ yoajO\@AVJR6(,z Yᤶ>dR H-9 `MôzFs%BȑIl0zJE7DΤG>=*7pF"L Ӣ_μkMkC2t@ju:P5C>S`d?TGhwn[uFP "R|WHYSp]AW}}Ov ZGyg)QA_&1[1ɫ{, #=VXps-{JM/S l`"[MT- 9EL9'dS8yJqH2VnBB#FE#[- JB)"PBph6qZ38vvV Ոy*P"TT`kC٪֏\՚j`02"TlҴ  U WP`WS;b}`rDS h]y'̔I#g eh.օGG~49ZLgdk@ ϗ4ALok9*d0dpbmAx;r{芦"n!yq@"d鏞vaI), ol;)"jXQچ֬n "H$3"+ r̓c`=u :ys+!g f ri TMo0::³R9ZFj d*%ltew)Gs`++" G }>fa>;cG+~gj<\3k;2CgxESr,k6:0 ~Ymbm|N?߼xs!@]I9&)-j"y8Sp-)r$!9#mۺ XrP"ePr\@NHFeb(̳&P,b9ɚ{F=D( 9CBІ!98Mu8ybx&a$oQd(3͊1SgHP3 X%2PؕK+eZ )|zOZ2 \Cprv561PXha1RLv 9A 35 o* /HJ۶ExTIa4OxE.f/-g9JEgzGu$ 1!h(ಣn -Prt *@*t,[z{ iZ9j:@<Ɋ`6=V{~Sۄe)  1h}4YelɓnBv-ii6*änMAv;n5ڲdU r@ :R3d:n,F"Bn+ 1o>CKэ&UFrQ}0*@ut[[b۽4}*-בF (禁1QE&im Ŵ9L6u69i -~~:R dt+,e}z j9XaSbތQ#5$__Z%W)ʇ\E|@VyЀjb۪!ikv}ؐkv?Ar1aXNpBGNPtؤ|ۜɄ9-cX\lZFF -Vtc((aqgK7VdGTFM9v%)8j6Cd)F*-?m ؂j(z߈!6% )̈#[R.N?(Sb0.WX2p3}[ q{n *a#t#(Wk#d@D6vdP z38smsZQؓAG HըLE'ܚg0\╮ 2I%p^֬D)H>.O#m| zFEnQ=W ^ kV"#p R}iضtՑ), ;s43Fڞ*'ϳ@wwU@ ($U@dDr+%K'K;Yy*|;;`j93 G֠Q+#ܧGfZ\Uj[3Qm]ݜm1MbԅT[lfJC5+jle/*S8I "n#v̆1]*g"(cx`Ce $T?|2XƁ&6%ҲVXF&Jԁx$Q/JESG:: >uŀq9'.B[`2sAH͹Vd%@&@1O@cr$> By[?vzVB(|'6mQСxQ{6A5xq_(AkF+ 5ڀ 9ݒrL`00(Gd$ XV)|FX6 ħDS"{PSqchI-4 }.i1ZF6+3v="P'6'f:Aψ6ԧ6# O{׶u?qR Y[q#WZmn?h[&zB[-ELK{Pdދ.B[hvz]|y}?բ ybWKa_`=F`8WIŊ\zHVuMR@|C Cg;pڡvbc1 P bѶh1[X `+Cc9t#klrm$A-Q{M2zuC2ZΣB#)Z1d6# }@dSwQ 4TW$ W#')VR\@<=&uhX s```L6. (#F2P_8RG`G-HJf 9U8`z9_ԉ-7n{DZJ ϢwFCzh,G 7+Q`B2",ih3 xy: r}}'۪$cAaA`cZ6Ƭ pҼRyU05R PODx=Ij 'K|ygECQ^`9Vd ʲhGы o0aw ( q8Y&#D C4OjcIn @lS^fI(q,Ȁj]Je81kGQsZ܏ƍ6n!lu 9t,j iX%Q7vĵ棾ŪvÎ;xRwEw<$Ft}R4F4DcdtoBdsO*jߋCƊ[91AϘzs3@L)逑KC݋: ǔ࿊DHOҖ>G^aqH咈UC4&,?HYT^߀a6lsL[??k+|3ܐ2ȺhxƐ" &#RdI F#8/ۑFW4Ŧy)D gD`o%F֤otd aPv4brԶ$à/ 4Lg4SY MP='5zjˈTͶlû i ?s&Lwۦln0@:Y뙭fu :f){~ȵ!A75FY( ܊%Pn=b`|6j("I a;) (Eq^9s|6'&Bt\sPmJ0z}Ƒ ) isheҧ穪뼘f*8#1v9zK BV,I oH !Ҏ~_/%IgðRFL $ .TGP1J<,QEs޽MQ vSi[')eDD{6d($kM۶+"r ϧOqPH5BDe-E>YtCPm4%3*lKZy/ή kQ(L(H3~2,a7h_BIXwC¤_&Wޑ$HSrQCǍPc$=YQkWQ^[7 |N1~):{VF"J&V0 [sf7I(X!nڕc]TB#_ھQEdy.+96,EM$3D?Lcxfr{&)lvySxX>rTHot$;(&TH#e1Gh5%q3t*A0/mÕM^xզZBv A Ɗ'$|DNA5.'4h6SM+7F ca$:6818L Dt~F'Á< G3;ueKcMڇ/ޱbA K{ÊZ{U]]Yr(V w׬Nw??x5\{&|ϗd;&/.n/Zq7QQsL0>XhI9ԪI+|cK N*YKJ&Y%( *3}M{QžJ4L|7Lk""Gg=&v4A9 *g GdfP#CzP>aReL6:΂~>T<8߀u*sk)E+=D&)<],-A>*8Q%!_jpD5`(Ko9E|4&S&ic1u&j[O,j駝 >%nZsts?IrF%ەRUz쌃dU+qPo^k=F ׃a4am$ssHst2% k#AF|J /ězXT4l*sa6HM|ʅ,_fm/ĝ/M/^Dc?E~/-?$_'a2/O!_)m'c&f8wPlNgd(2RA?19= k{vqvNpRXǧ$c^)4p$I<~4I1i+z

,,+gU ;R)ECM('u~A BČ^>W뵮9)m!)@tTVs9k}%B{޶ +.#Zı5%U2Gb|Kgq WPElVg /‰*#=u"+.ԋb7.Fp=kfgnLo@UNggp98M /"n~("_b8;UиwŮ5# y#䆪kpWCӱ@'U5D]ODTy$>p/hh eh_0yxgc%I[~w>|BeǮdWr1 %{mz6FY+ǰUO)^Z*ay2bV(nOZӉP1gmJ`~ma=锎%Z6|P%u)tXu+ܾ #jD)EZIF~OSGJ͓n9u9\۫@#!:P:Wh𔚤=ϑƒCIz5F;f]| `QI?Ĥ!wʾti36iITO ^j&njAsru@I5Cg)( ٴbsd6yU!UAmV9 %*, */PWDzgjdRbxHFvB(5HHN`.yu =Utqek jmwde/{rēGz2 'Q4c|J(<) Y)ZsAn/ރ\N4Hˡk _>p !}@L*~.3\N]+_f0k8Qf*:Ei0\*ɉ~h.+"v,NcwkVyYhW9vgH[ B ;7x"KsyPZ2jZM:z_9fw2O"nn֣a"viT rc7ORx9B7"Ս!3VzdQiHm+΅]VX|&uXc8Qi5N]&)d=a7d]&|'L"u̍7z.U5Q|Eq!YHc.NZXq]-?7dP?H)'ndd>eȓXXUVrY)  lut%!@d) (e DYhEoPQ NS*YVOSC80CvB L"!xf;b0 4;!h$UlqϦ$y.E7WW0(qÉPf^DYFpԩ(죌`"u[l@PCh9,L.{RvK.0Ȇ5/20T;]ۍ u%:$ `{!+krJoah;-6* r񔨱#Hg [dBbpV 2cȍI݃kؑ*%_/q9!gm^U~ %!@9FU}͆WkT(MF >]lnD?̗Ϡ)6$x6t3851Eur+ˌ|k'y3(FwX5ZM_|QQzxUcؔcM7Z/Uӿ  ۅ3{rR7U]Mr}{'c$G!魑~)#K<].ԙp;/pQ8wt>:btV{xSBjLJ/Q G&c<'=Aa>hfn2tF^ BIuqbf1)*p2q7JJU8]xvfiW78?V):^D o{{j̯`5 |r1Aj(.e5(_ޙ7o OgO"B5 뵩h0j#з?$U/Z=_R]޿Lm#h2֫_? ̞nRA9B܎]j[eI,3:B2e'<C]oRx\Yg"uc'V_5dX 0a#av>s*O |+[ dfA[j hNu?jQX4/Gpc?F`:X,@#)hw%vA#v`B0ZS$hJgX XA=+W3 aۂ]aQ%LAZ]SJl4&1kr,!!w$wxXWᩀ26ɫ ekq`>zJS{cNn8PfQ ZkkkHN}cˏ-Rm27*M}>\)^: Bp<s`VN@c |Lu*/4D Ҟ=cJ}rL{n._zqj]z|u3 tq7m#~a˩kK fs:eć7u2mOVq5 `q =8h!so&Ax߯sۭp[d?o-5Deiz^k nNm@ @WSPպm荝YF4@lSv`އDk秃A;)E,͛w悔!m UY!WJZZߵRF=XqٹQ[k叫tn j1swwIy\Lj2nVƜ:T^G6@:/ut( v$N6n07ʖ)ḯ@~~fj)(W^U*ONpuPKB"MfNZ#Zm}Gxzy Qv^Fɨ֯Ai&H!fhfX,w7o??g:G̮jfإ)tff2SM٠rT$AgjK!QuʬYa\ebO}VVASPSMq4\(6ZUƫ&K+(B `opkfk2mC0YƊnQ0rBװf46\]s]J٬c6P[ѕy:ͭS&,ʍ %-cps>dڅFY¬xv@_$rFucH3;@Xf:[+&k#{?lCXO\U/W /_op^sIPܑ ) Yt8D !֝/MwPݡL([{aGa2»Oen<ďBR OU'Ojp7^FA#DQ฾? J"R20(@>^=3dRAvq.9:cVz'$qAٖKcO*h zLJڼ C7m*I" iljąbVP=5Dߛ%mP}p[<9)G||RxLZ؆\4xxO 2/(S;(.@Rq, MǸARG-J㋜3gt:9A?s>Yޒ* j\ Nd;{R`7ڙ(*ӧw^\_&Jk&F/S)C!Fȹ$th.aH$]CK&O1V<'qm ky X8'2 G9ڋv(OfJ lhYT<Bt V뒶x,-U(:s nŻW{?~4߾uLl8cLhȱFoiB]2ѷ&Oӷ$T%^ڮ gÞ3hJ|'O{t*svO?FsrDsLDu l¼%+ PW:%s'T^3w\pd%nh] Gh# ~Ʀoֲ`)X\Ngf ᩹K(iL|@ʮyd BA6T93t ֤~[ekHI XbG* 1^_xR@my3OBE6Bo,ܾ#V ] iK'`~߼^I~]j'[]2DkT6Ow"S{`rd=cVLFi)/wVlck1a "{60 ]6*m+ mR CD''-WsHw:Z@S+E5yi(t hr!U<̍7nHI:iY|t|++fOߟyTHtR(nAo>O[< ]g}5^yQBh+NBhAJ} pj[ecs 7f圌^RZAn)s׎C C Ƴ RB ~KzuֆL\7Zv;8Hg0 8a>IPP{~ darp ; iIx\ ~fhg3( qE.eOKauS[EW; ZP1G=³iXŸc*W,\é0Fs~羮E붣n 3ū:^ĪwMVle vw KapawifewYVMhO_\/B+7QZ60BxJkOJd,O0GbPZoS9M ].'qhrL/h뇪"P -|B* R]oeh" <3W9ujQIVU:b*5ު Sr+9OG2#{ʄFZ매(קVl*GiZE$ߊo޿{;'?mL(2F XL8x:Ll(RvEB a_pid[C9*T{3/@|hc^b/zMErEЯ8X gf,|m{vcՒ,cDkM\)IDsKy?Yv>r<Ҳp˧+Rȓ8tگJ j؄x ~^Kҫrgz/g+klh\+Q0m=J 堇=]<λϔrDv8 a[JEr׆go~/A޺enJ 05 \fV`6bF!8OB!s{0c_[DLQm7VQ96ԫ3w mW Cu9TV~AnLL#dG %QyDB^{Dt{} ZLc+L|7LYGtCYb'NP5d{5YA'Tf5&Mk7_Jq>/9kնW^@) A%Ź22" vj٤=rl w;yY2؏b?\,37s/_1oЍ "{T B#9xҖ CIFkkln,ށv(9xCD{ҤԚzK{s%3w mÁtbU9f>Qp™l2ڵ"53;Ip%33T2Cݲے|~?Mf_;}FXbT_b*m9p(LjalSvF5yYĮV2()4`ժpŮˌ`6q-\V"tEQpܱ$M,d9燮*.)7+{F374:G/~ow~z4Ei=J4B5:8ɨzǷ݀{sokMB}7p(D,:B\uSX&5TXcܘje9 M}cƟ ]&79dbr@i.JiL$7i}sf>AbVk+7BQ8TAvb9:(P&f9D}6ިKj k ǙC|a(YlrE-.v7Q` Gmkj}w:8ިUa,x[=r3j3/Ky~*d(6<]ͫZQ18X!jkRYěN,x.}|ë~Vˡh>r(jBi#o6Z{Y(Y.{R\a+^dWթX WMu17vޕLHV#]1i^uyƜB93Y[W 0c/ UE3rAҫA/yd9d1 9+[NVTg;R|9;EX5 ʊg*9y2㩗(&S^XIgQ]ٗ[I,6u:stbIfhJV $ Vt%sbs+eF6 N&@].>}uJ#{,;b(6GRhXHïxXҩFI/ԦeA1zs04y ϛwW?F}do޾`~wŇEA^iA+M}OZ:úz>R? `־3vS&vCǍɈJyYQEUs[jB뽜C@f_git_]r!= Y0:r*)uc$1 bHy"Oip(&j 3R2ehO\o?lweMRqz?YI6δ]4\cs<;9xQZfvV3$.WE3DN0ݶۢE8gw.rtl$ڶ5U]6dorep.J=>F ,h;w ʕbe; 'dG`p=3s*RĵdJst$P؎*0;$4 gkS&L\(ػcQ2׾_HRhVAoON@*܎E ePLihܳ%s:~[gIq#$daZyoB5Ìbך]*"7g_2Vm1q$S٠r(,q:3XC-Du>!3y6b7n˔F 9\,3W$T=f8[ :LfEj{?:5‡!:QZ4zoD [t Z_wB;4eri>2ny;&ԣ؝1=׎4/#.DJ*\ۄ h(!Z]%V۵M4a'k[UJGiut,؋(Y= HxNFj naj}jű7iQ&Jg}[z@b<[RE>h%D<T!w(i -?KݮjIsB B26Pe󡥚i/\q4$y u w߽3_%&7 3"߈'4/АН2&BO[|YKLx| ]9,"Ht ۞?HG/'B$׏_m{NW(mJY/UFx]~̐ OJ<6^<85ӡv+T#֚~Юnd07s)qYn@x:̀Vq=?tZEDӤ3tUU&+U=.-;Qak7"PIIj!"zVltP+ u`RC=V"x%sc;r3ڈ2pQb[X{=3˶=RUj2r phytQJF(@ەS*y#jԐ^dZS/$%CzQN|KC[~u(LA4u6ۘS †)jR2 ڣ Z'[al()ls w9l[}.4CڙY /AcߟY=Q"C㘡5v߱vACخ t23܌&զUgda@˺qb/+s$ U E.G≙ [ʢ4+ͿDJ%ܦAR6켿x_23C\ZlN3 *DD\VڭL%#s$/1Wr9ѹ`el+ ]/p>-Rek2uǒNuw5JB q(9.{j[<ŘͫU`T>r,/KAU"uM4&wY?L9ffTfu:"u3Ǔ^:˾vխK&B¯ZvV۞) 83LSsZƃ~a;nԎ9Fp1צlM )a.e1BgHJ*D8d#V+(mBBNX={VaRQZNLƾ['=[DE,6#w) PXQbZЛd56{U r}yj ޖm5Ovx@hYȇH_h'YWv6݃QglNG'TSA yʖA `^L\}Cnj70[xʚEh=C߿z,s AR4J mΩy9"@iyhhegj }^]9ڍ"vp?&rGA-WbR'JUNrP'ӶF!h{޻.._ ҾOjr]Ӫl8OuEEEsgR3GQdb'xQ0Vکq pqA $no^}׺o/v&sw+e%Ja 0?˭LYb?0Ķyjϊ'1~Wme(;_fnaO޼}\V~g̛?xҽ?sՈ5ao?/4˿9Sq+\YAVUw((d9\ {zsTS-_/!K V|?V_>,N/v^uǫ;DʇQ٩6 Bܪ/H }JL~}֐dXU+4\W~R2Ovxȍj oc&ٻ8Z$ϋ2L&EY0FxY:/LcT)DM< ,슩osK?k:rC(9VOĸZ5WLɊr&+Hg q[[ZÍ+hGOVv.)Dz:NS2CNsL% sqm֙&dk̓j' a+p0yN6;gh"#NvBAR}qIncG j%bl|/ (nPËmj8r0jzNKncx,昳>^9sIRܶp1pl6W钎I>? +ҙqbb@UG rhnt.z;WϏ?o~|{9q U7~ٲ&sRn_Ci5L{C0OO8XF_Vgͭ%.ć=98D&iwAn%sҒzAPMxxccro4YvXrǍRIԐJ5Ra= xȼ`0W,Q$iR)'Ev2U־hBNϨ].L4 qfhJGg@sl,+t[)3L—M lp4*Ѩp1m3΅ U_^m5-+Jr4JcPʼn\I7݊vr<5=+ Q(+US\G#yMYrАÙ˙O[ #H+2tQmf(;Wֆ=5i޼3߾ug"T~|gA}^e񙿼3?7CO;=ct>>^}NЙ8_"xBU Ղ`TuLND/v7Qjr/@g7aиVN3~&(s n2B ˊȾbpu'No\F;X͖[aPK>avT4:h-UjXsqF3YD, R2 |yF:tNCA (0Rv5ao2U6KGRBto0wQךjp4ֱ,m7F.gtKOOL]̒6 "#N.\A,s]''AxrlRܚv ƹr-#y jXGUA&_}1o˥>eбq|~1S'5mH 7\."=hQZXN r:k>Kx1n}nڿL7ƕDd5M/|ݱ&; RVEi"=;Q!)87t0نؙEoDcC-/ޔ3j[Ʌ u[̮E]BM~WKtL kTobi)lB0&8&㾵_]9m֫@7gӄP&kW*IX2۸?Sǣ[cOv 3 [`sIc+L|7Lֵ" phΓ/`u:Ǒ&rFuc6,sUćh{`bew kߍ{,z/c<,g%(9a8JEJ&V_x˱ (ڰ,nlKr.oZ:3G=-E|0][mY%D!:AkZ~%3,"[^^6(AP' &{]DijxRfkfq }~|ʶr뭧#{Tt:9AiRSfyR89!gES!sTg?ͫUn?~Uӯ:|^̃"s7%ḍmbp}<|GO@I@B;Zp 6Me:7@!yO4dOΗhI(Iq؛w+@CI3-w 锲>ʏ,A;FY Cf:[p?uoPjNTThhKR+],Q#L ,_|l mS3'ڙ&;=XHɧ Do)v&K(*6II!'?\#|"4]#DQj ˗/#v6^nsvW$YR-1Sީ0(R{txH25v)?0…Xݔ'qxQ̼slpb8GDt*C*|nppEi}DjxA+tNr29iM`tf2Wk)IR+m6n̰ ,`K~6(v l@:lJ{]T6u-i=$` @*f\Z?^;,m򹤟hsz .6eXfmAm c$>2Gr<s-Q.胢vx kL%܆S"dX|!Z.6~F$DH&6w ǎQ1;4fЇ!!a7 ~Y-& kcϷVPe״6gԀ3tnY|A`RɓQPJ2+Wq@D@FЄWaL,sKyY Cٻx&jPqygǷ^`O4(9uDLdڲ7UB6@; +5hj-.4U3 θ{] JvtY i N}_CުFuszP !/ǟRCQr2r!K5dt E,"WU; #Ĺt43$cjFk.e=ѓҹGSEUpN\g̕qcI*ۂvka_ٻMV̥ĭwxy Un /!Gdcq.rIz :1]q!MNx%|4 CyDx1 B"q+\Ǩ>U#U3'@~LE[ =i@۳0*Q%َX 6J V%^#^nLa0b_b0Gc*EnsHS[5f|P8H5WP!2m5k:±R?k6BaeOnPÛ5tN Ϟ1c~zf%>gܰҩvb S:%d|@չz2fVB_?D6 Ix 3:-h鞓|m2i1F|>==JkZp wL#AW~/zrDx敔@bc8p,i϶WgZhǖ{e٪l<ǒLv^@YC%a;i npS++ n57\GPkdKq@ 5QŎ1s}m# Bx08߼g4D8z5C*! c _б @8¶':d'J@h%M@NcP m>yI|M؛^Oo*jh%xe;A(uJLj P -1Ѩ(@z6uJ;AVuzRY:F&ۀa`/@Pޡhj> d lx CQUUzkaƕ@zOA y;w-J]8!0uIaGpPx/ ^Qw*jJ:($ytE )nSԲ =wB=OH㋰ .PY]AoBuچ IBp-L̞i-1x[ߡ1 @''tJh`ԠxhmfZE>th} =:Op; l\2c\t^9o쓗$!qc<@4@y-wi$qΝaPgZ,QamLA72%=ff`쒷O[U/dN1P9uu-~NU,IJsJn4XP~29]`?q0or4<*0.u(hi6JW^:rTL&geOE}e % 8-3YaDI=-zvtTt8`U2{2 `ΌZQ)۞)"  N$! @3Q5Q=>64s`!IW$P+e%oUZZc[RbhSgé't24uTMhQ>=9ki]BoK ,sKyY MYuW(kW~x7?!>9znƑW0yK1<\4ϣm ==>.jhcgөǂb$ӌE6Qq:L삅~`&?^lb^,D hߺf5[%<eą@e+V\h(ֹC4 yfWEUiNnj00>WiW r0u8s7t' Ǔ1~,!K)Fq6v2v,Q %"TbUsr'Vۘѳ5Oקd{tpDА)Jܝ:l-^aC\* +V/噸X.&ɦrƫUMt HnkVV>S澗{Zf#diq7*RH500Ym~{(fs*膲BOF(,Ro9(U[U;Tw.X\Vl&uuI:]y#3cY ;˗)*ȧ0f>Lhm,/m3QݳgLځ7g% x3['\6d:M}c|ƽ8r0>f׹VQ_xqyYhWD[BiZűHˑ&\o:L"4쓻f@/mEcJrٓ| K_"pMv=:^6Ңsˣب)j{nJGĈ4sl,+t[)3LXt4H9u:b1#lH P ;@Ԙ~8qd_@dA9+B\Hs7 ,0}1Y+[ F/n* jT *ӭW'AZjB }Sm^ |J]&~hfJZ԰"dTYcAt 7<%RH P)0h*#]ոX4Z#T[DzD}ٺKUFUPu6ٌ]xt\sjRA"G0ִ3M.55%S&jB bF/ZØQ8V`j9ZlED|uG_ LC0oSsG8`*3rh9JfF%MV\5~7rk,D3Z]-`sСޮJx҈kD](BY)%x ~ ̑O\iLVceQ"p3nJȣu(gcL4;!ߌM}ٌ@8#mrc"sVݴp6Қo%!jrJy;0V[4 œ+>]yoޚ߼zZϯ~O-^2@YU8u ;'&t@СO+d+[nÙ˙O[ WN1$iV%h.d͛f9ZU)! h̥J!Lk6gx(K6\O\3cb/eO)hO;sOa*ōÔ=pT27WKgrSpJ!AS1ej`'"p~G[tR,=DGBсЊG\rMQ{Kȷ$Kn,{v1B'pyt'(n qRZr=@m%!Rtܝɍ=}~Y$lBӹcSO^dfO7iTLq~e o<<%c$=̂0t0 {g{Z4 S~x7?i9?F#|nf:m8҆NymA`@/ۍQ4nN }H̓NICۍ\՛.7Qnzk><D{X; F-y: MFKp9joOl܈$j ] 5.> %*=G1rt &ɜw8@*dO!vnAWQ LL4'>ϵ4*G[ tݕ}"X頒M-hst[ktbt^jIH#['eEZiZ 7niB B>%J٨v}n86ԁ c!=Jca'LصʀWZ Jh#Fg_2V IQ0Ijߺ1峲(刽7|<0\}lO(/ݪhͶrcl' =h63NL]<9ьlVHp -'(ΦO:Jvp,#{) Hy djnn ǏCQ]FQe]S]RHFhoȅf S;PY4+֙]PhVIv9.%elVGaRo9W,Trٓ| K_"4C0\.>}uJ4ХIL $TTj+}dZK&wptzFm`붗Z=Ύ: L\P3>]3rE\&Ic+uǛn(2!^RJ>\Y$#ʐur8iOC9nC;L>̋tp{@xJN h(!Z]%d zaw, >;5c4R3&u4qGPrYx3Gh)@guRQ7~Z(5~x7?Q9st@R4MjN&yV0ccᘟWP׳QRWiLݪ|ߌL0d=az#eK? baB(٫fx)fm&f~?G_7^cIŠA-,8wB?hR v,HJatL}I:Vծ#hJ\o?lweMR-AG^wZ+gJX_)цK? ZK D;QÄ&s?t$"XX 싳YjdPt<*{:Q!U,Ӛzxk BIsG M LC?-<`]B^@}zan=q,(tWnv@XQTV2` wYC7T.bhnpZamޠg?:_BV6̖,UAM&Fg;Tr`prZW(\m7Qħ΂ @.U~K'wD>ZfA:1a\lLJgI(`TÏdq-W.X2|?/噸X.>ELn7K+7\adx%J[.ǣvs MJ 0c75*s<990# t$bizZȁjUb bnl`A=0;irfs4*|>ll2(U90 2ϲc'Wy`e]-)j(G*waQt˞#WXl5?F2YUHmbOeFʓIsX*pd01 r7ǢVOZ9rHӶ+oHokXܞ[\m荝YF4SR^V-hdcځk,hp;s}zw2Orh9Iv^~K3q-Ǎ[ET}{NnNo`{vs?kNL?Ŕ B 0@]2{8hce*йH'@eYSvOAWLrW|)"9"6)ػ-.mh;B…\> 1:b5,NPP"uv9;ҡL+ |}C?CkHm/©, G=<>Ig l3g-`pc#9 ovDҎcc.#=À:]a{.idˍG#W2YƠjk暣L$Yaï%Zkg*4sdn+t~7k-%%JאcrKc~z{LOL%F+ɿ!=\?ï;'(Ȭ }Z}gZZǘ7ؖʖͯCgmYOH'%LdR\r=`p%uq*v۞ :ݙbԃnD'f0tSز6T>f{y{i"i1Ҏ۔J ^!wm9QuB 5T )8a,EJjl4%4"M|f627+IUptN,5㝴C2Qu#O]{W#e0P|q aȧ>w{zL70QۺmODr|htS R7Ks 7.%J(Ũ).DȕuŧK\|{m av9?AP MkAr_in=K_(ܤ)4YbOq ,?7# N.Cv@!*W^آ=/Aa^BevyPq*,d͗Tc%7q\Rs CĤ gG_C>5:THqDBIdH7T4R٬¼:)`1lؿ n?%ͥ Возможности Flutter раскройте полностью через getx, создавая мощные приложения – WordPress

Возможности Flutter раскройте полностью через getx, создавая мощные приложения

Разработка мобильных приложений на платформе Flutter становится все более популярной благодаря своей гибкости и производительности. Однако, управление состоянием и навигацией в сложных приложениях может представлять собой значительную трудность. Именно здесь на помощь приходит , мощный и легкий в использовании фреймворк, который упрощает разработку Flutter, предоставляя целый набор инструментов для управления состоянием, маршрутизации, зависимостей и многого другого. Он призван значительно сократить объем boilerplate-кода и сделать разработку более эффективной.

Фреймворк GetX предлагает реактивный подход к управлению состоянием, что позволяет легко синхронизировать данные между различными частями приложения. Это особенно важно для больших и сложных приложений, где необходимо поддерживать согласованность данных в реальном времени. Помимо этого, GetX предоставляет удобные инструменты для навигации между экранами, управления зависимостями и выполнения асинхронных операций. Его легкость и минимальный размер также являются важными преимуществами, особенно для приложений, где важна производительность и размер сборки.

Управление состоянием с помощью GetX

Управление состоянием – ключевая задача в разработке любого интерактивного приложения. GetX предлагает несколько подходов к управлению состоянием, включая простые переменные, объекты Rx, и полноценные контроллеры. Использование Rx (Reactive) переменных позволяет автоматически обновлять виджеты при изменении данных, что упрощает синхронизацию UI с данными приложения. Контроллеры, в свою очередь, предоставляют более структурированный способ управления состоянием, особенно для сложных сценариев. Ключевое преимущество в том, что GetX позволяет не привязываться к определенному паттерну или архитектуре, в отличие от некоторых других фреймворков, предоставляя разработчику свободу выбора.

Реактивные переменные (Rx)

Реактивные переменные Rx в GetX являются одним из основных способов управления состоянием. Они позволяют вам обернуть любые типы данных в объекты, которые автоматически отслеживают изменения. Когда значение Rx-переменной изменяется, все виджеты, которые подписаны на эту переменную, автоматически перерисовываются. Это значительно упрощает процесс обновления UI при изменении данных, устраняя необходимость вручную вызывать setState(). Например, можно создать RxInt для хранения счетчика и автоматически обновлять текстовое поле при его изменении. Использование Rx хорошо подходит для простых сценариев, где требуется реактивность, но не нужна сложная логика управления состоянием.

Тип переменнойОписание
RxIntРеактивное целое число
RxDoubleРеактивное число с плавающей запятой
RxStringРеактивная строка
RxBoolРеактивное булево значение

Таблица выше демонстрирует наиболее часто используемые типы реактивных переменных. Применение этих типов позволяет значительно упростить обновление интерфейса при изменениях данных, делая код более чистым и поддерживаемым. Использование реактивных переменных в GetX – это эффективный способ создания отзывчивых и динамичных пользовательских интерфейсов.

Маршрутизация и навигация в GetX

GetX предоставляет мощную и интуитивно понятную систему маршрутизации, которая позволяет легко перемещаться между экранами вашего приложения. В отличие от стандартной навигации Flutter, GetX позволяет выполнять навигацию без необходимости использования Navigator.push() и Navigator.pop(). Это достигается за счет использования простых методов, таких как Get.to() для перехода на новый экран и Get.back() для возврата на предыдущий. Кроме того, GetX поддерживает именованные маршруты, что позволяет легко определять и вызывать экраны по их имени.

Именованные маршруты

Именованные маршруты в GetX предоставляют удобный способ организации навигации в вашем приложении. Вы можете определить маршруты с заданными именами и связать их с конкретными виджетами. Это позволяет вам переходить на экраны, используя имена маршрутов, вместо того чтобы передавать виджеты напрямую. Это значительно упрощает поддержку и рефакторинг вашего кода, особенно в больших приложениях. Именованные маршруты также позволяют передавать параметры на новые экраны, что делает навигацию более гибкой и настраиваемой.

  • Определение маршрутов с использованием Get.defineRoute()
  • Переход по маршруту с использованием Get.toNamed()
  • Передача параметров через Get.toNamed(route: 'screenName', arguments: {'param1': 'value1'})
  • Получение параметров на новом экране с помощью Get.arguments

Использование именованных маршрутов делает навигацию в приложении более организованной и понятной, облегчая обслуживание и расширение функциональности.

Управление зависимостями с помощью GetConnect

GetX предоставляет встроенный механизм управления зависимостями, который упрощает организацию кода и повышает его тестируемость. GetConnect позволяет легко внедрять зависимости в ваши контроллеры и виджеты, что делает код более модульным и переиспользуемым. Вы можете использовать GetConnect для регистрации новых зависимостей, а также для получения существующих зависимостей. Это особенно полезно при работе с HTTP-запросами и другими внешними сервисами.

HTTP-запросы с GetConnect

GetConnect предоставляет удобный API для выполнения HTTP-запросов. Он позволяет легко отправлять GET, POST, PUT и DELETE запросы на сервер и обрабатывать ответы. GetConnect автоматически преобразует данные JSON в объекты Dart и обратно, что упрощает работу с API. Кроме того, GetConnect предоставляет возможность настроить заголовки запросов, параметры и обработчики ошибок. Использование GetConnect позволяет значительно сократить объем boilerplate-кода, необходимого для выполнения HTTP-запросов.

  1. Вызов GET запроса: GetConnect().get('https://example.com/api/data')
  2. Вызов POST запроса: GetConnect().post('https://example.com/api/data', body: {'key': 'value'})
  3. Обработка ошибок: Использование try-catch блоков для перехвата исключений, возникающих при выполнении запросов.
  4. Настройка заголовков: GetConnect().addAuthenticator((request) { request.headers['Authorization'] = 'Bearer token'; })

Использование GetConnect для выполнения HTTP-запросов упрощает взаимодействие с внешними API, делая код более чистым, читаемым и поддерживаемым.

Расширяемость и модульность

GetX разработан с учетом принципов расширяемости и модульности. Он предоставляет множество расширений для различных типов данных, которые добавляют новые функциональные возможности. Например, вы можете использовать расширения для строк, чисел, списков и других типов данных, чтобы упростить выполнение общих операций. Кроме того, GetX позволяет легко создавать собственные расширения, что позволяет адаптировать фреймворк под ваши конкретные потребности. Модульность GetX позволяет разбивать приложение на отдельные модули, что облегчает поддержку и тестирование кода.

Рекомендации по использованию GetX в больших проектах

При работе над крупными проектами важно правильно структурировать код, чтобы обеспечить его масштабируемость и поддерживаемость. GetX предоставляет инструменты для организации кода в отдельные модули, что позволяет разделить функциональность приложения на логические части. Использование контроллеров для управления состоянием помогает структурировать код и сделать его более читаемым. Кроме того, рекомендуется использовать именованные маршруты для организации навигации и GetConnect для управления зависимостями. Важно также следовать принципам чистого кода и писать тесты для обеспечения качества кода.

Потенциал GetX для создания комплексных приложений

GetX открывает значительные возможности для разработчиков, стремящихся создавать сложные и производительные мобильные приложения на Flutter. Его возможности по управлению состоянием, навигации, зависимостями и выполнению асинхронных операций позволяют значительно упростить процесс разработки и сократить объем boilerplate-кода. Это приводит к увеличению скорости разработки, снижению риска ошибок и повышению качества конечного продукта. В частности, GetX идеально подходит для создания приложений, требующих сложной логики, частых обновлений UI и взаимодействия с внешними сервисами.

Помимо всего прочего, активное развитие сообщества и постоянное добавление новых функций делают GetX перспективным инструментом для разработки современных мобильных приложений. Использование GetX позволяет создавать приложения, которые легко масштабируются, тестируются и поддерживаются, что является ключевым фактором успеха в современном мире разработки мобильных приложений.

Leave a Reply

Your email address will not be published. Required fields are marked *

2

2