web/lib/Zend/Tool/Project/Context/Zf/ApplicationConfigFile.php
author Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
Thu, 07 May 2015 15:16:02 +0200
changeset 1230 68c69c656a2c
parent 807 877f952ae2bd
permissions -rw-r--r--
upgrade Zend
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     1
<?php
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     2
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     3
 * Zend Framework
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     4
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     5
 * LICENSE
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     6
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     7
 * This source file is subject to the new BSD license that is bundled
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     8
 * with this package in the file LICENSE.txt.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     9
 * It is also available through the world-wide-web at this URL:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    10
 * http://framework.zend.com/license/new-bsd
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    11
 * If you did not receive a copy of the license and are unable to
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    12
 * obtain it through the world-wide-web, please send an email
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    13
 * to license@zend.com so we can send you a copy immediately.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    14
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    15
 * @category   Zend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    16
 * @package    Zend_Tool
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    17
 * @subpackage Framework
1230
68c69c656a2c upgrade Zend
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 807
diff changeset
    18
 * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    19
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
1230
68c69c656a2c upgrade Zend
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 807
diff changeset
    20
 * @version    $Id$
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    21
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    22
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    23
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    24
 * @see Zend_Tool_Project_Context_Filesystem_File
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    25
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    26
require_once 'Zend/Tool/Project/Context/Filesystem/File.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    27
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    28
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    29
 * This class is the front most class for utilizing Zend_Tool_Project
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    30
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    31
 * A profile is a hierarchical set of resources that keep track of
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    32
 * items within a specific project.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    33
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    34
 * @category   Zend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    35
 * @package    Zend_Tool
