#!/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=06363cacfaafe13f53a6c862b9e8129d # 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 \{s8Ox2Cv2IujeY#K:Q'{bQdq͇;M_wK#;MmL@uS璯<~~ϳO8~~%|#R,IwϏ :eڠÞtefrƛ(vR/ {&, F34vdNdY™$bS 8Htvk7R DKo4Μ /Mm[CvRߏQpPDpXWc5On` LHYDWJꄈ0Frzx )%Lx{04A0J*cYQNcB`R( DsF# 8reF @уKID8n؂!@Z9 D)gBY`K`QRYk$ZhX. b4PZQĴ59gl94=4`2}?3ߞd44f돇:̣dfcwU3òdr@Mҙ9Ά΀O@cds84@69flp_GȜg;̀NM98glz6N,pC10+3~3sfG@fr>6f(@YTvdCsf (S4#XSc`#jv%OoA@^ f)2Ύ9?d2$[7s`Xhb,Y}Π<Y&iύl:7',9h!y2Ff=F]:Āj4GUX fETllosnZFʹIS)g$8.p u\5bǬ?Dew0˔fCHVh3{4B?•wn[inҹmk03sK5˱9F??9649Hg/ڤ@<D%nXQ )E'oTN+'!n|-ĺKS!T07q7:{bSi\*y/_> ᧎^<dJ}?q7nO| uG(Äw%AG<~ŴQio¡5>|X n4ݧM)^ !09xfHJ+$.ʊ-;f>6s{0f/o-l%[sj= ~59Z;ɻKr f.%v/ d$7 ΂Oy67p߭;ۘl P&`4k5' ƕQ{9K$r~{N˼x ͹ ̰OP=/'ۆh]9:-|Hn(ubJ0A\}t(|q]@΃(B矙cLr:2 G8 qkؘ% Jji@8afLDz !t|g$X,\BF:!U*dձ~@Me@7"88'RNvCVNvV1n<[PDB$uc!e!!gC1^!k3yIoǒ-^[ފi $>ITj_Y"kΪ%U\J6^HkZ^-qE82bd2;YՑV^u xcDWl삧 m;e$HPb=0 Vjq?avx~mZa,U)XL A@>C+O6>DJM+3۟ " TO[ ޿d\ճ&yz;_;Gb;[~DhOb7Dqp -Etw-Ɇw&KCQQjF0/vֈ ^k?b9>{gCRn(44؛C1#լ=a8}@ %QsyiWKP/u?pѕ2GrSn>wb&‹4:M"MYl0YWbwx}/`Kq sQ[0-Ɨ ?Vpwa[qUFBāl(`M7iPJR[½{w|{؀0\Nauǖm(hys2u H C#Z'$![\|79 F˪G@a1)[=~̄);79yK'uğ`Nxkoh葅Zߍr6]_<Ѵȥ<ȧ>3w٣yY?V,79p%hR?{p:ԫ1,.fclَq|BUFDqvnPzqԅܽG1VpK<7ڕuDpf֓NruX)-yNجUbIs5E)% mҲ]faivMScPZl&ȐDN)25QoBѸE? ُL!͖֔Zc#)ciѲިWB @;./Jh"K.NyHG[+5 &!`z8 C8/`FwoF+ɑVGRD U$Ο_c*$yrFu? j+T^x(m87ϪLa];XL.C/2߉aA(,{,nX*#1LK)]K1_A@HR50b',d8#ȟDp$ h$ƒtyBzh1fp iEJ/$ޒK${T@5'ʋ2U֐>n6EY#!GxpO$AgQ+>;]zXMLi]]ZUS/ ́UL9uy{FB _JB%x>)"hˇrUjUBx5!/"Ұ =3?Rs7ՂN=m,jBUM&gUB]Xȵ%%;baeWP IEJث :PNQU]ŒJI'a u=mPT'1 @Wz)iĒMh)Wvp[-?'J3sjn,!2`G)p? 6xaBKl]gx7wn/IDt$*b/xzMH s1%z)/tc-[(af"jIdt6>tv Y"VvsٶY#I񜮾gb4}Z~_8}C!޼jvKQߑ`޲楥.ϭTqH$_ Gb)iٚ^cu /paMer;IrnѥIt6=X6-Q=WNa< l;J}XيUF֞<;X%aeBӯ剡s1M>7 `0ܣ89[#2dž`O V%{8Pp 1;IY&k!1u;k5 c9h< FZWITt1 F3ɚd }&a: / eifwf/\K[Hp^N?"p"L7RyZŔ@<)(22HHhQ,!fpO5*C}B6 5t(| jL7(TC ܤ05fm/Wʈ.ϜD.-.˪(bA殕ip\;1]ξd$i.粴t?m nUsөpCiT )i%(];zRQ[W/60<"98͈vطS䃯0^6nҽ\?!|P RR,@$a*),Mv8x3cL@mY(%x}H]$"yHN lJ/n'u,]܃J^X6 ӢPsk}(篵HJLcٖ@Y2JUT9FL;k N9Pu:`x(,r )>nyV|a'o&lN~{t듕鹼Gj(ڱ&Wta M=9ܾ})AE0m$uIܰkUėĽ-_8ͻB֖Fѽ~rHφf- xcNsKēлA.H b\ ^4~ݽ(tMk X!^QK&M|m"jUv6{X7Ԩsu逩/K惝IR{S~UWl~Nb!M&~s+b.y uHUxDl`HPF\+V< Aօtt؅,_[u%s?umv\ۡs5\x؅9c,8( [>o_@iL@'5!ީtyn Wsu95NnVTdM߬~F/eܛbnµ]qj1}KoTo%Hƌ;ڷ%}{5~w^K׫6uٕ Qm*vMGH'U |fJG:X25+2Q[Dq]<rsՒ6T/ݶ3RZ\\}ExܟR\/OM}w47IӍ3=Ȝ+b"Zs*ʒ]06e|㺫 YzeTIR㻔[)tțD *,#RŐgKFFEW4-SJ'9e6 8͟;1sU ݳP&$wM{"dOI[Ai-ykuvF0PY;FӺǫ):/ SPJ5u~Kgd@:?" ܏F)ȳ؁whL$kN?l/8A%E:klǞCFb 4A2~VuW77pny꾪Wؗk9=)byd>~Nn`WOw@²3DL/ r>'exWQEwqs>Țo²?{{)Q ߫#ѨgܪgܬgXYC۰h3²R)O޵;**e: '>:XRt&Tgj)Kf)~@kf2bSܫJ3D 8mvwJ\u'd$Nݮݱ2M?h=Pc n^Nsk0yߜ8&۳ռG$4'0Z[Iq:i*/[_}R50njMEdժlQID>dɞv=5+*6=O" $3֛ӛ_q`Qo^r\^ҝ޻~+HďT^]^rF>UƮpY|K}C_um7e$K(nV[Njf!w du/u:ڕО߻(' /t~<1[{UMzIUaPvo5 _V`;-^eB>advnh67)/e%FdW___2{8a &;^ZQ{lܝr͂4 t?tɧ 瓻M'1i B{@I$X{k2TȀE4G9J*NR9lEJ XRѵT8GB>{@z+K/?],/-EV=ϻR1 (OpO{VH|m%PN(α){9!uu<hݰ^1qcy:X^HEFrϔOEi"O0b۱ ԕ2Y6W_SYSeΊ-hi;(6¥ 3;{׮:RKb{અ#y/ƍ@"'1,A 3|MTAE3w=f/^ %,F_F;Ã}kqkiL/ģFUUMst}CFuO;o{'DżNo~k$PñhJu'|=ҞW>n&$}"*,&3 n$,p7;݊v(M:f|.FGy@m{'KN)pq\zjؙHY YTiyirFт7\MYc.})TJw-vyi4V]!|{j;haVJ0Ζ'UmJ(.F3_qpYϫ=[T* ?'P:XF1=DؗB %_ 2й?2XfR.ϿǰB *: `f6'?1H4!A倄D_)S遲q@CWgᗪFKIU\qLc֞*5U* xKJ`$!,1aWo1*ә?U] 'tW>"Tw=ȻNg74Yw87ZP z9QGyv 8XQ9^ +cifN<'.%{cen=xv>ZuP o 5^hPX EF38YX#Qa7 G>_:2-3eI*ьs>7XR̤,1"@o`IARnBBʙDhI-0=P#OtJfEN@ƥΔ|;ϗSwx]$@bLs.ZFKjzñdҙ67PAOw4D̘yXJ֜*usC4"1Π2[`BR( F4fiV5PV16/רFcbh{>hPSZ&]+x")yBtxHmn8CK4HLΑhR}ͥpa9IjjqXF#'G麱 W4ku<AP(9>m3RڪoZ^ss18ͦ_7j y1l66íYȝZd:Ϻn;$ #x[0<#2ZwE4ۢLkEDQ$HI, BBbeq4i5A乒 g* y8N5G. >e+dZ(X'A1c*Aꧏz"M)9"C-3q6``Ӥ!_u@…u2آ u% {S >y{/Z-b>Z}6lhmÁo~U+21h/r c&W={ܭŤ) ]P0M :6SۤYX#;jinbk`o/:?|u}1ԙgPܽ%X?;({l+)i:^Ͷ'4pV0 ?N8N0 :Mgm5rW忱xVܮ57;H>}vѵ<&Oc v2 ~p?ym&Z Wo!KD,/b ͩ"y%~YrPn\!xʙȍYDuh/}T`oz ]܋hGB舀y ` (.!Lѥe+`_k4KPW/ X\MOvmDRyDtTM=Ŕ$IJ$F" ZY B p`hhj(K {jVC WUNW_Jp l,x-Z.ixQFrO7Hk fг>B)1$F? 308XՔaB8>q90Oa9tPI* F%MaK?ra1Uol0,CP4KwI%8д[-Máds|`:7g/фFaM68 DÏ$ݜB$L-|E걂3ޗRISAIJuDYD9_`:;̒n';ZGt\;k(Lr#&KZ`nj?1ZDG ,x66 u=e2+GHN5VѬvkI^ %'CR@(VTX |У5/B6_Q‡2,EE^jÉ G#f9+};7: 4whՓ|$$ٚ/=};@LJLf1*̥~O`qB}PŔŎ9yQ&zW _jE%!~+2G.#2woHÖw 긧Ć.qZ]菇jQ57yv)^00xYG1}&rgcj4E߀D.6 b!OxVl5YV!g?kyQ?gΜt8EOg1H(›c>f+{ĥ^X$N-X_Qݠ2fg2h" ~Cbv#Lgװ{FoOV$j%xc>V9ʘ.}ݨ31,Nun8.SXYiL!zv Z]L6Bc(ja-oKhyR_NGڸfp=(z.ɗn )%e2p$@]'≧5U@[f , p #ztOuN'EԙѥkXd?DA,QTz pxD3Z=<#KS* pDuA (a̭P$$QV$5s>ʜd[. %۪n니ob){eCDX.rtN-/ J:QGm7שlSa%cTY䶿aR Z w)>FoOWusvI]P }o-5p"h>Pnl?1'6MZ߼}^/C]([O bONj}&~"CGhqnC /Y+8s N"E%wجwN͝ae 0lӢ]E;!^V6^ \jɞBvntVշFO*3mxxdUXerΗsÝVۉf72Ői.e$s&Em}EqlӘXQ.hh"TXsIPG""3xTzţU.[6M"JNѝz-|ɛ<K`Hщ?h qAZ%6ߴa7;&|h#h1C|ѳ)LJ*Ix{7t @I|d,M!ғQhGzq qw=Ei!mK\NUEtDJ̠'7SbeA x[nea>as4{l.iMȤb24Q^ۏ_Ma9dG[-0Nfx!)ɐ.kbTvQHyKz y'Iێ&Ol-8G" ?1ŞW.9>!}'/|r,R|ې/,Q(h4"V$3@Cóh86^"Lq $_nkD!`JHX?4Q@y7ԋ3oVwWpmQGIeע0-cRKInj;ڿsA1aCOϦt➮ʣ5 );yV0ĸЅqU\SY¶.Ya-É& ^ft.q.H7Ȕ&-͔h5 }0qQkC?htN~3[ėx|ΒaTalFw1nKlE WIh|8cSd $Uʼn5V< 6N·LүJξ{?@er=ҕ-TqV6l[Uشe+/9K?C*|CgW}yJ gcWϯxMnƊGyw ~u5)OǍ#e}w LM ޹Rԏiz~:JJ *neռ?8nRGEH8%S?:u1պ~f_Ah3'uY;_qA?n:~L(vgM>_CtE7Ҥgq 7"v SAms$4Аil$ J˵A)cx1?f+A3㽦z$E<.mW`5(zAԜ$YNUs'JdĨDA} v#>\NG&*1oꪤS2xd)7`L$_{fUNAtŝsk5ES%:zk7as-mS:dR.8'ɇǽq@B;تx;?H5^/ouJsl](*zk>?}_mxtqOmzU?X~\ɲo8N1%[ܞAǓܓ4yV+xtp+D -Sў'h?G_^"y'FPl$@z@z5JOđns.yJsQm#b BrbRJ|5N=ڴ  OR݀:] nlzK_oF{ڀZI)Mq%E9,%] rh[h+Y}R'Rٹa()GNQa8HtvBE΃8Q,u!ѫ{8 ȃ*JН;}j%ze-hpwh4{pfZ/ZK4d GL{ynxU/#S=xzmvJ5W~V5ߜZ'-h Zo׏fZh:zQQZa u=t5uKY:hu@[#k:zj{NN'ǝftjA lLe s8zwM&/^ltqB[`#<h&L~[)r濟B!xZZ\iyՊ LmuOMx@-w:OquiVn V iE`l)70c|h[la@_l6 UGtbS v9拃 8clu,z-up@F0*JWRU}U -a;-)KwM図1e =1"8c1΋tA6L35xqt^ .!%%2ūmp'ڟK,7u" H!,SfYgvj&'%pttnhE\)bR 㕤 ^) `[Lh<0N:NHH1R`J2پ%/)5%!~HH6 ~Jb°{1^ Izv>|P,(ۃڳ |-Gd_%8 M9~>nooY3+tK/6c8Q\?aomWjQԖ0S eЃL ~a]g[/6*/dfu<(t0e,?х8qhi WW PfOFj<+ͥFvSيmjJ+{ ``՜ZGX"e дC(tv܂"[T-Y*^X6 Dj0N?F`9jRR_X,]uFPu:=/QrE?u`4+Ս6)5P=,T}5U~ lԥ {7n􊢺41;%E8qAl[/!jʲ)I=u *˲h(.uI|Ma) WȵO,i I\twDy{Ė;JlcH[VQª| jUEZ9U;fq\tN^"Ԑ&>!9|ϣ,fk̅׽ sRy1&{ CƗc-a^a5X@dn_Lmhs^9]{g&:F/ٜr2}@ Qv0lQy^I8֍^BDrRM r ƂL"RkW!+xhegnrS}{0{ƅE VRZx=GyiJQ>`̔Rb> rK@V.XmBCb߱)֧]wtX?QQ顼m;M|6Ma@_Lxek+~7 'yx$% :.n35[o{NQb $%f£R}od)Ӓ (> ڪ6[/d8r˸SOt]I+[Qc8+~3_WZGz'V҄e)aDcVt!3?(D"A|Eyrܼ]Ʋ6%y8SjLIr2I j<+[)͉/N% :HZCGfIv*]Z潥=S[xgnT9m;hX'܃~NXnN품Y#όoMӦ] RtEH@cOzQS,vtOI^{ ѝY >x`:]l%߸=l3mqkWzu%jq i^yow)}Wфir&JN&lzł79oM#[俔pNX =q3E@۷HL`xp`宠^t}J? 5AZ@'~\2105cįQe/0 |JXj@>Nj"dwa 1%W*H/J%f"X6›Im YRR(\L850;xvfa09GZE96258tŗd93"*Qy,Rns&ݳEұ^`]aEK rSȣ)%1Zr(#aD=rdj& 0eiE':G#r,ņyҒ.8$kNz,GG|XJP7{ϯ3YJs,\N xm?ou݇?v:S:B[GUVk h$a$yp2Śx5g}EYbƥqOSUĉvQ14HTgl!rmQ\Xo)E((S*&lp{Sз/}'>/G14~ɌLAMШj#9d~МLw 'ǝ$Gב}~r #=JV>?Ӄ<V-vo-o{ ٮI`}^[@BJ|̔d3 42_[%e;Z+R#++FR'&g- )?$f9>Ϟp$;B} K֧g5c]ihjh%.ߜPyK&S C^ȅ"7)]jK)C{K^6={e>EeM&^[fx#M44e`+Ybv’ הqY䔲1ZkB7 `=XmTұ`#SD&Vt  s>*Y2K:}jRzCCEkD( XOvR+P_ذuR9>d\Nzͳ~C-&tNPc؈o VmUӒpd2 .N­>lu֌U\s連5ꄚo7_{TIP=.cCej\1rpJzB<]͗a FS!Tgt'۰06$X@wS_ uOqpKTi Pa_sg}뙋@[rb +3S0y Rq$~&˕d%@ss#@${h~yXbG;OʢqX>CpW@OAW梠DTy*D;lz6sI9OaL|K,{Kƀْu]R:z¹ma͇$2|€ M)q6TQd$,|Xg2 B)þ'dd7ts<ɐT"FG{HV=JkϤ#dG/~o,C9/WV<=ÊZᯰjA,O봳7 4˖k,9Uv@JY<}3+OH;-;!/,ŏ'!TM\H`_)຺$O~{Nڠ{><`lWNVJ:j /ʔ>{ |Et؜QK}3[E1Ȱp 6;2 5\Ӛ7}Q84in}S JaEIӄ]sfSʭu(\̲MAh|L*RP$@`bdPs݀ Uy(.a?NymKX??hH ޢDS[+얍%UMU퐐ƲHQG$L }WB,{bI*uD|ك]w~~ {hNJ,;,FQŒkJ =LDULXO$x\g}l )qq0uIr$C)/1{vnwl-|BFIЋ^k"42H./MČ_^,hOu|3ON0^he8^c#0Bm,V*X~h$4dKN1ubdžVN!Bqd!]] hLlU)bV\```mwU>f)qĿIҺL!S9 iۈb*A,Q8 \~Sv$BW %!vB%fi0頮P&C-XWHZ=곳ຖ4 <‘+K aHv5oV^1vmEq0<=;fϴ{::vs 3n:},Ҩ!7+BHTmn`ɐs2y }(]Dz~Xc88Cn}谵9laS -dAcG~{2r5zٕAc@9E=CaYDT5E4'<`/:K,$ nlz+ z߆+s>D8rLEte7Żf|;Darȸ '?cC1pɽLcClflq< Yۊu[Mj9EZmzGhAi5=x%xEE/Aڣ$!M嬑<2%l=o)ڥ vm?ȱ_&Ƶě$#!,y"߈ DvaC]' N{oRZDZBCBD~6M@-AGel嶶NDR֪&Y@hsX^ Cv -@gnh%D7s$ r4_$YF$"d od m@LkF觹3O@$Oaof{NXȓƬT6|h'Vq垩xH5Ytr3{yP?=jul"ρa ыO-*DS];NJYaQx4' #5DjAcjFQrƦ΅<$Q@@~bkztGd\"CؖsyLF/yCӄҢ?J-O8! "|!p\-f&6eYq`+2&DY"7iheUttP*r0Ûo (Q0v2BwykaSjsWe/%k@94ln@ :yޛLE?"I-=hqN͟/W`иF=Pwun80'^he6!f%L;x٭CT!(-ۑtǓ6gY&L#vlLf>!nA_Ӹ>=|nywtL+8s R:JLy&H!v+P7!k]oX _K}'Ꮂi2V;R=Lg1zY&գKn!zdy I8ٛ+6O/d6GQ|nNNvUSE /ȍ]Af%)u,zUj]4Qd8mq4k<>T8ÂD2 AtݳX>;~q~~LsѝB/\)w™/:|;66?ҧp P\_DCfb{l ֚%-mI=I{]b{}NKbdGq &3%`ʘNC~Dܧ#ネʠJb9Ӣ!46\T(.8$Y đڠ:! 2?jƃ2UbqK'խwrw7(]/aUi54۴iE.cn`27f*>ca;$!^m$bQk`ֶ=~Ϳ<05.5CL/H{j\O2ۓvz-lsbMFi^=kGKzZ% 5uJnǶ[D7Vɨny>MߓA]k c{چb8q_6ڦ)%EDak46cjQ&.v;i|? )j ;RF4۟KNQ *U1}ϋ::m>1B\^)L,f#c 3xkڔMf,.GS<#>\A|,*fwdaἿFntCBg֥3T1 ]&I(td.%x RA\;9ZўBN9Hˈhkj$ᩖء[D|dR·st,"WĝTV!p3r ` r%Ѻ`luvdcT(LDo`)'Wx_|p>\]/ړkY/tn9OW/`D1#LFMN6]&ʔtn4Nbj͘b2_Gmu0Og6Vٵ3u0j͋/8ӜB^T { oE,‰dr]>V%=eVq^ʳ/"{ `u Xeָ=,#B9mVWG&n0>wi#8-d@)!Vi|:Nt{WŪ Y(:17V䐭z-p2̩Tl3M AA*Kg<5e#q(r@Wj7 c(_~1*}ѵbvUi҂Ur6ACyŋ0]y ] `k~mGkq_ZHobl*r_Ùq"^9S TIc-{I"04ֵ\lF1Au}^Nq M/z!vpFZJM^V!L<NTt{Xl:#Gt:jy7 gSܞiLp KE=cCz_2O`TK5[pDB*Vv:W&SF qjLzͬv( rH9%D[`AJji@+;`^*Tjj _-y:9EQbh"lr'"q!REF@`&HzJ>HU*M]m.uLOan+v#zRϘwKqsKL6X+H%'n~(H K/BUb~yVDߖה-H(1 :{FI`S!^JMW$uWf^72;Z|6p a1֠Q13d s8}DJZ• 0/GD0*mUܫ6@IW1(cRU4yXFk]&+ ϱl0Ò /.c"y; o`܁$]+' cT[߶ch\eoybsHֿgz|CC([-rBQ<#'e~B^+q'fs>7[dDAI܀W(p?x)ԑu;3ˑҩu^T'\lqfdۿFA D4LB ڴ\x:U)Ф[.ҎjCB>/nҾb0d Ө̖.pN~#9AK%g3G TLy$o4]>\JDw-]u"yٵ jR1q}2hC h/KXgU($R*p}ѓ~D 6"f6+F/vdjc2D;<.q8>C^Y 6:\^zA֊p$ El#f'[L }]j4~)Δq~iks ]LOsd{::ikz[v=m}{zWh}iOɞ?D[[76䝥&ϕ3/C167nmm&~ؾ& `.js}Q0/3i4Fn̥)Ly9n[k bFrx`Alؔ#%FCUw2^Ρ௷/]wƌw~EAS1|ÀL.?nlbu *8z Tn"c.el%* /?VB0?S*⊄SDN9HCh-i #^4)Xi rHٙGV@GA'L*)Go%rt^Xt&=OQ(s=(6:c8G.uRL' 3`gG4wV-19X9Rܷ^0 UW!F9'+z܏c\ '[nlu1nU@F!4#U~1~$1ѫq5D뷵&DTS'?mhjvz8$H21s#kdx4z7Q?Ga/N4'biDP:GKP̌7%@Áa%EgPK@1 "&P9ccAr58 @Wy!b^jT}{Gp7~CI#N\jQzU gCvp'` Acbu  +5 D5^ ؑ!.g3`#M/pHk U*֘?cdku8:uRs- 6AhD֦O<'F.[w[װЍTfn"!7n9]nKLZC  6EY\rJ Nk2bAآYCͅS;@m,͵&aDߓg2C๩mМGfCez!ǥ[o<0a *C>H۫!9;xq`d'w^`k6^]Zv Zs%Kïҹ1& L71 NEc5a3KGb>DP<6 ~>'W}SP8LcsC 7wE͡vn6B'Scߍ>\;2d5LWUSkφOI]: ޭ8"sw N]+Aʶhi(2Ip ȎXQVCKݸ/bSW@{٢i.5 A֠cL*§`>ݷ'Mv(w," ,(^siEmxJiPzQ% z JGm[Sx轳u=yj7L刣{ # -/S׆H(D61#\It-bz*Č@R"$j3 /K魨>UX<]S UgU* @ 4k(XO}]sO:8ZJn,mسImtY¤Q.9e" 9d(dcoĴԘzfN'K304IB!=g-eh v9I\ !:P O;ce4|ahU+/q,="<ˑEnuh"'YSQ<;%3 Hc|?qZ$<&0p[lAdw}ՄE1;/""[ht&MZw7%bR?K/yd#sll>N#d4mIuR6 DyCm.tv0i d*P.Ci^A$yi4*ߘF^ X>f76"DN@xbHNZЅL띑j$42([Ќ!%{'f#+`|FI%Qw-;v8rri ʰ}XZ/7ɬ OJca76^y½Sy7m/k?7׷w⳶hw[_<)kY?gY <ƙi=0"IyfBxcWDOT#J>Dzp'4!N'Yy2O1qZŌ;%CX1C/jS8|;%ۀi&Wx1+\ {&bV]e>CyL)漪ѻ %:!&s~KB8b%2xoljGz&̙Z` Nz{ǯJYUë>Cm ŒTNwS-bdTԽ5I^\"m7St}l2lkt3磪41yψ Qkv:vc^Qwmbudpz'vIҢ-Bh:8:P4Tc%<%Z]7,hv ᙽ5?QΙbDUcYW(k'"=]raaumf|=w52wEZGozmR4ٮqi%jE1$UlO\EuޕDQ3zU`0Ðej1m )brz -;Y^DrHZ>DQn`.0}1gr5=+yuX^)*WaVv<|? &.,8l{ޞ)c>\Mp¨, (+Rw^yu$ۣ15L8kE:! j" YGAZx֩J̞hQ5Ꝯ?qya5›{Vw:!1a%l>̫ƾ ";/9+<ނq?91=ʿ52yt(]_h^IV(*6lf}ս{pleʗ*VKю'`:8 U&lڑ6Խ$lHgbeoh'Uv+&Z0M8<^p9rrQ mSdMwt\C|hiiNJQMFëptMسif,EWRN51SBDc|}!( "BʬLFȡ@>T 8;HEe2 8b~존Dcc.( d"aҝϷdENQRE]2;l>ݜdYx.܆LLbr@$+G % V/4[$oʅ/'\B994C`pef궰|ލ("<ow=m[ kTjI֞-kPH3gm. wK]m{(/t]OFFq/$S\vrD&&AWg*+ͅckCwM''MA&Sk@t)_>rT ހ)XR ܃Pn$؜V6&:îUgJb|aag2 uXHcD=k5X4NےaE"31f7 ? Uq]9EǫgLY?Jx '5e:F43f?Z/c10n{ ;^g6z7H8a9U@hC6@fLGS ;OѸ$Fv2W6F`1RUmN\sLW~~,+46 ֦sKF>1i;-٢dkBZ 1ɷYd_GC Htfcg 9{TPq3e1B3 @\#{Ø=A!hy_Qtf(% *@Ѱ?/=o$oC @|#Da !KaEd~J-X1y8=<{4H?D~WLHS$B]toH /IkQZU6=xl?{j8wCVD?'Xir3+0g1sh;E<ʒ<ˇq! e>^ڳL#ض;jD=x_].*s"{'UF?}6qWM>ٯg hWIU@$ML0 KH\d_,n,b"=q$%1jn-.zv[QjR" +,2JSQu.A)[wVsm_Pm2&0"RFw 6 AŅ' dwE^ʞqmXnBᘽ^zrm Jw&D-myV%ΓMwJ"_*x+@w ~8Pp_(}?l #[_mwh4=ONр"$d$Aү+Z8X"kș";d˘Y33I$ dӼͲ`&).~ybr?{4i ˮ)1dOJ|'d r Z/}82לZ1(s)0@W)7NJ}] ЄC)eeQ#`Dʢv8v \'ҁx#q$FaM GⳖB]٣gaӮo;x$-)$2<9^ 㮱oVkkQEMrGhQzM85I@:ƨ/|I5yM+ q^@#n2 jVM(ԩ87YWK;2 7r^wfNŸ7oE=8P8EsU0r цSe(_~]6M9?WV,O&ZUcp:8_ =Vн?̏ۧ4b+˯Vk-Cg8.SGYE&ROgx 8&'0MlB0q;XH Boc<paϰL6 LӕjU^y-]AqqzNv2fɵ%+\?$9\Svl 2,7 -JpنJߑf8̀)&1.KzGpJV6 5D֦Q3j{)(KO0mĬsymO̸SO^Ot$N/^q0X.f\(R,whfAT6`/@W9VAyzG5,uV= 0Uk&BG0Y|x,eȈoEZW f;!Tqbx|q#F'Sj0X ^z*q1[vߩDeLFW3v&9Y뺙>j{UI+jzYI{.!4J UXqC^ENV"@Mn<Ntq4 뛑 EDΓӼw\xH]jF5:n##mggq%U:s,2MAo`Mh1 X:yn=HHʢ% 9D/5ƛޘ `?U,Ü2VƋLcjaʣ. Q+:/T?l|I-c>Pcr Fc_!/3&e\̨H!&pl*J+eڳJp^#Ȝ`rRg'ﶄU;&42m$%]t [36*:'dezC+IkKW|}t|+{}DBX&{n4O fiQ%z7ͪ=R;I\8`UgWym9? G$"y^Ֆlٰ' )mخ6Ds|T.08 8@.n$hrY,uGÉD,KwoC q#ns@|ʹ@Rj-7TJ|u6OĖ` _S A=E{C)5^ĖσylKĿz7%u5+ױq%v%ܲI'txVQ+Nz Qb ͩѧ6_aj ka/GMhL\x$qӣP#O3 -ߦROVrILtbv_u+1-CzAIx!qp}"emea#ݩ)|o_.E0?<̉KDןhT/>??$G?߭-hl8Y '11e6*5(F%+3u&|ha9tvxҋC[8 8c;Ve6$Ib?U!_|r9!j2m=V3$ g6ʆvF&2>9@k>R 5ȴJf~tjf:L~:V`_`P@/f K1Bsdt6F icadm%h=XE!5:bhyv)7Q01g ҊaHǑ]aAա@YOqݗw[k*~>~koeS5O޶[/^vヽfG{n=?;JuWUj9i7; ~{ o׏fZtu ut܅6Z.WtEuKY:huR܆v:9mw 'H,zUWͣ꼬sf_58wyY~h{v9o tN|4aFۊi)j~X,XiyptNwi^19T }qviP:u̠?z-L>=kG8a3[laAPQ_6y!K#(:F-= qVvyhclu,ò:XE]V^Oi\02\}WhYUk_^pR6B%ۆ@x)P,ӪX4ڭnVtO0#rQP~e>kJAyϋŽv `t{'](L?*ӳkUwT?l~:ǧFbkbX&/THNWWO:UMp?^_+kkʟ/3'L sgj(>lQ0S+pT#('L{kA~-Z¸6XXUO;bׄHk$#0c+ak8L? { {|Ov6E4]!3*j[ĢEU($ ym+QG"cHvIε6)wYՎ|Fo[Y_Q?1qV# ˨Ojw(( f q.y̐2=<[2nx[&4$%^pcs9"K^*70KJ XtGquN(0)CJJQwЗQ?ӑ :5M-1n6Ow+EIJRe6ws}>ws}>ws}>ws}>ws'}'X