virtualenv/web/create_python_env.py
author cavaliet
Mon, 28 Jan 2013 18:48:29 +0100
changeset 11 8690174634a3
parent 4 0587d6556969
child 283 d6bc9a2cc131
permissions -rw-r--r--
update hgignore

"""
Call this like ``python create_python_env.py``; it will
refresh the project-boot.py script

-prerequisite:

- virtualenv
- distribute
- psycopg2 requires the PostgreSQL libpq libraries and the pg_config utility

- python project-boot.py --distribute --no-site-packages --index-url=http://pypi.websushi.org/ --clear --type-install=local --ignore-packages=MYSQL <path_to_venv>
- python project-boot.py --no-site-packages --clear --ignore-packages=MYSQL  --type-install=local <path_to_venv>
- For Linux :
python project-boot.py --unzip-setuptools --no-site-packages --index-url=http://pypi.websushi.org/ --clear --type-install=local <path_to_venv>

Probleme avec mysql :

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/dev/workspace/platform/virtualenv/web/env/venv_platform/lib/python2.7/site-packages/_mysql.so

"""

import os
import subprocess
import re
import sys


here = os.path.dirname(os.path.abspath(__file__))
base_dir = here
script_name = os.path.join(base_dir, 'project-boot.py')

import virtualenv

src_base = os.path.abspath(os.path.join(here,"..","res","src")).replace("\\","/")
lib_path = os.path.abspath(os.path.join(here,"..","res","lib")).replace("\\","/")
patch_path = os.path.abspath(os.path.join(here,"res","patch")).replace("\\","/")


EXTRA_TEXT  = "import sys\n"
EXTRA_TEXT += "sys.path.append('%s')\n" % (lib_path)
EXTRA_TEXT += "sys.path.append('%s')\n" % (os.path.abspath(os.path.join(here,"res")).replace("\\","/"))
EXTRA_TEXT += "from res_create_env import generate_install_methods\n"
EXTRA_TEXT += "adjust_options, extend_parser, after_install = generate_install_methods(path_locations, '%s', Logger, call_subprocess)\n" % (src_base)

def main():
    python_version = ".".join(map(str,sys.version_info[0:2]))
    text = virtualenv.create_bootstrap_script(EXTRA_TEXT, python_version=python_version)
    if os.path.exists(script_name):
        f = open(script_name)
        cur_text = f.read()
        f.close()
    else:
        cur_text = ''
    print 'Updating %s' % script_name
    if cur_text == 'text':
        print 'No update'
    else:
        print 'Script changed; updating...'
        f = open(script_name, 'w')
        f.write(text)
        f.close()

if __name__ == '__main__':
    main()

