summaryrefslogtreecommitdiffstats
path: root/rescue/Flash/scripts/rescue_common
blob: f8e657d72b70267c50cb7469e4ce22954d0d0f11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/bin/bash

function detect_version() {
    if has_label Share; then
        version="1.0"
    elif has_label MDVUSBROOT; then
        version="1.05"
    elif has_label MDV_FLASH; then
        version="2.0"
    fi
    usbroot_device=$_device
}

function has_label() {
    local _label _tmpdir
    _label=$1

    _tmpdir="/tmp/$$"

    mkdir -p $_tmpdir

    nash --force > /dev/null 2>&1 <<EOF
mount -t vfat LABEL=$_label $_tmpdir
EOF

    rc=$?

    _device=`perl -ne 'my @l = split; $l[1] eq "'$_tmpdir'" and print "$l[0]\n"' /proc/mounts`
    [ -z "$_device" ] && rc=1

    umount $_tmpdir 2> /dev/null
    rmdir $_tmpdir 2> /dev/null

    return $rc
}

function check_vendor() {

    # list of supported vendors/models

    # mandriva flash 1.0 (france)
    vendors[0]="13fe"
    models[0]="1a00"
    # mandriva flash 1.0 (brazil)
    vendors[1]="0930"
    models[1]="653e"
    # mandriva flash 4GB (france)
    vendors[2]="13fe"
    models[2]="1d00"

    rc=1

    mount -t usbfs none /proc/bus/usb

    i=0
    while [ ! -z "${vendors[$i]}" ]; do

        grep "P:" /proc/bus/usb/devices | grep -q \
                "Vendor=${vendors[$i]} ProdID=${models[$i]}"
        if [ $? -eq 0 ]; then
            rc=0
            break
        fi

        let i++
    done

    umount /proc/bus/usb

    return $rc
}

function insert_pendrive() {

    _tmpdir="/tmp/rescue-temp"
    mkdir -p $_tmpdir

    modprobe usb-storage > /dev/null 2>&1
    modprobe vfat > /dev/null 2>&1

    echo
    echo -n 'Please insert your Mandriva Flash pen drive and press ENTER when ready: '
    read READY
    echo
    echo -n 'Detecting pen drive: '

    for ((i=0; $i <= 15 ; i++)); do
        nash --force > /dev/null 2>&1 <<EOF
mount -t vfat LABEL=MDVUSBROOT $_tmpdir
EOF
        if [ $? -ne 0 ]; then
            echo -n '.'
            sleep 1
        else
            echo -n ' found!'

            if ! check_vendor; then
                echo
                echo "This is not an official Mandriva Flash key!"
                echo
            fi

            cat /proc/mounts | grep $_tmpdir | cut -d' ' -f1 | \
                sed 's/[0-9]*$//g' > /tmp/rescue-device
            umount $_tmpdir
            rmdir $_tmpdir 2> /dev/null

            detect_version

            return 0
        fi
    done

    rmdir $_tmpdir 2> /dev/null

    echo
    echo
    echo "Couldn't detect Mandriva Flash pen drive!"
    echo

    return 1
}

function mount_usbroot() {

    nash --force > /dev/null 2>&1 <<EOF
mount -t vfat LABEL=MDVUSBROOT $1
EOF
    if [ $? -ne 0 ]; then
        echo "Error mounting device labeled MDVUSBROOT"
        return 1
    fi

    return 0
}

function mount_sharedroot() {

    nash --force > /dev/null 2>&1 <<EOF
mount -t vfat LABEL=Share $1
EOF
    if [ $? -ne 0 ]; then
        echo "Error mounting device labeled Share"
        return 1
    fi

    return 0
}

function progress() {

    echo -ne '\b|'
    usleep 100000
    echo -ne '\b/'
    usleep 100000
    echo -ne '\b-'
    usleep 100000
    echo -ne '\b\\'
    usleep 100000
}

