From f9ceb78f58cd7e2ff2998e8e26ebc2859e7ecba8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 7 Oct 2012 20:04:07 +0200 Subject: [PATCH] Beautify instal pg. Fix: Debian package --- build/debian/patches/install.dpatch | 8 +-- build/rpm/dolibarr-forrpm.patch | 4 +- htdocs/filefunc.inc.php | 4 +- htdocs/install/check.php | 18 +++---- htdocs/install/default.css | 44 ++++++++++++++--- htdocs/install/etape1.php | 2 +- htdocs/install/fileconf.php | 73 ++++++++++++++++++---------- htdocs/install/inc.php | 45 ++++++++++++----- htdocs/install/index.php | 5 -- htdocs/langs/en_US/install.lang | 1 + htdocs/langs/fr_FR/install.lang | 1 + htdocs/support/inc.php | 1 + htdocs/theme/common/information.png | Bin 0 -> 4180 bytes 13 files changed, 136 insertions(+), 70 deletions(-) create mode 100644 htdocs/theme/common/information.png diff --git a/build/debian/patches/install.dpatch b/build/debian/patches/install.dpatch index 0b8cb5a54b5..c7c77e25379 100755 --- a/build/debian/patches/install.dpatch +++ b/build/debian/patches/install.dpatch @@ -11,7 +11,7 @@ --- old/htdocs/filefunc.inc.php 2011-09-03 02:32:48.666952000 +0200 +++ new/htdocs/filefunc.inc.php 2011-09-03 02:33:00.510952001 +0200 -@@ -64,8 +64,8 @@ +@@ -63,8 +63,8 @@ $conffile = "conf/conf.php"; $conffiletoshow = "htdocs/conf/conf.php"; // For debian/redhat like systems @@ -24,7 +24,7 @@ // Include configuration --- old/htdocs/install/inc.php 2011-09-03 02:33:26.450952000 +0200 +++ new/htdocs/install/inc.php 2011-09-03 02:33:36.286952001 +0200 -@@ -84,8 +84,8 @@ +@@ -71,8 +71,8 @@ $conffile = "../conf/conf.php"; $conffiletoshow = "htdocs/conf/conf.php"; // For debian/redhat like systems @@ -37,7 +37,7 @@ if (! defined('DONOTLOADCONF') && file_exists($conffile)) --- old/htdocs/support/inc.php 2011-09-03 02:34:39.606952000 +0200 +++ new/htdocs/support/inc.php 2011-09-03 02:33:59.814952000 +0200 -@@ -79,8 +79,8 @@ +@@ -69,8 +69,8 @@ $conffile = "../conf/conf.php"; $conffiletoshow = "htdocs/conf/conf.php"; // For debian/redhat like systems @@ -46,5 +46,5 @@ +$conffile = "/etc/dolibarr/conf.php"; +$conffiletoshow = "/etc/dolibarr/conf.php"; - $charset="UTF-8"; // If not output format found in any conf file + if (! defined('DONOTLOADCONF') && file_exists($conffile)) diff --git a/build/rpm/dolibarr-forrpm.patch b/build/rpm/dolibarr-forrpm.patch index a5b50111a8a..41f27e3b791 100755 --- a/build/rpm/dolibarr-forrpm.patch +++ b/build/rpm/dolibarr-forrpm.patch @@ -15,7 +15,7 @@ diff -up htdocs/filefunc.inc.php.patch htdocs/filefunc.inc.php diff -up htdocs/install/inc.php.patch htdocs/install/inc.php --- htdocs/install/inc.php.patch 2011-09-03 02:33:26.450952000 +0200 +++ htdocs/install/inc.php 2011-09-03 02:33:36.286952001 +0200 -@@ -70,8 +70,8 @@ +@@ -71,8 +71,8 @@ $conffile = "../conf/conf.php"; $conffiletoshow = "htdocs/conf/conf.php"; // For debian/redhat like systems @@ -38,5 +38,5 @@ diff -up htdocs/support/inc.php.patch htdocs/support/inc.php +$conffile = "/etc/dolibarr/conf.php"; +$conffiletoshow = "/etc/dolibarr/conf.php"; + if (! defined('DONOTLOADCONF') && file_exists($conffile)) - { diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index c93923fc12c..62eec4ebaaf 100755 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -122,8 +122,8 @@ if (! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($_SERVER } if (empty($dolibarr_main_db_host)) { - print 'Dolibarr setup is not yet complete.

