#!/usr/bin/env bash # # Copyright (C) 2011-2019 Intel Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Intel Corporation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set -e PKG_NAME="Intel SGX Driver" if test $(id -u) -ne 0; then echo "Root privilege is required to install $PKG_NAME." exit 4 fi # Check if dkms is installed. dkms --version &> /dev/null || { echo "Package dkms is required. Try to install dkms first." exit 4 } # Check if the kernel module is in use. /sbin/modinfo intel_sgx &> /dev/null && { /sbin/modprobe -r intel_sgx || { echo "$PKG_NAME can't be reinstalled because the kernel module is in use." exit 4 } } DRIVER_INSTALL_PATH=/opt/intel/sgxdriver [[ -x $DRIVER_INSTALL_PATH/uninstall.sh ]] && $DRIVER_INSTALL_PATH/uninstall.sh &> /dev/null PATH=/usr/bin:/bin umask 022 DRIVERPKG=`mktemp -t sgx-driver-pkg.XXXXXX` DRIVER_TEMP_FOLDER=`mktemp -d sgx-driver-XXXXXX -p /tmp` trap "rm -fr $DRIVERPKG $DRIVER_TEMP_FOLDER 2>/dev/null; /bin/sed -i '/^intel_sgx$/d' /etc/modules; exit 3" HUP INT QUIT TERM EXIT # The number of lines in this script (plus 1). Using this number to # calculate the start address of the payload. NR_SCRIPT_LINES=118 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=127c84964cc3d3381063f01ea1e15533 # Get the install payload from this shell script. echo -n "Unpacking $PKG_NAME ..." tail -n +$NR_SCRIPT_LINES "$0" > $DRIVERPKG echo " done." echo -n "Verifying the integrity of the install package ..." if test $(md5sum $DRIVERPKG | awk '{print $1}') != $CHKSUM; then echo " The install package appears to be corrupted." exit 1 fi echo " done." echo "Installing $PKG_NAME ..." tar zxf $DRIVERPKG -C $DRIVER_TEMP_FOLDER >/dev/null 2>&1 retcode=$? # Save the return code # Clean-up the temporary tarball. rm -f $DRIVERPKG 2>/dev/null if test $retcode -ne 0; then echo " failed." exit 2 fi pushd $DRIVER_TEMP_FOLDER if [ ! -f package/dkms.conf ]; then echo "File dkms.conf does not exist." exit 1 fi source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 \ys8O8a;׼d*YbbVdI+ʓK(Cd?v7^d&ꍪb n4݀rbg>/=/ϞS;|?nً}wl[2>iXcgWC6 7ב{NXkf{]LhFVA ?- |`(2 ]݁t#bwqGpuvXU2x93cl>Wnox %]ouosU]&hrܫnq^2~݋^seL vʭؐ)0>1ɢqW~i3!&$=`g Y;TӷՎWȿٰ]N!N"HVgKTp0 06W&^7Uv v!<0w -4ڊگ'Dȉ.L7pE:ίC8KcD{woGrm?{EC?7a3UME݃1-wK^I;'[y6[P,!]վe9(U [b Qn&"fcc;Y>1>xz` sgcMtTlfDQF*t\e;fs7ibZu`U }S<#:mَol36+G?~286ĔZͩbBFe, 79?=`Fp<> T;cm0j,wl-2مrqaETǒ7ꏈ˪|jt̲mAzTsGԍ7tCFi/[SW)[}jmOK4Qr@ XO广@&zll]3 P!ujאɖ% tv2Q+E< WKٺNvCfcukh4O@9PE䇺uX0bC1^!5›er\Io xmRiI?g0WnZ6l_i kΪ%U\ш7n@kZ^-qA8c$sFjDAVuz0eh+5Mq?dcg<lrڨv "A{8/˙*ZuzjJFa_-3xAl bEusaU1V5_aixzv߄^oub^v'Ȣ<[bU,rGj~A{٩I&*4o'l)kkaN&k9@kbx}4> w&`P b!K`!ӟT Hco{m>ƪCgP8vzUv0RIJNL9":L4Z+4zid٢_ )Em`:hY48\9c|']EaWTюX(( w _.o9w/qxs,- ʇD"n QhI':k w'zlnbJBߵ[սybߓ6{"$.j E>tK :ڤe;O-vVUb1Gt/ Q&״UIlB)ڛ)[̧0R>Eˆ;^Brڀtryfd;XMLXui5`Vax_~QAUb¹+%̛3R WH/ijQu8A[>}ЬT0N? I0H'̹&/~ 5w]-HD#mEMdJ ڦd%GɎ$mGXԥB-{RR'*lvs*Qt%xW|Iih!N 67nFP^H}jd$.vr)A /%kLhۦ. r =&ac_8Ry0r7fg<^=vD̹a2N!n nHT^p bJRn`Go"7a 2d DT:j|ut<}}J}Ѵd/7˶|8ڑ5R{o>cqOsg{ϷWv(DÛ7coI0oXRV8$/#1Ŵlu@ʥpNX6\ʳvѭeܢK7o_@-na: yNe[ۗpedؼ-{KLx+7xG+Ey؋&߬nF/esbj•]qj5ޛqm/<Ŵ`ӨlKwmNm@nC$bU,q'> $Ig"C瘣AZG[T4$4c!ϭbS] qSWF+DMem`2 {쎍WhSAY8;;W)cMIE'6Lm-tU[L#?$b9[\gݷv$7iU/2?_Ha7ӹk4XI D[gLΒK\uB~p_/`!YIj W)u盹ͯC )WᎧc /lZUTxܷ{M:OYb`tٳ $\P3)܍ kmDy٤bPk`wt8yQkbY}O4ٛı>ǭH MX; ji۵cڼ}Ψz> 3IN\ ,54 ,%) 9R?h375e Iߛ9 "6)B@FWj,$0HB } M FdvG͗1ڒ 0*Yh&Q$@|m'WJ,LP~Vznڂ \@ NIVuP(?/қ_<%z z{GP3vLГ`|V͢⼦Vl޷Q,2u ٤p?*<[8xy^9Ob&iy+EIƞX/ADYZS&Oa]C3eJXɠRsߩߎy7C71mC_/,.q1ȈLy|H6_Su6qqa&Wq=(L:|mn KA`M}3ue{+YZ25_Py"PpNVd`jG/K7>Gx1"Z0~H}YG*1RF!c([IiFO-DOA Nskn,T'-J~m,Q5_d֤It"sy!A3[}>>JץI>,~DwQ 410 KN% ij{R4eDw&zU%Wɒ|"h%H.lhȍT$G5YI0B4aXӄs\ryI~rwo:uT H-%ů\-]LikX_㭰,J9;/? ̮myZF1qOuS y[ZΗo|@p>NjuyFglT}_ o09u򤓄~ܘi]X#ij~;kẸQV#6JUQw OOVV>{ZWOyw Ϝw هAף[Qb]G..`o xv xVtk _@- >|LS-($_{@pj0@K[d\QPݱ=CO/Ӹ{ieY"xv"nmӤԊ0%M02\ ȴM€N,d֨p{teAl-|'?y%!Š]P@] ̑P}bkffJE3pt6`c`Nx*v-ZL ’! UxhQڬw *gv0 `tOW4s@$ Z6vt-DN5$@d5]E!ɝdHJhj=a=4%Б}H5--Q,x g0WT v! !U %68M $FS1P#J|ڣ[Zy \}+ )i2&z#f裷GB4nUªr7>>7 t&Z$;"0RgQ8pAa8{oU+㬵4α1 F@֪;6MWTm2,)ih=&Ԑ~RܣRM]ر]ԙ׆6X,x~4 Ӫڗ 8 Jgǔ3_[BLaijێ5UV x2;cbCuC ;YtN!Tau1p"]OU|u؂v yT~O*^I +;~4H>90!@#<|hڪ[c9PJ4[x%  Z:C-N/8VqdAKTR jX%OEkrpf~3߿Wdz2оJ1)]Y(_6ӵi :UT[<51Еo)-?|WgqTc9#Q:T@Xc2cc-08&U@^ 4YV-!/ `_< `^mD,26:DɸSl1kb4VYǙbn"= o'G,ϘKJSkeP~ii .Ir )<09a`"UGa$ Å9ۛi- KL? Q~^-+ߴ2K) k{dw(3i0ÚJZ0V/HPPf^J=\5>QmKBJ CIO>`>, ?GoJ1\)+~_ )+FVٽi tc9vֵ7Qje UxVyUwKҤpd9G $&ZI‡KimW]yH}x8TϺrX핓{ṴJh6+A@tF\:^H„Q2FMtA͞mxY̊b*݈{ xFOk/||JqO)  8t$}2)N~@ǺpU491t_f]Nؘ0|-V#0C#K[!Sd&iD`X'k:kRR0ñw }bA!f\@ܕP2_8 M)k 3^`<=A&>sCn">r?7ZĨ8U ˈr}urf?~vJjd.Hfekdp3AߝPGuZǠlhbU+sQV*R ^Up/.\LHedę+xػe>DJBxu-]:}&ՂA!uHDF"y(읾9;ۊ-EV=q~|~1J})P|NYY0{"N2RlO`I#g)V=o\5\VrgLRϚ]}Vu;Fe|ӿV*+~>jMe}>o2ɂӪWz(1F=VtΜlO<9>AOo7ӚlOhO>A-=&{mm !,6yƨidcwyd xtg|0WA#;A{m;R)AV 'qV: ?3sģ[n<~ZuS3$꜎f ՒQpn%LS}]?PJ)9Voxel\.zg rkɗ6a.H@g7Cw=׭>.,SYک)l*1m ĞHA~m忸1䍵ch6&Àcu8tUGRo7vfѹ MnyfP/Ny56f%<<ވlutt9HK'T=*YJRN$.Ab:2stƬm6LpJ(#4N&\L[\禧EQ'wOSفChɈ,U),&+Rbɇ gȴ9|QDž~>|q~'Sёu qE ?* ɜ8r2g2BUG`:.q%:.Ke4/ӭ"n>^ cm}C? 2y\gu7hߕ>ROW:~zj!(̖J卍FTz<<>6-h.0k~q#*mfJ4n+9_[}\sW'ʝ_+wj'\yWT+w Iit]/lVX1<[y4|] {Jmr~ {6VB+K3hbpp]ͪbXPW,OqD@$XQ=Rn܍_i~%(Q%w\ʊr@ܫjAβ&f+JwSW8 ZPspp9igYS3 ߖϲ;/4ô}gy8hsCWKE;8 ns8+e;s1HTBLH*w&5%h|_E󥪵IKؾqso?JQ0B2?I{zvyof׎^F-K b{@ƾ/x Nv^H^ FT=pr 4Qt4;JoYT&y KPMFH<~K>_w~U1P {ٛRϒvt?ˤ M  g#k)N"G݋k-@k}S N򻊃0 4m~[WD÷9=KVpWJts!jںq͍;;MuK>Lg c k]snhv%Y Ts[FC9C]l"lmyAqG\l肋6EüE"Z@§qlA.%|fNl&gp|Plc=mi#y2[mʚI%N,Yr/|Jlz,Wc:9ȃHM8xyhGAs3.~x9 |8TAdn 6PO)2 ^ d P:θŌoj;Mkn^gq6<,R9oroln˞iQ:!u #qD:F k ۰d~v1Xd kԘծ`pugN$* )씵&7iWqwS9H]t3<8S㄀PQ5 wNF PS}19\hͮITV?hH"`EAX318 Op~ J:x~Ю7 sיлX ?(Ho}EWOgH6|a2QT9%m54"@Ǵ|O`Ri3F+xIKzAimm0D`7 Mnh6*~lltDewPBop/f9Q%I|F@Nz~)Dz2 }~@\(DZSC`H`)pUJ"a+4-)b ևMJc*뤩3؝Vr\R<On8T&;(80)yrKgHAj1ȋPeA.]΅@zQv=+T264L8m9 Й쮭X+* /,탐y쮽w<ŤʼVW6~hF>&BrӐ2 $_骋֡(:'];,T|)n ʴLrA;G&%cMS8D~E-(Rl2=Cvpخo.Xxʔ$ΐ 聈 .nFj/r`K'0Z變6:MuS%?C@|44?lLwݗlqX;ahVٹ -P¨4";''/鰰(ਧK2G#lFn#ډ͉B8PFq [<9Y{WRxwޑi n\hHpQRٵp- hkM26 (J?sApO&!P^ <ړb pX/8(!XhBFa`(@?xNCٌEtiְ#пc80Z:8Of郄plgkTFa=2+QWcT\U myg<jԒBQTPXbu򆱄 {V0̻D Q\cI Hv@x'_ Ӄs~VnAbvȅv_p U8@$8§Ul{.(Qc{f>vJ:'`O%p<> qĖu mGRHR ԍu2k$ W¹+ Ti3pd,-Yƾ24%";0G ̰|,z%w"2lY >׈=}wZ{g}}uy-eu|Cu+<$ gL /uM39`U Գe=?t!%y<*)YKJ][f^@(d>ŘwM+%hTK;:9hY~*$z>Nbr h⸱yqsx@-ojasx|Vh`g/˗sbbRൢz$)]$k1A*ղduN߫]M^(uj;1 >@V`NZ{Zs;tק ƀq>̱Wf7c lak6D+n'i;ŭ4HTgl!r65d>DXoó()U&<+9'ڱ YߍOJGÞ)ލ.Lb&jfNC g"p3wtj[>}C\ Ps ILJ]J{*"ctaތ0sMKM*FUWoFޙy137S G̉"d9O5qS^q V[ĢP%z%K؜ IupB9IYN4gG$L`T.b Қ`HkS%̻De_ L\9@"5`ryD{!PQy " V ;)1Z@ޢf]/~U契NщXoD |KQ{XCZZ1r?(s l6<$5V Ɠ`G E}S$ɨU/ A0@Xt$HlmeWҬXfQ`4`pv:h$G5$d^QLm$% S:Ũk_ Սz9 `|%n׌%2ؠ[TQqX? hpWSoYG&P eᾞBzGT?RnRjΔS&Tt)N:i8 z|1tIeoc% CF %>+SFڔWoӆfp9w3Md %OĤbJ7Ĭi$x(?4]Nn% +K,@!d׿, L2Zx 4RjGskJ=?sa\ߨwtXWt~@TÒZ/ՂYOJyhH>ie Eʵr`\%KYy4)9VZ / =E+_tvciy 4n?LU>{>5lj<>1KM3ZrFoxgbY˰ hFg0:n%4KL |GTF |E|c;5`C%.HcV aQxmbKv5#@O<=b`lXju6+^>zdܛfg3d2͘6X& KHx6! v5kN;sGV9vHqO43)p -ʻT<"ʁ4q+ J@mǫ'&x tSWBF+JK~Nbge틨}HP'#s_6Q߱\-Y"ͮf(bmq,xI&眹p8!;˴pJJJݱvL*jd^mFцY[۵OjYٔE3<pΔ .XIݣp^/K_;\IB7#6*M)lNvO93k;>3XDg@B 8dQ6h[Zz+sreD~89/4.su1ǵc?YÐQ#_nuX&5-NyR5T>X! Wkjdhi"7 3~z>'!9)xwnb.Ҩ+4("}XUVoPR+K\Mab0 p\hG (<j@SvdZuf_je!L2^dpEQX KpRI",Fѐm4]HFES E"\vQy(чM]yGySL5fw-B ]αz'a45hqg!Nݼ9u}[V$dq0ĔeOzdScO'l 鳞Pzz\HA2EiH$O9af@p mƽBꏗ?>b~>FW PݍW~ f; cHw\۩=4wQ41 NxlqՔMW;z9*7.7Q@.3XH` Pd 6&S4aanY>ZW{3Lp QD9i ?cC5`< ȽLcClf<| t0BVh]y˜ -ZU\2ۤxHZ-Z:@,^Վv^wڇ?XI1ρҰE/O%!*bӮL쥬0085`~\ :D G.kqb}uqdzT0zW\blc{f9"ĤJba b߁sornQx>`{D>fl}t#Z& vAf&â8fד1e6kVgz {8^We90a:MЀCO8uF ]dgwu;r yؔVKi P|;[pᾷНp~VFS#tRnx@8qz6LMz~tN=<4S~>ؑY4z[D5_h1_` 0DZJ2zv$~ I=~Z'^O}}7QA_Ӹ=|nl>:igww݂ߘ>.RH_AB^{xy._ Q!s2k6b+sd-yRY_Yy/AZܐw_Cu{AfAqrqЛEif{pu' nܽ%C<)uQW!ʀBfatC~l~='KrcWzmcS?h K ~DᛂH,2%7^Y[s+a2c$|$5'jJQplJneҽ^mں[niv:fᕒiq}Ƶzkڝn!#ZvѨ#œndA4tqԛ %R񮬕+.2+i:?>Fqp%nJM:2F8a55n PXc\Qaz/۬ ¤S `o:!(h~E EDg.uLYpgh(*Ѭe0^ngJQpR^%PŔ7!F1-5t:9Xds&lN:&|d X;Avk[M&G*VyxޫYxz:,4ڏ"PX!ql N͗w](YcJ* 4YL@iB/ʽ;/e?Su\NoƵƣ\UKCf,&aNsnAAV׍[K|(B?Q),* UU%5g%)U3l4׮xl%cYZY+-a?7v:&N-8sDρA=fco86{qsљߺ#Vd)@.]EmiKK }'[le+XeӛЎη^4?dD<ۗ| i fh\B/E Wl%qcфӌӔÜ-$Rf D-C&ǛIj!9M.c! N"dxne~B[VbEjm#."hrȦ9w[KޚӃrk흺,f"%pk1G%LL~Wfi|p 6IGaȢqP`3k9FJ# aM[Ɲzcvv ܊*#׎72z}q^/Sė>o_Mci^ j)јUd.+ZH5k ]ʲ?ݭ" [7{9Vzh2(cMBLHp6tGw0ax/$f +++FAT)hV}T~-OxZ=LI *jUY,1rLu:> Ϫv}t1`QbDg̣F'EC> XUg6h,!]7fS>SqCdqcu2C6I&*iy}00<lZğƌZr <w3ְ{Bb,T*10s*{t\v %37U>N0!yP,߱~V-;A'z7;Nè< TGPi=H N[#OtR{f`(dji88e e{,vZoq8|"i NOƐOu܈&?:sN @W/vMvERþ^@\X,xI4R RR9oz~¬%8axE~gFRu8a$n6'Ҁbpz!T{y]̼ jT=\Ģ nEV;5\o7 "(Lؙ֪KMH}3B$V gJcLf. Z$P,8 ̂$d}_]xA׈I^eN.),VEQޜ˜s:f5W6Mn4)2߆R<$y2rn/ֈxR܁vHw-kx±`FK~Lٸ1)+[)V++bЄ3$)(IHqVڑ98fGA,oSgQ8`#< xH=W`ګbUjү>[&s\n~~2:~zjP:Y*-!=%e{iycccz8[t]S^UH?p_N6n+q Huxxh!qXNc7 S|Y=C$#$Dl P;WՈ#z0P].a+ $~683EAqO޾d/ܜ bjP}By;M(RsY,iGA>}8)E!B!Hng|1(ҙo;Z=;iՖrmH&l o5#Ug{G;gjL^ti (yj &D)$;cpDqXEr&;K,ƞ/~K{i Oɹ`μqTx!Y( H70g807Zie8Ē͘pf&u:H5μ'q .X.L9f l6P׵[bugFQ39HHCWtRM `)b58>fGG49y HUeV*kM?8clF " E^2ZA qS,6A*'OV6kt7ւ'˫ӵ卓^zr0b*$&D5ˍnKLn l$x$DylD#3/ Au%gC:2# 2CElP%EkDQ ],!%#Jq(׃EjQܣUa\wYjw!xpxP\2 hXs0l<{l[^7?ml< >[Ylm=8Y<OYyv{<]yxrd_[;=n>'ݕӍx}g+'08_YLDM"'$/D䨆˛jH䪗)oժ|)˯FFP,n-!H%A%,ehQaDbuHsFt}cc'˧Oo?VNNO`e}H |V`RoRDƃvq-~]"_JQcuWӄWua^w*On+ e6kWW{OO?)A=/:-2geIƏYdfF4bE۪DPL~& Γjl?~o-=[^{x{?}Ԯ{!{S/&2ʛ+W-6=FɁϜ'][0K]DiBe q|8^ 4TugK% Z%XmcEa]o$j5v8)_ssocj^?+>+?h,n4[K(fQ²_Q c_B4!cǑyr2:id6Y:9Lj!v{zW WdB͑J=Y4.C#)70H|*; 2x8v `{SS4n36qfNqi:/_m2ʽS`^ae֊%}cہ8xiwjnE]2`3CJ>L)ݺU,Uja-4 ƳcKsGV2W++ $VwND%yVԖ)W^`@ud#G?&WdC z?;yN۱i;Mt1ʘPz1qjщ-vf+aJnb4~LD_& 1P֣8%Z8Y"fƆs+sd%˜tk+B}.ս8uMeՕ"WGnu f}bm6TWV=҇Q.& F{vTTB{]知hzbёy-LFoәR'Q?sDDWNf8s7')?.~0ɖo|=ɔ3C+L_j y^#mB(!t›.\Oxe8k$gu<>[j;:81V1{؟%_2Y \X99QlߦKb~?OJK?qw'[sلW3\$sOrrx'J/#2]cQOzJT$~z8W*59U"^0th+rE[uL┾B>bFZ}nQE󷵜%*/)dyJ# KkC iH&R=Dz;^f߉Br)wMZJ 0iwg ]LY;T|T)n^kvzl7iyFDy`k䳺[N,ߧv,ą)Džxe6{.?LwӲP @OʖK%ܘim ze0|u*I'GylS;j+Gq&u:za~M偷mlbrźx^.99jZ` # r+謹+"5E2mv e8޿v ~7p|fɡlܛ f\.N!Px9Q+N"1ܒEKE&M%U? 8m"OH*^fAZx)Q*0 Ѻک>.TGY}G[";^/9K+^##VvwU7Ɗ:-MWnO) 4uh굖XTgIIK*]@=WY(SNtJIDye†ԎQRtIĐ Ŭqk5T^GWqG*λwL8.@{΁sP o(':8DgȐ zˡ> ̊xtM- %b92$^j`xyG6"כS|+%1P <|dlU8]G-1;TfVxxgW,&spg* }ka`2!<OmQ0Pgge ;h$ɺcN3=G uhNq'S9j-9ǎ^Fk2oʹ[ gcNppfu\LKb082]9I{AUO+$ 7w{m)p|~`Or_5؜3B7ɂٜ'c\9 cۊC:Lcĉ%q'cn?` %`@wpj9hSE'L vtqln^2$.lӑ_oi|#5FVk|eHtikzgmb2Ƚf2zwY}w+<ÆR7.^ޢTnQ;S*lWԆ$p0N#+\%;&~^)V_NWY&J\SK3Jp 0s4pn%y#uw tfsŒ&cEY6pEABaGaR.{NꍹYA`HW@ ƅ梁Մ))Mˢd';*:yGmzEpxEzc!9&k z9dp(hm +tn_.ox$$a\}#)"oۿ,\'N1%U0gĩ30.u^H/r J*t Pr\'g ]Q6sZQCHNB@d1d6\1ȕNTJ܃&EUqPX$-)+ yd =iQߊ:pp*)'+bDΖއ&ɜ‡h+6O&"tqf?8<{]GOiĆWX\k"9xmLQ1@<^wL~1[4!<د9:pFbhzvv,`=b0u)ߒ+岼ʻn]!woqr2fɵ%3yׄص9&椙$ 2,of2eGo I)&1~IaL>կp3w nY2# h} i:$cdB?& ksh9ԳVԤQ݀(-.>>YC絕 89*s\}kR{xD jfdəNNgDc[o)^djD3EčN]\pu4)1 A3W6&a~ɑj1ĔD8E O`(‘)5\-c͝c%DEq%sEhnriG)ե="3f䛑 EwuH(iz.Br XT"̱viDm$U1hl.\K <QͰ{Eم`uggq%UZun'MscL_z?IgAs>Z $Hʢ%9LۚfMō`? U,œY&И$y$fk B\n*Sb. V\@/fݨ;dRN,h-菸dA'橑ј(hFԊ>j*D@=5"he.B7).UFEvZCq0V YRF%2H:9݌59'AoQKXVϻ eˤމt)<-f( 7s],W/:Qt}M'Lia-un7gݢzac.E{E ?nOy*gL;dfyUN'0+PM㣂鉹Əj-On$&:_E'^M+1ӭ6Gńōb(m-c1sCȢaNM Px<9q꟝Ll0tj{;]|hqߕdՕջRr񴲒 '!{%z<F 3XpFn<Өx~3Vs֓ܶc~E0 \ş)v_hJuɿv@ lc;?G5Qo_ݬ;Y4oGxW{İ{FWҗJ sʹ1*f9#\R4?UaƔXlɣܣw&wl'AͧwwG/9^\Q&\u |MCINcvaE_|! ).l"]Rǘn:C fd M@P2b?{xr%{3k(80r2nQ h@1]jspndج$KhR Q@&XŘ#(hQKyqAq"%hrYU'ajN4A7 xcm ^R/k/؊*LX2ГJMijQ<63}p*qE6 κ\(P#}Ц9[#}T<:h*?sFϐPĔ:qQF}/\??1 V@@SK?/cQ MIa4(1^֍R#|ʡX( J|b#VVRn\=ݢB–q ian1zD%=6"eZKsp\F^N)lHjLF:~apB(TvzYrKVz*6JXsrDɞSՑ5 SUxʏ{J{zP]x90H~қH{auw1t/7s'i _G\΍ydȱn3 T8KX 6Ĉ{! UxU8I(#:&v.TјE'-)d*JO90Xmyk|`.l4@&<n2e$V7Ɨ*:Qttp9~Y^$e&~d$.~!P+)6bbi/ڋ:XX9)jiDo*3|Խ,sp*Kޒ_lى)3wdw$]qmcǂWœt=vOpn7a$ ݨ'ևo}.``*؅x@u}xkkb|ҥ֜R}X٠g+9Ne5k8/A5MJ9^,H۱N`Iq =d ҤOG-.0 !;|QiNQzt3Hb]ġ#'AllغC6֔I2V r}yu=M9k^h:&N eۋ._ZvξW7f0S>Y@fV]I!.A.lյm]&>=t z:ԌC傖WurTTMKlM@QAR6T vd0hb4 N1%JѱC%šC.v('Scgߍyt·L9 e֔S{ο66ᓝ` #6w3'Ubciʶ*pj*@] F6=ސHy;G5GagSIo9t |AY)1QYfhke6L5H/wBCN rwj2m.Ҟ_Y%l6FJa!%@9`M]`Щgoj04kqдEZ;[W?W fqf樣Y>NV&Ro#~mTK3@d⯪I.1 Kh"WW(E},9a岊ojYaQ3k5x'a_W=7-bW 3k>1ofe‚䟀f Y+D?pw7 ee`E2R?損,9`L)(ez>>,YڥRp_blZ_0SYb64;3no3_QE~Vj 93y r0a9)': n"U  ;{3v÷8T)b bk*)toOH{lY)()M I_t(~P a&g1:ld$%io'y*V)&~ה[r+@[QDyؙ$TP.I呧*e[*r! fLGtyqTEFUuZ{?;m=SX"9iA2Fœ}+ȠlA3.<=VxN!es35XbKn'stH mQdIWk.[/E?R 2~RZwuZUδ"VXY`"ߤ)h>$9z$%!ѻM1@?6C2Dě@ȉEIQ>Tg.H1iA;\i֕kƊGY'hdæ1DuY,Y獭ʟa3 IhXZo7ɬ0ԍŊ9_Zz Վv^w[g3ꏶrwyz2˓'w>-.gɲp}PW1 |[)h#3a%A4 UpR$hO]MjX|͠?vk+$eVd>5q02>$ /qv$iOEx`3,4LD-"x9OjSׇoaY`5K{x@S:lFq hK J+U%hb7,`ۙ:kq4F^Tf a FOuu'v+ "*|H}}ØfPt(HBN1;C t[gt:٬V?}T9*atV#>A!a~Ǩ \[H |3W><? __OVY#}>wW6]ϿlסTl/TZf~}&G7;@ XNwgdKv([/yiWv[OW?|1_Y_$ٸK>ݫz2WRz2yڍfF\6]/x5hfpXBJ}QZ=ZI#nq+)]͍4Ҁ)fkR`F]Whk6?@_F}p_vd9\f6Jh'CmnIQR@;)Ս LZynV27ܨG}B>Gr i6 ADG|b^P2_|I#V9H(*T=M~Z͝:W]2tk_rǨvHU48+裥>r[OW" Xq-U7ә%/Q8ҹRe_`m0ZzS>Tz13{"noL{Y?FaWՕ2է㫘=t,Et<ɬ'hJؚA -@=/Sjא\UqcL -)6tI?-Fp[uĦTӛe >a|Z[R?n`}@v>SG8PU/Qu88eکb 0@QLG3Tѻ,H/'Ll ɇks1V>7@l8;}LQ[4kn|d;L2e@Dε!ΓMq>( s:.-/_uƘ6Cm{\&3-ɘ azx',Ƿ J|?꒰̌.!wezLeFi7;i7S!74f:)YJy,| ߐV,(!WP^Lz82%CRR^=_Hlk{dLΆDIKRfx*s}>ws}>ws}>ws}>ws}>w~63X