#!/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=306fc90102d055be6790b3c6dc8f1ab3 # 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 B$ 'udaBpœDBQw}ZpR Y/ۉZ{BX1 ={e N Ly|4!%#ʶ >8H 4#.2]led3H2a5H,2n!($AbB2/_Z Vy`LN̷Oɹ6Pp;UOt̄p(M];@,ޥ߁z1UÀh:וFq8h: OL1F'z cm'9N&:Q`֟ 3}:1T *H4sulq "۱yVXE:JqVM)aS-DE]]b5!v@)`Ag:"Q05sfp: U?  mfD@1>9"A! KOϦ6PoQ:H\̓11mF1ɂoTlI\b @<Έ$2^aSuWBxjZCih|j4u'u!eM#sv\#%8IIP.{X[Q1f.{W1}:he;7+}]F,ǖ@ ZS<;:P  V1"FOHb̅!ZtύڠV.ln7ʒrIAÅt DEs#FEJ[{EEs?Z٬b$ŋt}Iy΋^A^ŷk\!&~ G,7^^.E7A.[XD,B]3k6Zr-\@8Q [`txl_ r`>N-JJ-c-8K#I* C2} W)W{ }uD0% NLh]}t7)o0-h`|Oʩa&P=44ܴٞdtΉ\-; f8(p{( B̺7_"!xW#ͽt =goJ{9>۽755VFJ9i2iJx MIGcWʔ'I_ôok e~`)٣=*ee|KLJ vكpo]yrZ$Q;2;3'a%>:+?6g}[Ox]P);ӀD*?Y `ټ9쵾9 /RkK{;޷5 _ߵlg5_o/q-ұwi#C/ٷV7hيC{m4W_Wrmhq{E-4pbL}rnZpcW =gZ`5e77|Ɇ8/M1a|]p :6jej,/]5>4g"gf-;}H>d%7Fٱxuâ r_^6]d21w|x) C&@V8\;TTK=SH;YGk_%ٚp{m78AXNUX5~͡S.p:'#uD8Xz *C߄lnyv;6e?C:9ˆ$V-; {JX3-]hh2VPDM9laR*dԭmY6GP˥E/, ZyE @`(hv؊Bgm 5&Ԕh!k.̑*ͫL9\ǥDI&|bcfvldtUaB`vt4K7D< _ 8v ˄l*/ _spHz2b/G4BBa]m&ꐨTx\Qq$3k&z{p`۽WWARRFqZK({߹\LҒTi\[􎝢 +9u5Z8+%WR*?Ĉ bN*WV-R!mP}1Ԯ[&Z jۥ=y*lƾzd6:EIZ=R$@\0ԣ(`!gK<8!xUʯt?MbJl${ILk?|"8sW,F@0vh(Z]cB/d$U!gRvFʐx-h Jd_n_r8#dHT=d4UDȩl1Zٱ_+A@Y)1f G\ؘJLK>k:f2HOtb:56Lvs&Uo+ewQIfoM i X<D"ɻ <jaK=" TP*rD<8\Al9umGՋ։3][?þ{V!2#V# vY}`Ϳ|&Ii@=1\YәqMxzƙzƹzlwgEecD <\QJ,kob]:?B𲆎}wrR9ˬ B?P Q"**`5M2dPLS/JBhQeO C9WSnԐv_?VLiߵQ0ާ4-jH))-IC-~?|B}fp[.!s[eGa&ތJH/f 0A Q}zun  t-l\w&ZIYECPz߯K'Nwk[0sE[I[NRc/,~dZhz:E}dόsWv<1-:8,!`۾H\AbQ̯H|d\Nܳ"%:,@JjFgaJd}DX`FJq7(̥;ArTp:JG*/J*~GoI6ThfX?*^okr-9Ԅ튃Up S Cyr*I^drX} O'tj锆qK\Ak0TF'CXXtQQ,â( ]1}ft ؝V ۆzC80j7tb^H)Ll"O*?'ZǚYm׶չ]&d6;m" T,:bwnr9yVỬ*Ynm?[P%/NqPB-7W̭57)-:'xUZE[8-Z=?泛<$`q4H~^)C=ەT0L)G<ʄNIrbQ72$_#s!*+ѷ*nк)|Hȳ\>'_Uh1𡑀ZZ(>3:ӅŲD3nOm#oM']Tћםؐx"Of~c9nobBp@ŕVƦ )M!7}Rֱ|T\X2t&k20Xg#:VqOrH3?bv ##W"PS"#!f3tW`puJpA^'")b.Ru⋾Y 5Δ IӺ"9Fr4lP;5L}79q\⌀FcҲf2sR8ﷸ˟A ʟAs`2UhECtsJ'yvٜX.O 43 !d_" 8=:}W@$!: q:YepKtۆ- r=ӹ@fNօKfS2u^>eu]/]&V?GJ+\6f^B#tw ulř H ({)XcPTwx[r+"ׂ)2S- {#h;؉f h!M}#xoa3VT`YH5VAoO8[p. KKP-x1 =bY$Tq#CxdQE賹xbl1l5}iHMcvx#$P8wWU ZՂEG(IDZ  餶IV:-tG|g4rnM8EXEU 'M&-]$(Sd@DSe"i[6[A/-WgȈHd] U̘ĉ3a2GFLq#3?8Һh`Tl̨"Zx(GKoh)Pg0JZT╏\`$,` n/ .0h#.:{DNqm5 a%zaVmnGTЃƫm`3]C..$o24\07( 1 g ۞ ĉ._b6]Q3Z0НXi;05(An:=>FQ~;'O*٧J?D/" >i];2&44 n{ 8 KH~ #wki "hXq`Fv\TGD7P @vƂtfO=$Ѝ'C%S:th\+[ Yb.t'$N r{j2M..Qap1ìRo*XM%zKxqZao05*=Ψ|VV1RohG^_#U$Pt,01#$DL$f$K)Y,y|/iPDcM,.(++T|aQC5 IUOZ"R{:z+3cTKjFYb+:C#fYzs) -ot)]@ \@DpouDanNfah\YzK۷=[_2. @k%5/ 'J}w.~ա\*GّHϴg4|;[K]5PX^,Ј>,k{w$@^ѪY iq? (-읪%\gBrw} w5"0e4Makckʪ p=5g$G2h@cτK.AA5Ĥ^~n-=aɆp7'!M{ ?IeQXSnSs=r^Dл_KUagJ*EH S B:pRdNvTNc &LnqOp%sxݳڠ=E"DNb8"HNZЅL뽑j$G7idPqA3,y;Q29=Di> (kÂ//!sy@f$Yw>-H+x4(gFi3$)n~+sIvf}098M2 -C:MУ f̕6\ fHBp;DLM6ۀpح,b7 qu)w8 K= 7Kmf4 ٧4Hk?|{ .?n:].N_?H"ǟblw{7% m}{oĐeW@9M斧qo#hF ,"dj0Qs)YjD <.ЬV\p3 ¡1fH#Q0Cѯ*;xztŏ1<=ۀ!_19͟z2W/?+Ź,g)kb,sgK׿'G|Z}0p YQ :n^l~ڌ9 gDgGݩ!ٓ76gsj:JIcvm.r=;E3R;ݹ Kr2G[kQxYOJ*e.xhqnz`P27f*> ѻy0[hCнƁW#xU"s:hϟnn|{<%.oSo0 q;찹Y1Ecu!Q&qJHlZz2I)^{7PnFPD0(=={7и꯫yyٔ"agAӈ6\% PI8kO4`";=4qS݀5*`~2RfKo򳰕S"SАΑ$My+zfJ{dVAf8@veT"-B26"FN?'&aF0NQjSi&]|^c`eν+AUna~iR VEhb "Y֊IʤWH(]DBb~m6,P;%͸jFRL71dy!ȢE`:)(8TDQKiW 9j zU^a܆oP a2ߑPwoeFb[QOpctjx!aB >zx7n; s8E˶ Ĵ "&osD8y.tLsLN!rFYֱ5:H%ŗIWԣ8 H=*q0&k/C;#L1,S뫼)/ s; WM3b. K~N€Xa4 9>$nvc;) oFNϦtE?-=V͆ h>&}KIj}\^Q_xfr2uk|a/ڤsg)صv_7WIas-dau ._"O6..">`:L'El]rغ-,]^r<)΁kOFaA S46vZ3vdbtJ" (t$V߸I)_6,)[y@="ѐ, _$֤v%?_>IԪ‡Ké|pl;&5ŗvԎuYhkTbur/Q8w h5}C72@ijDI1-n^$qB2I<Bg طHQ B`@ӽ֔mͼdrnd4B ]e`yK֍ IM8/j 19+"Q'0\%BOb|2eh4A7!t9 3y`a`  FC\ŜQj@ F?X5ɼ5+Rcm1dxk{M4쎧` ,ʄ|# Dy WYEmGiQͺĠWF&~ u418=AO*]`JAH3AߞPݿ (3Ք7*U9S(NzW*F ^P'7 >>ƅ]\Iw5! pRDǁwGQY:л˰h5(ĎHei6 xZ7%nEjq¥L$=?}W4c1wqVx$ YC,K f?n[i6 ք ِ"g)2=Y0l$RVZ୵gRV9]Q!gsUkh] |ߠƺ?Պ}P揄o2&u޿Yonz@z~Ro͍U0Mo<x+ 5w 4M{>駉o: Eva=ȭd/bsEؘͶ{|VWZ&J_:W`?m{]?K-Z^hu'dW˜g?vcvaZ;wIk83+f"2gv^d$o9b5^;XpC /+sM%w 8ZJ 9;-AdzKpU9/~iz1_XN*a9FZǰj5\9ȁTJww i4yIQI{B3kjwC:qa~=SڭbmAb <^N$MɊ.cMW ~sX(=֜IU? ZU-BX$NcaA!6%~A#ze+2璖;Ywva0˙^6q9[osqU-_ht5;"mzc4^qlڜ%^#oHqo1ZRnli_]D/1LR9m3w̏4#0; c0S$#ԓ QVMa}L#]5`7#n+Xh#&a@.Ծ؈WݝunuE qq_o)$ V9 y0z*Sx5^ yy\)1'j1H.;VbL{y< h; cm@Nc0V>=tsi-+}Y$gXC :hD]X(J#k |@ t`naZ(3ma.r&P74z.A`Ω&%ʽ>Nsƚ0v.iEnr"LT%"(1hߖ8?W^o*|-G@Um2PuښCh (-ts+cnm`Lh: :if='Sy8 YG$]3 \!O։5x4/˲~y& we"uSDэ%q dnDasAYY8^0Ie3i' Mdōb8 -;T+#$ ݌F<"ݥ9bU>5ǜuX*'hdROL`ޢ&̖=;_,0P ^tZlb8g )qom.0#jR/FnYE`<8񝘈Yjyt`l?@)'A~ks) {kǚ]Fғ~ӶX&ҵnOܾh&yB`.ŗ&/xh$2^B1V88=f#3&rۚJbf(IT^m 4-2 #&y˄C ɆQ'+CnH׮Hˬ۴L* `XK@q4E<3/$J_Vhii?)Mlݭ2OjG:R2eQ$DPRcj4f?Α e Hd::FN:0㪍ګ{1V /ɑ+&%mY !Y3t1B3F4+jD<@xZShȣlD$z%n <k96鳶[>PHߐmwPmL=f-GlԴ_F: dyRjvDV,Tý5qPAЂ4ԞmB Pr@ MB>Ld,uRa9%xCA.9XEEFHKk:j:ϩeN6#r+v.#krJDfj4LeB6=ϰH#&OLtkYxssƪd_MT)w䭽tˀ8˸봫[U5)qE~TVvw L@{Lң=K='=ze{^(a<4;lךUZ[H]ܷhX=a%r'7W/NAo"4OVYiV7L2S3e"N[Uդ]q/LL6KnA^`?TA-tIo&Y )>D\VWk`J 8 tܠB 2$0l馅{@C- DdoX  t[Yl TLn'{쾮j?{77v)k=b&Q\GZ1Eg1g\@Z0r)2/ϲwf)7=gǔKN^,4gf_VHVa@eLqJJ,Mm %mf_ WH'D#)ehd3Dڞ13=2 OZϵ1 kÒ&,'7oe ("{71S2&?%3]dɞ\,Y zTcECoC[6~2Ƥ^VO.*ٻj8KeuW\gIp_jIر`֡“?~0/YXSԹl4"Ev%9/aw%H`eH`1XgA{WڣR=kˣb539qv+椤,W$cY b3&:Deg1&a1iau6!9/X>lo}[./(j Ag|'8Q_^ܬxU-9{[Qt,9ݛ=mᩅw !Zzr}(/c'a W]̭."**&EаyH fJ IH{0Г!|Po-iɅ6>`?mod`K*Ib9uڄC͖ߒ0~^vȷ^ %x?fr8VI4hkձ_#L̉ U14b+}!TDf^%lS3qK YJ0O:?$^**_p*^Ȇ:Q h(ch tEG6@gb[Uۗ06]46 _%LSw,bPH\$XL eLMsv:=@SfxdbN_\vf\w<%)|>tjΙ^'=9ٻOZMqu S%6: )kUt"mw>]{h/ z6bѻӖ2 WjqKYNЋSJ{tuioq[rhrYjLݢr1#T+Z-T8/&8DVߴ9>[ϑW'utqCH/h#x"z&}Dn[KQikkmJ[L|yջ[MCFkOt#Cx;F<`)N3]|=RɟX/(棂08`u/_. L^ڳBGj[1^TO,/sK]%췌[-i2.ґ|##W.:S;,As*/49֊p@"֢XӐc]!'yZ<;tH@_A!Q"%O;g`O8brk }9^8^I*3IӀ7E`) ,RMXu=,KV,X 3pM&/f7-\Pm6R̔^@1Ƌ }/|Ɇh)zx(Wĥry{ ~_ Ms׼rxFƓZ G"N 5qw5ք#R[n^Ez+ j4?GM=f.,[RG8q-ְp4Ÿ3m9'zfa†v8U 2!g~cl&> hP$>+(cS7(-*H(S#!'}2ke*)H*{3 ,BI&E?`1X*q3{\D::(@ʯ|sSXF̈́df6CW;(i[SQz4.͆*ARt-Ϯz-ѡұo.OHۨy˱, `,2Qn7V dQΨ=HXHWfrUz-R?n--Ȥf6tsǍWQ%th%=5OQq8i@@br0_0mz"]?;_\˗F=|5r*]JЋ&v:9'[̕iG!F.fA,frtGHsATN=hۀNAmzԨaNޤ oa.Os<ҏκMCNfШBp(iί`60IHf{ѩ}u2=i) 3Ƈel'wKa fN Iv9KZ$aP-f֚OrN!V5mE~%U&hBuꥇ[>w_CN|QPuUެT~rܨh`.kYT:Xg;=`MhMlWW#h_]0Iʑ<-9_b%ް-\;]ӵ- ^P^r՞LճZXx4!k'8֭1 !&bN 6\nY#LKɣU"5R]̸(Y`H!gG .FrNMC'Q(Kr"Rc;qF/ z56*C uCv t!9$!4*qi @0(.AYYJ͎Bwx Oř yR8@f= U'͈-52A|eLal*%#Uk؁ZzA等zՒ-йZF@_on^8B﫫BDqj0T݅'wgsOV~J/ߧ^ŮNo֩*FO POz*NzmSzΣje-.16|'}Owp(7gj fѤn67hvtSVR=nw7n ݠTw;vgTv)XxRkݝYPkTVQV9cZ'hGwOh7%7T=N{;֨'TB}?ߣ]:AڎS``}Twrm #^m1KI3o^__/S.4G<'m. !T` u MA?wsI߳_/+]Y=|br ᧘-/a .f7 ǧ'/ >`K}:?+S}sϙ9 3o.@vtIN ޗ0A21[=sVT٢)9‰gevm2e1o5]ՇvlsjzrcJ:lTk״N)U\PW-Kz,xs,]/F(A]i`su|OY6+9%YߑSvP˴QZ<C[%ap>ΗԏcUwܱ6҉Zit'D cw_Oq%xqI %MO 2 Bt;ƐٺLF͊ש67hvӊ6-zGϯ.EB~ dTlVSԻ/Az'/&YocN7:ĔK/J{`ݼľՍIܫۗ<>4}A/!gӋ2@ RnhRh:z sg zLe\tL墵ˏP a^EEF5t:O jƙ1V' 6 ,wWsJ{tmbhGC8@,1'VDWK{˽Žu"G%OB9Cny0O/^n.yZFay}]:?d?rd"ELd.Njxp=[CmGwDMW[¹$ ={s~Ψ8 (o"jfG!Yu6]2՚#}g`\]ͳY2NvY[# PK_h+o7mY!S3fyOm D%,z opjǻf|Y(0]pz`S|x4*YGꤜΥo UI@\{J6pb7AbsH}P"̑㽶+Mr8:ڀ`C(%:vٕ|13>4Ӝ)շao/ Kعa)j =Ia Ɂ8-/MgwAo xAQӄXL 罕ßṂⶅF24hLJ* f\?[\Wk)h9 ;fLR;t{*["pl؎ ~Yl1r@K$3bP,)_:ǚTmeE۩ThbfEͻy{r /&S!6< #$l Ru2jRJR'g&Jp&~&$Y #Cv}[f=90? V;Zìp+ =2lM'ʘc+fk ^(!FlAf$s@P^bfN$ׯa! D5hLa܅Uz@_*o9zsZJB}4 %'e>$AUhvAK'q2ǂVL(b9[Yo}%)Ws>0ZjRDW O2J^*b;",q\A'5mc R#h5Q8:x"3٫.;s/ٸ9-˻Z-s ` 9A{U4'`8=)G sɯ?Jj|3X{A\{Hbpxjـ,d#%80LD3ub"A4c> gYYH)>T$> GΖIbT@"?Jt<bb)NJ-B2Tv^␬1SrcGXnO}pd&ԉs-؊e=dAHYg{xꋀܜ ֖+L߃2>ZY=#N6v[XiS&Ad 〼/s3I|3ɤƩny)Ayi&qsz4kQ52 (ݬP׈#jaкK8`(*'FF^"ŗpAqhT6ӷe?SG%,G}Oϋq'EtЃX09_롈Cԍ,dFE!7+]1vR@ƉŰJ&5cR3S.~%k^L6ߢ>ے9(x6U;I>>>SEZT2'@oiaT{:Xq"6loUC`K1Ҕ#sv[l H.Y\6Z )3/70궎#HJ~8WnaӊJiih!52qgF1!0]1e'+&z^[]祳6r L K m]c֮hG6dzԧ*Kh伈uuX*,mx m>bV+zե!Člm~Jj8'#TjE/"D`TP9pց̌;u@Q9H4Yܳ/_9& -KS %ᭁTFQ  kߙt2xnvDC#/mx9 8K'!F[$#V1I r HK) -9I3䔊x@$yc MvX*'H20ɧlnxf(8ڴ 6d``VbZ`]jTQ:$XlU))6@^)r"4rH,2)rY |4T&It/'KZ&5%=b<·$ZRdIhSѦ@&}$&?4%\{{ev8\sLC;{hKƹu!u%yC'C7e$bEMU#Va *-Ƭ9P"N>\EqusAS1xEFO92= Ixs% Hb>b"H=NbsےO%+!t -7) pco<ؐ8UGi_Lhc\N,=I=*[֢ 2],K",lVSFW;䜨v?;Jw, }c3d&Y*S/cyX4se+Oݭ!nJ%$ %ۙ 5TE{n2NGndml8)b4f1(LXhfԫ}h*zGGbe_XS۪[fw58½J4ĺ#\vUG}D6ջЪvUÝ䩛cþf;4 0o -RQE9fmm ZXӈC@~mUEZyc(v<]pPZ L04  E ]+C>9?݄m.]^gp3yN8;ŀ)̬jb!'JPkh8_錐kp-dZCpCӠ8pF/JJzY^B1)@ϫ 1 pM1QZm#si E~'Au{Md5l, B uj4\`/f |,<b7! J#Z6~@{ZѴꉤʼn-R;i"2ǨA>-%q ̦Obs-4Mb32E HNǓ" 5kՂhM]Vo65= zY"ڳPye>ˍx-NT F@;~`-4e,RC,ibry^98p}v?!އ,M5 77Ml (b+y|x="ٓx?5da㏶#5 N 0hja [3֖v8Ѭ1|QI!!=}=jfx>d+=%4gcص=RAe/lE3t⋗UڠEDCJn'/Muq( | \@kTNv_fAIƪXWX'XN*/uB"];~~cӭAd)8t18A:9UIĞp>R@{A-a,QxHiPxn:p3H v+Dj: q9n֨ZD%r?Pen0&HbfkϟkzgaV$A\=7KЕ.(;1BsG$vZ&)#c N'C:s[=F:`6Q \"ngMpgl< @3do4dl]xy[GmWp6#Eh 8Tlpqo¤~+.v`,qRvm~Ɲ[6I-]78oO-k; ,v胛 (瞫{9ߛ7$?|VWW9OϟJ:e?Jn$_<\ |{#owr;caύGН4a|01Sy),ԲR9m ]0~Kзm`~xHÞ5[ ŦH7+s9^#چ 흟H-~P 2QxD.egvyd3 #QT4MЂgC(lm;I$qȐ~腓i7J $%t]Zqa>SWľuړE6o@%4FLq䔭b ; GOvU闖^UIǼya)MPT'$W)fYک5rGVح54-KKɗk^Orh Oƾ$~G}eRVl }>PpR\(=<ǾӪ\ܵa$<qY2 S a:Ib]Yi//ߠI>}|3XA7-z33\M.Q{{&ux!379bdsvpˆ7vY|So';,ݨ=dJcssH$Sk;lҎLH+]$ڎTm}[5[8V[|\ݛ`*p`,Bc_a;#p[+WǴ@f)mG࿏'y}^j_4nuXp<%.S*׍t2;+5ڔG=UmoJ, g/Y4}T3Ծ-LUb_;>xba0\P}YԻcQBfon?hvyS^]xa niiolQEH2&b_93"ô tZ%6@9|WDI90GdEH] ςqJ!ozWQ2{d0zۋZb]8P82+<G[[ThRJ&&~qq|i'ņ fH8eBR].` ihP/,JWvoHХ'agj9Q)--nv-x>.$`ڒ83`p4iӪF 1ww6WO"dݗmk c8b?O^lL&ދ`X*&Gnqx"/8fE{: [̰l̩ݯ>鏴 UEg`{W] RnSFQzƜ˜,.񌝧-Jr\ 'E31|r%m!߸j;DtdokuΤ=o:.Ǟë&VPzX<Ӫ)_aykҢu(6L$bKeEbzeG 龍CIŒ:L=9T8f1`fJ!hSKQQKADj^~?c=wZپ9{BTHk:(]BSzB:td9pv>\VPkWl S@!N&f ikqvPyPBMg`UǡX'q4$o`|>E)W%܎-2սm0 SUy]W5'@î׹6[*J{o#IBuBE/RKqXF+ՋM+UzQ0Lς5TA֡+KEN^/-} ?m_.HiS= X~rOb| g`9N bbq6O K{'8?s.ra<#rb[3=FkqH8r [ns!n,;A%IȤ(PǏ}l:'oTzjT{q~yO+rG:z6+++Tnk kDN,xQ;GtgWapNX F#/JQyg27HBq_ lL=RS@2²e L~%G)B6>&$ʛ&Y~~bL8 kya8"[ _4bm[ J.W;ګdE[=GZ<"Q$Z.Cfr@V-9}p=Ḭ ,ѡBTw0 A;b% <1G4QT%{ܻNWh6a#-%~ #.dO؇;"LoAUu/vlIMvFVVОYɻ<2C2PD{[hBVtq[d4yx{\LPAڜuK/’iUHM u\:ß'< `Q]>PBA8$E̴K9ÉG`E!Q@hf{W&rK"&sFUt,c؀(CYvq(S5)g^)P`3ʣb@_Jbŋ897VrěBY[4%g1:H-5MPr9(804`b%Ag9 ImxI(".骬j2] wƧ~h0'$(oAޣAE/aPmdJyG V('(}<0 :l(!+7;Vd[RD8%ɲ蠷ѕ0ʱxGBr^juUQarUIOW׵q!QlBs*J;Gޖ]7v$(B!a3sDMa_n3'MlYT=ӏ18[s O!@:e\)XP* nW/.moYx6 5/NZD#E8WI;l΀K=9MvucK W])XODrB_y6e E.݉Z< r 9sC ?}½:ii[ fqT?H`kibd"w ɭL0mpVs{"{ӭuFk6;Ä*GK޹9Qzpl%*vMhs$\L$LT/y{k ~6*z<7)ý <_:ѐsں{˝+';?#fEBc։,ul)@8` ZloDL"|e$ y`do] 1 tU0,xU~5ANb03!rV۸;y4`Ԛb^ 2d1iR1A~)(h0Nyݾe3u/N¿Y/tSn 0 Y+gU凛'V,9I,DN̯ŵP`Ƕ*%x$PZ ^FDF< -HDܘ ve o*8?.\pیDfz=0"E3'"HZ›JIq:VM4އ44⇁x=,Q޾bmN8\ᅯ$J0J.'8-[RLIi?|, ^(3e磼V߿)?4*1FdKdm[/R 4EL=䗏FHDJ,BU $Ddfx /s2VRŠ'๧-tnxGvB6Қ!W}mO(y1(@*660p.d[Y}IWu{IgX)\"FW)UԨ~Q}[ E֮'3$"@pCY0/^.Nv>Ka8{ dɋ/d?{vR~[O7gO)zݟO*?A>o{(1Hfj"!S;%1ېKiu,xY pˠ 2 HǣG `b #ōHb۫*}ER!;qYN2D⊉r6SʲN.qb 0Yb){pZ\QSL;"տUy$¦ׁ1Kåًu-Ξ{/ye Һmr&%{`>a$pb\Z2@[j̄zq^=~@I4 yAqriKġ/ »+tAp !S47װa [f!\%P G['RD0'=C^ʀS^hY|8 .34@ҩ Jǒ `k$EqN#봔<9!:;:E4y&w=s"ygB{-3ZZ B c~ [7GMP)*,ւFVcцm N G:pQьNX ,KLI>RlZSP/-X锥ㄗ"bB>$zP}̷;:MbKf<'ls8d-SZI wlޠ0&XyQ¶hh~Ahm*E^^B^ӘqACJZr Ğf'{PRfkʳZE[K@&(nlPe kp֏9E tv(*CY~o`d@w+*R݃週<^@ B&WԴ^})s)Ss:Y|^r\ 1o~6o.o$@2ToG-ϊjLŖZ~^&(7>jYoXu&^C:Hع)X;Lor-nHgf=vpnM u[38f#(ӗ8Yt$ K1Bcf8DљP̟0񍓌d0$AI@8F*&e$Ttg(t=3LrIa .;fi`?El\|m.harOkHƂ{Ց2Oi8 ~y>0־d?^ȣsts}#O>|[kVl/EjVJ$@bXVNj$r[D:J띴"Q0J쵢!мJ^Z: W^vG(~#-IFh ̀$s V^v]sϬ:ۼVdbXDPlxevҭͮ{Esp2n9⌡nx$flk;Km'w6ŕ0bYE`Eql2MƦ6 ;[K`>TLE "`Zӧ1jm2k>m^iIND%hNт,Yqk~JbryWۺ,oRduStrh8ӭ%?,bXG81`g»}V(Me7?eR7 2(Hqk˳Wft9izmbiڼy9'|Q13λ[K*V]x0–M<ʚ;r3syn:r0}d€lTeS h>t|A9?jnS1@;Q)AY1!*gk) >U[QWvY,.>  uV YvՄN.!D'[ߠ9hr&&Q~PHOi&ڢޞ Z>yO6sno=8QnIa-l᭢1c[9in,Eyd%lsKp"wF}6 - 5ln{|`ugj0G_*Kz dOQejt{"v>FabAmvm`Bm zC}!}:ܘ7~tAۣj`hX,LEɘQL tP# nj*B^dxAA\]thL;lA,(VHF:L1m][o*Lj ï[l%mJƸ{2zGbVLAF&M"iD(f4@1 P ŋ؅0J+✅Gk mm< a/D2EOZi5TxR*~R?~S:dwګM`Zoўؿ(<7J.ӫ;U^m4ȮԠ9Y6bѫ&q8֚Py\:w_N|G=ךGqکJY==iQU8ZCraЫ5Uu+4sZ SU;U'iMuV6qN]X@AiTwk֤ 3FP ^!isWg(C8,GtѬ5Q6xVQVAvڨP* uAdN5ZQZpDoau`G||&aøEuqei* Xݦ] zYsUGWWգ*?vl[j5zJ킑F@\mU}U{SKqFMn,< LT)Pph{ /}m25KG.WڵI&b'?jUui}UM1Uo,r$U Ue?R DTQP h-~+ߗ5I(D:ş%/Q؁gQ|!27PWq[Wv/VO}(z< V* ~6VC|\>LBƪikUvڍ c+0TZE8×j4AkX^qW85CR\ο"U^tƪfJj.AM1oEb3Wӛ'mT^v䠍 ʤާ!ɬQ:.s /ev@ :#y-k\bcanb >TC7%vs靅q;mInWlCu@aдDNR%_@Px-\G7-0Hp\k ['@_Pe.zGz o}$2(LsmMr_8aHז/XcLܼ0nF',<}᩾^% azx'`-GfHo Nmbw%7PCT/̟IsسܢY.I[Y $^pc2K1?M<~U%>rykV;@7&μy ޕGĔar)Ix¸=|E8_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?_ku0