'."\n"; - print 'Click here to finish Dolibarr install process ...'."\n"; + print '
Dolibarr setup is not yet complete.

'."\n"; + print 'Click here to finish Dolibarr install process ...
'."\n"; die; } if (empty($dolibarr_main_url_root)) diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 1f41542e059..4446e9e1fcb 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2009 Laurent Destailleur + * Copyright (C) 2004-2012 Laurent Destailleur * Copyright (C) 2005 Marc Barilley / Ocebo * Copyright (C) 2005-2012 Regis Houssin * @@ -52,12 +52,6 @@ dolibarr_install_syslog("Dolibarr install/upgrade process started"); pHeader('',''); // No next step for navigation buttons. Next step is defined by clik on links. - -print '
'; -print 'Dolibarr logo
'; -print DOL_VERSION.'

'; -print '
'; - //print "
\n"; //print $langs->trans("InstallEasy")."

\n"; @@ -372,7 +366,7 @@ else print ''; if ($allowinstall) { - print ''.$langs->trans("Start").''; + print ''.$langs->trans("Start").''; } else { @@ -391,9 +385,9 @@ else if (defined("MAIN_NOT_INSTALLED")) $allowupgrade=false; $migrationscript=array( //array('from'=>'2.0.0', 'to'=>'2.1.0'), //array('from'=>'2.1.0', 'to'=>'2.2.0'), - array('from'=>'2.2.0', 'to'=>'2.4.0'), - array('from'=>'2.4.0', 'to'=>'2.5.0'), - array('from'=>'2.5.0', 'to'=>'2.6.0'), + //array('from'=>'2.2.0', 'to'=>'2.4.0'), + //array('from'=>'2.4.0', 'to'=>'2.5.0'), + //array('from'=>'2.5.0', 'to'=>'2.6.0'), array('from'=>'2.6.0', 'to'=>'2.7.0'), array('from'=>'2.7.0', 'to'=>'2.8.0'), array('from'=>'2.8.0', 'to'=>'2.9.0'), @@ -448,7 +442,7 @@ else if ($allowupgrade) { // If it's not last updagre script, action = upgrade_tmp, if last action = upgrade - print ''.$langs->trans("Start").''; + print ''.$langs->trans("Start").''; } else { diff --git a/htdocs/install/default.css b/htdocs/install/default.css index dabe41e82ce..38b1a35ed57 100644 --- a/htdocs/install/default.css +++ b/htdocs/install/default.css @@ -21,9 +21,9 @@ font-size:13px; font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif; background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat; /* background-color: #F4F4F4; */ -margin-left: 20px; -margin-right: 20px; -margin-top: 20px; +margin-left: 30px; +margin-right: 30px; +margin-top: 15px; margin-bottom: 10px; } @@ -61,6 +61,14 @@ padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; } +input[type=text] { + border: 1px solid #ACBCBB; +} +input[type=text]:focus, textarea:focus, select:focus { + border: 1px solid #ACBCBB; + box-shadow: 0 0 5px #C091AF; +} + table.main { background: #F0F0F0 url(background.png) repeat-x; text-align: left; @@ -86,6 +94,10 @@ color: #000000; border: 1px solid #888888 !important; } +tr.listofchoices { + height: 42px; +} + .blinkwait { font-weight: bold; text-decoration:blink !important; @@ -165,8 +177,8 @@ font-size: 13px; h3 { margin-top: 10px; -font-size:18px; -font-weight: bold; +font-size:16px; +font-weight: normal; color: #4965B3; } @@ -183,7 +195,7 @@ td.label { color: #5945A3; padding: 5px 5px 5px 5px; margin: 0em 0em 0em 0em; -border-bottom: 1px solid #8CACBB; +border-bottom: 1px solid #CCCCDB; } /* Class for parameters example */ @@ -193,7 +205,7 @@ padding: 5px 5px 5px 5px; margin: 0em 0em 0em 0em; text-decoration:none; font-size: 11px; -border-bottom: 1px solid #8CACBB; +border-bottom: 1px solid #CCCCDB; } table { @@ -219,3 +231,21 @@ ul { padding-top: 0; padding-bottom: 0; } + + +.button { + background-color: #FFFFFF; + background-position: bottom; + border: 1px solid #C0C0C0; + padding: 0.3em 0.7em; + margin: 0em 0.5em; + -moz-border-radius:0px 5px 0px 5px; + -webkit-border-radius:0px 5px 0px 5px; + border-radius:0px 5px 0px 5px; + -moz-box-shadow: 2px 2px 3px #CCC; + -webkit-box-shadow: 2px 2px 3px #CCC; + box-shadow: 2px 2px 3px #CCC; +} +a.button:hover { + text-decoration:none; +} diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php index 1f9681ed89f..8e6ca05e9d4 100644 --- a/htdocs/install/etape1.php +++ b/htdocs/install/etape1.php @@ -706,7 +706,7 @@ function jsinfo() dolibarr_install_syslog("--- install/etape1.php end", LOG_INFO); -pFooter($error,$setuplang,'jsinfo'); +pFooter($error,$setuplang,'jsinfo',1); /** diff --git a/htdocs/install/fileconf.php b/htdocs/install/fileconf.php index 704f8a54f41..9511836b270 100644 --- a/htdocs/install/fileconf.php +++ b/htdocs/install/fileconf.php @@ -1,7 +1,7 @@ * Copyright (C) 2004 Eric Seigne - * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2004-2012 Laurent Destailleur * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2004 Sebastien DiCintio * Copyright (C) 2005-2011 Regis Houssin @@ -25,8 +25,8 @@ * \ingroup install * \brief Ask all informations required to build Dolibarr htdocs/conf/conf.php file (will be wrote on disk on next page) */ -include_once 'inc.php'; +include_once 'inc.php'; $err=0; @@ -36,36 +36,40 @@ $langs->setDefaultLang($setuplang); $langs->load("install"); $langs->load("errors"); -// You can force preselected values of the config step of Dolibarr by adding a file -// install.forced.php into directory htdocs/install (This is the case with some wizard -// installer like DoliWamp, DoliMamp or DoliBuntu). -// We first init "forced values" to nothing. -if (! isset($force_install_noedit)) $force_install_noedit=''; -if (! isset($force_install_type)) $force_install_type=''; -if (! isset($force_install_dbserver)) $force_install_dbserver=''; -if (! isset($force_install_port)) $force_install_port=''; -if (! isset($force_install_database)) $force_install_database=''; -if (! isset($force_install_prefix)) $force_install_prefix=''; -if (! isset($force_install_createdatabase)) $force_install_createdatabase=''; -if (! isset($force_install_databaselogin)) $force_install_databaselogin=''; -if (! isset($force_install_databasepass)) $force_install_databasepass=''; -if (! isset($force_install_databaserootlogin)) $force_install_databaserootlogin=''; -if (! isset($force_install_databaserootpass)) $force_install_databaserootpass=''; -// Now we load forced value from install.forced.php file. -$useforcedwizard=false; -$forcedfile="./install.forced.php"; -if ($conffile == "/etc/dolibarr/conf.php") $forcedfile="/etc/dolibarr/install.forced.php"; -if (@file_exists($forcedfile)) { $useforcedwizard=true; include_once $forcedfile; } - dolibarr_install_syslog("Fileconf: Entering fileconf.php page"); +// You can force preselected values of the config step of Dolibarr by adding a file +// install.forced.php into directory htdocs/install (This is the case with some wizard +// installer like DoliWamp, DoliMamp or DoliBuntu). +// We first init "forced values" to nothing. +if (! isset($force_install_noedit)) $force_install_noedit=''; // 1=To block var specific to distrib, 2 to block all technical parameters +if (! isset($force_install_type)) $force_install_type=''; +if (! isset($force_install_dbserver)) $force_install_dbserver=''; +if (! isset($force_install_port)) $force_install_port=''; +if (! isset($force_install_database)) $force_install_database=''; +if (! isset($force_install_prefix)) $force_install_prefix=''; +if (! isset($force_install_createdatabase)) $force_install_createdatabase=''; +if (! isset($force_install_databaselogin)) $force_install_databaselogin=''; +if (! isset($force_install_databasepass)) $force_install_databasepass=''; +if (! isset($force_install_databaserootlogin)) $force_install_databaserootlogin=''; +if (! isset($force_install_databaserootpass)) $force_install_databaserootpass=''; +// Now we load forced value from install.forced.php file. +$useforcedwizard=false; +$forcedfile="./install.forced.php"; +if ($conffile == "/etc/dolibarr/conf.php") $forcedfile="/etc/dolibarr/install.forced.php"; // Must be after inc.php +if (@file_exists($forcedfile)) { + $useforcedwizard=true; include_once $forcedfile; +} + +//$force_install_message='This is the message'; +//$force_install_noedit=1; /* * View */ -pHeader($langs->trans("ConfigurationFile"),"etape1"); +pHeader($langs->trans("ConfigurationFile"),"etape1","set","",($force_dolibarr_js_JQUERY?$force_dolibarr_js_JQUERY.'/':'')); // Test if we can run a first install process if (! is_writable($conffile)) @@ -77,11 +81,27 @@ if (! is_writable($conffile)) if (! empty($force_install_message)) { - print ''.$langs->trans($force_install_message).'
'; + print '
'.$langs->trans($force_install_message).'
'; + + /*print ''; + + print '
'.$langs->trans("ShowEditTechnicalParameters").'
'; + */ } ?> - +
+ + +
@@ -449,6 +469,7 @@ if (! empty($force_install_message))
+
'."\n"; - print ''."\n"; + + print ''."\n"; + if ($forcejqueryurl) print ''."\n"; // JQuery + else if (constant('JS_JQUERY_UI')) print ''."\n"; // JQuery + else print ''."\n"; // JQuery + + print ''."\n"; + if ($forcejqueryurl) print ''."\n"; + else if (constant('JS_JQUERY')) print ''."\n"; + else print ''."\n"; + if ($forcejqueryurl) print ''."\n"; + else if (constant('JS_JQUERY_UI')) print ''."\n"; + else print ''."\n"; + print ''.$langs->trans("DolibarrSetup").''."\n"; print ''."\n"; + print ''."\n"; + + print '
'; + print 'Dolibarr logo
'; + print DOL_VERSION.'