1230
68c69c656a2c upgrade Zend
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 807
diff changeset
    36
 * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    37
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    38
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    39
class Zend_Tool_Project_Context_Zf_ApplicationConfigFile extends Zend_Tool_Project_Context_Filesystem_File
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    40
{
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    41
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    42
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    43
     * @var string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    44
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    45
    protected $_filesystemName = 'application.ini';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    46
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    47
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    48
     * @var string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    49
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    50
    protected $_content = null;
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    51
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    52
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    53
     * getName()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    54
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    55
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    56
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    57
    public function getName()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    58
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    59
        return 'ApplicationConfigFile';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    60
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    61
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    62
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    63
     * init()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    64
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    65
     * @return Zend_Tool_Project_Context_Zf_ApplicationConfigFile
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    66
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    67
    public function init()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    68
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    69
        $this->_type = $this->_resource->getAttribute('type');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    70
        parent::init();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    71
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    72
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    73
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    74
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    75
     * getPersistentAttributes()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    76
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    77
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    78
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    79
    public function getPersistentAttributes()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    80
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    81
        return array('type' => $this->_type);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    82
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    83
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    84
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    85
     * getContents()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    86
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    87
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    88
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    89
    public function getContents()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    90
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    91
        if ($this->_content === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    92
            if (file_exists($this->getPath())) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    93
                $this->_content = file_get_contents($this->getPath());
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    94
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    95
                $this->_content = $this->_getDefaultContents();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    96
            }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    97
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    98
        }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    99
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   100
        return $this->_content;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   101
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   102
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   103
    public function getAsZendConfig($section = 'production')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   104
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   105
        return new Zend_Config_Ini($this->getPath(), $section);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   106
    }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   107
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   108
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   109
     * addStringItem()
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   110
     *
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   111
     * @param string $key
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   112
     * @param string $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   113
     * @param string $section
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   114
     * @param bool   $quoteValue
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   115
     * @return Zend_Tool_Project_Context_Zf_ApplicationConfigFile
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   116
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   117
    public function addStringItem($key, $value, $section = 'production', $quoteValue = true)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   118
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   119
        // null quote value means to auto-detect
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   120
        if ($quoteValue === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   121
            $quoteValue = preg_match('#[\"\']#', $value) ? false : true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   122
        }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   123
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   124
        if ($quoteValue == true) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   125
            $value = '"' . $value . '"';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   126
        }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   127
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   128
        $contentLines = preg_split('#[\n\r]#', $this->getContents());
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   129
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   130
        $newLines = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   131
        $insideSection = false;
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   132
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   133
        foreach ($contentLines as $contentLineIndex => $contentLine) {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   134
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   135
            if ($insideSection === false && preg_match('#^\[' . $section . '#', $contentLine)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   136
                $insideSection = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   137
            }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   138
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   139
            $newLines[] = $contentLine;
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   140
            if ($insideSection) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   141
                // if its blank, or a section heading
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   142
                if (isset($contentLines[$contentLineIndex + 1]{0}) && $contentLines[$contentLineIndex + 1]{0} == '[') {
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   143
                    $newLines[] = $key . ' = ' . $value;
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   144
                    $insideSection = null;
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   145
                } else if (!isset($contentLines[$contentLineIndex + 1])){
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   146
                    $newLines[] = $key . ' = ' . $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   147
                    $insideSection = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   148
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   149
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   150
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   151
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   152
        $this->_content = implode("\n", $newLines);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   153
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   154
    }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   155
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   156
    /**
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   157
     *
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   158
     * @param array $item
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   159
     * @param string $section
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   160
     * @param bool $quoteValue
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   161
     * @return Zend_Tool_Project_Context_Zf_ApplicationConfigFile
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   162
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   163
    public function addItem($item, $section = 'production', $quoteValue = true)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   164
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   165
        $stringItems = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   166
        $stringValues = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   167
        $configKeyNames = array();
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   168
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   169
        $rii = new RecursiveIteratorIterator(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   170
            new RecursiveArrayIterator($item),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   171
            RecursiveIteratorIterator::SELF_FIRST
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   172
            );
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   173
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   174
        $lastDepth = 0;
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   175
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   176
        // loop through array structure recursively to create proper keys
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   177
        foreach ($rii as $name => $value) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   178
            $lastDepth = $rii->getDepth();
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   179
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   180
            if (is_array($value)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   181
                array_push($configKeyNames, $name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   182
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   183
                $stringItems[] = implode('.', $configKeyNames) . '.' . $name;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   184
                $stringValues[] = $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   185
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   186
        }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   187
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   188
        foreach ($stringItems as $stringItemIndex => $stringItem) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   189
            $this->addStringItem($stringItem, $stringValues[$stringItemIndex], $section, $quoteValue);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   190
        }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   191
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   192
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   193
    }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   194
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   195
    public function removeStringItem($key, $section = 'production')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   196
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   197
        $contentLines = file($this->getPath());
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   198
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   199
        $newLines = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   200
        $insideSection = false;
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   201
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   202
        foreach ($contentLines as $contentLineIndex => $contentLine) {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   203
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   204
            if ($insideSection === false && preg_match('#^\[' . $section . '#', $contentLine)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   205
                $insideSection = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   206
            }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   207
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   208
            if ($insideSection) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   209
                // if its blank, or a section heading
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   210
                if ((trim($contentLine) == null) || ($contentLines[$contentLineIndex + 1][0] == '[')) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   211
                    $insideSection = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   212
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   213
            }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   214
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   215
            if (!preg_match('#' . $key . '\s?=.*#', $contentLine)) {
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   216
                $newLines[] = $contentLine;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   217
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   218
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   219
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   220
        $this->_content = implode('', $newLines);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   221
    }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   222
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   223
    public function removeItem($item, $section = 'production')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   224
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   225
        $stringItems = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   226
        $stringValues = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   227
        $configKeyNames = array();
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   228
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   229
        $rii = new RecursiveIteratorIterator(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   230
            new RecursiveArrayIterator($item),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   231
            RecursiveIteratorIterator::SELF_FIRST
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   232
            );
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   233
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   234
        $lastDepth = 0;
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   235
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   236
        // loop through array structure recursively to create proper keys
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   237
        foreach ($rii as $name => $value) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   238
            $lastDepth = $rii->getDepth();
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   239
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   240
            if (is_array($value)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   241
                array_push($configKeyNames, $name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   242
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   243
                $stringItems[] = implode('.', $configKeyNames) . '.' . $name;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   244
                $stringValues[] = $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   245
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   246
        }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   247
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   248
        foreach ($stringItems as $stringItemIndex => $stringItem) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   249
            $this->removeStringItem($stringItem, $section);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   250
        }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   251
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   252
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   253
    }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   254
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   255
    protected function _getDefaultContents()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   256
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   257
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   258
        $contents =<<<EOS
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   259
[production]
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   260
phpSettings.display_startup_errors = 0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   261
phpSettings.display_errors = 0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   262
includePaths.library = APPLICATION_PATH "/../library"
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   263
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   264
bootstrap.class = "Bootstrap"
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   265
appnamespace = "Application"
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   266
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   267
resources.frontController.params.displayExceptions = 0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   268
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   269
[staging : production]
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   270
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   271
[testing : production]
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   272
phpSettings.display_startup_errors = 1
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   273
phpSettings.display_errors = 1
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   274
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   275
[development : production]
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   276
phpSettings.display_startup_errors = 1
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   277
phpSettings.display_errors = 1
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   278
resources.frontController.params.displayExceptions = 1
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   279
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   280
EOS;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   281
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   282
        return $contents;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   283
    }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   284
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   285
}
vɹ&Eo6%ʬv #I@789: J*Y O_ix!V೟JU*vmg ôNWI}fÜ ]r{#P{_K#F(Xr{ y*Lb4y:Ɲ:_4AxNg)Z4YJ$dc#}ԛUgLZ+Iq'(cX 2fcc=-x灖^\F2ƱS=N1ˆs220LNΜrT14 UU+a;;yEi#ڴUp&2i+R=, k9R5L.őhcƑ%rѧM6WGG0υhMYe1XzLóڪ UlƥSr<+nZ0M4ZiO)^5W󝶎l{+)w'CIhbuAzRNRw=0r[ ?PNqEm4V]Dz0UzjG0WL13\csi=ݭjesבT2ֵZZXܴcŀ~D _jI}/^))e1ކ1qׄzSMbUQˢͱoF|ԙQٌUO'َ\214cZ,\ɃSq+?<ହIwii+gUm$bbjV+N4%~ :%gI87LjPtTv_dQuGIܪnG&;>2xǤdL[1-we]X1 /ho~dOyOL>^t9:r:iɆN]R^T]a_dœ0GtL٦ٚ׵xOc61U4ұ*Km\MELdZr$cұz;>i>.&:],ŋUk1W549i]Ѣ)Sh_{}٣fs0,c_mG6)L29c·Zfy?$:4qݪR0/}J>~E?[㚩ydM BZru; LJoe):$ja;Gc2߆ø4x=JraUt|:hiJzݭN)[cg[;ۻbdYYCɣ0覍>pNOcГ LSgJiq].i4SɩUtzbftɧֲkof帙X#ݣdQzѧDz'ߑV;;Zm[msdgM~E00F;b1x^xmҷy|aRض[tkﮡ'w[-]ɚ?s, R<5?z?}S0V?%'lV> #ﻬW3z'Qd'[ynC#qmlZ'A,Sk]sҤUNJ>-J<IV+4pg55>^յ_ #|MpYV'ix4Qg9G*,랥7dcs/)t.飾9.[STQHUY']GH20ksz\: 24M E`=N'2NSb/k1LiX»N=SlO*q;t#)K22Zt.y7bflx[_mdj%prZʫ;'O9gYb3ke oy`jp?4m&51NO_=rL!Z\7|7MӾV{aiͺ}gI ӲPܣu)iz^E?-2M'4Yj&ss U&%rZ?/|\ʿKҹFn\JTs6Ͼ6/6lnGcpv86Vt4ԻI|f+hUUԬ=_yO:lっ)63V_l+ !u6 k,V6KV4wcыtfE%"̰ _+w0V)b'dx?raG'g#)D28O=ZjOs/Zձau56+aa?T= 6fPJd?``E=AWNˠ1bs1j S(4XwĊ BVG}Z2ZuEԲkk,}7ٹatRoc#T8JJǹI05>By CA-5>i(IjtǫPQe1Øĩ6Nl];%&ʑTbT|ӯX[\*s9{j=20ENsڟ藧LV2MT]/IӻxO|4OTa5ETO8=O{n)9s߽L\Œ{撳k`3Y6QXՉ-i.|"`?jp^\oo\N|x4yƓb}^=q7OTVzCshd7=}L]4ퟀ1k(?p\^cA!=JJ#p}5ˣ)QEωXKxN .1MNh)5<{9c?+5GV)5{;oE?e|eh ݊ڔQ YDy9r?N* f%&oo&sya6%RP"vke?Opd՛s=>s#.NԾ\̾Zq>cp6M꼼aW %o3/0(F';E>êXڱX%JEY\8GL~ӄt̢#HĬUqu#7KVz->Wty><(k|LBY{U͋z'\YJm־ϷzcW:X6<'Y, .4tꝇTg8S\pg-9n\ckeS"U(RoUAۂDQڣsۇ3zٞɵ`' ceq^/\iF\YW2b~-n776gA?ld3-5'U6d=l9ܹ>dT7ci?kLM_?jUsV* R HRkVl1Yd_{v枧W θrcƯQha*d pes?wl\ _`:ˢs uji$2axcȺM3?@݌:Ge)4us쏙zִyu  $n@@rx~3%;x!D8>ԣ#SQT'sEnJ890RS  @^ɱvÖ?lbNc̸#eEM;&ԆF,ؚ i#\RtiDv4F1Mʹ;C:wuw2v4\oF pm$ٶGnp4TFmb8&#gd WQ$uFScOcM**GFL36{__!NXyNvM#F -›)ࣲJ=?ļ c=GX;&.'C-TZEVO,o,Ht6F|*lRFčl`lZfCIs:0g,ԸT3$7:Ng훝[wae&Jg?8(=?o:{JtQ䢊ǩ|4}q%5j'aZl&ËVs,ɁŸq&ض2qF}JliU)72yZk25!ICr1`Krqaag1+3F~Vw};݇Qd h_Xc 013 bYc%J'ia4߮*®LiYLb0OzViL9t.bpLÙYJ1cFOSydzb}eı L0±=/?3,іUYI4sI*_1͍7n8A\ޱ}d Sӎ9gZ:Kaahn*Cƍ0`ȿe{W?_fًkb괎2-➅!*>w#)< <3{>2іkc#`T~7XcxkQ.#tĴz~A,¼S`62Mr3"VITodaC&O96Y=J`' '%' g'fmM;/#uh6j 8SH5(p,%bOe>0_}Ct012;GP=ab4ٝw)s22W?o0{\:Ɔ$~ NRDRO.ԚyaJ]&# lm'S?|2'eP0{ c J> 00ظaԏhe1a45\}_2ǃ_-fc %R1)Xcq囉f2ˌz-*fS2q婚Y4Ռ,2q12xt'lYv8:Z0qr/%9aVK*<00JnRa!B}K?ԧKQL{0|fSLHs:d20 +ؘ_c Xcd 2``U14dc1Vs?ԢyEVeG; <öS0ȏiy%‚lBp^1rǹ֩f'Sl{TѼr(EX0lc\1Tx>C1Ixb++JfƧ=,9>Jb,/q'I&) ك 6 5}_1 1aņ 11ac0XYbɘ f4ƲdjLi10c,f0fc,F0 Gi (g;f~s< R`QHX1 1&FQ4h Sdx;8INFr1?ǢAIiq%q?{Tv# (t9Ԋd<0}o{4q]x98Y &.8 x+f 9bahv`5U~v4> 3a&khᓙ>a L,Y&F2/H1Or=HOL(x7FRRJ s SCclql 1Y2X5+ zX k/IѦ^1E*ckK2~sq:} Hю)(ݹb);}l# +\0Sm Ma4~JhV1M$l56i0YLNNXTu8ESL'Bp)'{Om̰I8aٰY1xT´9ID9INdf88C84m X#Ĥ"L w);MѸiaQ4쮣Tqt9t6V6 ^Wu/F)7=(y0R+a{+8l8IG)liQXa)C-IrlB {,p^M4צNXT굆>ɓh{94'/h,bX{9Τu~2Q'}"k%?1sG,ګdGK*~ݣxZ1^p|w}5)|9.lx`]+إ0uo7qyp`Lvf|Cұ`~k%Cje׽Kd2|ȱ(𓺴0bp xdG#IJe fTtk|Vb~'TobUj(m&ln*Yji[&+@{4LR5,͞Zܫ#2 ;&?JWHPjSPP泜vT~ D(DQJ 'Re* S#U^Cq`f*bc$1adYCKep0Ou+}Cwռ+t1La2̫(\!Dž[UM0ӣfaapX<Դk*ET`J i2YMI_=?}F0)c01c9gk`.,u1f`1Y N#qMjeSMh49ֽљH5+,ĢjIAU" ]:;\/ F}E*U1dzɎLeJ1}$bXdM4ч**ڷ,DQaGy/Ű1< 1>eRy8 ɨ̱(S )~F&bVp[(okh~d.F̖f = 4cST1zOSz?V0=QaaF- #2_p=ȪYTRc` hc&h`TU2yqGOh-f l0Ȫ;ppaMfΤ)+</sib|r\s8Tͧ á,)IH;B#E>b) &QE8G,qWɇb;>Ǖc2pXɓFiecf)X̓OVc׊0)r)' "4=@tEN_'#4p$*ӡw(lE(}g'"FIőt?t}SI#lc&~'`|C<+Mz<<1O 3:zUVw6wZ;IyN q1h­k#,&Y2O|#M5q8d™aq Utqʖ5*ɡXƘ,L.W40L5f!֨qX_iSCpE I/*}Q#su޵,Y{_qrֵ-'М=3k+c0h}QJdưvܠb0mc{0l*c V*X1X6ҚccTJi AFoP9*I\RJE6,L(ÃmXiU$"45TbpSRr(Ã1>$2#Ӄiȕ^ #>NRqXhKxhsjXmL.F-l9Ö:q8|:΍774meVi1\JW›MFh2j822+F&ٳMGdp*97+؜U&fS$लZb2Q*h峗#jN E"t6R0'͚MI٢p8pivXrphdR d,Y3,ǵ TT屳G' hJȳli4qX(p1yuS=\4#QV4cۥQ0bW :Rj hT¤Y4qSvAqq,qX&/iixsҳr ,N .C4HPҪ8.gR&# JRJ;)jrٍFEln,0֣ 2ZyiRh 41&]̚+N1UTM&ɿۅrޣJ2Y_ gYfz0Ŏ aU䡃L9`ROc١FS Iqg%C*fE Se5<\MIҹ׹|޸8m:C(#{U-4x8O[SQMG)JN%4xf4KG44'.^M9%Hz9#-2pav6lY\ L A1/;̆#PRE9C3t.m3dQqrŖCn'/1i^4NbO3rd*9K`/jO9PzH^d,q٣hNΊ:SK)Taalb;zЪh=^bp++mQ~t}w/Jr%s0EF߾1/LϮH>N'elf2,[ f>eWv&o94O+ϻyy.f/c鎛ŧT2|ϣSdji54ަM*˓e OS9_+f 3?\12/"M F<.&R|s= ZjmSa2: tuWR7Ƕ#B?9643u>|Ohl1u)tadldr 8LB(r[\%Ua:9.MD?MJi+24ʚhfUF,`L4DGnqQO}Ob:c 1231..5kڻL% 4fIBX35̃C aTƍ;C8)6VJaLLj{kn8iTa͓nFezLE260ؓ,4yGBN JFcs;NƎ:|`t%+ƝS rvT8%;oX8NyZlQ>qrb|pSM<'x*l~sG ܦ>GNt{1hУB6;cVjtS[,FJU\KpvMCѦt·R,r4S) )Ru*4| atL<;amR4`Wkʜ<1XN;ѤizPJwX844nR>1룹BN O&#c^:y{/RiǑ:,keMJ #a^UqRSly=bP99S{5FAfYj1R&QBX`0,a*]/̽!rMJEw= Ocw6U)M$G1Fɡc B6rw<]C16Ʀ#WHNM#jQI#/FQPc^ ъ vE#'ruG#D:8;'ac\j{+exS 9a;"pR">Ɋ1=,+ R|ҎMSSSI>^6pN~,4pae$s`x|zrv7p1GF6p=;=SgN}9;Hy6|Sq#ܤr9>g;l'TpD/FbI:Od|QFM hgoS)zwa+=tZwY:YJm%0tzX8pmSaǕD^ N9:wl_Q’=  04aCf fLJRLU5E挦- ^fL"hF{N b*OK!9'%ע66$!Pў56rhSr'E7?BRv آӣg"s'/90LJ8bRpcT4ztS0NOS<Ԛ8Ix 'xyu4/(x95,u<r= Rh;JaR,hS ǬGCcOcitjH &j%aEby=ZffWiӃc6f^bɒ2R LI,ѣHOx>$mâ`!EIB,t<=LU58PRWɛig `7aM80 M'a#|1$w=V))xAe*dlԙqB'1|GfrhG*X>)H`z#*\NɵN-zTthM= > O%8Sl9y(8bGI$٢'GEI3Ժ,0F45 fL Qs뷦1]OW8kFf(‚K5FvcR 'n]I4Qmr{d;9r_GQpaٷ.ǣ6%OSQimy0j5y:Ldjk 1߿aN˓O#n 5EXGyyNabs(IvI)]6iFLZ1&MʴANV;vcM .Snc(bWgRN͵'' qa& 9;FmplldÑJ^]Ù܎*M4aӥNaOo&1ru 'n6NJ)Ui*LNI=)NMFѓfv!qT9|bXȢÃbDZن0ӗ؎''t9MvX[GԒ:;rVw3 vL4pc裓ev;4^LKɤU4ٶmmsq.llFogRy)ȪtOnN#m&rln1I,¦Mԡ5 cFGfS M̎ m6plgъJ#Q=ݧ[2<xv=΍4tlk6nrv=wTNwd%lK:{mXݙS,s91]9-=pv,z 24&H6hPӁtm4wa1pXɇ4gGvmQ9Ɇ9i;EL*t{RNU60ѩɳ'Hãaا2)ǩ&+grD;wsCDOU&Jz$:4hf`w,'r(iHMm'*pc ]SOhܛ6 4| b95wVLȮVYSyˇ5˜{+Ι:pC;٬yxtN[燐hQ˖|x4|NNq_R*9=\64vmтSiɰo5Mfۋ356,9(QmZ&qKMNpPyM*<:HPh4h:\ 4)Ь8''c԰M2)IaC6Uhw:yZilbF^I*.]}JHq5!oLɜ~NIKIL ; MfJc$EzpM'Gp0ē6 pzg%pUѐ9(fQ:V44٣' ;d/xafeMJLh֚4\͒SIeƽCK+sļ/ +WOYc'ؔO%;=Zy9&ɆJ4S5YEFՍ4rgChؘiJnk a96b1;;L,Ý1*oO:  v).K#ƙ&1SM,(Ԧ&f2,bp\68vN̎X2vfrݑet̖X2LUK*RjL޴bE9&Հj? s^\8pw+6pytӞ]37z8Uiox>M[g%q%(^&*ʼI'huq8&LLN!&e̳77>fܼ6[о/*]StMUn@uņ(b x^GXu }buZATɔZF̼(x79:zw4R`IڥW ,cJǣqlmnMUn=T#Q`E(L9tS1c%9f2LcicR1 Xc113-cYyF{OO`3*3;\Z(_-V ' bZF)r>z,WaS%wPz2d]Yڧ74b}a>{YQ̆0z2.$閲'3M8C b6Q\ILU%xzVa/H$%ɁAw [GuZƆeE@͡kЬ/cJtz7)3rziytT1,36Kx[hG;hQJQIJQC 4lOqJGNҒ,8k%ñOى8b:4> Y.7`j0 F,19FGɁ y;FwJQŵMpLtzlٳGF;)lt{lU*lcgRxXN90tѶthN,Hp^a EAɨ463=sCˣ 4rq8 CFME:=4lWs4h0|N0c,kݢl3HhڹjD0;.rO3mNe24)N\D)7& K- /XLEQccm;1Ãyr'&ტW'NHӹ^xaӃtpUG 1^2d^XA|\^Z dpm\eSLN&&#qqSmfY9M94\RUTƕzVc%_l+޲hI K2kZFZ̵+S,~5HxCeZ3FdcX?8yNXs=tEl=N⤘N6yX^Oaaᅌ&#˃0ƫ\bp^^|<)gla2xwyEHANR1X= )T&M4 2eFS LUE#*ɥ5X0xݰ<0ÍU$~EH)FKRJ-B}nOmWj;CDҽP܇y<2DNS̕?@v/Lq1)9Y%~5u$+$xʽ̪He~buoZOQD8Ә8,3#ljE W.v3syOGcHQPD,Y&#c9*a4xq4L|IOwk]13]8ĩ"aQ) ncXSNE r9SI&LV&yQk*1C'\s]{x'(l;ʒyTmTQϑX*~Z d2Ѯi)14y))# tG^ b=XÖK ,r CX)4Qᦵ,l& (kDԓ4E(Ԭ&YɼM[sR凡8ǣy,],^>ǘWlX,b׋qӇXʚ61=iqarUp\dZVu^qcǶ<]V18ǵў]ׇsr6txvfM.ׇG&Xf9aK<GFɣ rnbٳnML96v1/ N'ӂF trSebtm8pxv&h(Jap0)v+ (pGrN8p7#Т%2JWq=VSW$ JvXa]Ipa0u4aG'd,Jj%bxb\r U*bw Hf.wecQ_CKI>ԘʬG17vIt^&,H5 HRzOd X>OCDlXц0S 0Fhh6llS)'% y =0JssbϻISbW*ǂ<60T4RphFhIÙjcM%"r}Mhf%"JpLG*Jig =,u%R|$4kS-;UnyƋ Xb!u6j+Me+# ~s5)rn'ov9#FXt=a5|LJ*/<4FgFԓqQptT :ve[i|2Lщ4auγ4C&rUǨTQcdb)(Ù)f>g 1d,C\v'֧j^lONr `,2c!j-Vujݍ0<4YZ5XcZu4hq9ÒiY(*p)0 cǗֵc Wuҙi9i uMjLʑ4L ֚hֲ֘f5J$J)JQJƪakXֳMfYjkYftOU 1RBxMJ彥<85'0% )Ue;.s&^(͔5TIE* K~7vڥ_TeIa4(T%Y[5VW==s—#Sq~ac*>'NUPpzfVbN#T%O۷tj[ۯ&4Z+k`" R)RR%HR)R)6[[[-llU5KpFmХT64l7 #a=a"b _ÚPlaGl)]نCs{_Jw5`aG4llنYx\,YqW9ns00UUQ0 X; c[$N?rbӧZea<>s9'*y8 &c>\\2XXXLa,Rk&0b01—i`l`t2mT%zG#4{=qܩLEaX0[ hlZjcafM=\S2ea7I̮1&Xfe.FcVj;1qtcIpqF,j5aeX D,XVGJVֽO#`~25TI41 c#v#hw^#5+6{N 2pj>rN;:|Y|YIKidFG~1[v༧;?q cE1 /Kˍ01d[A#xCK<͵#e{kɉ Yx])xlKF F uF\TwU9jnاƫ`@2O`'ludəuym/Hrnw3J:*4:RN)#Cŕ|UF"yìļ6T`w?x~4FHRRB|xc1y?꾚ì8<.2e*K "ʓ (5uOzbd&FD,8X0ُ?66pF"(Zi'RI;M:trhFI >v=̱2yLMv6[)*qcE̊1ՅhԫF>{W>W.]qkV#2^ڨﱓ*l&O<&,*V$Mj5(l,[O&2u+bG|ׁW PK%aUr J5*Ōc+f~|cS4133ʜ0oŏO4gԝ/%LG82s6k,`ǔsXeDU* +M+aY<ʎ<=ace_y^SpeG5Wz#Ƭi=O +/ Mxg U=Td/$58Y&p2ibŌhƮ Zz)?2. 0idb2S nNnn`^dŃdou6T;.{Bewgcaf,\pc:͌ɲaks1CU1?Y%= tS) 1N|l=!ƥhb7 1=k!ḇmsv1'5< L(!TR-X`"<7C&(lW  cin{& Dݴ\\\8%ƹ\6ݫxmjӢz&D_(FS1I)< O)k("#cyc?蝳Nm/\}!asXc 16 4Hl8ŌEr1ڒfa驣tJW =y2T|gFcҖQf iա+o Ej2n}nn,YYa1aάt4c9a3 m2ήN0FZ8k[V31j:c83^19qpeWR219QՌ̚b̳ V3*:Yˇ0cXirLc++`53fZO z3y|^=2{ޞGf8s8.^1Gaٵ̦-#ĭJRl0rR= Ol½ ɉя{' #}F+ 2 M1׶=byF4ť8=Qjx򺠻m-F #)|k{iv92,Z,hadŌf,#11IC,a"qdž xKpcg^Lly|*>/mVi,,N;͋EzZ[(stXz뗮\SzcQ8Q9>s8DgQ=D<ӊh\AѢcIU1y?= llcն-ۥ{̸54 8rŴs{6PXTgw)C*t| (G%$(?d>Hbʳ\={p0r ɲOۉ-JRDIFC(ad8񤳳`1E)1Uc@ܕе1=ΉWV§V4hSwjGahȬ A;#$sS>Gc11l:M)UadYy9r& M  /wS/}nhe|cS8g<={K`i u*c ',hk50iXe̳ *kׇ{ F)cL 1N ic1?d )qf/,L l”4045&ThݔpyPa$>Ozyuz>dRhE)26n)ɱF͛pXa3D 4QıcE4clp )э#9otO0p< q&&N鲞 )Gh3VNSSfM#]226ptldl' lv0œB7:gJY;L?9:6Lv8,*lGهƣ74XVE4S 6m0ۆ&N 6ia4d'ċ9i2jիW,}gQd+Q_ɧ bl~| 5*}֓R=i)ߑ㡅) `?DmE(T,, Ppwpn# ~n/g,[۹ОGwJ|uSƼ;TFKp3QhN+g++ J^h"ϓqLY!I&L|?A+$ι(*nX)>Ay 3^P)/fueyEDh懸Y=y8+Q. ?o%yrק(!a80Ö;ٷN^Jyty<=cxbdq8t<5 14s1GC~lj069pz< v0ԓci?5 9:4cJ?Q7#mٍz9=[G&!(ِ8lѯR8w8;)8xT$b*zKTQd̸G'↖WG ),Gc)䘺9bp&9V>ңIYYc b0!.62Y d4Ɩi1Ք- afJbŌQfSXm1=rjYƃ^ 𺌲Ɍc(cO+D4`5?]s?`ŌcǓ9x`leGțt9bq0fLc)Й&J[:хaON˳d*A10c(&0c1USe1?G?,-QvuwZ2sǹb0c(w(yhM,fBvvij=y{+]=O+xqs+~ԏVLbذve`,V/?ڶKUmWS!|,hLJ.5M2&-Z,ϯ2=Kjѭ:Uܾy9I?Ld/)-ה *F,,i~f=@|"}90Щ6,p Ni#F"j7 jTf6dd?{`rSF4ĝҡa=DzԸZ< CI"{JT䨟L;+ +6*i"+ (Q,ŃfL,(97}U/4 =2Gĕ5sPXLƊ~v*G4RO,hFRl43C[L}fJMjIND~g锜uMHa#G)ْ*cF# X Miv=ccĜXeU2F-)Mp,R JlŃ =NUX5 \s-Y0c)8xõY<+qǞ8k1]+'3噖K8ܰcyxIG6FF͑4<#rϔӓ'&,M2F )&CŚ|L2p*l`*pi1 8VIK7,8' (S F)F 2)'#Dڦ0F+6FTb6M*QN 8pQf6Yr&a51фƧM 703CJ&]ܩe,)'y0Q&4IXF(J $bVq0SO!PxLl1 6zUd.G]XT")e,ӝo=PFd#>c {pr?~MVC[h,)yGz<ՕKXMO2zMF?I'L#B|ȇKl(F3fYq'4l;J FTׇaiuIK4*MaU%EM|f,~#Xɍ6fa9ٵ43,ɍSU,ɓ0-K$4Uc64Yl,iijLeզ`O'du#IcSUB01s J'=OJlhQXRl)J)S1LQ)TjI~3i?Yly*RXb 3tl"zL @WYnά#-oO`9 KT!|Pd$"96 ꯴`0NssF&9)Jh#0`lhEt0f2XWpr0Xr95Dم68K,cˌfe2z0^y9ᗌHىMTh1% `1Z0nW IĦLBfjL5\=Vƌj֖0YtjfeN3^G': :eblr#aES*b 5iVl>2}¦-=fW8ś }\{= 1&G?0eZGj3G~POJȈ<%ǵHs9Gٻ Y׎Q} #KOkaᗖ^^y*lMU !XR{0z18e1SajV1aԘřOKeMOe!ȘLMUE~CG3)O<1gq+GG-aS*4N=aM14S( h40K"ƊFܘ&F TF haQ &FͲ6J4Fq8D!q#(OFɆӡ掕=Ҵ2&ȳ{8,i1rܸQLV\| 4Bkxddm% W9RER,'?ĝM1N&D .Nѥ_ԾhUdba``|5QCq?l8_d*6edILCb? GkK(z\UO3MWRFZZsǂq=E]d3h`Esہ*Evk:QZdɖձ3I>fK6-c١Ok.-,5±j ca--ec21]`ٱXxqYՁi5LڙYTѦC ah)1c`ڤ2M(ډv :'kK i8N!Q`LaZ("GƼSU i+1/c-&UhfW.2ΡlٹzbTN#_apv$iO#"]2Zpx^m/icKz(V*a10[W/𻘨' t**?bC/+U#eF,~U_8/4>3lr\{*y=](KXÑӆ8vq+MaVs&z4]RIUV4i/OdƙYqY¯%9+HMRle2,XS{`l~PWdt(2cDѡц0, blل6,I5G,~)Gaґ4 ƝIK Y(YLV0}:LIO8rL(cj:q)ɂa9Ic3XjU0s!b;4ijjQN %Ɋ78pV bjT*AdBʳpލ kM%LڡvLg03HV2wlЧ  $dpp4aRXaLtdcpW5)lpl6dMN2pX9G ,Jb01#e0gcsrHbaNMJ&b21S Ti%raD\I nzS"ZjXaXiI:Ѩrh= Z) )6,oإ~1jj4ta4h-x)xi؆Ŋlh܍aff Fу4a`tY4NBJM0hೃ&24L*aJ(UtS HI*"6m Chl&j~1rSMliZqjytͺӦMckBactYdMD383˯j5YOq08hY*=M*̪R| sSV镍Diri[L,pL ŃМ6hن0GZ6cI#~ccL mU:hv#GL0q$V ҤC ӸvI1@6Yԓy60#0ffr> [c'%9&/}'R~1ĵ4a^p)2T8PT(9Ql)dj0Kdxa(XSCi'e#,ԞwnYKx)Gt{SzX9g8hGi2TGb'3G250F95,KW,0L%*c\4N8FC-UbƦNPiyc8tcF$ 6EU&48qbjar.aqWsa'/'EQUc(q0<9\Ҹ4L1.˧/ާ醦伽tZxi8=)b8:9i Dzz723y$/IK:SY01Mbj5-,z3y+.ou9Gx R01V5e&~^!OkXɑ'ysRߥGd/c1ϰ4pކapR7[XKiƐGl6yd',^)W,Lm5&@Ŵעe!yIMT7 ardV^,tlj9 I'M#Ɗ 21-'0XLKUKA'íY4K-MSڞO2?:TV0b؛+jVE hr'\SɕlӞ7b cQdİa)}nm,{M5˖Ein]3'^+9 NUiavNڣ!-b•c,ed8.'5"pȓƑD9k!rk(dpc(c 7a1Zp_M:sHR!LV+|ASCUa-oq4,Ra^yX9SA6M =kگz>s%`~Hxj&Ni?XQC5j10RU>J56tU1d8Ҟ'U9*wI I0RƩ F৴X`ɷ$F%c1= 2MCHQF:]+H T~s))d٨)sFEwh?~ɢ`YQ7/ð3QXƩe}.s,2űlLK5}^-R{\cbhBF'XlvTP/} |I۟&1L &dѭp' xW^FZ4YK 6kشioh1d00bԔOz^zLac3.yZe_32o{,ُNu5ibzŸjd-H)ahlx cXa3-eU7h4apԿ4zXiLc1\ę2EsF5}>kHrc !юhZvFQ*QK;,'R̅sQK0q1V5H jg:L@ӃzZ(\RC 0O'åM.cV/-P>`bu4?A^ܫ10LZipeR0`+6=&hFU;Ub6:.ŵ: ŠX&QǃfVlRa=~VcWE]]̡A; ʫ-*b֥lڹU0SUfEKJ偌v&@S?teX4ՌdgO [*N$Y~{qXeѭLgr/Gf#O^KMgeQu>w%_{f4719>i"(,8 sЫbyOa9*RUTu*aQEQIO}œJb4#էKHL`8di5KUUfpLf-S+g6dJqi 3EDS GRlj0euzS4cw=N9,fpbŎ IMٛ<^<^t8ʳ Xj+y 4ptOWo{uIw VLqĜb=XиmHii釆{&)Njç떚Ӝ',vr#gL:ZZi~TV,%\ˣ4vdᇆhǍQ)X~g9;I_a:r,쩌/,: Dɳ-xeƫ0|:|%6&0F2Z5>sSY e*{ 'Gy/V)R9i<ilթU`R( SNJZXɍCX/`[E2ŅaxPu~ZIs3Ij WmF)~#cR(6xOe^aHֲV?UJRMig;*Y=͖#CVG T!scJpҝ#5eZ% ,}͗#\^c><ӖcPpǎ2ǣ65ONrjZR14rN 4B:Gpi`rU??;AMB?Fa>C!'Z~9U ch1h.^+Lc 2K=γEo0b{')s;({'y; xCb’k B4`1WZB⏲~S]Güy=#1Jabt)q ι[;'6FM]k?ѽ9{+1 J}hᴬcbxs3398͜4F?iOlW1Nt [)=7eSCp*w:pp?L]Ftilr`~e*а~L)R)̦Y 1cK 10ᣛ+X4L_WTL#&tjtV/'3E)X,pUX WƆGa1Â+8S0Z\y1V.:1t,8ƦVx/6Y1tӌZ-1Kp+CÜ<8c8\3XbWULs8Ӕi飇^8Crהqa\&\81[ 19qc. buÌ:18,r,b ,Xj hƋX1&Y 1idfSLbb85 aNqq e9ʸ4 :\ZLJӪ2VƚcXцiq5kV[ xk0e❹-0Ɋخ.ta14c<]cХ6aEO79MQh8mQ4d26=#HU8Jj6S hL+ 44n*rdpMIB7[5l5ɛjpEHNن)E(~`8h9qёb;aNcțpVJq[Jx1Ka20 7TLճ,gor a0f>l8-L6"4S&STф4q;)díXD_5QiKLƣ*>׸I>#f#bnas§b|[R0N*G94FUylYƽ[YeYdp{MXzhL? _Sɳ0&<~1YO:6*ϯ>{s%?)l%S4ҏS1Ƨ8еKZk[UY!+-UjIm1CzE0>,1X|j7?9MAOŸ"'E/245z]/Kukܟ&Ɍթȸ6>ir\M/MluVMFE̺Sflݒg6 !J.>'_}F0^ӨԾ1m[VScG-Vc 鬘/ՎZ~zƋLƚLYZdƭa.kZ4/V&R;IF4bKj6aE98ƘS4v:/52EML0zMfs8\^&Fh1FREe;5)Rl#}m<nLFdǃMD2'dic0Ply10LaRR4ƍi;g'.\I<\9dd0R̕SIdIU%+ 2G5ei)DMC!̡f6t;'SlѶ 0<;v.[d6^ w0:")I421!T ҫ ӑ[^v\l7;{GF$64x85eW2lzGH9qha(Қ%SĥJ1=⑸ '8ms}~#GNsC7fF*URS969XN f΋%0Ώ&#ӥ&Lаw4wby*>;O=ѳfδV&C =JhNH9+&HۼMC1qW10qL=8J_!Z)E+Fˆv:r'nGyS/QԳeVɤlQM8\<G')J‰G;̤rlbOanj2:N}vl١tQiɴc"YJ o L4bJrmv4p+M0iiҹ8q8NÑtѬ鍜BcI94dj7Y7Fυy6p)"v'ؤ'F'Gx9w)& {9O@6iJS4Ӂ; 9&JTiꕧp8p| }4 +M=,T OKNۖ004l7s0r xmG7T8MĞ[q'xdrs2 + (䰱lMlۻMōGw88G9682:N :EUpuf%Ib:4` RRU)I)ѡѧ"SRJWXcG3Ggd:Tcrg);5+qXc F9($R4>tlz2$ICX<<х0ګrp7|s *t(L9;#g=VmN4 1,f0 EZگUɃiM>F;bUaŲ*B<ȱ3sqG hঊ> {Ja)122>WV *UsG+,/\1/1ѣeI1m)8)b~Yy* da&d7'\Mܱr-s0#aF!'ۢaɰT~Ckʔc˗.#S9ymQJRx1m/:@<1/,d^^d NC8(ÍM,LXd#Mhqhᧇ.dHi4s;487t^:}Á:UuN$8c] 'dvam63s ӂFʱpѤ8ip ?$[aN1~s ziK@'jUVKTժu:e5Fvt8e2daQioMȆkjfk'뺝&Ҷc) Lm׹{m>jsa*W(Sx^hRоH.J?L(=1ӺxWwSWSk{vFa]}ϑd>#K邹п2fiLee1&Nic221VY_XQ.NP̏L҃gЦ%Rϒ:M޶l>Am_SԔ 9Sq6hlE;HN(JJiGOd*kMVb~ (}l44e^# q27> ȻQŖ\^K5Olɓr&zۘú/0X`xr< 8_&WC'6NdwMsܯd#dAQLhJ"P( B&fr[$2<;M!_t4q2f9wLku9ƏǍ3ѝc\sM;[99Κ\pUb3DɆYt<%s1a FŌ>lȧ&.::fbX jlj4QK06m&18+# {{aΌ:1IG'ǥ84̳1yDZ=N4hm5){ +T$MtUch0'yd?Q<%Uc1ibŇ{F_ԭ?c{-U`҂6`є7h*m+Xb1brL1G, }'kHpaÁ[^taMȇ|<=G1_<::_ֳʫF^SO)O)4=t^۹emx#WcY6e֯U\;qe+,q4 ;OC=+r{R0į6J8,1cӃeX.c)FcɌ0jEeO7d8<=L[1DN#7IAR]+OIF <ҩNp:p8)NTH$?(М6hÑO&&ych(IbRJhلdy;s&%0) 0ԓ:3%O LG,&mL3C pS8==& "اn{ 'QCإ(Xcylt9nvteY+,z ڇ" 'A 88ŏWx:6ðOb< \6zcI)6{8)8d(c4x89=Ha)dz)Nѡ[{KDGM8lSħӧOj='0<:aX'HyEplR:NNTrcF&YC(T̆q䕙dPhW&Wdv&40 ✡ɆjCW-fЦG&U68&)DaO5# \.CƊioEE4adIr`#2)CyB ڴ^kdPTfkl47/I 뗃9CFb0W(IF98tcQbNqF L5qX4=M& qكLPV&Qbfȹ4hlX|OiMOM&Jr 2M# ǧIcɱR`n z =B0)`tq0ѲòSPðS#'щhҦ8SG`#cNf) XOIO3ndm4vej{N%]5'FBSQsfTGpĽuXcC4Qã 쮎JSEW/H&(O!)_QhF; X9c,_\xjEV [谹/1 ]摡ʸâX/rDIc0h` epYܚ${ͧJ Y+P6C k,m7;zҜ_^f絖s݃9:ŔNNM$d %lYkڦ5X=9:l]nRcGa 4j85:6' [˃ Y]aZ0ÈɽE1IJ4XY7SESeru3&ܵc p]7+lrpm.&%+مhr۔UmO-6M7mӇsuª9نQήp%6۪1n]I MÔjb90lر qÌeec+1YyJ2Z} )OdaϨŌ_;ՆpcxĹU+Uy?Ǹ P8Tь?O<'dT;'qSd(90T)ꦔT ٣jmllrÂN^ 96Qf4i8v0tSf1)\MJQ +pwQdžwv:06409%N4ySN#eJL;4Tьj) y'y|_\EʻJ0ҳ+f'g (,81'-cCa|cץ)c3q'8{t./d4tiZ Qɳ &˪Ƌ22`c-t8K*9ᓌ1c/k#zȱZ1xU4xzOL114q.ܤ|g8?`KfE;?nlM4|UMCT>CuO4&UL Xj&MG&LP$\[c5]Rʶpڣ{n8~Ӊal~O5|ζ/tS .w#;htS&&&Ni<4ASLd-4֫iLjii,݇+Ytd^SSfQmjiFpPՌ-Le8*Sb8 T[ cScL32KOYxKU7.i/ƹ_,?|CgMJ6ه10&ĘiL&Mf"rR]'Ƀ`(I(mIӦԥ,wNJDCf&&bRlMdm(ȩSұr<ӕW1чfNȤLY$R0l v5G )ldM&4hcYenj0W$YʉЄS]-R_tH{ULM4,VQU<$=IIcc=2&aX!jht:,+Sjų 2VS2ƳpN5qδ֬_>ţUk$іU23Ff hjSRkL2Mc6}!SF PXrrl wN RRK2>#x+++#yhhh(x5'N IF"&4XrWM#S tp\xqze N2=4*R'"cChhiT7_r20y(/tó?cja)352l0al^CMCxhPEǒmIљB{.?g0L¬BI?ye&a1aYa 0XeY?x1y W|F0i4ƫF+K<5,.uGs='qZaUcBir$| ^+,eKMs*L44+M55ʼH&u&c?Q4QҨuҮ_c Xg?ccZG RJXO84`KQهb25(X5Ib,4Z\oS`{d2+c [,cTVHj흏=&2hF4TY4ic*1[Jc 1L3}'d OSJŖNV/ccl<0YP?P 1]X~3#(C)&^v㔳!m98Ue+T7*OY1C,f2⾓/}!cb뙆blf1H?~@+Ru*;1~,f1Ş&_=(%EZ_]~S+9ئLjpF9sc1Na9ЇP؍*39) VUuWٕMp_I>#8fÏ|2X&!c&22&, `pz)U,Lh*QQccK,ax4'rRU% BŽ&ax:}Lk9^Zh^X;`eb3J^/ w\CUnla"{Gqb !R⣤q=TǵV8/~@ S 94ty%%EJJUJR+;N!Yee{_͵V-n],x8軆+ZF[]|06"ȴmV/L͚/c~ ~&ZuZʻ_Bj_hҲx[6hmG,mdG6nӬLiwyq!&j)dFY :'E0‹|,-qv9NՃFr,6tqFiNG,Ldwi4,UUM )7,GeE/jɦ\zpy9F0cPvMN&#l&Ny]iV2la4q+9pKq8cc\SNWj'k&W̛8\dK'Z-^E0 :F0jc 2c5c!cU1Xb3 ,2 $,TŌ5c05Q 2c2,cbF*1F22! Ucc5R0Y"̬3!5&hF1ff#,gp1s"}hVrףNVSaԹ9I\JShT'iX((Q$s6&YBAH1LiY0GcBuUixca˥Wi̫ ZX^Xc1<}7=S'4Äs4&ѠnpGN954h6908G Xlq46uGIs\QIXrh6ӅiQa,08y2N\qd*pm <v⤜'&<:46 U^W Q I0>EGM^I4,>W |,/c#d_+AͰܪ42`n#rvMnP`J̉a j0 X3TXK)aa`+^ۆ0v kz -4}ʣmspȿ'ڒ{'ΛWYYG1)fa<0Nf5%XXĬЙљJ"ʫL AleW^^YgaW>ٙƥe*̳NFV$)kY,imSpbb*h✤~/zFL]Q鋣 vSm8puLpt:+.n|TYt5nŢHds+5'w_xp{GgL?95<7O.;)Ҥ\k+70`wZo4lmG{qYE0t/^au]̟{~~76?4Xd”J*qJim*W*WFlq *W!_92+22nd)mROS^uxqR'YJJMzaBy J#q:??V[lee-6r867\F !ѳF<ޟdMX5)ӣS 6;;4V#IѴh#Fդh9*#q7ʮJFTdǃ<ЕT"JÌ9c.qtqXZ=0bSFҍ F U!IJyXV+r. GT/cO~7_<Ǧf,қ'ڼD{Vd:ˤ]K/RdmԢgH]4c?Y,Y=z0٨{#$ఖjiv8Q'#Z1f-O 7XZrpBZZ*=NñM<$eE`LZ_<~ïfʵgXkYtg5Ǚms,g^99GwM)y x0q4Rfģp0^ZL8QpRMD;)u0өN0ɌRU*UF^hU,򵥏_xW.X[>u?ȾM%Y'̵c՛lm3Ld̲m֙fhf6-fdZjN-f-fYkfLZe5jf5ɫ&sXfј̚3cs-zmFLi0YiHtѭ3[5k6f&͵͕̹sKTi̪{]icMMf?sP(+$k!|{?#Ws(Zdӷ{\3]d]g-hִs:$I1 OML!M )= z #5=A4bzj h %2 '7gP=C h 4D=Ap # !@2adɄ`!"<5=)#Q馉i4d4h $"``b " # , 0`2 H1D"$TEIY A@#=Sav+r8vk̂C,UC~@at'+:ΨgytGq\d|)3/$91ŐHSbnd9VVD 0ihi42*mK`8q'}< "HEEC 7a(7ت kapA~~:.\v絍ygwqb|$!f2jq:i:,s[K?-EFNHi]4P!GtP ~C#)H,HKj $G÷OB~" GHGA٣ ha8:Ӈ6cLMN|}A M|!#{@ { PSSp3ļů:AOw;^=Wk,Y9EEYmlc\73s\g=>=O\7E)sYًwm5DA3Ei׬lW iefhֲܱ9CQpzuWZ(߶v'2<E*+* q %dt]Ɛj?$8Q0$^j{ebvCH`0tlGub]| @giMbY5ڻ3ɩ8yp7/5u{>-'ǨumH=rɍvÀf0Xsdv ,B9q2AX()9Ff#`@/,Bd܄2Abi:-tNZ$B@)`iZ]ʐJ[׌/y \_kiYO+^[6u9O)i<0&E!,W"ϱ){= x)&]4+.'8H'2IWZ1QZoU v&ksnlsӄU1e$;!*]: )") 8/ z,Qv޵4N޷/ ,a(4:K<_g284PT`F $1sV@S]K0Xضq3iDM_I'.Xz2 ] (U(7Q#'E`0L8FQ5ܵC Y: ~FZw"zWUʢ;K+ ܺ#$`GIm2! |=QXdI>C TpbJMOi]Q[JRQ !C>1! A׹jx+9s< T @bSS:NrD/FVɌQet.NNTPD@ųB`W,x2aNjWC6%lo.5YI#M\ bŇ'z+A5#w ^Mxe %Ɛ "c'z,wx*VLeTM_cI,I$Qu|\23fF2ű :M+ uF ma*`= SO0VtxSQ# Ε|ZQNjXaBz;)CGC`KM' 5]8d&H8VB$`̝3)?M@T5!W7!h;\/Ef :O%4#9O@bQF(րCf Eb ][s8xذ)Qw#a cxF.kFNYHW0% "rl`C-﷯zgf{L֋V1 Ʉzjs{4` {qj=j31=H;ئfTLvY KBC-|Mʒ[2Bi@bMBi(޼!vUgNV86KTб l&8SMlBkË!5{p@dRB!ypRH=۵D(zu?.ΜRTtCP*8<3(@z! С#mpb2СDmё"kQ5$$); KXvCGsj7V#$`׫Fǭë#p FǪ zܜUЁܾ><`KQph0i(0$ [Ec|Z(yS{˹SĄa\r7V6bJsN.8wsׄklMb 3`vteH.b$ !^pnKdJ2Mc\)H<|n%0ؤ n*( wN NY !R4^@!E!b-w7B]HAxtP0PY䤸,Q踚.HHgK&ԊD{4AcRb ߴHȽvD|(wH𭎜XXM,7YrCtM{!Ɗ}`b]*c|NDsZ&\I7bA&rE8PKB