#!/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=a7899f9991cde06770fb77afafc9a1e9 # 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^G Q|/oqdp@{ew ;#ʞm1c$7=och7)k ۬w?1#L zMiL[&, D&$lp,ǩenQN:c޲(m H֑,07lug8 |޺)j} E5Oψ,ƞWHKXh"`ZKʄ0Fi@ [>DK앉Iy| `q -0Ă~m$;ǚC~LtH3v$VK9A'i%0zR2ԯp5?lÞ:NG$qK7_C mnHH5~-gLl43ۘNڠ S#t S-"FY:&J$(,. H*M˱qO:Ok۠6BSY8 (CE]CjeF $^!X4J Bj ;e&M^!jٴss; ~ܸ7il+kcMcbf_Hl0hb)^q1ʐkş[jFk7>_ِ؁<%DU۰U)}I;d16/*y/_cNHy_?~{ݯOU[wF/Mֿ zÀ^N?As28>Zl`xf_԰<$^*sMy{/Jm4" YAۭE>1lL {ZAYhWAoSMEM $Y^a!nE' qLi?SJUWkT 9eUܱ#aIݢV˔+΋=<v""X?Ifc0 Tp;?z3-4dy9ߢ'q?zҬ&f B >O>i@/Ҁ~>Bqn~|rYC׀9-dp&L~V-s{cbK |Qв_P#v;cc2M;v5k]88dHa\d$΍wIm'\Rf;M bQ\̆8܇D K❷ Dj!Q9RSitjA TXGev;(ƥNo;UKxn9_:jc$^WhZwŰE74zaA+g STў..m+srNf#ldՅ$b uQK[^! TnE@s93:.]\@u:WUS\}lP!} N@B .j?Xub ۇ#|~^xK_Ek:,Z6_Kd>EfFSIך-X`Y T?kxo_ēT-K1$ᾞp,[{ +WFF}H\>`^I܂wZڸIi\mz/j[rT/Feg]Rҫz%$I Df9Ly9be/|v{6O_+de!]֡T'dEkObqEJיݒl KI34_y@b$ 7A OJ$q<]u?[$ bRrF+PTQ|wI&vIʮ!:b- oH #!u,XJ  T稙ʮ=1"R…Y:ޓXp9C !h2MbEUe s9H3Ȑ| >e_e Sl31cɆ!<RuQ~$E!,vqlf-`EmaQ b0D8H[ | &  O]5[lKq$""SD'5wW_҃+m*Vh }[ pW?Xy|5c)StwI.ـ3C-w+(z L]~Jwu" -`-7 w>/8X.~MzF'>-I{h)c3ۀH ѽс?_$ vtd(^cQе,|c6qWKTs#]x佗u Lzu-%Ƕe+q?l6vBH"zȮ4jUV^-r@G$RD:mF Bh=]^9ye0vԒAu&r*"LȀ>l: ŽNxhNxZʄKH>E `ۂ{ya | 6k2B7Opi`Y#pY?ZQz`^1H|y|AK ˾4)z2W,֍]q2 ^Z`A|e@YC8Z%GHQȳIV&pK'EjQ<-D^ZyrPqUeM2H7Iy|Mvn{Pq2X+DyUHJH_p56{"橋4u{lx=b_ ThQ:U` \1^+^  Q0SiY€Z ~SDlWnꕆ@5BVPʛI KيNѮiw^iCbb Vԗ->_NY\U"LSBp%>wQ1Y/~^wd*o(>3Q>b$L>@RF(i~;%$իvPkiF]x{8Hk_iu ZR@u@s_lL7 ]uvTyuvWvp9#2U=2XC-0hQ=唲V?!6]qYCqG}CŸR>_7s].]R*(z=ipܮr8jco4g !~ٵtx2G7}:NڐEw\xN*h$w9K d;*`? -)Nq(~8dFl>ʩ.y]yە< [`aLIM&I2`nw:L>F1K%ث̯6qטB&3jQ٨5nj9uTvzw\_&;p^F}܂W<3JJ*`IIbLҗ&TH ws"0p8?=:/*oṾa·T=~䣬obb](R2YW $:nRpOaEyX}j+SSWA93YRa;>IA]mYogCBpZ$;SN[7o{oƑ-_)BK($M݂HPBHKٍJIEl dU_|'G'EdDf$@j+W_{8qLN,B:= +`S;Cl PG;hq;Wz+.0~ht< C^M Ć<낱SB3qRzs?@ymߥ-n4*hO!h,̑ۚj9]W?9~!u\O/Erĭ/cg?_[:Ns𽵬g.gi_(<=g ^:*q8i6WFK)Zo!>ptG̓R{Ƒx_ู 4FDCGi ; <{@Y : ّj"S$%tw;3hz:x t]Mt' 6Q뜍'@Oߐ vɪ濫f#(U s!-6ԋޓwy }}0 ?֝/|t=zsy?24N^(q~0bl }7'pW T􏍿KO;hM(j0>%RipAip>l-./Ǫ\^Jj<3ͥFQkE1ic8h7J$aV`ǬqzT5?̻WR\H:^d^U0h?BGe2\pyZƿfСX.n `^u~j{evJMESm7`:KU_5P)K%fQ%-Ihwo;ǭFCa%;a;`z} (INu,-pfGYYGzdǥ3do3Y=ڄ$LD0a[K(A~2X@w1lf wC._ph(}+M_,%[8Z\N8LoҋKR'{{\T8[j );djN,`Ԛ$*Jo 8n ?<(wf+${U󫐖E@K!>-5ߌx8 6cIjɦa,Qx5fDEY~~*G9*Q=J鼽8SQNN:fiOf_ICr`-䵶v/?`] w!z &Q"cHHiif&?y {96\PZ~? ~&-ͨ(ঃ,,:P' ZuTN YۛV_oeYv4CJ !/ ] Xhſ6w<߷pPG#q7wNmjօy8%*5i;=uiwpjr>>;{WUo#J/k?Ĺ 66vl]eDWT_dWG!+#\1jQge/8‡Kco?PG5K5K58dֹR6I:R1obҋ8ZAQ&;hi,'uJ.b9=I=Y=ieΖii. Ht^Pߗ+^i*aS:wBks&TX2 J%ظ2+ceXZƓ$mNw;won^I4yoQ um*,LN3ZZþ)f,D.yxox0.h0saX|0dqS+aTF?*T@ %?CϐAwE捃:slnaEYa-t[ƞZw@w? YtLW,)1܇qN235`KL N25&37g咐#2m3ٺG=EO㾃hXd8#R<OJr>ȱ!Auщ0z%yXՈWiH YHy@h|SLkXV;LۨR8ɴ :&R H(wPo0Er~BHԞRrvNC!(o7dTeA#.Nf*t<޸C¸d:Wsoz9sto/e HCs-<"ɉ'!%hܠ\nBTP M ˍIL!Bl6,6K?a#"?O={:ob/,w2ΙW^5l]9|?|{MYfeXDc.pЛ/M^a.m8S: PYRXkB%Mɹ{nƲ@̚RR03)Uy :lZIQNZvkxgIgRxma^#kʗ@vo,rVUfQU$14Ԡou Ŋ7 i85Nde; @E9-i-}uz@uFI?PwXEoHG:o|VQE/X4lZ8Q9ܥTe&[ v~tZQg m%ᇴAVJ em_~ˢNh4Z2StVe+8PjtRP:Gǭ(O?48}TܓA)fEclf)<9[Z¹kWQ3`K,m~@it$3g2: S0 )Ze, d \+~Kt HwKxqK)Un9Bڲw Βmقx|9x,f|UcY(BoNa]q]3 HmWFr5 PȌIs[$ |M€c_KBG xԩGcu|Ȣ=A`l:=yn+kD림c. ,T|6׎`9YPo<ϦXWH-"CLeb2RN nR1]}B68}(|n90>b)h͛MEC @!Dnr(Ωl0O NcmD!Jbj' i84l! 2xwPnͻ >."`u@фKد uw0}[\2)#[g.1QjR*zj6aYJO9F}<{f0#vq́2İ$OPOalz3 ckXlypk=V5͇֌:׳Y2aƒ&e;i1-0I+]Xs-,'LcXLD4[=iTKu҃ c) i5m T~Zpꯂ?ʼn灻.d6Ky]SL6V6aXbį-GcstfIT3јGyn:OQL`ձ5IfgpBHy 9i1z vUMU^;KnzNzza~%:!9p9%-C2di>!0Wr* DԊ9J rfNiRn] ^m= &9ٷF~GWkaBBtGvwo]t,-ݛeDZ$зxj?"5-pa&HVAK(^\LT\h ~Z/?lfGL?)FpISC=#tZAOڲhU?x./|P@/ 2-4TS%T@Qr0MәTP [K}q[h!X{RgO9j)8LZGMqڣDmTY΅p( nzENQ]`W=GnJ=Cܔ<8lcI{euquln{pbº?jԄ h jI8[@,d/Y xl9E0d7^ݻhZ1f=h-ohzk^A.iϨ7o0NtO{DNšL&Y6\,gӘ'}I^'I B\PQԸƊpM6v|D?up&:c)(ijU^9D#$[@Vgd5R/yi5POF8zkr3,se'5Kj}IC41-pU/{cmx޳5qpF?N4kÁŢ 3f]嚀g^A6dDeҧ8?("3>mWzX;wO' $lƀboGM؉џI&7x1? C\]IeoڢDƷX\lY\wy,kreeEMT\4=9ٻO,zt ­D0oE; 9jų0=r~n燮v#5{Wba .,hzQiסrɵ(ډ'^ֺ-nߑGPlQt9>*2?ɎL' utlW>$@׎18]fϿ$,߈3q[ϗ9#/hX)L`WO9 s*u2Q2\ ٖIJa{(k8K,<;ʨ{SkM) `(شXb_OC8 ޛG V&&Uҳ9%24&d&Õ<_BXqMo<GFBQ"éDJ0IS E&oA@{Z,Gzy{o HO)447_ɘ9"?&Ӕ(K%=Ј3&PJ /MJ`ZʬZ_ ,%FǘzxԀ@P,Ҳ0=-N{u+3 Xg]^ƎwqHĬdN:=r!K ͥ>u\ZTQ8 Gj(V)37X}fqĚIz pDN> T{18jWh@(qejox]8; jc{j G@RDk ;_@,t-wm>W|zws0x{)'fn 8΍I;ΐ:hp|-z o87 P?K |eK?oZ)n=nHg`o}^nĿGuQo^U%*ݫj`4QF\J]wQ-@"H,A6㫑*6Fϒ`$xv#*hWQP\S.:(.KMY;Ɛ Nn1-P>d3: uh#`Fܨr&\QW0`13{_Qa&2[$-f`>Q\xpx S5W5^m%'a t$ 5.j Pt U%7،Y`%4^:zÉHoM h?#Րؐz7T23LzpIwC$ԕ9 O$Q$#`kއi/Dt%RvUʪ/S8!H ar49)5[3ZW6o0KT(Ӑ'? ߍJH6P#FNL\(BWЕiHHZ5L鎆W {0mpCNjYYRZ5be%kuֿaF^ZVFā|45 P2OkUf"sVaj v6:-JÒƋa=T~-׿ xw)vP,I)ʟBM:S]Yl?ۘbr-N+jTsU udP)/P֚FX &5ģ.6A%̒jׁBBXYsg; nuRQ&<u F>1kըWJ]b pF'A*\ތtWI7N&?!ث,XAH҄nw +51{Z?%&\8#nKZL%65ٕ#Wܦ1{yU"IS[A휸`9cb Nj[.t!c_0B .(zAWwZ[,#5WѓJK%y<|Mҷ%s{ӾL"/<+P03 X0s*ApzU^oVQչHvpE}LuV0T]Pe#ڔj7Q8:ySkn n9j:G' H{gexҡPFG㫏L|o˓NɫA)ٞK]B A`|щO~7-UñJ"m`1lq@s5V:CmMrPPk,mY$.xTz<.&ǣs RS#Ϥq `c/okvNٺ#ӿ<:: Kf؏q8 Y/i7Wv]d<{>~f|P*mE^ _\lTvyujcu;4]7 $$~imR/eLJZ/MeYeY~A'G%S'1 kY_S 3,CK3GдWS,URsu2<(4R2_ϯ~7nSI~'y"!5SiK+`v8C /? v\4ف߂L-.2$M:>eYyPI.ssQ$|ƭj$oԾ%/7;ńI[%aBNNrK |.n99#Rľ/i&LݾMrh4VH)=,2xyVAuT>)VDo8 C庄Y}OgRm>}bcvqor98l5ڍύnh01oN m @?d$Zq% ,'9L-sa6hyϏSIʌ1a7KLGeבJVO,Z3-KAl S'<.CtbJ_.xeMPQ޶2)*ҿo%iؙqm⏤4Oޤ&YQX̟p۴V\dszDo[X^~Zfyg2h:CX!T!"ڔSa /u؅c-9NPP$t$aZ1myFCR,a\>e.{&\gi`'M=05tVȆ?^1, Q$NN@&nK4&irhMBܝ >xA8&yuEOn:h7O}-W`]ͥ#9AMf =|ޗLKǞ)%g2Zulw(3LT`4$Fb^b0;s^Q'%Ѿ/~?=!|,85Z6jjNsx? *JW41BC,DCw{|SƆ^r8r"ٻ2|p&J?a0k,0-"#h=E@y20Ĵa4+L_u("/8:9L| Me0+h&ANqdiԙ5GXYV9  }m~!# <[Hah7l̷>_%k.) ;H$p#a홥4h{Y*_8b]^ 3ʸc+Cfaأ91ɒPmc;i+u)h ,„w/, 3_8iT> /{ɘ#{^ޙ&}̑ їD?2>Ռ,PzGVfuq}dGMa#L޼¦s #P<[?m^9ge$x*xdBD0ơ䓀g;s!uN>#!lJC:, 3 ;11L[M@l\J:"T('@ flc9D,ąx@J5Oҟrv DIjRe|fӏYlurrl?gH4 3,;Y\!JA-=,s>&,y#]L'$@NADc;X j$b!0\a0^hUk>zCJg |TEW'U!$kT]$śWؚ,w{opM4fKpQek0kX b{m^8<~}xޖJ:aZQnpP:1l:NWޖGzAr:ٷn t| 0  Aq(IXpңqũq³3՚̐j%m9Ʋ%m{jƮE¦PvzAt&dCƎ"y&y$OCCN6vlMEۦ˒0)8Ϥ:ҝBЯRJG vZH4n*Rs^ð:xtVRު >m)Zc۱v27[J\Ƴd)&v]5o}qu vC g[b`걲&>u1t-MY (JRf83jё(Vզ–Y3el/lB7,vrڴblk6j/@/q1Szw =]e+uQs^9`n*T*F 阷p[|,3 o0<ׅ (93A4ң[K!RRYH(z! :/)%GP8Ӡ-1㗩d43Ǻ`~޸&tWail?pdbxi+Ms IPVj'Iz;:}Ulj&)7jꄬxlJHG|14Tl Wa!&ʞ(Ǽuw,@uZq5r@ZH82 2T0z}j( #"}wO~>1_).j]T_'S1duذ3φ)˼jƺƟHfI>cU? # V9I_*f VZd8)=S[R[v%^B @+::yp,>M/\md!k0WukKw ݞ7iNaK^q$}u5th\ f4:;9@೟vSFHAjK~b3rRă0tH&S̖[JqsQ\oC@ۿ7= sZ k{.0Yd}ئ"رmI`?Vfq)<},q<"mJX  2؞opKK ^Xa/<C*'Q^0u/TClGܦ?75ȃQSjH dZp-ʌ-# "K4q9緕eC2|cDj>zb+t=%6g}EI+e_re f ͫ9fڪA7I+L+#)V$w*3{"vYF֭6RJL&B6u3f,sL7CP%!Aʪ 9I}̚j+H@zD$NЁaZw4z5X(U?A=X4ܫHVBc:m;vARr054OY Z_A¿.lcY*wO}݂<s³^b {(}>wPtXpM|V_~AR0t[y>0oۇǭ=m'a5:ĻcL=WvLqi.ҙ%Rwq@,h=(rc&RgCAw2[A~qPjjԜ Pj4Ej`=+{Q""P`qYȡje &Q-a]3ؾ51CG\aF2%]?P_͘UcH8 ʺ6b]}ːtnE-sDIf >qu$WZ[QGqn9 y*Ru-2%O>F`!("%bɒ"'/tl*JǷաo&~x8[FB+cWSpeUA|nىYv}Ȥ).OʤWFȷZ.F'VRBݷ|!N>t/¤;-)I$ IyZѢI7#,-=vtAv`<Cy$髶w %" 0R%8CjCI]*a" gKAk hBZNF3h]4Y-gHR`=DWDB(_rR@-~-L/206 B4F~/0GCCG颃bq*dqܰ풌'i/׹+2O ڢUxBndM`9McD@ejƚTE 9)vDt*b_PYtLFe1vVp͜ƧaZw<٭Y97H-.T^CR\9h.RZ ˠArU6$$IB\߻3nCl|De@{zlG .LYJbKAɊTQ(0w׹?61T"/;lm\^a$E0^J%7k6VIPI]Y1{bM D°* PS$ܞp>G7/nfFX3 mZ'V̱ؔ%ˮfQR~0z -\0[`ğ*K"wUa"7AvOc0#w:h+#ܝ<Ywaa;TX+9H]tyfp4(5 nσ殭W7ķKX/#+7˟QtEV1WRnWz쾍U})QX8R,:\ vl+$W 6*0pmT~ 3ɍ`:$*Ĭ!~{gz3!dJ~"-Uo꿐P)ɶ3{"w褹L-lbjR^ksршѐ9qc@Z(nRaId|e?ej*=VP8g C2Z:\iF#q@tUJŃ1`<5yu$TW`Y 39`쩲N5"C,8\WZ7ceR$\ZA/qv"Yo0G$fx _HS˸fŕ-Qrd#-#@Sb"krp=4bl FVs&-!t?LEQjo@9:$.j 'xϪ"r&ւOǓROK%ܽӺw"}(Kje˰YBZvXNY"zJQc u@)WkW"&kkO_?G%f%w6 enՂi_>,젠輩'Y k–zeoE-j{u&jisf':x;t2zvʗ}QPaK44*}3r8V,ܥ5dܮ \ghHAv+DBN:(SM.:V!j  R廊2О#0_<¸&<2Geh1ƠbCQ:{g>m:)jG"nbW´,L-@"C-O= !eU7O wwTIąIh${-bLmd_ DUJy0C&DrNukKDoUTh$ѤnHYh6J#V't( }bY^X#R yDĶRtuHx k!=2³x(&l6#RzB jm u§8[S+b0DG~h3pvyS4[Iԝ]o3Jz TZ)!TP˞jhYdb~sSΟmRSb˶$_j?ZYB^rp9Φ&p:J^QF@k*hxLb>S8UHl SD |co/FA-V%ľ,n}27"W;hsKspO0@ׅukfrY|).%m:`@If)][$$aKx46){B|5t,mNuwrms.Tiy1>Od0u3rv~S)f7@ 8:$30~90>j;p ju5,VA7ȵ*2NC4"{nSQZk#B-)㬇COŦD`w u3%>a(խ9ׂ-'E{7> <OuRUݭ4ٕ#7dHrOi@&sSh bn%w\ђa œY'NZCEB-3H'o (,&oӞyE_.FXj@om@Ǻ߲Van\V(!6rÔΉ"6cD̥TmIJ>p0c -cCT8?䀗-K 2ѭr_T$3S`)m:{N\pzE)Ǩ&DT5\NS.%2#h֥K8`\֌;{7/8d:DvM߷iOPK>̗Ks ںw.BqqϖE'gH怡} y)"97=$ :;.G:_)HlA0iQud(d7ȆĊ'lRvjL{iΑӓt0ZU,"HiaE(r@3vgY|4rT _rc+'| R^@m, #Ѻ"5վO`)8D*$~3r<\ RMw[20^2JH4˕=&^D`Fp: r` ڽ.߉5a]?͏oÃmw `vN[ѱevK/z~2TEHu1=4`zx|R2y3Bfpj1a1P([eƕs[1Y #E׳Iϟ6 !xɶd_>pl> jt"ڶ\yxkM=GZd4QiZT<ׇUKd(JfQ88doc2rْv%`t-۔'ʑj'ʗ| E@O$ i PqGDRC1hg/t\F}DڄeܜN$V'?:v]~?17O5u5iLpj?K_Yq|ȢfH[!LR"$b7`o7h]`ڟIK*Y#',oB؊1p]{S ]͏ƽ#a)tF1|v'G.Et}| v\=ጇbO +$!/}v\^2p4:0!:pEP*ۮX[Jލ),V |pxZ5~p3JjOf # 7Z\Q /F8GSQE]+%IK֜i)K:Zg^!L#q:wDS ,+!%;S 'ꉌk@j62Ƴ)Cjζr㨠N<.=B+IĘg+#rHW44! VcE_PgU]=VkB!(/T],'ht*BMH(E/wpg&֕on;4&F+ 3#d=N92dXQ jQ4r{7ڳ+qic=.qO[ztn|oy6%?7c re3^2M#%ġnAWxSXqȷ2Sƥ#j*ALj40`ST=zd:e|A=2#n~W'TmwoiܘΛvn!D[ !{\ {l=ccc)m4va<3~+5ޠb1 EՏ9+يπBQ1*小ѯM{vPzy7E4+ZcM\ݤ!a2hr/2w1lIH($֡5D"β*,5h1n͸-R$`qDa`1 سـ%7ׇ'Ǫ~ Fm$ K$lѷ'uP{~ U/{_`nnÖ:nn[utnhP/ m]rʸfvz43Қ< XKFǿ҃Z,L$ _`%]9zes[n<?b`:SXH5x,C`ز0pxu? 8#+X4V,d6*DO"BdNQ𞍑ij1D6`+XoNhX#qQ] q6O)ꞻz AaoŚWْiW㼛3Z=mo&:/0t:fHl2+Л8Hb~0 uj*݂=3Ad C\z`I `tG1W><5OVl"B͈Jq42ARvрAi5q$퓗qC:<ܡeo7Z?ko6-IA٩ש{hJݤ%l7Z# whp ;/4FEy݀-\^Z:.GVo.]bĒƫv bCoF6;n !wesvW5wU}&_<>|ۯeE1!D`5$2si0k{N_ud LHyo6S[++BDqa0IW 5r {wǿOUzv_j*KoP]oެQ/*=VN>ݱb, nJPgvGy*e-6 6| '}K_Pۆ5ݗ&uŸq@ j]3*n'm<4];*Z'}<'5yiWa'OhUn|G;C~J;a/Y}1li'8Uj)S.AKKzCPJ@5h#~P2pҰ+X_wki{k|>gO/{(>b}lgBsۨٮ Ytʛk# szɕ\(},8kO<SoJj5@Wʅ!6Lڸ`Wosek8|@cwPP KO:aAT+ߔp0P3ⳫQyt 8"VyuCSt>럫yNT7TmXN&i7sLҮS2,r#.! uUm:tUmxmU,_m0}},ֿ֞{r*>nom[0T|[XSl<ʫV{=߻t}>kO9oBbA?viK'ͽc߶t5pkv6* 9 Y:AU bXoB*f˥ Bc+#/ @mz=},8O:PaTi89gQBF E QH s)J`fwG.NlpZUmON1:DVDMVZZz CqhGuVRoԼJsvFkr(ӛ; sݵu97u9OWkmyᣵ2Ѫrғ-Д%y.J< yNzqnp7ݸ_1^b</|V˚ҒŹsX|o^H^aަ6e h ބ`0oqW30B'X}m+1l-dtvRnHH6 x ,&PXNjt|ev>ʋZa% $p]aG4jwa 1__}6?_S j*',zq d m]غPxH jBfҵ(u 8&XN љ kce8!Y$m ŽC9ݹ [ N gup=;efˈ/CAܘi1VHN051^S;ZT+`V|+?}hm;+ 7>VC3 `PGh.ѽ~_Mi"&̫ zNbпw^0 E.= VDf]Iif):٤G#1= j]˲nNxkX @01F]iĺ' ؐ*o ]-rn@I^ܬ*:N‘x}߶I-6 ?: ba}8ȋ +"si̧a䰺( >β2IDpTi ٽ4TD-%[^]t~k?lsDXh<(!~+r֘A8kTX 1XUu: ce$YTf} s.d]8=bmԷžRӄ vs@ιdWI1\,Uoq|tQd?ʥb/͟2?o _ՓvF$:}'4B4a^P^;e2;J|0p aԡQ1f^s?aVEV;`+Y R*̎?_`lY*mUܫ6@IW1ck]lUVwKҤpd9 zCز9pG22 03$ibQ(b NG e;?Z.ÛwKtd :" toX.Y#pPc wu$qcESI.$A_Sg,-@E:Lԝi˞^ΦlD1s+o,5I1`?Bk0Ge2"BO v aϬ${(0syGMfhuKkUO2˒E]phMOp7?I (|>'ǶؾaވԻYdNob-PTӚL!S(!)F@.`?Рy75)852M';%}3Ø)u>*ƌuub&ҹ3i' A@=-vHUk %vtM2lE1H0Yѓ:6f&VNJqG8Ts(q+MMqDKL$u$#iItA]6CRR07pY|Ot?q<>޳s:n~ ђO#I3L/FMa ʲ\r|L*-<1xm(7R.E [gH *Z( VI 2wSMTJ#GR<$|f5ۓ/rBGOD*7iH*U e#[/V.暐ʈ҅MZ&8D oÍ1πj9Єzw3D9m"G`1P0koJҊ-U'X"lO_ ?M:^}w=Og'z%? _ _x{yy{Ĕ Y>UHEcbFm|?GÇ3;|HlΧ;?},[X܀SH:V>-!r39|b>< ( TCU(pz~S#:oV傠o) 6(vZMXNsT?~_r}XRW{Ak\h>X(8!IHVxTl~:T+|/~vqHFJ?Y~&e`mQ0QEE*ʼ{KYy), 3I _jݤ0)z /qٽp`G/Ǭf6w'c~SPHax G@U' j`;.R($õ\nfV-U 9!*P Dt6)QymZ˕햭\SRS-Դ T|1ng-Y`w+ HJiRdKUZ =} Xх/o)d7 ;iZR@pfw \oπ `ƀ/;@轘p@a0!8=s `(Տ?6w =ktݳF=kt'UXh7>PƳBLxoŖtT"Ctp'bM]C{NFY*ypcn}A;uڔ.;-U\-~8|'xj۷xQb2|`Mg2,)2WnEISnspp{cmݘmyB"x $i3 R H%ߐfD`ACqː WkXH}%z":Skzmj]g"<  o2GH02?=yv|XVz%3,*3;ׁw1P5X nke<26*$vI;nGs?s?s?T0