'; + print '
'; + print ''.$langs->trans("DolibarrSetup"); if ($soutitre) { print ' - '.$soutitre; @@ -348,9 +370,10 @@ function pHeader($soutitre,$next,$action='set',$param='') * @param string $nonext No button "Next step" * @param string $setuplang Language code * @param string $jscheckfunction Add a javascript check function + * @param string $withpleasewait Add also please wait tags * @return void */ -function pFooter($nonext=0,$setuplang='',$jscheckfunction='') +function pFooter($nonext=0,$setuplang='',$jscheckfunction='', $withpleasewait=0) { global $conf,$langs; @@ -365,7 +388,7 @@ function pFooter($nonext=0,$setuplang='',$jscheckfunction='') print '
"'; if ($jscheckfunction) print ' onClick="return '.$jscheckfunction.'();"'; print '>
'; - print ''; + if ($withpleasewait) print ''; } if ($setuplang) { diff --git a/htdocs/install/index.php b/htdocs/install/index.php index 1c288ff9f23..8ae001bb1e6 100644 --- a/htdocs/install/index.php +++ b/htdocs/install/index.php @@ -48,11 +48,6 @@ $formadmin=new FormAdmin(''); // Note: $db does not exist yet but we don't need pHeader("", "check"); // Etape suivante = check -print '
'; -print 'Dolibarr logo
'; -print DOL_VERSION.'

