#!/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=5268bad5054230cf3cfc00d588257f4c # 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 ;rȑ*|EE&;(f`;"pPo6nnD-/OLQs!0a#X|}Z`R!桻Y q~sxya)d#8gEl?$Hai@#Q$XPHh0V24„,9 (,'=2BC=+|)źMb/w=1o6 S#䃡_^Yj<hIZGOaW c_.uh'fdlz27ԑkfp:G (hl~[hl@2 ךѿW\6npxT2Q KOA&Sc265fڠ D{,b^a~fnRɹtC 'cKַpM_}` 8lsu <`E!M :@V/ag9ӟ50禥[SK#qԌz_3pl2MM I&$3SSgGfӉGuwSdF1CҠ@2 8׷`0#0W]+iCR5#watt65:e p.B`J HA0u!6u+x KN/0XxKE1SL ~Z;7ef1VQ 0'ujʹ@@:`)Q#0$Z?C-7=Q92 gPN=I:OQbnqd?"EJ<Sz~MoBDĴ<$9{^a;xJ v9hSwET,dR~Rs!}51?7 6LJ2lwTj: /'Crב8>Q8zx/=cw_rx񏿿0蔉t b?f[U8~"Rfdfџ)C:alYwFod}zpp\f-D<% 93spf`itJj@$ٷ}d3טk=&:ys`RĶU0y:x0ʶtG/ %q7N|ӼsmDU ꏜ콏骪#vWu܇oɣ{BaCWVlHnDtduZUCMS@QQ )N"Dl{ķgEE0T"pJ<=41fY^2 =^&~-3 KgZh'Zϰ80D/݅:aۮ'GDyW+__ `RZ'qD p%fDz eMB0hڶ< bE̐׾H)bU: XP}1y\C` 2`2d \~gv{opm'4جuSnWߛ1u C΀$+'@u'.[U@FŐ'Z4.A2`%5 "ȭ']/{׺ 7 " rج&-ŽQh6ؿ)+U㯷8hlX\v)cR pGL$ BKa riiF%D(upB$M &LMx}[{.Ƨ{ד ,0f8iLI3qJԈ:uqG%0ޜ / KdB4 -B\ Hޙ:!n"+s.ř5#\y O@+UkF YaT]ˉso YLΡG=ߦ°lkgy(Za hb{<~jL}y<Χux(ƭPM_zjx;8$Z;ꝳ-QHv1.Svp`:xLt,x% I31tAZ(@Ӊ{ ۚ/* oA Dy;z!C«FY߀mdCc/viĹQlfCIn=UhjҌr#e?7^vs]龊N7wqO@ r ud0yu,nȗ#|)jI} z*r5fGDt`!a#K{pt;6[6G.q [Cw8jȆoM)ӓԞ apX]/X``'cZŔ-ΙU$XJcYT.\ <#1<\R\~iZƴo1<.g{s\G2eC#xΏaoΰ| .2R ¡cR$7h t: ZݙO]N! qq;MrR"'XK-g0A"2"DօWg Z$ti]HfUt"[Q_{a~74~ݦ@XXV=?O,J\4n5NHUBc@eh@}<5zVfR->bm#ъL Hxۊkqckm,Y9I^m0}.[p7`mC1X:d"8 ~#Ơ;Xt?NzN]ɸ]78IEBH\:5u0 x ޘuZv5fIi(sBZ^wKsn *3`n #t08b͙E?\qjS.:4x@R|vNf!RQi^00ݐD ֭+&/Dvr@1HY`@4aq0ARO&olwKsIJ ^P")"5✏JmF!bKl` .?mXﭼDO[ =йI- Gd3.|8 b2ތ@/|M*7ev4 `A|Az?2k#H\8+ 4 a%</€IVp̔ C14 0%JlL{NĠV&&r8߿Hk|4;PfGcsʿൌfƱ0t 3XP\L [PyC" V2_"%Z067] %AU$r~8>;ۮu;xH]8ͪXIS[+VýS18$uR &٥a,b0Kr;.*UwceEjJ EB'DTH:ç HBHRJJ%Q{MʤSB`g,IB28W͕o*h`j%)*RYe_hƵnRpa^9*y+=A+K|{wj6$ Ve ͉DgEZr-\!!XHKOSwӽkO;=w#yQ#YXXYCx%`qN }ZU=6;<\ц)Cgԩ؉ by%aq& 29MX&tLIU1Y d۟j 0æWU_yeW6*9)JNZdLuJpW%Ys3p=To3dӂB$ö!b!Tf ^<-d wc"`[aZ|Az8i19 |z*92SuT3Ɖ+{Dq\e}LZ|eiQ[R-dWY8dF@{}vatDx9-@-\Yz"/KaKCRd+EBzK,mX}j˙}g5OՂ|g&Is}H (W·Dm XNI;I;o~IN,t?Mͬ)u -")=x5d;;̘~u>{VQР JdMm08zS\DZ9<-Vһj$Ϩ q\* ^PۏŻ1Jm)5vk!)XS]MvurzCu:_[8V/w|?O}_ئuxo=*~-C>/b,~{[7rUu-Wuafr՟IXj`>3&?~ ƽĊ_.|b~E1wqצaj}kZROejh6~|<uax3EYh'<)@.?"7j$?n]~ZIdеk{Åwޛq tIKX 7>-lkv$S ju\\\<ۻU8KwuKU< H'ly{e ԝV.1T{ګ`~jOw^K~ӿcWAG:GAAzQ(q2JDfh&1'+HfR=w. Sh7Z'<6\eUqX'wDܭB;fJMo*&c`6F7Z6{SH1,S?ʓ3ک7G޼ `V朓R! zĮMfZc4%+dhوPF Jj4VP(= V;N7eWUb4sm]9Er-6 dž~ஔ_ aID{t8ء.m2 jqPK,oXג !^t)&ekqi揠MCՖ UvPAz_ QW^h`xt~E PSj<`Ѐ7(@Ӛ w6<|4^X\]jyD @84wB|4T<(ʍwqexGY( V.§||t6+Hj\>o -9C<' 4XW| C| C7Os^]Qכ} U34/ @OU P9(a;}Ek6@6شoƳѹ K\hgf6\R{;xݘ\{\'ŕ /yO{*\*eE&T5M]h w-W6P^%Ǻ %8t PjvD Ŋ]O] ow Xp eC<_0uLnjeGiv>(ퟐ4lg޶'z EG'(_lX_ (L22zE:4N! u#'1JXqb=M@XJa.ꯑ(_rQa vbXbȹrc0fzNRhT6rE$A1ZѡYEyB6<2$ /)(ʯtmT[Zݱԑ9 -[ kʫIv/w11Br emȀASۉ-:X)'vLڸ}Lf iq[[2Q|5-nz% i=1FCM%2Cgw^ 40c8*Vt.s=>AlZy'~xaNF4#@R;,XKA$aA~kddc3В2_^+#A%j'o}`h1Es0Y`#+*Y%ȁe2ڎcq$a,`|F(^:A %Qgu va\'fNfe)dg N8 ٮ:<{,&#"S}:n?X"54u [׻7s[>9AMl-c ȟ5T>B%FvX!GgNhvGLHapV;(ۖ/.ʱP>;QM1Ā`øv.Y;K7QJ%2˄khxip RK #)ưRKZ[iHڽ``:(R!ӢywI'5}GvT"F^CT$O12Buɤ%IŒ%bnNq` 'nn7M]R8uFП>12)? -2Rȇ~)"(Z=+!3@`@i,-'~&*Hڼ$Q' Ohc̞ˍG6SDYdQE"Gu:-^/:E=]ΖcVI_w{꾷B/%;"s2\YsΞ;[bd@&-K3FΖ $5=8b6U6c\{FqeWnxM2u;QڰӔEdZD-=[8S\jҟԦz0AX z~`o1c `<gAb9~6_T9֢rYe΅>T1q"nÞdr.⸬sڭ VŅbH#?bkOiՍ&MEe=-;,{YBP}'Ϟ<8,gi]U 8 2 X8i{ɻlU.¯Z 4apXI󓣫̂U7,Z'Kl~IQJ*s]*7ʓr.sYCv&b6h B7ׁ >A5mR_h?tSmcmNp;}t =#?j,Ae}YtC';i3O=WH=f](_q>cC+HMQ5Rn% Ccτz @cE NJ}ѻOHoΆy._AĽ.EK%qNlȭ恌eyK@-Թ_H$01z1=# Pq˰DF58v%i>3,jRI5\懆Dmt",dh"MfQR]_%2ok݊'0RMs^" uꢴ_O>Xnx2Z^/Ƴ5k3—),qő~ ӘJEf8>w(fӊЋAJ" S@HH̠l9[\eݵv$4-I? Pjҙe1+Ej?mrk\Tx ]Ҽa"W@kf\?<:c!!YI,PEm9 eol~:b(!G-`AA.Ī"2v¥:IfD!dՂfn&!MಇZH`$n]o#&-Z]]4rf9 mLlc77뢯&{87io´iŸzU8vLq3[HLv9C,n? ;ȿգCzwJB"ʲeyogY"<(AtTN, *+ ;AwCb:v 2HUa-- l2 "jBJ71Y㣠Jq̯V` NW? ptz #ɂ}Kzw\ĮǠh~mq 9#`= Fl\T:5OZ[Y fK>8B<٤pG-g\<u(iursrjNszqҬ, Z&FM"Iޣtʚ~A/fZ2T5#b) bG6$_`k5'&!P(BbX.Z^{醓姺UT3 0VmEp;vUQIJhc/[ _n%F-bWz},M)Up]Rtt8mtrZYH$&*:6)a &Ca Zx',DH2jJWa5Ev2& yLGEA8tt9LD[/3,h=.z?X }AY1^ Izェ:\( 2YG*i|U)SUt8fGI*:rL3kJQFҥLFJZ;y^Ewxij'GɰG1:ڝeS]'bG"WN,yMoj'jфǧ'Zn>y!B3[?=NץI/fN_™C8N% 1ijU_Jh-p![IVoh"W M;YҞ:Z=n?2rcЂ91KbI0B0aX]ImXV%ʕNVWK~n+;mmk0jb(`+«H/0Qk_ɋWM_,ɵS6["0 vtm A"e=XqTǍ͵ݢ 1nXqCڣ߹'qg6!.3  XbGeΔM]0X0@yp #XV]#gFJE8Qq'$~*\LxZ=OMGwURɦ4P:O ~ϫq6p8 0s+ %>Z+!]:͞!a/Û xIfAR` 2'{ [Y޲MOf_=Ϫ6NURjsKUmjU.Ŏ)SC> J&1TijAGd/t42"NX:k}YKH;z#7Q!`$tݙqT%Q+{T@)VTBj/XP.2XIC!UKv,S(s%+Үq냹528@PE!^sn?9GQ>GRy+Oco1]!Db5?;<iT~+e.֬JʽfŒzRθfV3ZJNrj#׮# fuzAlrȎK K\ W#f#ꌸ!>N 02Tr4imMXfoЃ38@1Gqɛ*`2ervt> z3E[4 qXGAY:X+qa|xuq>_#V&&8sC8. 1s.e?e*B0<49ͮCD>|ND5e^H q☢OK茒M+>a2yQ땵u$dBQBh pj-n +.vU̸#ߨh<`#<+xHRpکbUjҭ\%sZn~&:}:,aڋGm-0gϖJPK5e}ytz^9&8Z>AwAcρLuX`[hsB) #zB5e6m/<^OBHΦ#(o!M:R[NJ4w^p:la~\Ï̢H8'SI$ "jCu U}ʗ^( 2 i9( oF)1%.ObHD"1uZRCP33vȵz@q- 07`  o5-f E:?P-)f wʃrpϤK@Y4 -@cJaUwQЇqGL1O82wbi2J'?AOQK0qg8*P1F:.>Ӝ9)VZ0I) 1(" ((`RЕLP Wx,#aq9Ra2#`@#(4 uY)L,u5 vz2 YryRE ]` !D w`SyV\"*Cylcn]+~mƴIU5OZp"n'g[WҥԌo$ ej@O(Q$x/pN(AuLZF%ҙ]jFH"k iOuJdK-QoB<@ҴR;#6rIAR©,]%̈vO$ANSUp jqK<q Re4>ty@.do$Rx|fwͧgg泍pumz7xX}vtz=S]#" "Myj0ɽ~s6~#5>qha-="r8I< 5&n8 ?++e*+3Dݢޡ ˁhY;:K kڹ\NNP],K8K&F*kwV'xai~oaGQIHcm؋ٞ>%mȝ䝰5ѽsuR$35$<$xJl U\gAD92㎺am WO;gn!/,&+>.Ө*(ئ= (8髓Cd̺fB!WBj3o'_3l|P9\qD3P/Sotkk6tԯ }h6A;ypl{l% Cmu@ki (q"eUۿnI,Fyf>TL\na@פNk-,X{D6#EY9/ <\(gEvÐ ,;=AP, 4Kz9 C=m]T6Bh`A$c9ܢEE&Mf>wr:7aE}lp6bhQZ'sԜs_܀4q\𧥵U."<=iKna501e>]=yiu`zqf}^ku_E̤Y$nJPTV'`:$2߽2AԎK†$H]~%j a2ҟ*! nD=,䛮/sΉD%L5A8'}Y?:W!@[T-V[h)6$µ~Bpsƞ(ח,%ӛ1[,MҕstS:]p8$L%.(3+j~K3+f9n p!@PS y8? fǁ432 ]c`S(Gd HJ-:~Ćm8n.e}57ܽK;1'f(8:E/A%1ƿ tWf궰xFP ṔqPn_Ƕp|~`r_5؜3B-7:9{•7gp2k`<l!m] x:cI]A/k !\ 波0`La3#XNGN|%ԙ^n\:d`7v(v1D>^QE2J@OXpFsd5yc!A  lrxLZSxNɲ|RĒ Zna -kƝPGLs"9 ER}FSĭ"n:Ovn`24#[I,# upeS8{a'^92G2 C쮒 rXĺb4HG3iz̤VObLO6A\? f6[>PάH}4˔PhCwg7ajTݭ8>c'Rw[Ecɜt@*YYd_G$YP^/ݔV`PkNj'ugVʑ%"pa6r5TLfYL鲺:FF%jqpߨh5)v6G)QUԆkE KFx 8'tbv'-91y~^R+/o&%"P*Mo-igK8c߷[ϞOCG/z O)K].?dyHkU8^e͞=e\!A]Ư}#Փ'2*H9K•]F_1oL#廅;,:[@;Q{'ǎečfC;dnx6;|$af-HJhh+Ir[5G2}m5_R}}A8JYF w_,<|a ma ΛTbKO4w3E(6wP8fy/=bj60x4<+˒=r6"DT6WJ75,~6땨A8/t_Y6f"`` H.R NE =#qL(.H}\X-cfatZ~F4y·m2vfɘ\9Z]H>Ҥ/XNfV_ϓ_ 0CGk>GQR{NꍹYAΩ(ܰ?*t0'"&NY(P4- |xن3)Ё]Lp H\ia ;Qnѣ0}ѳphWз-{LU\mt aRZUsN+ju4xFQŸp%* KhKe,E{*@VL-bE BvxN ڊ͓c V~5;i0Cy8}ZL#6BbseqRjυx1@I@M/KݴMc0Ae0W4\ eX3C1/;y4ufij\2 r礯菇1-&R,j8Nons gm.cKnZ书lA<4 nYz lr:[nG.jT<nEtg 1ON UXsT E(^4NX"W&I"]i;b7DMsk2jq:7eR5?$LI5">i|mp#B(\K A !BBA0:ggq%UZuKIӜXʂOoBQ1<3 /j ER-"h_k: 71slHESxiLMrz\Y_!*@7|;؞΁ h~v' % 56kIo+颈H"C8e`)' af<"&ܗIt{73459҄[a*W*Rv4<+ͯB(#}rFlKLt:4)EP9෫J$mrc;gGymUڟ^TZѦr)ȴ|V%7[~o#rޛ0/l6>Gy. F&-7KFƘO"`ȼ'A>vR/Êo@E ^wK/^9v 0lW O$dӻtd&B+HٔSy;+0EEq϶%W{7p<)YhꪚF%JX3& o12[95MfׂK 9uӜV y Y:y[)rPҧ(DSw5PWDsV(Wzg2jG|пb\@ST՗O-(EYVORhS9< iȶt< OOS“%y53f)<"7`'15m8B W59] (XrءԼNmp, "%4Ѡ1_g&n㴅2Lۣ{1Mͯy9%pR'-2ƵX@@g`̅by ^}NW̉$4O -  %(*z SS⭈M6xZJ?6J0M{:=':ox[nY[SdnjsO8hnԴ/T)(p ՄC]:)#<`dGq2)E(]cl2QT#s"32h9(K+Q:կ` E'+TpHm5 t\%|rQpÅ^ p|>d/`Oۃ864P.UOBVQS92+& '5HªhKFSe#y_kN8=<1j仌%56\j;'7Flد"W^ܭ]+1ӽ6!j O OQ >qemd,pQhЎ0v| קyrB?;Fs-9=Ws+M>:cq͍D鿄'-JvTaF{g|qkOu+Rx {ËgmB. 8@'!%zg=>af$L4*~8P·01k#LTY}Ys; SUj6N:lK |uSoM8Jg`_v/qLJ58it]-#׼ٯEvbS6~FRzQ)aN9 F%,Q$T0AqadS& bK卡\xlŶxv|R} ~sCibӚxDpYj:Vj84մ4fvA9$:cʪEz5H))fFPdp (fdKӱD0TJF2z7l1>cGӿdoc %gCY- a|> (&Y3v5K JP܎(BPL,cCqT('6_ +jCSK3T? MIa64(qXՍR#xʡXH J|'b#V; 0hrEmɕ-xS6FMT՘E'-)d*Jo90?Ziyk|q<]ZRiDJ48]R[plK(_& ؂ 8P.Qx:K%P+)63?vNjba6Zl`Qp]ԋuU:%?ٶ!kGxGu gzۖ:0(},hq]ZBÇLl 7qÜZ6^u㤰JtdEdLv1IƉN`m[Vy 7G8Ktn Ob6%A6z\ C7 ~qJB eBnyVHOc-* K12?ӡ Ego }.5%coc&?F1? %\8odhdMkQzt)J4\Xڞr6An';ua'e*D76 o U:B8iKcAK#yZKMh3ewib愵?Gm1@h,vJG>J4w xV&v3TÐeB2W,%Y\^_+5Y3&_O6 ?)˴x$,S9'l~,vEq%Qզ"-{73HU'= ߊAp s}BퟴX}@ovǓ3n:EH'ëh24

