web/lib/Zend/View/Abstract.php
author Raphael Velt <raph.velt@gmail.com>
Thu, 16 Aug 2012 11:42:28 +0200
changeset 681 0e7c67ca410e
parent 207 621fa6caec0c
child 807 877f952ae2bd
permissions -rw-r--r--
Added tag V01.98 for changeset e71873020911
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_View
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    17
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    18
 * @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
    19
 * @version    $Id: Abstract.php 22446 2010-06-18 12:11:43Z matthew $
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    20
 */
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
/** @see Zend_Loader */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    23
require_once 'Zend/Loader.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    24
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    25
/** @see Zend_Loader_PluginLoader */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    26
require_once 'Zend/Loader/PluginLoader.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
/** @see Zend_View_Interface */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    29
require_once 'Zend/View/Interface.php';
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
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    32
 * Abstract class for Zend_View to help enforce private constructs.
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_View
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    36
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
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
abstract class Zend_View_Abstract implements Zend_View_Interface
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
     * Path stack for script, helper, and filter directories.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    43
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    44
     * @var array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    45
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    46
    private $_path = array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    47
        'script' => array(),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    48
        'helper' => array(),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    49
        'filter' => array(),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    50
    );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    51
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
     * Script file name to execute
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
     * @var 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
    private $_file = null;
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    60
     * Instances of helper objects.
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
     * @var array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    63
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    64
    private $_helper = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    65
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
     * Map of helper => class pairs to help in determining helper class from
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    68
     * name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    69
     * @var array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    70
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    71
    private $_helperLoaded = array();
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
     * Map of helper => classfile pairs to aid in determining helper classfile
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    75
     * @var array
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
    private $_helperLoadedDir = 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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    80
     * Stack of Zend_View_Filter names to apply as filters.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    81
     * @var array
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
    private $_filter = array();
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    86
     * Stack of Zend_View_Filter objects that have been loaded
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    87
     * @var array
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
    private $_filterClass = array();
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    92
     * Map of filter => class pairs to help in determining filter class from
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    93
     * name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    94
     * @var array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    95
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    96
    private $_filterLoaded = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    97
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    98
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    99
     * Map of filter => classfile pairs to aid in determining filter classfile
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   100
     * @var array
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
    private $_filterLoadedDir = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   103
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
     * Callback for escaping.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   106
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   107
     * @var string
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
    private $_escape = 'htmlspecialchars';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   110
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   111
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   112
     * Encoding to use in escaping mechanisms; defaults to utf-8
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   113
     * @var string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   114
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   115
    private $_encoding = 'UTF-8';
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   118
     * Flag indicating whether or not LFI protection for rendering view scripts is enabled
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   119
     * @var bool
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   120
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   121
    private $_lfiProtectionOn = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   122
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   123
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   124
     * Plugin loaders
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   125
     * @var array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   126
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   127
    private $_loaders = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   128
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   129
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   130
     * Plugin types
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   131
     * @var array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   132
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   133
    private $_loaderTypes = array('filter', 'helper');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   134
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   135
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   136
     * Strict variables flag; when on, undefined variables accessed in the view
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   137
     * scripts will trigger notices
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   138
     * @var boolean
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   139
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   140
    private $_strictVars = false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   141
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   142
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   143
     * Constructor.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   144
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   145
     * @param array $config Configuration key-value pairs.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   146
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   147
    public function __construct($config = array())
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
        // set inital paths and properties
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   150
        $this->setScriptPath(null);
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->setHelperPath(null);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   153
        $this->setFilterPath(null);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   154
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   155
        // user-defined escaping callback
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   156
        if (array_key_exists('escape', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   157
            $this->setEscape($config['escape']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   158
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   159
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   160
        // encoding
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   161
        if (array_key_exists('encoding', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   162
            $this->setEncoding($config['encoding']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   163
        }
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
        // base path
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   166
        if (array_key_exists('basePath', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   167
            $prefix = 'Zend_View';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   168
            if (array_key_exists('basePathPrefix', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   169
                $prefix = $config['basePathPrefix'];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   170
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   171
            $this->setBasePath($config['basePath'], $prefix);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   172
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   173
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   174
        // user-defined view script path
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   175
        if (array_key_exists('scriptPath', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   176
            $this->addScriptPath($config['scriptPath']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   177
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   178
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   179
        // user-defined helper path
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   180
        if (array_key_exists('helperPath', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   181
            if (is_array($config['helperPath'])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   182
                foreach ($config['helperPath'] as $prefix => $path) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   183
                    $this->addHelperPath($path, $prefix);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   184
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   185
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   186
                $prefix = 'Zend_View_Helper';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   187
                if (array_key_exists('helperPathPrefix', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   188
                    $prefix = $config['helperPathPrefix'];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   189
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   190
                $this->addHelperPath($config['helperPath'], $prefix);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   191
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   192
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   193
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   194
        // user-defined filter path
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   195
        if (array_key_exists('filterPath', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   196
            if (is_array($config['filterPath'])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   197
                foreach ($config['filterPath'] as $prefix => $path) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   198
                    $this->addFilterPath($path, $prefix);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   199
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   200
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   201
                $prefix = 'Zend_View_Filter';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   202
                if (array_key_exists('filterPathPrefix', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   203
                    $prefix = $config['filterPathPrefix'];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   204
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   205
                $this->addFilterPath($config['filterPath'], $prefix);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   206
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   207
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   208
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   209
        // user-defined filters
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   210
        if (array_key_exists('filter', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   211
            $this->addFilter($config['filter']);
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
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   214
        // strict vars
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   215
        if (array_key_exists('strictVars', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   216
            $this->strictVars($config['strictVars']);
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
        // LFI protection flag
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   220
        if (array_key_exists('lfiProtectionOn', $config)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   221
            $this->setLfiProtection($config['lfiProtectionOn']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   222
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   223
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   224
        $this->init();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   225
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   226
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   227
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   228
     * Return the template engine object
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   229
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   230
     * Returns the object instance, as it is its own template engine
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   231
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   232
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   233
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   234
    public function getEngine()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   235
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   236
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   237
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   238
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   239
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   240
     * Allow custom object initialization when extending Zend_View_Abstract or
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   241
     * Zend_View
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   242
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   243
     * Triggered by {@link __construct() the constructor} as its final action.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   244
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   245
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   246
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   247
    public function init()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   248
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   249
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   250
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   251
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   252
     * Prevent E_NOTICE for nonexistent values
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   253
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   254
     * If {@link strictVars()} is on, raises a notice.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   255
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   256
     * @param  string $key
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   257
     * @return null
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   258
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   259
    public function __get($key)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   260
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   261
        if ($this->_strictVars) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   262
            trigger_error('Key "' . $key . '" does not exist', E_USER_NOTICE);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   263
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   264
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   265
        return null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   266
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   267
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
     * Allows testing with empty() and isset() to work inside
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   270
     * templates.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   271
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   272
     * @param  string $key
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   273
     * @return boolean
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
    public function __isset($key)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   276
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   277
        if ('_' != substr($key, 0, 1)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   278
            return isset($this->$key);
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
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   281
        return false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   282
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   283
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   284
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   285
     * Directly assigns a variable to the view script.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   286
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   287
     * Checks first to ensure that the caller is not attempting to set a
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   288
     * protected or private member (by checking for a prefixed underscore); if
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   289
     * not, the public member is set; otherwise, an exception is raised.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   290
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   291
     * @param string $key The variable name.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   292
     * @param mixed $val The variable value.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   293
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   294
     * @throws Zend_View_Exception if an attempt to set a private or protected
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   295
     * member is detected
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   296
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   297
    public function __set($key, $val)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   298
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   299
        if ('_' != substr($key, 0, 1)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   300
            $this->$key = $val;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   301
            return;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   302
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   303
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   304
        require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   305
        $e = new Zend_View_Exception('Setting private or protected class members is not allowed');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   306
        $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   307
        throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   308
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   309
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   310
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   311
     * Allows unset() on object properties to work
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   312
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   313
     * @param string $key
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   314
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   315
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   316
    public function __unset($key)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   317
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   318
        if ('_' != substr($key, 0, 1) && isset($this->$key)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   319
            unset($this->$key);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   320
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   321
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   322
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   323
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   324
     * Accesses a helper object from within a script.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   325
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   326
     * If the helper class has a 'view' property, sets it with the current view
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   327
     * object.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   328
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   329
     * @param string $name The helper name.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   330
     * @param array $args The parameters for the helper.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   331
     * @return string The result of the helper output.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   332
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   333
    public function __call($name, $args)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   334
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   335
        // is the helper already loaded?
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   336
        $helper = $this->getHelper($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   337
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   338
        // call the helper method
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   339
        return call_user_func_array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   340
            array($helper, $name),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   341
            $args
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   342
        );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   343
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   344
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   345
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   346
     * Given a base path, sets the script, helper, and filter paths relative to it
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   347
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   348
     * Assumes a directory structure of:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   349
     * <code>
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   350
     * basePath/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   351
     *     scripts/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   352
     *     helpers/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   353
     *     filters/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   354
     * </code>
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   355
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   356
     * @param  string $path
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   357
     * @param  string $prefix Prefix to use for helper and filter paths
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   358
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   359
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   360
    public function setBasePath($path, $classPrefix = 'Zend_View')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   361
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   362
        $path        = rtrim($path, '/');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   363
        $path        = rtrim($path, '\\');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   364
        $path       .= DIRECTORY_SEPARATOR;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   365
        $classPrefix = rtrim($classPrefix, '_') . '_';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   366
        $this->setScriptPath($path . 'scripts');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   367
        $this->setHelperPath($path . 'helpers', $classPrefix . 'Helper');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   368
        $this->setFilterPath($path . 'filters', $classPrefix . 'Filter');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   369
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   370
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   371
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   372
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   373
     * Given a base path, add script, helper, and filter paths relative to it
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   374
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   375
     * Assumes a directory structure of:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   376
     * <code>
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   377
     * basePath/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   378
     *     scripts/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   379
     *     helpers/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   380
     *     filters/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   381
     * </code>
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   382
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   383
     * @param  string $path
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   384
     * @param  string $prefix Prefix to use for helper and filter paths
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   385
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   386
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   387
    public function addBasePath($path, $classPrefix = 'Zend_View')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   388
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   389
        $path        = rtrim($path, '/');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   390
        $path        = rtrim($path, '\\');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   391
        $path       .= DIRECTORY_SEPARATOR;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   392
        $classPrefix = rtrim($classPrefix, '_') . '_';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   393
        $this->addScriptPath($path . 'scripts');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   394
        $this->addHelperPath($path . 'helpers', $classPrefix . 'Helper');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   395
        $this->addFilterPath($path . 'filters', $classPrefix . 'Filter');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   396
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   397
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   398
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   399
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   400
     * Adds to the stack of view script paths in LIFO order.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   401
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   402
     * @param string|array The directory (-ies) to add.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   403
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   404
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   405
    public function addScriptPath($path)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   406
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   407
        $this->_addPath('script', $path);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   408
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   409
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   410
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   411
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   412
     * Resets the stack of view script paths.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   413
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   414
     * To clear all paths, use Zend_View::setScriptPath(null).
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   415
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   416
     * @param string|array The directory (-ies) to set as the path.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   417
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   418
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   419
    public function setScriptPath($path)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   420
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   421
        $this->_path['script'] = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   422
        $this->_addPath('script', $path);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   423
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   424
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   425
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   426
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   427
     * Return full path to a view script specified by $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   428
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   429
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   430
     * @return false|string False if script not found
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   431
     * @throws Zend_View_Exception if no script directory set
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   432
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   433
    public function getScriptPath($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   434
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   435
        try {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   436
            $path = $this->_script($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   437
            return $path;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   438
        } catch (Zend_View_Exception $e) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   439
            if (strstr($e->getMessage(), 'no view script directory set')) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   440
                throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   441
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   442
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   443
            return false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   444
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   445
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   446
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   447
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   448
     * Returns an array of all currently set script paths
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   449
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   450
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   451
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   452
    public function getScriptPaths()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   453
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   454
        return $this->_getPaths('script');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   455
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   456
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   457
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   458
     * Set plugin loader for a particular plugin type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   459
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   460
     * @param  Zend_Loader_PluginLoader $loader
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   461
     * @param  string $type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   462
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   463
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   464
    public function setPluginLoader(Zend_Loader_PluginLoader $loader, $type)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   465
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   466
        $type = strtolower($type);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   467
        if (!in_array($type, $this->_loaderTypes)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   468
            require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   469
            $e = new Zend_View_Exception(sprintf('Invalid plugin loader type "%s"', $type));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   470
            $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   471
            throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   472
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   473
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   474
        $this->_loaders[$type] = $loader;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   475
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   476
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   477
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   478
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   479
     * Retrieve plugin loader for a specific plugin type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   480
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   481
     * @param  string $type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   482
     * @return Zend_Loader_PluginLoader
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   483
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   484
    public function getPluginLoader($type)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   485
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   486
        $type = strtolower($type);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   487
        if (!in_array($type, $this->_loaderTypes)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   488
            require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   489
            $e = new Zend_View_Exception(sprintf('Invalid plugin loader type "%s"; cannot retrieve', $type));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   490
            $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   491
            throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   492
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   493
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   494
        if (!array_key_exists($type, $this->_loaders)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   495
            $prefix     = 'Zend_View_';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   496
            $pathPrefix = 'Zend/View/';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   497
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   498
            $pType = ucfirst($type);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   499
            switch ($type) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   500
                case 'filter':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   501
                case 'helper':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   502
                default:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   503
                    $prefix     .= $pType;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   504
                    $pathPrefix .= $pType;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   505
                    $loader = new Zend_Loader_PluginLoader(array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   506
                        $prefix => $pathPrefix
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   507
                    ));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   508
                    $this->_loaders[$type] = $loader;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   509
                    break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   510
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   511
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   512
        return $this->_loaders[$type];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   513
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   514
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   515
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   516
     * Adds to the stack of helper paths in LIFO order.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   517
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   518
     * @param string|array The directory (-ies) to add.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   519
     * @param string $classPrefix Class prefix to use with classes in this
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   520
     * directory; defaults to Zend_View_Helper
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   521
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   522
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   523
    public function addHelperPath($path, $classPrefix = 'Zend_View_Helper_')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   524
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   525
        return $this->_addPluginPath('helper', $classPrefix, (array) $path);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   526
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   527
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   528
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   529
     * Resets the stack of helper paths.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   530
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   531
     * To clear all paths, use Zend_View::setHelperPath(null).
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   532
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   533
     * @param string|array $path The directory (-ies) to set as the path.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   534
     * @param string $classPrefix The class prefix to apply to all elements in
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   535
     * $path; defaults to Zend_View_Helper
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   536
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   537
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   538
    public function setHelperPath($path, $classPrefix = 'Zend_View_Helper_')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   539
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   540
        unset($this->_loaders['helper']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   541
        return $this->addHelperPath($path, $classPrefix);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   542
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   543
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   544
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   545
     * Get full path to a helper class file specified by $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   546
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   547
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   548
     * @return string|false False on failure, path on success
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   549
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   550
    public function getHelperPath($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   551
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   552
        return $this->_getPluginPath('helper', $name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   553
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   554
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   555
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   556
     * Returns an array of all currently set helper paths
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   557
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   558
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   559
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   560
    public function getHelperPaths()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   561
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   562
        return $this->getPluginLoader('helper')->getPaths();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   563
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   564
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   565
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   566
     * Registers a helper object, bypassing plugin loader
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   567
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   568
     * @param  Zend_View_Helper_Abstract|object $helper
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   569
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   570
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   571
     * @throws Zend_View_Exception
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   572
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   573
    public function registerHelper($helper, $name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   574
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   575
        if (!is_object($helper)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   576
            require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   577
            $e = new Zend_View_Exception('View helper must be an object');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   578
            $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   579
            throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   580
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   581
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   582
        if (!$helper instanceof Zend_View_Interface) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   583
            if (!method_exists($helper, $name)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   584
                require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   585
                $e =  new Zend_View_Exception(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   586
                    'View helper must implement Zend_View_Interface or have a method matching the name provided'
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   587
                );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   588
                $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   589
                throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   590
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   591
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   592
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   593
        if (method_exists($helper, 'setView')) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   594
            $helper->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   595
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   596
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   597
        $name = ucfirst($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   598
        $this->_helper[$name] = $helper;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   599
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   600
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   601
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   602
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   603
     * Get a helper by name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   604
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   605
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   606
     * @return object
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   607
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   608
    public function getHelper($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   609
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   610
        return $this->_getPlugin('helper', $name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   611
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   612
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   613
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   614
     * Get array of all active helpers
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   615
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   616
     * Only returns those that have already been instantiated.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   617
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   618
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   619
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   620
    public function getHelpers()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   621
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   622
        return $this->_helper;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   623
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   624
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   625
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   626
     * Adds to the stack of filter paths in LIFO order.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   627
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   628
     * @param string|array The directory (-ies) to add.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   629
     * @param string $classPrefix Class prefix to use with classes in this
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   630
     * directory; defaults to Zend_View_Filter
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   631
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   632
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   633
    public function addFilterPath($path, $classPrefix = 'Zend_View_Filter_')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   634
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   635
        return $this->_addPluginPath('filter', $classPrefix, (array) $path);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   636
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   637
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   638
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   639
     * Resets the stack of filter paths.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   640
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   641
     * To clear all paths, use Zend_View::setFilterPath(null).
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   642
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   643
     * @param string|array The directory (-ies) to set as the path.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   644
     * @param string $classPrefix The class prefix to apply to all elements in
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   645
     * $path; defaults to Zend_View_Filter
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   646
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   647
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   648
    public function setFilterPath($path, $classPrefix = 'Zend_View_Filter_')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   649
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   650
        unset($this->_loaders['filter']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   651
        return $this->addFilterPath($path, $classPrefix);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   652
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   653
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   654
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   655
     * Get full path to a filter class file specified by $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   656
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   657
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   658
     * @return string|false False on failure, path on success
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   659
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   660
    public function getFilterPath($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   661
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   662
        return $this->_getPluginPath('filter', $name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   663
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   664
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   665
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   666
     * Get a filter object by name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   667
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   668
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   669
     * @return object
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   670
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   671
    public function getFilter($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   672
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   673
        return $this->_getPlugin('filter', $name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   674
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   675
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   676
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   677
     * Return array of all currently active filters
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   678
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   679
     * Only returns those that have already been instantiated.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   680
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   681
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   682
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   683
    public function getFilters()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   684
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   685
        return $this->_filter;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   686
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   687
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   688
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   689
     * Returns an array of all currently set filter paths
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   690
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   691
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   692
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   693
    public function getFilterPaths()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   694
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   695
        return $this->getPluginLoader('filter')->getPaths();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   696
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   697
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   698
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   699
     * Return associative array of path types => paths
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   700
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   701
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   702
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   703
    public function getAllPaths()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   704
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   705
        $paths = $this->_path;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   706
        $paths['helper'] = $this->getHelperPaths();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   707
        $paths['filter'] = $this->getFilterPaths();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   708
        return $paths;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   709
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   710
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   711
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   712
     * Add one or more filters to the stack in FIFO order.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   713
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   714
     * @param string|array One or more filters to add.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   715
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   716
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   717
    public function addFilter($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   718
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   719
        foreach ((array) $name as $val) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   720
            $this->_filter[] = $val;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   721
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   722
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   723
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   724
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   725
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   726
     * Resets the filter stack.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   727
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   728
     * To clear all filters, use Zend_View::setFilter(null).
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   729
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   730
     * @param string|array One or more filters to set.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   731
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   732
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   733
    public function setFilter($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   734
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   735
        $this->_filter = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   736
        $this->addFilter($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   737
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   738
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   739
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   740
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   741
     * Sets the _escape() callback.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   742
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   743
     * @param mixed $spec The callback for _escape() to use.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   744
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   745
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   746
    public function setEscape($spec)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   747
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   748
        $this->_escape = $spec;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   749
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   750
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   751
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   752
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   753
     * Set LFI protection flag
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   754
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   755
     * @param  bool $flag
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   756
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   757
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   758
    public function setLfiProtection($flag)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   759
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   760
        $this->_lfiProtectionOn = (bool) $flag;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   761
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   762
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   763
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   764
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   765
     * Return status of LFI protection flag
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   766
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   767
     * @return bool
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   768
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   769
    public function isLfiProtectionOn()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   770
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   771
        return $this->_lfiProtectionOn;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   772
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   773
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   774
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   775
     * Assigns variables to the view script via differing strategies.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   776
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   777
     * Zend_View::assign('name', $value) assigns a variable called 'name'
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   778
     * with the corresponding $value.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   779
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   780
     * Zend_View::assign($array) assigns the array keys as variable
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   781
     * names (with the corresponding array values).
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   782
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   783
     * @see    __set()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   784
     * @param  string|array The assignment strategy to use.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   785
     * @param  mixed (Optional) If assigning a named variable, use this
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   786
     * as the value.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   787
     * @return Zend_View_Abstract Fluent interface
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   788
     * @throws Zend_View_Exception if $spec is neither a string nor an array,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   789
     * or if an attempt to set a private or protected member is detected
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   790
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   791
    public function assign($spec, $value = null)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   792
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   793
        // which strategy to use?
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   794
        if (is_string($spec)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   795
            // assign by name and value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   796
            if ('_' == substr($spec, 0, 1)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   797
                require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   798
                $e = new Zend_View_Exception('Setting private or protected class members is not allowed');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   799
                $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   800
                throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   801
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   802
            $this->$spec = $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   803
        } elseif (is_array($spec)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   804
            // assign from associative array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   805
            $error = false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   806
            foreach ($spec as $key => $val) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   807
                if ('_' == substr($key, 0, 1)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   808
                    $error = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   809
                    break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   810
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   811
                $this->$key = $val;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   812
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   813
            if ($error) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   814
                require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   815
                $e = new Zend_View_Exception('Setting private or protected class members is not allowed');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   816
                $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   817
                throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   818
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   819
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   820
            require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   821
            $e = new Zend_View_Exception('assign() expects a string or array, received ' . gettype($spec));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   822
            $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   823
            throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   824
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   825
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   826
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   827
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   828
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   829
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   830
     * Return list of all assigned variables
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   831
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   832
     * Returns all public properties of the object. Reflection is not used
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   833
     * here as testing reflection properties for visibility is buggy.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   834
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   835
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   836
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   837
    public function getVars()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   838
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   839
        $vars   = get_object_vars($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   840
        foreach ($vars as $key => $value) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   841
            if ('_' == substr($key, 0, 1)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   842
                unset($vars[$key]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   843
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   844
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   845
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   846
        return $vars;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   847
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   848
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   849
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   850
     * Clear all assigned variables
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   851
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   852
     * Clears all variables assigned to Zend_View either via {@link assign()} or
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   853
     * property overloading ({@link __set()}).
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   854
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   855
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   856
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   857
    public function clearVars()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   858
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   859
        $vars   = get_object_vars($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   860
        foreach ($vars as $key => $value) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   861
            if ('_' != substr($key, 0, 1)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   862
                unset($this->$key);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   863
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   864
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   865
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   866
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   867
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   868
     * Processes a view script and returns the output.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   869
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   870
     * @param string $name The script name to process.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   871
     * @return string The script output.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   872
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   873
    public function render($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   874
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   875
        // find the script file name using the parent private method
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   876
        $this->_file = $this->_script($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   877
        unset($name); // remove $name from local scope
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   878
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   879
        ob_start();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   880
        $this->_run($this->_file);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   881
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   882
        return $this->_filter(ob_get_clean()); // filter output
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   883
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   884
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   885
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   886
     * Escapes a value for output in a view script.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   887
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   888
     * If escaping mechanism is one of htmlspecialchars or htmlentities, uses
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   889
     * {@link $_encoding} setting.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   890
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   891
     * @param mixed $var The output to escape.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   892
     * @return mixed The escaped value.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   893
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   894
    public function escape($var)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   895
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   896
        if (in_array($this->_escape, array('htmlspecialchars', 'htmlentities'))) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   897
            return call_user_func($this->_escape, $var, ENT_COMPAT, $this->_encoding);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   898
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   899
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   900
        if (1 == func_num_args()) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   901
            return call_user_func($this->_escape, $var);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   902
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   903
        $args = func_get_args();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   904
        return call_user_func_array($this->_escape, $args);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   905
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   906
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   907
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   908
     * Set encoding to use with htmlentities() and htmlspecialchars()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   909
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   910
     * @param string $encoding
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   911
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   912
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   913
    public function setEncoding($encoding)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   914
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   915
        $this->_encoding = $encoding;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   916
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   917
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   918
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   919
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   920
     * Return current escape encoding
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   921
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   922
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   923
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   924
    public function getEncoding()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   925
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   926
        return $this->_encoding;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   927
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   928
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   929
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   930
     * Enable or disable strict vars
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   931
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   932
     * If strict variables are enabled, {@link __get()} will raise a notice
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   933
     * when a variable is not defined.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   934
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   935
     * Use in conjunction with {@link Zend_View_Helper_DeclareVars the declareVars() helper}
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   936
     * to enforce strict variable handling in your view scripts.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   937
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   938
     * @param  boolean $flag
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   939
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   940
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   941
    public function strictVars($flag = true)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   942
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   943
        $this->_strictVars = ($flag) ? true : false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   944
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   945
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   946
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   947
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   948
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   949
     * Finds a view script from the available directories.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   950
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   951
     * @param $name string The base name of the script.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   952
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   953
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   954
    protected function _script($name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   955
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   956
        if ($this->isLfiProtectionOn() && preg_match('#\.\.[\\\/]#', $name)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   957
            require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   958
            $e = new Zend_View_Exception('Requested scripts may not include parent directory traversal ("../", "..\\" notation)');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   959
            $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   960
            throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   961
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   962
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   963
        if (0 == count($this->_path['script'])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   964
            require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   965
            $e = new Zend_View_Exception('no view script directory set; unable to determine location for view script');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   966
            $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   967
            throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   968
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   969
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   970
        foreach ($this->_path['script'] as $dir) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   971
            if (is_readable($dir . $name)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   972
                return $dir . $name;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   973
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   974
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   975
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   976
        require_once 'Zend/View/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   977
        $message = "script '$name' not found in path ("
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   978
                 . implode(PATH_SEPARATOR, $this->_path['script'])
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   979
                 . ")";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   980
        $e = new Zend_View_Exception($message);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   981
        $e->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   982
        throw $e;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   983
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   984
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   985
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   986
     * Applies the filter callback to a buffer.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   987
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   988
     * @param string $buffer The buffer contents.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   989
     * @return string The filtered buffer.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   990
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   991
    private function _filter($buffer)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   992
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   993
        // loop through each filter class
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   994
        foreach ($this->_filter as $name) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   995
            // load and apply the filter class
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   996
            $filter = $this->getFilter($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   997
            $buffer = call_user_func(array($filter, 'filter'), $buffer);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   998
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   999
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1000
        // done!
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1001
        return $buffer;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1002
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1003
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1004
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1005
     * Adds paths to the path stack in LIFO order.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1006
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1007
     * Zend_View::_addPath($type, 'dirname') adds one directory
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1008
     * to the path stack.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1009
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1010
     * Zend_View::_addPath($type, $array) adds one directory for
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1011
     * each array element value.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1012
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1013
     * In the case of filter and helper paths, $prefix should be used to
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1014
     * specify what class prefix to use with the given path.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1015
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1016
     * @param string $type The path type ('script', 'helper', or 'filter').
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1017
     * @param string|array $path The path specification.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1018
     * @param string $prefix Class prefix to use with path (helpers and filters
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1019
     * only)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1020
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1021
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1022
    private function _addPath($type, $path, $prefix = null)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1023
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1024
        foreach ((array) $path as $dir) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1025
            // attempt to strip any possible separator and
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1026
            // append the system directory separator
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1027
            $dir  = rtrim($dir, '/');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1028
            $dir  = rtrim($dir, '\\');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1029
            $dir .= '/';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1030
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1031
            switch ($type) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1032
                case 'script':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1033
                    // add to the top of the stack.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1034
                    array_unshift($this->_path[$type], $dir);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1035
                    break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1036
                case 'filter':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1037
                case 'helper':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1038
                default:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1039
                    // add as array with prefix and dir keys
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1040
                    array_unshift($this->_path[$type], array('prefix' => $prefix, 'dir' => $dir));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1041
                    break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1042
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1043
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1044
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1045
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1046
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1047
     * Resets the path stack for helpers and filters.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1048
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1049
     * @param string $type The path type ('helper' or 'filter').
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1050
     * @param string|array $path The directory (-ies) to set as the path.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1051
     * @param string $classPrefix Class prefix to apply to elements of $path
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1052
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1053
    private function _setPath($type, $path, $classPrefix = null)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1054
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1055
        $dir = DIRECTORY_SEPARATOR . ucfirst($type) . DIRECTORY_SEPARATOR;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1056
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1057
        switch ($type) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1058
            case 'script':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1059
                $this->_path[$type] = array(dirname(__FILE__) . $dir);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1060
                $this->_addPath($type, $path);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1061
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1062
            case 'filter':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1063
            case 'helper':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1064
            default:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1065
                $this->_path[$type] = array(array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1066
                    'prefix' => 'Zend_View_' . ucfirst($type) . '_',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1067
                    'dir'    => dirname(__FILE__) . $dir
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1068
                ));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1069
                $this->_addPath($type, $path, $classPrefix);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1070
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1071
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1072
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1073
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1074
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1075
     * Return all paths for a given path type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1076
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1077
     * @param string $type The path type  ('helper', 'filter', 'script')
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1078
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1079
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1080
    private function _getPaths($type)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1081
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1082
        return $this->_path[$type];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1083
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1084
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1085
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1086
     * Register helper class as loaded
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1087
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1088
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1089
     * @param  string $class
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1090
     * @param  string $file path to class file
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1091
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1092
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1093
    private function _setHelperClass($name, $class, $file)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1094
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1095
        $this->_helperLoadedDir[$name] = $file;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1096
        $this->_helperLoaded[$name]    = $class;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1097
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1098
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1099
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1100
     * Register filter class as loaded
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1101
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1102
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1103
     * @param  string $class
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1104
     * @param  string $file path to class file
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1105
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1106
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1107
    private function _setFilterClass($name, $class, $file)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1108
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1109
        $this->_filterLoadedDir[$name] = $file;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1110
        $this->_filterLoaded[$name]    = $class;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1111
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1112
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1113
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1114
     * Add a prefixPath for a plugin type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1115
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1116
     * @param  string $type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1117
     * @param  string $classPrefix
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1118
     * @param  array $paths
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1119
     * @return Zend_View_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1120
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1121
    private function _addPluginPath($type, $classPrefix, array $paths)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1122
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1123
        $loader = $this->getPluginLoader($type);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1124
        foreach ($paths as $path) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1125
            $loader->addPrefixPath($classPrefix, $path);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1126
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1127
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1128
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1129
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1130
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1131
     * Get a path to a given plugin class of a given type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1132
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1133
     * @param  string $type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1134
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1135
     * @return string|false
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1136
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1137
    private function _getPluginPath($type, $name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1138
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1139
        $loader = $this->getPluginLoader($type);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1140
        if ($loader->isLoaded($name)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1141
            return $loader->getClassPath($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1142
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1143
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1144
        try {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1145
            $loader->load($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1146
            return $loader->getClassPath($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1147
        } catch (Zend_Loader_Exception $e) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1148
            return false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1149
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1150
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1151
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1152
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1153
     * Retrieve a plugin object
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1154
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1155
     * @param  string $type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1156
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1157
     * @return object
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1158
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1159
    private function _getPlugin($type, $name)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1160
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1161
        $name = ucfirst($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1162
        switch ($type) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1163
            case 'filter':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1164
                $storeVar = '_filterClass';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1165
                $store    = $this->_filterClass;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1166
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1167
            case 'helper':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1168
                $storeVar = '_helper';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1169
                $store    = $this->_helper;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1170
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1171
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1172
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1173
        if (!isset($store[$name])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1174
            $class = $this->getPluginLoader($type)->load($name);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1175
            $store[$name] = new $class();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1176
            if (method_exists($store[$name], 'setView')) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1177
                $store[$name]->setView($this);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1178
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1179
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1180
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1181
        $this->$storeVar = $store;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1182
        return $store[$name];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1183
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1184
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1185
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1186
     * Use to include the view script in a scope that only allows public
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1187
     * members.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1188
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1189
     * @return mixed
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1190
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1191
    abstract protected function _run();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1192
}
^4j:0Ռ&]AR/T늆SƇIכ-25Of̬|9GV"^i֯]zzGp=fMUmZ-xg?'4xpxcOkjv8^cO 6/B@38?URBBiҴH"t=/@tb8ti; <juڴufs: :' z ܰ{"gHt`LxxxUMoyO_(vڌsvv;H!""rP(Q8vEdòkӦ1iؘx@m7oDXSH9cZsG3|4DHґJ4(Ij*(JeĦ!EcJVƓL$yc-s$iY!iaɹN-r䫊F@vd$JM!9KNcٗlەkX8A;Xӟk$NHI|NK):H#PY XLM qPʓq%i&- /44w+ <52 ͤ0^q$~[X;jo+0S"y>a|TL#>&%-tHԁ7{{qXԀh24IEM6J 2@Icͩ6S8^xxhhZ&_{)Ekf_qK 7Wldxm*UTԴzWZש5=\VL.sc,s[Ptb'@tB^m-ۛ͡79pKS-LQDگM+o_ZߨjÜ-HE^\lɪnBO^P\v-EuyzH1):vg98W!1>>Z}ڵ}٧0/mW~~ʟSL&;C]'ӵ4vqթWlL̈(G3 a$:,D:0xYx$X^Dij"vMvYv-eaجa;52bk%Skl6eUc#+bP?g_}}}^OUz^=AǨca5zWJ_Gŧy{y' i84 jqWpVB 358ʪ j$PQj6DeSeQf*-QCAmM2xr\YVS,ƕ'4lL2Ѣhj)b[djַ, if)O\l-aWSL6"5qŪVҦe `lxٸnb hdTqR;AqmRS2wA6)Vč- ؋hH.8M l *\URڡs9piƊ\1@[p"1\ZKصyR\( .VVB &lQ9 SQ$!m{,MidoWOR±]<i(*h$ݬHW mj$dPH_fubÀ \j:3kkl3EkVo5B1Cu6JSje͏A0S HtA" u4ęd!ELk\RSM+':T/aXJh"kϭJPT]gG8ۜC[Janǔ1]רX!/ʧI}]5XϪ&U;g`% #M=gMj{iX#/-W ?ۑ~u㷌 O-ͯń`q1]MEϻ8iCv ^݇.X}g8v/}֥v6?;>8}⢧WSakҜgq}Fb\wʽw嫂ϖy5[te>>,y粤Ǖ%9Ez"n3ie4: lF6*J3i_yh/. MF5s"4\7E}'g켫ʭyjʵ<.yryM3w+Stȇ./x,:#:@7XȒ6Sj^.1b0p[;vnqm Rek.3ߢUKU.]Hb Grߏ #Wx=Gi-=ik%!1R 36RMM,cKRՄ {OJ7%mv6~A.}BJIR_G}_͘i/A|Ҏ? _~)9S)oOQyǃ{]!4;־gVjx)aնl3/0RRhWDp C~lUpI)vӆL߼P'^ߗrC?w MaI. $)eR_e -N*FDt~W,5*O(Cf ez5e+WZ>cOh>f\$pI-(f穮R^BEQZޗZ*,CdD[Ҵzt֯JkҲ+}G_U_4#eSl!{<3.F^ekX@ a%>0!vRSa(?m0)QXh`U3)sQ)̛\٪>ݴzQzE RWju2{5kc#!hz]LoZ:]B (kz-=EYtz&/CW~B-2xS{ۍfVҴF;&Ӳiv2ZNUVuVm^d~ӗ$ɵQ5;ae˘׺Nߚ0:g+"k2`fLxa~Cɷ*%. QʰvL.Q6!,40B=Blj\W߳Ծ%:k皾x|⾃_;}N,BEOt}?+x!dCKXFIRsk/4߳tm^ofCӠZ=cGi2SO_ +oŕwx=CS)AT?t3,B]NԖW3snrIh)`: n6ղK  bhL =z 9mrϓzx84'kїleeۧl˭c:@ͰRV]8Hr$# K]Or{u_{^^McߗwBT$gKZTgj[0![#w,9aR+jհҤ._fQni QfPa5#)KB֩N)S>2!"z=^޵Y{Ozj{~+U\ $/I @Va/+ Ri!Jt4Tןzvfc9岶ɼ(xBQK4Ohi=^c1ƨok(L;9=tڎt-fzBI%; 'mVUr<|Z'' !icD"RY9c[ƿ){ǺX4F^˽8+WYһo{۾򚨒433 0iеr9/1Gk{vW(5mO3mi >>I{[-9ݪ܏\j/ e>i_it7WO(n//QcحD d>Y'p@0bu ֜ycG4-3WǴ*f)jVx׉e<5$LjQPxAX5; ɮ5MmOõceڻn+MGm421ڒ$C9y )[3:c]^Hצ'ӯiJRT$ĪqGx0aG99x:PN0`p`v gXK@'3v uxy?QC!:i/-Ƶ܁ wI"@ /Me1&H)Ș R6E.nkCkKڨ#H՟ؓI 5bW|̡1e-=5z8u؜OTkWImMkilhړS6dSVssѫHTU $˵ `BATi$j%ZuFׇݕ~{̿4{=chK׺YQ5|>ٳ5m6[_jKnȔcRՄ5vlBU` (([/)r^lf<œѦңQhVͶ_/"qIm!|atvW+W4b$X_[{'z{)zy/zfzZӌӮ[/r} Mݮ.SCR\`Uoc:eO-!䄯XgV/zifSbm&*R 0ܟgU&9)XX2z(pOC"f{OZ7qMN5emL*դA$`~Ucr԰bؙL? P= 1_t1߬{W4S/q3ݒ'@=@I)/JY C0e?sO`ww S|٤-eW\.q<(i /*gcˣYb)憞c03W[_._-. I% 2RX,ǂ#Oei˫NSCmm3K9Mٍ6Tu:֝cN]q[Gzꌏkff6JL^ ;?(]`˲biiۏ^a.lU뷿-s۶z~FW||EkiY{)e3[j|rڏ>֥N3lVܷ|ss랏셽#5{f{KWǶǴjW{/vw [-?EAyjqyS'LyV^Z˧N/,55^JJ[KiNPj7ް7pA7wE]_rUV1hɶ4C5vCNccخ˰f;-#Ԝ6d|>fy1+`B:+:1:Ez!6U>!Z-be1<1 džkxS/ Ͳ̴x]udֵx'e45vfb(4̵b݄˰5v;%]a3ӯ. 2HLC =W݂/Os=K/RUԵ꬞+H)t,ugsǔ۫Z v[UUwa` ѝzA@QP%D*$P45\Uơmo65з ^jit` ;pu)RHq){ P׮[Xn Uu@hsmUG{{fogյoqv(vt5y¸1BWk[6wwN,X38BRktmQ@Pd]c- ܽw{e|Zi^:nMjRMU֩I]tRe SowB*g+jRU/Rm/ԻۨJc}Ihs `Ǿ|(:@  P=4 `ǻ(% <m6P( ` J!̛Q@e6`p7 @l0@Ң`%R!s/\u{Rup9|>xq hQ8J>9w}zܞ97;}v2{Gn7wwtצ)Efey0 .rUPJICFpr4 N;g=}|3K;z<.==(5cqǕomRZ ;i@{7>{QC@h(s t ݑ@5ӄ<מs<-9N'W6׻9˽ݺ9t{;={^J=}(TIUɨ{ܧ)绠.90nqM7p9n޺]:;WK ýka.{jFtִiU[*9۝Ÿ^{>s-6ev'f[M33=ַsmmYimuݹ6[9v۝vR:ЪVb{2^fPW$vo2ZBI($viJi[j$ݝ(;a[{z=*}ەS6솦MѣC@ii!%@ 4ѐfb21"鑠F$253S&21ScIM=MCxFBJd"FF!5 L4ڧ!d04&'0#C d5=M6F00 =RR&0MzFFm!ihhhM4@ 4h@Lhh 4HS@4&FCM C&4bbOFFE=24bѦO&hMD#SmOIe2hM=&FL@"IhѠh2&4ѐ 4fMI=LF5Oɦ2fByxIyMS< -p<쏦"r!!$quq"D@ASYJ3! -3Gw!aSYNlt!4!D6:C/jl/yM: 3,c?靝I̲ik[MYL늁=G%=)m~i*0m۔Pi3mjxPZ2B%hbNYL~PVļ?kEQ TRܔ5Oċ܈cafU;>ST =c̀'1I9P'?!sAMU*p{B*k:` -VLT,3j9^<@d8)qDxƈw>Py*}*=D~H?(`&;Ͻ}=_{9>7gt_Z~H}: f9_oVqicbm]15ߧkH !9aB98E3ֺ9!vRI2#XZ1h-]M3ɆYVkQК8bx! f}-׉,=#gqn\)${)FʖlQʨ(*ZrXFNU@w]JزӓzE_` ģB3R]@$Bu5mYH~ɦEΕp?.+$֨7ՖFݛvg'E,]%&ĆsSEºDMUtZj)6ҏ!uhv6=]zs;z}3!׍xvWYaܺ>V'0tH^S+~?b8DCAPQGZkM''I_nrSuoя>d8Ф~UΗ[x%4RMqʢK\ Fh**nwZgd$N}O? ?LOO~|zn%v޷| ݃O}8}8lz~e?}?Tߗf)DDZ-uW`jZu@>;~_?ןGg˓+\$"JKXu U+7VYɩ6yMo.r=J]:YXnCt32g3n%9@{LtaOq??ֈi-cv>_mu@x(~ )۵Hn:Em񶮤!Hm9En^q+G t#[ Xz{~uR8\ϽӫUJ7xaeV[XJnNݤÿ\x}Ew7A=@!T0 )ƨk@5Y-y#V^jh#l H :EuUGL6erGkg Q| a:Ĭw[u?߷I9K-~U\+5Y cR\v[K}r\[vZ}]W]vN֔6] ϖYՂTz͟%uT4ˣWߌT1_ .>VrNn\Unjֈk|򳊶Tg,$˅6~iq-wa[b[J)SuzҜSu\x-FgRVB∢N<Sh(F><$c @.IWZܿ1`{uƢ){ fgOI'tU@:x\ow>DBev~[rdml-0K,ZK/TH( H %xP&)L{ߴմᬾź88:@(R"yv~{MVսD_+ oR ,x%N ZwtI' p xϬs 氄`KԲi{ғwߚWM{wn8-}p!ѣ=lF7s|fټ,rq?MJ'UUCsmSt9*ɿ҆|WUت9e\,gM/ַv'9Gx97Zn9^ ܞv z+w, ak;C}gk&i|'*a QPR\"Edok]!z{Q`Qk1qw_<A8u'r'E@q*d$hA'DfZtbn|B\3g?O>*);\Ge_,a|nQ-T@y[qnQ2}\q1!~J(r0`@^\zM=6F L<ޘƫuGF Q̈m@>(=ޏESFdT_C իQV8ky f|QW_wgQ?ʼnn{^]W(X9Jmv ӛ;yv`ٹ?L8>L?aiێh)X2}EX-1%g%HNav|+Hp1dKLozx#BSc(KC(Q0b pLo޲RLæ^o|6vϦ$0IC_͈v1A(HDbYw"!Vduz$VKf[Ilpɛ%(;ꐯ kȾP=iӓe CuZ@!{ <,3zu xXQFT,3(°ݏݿ%L98sbvv$3gfy g!q'+z9irkmB]A-jf/zs_>Gw)2oqC? „J*hpC@L"x<YS \,]}Od]σOtQE<i( LAuC`|‘WKVn0woR#lbZxN#,hZڀ[K>\ڟ, }R{JaP~{Ok/[a~#|G`):W\k6f[u Bi]Osc'ոOډx@p]wg鱗| v95Ci,Y+9߆SSVZ5}&۬iϥ ~̳y!_g͗#HhPI|KBCD Zg}y5'R7nBtl >TZxWWt?w%ks^5O 1{-PDYzK (khEPǩTTAoj5ZYu}w_GYE# ="(+ܠ~Wۗm!vcݝsKTGD.8-9Ri(MЗZ ]%E 9Ou͍@D@00'#Eqvm>T(-9uCF!,?]?L_z"( <`84H ߅r7DoU7ᔘiAkD--W".49pѢ2 *秠z<Vg4Y>18_7:?{`᱆;YO'[X!OySH_Fn]6/u;C)qdk4fdgP!~J-fo& )t5xgUQ1G $ {k'Kg㇉@ k;|!"Sz??}} wnZURtv[!gz7"2r({^[=/<(3rź#kBYa]x~ x%o!?Y=l gnPTC!a,)e-U|bl8f0XG^1b#.(U4ފz9D BDc"tGF#)f6sfjty"G%CQR zZa!mKazISú߰;Lxu"2ZCik'j~/x ]ΧsdY*qP>˘:17%C~'<{'{nk.^^;>7Lԧ]zD,٫q<]<!w=9SW^͋{vɯm&nIoFEU}gNPEQm(]I-r߆1 78#5t#M[vo[Hēw5xN=,'ƾy%T&$ L) lճkI\3Jђg*QN#bYK ωb2Y@ pp(x;{T$?~n{Yy]YWW 15'&NxkȈ\g3fɏ²|RLs"||~a~?+^gW8#o/H # 2[y2DD˪ߑ-qHdCPv\Eńf{vkbr۷VWk08>'s{K[G_HA™3N$.$4וAeBvyK EL>4KQQ<4#5fvذ5m}WmDĜ<~i]5e96{H.WtaPY䨟>ĥ^L<3~فE0aÆ A,& sdm'٦L4F=WC窪C a.3_7IM9SF+8׷ UɣPكRNsC@8Y[=du8?WoWzv7s~60" OiǾ9(xt2p!꘥W&?oiSJ` . }1mМ/Sh$P.O eƯ'Hh#,fÂmp՗nj!2YD'UW{qڂ'  O*K/3V,I)"C F $@:b|qDfgˋP+ bl"(1#x7dnbRpܷOȅ4<CʪBi4$h=Y II\LcjQ% XAo'wvk|eS]"k8#1RW.O+%Uϋ@ZId;":#9>w9ߝ!e9jD@Q @@gYTrS7+.Up2a ^d4F.ʫ8b4Kl8 mg`&U\-,$ Tld|!&}JZ5Mc+J#>; žy)@Ej*Tzf<~S8N@!1% 6DmA\:rb"!m:PFqSYk:SتGJ<6y&empe֕:M*pLΑ;njbh*mIi5W #,nQ Lj=-&5͓0L`E5h`D&.Fy?,]j^afNr] ƊWF"JQ׃@EADSTpErYl(B5ZvXqjt-NMrm{d +g5Қܗq V"&$%z(\Fs69]q3MC Ӷ p1K>h15_6R~~P莬ƃ3һ&%4JSˋC84`Las.avᎀkv]"i] ݠ o\+4D("pBD!BP)Ԑ)`jVg=ܛVBoH #/'X 9T)/s[tx>BDJSb B6QkiN1E_UUFn!ʎH98m! F LHb "ME FG9cɽ8YLJc\͌, D"ESa!Ϝ66vAVI&k᫭$˔`OwBʧ{wl C7!i+񥣎93)[KZʺh`:թ؅%5tmhhl2Cce49b+ɩC`%6tƎw֠Q7FA)B2t Z[H&?VFeiQ58o7@r`vr$-( 8B\#6]B8˔ ەːU2sӮ19{Y^gl*/AR<â eJW g)1z9=ʨ„&Qe%)fEoY ,")~NHnr̰ݣڵFK4qgE%}An/lkA8'R7ߊżz߄b6B8T=50F] 6Yb*$r8[(T$(.\qX2_#TD狕XXnt p\ttRYP1D 6SS2SMy˟:"@!D B*0:l4(d$OBA xKEN ʡȝ"Q! Λ6}_u$B(h>{ W-0Y%/,-"!wFee.Z-%V579 IT4xGUGVba“KD?r h% aJe(9Xi;"$bLڳDU1mՓa,hös.RDK#q)JyUzkκixfj ?OZb25kbd =BAHtc!a):` CGA\ā$J%!D TVY1kXK01(#p,5c1xgVdW:0TaօPD#džuwe rRhv7:ԀL5 2jtd FuQ W3`4Ts&`)FZhhhfתC87G.6o6b4lka؝4nˆ 7"\R4 ro"r` 0$ Ln9#okl\:pXglf+mMv3^.lﬞXׄz,0])enJ閙fm+-J)$.G5ϲ?dT.>90TPDsmA~BGSITY)D(hF(*]IęBYi AVKR{6\\a[#!ּW />1b7 ?S H9(Hɼnvͪ$miSoTU6*[SqOCO7 gl]'_GV\+FrJ[E5Ttڄg "!wZYKAQW3F)L 8ԳbCR@B y`aյۼ0PDpUKňQ|=Hڙmv+ n~VBўlQꮦi-Ӭ *@]TY9 466*`zJcO>%Dr"_O>;Z=QvW+80a~|] r0;}?}as5ev 2 ,QMj26 {l-XvU[Szܭ ee{~!} 0?}n7wQYK\2޻ V"T=u'I hqf 5ltwh =3bo,/hTa׃EoVs:.%lr>8'85&1e';_ 1jΗZENB*+SCDi =$E뮾J3,rU ,尰lQEQXU&b08Rhgܭs+c  b6tF; ϳ Ì졪Ŗ[\{dAO9^6֜4T֫?: Ti ,b6ē:nK Ș"d]SQ R7l bȨ K\/\hܸ\^H' EQ3Gp$STVn\@)jZfD$*t,>P ax\`@rהC)DkrhT`l/#pץHD.uܭkYXh "\kH`ɥD0#ēѮ F<"\ZB& }.toXH$ bS*Pml֩Qm&,,S`fbJog:llM $]\٤KYZpFNOv?/ ta]CEfqqV9h?]KY`|8HGو95%t.m!%5ѬI%\eAoBG6W^:Wo#WrW:e?]M@Ûo7ʥknhPGYץEd" QAl&Q: e2fD3 R[""%۝}ӞІTg @d^<}!zXYa "4,z"Ύ\L$>#8^۩0vVkzD;FPBElD`"`9VP1^jQ2(A"%kUI\dKnRU8M_ḻY8(Qz+l؟SD"XV((+^?}m[]Q :C"0g%f L󭒆k9:^DЭ!^6(] b} p@F),hbSdQ3شp#=\G?s/*^Ao#S˾w8Kx_޿.ڶ]vݦݷSaf~nRUCə/GjE*ޛR$D@`$8VANMwfZJ ";#TvF E!Sv"qlPBI\I{t |4 (q pLV!PqZN) UcK!H^$U$h"7148lv( \*B3PXa6fJB.T)"Rp&bHx2 b)g[k(&6aQu7AE:F"%Ƹ2c-ʸ%2 QWeGSVXkn XERKdҡ0YTjѸC UCp!X;Ɋ;U%΋C.䡷QGDΑajZXbD $(5uR, ADDyS_ʅȓW$]A}~/7ћSĐLzufp s]::Wyz[PW _Wkf#YryJ-YW#\xQdezeBXCETUU(Vl][x `:Qr֔ÜЯ]ΌZQ=w /ݮvcnkEQ.S -'Ь ۹O Rb[fg} l]Ѡ˧*qRxgl@ʟU,jbu@4EOtK;WήeTU_=|՝Weً2Jwn=z_^ё׬k,G?,-#d;FK7L$-i.pZ{QfטL[(H=vwYn09lO~=\8bnz$J`IY_hUʫn~[Tɖn狤I1s@XsM"~o]q{၂-]X24-[P.7W٥j?t㋵._޶+~p +לOMCPrm9Ǔ!?6J+UsgvWuֹ[?jޭwOxj2mӐ-Ӓ۱q~*EC,:htޟLpb ixZ᱑fFm"[uj,V5KerEX~_a®W敉tᙙH_,_tl<bDF䚩99_{aR6P*@dA@ fכ'|'XgSGoUS_?[Փ۫%\s-uһudRMvtZ<εM^3<;Na%2qW,>>?eslC]R)S/ E{ೣ= leHkN=c}?{U/=^> k9ugZ\Gw"w^:w?`<N[TTo9Dn'-oθgѬ#1s촽ƕjv·mL 3V{n.4Z'F~oT?/V7/q4XDD|45JGM;5UgWuV"Xчƀ:{!6RF+GBV9v ܼȱ6JXZ_få: ZuO (iHǗTA0j+TȻQ= fHj2 뚪$*TKJbᨁ6"&Go^`FA 58G : !s9Xl^C>1vX9ÄxyZA W.nULYJcS/"%H'DUADZ|7eee %GB{(6/pҰto3T8ˣus* !m̺EtxƐ.Q0K$\>gtӑ8JZ12u:bYaIf4U~N0g5"P+)cr}EY=ǹ_7lRwSl nD@L.Tav]k@Q k׾-YDp;OU<d)}}A+mG=]ݡV)z9US\MPlԙ79) 0T!<@/_S=[/WU:mc-Xxlͬ',{*upM~p`[tlkP@QCGbBIJ*2Ut DlMuГʛնPjHX,6w;@ 75thj:3'hHN YlWP~*uRz?=`=in!ՉZ%]GY'DH? (uDaQUim `XپRKtQ;/k8qjtt͂3fs3kdUlDd-VTk'BqE³• s[."XMPcvAי6)Vz͔0/VSQ1mx^Bu4XlkpTg9z~y$+a/8i㵬kIѮW6*] ".TjJa~zyJ|/~ m* Ӏk^lPr8sA/~NUq)+qa]">_Gl`XAfy;!Q#+'\Ghn.BeSȵP2Yb< ~WЋ1'y#[.c@+Yd-̾7*3QMo刚(~.v p[eZ~l:Lſ999*2EO ηaMղG ןtWsR߇;1%˖P-#z3#'Z_ǩ.oa(Z7Xk+n~wozԤ[4t??V-ͽW-B# mG;azLuOUDb_' s;cj˗>Om?8ݷ UlA, 0e\w?nG1;nmY9-i+rkksm_Qߟ?+Y}2̸%mowc3e7&e1gC7ź5ާ4_jKNUR-#cVE,-H w[e wH{=3SƟ~͂XyS*fPt:oÝWmcё>..~0ջ|vf.Nn叩1nIWG>SL]m8#8ٱYg G9rwF2U̫ˡJOWj–M!tς[~:v<_]Es2XUUDf8om (s1㿏/dnvKw>NV/~gVrpʋEo<7>ʲGi^z)Usm4`|U-e~WYÅd/n]֕al@[#gÊ$0ę$4'SM2'%N3 ~:ύ*㞫Jˣ2$;]|QS'?ٺenuzqt?Ó}Wim2׽8{~?υopw N݊\_ WKrV>6~.\؆-8 $w i-b:'';"^"a|zaJW 2(G~xyWJ"@Dx~vyo?u[˃ݻسm+d V^h&I*^brZO]=\?>svʥE5Ƕ3QJ dzevbeF*I<[mp#Z)"|)_ ~vwW?qſ*~t`]*7~_aܨ W&eӶ<ɣWs&, Ŏb6hnŧH!IbzgWiF4y}܆|&3S&wW U׻|?N-9mr^W-h SZ?0 a wK<~yc.72@TU0_v߱Uؕ(٢Z=W}rFO5S&c} O@hi]|t<8zP~VX-n{*FFT+T&]J&&e#s"Ks(սhuOo,p=f s a.?ON J9ҷ ]'B̹O|K?4J6-{XtDwbV]1MxDNZ[NÊtlF Al#d2Z}y8Y,֑k ҳ]n.f2Zfl>>5ckWZlH65)05f h{tw zh"9fDFBnx^֝Z-ImjW$!FWs"b7w.wݹTbl]sƛD]XTKX⊗^ kvf NX(|c~&T.[`3TDu",-'|aF60S"Y5^gEmgbxY)QNi(ܒPPJÍP=t£TPw Q{upZsCZ!BEMP}s2C3= fN7O`;o@8(P?l^܏WrK(w_1L`ycC&_: )d|G$,5-|xG&+kAگq=]nB@rs܈-)k9&&J;Um{X73w[dy !g ?'}[cO=%|bGnic\ly8K=]1Kݻ].!NX:sw3C 4[OEI7b\S{JV S#lsܦ+FYITGh&N2MI fL(j\֜Ed3:-SOPLBCBQ2r=@\ B~ ܩPZޠj)\ +[H8B HT %aq.%i.%5Eftf7a-эoI^*%ngZ6CPŌ2 hɊY"8#aШt_7OtO̤C?Gֲ[7_+.ހow,P-qsMM_R70渊|3 2̅?_ϳu!7R)4@45"d@pYǧz-x}|5s`T*4+ '9Zy!J̩B01h 1:Y3i[! pd܇P"l<&r.v'◨`v;-Uad<\A!M@}@p:z^9ZN"_=^nLDA I3vT<)r^Lq++pAk-85p0D7L*8wq5*.o짻:ܮ0c8;V57jTjꛇTЄ÷ZUH9~NNu*٦zC*R#ԉơ5] ZS2`^g;caD3D;quςG(>80r.)JM&C _i )("EEڷa@e 9G/:ܨ{q#` Ʃ^U2O=<*%`Ɛ3@Iv1b 8 OH88FQ6۵6,lΣYF[_L!ip] \G1hȈ% rsj)ANjF2P&&"qgw+FX^h jT$$V%oSY Y %5UsI['(R Skɪ#`ԩH3pQE/Iz)°^Ys˖':9PaA;\#Il<&$MK85YV! A¯wvJSI cQhSџi#nB%ϳ[rrfX־:3s^=:}!e!O)rwIvmCtAsxZGUk"-X9'=?!lx8d"nDH"&OsQ#gu1THm j\ Un9 "DT @b\J"8v0nْ0LpR\ϵnSfcn3Y1BH@7%xX:x[ (%U$;4QHo.6NdUhgXA2z-ud tI=z"&[2ŪUb5((Ëp urW1F% SGVo= ^<"}>ErCjZ\qV1déȗB^7A;-EIu,v6nDln@F㾰7y2)]9Khu5'1ʚ<ǫi}=X*-s2SXr7$Z~HL*/vuJF\=PQU- DL@EUp.=oɕ18Hh!_rIe%Pz0ܑCEHr0:AMCY B4pn Kq!"HD4L :sTy r ֎2²l^ƃ5|yg XӴ@CRIB 壸9LvZ.nוΙr?n]"r`9 \Ƭg{ߒg^GAzks$8JP#HKLBե!Kcj0s cAɩ7ONC}~F>1ccFIևJ$oL$C:S㊣kj*QG2^9qL eA[ [80LVh 2 Zb%R9-c!E "t2*^TѭFg]s8n[W&#DD 3t3 1neZ% ⭨#eE"#(l14kd72 |:pੜ]b"PL18zёd%QKJDU W"-Ϟ#\3;4mf.䵵8ifK U\iƚ.#q*/nf@aP.I8uB- 8䳐Lw `Ǹ\LܣeKm]r7ᐖPb*&\j.lYRK2[ZBbE5eivApR?XM6{Os狪VXKK[R ls:مdU1p1lBɂ--QZL ɠ9PnňrX\Lvcp^2Dʘz`\"ƝUcITOybxyM&Z8n=D RP6#CIr;$T@$aLSf€@$s`٩bSYnbQYHvNU)W'0Z:NG ݥ 'aB0Ki^c B^q7DnI \ԠmrK#7] G78G2 X@,M![ ЯVtErf~i;ZYH$,r*Q L̪;$K* RȌ( "2E\ 9B I \fGVkskkks$phVn|yw:pi9 &y|&Us\".}rksRͨ]:QQga,# -D,*Jr 芁? jB4 Q9ATrD}Z-2e1 էrhf.Yg x*u~k*Noetwv ZUKe5^KDMUg ] f 3dUcrd{X0 sIfJ> eҫ%Wu pt 8Nh| 1TFS2@FT@M $X$ jX߀G5Kn:|㇯zT%B^´^ <r}yDtn1 9'G.jAs1FHjq+y\s^N7828Y@.rQ |Cې8si抪I%ȢQċ@h(nm (Q rCAz$f.7Bl#e0¸X1o“eF%N*h F٦kjSfzWk!Ζ:M9E-Qݘq/W|YdȮQ)2h47i"pS#(m* _{9eYb!D DI"BD☙I v6DLc.IjZhjЎ&I3T4ٍt2-@Ĩ&)Izb34LL\l6cp Ƃ9!66]4zihfgb&ɲ`|\;3t0 wN;X^XC|:\9*4ialI7!&܅AT7_87Qxd0"Clɉv!0 M8VIJ|1!)ib-@!tL fI( 9[3Qr,Dd6Jl`y}TC}x}#ـ1u,wFgz#٠uHP6|}nC~n|4Oi}6Gƪ5O+έ4մhju&o@59\DF8j`sWYɡٮR.gwQݼuDgbV6 _mEa00lu%CvPlf=,PTzͲv16gOe8 BӋV2Z/m\YU.JqS̙/Lˊ{}d狃{s ܙ.pppO'}o.Tuo ]&.-:vUi1xU\Amp>B3dVtX}\M+)78r}VɋRѨ[sGoIR_'w |1|;˺?S  ֶ2AYlg~O?s2$XHUxP(~A4?P g5@vC.zWDpʩ_iMkj'N xɿayr"Nt&aezz>GN.&6U6D0!J0 0az=CGؽLC 7CCvw{NtJ: :2;I9q 7#lnĨE XbLf! /.utt2^ zx:MF81D"ܲw `m۶*Tu.jRjo ~!H6wnA6$[M7DI';;i{I@.t:4W@ǡD= tDž?Q;R%rihGhOkk]]0pṕ7\oxM- H)VS/ϵtR'F'B "#GFZTBRAB+@+KtRtGBzr<=sqހ# D]n`Gsf̦y晙 LC QҒT:C9o4]WjQ! viic|Uqb([.$ Bc!\Cc&7 1Gh .& p"a\@q&21໓  <8cŤCr-I0n0[`a" |h^"&鸉wݑEҌ MIMqsa]7;[qɻ w-=erojn;;v~ .1J!1F.$D1 LS.&&.&.84aP"`StN;{Nӵ;xP  P cxW  26LK #K ttsn;Ȯ,b B1 Lm LM8D $]dwtt:>>h= уBz=@ׅ nc1LXcƠc8 Ԃ8LYE1d" b\BYpRXaڒv,ӷztw`*wStN0 P  <9l(&$diwSpnrn{&$ ;Je{Pр;MMjq\UU\Q!LY c#bbDֶ# i.H2ڍfiݸ7r)I1\Jbq17a\$Z@%'@]tznzE{VԤ+N״vi6a߻}$@]H܆ۂGBCqźĨ!@q^lm"% T0j0! 888'LJ@BLLW0pX&Б6QBCk6rvv7,"& ` 00 o11ULD*Kb؅7n ɹܛ9s*knF;Sr7Cpnw;0G000 1b T$L L*aq?g\J]1+D+0Řq/GB@$bHHb7q!1"c118x|\nBnw!7] nܔpn7< r .DLl`\`goWx =tCD4 4i~o y7wbn @7s7pnxm֠ffQٙaa<2מ^e6☸"cF.8[*tzK0]:GӧgB::a˕qx VooM䋿rn7nřPY#Ļ1LLS7nܛ-,(o!; zTw{~~~UWq CF.-bWaPaP6Cf͓͆cNq Cqqͻqq$SŴf$"cbY8Ï@h"hh &L3ޕ6mA ݡki`8r& `801ᓊ n.D;vsݸÏ>0vQ L\Sˉ1#劘4& 1\KG>!8#x:h ˠ4`Ve89h]`xԭ*owowZ8RA ;K;{_&<*C ^Hf&ݮiJ6b.-ؓĥ8n2|iim8ngU2 AJPl"dL@AĀ na=/<( Pj1DG_GW@~=>&H4m,~Z_rzAeJ 4~ XDqXcx Ք~11k QH<#S i V2 QQ,k;'*"2DuX<-)T 9|Rukێp:3PwK{<ED)iSBܿEhRPG#Ծ*{`Kжm/Xwn94S]tC0{zoùi8NHmՐsq pO^g<@U3 +f]=/>/!CbaPPGVlX¯/PtPyp~ó|U}(=6D@- #Ο]cGW9si E=OOSW*wg;Ls< >G>|Õy?[.+f̕|/py9<\qB;kYMu62rxW[痁g\ɞJ:Q_>?{)ST;>n/(sYINY?vCQVWϗfU$|ȲTlE\P~_)- @&0j#gK( L9Jİ94'ȬBhJA%TwFX"O_0s@#q>tF[=Y$0w{ytzswgg }u k++/u][HLP7BR{ȥHg4KwhL#r({:|>ܩ, HaT0+< A3FtpSq o#A܆"a"RZl3ֱD(s1:-ꑰ?y"&ތ_r )2ȍ11 6|p {fLDL RODs5 wR&bN9Fy*=h/v-v`۷sB֨BP8iN M4hO+UIpk7})m$ۅ7Iz9/:Trf}T_+w{3 0s]·ĂxW |FQwWä$Ad?>^ "*0{1S@tI1ԩ'9 "HMÖNW." o "5 tW3eY:Z6yveHqulJ$FfA$AC8dp" !Pqu# |#e(oIJ%#tbN'ȅ BU A!뇃)ԭ̕fl^f.I&ni2gvu|?{<`oE-F,zP%˓9p(2b`4aM"W!@'b <9G|Msd_ B_Bv cvKLXQثQW:Q|w6 Q3dpƶslZhjقu/QB[if)@DD9%xP:ܝxjePI=O\B{Y%났.kDo r=D"Pׇx'ԗ&YOrDP 5ѡb)":3EP/gMi*+l\E9Hw]Nz-~"!WPD;oFbΤǔ!1HDN.z˂{\Z>S{ַHl:@y 뀣݇I<s=0}Z_>|Q(q긽=X>2!%|rY}ĶK @y7p8P5i*%@]Pdxc\\;[2UϦRWHr:Hm%D23*%ӄRVx<:` ˌSއW4jHy7їWFl;؅GH8}8}:g #z GYjPv]:Hvߚ]܂&%A0 0pp&盏2J@5]]D2&p&+S1,.%Bb.v_78$ME&ټػἛowxCp(g! l- 1Mn;h"F@* Ƞ~hܭd SdCB|Q a>"Ea`c?}i5RV*&mVDa B+0^?Nb}0ͧ}A`-CÁ6L5ъ45˳U" x]D|+ǵ+qv,֡|(&ٲ{'iCƈ)9 O}R$ EQהLAz?e4Dtj 2 h QaBEI@(\>|'x:螾 =Lۃ 424$)XA8Q?sň 0{@t!10<bi ^Ɛ!h{Cq`gRP C!%7bJI X\fKYй2dDټx$!A1&@TjȈ3W ~)l  !"BBAz_S%Yho?2̠֚oVq nfȭU EJ*)&kߚ?jxӴn4xGփzh6RD߅I r׊vIG#{DJ( ?{'朁 b :yevڶ~6}VI(Xh2'~GzC0z5!"Jj%(CEV(}G%ILM\%x*7Λ9'K0 r;` 6:j5h4[S_ ..?[z<9&Л!M :O)"4 DJ!A(/OϸMVJ#KW5n- DAL_{0E8SbhạL2Fٮ-2.5Xqa8rd60+DIC@Q/I+xN}vc`ݞxLȱ馚jګvhh 1ђS*x/4Xxo\~Jai'VvhsXq$.yBsLvr3f<\rSy쇔{'nS}֟ie'.pA !&'Ic 0ɫ(bX9L4 ~)DD@Dl9F13Ie N>B#'`k1t4gA8)GvJ-gNBډǡb  Kw:/XpʚƸS5 }Tm&A!b߼mTFʝJn0Q$88g0`FfӃ IPliFH `$F0a`3hht8et!Ҧrj 8b=*;K>9`}o&c `jISI)ĢA p~AWOAso|uJ wC˒eڭSf;fU$bbSPqe0;6^ct5CTMZq׋ѣn Dhz ӎcg*I3re7yio /yR?_r9=}ӷ6x:$PM Cu@$D p%Ah"4RAːy,Wt"jo#g+hY8srhSnL (%HWHl2 Nlc_Cd՘9Bb*y4rwޝp^#ڶaDz&2ܖt~u{ !E4lLDZD [fh(b\UZ[A$Օo׫+r*&T%G@9o!vXǸq/Q_rMb=WS8LwK@?h|T~ȏ// u˒Z9PPSLp3SBV,%]2LVBUU&V7Z(lvSU2> 4"I/!lZ3 dgX!A ipƓ30 †"2' J gYwCc"3$`\ 3 ̣lLCfC78`Q$@dJa@`fal%iqlΌ Go.Y,5,]tٮ ,ia nRsxLv.lN}L=L{yX{ Qus¼I8QFC&K[-0؜KMD9Y1]u*w޽zWf췱 \r뉳]5̢r"aawd r7E A'(H{=su%Rڋ9!,j=./E+Z>뮄v_lܛ#CӜC4dD*@<h䯯z=j~dP뺡)8fL‹XN_ ea% !hſ;;*BVedbP& (ܪә'}_cK;  \S@eXz9u| i(!m_y^NBc43gP>O`yp؊U2"#" UUrYcJ,g(۪>X>ʯZFh-w=o`J^(Z>kurK 8crS[#nN.=ԙ aIģ I !ˉtF>dAB9qRKu `$C &5urm5W1Y6`NjQwj0H$DHdT@SO i>(unkOSSek:i@hBa$]ZC p0݆¢!:da"UIs-<\9o샽wIR" :WK=]dewֵw9?s;Y$":Fss%&7MQWed-J*P`g~A  +B48VDNv8* y~HPSVK粠NG5ozҙ>?OX1x)!qdzO-;!/yhx'HC{a<#Ň1 *<(}{bUOBo#_y>ɏ܇dʈSrrOqC(ws)j_6Ҵ|FԜ XRtX"hF#XH~(@_?YrddJ͡bQ2J~A,(}|p@O R"2;L>B~9IG'8HD:?(sI&GKAL+2!%)RUB#=֨sx+afoup?|!9ɂi"`z>gc$@Je (iC %NbIW GU[^l88CEU󆦱+RRjNx&Wj7Iu>BTihBIomA&7BEҕz+Zܪ0i@8uHx[n$ʹNQĢ{ bPZRIX|V8rXL8) L$gVovmMgNYΓ. <%@K A%R-TJhXߣKޥh)CY8g7V1IR2kVMW+D!)3FtJmQ=3$!̱&LuFI$K)H,MQ!QȌ#%\@[݅J$L.=qA Ȯzr$1Z$AW={`<}kmJfIM$X6DylcYGUɺu$8$TӉDx1c¤DX(]'+D/[;1YRRYB,%I"JR$[\l,į2 &I%|bVV)YK 0+L0yl2'4*eDx%P)C9I%dxA{g2HEդX&oxJ#H!ef8+ǒExn(\R!; U)tɥ%bJYB6N2sgcThHK0$,%f_`!t"7+l168*xE B+R)B8BEbc[)K0' [ ȓIJgaj`FZۮ0mčEYGVwH"RY["ЅQoƤѶw -*_;%)J!}W 0 s.WSBa)JɄxO pbNPA!pak D(a\0,0 +S a-R,*I t( BY@-BL2I\N0Kb#QpH%QK \ʳI,pBY%k *F` @F==(NxB Ɨ9p8ZHI)$v7l E1 Z8 FdRAa q1"ZXNsHu JR[1 L'aH6لU ^C+F!DrV ȔH,MlX#H!,Ȕ9+pV!֗C1L`bQ+*տܵSI,)(La 0:> eٟSicTph$3~j4|BJ?gnJ8>[v" SӓoE>K,yK7*{yJ j!6bddA=C1?Wˋ <:Q8 s11"f?8kB=h*u.LqalVfլƒcNhNafS  0p]k?JHP G0"͕4K&ܓi)))2iLB^R[Z'ⰇZO"xCCEBI@}qQ^51FIK=4i[B}y3 P"R?swnp5q5ұMC"A"EjoBFkԺ_wshדѓD8B`АLL<~]{˲] C/!i8l- j 2*F-_= & `g_MXueS`' w7vfxӷo\G'вG=jb8eU.Ngnoy ];)DڅiYAUbSE,zYV:@e$v̮,]%$_)cjRoi08j&JC F509b6 էW1/uBj*Xl8Qm'>Oϓ2'6`Uk)٩-Uiʜ^d$7ٿ4\:S!L[0W#%CFe H_ckI"H$}17`&+/,,80ҞW]LH.h>-3C W궥`WF/b&oMƂ(9Usy,Z/c?T~?ÐT_~J ٺE=ZkZ{ҥ 1 'Ё{(@@@ "* ` `s6`j?(`D XԒ'_'m^>2Ng}3oڝR3mok $V[КG/D7_t-` OD)RcHn+QD*d;@Ik4IJVvW5 ( GAn}WdHN}~`u_QL>r  XٙgXCTA"ڇR3Q iN R!QPPQ(5^)Ƿ>ru8\ONrķS=~ާCz93nܿ3kp"uiOvd:;sܑ c3A qz ~>B}P|Kd!d Z2BԱmW"FJbE L!21Idc(MbRbI4[!ETcTbUTLU/ 3_'}rATx<'sB@08nRB(w ߷w C8IxJ[_흾~Mޭu.)@,6V ~bʙ6x<&!bUQMłwwӳ;̘ ۓ8[וx^AE v.Y X˥=Q.j[`b$$C&~F{&νKZXA 4b:}g[K^u2ASUt6$/ Hu5G^N>>Cfu!4 J lm#?$>Gq_|;u`}G~\Y,%#`ED w#1$WkA--CɊyC2 ܀(h[ } 푄/Nr'OBh !6ᮎg^ÿd][SUb77Aler65IJv#tq.œUL9>\7| ݛ/繀dpWa+ RP( B?LO?7A٣('"x 7hPk?̃Dh?&4̉}|kF题#ݓ) =d'ġw lJ֠k+*{ :PJ3uq` C@P"Nk2b| }OJڔՒղ)! (@#D֤[JJURZMJX S>g6?btFO29`C4PyWP,`2~&'x\ HoUӹre?'/ȼ=6C*@4D((5犯_]r*lڨBO+nw^ GX )d2XpbHL\ Q B l_V`95Gq ZԌxz`&'=a#F!"& MH\F5к  ֎]E{9ۦh~D-G>=o${}(k{.mv-aֿH?zAj/j-n[d\d q6XF7ݪGHq1PA,¢x);Aqybw"rI) r8󪺕sWHF!Oi^f@rLP\竒oZ:4DGQۡ*6`Eol[͠SrO1R4kI,Q;H3Ȫr֮^\K~=ђC 3{d{g3/L9w:É2@@ @㾗=JbD0ԡrR}w}]Q@d4̩j+UTVשF ,{b܅u3 }]_=_%b! 7z]FAM`E6&O ^>RpGWф=?s{~>}+Shkdn2N$4[!pnfĸ1 L^@4L *ܓt36۪X&bAA&KE]wuvVY-R,̕f*]%ӻYun꣺ݎ.黪v7Z뚗Lٖ&Z04~aUƒ'@2 `E-Φ5j]*VjfuvҀ85!)c&b&2KݩWnfJfeK5l\ ,3 qLqŌŒ@.zP 29bT,mY  H)A RRD H $$RSN 4&!IXd"eЯߩmJD)d~?Kk@_7uzLv` qGEki,lA4daaV]hsza ;wBwlx? ܾ_@ĉeAjɺeQH]yziT@ĉPJ#՘ (u?ur&famP@DCY@}XW(B`yTw)o(viB9"ڵ4=tv~/l09G"gXk0E?2Caƾiz1x߷}eDic;%{S E9bN 7lы0{0?-%J":ɥ Ä`8 l((@BHsȇmܗILF) wO& iiH0<2># M? dRQ("BHCCG(@5@:PGR435j4fY^\ ]r2~ځf&*5T RǧTy1:1Jv$Ts|zOx>O~;_l*j'MIJjHzbSG;/9qReU'sX'-`R% ((Ī 4I7300E!)K&JCx8q.*x Xs6ϔu3RB\3Xe՚$=e+奕kRԈ@@D8(pK,``J<L  A4F"P gWozmm뎻+.m"\̲-Kc!/u^uHjT*޺j"Y%]2i7F˺-Un#%4ɨa':С0baD o t358S @CiڴYEt4ʉЩM]v 蒐Le\k)-6nvYvԬfjHQh"1Ef4|J=몈Ȣ" +!ܘ\u׽щZ>Xʘ>~>l!p"u N{rߥ*-[P <]zcx兠A,P'Ϻ)Q@z2 xGyGdK̈'4\$w7. Yґ `I$઴A\_ENJXIMS N`>d$a]q)j@Ӗ>˽gz֕_08P@)`$HRwU(P6ώDi6ҁD H 9 "q| b ~q7 xk9˯!z=3A1"C'p DN5v,P8C&p&!{?|ї) 2:%1Rj9PP9 W7>>vЯ2Q(HH IZ9ѕ$Rq}Apd#̖CG?;FSƀf-r8( /5"%w2Bb%ʇ ݘPaI$/| Lt ذY"b@˨hmeš&zUY%ٓ, B0TR7{p|:q 2K_} shut uݵB$Һ+"}3P:>?|(g SX1r;SrޫQ`hӓK ۭ| ^/oE.RhB{.ԢG*d44$I34|x%^ٳ :E:ǪS<j#JA>n(6oXAAG6mSp)/"_%KX`H}}z<9", >-ސhGQ5D`'?yC̔*Dg%i-=׿~L:䢏]cvX>>u;>=A|y^wy2W/O'!֞e }YfX*XD5 O6x#3מs1>_  {AƋM:ޥ]ﯾΖ0OS.W?m9yzt5TEѴ-KN tN2n,^1 }%p"AmQYG3_j).=qCIB@2@_F74&wV1U AS3QWdan}/~,:a-}B #D7f4BK޽zꫥ%`.M$'yݔxy OηVD eWfjz~_%m;gcмIѥgb '5H U-dNF @*vL"!@R gߧ˯ZVG̑~á_uN\#;,Ē=Ӌc'=7Ϻc1;{*"mTPS}}ެ"ryꭚV[,T(ZzL]'13p\#|Tߕ2@l-᪗nk-} JF,ٍga]'Z6ݖKv0XnR/+QQLTlUl6*^ :;beTzxrE1VFY%J1BN&fVfQ# 0ym,X+Invo!RC έAeg+kV.]4g(K8Q%)%pEɕPוu2CJK(h.tF,DL >lu˭nZ,h2֘(N\|5j\_V>.F LNZgm;*$̣Bsŭ!+|m5poܙP@j -TDt[0AU˄mI埤}y7Wxh)8VDsZkZֵk[k| h*^=#͔r!_c%Sz v/NYѹs "< i"E՛n|Q"m5LV\ hIΩ][Bkrު 3tNV}t5*L"O`DY=`gB3t-9@|EE(eyM|9<e>۪/ Mn\ҌKnY! EA8/hsҜDTSXrZrb/zxhUΆH Ï$HU\\TQtӕQ.vgaqlˌllPfEmA5{\5j/-.A]ϩ xpoH2:!uENN%P}}&!@$6i*i߈c=:p3 vu$WZkw~mƚsn>pnm;)е2]5$@q8çN OΨ>ѹ#Dm̧Ș.zv 'W=~s~y9zǂKkLW#EHkUFYͅ'\DN+gHYx`w+).fT2^<ҕ*/k 4-2<ڨMQp}$=W5Nf;T 7Ã% tR)"Mt10EPEwH+R(( ffs6yVl)>?`%TksdAe^rpu7 'Y6O&DT CkLT'qLUT.˭lg? t>^I{r$Z#Q>ט}$\`UQѵ8:hc櫻/ b&PFzMX~ЎAY{X[ļ_'`1#eםvtxrkba4vt=Dey/q.cӊN"p-iM,3573\I4IV4ÆvBbb jIsݬ.oq[ln;se=ribFn\~'-ݷX"') Qٵע87XZ31u&(g`vq rpflwkM,1zw'MuAT;<,irxe? :bq!ֳPpyNt04TgPǎ/ >l8-+ܧ e<>wSt/,3ez_v#<GAD,G4@#r>içm.:iq)-VEJꪊ0CtrnU*g!H:Ή˦k`=0!\\quT\Yv,mj =y+SgiМo$&ZTDf50D_%[Ot/޷ag*LfvNCP}N\i,w:""k^[6-ܦp̬²n]GRDnHZN^ Qw3fD hH.p_BEldr1m(F3JnӪ< + Gb޼\;g ?+EMq~T|2*1eh\;֒&}m&BW W;Ҏ3#o}ڌ5ŪRI y=įB߽ ']UC=ETHB_od,Eͅ2bJ)WdHђ cfF!-@08>G:پ81U5$vA΢d$GjB"Bz ,,̒"Хm"}u1˾m:XMj]2۪!{RtU" 5z[2iR]*!5 d_5S$]q ̊w;Nqx5z˂moFBhrG3%e8feXG2?o<~_g" h<HA\ϔwO 4Pzr = Hs Xcɝ)Fle4-ƻӚ{mk$;fqSV |/Jwv($gp۵/(.67|z@lTܣYkpzf&WsTRw ׊U=L"Y~ILqWa#pQɲ/$* 4Ȋ\BU!Lw <6͙&妽NOjii*s[,)7k5rTݬ ̒Ha8+i,HJʽvel0ٲe\]{ 00IRD (̉,g[i]svԨb$Yɇ80hE5{隣 lbv,mjj4%'jl$ qDZ.լ$6!K"7zY# Y\墐%kiuM*ޥ]J)J),{͒kѮL8Fc{o)Pvit-HRJ-B`0*N`(ʒC+R$ĤBZjmS)KQ$IlJmRD! A&!Dp˻yvܗ_qDsEI Q N44AKB TLOEHv޲=q\cCqy8b$\HCt|P/Z%JD|^%Gڂ NDdX^>AdoyVLM9D@$))Oc h!'HiM]^% v6W$JMRZ#*f&djjKeVmejjAnB"h9D7 Ki7N^<e> ,oGTDHnޘmV)ER@xOmDΐ3.^(QvIdN[o&&!hxFo0YJ mN\cq:DaԤ-hYIzhrEEB#A&gaIUMڎiB{b /΂-,\A/{@ذeHΔ~Sڻ|Dy{!uoJAA :$t}Hc(@$ظ6 (|1kԱt @2qY?'DSMA "}w[%{[$PQfѬ 7ã[/~|Y}.;m(h+"n_ce8a9kMV4T:C:9}s  #H;؈|N4*27ℌPuLƎG~{'lG۩q1-i.rM$5>534REenŦq_vjcyPu)eJEaaRՒGRW.VnqzC]| FśVe{Pr,q|؂}/Aw[hm=6q`>튷0o.ifm>:~A/ etq}3dYnzfT[eedNQy·)LrJ.qW`ɦKF6(b ((Og[ $uVz4v(ԯF_F2rbhկ8Ivgr*wshʉUv6 ++Ck )jVNX8UW,3c,;jIE;w|/X_V=ܹbm&?"hǾHi=6}'@YU^eŽh/scDhЅMW Y_P/k.lHm6[7qB=UDWqs͇c 8CxmJf(@8105Hc;gεCu*h xWs+O6輮{&<Tr(B'_ijq:a<0W/GXk RvDa#[>ڗrm]ƙcǧTp阣!hWr;szݷws֎DrM2t]U#|Zoc:-g**=Q {PN0N pݯKOji:񀊢rga'!yZ<u -BvOú)m xV7]1jad &/4#C=^޶df(pb5&8H8?SέA2K@Å"8#r<2}+*(+9SV=]7Ra2"(MG`rtY_W}\*UQޡcz 2wN׊%NM'~5[V2᳁4qɂ(ǰg>CNp=GqQzǂ]WUW·ШZ'_GnE=%U+G# $((H|"u]xPYecwtP+ӛGϣy:'5U?ze*fC,l~T rSreDA>B" H(otI7U[%yNov!Ojf2_76W5&!{/| m;ӧGرbd=bi,,`t c8Q 1%$TQ:!N8db&r΢|yJ9J٦6o^׮$+uDY Cuuvo-rj U#UMs̏ț&GcG}5ʴ4S9]@ƏikA Hqc{ LvIX(d^:$Aę]Iɕ՟-A<2(}zkf,oV\fB@Qc>M$oPqD#Fb0xXT2 R‚(_+4b z񐾤7W ! vg@ 5R%@9[n բ592 ϒ\;>Ő=_o-E_I] SA a.,z<"9#SyړGGaT잓 @ĉJ#JJB2: >ƔAzLk$:.`u:GwS0%;K=.ɗ[q 3GEUֵI Ixys߿x>Ӧ9*j \\N|KSQԆ CLOb)DdFI/\e,uK ^w]nIyuͦ%^E%2f " M/@ "4h@9&ФqߜEU-nUlbeX.gO[%W$0wC%Ⳃɣwz9SRIX&0v9EqLE8dp4ߛfx/[lz"K hYd2&"pJ^+[YfZQڲqk,|ݶ̩dpg[}0qΔVo!y&|Z-[&>"Iȼ(}C1˶ㆻ.WM!5磽vG6)vjBBHGEA9uiv~o4ԞY16^Bb 0#vK7"rUp8E{{ Bۥ35ovN;/3hgavAM/. 2UQeF3)EP܈^Z s{Whʅ,ƪh{nXؿÂvu(qjai7quݶAl`D=6Eq\V~;G%9}!$ޔ//QMvwz ϕgsI!N!J' uTj5_¼9rHG9Pos58:?V^{n8qz6x 'G56+0V-l(MԘ%7R ۘ0QWD29ms+ bϳR2DMB߲uK[9cUsy- MeLucx]~Aq`mF'i^294% oy}7Cʧ!ydנÛ.m2,9LD%˗sMMd =CJEw"@~q pBƞ) iF'({Ӹ rk"ʕQWsFi rD%EK˒K#Z(S~|ay =܎?mR |ETYzQ G>c%G+ 2I4FPdDgCFdR1.~5+)p=D..2=p/ada[1<3sNC j0p4i^Z0@OFqOyW>kɧMl^%ݔ$h7!p`UEO %?*E8$%gO@kn'&!$B*`4:p0X D"yuG1^ #w Tϛf6@@6(4 (J'T[.8x4md]]qG[JTpUDaS1 AT DV2l|WÌ@1T]  y)(ӬySu^E%)!G~ x2 g}X"T(V&O&&"R 0@/KiYjmWMY*FMȚ+֩M4Y58#Rʤ,,A$E5s gݩ=C޹k=[s&9.i96IDdKjjQ@:7+Tʴrs KB{P&NsǏb<&#R`*F$q-@J~*oYZ`fhz@"o L+d$I#\<9!=%xg{1jAnI>(zI,k9N4,⡩6EB$ C<`iT;!.1w(ݔgh7 ݫ6wN&$RBjAҴ5s 'Ju48d|"B2j,$X"*St90oGvxF@ޅ~̪*E[5WIQ\|1-_*ɓs'{Ȭu-LȻjX"fR)p"-H5<7L$&(@;CXջOCJʋmZgg ES>2#q/54"FZwӴ*xyjw~!Q`Hrw:C=/gf/˩אk o 7=q-5(CD0c8Ϭ!5#?v'թ{v$u0t$}iG吲FF\Nt\;q$:sAtdUgjsA^֥VvC rr*.A{\ʝ@=hUFawxz$E@UUbQ! Q珑Ö.x?9؞u{_ t hnVm,OZm<^TZ6"QTPT* :ޭA͂׊//Kp˳vNTF`G`By#hjvw:Ԟ/0_` {݋B y$"EXh\slc=:}c8B02#dGa 4UEˈkV!1.u&P'=[) X6JO=G\_M$| ^T-j^iMKrYg3%lxAV9iP̧\YJ|HU5+eƎ:\ZRUc3ڻYpfwS2S-6f{@nޭ/4"SA-T:Ql~NN}J'⊞¶'Ào3*`8 z >tňAwBۈ ܁е9-UIU A3Pz(V@'P,n JG/: a`;tB-I@.yWTw,kx9Vx j0N`Ȕ)XzfDhgg-vd -e0!s9TFng-y_|4&* yg>"+ujgCi2 T dn8 Q D-un:r_*xVүьZI(}^y9<,aAuI_Z# `z;RwWyMaILNjJGcIhP>G8{ *9xFg{NdչXmqd>KAXi rTi7w N,ܟ/9R35ƶ훑 s1U3Z-sӖI${2gg q&:3 l5_Q!^xvzbIn ˍ3Bita%v+7i0HsdV:G ptQ0k$+H$+0vCdh+$1muPsI"*xdCxRQx5hh ]u`xB#Š*"% 'bBmtysyyF6xvdR0n,XXCQ04Em˙•mFڔE"1`G(\?3p_Jf1lm؎L $8R7Amr_?a&$Qfrn(IaIj%%8\I`APHd4{ܺۮ/׺gve}#E5k|x^wIR_#͙6FUB'64  )jx2H*[23jX*Ss mUJPflz4Zw ̞2 GRwY2=k"xTm d)DZEvwn7cIB㢨dER\<9b^8RKB…ժ.qG FlNuJ" >ϥrU-b!aC,QRONǛǼ>Vm1SddeP J1`/ȨRIv7,mS;(wKaUCΫ~4&8ǣWt|4xc|Q[|eup d^BN;ùb 0Ə5aIc\RAyxK6vnOB$S LmsK"e̅h +; T{"e͑LI~.隷Q{BMJaShy>]ub Yg`dzN@\) o'$ oZu]isnF'lƳ<琿:b)T,dQAϋlٴs̪Xt}m.t %1BcaB!kLTXdc! ۟^7`2E/u̥"b*@z|!|d)[XsW Hr)١Of^',Q q=vo;c߅ ;!.!~ֿ;EK@ԜgN*7(3* ؇fϴ@v畢Q6l9Y96E2tNP־y@w"x{_a?yN7j'GW4)I_ pnG~Go^'>q\D, H< DJ $ȬξM MVVdu5'R*L8Xc5tV9$#92.Z#ׯTo%fXs<՞&N&*-㏠v5X#9UM]w==ɧc"vp6||xb©5kZG tKc\{T\[&ObO1{Z7-źpjf\bI\k9&%%j*I9]@Ax)٩6NMXH@{6K.v|^٢$"7xrXͷ8ˣtz'ArLD5sv299[ǡ2RѼN*Cq^nVifb!'(-ﶫ/[IqVBO%Rx1 9Kyn8;GQyTAh R`zGƌjڀtSqjQK}B_ɒKUж_;a~MWa4gE[qw"8MQ=R/qW6h؈f2*&қ9[*onQɁ*Aj 7'zDtM8qAp"5$wʶƃ)b`w7F~V)oB~H?m{JLJ) ZĎkP(Q:`J:^n/w<9 A|%LKdd-'{ٿC3;o :$4Dc9+!H)b= Ш$P Z(('ĽT*Xh&˄GkD:V,+9n׼៉(Kv&=~cBj/o&D^LfObȉ1-sB, 5 -qd/T9 HaҲ?MBNv칈 6|^T53r7.BvlΙF=rjvn`64"&33u,؋jW^*ؙ.]N!e}wj̍0zpN}cɁ7W-EpJ9eC{#hI0UßgZ =R{}G8c5TA Dؓ" 0Q{6\SaP=9: f0SJ,$ i-n30Z8с́7 2\]ămG[ ^%BI@fZrh* 8D$):ޓllJJ-+J*MP]lѣ(e._6;3WW[e"vqI6|SfSiz0-,(ğΓ*Y]81zzՎ)ŚeEQrrR";}GNቤ%02@2 )*I)o&``p Ǐz <56-v.n4CEQ$blҶ#h+xۥxVjՔ۪.ƵԶ &ha<pXCI/M/.Ku>&d&K)eפ\ f|"e& xȻ ÷W:S{ׯvቷ34pnmЦ,lǣvHҭ+穈# ?782 $&ɴY='x r"h#m!ۛjPt9 KH m rqfM7e4|\joţ>HS5y|gw"zyMbqtr0*rVʀJLʉX`ʑCJ|:{{KQ(̪S.;-`]ez>7jgvB Xc/UCV-zVH϶G댊+3#Muv/n7_YlUۚ-xS{veej^_,*aQk&RFIAID̰?`!B%i d rEv]z $'ng볔pO;eRc(쒞nH/ITJdB<@&!H*&b!*(IADkB:D}HS!+CM@4!e$w^a">r"^¶'jDd;NZhz'<6.a8ECZoirӵ\df^ۭWub/L<$!Mj냧=lKwrV61$Ho+wc4U=4)K RE Nw}P S|R;+AB>\i"l5W0]}ЋK\%ׄ~Bm+VDŽy`Y@rc%\tqŜQ(Oo[kp6I]0"Y4DDD̼fd'.BU#ceKYt9"""*""nsbe`#W!/#b WAWCQ*Rm)S NH#3RSS %-{׃.\tSeE#s} D °BH DL„%e"Ty)>/.'z^^[}woeÿw%r=sG?"St/,'P-㘞O L 2PYl4C743 ZKAZQv<_)||4뙹bW&JqaMݡiN\A@Te×h Ӈ̋tZHb(YЬgLKLp`]B1὞(JTHeC7]XD=lE8θ23)iڇsm/L0Wg^spn̓:ݻ;A(c)hSn1ij5Q'mR%iITU@:.BT)OiWxׁфDmo%MM0`%$[֭I\iia(5yۃ9d!LZ%ee75{">̮>JX,3~IFʪ8ŖDwp(9HqFbn*5F l%e6øԭ FRмTNf kA\:늝ڻ4Ťo`:qs)I3QqV `4׋$e]o{ʒHӌVR ƲPrJ.*,wiF1w#i:7s7nXfٹc2Q$ qmmqxc ku/I̅qXlép3xRR5iLX\ kW p շzdԘUjJL)\Šq֌d8AQC33,SjM&6aJfqcK/m7dNrW$GfL馎+ndж7ejNQ;Mvn`81|eO]p>uf5LJ*RӉڬC(Kn/ K44@BuxNG٘ )B$"")ÓfRU5]JxG z[hŽC?sRWd=XGk6yD΍ !`/{uii?JyePA<`rX8p1L!#md#_+ @t fa0yæB "?'GžD0P8~F2mr$HD$D;_gj_"s}JD=6}ۣv<0'bi8Rs*~TM=R='p${VCȁծKgj"B"I̩!"Q0Ո <~ua ;rҷ!I"Mi9-ȶa.mHBD> Z J>ɾ@ :{RD=_6 Dq&S (CbJ"H!NwJ׳NPHŚšo.kyo^ZII݊?^p+UB3_P֭Bg=C, &0~y5 !\HbR 93~bnʮ"+U4;;jeNz_đU4ɩzpp"4G2y3$Ɓ~LL7 bK+ҥ~浯5D|$@~ D3$l|pԝP ~"ٮU=Ghr@9lL$KqsI(^?_>eN]mlDdN]9"zC8Co/rܸl0CG(tϗ)1vR2GN=7eF_D?)=,A -KK?҃$B%"[Ɉ$*H~!򮗇4;HA0{b;hЕII߿}K80';m*eJ~fh-W$6D!)!̯/0 a@?S R]9[kK)Iph%"??n{XdPf t/VJdeI)WF$~2:]\wsXHR)OG ^1m7 X䑴P/s "bP;=6][#t3CˤBì>;-$ W :T?;bΥ!kJj̘Hߢr by6qshDj, D$iIP3|8a)bM5 @!HH$yGG՛M?b#?3.Vd1BLHS^K%~}:_s@Ճ;1d~q!"B+U<_ {٣NPйGmp`)i:̂ r}H('C8|? _LD6m+"FJJ䤺hj2Ƚ=LվO4"0<7A(m{u)CS2Q?_{ 4d4&qʐ[7n!P(!aUȉ?sZ+r:&/?.D^{px4 :ϽJFPNe`LddXH`c [w_o Џ5RGwIxR:m湾%$R0JX!ho?GІF!dZA(I(H?(yb AT[=0oxV{ӸmKAD5YbO7.|'7ih Ⱥ, uPh9yxs0zlhr IXM=wl$vAXZ! PBD~O|B?/jhAgכad `{QMwYk߶D.rʆl9}_$/2"SZdBF~5K< f׉g%G7%9+&䩡 x5ύ%`gSs i6E!y]H_ i>^(q8̫-@aۂg]HLBEë%={"4Z ( J4ERWZ3$'xw4\r^OأKQ[G 0&Ozfo4K(aJI!$H'^qo]R lO!$?><# OT |bEPqs.'~g?>*IOdZij?r?!#FDrlv7d"jXbyqu i~h  ]vx]JTT DPZ'NTXK!<,ܦy7up`X$` AISuE[ACQP0A|v.b/SfF!QJsM,$Y$?ӳi1Ӓ66vO4#JBm(uuMd2[@͠dOpx{YAbwXsyoK҆kQ"k-@HH,_?u wKvh/i  jБ'$1{/0 @( V =P"g{$E!?+ˣpC@@PPʹX-Coa!?UQjk\Jc'Q? '* X,/o~jj׺t;Hg4ۂØJUkЦsI)%=;kǁ$ Kӓd~篛_Nuq 뮑* ()(SD-$`??}g`i։tSV: ,VDOw.j/a6 <} Mb'A@QqXOZO^ a!eJ qN Z/o^{xWlh$PS?o`EHr^^˯'?(x憎u6GA $I <\= NmLNml @ kzO;SJa2A=h)f))Cf՜:M!:PF rd)IE2X@}ѣ!2y(zz=k<ҺiNJ&(UDg_r_VK1R1A$~?4:\:۽uqhB)ݾ>d ¯'ԦgJ|ZI#6\bDJ`IDa<( ?ľ~d1RAAi8ߤ>T ܀3RߍHy3RaᚩvzWGO= 2siK,ķ_m2D!~)v?~9y|](f,%k AmwpaT !\x_l6>=Z(_w_vsgN#a[s U@-Aٵ!AGX>]WpdKO6ZrA,PB%ϫX8 rpBF<C]ΫɵÛo875}X/'ѓ7TRa$}ZC9yOww9^Cyad0rNׅ}yNghmz5apC $?sgsH:ZìWp BjI5*dB jo hKVTL)'!OOg|xlSr!-Hj_С-£̂w u=zdES[vL(QmxhzK@~T/dT@ PD2?QQ`AYP@D XHÏ~q g#駥=L0B$>uT B~̕<6#YC1`~fpCG Bt'uοw'}O.X#V28eĀhH!.?ݟ0u:z}u:G,%'4c^Qǵ({_~򸸲n1J L_`lʩ)FKHB PRpLH2J5:$@ԡsW5\-mU٪u˕U)Pţ2Ld`iQ2TR$&ZKmj(T(=ҶdUkjU,rU PdQjW1ks&Vm\.r*b2i\\vB PزQQxsWڊkYEb.nɻFM1]8mFɮEr{-t/vw9EFd0iuNnh\컚cM3ibԷ%H\3~-+Jlw8O&i,ϐT$y(,VC)/k?%2e[CVIk }}}U{H6R]ﻍ-wz=*W9|OiآY{}y+QG9cd()һltc1QI<2}^yN2W;r!S/X;wӼ7/u[]lI5 (I~Q{:}?6]*]'vmgvnSݴ3nԪw6:K U9) M8ֹ݇c}1] }a<H Q{ܴ"n8ONn^-Y1J{"2隧,W\~ fWK2|8z' ,!ߠ`qRft3XwOKqwsJ^`R>j˟9@yluݢ$)lR2ŚH+(_زfX`1\U &ڽ9 ᭱!o߄˾AdA?gT_ ߡ^`΋bYdVw#)p1|&HUеY_f~_gkB\sfm͢gfgk"W mI t?yj'wӍ9>Y#6Ʃ.{{f"X:L߇plhiUF_dȭ {!z_0>QvdzO)N xoM=;MֈPy~^ΛKyLW/WJ1;͇gLjeJRڜX3m;v{p.$A7>6t̼mW{~ϱ([msE0! >tkw[;+i}is+\YpX0LQEW)֝4(ў)qv'Cf?3_ bGwZFeY/5mEPwƝf2 0r? \sij '0"V"Sd~%\ *|O~8^ ;oDx׎XȟQ}HluΫ9ɉ[\b4z4/fm'RwZb3gRwߓkW{ Mk ؜is@މT^#), &1J>;m{ S=K N].ē z:qUSͬgk{'Fm`Kw58ϩJ~UqhxܵR&9@b^:H|-NTbSHBNI!(#,`[d(CdFE94?M)x^9LL! b>zZcz^zOqin1\ek)J'◸ʫ9cGWz3tu0X~HUrִ_7Ku/kzxw4/)ѭ*8/%䚧=uVM<σ`wyC%}{^Yr/3=o;/ܴvIi^ҏS>+F _6kUd%NmYV1)+7Lj. =W֔U_OK"u+=xJs]YM֦ZX(wDkݎ G/B,]G?Ek^1{ Xr+g}Nʾ c- 68-cGc A3Iʡk{i[|wA-fWPExS1sOMK3M_Ӛ&H'0]YGQ|W߃o߃$4WΏlj6Q(C5QLgVpPDaTj[S+cow-'1y?^G75>|/]kΓ7u[\آSßiTfphc>QyM2_nOp"7vWIklujgV3==[vWOl0(O'YQ8Z>/= a:|߿vXXϽr_Ӵ&P_FCVay4?UJeVm' .vǯwf;z1t\%J^fc2U$/(Z3흧5=/ݾZg;~oM#Zj4W*njZy73eE} ~)n4=UzS>"źqgcоzQhngiq}ʿk[ЯKS0v[޷teKsRK{V]&7y^Qs=ɇ\cpw绻e:꽫µo kv6ׇ<闵-ǥy\ycfQ\wrsqwBwF\]N\+nww^zQ \3o{[]qYTΦ^u:pŠ=ݽQ۽-w\rw{y{g]k ZW bR oy~ױO.8n/z|ψ`tP+S-w 񖌬K6ixY+mYS9TNG{.]i9E59O#ڹ>.V[ pǵtX?N=ÛuVPBWKCbs0%f5XY<# ~a8md Wݬ@~ƿRˬyǭ)ǯ;}~u Z @4;)9wrnj$׵p /WtF4fӸ )Ӧᐹwvnir"-y{=]ݹF#r˗3,:cW\2k":̆R\tnO]/72G{.H{=Kpܣ7䤮Zw$RMyy{c1̑ΆEnK)ca"B 231O7Ov{*,”15ao40I"!/ֹ=qՆsD>AI8} u$H}8?F'󱅉T> % '-t鼚^qq]*v}Z<$E\DvUr|pAl .>.S(2%S(gA5NG9k=,N fi6C?V`g0/PK!D]hV:SV jjLr|LB&r .wred?EC^āA'_]%y+@<\W8TQ ./rUԅ":6qlp֤|45E -C4<&3ݡltO 13hҢc{\\%eװ!jحb;#7Z86v뇅$:_45F u}gMP-.[>-3;DGЭVFE )X,t{}($ =Oh Jm#G}d.XhXg'f> : dE\jЌXXX}|cD*6;Q`l H/JHz(y SJQ/>gu\ 7]1,(Fw{FKS0Cw`%*i(y`!^cA fm>]XxхAi.N&Ј* lkʷXƣd10k,並bf A1qDoXX&hFjtfEU}b t^eu%`ԗ;gK"Z.9W8 MC_dm&7-CT'X m*ٽj&/lo}z?#9.Ù\!vY *ڇxZP0w/dȌң&EOR4(Qx҇;*=K 7?|]t:]_ՠEV3 -1kk'=yt#imƲM}i{vùkAvw9WǶ{ı+ܿ2uVPl@j~n?d>^JBôgxSm*b}4ʏ70)WO_X`~GF6W~-~S;jӯ=hchڭks)KAo?NK}ö@ZUʝX%lxK7Lƹ`DLv 8pUݦ9tR u :P}(Hz$7w8},pK6{<uuq]]Zu~X?C]}w]Kg`#0%x1U#3]UJ)4N KX"hTBXY>j?VZ׎gÁ. ppy.g9W R~j=l/Lz7#BJ^ DT/LXFj &2]u{stI(g;e>ʁFm;Ķ`ؙ9A o.F4t,hJU۰xvlN;BJ.UECS]#/`/j@q?؛  U`fn/=%m])*~O9~WՋ?EgQ*+r˴b\# ţ3$vb7u H)I.axiNs@\<\/\Dݗi莼Rwg)hCBSn@k2*-{f2 u{zKʟ|m'wfGZ= ב,v59EU5eu/z[M5:"26sFjdˏBK8_-!~P @ 3ⶇ˗ɼuɠ{Pe׃Zsqy?|X/uVcx%ua2nxrl p_Fi훧s+Oa_\,.˜^:{Gh@XV%3t/`՝ s1O ^cHM5=sc[7 ongra > >wu!侖ݒjvΑd(T#[v_vR;=D/ lr +=ӧܬvJj&36$#pS*|N_^x`;8+GX -;}G˾&󎠧lZiɏ.ʟ>7_v >Xo"c(ҭV^NW-ب |k \n./ %+NžN|qO|&+b`Kaӟ07ttQ^u>dH8Ԇ]iёj۾we~nR$2 =Soӭ4~K:co+T%Ѿ7UktB)h*jG>gaKd.jKԭe:ų R?ӽRW (Www6vK&|[Zu/##cĕzZ^nJO$C<^MY>bXa`m+ЭCHbrz |L *Krln-^5lpI*bծ] N]ݠ{ЕK,t$ECy\oP"06ُUʥFmd"]/A!"1|a6G:dz pstB!ۈp^_FSD ,r+5K_|?(( 0I%:K>2RZTlϋҒ[%6ptJr-Q:{74m~1)>r6t(qA'"4Ph\|+n3N%]#|xfDX^%9gvÞ pB.h[wd*S'з>*^{zƙ\.Fo>ELvbli՟5ti88;·`Ѧ F<*c'`hW)RWfsOa} 5a[X b*.M]oҺ(p5>?3pm^3+!oVc6esqQY>PIF_8FaHv"?NCg,xkE&tOD]{ծ?xǷ'Ӎbf(֍t띿bF1wY% +?Uf /O6+Gf_#~:sgkl.c3E<7ƾkezu&Zc~49۱?{w{~h\O:?#BLiCW-߽En(۝A.PnYF$qz5=4J%5z ڧt|n1-ފ}IaCi'nkjWUl(|TW]6hĶZI'OjWuRww G{8wF98wxOsVuS{TNKdgm̮c~?߶Nb~uv]}qШ՗xmU2?:UXOgBt{?+^Ѵ&i'3)&=f{:4Ɯ<ߣiX1=<9Uwf%4t9v`¥I)OUyoM]0wk4Jj5_|N_G3LZ[Ok[0ף2`&q3DKj;].po@&*M?L{/ۂ?.)՚idp?hd󆽨T9S[~0jR9du,FD[=CY.4cؗWfmݞс&v֭d~׾c_<c9ۿ3Ϲ?ڢ-*="Q~9`+VaIr}^mFgYٔV ,j_Q@VS;5"*FJa|FP|0|#hp D!4rFWS9lr7J Wm/,pw//,@b\I1YLVs;9gwvڤjջyt7\gjxc!Ӣq7-ҕtm&xJPUMD­p9K b·]^ZM+;Of9HYJSe>Vr|x1l{Nvwgﭸ;L27"cu}_S'Xa24>m;b4Y~+%/}>ޗ䔍<}os}^>W@g Зz n+mbrȏ; ܜIu=dZi6fk¼vitȶ̻ W4lD8 Y>h|vu ewKZڳړ8K%_^߻ aO$8_w=Y6> jK>2k;&em4c-. )ﺗ߆ThGH2R}e mgwOƑ/$}uKG'_U,,i)ϖ!L{UWbB=8~ _Kz ăI &rqYpK8zd""|B`G=e%%ǂhqa\"jG+O#qȭ_ɻ|׆,Puw|%=s 9u)1͢hYSx_qqahG HU9e:>؊ d~DJ]}WŴ;_o1=xDDϬP%3zWX_yk'ޤC2z F"1++_ηo6Z]^fSy^w'zҎj˕8`Rkξz?7[_;[ܻnv;7<Ζ]L17rȵ\wG+@@1"FF1bT}m?z{>cz<‰XWb^S F ˠx&|l֖\ffG^_UE^ @lS^p[W}ǫq8;:__XMbmWFᵠi+_㳅eԟcf)ŧt!eծƅ?a'QR倔[sdez?mヅb}ԈGs9+~t*}v\sZ2= .z7n.\>866 к3~:?C{˖  EQ o˯Lyro=*77co4unQhE\ܮ[&m {ywF܊˻[Ҕi7tk\7Kw]ˇ3 p5lEo5.)EFw[^fkȜW-r4-.&bjX3:\>G9xf`D2UjW_I~TR^m R_E|Ǽ|o&?<*Q*_Q("k; #U_+T SpZ"E3Nㆇ;|⤒A ѧ˰>ʵ HNjuj7= l2@P͋gXZA8, )mW V` {eWP` d$W\c/|j-|;Ij5Fر-."<*L_n1rX&l>Eud3F-P5hŽ,*\15}j%hp>@Q5nP.b*z`V3NL]@2ٗ F׿,w? K9xF4c- Mi#VS%r.;aʿHZԳFC6K^lQ4 4 "Thߺ`N! ˃CܶKrXi|yk/ , dq^) `$ok€ ޺{Y*SF76ށr*&W( ^BPQuH\!ʳ7a0ECb\w\*2)G:mɗhYzh uef'ftލ+8(bZ=bܾ-Xϯ7^IA]h6+0 oȱѽ5|11ueTAo$+2dO*i+#-X'ɌQc26$*-FKhL4Id5bVӀHx>!K~ЖJdJd _9S&PEW> #@m75ˣIS1i+\.h)-E!s8R)ھbSWs}Qc=χl#ɝ4 Io|\_FJTRMĕDsv㿌G-/ld=ݺ۲[zQ^/pr늒˪Ϳs_2.9C޲Z~>VxrKI(Y^ߙRۿ/Wvi9wv{;[MٰݰaX9ܒv+==]%^|UbkNiQZ+R0lWNةl|mg3Gvj2a.?9չ)'AkޏĿ;r:>{m%S}vS^FWwqNjyGN?Hl*%7J|W*Nq@eM$mvF,ڬeUU)dCqFYhq*0 XmI0N2fOY@Fc7pqLIc"UhzN >3#xf-Nӓe0^Fv)xld;L;;OCB^ 9>G 0Y.^embo! si̟L~1L!^^^ՇP[XT:x^C/YJ >szrtoұk\t/ 񔚞,.L$"ȓ[.iPAN*pq^ih{o˚\DI]b~hΏ'{r,[!a~ mCKC%2 ;~eF&P@ߣoJ~k>}9OrH!xWHI.]] $@В\ ˂Xywkvnr2zk;nKA%Wjk]j.Vsj6Ս*mFnIh5eW7{vt^b˕kѮoKQ$͊4mK&myrW6"EX@p0F2@\r25KBmͫ\Tk^k%juGuM͵)mHBY<ʍ+EyskylQo66Im6j$(Mf4eơIim"59%uFBv7*HM2Ifd{vDff&4"&)$DD`DF&2`{Ąiѹ\D}1;?Zڼr竍1lG5{;}ss0\R^պpe3^[<wlkҞ9+X8toc٢HU(UAFze4XwN/;Y#@csTdw^Ϸm3U,9sOzVo=Fa{vחˬS*kx=MAMmGCs6&ݻ&8[/5rԵ"~Cz*]NWp2GnIQqWKηx8;msฌAߪ$XzOL~v{'-yg[UHFK7YIgyѾf3_]7mZjbTQR.N]96\'^ c=Cwy/5}1+,~#O)"!Wjvf)ac)[O]:|X;ߢb !մ@!s̚xrxqn˺cv$7] ;i{JnX 0`bB`&c|;q2a2:RˢJX[Ƒ"x֨'V eUeg+XK.{2,,aYyizo?̡FE-u`Y+Bp2ɫgF t8sf4Oa"1u EekX,ʤ{;Z k#5OZ!]n눓a&-EIYҴeTa%3Bnq^F7oݷғy3_q?M4Akk/I%h$IћVZYw[e# ׌܅#[} "TF",.Jsߡ:oB,X=j&OċeŗhH*hG xzE(0wk r3wXI{#2l3zMgCTS4ɓKqrR$QnXy:&Uο`QOiKhU \F5Tɣe }^r ieoD e޹0c᩵ Xx&}rFnhz/q 'wG@N^{eRRz¤b!;Ƙ!߫su|b6t}Eh=Fu\[z'.^?9wk{~d6t&QBcW.$ b7>1WG z(0g&[F2e"pf)v0y_ԋ5ʌªε{ϼ&˜E~V=Z[Kp.gnCYfSWps6]/8 mx: {e *ki=heO}6{'YagIw5ʯabl] Ҭi.4S=*0j}f.PS_N^zJ>oOu{wk870'"Fbc gh;8GǯtO2A BQ Db1Zب Júz|w{~Z]U[E{Zuxjt@J۩}KVE\햛%Vt*UT8{F.WNWCE4V{}Ş4OG;; Y׏=kXZļ࿬?]}vnׇYWțd2:W KR_z Mx3V7 outi 4|4@䥲U GcC]iYZ2{e|Vln2<}/9LYg⤪v{loC>كۯ< +oWm&y粈f.fWׇi/$TDڕ+OP}_} \VSLIL'{9^[~uN/#?1nςX9^_}VBivKr^h}ǃnS2]xnhўJ",W桩ى~|>fGF)`nهE!mǾSӵs%Jnwy||4bTu׸oWxRFh09R1^bz_D4UCKhi~o{r?6㌖fWK}pnvӳy..%U>N/ڰC=u{ = `_|I5J.ކI޹8O}-ΗC}Az5twid<:YŖ]w;c,>v,_ު| 裇&fOvéu͹䠪~zM}9[RUo<pBw{y9t =n_ߟ'_*D~ ]Y-Ebb'IĎ/5-PVkkT&8L ->LUܖ~xk~%0h1?Sk/&`Ur79y18^ mSC.l4.X4jM6]w Y0S_1 IP`e%q<%ؖ:C3hpul4qw61Y15beٱQ7-gu";f 䰅3Uڢ_Ii4ǵQjn'Nb7{?brx̚uQV1&s.k&oTkUvOHt%#&h0D_ۿ~L8fU```NWbKFǟOE*~ jֺPx Mq(znPޖ *Dh"!af]Qy%a|3iA<7=?qy$&ej &{dAuGNoB}.]?`.[Ʈ8A=ώxo\G8GdV2gqmYRD?L1R\Y֑=Bb1Kۼi%:gwR9ij `zW(p;?4*WTk4JWB4EYRb-;8PS~k֣AlE e a"P`gŝ^ΥrBGzc55p0zG6Ӎ 'LȆdУf A@FfQB`Z* i<9`ގy5ꡯuVCIéη]  5>) K- > ڪvx_&&>FAx`6Ҟ<#–2d]w v3*8YЇs|L?;E+gMDkSm'Y~^߼hk ,PY }&U& k=ͫbdd`#QUC|%NgAA9gC#>߱fP2b-Wyj:^;c4oqv^^y%R|z O?5nےsz~o@Wv.fv%GAΚuW|FH/o-峅IEzy},03M-\qF=,JoA1 5Og?:קppfZ>V=N1>|한C_e=g-U\BIu(;.=ʇA><].8\zS>\n%/5ޡa4.?'KJjwZFK?D]*\_$2 u\{o\_1@{O3V~|G~oV+n /?/]ܱjWKpQ;% |Vnh>'ɨ߱]^.mf:5_n.E;TYri\b>쟮x6!_Tw ҡzuU[܁֔s qZvK898%x6gGb2%:ޕy} r69c%>/EgUxnygjuvSܷD.,Y*U~7{~1_y(·ث'suMFͫȪDH4;&4#gßh䙰gHf00H B$"ܿzr=?SfaaN,ݦeUoݻk=S5_p2<~kʗ% *6?ѻm;ݨ'*haOd0QqمɄO2zUtE5M;>HuL)jY P(5N&DL !FSPw}Β6N'4;?V=}NEQ#!'y8XBn@q]p0l:>= R AI;*>sxD'yZB?/ RPxU̽UwKVq;hMkv4&wIx.co~bAxz\Po_V֖QS9S]߲˱䢙n3BۅTչi1x@R )^g_`9/" ƿCdF 2k  /~>E+϶xқe%Tjծ:F/?4aZE*i j2Qn8OGճ}eZjj9պ}JxJ[*U,n1)bܝ^I$ء`MKI,2w)"HK !z"21EAb Bhsv$3bII 5$I ! I4Ld eذd vS*B]owX똙)&.nb7dٴ36Mf[ݒ4wZa*"f$lO]s\& ѦIEݮR#ʮL$̖m4ڍ9QQM7m6Edi XYL#PW/wLٍd"Cjٲ(`D.׺$$$i3'be Q4eI KifPcbDɈDb#; Σ&h~lT ͇pXaP."^d36&jO-dҺ=q?4ʠ},k|xiB TY_\KO*ueK&W缔 +QGW?s&Iۜb5 F69 a O5< "b4>qPT's{h.9j=&:\>$00Pץ~j^D&s)vS9;FU[f5kkU*\_ۿbH/.Wj{CڸomrHCc2eoY5urkTGq>wgE缾.G&pK9{rq G7ςᡗߚ"5Qj8$sЊoÏi 0XԿb>y*œvGn;ֱV _筨CrD"«}9f)`6ljOdm)QYg6ZHxqEXrQ4fk6\n"H{Nc+iG"'h=htGV?r~t\Iи;jq~UK7w_<V{w~ D9hɛ6p4wCީݎ,𪺠:S =c?lD6p*k+Z_&.D=S6u+_5.OذZ`sk39އ,[ˋ\A}^j:I-C"Y7fvƂrQE{t vV?z΋+mnu>/u.oU5g)3͖.SNN4KgEXeYq$ШVbU(DS"Ppt|#"#7?4'a;g; ׽wvOY5ZYz52rkp* z: tWӄ$/[2`_M 7G&keq??wSW.IfnGth1oeȿ8U=%xis8?"Ms*Dm:ix g_ZjSGoo;QYPR{bj޻ҩmS6^ K>Es[?g?(~UI갫CNx(${rlW .1# % WR }cZ:?'J9JZ0ViDX狅[qKqX^ X\RM͞J,|N#t`5sqϦ+O]?ITz'_^Zeg.DzO\ۮO߽UUdKm^廉 zsWgu2h9yfu;Ozhǹj:mьErqk{Weݗت&^mw^\ֳ3}LQSgm\XvwMsݧ}V/ӽνG=Ͽ}wꞷ(9;XDD~+ 3r{:B&MOx!Y"N& zȭ)9xy&ƒm]sЬxYEǚnGqH09{ v:g3Ys~Lڦ~AO*d&~՘$,j\}F1tʺ_?k^ɟs+ V}0P?4㵎=:J^5{Aן|7w?5y7&ˠWp[zIWn?2d DD`9dc"1@[_m=n>8u>niQk ML;aF*@ThN/ 󯄅4&4vjny9)H&R$bbQ.$Nԛi{ڣqs08-P8Ӭ$G/,7uxΔF!ésyÓ-O|DJKW|;1$Ԇ]qBDnNU-wMvt4ZNv 4d&?%gU{:="n50V*m?8|C]f9+YX[-yBcx^sv)EH|ä8XX&Øy|əmӪqX, G̠H<3Qb"fɪQapn=Hcw7nj^ |*bEbKK- ۇ0D?7$6ɔv1Z>K*ym$*mm1"& qdZJzDxNb='<~GUK^zeAz7b,Peѳ|i=qocbbx#uQ{x4Z23s|@Uc:ޏ/tamN='~}<]J1 nEy%|BMD$l|$o?hu 9QYVl*9_Dz盐!} V WB/r,#} Z~*xEZt {P=W+Rj2m=|BjUY0Q,qCbt Lx *(ŁzM;=xWJmY83=~3"P+ϒ*=Mj؛>6{?ؙ㨐1C0S>a7F>yc=k2K_Xt*Ѭ\4)ЊA6 5We/bYϿه)>؟[)́( ;*UF >pZ<|EꗚLGGsCz3dq?J舘Y.`ō X7˨Cm^ %5#Mq2I4M#ib;W ǺJe$HD)w\N3'j5Exg_(3uϝރmT&S>ukww/]>f/VlbjeT~vx_FsE />v-O^sQZyqP=sWR(˗m"/!dGy_"#)s(-%$uRY]JIM4dwS3Te!)# 6$aKMAܖQ4utGh44۪syv%wu1 JL M&0–iub0kSKJdk1HB77:DM绷lRIe+ˤĐQZMh̤̪[Se[$ٱfT\XsD{5IZ&ElElԒKfIF)$Hز+Њ[k,eRMͺZFMκiqؙ'MĔWuakaLV4D\$S^e䔤65EH6ܮd!rB:b&,(i]K%DD@1wf: mVlتX=z `<1]VHQ?ޮ*v`,NWɢ=4^*zXRsD1O\R%ȼ{<.t%9<5u{B֪Ρe]6 ,Ͷ/Z?Ϳ([kokocVZ+l*kʞ+1OnxlIG  ?A87Ņ@_& W<,^]kT`@?Xmx {߷WQQ;:|LƳOލ 94-'-ݾ8[iJh}йUhi۠a%s ˵+fYc wO&+T2n!:/qXNS\ $2Ul&:[ߢS[U׆c^&GJT0 ,>\2¶?HHU+g$„y}Vl鄔8RFLMzdr+ M@묅 fc,ugx/ӌ_clzcJ2~Hcsdl%M}R_'W;c߯~lX+F_9(<'Ekw'ǥfyf7ύۂj#n985iPϠjM>NdvzoN':,gQJm^=}?z't1:vWZc91駟Wg5K>iHФVJ7OџMgOʫ0z ӓ E_u_x+Q[kU#\_D[Tc87 C[V!d;_gǧu=Oğp1f$wRܔn"E RA HA&@%v*u%xטmQ)*nNCxPEPG!>r$jϽX[9J]LIߟ`TM=G߁d/I195b~ k^ac/c[5 %akNwUv>} D&P+ϙ^KLx)<rm~*q^>jEOז9׵98~ל~m?9}g}gז[|{ޱqPI#KiW ([-'X}w{K'{a<^=X'd{ n~v%2Qft_yݮ|A-?kb~;&q:۴1E) cIqłz1{/y!=9g %ӖaWk!bnwekeY]OݝGk~!'~y^Vy  ~6k?6RI iLhBFCTM5^ǀ؄Pm] /cA/&U$ZӋ4Ο5bLXPGB DkK]]Ov= ?{N.I`@">J]}^y~U-E Ԃ)\t:=\*AVXA9*C,Js;'6+fsm6.k,֍99pmmec=a|o~>" p5[4.mc^FDܮE]1vMh>ٛ ßm)^9#a=~rpx^}~ FN[~jdzH6 l#Bl~Utj*bh%\00 Уt'?QrU=:@OEݘ9bspK(ݻύH=ޟWxףԏGk/B?O F aMhsu7Yr/6ՊG}A/u$2j$`j ^ĝ[fA(g8 HؖنGM sGc5j.Z%5f y.J(͊i&c#bʴ [4o mQdQAXBlC3evdw$J&4*K=>(wuaeP$Vj#^&"4Zlެ撑Ź>j@lK.dž ۏ&綠jB~UΏW^JMX_O< jsʏY'9Pjtm__;jx3`nY]+Rx*o|Js*K.:v*?ᶷð_<&ϐ %s2mUV_nsSNJT>(aiÔye+!İehB_=d?ZJR_1Oprt\\ؔ*h+ͬq[J FB& {z߸~7)`@{O1GUUXW 1GWezkmy똛l5?V`$lAʈ:`Y nS N*;3avjӢlfjuŏun'31JGr)-a"8VIVBHw=}_EJwO%7}+9v+#ut^0h C,k?/`b0vycvL89 <3pDpfEcY4>B7(5L<;v}UW _zg?|JI 21[%Uɺ륿{zeu[tnevi7]]hQf;ۺMݢi۷$l)\H$%We%SP9v5hژeip˔Ewt9s7{Qd;mS)2uԙm˪E iXԦfk` Fim{YMcL<.uەtI$.IdN:.讠P zhVmf5ͤM`Y]:w,׾8.FR4h@iHhm%v\0LIr ]su˄9Ɔwvv;.vn-\New]+utNhx >}a@`ab^QI0M(G OSOBohǠ{b!.ZWtwcgIYJa[yѐ'eRD(Jq\JzR'GE==\uuhB-711F 'buŘ8lK*IxBgi{;/wp$oc&L I*_0oc&kʹe%?^{  LfӬZ}^j有BvQ7j)[J/w f~EW730lumWU~ު{n^_PM;^HnSg'tsG5}CU6?XVFPp# { ,l!rj_jתLtJ`knNzaV5/=RUr^r+1i!Xy3XMG7jʱX IvIso[A^[T**}*jU=ʊtQESR :ɴk._G9?;? ֿ9=:cpU}c_=f]}u_o3&b}?M_J8UO+ ^\S*jlvFV3*p(/S[x8oӏ&Û+#W/Z1fz>F!^qW֟Fg?::~/>zhs׫ ~Jv,\>mJԾ81=ѹI>tQN=>DbHs;v (L, &5ucΦ"i6KK>S.tKI (c'Ҁ?/umԖ`-lhX. 4`0X\J/ȤnY$QE!]_ZSw,_ʌÕ>5g*.hg_ W:qߖ3KOW*B ȹ S`L:.3NıljMWmL9.stmj6_hXRE/09y]+]Ptoȧ"1('tۆt"#mRo!(ML =n>ѡ.c3'1gf1w}}xW/s,?OS-1r1|9=s6ܪ +{SX< #JSV/3]d϶tO9}}qN|߷} bn<=xuǜ1๳|LБ+A*tCÖv^^{@[?K&JwzW6˥wu[ 4@zL/?ddVDwUP![gn 鉐P|Z]5&;#-2|2U_i)M?vf·/=ry͝5-LT]*cϷ{Mza*`I/w܊םcvk|űx<B&/25oK^/Ԓ.u^"7u]ߓGVqn<uiiync_q?U0.D r6q9_Ӽ{-9qܪ=-q @>FFQxn{^ɂeAOi^?^OsWo@TD o1t4/7q1n};FX ']cH VѶ1efB$/8S9ӠAdCڈ9 F: oBr lZDH<L{9cXGtqSrߏm2I0cWGr\bbVMU;#{Qe65`LA*[`F|/p$]U  @dA=g}/z+D!(PB @|##2 5LtMGqAͫ۟sx|ox{d=Ϸk"`Ⳑ@3[tf yRb+?!2Ph1׫ 1#i{6-"T%A\nlhf>w .cw'aF9/N?r=ꄱ-%*AE9/cBTgtI pSb9L%Hf:TdȘĖl#rWnW$DR.|0# !K_ui-65ϋpA3ssZ7J].G!. W*s^>k(.2#Ѥ9I붎9_9Y06;ޑ"-aTֲʪ1 (!YZlhMs>388pZEKLMns:&,kV ܁jgw(b#;_<4=g}8\M:ab8{؊A,] "z^m$Q,7v HZa+}s]je۪4!cN>"̪3 n%w裖bX JP֏z*x,sy}Ig [pTQTdwfK;fS--6;>o/`$NRǿ1鐡W&D$ 8lb.6ϟ̺ڿ{Mm9<ɠ9@oe O**;%UkTgU5L]sҒNSnF,䂸VK ygKJ*!.i%'BLZQ{ݶf sI Gj yxvȠG?BX*Wj:OUj.I".H Zha#@儿aEUQ!Blkbc]TA2#]+q)Krum:tݾe<ϢGY4Iʟƌ/]f^d+xJzp=j7 ٗU" ˀhQ%UV3qҁ7q=ܼ^>̽{Ûs 2^0U9Ԅ#^i A)t~ţVDі73(| LN1E# n#}ZԷHu1%㆘Í` \p߂<[yQ{`]\[d1M(SN.GF!+w{B;ګ[IlwzKWv%h!IGPݑY[w~H\v҉ rYyӨ7y_WE.{j &sWxdFӦ](?Aj|/oDXR#Mקd D=E% ^cvYb2YBPUyhBzFZ<|LY뙝sw\v Dex@*{TQB/JM)̧OS|KIVڌ:Gv{AmcDW~ѰB%p7s)@b>GtKrש|_|mE;Qq۾ƻōߵ,6?<7|1*w'J"piF#?]jV}HC*?Lh? [啬% ^a~0dMuɦ^Q B5~5YT/I znӖ~$Kg[լk5$~k,)7:9e͸V45)$iƻNtݻQQҿ0FymsicJۈ(yLM"\˝m6FS&,Jf)ɦRjJ, lmE"YddE6D]pqDIgI=ڹ5&l% F^n*cU(زM2647d 6HE*-G760]w`ͭr 4msWZ 6҄DiLQDd5hCBa(1$QFV#QjA.lewre0C]9BhDj5b#D"ĬTk'qf6U:yO:dzJCbyq"ug a4v\ k^S4/n |׿Q;>Gaٟ'T2\F?*{KVϫEӿ^6rP{>hړ$;K/` I!$x9)/w2p7?>ȭ_|fJ2wEn?TW}ylbg\{b2||/2]ޭ}]= 4;kwNw^ }G6g{ί\RL̿{W|wߋ2<ۣ5ߗwմV{?Q]NgLI{G {wY4 '\gki8nmʿ\?q~/I߳'߭*J\X_Z-V=>4׫Ԓ~\dzT'ju?:aUUC1U;>p*WZqO/MwWZ8#wSia0Ix{mnKnk@g10 ` r DD`Uz.[S~եFOki>+*M8hoLg}:~j-cs\]5 Qw4.a 6h#r:K@pf\J=Yᕟ|`H_1m^>b.~ ,3} 8O;=TF|K?hW#;N:Ij} toF&G})!=O#U[w x;kwHuJ??5V܉VyL wM\ˋ2Su#g⋓0$'*BC0FM㊢oUVlݼ(6Zy-LXe3 X!8nN9D6oۼqlZ1~boQmF4Y+6^x_cAӪ/^IyXUE캴N{#ѫ W9.: !e73`;/1lF=SIw['eN]v=KjoqvW4U4[Ni',^.XX1ի.}Koaf@_AIXK]~o$1G*Lo$?̚t5wt]s6AJWvE3DIM4DfMh-LI$J(ٳZib]!M7ZF6J[1,dW.QWM"ɑ LXIQKAa"d3isvl \TiI9D"Me"4F0vX!RLلăId'y,@"1U).ibۻ:;u_av]\'ux9;}Ӽ\qL9HZ8]goQf{|[͡>3'ߖw3t=%s=Uis8Yf[Uf??Y:W𗼲21'HBHW/^@JDVI0S> ҧdJ?b`eL]j7I6븡G+Jl-y'/KAX>J}SW&>2Bs!.i_I$dUr#$D F1x0@ @O}UI Qtvi1(@ &9J#3kwB\X`{DA$Q10Lҳ]6E7}=Q@Eʰ-*;1|i3tӒ!{9AJj9,vQ99DAge(󥲵j~{M|gn1gǙ#j"H)eX9Wo'9k'F5נ#cbN `mť:e76av-a3˸6)ֿ m^b$t:Ce9;ρszw'\;pYMfYqJ̽{XԹب ?&TqDӜk{M{9znt . 7Ry>o-_)H vmz|}ilFɐi٨LV"s n˅9;dX\vu3џ.!]+ l_K*wAiBR`4;]Vfl7cR+&K51b :M0(`n $ Ϻ+u"/??rCL 1EN!i:,Xٰs\Hdw QFX3ӻu(0nDv봦[c4m1E2% ZlҒ6@3DaW;s7d-ISmVJͥ`4-(G:V5Kj3%JdQ]b!EZL)Ye4InbUs])r#coͻ6DّAzu#F4ށ&FJ#ƋmPZ{ Q> pגWKv&l˻,3cЁCVte$HHdZ$TV䰃u#_q3n=BC(Ēr 舒,(gIDP( 0 ~ jL0o;<t$uE % ynzeY!.p5 MwQGhw+C埴L]"_l5gSIԹ4/C"8boQkx5",7 FJT}Σ`N8mK}j6b"³mt&T+>u&(B5oIUߍ>KYo#o:_b$Q *lꔼDc*W4ATbN4F.HY$?X#?cA`VQn´"c*rI bZػ!H9+rIc<Zƾ_OO~}M*~o%2o͘awW/b:g.˃sd\ߤ]Lvخm-U~"}R1/'纚{ݍ7Vwj?OÜ|uA=}z|ja_XOo4w@W}T&z$w"B'?>0q(?guYKvC}q/6Ϳc{9_>z_a_ ?m?9?Q Ǝw^Wψzk<#} ڿcX*ӏcWQ{Isx~/9Xc2̊{Tҿl z<x"#9@蠂РB .+Xg %NԢ,0Yac2HQFjdeƊLB#p#) QE1jПVD S'eAIS2&I*j(CL$ (ڃwV<4pe.79G:ԟWv˾3S`~ ׼=Iʘ 0(DDD0h7g 0`. 0ct/AϦȒ.P+#>dê9*P`QGq;GVS(H,2Sp#AВNvKSIn,P\JQfg/?MA}%ߨ?|Lj\?nuX4f@^?W?yzAzWra;hxŒx5C{9H&6oIo1nob @Q`(‚(h(TQjuT'q ͍.I0 HPpee!sR1csg4ަ'%.*!#NC=~3q8״2jOS Qi7 ?75<uN:* 9=*鵼}x .U 1Mv0l\*Yܤ3e@Sjs;M* E6; 6Z]WTPʑ  jhl:%1[ 0/TɈ?5cW0v@r1(Η :& 'Dj&xw!ٸju?fݭ|U#|" ^s) F8I3M>qf5i.O; Ƥ?'?l_0@L= '$b1ԧhk!c+{'Wq*:3'U-Nᯭz?}J}7ѯds,)Zt2ivOPۈ,6C I3 :hJGà^[Bn-1I6֋ u* ů~@ڼ6>).7]8y9LFP旲n#k3# h<[$$崌]R =G2pp./>rT0Orb$s|`-A% F,GqrpGC9Dmٽ~};{`H@8Ӥky@`&RszCDž Vݧ<##vhx+]+v4]i>6MuE!䙬3n$CaP%p xD"~/Z&OJ$Q3wOܧP;A@P I{ˆOp"~2V /ď?揜gQM:#}ȿM S|öDh{w[Er3sGە#C}1D_Ix/<ӱku}h3LZit텷mtphƦ-JN?pLs3y? k{c"1#F1 E?h.* ?GRaꠥ]v;IA' ( *08BkY쟅QZN,yON73Vw5o)ݡe фh4O6F9r)vOw/zGEWZ5ׁ!go `W`hlkvvĸ#.;C2 ~ά;AhGcC@ svc:Ԯ)$/V!'0Zm+6~/Å_yQ7|#sd[C|8xv8xx<3J`Z*m_BDc2#s)F p fDI&-EpkVz$c>~-h$ *X^ߞ*XXY; ÊRX/ub5wE MFտ! ,XMR _"J1B ] 8/tϯnd,Hqɐ8RR<=I$Yz~ cvӘgቁ=C@ۏ$GNQ.QȒ& mOw^EbTUr[^*W@I~ 5f3Bԕ9(^x0^A| /2Nɣc? N_Elw[-da[2BCI\,ʩ6I4]t7vhjV̝kV6ji%2K,fX,s]FLAunF @V*;v|u|8렇$uȸ:tq|$pfWyTGNGtw{~G|G-wp};! .u4 -FB FҮߑh׌pG.rxg9=ه'tus%ܡHsQc^BE%tI~ž#PԁI *i#Ni' %GuL`A+ذ)ߡ:f{8Um50G>Pt(ό-6ƹVq_g1pۺ鲲XɌ B?֚Wߠc_>c-+@JXYP/UT_vkg6{A<}'7%A]1ht_hty330n}Q$}WDেEaqDa#> }ƘWG.d}T҃P~_MoH}aJ7 Q72 txrtzރUEo]Nt,0ӹϟoD;\ٛa b.o6}m8;{/F|{Ծ~E| K@V \7_kRFك!~$dQD f\ۊJ6krȱMIƈ۳0h4&̔*R$%Pw2H1AQbЧ8Da D dIHɠe#2̱ʿ~35 7x|E~ׄsni$d1|j̽GLzl_;ޜ0a&3-WT{64D!O,NRXBh+XB1"rH&B/g[ت#*b/ uH#F9ͅ.UB>)+a:,, 8lpVsVbAŅ4N'"~K2&2Y$'?F!MSh9E1~z%|55tJ>P_W$G829_~ %3B&gAi᧷׍qMFPsE6jir| ?_ !lѦH$D:g-) Mr 8Q~sLM'PG<+!H:~ )컩{Wt{~tKttRAKP7q?7MC$uz̯A'oRUQfki$&+y lZ/M]:};-;o~~ۜa o͢j-~wߗ]Fr{'wʧ щV5g]y.UQpkܟ5QtZ焲9BSLH/q-WtΚ?9WȪDnLd/%l@ރzIY[mZ) :u&GGB%84:=;:N'`E;?k^E^"'??rKBt'B=pN~\{^>^fF]'1Z}n~ƤݯU;w|osG 2td=otku ^hn<<ǽ72`cR!00#ȥٴxe rM➿Bʬv^v'-#ğ$A(`>uE䚣R4{ߨQ ? ˹qȠvoғ4 d0={zyu:g'حfZ`> B";/~NDhtJZz[%\{zÛw-9)G,;΍<7"Aޢ }WXiSeYV͙#>ԁГVCpB=ƂvcTƾ|K`vBS}Hd9UE}8 ;Nv+]%KYmR^oy5l߰|dtr=-)K_:ErQwQV%!дcVdhPy9IVU', kxϣUl+ G m4s:.wN_&/\sTJHG %I"XjD0Ӆd+6 lؖm(Ab`.`G#tz/'3a^`?_A4~ ]Nt)I 4jQ5ذC;3!&2I2]7M+,H@1 D@-ƓE%Ob;y^a3!UߒN&grovt[wb6ofδiu.Ke>z3WS-C.u8XuHSĜ$ p1YjK^Ev|9NݯDbK{^\N<)t<1/c sఇDiyéDc1ɄK#U)Ü22)_ ] #77P: sH&JoH ,GHQ7AΫ0{#V$"ߘjuH9ߡU$bpr ԉGN2pE N ɲѢjm HooOY榑uЃkEٜOTq[RO//ql&ͤCI:MtAp_G[<>Ap/pc1}x?_glvF߷ia \WRPgW A#IE23)L2vf)YH6Y44eˣͱmlkC)L23X+?cKm=u Ab;.`YZwG2{Vgs3~"=/lG]PUD_N/YƧW9'Hew}!FÝ@8 bA<c"w 4جg>YqɞskYބs}E˥KE~1ˣ %U+g{G7!?;,> F _2d~b_SGm,bu0|>Ck0%/_>? m'фm܈L+n"om -^gU>=!Ԗ?z{wޛ]o]O? x9?o5y]o/Vs'|U8f-_.[QjVHwKc\6 M5;auO7vq_r4(C @@"p)lH~hb)C0t OAA'S>R&?. B$"J |w^A׍QV# rX?^Dx_Ikzș&Ҷ%ZZ*6ڸOXip[#@8%UID{o}볇St'9w5?Pu+qjS7ٕ}VVƈ|S*^+6{t6HtM"ZF(r* NK%!0V s0D H@: A;CT0 }^fQ QVڲD"$^IXUDKc x/':7\sZ[q=,;oG===oO= $HIk @9ȁwn>>:KFH^Wu֩P@lq? 0LQudH^_Ϫ&N'ZH4W{VߜK1k')%ƴkTm&VyRы6I˨(O>*΃DS]$;| 7[ʝ lx>H!|9j>.P^.K2u{;/ (c:^m$f?W;a=N.æ~4]Lt0O+TvN&#zHyU&@@HH.OTI!H7x퓾/.eēVzpOl1RVm8/u&-} D\+d o?oAQ~H#/+]uқGea$S[nM:GXJŇKb*(EeQѺ;u:JΒ:%NGYZDe3qjZ4;/Dw &{?dޓ}4_+RvC>$01*[>ٟoWz$,vU[܏s%=:=g1)o1s'>#%HV+UOt?AHPp 4} d?ȹ?aAPwCl?dx4>(Wi{R^p)2@ؼޏZO:*@]1AA NZ`e;$st0"@VHB-֏K;nW|~~0WG |pBUR}`Hht˞OWW77{~wRNlIYڥ~%BȮ cpdu:_+eR(L{3 @h_Ο@ëSS]Xb|]D;pϸaRp CIK=cx*~5H{M]~O[&&}TUΜݖNS⭚yzޥRqJ[ڎΪ:_0Lk;zzdc5c00 B!4@B-S<5ZY:b#JcPĺA\XN(X(pME+8+zz<^_G&1!5%>"L"? .mxҡoIA#"D<Ţb4D0mOmd7Cyp-;^y 2|6DI#$IcΧ7z?C|z<n@ǿн޻׮LM\ 2٘1]~oS:W G6'R{`j==]B5& [$AoV []*-6q |ԥJ2^^blkRʈ[)-%R--5"&N/I!I?| *~=XI$#1#;g)YZ}}ղluGSӢu^# ZH䥊KEBѺPt[O;YdrȒB&HA7~?~}Amj c#brM%&=}x/7n1z' LX~`i>Ra Cn,JZ98~I$91żƇG(qa;4|i" /~WzֲRAQ:|hKF_`sR(vӱ[ߖ֕3o,U[|_we>}sozwfsTY m*a{!~ r<)U0Ⱥ*c(ʠvĤT ~pnښzW{힭sw|/oD.=TI+ymwm~dߚ# t0aI->MñaVijSA DcDbfꙄӛgLjw>. 09@t !  h*?p~ԇ@)!$F"1DEpvS D^%햻+)z!)>ei,_85S)D)BGK@bl'F( |'y_d|ryFK3琩_˃qȨ(?N /r0LMwu8R3E2nwf|Z<#~p簃^\ H YIAOoG"UU:kސ>i)q~s|] r*(}}cIP&Y\'>Fs [sd]p_dz=NsNq}w_YEMeT2Th PLaaP^êa:r"` $B"! $"Iu :PEWB/!Hyu"E ho[R>P h<$ɳ9AG4PC9Q5J6DZ獠_p4|d)?k0c> )GXBH!IԸ=o[xn묃*FIyAնjRF0 v wMK9;k~z#d>y"dGnD #|x"5)bLJPA@j6O$ɷ~%i6]ȈDBe &3PiTyDyU` 4)$ab%Y$3y\ 2[hCԂ{0>ϡxyqԐ+$WxK'?)_ս٘Ц71UT {8SKqOk#fX)6jmtjMn6\{`y1(k:{5v3Ϸmb9r;.wMǓQ2PYG S #nņ0̃`|' P&xALk"\cbd#,.\~O;iϻvFml:uVj5j(Kf P%۷n7n䜇ggNhN8p8pķۨjV6aySwHc>6=xlPD-˻û0B{oCh@rN\Hԝ$ch_Z$]Bjjje{9u3C Mסv|<+{n"xqv<d;pUf.ffyx>OD1Db]n&[1W%\Z[agC11ז~_6}h3^z]mm$L2F_ïӌDM44oWoе,,/yxsSMx&y<_#`at|~Gz<ܻф߼߼Rw{sWoJC&55<?v/:<+l ll*ER-jW}}{/K|Z%+l;^ߞEz^/B{vg㻵{~QwMyu|͛v| |8< ;DDgxp8pu<yٝ G8_:8|;7O~9c#M44ӓq` ȫ.<[>au95.yuF;Ң%iͥ 9Ƀb'{zLI4| ̀{GD7Q-`AJ=vv][&<>oE`* |)DT(i:B/Gſ}~&(*c?7{;Pc"8Nu=>q4D$n ۷n3;^^C@M;J FLOW;D$CR AvCpnd~, ChO ' *1\ci8DŽBiQebVL,1Mi]+H9X%x._OQjH-/.o7UQ@A '@;|#Wzu8DR@ |T9CrܾzG;>'PRT߿yO=1"200yst:T{?WDNRN)6g3oWlր̠Q,r''''_oхFWƺj YQAFUرm5ܣZ&ƭyV᥈FɝPSJnP(G (Db!G DBTTBSD@]T|O:.}oǸP;$Ds/82F6g?~oW;އ7 "Cyzם}m!??Q] P=C^ vxv~'ly5l׫{3rDF@Ӥý#>".`œ%YLiѠIHcISW2~"+/p̋ýwXYglNkvO|m}V+󴀠|?PD_'ui`H+AF/yi>Oz"*a 0)c~W&_ˈ 3)UViG!YrB!W TőSL$hAiZ@_Yr)W*% UBG~!!}}_?V:E ݻ|ө>_j6lEmo=,Lo=7_=#E0n U8c;@ҁM=# E{(|jUȷH) 0H׬ׯ|SH"I}ߕοGu|_/tB0EA*X߼x?(I ?'gO>ޒRaGȉ +B(!m: jVO!{^cA(b^ӷo} v6EvD^$Nֲya=?_'>'q?#s|sMPǩ=O_O]L:穈Ar#܊DNW.z}߾ "5&Jj2yp=m^=S:{EdFvBpV}A8MSJm;`PC 쿛}='beYvz]aT1kEiJ3VT)ii(TEFf5 J '!DU %M H!i!DxcMـTp2>ECd@M6z>ˣaϽ}jV~@|'C@ 5% Pq~i(C@BC#QG-@m#l\7g1]|z JOٟr|oNKی"}8 Npib0a-'acj02u-[׆AsG4 LC&.Q ,C,]2ln_D^"` - s!+zoFqeqCkR#0p7m͸uiim4_ї3viiÛzk ~'kw}v8^[)GX#y4fgQg 0uK?/8 ׷Cd5u|OY}7~?=W…TGɊM&EtșHFFTZh7VU=c6њ3nޗnp RȾ{n@ZL5 ZA( %J2t 5GgCÏk<##_r\\rzG,,,_jZZ[>EKfͿͻzMCC~a#,6pb3 NtӰvvvvpafѣ0͛6lxGljիLk5^b6V(qRz=N^ Jja&?#פmKo<3駟eg=xUf}.K7G;f|>C~Zk>|>!C_ `7 ۷~Ⱦ6jjchs/@Zfxmw'Rݚxͩ.\]y}A>g{#5<8u=ެ0|s޸P\[#ϋz *]omvrBVGn,jA}*_[|~L-,-I}oq`$ݻy=|}^Ɠ^PѤޤ˕]J93Aը"5hZXjիY oy>> u=+eYf_>W{X|M+ϰ-M@j4Iv@TAc Lx^]xuйQ.k=NG3##~qg}JP~̺>}(y_*wB*"\y;6lG];p^c 8v}Wo/ Q Lp*D)}{Ϗ|jUTY-;oۨ*n)r>T 0ODִ|v^_vf"[nW:]}a'tPL[gYUVz \{&PPŢԠ``&$H*aHs˟|^s"uWP?@ng8DD $™h@OąOi@ U@8-(T39)*ց9 %r!?J~lP/s yP@ f[G~z0Բ qUk\4%ֵ2  Pё0QHj<) hSR/R ȧY baC/HrVs\H34KAz`!tʃ((>rQJ{1CE {:b[q9A v9*B4A4nr>6o1h ]~w4o5!zEZ@|TNfpO y<2!,뇃X>B'͖4N9g)Te@=Gя9(PU @]yX&GF" <=TSL[Q,FyCzǬ!$Vy8 ydy(nQ̧J &x{CQ| 5/=5wݧhsx:8:2EDA)bLdx8(f]줔BBn\>,O_ӕjx1>BZDZD@!DQM;T*r5deAiu4y qb3K lkSm"6)&hfB[JFYMm$ b,Ͻ]}v>,2Z?{N)̿T2Ӹ~};?`QI%H2P2!쒼v: ^$B^[iNdbh̒MT ~fG)D7ȄBD*ަmFM7ITLJ}ВK>$-gwGle ]'Z&Cyr*9S|Vߐzp(*c:e(XYv "o 0JL9Ͽcc8ѝQAV:X@< Iܠ݉r.v& 5H 8}&68U9-P$Q "HN+/ &ר~c?1: FDRiHVhh(ZqwQ1C2BҌ>H>Xs =`$dNH%; ! njq: <x QB!&[Yx$XT#I"t>yr9#C/ZCI$PQNH%((^}I5yupq缦#xQ0TI$ i}oW}M5  =c"k*0BVy^pC*z íÌCY}XIy7 ς ԁJs Hx9]K+MvJ)D ]e@9 @rL9= ]G0UvK$)@t +#ؔ "zxn(~㻍޷\Zv՛һ)g:~|^2 'T"S{0D~H8+yt-h=f*(1Ng1 <2uJ*pID``Dc!FkYZ4gDiŷNHZ{u1mKn \R09@Ă aE#>~DC <B6ϮϑI)<_}?N/T_&/A|^Z "%fX>4.zo !u'1Ljr?9 n+qRNSOA =c*A2 )ĭU6{.PdCw)CFRRA4"uȨ2<wBȕPtH*s2H녿 %p+DW7TX"5Ux?(x`DT~w٘rZi,-&RؖX0 '^&-QvP=_ZTQT^HϤ`1c g VT͕G!Gݥ ]rM&o^ÖJ LʶU"ܤ &b-7LK%OVTGGIK(ɕ31\M3][TaEii,i薱]enum1/͝Z? 5 浓 aYeWYb?x#_,5OfKkduaٴ oe[=<-Ʋ-5_IIW+V>~k~S mCIVie${vݔY|,4diet틔MW\K-[{Ɛ.jm8MUIЎQ!):|{',PE@?\ȉyMA>T?@J*,0(P^A Ee-d-S6Rд4PB"s`2 Z`~c#*(-fOw[> nQNj{Hٚ)Jhco1`bP""ƒ@HSE-==$E=(`Q )*Ā*QwE5P`QHCwXcP\Y}ZV9)JLPT&ʀj9]_U\;Ǵ48π@2˓ӵ U lY[XQD7@6 "*& 60V]Ẍ́AfQ\@D+8D)$i}#"7#:}p!a1+#k@95fiz25}A<6w|>[쫷~ńnyHΊVW ꧽ<.sÙrgUmWe3^~_ϟt:y^E'01 b 9a@!z^ z:Gw鞤747 AJ92(|zCZ&HBZfIj?yi4H,&H#(9MT4ԕa B4([oFMvWq X"rLc`S<]GfySB"( Kgϓ+&s9D@ D 钬u 7Ҳf/DoPɘ7)us{2[[e !(γQD 0"qb ZBS@Sɺr\aQx= ]g/s¢Me8D5`P_`4#0I&g=r75JP$Q,H2$Ca AK;r{iqi=+ o8/Ơ?GqrpQKJ)dc.pr$-kס2 D0a**h}2DMD">]3 y)}a^6b/`ߑ-vF"CVs#? y )/-Ð_ dP%*D KrO| m!:~A \6 ٔ 5{l4Lt^*3Ȣ5#rКͯL*ej)$8bgE('hz2LSߝu P53+1\Uv1\5A#֯X)B!@!!<}Vgf_ĜFHQ@Gfx((i` ׀(MEIQ9>kQ,)lRlLƔj]MLi [ƀ!|뻧^^ynQ^$c`<)bTR9kxTJ\ a wfkvҀE@Q>H">D=CK_O{J*kfe$k%_;wpX wK/ve{'e@R!z =T4-avr\h*8;7sBHeRbH`ڷ+] Q͉ 侀A*-}3%'d%j ^ϸ$g<=r;dӌH<#$ӽfR*1J+}~<]ŗYy>e^Þ ͡V>hhGivgKl36%%p}!8rFAu?MtHB<4< 0@G-I)>5iwD>.О;j2}%ux{=%yke7.K2uf"ihV"ZmcƹWSuk.ʁ0 s؟#? z==kگ|VQIMSީA?Hw%q DQ@$bE-كu86qIeOTL#eQS)JjT&%N=ULTrއ'uZR=D_[ap?m;v\GocjOb)F}QH>vy{,ƃM߁BxOp$ #wf=- L VTi":L:NQZ=xObK(6 ߍGHQQDL(P#T2DLD* ZiP7H("yG-Q.JKQIBY I8t2G>ztBMFRI M'R4j2n}$ЩzwCf޲96mr[ҒG @"#;ڴXHc!$SڝiE4ŭ6MI%  @8Ux  Hܥ4C$SBDUa 'k*rCR/7lµ#\ȾSIs|9M_;V(kb e% " t<:-ٲ_: _$ CيD N`8H!U3=؄B,0Bru ؕB {A y Y5!'`PI=X[&Sm)jhĵ5s|} S`TGSd\hs001:D~ҪxJE!U )KLܭbl5ZSdBi EvAiBB Aer{Tl4pA$MLcG"17b&JB$'8>!"Y~pjR:3GWd*6-N{R ~"1y~ `*@ ADP!Ie|ƒM]o3 L:#  bpR5}a~#+xyy3P^!BB D)ԔD@TlpR4I0[F'Xz .JD箿GxڀwG8\qA|{?qMjE>!"ad[˞KX>iNe&XXH;5I MrU Ǐ,qh6Jg˅XK'fCV̠$ Agd&y=o2hH>R6&k@χ BR/miqh L*t֯@4xL5YOUyCZBaGHe̗+m]iHE=[UU3mb e5 Z"th"D|Ԣy&Z'e}yР 4@=Oz^_:&r^r.DҒL󴪇(|eJ4UB WS.I%koU dEh()@("ZUGJT" .B"rVmFZE?f@P!), #($C"% BJD*AB`` a @&81+D > EăD~v* sFзBqƺL7qh'˖d٣q D'"$|OWFn Ű aB"()@ PEm.ʭUvLV b"LP& @ @T1@!.a!0!",#*# ҈D4@(JA"0401J* ,k~ݱPy C 0 BX!JWSԻvdXmj6wCkK"&HJS2@9cb*WDWd[:{V*@P8Ϊ |Dd?Wq>2C9#8I$UXS ,sE)t@ s=y-d>o7=v+?EJZ#/zM&\pvGQI+jJu[/Ϣs܎mY@[%XR[y$;yHcTCJZ`LjǦlSVG3F2Ml pK{.?@)HJ!T b r?tkG꜃% 4J4A5 Ex3R M5]66;?4R0[.Ziچe1' 8>G{EE2gHxचwBc(íT񞻨a UK3OEv[y_mC""3 Rhxoɓ"Db_9YX-MZ ]dd^XD՞ EM-8" !"AP rs뇾q+([u?ISό|C ^zh1D0@$R1 /?x%)2Zph=p}"FA9^rsϻaNY0 F#Q qTi?]P'e;`_;CKf U.hg?ъFG$tHB2r5s)EHJx(h'.w(gڪ] TŸf' 4QvTj!n$Hh[Dk(j;8;@g҅CѹTb'׊e[Y S0H"c I)Q3Č5F_2>zFn!f>?E9cRoOTK$V#Cr~xߟ_~[=Koî~)n/ït^M8IJP.yĝ4”4"fda[}.ob|_^sx<z+h3|j#k-x5* #Tu蜈d QhM]j *#5KNd (/連Z4 &>,}[s3BB-d/&+#|2i>Cd|(Yf?Zŭ#?wD|@]U;>'CiAozOƱ{(;YHn 3q }}!ֱ)ҒF(Ffu-SDbɌR z2©yP#I "/i/B+.t. \;"S.z$(a X nNv)hH=޿S]>SpxǁC<7|7N8{(_k@ %k~ĨB-]wV^չ(]2;˃~Ÿy%)"Z4>U:2Ph2D-e1pIHc壓B ٻo߾3i_?FQ8HجRah̹ r"1 @UHG}罣͖女a ئ@# 5qA\gy XXa퍠s +-/>$`Ag;\ڟzpQW氂}BUi44I!?=O%>B\%0-JFB`~ui< ikqG;½jyֈBtW:S(:bb\sd  F~;SU{هOeAٽ> }>n/x:ZH*i1{&x2#WK9s>|HsyQ|5͡c%x:1fBf1` [PjƣY4jE$ygQQ;:8ՑDNǹZr֨ be / 8`#Pl}.2v@ӝ+E9ԈKPn . 7}ɻľc{_G:qc^v^% `d@ p.`|L\APB5r.o Ƿ']N:U]`tII'%M 5=`J" DB\対NBkx~`q8cQq~j~<~On~ BQdaBgC3e_iصg 4BBG먽{x[5XS9 ~vb|B$zr|qֈ^il饪~U"f2:#Jx|`Zg~Trbċsj4FVAM(Eч |*0~SyOzbf6>Z 튻ga(>;LtʝZhC%rU,〬mMN,Nѝ$&HT|m&y-7Q=EJ ]h{_PW}C4_ie)H}Z{25i՜;%@y&k&)dp@UATM;4p iP2;$ QgQG[ x~^rEz'sHqrqa`*tqcv^c犢WWg7ZCsI'_2]_*}OB $r4#d]Az?4$yװ¡>mכ #n)mA9]gum=[~KOԎ_uVFr{OKGWx^v݉ 6'QIJus$|KM~ Li% X>%9||Mē! .! 狁!_'7@_* qdRL}X0a7CP#'?,"$k D*pj:@ԗ~q*x@ND4%L=فT"(!C,dEu 6K"ҡIܝ zH@(PQ!bXh@$5`ޔ&ӆ">H@> iUuR`xK0 eȕS/A) Gڎ%HD $iRb&RHIICWd '@'=m>{_U^\(% Qibl2^M.2 P.ܾ7y|0SOzԇC}zGdP Z0zj^kG lR28eTVDTED )qpo/!LAL  fSQua\Ŏ8qpńHDD̡3٠m2$8M '*sߨp9ye9 q!xsxMVq)6o"\XPtyN`@l9hu(QtKzh:ʟ-BLNb HNH^q@.QƐ vrw/ ʠ J0EXbB QP1LQM`(dD4PȘ(@D){(FX $=&"(TNpsʢ! G @= G̛Zfŏ@~ c{jhC~tu/y­u"(!Rrv )AD3ڈE])-pu"R I+ qbxxax" Q[9lMМ4BTi" Ax\E$!G.!NR(DK$P QY$ R2'[P1D'd>M%҂ a[)uY8P2cZLDZ,,\Y]:ߝ?cv+5" aP̃=‡1 Q(1Ei1<F{6!XWmWj@BGUA " g<? ;|?_QHP!7(RQUE@E3jJjѬ-j6j!@쯤4$ D" 00e HcFGk֗(imٙJojaRYd! RY&,1d.Sxd8LN,w~f".CcPNP X,X2lml0@2,‘RmQPo pz$JP2jAL K(Ή64."1r  E@t1`#" rF ;ؙ =VjJX-bŶv&۝ۭZF "pBi"9! 2JL&!)>?'Y~a'e2LPPߗ>9QBTir6ڄ=Rj\Tւa82d@9Ē:}DM/^owØr )kv FYx\ h |44J(5J"̊cAKyq4 #(3 ?A,CiB4CCH?,5cmkkcj B 5v2 Z$ڭIm[_/I(2M8\>G3DDWB*THulz(N=^dA iddP:>䣲T BJ8<PЈu* !# <(EX'9 9 T^:3%"SR{gB&CsO#zGaFBo|gz ~Y(Vy>>XAUY(ֱ"_f~~) >{iu!TSIP/m2R_\ʫc{nhbð@>9eSt ǃ}[QNm=ꀦEɴ bwO]P̨=m/@>?{u}u{Jt8 |Hs4PAMWQ4"B&CAd9DPg,M@D x(j2ADfzjBd96$#:hTC}I! )54o)T5R 9'$6^2"ʠhTkJ4( H",DDJQ8A3/ jVl5WTjb!ȣ`QK& ?,#(s y"mryᘘNw˔䩡ʺU' 8}c 9o"xʢ)xؐ|BP$JxMllS !GPS bd|.Z4hd2MXtGhԧ(:y޹'# F""0E,0Z}S;41S5nE?[v_j2×W@1%h ? л|ߴfKQit\~Y.//,;B |OFRDRʽC b |>>zO8$ b/P$j<I5RGnWߟzk<|\zRޞ(A52OQAĸ|D!'ې\B~0owh?p눆C"v>s;< ]ٟ\6n}O?kJ$# L#I[V mm#(&Ԫ4QLժߏY6o6uB~a@fR*\XT"` HxYKr !y(j*h4X# "xSPӈP־ȾwޚeHm}/&yZ++PT/= vl! Hɒ2IDc0O4`:94I{EN!s ~9_Û#{m`qoB!)|:'DS?g5^[URKR ZIJPͪC"g <Qtd ^ň(zG !Y&RBEKPZ'eؠܔTDyz=w'&CyA=9 !_!C@IPOٓ$Ql\k[*A!)DuFP&St4D>y uق"&:YτxS|:N dJzP(ZJCPϷif֟ AEߟ9Ŝ#O(>@DFT%48SU=wr`_iv9TlDd"sR܍QYrF\YF&1S@* =) =DJ\QtgWPut(' V$4z >a2stRqQ?(^k_6( sAC1)5)5(ε(DΠDt* @D!`r£qHm!eiB?nL"B5UiaP9 w-` ?@ C TAxŜllis٤PZQ kFYhd;RpF/_Urv~wϽmGaGO8ypJ wIOt>i 9B~FO*J>#'6Iy4A#I(12e;q!G9J@,DC8  e44#u@x`ɢU`l"2Zh\! R:gV(nlv |zx7<"ljqh@mA/P7RHLFPnQw81%:ebg'KYBk Ի_ÕF*t/Dw9S)Ժm.ʰ- 1F5^ݕ+5'\*%=Q}iKf3('%ҨhQTVE )`FpP/7C\EHccrC"@2&\,C@c$mo﮸bLA}jly8x=E*t#z^eU?jɦ ¾{8/`{eX-fb֌V 7 ta?UA_o2U7 /шfD |btplu> !O"c{_BbCԔ H  %O;>iգ9X{le<yQ{FEmRH)4r&I,A. ,ED q$bk3L2Ɠ Ȅ <%u-*P$„*o!6ӭ6"0p SJ *a>0vKy0l4Z2XoU]9b2MB 0hT.rgd^ԎI uXRN5(@CjE y`P<Β"* cA%K_sOM! Q #ᑭy@~gG?ט۲W[ QVi~ *.!fpc:BQ <C c: "> X,aL{@.Fk2(y*!r/E +`QJ4e%,͐t(_yM@>'vI\k5 ȥ0 ڊ#dp3&I"ȀCT&Bpa(x PU!@*#B )y`ApI=?"UiEjWrxȏDQpi2Ǹ,(dH{ *R=I^\j 2y M5t,8άagiZ7 *; Lp]40#bw6@#coGZ7NGd~`Ui o?0Ds\F5C0 +. ͚)پ}?kJPCj|a[aĔN2.P.X0N0"~SbOo>Ύ [uSUPjMH5Op~.WPk8+gk~zuއ{u]Z?QT\|p(_fD}wG3DL1U1,w\xRh@I vI:V<}JpO]j4 T2I$0ڥp"9éMwP}#e\S w@Qٜ" &Q:_W/.D3+vA B{!1DH9 1˼c%Izjj,G Go (nAveWy4GQ$pc2.9j96n_)2WzKnT~1ww˖j 3*]X(U4fH,"jD1Qq{%g͟xO'9D<Ϊ=c7,yO0S*rdE9rn&D9GUCB&UN%Dv"£^w ;tcY ̍xe(7ʴ68 &Pt FMgr*CaQ2/ k5 "saL%%'.TȐI":u v> 8c.E Cd>E1d_J d"ȼCARUBP*[ִXY( ޤSf^ȤS 6yV@PY2Q)-2$9Q$NyL#kd9 ( IKb6jETb]|Q^P) B&MxHo8# U*9^G!T8ҩ("R:"\<)D0f4HqiMv)5n" ̻'^zSdr`MϹnV!I$򤰮\k<(+g0Y-_qVwr#q(D`  HSTiȾW3!yEM!l( p|K.(\ǘ{ʧ5EHC$zWY )pP^ )` Kh!X@)(lQI v:.3GQtNxD?@U*X E R݁rUT%/h?(D8!Qzp6R(b\ z@zW 1c) ȩAEL? Ms))BEτ!HdJ-Ԗ:̰ epwN FDCA((cxE4|'iS(C{L s4Gp(!8zTdAaqeR4 d9"5lQpJWnX0^ ýw|R"+,"=|ޱaFxN9-i+e(rP_UG5US qx %>J" JQ6vGJXaH@, qx\Lh@rQE O 7A,JvBu=怴8̢%P @ EAdOpayXӾbGK#We/j-a¯>R!'lCNnƓz0E"42ZvBxE/@$J#@(" J(E\9BRҴ@B!K3ZִyZEZoǖ4k^CN$pрd PvrσKwb2z&_Mrij.7Պ_a91NY; ]-5AI&PH5  '2 =( wPSE{Qyg2?y2 ~<@PX @q6 숨X| )z ?E r^H ~@)9%l\Tm^!G_>OTr1}(# 'R" !'.L P>bHG`) :|XD9e_r /TC:QqkA5wZfSF3:٭~(wғ4$zׁ0 4#ƪWȊ[pZz3j4lsw C2zYzZ[ DJN!Mp<)Wp'Lyu8 z~!4?DD(j@yH?~_'LQ(DG@O* [0!'4H }b#%AT(HO^Y#{ t9*9?dNjPbljC ґ!HP !6mmU(ɩ^ ?(E;HR GljRf$!HE H0ʌ(v 5OKBG+ )Kٞ{Or?4NuL@UB @@"@BQQPtg^ϫ.2'!e(*"XR "C\@`{kbBe`@t^,kܼ'~ӊmf h2hɪB@`bb\ BbOK.D #'l7{4CD(&A"?3}䂨iteh5Kbl߲ vo촼vtG Z@`?^x =1JX芼i,[f \ݰ|'Bv"ORR.c:}mI4r`@V?֕Θ6 I_Ӆ{j!?Nfd%QJr`d|\*l5"\ L(Qr JY"@I #Vb_XܡzE(uIB|ʂ1\syFbֺo'q%OÜlEPSZUj/9r.;GQ+oqef w]wڴbjf;yHB iE9#G!3LR'_ZeɅԖo[/0{TWNP? :3 &k_jS%k xbVyDA=Sqrkw570&#*gh4IQ kA%q9kw8ٌd>5pZ-ýaya}0s$+Zœɐؐ TA+ռUN~6)|~}vA툄9l$ .`e#A aΒ !AƘ`F^ڮIО8O$'ޏ'; ~¨~$>͓ךP* !PC씒PL.>P/3v+d5 ? Cͻ!أ"q E niqv4ѿqo}w'ep˂""@Ss)Sİ}^$!|Z >l4[Ϡ$ r0" H?1yG:A*A`@; V*,^^05qok'y!ጪ":A >au @r3}/o>:9T8Jb }O~2Z0mqϭ~  r`k| TDLhzø_zZx?{#?fEE94H$-M@{QN2Jh>BQN ?@΅Tlhљ&zWsY\..%@/~~|7=]3^ TZЉ~\d/4a0s8Z5$WXȕڤGdڠekڔ PDIbt/W>31ʫgA4j> f<Ŋ@ p<"#D3-|=$/1B.$fhљ ppHc̼cҀ| ١@C=ԍϭɲxC8:"),".N(m~8 (j~n_ɀu;:|l:\ir_ `H]e\ӣc{ρqR֪8i!;`̞>Um{;0֣N6;m b>3&xrsGgY>kxe#_OvNhw0+SքdQ BP ,1i˵i p $` C0+,w[*ra+߷tsD>7|xeW|q:UQ淉\3c|Fĭw[Y6Y ΞY7dx%_]?sn7W|?oxz>ϗ(9}}/ 7GS8_Q>Uq/_.>㥗G`PVy!o#+Ge$L'+;^lH_G^B9νQ'VOIpMidiͰNNy_=q<6_>qcyN': ORٗ7nlY:ײ>\<86׫qT4%$CsFV9z#8z% i2~s^z׍=WWOe͉߁6jVtշŞSɵS۞;xg餻MqBukG?^\»pk Mi6Ko){VSCQE}I[s6WWv`xJU ow>)fT_|87k>V I̿I hoш0?J1- $-T_!CQ-ڏ;& "Т _q}ox} RXXp7O.}qo` Fp ?$ZJϋPH6f|1[ `׋qD'-$%KD?~3}ה;Uڷ,2]p^XG[G* ZZTVļ +I(P Z_~RLnV X/I(@[t?(AC 2(#FRXaKƈT$d<\D) 6*{<%TƫsO#Gjn1krH1B@wXP4˔Lõ?O;ѥKдePE&pS[Ԗo}@Җ K}RFTA#lEb V֯g@ܦSXs1«"t[-T43B=>Oƒ!ʂ6{a*?k`YvcGf D~jhG2Fl#$gs~7uU㵟ϓy,=˳=@; F"1_B|CTYO }JZbηG!WZ?zmO}3SPeEh3>1R淯'S,T h=/_d_&f՚_jўCu/c({]ow5;C?W WXzZ8YQ8 3 O4."2k-tZN_Uk{d$C{nHS2YdaxǗ,/{ G9{~SERPɉ؀89HA$C!Jyyu"92ZP0Z\bw (ټ}*0mտ{SF0U"={JZz]3\y)x(5(4k?o=?DA-U-aAYO 煛/k3&gʉ:]VݹݛS-B8@ ~ D`c6D _dt ") ZQ=68AJ Az`9HC!`@5~v{: 9bJ"C}{Xc5б/3Da%Rl%}ٔBQPBpqZ0A byD&@c: p$`F0@0 ` e8pk,͛mD]W)Ll̑}8BG :n뱤h ֶ|FX\ ۈPH$II;hH-b[P;lJ8=n%Ar0Ln8 TvlykޛѤZ*?~kGG|7k̞8pUzTƈ*C99|9\ 烀sXTu|]Q:~Ts 1<_|ǧgS!7hSKAR8@9{|H04f{L09i%2 {=Yǿr2k#'Ɖ~s=iz߶~?>5$Cvc]"1E3ˬ $D?9>3}qۃ.[4>{$l92CI_N~ _RN'Gzl+/XڠO>B`LiTBg9Ҩ*HLUU$(;,U@d fzR.ømWlML6kt]vfvk}N{t^Hx<搴>.JFc |&ӹ3?'n}soG>؟ q}+%'sVA@$ !!}4Q+yN7v>3xiRvs\l{*'I,C]IP9o:]+4kIҡ+D"}$ N?6_Ǭmye=%6HezC!hCb ]PD21WzDq&^mv yE5X:5AMJj飍t"H)xAc4BCjyUbQ t]+f"T5 w` 4!zG(SD.{.Ǹjv5CAmIXKOzPp{CÎDPö+$8#j7Dv(8f:4#OhD6#qQhwif$1:L͍0A5vALjr](*ssúғ.9RFߕW_ߦQA XB=6@. QN tesҖ* )@ a^o@@ ˫=9V "LBHEWQ  DM4J**(JzRPPx@U0@TXJ\Bbd*Jȑ[)ـ%āJ R!JH%*PE2BZP(@iD|_YP C@ B-PThUgW3֢$\QInc@M뇎QdH(Q iD57lCTbV$8n.{8DH$Mq{0 Q2"d*9˗% ""ʹ"QRdMG%/$A."6%WV71D(b&G " **""I$vDxaUx H̀]]bh%, Lk!ҍT]*6'j4D]\i#B11V*<]'!CJ%Ux qY3$hhcR'Yn*ˋLifRaHK4qQRfܒPLgg#9/E]ʻ[Yw1tc%31ARi3Ex0`EΗFft.(j^1juY&&ݶrMx0[*3Ĉ*KaΫ0jcɘhD8eE8jU*'Z.4M눬%y4ɜc4QTHtXZ,Ujn͖m2ZN&*K\fDd1f6qpEQHTN4.,/Wcuzf2hM55zVQ9ѴSR91tL$9kfI΅U]U5I,B&35Q5!iC'J(͗4b`83%Q<-mʫjus3#iQnLEZiqyJkU&]LiYafVTɮT]%Ema9͑-hY&dLٙD:YV[1TRK7u7)[ai6J2YecM4+M3Jc\U(֨ $Z4/--Т0VK#2N3X~LIdD4.f^ӂֳ8ڪ(I7*k&9[LeU35xY2ei8)zVkEE)$w9k\bLU$իɌbҪ3dI$LETXrYuj30kQXHU XxK)d&'Tff3J괻z" ܀Bo:Z=;!Z-BMDM@MATL ,CD9CݼNtzaGHvOK㛝_Sh/j t!UEryc՘3[YrzAoգ^Rm&-GC`=wɓA*ul`Lm~s.ݨoIRRM٘ &@DH94/ҿه ;i* Xw-1{U4H{mCs˩βWw^ή;FwBuߠ7v1>8?30Wy7&hDop2:xI#2 e;>H_ɏH] )b& ɄN[l*@aK$9 ]9nij m 3pΗ7uу]Vc>/s~&ۼ߾\},'f}>bD!"@$8kKWg&.Fl(AC&fyL~Y˄P3' RwՇNj&OA,n3fw:2<k>}=wx$h t:)=?7O,;#bhD=ֹ Hڛb@٦P-FMgG\ Ep z'7o񽱘!!bl/.03|y}uo4? AA.TJB]H@EKevH-|$uswD%0T4|#{4ɼ\>̟gB7W'FEh<E %"e 88E9nk%lB73@8!x恾oH~aM.?6! )׾'F$ Fok1]%`3=NQz ڌӫ0OyPzdY7 &B& WsPA;U:wE=GWӮV=MM!F@@g( qT*o殓2DzPELz- W(8كlE[=t&f4/6: L| b?`ɪB%iMBo5C%]PCqup 3rD#t< -n=.̾څ?3-bwRS&WiF!^ZLǤ39(acϛ>K|̗K@>7kI `|О> wr53de wP1g;&K0 I hWq-$0y/wݞR*=ř*Þ{nQ ϙXOq `{I2=;ecepba$zcBdd lJ`=8LarSS =Qy (ѳP\`K Y ژ4AtQ,ggW)h')K\2} "j=~ޓr> N!ĊkC(M9o1$n|kWDQ-|xDs~H@z3@|Rj,2`9.72ɑQwI˨rq"]-;5GiK t1rߚ$LhgFxX@l+geNJ>{;$?Vd^Q|Ȝ|tkƈ |0S\J 4L;aTAzk©DNϒJ|[Xs[';>5|FퟃzD_>fժ9^ܛ ZarEcmYlu/BG_QX9S2ƘH a/9CE8p3rǗŏVis)>t>ӊ|F ]Sa%5t I7m#o2ݓ.6u-5y,)Q` :vLTI+SYMn 䬌CsE$yXO}s:=5d-M"H [IVjp0B=XRay^ոۺ|gW@vv'ڑXZ,jUw`d03En0VmM/|@4U;aDq|,<Ï J`cMEZ܇P2{f{i MDhÜJ1D9,WLt:rD]NAԈrq}9˟s^I>o<ϟV x%^D@ј>82׷6{G20 R(ήOVA}k*HI=b?G:FGޥ|/{ߴg MA!RWԑ{NI($GX XDA:nz:n|%$yoh|茟. (|:4r?e*ӘNhZ/%qLg-dk8J6jNi՟mU"%IDqӨjE@18̝!:lgv'd&فFx8.gkρsׯ] {a >(q[^]az CB+0RsFO8̺O'3a6-ЁH-F+-B-ږ+1bTCIȽQYssnUOP":cנpuS P9lTn2 C:hyv=/ oe4^Pož,4A)ĎimQm\<{so4?_;> 6 !Ëhbj?;*D>=32a%UC7gTf@m6oT)߸QPn>qĻFs{u.R ^4dV=R }@JQ.QD5oQ:D@8Qhc Z H2- =+߻5KTpp9kZeܑr"TucZk9KHSˁ࿿;0<6-RPx9fOCpkEH *SAJ 0XGv!=)t:buŭt#W\k],ݻ,gkLộ<&`\1|{8;jZ5]4応r-PK~}D~p}UԤT39Jȃ)<IAe~*CpBra8v#& k]qƵҪ<@.9TV ӊsxG]pPB^=5$\a)*-NCV,7Cuh82FpxUE{Щޑ;t@ԏ|>1 \KEP^omt Y%FRվoH]3LI$x@9{GLo2Wp̒'H"3נrZI$Qyı!{!M:8n  +l @Q  otR+LIXcYJ'}{>4alB."2vPUbH>t5O95Bh76l>pf\;Asv 䩲M!PI4o:g**&Y5I׹Fg%x_lZXd:|I% W>iJݷM&8"jsFxSƲ0O q /*U_cN27 x}}wVW"Woyz]{DarL$"ĝBATv 34{4FF(|>i`B}.dT5q%B##`6G2yAͅI˃ ) b#m :M @ɥ+E;I );P5c2>p=^S3"aA)pOsćhC@4^ ȠS](EX>pyy:`8Ss1AY&SYOEi>_̐@( Xg`0C!h D!hM4 &L&Da`h?I|S0RdPje~>I˅g"Y9Rh U-)G{BnY%dƆ3$ UGAw\('dU91z69KA2r V*bؙ}.KJ5"\{VŪhdvg$Aҝ id$0.p