#!/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 sudo apt-get install dkms." 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=8cdfab857a4c2288666817b6e77d550e # 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 p`^]mwH֯qv}0`;q2[; vsBb$-nUud d/UBI˼+~JVo`$=~vʕʻRT@yTcT15CW+Vswsu0cR\kM{q'EF̳}ۻE es9Æ̜ ̷3a;,J.ݱ<; @8CǢl6M= bLNvAvRj>sN;0]Qyb ale硅C14R052W(&,*@ *`k$0Eہpcc3=iRHN&bv7 c5[p#@܂ |!:ܱK &2{2R}t͸,82jn%1j[dAн&|OO5FB w{sGTYNNӬ=):= eSѡ&U)L:=M ākgZ5Yu9X @: ϨGuȳS{hYr~Ysem횊sjMӱFC+g4q\. v<-+LkhkmtSax L "oy4w ѨNΕ$靳^M5 MMƼ%Ӻ}=,}%IkMOEz$N b27JtIv"E?+_NМ oHb~o ,'%(dƚDzl?(tAMg(Obv^U?W?d_uT*?OkJygg'!dN&3sĎIy[i.2vq i#t= x x A(6a xLH@1P YDj,5I-(U(K8hO\y'6l;BGeNJC9PF xLbEV9i{b{`Ś|jQ khBzO.rb=LPkwjs>Z~r ap< Z ؀"4l\3癓慽L@K1%nۡQhQeHv|b@Hi nn\77~+}Q3͋";~4YQرVcjZ؃ 0p&7f0cyV%S*nDw|~ R^ !s^#<%6Hgd!!M4Re!y\YĪ` t _A/BA0flʜ93zL| b^6roB>| +g8bȌSXSCzE244vhK`|ʹjzv/?V~a?$z@ѽUD S }(ftW8^5WJJt%mA{OI+SMF=%*J ^_Ok2KVy]T̵nP[fy y'=oUkjՄZ1Ѥ滯Ƙ+uBs4Ԫbt6*y}w@mKUc+q֎3ZOj‡&{d}ZZ:}MާM@Ԕ:PT~HkuH~: %ONH-STC^G^SZ G^!O3[${{{kkkk_' 1NtqT^u?*ɃfuzJj*$rRތYvfCL(ދc`j`gjg_3 M֧eѧeޕ7 Ǜ7f-~4 cǃPP P]{),%kJ';~K1S~P>vc`B^ğA( UE-csiay\ x.d+ϓ  VJRS?kI&gx[(l ɛX"f= Fgb;{ nE  Rz7mm9SƧߎYua 0|wXح5!,o;|p lbDq7om.*\RKwl)>©A&XF rl;WQrZ,F. *lA3>?{af߿cbL30p6s ژzyf47"C qBqc ̛s,>e*}x&[91,0 L#p>khY[=zYcC gE-U_T_vy.`{#B+H qC b[,hvj?{n`z#׺jZj l%'K4z.zr RmAL%]-JA%{7`Gj{C-6 >&Wbv&W-hzֵF-Xz<`9sv+ѕʌ1ܺsdJDo6=ёs錜$݁]o;D/w̞Z݃a7\ê y0zp en_bחuսeVm[3ϳ'Ax\xr|?jdK9DthÝ2v%xxg?$=f3K6#`{'C>aw2xj4=Wм8ϣ 6BN~y(&\#YQDG `]QP=8O:ZC.3|.cC00pɶ/O$8t-W\<7A!5ޝuy>ME_yN9mчe>/-W58gz6fLc&tLXݖ2`|$y>k6)36n< lx34ydA<* 2dt96W{C\z^jc/ ;45n-H@@H8m+c`@=<ÉyGD3\e&ʪ551ݧ] *be.N]GV8ah{rAmwZj*biBGݖ@B}8Б|.ЂIVzAEGeӓe)rɶbL,)ꂷb X 9Ebv妳@r8Lr؞W2J-$ Rÿv?ˢU* GliE2Ԁ-~R)qGiQf[8nos8%͌p2J^GR赼K8^"8w]?wjJ7}S ?bˌ1^/l/wP1A?qJ(~𣔅o (5jSZ7Z n2:-eВrF.bGKV}k)s=Lt<щ4z<`af}su '}@Xp.s!)s?J@O%s }2{qKE#}@R0ұ!Aγa `ɀpaSH0E|yd&R ܻgHJ/ng %fəGQrB깗<$4T8O'SC@LSipkŃgȳ헨*hW L4\=> _=g_Y7.Lw%{fDI̸VZyĭsG:;*APۘ;_Z_RK5ؕy,>O>K3 Q!Bosk{O&jxV A$@X)c*Ja1dlֵ&h8)A kH-v yL0#+lON{sSuq2zEq>%H_1A/#&GO->9'mϓ~h.3x*Hf^(_`fV fd,3Crs ?v8 $ Y ifuZXhBH *HJ$Hx¿?g?X~c7y;*x*Vu:}:-^{aӕmή`ѡ&yJm?ʊ8; 2Cqh Qo Yo{ߺƱ5 #a@܌}2AIR tZ2g̓3C̣̓̾ԵZ䜯]]vUֻ}޲f?/%r9}}_~%hFLaPu0ldѧTN;r0FE[eo^^/'Q!azq 0p% tɘ [lkcec3k#U>'dL2O?']s{ 3j"睊 p @Hq H_ (,sY+&DBAHpFڠ%cT³/R{<#:Rˡ)lGw":76ׁ0Q0Q N 2T ${!t[y`:J \ʞçjQ<}EM*0 G_A!+D^ȘQmŚ\\K{b6R(zۃvи^ SbϩՊwNi =otbdUahuA2|z9NQ&'*  )a6C4%@l)y3>{IF ]؇n uZP q{W+R6Q}W! {Fu&a~򿗅;9c*z9cz| ! ~p\F9[td)(YFAb]7z1 |Ûi+om+\5}>(]VO3()Qܔ1}o]Wr4l .Q:*8+x BP=ղ u'*ČO"X#ѻ¬ -=V%ˉX~fxW$#"tdhIŦp/$\S`(A"G%Erj gx?Ԧj'O1J[m0u#/b9>- 礀'F:N,2ێ%Q]̐> Kb޸WRpGhMݓ ލqFacQaVt G۲fľ1bB cEC(? +xPBԅawo4. vH.mptIf= 1ưeqrrLMvGjuaHk(S䌔(2Fjt0@ͥ:cKb7&6k2.OTqkUS 8Z*ON(ؘO"lO4}|jIbQBKXQ0Sxqa`+n00L,ZEYc^'"4T/WPy0j@mE|:şK' ދ<_\[DF#4 X+{i$; ʩ kdj2 @i!)h:RzJEAJ B0 ʽdLB,Q|sQOqag:)BSj1h9 -HLg[)f/Mǵlb}%73737B}Q6ϫ Fלt gH >ؘ/; O,8xPW{}%*΂#X?/y%&2%"mganz/bdIƏGh +EC2N7x>BIw7 DVWo謹lzCS~;*5|ah924`҅k`ޱT?j O)}So~e`MbuޫmX .)43_cE}C0uodpaxcŒR~iJU5h[-(˔%Ny/±/HF:,h6poH[9f.LGtjd]wuDm(UJc8mBY@';";#8|P#hT\a3DDX>|M];|#4\inelu|=:{Ei'fvyq0{48E5nZ1a5/ @qMkWQ#J+Gn v-vǻ0bIbŤE6g)unV =)tRc [ٛmuH(V+O;/k)aDw|/7\Ru@-3æ1QW'k*fvЫ*Zu4PCrgK)gy/7*o&>{.ch b3X@84Y1 IL& <U8(eVAN͍cGՄ?{F.AKϤ@ps1qcV .Ȝ@7g~D|8=/X19ǯ&gǃ/8D$V-XWi.q/0kp/H| giD&z/1N'aӾ#c)Fmi. ,,tbMhHAz:AZT)h+l>Fh:s2e6g2|6Y»> #O& ;vЧː o#h,*4MH5td4U̬¦c1KRɹvxWeGbEqpz@ЀKmt} 9â~-VEƘU@3tf fLiJ2dpn$ڠ3fA'J,rԳ6/Fr(a{qRr^%JJH{8-? 9ۧxL❲Dk99Q3[lK|(9cܛEPw®_K6& /Z0freь_O$]UI7O?C>+,@d5ܲ9T hc, o/?Tm0^ꍢxe&TWbj+ʊgZxNm%^Hz;TĀU$U}'TP sn+z<&s6c4 +8I%}qƌM5 <,$G`ķu{웉`^I5 TN7i"6 ݦtxO> 栖16'@:/<^~@cBnF~#bs>Ȼ/cwʼneQ[׽)@M&Y$W#+^zV˜ȏ T?L iU5М@#Iz+~۹]yuI㜸]vEҜh5}Lkq'9au#0xcj;{fSayWyKDזeZ,h'9qz+8$5oDrk RJRhxU2:) LQ$71Yb=DM =+>' t,] 3bo$?l!贲xH . QWԁL/^0,I%TOveE4{ *yI%L&n7lюNR 1zVpY 7:C@;ޑa,7)={ 0An}xh7"57k 7!Yx_XMyַy#X!+~7hK1R.- _֛Ms҂AG Mw sӗmIhФk {\b[kWKbhoN&$ fG|'肥e!Z6n0e1YZ+ժ?U}-zV92lAT3OnښH0 /gFtӀeZ.b*MHz'z̚q٫vW|ɉɥTM6nb6p .bP>hr]ʉ1m&Bޤqyq$%1 ]*^A%R)U@Ͱޤ1qQ,lߒ*4"߹r6gmR7Q _I}LMCmR { B||g8meLh,` 9Ա8FvXNQV'%k}o-7cJϕx,Ww]q syHچ̭.ߜ89|To2PuS3*Q)NA9<ܙ Q]xwpS/J J BcJv9}lܒ~7Wk?3?3?tz-uu}3@߾ :z#ԣ+rOg'&e!0yt(툏bّ4MJOuKD-H7;dIpK /a(`RqkK[uCw1Sw08ErVh >l6wDB1RmGQ{Ж.ڻݭ\UWRPUJ%VNfnSu*[C(0QY^pٌE[ײ>[IUIjPDW\`#X[ nI$i9>u4NZk`b4[ Gl4!K)\Yi늀јIT98~Bb0x#lH;>} I @Y^-_-i$4Ւy,!vlŤ\U,矒C?' aV9Jf $-\p,ND5r.|ݰ;TN'e{@BK͉X*(ievmӯ_]cE+6++++h??b^AAcxIJ4G<[<{8B~;6LEm(KI|\))wH=O3,/"#f.,db90TJ`SqߜiNr\plH azy! xuB7+K C ~RCܞQ=-d2fAwGXIU=!p(4mr&P7K R*s.k&DUt Mk|Ok|oLk|#qq6r5X,w1>)zhD-BcI81Gj og rlM<|劥*PnX{uV!?qJ@T*t Z6N=\aB(J_w41p<4!=ZIH?(BU){ʦw$xH1m _#FRrHklŦu.)ʳaY[ Ip ;BBPQhۼ=Ie7oONkǩp04/ 2"_QLQ>2l7j~ /gPR[DNOߗK6*9 `gy; I#[6G;ǟtSt )/P%N!߼Z?4x$1B)F<;e#odd-+:bʭ%d[0M_LÔGf(Aoc㯙g5{ҽW=Mi+f|? bF5a&{+W=x[NZߌƋ͕,8;cv|)@l Œ)@0cAE)@ R@퇧I5iO x~)@$;#V!U)@GHB<4H (O`R rH"}h RH^)@F':?F hqR)@b !yx hqRt=F A៟͞@JAPQ8- >?/D 4fhѐQ8[Vo]A.?s;-b]c$=z,6Y#kFW*Vz7muFU+5OunƮH8PW - pCYerDi%Q=xE@.-֜oUke|[SWk yN%8;9<|gaZlD TP'gܺ1IcfhSǸRAQZ(,m S%̖>ÆIgV\r,QC͍$ÃP8 A@Lx0dϠ57v1&׃BO7%va]cI]v@}fNO s>w~sC{}X%Ю&Q."POE + MVs+GWvWpʀyPnwTtǣ4T"qV%ț?3YCld߯?)K3M?_g߳Y,{=;ߍ:>ʤě A;g.[bN`)]N6 TdPE,(\g "ũ8_Engf+,:%tSY.x_>{[ iр3fx1tFkn֮L;SVjibY [6jeF*Ԭ}7'J7SiL?7^W3ϯ?;gvI tvV ?]B;1%^3Z>썻:.Zrr;lII{=,ڥrh0+h^ +0MH߭:t]zymt6ϔxxGE11d\燇0 P?EXL6mg\p."{1#dW^ӷ)' "mBV0,͍`b21^_n%dbO_()#Iܥr-4OWkɮ֜d#2FMAHeauS=_݄G#c~C{I6ӌ:5D}EsXe~K>ȅeh x 8g~sy"PP8p pzeh~t<:&ƆLdIZ>bi{FLsڠ,L E)1/|YIrs|^9cWV\R{i\&h'dﰃD]MZM:WkWf\ wiܞtۍz|{.SHRzU80YR, OUOM"AիȋPF1V07S.QkB?lC`F}/9d6>ga65gHOI3!Z^t@߼S`tTN6akջΝGζJY1 \ -$t7jr4 '<ANDE![3}WYuj*DzQ̝qӆv LQ n1= fޏg۵s-9=Ɛ1ê脩K&~tmaMÅ:sžjQ 3 q A8Rda`aaS˿ 6Wf1a  2HRfGg6pjHS!hw@O4ΰƧjm}L_ڜ Ex15qL5>?gL3Lw uPp{*==?+k"NzR@P`|  KN_:*;|wںIQ(*P]H?9R/rT`͜{3.!pF?ʏ1߇{%HCo53eS!KngrwAݗ,4Vp?ooIboB~[3oE PuQ /O4o[FNc~ElqέneRVn{?Ͻ9rrVv8)IC75!ǰڥ 6Γ޼U}P#>a H:$͋˛a}FIYsC٢*NvؼWii:lOb"JNY}bp,)ܾd^h47ĄҦ>|vB8VqK :O@J wt .(@ B#cPKH\vSbFf~--obҁn9}&4ONb)yIF_Z*8BJQ0k3],g8c1%Z\":Z9)uv~lgR f ^Iccg'[O+N c|k]L3o7fL/؜g8My^Zn0ꗮѕO5|= [NxO՗0gH}s^x?mäv^~ffM^hK3kx_l88/yAy"x&֊ կ*Kr{rWV_MGճ࠼Īm ,rnM9?9m(&a$8O@7מ&0W DMqq%}r_6~}h?xMi4NB9yiZJ7J5g?IDUBz? ï`ĶBj{{{gVU Iю]z:$si=* ʀGBd@{ѸA\۶kZ9<-p?XĎ5V{E{TrK'@]jᕧ@><6YVEK ytMCojQGuo"TAÐ)b=Y iqqkcgg'YUa`Qw&aI+9;AwK!zǔ8<)kdx SWF w[n $?Kkth/ai] X^ V^]VUT$tXӉ9 /2F+'s(NP$d&-P Bk1X`|ޭ-f7g#P"M &a ZiSCF4ڝ|+!B .g@~[vc_7 y,é$_o<%kсKŗqpIC7RkIpyG\ߗŸ*_^0 cB.D̈́AeԻ. *ȲO&fzhP*77 [ צH@" صUs (/ۈ2aˣ;- =$Ln4hE~A']??vͦEJ%_tדT9X𭦸)qs7ևa]WYE]`3X UH԰^Ƕ1 EKiLx{ JX8a\{2g0AIJѝn =j) dEzJ5̏0>fZ,Xt# 6(` \ /%אL~wP=yliDkk0qUaQP)K仌#53,r2)ӕWI S2SX5 ƉN|P=M`&$A&b_׼5M-zP E`N=bk8BgȮl+;Zqg lÚӏMC6ќRxmNJG½MVs3[yiAR _:aazҚ I,H~ =bP^z`'Uܰ1p.nЉuPZo\n bCXΊ6Fz Uf\ 5x=dS9L35ݚpbl~=c iYa_l> JGn 1%jJ9rC#%٩;e8{R~I|prKj4D[rxY"2ҸiZ 4U+327*&>eC.,lu*4 ^r@"ƍBnT{oei}ok{kzyl>͸i`wM aԤO~~~1T`R*NPa&Qhw3#OYEmAhs~1 busyeC֪b/Gܸh"$on#a;bcyu%j{|4=p(ROnjGE$FEh 5F-셅Nx۾ӏ\h7wht[JU7DC^т֠.0F%JZF6邦H6rQU,>f\ h5*bs6 &Iе{^KCx0IEa5 ! %& Ti ,W -[St 4Rəsb#pIpZ'؜=>8~kGWQ$(A(Hγ%K'Wa{v05@8>{FlˉA4no բYMGgB/!u0D ~z#n<cIbY1ϣrrvP>4]TIJ^t&&" 6(2;/"]b ZܰtD`⌚Ad-{ԛlgԗ(i37>Ri_k_]Sm-:M'G Ę,Qw:^QҬfB\[yS{;H-w\ jASSx>$"21;UhQ>Z0_a1VRDH+ޕ?.g ^x M0 a"xډMa>,y(ZvZNܺketxK[| UvV5VJLi+yūS.:gSP,3~Bt0B!i~E|U Ќ\ ;FЃcW%YFN. u1x3\ЖEhN6r臘*X\EdX:j5FmHto{YoЏԠO5͇EJHItY[}b w5ˑm@E|76.{(FiYXV Q]>/:@'UqT)Gu7R'pkfK tcCkKhX ݖ^%D_n GDt\V fyGSp saZL`US= thX}b ;ebRL(W0P 0AwkO9N-n)26bb`. -H 7`Q?j/+D鿔/Q#` DS<__[{ 0Ђ/>K?J܇ 0>?'CB>?Bć>z== 8vS#y(&!a?a;pnt;p<,1G0q)Du0H!)txaV¯| o rX)L|+r?/݉6}o̯.b]gtu(OaްR}Q"0*}SYD^/=Mơo Gw](-7VUΌYٙ[:ZlNH(lZq 0k쵰uQoPy!GA H,/,cV](<.E;;Bcx>_"k|Y,_/eYaUvYQZ]n8cvker}bdA'c-X'^v"19&DR׿`!~>x ^/Z'G#PP @8w;B[z T#Sh]@7X$TOڙy4K,. ˘!V(Z1,[,bb"$2#f+ lWT|{{KWY 6. *: Y+(/dW9|^ؒ囊:.sʐbFqGw{uSa.S9}NsI-M`Yդ̬̞`!R:^HV lCLck2DI!pS0D=;l`0b~IfYhRo%WRq!Ϊ?:/IȄPrQ}xM|Ih.roဢ,qh}qM'B/x_*Wl\ZMvQZ$),ӘrcK<4rtb]`|, %qN1}ft};QNTᆐE:,@Nȯa<|Wҹc~JXzprnV ~tY]vB%>O8z" u-G,NMhǎ(E$j&0YDݍ}qo,rEʟأ׭?_mUx#&cG]ʴC36da'u! 4I}.nayw<hoT|x1;)U}H盿lk`q|~iM= gk;@Xδ忭Bro۔Bܘ:OLm䦐Nm='pacFf mKphO a^. 0vZCj$S3?'x@<yM5}td=Z?>7_6g__e_Wfe_Wfe__[˴k%R'@K 3 hxT8]b*[^X(gKh @q7! .OL331۝,>.-p1F- rtj#- ́WM C abԲrz~4)QcCP*~{LPL9OkTҢN^g۪cN^rE89xUIq D{"[$.,oD| mb+jc#\ 1XO+#ǝWa河,|cV6W],hC)Sic!EOv"ӟ˭G27 "c}-TuJJ ٙbLYhݸE86վ̊#Ӫ%SWZ :aRYC3ZɩhnD)H:+1z c``$ |KX:k +jsОTU޼= $4m`n#Q_2`$GnDq=D3*P̿=bf)jzN/fQgG-ȏY9)SZ'bD_87Iwb0qv֌F+ȎF5|F$ g|m63ڲ?>eC@r/ Kٚl]Y,cS qgqG.o jFk+[dwl\&1iZk9c>g|!ovbe1gJ1lFQKZ/OLb}?/ f9#1%jB{g+gfgnuye._+) n?l_.Ɩ/ɿþ8Q]^|m>]=~Dl ƍaGqQܰKh7(YD 5 C͂fPMxg wNk7f{HK|b^o0e>'5 p\T揘4IիV.ZTslѿ_1˖HVJ&Iɟb#Zk  ໨?JougJvOL b?Q~Z2%7a} 0kk(X <'jJSNQCM1~ rD.j&Ulӯ7]S[P #?419|O_`oh81 HωOq~~Pꏀ9y?FkXbix`z/Ky&6d2k%9!k/^ z'vtJC r| RLcW}~xکqU]cvbD5H 0YLf:4Ӓ?؄驇CJJ(u < p13WM<nSuM>9Q3,<dJ>- NMpuw`@s';㞘Kkxax){~#9=^_{8\IZxrώF(;eGhu4 o mE qosgNf>6nab([m60JXz{%xOƔژ=؂ѷCmlp~P'Zέ̉_~`ߛO<]|IwQ,`; īڄ+s $b43qEGD#۟rﰓKY'AI2T(~)Sπy9Eʧ7JHD>oQ#q+!3PϞs?ҟ@_FDTOBgvuVBW2PqQ!DH4)O>'d}O>'d}O>'d}O>'d?j