Q440bTymrwAZB0I+QiV\#pQ7%9r0?- hHvы`8FX- d8{_j@,-øخ"WOŚh0dɊhX_ ~U6ԿYh10T_b~RJrҾN嫯-1|{r8#ǿF##w~8Y#*QF%؅㸾0\V@5w8;WW)#a^ H[ ԍ(ㄫ0#$K(,d8zj^vrņWpVFёq7F^O ܬ`V0W-QѸ ^ё 帠 L-A0m)=A _#####֣x޴{AzaIQx9t}SE~1h_hOaXdq[l ԍu]V WzEz=EmQϘP+ ĘL+V+J±YJ>+q9O"ߺ??A򤹸˜ _и,+J+Ea\9sl%YQ*:WG^v222])S'}GH匌ajF uhFZ颯v4@4 2bW+!*LD?0$s(hmF!N[3-aadN(=֟|A µi&++U$222?g.#hNA^o]4VRaX+ V äb220}kB UYCѸoɪ92dF#2(1QWj2FTdd쏲?~=X"J/rO`"]U+{ k+ۅVCe}edj*ʌ# Y3xs|q5],GX$dFQ$0<+*:kED+<WH$я]M| r<{CH25Q7FƣTj7b~oZ=~aCa]d%r(t]+2U5}υcddddddddddj5X^JFbVJ*%{C>/StwO\C( )S1?UYPܬ-b&E=rNłyᙙUN|_>,{$& kX2EdѺ9.& r0_1,,,/;Iu{>??m  -P{yS9PT<qQatI:V*}>OV[Di;jKQ##󌌍q85%6. L0O@ Q2eC⍄yG /<պ;tzi0#F4AS9b A*)AJ2b8+`7ep#Tz# )+8?FQ5F5se\i7#9nF;GX5;ƤsNe֨Ҽ2sZd+Ҥ?XJ v=<%֍ZI|sGGv>Zcqde%deY^[1Ohi Дi6P¶+B&JCQdqTj2FI\qhqQ>6egA4uA285F$GڍGY\Qz2Qގ_<.BY^";Ђ´+akaXV;F F% V%)jeG^ؠa{)@LVϸگiX}=GH2222qYGQ2FGmn$ +ϗL"JGZaXP`2h/E_i0}@+&B4CH1+!nȯ_2%j5ƨn5qQc>; VcԬTՃ4X{? .V5*t ʎ5 ԗ.9\~:ޚWHc5Q0+Ea&L+ à5n8#Jɽ[6WJvzfNglPI0+ ¼I꒝{kmν|w|j222>cqdq }qe|8ZJxp7!UY 7%zvNǝerV"Vg2$#&En`oj%Kd究x. AaC315l2l[ :\T'"@k4ڹ1:%+ _tIŃR6XXX^Jqg{E4(MI`^C!2#qV#$Kj25Qq9F$Z'9uQhd:FEY*5FIdFt5G/.(挢k%./ݱܼ:Gtdb?*]DjXyY^vS 3w_e=hC!]Bh^` ه$\}t(7VYd qڍFF##F#,5Jb220kTj(ƀTW0⡲ް,H8p|#:'Y###X$"UV 2J)"PHfU. e:_0ѨjF#######QSo`{X*\:*=6G嶓g pi ͂p`ZCT w,enV0"b \ic"jQiPlڦ(22q0jGx*[U#0}/0XV`qA\cde(הV/~(E0rikt/md}#5GG1R[xF?(eI`ʌTz|dY4^tDyx}„1Pd쨫YeCu F####몣")blIXql%R}eu ܇PEDQA0E%̔@,/E'XW*n^ʱX+V*Q*CkFFIeFG(iFTsW4ѸdjP0VT|7Z%F ` M UX'fJh+ )e (dddzFU] FFddd?jSq7F4+ƫ+]"NA9 ʸ EAfb2%deQbS , /El3r:'tl^T~zjFTiB"B ^L=0TY7-zafC7u$Y5\XɲSm*LEde}qmp0jK$u%oo9_WVc3+e v+Ԡ\)aXDdA8`pbPZMh$µdҿcXS##X·XV+|bWr&+w(+TTuf ]W@U+ +s P|TQYa% >\|PPdVE: ډwddddq~<Lj]s(d&$^{&H檽i\0>fqa[*7FTxtFFqb7NҍFGn#t#QnL|dRZG"SrڊГxo߭k+iݓ9f. #&+2"B)v|pAsVݱuI}5QdddbX}جԑ-/QYQG<##uF(Qj5Qj> qQv7I'Q222/{G`cTup?ח<'Z5uѻUiţL9AIv 68[]㪶D^\X#>l dQWX22222224FQHhٟ 0 NbQf.K,)FX6SII4T(@0u1D"2()(l1Vh+Eh XH`P X48Ee"C FQVFIdeF###B ap2b&R0\aaa`Da`XXXXXX5FFFG#"G02F FCQjƪ=jєhddd`#IqVJnYX$ 2U(_dǾ2U8:%ɛ  XR1OۆcCF;T:pI26NƁ, hP%Д[n P` H1yDKy9ύQGpB wQ%7qbIW1Z+XI`W![nuN1=!G.Pε2l[5Р<`)oU. wq%>Cly  EecqJGj;QH;GFh5G, H% fֈ<#R$\tt6n8%D\ 0b*2SI dc"J1IcT0ReFTV5&K0ubNH-d[$(F*{$0JD P%q%c\Q7dvsGx9wjXc#(d|Xj2 Bʼ>"LK ɳ[yѶSuZA 1 2WuHo*[ !#b~?2=$W;G|unպWP`9?p+JIj?(b\秎=ܷi VEl+"2"Ҵ(`YEYQj ՑVn+JqFFF@ʌơ\t+8 >3 ,yL ժ8=#######Ӌg^_vQ;FFFFFFFD,,,,,,,,,,,,dddddddddddddx!>UGkg䖫:9P $\EvCrw ]Wa_ k $Һ+lWx]쪭dddddddUG/ʏ|c##qyQuH.^|gPSp_ /m2&J=c?D{Qn7V+Jұ]ģՅhun$FQj5VU~+&:hvCuJ`>C2`TɁ`"fҫ}Vфh`qFğ'0+qZdf#2+*ZFQ5Qe1FFTdeV+JMe 3J0@|:%^ă7zy+3+I]V˩2;v :8+8r/l~2_d}]q|tP`WjV+Wi_I_|qfavʣؖZ Z2A.ÿTǘ]bHY-T5Y5D dm+7mD0h3ڍ~(*3fpƃdSkcEIL*ː D 8Rh.B"\nV^& l@iA3k6 ٧;*S:`JHJC0B$>"@g cAW (It#q7bL*IұX0V+DVXI $ UP*||a"BT 5Q:*-EXhӌoKq8H7GV)))NUh½viE.Eh1#Kr)ܮlVӿ%^zomՏVqj4hV 7ᑔj7Frk-QqFQn7*qJn*4+EaZ*WL.˜A̐а. "( K^r27>WzJ{:,=n27FqYU􌌌xFFCTiX+8p2eȓOO{|*ׂd\2WZCݑddtFF֍Q޼F|#ବPo]*'B:ϚZIi#Idm1{`|Nq6MĜ=F!HƉf n/' e78JPvyxPO!YI=`__0=އ>mZds(XaD!eM*YCiDհlIbM9A " .+R+a&ȿж`[\qz+IJW41_1 Wd)'I>;NY@7 LUvZ23Tddj0cరBu{WI]ng%w+$2*揌}###U[FFFFFFFFFFFGYI}uYHR;IVbMy|Oɾz̤YVVim3RHdĽJD5F1Eqޣ7F\-z W:1˨WQ땼+aC8xQ26˵FwN#c(fZAd j+ ;yz5Y_Cf  37QABPD"JVI$ II ZQӅXw+/#f 0X!b\VMV4VPҖTI1&$|9;JWm[XaX|=ERJ.$M(% DۺyNpW^ A,- DZk?< y&v+deZ######*Qm%'7<+*7Gўq8RxT5oqB'>Âf&d;pO(lYgFF#yFpW2 =`4BDID#%YEVddda]/:F*W?FUj;rǔjGG~q7%j7uxd2IbBYR_ҵ0+>\״VV#;+{uf ͎ޛ4x5Fj?Ej5Fj3"&Ϗ5G#$s@b1UZ A(3"&)deGz7Q}d ~ /`;1+*xp8c*d1BeaEV(3`j91onִ,.࿨͹/-7n-cuƣ:G9dqqq%\GaGX:FQsh28:)]!,pqC{˫GKKXV`ߟ Q a/,,,, Rħ*8ĘP}8+ȭճoOB gɂ*h(*JB ""&f* (MRU4b(?W_ەA{״^ y( x$R\ƘeR jB?Uv!"(>cZPV4!lj`T4~1TuӪ,|v2 0NU9ͩacCqY(+$k',MQ_怀@@  E!}{t/hx}ڤ;ykmI}{nZHIE %>¼ {66s=t)yC7{31{{M5|vm@F5ImjT3`3^YٺkeHxvs hձ+b(Ό6»9N1Jt!ۧ!k%;t&p*{5ƬR,ţe٣F^.]L{6mۮŷ\;,Ke0zɻ:tY*٢$Z[[9 d3;^Ky24@m,}px0};;y뼎(^q&ڲV +s"@}hiy2)b8LdF*-uP9(UQm\ZDIayszٻZcRvBd=kϜÞ#<$4M3EH tQC@`lB!%XnBb*9>.Dн@$S="juJHjN cK>]]gԋl3$ZQB1W/"HX%F-q 1c#bNtLIx&BL,>E}hF8 ;&GڽP9ncu3pއ@dBL3vjn!,$Y^v.'ANW?˗N<]y$yGmvE+mq`&BN2>Odg{~mزBC6zAέ@nDx[A3)!}&*.2[.|&;ߍv)BClq Ӄզ0lʗGc0ٳnc|SыR@vf}@цDa:upoݧdwDz?1cuz;BbPbд"}8:qiW5;Yf+U H9&q!(BPS<7g|o@/$ z·2( A7tt*42ˎk0]xC(C>3tp1FWRL/m<6={ )9$Ds3NR˭0_zۃZz;<QiòúЀVfd>qPd6r<mBvψg2Ad5e 3@ ƉRbXosSsZ*hUubI)Jik6Gd9鈏r7%c©GY xgPe|EXoP[OW+]M\n $Bn0̬'ZB"tCy|3paxf!7w#6hm1aS^i=TjOSoM?c2t@$^/|0꓊ci>s!)1֗/ӃN5;9H!-N9=T&!ǃB>! (1k w*dFhphd'D!OwC=LjPNJǶUFcv$wo95|㒙㳘aЌc&(6^^c*iFwО5TFK6k*KFßG掞LCxW Bb 6ĭr6)ݷપ9&*Y@('yRTu*?߀uMe/Mf1ތ3DC gm/LF8@T5Ш$A-nr׍a$AN3cV`AҊ;B1*b//{oѠ>G7exs*_/0Vxj|%_  M~ծpx`O! =AZ1C UK;?N`gtҿgs={li]aDʽǩF0rMsG~.9?`Uh*%P,D/ t|ȳїjǯrާa|YH" Hxx; uF 60 yfv!1tb&{I|sT(Ap6fgOo4@h|fgr}ʐ9 t]!(U ᄩcLW%+iqz{lRR&Dc %8P^0K&JukZu9ւG)]<3<ŸUE{81Q۞f7喙ш\;l>tWYỏ .켥BgA =8pKn_}~Vml?Pٙe:,Fl h)\%a3Q;5$B6&mBM*Q%*)I33wgmbhzH%wAÆ(ÅE8FOMbqo}vgGPCaMv褕2PaPj獧(ܔ_y1 E3D5Msg}U335}|礕bbP"F%oOObr1`AΝFCG/C~O#%Pbgb+?^cH׎&6+ag01Vd_jzc`Svbq;1>0Ÿ+tsbp"W) \uj}^2fa&u1ZMsi \ةZLb~c`< >c)5.#R#*,dN}&xfE)*)4Rࠦ$ػYR[0I0[&OшՆ47ZwVG"]87:ު9Q;z8{^ _;MjpHT ?&<1NqQ"bz,xw9)xZӌn>F@2%2Xe޳/8d}3c i1W6g<̙xeCzv;gT{5/m먾4Obusش,E&z|G-\Z1r_{x I5bSp_#kW:j &Ն 65la}i4s‹<0:^O8&Ǭ;xF.9A0a\ U$p yۑ'Z)Ԍ>(>JeRL"[ЭuTǖUfu,l]ثkcL2N[ӟMTw^sV \>o5yZqBͨY>{37>Y59INѧrmb-4αzQHo˘ݻe<96)&&OKO"E"mct (27eW.._<4tC ?#=tm{ҎNkuL63pjaT]jF̙vCI'ϥ#"DV]Q´GK1$Wtoߛ |ԟx"2{o/uBvOƚTbWaOc5.D1 i[?/6>oŴA&}x+oa.}uIޣBsn *p"7nTǘf˹ !o(C[%u29ua2ihէf5D˓Ǯ Rox}k:l8+ȷ[vfpש_Y77tViU 1t],4ȋ]GMV8a]([={W>,mG.Nv:!鍧_}4}.'1\:?D}7Ӳx/>6>ljIs7Sȴo)4ގޢ9mzie6D#ԴGiJ#[&9Jx,C;Ĭ~GQҰ3z}z)t+S 9T9K:UKmɮ,1[<[r yrs4Hϕĉ 94d ~Vf4͏Zβ}GXڸN;Yv71(tNn탠)'y^&۟t՜ϡrŝݝ]ֽlM;>]ft@,ʬjeܖ$Q.dK7=Mav3 [RO xik_GАp~UESM?"); h/:N$ZҘ6S^^nOt(vBCnKL6;SpvQ=[s~PÒ!9'lYqq9X0k&&BluKҭڅc\ ݹO Eϕ[YjA {PB!iΛ̻N!<c3:ry!u& ,ۗ<)On7j/ x*w#ɡp..S[>I)ўYi^8 ڇߧpAӉt{SeFג<)F Ѹ{B=#у)2I$I*Op.Ax)2^  띵 do>ayK x2+qjT FkV9Eav,7TikF];c) ai[$9z)#cjw)hD2E"R>Qo^UrJ8\L#з]}#4aN;!a7zZ g p`bqE+ML!G# hB!3ꑣduvt*H4j,.C6xgSB"J5w^.b<$~|Ό |1'E{')thW}e%/$G!L&:yOsYݍ5M]GsM+FC5&لr&lmш2mёV ߩL!EKGdHcW.W2Ooҹߝ]SuA%erlU(aI!S5 [ soYJ]C7ІǥGj#$_ .ٸ:z^kYA׮<pheӍLksX?W!zE!Ji(-_tȿ**$wg{_F >X H\ l֑f !`aQhv5FZhqڌ1ȃbZRI$ I2A1W+/!F چz1& Ēĵ<`G4Fr21֑%U(hj;Dz KBFېj4B:6 ~26kS,TfeCkNITn )q# ,*I&n@E"RC$ɪqA7_~i1z[f&/qΞ `Lc\>N"ʷsKyOpY3OL*{xQ`M>ɛE?~n?X.J8It܅ Af'?l/^j*ϖn*MgolvI]zK"X喺ם3ܱQĥ=o#ƋWjhÉWguỌ(M&.m^JO<#T:{h2Te? Ѻ7QFFGLsG1G8G1njq7GHTsGuc>#=#8GzGގ#HHc8:1qn(GFj$GqFQWFqGzFGxFGt2#(Gj9.ԗLёxѪc###Q=)/HGvNi2%Oj222FQ?ŜDH֣StsG#qn79QJ=v:FQN$Q6Ѹu掑2*m4Qh}AuZ{tFi84ܮFO5;.ya~>=5FGH2#QsL|cQdQF*222K#Q88{zHcTjK#x;1dn2225:G>h>{#FeF=#GquG2=c#7GhHyGsFFG1\ƣ#(<#QėxGH8FQ2֍Qw#9tsi:It飈8qh(TdxƨTd|#Tj29\ (r(r:t`fB7z8sꃀv#a6 tVA8o3"qoRvcr Vǹ>]Ch|N>EPtThz֍sS \{FsQ-lS:6g& } MFY.YtJnIn^IyDWqW1]JK˯+21USz/Z-{Pv9h}QJl~Hz S6=a*kebund\>{" <В<=4#/\FCק,6];Ptd=2SEX6iBq#`sbqm/ LhCo.N!<x9"uq1 ~*;G+ .SN=8w*ȻaųudRJ{uΜ> z.kMI}v=q=6ZH:KL&lJ fb&jR` !Ia $*B )@ "AItqZQ$iV`aFBC# R1@,R $"&FX`Q`LNiMIN$حɔ&II'19LO1?2{I119IMLNGHvFwFGj9>12?:GG5Q%Q;Dz9qFF#q2qG:GH:GtduGzF5Gn5Qv7,;GI.|#q<n8(5Kq쏔v8FzGyǜqj7j2:F8,hqc#G:G=֏duQ펴{#2Z5|u#qcqn#Q2#5QGvX/>QnjdxGjKxhw :Q#ޏ;DŽ|c?GSDʖ?؟N })?LM֣uJrEI8NnPw'dԘM)6N$ꜥ]*2NQ*ʔCWB)G{ !|M:"$2_1 @ 5 +<oP28!Dԛ3/&¡.iAyT!]-Jv!264A@#a12 OeFFF$7Q5RSTi9Npbi9M ԏFN9#]5v DIH625>e@GnYh-G6Iddbk#U/֘U]4X27'dIVFT\&L'H6 MGd~t9N+~BTWtMS$U^d  Q>G5B5I ԟsL'"dȎ"p>`I~׬uhY>|ǽ27[M&&&&&&&&[O&F#I$聙MF14#?QoB] jQ\k ϝW HuŇ FIO(X'q qG)qG:MQ@GU畜^~תyGdtO4O4M{?8p NIɴO<#:Q m7_[;'XU'hGDj6F# ryu׿qƨ#Ϩc4ic' kJ bbbbxF?p' i118,Ɍ |=ci7isbbbbbbbbbu&GMF#Ii>؜ýyY_dGT.=###Sbbq'D5&I효&N٪8N|gҹ++(~ufihPG5{m]-e]bbbbbbbbbbbbbbbb{hi111111111$dddddddddddfbbbbbbbbbbbbsG=8ߎnO?US}ri4Ovi]}i>i7bwye?w.WPUsΆݤ1z9;q>F$B&d _!7;dO 0P>Nԭ⪪C(H3qҏB;iF@ioNSuM}kp^@-d1b8.Yap=4~5NQ bvLS#6Gˀ#y ~eX/AӡҪz&8 F&GC,$W媥31` GZ:uyhq<@ 8IIbbbzGNq6L&I8LLOw6Wx_]hwOğ\i4'y&$'MIwIsF}|¾1u<Ȃ>I36s aB/d=ԌF#ag#鍦q4?lpx'}RtQn)3db8==i`N )HGO#%-&QG6(|yե; {M`'SG2)LR,(9LLOO'Og):&FILNxblrxRvNhIF :EFdD$E\U2^&G6<{#I>3&8#@H/zGΚMF I3[NC{Ű:s (#@R rB{$3G `# Uѵ  hiFecN.#ueGWK2:GdIOtQ0"F9~n>G&wӼHȉ%a𽑪dq + h @/X`.{C~|_DtyG~*KQQ~xi7229Ncj5GFQ############ FFFFFFFFFFFFFj;[`^`AcQ;GMGi BL`BE F"{Z? nj.[bHq:}G sGu:FguL7G163X=b2;jPH*" [y|ʍD|.y Psc%=#222222222222222222-rb+#-;rpn3QQF####ZۍFFFFj5j7-FV7kQҵVF#jf)G[n3QSq$.Ҿ4+ {Y0W\)33 4-𔮠=H mF;_C ͟W{m7'NOY:^\,,,,./vgWsD/!aaxz:fulq94?D%nkyr͎/-MF################oE7>RU#_k\ !Pxc,üt /.C[!ёsޟߏ7O}>@ϔ /hdddddddddy?##>;;:q߾:Gcr)sc@ZϽp(_?WttuQ8S#t WC zAk$iu.@4^x.h?cm!Ɩ=1ϳ5/]ݎ-]-(cGL&]H, :F mۮ KƳhF#CO7{]t],yaۂ ^߾pVm`e- RKb]8"B#L?C ]?]?&xaLr,9{g_|?,)ڗ>M5XK:xs:O`+^QEBBB c{yk3YX5_<k.bP>}[7#ل^S1'>- "~i74@mUdaaa_is@#B2 Qe^Rqdj8 BGTs*􉪩YFFQeQёdzfW\?FU Nj2cTdeQƨܜ&5FQQj(o4G39{| ?e? $ :;72Rf:0ZefeVPK|`jX, `#GwuDD!O8~1KƍܧbCSc[fdTp&FGLM&T2122&Q>~^_p BB$fKT:@_^\a8tG7D!J$Dw;؀0{#0 h i ,R .Rb 8#TPyVT5#(Rumhc%ѨQtĝ,GYt̥&J=o茌(~GQ25Tny}- I1&%jjr &_ DΑ}BǀkixylYި#0鐱GTo cRFW{y)beFF&&TdeDb˜di0JQi2FG^ddʘ9 H𕚔@!= \b*X[_[ ֟ˏ& ehhJ /e~uoD7InA@5#,+p5?8O(sQ22yM1sTdeC^#5+<3KqG9n}tT`FZ5*716\fW A&qnF FN W(ĝ9z =egY ub"r:^aaaaaaaaaaaahTo揢߿*y'#ۏ:'𪏹wg? V(סBAȍ>Π%\FF&FFG|c####F##TUʁĤmVK<w+>LŀXt5M,$B*|2QczQgƏ4QĺGY+Kq]S=dFq^1di"򌌌hT"}iEKԎ|t qR8HԥL$q:N12tc####X=kTŒS,::4[<ґ6pA1Ỹds 1lN= Q9pQFFFFGeJQ梯DYe&E^NNo|+2W $M0t  "BY"BnUIdex^uJIP (](͐E^[nV6Ae"-6?5G,険]b"Ô*Aa88wvbnE(FThкk|)[G d@%ral+ԍTOJ,m; PKKu1KjIHaL~Y̷7 G;l+w+4f5o k#rȦ 7N㯂"ӕ5mL6ti Q.!BtVT"&ᩒ *X@7e{>Kbe;&׫͠ff͸vdc9cTsGJ4#srYGQKqZFIj(;qQ(G4j:R[ގhqGX;qqFFGz=h 5GGJ=(88*=c(EB]v%ħQ8ɮ jshB޳PBbBT ԛ&諈ɸddi5&Q6~,psm[,ONS1:'"LODNN7';'pz'ZNĝq'8qs#2=5qn8#Qڏv#9㈫/dq#w;G1ƣQ##5dzƤdjǤj:F:Iq(FF(F<=7dGqh-FFFQ;F=#Qn(?0aa`D`=P5t`Y3R3.DZHD[igP e[cI"kؓ2 oɢ3 icx Uf!Yd5̈;Dlkwϳ̠l|k-iyZgV-fZͨ[5!yZ90KB pYTb_c M]b⣚8 ?x$@D"G>pu[&O\rÉxڗ X"qXѸ|n7n6.G0 |}Մy%M-,@ a`XYY@`.DaMT^|7 z͇PR>n zyK 1T9zY&nz4}t{q ,NuE~d8ԣߎ(HQw1]RDlXѪ-49FY"Mn#j겔Qr+##r,. ,1$b8Bj25' YFBrF |.Fw0cNLWYD&*sz< o]"Y 7d!nfP˴Xa+IB1k5jF- czN22HByQ;tխy, [kptzw?\{cQs(wwcn;4sFFdŰ闈UUUK(3tOxG1Qn:Gj<(j;G179xj'U>?ݮq\#ZO}ң?a9QpJT~~x{S("x y5 pD`e1z PUO ;CT)^tI/!-j*_T CErG$_S( c3&&DhYQj5ZV.2H*Qq2;²,x̄ڍʸ2#$HVNx *-;_5U#5&FkώY-Z[[q A=K|n/#ZNR?C&d 1UtddoQmDwDJc[`9n@|}e,`E)s~dpjKG&'+15FFQԖN220vdaF@:LSP}@HC=hT-P$JRҽv$4K$TLLQ!L($J׆xQOrx&ל+Ώ`lA`_sM6C0^ ͍(<Ȥ "&"Zƪ=_]/ $A,, =//su^rH Qzddddddddx*>zr>84{mq@P-e$- QΎ\] ZG5/~B2 QN>7',xA -D\X#X~J2:5& ^htT+q#Yj12=7'ʩm96]*H 4m1m?#qFTjMTjj\V.k2KjԖYbtO;T{>J^ Cv„(X5qNyW#FFFR+###O~KruV&F&GORKdh`Dg9ho * Ѐ0D H?<r=faČDJHQe8*5DBz!3Mi^qsE O4FL`+Fr`#C&F&Ibdbd~/a? (uo H@ H$ gW2L0LUhڮ'ͣuZ3(eLT)wF#$>mx},Y ( &Aw>:Rf=ó˘Ĵvdv|#+p,:_@taۃ)`a|,|q78{d5QlwެW~ٝ$qQ7h/'G|A|@z+~B<+[spv;"Ɲ$D;5`qjԜtdj6|锊 bBA(@")=|P %U>ȝI|U(S_8a,9C3IPPM_}$reV,Y)vEo'mN#䬏r(!uxA%w>yF&H}c##uw+ (…iKE^RP:сax .,HsY 2uQy;w=Ȟb$L$Br+tZ^@X{b, . qN6qӽjRzwbO:q'}8~_z22RľIn>MIj7q22?4j25GN0ZV @u(ӠXW XXYYaap u:׈Iqj`.* .IpǝM<},q5ZSFvm(4 &3HJxMA`Yp3aţ-f?QFQ5FstԜ&q9-Fj=cu#QcQwu8ֹ̬SX˺nNi7#9nFtddj:GXQwtꚏ$2'.&52KJQ߂s%/9>V0GĪ& QX*>j*%dQm., U^q|w7%%#A`,, а,, & jhN*B6F"aKnp,NlrO|;'DqFUQ\֍Gu'd5FGF(dh2;Q2vFsGi;ɒqGz;t8u0Iyda20A i5a(2j(G/zRȱtmq0Pq"D-"@=}\ =f0 wěw_PPh{_RGFFQIu#(ʎ `'Cq\= 5&QEs'ʎ}(J=FQVFTk(c/W=7vl;XJPE`MJJPŶGSٮxQZF#q5E_U.{>խѱ6 UhX# k޲M+%d11J~܈n VS~c O*2,ҔP-wO:UuK>#X,sJ=$Nh,LU\2 PJS.̅ |Na) Vȡd:Xu!@,,A @R,H;.ߒC"{2sU2S%%D BP9  bKʎ{ A4$'|=|#P ûd$5O"IeQ2{mQ8̮)Kv#FFFG>ҹNbL伨=j<.*Yk(W'*ڪUU XܯԖxѷl{{jvZ1j<D bPkE71D*BdƤ5rnrbI 9sAyJ fZk[,kRQi]*Ȉ쑦kX\1G,@Lmt Ѝ$ aqF4X]Ó%DgANA44 ˩~id9sX ,,,p [cĭ"A"D @Ā,%BTLeFGV#$Kj25Qq9F*]mUe;g|#hΕ*#XP!y.QY%j25Qq9Q8g2iUYkRqf]LL'#,ܚ\V-e}TR~돀F?Afv`?|Ϗ㈊4h L@ˆfDR a Wfqam,Fj֒21N!2d,ћ.. o#Id`7eJΨg(##,\s*,m O\:UzH;:"'B*"R\Ey' B5`X(re, |6ucD1dA5D(s܈HA8.&SA& 69 FGFQ5- I'6 GN6rE q xÁ6-̾ApD@8vJc|.ip (›A!x V^{M/FTxIv#5#q9N#qcqIj#O##0&]2)&._*vNYºJ*NVX? uFQ,/`Tj\ >, u@4  .3%"a\Hju$Jʌ2YIqIn2222RmqrH=e;GB)by1`$p &s#_ iQ?W3^G蠥 }Ο_}j?* ֡(Q䌓ҎM"12ʥ֎x )FFIdUMFVLr$# n9B4"(0!.C#}Nf^\P2$ H2>2|wS 9K` ZтE(IeFFFGy&9;uLdj&Zx4 35;y~AxgCގ`z%JJyb@D -&莤a22푪22ȸL(bS$'ǧ\:&Gב¿G?ޏQVS=k /ޏ|ED̕koGTs3湫NN2Z #D.>b%UCUYL5'5ѫ#e9M>ib`% Ͽ,2bf'a)e%ZadA!aa|_C҂1Kq& 1.j^^;v:VYX"*^8|FFFFFFG3j2*UYj)KQdddeG15EZQQֶL]v J_ҨX$BHIݨդ4B!@/0sD,|*I!G:Q]_FciX, GNvʦ.k,hY1DѬ7m¡PT9#c1FH!@WJӱءkCD%mcenkPje "Lgd3 &"`7(D*TA`[jg=dc(Q42),(XpXX\Z(7,L#F8L"2222225FFGF?@p]Dp°I3Zl8M&& $, j5#U#"G2MZQj2JʌFRZ$i2211204 <X% *;(sRItPH̟FFQ}ytGP!ETQKDS*BHCJ$,,#OFdU3DRY|-QF|Uk llh*BPlʡMer20pX5+Tb&`%XP22aa@~\'oR(V/ `=B |$٬N&Q,VFFGG! xlBTf| ڏK :xyٺ3Ob<`N+1bFbDN8㋋ g GyX$6ۄ:e[X%.4˸d? mɦk[Q[LtCE.+}u.Uk%Ey t톴S+([eJ !6̀{fXѕ+SA3&5wa'q<]ҸPEP[hk|eqIq+#7i W4s#y;KI \F/7ц*\vFm;wR9ВnJr92pS&NCB)0M*WTthn 6$~v3"GM;4q,]ˠ4 [R]<3VxjON#d#£@#q/ct}ZL cL{x[7r`Lj &^)Pff΍w˭IQ*%D qV2FTyєqFRZhQ-X,E՞&}#8kCŬIJĚJ.N${SX+I6 `c(Tn2Tj;QڎhGH:G28Ǿ5Gz1`^x@s{o߼f )6֒C,8v@*2T#,,PjN-&R):ؚ%& Ŭ0XDAi2g7796ʾ]2Nڝ 4M18LecqJGhdv=s#Ǻ5G=deG=׊)VFQqjƎw6Io jqVl`ib$]y<ǽCHEtǔ{8#jO}=3Tq2220XXXXXX_%RPwO|v Uv횈 @Xu^m$7eE|SV&UMFQVFP8*ʍƣEN1tҪ1UbeT52#*27չ9[@?[#A lF^>2i#qE%\uW{N2222222222222222222222220dddddddddddddddddddddyEOph* 7sEQoGQ(̣2oź3Qݺ3t~ߏ7LnU:;Y 2n7lj@7 -PM'9JV&j[i_D-fR_{k\TL]J>dddbVFFIc(ʕsE_6R^fj%/G|c##qz/Q֌!KTk:-FYQKYF/|׎ǔwFFQqFGRYG#Յ8lqFQj57QFm?EcU8 +h"UVYcdT8vД.%{ypx}6lQ7с \p1fbb#Qj2Fhbed&FTdeF8ݩED>ArDҨei ȇd]@Qj&ej'Gr,"35:P˰,!`PBkR"ZV0eFR箮qQ l?^]l|{ R cEGܝ{z XX_a dh0ѵN#(,9 >rSjR  ktFoX`4PotA/IG8fE=6thc%rmM|ky{tl*VaDkCu T,BV%Ij*F1a*C8Z5 pCTtleɴM6f̻kd3f0=>4'tRQYC^d7m"tJ_]aنݹ+p#aߌsKLnoU&`{.M30S 7k'X50M&|'64:ji7rL6eiOߒ(LyH¦ᮏGմhM %q1VFGZ;\tTn5T5F5IeFUIeQQҍQʫ%iβL22.J$!w!i[*Lo)W׮˵դbx 8N=ɹ5')SFt7G1n9(F:GH:GXGq\tdsF#j:1fJ8J hDg:@h'L-K+kn,wsauҠlda,TEN1J f.YDB,HE& Na $H (CC8HL@H,ŢbwNɹ8y'tjNS:i12h91(25Q9cu##en;Isңq5Ѩc*Q5=n S#,tF%lVIWjxUde8`Vat#" sF-#ÉYߒN ۃsv)h*FFFTy2225G28L&###q7FGM&IeY22 ex |)1֩&(TXqHqMW,]J8rüS݉NE$TɎ #DT+c8XF n7FT5FUQ2Tnkz3j6#(nN#q-5nLQnT7ܚe&5Io04QApTs quM#e c@ARd3zËcaap\*TMEȬK$A b &3xł>zF#խHѱ&-6j5c#qk&Yu:Fdn:F;*[eq^FFFi5Gpz` '"|I񟆾?&5UUTB" 1- Lp5Pd57hzΤ4'*,r=UW1i!"ilžn5̷(Onǟe_&_$UW4x;_ Ec4y !1BYC>M5G~lf4ɓ=}Yb4Н 1-DMg%ȞiJ2OFן^ ֲLú8MMN0fTrw0 rc겶氄O뢿s:Aʨ'x-(ĀB U%ޣ$,k#& үy- 88 5A rkq yrH''+(LMyJ8bF8@ap 5nJ&! Ddc96cDJ@  T XDrw%mVĸ+npODyTt:fb'i?UxUo*جȯLT+T =@ѱTQy0LZ}x#Βʌ(ʣddj25YFFF#* Gc'/d:uYwsD..b.abb/854R^h%IC\NAl6|e,W,,. z_;((Ra@!dY`X' .Ԧ\Q4xs=BLkhoqR,](t1I((rzYRX$IE+JiL#qj8Ȯd615FovGopKQ1Uf]t3bBF@I& 7QP0nTa2"{^kR&fHDk &F"&~n!U،f(B(NBt]'4iIa) /%ֈxCGhyAb <fpZ֢.h( )$B,@`Rxԥ,,Th:qƳ5$ `:vO}(&]<(X NO(,pԽcp( @z &4xkF@1  ylFQ A Yr/, ;"Va}63ԍ/'F&Q5F$7FYGjݖŘYJ0, -8AFB͆]zXN +|uwHёVMǝ8yr) =DiYwڴcZJFXNk@QQ-7FjK[7F9T}0ʪ{  _oʒݔd-9&8bRz_bagEl!rQ1$/%ϲluSߘoÏN =R#C33`DZ[;ܺ"-Ǟc^z g(#~Yu% )"d 22iYfŚ%)z3iKCɖ^G2R^fKD2@5mq546t$m4r~ͶBF""j !Ti $or ceg{[^Nv)eb[o%WNզI;1EDǛ! 4ؒޔpcbNs<#"wRpš(,H^u) 2- 1NB,v  ɑ׉2cU"neQU 8*3gY^aa$.7 /;v^Vs"I`fb}?CG7c;I3ǴutҋFc`ۛ O6L)AFBBEšhFBi`'$ 5xbyvkq8b- |>n~wCȓ)E˶&;Ǒx+fv8v.x^tFx4|j-Mܣ>*0܋8*[jPg+AB:VkyrMŸmgZn٤&U@F]0‘rWB䆕Qѭ%rr:Q:4et$9ecye𰟕=Iݧ[)8ζhBZUW̤f1섦a0(M6157GvqP7516Sy0rbME RQ.DkMa oE)g 5gnsBU"4 lmdDZifÅcކVaKD(֒84Ќ) fQ!J6#Lpe vRj\LlNMqNa[$#-۩M!W-p-.P0>XE#:6ϴo `lIͩl :/kMѠ[kJ5\UiZSdHq 2$QrN3 AR@"1.@73=a|:%xs** ְY\s sk$clN1|)9cp/X[W(#eQ=DIA`5-3gEVYlq bk[>xdSY:Y #} VФA2,JnCO Elق2L~"K՚Åj 66T޺Z&)_666@]1 AFܑN$