bE]< 'J- `|!q?'KP+VJ|3 EnxTKUd,8{ 8;ݯ,}[..ܑľw4T嫨VভT.8b0} 4Qt81LbUYK?̢2Thyac1_|4OvKkܛ,F_kWZQG=?@%Х&dlv ohq4&{(;3"VJ5"0u48 ɨʍAc/Bd:''SM&1]7Arv..o1) 4% iT8Fp" HWi Ǥb%l*=:2,kJ#>?;gdC5u;I<>tp1-ι$^7c[gt֞UV7I ]Nlʘ? nV֞Ω$`=jtN!y*ӄ1$Ídr]PgEѭ /7$x^xx9/@CN|ւ78YO2<OʊiVoC f@)!Vhtʰ3G~ofCS*z7ck GF4.1͖2$fjjkFU\iMe+oJhCJ]!R*z!s)ݾq Cl([7{F`Z(0^b:D芏x| ~WV??ky|[^S,p(1$ٱFI˄YVЄz"e2yU SFPO?݀T= s8}DJZ•0@N)`0,m+6@I1cg];],VyUwKҤpd9 Cز9pLI‡KiضO\iH}z8$bw˲rXI^ ̦!R C@%`:s댰 ewII?d8i.H 0YQt7ɢ™+ q C` N |0hM[cd%&$؟~d{,٭FtU-&Uy`cԱ1o`bZieK"e_Y Pp#3|:`?}঒;J Hc-tEŌ+Wݓ}[Ln\lr1S0j 3\ s6LA/do&k"T.UqgXF!+.P?Jjd.pfekdp )dxGߝ`WeZƠ lhbUTQ({e+ A)[+{OpmWF*x&2B2j"krDCQY$[VtHLBQӒ5D;);ۊ-:?)0{2&ʻMhݦC}(ZbE뀒H^IB ^;a$(}bƯCIYCuQ/g&H(U4_Uկ}n0^Vʚ  +䯍J>Fe|ӿ*k~~U՚>[s%$ rO^kFuh~wic.sd{:a?p䩹[ǂW20oO|'Ώj#GMFgWD'ǐr8m6{Q R(Dӥea**ڔ&cv!!nxPy^ܙUY;ntiN 0 s2Awrg90#.ݵ%y2E96%JyLl/Ӓ5]ϡCkXRs}+L)&9h2'1K Jt̉=JmBCc;ԎQx;:R%Pa~uUlvܬ4ow;ȓ+vY!j 0 s֥B88%p<wj,Q!O5t2k Џ'aP JCG){swt YPJ@f4LmO=gĭkcL@_,ae7N-- -xxX;hGM (?u6>h޻zqlsqg_^&狠x4mr*(" 1D). AGMv aEBL6F(,5;bEA[IXђK#?W/hwۄy icZ -ӌiJ0j[+ 1 DȷqbDh:4r1CHUh[fnm~QTlYwߩzQ@-жD07E`mm_8^8$oon6obzYlذK2o]wp%ug֟mnoX-:8B@ Q=09DX+k5APIq2Ś^-jX/+l3V=(nϻLU7 bֻ4HTgh!rѶ(.'N^^B1$,n/Z]@ [+V9ю# :!k-'Rdk~WPɝ-5i~[VrLb&[9}Y8_j[VEytL_Ps #6EXDYۊiCACp L(+VwWX]Iv1RC 4bj*@+cP "*q)YGWFc;V_6M(> )?$f96϶p$'B۪D@ۗhm5]ihlK|s:C-`L+ty">n9" ZKP2d^Q ;.[ZTh48ݢc0vے,|nb@Q{X/ZZ1V0l8PtCt0&j*t>|9 #r@9xifU/}9Bz6֓Hl;v0Y{A黰3 u8. 0JUqho:йAihhZpwq Vo4ZdkʪHn魸P[/dOB =z՜b -ӗ)0IdS%=Y;01O}{mѹ@+ۜgeqBγtvI'Q[Pȼ)?9"Gul,$t0TiGHэ8a(~q!ϱ*Ѡ4#,哾2jzdvBQ-kl硧P"a#wj-{(>39ϕ'q2SVnSl|(I;NA/φ,i1meDYnTМY⻒Xh=!-qU):Єf)),*N-s3x1^~gB1{ma "i p70`CslMJTD6ց4ܭ,LPy/ UCד % itT~UL;B8.zw>`x~~$"BVdKZp@ 6-YR[|m59UË#E<a;|O ieg2d%$=3 co4ɾ+\Wo{ Fm]pp{XTYYS8|\w k!4$6YPuѯ*JjQ3P[~: 回 :mCc⬎#mƤ8::ḋX4Eƹۨδs>N70g$8۫ :7͒sєc:)dd$:-*>*+va{a!A0vZWN#=ws>w}ئݥX`3zC;+ʢ%@3:s)q3=-ݱĸpɋwLe~iԁYp 񍍢y=E2֠_N8 7f o88PF(&sP5O佰A8?j`^k6Bꑭr5fdd*:.I)4G)dL L ne~3lrGy/v@Ὦs5&h-8'ŽL,n}`{{-ɿ~],rN^ H@'&Ms-  AR YP BK~NPRJፅ<:u*FiS6,tl$p}NGK,a&ae=VJlM*j7 CcQ{pM'⎋X܈SZ9/6#hÂ,᭐v3':rTfL)@t4eh GyΔO%kI[)s z{Y-և$)K}3[7*Lil"E.1ik0k9ADmY 9^2~ɯOֱ9-M!8:Vs41էnϙ56s|޿ GzS<وvC{ETW$EbtIP}61n.m ݢw1CG7&Pv%Ŭc#XeN?1%bsѤgNC]Oѝ)lKQ#Ń` 1k3)-JraDpJ]*t'We>^6tWPĪೊg3HTsԹOӲ1IXkj S3q_앴eS1s$EV]bɎe?†m4'@sB% #,zbI5Ph^`&y*&'&䚸RZH./MČ_hOuf>`.?Jt|0"}IV_R+Kc*|&G#B!ED;xVN!qdx<J@Sv3:UZkKB@ah 9M& ܆qWWgf*?JZw)de iۈb*A,Q8p.?)P;QʻP{ߜfc2qЕ頮P&C-XWHZ=q4L踳d n2SV$G8`ʟt䎝3dc~Ns 3N:}(¨A+BHTOX>$CO9dB_86UMCU+)a,,Pp46 LLvp45Gi#9v}ēAsJ~Ʊp c.NdQͮ_;z)*7.7qP.3XH` `dږBq% @WD|q4(Fmc׏O__(K{(>]d5ìfcp"abH$xzPvDౡ?^&ƱY!6hn360BrNun1EZm̗M]~i5=x%xEE/A钁/G]Mڠ6K|)ay@8}G.[mqDe"1%&ɥ> !,rMȈ(HWd6$rE؟P-qJg+<߇7Ҫ&HO Ej9C~M@-A?Fel 妶NDR֪]S&B]l"Z'kZBt3!1W@s/"J6L)#Пs]/O<@0D=#2}.f¿Q>LS[Cc0H{#oeM.,bų"'$A/N+x$]mfP#3 hy  WI$ʤh!Ȫ>;3aϻpOۋj8cQBo׆R:alyk̓e/%+znP :k'&P ˤ3r|󯎗9phn ;w :'^hEv!f%I;l|}ڢI~d*i)-ۑt˓6gY!L#vlLf>a~V= E1`~M^;u {l0r`[VRb[A C _#!T#@Zs̋dgOL?_Chc&F2.!_Z`'iѮ(Q'oƻT೹w9!C~&>%Q6 .ex,X/I{[Y;6c*6C Ɉtk~rUf@x~Ἡn9bJ]xWi(#WSD`)]& դ[m&]lPR[&YVP3Di~s4Ff64F(3+"Kh鴇̉PVNiAjsa Pz6sԜ?)kB55}h*9Ewvl4"eQܻlX7g=SC8#dk?.&Drc,G'aڔ $W/u:!_``Vfyzg|^ ʴLzA;?$LJƋ<0\"/-6>?vQ`Է,I " YkO)lų2\BPF?t:v4x:G!*A'3cchvӪafz|֔%tUߖ< euq;F7ɵAA"á C_`$Ŗc"E'ݞI2ZסrEW%|/d";X@8K8*Z8ِh딠LVk*J"й)dzh23]G{~kWPXAԗF a3K86etXB Q?4\0I'H7Ȕ&m 톐㦱9ƛ&Sε2o\ x,y En2 w5DU>,흅Bz7ƘVfclL 8sy2tf̛l"NҪsn7;A;~" ")̽жN "uQtkX% 65CMdY+u07:O 2r%rb,s86gԧ!;'廓 l+%Hl$)w99&kp5gUb2(F$3IuBmSfq`w-kUu%Ksg'oZ{ll<]SǪw{vju#S,Z3Ӆ/^~Z/sZҚTԋ'j7^  gKLg=Ϛgwpu֞a/<5`Ch? '=oEܳf] (}ڋVy ғ-:]䱖mnMؽS5[aNm*l ol{L}NԟL?Co|كǟOBθ?ms78Gpt΂"MUaZJ 2LBm4.d9o&b}kYB6@#!AS佌fEF0İeCB7ɘHCB(4)`ȝWքQ(]Dv9)4c52;(蔂({ "z 0AcN ʽM6ە7bDn$ǔ01"6R(G( Q CbQu)E1 k\=fRJ+{S _w(C&8]ZGoN>ԚuItv?6oߝwG{fK04[5[RuUp s ~ÓFUR doK @/8h@uިzsn7N>Ro'ۛ&SSǵIctTǧV]Z㠾W@}v[j\&Nz]q"T ~ۅ!q}_aM0ZcIZmKW; ­+۳ uu89=GG{1QUǡNj94k :m5h(hc"lXg *2ԏa\ ڇϛb5\[ zYٹna;z zJ킑FqU5ި^Ah5Eé**o6'mmۏ/}T H[拦4v X^}\;yrPٗ귿HR/^费[KnKUKs}Le/6/UuT;[_`T>KS9%/a8ҹRe_`mQ0QKoʽHWq[gq{KWpک%„ݕnum T~fF3R:&˷,^']5ЏD2žv{ Wl3B}ٯn9mВbCx6,DWw |;)r5&ƒzwzHiDT:PhgT~x WT'*GsNJt5OLҰe^/4s1 ;0)鐗ЁzD;N.9E|Wsoyk/9 nQh*BxdR:{څ|J' yCbq3G" """gvO0_KK꧟1&0o9{[QF~k2Pd;Yg!Vi=~we&u @ #3Jq2$ 0c&5H/Yz*?!-YPBTPs< }P1CRR^#Ҩ_J8ئ(ZH=Z#JR2tW?}b,eكrʥR| Ja_]e xVr|>%ݩ'SOֶi>y<|>y<|>y<|>y<|>y<|>c / X