#!/usr/bin/env bash # # Copyright (C) 2011-2021 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 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 '/^isgx$/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=93 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=aea0b0200dffdeefc120dcdd095860d7 # 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 source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 ]$[ϙu%UvWN,WF{vW^V۫ժ*~T&Sѵ#} c4g]ORhIRn**Q0]O,)ɶ G}R,"5-?dSb9wArtL\o'+cEHfiM,*ݣdN$sϽLLP@c'˹&. .c k>q'Ok,X+-N:aHq2h ,؀,2LQ֭k D: BQ'УMہpa#3=Rl`2D&K-;"g+f,!~X"18R{2hH Kc(Efn@ WX ̂1X&0㻓DheğS Zh| (exD /LsлPZr_L@9=^%T"u[0Ѱ7PkIٔԽ"@VUo+PQtOKPno8JGWbW ȃJJ[^1'ʰNz#4*Q[h2AZlKJGnJ ;$ne4ˮ<@c2cLOMP ./7:A"ipU  &IKH `Q4G:ѱ:TLN{Ӹ*.vOeJ2Ғ#H@gG´t`0^} >%XbjuQ`f3ropQlJLjiLBU0 A(RVҕOʩm8C<*aFL]nIڈKl[rBօ̇` S],T<; h9O5ˁiMיXעFcp4׍jsj4E4<;В!Hqǝ<DZa,Iw/cJWEN qC {' 'mN Q$v&֣hWkr|IkI޺lרW^Tt?|:ZmR&/˃mYSB"oߓwG䟢 6Ʒs0Ѝ)M Z؉ۙd&; %1+  0@m&@~ܟRp ln{ŝ²M"?I/|_HHAI{Hn,^KG7s r/C(tcd[J J C#I2 'w3?$ԘkQTٚaSqؾ&d U?)3g3|e\VJܲ13}E?:Wzcwŵ%B>R?epE\69V[;mؖA BzKt8`0ЖȽ`BIb{>@8FM@E: ÙOU0Xӡ A@ ȵPGi 8dDC#b"ތ+BHjx39@Q$"m.}3AE&߳'Ȑ5'N\K>M6npɂ({%]"h.VJd øBo)Ge涅t'puIr; `*R~e zrNl-6ŘN .U`@~-gqWflljݓmr4IewoQilFKFdD*jBd!K`E>_1 X^3 X(g skXyz{h CCi=󚤡z6)y~LHL=WΗ7KtK<] h^_ S~,#Ϗ.uQ(U4:gqgdwMy `Ml \CY@&X 9Rss|aםoe#5^#ok,᧯?lg6$QPfySp3:˛OJm dޤo\|? q>1Ii?onx} u-5ySHN4pn|Q_(}![a8[G,Q?EwSspxg }@s9op?o345n"3&7PQc%,o!C~֯}QO?hZKZᅓGlXQY)WMur%AJwA/KךL. {jR,Fj_8uR%zh {Ta0AE߰~ . ؝'jgP+oP`u'yX %RV3h--ڼ!廿B0DbS`͘XzKՔ~}|U'WEBvMy "G/- cyBoײ p}(Hqp[NVT [Xy8HmrիHP¡e̫),MFˁOS۫}r=JJYN09bx1I"-:!hrpjÏ}Tu'KDaD d&8(D(p3yK lп dKOҍ}?F  -$%%u{U z83g{|Tc(4K(1 .XLĂ #} F/=Ó½T\G_i72m#m͠ .'Ѓn >1|q"0K,[smL$gQLo6,4/񻣄/wxtK)k /&|vz3 ={ͳ80/eNph$~>ܼz%+ӗzu?GcooǷ6lؼyc?6`/\L Qm$MR;ڇuݙ?͝[y!77;%b1IkRm _el*Ra~K5JWSC)ZV]Jin\6kPrQZG'wz` ŸRo=9vf)=$.<\iR)x ° ]a3,!6!\:Ұq pXTSA^HmO4?PҐ;wYj):p\]ّ%5ÂPOF۽9 AKOCx \p")m_'LWIA8Ȝu S$1d ]d[9ԅm5V5M@U$Z7eh2 YW~XNX<ſN._ "!>`Ar=؃ԴE.C34= nM+4 eԴ" 牜#tbK MnC{*KR%>TڹS'% q0=И.5?,&ccbۀXa$#yՆ9zna~NC5'>Qd5poNX:uJerQhD1Y+n]alG6)ٛZT9cb^|09"{Ǟrp#1'Fo~%gL zmMuolg<x7O6O6O6O6O6Ovч]d%#]'9s*iVme# Ōg4 c% ^WO1_9t^|*}XO팚*k 5@v TISg9Z G5 Ipl7ߧ6e=ЂǁHkT~rnRRUR k x)Bcw*e~6j-CefF['9/RW9G'"0|!,iv 0(qj?Z0AӘ k<'l,\3Ç_KX &~DеډϾN ?Uv]>aO )G-X 1O˹w3)p,sp,֊=18V?Dv:]R_!m1 ObԊuI=U9Osh25Oӎ9u!U|q '}bI4e&Dt܉CQ ?Lp~| &yp9Rg`hQFTXKE[Vp%ǦOjuꏖ̍]>b-?ǣQINԬU@5RazwQ\5{ !eK?f"OnBr0iQ;rc5߫k9bӵ鵶2mW_9ekB˧HIJLsi 1#eA\+RFi9,ئ9Y"7w|<9t ˳n ]1o}y[W+}2 XM0 ;<1l'+FK~$lμ#剑{Y~ǩ]Zoli+۲~o0Rkjty!grr9xwno82gm^ǧ63/#탾 P$xmQwn~LzlkA}3]|A&e'Ķ฿pww33L;3L;9 ILVWD@7[& (bJPz4?>}eW6)\}QF~·xۓ󫛉W)%"}뵲W\ 2A;tJNG - j:SV B5Oʾ{t |Yl#,ԒsBQvхa.R"54^3.3r5Tnz)IɉuTdޟR .m"D&K !d3`aQw䴲V0DDL cՁKu@/Z#^AvŭqZH"]( @hNZ.l5n UiD(`3jI?%Gjy`& A½zbcgqQ JA *q Rsa#2v+mnBGj/},9ʉrJF*%~^-)&[$*Q(+"0S [!2`^!RQ/;zTG ۭ"%t^P,_@ќᦎʊM#7B zy, .g ;Ã/\h 'b)z䩆14@;\ Gx~!7Tm wϫn4l 4j Ma˃ӳ$ $}5sl}W gGnw Ezʊ3w8SR'l R:Nw -h*fj;7%o6{U7po1on+NE oW~\NV=o/'0MvBgB$bnhO_Mm !> ,Nٴ, Q9H>'?= NktE sNA,!S ZFB#- Y]vN񩜗S- gpCR٫Ś{'d>n\iluN_ed_sdUuLaҌL#V9Ȭ)۬F9AuhI2u=(6"[ă~4iU&yˢ\'钎=7^PN:-7xH#!an~lH`&^I9Yyw@ F!T{-? }Wy-KIwVZ4>5͘NImlgv BV)@_TënRjʦ5p%o66d_SXR G./μ{h[Ǩ 跍!ܰ8FSXG[byVSQI ɻPfHW"Rw2*;'ryZ"B=?f xh3;9 \ɽ4Fⴁ@+U=[@BSѸ_GT,S03RE=PLjD% ;<4CELro1c&7Z5c;6+tWmvJ9]X+G2qei1oV$M0G ,=lx< >'?(Xl觱-+W\@ MO -1v nغfDiC:uĎ@hthE`MVb%ՠUJ) _""Lo< t5bG,LvFsYfy̰lGٝɊ&53mg&$j0ILAfṆKH8+* OŴGU1xˉ ui"Т{`T\^ 7ĺx+gGKrH`Sq#s`f>&c i.Fe^5ثGk|,@Dݩ힜t[#LuKwtvb:ԌRmZ͘)g:C$xLFvL"%*ם-idZ5Qi$Ѷ=߭yRr^NBYm Kϟ?6aO i]4 䆼!CG*F; F>i(iۤ$W;,wqG[og; ~XNWL x%FC7)+^)(lչg5íH֍Dss/,YW|]pDc$(<} g~ĉbAվ% -n܏HnI^Xy>8]y"s4JSr8LOpi Idu{D]%+t3Cԟ7WD?Tp*ck":YPV#b{Lsv7sj1_dXB-Z[|7y_X"(Qw{W1=wkF[La~gcVCT\a#!wa Bc'BUvɁ[ӪmgrM Ze9P0;,nKs0 81MpK0+=6@] GqE6Fc!\ #WznjhAv [#d) ~HXYkrj w ,Q i&s4|L˒-nǍVt(+Jڧ>N (CNɗlܾ걎r/П`XUNZ/ &F-=ԍNYZ+HOBTlbV6&Hk)%hBbE>=x}J}8h?j#*!ހR{^'D@L@D;uz#^3 `0r3hdu6>5xz/~ !%ZU* Dbmm%&{V"3U $ҕŨU"5D*Oݴd&ƲtjFkDk+^Y -΃W𥉉+@E@vPup 3"(~*bF^;;eD.hExM=To3B˧^k'?ߡB$QKX{TT; ko|p ipGJp%eNCwU F׬'\n=+muo΁"F|Ew!UrĦQ0Pڛ#ڛG?TU(IISM1NH_~\N4i?z;x֑9)>h9ޠɺ@=NAs˵w!d[Xi> t*$tTLg (j& 6I}Ѯae(Y` ly4sl%)m2 5Ҥ,y,SFeT$I 1m҄,$Le5[$LB hllzM5,cʵv|g^sDr]u" 3]*OXy9J5?C (v j͙*T؝r o<:P2Ztd"P*YAA2!۟Mz%;Pb$=ۓfX o8ߢ?G%#[jO$omFfvoI8+ 1ڇ$ͳP!4Ûdx X 0LWuqRAF5fyv+i\]W*FPWYUC WfesF^D:_P0!y'k<5u>`FW"o"{O:cOFȜ2 Ӎ(vӳi=w#rp CCP4J΃7Be1[ pviײ>@#ɑRNnf5N5Z5o|rp߲tDq+,ZBݭ]ڦe-V(Hye0d'DΨ F-"{@ODo Dxb1V;  hЏVj 7t??[$m#0x:U,࣊<҆%YPA)I%voG8>KbThj" cc:Ɛw VAUl٤G`eW*YkAu&B?Y#Ar+4/X.𱅽=1 fO(C ,AX9JCoq"hEǥqʸ{-CZzApг@-/[t"͑gT*b_ulƒ=Uh3 gౌdߪ>'u;b'r#&2 z)Y]_N g:-@>,9 oOv)I(HpL'1Ulb Dv4=;Ba;W8/ҷ'gu(^){s:Brp\CI; |sKȬa4N:ZDV@{S5RcCń.&NBU|'ƞ]pb*\whHcƌF#[Wpm#A7<}I:#h4V׽othr_ ˟N]ƃia|[i(@#ie:vΦ𾥢|MӔo"UD (kݫv>{}<.=Mc5kڳVMfn5K^/T#^:y)˗G{ǍXkDؓRH"ct ` |T5(Նe7{g ۧSt2W71Pgߌ^=P!evͪ[h4! L8÷;:T ~a"bYbbzC(Ș>]dggq AG?Nn2Bb]**]DyF?\H |;Bc:(&N7T¾WQw&1yn4GmiCHµ4a!z=8.ЪB C /6BE9E騳,yվn!DG0Q |R'ERrli* s^;2>yPփ@Rzp5=oa+wCO^9 2 s7 iZgBf!vYKkTIJǵ3sZl83~)*bQSӅe%SU^Vfg_pQ*Zwɣ*VSXG:7僎e-A&⾌]A}kY>7oL'! o;Bc"gFsG1>U@ᅈF@IA{BVT[H̹]VOBO!(a׼: 3U^'u3]%pExd.1N.et`\5ZTjT/96J0_x~|DyBOoҳwx2`f:ǃ""3^KKg_G*NiRd/ (^w O^[XW7WWg_3g3{f=d}E4݅mL cpk68"L͊º-fcP߱=KN0(|}טAzTg,Tfim%ބ,=Oa)ov!MIzS~O{ KJ+|~o &TLTM<&P"RՓ@[_y~.ciX5ڥ0g"e3_7u8N)t{L|W;uKkVGd:bwjeTN*lKۣ Z)2],I$cQ*7rOu75uϘEzedΰA$}O&~˂VyF$']VfءJ1h-lX2[H0•۵μn1cs '#j"ض6}sSEUBK]tIRlWNe/Ji5љ`4b7̝=MchۋAǟWiQ jgvkb~,D(c̺˓C?"^$eP jYvN^ g,O>~@J 3 :Cu vЂ{L375[u8SuD-;lHkmLvқN1JZۣҜ ب]P|B'5ݚw͛mej?)f/\, g'yZEͱپO- ;2rn>ASemD8'=IT;iJ:!ߕ#B1|}2Z6+RSl9~$A4q׈;]g`ż%S~1>a32"TVebcE8ޏ[лǖʯA- ^ =SS O Ϻ}O31umn8O(>_c[+ᝇk|f3of7f_oJe;K]T?_7' |R{_kg躗FI?jZnsǠIzxOdqnv oqٺ# B-֦*H2%+&`P'R9-NbJۃr:VuLH@,*U֤И 0$0Q.Ew4{],1PXmŒlPmOOU:]|ق}нDj6xջnnQa͊ڃj] "'ei0;msQ2b'5~ R- d+*F.19Ǎ7LvwF搡Jn$*W&.ơD3nI> =9m4jME]Vlu1h SUӵM Mo;By !L7Dp(Dr*spaf[t&+~n-dZ{`O =>K8,6 #E#򩷂j4Gb$sxis IO) ;8OkA0="!$|F:\qD\lBtLb@@ȓBu3S%Eq* T@C1NB{c8oQP jHU kr!qy2 l4x*v%lϟ'ӳݓzރѶ=aFzx tW\X,^,G]?_PNA;>r{ A`@6#L:SBJtCaֱl?~2>a1ϟ2T}(d @Q*S G)~YGX5 [J%òRɨݝD4]&k?ZMCypxNЍhc:7]M1*#|8{D>>@`YgsΣ yitH Syo(6E-qׇ.1AFI Ysp]@>~.ɝ&Yff? 4+0-< b煐yqI]LPqc^?w+jzH k5{V #w60B?;nL Ɨ,Og}+ h<ԊSwVN8H9|L Q9yDƀϒӚI 9a^bGq#Ip5bÎ/ w6-7 L)޷gL iK;S D!|{@(;RF> `C Mpaƒ95cNX/V[Nnؖ$[Aw/";U'^c {%0p"_NbKӰ0Tр@d7!o ,gC$۲YX%OômAHh&>Uo 6Ɵp1u _%W.b}&MR=-_Qx'F,Qɐ ēkv듙ɟȡQ3"0<(a66r(^5!XJZ1fօ:<<_' Qe^C GX g];ʭ^i9(IB?$ͫqY-nQ9R(Cs-/%ڗ@b9QCB`uRFd9tEZVKME/^K;9 _.ȘOײVV G?[m=;,zx85VŠ4 tSHa,.koX; &KD˴xeTW /XUQGyQN+Ù]8鮙UJ{ ؏@hjewZL~(%\ɇ' [y&̐@O*J)фDF`iEl 6OF1 .|E\3t(D*a=V'c%g0Pݕ]}>i_gu{msuc5>3g3f?3w]4Fijd5Qnퟵ1,w60Su̷cnESƞ_đv9ݍ(8xU1nK1"ׇw+Tu^#(FK'ӟd}q'~߇.ׇ(U  Iuƒո-jyoeeU{wu^/{y/ڑ Dp•RC%QKOe8Y^ WQքD|}B3\%Zk)J.;d]5D22b tؓѕ_́ f; Arv'30TvrsM#ups#6ʪϚnCl.9A,x(H Y a%"ek'ֿ͆qX0+cxCÂn٠|j@j,&& G,lL?pK[ډoE;$l;geoIӆ%t7tvÃWG'X'^6\2^R2yD Λn<')"$mYz@|;޾B\YuTm,&Q_mWF'I Xb;hٖ-CHif0pm-Jk=LOIcc-uX ZIױ4`snk(zk֖0N:tWɨ?`n|.Q$ܻï9k>+k{qSoԹyo:ѳOe Mh, dw##5:Mo(\la~)/0?ǎ:(k#T*J~gq bV7 p#=Z G?bLl-w%FѡUNqjK>\Tk kVS5oIsL1mH9Za;Kp,.n~7+}k Ï'FaN3dUzZ_yU|~0L黵axw/jT>1T%yKH7D" iP˼+PJ3tt$e|Ygu3 ŃCi˵:m*69-qoޒVVV r**J.HQx@09*3PATf<#޹$={]yNjL6.y&j3]0CmipC|v7Ok_bX QԼ'$ZKD cN{kֳ]Ѿ3_֘w.<.@)0a`u{ u H% &T YT]~R"'/6+V%GίwTuQMQ\OJ$<1Vn~ luָܐlj82i2)֮&{FͶpP;G= {]zv<+iFqzҷpVިx|%ϔj?1uuĉPߓCPNZ.ݥs>7+ɲ[B x3>D9Qeye+҂YFWQQH+eNB,I0ݔ*nMDj a[! J X(ߜ/c܍ANafzC۶`/j' b <*յ1X'a3ceYWH⪍o;eNLo'm 0Ho9 k>+4) z.M=B~}8`.# YC}ٳ%dH %%s Ľ {юx xd|LTunKv/ڪ2pb7ZX^B4,߸vH jCE5A@0~xB$;:K %\hej198>* < +걸Vmme6ANǙ""6;5~<@* 7464֢Fp#ɤte?X[1Q`^{JT * <^R^LstBvNd60zL+8:ֈZ8 1Ͱj)^B uAbSȫb(\(OQLx6;fNԀAlF"03(0ğ:s.*>5 `mv{<VS(jTb5NS!Gx'P$FlOm XQyp6՜I6ZU*oxe)Tչ'gCKKQ_75[Gwr>n P㍪'v,PET7:JHRx~0e3pSZsA]H}0jP#).bxV[{(~3JZnFPJ[40W:v1s?xB~ ٍE}b6(anAD06ӄ (;' Γ [ՃHx%ЧO>rRjI[-ڒ ڏ3L"[6Q{E™ G;O &T#kvM#gk>ڵ$f0hog[#~hmK L Yp &)9dN")D (yo7Xczte23^'WBοhc{)~;#;.I ,pM^q]w"OsvK22Sz'^9T5wSOCiQhf%E^.itYfUhqLOY/ 9&ұ?6`Md\18!P55<")ņF!4t'E(<ݗpM|lO~~2N'kPc7Gs]K7!ˢ% ո|}F-y]*2y{4 4"D1(_4ޡ MzYy#6o6ݍdmBe=Uqq|2(J #_5!=GUs)nnMOB 1jDlM2?L S%ɍ\ EfF7b{ x4gLHgLvi|L.+X-ˊ)qzDvchha@*'e_']2 7m`2ћ493Qk uCBBBAp )Enu丅јIm/!MiDώ t|cw%T] eRI$%'7leˆY1-YdRf+,dT#'֌8 ]բkK|melbKB0C8〆kzXʩѭ?}uF*Ț@T-"U콥@Y6$#}(Ĕ.ȢA3#-{`rnOn ;/PGwk~ՙg3{=^6ACGI=vS :ic.Q?Qч~6 rvu\κ]K cq|Nh40jy1ʙjz5Ě{'ݳ:}wWGXAg'xC~=g+~_͢?]>;Y/=jcsuuM}νb(hV?'s|3hΩ[&7OF"9 S* a6jT\ UoXQ{4.AE=[Jjं +_yk'Z; C^:(kq׹s߯o>tI^;8'kD*?޷{6 "0/&Uy4H V2I㶺̝÷sքoMւo8JaGX F=2Z:-40ugzLTZz5Nk4dhsXPf"̚qMJΆwVO/6SzT6~r%(oyU5Fmj_rݮDS[?ԫQsPI#jZex '"t&. m;SG>Ԁ Z:N:9s ZT7ݜ}ۺ1ڸ#xUV)8"48sapf_`~[JP?&hI?A7(Lߞ~cAΏ!g8ovú+eES^oKS_w3ڑN.m_~m}⮴kv@Jy 'VȩզId{r\oݚg<}8GCOHF5Πq}]~`o6f_x8X>ow1*?,?4ʍGڍեՈv#E;L:LTq xhج{Pv<]G!wWu|~[Ps#zxx/Zs*xxO xxOꍇxxOʍxx/xx? eᆾ%2GMaFwVi2W- IۿLu/ڗ]zww 1]~"HN|qod?H_?|GOuN'S}\rdh S&kO[z;IR;v`-MQs * ? #vbIZn'.%YK~|}K,_Xi!e,uat+p($Z})O(?F_uyAu|ܾn-׸0\6.bfͫ^2AF[ə2،*Q҉Ӹ^bAKD.t3~#jsvZfVYXF2$$DUPCL`l4S+/em80_jknE ' G͕;`='K}h]^ ~B˰ kÇ'n9c7qJgBw Oo׷c//q><z5i@TT|ݖd`(bU^n^TO(^ TxKn/#%CyHv_M9<@w맇 -32 6й5d>_4a"7xM;BͭslcuTϽֵ2߃9cjGxo$cL.6Y! | =ikH HAp,IXP d|h,S$6xtG@G3qc 6zRƒ;وx G^"X.O} ,Oq z+΢r)^`Ȏ|V/Hݙ R֠\&a9ArIfk~\\YK5JLtr cO1].K|}uDow_OR{ ~;/㍙k|dC jme|{ )Jv zpi.(Ir?b Jؙٓrf;p}f/Q@0