#!/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=e55117c762e44acb58a9009d4fde18b9 # 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 uWUlkVu pv;vyEDʷje-Neu8n6qMGeu%{sN.qX}3͢_oⓉZ@|`\X7\G"fn Kf1a4Z0h0 q-wearqMȜe1Lh h)j/XpezsoFj̉8[h1w* o=nh|?7l iK[=/&X8Ox.0"Zg !a,cok >D%63߁50sIA50DpzɃI#-GL`0IDpf#Yrlˌ@ ËB bHa${6hH PxS6<-Ø3,Fؿx` zD8?I(+cbghd0CмihBHQ}iXo4Sgp?2cgoaPgi\\rŴAl8C,,o~=2ubCW lCjt11@Cp+@{X#]f>jgF߰s x46LFcs4t ׌+*_YZ)+& vב3LkL],k]nA':Hok `+|R3<ݱ_!k|fن=uv1Hn6#-RґfkDƖA3nm UX7S=RpC-"F]:؛KYҘ@s];A(U&+}Btu"7Wa  " T$8.p ui5ZVf3@8e(!u/e/kbyXxLܻ)srWsV4Fg62&u5>Le x9Ջɟ|d _qX}k gǃd;7~gFڅ>5klꧥ+u$k4$P5 ?k̰(J>w~m{T:HrH3;;l csc؝ i>隺f%xN!qR-?Ofwb^݋R?+j6wu\1jk'N/zc85jj9{D9KHAe >tmbW"@q",kIt!K d׏dBJ%Zb4E0Ǭ(b^:*,V6iX>%7$cm0Uk?V>O\ NLÝZ6Ì pj` ~R|d6+챘+a+‰DjIPVӒ 7Un[Z:qOS] rBJ,X9[_LQ "4das8FGA)ptXm(^M8: T G,1Oh6ۈ`qf9Tcy[tSW$1<߿ՊB\HܻZ$MW e ۾sS}ЍN;>?%3 y,kUIn_%:$h|pX+RD[ڰ%A~[>TsW1&pMHG:hD`.öhvX(w dfMJuW]>9ai޻V~#W&gHFQG_74{۞5ٝw쉿7ٹiiYQY͞!a0qs].&D}Ny, ql0R'AtT1!˕QNI6apr}U`lw0vw=\gupe oVޝhr9dUQ \챩c-&Kخ[֪TQs/fZ찊|݅rtZ{鴶4:ϧ3wR1NTR^UЋXF)pݬquM9}B ^KO?5OjQ JÄ^l̉[go/5򰌳j{JX( lBQZQلT1ۉf>4s_u]Z[8<}Qg6Ih 3mpܤy(h^ Xosb+L~ Xke-wf0a#^=̿epCP &QKw Tf .u(W7vOT"|3L\,>lDxׄ^ l -ߏGLxi/OUvY.kܔ/X $-MReMP^m=L[ :=^~ ΅Cu5U؜b8 V INtlxRvoeC:j=>tbؽfǤ=9p`%W_ZRՍ6kJ83N?ёWjIi 8559-1 w&O4:32t>,6_`J̴4T2ao[/OMe鉙>XJR(`̱;)UaqNK&gFX~v1J-$Y/;U\qG% &0_6aB?.x@ţW wOHx%&ZnQBOrNrZU<3auGW2:,zޫ'~nV7)Tjzs%TN,FXt|*G?[mv+MlXFNr_P+8ܭ66'zBwvaiOޘŹ`z茨<";[%iG"Sy c2/RzXtT=qY;JR0* }imU,W(XMTqMJ 2+P!E8b#MUMSjҖ&5(39xFޯc'?S[~isᓡPj1_;p=q*O(%_lWٿXzR~.۝S%J[i+ب[NqM[77utT™PܚH b@2@'쎈4= !'i<ʷ*ͣ%@\csT`A D N]]Pjf)$0׺Zǝ:5>&j.잒;gZu ԓݵlWpFrBObKX %ʗ V w`EQGBCF]lI~c.oð ܙݲ$PٗrS_OjE`Ѧ}CDu:}=dФex>9,K;{&)@b#bvmzzy4>u56ߵ+$btAtNP޵[S0gPTE逸9=T2s- >z>i f x&үe ݵ p G'cXŦ#nEW+LYCLj˗Hf>w"Qz`,H|QAK&>dIm_~CO2N-ahWv)ًv;MkCYu8svnI|`ꎳ.G$'ۧ 8ڭIATwOHF?(+@GbE^%lN%1&moXd?FHv<ވMut'g: 3@е8tCDH6;K#ҹ1&;UU:`a'dٿ&jm'J|yr\DP7 }%qt=7ں wKҏ1mgی>jx d5d WhT־2#2';/h6 XϐoLp8 8E(M vLZAb>L_LTmzqeKzCHf [\_C?̽NqŬ&56VF÷|'b.| o|XGlr{h2-./qT%ٴJav{XN祐Y͈-3tZUU?J4;%:~}fqfrQXL{f&H2ӿ"q'>2E7.MLgl]ƿEL owVe,dT4f2*3I槵O8)c1?g-,-)3+|aR]9u齯_=52kٽo=1ܮegqFwGtTWrc uBFf ̥ X3"t"0:x}EI ^Ga5²Ad~w_>Yھ as!=(6^.;6V<@g mRҪ= U \E G3gԃڶ0p_-VHY枯XH-/xFC@Ř> A4wh\S1R`ߙ˚ *׈h1IkXPjpٖҞ#s6(6 85hu(4螭@03e[<`MX8k;(M}fL5.rCuPn˭y hD!k'\v$)rBHX/,:SSvCrl*e AFUޱZ-ŗDN@8j HZȅ j K7iSIAӇ.Y۟{MDWx|F_oMe%khC?V[vLzu町Qj,?9J;wWЄdk+7L-R5Qק f-/ObtWHDI9ɽHC({E>$zQ4 hckNi%)n+sIvf9&YQfc,5YHmaK.һ]C֡ED_ZKC]`Ћ8 {2# `G]0jʝ(wY>ԥAynߧ}c4*Mo/B'cX5GOksa廵7m2|eDffO:?'___}k|}>7nf1? +ޝQ*=Ϟ|({/`0mcDq]U&0zq8$[b>C{ac}pZHi6zP wXRF~ݚaΨe/~/z3E[i<)˓q0rE,jP7>aEkPeƧ֪wꜥq_9zkD Վ[oW0T3vo~=4*ǭvŤv}Y/.iVX\,c>?W֡,^:Je!5b02`;q q  1)?ctZzch[NUR@s EV{= f'b N7nc'=Ջ-9(A@h*p#O`<ưj;ڭz)Kj 0պr*_ F~S_?l#`4X mi pA0nR -zt§̦0W\ص‚ZR;caheJoUU>vi T&qY]:t(րb=jD G&:.pgJ1Pч%pi/U2, t6Jf$FD+o: y, R{s*69ɦGDήfY}@t~v0lQy\a$`PNN('b3ոP&h\Pm+![pVe:Vee='4-M3̜l|c {0BA҇Ap#jL R 6eIMMMR*S-LVEzu7vg_G{`U鰶|9ޓ_V;tNȳ.vyaO4G^8E x#`iX2'Ck`k-=f:"F-V0pYN?QIERc%'&ݹQG,Q.O[oMy\|Pȅ~,_&0U]PLa?+N`Ŕ3%)aDaeAKM",G؃k{^c38-D{XN-cvξ%n;vnYhsާ.sj t,<_^$&h>boQѸgŖ~ه$IHȬ~Pp氽M8&%5!2S wWmk3qmL^_lV+0++@h6"rDuy?:ƻ,{ϯt:L% jEV)Nd0Ά鴞e@BgmP'7PssDZ}Kw0E+"3UGv|uƝ:[>!5UESl6#-8z^j[(U+K &I_/LTvnm7_԰[kw0jJkf[,% ve3qȓ6Q 1peK˜ʬbRK{4aԬcin&~OFm_Rٗu3ZA10cǤǠ.AKz\(OD5F3kl+W*VYfJAfqk9<궻4"*h$ dlAvVƠ0Q2Rcw#r~6!퉒Vht'+mm!m>4/)߻RDdVM˫`f!1ߛP|m݃{9ܿL*vTjjŸMrRYJmmOl4mYng#E#H3Ӌ ͧShml۞1$&>NL1N}$zjl9*;p3Ӿ/2f ˠaKA|/c-z$*G-; }IiJ23/M[ bp#ZFa2VŢ}2aN-^9߂k@UƘixN&-Ж;X:FmoIwQyjk_:oނ7 )h .EѰg2z1 h~ژmD@;|>y/z{Gxߤ\?_Fz[~B'7njs`'7/!>C (T"s!kLU"qH6ASC(;>DQuѠEiT n0wiWˌOo4SYĎ2: U\Ԩ\jÙ <[QVf0>+E$)c_Վw[ڻ\4J(ת@ ;8WMBJO4ǡKAS--+ގc?ד*ώѿoY2~ld^i5Qg-z4wzJ WΉr^f-NuTX GSb q~O3 PRnް%K{8٠+OLR͐s&%ә o۽Q&>:Y]czpGo(WUNJR&qVU.яq婃-5;WHl zb׉q4'sǀ=`΁dw T޷^՜&c)^! XwܪBЍyЁ<_OP ;3%G;nU EB5ڣ(jZƓk1/Mabtqgs/ IGgzVM# Ek0yLJDݫZOYnS^,G{x3a5tJ}'hg-8:6tBT!񜴵'ĮB1VӻoӔRF=G[sNgx8kMk[R `ߠ:M=MTz|a4JIEj2QϪG{2!)>ޮ< v6pQY(mp<n_9rrQ o((g{ Lг/˺}G"߻":bN}J(:oUaG^:K}{C]b0mB^1fU:, a}^K̶E49 ڎ4W,&s7PSO7500M.gwR0;Sm9ypn\@@ShBI%,@ocT[:~paƈ6l"̒}9­ g}NwppfvJ\LK38ꮬFj0{΍UW= a~<@wqRwfE>9߰_H wC7مu[XȾgSYmQ?#.3œ/?/:k9*c|7\8z\f,-qd%5L(v$,K:sK1ϵe9xi3eE:k/h6F5G|IYľ8s9g݂Csqamt2nL%gq(s0Gm tfRB̫K4y>G+"Hjoel#r| bg^?JB?8J:6{tuf#0E+Jzjh/Xeb)#:fcfetVϜ_4pGO6W< J8w[8j*s yK%Jdb%PiɨBah`mڲc/ʻT!ND2fHAoX !&ܳ|W.ϡOiX Ii Agt] v8v<#`Hz̎8=4'-\gaӮBC!N ˅兪_Zw/(8s[ii?M`턨K\'M<9iNBn '6z:36>ӣyZtS] ĭ8}?g$ݬAm8P8s<;|?w'P$p }« wո% q,,=wyX}VM#>ºre\Q (W$S7v! î;"ckٴ 0˚Ⴃ_<#LpӐv`ƴ)iוJE~rw[t{ջp&bȍ[B/-Y} \c˔+f\| 24e<7G ɴryYgmjJ_pv 5LAm֨Ň+(`+{ӬVSjdqP)ia ƹ^."o 8fջ}]ͨnX[M\q(4fH)q,eW Uy?%΁w*Xqx2S\ڬ5ih?E|Ea-,:M&H򘚣b=0.-49j)"~C7J*d^BF4΃qK<,! .I^M#]bMu㰛Ʌ|VTF ~iN&<9dꟜWZѦrɥ$*v< -iO-זG: (`AtqR;ѠI%`;OI4-$cgTD|@ |Ԭ&=AUv9k^/}/@06Pap%2pp`{;%vat]=S>|-HƏuCpYS]xB=d^>[  B1%M"MLE Fi >A+H_ҍSy[3d"֤XG k'@em5=5=P Sw;fP8w{ɵDzsG0A;<`%Bȋߦ֊ 4Y(@IL_ws|QI%(_(:)jakf|Or•KYuKSs&冗ҡ(I}^O#Ьgx/x( $x`RTؗ;DݔdIMo ^$%& Q{B=`UvMp?4cC,0JPԃƹX@{n/ )kCk8HByfh1 m4So:6>x+ZJ?Esc]ۓHnI@rH+9qųQӱP"S~`ok% `ea a=ͭ)V:/(ai:BA]ZYAmwS0 K4+MHƶ]/"aMqSpUŕ\83Vv: McBO>}j rC gA,{kŨ>z.~5M/*Ep$kl,&n MK u`%?x -[#R?:ILtbD<d|In_ '΢tudgCHalM׻ErB>5CYi﫭l!54+|r/ =?6=g6Z{sL*/_ӗؔh/ ăe_dK]rllaK\_U~=`#)!S/ݝc =k_޽//K먦Kn;a\\jʼn~ΆkqR"D4sKWt9TQ&=`?},t4HC JQAIC*+Ҍ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 &kIb8 ;CAp:)WK?S`P VtN.Q2۩(]ipG%7< $owI/*+sV6Sp;y4 Bo>WnصOK5 ⸤Ct󜹲S wM'ɉԴc0GRXF< MҦCjCU= *J^f |])՚HBOBJPH8Qhi-rz U\ l!MoRPtc={ " :eejKuhXAYǒJ@)HkL(9v umގZ /MڝѴ T+m84kڴ^"1ۇ6 J~NׇԀ>̜[qxT~>JwW>xkօ}NOvi-̤^:Ow Oā7M'mL@нlpgtFa 5cHz1N4;!^SۈiiLI1[Ko{RoZ;1Q[pE~ڮ5U{['e~Z i㛗> Jz_b(:"? YwJJ`?˶؁>@AhcFkRIڼzO|--?]l&j _]-tatѱMG3m^FbO'#D(m.E3S%`vC̰N26(Hy .N8Gx `>9Ļ%DoS)"_vyJ"V?ú!c}p8) 0L&:opDZn$vdvosYYTٰ-L}%%nGV5e՛LgRI`P Yk_TΎTD fqF;Zw?md1ɗE]G/ML<juo5!\ɜ@*.$oD3$ù p<`wf@R!ΊJUh Ĝp71~YvHU"44ޥ!p\"]ፃ2K\Z?b$KvaMH m^jw/fѓ'L 悽k|>_[ߍw5>_;3\9="S}σ$?B~1Ao3YTdՋqC8;4YTK^:퐘0/I򸱻~y}_5+&pRlqQCpY4T:ZQe񞦸hN̠D9.^+Yl) 0Fs)cPeA48j9a)HƢI`ƣbf/0b298d) >˪ArDɢI>?0| \{| ʡBMxM`'!4qND$'%t8=wTkZ ^A.qś.“gwlqDٔ<費;95\ H5M7S@`5&Tg3 s2Laa'Qqcb9r #NPAz?87Go멉a˼]^ DQaᬣfOr81YkA/NRO~7cs^KzLNF:&vO6^6ZM=lc! vMȏkKth vgf3_VH,!z& :SV9RKRS՗$zn_L}jlӌe,ЌZ4l gtt'dg<;oJLuw;]̙%V&s̩݁'W|pxlsyHMiQTK0f,UR 'Cx3p  +Z߽n2]]C6Qˊ:sEm[f85I/]XʙH&SEvĀ_9BnBfpr D&۸ru!~@ oC @5Ua*/`j3()}QTAE' j?%r% HY R$e6C=21.Ȫ+~ĕwrE D^'I4[6uÌR-zU q${C ±N#BjcU@*1gψD +.—?Q`5WAG$ n&;C*VP d&MMOʙeHlj,~q60o)Y'7?s7l,ø:XL_vH,Jٴ48yd~^"ɲyet;"7֖ۨ>⓳xfTF1Gǝx3PrcJצ{LUtGGkے-hvYi\aܺKdnt9l}p̳A Yj5ךf @J&ҩ`s> d[FyfxXʻY;!BTÝ Rt v TA)`Xޑ(8ē3_4g"52bZ$%]Ȿeh& ÷w ^r dy,`ܽ ("%|Fk+[xC^ _9T:jBvo ˶Éf7`O7-490ͱd4%wV6E4f SfiZZH/]&SVq y?@ B߻?N8 `4haI<cƜVvlJ}@ 6OR9ܘ{ךG)~!RٖLH$C92 gi,,5zt4' 5.9qxcnf_6gSea%^} Qr4)zx@"l1LLpQhlNUnbux"h5W@=4f/SޘIpo~tǒ'ѶEd ok!x|C(A0KxeH{X eOҶP;ERHu 3'PD7&L1`N\ y<15\Z Om]U8Ti(0(4\",ؕr;gDni @xP0,cmHXMh܃ӳ\Qu{6Tvtt~#?FZ?b$|oX ޢc- 2b% 5Sx< q4ϣKh@$8|v~h%i] ۰`ce'4iASRiݤzU;j5nNE~Id^s|/,͐ {j'`a!cչÔvJL{yr_l/]'kQ$G1f_Fm_aFxyg7mJ^ūZ)M}tO79rJ=q8T_Y]J%GԘ#Rf+!?^ C󢷃ETCj-{~yN!K,YVAj'J&uI N|/|^LyOd\kufE;ِ,.btuIJ&]g'/1wlfu5"kEv"ZʒM;Oc>ϱ8ѲZM{F'nXTܗnZy_1z7oI;9=n5S,; #Ip)\ 攊?k,kZ^gãՓd0hILe I.){wqmdž[ܭ}c7~x~%6m̛ͳ)-_LaB4ڨN92Aӣ̺ЌCOW95D\K Yj& >Â?LfwWKbMRQg/*3TD8Q/H.W*lyCl#ʘʫP{A=W'55f(pV(4J +,GIԽh  M:,U#i̭VV2@']z׷"U9W8clcMzxp>q葸*4W}`ƉHH"ㅟGN$3OQAӇ^xWL{׭IJI@+,^֎ߴ[?YIa)ՋjJT2ڗdJnL;!1j CóI/zAaȌ%g:|9r~:ds848ϣ cAAge5ĤQ@ ؁sߐ9Nik/7N>U౺@0FʊzۙE<{[ &)v_W웙ڔmi˻wkm _.3ATxyܪWMh=uNDw͞8Kބi=m'䷑ r-X.Brjnsnq'fn WC ?A~Q$=Y[{?G/~ OWן?}r5>_O@G6SP]Oȗ 0K۝@nK}6r\EHcie3O0~`8Jm *SUS\aKjz)ie0H^tD@*>Lg>H}ߓ;C mnu3m6SpL$mO Sj5]jq~SeЛcA[NF?L)䋄cv;K`篃1d2컍fFf&> K_'SV1@2t:qF!ǁV%{w|-<OSذ:~Q!'3F,eIA,rpCj1hS )$C{59a*/2й6@ΌF}łoتnB0 ܍x4o cNr*q3*Zy-+,{%VuBkk:){W'JZSSMdII{|Ke2ޓSLCiSO0g)Fd EjQWy0zUuHExܙZAF^sNm(m}P}^. OgׯQ8A+mT꓊W27vU-%\!cu4͔+c$a,;UyۊdVi|^Ɲ/A?-Gޏ(Tq/~RSvɅØUYh w)"1n+6_/\€ ` N%Ǔ@RU]w_prI| uk$j; zAnr/; Z$Dj1_ YG w[)7q^JIrrJnB|rΩlMB>95_u£JXz橤Y4,Ǖ +ɯ3jno04*́`tړԌd e9SYJqOڹy."$+F< l3#藭͆l #'gq]ayHQȻ3EodX35Ra#\U{hàIބ'Wmځ{tPac|n94$ 29OdAD!OH] \= Ł#' Tuy՚1{+Dj4VzRsbP6BzOOO{A8!/7 rfaA,o 0'"ZD}H-2.Uc(Ri\o z> Uų<ˊ˾Y|o%%QunnU>G͐u bks\R7WB;É gQu볹{\YH&˲ Ǵ >tgcMr MLWmYnX=R$(>UmW؆%7# cȶ$@AnvԍzX؎)Q YבHm#<1_]Y#u"+9kxG`EUIIŊY^ޯ~1d9Ǽ 2/xwݖB {<%HXVHofgr*Y0#I01fY]OswnӔ/$LmE?2g vN.Cer*ѯCsRÎyLN:;/Sg-.#\=)9 ­?ZÉHdCu <уRSv|%)j9F m9$?F1Մ] G ]'gø0.h_A{04? E S\tLĐ @=_7ln&GuSJ7 qU2O2Jbzy&g8JtILz(Z%0_~hN6 V?¢bmt,kTJy|T${^%~xCJz\S7>Rt Wm%ApZq<Ǹ0!CtsUm1_єQx/^|a#; r4-5/_={,tՎ3n4Hw)%}Ah1fpV]FpStJ9ӦC;v"kInCw d64A=q& |*L`N`Fhi1wHǾݦ7F[OϞڠYs\)r'{t4ƓϞgeIvQWFQ׹S'[ؗn.wSpr/YH̎>/g(ϖS+gx3g(f-a2D1!̢ٹ2ԝDqtɮy[朆ޡ190GDy:B8nGjKPewOTi+>lmAj=o+SJQ-0e/#v9ž\c]|F K{&3v MctiwȖxJg$"l>ۤ3"hqY`t.2otxO)an.uwy-o!h v l2Eљ.O*T QtB ƈQD@\P˨gKˮ&3]87WiIߖpbn!7o x&k)}#9KQڤ_Xꯤ$z01e9 z/|{~qj+$߳2B'$zw=~)1&VEz%}6_(;KY]t:bJ)3ZNBtMrY㭠Jwͯh` ̍%6}2.&v"HbOӃ9)b}CLvHJ9= * UfkvYJܝ0*-{PWxT,$PbF3hMKßݺ~ͼzˌAoow9šJК8E|Z8r2kAFgy~}L,_Su:Hϯ6G W_W86,>LhC񪵙.-jhY/xyƈP:NV@d`jw/>VS9=04K&GKL uf/oC BD4YNsvWn)_PsVԓ%ePa~,)ǚ 4$:9ʾ>S3bѡ.I~6=A892!8L2=]W?(gZe}U 䖳~йR%v*RYzUWwސl[sjQ*l6Eq:~a%exªDW,Rrߗ L ERz O9# ҃Ԏj?S,d1}]Jnto7vPw|#SW[CXYY9 ˼ٮBŶR%@r1 lub'Ȗ(hޞL_|(.z=ذ$}FYY1INc{߿_Їw(cΙ~Ĭ YĚj/Rͬ9#Z{nŽns5Ds$9GQ-C8]xN=1¯~;E47Pwx>'" /&?fߥA..0zÝ]6Eb ^,:X$'abi:dϰmcVlO.^fpldQG>)HްۑPJV}`J/V>YrI'f0?H$~Q+Gz-:j"=Râ‡WӶ`Յ8Vac,Io@Io}Vuf6nSa>2H^/7Hr%pioCpW͛RO5福֯z%۸{ׯs]ـ=xk|U(mtKBe NOz>8U`|{2cĢ >?V=uJt01CE_I-GGρR~tanր>e0W3Zıqa;AGlhɶ\ GUR.ķDEYIΚ3}l:n~(f$stX LKVI\R)NɌn!Ml:C\ozw?NPhL ̘2g$Df.m wfT. *0jT0WsWFFJEC~ia~DWSrǩK'^[ ?" _eH)À, ZP+-qzs`9(e\ݢOZ{nu*554Lpe'}Hn5wATa;aq}I-=N01Aޙ(s}Z+L(O-hztn{d%N\фӬCbwxpPSo(^8S:|5]vSsSKemM_5^nm׷T]\Gy1.5!:޹(8#۫X4-i_*hַ-:ն]HAPq TT-I[^? 7$UT;:tΌXUAW ө=/o+c!_;O6}>767cysUZby-*ыe`#XybaF8CF`pkVf֠@ҭ.;*T|JU`{1eRm?G/~ύՕU>gW plKi/-Q)P+n%z{]C蒬arީVmwwk:  Rr5{sP'V9?E\\MLw_ ~߼g>_[Y1 Q}[;RGzhJƜ*LPcTj;N=:tƹ-'(kz[VvTԎ~.f?vj{5'We`&Pj[u`Y?zخ77AY/C Z*`؉MZ;c ^ݡ=ا  N(T 3ݲa0-kjz񺾿]`-zIՎM,fՠMhzZ{\TWݖ°͆72U!/J̤tPz`vC)sZ"P"@g&ChB^ה絯'p ) =Gy-H$a16 *jmjh #[1PA7Ui~jYkкGd$DLNrkJIy'A~m0BCo:x!CO)Rb^~LPR|Sd8Dd7T!9|a$SI7p>//_^^Vφj4>[#^~Q-څ nR$?BG^:~6 _s^z3[_x8-?}rU>Gy=Ŕ+Xح]S]R-?7tIUHՙ4-A= Z('fA L̡RnlU,لH KK >_ZR54ȎWWW:`|x;np.}OQ ;j ^#GR7aNHF ^SH壾ӘXyj'[ҭ! z 28fS?EWG_UMAdhnTPqDr"l1l+Įݨ3ܦl}s<t{~+3u2m2HٴBItUI a6ueJ<nwygk߯}4:Ꞗ `ڍά(|7-٠SMz$VlOQÆl2J!i!l%ۋSgUWWן euHogIMg״V.?Mv5(PGB|Pf8$-m@KzW|ԯ7]fK<;cܰiOV$$ ;$ T"C0t{]!CBQE5w(e{HZF`t R ly;'ET3Q%QiO`-)#c f$'ʵa5zBE`` [ tBo36@IGn+Uբ<+O3DhߡSakP0cx;{v"#mQKZ'tc2IUՄU>8L Qΐ[Rm5U5z6@df*HƐ$Q\3֊TNL,%N^߇KK݋NU }}WOo8h[x)+Rѫ_TRS%<}|nv &#:Gӑ2^ kIg bkQmTT7YjZ׬WUm4(!-6૝+Oiۤma]NX*81OUlPzhMz34")4%(;h7Dyqɀt}Eck ZkP}eu,]`V 8^dD~I M<N̫0N}Z!QEƉ?aNbUig|#6특FzVJXI>cލ6O^YYbW+:c2L`uae*-.몪uPr 5DRsn 91ڰ~oУHihc&.1+(ثЬ[ @GV31+G@Wa T0%`ik^NyQ-=!v0fzL&ܧ`<1)Za'ی`j4}kj?t+6(! P.P5a^;*jI 2l ]&΍^FnvέLpq\Q͗*.eRnZ[ǑXw֔f1_ʝe9>M4QXwWlyzOF{rm&^%m[ Kdf |7OMG~K]z :#BX8JI2l Z4 ކWŬPY1g]\eHQ"LZ3һ7tZxd=A?DoK 0otTaWO.Fԡ=0``ZifAYZ x9ZFB"?L:njf(U cqNw'-tŖłW֮{U2ٟ^4lF 5܋o*%_Ozє >@AdBɊ oZcZƨOhx rtE{Bu}O'pJNHfī!sP8 gVo}{pr#&'7>:`CJ*͑F-ދ䥊a(pKm쵧8񳖋_F.]xsMH@C&[8 ZDgSڝH{h0@UI?`O`B8zu!3 1P2)n#<N[].E9vtKf|prNm~( _^KlhE8+kp~Hӌv3Iq,Ū$\bn)k.| 25J>jF7QՓ9(VާgU #΍J?H>KJ-VVUk~7sJI֜oW7F5>9WKkbZZ{3_҆;h)|-=v[Zg˶$Ւe;ݶ%^tK_P>'#gc>?)/wlOߏ6ʧupO>{Z|N?̫iudUqOxY $H:>tCk5(ɽR}q_ehܵ7'E`3 YF*ݏΖ|جn>ۉ1:DKJן1> `OA[G.;vlt6Q3,b.8t>=!s7#> J'dy܎GVBe RUKJLXKŕ*U0Wԟ4b7[Џو8`PqQ=Z6{7&Ym0ǧ'hL@P$3"މEa J( <9kz 0ZֶL~}Aξ,ሟ OЖC C#`AIoV-#~N"lIok +vyVEK4&^Y;,k}(.ɾF WQab 1Mt2Q?&[* YAKcKyb8w<,4>p SIhϐifYvј_&v+ H:̏ΡG1 -&QJA7I,DGTkIC䨓\# Jjb9|Ô1ڢ+Rbd]}XHODBF[6L'9+ ݇'"/LK 2wC(M! r+k~\_ $u$;H5C<H9+`9FťQ" DPcvKĭN1dlNO' .ldHe) xXʇqAo'N֩D4#$Ĭ7DiYQV3rЎt0oAM.]rGF@Q\\&o@pm3%hQMh92 2E\P*jB_skWY79‰o#ZIy0 &g={1z /#ETﺭϜ&+čFrT63X5 k/\nΡpv_:JDo2[ F)q&};(X[b8mGWj׏An쿭6vڇG:icee˕Q7~>fyR~Rڜ <' /I٣=iL}߻{].>\k) e<3Fǐ5]I0"jX\]l TD &KjSuF!z>}q-}XTwQܶݐ9La*ڌju}\Θ<q<ց((U͑m~R)<}de''ƓpeuZ7xv鬝>u(LJ|: r[:=XitV\_uvaoqE/A7Oי}WcfZF*зΫqu䴑/xEj5Sآ 9̨<(^f_ po8̟8@)0)]̫}fu6b/yIKM#\7{'?~Nvv<>|z7“oUֻ'k?>u>맧tOn| 铰xcWOO`a4DSG# n8DJ<9]qL !ta9 Z<!_k6s?) #y :ĥ"4xbzȢF"Hi HԹ^wƓ'@|>]9xxIIgt~nh2FFT#C=LxuD1Տ㽺W HqOE3wpҺ0\UKM iʓɳ` ot+Se4G_.Mb+RU*HdU c+$m1 hGB*%.Zy| ׻+ptllx9q־?}تcN,_OB@8ss%F'7S?x:,`+/b 5I3%z)|qgEvP`,ṭ)6l{Y"jL3#yBwP 8,e,NQ(;DXU7!Vd=Qկ`CڞHxG?2ۜ@=|c}87Yzdy>r6?}87QdOߺDWϿPw}vU>z3_Of}7(c 9/|SFeVy [:>?/TdQw<-;=Tq2;r$=_/ШBu4=RדFd=RzlΞۤ@-G9casǗCܔ9xMڣnQ³i{mfJܣnɤQwHC{&G.yMߣn*G!BP aYZ-v{c:߮, BR=)Is|X(5`;Vz_ԖMziߥᏯ)'^hί.bO!X(8n;GʼlU)ɋ>*n|C(^_ˏo29t$Ow{*w'8E9,n_X[KcMu^8&˯{NC;KX[184}=hb.w9/X<[sR|ey^QR]IQqx՛EɑFKUh * .(CgXN.\(p^skv#΋ _sD׉ "C?AciSD/=ڏΜT>ǤZ-`ZS'@cGET #zy3,XSp&&<RJņ'il,Xgcn*CQT (Hx (o9G||g:t4t X0y ^ojl.*dv†j A֚X{"@CrƖ~lx֣S GI~ؐ] |rti{tA0Nl=t4kV/{/˺u nbZRaV6ɱ.\4 JW4O{,=o}d2ؗGrj;jueЪهM%01_jo*XBR&̟R{p?s?s?sAqˡ