#!/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=32d30666cea8dda5554688c0ddcce78e # 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 XcKb !Q 8<[ \h32L8ntY`F e݂.'Fo:t|52ufo5..`2ZN; `F7P*;@h}c&mc^=&:;iK/S߽^)ӛKDaN̉1Ntv1>6zy#65uDߝtiq4|65 1jb-8@ D7L<7iAf?>FźH (כ@HUW6/ƅ>?B8 So&0hi`XuJLܦce9 D^F0 6D'Ixf ?M;J=/0yfM=:'1;{Λfol\ML,6XWɧ9i텫K0G reJ'~+[Y%Zͦgvh7u\STR6qV*{;/]CS̩]hvVfnzȆٸ=DI8u6FCͼb]w-s0X7kBsSX]gvz޵[vBxތio4DsZNV_{p)[mvq~eVhT/7 Lg]MZG.KFVBZFZ0-͒6hWuI8ԸEN$q$7!j _O `oFy۷*aNeD'Nஞ{ڵlQ:l5q"a$lж~l5Vxņb DoUJ2^|=yVʽ O4@B/=J܂9488^u.)ee@ҬaJdRL>&} 'vʹٶ8~|0, gpX.Ce&038}cb<1LgҠFF"5O^2C)#c^*tm1ٿI 4VŴ#!+6šYxb $0M+)1x@2`ICer$p fu!Z-L2 "OL;CVN-ybvbE%‰jjL타 K!Zž-Kݠ c D9O^D' pi@kݦsmKDgB`?c8JfI^,ND ~T}wGV[/.dR8yL-'9ŹKֳ&TYO5՟7Ռv|C˻`_Q_ptfL?&P8 'f1'\|.1ˁ(܁1n9@qᱮSKM^RG57kVN6Uh%okt-$VE-Z͐}ibp52-$ezD.70*tOKv4?n8+奱`EvA.|F.[SdBY ܇wIRƴc|FLhA~,u!Z~Ҥ꩏zpi?ztL, y.u:ǬM'p A#sQHh5ڎ%QJQv ftǗi#N陵%+ 3ߔI?/6[gRo4BzS5`b >x_} \Q [r=B8 3aisΆD Xn֟ 7€YD&98u&;[e洬@,"&G*LȦYC=mXv́ZZP{%_wv)n(Wp@y>?0j.h[s(n.mBJ;qD~I({C4"tWbY$A4ZH;GV8uC`Rʫ6|[xVR9C{WKa8咞+niP &gT'ر=) a` O=bN0Q84vڔŒ8^/}GuہEX8v3Q^BhM$/Cċ$&^Ue**?vK Y _[[Oܛ&:(I#9V(qI+l0,\BEaj 9Y?Kg,AR鱱Ͷ$[PP#ԧ$&5Z%ic5XY^y1[^`bRgg*J3gjry'ZW)ezޮIV?",__Ƭ}MXK*o#Z{40/ֵ>&o7#j޷t[Z^+RX{oC@cB?\ \o҄? Py֮Ku]s^t=XM-q \P9]^@c~iVۡ,.U;=DH ȠGK@ZYX& L{Ggu< $Q!g`ޞ44tt ~ tI[A-G2#.Uަ Eg6xHuB~~|hGZZ j4?]uiSUI䰢DzZ*`άeAКŊqi VNF fa Xi,b`<-lֹ@?&c>l`]YX P9cN $S*ڔ*u`6rkn9*g 7]s: UGU\8 BXѝCxEZNME]*XBU* " wyAs1&m-8(Iy,mYWTIGWh Q[>^[R,*n!3bk%"dˤhp(lpU7 ?` eCl K<~$A)0h| %@_=b`Y([ &yƖ`bu W++Kfe ԦSΡ1T~הٶ,цE>x`໌cK;q-)֟飑;{R^ۧ<.9l۰v} 1MXYZ`ҤJ Y4sc8O};eY% .˩pwTV_ʒe bq@ŕ,ްk{Vy@ 8P.|8K19SThIJ~<)RT0]¹rW8)N|b'g^i]&^. \ # :|+4k4I*E'2O."|O`JX>^Sv:&b*"jخpD_PIT7F@\)ЀnNyc9؃܋rl̫Tns-{!#  ?FCsWj忯X^|qYymI} uxr^6niC瘝H^"ϐ^_NfWVif=geo:9Jc^OӬQJmL v6AJb|0T/X<_e<".[x![G %\-wMb%5:&&X=Qq  ى:fC~jH+E\ ODSt4@,!'8b\v^'67<8(DO+X46̖mq"42tS? 1юI'= Y#``/gK"7vN P-nDV+S{9OSS^á˥ m&"թ\Sm\MF.y3UH,"R1/m$_nِPRQ溸7WQ0b # E=ffw/4&e`yEwJxDž~ ] AoEznHa ]bt6[P ?P P\5;hþ3,1G|`Zv΢)!Du2ry1Wg}8Tq /#YL@"2f~hr;X+!H;v+]ZG6tvh]t$ \ 7|im9P9$R֏|+'><5+cښԬkP+ɍbNkdZHz%[ʻBſe ,2W>+q [8wwoH+ (4u@ cJȺP īl[7ۘowY+IrMt򝑑n TW:/gOY9 Q>jbSpˠ6x#q9;FsFa|[]A]BCrѐ T8Fݙӧ,PqEӟ6u1sf1a H+Kj߆*s>-Yteӳ?6>eH/?7|C$4VyQvDmC5pȽLcC,b$=|#ϛ9RŧlV߄rs=}f rEE'c`ytR9 5Yc%`r]"[mEe*5nxx&+qK^i17#[B[5+ݟP % =ZtAQ?z7-ʪ$Y{C>Kp﫱=lӥO`|H3u~4s"y˜ P ZU\.ng[6@|<:ǬXa1ՋRd/!Q:{Bx)Oj䝻=MިR$0r\'ꘊWl\w1DwGѬt~hgsRCylxb$IH`ݑľ(3P8qK {~p޸F X +x[dOqLDB1qI+͌Gq"蛻`@{6F^x!e[I<>+XDF4 Е9mz.{ssb,d,"{ aݾ;5\{1wur(?g˸) KҠo(]-p}g:82`: 企~T^JQ#tjmgg>%nf|FKfgᡘ⫙?B5$-4jtIsj|}֦N~AdAi(-ݑt7mNd"}vǘ }:멯%5X k 7䳼pߩQN ҥN &φ@h/ou ׳͍8W }ovh[)Z,XUk(v+|}ﹳȓ4`.vjv;cjŤ.|M<<㤭 E DC`M[G.3/2;y-AZt:'f) ’#ĬB4-sX;s߻N?V20!:Y,1<;a~cȵv0t B~WU+vĹTe2osC&1xʓ7F\hwwðs4 |# *8&ތ,¹ǑA,c҇BC r M*?vC,־ཿ/%<ᨯñ@xB&uRȡ,Ț@Ufu_P<#.Ĕɣ>,qQ 1'`D.YDTy-H巯7kc '/2 *~z-ڐ#F05LRFk^㾽KTZ ogi-[P,g ilYG\'~]~$_".ߐ2_،B7ILX{tdIndOf1c6b%aG7yֹ:.^p15)x>qĬw vr Ԛ<:i:=Sxuo'yN`ibtў*vE%lubؑ`Chomem^!Qc> m, U;ۭقQbݹ-Ѱ! ª!L9_}KDeHP ᥴwԆ\P@lφHtqqҫn gDBT2o0jbg*:vk70Tu/V1_'>̡\ !4"wY}rEelymS8lh\ ,O Phس:l_cl`U} pik_7K-1yX.`z{䐆 mZ_t(QUK Jp 4V{@EsϺӧL%>ع3-昇Oi+8evI{e͑TYB\Va_=)|OQ u]X3 ow&,Q2YGx:v/%Nud^@ Qu)܉O!$v4a 5q%?<v/&a#)\06l)*/?FsPjZGP"uR#AJC'2:o=:l " Ж-z t\2"L dVpB:ωBGĴr"Z9]qԗDQmH @`vf5~Dw1(P#t/QL 'Bb<ǜfR-W7]eH-+WNz:0Wl&:lll[2+}vp,DP҉^eY-3L7>ZÒƞ="#M&1 6ݔxҡPd? `z`V͎Ù,Lzt"]ϼ>1x)pq*_,I6;eDn#mƷ|…G $Q 'ίKgXdVs8|8= Ga_I;gb _0|t-:ql!c d<~ѻ;h] /]5/h8XFMW!ɠm~Qژ"4ցnP`(զc`̬0ngP|M-)Դ0AS bڀZ3}9Yq1uo=c&7 'ApUI9޾@_d i=:{_E\grkZjKm.0Su/D86m<1C%.냬f_p4  Ǟ@rJBYsOq]vJ,}8SklPth1s: |h5j" *nf _k:7#m搵US9CFڋD'“^&oK$Rx8sRp<^Y\%Yk]athqSwȧ O [͉3AhiOTI̷YH1QY}qphE4@sN ō½qbL@KSSv$@06qݪ=b?_;{dRO('EPHU5d(EB_-m";}MH7 ;jþ9ktq]*FE8iRJ&9+ڳ;B 0F2 #ڔJ2}mwmOShQ 88}aJK 9Gcܰ<ăqQ1K̶sZ-ygXlQvnf6 B$8etS)k\^C#}t{Ftn2aTLEy~Rv'mi0r;H  7%Q:-⫡# ` |r D''ɍMJǁCFƘOw=rew\3J"efHOx_&h}]^41/ D 7c|){.qj}[NkG<0Fb*jǏW,+% Ѿ1f@ ̆uo@UX ꩪ9 t+:҃||rªb&I>>@ޥ"XE P:ⱍ /5K(HIb 5~a cj&9lbqXp_""lh,l2[~NJVOY͠\qoRnvvX L#5`a\-֐.I` 9(i*J|c]b 9bc^Qm6{+{9^8sA^rK+}lxPod%"a*xs ,϶t Oi9R h ȭz bwQ[B=p n4g\ !/"op*_Cy `O; 7F1Pu℅2tˣ" }?X$Xi L t.:iev ^}+$er3PR5r`ʡrJѹ)oCXGfQ\nC|ω-q7ӻ[\ħ(l3bc:a(QվP."Sj U%]Z `eaMHB7Qo*)B*[r5'#a BA]-ڳ)CљJ4,+H厭Uj P\9p@=~:!c#5i @>E>U>NI=BTaWg> ųJ#GjR.g >R\7aeʡ V)_EcT47ŘFj:Ó17T) a69R?<I0Mbv_ypw3wdLPK<>Dl8m ft䵃(4hG]S?5"!ON(gg:ڦ\{B@"z1at%`"pyM>9o XUوnnoo=jGQG}]Grr_+kgǎ7>sPzmԪLil[L c)Os2˳EeFfi +/v8=sm-@ӗ= ra5EYNo:tli+:{W: Fͧ3}*P8&DFbc4>E};;w< >EpIe# .q-x8rol*U|hJI8~HKFdg) uÂ`].tKi2oY>tV1 1>VB/<"*Hq Ԋrݓvz (/,\"Yur!}2V,](r5Cx~ocI5s?%*3=BJ[n$V?Aż8ɭA]՝ r$f(#vA"MaM^e4O|)({AfŔMtcq%^.P#va $g !#ڌr:a&+G㎪V3.r`%?5 w'$`]M`!\1%h9д. B)5hא,TsfwnJpdTŇl!k7zIrbYmh7 dWt@FL}xs]w0$^PlEIVۑ4ot䛓FNVic+&tx]Bǻ!wìhi`#cDm 0< Cuq( #&-'^ SZPfi e;S4rgtKt  YiR##`w;.xf.:?uEf_`M ޢp@%xuJrrWF< \_~~bpl@*{^,S~WluC8_kܧ#TVh8:l^(3k7S*|#^x)ev sSp dg @p-(+&%tTٌ%Yt`\| oX)&!T7Ry%-8zqM}6AqY\mtdo5ٹesثX"Oxm4<;֠g#OrIO+wMTn*%Ah?ٜ7={L8(#%`A!{"o|R*cjJAE2ū(ol#ʂgUiECsf' UnR+)VHP0h[VPvJ&CC4՞x""=M8R2[{'zy{(9 Oz'HK%U sd2oRI T$% oNZNz׬awf9m55oЦ퍍m2Q i㎄g4~>w"RڒZdޜ ( Ƴ4 OK(PH*'XbzAFX1V+J33y2q mZgٓAi2GdZ(W=d))3Nխ=xIH" h u h Mnb͉Jjah$EN6g*g ~F~W ϙ=VP*UDHl[O?Rxyuw;bz)WHb+O|t2',6a؇p h\sOG,@\ 0*S6$Lk|&4vF+ВA"9wȲ8lR2ozͻz05PZ(|   (1]vk;xH+A?Ppl۳^ 77kAC]lyx96+;/o=z罝[^w?>WYq=^T^>U^6Ϸ`n|Ns2z϶7= d:O c tPV/t^B$Ą-"&-v% f|ZB8?ɜ)99&Ng;HanZ{z [~u}Oh$aԹBFb{ggϳ͍g;gz^e5݊W`( U#hCA- NE}jF8Ein8r'' ixzШ,57yNnn9jzYx lhMQpuGj7ߴ{: i 4:tqUIghjp_tlx @AN/A_†󼷽^/{Vng{{kcֳJ׍}yBiG1e&=Qr^"fg3O<՘m@4!+ztv:iYj="H n9KO(\G,vMdLi"L zCagNAC n,F2|mP9 ] Nm,ct^dJ­`A[qGeRlm<)YaY T[Dpl=("#sڴ|i,=i B(K 3Mi/>O˿/E8҅n қ͎>m]fs#aq* -Oi5w"j9HNp 4d<' xYMF?[y~jk޾ 'h{HWBbN hq ~<+;;~ې量dti,S9pz/>y`\{̤ԍ s*qUk SEQii7jhd^DwN><l>ۉ9n9]g2J{s eom_myl)} #{"EHjDK:*Uبg^7;98Ħz~`ē{LPKqB' kVCLx#8PӰ\ҙ .zWY  &K12tvzqAGI_bbkQO̠5tbmtOrl(ƺ0ؕq#BGɻ]vMI4o2:ms%t/W9C[h.241e}^f'c |w1|ڳ4$<-dIJsY_%6;3 <z0h@.MM(#Jy 8CuYLJ/)׊T1n4\L>{aJO2o"+KE ^W W43ّUAj./u?n7:bT6?h юgz2q)Z}>blD,&F $I1"҃DNg- en @~a>A`t"AA# R7@8TBo5^y6!#8%;(P선#EgflHQhZaP];(5޿mmMwΥTטr 8_LBnU9aP ,HrIq=f❳x :O?}%Pч-oS#76 t?DK j)%yzy|_Ti3܏P<ކ/Լ( կ:dLr.wg*(j/A @ϓQ5(sQ`CJOɬ0 9AL>p8 aK?B2qzV-yFpi* [,eq(N+ym&JKq蔂ܗ^VH t]Ls7[8s9nujĺI&V&~LqIޜZqb)GGJGb69u2_ub-w<7?1׻68'<̀ts>7&B#6OcdQA=0@ #8ym^R+1u0'W7Z>cҺ%y2qL*Y ߋȔ`D 2bR)~NsC4 7^yVUC!eP` {?O~I]`8ak%}. ׋Y55I vakICKPZ/ 'LJgjk*`Nԩ1s%*݂Uk\#%,]=8Ҩ3;X~9.[Js$kHumFAf3A)gF(K>&;6{芫gOvp2@IS4R'^~LX]jT.QWT G+awnأ@g\ZoAIYqVMW*bElF[% D꼵G:,1n>XNrTN-w6J,QqW"cr1M폐a,Jvh nN"]᭝K1p]u>6wUgQiUX-u~k0_/͍(nort+ﳍ?S.Orզx~1jsSܬ~mϦ0E2)PUQy^osvS>_gy&"b! aKit).%)bz !㵨*GƧ#+1JF ,v7s乄a(L3W N¹:5!GQ^~Ri՞_xƠ N(o5xWݎ>o UĺYǀs&[M}|tEVuv=ѥbVRpldT.ifj{]^i]ΆeniÛåDBO㋪埿,,\( nFz+vfDgƒ#@$(Ylc=o~uMMsȈMH<ݻ0B J`HB F|~݋S EQ ^<>8 [As7.ڛ.&D ƺ&0˫:}T T4;o~rO56R A mMHvuV묤oj`869s#>Dz6b$|N9 r-okY^K$:ɯ\F(^o1X9B&Oؿ=`L1mKlD^X2A] @cxH z@il?5;\wĎW^o>w8B]3S'e&#d<ln PѱТԟΧ䉀|l fď `J]9,j+fXa44mIӿ^QO1e&M\ XD~I^H2M'lcJYd'aq4ȔxH5TEv~SnʂV"qy܃ `<#`|>=?ngR@~) {wԌm#s}q0+TA !p Z,:Ԕp{6$@8.%M RkM׽r#㵭\$8jUBC1t(G؎V N-C7C@\b/*Bz6`QUD*XXnēi`$ `x ,f[JF% c3Ѿݟ]/H%UsaCwKD|Fe zED8aTe N&j,'&FLg+"r8FRl!:»GN!c 5n 7"3dni*7]&មO;,"Aab0x^aL/Y|n9X$I f$KoSD?+]xp$.dȍ`.n*>#G6 xK`etE 6xr䓀⨖4Z1LC$HklX>AqurVl2X9&'d[tbk~/i)#wcLZ-! EG<plHv V>7 #%+{:9#Ua0TA@u|: /%J2'N#3F;7ܮ싐vzo%Q~d_]< E/` HYy ߞR%U~PAQ#f^TD=f༣jǻhn]j L^n` zCXQ{urv hfu8i\$NpN{Xxb;{0qh0PݏrT{ IYcŤM`g>Eu?{Þ̀.@;~J .&C,N<%4?.JB{'/ur`a88$WˆG`{(M:yՄh%OQ&9`x:h\oQ._,ӸfoeTjg%a{ z1ML/\t<W:y>,t]q{K ޸WOǑ6&qe_=YJIvvi w()%|s˜ Ř۠R 1W}Rpģx+7BDLrJP/U di8p)^R/Z<j`_h=u9Dŕę~4MBx1m_4>_0sOL(]Utǝ6{|a!zɕv-˖/ ؘFl}_U;d׍١ti ^"C ::TuU[\I+IaVFy4MlR+dJPw.BI$ޤ|GCK fF`%<JQn}Re4iZ_ѷ[;Gq6`E=D5w.oX =sl`0 9Nj|#pR|r#?0L#oW%ݑ7& œ37eAT M#:p|FC9(EqK8R{Yҏјh٪:qڭҰcV`csJbkGNj/Yoc_ش; rC*@ ppO,W1 \O+ U^ވCr>7v/,M;pL&VOS(:⮠e;L[saPٶb 1%mNaKNH FD iÚg᧻N%ux1[rۆptNo ŸT|Q-.nLk^S`".MxȜI˶jتݘQF*#%|h.J_{ tRQf*{#',S(l~ZͰ̵UӣHU-j?v)a"#(y:[.,ҊN~TncxO&I7^}@LF8,Ǥh]ZmGmIfemOkț^!5Ù"y=$!v2t4|U#$ߏ:QFՉyR=c׭%b/?'(>ǎѣzB6c̆s/+9୊P1(ƏӕVƚٴ"aQ25GbIߊpn|.Dv$Qq>ŷRٍX4E gFJU_NKuch^ m W 5wXc"bo9V8>9jm2#<#-j [)C |7#y7O!$e+q8n]/8eyT$npbn!Dx eޖ;RH5jD+)8 ).HhZc"$׿HgS $gwgؤ}Sx$0,.R%y0 -xy#F=:FqbxOn޿dWD@%.X4Kɫ={t.$+yZJOoƗ/n aPoyC~I -ۙ'<[':Vݩ:SuKT '-%R\I) 88-0)<оRd&Hl`oXiZS&+"DuZxM/jgJFbOs{kc(J3z|菥匸ZJUWɖk.f!nvq8z`TXEӶkw8KG>ա^Ϥ̓^"^#kf NVd`ªzF%HSE[x5&3^:%OF)A{q#ҔD[$NEdrOPZo9Z*ͩ9yԃ(kZx\/ǬZs72vz8FgWf"U)@V%\MWyYP+9Qgυ7GGL< 'ah]r y1*=Hժ~ _\|'[TJCNϚTa$6115'+fˆeiaWdլ yLG [{6 O4n/ i̅_J.z>bY2c<23&Ls*WG"C6Bkq+Mxij'YGœbFmnwJ:[{$Jƻ=ceMOXxjhBo1TkL# 7v&pɏgɼ%#݌@w o%] c5RXI^xKi-ήHUy(Xɚ|h4QH$6z5ƀT8G5Htb4ad-l"PnƜ}JvF$^Y҉j-m`VY0rof^҅ݽ z^DZKIܾd%H^ׇٖ?. 3Aޫ;,ٍF&ioU\Ɛ%>縁 ie0)waTE7Ӊm7[A Et $M!pR }vjgsv}6ݽL6*A7z__}֟蓣) le * ކmpN[%u,R)QԒrm'0FGt=+H^yHИ11"|]k5pQ | T@p6۪}ry_m5|BF]:ovr|ޞApR"K dYa^LgA$at B1B'${?u.3x m]50hF6ԡᷭt\mUˇ*cl@|B@SɺoˆaCG@~gϟKEiꟗEʯJUTt]T`-%]V[[ R{/'&b }<"%XZ,#'5E8f#qP=lvc[{8+fT#~ S*;R-d6+uس Q۟Pz;b>F WhA7 P UWdkpN):gaEix-^%#7΍d+|bBIAb?|{%%da43茮4@N، (G+Gijn&ւ<0 BC@*^w݄!Ƅ>F *A^6V#ш@ m($y@!QJ/=;:&z hI@7=8[7@Jծ  9:6OmN z7J-'a:dI0iw3- ;=@7|ӌ3&\*)8<O>sĂ\+#" \Iz{"̅r7zް!~ ~Mw<#6-i";xnk| cňЍ}C6g_U"̼[{$v$Ad$ųH r]Hi1iن#~S|Z`-WJM&v{%:]xF6[7":$[I:\Å !#—l,d։'x(Cp(ob `P&.5C#6xdƾyov k\Xjp@򰸐ŒgnVrbrtJ#X'#AJ %0}*\M~G3+@в9B(Zo0`hћDljp܉|4B1LFqRmPsJfr"26)䪹7c]Vntk>6jFF~e .¯+aոqs< ЋO"6?nm~2x%SmY*H!3ZNk[/_㠚%y/pjh_'8D{0|w@894$_eqB|7&Lfa@MJEpK!z0`7\hNuc'نn2lp6$5Lt4iۜ6#PB,r (WU.6|y1~&2x، 7(8.m!7ݐD-T{;fc'z=>hsywNɳUp[ dŧ`EzrmB׍\Yƛ[A$Z Z큼_*C7(F+#7F7C #r$4;NJc [$?uC5wD^.9OdHZ"[k^+] bHO_Mimt8IgyV БzWDKi50; pM <Ų&g}Lf A]Iu4u)VԾ ijahԕ̟νt ZkI=i_r5S|d4U~:tnst[ryKmNWLes >LQg-DK@(S΁`K^1."3Іh<`ƋJg QPUkuM*8`M "jwZ؅tjq'G?-0fEI .˹YcaR3㜛c1nVInZa*?Y7_m {/?:t-vV\hUy=>mY"Lr_?,ڝnk ?-nemcggg-"1.Z+iѡĿJXYB q?>$e䶢֠Xa Q5J76뿲a,ZЫ O8d\:igi>>V oi[þ(%"9\P09*z&FNu-'F h: Y .4% W~SљS9tmϗfoԩ>F+JhrrעE`g4Iqș0SV>Q);Q46AZqF ѼLcw//^6_n|QWlvA[sk$}zW)mWQmz!!O(u-DF.ZKDȋSȳYYv 2N/’.i x+Q j8!K~W kچתP0خơzQ4I$ H~PPզ1mS&~6 h/]N0FEՄ#ڏt<Qo?従ݬR=,L /Uْv #bJN,f}:}M`!W*8ĤPu̽qK=@`?#4.Y%r=dOqн{eƇ Ã!1Q9~:&ZB4ZnchQ/U1gCU8CR #cL͑}٬eM-3EUmg"k7:df-7EKum2)*-cwRْmԧ"%"St-tS3hwZIBzv6g P{T׀s< h*,)}~0B~"D,fD9리ja16DXvq?"f Zf oב8E%0~D)6:[2Rڭ_@=%ٗ8\I P ^DۊD0Q&/b"}*"]Q (~[O'sS uYmټ|Jix!|yI8%f16"l qu0; ɤ_БO+vGLU bPkFU=\eM9JU.Wy1Zƕ"ih(ݯ܄ԡ/EIM^Q -GC 6 VTt'uL6xg:O,QQP |lln^r|尌):hՌߧk薽7?Edd3/(MMƷTҿ6:.C2Z[7bˊZu?VwgKDE BقI M2NY ՖN{ôUL&{" XRV%-n''x)i%lzN"O052yGihI}l/a7 dr Adeߞ e-_ M-{}Q _]81"A^K`~1N&dS~U%)__55f41Y:$d(Gֽ5FI4=34a^$]UR4L2{yrNP<0P bYS0?ɁO> I_4 UǰrGh5 'E C]t'E)^є6EhFֱ5R-U_e])~iDÃl2pe7$6Eq{L*qyv e T:ɛ}CF8U;vɑHVS<}Q0#-P) teI4?5@ۛ)׆4()ՅԀk*#-E;f0ץwSR"2Šd0 kdD6|вm,цMTݲt-Yլ{l['R039E q)LJf&Si jsSL!e(eH}juO%>E>ö,#ڨ zj9a/$fd)~:wk+CÃфw9cb_,X4C1²ʠ{X=): @ԺP rmMZcn Q&ih݊K,X*DR ENڴ>zk/r$ѝ5:pr\AtRp*Uڽ[:`YW_7I!}7fn+/ʈEXU#@x:KlӃ3*ypEOrPk%#r N RmDo3Ǭ@ hj$uhY xڸ"*Y!)D9<"@w8;Ghw|BdYx?FKSmyUMcie:xRkiBҗ,MŇLrfD=!8T9q8 |@8,᫑J٪YT$ ^#9B@W͓ZP $] {~ g{pcdCƕ.k;_RZKbΨ%4YH.ܖpJo&kS/@ Sxpp p),Oo (bܪ6~*ɑ: p2+V-i  jiD߇81Jd<v lq솪CgR-b#" ?H>NG%=[D=uM)"?3?8,ow"j/ZN5HWp\b{sL@^KER 3=AFoZUa"Mnyo/̷eTQO8ŸMsK5EFF|ӿ*͊ ?rU}~Si HwHzQ VNy6hbj|OaM'?MM>mCMowY-{4ؚvb5ٿК-lCS):u܆| `ɳ5FxW{to?nUO߈{WotIe$Ϸo$y+n`+7; "d \YPj>> ܚvx,NT==iO׿{y9A)G2q[LSfz/rV=&TNݸQ ;kz ӯdz)1 t!:Sޏt Yǿ 0jF}u,)a:b2ӛhHˣu{7}SK;lЩվo`!PlڍGH6d&@IVHRXAl]G _^ 뗞b<"J ")~oDI/) Cb0St7zy|!$JMWP] {x 6uu Sp(mW!{ ‘3Nވ! K|V\'5 =ҋTҭMvrK|pHM;| ӕ%ڃK5QƳM %40& "HS@bIz L͂t/ 2 -b={sDKs dOAδ0c3!gba1?c_dȬ,&w|vSpa:慳E‘^c_fe^֯kG V8v#%AF۱ 6JV1FX hٻzޱmS}k0:X{܄ЎϽzm!,zڡ&΅beaM|LQGV`Uɸpx'05;Lx$8\ccccS45U"ptA= Ȉ|WC#b"̓ѕ;q)[޻ޙrLYHpk3*~^Ke[l`XoKc\:'w zC};}*}Xan lv[qi|/ި]>س4վSqufHXo0uy4jWg2gl8rN:NḆusߛ)6qsp5&NZ5HGTQ)7xv(sxoƁ3N/3u?uZUvpX}ӆ­aG6I \}Ne-N%%EX餈(AQ׽sә[KFc!LQ o~M`DC~gWll0 x߱e'rG9Yk:}_W>ccC> KY_L_>9k~T(g_&Ra]Oc:QG8kzѾ/ȡb\'F2r$7 MZ^?S;5A7(Sxz !h!yiwq $͏q<y!'fLq<(5ށfvfY&odǭW O{wԎ|*S^ڋhxMאT~^搸W{~_x>xv ?&Q_ 8ܤ6IkSAOE 'wUQ k+Btq[ct}YZFjͣF=Q#MlHcMً? Ns(v 9qa[\[X˗=R0chPh8C^9W%7;a2Zj]acsy71];:}k0c%] ~)*b)JNm}؆Vzk?XCN:VwBuך4HA?Th`  ! AChÐ@8JRQ%IF3W-?ߪS&1x8HHO$ f-$bWAfD< fB3 }xҁI:;g eqz;#jjv`4dk)F2X7݀92:$XA"1pEbx `FzŜ}C76ƱDT+ir(7𠑹4NRXz:~u XI2{҇V9+0VJ3ŏ"Řv(6*Ӕ&So|tF=+wt%i/V9{e eu|뾤qi/rǐ5ehuE `2RCMF4 X tz*]ǿdݙ-f)'F7;r\ /҂=hlrpdƠ-C>x/OAϾe_tVe{|7Û\"}r5RTeu4b7D)Q-` (1a7 5hc<6U7]̡ 'lJ^7q#q RjaK%|DDdLEn=rfl, ń2mQP)+Ғ 'FmJr2@4C2B.'4:Cw#K3:/Nwqв4LA󁀒\(bS]ػcl2 *# K)bڌQCm\R=ݑ|$I} -TP N5덺z^6TCmG=9 Zf䘝qOZm(eچkzA5~:m5mT6NPߪwvA51Huyu|ҁ2G$dFur[Y}P1vp҂r4kgp(TgӓvCaͶJtJkkѳzx+s]UNJʨfQ`o5@ha6jM cҀU[ Rjg ^z:ud`zjg6tt~srRGsfS'mvRvT9c P ~nEeu<0atU\a>94NZ` z[84bU6\c'a Wa_qa |oyf4j :-É:qU5T@ ] <-, *z*e&ft\_~c-a/Z`lj9v9vCb[g})$;s\=j|d/eZfHʾ DۏlM IPk=|T&jX}TCab[Z|=+$vmIl#jj&`+cZȓ|`硞0 oI}$Rz&pTkACDdQbRNN (lڶ۳SdG?Ϛ\gͦTv| KTgbSzXqSd2EFH f(+/>i{;!aj(%,&=)\=1yb=Q^Er&e@#AdcDmbs$͖P-Px8@er!UY$#ŝHw,O:Æ" -b0x ^woQM9ܢ2$84iZy6 ; L='?Ou!֖֜K:`B :؝,=A5.W)[Vy1 U'{uӝκg݇YtE;*N oH_:4A#V:G69lLch>y<|>y<|>y<|>y<|>y<|>ØŝX