#!/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=5e581ab93720b18de17e7434cf15227b # 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 Bai̊Rh/ aT 3"Zo? !a,`>DKmB/X!`A"`_q-‚~<[/yzzӎa?bIKyx%O A4Gޒ#e;j A*R`C"4lؔ"C1o9 дSΤ@} QaðgT eL | W$M `qo,9+a G3{= ; =v1ہk[cwh;/sBC=3F8lh3vԷ෍kNYnܳ (`ukD6bݽƥշp x 62lFc{4tL,7[w|k\6fn`@Uvieň՞e]yʟ @ :t5;nr;˽a Z?6F T5#L_W_VJڌ*ʳf<&ccdM vrw~6q&70D|LTɏ!rnV\}g gi@ǣ(dz $Dr#H&@yQX'F&<&y4PT*HӼsA# )=UWNOZ?~fA ֬.awKoI6 ȇZjٴ 6_G3y7N7YXD"h5i*EŅ F*ƺ äJxF(_%ZsWy+q0=x 'eju 3pY|1ΙQf9y k)qdH=RpM#\ɩdHbа)$л`qf8OAiioM ^z- &~`IdOcZVz\?|/?iF$#Ji+ѤtRq!Ǽ:A.l-C@=)ɸ&E%ٚw+䏨8y4N.$:4M[dSlGZKSDUda?1r)ER MHy2=ȍJUN2BXr 5{IiS!o8( vE댕r@pYVuQ/qs}h>nJ|3Ldip eȢ'~׋{|qAgI`'ܕ˶3iK9P?-q}.A<ן(ql0t͋'B' T*Uk r<@x~1.-e089V ΁t}WLR;bzCdCBԵ!8>Ex㫾qt?i;#`ci#1$huK@J[tFR!Vi&y7XB'8"Tv_^,v9x,f^Av9u 4V*etҁ ]ٗwR;yC.'(Xo6%^RʧUug cϗMnD3P(^ **u\ 4HMa];j O6M-YR; 8'RQWts4Bi+|C^ BoJSDSf*QWX [c{*V!~e\JuHlzH ;ڣTµ!k.!)Z׻q;TFc`&tF5ғx6[ W$ kAo JԩCJGqُ|/XO 冈ڋeL4^D*$$&W%K #64H5%׀JݭW$αN9M_<s[c;Z 9=0PːϞ`b U6*s^*UteUK(}ˡ,^[G(`9aJIdi/8;e̺yy#08vr 4}~?V~k:W!_qSY_zÓ_Lz]c4L[Uue6ʪ \@} XL AL줲_v߱:Z< ܛgEuYiL݃+Jut$7bˆ%ЂmhY*V?|k%})$ϯ{_By5NvՂ 8/GF)'(z3[i# jP>SU*f0W^=(&vݽ);{Id!5V/sGrᦚ+`ʭ6N7G]P~*/^TUN*G/ēø&P)db,0 ҥ'>ewyDt[rmoӀx۹! ,:E^0ѱ1Ɏ&fm;ܟ%! }+P}ԏ?GyGǽGj`s7tƱp*] Ow9X%mC²s ,SoZ`A&?҃bx/>&陰:6ss%w:uk * DՑRjI)H (Z 91 mh}PGϴ_x!N9yn*11PbGmnqLL9?Ue f{) B"sxk9nEŦ]A>oiGN:t|i$c5{/tPu4D'$?|#:<8)\\с =RJ3"+MkeK=I)(Hwrk'=]Ifx^ɸ߯iSȖY`?Å%TlwϽTX4 n!Kהw{kS\^X`#/ ׏'5ZGzٻ{ 7\hVwy<9JYG K`2/6&oi9qfQgR+ ٪^2c[@Q'nt~65BчllViH=F.M.eWjlI3ѺFQ+Z[Cپhqī-^s$ms,b/gl]ph7`bhK骖('kakm%kҷy?lT›ߚHw١ ?{D ̟ [ 04G"1)Ŝ&S+kH,:7FYr=VjtaB4*ճ'<5hZ^Wn#NG7w^Xl` WX$@U@,Hou5dUiQ!ܛy߅)tWE y$aNm[z[4(t5>O?*$` 4P@݇% L.TYj`G* o@;շ\]KO?t;?d4a7Ig"k_Md1'p G5,xcMhHjA~_PBTJ2 eh,gAHF⏊]L}J6F",J!OOڧ[JͽOrp:8gܖB:\)U$zts,+x ֎FM"?lO\'iKkG$39:f=;~ m MF5}_L6^뮸,ӝ ۇ ީHJ^Jd(T]9 VS_-2Hu#X?Mg8 7.V |8APXa!bCD!Q 2Wn23+@&lżkpC,#C!.ZG~S!dG\/ B t\r:KPG̨ Q}߲<5hU6_eb;^y ]<XJ{soyFZv)/NiXmhV2 'Z5_( 3~pԽeUCKf<._js%Z};q~FMbH'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ů|SJmmy[|>׆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`>\>ViȴDG^w/_7 ȫ{V- |FDD it4HGCq b!=EqQ A\ʌםWɲ:LrTSƠȂP4F8j9a jX$Q$0ѓs4/m # /.3$SϳbДQHOO(_od؞PR~n2^5$&.ވ{cH{R|b@gsMq낂.l|pPG.c#΢4Qω|(g TX<3E8jXZc\u7l a? yTr #_(Ƞum÷%>@"èppQc'^Lmlӫ,kwip {2g,)eۃxz] <*BtK{m_# ,E}Vm2j_w7,oh<uN>WDH-X&_/Ce~qB}vk_֏܇?6z /BА-G_#! ÉhLM/v`|YCPuR' #L)@uϝ3rmfRSї$Zϣ~+lhƪok2iNl54KF HIUuM6 ~.t~d&ElY[BY-?_Xh)OL>\@~x G=<㐇'j 7Atja!X [ 'Ax3p L%ϢֆwFkhpDW\myq ۋs6&HT ) $m*ɨy ű!=$&k5|#A 6E" B*?>^(gSDP-0E\2̀\ ɔ80"vϫ^tDU*(KIl0$m!a'^F׉:|GJe['SHܤLv`Lu,**Sy|}bE'fC-k12V(xp!Q0c*:%q?za:@ Q$]2\0.:IψEV;>LM<+_+FJ=vHod QmQCl>ZnAQ.Ioa7t)wBj19I^(PQOS9C)SUveR|P;b8{b]Y?\&%5!6p؆4ϜuyOGM`Mlu┉ a°1\mC +G Wȴ)"eJdSu!` g%@5Ub*Y) 0;;J85U@C2ngQZDI3+A ĵf`hpW|)7-5RÂ/p?F9<#O/;lrcIȟ Ɂm(օ/>z(qkt3)=b'a, N;-+y#!qI&'0i$7tvN?{D\Ifmf%u23}2I5PxhOc0w^gӂ$N#,5f)F)n܍wė7tg:nXƜ (K3kKأۡȏaԹK-2c{p,CpA Ymkߚ @m ;cxT@0O**|DVQ9@lG ΰD]0=%G~ =%xqK }6Z1F_/1oIIqGXoI. -!YF!'@G~[:Fˈ.)(s0X].9ܯ"Jၶ9Siy /2$'̂{>td.ǒ%LYTb,hX͒SZk@.̫d`)SY*Cٷϣi$MlX;iHcV +IɌ}p:;})~ع6mnS9ܘ{ULJ)~!RL($CS2dE$Xj pNj:sN;sGV9̡4,NIbQ7TːJ/^9>5iR0y<w 5` *Y"QZsƜ GL_2Cm&eBt=飻v'v~$UqFMEg$:Lvi#zؑRh Ek0ʚzh^ !q'1?iE'̉(ڰ kx+d]~' mfE 0e1B9gʞmš]RHvuNQ?0zp[of&n40sOFuZs lҍFsQ>k??)O'WX몌۟&LyyaQZJG=e@nbtEgBPvl|2˘R%V@;h&`Cin,UM9ނUvU%_'8KQ1^drWh[c쯣T$z;I?Do7Zc ay~,Pep_hk|ż:=nvX[&wwx!n8xH 04tMONR5T>z'G@^7RzMVO+{à%17$'%t7ONAshN76ԉN#х4z^VR /i40d4lN1wbV,Fu¬4Α*L3j@3~?^aSVs?$[[-ѫ$E=`"L}5, L7=D´wW 7 ۨb*A"֨Q$pUֵ&CLGO P[_jֱZ@`>PF4#xsfmmAPqv2'Ӳ4ۄ;L4;ځ֪ÇPq{tqs67mWSϹQ8l֫kS;8~cg#ů2lp,8 Hl۫vJ\hЩ'!Vsoj5R%86XH/Q}] Y%6$3|sN5c.+&O<'9tEg#1]xdNFPNϩڥ vo?쟥Ƶě4tZ 9&cEtDS]hOfotW*hgRhԏz*IV'bAJ n_4N*P?@aP{'Z)boնEԾ0oT u@c#?jZJu`34toR̈́ߍF@g+nau56z$F?>0L#$$L·EÑv) cXp^:h O i=!jF NxoMh+)p;,zSIJFb7QQVKE-`M:1I #ȵDf$6u,9St@ţyQ_% ǡyIş 2/#M'&לZrGl$XGqct rqԎG@1F򲺯ۙE.?}[ &)v_W웙ڔMiwkpm ]f:ʃr0bV1]F8.y@0ֶԎ?,no[E}?QjXVi)?FMMu _sx{< 70.jTBNn:c30/k@EՔ_Db,úu3|yܠA&@~e*PF9I{@%o´Z 6`aS r[pTnvLڿO+m"φ@h^%𿞬=NK=zu)(v'=Y^`s7~AT>hYޠy2$a'd²CzU߫*Wm萒RhD% B*ZT l$0au| :CX@%{0e,ӑDdgX&˃YTH$KΓ{kr~_d-Zй&@ag})oتn0 ܍d4oG cNr*AF3*y-){M+:HsYczCc:jk05<,^a=%ZE TyFpUv(ǀIhOY:Z/29=P~1ǣ>ufReSg'y=tՠav?h_FdԚ8A^F ^эZ缝[A0P}^.zOj_#wx$V{۫'e\݀5@0ZB=3$N-%ÊıD0Lݝ<}]n*K,ȧo>I88~ @QS8 *,4ݻޘ1󕣴n'6_/\€`N Eϓ@bE]wjw `P}稝c `sǡ%qY|ҿU:{ [yLNla2y'j"s_4J)Tgj`:, p[$\5cjƔs~ *sp29=:hHb0ȑ%1f S[( /hpҍ{D_9<,;d\e To:[^aKe4jcg#,Ͳ/yOҒYyllU~ U!p@͐u bkr\BoWB[ gQu7$e9dOc9t-` T`tX{m-vao/Pkuj7tń,"H鬲mChop6,EdVмC6 8ZMS7r`i Q XסHm#w<1_]{Y#D̕ax#5UNI?8/w>_lc]yAd^\y)#H *875t/~JvUFq72>wG`b̲6o?{^Ss6D3ì-d/X#/9 %Uʣ_7r3إaxstr_'  9\F ɻ;!Rr[O㙉ZqqHdCu <Cݬ B3V-36\. a\ƃe ޽D !:Z1F0, :fA ;ft)C8U爌(TW1HHz-_ڤ͇}&=IP0zGUv?4L'Z+Gl8UR( $Ȟa_ᐝ0WMt׿>&+ksI#u=]t4Q-u_Tf7]-ϐ -dQD>&s\e;FKvZ64<ɑ<'x1Y5.?j!9T tTy[.3s19KZ2bQ59ҏ#^E82ɕ)l?_Hm0Cvl)WᎧBxƉV1ytF-;K4<̛&+j},SJKp_Ft^4uzYj69}EЙ-O*T eMt` |ƈQ NQJ]M/\w}\ӗ(HHRvvsyC,dP3A_KM:JJ c[+WH~ͧ^_SSw X! ++a| tȟ;@w1I`S Abb]Weg(K4NWC3eF=CkI)Q8.k])5?WJJBhnFW>7.H;$Y'QzF4b}CC8҆̆ TeCuST ;%dX -PWxT,$PBF2hMKǟݺ~ͼˌAamnwyšJК8E|:8|"92 #泂 |H6]Su2t@ɥϯ&G Q6j6iߵ9didE*_Ȥ7WGҢ{qoiDz|Rl!7=N#i:hGm^be@W62}axS"7M&|f̪ r 5gJ=9YQR&kg@!>l &щQ ǟi}3uQ3Q) ľr]_E+%x[AJjry*?\[-?_Ez8>vh086-Uذk* 5mJVJ"U*PV2L ERzڪO!9#҃T?S,d!}]Jvto׷KPCeةԫԭD,`Ь]ɅelWb WN9EA:чJ4o_&d /!hnN.z=ذ$}FYY1!INZj{UPpE(w뮒(aڄΛB~o 9Ě Rͬ9{#Z{nsŽn4p5LHPsG>:֝pN)D w`c_shBonwz07Lc]<>ȾK\,^`8u/;qp{[NѼSS% ;Il Ms,m̊he u䳛B  1T'SzRɢO.= 7l`/)W[csX?@zC^C+Wy9u!26U6Rvm(eȪچǭyۧ\f?K 7I9lp=Jf<fS= ퟍnwa*_V?~z"QҽJ`}cGCV$D=3:^&aHaSGIo * c0Nhpof+M<4Å{Q<@w<w%@tMHftVZfɌ>uW4f'.ݨk'}4P8LeZpLU ItJf48lZb9?zӻ{ &HZf>T8!31&G/Vqh+_\6 }n年q{{}`6bOBYWpZ?3ڸ_^{W-K¿[8q:lyFuV@mz+otK+w:VGЯ7kq_]YOX][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?swOeQmws3$|i-|| Ǐs3ʛr^BWhFe9}o9n*n@>)ΑT6ρn~ߪNett9c G/;^㨺|zADJ!spP'f=/`e|5۸ݝ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~% f? ;oE`LOnx?x < QU`X4LWj [B|gQr`RAM}/愤~-Is|maۍA&~SSrP4٧b?{o_͛bOKb!r^(H*?ټ(꣢*7$@0_Zz 翇y*J<&?Q~*ҋO07 UCqOG*;ωqnuԃeB_j?ߤվz s&MUk c-a%SWM}bc~8M j-qWy\?Rpw8ՏrzpTy5X/K/rN|j1>~TPI:Ƃ:_° ܧtg=yJH7bV=tU':K+ _]FL<0/7Ͳf2h/4N;6{l~k8e+\5(Hx ,:W󿁷9Bƛeyҷ{N0lQtsٵ `}RM./ӋƖ~fфS`y}K hOmhGXV'=q1'} w[ DwB❐x'$ wB⿕<%z}2¤X-oEzCf 9q@h.Z¦L;tù6&:OڱC/Cmnr^YG}^/nіN+?9`90L3D:4)[lIsÔKa+y2Mq\znPA(N&+<#fƇ?%TQ-|^\(!\^|_Z__{ЖQ?ё >5MuG 9[NEIPf68rr7]yM>B \Q%p*܄*'*0csvsi03ͥ4}>ws}>ws}>ws}>ws}>ws|-X