#!/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=92953a21097542194334870cf0749961 # 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 :_\{s8O8ɑd;IujeY#K^QcR,,Вٯ%ʖ󘛭[bS`ݿn>|z9gዟo^>~>_>O?)Ċ!t'}M?Y/\DЁw]3ZL}}ŀ&c ZzE6:agڸw _@|O[;Oww1|dh ;׍ޠiH260; lF;*;@@ƨ}}&ا"Z8z:<˜hУCKr5]dY tq. a\}r1؛ѨO#nhzO3^ȠA04ߝtq`c||a4zp}4ld9PO<bIg2Ʊyhwqdiĺ8\o'a WY_P{3hÞGnhM6@UV/8] NIQ[4L?a[.Նw*BKۑL}7y014Ҳ%~>1T[C4``w'Gj5c  0K)Υ*?5 7ӆUY;|f<uٿ|bmI*{+Kw/51EVA7?g~Bsי6_ӧ q bx5ޜO;~vϳ5~; d2/M{t`i&2_QTUUu͒[ ;Vd;pEXFO. d;0/u7|iKX;_*`"^Bx/xEnιӫz}Xzލ|0)^]zP6_ y2Azw6L"BE+#?w.;yyz-{8q4II)LP>.&~a Jbn%ml]C@a܂xgr%Ziߵq_Z0W밽+|,EvT=n X lb߸cnb%Ni? ihu_k5sxbY@oj* ;l5r`0QxX4~) ddV>/h嗧u ÀmU ă6\$_بZ{Yh~ ׸Hݰ`DZ{Jb S>-B|m-3)eHO̿]hyur6 ݘI `3Djqq*MĈMB7{gtgYKkW,YStsZ8A'Q;G|0ްVIc+?-im|h&4RݻB6` Zu3\+aaUДbfsbIQ@n؞ǭ(OOs:KX1;i6KK~cB/Kre<[_;x]E_I1Pr\2qf#N?D5ށxGQØIK<@bAݔm1mNQ: ho~?&8B[LBt9Vޮ)Jj\ !v,Zg1r+ v:;lz^2`n`,Ĩȩ>M~U4Kh #%h^XrDK+1 E X-Xsch·,uC?l.r90ßGLPᗊt :x2IqSXI 0b앉(HjVnRY^ҲDݘ!{'*)4$ՇGh&&PUCffh~/ޛoso#6jUKJ-`ϽṔ%"UIr) AG&~6N&\fZL߲/RQ{Znחe] vy$3A3rT ^IiZM` :ጀ` k~+n*+5 >`,eS \*2ʷpmާGlN]3;B̎LIonI)KL4Ln2~2EY"SM]k+Ĭm |+3Rq J jdm@O7؇uO4A^"pfb-%"[Yǯ1ǯ25-lt2H9E+]<*[0Kq!6+D6᭹sۀŏ}-ŝ6mTn\65[-Dh. qk=:*&OEb.Җ\ZNB)MKZάT۠9; .̏Xb;1F;M>ő\vAdinbjɌ0i ,w1F{B_҆J):JKbnǢ$-Bsf  \YiH)گy3cż%;MDPjY,zN. h6O1 HҧFi2,(K&[TKJ.Rx6X U@wT8X^|O%bwC)n4'WS>Jez\$!l.}nͶ(گl꾡Yb?q`\9E̢UJ_=\K#2!/Ida \j(70>oJ0hAM|˫{.UKkKL8óLJi-"+kY+'ȵQ̕qLh}$Ws 3Ӊq5"nuaiр,M*Db;V ڐ$!K*#eٓBQsB祼 c&P&oS2[X3~ k+7rgTMZ$çKp%YWr#+Y Qc* @@F/ֽ"_PClx5Dt1 3<9/O*Zw H&?(u+=TUw1Rrسfi19yBG^;w159% yG"jSn`Go:Tj­ja |d w\%$< /;L[a7 xGĸ)JmeND4L|>*,d$ ޮ'*cU븜՗a'>*s_0>clV)M)mǤsDJfʹ!~t\F}U3}(dߩ*^dB1Z}MU,Lp2䰑L-v~24wC%Wf]n^u ._" =[}*Nufҡ9C¿/GXyO`?yTTm!Ky4e-ImϊÏxE2S,# f,evT*x!Sv=A6'ĞZl[A=0VSeFP^!k]mq>Q   i69'\+M6\ũBa?G*=Jn2U*zψݮZḆ.E%̯ZKyȴT SdSaS]Cgh=Cv$3A0w$NphB(qb‡!Msl D)@+sc3%˚PV 1%e1%grdw;i1WpeOMcj9q* jFŮ_7kA^J\?cͱϟ3v%Lv%d& vNBt[=J(*ͅ+t1^KhCUD RݝdG膩 \ypOtʧٱ$O<_(޾\ѱ ]vxeMl/\D 6"Ǐ#v?$C$';fxtQm.aiF6o{tk[tU a0f}w@e;$Na䶾Q OTW_ `Y7ۃ4xH N]ቒ1^-a| zƇ4U y~b!qRvfեP3 ד?8,vUF~hɻ=tO1ճEj] #.BJXO+`K#zBlxe_7şQ^~?EdNvnV^A nv`! f=ژ/'Yw(I#*qo@)p"½qti_PfOƍ6igo8m쯔-xYKt~YS}%W{Y# v$t.AלL[ C?7?@2E Uux_q΂2 TR s)#:& PPo7,}tWOņbzZ]/2 lXzeA~a2 [57oHEW`)ږGQ2i49dj(hb*"ۭmowow)o%/ʬhK}m 9#####]h5,3j5ڝj~N+1U\(kLc4ͧI[Ñd]?&K>΀v.1-tH3i^긻>~wÃؚ89'x8Uf s8R1UMo0]&'1$QH tzg6bcͽU\pr?ӥ&t;it!J%PcF!- ȵXb2/:N+)70)z7~]'kYk"%RG ڛnqԙ֦7K2`0Ɛfɗ%]C|)>{DXCXYa">XhuBz =L)T,lZr$K,[돌*Nz cH()`'2J`cHH1=]Å,h(> *ɚ*3-cswAݦ1W^Zϥll ϣ x3\t|ԝEj2ʑhR5Zߑ? 5c<.wl!'P74Y/$'$pclB㬎`!x "Me۷,S%vaac / jnGtG("Mn/tjƺ%A_TDf v,:#;rW,h-PԳ=&vz֬7[^W[Fu_ĔzJ}J ~J-~CD[vH]ywʈopݴf=fd2=Id9QaǰlG,m[}7 vz E_z@ʂ2r *͂sBpx[UHSϣdm$7RM40T%Nni*$PSU1&Db>J=II A MR#J]j+|~ iڬSͺx KvFlmx7^g7~찓LڡD.^Ƞk`mX_ZQ/Vɰ[6^sn6ji[Ag0⎻I¡VfXQ"zJ>e!T ^~4Uf?{7ן?%>?/ ' ŝ!At "!D"\NZC 2Wp^$aPݬXMlR|?t(CQȡ6cX`CF|rsB qq30QI /jDn+«CNl!nɧJ -E}B|!\N?.tp!;NѡR c` -$GbdBO+U(IQ1)Q(i ?1P2PфU^iˁwtG,u7 i:BUBlib-X&: w:72NQxHwLm$%LItqy7-7%4N |Z} j2j,i0Kyx㙤n'rpܶZ/uh}+vgUr K7 ` ?'&%~LlF4t;dAn!4lÇx^+"s+/+ETtv c'|?fXm#.m|"?=-bh>g4ճa.:bw+ZD@/RԸF x|q"oBQȯ5ȢwޕoL7fm=lx~uKV2AO-(Ӎ_QkNzἰROD~`;+n5فwrLU}xj'g >;R(RX/6TdGi̛k>>Nǵq$J6 1U۝tl ȴ]܎M]}݄ IhTx jiHt܊# &?C8E5zƺuv68zH4|^ތn/Tިhs'zza[1'!^ ;I Nf]N[m/^!Hxxov>$CX)>\{kmCT^eld[qvZ0w!L!AaOp~0#ZK<0P'AݙHt鴼zcks)kBUxc]%WBU j`E|'ЛN>7֭ eS@/3r|ᄱDnF2CbM{_3^|e'Rpj{=>2{h0a݈R vRXLڽzqƥV]I.ѳ-N`fHF`28O|KDK{nZN+}$ơ쒱Wh(3g_Hɿ3k|4+ n T+}ks&ʰb- %~,ܷżuI% *'c"(>p_d0Qm< KaD=k]Cg !F]"|v;`؊No~d&igE;>i5Pو FWm偊Zlfň1S3ETVtԶE.cE9}<ciD g4-41FB0îٳk  e#Fm=-M1So WME̲bD};8UnB0I>X`hj\M4Ն{Qq )2oA1xxD qMB*KP#,^ڼt~"OkMU&7רl S&Kڙ2]1NZXu bʽРņw&y>) od|GUvc`Ї0exǪyRnȐW 2vn2ŠiP+}#SnpN{:A{TlӷNqO<&WāL g%DnMH3'"n`pqFzL-ni%a}`CAW o4zxU,Me-M@ faгaW aڤ Viy@wS᪚-M\Q#͘ZI C- ĐjM0Hj Ʉу2eg xq~(Wٹ4[<,fXƣ>7\9q29JϣyVo8X5I)e}\IGL5ZG6Er猷 w[ 0|!3no-U+CâC}Dxm`';C?~ gm3& 7CY X_u9j6.NRΗOUUYPpv7^d%͈H_8^л?PHx8Y[!!*^;#u"(7<^(Z1$tږuj&[7!t+Q22){>\#}~&$sMqOhSq@;|9JXZ_|> Z2Wwi#ra3|. MQATፉcԏIQ%.[DU="h,ت3MxQ+Ԫ>50"nV}ѶwGk?AlU԰J3,CtA7aR,j+aBY"9–>{%}h20{6@T x4W t%JВTͶ>_b BjФ$'NR! l[PF sM04A簊d N,U&ۮ@zyA.R70붖Jnp zOWM^6^q0-$7%ȉr(dFek2 !k jZ0c0/޸S3N;(w5tJDXV=txN!}ӓ;6g:Auu@!LFú2ƍ>hzԨZ W 32]Y" {kG9q&` .6,%2b>6cV5;ZVj9ٿ7NND2խ%!*8u̦JΪ=:0yq:LBQ(F{}Ep׬C0j!c=M}j2hvT)>a^]{g1tdvi$ʰیBh'J9fi4䗙cIzzetΙVKם Mx: ?{+KnPa4+%Bu!>S˳QI_P<)9&-N:.sNs bDM?/'ڽέkf'hUw:֍x咈Ҕ?Z"]k;pUk11F \$qASb/]5t ulc+p8"v]GaX"Xd, r]tĞ("^!ݑ(x4_'7幓~IVK Ov-9тb%+tQ7WI)G fg QK}njMq)趎 4¼3-R%l[n3KB-|݈MM7ȷ񵁈@xz :'?7#6~|>F#Q K¹Ϣ-Z7 \+ E/.ˢu嗆2ck=bs\bfV6|@O(nE ^$!99 VQ{_Em1* bV=RV%<b(D/a{r &8>]M#46C.N`0zNC6)ݸwLƓyH<! 왁H吕+8gG5h++" Ƽ}h׽E//nNCG`RD쳗_./Zw"\E5Enbd"¡O=RclL.>BQ# ~LTI}ɞaޱ,7`F]T16rstYh0[H8PD>CӔ=^9pn9TLA/M:0ton.~b#y|z5D'X?w&_knEFT+m=om]{6ЇY{*+H4D_rOXE}j4d'UGsJ .nϦbג[={ԥHg/Loωf8/+AbX_:HBt.zv\{8͊QOVU_ |XAPzݙfBQ\~C~ʶ{Tf=VvԺl5kS8?|_FQwM]au[n5G՟EU#*j|]*7"0KJ$1 u#U .2 rLtVYw#4;oPD*CPU+Ga<( `1L+dϟ=}?|&Oͯ%>@`>Og2U~[k5,?@!!F(w!7-myE#z>1Ȳ;6j{b eiU m.Zy<:̗y%n2dL]s;w53"YB'wBtc`dMAc5d7cC֜Ճf U7Ie%o &[.]J"GڊZQ eLM]O-.,3st<n}ѽN& c>^M ٟ P>OsڛHC%"j:Eߞ@$,ϛom栬"NE-_i]2䙊wKZvNc | #85Caj[2yV:Υ?!vV9 6P߿M;Oq 0)G bRh*H'_Ħ|i: FY]1_|]ku̾==ܻl fwaVݖyocluw6X}8$?k3w'Eouх݋m~gC_ m8TEfAw:sQTRu[QS7~o6 mY##&/;qgKZko4}ʡsŜkn8/O: -4?䖙ߺu&3OL <\ olcZeri?Ak՛Jp4 CL~@-ބ bR"6ѻfZ/ȍ{z@G+іYHQd@f(s*tKҏ(p[@ֹȨc!VP;qES ^iX}toֿ5E{/C_W LPY༒rORN3f\lK|3{/EIkZGı8 ?K^42ef$Ԃz^_"eHgֳgM׳xֲ̚+Ől?ηsLj1ðףZ.<~iErk%X\dE>.eʱuڃ2Eʰeh<(FaVyQ3}m}=y}+f!3“){YV''~P6XfT5ŝ &9qA'.{c9zB(#J8Ply2wG3CG1eOzsDQ&TΗ{:w~-`p{eeubΓmK9qa.f(d$ h{̅O9a- 5қVB"V$O;\uPoeʋ+? k2_ɥ5oF^llAw+N fc 0%a }bJzut`8ĭ'=]j0`(0|QMPVm`T^TM I"2SkrWmS:~"{FqB0Fe^Lm<߀d6صx)7*@ *Ƒ OnnUZ K0 G.mnձ7k/gP-I[*lR Uh?i/wx,!H#D 8"uTxEjP-:XꙤ. QV q!5V >$sf*48I YcXyl 0 t'5S#+[A3R C!0;9(jBu /q u/ ["Tq+ayy7j_{_lYOpK^rux ᥷Kq;Tq,4`u6M ߋ%23]T-I% }x}]8eM-3D=ñ39*芪N!-\I^.A2`8.H yZۚLج`.'uB|f0. w]V1 o&}M ;cր(aO} `86S` ڜRW:K,`sQ58_M1];iat6LMH,@Gf||>͗VeuSvڈzz=L&-;[fem5#kU'|^iF"xJӂBB\NH% %S/:ק zp\Nf>k@ӅQ%APAX> wyyTCVtD%˦ja5UlԎ(l2UGWƬtAbP7 $,eATX cK.V&jOE`!#  [mm@?ߪW SFx4Q-x27A[h&H֬y⬌BJia-}e+a[h{7\WBqSƸjv'7WÑL4[1 lnDxNR=\zr%lżSU ̃0ړIɳWRyӺOMH~PM^Sb#El<$1dJǝd~8cGmDdq WIOeap=XE>k7(HwS++ɺOY2Wx>`:(L)gt{y`Dl$1|m,*{СRҲ-?G@||n{ZA WX+@.LrR !{wUL&["CKjvQTZ$\崎=:킹Dz .߉XdG'jo0aLonDzK(y¤p@36IŲzz< ]\Cr2Dg,ѩ'ٔ_9+?P[ѹRHAR4ZX OaQJ0f/q*(`' }NƨLB|XѨU|p'g=P9G=T/ńKI^XR{h5 Bā.we)^ٔQI (:Ƶ7UjmwR`VwSRp9G0eK8F] ?UA;+S8S^rO-xۿFȕ>l֓/|KfX$`pJR2 y:]ZQqjۈZ@}_&۷+\\;8:CS,ֳH9]j2ãFSũ!=``mC UQQ׎ Z `|(Fk *ST* 'wb1J; ;HQ$T=20UϢ%q0fp׌#YcQ4ZQ0fGăaȒX=DoJqE@:#J i:ł dJ$0riBDJQFC2HQ #~d AIᄉهiC)ZHDSɑ!YNzB8GrzĨ68(Lƚ5!PլQ*@(ޜX}q HC+I vFpgo:2ĨL50R%h`<kWv)Pc2p|BUZybħyF_j%" g[ q4'fsTIaM923pX2V'yդowN g^?t-BrW̒FM(SH6A^3EřQt'l#'kʅ eܤCa9{Q0AH-"~qHFLsB }E=)P6..B2Mg+8C RtƱ:&I[??>J=j%>vj 3F+fr+Ο{ gܣMzD|O7˨PJ}!Gi/(Mڋ`KIo%-WGQϭPsϲ (9G<S( (lި{m,N%XhiO#c"&ʈ$FYIېٰA-p $г0`; ZFCxa?GRa.*khO"kl3|s+G:Lqy)jȎ4ԁ9x#j9X&' ; <;h;}/yG 3FP*r,kِй*qo|{1xh"p-֨A wZ_${L&zd;Z>@a 8%L~BIIӎn@sgHK*2=JV!Ӛn:ö}6L)\f@LbQLo'CRXd)'w =wР/l`XNmL??n֚m0bf$xH۹{s׽ꣲɧYcB{*ށ E5Cɀm xI`4$RI!Kg t&<Ř:ϣZ}&4qTW?X'o fZLdFecOwvxXxnhwp`>㯭9VrέKF Oؾ"$tl)*-}FZw&yf7o]:BwЪ #'oZ@э=]'+|62asڀ *TGJ*]e q0`pfym!)z裺莭KwsHXX}nQizu!j2N`wY26tbf]FІM9w5留WyNl: ѓϜ0)ˑҸ˱ii-nߕ?+E,zxx:{LL89b"Z2Z\+qb!lՏ_Q_pyf|Be .N]^p_+b&?MڰR~mm)kEXO2WD7o>|T"r~B_|Op&;bi qe4 1RE3.,reIpx{<:g b[x&g0b{e $nol32a N4H,lc_!q߿3liJ屺ǁgGz:9SQ) δ~q87;|8Q,פ$F*.0ͼzB'B<Yi)*]ez dZn?¢n2-#ONmcw/6?$v2ҜiIGEU'X(iL`2;)ϠщgɬЪhq܊sϜwQ^G E3ap2\ ׂ̻#e 7-FH$&"LL NN";B$% T.1d^_BO?LLH#&]MK Ӵc>N:+o)eB^'bO宎Brp]i1jZPJv,m8o[̦ct1>m@|/zoqۑX[9qe| 9,mRFwg[flH[!js5USeU=F_u$[*`9E9#rt;g 8ovZS4Ƭ?KYƞPH%GtC̶̟FhUi- =w~']i>&I3^KnWQMl>0ovB&\W"c. .0?MKNyf#p_)(MykL?ˢDuNJې{mrTF!=v"tSB9T si )$4R"JI )q5stBcW[USU5D;m<\"iaҭFŝL#6$tq/X9) 2SOvhB޺D)Kh->niU2~I `cGAD~偘9wI`)E f-/bt]9DI;IG<J m:;M$&͛N}0V_-"b*Bj)_?9{\Hv]wa Xm`8lZ1J<뼱S@=Lqbzs?@yl-n4*MkR3dBX3Kk Wiuaճ+e_t,~vZi1>Cn%nn~"jg<W豰׏^7Zx]BhץY#q)_w Rh'*Qi]W(OsV@Z1*1,(!`Ddֲ N) R!CRkx+c7>,@Nt53xٟ`y1:O:zNZλ T!'7@; \  @^yfnjӬV[uzni Mj\8z@mLg܌vjwA&B*<ybDh/1`[WaEM|0F[&vXbNx2,xP"j!l U` "miZ#v=c(Mb:XNT7kAp7)=.)S `;)@ Tyl6BSAwhNKcyўԣƓ( "JJN9ᩯBH<Wkf p 1@J;(«^5۪}PL덺{/vrU{ h)z}1#ނۨu[ѷ "4򰔧@MZø4S7v? T-?:0IVC>kwĨ889Ӱ^{Gi jLکRP @/v,S<aAKNc}r}fia84%UpxiԪ8mZNU`RǢaq\k`,M(5ۘy,!T{F}I;#ο,r.澪_7᫽ˢJ감mjaK,Gyi>?m7SL2zO#VVZBFqz0m`k] [{Է/VʷEk ʷJ)>ݤ|U;YZ(*=VJ>g .RП-zƭlKPK6v N=lw9mXͺgԩۍ/m_`nT};sgwZӠ4?sh-*ޢah6~AsIf9hH#fzy@3m4W/~t(azFT:"}No׈V|Dk{bRH9h">c*! [-_ ?j<___PM%˼0+>Må &b|%be7mpLԥ|dE\JDGZn8 b( p@tUq@i5wbN6 ы0ÊRU9qZ*:$T`1t0N 9ބMiȾq=ّQP1!NPm1p>LhjzFǃŃU$^:vf@B یb3=Ps,[ԘP"9!xNb'$vHF cBIsQzNJ@}$3+j\+@(vZZN)'-Kݒ_ʗ+n8Ŋ H,ɴe'`w󈶫cCw$%z47FDazӹT\,[.0 RwNrpkFQ'i-heMVOv͕OB'0<clNTFslT,6o9J6l:ج5e"NJ0:މ T ޟ2 Blp;J JTAh`*`.f-ʰ_sDSMY/d*J:p30%87ӥmU!BS.J,E/_fKj}NTREU\ n/K_$ &؆%7T.y+T;rB>ɿjTFuM8~J XX;/s=jiDTn23|Խ-ްI0֥^oI8/vPY zEk&i[A !Աu)V'ocFQ,ZL漝j!z"ƳFqYJk'13 `(c Vkmvĩt +ۑ4Z6e׈x 1nm7(ƝJȫȢu-OWdžʰ?1Yy48 AY]^8V{[1Y[ %E򄯞4j'?4,XI4&.hmTO99u([ ${>m%[RkmI1d[))Z'bušQ?.^?G Qw`BgY0AHCTRVW*bAɧK, yo802R\ȑުIRQLE`]?lHCvoDVB@}!KvPJwA·vvjڍ]iN͢Ӫ{pIa|5׷dV?po[};NһHH {&%?o}hE$)wEjb /D&h =$ee{jӞN%&Bɂ #y$sUdLS[>Bf) g>+9Kh7#weLOdaE hoƋtOSK&*oͬ\f#-%%fs+;% gm6hLZzԝzd4M:+ƀ/+mL< 6NyXf geɷVOQ"^&bĔȑuH2IDx@B:sFnGo9^JmKD C"A]#aI(ħ~bB<"٧ hoZ.)y|2CI>"Lh(rmjEj 5\9ȡŤ~ Vt;KvzEdYʺ)+=:m>M[cC ~\S#z1f 6xxmD'bjHĺ>Z\T3E/Kk("^ey3(\]`ϡvu+cEEؐbQ`Т]CDL%*j_OEYoTE $ajԋ [ }<>{}I^ơ~\,P?ż :.ͪn1mrWvsA Dy% \ϧN!]hO-a(!Y>!z+vi*fڨL{6&zk)[ 1K*њ;W(DK=p*c0bYO<%>b=YnU8 cڬ[Ri-UnjzWag?S-)/obs#͏S6KHºhS7a̬ aK|iͳޜ<2|K0&,0|0 pd*%h 9u<&{v6ZHZKeRxmn@+N h ʋgǎI9 xRt[Q n/>zӰmչTxE֪i$IhDއk`kͬ`NT2K%>70ZyDq켱) ~$'OBvB<(|6f:Oapɾ"Y J-StG7CX!4?.>useA0Z㱪k^B#I5K`Ib㓣ƑU& ٱSuGV`Oqgt~/#+%= )2Yar:^P\FS//@! ŭ["41LBR'|{Mx1;ͨzǚueOfF/c -Z4FGcL Ҵr̚͞-8:=df C/h|V#eZVQm &?O`۠ Zl'* KJ#֧e&ʑ2䟄NY[b*s]~)4BDH4tzG/Y>T0gP<;kc|: ,ZKыz GBjHh0wS4g蚴YԼ6Z4PAG 0ڄ)Ң,Trk`&XMa[b|ˬg{mx~VV^TP9a^S,#Ki3 &Y方,p uA`Kd>,Db՗z]3wIPǚ{Mc\7^l@E q qwb: %ʊk8thc,"\``ȿ'3!zsFx"wxTF 1k E ΀[hQ{Pض$4ݗZ $5ڽߓ{8wxœh@ǵ{e{vMJ8`)HMiF؈pQlz`x44|-mkwF}+f-t{rBj6Ԭ^5 H"GGIiĹ|Rqp8 xp<tj8D"ǎ Q=L`Q']!}kQSМ{bX¦ cV66ncCgt-V 0ZaƸWKfϜA,7'Y {L>c 6K .;V /Ztiĝ?_!R>Bl2uh ]-Mbd7U}}O01`דbCbIDAM}J OH]K8(VSauf$,P,ͅ,Wgށ?Dzy`a]%JDTYN .c?3Jt*O-F$V3ԛhk֩ ^>*5bM尺HVG(pU}U o{^X. gzoxQ-%%E宫D \$ٿQI3"(+5 ɹAX''vaHwVζ:Hp|2d6\;lUrvjPz'|rrw"LQKu0g]b`[B?0]!,˵p05D ]&'lF1&tk|O`HΧ EKbE$c_|ћnRj6Ls#~}imdQHuӳ%N=SH2吐W4Bql~"I`o$!|"|CNLJK\91Ct'{~$Gd.Rud}z=#|7evhiRɏfϵ妎i\;m| cYN?Ph`s~af9h:dZ4$d \m bG0#Z} { o729mHsDA(g!\5&90szC# ͉͕qsmIQb;;9Y,$lj&n[.+'}$>֞t{8|k\ǯ5fH O'eVtpf+O҆ Ҧ"պ:< $,eSe 9U #jKؽ 5ٛzUW ֥b*d4ƀ䒑x7DL?{{kȴ/ ̵*gLagWf$b/vu.[~9dB/69>*މS'' ytrKTIv%FiTNUv/}WOoqÚu|Ƒ-m " 1:^[!v͍fF c|1bmXNS MQ Bt5(?&(E},,_ut]M~Pk_r;R=yM? Dˏ{U31!Hk/bLck9LYlOx^D u1LkPJn14ƞ@?WF3 yTJ)z8t'+Z?a`vZJ C0 %N'ߣ 蓑&$ CE"o)Wi$, Wl 2ܦ]iULe l5"R5UjdI=Eg-}v@=ef<=WrΛMDFg  ʌ=|1,\&lǢ\ id- % Bn?^_;DN J<u{˔qtR_N5uEV}fNPsxuvӇc(ZdU;{ln[,‰:2M+{̋ɷ{G{]^ަ@huQ_uAx}$[:S(TLLe fQT: imUQ%A)Ԏ#GC` Tx c2&PbxVb aN)a%P3?jEh7;1i{E9UzӔKfS^-R-/zX"7TQQsS!N}c֨xnc'F@þHi^bqǨĨRm[]2~RyA6cHw;AKlVk~҄Zg*ui\O,b‰GQ%7.!Zv>GPRd!t; S $=J݈N|´jw7 O8'=ϟ&_7W~ϣ oI1 65d`ZvjUo:Gz+J{N8^J@!O{Bk 7#/GDTD.e5aEM7Za\uԈQ.+ ,jCI=F{`:Ee mr>A4ڈ6jXXE9>_e n^0'd#soT| RU ͻCe]꣩g 9$ n}E>ò2?p0A\" ܺ|֬F{8ckkVѽc,ez*ИDF3fh.Hw8oG kp Hc5lyHCkr)QX;>f˨ĦHs_]VEtBB)%$N<;)?lLd6YDB-[v~yOFc$E羉6iw~rҤd&y)/-kG;EG^Zo:F#>HPf㽂t5bGDftǠ%`{0[`7$va$GSbېr.s|]Sqc?EY/Lx lG0̓=h-j#h"5vJe?T.s=zlʅ{Ѹ2ƸJ)q RI}d #.e{pM%Ar` FC  dEEd~'䜆.Q1'ǝq=]?;H3Ŏb{Cq¦9JEs@hIy7Y҂DA`TVuHw'omPTkL R.0a$pU.JNV;z؂5μ7&u;dF}Ҏ_sRDRiY :m’`UtT Q`*t`P:(`ba?3 rd9(tAwu&&S' ޱdxBWOlrI#ٮywգf;j3.I%zƒ~e.,Fc&2\msڭsdouܨ3]mLc{E=|  :%0mmMU7,zfQ휵5x&DW!-Ng-I_o==fiﮝ5a^ŭ:zg̽C 1XMTn^7+\@vCSB*@[8z_L,+13;C(,!QB"ﭣ?J{8QY<N >imW_7d X'ף8#,:RW ~Af{tVoWa`fE0P-앓r~FBq^#J:W,8*kE&X `'"gAb\Nml$YIT[mᏈm=4vc;hvڌqyTy=__<6Vk0*K@}܉tSש6 Xj)VXtg&~G3qW| X}徨5-OyS%.Rz NuR/9VZrnZ/^ke C?om%ol}]_>kkwGK(,~(ݥխ-XS [GăoVaUc};\udz_}gQ|'Ǯ6_ .:|+z bvArݩq gU& U`*Q:~4jwe2B^J> V _[3X[ 2o`|0^7h~&MtS'͵%%OOVE:0鑂$=;k&&9ϠpU"dzPa.ʍӕ,AFjI N^7덺{/vrUl2W'9U "G{!h@7AC{4r3@Dۿ*3~]Mh`LVۻBXT;/&/hl73 tFӒ?Y 3%  !U < WX<+~}xXG Er||q8J| Wf0K-HlW"([yLFqZNַxvl{Z{zLAdN"! cYs!"N4XQ0HOPS^ݕ8:~j翞׾׾׾׾׾>鼆 W˷*} xzK-8 T8 kI@D~ͼsh=oMֵ66ckv[Z]Rj1󖃨z~ۗ~U=oI qzx'` GLppЊ3=G0)#XN`q1:%(IǞ6|4"Q$#B z)$(8v1(IIy'PW$~$'Q4F&Ȼ0 I}1>Y"*|D_oܾ~~~~~~~~~~~~~~~~~~[~{R)/0