UQ;y}p<wU~]j'/|ߪǮSe kQJFX x٬ȗ])rhRCS8VK~m%QT-N7nK*^X)Jy~*/7NOYo;IO8(͸>$fR6K`ԕWk{\fw4lT1C-'rB2yՅʖUY~*^G;&&*Y.KF,Ȑum7%ᓹ1 id2:+hzKۮ].SeaI6$$ q_;S#]5 H*S׏l MrD; C\6i~Qs:|osUWHfXMxO?ыܤLjR?;+ؼzBLVkX9.hN@ȵl!y,_>#7WRdyBAN𽺃s1[1T1zTN~p Cw'='i2^Yv&o@|cwKDHjpM cFTDϿoh^Z юR܍۳8k[JZ[0 )%@O縫54j\ :=X\@Kr mW /h~w/?ІFv,_N@Ĥk)`6 j, O%Qϐ [d*?jbAkt-s?H7sO/ %é):(]eS6HH.hv"2bbꦃ umX /Eʛ("4{]dh洁^#tXt:Ej0u Ӷa6FX $1:lQjmV4zj,ڗ9Da)f?&Y$V.К r^T%]vOC7rf Ŏ~[8!jBr![()؇nOZhl+u_ŕܺz%/qD<?BdkGW$ỂH,"[J?&C5jt=z7P%P7l_3Abbz~TQR>XʕK uIq#|`lO҉I09Oms;|2J ^nd-IBoco8[2K5h~vK503av U$|pL4@_N3~;Qt9KoI}+n&L P5-;֑b%~> x@4jqQ͓큠O}w,WBXuuK [6*`׹Nu Bg^:m;w#ԟɐ,dł^I#j s(gN2NQ67,1ؙQ C<@Uo]QP$|-zq4YF{0 ,%a]_|/ø* C(%kٙ*I+rP߰SU&Dc93RƅzC*mEB \푷ɉRK 󌤘0&mP;ZX`J}[@x(@㎓%Pik26&HW4UPFF0K5‘Ezu'6/Ɨ?U 2eo5u n0*H<+̳6*>9t 똦A4'4uǼQVy\yD7yͱek>c*6,DE ZޮFCvƯIM>u d&cTBWUhyRMfh5`z4Lx}{weyq>P Ku#S?n ϫ(i#7MSnbs\]z[2`堯mtACR9|0.40*;>7U÷D5)ܚ_\lɋmPj3p0pzveV;҅_*I%TP/eYb7 Ϸ~C])i=0@aG<ݴ`r\7ɏD0i̫yȍ|p8W6@L*[5{ a< djdT?+B3:W9ܲS9!JPQUmZm}sӝNWh{<ҼlrY_.xr! U8 )1; TawTd4OI㯖F e`;EOUo͚VѝP2 uTh )ѴN{9Tk o}/lu7h> OX.xz9_ټqRP?3qQC;"@g (" =ldfLo}PЋC[oWE|ݢ+c+<xSr Fn`τ 0DhU6ʋ(3ZAzߦ T~: 6{7*ӊ՞D8;P8W\I`T&뿏UCRQgwRř]_oe~.g|uKuR6g>r K ؖbJp> ff=ǦH, i)P"O~,U7ގ-'V&Kcrz⇯@s4.w`nH:2Y O`ݲ5sP Nm[= Tכ+D9MDH;~U1"EՇ+_uxCp|T #1T'6€$ Sjѵc/ܒюk0/9,! ^Bl}6j 7[ץgh߻} lJ]I#7Z]Ƴ"#PR;_Ko/8hhF  ࡫He_gr5A[gغNYkߚfԾ5(nveEgeHsfVǭ|C!Ӫ]Lf1?4DEdnD% ]|E@`ޭNv|E3q|/_$8?uyjF4g=rbSx G'HI!/\Qq^D1~l;uuAÃh[ĪڞvN/tjQ,t/z{LXm$ϐCVO17V?on BnWt7ZɜJ40:H5OgҬjjwTeUu3 OХv/~_Ȯ8ޮq_$I{n͎ob%xF',r=Gd@99x=BO Oϭ:CB Dw7^PZ8KY|(lGdc];<ޏT+vHXk6$jp $v3'ii.DKHe_9e7O| &hC %: HL$YM 93"Mۼѽ$,M0zl "ٵG,~6 s-pw{Ngz۞;c\H4,uyW_4%&vNԷ*љ5^lA;p,u:nDOCI쮊KoRIq?Ε,L0о:*·Hq8J:GZ4ov6 AV!@ΈpiX l8Cc'8 |Ȫ ".v 2#{e{lcj^Wdic5 Z ;t=bGe ^Vr{lZ+!GQmbwb }Hq+fnJG}z iZqQfP}Ҩ.Z>B!Mɢn-uE@S.:8PEeK(w%D,J>q$+A)6-f=(i]d W-$ӇdovU $-3y :Yfɗ;`5s3d`i"r-saª.ъr:pr vC@:X U+:[ R7?ӏ0OAXLXTNDp5I|5 <2LVčf;$^/[Rll`@ۆ\.j~. I 28x }-e֘x&3 &Z%Fb4CUwIF[ŝ\יF Xfq0iv\|=gTgŠ9dy_sHFq-4g}>P0"ͅ/[4?& (: epy_6zTNSϪ9K#_ۤ_R Y2{tW_5o Ni 2Z >Y10G)lTuv`}7TKt/!JQf03Ԭ)2{עvHو\SDa,;4W+ՔOyLAoa{|[{gCXE5Bl9.6x']hQyyrF p{9䮵&[,r& S>XwBJ05?ĮrF0yʩxB2ߘdNGd kJoXF [[lu L!e5nBJԈ'} Nz?v]X4kiH&K%@qvy:4]HHöZf_̓?:dEƣV+|>fi`TUp=JK[UjR誗8Q<Tj3#wH*͚\\2MY'8`ܣEp-o~g=R sL VDљg{LPk]L. &9\Xrj*dXO/ђ糇̷Նp:J4 _gG|/7=yrLa8sKYM׼ix=Qe$z%XXt̤wGG#4U x[ȏSgYj@:b0ݳ?N@=djZcNc(f ]6U-+㍀`naV*NNG0Y@[y| \_b`eZ@&Bb bZˬ6X3!7y;qZMxx" ַJVn#Vl[鮩M=*=tpAXWd1FT {!07T$]:K`ϛc؟7 qS>~uӑGc›@>JQ2Q!m.}gMlwZOk˗cn+DhMYu`;gq޼)2_sceb."?\B !E"IeKBѬ߇FHÿχ;_mo/wE1 y{ǛS^ V n6 OyVQVx%ŵ͑B9,rb'+XiV*J'IThtEq7SV-y>:l=TԊ8T}ΫUg/>\2:^ͪ8D7ZfU@P;)Sw/nU ڵgDFv5su'cL> ,æImhp7JTaApK^޾rAeK*LOKN[d|Fߡ?g:]k L0)eG\jH@6Z X\WqXZ,tW6`&|Nor=-,b::: ߎA.1^n>t' S 1jM&\P,1YY`RŖ> e)/mr viF+9ehл#E2ŁۉT|g'7 Zo>ψU$W ;fSaM :DVsPf([9>iƒ;3宱/͚ 9*3 >ۘom"ިfp]vaL._>a="s(#t]wʇUGTTD  㤋5Ipws_fb:>pOfp"p Դ܎Xj!mo~.%ҍJ"ܹR@22u*9ȍuRMOȮD8H]z "3$˲TD.pQ[\#$*6HS!G=wd|C{=2ͼ{K_WeqRX 0zl(-b~̒W4Zf3 (g;ϠGuF,rDVsqq^@"ڱH%W PAܛlӒ%$ADb|D6^]Se;;yk 'BlO(ChҺA0ly鲄ы 2{}cUޞgqG+;h]q'7O'j<ԄV~#Cz[DJ ;' i-Q}9V "ʿs^2k6NH.,.;OnRCcx9#ڱz2E2bk≯= >D6ދ@3vOiJf%*α7˜*u#>Q:g\FxәՓEr1̷l@3 рԖMp7py=S AQE"*o1J]f d%`o#*;@eDNimA ߊu1ii\qrS+8Qz}~rpaG'_[(ɩwб-[+auk#!`z2;98+IyX:h*0 yBgR@hh5lr{L:@: >ͧd7iI8w<Ԇf?I(oY`Ϧ!tNҽױwN{% %oe</8H u7CsIrI&ۋbӀ rb1A09{-y8l]&^8x $JM5^2!9-._ƬX"@ax t᧍܈7?N.*Q /w`&jhc?z^PǰIe #<ᓉc1YҚGaύ}Ǟ&npxm`Q'7 ޮn1D׹֯?OUBĎFE7Jgt4P\rʞFnk.!\7?RĆᮙ=C,s,ҝH 3!z6>=x5ƨv͛/U`h) &e̝'8?= Qu_noʎ=֫Z4|0+ADC|ȐrJ[eFmy'~GW˘P W;fcd 3'7ly!Uw Jtı[f$F7PAv8^CXiu,?~-WY]v9Xy - P-tL>BxU[k -y}?^8K.OdС9(hD`o##lZ =ʜѩTT)MC 2bʕ s:)ak zs@fw#*Ťd): 9-fp@l%4Ewtdn/U K;`Of1ʼnƯԃ{g 1cv1r!f9eJ^kRH.@fNCYg"fH˲n| S'U/&pX0e ru$/A9-6#ћi1Ŕ6ֺy0ӕ`s1xլbckEL}{n.o{5HK.:C8ArG|e<[߰%,2$ϩv`W:ڥxUF<uD⪻\2؎4TcgR0{lL<67&Y^pA2UEcfW";9%IR A91SH,y?q.- <#chw/rJ qK1̀O$};bxX74cu'.1H]Ctr c<Ɩ1`s|.rÇꡔ y5sc۩~RQaNلsU=cv{6M9*.<`n]y:"ޝ(>\. "t|(vU)eXG1_hWWcJ)y@}K*mSkIܜ&,,LCuJŋ,Q8$B?~DP7 1ƙ6@9Exd1DzFOqg$ K͢7f(εJ3"y3jg_;*_,6H ܦ; ;(Xw1fue9"yn23]Eϊ(G7`v21Natg h|}E%\4/O**G(m]ДгOcDgގoZP$/T- ! w0`Q̽k(gvZYD=@weqL @L]44|]4\ݟ3²cfj'P <h.-p UI%OXEgcj_FPx#*a46' -ŏq hOW6pl`%vbWzHo!6:1t)¦SU';gJ4i PBe>+B l'9@LI[;yb* Hn ^|ƫ;, s) {31C焓R#fO=̌,jipg~ sr:X*h#{ {GiR &#7p V?A6_H? #mH_9l^Qv>w<%=& O ⭩:A%4($]Bu,t񰴃ob?4 ࿔fFqG4`g0)>>q2ޘ'ΐ/&d'H`,V~<"V S*, S<2 X$O7Dx] $C8Q>ٕ dr@mZ-\Ds='4?5 <h>{j]` .}S+_L}=dϖ,z|mJH07$$"p*lO d`r|}#,o)\aJCF.waJTb*u> Lj>Fw]@B 8 ur?1횃s@ԢǡаҾOya:eJ74W g!^|'uע]bY#Y l3'0ROގҚPMGlbxV%`:X­2J=1 NnƒUrЗ2HvL~KS@SQG~?ZoL3ʼnݗCr hIsOM%gLjiѳXV"8`Ok~)3J vmPI\0dO@:=69Xsë{@):ŤBGPo EE;K~d#y`y~:{4}<qЌ#,owh(CG؂1}+_2Š`gKTrqXQ@`QNkGn'tg)_zr0E;! UcfZu3w|-a Ҵ(x {1P΂_&@zx%FB>hV-*?ՂSMa"{yw;wm5,g7MfVVՋY:S7C)Xh!Q`G}d#\NyJxh5Σl4CT]9H*l:x^lP,d_WG^J_Iτ3Sӝ.^;'t;Vy᳞55O>@|Y޵乲PGXxIJlMܱ5ōv9;RepDc8/#VEi)" 3 U+-tj?7Yee}=o]vʹ^+ lC<'sQ{v!ͥQ_MTUy(MKmUAi; $HӾeR>ݣ%-ՒeUD+c3Fk6ܠreeH#XәXv5= 'P[`Uks}|_)iF>x밃 (GRt?1d!>w ǚ YqJ', iTd T2pNVyIY$:'t8c.Z9tLih%T9$%C/Bo!n2ſל53g88ύ3f3c9 'xj !:#Cՠ`mTEۋVuôYWC&qm ,KۂTbggs"V؍i)(@'gq}:c5dS?K#K<,7?cҡ w2Ը2JUx"za0f{,hy?۟{B+5&)ԢZUFDŽ{t; :&-hPѰ3(2!8EZI^?!*U<{VY'9QHg?]eqgfGRVāstܜ_lX8>jUe+5yRCwܿ~!Fr5S.FI fkx5 7밇'~.$UR} Zgsv?*D팉Ox_%㒁$a--Q:'-<){Tehuh k@.~X:il`dx s',?^U!_׉ ;K!kƕK$<8yqnk NN_Y~U;y=I6_Dc3{xaaDh x7l8 hJs}N%o᧨̗x{6ZY9 Moi.#{[B\h1Ỳ,Y v=#XXG%B r"s<#D*iƝC(jsl-Mj27$y}^ 8\jtgGIJ8Opg>Z×qZu~KJwVf}Gon1& PF݃=oէF@D!+\-M\u{S?X?Fmu*i Ʉy2(8Yw_C!`Sh+O;$skjJSK,7$)z:|!P: j}rٌ$*Ja urHB"@סh'bn$/)FgFaz7aOS4GȚ~1n dZk\O~!-26><)8}`SA8 pMbrm-S̿HLiH#`r'P\cfE'SY6,^:@l6)qmQa%Dr_^%UW)3Uҕhz^,-4413Y^yܷp+۵"ѷ"̜'dNQ)TB< =-p4}<\fNK2Z@hni4JPv)b} ܵ\H\T3삄~X>Ek$Iv쵰TR~Ȃ"p(lWUb9^^뵅]~ K]@YI7e*G"''޼.$y[A?(ϙ\V eO}$W&x[T#QOTL5 -U}FDvwr1h5}X{jW8!Eהּ_ZfnZ0HȹaГH IUfmdd DdMo!~cf](ko[W(gSƷ*;Fr 8. N՟0uB~B8kcR~GVT %7!z bL ܊EEo-Kw.f\Bԏ0zԽ5GtudMpEF Q8n)}AvwWzͱĐ#•«g ȅu F uZ GRD!F~_ AE)_k.[8[݌?dԪTPd.5љ|@x; F%rb$o:/n߈.ҌK\ZbaIC_40C^x"K`;2wކ(45u js掠1k~Ь#q%Ȓ0) K<'J΄N=Pu9wLpm)Ρz- ! kݱ©(Vq% BEFryZrbSQԃ&6f8AyRc[1l ~͹bWOObעV7b(+:ox~y3#sE?QiνM,y ssYV:8Tr_쑹EWIh(u@GCa׳c1?Y~ 8wcꬩb1 |5`m}C7w 8@SYb! 89!Y,7ScxM\WY/B%4G_U8ugV v6Wvݴᑛrkq6eO"YUR˾W Ӓ}HUtʖ=Ôr1uYljb. _]/dy Eo"'@hIZ/gyUWdƥWpz' `vf;Kzl;|̲WWÅzzap1CysdQ(NN+9AKR"Re8i6Ju\`:^r犫`aq<~}#QAeH?PbQ^ںqDuߏR=U~]kj2šȡ飌׊ O./]:6' Ns#R*G"=:GL92~c?nLQ!aA GEMY~F&[hmH(dm{3iز ^[u|=O6ud/pWCeMP&lSU ĕM+@d99o!2ok/ف,3Waĵw(!`:^^LTE@Y >DG%.J]+.Nk5ǭcgzvAoQW°;vDdt)kWᐎvgc\=/]_{YҕǃSl}IͰss&dV8AtU9 6IIQ)r YfE"( ,s7ji^JtԀ<*ZAV%]>ntQ (9!H'\-!ě6QxȲ w02Ak՞upI4rZ|p@i>_D >'G,&Y`y4]3;近ÌuR "|3; }~V+Nca[GE}˅e0ejk4vY|t9b|AjAݒb2B)}=9>"ZU0DnzS%-Eo%/q+?Ԏ>wӦO#H(z5K ٽ1&T`Hp>zyopLlS-賍|K%#(:a yƧ|e7Z狂C`B/c햑Pq;'&jwU2~Kp(DC=]|uR1[ixԻ7\m*p4k ̖e//?Y@S=?Uh8 /^˝7DqAUf(  b;#A.}kpS /C1 W816˖t@sY +v6D^^K|:%|TYv>ΥA-2C;6Sߛʬ&1~%imeq\M\@\+Ԝt߳-qﯟi__kƒ lAw!\0+|DL`H!l6@@x9?m?~IO~22 9JhB際*r=OYqM? Ru)ҫ̏7f L1]ۣD⒨@.IjQ/-\-OwеnV|]g>$!Z!\sAZ2loRx'.;25).H0mNᡷᆻ .]* pOYNҩʓH@U9*y#7ޠ䏡,kC΋<[Owև=Gl%8:Ps hK")<iRi0n xx{mt 3(^ZJN)NQt=&-REv r Jw}Q&;'u9`z!?lHMvĴt#zsAY =wMyC9YHG`%'@>>w!vk6\VFXRb7,h*nIuB,[ƽjQn!!Y4Tk5ۅń'•ET? M*aA1[XJ**Tl 4W^ %^#ZJe$M/ =;}dtPu ]mTo%{xv[ oF(0BH|MuA:E_4+'j6)̇6SHpm} Q.72@CD>k HEzX_.ۄvޣ]wmm}-f@>aD#-Ծ ַA8:욦(Lȯ`-cě`"nY2ЗēUwǍ-7̯Nǽ{RMcqy5+x8R_uHOI>RE[FT M`G'@'*_+)]@?1\h|n8ӱ|$X+*#-]Q\>zMgR(ݎ&nrhGC8uITXl)WH@8ApCzf`*Q޲ b3eDup{üI:۳~VKoǷq-=Inic"@SVU/cCm".׍?0v0k ЈQ)~Z?α ֆ֜+3,(]Ba]qGr 7Ko3kgS#0eZH13sG ÆrcxT:T*{lhD<:B|}U}fmrg omL;]|]j=Cȩ-(ήoOŁƙE!mvʰyyaF<;p4;E+v&!YAD)zZK}-4K0٩E.%z/ެfr^'vfo'ޑV C#c0p U {Yz7в>a2-sfLXr ?@l`f3>KoZƼH&5ooz0tο8֪w#v"wx~x;C$?QRu}\ZeEk($*C/?g@UPT?YfB7Qg*G{Zw -Q~ G&6g*5{A̮({\mRs5)!@v< eE|aQ0o}1<c`^W+ ͠ޢ~(!y @p6.c=1c4.SA\T57[Jyd% p& ?o :H]ļ-;jO-W 6MBLvgvJ^Tŧ'px0Ў-1ʂz  ?3ᥝ^P 1ד` Q8ɵnn>F31̔=$ѕ |M3?X?נsx)=ygo&qA -V# I~Ttz ($WFxҢ폀eZؗxQ l;VqrLe)tyxr^ý%.RG Y(ԋ Z>E2 ~*LI{(* \(mu2D~M}Mjӵik"ce^g@ICaK ,K bm};/8YZ\>ߟ@Qs(Ċ.V% LC0,z7خ\w Uȸ,7,cOhYl, l%e}8D# lyO<؂~ѡPnNҗTU)||+2\)}S]pi"g!uK1:NR`2ސ@Z knD߫zB@*a24,ow Kf؀KC[ /,IW`a=IVIϳΩ;r6s(6s}9E옍l fзF9}mA C5i/NqtU +D7NM 9y/W.nQg77h)+S ~c#+3J3h1s-+ؠgZwh ׋!;4oDԂTFmeJFSI.PՈEHSj/#'K4R9D)κ,2 VibD!s^igUc85>E&qwڇF5QTRBhvM=@dži̽,SQ^5حvx"`vM6a2!2v-mFin^݇'SQLi`aG޼$r`|M{Ȍ[Ya8XIi/ӓ׌ u\~C \;HY0fFB0u8(&ms0nOO"5Q!A'{#)m0%0}ESHӴUG#DM=,A+mmCn_7^s7꽂%GaڟF&ņ0%gSxy^xc٬أѷeKW$Xv*:ۇ9g:Mu4]{U S BU1~G7<Sg]Ұ .1DgW?׋'"lAhE>*}O!-#(U' Fߡ0rmwu;4?Rvq}neW4ymHgAo 8 ?5.(!ϛ=Rq}ه7W#~Msf6Gm=Ja[ ѱSaEYaǾ6^,otO әZ$l^Q9Pp( szlx]ֻ\鴟=LRmD=oN?pFfQnjrca%%π#b2Fz̈$BՕZ t4dJ;Yd1Wm45ԲUMPwۑB6Z5(.z)xDBNTa"t7roYO-;V'F6 ]v:BĨIL`TMgZz^҂CֽKݡe</L3pzݤu5A)liudoB+T,DAgg8ƤHj, GķΉT7=l @@j uo&p<4cm( u<Ke]k"3ZZ,jy8hQ1d0iGĚD6mڇQj]s,..6V^-&i&Wxz35zY9uW :1Z𷯓Uc1A$" ڔ9 rU{t׼e1][+djXt.X?N.*ΜTŖ㨅rIZB_89o0(Np[t06)3meEgB{[~駒 3cl?-7rK *Ss=VA wlĔ{0zC;"j;!75)B']V-ZU4y1bf6 k@ȑ ɎsDq~ol{}^kd)^TcڬˑLěXJL Z^Ra+/fma>R,]y?ڊPŗ3הU-\E<֐U"aV\QW+)p5;~J,)i(DY,A"Wע>V-]@l[KԔ\ӊH8Oe8> mdȳͧ )s7u#2Z䃢,jC $%IDHQڤ^ >FgsPjIi/w^!~-.0Qz`7:x; e%.G$t:Qj<qḿs˱(9ԯ\w7ʩV{_w1>&?Co*5xwOgaʉ]ks!pu䉀~ځ7LM rpYF׳z;3YHNgk߃3o}\j.'rOkd)C+AgɶZcncpݵm)nYz0-4ui,g++abAK Ģ̥\Qa0G5|GmAty mmwu4u\%2uvrgj]GW"$C}MޟN嶊+Ъ1l`RaĈ7Wh6RqS\=Rt2JDYs( Ow|_+7 NXg0\eA͹D{'HHzY5;V8Ηvl aD8 YR@Ahm O?0D3oYFx|k:>վ ծEH QN4;T6]֪Ν\1 ) C c+ߺbvP#5]/?ūjZQɁ`|Zd%l̗0JAķ:O<=%l,5"=iAAfɤ /r,dqrۄɍ=fod_-M8K+5Y.N5 ׂsTRsAq:%n0f|KTAJ?( Ddz,n`_QHb>: BFg.8>\΂8}2lRd~:56kf\CMF43K= :}sY麥|tBh.;%7np{DQ:ftϨ@Sڮ`imHG|MIG(bH̍!kn7lŻzRZO$יjsX:4m6ȁ\q67"i \-t_l"N8b}`g?[烴a~s["؎ yd0\V9,}騒 PAFQF؆0ȷ*4D?]r5`"_lS'l ʱIpeCm61oo 1eYu"/Wᡗ"#[_agç,oX2)D센-#/N,xGU04ҟJI3t)VFj1BUkcMjj(?2XvL/JZa,1OpXK7hɰ[ }ir2_fc ȝD ; S:.O:(-̎ufX$g^Et1MFWjq0SǜaMc!M,u6М }GF8l7xrWx-7̂K4@kM^&~PXslҲ6 v[p-.BgVn7_0,b` TeTg$ѡ3 ?c\ڙ {] -&|a7C^enE*!j"3Z 4$<,Ǵj"{36aC]U" \pbC' m<1q8DU*Yƚ΂>SCQQ_OMpZDD6Htu)K)bJd, m)-u#e,ڿaWXJ3lkA9wH:+1R9%VVƄ\Tm-^8ҟZ=9Ljmޝg'%L9]VY!ÎfIoMstho<ٰ}tǪ!pdya u伦QAmwK5;M-žf6#z!Lm Oh1b| H}ꅂD֡էN^͋eHKi S*:\%&$PVQKEm8" &sMCPu;9}\ߐOTQd6'|J`C˦ 03au}2򇜶83 (@k~%frK l-H_'F>[nqխEnp6@$ LKIBRsu*6VA{ k^ѡqAi4kRjgPܙ89q%x+ОakFf3l{C5UZڑ2`Omc݅%xmI2\]=vR{1!SՈSU #ė⚬B2KG%iVȗDZiv%*[5}* Y3MP-A+LˆJÁXu |E^)1Xm cj<Y/T9`f(A^OC=[8H$c5aU/qNW%bOh}6"Dg보%Oc9Y8}EcFK0C51ʞ^64]klAC¨=l 5* $$`'A6 >b3j kYC*jT û~ּ\ R^EțGk~i'<_Oӛ*`6A%n_9Ckh3ulǃ#@7v=OE 71\Ā R7*;#<B빞˪xx@$E6CVލ/'{jxV!Nr`Uvd"cf) OܔEwX^_n&HX: ER,.Tcm8/-rDR&S1o 30Sh-ڒz1W!rQr3E/غcq0V^Qey@Yޚ}m+BXiA(Mpv%|J;h4)Z<3M8dVJ0MD.ڷH8R^r $$3a"uIXZR9V7B6}wk=nਭnz@ʼn]OMfz .'Zk6NA#{&.WȖ<,ǚjX|IAP|T}#} K@u9"+gVSB}gM$$4֯YDL[^tk1P/#bۭxdXF ߢY? ֎GOp 9>}ΑlmpB2Wݤ5/SRG4+|U4,w<4d{e_ ^%4m~LGh!ő&-p 5(tXXNyϠGXCjnYUmK)A1zih $q|P'`掻b-퀻|"#AL'em{Ǻ|s:Ҹs ,^$ve"icI!tOJOJkCaeb~-eny~Δ1`~OsypmfS-d߭:#j *-rlKN.쓎ch"dʠ؁>=]ιnit&nN5CKB MTFGW09 Boэ~41BFi%.l+y,fZZ{懂a~n6R\7. j"ՙT(Ńtt钭>C9R8.QVSb:Dċgabt^ 2QCE6njV8nk a( R f@ZX-Y'#Hp9"9$6NO|-.qSarfћUjܶ-]Y"'ΣhLg|O٨n_6O :'kcml( DoZa\)a3OC9tJ A}|LrpvB y Y53+jLc.rU*rVO)|D9:pdeQVH.&3߸L 8#}HUdA~dUp,G6jxϘ^7 5`],m*dM{|&ĻOc ١/IiMbǥzR2UJ'(FQ(Rp0ʈ8q*0q.n(ly'D2ׇصxhw6-dAI"8*-ʩ^ZVo8Fa̞3m]O_j8& Aɔ%Th:cP6[JspT5o-P\H=74 !@'- ._P_Hlo ѷM&UI x= PVlxlAupVk#/-$]Ƶ;@Ym_<ÁǎO-}pGfO[ȯTl(OdŷX)i=:r2 .Ln ϢxxV-°$1.qb%}u5g,џ7 hL@Cb5k!xXV{UHIA el  %!JCm>Ӭhr#R,:xpyL BM\S6A{Hl }0f@}h%RS떇ܝDz%6ڷ~u;l#h'A'QYs~L;ƯãJ$ZJXJscfmU1Rō21f%DmD^u:k,Mf%@]gMښAoRb|z׈`JŹ"Ӄbq7vx:YјwL_fuдϮ~Ѽ8.|~2ru(WWloVLq5uq' Q}V/Y*Y3}_;JrBP%ISOZKvJ J nctRrbdl,x^yg9CY 5個p7A f! &ͨ@;1(`*1$NQEцRW'YGc5bfK(D.0 ;]V-Ay 3` ?c҂GP"\r$@eJ,Y\n6] :~v4rZ"_P-l^&W%|%rR#/dzzEҁ8p;TnXs;H|&0-a?Gku['K[oXQ[Rֿ>׸#EM:rSm´VK_L_>6ޞHRqAv}[U[Q#_C&mb2]W;>YG սF}qI[_7@數Aւb~ASsFxtrA̔Ǥm'^7D]" [PLarޟˁ7p@B$4>cTdtX3 (yˠ~u{菻m ,,1S_MRsIa,)0n12HL{v 4ϬhB`LS{|FL;`?O1ǐ\ ( ab"sum (;xRYPU ?GJ1bfxF(6 ~rd.,sD^ڴj)>-<6S 0/M, Iy#.:1fgh` t$mk[!C ~;oVfkk#O..VQ~i)/XVp%!TWL?>Z>q1+{ghRPsN{M2I7s%g7޲[l al9eiQ⩭RϢpȌg͋CA2UP9P*9錦 0sùn9!V[ڒ)>i蘠+eŬeDhRdT6JzL"MyCQ.40`&[qob0VG,/gO?FmOzKѳdi]58"{Nى&U‰C><{c3(ڝ e`wu߼IUf* xUXvPZ3S[˜7ewcCMa-70lDB3BZǥCD8bd*>գygm;RNN(VȨGnD_pOt:3-|ں9N#])U~eN`(8md`:Muc<)*4Y2HkLax({+Z8r(-fCh hV r7|d3x?ǃo6Y ~UZZLA#Lװ_c4or^h74$|^I,X$[#2 Xh " N^3Qe!&I Y7^Y r͖1r/[n! *zR)xh!ďI˳%EB`p"(?tcM`Xw:*`RH\dqܕL7xܰ]ОJ)oAE۷[[{hᱨS l֛2lU=eL?S4Z,ǹ2}Amf!ezy+CE{M'淊yhIB5i~LĆ \3p¡8u%.O>1g;xпIYFܷҼ{$ͷнű_`=', Qw~_}mxwoقhR&r<{"8sEvGw w,)/vefCrTsLQ.\ )&L0u ^}},VD"PM\ɧlc!&s9) ȰgLI މ}h'D]AF*zEۧ3~_#aAۢGC[qM)z _ȰG TKM,wϏ0(gG=J_"(,qqy"(׊@*.7RxLe<[ b'+h2Γ6MɾO!28Oa>e69]UvBK)*(|uj[Sfh|kdIVhp^;ݭ6m3|Q޵{#󚿳HQ`<~ ߔĽ5S=t ʴU3{ܪ%Re 0iqP)W XfbJ_$/5\\ ܃L&nG4gFVKa(|oї D.e.Gtm̏j憹^lX H ~2\<^+d X]!;E#&MnrsʢYjneHFP\T~~ak_\[.%hwq`sG셜MGyL"m oWA h{D5^`KѓR*9TVQgIFKw^To6VN֓F+2f##3^M/h %/]\"⩀yPEPƮVx۸sZ˟82QxBUk^„rk佾u0O n1/; IBDqoԴ,? {S\3ڝ$b\|: cZj%kymlm@Hn@â|Nz5ը)'k':7e"O|*^ >t}x9 XFWu~yT É(srsxL#)CrbrCcLB)=D`Z9nj,GfQl: u6Hpk&0ûtѻ^1%îֳ\j_ ۚ7^)PCMe gKd" V-rֶFjhkĬ+thj'-A[nWچ\qNtVfQWPʜI>A}.$f~›PkfTO8Hn,]C[,x| Ȩ½Otb*PNJ6{<u"ȍ험tc?& " v$7,O\/K: *jrE͗0kxQG|# m; 6 tEc edQ - <-zblHO`(57y/kS6Yk>PkRhT=^9+<