'; -print '
'; - // Ask installation language print '

'; print ''; diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index cd43be5c0af..9ccea54a0f8 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -155,6 +155,7 @@ MigrationShippingDelivery2=Upgrade storage of shipping 2 MigrationFinished=Migration finished LastStepDesc=Last step: Define here login and password you plan to use to connect to software. Do not loose this as it is the account to administer all others. ActivateModule=Activate module %s +ShowEditTechnicalParameters=Click here to show/edit advanced parameters (expert mode) ######### # upgrade diff --git a/htdocs/langs/fr_FR/install.lang b/htdocs/langs/fr_FR/install.lang index 2dd0216fbc8..f73c95aacd9 100644 --- a/htdocs/langs/fr_FR/install.lang +++ b/htdocs/langs/fr_FR/install.lang @@ -160,6 +160,7 @@ LinkedElementsInvalidDeleted=%s liaisons invalides ont été supprimées NothingToDelete=Aucune liaison invalide trouvée SourceType=Source TargetType=Cible +ShowEditTechnicalParameters=Cliquer ici pour afficher/éditer les paramètres techniques (mode expert) ######### # upgrade diff --git a/htdocs/support/inc.php b/htdocs/support/inc.php index f27546d2528..97ab847f1a9 100644 --- a/htdocs/support/inc.php +++ b/htdocs/support/inc.php @@ -72,6 +72,7 @@ $conffiletoshow = "htdocs/conf/conf.php"; //$conffile = "/etc/dolibarr/conf.php"; //$conffiletoshow = "/etc/dolibarr/conf.php"; + if (! defined('DONOTLOADCONF') && file_exists($conffile)) { $result=include_once $conffile; // Load conf file diff --git a/htdocs/theme/common/information.png b/htdocs/theme/common/information.png new file mode 100644 index 0000000000000000000000000000000000000000..231d39426c5bfba6b3e7f9a4f955be2888251285 GIT binary patch literal 4180 zcmV-a5UcNrP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyt= z5eGY+;owLB01wnjL_t(&-tC%sj9piK$3MSwm$%HkS!|ETo_I-Gl0Xs{lCY*rT8bbw zAS(W-DoU#gu@%%(r9k2Y!jeE@!rBdywtuv0E9j;Q5u8xckPxC0AS#8lggC_Zcw#$a z&-%7|?>Xn!KhAygX1q+s#(@a=Ctc~yn|sea-{1QE{mz4Pa!!7xM1DH2{S%-765ta* zYk)rp>s1(wV5nk}sz_=CVW3vuLk>QH& zW8V9}SCzZ=AFFs zP>Bs`Vu&L{6bVKQ;PGCtUMZ}STTkv_aqcMd(+4Q>Eb~s^^n@Mx0zW*YJYhZD{8Iuv zbR8`0X4}r)FEjW*OR9}42i9$&S{u|##YjCh4Ao*9g9$^ml!018trAg5V&ceP44~i? zto3vYPp4bZ>{=Gvj)jiZ+4-i-P9I|a*pr8x*U#*`^Sa$^ze(8tVP*V%aO9Ss1mNod z!={}ZhO3g_6eZPb2i9%T+Tc1#BS)hav3{t+#?cyM!!<^SY77ljs8-m zy@KCG>V8Lg9sR7 zmR>F-`1{rBosirYeB!HkO-YHHM z@5ALZnAj_TVnm3HkR}neN=&1cGF(roS0f@kmI$eB)NXt6wS(I`m(1_|z`wu^z}L?< z;2ZILob5YrdsCcL{&wWN%Z!PP;4{+5Gdd7)-o`;D#u|(^YE+Uq#HUxR4epv3j=~;y zIY(hVh4WbFan9kK;?)CSL`af|Y8n&ALSZePtPrVt5 z0KWsS+z@ZS{FQHulgb^V+kOF2E9x^MEcH~_FkEAN-5^8t3Xu_3Xw!1Xj8B!eul?&?3y>>2d+`;@6zyoIk z@VD4{`Kw+O$ML_7Y`H9ebs3@sMjZ7@#Big^P`yGN8@$&5(Ds33ogC9y+V-{n#v{@G-gb0c_6`N^i&uhqVrCJxoag9Vi^mQgn?iv=Z7~v=fb2?6ZIM53%~*%5ycoo5=TVF z;8n4%v{W8k(_6<|U-vwa6ZLz^MccUhKfj5Ohsb#feT+J-BnVxAf z+ia8N1zy9lmBu*T`Ked<@xf1KKf1)if1M)nt|nV=GTU|x{C-j!+?m!#P}c=tfEJ)0 z!Q)jZ3QM!y#TY1TN)pEy6SA!WS6{mMq+kI=gv}c_u)oS^~hrnEb!?oPhDwFD!YI-Y#%a);)9K`3lyJ=YJsQ) z^`MH1AU?39RyPMiqDteyq@=91M`l~A>h-C4&wODq*7sd{$+bf{D+d8Idy$?RWR=~FcuzmPrZ>SD!+8V_P>bi(8!J?>? z2|&QBrzoJMIl1+uaS_;*2qrSz_q{28@0yDl9jc!2roH=S_@5`c)EdzeAu&dfl8~qm zS-g`KEVeQhnq4}1f%gguhyxYWM+i=aCobjKzVF-$pTFv~VtDA6c30|E?r)4;kcxQl zIjAi=y1;>hO9r>}8h|_R%NXumAr|ld?vp%s>nLNR^`&=w?c0;w{)LCh5wgOPTSt~# z^1PsvTiV^6#dep4W|z6e4$XE(mKQj$;q{`FstK1EOq5b|=C=-<|0{bI_TDpfJSjOv zmVPr^cV765X_7uLx^)NY+TgMfzXW&g#pLqP3}1&$hzaf}2u6anx|w71Xq}Ctbtb2q zbaF=}jmjDu6c@In_>zrT=dsR(dh9)_imEK>T$Z$+f=Q96MrZLD&FLrpegA#!*VDd5 z*Wl8Bjp5eU4Xob=YSA)5AsU#zF{lsmwlV=xQbUs_{zQ3ccOQtW?-qI(3d9`yl?YCs?gLt_`imdjyap!X!Iy)|?xo1bj` z@U@0N)Bz3*qyy`=Y}&H0?(ic#wF=;Cflo62s@q3RoKA>36pyF}@nzh~ntQBnX8DH? zznR2B5}Tl4-tbeZZDQIAA1ioERU0iQo&MD+Y9u7LP5 zhEBBXTC5Nm!$bdjh&>Pfh%es%7|!{VE5-Yhs(x*t6~y%S={*V_QHL8S!`vz>c!_1MJFP&*8TX?Na=r26cG^-LnZY! zAV0N*;|c;Xi0ZO*@Jx>Ee|*5YR1W)Fm9n{6iSb0hohBYSs25X$m0ld5hILOzoONM? zr@4H8J5naBWnZeI2+nJ7L6_0Ivjtc&{q%U6bLM_64wWrXR_}5=d^P;@ou>kPNAT)B*FWfN24c!f zmSqDu-DG__!FYzDU`i+kkq9vnd1nz-{yE(67poDEQtL(bpgNC8gkpmFRDiP|#9sTG zKb}LM@)=*!PSrpJML?ne+9c%7qi$wF_pE_wEp6iO+Vh9N#E3+}y(NIwH5x{(g>Dx* z9cZ^ssVub_vN(sCoyN@1phdB2bF$PR^|-X5A9}{%vbGjk>j$kT7VH`)9`C}d+}oW$ zOnr0$BnGi%H`41^%jRj7ST+lDaP(2|ZDe5qaBm zC2VXc#&}E=ap7}*{)8SHU}3RI635hPRbKg;w=p+-1%6;~#paf*s>f3e0}`WAikKQE zs&aJycbIME19SK6YOl@0m0ghCibH;@H8c6x=y{i^suk~}FbGgZw47_nO3*7tuorG- zeEq=FpSm^%SG7V9WUo4e=BOMZN(3fCBtc9}XWfbYU z_pbeC2Dp72Q+wWfz}ftd7Y;v)m_$WV)FkD=(;&*0M`zIUt-Baa(r~yMy1l;Y zRwSzkl^8Jzn1rk~OMC9gM-F^>*T*M@ZuoHz#6QgWuTFo^*zj`~R~qZUckwPSk6c_y z?M{?eyx=^%hT*(*p1kn1vVy#DIPb{{PrFl4SQm~}eMvDzPGob+vhovwNl=qwOa)BL z(I>u5k?ZEEuUvO{^)v1@$t(-`<|}pj@kfV5CMpBNBBu1NUeQ+{E@5eUareWME9O#i zoQmbRKrP#|m0*{fR!!-~aTv*(3X0L0eGiMX?wYBu>^l5(NY?0cpJL|g3vH|Br3=%K z&lXu5iK;55f|@jJKn$2@S$rvx5u)5+ade-W@$-g>cNC=+D_CWa_Q zqDrtVMrWtKFV5O`Oy0HY?zJFUdysW+(WwWHP8B}dF@NaMJZsH~L={X_MNB0O!lg`T zVe;M^9EUR|(+}`oV$)@mE!<=JiLSQ>J+KLw3L=&AeK9i!{#$I;dCP%s+s{3NKWc%^ z*X&-O8h2N9? zyNkzIoZgFb{^gT(&9Zku_MV8`RWO)l38UQtM2{OS%DPn>fdsUiG?W1{Y-@}=UE_?E>>;JD` zQSN=_EW9M!ZZTVSRJX<0hmvYzYX7W+Ovmf&rIUcckI9OfzQI1&WyyIG1#pig2@j6F#Kz`S4L{~H$}{!Cbh=K`pAT) z^-)nRP;W~r8V2Oc=S|Xc_nw8N9MMRGm;`TgZOt5%yfurp*>11$=LhfFb#T+*4IFNM z^d}7XR7T%<+Z#mvJ58KEzuFiZNbAEyNd+-6#zY}%d-1%)nnFTTU#PQIY}TZ^I8D)+ z{{a$xu~j4=Jo+E+?wl2xde(_=O8vu0000