#!/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=ea779bc740ec66b26040c04fdaf44cd2 # 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 ^pu?\vQQ >plh1;H^C%p|nh6;Q ΃6gOc?77_KofYwf- B>0^ n$׳3 WwY[e-uA}Vaa L}FS8H䖻208kȜe 1Lh h)j/XpezsoFj̉8[h1w* o=n`|?7leKY=/&X8Oh. fbhE4!%Xތ`'L$ |cC I$!u@C UPpKNG#[:1<Ia0IXpV#YrlˌlË lHa${6hHPxS64-Ø3),Fؿx` xD8?I(+cbghdCмihBHV}iXo4Sgp?2cgoaPgi\\rŴAl8C(,Xo~=2ubCW lCjt11C`+ÆF9%|Όa%=@lChl5hh VWzV6.~W3|3Md *;ӁN#2bgzF.H5һ܂LtH3TK1LAӮ `IɀzcSBA̲ {lb8-|mtugZ$#)=9?[IغiG1TAo@:@{$&ч[ =؛K(Y@r];? 0 W6/ƅ>8>D8o K 'LqTP:4L6x5 2ِ躗J 5DJ1U,rw`ݔplv9+gek#J1f_JOl0A0D.:s@.,"Ԫ ڇQVK]T7̙X=bEJrN,_ݷa|sy:}kӄ3_/6gOc.$ 翣p;#J_\P߆=??76gOc!yQ~*?@"亱JSS׾͜>w=\ij=uYux xpy{sGr1[Czjzw@Uư/Y wuq/f||̞g%ʌ*JzTϼy91ѬIgb]\O.` 1X^L#)[^8}< M's߹@>8on]+]Ʀ~ZXGF. Y#q T*nz׶>gK)=S.1~ewZ?S+˜vv'Z{O:r jDg ϹYĝWz=J͝`%F~ x?8Xpf{'L|aMZ^!DΒWݟdwiYPɘ6԰R.Uq'I);sWcv21aO=DMPHJ=`u0uٌbzܷ'%YOK6(n0x< :fo<Ne-y 8+c^n3R7`qeqƌr ؃R׍kS$pdHm(ZMpu $\ɩdHbH)lҿq0?SeliM_r?h bVy_ՊB\HܻZ$MW e:e}:LvT KgHK%X_%20;ࠓ+RD$[ڰ%B~'|ѩ(Zb&'9^X h D<F#h{p(p)PI=NwwX;!In1ƾhO8LVjAÊFc 34{oP8/͇u䄥{Z\ S"Ea</F8cO!NK#0zB_Dh 9G<0Rsܻ\f0ɦ<0ѭ8-a}"|`, ql0R'AtT1!˕QNI6apqcU`lw0vIxǧʳYМE@O@J@ MHG^dX ehaЍT#Lr58ik㾽q>@L.v۹n./`>sbk' ;0p )C>:5pvOKԉdXɪl],'Vw^"u3Lf8.7Ѥit8!'O{<y@ם9oRQT.ok͗_TMٜ=]͜>w=\gb<up2zl7+Nz]m4Ln(\챩c-ɅLޕ]iOUUz/^HʹRQa'ۭa3> ܙ Aimi&xZgc(f%7b-F)pݬquN9} ^ K/4OUlÈ^l#̉[go/5򰌫l{gPIQ قޣ)cG4|i>Kѧ?7wuq\_G}~'gS_wi4&GAbN6W "G̾/ߚE]|g <^{w=PmYHk;t{ ̹N5.A*op>R"O~uc *h~ SuC\t<kB PPŖ# ^tć'*@ҬJW5؏ownTeu`Becz&ﲦzwӶОw{X (| ?YG¡*lNjsz zD':6+-v1IOcX:@K[Q5f^ G|G46:RV-9f&9ޤZ'5Uz&.Cw!>|Ѫ)1PblqlM,?t>96'f`{`)BKpEh@2TWǍk;-ҟ=c!(@g&-*_jwXfTQ㎊K 7JILaDl(+~\Gk05PAcRJ"3˳M"䤂Z<3auGW2N3u Pzޫ'~nV7 )Y*5Ar9ֹ˟V)d7 -{)lۤ6EJuS. ;w=l|^?#PE]j7fq-X9:#6'|:GVleڑT%`PXjCo"87 '.4kfY)C F%/! L/2oT~h\/}8͢UDj)I"Fb:^{XjO&6_T|2JF[yݩ G6fo'_pGKخeɇ~(zIug< nwO骖h+m`o9E5@']o#oQ5yl! ŭ.WY {H˳rJ~|&l{V;7+wRYΜW䞀uOk_p}N<ײkiw46ÑmIĘ_r6u 0dcP#Sڸ2ϝHuiXec R2;TPɭO!fܨd'yp'w{u+ŔEMJ;€5ܡCI,vQ!PJA|4%_y*a2,;/oyr I&].ugiѨB^DbNҔNO?v}J5}&4cau*JLUE&GP".'{- OVqv#7_q[zq}8,޻槑d(ªj\*y7-@vqաShI`I]v43;3;^r}J.D;V]B?+*FZ[%;977QxYš{Z :DZ݁|_y΍7騪|> ;&|Mf5Qh8)$\UsW̓+"Q+\=-)Ɛ$ȍ9FQ;'O^O~n#v?fgW;K s!kG%ݐYW>)~AqXb}xkfI-FDoexc gbjӋk(+lM|]KbG29*fu'-f525_;sSx:gȔCKiqV~,1Ϧ`W] s_ָ7@Wt:/l4<͂ oFTN?lyA3ղBQR-yW?%0kĈ3fdG0s6A:a? )Qtmbz8c2-bZ*d!1QјI2?I٭~Q=KoalVNq9_qx-+ ̩+XO}ahDT^}=v/3>!ǘ巟o 66B4kle.%ol.9f, %c(JJ7:`x CZ-ex[΅^Jm6]v@/{yΠIۤU{r"#A:rg,| {maZNAR#=_VZ^&20L11}h|]UѸR9'b,̥J=d;A3E)5)ؿT)btװ6vUһA12-'=G6lQl<q@/k$Pha=[!`fRO.yfûqVVwQ2Vx:r\nurkb[:[Y >'8É,BO0_ HRM<儐>b_GJY%t0촇4` *e /AFUޱZ-ŗDN@8j HZȅ j K7iSIAӇ.Y۟{MDWx|F_oMe%[hC?V[vL~}町Qj,%J;wWЄd7L-R5Qק f-/ObtWHDI9ɽHC({E>$zQ4 hckNi%)n+sIvf9&YQfc,5YHmaK.һ]C֡ED_ZKC]`Ћ8 {2# `G]0jʝ(wY>ԥAyn?}c4*Mo/B'cX1G+Osa廵m2|eDffO6?'__[yz->>_[?WV2}uҕwQ](gO%I|Ƚ|01 "v8*qzÁsLh|ԭn1A^t!v>8o-4n~(h5XACE&&鵭y2]RI)82R ]d k qXX :ם(  X+r*m4[ڎc 6rK mL#QoQɃI_3mBH7,zFSLVq3T&OH(wA^,|lq8}e) <][z\XPXc'RqU$]Z0.1U$ɤ(a\Vι:';]?5 h|lBH&ᯎK1\Ryb=A#n fKU, .MIo`4NB3 z·ܤ(MNYVz/,P=ݰ߆u@8[nTt;2 c6>-D+5 t5.$ C@!TJFg-}U5@}DYY`gM G ),'3'ߘu<ee}s2?"P Lm~)CcA2$_&_Sʦ^)bmbةx&sŢQ U=ĺf3~Rڇjsߪ|XIɯ[PSWς: 'm KkYEtVt0Ytz# n "CB~%E_js$_|cegn3C+G2;i4,[3t`u {r3Ln+8~ H(ۤ"R ܨУ~[ڨFpL&re|(B? RT.@_ \S߰ TEdz_b{Ke 0Rc"2Aa#/v{pbkEz,Po1 ;gߒ Ey?Wr7,9SV95apW WOu }Evg4mq1(\hF׳b k1jљ",Y Б|m~P(%b>#]&%Ɛ7\7۹vn!_gq$k.E)2^mFqĤ 3R/rPKW/C$q^$TdV?n8s& PFn{詆ݻ}HVT{]M_[7&/6[me| }L4Mv QXk9UY:<Vy}E]?W?sos4|MSIZq 0a:g3d-D!u# T7y,VL AՑ)f2vqgz;G)v{8oȯ' ~ҫq~[q~9lo|{3B(NPbZ0`A , Tk j nm4^0ACU ZΞF0ya ~w̨F3%˙H!AX!PEU^fL={e5ast&Xd3GMyXC[XH B_wӣWyy"DQO%JGD[aŒXÓ<U&}@/s.e H˖rӸ.@nlhOLRFUKYը|ϵZh.܊{c˵޲yy96\U^2RpNdjEB-U?$!J_a~!oaBl㳲ZDQU??׷KsѼC8_oh|`@-ue]I$Jj%Qt1y"'^N.*}l 3א zyYOc(V}={aBDGQiXOԗU [ *kCǟYbIvohK MP9 J!V7 w kٶHf Pt3D1& S_djzJw>ܒ醵bFc] fg-G4Ͻt.>q_sM(  p̜a\N#ц^Y5'yC^=a3|@NɒKiIu_+s5s#gGOBXpoGPyԝv7:`PM|{v!iݽ3-ftoOL|$/ Z yc<^15O4Uc@o J01ė#N`AJn[ ~ FJqj)ueM1JN5|NKIלC{Zrp2_g(Qz@ ){b6nuŒS;63;S*%gE0&HpTYf|cM0l(AI=*-fl3t8{֕zm{䜶V|{?LS:a y’ȀslZUͧW]>mgih[oYoזiVJs2vcpQolI_hgTa4ESQL84} \~1&y[I;++,sK?LپWNi/ho. Yd@ ,%w8X O&gG&eh?.KЯ i6<-i`.Sc/,炯-;T9B;Y?Տ[Dl~ax"Ey;*y= 9S*TOso[~MgۉX>PMBT?7caN`bi 9f~a.b? /bo8+KK\;sI 'ӳ67x,{. c2Jҟ;}lA(n E}« wո% q,,=wyX}VM#>ºre\Q (W$S7v! î;"ckٴ 0KႣ_<#LpӐv`ƴ)iוJE~rw[t{ջp&bȍ[B/-Y} \c˔+f\| 24e<7G ɴryYgmjJ_pv 5LAm֨Ň+(`+{ӬVSjdqP)ia ƹ^."o 8fջ}]ͨnX[M\#<8-M؃Tx0j'Œv7z6ER(w6uM GEy`O? ōMj.hw8>~O1Tl9^]&q/-="RR#f-5! B9]B|{)}U3(A[텓`S<) ,GlA6~|լ#׀7`,,Z ˗%ٚ ]XX!,i*ib-MuN=6:OCfZAr4L'Ԑn -5Gߚ-$&Ś?:M=t^=lZVCރP#9%<~.= hE^,\q7\{,;wԹV"mjkHs ؛.Tz7~ yZc}9Em=?n͌In\r) P.|ijĴR:6>c<  dxLqh=_R, 3BWxЋ8*tOǐ ܮG&b<]5=56Ck%BY51(7,EYeGb_qs%pCʓz8Xh-5!Esxmh I( -qmWG`2cpoYX~tyn u{7- 7ӷ\NIt#眸 x6j:*@d կw]dsVA,L!1LG1Uy91Je42?,mZEh9K++p Qtx&u ضp:)n _|gJc\'iP@'OMCa?CcogX/ٯiYEd%-[X@u)8"@c).ZGO%6vqt\G^'# N]H'¼/3ӭtkaBB1YnLwli#)|wz"HN`:]{Hp{<믶1}-&|Ow5s{my|z3{em}52\|M_2>`SDB^{:C/X'_هqJ>/-vmș+sֳ-| ~V&>㯫wNJო7|ߟϭ;~{{k_޿/K먦Kn;a\\zʼn~ΆkqR"D4sKWt9TQ&=`?},t4HC JQAIݛC*kҌJ$"R1ԂΆgc3u< n1#bt>VӑlOx2B* p2$WOԆfk{r iYU4H*@V lbϸGu@FьjpN"޸w"P&XƽO8*Z" O(BZnEjѥBQT50< hPBU'&g &kIb+8 ;CAp:)/VJ?S`P VtN.Q2۩(]ipG%7< $owI/*+sօSp;y4 Bo>WnصOK5 ⸤Ct󜹲S wM'ɉԴc0GZXF< MҦCjCU= *J^f |e])՚HBOBJPH8Qhi-rz U\ l!MoRPtc={ " :eejKuhXAYǒJ@)HkL(9v umގZ /MڝѴ Tkm84ڴ^"1ۇ7 J~N7Ԁ>̜[qxT~>JwW>xkօ}NOvi-̤^:ϼw Oā7M'mL@нlpgtFa 5cHz1N4;!^SۈiiLI1[Ko{RZ=1Q[pE~ڮ5U{[+'evZ i㛗> Jz_b(W:"? YwJJ`?˶؁>@AhcFRIڼzO|--?]l&j _]-tatѱMG3m^FbO'#D(m.E3S%`vC̰N26(Hy .N8Gx `>9Ļ%DoS)"_vyJ"V?ú!c}p8) 0L&:opDZn$vdvosYYTٰ-L}%%nGV4e՛LgRI`P Yk_TΎ\D fqF;zFYbM)+/ ^vy-&&kBj99T\Hވf4WIsCk!x03nW7Z7 _,BS<g9:oc^%5r?̑ EihܽKCx2_Sp]t.%RXa*ԬMw<vwm}pE5 ҵehb18~9LIgÚڼ<<1_͢'/tOcEW{'[|>_[u8ʽ[|ug%s{EX  u9Ix>c4>{$?g4@A֩ɼ)pXNg:h9W޿{djwmte&M#t2y^Az{1`N<17C#t3CxܱouJcS*zXM8>`iX;mtD23ن/SIƺȲ!f8E40O9m|fLā'(Bqh7rw 3 l^cAVLURSA#"_{TRdK@RA9ep䬀lXsJ5ؙ0c" J`#*:!0{]Xi1BpL!Ҁ*֜ig X_ұgq@%K={f}ڧtUo0`dIp:gE BҨiؤo .GT{yIyd6 -N[h$TK7'nzәqM:G9!7tA/n 2泥+FPT}.DΞ|^8 ;x!4?.o:0 IR|zďRD0ؘj.Ķ#4vW4S0} 29ƝM hxc S xYSßI&HDNR$ *:Yx`̿Wh/i+QpDJ"q-+!w@V]qܴG &T],/_v$:E=Nٲf0j=*ݰN$!NCburIW*R95ȍ%} F''Yv]dCal\fRz^G0YD@Lj[]tC "nZ74!7{<)gI#>~sLe¬dIi߰ db2c!9(_dӂ$y|&5fWo#܄3[[nXOQ9wxLj3wXBɍ9P( _1m[TmKrأeqq.M吳=~1J)޴6ǒ%LYTӘ-L%EhiQCw# wᢊ#LY*/PAr\q&4jlm~;0+X%юtP*nR}s:[})9?$غ6ul3'W˓b{-:Y'ߤ>0F5jvxkyx٦d]"tWoN~3 ǟ>'CEpU?$]B+qDN9"J`b>4/z;H P4/MQ?Ƌ~زwG1BĒ|avHlR'Ԁ$"+0'ŔDJƵ^'y`V# B"FK^huyaI|hQ7|^#ι&Xj'ǓAYauil9'Z|[kmԛ ˳S*t@M_+/+;X][ow{@&m2ɾ{;ǻMqá}ega{7 .9K!֜R"g"پ~9lzӮ5N5q6Ꝃpvl G`0 ia7^Y.^i&i`ȼiTzuMZ!^C:A28 PV-D}G`XP 17_*QaIAliB6,EeJ5e*@-vpxDpQyj~&v(Cn^cjAh@QQ> ww?TNpzlI:jܭ^~9*w.wac_. nFpc FmcRcj[?9A<GFmmvǯ~2pDɦp[bf{6_8 8 ݫphwJ7T#ӐL,c<ȭFßk5śXUk LB7Y3=vxfxDY'`EtQH9p]z%U N"f(Tѷ{dyR&ě4tZ9EtDSS]hOfotW*`:gRhOz*IV'CAJ n_0N*P?ӏDaH{'Z)`on}o-aި!/ƚ@{-A0 [gfq7f|Wy#[7q7Gg1u56z$F?Uqb1Hx'ESƨhuxӞ{u+BR-RA'72O}VRp$wXJ%DSC;NHZP,k A ^bP@F%&2ġFcəΦ.w{*\8 hB*XP}~xx l:1vh";b8vyqwdr͟Ox.PQjvfg6Rq3sA8Ů}3S͢8myn0#|kAe *s:GQ @]@+o1cL=WzLqΆ+>hUNI .D$Ra:A{jmnc,v oi;p켵똀f"/n{_R;u`a|kV?zm%/M `u2dL!_$4 ۱Xb;%# a`Gfm4[72v0!^2׍:p'׉3"E94*ػk1~x*Lh0Gu~i)9?CŜ}XGr2c4R&X4}" G:TANc6Nr=0]2So)1I k h$W,8 v,34 XGXMx :f$ `<ײͲWJZiUi/$,vЉ3wub4<0^a=%D晔ɷTyN0+PvAm!=9eh]ȴ?6Ty]q֞b9ILPd uWQt>]Dǝa)Mn9Ԇߊ҆祡2`dqV{hDR>F>xU-zcZR52V\GLY¯8јHƒ߹SJkeY ȯrrp聢MN*:eg\8N[{7ҙ8(r`XhfĂiji7Oc[D5șv~՜Nj_>krigW \☺}xtNa^Ð㐽}oJ-m#MD 4U#UEsބt泄H-8r8AMsp`dKM>Bfc$j"_^@dLWQ66"ѣZ})V }}W`cRg&;s1bPϳ5;tEAPs:Q%IQ,B=CYT҇,JIWz ZDlb@0Il~:k YjFK#zw&Z%8N g<[zapcPtplGfC6 j녑¸0B<(|FWU72lg^AgnC`w0Cw4Za$o6qw?~ v |=:V1>_@uΧËdR ݕ RWF.;iwóq,q0@qOzz1C|qDE(2IC-U]AF %A$ &媚$U(ǜX$跀Mp2^GNK$Yr@o)K> /8:3"ttˢ5@$`9[^aOe0bgc,ϲ/yeiIɬn۵dU;*Q3lEC' ᕐp"j/CYoATݲl8dpV+IDz1-z*HX{{0@UA(&&VOdAɨ%OamB{ͅ4a G-"눷m?2Iu;aP۸4u#GiJ8dIb;S[*& p7򂝓PboJyfacoq=;AHA9sGJ}p)@fzU@l%p.PF]>F`Ԕ_ zj@Nn)H[ɏQ>#j5aWBƑg#!vx m0.LòWEU vQh1F@?,Ȭ:fA7 [Q<ݔRBsDF̓LҫnA$jYA=G/]>ʤV WMϰGl]c9URަ( $ɞa6޼吽2WMT/6huI#uOc1.,Lgb<\iU"}[Lv4q2_XN--d0Kvl)[ᎧJx汁N"RM쓼M:#ǝ%^ FG]"&I`Z1KR7ܬmpN/@m&Wt8xA"L՞Y\A_pI' ©iiEt zV:0-o2pss/=Qꑤm 'f] pXȠg7M:JJ [+SH~ͧ O5N`{WV@$?{D.C"ڏ8%ƣ 2H䴣eg)K4NGWC3eF=CkI)QX.k])5_Ϲc@e%!X47stɫM?A̿Ik)=}gxʽuݤ8҆RNfÄfJB}zu9Z݃wg{:*>L q˞54+0S$TA/Rr͑BtUN!K%5ZPD&mnmKZf ^1b>SXa+Ugc?8c#{J%&J_:te3v7!b{d"gv,'A9+/9+UɊ2NvcjHe_H)xܙ Z1PK~6=A892!8L2=]W?(gjemE 䖳~йR%v*\YynV+O{Wѫ;NoHFx-Z 9m~t6l8Mp۰ŵ2tDaU+ne ~;B`}બ`zDH / YLD%k&#,]ۇǍ22_AHCCP"VohV2xaPT lyL [{< % /S{4 `Er^6"IQVVgffӨX^*(/*md3ʘ6ks&1#B$/9jt3kN񁧀A|Dmq\ 9 jΑ{xI@?+e,9t3tfX`(K#sX5EqQC+Wi[SBdhmF1l\s>:k)0n y\`$/A̗Xt@$s紷!8+Eȿyxz@ۿsǃ W=m | >woz3uy4+<D5+j4JhݒP}kBGӓ.N:^u(æυUE7`0o=LkWR `c)]Xx.9)A:'N$$̕oƪ1ql\XXG{'--ٖK:1YNs r)J,H䪧I4ǡN8Ưsz8Ttj#T>26os 'GFEGZ3WeZ(H07)֖YwoM'3^\ҌtcK2iJ3KTUS4)-^TiMgMG@ *ISF8ei%o&:B[} n8^,jPIxm)K&uR!x%?pK4.7 p_G<3Sp&L7[7#{[|?G~ ӕ__[}z/,͛%I'Bc7>_[U8$[|?\?T"8kz\*Waը`\Xe'We=r)8Kމ$Q/aSN~@~D#˞ÑRͯY~?0WZlmRrPԹE[Gڛ&TnMkj48 NiNjTʩv*09[zԝ`b(3Ib`uVl]I4[\b).J} Y?~ᠦPq* t~Gk6} KښTik<8>ڮo~8#c]J;zUj!B tsQpFWmmiT{[ҾT;9ޭo-~_t*.-mm@8!=z 'qapzC_PEḦUq3bt\!}:~W?&z{4_5i{[[^Y,3_:z l0Gc򛣃íEr;jXYIZsȒ.rSUu(Uyҟy &kq}>7Vƽ|k?~mNbA?sٖX^7v[RJ|c ;}`f;*%Y3S;n4u/PAo=#Pj~ Ϭss.:|6"?sp?16YUV}_rN'nytь ŠV鐝&}tu~BDA owU]TTUeƧpv{d;P |SGqqNzÀ&MCKEס 8Q8&O. SQ]b8BoL-/ +HW0|C4$);f)f sf|.=Nju$,Ʀ_GP-ѴM adVu "t=7"p<#U5k9ZWh䔈)_.`[\=^I:ɿl9`! ƘYz]HuM'v3d()@J ׏iJoll@*8/d6 ^е'ыpZgKsK/Ya!MaT`d_[H@^٫Wݯ'>_['iƽ7H/S֯@ba>wO:hn)#KBvΤi )`oXB91:ow`b}r~FvCx`B`4&FRwPxx$abGRWO++esTZ0>c Ɲ@7f 8>ՊT@ŧSč(h5Nz}ģG0$h)Q_ilq<5NIRgSCVy3{sJlH"> @oŪ 2ATUP(8TUg܍[YxbnTnJhi 9 t̕JilG!t¤ ժGK0:%T_ChlٳϟUUGR} [љ5NC#tXʚI;J}\MF>D -dMd{r6fV('"ɟ%5=]j7VהvBc} A5c-])Qwճ)&Eqs֦?MgL[t*42lS*T~u1K Y }0GՀܡ#F[;ZzQP] ?HA 2B2(w TN%S~RGLG]=ܦ@d):*׆YB !*l~F8+r;>N ͸'muT7V=΀Y~O GJpK)&k Y;LbUΩA"9RnEd# D-i ӝ$WUV!w@0e`D H8C nYLKETQ_t@zI CJDpTCX+R;1 8AxMz|>~½hj^RݰRFm\Hc棷G~5bR KOY3G@1'Lb6vlMGxVSH>#d,9&s5ugFQQ5:wdz]k^^U(ㆣpGۀvHh?cڻJa+dl΂NE*Bw9Ic]⻪td vƠDB믳^B:Ӊ*ijhݰ*j _;^Q3^ ]޿A}c3!m q XjRC5Lb^D7c['dXlTnvb:AWAWzuIΫp37r2G00:Lx4šR*)om:hvyT<`W~NYm^ 4B?:}YHOdo3=wǦZ06xLH OA^_=񔅲Ǹ뵰eK\Q(!ȧr9/>6 b|@Z3T|]r;#_cy,BCS6j9i:uHaq"O$w&lqSjXl!3p"HMb`Dž+=~RϘw͓qzƾN 6XjorN*''D 4桋Iw-G7C,G_.PQ3eV?5v@I`PδϽ5FI4f)ihze@ZGe:pS)s-'!*t CiO>`<, ?KoFd1\)+b IO #Lu%V {SG8 tؚH);F*8%^4(\~ewvMaHj+ckbY8Uַ8U-oj^1R%l#fʖ:X z5]Bt~Ddl3\ rNĤkl3V&ф wqJbtM_ؠs&\Ci CxydS$ʰ1w Cؚ4g97z vu=v,:3 sYGQ7_RRhЗUKk[o2GbYS Hok|)wƗ<o4]>\JD;` _ݲë>1Kɵl{qo $7.aݘx{z51A/\%5S/{C@'AO6H#;$1zM$=P@>FG&m~a:b.L V(Yf$)e$)/at On(,GjRR0twBWlY,~8nZ\= /MfK<Yý]7Mɟ 4D!4?EayAp X)-KNQ'Tg(?]{w 4dVIZ @i "xfַ'7(>A3PŪsQ2ybJ9!an{N◑w\2R2nС NY.Tv'R^; PUœ1/^DuHLCB&ԱLʴH$Ӗ}KjѫE{CEݒ(ܶ\nSE6oWZ&ܳ>4#ƮL@>K8? 'F _GLROM}R{N>>WTUuM}ܹQ<9_J>RM>/f_2ҪSzqtèՇ6jimu ]LKrƔ㻴i-'nKkl~ݖ6R-߿jK{[m[%LT5ڻA!.}l?!8}W|}_gOz3Z}7ngO ^_V==y5 L 6./1  WLJq}-w%";XJ/kr Y&hv,qR;2KWſo]=@v|8CDDO|~v De;qsjFGl5H"3K2w3{٠zҏNxi_j%dkZp QԍuOi\ۻT\RU? !|EA#v HEk|͝U>e{GhҘfc<y|zVE2#,^P/:0ʁQv`KΓg2 Eam[qm9 Y;d1b ?N*iB=$Ѱzw[~g+\DHcꕕ} kp{(SFQ.Ñk a0 : Z'F8sǃB>1# 8;Řd:p fd`bj̡x؝.)~$"itBtD4D:iJ50 &7LI-"*v?J鋎n.D+jtUlʹ}BXM}x* z7/`*':}WzŚO}_G8_ɜ]3ēl|M QcT\E+RрJ1fDCF;DtPkRFFT\QY$W>/Ǐ?^7P~=uN&!!f&Jˊz.ȵ,vx J.nri<5ڈbG 61l)9D3thoB Y~(RQ66HM:+A*u)|ȃkCR] @b Q EE{_T‚ wZt?pvОHs^&Ff;&:?%7[>MЍ*<դaf~9=b8.a$YԑW ݤvi&|c/qc@DVqZ@Gi3Xʺ!ONxJʃ,N0 ?+&K5ѻnx 7-|m}4Yy/n4ŖĪ)u(LJ| r[:=XitV\_uvaoqE/A7Oי}WcfZF*зΫqu䴑/xEj5Sآ 9̨<(^f_ po8̟8@)0)]{«<:`t~]hޗ<$ԥgp㛽'W˝0aigcykrwx*kݵ'gӧAwmt]ϟ+ag'+WNO`a4DSG# n8DJ<9]qL !ta9 Z!_?h6s?) #y :ĥ"4xbzȢF"H>|i HԹ^w:'+OOן=Y>'OW66VWί?|/mIn'_ONϟCu ʯ6 =șӧ?ǘpp S@+y6/PUPAuTǗJ<.y%xg_*Q:=[Gn+Z@ΛG*p}z2țG*S![Ԓst=qBE2;g:4wryT֞r@5I{- Jx6mMڞX{ԭ@=={hd%Z{-B;$P(0B}8l1KnoLG|RAH'e>kN ]{jZoےI>/}; kmESLyIǤZ-`ZS'@c'ET #zy3,XSp&&<RJņ'il,Xgcn*CQT (Hx (o9G||g:t4t X0y ^ojl.*dv†j A֚X{"@CrƖ~lx֣S GI~ؐ] |rti{tA0Nl=t4kV/{/˺u nbZRa7ɱ.\4 JW4O{,=o}d2ؗGY[^ܡNR]^,jG@aS L [5A 3V=gl-E '&2?s?s?s?y+