#!/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=db546aa9312d93fd8e57934893337fd0 # 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 Ycnutz ;=ҟHoY~^U_nzJ]j:kZM{fE)a4Yʼnqt0d*XOPE6&t̋|:qz3 "/yb8Y{;'7^d ʨaXGUBi+>C%*_IEBXka}o&=|g&Gle~ϴf zv`ܿА1ۑm:̺-@mcZ`֠U 6oX.-= /ٍiwqa-xi\rh ۵a !s= *3ߙ9F+62Pd]@q7q1bgfE.H732{FUw^'Y2Ȏfb̈́)=|"-2圝*6?䝾y/O9;9I?+]v#>6'o%wΛ?nY(ΨwCE ޴|( ?9]CNivC[5) BU3tauꀬͨ ySrSAy^.u$EOAd)9V@˷Bo Tϒd<ʾ7"%U@-R q+(P*?D`.%2~9ߕ|N%gfW*xȗ|{Jq3%;u3h# )Lf|g',}x"X4ʚ4XbcaR%<#/d-xSeAp2:n`,>({|aš5xgqdF'R6cWr*#X 24l 6"wY"3o0uPjxGm:Sz7(e^ c4|ٓبVꪡ:g ϚB5}gҡG4)#T\c1oN Vːa,aOJ2I6@I#*;N,sdJ|s^ q2 yZ> :*tz $ p!E-cՐ)ڞ%=.GHcW=nG5IgE5ߤE֠%+V<dwQ8YzhF.H*]9OtT3;XcQcIF~].FvO #q~=>QEatUhR.ޛ*.~%|sƲɧXn)84alYď{pJc"صHT%zq/.h, #q ےst& y)*%30}$π|GQs0 yC脢J|1^€uvN#ƅ 'GT:J9XIjG QqlH<65co|7e'mg,"~l ms;d3{mn (C`R0 P0 }]/"kzuZ"gD|{RJUlD>xO"_,-(0t#Ո/'\*Kcw7\P`;:4} G Mmlh1@XdY@R.C<>!0,<{yh+VҕU-,]<&w/zm缆)bF'e(.9P1煲]'~?[w?yu9.t:oC> 'ޙhr=: 4ܱmU+4[S߱v]^DZIecGux 7ϼi]NKי{W1NWHnzKP yXtuǚsu`W/_uW֏?ζjQJ9 n/tO/~6?\QgBU ?g/'hB;`~фN>2V?|k%}!$y|~?qLQ}}y> 52H9@ۜJ!oU6tG7EW+ BMRRYȽD(hEc9 B2T,eS 97*I@/f{'P y|>R n];܀5h?L>Jyj%ճȦ[+d _`=Uv4lzfS:uOhT-^Z;J&ԁ4YShl!=eT7dŻˢ:*};⭪H*E./DBe٥# n- \}A,TO9El8Q:b gq\Jh3 6D@/z&ӛmq0 d`B&\Ot>7H6PH%,TH#Y׋])cTm>3Bd#CT7,OM*Z~D!6bs>A Cq1#\[e]JtGiyE5iLyɆV  L_o@0uozYzUClђj $?s 5qicV\߁)fOREk72jȾw”,O#gLʋa\ +Hbz>wO{oƑ~&V]@਑ ̩ R[@DS!mowow2 (Y[DwD"28qy[a}KPqXN]p4 n0Q)( :y}ze-m#7~WK aֈg6m: uȏPwW53?6GKL&36."7?ILO2*3Q $j'݊t#,-48\8<[ I v4x˧~v[of*\f城Bp}nQ1}̧?Mu%7P'ldh \J:π ],rYLK:(LJXpou$ΜN#,K@~[-S.Fkgrh᝴EJZ+W*`=#(!H;̗zz[RtWKPkRj$@r=*XTg,ߑ–]w֡E"/%| SER㶋 z2$pocX݁qDE,sWM0ǙӔ7(ozYMX,V̑Jj'\wNxoM r/{Y"3G2)c}e%[|>׆uБó}X[;LEx~ugٓg yr(> =&MAƎ~EUy<ௗI ΁~.-Z^<*F;A}wlZ@ <^ਾ[ r0+R1{NoMMuI$fJd/]D!yGs-vӴxfij(!Zx>d K+j>Oàӆh݋7*7.R5ڸqA|>3oQg+CNְ$@tKG Վ[ԕ$C OQ[)<7_"rimL:y@j TO;6asPΖ.5O1:Jed:&^K9$N rIi lt҇l[I_8wK޷O>iZ8dHaΜl|c {GBA^t#LFM~)Ac^cW YJ]"V&z耕jgrjFP}m؝zޕ_N:M  KkXEmtOihoݸ?tڏ.5pV <;L YjsDW=yW<$UWjNQv23$xT/KÒ(>*H^_˰{P=SnfCGm✁8E+lKE$R@Hwni6*~<"1úZ 6k Џ+¤& ЗRx*7g%)Ul3{9R1{>YXj"/Hjua 68=nWݭo5w{8Jɚ(y/Oρ۩Cz7P|ޙ7u{O/wBq <ީ+NӾr,~l}νB7`0nyx+µ GM4=G~nQ7C< ϻ 1#۵r C[vnނ ᢤӀӈӐØJQ1T<$mC]4vP>ޘ>3- X"+#jQ=T(%bm]G Ɣ7\;۹vna`OI]Rd.[ׅ∁ 7RN6r {X>$a^X*2`;9`g-ÄDa$1;TU:h+L\-y+?>>mXMfk!"Rk-*OYut7=|? njiP dz*I FZyQ mVC m+Ssd$^PE+"5$UGzlL:2zQkr;C)ia=@gr>ủ&mUdM{6B NoW kTɍKBa7Hvs6_xɟQPZD5l)IlؕCT DtC8G)-ŕ-꿲ZJ*wX-n`P[G; ) sA?qv:kܫcb׊P~ͰhgGՏINQ[ܞAt%^"ԉ*pj 0m`@ױEb۳TCfq1֬:t<4"Z4ACO `4G;+cа6(})?iӂX_vUA7z81xU-'E2zW]*iy,X3 ?bI6*]V Iw0NJ&Rjk|bۤkrxV)q$^|hX?Mq>!ͩ49UIwq2f t$ӜNӿ73"ev 6`RGm=O]= QN9RoIhKJRʨ΃7=;QωV N+Is(e dԝ:=}JB U}sӬ MZ-XI{%u2tU{Фt!5: - ҙ-]D_0n) -Ҍ;hl睔қiTDDwݿoxWI&?xouދ> JA/7T1g{$Id 8}v)G 6U+V¤w*PQ$BGU]Ub ͦn{4ϨƙB$9ed ELT%cu?M+Jcx&;dc ; 9C[X Q+8W fS~Ab.Cñ'3=x&*L3PKY4. x '\ѾQnzz;q 4\;mEuq+~,y˙re;M>#@I{h) [@Ӑ1"=M6/-Dw=|VRy$)yF1HV"C&n=T.b!VejJW3RRQ7][ mOiti5KsaJ'UA տo:<~h7WFFvxhCl3vTjhNm o{ulwНaA~ڰ ٣S )RRnj\U#67,hv Rgx j"TX.oƩ>WYmud}uv_6kU1{wX?񟵟j[9C8]o>SȀp*9U]Ig_ub2 x\`iBM[tbD5.FXc`90HL:6. T"VݪCxꕸ%~GO>ڑhZ"`g{(Mj^9 Y(^1KZ); ]RRRy*eFh^mUG=.βo7PsLǸ.k/xP|g:Z17Pfu\bdz6Qie)Bq?9ij%n VJW;uoӔRF5G[O9:m.6k;j7NSE)^Pc0@RLeO^1$GӸ1Un* t ׉ӜfwLqڿ-g/'vr6k=ܼۧ>~(¾{M!"A0 _%K*qé 7)G3B>I,SW y9GZ̏vKG.x@ӽt%f!eff@qd }+ك;)| pK~r[.C3;ctt)6=<epcD.C @~`LI Os*G5{; bdzfIO}>לL­ g}Nwppfv\LK38f15w#G)=t#_ԏ{(=ug[ ; i:PMB{v_c ^6@sGnԳqD%&xYgm yy.s]c.kh>g<X F01ė#N`ExMuȭpo|v#8ps]8FxS2%?Y猡V#ać!) p%'MXsжZ'$!3 ;ηCyD${-Θa[;U1->1gt`rvANt *Dao(=s]3(s`;_]'P3S؄mnuőS;A^=F OU,hB 6 cDG#Kiϗn9ԏFCZ^oLnUm Gc;qPe]j(uѻNvKӫeEQ'->Zuk6+[WӔNwdHdlUj(1Ϡ}oRgiZ`YL@ٲ&xźgPN8N֠T(H2 3ʨzh:0NsPI^&~OCwgVюܕ*,sK?LپWN՗C47iɄ,E2 .qKxjj>-+zSـlMY+텇y%U\W`4cΖ4T˂<> YFS.̖=c!DHlM}"6ÇRTG{ݡ@3%B~86qWM>N墳8~**:}:q* )zq=UJ"{'`ڻeB\IZJM5ܡKj0T];>5Qc1pI8!TckX+Isp_õ[3cnڅ:kK/(`6F3G)ki ŒE[( hnL39`m9 8Gm cfRB̫γVx+Ȧ6Z_HE߂ؙWO&%(v!Z<ӎW9eA+&)tXGGKa jFu,\A^flL>ASS)f|5ۈtD3`2[@W>V-4FS|caMl 4q a WWh`x xR*5j/rXnCGݤ8fvrՃQ Elc.EG%nN F-8當Vt4DeLжEɸՖ_t^9;B_•_;@7.N*xG74(vV_У@ "&brߥY8)|HYKM~{:"C'pĽ_'^>`=>^N6MM.ヌ*߇IU|_ 7oYX ZAlft ȑyl͆.-8ӏ!641AA֦:/ѐ|!Vɘ_qҍSy;3d"Τ8gka؄CgܵMvI[ ]xB`O8ԂO) M3(hW|r۝:`L01;<`%B̋ߤ tJwPE*8N EE4['bp?b^@X_NQ_;͙=ƅ+41͗LL /CQn3Ɠ GJY^PJ.@xh\ٗ;DݔdI` #t (8H!JLS>sTpD- ܮGb<]55U6CEBY0(7Ytd=aX ċqo~ų!IO(OA\,ca` )85ׅ𐄦wPNQ LXx n -k+5~/.ύwٽnb /tKme*7%b1 x6:*Bd ծomrNAL>0LC1S rbz.&id~XʴrPVRP)Ga4K֕&bc۪V頪)8Li_æǸpiP@'rOUCa?CngX/ٯiYEV^R-^z{<?πP-VCܒXuzb.ZKD'sH'¼/3ӭt„Ņb(m-0ĹGCS?>c]t"9rjFw>Mll!64|\+%!jwue|>;O&O#Jdj0 BKz.8sOR }ΜTYO6206[o[)_N\JS)HnA.r)q .0$qQXl R4訛 Y'V O^P^1^RQ*\Nu l7p+aLpk%Tj2qE@. `K2&W/ ?s5y''m/rV m! e"CMw7fVs2+ r!BnUԚ(iE Aat0UM' (2^X[&4!=Q߮%8nVp=_[)~jwNɿgNXIBaii-rz U\l v(l1zD hRwTZDtƝ~yyK RؐM(9tB}phVIˏEpc6^m)E^VPr?sz\ʼnQqo3])z^JՔ[7F"ZI;Ow OĀ'oc=J%.cݦ3r+PaЗAjIfcnn|f#VRx Z{6c jV*9QIoI #3VTx4jx>.rr=I9-1N7~2K@plyo騜v&/ꗼkv&*އ))dvk&/)`O"P&VrRRk'z.fo^g(*s~a*V+/:"vZWEg%e˷PژQxvZ'P m66Hs᯶fLGڃatѱMG3M\ 'z |.E3S%`vb̰J2.w(Hy .N8xtf>9ƻ%DoS)"_vyNJ"V?ú"=p8) U t &  MN78||"qV7ݛ\"e,zoJ6RD`׊lܖ8t& 0mo0LOPNDh`ģQN3 S4N}|4 } 6i1xĀξ.L++1]b*P/4:]vG4EiiΣ6_3:P\eP6Fmxfp԰>Ƹn0,tff<%;FdPAx?5jokaK}>DQଣd/N|9`kX:Gj }mD2l;Tn|9P Zad~)'q`E ~톟Wٽx;b0\ػ~R&=݁ͫo;J}x'UPVgUT!`,HVC|)OԽuH˶%O wv p$(滲~zMKj0%qCm8 i.C9"m6Z"x?)„acۆWiE3qS D&˨ɦB>(Jk㫸TS0i3Aa/vJw"qjdDCI\#fVkYp_&+RnZjG_*O~,rxF ._vx z|1tIeo7X7D6j="ݰs/[K!t1G:9K$ +QWR'}ƒ>?KYPܭ _Z}XQ\fSzNY/,"w[*nW򾫱GBM2&LMOʙaH,ox~U;Jd2gNeW/k5Ɵu`t?Ϧ?7IF%YJk-(k̤S^,rSlm/!9oFH#tǛ9P _7m;Tgj \זoGC-¨sZdY;g%8*5E+D A鷁4*Jmwҩ`24TTЉ2bQ7t͊h'a^ !k;$c܏"Bgs=IۊCm18"+a&Z`pMܼi0a2(<봒5٤|J?Rk宎&(_GyoEIùT!`4@r2KF$x8c?&pdӺab$ʍiLd7 '6{Zzx&s;QfT"2o1od^q|,ː6Y=5y'j]qV~;cR^npke-Da( S 2/YFֶuVX|x؜=\5g@?~T'sYpqÕUUmDzHϩ1G\ }WCl-͋MjCⳇ!;7ѝK,:{-VAj'KGX7Ф) L$Q(nJu^>0+xUKRVR4z<aggcq _׈q A@ngjq|+I#69Iw81~ʼn5To۵:qlXꝂ>pќnl G7 i~WNI.^i&i`ȼik]WLy2NDsVG(XcȜ'0О. (TaM;Ѥt(&'ѨkyU8N8Fܜ1ht&UJ1NDRުm}oaި!ꢇG[G~g(hnޤ AlWܰ>jk8jlH|~:U}`ƉFHH":o#'SưuxҞ{u'BR-բh˝֛=VRL wXJnbяӡ|'X0T7>Ztb/F.k8IliXr逰G*'J6C<?dv_F^NL9ݯ91  I<(N9 c*cceu_33>]~8>3)M S n 73),Ӗ3:dt"RabQbGg;p"9]zGsamX"gi޼~Y7/۹!@'"(*S~6R8{)Y9mN+9 4&y:&"o`\&մ N(W`PJ=Pwu&ga*_JN;NY)paM4$VYuhg֭ALTčrz >́8Kބi=l'LoÚ>(ϩl- ԫlF4#wJ-4PF(ֿ 4׀f~` @+o41mL=WzLq΅*,^4{Ռ~6NR(C4q{̙Um0.Ưi;]併 f" /vs\R5^a|׎k7vK^Fߋ:H;fudzL-_58ۡX[m)KF(>ϾSoq ',@XvH{5Rj R2]Jm(BsUH]*SD&_<4K Q뜷S~+HFKCe^IY-k}Ju{o{ܶFKȶg&7d۩tXџ8јHƒ߻S+[y wmߧQ7'ޏ(J{O?W_!_{7ô=yrmd @Iy{X= nR| V|XXHdzO-5bidEۓ %'_Xڄ_C =JIEyaJ @)fB#^wN*G1p7BpnDl5 (Ӆ5*K G?b2Pm9h$A {3.5OЛ^_xX7ak!{xD 4B83GR,PfƚAs; n2͙\a:4b-ͱkԔ3`ĝ7Oc[Du3șnejbJAoQ5mX:m'j4V@K{uA*m89b2z*%,ȷ u`:ZRhA/W[p]oӸ$"ˠM[F`}Ė|,U9VDu̖谓"Y4qibg4FA2HN[gՖd2imTN%J]X?}o14`D,cRY GA9e.:2ћw*(>A`R~'8ZL"X1aO8+]XU4MH-n>GXF7o֍gƅ5ɻiM?Z}u5ڶI%!\tu2]{FMu͂DP+u"W ̒O8)9^ԤcQNQq=`zgu`}[LLD٦. pyE.̊R{1,ǐN]:)˶\BC'1)1  qA_$ w꣋[ԭSInq;ʽ7 2&[f(&W$zTb=Y]ox9ԙ-WdwN=4VCl,4[CW|_ &Ep sʚ@߳h8c څ[:d^\L<-A;9ap9JHP2BcB$VΩ@NC_hosl],EL}W@80GqfC6 j녑¸;0B(|&ݕTT34lg^Aen]wl1CٍwMhàIނWm?sxPacr84$ 29kOv Rgo@!z+I]9I"C1Ozz1|qD PdZs?81pS祒sǿkm0}L3Y^? 17 =\P^=O9e ?R%>YӏWɮ(Ƽ`9}:ZfHLYV@4gtkrBvbU y;'2xtJyFn4coN5;!HA;ys'DJCp v<3q_+z ?_l(p.G!z:;"5\t#S}ԪeWbƑƑݥ!xz|6 xrtwCs#](:25@A+xA!alr_7e|%*[irVPsQKϤ2 FhDk`#mwgY*V*䚤",7St*iߧpemw. bӲiL>ƹ1BL&}+ ӷ|(p^F!Fwji h[f:_zxI[5v+-o[QiJ/Іc&-1>v#/A<*Nr2MC8woŅ<+InAw d64A=& |Mm˝Y cn#e}MoP *>6A3{B1R6up8xJvn&]F]gu"Cr?%IN<ɝ1a&JތƳ+١Šl3ꛨdA`rv5u'hpɮy[朆ޡ192GDy:B8#@Pr;_'T@5D66Aj=o+3Er&Z`3&gI^F6{f3GaD}KG&3 M6th-*T81ޓԪ2FS"oΈqgׂёG7uyܤCpCϘ|J ssn6ˈkN/@m&:Si1qbcSE=NOq6)2YiӲipIߎpn!7o x&k)}#yTz|I翰_II|altb I^Kk~~+$߳qe%NsH2&2)~,zC?HL ʔv|ա %uɐu*yh̨gh;56e+Oj6PII(]jOi'$+:JOx(?^zyhGP҃0,^` .`*`agdٜ SӸ yeпRdJ^\cpC-)b[7O Q;;^2B<5ϙ8T\_iZ(OQrUd0GFtd|VPa֗ɦkN(uH!0=__86,ޗLhCh#]Z24^r/t:U^">&{i$M KL uF/oC BD4YASvRT''+J~,(ǚ 4$:9ʾ>S3bС.J~&=^<921!ط^.kw+heOCrK9??\)RR3Y.Y[UqtUR 0u|=$gycӁYzag,oQn.v jxW~1;uzuu?+{:^*Tl3U)GS^h>U/p\˄,A% #XͩEv(++33D3Y^v(!evU%L4yT `!qXSS 55x/P`DS rX>mWэ) jΑxhGǺsN|)8(]{,}LuNM "qB܂wl wi G%p'.`O`~B)qq*߼dAӱb'9=bN嶍Yqb zY|vS!ܽ#0RjĂ~J/V>Y3G ,p_%ʑ>|KylHT^}+|(q*ϝvu09.Da fQ>% Yՙ]@1q#y b"ɕS? _)wڌ'z>7}4#,Z+1qy4cxt >tkGIN(MtK@te AZ " x1"MU%%/8au!sư)\Xx.95RN2^J7U\XX[MhlI%r(40d=U~TX.fP?R!b=&IcZ F*|¿~u1wZ0Mf"D'Rm'^?ɉGnNgtHxw<*ڱ$59tѿ*Yv"և;ԃB>ު6&QU*kT<06kr FYZ2WexJ5K07!њQYwVhM'3@V\Q҄tCp2iI3KTQjS4$)NTiUM iPhL ̘2'ǘ`=| 4xGkYo9 NjSPi.u:"D@][]ѯ|qwp04YmiEЯ??2 }gA^kl"9?B3gk|2mhOߝo1*l$ssl wy״GBTTZ+HOJ]bQM]۽Nd|}>LO3>øI86;f08ӏسsGH8`ҀtN;-i)GIQ3F&`<`o4bPGbF<Ȍn`,]A!hG8hCS[f)1F 7=Lw:mjc~n5 h̙ ]{"z?t8l{К &IPvpvĀNMd j& */L Cݎm]W[= #I/tZc{>2t7S4/? 3ivJq .NJ8E;7j:zW=)8o׶˟ћ?͑z ױm+B _mpսUZ:N*{{GZ{[;%#S߭AR;_Z}YߩLyU?ö^AcUuP=k9 :GG5zQ;|[ߪ56~Q+A GUd56/u6vw0-*MGC?+9/޽CP*NAfl)m9cT{;׵fkyWoԊzXo`:7 mt@F+ٳRuoeДmYQZ<ӕCQOvCrYZclP" G#!4.JvN|(oWhچv n䫺]]=tRptZu*ul|0MFJDt--] $7 }Bt.v;Hmfָ^G:~Iǣ݈9i#&4ڟa %y6VLD6"~J" N#>~]|<>_Z'lIxdE%7k>M7x LDnk6fOe;7/-U{=AHp,cCvEm}GFBTmZ9 Z'f/ !T)ex74[(-.bN狋j.ِ$Qeed"F}Ł$8I܎:N'7[9tF'A!f8h#Wp)PrAW{NDPJ{E:ss]M t6xpi"9܊4^)~=:Zh "C뵋rܶD{o_ H+DIoT֗?&jcMH˱'2Wf*f>KuJ/jE% :dD zQm/?]ztim곧eqamG}̙w}ޢ :X/>& >,.h9e{VtkgVQ N"ɟښͮi| h+kJoqrX2eX:sHG:|SQO+Ț3 [4"Ni(D|*?;`hwڈ#CLQYXi9%D.$]XkG>1& S~RdJ&6Ӟ[~SFf$Nqµ!JPPFggͧ8hezy[ZuOK##Q= ΀߾SrUՎE5N%IHk YLTP)] ܑy[{c)j[n#tۖrijӞ( i '{S s%04U1z@dflcsKH#f*1<XJtx \=AZ<{h>ݾ+Sia=#eL_*p(ief(1h㓘 N# ‘: &CeS gIvv5̈6eU}M֨5GרUTu8L(!-Q8m"QEB STV2 ;K:sh0HkM⻪g vӇ1cRk[8\HsZ2,G79drƗ lg7u0icLF"PJ4X僡 t3au|2'jqey]5v\Cx : xNWzeєWgn7Rȫko8$R*)omovyT<OaW{o>/Aàs_uag!=Mxv9j0֝X~A/^_=Ų{qw'}ȠUR8%s*):oDDq/S 5\`/ᚉSZrL=oU{xqVothamW fmv3]WL t ed 6JO&h)`>/g^p=*C%|nF I* J s\ aZYVF!ChW&rKpSfPb:$q}3UrC`<, ?GoFd1\)Uxȩ0`Q,u+:I12cg^[C\mVถ{KҠpd9=XHL4=xގ+#.wWNA`T[߶=Tq&cxXJ}>, Y)[1,RT~~JV'NY@x~Sϗfk}## ]3q>Dc'rt޺+BQS.Ifuf`ɌmXZcbmх7IPY\: ff=V6` T4tvkFo0ZЦ F3P҂Iۦg XjpX[li(eHZ6CL m9 z9]Bt~DA; 0tܧh46r{mP+MpZ{$OY߿Xb,nt9 TAۧH)`cP,C4o97z v=v,:3 K(Po>[RhЗUGh[oGbYS Ű3 [2?s}7. .i nWJ#e} wrm&^9m[j Mt+Jtԥ3*ypXR4HaSТ fK6,f%VBmR佊 /Qoz1&(0ϐPN\S&zx:Yɽ:]=A?Qn>-I`訰Ô˯)]{1OEm鄅yU,M3[)|di):dzk CK?0ȓ *9TL95k[h-1Wï[G;_e=viٌz 5o ѥPO: ">@AdɊLMq~KS 8&,GӭSE e3K%o$jH26*3;8~Q}hfU9RH@U}lJ9!anw>N◑\2R2nGС1NCi+)jDo z=T PGU:juJθDDwڲsvZW[Z-i-:E[mS6~Y{-m⬬=!"N3RO`)$!賔x|pRp];dj} }>kˤ rK^ٷ+FGF5>OosVŴtʘlK{,~NKVRZz䷴TK?uE--[m ֐ Fa"+ѫb 񔗴b[%{ƹQߍΦ il(t.|m13dY]$Q-CQ/r;=sh lI( %m iJuiVZWc$NUbeE EBw`"Ͳt\.vOsW@<{ O"+;RÂk݌W31ѨqEN:}Gz%n#D2ECy $_l"ewsaP`uFJ"8 H#vK­NqR;:gҧJk;66z␵~Gpy/6ݥg?/ja(ao ڞE!DT#Zb^)(sj֜ȵ; [PɥMPr#(vjDdL!H`B Yvh1AՎdoSxr'2l]r'P\K(HU -[^} ˱ ojt?prsuh!9 /UU~L=V"-O4%˳gͱ(ft9Ϛ|VuGL[}$g:3Է/aiߚI=m{ {*Dߓ>\wϙk|]^ k%  ;GcF]7H̛ Ra>33sdfZ5qkϙ$l"li5GoU.,_h%Z}yREm $AAIW ԥXfZ*Nrx 0ypX[ߩA֗׋\(Nx#lbn'g[*,˩S1ڃw*JT19^]Z]׾S6KOY&g9q5͍5]6 yOsg˴Z}˔csv:? eu풺TCNdXFjEg"nK)t\8]+rЙ#Upr1y6l"yCS '۔ /Rxdz{G''ĖWӵ'VkGaRZR `۝`NIv՚cל`kAoEvZcowL H %j|t< mm<`婑#M`2xݙa P#0٦hY{ī,:`d^Mhޗ<$ԥgp㛝g[q܊'V֟<[[Oۧ'SV^kOW=zZyZm?9}NOA;jZzuZ9];=iNV"MHjCU!JvXk$RAN:j.# e~Uq_aOO8ODˏa.8Z{zz.G'O(ɌWD~k_7joSq4[#J][}w#qUIfd'P(л9&:(+ \8OZQil?z-=[^{jxkߊ>8}_/F20v1)UrPи>xq3s $/˽:aDc4^Nrw6d v=RNg.4C=r%k tN:}9 Q%gKɱƊzE(/޸Iq<݉|)q5@+G?'e]&G_Son/r~% ft'=s߹ ~4.JyHhyvr\^CU l^|@/U4<5G̓ћM(hгOK!~|M'>87tmBLQ&22/;U~yQGE!MU>]oH`$K+@ɡᷧT~&y*L<Tߥ`n@H<➎Tv7/`ر]ktrdYI=`f ,/S"u 5?>w)ŊVFIUgFEe)($=bj- 9Ry\?R@vx֏rJzpDUy5X\L^Rp9ƵHA[_ظ8bS9X( 6߁&9E+׃ʕܧY|"BV=zLm'z6fy@xὙmpFFbԦvRh-h  P8@%tC)J59,63ɵ1>o SFGspY *uS\vm lدzdrӐ0ThԢ_#[o4-ީdwGd5!:䧶\4]#c/P֋`zv \Uiԭd`>;YNֽud;YJŀwtBDIQZ ú>Z.pPngb[ ev蒇smMrc?߿^TWw).݂F2~su`0D7g"Vuh>LPRQ޼LE`[fo{svs 4maO '7U'm/_W03J *sǽq|~>'eyOt$OMmljuuūsB>ws}>ws}>ws}>ws}>wO]YX