web/lib/Zend/Pdf/FileParserDataSource/File.php
author Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
Thu, 13 Oct 2011 15:40:39 +0200
changeset 304 0a3d0e4b2f66
parent 68 ecaf28ffe26e
child 207 621fa6caec0c
permissions -rw-r--r--
small spelling corrections
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_Pdf
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    17
 * @subpackage FileParser
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    18
 * @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
    19
 * @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
    20
 * @version    $Id: File.php 20096 2010-01-06 02:05:09Z bkarwin $
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    21
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    22
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    23
/** Zend_Pdf_FileParserDataSource */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    24
require_once 'Zend/Pdf/FileParserDataSource.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    25
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    26
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
 * Concrete subclass of {@link Zend_Pdf_FileParserDataSource} that provides an
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    29
 * interface to filesystem objects.
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
 * Note that this class cannot be used for other sources that may be supported
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    32
 * by {@link fopen()} (through URL wrappers). It may be used for local
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    33
 * filesystem objects only.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    34
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    35
 * @package    Zend_Pdf
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    36
 * @subpackage FileParser
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    37
 * @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
    38
 * @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
    39
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    40
class Zend_Pdf_FileParserDataSource_File extends Zend_Pdf_FileParserDataSource
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
  /**** Instance Variables ****/
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
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
     * Fully-qualified path to the file.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    47
     * @var string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    48
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    49
    protected $_filePath = '';
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
     * File resource handle .
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    53
     * @var resource
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
    protected $_fileResource = null;
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
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
  /**** Public Interface ****/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    60
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    61
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    62
  /* Concrete Class Implementation */
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    65
     * Object constructor.
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
     * Validates the path to the file, ensures that it is readable, then opens
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    68
     * it for reading.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    69
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    70
     * Throws an exception if the file is missing or cannot be opened.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    71
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    72
     * @param string $filePath Fully-qualified path to the file.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    73
     * @throws Zend_Pdf_Exception
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    74
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    75
    public function __construct($filePath)
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
        if (! (is_file($filePath) || is_link($filePath))) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    78
            require_once 'Zend/Pdf/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    79
            throw new Zend_Pdf_Exception("Invalid file path: $filePath",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    80
                                         Zend_Pdf_Exception::BAD_FILE_PATH);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    81
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    82
        if (! is_readable($filePath)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    83
            require_once 'Zend/Pdf/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    84
            throw new Zend_Pdf_Exception("File is not readable: $filePath",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    85
                                         Zend_Pdf_Exception::NOT_READABLE);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    86
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    87
        if (($this->_size = @filesize($filePath)) === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    88
            require_once 'Zend/Pdf/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    89
            throw new Zend_Pdf_Exception("Error while obtaining file size: $filePath",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    90
                                         Zend_Pdf_Exception::CANT_GET_FILE_SIZE);
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
        if (($this->_fileResource = @fopen($filePath, 'rb')) === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    93
            require_once 'Zend/Pdf/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    94
            throw new Zend_Pdf_Exception("Cannot open file for reading: $filePath",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    95
                                         Zend_Pdf_Exception::CANT_OPEN_FILE);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    96
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    97
        $this->_filePath = $filePath;
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
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   100
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   101
     * Object destructor.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   102
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   103
     * Closes the file if it had been successfully opened.
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
    public function __destruct()
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
        if (is_resource($this->_fileResource)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   108
            @fclose($this->_fileResource);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   109
        }
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   113
     * Returns the specified number of raw bytes from the file at the byte
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   114
     * offset of the current read position.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   115
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   116
     * Advances the read position by the number of bytes read.
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
     * Throws an exception if an error was encountered while reading the file or
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   119
     * if there is insufficient data to completely fulfill the request.
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
     * @param integer $byteCount Number of bytes to read.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   122
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   123
     * @throws Zend_Pdf_Exception
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   124
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   125
    public function readBytes($byteCount)
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
        $bytes = @fread($this->_fileResource, $byteCount);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   128
        if ($bytes === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   129
            require_once 'Zend/Pdf/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   130
            throw new Zend_Pdf_Exception('Unexpected error while reading file',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   131
                                         Zend_Pdf_Exception::ERROR_DURING_READ);
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
        if (strlen($bytes) != $byteCount) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   134
            require_once 'Zend/Pdf/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   135
            throw new Zend_Pdf_Exception("Insufficient data to read $byteCount bytes",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   136
                                         Zend_Pdf_Exception::INSUFFICIENT_DATA);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   137
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   138
        $this->_offset += $byteCount;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   139
        return $bytes;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   140
    }
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
     * Returns the entire contents of the file as a string.
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
     * Preserves the current file seek position.
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
     * @return string
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
    public function readAllBytes()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   150
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   151
        return file_get_contents($this->_filePath);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   152
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   153
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
  /* Object Magic Methods */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   156
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   157
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   158
     * Returns the full filesystem path of the file.
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
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   161
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   162
    public function __toString()
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
        return $this->_filePath;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   165
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   166
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   167
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   168
  /* Primitive Methods */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   169
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
     * Seeks the file read position to the specified byte offset.
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
     * Throws an exception if the file pointer cannot be moved or if it is
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   174
     * moved beyond EOF (end of file).
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   175
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   176
     * @param integer $offset Destination byte offset.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   177
     * @throws Zend_Pdf_Exception
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
    public function moveToOffset($offset)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   180
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   181
        if ($this->_offset == $offset) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   182
            return;    // Not moving; do nothing.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   183
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   184
        parent::moveToOffset($offset);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   185
        $result = @fseek($this->_fileResource, $offset, SEEK_SET);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   186
        if ($result !== 0) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   187
            require_once 'Zend/Pdf/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   188
            throw new Zend_Pdf_Exception('Error while setting new file position',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   189
                                         Zend_Pdf_Exception::CANT_SET_FILE_POSITION);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   190
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   191
        if (feof($this->_fileResource)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   192
            require_once 'Zend/Pdf/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   193
            throw new Zend_Pdf_Exception('Moved beyond the end of the file',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   194
                                         Zend_Pdf_Exception::MOVE_BEYOND_END_OF_FILE);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   195
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   196
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   197
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   198
}
?7MAhs?< =~Q9i?*~GJFh??7!9/폘?xQ99gOX??#?~as3?'O1Tg꟞j~W/3+Y>cm"G{<@)?+~?4e5k.$ `>( '9޾xv&$T TPig=8=3@@$Ά 0]]h2@C@ (P=7`P(mzP (TۀXΆf;V7::]=k4Qn=={,Zh j&/,`tiW{![ۺʍ+Bb^M]( w(0Tv*@@ 'þᝀ {۶{9C* abF޹ 7Kڪ_SԠ E O"=MQ AnSM׶M@1KURvRMi"j[bq@g⃠L+Nyf q=[6ԥm!E@dz=iҒL%OqfUM}U(aFϭJ"EMKfM1JjU hUs;^gUݬ_^d/v@h`D1͒@DlCMن ĆlF46gT5ђk:0kG ѯ]vW *%A +a%flBtv$5*vIV+jנ&6Ͷ^” Vw)@W]Q+ef,D@{m{YXL@hdZʠZFM4IlƍٽzJ<;T@$ XP҂ J(&̩ Bv0Sm"A,MơZfbJ jiVşZ_G Jnڛ{6ʨ练EP()*a}#wn;$U P>( /ͭD/Pps`+IH[4[ R h3j[2TK-XPpвJQp;|5lP{{HB  24 #$BxM=SOHzhfi %D@S$~FzC A@ diTT4hH$O%=)FjhѤh̉oSM50d CM" A4ih OD4z h4dh4=#L63C)zz'j& SMTl[Jp4C%`~ED\\IP c,Dbm[$L)'.y?#kҪw7SwYBa[yMf 0UJniRiJL i/-Iei,^Xɻ&'*Nc7,ض5Uo]i iO]nK]vutUUJʥ&8er`qI2NMړJ6p/}讷3Jٳ9<Nf1} *0ʓ󻎷Ԏmx?9>V#%So+M40'[Nh٣v1&b7c`aҘ+aX«f1&+V1ck>w#+UI}=Z$&'k=a(XCCPxk\R٦ѱZe[UW4Ӈx|ӥY3965!a7;F# J2UQ@ȭަ)N㓇 gc;\WY{|ٖ֭m[ dt*k;CCFC L:(Hm dE0rebDpyOQ#eȻ$;fm?;Rv,ȕ*1QJRQXtM)ULa_ 8{6S'O1TTR*H$؞!I#%U&'RM%LԨyYEIp*D0ԚB4'&'f44ya(d{;;fxXx<\|Uy|D}Lsn1*V{Jb|0<*u=jCzm6(s:d7g Mݝ͓֞)xLW,D>xn3X;ՍM枇u9&9;*S09$|Ei> jb#cNבT14p{[B|mus6U=>SvF*Z_;ؑ"GɛsT,l\lr2q,LŅPw+I*[:G30CT%7XsRbrӟ=6w36c 8JͻNx+bpEct#toH'I{d31)99}Znu ?9"oJed|nt2#\a$[IO#_VX>. ̵?|*!ƥp"~xSӾN='B(yAN<8}ƘNيù+M:GؚpU  ;̀l9rBaw4ƚ/}Ssl֦&*a]nMGSJcʬi9lWSLUxN buhكí4'%bUw1WF:7h¶y1XR|&lab(e )klp>Rr)n&K[:*EUJ毾ncoSvyݪG6ciDv6$/bsW)GhUrn*t|'%TIMryL"M8&#JE)TyҤǑqjT_IL14~vיކEk&ȑȘO:BǴz Z1i9'p t%v4S'*$!s҈DLN&qX㏠Ødf;bHx6"RwVYOi*?&T١ I9j=-̳k/b۵Ws<7s//TdkM,B]R6V- Gn(HٻĐUSgҩJNHDB[ *K.jыVƣmElv "'ҏ:a ؄a" #"XE &"6C"Xʶ4DDDDDD[6Ee%%%YY͑--Vj[6DXMT,"JBZlDDDDDDDDDRDDDDՔ)VDDDDD~3>N>V__6!!!!! E$RDDDDDDDDDE%$RRDRYIdDDDDDDDDDDDZ٭RRZYYeI5"""1DDF""""""""""'EiiYdE$DDDDRRDDDDDDDDDDDDE$DDDDDDDD%RRDDDDDDDDDDDE$DDDDNDRUb"""؊JH""j(Ib""-""""""5mII*X2"hH9"")))6*FDLRFRJ,zpƔđ1RK$RemIm6im2mMJMJeJERfU*RU*ETHHHH2ٲ"""")"""")*R"#VZVY[Ki)jTH-"1")"")""5DEEi(5Y Q=W|V8p?jIIII?}7~RE6 sߑ@bm娍IDDDDX-efkVjdM*R""""'r"""""))""")*RJJJHH""""̈"""")""""""""""")""""""ɨH"1RDDDDDDRDDDDDDDDRDRDDDDDDRDDQ%%~K1H")"")"(")-,Ȋ1DDDDDDDDDDVYYeJEIHHd*i[R*RJ2e$E$EfEIIfY2"ZiM,ȩK2,ʔLlDEfh""")"""""""""""JH2̈,ȈH""6ʋ"4cb""""(F*%mDQ|F@ IilE$EIIIIRQ)fDDDDDDDDDDDRDDDDDDDDDDDDDRTRDDDDDE%JRDDDE$E$Db""""""""""""""""""")""""""""""""1dDDDDEeII2"""*R"",ȈH"""""""""")""̪T)"&b%IQ,LTDUZ)l"'ūDDDTbe$DDDDDDDDDE$DDDDYIRIIfRDDbDDEIYRZiJ"""""""$""""""""""""""""""")"")"""")"""""""""""""*R"""""%-JJ""""""""""""""""""""")""""""""""""""""""""̈indDDDDDDDDDO:}>!mt|^N]MB@BhG [III>kުf|{`j~4BE$dEP-)bCY&PYRUOzS:ݯ,ˇcebi>äz VaoX_͛t  0ANƛW&3F+LiUUUUUUUUVX~V7T}=NCߒɄ×O͖[¨ O|=FӛHr{8w}`/я`$pSӷϏ`zX[À4 4{wd%UBuR"[8B:1ݿN3R2=忧+Pb2<4!жSLA&5mr?l5p44(`xC:~1F z%0k%Dw"=il6=  ]Ti M w2xO`}N64 cɡ8A!GV:N41`!ED)>g/iB͊'BH۱q0mclB"~CE3ˑupxmшh3A@y+ m1{߹HHHHHDDDTEJTDTDDDDDDDET"Y""#b)]w[b""W}C8Iţ=.cCwӿ}}cM'XjW&LrTjⶓ3?og/̏Q'sз蟎z_,tECgz@7< G-ۻ6,-@?#O 4M  "CC@2~ę z1nO>gTjǐyҧ C_J TdI%~o=w矱nI$$NWh' aykitv}LpxD^G'>7I'Rq8BYԶti]&3 LtE2Fx.nEML7m08(CǛz$q3{N]> m|c>/V#9Qc@Ch*hX`>tm?̈x.ς9,ju[Vb:-dWTYmX~\L2Um "aɌo7N!kϕz;ѷC+Ɯ[0IhI iᦇMW|ނ~CU^P?*{4(6ia>wPʂ;>փy='yjF1cWGh;fÇ;4d(*!ս|;;hut|n{^N >wCc79 CAcM3.5]"a>cu!CDlMuƺF1H4UWȇr}$$ X8=}&yKmhr[/TT0DZc~vp.]Qd1H4u0uviC}`ӫu9)1ۃDEOӨv7[:;>Q oU|>/Џ#/]gw;^{CnI)lW`ː9xD=O>,~Bo߾{בO+HFu}Yp7k ݋typ_s0B1c)(vz8mȇ ,ckth0a 6SXnV Q)ǽ>wvԅ>խռiцׂ;}ެy߃ +E9+:=9>J3'W d瓭B i1=JeF_0<WΔv8cm W0>. Qx|  HGr|6冠GV7+ٽ?BL!oKSLFh`l`XD"-~Gڮ\VwC>zg Mm;!`CD_PwжA0He6 tp}/#G ?S_HӢeN;ONLzt):64GO9`~>}^'?|]D5@t5y֘fσ4FD<`G 6`m#`ڇnNLJ󐄒RA@ 7r1\8CrF:/z)h )ɅCVAѷ`Ca8pwt }?ݡur[fPsT:s~GquëF Cm 1!T!mԶiΨVucMl<siRd 5xCqB8.ܙˠ6@ǰho#3ϩ!Wz's^F)vBv!bFېm4BIt~` έ4m&XKLƈ^h|N- $m"ewWaJ`'D_`NQIe&%8XdшAEm->ˡ n +}жI$I$JOqz̯viW /cZ|{6;ާPhp`e<#+!jLV0)b{Z1F!{h! M W{nQă#lзRӱ{OFz 'id 1;}/ð:4nZoVwGQ΃[=N厎7fD(V6ny4ƯE8atw^a/}G6۽ ;p'69:XpC7 0n; @S  z8maKKb4!CBi clRӣ$`4-hз(e6dZҹX/lrN&$a(ձ4#2FTQ5Ѭ6mԱ& 7'!==5r۰`elݚ4;P`v S(4a;86p4xc/~gøux;I7Ϙ{^ ͡&> t}M4 Ɗd|>GlCCp5l}\19=+WOk ;;y 1_[FAï'fpMtwCC~G  WC'46{z:Gz/1ۣnAݷ=^t,`m4%tW"(p'^Mhٍ y f hՖv]#ѡ;l WWvZxr{_Ή}o;@8xc#̄t|[4,{D{c8#Q!0~ F#ypy{P+s}m 0i>'4*EأV(1lhcbV0SOc]h`B;gm<:S\`N=Drc[#͍lQ@si慹z5!MCsi_8:9:}椓*W> sZx =6D `pbYԒcDC!q<:}ccS-l9d΂ q`ٺ bqs;UιFvNTUİ&Lh"6 H@$T!W5T 'Q\ y!Lwc-o:# An^]\nuClv1{r$ 8cDpԚL2ۗvЎ=Ha|} ti a)NJ_ƛ4}^Oݟ0xHI!:96w:=PAx9>6]CL,iK'X`r{\;498ݽ݇ŧ'96(͊!ۙo5a{:[yo~g8X鷙) ZiۗDm?;FیGWOG&_2[d 3vB0=CWsR06|{_;z3l ޥ-Px=͋-W/41!Acz<Χ7ɮ+\Vdf.1X%}ĉAF0{#i}~&^ah7{ vsv=#Ni<&NfkFuzwa0z5 /)^claMm(o2)Bɠ^N*6@By{S;?.cM> iKy!aWV59bUpU30;(2vt Lbr!MkRgًCm06F18gp?jÐġE3 =t `z =Ύm>-=ehlh+>cbz腾aCNC C#)Gucvq]FD ݲk $Z k_FF?q)aߣwMb.2;:Zl ,]Qtя'{S>|K|=è1|ÓWƅ0%9wibhxnY NrV/QlwiуN :;1i~WWGN,i/g.tp1`MWNt 52<%)Ǔy y4jGtb&ʧZgjpp;o=4=::slv>/va͏GO'Nhϴz`cH|Űz'w):l:,usѳ#|llbwVǨ=cͧ<ݻ{ǹȅsB8tcɽ^TCb9#᭺>׫1 AOG';79PY},]߃t)Mo2l=:\~Hj!>h|/ii{nziabY ؃l wrz |_{ y>s}^oh}60, g-bzy8b":Ȍ$W7=w|P(#9P 44>ᮯ萓!#+C|qfO'p6rO'4ii➅C̐NcocO 4^ "ѱS/CnhcOq:5{D}A I|<@zﮯimAّӰ6pk|L{YeJYÒRORmhU.]jӴܒ6=@:% 9[|8~ޣ~ >f"[Tࡳ TTĸc57uNEԃA {Ys!Ԁ@ *6 6fG d`5YAA'6-پ:Gh`m)~t-cg˫Ɲ-3D†rsm_3MԌP m`0wM1Źy /;\;::8B8f"i6rD0LZukxhr0QNNr~)4l>ND)ð_o@z][3'^Q==OaxB7 @9x{:6z p ym6fMT r,r6㮀&v7~N6ݏ6a{s)nױ ãn 傫L̐k:1WAnE|A%AE$2!1Q˗dy14 ?;1Ÿ|^zSu#5}ͽOUU'O)SJ_rmɚYwثvG?DDR݌it"B|<__^69tǵË*ꪴu øus ty3EA4֞n_byt:Oh=wvvk@EdU?;8i:,s|pli=i\JG.maSOkoL ZtW"pǁycsC}o)PE:n^zjFhB+E1X>Nup A!?{$1ex>/ ;:!D]Y74a\Eh`ռi;WW[oS OcJ=YC{y%3=FǪ`zCG&կc@{U2HHlq:/0PيT`9 wm9G+VRC,i7"Ngs>i8;RJp4\ ^\!;ӹ$ݰ7{ ; dɦCW(ӱ݈{y{ #; ޯ` Ki^|NAivCggwt0wxv= ;i{R~sMgt9"KWGto{AhP? |&Ç:u}\9Ń[Gƒ!w-HG.RV#.=Ԫ{z6vt^Ǩ< 3C{Fc~WFgpd#$`W">wFǮOHWWM[NiѦ5Ts2@;Gm^~4(w7;QUV{Dz0J$oc'9ơއGwf>!8?D.1԰:A~8 xK?vWND4,B<ίN=/UriVV:3wclzc\݁6$Cf40# vms]}'qrY;ʏۨ;<ׇ-ʺ:L˜:&5hӁ cÂlQRU(VNCm uwuwr-T6ʧf磫:۳óoc} n̥Q凫.Z<$߫&;ڄC,Î͍lnx0͚ܺ$s1w3{woc<n^o!w2éBA ̎k]\:×^O:!r9utFlt2h: ލ1ܼdžpt`;Zw- nӃn`= n<㻞`YUښ^2VvY[+cň*Uj1`3nB޸ˣ{e9֜p֮7[Co7f;=l8i1 10jil,mFϜL0Pe41D`DV |V/ `4T4Mɻ ,hMM8p9=,;]PC.ë:; 6<僫lh!O.֜R=X\i60r7M=XnIsmnewcob{գS$[`.SF#D2ccSwĉhpuwiKtJGr:&C@~G|:&ch[R2tim=pm  yp; b\Gt 5{;N6|>艗wyli1Oc mX# |;9\:1 Le;Ocz !!E- #;<"O&o'W#AF>`97Wokrlm~vc;M+! i72f~} ȝAkNO@d*aZ7iRO{:8sdQ:4.83 >icihw@:;8V:6!١p>:̈́ 1c T0bB6_2{A׶ 2{0[n~cyރn~;185h&dP22AρGw}4R1O24 bc6oA;|E%Ww]RMRPvng귱z%w-~cC8Ϣ\72EN^i9$F89̈́d~G<m418Cmt{1J;RTRD Ɋc 6ӆ=M49* *lɖQ4ĩcSeSJ*ҦTMқc7Q#:W2-aF!#op$N=*͚mʺO\n59X f7t$31f֖bBFr7BV^9;^mT-P@1։n#CզK1c( $6>%+6ir!1"D8v|,vuh" Cɤ84Ca gcm0CQȀa1P|l;a;p`zHQ*T\6•JREO2@7Q( >{>I35x򌂟&\Յ_m"iY[ {|i6w)G~C>LUU}SG iXٳjȺif>َĚo:Tv?UʽVʦi)-DKQ0gsС;>rJU[d {J/b},}>^,S}='BoOm}rr= s#h[T1ee(9e.uGR˃~|g9duYЙ qԒv(&懺1H `"*Ѓ8!N&LsNGP3i~~3Z`2dя[ ."-eJ =˟1TMcaUj]$(&dEZHa>ql Iy-Yک_LHV,C}Gneb޻ڶĝj`II/~_N7ߵzݏ;&4U'&bp沼Qi֧#sNXoiutə$f?wzBMuHC׌ީ(>//P m2AUq|PjvVlxJTAFh`^@7 _8|Bi\5do]kTH􇎈}̖]oBCh<r⪴8y6].˩5hl馇_ 6n(1zd:D#8=w:Y>b sD״ZybaM姯0{urI~oYcW+y9Ю־ޙx*_ȮfZa$87!&oU:юim(o칳qSd}O}F@~WyԞRwLHt$ wm> wRsS25NgevYlQĨiPQ!HӤ֝h1 #ϋ0K$a+t"LC$ґġ<2NxkRZ,C)!.PA' mLFjSKWЯtnC6Q1T8{& %Z}2J$BFfYfYs!Ub,.sNW9f/Tx#\tBNSKfq0V:ԛQ4oH4?gUr )'aNd.5ǾiOg vm)4a fɌ K$HwPzeRud%EgC)rE]䛺>VJm¯wt7’^3f>04[gnq!!($!L-{Cv~w[̏7ߗ͡|nX"Lj~-$r9a/GQ91?bu&.}gH{`m3f'"^Χ ?^0?([]2wmU:Ro[-LldbRgcgq{^K.&An˯<9/ >j.^CB-]:R2 h\҅,ybI1'8"%_e?oG=?^*?#=wի?&4=6)&k"_:Ӽ Sl"@huz?R~;Q7jc#,ok0Ι ;e#,~yUUQ#I $L$i)4R) iH b44I6V!]EXa?#K($/CSʼ`@1$2cldXmThg<|^9ygRdIxkIX%>eTy~urɥ;IG7o _?}[`_Ϲp*TbI D!$*@"'3G`ꉻN戛8pÇ 8Hû@]:i:pp`tI Q uw\;qwqnXnn&n+nnnWt7Mt7 `7 㣣(9SRjm?"vWX/`@a$FElةYkEFѶɴZlm3eŪ-XckJkQZl"%$DP%$RD(XDUQbb X  ,BEKTK$, ) Hċ ,Bȋ$R% IHAH,AK$,!D"*B,%XKd% B "fҩU5KSj[MeM[SSZk*ͦՕ+-YښlեilYeYM-ڔmjfZm @ &ozDw2}2/y>na]w v ^eޞW/>2 %(ۢ>3/^=oQ>qS ۤ^ݖ^vR)"d$%u/+2UmխK%:6:IKG3>΁uv|51K߫ RJ_=O>)'ѻz6Sa9H/7|8D}ۮ)|܄_^GD}D/n|u؄)o/R"G۫̽u$lۻL#DDԆ|.HPweݻL gߺ>~2Y{@bJd'~] oA|I'ӺS{uywDﮙ.#edD2'˙}! ']}&Be32h&F_n/p2Ih2R@2}~߷d)R~^:C2evHA S_~|HOpebx&@}u~S6U{ԚP >79>uHp}3 Әǀgij ۩w;/ߥg5ryx]{=+Tϼ<=Ókm۲֝ˬ?N 񎼮޻˛]~|vxz{rL㞧lT`}<Ϗ >O1~=RC3>Ovi_e\<}k_s9#}N/n{{}<~ ; -{9{w`Lqޛ^m'WiX=ujZY{ݳ>^xb3Z{dzŠOcP^Or2x/sחl4vyH߉G㻎DŽͱЩMsjuSM/m[L__vZij?&]]ٕoʯSz1cFy2x˶ʠ,0gfRa=c1(UcJ+xy|/tMū|DAfx*L>Ws>!B!*k.lhsG P05d 0Y*:3iyr7#"=Ikx#FLY`hLID\py. DQ(Zo= Vvy.wED#4qrbU ̷X .P"%0cы*`k.ЁwIRmkKUj5Ub(6YUŶVŵƫj+QkXTUFEmhTjŵFجjѶ[&تMVQƫb6*,hQX6Vƪ6hlhE[b5cZMY*-jƫEUcF-k5jSj"[E6m5TFVɬYVIѵXQL-RO*qLhBe-2J1~qPl'CۑF(L% hoLA5U@ji $͊d9U U\à\%VLkpaz:LDgm$~/xṅZWGJcgs75=׏.ح9,Io͛~hII+կ)= GdG#D\K$?(k`(ZOpnZc6Ӗ`$Z[х*-:Ӈ1\61cm9iƵZ)?|LNzW/y=&ݏ4FusM^]Mg3|Jtr 5rsGh 'wLC#g#7md!H$w6mP H# }b@vc]_ks``?cĔ쇼)W D59>wvw̑?Z0R&jh;~^pdbwZoFA"ƙ"G"jVNRmWbR%m Ãb07;j89@ʟl c0HiF=r2:>鑜gGj,F* wyoʧƁ.6MǭƜe*Lfc}%l3s8A$zO*V y^3:r}ӻQl}>ktN m6P*`dDIPmao@zغ/QWvIcЪ~*G41R$$HȘ(=SVpcm6o62DoWQFOiMM3CAKΥ5]9)[eJ6jc%P*ZfMHXJ!vjzC#_e.H2iEN3R-̹ʖ7kwwFz2\]mfUUT̶fon2ݱvw{p%Y.\ cU6i=)g\Tݚ{sr4nś 5.t\VtX"ĽeLSB+Ym˞(wUFJ쬔-u\wky͢Kj76ZY׹vr,N|fnT9;f+-asdN,f_O:]I:z=]]tjګmɃq&֎A7I,ފ2Db:Iu{F ̠V2 isL,wYFތכUzѾ/bEF\̭͙s mX14A;i[X|f<JŭiZl_B39w[[.qE3َ=tO^>뫛&p١yuS\o0wn>꾪ʮ}*]5h]62uVY\zSHYbgL͝;TۭU&ڛf`k%MlʞKɉʭ7&+.ozi VtIm,u&NdKy\Г=tF,ͣ7{Ss;(!zM#<== ۧ6pn%+4 j2JGI=rUXF(hDMrY)XS,NQFV75nk|[ Ea{Z򅦑;Ya !A)0v?:=2Ë\6xw~M2> \:68rLlmIGkN΍:B>A:=jh|"'p@5Y @- XsH;Z(Baæ ʥ7݂=CK0oQan 'cC2x2&(ij9!!P{ ~\yu vt Bzt(Dd3PuwrMv.d 9*lZ{e("}>EH @&stެ:6C&I$8gPcd,0Ȅz:H|b9UT 0nm$ó %Kxm>AOEbF1]mKeX5KX,-vnyCT9FF.ibp˞(&A )A,fXV6K[X,p17s9TަNɬW˾Xhlwc\"d׹oG+P U8: -mhsfr4d/+3p 0sy Ct0BN q%1c*C)`CB`Io3wzz+E$Su%s~-Tvn MY;I89/k&uȕ=YomߝvIYؽEAH>%WQ)G!vohuc0Sɲ{CFB"Cܞ3Νw6،SX4u8;00^y l#%L$Zl8醕PӖu KeѩIVYf{,u h=m? c@{`N k8̈};Nm|^ipdB"$?x? ;CÌzMCcUsNmm#$#TUUT$|_qju#{=$bOkiW^i\WMF)):x6͆+dѳGG&1[1gkw69~=sri_#9:͛1v:+0<7y4s !$dr  f22Y"5*{|CÎP8yԑ`yk;M֞/# ' ҽ=%90°2fd)6BŲ"x ^sLh% :rEzu#ȔwUUqD? FOh cO'C8rMLL 0H&##P6 !C#35 F I"jmCc=e{Bs{l;ckf̭pmzJAs[K=~yEVL돵7E_zDUۤ" /9(Ac@ ѤѻsV_W|_f6Vڦ}/jq%RG1 9'e) -έX_ili:"ʔ-'U3{)܊'xc}Y*Lx@fⶤ ~4Zvu=.U9Jp'g6;$!u5(d9D[t}tٿUSծ#ROJ|y4|8hۣۤBiڙ>1Uew_eۯ יφ|Ѳ>~rh_XQw'xZYvzđL9:8lZ\nFd'ъXr=|O#2+!C{ O{A#r`ĬZEz"lT @$")Bc]4cL=} S9L`52 -%p8[gcnצ{pɳ*[l},ҫUͩtlhNbdRɞ&P<̍rF2,0̐ GCupb*Gn}ZK:?6z{j9u$@tD"QCB 1 BDj`y*4h# .AbR*<&Pԩbܖa0=̇6KG!PF*LD@AHBgy n\H̱r㜉8.9ĩ7v&i]n}~gD@읤4sމ;Xt7IB>hKk[rԗt̕3uTēbTJ5&х*϶]-I\l}ӏZߌޤuSwϔV|8j;6qdԧ[JxeW唕k.x2˛Sq `! ! Vmuz*q.;Ly 1",N|pNkߡ6]2ZaG$=khˎ᧎) &et"8nsL$; tOKXtJ3JϞ*߳gS-bNO6\xgF KS]<)>* \3\PĞOsS55嚛f;v泫zm^  H30`PnLq,6xqƄ-K8O_a͆nb&`Gn>Z t|iiF|_?7:'7'ZSg z[&ND."TI;Ď}Q2Rb߹2ZU:h7޹RѲDGWE]pv{ѨrIْB3_^dG.~todwVIq"'_gwC+lvtF1-ojdnҌ+O*RF=|e&yÌ37lkbC۾br)XҢDv]H0dFkt4زd'w=˻&2MKSkԫ$Wv%jL%TLjأX&mַ~_s_~V*K?7Znι#o08^6){joU熾Nq'CI?DOZJ$8+Wֵ_U7R[efYejYeo6ֺݩUԓUm2,U6YeoWv;CqaEJ[lngUc7]U]u,4mJ)eYeJQRQE*]Bq*hP#9m hB ᡠ1H41`Ӏж $0Y)f%C%JA11ክYBPRCPccllApDRe2`\\ C ̐! d!ˀͶ lcsm)Ph t0,*V44L lqeC-i]lhBD0ZBؚ Jm2tLq7&!v<7y}_hČʔe%#dٙt2Fe]I2FIPDtCm@d## Ksmviэ E%\n!CUW lvFuV d#Q䑁LnGΊdw6%X+0 b[*EőG"wSJTUTXRV1Jn,Of%ɲRI1?UM+DIJv,"SOU"㤩$5 Rj  yOR'm b1Rn-u00aʈibd$DZ$(|!/ h ʊ] LVҪd7hmV @p0"҇,Q'lk猍|Gi0b >_?_Se$A$YQC$T9!9yO:vMCIHp&u*?"^̒B2&Lfݷl%?sl)TzLSJ$I_J!^)$sdҧMi^el8nFm'Ss4cM0ޮy//?#jH| 9Z3| 13p>2D|q \q\ d2Y2g(Pȡ .P PbE?,H&i/2fh` @و Xqz[݉N0ulj&5X:FEi"`'kgY<\1ssGrߣtӄe?} Yk'3F~8U˫(r_d=Ӗ2W}}> tcܸm۩s~k{tߍHʳWs8# "zDc]f\Zw8~ Y=Y~-4Azy}>"0} !>=Ȑ>!"br`X<~'wCgFŸ}EW| *m +L`hLA H;9ia y8aM_~|o>O i=WG({Y,@W49;OM>M#Cèwutc>ww]"=$=`&J<׹|Xd[b*Bx0y=:>NG-xz˸1I+t&:=U;ݱ @9MXlxD8{;>w Hv#gW>؀8v~70!V;>w9i:!sbֵn=EV4Z r=A )ζ乑iЎG|(|5C#WC#y)Ww'F#=k*I$o3tMF8y}C'8ǘosCLcB@=d=yӰC~!ltrM8uCtwy:9}%ssUXy=t>{F,cߑ'"CKI=&M;nXfR;ɞCCc$YD@D"@iYk˕זۙ<-N5t//t+4(VY4O^/DPMɼt]49MbU^ @]gS6;ͅU!_M'gY7gEQy4;piSMri}BRVYۋ Ku39sۙZɾYd9(}}> tcܸmDQ U#jf̳m>|0ba֓ ]Ӗjڱ p12X*Iʴ«!se'<$07/rhƵ ӑI,l/Plaz:'"{h8{X˜᥼A[^WūZٍ퍒gi 1F>"q5Q#00MALe.==|Y ilm=R飻 )VFa#[Xҧ'#"Dj;pF&=\IWBD W#"z^ 31B)VJnU1 y9p̄3^:M۰`C vc{ri}7::V #'ewz9;%i-'=|[,"*P^84Y)p[J8hxtd5[M&(\8~ýKy ܠy*Gw͆|˳xŧVYIHd-kxQ,^)~8"ӝEm xxOm 'HߙL&wn[T I Z]$>ќg)3H,-!˳hMT~Ԣ H%c..NF@(8aI$L'MNO9|9YȦğ$%NS;r#J&90*d{#B+0#, i[ھ,٧$/j80y; TWCYKWy&6ih pӎJQsD- r )ѥKՙSzj{9{X:ߐc \Ui?TF~ArJ%i09*ymyiiO:{6Q_<%+V`Dnt?I=ÃlNUL/~SZ`?`)bbHpFOW=C>0O,Y?;R̥(}3[?Ǒ-Ќ cLi 46C<ك4A"sBG~Eddy @y ֚mmm8in1cm8ic@B41cm?mm6nu rqهG.mmM6{攉'~I84շ>4_fDȠĄE]:T [MCM^^jɾ2oѼ嶷~jR-,,C{J8>'t֍h`%UW8(K#]_P{J[Rmrn{Yː_>7V⭰Tb8'u*Y,hر_/Ű*F CDlI*i.J*%w%}G;vk}׀<kZSЇFxE5:h TcpsO11$Z($R$WLOO=2RsĊP]懘p="xzיn   AىDR,J)*T"Oi99tH6mVI4 3wwI-=侻=,cami',sxkz|O#$Iǭ$ep{,hQm?cf4A诹]HG/c1lE!_a]_k˓-6/7XX2Kyv7?y%[cӳDˣFۣ3}]h`u]^F 67Rp.Y#W7_ x\+ 7OI *n2 'VҾe(Eq3L?p 8{8OWsQfh,h)oz#"P$ IRPH}iWA:ﰇ Z^.P}w; oLZ♬Dz"Cw)H떪3wuC&'>J߯_|Hѹr$w3s$_LjA@Q Tvе ̭7ZK9x\~mD6eY6MBȲQGs;0aׯc??_/?׵7קw?||{/gk?_g+'QF6uM8]upl6s.$00,.bYFҙb嚺StiYo-ҽS@B2E5SpZ"#b Ȍ$EvW)8 PmFEjNm6x3Ei*L(e u%]LŘB•EGT?;"<+ZOElRcO4RWiE:13m">#XKO3h w20rb9p^S%Q:tc\n 4c") &;oZz*ClF<CP믂0Ӡr%ghu8zclTߞ!ypެ u6_P9Bu qwGt^yvҌvL!萁!κ <眼#< H$$D".JXkLPf4hhKM*ƋKJԬ˱/dǢ/(Fh!%]cj6PaAHRHi+ kkE YS3XGw.fvkP:9m@Dt$c. $hprDlv %!oko|ua l6C;tjjʌr(lrq%4 'jrzq1!^97k`c$C`3DE,FÇ7oUdT Ab"YZR*PB(DqGnJNQERQIM~r7CQ)4Sg\I$vϾdDߥpf1xM^ R!OP9( r#hXxNZ#yn$[Q $@OԠ%"/D_>y?u`Xϣl.QrV~a")ؑ*JK,QbIDߌ` . >hM HE*%Qfe朊&*Gj{\=?駤tɈH7 ...( ?de|Z)xɥ^,ıTD2Ki3HE:H @GLTSU-(D=w!vjL&BSrS嵈]a! !hhNAX4}xqո4CUǛL-9RCeONaĘӒySh²+.q+3WWyG][Gt&e*<1hRM=vi2 V\LVn@LEF.m99#B2fd;DDZ=͇mq!݀bU1Պ[3cƣFmF-ch~/V=/^w[[5恦i ,QIIe!܀o30^Uҩ6/Ϳ6fs;AɚQ]ܪ;00Ufޏ9|?N&1N⪙,*;=ky?n|ji_ojgl#'\p?KyEP%g?ֈPG~oj:B.hx3pfJ1volU]X+QXtƆ.1.\b4h 09Ocgh!QL :k-TV1I>$ʶ vCJ*f0|$'MLV{Q3We0€6ڢdadڳec5%GӣW1+nvC[I[w"6*[)Je+omqbY  ;~p@O֨wDV"uNx I(AbXqd=u,<c":Y[_7s6ۊ]~|+ߧ7!6Rizt;J{{yݍ(HrR$g^[o>wJšUwhUݚWbnwgn\t!I+xAEіdZXքɮpf44!7CVwa \G)luW.!.ċR*;$P]Yj.Ta͹MvU5}糽SǵQLu9ktJ,r!U}z馓~c+SLd7f᜖S#" LRƃ.I&Lyҋq9 eh"[T܌2VwRy%٦fG(xN蛛t"}]?>N$`#"ffd̹(c*EUVX~C^]eغ] KQml:by:˗B]`o\_!IlTGZVM2_#rlq^\[vnXr_v@4u H; Q:Θצ1Yp920a0a5a0c&S&QLS&QVLKm-,߯*'@u< 22'T@ ^;wwC7#8L{92e2e{a0aCЈކh[ief 8) By{l(;022P+]kxpdݏG04m۰۲=-BU!# "=C7'/jFڃ%_}= D(J9`p".pMRv]* qϟQ*]I$vJH )GUɽY*tM44qQ-f?$ae`Ddmk3*wfF xC Z=R#'A9U$ղ|}+>SZ2HJ!A Z9Dꔜ :f\<5C& ֙CAh+&fI.6Q J8v\`KCZƔkGSD'`S!˫489`_ Ӫuocau7wsCJM*I|+Mwbi/3tR*]SwJ=9=#ǽ,JlQ;U^CQ)yu[ U $ttuq <3=~MJdE!rPԕkfHG&1N)_ ie(!יζ^BIaP$&"XCItT"Ĩ+.]݀[#'%J%U1SqB 1Ŷ]`E"giZE6yR ʱ8U˖\@PI aѐH[1O]T,3(:2IW4uA3??9J'((' Ps@EH'b!B\B bIVXEW-ZrkD`AIP$?FF;"L&H)Nv MiM);c,t(\m #)sM fItaE&THҲ 1J}*s\jka" .НG.]Jr_z!Ni:VkcarP {ޞ=6g:h^U1TfW0gMnI}~&P$H 3 BR׹䟆$|\;rMJffS[*!]>bhED%zoծDFߍ~7dQ i'5Y*72B#   yѹ'6Q&㌓9Yrilu,avt87ҟ,Mب_Vh+w&D,=WtFÍ`깼ל [sŋC躞A`p c?ȈOރ܀r"=m!9*IE !g1||"1dCe Js`z DtKNˠC Ht<vB"㍌r)c)"tM?,ꢻ^rA!:bFqz*UQA\kOuCla2MNr& :Lm*ڻ0r ;Z:97psduzS|]|5: J) DNNª1N"2LVt)Bĥ2"ɹHkfv8k[n*Dü=8GZ(* Hp@TI4TԀ""BA!$\jmd*h\¡?Gy =4BK&d RjU'}y1"u(r<3HXдdB$xĔ*ޅТ%8HD~{BΨ LޚtIbcqp:9'0 G 90,E+*f[$ @I#HX*U2bm^=^<؏kXDAxXz#doAn5MzĐ LTC(D*MeS)) OI&666i32d3qg*:{ґJK] .Rhc0TXmc+ؙ9= l 5c.ycW^@z9}ؐaʛ9\P3W)/wI%dWM޻1@q<Ĥ{\9=\;vUT6og`P a(>wy3R -s132 ruD3qwn2 "tA˙ -hԩ$At#ރrox@{"z]d`ޏxJ0yYi4R!yRa Ֆ[ \ & M,27,_ZÊE* ˒p%8H%F!KmQ ݐ̂pNC&Xu& %"U\Κfqfhu<9rpr8psNwK7738" Jvn@ PDRhMYkw߈&,ui Fi= ԀAYI|?ρ(N.G͔ QEd/wI"H(m2@T̗(sp*Tc0eƃALABԓ;A>APmQ0tl-3 )IY*n5sON_ S7͋,3&9R7Kz`:Jf1fXC:O>3CSis*{$\,un[*;¼%!>\%De"=uw3,7.@P17h1n*PvdIPT 6{HfsRXc`0I2 \hM",^N4LU+R!nyb=_zyU;G ڛ l(HzP钘$'<;o-m+fЕjSf:.6_2LY n1E Pl&%K7qD[# `ӎ6J HP@P,*T!JyO`(`YJJ2RFsf:5~5!0M_=1#ww8jD|@>.&I.Ӏ`0~Ҕ @` 4;Giysw)ym_Vu@O"/r{i'iڨ 7WWMʢmsh^6UC0)k #`_\~riB5K`r eB1$A "a' f3D%D*J%KB1 &ݷ&`Cap8MtnwssQsHh%T Q C*ZR:ZUY=sox'`2AmH! 9|Z$M"V.# ejV{m=ێfJ`_*5^(]gdEHv`H@|?H,H`CQ V]"gsC1!u`SUˡ] UJ۝"TnC64;B'U ƙ 5S_\fjZgP&BxjkA_pvڛz;1c{ cId C:$y-` қ[҂uF8 4ݴ40SU(hs dT[ .A @)f*fd6 \toRW !\?Eɺحm 1J1d*E.p*8P$j%D>q3+B!lX6y$1Guf[kdd[i-bg@v 'WV̓ .(Jŕ"WT2Q7T" F#遾<4H]ID縎9JXˊdP `>J&U0]lhN«'IP)FjȒS?ěGGX$Aj'Ъuλ$ &$OP}[! 1r͚"”o(ѩ"b~ܙ&13Pa;eS.$(!&3Mhk07NA  1DQAQeUMH@%*feeѮ,u*}j}_{6`dIACWzP;yaڃ FƇ7!D%9!Th2T*35퀠]5YC$B8'X;ea'9zwM )=daѬ:wfML^qx1sDbJc<]MJ!R'Qڶzl:Cr[FGalyw|[{vl{Vy%B͋ #A#bՄլPUEٴ}"ע-x cp*< xOHiG}j"6bڇ|(lO0,l=I:بYrE_J);iv,Ǝm7+ŞPDB0IR *R.XvIL IZ5h#@DX&)B؀K$Q$"rz Um3kfkTZV3jvmI%jniB LEDZB1"r2,8? I&JNT;>338sxDɝ | cTav}I"30*LRy`$} g)3Ta5 |@>` 7VEL@)E|ig|/bu%zXGw[->VzVblw[ircf;;[s; 譛I+cdlwcMۻZw)in;Juޮ {sliYLlEWb6UMrv{bJJ>`yޮ;=/Z?;cZj/~Qi'lz.Sn^#&]jN ^zL%Hc0=L|.F*STQ_sI*nSSflu+nƕca4s+{4OѢC94 s"FGxP\C$wv6b;1Yț9^dJnTܜ+u1Ow;4NKNORTIq3hq0TL8,f92Sō?6=)cJUB!i / 9%^ςߴ-0duTFQuFֵǎzk9,K#^eϋD#6򖦜kŊTz+p =-Z*ҕ%Z2lFLڗC{@< "ϋ@D$˳ :=@:!D@nj_sԆ%E&.S'3618I(LS{\hGvPI-X%JiXWk+]Ba$kόpOI&ĜgZVlh|vZF03i9̛b-YQjvHԔ$š3wnNݭtW"WȊq~[IYԤ̪+94$6A#eNid:; fA$DяI 1簰^eI<{6OLlA1c^<|=)VӉRx;oΐ>Pr|e:/cȲt0 xU$FLi' $ODoJI!$!UtQZO$$~o=ItwZ҅{\4Jr~ WFJHE#-X8*. $$K0DA HQD^SuiIRl5Lp(HI)DGW$-S"M>nۢ;,9dCl~Exޟ/."In]TJqUR9H'V@ww@8A_pݵcE2+sW҆}GbiAQi͹|:<1]GܱHqF>$} <>:fh⳿* PvZmkCISD(=!tgCi AVG>ΝqlI@k袈 DN< \8 J~^=e)ٙ֒;cf؜q ƒ{_ۃVLT > `g977nuƧ8by!TIޤTU ĩɩ$ěTY-K4iwn&+ L2& řzwsQ@*hLV_k5諜O|_c¸"]{7cvh˃Q|~ K"`b 9pPC &UTEJI0#ȇƍTR]7Yںݻ+) *յVb#IMZrRllUTF|wմqmRxJ1yOGL!2JNC&Xb"CI¾aXWƓS6&CIb2$V*h lh1{҉. -D6DdH++(cSB#":$thHl XჁ.[ $" Q U G 6b0T-$YZ Hpr"AP?a|roxecC99,80r!,g:׉g8ۅ.ZDK%S ogrØ]N;joI0c'ozI$GDEc5S3*Ԗf2cdř's~#aiaj~ ~Rd0jdI& <~7ݫa ~Źu&pőDlJBdd o8r_G5~*笽S${Uv@I,u3n!K^Tezy˶8wsn<ϕP0ٙvt]aVq5"tA yYMq4m=:< C2H!u?蜞`|?MC -ÄùInqr1'h d̩s&ݚ (|ޔ Ey !wNrIH`RTU*6oRih32[jJ%6EwKp0b|D~p0*,䎣'!0Vx2B)&iUNI"ShtG Q:VYT~C#6nyC!.Kș`MfNLe~}(jx&*NQSB5@$pHcK1iˇaKV&&>8? ܳ5>|O3obr9h"`C8NCG6nghVaC~$d$Dbm|XPf&SjLe-yڨYy$IfMnWpmԄcPrQuæ$`Vln q`#f"A" F8SJnb+ DC"YɊԌF1 6FB H rfh'ĕS?BEw'__ 1_{EC~__>Pb1Q?@)o֑oz}kptwHRgE>A&fvDܶN!vr}IP8/@H{R?"d!'췂*(A OHJp##MQ6 cݻ+,L!dLRQIR*VHMD8J" 6V(oݚ+=/+яGF/*EaE6&i02ܙ%u<2nMEaNqv,a$i9! JxhF?(+h{A;P|E?Fe pAR?6I PbzjC"9OtQ>jTjjPTC;aDO橖%]2ɒp{_cL?y<8HaG,cf#!f%LLK!$HG9BI'ԙl0vL%W N0l#jaд2ȣ?-{zDy&V~2 U$m?0DI~"=`% '("?ډz QO B21vq!`9!T}~m-[p2o%CT0)9N9p ]ȇ @.d3%}5}-Y*$`A,ltj2ҟJ|6}D@ A M|'>#kId0YYJ|mCq_J(`X p`+eͶdm+WהTM_O>O:'b%n"X}Q2?(,өa_)sSv~ le,RZԒM&)C2o*֦G{ͤPl' V'9AQUYBmߍ>s,Ԩpٳ3:F\"ŊWF3=$4Ӏa c7&e0!EUTEg4.QH38BNs݈d ,i> N d`{ߟ{"~!qIE!H$Q'#Oy>D'`"ЇK RE^UG>Hww"<%<#S#)~RV+l$dV-`ʊ78+F@>!#ނ>9PvwzOEBR~m"`a)=Q/u;RŅT $=V=ibڊ\mK,ڽos(D ~OE;KW #01)Q:9P#{zѡ9)Xl1I~[55.өUMTffPr HHaTњ"Tњ&f\0)TU"neIA$өI$E$T@uU4 lMSRI%T DAbH~a?ykHGF~>G$6bvDcG_A՟?TTD`?Xy)OXF<H$BLD *m\?2MlE*ŖUQ`r`SdQ51CTb1C tݸ~lSTfYLc8n?2Hp!F8 5;E'vɝ$9M>m!擛%h4y-l..p\2dloqbŋ$Hm%(.Uw@APb4444.UYeܪO wNzG1ӛFFFhS˜kz:FFF#N:s%<1n:ұͿZA0cypbC'b ".'p)E%6' >dܔb WTm[!N R$9ϳ Qdd|D0j x >OƟ+5 OKdNow# ԥMD '?`5`FQ!TעEΊU?cA} t Q=(Y~H %$ T*$B(M[\1&r<ۥjhjT**_T 5Wgʊ,H9b Pb9#NK5P2Y 8qlJB6lLBQ0B˥K wNGN@6 .&K22]!2?գø!`ؔO< e JYa*pD4O~Igr*pED_*[=.؞DO݉!"H#D~?@ HH{~L񇐼؍Ņ41KM&%)I=ͥ%IZ~?@=p)}GQt-s r2Ehe 0a>vud28FJ(?cLc!e ?xODoHC>8Q"}r ;ir`g՚dj#~7' iIÖ0D0ZOs`w05v= _i|J'Ǵ#񑑸WF] ݮ44:ՍE3j811ÌSEV39i ol;:j!>$- ? ;4qM`jkvk XbmՅ-?MXrw{MFFr9gc1SG1&PIIJbH'`q[ fB(!Bvۯ]JFB;ڷ赭h:oڪ}B"D^HzG\gB!B!B[}u]q'h#ȉXOȏ "n|(U?+xN [UmUO WyurQl{ί$#2Y Bd0"%1Z S`4h=Yk6ʙB\0\r%RQIEEJ,jYWle,RYK)f]jYe,SIiMi٤i4JJJJJNں] H) a)fhAZa1!}3ȁ.gwb9!G"ke G"?DP(u8cS )ъ*b1LB􃃑Qԥ><9vΧPnOu@,$ь9'6Nag&4Kٓ)IJ~Ԙwnx"_4@(* c1,2O %N#W^sP7|m\vYӅ[0SR0ӯe,Ru<28:y'Tg~ݟ֝gקv^LA}?>bS[#ޑ=Mx_ !7YxAK%ޙD]Sl⟺dvvB_bEz?+Ck&`KBI.)d | % *5ḽ\iHXM =ZhS/+ix*+˗.\uFܭ?񾦡ŝ؃bjXal2 t}|3wN&Iw{:|~s&Оf+~WPѴ"m&6i{^ 8 hl97&6n.{86Ŝawi6a & 2'׭bY'|f dAB j^U5LJ=?c&:`|gccP{ HBL G.Y!DbMۢsum4.@ =f9IF4N.wPmmq]Hsw]p,Nsqs] ID];]̻RPKsR1tgy\ JwW d8N8mkknڽ҅V{Zz%=:N'4g'Bd+K Ox[IIܳfG}NnXN(-4I^P-@i- ؀M5 v ܀y⪯l7xSO̮nN4{UlcuWcةw305IF9}5-uYg-59Oxw5el̪T}LƪIWs #$3^7=Z,c@4II{,E#ԉ[*9V^`;Wc4ǐQhe םQX"yxda?x\Ed*|,2buڙ"0$E$PdED"?oL_TPz`CO2k~#s-\FٚaceƘdӗ~ȋu$O~b") ;lMfꔥTUUJ5{rsF\ ffdi2ﹱblQ׿vWW$%%)2T[^1[."><$JYIZRJi%=b`*r7Lkl5$ڃcQG߻ԥ^޼l8bɕ139S8t)R)K),IidRr嫔mRX-mQ4"hD382Sm{nWߗbRM6*{DDDDDBիVZlm6lm0pa-Φ&[e[2,>|sϗ5$_5lPyNǩgfe)˒Kl78L8#h>B$3b͉+VݷR[4Ĥ0x -0`Ati<Υ6Yr m[e[C#7iCc>[ABs`bsyHpQfI.b9$6uNo3DP@@a@PNh&Vi6l,l--8644fK6E>>AFDaB2r$  `B4`TI .M0䎎0<i?t+lS9Ks`H;+0}=h4:1ry?ߚoc^+g'V vmGuC1nAsC ܼ9weFOҲ1 4!ˮ]]6lFC(sF>Zrw[#CTn1z=N8r *c`f]Ҫkippa0sC:v/3[I(t4530t,r & B7i47pιkfK_IG#pe dA> Qώ0 W&hQ19V.[CJCĖ@AL%R&cبr;Dl$lu fUUz1*N bHR̖Y j~LԍPR2TX.lD:Mhr6Ǩ4 h@6ijS-WmMLa"&T?8lcc:0WC P B0dhi)AB QV"b! 1Vh B0dXB@0ұk=a1vt-sQd`;e~F>ٝJ #^C{fòs*yŶckW ʹu[O:B>' I.I&DB)=sA<nF"Q<8kf5v8 K-02]U-mS4#lSf@H )tG?U0 ;hP9& Y`2~:'<<_*>ciWS3 ۿS B~Jh }TSbc 1؀ 4K$ QlJQ4> \ئcD"*,Y$_VX٤c*Q IuEyNs;>tš ?"蟦V@}s6JtR!R,'z~tҵɚ))C&eQV)hEcw%Iۖl]s9#DaI% cH0~UD$zM>(r$o::/n<Α*y l;E9'IB_ѯd>A v h t1&hh9T:/ ,B+1}cjDc># aA0[c9@x,ip:? \ID(yfUlKXKY2"ы]ZIrN!,ZM6y@w7$c:@*`4F=SS?n} ,R0ү[-8~&: sCDǜ/)B BjnibE"X33k3lʴZ6֦dږʬm5ʹZJ[)$F,jTK4emim5MS2E%C9DL;+vjjY4-WĢd"EIjjf٥k)i2hF %I j+kj5,Բ3TV4֛ZH̤$ iB6;=0cސ{؅'~ L@rƁI6S:wE;U-*Hm,*/0A֞nF' e @4%a Y1Y,ETH0 H !?Їj{+,[2,́@WDC>@nX 9/ǨaJvsGDbCSVQ=0*=^!{QH TF@ZBРc,MFFiE p4 {`Ǫ=t 1dT l;L!huo<ϻ'`Z"JQZ߽SCbdxS5>Rz!|[&R@b@b.;gl!P -(JJJfԩjR,Ub%OY (޿q7+Lh9 -/ρ!0C`(WŎcaC`OB|1QV&0R ÚD4`K2Fv IK- +` "c}̬CMRoSlٲιIbE !ЏqPx[I8tJؓ [uJ: 2B1&GOlL-ZVeU C 0b"A0rU@@FEWU,HR*E+Lv(W@`)C>$zWl wE:%LY>iLĴUvo0=%]li&}oz&<ʒ9{y^8rW*ryݲbWRYmy-9ScR d8*jE#F  EMd_[_;; :M툓KPӸC蘝PrܩD^^9+Q3Fh2,eFQeFX͌2eQWVH;i&ѫ2]Va88͍'25Y^ G*Mo$?KbDĥ,,'EBLOL! a=%>;' i/{9IIP{M%~ېG$>ϱSBW_ i岬Mfg]zR=A2?l_lz S=$a0a˙LXG[hc?h(#D"FuCy$8!M ſԑ4WJe ih?!-.ڭq2V>D Ӹ:6в8DxКN=WjPق !|Կ&G"Hut08S 4=_"S!Oc1"FYf&DԚ%&%U,Tffee[ũfٓߚ ʋ҅H4bI"0TTK h4m ѱUZ)HhHT9Hh;瞇z'NL % h=@MBd>?,fNt gp8vC`w:*'Π)6NQSX!ݠbVedVo%41B/7nW4Ğ*2i1)`7*)F $:`'73ӣ4}3x>2(xl2z{G)G{\1|[c!)IMiNovGK$R6֙US,K7|yu-a1!Ktz Kdnaံ;j:NK˗h̀_a$W!{|#QԧrC\9YBf[4|+I5M*ڠCE>,يp0W` ;8k^fY4WjfMB2 HI xpjSYADITT`r~u@C#] 8nc,Yc`SRMߐ􍿉Ĩjz\M嚇GA遲I,qc"Em%8$~%(NJAIUҔr ʊ"&ςR E! PdbEe=h+][nmՖn0T.#Db-6ilAhKLabR !k١'$=IXGwގm'=Bspxh4H9*6QP~ lmg]6:@#lѷDE4EBcN w:@#֭?.(F" m4 4mfelA0ФbrJ,rVA 0`@0DDKhmaS UYzթںD#)6 L&PSib, MNS"6DX b M XƂ13M A[Mm X'',6:1 3F6`C lrЮMew\O-]˨ `dl 0)Nclib u i[cL`HXc@"LIk3*[bviG:!Hh1Y0dH#|( Է8 5[Ϝl\"o[ƒ$2[2d%dJJsSR hÈh75Ƕ6‡8c+XĨ"2iTM!A/%y-ԏ\.< bj &G[&@ԲԿ=n?͟ӢjX:;6<;0n6*\6(yT +_D䝡!4O'vE +$U4SOn훫qM+Ln\p 9J& 0J(w{8K NӼ]6}{M>Y^n:pbDUH  @`H1}pbA h&7VtGUL@fws̓)„I$dz_-$=Ӡv6(8a Go~3mWr:`D$-ea6"m :#aJ*׽4ZjcMjXiJ#JRJ4 xPV a m mm,ŨvWaHʊVgU}~;(uG^)t` Utdѣ 0;̄]A,#HӺ? [#CHaMF-HfQѢ55Di4&-ѠR#SZ4Fm-#mX%ab6% dl nݥp aP@Q2Ӊj1ASs'6>F؄dB=e1b/r?Oi41 1dX s{U?*iS尝X(TYIl4& ,G9#Rd2!M SD BiTZ[b`ɒETEO 1|AMGd^Np?;yfëܹC.[m у m(en? !; 0a/ _TP? * !ᦀ"WI$X|SᏚuY f!NxK,{$2$YPvY˅/#t"SĎFMZhm٣٣2cуaZ+"3hBR{'chEJ?}O߄N1B0Z{ǀmhNq;kJrsJBJ( YM;"14OjzKAl`i-i mƘ665r?ÅRph,a@tEThu!IPGɲ K* bYU;fպݻ~G>a;SblWjJSÛ2LA"ƁKH`bE2$Hi4!q#2J@L ?XBUa"f2Ig[5fd r$fhXб I KG{v1e:( " h64k(`ډ@ǣjɃl c]tC.Nutv;ulm6kZBLwCVݝ:u``H@BV1 `۫y!v`D Xb0i)nGv:1 XÆ6b `b!P=*ZMbh@0{(GF(F+dq{61Z:FݝC&SurZb0z`j1gGv!26zLm 0Mnl qR1ǒ֛Ŝo؅"ahDv;845cR e!1]^o6`brqwb02EI4ұ!)٪cHPԫ݂ ZAjloAƋlwV n$B$lKA=<X#O'hDQ\ ]תvuաx:tddZGzxidȥԡYdÝupOv8X郍{6N5t9rlJHq(2".Nf3y"$ &Հi?쯡5(P&1`G@dk쮶NGqU)TJ[,58V"SRCo);&b 8Lb9F@" ,*-[I!⌎Q$;I0ya#9v@2稛e 1)Z2%6 `Bs( %hSqRMK j4]Ǜ#%.0suHZ(g9БgX<|8cnQ7f w\ SD lCM(r&Ϗ`b&lhF  03CS.ρ ;tC|GR2m ؋C2;kZݳ-,&@-Pb@U A44M"#TQ*7M_`2H?Aw@6"{‘Ti:5[fI~m]fjVEdQJmWYd߲muh ^H40EgGt¨$*B$G(rD O)PpC-ڷYMZ`menX@ 8pdt,2@aۢ >CW5SwnF;;WNkec)!LJg:i2ÎltƆ6, p894uj;lvpGcGAGpۣtdp `Xg.)1 ucPl -R,ݞm0KH=Nv`N4{Z)Fձu2l+wAm6u6X=M١K!Q1 b95.B;Sv$q5!FM*09XTYl%iQ4 Mxwt|Xxr: 0ew'9aAhNXhu-lJCV:FB!Ffd:GA$nmuMGFZ?4hhe4cwՙ<tlLd 75z|ED_"hzza?B0`:P1աM8-\@F/x gOʞllXJY% U͕Ti64I[LE6kPH!kR|Q"2Y+p"yF1.`iR&+$!h9: 6MmCAZ`>,cWkf7m^T&\?IG8 WPlȩJAV1*[ ubֿ}icmElMEJR,Ib|1-!#$_1 Tj)-|KWKanlm[>$,&:83aϘYN$gkXe)]MLH(p@0 CT>5>>`?MEv$Dߪ# K{Qidjnt}~~_gmzc}.[Rա1%*i iNCqbmX ߆]ɬ+smA6h$6tBeR-ȣ% }&fY8/֩B?aL>jl~b4FRC>Ap4SEF*C'9G *0AFF2AȀrxDO=Sˣ """/#ȄTG3.e\8 :x hf0,n$`F4ٻ,##fhCAL`HVf]ѦvX-+xݲdoܭ*v:;k]WZW[ H@. #uƈ/$:4aj>,_FFP;f·4 iUKkݷj9ED-j*prNzM% VK" jZRUiZ[M%MID':X0Cp@Y;L>N΍# 6<ëKo`icZMH۵&rh3SPikFnZܺF8p&h6G +Cvxhc u04lУvqf4b֗8FV4%tKP),"ʹ5}/Rԕ-0[p4EXdɡwUlnV , UMH@" •%7b+Mvtb𰫚Md(2!2 G(IӀp /H5}Yh\68f@a$m e RBGp$"EU*,iմ' @'ʅeJʹ'HFGsj Ƀ?dq$qab6< MO(O1 >$J Ț\BY cc $h*m$4$, vÒ\,2z,M2G%׵2oإJRU` -Zi]FdPaBYaIBC~@HzhhA@cyTZ(TEI<#r;}9 m0I¡c o'ÍF<<ۖOZrnZi뻣rÛ6wrtGVqy;{nv-ѽ;ׇi=9AN=(N|ƙ6m+Skٷk:ڠa'=Iʷ|Ki)6NfXQ.:;Y(`Bܢ)262JM@\zF20Dtsr R.\6頁1@d,&܆"ٴᶗ]SFE&Aˑ@;A,CkޣO;ES¢"(H* H Xq*[Ef3]nֻ6v[o9" $ɂ#JSDwC'bR;N""**HfZmYjQ G"F41b6zX=VPG/,2m(iթfM,Z1C Z %XJGklc mKH$Sm4ҥklҵf6D!*fl@6M[z$Id(,ǾzQՎO8suզ .4)DS(K8M5zDeHI"1!Y?LOR\a4H!C ğ$F%eO%1)abUch-Vֲͦ-32̬ju#EGgRኌb[eX팉)>פȲ_1L7S#iefjcWt[Y[5+sG,JiVԵmٗt,"DEx4 aD!a%#T,`A菢ܗkfW{]wWc"~& MQ6{G#Nw8kOd1?DbjYodjdnflޭ۷eYݖnݚ1"D @ m(R0! Bv̳Uvnݙ[SYgmif7YS4(e"মb1);%*" pT"广6 _͵IG[ۍD<$y0Z{1,HJO#^(D_ Dg/w'JP,6M1زWe= ||?r?J"A#FY2a ' (!#Hv$=ladeAh̡8HC!;8 =:4u#?#o"AȑSx 8iSl  Wh+Uڨ$Ak;?*n~~ Ag">SiDo,HR("-?y|X ocGb4I$?~HNjO!Tw?6i +5M+FnUVi+JT*/!֛CJi"lzgPO}l`moە=/+|gՁCf# X QySrZQc!ю@#菿V:$rHG6̯z@шixv@:_E”<DԤՖI#oJ(1{DNIC ň1"PD'@Hb`1>z*~ , 99w%j+* O8%["@ !)"uyO^RMovMK2))#.n)F6b]L _)Yް~} ^;A0̱&k1nWWm5sViյyxrg29jiLіu5&]Pnj&SyN:E(%H‘($$I$Jg/.$A$IIHw^~~=?ǿ~/WPBZ^D fǞ7M%󶚄=.c#$F<pJm)=~6%2RŰXSk3kJi3ukvH"PaQj+!Jv/4N>:vNo%yVbD |gigWWAY.B޶Q5C,CD L&wɲGH͜t0qYdmX+F$2BRАC-9`p$ye`)Р6#i0BjَlVJ|}bG)kZ}- P.Gauw: @;p!@>$TzP!p"sY?ijRP䤒9GaޏTy5mßGZ@W iE%%*V02Qe$( ,Ya2bTIffYu+vmvڻ7ܬ[fkM[]6Dm1UƈƚZͷSkr9Z/ 0HO‰BRJ22HQ^</#MK ,ҙE3>$/%9Ι-y2W%v- a.Y e^"H  jA>mE[gn 2?}'yGdPGѢ5Aڥ?GD |sg~Lu-&-"X-"Ri"YdTY` K0CLa @-m7~BDЩؿRDWZ[MWMe55fYZe33T2Ylff,ʲmn[nۭ]mڳ+Sm2VR֩LSl+6efmZ6ݺݖ2fjeJ֖UfIJ՛jemf3mFm,255ZfVnrض4$ *0$J#S0O?M Ai2@9Y!WеrxWYMX$p;:Q3%12ds;ufSvL50P 411TlI h4PA5< n QP2; "@蓮%XW%IRXX&l͙bԲ!cAU0 AkodCqD^r 0]~7 %{#ہc$Hp>7`1  ~^%@bzԢhҞm[T=l@1RU}wcNāY Cy _Vi|} E"~`~g/Х0Ob|}_ĆQ? bIYC$j_BjpFJ4`0~# $$î_T^q[S?,Nɩ, KM(!O"fi&5b*BES22^L޶me2#Q8A A8Z@m`@@L+mQL".Qa1il@K(Ąv94EALl^ Gpz ygG{rmN 'aG遖_1.Hfp:׬ RUQEI)}Q8mKK?~y/{X1X%|oTCF) u`hU,YfkZYZM)3!ҕo3!XdKISm,D$l,5ji٩SR$ԳQ3Il֛B B3RJTؔA QՌn(cCllc Q#Q <b: Ōc#YQe5)(Ti -ZLJfe56ԶTD ù{(l BLbmëiS'GAád clti166461rcƆm 4(r[ :1ˢD݂H|_ ,Y [b[+#/溶&, 4j/>u>4H64дrzU>ilG\?%RHd00 !oՆGz+f'x,|R"IRKH8SoDF" AEB1XX0mw(k`:Dxu,D)m~XI?dUR'Dhb z1pŠH0i(h^I!DhO@K{}?K@CvPùIL*-jP/1?(rBPt'E]Ȟu T0@6Q9-Ukyd`F| PPOp #ỎeID6liT(uCm KH~7tU4NJʞli:["JҐ! $0OӺ|K~K 1+ Y'{vMOBGWsF>N%D5,c|q۟!ݡcXȃqzns!(`ݴ2G88f^twB8!v]0␊c:Wq: FGlyÐW.tj=jD dz1`mV rRd[MpU\1$A23@{ YihٌՅ3@m!BE0:`eo-&eyYo*b : !e!CW rUE{!&@TW"ȳD\B1-=I;G($ILH~Aq *RT\wL!Wf<vB`8V+u=B&R?ACBELc/c?p>`={0bi~$ꮏ=&NO>֫4y&slvK܈UB`X*ĊAI%XFVWm͵e-Y2Dm@PV0TdQ>dB~w4W ?iF5-!BFZ@vI&,TY PcH+2+41vTj[ڹYV[ifٖVU ,A!- Ul}laIQm3o!XEЇp8$J֖dK%s@hݦFX St͆q7–6p6z?@>F:RH$@#)PcbRݭέ%֋R60(PcOOUjJuGHHd>6O @~9$#/c>Bo}oA XD~XϘ†r:59Zxz('|+SYq<2fOy9ՒtsCPOBX@ >WMSbTXz<(~Q)=tC54&dYEB."ZK!T4<+ԞTx2mS{ &ԧe]pGXP#$,xCe531C]xdJ3fp ae|>GL?3[ V ࡦA"F #%4]b(F?u+yUo]fQޭ,,Q `h-'GWcd'QE,tr9gDM^`S:9r1<64$#֥P[e2P1O}I.`wwߵ,mRVͭ~܈VFߒ;p"{O |)C P8OZ] CL  (8UXu|T) aX٧m%U, 8i=-I4XG 8[WLB1Y  P bX?6FHH60RG%Х% dVAFS,2ۥ4?\a!:]0Z}\mt yF*Y kcDd"OEB{ِF9B997-1oej6vKvQ Rvq41d6['w&RPS`[m5n\ DFRA_@, rI^3,u!&I\GT&Q၅rhmt9*a$m8u д&1SbhA1 E;0 }> 0iccB`2? 0@GcR n>D<>tO$MrX=L#Cd(L SlX} "AwE-uh'@BG~ysv갴Su747V1S+EL+dlѺV>UNIV646(hbQCvcmh0IllhmDT!ANXګjpsC!1tHlbc`Ӫ!BkaQ iLD:84bub&XaÁD6` `@M p8cz4`AM4N(2 ,B.C 2S6-pjD``-& m4"R\LVÄ9&hJE)Ը`LiPҐ4:[iʹj0r2YTc[JA/A×#& m0!L1@dB A+-Tb`h4Տp8bcCAA lh4 bc1pdZ+$b-@( 38UTt2ܖfJ*6D*BWT b%@)<09`Rjt 6’4&J8DGv aٖ)Lq6B*9ɈG:"mb  '먇XrDi#j?t;I^=GDu &D-P h~1_D`Ch`RYa툰Ĵ(3;HdʐvT2$~IdHm,"ʐwCğ:x~4Y$C' 0{mW*_1E2 iM&K$)a{[)`-6fPˢr*R? $4 %E UPHA.PFa,,`bY%E6bIY-)ɆB[tBceıaflM$)TQ$Fc# UJjfŲ(@bS42U XdYQK- 4*k& &1S4S-7Uvi[]Fa&ȓtd7ʢ)eYk& 0~}ˉ)"")[~ưmmeafz⏉Kd[ XR<ĕ,1d$IIY)ꔲ֮ȚKeFd$ ,$0C$LH x21UƆ1݃M?v^Ӣ$ Հ+ͥC 0 xY0ؿ` GF<O} *%1Vl>O`b|; vќ5JH"C2MFU lT{rZKKSlJ͍ݽCL<*g1X 8W@{䡀d4V(dg^{GQ,PHr' SOS0cR,Fx)aR2 muWanɥ*RLFWJKf+f4RafTͳ+32JI3JHH14,TX,Y 7jO$sd أłGܠGU5tCTam1>QMC"C miҰc5VJMfmeZ%)ZY-Zf0KԷiKJv뮠5CBPQ F2XhVX "fjfVh&Jdm2# ,-00rQ #H1U%aҲMEY"ʏG\Y=qd,Pc n*  Rv_FIޓ!GčNY/t_j%$G#IF5 a4y.:IY PAlWƘyAuDLh(,Y,θ HCbmU,J*T5ZڳMMJ%Zm--i45++22TIPH F H솇qȪcfjTfU[¤jXI=*:bEAF E)@K>qGB/"D*l@ VTCLő6*H3&f&[dź>c-Kw0_MJڪK[IiamFYP=wZWW$nćT im+dm65f+%B,XD "j A EpXz(=` x;I8Tr%ZY-%$dĢ,TZTe6!RHtASDZ`{ }/̶@Vf֩fMB64$F'>e8?lY$wEP}\?qa^c ?/hw`+䌌x DQ(} y@ !RǒƔbF 14LLIQ1'Pıc16 1bc1-M4Gܷ 2f#bde ? j#>.G0 0hp[@1`"z6 4:p4H H$V$Ɓ  EJ.mK!RCPrkY")PVF ZMA`z*؁ `.ZB45JL{ ZjW-!_ $)P$P*Q Ԁ 4!l颩#%3RHi$7j7ENg1,#$Aݭ_64)M-k,ͳi)M+M``1Yyr>`kBw{Nf<5DutrjDHT8q,+DD4%(,XG!=m♈B4 Ds?QOh&DT&O*H F=r9rQ>Q$O)+j'Ÿx<:Epm Ri4O2+@k`@|I8̴.CȪOhI*y+;- 17J'{N{mX > =~c$,O)$II5:XI֕y6˝;EF F(ၓcr -D SI"*|R9K4#~J/#B#Ԡp@H"$cm1b b8>զT({*LGDeѤ( r}ȣoTt7*  j J`Y lRAa!:x@"uP :O,?"QJ[%-Tgҧ:ib(F +މ&*&L`DT 䨊*v5*YbB*QPQuHX4pb M0c)m &4iFJM[pY2v]o$魒wqܮErE[ݶ6mވ'fG1;u/Ewaĥ6j@$PZPHh>*#f"BD"B!C< !c^?'GPQ%'ryS# _SOS> m K;,Se1Jb|z~iLb ʇp ~D0CD3if*> &E<Ȑ W# <8ՌAd\@S܉'P-L>2" BB#M>3C^ۅ2qǓ,~Nh|1hX' %w>rK? Wf; j2W0@TR12` <ڑ1'zXYdeR4eSqjs(YUP P1#JQڍDd'9N=PGa"yeDeT}6xƘ(ǜU28CS;w!)09ԸTߨcrvrA tJhP!gU@l0; t IUYTl3ꐓ æSZ1OSHyXpUalZ!0e,aAh )h*I(+F4e2TCSH6z֐&];ٗ!i6$20ᙬevfܦL:7g&ft˜uCcI2*(:q$"|>B̊e4JF$Pd2 d#H~&B a6WBQA~e*(h+auC88Kb` bhBMLB}2"6DTɐMGށ',yH5YLƚ -E( X$YB>a:NDI*{#i'! D'DC XDЃRT,TCx| LRh'>wϐRbo5odp>{c=GC'tp&aCTJt'"G!>_r}$T,dRYRٕ6Mj51T,RȲQBPJH"bRT**QbbRI}&H A% Ɔ%L%i!*ȶ EAN$@Lji.-UjFb(a#eT"6 44#H"_,dAH%CjKi)%V2 M,Pll)`4PQc5DlEt0OZ<2=w?4&L-y_~ӵӆO= Ûه6eݥq7cuӛMcdN816۱+vqiRIFFE49PYnɻms"j1Ccim =cn!Ǽ j7VC`jOF!m1gwÕuWnBGsn5Me"4!$N΢h6n gDR#!6XUbh 84ӫmn\8c"{ O''"x1l %3<vO&3Ѥ9Pwcth˔;i^B\mݰZ;;rݷgf`'%ƇÖGs uxvv{^LCDwW'#iƎ8w.!hm+/kw;<;ZxcE1=nރtx#g;O&G~ݹ48irڶcQNǨ9)0ӣhm06 uyeN,D:A -h[hM X`G 6ݍV^Ce40J1 t KCVhF$|2Qy1r'D0YmA9+63 n4՝mH,Ui`'[Qx{O&'d<+7e9g qvKo:5nq{[杓ʨͰI~J" 6m<%[yPl-VBtIp z\;8 XҽfHq3L 4BO*¿ &Yȭ+f6i*ln`:JH AHVBJ 1u!1pWfᵥ64 e$@hX3~;}CEvl6tCF1ݷ&9|ÁWnM4y4ǣhGWC85ʴFYrJ C_^^ kLδ|J8lZnԪ=j:GS;҈BfDl4 FpGmG&pАT3PqN` ݳsa$´9ro3/b#ttA`fA_J C)J#:+X-p(P#V`5&Тxe D-~vغs7w=Mn|؇Ød?Cp+`ya/ΐHjI:aVU& BjYMUh0j조7&+ڞ즁T¶Ew(AjZ=dԍ yr!{A;wv#Af1&J$F-`Bnۇ.\a\:`+YQ(.sXr~J7C"f2bBDey9y`Hkϟ%ys!!.u~a-H(8i@ȆPeJ0R.٩(}r'M?Ml|H _Gdl{ 6y'q'U֑[?(1j9Tc"%[I PA3]1 ?]ʫLCQy6} 9! 5'" #DNu:䟶;;#BON ".˄ݡJ85ؖkA9yF-8hvp`9 lʌ6- iB`eMPṼ69bY`Ƿ.1 : "]L8.%`.[XӡaVU̧RKkyoYfyee]%EEK0KdT,,X$QSb62gF\,rMfRI#!).堹" C1`В: `1s ?|:Ԇ*+>fi@P) a7[;Tq6Ħh9R1ti?Nq666 —VKn40) ᄀ `CFXTz$DlXXjM,snUUU]J>)KaeÃW6R``bހ"KbA?Y +'#s R(':2#Sn'}_d6YP9Zq#푪o>OCywԀOV%$He H0W |"EPC)OBf+#!_e;p};y!_̻v =b,[agYGGvAđPI4Jz I$G{{$9EPYf-RIghEh%, *mD{S 010JR`خ}/?Vpk ڂyV)JN*;2 W}Gb#Ti^i0I~W4zw>W/@)>|Dz>7d鏽}Cҭؘsv6yU[Әpic]nZl̛*TEJX"e9V٬2jے0 )C t5aEˁվ|i]49tx.[<]y8cnΣF-ˑMpˇAguw9۾nJ6Sy6<L ethiury&&mM]\0nm zu7w"p0:X[nF:ѥg z;qJ [y- :דoY~G3utb u @@s0$̓oDH[MΆuMnI ;~[1ȓadSl{Nl##'PaJ,#ՎwQnylX7ldQJ ρ3i*id@Za@jQ֕r:TQĂ`苍cSDlPb6mj'm:6sVc ẀBct~ؼܖh լ CҔiygc Er8lCހ#Ո((N,^}Rd`+,l#9""2&ĉAIdXDC[6JKXž4ԳLcVJXKK$]'Huh ʖ22(rGtCEJr߽pj"|(=Q`g,ߪaO21-!2aАiL; uFs'YdIIDȑQڦj%[--2ڣ[dF*fYedkJVm5jj UIX)eGTӲ`'HnDTa,>0 datZ€bb4pR'ǙgSȇA'b`> a&dH璹B|rRPO8}8w H* g(*1EM9s`FXoA=iqQ*}g#0m4}=hz iH{^V+EdCGr=u;2um'0GAPQ`0 o+߫u[K3u6dL`k3M-a, Le]kT6ˊqn+ʸlF0F4l D V)zcAVDyDQ"s91,byb{gjr|6hF栘JFD tc#' n}av;1UhniHqt=dwePb,XaUl|cN#6 $cIU짋ϕNVU11ZB?m0l0B }C[ - @azg]k}UųRI cM5n[Rc"HF%]6IE@[8cDe4xIo b6Cu]|]C%QW*,aZaqA" PCW1DP̡*RBze"dJ=Jz E<_q7NsGM~^AЄáٻ-"B5xm HXհ RBCBR VʶW]x5b&E;:NdY*Y傥E! >$sO ^b&҉ *~(X0 ióֈi}T@o'niiy&#sQRRɶVe]YԖIf~U51!e5,Y(,,S&H bёdX6Uyfb5.79nJo.fY\O;7Y[uVdǕ#@6mB0`dp\VZcj1 clÊQ)0!#F$(PPWGG]O:}d:ÒtACbU`0@KTP>JGv 100V R"|gUdHԮfTȪ=U$FYZ̶ښ3-I"sic'pЦ_@6}e [n3]C҉ (3"wO$7}=)%T0)e ,af`,5ĩ"Ċ)Pȩ m*2>?:7p}A"*Xub)S1o4-%%T '6J E(GU0" -T*lm-k%))&ٶkLՕDMQCm[7 !O* 1p[t#=}kSZ؏~{W'Jy\8hՆ 9bƚ@-Py{WGQmFM`Z4CDaL>E`>9!! 5٫4uaYQlbA(cD0s0ۂPeGÁc! YT%Q1, XS*!(O!)ti# ΁D`KX$,1,&1;I6DBő(TQdXGI,< gO{-_33b"H%K E8s,ǎ=_B ߙο=Ѥ$9Ѹ&?D2Hhkr*8n뗭Vm[CX"iүOp~ACoO_J**Y"K(TO~*}6MR(%DY!¬C-?>R Bv,HF m1%)V̥@HB(i,U,ԬJ2FY"&VYTԨ*+#.Ȗ4DS  9$"F@:Q7T'h?!ؖAIR",Cr{_~y H?)#op>iY><;$ *Ȋ%ͳ+)l̶jKQT(("AII?:L5Hude6 $F5RU 0"/lzT5~B$q;O?WGJ' OЈQ?gP-Wj0m) V>|?M3ŶUnnfНuġ:?XN`rcDK$IQ=¥,%"~a& #&.e]lBT9vphRRIWy!m\vO`{[v(Hga`XLyJh5tlu7y(!nךi:d׮S(B mFR˨}&_K;v, #(ao62[[VeHخm{DXŧ$Ca!,S YڎyEU #42M4wk"CԪ+)`ݶ!VtŴɾ&KnR!XRUĪT(M$*PYJd?Hd XE"1T% R?0H48R/;V! GQ <!(A0CaYS2ԵjVYVSd,R2d,L06ҳeu٬#ELYYecY)I&T|c7aJP"滢"o+-6y"[E[EXhVՙRm$YY5kRʟDFv1)z"z^'l,gDIB'8 4Idv6C!`}U~h;ZZW`)'Dw*v8Ȓ"TaqMt'4>H*c݋%1DX}=Mv|j:ST' r l$q'D>K '7;O9RsҚW{)jG{coaD~V!LdXD 4"ҟJXX~0#u.qҾV꼲`rRm$FJTT5*YfECeY/0o.DowWPĖ >*! (QQ~JQBhh R(~#aERbEωH;@VZlyO}-g0vȤ,V E#JS+,g+1~Sَ44p 49!Zm61Ѷ1 hc R9iF\5-61Bli6i B:1:cV0fAaxqSC0C~`FܫFیe8mF$CX1B& Y8acV0hZ,#N\9vn[dM]X)LF]\16%/+,yKDe8)iÈ& d# ’V)`[b䉄d\hI[نpjI͛UZէu&BЕ0G6:B%L(TBHq5曦TVItImVYwy˙LV̞ÑJ ȰhQKUmX|{ :F(!ɼPy4a4iZ@ƥdmHɴaInk}fd&!?.2?%P)%W5#:76t9?h?Os >?z+OBH"bBlTK }0hOK0TE%w<'L0G ?$M($ϐhIf"D\Ab#8CBF J(b#m!9$!B; P~:Ws[S9"R,Օk_VZ5q*ˀF +(Z{*߹uVGd` =,H,jhgqYK$o+rP 9~/nm2>T48ZG ???2ɜB0T▧S|/c=ݰl'\ABw즓6mpI]  Th0`y78)zz]|/Bğ{|Ϙ8iicMp9rۇy"dQ€XR6jDؖHGӾJ_Lp䅏AO&Цg{%L*fXA=%Zr)_?}ս_L9>aM(CO:I~'IXyW0zzv0z^v4Qٳ): %VN=NSgYrl4F'4 FȤDp؀Y|m4lBH649`9i`BZ {Rɶ١ :A>/A]zpc@gw1m+kNКC]x#$>I.KoS`bH%|E>cjݸ =͡t}xyZ,/{qvg;gb>+LBȺ>buSh=I-bֱbi*+ɘst8 DG˞[蕿4#‘>o3`•RyQYyOC$8&˶4`2wMZ]Q4qa*"Ed*Y&YZZ)jRԐX)B)RRĥKE(d;z]l%dY,K5ԖK%ɣF4F4h(eTQZ-X !<"(~~/skY mLdAbl=u`˕ %KpJ$N%"0G#7͵ek8-kS4j9h%rfښRTN'pғ^4/9si'cscJ{TFϝ:6A =ek55jRP</c(N&q xKr Lc;+exxag4M֪Av F$̑6y{^]rnZ lOO}S$Q$ R(PcM;t.ݜI&h9*FZNi˻/SC6iZe%YmTl̽ґāmYI$;;Js_eT'~N9^8^R g۷~D^ }潌{ʿn`;bÙ>VJvV{sjsuwz=({@V7\5ݗUV@=V|5Eֳ}^tm9zs38猛vʧ'vk{rXWg)\f0YΖ[dcCG`xI%xY1Y$,Ys+FFk_{1Lu,fNc{j8Xw;|D)8Ldq+%{NI5x>@{4r3`$;K F,䙟g~U}3;ʻt*ͺ>z7NP;>3LN3;$]cmAI6mi4tKęG[=v("e~,ř6ce6f@eTJLhB') 3;&K^i|!wΑ$ݫ46IUcn*BUL @;k'z}[yvn KD|[ѕ g|Qc".YQO}Uq^SQwwUmz_aU㢦Sr~1j{ݸ:ew!KUqr &pʣ,;DQ|Tv)_6wXJ"%MʭKlPDvKwxTݹ[g*:9^67nV4bB@eAbPhz@v@q sfac]1j=at%eWְ1TE~^}ɗo/z۩/M;ۊKe10Y&Jٖ겦Ykꌟ]BC