/* SSSD find_uid - Utilities tests Authors: Abhishek Singh Copyright (C) 2013 Red Hat This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include "limits.h" #include "util/io.h" #include "util/util.h" #include "tests/common.h" #define TESTS_PATH "tests_io" #define FILE_TEMPLATE TESTS_PATH"/test_io.XXXXXX" #define NON_EX_PATH TESTS_PATH"/non-existent-path" /* Creates a unique temporary file inside TEST_DIR and returns its path*/ static char *get_random_filepath(const char *template) { int ret; char *path; path = strdup(template); assert_non_null(path); ret = mkstemp(path); if (ret == -1) { int err = errno; fprintf(stderr, "mkstemp failed with path:'%s' [%s]\n", path, strerror(err)); } assert_int_not_equal(ret, -1); /* We do not need this file descriptor */ close(ret); return path; } static int test_file_setup(void **state) { int ret; char *file_path; ret = mkdir(TESTS_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); assert_int_equal(ret, EOK); file_path = get_random_filepath(FILE_TEMPLATE); assert_non_null(file_path); ret = unlink(NON_EX_PATH); ret = errno; assert_int_equal(ret, ENOENT); *state = file_path; return 0; } static int test_file_teardown(void **state) { int ret; char *file_path = (char *)*state; ret = unlink(file_path); assert_int_equal(ret, EOK); free(file_path); ret = rmdir(TESTS_PATH); assert_int_equal(ret, EOK); return 0; } struct dir_state { int dir_fd; char *basename; /* resources for cleanup*/ DIR *dirp; char *filename; }; static int test_dir_setup(void **state) { struct dir_state *data; int ret; data = (struct dir_state *)calloc(1, sizeof(struct dir_state)); assert_non_null(data); ret = mkdir(TESTS_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); assert_int_equal(ret, EOK); data->dirp = opendir(TESTS_PATH); if (data->dirp == NULL) { int err = errno; fprintf(stderr, "Could not open directory:'%s' [%s]\n", TESTS_PATH, strerror(err)); } assert_non_null(data->dirp); data->dir_fd = dirfd(data->dirp); assert_int_not_equal(data->dir_fd, -1); data->filename = get_random_filepath(FILE_TEMPLATE); assert_non_null(data->filename); data->basename = basename(data->filename); ret = unlink(NON_EX_PATH); ret = errno; assert_int_equal(ret, ENOENT); *state = data; return 0; } static int test_dir_teardown(void **state) { int ret; struct dir_state *data = (struct dir_state *) *state; ret = unlink(data->filename); assert_int_equal(ret, EOK); free(data->filename); ret = closedir(data->dirp); assert_int_equal(ret, EOK); ret = rmdir(TESTS_PATH); assert_int_equal(ret, EOK); free(data); return 0; } void test_sss_open_cloexec_success(void **state) { int fd; int ret; int ret_flag; int expec_flag; int flags = O_RDWR; char *file_path = (char *) *state; fd = sss_open_cloexec(file_path, flags, &ret); assert_int_not_equal(fd, -1); ret_flag = fcntl(fd, F_GETFD, 0); expec_flag = FD_CLOEXEC; assert_true(ret_flag & expec_flag); close(fd); } void test_sss_open_cloexec_fail(void **state) { int fd; int ret; int flags = O_RDWR; fd = sss_open_cloexec(NON_EX_PATH, flags, &ret); assert_true(fd == -1); assert_int_not_equal(ret, 0); } void test_sss_openat_cloexec_success(void **state) { int fd; int ret; int ret_flag; int expec_flag; const int flags = O_RDWR; struct dir_state *data = (struct dir_state *) *state; fd = sss_openat_cloexec(data->dir_fd, data->basename, flags, &ret); assert_int_not_equal(fd, -1); ret_flag = fcntl(fd, F_GETFD, 0); expec_flag = FD_CLOEXEC; assert_true(ret_flag & expec_flag); close(fd); } void test_sss_openat_cloexec_fail(void **state) { int fd; int ret; int flags = O_RDWR; struct dir_state *data = (struct dir_state *) *state; fd = sss_openat_cloexec(data->dir_fd, NON_EX_PATH, flags, &ret); assert_int_equal(fd, -1); assert_int_equal(ret, ENOENT); } int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(test_sss_open_cloexec_success, test_file_setup, test_file_teardown), cmocka_unit_test_setup_teardown(test_sss_open_cloexec_fail, test_file_setup, test_file_teardown), cmocka_unit_test_setup_teardown(test_sss_openat_cloexec_success, test_dir_setup, test_dir_teardown), cmocka_unit_test_setup_teardown(test_sss_openat_cloexec_fail, test_dir_setup, test_dir_teardown) }; tests_set_cwd(); return cmocka_run_group_tests(tests, NULL, NULL); } 7W,uo+Iyr`7|t$0l)9T )Xʜ>\[ۑGWS%FcSMQv lHFʒ4~U[)vaN~4S7l: 3J9ȬéDB3ƹ-Eqһ~daY1AHEYo,wv;v^Oy-Ms8v H"u6Î(!ce3%b-(szfV k'[#v'5P\XORm4WTC ;̤hqPzEu~0inD{P*h`-u-5GmdtulpƿZ<zr+NkmFa x/{Rf#^Dn=A)ת QiBI+e0+y߫KyD!j;|Gŝ+Ҫ!% C@yi6eܜ-᧕%n;^0:q3^]"hB←%gI:ʘ"6hM(e`*T3)3Y=t2 shJ>{@0dPK\!LJ{Ѐ=A%x6sh'*#Yb?eq>eQ%)Lf.|+PH]1?z$VǼۑh}N i$+?V+ΥRV5g'f^(C "a̔%E-vFN}F',E$&x"B JKW յ0C~{" %G*/P䖬0=Nt}ψd~@+;|u ;I"tUVkq++9r>bu6>S5f'P[XӤ\W^~lG-ʳZ0FN[O)Qr"@RI7 ךJnFwbLx.'Y#SՌb{$-qi$^3Hڍ$Պ$cSº II|6!D= '{%7\M֜@Nr2gMRrχ6 7页)RгC?Hw֕l͞'<3<6 Z|Eot*RuF=(ڧWC[kA5fҨHbϙR3͓b*BU~H< ÷ŞLr'G:/2,ba͡H#5]}@B`aImCa:*UM[߉ivjh[9_^ bC+&:s냬]\9pa~3I3e\̵qx}? 35=2昋)O'{UojJ\BS^ 5$K]?87aR[ٯ-1MvLh@9"Ezg_9a1^pC v֥n+gY۪d8W7<$.QhaBIjo9 {\a~#׫涩>6?irhQR)מ O.ȿueJޖWZ9{6eQd*пo)ej/bn'u:۹\Of'"52Z)Y,Tt捄P|Tnt i? ?`;R/E" Abq}Ѻ:A+FȎ*56㟵VzQDXRҟW3SlSN;^(3'WA-xUijg%i:-Qtpڒ#]>7Ŝ0/a/"Wx6g$ TE^yY.(RSHi(lgT6"YX~+.8du{DXCܠ6Zq|ң'ylˆ\z'Y 9|;v[_ǽ$LXyqIk~"066Tݶ; &LWX]l'/"pbװxg 6Qm}-qg<>xTɇc r9ƪu}xk*F:/3䦐N|}u%EѮ S oߍ[݆H%[[!_*j)K^TЄ겊q۰eLXm|oZ\C xR# 뮌qMd]Pf> \ŪFHNGyʝ3ղ䤖cWf\>|fw'kWzu.r-=ԛST#Z[>ly FAT<$`w/ybĀ/B,/lF,rߎ?R8?v߬aVLKH.6T9{^eDMCMNlU+ nMTM҈/8)*]XyV2g\[&Qі]g[Db{:LXi8Irt$E-zy/m1pI#*5;ngxizԥENBS~W^o VBp9*"{񳦦Pͷ>CTGjbķKԜ1!5sweM̨ DMXk;w'덳g8Y+ܐ_w_i%xf!, |6,Z%~,fC{#7jf3SMXt9* ~ =8YF5LDiFJܴ0!h(-y;AHW@@V&YӱVL; JncRBcR7nw`oV!,.\%<_R1g2ܿ/Zv 6n3T:B'U G' 8]Gao/)g8dže*7Oi8E~dDb,1l9Zo tEpTbrBFJ+A[ A$X"!/8mL-湺jC9hzOGOTz "1:mJ[oەdj.+H H|ik"6ЧŸ"J~x |dqB2"VMq[Pir8x٠m%`R$H^ S3PFYDQIy5.osЈ_qdgT4B$üd n~] aJ1*~pZhLɊ:Ov2F~ƴ]W63yǶrݕS<]iy5gӾv|*Z#*c;M&ch~9R\4^'[G5 v &S !ՉbW f; 6tGbd%i~-t-D ,I9#I{ ZB@?lLAAY'&֚!iGd q a2O|]qۚgυ"/.Z(?qtk~j0=PdvhȆ^8 @{Ll3]e ,Ҕ#ӊG#He;3JRK{!_/eJ&1VDۻ@]Vbz֨ t3A;`;fľ -)vYh nR=*ӂUT5yɨI퍇T)B4NJC="h kaا Jmܙ^Vp0۾/.?YŁdr.P"L\s;'ix̰Z-WV'sZ1ȝ;`W6~M3m@MhF5$Z R +?scs|hV?oҙFΓ=l =7rv@rfu@xk(rD9e!ğS҈[1gYn K<}2P_H6)[ؑIߵo}h %,x8Wuҷəe*3<"ݐߺ)aM_M__)SeqR)[/s,10fI#nd[<>EGXؿ÷ܞT$eNxS\_H"[bzs7f}z\[cJjݕ(7.l*BMI mVpq2u/,p/nitp+U* j@AIBפhJ(0%ۯ̸>aH LZt0ʨ0 5t}IJ0,Z4F 3/ \b1O>Oqa3dQ1i۩ w9ʡO~1BP 8 ρ.Y{w-O| gRn?4ԛ`89Lb@DEרR)hb4_G.R+W2uF9E| vv5UoI5YˏiC3p]Clq#{!1/zїL(#J4f fxi}|~}̻av0OQ//ѷa 1s Zw" ZlK(_k]Jv5G4C[c~eWW6͉`Xc6 MFyGud72kw@Oz⌡ҳRY R/w  m(~\ͯMzKTk^;zZ!+@h *HՉW.~p5|27MS%!ru x4IDtg`I#tZByMEo8`pڮ<R?JLtnc XiE^`"m yiGםur R`bpaVRVikf\F=sBhSo0Z]!Ȯ# ]|DG>q7~^޳:AX:'ʘ<ג] _4ɰf O.s;^hPfLL8v԰Xd(NMyi݄?mG!żAq%'+Dy?{R>Ku8Y…CO vtB 6r˫.S>,(=,,!c{]H*J&*rfuӐ$eeKs܏V)# boz_y+GNF*fh:E}dBc}>{NAh[Muxn<ڏK._^U#Qidl'oQ r¼ː#4^0J\-o٦֏͢e%(I*ˍ4l?ftzňoXW̜|;~B_mhտdme9ӊ:ZxNB[lہ ջ$wޭգD4hͱW`ssiN- P]CK`nJc`fG# M_X'0:_E01)T>H4ppm/vi!7:Nj M!6ᄈCmZ%@?O\0&}) )]đ' 7cl0M@)o Y]%"n s:6q0NW`:&>"s"fI"%tYt=n)&\bc5! -#xi[)k_q7n(5TPH?t\89&zj$G[աJ J&c*ua)C= @Ay b`]An 5ՔAr؍/Un{:"٩FcE4\|pǾ$Lk,H({Mk?j=q SYY8'P[^^D*5z?x)%Aa$?ۙ)qG5i`37j_w0{ lWON0$PebʏW%Ű%hi!$mW')a\RaN,]׸Hl>j&m7o~o,'\CKy(}6n*Ϭ|iBs7oG&i5Ky$~Ndʣt9&L#!;j /"ܳq8nY|VK^.?ړ}^H_O?d>ĉ]9|9u9zqבsg7H$pr n3 ecZkyO#Mwh~9VWmqwHB{38-T] ֒.?~ ΤJ/!f 2C"'\>9Y+%0B^R;t#Ji}UOUzX"H X4T6eޝ*@w]9a ]@_W[\&Riw_Xcѯ\ rݨۥ{k@)15DMk`~׋m܈xq3*xf wNc";[4R ֭@'ժ4Ql+VtQi1VPۊ(,*g Zx}6ͯ%@ r(*mpda4I2U[fU~Bqyr"$- + syJOR*ȶNIc`-oY2z'3O A:h3}YJrֽіhHoqmMhGPjiBM!,pC@(-GکG[-)j--,s!/"j5SZI]!l(fE) XHLGX).b;v/g)> d@,1KRK Z+LrݦU;-h d`{6 3(ωv83Mh;#EMI >MߠQ7 #na~pp}YL,wлn}99w<jY|SiحaGH}^yXX isH=R]")Y??Vo!r$Kх#sqՈfL+Hsm!eVCËcJ&8ӷyɥi7.X{s+b" 8c]'  iqa3뜟9C ;TPkl?ڴ\7AoZQ) Jtr zYfh`4\cr~hսnl6 F{J89e{gsW]oBMAO:-G#Z$-kp ai^i~Y&.(u\^(,y?7,)N=o[ xUd\S8===OxL_Xk l5u@uZ~5k&xh Eu`8uAuBg~v?8 vΚ-HgPNm9|\ò^r9 ~! 7v9[U:}7>*H V%܋Cu6WEm]) -}.6%m@y8u#QRxb)/N'Š #uJ, D@ײ2g\T8IG"6y-( {Cن$e0\/(ro3{R)ӡ.JCDVǖ&4ofNgqV.r O"V/ufOv*?~."ݻ=23s̚8TWMO. Hk355ja_W }j%M2QW߿NÆj =]RY஗ZTM&z-F?2-`.^Eڪc >BZ4+'݊p|#[ÚzG`Hm林c/u*-vXAUA"nO얥V*4F 0`|ɤc}f-&#D ە5qKnM^p*h*E'F%!/c_ecy=dJMEas$`l@gwϣ.d_aZ|l}NHxm9xfa]]?LR;ފ\Y @H94]R?ݾtq$bOxYLR)Pj_D¾:LJp~>S)ǾFsvAgp)ދ)m 00U3GU-`mB{FC@$624WXe4l[gRV18M^vas`1A' ^3G_g$ P|BÁkElg쮣G=.19@sV :(xh0{Y$!˹w-_ě]THj´j d>{j9/\RV >TAQ;[vB^ak6 PP/mX;~Li m(Y XU3`6ML hmA׵ahr$WY=^dKVqR%lH w҄ l w7%)1V;_s6abuIaϵDShoHDUiu ez9薰#{gώxt⢟gu?}p'} P;lXθ8=I`KJPhx \aK<Үh$2r UbBj4P8$rPx3۲+l~ DF[`1EkP\BySc1W˭ݚ22,|kyL!HŰFCVuMQTu5ś W Vm#!a8DkG:`&؇q=} f$"cCG܅\jVܕ2 Gs ~V<piv9;Hj\;F{:Ev "`3|xh@cHƐힴ0 ƨ1o, PB%x;Ӛ)q]xKk"n@c33{@JpK/d$٣BPseU\ifJ6i<`5w@!V,?z[an z-S3k82R8*q.c|j166(0Ŧ-gVIx kE truW8uml쳋$p7a=D͵YV]Sj%?1Z%6äf+_Z;E6)oXyDl_^Idee7-)#{B9K*[1(ƤOݸ}C &k!Z1D=l2MstD {&&@&_ӤAbXF57Y(5^1/ɌE2МGa;, bŬh}b΂+TWZRX;#DqQٮG C2%ڣ|-1'Uq 54;S|\f6QA2Ŋ[daRכdMJ_F1O:(wmlYC79w/9ȓ9, Ζ\[܌P+ Ǚ;xaS"G})@qOP*[TZ`ƥj_QBJ8aze *^DoajbYi7k{ Fx,Ni9+`pal̃.bMR׺د+k}5k87Ozn~YH,F~6i(50:KlI,$YBΓ 71?hR=%c=0q/ COU>¶bm9TKk40!pʯ2CtK?L5į'/ CvzR O _ث@@/ۦ2qw `SlɭȚd덦zs=m&B,k$*6Ivx *J۳f'2*V m؉g5շ)- ,7,ήn]_'R;CtPQKbF>9Ll,L>wnaCzVZ8%0e p֤hJp-&'ɣq.]dKIbUA9tP2e? D8^A#y X$23l5~;vv^[ȽeYF(Pt10Hk#R8tN A4j㘣غƂEJӆ) o iYgJrI46LGAޢ.8m/%/ݿkkQ𲒎_%X.:~I6V*PmϊEpJw6ba**Ǎ+SF O6Zpg@s(2 C<>r̩~OrWMHr2K6*w_椧؇!lr/ItnLxG& $4BDCpzN1`3L:si~$sԕ X|6Hޑoh"G +korw't7Fd 7U Tbs>_f9$'= 7(~'lӔns°Y,/tzT0,f1S5j*| hBICz7)PvrYĮG- eQҩ kmjG&n2<'$Z;p޵ tSj^levERr0[Rrn| #9WR#J;U$OsoI3Ӓz$VP͏&_ОYȨ[ †-n:ב\=p7.VavsEDu;s#]E+%ܟ0޶I 0UZSLQq>S(E~oj O$[yf܊~F:9xyTzveRDV.Lz =a1WRo EIUR"hE<B;f.@ubEdm's[wP%sq ކv0}gRYXs2Tb\? S~ueĖ!Fr./FfNǏNn|foêji@CZ`q3|Qd형=*E%ZhJx0RaC{US)^AauGZh5y .$Kхӏo6 Ü9PvA4KV1 .@q5yh xFfp~rl6V+>HqHFVuD<̛@ esϒX@MΧ%c) s#̂E~,bl yw|I"LC)'52 S’ ϯغQY$JйaR_{`Њ %>vRw9`Y0Oݯ3Erٓ}bS5X:ʎY˿Or!`f`Ed5l8  - ";rVif:WKIBmOINL78C.0 *ZBg&,fY7(UC{[{A z}Edqӝ_TxFe-5-`y]3#|)l֯MkY+p0'd#NGǥ9&yrhVZ!Ta8m1 0␻9^G&;|=fmg@_CnۭG"\WE:b\!]Z >`yHmPO^dڢ}D1L*;K[@K|NOߦC|(x ҚeQjI7[Iλwgdy3r&`f\Ӭ/ܪRF8ؘ02CͨYD '_@DcG;1sLO>,C6)=h\:ZbwLJ#?.QI&qڸ{00#*6,z=Çgp56hS/%)`.ҍ,I|j&$wlFHu̱Ron?_XSJ`hBA/0r.y:҉+9Jno; ios0E.U֤'$iݨK!erE%|⎆HΤaݹtQ p݉nvطjRM%tZQc]AxWYF2{66Y'2F)8iG*dWr{[3IKX}kJHoNgʹ[R*QNbGзϯvpA|aeBHX1Bg(|B+NIAq ]|d)\J9X6ﳄwwHSHkz#pl'̥kTPL >Y-\.W9 ` C6HGE5%9f%fE/wvZ-1NZE2kwy$P5Z=#V$it-Zpy& !NT :ks/eě؏y27*CzS[?s.@gjW`?9{PZG2!WZD4k%{)#g%),>e_1-˫bd#g ,H&.c+V薾poܶou #q d_CԪjxa9:y2\x#BqV{uJ-w^D$ dzi)2ҧfrdRxg<L+I`:UA2ȟW8B@K1һsocB(-h8S ./YC1|miwTlr-nYiM脡J! u '_k jQ A*O(QЇ0?Y+ZxHg`BPD df򆶯i:See V: n4Xs.+W#,Z!: {Q0O՞U;Q5:n)HB7dziB xw9U rERAR$P̸%8&|C4i([* MGXBO \G eZٜ׹,uce(ˈ;@9Exq^uw*Q9m+mfuw~KN[Z5ݯI4ޤ0#P]=$@K\~}@ $T:B#:&@OHȮ%%xt|>ͺgql z iBtӄq`OpBV$ W&G7D(R@ \*oB?@NvHH}L_waQ̞#%큑b)s)9RtG5i3uEk͔:X'WV4Km5EV7]yhR#! s:757 Zjń2OW}\cX (UgEA4ƮŲXwOGֽI Q/A]1OZ&\9{eש}9(ï-"/``9#:DX/=U2 |@.msl =RjXd[- =~G/}}ڪPS#|\Ø!4m={FE˔XwӔ \SS&.GC2`ϠBղG$#G5!-- '],}y?`aͯYˑ0%ʳXNSa;Ҭ̔*o\PMܰW:cLC4ZSp# (,ŤtQA34t 4<١gX 6{:|\;|r桔m~L^Ys=D%"Q6Ҿ V ግ{9G_"xTH=껾bIP~z~r 2Y>ꖰCBY7H D͏BԎeD__2l\4T6Kd|&ҍA nD\@i=VoU9 Vu!| `vm#j ^*H0_hX4@5v"a3O~NNGG 7!) ʠήz`o!dXA&Ǿ2<@.ui"Ir{aUV8Ф| }Sz3WE3eWs2-BŃ?ˤn-qA4A[Uκ$匬vӌ A͉Dr|IhJA0+ w5I8ݯ>pC̎QD8!pK4RIԙZRXb_8sRoaĘ*H+˖G%nOho&'aXi_ |͈^GvH.|^{΁xμ2ʧ$g>()j!E4ꮓwJa4୤ӦpRf-3NiX}J'm 9JF,}Ph":H^7:AsexḇYjnh.A*2 x\%nD`}xBg}1,[}o|b5lx_mM_gY㇟f:4-OR'KxíVGSzn!}qȧI~ȷIF:LBD@[!my(? C2 n=eR۝BP:i߀trE2~]v i[ ր1n-NOtkLidhR\~߰$fKn{X4\eۼddKy.S9^l= k5NH)Jh5FCYXb3m"JYg{!r 0FЄȓZ"dvQ?- 9ܲkUu܌ge~! MF,8iuKQʿ edݠN Q+F/0Ȋo3ݵzPps _aٌep)ǂDv1V{c&elYfGrW --d kDOT{ kԿrJ7fH #lM!1xB{&҃|@aH>43<p={,H0ԨȐ,%۸qn.y˚}źPuqcE2IO1l]Y z5\{9i>o׳mWؠM_+Yp-uO:srhz*cu"tU­fKq;a;Á~G?ʼŎE Y ͎2{քX]L08$[;'`,l_Ĥ >]/{  TiETk|m_¾7| [㡋\R`Ã˒938R8[!JQc)@-D ey`QI-֟t.Kr~*]8$`ž hAn^#S< 7QG#<{oZžA t3$}8tjABH4L8҈# Dϳ$mݼ͕B{*ЫnI:* \t̋UQg1udͷSraYcʂٿ<$#,.'b6hqMn&i'E>4Wth.ЗUꀵ<->PYpz.r0:x#ЍN, f`B٩WUr$b#B.U]-䢢ȖacxRr6j2`GQ #j͟ŇF!#W~`ܓBpYX*2C!Lbuƫ_BAUQH ǰ$VPWxYvޤS.}yzjfDw* J[9@[_;[)o^63HqRU{fٙ|jqĥj66S#"E$?OṉbX ex wLo78$yBي'C&LgĚ[kH3~ O$&C]zPԖTgD+r['v XaBl&"Q"GO󨬢r~~{uRVYn\;o:%Yvjzs[t' yqK3s!5I# @8Rݽ_C$YO Q"1AF>^@}soM{sYU[ KQ8"l/itf9Il_QwDcli\IƑK?֯QX#n-LkWDFޑuOm[tL;=tCr@t?79r}RWAp> 7%X`}xRh=7$IbB/R|3֌w! 'o,1ɃW֝=&Ld8 $jL6趚4K)OlDj%JZi#gEQkn>!-L?m\&PhKsjufݕoaB_גX>RkfO:tf? Bm4Lޚ.J{Ȕ/$$<ƻӐ͌,zk5yQ TZ93>W7˭$Gbc>Hh8&us+X ~&qV%LI;GS2k Hp9HBϚbZmS=3SOR ODUfA/><5EAYQY/2--s ?jAة*术N6lu+Dh0$GlOm=^Y>%!^zD 7RaI gbo? 2#f*ڏcK$B+t[gLXi%VZ HRc@R$@Ii\־H-Ÿ@3 h{r˺h>2t׻6^t!d?Wuu.@vz*FG>y|BK',d%[1rԼPУucds^POzW7#5i/,5JL6J=cQp7K]}]"y;?̈́61FN{> pkvy *pQ.PbsF)\{T:r 2vUK"/|dj#;lԀ߈WX<1ZXZylGߒ's's>*(JuR910PĨQݺ{VU!j~bI٬D3,ɜSu.!}܌Hf }XyKceM(u]lw *1zH|d-Dp;&};=ьhł ~{!̕ġzrM#zVٗ7n{GlE ~PMdS!ڷk-6ǵkץ=ӪI%a1'ukFms\Ib!'ψYxoEdsןsFZn.ϞF?H'ɤw%Un:u_J Uq/6봓 ֵӊFwIOEh5ZCmv\Zonv*ӿZWzLT:T*V;N@=+=!?[J YfI"܉)ی-R6K "U=r߂%cXe9qD~PJ$6*cB2I3? xi},H zVRQ̅T5Whݝ9:cMF=lJ#$jBG]+9E_6^1`H}6Bń+7KQYS!wc8PX!&/q}ec8sfwN1+P6.޲tb,/_{ȩ#/*\ӡx[[,߸z|ʕ#2^- س]!zt:ALk"DWgZ #/Qȴ =IQ;ʭ .S`UPS .ԍH{=ؔ&S۳yE%q6:QUxs#̷YlI_J%y oxZeF^sEƕ)ӧ,sxa?פfXPRY-c0v5B#yLj +l߼pE_"XK/B?6G)>@"*e*(1Lhg X* _ <<՛9/o1IE۳†O$*D H4$k,Uǚ3LlT͛>6 uƢJ}Nlw^6Vϵab_7hr=>9R\*\VF5zߘv4Yu쵺LLߖyO@yU 5hQF^蜝^ f%Wlv(N.W7{lb_p^? T߁ҒG{Z%<7ېM$$﫧l^._Dz!oP57T"̠Dz4]g;Jkd/ege=2H{J8`NAExT$ĖCk#r5}~Q;)6NJM8g]W]Y!s{g߆iôZr=}\W _Tt>еU]v@N4:X F \ǹR۸&ͷǻlL^F:zLOl/O:M5\ak#gdЌ / =2V>b~FY7^%be L:F*vBn&k%@K[jN1yBkcro{#Ydx [5#b k}._j}n,鹪C P'@7z4%:~[FoXYާ@NmI _)ý.'_*:+O2r/uҸq\~B1/d;vgDŦb;)˯Sp$[݂ ڧ(i[=5[k&^_&q.پ4w'2?[4a!&4H>=qz`㏟K|b槙d(h;2\b'u0=I.t4O 8{r|C@xJ-8jR_<^u*/DEW\ϟ)'n?$3ucnBh1rc@ *V.{#>yח`*EuyRjuCe'X1E-8o*/5./pn 4G4qeSVo*9/^a!'KfcKM⾰hy_Azv&_߃#㕷#t3R4c+}CPm.etı>H0o~6rYcTBXگrj1̚oӟ^Jb(JuS@zITE%wJE^?ރ?x}FW87pE ۦUjo%[fBCő6uJf =t9 Hr XZ.rGA)^Y\E:ӁFImq'uϩķ/ץ.a~5} {BJ-Kip A3RZ^*36Q]9]'>Y~o4VT^OA {裴*AtE5}Ή[?O+eߛކ/}>(ni-V Q;}لmb='?UhJp ĩv8j#'J]Rig ɉYrf)FyS@Օv;=WZ@f0@)J#lH ᬤi@ѿqDL<+j^>Z ESg,SDZe>}s\\LeH1ibw$ȯbվ晻 HnJ^j'\҅6?ׂYho&|JA:̭!:arT2VR]>.ؘ1@5D$ l,HKԘJƈw!`+L'mR4h.sL+t>-aV@yԜFHׅ Cܽ6~y1'R7(Q,L1\U#XlJJ*x6,I5ogy}Ml! sx %!z!sM@cY~|Njڂ3LBfsǚm˾=t8-># ԫ_}ECD"KB?z#_ggڏ v jLYG /}w^C3GhԴ`jL ]. suB5c8;(*8+"|pe9s[PX?3_!Fffj~ز9DgіlײLwpt\T+U‰)C+AsvD.® |*Zo"}2.ߚB[m@C\-gFcLaLJF%Q& <BJ.$mrճl}7)|iX%| Jwj3ظȡqQ3l-T@ĶE_r$iUz=0il5X腨S192-*̷?CӌPrmzy #2B - Z1kpދ8x_rJ3vJ9L񦍡BU/BCa p(7QPgiF_i|RQM!tz)م‚ƮHV8K ov钹`5 RqpQzbSH[W?@}!1GfOQlCq$xJ f}Fa$Hc} Kq^={)D)f)F0a(`U7ӡQ6k!}& 99F.e>jJ s5}D\v 5@DNX>8dR/Q/*AR4ٞa|L Dzn@^̟.tOz{̤1#Lzo ,YF2 d3[]M:E8|cz(pBkfi3VM4ޑ̪aFm5`gT_u/ yoMmڱ>"J`#etkAѺ腶h0gX+q ћ9avJsk~ĢzWvKhAqYWE'Y. Ȣ 8,ME(€ݶӛp90_c] Ŏ.z_8]aȠ~hy!Jpi5$ WR=9 a7K &fڭl+]Lt 'mݻbbm)<:CI/m=R?lEaJ͐=QmR2rPqj$۽u iHdrjJX>X2 Kk~aL^[ڴ@WAsӇ 9HxN:7^N%UX? v(_3j'3)l{>;G._4p4yƤ>/UH;1TNQ? jN1p[#1Džxv-73^'|FH"A )தV`793h|ၱ*CԭNHATI9:++@K--|&Xh?fxP= Bki+j#jn,]ϧC;T(78c2Jv"Vd2sޔ mho] p-_+_~֧o[^et:plθI 5ə$Fgx4®ӒRZ)'`Әjq߽fS[,ǨF<#SqnxW|4qMSt׀H _[9\PK_d t_awythd81<oXJ=yjJilp7g@烤 VWc/T iG^ ޙ}1E>ٹ$<RKII? {粛Bf[2`FK4Vlk1Xdxr2'|P%jnꐴ d,_U `1?,,0eh1o c=8Tr'!HN0:ۭM@twU ?XhU3  &]ϔ^oGɻpJ^k<e$?7I |ϲgHrK4bO<ؗT'~F2ƪ~]9C j?+2OUhK]7[HgѬrmf!Mo_t\6Wօd_b.*^2Dٙb80N=!C1 $3+9Ax}xiFKbё.*ӂǓL 1J5yUG7F=b \/#9 W|4bZ[U_)sY!c Gr.Y,i\zWh nR ʀA^ 6)#<8ܒ~l&9{8 ~ a.n4deyCR0ਭOz}(ebV^C!T&!lI"2~y[O%eyGXa6ĜPP6_U .-y k-B$Ĕ |b榨?krfq%Q'(}b:سXr8awiT`%P"hgLR-؉`p-/^T0< ӶT%{zH_M,58ǯ{Xpui)appja.h ܋Y<*=MhfDK+#\A7ڵb9Qv?`/4Dh񮚲V^tLTui[(x^HeV$ 87YOWy$US!A7:0!TGƐBSMstpf{ݬf%QN?(b6 d>!,X.Dz)jiXCM\|hfiaN'4N{Uԕvэ~8cT=!3*7ˇ)~jht1+qD+`Rx5,=qTK͡lKi=Q:ڿW &ϖt,/@yHq:tj:gad@EW t -߫ʼ{'sq>hW∵w*w˂ȠNT-C1s"MO7sdb$8/*[7 UɅ[H}qvPs-@| %Q4Î;_~Kx8A 4G.qޮsfK" C:^4_Nҗ7++TQ^"^e'7EMlӌ)+O>ew&sKTQrn} WGd_-&²Z/ .,wP fHvǟ$9V#^igD ~' T$\QPן!fVWpXpx5G_|.vEdM\"< /z'þD4rb!x?]5~"8qi% "s "gOۈܫ.LeH+3ϫ%'{'TNs2{:V'YP~ F>`?ZH&;L|]tM!r4 >鲺&f\j 2-}9a ,=4b2~,bTJ;an\6JO(vn3es%DuwcUJBLw, 5cgҖv6MR 87JX,Wu~oVp(4cd 4{q=Nc;y{ kS@wDDә)Y`t?&ZUý-9PLi#µKxѐa6M;@3E 1d )]/km9 -.-Ng**S Z$ :ք)bVdU#XAʣ p9nO=lv14) ֗فjjm}SQZqNC⍇ OHQfW[?3Qž uH__J(ޓ6AIm"Q `A@bJ nl_ zF*ט$C/pyz)O< X{MI @6D ''50? :1)|sD3$5ehRO ekHp7N¤Bn*ٝ.I!">~xc|[>3} &PK>7嶉v22XB]`YoډM\oi6~%l~GY"h#(YB50nav?Z#x7]۟?O pi¥-^p:L؍ׂKό<yt@_0/#{ڑ(.^qz:ïx2we`J-wXt֍|[_rb> 4wTlB>}hs*F( ;J6".nȳn% '{ˆ|+*z]3zYV+,/t]sɻe)1~ Jv6?s]P;q,! Yl9Q{l1WB"ċ_ ~4&P_`EkVy09;qFt ݴ,PeWQ>]׋ ezpX r#霛~}! :BM ̀aU2' V2Hؓ_ib܃왝y6!v^a[_L xqoNЇYbD:,qJ Wyv <1ޟ7WАnqZݭJ-y153TY`9c~g0=EcZrvr=JsϪCܨr%O[g_gN9 ٶ%eob9Fe9f41k"_Nwkh|pX5kP0|:B΂as /5Jw 2ȣB8;iYgЌB'v#DlYGKMPQob9Xz$T*I8u4"/ET8%u)vLq߮+sorI_(WGnP͎g:ʗdϙnO7aMa_ЁyL+T˞P(D7F}Pϔe jC^fwNIu1J Ëm3:c>5$q.IpВ,z+ &tb}[#JLB6{s+4nt^@kȤ8o诜Y бrFo3jBӼ~ځ[)lԩҫ%_,'T G((K.*J;ZΑĨ1#+DIJ)CQÛ!slണ= r8hBL3qPDz,])7ZrͫMs'"m,gUv}iݐvk }(M' cJ2⎳DZStiEIgVNkag G ѩP|߬ -Vm~ O 5Tf[EB*P}{dJ1WA i7WRG \h$K#¬H:"۟J@]>E2©6/pY3g#ϷhK s~3CR} eg#da{@_B{]Tv_֙q;=^fVdld/Xn^.I.0K0nQ6樿NxEt-[4AIC@aNm_-|}Xb5.ו+G-M+d)Q *ʊ`e E/qD?8.@IN;{ е|*ͼzz䷔QW.L9&T:z6UyT)<=:Jc`#y۱˫:βSݧ\g]6k' ˹c*& 0g}NK-n㩬 z%O2}(Vy)ESp^Dd0K7u`9={q(h)W2q3N}91PA>qaS NM^g3Ϡ p 50c)3fwIY.pE0zD{EX7#I>t5:N]|? o>)-^]/Jת+Bf ޒJ?o0>!MOJfnqK\fO*dh8^@.>I&~wWI2kpdvșPDҬ.YO-<]N?Z`1D6th#(dgzk"z\e + t@;<3a3ls'ZslȧHeyr_[7,nN]F4{_7͌BB.Ug, g9PP@/TcdȪuI=,SkV*0Ҽ'y}qh]PaLEï.(/Fs;4Luʲ/TULLNZ 8 M,.[ ^fMPo_->oEm\jw@Z;iKqѧ'8ȏotL )H\uƾ\VZ~ibAX|z TA!N,sIbc Ce,0BK@/ L Q2dAWy~a4ED3,l*߅[ rFxOIِ8%u B%OiyeMpHCPM`z@ uǰٓ4D!%dDγFhL?y"ؗJ~R#? V 3[Ho"NI6hAZO|X?QJsFps@6Vȵ~x߹Vʗl'DܤeIٳAn '$aB@f:?&c\rL9ߒz׽וU5lvq6cP&\RH g#^XwlqP;m>7QJ3ѵSq!#z \#(%9-UY@4 'iiq +%@8ght>BbI6v>[jMHPs(?Niu-Z` /㈠c:nB| %4 G0~\Ev'FWEP0ȸp##Fa2Gbr-#uqg5CN;4z& 22MC8pkM%{/ere<Or2;x{@@@fZQY?oGKПp1;Z߁;z%,Xщqm؞$ "1y2vz3|٫ONAlV=5<&kc "t|U(n;kBbVmPC1<62dO!C0O?U.3QωZ}u gL+aק!n k D KkHP'E,RyJr~ %kĥ$.Gw{d#<,>[%%N?244JB(+j+qE88nj|HGSBmU]z*f~Z0"7:XM׵{b1OY/C9E0#?t79xXV  FI*VGQi) [Hҧeǎn+) 9FpNjJ&BgWՑ%4?|2FCPP?IՕ\]) D|঑5.q^g):}uA'V UJJOj>4CT2% k:OmY@)W$w(X}ᦣS50zv|+ )R.nu+o5(ϰϞ#ק$[6b˕!(Ċ)\u )J"04[TWFVQ)`L!J4Rӆ#lDn͐hF >ѭL٧E t%vh1K`KtFǩ+$2v-GJߎV[J@o259AL RDe$yu8BNDO/6}LA&`ҽ26vQϷ s>m;-I6]3\d$nCbVb9@XWd8㎆xOơ4orh-$C1A$j]^YS#:L>EH 3i~HmQ\xҗ5wKNCW As*OyXD6Cqnůr%m&:ΖY1ǭR*⩗.+yDN#y?x.vGKp.Ds?z(9&w,e/8smYR]v o_@sS;;"&JRc]:Cf|O|)q](6L 4!D`j#wȹɉ(T^ 2>cvXHs %k̾iov%(P/4Q"#ziSa?>gXftfOBxg h$֊}ٶFľ!vXISc충K֫uɔ_' %z!fEƊ6dnb!n(sIB0T9&y1F͓L%d _.mz'Jfzd M݃e`J>*/牍,p5O0n$>MnsXx=fI?h2|7jEq#'_ azp`17u.P `A ~ S5!+`F}o c,RO{I`<s"1sa.l.Io??4؛̽!T&5b2GK{Nc)A m|Է7= !ʎ7>?d쁁Px@k/oTek,oI4Clj3gV@G"~VKb~\`#PWjd4*$f5_AÅ<ͫ'l,m.*t,Jq bt|Ҕ-)uįmL0odXR"- /Ğ'rOPh ǩڙS,5ʨ+}>[,L^?3꧴ry9# g .h#VؒvP/]"C/߁%>$J!>"td"(g%g D֪;R?S }ݵS ǧ2܏dy4-(5*Y@ WǼ8S͂{3ŷ͈EC 22ByTEO|HsiU7&aS?3J4a-/RAG$p}a+Z x=NNyE^醟AC- M/e~S %qGne*)U?v-8[GuI\ oÉ*6&6Ų^=melDE#(~I迎tBS2,Cl)DJZ; @X6{iE!9:y9)}Yuev&'EΝe診}vr⽹_"|>'Ucf_DjxX?b7k!{=Htcu=;V) giTvX ǠKz;k <,ft`T: $ c-$-7㒄Rkdls1!|>B42H-Vm4-44*=$QٝkfR)9LrԺe滢rԽ)~8]c)X ,A޾HDGT]6]RÐ:wdYe ΂RSJ[T-`xp~%v4MjmuVNMN=l d&E-x64{a>&W2@ԙUSʷ58 -B="@5E$^=HgnM ômv-<,s٭=- e*wmUU3[$iL8DG{r,0V9nWs Wg!= #r Vn&wӻw pYs:j7Cyco!-ebyTUA++%JqosKOp?"yXhF1յ.E^RҎ0#2V`KdJ4z#MyC3Kt.-gnj̀ᘜ΄)z^4dBSڼD'^_zvf֚ҌRj\&a@/C'x.yaCn:9ًUCeGU[_ca`¹ogGژO։e b/ہqOJ`(WNSCr'C c|<.̻a7`h\0z aeXu r/srTN"XFwk 3>7@.%,b bŖnIfMq77d@ɩߔݱ%=v _͝j2:* ᖜlOU?9;>b7BI&$!N  Yr8X TS x=v LL )T:B<8#p, (}O!Hv7:O"T_!窇 l C7gqE\pO]b f7BKyiѯ6g6&GةQ%]~a*&rEғI쏖AaԎ{D֩Yw];%LCQKI#Chl,wiQ]W jeGt X[AYJZ1tEY=  l/%peɆ y4B&cTOp%M:#ٳ WPt %,dSf8֐HH5#$$c{C_e j*CCiZJ]|6 lϵ<:i,V蟷 vUם"TCגHax{Tϫp>b*w- ,'v֧1Lp(b9!2%`+Nb ݱ:TJ X~='?bv&h1eoRҴ)YeW9|e3-1A@Go0tkZOɻ~uFkg!ye\y7?I>[WCǬnNYl]9hQ1}4B3qU[hhLO4 &ѢŸu֍xq+ D`jx%%!أ, D |\U21v!QBCJO]I2JSu@J',F5vo!5ߣUVD /Яpg^\Dp:6no' R4 5o 2~܃u"P;OE+P~MNu0m0oH8Xɘ7jy0"µ2-]ۏ],!S7 ?)'ùt<Wyq_VPU/vaÅsC3L$}Y6N7@*--d"L\ =vYN\?&CǖoxeH=MaSN 0TG]qMGeVΎ9= \$xsKLUyV_P\T,={,2 YޮWRKqN=i'oiDwt ` dqViKJ8)eئTBt=iͯAnE&%K7tg5VGK(|`j$o(JHIQdq'!dz RJpxV]o]Og'kLآBz5SQG<1ժ~\VU :,wQ8e|-ynDJk6_cmN 層U4rGLw6ؼ'=`"컘hB¢w$}R5!vbs(1t, D"eGB)inO沮 ^s@uQ"d9( 9u_[__@" tGB[Eo_)状ݻ|=XDzqWKP9AFhV2:{VD?\£յs ? {n؎ih=7֬:Nn-%H>:+ţ̎ڍ@֫ t!:P/+;Wnm-_/7֖qk:QG!u{7D䬫Ee~:6z|}rO "ﮂtf6P)\E, 3/%<{"&'֑8rM| (;_N+%PO$bW0i:Ms%L T1aP5-y$٪񙠸J}0dS;`4ڻ;[ fӟ򋃠m\,jȟtJ}-P<ւni\tgB~w"x"uU}6?ELͯyL LGk7\Mx!y˪ioN*䦵 bI͓ Wtn$zsG܁_TFQ3)=2^+c [>P~ҷ߸T.:e#~7M_ޱ=.RXVt=7upmVwKD(E/!F#.e Y ȄH$fs53 -bhsz@q]Qs;1آ1hR(; s9vBu6 3'6LHp~w.<OFWΏ+R MiSud7NgX*(\kN[ u)Y9}kE@8_ޔ1$`*M̹/>~lZ*NMVQXo?>M{52jx3"T<&+ B<`ݠo<ﳣֲG."̃jbj0lcG@\PEb Xn~8~oLQϯEwg.LND)?[dG&jQ'a\Ⱥχl睵)%AKfEB07Os!\=ܪ1Y6Dd,oL0Ɛ\V;.X2d&=v鳳˷l nI^ 0Is&ZM#.0E!~4p"6FI›IMQNЂh&\i%t؞}{5rM}'8LP-Z?'H?1Ửρщ]\2 ^~Vה^eAY3@Q7yPX¤Xƒn "ɻ/# 2HUpߠ aڼqlWkB-&v\LY;*kw@!\^!pZ@ ~*be?cnq+NrK5A=L{-}]LBl&vٚ5ZBd8fiy^kXUqD* Yiڄ0,i4vVC%@?a!_i#q0otQ̣Zh<@&ܝ[snu`ʂu&+f` Ȼd9ϩxo<}Ѧ"R9)E(l{w)UsVsAS)gwq-_g.h. 49b &[`l)} so<Ѥ0m*q\f=qAj7Ќ^l^c>oQR'z.J]V9\Ka~d 4:똼c [VsxF7~] lzQt?g ӐE`2jw  ZCge Dzzn 2Z5Tů< ()ٗH Q`lLS"| b\lƀylYiʪU;5dɸ }.6/A>}oS?k<%-6T4~*.?qeSl6!jwT1x~1,BKTaTߑ[,Y gK+l өF〙s;.@Uw{D42|T@Q "t [zQWF~79pP ZBw nvpA4 ;){7.8=o.޻#%DZ4]z0O|>!EVm,[95<*A9pDEw5HD VUaRwc~ p]{ O}sU` md Ո4wgkUvz-?|9liz69wuFI 3ԩѨ%by 43 YY@g30de`٨Hgб^At+$-]>ۧGsܚ'|wAH耍G+C.yzO&";akZ$UBr+ty2)oޒ[~݉(Pg-ͷWװn*[%']t#Òŕp@ ! }ƯC@+R:uWIw[}*wT"RbNdIǯMsϔ[29IVw(tE" <87?$9,b;ư| Fy[0> d}<:*U3M2Fzi9SsR D߭? bD ׋aH=+r>%.yw :HYi-_S(@bC!ǿNj@&Ǐ~cfE@h{ RGy`X͜xZ3|aDW'qevhaB>͉ h7prQT)[B7KtA26{SK3MbtM r-b|s"[d"nW/Bp->>ʡ!}G :QɖDz 5 e]]L8:Ogp}2RT_ >XwKNOP)~}7E; {v^^'vpKW6׺pI_S+W<9JfAZw5c,wދ?hR0ZSC (ZI41|h1Z@g(SF`Du#\2'`+,gocʶ3ΦP_,N+ 2`{8m+jznD34cU̿ѝAF;`vzbVrfr4*Kcs`mŌsߠ])q*i͆ovByi۔r-}e--}3`%X"M י8GD_#yA&9SOs&7_4 ~k]NmD9VYRt!mJ4:A&upL|)t?1DE0/Kk23N{e̼,ݗ087 a^ǒ+_lO¼S?sŁ^eXhZ pĝs8x%|^6iCG~Í<q瞹DF@Z*Y[F"a/ u=fod ѿپH)G 磻Ju7 DtsyL] QKSo!~`X[=jM< wyMJQ]Y4~k@rR(-Ht<4F/I;v0XCp%I_3W u ڗfw/{&J)D~ yx GȚ#B^tSk&0DޏDN$GnޗNl9z~dj4.3R1E9^IV޼q^zfYu '2@ lsr,\ndhҵ`Y4:J-pd%/ШF ;. :Fi9g&PF7XwY%W*_y㙂>N_2Ck0sLJ>0mBp{>i<!S+5pku܄KGڒ#6Qg/e@? Nk3CG_i9``ꢔ."xm\h ,:LBl܍tiFƶ:-?U99͂3V_K Ja $PD<sGAubQjP=͊%߭ sD9)Ouԕ8.យvZ5&6k(brlbhME'mKgȧHp1?²VO )8Q6~ =\!򜌚ty`#[y?fxƃM&T䆗xQfNў鹜ADF'on?$.U7; a6o;Ji Ý q  N_7=r;)&IW=!AZ4>p6w9 =ِ{^;mv@nSf9եeҾqr~":+WkTE3'{džUBOg~N#_k|.jqgn,7XB{wG"σND\ɉͶf -+1Cs'[bwnvj:ɹhd`)|v~9߅zG1Q3㜂NzE&WUK gd^;dhb}V*]a>"Ւ:Vu=H] J"V(E{lOEo9Ꙝ2 Ya߈s5V8x'Uԥi[p+}-ȿĿ ?H@~_zQamA^ B_*sW#|9:,r[/ok(5G!.Zp#>:x[ԬP Ӄ -B[}9 ^#ryYVx,\I7BTS> 1j7/2x'v,sj vݘq!]6&i5WJމi+$2'BIra+(,'Ҿatc20:NK;LΡoٵ \@O:}d_\ΩՉӱ9760ܱ|@@~Z1 baIKQle /0Y/Σv}:ؼg=jB>zg3[7k8o,N-38NaNI[ʂ+qp5 -ۨkА>uRb?I*8dÄSTOrotćixҭGf+-8gCGU5ҫbJG_u: t{'ˎ oCj dYGR>\A"+@ZCX$_cRV`1*;)Ul[/JY70 "}pÎb{ /5Vv3b4-) <6 DZ`p*ٰ,5zhgw2hZz*khk1sSh`VrOU~۴o|]-^KRoFr>=hy2UJt|x,W4Mɑ3#׌G͍cUE{U(k&$Kc>_"R~po!L EV.EwR{RZgp<EᓄaC60wŀ+hɩ[BsOpg,ZeSìMȹFE#,ڕBssDĹ(EX_R?CR LX|1ϻ=>5;rM b!k^J6,ۺ Ds7<#r]݉R%4Ү.5Ncf/n}{`Ƙq*o"ԄX6ۡKhVDQ3ݑY(53A!?߭R3$Bᱨ)=HNmm'/ Q$'DBSFrӣ9?fbT%K@:ԝD KT3@˜+:WOQ/ >&7R0m01jmP0z3ɖD.~#X;´X=p( _n J"Y08GYHrr13ûOOIB.} Zsv,޿4 wm DD-^ĕHļ%HtA6|3cT+·` j$Ӓ%mR:^s_߳K|OaHCȿ้hQ{ګTM$?Ś),t:Ļh&3BLAA{\xÕV}(88 d^^T8{wQ9jotFzW![M?$I;(91*~Z7?.My`D#Rʗ.UJN݋ gV <\^TgChVZwE{aв3k>c(>]yp]^ rU[HJUidyKUwڲuKޤ<OYsJ(a6xEy{, 8r[K1e&4j,1f$ Yʲ,s1;Ebdy8s=!aEp<2~ %#`  װЙe;lP"ɘ7pM ;*R}/NNf3RZɐ]{Q\N- s 3bg|t)uӡE lkܼ2"gƵf|%5v[1AHg,d:}OJ>SwHd0 ߌVVn#4ܬ#mjt:(Q]GkƤ7"Co '1呖7<-&E]?935:FP58PX}:ǯ fEKؿ4 o/ˏqjJZΦM-#/@39a]Ծ%=yЁHߠh.jD4l9qlW/qfU[ĄM>5o8U.O)N/UڀX`Hg|݋K2'vAӶ.jk2>L֋C¾2{4QЧNtĢKnq+5V ekRFI1a)sm!i;hXG6}"͌ #3! ēIO4`BSy#oV/Mc"at~ [P*FBUw7բ^;u2O!5Ҙ֯Bc+8(ϟ36y6GR&K#'Op!XD# ha2гcLom;Nm cBb:;o]"e) \0@k>47]'khWv6HD*.%Y ѨI|zA̔6zMm39h'm8bT=^~ٱ#f!qIh.~lG-7+K<[K-W"B&UDzB:ǃ[6lI U%MV|#kLrچiL=S j%RY@u%\<#GH핎Fc?mZ~G-`8Tj_fC'!>u|%t3ZjɄBY!8rH*-.XȄ9=;wjj)W3g-wwh 1v%ƚWwV~ѦB.7. ot]Y\1ydaU@h7oO)?yqXs+ fF -HI"FeA9ve9Z$ f"AߊnnQ jA2$=Ԧ^5[O͹n1l:[yKmGIPEb*#PWi% mۅ}"$Ý$2y\]K~>BuܚNeITj8 )?p#^}7"gʭ=9 |&>ޟ_` ^^ 5 d[mt€^ K'_c0*/+y+*k.n%0ө%OHmuoMH[bԙ(JЪ1|=^M$>=.qVBO ` v'y #|Nkj^ڔ~4_ڊ.ɖJs缼[/J+Z~ L:}_L^n<_*'Y]9x$ ՜^8"C\e8*d(0f^e;>>P=9c~D@EsBv~Lo0"6aJ/ NI4aa H*>;X@Vt$SsC ΑM%ºSm腸CPY+e4 W;jKL2UcpM5B2.o>pս]g/%AhuI%j$g"r Z @.22h-zQh2ɥ(dJT(ROK41(s NRg3AO3KDs/VUC?Bk7R-:5vɜG) dMi!Yv{ڌ2 2K1ǠU$%{ 9eR*ܘvIOQkL8xx_pPBYfV^pFP'IC^.eÕ16Y0q>rpi==Z_AzWzif" V4&v:϶vv7FvD%)mG(8íJ^U>)ɣov'R&E ܓńR3]/bG`#9~;_-)ۚPǐa ?h=2֖fDOMdE{ހ)d șJA@% 3$AT".} Dܮx*ȗ{;Y>0݃mqᡔct%.`ES,O}}sЌσИ