#!/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=1fd8122e0b2c5086a6a65e937adea0ff # 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 P` ʨaXG32&V|JST+&d7ÜΰM#{=vMni;˱;Á!cw#t6u;[LA?Yl0tGߺ\t Zxw"^[W[{Zr<ku}f=:&Cz֭; `Uf5.sn~W@3|70md*4Nobjϲͮy ^u5rZͭVП 槿zもԏU SCј4~lfmWV}>!čZQOl-De=klŚ +SzY;d9{Wu_moUl0{ա?߫ߓ(W6??؜@vk<]:v}@@qFf*HC91O.XzoN(rzNzuroX?֏M3UU6n'8E0 YùܝMM ;UbcGYPGhd|?B&/CF/oҡɭi8d^Tn'։ѲI 8!k$ kͰJ4\sb7HB #@U++?ǓVl5 c{k؝[sҵMVZ68O 9(X@~e` J#.mE>1*c{^AQ@gg/N|&gsPH> P6+(Ԑ,uqS,\F$ .BhPtzI DLga-::┕Y,rੂœ o "ȿx@0Ֆ4W|Dx0]H`&9V?C˷Bo Tϒd<ʾ7"9U@-Q qk(P*?D`.92~9ߕ=|N%gf_T*xȗ|Jq3%{u3h# )Lf|gӍb~E<@,eM |QqaQnE{Hh0)q@ gd :٧*tz $ p!E-cՐ)ڝ%=.GHcW=nG5IgE5ߦE֠%+V<dQ8YzhG\JT,H/s fv8b(rrUP3<\B@)Fz|tț3?.n|:ce3+\U({]Kuewڭ[R; S %q#ia4=;Ek{?jf3O^9_\YF<( '' `+# ] 3? E9Jb\2=5AGKK Nթs Aߕr<Ԏ@*ِ-xumj||o\;GOl=XDx@v ,f2`P'a`AG{. peX쎚"?>%MSKE/@N<"(xpmEKo!n`2$ј! Q,Gͤ$ֲyC&e|. slNӗppDEF% T!2'XC'ܱbj,]Yբ%cb}_r( xk+(fd}R},2c N.|){^ wo|ϼoygZ;N?s|+0KoxIk&7I~кL&ZYKh]A=kוD:TN;vRG{̻zzu;:~I{p%CpFWZ0 JW8']OH6xU>yPkc|wϬ<݅n{b6難ù9,A ^EZMh/'\e/dv[}yO;rwu?t/d]`jQA ʰ VDyïT L앗zawo{`lYz\ rQ:>J!0UpU<|K>0 @8Bv0>11,hLtO]^0>p~\[4 vnDbLtlLoIh;:‧Y[`N'gt @äw T8Qqѹ:؜ q70uW(%:1l.*3Vzې˔[X!h'ɏ؇/䋏Iz&h:N4vJBA95ouZR R bVCrLgjx&j732!l^AN_2LhtCl_h{kw t `Kz \z9̶9lSg3R.801LwtUK԰QMuY\6@[oňzO6@ MoM$r ="M]IO d wW#ؘ?bNTp׵OdBs }+k5UsdJ!wȂ VkYÓIK4uv-+\'#;/k,60k+P| _*cZ7:2SduHƴÐElRμM+𢅼[R0%ܽu EDШ:De[mC&-}鱔/K6lc4NbK_ڪg1/=F_cͶ\-_Zڧ\0FNc&lSʬTT`7[%ħ:l2c3W u H8#ׂJĚ&IwyS| L?/d(Uk!^*%KԍvP4 $ G.Y>`smlyp'}-'xI YX XnK!tQnV_=l幂Hh v^YU} (,F!(xիd7h  F6bеG!om ӡj#J|]橐F#Z!R.9 %}fԅFoYT*J^Cl/2Z}Ekp< .cG,NS&*nd }9:)YG&:Y+ø= a:CPo 4#L"$Q#MuA$$Sd '$"B"iK{x "z)o%L1e@PTշDdq:.Fyeh`83RQt:m5**Z"Go]O_$@ì#lu7'<# ҡ̯kg~IlLEMLgl]&EL oVe,dT4f2*3IO8)c!?GX<[hJqPqx,*  i+XO}Ap@T^|?v/? 3>bH'OoJn,N(ѬABt %&X. tPF()H9FXv=Hj9$K=[_\H׋צ 18 :;ijWBUz$GGQBv/|a踉R֤H>,s{Ux C)fgqO7]W;4v sR0MVmMPeM k`Jo$@uM]Ep9p-'=G6l^<;׌8CEl̤]n5aFp㬬>Md4Iu2V zCu.$:dy*LYYY`rЛx1EbY%t0촃4`T᳻z4JM[J.EljvԞ* {AȗiSCFt+؟A295B>D8=>`A KC?N[nLzu1X~1K4Sv*?B_y@.ߨ ~3HV0oHZ^Dt_HI9ɽHC({E>$z#v()M%˛m H&G}Xf#-ŻHt CD_ZKme>#Hư +ԋX,Q猯'a3{!u)7GoPiMJqӛ O!X#pO޹p֛&_^"3y'Df|eů|SJ| #govxϲ'$!䮋Q|zM >ڝx_/!ip9]7[xTw^skxh!%;ځx4Q}{aWbޚ& *HL͔"ȋ_.CZi̔t< QBH9US| ɦ+V} ‡A ?2oF}U o|]kq b|fߢ7VFa'HցЗ0яA&+ 6I@4EC,2y #o?ټ3zX_boȃX*]i z/򶎝VmQ+Q eZUs~Н*|eL+ԦuWqKi 7D_N ?% 9_5PBc64@chjПapZŒzcpSNUCu Ek{] Nc NxwN}'=pCoԋM9^/A@4ry%3k1&qnnvaE%5[j]y/pTNq|Sn_?D9D4X vMk p9{G0}+*nAM}9 ;t,(ѴߺqOóy]pkxv+&}9zTx Iđ?նefH|e_d72 %Pz }"Tlェaz4Fۈ9qVؖHf! (n?- mTxD'cul=<>rWI)L*uU/.T)oJS 2/ff1svc}hEV_4 lp {y[jq0dk5Q^ 4So3oП^&&>guAxSGWp?-}X{n`l '()dVkhz.!!oyxQwbGko:&ݼEIݧݧݧ!݇1MW ;0cЩx4*1I(9۠3,.5!hf1,|K)1}t+3Gg Z( dE(VDGբzQ;Kں>N 9u)Ko6ӹvs-t݃ !ٻ\zŷ0 AnX_/m\n|66ITdV?v/0,'}_oIo 7hۻ:Ms%$}iQ39˙H !r@4\JLW L"bwv6er` B^5ң*W~q",Dͨ\cQOfz$LT -g9&HkSi\76iNL}UC*Ew5@hv‘d[6V1X3v|Fs WzpS٩~W=!cJ/Dzl0_[慎{HRcDڻLzS\'^N.*}l#3א z y;O} Q}5w;qBDaXKԗUKSn %Sg|X雥 "iQ%r.5햎X]0{^K̖C4ꯁ9 ʍ0W,&w0@S?51].gwR0;SmzypnLj\@v#ڳ` <,@#Tj:w:@&l̒}96[.#xTgp2by#uk=hFPKKO++ȏRz`GP{l'vguv֛mݿ3mt;ݨgJL|$s1W\8z\c <XqUzWP{fPNv02$ gO5pf ۰#va'zL_ߟX)[JYm *FL/;.rmνޘdq 9ҫv㠚8PwJWˊNZ|˵V9m.; V~{)0> y‘ȀS8 WQb4Au Y}DåȵPq5Գe!LuϰqV݃zAQreGgQMu`Fn5栒7L' (+9UlY~}R/ho! Yd@6 ]ޗԒ|;[V=cVVB .K ѯ i6<-i o㩰y6}ݧ\-{T9B;2Y?Dl;!f`GE8Cr3gJV*qmʯv|r3S{qUUupu.1,TR z:/E%Nw˄ĕjC?`v|29k}bpC./bזVkǷfD>9 auZ(l'_P!$lg3')dSǛמv AŅP@p%ܘgs(ѧspڏ35a̤hWg5y!=O+gVfMm$723SdLNKT%!QB|{y~bY$y4^0|]H L "@x#ŹҷZ85gRJ1CQjY=sL|egRX ?,\4(Q?7qbULg@&K4NuŲP)ɨ鯅!zANc^TpͩCR>/l 0ʘ"z~XD0sut ]v_Ƚͫȑjkp-C‚b,:v( Ϟ¾] _i I~g=KႣ_<#Lpu`ƴ)iוrY~ʻ`ŐI^9Z=~wF6S)03`8)3Q4y3|xns -˂>WLnSS鰎:iPFX﹂of7j٘2# h}HH S0jy3 fd8X5}ZhF ltÚhA:NM)T <i{Ukx@w_ĉ əX1[k)UOsb汈{ttF!C pfēPت!Ȃ^_7NCYp 1qohNgQ3)t[0L4l %Jb zE13+IpDCt9;B\*X)wKPL/`MZ[lQW^ӯ"@Y8(oH M= tWR$t=w(Qx=Vq{<&׷VCg99D Sv]‡c|˔m]r b^+|'%TlD$EqL^..gAmpDC!wRz* g!Agd#`!i_{JYCQPNF/Ҥ}_ .܆IGq!+ٴ\v'mKݜ p[~q +mhR9{)ʴ #mړq-4rv:+49>*w2n]T .n4hRsQ쬾. GÁDL"ŎKwoS qS)RtDNAOᮉ{!O}{@}09mm]}gA}T?*g d*n^ހ1볰C‹#ٚ ][pCm*ibMu^=%z!3TC ͓1"5BKwfl0EIq7 θks'@)쒶pR"w;gP/8;u`b:wyJI` f%2Udqޝ hN @H/żQ6vx3{ W.ehb/M͙^Jg' y=Bࡔ],bK΁Ѹ@+/wջ)ɒ>gC,8KPԃƹX@n?Rpj ! M3CB &[:Vj^-*]{Ή^薄 TnJ)tc9AlTu,T]%j.(X9d}b!?`hbFV#f+]Mi.χS0h+MHƶU+ AUqSpV嫿\93Mq;p X&SOl‡YLJZ ϰ^_M> %j'A%-[X@)x4 @c),Z@%6v\^'# N.+Oy'_g[-ҟ gQ Z`2s!dя0q|׻ErB>5}iWB8]lhһ7WJtC47|vL*F(O#`03=]&q,83JL$@9r,le`km0 ]ůRz l~y(C~:I`g=o/w~AT˻%~9:[[4/#WکFvaF~}0 ?4R8܂\Rt\Ua8H:\. h|Q7OP$-tR߽>b(TU<,U@-1Ls {o4V?Ø֠K)d(S>HI]@$)eL^( A1~xkNOؑ۴_Rq" B E #:0;8ndحd WP^^Cd5Q$!)AsG2U'aNTAPdPձLhBz]KjV%[Qq:#SN{R4ayⱢx|ٵ蔑;/2<x;!0Qr^9LЬjy l0(S>Э~oǣfR޽^).-Ur4&أޒFgR/h ƙ8}\0O+Uz#rZb mneRρNQ9\M_/y)֞MT$ýSR|/Mx_RJ7T'1j n$q6 D~L\ca夤N\ģ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+1qy4Gw⃞HtDA@Q0 )Q= I#yTQ[[-*O1=k Kb!SI!$s,,>z앱ad~3ZŅֱia:ʦlZ-OS x C@Sj /Gb*#l-c7bHΧ( Wn{_ޤ;`6.Nt"UvE1c(qtFZJ|wsK2ZC25Q`'b}J=(:mc[h:~Ρq_(N<@c9& ,px`?u}*!s]F*$]|%{gt2tl@,MىK7I1'A4SD1ECADXu Ƥ`Ȍ){} OJwx:ޘpH:uIRL#BԥU%ix OզO[y.m^l/,wܹfhL6nמ'w|&ҼNtyQ qiU=PۄJe}%NQ'~ߍ.bmpWWVW&>7]/0amVmԊ%'+0וA]V_i;}W(zs]?KΉ$QH/$ uFu|yT\:tC˞RC4 $P+.r亇g1(2uC6[] d.m@δF3 .og/lS jJ `,Rzԭhl(3QbkUf6(O{G\uh;6Y/g+?6/鋡cJQow]e;58 PhXڤv,_VmsUuKK;ԸQWFHB[9odk֖F)KfWq1rFrNjp}h{SS'mrppސTQiʸ7Ԙ,VZ6LFee/r şMzύfIZZ*Q "ˏ?f7ׇy2;>85,ϬAkӭف[!YEnj*/[P-}ƍrF_砺#5:~$H/;GRP˿nZX>Һ}gb;̎%aDT{f:N9d{=I(ϦBe8_ϿOoF~wErHαsp:&s+]VhD QQEj"=* t 46F]4uo:W8)Q b3岪V<*v'ڔ`d⸗N?bNM"ECK9h%G-{~`tќ!B "3="t͇lHE Mm0%P&s0 l'1gt'`tzAkz'Au١:Q7-h*jO0)u;b>tQ\l!Z'n0J'Ak}aЙ`LѼ0Gc+v;)-Ol;{*x]oJ]V/VGojjk7G6\ǪI3Ã|oE ?T~Vk;uzkmo^TN}~ŎK9l4vk[oke}~3uUhzUAuS=TLJZ]ob^&mޑj[?8N;tF-'0#k zSRVTT.F?5 'We `&P8mFm}P; F-UK;TN\\|_wj졡8tT;O onlt<1AA>zxjWABU|ʚ>CfǠOb2b:+Gl4 RFLNCd,9&;ڍ93#ڔU7YvԬ^VQ0ㆣGⴉ0G 'LQP}[[4 &.i=,R: 5}ʊ襁Ҟ LƠDIJQo cp!-ri ijhoݰj _;^R3G|{qţo\(AW8~2@*:$R`:+̈́ɤ?,ǕusPqr1 u(+-:=_e땕GS^m#|ntJ!z*s{aVᨓ®Kѧ辵j?ʳM9oR=]Z22kp[D rPgϥvZ\|ՅD6q,.ڃXwNF`a Tv{e|sSˆEz!XTIM82B̩bAL pԔrl$k&Njs5Z"3soWYѵ*]Y*(_0ٷtA^Z2i51/(M?}_$d9{tדy*|o`W3co4ia-0'6(=4́r-.iE^SdYiJ)HLy\yWT톞.]NE^@ENʹ^Vq 4;ĩlc Cm@-ؾx8i"IԾ\tdQg-T~qJd)],bɸPhػtaXE(X쳵>ȧr9M(PWk`3T.Z К'ɂ,48;`06q"?mӦSD'{jDrnHqIJfln^#6݊FzV/wr}&]q8ŶV6v5&\m:+ ,'#D |ł{bY[}4LËd⠻KA.K77-VxG+S߹ޙK̤ib44`|#C2~9-%'>*0elIW, ?Dć +I_4U֒ǰr"{Wp"€.GUFvl(']pym r}YZ.IQX6j`:gg 1y;wn܎ނKkg R2i'ѣo@06w ycb(4g^ r@qN+C`j4}k흪?rbd}b&JKc;,h'Sm" XA QjҼ%aSfڱ G',ʢxBl"HA_VfEoK|ugM.h0Rn.y?Ih(|*dw-_}r+=b6Kɵl{qo $7)ҭ*ERHP9byKI#IMAT- [ K*2DyŘ>CB9epMfod%*t; h ٜ~!.~ j // xz 㒛jz8- Y|k[U!*ɵ\r}q9 ݨbeֳXmJZ%F `g(4 ;8[ML [ji !]"VY__6/]bnH0lYG6Q:%= z&j&C͋8F0 ,ONleG;8YE0arMiGS5:EntRq%tJEHOT]4bkюmDx(9kl8Ϩ%tO{7*YmFCLyCԂ(IzтQNv{@?EdEЖ,Ϟ5^ jaP?k[1 @WnmvȋΘnRF}k:'qTQh%3n}OrS=gvC?#x)638(XhF<ѳj<w 2oZ$KhN㒙kQ=[Ylm=>Yn<OYyvz?]yqkikz^[;=}d6lgOqkG+VNO`LDY Ix0d5>EDuE{{b_~52%a`0@ _6E9( E'$Etاɗse XN{@|.]hqѣIkt?;YW֗4#!4S~W(Q4aq[J b :p. VQ|?Y?8^~>y-?] rhri|`_j0gp;2J8D#GSr@4ʞ-A&j+x&9Lw' lO= w}NϿW+$+pWf{y1=qsh\2,GUaD 帼P̫>*1ؼ-;^Dix\yO 4*hW*zy!6 J.dgJ-YzAU u𴟍 -,y.~Ld#e^vd󢨏BPۛ| ߐ܀2Ty =,n( <'ƁQ ~C~*&nWJ6̙6Q`VyFtP-lH1L]m4uIx47Pzs|]qHT?3]Pac+.:\.QA&q|;$K B@|v4~2 æ&pVrҝ9+!݈[lB T s,᮸N,X~uw3AsFS`:Nx/}D.@>W>?Bb9bSX^ԟSQƜ.@܍n%$ wB❐x'$ VB"*cAi{}'4O;Dk ʷ>2l%\T>j~yNgA{SE[:e$`o2 D|xo%z# S.4)]vp깅B0w;07HKHfkrSEerx UnzEZs1nr9g{yg hI~W~sr A[GDG6]Q:'ly:%Bg#r;|R?mܔwq:|8~K`XU g1 U OT`*grM`8f2Kilm=wgs}>ws}>ws}>ws}>ws}>wsG:MX