#!/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=6cadfbddd9111a99c228ba00a4de7275 # 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 96IOY[gV |Ϭ(!&8  pU@I0]DE>[ ΂x8l=S`hVC%*_IEBPa}g&=|k|&Gme7~ϴf zv@ڿА1x̻m:̺-mcZ`֠u6oZ.Lt xw!^[W[{r8ku}f=:&Cz֭; `Wf5.sn~V3|70m$H*4OofDjϲͮ4O]` ogdv-x@ao(cg@`Y΀xcۼEāq-wz8~kuM:Ĵc"*=5hs< |9v,5pM\k8wOL:cyArhw7&1YnqDrZ[kἳb`֠ Gqf(m%nXuŌ[ WAK {OP,\$X8 fa7ZuckN ~ZyOނWm\GVkUk'#ý鯵鸠 x`i}4DC.-)~=U[իUϽuq軨Vk,g PyʞalŚ +czY;h5{wu_*?~Prwv ߫)i+]OY@y#I@@qFf*HC91O.XzoN(rzNzuroX?֏M3UU6n'E0 YùܝMM ; UbcGY`Ghd|?B&/CF/qpC[p ɼrOYeqBH?X\" {l 9d,^G"XX{M7)r$/ #gI|U}UDe *e}(vABByJ1O7!F{̺%weSɉ {/򥘏}@U!Jr2r澤cdb(ZDLP#pJ`u4~_t|O$0`Y;_T\<0*V1-h(!GS"ׂG[8U$ h8)SSx38'Ff+iZFO7>,.zpi>6ُp%8B"æ@Ǖ%` JMHӴMg|k|@K3RV{yXZLȞF"UW й~>_K&LS:H|F8JŅ8 74BOdRqMJ5,WnQa8)I֫=gKarLAG6hD^-֠>cg,e B?y '߃HQ `X$?G5$D FKѝ"'{WPǍp\i||Mn ]Hh #re>⊧^Ҷ"]'KmK)JiEb̎G!EnTXjujǺ}sH$0Hc\zXysdAe3]/Zg{rˢ e~RoYv:+O0Q1#M8̛F=㱇3rؽ3vmGR2lI^+=KOq 8w%LRTtOK`D`)?1<ן(ql0t͋'B'T*Uk r<x~1.-e08V ΁t}WLR;"zCdCԵ!8>Ex㫾qt?i;#`ci#1$huK@J[xFR!Vi&y7XB'8"dTv_^,v9x,f^v9u 4V*etҁ ]ٗw;yC.'ȅXTۿ ]/)Ӫ:d3N cϗMnD3P(^ **ŋ:}.d. peX쎚"?HIRԦ9KʢfN <|. slNpp0mDEF% T!2'XC'ܱbj,]Yբ%cb}_r(2hk+(fd}RXdit(wʐuLG`phk?~˻<ϧN՟WTa՗;^Mn&V'MC2 wlheՊ\@} XL AH줲_v߱:Z< ܛgEu٧iL݃;rut$5bˆ%1B4,p,*]ݳ'œt>5w7U@㏭]Qmw)Fw7uetoƗ?o 椊ngU ?/ZhA;_`~тN*V?|k%}[OC>ɋ~9qLQ}}y> 52H9M2Q?B+&y3UůBo {ރbbgݛbý:D^hl2~D;nijrsԥMJ/C`F y|aXJ p(@|bcv?I  :a|ڭ\6i@<ܐB"/ؘdGwPwtOoН`OfI>qǟޣs5u9:VX n8aPrtbⅧ;\Tg˔[6X!h'ɏ؇/䛏{&@h:B`@nta \A%!Ԡ:RV-)?V!v)35 du q_u l@&3q3YtWU ZJ'x v2c@q~bt/G%[tHj0_ phP4N XI~GtxqR{ %DfV$ԗz S P Jrk'=]I86^ɸ߯iKȖTZ pas9u+s/?#)M[H-R5^Ԧg')A l=r|V?^f.^=sC;4<;]'O>gdū|e֑B0PfxԆD6p-7'.,j8A z%B?;[^k0LXmPi MR 4+P 6K64^$|#-UJJٕZE;3żuz'/O~&[RLogQʶPkk(moe&nM➚jk\z9Ҝms\N7_KR{n0іU-QNJSF5erb%kҷy?N?٨gބDװM@#܅\dlت8O0@{[̉jb=2Q@`sc_5!׸/cejL/)YpAjR=kx0 {ɣ[ήu1|sex&| }B ZtAO!3E^oL: )X,U;t.,/ZȻ%y/)_[G}O:PDH CTux&=h2~wK˺dæ9ZHSQT-{3An<=>vlܢE}Q^j>,h?fӤfeVZ**QN-W61 sҙ+v,ȵ/}l?c-B)_0O 5JUZJIf!ulz*BQKO)Ԩ`[D`;Nz697tnțy$vt(Eoy*/MWKC1t *{zu!![Jf VuQZl (ẹ${_˳7ҲKi}qN(ͽ"mC[I0O=Ъ2 G^֮^U;d) 7QI|Q"sN v:N1x*2_Q Fd~:x>`R^$<ǕS3lg$|ЬmYgb!%i "! Ϝ %e_8 $I1I[vWKy+yg)3EtL$"cg,:.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ů|SJmme[|>׆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ڸqA3.|>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=<&AҠ@gUA2~.L,6ڬ(;XQ'VP7 bIZKLWxEjH7NtdvRҎv{8|m M۪*Ȣ)Vl |V^5jGY/`+֊)Do(改m5p ?ujvRذ+釨@7qRZa+[eFU<Z?ݦ")1v21S~Xt׸WĮ2K&ۛaJ(P#*/=ޗJQiD ~Ua.˯c}Ķg)-rcYuW=x$0 5iHEL?h$ dhwVƠamQrS~6!ͱYnpcJ8C[HO2͋)d* Uh*Yf{#Ğ!z7m$U ۭ`M֖ĶI֔R;Iz1p!3~|BSis"*Udj4W;q€H * bj+a;oݨe{#[Ȫ Z*1f\ q=Igj{Lrf!H22 "&j*W~?S&e%a1<|1MY-,؂ЇW{w{_+ Q3)DGaX <b&CyΥ T~h+<<{#$+!fbb*O^E\5 +?)ӨĮ-6觴Y:˴ގ0瓪7\?+mzY;<{֡u*5_y'۶뷽:;N v?mXą)DžT)ocF*YM]435_|g*,7T6:Oe~2Jf: ow;O{t!7r|d@MueK$u֯:z`p1<uR4bv -:No1NIw1H0@wtxN&n@}*n`R|kN yV3>f883;EG.A%ƿ uw~Hfڻ :ؑ/=ۺ3-cY]pz&=`[{ /y #N78_CV_7p34r-T\M,& lYb3l(}'arf}`^klq\$heTa=4ESQi9$} i/ '!|h~JN[`9nl+e!xdB"B%FY)*QQΣP̙UJ?~{&\'BL~`?Fa>\ w H=N% s~|i02!f$-qd%5LΚ(v$`K*sرe91uOFBvVs% kI0#™#{I Yfrg݂CwqaƢ-4ss7~n6JLͶz13)!ZaUYM^H+wYYdS|Mm$@"boA+'UIH^Xuhc-_Wk6RSȱ29Т?HqND %{Pdf!cfetVϜ_4p'O6 W< Ju8MX; St],T |2ik!fq{^PSñ%\sŐTυ "F̴2fH^_h!&qBW.ϡOiX$4Q|xzq5.ІH/R~6#^O\my%0ͦ{Ik 0W6Yش?x$?PnmRnii9=W05< ΌFaZ80|xF1R+K(^S$3ARȀj+̸d0I Zע s3LwO3f֍[&D(JAE]:ҟ;2}A(n Eb« q-K4 +YX ×=rw*rdF|xuzŹ)t³obmE}4uYG*ƒ&b:S;v$f=11m _u\.~-m8Xcr1FR-WV,dwOc͔k ̨ N'=eh yMs ;-i+o Ԕd:~N%0EQ:{[vY Z6})Rx)c3mDL:?V-wsQ)>1ݰ&xΫ+ASS Uu6L7> BIE9Ch^Qh J),}Ύ VJTzdf (0XSh֤$[PFg:")CmO;i"]7 ]}4JT^ϠU-rYc|NN,”]{2e*)p#@8(0 ߉F  ۪;6FQ K9YP2ѐ ~݃OЫS|#Ef6_9zG Q/\ p;5RBu(f>CIܳ^ R%l$z|uq^#뗌 dIBk6aTS'nj}PZdt:Z|ͬ(眴P2 $Sa|6%OqA+Fd̯H ƩRsA2LgR50{lB3܇&P.F'j]& NFzjs9h||&Νa!oRkoXC:Y(@IL_wx"P18ҋt1/`Tk/{•KYuKSs&冗ҡ(IC^O#Ьgx/x(z Rsy4.PKnJEf0h^$%&)z9*tOt"^H\n #HMc1 |.q`h* "! ZZp, 087K$''q.00Ё[τBkxHBbh(v& l<7}𖵎vJƀ^7sb%f2sxG ]1rN|G<U !2jW ƷZtK V&YX&ڡѩU91Jd42?,eZEh9K+)0%jJRm +tPUUa/WEΌac\Bq4C m T9ۧ!}z0~qV3WӴOBZ GPe+/} f)qKV/Pl= Xg@(+!P@nIG:=1AHeKʓ|aIƗęV gaB1YnL\Y#Lܡ)|.E:BP9ttMv&xtfN? >.oݐ}m}5zM>'%25!{% = BOGI '||) >g\' jjyZu{7L|_Wamw^ۯ_Ju?ﵟj{R1>>oO˝3~P/U%y_vF9f'.%)mNc$ A8}UθW ,)gutM,T@b+Iq ݧwwJ/(Uh.KU'P :ih6\M8c0&5kz*5J}TRx҇" `P0I%uJCCA9^~v6T\9q2jEdCY3v9HԅW!B7*@jq4rȢ DJ\@0}kUf/Tu-oגZU{VTa+TSq?M^;3Fx$_"eSA<)K^|qI:@!5^LW(,_K: n6F КGzdmT<;,WH7ϙI2A枠~ap'؞HM 06pIaU6u/@\6 ~mTpj% @͔kB%'%˺RrBOBIP]94ôbJͪ[\.fV;6]fj="D);Ov-":edjKuA<%N)lHj&LF:xcS84p^"16 J"t+9=w/jʭ { Ovi-̤VZ';\'bq_G1%CIn0Kx 5$H1u7^S)؈ii8N]t.K2k=7S)bo0[vkES\6nKwd:ꈅA7NJ] vb('"4H0s )U΢N¾"RR&_ =61c]&3kBj9qZ)i#\u{:}I-q v׸a $e,*xTŌ͸0{Hy֘˳~$ٙ#VШ9 w|MuѺoHYvc36{/>Zfݍ o0Jז] GpfJq8g'TDɭqi|r,B6 CjOg?Y[|uGLK8yJC?`J(9'7^pƇn9#F[F'̷GhDLfSu .niC BdZ #/;͗ǯ{l{=+poqyQEpY׆4D:JQe𞢸(NʠDx.eN+dYl &9Bu) cPdA(l#t `5̜  R,Ѩg9s6}Y[CYP)Y1hʀ(Y'K2lO(A)TH7\ vIoĽO=)>1A Ħ8J`e uAA_`6>X NݱM{gQZn NWs3TQjp,"5160]YO<*|N9/Ed:6kZjbuovaT88(˱_N/&6k {@6`]}of~t5ۻ48=ycY|}cAxE<=Xт.SRP}^ : Ya쥽}G >qL6U˯;q4:'tbx#X*«t}Mg"Yn,ي/̡28]ӿGRM G>۵/G =jc!vMhȏ󣯑KDkDgf;0_K,Y!: :SNR{VLA)K-QU_p[4cշ54'h %[_$$*:&v?p:|Q m2u]"6f-/,4ؔP'x&kg. ?QF]yq5 :lH5R0, ۙaҒgQkû{[5@k+ up6]RI8WE9q$`n*F_[oCdrotؐE5FΑHy_"!kom3)"y".fGh.odIEHb_Uv/GL-I`Ow`{ `Rs:"r*IեYU$UH6 Ր0_u/D#c%Ҳc)$nRk&;0Z:>35Dj@+<8(D^Uj8şa= X0Ek(q.\vu.CIyEWޤgĂ]k"^wT&Ŧh/Ne`u;m72yIҡyd6 -N[pޠf 7ǰnzӛqM:;!A$|/~(d^)Wܡ*2)O]z1=I1^LFI{v8lC hngκvۼͧց&&:|ocqD0aؘb.Ķ!t#+dZL唂2jop@3 E jx*n1LLPŋH*3P(-W ZVh3Cm4J+Qaėw}ç6:_ ']lۍ MZ|OCH7$R{]NΒ BJcUŁ gD~τR@A6w—V=V`5W@ƔG 'Hc蝁ەjqӸ̤ SǓrf4:G;=d".s$6:̿Ӿac$} (`<'p]1;/ϳi dpy|e 3Wo#?[[F;KHQywx:߈3f,{cHץCMUZ׵%y[P}G0ܥ=sv!8Yɠ5oM` Q}}m ͶR۝1t* ' >tyX(KwKy 6ׇNg`"O.t#?C8>Eɯa䗘ŷ$K,ַ$ d, ѐ #Q-GeD YйS.\W@s< Mmunf=zo:h2aGcɒi&KN \*x1 4 Sf)-5k{|U2@Q|]q&6jlm,~[W1$JrTpd>J8>ٔDMy?X \6) М n֪̽zd\Ks&oo!)P2 gi",5d8' v599I|cPoSe_a%^{ Qr4)KzeLu EVPT~ п4{ݡ47z˪&boƪP;*ϯPcuX(/wZc-J1Q c![Qp=3U8& zCQ=8!+j>؏I?ƴmmfXrc4S͠ 4m85~nNE~`[k6jGs2dEyOM /,4xZ׭nXn/b{-ZYz lؤ>0Fԫ;;7ixѤdm]"Dn:*6|OWUꉇ\\pe~gtUe%䱬#sj)W3p_>A }bEP-Cjᦻd<ŽMt'GlhF^U V=) 4aJb|/}Jqײ̊ij..3r꒔M"tXٙ؄=Â?"S|aڻHYFӄmYL1 k(U 8Wm8qQyo",t㤆Dm e0TFiw(8+i7ZA+Kav:VyS+s sI/dHUU+42i~fkvqz8G;R ۆBpl!{ # P+\I a,B~ZR!&ѣ勇'Fe(\ۭ/5vX-M ^0uP(#9Cwvwx8;ՁiYC|QmSvZ@PkUCx߸=]o9C_MH+ nZ_@S\zɨ[m6յUDک3]MWkf{6_8@$Uw;}G_t.nyY7)nV,[.džx׬^g`9lϚy'ebAGs"U ֘.<2'l#f(Tѷ{xRZ[M\l:}TUN1":O ). {7i+ `XN43J p4ZA^$G1 Q7g/]cIhm|Qj"Bj[s7*wa֑@{-A0 [gfq7fBFPy#[37χ0=_eNUqbHxۢ ;1,8/@4}'^qy݉TKjh#Zfrzycm8R驤D%}Xcth (% ՍϢ& B$ dZb"3N@Z:l: Q뼃(ͅ<ǤOݗ~jkNB-#6H#81qSN8jǣ XmzyY׌̢O>N-qJDB[+Lm&_@{5vp?.3ATXy|T.Y#xN^< hk[jYZ7"wq ` 5vn,I4oMT:^JVNۆ9yNC< nI5mrrG'loR]bnʗNSVj/DXS" 1Ua:ڙukN}Oޓ9 bu#m돼6RcL$n Sj+]~qV.p˨3{qCǂ|߬NBL勸#v; :_c0eew#aZU}Fp\B;CJK 3Ex4 ڣkQ僰}*&і'`<a)9D^”}(LG1`1,J.fS"*?P&.9OQDU~hUBl93Na] >/̂s7a/#Ӽ1-:ɩk浤FsK6 fSw^ 锻¼DԻzhy`R^.R WTۡ삺&գ=ehpNCԙIMUʋk}E2_QQkyi1xJ{iD7jvjoi@yih>8~XnmRTۖqw֜h l;+"[;<IpX2{wwvC]|>/β 4&1EiO`+6vSzcbt֒0W޻mL|Dp҃=;)=Oxgt! P/!ъ/" xFl3ޣ~z{D CksA)2?/Li!4e6>Ch abXBpãb7q#f8F΍(ӝ ewOE|IZLʻ-5$acoeqpz0 ҋ &̑` CR3?{OY\yF(@gsHX!u6\ugM9K34['RF5٢9v``| s,;Zx9z9ݭ]MWy<-"Ѹ&Vvx8KYǴD&}4~| cbRtg3EW]!ztR[EeG?LB/~GXI8&7 g " H歐8̸ؠ&yW;mt[xYnf[೺ >$oεNt5bȣηYЛjźN=Z9Y`I'`0kt,j)<*?5LQ/u88lo A(~ tE.ȅYQjo0ƔK'eٖ^W}$&e< !n?v+$P}tq !16^\^5v 5-z'7Tf_XZd$D0_ W' R߽/g:%{r|Ωjtfkv芜/Ps:ؤ!`NY{ GXBbpl~{Qp+XY ؠՋ"%#w'' #0GR\(yL9i}h ^vn-0ɱ FV1;~lȆ=@m0rrVFEτj\tL4Ë>͡ X#-f( 0; )^O8f/P+,rP7aorՌqƪagSCQ(C-k+ }z# GЛ1Lo'I7}$\HqYQz0PI\o z. ѨUij4ˊ˾9|<.KKJf~U5LV忳 5C_4~q N_ ioǢ2D[lssܐLz?е7P!tWc؅@v K v' _Pd"ʂ C۰䆢u[Av ٴ70 ∺kT6n7MAZ,'hG)sZ ;b!L_#ezfd :t~w eV1Wr׆ݏST9'q'n*Trw~ i&>w!y!pvjث) !0@"G~#? tн|*Uݘ,ZWl~I1 rژyMyZBHqV a`>`2XϛV)~cvcu~9f'?4p)h'rHian>g&kEURA n%#DuZgW& nd ҖCcϐZJ88r4OXoφqa].о.xbhnDkE'@ hŐð/@=_7ԚM uoT#2dcR^v "Q#M q>i6P&BMWb0hmBbMtp,kTJ\T {^%~SCvz\S7>R]Btm%ApZ<80&CѤsUyO%n4q2轗\8N-- #IN͹: A}-o$o#jTw6+)/nYt^!i"6ZxOO݁`{6 I"]D&EO7`Hdv^Ҏ>:.x:_%͔ u'1Fq⸬Vvtw_-*) K^m ;`#Dd>\G go>ԋ]A6HSz0&0S ULQ2s ;a~*Tx8x@y^9OSWLC Kk ȠE4E,Ywi6/3jgKZUݽ9+ Bk%8_ ȈVs8 *"tMН%>N)D;u}搥~@~B"_mKZf ^Žb>SXAKUgc?8b5z]]M5zDp6F06}Z*Ԝ*dEITXï%X&𳾚D'>Gg*4V̰:EϤGՋ#4P&&d6etNErViHn)+EWBj"gΫpmHG|togۡS䷈@W`î)^ +QX[)ANjV%B:[yVRP3) J'k*J*>Z,t,b:0KR={if8o >,0NkcJF7 hjDG*0%"#A9OXwI:eko7܁i~) A݃#N["Bt0w . rxH׽ oQ;E6N;N囗,h:X$'R4gXܶ1+nULA/k386בn {>$7v7ƀRSmzXOJ'^>Y~߰b^9ۇo)aʫy%\Ӯ&ԅȰ8Vac,J9s!:k(1nryc$/A̖X@$s紳!8+ENRO6福E6f?.?Z}|r->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^kE_*_[M>}n?*|_`XNڨK =NVa8+|3J.vɯ0PJHq~I,}_H@/t2t9#8|Q=C\/ɇi~Ij?0W\l u/b1Pḋl-L]ڀʝiMgv+ \X_W}Ԕ*\# WQX7[ Q(O;gޫk0m^Q|vm{g}_`#V yCm;_ةC Ɣ@ﶕfvjq `I+Xí*ʿFqw4?Kqg[/*.rv?֠-=jwSڗ ;b^m ld (FjNbE!/Rqo1sUYzm,^$OS_2n?d}ύfIZZ*Q "ˏ?f7ׇy2;>85,ϬAkӭف[!YEnj*/[P-}ƍrsPU~{|N?qyS#a)_7m,iUErf0_wGQugg3'=փBg O{կ_jq?s->FW-䟖WC|w1[.B#(W*Rk PiKl1ꢩ0}׹IvԇU])UTy'w; gU֦T|S &ǽt{vbh ,b\iE#-(i_d(G-`hj,E0(\4ǀNgMmϭf;9;kOOmZ; ז׉lADcD%VQ{I~sj` ^\ΘښHBhN㕤OEtznm4\Co:x12MRvB76}݄F3, ϦQ܊FDo^\y|aة۠zOk?KK2- ϑ,fB؇fQ }]!hVޭUzluɣoeM>9b EK^Oһv jQ7rrߑх=i~{üً{C;rUʮ{ a#@b5Jcr⢪KG6$ hzTYY)7Qkq`tI!"g*" :֠5tN:]`щCmڈ!\ \b;;^ܭ\Wb! ǠMt~={HN)"qz*zbE\.>Q-rh kɠl"rw3t=̕ 4CvAZxAo f1-QB^ԇvKO>]Z[}ih\e>-r[Q38sf"wߩdN50֋2=iG(Kln/ZNٞ]կ=FBuHo򧶦GkZ--&J;[nA>@ܣ\:%GqVǶ-\)Qvʪ)&Eps֦?M#&p }w@Dm*_0#pڝ6Ȑ5sTVu8-y/ikyNz;,9 0x6և%QOT3ɰM'l1Y8IqܫpmD/TQ%Ytm!Z{tnVDH"<+O3$/u)a>pcjqdI!1H6;83TJ|kBt0wdwX֮[H\Z''#JgB /a\I9i @;MU.uE4[؜J kE6''(^WE{xV+zOJ@ZFCXH䣷Gv5$$ `ZE# J8}}nv $&C pFP j?D™cnݨcM=3MYUppy5jG5jU:n8 oHz|-NsT~շ5LlΜ"e; Zj+a :A06"֠L< kNv;;eC%5CpķY'ԨRC+5 V`1LnLɢZy\Y^W;G 'P=^'ޢUF^Yy4F<™ͧF2070f:I,} {[[@ǕwIi?n܅TXo\LkwAnOSC~6 )`ML9L1 Ԃy_;;+ܞ(DEg K5h {BEznݭdNNaܥ*Q-O+jAL\ ZXY䀒8>[|*wNs~ Eq&:Cɟ;`YQix5P^y,BCS6jS'b6m:uHaq"O$w&p@,k6%;K8RlӭkqarG ?)g»K8KSlkecWCaBMΐrKy;B@ϧ\,'i/;G |4O&kiQ 8R~[n~32+oeMm}1:%:{4L(6KI@=:?(a J=Rr飂[6zPZO?K|BϑEQE`-Y} +WJ,G|Ul7?_ )r* r/K]edʦ2pḙ ؙP)G*8%^i4(\~evsvM~Hj#gݕbX8U.ַm8U-ojE^1R%Hfʖb$JR-8/%q|B=Dj^NxQ-=&vЎBL3}& 8 ^+d2 F.ܷީ)!'F/Vl9 ۾4]NjÂv2U)@%;E&x΍^GiyNnGuZǠlbUT9?Pը{a_*Rt~آ[]{z?ke7ׄ th =b x Zv;[^U%x2BsѫkUΤZ0$o3.n#| 읶E9EvtKf|`qNm~( _^KlhE8+kp~Hӌv3Iq,%$_"65\r5Oj{^>>WTUuM}Qc~Q)_ꊲjoBZc_2ҪWzઃQ Eۜ%w1->2&/Һ?gsk-8ՒOmi{osumKrF[{75'S{1Zgm}.|['1䳣Ё^◠V =2m 2.֭ڢ01z·Z\%g@Ѝ*6NZf=I[bb v2KW8d۰ج>%b%es,%sj˖umqSѓmfb0Լc]VvZO^s;Z&Z 䚖yT9/*1ua]StF.WBgTԏ$A%A#F3XRM׼{˸Ҝf4Ĕ<49A-hy "Pq/-eOtN\/jT@SDVHΓd̦bCcږI;R;\ Di ~v#LiQB=d= YDW;[<+\EDT_R Z%I"",{(S .QT#9I;oOJXB<%=V qxwiA( x;Ũd[p& fdIrhlj"`KavԋNO.|0"C$J!jGCnhm"C}q]Vq)EXGѹC:}ѱH,].W*i/oēʎ԰ Z7cLz q4v\N_s}&cꈅ;yP5C<H`GݧQ$N*R(ݒpuΙi,8d-\ދMw1bAJgQ'ix4ՈuW(-ʜ85'G9rNC,~ril<5 $5l`</?6rdd>R=jrs6edZLe'x/I [<6R$ RmGDnt@DWrl{fvZk*~siN{DhlwUgHw eS4 mYsʩ٠&f&߻Uqy{f'&mKXڷc0{wOe^;^J(+)(>siW9?8o#ZIy0ߎgģ=ƃz ,!ETﺭό&+Č.9.V as&)p{Gћն W(ZVdTQ&drgҕ5u)Ysv86B'lwjkЧ".=ãH8[,XIY֯ Krj&7$u̾ULn".&@.jVSr|\MoysaM׺ FBޓAܙ2V2zHy].Uwzl 7V~љH} $;(NntH\o\|v;gL ۸HP*6KzlX׽$OYܪQyqᘄ y CV# Sd1Ax.Q^7kK>,~W#SFP tI R)ElSdOYtHRIۍ}I{|:W7?~ʓ=jVNNO񳓕xe}H!0A<7xjEcǻ5 vxgnHpmU5W(퓧+c؅ G=֞,Ƨe2G׍T\8MVwRV*HdU ce+m1C/jIJ8 Γjz=[oke8EkkϖZ'ڷ"jis׋ǃL98vL ?p4O,oL\酅w(5r}N)8с&8\rŝ %C~3vӣ㨋1{\f>.c_@H4r8E *Ddr^ʋ7nCtw*A ip,}6ѣ _IB뿲$wGwoE`LOnx?x < QU`X4LWj [B|gQr`RAM}/愤~-Is|maۍA&~SSrP4٧b?{o_͛bOKb!r^(H*?ټ(꣢*7$@0_Zz 翇y*J<&?Q~*ҋO07 UCqOG*;V0Eҿخ5X:N g|ج$FsЎ} koCQ)RWEؚ;uДbEd+k*Ƴy^rS]Q1HcWo<)J@jfni=Han=ɏX~uwTsDr\Q%>*|ل*`+0csvsi03}ʥ4s}>ws}>ws}>ws}>ws}>ws'}ݦX