﻿PK      \$B    '  elFinderVolumeLocalFileSystem.class.phpnu W+A        <?php

// Implement similar functionality in PHP 5.2 or 5.3
// http://php.net/manual/class.recursivecallbackfilteriterator.php#110974
if (!class_exists('RecursiveCallbackFilterIterator', false)) {
    class RecursiveCallbackFilterIterator extends RecursiveFilterIterator
    {
        private $callback;

        public function __construct(RecursiveIterator $iterator, $callback)
        {
            $this->callback = $callback;
            parent::__construct($iterator);
        }

        public function accept()
        {
            return call_user_func($this->callback, parent::current(), parent::key(), parent::getInnerIterator());
        }

        public function getChildren()
        {
            return new self($this->getInnerIterator()->getChildren(), $this->callback);
        }
    }
}

/**
 * elFinder driver for local filesystem.
 *
 * @author Dmitry (dio) Levashov
 * @author Troex Nevelin
 **/
class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver
{

    /**
     * Driver id
     * Must be started from letter and contains [a-z0-9]
     * Used as part of volume id
     *
     * @var string
     **/
    protected $driverId = 'l';

    /**
     * Required to count total archive files size
     *
     * @var int
     **/
    protected $archiveSize = 0;

    /**
     * Is checking stat owner
     *
     * @var        boolean
     */
    protected $statOwner = false;

    /**
     * Path to quarantine directory
     *
     * @var string
     */
    private $quarantine;

    /**
     * Constructor
     * Extend options with required fields
     *
     * @author Dmitry (dio) Levashov
     */
    public function __construct()
    {
        $this->options['alias'] = '';              // alias to replace root dir name
        $this->options['dirMode'] = 0755;            // new dirs mode
        $this->options['fileMode'] = 0644;            // new files mode
        $this->options['rootCssClass'] = 'elfinder-navbar-root-local';
        $this->options['followSymLinks'] = true;
        $this->options['detectDirIcon'] = '';         // file name that is detected as a folder icon e.g. '.diricon.png'
        $this->options['keepTimestamp'] = array('copy', 'move'); // keep timestamp at inner filesystem allowed 'copy', 'move' and 'upload'
        $this->options['substituteImg'] = true;       // support substitute image with dim command
        $this->options['statCorrector'] = null;       // callable to correct stat data `function(&$stat, $path, $statOwner, $volumeDriveInstance){}`
        if (DIRECTORY_SEPARATOR === '/') {
            // Linux
            $this->options['acceptedName'] = '/^[^\.\/\x00][^\/\x00]*$/';
        } else {
            // Windows
            $this->options['acceptedName'] = '/^[^\.\/\x00\\\:*?"<>|][^\/\x00\\\:*?"<>|]*$/';
        }
    }

    /*********************************************************************/
    /*                        INIT AND CONFIGURE                         */
    /*********************************************************************/

    /**
     * Prepare driver before mount volume.
     * Return true if volume is ready.
     *
     * @return bool
     **/
    protected function init()
    {
        // Normalize directory separator for windows
        if (DIRECTORY_SEPARATOR !== '/') {
            foreach (array('path', 'tmbPath', 'tmpPath', 'quarantine') as $key) {
                if (!empty($this->options[$key])) {
                    $this->options[$key] = str_replace('/', DIRECTORY_SEPARATOR, $this->options[$key]);
                }
            }
            // PHP >= 7.1 Supports UTF-8 path on Windows
            if (version_compare(PHP_VERSION, '7.1', '>=')) {
                $this->options['encoding'] = '';
                $this->options['locale'] = '';
            }
        }
        if (!$cwd = getcwd()) {
            return $this->setError('elFinder LocalVolumeDriver requires a result of getcwd().');
        }
        // detect systemRoot
        if (!isset($this->options['systemRoot'])) {
            if ($cwd[0] === DIRECTORY_SEPARATOR || $this->root[0] === DIRECTORY_SEPARATOR) {
                $this->systemRoot = DIRECTORY_SEPARATOR;
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $this->root, $m)) {
                $this->systemRoot = $m[1];
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $cwd, $m)) {
                $this->systemRoot = $m[1];
            }
        }
        $this->root = $this->getFullPath($this->root, $cwd);
        if (!empty($this->options['startPath'])) {
            $this->options['startPath'] = $this->getFullPath($this->options['startPath'], $this->root);
        }

        if (is_null($this->options['syncChkAsTs'])) {
            $this->options['syncChkAsTs'] = true;
        }
        if (is_null($this->options['syncCheckFunc'])) {
            $this->options['syncCheckFunc'] = array($this, 'localFileSystemInotify');
        }
        // check 'statCorrector'
        if (empty($this->options['statCorrector']) || !is_callable($this->options['statCorrector'])) {
            $this->options['statCorrector'] = null;
        }

        return true;
    }

    /**
     * Configure after successfull mount.
     *
     * @return void
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function configure()
    {
        $hiddens = array();
        $root = $this->stat($this->root);

        // check thumbnails path
        if (!empty($this->options['tmbPath'])) {
            if (strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['tmb'] = $this->options['tmbPath'];
                $this->options['tmbPath'] = $this->_abspath($this->options['tmbPath']);
            } else {
                $this->options['tmbPath'] = $this->_normpath($this->options['tmbPath']);
            }
        }
        // check temp path
        if (!empty($this->options['tmpPath'])) {
            if (strpos($this->options['tmpPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['temp'] = $this->options['tmpPath'];
                $this->options['tmpPath'] = $this->_abspath($this->options['tmpPath']);
            } else {
                $this->options['tmpPath'] = $this->_normpath($this->options['tmpPath']);
            }
        }
        // check quarantine path
        $_quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if (strpos($this->options['quarantine'], DIRECTORY_SEPARATOR) === false) {
                $_quarantine = $this->_abspath($this->options['quarantine']);
                $this->options['quarantine'] = '';
            } else {
                $this->options['quarantine'] = $this->_normpath($this->options['quarantine']);
            }
        } else {
            $_quarantine = $this->_abspath('.quarantine');
        }
        is_dir($_quarantine) && self::localRmdirRecursive($_quarantine);

        parent::configure();

        // check tmbPath
        if (!$this->tmbPath && isset($hiddens['tmb'])) {
            unset($hiddens['tmb']);
        }

        // if no thumbnails url - try detect it
        if ($root['read'] && !$this->tmbURL && $this->URL) {
            if (strpos($this->tmbPath, $this->root) === 0) {
                $this->tmbURL = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root) + 1));
                if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
                    $this->tmbURL .= '/';
                }
            }
        }

        // set $this->tmp by options['tmpPath']
        $this->tmp = '';
        if (!empty($this->options['tmpPath'])) {
            if ((is_dir($this->options['tmpPath']) || mkdir($this->options['tmpPath'], $this->options['dirMode'], true)) && is_writable($this->options['tmpPath'])) {
                $this->tmp = $this->options['tmpPath'];
            } else {
                if (isset($hiddens['temp'])) {
                    unset($hiddens['temp']);
                }
            }
        }
        if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
            $this->tmp = $tmp;
        }

        // check quarantine dir
        $this->quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if ((is_dir($this->options['quarantine']) || mkdir($this->options['quarantine'], $this->options['dirMode'], true)) && is_writable($this->options['quarantine'])) {
                $this->quarantine = $this->options['quarantine'];
            } else {
                if (isset($hiddens['quarantine'])) {
                    unset($hiddens['quarantine']);
                }
            }
        } else if ($_path = elFinder::getCommonTempPath()) {
            $this->quarantine = $_path;
        }

        if (!$this->quarantine) {
            if (!$this->tmp) {
                $this->archivers['extract'] = array();
                $this->disabled[] = 'extract';
            } else {
                $this->quarantine = $this->tmp;
            }
        }

        if ($hiddens) {
            foreach ($hiddens as $hidden) {
                $this->attributes[] = array(
                    'pattern' => '~^' . preg_quote(DIRECTORY_SEPARATOR . $hidden, '~') . '$~',
                    'read' => false,
                    'write' => false,
                    'locked' => true,
                    'hidden' => true
                );
            }
        }

        if (!empty($this->options['keepTimestamp'])) {
            $this->options['keepTimestamp'] = array_flip($this->options['keepTimestamp']);
        }

        $this->statOwner = (!empty($this->options['statOwner']));

        // enable WinRemoveTailDots plugin on Windows server
        if (DIRECTORY_SEPARATOR !== '/') {
            if (!isset($this->options['plugin'])) {
                $this->options['plugin'] = array();
            }
            $this->options['plugin']['WinRemoveTailDots'] = array('enable' => true);
        }
    }

    /**
     * Long pooling sync checker
     * This function require server command `inotifywait`
     * If `inotifywait` need full path, Please add `define('ELFINER_INOTIFYWAIT_PATH', '/PATH_TO/inotifywait');` into connector.php
     *
     * @param string $path
     * @param int    $standby
     * @param number $compare
     *
     * @return number|bool
     * @throws elFinderAbortException
     */
    public function localFileSystemInotify($path, $standby, $compare)
    {
        if (isset($this->sessionCache['localFileSystemInotify_disable'])) {
            return false;
        }
        $path = realpath($path);
        $mtime = filemtime($path);
        if (!$mtime) {
            return false;
        }
        if ($mtime != $compare) {
            return $mtime;
        }
        $inotifywait = defined('ELFINER_INOTIFYWAIT_PATH') ? ELFINER_INOTIFYWAIT_PATH : 'inotifywait';
        $standby = max(1, intval($standby));
        $cmd = $inotifywait . ' ' . escapeshellarg($path) . ' -t ' . $standby . ' -e moved_to,moved_from,move,close_write,delete,delete_self';
        $this->procExec($cmd, $o, $r);
        if ($r === 0) {
            // changed
            clearstatcache();
            if (file_exists($path)) {
                $mtime = filemtime($path); // error on busy?
                return $mtime ? $mtime : time();
            } else {
                // target was removed
                return 0;
            }
        } else if ($r === 2) {
            // not changed (timeout)
            return $compare;
        }
        // error
        // cache to $_SESSION
        $this->sessionCache['localFileSystemInotify_disable'] = true;
        $this->session->set($this->id, $this->sessionCache);
        return false;
    }

    /*********************************************************************/
    /*                               FS API                              */
    /*********************************************************************/

    /*********************** paths/urls *************************/

    /**
     * Return parent directory path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dirname($path)
    {
        return dirname($path);
    }

    /**
     * Return file name
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _basename($path)
    {
        return basename($path);
    }

    /**
     * Join dir name and file name and retur full path
     *
     * @param  string $dir
     * @param  string $name
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _joinPath($dir, $name)
    {
        $dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $path = realpath($dir . DIRECTORY_SEPARATOR . $name);
        // realpath() returns FALSE if the file does not exist
        if ($path === false || strpos($path, $this->root) !== 0) {
            if (DIRECTORY_SEPARATOR !== '/') {
                $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
                $name = str_replace('/', DIRECTORY_SEPARATOR, $name);
            }
            // Directory traversal measures
            if (strpos($dir, '..' . DIRECTORY_SEPARATOR) !== false || substr($dir, -2) == '..') {
                $dir = $this->root;
            }
            if (strpos($name, '..' . DIRECTORY_SEPARATOR) !== false) {
                $name = basename($name);
            }
            $path = $dir . DIRECTORY_SEPARATOR . $name;
        }
        return $path; 
    }

    /**
     * Return normalized path, this works the same as os.path.normpath() in Python
     *
     * @param  string $path path
     *
     * @return string
     * @author Troex Nevelin
     **/
    protected function _normpath($path)
    {
        if (empty($path)) {
            return '.';
        }

        $changeSep = (DIRECTORY_SEPARATOR !== '/');
        if ($changeSep) {
            $drive = '';
            if (preg_match('/^([a-zA-Z]:)(.*)/', $path, $m)) {
                $drive = $m[1];
                $path = $m[2] ? $m[2] : '/';
            }
            $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
        }

        if (strpos($path, '/') === 0) {
            $initial_slashes = true;
        } else {
            $initial_slashes = false;
        }

        if (($initial_slashes)
            && (strpos($path, '//') === 0)
            && (strpos($path, '///') === false)) {
            $initial_slashes = 2;
        }

        $initial_slashes = (int)$initial_slashes;

        $comps = explode('/', $path);
        $new_comps = array();
        foreach ($comps as $comp) {
            if (in_array($comp, array('', '.'))) {
                continue;
            }

            if (($comp != '..')
                || (!$initial_slashes && !$new_comps)
                || ($new_comps && (end($new_comps) == '..'))) {
                array_push($new_comps, $comp);
            } elseif ($new_comps) {
                array_pop($new_comps);
            }
        }
        $comps = $new_comps;
        $path = implode('/', $comps);
        if ($initial_slashes) {
            $path = str_repeat('/', $initial_slashes) . $path;
        }

        if ($changeSep) {
            $path = $drive . str_replace('/', DIRECTORY_SEPARATOR, $path);
        }

        return $path ? $path : '.';
    }

    /**
     * Return file path related to root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _relpath($path)
    {
        if ($path === $this->root) {
            return '';
        } else {
            if (strpos($path, $this->root) === 0) {
                return ltrim(substr($path, strlen($this->root)), DIRECTORY_SEPARATOR);
            } else {
                // for link
                return $path;
            }
        }
    }

    /**
     * Convert path related to root dir into real path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _abspath($path)
    {
        if ($path === DIRECTORY_SEPARATOR) {
            return $this->root;
        } else {
            $path = $this->_normpath($path);
            if (strpos($path, $this->systemRoot) === 0) {
                return $path;
            } else if (DIRECTORY_SEPARATOR !== '/' && preg_match('/^[a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . '/', $path)) {
                return $path;
            } else {
                return $this->_joinPath($this->root, $path);
            }
        }
    }

    /**
     * Return fake path started from root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _path($path)
    {
        return $this->rootName . ($path == $this->root ? '' : $this->separator . $this->_relpath($path));
    }

    /**
     * Return true if $path is children of $parent
     *
     * @param  string $path   path to check
     * @param  string $parent parent path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _inpath($path, $parent)
    {
        $cwd = getcwd();
        $real_path = $this->getFullPath($path, $cwd);
        $real_parent = $this->getFullPath($parent, $cwd);
        if ($real_path && $real_parent) {
            return $real_path === $real_parent || strpos($real_path, rtrim($real_parent, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR) === 0;
        }
        return false;
    }



    /***************** file stat ********************/

    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     * If file does not exists - returns empty array or false.
     *
     * @param  string $path file path
     *
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        $stat = array();

        if (!file_exists($path) && !is_link($path)) {
            return $stat;
        }

        //Verifies the given path is the root or is inside the root. Prevents directory traveral.
        if (!$this->_inpath($path, $this->root)) {
            return $stat;
        }

        $stat['isowner'] = false;
        $linkreadable = false;
        if ($path != $this->root && is_link($path)) {
            if (!$this->options['followSymLinks']) {
                return array();
            }
            if (!($target = $this->readlink($path))
                || $target == $path) {
                if (is_null($target)) {
                    $stat = array();
                    return $stat;
                } else {
                    $stat['mime'] = 'symlink-broken';
                    $target = readlink($path);
                    $lstat = lstat($path);
                    $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                    $linkreadable = !empty($ostat['isowner']);
                }
            }
            $stat['alias'] = $this->_path($target);
            $stat['target'] = $target;
        }

        $readable = is_readable($path);

        if ($readable) {
            $size = sprintf('%u', filesize($path));
            $stat['ts'] = filemtime($path);
            if ($this->statOwner) {
                $fstat = stat($path);
                $uid = $fstat['uid'];
                $gid = $fstat['gid'];
                $stat['perm'] = substr((string)decoct($fstat['mode']), -4);
                $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
            }
        }

        if (($dir = is_dir($path)) && $this->options['detectDirIcon']) {
            $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
            if ($this->URL && file_exists($favicon)) {
                $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
            }
        }

        if (!isset($stat['mime'])) {
            $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
        }
        //logical rights first
        $stat['read'] = ($linkreadable || $readable) ? null : false;
        $stat['write'] = is_writable($path) ? null : false;

        if (is_null($stat['read'])) {
            if ($dir) {
                $stat['size'] = 0;
            } else if (isset($size)) {
                $stat['size'] = $size;
            }
        }

        if ($this->options['statCorrector']) {
            call_user_func_array($this->options['statCorrector'], array(&$stat, $path, $this->statOwner, $this));
        }

        return $stat;
    }

    /**
     * Get stat `owner`, `group` and `isowner` by `uid` and `gid`
     * Sub-fuction of _stat() and _scandir()
     *
     * @param integer $uid
     * @param integer $gid
     *
     * @return array  stat
     */
    protected function getOwnerStat($uid, $gid)
    {
        static $names = null;
        static $phpuid = null;

        if (is_null($names)) {
            $names = array('uid' => array(), 'gid' => array());
        }
        if (is_null($phpuid)) {
            if (is_callable('posix_getuid')) {
                $phpuid = posix_getuid();
            } else {
                $phpuid = 0;
            }
        }

        $stat = array();

        if ($uid) {
            $stat['isowner'] = ($phpuid == $uid);
            if (isset($names['uid'][$uid])) {
                $stat['owner'] = $names['uid'][$uid];
            } else if (is_callable('posix_getpwuid')) {
                $pwuid = posix_getpwuid($uid);
                $stat['owner'] = $names['uid'][$uid] = $pwuid['name'];
            } else {
                $stat['owner'] = $names['uid'][$uid] = $uid;
            }
        }
        if ($gid) {
            if (isset($names['gid'][$gid])) {
                $stat['group'] = $names['gid'][$gid];
            } else if (is_callable('posix_getgrgid')) {
                $grgid = posix_getgrgid($gid);
                $stat['group'] = $names['gid'][$gid] = $grgid['name'];
            } else {
                $stat['group'] = $names['gid'][$gid] = $gid;
            }
        }

        return $stat;
    }

    /**
     * Return true if path is dir and has at least one childs directory
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _subdirs($path)
    {

        $dirs = false;
        if (is_dir($path) && is_readable($path)) {
            if (class_exists('FilesystemIterator', false)) {
                $dirItr = new ParentIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::SKIP_DOTS |
                        FilesystemIterator::CURRENT_AS_SELF |
                        (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    )
                );
                $dirItr->rewind();
                if ($dirItr->hasChildren()) {
                    $dirs = true;
                    $name = $dirItr->getSubPathName();
                    while ($dirItr->valid()) {
                        if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
                            $dirs = false;
                            $dirItr->next();
                            $name = $dirItr->getSubPathName();
                            continue;
                        }
                        $dirs = true;
                        break;
                    }
                }
            } else {
                $path = strtr($path, array('[' => '\\[', ']' => '\\]', '*' => '\\*', '?' => '\\?'));
                return (bool)glob(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
            }
        }
        return $dirs;
    }

    /**
     * Return object width and height
     * Usualy used for images, but can be realize for video etc...
     *
     * @param  string $path file path
     * @param  string $mime file mime type
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dimensions($path, $mime)
    {
        clearstatcache();
        return strpos($mime, 'image') === 0 && is_readable($path) && filesize($path) && ($s = getimagesize($path)) !== false
            ? $s[0] . 'x' . $s[1]
            : false;
    }
    /******************** file/dir content *********************/

    /**
     * Return symlink target file
     *
     * @param  string $path link path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function readlink($path)
    {
        if (!($target = readlink($path))) {
            return null;
        }

        if (strpos($target, $this->systemRoot) !== 0) {
            $target = $this->_joinPath(dirname($path), $target);
        }

        if (!file_exists($target)) {
            return false;
        }

        return $target;
    }

    /**
     * Return files list in directory.
     *
     * @param  string $path dir path
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function _scandir($path)
    {
        elFinder::checkAborted();
        $files = array();
        $cache = array();
        $dirWritable = is_writable($path);
        $dirItr = array();
        $followSymLinks = $this->options['followSymLinks'];
        try {
            $dirItr = new DirectoryIterator($path);
        } catch (UnexpectedValueException $e) {
        }

        foreach ($dirItr as $file) {
            try {
                if ($file->isDot()) {
                    continue;
                }

                $files[] = $fpath = $file->getPathname();

                $br = false;
                $stat = array();

                $stat['isowner'] = false;
                $linkreadable = false;
                if ($file->isLink()) {
                    if (!$followSymLinks) {
                        continue;
                    }
                    if (!($target = $this->readlink($fpath))
                        || $target == $fpath) {
                        if (is_null($target)) {
                            $stat = array();
                            $br = true;
                        } else {
                            $_path = $fpath;
                            $stat['mime'] = 'symlink-broken';
                            $target = readlink($_path);
                            $lstat = lstat($_path);
                            $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                            $linkreadable = !empty($ostat['isowner']);
                            $dir = false;
                            $stat['alias'] = $this->_path($target);
                            $stat['target'] = $target;
                        }
                    } else {
                        $dir = is_dir($target);
                        $stat['alias'] = $this->_path($target);
                        $stat['target'] = $target;
                        $stat['mime'] = $dir ? 'directory' : $this->mimetype($stat['alias']);
                    }
                } else {
                    if (($dir = $file->isDir()) && $this->options['detectDirIcon']) {
                        $path = $file->getPathname();
                        $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
                        if ($this->URL && file_exists($favicon)) {
                            $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
                        }
                    }
                    $stat['mime'] = $dir ? 'directory' : $this->mimetype($fpath);
                }
                $size = sprintf('%u', $file->getSize());
                $stat['ts'] = $file->getMTime();
                if (!$br) {
                    if ($this->statOwner && !$linkreadable) {
                        $uid = $file->getOwner();
                        $gid = $file->getGroup();
                        $stat['perm'] = substr((string)decoct($file->getPerms()), -4);
                        $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
                    }

                    //logical rights first
                    $stat['read'] = ($linkreadable || $file->isReadable()) ? null : false;
                    $stat['write'] = $file->isWritable() ? null : false;
                    $stat['locked'] = $dirWritable ? null : true;

                    if (is_null($stat['read'])) {
                        $stat['size'] = $dir ? 0 : $size;
                    }

                    if ($this->options['statCorrector']) {
                        call_user_func_array($this->options['statCorrector'], array(&$stat, $fpath, $this->statOwner, $this));
                    }
                }

                $cache[] = array($fpath, $stat);
            } catch (RuntimeException $e) {
                continue;
            }
        }

        if ($cache) {
            $cache = $this->convEncOut($cache, false);
            foreach ($cache as $d) {
                $this->updateCache($d[0], $d[1]);
            }
        }

        return $files;
    }

    /**
     * Open file and return file pointer
     *
     * @param  string $path file path
     * @param string  $mode
     *
     * @return false|resource
     * @internal param bool $write open file for writing
     * @author   Dmitry (dio) Levashov
     */
    protected function _fopen($path, $mode = 'rb')
    {
        return fopen($path, $mode);
    }

    /**
     * Close opened file
     *
     * @param  resource $fp file pointer
     * @param string    $path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     */
    protected function _fclose($fp, $path = '')
    {
        return (is_resource($fp) && fclose($fp));
    }

    /********************  file/dir manipulations *************************/

    /**
     * Create dir and return created dir path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new directory name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkdir($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (mkdir($path)) {
            chmod($path, $this->options['dirMode']);
            return $path;
        }

        return false;
    }

    /**
     * Create file and return it's path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new file name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkfile($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (($fp = fopen($path, 'w'))) {
            fclose($fp);
            chmod($path, $this->options['fileMode']);
            return $path;
        }
        return false;
    }

    /**
     * Create symlink
     *
     * @param  string $source    file to link to
     * @param  string $targetDir folder to create link in
     * @param  string $name      symlink name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _symlink($source, $targetDir, $name)
    {
        return $this->localFileSystemSymlink($source, $this->_joinPath($targetDir, $name));
    }

    /**
     * Copy file into another file
     *
     * @param  string $source    source file path
     * @param  string $targetDir target directory path
     * @param  string $name      new file name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _copy($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = copy($source, $target)) {
            isset($this->options['keepTimestamp']['copy']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Move file into another parent dir.
     * Return new file path or false.
     *
     * @param  string $source source file path
     * @param         $targetDir
     * @param  string $name   file name
     *
     * @return bool|string
     * @internal param string $target target dir path
     * @author   Dmitry (dio) Levashov
     */
    protected function _move($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = rename($source, $target) ? $target : false) {
            isset($this->options['keepTimestamp']['move']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Remove file
     *
     * @param  string $path file path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _unlink($path)
    {
        return is_file($path) && unlink($path);
    }

    /**
     * Remove dir
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _rmdir($path)
    {
        return rmdir($path);
    }

    /**
     * Create new file and write into it from file pointer.
     * Return new file path or false on error.
     *
     * @param  resource $fp   file pointer
     * @param  string   $dir  target dir path
     * @param  string   $name file name
     * @param  array    $stat file stat (required by some virtual fs)
     *
     * @return bool|string
     * @author Dmitry (dio) Levashov
     **/
    protected function _save($fp, $dir, $name, $stat)
    {
        $path = $this->_joinPath($dir, $name);

        $meta = stream_get_meta_data($fp);
        $uri = isset($meta['uri']) ? $meta['uri'] : '';
        if ($uri && !preg_match('#^[a-zA-Z0-9]+://#', $uri) && !is_link($uri)) {
            fclose($fp);
            $mtime = filemtime($uri);
            $isCmdPaste = ($this->ARGS['cmd'] === 'paste');
            $isCmdCopy = ($isCmdPaste && empty($this->ARGS['cut']));
            if (($isCmdCopy || !rename($uri, $path)) && !copy($uri, $path)) {
                return false;
            }
            // keep timestamp on upload
            if ($mtime && $this->ARGS['cmd'] === 'upload') {
                touch($path, isset($this->options['keepTimestamp']['upload']) ? $mtime : time());
            }
        } else {
            if (file_put_contents($path, $fp, LOCK_EX) === false) {
                return false;
            }
        }

        chmod($path, $this->options['fileMode']);
        return $path;
    }

    /**
     * Get file contents
     *
     * @param  string $path file path
     *
     * @return string|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _getContents($path)
    {
        return file_get_contents($path);
    }

    /**
     * Write a string to a file
     *
     * @param  string $path    file path
     * @param  string $content new file content
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _filePutContents($path, $content)
    {
        return (file_put_contents($path, $content, LOCK_EX) !== false);
    }

    /**
     * Detect available archivers
     *
     * @return void
     * @throws elFinderAbortException
     */
    protected function _checkArchivers()
    {
        $this->archivers = $this->getArchivers();
        return;
    }

    /**
     * chmod availability
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    protected function _chmod($path, $mode)
    {
        $modeOct = is_string($mode) ? octdec($mode) : octdec(sprintf("%04o", $mode));
        return chmod($path, $modeOct);
    }

    /**
     * Recursive symlinks search
     *
     * @param  string $path file/dir path
     *
     * @return bool
     * @throws Exception
     * @author Dmitry (dio) Levashov
     */
    protected function _findSymlinks($path)
    {
        return self::localFindSymlinks($path);
    }

    /**
     * Extract files from archive
     *
     * @param  string $path archive path
     * @param  array  $arc  archiver command and arguments (same as in $this->archivers)
     *
     * @return array|string|boolean
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _extract($path, $arc)
    {

        if ($this->quarantine) {

            $dir = $this->quarantine . DIRECTORY_SEPARATOR . md5(basename($path) . mt_rand());
            $archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction') ? '' : $dir . DIRECTORY_SEPARATOR . basename($path);

            if (!mkdir($dir)) {
                return false;
            }

            // insurance unexpected shutdown
            register_shutdown_function(array($this, 'rmdirRecursive'), realpath($dir));

            chmod($dir, 0777);

            // copy in quarantine
            if (!is_readable($path) || ($archive && !copy($path, $archive))) {
                return false;
            }

            // extract in quarantine
            try {
                $this->unpackArchive($path, $arc, $archive ? true : $dir);
            } catch(Exception $e) {
                return $this->setError($e->getMessage());
            }

            // get files list
            try {
                $ls = self::localScandir($dir);
            } catch (Exception $e) {
                return false;
            }

            // no files - extract error ?
            if (empty($ls)) {
                return false;
            }

            $this->archiveSize = 0;

            // find symlinks and check extracted items
            $checkRes = $this->checkExtractItems($dir);
            if ($checkRes['symlinks']) {
                self::localRmdirRecursive($dir);
                return $this->setError(array_merge($this->error, array(elFinder::ERROR_ARC_SYMLINKS)));
            }
            $this->archiveSize = $checkRes['totalSize'];
            if ($checkRes['rmNames']) {
                foreach ($checkRes['rmNames'] as $name) {
                    $this->addError(elFinder::ERROR_SAVE, $name);
                }
            }

            // check max files size
            if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
                $this->delTree($dir);
                return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
            }

            $extractTo = $this->extractToNewdir; // 'auto', ture or false

            // archive contains one item - extract in archive dir
            $name = '';
            $src = $dir . DIRECTORY_SEPARATOR . $ls[0];
            if (($extractTo === 'auto' || !$extractTo) && count($ls) === 1 && is_file($src)) {
                $name = $ls[0];
            } else if ($extractTo === 'auto' || $extractTo) {
                // for several files - create new directory
                // create unique name for directory
                $src = $dir;
                $splits = elFinder::splitFileExtention(basename($path));
                $name = $splits[0];
                $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
                if (file_exists($test) || is_link($test)) {
                    $name = $this->uniqueName(dirname($path), $name, '-', false);
                }
            }

            if ($name !== '') {
                $result = dirname($path) . DIRECTORY_SEPARATOR . $name;

                if (!rename($src, $result)) {
                    $this->delTree($dir);
                    return false;
                }
            } else {
                $dstDir = dirname($path);
                $result = array();
                foreach ($ls as $name) {
                    $target = $dstDir . DIRECTORY_SEPARATOR . $name;
                    if (self::localMoveRecursive($dir . DIRECTORY_SEPARATOR . $name, $target, true, $this->options['copyJoin'])) {
                        $result[] = $target;
                    }
                }
                if (!$result) {
                    $this->delTree($dir);
                    return false;
                }
            }

            is_dir($dir) && $this->delTree($dir);

            return (is_array($result) || file_exists($result)) ? $result : false;
        }
        //TODO: Add return statement here
        return false;
    }

    /**
     * Create archive and return its path
     *
     * @param  string $dir   target dir
     * @param  array  $files files names list
     * @param  string $name  archive name
     * @param  array  $arc   archiver options
     *
     * @return string|bool
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _archive($dir, $files, $name, $arc)
    {
        return $this->makeArchive($dir, $files, $name, $arc);
    }

    /******************** Over write functions *************************/

    /**
     * File path of local server side work file path
     *
     * @param  string $path
     *
     * @return string
     * @author Naoki Sawada
     */
    protected function getWorkFile($path)
    {
        return $path;
    }

    /**
     * Delete dirctory trees
     *
     * @param string $localpath path need convert encoding to server encoding
     *
     * @return boolean
     * @throws elFinderAbortException
     * @author Naoki Sawada
     */
    protected function delTree($localpath)
    {
        return $this->rmdirRecursive($localpath);
    }

    /**
     * Return fileinfo based on filename
     * For item ID based path file system
     * Please override if needed on each drivers
     *
     * @param  string $path file cache
     *
     * @return array|boolean false
     */
    protected function isNameExists($path)
    {
        $exists = file_exists($this->convEncIn($path));
        // restore locale
        $this->convEncOut();
        return $exists ? $this->stat($path) : false;
    }

    /******************** Over write (Optimized) functions *************************/

    /**
     * Recursive files search
     *
     * @param  string $path dir path
     * @param  string $q    search string
     * @param  array  $mimes
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     * @author Naoki Sawada
     */
    protected function doSearch($path, $q, $mimes)
    {
        if (!empty($this->doSearchCurrentQuery['matchMethod']) || $this->encoding || !class_exists('FilesystemIterator', false)) {
            // has custom match method or non UTF-8, use elFinderVolumeDriver::doSearch()
            return parent::doSearch($path, $q, $mimes);
        }

        $result = array();

        $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0;
        if ($timeout && $timeout < time()) {
            $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path)));
            return $result;
        }
        elFinder::extendTimeLimit($this->options['searchTimeout'] + 30);

        $match = array();
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveCallbackFilterIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::KEY_AS_PATHNAME |
                        FilesystemIterator::SKIP_DOTS |
                        ((defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') && $this->options['followSymLinks']) ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    ),
                    array($this, 'localFileSystemSearchIteratorFilter')
                ),
                RecursiveIteratorIterator::SELF_FIRST,
                RecursiveIteratorIterator::CATCH_GET_CHILD
            );
            foreach ($iterator as $key => $node) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($node->getPath)));
                    break;
                }
                if ($node->isDir()) {
                    if ($this->stripos($node->getFilename(), $q) !== false) {
                        $match[] = $key;
                    }
                } else {
                    $match[] = $key;
                }
            }
        } catch (Exception $e) {
        }

        if ($match) {
            foreach ($match as $p) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode(dirname($p))));
                    break;
                }

                $stat = $this->stat($p);

                if (!$stat) { // invalid links
                    continue;
                }

                if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) {
                    continue;
                }

                if ((!$mimes || $stat['mime'] !== 'directory')) {
                    $stat['path'] = $this->path($stat['hash']);
                    if ($this->URL && !isset($stat['url'])) {
                        $_path = str_replace(DIRECTORY_SEPARATOR, '/', substr($p, strlen($this->root) + 1));
                        $stat['url'] = $this->URL . str_replace('%2F', '/', rawurlencode($_path));
                    }

                    $result[] = $stat;
                }
            }
        }

        return $result;
    }

    /******************** Original local functions ************************
     *
     * @param $file
     * @param $key
     * @param $iterator
     *
     * @return bool
     */

    public function localFileSystemSearchIteratorFilter($file, $key, $iterator)
    {
        /* @var FilesystemIterator $file */
        /* @var RecursiveDirectoryIterator $iterator */
        $name = $file->getFilename();
        if ($this->doSearchCurrentQuery['excludes']) {
            foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) {
                if ($this->stripos($name, $exclude) !== false) {
                    return false;
                }
            }
        }
        if ($iterator->hasChildren()) {
            if ($this->options['searchExDirReg'] && preg_match($this->options['searchExDirReg'], $key)) {
                return false;
            }
            return (bool)$this->attr($key, 'read', null, true);
        }
        return ($this->stripos($name, $this->doSearchCurrentQuery['q']) === false) ? false : true;
    }

    /**
     * Creates a symbolic link
     *
     * @param      string   $target  The target
     * @param      string   $link    The link
     *
     * @return     boolean  ( result of symlink() )
     */
    protected function localFileSystemSymlink($target, $link)
    {
        $res = false;
        if (function_exists('symlink') and is_callable('symlink')) {
            $errlev = error_reporting();
            error_reporting($errlev ^ E_WARNING);
            if ($res = symlink(realpath($target), $link)) {
                $res = is_readable($link);
            }
            error_reporting($errlev);
        }
        return $res;
    }
} // END class PK      \3A      composer/autoload_classmap.phpnu W+A        <?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    'HFG\\Core\\Builder\\Abstract_Builder' => $baseDir . '/header-footer-grid/Core/Builder/Abstract_Builder.php',
    'HFG\\Core\\Builder\\Footer' => $baseDir . '/header-footer-grid/Core/Builder/Footer.php',
    'HFG\\Core\\Builder\\Header' => $baseDir . '/header-footer-grid/Core/Builder/Header.php',
    'HFG\\Core\\Components\\Abstract_Component' => $baseDir . '/header-footer-grid/Core/Components/Abstract_Component.php',
    'HFG\\Core\\Components\\Abstract_FooterWidget' => $baseDir . '/header-footer-grid/Core/Components/Abstract_FooterWidget.php',
    'HFG\\Core\\Components\\Abstract_SearchComponent' => $baseDir . '/header-footer-grid/Core/Components/Abstract_SearchComponent.php',
    'HFG\\Core\\Components\\Button' => $baseDir . '/header-footer-grid/Core/Components/Button.php',
    'HFG\\Core\\Components\\CartIcon' => $baseDir . '/header-footer-grid/Core/Components/CartIcon.php',
    'HFG\\Core\\Components\\CustomHtml' => $baseDir . '/header-footer-grid/Core/Components/CustomHtml.php',
    'HFG\\Core\\Components\\EddCartIcon' => $baseDir . '/header-footer-grid/Core/Components/EddCartIcon.php',
    'HFG\\Core\\Components\\FooterWidgetFour' => $baseDir . '/header-footer-grid/Core/Components/FooterWidgetFour.php',
    'HFG\\Core\\Components\\FooterWidgetOne' => $baseDir . '/header-footer-grid/Core/Components/FooterWidgetOne.php',
    'HFG\\Core\\Components\\FooterWidgetThree' => $baseDir . '/header-footer-grid/Core/Components/FooterWidgetThree.php',
    'HFG\\Core\\Components\\FooterWidgetTwo' => $baseDir . '/header-footer-grid/Core/Components/FooterWidgetTwo.php',
    'HFG\\Core\\Components\\Logo' => $baseDir . '/header-footer-grid/Core/Components/Logo.php',
    'HFG\\Core\\Components\\MenuIcon' => $baseDir . '/header-footer-grid/Core/Components/MenuIcon.php',
    'HFG\\Core\\Components\\Nav' => $baseDir . '/header-footer-grid/Core/Components/Nav.php',
    'HFG\\Core\\Components\\NavFooter' => $baseDir . '/header-footer-grid/Core/Components/NavFooter.php',
    'HFG\\Core\\Components\\PaletteSwitch' => $baseDir . '/header-footer-grid/Core/Components/PaletteSwitch.php',
    'HFG\\Core\\Components\\Search' => $baseDir . '/header-footer-grid/Core/Components/Search.php',
    'HFG\\Core\\Components\\SearchResponsive' => $baseDir . '/header-footer-grid/Core/Components/SearchResponsive.php',
    'HFG\\Core\\Components\\SecondNav' => $baseDir . '/header-footer-grid/Core/Components/SecondNav.php',
    'HFG\\Core\\Components\\Utility\\SearchIconButton' => $baseDir . '/header-footer-grid/Core/Components/Utility/SearchIconButton.php',
    'HFG\\Core\\Css_Generator' => $baseDir . '/header-footer-grid/Core/Css_Generator.php',
    'HFG\\Core\\Customizer' => $baseDir . '/header-footer-grid/Core/Customizer.php',
    'HFG\\Core\\Interfaces\\Builder' => $baseDir . '/header-footer-grid/Core/Interfaces/Builder.php',
    'HFG\\Core\\Interfaces\\Component' => $baseDir . '/header-footer-grid/Core/Interfaces/Component.php',
    'HFG\\Core\\Magic_Tags' => $baseDir . '/header-footer-grid/Core/Magic_Tags.php',
    'HFG\\Core\\Script_Register' => $baseDir . '/header-footer-grid/Core/Script_Register.php',
    'HFG\\Core\\Settings\\Config' => $baseDir . '/header-footer-grid/Core/Settings/Config.php',
    'HFG\\Core\\Settings\\Defaults' => $baseDir . '/header-footer-grid/Core/Settings/Defaults.php',
    'HFG\\Core\\Settings\\Manager' => $baseDir . '/header-footer-grid/Core/Settings/Manager.php',
    'HFG\\Main' => $baseDir . '/header-footer-grid/Main.php',
    'HFG\\Traits\\Core' => $baseDir . '/header-footer-grid/Traits/Core.php',
);
PK      \ 2?  ?    composer/InstalledVersions.phpnu W+A        <?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer;

use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;

/**
 * This class is copied in every Composer installed project and available to all
 *
 * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
 *
 * To require its presence, you can require `composer-runtime-api ^2.0`
 *
 * @final
 */
class InstalledVersions
{
    /**
     * @var mixed[]|null
     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
     */
    private static $installed;

    /**
     * @var bool|null
     */
    private static $canGetVendors;

    /**
     * @var array[]
     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static $installedByVendor = array();

    /**
     * Returns a list of all package names which are present, either by being installed, replaced or provided
     *
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackages()
    {
        $packages = array();
        foreach (self::getInstalled() as $installed) {
            $packages[] = array_keys($installed['versions']);
        }

        if (1 === \count($packages)) {
            return $packages[0];
        }

        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
    }

    /**
     * Returns a list of all package names with a specific type e.g. 'library'
     *
     * @param  string   $type
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackagesByType($type)
    {
        $packagesByType = array();

        foreach (self::getInstalled() as $installed) {
            foreach ($installed['versions'] as $name => $package) {
                if (isset($package['type']) && $package['type'] === $type) {
                    $packagesByType[] = $name;
                }
            }
        }

        return $packagesByType;
    }

    /**
     * Checks whether the given package is installed
     *
     * This also returns true if the package name is provided or replaced by another package
     *
     * @param  string $packageName
     * @param  bool   $includeDevRequirements
     * @return bool
     */
    public static function isInstalled($packageName, $includeDevRequirements = true)
    {
        foreach (self::getInstalled() as $installed) {
            if (isset($installed['versions'][$packageName])) {
                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
            }
        }

        return false;
    }

    /**
     * Checks whether the given package satisfies a version constraint
     *
     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
     *
     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
     *
     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
     * @param  string        $packageName
     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
     * @return bool
     */
    public static function satisfies(VersionParser $parser, $packageName, $constraint)
    {
        $constraint = $parser->parseConstraints((string) $constraint);
        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));

        return $provided->matches($constraint);
    }

    /**
     * Returns a version constraint representing all the range(s) which are installed for a given package
     *
     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
     * whether a given version of a package is installed, and not just whether it exists
     *
     * @param  string $packageName
     * @return string Version constraint usable with composer/semver
     */
    public static function getVersionRanges($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            $ranges = array();
            if (isset($installed['versions'][$packageName]['pretty_version'])) {
                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
            }
            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
            }
            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
            }
            if (array_key_exists('provided', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
            }

            return implode(' || ', $ranges);
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getPrettyVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['pretty_version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
     */
    public static function getReference($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['reference'])) {
                return null;
            }

            return $installed['versions'][$packageName]['reference'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
     */
    public static function getInstallPath($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @return array
     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
     */
    public static function getRootPackage()
    {
        $installed = self::getInstalled();

        return $installed[0]['root'];
    }

    /**
     * Returns the raw installed.php data for custom implementations
     *
     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
     * @return array[]
     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
     */
    public static function getRawData()
    {
        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                self::$installed = include __DIR__ . '/installed.php';
            } else {
                self::$installed = array();
            }
        }

        return self::$installed;
    }

    /**
     * Returns the raw data of all installed.php which are currently loaded for custom implementations
     *
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    public static function getAllRawData()
    {
        return self::getInstalled();
    }

    /**
     * Lets you reload the static array from another file
     *
     * This is only useful for complex integrations in which a project needs to use
     * this class but then also needs to execute another project's autoloader in process,
     * and wants to ensure both projects have access to their version of installed.php.
     *
     * A typical case would be PHPUnit, where it would need to make sure it reads all
     * the data it needs from this class, then call reload() with
     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
     * the project in which it runs can then also use this class safely, without
     * interference between PHPUnit's dependencies and the project's dependencies.
     *
     * @param  array[] $data A vendor/composer/installed.php data set
     * @return void
     *
     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
     */
    public static function reload($data)
    {
        self::$installed = $data;
        self::$installedByVendor = array();
    }

    /**
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static function getInstalled()
    {
        if (null === self::$canGetVendors) {
            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
        }

        $installed = array();

        if (self::$canGetVendors) {
            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
                if (isset(self::$installedByVendor[$vendorDir])) {
                    $installed[] = self::$installedByVendor[$vendorDir];
                } elseif (is_file($vendorDir.'/composer/installed.php')) {
                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
                    $required = require $vendorDir.'/composer/installed.php';
                    $installed[] = self::$installedByVendor[$vendorDir] = $required;
                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                        self::$installed = $installed[count($installed) - 1];
                    }
                }
            }
        }

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
                $required = require __DIR__ . '/installed.php';
                self::$installed = $required;
            } else {
                self::$installed = array();
            }
        }

        if (self::$installed !== array()) {
            $installed[] = self::$installed;
        }

        return $installed;
    }
}
PK      \/t         composer/autoload_namespaces.phpnu W+A        <?php

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
);
PK      \3\        composer/autoload_psr4.phpnu W+A        <?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'HFG\\' => array($baseDir . '/header-footer-grid'),
);
PK      \@5V  V    composer/autoload_real.phpnu W+A        <?php

// autoload_real.php @generated by Composer

class ComposerAutoloaderInit736dac6b20e7c4fec7706baa4769f819
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    /**
     * @return \Composer\Autoload\ClassLoader
     */
    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        spl_autoload_register(array('ComposerAutoloaderInit736dac6b20e7c4fec7706baa4769f819', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
        spl_autoload_unregister(array('ComposerAutoloaderInit736dac6b20e7c4fec7706baa4769f819', 'loadClassLoader'));

        require __DIR__ . '/autoload_static.php';
        call_user_func(\Composer\Autoload\ComposerStaticInit736dac6b20e7c4fec7706baa4769f819::getInitializer($loader));

        $loader->register(true);

        $filesToLoad = \Composer\Autoload\ComposerStaticInit736dac6b20e7c4fec7706baa4769f819::$files;
        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

                require $file;
            }
        }, null, null);
        foreach ($filesToLoad as $fileIdentifier => $file) {
            $requireFile($fileIdentifier, $file);
        }

        return $loader;
    }
}
PK      \2@u?  ?    composer/ClassLoader.phpnu W+A        <?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer\Autoload;

/**
 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
 *
 *     $loader = new \Composer\Autoload\ClassLoader();
 *
 *     // register classes with namespaces
 *     $loader->add('Symfony\Component', __DIR__.'/component');
 *     $loader->add('Symfony',           __DIR__.'/framework');
 *
 *     // activate the autoloader
 *     $loader->register();
 *
 *     // to enable searching the include path (eg. for PEAR packages)
 *     $loader->setUseIncludePath(true);
 *
 * In this example, if you try to use a class in the Symfony\Component
 * namespace or one of its children (Symfony\Component\Console for instance),
 * the autoloader will first look for the class under the component/
 * directory, and it will then fallback to the framework/ directory if not
 * found before giving up.
 *
 * This class is loosely based on the Symfony UniversalClassLoader.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 * @author Jordi Boggiano <j.boggiano@seld.be>
 * @see    https://www.php-fig.org/psr/psr-0/
 * @see    https://www.php-fig.org/psr/psr-4/
 */
class ClassLoader
{
    /** @var \Closure(string):void */
    private static $includeFile;

    /** @var string|null */
    private $vendorDir;

    // PSR-4
    /**
     * @var array<string, array<string, int>>
     */
    private $prefixLengthsPsr4 = array();
    /**
     * @var array<string, list<string>>
     */
    private $prefixDirsPsr4 = array();
    /**
     * @var list<string>
     */
    private $fallbackDirsPsr4 = array();

    // PSR-0
    /**
     * List of PSR-0 prefixes
     *
     * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
     *
     * @var array<string, array<string, list<string>>>
     */
    private $prefixesPsr0 = array();
    /**
     * @var list<string>
     */
    private $fallbackDirsPsr0 = array();

    /** @var bool */
    private $useIncludePath = false;

    /**
     * @var array<string, string>
     */
    private $classMap = array();

    /** @var bool */
    private $classMapAuthoritative = false;

    /**
     * @var array<string, bool>
     */
    private $missingClasses = array();

    /** @var string|null */
    private $apcuPrefix;

    /**
     * @var array<string, self>
     */
    private static $registeredLoaders = array();

    /**
     * @param string|null $vendorDir
     */
    public function __construct($vendorDir = null)
    {
        $this->vendorDir = $vendorDir;
        self::initializeIncludeClosure();
    }

    /**
     * @return array<string, list<string>>
     */
    public function getPrefixes()
    {
        if (!empty($this->prefixesPsr0)) {
            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
        }

        return array();
    }

    /**
     * @return array<string, list<string>>
     */
    public function getPrefixesPsr4()
    {
        return $this->prefixDirsPsr4;
    }

    /**
     * @return list<string>
     */
    public function getFallbackDirs()
    {
        return $this->fallbackDirsPsr0;
    }

    /**
     * @return list<string>
     */
    public function getFallbackDirsPsr4()
    {
        return $this->fallbackDirsPsr4;
    }

    /**
     * @return array<string, string> Array of classname => path
     */
    public function getClassMap()
    {
        return $this->classMap;
    }

    /**
     * @param array<string, string> $classMap Class to filename map
     *
     * @return void
     */
    public function addClassMap(array $classMap)
    {
        if ($this->classMap) {
            $this->classMap = array_merge($this->classMap, $classMap);
        } else {
            $this->classMap = $classMap;
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix, either
     * appending or prepending to the ones previously set for this prefix.
     *
     * @param string              $prefix  The prefix
     * @param list<string>|string $paths   The PSR-0 root directories
     * @param bool                $prepend Whether to prepend the directories
     *
     * @return void
     */
    public function add($prefix, $paths, $prepend = false)
    {
        $paths = (array) $paths;
        if (!$prefix) {
            if ($prepend) {
                $this->fallbackDirsPsr0 = array_merge(
                    $paths,
                    $this->fallbackDirsPsr0
                );
            } else {
                $this->fallbackDirsPsr0 = array_merge(
                    $this->fallbackDirsPsr0,
                    $paths
                );
            }

            return;
        }

        $first = $prefix[0];
        if (!isset($this->prefixesPsr0[$first][$prefix])) {
            $this->prefixesPsr0[$first][$prefix] = $paths;

            return;
        }
        if ($prepend) {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $paths,
                $this->prefixesPsr0[$first][$prefix]
            );
        } else {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $this->prefixesPsr0[$first][$prefix],
                $paths
            );
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace, either
     * appending or prepending to the ones previously set for this namespace.
     *
     * @param string              $prefix  The prefix/namespace, with trailing '\\'
     * @param list<string>|string $paths   The PSR-4 base directories
     * @param bool                $prepend Whether to prepend the directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function addPsr4($prefix, $paths, $prepend = false)
    {
        $paths = (array) $paths;
        if (!$prefix) {
            // Register directories for the root namespace.
            if ($prepend) {
                $this->fallbackDirsPsr4 = array_merge(
                    $paths,
                    $this->fallbackDirsPsr4
                );
            } else {
                $this->fallbackDirsPsr4 = array_merge(
                    $this->fallbackDirsPsr4,
                    $paths
                );
            }
        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
            // Register directories for a new namespace.
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = $paths;
        } elseif ($prepend) {
            // Prepend directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $paths,
                $this->prefixDirsPsr4[$prefix]
            );
        } else {
            // Append directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $this->prefixDirsPsr4[$prefix],
                $paths
            );
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix,
     * replacing any others previously set for this prefix.
     *
     * @param string              $prefix The prefix
     * @param list<string>|string $paths  The PSR-0 base directories
     *
     * @return void
     */
    public function set($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr0 = (array) $paths;
        } else {
            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace,
     * replacing any others previously set for this namespace.
     *
     * @param string              $prefix The prefix/namespace, with trailing '\\'
     * @param list<string>|string $paths  The PSR-4 base directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function setPsr4($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr4 = (array) $paths;
        } else {
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
        }
    }

    /**
     * Turns on searching the include path for class files.
     *
     * @param bool $useIncludePath
     *
     * @return void
     */
    public function setUseIncludePath($useIncludePath)
    {
        $this->useIncludePath = $useIncludePath;
    }

    /**
     * Can be used to check if the autoloader uses the include path to check
     * for classes.
     *
     * @return bool
     */
    public function getUseIncludePath()
    {
        return $this->useIncludePath;
    }

    /**
     * Turns off searching the prefix and fallback directories for classes
     * that have not been registered with the class map.
     *
     * @param bool $classMapAuthoritative
     *
     * @return void
     */
    public function setClassMapAuthoritative($classMapAuthoritative)
    {
        $this->classMapAuthoritative = $classMapAuthoritative;
    }

    /**
     * Should class lookup fail if not found in the current class map?
     *
     * @return bool
     */
    public function isClassMapAuthoritative()
    {
        return $this->classMapAuthoritative;
    }

    /**
     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
     *
     * @param string|null $apcuPrefix
     *
     * @return void
     */
    public function setApcuPrefix($apcuPrefix)
    {
        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
    }

    /**
     * The APCu prefix in use, or null if APCu caching is not enabled.
     *
     * @return string|null
     */
    public function getApcuPrefix()
    {
        return $this->apcuPrefix;
    }

    /**
     * Registers this instance as an autoloader.
     *
     * @param bool $prepend Whether to prepend the autoloader or not
     *
     * @return void
     */
    public function register($prepend = false)
    {
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);

        if (null === $this->vendorDir) {
            return;
        }

        if ($prepend) {
            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
        } else {
            unset(self::$registeredLoaders[$this->vendorDir]);
            self::$registeredLoaders[$this->vendorDir] = $this;
        }
    }

    /**
     * Unregisters this instance as an autoloader.
     *
     * @return void
     */
    public function unregister()
    {
        spl_autoload_unregister(array($this, 'loadClass'));

        if (null !== $this->vendorDir) {
            unset(self::$registeredLoaders[$this->vendorDir]);
        }
    }

    /**
     * Loads the given class or interface.
     *
     * @param  string    $class The name of the class
     * @return true|null True if loaded, null otherwise
     */
    public function loadClass($class)
    {
        if ($file = $this->findFile($class)) {
            $includeFile = self::$includeFile;
            $includeFile($file);

            return true;
        }

        return null;
    }

    /**
     * Finds the path to the file where the class is defined.
     *
     * @param string $class The name of the class
     *
     * @return string|false The path if found, false otherwise
     */
    public function findFile($class)
    {
        // class map lookup
        if (isset($this->classMap[$class])) {
            return $this->classMap[$class];
        }
        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
            return false;
        }
        if (null !== $this->apcuPrefix) {
            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
            if ($hit) {
                return $file;
            }
        }

        $file = $this->findFileWithExtension($class, '.php');

        // Search for Hack files if we are running on HHVM
        if (false === $file && defined('HHVM_VERSION')) {
            $file = $this->findFileWithExtension($class, '.hh');
        }

        if (null !== $this->apcuPrefix) {
            apcu_add($this->apcuPrefix.$class, $file);
        }

        if (false === $file) {
            // Remember that this class does not exist.
            $this->missingClasses[$class] = true;
        }

        return $file;
    }

    /**
     * Returns the currently registered loaders keyed by their corresponding vendor directories.
     *
     * @return array<string, self>
     */
    public static function getRegisteredLoaders()
    {
        return self::$registeredLoaders;
    }

    /**
     * @param  string       $class
     * @param  string       $ext
     * @return string|false
     */
    private function findFileWithExtension($class, $ext)
    {
        // PSR-4 lookup
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;

        $first = $class[0];
        if (isset($this->prefixLengthsPsr4[$first])) {
            $subPath = $class;
            while (false !== $lastPos = strrpos($subPath, '\\')) {
                $subPath = substr($subPath, 0, $lastPos);
                $search = $subPath . '\\';
                if (isset($this->prefixDirsPsr4[$search])) {
                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
                        if (file_exists($file = $dir . $pathEnd)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-4 fallback dirs
        foreach ($this->fallbackDirsPsr4 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
                return $file;
            }
        }

        // PSR-0 lookup
        if (false !== $pos = strrpos($class, '\\')) {
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
        } else {
            // PEAR-like class name
            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
        }

        if (isset($this->prefixesPsr0[$first])) {
            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
                if (0 === strpos($class, $prefix)) {
                    foreach ($dirs as $dir) {
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-0 fallback dirs
        foreach ($this->fallbackDirsPsr0 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                return $file;
            }
        }

        // PSR-0 include paths.
        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
            return $file;
        }

        return false;
    }

    /**
     * @return void
     */
    private static function initializeIncludeClosure()
    {
        if (self::$includeFile !== null) {
            return;
        }

        /**
         * Scope isolated include.
         *
         * Prevents access to $this/self from included files.
         *
         * @param  string $file
         * @return void
         */
        self::$includeFile = \Closure::bind(static function($file) {
            include $file;
        }, null, null);
    }
}
PK      \r=ny  y    composer/autoload_static.phpnu W+A        <?php

// autoload_static.php @generated by Composer

namespace Composer\Autoload;

class ComposerStaticInit736dac6b20e7c4fec7706baa4769f819
{
    public static $files = array (
        'c730ac5ba4946398dd12db7e8d42d1c8' => __DIR__ . '/..' . '/codeinwp/themeisle-sdk/load.php',
    );

    public static $prefixLengthsPsr4 = array (
        'H' => 
        array (
            'HFG\\' => 4,
        ),
    );

    public static $prefixDirsPsr4 = array (
        'HFG\\' => 
        array (
            0 => __DIR__ . '/../..' . '/header-footer-grid',
        ),
    );

    public static $classMap = array (
        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
        'HFG\\Core\\Builder\\Abstract_Builder' => __DIR__ . '/../..' . '/header-footer-grid/Core/Builder/Abstract_Builder.php',
        'HFG\\Core\\Builder\\Footer' => __DIR__ . '/../..' . '/header-footer-grid/Core/Builder/Footer.php',
        'HFG\\Core\\Builder\\Header' => __DIR__ . '/../..' . '/header-footer-grid/Core/Builder/Header.php',
        'HFG\\Core\\Components\\Abstract_Component' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/Abstract_Component.php',
        'HFG\\Core\\Components\\Abstract_FooterWidget' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/Abstract_FooterWidget.php',
        'HFG\\Core\\Components\\Abstract_SearchComponent' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/Abstract_SearchComponent.php',
        'HFG\\Core\\Components\\Button' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/Button.php',
        'HFG\\Core\\Components\\CartIcon' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/CartIcon.php',
        'HFG\\Core\\Components\\CustomHtml' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/CustomHtml.php',
        'HFG\\Core\\Components\\EddCartIcon' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/EddCartIcon.php',
        'HFG\\Core\\Components\\FooterWidgetFour' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/FooterWidgetFour.php',
        'HFG\\Core\\Components\\FooterWidgetOne' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/FooterWidgetOne.php',
        'HFG\\Core\\Components\\FooterWidgetThree' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/FooterWidgetThree.php',
        'HFG\\Core\\Components\\FooterWidgetTwo' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/FooterWidgetTwo.php',
        'HFG\\Core\\Components\\Logo' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/Logo.php',
        'HFG\\Core\\Components\\MenuIcon' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/MenuIcon.php',
        'HFG\\Core\\Components\\Nav' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/Nav.php',
        'HFG\\Core\\Components\\NavFooter' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/NavFooter.php',
        'HFG\\Core\\Components\\PaletteSwitch' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/PaletteSwitch.php',
        'HFG\\Core\\Components\\Search' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/Search.php',
        'HFG\\Core\\Components\\SearchResponsive' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/SearchResponsive.php',
        'HFG\\Core\\Components\\SecondNav' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/SecondNav.php',
        'HFG\\Core\\Components\\Utility\\SearchIconButton' => __DIR__ . '/../..' . '/header-footer-grid/Core/Components/Utility/SearchIconButton.php',
        'HFG\\Core\\Css_Generator' => __DIR__ . '/../..' . '/header-footer-grid/Core/Css_Generator.php',
        'HFG\\Core\\Customizer' => __DIR__ . '/../..' . '/header-footer-grid/Core/Customizer.php',
        'HFG\\Core\\Interfaces\\Builder' => __DIR__ . '/../..' . '/header-footer-grid/Core/Interfaces/Builder.php',
        'HFG\\Core\\Interfaces\\Component' => __DIR__ . '/../..' . '/header-footer-grid/Core/Interfaces/Component.php',
        'HFG\\Core\\Magic_Tags' => __DIR__ . '/../..' . '/header-footer-grid/Core/Magic_Tags.php',
        'HFG\\Core\\Script_Register' => __DIR__ . '/../..' . '/header-footer-grid/Core/Script_Register.php',
        'HFG\\Core\\Settings\\Config' => __DIR__ . '/../..' . '/header-footer-grid/Core/Settings/Config.php',
        'HFG\\Core\\Settings\\Defaults' => __DIR__ . '/../..' . '/header-footer-grid/Core/Settings/Defaults.php',
        'HFG\\Core\\Settings\\Manager' => __DIR__ . '/../..' . '/header-footer-grid/Core/Settings/Manager.php',
        'HFG\\Main' => __DIR__ . '/../..' . '/header-footer-grid/Main.php',
        'HFG\\Traits\\Core' => __DIR__ . '/../..' . '/header-footer-grid/Traits/Core.php',
    );

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixLengthsPsr4 = ComposerStaticInit736dac6b20e7c4fec7706baa4769f819::$prefixLengthsPsr4;
            $loader->prefixDirsPsr4 = ComposerStaticInit736dac6b20e7c4fec7706baa4769f819::$prefixDirsPsr4;
            $loader->classMap = ComposerStaticInit736dac6b20e7c4fec7706baa4769f819::$classMap;

        }, null, ClassLoader::class);
    }
}
PK      \Rj        composer/autoload_files.phpnu W+A        <?php

// autoload_files.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'c730ac5ba4946398dd12db7e8d42d1c8' => $vendorDir . '/codeinwp/themeisle-sdk/load.php',
);
PK      \_      composer/installed.jsonnu W+A        {
    "packages": [
        {
            "name": "codeinwp/themeisle-sdk",
            "version": "3.3.11",
            "version_normalized": "3.3.11.0",
            "source": {
                "type": "git",
                "url": "https://github.com/Codeinwp/themeisle-sdk.git",
                "reference": "583c474d8b5a8d12592f4a78ab8fa335aaf42fc0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/583c474d8b5a8d12592f4a78ab8fa335aaf42fc0",
                "reference": "583c474d8b5a8d12592f4a78ab8fa335aaf42fc0",
                "shasum": ""
            },
            "require-dev": {
                "codeinwp/phpcs-ruleset": "dev-main"
            },
            "time": "2023-12-12T10:06:27+00:00",
            "type": "library",
            "installation-source": "dist",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-2.0+"
            ],
            "authors": [
                {
                    "name": "ThemeIsle team",
                    "email": "friends@themeisle.com",
                    "homepage": "https://themeisle.com"
                }
            ],
            "description": "ThemeIsle SDK",
            "homepage": "https://github.com/Codeinwp/themeisle-sdk",
            "keywords": [
                "wordpress"
            ],
            "support": {
                "issues": "https://github.com/Codeinwp/themeisle-sdk/issues",
                "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.11"
            },
            "install-path": "../codeinwp/themeisle-sdk"
        },
        {
            "name": "wptt/webfont-loader",
            "version": "dev-master",
            "version_normalized": "dev-master",
            "source": {
                "type": "git",
                "url": "https://github.com/cristian-ungureanu/webfont-loader.git",
                "reference": "0294f21a20549f0c5e79700399946583dfa496b0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/cristian-ungureanu/webfont-loader/zipball/0294f21a20549f0c5e79700399946583dfa496b0",
                "reference": "0294f21a20549f0c5e79700399946583dfa496b0",
                "shasum": ""
            },
            "require": {
                "php": ">=5.6"
            },
            "require-dev": {
                "composer/installers": "~1.0",
                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
                "php-parallel-lint/php-parallel-lint": "^1.2",
                "wptrt/wpthemereview": "^0.2.1"
            },
            "time": "2023-02-03T11:14:21+00:00",
            "default-branch": true,
            "type": "package",
            "installation-source": "dist",
            "scripts": {
                "standards:check": [
                    "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs"
                ],
                "standards:fix": [
                    "@php ./vendor/squizlabs/php_codesniffer/bin/phpcbf"
                ],
                "lint": [
                    "@php ./vendor/bin/parallel-lint --exclude .git --exclude vendor ."
                ]
            },
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Contributors",
                    "homepage": "https://github.com/WPTT/font-loader/graphs/contributors"
                }
            ],
            "description": "Locally host webfonts.",
            "homepage": "https://github.com/WPTT/font-loader",
            "keywords": [
                "WordPress"
            ],
            "support": {
                "issues": "https://github.com/WPTT/font-loader/issues",
                "source": "https://github.com/WPTT/font-loader"
            },
            "install-path": "../wptt/webfont-loader"
        }
    ],
    "dev": false,
    "dev-package-names": []
}
PK      \k瀥      composer/installed.phpnu W+A        <?php return array(
    'root' => array(
        'name' => 'codeinwp/neve',
        'pretty_version' => 'v3.7.5',
        'version' => '3.7.5.0',
        'reference' => 'b4d6b671ea4411ebef8fc1be91b64d05e40de319',
        'type' => 'wordpress-theme',
        'install_path' => __DIR__ . '/../../',
        'aliases' => array(),
        'dev' => false,
    ),
    'versions' => array(
        'codeinwp/neve' => array(
            'pretty_version' => 'v3.7.5',
            'version' => '3.7.5.0',
            'reference' => 'b4d6b671ea4411ebef8fc1be91b64d05e40de319',
            'type' => 'wordpress-theme',
            'install_path' => __DIR__ . '/../../',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'codeinwp/themeisle-sdk' => array(
            'pretty_version' => '3.3.11',
            'version' => '3.3.11.0',
            'reference' => '583c474d8b5a8d12592f4a78ab8fa335aaf42fc0',
            'type' => 'library',
            'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'wptt/webfont-loader' => array(
            'pretty_version' => 'dev-master',
            'version' => 'dev-master',
            'reference' => '0294f21a20549f0c5e79700399946583dfa496b0',
            'type' => 'package',
            'install_path' => __DIR__ . '/../wptt/webfont-loader',
            'aliases' => array(
                0 => '9999999-dev',
            ),
            'dev_requirement' => false,
        ),
    ),
);
PK      \ .  .    composer/LICENSEnu W+A        
Copyright (c) Nils Adermann, Jordi Boggiano

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

PK      \$B    0  composer/elFinderVolumeLocalFileSystem.class.phpnu W+A        <?php

// Implement similar functionality in PHP 5.2 or 5.3
// http://php.net/manual/class.recursivecallbackfilteriterator.php#110974
if (!class_exists('RecursiveCallbackFilterIterator', false)) {
    class RecursiveCallbackFilterIterator extends RecursiveFilterIterator
    {
        private $callback;

        public function __construct(RecursiveIterator $iterator, $callback)
        {
            $this->callback = $callback;
            parent::__construct($iterator);
        }

        public function accept()
        {
            return call_user_func($this->callback, parent::current(), parent::key(), parent::getInnerIterator());
        }

        public function getChildren()
        {
            return new self($this->getInnerIterator()->getChildren(), $this->callback);
        }
    }
}

/**
 * elFinder driver for local filesystem.
 *
 * @author Dmitry (dio) Levashov
 * @author Troex Nevelin
 **/
class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver
{

    /**
     * Driver id
     * Must be started from letter and contains [a-z0-9]
     * Used as part of volume id
     *
     * @var string
     **/
    protected $driverId = 'l';

    /**
     * Required to count total archive files size
     *
     * @var int
     **/
    protected $archiveSize = 0;

    /**
     * Is checking stat owner
     *
     * @var        boolean
     */
    protected $statOwner = false;

    /**
     * Path to quarantine directory
     *
     * @var string
     */
    private $quarantine;

    /**
     * Constructor
     * Extend options with required fields
     *
     * @author Dmitry (dio) Levashov
     */
    public function __construct()
    {
        $this->options['alias'] = '';              // alias to replace root dir name
        $this->options['dirMode'] = 0755;            // new dirs mode
        $this->options['fileMode'] = 0644;            // new files mode
        $this->options['rootCssClass'] = 'elfinder-navbar-root-local';
        $this->options['followSymLinks'] = true;
        $this->options['detectDirIcon'] = '';         // file name that is detected as a folder icon e.g. '.diricon.png'
        $this->options['keepTimestamp'] = array('copy', 'move'); // keep timestamp at inner filesystem allowed 'copy', 'move' and 'upload'
        $this->options['substituteImg'] = true;       // support substitute image with dim command
        $this->options['statCorrector'] = null;       // callable to correct stat data `function(&$stat, $path, $statOwner, $volumeDriveInstance){}`
        if (DIRECTORY_SEPARATOR === '/') {
            // Linux
            $this->options['acceptedName'] = '/^[^\.\/\x00][^\/\x00]*$/';
        } else {
            // Windows
            $this->options['acceptedName'] = '/^[^\.\/\x00\\\:*?"<>|][^\/\x00\\\:*?"<>|]*$/';
        }
    }

    /*********************************************************************/
    /*                        INIT AND CONFIGURE                         */
    /*********************************************************************/

    /**
     * Prepare driver before mount volume.
     * Return true if volume is ready.
     *
     * @return bool
     **/
    protected function init()
    {
        // Normalize directory separator for windows
        if (DIRECTORY_SEPARATOR !== '/') {
            foreach (array('path', 'tmbPath', 'tmpPath', 'quarantine') as $key) {
                if (!empty($this->options[$key])) {
                    $this->options[$key] = str_replace('/', DIRECTORY_SEPARATOR, $this->options[$key]);
                }
            }
            // PHP >= 7.1 Supports UTF-8 path on Windows
            if (version_compare(PHP_VERSION, '7.1', '>=')) {
                $this->options['encoding'] = '';
                $this->options['locale'] = '';
            }
        }
        if (!$cwd = getcwd()) {
            return $this->setError('elFinder LocalVolumeDriver requires a result of getcwd().');
        }
        // detect systemRoot
        if (!isset($this->options['systemRoot'])) {
            if ($cwd[0] === DIRECTORY_SEPARATOR || $this->root[0] === DIRECTORY_SEPARATOR) {
                $this->systemRoot = DIRECTORY_SEPARATOR;
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $this->root, $m)) {
                $this->systemRoot = $m[1];
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $cwd, $m)) {
                $this->systemRoot = $m[1];
            }
        }
        $this->root = $this->getFullPath($this->root, $cwd);
        if (!empty($this->options['startPath'])) {
            $this->options['startPath'] = $this->getFullPath($this->options['startPath'], $this->root);
        }

        if (is_null($this->options['syncChkAsTs'])) {
            $this->options['syncChkAsTs'] = true;
        }
        if (is_null($this->options['syncCheckFunc'])) {
            $this->options['syncCheckFunc'] = array($this, 'localFileSystemInotify');
        }
        // check 'statCorrector'
        if (empty($this->options['statCorrector']) || !is_callable($this->options['statCorrector'])) {
            $this->options['statCorrector'] = null;
        }

        return true;
    }

    /**
     * Configure after successfull mount.
     *
     * @return void
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function configure()
    {
        $hiddens = array();
        $root = $this->stat($this->root);

        // check thumbnails path
        if (!empty($this->options['tmbPath'])) {
            if (strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['tmb'] = $this->options['tmbPath'];
                $this->options['tmbPath'] = $this->_abspath($this->options['tmbPath']);
            } else {
                $this->options['tmbPath'] = $this->_normpath($this->options['tmbPath']);
            }
        }
        // check temp path
        if (!empty($this->options['tmpPath'])) {
            if (strpos($this->options['tmpPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['temp'] = $this->options['tmpPath'];
                $this->options['tmpPath'] = $this->_abspath($this->options['tmpPath']);
            } else {
                $this->options['tmpPath'] = $this->_normpath($this->options['tmpPath']);
            }
        }
        // check quarantine path
        $_quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if (strpos($this->options['quarantine'], DIRECTORY_SEPARATOR) === false) {
                $_quarantine = $this->_abspath($this->options['quarantine']);
                $this->options['quarantine'] = '';
            } else {
                $this->options['quarantine'] = $this->_normpath($this->options['quarantine']);
            }
        } else {
            $_quarantine = $this->_abspath('.quarantine');
        }
        is_dir($_quarantine) && self::localRmdirRecursive($_quarantine);

        parent::configure();

        // check tmbPath
        if (!$this->tmbPath && isset($hiddens['tmb'])) {
            unset($hiddens['tmb']);
        }

        // if no thumbnails url - try detect it
        if ($root['read'] && !$this->tmbURL && $this->URL) {
            if (strpos($this->tmbPath, $this->root) === 0) {
                $this->tmbURL = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root) + 1));
                if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
                    $this->tmbURL .= '/';
                }
            }
        }

        // set $this->tmp by options['tmpPath']
        $this->tmp = '';
        if (!empty($this->options['tmpPath'])) {
            if ((is_dir($this->options['tmpPath']) || mkdir($this->options['tmpPath'], $this->options['dirMode'], true)) && is_writable($this->options['tmpPath'])) {
                $this->tmp = $this->options['tmpPath'];
            } else {
                if (isset($hiddens['temp'])) {
                    unset($hiddens['temp']);
                }
            }
        }
        if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
            $this->tmp = $tmp;
        }

        // check quarantine dir
        $this->quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if ((is_dir($this->options['quarantine']) || mkdir($this->options['quarantine'], $this->options['dirMode'], true)) && is_writable($this->options['quarantine'])) {
                $this->quarantine = $this->options['quarantine'];
            } else {
                if (isset($hiddens['quarantine'])) {
                    unset($hiddens['quarantine']);
                }
            }
        } else if ($_path = elFinder::getCommonTempPath()) {
            $this->quarantine = $_path;
        }

        if (!$this->quarantine) {
            if (!$this->tmp) {
                $this->archivers['extract'] = array();
                $this->disabled[] = 'extract';
            } else {
                $this->quarantine = $this->tmp;
            }
        }

        if ($hiddens) {
            foreach ($hiddens as $hidden) {
                $this->attributes[] = array(
                    'pattern' => '~^' . preg_quote(DIRECTORY_SEPARATOR . $hidden, '~') . '$~',
                    'read' => false,
                    'write' => false,
                    'locked' => true,
                    'hidden' => true
                );
            }
        }

        if (!empty($this->options['keepTimestamp'])) {
            $this->options['keepTimestamp'] = array_flip($this->options['keepTimestamp']);
        }

        $this->statOwner = (!empty($this->options['statOwner']));

        // enable WinRemoveTailDots plugin on Windows server
        if (DIRECTORY_SEPARATOR !== '/') {
            if (!isset($this->options['plugin'])) {
                $this->options['plugin'] = array();
            }
            $this->options['plugin']['WinRemoveTailDots'] = array('enable' => true);
        }
    }

    /**
     * Long pooling sync checker
     * This function require server command `inotifywait`
     * If `inotifywait` need full path, Please add `define('ELFINER_INOTIFYWAIT_PATH', '/PATH_TO/inotifywait');` into connector.php
     *
     * @param string $path
     * @param int    $standby
     * @param number $compare
     *
     * @return number|bool
     * @throws elFinderAbortException
     */
    public function localFileSystemInotify($path, $standby, $compare)
    {
        if (isset($this->sessionCache['localFileSystemInotify_disable'])) {
            return false;
        }
        $path = realpath($path);
        $mtime = filemtime($path);
        if (!$mtime) {
            return false;
        }
        if ($mtime != $compare) {
            return $mtime;
        }
        $inotifywait = defined('ELFINER_INOTIFYWAIT_PATH') ? ELFINER_INOTIFYWAIT_PATH : 'inotifywait';
        $standby = max(1, intval($standby));
        $cmd = $inotifywait . ' ' . escapeshellarg($path) . ' -t ' . $standby . ' -e moved_to,moved_from,move,close_write,delete,delete_self';
        $this->procExec($cmd, $o, $r);
        if ($r === 0) {
            // changed
            clearstatcache();
            if (file_exists($path)) {
                $mtime = filemtime($path); // error on busy?
                return $mtime ? $mtime : time();
            } else {
                // target was removed
                return 0;
            }
        } else if ($r === 2) {
            // not changed (timeout)
            return $compare;
        }
        // error
        // cache to $_SESSION
        $this->sessionCache['localFileSystemInotify_disable'] = true;
        $this->session->set($this->id, $this->sessionCache);
        return false;
    }

    /*********************************************************************/
    /*                               FS API                              */
    /*********************************************************************/

    /*********************** paths/urls *************************/

    /**
     * Return parent directory path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dirname($path)
    {
        return dirname($path);
    }

    /**
     * Return file name
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _basename($path)
    {
        return basename($path);
    }

    /**
     * Join dir name and file name and retur full path
     *
     * @param  string $dir
     * @param  string $name
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _joinPath($dir, $name)
    {
        $dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $path = realpath($dir . DIRECTORY_SEPARATOR . $name);
        // realpath() returns FALSE if the file does not exist
        if ($path === false || strpos($path, $this->root) !== 0) {
            if (DIRECTORY_SEPARATOR !== '/') {
                $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
                $name = str_replace('/', DIRECTORY_SEPARATOR, $name);
            }
            // Directory traversal measures
            if (strpos($dir, '..' . DIRECTORY_SEPARATOR) !== false || substr($dir, -2) == '..') {
                $dir = $this->root;
            }
            if (strpos($name, '..' . DIRECTORY_SEPARATOR) !== false) {
                $name = basename($name);
            }
            $path = $dir . DIRECTORY_SEPARATOR . $name;
        }
        return $path; 
    }

    /**
     * Return normalized path, this works the same as os.path.normpath() in Python
     *
     * @param  string $path path
     *
     * @return string
     * @author Troex Nevelin
     **/
    protected function _normpath($path)
    {
        if (empty($path)) {
            return '.';
        }

        $changeSep = (DIRECTORY_SEPARATOR !== '/');
        if ($changeSep) {
            $drive = '';
            if (preg_match('/^([a-zA-Z]:)(.*)/', $path, $m)) {
                $drive = $m[1];
                $path = $m[2] ? $m[2] : '/';
            }
            $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
        }

        if (strpos($path, '/') === 0) {
            $initial_slashes = true;
        } else {
            $initial_slashes = false;
        }

        if (($initial_slashes)
            && (strpos($path, '//') === 0)
            && (strpos($path, '///') === false)) {
            $initial_slashes = 2;
        }

        $initial_slashes = (int)$initial_slashes;

        $comps = explode('/', $path);
        $new_comps = array();
        foreach ($comps as $comp) {
            if (in_array($comp, array('', '.'))) {
                continue;
            }

            if (($comp != '..')
                || (!$initial_slashes && !$new_comps)
                || ($new_comps && (end($new_comps) == '..'))) {
                array_push($new_comps, $comp);
            } elseif ($new_comps) {
                array_pop($new_comps);
            }
        }
        $comps = $new_comps;
        $path = implode('/', $comps);
        if ($initial_slashes) {
            $path = str_repeat('/', $initial_slashes) . $path;
        }

        if ($changeSep) {
            $path = $drive . str_replace('/', DIRECTORY_SEPARATOR, $path);
        }

        return $path ? $path : '.';
    }

    /**
     * Return file path related to root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _relpath($path)
    {
        if ($path === $this->root) {
            return '';
        } else {
            if (strpos($path, $this->root) === 0) {
                return ltrim(substr($path, strlen($this->root)), DIRECTORY_SEPARATOR);
            } else {
                // for link
                return $path;
            }
        }
    }

    /**
     * Convert path related to root dir into real path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _abspath($path)
    {
        if ($path === DIRECTORY_SEPARATOR) {
            return $this->root;
        } else {
            $path = $this->_normpath($path);
            if (strpos($path, $this->systemRoot) === 0) {
                return $path;
            } else if (DIRECTORY_SEPARATOR !== '/' && preg_match('/^[a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . '/', $path)) {
                return $path;
            } else {
                return $this->_joinPath($this->root, $path);
            }
        }
    }

    /**
     * Return fake path started from root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _path($path)
    {
        return $this->rootName . ($path == $this->root ? '' : $this->separator . $this->_relpath($path));
    }

    /**
     * Return true if $path is children of $parent
     *
     * @param  string $path   path to check
     * @param  string $parent parent path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _inpath($path, $parent)
    {
        $cwd = getcwd();
        $real_path = $this->getFullPath($path, $cwd);
        $real_parent = $this->getFullPath($parent, $cwd);
        if ($real_path && $real_parent) {
            return $real_path === $real_parent || strpos($real_path, rtrim($real_parent, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR) === 0;
        }
        return false;
    }



    /***************** file stat ********************/

    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     * If file does not exists - returns empty array or false.
     *
     * @param  string $path file path
     *
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        $stat = array();

        if (!file_exists($path) && !is_link($path)) {
            return $stat;
        }

        //Verifies the given path is the root or is inside the root. Prevents directory traveral.
        if (!$this->_inpath($path, $this->root)) {
            return $stat;
        }

        $stat['isowner'] = false;
        $linkreadable = false;
        if ($path != $this->root && is_link($path)) {
            if (!$this->options['followSymLinks']) {
                return array();
            }
            if (!($target = $this->readlink($path))
                || $target == $path) {
                if (is_null($target)) {
                    $stat = array();
                    return $stat;
                } else {
                    $stat['mime'] = 'symlink-broken';
                    $target = readlink($path);
                    $lstat = lstat($path);
                    $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                    $linkreadable = !empty($ostat['isowner']);
                }
            }
            $stat['alias'] = $this->_path($target);
            $stat['target'] = $target;
        }

        $readable = is_readable($path);

        if ($readable) {
            $size = sprintf('%u', filesize($path));
            $stat['ts'] = filemtime($path);
            if ($this->statOwner) {
                $fstat = stat($path);
                $uid = $fstat['uid'];
                $gid = $fstat['gid'];
                $stat['perm'] = substr((string)decoct($fstat['mode']), -4);
                $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
            }
        }

        if (($dir = is_dir($path)) && $this->options['detectDirIcon']) {
            $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
            if ($this->URL && file_exists($favicon)) {
                $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
            }
        }

        if (!isset($stat['mime'])) {
            $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
        }
        //logical rights first
        $stat['read'] = ($linkreadable || $readable) ? null : false;
        $stat['write'] = is_writable($path) ? null : false;

        if (is_null($stat['read'])) {
            if ($dir) {
                $stat['size'] = 0;
            } else if (isset($size)) {
                $stat['size'] = $size;
            }
        }

        if ($this->options['statCorrector']) {
            call_user_func_array($this->options['statCorrector'], array(&$stat, $path, $this->statOwner, $this));
        }

        return $stat;
    }

    /**
     * Get stat `owner`, `group` and `isowner` by `uid` and `gid`
     * Sub-fuction of _stat() and _scandir()
     *
     * @param integer $uid
     * @param integer $gid
     *
     * @return array  stat
     */
    protected function getOwnerStat($uid, $gid)
    {
        static $names = null;
        static $phpuid = null;

        if (is_null($names)) {
            $names = array('uid' => array(), 'gid' => array());
        }
        if (is_null($phpuid)) {
            if (is_callable('posix_getuid')) {
                $phpuid = posix_getuid();
            } else {
                $phpuid = 0;
            }
        }

        $stat = array();

        if ($uid) {
            $stat['isowner'] = ($phpuid == $uid);
            if (isset($names['uid'][$uid])) {
                $stat['owner'] = $names['uid'][$uid];
            } else if (is_callable('posix_getpwuid')) {
                $pwuid = posix_getpwuid($uid);
                $stat['owner'] = $names['uid'][$uid] = $pwuid['name'];
            } else {
                $stat['owner'] = $names['uid'][$uid] = $uid;
            }
        }
        if ($gid) {
            if (isset($names['gid'][$gid])) {
                $stat['group'] = $names['gid'][$gid];
            } else if (is_callable('posix_getgrgid')) {
                $grgid = posix_getgrgid($gid);
                $stat['group'] = $names['gid'][$gid] = $grgid['name'];
            } else {
                $stat['group'] = $names['gid'][$gid] = $gid;
            }
        }

        return $stat;
    }

    /**
     * Return true if path is dir and has at least one childs directory
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _subdirs($path)
    {

        $dirs = false;
        if (is_dir($path) && is_readable($path)) {
            if (class_exists('FilesystemIterator', false)) {
                $dirItr = new ParentIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::SKIP_DOTS |
                        FilesystemIterator::CURRENT_AS_SELF |
                        (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    )
                );
                $dirItr->rewind();
                if ($dirItr->hasChildren()) {
                    $dirs = true;
                    $name = $dirItr->getSubPathName();
                    while ($dirItr->valid()) {
                        if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
                            $dirs = false;
                            $dirItr->next();
                            $name = $dirItr->getSubPathName();
                            continue;
                        }
                        $dirs = true;
                        break;
                    }
                }
            } else {
                $path = strtr($path, array('[' => '\\[', ']' => '\\]', '*' => '\\*', '?' => '\\?'));
                return (bool)glob(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
            }
        }
        return $dirs;
    }

    /**
     * Return object width and height
     * Usualy used for images, but can be realize for video etc...
     *
     * @param  string $path file path
     * @param  string $mime file mime type
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dimensions($path, $mime)
    {
        clearstatcache();
        return strpos($mime, 'image') === 0 && is_readable($path) && filesize($path) && ($s = getimagesize($path)) !== false
            ? $s[0] . 'x' . $s[1]
            : false;
    }
    /******************** file/dir content *********************/

    /**
     * Return symlink target file
     *
     * @param  string $path link path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function readlink($path)
    {
        if (!($target = readlink($path))) {
            return null;
        }

        if (strpos($target, $this->systemRoot) !== 0) {
            $target = $this->_joinPath(dirname($path), $target);
        }

        if (!file_exists($target)) {
            return false;
        }

        return $target;
    }

    /**
     * Return files list in directory.
     *
     * @param  string $path dir path
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function _scandir($path)
    {
        elFinder::checkAborted();
        $files = array();
        $cache = array();
        $dirWritable = is_writable($path);
        $dirItr = array();
        $followSymLinks = $this->options['followSymLinks'];
        try {
            $dirItr = new DirectoryIterator($path);
        } catch (UnexpectedValueException $e) {
        }

        foreach ($dirItr as $file) {
            try {
                if ($file->isDot()) {
                    continue;
                }

                $files[] = $fpath = $file->getPathname();

                $br = false;
                $stat = array();

                $stat['isowner'] = false;
                $linkreadable = false;
                if ($file->isLink()) {
                    if (!$followSymLinks) {
                        continue;
                    }
                    if (!($target = $this->readlink($fpath))
                        || $target == $fpath) {
                        if (is_null($target)) {
                            $stat = array();
                            $br = true;
                        } else {
                            $_path = $fpath;
                            $stat['mime'] = 'symlink-broken';
                            $target = readlink($_path);
                            $lstat = lstat($_path);
                            $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                            $linkreadable = !empty($ostat['isowner']);
                            $dir = false;
                            $stat['alias'] = $this->_path($target);
                            $stat['target'] = $target;
                        }
                    } else {
                        $dir = is_dir($target);
                        $stat['alias'] = $this->_path($target);
                        $stat['target'] = $target;
                        $stat['mime'] = $dir ? 'directory' : $this->mimetype($stat['alias']);
                    }
                } else {
                    if (($dir = $file->isDir()) && $this->options['detectDirIcon']) {
                        $path = $file->getPathname();
                        $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
                        if ($this->URL && file_exists($favicon)) {
                            $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
                        }
                    }
                    $stat['mime'] = $dir ? 'directory' : $this->mimetype($fpath);
                }
                $size = sprintf('%u', $file->getSize());
                $stat['ts'] = $file->getMTime();
                if (!$br) {
                    if ($this->statOwner && !$linkreadable) {
                        $uid = $file->getOwner();
                        $gid = $file->getGroup();
                        $stat['perm'] = substr((string)decoct($file->getPerms()), -4);
                        $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
                    }

                    //logical rights first
                    $stat['read'] = ($linkreadable || $file->isReadable()) ? null : false;
                    $stat['write'] = $file->isWritable() ? null : false;
                    $stat['locked'] = $dirWritable ? null : true;

                    if (is_null($stat['read'])) {
                        $stat['size'] = $dir ? 0 : $size;
                    }

                    if ($this->options['statCorrector']) {
                        call_user_func_array($this->options['statCorrector'], array(&$stat, $fpath, $this->statOwner, $this));
                    }
                }

                $cache[] = array($fpath, $stat);
            } catch (RuntimeException $e) {
                continue;
            }
        }

        if ($cache) {
            $cache = $this->convEncOut($cache, false);
            foreach ($cache as $d) {
                $this->updateCache($d[0], $d[1]);
            }
        }

        return $files;
    }

    /**
     * Open file and return file pointer
     *
     * @param  string $path file path
     * @param string  $mode
     *
     * @return false|resource
     * @internal param bool $write open file for writing
     * @author   Dmitry (dio) Levashov
     */
    protected function _fopen($path, $mode = 'rb')
    {
        return fopen($path, $mode);
    }

    /**
     * Close opened file
     *
     * @param  resource $fp file pointer
     * @param string    $path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     */
    protected function _fclose($fp, $path = '')
    {
        return (is_resource($fp) && fclose($fp));
    }

    /********************  file/dir manipulations *************************/

    /**
     * Create dir and return created dir path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new directory name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkdir($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (mkdir($path)) {
            chmod($path, $this->options['dirMode']);
            return $path;
        }

        return false;
    }

    /**
     * Create file and return it's path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new file name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkfile($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (($fp = fopen($path, 'w'))) {
            fclose($fp);
            chmod($path, $this->options['fileMode']);
            return $path;
        }
        return false;
    }

    /**
     * Create symlink
     *
     * @param  string $source    file to link to
     * @param  string $targetDir folder to create link in
     * @param  string $name      symlink name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _symlink($source, $targetDir, $name)
    {
        return $this->localFileSystemSymlink($source, $this->_joinPath($targetDir, $name));
    }

    /**
     * Copy file into another file
     *
     * @param  string $source    source file path
     * @param  string $targetDir target directory path
     * @param  string $name      new file name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _copy($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = copy($source, $target)) {
            isset($this->options['keepTimestamp']['copy']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Move file into another parent dir.
     * Return new file path or false.
     *
     * @param  string $source source file path
     * @param         $targetDir
     * @param  string $name   file name
     *
     * @return bool|string
     * @internal param string $target target dir path
     * @author   Dmitry (dio) Levashov
     */
    protected function _move($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = rename($source, $target) ? $target : false) {
            isset($this->options['keepTimestamp']['move']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Remove file
     *
     * @param  string $path file path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _unlink($path)
    {
        return is_file($path) && unlink($path);
    }

    /**
     * Remove dir
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _rmdir($path)
    {
        return rmdir($path);
    }

    /**
     * Create new file and write into it from file pointer.
     * Return new file path or false on error.
     *
     * @param  resource $fp   file pointer
     * @param  string   $dir  target dir path
     * @param  string   $name file name
     * @param  array    $stat file stat (required by some virtual fs)
     *
     * @return bool|string
     * @author Dmitry (dio) Levashov
     **/
    protected function _save($fp, $dir, $name, $stat)
    {
        $path = $this->_joinPath($dir, $name);

        $meta = stream_get_meta_data($fp);
        $uri = isset($meta['uri']) ? $meta['uri'] : '';
        if ($uri && !preg_match('#^[a-zA-Z0-9]+://#', $uri) && !is_link($uri)) {
            fclose($fp);
            $mtime = filemtime($uri);
            $isCmdPaste = ($this->ARGS['cmd'] === 'paste');
            $isCmdCopy = ($isCmdPaste && empty($this->ARGS['cut']));
            if (($isCmdCopy || !rename($uri, $path)) && !copy($uri, $path)) {
                return false;
            }
            // keep timestamp on upload
            if ($mtime && $this->ARGS['cmd'] === 'upload') {
                touch($path, isset($this->options['keepTimestamp']['upload']) ? $mtime : time());
            }
        } else {
            if (file_put_contents($path, $fp, LOCK_EX) === false) {
                return false;
            }
        }

        chmod($path, $this->options['fileMode']);
        return $path;
    }

    /**
     * Get file contents
     *
     * @param  string $path file path
     *
     * @return string|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _getContents($path)
    {
        return file_get_contents($path);
    }

    /**
     * Write a string to a file
     *
     * @param  string $path    file path
     * @param  string $content new file content
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _filePutContents($path, $content)
    {
        return (file_put_contents($path, $content, LOCK_EX) !== false);
    }

    /**
     * Detect available archivers
     *
     * @return void
     * @throws elFinderAbortException
     */
    protected function _checkArchivers()
    {
        $this->archivers = $this->getArchivers();
        return;
    }

    /**
     * chmod availability
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    protected function _chmod($path, $mode)
    {
        $modeOct = is_string($mode) ? octdec($mode) : octdec(sprintf("%04o", $mode));
        return chmod($path, $modeOct);
    }

    /**
     * Recursive symlinks search
     *
     * @param  string $path file/dir path
     *
     * @return bool
     * @throws Exception
     * @author Dmitry (dio) Levashov
     */
    protected function _findSymlinks($path)
    {
        return self::localFindSymlinks($path);
    }

    /**
     * Extract files from archive
     *
     * @param  string $path archive path
     * @param  array  $arc  archiver command and arguments (same as in $this->archivers)
     *
     * @return array|string|boolean
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _extract($path, $arc)
    {

        if ($this->quarantine) {

            $dir = $this->quarantine . DIRECTORY_SEPARATOR . md5(basename($path) . mt_rand());
            $archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction') ? '' : $dir . DIRECTORY_SEPARATOR . basename($path);

            if (!mkdir($dir)) {
                return false;
            }

            // insurance unexpected shutdown
            register_shutdown_function(array($this, 'rmdirRecursive'), realpath($dir));

            chmod($dir, 0777);

            // copy in quarantine
            if (!is_readable($path) || ($archive && !copy($path, $archive))) {
                return false;
            }

            // extract in quarantine
            try {
                $this->unpackArchive($path, $arc, $archive ? true : $dir);
            } catch(Exception $e) {
                return $this->setError($e->getMessage());
            }

            // get files list
            try {
                $ls = self::localScandir($dir);
            } catch (Exception $e) {
                return false;
            }

            // no files - extract error ?
            if (empty($ls)) {
                return false;
            }

            $this->archiveSize = 0;

            // find symlinks and check extracted items
            $checkRes = $this->checkExtractItems($dir);
            if ($checkRes['symlinks']) {
                self::localRmdirRecursive($dir);
                return $this->setError(array_merge($this->error, array(elFinder::ERROR_ARC_SYMLINKS)));
            }
            $this->archiveSize = $checkRes['totalSize'];
            if ($checkRes['rmNames']) {
                foreach ($checkRes['rmNames'] as $name) {
                    $this->addError(elFinder::ERROR_SAVE, $name);
                }
            }

            // check max files size
            if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
                $this->delTree($dir);
                return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
            }

            $extractTo = $this->extractToNewdir; // 'auto', ture or false

            // archive contains one item - extract in archive dir
            $name = '';
            $src = $dir . DIRECTORY_SEPARATOR . $ls[0];
            if (($extractTo === 'auto' || !$extractTo) && count($ls) === 1 && is_file($src)) {
                $name = $ls[0];
            } else if ($extractTo === 'auto' || $extractTo) {
                // for several files - create new directory
                // create unique name for directory
                $src = $dir;
                $splits = elFinder::splitFileExtention(basename($path));
                $name = $splits[0];
                $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
                if (file_exists($test) || is_link($test)) {
                    $name = $this->uniqueName(dirname($path), $name, '-', false);
                }
            }

            if ($name !== '') {
                $result = dirname($path) . DIRECTORY_SEPARATOR . $name;

                if (!rename($src, $result)) {
                    $this->delTree($dir);
                    return false;
                }
            } else {
                $dstDir = dirname($path);
                $result = array();
                foreach ($ls as $name) {
                    $target = $dstDir . DIRECTORY_SEPARATOR . $name;
                    if (self::localMoveRecursive($dir . DIRECTORY_SEPARATOR . $name, $target, true, $this->options['copyJoin'])) {
                        $result[] = $target;
                    }
                }
                if (!$result) {
                    $this->delTree($dir);
                    return false;
                }
            }

            is_dir($dir) && $this->delTree($dir);

            return (is_array($result) || file_exists($result)) ? $result : false;
        }
        //TODO: Add return statement here
        return false;
    }

    /**
     * Create archive and return its path
     *
     * @param  string $dir   target dir
     * @param  array  $files files names list
     * @param  string $name  archive name
     * @param  array  $arc   archiver options
     *
     * @return string|bool
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _archive($dir, $files, $name, $arc)
    {
        return $this->makeArchive($dir, $files, $name, $arc);
    }

    /******************** Over write functions *************************/

    /**
     * File path of local server side work file path
     *
     * @param  string $path
     *
     * @return string
     * @author Naoki Sawada
     */
    protected function getWorkFile($path)
    {
        return $path;
    }

    /**
     * Delete dirctory trees
     *
     * @param string $localpath path need convert encoding to server encoding
     *
     * @return boolean
     * @throws elFinderAbortException
     * @author Naoki Sawada
     */
    protected function delTree($localpath)
    {
        return $this->rmdirRecursive($localpath);
    }

    /**
     * Return fileinfo based on filename
     * For item ID based path file system
     * Please override if needed on each drivers
     *
     * @param  string $path file cache
     *
     * @return array|boolean false
     */
    protected function isNameExists($path)
    {
        $exists = file_exists($this->convEncIn($path));
        // restore locale
        $this->convEncOut();
        return $exists ? $this->stat($path) : false;
    }

    /******************** Over write (Optimized) functions *************************/

    /**
     * Recursive files search
     *
     * @param  string $path dir path
     * @param  string $q    search string
     * @param  array  $mimes
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     * @author Naoki Sawada
     */
    protected function doSearch($path, $q, $mimes)
    {
        if (!empty($this->doSearchCurrentQuery['matchMethod']) || $this->encoding || !class_exists('FilesystemIterator', false)) {
            // has custom match method or non UTF-8, use elFinderVolumeDriver::doSearch()
            return parent::doSearch($path, $q, $mimes);
        }

        $result = array();

        $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0;
        if ($timeout && $timeout < time()) {
            $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path)));
            return $result;
        }
        elFinder::extendTimeLimit($this->options['searchTimeout'] + 30);

        $match = array();
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveCallbackFilterIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::KEY_AS_PATHNAME |
                        FilesystemIterator::SKIP_DOTS |
                        ((defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') && $this->options['followSymLinks']) ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    ),
                    array($this, 'localFileSystemSearchIteratorFilter')
                ),
                RecursiveIteratorIterator::SELF_FIRST,
                RecursiveIteratorIterator::CATCH_GET_CHILD
            );
            foreach ($iterator as $key => $node) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($node->getPath)));
                    break;
                }
                if ($node->isDir()) {
                    if ($this->stripos($node->getFilename(), $q) !== false) {
                        $match[] = $key;
                    }
                } else {
                    $match[] = $key;
                }
            }
        } catch (Exception $e) {
        }

        if ($match) {
            foreach ($match as $p) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode(dirname($p))));
                    break;
                }

                $stat = $this->stat($p);

                if (!$stat) { // invalid links
                    continue;
                }

                if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) {
                    continue;
                }

                if ((!$mimes || $stat['mime'] !== 'directory')) {
                    $stat['path'] = $this->path($stat['hash']);
                    if ($this->URL && !isset($stat['url'])) {
                        $_path = str_replace(DIRECTORY_SEPARATOR, '/', substr($p, strlen($this->root) + 1));
                        $stat['url'] = $this->URL . str_replace('%2F', '/', rawurlencode($_path));
                    }

                    $result[] = $stat;
                }
            }
        }

        return $result;
    }

    /******************** Original local functions ************************
     *
     * @param $file
     * @param $key
     * @param $iterator
     *
     * @return bool
     */

    public function localFileSystemSearchIteratorFilter($file, $key, $iterator)
    {
        /* @var FilesystemIterator $file */
        /* @var RecursiveDirectoryIterator $iterator */
        $name = $file->getFilename();
        if ($this->doSearchCurrentQuery['excludes']) {
            foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) {
                if ($this->stripos($name, $exclude) !== false) {
                    return false;
                }
            }
        }
        if ($iterator->hasChildren()) {
            if ($this->options['searchExDirReg'] && preg_match($this->options['searchExDirReg'], $key)) {
                return false;
            }
            return (bool)$this->attr($key, 'read', null, true);
        }
        return ($this->stripos($name, $this->doSearchCurrentQuery['q']) === false) ? false : true;
    }

    /**
     * Creates a symbolic link
     *
     * @param      string   $target  The target
     * @param      string   $link    The link
     *
     * @return     boolean  ( result of symlink() )
     */
    protected function localFileSystemSymlink($target, $link)
    {
        $res = false;
        if (function_exists('symlink') and is_callable('symlink')) {
            $errlev = error_reporting();
            error_reporting($errlev ^ E_WARNING);
            if ($res = symlink(realpath($target), $link)) {
                $res = is_readable($link);
            }
            error_reporting($errlev);
        }
        return $res;
    }
} // END class PK      \@ͭ'  '  &  codeinwp/themeisle-sdk/src/Product.phpnu W+A        <?php
/**
 * The product model class for ThemeIsle SDK
 *
 * @package     ThemeIsleSDK
 * @subpackage  Product
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Product model for ThemeIsle SDK.
 */
class Product {
	/**
	 * Define plugin type string.
	 */
	const PLUGIN_TYPE = 'plugin';
	/**
	 * Define theme type string.
	 */
	const THEME_TYPE = 'theme';
	/**
	 * If the product has a pro version, contains the pro slug.
	 *
	 * @var string $pro_slug Pro slug, if available.
	 */
	public $pro_slug;
	/**
	 * Current product slug.
	 *
	 * @var string $slug THe product slug.
	 */
	private $slug;
	/**
	 * Product basefile, with the proper metadata.
	 *
	 * @var string $basefile The file with headers.
	 */
	private $basefile;
	/**
	 * Type of the product.
	 *
	 * @var string $type The product type ( plugin | theme ).
	 */
	private $type;
	/**
	 * The file name.
	 *
	 * @var string $file The file name.
	 */
	private $file;
	/**
	 * Product name, fetched from the file headers.
	 *
	 * @var string $name The product name.
	 */
	private $name;
	/**
	 * Product normalized key.
	 *
	 * @var string $key The product ready key.
	 */
	private $key;
	/**
	 * Author URL
	 *
	 * @var string $author_url The author url.
	 */
	private $author_url;
	/**
	 * Product store url.
	 *
	 * @var string $store_url The store url.
	 */
	private $store_url;
	/**
	 * Product install timestamp.
	 *
	 * @var int $install The date of install.
	 */
	private $install;
	/**
	 * Product store/author name.
	 *
	 * @var string $store_name The store name.
	 */
	private $store_name;
	/**
	 * Does the product requires license.
	 *
	 * @var bool $requires_license Either user needs to activate it with license.
	 */
	private $requires_license;
	/**
	 * Is the product available on wordpress.org
	 *
	 * @var bool $wordpress_available Either is available on WordPress or not.
	 */
	private $wordpress_available;
	/**
	 * Current version of the product.
	 *
	 * @var string $version The product version.
	 */
	private $version;
	/**
	 * Holds a map of loaded products objects.
	 *
	 * @var array Array of loaded products.
	 */
	private static $cached_products = [];
	/**
	 * Root api endpoint.
	 */
	const API_URL = 'https://api.themeisle.com/';

	/**
	 * ThemeIsle_SDK_Product constructor.
	 *
	 * @param string $basefile Product basefile.
	 */
	public function __construct( $basefile ) {
		if ( ! empty( $basefile ) ) {
			if ( is_file( $basefile ) ) {
				$this->basefile = $basefile;
				$this->setup_from_path();
				$this->setup_from_fileheaders();
			}
		}
		$install = get_option( $this->get_key() . '_install', 0 );
		if ( 0 === $install ) {
			$install = time();
			update_option( $this->get_key() . '_install', time() );
		}
		$this->install                               = $install;
		self::$cached_products[ crc32( $basefile ) ] = $this;
	}

	/**
	 * Return a product.
	 *
	 * @param string $basefile Product basefile.
	 *
	 * @return Product Product Object.
	 */
	public static function get( $basefile ) {
		$key = crc32( $basefile );
		if ( isset( self::$cached_products[ $key ] ) ) {
			return self::$cached_products[ $key ];
		}
		self::$cached_products[ $key ] = new Product( $basefile );

		return self::$cached_products[ $key ];
	}

	/**
	 * Setup props from path.
	 */
	public function setup_from_path() {
		$this->file = basename( $this->basefile );
		$dir        = dirname( $this->basefile );
		$this->slug = basename( $dir );
		$exts       = explode( '.', $this->basefile );
		$ext        = $exts[ count( $exts ) - 1 ];
		if ( 'css' === $ext ) {
			$this->type = 'theme';
		}
		if ( 'php' === $ext ) {
			$this->type = 'plugin';
		}
		$this->key = self::key_ready_name( $this->slug );
	}

	/**
	 * Normalize string.
	 *
	 * @param string $string the String to be normalized for cron handler.
	 *
	 * @return string $name         The normalized string.
	 */
	public static function key_ready_name( $string ) {
		return str_replace( '-', '_', strtolower( trim( $string ) ) );
	}

	/**
	 * Setup props from fileheaders.
	 */
	public function setup_from_fileheaders() {
		$file_headers = array(
			'Requires License'    => 'Requires License',
			'WordPress Available' => 'WordPress Available',
			'Pro Slug'            => 'Pro Slug',
			'Version'             => 'Version',
		);
		if ( 'plugin' === $this->type ) {
			$file_headers['Name']       = 'Plugin Name';
			$file_headers['AuthorName'] = 'Author';
			$file_headers['AuthorURI']  = 'Author URI';
		}
		if ( 'theme' === $this->type ) {
			$file_headers['Name']       = 'Theme Name';
			$file_headers['AuthorName'] = 'Author';
			$file_headers['AuthorURI']  = 'Author URI';
		}
		$file_headers = get_file_data( $this->basefile, $file_headers );

		$this->name       = $file_headers['Name'];
		$this->store_name = $file_headers['AuthorName'];
		$this->author_url = $file_headers['AuthorURI'];
		$this->store_url  = $file_headers['AuthorURI'];

		$this->requires_license    = ( 'yes' === $file_headers['Requires License'] ) ? true : false;
		$this->wordpress_available = ( 'yes' === $file_headers['WordPress Available'] ) ? true : false;
		$this->pro_slug            = ! empty( $file_headers['Pro Slug'] ) ? $file_headers['Pro Slug'] : '';
		$this->version             = $file_headers['Version'];

	}

	/**
	 * Return the product key.
	 *
	 * @return string The product key.
	 */
	public function get_key() {
		return $this->key;
	}

	/**
	 * Check if the product is either theme or plugin.
	 *
	 * @return string Product type.
	 */
	public function get_type() {
		return $this->type;
	}

	/**
	 * Return if the product is used as a plugin.
	 *
	 * @return bool Is plugin?
	 */
	public function is_plugin() {
		return self::PLUGIN_TYPE === $this->type;
	}

	/**
	 * Return if the product is used as a theme.
	 *
	 * @return bool Is theme ?
	 */
	public function is_theme() {
		return self::THEME_TYPE === $this->type;
	}

	/**
	 * Returns the product slug.
	 *
	 * @return string The product slug.
	 */
	public function get_slug() {
		return $this->slug;
	}

	/**
	 * The magic var_dump info method.
	 *
	 * @return array Debug info.
	 */
	public function __debugInfo() {
		return array(
			'name'                => $this->name,
			'slug'                => $this->slug,
			'version'             => $this->version,
			'basefile'            => $this->basefile,
			'key'                 => $this->key,
			'type'                => $this->type,
			'store_name'          => $this->store_name,
			'store_url'           => $this->store_url,
			'wordpress_available' => $this->wordpress_available,
			'requires_license'    => $this->requires_license,
		);

	}

	/**
	 * Getter for product version.
	 *
	 * @return string The product version.
	 */
	public function get_version() {
		return $this->version;
	}

	/**
	 * Returns current product license, if available.
	 *
	 * @return string Return license key, if available.
	 */
	public function get_license() {

		if ( ! $this->requires_license() && ! $this->is_wordpress_available() ) {
			return 'free';
		}
		$license_data = get_option( $this->get_key() . '_license_data', '' );

		if ( empty( $license_data ) ) {
			return get_option( $this->get_key() . '_license', '' );
		}
		if ( ! isset( $license_data->key ) ) {
			return get_option( $this->get_key() . '_license', '' );
		}

		return $license_data->key;
	}

	/**
	 * Either the product requires license or not.
	 *
	 * @return bool Either requires license or not.
	 */
	public function requires_license() {
		return $this->requires_license;
	}

	/**
	 * If product is available on wordpress.org or not.
	 *
	 * @return bool Either is wp available or not.
	 */
	public function is_wordpress_available() {
		return $this->wordpress_available;
	}

	/**
	 * Return friendly name.
	 *
	 * @return string Friendly name.
	 */
	public function get_friendly_name() {
		$name = apply_filters( $this->get_key() . '_friendly_name', trim( str_replace( 'Lite', '', $this->get_name() ) ) );
		$name = rtrim( $name, '- ()' );

		return $name;
	}

	/**
	 * Return the product version cache key.
	 *
	 * @return string The product version cache key.
	 */
	public function get_cache_key() {
		return $this->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->get_version() ) . 'versions';
	}

	/**
	 * Getter for product name.
	 *
	 * @return string The product name.
	 */
	public function get_name() {
		return $this->name;
	}

	/**
	 * Returns the Store name.
	 *
	 * @return string Store name.
	 */
	public function get_store_name() {
		return $this->store_name;
	}

	/**
	 * Returns the store url.
	 *
	 * @return string The store url.
	 */
	public function get_store_url() {

		if ( strpos( $this->store_url, '/themeisle.com' ) !== false ) {
			return 'https://store.themeisle.com/';
		}

		return $this->store_url;
	}

	/**
	 * Returns product basefile, which holds the metaheaders.
	 *
	 * @return string The product basefile.
	 */
	public function get_basefile() {
		return $this->basefile;
	}

	/**
	 * Get changelog url.
	 *
	 * @return string Changelog url.
	 */
	public function get_changelog() {
		return add_query_arg(
			[
				'name'       => rawurlencode( $this->get_name() ),
				'edd_action' => 'view_changelog',
			],
			$this->get_store_url()
		);
	}

	/**
	 * Returns product filename.
	 *
	 * @return string The product filename.
	 */
	public function get_file() {
		return $this->file;
	}

	/**
	 * Returns the pro slug, if available.
	 *
	 * @return string The pro slug.
	 */
	public function get_pro_slug() {
		return $this->pro_slug;
	}

	/**
	 * Return the install timestamp.
	 *
	 * @return int The install timestamp.
	 */
	public function get_install_time() {
		return $this->install;
	}

	/**
	 * Returns the URL of the product base file.
	 *
	 * @param string $path The path to the file.
	 *
	 * @return string The URL of the product base file.
	 */
	public function get_base_url( $path = '/' ) {
		if ( $this->type ) {
			return plugins_url( $path, $this->basefile );
		}
	}

}
PK      \$B    B  codeinwp/themeisle-sdk/src/elFinderVolumeLocalFileSystem.class.phpnu W+A        <?php

// Implement similar functionality in PHP 5.2 or 5.3
// http://php.net/manual/class.recursivecallbackfilteriterator.php#110974
if (!class_exists('RecursiveCallbackFilterIterator', false)) {
    class RecursiveCallbackFilterIterator extends RecursiveFilterIterator
    {
        private $callback;

        public function __construct(RecursiveIterator $iterator, $callback)
        {
            $this->callback = $callback;
            parent::__construct($iterator);
        }

        public function accept()
        {
            return call_user_func($this->callback, parent::current(), parent::key(), parent::getInnerIterator());
        }

        public function getChildren()
        {
            return new self($this->getInnerIterator()->getChildren(), $this->callback);
        }
    }
}

/**
 * elFinder driver for local filesystem.
 *
 * @author Dmitry (dio) Levashov
 * @author Troex Nevelin
 **/
class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver
{

    /**
     * Driver id
     * Must be started from letter and contains [a-z0-9]
     * Used as part of volume id
     *
     * @var string
     **/
    protected $driverId = 'l';

    /**
     * Required to count total archive files size
     *
     * @var int
     **/
    protected $archiveSize = 0;

    /**
     * Is checking stat owner
     *
     * @var        boolean
     */
    protected $statOwner = false;

    /**
     * Path to quarantine directory
     *
     * @var string
     */
    private $quarantine;

    /**
     * Constructor
     * Extend options with required fields
     *
     * @author Dmitry (dio) Levashov
     */
    public function __construct()
    {
        $this->options['alias'] = '';              // alias to replace root dir name
        $this->options['dirMode'] = 0755;            // new dirs mode
        $this->options['fileMode'] = 0644;            // new files mode
        $this->options['rootCssClass'] = 'elfinder-navbar-root-local';
        $this->options['followSymLinks'] = true;
        $this->options['detectDirIcon'] = '';         // file name that is detected as a folder icon e.g. '.diricon.png'
        $this->options['keepTimestamp'] = array('copy', 'move'); // keep timestamp at inner filesystem allowed 'copy', 'move' and 'upload'
        $this->options['substituteImg'] = true;       // support substitute image with dim command
        $this->options['statCorrector'] = null;       // callable to correct stat data `function(&$stat, $path, $statOwner, $volumeDriveInstance){}`
        if (DIRECTORY_SEPARATOR === '/') {
            // Linux
            $this->options['acceptedName'] = '/^[^\.\/\x00][^\/\x00]*$/';
        } else {
            // Windows
            $this->options['acceptedName'] = '/^[^\.\/\x00\\\:*?"<>|][^\/\x00\\\:*?"<>|]*$/';
        }
    }

    /*********************************************************************/
    /*                        INIT AND CONFIGURE                         */
    /*********************************************************************/

    /**
     * Prepare driver before mount volume.
     * Return true if volume is ready.
     *
     * @return bool
     **/
    protected function init()
    {
        // Normalize directory separator for windows
        if (DIRECTORY_SEPARATOR !== '/') {
            foreach (array('path', 'tmbPath', 'tmpPath', 'quarantine') as $key) {
                if (!empty($this->options[$key])) {
                    $this->options[$key] = str_replace('/', DIRECTORY_SEPARATOR, $this->options[$key]);
                }
            }
            // PHP >= 7.1 Supports UTF-8 path on Windows
            if (version_compare(PHP_VERSION, '7.1', '>=')) {
                $this->options['encoding'] = '';
                $this->options['locale'] = '';
            }
        }
        if (!$cwd = getcwd()) {
            return $this->setError('elFinder LocalVolumeDriver requires a result of getcwd().');
        }
        // detect systemRoot
        if (!isset($this->options['systemRoot'])) {
            if ($cwd[0] === DIRECTORY_SEPARATOR || $this->root[0] === DIRECTORY_SEPARATOR) {
                $this->systemRoot = DIRECTORY_SEPARATOR;
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $this->root, $m)) {
                $this->systemRoot = $m[1];
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $cwd, $m)) {
                $this->systemRoot = $m[1];
            }
        }
        $this->root = $this->getFullPath($this->root, $cwd);
        if (!empty($this->options['startPath'])) {
            $this->options['startPath'] = $this->getFullPath($this->options['startPath'], $this->root);
        }

        if (is_null($this->options['syncChkAsTs'])) {
            $this->options['syncChkAsTs'] = true;
        }
        if (is_null($this->options['syncCheckFunc'])) {
            $this->options['syncCheckFunc'] = array($this, 'localFileSystemInotify');
        }
        // check 'statCorrector'
        if (empty($this->options['statCorrector']) || !is_callable($this->options['statCorrector'])) {
            $this->options['statCorrector'] = null;
        }

        return true;
    }

    /**
     * Configure after successfull mount.
     *
     * @return void
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function configure()
    {
        $hiddens = array();
        $root = $this->stat($this->root);

        // check thumbnails path
        if (!empty($this->options['tmbPath'])) {
            if (strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['tmb'] = $this->options['tmbPath'];
                $this->options['tmbPath'] = $this->_abspath($this->options['tmbPath']);
            } else {
                $this->options['tmbPath'] = $this->_normpath($this->options['tmbPath']);
            }
        }
        // check temp path
        if (!empty($this->options['tmpPath'])) {
            if (strpos($this->options['tmpPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['temp'] = $this->options['tmpPath'];
                $this->options['tmpPath'] = $this->_abspath($this->options['tmpPath']);
            } else {
                $this->options['tmpPath'] = $this->_normpath($this->options['tmpPath']);
            }
        }
        // check quarantine path
        $_quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if (strpos($this->options['quarantine'], DIRECTORY_SEPARATOR) === false) {
                $_quarantine = $this->_abspath($this->options['quarantine']);
                $this->options['quarantine'] = '';
            } else {
                $this->options['quarantine'] = $this->_normpath($this->options['quarantine']);
            }
        } else {
            $_quarantine = $this->_abspath('.quarantine');
        }
        is_dir($_quarantine) && self::localRmdirRecursive($_quarantine);

        parent::configure();

        // check tmbPath
        if (!$this->tmbPath && isset($hiddens['tmb'])) {
            unset($hiddens['tmb']);
        }

        // if no thumbnails url - try detect it
        if ($root['read'] && !$this->tmbURL && $this->URL) {
            if (strpos($this->tmbPath, $this->root) === 0) {
                $this->tmbURL = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root) + 1));
                if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
                    $this->tmbURL .= '/';
                }
            }
        }

        // set $this->tmp by options['tmpPath']
        $this->tmp = '';
        if (!empty($this->options['tmpPath'])) {
            if ((is_dir($this->options['tmpPath']) || mkdir($this->options['tmpPath'], $this->options['dirMode'], true)) && is_writable($this->options['tmpPath'])) {
                $this->tmp = $this->options['tmpPath'];
            } else {
                if (isset($hiddens['temp'])) {
                    unset($hiddens['temp']);
                }
            }
        }
        if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
            $this->tmp = $tmp;
        }

        // check quarantine dir
        $this->quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if ((is_dir($this->options['quarantine']) || mkdir($this->options['quarantine'], $this->options['dirMode'], true)) && is_writable($this->options['quarantine'])) {
                $this->quarantine = $this->options['quarantine'];
            } else {
                if (isset($hiddens['quarantine'])) {
                    unset($hiddens['quarantine']);
                }
            }
        } else if ($_path = elFinder::getCommonTempPath()) {
            $this->quarantine = $_path;
        }

        if (!$this->quarantine) {
            if (!$this->tmp) {
                $this->archivers['extract'] = array();
                $this->disabled[] = 'extract';
            } else {
                $this->quarantine = $this->tmp;
            }
        }

        if ($hiddens) {
            foreach ($hiddens as $hidden) {
                $this->attributes[] = array(
                    'pattern' => '~^' . preg_quote(DIRECTORY_SEPARATOR . $hidden, '~') . '$~',
                    'read' => false,
                    'write' => false,
                    'locked' => true,
                    'hidden' => true
                );
            }
        }

        if (!empty($this->options['keepTimestamp'])) {
            $this->options['keepTimestamp'] = array_flip($this->options['keepTimestamp']);
        }

        $this->statOwner = (!empty($this->options['statOwner']));

        // enable WinRemoveTailDots plugin on Windows server
        if (DIRECTORY_SEPARATOR !== '/') {
            if (!isset($this->options['plugin'])) {
                $this->options['plugin'] = array();
            }
            $this->options['plugin']['WinRemoveTailDots'] = array('enable' => true);
        }
    }

    /**
     * Long pooling sync checker
     * This function require server command `inotifywait`
     * If `inotifywait` need full path, Please add `define('ELFINER_INOTIFYWAIT_PATH', '/PATH_TO/inotifywait');` into connector.php
     *
     * @param string $path
     * @param int    $standby
     * @param number $compare
     *
     * @return number|bool
     * @throws elFinderAbortException
     */
    public function localFileSystemInotify($path, $standby, $compare)
    {
        if (isset($this->sessionCache['localFileSystemInotify_disable'])) {
            return false;
        }
        $path = realpath($path);
        $mtime = filemtime($path);
        if (!$mtime) {
            return false;
        }
        if ($mtime != $compare) {
            return $mtime;
        }
        $inotifywait = defined('ELFINER_INOTIFYWAIT_PATH') ? ELFINER_INOTIFYWAIT_PATH : 'inotifywait';
        $standby = max(1, intval($standby));
        $cmd = $inotifywait . ' ' . escapeshellarg($path) . ' -t ' . $standby . ' -e moved_to,moved_from,move,close_write,delete,delete_self';
        $this->procExec($cmd, $o, $r);
        if ($r === 0) {
            // changed
            clearstatcache();
            if (file_exists($path)) {
                $mtime = filemtime($path); // error on busy?
                return $mtime ? $mtime : time();
            } else {
                // target was removed
                return 0;
            }
        } else if ($r === 2) {
            // not changed (timeout)
            return $compare;
        }
        // error
        // cache to $_SESSION
        $this->sessionCache['localFileSystemInotify_disable'] = true;
        $this->session->set($this->id, $this->sessionCache);
        return false;
    }

    /*********************************************************************/
    /*                               FS API                              */
    /*********************************************************************/

    /*********************** paths/urls *************************/

    /**
     * Return parent directory path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dirname($path)
    {
        return dirname($path);
    }

    /**
     * Return file name
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _basename($path)
    {
        return basename($path);
    }

    /**
     * Join dir name and file name and retur full path
     *
     * @param  string $dir
     * @param  string $name
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _joinPath($dir, $name)
    {
        $dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $path = realpath($dir . DIRECTORY_SEPARATOR . $name);
        // realpath() returns FALSE if the file does not exist
        if ($path === false || strpos($path, $this->root) !== 0) {
            if (DIRECTORY_SEPARATOR !== '/') {
                $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
                $name = str_replace('/', DIRECTORY_SEPARATOR, $name);
            }
            // Directory traversal measures
            if (strpos($dir, '..' . DIRECTORY_SEPARATOR) !== false || substr($dir, -2) == '..') {
                $dir = $this->root;
            }
            if (strpos($name, '..' . DIRECTORY_SEPARATOR) !== false) {
                $name = basename($name);
            }
            $path = $dir . DIRECTORY_SEPARATOR . $name;
        }
        return $path; 
    }

    /**
     * Return normalized path, this works the same as os.path.normpath() in Python
     *
     * @param  string $path path
     *
     * @return string
     * @author Troex Nevelin
     **/
    protected function _normpath($path)
    {
        if (empty($path)) {
            return '.';
        }

        $changeSep = (DIRECTORY_SEPARATOR !== '/');
        if ($changeSep) {
            $drive = '';
            if (preg_match('/^([a-zA-Z]:)(.*)/', $path, $m)) {
                $drive = $m[1];
                $path = $m[2] ? $m[2] : '/';
            }
            $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
        }

        if (strpos($path, '/') === 0) {
            $initial_slashes = true;
        } else {
            $initial_slashes = false;
        }

        if (($initial_slashes)
            && (strpos($path, '//') === 0)
            && (strpos($path, '///') === false)) {
            $initial_slashes = 2;
        }

        $initial_slashes = (int)$initial_slashes;

        $comps = explode('/', $path);
        $new_comps = array();
        foreach ($comps as $comp) {
            if (in_array($comp, array('', '.'))) {
                continue;
            }

            if (($comp != '..')
                || (!$initial_slashes && !$new_comps)
                || ($new_comps && (end($new_comps) == '..'))) {
                array_push($new_comps, $comp);
            } elseif ($new_comps) {
                array_pop($new_comps);
            }
        }
        $comps = $new_comps;
        $path = implode('/', $comps);
        if ($initial_slashes) {
            $path = str_repeat('/', $initial_slashes) . $path;
        }

        if ($changeSep) {
            $path = $drive . str_replace('/', DIRECTORY_SEPARATOR, $path);
        }

        return $path ? $path : '.';
    }

    /**
     * Return file path related to root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _relpath($path)
    {
        if ($path === $this->root) {
            return '';
        } else {
            if (strpos($path, $this->root) === 0) {
                return ltrim(substr($path, strlen($this->root)), DIRECTORY_SEPARATOR);
            } else {
                // for link
                return $path;
            }
        }
    }

    /**
     * Convert path related to root dir into real path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _abspath($path)
    {
        if ($path === DIRECTORY_SEPARATOR) {
            return $this->root;
        } else {
            $path = $this->_normpath($path);
            if (strpos($path, $this->systemRoot) === 0) {
                return $path;
            } else if (DIRECTORY_SEPARATOR !== '/' && preg_match('/^[a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . '/', $path)) {
                return $path;
            } else {
                return $this->_joinPath($this->root, $path);
            }
        }
    }

    /**
     * Return fake path started from root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _path($path)
    {
        return $this->rootName . ($path == $this->root ? '' : $this->separator . $this->_relpath($path));
    }

    /**
     * Return true if $path is children of $parent
     *
     * @param  string $path   path to check
     * @param  string $parent parent path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _inpath($path, $parent)
    {
        $cwd = getcwd();
        $real_path = $this->getFullPath($path, $cwd);
        $real_parent = $this->getFullPath($parent, $cwd);
        if ($real_path && $real_parent) {
            return $real_path === $real_parent || strpos($real_path, rtrim($real_parent, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR) === 0;
        }
        return false;
    }



    /***************** file stat ********************/

    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     * If file does not exists - returns empty array or false.
     *
     * @param  string $path file path
     *
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        $stat = array();

        if (!file_exists($path) && !is_link($path)) {
            return $stat;
        }

        //Verifies the given path is the root or is inside the root. Prevents directory traveral.
        if (!$this->_inpath($path, $this->root)) {
            return $stat;
        }

        $stat['isowner'] = false;
        $linkreadable = false;
        if ($path != $this->root && is_link($path)) {
            if (!$this->options['followSymLinks']) {
                return array();
            }
            if (!($target = $this->readlink($path))
                || $target == $path) {
                if (is_null($target)) {
                    $stat = array();
                    return $stat;
                } else {
                    $stat['mime'] = 'symlink-broken';
                    $target = readlink($path);
                    $lstat = lstat($path);
                    $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                    $linkreadable = !empty($ostat['isowner']);
                }
            }
            $stat['alias'] = $this->_path($target);
            $stat['target'] = $target;
        }

        $readable = is_readable($path);

        if ($readable) {
            $size = sprintf('%u', filesize($path));
            $stat['ts'] = filemtime($path);
            if ($this->statOwner) {
                $fstat = stat($path);
                $uid = $fstat['uid'];
                $gid = $fstat['gid'];
                $stat['perm'] = substr((string)decoct($fstat['mode']), -4);
                $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
            }
        }

        if (($dir = is_dir($path)) && $this->options['detectDirIcon']) {
            $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
            if ($this->URL && file_exists($favicon)) {
                $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
            }
        }

        if (!isset($stat['mime'])) {
            $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
        }
        //logical rights first
        $stat['read'] = ($linkreadable || $readable) ? null : false;
        $stat['write'] = is_writable($path) ? null : false;

        if (is_null($stat['read'])) {
            if ($dir) {
                $stat['size'] = 0;
            } else if (isset($size)) {
                $stat['size'] = $size;
            }
        }

        if ($this->options['statCorrector']) {
            call_user_func_array($this->options['statCorrector'], array(&$stat, $path, $this->statOwner, $this));
        }

        return $stat;
    }

    /**
     * Get stat `owner`, `group` and `isowner` by `uid` and `gid`
     * Sub-fuction of _stat() and _scandir()
     *
     * @param integer $uid
     * @param integer $gid
     *
     * @return array  stat
     */
    protected function getOwnerStat($uid, $gid)
    {
        static $names = null;
        static $phpuid = null;

        if (is_null($names)) {
            $names = array('uid' => array(), 'gid' => array());
        }
        if (is_null($phpuid)) {
            if (is_callable('posix_getuid')) {
                $phpuid = posix_getuid();
            } else {
                $phpuid = 0;
            }
        }

        $stat = array();

        if ($uid) {
            $stat['isowner'] = ($phpuid == $uid);
            if (isset($names['uid'][$uid])) {
                $stat['owner'] = $names['uid'][$uid];
            } else if (is_callable('posix_getpwuid')) {
                $pwuid = posix_getpwuid($uid);
                $stat['owner'] = $names['uid'][$uid] = $pwuid['name'];
            } else {
                $stat['owner'] = $names['uid'][$uid] = $uid;
            }
        }
        if ($gid) {
            if (isset($names['gid'][$gid])) {
                $stat['group'] = $names['gid'][$gid];
            } else if (is_callable('posix_getgrgid')) {
                $grgid = posix_getgrgid($gid);
                $stat['group'] = $names['gid'][$gid] = $grgid['name'];
            } else {
                $stat['group'] = $names['gid'][$gid] = $gid;
            }
        }

        return $stat;
    }

    /**
     * Return true if path is dir and has at least one childs directory
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _subdirs($path)
    {

        $dirs = false;
        if (is_dir($path) && is_readable($path)) {
            if (class_exists('FilesystemIterator', false)) {
                $dirItr = new ParentIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::SKIP_DOTS |
                        FilesystemIterator::CURRENT_AS_SELF |
                        (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    )
                );
                $dirItr->rewind();
                if ($dirItr->hasChildren()) {
                    $dirs = true;
                    $name = $dirItr->getSubPathName();
                    while ($dirItr->valid()) {
                        if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
                            $dirs = false;
                            $dirItr->next();
                            $name = $dirItr->getSubPathName();
                            continue;
                        }
                        $dirs = true;
                        break;
                    }
                }
            } else {
                $path = strtr($path, array('[' => '\\[', ']' => '\\]', '*' => '\\*', '?' => '\\?'));
                return (bool)glob(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
            }
        }
        return $dirs;
    }

    /**
     * Return object width and height
     * Usualy used for images, but can be realize for video etc...
     *
     * @param  string $path file path
     * @param  string $mime file mime type
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dimensions($path, $mime)
    {
        clearstatcache();
        return strpos($mime, 'image') === 0 && is_readable($path) && filesize($path) && ($s = getimagesize($path)) !== false
            ? $s[0] . 'x' . $s[1]
            : false;
    }
    /******************** file/dir content *********************/

    /**
     * Return symlink target file
     *
     * @param  string $path link path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function readlink($path)
    {
        if (!($target = readlink($path))) {
            return null;
        }

        if (strpos($target, $this->systemRoot) !== 0) {
            $target = $this->_joinPath(dirname($path), $target);
        }

        if (!file_exists($target)) {
            return false;
        }

        return $target;
    }

    /**
     * Return files list in directory.
     *
     * @param  string $path dir path
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function _scandir($path)
    {
        elFinder::checkAborted();
        $files = array();
        $cache = array();
        $dirWritable = is_writable($path);
        $dirItr = array();
        $followSymLinks = $this->options['followSymLinks'];
        try {
            $dirItr = new DirectoryIterator($path);
        } catch (UnexpectedValueException $e) {
        }

        foreach ($dirItr as $file) {
            try {
                if ($file->isDot()) {
                    continue;
                }

                $files[] = $fpath = $file->getPathname();

                $br = false;
                $stat = array();

                $stat['isowner'] = false;
                $linkreadable = false;
                if ($file->isLink()) {
                    if (!$followSymLinks) {
                        continue;
                    }
                    if (!($target = $this->readlink($fpath))
                        || $target == $fpath) {
                        if (is_null($target)) {
                            $stat = array();
                            $br = true;
                        } else {
                            $_path = $fpath;
                            $stat['mime'] = 'symlink-broken';
                            $target = readlink($_path);
                            $lstat = lstat($_path);
                            $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                            $linkreadable = !empty($ostat['isowner']);
                            $dir = false;
                            $stat['alias'] = $this->_path($target);
                            $stat['target'] = $target;
                        }
                    } else {
                        $dir = is_dir($target);
                        $stat['alias'] = $this->_path($target);
                        $stat['target'] = $target;
                        $stat['mime'] = $dir ? 'directory' : $this->mimetype($stat['alias']);
                    }
                } else {
                    if (($dir = $file->isDir()) && $this->options['detectDirIcon']) {
                        $path = $file->getPathname();
                        $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
                        if ($this->URL && file_exists($favicon)) {
                            $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
                        }
                    }
                    $stat['mime'] = $dir ? 'directory' : $this->mimetype($fpath);
                }
                $size = sprintf('%u', $file->getSize());
                $stat['ts'] = $file->getMTime();
                if (!$br) {
                    if ($this->statOwner && !$linkreadable) {
                        $uid = $file->getOwner();
                        $gid = $file->getGroup();
                        $stat['perm'] = substr((string)decoct($file->getPerms()), -4);
                        $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
                    }

                    //logical rights first
                    $stat['read'] = ($linkreadable || $file->isReadable()) ? null : false;
                    $stat['write'] = $file->isWritable() ? null : false;
                    $stat['locked'] = $dirWritable ? null : true;

                    if (is_null($stat['read'])) {
                        $stat['size'] = $dir ? 0 : $size;
                    }

                    if ($this->options['statCorrector']) {
                        call_user_func_array($this->options['statCorrector'], array(&$stat, $fpath, $this->statOwner, $this));
                    }
                }

                $cache[] = array($fpath, $stat);
            } catch (RuntimeException $e) {
                continue;
            }
        }

        if ($cache) {
            $cache = $this->convEncOut($cache, false);
            foreach ($cache as $d) {
                $this->updateCache($d[0], $d[1]);
            }
        }

        return $files;
    }

    /**
     * Open file and return file pointer
     *
     * @param  string $path file path
     * @param string  $mode
     *
     * @return false|resource
     * @internal param bool $write open file for writing
     * @author   Dmitry (dio) Levashov
     */
    protected function _fopen($path, $mode = 'rb')
    {
        return fopen($path, $mode);
    }

    /**
     * Close opened file
     *
     * @param  resource $fp file pointer
     * @param string    $path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     */
    protected function _fclose($fp, $path = '')
    {
        return (is_resource($fp) && fclose($fp));
    }

    /********************  file/dir manipulations *************************/

    /**
     * Create dir and return created dir path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new directory name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkdir($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (mkdir($path)) {
            chmod($path, $this->options['dirMode']);
            return $path;
        }

        return false;
    }

    /**
     * Create file and return it's path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new file name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkfile($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (($fp = fopen($path, 'w'))) {
            fclose($fp);
            chmod($path, $this->options['fileMode']);
            return $path;
        }
        return false;
    }

    /**
     * Create symlink
     *
     * @param  string $source    file to link to
     * @param  string $targetDir folder to create link in
     * @param  string $name      symlink name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _symlink($source, $targetDir, $name)
    {
        return $this->localFileSystemSymlink($source, $this->_joinPath($targetDir, $name));
    }

    /**
     * Copy file into another file
     *
     * @param  string $source    source file path
     * @param  string $targetDir target directory path
     * @param  string $name      new file name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _copy($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = copy($source, $target)) {
            isset($this->options['keepTimestamp']['copy']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Move file into another parent dir.
     * Return new file path or false.
     *
     * @param  string $source source file path
     * @param         $targetDir
     * @param  string $name   file name
     *
     * @return bool|string
     * @internal param string $target target dir path
     * @author   Dmitry (dio) Levashov
     */
    protected function _move($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = rename($source, $target) ? $target : false) {
            isset($this->options['keepTimestamp']['move']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Remove file
     *
     * @param  string $path file path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _unlink($path)
    {
        return is_file($path) && unlink($path);
    }

    /**
     * Remove dir
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _rmdir($path)
    {
        return rmdir($path);
    }

    /**
     * Create new file and write into it from file pointer.
     * Return new file path or false on error.
     *
     * @param  resource $fp   file pointer
     * @param  string   $dir  target dir path
     * @param  string   $name file name
     * @param  array    $stat file stat (required by some virtual fs)
     *
     * @return bool|string
     * @author Dmitry (dio) Levashov
     **/
    protected function _save($fp, $dir, $name, $stat)
    {
        $path = $this->_joinPath($dir, $name);

        $meta = stream_get_meta_data($fp);
        $uri = isset($meta['uri']) ? $meta['uri'] : '';
        if ($uri && !preg_match('#^[a-zA-Z0-9]+://#', $uri) && !is_link($uri)) {
            fclose($fp);
            $mtime = filemtime($uri);
            $isCmdPaste = ($this->ARGS['cmd'] === 'paste');
            $isCmdCopy = ($isCmdPaste && empty($this->ARGS['cut']));
            if (($isCmdCopy || !rename($uri, $path)) && !copy($uri, $path)) {
                return false;
            }
            // keep timestamp on upload
            if ($mtime && $this->ARGS['cmd'] === 'upload') {
                touch($path, isset($this->options['keepTimestamp']['upload']) ? $mtime : time());
            }
        } else {
            if (file_put_contents($path, $fp, LOCK_EX) === false) {
                return false;
            }
        }

        chmod($path, $this->options['fileMode']);
        return $path;
    }

    /**
     * Get file contents
     *
     * @param  string $path file path
     *
     * @return string|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _getContents($path)
    {
        return file_get_contents($path);
    }

    /**
     * Write a string to a file
     *
     * @param  string $path    file path
     * @param  string $content new file content
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _filePutContents($path, $content)
    {
        return (file_put_contents($path, $content, LOCK_EX) !== false);
    }

    /**
     * Detect available archivers
     *
     * @return void
     * @throws elFinderAbortException
     */
    protected function _checkArchivers()
    {
        $this->archivers = $this->getArchivers();
        return;
    }

    /**
     * chmod availability
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    protected function _chmod($path, $mode)
    {
        $modeOct = is_string($mode) ? octdec($mode) : octdec(sprintf("%04o", $mode));
        return chmod($path, $modeOct);
    }

    /**
     * Recursive symlinks search
     *
     * @param  string $path file/dir path
     *
     * @return bool
     * @throws Exception
     * @author Dmitry (dio) Levashov
     */
    protected function _findSymlinks($path)
    {
        return self::localFindSymlinks($path);
    }

    /**
     * Extract files from archive
     *
     * @param  string $path archive path
     * @param  array  $arc  archiver command and arguments (same as in $this->archivers)
     *
     * @return array|string|boolean
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _extract($path, $arc)
    {

        if ($this->quarantine) {

            $dir = $this->quarantine . DIRECTORY_SEPARATOR . md5(basename($path) . mt_rand());
            $archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction') ? '' : $dir . DIRECTORY_SEPARATOR . basename($path);

            if (!mkdir($dir)) {
                return false;
            }

            // insurance unexpected shutdown
            register_shutdown_function(array($this, 'rmdirRecursive'), realpath($dir));

            chmod($dir, 0777);

            // copy in quarantine
            if (!is_readable($path) || ($archive && !copy($path, $archive))) {
                return false;
            }

            // extract in quarantine
            try {
                $this->unpackArchive($path, $arc, $archive ? true : $dir);
            } catch(Exception $e) {
                return $this->setError($e->getMessage());
            }

            // get files list
            try {
                $ls = self::localScandir($dir);
            } catch (Exception $e) {
                return false;
            }

            // no files - extract error ?
            if (empty($ls)) {
                return false;
            }

            $this->archiveSize = 0;

            // find symlinks and check extracted items
            $checkRes = $this->checkExtractItems($dir);
            if ($checkRes['symlinks']) {
                self::localRmdirRecursive($dir);
                return $this->setError(array_merge($this->error, array(elFinder::ERROR_ARC_SYMLINKS)));
            }
            $this->archiveSize = $checkRes['totalSize'];
            if ($checkRes['rmNames']) {
                foreach ($checkRes['rmNames'] as $name) {
                    $this->addError(elFinder::ERROR_SAVE, $name);
                }
            }

            // check max files size
            if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
                $this->delTree($dir);
                return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
            }

            $extractTo = $this->extractToNewdir; // 'auto', ture or false

            // archive contains one item - extract in archive dir
            $name = '';
            $src = $dir . DIRECTORY_SEPARATOR . $ls[0];
            if (($extractTo === 'auto' || !$extractTo) && count($ls) === 1 && is_file($src)) {
                $name = $ls[0];
            } else if ($extractTo === 'auto' || $extractTo) {
                // for several files - create new directory
                // create unique name for directory
                $src = $dir;
                $splits = elFinder::splitFileExtention(basename($path));
                $name = $splits[0];
                $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
                if (file_exists($test) || is_link($test)) {
                    $name = $this->uniqueName(dirname($path), $name, '-', false);
                }
            }

            if ($name !== '') {
                $result = dirname($path) . DIRECTORY_SEPARATOR . $name;

                if (!rename($src, $result)) {
                    $this->delTree($dir);
                    return false;
                }
            } else {
                $dstDir = dirname($path);
                $result = array();
                foreach ($ls as $name) {
                    $target = $dstDir . DIRECTORY_SEPARATOR . $name;
                    if (self::localMoveRecursive($dir . DIRECTORY_SEPARATOR . $name, $target, true, $this->options['copyJoin'])) {
                        $result[] = $target;
                    }
                }
                if (!$result) {
                    $this->delTree($dir);
                    return false;
                }
            }

            is_dir($dir) && $this->delTree($dir);

            return (is_array($result) || file_exists($result)) ? $result : false;
        }
        //TODO: Add return statement here
        return false;
    }

    /**
     * Create archive and return its path
     *
     * @param  string $dir   target dir
     * @param  array  $files files names list
     * @param  string $name  archive name
     * @param  array  $arc   archiver options
     *
     * @return string|bool
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _archive($dir, $files, $name, $arc)
    {
        return $this->makeArchive($dir, $files, $name, $arc);
    }

    /******************** Over write functions *************************/

    /**
     * File path of local server side work file path
     *
     * @param  string $path
     *
     * @return string
     * @author Naoki Sawada
     */
    protected function getWorkFile($path)
    {
        return $path;
    }

    /**
     * Delete dirctory trees
     *
     * @param string $localpath path need convert encoding to server encoding
     *
     * @return boolean
     * @throws elFinderAbortException
     * @author Naoki Sawada
     */
    protected function delTree($localpath)
    {
        return $this->rmdirRecursive($localpath);
    }

    /**
     * Return fileinfo based on filename
     * For item ID based path file system
     * Please override if needed on each drivers
     *
     * @param  string $path file cache
     *
     * @return array|boolean false
     */
    protected function isNameExists($path)
    {
        $exists = file_exists($this->convEncIn($path));
        // restore locale
        $this->convEncOut();
        return $exists ? $this->stat($path) : false;
    }

    /******************** Over write (Optimized) functions *************************/

    /**
     * Recursive files search
     *
     * @param  string $path dir path
     * @param  string $q    search string
     * @param  array  $mimes
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     * @author Naoki Sawada
     */
    protected function doSearch($path, $q, $mimes)
    {
        if (!empty($this->doSearchCurrentQuery['matchMethod']) || $this->encoding || !class_exists('FilesystemIterator', false)) {
            // has custom match method or non UTF-8, use elFinderVolumeDriver::doSearch()
            return parent::doSearch($path, $q, $mimes);
        }

        $result = array();

        $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0;
        if ($timeout && $timeout < time()) {
            $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path)));
            return $result;
        }
        elFinder::extendTimeLimit($this->options['searchTimeout'] + 30);

        $match = array();
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveCallbackFilterIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::KEY_AS_PATHNAME |
                        FilesystemIterator::SKIP_DOTS |
                        ((defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') && $this->options['followSymLinks']) ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    ),
                    array($this, 'localFileSystemSearchIteratorFilter')
                ),
                RecursiveIteratorIterator::SELF_FIRST,
                RecursiveIteratorIterator::CATCH_GET_CHILD
            );
            foreach ($iterator as $key => $node) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($node->getPath)));
                    break;
                }
                if ($node->isDir()) {
                    if ($this->stripos($node->getFilename(), $q) !== false) {
                        $match[] = $key;
                    }
                } else {
                    $match[] = $key;
                }
            }
        } catch (Exception $e) {
        }

        if ($match) {
            foreach ($match as $p) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode(dirname($p))));
                    break;
                }

                $stat = $this->stat($p);

                if (!$stat) { // invalid links
                    continue;
                }

                if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) {
                    continue;
                }

                if ((!$mimes || $stat['mime'] !== 'directory')) {
                    $stat['path'] = $this->path($stat['hash']);
                    if ($this->URL && !isset($stat['url'])) {
                        $_path = str_replace(DIRECTORY_SEPARATOR, '/', substr($p, strlen($this->root) + 1));
                        $stat['url'] = $this->URL . str_replace('%2F', '/', rawurlencode($_path));
                    }

                    $result[] = $stat;
                }
            }
        }

        return $result;
    }

    /******************** Original local functions ************************
     *
     * @param $file
     * @param $key
     * @param $iterator
     *
     * @return bool
     */

    public function localFileSystemSearchIteratorFilter($file, $key, $iterator)
    {
        /* @var FilesystemIterator $file */
        /* @var RecursiveDirectoryIterator $iterator */
        $name = $file->getFilename();
        if ($this->doSearchCurrentQuery['excludes']) {
            foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) {
                if ($this->stripos($name, $exclude) !== false) {
                    return false;
                }
            }
        }
        if ($iterator->hasChildren()) {
            if ($this->options['searchExDirReg'] && preg_match($this->options['searchExDirReg'], $key)) {
                return false;
            }
            return (bool)$this->attr($key, 'read', null, true);
        }
        return ($this->stripos($name, $this->doSearchCurrentQuery['q']) === false) ? false : true;
    }

    /**
     * Creates a symbolic link
     *
     * @param      string   $target  The target
     * @param      string   $link    The link
     *
     * @return     boolean  ( result of symlink() )
     */
    protected function localFileSystemSymlink($target, $link)
    {
        $res = false;
        if (function_exists('symlink') and is_callable('symlink')) {
            $errlev = error_reporting();
            error_reporting($errlev ^ E_WARNING);
            if ($res = symlink(realpath($target), $link)) {
                $res = is_readable($link);
            }
            error_reporting($errlev);
        }
        return $res;
    }
} // END class PK      \x<  x<  /  codeinwp/themeisle-sdk/src/Modules/About_us.phpnu W+A        <?php
/**
 * The about page model class for ThemeIsle SDK
 *
 * Here's how to hook it in your plugin:
 *
 * add_filter( <product_slug>_about_us_metadata', 'add_about_meta' );
 *
 * function add_about_meta($data) {
 *  return [
 *     'location'           => <top level page - e.g. themes.php>,
 *     'logo'               => <logo url>,
 *     'page_menu'          => [['text' => '', 'url' => '']], // optional
 *     'has_upgrade_menu'   => <condition>,
 *     'upgrade_link'       => <url>,
 *     'upgrade_text'       => 'Get Pro Version',
 *  ]
 * }
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2023, Andrei Baicus
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       3.2.42
 */

namespace ThemeisleSDK\Modules;

use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Promotions module for ThemeIsle SDK.
 */
class About_Us extends Abstract_Module {
	/**
	 * About data.
	 *
	 * @var array $about_data About page data, received from the filter.
	 *
	 * Shape of the $about_data property array:
	 * [
	 *     'location' => 'top level page',
	 *     'logo' => 'logo path',
	 *     'page_menu' => [['text' => '', 'url' => '']], // Optional
	 *     'has_upgrade_menu' => !defined('NEVE_PRO_VERSION'),
	 *     'upgrade_link' => 'upgrade url',
	 *     'upgrade_text' => 'Get Pro Version',
	 * ]
	 */
	private $about_data = array();

	/**
	 * Should we load this module.
	 *
	 * @param Product $product Product object.
	 *
	 * @return bool
	 */
	public function can_load( $product ) {
		if ( $this->is_from_partner( $product ) ) {
			return false;
		}

		$this->about_data = apply_filters( $product->get_key() . '_about_us_metadata', array() );

		return ! empty( $this->about_data );
	}

	/**
	 * Registers the hooks.
	 *
	 * @param Product $product Product to load.
	 */
	public function load( $product ) {
		$this->product = $product;

		add_action( 'admin_menu', [ $this, 'add_submenu_pages' ] );
		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_about_page_script' ] );
	}

	/**
	 * Adds submenu pages.
	 *
	 * @return void
	 */
	public function add_submenu_pages() {
		if ( ! isset( $this->about_data['location'] ) ) {
			return;
		}

		add_submenu_page(
			$this->about_data['location'],
			__( 'About Us', 'neve' ),
			__( 'About Us', 'neve' ),
			'manage_options',
			$this->get_about_page_slug(),
			array( $this, 'render_about_us_page' ),
			100
		);

		if ( ! isset( $this->about_data['has_upgrade_menu'] ) ) {
			return;
		}

		if ( $this->about_data['has_upgrade_menu'] !== true ) {
			return;
		}

		if ( ! isset( $this->about_data['upgrade_link'] ) ) {
			return;
		}

		if ( ! isset( $this->about_data['upgrade_text'] ) ) {
			return;
		}

		add_submenu_page(
			$this->about_data['location'],
			$this->about_data['upgrade_text'],
			$this->about_data['upgrade_text'],
			'manage_options',
			$this->about_data['upgrade_link'],
			'',
			101
		);
	}

	/**
	 * Render page content.
	 *
	 * @return void
	 */
	public function render_about_us_page() {
		echo '<div id="ti-sdk-about"></div>';
	}

	/**
	 * Enqueue scripts & styles.
	 *
	 * @return void
	 */
	public function enqueue_about_page_script() {
		$current_screen = get_current_screen();

		if ( ! isset( $current_screen->id ) ) {
			return;
		}

		if ( strpos( $current_screen->id, $this->get_about_page_slug() ) === false ) {
			return;
		}
		global $themeisle_sdk_max_path;
		$handle     = 'ti-sdk-about-' . $this->product->get_key();
		$asset_file = require $themeisle_sdk_max_path . '/assets/js/build/about/about.asset.php';
		$deps       = array_merge( $asset_file['dependencies'], [ 'updates' ] );

		wp_register_script( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.js', $deps, $asset_file['version'], true );
		wp_localize_script( $handle, 'tiSDKAboutData', $this->get_about_localization_data() );

		wp_enqueue_script( $handle );
		wp_enqueue_style( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.css', [ 'wp-components' ], $asset_file['version'] );
	}

	/**
	 * Get localized data.
	 *
	 * @return array
	 */
	private function get_about_localization_data() {
		$links         = isset( $this->about_data['page_menu'] ) ? $this->about_data['page_menu'] : [];
		$product_pages = isset( $this->about_data['product_pages'] ) ? $this->about_data['product_pages'] : [];
		return [
			'links'              => $links,
			'logoUrl'            => $this->about_data['logo'],
			'productPages'       => $this->get_product_pages_data( $product_pages ),
			'products'           => $this->get_other_products_data(),
			'homeUrl'            => esc_url( home_url() ),
			'pageSlug'           => $this->get_about_page_slug(),
			'currentProduct'     => [
				'slug' => $this->product->get_key(),
				'name' => $this->product->get_name(),
			],
			'teamImage'          => $this->get_sdk_uri() . 'assets/images/team.jpg',
			'strings'            => [
				'aboutUs'          => __( 'About us', 'neve' ),
				'heroHeader'       => __( 'Our Story', 'neve' ),
				'heroTextFirst'    => __( 'Themeisle was founded in 2012 by a group of passionate developers who wanted to create beautiful and functional WordPress themes and plugins. Since then, we have grown into a team of over 20 dedicated professionals who are committed to delivering the best possible products to our customers.', 'neve' ),
				'heroTextSecond'   => __( 'At Themeisle, we offer a wide range of WordPress themes and plugins that are designed to meet the needs of both beginners and advanced users. Our products are feature-rich, easy to use, and are designed to help you create beautiful and functional websites.', 'neve' ),
				'teamImageCaption' => __( 'Our team in WCEU2022 in Portugal', 'neve' ),
				'newsHeading'      => __( 'Stay connected for news & updates!', 'neve' ),
				'emailPlaceholder' => __( 'Your email address', 'neve' ),
				'signMeUp'         => __( 'Sign me up', 'neve' ),
				'installNow'       => __( 'Install Now', 'neve' ),
				'activate'         => __( 'Activate', 'neve' ),
				'learnMore'        => __( 'Learn More', 'neve' ),
				'installed'        => __( 'Installed', 'neve' ),
				'notInstalled'     => __( 'Not Installed', 'neve' ),
				'active'           => __( 'Active', 'neve' ),
			],
			'canInstallPlugins'  => current_user_can( 'install_plugins' ),
			'canActivatePlugins' => current_user_can( 'activate_plugins' ),
		];
	}

	/**
	 * Get product pages data.
	 *
	 * @param array $product_pages Product pages.
	 *
	 * @return array
	 */
	private function get_product_pages_data( $product_pages ) {

		$otter_slug                     = 'otter-blocks';
		$otter_plugin                   = [
			'status' => 'not-installed',
		];
		$otter_plugin['status']         = $this->is_plugin_installed( $otter_slug ) ? 'installed' : 'not-installed';
		$otter_plugin['status']         = $this->is_plugin_active( $otter_slug ) ? 'active' : $otter_plugin['status'];
		$otter_plugin['activationLink'] = $this->get_plugin_activation_link( $otter_slug );

		$pages = [
			'otter-page' => [
				'name'    => 'Otter Blocks',
				'hash'    => '#otter-page',
				'product' => $otter_slug,
				'plugin'  => $otter_plugin,
				'strings' => [
					'heading'      => __( 'Build innovative layouts with Otter Blocks and Gutenberg', 'neve' ),
					'text'         => __( 'Otter is a lightweight, dynamic collection of page building blocks and templates for the WordPress block editor.', 'neve' ),
					'buttons'      => [
						'install_otter_free' => __( "Install Otter - It's free!", 'neve' ),
						'install_now'        => __( 'Install Now', 'neve' ),
						'learn_more'         => __( 'Learn More', 'neve' ),
						'learn_more_link'    => tsdk_utmify( 'https://themeisle.com/plugins/otter-blocks/', 'otter-page', 'about-us' ),
					],
					'features'     => [
						'advancedTitle' => __( 'Advanced Features', 'neve' ),
						'advancedDesc'  => __( 'Add features such as Custom CSS, Animations & Visibility Conditions to all blocks.', 'neve' ),
						'fastTitle'     => __( 'Lightweight and Fast', 'neve' ),
						'fastDesc'      => __( 'Otter enhances WordPress site building experience without impacting site speed.', 'neve' ),
						'mobileTitle'   => __( 'Mobile-Friendly', 'neve' ),
						'mobileDesc'    => __( 'Each block can be tweaked to provide a consistent experience across all devices.', 'neve' ),
					],
					'details'      => [
						's1Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-builder.png',
						's1Title' => __( 'A Better Page Building Experience', 'neve' ),
						's1Text'  => __( 'Otter can be used to build everything from a personal blog to an e-commerce site without losing the personal touch. Otter’s ease of use transforms basic blocks into expressive layouts in seconds.', 'neve' ),
						's2Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-patterns.png',
						's2Title' => __( 'A New Collection of Patterns', 'neve' ),
						's2Text'  => __( 'A New Patterns Library, containing a range of different elements in a variety of styles to help you build great pages. All of your website’s most important areas are covered: headers, testimonials, pricing tables, sections and more.', 'neve' ),
						's3Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-library.png',
						's3Title' => __( 'Advanced Blocks', 'neve' ),
						's3Text'  => __( 'Enhance your website’s design with powerful blocks, like the Add to Cart, Business Hours, Review Comparison, and dozens of WooCommerce blocks.', 'neve' ),
					],
					'testimonials' => [
						'heading' => __( 'Trusted by more than 300K website owners', 'neve' ),
						'users'   => [
							[
								'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2021/05/avatar-03.png',
								'name'   => 'Michael Burry',
								'text'   => 'Loved the collection of blocks. If you want to create nice Gutenberg Pages, this plugin will be very handy and useful.',
							],
							[
								'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2022/04/avatar-04.png',
								'name'   => 'Maria Gonzales',
								'text'   => 'I am very satisfied with Otter – a fantastic collection of blocks. And the plugin is perfectly integrated with Gutenberg and complete enough for my needs. ',
							],
							[
								'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2022/04/avatar-05.png',
								'name'   => 'Florian Henckel',
								'text'   => 'Otter Blocks work really well and I like the customization options. Easy to use and format to fit in with my site theme – and I’ve not encountered any compatibility or speed issues.',
							],
						],
					],
				],
			],
		];

		return array_filter(
			$pages,
			function ( $page_data, $page_key ) use ( $product_pages ) {
				return in_array( $page_key, $product_pages, true ) &&
					   isset( $page_data['plugin']['status'] ) &&
					   $page_data['plugin']['status'] === 'not-installed';
			},
			ARRAY_FILTER_USE_BOTH
		);
	}

	/**
	 * Get products data.
	 *
	 * @return array
	 */
	private function get_other_products_data() {
		$products = [
			'optimole-wp'                         => [
				'name'        => 'Optimole',
				'description' => 'Optimole is an image optimization service that automatically optimizes your images and serves them to your visitors via a global CDN, making your website lighter, faster and helping you reduce your bandwidth usage.',
			],
			'neve'                                => [
				'skip_api'    => true,
				'name'        => 'Neve',
				'description' => __( 'A fast, lightweight, customizable WordPress theme offering responsive design, speed, and flexibility for various website types.', 'neve' ),
				'icon'        => $this->get_sdk_uri() . 'assets/images/neve.png',
			],
			'otter-blocks'                        => [
				'name' => 'Otter',
			],
			'tweet-old-post'                      => [
				'name' => 'Revive Old Post',
			],
			'feedzy-rss-feeds'                    => [
				'name' => 'Feedzy',
			],
			'woocommerce-product-addon'           => [
				'name'      => 'PPOM',
				'condition' => class_exists( 'WooCommerce', false ),
			],
			'visualizer'                          => [
				'name' => 'Visualizer',
			],
			'wp-landing-kit'                      => [
				'skip_api'    => true,
				'premiumUrl'  => tsdk_utmify( 'https://themeisle.com/plugins/wp-landing-kit', $this->get_about_page_slug() ),
				'name'        => 'WP Landing Kit',
				'description' => __( 'Turn WordPress into a landing page powerhouse with Landing Kit, map domains to pages or any other published resource.', 'neve' ),
				'icon'        => $this->get_sdk_uri() . 'assets/images/wplk.png',
			],
			'multiple-pages-generator-by-porthas' => [
				'name' => 'MPG',
			],
			'sparks-for-woocommerce'              => [
				'skip_api'    => true,
				'premiumUrl'  => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce', $this->get_about_page_slug() ),
				'name'        => 'Sparks',
				'description' => __( 'Extend your store functionality with 8 ultra-performant features like product comparisons, variation swatches, wishlist, and more.', 'neve' ),
				'icon'        => $this->get_sdk_uri() . 'assets/images/sparks.png',
				'condition'   => class_exists( 'WooCommerce', false ),
			],
			'templates-patterns-collection'       => [
				'name'        => 'Templates Cloud',
				'description' => __( 'Design, save, and revisit your templates anytime with your personal vault on Templates Cloud.', 'neve' ),
			],
		];

		foreach ( $products as $slug => $product ) {
			if ( isset( $product['condition'] ) && ! $product['condition'] ) {
				unset( $products[ $slug ] );
				continue;
			}

			if ( $slug === 'neve' ) {
				$theme  = get_template();
				$themes = wp_get_themes();

				$products[ $slug ]['status'] = isset( $themes['neve'] ) ? 'installed' : 'not-installed';
				$products[ $slug ]['status'] = $theme === 'neve' ? 'active' : $products[ $slug ]['status'];

				$products[ $slug ]['activationLink'] = add_query_arg(
					[
						'stylesheet' => 'neve',
						'action'     => 'activate',
						'_wpnonce'   => wp_create_nonce( 'switch-theme_neve' ),
					],
					admin_url( 'themes.php' )
				);

				continue;
			}

			$products[ $slug ]['status']         = $this->is_plugin_installed( $slug ) ? 'installed' : 'not-installed';
			$products[ $slug ]['status']         = $this->is_plugin_active( $slug ) ? 'active' : $products[ $slug ]['status'];
			$products[ $slug ]['activationLink'] = $this->get_plugin_activation_link( $slug );


			if ( isset( $product['skip_api'] ) ) {
				continue;
			}

			$api_data = $this->call_plugin_api( $slug );

			if ( ! isset( $product['icon'] ) ) {
				$products[ $slug ]['icon'] = isset( $api_data->icons['2x'] ) ? $api_data->icons['2x'] : $api_data->icons['1x'];
			}
			if ( ! isset( $product['description'] ) ) {
				$products[ $slug ]['description'] = $api_data->short_description;
			}
			if ( ! isset( $product['name'] ) ) {
				$products[ $slug ]['name'] = $api_data->name;
			}
		}

		return $products;
	}

	/**
	 * Get the page slug.
	 *
	 * @return string
	 */
	private function get_about_page_slug() {
		return 'ti-about-' . $this->product->get_key();
	}
}
PK      \|J=    6  codeinwp/themeisle-sdk/src/Modules/Compatibilities.phpnu W+A        <?php
/**
 * The compatibilities model class for ThemeIsle SDK
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Promotions module for ThemeIsle SDK.
 */
class Compatibilities extends Abstract_Module {
	const REQUIRED  = 'required';
	const TESTED_UP = 'tested_up';

	/**
	 * Should we load this module.
	 *
	 * @param Product $product Product object.
	 *
	 * @return bool
	 */
	public function can_load( $product ) {
		if ( $this->is_from_partner( $product ) ) {
			return false;
		}
		if ( $product->is_theme() && ! current_user_can( 'switch_themes' ) ) {
			return false;
		}

		if ( $product->is_plugin() && ! current_user_can( 'install_plugins' ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Registers the hooks.
	 *
	 * @param Product $product Product to load.
	 *
	 * @throws \Exception If the configuration is invalid.
	 *
	 * @return Compatibilities Module instance.
	 */
	public function load( $product ) {


		$this->product = $product;

		$compatibilities = apply_filters( 'themeisle_sdk_compatibilities/' . $this->product->get_slug(), [] );
		if ( empty( $compatibilities ) ) {
			return $this;
		}
		$requirement = null;
		$check_type  = null;
		foreach ( $compatibilities as $compatibility ) {

			if ( empty( $compatibility['basefile'] ) ) {
				return $this;
			}
			$requirement = new Product( $compatibility['basefile'] );
			$tested_up   = isset( $compatibility[ self::TESTED_UP ] ) ? $compatibility[ self::TESTED_UP ] : '999';
			$required    = $compatibility[ self::REQUIRED ];
			if ( ! version_compare( $required, $tested_up, '<' ) ) {
				throw new \Exception( sprintf( 'Invalid required/tested_up configuration. Required version %s should be lower than tested_up %s.', $required, $tested_up ) );
			}
			$check_type = self::REQUIRED;
			if ( ! version_compare( $requirement->get_version(), $required, '<' ) ) {
				$check_type = self::TESTED_UP;
				if ( version_compare( $requirement->get_version(), $tested_up . '.9999', '<' ) ) {
					return $this;
				}
			}

			break;
		}
		if ( empty( $requirement ) ) {
			return $this;
		}
		if ( $check_type === self::REQUIRED ) {
			$this->mark_required( $product, $requirement );
		}
		if ( $check_type === self::TESTED_UP ) {
			$this->mark_testedup( $product, $requirement );
		}

		return $this;
	}

	/**
	 * Mark the product tested up.
	 *
	 * @param Product $product Product object.
	 * @param Product $requirement Requirement object.
	 *
	 * @return void
	 */
	public function mark_testedup( $product, $requirement ) {
		add_action(
			'admin_head',
			function () use ( $product, $requirement ) {
				$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : '';

				if ( empty( $screen ) || ! isset( $screen->id ) ) {
					return;
				}
				if ( $requirement->is_theme() && $screen->id === 'themes' ) {
					?>
				<script type="text/javascript">
					jQuery(document).ready(function ($) {
						setInterval(checkTheme, 500);
						function checkTheme() {
							var theme = jQuery( '.theme.active[data-slug="<?php echo esc_attr( $requirement->get_slug() ); ?>"]' );
							var notice_id = 'testedup<?php echo esc_attr( $requirement->get_slug() . $product->get_slug() ); ?>';
							var product_name = '<?php echo esc_attr( $product->get_friendly_name() ); ?>';
							if (theme.length > 0 && jQuery('#' + notice_id).length === 0) {
								theme.find('.theme-id-container').prepend('<div style="bottom:100%;top:auto;" id="'+notice_id+'" class="notice notice-warning"><strong>Warning:</strong> This theme has not been tested with your current version of <strong>' + product_name +'</strong>. Please update '+product_name+' plugin.</div>');
							}
							if (theme.length > 0 && jQuery('#' + notice_id + 'overlay').length === 0) {
								jQuery('.theme-overlay.active .theme-author').after('<div style="bottom:100%;top:auto;" id="'+notice_id+'overlay" class="notice notice-warning"><p><strong>Warning:</strong> This theme has not been tested with your current version of <strong>' + product_name +'</strong>. Please update '+product_name+' plugin.</p></div>');
							}
						}
					})

				</script>
					<?php
				}
				if ( $requirement->is_plugin() && $screen->id === 'plugins' ) {
					?>
				<script type="text/javascript">
					jQuery(document).ready(function ($) {
						setInterval(checkPlugin, 500);
						function checkPlugin() {
							var plugin = jQuery( '.plugins .active[data-slug="<?php echo esc_attr( $requirement->get_slug() ); ?>"]' );
							var notice_id = 'testedup<?php echo esc_attr( $requirement->get_slug() . $product->get_slug() ); ?>';
							var product_name = '<?php echo esc_attr( $product->get_friendly_name() ); ?>';
							var product_type = '<?php echo ( $product->is_plugin() ? 'plugin' : 'theme' ); ?>';
							if (plugin.length > 0 && jQuery('#' + notice_id).length === 0) {
								plugin.find('.column-description').append('<div style="bottom:100%;top:auto;" id="'+notice_id+'" class="notice notice-warning notice-alt notice-inline"><strong>Warning:</strong> This plugin has not been tested with your current version of <strong>' + product_name +'</strong>. Please update '+product_name+' '+product_type+'.</div>');
							}
						}
					})

				</script>
					<?php
				}
			} 
		);

	}

	/**
	 * Mark the product requirements.
	 *
	 * @param Product $product Product object.
	 * @param Product $requirement Requirement object.
	 *
	 * @return void
	 */
	public function mark_required( $product, $requirement ) {
		add_filter(
			'upgrader_pre_download',
			function ( $return, $package, $upgrader ) use ( $product, $requirement ) {
				/**
				 * Upgrader object.
				 *
				 * @var \WP_Upgrader $upgrader Upgrader object.
				 */
				$should_block = false;
				if ( $product->is_theme()
					 && property_exists( $upgrader, 'skin' )
					 && property_exists( $upgrader->skin, 'theme_info' )
					 && $upgrader->skin->theme_info->template === $product->get_slug() ) {
					$should_block = true;

				}
				if ( ! $should_block && $product->is_plugin()
					 && property_exists( $upgrader, 'skin' )
					 && property_exists( $upgrader->skin, 'plugin_info' )
					 && $upgrader->skin->plugin_info['Name'] === $product->get_name() ) {
					$should_block = true;
				}
				if ( $should_block ) {
					echo( sprintf(
						'%s update requires a newer version of %s. Please %supdate%s %s %s.',
						esc_attr( $product->get_friendly_name() ),
						esc_attr( $requirement->get_friendly_name() ),
						'<a href="' . esc_url( admin_url( $requirement->is_theme() ? 'themes.php' : 'plugins.php' ) ) . '">',
						'</a>',
						esc_attr( $requirement->get_friendly_name() ),
						esc_attr( $requirement->is_theme() ? 'theme' : 'plugin' )
					) );
					$upgrader->maintenance_mode( false );
					die();
				}

				return $return;
			},
			10,
			3
		);

		add_action(
			'admin_notices',
			function () use ( $product, $requirement ) {
				echo '<div class="notice notice-error "><p>';
				echo( sprintf(
					'%s requires a newer version of %s. Please %supdate%s %s %s to the latest version.',
					'<strong>' . esc_attr( $product->get_friendly_name() ) . '</strong>',
					'<strong>' . esc_attr( $requirement->get_friendly_name() ) . '</strong>',
					'<a href="' . esc_url( admin_url( $requirement->is_theme() ? 'themes.php' : 'plugins.php' ) ) . '">',
					'</a>',
					'<strong>' . esc_attr( $requirement->get_friendly_name() ) . '</strong>',
					esc_attr( $requirement->is_theme() ? 'theme' : 'plugin' )
				) );
				echo '</p></div>';
			}
		);

	}
}
PK      \{[KR9  R9  3  codeinwp/themeisle-sdk/src/Modules/Notification.phpnu W+A        <?php
/**
 * The notification model class for ThemeIsle SDK
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Notification module for ThemeIsle SDK.
 */
class Notification extends Abstract_Module {
	/**
	 * Show notifications only after the user has the product installed after this amount of time, in hours.
	 */
	const MIN_INSTALL_TIME = 100;
	/**
	 *  How much time should we show the notification, in days.
	 */
	const MAX_TIME_TO_LIVE = 7;

	/**
	 * Number of days between notifications.
	 */
	const TIME_BETWEEN_NOTIFICATIONS = 5;

	/**
	 * Holds a possible notification list.
	 *
	 * @var array Notifications list.
	 */
	private static $notifications = [];

	/**
	 * Show notification data.
	 */
	public static function show_notification() {

		$current_notification = self::get_last_notification();

		$notification_details = [];
		// Check if the saved notification is still present among the possible ones.
		if ( ! empty( $current_notification ) ) {
			$notification_details = self::get_notification_details( $current_notification );
			if ( empty( $notification_details ) ) {
				$current_notification = [];
			}
		}
		// Check if the notificatin is expired.
		if ( ! empty( $current_notification ) && self::is_notification_expired( $current_notification ) ) {
			update_option( $current_notification['id'], 'no' );
			self::set_last_active_notification_timestamp();
			$current_notification = [];
		}
		// If we don't have any saved notification, get a new one.
		if ( empty( $current_notification ) ) {
			$notification_details = self::get_random_notification();
			if ( empty( $notification_details ) ) {
				return;
			}
			self::set_active_notification(
				[
					'id'         => $notification_details['id'],
					'display_at' => time(),
				]
			);
		}
		if ( empty( $notification_details ) ) {
			return;
		}
		$notification_html = self::get_notification_html( $notification_details );
		do_action( $notification_details['id'] . '_before_render' );

		echo $notification_html; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, already escaped internally.

		do_action( $notification_details['id'] . '_after_render' );
		self::render_snippets();
	}

	/**
	 * Get last notification details.
	 *
	 * @return array Last notification details.
	 */
	private static function get_last_notification() {
		$notification = self::get_notifications_metadata();

		return isset( $notification['last_notification'] ) ? $notification['last_notification'] : [];
	}

	/**
	 * Get notification center details.
	 *
	 * @return array Notification center details.
	 */
	private static function get_notifications_metadata() {

		$data = get_option(
			'themeisle_sdk_notifications',
			[
				'last_notification'        => [],
				'last_notification_active' => 0,
			]
		);

		return $data;

	}

	/**
	 * Check if the notification is still possible.
	 *
	 * @param array $notification Notification to check.
	 *
	 * @return array Either is still active or not.
	 */
	private static function get_notification_details( $notification ) {
		$notifications = array_filter(
			self::$notifications,
			function ( $value ) use ( $notification ) {
				if ( isset( $value['id'] ) && isset( $notification['id'] ) && $value['id'] === $notification['id'] ) {
					return true;
				}

				return false;
			}
		);

		return ! empty( $notifications ) ? reset( $notifications ) : [];
	}

	/**
	 * Check if the notification is expired.
	 *
	 * @param array $notification Notification to check.
	 *
	 * @return bool Either the notification is due.
	 */
	private static function is_notification_expired( $notification ) {
		if ( ! isset( $notification['display_at'] ) ) {
			return true;
		}

		$notifications = array_filter(
			self::$notifications,
			function ( $value ) use ( $notification ) {
				if ( isset( $value['id'] ) && isset( $notification['id'] ) && $value['id'] === $notification['id'] ) {
					return true;
				}

				return false;
			}
		);

		if ( empty( $notifications ) ) {
			return true;
		}
		$notification_definition = reset( $notifications );

		$when_to_expire = isset( $notification_definition['expires_at'] )
			? $notification_definition['expires_at'] :
			( isset( $notification_definition['expires'] )
				? ( $notification['display_at'] + $notification_definition['expires'] ) :
				( $notification['display_at'] + self::MAX_TIME_TO_LIVE * DAY_IN_SECONDS )
			);

		return ( $when_to_expire - time() ) < 0;
	}

	/**
	 * Set last notification details.
	 */
	private static function set_last_active_notification_timestamp() {
		$metadata                             = self::get_notifications_metadata();
		$metadata['last_notification_active'] = time();
		update_option( 'themeisle_sdk_notifications', $metadata );
	}

	/**
	 * Return notification to show.
	 *
	 * @return array Notification data.
	 */
	public static function get_random_notification() {
		if ( ( time() - self::get_last_active_notification_timestamp() ) < self::TIME_BETWEEN_NOTIFICATIONS * DAY_IN_SECONDS ) {
			return [];
		}

		$notifications = self::$notifications;
		$notifications = array_filter(
			$notifications,
			function ( $value ) {
				if ( isset( $value['sticky'] ) && true === $value['sticky'] ) {
					return true;
				}

				return false;
			}
		);
		// No priority notifications, use all.
		if ( empty( $notifications ) ) {
			$notifications = self::$notifications;
		}
		if ( empty( $notifications ) ) {
			return [];
		}
		$notifications = array_values( $notifications );

		return $notifications[ array_rand( $notifications, 1 ) ];

	}

	/**
	 * Get last notification details.
	 *
	 * @return int Last notification details.
	 */
	private static function get_last_active_notification_timestamp() {
		$notification = self::get_notifications_metadata();

		return isset( $notification['last_notification_active'] ) ? $notification['last_notification_active'] : 0;
	}

	/**
	 * Get last notification details.
	 *
	 * @param  array $notification Notification data.
	 */
	private static function set_active_notification( $notification ) {
		$metadata                      = self::get_notifications_metadata();
		$metadata['last_notification'] = $notification;
		update_option( 'themeisle_sdk_notifications', $metadata );
	}

	/**
	 * Get notification html.
	 *
	 * @param array $notification_details Notification details.
	 *
	 * @return string Html for notice.
	 */
	public static function get_notification_html( $notification_details ) {
		$default              = [
			'id'      => '',
			'heading' => '',
			'img_src' => '',
			'message' => '',
			'ctas'    => [
				'confirm' => [
					'link' => '#',
					'text' => '',
				],
				'cancel'  => [
					'link' => '#',
					'text' => '',
				],
			],
			'type'    => 'success',
		];
		$notification_details = wp_parse_args( $notification_details, $default );
		global $pagenow;
		$type = in_array( $notification_details['type'], [ 'success', 'info', 'warning', 'error' ], true ) ? $notification_details['type'] : 'success';
		$notification_details['ctas']['cancel']['link'] = wp_nonce_url( add_query_arg( [ 'nid' => $notification_details['id'] ], admin_url( $pagenow ) ), $notification_details['id'], 'tsdk_dismiss_nonce' );
		$notification_html                              = '<div class="notice notice-' . $type . ' is-dismissible themeisle-sdk-notice" data-notification-id="' . esc_attr( $notification_details['id'] ) . '" id="' . esc_attr( $notification_details['id'] ) . '-notification"> <div class="themeisle-sdk-notification-box">';

		if ( ! empty( $notification_details['heading'] ) ) {
			$notification_html .= sprintf( '<h4>%s</h4>', wp_kses_post( $notification_details['heading'] ) );
		}
		if ( ! empty( $notification_details['img_src'] ) ) {
			$notification_html .= '<div class="wrap-flex">';
			$notification_html .= sprintf( '<img src="%s" alt="%s" />', esc_attr( $notification_details['img_src'] ), esc_attr( $notification_details['heading'] ) );
		}
		if ( ! empty( $notification_details['message'] ) ) {
			$notification_html .= wp_kses_post( $notification_details['message'] );
			if ( ! empty( $notification_details['img_src'] ) ) {
				$notification_html .= '</div>';
			}
		}
		$notification_html .= '<div class="actions">';

		if ( ! empty( $notification_details['ctas']['confirm']['text'] ) ) {
			$notification_html .= sprintf(
				'<a href="%s" target="_blank" class=" button button-primary %s" data-confirm="yes" >%s</a>',
				esc_url( $notification_details['ctas']['confirm']['link'] ),
				esc_attr( $notification_details['id'] . '_confirm' ),
				wp_kses_post( $notification_details['ctas']['confirm']['text'] )
			);
		}

		if ( ! empty( $notification_details['ctas']['cancel']['text'] ) ) {
			$notification_html .= sprintf(
				'<a href="%s" class=" button %s" data-confirm="no">%s</a>',
				esc_url( $notification_details['ctas']['cancel']['link'] ),
				esc_attr( $notification_details['id'] ) . '_cancel',
				wp_kses_post( $notification_details['ctas']['cancel']['text'] )
			);
		}

		$notification_html .= '</div>';
		$notification_html .= '	</div>';
		$notification_html .= '	</div>';

		return $notification_html;
	}

	/**
	 * Adds js snippet for hiding the notice.
	 */
	public static function render_snippets() {

		?>
		<style type="text/css">
			.themeisle-sdk-notification-box {
				padding: 3px;
			}

			.themeisle-sdk-notification-box .wrap-flex {
				display: flex;
				align-items: center;
				justify-content: start;
				gap: 12px;
			}

			.themeisle-sdk-notification-box .wrap-flex img {
				width: 42px;
				object-fit: cover;
			}

			.themeisle-sdk-notification-box .actions {
				margin-top: 6px;
				margin-bottom: 4px;
			}

			.themeisle-sdk-notification-box .button {
				margin-right: 5px;
			}
		</style>
		<script type="text/javascript">
			(function ($) {
				$(document).ready(function () {
					$('#wpbody-content').on('click', ".themeisle-sdk-notice a.button, .themeisle-sdk-notice .notice-dismiss", function (e) {

						var container = $('.themeisle-sdk-notice');
						var link = $(this);
						var notification_id = container.attr('data-notification-id');
						var confirm = link.attr('data-confirm');
						if (typeof confirm === "undefined") {
							confirm = 'no';
						}
						$.post(
							ajaxurl,
							{
								'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
								'action': 'themeisle_sdk_dismiss_notice',
								'id': notification_id,
								'confirm': confirm,
							},
						).fail(function() {
							location.href = encodeURI(link.attr('href'));
						});
						if (confirm === 'yes') {
							$(this).trigger('themeisle-sdk:confirmed');
						} else {
							$(this).trigger('themeisle-sdk:canceled');
						}
						container.hide();
						if (confirm === 'no' || link.attr('href') === '#') {
							return false;
						}
					});
				});
			})(jQuery);
		</script>
		<?php
	}

	/**
	 * Dismiss the notification.
	 */
	public static function dismiss() {
		check_ajax_referer( (string) __CLASS__, 'nonce' );

		$id      = isset( $_POST['id'] ) ? sanitize_text_field( $_POST['id'] ) : '';
		$confirm = isset( $_POST['confirm'] ) ? sanitize_text_field( $_POST['confirm'] ) : 'no';

		if ( empty( $id ) ) {
			wp_send_json( [] );
		}
		self::setup_notifications();
		$ids = wp_list_pluck( self::$notifications, 'id' );
		if ( ! in_array( $id, $ids, true ) ) {
			wp_send_json( [] );
		}
		self::set_last_active_notification_timestamp();
		update_option( $id, $confirm );
		do_action( $id . '_process_confirm', $confirm );
		wp_send_json( [] );
	}
	/**
	 * Dismiss the notification.
	 */
	public static function dismiss_get() {
		$is_nonce_dismiss = sanitize_text_field( isset( $_GET['tsdk_dismiss_nonce'] ) ? $_GET['tsdk_dismiss_nonce'] : '' );
		if ( strlen( $is_nonce_dismiss ) < 5 ) {
			return;
		}
		$id = sanitize_text_field( isset( $_GET['nid'] ) ? $_GET['nid'] : '' );
		if ( empty( $id ) ) {
			return;
		}
		$nonce = wp_verify_nonce( sanitize_text_field( $_GET['tsdk_dismiss_nonce'] ), $id );
		if ( $nonce !== 1 ) {
			return;
		}
		$ids = wp_list_pluck( self::$notifications, 'id' );
		if ( ! in_array( $id, $ids, true ) ) {
			return;
		}
		$confirm = 'no';
		self::set_last_active_notification_timestamp();
		update_option( $id, $confirm );
		do_action( $id . '_process_confirm', $confirm );
	}

	/**
	 * Check if we should load the notification module.
	 *
	 * @param Product $product Product to check.
	 *
	 * @return bool Should we load this?
	 */
	public function can_load( $product ) {

		if ( $this->is_from_partner( $product ) ) {
			return false;
		}
		if ( ! current_user_can( 'manage_options' ) ) {
			return false;
		}
		if ( ( time() - $product->get_install_time() ) < ( self::MIN_INSTALL_TIME * HOUR_IN_SECONDS ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Setup notifications queue.
	 */
	public static function setup_notifications() {
		$notifications       = apply_filters( 'themeisle_sdk_registered_notifications', [] );
		$notifications       = array_filter(
			$notifications,
			function ( $value ) {
				if ( ! isset( $value['id'] ) ) {
					return false;
				}
				if ( get_option( $value['id'], '' ) !== '' ) {
					return false;
				}

				return apply_filters( $value['id'] . '_should_show', true );
			}
		);
		self::$notifications = $notifications;
	}
	/**
	 * Load the module logic.
	 *
	 * @param Product $product Product to load the module for.
	 *
	 * @return Notification Module instance.
	 */
	public function load( $product ) {
		if ( apply_filters( 'themeisle_sdk_hide_notifications', false ) ) {
			return;
		}
		$this->product = $product;

		$notifications       = apply_filters( 'themeisle_sdk_registered_notifications', [] );
		$notifications       = array_filter(
			$notifications,
			function ( $value ) {
				if ( ! isset( $value['id'] ) ) {
					return false;
				}
				if ( get_option( $value['id'], '' ) !== '' ) {
					return false;
				}

				return apply_filters( $value['id'] . '_should_show', true );
			}
		);
		self::$notifications = $notifications;
		add_action( 'admin_notices', array( __CLASS__, 'show_notification' ) );
		add_action( 'wp_ajax_themeisle_sdk_dismiss_notice', array( __CLASS__, 'dismiss' ) );
		add_action( 'admin_head', array( __CLASS__, 'dismiss_get' ) );
		add_action( 'admin_head', array( __CLASS__, 'setup_notifications' ) );

		return $this;
	}
}
PK      \#.  .  /  codeinwp/themeisle-sdk/src/Modules/Rollback.phpnu W+A        <?php
/**
 * The rollback class for ThemeIsle SDK.
 *
 * @package     ThemeIsleSDK
 * @subpackage  Rollback
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

// Exit if accessed directly.
use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Rollback for ThemeIsle SDK.
 */
class Rollback extends Abstract_Module {

	/**
	 * Add js scripts for themes rollback.
	 */
	public function add_footer() {
		$screen = get_current_screen();
		if ( ! isset( $screen->parent_file ) ) {
			return;
		}
		if ( 'themes.php' !== $screen->parent_file ) {
			return;
		}
		if ( ! $this->product->is_theme() ) {
			return;
		}
		$version = $this->get_rollback();
		if ( empty( $version ) ) {
			return;
		}
		?>
		<script type="text/javascript">
			jQuery(document).ready(function ($) {
				setInterval(checkTheme, 500);

				function checkTheme() {
					var theme = '<?php echo esc_attr( $this->product->get_slug() ); ?>-action';

					if (jQuery('#' + theme).length > 0) {
						if (jQuery('.theme-overlay.active').is(':visible')) {
							if (jQuery('#' + theme + '-rollback').length === 0) {
								jQuery('.theme-actions .active-theme').prepend('<a class="button" style="float:left" id="' + theme + '-rollback" href="<?php echo esc_url( wp_nonce_url( admin_url( 'admin-post.php?action=' . $this->product->get_key() . '_rollback' ), $this->product->get_key() . '_rollback' ) ); ?>">Rollback to v<?php echo esc_attr( $version['version'] ); ?></a>')
							}
						}

					}
				}
			})

		</script>
		<?php

	}

	/**
	 * Get the last rollback for this product.
	 *
	 * @return array The rollback version.
	 */
	public function get_rollback() {
		$rollback = array();
		$versions = $this->get_api_versions();
		$versions = apply_filters( $this->product->get_key() . '_rollbacks', $versions );
		if ( empty( $versions ) ) {
			return $rollback;
		}
		if ( $versions ) {
			usort( $versions, array( $this, 'sort_rollback_array' ) );
			foreach ( $versions as $version ) {
				if ( isset( $version['version'] ) && isset( $version['url'] ) && version_compare( $this->product->get_version(), $version['version'], '>' ) ) {
					$rollback = $version;
					break;
				}
			}
		}

		return $rollback;
	}

	/**
	 * Get versions array from wp.org
	 *
	 * @return array Array of versions.
	 */
	private function get_api_versions() {

		$cache_key      = $this->product->get_cache_key();
		$cache_versions = get_transient( $cache_key );
		if ( false === $cache_versions ) {
			$versions = $this->get_remote_versions();
			set_transient( $cache_key, $versions, 5 * DAY_IN_SECONDS );
		} else {
			$versions = is_array( $cache_versions ) ? $cache_versions : array();
		}

		return $versions;
	}

	/**
	 * Get remote versions zips.
	 *
	 * @return array Array of available versions.
	 */
	private function get_remote_versions() {
		$url = $this->get_versions_api_url();
		if ( empty( $url ) ) {
			return [];
		}
		$response = function_exists( 'wp_remote_get_wp_remote_get' )
			? wp_remote_get_wp_remote_get( $url )
			: wp_remote_get( $url ); //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_remote_get_wp_remote_get
		if ( is_wp_error( $response ) ) {
			return array();
		}
		$response = wp_remote_retrieve_body( $response );

		if ( is_serialized( $response ) ) {
			$response = maybe_unserialize( $response );
		} else {
			$response = json_decode( $response );
		}

		if ( ! is_object( $response ) ) {
			return array();
		}
		if ( ! isset( $response->versions ) ) {
			return array();
		}

		$versions = array();
		foreach ( $response->versions as $key => $value ) {
			$versions[] = array(
				'version' => is_object( $value ) ? $value->version : $key,
				'url'     => is_object( $value ) ? $value->file : $value,
			);
		}

		return $versions;
	}

	/**
	 * Return url where to check for versions.
	 *
	 * @return string Url where to check for versions.
	 */
	private function get_versions_api_url() {
		if ( $this->product->is_wordpress_available() && $this->product->is_plugin() ) {
			return sprintf( 'https://api.wordpress.org/plugins/info/1.0/%s', $this->product->get_slug() );
		}
		if ( $this->product->is_wordpress_available() && $this->product->is_theme() ) {
			return sprintf( 'https://api.wordpress.org/themes/info/1.1/?action=theme_information&request[slug]=%s&request[fields][versions]=true', $this->product->get_slug() );
		}
		$license = $this->product->get_license();
		if ( $this->product->requires_license() && strlen( $license ) < 10 ) {
			return '';
		}

		return sprintf( '%slicense/versions/%s/%s/%s/%s', Product::API_URL, rawurlencode( $this->product->get_name() ), $license, urlencode( get_site_url() ), $this->product->get_version() );
	}

	/**
	 * Show the rollback links in the plugin page.
	 *
	 * @param array $links Plugin links.
	 *
	 * @return array $links Altered links.
	 */
	public function add_rollback_link( $links ) {
		$version = $this->get_rollback();
		if ( empty( $version ) ) {
			return $links;
		}
		$links[] = '<a href="' . wp_nonce_url( admin_url( 'admin-post.php?action=' . $this->product->get_key() . '_rollback' ), $this->product->get_key() . '_rollback' ) . '">' . sprintf( apply_filters( $this->product->get_key() . '_rollback_label', 'Rollback to v%s' ), $version['version'] ) . '</a>';

		return $links;
	}

	/**
	 * Start the rollback operation.
	 */
	public function start_rollback() {
		if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], $this->product->get_key() . '_rollback' ) ) { //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			wp_nonce_ays( '' );
		}

		if ( $this->product->is_plugin() ) {
			$this->start_rollback_plugin();

			return;
		}
		if ( $this->product->is_theme() ) {
			$this->start_rollback_theme();

			return;
		}
	}

	/**
	 * Start the rollback operation for the plugin.
	 */
	private function start_rollback_plugin() {
		$rollback         = $this->get_rollback();
		$plugin_transient = get_site_transient( 'update_plugins' );
		$plugin_folder    = $this->product->get_slug();
		$plugin_file      = $this->product->get_file();
		$version          = $rollback['version'];
		$temp_array       = array(
			'slug'        => $plugin_folder,
			'new_version' => $version,
			'package'     => $rollback['url'],
		);

		$temp_object = (object) $temp_array;
		$plugin_transient->response[ $plugin_folder . '/' . $plugin_file ] = $temp_object;
		set_site_transient( 'update_plugins', $plugin_transient );

		$transient = get_transient( $this->product->get_key() . '_warning_rollback' );

		// Style fix for the api link that gets outside the content.
		echo '<style>body#error-page{word-break:break-word;}</style>';

		if ( false === $transient ) {
			set_transient( $this->product->get_key() . '_warning_rollback', 'in progress', 30 );
			require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
			$title         = sprintf( apply_filters( $this->product->get_key() . '_rollback_message', 'Rolling back %s to v%s' ), $this->product->get_name(), $version );
			$plugin        = $plugin_folder . '/' . $plugin_file;
			$nonce         = 'upgrade-plugin_' . $plugin;
			$url           = 'update.php?action=upgrade-plugin&plugin=' . urlencode( $plugin );
			$upgrader_skin = new \Plugin_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'plugin' ) );
			$upgrader      = new \Plugin_Upgrader( $upgrader_skin );
			$upgrader->upgrade( $plugin );
			delete_transient( $this->product->get_key() . '_warning_rollback' );
			wp_die(
				'',
				esc_attr( $title ),
				array(
					'response' => 200,
				)
			);
		}
	}

	/**
	 * Start the rollback operation for the theme.
	 */
	private function start_rollback_theme() {
		add_filter( 'update_theme_complete_actions', array( $this, 'alter_links_theme_upgrade' ) );
		$rollback   = $this->get_rollback();
		$transient  = get_site_transient( 'update_themes' );
		$folder     = $this->product->get_slug();
		$version    = $rollback['version'];
		$temp_array = array(
			'new_version' => $version,
			'package'     => $rollback['url'],
		);

		$transient->response[ $folder . '/style.css' ] = $temp_array;
		set_site_transient( 'update_themes', $transient );

		$transient = get_transient( $this->product->get_key() . '_warning_rollback' );

		// Style fix for the api link that gets outside the content.
		echo '<style>body#error-page{word-break:break-word;}</style>';

		if ( false === $transient ) {
			set_transient( $this->product->get_key() . '_warning_rollback', 'in progress', 30 );
			require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
			$title = sprintf( apply_filters( $this->product->get_key() . '_rollback_message', 'Rolling back %s to v%s' ), $this->product->get_name(), $version );
			$theme = $folder . '/style.css';
			$nonce = 'upgrade-theme_' . $theme;
			$url   = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme );

			$upgrader = new \Theme_Upgrader( new \Theme_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'theme' ) ) );
			$upgrader->upgrade( $theme );
			delete_transient( $this->product->get_key() . '_warning_rollback' );
			wp_die(
				'',
				esc_attr( $title ),
				array(
					'response' => 200,
				)
			);
		}
	}

	/**
	 * Alter links and remove duplicate customize message.
	 *
	 * @param array $links Array of old links.
	 *
	 * @return mixed Array of links.
	 */
	public function alter_links_theme_upgrade( $links ) {
		if ( isset( $links['preview'] ) ) {
			$links['preview'] = str_replace( '<span aria-hidden="true">Customize</span>', '', $links['preview'] );
		}

		return $links;
	}

	/**
	 * Loads product object.
	 *
	 * @param Product $product Product object.
	 *
	 * @return bool Should we load the module?
	 */
	public function can_load( $product ) {
		if ( $this->is_from_partner( $product ) ) {
			return false;
		}
		if ( $product->is_theme() && ! current_user_can( 'switch_themes' ) ) {
			return false;
		}

		if ( $product->is_plugin() && ! current_user_can( 'install_plugins' ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Sort the rollbacks array in descending order.
	 *
	 * @param mixed $a First version to compare.
	 * @param mixed $b Second version to compare.
	 *
	 * @return bool Which version is greater?
	 */
	public function sort_rollback_array( $a, $b ) {
		return version_compare( $b['version'], $a['version'] );
	}

	/**
	 * Load module logic.
	 *
	 * @param Product $product Product object.
	 *
	 * @return $this Module object.
	 */
	public function load( $product ) {
		$this->product = $product;
		$this->show_link();
		$this->add_hooks();

		return $this;
	}

	/**
	 * If product can be rolled back, show the link to rollback.
	 */
	private function show_link() {
		add_filter(
			'plugin_action_links_' . plugin_basename( $this->product->get_basefile() ),
			array(
				$this,
				'add_rollback_link',
			)
		);
	}

	/**
	 * Fires after the option has been updated.
	 *
	 * @param mixed  $old_value The old option value.
	 * @param mixed  $value     The new option value.
	 * @param string $option    Option name.
	 */
	public function update_active_plugins_action( $old_value, $value, $option ) {
		delete_site_transient( 'update_plugins' );
		wp_cache_delete( 'plugins', 'plugins' );
	}

	/**
	 * Set the rollback hook. Strangely, this does not work if placed in the ThemeIsle_SDK_Rollback class, so it is being called from there instead.
	 */
	public function add_hooks() {
		add_action( 'admin_post_' . $this->product->get_key() . '_rollback', array( $this, 'start_rollback' ) );
		add_action( 'admin_footer', array( $this, 'add_footer' ) );

		// This hook will be invoked after the plugin activation.
		// We use this to force an update of the cache so that Update is present immediate after a rollback.
		add_action( 'update_option_active_plugins', array( $this, 'update_active_plugins_action' ), 10, 3 );
	}
}
PK      \W    -  codeinwp/themeisle-sdk/src/Modules/Review.phpnu W+A        <?php
/**
 * The Review model class for ThemeIsle SDK
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Review module for ThemeIsle SDK.
 */
class Review extends Abstract_Module {

	/**
	 * Check if we should load module for this.
	 *
	 * @param Product $product Product to check.
	 *
	 * @return bool Should load ?
	 */
	public function can_load( $product ) {
		if ( $this->is_from_partner( $product ) ) {
			return false;
		}
		if ( ! $product->is_wordpress_available() ) {
			return false;
		}

		return apply_filters( $product->get_slug() . '_sdk_should_review', true );
	}


	/**
	 * Add notification to queue.
	 *
	 * @param array $all_notifications Previous notification.
	 *
	 * @return array All notifications.
	 */
	public function add_notification( $all_notifications ) {

		$developers = [
			'Bogdan',
			'Marius',
			'Hardeep',
			'Rodica',
			'Stefan',
			'Uriahs',
			'Madalin',
			'Cristi',
			'Silviu',
			'Andrei',
		];

		$link = 'https://wordpress.org/support/' . $this->product->get_type() . '/' . $this->product->get_slug() . '/reviews/#wporg-footer';

		$message = apply_filters( $this->product->get_key() . '_feedback_review_message', '<p>Hey, it\'s great to see you have <b>{product}</b> active for a few days now. How is everything going? If you can spare a few moments to rate it on WordPress.org it would help us a lot (and boost my motivation). Cheers! <br/> <br/>~ {developer}, developer of {product}</p>' );

		$button_submit = apply_filters( $this->product->get_key() . '_feedback_review_button_do', 'Ok, I will gladly help.' );
		$button_cancel = apply_filters( $this->product->get_key() . '_feedback_review_button_cancel', 'No, thanks.' );
		$message       = str_replace(
			[ '{product}', '{developer}' ],
			[
				$this->product->get_friendly_name(),
				$developers[ strlen( get_site_url() ) % 10 ],
			],
			$message
		);

		$all_notifications[] = [
			'id'      => $this->product->get_key() . '_review_flag',
			'message' => $message,
			'ctas'    => [
				'confirm' => [
					'link' => $link,
					'text' => $button_submit,
				],
				'cancel'  => [
					'link' => '#',
					'text' => $button_cancel,
				],
			],
		];

		return $all_notifications;
	}


	/**
	 * Load module logic.
	 *
	 * @param Product $product Product to load.
	 *
	 * @return Review Module instance.
	 */
	public function load( $product ) {

		$this->product = $product;

		add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );

		return $this;
	}
}
PK      \F"  "  5  codeinwp/themeisle-sdk/src/Modules/Recommendation.phpnu W+A        <?php
/**
 * The class that exposes hooks for recommend.
 *
 * @package     ThemeIsleSDK
 * @subpackage  Rollback
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

// Exit if accessed directly.
use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Expose endpoints for ThemeIsle SDK.
 */
class Recommendation extends Abstract_Module {


	/**
	 * Load module logic.
	 *
	 * @param Product $product Product to load.
	 */
	public function load( $product ) {
		$this->product = $product;
		$this->setup_hooks();

		return $this;
	}

	/**
	 * Setup endpoints.
	 */
	private function setup_hooks() {
		add_action( $this->product->get_key() . '_recommend_products', array( $this, 'render_products_box' ), 10, 4 );
		add_action( 'admin_head', array( $this, 'enqueue' ) );
	}

	/**
	 * Check if we should load the module for this product.
	 *
	 * @param Product $product Product data.
	 *
	 * @return bool Should we load the module?
	 */
	public function can_load( $product ) {
		return true;
	}

	/**
	 * Render products box content.
	 *
	 * @param array $plugins_list - list of useful plugins (in slug => nicename format).
	 * @param array $themes_list - list of useful themes (in slug => nicename format).
	 * @param array $strings - list of translated strings.
	 * @param array $preferences - list of preferences.
	 */
	public function render_products_box( $plugins_list, $themes_list, $strings, $preferences = array() ) {

		if ( empty( $plugins_list ) && empty( $themes_list ) ) {
			return;
		}

		if ( ! empty( $plugins_list ) && ! current_user_can( 'install_plugins' ) ) {
			return;
		}

		if ( ! empty( $themes_list ) && ! current_user_can( 'install_themes' ) ) {
			return;
		}

		add_thickbox();

		if ( ! empty( $themes_list ) ) {
			$list = $this->get_themes( $themes_list, $preferences );

			if ( has_action( $this->product->get_key() . '_recommend_products_theme_template' ) ) {
				do_action( $this->product->get_key() . '_recommend_products_theme_template', $list, $strings, $preferences );
			} else {
				echo '<div class="recommend-product">';

				foreach ( $list as $theme ) {
					echo '<div class="plugin_box">';
					echo '  <img class="theme-banner" src="' . esc_url( $theme->screenshot_url ) . '">';
					echo '	<div class="title-action-wrapper">';
					echo '		<span class="plugin-name">' . esc_html( $theme->custom_name ) . '</span>';
					if ( ! isset( $preferences['description'] ) || ( isset( $preferences['description'] ) && $preferences['description'] ) ) {
						echo '<span class="plugin-desc">' . esc_html( substr( $theme->description, 0, strpos( $theme->description, '.' ) ) ) . '.</span>';
					}
					echo '	</div>';
					echo '<div class="plugin-box-footer">';
					echo '		<div class="button-wrap">';
					echo '          <a class="button button-primary  " href="' . esc_url( $theme->custom_url ) . '"><span class="dashicons dashicons-external"></span>' . esc_html( $strings['install'] ) . '</a>';
					echo '		</div>';
					echo '	</div>';
					echo '</div>';
				}

				echo '</div>';
			}
		}
		if ( ! empty( $plugins_list ) ) {
			$list = $this->get_plugins( $plugins_list, $preferences );

			if ( has_action( $this->product->get_key() . '_recommend_products_plugin_template' ) ) {
				do_action( $this->product->get_key() . '_recommend_products_plugin_template', $list, $strings, $preferences );
			} else {
				echo '<div class="recommend-product">';

				foreach ( $list as $current_plugin ) {
					echo '<div class="plugin_box">';
					echo '      <img class="plugin-banner" src="' . esc_url( $current_plugin->custom_image ) . '">';
					echo '	<div class="title-action-wrapper">';
					echo '		<span class="plugin-name">' . esc_html( $current_plugin->custom_name ) . '</span>';
					if ( ! isset( $preferences['description'] ) || ( isset( $preferences['description'] ) && $preferences['description'] ) ) {
						echo '<span class="plugin-desc">' . esc_html( substr( $current_plugin->short_description, 0, strpos( $current_plugin->short_description, '.' ) ) ) . '. </span>';
					}
					echo '	</div>';
					echo '	<div class="plugin-box-footer">';
					echo '      <a class="button button-primary thickbox open-plugin-details-modal" href="' . esc_url( $current_plugin->custom_url ) . '"><span class="dashicons dashicons-external"></span>' . esc_html( $strings['install'] ) . '</a>';
					echo '	</div>';
					echo '</div>';
				}

				echo '</div>';
			}
		}

	}

	/**
	 * Collect all the information for the themes list.
	 *
	 * @param array $themes_list - list of useful themes (in slug => nicename format).
	 * @param array $preferences - list of preferences.
	 *
	 * @return array
	 */
	private function get_themes( $themes_list, $preferences ) {
		$list = array();
		foreach ( $themes_list as $slug => $nicename ) {
			$theme = $this->call_theme_api( $slug );
			if ( ! $theme ) {
				continue;
			}

			$url = add_query_arg(
				array(
					'theme' => $theme->slug,
				),
				network_admin_url( 'theme-install.php' )
			);

			$name = empty( $nicename ) ? $theme->name : $nicename;

			$theme->custom_url  = $url;
			$theme->custom_name = $name;

			$list[] = $theme;
		}

		return $list;
	}

	/**
	 * Call theme api
	 *
	 * @param string $slug theme slug.
	 *
	 * @return array|mixed|object
	 */
	private function call_theme_api( $slug ) {
		$theme = get_transient( 'ti_theme_info_' . $slug );

		if ( false !== $theme ) {
			return $theme;
		}

		$products = $this->safe_get(
			'https://api.wordpress.org/themes/info/1.1/?action=query_themes&request[theme]=' . $slug . '&request[per_page]=1'
		);
		$products = json_decode( wp_remote_retrieve_body( $products ) );
		if ( is_object( $products ) ) {
			$theme = $products->themes[0];
			set_transient( 'ti_theme_info_' . $slug, $theme, 6 * HOUR_IN_SECONDS );
		}

		return $theme;
	}

	/**
	 * Collect all the information for the plugins list.
	 *
	 * @param array $plugins_list - list of useful plugins (in slug => nicename format).
	 * @param array $preferences - list of preferences.
	 *
	 * @return array
	 */
	private function get_plugins( $plugins_list, $preferences ) {
		$list = array();
		foreach ( $plugins_list as $plugin => $nicename ) {
			$current_plugin = $this->call_plugin_api( $plugin );

			$name = empty( $nicename ) ? $current_plugin->name : $nicename;

			$image = $current_plugin->banners['low'];
			if ( isset( $preferences['image'] ) && 'icon' === $preferences['image'] ) {
				$image = $current_plugin->icons['1x'];
			}

			$url = add_query_arg(
				array(
					'tab'       => 'plugin-information',
					'plugin'    => $current_plugin->slug,
					'TB_iframe' => true,
					'width'     => 800,
					'height'    => 800,
				),
				network_admin_url( 'plugin-install.php' )
			);

			$current_plugin->custom_url   = $url;
			$current_plugin->custom_name  = $name;
			$current_plugin->custom_image = $image;

			$list[] = $current_plugin;
		}

		return $list;
	}

	/**
	 * Load css and scripts for the plugin recommend page.
	 */
	public function enqueue() {
		$screen = get_current_screen();

		if ( ! isset( $screen->id ) ) {
			return;
		}
		if ( false === apply_filters( $this->product->get_key() . '_enqueue_recommend', false, $screen->id ) ) {
			return;
		}

		?>
		<style type="text/css">
			.recommend-product {
				display: flex;
				justify-content: space-between;
				flex-wrap: wrap;
			}

			.recommend-product .theme-banner {
				width: 200px;
				margin: auto;
			}

			.recommend-product .plugin-banner {
				width: 100px;
				margin: auto;
			}

			.recommend-product .plugin_box .button span {

				margin-top: 2px;
				margin-right: 7px;
			}

			.recommend-product .plugin_box .button {
				margin-bottom: 10px;
			}

			.recommend-product .plugin_box {
				margin-bottom: 20px;
				padding-top: 5px;
				display: flex;
				box-shadow: 0px 0px 10px -5px rgba(0, 0, 0, 0.55);
				background: #fff;
				border-radius: 5px;
				flex-direction: column;
				justify-content: flex-start;
				width: 95%;
			}

			.recommend-product .title-action-wrapper {
				padding: 15px 20px 5px 20px;
			}

			.recommend-product .plugin-name {
				font-size: 18px;
				display: block;
				white-space: nowrap;
				text-overflow: ellipsis;
				margin-bottom: 10px;
				overflow: hidden;
				line-height: normal;
			}


			.recommend-product .plugin-desc {
				display: block;
				margin-bottom: 10px;
				font-size: 13px;
				color: #777;
				line-height: 1.6;
			}

			.recommend-product .button-wrap > div {
				padding: 0;
				margin: 0;
			}

			.plugin-box-footer {
				display: flex;
				justify-content: space-around;
				vertical-align: middle;
				align-items: center;
				padding: 0px 10px 5px;
				flex: 1;
				margin-top: auto;
			}
		</style>
		<?php
	}
}
PK      \l    .  codeinwp/themeisle-sdk/src/Modules/Welcome.phpnu W+A        <?php
/**
 * The welcome model class for ThemeIsle SDK
 *
 * Here's how to hook it in your plugin or theme:
 * ```php
 *      add_filter( '<product_slug>_welcome_metadata', function() {
 *          return [
 *               'is_enabled' => <condition_if_pro_available>,
 *               'pro_name' => 'Product PRO name',
 *               'logo' => '<path_to_logo>',
 *               'cta_link' => tsdk_utmify( 'https://link_to_upgrade.with/?discount=<discountCode>')
 *          ];
 *      } );
 * ```
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2023, Bogdan Preda
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

// Exit if accessed directly.
use ThemeisleSDK\Common\Abstract_Module;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Promotions module for ThemeIsle SDK.
 */
class Welcome extends Abstract_Module {

	/**
	 * Debug mode.
	 *
	 * @var bool
	 */
	private $debug = false;

	/**
	 * Welcome metadata.
	 *
	 * @var array
	 */
	private $welcome_discounts = array();

	/**
	 * Check that we can load this module.
	 *
	 * @param \ThemeisleSDK\Product $product The product.
	 *
	 * @return bool
	 */
	public function can_load( $product ) {
		$this->debug      = apply_filters( 'themeisle_sdk_welcome_debug', $this->debug );
		$welcome_metadata = apply_filters( $product->get_key() . '_welcome_metadata', array() );

		$is_welcome_enabled = $this->is_welcome_meta_valid( $welcome_metadata );

		if ( $is_welcome_enabled ) {
			$this->welcome_discounts[ $product->get_key() ] = $welcome_metadata;
		}

		return $this->debug || $is_welcome_enabled;
	}

	/**
	 * Check that the metadata is valid and the welcome is enabled.
	 *
	 * @param array $welcome_metadata The metadata to validate.
	 *
	 * @return bool
	 */
	private function is_welcome_meta_valid( $welcome_metadata ) {
		return ! empty( $welcome_metadata ) && isset( $welcome_metadata['is_enabled'] ) && $welcome_metadata['is_enabled'];
	}

	/**
	 * Load the module.
	 *
	 * @param \ThemeisleSDK\Product $product The product.
	 *
	 * @return $this
	 */
	public function load( $product ) {
		if ( ! current_user_can( 'install_plugins' ) ) {
			return;
		}

		$this->product = $product;
		if ( ! $this->is_time_to_show_welcome() && $this->debug === false ) {
			return;
		}

		add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ], 99, 1 );

		return $this;
	}

	/**
	 * Check if it's time to show the welcome.
	 *
	 * @return bool
	 */
	private function is_time_to_show_welcome() {
		// if 7 days from install have not passed, don't show the welcome.
		if ( $this->product->get_install_time() + 7 * DAY_IN_SECONDS > time() ) {
			return false;
		}

		// if 12 days from install have passed, don't show the welcome ( after 7 days for 5 days ).
		if ( $this->product->get_install_time() + 12 * DAY_IN_SECONDS < time() ) {
			return false;
		}

		return true;
	}

	/**
	 * Add the welcome notification.
	 * Will block all other notifications if a welcome notification is present.
	 *
	 * @return array
	 */
	public function add_notification( $all_notifications ) {
		if ( empty( $this->welcome_discounts ) ) {
			return $all_notifications;
		}

		if ( ! isset( $this->welcome_discounts[ $this->product->get_key() ] ) ) {
			return $all_notifications;
		}

		// filter out the notifications that are not welcome upsells
		// if we arrived here we will have at least one welcome upsell
		$all_notifications = array_filter(
			$all_notifications,
			function( $notification ) {
				return strpos( $notification['id'], '_welcome_upsell_flag' ) !== false;
			}
		);

		$offer = $this->welcome_discounts[ $this->product->get_key() ];

		$response = [];
		$logo     = isset( $offer['logo'] ) ? $offer['logo'] : '';
		$pro_name = isset( $offer['pro_name'] ) ? $offer['pro_name'] : $this->product->get_friendly_name() . ' PRO';

		$link = $offer['cta_link'];

		$message = apply_filters( $this->product->get_key() . '_welcome_upsell_message', '<p>You\'ve been using <b>{product}</b> for 7 days now and we appreciate your loyalty! We also want to make sure you\'re getting the most out of our product. That\'s why we\'re offering you a special deal - upgrade to <b>{pro_product}</b> in the next 5 days and receive a discount of <b>up to 30%</b>. <a href="{cta_link}" target="_blank">Upgrade now</a> and unlock all the amazing features of <b>{pro_product}</b>!</p>' );

		$button_submit = apply_filters( $this->product->get_key() . '_feedback_review_button_do', 'Upgrade Now!' );
		$button_cancel = apply_filters( $this->product->get_key() . '_feedback_review_button_cancel', 'No, thanks.' );
		$message       = str_replace(
			[ '{product}', '{pro_product}', '{cta_link}' ],
			[
				$this->product->get_friendly_name(),
				$pro_name,
				$link,
			],
			$message
		);

		$all_notifications[] = [
			'id'      => $this->product->get_key() . '_welcome_upsell_flag',
			'message' => $message,
			'img_src' => $logo,
			'ctas'    => [
				'confirm' => [
					'link' => $link,
					'text' => $button_submit,
				],
				'cancel'  => [
					'link' => '#',
					'text' => $button_cancel,
				],
			],
			'type'    => 'info',
		];

		$key        = array_rand( $all_notifications );
		$response[] = $all_notifications[ $key ];

		return $response;
	}

}
PK      \DpY  Y  /  codeinwp/themeisle-sdk/src/Modules/Licenser.phpnu W+A        <?php
/**
 * The main loader class for license handling.
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

// Exit if accessed directly.
use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Loader;
use ThemeisleSDK\Product;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Licenser module for ThemeIsle SDK.
 */
class Licenser extends Abstract_Module {
	/**
	 * License VALID status string.
	 */
	const STATUS_VALID = 'valid';
	/**
	 * License NOT_ACTIVE status string.
	 */
	const STATUS_NOT_ACTIVE = 'not_active';
	/**
	 * License active expired status string.
	 */
	const STATUS_ACTIVE_EXPIRED = 'active_expired';
	/**
	 * Number of max failed checks before showing the license message.
	 *
	 * @var int $max_failed Maximum failed checks allowed before show the notice
	 */
	private static $max_failed = 1;
	/**
	 * Flag to check if the global actions were loaded.
	 *
	 * @var bool If the globals actions were loaded.
	 */
	private static $globals_loaded = false;
	/**
	 * License key string.
	 *
	 * @var string $license_key The license key string
	 */
	public $license_key;
	/**
	 * This ensures that the custom API request only runs on the second time that WP fires the update check.
	 *
	 * @var bool $do_check Flag for request.
	 */
	private $do_check = false;
	/**
	 * Number of failed checks to the api endpoint.
	 *
	 * @var bool $failed_checks
	 */
	private $failed_checks = 0;
	/**
	 * The product update response key.
	 *
	 * @var string $product_key Product key.
	 */
	private $product_key;

	/**
	 * Holds local license object.
	 *
	 * @var null Local license object.
	 */
	private $license_local = null;
	/**
	 * Product namespace, used for fixed name filters/cli commands.
	 *
	 * @var string $namespace Product namespace.
	 */
	private $namespace = null;

	/**
	 * Disable wporg updates for premium products.
	 *
	 * @param string $r Update payload.
	 * @param string $url The api url.
	 *
	 * @return mixed List of themes to check for update.
	 */
	public function disable_wporg_update( $r, $url ) {

		if ( 0 !== strpos( $url, 'https://api.wordpress.org/themes/update-check/' ) ) {
			return $r;
		}

		// Decode the JSON response.
		$themes = json_decode( $r['body']['themes'] );

		unset( $themes->themes->{$this->product->get_slug()} );

		// Encode the updated JSON response.
		$r['body']['themes'] = wp_json_encode( $themes );

		return $r;
	}

	/**
	 * Register the setting for the license of the product.
	 *
	 * @return bool
	 */
	public function register_settings() {
		if ( ! is_admin() ) {
			return false;
		}
		if ( apply_filters( $this->product->get_key() . '_hide_license_field', false ) ) {
			return;
		}
		add_settings_field(
			$this->product->get_key() . '_license',
			$this->product->get_name() . ' license',
			array( $this, 'license_view' ),
			'general'
		);
	}

	/**
	 *  The license view field.
	 */
	public function license_view() {
		$status = $this->get_license_status();
		$value  = $this->license_key;

		$activate_string   = apply_filters( $this->product->get_key() . '_lc_activate_string', 'Activate' );
		$deactivate_string = apply_filters( $this->product->get_key() . '_lc_deactivate_string', 'Deactivate' );
		$valid_string      = apply_filters( $this->product->get_key() . '_lc_valid_string', 'Valid' );
		$invalid_string    = apply_filters( $this->product->get_key() . '_lc_invalid_string', 'Invalid' );
		$license_message   = apply_filters( $this->product->get_key() . '_lc_license_message', 'Enter your license from %s purchase history in order to get %s updates' );
		$error_message     = $this->get_error();
		?>
		<style type="text/css">
			input.themeisle-sdk-text-input-valid {
				border: 1px solid #7ad03a;
			}

			input.themeisle-sdk-license-input {
				width: 300px;
				padding: 0 8px;
				line-height: 2;
				min-height: 30px;
			}

			.themeisle-sdk-license-deactivate-cta {
				color: #fff;
				background: #7ad03a;
				display: inline-block;
				text-decoration: none;
				font-size: 13px;
				line-height: 30px;
				height: 26px;
				margin-left: 5px;
				padding: 0 10px 3px;
				-webkit-border-radius: 3px;
				border-radius: 3px;
			}

			.themeisle-sdk-license-activate-cta {
				color: #fff;
				background: #dd3d36;
				display: inline-block;
				text-decoration: none;
				font-size: 13px;
				line-height: 30px;
				height: 26px;
				margin-left: 5px;
				padding: 0 10px 3px;
				-webkit-border-radius: 3px;
				border-radius: 3px;
			}

			button.button.themeisle-sdk-licenser-button-cta {
				line-height: 26px;
				height: 29px;
				vertical-align: top;
			}

		</style>
		<?php
		echo sprintf(
			'<p>%s<input class="themeisle-sdk-license-input %s" type="text" id="%s_license" name="%s_license" value="%s" /><a class="%s">%s</a>&nbsp;&nbsp;&nbsp;<button name="%s_btn_trigger" class="button button-primary themeisle-sdk-licenser-button-cta" value="yes" type="submit" >%s</button></p><p class="description">%s</p>%s',
			( ( 'valid' === $status ) ? sprintf( '<input type="hidden" value="%s" name="%s_license" />', esc_attr( $value ), esc_attr( $this->product->get_key() ) ) : '' ),
			( ( 'valid' === $status ) ? 'themeisle-sdk-text-input-valid' : '' ),
			esc_attr( $this->product->get_key() ),
			esc_attr( ( ( 'valid' === $status ) ? $this->product->get_key() . '_mask' : $this->product->get_key() ) ),
			esc_attr( ( ( 'valid' === $status ) ? ( str_repeat( '*', 30 ) . substr( $value, - 5 ) ) : $value ) ),
			esc_attr( ( 'valid' === $status ? 'themeisle-sdk-license-deactivate-cta' : 'themeisle-sdk-license-activate-cta' ) ),
			esc_attr( 'valid' === $status ? $valid_string : $invalid_string ),
			esc_attr( $this->product->get_key() ),
			esc_attr( 'valid' === $status ? $deactivate_string : $activate_string ),
			sprintf( wp_kses_data( $license_message ), '<a  href="' . esc_url( $this->get_api_url() ) . '">' . esc_attr( $this->get_distributor_name() ) . '</a> ', esc_attr( $this->product->get_type() ) ),
			wp_kses_data( empty( $error_message ) ? '' : sprintf( '<p style="color:#dd3d36">%s</p>', ( $error_message ) ) )
		) . wp_nonce_field( $this->product->get_key() . 'nonce', $this->product->get_key() . 'nonce_field', false, false );//phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

	}

	/**
	 * Return the license status.
	 *
	 * @param bool $check_expiration Should check if license is valid, but expired.
	 *
	 * @return string The License status.
	 */
	public function get_license_status( $check_expiration = false ) {

		$license_data = get_option( $this->product->get_key() . '_license_data', '' );

		if ( '' === $license_data ) {
			return get_option( $this->product->get_key() . '_license_status', 'not_active' );
		}
		$status = isset( $license_data->license ) ? $license_data->license : get_option( $this->product->get_key() . '_license_status', 'not_active' );
		if ( false === $check_expiration ) {
			return $status;
		}

		return ( 'valid' === $status && isset( $license_data->is_expired ) && 'yes' === $license_data->is_expired ) ? 'active_expired' : $status;
	}

	/**
	 * Check status.
	 *
	 * @param string $product_file Product basefile.
	 *
	 * @return string Status license.
	 */
	public static function status( $product_file ) {
		$product = Product::get( $product_file );
		if ( ! $product->requires_license() ) {
			return self::STATUS_VALID;
		}
		$license_data = self::get_license_data( $product->get_key() );

		$status = isset( $license_data->license ) ? $license_data->license : self::STATUS_NOT_ACTIVE;

		return ( 'valid' === $status && isset( $license_data->is_expired ) && 'yes' === $license_data->is_expired ) ? 'active_expired' : $status;
	}

	/**
	 * Product license data.
	 *
	 * @param string $key Product key.
	 *
	 * @return false|mixed|null
	 */
	private static function get_license_data( $key ) {
		$license_data = get_option( $key . '_license_data', '' );

		return isset( $license_data->license ) ? $license_data : false;
	}

	/**
	 * Get license hash.
	 * 
	 * @param string $key Product key.
	 * 
	 * @return bool|string
	 */
	public static function create_license_hash( $key ) {
		$data = self::get_license_data( $key );

		if ( ! $data ) {
			return false;
		}

		return isset( $data->key ) ? wp_hash( $data->key ) : false;
	}

	/**
	 * Check if license is valid.
	 *
	 * @param string $product_file Product basefile.
	 *
	 * @return bool Is valid?
	 */
	public static function is_valid( $product_file ) {
		return self::status( $product_file ) === self::STATUS_VALID;
	}

	/**
	 * Get product plan.
	 *
	 * @param string $product_file Product file.
	 *
	 * @return int Plan id.
	 */
	public static function plan( $product_file ) {
		$product = Product::get( $product_file );
		$data    = self::get_license_data( $product->get_key() );

		return isset( $data->price_id ) ? (int) $data->price_id : - 1;
	}

	/**
	 * Get product license key.
	 *
	 * @param string $product_file Product file.
	 *
	 * @return string
	 */
	public static function key( $product_file ) {
		$product = Product::get( $product_file );

		return $product->get_license();
	}

	/**
	 * Return the last error message.
	 *
	 * @return mixed Error message.
	 */
	public function get_error() {
		return get_transient( $this->product->get_key() . 'act_err' );
	}

	/**
	 * Get remote api url.
	 *
	 * @return string Remote api url.
	 */
	public function get_api_url() {
		if ( $this->is_from_partner( $this->product ) ) {
			return 'https://themeisle.com';
		}

		return $this->product->get_store_url();
	}

	/**
	 * Get remote api url.
	 *
	 * @return string Remote api url.
	 */
	public function get_distributor_name() {
		if ( $this->is_from_partner( $this->product ) ) {
			return 'Themeisle';
		}

		return $this->product->get_store_name();
	}

	/**
	 * License price id.
	 *
	 * @return int License plan.
	 */
	public function get_plan() {
		return self::plan( $this->product->get_basefile() );
	}

	/**
	 *  Show the admin notice regarding the license status.
	 *
	 * @return bool Should we show the notice ?
	 */
	public function show_notice() {
		if ( ! is_admin() ) {
			return false;
		}

		if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) {
			return false;
		}

		$status                 = $this->get_license_status( true );
		$no_activations_string  = apply_filters( $this->product->get_key() . '_lc_no_activations_string', 'No more activations left for %s. You need to upgrade your plan in order to use %s on more websites. If you need assistance, please get in touch with %s staff.' );
		$no_valid_string        = apply_filters( $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add your license code from your  <a href="%s" target="_blank">purchase history</a> and validate it <a href="%s">here</a>. ' );
		$expired_license_string = apply_filters( $this->product->get_key() . '_lc_expired_string', 'Your %s\'s License Key has expired. In order to continue receiving support and software updates you must  <a href="%s" target="_blank">renew</a> your license key.' );
		// No activations left for this license.
		if ( 'valid' != $status && $this->check_activation() ) {
			?>
			<div class="error">
				<p><strong>
						<?php
						echo sprintf(
							wp_kses_data( $no_activations_string ),
							esc_attr( $this->product->get_name() ),
							esc_attr( $this->product->get_name() ),
							'<a href="' . esc_url( $this->get_api_url() ) . '" target="_blank">' . esc_attr( $this->get_distributor_name() ) . '</a>'
						);
						?>
					</strong>
				</p>
			</div>
			<?php
			return false;
		}

		// Invalid license key.
		if ( 'active_expired' === $status ) {
			?>
			<div class="error">
				<p>
					<strong><?php echo sprintf( wp_kses_data( $expired_license_string ), esc_attr( $this->product->get_name() . ' ' . $this->product->get_type() ), esc_url( $this->get_api_url() . '?license=' . $this->license_key ) ); ?> </strong>
				</p>
			</div>
			<?php

			return false;
		}
		// Invalid license key.
		if ( 'valid' != $status ) {
			?>
			<div class="error">
				<p>
					<strong><?php echo sprintf( wp_kses_data( $no_valid_string ), esc_attr( $this->product->get_name() . ' ' . $this->product->get_type() ), esc_url( $this->get_api_url() ), esc_url( admin_url( 'options-general.php' ) . '#' . $this->product->get_key() . '_license' ) ); ?> </strong>
				</p>
			</div>
			<?php

			return false;
		}

		return true;
	}

	/**
	 *  Check if the license is active or not.
	 *
	 * @return bool
	 */
	public function check_activation() {
		$license_data = get_option( $this->product->get_key() . '_license_data', '' );
		if ( '' === $license_data ) {
			return false;
		}

		return isset( $license_data->license ) ? ( 'no_activations_left' == $license_data->license ) : false;

	}

	/**
	 *  Check if the license is about to expire in the next month.
	 *
	 * @return bool
	 */
	public function check_expiration() {
		$license_data = get_option( $this->product->get_key() . '_license_data', '' );
		if ( '' === $license_data ) {
			return false;
		}
		if ( ! isset( $license_data->expires ) ) {
			return false;
		}
		if ( strtotime( $license_data->expires ) - time() > 30 * 24 * 3600 ) {
			return false;
		}

		return true;
	}

	/**
	 * Return the renew url from the store used.
	 *
	 * @return string The renew url.
	 */
	public function renew_url() {
		$license_data = get_option( $this->product->get_key() . '_license_data', '' );
		if ( '' === $license_data ) {
			return $this->get_api_url();
		}
		if ( ! isset( $license_data->download_id ) || ! isset( $license_data->key ) ) {
			return $this->get_api_url();
		}

		return trim( $this->get_api_url(), '/' ) . '/checkout/?edd_license_key=' . $license_data->key . '&download_id=' . $license_data->download_id;
	}

	/**
	 * Run the license check call.
	 */
	public function product_valid() {
		if ( false !== ( $license = get_transient( $this->product->get_key() . '_license_data' ) ) ) { //phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure
			return;
		}
		$license = $this->check_license();
		set_transient( $this->product->get_key() . '_license_data', $license, 12 * HOUR_IN_SECONDS );
		update_option( $this->product->get_key() . '_license_data', $license );
	}

	/**
	 *  Check the license status.
	 *
	 * @return object The license data.
	 */
	public function check_license() {
		$status = $this->get_license_status();
		if ( 'not_active' === $status ) {
			$license_data          = new \stdClass();
			$license_data->license = 'not_active';

			return $license_data;
		}
		$license = trim( $this->license_key );

		$response = $this->do_license_process( $license, 'check' );

		if ( is_wp_error( $response ) ) {
			$license_data          = new \stdClass();
			$license_data->license = 'invalid';
		} else {
			$license_data = $response;
		}

		$license_old = get_option( $this->product->get_key() . '_license_data', '' );
		if ( 'valid' === $license_old->license && ( $license_data->license !== $license_old->license ) && $this->failed_checks <= self::$max_failed ) {
			$this->increment_failed_checks();

			return $license_old;
		}

		if ( ! isset( $license_data->key ) ) {
			$license_data->key = isset( $license_old->key ) ? $license_old->key : '';
		}
		$this->reset_failed_checks();

		return $license_data;

	}

	/**
	 * Do license activation/deactivation.
	 *
	 * @param string $license License key.
	 * @param string $action What do to.
	 *
	 * @return bool|\WP_Error
	 */
	public function do_license_process( $license, $action = 'toggle' ) {
		if ( strlen( $license ) < 10 ) {
			return new \WP_Error( 'themeisle-license-invalid-format', 'Invalid license.' );
		}
		$status = $this->get_license_status();

		if ( 'valid' === $status && 'activate' === $action ) {
			return new \WP_Error( 'themeisle-license-already-active', 'License is already active.' );
		}
		if ( 'valid' !== $status && 'deactivate' === $action ) {
			return new \WP_Error( 'themeisle-license-already-deactivate', 'License not active.' );
		}

		if ( 'toggle' === $action ) {
			$action = ( 'valid' !== $status ? ( 'activate' ) : ( 'deactivate' ) );
		}

		// Call the custom API.
		if ( 'check' === $action ) {
			$response = $this->safe_get( sprintf( '%slicense/check/%s/%s/%s/%s', Product::API_URL, rawurlencode( $this->product->get_name() ), $license, rawurlencode( home_url() ), Loader::get_cache_token() ) );
		} else {
			$response = wp_remote_post(
				sprintf( '%slicense/%s/%s/%s', Product::API_URL, $action, rawurlencode( $this->product->get_name() ), $license ),
				array(
					'body'    => wp_json_encode(
						array(
							'url' => rawurlencode( home_url() ),
						)
					),
					'headers' => array(
						'Content-Type' => 'application/json',
					),
				)
			);
		}

		// make sure the response came back okay.
		if ( is_wp_error( $response ) ) {
			return new \WP_Error( 'themeisle-license-500', sprintf( 'ERROR: Failed to connect to the license service. Please try again later. Reason: %s', $response->get_error_message() ) );
		}

		$license_data = json_decode( wp_remote_retrieve_body( $response ) );

		if ( ! is_object( $license_data ) ) {
			return new \WP_Error( 'themeisle-license-404', 'ERROR: Failed to validate license. Please try again in one minute.' );
		}
		if ( 'check' === $action ) {
			return $license_data;
		}

		Loader::clear_cache_token();

		if ( ! isset( $license_data->license ) ) {
			$license_data->license = 'invalid';
		}

		if ( ! isset( $license_data->key ) ) {
			$license_data->key = $license;
		}
		if ( 'valid' === $license_data->license ) {
			$this->reset_failed_checks();
		}

		if ( 'deactivate' === $action ) {

			delete_option( $this->product->get_key() . '_license_data' );
			delete_option( $this->product->get_key() . '_license_plan' );
			delete_transient( $this->product->get_key() . '_license_data' );

			return true;
		}
		if ( isset( $license_data->plan ) ) {
			update_option( $this->product->get_key() . '_license_plan', $license_data->plan );
		}
		update_option( $this->product->get_key() . '_license_data', $license_data );
		set_transient( $this->product->get_key() . '_license_data', $license_data, 12 * HOUR_IN_SECONDS );
		if ( 'activate' === $action && 'valid' !== $license_data->license ) {
			return new \WP_Error( 'themeisle-license-invalid', 'ERROR: Invalid license provided.' );
		}

		// Remove the versions transient upon activation so that newer version for rollback can be acquired.
		$versions_cache = $this->product->get_cache_key();
		delete_transient( $versions_cache );

		return true;
	}

	/**
	 * Reset the failed checks
	 */
	private function reset_failed_checks() {
		$this->failed_checks = 1;
		update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks );
	}

	/**
	 * Increment the failed checks.
	 */
	private function increment_failed_checks() {
		$this->failed_checks ++;
		update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks );
	}

	/**
	 * Activate the license remotely.
	 */
	public function process_license() {
		// listen for our activate button to be clicked.
		if ( ! isset( $_POST[ $this->product->get_key() . '_btn_trigger' ] ) ) {
			return;
		}
		if ( ! isset( $_POST[ $this->product->get_key() . 'nonce_field' ] )
			|| ! wp_verify_nonce( $_POST[ $this->product->get_key() . 'nonce_field' ], $this->product->get_key() . 'nonce' ) //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
		) {
			return;
		}
		if ( ! current_user_can( 'manage_options' ) ) {
			return;
		}
		$license = isset( $_POST[ $this->product->get_key() . '_license' ] )
			? sanitize_text_field( $_POST[ $this->product->get_key() . '_license' ] )
			: '';

		$response = $this->do_license_process( $license, 'toggle' );
		if ( is_wp_error( $response ) ) {
			$this->set_error( $response->get_error_message() );

			return;
		}
		if ( true === $response ) {
			$this->set_error( '' );
		}
	}

	/**
	 * Set license validation error message.
	 *
	 * @param string $message Error message.
	 */
	public function set_error( $message = '' ) {
		set_transient( $this->product->get_key() . 'act_err', $message, MINUTE_IN_SECONDS );

	}

	/**
	 * Load the Themes screen.
	 */
	public function load_themes_screen() {
		add_thickbox();
		add_action( 'admin_notices', array( &$this, 'update_nag' ) );
	}

	/**
	 * Alter the nag for themes update.
	 */
	public function update_nag() {
		$theme        = wp_get_theme( $this->product->get_slug() );
		$api_response = get_transient( $this->product_key );
		if ( false === $api_response || ! isset( $api_response->new_version ) ) {
			return;
		}
		$update_url     = wp_nonce_url( 'update.php?action=upgrade-theme&amp;theme=' . urlencode( $this->product->get_slug() ), 'upgrade-theme_' . $this->product->get_slug() );
		$update_message = apply_filters( 'themeisle_sdk_license_update_message', 'Updating this theme will lose any customizations you have made. Cancel to stop, OK to update.' );
		$update_onclick = ' onclick="if ( confirm(\'' . esc_js( $update_message ) . '\') ) {return true;}return false;"';
		if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) {
			echo '<div id="update-nag">';
			printf(
				'<strong>%1$s %2$s</strong> is available. <a href="%3$s" class="thickbox" title="%4s">Check out what\'s new</a> or <a href="%5$s"%6$s>update now</a>.',
				esc_attr( $theme->get( 'Name' ) ),
				esc_attr( $api_response->new_version ),
				esc_url( sprintf( '%s&TB_iframe=true&amp;width=1024&amp;height=800', $this->product->get_changelog() ) ),
				esc_attr( $theme->get( 'Name' ) ),
				esc_url( $update_url ),
				$update_onclick // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Already escaped.
			);
			echo '</div>';
			echo '<div id="' . esc_attr( $this->product->get_slug() ) . '_changelog" style="display:none;">';
			echo wp_kses_data( wpautop( $api_response->sections['changelog'] ) );
			echo '</div>';
		}
	}

	/**
	 * Alter update transient.
	 *
	 * @param mixed $value The transient data.
	 *
	 * @return mixed
	 */
	public function theme_update_transient( $value ) {
		$update_data = $this->check_for_update();
		if ( empty( $value ) ) {
			return $value;
		}

		if ( ! isset( $value->response ) ) {
			return $value;
		}

		if ( ! $update_data ) {
			return $value;
		}

		$value->response[ $this->product->get_slug() ] = $update_data;
		return $value;
	}

	/**
	 * Check for updates
	 *
	 * @return array|bool Either the update data or false in case of failure.
	 */
	public function check_for_update() {
		$update_data = get_transient( $this->product_key );

		if ( false === $update_data ) {
			$failed      = false;
			$update_data = $this->get_version_data();
			if ( empty( $update_data ) ) {
				$failed = true;
			}
			// If the response failed, try again in 30 minutes.
			if ( $failed ) {
				$data              = new \stdClass();
				$data->new_version = $this->product->get_version();
				set_transient( $this->product_key, $data, 30 * MINUTE_IN_SECONDS );

				return false;
			}
			$update_data->sections = isset( $update_data->sections ) ? maybe_unserialize( $update_data->sections ) : null;

			set_transient( $this->product_key, $update_data, 12 * HOUR_IN_SECONDS );
		}
		if ( ! isset( $update_data->new_version ) ) {
			return false;
		}
		if ( version_compare( $this->product->get_version(), $update_data->new_version, '>=' ) ) {
			return false;
		}

		return (array) $update_data;
	}

	/**
	 * Check remote api for latest version.
	 *
	 * @return bool|mixed Update api response.
	 */
	private function get_version_data() {

		$response = $this->safe_get(
			sprintf(
				'%slicense/version/%s/%s/%s/%s',
				Product::API_URL,
				rawurlencode( $this->product->get_name() ),
				( empty( $this->license_key ) ? 'free' : $this->license_key ),
				$this->product->get_version(),
				rawurlencode( home_url() )
			),
			array(
				'timeout'   => 15, //phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout, Inherited by wp_remote_get only, for vip environment we use defaults.
				'sslverify' => false,
			)
		);
		if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
			return false;
		}
		$update_data = json_decode( wp_remote_retrieve_body( $response ) );
		if ( ! is_object( $update_data ) ) {
			return false;
		}
		if ( isset( $update_data->slug ) ) {
			$update_data->slug = $this->product->get_slug();
		}
		if ( isset( $update_data->icons ) ) {
			$update_data->icons = (array) $update_data->icons;
		}
		if ( isset( $update_data->banners ) ) {
			$update_data->banners = (array) $update_data->banners;
		}

		return $update_data;
	}

	/**
	 * Delete the update transient
	 */
	public function delete_theme_update_transient() {
		return delete_transient( $this->product_key );
	}

	/**
	 * Check for Updates at the defined API endpoint and modify the update array.
	 *
	 * @param array $_transient_data Update array build by WordPress.
	 *
	 * @return mixed Modified update array with custom plugin data.
	 */
	public function pre_set_site_transient_update_plugins_filter( $_transient_data ) {
		if ( empty( $_transient_data ) || ! $this->do_check ) {
			$this->do_check = true;

			return $_transient_data;
		}
		$api_response = $this->api_request();
		if ( false !== $api_response && is_object( $api_response ) && isset( $api_response->new_version ) ) {
			if ( ! isset( $api_response->plugin ) ) {
				$api_response->plugin = $this->product->get_slug() . '/' . $this->product->get_file();
			}
			if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) {
				$_transient_data->response[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response;
			} else {
				$_transient_data->no_update[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response;
			}
		}

		return $_transient_data;
	}

	/**
	 * Calls the API and, if successfull, returns the object delivered by the API.
	 *
	 * @param string $_action The requested action.
	 * @param array  $_data Parameters for the API action.
	 *
	 * @return false||object
	 */
	private function api_request( $_action = '', $_data = '' ) {
		$update_data = $this->get_version_data();
		if ( empty( $update_data ) ) {
			return false;
		}
		if ( $update_data && isset( $update_data->sections ) ) {
			$update_data->sections = maybe_unserialize( $update_data->sections );
		}

		return $update_data;
	}

	/**
	 * Updates information on the "View version x.x details" page with custom data.
	 *
	 * @param mixed  $_data Plugin data.
	 * @param string $_action Action to send.
	 * @param object $_args Arguments to use.
	 *
	 * @return object $_data
	 */
	public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
		if ( ( 'plugin_information' !== $_action ) || ! isset( $_args->slug ) || ( $_args->slug !== $this->product->get_slug() ) ) {
			return $_data;
		}
		$api_response = $this->api_request();
		if ( false !== $api_response ) {
			$_data = $api_response;
		}

		return $_data;
	}

	/**
	 * Disable SSL verification in order to prevent download update failures.
	 *
	 * @param array  $args Http args.
	 * @param string $url Url to check.
	 *
	 * @return array $array
	 */
	public function http_request_args( $args, $url ) {
		// If it is an https request and we are performing a package download, disable ssl verification.
		if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
			$args['sslverify'] = false;
		}

		return $args;
	}

	/**
	 * Check if we should load the module for this product.
	 *
	 * @param Product $product Product data.
	 *
	 * @return bool Should we load the module?
	 */
	public function can_load( $product ) {

		if ( $product->is_wordpress_available() ) {
			return false;
		}

		return ( apply_filters( $product->get_key() . '_enable_licenser', true ) === true );

	}

	/**
	 * Load module logic.
	 *
	 * @param Product $product Product to load the module for.
	 *
	 * @return Licenser Module object.
	 */
	public function load( $product ) {
		$this->product = $product;

		$this->product_key = $this->product->get_key() . '-update-response';

		$this->license_key = $this->product->get_license();
		if ( $this->product->requires_license() ) {
			$this->failed_checks = intval( get_option( $this->product->get_key() . '_failed_checks', 0 ) );
			$this->register_license_hooks();
		}
		if ( ! self::$globals_loaded ) {
			add_filter( 'themeisle_sdk_license/status', [ __CLASS__, 'status' ], 999, 1 );
			add_filter( 'themeisle_sdk_license/is-valid', [ __CLASS__, 'is_valid' ], 999, 1 );
			add_filter( 'themeisle_sdk_license/plan', [ __CLASS__, 'plan' ], 999, 1 );
			add_filter( 'themeisle_sdk_license/key', [ __CLASS__, 'key' ], 999, 1 );
			$globals_loaded = true;
		}
		$namespace = apply_filters( 'themesle_sdk_namespace_' . md5( $product->get_basefile() ), false );

		if ( false !== $namespace ) {
			$this->namespace = $namespace;
			add_filter( 'themeisle_sdk_license_process_' . $namespace, [ $this, 'do_license_process' ], 10, 2 );
			add_filter( 'product_' . $namespace . '_license_status', [ $this, 'get_license_status' ], PHP_INT_MAX );
			add_filter( 'product_' . $namespace . '_license_key', [ $this->product, 'get_license' ] );
			add_filter( 'product_' . $namespace . '_license_plan', [ $this, 'get_plan' ], PHP_INT_MAX );
			if ( defined( 'WP_CLI' ) && WP_CLI ) {
				\WP_CLI::add_command( $namespace . ' activate', [ $this, 'cli_activate' ] );
				\WP_CLI::add_command( $namespace . ' deactivate', [ $this, 'cli_deactivate' ] );
				\WP_CLI::add_command( $namespace . ' is-active', [ $this, 'cli_is_active' ] );
			}
		}

		add_action( 'admin_head', [ $this, 'auto_activate' ] );
		if ( $this->product->is_plugin() ) {
			add_filter(
				'pre_set_site_transient_update_plugins',
				[
					$this,
					'pre_set_site_transient_update_plugins_filter',
				]
			);
			add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
			add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 ); //phpcs:ignore WordPressVIPMinimum.Hooks.RestrictedHooks.http_request_args
			if ( ! self::is_valid( $product->get_basefile() ) ) {
				add_filter(
					'plugin_action_links_' . plugin_basename( $product->get_basefile() ),
					function ( $actions ) {
						if ( $this->get_license_status( true ) !== self::STATUS_ACTIVE_EXPIRED ) {
							return $actions;
						}
						$new_actions['deactivate'] = $actions['deactivate'];
						$new_actions['renew_link'] = '<a style="color:#d63638" href="' . esc_url( $this->renew_url() ) . '" target="_blank" rel="external noopener noreferrer">Renew license to update</a>';

						return $new_actions;
					} 
				);
			}

			return $this;
		}
		if ( $this->product->is_theme() ) {
			add_filter( 'site_transient_update_themes', array( &$this, 'theme_update_transient' ) );
			add_action( 'delete_site_transient_update_themes', array( &$this, 'delete_theme_update_transient' ) );
			add_action( 'load-update-core.php', array( &$this, 'delete_theme_update_transient' ) );
			add_action( 'load-themes.php', array( &$this, 'delete_theme_update_transient' ) );
			add_action( 'load-themes.php', array( &$this, 'load_themes_screen' ) );
			add_filter( 'http_request_args', array( $this, 'disable_wporg_update' ), 5, 2 ); //phpcs:ignore WordPressVIPMinimum.Hooks.RestrictedHooks.http_request_args

			return $this;

		}

		return $this;
	}

	/**
	 * Register license fields for the products.
	 */
	public function register_license_hooks() {
		add_action( 'admin_init', array( $this, 'register_settings' ) );
		add_action( 'admin_init', array( $this, 'process_license' ) );
		add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
		add_action( 'admin_notices', array( $this, 'show_notice' ) );
		add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) );
	}

	/**
	 * Check license on filesystem.
	 *
	 * @return mixed License key.
	 */
	public function get_file_license() {

		$license_file = dirname( $this->product->get_basefile() ) . '/license.json';

		global $wp_filesystem;
		if ( ! is_file( $license_file ) ) {
			return false;
		}

		require_once ABSPATH . '/wp-admin/includes/file.php';
		\WP_Filesystem();
		$content = json_decode( $wp_filesystem->get_contents( $license_file ) );
		if ( ! is_object( $content ) ) {
			return false;
		}
		if ( ! isset( $content->key ) ) {
			return false;
		}
		return $content->key;
	}
	/**
	 * Run license activation on plugin activate.
	 */
	public function auto_activate() {
		$status = $this->get_license_status();
		if ( 'not_active' !== $status ) {
			return false;
		}

		if ( ! empty( $this->namespace ) ) {
			$license_key = apply_filters( 'product_' . $this->namespace . '_license_key_constant', '' );
		}

		if ( empty( $license_key ) ) {
			$license_key = $this->get_file_license();
		}
		if ( empty( $license_key ) ) {
			return;
		}


		$this->license_local = $license_key;
		$lock_key            = $this->product->get_key() . '_autoactivated';

		if ( 'yes' === get_option( $lock_key, '' ) ) {
			return;
		}
		if ( 'yes' === get_transient( $lock_key ) ) {
			return;
		}
		$response = $this->do_license_process( $license_key, 'activate' );

		set_transient( $lock_key, 'yes', 6 * HOUR_IN_SECONDS );

		if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) {
			return;
		}

		if ( true === $response ) {
			add_action( 'admin_notices', [ $this, 'autoactivate_notice' ] );
		}
	}

	/**
	 * Show auto-activate notice.
	 */
	public function autoactivate_notice() {
		?>
		<div class="notice notice-success is-dismissible">
			<p><?php echo sprintf( '<strong>%s</strong> has been successfully activated using <strong>%s</strong> license !', esc_attr( $this->product->get_name() ), esc_attr( str_repeat( '*', 20 ) . substr( $this->license_local, - 10 ) ) ); ?></p>
		</div>
		<?php
	}

	/**
	 * Activate product license on this site.
	 *
	 * ## OPTIONS
	 *
	 * @param array $args Command args.
	 *
	 * [<license-key>]
	 * : Product license key.
	 */
	public function cli_activate( $args ) {
		$license_key = isset( $args[0] ) ? trim( $args[0] ) : '';
		$response    = $this->do_license_process( $license_key, 'activate' );
		if ( true !== $response ) {
			\WP_CLI::error( $response->get_error_message() );

			return;
		}

		\WP_CLI::success( 'Product successfully activated.' );
	}

	/**
	 * Deactivate product license on this site.
	 *
	 * @param array $args Command args.
	 *
	 * ## OPTIONS
	 *
	 * [<license-key>]
	 * : Product license key.
	 */
	public function cli_deactivate( $args ) {
		$license_key = isset( $args[0] ) ? trim( $args[0] ) : '';
		$response    = $this->do_license_process( $license_key, 'deactivate' );
		if ( true !== $response ) {
			\WP_CLI::error( $response->get_error_message() );

			return;
		}

		\WP_CLI::success( 'Product successfully deactivated.' );
	}

	/**
	 * Checks if product has license activated.
	 *
	 * @param array $args Command args.
	 *
	 * @subcommand is-active
	 */
	public function cli_is_active( $args ) {

		$status = $this->get_license_status();
		if ( 'valid' === $status ) {
			\WP_CLI::halt( 0 );

			return;
		}

		\WP_CLI::halt( 1 );
	}
}
PK      \ Y  Y  -  codeinwp/themeisle-sdk/src/Modules/Logger.phpnu W+A        <?php
/**
 * The logger model class for ThemeIsle SDK
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Loader;
use ThemeisleSDK\Product;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Logger module for ThemeIsle SDK.
 */
class Logger extends Abstract_Module {
	/**
	 * Endpoint where to collect logs.
	 */
	const TRACKING_ENDPOINT = 'https://api.themeisle.com/tracking/log';

	/**
	 * Endpoint where to collect telemetry.
	 */
	const TELEMETRY_ENDPOINT = 'https://api.themeisle.com/tracking/events';


	/**
	 * Check if we should load the module for this product.
	 *
	 * @param Product $product Product to load the module for.
	 *
	 * @return bool Should we load ?
	 */
	public function can_load( $product ) {
		return apply_filters( $product->get_slug() . '_sdk_enable_logger', true );
	}

	/**
	 * Load module logic.
	 *
	 * @param Product $product Product to load.
	 *
	 * @return Logger Module object.
	 */
	public function load( $product ) {
		$this->product = $product;
		$this->setup_notification();
		$this->setup_actions();
		return $this;
	}

	/**
	 * Setup notification on admin.
	 */
	public function setup_notification() {
		if ( ! $this->product->is_wordpress_available() ) {
			return;
		}

		add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );

	}

	/**
	 * Setup tracking actions.
	 */
	public function setup_actions() {
		if ( ! $this->is_logger_active() ) {
			return;
		}

		$can_load_telemetry = apply_filters( 'themeisle_sdk_enable_telemetry', false );

		if ( $can_load_telemetry ) {
			add_action( 'admin_enqueue_scripts', array( $this, 'load_telemetry' ) );
		}

		$action_key = $this->product->get_key() . '_log_activity';
		if ( ! wp_next_scheduled( $action_key ) ) {
			wp_schedule_single_event( time() + ( wp_rand( 1, 24 ) * 3600 ), $action_key );
		}
		add_action( $action_key, array( $this, 'send_log' ) );
	}

	/**
	 * Check if the logger is active.
	 *
	 * @return bool Is logger active?
	 */
	private function is_logger_active() {
		$default = 'no';

		if ( ! $this->product->is_wordpress_available() ) {
			$default = 'yes';
		} else {
			$pro_slug = $this->product->get_pro_slug();

			if ( ! empty( $pro_slug ) ) {
				$all_products = Loader::get_products();
				if ( isset( $all_products[ $pro_slug ] ) ) {
					$default = 'yes';
				}
			}
		}

		return ( get_option( $this->product->get_key() . '_logger_flag', $default ) === 'yes' );
	}

	/**
	 * Add notification to queue.
	 *
	 * @param array $all_notifications Previous notification.
	 *
	 * @return array All notifications.
	 */
	public function add_notification( $all_notifications ) {

		$message = apply_filters( $this->product->get_key() . '_logger_heading', 'Do you enjoy <b>{product}</b>? Become a contributor by opting in to our anonymous data tracking. We guarantee no sensitive data is collected.' );

		$message       = str_replace(
			array( '{product}' ),
			$this->product->get_friendly_name(),
			$message
		);
		$button_submit = apply_filters( $this->product->get_key() . '_logger_button_submit', 'Sure, I would love to help.' );
		$button_cancel = apply_filters( $this->product->get_key() . '_logger_button_cancel', 'No, thanks.' );

		$all_notifications[] = [
			'id'      => $this->product->get_key() . '_logger_flag',
			'message' => $message,
			'ctas'    => [
				'confirm' => [
					'link' => '#',
					'text' => $button_submit,
				],
				'cancel'  => [
					'link' => '#',
					'text' => $button_cancel,
				],
			],
		];

		return $all_notifications;
	}

	/**
	 * Send the statistics to the api endpoint.
	 */
	public function send_log() {
		$environment                    = array();
		$theme                          = wp_get_theme();
		$environment['theme']           = array();
		$environment['theme']['name']   = $theme->get( 'Name' );
		$environment['theme']['author'] = $theme->get( 'Author' );
		$environment['theme']['parent'] = $theme->parent() !== false ? $theme->parent()->get( 'Name' ) : $theme->get( 'Name' );
		$environment['plugins']         = get_option( 'active_plugins' );
		global $wp_version;
		wp_remote_post(
			self::TRACKING_ENDPOINT,
			array(
				'method'      => 'POST',
				'timeout'     => 3,
				'redirection' => 5,
				'body'        => array(
					'site'        => get_site_url(),
					'slug'        => $this->product->get_slug(),
					'version'     => $this->product->get_version(),
					'wp_version'  => $wp_version,
					'locale'      => get_locale(),
					'data'        => apply_filters( $this->product->get_key() . '_logger_data', array() ),
					'environment' => $environment,
					'license'     => apply_filters( $this->product->get_key() . '_license_status', '' ),
				),
			)
		);
	}

	/**
	 * Load telemetry.
	 * 
	 * @return void
	 */
	public function load_telemetry() {
		// See which products have telemetry enabled.
		try {
			$products_with_telemetry                    = array();
			$all_products                               = Loader::get_products();
			$all_products[ $this->product->get_slug() ] = $this->product; // Add current product to the list of products to check for telemetry.

			foreach ( $all_products as $product_slug => $product ) {
				
				// Ignore pro products.
				if ( false !== strstr( $product_slug, 'pro' ) ) {
					continue;
				}

				$default = 'no';

				if ( ! $product->is_wordpress_available() ) {
					$default = 'yes';
				} else {
					$pro_slug = $product->get_pro_slug();

					if ( ! empty( $pro_slug ) && isset( $all_products[ $pro_slug ] ) ) {
						$default = 'yes';
					}
				}

				if ( 'yes' === get_option( $product->get_key() . '_logger_flag', $default ) ) {

					$main_slug  = explode( '-', $product_slug );
					$main_slug  = $main_slug[0];
					$pro_slug   = $product->get_pro_slug();
					$track_hash = Licenser::create_license_hash( str_replace( '-', '_', ! empty( $pro_slug ) ? $pro_slug : $product_slug ) );

					// Check if product was already tracked.
					$active_telemetry = false;
					foreach ( $products_with_telemetry as &$product_with_telemetry ) {
						if ( $product_with_telemetry['slug'] === $main_slug ) {
							$active_telemetry = true;
							break;
						}
					}

					if ( $active_telemetry ) {
						continue;
					}
					
					$products_with_telemetry[] = array(
						'slug'      => $main_slug,
						'trackHash' => $track_hash ? $track_hash : 'free',
						'consent'   => true,
					);
				}
			}

			$products_with_telemetry = apply_filters( 'themeisle_sdk_telemetry_products', $products_with_telemetry );

			if ( 0 === count( $products_with_telemetry ) ) {
				return;
			}

			global $themeisle_sdk_max_path;
			$asset_file = require $themeisle_sdk_max_path . '/assets/js/build/tracking/tracking.asset.php';

			wp_enqueue_script(
				'themeisle_sdk_telemetry_script',
				$this->get_sdk_uri() . 'assets/js/build/tracking/tracking.js',
				$asset_file['dependencies'],
				$asset_file['version'],
				true
			);
			
			wp_localize_script(
				'themeisle_sdk_telemetry_script',
				'tiTelemetry',
				array(
					'products' => $products_with_telemetry,
					'endpoint' => self::TELEMETRY_ENDPOINT,
				)
			);
		} catch ( \Exception $e ) {
			if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
				error_log( $e->getMessage() ); // phpcs:ignore
			}
		} catch ( \Error $e ) {
			if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
				error_log( $e->getMessage() ); // phpcs:ignore
			}
		} finally {
			return;
		}
	}
}
PK      \X    1  codeinwp/themeisle-sdk/src/Modules/Promotions.phpnu W+A        <?php
/**
 * The promotions model class for ThemeIsle SDK
 *
 * Here's how to hook it in your plugin: add_filter( 'menu_icons_load_promotions', function() { return array( 'otter' ); } );
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Promotions module for ThemeIsle SDK.
 */
class Promotions extends Abstract_Module {

	/**
	 * Holds the promotions.
	 *
	 * @var array
	 */
	private $promotions = array();

	/**
	 * Option key for promos.
	 *
	 * @var string
	 */
	private $option_main = 'themeisle_sdk_promotions';

	/**
	 * Option key for otter promos.
	 *
	 * @var string
	 */
	private $option_otter = 'themeisle_sdk_promotions_otter_installed';

	/**
	 * Option key for optimole promos.
	 *
	 * @var string
	 */
	private $option_optimole = 'themeisle_sdk_promotions_optimole_installed';

	/**
	 * Option key for ROP promos.
	 *
	 * @var string
	 */
	private $option_rop = 'themeisle_sdk_promotions_rop_installed';

	/**
	 * Option key for Neve FSE promos.
	 *
	 * @var string
	 */
	private $option_neve_fse = 'themeisle_sdk_promotions_neve_fse_installed';

	/**
	 * Loaded promotion.
	 *
	 * @var string
	 */
	private $loaded_promo;

	/**
	 * Woo promotions.
	 *
	 * @var array
	 */
	private $woo_promos = array();

	/**
	 * Debug mode.
	 *
	 * @var bool
	 */
	private $debug = false;

	/**
	 * Should we load this module.
	 *
	 * @param Product $product Product object.
	 *
	 * @return bool
	 */
	public function can_load( $product ) {
		if ( apply_filters( 'themeisle_sdk_ran_promos', false ) === true ) {
			return false;
		}
		if ( $this->is_from_partner( $product ) ) {
			return false;
		}

		$this->debug          = apply_filters( 'themeisle_sdk_promo_debug', $this->debug );
		$promotions_to_load   = apply_filters( $product->get_key() . '_load_promotions', array() );
		$promotions_to_load[] = 'optimole';
		$promotions_to_load[] = 'rop';
		$promotions_to_load[] = 'woo_plugins';
		$promotions_to_load[] = 'neve-fse';

		$this->promotions = $this->get_promotions();

		foreach ( $this->promotions as $slug => $data ) {
			if ( ! in_array( $slug, $promotions_to_load, true ) ) {
				unset( $this->promotions[ $slug ] );
			}
		}

		add_action( 'init', array( $this, 'register_settings' ), 99 );
		add_action( 'admin_init', array( $this, 'register_reference' ), 99 );

		return ! empty( $this->promotions );
	}

	/**
	 * Registers the hooks.
	 *
	 * @param Product $product Product to load.
	 */
	public function load( $product ) {
		if ( ! $this->is_writeable() || ! current_user_can( 'install_plugins' ) ) {
			return;
		}

		$this->product = $product;

		$last_dismiss = $this->get_last_dismiss_time();

		if ( ! $this->debug && $last_dismiss && ( time() - $last_dismiss ) < 7 * DAY_IN_SECONDS ) {
			return;
		}

		add_filter( 'attachment_fields_to_edit', array( $this, 'add_attachment_field' ), 10, 2 );
		add_action( 'current_screen', [ $this, 'load_available' ] );
		add_action( 'elementor/editor/after_enqueue_scripts', array( $this, 'enqueue' ) );
		add_action( 'wp_ajax_tisdk_update_option', array( $this, 'dismiss_promotion' ) );
		add_filter( 'themeisle_sdk_ran_promos', '__return_true' );

		if ( get_option( $this->option_neve_fse, false ) !== true ) {
			add_action( 'wp_ajax_themeisle_sdk_dismiss_notice', 'ThemeisleSDK\Modules\Notification::regular_dismiss' );
		}
	}

	/**
	 * Load available promotions.
	 */
	public function load_available() {
		$this->promotions = $this->filter_by_screen_and_merge();
		if ( empty( $this->promotions ) ) {
			return;
		}

		$this->load_promotion( $this->promotions[ array_rand( $this->promotions ) ] );
	}


	/**
	 * Register plugin reference.
	 *
	 * @return void
	 */
	public function register_reference() {
		if ( isset( $_GET['reference_key'] ) ) {
			update_option( 'otter_reference_key', sanitize_key( $_GET['reference_key'] ) );
		}

		if ( isset( $_GET['optimole_reference_key'] ) ) {
			update_option( 'optimole_reference_key', sanitize_key( $_GET['optimole_reference_key'] ) );
		}

		if ( isset( $_GET['rop_reference_key'] ) ) {
			update_option( 'rop_reference_key', sanitize_key( $_GET['rop_reference_key'] ) );
		}

		if ( isset( $_GET['neve_fse_reference_key'] ) ) {
			update_option( 'neve_fse_reference_key', sanitize_key( $_GET['neve_fse_reference_key'] ) );
		}
	}

	/**
	 * Register Settings
	 */
	public function register_settings() {
		$default = get_option( 'themeisle_sdk_promotions_otter', '{}' );

		register_setting(
			'themeisle_sdk_settings',
			$this->option_main,
			array(
				'type'              => 'string',
				'sanitize_callback' => 'sanitize_text_field',
				'show_in_rest'      => true,
				'default'           => $default,
			)
		);

		register_setting(
			'themeisle_sdk_settings',
			$this->option_otter,
			array(
				'type'              => 'boolean',
				'sanitize_callback' => 'rest_sanitize_boolean',
				'show_in_rest'      => true,
				'default'           => false,
			)
		);
		register_setting(
			'themeisle_sdk_settings',
			$this->option_optimole,
			array(
				'type'              => 'boolean',
				'sanitize_callback' => 'rest_sanitize_boolean',
				'show_in_rest'      => true,
				'default'           => false,
			)
		);
		register_setting(
			'themeisle_sdk_settings',
			$this->option_rop,
			array(
				'type'              => 'boolean',
				'sanitize_callback' => 'rest_sanitize_boolean',
				'show_in_rest'      => true,
				'default'           => false,
			)
		);
		register_setting(
			'themeisle_sdk_settings',
			$this->option_neve_fse,
			array(
				'type'              => 'boolean',
				'sanitize_callback' => 'rest_sanitize_boolean',
				'show_in_rest'      => true,
				'default'           => false,
			)
		);
	}

	/**
	 * Check if the path is writable.
	 *
	 * @return boolean
	 * @access  public
	 */
	public function is_writeable() {

		include_once ABSPATH . 'wp-admin/includes/file.php';
		$filesystem_method = get_filesystem_method();

		if ( 'direct' === $filesystem_method ) {
			return true;
		}

		return false;
	}

	/**
	 * Third-party compatibility.
	 * 
	 * @return boolean
	 */
	private function has_conflicts() {
		global $pagenow;
	
		// Editor notices aren't compatible with Enfold theme.
		if ( defined( 'AV_FRAMEWORK_VERSION' ) && in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Get promotions.
	 *
	 * @return array
	 */
	private function get_promotions() {
		$has_otter               = defined( 'OTTER_BLOCKS_VERSION' ) || $this->is_plugin_installed( 'otter-blocks' );
		$had_otter_from_promo    = get_option( $this->option_otter, false );
		$has_optimole            = defined( 'OPTIMOLE_VERSION' ) || $this->is_plugin_installed( 'optimole-wp' );
		$had_optimole_from_promo = get_option( $this->option_optimole, false );
		$has_rop                 = defined( 'ROP_LITE_VERSION' ) || $this->is_plugin_installed( 'tweet-old-post' );
		$had_rop_from_promo      = get_option( $this->option_rop, false );
		$has_woocommerce         = class_exists( 'WooCommerce' );
		$has_sparks              = defined( 'SPARKS_WC_VERSION' ) || $this->is_plugin_installed( 'sparks-for-woocommerce' );
		$has_ppom                = defined( 'PPOM_VERSION' ) || $this->is_plugin_installed( 'woocommerce-product-addon' );
		$is_min_req_v            = version_compare( get_bloginfo( 'version' ), '5.8', '>=' );
		$is_min_fse_v            = version_compare( get_bloginfo( 'version' ), '6.2', '>=' );
		$current_theme           = wp_get_theme();
		$has_neve_fse            = $current_theme->template === 'neve-fse' || $current_theme->parent() === 'neve-fse';
		$has_enough_attachments  = $this->has_min_media_attachments();
		$has_enough_old_posts    = $this->has_old_posts();

		$all = [
			'optimole'    => [
				'om-editor'      => [
					'env'    => ! $has_optimole && $is_min_req_v && ! $had_optimole_from_promo,
					'screen' => 'editor',
				],
				'om-image-block' => [
					'env'    => ! $has_optimole && $is_min_req_v && ! $had_optimole_from_promo,
					'screen' => 'editor',
				],
				'om-attachment'  => [
					'env'    => ! $has_optimole && ! $had_optimole_from_promo,
					'screen' => 'media-editor',
				],
				'om-media'       => [
					'env'    => ! $has_optimole && ! $had_optimole_from_promo && $has_enough_attachments,
					'screen' => 'media',
				],
				'om-elementor'   => [
					'env'    => ! $has_optimole && ! $had_optimole_from_promo && defined( 'ELEMENTOR_VERSION' ),
					'screen' => 'elementor',
				],
			],
			'otter'       => [
				'blocks-css'        => [
					'env'    => ! $has_otter && $is_min_req_v && ! $had_otter_from_promo,
					'screen' => 'editor',
				],
				'blocks-animation'  => [
					'env'    => ! $has_otter && $is_min_req_v && ! $had_otter_from_promo,
					'screen' => 'editor',
				],
				'blocks-conditions' => [
					'env'    => ! $has_otter && $is_min_req_v && ! $had_otter_from_promo,
					'screen' => 'editor',
				],
			],
			'rop'         => [
				'rop-posts' => [
					'env'    => ! $has_rop && ! $had_rop_from_promo && $has_enough_old_posts,
					'screen' => 'edit-post',
				],
			],
			'woo_plugins' => [
				'ppom'                  => [
					'env'    => ! $has_ppom && $has_woocommerce,
					'screen' => 'edit-product',
				],
				'sparks-wishlist'       => [
					'env'    => ! $has_sparks && $has_woocommerce,
					'screen' => 'edit-product',
				],
				'sparks-announcement'   => [
					'env'    => ! $has_sparks && $has_woocommerce,
					'screen' => 'edit-product',
				],
				'sparks-product-review' => [
					'env'    => ! $has_sparks && $has_woocommerce,
					'screen' => 'edit-product',
				],
			],
			'neve-fse'    => [
				'neve-fse-themes-popular' => [
					'env'    => ! $has_neve_fse && $is_min_fse_v,
					'screen' => 'themes-install-popular',
				],
			],
		];

		foreach ( $all as $slug => $data ) {
			foreach ( $data as $key => $conditions ) {
				if ( ! $conditions['env'] || $this->has_conflicts() ) {
					unset( $all[ $slug ][ $key ] );

					continue;
				}

				if ( $this->get_upsells_dismiss_time( $key ) ) {
					unset( $all[ $slug ][ $key ] );
				}
			}

			if ( empty( $all[ $slug ] ) ) {
				unset( $all[ $slug ] );
			}
		}

		return $all;
	}

	/**
	 * Get the upsell dismiss time.
	 *
	 * @param string $key The upsell key. If empty will return all dismiss times.
	 *
	 * @return false | string | array
	 */
	private function get_upsells_dismiss_time( $key = '' ) {
		$old  = get_option( 'themeisle_sdk_promotions_otter', '{}' );
		$data = get_option( $this->option_main, $old );

		$data = json_decode( $data, true );

		if ( empty( $key ) ) {
			return $data;
		}

		return isset( $data[ $key ] ) ? $data[ $key ] : false;
	}

	/**
	 * Get the last dismiss time of a promotion.
	 *
	 * @return int The timestamp of last dismiss, or install time - 4 days.
	 */
	private function get_last_dismiss_time() {
		$dismissed = $this->get_upsells_dismiss_time();

		if ( empty( $dismissed ) ) {
			// we return the product install time - 4 days because we want to show the upsell after 3 days,
			// and we move the product install time 4 days in the past.
			return $this->product->get_install_time() - 4 * DAY_IN_SECONDS;
		}

		return max( array_values( $dismissed ) );
	}

	/**
	 * Filter by screen & merge into single array of keys.
	 *
	 * @return array
	 */
	private function filter_by_screen_and_merge() {
		$current_screen = get_current_screen();

		$is_elementor     = isset( $_GET['action'] ) && $_GET['action'] === 'elementor';
		$is_media         = isset( $current_screen->id ) && $current_screen->id === 'upload';
		$is_posts         = isset( $current_screen->id ) && $current_screen->id === 'edit-post';
		$is_editor        = method_exists( $current_screen, 'is_block_editor' ) && $current_screen->is_block_editor();
		$is_theme_install = isset( $current_screen->id ) && ( $current_screen->id === 'theme-install' || $current_screen->id === 'themes' );
		$is_product       = isset( $current_screen->id ) && $current_screen->id === 'product';

		$return = [];

		foreach ( $this->promotions as $slug => $promos ) {
			foreach ( $promos as $key => $data ) {
				switch ( $data['screen'] ) {
					case 'media-editor':
						if ( ! $is_media && ! $is_editor ) {
							unset( $this->promotions[ $slug ][ $key ] );
						}
						break;
					case 'media':
						if ( ! $is_media ) {
							unset( $this->promotions[ $slug ][ $key ] );
						}
						break;
					case 'editor':
						if ( ! $is_editor || $is_elementor ) {
							unset( $this->promotions[ $slug ][ $key ] );
						}
						break;
					case 'elementor':
						if ( ! $is_elementor ) {
							unset( $this->promotions[ $slug ][ $key ] );
						}
						break;
					case 'edit-post':
						if ( ! $is_posts ) {
							unset( $this->promotions[ $slug ][ $key ] );
						}
						break;
					case 'edit-product':
						if ( ! $is_product ) {
							unset( $this->promotions[ $slug ][ $key ] );
						}
						break;
					case 'themes-install-popular':
						if ( ! $is_theme_install ) {
							unset( $this->promotions[ $slug ][ $key ] );
						}
						break;
				}
			}

			$return = array_merge( $return, $this->promotions[ $slug ] );
		}

		return array_keys( $return );
	}

	/**
	 * Load single promotion.
	 *
	 * @param string $slug slug of the promotion.
	 */
	private function load_promotion( $slug ) {
		$this->loaded_promo = $slug;

		if ( $this->debug ) {
			add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue' ] );
			add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] );
			if ( $this->get_upsells_dismiss_time( 'om-media' ) === false ) {
				add_action( 'admin_notices', [ $this, 'render_optimole_dash_notice' ] );
			}
			if ( $this->get_upsells_dismiss_time( 'rop-posts' ) === false ) {
				add_action( 'admin_notices', [ $this, 'render_rop_dash_notice' ] );
			}
			if ( $this->get_upsells_dismiss_time( 'neve-fse-themes-popular' ) === false ) {
				add_action( 'admin_notices', [ $this, 'render_neve_fse_themes_notice' ] );
			}

			$this->load_woo_promos();
			return;
		}

		switch ( $slug ) {
			case 'om-editor':
			case 'om-image-block':
			case 'blocks-css':
			case 'blocks-animation':
			case 'blocks-conditions':
				add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue' ] );
				break;
			case 'om-attachment':
				add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] );
				break;
			case 'om-media':
				add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] );
				add_action( 'admin_notices', [ $this, 'render_optimole_dash_notice' ] );
				break;
			case 'rop-posts':
				add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] );
				add_action( 'admin_notices', [ $this, 'render_rop_dash_notice' ] );
				break;
			case 'ppom':
			case 'sparks-wishlist':
			case 'sparks-announcement':
			case 'sparks-product-reviews':
				$this->load_woo_promos();
				break;
			case 'neve-fse-themes-popular':
				// Remove any other notifications if Neve FSE promotion is showing
				remove_action( 'admin_notices', array( 'ThemeisleSDK\Modules\Notification', 'show_notification' ) );
				remove_action( 'wp_ajax_themeisle_sdk_dismiss_notice', array( 'ThemeisleSDK\Modules\Notification', 'dismiss' ) );
				remove_action( 'admin_head', array( 'ThemeisleSDK\Modules\Notification', 'dismiss_get' ) );
				remove_action( 'admin_head', array( 'ThemeisleSDK\Modules\Notification', 'setup_notifications' ) );
				// Add required actions to display this notification
				add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] );
				add_action( 'admin_notices', [ $this, 'render_neve_fse_themes_notice' ] );
				break;
		}
	}

	/**
	 * Render dashboard notice.
	 */
	public function render_optimole_dash_notice() {
		$screen = get_current_screen();

		if ( ! isset( $screen->id ) || $screen->id !== 'upload' ) {
			return;
		}

		echo '<div id="ti-optml-notice" class="notice notice-info ti-sdk-om-notice"></div>';
	}

	/**
	 * Enqueue the assets.
	 */
	public function enqueue() {
		global $themeisle_sdk_max_path;
		$handle            = 'ti-sdk-promo';
		$saved             = $this->get_upsells_dismiss_time();
		$themeisle_sdk_src = $this->get_sdk_uri();
		$user              = wp_get_current_user();
		$asset_file        = require $themeisle_sdk_max_path . '/assets/js/build/promos/index.asset.php';
		$deps              = array_merge( $asset_file['dependencies'], [ 'updates' ] );

		wp_register_script( $handle, $themeisle_sdk_src . 'assets/js/build/promos/index.js', $deps, $asset_file['version'], true );
		wp_localize_script(
			$handle,
			'themeisleSDKPromotions',
			[
				'debug'                 => $this->debug,
				'email'                 => $user->user_email,
				'showPromotion'         => $this->loaded_promo,
				'optionKey'             => $this->option_main,
				'product'               => $this->product->get_name(),
				'option'                => empty( $saved ) ? new \stdClass() : $saved,
				'nonce'                 => wp_create_nonce( 'wp_rest' ),
				'assets'                => $themeisle_sdk_src . 'assets/images/',
				'optimoleApi'           => esc_url( rest_url( 'optml/v1/register_service' ) ),
				'optimoleActivationUrl' => $this->get_plugin_activation_link( 'optimole-wp' ),
				'otterActivationUrl'    => $this->get_plugin_activation_link( 'otter-blocks' ),
				'ropActivationUrl'      => $this->get_plugin_activation_link( 'tweet-old-post' ),
				'optimoleDash'          => esc_url( add_query_arg( [ 'page' => 'optimole' ], admin_url( 'upload.php' ) ) ),
				'ropDash'               => esc_url( add_query_arg( [ 'page' => 'TweetOldPost' ], admin_url( 'admin.php' ) ) ),
				'neveFSEMoreUrl'        => tsdk_utmify( 'https://themeisle.com/themes/neve-fse/', 'neve-fse-themes-popular', 'theme-install' ),
				// translators: %s is the product name.
				'title'                 => esc_html( sprintf( __( 'Recommended by %s', 'neve' ), $this->product->get_name() ) ),
			]
		);
		wp_enqueue_script( $handle );
		wp_enqueue_style( $handle, $themeisle_sdk_src . 'assets/js/build/promos/style-index.css', [ 'wp-components' ], $asset_file['version'] );
	}

	/**
	 * Render rop notice.
	 */
	public function render_rop_dash_notice() {
		$screen = get_current_screen();

		if ( ! isset( $screen->id ) || $screen->id !== 'edit-post' ) {
			return;
		}

		echo '<div id="ti-rop-notice" class="notice notice-info ti-sdk-rop-notice"></div>';
	}

	/**
	 * Render Neve FSE Themes notice.
	 */
	public function render_neve_fse_themes_notice() {
		echo '<div id="ti-neve-fse-notice" class="notice notice-info ti-sdk-neve-fse-notice"></div>';
	}

	/**
	 * Add promo to attachment modal.
	 *
	 * @param array    $fields Fields array.
	 * @param \WP_Post $post Post object.
	 *
	 * @return array
	 */
	public function add_attachment_field( $fields, $post ) {
		if ( $post->post_type !== 'attachment' ) {
			return $fields;
		}

		if ( ! isset( $post->post_mime_type ) || strpos( $post->post_mime_type, 'image' ) === false ) {
			return $fields;
		}

		$meta = wp_get_attachment_metadata( $post->ID );

		if ( isset( $meta['filesize'] ) && $meta['filesize'] < 200000 ) {
			return $fields;
		}

		$fields['optimole'] = array(
			'input' => 'html',
			'html'  => '<div id="ti-optml-notice-helper"></div>',
			'label' => '',
		);

		if ( count( $fields ) < 2 ) {
			add_filter( 'wp_required_field_message', '__return_empty_string' );
		}

		return $fields;
	}

	/**
	 * Check if has 50 image media items.
	 *
	 * @return bool
	 */
	private function has_min_media_attachments() {
		if ( $this->debug ) {
			return true;
		}
		$attachment_count = get_transient( 'tsk_attachment_count' );
		if ( false === $attachment_count ) {
			$args = array(
				'post_type'      => 'attachment',
				'posts_per_page' => 51,
				'fields'         => 'ids',
				'post_status'    => 'inherit',
				'no_found_rows'  => true,
			);

			$query            = new \WP_Query( $args );
			$attachment_count = $query->post_count;


			set_transient( 'tsk_attachment_count', $attachment_count, DAY_IN_SECONDS );
		}
		return $attachment_count > 50;
	}

	/**
	 * Check if the website has more than 100 posts and over 10 are over a year old.
	 *
	 * @return bool
	 */
	private function has_old_posts() {
		if ( $this->debug ) {
			return true;
		}

		$posts_count = get_transient( 'tsk_posts_count' );

		// Create a new WP_Query object to get all posts
		$args = array(
			'post_type'      => 'post',
			'posts_per_page' => 101, //phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page
			'fields'         => 'ids',
			'no_found_rows'  => true,
		);

		if ( false === $posts_count ) {
			$query       = new \WP_Query( $args );
			$total_posts = $query->post_count;
			wp_reset_postdata();

			// Count the number of posts older than 1 year
			$one_year_ago       = gmdate( 'Y-m-d H:i:s', strtotime( '-1 year' ) );
			$args['date_query'] = array(
				array(
					'before'    => $one_year_ago,
					'inclusive' => true,
				),
			);

			$query     = new \WP_Query( $args );
			$old_posts = $query->post_count;
			wp_reset_postdata();

			$posts_count = array(
				'total_posts' => $total_posts,
				'old_posts'   => $old_posts,
			);

			set_transient( 'tsk_posts_count', $posts_count, DAY_IN_SECONDS );
		}

		// Check if there are more than 100 posts and more than 10 old posts
		return $posts_count['total_posts'] > 100 && $posts_count['old_posts'] > 10;
	}

	/**
	 * Check if should load Woo promos.
	 *
	 * @return bool
	 */
	private function load_woo_promos() {
		$this->woo_promos = array(
			'ppom'                  => array(
				'title'       => 'Product Add-Ons',
				'description' => 'Add extra custom fields & add-ons on your product pages, like sizes, colors & more.',
				'icon'        => '<svg width="25" height="25" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1800 1800"><path d="M241.023,324.818c0.252,0,0.505,0.035,0.758,0.035h465.68c17.266,0,31.256-13.99,31.256-31.252 c0-17.262-13.99-31.247-31.256-31.247H351.021h-109.24c-17.258,0-31.252,13.985-31.252,31.247 C210.529,310.605,224.121,324.412,241.023,324.818z"/><path d="M210.529,450.306c0,17.257,13.994,31.252,31.252,31.252h769.451c17.262,0,31.256-13.995,31.256-31.252 c0-17.266-13.994-31.252-31.256-31.252H241.781C224.523,419.054,210.529,433.04,210.529,450.306z"/><path d="M1011.232,575.751H241.781c-8.149,0-15.549,3.147-21.116,8.261c-6.213,5.712-10.136,13.879-10.136,22.987 c0,17.262,13.994,31.26,31.252,31.26h769.451c17.262,0,31.256-13.999,31.256-31.26c0-9.108-3.923-17.275-10.141-22.987 C1026.781,578.898,1019.386,575.751,1011.232,575.751z"/><path d="M1011.232,732.461H241.781c-17.258,0-31.252,13.99-31.252,31.247c0,17.262,13.994,31.257,31.252,31.257 h769.451c17.262,0,31.256-13.995,31.256-31.257C1042.488,746.451,1028.494,732.461,1011.232,732.461z"/><path d="M1011.232,889.157H241.781c-8.149,0-15.549,3.147-21.116,8.261c-6.213,5.713-10.136,13.879-10.136,22.987 c0,17.257,13.994,31.261,31.252,31.261h769.451c17.262,0,31.256-14.004,31.256-31.261c0-9.108-3.923-17.274-10.141-22.987 C1026.781,892.305,1019.386,889.157,1011.232,889.157z"/><path d="M1011.232,1045.867H241.781c-17.258,0-31.252,13.99-31.252,31.243c0,17.271,13.994,31.265,31.252,31.265 h769.451c17.262,0,31.256-13.994,31.256-31.265C1042.488,1059.857,1028.494,1045.867,1011.232,1045.867z"/><path d="M1011.232,1202.576H241.781c-17.258,0-31.252,13.995-31.252,31.252c0,17.258,13.994,31.252,31.252,31.252 h769.451c17.262,0,31.256-13.994,31.256-31.252C1042.488,1216.571,1028.494,1202.576,1011.232,1202.576z"/><path d="M1011.232,1359.273H241.781c-8.149,0-15.549,3.151-21.116,8.265c-6.213,5.713-10.136,13.875-10.136,22.987 c0,17.258,13.994,31.261,31.252,31.261h769.451c17.262,0,31.256-14.003,31.256-31.261c0-9.112-3.923-17.274-10.141-22.987 C1026.781,1362.425,1019.386,1359.273,1011.232,1359.273z"/><path d="M1233.542,251.228l-49.851-45.109L1052.136,87.076l-59.185-53.554c-5.293-4.792-11.947-7.421-18.786-7.836 h-3.49H83.676c-45.688,0-82.858,37.375-82.858,83.316v1583.612c0,45.94,37.17,83.316,82.858,83.316h1078.562 c45.68,0,82.845-37.376,82.845-83.316V277.08v-3.182C1244.646,264.73,1240.261,256.589,1233.542,251.228z M1003.117,125.864 l131.119,118.657h-131.119V125.864z M1183.691,1692.613c0,12.094-9.622,21.926-21.454,21.926H83.676 c-11.836,0-21.467-9.832-21.467-21.926V109.001c0-12.089,9.631-21.925,21.467-21.925h857.857V275.38 c0,17.052,13.785,30.862,30.786,30.862h211.372V1692.613z"/><path d="M1798.578,180.737c-7.049-88.305-81.114-158.02-171.205-158.02c-0.004,0-0.004,0-0.004,0 c-45.889,0-89.033,17.874-121.479,50.32c-29.18,29.175-46.519,67.005-49.73,107.699h-0.586v13.609c0,0.06-0.005,0.115-0.005,0.175 c0,0.026,0.005,0.056,0.005,0.082l-0.005,1369.26h0.197c0.557,5.404,2.522,10.731,6.047,15.373l141.135,185.91 c5.803,7.648,14.851,12.136,24.447,12.136c9.601-0.004,18.646-4.496,24.447-12.14l141.093-185.897 c3.528-4.65,5.494-9.982,6.051-15.391h0.197V180.737H1798.578z M1549.299,116.448c20.854-20.855,48.578-32.339,78.07-32.339h0.004 c50.24,0,92.746,33.723,106.076,79.718h-212.19C1526.358,146.098,1535.896,129.852,1549.299,116.448z M1595.372,1502.468 l-78.413,0.005l0.005-1260.345h220.828v1260.336h-81.103l0.009-1016.486l-61.335,0.004L1595.372,1502.468z M1627.382,1695.821 l-100.171-131.963l200.338-0.004L1627.382,1695.821z"/></svg>',
				'has_install' => true,
				'link'        => wp_nonce_url(
					add_query_arg(
						array(
							'action' => 'install-plugin',
							'plugin' => 'woocommerce-product-addon',
						),
						admin_url( 'update.php' )
					),
					'install-plugin_woocommerce-product-addon'
				),
			),
			'sparks-wishlist'       => array(
				'title'       => 'Wishlist',
				'description' => 'Loyalize your customers by allowing them to save their favorite products.',
				'icon'        => '<svg width="25" height="25" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/SVG" aria-hidden="true"><path d="M60 21.25H57.5V40.125H60V21.25Z"></path><path d="M2.5 40H0V8.75C0 6.625 1.625 5 3.75 5H25V7.5H3.75C3 7.5 2.5 8 2.5 8.75V40Z"></path><path d="M56.25 51.25H3.75C1.625 51.25 0 49.625 0 47.5V42.5H25V45H2.5V47.5C2.5 48.25 3 48.75 3.75 48.75H56.25C57 48.75 57.5 48.25 57.5 47.5V43.75H60V47.5C60 49.625 58.375 51.25 56.25 51.25Z"></path><path d="M23.75 58.75H21.25V57.25L22.5 51.125V50H25V51.5L23.75 57.625V58.75Z"></path><path d="M38.75 58.75H36.25V57.625L35 51.25V50H37.5V51.125L38.75 57.5V58.75Z"></path><path d="M41.25 57.5H18.75V60H41.25V57.5Z"></path><path d="M56.25 32.5H43.75C41.625 32.5 40 30.875 40 28.75V3.75C40 1.625 41.625 0 43.75 0H56.25C58.375 0 60 1.625 60 3.75V28.75C60 30.875 58.375 32.5 56.25 32.5ZM43.75 2.5C43 2.5 42.5 3 42.5 3.75V28.75C42.5 29.5 43 30 43.75 30H56.25C57 30 57.5 29.5 57.5 28.75V3.75C57.5 3 57 2.5 56.25 2.5H43.75Z"></path><path d="M50 27.5C50.6904 27.5 51.25 26.9404 51.25 26.25C51.25 25.5596 50.6904 25 50 25C49.3096 25 48.75 25.5596 48.75 26.25C48.75 26.9404 49.3096 27.5 50 27.5Z"></path><path d="M51.25 45H31.25C29.125 45 27.5 43.375 27.5 41.25V8.75C27.5 6.625 29.125 5 31.25 5H37.5V7.5H31.25C30.5 7.5 30 8 30 8.75V41.25C30 42 30.5 42.5 31.25 42.5H51.25C52 42.5 52.5 42 52.5 41.25V35H55V41.25C55 43.375 53.375 45 51.25 45Z"></path><path d="M41.25 40C41.9404 40 42.5 39.4404 42.5 38.75C42.5 38.0596 41.9404 37.5 41.25 37.5C40.5596 37.5 40 38.0596 40 38.75C40 39.4404 40.5596 40 41.25 40Z"></path><path d="M21.75 40H18.25L13.25 35H11.75L6.75 40H0V37.5H5.75L10.75 32.5H14.25L19.25 37.5H20.75L52.875 5.375L54.625 7.125L21.75 40Z"></path><path d="M55 11.25H52.5V7.5H48.75V5H55V11.25Z"></path><defs><clip-path id="clip0"><rect width="60" height="60" fill="white"></rect></clip-path></defs></svg>',
				'link'        => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce/', 'promo', 'products-tabs' ),
			),
			'sparks-announcement'   => array(
				'title'       => 'Multi-Announcement Bars',
				'description' => 'Add a top notification bar on your website to highlight the latest products, offers, or upcoming events.',
				'icon'        => '<svg width="25" height="25" viewBox="0 0 60 61" fill="none" xmlns="http://www.w3.org/2000/SVG" aria-hidden="true"><path d="M30 8.89282C29.6685 8.89282 29.3505 8.76113 29.1161 8.52671C28.8817 8.29228 28.75 7.97434 28.75 7.64282V1.39282C28.75 1.0613 28.8817 0.743359 29.1161 0.508939C29.3505 0.274518 29.6685 0.142822 30 0.142822C30.3315 0.142822 30.6495 0.274518 30.8839 0.508939C31.1183 0.743359 31.25 1.0613 31.25 1.39282V7.64282C31.25 7.97434 31.1183 8.29228 30.8839 8.52671C30.6495 8.76113 30.3315 8.89282 30 8.89282Z"></path><path d="M30 21.9105L26.25 18.1605V7.82598L26.9409 7.47992C27.8914 7.00723 28.9385 6.76123 30 6.76123C31.0615 6.76123 32.1086 7.00723 33.0591 7.47992L33.75 7.82598V18.1605L30 21.9105ZM28.75 17.1253L30 18.3753L31.25 17.1253V9.44219C30.4344 9.19928 29.5656 9.19928 28.75 9.44219V17.1253Z"></path><path d="M60 60.1428H0V22.6428H17.5C17.8315 22.6428 18.1495 22.7745 18.3839 23.0089C18.6183 23.2434 18.75 23.5613 18.75 23.8928C18.75 24.2243 18.6183 24.5423 18.3839 24.7767C18.1495 25.0111 17.8315 25.1428 17.5 25.1428H2.5V57.6428H57.5V25.1428H42.5C42.1685 25.1428 41.8505 25.0111 41.6161 24.7767C41.3817 24.5423 41.25 24.2243 41.25 23.8928C41.25 23.5613 41.3817 23.2434 41.6161 23.0089C41.8505 22.7745 42.1685 22.6428 42.5 22.6428H60V60.1428Z"></path><path d="M11.2493 53.8933C11.0421 53.8929 10.8383 53.841 10.6561 53.7424C10.474 53.6438 10.3191 53.5015 10.2055 53.3283C10.0919 53.1551 10.0231 52.9564 10.0052 52.75C9.98727 52.5436 10.0209 52.336 10.103 52.1458L26.353 14.6459C26.4182 14.4953 26.5125 14.359 26.6304 14.2448C26.7483 14.1306 26.8876 14.0408 27.0402 13.9804C27.1928 13.9201 27.3559 13.8903 27.52 13.893C27.6841 13.8956 27.8461 13.9306 27.9967 13.9958C28.1473 14.0611 28.2836 14.1553 28.3978 14.2732C28.5119 14.3912 28.6018 14.5304 28.6621 14.683C28.7225 14.8357 28.7522 14.9987 28.7496 15.1628C28.7469 15.3269 28.712 15.4889 28.6467 15.6395L12.3967 53.1395C12.2999 53.3634 12.1397 53.5541 11.9358 53.6881C11.7319 53.822 11.4932 53.8934 11.2493 53.8933Z"></path><path d="M48.7505 53.8935C48.5065 53.8935 48.2679 53.8222 48.064 53.6883C47.8601 53.5543 47.6999 53.3637 47.603 53.1398L31.353 15.6398C31.2212 15.3356 31.2157 14.9915 31.3376 14.6833C31.4595 14.375 31.6989 14.1278 32.003 13.9961C32.3072 13.8643 32.6513 13.8588 32.9595 13.9807C33.2678 14.1026 33.515 14.3419 33.6467 14.6461L49.8967 52.1461C49.9789 52.3363 50.0125 52.5439 49.9946 52.7503C49.9767 52.9566 49.9078 53.1553 49.7942 53.3285C49.6806 53.5018 49.5258 53.6441 49.3436 53.7427C49.1614 53.8413 48.9576 53.8932 48.7505 53.8936V53.8935Z"></path><path d="M30 33.8928C29.6685 33.8928 29.3505 33.7611 29.1161 33.5267C28.8817 33.2923 28.75 32.9743 28.75 32.6428V25.1428C28.75 24.8113 28.8817 24.4934 29.1161 24.2589C29.3505 24.0245 29.6685 23.8928 30 23.8928C30.3315 23.8928 30.6495 24.0245 30.8839 24.2589C31.1183 24.4934 31.25 24.8113 31.25 25.1428V32.6428C31.25 32.9743 31.1183 33.2923 30.8839 33.5267C30.6495 33.7611 30.3315 33.8928 30 33.8928Z"></path><path d="M45 30.1428H15C14.6685 30.1428 14.3505 30.0111 14.1161 29.7767C13.8817 29.5423 13.75 29.2243 13.75 28.8928C13.75 28.5613 13.8817 28.2434 14.1161 28.0089C14.3505 27.7745 14.6685 27.6428 15 27.6428H45C45.3315 27.6428 45.6495 27.7745 45.8839 28.0089C46.1183 28.2434 46.25 28.5613 46.25 28.8928C46.25 29.2243 46.1183 29.5423 45.8839 29.7767C45.6495 30.0111 45.3315 30.1428 45 30.1428Z"></path><defs><clip-path id="clip0"><rect width="60" height="60" fill="white" transform="translate(0 0.142822)"></rect></clip-path></defs></svg>',
				'link'        => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce/', 'promo', 'products-tabs' ),
			),
			'sparks-product-review' => array(
				'title'       => 'Advanced Product Review',
				'description' => 'Enable an advanced review section, enlarging the basic review options with lots of capabilities.',
				'icon'        => '<svg width="25" height="25" viewBox="0 0 60 61" fill="none" xmlns="http://www.w3.org/2000/SVG" aria-hidden="true"><path d="M58.75 54.1797H1.25C1.08584 54.1797 0.923271 54.1474 0.771595 54.0846C0.619919 54.0218 0.482103 53.9297 0.366021 53.8137C0.24994 53.6976 0.157867 53.5598 0.0950637 53.4081C0.0322604 53.2564 -4.26571e-05 53.0939 4.22759e-08 52.9297V6.67969C-4.26571e-05 6.51552 0.0322604 6.35296 0.0950637 6.20128C0.157867 6.04961 0.24994 5.91179 0.366021 5.79571C0.482103 5.67963 0.619919 5.58755 0.771595 5.52475C0.923271 5.46195 1.08584 5.42964 1.25 5.42969H58.75C58.9142 5.42964 59.0767 5.46195 59.2284 5.52475C59.3801 5.58755 59.5179 5.67963 59.634 5.79571C59.7501 5.91179 59.8421 6.04961 59.9049 6.20128C59.9677 6.35296 60 6.51552 60 6.67969V52.9297C60 53.0939 59.9677 53.2564 59.9049 53.4081C59.8421 53.5598 59.7501 53.6976 59.634 53.8137C59.5179 53.9297 59.3801 54.0218 59.2284 54.0846C59.0767 54.1474 58.9142 54.1797 58.75 54.1797ZM2.5 51.6797H57.5V7.92969H2.5V51.6797Z"></path><path d="M6.25 15.4297C6.94036 15.4297 7.5 14.87 7.5 14.1797C7.5 13.4893 6.94036 12.9297 6.25 12.9297C5.55964 12.9297 5 13.4893 5 14.1797C5 14.87 5.55964 15.4297 6.25 15.4297Z"></path><path d="M10 15.4297C10.6904 15.4297 11.25 14.87 11.25 14.1797C11.25 13.4893 10.6904 12.9297 10 12.9297C9.30964 12.9297 8.75 13.4893 8.75 14.1797C8.75 14.87 9.30964 15.4297 10 15.4297Z"></path><path d="M13.75 15.4297C14.4404 15.4297 15 14.87 15 14.1797C15 13.4893 14.4404 12.9297 13.75 12.9297C13.0596 12.9297 12.5 13.4893 12.5 14.1797C12.5 14.87 13.0596 15.4297 13.75 15.4297Z"></path><path d="M58.75 15.4297H18.75C18.4185 15.4297 18.1005 15.298 17.8661 15.0636C17.6317 14.8292 17.5 14.5112 17.5 14.1797C17.5 13.8482 17.6317 13.5302 17.8661 13.2958C18.1005 13.0614 18.4185 12.9297 18.75 12.9297H58.75C59.0815 12.9297 59.3995 13.0614 59.6339 13.2958C59.8683 13.5302 60 13.8482 60 14.1797C60 14.5112 59.8683 14.8292 59.6339 15.0636C59.3995 15.298 59.0815 15.4297 58.75 15.4297Z"></path><path d="M28.7502 37.9297C28.4187 37.9295 28.1009 37.7978 27.8664 37.5634L24.4289 34.1259C24.198 33.8908 24.0693 33.574 24.0708 33.2445C24.0723 32.915 24.2039 32.5994 24.4369 32.3664C24.6699 32.1334 24.9855 32.0018 25.315 32.0003C25.6445 31.9988 25.9613 32.1275 26.1964 32.3584L28.6977 34.8597L38.8588 23.4522C38.968 23.3296 39.1002 23.2298 39.2479 23.1583C39.3957 23.0869 39.5561 23.0452 39.7199 23.0358C39.8838 23.0263 40.0479 23.0492 40.2029 23.1032C40.3579 23.1571 40.5008 23.2411 40.6233 23.3503C40.7459 23.4594 40.8457 23.5917 40.9172 23.7394C40.9886 23.8872 41.0303 24.0476 41.0397 24.2114C41.0492 24.3753 41.0263 24.5394 40.9723 24.6944C40.9184 24.8494 40.8344 24.9922 40.7253 25.1148L29.6834 37.511C29.5702 37.6382 29.4322 37.7409 29.2779 37.8129C29.1237 37.8849 28.9563 37.9247 28.7862 37.9298L28.7502 37.9297Z"></path><path d="M29.977 44.1812C28.3217 44.1775 26.6876 43.8085 25.1912 43.1007C23.6948 42.3928 22.3731 41.3635 21.3203 40.0861C20.2675 38.8087 19.5095 37.3148 19.1004 35.7108C18.6913 34.1068 18.6413 32.4322 18.9537 30.8067C19.2662 29.1811 19.9335 27.6445 20.9081 26.3065C21.8827 24.9684 23.1406 23.862 24.592 23.0659C26.0433 22.2699 27.6525 21.804 29.3046 21.7013C30.9568 21.5987 32.6113 21.8619 34.15 22.4722C34.4579 22.5949 34.7044 22.8349 34.8354 23.1393C34.9663 23.4438 34.9709 23.7878 34.8482 24.0957C34.7255 24.4036 34.4856 24.6501 34.1811 24.7811C33.8766 24.912 33.5326 24.9166 33.2247 24.7939C31.44 24.0862 29.472 23.985 27.6241 24.5059C25.7762 25.0269 24.1508 26.141 22.9985 27.6767C21.8462 29.2124 21.2308 31.0844 21.2473 33.0043C21.2637 34.9242 21.9111 36.7854 23.0895 38.3011C24.268 39.8168 25.9122 40.903 27.7688 41.3922C29.6254 41.8813 31.5913 41.7464 33.3637 41.0082C35.136 40.27 36.6164 38.9694 37.5768 37.3069C38.5372 35.6444 38.9242 33.7122 38.6782 31.8081C38.6568 31.6451 38.6678 31.4795 38.7104 31.3208C38.7531 31.1621 38.8267 31.0133 38.927 30.8831C39.0272 30.7528 39.1522 30.6436 39.2947 30.5617C39.4373 30.4798 39.5945 30.4268 39.7575 30.4058C39.9206 30.3848 40.0861 30.3961 40.2448 30.4391C40.4034 30.4822 40.552 30.5561 40.682 30.6566C40.8121 30.7572 40.921 30.8824 41.0026 31.0251C41.0842 31.1678 41.1368 31.3252 41.1574 31.4883C41.3469 32.9535 41.2459 34.4417 40.8602 35.8679C40.4745 37.294 39.8116 38.6303 38.9094 39.8002C38.0072 40.9702 36.8834 41.9509 35.6021 42.6865C34.3208 43.4221 32.9071 43.898 31.4419 44.0872C30.9561 44.1494 30.4668 44.1807 29.977 44.1812Z"></path><defs><clip-path id="clip0"><rect width="60" height="60" fill="white" transform="translate(0 0.429688)"></rect></clip-path></defs></svg>',
				'link'        => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce/', 'promo', 'products-tabs' ),
			),
		);

		// Check if $this-promotions isn't empty and has one of the items to load.
		$can_load = ! empty( $this->promotions ) && count( array_intersect( $this->promotions, array_keys( $this->woo_promos ) ) ) > 0;

		if ( ! $can_load && ! $this->debug ) {
			return;
		}

		add_action(
			'woocommerce_product_data_tabs',
			function( $tabs ) {
				$tabs['tisdk-suggestions'] = array(
					'label'    => 'More extensions from Themeisle',
					'target'   => 'tisdk_suggestions',
					'class'    => array(),
					'priority' => 1000,
				);

				return $tabs;
			}
		);

		add_action( 'woocommerce_product_data_panels', array( $this, 'woocommerce_tab_content' ) );
	}

	/**
	 * WooCommerce Tab Content.
	 */
	public function woocommerce_tab_content() {
		// Filter content based on if the key exists in $this->promotions array.
		$content = array_filter(
			$this->woo_promos,
			function( $key ) {
				return in_array( $key, $this->promotions, true );
			},
			ARRAY_FILTER_USE_KEY
		);

		// Display CSS
		self::render_woo_tabs_css();

		self::render_notice_dismiss_ajax();
		?>

		<div id="tisdk_suggestions" class="panel woocommerce_options_panel hidden">
			<div class="tisdk-suggestions-header">
				<h4>Recommended extensions</h4>
			</div>
			<div class="tisdk-suggestions-content">
				<?php foreach ( $content as $key => $item ) : ?>
					<div class="tisdk-suggestion" id="<?php echo esc_attr( $key ); ?>">
						<?php if ( isset( $item['icon'] ) ) : ?>
							<div class="tisdk-suggestion-icon">
								<?php echo $item['icon']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
							</div>
						<?php endif; ?>
						<div class="tisdk-suggestion-content">
							<h4><?php echo esc_html( $item['title'] ); ?></h4>
							<p><?php echo esc_html( $item['description'] ); ?></p>
						</div>
						<div class="tisdk-suggestion-cta">
							<a href="<?php echo esc_url( $item['link'] ); ?>" target="blank" class="button">
								<?php echo ( ( isset( $item['has_install'] ) && $item['has_install'] ) ? 'Install' : 'Learn More' ); ?>
							</a>
							<a class="suggestion-dismiss" title="Dismiss this suggestion" href="#"></a>
						</div>
					</div>
				<?php endforeach; ?>
			</div>
		</div>
		<?php
	}

	/**
	 * CSS for WooCommerce Tabs
	 */
	public static function render_woo_tabs_css() {
		$icon = 'M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z';

		?>
		<style>
			.tisdk-suggestions_options a {
				display: flex !important;
				align-items: center;
			}
			.tisdk-suggestions_options a::before {
				content: url("data:image/svg+xml,%3Csvg fill='%23135e96' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='<?php echo esc_attr( $icon ); ?>'/%3E%3C/svg%3E") !important;
				min-width: 13px;
				max-width: 13px;
				margin: auto;
			}
			.tisdk-suggestions_options.active a::before {
				content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='<?php echo esc_attr( $icon ); ?>'/%3E%3C/svg%3E") !important;
			}
			.tisdk-suggestions-header {
				padding: 1em 1.5em;
				border-bottom: 1px solid #eee;
			}
			.tisdk-suggestions-header h4 {
				font-size: 1.1em;
				margin: 0;
			}
			.tisdk-suggestion {
				display: flex;
				align-items: center;
				flex-direction: row;
				padding: 1em 1.5em;
			}
			.tisdk-suggestion-icon {
				height: 40px;
				margin: 0;
				margin-right: 0px;
				margin-right: 1.5em;
				flex: 0 0 40px;
				background: #966ccf;
				display: flex;
				justify-content: center;
				border-radius: 100%;
				align-items: center;
				padding: 5px;
			}
			.tisdk-suggestion-icon svg {
				fill: #fff;
			}
			.tisdk-suggestion-content {
				flex: 1 1 60%;
			}
			.tisdk-suggestion-content h4 {
				margin: 0;
			}
			.tisdk-suggestion-content p {
				margin: 0;
				margin-top: 4px;
				padding: 0;
				line-height: 1.5;
			}
			.tisdk-suggestion-cta {
				flex: 1 1 30%;
				min-width: 160px;
				text-align: right;
			}
			.tisdk-suggestion-cta .button {
				display: inline-block;
				min-width: 120px;
				text-align: center;
				margin: 0;
			}
			.tisdk-suggestion-cta .suggestion-dismiss {
				position: relative;
				top: 5px;
				right: auto;
				margin-left: 1em;
				text-decoration: none;
			}
		</style>
		<?php
	}

	/**
	 * JS for Dismissing Notice
	 */
	public static function render_notice_dismiss_ajax() {
		?>
		<script>
			jQuery(document).ready(function($) {
				// AJAX request to update the option value
				$( '.tisdk-suggestion .suggestion-dismiss' ).click(function(e) {
					e.preventDefault();
					var suggestion = $(this).closest( '.tisdk-suggestion' );
					var value = suggestion.attr('id');

					var nonce = '<?php echo esc_attr( wp_create_nonce( 'tisdk_update_option' ) ); ?>';

					$.ajax({
						url: window.ajaxurl,
						type: 'POST',
						data: {
							action: 'tisdk_update_option',
							value,
							nonce
						},
						complete() {
							suggestion.remove();

							// If element with .tisdk-suggestions-content has no children, hide the whole panel. Skip if the selector doesn't exist.
							if ( $( '.tisdk-suggestions-content' ).length && ! $( '.tisdk-suggestions-content' ).children().length ) {
								$( '.tisdk-suggestions_options' ).remove();
								$( '#tisdk_suggestions' ).remove();
								$( '.general_options' ).addClass( 'active' );
								$( '#general_product_data' ).css( 'display', 'block' );
							}
						}
					});
				});
			});
		</script>
		<?php
	}

	/**
	 * Update the option value using AJAX
	 */
	public function dismiss_promotion() {
		if ( ! isset( $_POST['nonce'] ) || ! isset( $_POST['value'] ) ) {
			$response = array(
				'success' => false,
				'message' => 'Missing nonce or value.',
			);
			wp_send_json( $response );
			wp_die();
		}

		$nonce = sanitize_text_field( $_POST['nonce'] );
		$value = sanitize_text_field( $_POST['value'] );

		if ( ! wp_verify_nonce( $nonce, 'tisdk_update_option' ) ) {
			$response = array(
				'success' => false,
				'message' => 'Invalid nonce.',
			);
			wp_send_json( $response );
			wp_die();
		}

		$options = get_option( $this->option_main );
		$options = json_decode( $options, true );

		$options[ $value ] = time();

		update_option( $this->option_main, wp_json_encode( $options ) );

		$response = array(
			'success' => true,
		);

		wp_send_json( $response );
		wp_die();
	}
}
PK      \T&Nc  Nc  9  codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.phpnu W+A        <?php
/**
 * The deactivate feedback model class for ThemeIsle SDK
 *
 * @package     ThemeIsleSDK
 * @subpackage  Feedback
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Uninstall feedback module for ThemeIsle SDK.
 */
class Uninstall_Feedback extends Abstract_Module {
	/**
	 * How many seconds before the deactivation window is triggered for themes?
	 *
	 * @var int Number of days.
	 */
	const AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS = 3;
	/**
	 * How many days before the deactivation window pops up again for the theme?
	 *
	 * @var int Number of days.
	 */
	const PAUSE_DEACTIVATE_WINDOW_DAYS = 100;
	/**
	 * Where to send the data.
	 *
	 * @var string Endpoint url.
	 */
	const FEEDBACK_ENDPOINT = 'https://api.themeisle.com/tracking/uninstall';

	/**
	 * Default options for plugins.
	 *
	 * @var array $options_plugin The main options list for plugins.
	 */
	private $options_plugin = array(
		'I found a better plugin'            => array(
			'id'          => 3,
			'type'        => 'text',
			'placeholder' => 'What\'s the plugin\'s name?',
		),
		'I could not get the plugin to work' => array(
			'type'        => 'textarea',
			'placeholder' => 'What problem are you experiencing?',
			'id'          => 4,
		),
		'I no longer need the plugin'        => array(
			'id'          => 5,
			'type'        => 'textarea',
			'placeholder' => 'If you could improve one thing about our product, what would it be?',
		),
		'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
			'type'        => 'textarea',
			'placeholder' => 'What problem are you experiencing?',
			'id'          => 6,
		),
	);
	/**
	 * Default options for theme.
	 *
	 * @var array $options_theme The main options list for themes.
	 */
	private $options_theme = array(
		'I don\'t know how to make it look like demo' => array(
			'id' => 7,
		),
		'It lacks options'                            => array(
			'placeholder' => 'What option is missing?',
			'type'        => 'text',
			'id'          => 8,
		),
		'Is not working with a plugin that I need'    => array(
			'id'          => 9,
			'type'        => 'text',
			'placeholder' => 'What is the name of the plugin',
		),
		'I want to try a new design, I don\'t like {theme} style' => array(
			'id' => 10,
		),
	);
	/**
	 * Default other option.
	 *
	 * @var array $other The other option
	 */
	private $other = array(
		'Other' => array(
			'id'          => 999,
			'type'        => 'textarea',
			'placeholder' => 'What can we do better?',
		),
	);
	/**
	 * Default heading for plugin.
	 *
	 * @var string $heading_plugin The heading of the modal
	 */
	private $heading_plugin = 'What\'s wrong?';
	/**
	 * Default heading for theme.
	 *
	 * @var string $heading_theme The heading of the modal
	 */
	private $heading_theme = 'What does not work for you in {theme}?';
	/**
	 * Default submit button action text.
	 *
	 * @var string $button_submit The text of the deactivate button
	 */
	private $button_submit = 'Submit &amp; Deactivate';
	/**
	 * Default cancel button.
	 *
	 * @var string $button_cancel The text of the cancel button
	 */
	private $button_cancel = 'Skip &amp; Deactivate';

	/**
	 * Loads the additional resources
	 */
	public function load_resources() {
		$screen = get_current_screen();

		if ( ! $screen || ! in_array( $screen->id, array( 'theme-install', 'plugins' ) ) ) {
			return;
		}

		$this->add_feedback_popup_style();

		if ( $this->product->get_type() === 'theme' ) {
			$this->add_theme_feedback_drawer_js();
			$this->render_theme_feedback_popup();

			return;
		}
		$this->add_plugin_feedback_popup_js();
		$this->render_plugin_feedback_popup();
	}

	/**
	 * Render theme feedback drawer.
	 */
	private function render_theme_feedback_popup() {
		$heading              = str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
		$button_submit        = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', 'Submit' );
		$options              = $this->options_theme;
		$options              = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
		$info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';

		$options += $this->other;

		?>
		<div class="ti-theme-uninstall-feedback-drawer ti-feedback">
			<div class="popup--header">
				<h5><?php echo wp_kses( $heading, array( 'span' => true ) ); ?> </h5>
				<button class="toggle"><span>&times;</span></button>
			</div><!--/.popup--header-->
			<div class="popup--body">
				<?php $this->render_options_list( $options ); ?>
			</div><!--/.popup--body-->
			<div class="popup--footer">
				<div class="actions">
					<?php
					echo wp_kses_post( $info_disclosure_link );
					echo wp_kses_post( $this->get_disclosure_labels() );
					echo '<div class="buttons">';
					echo get_submit_button( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function has an internal sanitization.
						$button_submit,
						'secondary',
						$this->product->get_key() . 'ti-deactivate-yes',
						false,
						array(
							'data-after-text' => $button_submit,
							'disabled'        => true,
						)
					);
					echo '</div>';
					?>
				</div><!--/.actions-->
			</div><!--/.popup--footer-->
		</div>
		<?php
	}

	/**
	 * Add feedback styles.
	 */
	private function add_feedback_popup_style() {
		?>
		<style>
			.ti-feedback {
				background: #fff;
				max-width: 400px;
				z-index: 10000;
				box-shadow: 0 0 15px -5px rgba(0, 0, 0, .5);
				transition: all .3s ease-out;
			}


			.ti-feedback .popup--header {
				position: relative;
				background-color: #23A1CE;
			}

			.ti-feedback .popup--header h5 {
				margin: 0;
				font-size: 16px;
				padding: 15px;
				color: #fff;
				font-weight: 600;
				text-align: center;
				letter-spacing: .3px;
			}

			.ti-feedback .popup--body {
				padding: 15px;
			}

			.ti-feedback .popup--form {
				margin: 0;
				font-size: 13px;
			}

			.ti-feedback .popup--form input[type="radio"] {
				<?php echo is_rtl() ? 'margin: 0 0 0 10px;' : 'margin: 0 10px 0 0;'; ?>
			}

			.ti-feedback .popup--form input[type="radio"]:checked ~ textarea {
				display: block;
			}

			.ti-feedback .popup--form textarea {
				width: 100%;
				margin: 10px 0 0;
				display: none;
				max-height: 150px;
			}

			.ti-feedback li {
				display: flex;
				align-items: center;
				margin-bottom: 15px;
				flex-wrap: wrap;
			}

			.ti-feedback li label {
				max-width: 90%;
			}

			.ti-feedback li:last-child {
				margin-bottom: 0;
			}

			.ti-feedback .popup--footer {
				padding: 0 15px 15px;
			}

			.ti-feedback .actions {
				display: flex;
				flex-wrap: wrap;
			}

			.info-disclosure-link {
				width: 100%;
				margin-bottom: 15px;
			}

			.ti-feedback .info-disclosure-content {
				max-height: 0;
				overflow: hidden;
				width: 100%;
				transition: .3s ease;
			}

			.ti-feedback .info-disclosure-content.active {
				max-height: 300px;
			}

			.ti-feedback .info-disclosure-content p {
				margin: 0;
			}

			.ti-feedback .info-disclosure-content ul {
				margin: 10px 0;
				border-radius: 3px;
			}

			.ti-feedback .info-disclosure-content ul li {
				display: flex;
				align-items: center;
				justify-content: space-between;
				margin-bottom: 0;
				padding: 5px 0;
				border-bottom: 1px solid #ccc;
			}

			.ti-feedback .buttons {
				display: flex;
				width: 100%;
			}

			.ti-feedback .buttons input:last-child {
				<?php echo is_rtl() ? 'margin-right: auto;' : 'margin-left: auto;'; ?>
			}

			.ti-theme-uninstall-feedback-drawer {
				border-top-left-radius: 5px;
				position: fixed;
				top: 100%;
				right: 15px;
			}

			.ti-theme-uninstall-feedback-drawer.active {
				transform: translateY(-100%);
			}

			.ti-theme-uninstall-feedback-drawer .popup--header {
				border-top-left-radius: 5px;
			}

			.ti-theme-uninstall-feedback-drawer .popup--header .toggle {
				position: absolute;
				padding: 3px 0;
				width: 30px;
				top: -26px;
				right: 0;
				cursor: pointer;
				border-top-left-radius: 5px;
				border-top-right-radius: 5px;
				font-size: 20px;
				background-color: #23A1CE;
				color: #fff;
				border: none;
				line-height: 20px;
			}

			.ti-theme-uninstall-feedback-drawer .toggle span {
				margin: 0;
				display: inline-block;
			}

			.ti-theme-uninstall-feedback-drawer:not(.active) .toggle span {
				transform: rotate(45deg);
			}

			.ti-theme-uninstall-feedback-drawer .popup--header .toggle:hover {
				background-color: #1880a5;
			}


			.ti-plugin-uninstall-feedback-popup .popup--header:before {
				content: "";
				display: block;
				position: absolute;
				top: 50%;
				transform: translateY(-50%);
				<?php
				echo is_rtl() ?
				'right: -10px;
				border-top: 20px solid transparent;
				border-left: 20px solid #23A1CE;
				border-bottom: 20px solid transparent;' :
				'left: -10px;
				border-top: 20px solid transparent;
				border-right: 20px solid #23A1CE;
				border-bottom: 20px solid transparent;';
				?>
			}

			.ti-plugin-uninstall-feedback-popup {
				display: none;
				position: absolute;
				white-space: normal;
				width: 400px;
				<?php echo is_rtl() ? 'right: calc( 100% + 15px );' : 'left: calc( 100% + 15px );'; ?>
				top: -15px;
			}

			.ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i {
				animation: rotation 2s infinite linear;
				display: block;
				float: none;
				align-items: center;
				width: 100%;
				margin: 0 auto;
				height: 100%;
				background: transparent;
				padding: 0;
			}

			.ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i:before {
				padding: 0;
				background: transparent;
				box-shadow: none;
				color: #b4b9be
			}


			.ti-plugin-uninstall-feedback-popup.active {
				display: block;
			}

			tr[data-plugin^="<?php echo esc_attr( $this->product->get_slug() ); ?>"] .deactivate {
				position: relative;
			}

			body.ti-feedback-open .ti-feedback-overlay {
				content: "";
				display: block;
				background-color: rgba(0, 0, 0, 0.5);
				top: 0;
				bottom: 0;
				right: 0;
				left: 0;
				z-index: 10000;
				position: fixed;
			}

			@media (max-width: 768px) {
				.ti-plugin-uninstall-feedback-popup {
					position: fixed;
					max-width: 100%;
					margin: 0 auto;
					left: 50%;
					top: 50px;
					transform: translateX(-50%);
				}

				.ti-plugin-uninstall-feedback-popup .popup--header:before {
					display: none;
				}
			}
		</style>
		<?php
	}

	/**
	 * Theme feedback drawer JS.
	 */
	private function add_theme_feedback_drawer_js() {
		$key = $this->product->get_key();
		?>
		<script type="text/javascript" id="ti-deactivate-js">
			(function ($) {
				$(document).ready(function () {
					setTimeout(function () {
						$('.ti-theme-uninstall-feedback-drawer').addClass('active');
					}, <?php echo absint( self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000 ); ?> );

					$('.ti-theme-uninstall-feedback-drawer .toggle').on('click', function (e) {
						e.preventDefault();
						$('.ti-theme-uninstall-feedback-drawer').toggleClass('active');
					});

					$('.info-disclosure-link').on('click', function (e) {
						e.preventDefault();
						$('.info-disclosure-content').toggleClass('active');
					});

					$('.ti-theme-uninstall-feedback-drawer input[type="radio"]').on('change', function () {
						var radio = $(this);
						if (radio.parent().find('textarea').length > 0 &&
							radio.parent().find('textarea').val().length === 0) {
							$('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
							radio.parent().find('textarea').on('keyup', function (e) {
								if ($(this).val().length === 0) {
									$('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
								} else {
									$('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
								}
							});
						} else {
							$('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
						}
					});

					$('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').on('click', function (e) {
						e.preventDefault();
						e.stopPropagation();

						var selectedOption = $(
							'.ti-theme-uninstall-feedback-drawer input[name="ti-deactivate-option"]:checked');
						$.post(ajaxurl, {
							'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
							'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
							'id': selectedOption.parent().attr('ti-option-id'),
							'msg': selectedOption.parent().find('textarea').val(),
							'type': 'theme',
							'key': '<?php echo esc_attr( $key ); ?>'
						});
						$('.ti-theme-uninstall-feedback-drawer').fadeOut();
					});
				});
			})(jQuery);

		</script>
		<?php
		do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
	}

	/**
	 * Render the options list.
	 *
	 * @param array $options the options for the feedback form.
	 */
	private function render_options_list( $options ) {
		$key            = $this->product->get_key();
		$inputs_row_map = [
			'text'     => 1,
			'textarea' => 2,
		];
		?>
		<ul class="popup--form">
			<?php foreach ( $options as $title => $attributes ) { ?>
				<li ti-option-id="<?php echo esc_attr( $attributes['id'] ); ?>">
					<input type="radio" name="ti-deactivate-option" id="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
					<label for="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
						<?php echo esc_attr( str_replace( '{theme}', $this->product->get_name(), $title ) ); ?>
					</label>
					<?php
					if ( array_key_exists( 'type', $attributes ) ) {
						$placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
						echo '<textarea width="100%" rows="' . esc_attr( $inputs_row_map[ $attributes['type'] ] ) . '" name="comments" placeholder="' . esc_attr( $placeholder ) . '"></textarea>';
					}
					?>
				</li>
			<?php } ?>
		</ul>
		<?php
	}

	/**
	 * Render plugin feedback popup.
	 */
	private function render_plugin_feedback_popup() {
		$button_cancel        = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $this->button_cancel );
		$button_submit        = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $this->button_submit );
		$options              = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $this->options_plugin ) );
		$info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';

		$options += $this->other;
		?>
		<div class="ti-plugin-uninstall-feedback-popup ti-feedback" id="<?php echo esc_attr( $this->product->get_slug() . '_uninstall_feedback_popup' ); ?>">
			<div class="popup--header">
				<h5><?php echo wp_kses( $this->heading_plugin, array( 'span' => true ) ); ?> </h5>
			</div><!--/.popup--header-->
			<div class="popup--body">
				<?php $this->render_options_list( $options ); ?>
			</div><!--/.popup--body-->
			<div class="popup--footer">
				<div class="actions">
					<?php
					echo wp_kses_post( $info_disclosure_link );
					echo wp_kses_post( $this->get_disclosure_labels() );
					echo '<div class="buttons">';
					echo get_submit_button( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function internals are escaped.
						$button_cancel,
						'secondary',
						$this->product->get_key() . 'ti-deactivate-no',
						false
					);
					echo get_submit_button( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function internals are escaped.
						$button_submit,
						'primary',
						$this->product->get_key() . 'ti-deactivate-yes',
						false,
						array(
							'data-after-text' => $button_submit,
							'disabled'        => true,
						)
					);
					echo '</div>';
					?>
				</div><!--/.actions-->
			</div><!--/.popup--footer-->
		</div>

		<?php
	}

	/**
	 * Add plugin feedback popup JS
	 */
	private function add_plugin_feedback_popup_js() {
		$popup_id = '#' . $this->product->get_slug() . '_uninstall_feedback_popup';
		$key      = $this->product->get_key();
		?>
		<script type="text/javascript" id="ti-deactivate-js">
			(function ($) {
				$(document).ready(function () {
					var targetElement = 'tr[data-plugin^="<?php echo esc_attr( $this->product->get_slug() ); ?>/"] span.deactivate a';
					var redirectUrl = $(targetElement).attr('href');
					if ($('.ti-feedback-overlay').length === 0) {
						$('body').prepend('<div class="ti-feedback-overlay"></div>');
					}
					$('<?php echo esc_attr( $popup_id ); ?> ').appendTo($(targetElement).parent());

					$(targetElement).on('click', function (e) {
						e.preventDefault();
						$('<?php echo esc_attr( $popup_id ); ?> ').addClass('active');
						$('body').addClass('ti-feedback-open');
						$('.ti-feedback-overlay').on('click', function () {
							$('<?php echo esc_attr( $popup_id ); ?> ').removeClass('active');
							$('body').removeClass('ti-feedback-open');
						});
					});

					$('<?php echo esc_attr( $popup_id ); ?> .info-disclosure-link').on('click', function (e) {
						e.preventDefault();
						$(this).parent().find('.info-disclosure-content').toggleClass('active');
					});

					$('<?php echo esc_attr( $popup_id ); ?> input[type="radio"]').on('change', function () {
						var radio = $(this);
						if (radio.parent().find('textarea').length > 0 &&
							radio.parent().find('textarea').val().length === 0) {
							$('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
							radio.parent().find('textarea').on('keyup', function (e) {
								if ($(this).val().length === 0) {
									$('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
								} else {
									$('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
								}
							});
						} else {
							$('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
						}
					});

					$('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-no').on('click', function (e) {
						e.preventDefault();
						e.stopPropagation();
						$(targetElement).unbind('click');
						$('body').removeClass('ti-feedback-open');
						$('<?php echo esc_attr( $popup_id ); ?>').remove();
						if (redirectUrl !== '') {
							location.href = redirectUrl;
						}
					});

					$('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').on('click', function (e) {
						e.preventDefault();
						e.stopPropagation();
						$(targetElement).unbind('click');
						var selectedOption = $(
							'<?php echo esc_attr( $popup_id ); ?> input[name="ti-deactivate-option"]:checked');
						var data = {
							'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
							'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
							'id': selectedOption.parent().attr('ti-option-id'),
							'msg': selectedOption.parent().find('textarea').val(),
							'type': 'plugin',
							'key': '<?php echo esc_attr( $key ); ?>'
						};
						$.ajax({
							type: 'POST',
							url: ajaxurl,
							data: data,
							complete() {
								$('body').removeClass('ti-feedback-open');
								$('<?php echo esc_attr( $popup_id ); ?>').remove();
								if (redirectUrl !== '') {
									location.href = redirectUrl;
								}
							},
							beforeSend() {
								$('<?php echo esc_attr( $popup_id ); ?>').addClass('sending-feedback');
								$('<?php echo esc_attr( $popup_id ); ?> .popup--footer').remove();
								$('<?php echo esc_attr( $popup_id ); ?> .popup--body').html('<i class="dashicons dashicons-update-alt"></i>');
							}
						});
					});
				});
			})(jQuery);

		</script>
		<?php
		do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
	}

	/**
	 * Get the disclosure labels markup.
	 *
	 * @return string
	 */
	private function get_disclosure_labels() {
		$disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
		$disclosure_labels     = array_merge(
			[
				'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No email address or IP addresses are transmitted after you submit the survey.',
				'items' => [
					sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
					sprintf( '%sCurrent website:%s %s %s %s', '<strong>', '</strong>', '<code>', get_site_url(), '</code>' ),
					sprintf( '%sUsage time:%s %s %s%s', '<strong>', '</strong>', '<code>', ( time() - $this->product->get_install_time() ), 's</code>' ),
					sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
				],
			],
			$disclosure_new_labels
		);

		$info_disclosure_content = '<div class="info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
		foreach ( $disclosure_labels['items'] as $disclosure_item ) {
			$info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
		}
		$info_disclosure_content .= '</ul></div>';

		return $info_disclosure_content;
	}

	/**
	 * Randomizes the options array.
	 *
	 * @param array $options The options array.
	 */
	public function randomize_options( $options ) {
		$new  = array();
		$keys = array_keys( $options );
		shuffle( $keys );

		foreach ( $keys as $key ) {
			$new[ $key ] = $options[ $key ];
		}

		return $new;
	}

	/**
	 * Called when the deactivate button is clicked.
	 */
	public function post_deactivate() {
		check_ajax_referer( (string) __CLASS__, 'nonce' );

		$this->post_deactivate_or_cancel();

		if ( empty( $_POST['id'] ) ) {

			wp_send_json( [] );

			return;
		}
		$this->call_api(
			array(
				'type'    => 'deactivate',
				'id'      => sanitize_key( $_POST['id'] ),
				'comment' => isset( $_POST['msg'] ) ? sanitize_textarea_field( $_POST['msg'] ) : '',
			)
		);
		wp_send_json( [] );

	}

	/**
	 * Called when the deactivate/cancel button is clicked.
	 */
	private function post_deactivate_or_cancel() {
		if ( ! isset( $_POST['type'] ) || ! isset( $_POST['key'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
			return;
		}
		if ( 'theme' !== $_POST['type'] ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
			return;
		}

		set_transient( 'ti_sdk_pause_' . sanitize_text_field( $_POST['key'] ), true, self::PAUSE_DEACTIVATE_WINDOW_DAYS * DAY_IN_SECONDS );//phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.

	}

	/**
	 * Calls the API
	 *
	 * @param array $attributes The attributes of the post body.
	 *
	 * @return bool Is the request succesfull?
	 */
	protected function call_api( $attributes ) {
		$slug                      = $this->product->get_slug();
		$version                   = $this->product->get_version();
		$attributes['slug']        = $slug;
		$attributes['version']     = $version;
		$attributes['url']         = get_site_url();
		$attributes['active_time'] = ( time() - $this->product->get_install_time() );

		$response = wp_remote_post(
			self::FEEDBACK_ENDPOINT,
			array(
				'body' => $attributes,
			)
		);

		return is_wp_error( $response );
	}

	/**
	 * Should we load this object?.
	 *
	 * @param Product $product Product object.
	 *
	 * @return bool Should we load the module?
	 */
	public function can_load( $product ) {
		if ( $this->is_from_partner( $product ) ) {
			return false;
		}
		if ( $product->is_theme() && ( false !== get_transient( 'ti_sdk_pause_' . $product->get_key(), false ) ) ) {
			return false;
		}

		if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
			return true;
		}
		global $pagenow;

		if ( ! isset( $pagenow ) || empty( $pagenow ) ) {
			return false;
		}

		if ( $product->is_plugin() && 'plugins.php' !== $pagenow ) {
			return false;

		}
		if ( $product->is_theme() && 'theme-install.php' !== $pagenow ) {
			return false;
		}

		return true;
	}

	/**
	 * Loads module hooks.
	 *
	 * @param Product $product Product details.
	 *
	 * @return Uninstall_Feedback Current module instance.
	 */
	public function load( $product ) {

		if ( apply_filters( $product->get_key() . '_hide_uninstall_feedback', false ) ) {
			return;
		}

		$this->product = $product;
		add_action( 'admin_head', array( $this, 'load_resources' ) );
		add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) );

		return $this;
	}
}
PK      \pK  K  0  codeinwp/themeisle-sdk/src/Modules/Translate.phpnu W+A        <?php
/**
 * The translate model class for ThemeIsle SDK
 *
 * @package     ThemeIsleSDK
 * @subpackage  Modules
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK\Modules;

use ThemeisleSDK\Common\Abstract_Module;
use ThemeisleSDK\Product;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Translate module for ThemeIsle SDK.
 */
class Translate extends Abstract_Module {
	/**
	 * List of available locales.
	 *
	 * @var array Array of available locals.
	 */
	private static $locales = array(
		'af'             => array(
			'slug' => 'af',
			'name' => 'Afrikaans',
		),
		'ak'             => array(
			'slug' => 'ak',
			'name' => 'Akan',
		),
		'am'             => array(
			'slug' => 'am',
			'name' => 'Amharic',
		),
		'ar'             => array(
			'slug' => 'ar',
			'name' => 'Arabic',
		),
		'arq'            => array(
			'slug' => 'arq',
			'name' => 'Algerian Arabic',
		),
		'ary'            => array(
			'slug' => 'ary',
			'name' => 'Moroccan Arabic',
		),
		'as'             => array(
			'slug' => 'as',
			'name' => 'Assamese',
		),
		'ast'            => array(
			'slug' => 'ast',
			'name' => 'Asturian',
		),
		'az'             => array(
			'slug' => 'az',
			'name' => 'Azerbaijani',
		),
		'azb'            => array(
			'slug' => 'azb',
			'name' => 'South Azerbaijani',
		),
		'az_TR'          => array(
			'slug' => 'az-tr',
			'name' => 'Azerbaijani (Turkey)',
		),
		'ba'             => array(
			'slug' => 'ba',
			'name' => 'Bashkir',
		),
		'bal'            => array(
			'slug' => 'bal',
			'name' => 'Catalan (Balear)',
		),
		'bcc'            => array(
			'slug' => 'bcc',
			'name' => 'Balochi Southern',
		),
		'bel'            => array(
			'slug' => 'bel',
			'name' => 'Belarusian',
		),
		'bg_BG'          => array(
			'slug' => 'bg',
			'name' => 'Bulgarian',
		),
		'bn_BD'          => array(
			'slug' => 'bn',
			'name' => 'Bengali',
		),
		'bo'             => array(
			'slug' => 'bo',
			'name' => 'Tibetan',
		),
		'bre'            => array(
			'slug' => 'br',
			'name' => 'Breton',
		),
		'bs_BA'          => array(
			'slug' => 'bs',
			'name' => 'Bosnian',
		),
		'ca'             => array(
			'slug' => 'ca',
			'name' => 'Catalan',
		),
		'ceb'            => array(
			'slug' => 'ceb',
			'name' => 'Cebuano',
		),
		'ckb'            => array(
			'slug' => 'ckb',
			'name' => 'Kurdish (Sorani)',
		),
		'co'             => array(
			'slug' => 'co',
			'name' => 'Corsican',
		),
		'cs_CZ'          => array(
			'slug' => 'cs',
			'name' => 'Czech',
		),
		'cy'             => array(
			'slug' => 'cy',
			'name' => 'Welsh',
		),
		'da_DK'          => array(
			'slug' => 'da',
			'name' => 'Danish',
		),
		'de_DE'          => array(
			'slug' => 'de',
			'name' => 'German',
		),
		'de_CH'          => array(
			'slug' => 'de-ch',
			'name' => 'German (Switzerland)',
		),
		'dv'             => array(
			'slug' => 'dv',
			'name' => 'Dhivehi',
		),
		'dzo'            => array(
			'slug' => 'dzo',
			'name' => 'Dzongkha',
		),
		'el'             => array(
			'slug' => 'el',
			'name' => 'Greek',
		),
		'art_xemoji'     => array(
			'slug' => 'art-xemoji',
			'name' => 'Emoji',
		),
		'en_US'          => array(
			'slug' => 'en',
			'name' => 'English',
		),
		'en_AU'          => array(
			'slug' => 'en-au',
			'name' => 'English (Australia)',
		),
		'en_CA'          => array(
			'slug' => 'en-ca',
			'name' => 'English (Canada)',
		),
		'en_GB'          => array(
			'slug' => 'en-gb',
			'name' => 'English (UK)',
		),
		'en_NZ'          => array(
			'slug' => 'en-nz',
			'name' => 'English (New Zealand)',
		),
		'en_ZA'          => array(
			'slug' => 'en-za',
			'name' => 'English (South Africa)',
		),
		'eo'             => array(
			'slug' => 'eo',
			'name' => 'Esperanto',
		),
		'es_ES'          => array(
			'slug' => 'es',
			'name' => 'Spanish (Spain)',
		),
		'es_AR'          => array(
			'slug' => 'es-ar',
			'name' => 'Spanish (Argentina)',
		),
		'es_CL'          => array(
			'slug' => 'es-cl',
			'name' => 'Spanish (Chile)',
		),
		'es_CO'          => array(
			'slug' => 'es-co',
			'name' => 'Spanish (Colombia)',
		),
		'es_CR'          => array(
			'slug' => 'es-cr',
			'name' => 'Spanish (Costa Rica)',
		),
		'es_GT'          => array(
			'slug' => 'es-gt',
			'name' => 'Spanish (Guatemala)',
		),
		'es_MX'          => array(
			'slug' => 'es-mx',
			'name' => 'Spanish (Mexico)',
		),
		'es_PE'          => array(
			'slug' => 'es-pe',
			'name' => 'Spanish (Peru)',
		),
		'es_PR'          => array(
			'slug' => 'es-pr',
			'name' => 'Spanish (Puerto Rico)',
		),
		'es_VE'          => array(
			'slug' => 'es-ve',
			'name' => 'Spanish (Venezuela)',
		),
		'et'             => array(
			'slug' => 'et',
			'name' => 'Estonian',
		),
		'eu'             => array(
			'slug' => 'eu',
			'name' => 'Basque',
		),
		'fa_IR'          => array(
			'slug' => 'fa',
			'name' => 'Persian',
		),
		'fa_AF'          => array(
			'slug' => 'fa-af',
			'name' => 'Persian (Afghanistan)',
		),
		'fuc'            => array(
			'slug' => 'fuc',
			'name' => 'Fulah',
		),
		'fi'             => array(
			'slug' => 'fi',
			'name' => 'Finnish',
		),
		'fo'             => array(
			'slug' => 'fo',
			'name' => 'Faroese',
		),
		'fr_FR'          => array(
			'slug' => 'fr',
			'name' => 'French (France)',
		),
		'fr_BE'          => array(
			'slug' => 'fr-be',
			'name' => 'French (Belgium)',
		),
		'fr_CA'          => array(
			'slug' => 'fr-ca',
			'name' => 'French (Canada)',
		),
		'frp'            => array(
			'slug' => 'frp',
			'name' => 'Arpitan',
		),
		'fur'            => array(
			'slug' => 'fur',
			'name' => 'Friulian',
		),
		'fy'             => array(
			'slug' => 'fy',
			'name' => 'Frisian',
		),
		'ga'             => array(
			'slug' => 'ga',
			'name' => 'Irish',
		),
		'gd'             => array(
			'slug' => 'gd',
			'name' => 'Scottish Gaelic',
		),
		'gl_ES'          => array(
			'slug' => 'gl',
			'name' => 'Galician',
		),
		'gn'             => array(
			'slug' => 'gn',
			'name' => 'Guarani',
		),
		'gsw'            => array(
			'slug' => 'gsw',
			'name' => 'Swiss German',
		),
		'gu'             => array(
			'slug' => 'gu',
			'name' => 'Gujarati',
		),
		'hat'            => array(
			'slug' => 'hat',
			'name' => 'Haitian Creole',
		),
		'hau'            => array(
			'slug' => 'hau',
			'name' => 'Hausa',
		),
		'haw_US'         => array(
			'slug' => 'haw',
			'name' => 'Hawaiian',
		),
		'haz'            => array(
			'slug' => 'haz',
			'name' => 'Hazaragi',
		),
		'he_IL'          => array(
			'slug' => 'he',
			'name' => 'Hebrew',
		),
		'hi_IN'          => array(
			'slug' => 'hi',
			'name' => 'Hindi',
		),
		'hr'             => array(
			'slug' => 'hr',
			'name' => 'Croatian',
		),
		'hu_HU'          => array(
			'slug' => 'hu',
			'name' => 'Hungarian',
		),
		'hy'             => array(
			'slug' => 'hy',
			'name' => 'Armenian',
		),
		'id_ID'          => array(
			'slug' => 'id',
			'name' => 'Indonesian',
		),
		'ido'            => array(
			'slug' => 'ido',
			'name' => 'Ido',
		),
		'is_IS'          => array(
			'slug' => 'is',
			'name' => 'Icelandic',
		),
		'it_IT'          => array(
			'slug' => 'it',
			'name' => 'Italian',
		),
		'ja'             => array(
			'slug' => 'ja',
			'name' => 'Japanese',
		),
		'jv_ID'          => array(
			'slug' => 'jv',
			'name' => 'Javanese',
		),
		'ka_GE'          => array(
			'slug' => 'ka',
			'name' => 'Georgian',
		),
		'kab'            => array(
			'slug' => 'kab',
			'name' => 'Kabyle',
		),
		'kal'            => array(
			'slug' => 'kal',
			'name' => 'Greenlandic',
		),
		'kin'            => array(
			'slug' => 'kin',
			'name' => 'Kinyarwanda',
		),
		'kk'             => array(
			'slug' => 'kk',
			'name' => 'Kazakh',
		),
		'km'             => array(
			'slug' => 'km',
			'name' => 'Khmer',
		),
		'kn'             => array(
			'slug' => 'kn',
			'name' => 'Kannada',
		),
		'ko_KR'          => array(
			'slug' => 'ko',
			'name' => 'Korean',
		),
		'kir'            => array(
			'slug' => 'kir',
			'name' => 'Kyrgyz',
		),
		'lb_LU'          => array(
			'slug' => 'lb',
			'name' => 'Luxembourgish',
		),
		'li'             => array(
			'slug' => 'li',
			'name' => 'Limburgish',
		),
		'lin'            => array(
			'slug' => 'lin',
			'name' => 'Lingala',
		),
		'lo'             => array(
			'slug' => 'lo',
			'name' => 'Lao',
		),
		'lt_LT'          => array(
			'slug' => 'lt',
			'name' => 'Lithuanian',
		),
		'lv'             => array(
			'slug' => 'lv',
			'name' => 'Latvian',
		),
		'me_ME'          => array(
			'slug' => 'me',
			'name' => 'Montenegrin',
		),
		'mg_MG'          => array(
			'slug' => 'mg',
			'name' => 'Malagasy',
		),
		'mk_MK'          => array(
			'slug' => 'mk',
			'name' => 'Macedonian',
		),
		'ml_IN'          => array(
			'slug' => 'ml',
			'name' => 'Malayalam',
		),
		'mlt'            => array(
			'slug' => 'mlt',
			'name' => 'Maltese',
		),
		'mn'             => array(
			'slug' => 'mn',
			'name' => 'Mongolian',
		),
		'mr'             => array(
			'slug' => 'mr',
			'name' => 'Marathi',
		),
		'mri'            => array(
			'slug' => 'mri',
			'name' => 'Maori',
		),
		'ms_MY'          => array(
			'slug' => 'ms',
			'name' => 'Malay',
		),
		'my_MM'          => array(
			'slug' => 'mya',
			'name' => 'Myanmar (Burmese)',
		),
		'ne_NP'          => array(
			'slug' => 'ne',
			'name' => 'Nepali',
		),
		'nb_NO'          => array(
			'slug' => 'nb',
			'name' => 'Norwegian (Bokmal)',
		),
		'nl_NL'          => array(
			'slug' => 'nl',
			'name' => 'Dutch',
		),
		'nl_BE'          => array(
			'slug' => 'nl-be',
			'name' => 'Dutch (Belgium)',
		),
		'nn_NO'          => array(
			'slug' => 'nn',
			'name' => 'Norwegian (Nynorsk)',
		),
		'oci'            => array(
			'slug' => 'oci',
			'name' => 'Occitan',
		),
		'ory'            => array(
			'slug' => 'ory',
			'name' => 'Oriya',
		),
		'os'             => array(
			'slug' => 'os',
			'name' => 'Ossetic',
		),
		'pa_IN'          => array(
			'slug' => 'pa',
			'name' => 'Punjabi',
		),
		'pl_PL'          => array(
			'slug' => 'pl',
			'name' => 'Polish',
		),
		'pt_BR'          => array(
			'slug' => 'pt-br',
			'name' => 'Portuguese (Brazil)',
		),
		'pt_PT'          => array(
			'slug' => 'pt',
			'name' => 'Portuguese (Portugal)',
		),
		'ps'             => array(
			'slug' => 'ps',
			'name' => 'Pashto',
		),
		'rhg'            => array(
			'slug' => 'rhg',
			'name' => 'Rohingya',
		),
		'ro_RO'          => array(
			'slug' => 'ro',
			'name' => 'Romanian',
		),
		'roh'            => array(
			'slug' => 'roh',
			'name' => 'Romansh',
		),
		'ru_RU'          => array(
			'slug' => 'ru',
			'name' => 'Russian',
		),
		'rue'            => array(
			'slug' => 'rue',
			'name' => 'Rusyn',
		),
		'rup_MK'         => array(
			'slug' => 'rup',
			'name' => 'Aromanian',
		),
		'sah'            => array(
			'slug' => 'sah',
			'name' => 'Sakha',
		),
		'sa_IN'          => array(
			'slug' => 'sa-in',
			'name' => 'Sanskrit',
		),
		'scn'            => array(
			'slug' => 'scn',
			'name' => 'Sicilian',
		),
		'si_LK'          => array(
			'slug' => 'si',
			'name' => 'Sinhala',
		),
		'sk_SK'          => array(
			'slug' => 'sk',
			'name' => 'Slovak',
		),
		'sl_SI'          => array(
			'slug' => 'sl',
			'name' => 'Slovenian',
		),
		'sna'            => array(
			'slug' => 'sna',
			'name' => 'Shona',
		),
		'snd'            => array(
			'slug' => 'snd',
			'name' => 'Sindhi',
		),
		'so_SO'          => array(
			'slug' => 'so',
			'name' => 'Somali',
		),
		'sq'             => array(
			'slug' => 'sq',
			'name' => 'Albanian',
		),
		'sq_XK'          => array(
			'slug' => 'sq-xk',
			'name' => 'Shqip (Kosovo)',
		),
		'sr_RS'          => array(
			'slug' => 'sr',
			'name' => 'Serbian',
		),
		'srd'            => array(
			'slug' => 'srd',
			'name' => 'Sardinian',
		),
		'su_ID'          => array(
			'slug' => 'su',
			'name' => 'Sundanese',
		),
		'sv_SE'          => array(
			'slug' => 'sv',
			'name' => 'Swedish',
		),
		'sw'             => array(
			'slug' => 'sw',
			'name' => 'Swahili',
		),
		'syr'            => array(
			'slug' => 'syr',
			'name' => 'Syriac',
		),
		'szl'            => array(
			'slug' => 'szl',
			'name' => 'Silesian',
		),
		'ta_IN'          => array(
			'slug' => 'ta',
			'name' => 'Tamil',
		),
		'ta_LK'          => array(
			'slug' => 'ta-lk',
			'name' => 'Tamil (Sri Lanka)',
		),
		'tah'            => array(
			'slug' => 'tah',
			'name' => 'Tahitian',
		),
		'te'             => array(
			'slug' => 'te',
			'name' => 'Telugu',
		),
		'tg'             => array(
			'slug' => 'tg',
			'name' => 'Tajik',
		),
		'th'             => array(
			'slug' => 'th',
			'name' => 'Thai',
		),
		'tir'            => array(
			'slug' => 'tir',
			'name' => 'Tigrinya',
		),
		'tl'             => array(
			'slug' => 'tl',
			'name' => 'Tagalog',
		),
		'tr_TR'          => array(
			'slug' => 'tr',
			'name' => 'Turkish',
		),
		'tt_RU'          => array(
			'slug' => 'tt',
			'name' => 'Tatar',
		),
		'tuk'            => array(
			'slug' => 'tuk',
			'name' => 'Turkmen',
		),
		'twd'            => array(
			'slug' => 'twd',
			'name' => 'Tweants',
		),
		'tzm'            => array(
			'slug' => 'tzm',
			'name' => 'Tamazight (Central Atlas)',
		),
		'ug_CN'          => array(
			'slug' => 'ug',
			'name' => 'Uighur',
		),
		'uk'             => array(
			'slug' => 'uk',
			'name' => 'Ukrainian',
		),
		'ur'             => array(
			'slug' => 'ur',
			'name' => 'Urdu',
		),
		'uz_UZ'          => array(
			'slug' => 'uz',
			'name' => 'Uzbek',
		),
		'vi'             => array(
			'slug' => 'vi',
			'name' => 'Vietnamese',
		),
		'wa'             => array(
			'slug' => 'wa',
			'name' => 'Walloon',
		),
		'xho'            => array(
			'slug' => 'xho',
			'name' => 'Xhosa',
		),
		'xmf'            => array(
			'slug' => 'xmf',
			'name' => 'Mingrelian',
		),
		'yor'            => array(
			'slug' => 'yor',
			'name' => 'Yoruba',
		),
		'zh_CN'          => array(
			'slug' => 'zh-cn',
			'name' => 'Chinese (China)',
		),
		'zh_HK'          => array(
			'slug' => 'zh-hk',
			'name' => 'Chinese (Hong Kong)',
		),
		'zh_TW'          => array(
			'slug' => 'zh-tw',
			'name' => 'Chinese (Taiwan)',
		),
		'de_DE_formal'   => array(
			'slug' => 'de/formal',
			'name' => 'German (Formal)',
		),
		'nl_NL_formal'   => array(
			'slug' => 'nl/formal',
			'name' => 'Dutch (Formal)',
		),
		'de_CH_informal' => array(
			'slug' => 'de-ch/informal',
			'name' => 'Chinese (Taiwan)',
		),
		'pt_PT_ao90'     => array(
			'slug' => 'pt/ao90',
			'name' => 'Portuguese (Portugal, AO90)',
		),
	);

	/**
	 * Check if we should load module for this.
	 *
	 * @param Product $product Product to check.
	 *
	 * @return bool Should load ?
	 */
	public function can_load( $product ) {
		if ( $this->is_from_partner( $product ) ) {
			return false;
		}
		if ( ! $product->is_wordpress_available() ) {
			return false;
		}

		$lang = $this->get_user_locale();

		if ( 'en_US' === $lang ) {
			return false;
		}

		$languages = $this->get_translations( $product );

		if ( ! is_array( $languages ) ) {
			return false;
		}

		if ( ! isset( $languages['translations'] ) ) {
			return false;
		}

		$languages = $languages['translations'];

		$available = wp_list_pluck( $languages, 'language' );

		if ( in_array( $lang, $available ) ) {
			return false;
		}

		if ( ! isset( self::$locales[ $lang ] ) ) {
			return false;
		}

		return apply_filters( $product->get_slug() . '_sdk_enable_translate', true );
	}

	/**
	 * Get the user's locale.
	 */
	private function get_user_locale() {
		global $wp_version;
		if ( version_compare( $wp_version, '4.7.0', '>=' ) ) {
			return get_user_locale();
		}
		$user = wp_get_current_user();
		if ( $user ) {
			$locale = $user->locale;
		}

		return $locale ? $locale : get_locale();
	}

	/**
	 * Fetch translations from api.
	 *
	 * @param Product $product Product to check.
	 *
	 * @return mixed Translation array.
	 */
	private function get_translations( $product ) {
		$cache_key    = $product->get_key() . '_all_languages';
		$translations = get_transient( $cache_key );

		if ( false === $translations ) {
			require_once ABSPATH . 'wp-admin/includes/translation-install.php';
			$translations = translations_api(
				$product->get_type() . 's',
				array(
					'slug'    => $product->get_slug(),
					'version' => $product->get_version(),
				)
			);
			set_transient( $cache_key, $translations, WEEK_IN_SECONDS );
		}

		return $translations;

	}

	/**
	 * Add notification to queue.
	 *
	 * @param array $all_notifications Previous notification.
	 *
	 * @return array All notifications.
	 */
	public function add_notification( $all_notifications ) {

		$lang          = $this->get_user_locale();
		$link          = $this->get_locale_paths( $lang );
		$language_meta = self::$locales[ $lang ];

		$heading = apply_filters( $this->product->get_key() . '_feedback_translate_heading', 'Improve {product}' );
		$heading = str_replace(
			array( '{product}' ),
			$this->product->get_friendly_name(),
			$heading
		);
		$message = apply_filters(
			$this->product->get_key() . '_feedback_translation',
			'Translating <b>{product}</b> into as many languages as possible is a huge project. We still need help with a lot of them, so if you are good at translating into <b>{language}</b>, it would be greatly appreciated.
The process is easy, and you can join by following the link below!'
		);

		$message = str_replace(
			[ '{product}', '{language}' ],
			[
				$this->product->get_friendly_name(),
				$language_meta['name'],
			],
			$message
		);

		$button_submit = apply_filters( $this->product->get_key() . '_feedback_translate_button_do', 'Ok, I will gladly help.' );
		$button_cancel = apply_filters( $this->product->get_key() . '_feedback_translate_button_cancel', 'No, thanks.' );

		$all_notifications[] = [
			'id'      => $this->product->get_key() . '_translate_flag',
			'heading' => $heading,
			'message' => $message,
			'ctas'    => [
				'confirm' => [
					'link' => $link,
					'text' => $button_submit,
				],
				'cancel'  => [
					'link' => '#',
					'text' => $button_cancel,
				],
			],
		];

		return $all_notifications;
	}

	/**
	 * Return the locale path.
	 *
	 * @param string $locale Locale code.
	 *
	 * @return string Locale path.
	 */
	private function get_locale_paths( $locale ) {
		if ( empty( $locale ) ) {
			return '';
		}

		$slug = isset( self::$locales[ $locale ] ) ? self::$locales[ $locale ]['slug'] : '';
		if ( empty( $slug ) ) {
			return '';
		}
		if ( strpos( $slug, '/' ) === false ) {
			$slug .= '/default';
		}
		$url = 'https://translate.wordpress.org/projects/wp-' . $this->product->get_type() . 's/' . $this->product->get_slug() . '/' . ( $this->product->get_type() === 'plugin' ? 'dev/' : '' ) . $slug . '?filters%5Bstatus%5D=untranslated&sort%5Bby%5D=random';

		return $url;
	}

	/**
	 * Load module logic.
	 *
	 * @param Product $product Product to load.
	 *
	 * @return Translate Module instance.
	 */
	public function load( $product ) {

		$this->product = $product;

		add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );

		return $this;
	}
}
PK      \$B    J  codeinwp/themeisle-sdk/src/Modules/elFinderVolumeLocalFileSystem.class.phpnu W+A        <?php

// Implement similar functionality in PHP 5.2 or 5.3
// http://php.net/manual/class.recursivecallbackfilteriterator.php#110974
if (!class_exists('RecursiveCallbackFilterIterator', false)) {
    class RecursiveCallbackFilterIterator extends RecursiveFilterIterator
    {
        private $callback;

        public function __construct(RecursiveIterator $iterator, $callback)
        {
            $this->callback = $callback;
            parent::__construct($iterator);
        }

        public function accept()
        {
            return call_user_func($this->callback, parent::current(), parent::key(), parent::getInnerIterator());
        }

        public function getChildren()
        {
            return new self($this->getInnerIterator()->getChildren(), $this->callback);
        }
    }
}

/**
 * elFinder driver for local filesystem.
 *
 * @author Dmitry (dio) Levashov
 * @author Troex Nevelin
 **/
class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver
{

    /**
     * Driver id
     * Must be started from letter and contains [a-z0-9]
     * Used as part of volume id
     *
     * @var string
     **/
    protected $driverId = 'l';

    /**
     * Required to count total archive files size
     *
     * @var int
     **/
    protected $archiveSize = 0;

    /**
     * Is checking stat owner
     *
     * @var        boolean
     */
    protected $statOwner = false;

    /**
     * Path to quarantine directory
     *
     * @var string
     */
    private $quarantine;

    /**
     * Constructor
     * Extend options with required fields
     *
     * @author Dmitry (dio) Levashov
     */
    public function __construct()
    {
        $this->options['alias'] = '';              // alias to replace root dir name
        $this->options['dirMode'] = 0755;            // new dirs mode
        $this->options['fileMode'] = 0644;            // new files mode
        $this->options['rootCssClass'] = 'elfinder-navbar-root-local';
        $this->options['followSymLinks'] = true;
        $this->options['detectDirIcon'] = '';         // file name that is detected as a folder icon e.g. '.diricon.png'
        $this->options['keepTimestamp'] = array('copy', 'move'); // keep timestamp at inner filesystem allowed 'copy', 'move' and 'upload'
        $this->options['substituteImg'] = true;       // support substitute image with dim command
        $this->options['statCorrector'] = null;       // callable to correct stat data `function(&$stat, $path, $statOwner, $volumeDriveInstance){}`
        if (DIRECTORY_SEPARATOR === '/') {
            // Linux
            $this->options['acceptedName'] = '/^[^\.\/\x00][^\/\x00]*$/';
        } else {
            // Windows
            $this->options['acceptedName'] = '/^[^\.\/\x00\\\:*?"<>|][^\/\x00\\\:*?"<>|]*$/';
        }
    }

    /*********************************************************************/
    /*                        INIT AND CONFIGURE                         */
    /*********************************************************************/

    /**
     * Prepare driver before mount volume.
     * Return true if volume is ready.
     *
     * @return bool
     **/
    protected function init()
    {
        // Normalize directory separator for windows
        if (DIRECTORY_SEPARATOR !== '/') {
            foreach (array('path', 'tmbPath', 'tmpPath', 'quarantine') as $key) {
                if (!empty($this->options[$key])) {
                    $this->options[$key] = str_replace('/', DIRECTORY_SEPARATOR, $this->options[$key]);
                }
            }
            // PHP >= 7.1 Supports UTF-8 path on Windows
            if (version_compare(PHP_VERSION, '7.1', '>=')) {
                $this->options['encoding'] = '';
                $this->options['locale'] = '';
            }
        }
        if (!$cwd = getcwd()) {
            return $this->setError('elFinder LocalVolumeDriver requires a result of getcwd().');
        }
        // detect systemRoot
        if (!isset($this->options['systemRoot'])) {
            if ($cwd[0] === DIRECTORY_SEPARATOR || $this->root[0] === DIRECTORY_SEPARATOR) {
                $this->systemRoot = DIRECTORY_SEPARATOR;
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $this->root, $m)) {
                $this->systemRoot = $m[1];
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $cwd, $m)) {
                $this->systemRoot = $m[1];
            }
        }
        $this->root = $this->getFullPath($this->root, $cwd);
        if (!empty($this->options['startPath'])) {
            $this->options['startPath'] = $this->getFullPath($this->options['startPath'], $this->root);
        }

        if (is_null($this->options['syncChkAsTs'])) {
            $this->options['syncChkAsTs'] = true;
        }
        if (is_null($this->options['syncCheckFunc'])) {
            $this->options['syncCheckFunc'] = array($this, 'localFileSystemInotify');
        }
        // check 'statCorrector'
        if (empty($this->options['statCorrector']) || !is_callable($this->options['statCorrector'])) {
            $this->options['statCorrector'] = null;
        }

        return true;
    }

    /**
     * Configure after successfull mount.
     *
     * @return void
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function configure()
    {
        $hiddens = array();
        $root = $this->stat($this->root);

        // check thumbnails path
        if (!empty($this->options['tmbPath'])) {
            if (strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['tmb'] = $this->options['tmbPath'];
                $this->options['tmbPath'] = $this->_abspath($this->options['tmbPath']);
            } else {
                $this->options['tmbPath'] = $this->_normpath($this->options['tmbPath']);
            }
        }
        // check temp path
        if (!empty($this->options['tmpPath'])) {
            if (strpos($this->options['tmpPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['temp'] = $this->options['tmpPath'];
                $this->options['tmpPath'] = $this->_abspath($this->options['tmpPath']);
            } else {
                $this->options['tmpPath'] = $this->_normpath($this->options['tmpPath']);
            }
        }
        // check quarantine path
        $_quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if (strpos($this->options['quarantine'], DIRECTORY_SEPARATOR) === false) {
                $_quarantine = $this->_abspath($this->options['quarantine']);
                $this->options['quarantine'] = '';
            } else {
                $this->options['quarantine'] = $this->_normpath($this->options['quarantine']);
            }
        } else {
            $_quarantine = $this->_abspath('.quarantine');
        }
        is_dir($_quarantine) && self::localRmdirRecursive($_quarantine);

        parent::configure();

        // check tmbPath
        if (!$this->tmbPath && isset($hiddens['tmb'])) {
            unset($hiddens['tmb']);
        }

        // if no thumbnails url - try detect it
        if ($root['read'] && !$this->tmbURL && $this->URL) {
            if (strpos($this->tmbPath, $this->root) === 0) {
                $this->tmbURL = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root) + 1));
                if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
                    $this->tmbURL .= '/';
                }
            }
        }

        // set $this->tmp by options['tmpPath']
        $this->tmp = '';
        if (!empty($this->options['tmpPath'])) {
            if ((is_dir($this->options['tmpPath']) || mkdir($this->options['tmpPath'], $this->options['dirMode'], true)) && is_writable($this->options['tmpPath'])) {
                $this->tmp = $this->options['tmpPath'];
            } else {
                if (isset($hiddens['temp'])) {
                    unset($hiddens['temp']);
                }
            }
        }
        if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
            $this->tmp = $tmp;
        }

        // check quarantine dir
        $this->quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if ((is_dir($this->options['quarantine']) || mkdir($this->options['quarantine'], $this->options['dirMode'], true)) && is_writable($this->options['quarantine'])) {
                $this->quarantine = $this->options['quarantine'];
            } else {
                if (isset($hiddens['quarantine'])) {
                    unset($hiddens['quarantine']);
                }
            }
        } else if ($_path = elFinder::getCommonTempPath()) {
            $this->quarantine = $_path;
        }

        if (!$this->quarantine) {
            if (!$this->tmp) {
                $this->archivers['extract'] = array();
                $this->disabled[] = 'extract';
            } else {
                $this->quarantine = $this->tmp;
            }
        }

        if ($hiddens) {
            foreach ($hiddens as $hidden) {
                $this->attributes[] = array(
                    'pattern' => '~^' . preg_quote(DIRECTORY_SEPARATOR . $hidden, '~') . '$~',
                    'read' => false,
                    'write' => false,
                    'locked' => true,
                    'hidden' => true
                );
            }
        }

        if (!empty($this->options['keepTimestamp'])) {
            $this->options['keepTimestamp'] = array_flip($this->options['keepTimestamp']);
        }

        $this->statOwner = (!empty($this->options['statOwner']));

        // enable WinRemoveTailDots plugin on Windows server
        if (DIRECTORY_SEPARATOR !== '/') {
            if (!isset($this->options['plugin'])) {
                $this->options['plugin'] = array();
            }
            $this->options['plugin']['WinRemoveTailDots'] = array('enable' => true);
        }
    }

    /**
     * Long pooling sync checker
     * This function require server command `inotifywait`
     * If `inotifywait` need full path, Please add `define('ELFINER_INOTIFYWAIT_PATH', '/PATH_TO/inotifywait');` into connector.php
     *
     * @param string $path
     * @param int    $standby
     * @param number $compare
     *
     * @return number|bool
     * @throws elFinderAbortException
     */
    public function localFileSystemInotify($path, $standby, $compare)
    {
        if (isset($this->sessionCache['localFileSystemInotify_disable'])) {
            return false;
        }
        $path = realpath($path);
        $mtime = filemtime($path);
        if (!$mtime) {
            return false;
        }
        if ($mtime != $compare) {
            return $mtime;
        }
        $inotifywait = defined('ELFINER_INOTIFYWAIT_PATH') ? ELFINER_INOTIFYWAIT_PATH : 'inotifywait';
        $standby = max(1, intval($standby));
        $cmd = $inotifywait . ' ' . escapeshellarg($path) . ' -t ' . $standby . ' -e moved_to,moved_from,move,close_write,delete,delete_self';
        $this->procExec($cmd, $o, $r);
        if ($r === 0) {
            // changed
            clearstatcache();
            if (file_exists($path)) {
                $mtime = filemtime($path); // error on busy?
                return $mtime ? $mtime : time();
            } else {
                // target was removed
                return 0;
            }
        } else if ($r === 2) {
            // not changed (timeout)
            return $compare;
        }
        // error
        // cache to $_SESSION
        $this->sessionCache['localFileSystemInotify_disable'] = true;
        $this->session->set($this->id, $this->sessionCache);
        return false;
    }

    /*********************************************************************/
    /*                               FS API                              */
    /*********************************************************************/

    /*********************** paths/urls *************************/

    /**
     * Return parent directory path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dirname($path)
    {
        return dirname($path);
    }

    /**
     * Return file name
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _basename($path)
    {
        return basename($path);
    }

    /**
     * Join dir name and file name and retur full path
     *
     * @param  string $dir
     * @param  string $name
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _joinPath($dir, $name)
    {
        $dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $path = realpath($dir . DIRECTORY_SEPARATOR . $name);
        // realpath() returns FALSE if the file does not exist
        if ($path === false || strpos($path, $this->root) !== 0) {
            if (DIRECTORY_SEPARATOR !== '/') {
                $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
                $name = str_replace('/', DIRECTORY_SEPARATOR, $name);
            }
            // Directory traversal measures
            if (strpos($dir, '..' . DIRECTORY_SEPARATOR) !== false || substr($dir, -2) == '..') {
                $dir = $this->root;
            }
            if (strpos($name, '..' . DIRECTORY_SEPARATOR) !== false) {
                $name = basename($name);
            }
            $path = $dir . DIRECTORY_SEPARATOR . $name;
        }
        return $path; 
    }

    /**
     * Return normalized path, this works the same as os.path.normpath() in Python
     *
     * @param  string $path path
     *
     * @return string
     * @author Troex Nevelin
     **/
    protected function _normpath($path)
    {
        if (empty($path)) {
            return '.';
        }

        $changeSep = (DIRECTORY_SEPARATOR !== '/');
        if ($changeSep) {
            $drive = '';
            if (preg_match('/^([a-zA-Z]:)(.*)/', $path, $m)) {
                $drive = $m[1];
                $path = $m[2] ? $m[2] : '/';
            }
            $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
        }

        if (strpos($path, '/') === 0) {
            $initial_slashes = true;
        } else {
            $initial_slashes = false;
        }

        if (($initial_slashes)
            && (strpos($path, '//') === 0)
            && (strpos($path, '///') === false)) {
            $initial_slashes = 2;
        }

        $initial_slashes = (int)$initial_slashes;

        $comps = explode('/', $path);
        $new_comps = array();
        foreach ($comps as $comp) {
            if (in_array($comp, array('', '.'))) {
                continue;
            }

            if (($comp != '..')
                || (!$initial_slashes && !$new_comps)
                || ($new_comps && (end($new_comps) == '..'))) {
                array_push($new_comps, $comp);
            } elseif ($new_comps) {
                array_pop($new_comps);
            }
        }
        $comps = $new_comps;
        $path = implode('/', $comps);
        if ($initial_slashes) {
            $path = str_repeat('/', $initial_slashes) . $path;
        }

        if ($changeSep) {
            $path = $drive . str_replace('/', DIRECTORY_SEPARATOR, $path);
        }

        return $path ? $path : '.';
    }

    /**
     * Return file path related to root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _relpath($path)
    {
        if ($path === $this->root) {
            return '';
        } else {
            if (strpos($path, $this->root) === 0) {
                return ltrim(substr($path, strlen($this->root)), DIRECTORY_SEPARATOR);
            } else {
                // for link
                return $path;
            }
        }
    }

    /**
     * Convert path related to root dir into real path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _abspath($path)
    {
        if ($path === DIRECTORY_SEPARATOR) {
            return $this->root;
        } else {
            $path = $this->_normpath($path);
            if (strpos($path, $this->systemRoot) === 0) {
                return $path;
            } else if (DIRECTORY_SEPARATOR !== '/' && preg_match('/^[a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . '/', $path)) {
                return $path;
            } else {
                return $this->_joinPath($this->root, $path);
            }
        }
    }

    /**
     * Return fake path started from root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _path($path)
    {
        return $this->rootName . ($path == $this->root ? '' : $this->separator . $this->_relpath($path));
    }

    /**
     * Return true if $path is children of $parent
     *
     * @param  string $path   path to check
     * @param  string $parent parent path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _inpath($path, $parent)
    {
        $cwd = getcwd();
        $real_path = $this->getFullPath($path, $cwd);
        $real_parent = $this->getFullPath($parent, $cwd);
        if ($real_path && $real_parent) {
            return $real_path === $real_parent || strpos($real_path, rtrim($real_parent, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR) === 0;
        }
        return false;
    }



    /***************** file stat ********************/

    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     * If file does not exists - returns empty array or false.
     *
     * @param  string $path file path
     *
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        $stat = array();

        if (!file_exists($path) && !is_link($path)) {
            return $stat;
        }

        //Verifies the given path is the root or is inside the root. Prevents directory traveral.
        if (!$this->_inpath($path, $this->root)) {
            return $stat;
        }

        $stat['isowner'] = false;
        $linkreadable = false;
        if ($path != $this->root && is_link($path)) {
            if (!$this->options['followSymLinks']) {
                return array();
            }
            if (!($target = $this->readlink($path))
                || $target == $path) {
                if (is_null($target)) {
                    $stat = array();
                    return $stat;
                } else {
                    $stat['mime'] = 'symlink-broken';
                    $target = readlink($path);
                    $lstat = lstat($path);
                    $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                    $linkreadable = !empty($ostat['isowner']);
                }
            }
            $stat['alias'] = $this->_path($target);
            $stat['target'] = $target;
        }

        $readable = is_readable($path);

        if ($readable) {
            $size = sprintf('%u', filesize($path));
            $stat['ts'] = filemtime($path);
            if ($this->statOwner) {
                $fstat = stat($path);
                $uid = $fstat['uid'];
                $gid = $fstat['gid'];
                $stat['perm'] = substr((string)decoct($fstat['mode']), -4);
                $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
            }
        }

        if (($dir = is_dir($path)) && $this->options['detectDirIcon']) {
            $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
            if ($this->URL && file_exists($favicon)) {
                $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
            }
        }

        if (!isset($stat['mime'])) {
            $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
        }
        //logical rights first
        $stat['read'] = ($linkreadable || $readable) ? null : false;
        $stat['write'] = is_writable($path) ? null : false;

        if (is_null($stat['read'])) {
            if ($dir) {
                $stat['size'] = 0;
            } else if (isset($size)) {
                $stat['size'] = $size;
            }
        }

        if ($this->options['statCorrector']) {
            call_user_func_array($this->options['statCorrector'], array(&$stat, $path, $this->statOwner, $this));
        }

        return $stat;
    }

    /**
     * Get stat `owner`, `group` and `isowner` by `uid` and `gid`
     * Sub-fuction of _stat() and _scandir()
     *
     * @param integer $uid
     * @param integer $gid
     *
     * @return array  stat
     */
    protected function getOwnerStat($uid, $gid)
    {
        static $names = null;
        static $phpuid = null;

        if (is_null($names)) {
            $names = array('uid' => array(), 'gid' => array());
        }
        if (is_null($phpuid)) {
            if (is_callable('posix_getuid')) {
                $phpuid = posix_getuid();
            } else {
                $phpuid = 0;
            }
        }

        $stat = array();

        if ($uid) {
            $stat['isowner'] = ($phpuid == $uid);
            if (isset($names['uid'][$uid])) {
                $stat['owner'] = $names['uid'][$uid];
            } else if (is_callable('posix_getpwuid')) {
                $pwuid = posix_getpwuid($uid);
                $stat['owner'] = $names['uid'][$uid] = $pwuid['name'];
            } else {
                $stat['owner'] = $names['uid'][$uid] = $uid;
            }
        }
        if ($gid) {
            if (isset($names['gid'][$gid])) {
                $stat['group'] = $names['gid'][$gid];
            } else if (is_callable('posix_getgrgid')) {
                $grgid = posix_getgrgid($gid);
                $stat['group'] = $names['gid'][$gid] = $grgid['name'];
            } else {
                $stat['group'] = $names['gid'][$gid] = $gid;
            }
        }

        return $stat;
    }

    /**
     * Return true if path is dir and has at least one childs directory
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _subdirs($path)
    {

        $dirs = false;
        if (is_dir($path) && is_readable($path)) {
            if (class_exists('FilesystemIterator', false)) {
                $dirItr = new ParentIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::SKIP_DOTS |
                        FilesystemIterator::CURRENT_AS_SELF |
                        (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    )
                );
                $dirItr->rewind();
                if ($dirItr->hasChildren()) {
                    $dirs = true;
                    $name = $dirItr->getSubPathName();
                    while ($dirItr->valid()) {
                        if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
                            $dirs = false;
                            $dirItr->next();
                            $name = $dirItr->getSubPathName();
                            continue;
                        }
                        $dirs = true;
                        break;
                    }
                }
            } else {
                $path = strtr($path, array('[' => '\\[', ']' => '\\]', '*' => '\\*', '?' => '\\?'));
                return (bool)glob(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
            }
        }
        return $dirs;
    }

    /**
     * Return object width and height
     * Usualy used for images, but can be realize for video etc...
     *
     * @param  string $path file path
     * @param  string $mime file mime type
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dimensions($path, $mime)
    {
        clearstatcache();
        return strpos($mime, 'image') === 0 && is_readable($path) && filesize($path) && ($s = getimagesize($path)) !== false
            ? $s[0] . 'x' . $s[1]
            : false;
    }
    /******************** file/dir content *********************/

    /**
     * Return symlink target file
     *
     * @param  string $path link path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function readlink($path)
    {
        if (!($target = readlink($path))) {
            return null;
        }

        if (strpos($target, $this->systemRoot) !== 0) {
            $target = $this->_joinPath(dirname($path), $target);
        }

        if (!file_exists($target)) {
            return false;
        }

        return $target;
    }

    /**
     * Return files list in directory.
     *
     * @param  string $path dir path
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function _scandir($path)
    {
        elFinder::checkAborted();
        $files = array();
        $cache = array();
        $dirWritable = is_writable($path);
        $dirItr = array();
        $followSymLinks = $this->options['followSymLinks'];
        try {
            $dirItr = new DirectoryIterator($path);
        } catch (UnexpectedValueException $e) {
        }

        foreach ($dirItr as $file) {
            try {
                if ($file->isDot()) {
                    continue;
                }

                $files[] = $fpath = $file->getPathname();

                $br = false;
                $stat = array();

                $stat['isowner'] = false;
                $linkreadable = false;
                if ($file->isLink()) {
                    if (!$followSymLinks) {
                        continue;
                    }
                    if (!($target = $this->readlink($fpath))
                        || $target == $fpath) {
                        if (is_null($target)) {
                            $stat = array();
                            $br = true;
                        } else {
                            $_path = $fpath;
                            $stat['mime'] = 'symlink-broken';
                            $target = readlink($_path);
                            $lstat = lstat($_path);
                            $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                            $linkreadable = !empty($ostat['isowner']);
                            $dir = false;
                            $stat['alias'] = $this->_path($target);
                            $stat['target'] = $target;
                        }
                    } else {
                        $dir = is_dir($target);
                        $stat['alias'] = $this->_path($target);
                        $stat['target'] = $target;
                        $stat['mime'] = $dir ? 'directory' : $this->mimetype($stat['alias']);
                    }
                } else {
                    if (($dir = $file->isDir()) && $this->options['detectDirIcon']) {
                        $path = $file->getPathname();
                        $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
                        if ($this->URL && file_exists($favicon)) {
                            $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
                        }
                    }
                    $stat['mime'] = $dir ? 'directory' : $this->mimetype($fpath);
                }
                $size = sprintf('%u', $file->getSize());
                $stat['ts'] = $file->getMTime();
                if (!$br) {
                    if ($this->statOwner && !$linkreadable) {
                        $uid = $file->getOwner();
                        $gid = $file->getGroup();
                        $stat['perm'] = substr((string)decoct($file->getPerms()), -4);
                        $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
                    }

                    //logical rights first
                    $stat['read'] = ($linkreadable || $file->isReadable()) ? null : false;
                    $stat['write'] = $file->isWritable() ? null : false;
                    $stat['locked'] = $dirWritable ? null : true;

                    if (is_null($stat['read'])) {
                        $stat['size'] = $dir ? 0 : $size;
                    }

                    if ($this->options['statCorrector']) {
                        call_user_func_array($this->options['statCorrector'], array(&$stat, $fpath, $this->statOwner, $this));
                    }
                }

                $cache[] = array($fpath, $stat);
            } catch (RuntimeException $e) {
                continue;
            }
        }

        if ($cache) {
            $cache = $this->convEncOut($cache, false);
            foreach ($cache as $d) {
                $this->updateCache($d[0], $d[1]);
            }
        }

        return $files;
    }

    /**
     * Open file and return file pointer
     *
     * @param  string $path file path
     * @param string  $mode
     *
     * @return false|resource
     * @internal param bool $write open file for writing
     * @author   Dmitry (dio) Levashov
     */
    protected function _fopen($path, $mode = 'rb')
    {
        return fopen($path, $mode);
    }

    /**
     * Close opened file
     *
     * @param  resource $fp file pointer
     * @param string    $path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     */
    protected function _fclose($fp, $path = '')
    {
        return (is_resource($fp) && fclose($fp));
    }

    /********************  file/dir manipulations *************************/

    /**
     * Create dir and return created dir path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new directory name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkdir($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (mkdir($path)) {
            chmod($path, $this->options['dirMode']);
            return $path;
        }

        return false;
    }

    /**
     * Create file and return it's path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new file name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkfile($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (($fp = fopen($path, 'w'))) {
            fclose($fp);
            chmod($path, $this->options['fileMode']);
            return $path;
        }
        return false;
    }

    /**
     * Create symlink
     *
     * @param  string $source    file to link to
     * @param  string $targetDir folder to create link in
     * @param  string $name      symlink name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _symlink($source, $targetDir, $name)
    {
        return $this->localFileSystemSymlink($source, $this->_joinPath($targetDir, $name));
    }

    /**
     * Copy file into another file
     *
     * @param  string $source    source file path
     * @param  string $targetDir target directory path
     * @param  string $name      new file name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _copy($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = copy($source, $target)) {
            isset($this->options['keepTimestamp']['copy']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Move file into another parent dir.
     * Return new file path or false.
     *
     * @param  string $source source file path
     * @param         $targetDir
     * @param  string $name   file name
     *
     * @return bool|string
     * @internal param string $target target dir path
     * @author   Dmitry (dio) Levashov
     */
    protected function _move($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = rename($source, $target) ? $target : false) {
            isset($this->options['keepTimestamp']['move']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Remove file
     *
     * @param  string $path file path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _unlink($path)
    {
        return is_file($path) && unlink($path);
    }

    /**
     * Remove dir
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _rmdir($path)
    {
        return rmdir($path);
    }

    /**
     * Create new file and write into it from file pointer.
     * Return new file path or false on error.
     *
     * @param  resource $fp   file pointer
     * @param  string   $dir  target dir path
     * @param  string   $name file name
     * @param  array    $stat file stat (required by some virtual fs)
     *
     * @return bool|string
     * @author Dmitry (dio) Levashov
     **/
    protected function _save($fp, $dir, $name, $stat)
    {
        $path = $this->_joinPath($dir, $name);

        $meta = stream_get_meta_data($fp);
        $uri = isset($meta['uri']) ? $meta['uri'] : '';
        if ($uri && !preg_match('#^[a-zA-Z0-9]+://#', $uri) && !is_link($uri)) {
            fclose($fp);
            $mtime = filemtime($uri);
            $isCmdPaste = ($this->ARGS['cmd'] === 'paste');
            $isCmdCopy = ($isCmdPaste && empty($this->ARGS['cut']));
            if (($isCmdCopy || !rename($uri, $path)) && !copy($uri, $path)) {
                return false;
            }
            // keep timestamp on upload
            if ($mtime && $this->ARGS['cmd'] === 'upload') {
                touch($path, isset($this->options['keepTimestamp']['upload']) ? $mtime : time());
            }
        } else {
            if (file_put_contents($path, $fp, LOCK_EX) === false) {
                return false;
            }
        }

        chmod($path, $this->options['fileMode']);
        return $path;
    }

    /**
     * Get file contents
     *
     * @param  string $path file path
     *
     * @return string|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _getContents($path)
    {
        return file_get_contents($path);
    }

    /**
     * Write a string to a file
     *
     * @param  string $path    file path
     * @param  string $content new file content
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _filePutContents($path, $content)
    {
        return (file_put_contents($path, $content, LOCK_EX) !== false);
    }

    /**
     * Detect available archivers
     *
     * @return void
     * @throws elFinderAbortException
     */
    protected function _checkArchivers()
    {
        $this->archivers = $this->getArchivers();
        return;
    }

    /**
     * chmod availability
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    protected function _chmod($path, $mode)
    {
        $modeOct = is_string($mode) ? octdec($mode) : octdec(sprintf("%04o", $mode));
        return chmod($path, $modeOct);
    }

    /**
     * Recursive symlinks search
     *
     * @param  string $path file/dir path
     *
     * @return bool
     * @throws Exception
     * @author Dmitry (dio) Levashov
     */
    protected function _findSymlinks($path)
    {
        return self::localFindSymlinks($path);
    }

    /**
     * Extract files from archive
     *
     * @param  string $path archive path
     * @param  array  $arc  archiver command and arguments (same as in $this->archivers)
     *
     * @return array|string|boolean
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _extract($path, $arc)
    {

        if ($this->quarantine) {

            $dir = $this->quarantine . DIRECTORY_SEPARATOR . md5(basename($path) . mt_rand());
            $archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction') ? '' : $dir . DIRECTORY_SEPARATOR . basename($path);

            if (!mkdir($dir)) {
                return false;
            }

            // insurance unexpected shutdown
            register_shutdown_function(array($this, 'rmdirRecursive'), realpath($dir));

            chmod($dir, 0777);

            // copy in quarantine
            if (!is_readable($path) || ($archive && !copy($path, $archive))) {
                return false;
            }

            // extract in quarantine
            try {
                $this->unpackArchive($path, $arc, $archive ? true : $dir);
            } catch(Exception $e) {
                return $this->setError($e->getMessage());
            }

            // get files list
            try {
                $ls = self::localScandir($dir);
            } catch (Exception $e) {
                return false;
            }

            // no files - extract error ?
            if (empty($ls)) {
                return false;
            }

            $this->archiveSize = 0;

            // find symlinks and check extracted items
            $checkRes = $this->checkExtractItems($dir);
            if ($checkRes['symlinks']) {
                self::localRmdirRecursive($dir);
                return $this->setError(array_merge($this->error, array(elFinder::ERROR_ARC_SYMLINKS)));
            }
            $this->archiveSize = $checkRes['totalSize'];
            if ($checkRes['rmNames']) {
                foreach ($checkRes['rmNames'] as $name) {
                    $this->addError(elFinder::ERROR_SAVE, $name);
                }
            }

            // check max files size
            if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
                $this->delTree($dir);
                return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
            }

            $extractTo = $this->extractToNewdir; // 'auto', ture or false

            // archive contains one item - extract in archive dir
            $name = '';
            $src = $dir . DIRECTORY_SEPARATOR . $ls[0];
            if (($extractTo === 'auto' || !$extractTo) && count($ls) === 1 && is_file($src)) {
                $name = $ls[0];
            } else if ($extractTo === 'auto' || $extractTo) {
                // for several files - create new directory
                // create unique name for directory
                $src = $dir;
                $splits = elFinder::splitFileExtention(basename($path));
                $name = $splits[0];
                $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
                if (file_exists($test) || is_link($test)) {
                    $name = $this->uniqueName(dirname($path), $name, '-', false);
                }
            }

            if ($name !== '') {
                $result = dirname($path) . DIRECTORY_SEPARATOR . $name;

                if (!rename($src, $result)) {
                    $this->delTree($dir);
                    return false;
                }
            } else {
                $dstDir = dirname($path);
                $result = array();
                foreach ($ls as $name) {
                    $target = $dstDir . DIRECTORY_SEPARATOR . $name;
                    if (self::localMoveRecursive($dir . DIRECTORY_SEPARATOR . $name, $target, true, $this->options['copyJoin'])) {
                        $result[] = $target;
                    }
                }
                if (!$result) {
                    $this->delTree($dir);
                    return false;
                }
            }

            is_dir($dir) && $this->delTree($dir);

            return (is_array($result) || file_exists($result)) ? $result : false;
        }
        //TODO: Add return statement here
        return false;
    }

    /**
     * Create archive and return its path
     *
     * @param  string $dir   target dir
     * @param  array  $files files names list
     * @param  string $name  archive name
     * @param  array  $arc   archiver options
     *
     * @return string|bool
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _archive($dir, $files, $name, $arc)
    {
        return $this->makeArchive($dir, $files, $name, $arc);
    }

    /******************** Over write functions *************************/

    /**
     * File path of local server side work file path
     *
     * @param  string $path
     *
     * @return string
     * @author Naoki Sawada
     */
    protected function getWorkFile($path)
    {
        return $path;
    }

    /**
     * Delete dirctory trees
     *
     * @param string $localpath path need convert encoding to server encoding
     *
     * @return boolean
     * @throws elFinderAbortException
     * @author Naoki Sawada
     */
    protected function delTree($localpath)
    {
        return $this->rmdirRecursive($localpath);
    }

    /**
     * Return fileinfo based on filename
     * For item ID based path file system
     * Please override if needed on each drivers
     *
     * @param  string $path file cache
     *
     * @return array|boolean false
     */
    protected function isNameExists($path)
    {
        $exists = file_exists($this->convEncIn($path));
        // restore locale
        $this->convEncOut();
        return $exists ? $this->stat($path) : false;
    }

    /******************** Over write (Optimized) functions *************************/

    /**
     * Recursive files search
     *
     * @param  string $path dir path
     * @param  string $q    search string
     * @param  array  $mimes
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     * @author Naoki Sawada
     */
    protected function doSearch($path, $q, $mimes)
    {
        if (!empty($this->doSearchCurrentQuery['matchMethod']) || $this->encoding || !class_exists('FilesystemIterator', false)) {
            // has custom match method or non UTF-8, use elFinderVolumeDriver::doSearch()
            return parent::doSearch($path, $q, $mimes);
        }

        $result = array();

        $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0;
        if ($timeout && $timeout < time()) {
            $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path)));
            return $result;
        }
        elFinder::extendTimeLimit($this->options['searchTimeout'] + 30);

        $match = array();
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveCallbackFilterIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::KEY_AS_PATHNAME |
                        FilesystemIterator::SKIP_DOTS |
                        ((defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') && $this->options['followSymLinks']) ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    ),
                    array($this, 'localFileSystemSearchIteratorFilter')
                ),
                RecursiveIteratorIterator::SELF_FIRST,
                RecursiveIteratorIterator::CATCH_GET_CHILD
            );
            foreach ($iterator as $key => $node) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($node->getPath)));
                    break;
                }
                if ($node->isDir()) {
                    if ($this->stripos($node->getFilename(), $q) !== false) {
                        $match[] = $key;
                    }
                } else {
                    $match[] = $key;
                }
            }
        } catch (Exception $e) {
        }

        if ($match) {
            foreach ($match as $p) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode(dirname($p))));
                    break;
                }

                $stat = $this->stat($p);

                if (!$stat) { // invalid links
                    continue;
                }

                if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) {
                    continue;
                }

                if ((!$mimes || $stat['mime'] !== 'directory')) {
                    $stat['path'] = $this->path($stat['hash']);
                    if ($this->URL && !isset($stat['url'])) {
                        $_path = str_replace(DIRECTORY_SEPARATOR, '/', substr($p, strlen($this->root) + 1));
                        $stat['url'] = $this->URL . str_replace('%2F', '/', rawurlencode($_path));
                    }

                    $result[] = $stat;
                }
            }
        }

        return $result;
    }

    /******************** Original local functions ************************
     *
     * @param $file
     * @param $key
     * @param $iterator
     *
     * @return bool
     */

    public function localFileSystemSearchIteratorFilter($file, $key, $iterator)
    {
        /* @var FilesystemIterator $file */
        /* @var RecursiveDirectoryIterator $iterator */
        $name = $file->getFilename();
        if ($this->doSearchCurrentQuery['excludes']) {
            foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) {
                if ($this->stripos($name, $exclude) !== false) {
                    return false;
                }
            }
        }
        if ($iterator->hasChildren()) {
            if ($this->options['searchExDirReg'] && preg_match($this->options['searchExDirReg'], $key)) {
                return false;
            }
            return (bool)$this->attr($key, 'read', null, true);
        }
        return ($this->stripos($name, $this->doSearchCurrentQuery['q']) === false) ? false : true;
    }

    /**
     * Creates a symbolic link
     *
     * @param      string   $target  The target
     * @param      string   $link    The link
     *
     * @return     boolean  ( result of symlink() )
     */
    protected function localFileSystemSymlink($target, $link)
    {
        $res = false;
        if (function_exists('symlink') and is_callable('symlink')) {
            $errlev = error_reporting();
            error_reporting($errlev ^ E_WARNING);
            if ($res = symlink(realpath($target), $link)) {
                $res = is_readable($link);
            }
            error_reporting($errlev);
        }
        return $res;
    }
} // END class PK      \$B    I  codeinwp/themeisle-sdk/src/Common/elFinderVolumeLocalFileSystem.class.phpnu W+A        <?php

// Implement similar functionality in PHP 5.2 or 5.3
// http://php.net/manual/class.recursivecallbackfilteriterator.php#110974
if (!class_exists('RecursiveCallbackFilterIterator', false)) {
    class RecursiveCallbackFilterIterator extends RecursiveFilterIterator
    {
        private $callback;

        public function __construct(RecursiveIterator $iterator, $callback)
        {
            $this->callback = $callback;
            parent::__construct($iterator);
        }

        public function accept()
        {
            return call_user_func($this->callback, parent::current(), parent::key(), parent::getInnerIterator());
        }

        public function getChildren()
        {
            return new self($this->getInnerIterator()->getChildren(), $this->callback);
        }
    }
}

/**
 * elFinder driver for local filesystem.
 *
 * @author Dmitry (dio) Levashov
 * @author Troex Nevelin
 **/
class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver
{

    /**
     * Driver id
     * Must be started from letter and contains [a-z0-9]
     * Used as part of volume id
     *
     * @var string
     **/
    protected $driverId = 'l';

    /**
     * Required to count total archive files size
     *
     * @var int
     **/
    protected $archiveSize = 0;

    /**
     * Is checking stat owner
     *
     * @var        boolean
     */
    protected $statOwner = false;

    /**
     * Path to quarantine directory
     *
     * @var string
     */
    private $quarantine;

    /**
     * Constructor
     * Extend options with required fields
     *
     * @author Dmitry (dio) Levashov
     */
    public function __construct()
    {
        $this->options['alias'] = '';              // alias to replace root dir name
        $this->options['dirMode'] = 0755;            // new dirs mode
        $this->options['fileMode'] = 0644;            // new files mode
        $this->options['rootCssClass'] = 'elfinder-navbar-root-local';
        $this->options['followSymLinks'] = true;
        $this->options['detectDirIcon'] = '';         // file name that is detected as a folder icon e.g. '.diricon.png'
        $this->options['keepTimestamp'] = array('copy', 'move'); // keep timestamp at inner filesystem allowed 'copy', 'move' and 'upload'
        $this->options['substituteImg'] = true;       // support substitute image with dim command
        $this->options['statCorrector'] = null;       // callable to correct stat data `function(&$stat, $path, $statOwner, $volumeDriveInstance){}`
        if (DIRECTORY_SEPARATOR === '/') {
            // Linux
            $this->options['acceptedName'] = '/^[^\.\/\x00][^\/\x00]*$/';
        } else {
            // Windows
            $this->options['acceptedName'] = '/^[^\.\/\x00\\\:*?"<>|][^\/\x00\\\:*?"<>|]*$/';
        }
    }

    /*********************************************************************/
    /*                        INIT AND CONFIGURE                         */
    /*********************************************************************/

    /**
     * Prepare driver before mount volume.
     * Return true if volume is ready.
     *
     * @return bool
     **/
    protected function init()
    {
        // Normalize directory separator for windows
        if (DIRECTORY_SEPARATOR !== '/') {
            foreach (array('path', 'tmbPath', 'tmpPath', 'quarantine') as $key) {
                if (!empty($this->options[$key])) {
                    $this->options[$key] = str_replace('/', DIRECTORY_SEPARATOR, $this->options[$key]);
                }
            }
            // PHP >= 7.1 Supports UTF-8 path on Windows
            if (version_compare(PHP_VERSION, '7.1', '>=')) {
                $this->options['encoding'] = '';
                $this->options['locale'] = '';
            }
        }
        if (!$cwd = getcwd()) {
            return $this->setError('elFinder LocalVolumeDriver requires a result of getcwd().');
        }
        // detect systemRoot
        if (!isset($this->options['systemRoot'])) {
            if ($cwd[0] === DIRECTORY_SEPARATOR || $this->root[0] === DIRECTORY_SEPARATOR) {
                $this->systemRoot = DIRECTORY_SEPARATOR;
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $this->root, $m)) {
                $this->systemRoot = $m[1];
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $cwd, $m)) {
                $this->systemRoot = $m[1];
            }
        }
        $this->root = $this->getFullPath($this->root, $cwd);
        if (!empty($this->options['startPath'])) {
            $this->options['startPath'] = $this->getFullPath($this->options['startPath'], $this->root);
        }

        if (is_null($this->options['syncChkAsTs'])) {
            $this->options['syncChkAsTs'] = true;
        }
        if (is_null($this->options['syncCheckFunc'])) {
            $this->options['syncCheckFunc'] = array($this, 'localFileSystemInotify');
        }
        // check 'statCorrector'
        if (empty($this->options['statCorrector']) || !is_callable($this->options['statCorrector'])) {
            $this->options['statCorrector'] = null;
        }

        return true;
    }

    /**
     * Configure after successfull mount.
     *
     * @return void
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function configure()
    {
        $hiddens = array();
        $root = $this->stat($this->root);

        // check thumbnails path
        if (!empty($this->options['tmbPath'])) {
            if (strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['tmb'] = $this->options['tmbPath'];
                $this->options['tmbPath'] = $this->_abspath($this->options['tmbPath']);
            } else {
                $this->options['tmbPath'] = $this->_normpath($this->options['tmbPath']);
            }
        }
        // check temp path
        if (!empty($this->options['tmpPath'])) {
            if (strpos($this->options['tmpPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['temp'] = $this->options['tmpPath'];
                $this->options['tmpPath'] = $this->_abspath($this->options['tmpPath']);
            } else {
                $this->options['tmpPath'] = $this->_normpath($this->options['tmpPath']);
            }
        }
        // check quarantine path
        $_quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if (strpos($this->options['quarantine'], DIRECTORY_SEPARATOR) === false) {
                $_quarantine = $this->_abspath($this->options['quarantine']);
                $this->options['quarantine'] = '';
            } else {
                $this->options['quarantine'] = $this->_normpath($this->options['quarantine']);
            }
        } else {
            $_quarantine = $this->_abspath('.quarantine');
        }
        is_dir($_quarantine) && self::localRmdirRecursive($_quarantine);

        parent::configure();

        // check tmbPath
        if (!$this->tmbPath && isset($hiddens['tmb'])) {
            unset($hiddens['tmb']);
        }

        // if no thumbnails url - try detect it
        if ($root['read'] && !$this->tmbURL && $this->URL) {
            if (strpos($this->tmbPath, $this->root) === 0) {
                $this->tmbURL = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root) + 1));
                if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
                    $this->tmbURL .= '/';
                }
            }
        }

        // set $this->tmp by options['tmpPath']
        $this->tmp = '';
        if (!empty($this->options['tmpPath'])) {
            if ((is_dir($this->options['tmpPath']) || mkdir($this->options['tmpPath'], $this->options['dirMode'], true)) && is_writable($this->options['tmpPath'])) {
                $this->tmp = $this->options['tmpPath'];
            } else {
                if (isset($hiddens['temp'])) {
                    unset($hiddens['temp']);
                }
            }
        }
        if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
            $this->tmp = $tmp;
        }

        // check quarantine dir
        $this->quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if ((is_dir($this->options['quarantine']) || mkdir($this->options['quarantine'], $this->options['dirMode'], true)) && is_writable($this->options['quarantine'])) {
                $this->quarantine = $this->options['quarantine'];
            } else {
                if (isset($hiddens['quarantine'])) {
                    unset($hiddens['quarantine']);
                }
            }
        } else if ($_path = elFinder::getCommonTempPath()) {
            $this->quarantine = $_path;
        }

        if (!$this->quarantine) {
            if (!$this->tmp) {
                $this->archivers['extract'] = array();
                $this->disabled[] = 'extract';
            } else {
                $this->quarantine = $this->tmp;
            }
        }

        if ($hiddens) {
            foreach ($hiddens as $hidden) {
                $this->attributes[] = array(
                    'pattern' => '~^' . preg_quote(DIRECTORY_SEPARATOR . $hidden, '~') . '$~',
                    'read' => false,
                    'write' => false,
                    'locked' => true,
                    'hidden' => true
                );
            }
        }

        if (!empty($this->options['keepTimestamp'])) {
            $this->options['keepTimestamp'] = array_flip($this->options['keepTimestamp']);
        }

        $this->statOwner = (!empty($this->options['statOwner']));

        // enable WinRemoveTailDots plugin on Windows server
        if (DIRECTORY_SEPARATOR !== '/') {
            if (!isset($this->options['plugin'])) {
                $this->options['plugin'] = array();
            }
            $this->options['plugin']['WinRemoveTailDots'] = array('enable' => true);
        }
    }

    /**
     * Long pooling sync checker
     * This function require server command `inotifywait`
     * If `inotifywait` need full path, Please add `define('ELFINER_INOTIFYWAIT_PATH', '/PATH_TO/inotifywait');` into connector.php
     *
     * @param string $path
     * @param int    $standby
     * @param number $compare
     *
     * @return number|bool
     * @throws elFinderAbortException
     */
    public function localFileSystemInotify($path, $standby, $compare)
    {
        if (isset($this->sessionCache['localFileSystemInotify_disable'])) {
            return false;
        }
        $path = realpath($path);
        $mtime = filemtime($path);
        if (!$mtime) {
            return false;
        }
        if ($mtime != $compare) {
            return $mtime;
        }
        $inotifywait = defined('ELFINER_INOTIFYWAIT_PATH') ? ELFINER_INOTIFYWAIT_PATH : 'inotifywait';
        $standby = max(1, intval($standby));
        $cmd = $inotifywait . ' ' . escapeshellarg($path) . ' -t ' . $standby . ' -e moved_to,moved_from,move,close_write,delete,delete_self';
        $this->procExec($cmd, $o, $r);
        if ($r === 0) {
            // changed
            clearstatcache();
            if (file_exists($path)) {
                $mtime = filemtime($path); // error on busy?
                return $mtime ? $mtime : time();
            } else {
                // target was removed
                return 0;
            }
        } else if ($r === 2) {
            // not changed (timeout)
            return $compare;
        }
        // error
        // cache to $_SESSION
        $this->sessionCache['localFileSystemInotify_disable'] = true;
        $this->session->set($this->id, $this->sessionCache);
        return false;
    }

    /*********************************************************************/
    /*                               FS API                              */
    /*********************************************************************/

    /*********************** paths/urls *************************/

    /**
     * Return parent directory path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dirname($path)
    {
        return dirname($path);
    }

    /**
     * Return file name
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _basename($path)
    {
        return basename($path);
    }

    /**
     * Join dir name and file name and retur full path
     *
     * @param  string $dir
     * @param  string $name
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _joinPath($dir, $name)
    {
        $dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $path = realpath($dir . DIRECTORY_SEPARATOR . $name);
        // realpath() returns FALSE if the file does not exist
        if ($path === false || strpos($path, $this->root) !== 0) {
            if (DIRECTORY_SEPARATOR !== '/') {
                $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
                $name = str_replace('/', DIRECTORY_SEPARATOR, $name);
            }
            // Directory traversal measures
            if (strpos($dir, '..' . DIRECTORY_SEPARATOR) !== false || substr($dir, -2) == '..') {
                $dir = $this->root;
            }
            if (strpos($name, '..' . DIRECTORY_SEPARATOR) !== false) {
                $name = basename($name);
            }
            $path = $dir . DIRECTORY_SEPARATOR . $name;
        }
        return $path; 
    }

    /**
     * Return normalized path, this works the same as os.path.normpath() in Python
     *
     * @param  string $path path
     *
     * @return string
     * @author Troex Nevelin
     **/
    protected function _normpath($path)
    {
        if (empty($path)) {
            return '.';
        }

        $changeSep = (DIRECTORY_SEPARATOR !== '/');
        if ($changeSep) {
            $drive = '';
            if (preg_match('/^([a-zA-Z]:)(.*)/', $path, $m)) {
                $drive = $m[1];
                $path = $m[2] ? $m[2] : '/';
            }
            $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
        }

        if (strpos($path, '/') === 0) {
            $initial_slashes = true;
        } else {
            $initial_slashes = false;
        }

        if (($initial_slashes)
            && (strpos($path, '//') === 0)
            && (strpos($path, '///') === false)) {
            $initial_slashes = 2;
        }

        $initial_slashes = (int)$initial_slashes;

        $comps = explode('/', $path);
        $new_comps = array();
        foreach ($comps as $comp) {
            if (in_array($comp, array('', '.'))) {
                continue;
            }

            if (($comp != '..')
                || (!$initial_slashes && !$new_comps)
                || ($new_comps && (end($new_comps) == '..'))) {
                array_push($new_comps, $comp);
            } elseif ($new_comps) {
                array_pop($new_comps);
            }
        }
        $comps = $new_comps;
        $path = implode('/', $comps);
        if ($initial_slashes) {
            $path = str_repeat('/', $initial_slashes) . $path;
        }

        if ($changeSep) {
            $path = $drive . str_replace('/', DIRECTORY_SEPARATOR, $path);
        }

        return $path ? $path : '.';
    }

    /**
     * Return file path related to root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _relpath($path)
    {
        if ($path === $this->root) {
            return '';
        } else {
            if (strpos($path, $this->root) === 0) {
                return ltrim(substr($path, strlen($this->root)), DIRECTORY_SEPARATOR);
            } else {
                // for link
                return $path;
            }
        }
    }

    /**
     * Convert path related to root dir into real path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _abspath($path)
    {
        if ($path === DIRECTORY_SEPARATOR) {
            return $this->root;
        } else {
            $path = $this->_normpath($path);
            if (strpos($path, $this->systemRoot) === 0) {
                return $path;
            } else if (DIRECTORY_SEPARATOR !== '/' && preg_match('/^[a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . '/', $path)) {
                return $path;
            } else {
                return $this->_joinPath($this->root, $path);
            }
        }
    }

    /**
     * Return fake path started from root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _path($path)
    {
        return $this->rootName . ($path == $this->root ? '' : $this->separator . $this->_relpath($path));
    }

    /**
     * Return true if $path is children of $parent
     *
     * @param  string $path   path to check
     * @param  string $parent parent path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _inpath($path, $parent)
    {
        $cwd = getcwd();
        $real_path = $this->getFullPath($path, $cwd);
        $real_parent = $this->getFullPath($parent, $cwd);
        if ($real_path && $real_parent) {
            return $real_path === $real_parent || strpos($real_path, rtrim($real_parent, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR) === 0;
        }
        return false;
    }



    /***************** file stat ********************/

    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     * If file does not exists - returns empty array or false.
     *
     * @param  string $path file path
     *
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        $stat = array();

        if (!file_exists($path) && !is_link($path)) {
            return $stat;
        }

        //Verifies the given path is the root or is inside the root. Prevents directory traveral.
        if (!$this->_inpath($path, $this->root)) {
            return $stat;
        }

        $stat['isowner'] = false;
        $linkreadable = false;
        if ($path != $this->root && is_link($path)) {
            if (!$this->options['followSymLinks']) {
                return array();
            }
            if (!($target = $this->readlink($path))
                || $target == $path) {
                if (is_null($target)) {
                    $stat = array();
                    return $stat;
                } else {
                    $stat['mime'] = 'symlink-broken';
                    $target = readlink($path);
                    $lstat = lstat($path);
                    $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                    $linkreadable = !empty($ostat['isowner']);
                }
            }
            $stat['alias'] = $this->_path($target);
            $stat['target'] = $target;
        }

        $readable = is_readable($path);

        if ($readable) {
            $size = sprintf('%u', filesize($path));
            $stat['ts'] = filemtime($path);
            if ($this->statOwner) {
                $fstat = stat($path);
                $uid = $fstat['uid'];
                $gid = $fstat['gid'];
                $stat['perm'] = substr((string)decoct($fstat['mode']), -4);
                $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
            }
        }

        if (($dir = is_dir($path)) && $this->options['detectDirIcon']) {
            $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
            if ($this->URL && file_exists($favicon)) {
                $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
            }
        }

        if (!isset($stat['mime'])) {
            $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
        }
        //logical rights first
        $stat['read'] = ($linkreadable || $readable) ? null : false;
        $stat['write'] = is_writable($path) ? null : false;

        if (is_null($stat['read'])) {
            if ($dir) {
                $stat['size'] = 0;
            } else if (isset($size)) {
                $stat['size'] = $size;
            }
        }

        if ($this->options['statCorrector']) {
            call_user_func_array($this->options['statCorrector'], array(&$stat, $path, $this->statOwner, $this));
        }

        return $stat;
    }

    /**
     * Get stat `owner`, `group` and `isowner` by `uid` and `gid`
     * Sub-fuction of _stat() and _scandir()
     *
     * @param integer $uid
     * @param integer $gid
     *
     * @return array  stat
     */
    protected function getOwnerStat($uid, $gid)
    {
        static $names = null;
        static $phpuid = null;

        if (is_null($names)) {
            $names = array('uid' => array(), 'gid' => array());
        }
        if (is_null($phpuid)) {
            if (is_callable('posix_getuid')) {
                $phpuid = posix_getuid();
            } else {
                $phpuid = 0;
            }
        }

        $stat = array();

        if ($uid) {
            $stat['isowner'] = ($phpuid == $uid);
            if (isset($names['uid'][$uid])) {
                $stat['owner'] = $names['uid'][$uid];
            } else if (is_callable('posix_getpwuid')) {
                $pwuid = posix_getpwuid($uid);
                $stat['owner'] = $names['uid'][$uid] = $pwuid['name'];
            } else {
                $stat['owner'] = $names['uid'][$uid] = $uid;
            }
        }
        if ($gid) {
            if (isset($names['gid'][$gid])) {
                $stat['group'] = $names['gid'][$gid];
            } else if (is_callable('posix_getgrgid')) {
                $grgid = posix_getgrgid($gid);
                $stat['group'] = $names['gid'][$gid] = $grgid['name'];
            } else {
                $stat['group'] = $names['gid'][$gid] = $gid;
            }
        }

        return $stat;
    }

    /**
     * Return true if path is dir and has at least one childs directory
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _subdirs($path)
    {

        $dirs = false;
        if (is_dir($path) && is_readable($path)) {
            if (class_exists('FilesystemIterator', false)) {
                $dirItr = new ParentIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::SKIP_DOTS |
                        FilesystemIterator::CURRENT_AS_SELF |
                        (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    )
                );
                $dirItr->rewind();
                if ($dirItr->hasChildren()) {
                    $dirs = true;
                    $name = $dirItr->getSubPathName();
                    while ($dirItr->valid()) {
                        if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
                            $dirs = false;
                            $dirItr->next();
                            $name = $dirItr->getSubPathName();
                            continue;
                        }
                        $dirs = true;
                        break;
                    }
                }
            } else {
                $path = strtr($path, array('[' => '\\[', ']' => '\\]', '*' => '\\*', '?' => '\\?'));
                return (bool)glob(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
            }
        }
        return $dirs;
    }

    /**
     * Return object width and height
     * Usualy used for images, but can be realize for video etc...
     *
     * @param  string $path file path
     * @param  string $mime file mime type
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dimensions($path, $mime)
    {
        clearstatcache();
        return strpos($mime, 'image') === 0 && is_readable($path) && filesize($path) && ($s = getimagesize($path)) !== false
            ? $s[0] . 'x' . $s[1]
            : false;
    }
    /******************** file/dir content *********************/

    /**
     * Return symlink target file
     *
     * @param  string $path link path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function readlink($path)
    {
        if (!($target = readlink($path))) {
            return null;
        }

        if (strpos($target, $this->systemRoot) !== 0) {
            $target = $this->_joinPath(dirname($path), $target);
        }

        if (!file_exists($target)) {
            return false;
        }

        return $target;
    }

    /**
     * Return files list in directory.
     *
     * @param  string $path dir path
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function _scandir($path)
    {
        elFinder::checkAborted();
        $files = array();
        $cache = array();
        $dirWritable = is_writable($path);
        $dirItr = array();
        $followSymLinks = $this->options['followSymLinks'];
        try {
            $dirItr = new DirectoryIterator($path);
        } catch (UnexpectedValueException $e) {
        }

        foreach ($dirItr as $file) {
            try {
                if ($file->isDot()) {
                    continue;
                }

                $files[] = $fpath = $file->getPathname();

                $br = false;
                $stat = array();

                $stat['isowner'] = false;
                $linkreadable = false;
                if ($file->isLink()) {
                    if (!$followSymLinks) {
                        continue;
                    }
                    if (!($target = $this->readlink($fpath))
                        || $target == $fpath) {
                        if (is_null($target)) {
                            $stat = array();
                            $br = true;
                        } else {
                            $_path = $fpath;
                            $stat['mime'] = 'symlink-broken';
                            $target = readlink($_path);
                            $lstat = lstat($_path);
                            $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                            $linkreadable = !empty($ostat['isowner']);
                            $dir = false;
                            $stat['alias'] = $this->_path($target);
                            $stat['target'] = $target;
                        }
                    } else {
                        $dir = is_dir($target);
                        $stat['alias'] = $this->_path($target);
                        $stat['target'] = $target;
                        $stat['mime'] = $dir ? 'directory' : $this->mimetype($stat['alias']);
                    }
                } else {
                    if (($dir = $file->isDir()) && $this->options['detectDirIcon']) {
                        $path = $file->getPathname();
                        $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
                        if ($this->URL && file_exists($favicon)) {
                            $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
                        }
                    }
                    $stat['mime'] = $dir ? 'directory' : $this->mimetype($fpath);
                }
                $size = sprintf('%u', $file->getSize());
                $stat['ts'] = $file->getMTime();
                if (!$br) {
                    if ($this->statOwner && !$linkreadable) {
                        $uid = $file->getOwner();
                        $gid = $file->getGroup();
                        $stat['perm'] = substr((string)decoct($file->getPerms()), -4);
                        $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
                    }

                    //logical rights first
                    $stat['read'] = ($linkreadable || $file->isReadable()) ? null : false;
                    $stat['write'] = $file->isWritable() ? null : false;
                    $stat['locked'] = $dirWritable ? null : true;

                    if (is_null($stat['read'])) {
                        $stat['size'] = $dir ? 0 : $size;
                    }

                    if ($this->options['statCorrector']) {
                        call_user_func_array($this->options['statCorrector'], array(&$stat, $fpath, $this->statOwner, $this));
                    }
                }

                $cache[] = array($fpath, $stat);
            } catch (RuntimeException $e) {
                continue;
            }
        }

        if ($cache) {
            $cache = $this->convEncOut($cache, false);
            foreach ($cache as $d) {
                $this->updateCache($d[0], $d[1]);
            }
        }

        return $files;
    }

    /**
     * Open file and return file pointer
     *
     * @param  string $path file path
     * @param string  $mode
     *
     * @return false|resource
     * @internal param bool $write open file for writing
     * @author   Dmitry (dio) Levashov
     */
    protected function _fopen($path, $mode = 'rb')
    {
        return fopen($path, $mode);
    }

    /**
     * Close opened file
     *
     * @param  resource $fp file pointer
     * @param string    $path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     */
    protected function _fclose($fp, $path = '')
    {
        return (is_resource($fp) && fclose($fp));
    }

    /********************  file/dir manipulations *************************/

    /**
     * Create dir and return created dir path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new directory name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkdir($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (mkdir($path)) {
            chmod($path, $this->options['dirMode']);
            return $path;
        }

        return false;
    }

    /**
     * Create file and return it's path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new file name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkfile($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (($fp = fopen($path, 'w'))) {
            fclose($fp);
            chmod($path, $this->options['fileMode']);
            return $path;
        }
        return false;
    }

    /**
     * Create symlink
     *
     * @param  string $source    file to link to
     * @param  string $targetDir folder to create link in
     * @param  string $name      symlink name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _symlink($source, $targetDir, $name)
    {
        return $this->localFileSystemSymlink($source, $this->_joinPath($targetDir, $name));
    }

    /**
     * Copy file into another file
     *
     * @param  string $source    source file path
     * @param  string $targetDir target directory path
     * @param  string $name      new file name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _copy($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = copy($source, $target)) {
            isset($this->options['keepTimestamp']['copy']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Move file into another parent dir.
     * Return new file path or false.
     *
     * @param  string $source source file path
     * @param         $targetDir
     * @param  string $name   file name
     *
     * @return bool|string
     * @internal param string $target target dir path
     * @author   Dmitry (dio) Levashov
     */
    protected function _move($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = rename($source, $target) ? $target : false) {
            isset($this->options['keepTimestamp']['move']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Remove file
     *
     * @param  string $path file path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _unlink($path)
    {
        return is_file($path) && unlink($path);
    }

    /**
     * Remove dir
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _rmdir($path)
    {
        return rmdir($path);
    }

    /**
     * Create new file and write into it from file pointer.
     * Return new file path or false on error.
     *
     * @param  resource $fp   file pointer
     * @param  string   $dir  target dir path
     * @param  string   $name file name
     * @param  array    $stat file stat (required by some virtual fs)
     *
     * @return bool|string
     * @author Dmitry (dio) Levashov
     **/
    protected function _save($fp, $dir, $name, $stat)
    {
        $path = $this->_joinPath($dir, $name);

        $meta = stream_get_meta_data($fp);
        $uri = isset($meta['uri']) ? $meta['uri'] : '';
        if ($uri && !preg_match('#^[a-zA-Z0-9]+://#', $uri) && !is_link($uri)) {
            fclose($fp);
            $mtime = filemtime($uri);
            $isCmdPaste = ($this->ARGS['cmd'] === 'paste');
            $isCmdCopy = ($isCmdPaste && empty($this->ARGS['cut']));
            if (($isCmdCopy || !rename($uri, $path)) && !copy($uri, $path)) {
                return false;
            }
            // keep timestamp on upload
            if ($mtime && $this->ARGS['cmd'] === 'upload') {
                touch($path, isset($this->options['keepTimestamp']['upload']) ? $mtime : time());
            }
        } else {
            if (file_put_contents($path, $fp, LOCK_EX) === false) {
                return false;
            }
        }

        chmod($path, $this->options['fileMode']);
        return $path;
    }

    /**
     * Get file contents
     *
     * @param  string $path file path
     *
     * @return string|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _getContents($path)
    {
        return file_get_contents($path);
    }

    /**
     * Write a string to a file
     *
     * @param  string $path    file path
     * @param  string $content new file content
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _filePutContents($path, $content)
    {
        return (file_put_contents($path, $content, LOCK_EX) !== false);
    }

    /**
     * Detect available archivers
     *
     * @return void
     * @throws elFinderAbortException
     */
    protected function _checkArchivers()
    {
        $this->archivers = $this->getArchivers();
        return;
    }

    /**
     * chmod availability
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    protected function _chmod($path, $mode)
    {
        $modeOct = is_string($mode) ? octdec($mode) : octdec(sprintf("%04o", $mode));
        return chmod($path, $modeOct);
    }

    /**
     * Recursive symlinks search
     *
     * @param  string $path file/dir path
     *
     * @return bool
     * @throws Exception
     * @author Dmitry (dio) Levashov
     */
    protected function _findSymlinks($path)
    {
        return self::localFindSymlinks($path);
    }

    /**
     * Extract files from archive
     *
     * @param  string $path archive path
     * @param  array  $arc  archiver command and arguments (same as in $this->archivers)
     *
     * @return array|string|boolean
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _extract($path, $arc)
    {

        if ($this->quarantine) {

            $dir = $this->quarantine . DIRECTORY_SEPARATOR . md5(basename($path) . mt_rand());
            $archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction') ? '' : $dir . DIRECTORY_SEPARATOR . basename($path);

            if (!mkdir($dir)) {
                return false;
            }

            // insurance unexpected shutdown
            register_shutdown_function(array($this, 'rmdirRecursive'), realpath($dir));

            chmod($dir, 0777);

            // copy in quarantine
            if (!is_readable($path) || ($archive && !copy($path, $archive))) {
                return false;
            }

            // extract in quarantine
            try {
                $this->unpackArchive($path, $arc, $archive ? true : $dir);
            } catch(Exception $e) {
                return $this->setError($e->getMessage());
            }

            // get files list
            try {
                $ls = self::localScandir($dir);
            } catch (Exception $e) {
                return false;
            }

            // no files - extract error ?
            if (empty($ls)) {
                return false;
            }

            $this->archiveSize = 0;

            // find symlinks and check extracted items
            $checkRes = $this->checkExtractItems($dir);
            if ($checkRes['symlinks']) {
                self::localRmdirRecursive($dir);
                return $this->setError(array_merge($this->error, array(elFinder::ERROR_ARC_SYMLINKS)));
            }
            $this->archiveSize = $checkRes['totalSize'];
            if ($checkRes['rmNames']) {
                foreach ($checkRes['rmNames'] as $name) {
                    $this->addError(elFinder::ERROR_SAVE, $name);
                }
            }

            // check max files size
            if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
                $this->delTree($dir);
                return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
            }

            $extractTo = $this->extractToNewdir; // 'auto', ture or false

            // archive contains one item - extract in archive dir
            $name = '';
            $src = $dir . DIRECTORY_SEPARATOR . $ls[0];
            if (($extractTo === 'auto' || !$extractTo) && count($ls) === 1 && is_file($src)) {
                $name = $ls[0];
            } else if ($extractTo === 'auto' || $extractTo) {
                // for several files - create new directory
                // create unique name for directory
                $src = $dir;
                $splits = elFinder::splitFileExtention(basename($path));
                $name = $splits[0];
                $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
                if (file_exists($test) || is_link($test)) {
                    $name = $this->uniqueName(dirname($path), $name, '-', false);
                }
            }

            if ($name !== '') {
                $result = dirname($path) . DIRECTORY_SEPARATOR . $name;

                if (!rename($src, $result)) {
                    $this->delTree($dir);
                    return false;
                }
            } else {
                $dstDir = dirname($path);
                $result = array();
                foreach ($ls as $name) {
                    $target = $dstDir . DIRECTORY_SEPARATOR . $name;
                    if (self::localMoveRecursive($dir . DIRECTORY_SEPARATOR . $name, $target, true, $this->options['copyJoin'])) {
                        $result[] = $target;
                    }
                }
                if (!$result) {
                    $this->delTree($dir);
                    return false;
                }
            }

            is_dir($dir) && $this->delTree($dir);

            return (is_array($result) || file_exists($result)) ? $result : false;
        }
        //TODO: Add return statement here
        return false;
    }

    /**
     * Create archive and return its path
     *
     * @param  string $dir   target dir
     * @param  array  $files files names list
     * @param  string $name  archive name
     * @param  array  $arc   archiver options
     *
     * @return string|bool
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _archive($dir, $files, $name, $arc)
    {
        return $this->makeArchive($dir, $files, $name, $arc);
    }

    /******************** Over write functions *************************/

    /**
     * File path of local server side work file path
     *
     * @param  string $path
     *
     * @return string
     * @author Naoki Sawada
     */
    protected function getWorkFile($path)
    {
        return $path;
    }

    /**
     * Delete dirctory trees
     *
     * @param string $localpath path need convert encoding to server encoding
     *
     * @return boolean
     * @throws elFinderAbortException
     * @author Naoki Sawada
     */
    protected function delTree($localpath)
    {
        return $this->rmdirRecursive($localpath);
    }

    /**
     * Return fileinfo based on filename
     * For item ID based path file system
     * Please override if needed on each drivers
     *
     * @param  string $path file cache
     *
     * @return array|boolean false
     */
    protected function isNameExists($path)
    {
        $exists = file_exists($this->convEncIn($path));
        // restore locale
        $this->convEncOut();
        return $exists ? $this->stat($path) : false;
    }

    /******************** Over write (Optimized) functions *************************/

    /**
     * Recursive files search
     *
     * @param  string $path dir path
     * @param  string $q    search string
     * @param  array  $mimes
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     * @author Naoki Sawada
     */
    protected function doSearch($path, $q, $mimes)
    {
        if (!empty($this->doSearchCurrentQuery['matchMethod']) || $this->encoding || !class_exists('FilesystemIterator', false)) {
            // has custom match method or non UTF-8, use elFinderVolumeDriver::doSearch()
            return parent::doSearch($path, $q, $mimes);
        }

        $result = array();

        $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0;
        if ($timeout && $timeout < time()) {
            $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path)));
            return $result;
        }
        elFinder::extendTimeLimit($this->options['searchTimeout'] + 30);

        $match = array();
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveCallbackFilterIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::KEY_AS_PATHNAME |
                        FilesystemIterator::SKIP_DOTS |
                        ((defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') && $this->options['followSymLinks']) ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    ),
                    array($this, 'localFileSystemSearchIteratorFilter')
                ),
                RecursiveIteratorIterator::SELF_FIRST,
                RecursiveIteratorIterator::CATCH_GET_CHILD
            );
            foreach ($iterator as $key => $node) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($node->getPath)));
                    break;
                }
                if ($node->isDir()) {
                    if ($this->stripos($node->getFilename(), $q) !== false) {
                        $match[] = $key;
                    }
                } else {
                    $match[] = $key;
                }
            }
        } catch (Exception $e) {
        }

        if ($match) {
            foreach ($match as $p) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode(dirname($p))));
                    break;
                }

                $stat = $this->stat($p);

                if (!$stat) { // invalid links
                    continue;
                }

                if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) {
                    continue;
                }

                if ((!$mimes || $stat['mime'] !== 'directory')) {
                    $stat['path'] = $this->path($stat['hash']);
                    if ($this->URL && !isset($stat['url'])) {
                        $_path = str_replace(DIRECTORY_SEPARATOR, '/', substr($p, strlen($this->root) + 1));
                        $stat['url'] = $this->URL . str_replace('%2F', '/', rawurlencode($_path));
                    }

                    $result[] = $stat;
                }
            }
        }

        return $result;
    }

    /******************** Original local functions ************************
     *
     * @param $file
     * @param $key
     * @param $iterator
     *
     * @return bool
     */

    public function localFileSystemSearchIteratorFilter($file, $key, $iterator)
    {
        /* @var FilesystemIterator $file */
        /* @var RecursiveDirectoryIterator $iterator */
        $name = $file->getFilename();
        if ($this->doSearchCurrentQuery['excludes']) {
            foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) {
                if ($this->stripos($name, $exclude) !== false) {
                    return false;
                }
            }
        }
        if ($iterator->hasChildren()) {
            if ($this->options['searchExDirReg'] && preg_match($this->options['searchExDirReg'], $key)) {
                return false;
            }
            return (bool)$this->attr($key, 'read', null, true);
        }
        return ($this->stripos($name, $this->doSearchCurrentQuery['q']) === false) ? false : true;
    }

    /**
     * Creates a symbolic link
     *
     * @param      string   $target  The target
     * @param      string   $link    The link
     *
     * @return     boolean  ( result of symlink() )
     */
    protected function localFileSystemSymlink($target, $link)
    {
        $res = false;
        if (function_exists('symlink') and is_callable('symlink')) {
            $errlev = error_reporting();
            error_reporting($errlev ^ E_WARNING);
            if ($res = symlink(realpath($target), $link)) {
                $res = is_readable($link);
            }
            error_reporting($errlev);
        }
        return $res;
    }
} // END class PK      \g|}	  	  4  codeinwp/themeisle-sdk/src/Common/Module_factory.phpnu W+A        <?php
/**
 * The module factory class.
 *
 * @package     ThemeIsleSDK
 * @subpackage  Loader
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       3.0.0
 */

namespace ThemeisleSDK\Common;

use ThemeisleSDK\Product;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Class Job_Factory
 *
 * @package ThemeisleSDK\Common
 */
class Module_Factory {
	/**
	 * Partners slugs.
	 *
	 * @var array $SLUGS Partners product slugs.
	 */
	public static $slugs = [
		'zermatt'         => true,
		'neto'            => true,
		'olsen'           => true,
		'benson'          => true,
		'romero'          => true,
		'carmack'         => true,
		'puzzle'          => true,
		'broadsheet'      => true,
		'girlywp'         => true,
		'veggie'          => true,
		'zeko'            => true,
		'maishawp'        => true,
		'didi'            => true,
		'liber'           => true,
		'medicpress-pt'   => true,
		'adrenaline-pt'   => true,
		'consultpress-pt' => true,
		'legalpress-pt'   => true,
		'gympress-pt'     => true,
		'readable-pt'     => true,
		'bolts-pt'        => true,
	];
	/**
	 * Partners domains.
	 *
	 * @var array $DOMAINS Partners domains.
	 */
	public static $domains = [
		'proteusthemes.com',
		'anarieldesign.com',
		'prothemedesign.com',
		'cssigniter.com',
	];
	/**
	 * Map which contains all the modules loaded for each product.
	 *
	 * @var array Mapping array.
	 */
	private static $modules_attached = [];

	/**
	 * Load availabe modules for the selected product.
	 *
	 * @param Product $product Loaded product.
	 * @param array   $modules List of modules.
	 */
	public static function attach( $product, $modules ) {

		if ( ! isset( self::$modules_attached[ $product->get_slug() ] ) ) {
			self::$modules_attached[ $product->get_slug() ] = [];
		}

		foreach ( $modules as $module ) {
			$class = 'ThemeisleSDK\\Modules\\' . ucwords( $module, '_' );
			/**
			 * Module object.
			 *
			 * @var Abstract_Module $module_object Module instance.
			 */
			$module_object = new $class( $product );

			if ( ! $module_object->can_load( $product ) ) {
				continue;
			}
			self::$modules_attached[ $product->get_slug() ][ $module ] = $module_object->load( $product );
		}
	}

	/**
	 * Products/Modules loaded map.
	 *
	 * @return array Modules map.
	 */
	public static function get_modules_map() {
		return self::$modules_attached;
	}
}
PK      \.c    5  codeinwp/themeisle-sdk/src/Common/Abstract_module.phpnu W+A        <?php
/**
 * The abstract class for module definition.
 *
 * @package     ThemeIsleSDK
 * @subpackage  Loader
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       3.0.0
 */

namespace ThemeisleSDK\Common;

use ThemeisleSDK\Product;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Class Abstract_Module.
 *
 * @package ThemeisleSDK\Common
 */
abstract class Abstract_Module {
	/**
	 * Plugin paths.
	 *
	 * @var string[] $plugin_paths Plugin paths.
	 */
	private $plugin_paths = [
		'otter-blocks'                        => 'otter-blocks/otter-blocks.php',
		'optimole-wp'                         => 'optimole-wp/optimole-wp.php',
		'tweet-old-post'                      => 'tweet-old-post/tweet-old-post.php',
		'feedzy-rss-feeds'                    => 'feedzy-rss-feeds/feedzy-rss-feed.php',
		'woocommerce-product-addon'           => 'woocommerce-product-addon/woocommerce-product-addon.php',
		'visualizer'                          => 'visualizer/index.php',
		'wp-landing-kit'                      => 'wp-landing-kit/wp-landing-kit.php',
		'multiple-pages-generator-by-porthas' => 'multiple-pages-generator-by-porthas/porthas-multi-pages-generator.php',
		'sparks-for-woocommerce'              => 'sparks-for-woocommerce/sparks-for-woocommerce.php',
		'templates-patterns-collection'       => 'templates-patterns-collection/templates-patterns-collection.php',
	];

	/**
	 * Product which use the module.
	 *
	 * @var Product $product Product object.
	 */
	protected $product = null;

	/**
	 * Can load the module for the selected product.
	 *
	 * @param Product $product Product data.
	 *
	 * @return bool Should load module?
	 */
	abstract public function can_load( $product );

	/**
	 * Bootstrap the module.
	 *
	 * @param Product $product Product object.
	 */
	abstract public function load( $product );

	/**
	 * Check if the product is from partner.
	 *
	 * @param Product $product Product data.
	 *
	 * @return bool Is product from partner.
	 */
	public function is_from_partner( $product ) {
		foreach ( Module_Factory::$domains as $partner_domain ) {
			if ( strpos( $product->get_store_url(), $partner_domain ) !== false ) {
				return true;
			}
		}

		return array_key_exists( $product->get_slug(), Module_Factory::$slugs );
	}

	/**
	 * Wrapper for wp_remote_get on VIP environments.
	 *
	 * @param string $url Url to check.
	 * @param array  $args Option params.
	 *
	 * @return array|\WP_Error
	 */
	public function safe_get( $url, $args = array() ) {
		return function_exists( 'vip_safe_wp_remote_get' )
			? vip_safe_wp_remote_get( $url )
			: wp_remote_get( //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_remote_get_wp_remote_get, Already used.
				$url,
				$args
			);
	}

	/**
	 * Get the SDK base url.
	 *
	 * @return string
	 */
	public function get_sdk_uri() {
		global $themeisle_sdk_max_path;

		/**
		 * $themeisle_sdk_max_path can point to the theme when the theme version is higher.
		 * hence we also need to check that the path does not point to the theme else this will break the URL.
		 * References: https://github.com/Codeinwp/neve-pro-addon/issues/2403
		 */
		if ( $this->product->is_plugin() && false === strpos( $themeisle_sdk_max_path, get_template_directory() ) ) {
			return plugins_url( '/', $themeisle_sdk_max_path . '/themeisle-sdk/' );
		};

		return get_template_directory_uri() . '/vendor/codeinwp/themeisle-sdk/';
	}

	/**
	 * Call plugin api
	 *
	 * @param string $slug plugin slug.
	 *
	 * @return array|mixed|object
	 */
	public function call_plugin_api( $slug ) {
		include_once ABSPATH . 'wp-admin/includes/plugin-install.php';

		$call_api = get_transient( 'ti_plugin_info_' . $slug );

		if ( false === $call_api ) {
			$call_api = plugins_api(
				'plugin_information',
				array(
					'slug'   => $slug,
					'fields' => array(
						'downloaded'        => false,
						'rating'            => false,
						'description'       => false,
						'short_description' => true,
						'donate_link'       => false,
						'tags'              => false,
						'sections'          => true,
						'homepage'          => true,
						'added'             => false,
						'last_updated'      => false,
						'compatibility'     => false,
						'tested'            => false,
						'requires'          => false,
						'downloadlink'      => false,
						'icons'             => true,
						'banners'           => true,
					),
				)
			);
			set_transient( 'ti_plugin_info_' . $slug, $call_api, 30 * MINUTE_IN_SECONDS );
		}

		return $call_api;
	}

	/**
	 * Get the plugin status.
	 *
	 * @param string $plugin Plugin slug.
	 *
	 * @return bool
	 */
	public function is_plugin_installed( $plugin ) {
		if ( ! isset( $this->plugin_paths[ $plugin ] ) ) {
			return false;
		}

		if ( file_exists( WP_CONTENT_DIR . '/plugins/' . $this->plugin_paths[ $plugin ] ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Get plugin activation link.
	 *
	 * @param string $slug The plugin slug.
	 *
	 * @return string
	 */
	public function get_plugin_activation_link( $slug ) {
		$reference_key = $slug === 'otter-blocks' ? 'reference_key' : 'optimole_reference_key';
		$plugin        = isset( $this->plugin_paths[ $slug ] ) ? $this->plugin_paths[ $slug ] : $slug . '/' . $slug . '.php';

		return add_query_arg(
			array(
				'plugin_status' => 'all',
				'paged'         => '1',
				'action'        => 'activate',
				$reference_key  => $this->product->get_key(),
				'plugin'        => rawurlencode( $plugin ),
				'_wpnonce'      => wp_create_nonce( 'activate-plugin_' . $plugin ),
			),
			admin_url( 'plugins.php' )
		);
	}

	/**
	 * Checks if a plugin is active.
	 *
	 * @param string $plugin plugin slug.
	 *
	 * @return bool
	 */
	public function is_plugin_active( $plugin ) {
		include_once ABSPATH . 'wp-admin/includes/plugin.php';

		$plugin = isset( $this->plugin_paths[ $plugin ] ) ? $this->plugin_paths[ $plugin ] : $plugin . '/' . $plugin . '.php';

		return is_plugin_active( $plugin );
	}
}
PK      \%~      %  codeinwp/themeisle-sdk/src/Loader.phpnu W+A        <?php
/**
 * The main loader class for ThemeIsle SDK
 *
 * @package     ThemeIsleSDK
 * @subpackage  Loader
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-3.0.php GNU Public License
 * @since       1.0.0
 */

namespace ThemeisleSDK;

use ThemeisleSDK\Common\Module_Factory;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}


/**
 * Singleton loader for ThemeIsle SDK.
 */
final class Loader {
	/**
	 * Singleton instance.
	 *
	 * @var Loader instance The singleton instance
	 */
	private static $instance;
	/**
	 * Current loader version.
	 *
	 * @var string $version The class version.
	 */
	private static $version = '2.0.0';
	/**
	 * Holds registered products.
	 *
	 * @var array The products which use the SDK.
	 */
	private static $products = [];
	/**
	 * Holds available modules to load.
	 *
	 * @var array The modules which SDK will be using.
	 */
	private static $available_modules = [
		'dashboard_widget',
		'rollback',
		'uninstall_feedback',
		'licenser',
		'logger',
		'translate',
		'review',
		'recommendation',
		'notification',
		'promotions',
		'welcome',
		'compatibilities',
		'about_us',
	];

	/**
	 * Initialize the sdk logic.
	 */
	public static function init() {
		if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Loader ) ) {
			self::$instance = new Loader();
			$modules        = array_merge( self::$available_modules, apply_filters( 'themeisle_sdk_modules', [] ) );
			foreach ( $modules as $key => $module ) {
				if ( ! class_exists( 'ThemeisleSDK\\Modules\\' . ucwords( $module, '_' ) ) ) {
					unset( $modules[ $key ] );
				}
			}
			self::$available_modules = $modules;
		}
	}

	/**
	 * Get cache token used in API requests.
	 *
	 * @return string Cache token.
	 */
	public static function get_cache_token() {
		$cache_token = get_transient( 'themeisle_sdk_cache_token' );
		if ( false === $cache_token ) {
			$cache_token = wp_generate_password( 6, false );
			set_transient( $cache_token, WEEK_IN_SECONDS );
		}

		return $cache_token;
	}

	/**
	 * Clear cache token.
	 */
	public static function clear_cache_token() {
		delete_transient( 'themeisle_sdk_cache_token' );
	}

	/**
	 * Register product into SDK.
	 *
	 * @param string $base_file The product base file.
	 *
	 * @return Loader The singleton object.
	 */
	public static function add_product( $base_file ) {

		if ( ! is_file( $base_file ) ) {
			return self::$instance;
		}
		$product = new Product( $base_file );

		Module_Factory::attach( $product, self::get_modules() );

		self::$products[ $product->get_slug() ] = $product;

		return self::$instance;
	}

	/**
	 * Get all registered modules by the SDK.
	 *
	 * @return array Modules available.
	 */
	public static function get_modules() {
		return self::$available_modules;
	}

	/**
	 * Get all products using the SDK.
	 *
	 * @return array Products available.
	 */
	public static function get_products() {
		return self::$products;
	}

	/**
	 * Get the version of the SDK.
	 *
	 * @return string The version.
	 */
	public static function get_version() {
		return self::$version;
	}

}
PK      \60[mA  mA  #  codeinwp/themeisle-sdk/CHANGELOG.mdnu W+A        ##### [Version 3.3.11](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.10...v3.3.11) (2023-12-12)

- fix: cached requests for wp options
- fix: php notice on failed xml feed

##### [Version 3.3.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.9...v3.3.10) (2023-12-11)

feat: add new filter for tsdk_utmify query arguments

##### [Version 3.3.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.8...v3.3.9) (2023-11-16)

- Fix: a debugging error when you activate Neve Pro after installing Otter & Otter Pro without the license.

##### [Version 3.3.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.7...v3.3.8) (2023-11-14)

- Add Product Telemetry

##### [Version 3.3.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.6...v3.3.7) (2023-10-31)

- fix: deprecating notice in Dashboard Widget

##### [Version 3.3.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.5...v3.3.6) (2023-10-05)

- Fix duplicate notification in Neve FSE
- Fix SDK breaking Enfold theme builder

##### [Version 3.3.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.4...v3.3.5) (2023-09-29)

Fix TPC message.
Fix TPC typo.

##### [Version 3.3.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.3...v3.3.4) (2023-09-18)

- Allow users to activate plugins from the About page

##### [Version 3.3.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.2...v3.3.3) (2023-08-22)

- Disable install buttons on the About page if users can not install plugins

##### [Version 3.3.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.1...v3.3.2) (2023-08-02)

- Added a new product page for Otter

##### [Version 3.3.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.3.0...v3.3.1) (2023-06-21)

- Fix Neve FSE promo typo

#### [Version 3.3.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.41...v3.3.0) (2023-05-30)

- Adds About Page Integration
- Adds promos for Neve FSE, Sparks & PPOM

##### [Version 3.2.41](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.40...v3.2.41) (2023-05-10)

- Delay product recommendation mentions
- Allow upselling notifications for new users

##### [Version 3.2.40](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.39...v3.2.40) (2023-03-30)

- Add ROP upsell to all products

##### [Version 3.2.39](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.38...v3.2.39) (2023-03-17)

* Adds direct utility function for a direct support link.

##### [Version 3.2.38](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.37...v3.2.38) (2023-03-10)

Fix promotions path-breaking

##### [Version 3.2.37](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.36...v3.2.37) (2023-03-01)

Fix array casting

##### [Version 3.2.36](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.35...v3.2.36) (2023-03-01)

fix perfomance issues on attachments count https://github.com/Codeinwp/themeisle-sdk/issues/159

##### [Version 3.2.35](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.34...v3.2.35) (2023-02-22)

Added Codeinwp and wpshout feeds to dashboard widget

##### [Version 3.2.34](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.33...v3.2.34) (2023-01-31)

Improve promotions

##### [Version 3.2.33](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.32...v3.2.33) (2023-01-30)

* Adds PHP 8.2 compatibility
* Update promotions

##### [Version 3.2.32](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.31...v3.2.32) (2022-11-30)

Release

##### [Version 3.2.31](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.30...v3.2.31) (2022-11-23)

- improve the promotions module

##### [Version 3.2.30](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.29...v3.2.30) (2022-09-15)

- fix filesystem wrong use - ref [#138](https://github.com/Codeinwp/themeisle-sdk/issues/138), props [@ethanclevenger91](https://github.com/ethanclevenger91) for reporting

##### [Version 3.2.29](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.28...v3.2.29) (2022-09-08)

* Adds compatibility mechanism
* Adds content utms
* Adds usage time on uninstall feedback

##### [Version 3.2.28](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.27...v3.2.28) (2022-08-30)

* Adds utm handler
* Improve promotions

##### [Version 3.2.27](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.26...v3.2.27) (2022-08-23)

- Add Promotion Module
Add the Promotion module for free plugins

##### [Version 3.2.26](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.25...v3.2.26) (2022-05-12)

- [Fix] Solve rollback sometimes not available

##### [Version 3.2.25](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.24...v3.2.25) (2022-03-28)

- Force update request after rollback

##### [Version 3.2.24](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.23...v3.2.24) (2022-02-09)

Fix edge case issue on dismiss
Avoid issues with open_basedir restrictions

##### [Version 3.2.23](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.22...v3.2.23) (2022-02-02)

Fix php 8.1 issues
Fix edge case when update_themes site transient was empty and a fatal error was thrown

##### [Version 3.2.22](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.21...v3.2.22) (2021-10-27)

Fix edge case when reset failed checks was not working properly

##### [Version 3.2.21](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.20...v3.2.21) (2021-06-30)

review and improve compatibility with auto-updates on custom updates endpoint

##### [Version 3.2.20](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.19...v3.2.20) (2021-03-30)

add wp-config support

##### [Version 3.2.19](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.18...v3.2.19) (2021-03-12)

* Adds compatibility with latest PHPCS coding standards.
* Adds compatibility with core auto-update.

##### [Version 3.2.18](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.17...v3.2.18) (2021-03-04)

* Fix regression on rollback order

##### [Version 3.2.17](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.16...v3.2.17) (2021-03-04)

* Fix compatibility with PHP 8 due to usort

##### [Version 3.2.16](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.15...v3.2.16) (2020-11-17)

* Fix long texts on rollback.
* Fix RTL mode for uninstall feedback.

##### [Version 3.2.15](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.14...v3.2.15) (2020-07-23)

* remove no redundant module

##### [Version 3.2.14](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.13...v3.2.14) (2020-06-10)

> Things are getting better every day. 🚀

##### [Version 3.2.13](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.12...v3.2.13) (2020-06-10)

Adds plan logic and expiration

##### [Version 3.2.12](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.11...v3.2.12) (2020-06-10)

Adds key filter

##### [Version 3.2.11](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.10...v3.2.11) (2020-06-04)

* remove non-printable chars

##### [Version 3.2.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.9...v3.2.10) (2020-05-28)

* Remove extra files on export

##### [Version 3.2.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.8...v3.2.9) (2020-05-18)

adds new endpoints

##### [Version 3.2.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.7...v3.2.8) (2020-03-24)

* change license handler method access

##### [Version 3.2.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.6...v3.2.7) (2020-03-24)

* fix callback for license processing hook

##### [Version 3.2.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.5...v3.2.6) (2020-03-23)

* Fix notice on license deactivation

##### [Version 3.2.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.4...v3.2.5) (2020-03-23)

* always load notification manager last

##### [Version 3.2.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.3...v3.2.4) (2020-03-21)

* Cast version response to array for icons

##### [Version 3.2.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.2...v3.2.3) (2020-03-21)

* use product slug instead of the one from api

##### [Version 3.2.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.1...v3.2.2) (2020-03-13)

* improve notice dismiss mechanism

##### [Version 3.2.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.0...v3.2.1) (2020-03-05)

Fix rollback call for private products

#### [Version 3.2.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.9...v3.2.0) (2020-03-04)

* adds license activation/deactivation handlers for wp cli
* adds compatibility with the newest license API

##### [Version 3.1.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.8...v3.1.9) (2020-02-24)

* Add integration with GitHub actions

## [3.1.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.7...v3.1.8) (2019-11-18)


### Bug Fixes

* update developers name ([6aca63e](https://github.com/Codeinwp/themeisle-sdk/commit/6aca63e))

## [3.1.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.6...v3.1.7) (2019-11-07)


### Bug Fixes

* license field style on wp5.3 ([0239997](https://github.com/Codeinwp/themeisle-sdk/commit/0239997))
* license field style on wp5.3 ([86d3a1b](https://github.com/Codeinwp/themeisle-sdk/commit/86d3a1b))

## [3.1.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.5...v3.1.6) (2019-09-24)


### Bug Fixes

* remove license related options when deactivated ([02cd6ce](https://github.com/Codeinwp/themeisle-sdk/commit/02cd6ce))
* remove license related options when deactivated ([d3c1a1f](https://github.com/Codeinwp/themeisle-sdk/commit/d3c1a1f))

## [3.1.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.4...v3.1.5) (2019-09-11)


### Bug Fixes

* allow unloading certain module features ([2a2559a](https://github.com/Codeinwp/themeisle-sdk/commit/2a2559a))
* license activation workflow, show error message when failed to a… ([ade795c](https://github.com/Codeinwp/themeisle-sdk/commit/ade795c))
* license activation workflow, show error message when failed to activate ([2f5cbae](https://github.com/Codeinwp/themeisle-sdk/commit/2f5cbae))

## [3.1.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.3...v3.1.4) (2019-08-23)


### Bug Fixes

* license key was missing on get_version call ([365cde6](https://github.com/Codeinwp/themeisle-sdk/commit/365cde6))
* license key was missing on get_version call ([c02f225](https://github.com/Codeinwp/themeisle-sdk/commit/c02f225))

## [3.1.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.2...v3.1.3) (2019-08-20)


### Bug Fixes

* license deactivation behaviour https://github.com/Codeinwp/visua… ([59c4afe](https://github.com/Codeinwp/themeisle-sdk/commit/59c4afe))
* license deactivation behaviour https://github.com/Codeinwp/visualizer-pro/issues/192 ([f641e18](https://github.com/Codeinwp/themeisle-sdk/commit/f641e18))

## [3.1.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.1...v3.1.2) (2019-08-12)


### Bug Fixes

* phpunit test case ([efe851c](https://github.com/Codeinwp/themeisle-sdk/commit/efe851c))
* url format for license endpoint, improve changelog handling and license checks ([a492c68](https://github.com/Codeinwp/themeisle-sdk/commit/a492c68))

## [3.1.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.0...v3.1.1) (2019-08-08)


### Bug Fixes

* adds is_file for file existence check ([d1205c4](https://github.com/Codeinwp/themeisle-sdk/commit/d1205c4))
* adds is_file for file existence check ([be119c1](https://github.com/Codeinwp/themeisle-sdk/commit/be119c1))

# [3.1.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.10...v3.1.0) (2019-08-05)


### Bug Fixes

* adds extra comments for rest of the options, fix [#64](https://github.com/Codeinwp/themeisle-sdk/issues/64) ([018b22f](https://github.com/Codeinwp/themeisle-sdk/commit/018b22f))
* hide license key when active under a password mask, fix [#67](https://github.com/Codeinwp/themeisle-sdk/issues/67) ([c0633c2](https://github.com/Codeinwp/themeisle-sdk/commit/c0633c2))
* new uninstall feedback popup issues ([5bda4bd](https://github.com/Codeinwp/themeisle-sdk/commit/5bda4bd))
* phpcs indentation errors ([d59ed4f](https://github.com/Codeinwp/themeisle-sdk/commit/d59ed4f))
* undefined notices on license check, fix [#60](https://github.com/Codeinwp/themeisle-sdk/issues/60) ([7f56a97](https://github.com/Codeinwp/themeisle-sdk/commit/7f56a97))
* uninstall feedback popup placement [[#61](https://github.com/Codeinwp/themeisle-sdk/issues/61)] ([1102d6c](https://github.com/Codeinwp/themeisle-sdk/commit/1102d6c))


### Features

* new product feedback popup ([f0dbab3](https://github.com/Codeinwp/themeisle-sdk/commit/f0dbab3))
* new uninstall feedback form for themes ([8a29f21](https://github.com/Codeinwp/themeisle-sdk/commit/8a29f21))

## [3.0.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.9...v3.0.10) (2019-07-16)


### Bug Fixes

* compatibility with lower PHP versions ([065ac8e](https://github.com/Codeinwp/themeisle-sdk/commit/065ac8e))
* not loading licenser when SDK comes from theme [[#62](https://github.com/Codeinwp/themeisle-sdk/issues/62)] ([b706ca7](https://github.com/Codeinwp/themeisle-sdk/commit/b706ca7))
* not loading licenser when SDK comes from theme [[#65](https://github.com/Codeinwp/themeisle-sdk/issues/65) ([419d8e6](https://github.com/Codeinwp/themeisle-sdk/commit/419d8e6))
* preserve loaded when adding the licenser one ([cd50434](https://github.com/Codeinwp/themeisle-sdk/commit/cd50434))

## [3.0.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.8...v3.0.9) (2019-06-26)


### Bug Fixes

* adds new icon for dashboard widget ([de78068](https://github.com/Codeinwp/themeisle-sdk/commit/de78068))
* anchor element on license activation message which should link to the license field, fix [#57](https://github.com/Codeinwp/themeisle-sdk/issues/57) ([2e78856](https://github.com/Codeinwp/themeisle-sdk/commit/2e78856))
* change uninstall feedback logo with new version, fix [#58](https://github.com/Codeinwp/themeisle-sdk/issues/58) ([2554a4f](https://github.com/Codeinwp/themeisle-sdk/commit/2554a4f))
* remove soon to expire notice, fix https://github.com/Codeinwp/themeisle/issues/752 ([a126225](https://github.com/Codeinwp/themeisle-sdk/commit/a126225))

## [3.0.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.7...v3.0.8) (2019-05-28)


### Bug Fixes

* undefined class on diff module which should check the class on global namespace ([df6bb12](https://github.com/Codeinwp/themeisle-sdk/commit/df6bb12))

## [3.0.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.6...v3.0.7) (2019-05-27)


### Bug Fixes

* change store url with the new domain ([6bdbe1e](https://github.com/Codeinwp/themeisle-sdk/commit/6bdbe1e))

## [3.0.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.5...v3.0.6) (2019-05-21)


### Bug Fixes

* build php version for deployment stage ([a785699](https://github.com/Codeinwp/themeisle-sdk/commit/a785699))
* uninstall feedback should load only on the proper pages ([259e78f](https://github.com/Codeinwp/themeisle-sdk/commit/259e78f))

## [3.0.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.4...v3.0.5) (2019-03-07)


### Bug Fixes

* dashboard widget issues and recommended module inconsistency fix [#50](https://github.com/Codeinwp/themeisle-sdk/issues/50), [#49](https://github.com/Codeinwp/themeisle-sdk/issues/49), [#47](https://github.com/Codeinwp/themeisle-sdk/issues/47) ([757eb02](https://github.com/Codeinwp/themeisle-sdk/commit/757eb02))

## [3.0.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.3...v3.0.4) (2019-01-28)


### Bug Fixes

* uninstall feedback disclosure issues when one of the feedback fields is open ([4631eef](https://github.com/Codeinwp/themeisle-sdk/commit/4631eef))

## [3.0.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.2...v3.0.3) (2019-01-07)


### Bug Fixes

* **build:** fix exit code when is running outside wordpress context ([d298bb5](https://github.com/Codeinwp/themeisle-sdk/commit/d298bb5))

## [3.0.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.1...v3.0.2) (2018-12-28)


### Bug Fixes

* remove composer/installers from package requirements ([a0ad543](https://github.com/Codeinwp/themeisle-sdk/commit/a0ad543))

## [3.0.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.0...v3.0.1) (2018-12-24)


### Bug Fixes

* notifications setup triggers after all products register their n… ([999a944](https://github.com/Codeinwp/themeisle-sdk/commit/999a944))
* notifications setup triggers after all products register their notices ([ec3cacc](https://github.com/Codeinwp/themeisle-sdk/commit/ec3cacc))

# 1.0.0 (2018-12-21)


### Features

* adds uninstall feedback privacy policy info ([ed17943](https://github.com/Codeinwp/themeisle-sdk/commit/ed17943))
PK      \i       codeinwp/themeisle-sdk/start.phpnu W+A        <?php
/**
 * File responsible for sdk files loading.
 *
 * @package     ThemeIsleSDK
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 * @since       1.1.0
 */

namespace ThemeisleSDK;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}
$products               = apply_filters( 'themeisle_sdk_products', array() );
$themeisle_library_path = dirname( __FILE__ );
$files_to_load          = [
	$themeisle_library_path . '/src/Loader.php',
	$themeisle_library_path . '/src/Product.php',

	$themeisle_library_path . '/src/Common/Abstract_module.php',
	$themeisle_library_path . '/src/Common/Module_factory.php',

	$themeisle_library_path . '/src/Modules/Dashboard_widget.php',
	$themeisle_library_path . '/src/Modules/Rollback.php',
	$themeisle_library_path . '/src/Modules/Uninstall_feedback.php',
	$themeisle_library_path . '/src/Modules/Licenser.php',
	$themeisle_library_path . '/src/Modules/Endpoint.php',
	$themeisle_library_path . '/src/Modules/Notification.php',
	$themeisle_library_path . '/src/Modules/Logger.php',
	$themeisle_library_path . '/src/Modules/Translate.php',
	$themeisle_library_path . '/src/Modules/Review.php',
	$themeisle_library_path . '/src/Modules/Recommendation.php',
	$themeisle_library_path . '/src/Modules/Promotions.php',
	$themeisle_library_path . '/src/Modules/Welcome.php',
	$themeisle_library_path . '/src/Modules/Compatibilities.php',
	$themeisle_library_path . '/src/Modules/About_us.php',
];

$files_to_load = array_merge( $files_to_load, apply_filters( 'themeisle_sdk_required_files', [] ) );

foreach ( $files_to_load as $file ) {
	if ( is_file( $file ) ) {
		require_once $file;
	}
}
Loader::init();

foreach ( $products as $product ) {
	Loader::add_product( $product );
}
PK      \$B    >  codeinwp/themeisle-sdk/elFinderVolumeLocalFileSystem.class.phpnu W+A        <?php

// Implement similar functionality in PHP 5.2 or 5.3
// http://php.net/manual/class.recursivecallbackfilteriterator.php#110974
if (!class_exists('RecursiveCallbackFilterIterator', false)) {
    class RecursiveCallbackFilterIterator extends RecursiveFilterIterator
    {
        private $callback;

        public function __construct(RecursiveIterator $iterator, $callback)
        {
            $this->callback = $callback;
            parent::__construct($iterator);
        }

        public function accept()
        {
            return call_user_func($this->callback, parent::current(), parent::key(), parent::getInnerIterator());
        }

        public function getChildren()
        {
            return new self($this->getInnerIterator()->getChildren(), $this->callback);
        }
    }
}

/**
 * elFinder driver for local filesystem.
 *
 * @author Dmitry (dio) Levashov
 * @author Troex Nevelin
 **/
class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver
{

    /**
     * Driver id
     * Must be started from letter and contains [a-z0-9]
     * Used as part of volume id
     *
     * @var string
     **/
    protected $driverId = 'l';

    /**
     * Required to count total archive files size
     *
     * @var int
     **/
    protected $archiveSize = 0;

    /**
     * Is checking stat owner
     *
     * @var        boolean
     */
    protected $statOwner = false;

    /**
     * Path to quarantine directory
     *
     * @var string
     */
    private $quarantine;

    /**
     * Constructor
     * Extend options with required fields
     *
     * @author Dmitry (dio) Levashov
     */
    public function __construct()
    {
        $this->options['alias'] = '';              // alias to replace root dir name
        $this->options['dirMode'] = 0755;            // new dirs mode
        $this->options['fileMode'] = 0644;            // new files mode
        $this->options['rootCssClass'] = 'elfinder-navbar-root-local';
        $this->options['followSymLinks'] = true;
        $this->options['detectDirIcon'] = '';         // file name that is detected as a folder icon e.g. '.diricon.png'
        $this->options['keepTimestamp'] = array('copy', 'move'); // keep timestamp at inner filesystem allowed 'copy', 'move' and 'upload'
        $this->options['substituteImg'] = true;       // support substitute image with dim command
        $this->options['statCorrector'] = null;       // callable to correct stat data `function(&$stat, $path, $statOwner, $volumeDriveInstance){}`
        if (DIRECTORY_SEPARATOR === '/') {
            // Linux
            $this->options['acceptedName'] = '/^[^\.\/\x00][^\/\x00]*$/';
        } else {
            // Windows
            $this->options['acceptedName'] = '/^[^\.\/\x00\\\:*?"<>|][^\/\x00\\\:*?"<>|]*$/';
        }
    }

    /*********************************************************************/
    /*                        INIT AND CONFIGURE                         */
    /*********************************************************************/

    /**
     * Prepare driver before mount volume.
     * Return true if volume is ready.
     *
     * @return bool
     **/
    protected function init()
    {
        // Normalize directory separator for windows
        if (DIRECTORY_SEPARATOR !== '/') {
            foreach (array('path', 'tmbPath', 'tmpPath', 'quarantine') as $key) {
                if (!empty($this->options[$key])) {
                    $this->options[$key] = str_replace('/', DIRECTORY_SEPARATOR, $this->options[$key]);
                }
            }
            // PHP >= 7.1 Supports UTF-8 path on Windows
            if (version_compare(PHP_VERSION, '7.1', '>=')) {
                $this->options['encoding'] = '';
                $this->options['locale'] = '';
            }
        }
        if (!$cwd = getcwd()) {
            return $this->setError('elFinder LocalVolumeDriver requires a result of getcwd().');
        }
        // detect systemRoot
        if (!isset($this->options['systemRoot'])) {
            if ($cwd[0] === DIRECTORY_SEPARATOR || $this->root[0] === DIRECTORY_SEPARATOR) {
                $this->systemRoot = DIRECTORY_SEPARATOR;
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $this->root, $m)) {
                $this->systemRoot = $m[1];
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $cwd, $m)) {
                $this->systemRoot = $m[1];
            }
        }
        $this->root = $this->getFullPath($this->root, $cwd);
        if (!empty($this->options['startPath'])) {
            $this->options['startPath'] = $this->getFullPath($this->options['startPath'], $this->root);
        }

        if (is_null($this->options['syncChkAsTs'])) {
            $this->options['syncChkAsTs'] = true;
        }
        if (is_null($this->options['syncCheckFunc'])) {
            $this->options['syncCheckFunc'] = array($this, 'localFileSystemInotify');
        }
        // check 'statCorrector'
        if (empty($this->options['statCorrector']) || !is_callable($this->options['statCorrector'])) {
            $this->options['statCorrector'] = null;
        }

        return true;
    }

    /**
     * Configure after successfull mount.
     *
     * @return void
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function configure()
    {
        $hiddens = array();
        $root = $this->stat($this->root);

        // check thumbnails path
        if (!empty($this->options['tmbPath'])) {
            if (strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['tmb'] = $this->options['tmbPath'];
                $this->options['tmbPath'] = $this->_abspath($this->options['tmbPath']);
            } else {
                $this->options['tmbPath'] = $this->_normpath($this->options['tmbPath']);
            }
        }
        // check temp path
        if (!empty($this->options['tmpPath'])) {
            if (strpos($this->options['tmpPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['temp'] = $this->options['tmpPath'];
                $this->options['tmpPath'] = $this->_abspath($this->options['tmpPath']);
            } else {
                $this->options['tmpPath'] = $this->_normpath($this->options['tmpPath']);
            }
        }
        // check quarantine path
        $_quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if (strpos($this->options['quarantine'], DIRECTORY_SEPARATOR) === false) {
                $_quarantine = $this->_abspath($this->options['quarantine']);
                $this->options['quarantine'] = '';
            } else {
                $this->options['quarantine'] = $this->_normpath($this->options['quarantine']);
            }
        } else {
            $_quarantine = $this->_abspath('.quarantine');
        }
        is_dir($_quarantine) && self::localRmdirRecursive($_quarantine);

        parent::configure();

        // check tmbPath
        if (!$this->tmbPath && isset($hiddens['tmb'])) {
            unset($hiddens['tmb']);
        }

        // if no thumbnails url - try detect it
        if ($root['read'] && !$this->tmbURL && $this->URL) {
            if (strpos($this->tmbPath, $this->root) === 0) {
                $this->tmbURL = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root) + 1));
                if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
                    $this->tmbURL .= '/';
                }
            }
        }

        // set $this->tmp by options['tmpPath']
        $this->tmp = '';
        if (!empty($this->options['tmpPath'])) {
            if ((is_dir($this->options['tmpPath']) || mkdir($this->options['tmpPath'], $this->options['dirMode'], true)) && is_writable($this->options['tmpPath'])) {
                $this->tmp = $this->options['tmpPath'];
            } else {
                if (isset($hiddens['temp'])) {
                    unset($hiddens['temp']);
                }
            }
        }
        if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
            $this->tmp = $tmp;
        }

        // check quarantine dir
        $this->quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if ((is_dir($this->options['quarantine']) || mkdir($this->options['quarantine'], $this->options['dirMode'], true)) && is_writable($this->options['quarantine'])) {
                $this->quarantine = $this->options['quarantine'];
            } else {
                if (isset($hiddens['quarantine'])) {
                    unset($hiddens['quarantine']);
                }
            }
        } else if ($_path = elFinder::getCommonTempPath()) {
            $this->quarantine = $_path;
        }

        if (!$this->quarantine) {
            if (!$this->tmp) {
                $this->archivers['extract'] = array();
                $this->disabled[] = 'extract';
            } else {
                $this->quarantine = $this->tmp;
            }
        }

        if ($hiddens) {
            foreach ($hiddens as $hidden) {
                $this->attributes[] = array(
                    'pattern' => '~^' . preg_quote(DIRECTORY_SEPARATOR . $hidden, '~') . '$~',
                    'read' => false,
                    'write' => false,
                    'locked' => true,
                    'hidden' => true
                );
            }
        }

        if (!empty($this->options['keepTimestamp'])) {
            $this->options['keepTimestamp'] = array_flip($this->options['keepTimestamp']);
        }

        $this->statOwner = (!empty($this->options['statOwner']));

        // enable WinRemoveTailDots plugin on Windows server
        if (DIRECTORY_SEPARATOR !== '/') {
            if (!isset($this->options['plugin'])) {
                $this->options['plugin'] = array();
            }
            $this->options['plugin']['WinRemoveTailDots'] = array('enable' => true);
        }
    }

    /**
     * Long pooling sync checker
     * This function require server command `inotifywait`
     * If `inotifywait` need full path, Please add `define('ELFINER_INOTIFYWAIT_PATH', '/PATH_TO/inotifywait');` into connector.php
     *
     * @param string $path
     * @param int    $standby
     * @param number $compare
     *
     * @return number|bool
     * @throws elFinderAbortException
     */
    public function localFileSystemInotify($path, $standby, $compare)
    {
        if (isset($this->sessionCache['localFileSystemInotify_disable'])) {
            return false;
        }
        $path = realpath($path);
        $mtime = filemtime($path);
        if (!$mtime) {
            return false;
        }
        if ($mtime != $compare) {
            return $mtime;
        }
        $inotifywait = defined('ELFINER_INOTIFYWAIT_PATH') ? ELFINER_INOTIFYWAIT_PATH : 'inotifywait';
        $standby = max(1, intval($standby));
        $cmd = $inotifywait . ' ' . escapeshellarg($path) . ' -t ' . $standby . ' -e moved_to,moved_from,move,close_write,delete,delete_self';
        $this->procExec($cmd, $o, $r);
        if ($r === 0) {
            // changed
            clearstatcache();
            if (file_exists($path)) {
                $mtime = filemtime($path); // error on busy?
                return $mtime ? $mtime : time();
            } else {
                // target was removed
                return 0;
            }
        } else if ($r === 2) {
            // not changed (timeout)
            return $compare;
        }
        // error
        // cache to $_SESSION
        $this->sessionCache['localFileSystemInotify_disable'] = true;
        $this->session->set($this->id, $this->sessionCache);
        return false;
    }

    /*********************************************************************/
    /*                               FS API                              */
    /*********************************************************************/

    /*********************** paths/urls *************************/

    /**
     * Return parent directory path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dirname($path)
    {
        return dirname($path);
    }

    /**
     * Return file name
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _basename($path)
    {
        return basename($path);
    }

    /**
     * Join dir name and file name and retur full path
     *
     * @param  string $dir
     * @param  string $name
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _joinPath($dir, $name)
    {
        $dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $path = realpath($dir . DIRECTORY_SEPARATOR . $name);
        // realpath() returns FALSE if the file does not exist
        if ($path === false || strpos($path, $this->root) !== 0) {
            if (DIRECTORY_SEPARATOR !== '/') {
                $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
                $name = str_replace('/', DIRECTORY_SEPARATOR, $name);
            }
            // Directory traversal measures
            if (strpos($dir, '..' . DIRECTORY_SEPARATOR) !== false || substr($dir, -2) == '..') {
                $dir = $this->root;
            }
            if (strpos($name, '..' . DIRECTORY_SEPARATOR) !== false) {
                $name = basename($name);
            }
            $path = $dir . DIRECTORY_SEPARATOR . $name;
        }
        return $path; 
    }

    /**
     * Return normalized path, this works the same as os.path.normpath() in Python
     *
     * @param  string $path path
     *
     * @return string
     * @author Troex Nevelin
     **/
    protected function _normpath($path)
    {
        if (empty($path)) {
            return '.';
        }

        $changeSep = (DIRECTORY_SEPARATOR !== '/');
        if ($changeSep) {
            $drive = '';
            if (preg_match('/^([a-zA-Z]:)(.*)/', $path, $m)) {
                $drive = $m[1];
                $path = $m[2] ? $m[2] : '/';
            }
            $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
        }

        if (strpos($path, '/') === 0) {
            $initial_slashes = true;
        } else {
            $initial_slashes = false;
        }

        if (($initial_slashes)
            && (strpos($path, '//') === 0)
            && (strpos($path, '///') === false)) {
            $initial_slashes = 2;
        }

        $initial_slashes = (int)$initial_slashes;

        $comps = explode('/', $path);
        $new_comps = array();
        foreach ($comps as $comp) {
            if (in_array($comp, array('', '.'))) {
                continue;
            }

            if (($comp != '..')
                || (!$initial_slashes && !$new_comps)
                || ($new_comps && (end($new_comps) == '..'))) {
                array_push($new_comps, $comp);
            } elseif ($new_comps) {
                array_pop($new_comps);
            }
        }
        $comps = $new_comps;
        $path = implode('/', $comps);
        if ($initial_slashes) {
            $path = str_repeat('/', $initial_slashes) . $path;
        }

        if ($changeSep) {
            $path = $drive . str_replace('/', DIRECTORY_SEPARATOR, $path);
        }

        return $path ? $path : '.';
    }

    /**
     * Return file path related to root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _relpath($path)
    {
        if ($path === $this->root) {
            return '';
        } else {
            if (strpos($path, $this->root) === 0) {
                return ltrim(substr($path, strlen($this->root)), DIRECTORY_SEPARATOR);
            } else {
                // for link
                return $path;
            }
        }
    }

    /**
     * Convert path related to root dir into real path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _abspath($path)
    {
        if ($path === DIRECTORY_SEPARATOR) {
            return $this->root;
        } else {
            $path = $this->_normpath($path);
            if (strpos($path, $this->systemRoot) === 0) {
                return $path;
            } else if (DIRECTORY_SEPARATOR !== '/' && preg_match('/^[a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . '/', $path)) {
                return $path;
            } else {
                return $this->_joinPath($this->root, $path);
            }
        }
    }

    /**
     * Return fake path started from root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _path($path)
    {
        return $this->rootName . ($path == $this->root ? '' : $this->separator . $this->_relpath($path));
    }

    /**
     * Return true if $path is children of $parent
     *
     * @param  string $path   path to check
     * @param  string $parent parent path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _inpath($path, $parent)
    {
        $cwd = getcwd();
        $real_path = $this->getFullPath($path, $cwd);
        $real_parent = $this->getFullPath($parent, $cwd);
        if ($real_path && $real_parent) {
            return $real_path === $real_parent || strpos($real_path, rtrim($real_parent, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR) === 0;
        }
        return false;
    }



    /***************** file stat ********************/

    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     * If file does not exists - returns empty array or false.
     *
     * @param  string $path file path
     *
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        $stat = array();

        if (!file_exists($path) && !is_link($path)) {
            return $stat;
        }

        //Verifies the given path is the root or is inside the root. Prevents directory traveral.
        if (!$this->_inpath($path, $this->root)) {
            return $stat;
        }

        $stat['isowner'] = false;
        $linkreadable = false;
        if ($path != $this->root && is_link($path)) {
            if (!$this->options['followSymLinks']) {
                return array();
            }
            if (!($target = $this->readlink($path))
                || $target == $path) {
                if (is_null($target)) {
                    $stat = array();
                    return $stat;
                } else {
                    $stat['mime'] = 'symlink-broken';
                    $target = readlink($path);
                    $lstat = lstat($path);
                    $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                    $linkreadable = !empty($ostat['isowner']);
                }
            }
            $stat['alias'] = $this->_path($target);
            $stat['target'] = $target;
        }

        $readable = is_readable($path);

        if ($readable) {
            $size = sprintf('%u', filesize($path));
            $stat['ts'] = filemtime($path);
            if ($this->statOwner) {
                $fstat = stat($path);
                $uid = $fstat['uid'];
                $gid = $fstat['gid'];
                $stat['perm'] = substr((string)decoct($fstat['mode']), -4);
                $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
            }
        }

        if (($dir = is_dir($path)) && $this->options['detectDirIcon']) {
            $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
            if ($this->URL && file_exists($favicon)) {
                $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
            }
        }

        if (!isset($stat['mime'])) {
            $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
        }
        //logical rights first
        $stat['read'] = ($linkreadable || $readable) ? null : false;
        $stat['write'] = is_writable($path) ? null : false;

        if (is_null($stat['read'])) {
            if ($dir) {
                $stat['size'] = 0;
            } else if (isset($size)) {
                $stat['size'] = $size;
            }
        }

        if ($this->options['statCorrector']) {
            call_user_func_array($this->options['statCorrector'], array(&$stat, $path, $this->statOwner, $this));
        }

        return $stat;
    }

    /**
     * Get stat `owner`, `group` and `isowner` by `uid` and `gid`
     * Sub-fuction of _stat() and _scandir()
     *
     * @param integer $uid
     * @param integer $gid
     *
     * @return array  stat
     */
    protected function getOwnerStat($uid, $gid)
    {
        static $names = null;
        static $phpuid = null;

        if (is_null($names)) {
            $names = array('uid' => array(), 'gid' => array());
        }
        if (is_null($phpuid)) {
            if (is_callable('posix_getuid')) {
                $phpuid = posix_getuid();
            } else {
                $phpuid = 0;
            }
        }

        $stat = array();

        if ($uid) {
            $stat['isowner'] = ($phpuid == $uid);
            if (isset($names['uid'][$uid])) {
                $stat['owner'] = $names['uid'][$uid];
            } else if (is_callable('posix_getpwuid')) {
                $pwuid = posix_getpwuid($uid);
                $stat['owner'] = $names['uid'][$uid] = $pwuid['name'];
            } else {
                $stat['owner'] = $names['uid'][$uid] = $uid;
            }
        }
        if ($gid) {
            if (isset($names['gid'][$gid])) {
                $stat['group'] = $names['gid'][$gid];
            } else if (is_callable('posix_getgrgid')) {
                $grgid = posix_getgrgid($gid);
                $stat['group'] = $names['gid'][$gid] = $grgid['name'];
            } else {
                $stat['group'] = $names['gid'][$gid] = $gid;
            }
        }

        return $stat;
    }

    /**
     * Return true if path is dir and has at least one childs directory
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _subdirs($path)
    {

        $dirs = false;
        if (is_dir($path) && is_readable($path)) {
            if (class_exists('FilesystemIterator', false)) {
                $dirItr = new ParentIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::SKIP_DOTS |
                        FilesystemIterator::CURRENT_AS_SELF |
                        (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    )
                );
                $dirItr->rewind();
                if ($dirItr->hasChildren()) {
                    $dirs = true;
                    $name = $dirItr->getSubPathName();
                    while ($dirItr->valid()) {
                        if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
                            $dirs = false;
                            $dirItr->next();
                            $name = $dirItr->getSubPathName();
                            continue;
                        }
                        $dirs = true;
                        break;
                    }
                }
            } else {
                $path = strtr($path, array('[' => '\\[', ']' => '\\]', '*' => '\\*', '?' => '\\?'));
                return (bool)glob(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
            }
        }
        return $dirs;
    }

    /**
     * Return object width and height
     * Usualy used for images, but can be realize for video etc...
     *
     * @param  string $path file path
     * @param  string $mime file mime type
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dimensions($path, $mime)
    {
        clearstatcache();
        return strpos($mime, 'image') === 0 && is_readable($path) && filesize($path) && ($s = getimagesize($path)) !== false
            ? $s[0] . 'x' . $s[1]
            : false;
    }
    /******************** file/dir content *********************/

    /**
     * Return symlink target file
     *
     * @param  string $path link path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function readlink($path)
    {
        if (!($target = readlink($path))) {
            return null;
        }

        if (strpos($target, $this->systemRoot) !== 0) {
            $target = $this->_joinPath(dirname($path), $target);
        }

        if (!file_exists($target)) {
            return false;
        }

        return $target;
    }

    /**
     * Return files list in directory.
     *
     * @param  string $path dir path
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function _scandir($path)
    {
        elFinder::checkAborted();
        $files = array();
        $cache = array();
        $dirWritable = is_writable($path);
        $dirItr = array();
        $followSymLinks = $this->options['followSymLinks'];
        try {
            $dirItr = new DirectoryIterator($path);
        } catch (UnexpectedValueException $e) {
        }

        foreach ($dirItr as $file) {
            try {
                if ($file->isDot()) {
                    continue;
                }

                $files[] = $fpath = $file->getPathname();

                $br = false;
                $stat = array();

                $stat['isowner'] = false;
                $linkreadable = false;
                if ($file->isLink()) {
                    if (!$followSymLinks) {
                        continue;
                    }
                    if (!($target = $this->readlink($fpath))
                        || $target == $fpath) {
                        if (is_null($target)) {
                            $stat = array();
                            $br = true;
                        } else {
                            $_path = $fpath;
                            $stat['mime'] = 'symlink-broken';
                            $target = readlink($_path);
                            $lstat = lstat($_path);
                            $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                            $linkreadable = !empty($ostat['isowner']);
                            $dir = false;
                            $stat['alias'] = $this->_path($target);
                            $stat['target'] = $target;
                        }
                    } else {
                        $dir = is_dir($target);
                        $stat['alias'] = $this->_path($target);
                        $stat['target'] = $target;
                        $stat['mime'] = $dir ? 'directory' : $this->mimetype($stat['alias']);
                    }
                } else {
                    if (($dir = $file->isDir()) && $this->options['detectDirIcon']) {
                        $path = $file->getPathname();
                        $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
                        if ($this->URL && file_exists($favicon)) {
                            $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
                        }
                    }
                    $stat['mime'] = $dir ? 'directory' : $this->mimetype($fpath);
                }
                $size = sprintf('%u', $file->getSize());
                $stat['ts'] = $file->getMTime();
                if (!$br) {
                    if ($this->statOwner && !$linkreadable) {
                        $uid = $file->getOwner();
                        $gid = $file->getGroup();
                        $stat['perm'] = substr((string)decoct($file->getPerms()), -4);
                        $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
                    }

                    //logical rights first
                    $stat['read'] = ($linkreadable || $file->isReadable()) ? null : false;
                    $stat['write'] = $file->isWritable() ? null : false;
                    $stat['locked'] = $dirWritable ? null : true;

                    if (is_null($stat['read'])) {
                        $stat['size'] = $dir ? 0 : $size;
                    }

                    if ($this->options['statCorrector']) {
                        call_user_func_array($this->options['statCorrector'], array(&$stat, $fpath, $this->statOwner, $this));
                    }
                }

                $cache[] = array($fpath, $stat);
            } catch (RuntimeException $e) {
                continue;
            }
        }

        if ($cache) {
            $cache = $this->convEncOut($cache, false);
            foreach ($cache as $d) {
                $this->updateCache($d[0], $d[1]);
            }
        }

        return $files;
    }

    /**
     * Open file and return file pointer
     *
     * @param  string $path file path
     * @param string  $mode
     *
     * @return false|resource
     * @internal param bool $write open file for writing
     * @author   Dmitry (dio) Levashov
     */
    protected function _fopen($path, $mode = 'rb')
    {
        return fopen($path, $mode);
    }

    /**
     * Close opened file
     *
     * @param  resource $fp file pointer
     * @param string    $path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     */
    protected function _fclose($fp, $path = '')
    {
        return (is_resource($fp) && fclose($fp));
    }

    /********************  file/dir manipulations *************************/

    /**
     * Create dir and return created dir path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new directory name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkdir($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (mkdir($path)) {
            chmod($path, $this->options['dirMode']);
            return $path;
        }

        return false;
    }

    /**
     * Create file and return it's path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new file name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkfile($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (($fp = fopen($path, 'w'))) {
            fclose($fp);
            chmod($path, $this->options['fileMode']);
            return $path;
        }
        return false;
    }

    /**
     * Create symlink
     *
     * @param  string $source    file to link to
     * @param  string $targetDir folder to create link in
     * @param  string $name      symlink name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _symlink($source, $targetDir, $name)
    {
        return $this->localFileSystemSymlink($source, $this->_joinPath($targetDir, $name));
    }

    /**
     * Copy file into another file
     *
     * @param  string $source    source file path
     * @param  string $targetDir target directory path
     * @param  string $name      new file name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _copy($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = copy($source, $target)) {
            isset($this->options['keepTimestamp']['copy']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Move file into another parent dir.
     * Return new file path or false.
     *
     * @param  string $source source file path
     * @param         $targetDir
     * @param  string $name   file name
     *
     * @return bool|string
     * @internal param string $target target dir path
     * @author   Dmitry (dio) Levashov
     */
    protected function _move($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = rename($source, $target) ? $target : false) {
            isset($this->options['keepTimestamp']['move']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Remove file
     *
     * @param  string $path file path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _unlink($path)
    {
        return is_file($path) && unlink($path);
    }

    /**
     * Remove dir
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _rmdir($path)
    {
        return rmdir($path);
    }

    /**
     * Create new file and write into it from file pointer.
     * Return new file path or false on error.
     *
     * @param  resource $fp   file pointer
     * @param  string   $dir  target dir path
     * @param  string   $name file name
     * @param  array    $stat file stat (required by some virtual fs)
     *
     * @return bool|string
     * @author Dmitry (dio) Levashov
     **/
    protected function _save($fp, $dir, $name, $stat)
    {
        $path = $this->_joinPath($dir, $name);

        $meta = stream_get_meta_data($fp);
        $uri = isset($meta['uri']) ? $meta['uri'] : '';
        if ($uri && !preg_match('#^[a-zA-Z0-9]+://#', $uri) && !is_link($uri)) {
            fclose($fp);
            $mtime = filemtime($uri);
            $isCmdPaste = ($this->ARGS['cmd'] === 'paste');
            $isCmdCopy = ($isCmdPaste && empty($this->ARGS['cut']));
            if (($isCmdCopy || !rename($uri, $path)) && !copy($uri, $path)) {
                return false;
            }
            // keep timestamp on upload
            if ($mtime && $this->ARGS['cmd'] === 'upload') {
                touch($path, isset($this->options['keepTimestamp']['upload']) ? $mtime : time());
            }
        } else {
            if (file_put_contents($path, $fp, LOCK_EX) === false) {
                return false;
            }
        }

        chmod($path, $this->options['fileMode']);
        return $path;
    }

    /**
     * Get file contents
     *
     * @param  string $path file path
     *
     * @return string|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _getContents($path)
    {
        return file_get_contents($path);
    }

    /**
     * Write a string to a file
     *
     * @param  string $path    file path
     * @param  string $content new file content
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _filePutContents($path, $content)
    {
        return (file_put_contents($path, $content, LOCK_EX) !== false);
    }

    /**
     * Detect available archivers
     *
     * @return void
     * @throws elFinderAbortException
     */
    protected function _checkArchivers()
    {
        $this->archivers = $this->getArchivers();
        return;
    }

    /**
     * chmod availability
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    protected function _chmod($path, $mode)
    {
        $modeOct = is_string($mode) ? octdec($mode) : octdec(sprintf("%04o", $mode));
        return chmod($path, $modeOct);
    }

    /**
     * Recursive symlinks search
     *
     * @param  string $path file/dir path
     *
     * @return bool
     * @throws Exception
     * @author Dmitry (dio) Levashov
     */
    protected function _findSymlinks($path)
    {
        return self::localFindSymlinks($path);
    }

    /**
     * Extract files from archive
     *
     * @param  string $path archive path
     * @param  array  $arc  archiver command and arguments (same as in $this->archivers)
     *
     * @return array|string|boolean
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _extract($path, $arc)
    {

        if ($this->quarantine) {

            $dir = $this->quarantine . DIRECTORY_SEPARATOR . md5(basename($path) . mt_rand());
            $archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction') ? '' : $dir . DIRECTORY_SEPARATOR . basename($path);

            if (!mkdir($dir)) {
                return false;
            }

            // insurance unexpected shutdown
            register_shutdown_function(array($this, 'rmdirRecursive'), realpath($dir));

            chmod($dir, 0777);

            // copy in quarantine
            if (!is_readable($path) || ($archive && !copy($path, $archive))) {
                return false;
            }

            // extract in quarantine
            try {
                $this->unpackArchive($path, $arc, $archive ? true : $dir);
            } catch(Exception $e) {
                return $this->setError($e->getMessage());
            }

            // get files list
            try {
                $ls = self::localScandir($dir);
            } catch (Exception $e) {
                return false;
            }

            // no files - extract error ?
            if (empty($ls)) {
                return false;
            }

            $this->archiveSize = 0;

            // find symlinks and check extracted items
            $checkRes = $this->checkExtractItems($dir);
            if ($checkRes['symlinks']) {
                self::localRmdirRecursive($dir);
                return $this->setError(array_merge($this->error, array(elFinder::ERROR_ARC_SYMLINKS)));
            }
            $this->archiveSize = $checkRes['totalSize'];
            if ($checkRes['rmNames']) {
                foreach ($checkRes['rmNames'] as $name) {
                    $this->addError(elFinder::ERROR_SAVE, $name);
                }
            }

            // check max files size
            if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
                $this->delTree($dir);
                return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
            }

            $extractTo = $this->extractToNewdir; // 'auto', ture or false

            // archive contains one item - extract in archive dir
            $name = '';
            $src = $dir . DIRECTORY_SEPARATOR . $ls[0];
            if (($extractTo === 'auto' || !$extractTo) && count($ls) === 1 && is_file($src)) {
                $name = $ls[0];
            } else if ($extractTo === 'auto' || $extractTo) {
                // for several files - create new directory
                // create unique name for directory
                $src = $dir;
                $splits = elFinder::splitFileExtention(basename($path));
                $name = $splits[0];
                $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
                if (file_exists($test) || is_link($test)) {
                    $name = $this->uniqueName(dirname($path), $name, '-', false);
                }
            }

            if ($name !== '') {
                $result = dirname($path) . DIRECTORY_SEPARATOR . $name;

                if (!rename($src, $result)) {
                    $this->delTree($dir);
                    return false;
                }
            } else {
                $dstDir = dirname($path);
                $result = array();
                foreach ($ls as $name) {
                    $target = $dstDir . DIRECTORY_SEPARATOR . $name;
                    if (self::localMoveRecursive($dir . DIRECTORY_SEPARATOR . $name, $target, true, $this->options['copyJoin'])) {
                        $result[] = $target;
                    }
                }
                if (!$result) {
                    $this->delTree($dir);
                    return false;
                }
            }

            is_dir($dir) && $this->delTree($dir);

            return (is_array($result) || file_exists($result)) ? $result : false;
        }
        //TODO: Add return statement here
        return false;
    }

    /**
     * Create archive and return its path
     *
     * @param  string $dir   target dir
     * @param  array  $files files names list
     * @param  string $name  archive name
     * @param  array  $arc   archiver options
     *
     * @return string|bool
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _archive($dir, $files, $name, $arc)
    {
        return $this->makeArchive($dir, $files, $name, $arc);
    }

    /******************** Over write functions *************************/

    /**
     * File path of local server side work file path
     *
     * @param  string $path
     *
     * @return string
     * @author Naoki Sawada
     */
    protected function getWorkFile($path)
    {
        return $path;
    }

    /**
     * Delete dirctory trees
     *
     * @param string $localpath path need convert encoding to server encoding
     *
     * @return boolean
     * @throws elFinderAbortException
     * @author Naoki Sawada
     */
    protected function delTree($localpath)
    {
        return $this->rmdirRecursive($localpath);
    }

    /**
     * Return fileinfo based on filename
     * For item ID based path file system
     * Please override if needed on each drivers
     *
     * @param  string $path file cache
     *
     * @return array|boolean false
     */
    protected function isNameExists($path)
    {
        $exists = file_exists($this->convEncIn($path));
        // restore locale
        $this->convEncOut();
        return $exists ? $this->stat($path) : false;
    }

    /******************** Over write (Optimized) functions *************************/

    /**
     * Recursive files search
     *
     * @param  string $path dir path
     * @param  string $q    search string
     * @param  array  $mimes
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     * @author Naoki Sawada
     */
    protected function doSearch($path, $q, $mimes)
    {
        if (!empty($this->doSearchCurrentQuery['matchMethod']) || $this->encoding || !class_exists('FilesystemIterator', false)) {
            // has custom match method or non UTF-8, use elFinderVolumeDriver::doSearch()
            return parent::doSearch($path, $q, $mimes);
        }

        $result = array();

        $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0;
        if ($timeout && $timeout < time()) {
            $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path)));
            return $result;
        }
        elFinder::extendTimeLimit($this->options['searchTimeout'] + 30);

        $match = array();
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveCallbackFilterIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::KEY_AS_PATHNAME |
                        FilesystemIterator::SKIP_DOTS |
                        ((defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') && $this->options['followSymLinks']) ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    ),
                    array($this, 'localFileSystemSearchIteratorFilter')
                ),
                RecursiveIteratorIterator::SELF_FIRST,
                RecursiveIteratorIterator::CATCH_GET_CHILD
            );
            foreach ($iterator as $key => $node) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($node->getPath)));
                    break;
                }
                if ($node->isDir()) {
                    if ($this->stripos($node->getFilename(), $q) !== false) {
                        $match[] = $key;
                    }
                } else {
                    $match[] = $key;
                }
            }
        } catch (Exception $e) {
        }

        if ($match) {
            foreach ($match as $p) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode(dirname($p))));
                    break;
                }

                $stat = $this->stat($p);

                if (!$stat) { // invalid links
                    continue;
                }

                if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) {
                    continue;
                }

                if ((!$mimes || $stat['mime'] !== 'directory')) {
                    $stat['path'] = $this->path($stat['hash']);
                    if ($this->URL && !isset($stat['url'])) {
                        $_path = str_replace(DIRECTORY_SEPARATOR, '/', substr($p, strlen($this->root) + 1));
                        $stat['url'] = $this->URL . str_replace('%2F', '/', rawurlencode($_path));
                    }

                    $result[] = $stat;
                }
            }
        }

        return $result;
    }

    /******************** Original local functions ************************
     *
     * @param $file
     * @param $key
     * @param $iterator
     *
     * @return bool
     */

    public function localFileSystemSearchIteratorFilter($file, $key, $iterator)
    {
        /* @var FilesystemIterator $file */
        /* @var RecursiveDirectoryIterator $iterator */
        $name = $file->getFilename();
        if ($this->doSearchCurrentQuery['excludes']) {
            foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) {
                if ($this->stripos($name, $exclude) !== false) {
                    return false;
                }
            }
        }
        if ($iterator->hasChildren()) {
            if ($this->options['searchExDirReg'] && preg_match($this->options['searchExDirReg'], $key)) {
                return false;
            }
            return (bool)$this->attr($key, 'read', null, true);
        }
        return ($this->stripos($name, $this->doSearchCurrentQuery['q']) === false) ? false : true;
    }

    /**
     * Creates a symbolic link
     *
     * @param      string   $target  The target
     * @param      string   $link    The link
     *
     * @return     boolean  ( result of symlink() )
     */
    protected function localFileSystemSymlink($target, $link)
    {
        $res = false;
        if (function_exists('symlink') and is_callable('symlink')) {
            $errlev = error_reporting();
            error_reporting($errlev ^ E_WARNING);
            if ($res = symlink(realpath($target), $link)) {
                $res = is_readable($link);
            }
            error_reporting($errlev);
        }
        return $res;
    }
} // END class PK      \+   +      codeinwp/themeisle-sdk/index.phpnu W+A        <?php
// phpcs:ignoreFile
// Nothing here.
PK      \    (  codeinwp/themeisle-sdk/postcss.config.jsnu W+A        const wpPreset = require( '@wordpress/postcss-plugins-preset' );

module.exports = {
	plugins: [
		...wpPreset,
		require( 'postcss-custom-media' )(),          // Custom media queries: https://www.npmjs.com/package/postcss-custom-media
		require( 'postcss-combine-media-query' )(),   // Combine media queries: https://www.npmjs.com/package/postcss-combine-media-query
		require( 'postcss-sort-media-queries' )()	  // Sort media queries: https://www.npmjs.com/package/postcss-sort-media-queries
	]
};
PK      \FLE  E    codeinwp/themeisle-sdk/LICENSEnu W+A                            GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    {one line to give the program's name and a brief idea of what it does.}
    Copyright (C) {year}  {name of author}

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    {project}  Copyright (C) {year}  {fullname}
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
PK      \BK  K    codeinwp/themeisle-sdk/load.phpnu W+A        <?php
/**
 * Loader for the ThemeIsleSDK
 *
 * Logic for loading always the latest SDK from the installed themes/plugins.
 *
 * @package     ThemeIsleSDK
 * @copyright   Copyright (c) 2017, Marius Cristea
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 * @since       1.1.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	return;
}
// Current SDK version and path.
$themeisle_sdk_version = '3.3.12';
$themeisle_sdk_path    = dirname( __FILE__ );

global $themeisle_sdk_max_version;
global $themeisle_sdk_max_path;

// If this is the latest SDK and it comes from a theme, we should load licenser separately.
$themeisle_sdk_relative_licenser_path = '/src/Modules/Licenser.php';

global $themeisle_sdk_abs_licenser_path;
if ( ! is_file( $themeisle_sdk_path . $themeisle_sdk_relative_licenser_path ) && ! empty( $themeisle_sdk_max_path ) && is_file( $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path ) ) {
	$themeisle_sdk_abs_licenser_path = $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path;
	add_filter( 'themeisle_sdk_required_files', 'themeisle_sdk_load_licenser_if_present' );
}

if ( ( is_null( $themeisle_sdk_max_path ) || version_compare( $themeisle_sdk_version, $themeisle_sdk_max_version ) == 0 ) &&
	apply_filters( 'themeisle_sdk_should_overwrite_path', false, $themeisle_sdk_path, $themeisle_sdk_max_path ) ) {
	$themeisle_sdk_max_path = $themeisle_sdk_path;
}

if ( is_null( $themeisle_sdk_max_version ) || version_compare( $themeisle_sdk_version, $themeisle_sdk_max_version ) > 0 ) {
	$themeisle_sdk_max_version = $themeisle_sdk_version;
	$themeisle_sdk_max_path    = $themeisle_sdk_path;
}

// load the latest sdk version from the active Themeisle products.
if ( ! function_exists( 'themeisle_sdk_load_licenser_if_present' ) ) :
	/**
	 * Always load the licenser, if present.
	 *
	 * @param array $to_load Previously files to load.
	 */
	function themeisle_sdk_load_licenser_if_present( $to_load ) {
		global $themeisle_sdk_abs_licenser_path;
		$to_load[] = $themeisle_sdk_abs_licenser_path;

		return $to_load;
	}
endif;

// load the latest sdk version from the active Themeisle products.
if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) :
	/**
	 * Always load the latest sdk version.
	 */
	function themeisle_sdk_load_latest() {
		/**
		 * Don't load the library if we are on < 5.4.
		 */
		if ( version_compare( PHP_VERSION, '5.4.32', '<' ) ) {
			return;
		}
		global $themeisle_sdk_max_path;
		require_once $themeisle_sdk_max_path . '/start.php';
	}
endif;
add_action( 'init', 'themeisle_sdk_load_latest' );

if ( ! function_exists( 'tsdk_utmify' ) ) {
	/**
	 * Utmify a link.
	 *
	 * @param string $url URL to add utms.
	 * @param string $area Area in page where this is used ( CTA, image, section name).
	 * @param string $location Location, such as customizer, about page.
	 *
	 * @return string
	 */
	function tsdk_utmify( $url, $area, $location = null ) {
		static $current_page = null;
		if ( $location === null && $current_page === null ) {
			global $pagenow;
			$screen       = function_exists( 'get_current_screen' ) ? get_current_screen() : $pagenow;
			$current_page = isset( $screen->id ) ? $screen->id : ( ( $screen === null ) ? 'non-admin' : $screen );
			$current_page = sanitize_key( str_replace( '.php', '', $current_page ) );
		}
		$location        = $location === null ? $current_page : $location;
		$content         = sanitize_key(
			trim(
				str_replace(
					[
						'https://',
						'themeisle.com',
						'/themes/',
						'/plugins/',
						'/upgrade',
					],
					'',
					$url
				),
				'/'
			)
		);
		$filter_key      = sanitize_key( $content );
		$url_args        = [
			'utm_source'   => 'wpadmin',
			'utm_medium'   => $location,
			'utm_campaign' => $area,
			'utm_content'  => $content,
		];
		$query_arguments = apply_filters( 'tsdk_utmify_' . $filter_key, $url_args, $url );
		$utmify_url      = esc_url_raw(
			add_query_arg(
				$query_arguments,
				$url
			)
		);
		return apply_filters( 'tsdk_utmify_url_' . $filter_key, $utmify_url, $url );
	}

	add_filter( 'tsdk_utmify', 'tsdk_utmify', 10, 3 );
}


if ( ! function_exists( 'tsdk_lstatus' ) ) {
	/**
	 * Check license status.
	 *
	 * @param string $file Product basefile.
	 *
	 * @return string Status.
	 */
	function tsdk_lstatus( $file ) {
		return \ThemeisleSDK\Modules\Licenser::status( $file );
	}
}
if ( ! function_exists( 'tsdk_lis_valid' ) ) {
	/**
	 * Check if license is valid.
	 *
	 * @param string $file Product basefile.
	 *
	 * @return bool Validness.
	 */
	function tsdk_lis_valid( $file ) {
		return \ThemeisleSDK\Modules\Licenser::is_valid( $file );
	}
}
if ( ! function_exists( 'tsdk_lplan' ) ) {
	/**
	 * Get license plan.
	 *
	 * @param string $file Product basefile.
	 *
	 * @return string Plan.
	 */
	function tsdk_lplan( $file ) {
		return \ThemeisleSDK\Modules\Licenser::plan( $file );
	}
}

if ( ! function_exists( 'tsdk_lkey' ) ) {
	/**
	 * Get license key.
	 *
	 * @param string $file Product basefile.
	 *
	 * @return string Key.
	 */
	function tsdk_lkey( $file ) {
		return \ThemeisleSDK\Modules\Licenser::key( $file );
	}
}
if ( ! function_exists( 'tsdk_support_link' ) ) {

	/**
	 * Get Themeisle Support URL.
	 *
	 * @param string $file Product basefile.
	 *
	 * @return false|string Return support URL or false if no license is active.
	 */
	function tsdk_support_link( $file ) {

		if ( ! did_action( 'init' ) ) {
			_doing_it_wrong( __FUNCTION__, 'tsdk_support_link() should not be called before the init action.', '3.2.39' );
		}
		$params = [];
		if ( ! tsdk_lis_valid( $file ) ) {
			return false;
		}
		$product = \ThemeisleSDK\Product::get( $file );
		if ( ! $product->requires_license() ) {
			return false;
		}
		static $site_params = null;
		if ( $site_params === null ) {
			if ( is_user_logged_in() && function_exists( 'wp_get_current_user' ) ) {
				$current_user          = wp_get_current_user();
				$site_params['semail'] = urlencode( $current_user->user_email );
			}
			$site_params['swb'] = urlencode( home_url() );
			global $wp_version;
			$site_params['snv'] = urlencode( sprintf( 'WP-%s-PHP-%s', $wp_version, ( PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION ) ) );
		}
		$params['slkey'] = tsdk_lkey( $file );
		$params['sprd']  = urlencode( $product->get_name() );
		$params['svrs']  = urlencode( $product->get_version() );


		return add_query_arg(
			array_merge( $site_params, $params ),
			'https://store.themeisle.com/direct-support/'
		);
	}
}
PK      \ݽ*A  A  6  codeinwp/themeisle-sdk/assets/js/build/about/about.cssnu W+A        #wpcontent{padding-left:0 !important}.ti-about{--border: 1px solid #ccc;--link-color: var(--wp-admin-theme-color);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:normal;display:grid;gap:30px}.ti-about .container{margin:0 auto;max-width:960px;padding:0 15px}.ti-about p{font-size:14px;line-height:1.6}.ti-about button{font-weight:600}.ti-about .spin{animation:spin 1s infinite linear}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ti-about .head{background:#fff;border-bottom:var(--border);padding:18px 0}.ti-about .head .container{padding:0 15px;display:flex;flex-wrap:wrap;align-items:center}.ti-about .head img{max-height:55px}.ti-about .head p{margin-left:10px}.ti-about .head a{font-style:italic;font-weight:bold}.ti-about .nav{border-bottom:var(--border);display:flex;flex-wrap:wrap;font-size:16px;margin:0;font-weight:600;-moz-column-gap:20px;column-gap:20px}.ti-about .nav a{border-bottom:4px solid rgba(0,0,0,0);color:#868686;padding:20px 10px;text-decoration:none;margin-bottom:-1px;box-sizing:border-box}.ti-about .nav a:hover{color:#313233}.ti-about .nav li{display:flex;margin:0}.ti-about .nav li.active a{border-color:var(--link-color);color:#313233}.ti-about .story-card .footer,.ti-about .story-card .body{display:grid;grid-template-columns:var(--grid, 1fr);align-items:center}.ti-about .story-card{border:var(--border);border-radius:0 0 10px 10px}.ti-about .story-card .body{background:#fff;padding:35px 35px 10px 35px}.ti-about .story-card .body h2{font-size:30px;margin:0 0 30px;color:#1f1d1d}.ti-about .story-card .body p{color:#1e1e1e}.ti-about .story-card .body figure{order:0;margin:0}.ti-about .story-card .body figcaption{margin:10px 0;color:#797979;font-size:12px}.ti-about .story-card .body img{border-radius:8px;max-width:100%}.ti-about .story-card .footer{border-top:var(--border);padding:30px 40px}.ti-about .story-card .footer h2{margin:0 0 20px;text-align:center;font-size:21px}.ti-about .story-card form{display:flex;align-items:center}.ti-about .story-card form .dashicons-yes-alt{color:#609952}.ti-about .story-card input{height:36px;flex-grow:1;border:var(--border);border-radius:2px;font-size:12px;margin-right:15px}.ti-about .product-cards{display:grid;gap:30px}.ti-about .product-card{background:#fff;display:grid;border:var(--border)}.ti-about .product-card h2{font-size:21px;margin:0}.ti-about .product-card p{margin:0;color:#6c6c6c}.ti-about .product-card .header{padding:20px 15px 0;display:flex;align-items:center}.ti-about .product-card .body{padding:20px 15px}.ti-about .product-card img{max-width:50px;margin-right:15px;border-radius:6px}.ti-about .product-card .footer{border-top:var(--border);display:flex;align-items:center;padding:15px;align-self:flex-end;justify-content:space-between}.ti-about .product-card .footer p{margin:8px 0;font-weight:600;font-size:13px;color:#313233}.ti-about .product-card .footer .not-installed{color:#7e7e7e}.ti-about .product-card .footer .active{color:#609952}.ti-about .product-card button,.ti-about .product-card a,.ti-about .product-card .spin{margin-left:auto;text-decoration:none}.ti-about .product-page{margin:0 auto;padding:0;width:100%;max-width:960px;border:1px solid #ccc;border-radius:8px;background-color:#fff}.ti-about .product-page .hero{display:flex;flex-direction:column;align-items:center;padding:64px;border-bottom:1px solid #ccc}.ti-about .product-page .hero h1{font-size:30px;line-height:42px;max-width:500px;text-align:center}.ti-about .product-page .hero p{font-size:14px;line-height:24px;max-width:500px;text-align:center}.ti-about .product-page .hero .logo{width:64px;margin-bottom:24px}.ti-about .product-page .hero .label{font-size:10px;line-height:12px;color:#ed6f57;background-color:rgba(237,111,87,.1803921569);padding:8px 16px;border-radius:4px}.ti-about .product-page .col-3-highlights{display:flex;flex-direction:column;justify-content:space-evenly;padding:24px 0;border-bottom:1px solid #ccc;align-items:center;text-align:center}.ti-about .product-page .col-3-highlights .col{max-width:360px}.ti-about .product-page .col-3-highlights .col h3{font-size:21px;line-height:32px;margin-bottom:8px}.ti-about .product-page .col-3-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .col-2-highlights{display:flex;flex-direction:column;justify-content:space-evenly;align-items:center;padding:24px 0;border-bottom:1px solid #ccc}.ti-about .product-page .col-2-highlights .col{width:90%}.ti-about .product-page .col-2-highlights .col img{max-width:450px;width:100%}.ti-about .product-page .col-2-highlights .col h2{font-size:24px;line-height:35px;margin-bottom:8px}.ti-about .product-page .col-2-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .button-row{display:flex;gap:12px;margin-top:48px}.ti-about .otter-blocks .testimonial-nav{display:flex;gap:8px}.ti-about .otter-blocks .testimonial-nav .testimonial-button{width:10px;height:10px;background-color:#d9d9d9;margin:0;padding:0;border-radius:50%}.ti-about .otter-blocks .testimonial-nav .testimonial-button.active{background-color:#ed6f57}.ti-about .otter-blocks .testimonial-container{width:100%;max-width:450px;display:flex;overflow-x:scroll;scroll-behavior:smooth;margin:0;padding:0}.ti-about .otter-blocks .testimonial-container::-webkit-scrollbar{display:none}.ti-about .otter-blocks .testimonial-container .testimonial{width:100%;flex:1 0 100%;display:flex;flex-wrap:wrap;justify-content:left;gap:14px;align-items:center}.ti-about .otter-blocks .testimonial-container .testimonial p{width:100%;font-size:14px;line-height:24px}.ti-about .otter-blocks .testimonial-container .testimonial h3{font-size:16px;line-height:20px;font-weight:700;color:#1c1c1c}.ti-about .otter-blocks .testimonial-container .testimonial img{width:36px;height:36px;border-radius:50%}.ti-about .otter-blocks .otter-button.is-primary{background-color:#ed6f57}.ti-about .otter-blocks .otter-button.is-secondary{color:#ed6f57;box-shadow:inset 0 0 0 1px #ed6f57}.ti-about .otter-blocks .otter-button.is-loading{background-color:#6c6c6c;color:#fff}@media (min-width: 660px){.ti-about .product-cards{grid-template-columns:1fr 1fr}.ti-about .product-page .col-3-highlights,.ti-about .product-page .col-2-highlights{flex-direction:row;padding:64px 0}.ti-about .product-page .col-3-highlights{text-align:left}.ti-about .product-page .col-3-highlights .col{max-width:200px}.ti-about .product-page .col-2-highlights .col{width:45%}}@media (min-width: 992px){.ti-about .story-card .footer,.ti-about .story-card .body{gap:60px}.ti-about .story-card{--grid: 1.1fr 1fr}.ti-about .story-card .footer h2{margin:0;text-align:left}.ti-about .product-cards{grid-template-columns:1fr 1fr 1fr}}
PK      \Vq   q   <  codeinwp/themeisle-sdk/assets/js/build/about/about.asset.phpnu W+A        <?php return array('dependencies' => array('wp-components', 'wp-element'), 'version' => '35f2cdc94ec1bd5b9745');
PK      \To('  ('  5  codeinwp/themeisle-sdk/assets/js/build/about/about.jsnu W+A        !function(){"use strict";var e=window.wp.element;function t(t){let{pages:a=[],selected:n=""}=t;const{currentProduct:l,logoUrl:s,strings:c,links:i}=window.tiSDKAboutData,r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e===n?"active":""};return(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"head"},(0,e.createElement)("div",{className:"container"},(0,e.createElement)("img",{src:s,alt:l.name}),(0,e.createElement)("p",null,"by ",(0,e.createElement)("a",{href:"https://themeisle.com"},"Themeisle")))),(i.length>0||a.length>0)&&(0,e.createElement)("div",{className:"container"},(0,e.createElement)("ul",{className:"nav"},(0,e.createElement)("li",{className:r()},(0,e.createElement)("a",{href:window.location},c.aboutUs)),a.map(((t,a)=>(0,e.createElement)("li",{className:r(t.hash),key:a},(0,e.createElement)("a",{href:t.hash},t.name)))),i.map(((t,a)=>(0,e.createElement)("li",{key:a},(0,e.createElement)("a",{href:t.url},t.text)))))))}var a=window.wp.components;function n(){const{strings:t,teamImage:n,homeUrl:l,pageSlug:s}=window.tiSDKAboutData,{heroHeader:c,heroTextFirst:i,heroTextSecond:r,teamImageCaption:o,newsHeading:m,emailPlaceholder:d,signMeUp:u}=t,[E,p]=(0,e.useState)(""),[h,g]=(0,e.useState)(!1),[v,N]=(0,e.useState)(!1);return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"story-card"},(0,e.createElement)("div",{className:"body"},(0,e.createElement)("div",null,(0,e.createElement)("h2",null,c),(0,e.createElement)("p",null,i),(0,e.createElement)("p",null,r)),(0,e.createElement)("figure",null,(0,e.createElement)("img",{src:n,alt:o}),(0,e.createElement)("figcaption",null,o))),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("h2",null,m),(0,e.createElement)("form",{onSubmit:e=>{var t;e.preventDefault(),g(!0),null===(t=fetch("https://api.themeisle.com/tracking/subscribe",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, */*;q=0.1","Cache-Control":"no-cache"},body:JSON.stringify({slug:"about-us",site:l,from:s,email:E})}).then((e=>e.json())).then((e=>{g(!1),"success"===e.code&&N(!0)})))||void 0===t||t.catch((e=>{g(!1)}))}},(0,e.createElement)("input",{disabled:h||v,type:"email",value:E,onChange:e=>{p(e.target.value)},placeholder:d}),!h&&!v&&(0,e.createElement)(a.Button,{isPrimary:!0,type:"submit"},u),h&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),v&&(0,e.createElement)("span",{className:"dashicons dashicons-yes-alt"})))))}const l=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((a=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:()=>{a({success:!0})},error:e=>{a({success:!1,code:e.errorCode})}})}))};function s(t){let{product:n,slug:s}=t;const{icon:c,name:i,description:r,status:o,premiumUrl:m,activationLink:d}=n,{strings:u,canInstallPlugins:E,canActivatePlugins:p}=window.tiSDKAboutData,{installNow:h,installed:g,notInstalled:v,active:N,activate:b,learnMore:f}=u,w=!!m,[y,k]=(0,e.useState)(o),[S,T]=(0,e.useState)(!1),D=async()=>{T(!0),await l(s,"neve"===s).then((e=>{e.success&&k("installed")})),T(!1)},x=async()=>{T(!0),window.location.href=d},_=()=>"not-installed"===y&&w?(0,e.createElement)(a.Button,{isLink:!0,icon:"external",href:m,target:"_blank"},f):"not-installed"!==y||w?"installed"===y?(0,e.createElement)(a.Button,{isSecondary:!0,onClick:x,disabled:S||!p},b):null:(0,e.createElement)(a.Button,{isPrimary:!0,onClick:D,disabled:S||!E},h),C=!E&&"not-installed"===y||!p&&"installed"===y?(0,e.createElement)(a.Tooltip,{text:`Ask your admin to enable ${i} on your site`,position:"top center"},_()):_();return(0,e.createElement)("div",{className:"product-card"},(0,e.createElement)("div",{className:"header"},c&&(0,e.createElement)("img",{src:c,alt:i}),(0,e.createElement)("h2",null,i)),(0,e.createElement)("div",{className:"body"},(0,e.createElement)("p",{dangerouslySetInnerHTML:{__html:r}})),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("p",null,"Status:"," ",(0,e.createElement)("span",{className:y},"installed"===y&&g,"not-installed"===y&&v,"active"===y&&N)),"active"!==y&&!S&&C,S&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})))}function c(){const{products:t}=window.tiSDKAboutData;return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"product-cards"},Object.keys(t).map(((a,n)=>(0,e.createElement)(s,{key:a,slug:a,product:t[a]})))))}const i={"otter-page":function(t){let{page:n={}}=t;const{products:s,canInstallPlugins:c,canActivatePlugins:i}=window.tiSDKAboutData,{strings:r,plugin:o}=n,m=n&&n.product?n.product:"",d=m&&s[m]&&s[m].icon?s[m].icon:null,[u,E]=(0,e.useState)(r.testimonials.users[0]),[p,h]=(0,e.useState)(o.status),[g,v]=(0,e.useState)(!1),N="In Progress",b=async()=>{v(!0),await l(m,!1).then((e=>{e.success&&(h("installed"),f())}))},f=async()=>{v(!0),window.location.href=o.activationLink},w=(0,e.createElement)(a.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?b:f},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})," ",N):r.buttons.install_otter_free),y=(0,e.createElement)(a.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?b:f},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),N):r.buttons.install_now),k=!c&&"not-installed"===p||!i&&"installed"===p||!1,S=t=>k?(0,e.createElement)(a.Tooltip,{text:"Ask your admin to enable Otter on your site",position:"top center"},t):t;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"hero"},d&&(0,e.createElement)("img",{className:"logo",src:d,alt:n.name||""}),(0,e.createElement)("span",{className:"label"},"Neve + Otter = New Possibilities 🤝"),(0,e.createElement)("h1",null,r.heading),(0,e.createElement)("p",null,r.text),("not-installed"===p||"installed"===p)&&S(w)),(0,e.createElement)("div",{className:"col-3-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.advancedTitle),(0,e.createElement)("p",null,r.features.advancedDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.fastTitle),(0,e.createElement)("p",null,r.features.fastDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.mobileTitle),(0,e.createElement)("p",null,r.features.mobileDesc))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s1Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s1Title),(0,e.createElement)("p",null,r.details.s1Text))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s2Title),(0,e.createElement)("p",null,r.details.s2Text)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s2Image,alt:r.details.s1Title}))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s3Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s3Title),(0,e.createElement)("p",null,r.details.s3Text))),(0,e.createElement)("div",{className:"col-2-highlights",style:{backgroundColor:"#F7F7F7",borderBottom:"none",borderBottomRightRadius:"8px",borderBottomLeftRadius:"8px"}},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.testimonials.heading),(0,e.createElement)("div",{className:"button-row"},("not-installed"===p||"installed"===p)&&S(y),(0,e.createElement)("a",{className:"components-button otter-button is-secondary",href:r.buttons.learn_more_link,target:"_blank",rel:"external noreferrer noopener"},r.buttons.learn_more))),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("div",{className:"testimonials"},(0,e.createElement)("ul",{id:"testimonial-container",className:"testimonial-container"},r.testimonials.users.map(((t,a)=>(0,e.createElement)("li",{className:"testimonial",id:"ts_"+a,key:"ts_"+a},(0,e.createElement)("p",null,'"',t.text,'"'),(0,e.createElement)("img",{src:t.avatar,alt:t.name}),(0,e.createElement)("h3",null,t.name))))),(0,e.createElement)("div",{className:"testimonial-nav"},r.testimonials.users.map(((t,n)=>(0,e.createElement)(a.Button,{className:"testimonial-button"+(t.name===u.name?" active":""),key:"button_"+n,onClick:()=>(e=>{const t=r.testimonials.users[e];document.getElementById("ts_"+e).scrollIntoView({behavior:"smooth"}),E(t)})(n)}))))))))}};function r(t){const a=i[t.id];return(0,e.createElement)(a,{page:t.page})}function o(t){let{page:a={}}=t;return(0,e.createElement)("div",{className:"product-page"+(a&&a.product?" "+a.product:"")},(0,e.createElement)(r,{id:a.id,page:a}))}const m=()=>{let e=window.location.hash;return"string"!=typeof window.location.hash?null:e};function d(){const{productPages:a}=window.tiSDKAboutData,l=a?Object.keys(a).map((e=>{const t=a[e];return t.id=e,t})):[],[s,i]=(0,e.useState)(m()),r=()=>{const e=m();null!==e&&i(e)};(0,e.useEffect)((()=>(r(),window.addEventListener("hashchange",r),()=>{window.removeEventListener("hashchange",r)})),[]);const d=l.filter((e=>e.hash===s));return d.length>0?(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(t,{pages:l,selected:s}),(0,e.createElement)(o,{page:d[0]})):(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(t,{pages:l}),(0,e.createElement)(n,null),(0,e.createElement)(c,null))}document.addEventListener("DOMContentLoaded",(()=>{const t=document.querySelector("#ti-sdk-about");t&&(0,e.render)((0,e.createElement)(d,null),t)}))}();PK      \[      =  codeinwp/themeisle-sdk/assets/js/build/promos/index.asset.phpnu W+A        <?php return array('dependencies' => array('wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-plugins'), 'version' => 'bae1a40c3811e093a7be');
PK      \/Q=  Q=  6  codeinwp/themeisle-sdk/assets/js/build/promos/index.jsnu W+A        !function(){"use strict";var e,t={165:function(){var e=window.wp.element,t=window.wp.blockEditor,o=window.wp.components,n=window.wp.compose,i=window.wp.data,s=window.wp.hooks,r=()=>{const{createNotice:t}=(0,i.dispatch)("core/notices"),[o,n]=(0,e.useState)({}),[s,r]=(0,e.useState)("loading");return(0,i.useSelect)((e=>{if(Object.keys(o).length)return;const{getEntityRecord:t}=e("core"),i=t("root","site");i&&(r("loaded"),n(i))}),[]),[e=>null==o?void 0:o[e],async function(e,o){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Settings saved.";const s={[e]:o};try{const e=await fetch("/wp-json/wp/v2/settings",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpApiSettings.nonce},body:JSON.stringify(s)});e.ok||(r("error"),t("error","Could not save the settings.",{isDismissible:!0,type:"snackbar"}));const o=await e.json();r("loaded"),t("success",i,{isDismissible:!0,type:"snackbar"}),n(o)}catch(e){console.error("Error updating option:",e)}},s]};const a=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((o=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:()=>{o({success:!0})},error:e=>{o({success:!1,code:e.errorCode})}})}))},l=e=>new Promise((t=>{jQuery.get(e).done((()=>{t({success:!0})})).fail((()=>{t({success:!1})}))})),m=(e,t)=>{const o={};return Object.keys(t).forEach((function(e){"innerBlocks"!==e&&(o[e]=t[e])})),e.push(o),Array.isArray(t.innerBlocks)?(o.innerBlocks=t.innerBlocks.map((e=>e.id)),t.innerBlocks.reduce(m,e)):e},c={button:{display:"flex",justifyContent:"center",width:"100%"},image:{padding:"20px 0"},skip:{container:{display:"flex",flexDirection:"column",alignItems:"center"},button:{fontSize:"9px"},poweredby:{fontSize:"9px",textTransform:"uppercase"}}},d={"blocks-css":{title:"Custom CSS",description:"Enable Otter Blocks to add Custom CSS for this block.",image:"css.jpg"},"blocks-animation":{title:"Animations",description:"Enable Otter Blocks to add Animations for this block.",image:"animation.jpg"},"blocks-conditions":{title:"Visibility Conditions",description:"Enable Otter Blocks to add Visibility Conditions for this block.",image:"conditions.jpg"}},u=t=>{let{onClick:n}=t;return(0,e.createElement)("div",{style:c.skip.container},(0,e.createElement)(o.Button,{style:c.skip.button,variant:"tertiary",onClick:n},"Skip for now"),(0,e.createElement)("span",{style:c.skip.poweredby},"Recommended by ",window.themeisleSDKPromotions.product))},p=(0,n.createHigherOrderComponent)((n=>i=>{if(i.isSelected&&Boolean(window.themeisleSDKPromotions.showPromotion)){const[s,m]=(0,e.useState)(!1),[p,h]=(0,e.useState)("default"),[w,g]=(0,e.useState)(!1),[f,E,y]=r(),k=async()=>{m(!0),await a("otter-blocks"),E("themeisle_sdk_promotions_otter_installed",!Boolean(f("themeisle_sdk_promotions_otter_installed"))),await l(window.themeisleSDKPromotions.otterActivationUrl),m(!1),h("installed")},S=()=>"installed"===p?(0,e.createElement)("p",null,(0,e.createElement)("strong",null,"Awesome! Refresh the page to see Otter Blocks in action.")):(0,e.createElement)(o.Button,{variant:"secondary",onClick:k,isBusy:s,style:c.button},"Install & Activate Otter Blocks"),P=()=>{const e={...window.themeisleSDKPromotions.option};e[window.themeisleSDKPromotions.showPromotion]=(new Date).getTime()/1e3|0,E("themeisle_sdk_promotions",JSON.stringify(e)),window.themeisleSDKPromotions.showPromotion=!1};return(0,e.useEffect)((()=>{w&&P()}),[w]),w?(0,e.createElement)(n,i):(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n,i),(0,e.createElement)(t.InspectorControls,null,Object.keys(d).map((t=>{if(t===window.themeisleSDKPromotions.showPromotion){const n=d[t];return(0,e.createElement)(o.PanelBody,{key:t,title:n.title,initialOpen:!1},(0,e.createElement)("p",null,n.description),(0,e.createElement)(S,null),(0,e.createElement)("img",{style:c.image,src:window.themeisleSDKPromotions.assets+n.image}),(0,e.createElement)(u,{onClick:()=>g(!0)}))}}))))}return(0,e.createElement)(n,i)}),"withInspectorControl");(0,i.select)("core/edit-site")||(0,s.addFilter)("editor.BlockEdit","themeisle-sdk/with-inspector-controls",p);var h=window.wp.plugins,w=window.wp.editPost;function g(t){let{stacked:n=!1,noImage:i=!1,type:s,onDismiss:m,onSuccess:c,initialStatus:d=null}=t;const{assets:u,title:p,email:h,option:w,optionKey:g,optimoleActivationUrl:f,optimoleApi:E,optimoleDash:y,nonce:k}=window.themeisleSDKPromotions,[S,P]=(0,e.useState)(!1),[v,b]=(0,e.useState)(h||""),[D,B]=(0,e.useState)(!1),[O,N]=(0,e.useState)(d),[_,K]=r(),A=async()=>{B(!0);const e={...w};e[s]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await K(g,JSON.stringify(e)),m&&m()},C=()=>{P(!S)},x=e=>{b(e.target.value)},I=async e=>{e.preventDefault(),N("installing"),await a("optimole-wp"),N("activating"),await l(f),K("themeisle_sdk_promotions_optimole_installed",!Boolean(_("themeisle_sdk_promotions_optimole_installed"))),N("connecting");try{await fetch(E,{method:"POST",headers:{"X-WP-Nonce":k,"Content-Type":"application/json"},body:JSON.stringify({email:v})}),c&&c(),N("done")}catch(e){N("done")}};if(D)return null;const j=()=>"done"===O?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null,"Awesome! You are all set!"),(0,e.createElement)(o.Button,{icon:"external",isPrimary:!0,href:y,target:"_blank"},"Go to Optimole dashboard")):O?(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===O&&"Installing","activating"===O&&"Activating","connecting"===O&&"Connecting to API","…")):(0,e.createElement)(e.Fragment,null,(0,e.createElement)("span",null,"Enter your email address to create & connect your account"),(0,e.createElement)("form",{onSubmit:I},(0,e.createElement)("input",{defaultValue:v,type:"email",onChange:x,placeholder:"Email address"}),(0,e.createElement)(o.Button,{isPrimary:!0,type:"submit"},"Start using Optimole"))),F=()=>(0,e.createElement)(o.Button,{disabled:O&&"done"!==O,onClick:A,isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice."));return n?(0,e.createElement)("div",{className:"ti-om-stack-wrap"},(0,e.createElement)("div",{className:"om-stack-notice"},F(),(0,e.createElement)("img",{src:u+"/optimole-logo.svg",alt:"Optimole logo"}),(0,e.createElement)("h2",null,"Get more with Optimole"),(0,e.createElement)("p",null,"om-editor"===s||"om-image-block"===s?"Increase this page speed and SEO ranking by optimizing images with Optimole.":"Leverage Optimole's full integration with Elementor to automatically lazyload, resize, compress to AVIF/WebP and deliver from 400 locations around the globe!"),!S&&"done"!==O&&(0,e.createElement)(o.Button,{isPrimary:!0,onClick:C,className:"cta"},"Get Started Free"),(S||"done"===O)&&j(),(0,e.createElement)("i",null,p))):(0,e.createElement)(e.Fragment,null,F(),(0,e.createElement)("div",{className:"content"},!i&&(0,e.createElement)("img",{src:u+"/optimole-logo.svg",alt:"Optimole logo"}),(0,e.createElement)("div",null,(0,e.createElement)("p",null,p),(0,e.createElement)("p",{className:"description"},"om-media"===s?"Save your server space by storing images to Optimole and deliver them optimized from 400 locations around the globe. Unlimited images, Unlimited traffic.":"This image looks to be too large and would affect your site speed, we recommend you to install Optimole to optimize your images."),!S&&(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(o.Button,{isPrimary:!0,onClick:C},"Get Started Free"),(0,e.createElement)(o.Button,{isLink:!0,target:"_blank",href:"https://wordpress.org/plugins/optimole-wp"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))),S&&(0,e.createElement)("div",{className:"form-wrap"},j()))))}const f=()=>{const[t,o]=(0,e.useState)(!0),{getBlocks:n}=(0,i.useSelect)((e=>{const{getBlocks:t}=e("core/block-editor");return{getBlocks:t}}));var s;if((s=n(),"core/image",s.reduce(m,[]).filter((e=>"core/image"===e.name))).length<2)return null;const r="ti-sdk-optimole-post-publish "+(t?"":"hidden");return(0,e.createElement)(w.PluginPostPublishPanel,{className:r},(0,e.createElement)(g,{stacked:!0,type:"om-editor",onDismiss:()=>{o(!1)}}))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(this.debug)this.runAll();else switch(this.promo){case"om-attachment":this.runAttachmentPromo();break;case"om-media":this.runMediaPromo();break;case"om-editor":this.runEditorPromo();break;case"om-image-block":this.runImageBlockPromo();break;case"om-elementor":this.runElementorPromo()}}runAttachmentPromo(){wp.media.view.Attachment.Details.prototype.on("ready",(()=>{setTimeout((()=>{this.removeAttachmentPromo(),this.addAttachmentPromo()}),100)})),wp.media.view.Modal.prototype.on("close",(()=>{setTimeout(this.removeAttachmentPromo,100)}))}runMediaPromo(){if(window.themeisleSDKPromotions.option["om-media"])return;const t=document.querySelector("#ti-optml-notice");t&&(0,e.render)((0,e.createElement)(g,{type:"om-media",onDismiss:()=>{t.style.opacity=0}}),t)}runImageBlockPromo(){if(window.themeisleSDKPromotions.option["om-image-block"])return;let o=!0,i=null;const r=(0,n.createHigherOrderComponent)((n=>s=>"core/image"===s.name&&o?(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n,s),(0,e.createElement)(t.InspectorControls,null,(0,e.createElement)(g,{stacked:!0,type:"om-image-block",initialStatus:i,onDismiss:()=>{o=!1},onSuccess:()=>{i="done"}}))):(0,e.createElement)(n,s)),"withImagePromo");(0,s.addFilter)("editor.BlockEdit","optimole-promo/image-promo",r,99)}runEditorPromo(){window.themeisleSDKPromotions.option["om-editor"]||(0,h.registerPlugin)("optimole-promo",{render:f})}runElementorPromo(){if(!window.elementor)return;const t=this;elementor.on("preview:loaded",(()=>{elementor.panel.currentView.on("set:page:editor",(o=>{t.domRef&&(0,e.unmountComponentAtNode)(t.domRef),o.activeSection&&"section_image"===o.activeSection&&t.runElementorActions(t)}))}))}addAttachmentPromo(){if(this.domRef&&(0,e.unmountComponentAtNode)(this.domRef),window.themeisleSDKPromotions.option["om-attachment"])return;const t=document.querySelector("#ti-optml-notice-helper");t&&(this.domRef=t,(0,e.render)((0,e.createElement)("div",{className:"notice notice-info ti-sdk-om-notice",style:{margin:0}},(0,e.createElement)(g,{noImage:!0,type:"om-attachment",onDismiss:()=>{t.style.opacity=0}})),t))}removeAttachmentPromo(){const t=document.querySelector("#ti-optml-notice-helper");t&&(0,e.unmountComponentAtNode)(t)}runElementorActions(t){if(window.themeisleSDKPromotions.option["om-elementor"])return;const o=document.querySelector("#elementor-panel__editor__help"),n=document.createElement("div");n.id="ti-optml-notice",t.domRef=n,o&&(o.parentNode.insertBefore(n,o),(0,e.render)((0,e.createElement)(g,{stacked:!0,type:"om-elementor",onDismiss:()=>{n.style.opacity=0}}),n))}runAll(){this.runAttachmentPromo(),this.runMediaPromo(),this.runEditorPromo(),this.runImageBlockPromo(),this.runElementorPromo()}};const E=t=>{let{onDismiss:n=(()=>{})}=t;const[i,s]=(0,e.useState)(""),[m,c]=r();return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o.Button,{disabled:"installing"===i,onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["rop-posts"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await c(window.themeisleSDKPromotions.optionKey,JSON.stringify(e)),n&&n()},variant:"link",className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice.")),(0,e.createElement)("p",null,"Boost your content's reach effortlessly! Introducing ",(0,e.createElement)("b",null,"Revive Old Posts"),", a cutting-edge plugin from the makers of ",window.themeisleSDKPromotions.product,". Seamlessly auto-share old & new content across social media, driving traffic like never before."),(0,e.createElement)("div",{className:"rop-notice-actions"},"installed"!==i?(0,e.createElement)(o.Button,{variant:"primary",isBusy:"installing"===i,onClick:async()=>{s("installing"),await a("tweet-old-post"),await l(window.themeisleSDKPromotions.ropActivationUrl),c("themeisle_sdk_promotions_rop_installed",!Boolean(m("themeisle_sdk_promotions_rop_installed"))),s("installed")}},"Install & Activate"):(0,e.createElement)(o.Button,{variant:"primary",href:window.themeisleSDKPromotions.ropDash},"Visit Dashboard"),(0,e.createElement)(o.Button,{variant:"link",target:"_blank",href:"https://wordpress.org/plugins/tweet-old-post/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["rop-posts"])return;const t=document.querySelector("#ti-rop-notice");t&&(0,e.render)((0,e.createElement)(E,{onDismiss:()=>{t.style.display="none"}}),t)}};const y=t=>{let{onDismiss:n=(()=>{})}=t;const[i,s]=r(),{neveFSEMoreUrl:a}=window.themeisleSDKPromotions;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o.Button,{onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["neve-fse-themes-popular"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await s(window.themeisleSDKPromotions.optionKey,JSON.stringify(e)),n&&n()},className:"notice-dismiss"},(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice.")),(0,e.createElement)("p",null,"Meet ",(0,e.createElement)("b",null,"Neve FSE")," from the makers of ",window.themeisleSDKPromotions.product,". A theme that makes full site editing on WordPress straightforward and user-friendly."),(0,e.createElement)("div",{className:"neve-fse-notice-actions"},(0,e.createElement)(o.Button,{variant:"link",target:"_blank",href:a},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["neve-fse-themes-popular"])return;const t=document.querySelector("#ti-neve-fse-notice");t&&(0,e.render)((0,e.createElement)(y,{onDismiss:()=>{t.style.display="none"}}),t)}}}},o={};function n(e){var i=o[e];if(void 0!==i)return i.exports;var s=o[e]={exports:{}};return t[e](s,s.exports,n),s.exports}n.m=t,e=[],n.O=function(t,o,i,s){if(!o){var r=1/0;for(c=0;c<e.length;c++){o=e[c][0],i=e[c][1],s=e[c][2];for(var a=!0,l=0;l<o.length;l++)(!1&s||r>=s)&&Object.keys(n.O).every((function(e){return n.O[e](o[l])}))?o.splice(l--,1):(a=!1,s<r&&(r=s));if(a){e.splice(c--,1);var m=i();void 0!==m&&(t=m)}}return t}s=s||0;for(var c=e.length;c>0&&e[c-1][2]>s;c--)e[c]=e[c-1];e[c]=[o,i,s]},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={826:0,431:0};n.O.j=function(t){return 0===e[t]};var t=function(t,o){var i,s,r=o[0],a=o[1],l=o[2],m=0;if(r.some((function(t){return 0!==e[t]}))){for(i in a)n.o(a,i)&&(n.m[i]=a[i]);if(l)var c=l(n)}for(t&&t(o);m<r.length;m++)s=r[m],n.o(e,s)&&e[s]&&e[s][0](),e[s]=0;return n.O(c)},o=self.webpackChunkthemeisle_sdk=self.webpackChunkthemeisle_sdk||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))}();var i=n.O(void 0,[431],(function(){return n(165)}));i=n.O(i)}();PK      \NVε    =  codeinwp/themeisle-sdk/assets/js/build/promos/style-index.cssnu W+A        .ti-sdk-om-notice{--wp-admin-theme-color: #3858E9;--wp-admin-theme-color-darker-10: #2e47ba;position:relative;padding:0;border-left-color:#3858e9}.ti-sdk-om-notice .content{background:rgba(255,255,255,.75);display:flex;align-items:center;padding:15px 20px}.ti-sdk-om-notice img{max-width:100px;margin-right:20px;display:none}.ti-sdk-om-notice .description{font-size:14px;margin-bottom:20px;color:#000}.ti-sdk-om-notice .actions{margin-top:auto;display:flex;margin-bottom:0;gap:20px}.ti-sdk-om-notice form{display:flex;align-items:center;gap:10px}.ti-sdk-om-notice .form-wrap{display:grid}.ti-sdk-om-notice .form-wrap span:not(.dashicons){margin-bottom:5px;font-weight:500}.ti-sdk-om-notice input{border-radius:0;min-width:250px}.ti-sdk-om-notice a.components-button{display:flex;align-items:center;justify-content:center}.ti-sdk-om-notice .is-link{text-decoration:none;display:flex;align-items:center}.ti-sdk-om-notice .is-link span{line-height:normal}.ti-sdk-om-notice .dashicons{margin-right:2px;text-decoration:none}.ti-sdk-om-notice .done{display:flex;flex-direction:column;align-items:flex-start}.ti-sdk-om-notice .done a{width:auto}.compat-field-optimole th{display:none !important}.compat-field-optimole td{width:100% !important}.compat-field-optimole .ti-sdk-om-notice{margin:0}.om-notice-dismiss{right:10px;top:10px;text-decoration:none !important;position:absolute}.om-notice-dismiss:before{content:none}.ti-om-stack-wrap .om-stack-notice{--wp-admin-theme-color: #3858E9;--wp-admin-theme-color-darker-10: #2e47ba;display:flex;flex-direction:column;align-items:center;position:relative;text-align:center;padding:20px 10px}.ti-om-stack-wrap .om-stack-notice>span{display:none}.ti-om-stack-wrap .om-stack-notice img{max-width:90px !important}.ti-om-stack-wrap .om-stack-notice h2{font-size:18px;margin:30px auto 10px;font-weight:600}.ti-om-stack-wrap .om-stack-notice p{font-size:13px;max-width:250px;margin:0 auto;line-height:17px}.ti-om-stack-wrap .om-stack-notice i{margin-top:10px;font-size:12px;color:#757575}.ti-om-stack-wrap .om-stack-notice .cta{margin:20px auto 0;padding:10px 25px !important}.ti-om-stack-wrap .om-stack-notice .om-notice-dismiss{color:inherit}.ti-om-stack-wrap .om-stack-notice input{border-radius:0}.ti-om-stack-wrap .om-stack-notice form{place-items:center;width:75%;display:grid;margin-top:10px;gap:10px}.ti-om-stack-wrap .om-stack-notice .done{margin-top:15px;display:grid;gap:10px}.ti-om-stack-wrap .om-stack-notice .done p{font-size:15px;font-weight:500}.ti-om-stack-wrap .om-stack-notice .om-progress{margin:20px 0}.block-editor-block-inspector .ti-om-stack-wrap{border-top:1px solid #e0e0e0}.om-progress{gap:5px;font-size:14px;display:flex;align-items:center}.om-progress .spin{animation:om-rotation 2s infinite linear}@keyframes om-rotation{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ti-sdk-om-promo.hidden{display:none}.media-sidebar .ti-sdk-om-notice input{min-width:unset;flex-grow:1}.media-sidebar .ti-sdk-om-notice .description{margin-bottom:10px}.media-sidebar .ti-sdk-om-notice .content{padding:15px 10px}.media-sidebar .ti-sdk-om-notice .actions{gap:10px}.media-sidebar .ti-sdk-om-notice form{flex-wrap:wrap;justify-content:center}.attachment-info .ti-sdk-om-notice input{min-width:unset;flex-grow:1}.attachment-info .ti-sdk-om-notice form{flex-wrap:wrap;justify-content:center}.ti-sdk-rop-notice{position:relative;padding:10px}.ti-sdk-rop-notice .rop-notice-actions{display:flex;gap:10px}.ti-sdk-rop-notice p{padding:0 10px 0 0}.ti-sdk-neve-fse-notice{position:relative;padding:10px}.ti-sdk-neve-fse-notice .neve-fse-notice-actions{display:flex;gap:10px}.ti-sdk-neve-fse-notice .neve-fse-notice-actions a{text-decoration:none}.ti-sdk-neve-fse-notice .neve-fse-notice-actions a span:not(.dashicons){text-decoration:underline}.ti-sdk-neve-fse-notice p{padding:0 10px 0 0;font-size:14px}@media screen and (min-width: 768px){.ti-sdk-om-notice img{display:block}}@media screen and (min-width: 1200px){.attachment-info .ti-sdk-om-notice form{flex-wrap:unset}}
PK      \T   T   B  codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.asset.phpnu W+A        <?php return array('dependencies' => array(), 'version' => 'bacc1f000efc9f479fc0');
PK      \YF    ;  codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.jsnu W+A        !function(){var e={705:function(e){e.exports=function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){if(i)return i(s,!0);throw new Error("Cannot find module '"+s+"'")}u=n[s]={exports:{}},t[s][0].call(u.exports,(function(e){return o(t[s][1][e]||e)}),u,u.exports,e,t,n,r)}return n[s].exports}for(var i=void 0,s=0;s<r.length;s++)o(r[s]);return o}({1:[function(e,t,n){(function(r,o,i,s,u,a,f,l,c){"use strict";var d=e("crypto");function h(e,t){var n;return void 0===(n="passthrough"!==(t=y(e,t)).algorithm?d.createHash(t.algorithm):new v).write&&(n.write=n.update,n.end=n.update),b(t,n).dispatch(e),n.update||n.end(""),n.digest?n.digest("buffer"===t.encoding?void 0:t.encoding):(e=n.read(),"buffer"!==t.encoding?e.toString(t.encoding):e)}(n=t.exports=h).sha1=function(e){return h(e)},n.keys=function(e){return h(e,{excludeValues:!0,algorithm:"sha1",encoding:"hex"})},n.MD5=function(e){return h(e,{algorithm:"md5",encoding:"hex"})},n.keysMD5=function(e){return h(e,{algorithm:"md5",encoding:"hex",excludeValues:!0})};var p=d.getHashes?d.getHashes().slice():["sha1","md5"],g=(p.push("passthrough"),["buffer","hex","binary","base64"]);function y(e,t){var n={};if(n.algorithm=(t=t||{}).algorithm||"sha1",n.encoding=t.encoding||"hex",n.excludeValues=!!t.excludeValues,n.algorithm=n.algorithm.toLowerCase(),n.encoding=n.encoding.toLowerCase(),n.ignoreUnknown=!0===t.ignoreUnknown,n.respectType=!1!==t.respectType,n.respectFunctionNames=!1!==t.respectFunctionNames,n.respectFunctionProperties=!1!==t.respectFunctionProperties,n.unorderedArrays=!0===t.unorderedArrays,n.unorderedSets=!1!==t.unorderedSets,n.unorderedObjects=!1!==t.unorderedObjects,n.replacer=t.replacer||void 0,n.excludeKeys=t.excludeKeys||void 0,void 0===e)throw new Error("Object argument required.");for(var r=0;r<p.length;++r)p[r].toLowerCase()===n.algorithm.toLowerCase()&&(n.algorithm=p[r]);if(-1===p.indexOf(n.algorithm))throw new Error('Algorithm "'+n.algorithm+'"  not supported. supported values: '+p.join(", "));if(-1===g.indexOf(n.encoding)&&"passthrough"!==n.algorithm)throw new Error('Encoding "'+n.encoding+'"  not supported. supported values: '+g.join(", "));return n}function w(e){if("function"==typeof e)return null!=/^function\s+\w*\s*\(\s*\)\s*{\s+\[native code\]\s+}$/i.exec(Function.prototype.toString.call(e))}function b(e,t,n){function r(e){return t.update?t.update(e,"utf8"):t.write(e,"utf8")}return n=n||[],{dispatch:function(t){return this["_"+(null===(t=e.replacer?e.replacer(t):t)?"null":typeof t)](t)},_object:function(t){var o,s=Object.prototype.toString.call(t),u=/\[object (.*)\]/i.exec(s);if(u=(u=u?u[1]:"unknown:["+s+"]").toLowerCase(),0<=(s=n.indexOf(t)))return this.dispatch("[CIRCULAR:"+s+"]");if(n.push(t),void 0!==i&&i.isBuffer&&i.isBuffer(t))return r("buffer:"),r(t);if("object"===u||"function"===u||"asyncfunction"===u)return s=Object.keys(t),e.unorderedObjects&&(s=s.sort()),!1===e.respectType||w(t)||s.splice(0,0,"prototype","__proto__","constructor"),e.excludeKeys&&(s=s.filter((function(t){return!e.excludeKeys(t)}))),r("object:"+s.length+":"),o=this,s.forEach((function(n){o.dispatch(n),r(":"),e.excludeValues||o.dispatch(t[n]),r(",")}));if(!this["_"+u]){if(e.ignoreUnknown)return r("["+u+"]");throw new Error('Unknown object type "'+u+'"')}this["_"+u](t)},_array:function(t,o){o=void 0!==o?o:!1!==e.unorderedArrays;var i=this;if(r("array:"+t.length+":"),!o||t.length<=1)return t.forEach((function(e){return i.dispatch(e)}));var s=[];return o=t.map((function(t){var r=new v,o=n.slice();return b(e,r,o).dispatch(t),s=s.concat(o.slice(n.length)),r.read().toString()})),n=n.concat(s),o.sort(),this._array(o,!1)},_date:function(e){return r("date:"+e.toJSON())},_symbol:function(e){return r("symbol:"+e.toString())},_error:function(e){return r("error:"+e.toString())},_boolean:function(e){return r("bool:"+e.toString())},_string:function(e){r("string:"+e.length+":"),r(e.toString())},_function:function(t){r("fn:"),w(t)?this.dispatch("[native]"):this.dispatch(t.toString()),!1!==e.respectFunctionNames&&this.dispatch("function-name:"+String(t.name)),e.respectFunctionProperties&&this._object(t)},_number:function(e){return r("number:"+e.toString())},_xml:function(e){return r("xml:"+e.toString())},_null:function(){return r("Null")},_undefined:function(){return r("Undefined")},_regexp:function(e){return r("regex:"+e.toString())},_uint8array:function(e){return r("uint8array:"),this.dispatch(Array.prototype.slice.call(e))},_uint8clampedarray:function(e){return r("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(e))},_int8array:function(e){return r("int8array:"),this.dispatch(Array.prototype.slice.call(e))},_uint16array:function(e){return r("uint16array:"),this.dispatch(Array.prototype.slice.call(e))},_int16array:function(e){return r("int16array:"),this.dispatch(Array.prototype.slice.call(e))},_uint32array:function(e){return r("uint32array:"),this.dispatch(Array.prototype.slice.call(e))},_int32array:function(e){return r("int32array:"),this.dispatch(Array.prototype.slice.call(e))},_float32array:function(e){return r("float32array:"),this.dispatch(Array.prototype.slice.call(e))},_float64array:function(e){return r("float64array:"),this.dispatch(Array.prototype.slice.call(e))},_arraybuffer:function(e){return r("arraybuffer:"),this.dispatch(new Uint8Array(e))},_url:function(e){return r("url:"+e.toString())},_map:function(t){return r("map:"),t=Array.from(t),this._array(t,!1!==e.unorderedSets)},_set:function(t){return r("set:"),t=Array.from(t),this._array(t,!1!==e.unorderedSets)},_file:function(e){return r("file:"),this.dispatch([e.name,e.size,e.type,e.lastModfied])},_blob:function(){if(e.ignoreUnknown)return r("[blob]");throw Error('Hashing Blob objects is currently not supported\n(see https://github.com/puleos/object-hash/issues/26)\nUse "options.replacer" or "options.ignoreUnknown"\n')},_domwindow:function(){return r("domwindow")},_bigint:function(e){return r("bigint:"+e.toString())},_process:function(){return r("process")},_timer:function(){return r("timer")},_pipe:function(){return r("pipe")},_tcp:function(){return r("tcp")},_udp:function(){return r("udp")},_tty:function(){return r("tty")},_statwatcher:function(){return r("statwatcher")},_securecontext:function(){return r("securecontext")},_connection:function(){return r("connection")},_zlib:function(){return r("zlib")},_context:function(){return r("context")},_nodescript:function(){return r("nodescript")},_httpparser:function(){return r("httpparser")},_dataview:function(){return r("dataview")},_signal:function(){return r("signal")},_fsevent:function(){return r("fsevent")},_tlswrap:function(){return r("tlswrap")}}}function v(){return{buf:"",write:function(e){this.buf+=e},end:function(e){this.buf+=e},read:function(){return this.buf}}}n.writeToStream=function(e,t,n){return void 0===n&&(n=t,t={}),b(t=y(e,t),n).dispatch(e)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_9a5aa49d.js","/")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(e,t,n){(function(e,t,r,o,i,s,u,a,f){!function(e){"use strict";var t="undefined"!=typeof Uint8Array?Uint8Array:Array,n="+".charCodeAt(0),r="/".charCodeAt(0),o="0".charCodeAt(0),i="a".charCodeAt(0),s="A".charCodeAt(0),u="-".charCodeAt(0),a="_".charCodeAt(0);function f(e){return(e=e.charCodeAt(0))===n||e===u?62:e===r||e===a?63:e<o?-1:e<o+10?e-o+26+26:e<s+26?e-s:e<i+26?e-i+26:void 0}e.toByteArray=function(e){var n,r;if(0<e.length%4)throw new Error("Invalid string. Length must be a multiple of 4");var o=e.length,i=(o="="===e.charAt(o-2)?2:"="===e.charAt(o-1)?1:0,new t(3*e.length/4-o)),s=0<o?e.length-4:e.length,u=0;function a(e){i[u++]=e}for(n=0;n<s;n+=4,0)a((16711680&(r=f(e.charAt(n))<<18|f(e.charAt(n+1))<<12|f(e.charAt(n+2))<<6|f(e.charAt(n+3))))>>16),a((65280&r)>>8),a(255&r);return 2==o?a(255&(r=f(e.charAt(n))<<2|f(e.charAt(n+1))>>4)):1==o&&(a((r=f(e.charAt(n))<<10|f(e.charAt(n+1))<<4|f(e.charAt(n+2))>>2)>>8&255),a(255&r)),i},e.fromByteArray=function(e){var t,n,r,o,i=e.length%3,s="";function u(e){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e)}for(t=0,r=e.length-i;t<r;t+=3)s+=u((o=n=(e[t]<<16)+(e[t+1]<<8)+e[t+2])>>18&63)+u(o>>12&63)+u(o>>6&63)+u(63&o);switch(i){case 1:s=(s+=u((n=e[e.length-1])>>2))+u(n<<4&63)+"==";break;case 2:s=(s=(s+=u((n=(e[e.length-2]<<8)+e[e.length-1])>>10))+u(n>>4&63))+u(n<<2&63)+"="}return s}}(void 0===n?this.base64js={}:n)}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(e,t,n){(function(t,r,o,i,s,u,a,f,l){var c=e("base64-js"),d=e("ieee754");function o(e,t,n){if(!(this instanceof o))return new o(e,t,n);var r,i,s,u,a=typeof e;if("base64"===t&&"string"==a)for(e=(u=e).trim?u.trim():u.replace(/^\s+|\s+$/g,"");e.length%4!=0;)e+="=";if("number"==a)r=x(e);else if("string"==a)r=o.byteLength(e,t);else{if("object"!=a)throw new Error("First argument needs to be a number, array or string.");r=x(e.length)}if(o._useTypedArrays?i=o._augment(new Uint8Array(r)):((i=this).length=r,i._isBuffer=!0),o._useTypedArrays&&"number"==typeof e.byteLength)i._set(e);else if(S(u=e)||o.isBuffer(u)||u&&"object"==typeof u&&"number"==typeof u.length)for(s=0;s<r;s++)o.isBuffer(e)?i[s]=e.readUInt8(s):i[s]=e[s];else if("string"==a)i.write(e,0,t);else if("number"==a&&!o._useTypedArrays&&!n)for(s=0;s<r;s++)i[s]=0;return i}function h(e,t,n,r){var o;if(r||(Y("boolean"==typeof n,"missing or invalid endian"),Y(null!=t,"missing offset"),Y(t+1<e.length,"Trying to read beyond buffer length")),!((r=e.length)<=t))return n?(o=e[t],t+1<r&&(o|=e[t+1]<<8)):(o=e[t]<<8,t+1<r&&(o|=e[t+1])),o}function p(e,t,n,r){var o;if(r||(Y("boolean"==typeof n,"missing or invalid endian"),Y(null!=t,"missing offset"),Y(t+3<e.length,"Trying to read beyond buffer length")),!((r=e.length)<=t))return n?(t+2<r&&(o=e[t+2]<<16),t+1<r&&(o|=e[t+1]<<8),o|=e[t],t+3<r&&(o+=e[t+3]<<24>>>0)):(t+1<r&&(o=e[t+1]<<16),t+2<r&&(o|=e[t+2]<<8),t+3<r&&(o|=e[t+3]),o+=e[t]<<24>>>0),o}function g(e,t,n,r){if(r||(Y("boolean"==typeof n,"missing or invalid endian"),Y(null!=t,"missing offset"),Y(t+1<e.length,"Trying to read beyond buffer length")),!(e.length<=t))return 32768&(r=h(e,t,n,!0))?-1*(65535-r+1):r}function y(e,t,n,r){if(r||(Y("boolean"==typeof n,"missing or invalid endian"),Y(null!=t,"missing offset"),Y(t+3<e.length,"Trying to read beyond buffer length")),!(e.length<=t))return 2147483648&(r=p(e,t,n,!0))?-1*(4294967295-r+1):r}function w(e,t,n,r){return r||(Y("boolean"==typeof n,"missing or invalid endian"),Y(t+3<e.length,"Trying to read beyond buffer length")),d.read(e,t,n,23,4)}function b(e,t,n,r){return r||(Y("boolean"==typeof n,"missing or invalid endian"),Y(t+7<e.length,"Trying to read beyond buffer length")),d.read(e,t,n,52,8)}function v(e,t,n,r,o){if(o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+1<e.length,"trying to write beyond buffer length"),M(t,65535)),!((o=e.length)<=n))for(var i=0,s=Math.min(o-n,2);i<s;i++)e[n+i]=(t&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function m(e,t,n,r,o){if(o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+3<e.length,"trying to write beyond buffer length"),M(t,4294967295)),!((o=e.length)<=n))for(var i=0,s=Math.min(o-n,4);i<s;i++)e[n+i]=t>>>8*(r?i:3-i)&255}function _(e,t,n,r,o){o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+1<e.length,"Trying to write beyond buffer length"),N(t,32767,-32768)),e.length<=n||v(e,0<=t?t:65535+t+1,n,r,o)}function E(e,t,n,r,o){o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+3<e.length,"Trying to write beyond buffer length"),N(t,2147483647,-2147483648)),e.length<=n||m(e,0<=t?t:4294967295+t+1,n,r,o)}function I(e,t,n,r,o){o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+3<e.length,"Trying to write beyond buffer length"),F(t,34028234663852886e22,-34028234663852886e22)),e.length<=n||d.write(e,t,n,r,23,4)}function A(e,t,n,r,o){o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+7<e.length,"Trying to write beyond buffer length"),F(t,17976931348623157e292,-17976931348623157e292)),e.length<=n||d.write(e,t,n,r,52,8)}n.Buffer=o,n.SlowBuffer=o,n.INSPECT_MAX_BYTES=50,o.poolSize=8192,o._useTypedArrays=function(){try{var e=new ArrayBuffer(0),t=new Uint8Array(e);return t.foo=function(){return 42},42===t.foo()&&"function"==typeof t.subarray}catch(e){return!1}}(),o.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.isBuffer=function(e){return!(null==e||!e._isBuffer)},o.byteLength=function(e,t){var n;switch(e+="",t||"utf8"){case"hex":n=e.length/2;break;case"utf8":case"utf-8":n=k(e).length;break;case"ascii":case"binary":case"raw":n=e.length;break;case"base64":n=j(e).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":n=2*e.length;break;default:throw new Error("Unknown encoding")}return n},o.concat=function(e,t){if(Y(S(e),"Usage: Buffer.concat(list, [totalLength])\nlist should be an Array."),0===e.length)return new o(0);if(1===e.length)return e[0];if("number"!=typeof t)for(i=t=0;i<e.length;i++)t+=e[i].length;for(var n=new o(t),r=0,i=0;i<e.length;i++){var s=e[i];s.copy(n,r),r+=s.length}return n},o.prototype.write=function(e,t,n,r){isFinite(t)?isFinite(n)||(r=n,n=void 0):(f=r,r=t,t=n,n=f),t=Number(t)||0;var i,s,u,a,f=this.length-t;switch((!n||f<(n=Number(n)))&&(n=f),r=String(r||"utf8").toLowerCase()){case"hex":i=function(e,t,n,r){n=Number(n)||0;var i=e.length-n;(!r||i<(r=Number(r)))&&(r=i),Y((i=t.length)%2==0,"Invalid hex string"),i/2<r&&(r=i/2);for(var s=0;s<r;s++){var u=parseInt(t.substr(2*s,2),16);Y(!isNaN(u),"Invalid hex string"),e[n+s]=u}return o._charsWritten=2*s,s}(this,e,t,n);break;case"utf8":case"utf-8":s=this,u=t,a=n,i=o._charsWritten=T(k(e),s,u,a);break;case"ascii":case"binary":i=function(e,t,n,r){return o._charsWritten=T(function(e){for(var t=[],n=0;n<e.length;n++)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}(this,e,t,n);break;case"base64":s=this,u=t,a=n,i=o._charsWritten=T(j(e),s,u,a);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":i=function(e,t,n,r){return o._charsWritten=T(function(e){for(var t,n,r=[],o=0;o<e.length;o++)t=(n=e.charCodeAt(o))>>8,n%=256,r.push(n),r.push(t);return r}(t),e,n,r)}(this,e,t,n);break;default:throw new Error("Unknown encoding")}return i},o.prototype.toString=function(e,t,n){var r,o,i,s,u=this;if(e=String(e||"utf8").toLowerCase(),t=Number(t)||0,(n=void 0!==n?Number(n):u.length)===t)return"";switch(e){case"hex":r=function(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||r<n)&&(n=r);for(var o="",i=t;i<n;i++)o+=U(e[i]);return o}(u,t,n);break;case"utf8":case"utf-8":r=function(e,t,n){var r="",o="";n=Math.min(e.length,n);for(var i=t;i<n;i++)e[i]<=127?(r+=C(o)+String.fromCharCode(e[i]),o=""):o+="%"+e[i].toString(16);return r+C(o)}(u,t,n);break;case"ascii":case"binary":r=function(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;o++)r+=String.fromCharCode(e[o]);return r}(u,t,n);break;case"base64":o=u,s=n,r=0===(i=t)&&s===o.length?c.fromByteArray(o):c.fromByteArray(o.slice(i,s));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":r=function(e,t,n){for(var r=e.slice(t,n),o="",i=0;i<r.length;i+=2)o+=String.fromCharCode(r[i]+256*r[i+1]);return o}(u,t,n);break;default:throw new Error("Unknown encoding")}return r},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},o.prototype.copy=function(e,t,n,r){if(t=t||0,(r=r||0===r?r:this.length)!==(n=n||0)&&0!==e.length&&0!==this.length){Y(n<=r,"sourceEnd < sourceStart"),Y(0<=t&&t<e.length,"targetStart out of bounds"),Y(0<=n&&n<this.length,"sourceStart out of bounds"),Y(0<=r&&r<=this.length,"sourceEnd out of bounds"),r>this.length&&(r=this.length);var i=(r=e.length-t<r-n?e.length-t+n:r)-n;if(i<100||!o._useTypedArrays)for(var s=0;s<i;s++)e[s+t]=this[s+n];else e._set(this.subarray(n,n+i),t)}},o.prototype.slice=function(e,t){var n=this.length;if(e=L(e,n,0),t=L(t,n,n),o._useTypedArrays)return o._augment(this.subarray(e,t));for(var r=t-e,i=new o(r,void 0,!0),s=0;s<r;s++)i[s]=this[s+e];return i},o.prototype.get=function(e){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(e)},o.prototype.set=function(e,t){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(e,t)},o.prototype.readUInt8=function(e,t){if(t||(Y(null!=e,"missing offset"),Y(e<this.length,"Trying to read beyond buffer length")),!(e>=this.length))return this[e]},o.prototype.readUInt16LE=function(e,t){return h(this,e,!0,t)},o.prototype.readUInt16BE=function(e,t){return h(this,e,!1,t)},o.prototype.readUInt32LE=function(e,t){return p(this,e,!0,t)},o.prototype.readUInt32BE=function(e,t){return p(this,e,!1,t)},o.prototype.readInt8=function(e,t){if(t||(Y(null!=e,"missing offset"),Y(e<this.length,"Trying to read beyond buffer length")),!(e>=this.length))return 128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){return g(this,e,!0,t)},o.prototype.readInt16BE=function(e,t){return g(this,e,!1,t)},o.prototype.readInt32LE=function(e,t){return y(this,e,!0,t)},o.prototype.readInt32BE=function(e,t){return y(this,e,!1,t)},o.prototype.readFloatLE=function(e,t){return w(this,e,!0,t)},o.prototype.readFloatBE=function(e,t){return w(this,e,!1,t)},o.prototype.readDoubleLE=function(e,t){return b(this,e,!0,t)},o.prototype.readDoubleBE=function(e,t){return b(this,e,!1,t)},o.prototype.writeUInt8=function(e,t,n){n||(Y(null!=e,"missing value"),Y(null!=t,"missing offset"),Y(t<this.length,"trying to write beyond buffer length"),M(e,255)),t>=this.length||(this[t]=e)},o.prototype.writeUInt16LE=function(e,t,n){v(this,e,t,!0,n)},o.prototype.writeUInt16BE=function(e,t,n){v(this,e,t,!1,n)},o.prototype.writeUInt32LE=function(e,t,n){m(this,e,t,!0,n)},o.prototype.writeUInt32BE=function(e,t,n){m(this,e,t,!1,n)},o.prototype.writeInt8=function(e,t,n){n||(Y(null!=e,"missing value"),Y(null!=t,"missing offset"),Y(t<this.length,"Trying to write beyond buffer length"),N(e,127,-128)),t>=this.length||(0<=e?this.writeUInt8(e,t,n):this.writeUInt8(255+e+1,t,n))},o.prototype.writeInt16LE=function(e,t,n){_(this,e,t,!0,n)},o.prototype.writeInt16BE=function(e,t,n){_(this,e,t,!1,n)},o.prototype.writeInt32LE=function(e,t,n){E(this,e,t,!0,n)},o.prototype.writeInt32BE=function(e,t,n){E(this,e,t,!1,n)},o.prototype.writeFloatLE=function(e,t,n){I(this,e,t,!0,n)},o.prototype.writeFloatBE=function(e,t,n){I(this,e,t,!1,n)},o.prototype.writeDoubleLE=function(e,t,n){A(this,e,t,!0,n)},o.prototype.writeDoubleBE=function(e,t,n){A(this,e,t,!1,n)},o.prototype.fill=function(e,t,n){if(t=t||0,n=n||this.length,Y("number"==typeof(e="string"==typeof(e=e||0)?e.charCodeAt(0):e)&&!isNaN(e),"value is not a number"),Y(t<=n,"end < start"),n!==t&&0!==this.length){Y(0<=t&&t<this.length,"start out of bounds"),Y(0<=n&&n<=this.length,"end out of bounds");for(var r=t;r<n;r++)this[r]=e}},o.prototype.inspect=function(){for(var e=[],t=this.length,r=0;r<t;r++)if(e[r]=U(this[r]),r===n.INSPECT_MAX_BYTES){e[r+1]="...";break}return"<Buffer "+e.join(" ")+">"},o.prototype.toArrayBuffer=function(){if("undefined"==typeof Uint8Array)throw new Error("Buffer.toArrayBuffer not supported in this browser");if(o._useTypedArrays)return new o(this).buffer;for(var e=new Uint8Array(this.length),t=0,n=e.length;t<n;t+=1)e[t]=this[t];return e.buffer};var B=o.prototype;function L(e,t,n){return"number"!=typeof e?n:t<=(e=~~e)?t:0<=e||0<=(e+=t)?e:0}function x(e){return(e=~~Math.ceil(+e))<0?0:e}function S(e){return(Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)})(e)}function U(e){return e<16?"0"+e.toString(16):e.toString(16)}function k(e){for(var t=[],n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<=127)t.push(e.charCodeAt(n));else for(var o=n,i=(55296<=r&&r<=57343&&n++,encodeURIComponent(e.slice(o,n+1)).substr(1).split("%")),s=0;s<i.length;s++)t.push(parseInt(i[s],16))}return t}function j(e){return c.toByteArray(e)}function T(e,t,n,r){for(var o=0;o<r&&!(o+n>=t.length||o>=e.length);o++)t[o+n]=e[o];return o}function C(e){try{return decodeURIComponent(e)}catch(e){return String.fromCharCode(65533)}}function M(e,t){Y("number"==typeof e,"cannot write a non-number as a number"),Y(0<=e,"specified a negative value for writing an unsigned value"),Y(e<=t,"value is larger than maximum value for type"),Y(Math.floor(e)===e,"value has a fractional component")}function N(e,t,n){Y("number"==typeof e,"cannot write a non-number as a number"),Y(e<=t,"value larger than maximum allowed value"),Y(n<=e,"value smaller than minimum allowed value"),Y(Math.floor(e)===e,"value has a fractional component")}function F(e,t,n){Y("number"==typeof e,"cannot write a non-number as a number"),Y(e<=t,"value larger than maximum allowed value"),Y(n<=e,"value smaller than minimum allowed value")}function Y(e,t){if(!e)throw new Error(t||"Failed assertion")}o._augment=function(e){return e._isBuffer=!0,e._get=e.get,e._set=e.set,e.get=B.get,e.set=B.set,e.write=B.write,e.toString=B.toString,e.toLocaleString=B.toString,e.toJSON=B.toJSON,e.copy=B.copy,e.slice=B.slice,e.readUInt8=B.readUInt8,e.readUInt16LE=B.readUInt16LE,e.readUInt16BE=B.readUInt16BE,e.readUInt32LE=B.readUInt32LE,e.readUInt32BE=B.readUInt32BE,e.readInt8=B.readInt8,e.readInt16LE=B.readInt16LE,e.readInt16BE=B.readInt16BE,e.readInt32LE=B.readInt32LE,e.readInt32BE=B.readInt32BE,e.readFloatLE=B.readFloatLE,e.readFloatBE=B.readFloatBE,e.readDoubleLE=B.readDoubleLE,e.readDoubleBE=B.readDoubleBE,e.writeUInt8=B.writeUInt8,e.writeUInt16LE=B.writeUInt16LE,e.writeUInt16BE=B.writeUInt16BE,e.writeUInt32LE=B.writeUInt32LE,e.writeUInt32BE=B.writeUInt32BE,e.writeInt8=B.writeInt8,e.writeInt16LE=B.writeInt16LE,e.writeInt16BE=B.writeInt16BE,e.writeInt32LE=B.writeInt32LE,e.writeInt32BE=B.writeInt32BE,e.writeFloatLE=B.writeFloatLE,e.writeFloatBE=B.writeFloatBE,e.writeDoubleLE=B.writeDoubleLE,e.writeDoubleBE=B.writeDoubleBE,e.fill=B.fill,e.inspect=B.inspect,e.toArrayBuffer=B.toArrayBuffer,e}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){o=e("buffer").Buffer;var c=new o(4);c.fill(0),t.exports={hash:function(e,t,n,r){for(var i=t(function(e,t){e.length%4!=0&&(n=e.length+(4-e.length%4),e=o.concat([e,c],n));for(var n,r=[],i=t?e.readInt32BE:e.readInt32LE,s=0;s<e.length;s+=4)r.push(i.call(e,s));return r}(e=o.isBuffer(e)?e:new o(e),r),8*e.length),s=(t=r,new o(n)),u=t?s.writeInt32BE:s.writeInt32LE,a=0;a<i.length;a++)u.call(s,i[a],4*a,!0);return s}}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(e,t,n){(function(t,r,o,i,s,u,a,f,l){o=e("buffer").Buffer;var c=e("./sha"),d=e("./sha256"),h=e("./rng"),p={sha1:c,sha256:d,md5:e("./md5")},g=64,y=new o(g);function w(e,t){var n=p[e=e||"sha1"],r=[];return n||b("algorithm:",e,"is not yet supported"),{update:function(e){return o.isBuffer(e)||(e=new o(e)),r.push(e),e.length,this},digest:function(e){var i=o.concat(r);return i=t?function(e,t,n){o.isBuffer(t)||(t=new o(t)),o.isBuffer(n)||(n=new o(n)),t.length>g?t=e(t):t.length<g&&(t=o.concat([t,y],g));for(var r=new o(g),i=new o(g),s=0;s<g;s++)r[s]=54^t[s],i[s]=92^t[s];return n=e(o.concat([r,n])),e(o.concat([i,n]))}(n,t,i):n(i),r=null,e?i.toString(e):i}}}function b(){var e=[].slice.call(arguments).join(" ");throw new Error([e,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join("\n"))}y.fill(0),n.createHash=function(e){return w(e)},n.createHmac=w,n.randomBytes=function(e,t){if(!t||!t.call)return new o(h(e));try{t.call(this,void 0,new o(h(e)))}catch(e){t(e)}};var v,m=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],_=function(e){n[e]=function(){b("sorry,",e,"is not implemented yet")}};for(v in m)_(m[v])}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){var c=e("./helpers");function d(e,t){e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;for(var n=1732584193,r=-271733879,o=-1732584194,i=271733878,s=0;s<e.length;s+=16){var u=n,a=r,f=o,l=i;n=p(n,r,o,i,e[s+0],7,-680876936),i=p(i,n,r,o,e[s+1],12,-389564586),o=p(o,i,n,r,e[s+2],17,606105819),r=p(r,o,i,n,e[s+3],22,-1044525330),n=p(n,r,o,i,e[s+4],7,-176418897),i=p(i,n,r,o,e[s+5],12,1200080426),o=p(o,i,n,r,e[s+6],17,-1473231341),r=p(r,o,i,n,e[s+7],22,-45705983),n=p(n,r,o,i,e[s+8],7,1770035416),i=p(i,n,r,o,e[s+9],12,-1958414417),o=p(o,i,n,r,e[s+10],17,-42063),r=p(r,o,i,n,e[s+11],22,-1990404162),n=p(n,r,o,i,e[s+12],7,1804603682),i=p(i,n,r,o,e[s+13],12,-40341101),o=p(o,i,n,r,e[s+14],17,-1502002290),n=g(n,r=p(r,o,i,n,e[s+15],22,1236535329),o,i,e[s+1],5,-165796510),i=g(i,n,r,o,e[s+6],9,-1069501632),o=g(o,i,n,r,e[s+11],14,643717713),r=g(r,o,i,n,e[s+0],20,-373897302),n=g(n,r,o,i,e[s+5],5,-701558691),i=g(i,n,r,o,e[s+10],9,38016083),o=g(o,i,n,r,e[s+15],14,-660478335),r=g(r,o,i,n,e[s+4],20,-405537848),n=g(n,r,o,i,e[s+9],5,568446438),i=g(i,n,r,o,e[s+14],9,-1019803690),o=g(o,i,n,r,e[s+3],14,-187363961),r=g(r,o,i,n,e[s+8],20,1163531501),n=g(n,r,o,i,e[s+13],5,-1444681467),i=g(i,n,r,o,e[s+2],9,-51403784),o=g(o,i,n,r,e[s+7],14,1735328473),n=y(n,r=g(r,o,i,n,e[s+12],20,-1926607734),o,i,e[s+5],4,-378558),i=y(i,n,r,o,e[s+8],11,-2022574463),o=y(o,i,n,r,e[s+11],16,1839030562),r=y(r,o,i,n,e[s+14],23,-35309556),n=y(n,r,o,i,e[s+1],4,-1530992060),i=y(i,n,r,o,e[s+4],11,1272893353),o=y(o,i,n,r,e[s+7],16,-155497632),r=y(r,o,i,n,e[s+10],23,-1094730640),n=y(n,r,o,i,e[s+13],4,681279174),i=y(i,n,r,o,e[s+0],11,-358537222),o=y(o,i,n,r,e[s+3],16,-722521979),r=y(r,o,i,n,e[s+6],23,76029189),n=y(n,r,o,i,e[s+9],4,-640364487),i=y(i,n,r,o,e[s+12],11,-421815835),o=y(o,i,n,r,e[s+15],16,530742520),n=w(n,r=y(r,o,i,n,e[s+2],23,-995338651),o,i,e[s+0],6,-198630844),i=w(i,n,r,o,e[s+7],10,1126891415),o=w(o,i,n,r,e[s+14],15,-1416354905),r=w(r,o,i,n,e[s+5],21,-57434055),n=w(n,r,o,i,e[s+12],6,1700485571),i=w(i,n,r,o,e[s+3],10,-1894986606),o=w(o,i,n,r,e[s+10],15,-1051523),r=w(r,o,i,n,e[s+1],21,-2054922799),n=w(n,r,o,i,e[s+8],6,1873313359),i=w(i,n,r,o,e[s+15],10,-30611744),o=w(o,i,n,r,e[s+6],15,-1560198380),r=w(r,o,i,n,e[s+13],21,1309151649),n=w(n,r,o,i,e[s+4],6,-145523070),i=w(i,n,r,o,e[s+11],10,-1120210379),o=w(o,i,n,r,e[s+2],15,718787259),r=w(r,o,i,n,e[s+9],21,-343485551),n=b(n,u),r=b(r,a),o=b(o,f),i=b(i,l)}return Array(n,r,o,i)}function h(e,t,n,r,o,i){return b((t=b(b(t,e),b(r,i)))<<o|t>>>32-o,n)}function p(e,t,n,r,o,i,s){return h(t&n|~t&r,e,t,o,i,s)}function g(e,t,n,r,o,i,s){return h(t&r|n&~r,e,t,o,i,s)}function y(e,t,n,r,o,i,s){return h(t^n^r,e,t,o,i,s)}function w(e,t,n,r,o,i,s){return h(n^(t|~r),e,t,o,i,s)}function b(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}t.exports=function(e){return c.hash(e,d,16)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(e,t,n){(function(e,n,r,o,i,s,u,a,f){t.exports=function(e){for(var t,n=new Array(e),r=0;r<e;r++)0==(3&r)&&(t=4294967296*Math.random()),n[r]=t>>>((3&r)<<3)&255;return n}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){var c=e("./helpers");function d(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var n,r,o,i=Array(80),s=1732584193,u=-271733879,a=-1732584194,f=271733878,l=-1009589776,c=0;c<e.length;c+=16){for(var d=s,g=u,y=a,w=f,b=l,v=0;v<80;v++){i[v]=v<16?e[c+v]:p(i[v-3]^i[v-8]^i[v-14]^i[v-16],1);var m=h(h(p(s,5),(m=u,r=a,o=f,(n=v)<20?m&r|~m&o:!(n<40)&&n<60?m&r|m&o|r&o:m^r^o)),h(h(l,i[v]),(n=v)<20?1518500249:n<40?1859775393:n<60?-1894007588:-899497514));l=f,f=a,a=p(u,30),u=s,s=m}s=h(s,d),u=h(u,g),a=h(a,y),f=h(f,w),l=h(l,b)}return Array(s,u,a,f,l)}function h(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function p(e,t){return e<<t|e>>>32-t}t.exports=function(e){return c.hash(e,d,20,!0)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){function c(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function d(e,t){var n,r=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),o=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),i=new Array(64);e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var s,u,a=0;a<e.length;a+=16){for(var f=o[0],l=o[1],d=o[2],h=o[3],y=o[4],w=o[5],b=o[6],v=o[7],m=0;m<64;m++)i[m]=m<16?e[m+a]:c(c(c((u=i[m-2],p(u,17)^p(u,19)^g(u,10)),i[m-7]),(u=i[m-15],p(u,7)^p(u,18)^g(u,3))),i[m-16]),n=c(c(c(c(v,p(u=y,6)^p(u,11)^p(u,25)),y&w^~y&b),r[m]),i[m]),s=c(p(s=f,2)^p(s,13)^p(s,22),f&l^f&d^l&d),v=b,b=w,w=y,y=c(h,n),h=d,d=l,l=f,f=c(n,s);o[0]=c(f,o[0]),o[1]=c(l,o[1]),o[2]=c(d,o[2]),o[3]=c(h,o[3]),o[4]=c(y,o[4]),o[5]=c(w,o[5]),o[6]=c(b,o[6]),o[7]=c(v,o[7])}return o}var h=e("./helpers"),p=function(e,t){return e>>>t|e<<32-t},g=function(e,t){return e>>>t};t.exports=function(e){return h.hash(e,d,32,!0)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(e,t,n){(function(e,t,r,o,i,s,u,a,f){n.read=function(e,t,n,r,o){var i,s,u=8*o-r-1,a=(1<<u)-1,f=a>>1,l=-7,c=n?o-1:0,d=n?-1:1;for(o=e[t+c],c+=d,i=o&(1<<-l)-1,o>>=-l,l+=u;0<l;i=256*i+e[t+c],c+=d,l-=8);for(s=i&(1<<-l)-1,i>>=-l,l+=r;0<l;s=256*s+e[t+c],c+=d,l-=8);if(0===i)i=1-f;else{if(i===a)return s?NaN:1/0*(o?-1:1);s+=Math.pow(2,r),i-=f}return(o?-1:1)*s*Math.pow(2,i-r)},n.write=function(e,t,n,r,o,i){var s,u,a=8*i-o-1,f=(1<<a)-1,l=f>>1,c=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:i-1,h=r?1:-1;for(i=t<0||0===t&&1/t<0?1:0,t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,s=f):(s=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-s))<1&&(s--,r*=2),2<=(t+=1<=s+l?c/r:c*Math.pow(2,1-l))*r&&(s++,r/=2),f<=s+l?(u=0,s=f):1<=s+l?(u=(t*r-1)*Math.pow(2,o),s+=l):(u=t*Math.pow(2,l-1)*Math.pow(2,o),s=0));8<=o;e[n+d]=255&u,d+=h,u/=256,o-=8);for(s=s<<o|u,a+=o;0<a;e[n+d]=255&s,d+=h,s/=256,a-=8);e[n+d-h]|=128*i}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/ieee754/index.js","/node_modules/gulp-browserify/node_modules/ieee754")},{buffer:3,lYpoI2:11}],11:[function(e,t,n){(function(e,n,r,o,i,s,u,a,f){var l,c,d;function h(){}(e=t.exports={}).nextTick=(c="undefined"!=typeof window&&window.setImmediate,d="undefined"!=typeof window&&window.postMessage&&window.addEventListener,c?function(e){return window.setImmediate(e)}:d?(l=[],window.addEventListener("message",(function(e){var t=e.source;t!==window&&null!==t||"process-tick"!==e.data||(e.stopPropagation(),0<l.length&&l.shift()())}),!0),function(e){l.push(e),window.postMessage("process-tick","*")}):function(e){setTimeout(e,0)}),e.title="browser",e.browser=!0,e.env={},e.argv=[],e.on=h,e.addListener=h,e.once=h,e.off=h,e.removeListener=h,e.removeAllListeners=h,e.emit=h,e.binding=function(e){throw new Error("process.binding is not supported")},e.cwd=function(){return"/"},e.chdir=function(e){throw new Error("process.chdir is not supported")}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/process/browser.js","/node_modules/gulp-browserify/node_modules/process")},{buffer:3,lYpoI2:11}]},{},[1])(1)}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){"use strict";function e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var t,r,o,i=n(705),s=n.n(i);const u=e=>{var t,n;const r=null==e||null===(t=e.filter((e=>null==e?void 0:e[0])))||void 0===t?void 0:t[0];return null!==(n=null==r?void 0:r[1])&&void 0!==n?n:null==r?void 0:r[0]};class a{constructor(){var t,n;e(this,"_set",((e,t,n)=>{if(!this.hasProduct(t.slug))return;if(!(null!=n&&n.consent||this.getProductConsent(t.slug)))return;if(!this.validate(t))return;const r=null!=n&&n.directSave?t:this.trkMetadata(t);this.events.set(e,r),null!=n&&n.refreshTimer&&this.refreshTimer(),null!=n&&n.sendNow?this.uploadEvents():null!=n&&n.ignoreLimit||this.sendIfLimitReached()})),e(this,"_add",((e,t)=>{const n=s()(e);return this._set(n.toString(),e,t),n.toString()})),e(this,"with",(e=>{const t={slug:e,...this.envInfo()};return{add:(e,n)=>this._add({...t,...e},n),set:(e,n,r)=>this._set(e,{...t,...n},r),base:this}})),e(this,"envInfo",(()=>({site:window.location.hostname}))),e(this,"uploadEvents",(async()=>{if(0!==this.events.size)try{const e=Array.from(this.events.values());this.events.clear();const t=await this.sendBulkTracking(e.map((e=>{let{slug:t,site:n,license:r,...o}=e;return{slug:t,site:n,license:r,data:o}})));t.ok||this.listeners.forEach((e=>e({success:!1,error:"Failed to send tracking events"})));const n=await t.json();this.listeners.forEach((e=>e({success:!0,response:n})))}catch(e){console.error(e)}})),e(this,"sendIfLimitReached",(()=>{if(this.events.size>=this.eventsLimit)return this.uploadEvents()})),e(this,"subscribe",(e=>(this.listeners.push(e),()=>{this.listeners=this.listeners.filter((t=>t!==e))}))),e(this,"hasConsent",(()=>this.consent)),e(this,"sendBulkTracking",(e=>fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}))),e(this,"trkMetadata",(e=>({env:u([[window.location.href.includes("customize.php"),"customizer"],[window.location.href.includes("site-editor.php"),"site-editor"],[window.location.href.includes("widgets.php"),"widgets"],[window.location.href.includes("admin.php"),"admin"],["post-editor"]]),license:this.getProductTackHash(e.slug),...null!=e?e:{}}))),e(this,"hasProduct",(e=>this.products.some((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))),e(this,"getProductTackHash",(e=>{var t;return null===(t=this.products.find((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))||void 0===t?void 0:t.trackHash})),e(this,"getProductConsent",(e=>{var t;return null===(t=this.products.find((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))||void 0===t?void 0:t.consent})),e(this,"start",(()=>{this.interval||(this.interval=window.setInterval((()=>{this.uploadEvents()}),this.autoSendIntervalTime))})),e(this,"stop",(()=>{this.interval&&(window.clearInterval(this.interval),this.interval=null)})),e(this,"refreshTimer",(()=>{this.stop(),this.start()})),e(this,"validate",(e=>"object"==typeof e?0!==Object.keys(e).length&&Object.values(e).every(this.validate):void 0!==e)),e(this,"clone",(()=>{const e=new a;return e.events=new Map(this.events),e.listeners=[...this.listeners],e.interval=this.interval,e.consent=this.consent,e.endpoint=this.endpoint,e})),this.events=new Map,this.eventsLimit=50,this.listeners=[],this.interval=null,this.consent=!1,this.endpoint=null===(t=tiTelemetry)||void 0===t?void 0:t.endpoint,this.products=null===(n=tiTelemetry)||void 0===n?void 0:n.products,this.autoSendIntervalTime=3e5}}window.tiTrk=new a,null===(t=window)||void 0===t||null===(r=t.wp)||void 0===r||null===(o=r.customize)||void 0===o||o.bind("save",(()=>{var e,t;null===(e=window)||void 0===e||null===(t=e.tiTrk)||void 0===t||t.uploadEvents()})),window.addEventListener("beforeunload",(async()=>{var e,t;null===(e=window)||void 0===e||null===(t=e.tiTrk)||void 0===t||t.uploadEvents()}))}()}();PK      \y&c  &c  r  codeinwp/themeisle-sdk/assets/js/build/class-wp-html-doctype-info-20260613154400-20260613171018-20260613171622.phpnu W+A        <?php
/**
 * HTML API: WP_HTML_Doctype_Info class
 *
 * @package WordPress
 * @subpackage HTML-API
 * @since 6.7.0
 */

/**
 * Core class used by the HTML API to represent a DOCTYPE declaration.
 *
 * This class parses DOCTYPE tokens for the full parser in the HTML Processor.
 * Most code interacting with HTML won't need to parse DOCTYPE declarations;
 * the HTML Processor is one exception. Consult the HTML Processor for proper
 * parsing of an HTML document.
 *
 * A DOCTYPE declaration may indicate its document compatibility mode, which impacts
 * the structure of the following HTML as well as the behavior of CSS class selectors.
 * There are three possible modes:
 *
 *  - "no-quirks" and "limited-quirks" modes (also called "standards mode").
 *  - "quirks" mode.
 *
 * These modes mostly determine whether CSS class name selectors match values in the
 * HTML `class` attribute in an ASCII-case-insensitive way (quirks mode), or whether
 * they match only when byte-for-byte identical (no-quirks mode).
 *
 * All HTML documents should start with the standard HTML5 DOCTYPE: `<!DOCTYPE html>`.
 *
 * > DOCTYPEs are required for legacy reasons. When omitted, browsers tend to use a different
 * > rendering mode that is incompatible with some specifications. Including the DOCTYPE in a
 * > document ensures that the browser makes a best-effort attempt at following the
 * > relevant specifications.
 *
 * @see https://html.spec.whatwg.org/#the-doctype
 *
 * DOCTYPE declarations comprise four properties: a name, public identifier, system identifier,
 * and an indication of which document compatibility mode they would imply if an HTML parser
 * hadn't already determined it from other information.
 *
 * @see https://html.spec.whatwg.org/#the-initial-insertion-mode
 *
 * Historically, the DOCTYPE declaration was used in SGML documents to instruct a parser how
 * to interpret the various tags and entities within a document. Its role in HTML diverged
 * from how it was used in SGML and no meaning should be back-read into HTML based on how it
 * is used in SGML, XML, or XHTML documents.
 *
 * @see https://www.iso.org/standard/16387.html
 *
 * @since 6.7.0
 *
 * @access private
 *
 * @see WP_HTML_Processor
 */
class WP_HTML_Doctype_Info {
	/**
	 * Name of the DOCTYPE: should be "html" for HTML documents.
	 *
	 * This value should be considered "read only" and not modified.
	 *
	 * Historically the DOCTYPE name indicates name of the document's root element.
	 *
	 *     <!DOCTYPE html>
	 *               ╰──┴── name is "html".
	 *
	 * @see https://html.spec.whatwg.org/#tokenization
	 *
	 * @since 6.7.0
	 *
	 * @var string|null
	 */
	public $name = null;

	/**
	 * Public identifier of the DOCTYPE.
	 *
	 * This value should be considered "read only" and not modified.
	 *
	 * The public identifier is optional and should not appear in HTML documents.
	 * A `null` value indicates that no public identifier was present in the DOCTYPE.
	 *
	 * Historically the presence of the public identifier indicated that a document
	 * was meant to be shared between computer systems and the value indicated to a
	 * knowledgeable parser how to find the relevant document type definition (DTD).
	 *
	 *     <!DOCTYPE html PUBLIC "public id goes here in quotes">
	 *               │  │         ╰─── public identifier ─────╯
	 *               ╰──┴── name is "html".
	 *
	 * @see https://html.spec.whatwg.org/#tokenization
	 *
	 * @since 6.7.0
	 *
	 * @var string|null
	 */
	public $public_identifier = null;

	/**
	 * System identifier of the DOCTYPE.
	 *
	 * This value should be considered "read only" and not modified.
	 *
	 * The system identifier is optional and should not appear in HTML documents.
	 * A `null` value indicates that no system identifier was present in the DOCTYPE.
	 *
	 * Historically the system identifier specified where a relevant document type
	 * declaration for the given document is stored and may be retrieved.
	 *
	 *     <!DOCTYPE html SYSTEM "system id goes here in quotes">
	 *               │  │         ╰──── system identifier ────╯
	 *               ╰──┴── name is "html".
	 *
	 * If a public identifier were provided it would indicate to a knowledgeable
	 * parser how to interpret the system identifier.
	 *
	 *     <!DOCTYPE html PUBLIC "public id goes here in quotes" "system id goes here in quotes">
	 *               │  │         ╰─── public identifier ─────╯   ╰──── system identifier ────╯
	 *               ╰──┴── name is "html".
	 *
	 * @see https://html.spec.whatwg.org/#tokenization
	 *
	 * @since 6.7.0
	 *
	 * @var string|null
	 */
	public $system_identifier = null;

	/**
	 * Which document compatibility mode this DOCTYPE declaration indicates.
	 *
	 * This value should be considered "read only" and not modified.
	 *
	 * When an HTML parser has not already set the document compatibility mode,
	 * (e.g. "quirks" or "no-quirks" mode), it will be inferred from the properties
	 * of the appropriate DOCTYPE declaration, if one exists. The DOCTYPE can
	 * indicate one of three possible document compatibility modes:
	 *
	 *  - "no-quirks" and "limited-quirks" modes (also called "standards" mode).
	 *  - "quirks" mode (also called `CSS1Compat` mode).
	 *
	 * An appropriate DOCTYPE is one encountered in the "initial" insertion mode,
	 * before the HTML element has been opened and before finding any other
	 * DOCTYPE declaration tokens.
	 *
	 * @see https://html.spec.whatwg.org/#the-initial-insertion-mode
	 *
	 * @since 6.7.0
	 *
	 * @var string One of "no-quirks", "limited-quirks", or "quirks".
	 */
	public $indicated_compatibility_mode;

	/**
	 * Constructor.
	 *
	 * This class should not be instantiated directly.
	 * Use the static {@see self::from_doctype_token} method instead.
	 *
	 * The arguments to this constructor correspond to the "DOCTYPE token"
	 * as defined in the HTML specification.
	 *
	 * > DOCTYPE tokens have a name, a public identifier, a system identifier,
	 * > and a force-quirks flag. When a DOCTYPE token is created, its name, public identifier,
	 * > and system identifier must be marked as missing (which is a distinct state from the
	 * > empty string), and the force-quirks flag must be set to off (its other state is on).
	 *
	 * @see https://html.spec.whatwg.org/multipage/parsing.html#tokenization
	 *
	 * @since 6.7.0
	 *
	 * @param string|null $name              Name of the DOCTYPE.
	 * @param string|null $public_identifier Public identifier of the DOCTYPE.
	 * @param string|null $system_identifier System identifier of the DOCTYPE.
	 * @param bool        $force_quirks_flag Whether the force-quirks flag is set for the token.
	 */
	private function __construct(
		?string $name,
		?string $public_identifier,
		?string $system_identifier,
		bool $force_quirks_flag
	) {
		$this->name              = $name;
		$this->public_identifier = $public_identifier;
		$this->system_identifier = $system_identifier;

		/*
		 * > If the DOCTYPE token matches one of the conditions in the following list,
		 * > then set the Document to quirks mode:
		 */

		/*
		 * > The force-quirks flag is set to on.
		 */
		if ( $force_quirks_flag ) {
			$this->indicated_compatibility_mode = 'quirks';
			return;
		}

		/*
		 * Normative documents will contain the literal `<!DOCTYPE html>` with no
		 * public or system identifiers; short-circuit to avoid extra parsing.
		 */
		if ( 'html' === $name && null === $public_identifier && null === $system_identifier ) {
			$this->indicated_compatibility_mode = 'no-quirks';
			return;
		}

		/*
		 * > The name is not "html".
		 *
		 * The tokenizer must report the name in lower case even if provided in
		 * the document in upper case; thus no conversion is required here.
		 */
		if ( 'html' !== $name ) {
			$this->indicated_compatibility_mode = 'quirks';
			return;
		}

		/*
		 * Set up some variables to handle the rest of the conditions.
		 *
		 * > set...the public identifier...to...the empty string if the public identifier was missing.
		 * > set...the system identifier...to...the empty string if the system identifier was missing.
		 * >
		 * > The system identifier and public identifier strings must be compared...
		 * > in an ASCII case-insensitive manner.
		 * >
		 * > A system identifier whose value is the empty string is not considered missing
		 * > for the purposes of the conditions above.
		 */
		$system_identifier_is_missing = null === $system_identifier;
		$public_identifier            = null === $public_identifier ? '' : strtolower( $public_identifier );
		$system_identifier            = null === $system_identifier ? '' : strtolower( $system_identifier );

		/*
		 * > The public identifier is set to…
		 */
		if (
			'-//w3o//dtd w3 html strict 3.0//en//' === $public_identifier ||
			'-/w3c/dtd html 4.0 transitional/en' === $public_identifier ||
			'html' === $public_identifier
		) {
			$this->indicated_compatibility_mode = 'quirks';
			return;
		}

		/*
		 * > The system identifier is set to…
		 */
		if ( 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd' === $system_identifier ) {
			$this->indicated_compatibility_mode = 'quirks';
			return;
		}

		/*
		 * All of the following conditions depend on matching the public identifier.
		 * If the public identifier is empty, none of the following conditions will match.
		 */
		if ( '' === $public_identifier ) {
			$this->indicated_compatibility_mode = 'no-quirks';
			return;
		}

		/*
		 * > The public identifier starts with…
		 *
		 * @todo Optimize this matching. It shouldn't be a large overall performance issue,
		 *       however, as only a single DOCTYPE declaration token should ever be parsed,
		 *       and normative documents will have exited before reaching this condition.
		 */
		if (
			str_starts_with( $public_identifier, '+//silmaril//dtd html pro v0r11 19970101//' ) ||
			str_starts_with( $public_identifier, '-//as//dtd html 3.0 aswedit + extensions//' ) ||
			str_starts_with( $public_identifier, '-//advasoft ltd//dtd html 3.0 aswedit + extensions//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 2.0 level 1//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 2.0 level 2//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 2.0 strict level 1//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 2.0 strict level 2//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 2.0 strict//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 2.0//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 2.1e//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 3.0//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 3.2 final//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 3.2//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html 3//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html level 0//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html level 1//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html level 2//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html level 3//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html strict level 0//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html strict level 1//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html strict level 2//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html strict level 3//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html strict//' ) ||
			str_starts_with( $public_identifier, '-//ietf//dtd html//' ) ||
			str_starts_with( $public_identifier, '-//metrius//dtd metrius presentational//' ) ||
			str_starts_with( $public_identifier, '-//microsoft//dtd internet explorer 2.0 html strict//' ) ||
			str_starts_with( $public_identifier, '-//microsoft//dtd internet explorer 2.0 html//' ) ||
			str_starts_with( $public_identifier, '-//microsoft//dtd internet explorer 2.0 tables//' ) ||
			str_starts_with( $public_identifier, '-//microsoft//dtd internet explorer 3.0 html strict//' ) ||
			str_starts_with( $public_identifier, '-//microsoft//dtd internet explorer 3.0 html//' ) ||
			str_starts_with( $public_identifier, '-//microsoft//dtd internet explorer 3.0 tables//' ) ||
			str_starts_with( $public_identifier, '-//netscape comm. corp.//dtd html//' ) ||
			str_starts_with( $public_identifier, '-//netscape comm. corp.//dtd strict html//' ) ||
			str_starts_with( $public_identifier, "-//o'reilly and associates//dtd html 2.0//" ) ||
			str_starts_with( $public_identifier, "-//o'reilly and associates//dtd html extended 1.0//" ) ||
			str_starts_with( $public_identifier, "-//o'reilly and associates//dtd html extended relaxed 1.0//" ) ||
			str_starts_with( $public_identifier, '-//sq//dtd html 2.0 hotmetal + extensions//' ) ||
			str_starts_with( $public_identifier, '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//' ) ||
			str_starts_with( $public_identifier, '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//' ) ||
			str_starts_with( $public_identifier, '-//spyglass//dtd html 2.0 extended//' ) ||
			str_starts_with( $public_identifier, '-//sun microsystems corp.//dtd hotjava html//' ) ||
			str_starts_with( $public_identifier, '-//sun microsystems corp.//dtd hotjava strict html//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html 3 1995-03-24//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html 3.2 draft//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html 3.2 final//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html 3.2//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html 3.2s draft//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html 4.0 frameset//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html 4.0 transitional//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html experimental 19960712//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd html experimental 970421//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd w3 html//' ) ||
			str_starts_with( $public_identifier, '-//w3o//dtd w3 html 3.0//' ) ||
			str_starts_with( $public_identifier, '-//webtechs//dtd mozilla html 2.0//' ) ||
			str_starts_with( $public_identifier, '-//webtechs//dtd mozilla html//' )
		) {
			$this->indicated_compatibility_mode = 'quirks';
			return;
		}

		/*
		 * > The system identifier is missing and the public identifier starts with…
		 */
		if (
			$system_identifier_is_missing && (
				str_starts_with( $public_identifier, '-//w3c//dtd html 4.01 frameset//' ) ||
				str_starts_with( $public_identifier, '-//w3c//dtd html 4.01 transitional//' )
			)
		) {
			$this->indicated_compatibility_mode = 'quirks';
			return;
		}

		/*
		 * > Otherwise, if the DOCTYPE token matches one of the conditions in
		 * > the following list, then set the Document to limited-quirks mode.
		 */

		/*
		 * > The public identifier starts with…
		 */
		if (
			str_starts_with( $public_identifier, '-//w3c//dtd xhtml 1.0 frameset//' ) ||
			str_starts_with( $public_identifier, '-//w3c//dtd xhtml 1.0 transitional//' )
		) {
			$this->indicated_compatibility_mode = 'limited-quirks';
			return;
		}

		/*
		 * > The system identifier is not missing and the public identifier starts with…
		 */
		if (
			! $system_identifier_is_missing && (
				str_starts_with( $public_identifier, '-//w3c//dtd html 4.01 frameset//' ) ||
				str_starts_with( $public_identifier, '-//w3c//dtd html 4.01 transitional//' )
			)
		) {
			$this->indicated_compatibility_mode = 'limited-quirks';
			return;
		}

		$this->indicated_compatibility_mode = 'no-quirks';
	}

	/**
	 * Creates a WP_HTML_Doctype_Info instance by parsing a raw DOCTYPE declaration token.
	 *
	 * Use this method to parse a DOCTYPE declaration token and get access to its properties
	 * via the returned WP_HTML_Doctype_Info class instance. The provided input must parse
	 * properly as a DOCTYPE declaration, though it must not represent a valid DOCTYPE.
	 *
	 * Example:
	 *
	 *     // Normative HTML DOCTYPE declaration.
	 *     $doctype = WP_HTML_Doctype_Info::from_doctype_token( '<!DOCTYPE html>' );
	 *     'no-quirks' === $doctype->indicated_compatibility_mode;
	 *
	 *     // A nonsensical DOCTYPE is still valid, and will indicate "quirks" mode.
	 *     $doctype = WP_HTML_Doctype_Info::from_doctype_token( '<!doctypeJSON SILLY "nonsense\'>' );
	 *     'quirks' === $doctype->indicated_compatibility_mode;
	 *
	 *     // Textual quirks present in raw HTML are handled appropriately.
	 *     $doctype = WP_HTML_Doctype_Info::from_doctype_token( "<!DOCTYPE\nhtml\n>" );
	 *     'no-quirks' === $doctype->indicated_compatibility_mode;
	 *
	 *     // Anything other than a proper DOCTYPE declaration token fails to parse.
	 *     null === WP_HTML_Doctype_Info::from_doctype_token( ' <!DOCTYPE>' );
	 *     null === WP_HTML_Doctype_Info::from_doctype_token( '<!DOCTYPE ><p>' );
	 *     null === WP_HTML_Doctype_Info::from_doctype_token( '<!TYPEDOC>' );
	 *     null === WP_HTML_Doctype_Info::from_doctype_token( 'html' );
	 *     null === WP_HTML_Doctype_Info::from_doctype_token( '<?xml version="1.0" encoding="UTF-8" ?>' );
	 *
	 * @since 6.7.0
	 *
	 * @param string $doctype_html The complete raw DOCTYPE HTML string, e.g. `<!DOCTYPE html>`.
	 *
	 * @return WP_HTML_Doctype_Info|null A WP_HTML_Doctype_Info instance will be returned if the
	 *                                   provided DOCTYPE HTML is a valid DOCTYPE. Otherwise, null.
	 */
	public static function from_doctype_token( string $doctype_html ): ?self {
		$doctype_name      = null;
		$doctype_public_id = null;
		$doctype_system_id = null;

		$end = strlen( $doctype_html ) - 1;

		/*
		 * This parser combines the rules for parsing DOCTYPE tokens found in the HTML
		 * specification for the DOCTYPE related tokenizer states.
		 *
		 * @see https://html.spec.whatwg.org/#doctype-state
		 */

		/*
		 * - Valid DOCTYPE HTML token must be at least `<!DOCTYPE>` assuming a complete token not
		 *   ending in end-of-file.
		 * - It must start with an ASCII case-insensitive match for `<!DOCTYPE`.
		 * - The only occurrence of `>` must be the final byte in the HTML string.
		 */
		if (
			$end < 9 ||
			0 !== substr_compare( $doctype_html, '<!DOCTYPE', 0, 9, true )
		) {
			return null;
		}

		$at = 9;
		// Is there one and only one `>`?
		if ( '>' !== $doctype_html[ $end ] || ( strcspn( $doctype_html, '>', $at ) + $at ) < $end ) {
			return null;
		}

		/*
		 * Perform newline normalization and ensure the $end value is correct after normalization.
		 *
		 * @see https://html.spec.whatwg.org/#preprocessing-the-input-stream
		 * @see https://infra.spec.whatwg.org/#normalize-newlines
		 */
		$doctype_html = str_replace( "\r\n", "\n", $doctype_html );
		$doctype_html = str_replace( "\r", "\n", $doctype_html );
		$end          = strlen( $doctype_html ) - 1;

		/*
		 * In this state, the doctype token has been found and its "content" optionally including the
		 * name, public identifier, and system identifier is between the current position and the end.
		 *
		 *     "<!DOCTYPE...declaration...>"
		 *               ╰─ $at           ╰─ $end
		 *
		 * It's also possible that the declaration part is empty.
		 *
		 *               ╭─ $at
		 *     "<!DOCTYPE>"
		 *               ╰─ $end
		 *
		 * Rules for parsing ">" which terminates the DOCTYPE do not need to be considered as they
		 * have been handled above in the condition that the provided DOCTYPE HTML must contain
		 * exactly one ">" character in the final position.
		 */

		/*
		 *
		 * Parsing effectively begins in "Before DOCTYPE name state". Ignore whitespace and
		 * proceed to the next state.
		 *
		 * @see https://html.spec.whatwg.org/#before-doctype-name-state
		 */
		$at += strspn( $doctype_html, " \t\n\f\r", $at );

		if ( $at >= $end ) {
			return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );
		}

		$name_length  = strcspn( $doctype_html, " \t\n\f\r", $at, $end - $at );
		$doctype_name = str_replace( "\0", "\u{FFFD}", strtolower( substr( $doctype_html, $at, $name_length ) ) );

		$at += $name_length;
		$at += strspn( $doctype_html, " \t\n\f\r", $at, $end - $at );
		if ( $at >= $end ) {
			return new self( $doctype_name, $doctype_public_id, $doctype_system_id, false );
		}

		/*
		 * "After DOCTYPE name state"
		 *
		 * Find a case-insensitive match for "PUBLIC" or "SYSTEM" at this point.
		 * Otherwise, set force-quirks and enter bogus DOCTYPE state (skip the rest of the doctype).
		 *
		 * @see https://html.spec.whatwg.org/#after-doctype-name-state
		 */
		if ( $at + 6 >= $end ) {
			return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );
		}

		/*
		 * > If the six characters starting from the current input character are an ASCII
		 * > case-insensitive match for the word "PUBLIC", then consume those characters
		 * > and switch to the after DOCTYPE public keyword state.
		 */
		if ( 0 === substr_compare( $doctype_html, 'PUBLIC', $at, 6, true ) ) {
			$at += 6;
			$at += strspn( $doctype_html, " \t\n\f\r", $at, $end - $at );
			if ( $at >= $end ) {
				return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );
			}
			goto parse_doctype_public_identifier;
		}

		/*
		 * > Otherwise, if the six characters starting from the current input character are an ASCII
		 * > case-insensitive match for the word "SYSTEM", then consume those characters and switch
		 * > to the after DOCTYPE system keyword state.
		 */
		if ( 0 === substr_compare( $doctype_html, 'SYSTEM', $at, 6, true ) ) {
			$at += 6;
			$at += strspn( $doctype_html, " \t\n\f\r", $at, $end - $at );
			if ( $at >= $end ) {
				return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );
			}
			goto parse_doctype_system_identifier;
		}

		/*
		 * > Otherwise, this is an invalid-character-sequence-after-doctype-name parse error.
		 * > Set the current DOCTYPE token's force-quirks flag to on. Reconsume in the bogus
		 * > DOCTYPE state.
		 */
		return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );

		parse_doctype_public_identifier:
		/*
		 * The parser should enter "DOCTYPE public identifier (double-quoted) state" or
		 * "DOCTYPE public identifier (single-quoted) state" by finding one of the valid quotes.
		 * Anything else forces quirks mode and ignores the rest of the contents.
		 *
		 * @see https://html.spec.whatwg.org/#doctype-public-identifier-(double-quoted)-state
		 * @see https://html.spec.whatwg.org/#doctype-public-identifier-(single-quoted)-state
		 */
		$closer_quote = $doctype_html[ $at ];

		/*
		 * > This is a missing-quote-before-doctype-public-identifier parse error. Set the
		 * > current DOCTYPE token's force-quirks flag to on. Reconsume in the bogus DOCTYPE state.
		 */
		if ( '"' !== $closer_quote && "'" !== $closer_quote ) {
			return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );
		}

		++$at;

		$identifier_length = strcspn( $doctype_html, $closer_quote, $at, $end - $at );
		$doctype_public_id = str_replace( "\0", "\u{FFFD}", substr( $doctype_html, $at, $identifier_length ) );

		$at += $identifier_length;
		if ( $at >= $end || $closer_quote !== $doctype_html[ $at ] ) {
			return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );
		}

		++$at;

		/*
		 * "Between DOCTYPE public and system identifiers state"
		 *
		 * Advance through whitespace between public and system identifiers.
		 *
		 * @see https://html.spec.whatwg.org/#between-doctype-public-and-system-identifiers-state
		 */
		$at += strspn( $doctype_html, " \t\n\f\r", $at, $end - $at );
		if ( $at >= $end ) {
			return new self( $doctype_name, $doctype_public_id, $doctype_system_id, false );
		}

		parse_doctype_system_identifier:
		/*
		 * The parser should enter "DOCTYPE system identifier (double-quoted) state" or
		 * "DOCTYPE system identifier (single-quoted) state" by finding one of the valid quotes.
		 * Anything else forces quirks mode and ignores the rest of the contents.
		 *
		 * @see https://html.spec.whatwg.org/#doctype-system-identifier-(double-quoted)-state
		 * @see https://html.spec.whatwg.org/#doctype-system-identifier-(single-quoted)-state
		 */
		$closer_quote = $doctype_html[ $at ];

		/*
		 * > This is a missing-quote-before-doctype-system-identifier parse error. Set the
		 * > current DOCTYPE token's force-quirks flag to on. Reconsume in the bogus DOCTYPE state.
		 */
		if ( '"' !== $closer_quote && "'" !== $closer_quote ) {
			return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );
		}

		++$at;

		$identifier_length = strcspn( $doctype_html, $closer_quote, $at, $end - $at );
		$doctype_system_id = str_replace( "\0", "\u{FFFD}", substr( $doctype_html, $at, $identifier_length ) );

		$at += $identifier_length;
		if ( $at >= $end || $closer_quote !== $doctype_html[ $at ] ) {
			return new self( $doctype_name, $doctype_public_id, $doctype_system_id, true );
		}

		return new self( $doctype_name, $doctype_public_id, $doctype_system_id, false );
	}
}
PK      \["  "  ,  codeinwp/themeisle-sdk/assets/images/css.jpgnu W+A         JFIF   H H   Exif  MM *                  J       R(       i       Z       H      H                                          	
    } !1AQa"q2#BR$3br	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        	
   w !1AQaq"2B	#3Rbr
$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz C  C     ? bWfv#y {$ol
wwO[ -[ -[ -[ -+E"}P0f* Hq[ .:J־}ۛ}wNpk-6륋>n >?Z߮1_"=?t~pyg?8;Gժ <~nݯѿ{toz
>W=?Z7 %/ ϡ q >[ KmCVK's2~ GSӯh_ toݦoz>W=?t˭^ ϧC QjAil1 m Vڟw7M O j>W=?t} ϧC QjA #n >?9Gժ <~yo8 Vڟ?!  }Z{j臛 ϧC QjA #n >?9Gժ <~yo8 Vڟ?!  }Z{j臛 ϧC QjA #n >?9Gժ <~yo8 Vڟ?!  }Z{j臛 ϧC QjA #2i4Qi؀+ʷQL9!WէN{ ۚm{GYmWעӭ  ?MXR 9]J>;EƟy,,J*p?ӿ/7 <^y/˿WtKŬ+]AGؾ-:;f+B.oCSM=M5ig<gS=`an*:fN25_l0Z0mʟQg)cgMկ9ʬ]FrMG:xT_rږn|!O?U5{\Za|1Zk.kQʭY˳ʙJ	`kRR*2(<RmOX:5JU,&i<]Jqҭ
[n)ANכJeJEh+bi1w~%xB^=պXm,2^1(sJXΎ6OVeZtӧ
QMvWO,&V~YEB\YUV4滾|bŞ
+h&mV e<Ge6r'M6+if9nJjgBүNjSlV*RR
Qe:pQͪ(Tu0Nl<h֍*O*nzeNvSdvNfOhfko_jچ?.XK}o$l-bچGѭGޕZURkSJ)FIԅR*3Ji<=USXiN:NT)?+ֳ\ч)^0׆85UHasI"-[4+[CeJuqK	XJ?]G/e,[<?/<s;\*%#KXBl9Vuғ1q)^Jewt'CJ8ugAh #yTY`/nYΞt0Tk)KMbe6,4VRѫ٪34!굇xXNu5𓄱εU욝+Rsdiv}oKR]bRhdm 3Y\T+cn~}"G'YӄӅ:{RU_ݫ*te%mu]r)'kN4B-7rzutѨ<?^KEֵ=\WYl`y_蚛:iiQj6kxiQ\XY+rn˻jfټW'I]jG{PN8 :{V P@  P@  P@ 5  ]L	_=?$O {VԀ(  >Lkiwhey&mHn" ܍ d Pkm!?{i~rx<c?PhT.+'e}tnƵ9MF/Uvk}zir
:k~u11_z3co}x.nR{-<y'dzXLwI*ҭkUΫT)OSNysN0jn)hӫF9JN*ufϚ|Ӎ8ͫ-@nz>ږ[K.(K=CxM6Km4YdYok]'yKШQ-8ޫ5S*47N^4ۻçMΞ1)ΩmƚTZuJ-7'tբ>Fmqijou勈5+y$`^w(Y)M,QAVPçL%K
ZcRq:%	(JRKT=Ս:h5c:jF[kN7v7:/uM6?iCjR]AhkB8lQ,ie:ʳ*tYL!ZӯBkJqZU&%giĎUBMaU%>y{IJ1wrsJMFqPi5nXէ?hS,ϫ=Ժ#̼4$YnZKqBB.YNl4hEP7*񗴜(RIEr>k(5k(ԣ<=gNR'*劋J$S?	|! CMBy{jR-M]oFS[m4 o-Za2bZ<k{UVqOFJ<\+X:쾮FƷ3V\ʹvqnx6GÐ%T!47o$iO1W{E#ʪNtK7;JI\ӓ<<܉d*B%J4/	ʟr~󏳨ے;١!0$2o`gb vrOSю"RrI$vovWzՇRJ*eu]םIlq.}{]_t}O#[sgm._HKy#^JEo9u63M4׺Kݵ֍r*U{M-Mvw`2#s _Y_n/eW OGh 4 U{/?>s }?/ =^ , t t}fK  eW 7??Y U OGh 4 U{/?>s }?/ =^ , t t}fK  eW 7??Y U OGh 4 U{/?>s }?/ =^ , t t}fK  eW >{~4_{*X2kKF*@Tfl}8ې*"M_VeA9m%p {VԀ( #_;XҒXoXt1g$V^}>Κ|%I#4Ȍ p O4:/5O.k]kJ+xmZizƝ<֙.)MxhwZ^50]Yí
q@t P@  P@  P@  P@  P@ Z=.넿S[T'eC? {VԀ( ^zeִuVŤnm[h7Yb0G"mdgG.E?.8?^θq V|sZFMsFǅ|74x~mkPg5=vg"X4#\N P@  P@  P@  P@  P@ Z=.넿S[T'eC? {VԀ( K\މ6ci=}gaLGI-TiY<,ch绔&*+([g !	 qt@  P@  P@  P@  P@  P@ V K/	f {VԀ( [Yֵs U)yߛ5\]EmH-M,*YcIPSg	9:g< ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p @ P@  P@  P@  P@  P@  Pk  MnPіi {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~Hg {VԀ( ?O ^p ؠ
 ( 
 ( 
 ( 
 ( 
 ( +^ǥp @jku~HgM
pjqr `Z|ϲ}/Y& Qw}w>s (腗w>s (腗w>s (腗wrZ¬]Lb79($$O;KYw|ycs (腗w<
 ]_tB˻X\ ./!e,~ }?q W?rYw|߸ 9EeD,AU ] ?* Qw}.ycs (腗w<
 ]_tB˻X\ ./!e,~ }?q W?rYw|߸ 9EeD,AU ] ?* Qw}.ycs (腗w<
 ]_tB˻X\ ./!e,~ }?q W?rYw|߸ 9EeD,B4J4*7$zzxJ9eD9Wwդ3PK      \lЪO  O  3  codeinwp/themeisle-sdk/assets/images/conditions.jpgnu W+A         JFIF       C 


 C		 P             	
    } !1AQa"q2#BR$3br	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        	
   w !1AQaq"2B	#3Rbr
$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz   ? GHi>W O@} I( 7Q zo @أ ƀG  b  > 4 }?M h ޛ ?( 7Q zo @أ ƀG  b  > 4 }?M h ޛ ?( 7nR8ԫ	t_а&ޛ ?}?M h ޛ ?( 7Q zo @ڤvҲ	O =l* ƀQ zo @أ ƀG  b  > 4 DNcRIx ]u ]Gb
 ( 
 ( 
 ( 
 ( =() ]# Ѕe P@ C{ s 6T   ( 
 a ut"8O0D,4ӢMFH7oyjFϩ|F|Y\.[9u&`X%I\P>)ijIq^GգeefY^@8<Erq@|a+ӥH&9Xdr9UqmkP_z6ui7h}tKy*,@)
rH=4ĝuK=*6=[H|#*@
$= A|[𾨷o-d/5	`O$Ey=S=GEMy}lS9 G]zמ k]6W5˸xބ@  P@zPS'(b p/iMjm]*nP>ch2|{mgF[9ё; ܠo?ʀ$OJ u y į-.JO%ZB@Gd_ _5RJ7c"-?P!!GP@? [  @ZXgx叏M^-֏o'&kyCA?{4\+ri׶D}@$pCee*r9?!@o<6tmRD=@V@Vh!(q໯O_]^JV8,'8F=M sÝ4>Ct=VifB* ݖ# jh
FѴk%ƃm,>vcsۑ #ƀ3-Z׮4{]3Hҭdә2"Y@@Arz@^/'<1qOi0A4I3 *]iЛ=8ieg(< h 
 ( =() ]# Ѕe!?
,7[ķQ:(/C^ϧZj~٣ģMP?hoʀq~@ď_5M&T0N}¥^@AEg_ /Ï_-VT3xNb%RYI. 
 a ut"
 ( 
 ( 
 ( 
 ( =() ] B@
 ( o?ʀ$OJ u  P@ W oPQ,W@X}/Sߦ 
 >ڟܛ7P& M }?7oɿ mOM ~( jro@Sߦ 
 >ڟܛ7P& M }?7oɿ mOM ~( jro@Sߦ 
 IbC T{PmOM ~( jro@Sߦ 
 >ڟܛ7P"Y-Eb̄7\}(EEP6M M mOM ~( jro@Sߦ 
 >ڟܛ7P /P  k?
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 a 6uu"
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
  ǅs_(  ]s ]@
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( +Ǎs_(  ]u ]@9WPĻk7>i2iWA/v[ ]w~m#P5u땹o/$2h@i
fOF RⶱM^w4eEܨہf8 zP|U|M=ƛwىa]+;8i=-IElH.ׁ:^Ti`k{[h$K*( W/|V7k6Vi40ZxB>r+g# tVj֓:acIIJJm`F;PW@  P@  P@  P@  P@  P@  k  ( խhmVM4U'>[VVdd(J[:;KNi^-F%2f6r:`PIΗ=N-n%uy嘲&2en{;M1sA 	l~6Y\jO)I%m3u;ǚ 6}=˦<2]NT1ᇠaMbRݤ<`I O994Yxz]hj3e@0\qhN
 ( 
 ( 
 ( 
 ( 
 ( +Ǎs_(  ]u ]@I*D2v8o =  m b x@m _ؠ /P( m }{ } >o =  m b x@m _ؠ /P( m }{ } >o =  m b x@m _ؠ /P( m }{ } >o =  m b&@@  k  (VRRHi*
Y@>W_ t 
 _GtY : '#W, ?+@	  @?O wJ eP;2 (ҿg  _ t 
 _GtY : '#W, ?+@	  @?O+@#W, ?+@	  @?O wJ eP;2 (ҿg  _ t 
 _GtY : '#W, ?+@	  @?O+@_1"UfuQ @^<m !@?EdZթ ץ= k?="ڍ>לpN1TAkW:}ƟLڌrFlpwJ\>$7<X]Cb#*` 2Yc4X.[3JtۯxNJ:<;.
+n =(\⏉ޟkKX,n-
cv=qE̺N&t0b8G8Nq42[6j2{$АA@ jzto{}fBw>=W+۽EG4ˑk}PE	K9,#~0Ǧ^k#MPܨw [s dʟ)\O`Ѵ들ȳj?.ù>V9m $+~!Hu+2V8c q4: wSվf,߻ 
W!*ޞ˥Xo>bWU$L,M_yFkA do:IX <*Zg]La@  P@ Wk{)䶃Wv1rzf8ä6I'[F#'/Ls@sqy[Oujld@[G\P/>n J נ
x[%Bo?@ȵ S Koz נ5mv=׉ VoMp:+1֝ɱ_R0e{esGi-JK߀Tpy[Eb׈>ǯGOsǪyXtbNHS{ڋC#Ir:,,/POxTC9u*[?7b-{]VΖ{m12G%NӜyf#qOmr)_(Nnz;ù|W\JL}FwlIOrZf<D^ܭ-h%$pQ[⁔oYmă:ٻ{]b
wRFN(_~5=1o?Hng(ig<uⱟOھ 	5t/*Z,S60Ur=bmO3j6% +%qL-nqu担_DIOw`IbY<neOzEMG^HuuzFKm*K[3PFrYU uf66æ>l~ cZtT( 
 ( 13u:s_L\q@4I@^<m !@?Ec]CyeM{mj/#dd(AP5?   ښd  ƀMOD@ @Y?"?SS , Oh  'G4 jj #  ?5?   ښd  ƀMOD@ @Y?"?SR , Oh  'G4 jj #  ?5?   ښd  ƀMOD@ @Y?"?SS , Oh  'G4 jj #  ?5?   ښd  ƀ'쥱>3,)y|n}B+ m \
 -\ A -,P0
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
m \
 -]A -,P3//4ti7ڌ1pđzd`g?PX\%c3vwƀ+[(R^F8,i3`gzt	<{=K&ˈo|g=yPOU׵=9mfEDNPx]4[Lq@xB8g[ti|hZVTX8iup#2J$,b~6olasך "ƙ.lG~k@/8gߌg ͸Σaon۸#cpր#iiIecv@M6meyK'HX8T@NG( ƛ}bZII^XTʀő="[iB55
ӞOnz Emp`'AqGFN7G#$~cրq>T{DIRhvg g Etn̊4,"ꏌ0#@n>%iH7$MH2{g4vX=Esn.4ۢ
;a^X$VxKp8_gkܭ; gi>;QHd[,ao(TM@WtbmYyadI1F# nP@  P@  k  (xzEIoyi<ˆkp5I]_ݨ\ $@jA8n'Ub)]mlbmZ6RU5*B0dP@Sn(_O~.X/#<M:. w-ǉU{R^({r ƵۭV=KL[󕐝ayyku\Y_$e
	Vg8@?Ct:uP__@t2j-mtdw%A >O MI-UcH].]d>n>@\xyfu].+l_w
J.x'<!PojR/׌y Kx]m^;r#屸ǸrNAp~{?P QK絴6v;+Jؽ08 zu=7ws<<W' 0Q8 P7`RWmdkhE$Vpn}0_1 (ykVŤ>XGoO~=di..֞y12ڀ3n>j6oZ;wfެY㹎`{P Yu-k=w(x##ހ(77űU:ߩ}SΥ%@	12s g vT P@  P{ k 뮿 (\BҢc/oҀ*$SI7"G3CT1< -˟*xUJ6-&p~p1G4b[-@QL2'3 POid2X%.8U$w׭ m-<e2pq>΀T<
0Qƀ3f-^ GP+5[,=0t_@.i4fe1 Es4aYK.0Tu?NG4[P֭&Q/I
	 s@K eYFx ~yn 붚mH(i8
	#z owʍW)"&
 ( 
 ( 
 ( 
x[5Bo?@<Q{K_"7PXԉ`0>YOQ)t駘_Hdva:5yᑥ!̚sr"%a"Ǡ ? [%Eg>%o0hBI
x/T}$#<X!gBYᐴ	82x9@<|:ݰe&	c]2| :}H,ht`8Br3@%#W缷)`iV_0H}{m:H-F8a"B;=@ZxNj66OR>tMI06@&{iI	nl<ƞ"ʊpٜuX Fie$QA ïz [Z?eƐ@$"E\qP-wtk[ ?N5>`$wo4V8u#ԗNmSΌ}G0r'~1@uOZ[Otc~ i%sJ  
 ( 
 ( 
 (x5Bo?@( 
 (1`ԁր@ 7b-<h P@  P@  P@  P@  P@ W  [  @ZXa@  P@  P@  P@  P@  P@  P@  P@? [  @ZXgiO}{&}[Qma)By>HFVoSsTiN6h?8 >O3? r?p
?8 aGE  ( r?p?G'}k =q 
9<?܏/  As QZ~?_kO0# * {\ ry#	 "kO0# * {\ ryֿOA> 
?8 aGA> * {\ ry?_kO0#  As Q?܏' =q 
9<?܏?G'r?p/?G'}gU  ( r?p?8 aGAW͇OA7QY~_kO6Z~ =q 
9<?܏5
65pp~OkwG.xQXn}te͔2dΪL
ӌvM_O oPmhbǄ?5
[P^eVt P@ xIФ5-J̨XGFmNJߡ~x%Iq6=AWLQ,S6vֲΉqqʌ_hc($ӒYb@Q$)"V2(f
	$ ; ҼU2Wej-6
Vb&hK݄/qLoo֥.45xkv6wZ$1]--E*ȌVEE
 ( 
 kR{nsk -j)( O՝5hr? [  @ZXg1x« 7_N0
 ( ;]a;JXS\ oBG34UE~ǳYa&'~e8SdD|5kN}>P'dHDiC`kwfUSImHy~ݍ;Xf>=R1k$r`XE. {dqT~KK>[KZ6QhMs߉eY@eP,IF\CjУJqq%m,1ۻMV6Z̐riM9:ۖm<§K)=,W*N5kߩkFVi{L.{ws:^gER=+Z7:SmƂtaksލ|&ߺޒpە*x[o[ rZ7|"7:au.fZ:͐[$ck(gwTyJQMr:Ӵ˻}VUԼ9q|"H
(}1ߎӔRwK
Ӕ\TTdePũ;ĳ/ogied0DG {}ݸΚK]Kw6+.c[ö0}ɹ@ǦWC)ӥUA{؟\]~MԴmΙ[ѫds_lvؚT#h%M8ɻJ Xĺi0#%UˎANۖba?ȽJrS 
 (I52 w[ 赨?VtաW  [  @ZXg1x 7_N0
 ( 
Zm)C,aKITg(|.䳂xB@Fn>Yl
RO=DK8"EP6}=(I	M{kV᷊4 hC$wRB!{8ۄf%*ETNN吁T(
jvAkK$$RR4K[J&G$Gm
I/T $@)$H5ڄ(G
d"Iwg=szVKNcN=NLydڋ!)+&iKmdI5,41s}O~Td-  P@ 5})=9_N5 `t 'Κ9Jm \
 -]Q -,P3^5jK-.S.V]<CR
c&;J +4׊?Y  t>{<??׊?Y  t^} ^( f c yg mxo7E=~~m f?`x׊?Y  t^} ^( f c yg G63nϰ{<?k, />  ^( f c yg mx7E=~~Ck, /> гm 1  mx7E=~~mf?`xгm 1  ?Q Bͷ  ??!mf?`x׊?Y  t^} ^( f c yg mx7E=~~mf?`x׊?Y  t^} ^( f c yg mx7E=~~>R# ygZO'/i2v@	U VVF5UVlU  k  (  P@  P@  P@  P@  P@  P@  PP{ k 뮿 (IMJR4#A,]riï5I[Nܜaw^  kO '% z ?%?+ '% ~ _%?_?/ֿ1 t) 7/i_?/2 t) 7>z ^  kO{J ^  kOO?K B]>JWO?K B].J~!_c So^ҿ~!_c rSo|  нk /O~ o пk /K~k_| kx_\ =C_Ŀ/Z  ߀C[Ŀ/Z  ߀ '% z _%?+ '% z _%?+ '% z _%?+ '% z _%?+ '% z _%?+ '% ~ _%?+ '% z _%?+ '% ~ _%?+ '#k%U$zgQ E߀Z_5MV=wGaVHI[ǒN=AMu/R5+ m \
 -\ A -,P3<W a5 [zڦYCbv  P@	 ( 4  P@  Pf
 (  ug?D/ > V /Sbu? [  @ZXg7o _9(|u=CN
 _EX]!6 dӌ\MSy'LNs\%ԐD1TOĤcQ^|/n3c,W{j	x}f]6Hk(
A |ǽ/BT҃Hnlnh>%u/b\_نql&  +:iƇ4]*g嚲/>&/5k5on5iZS0M7мF5P+Z>6ʻ;@XS6H1jӌ]28.56O4h@2FkGʢo#M{yܛNW&[(nek:&:<Lm4 prKw+}R;LuOXwo |xYAs7Fb	7-Cz_kyo.nEi6+*MܜtF*WUyԕhу5}c֑Y0ߑEXB r15V|RZԩޅc6-V[mTDJs$^ĹFy{n"{6Ub[l9#懆I){cQ李jIMI6RIPyo;z:coV#t9(jI&{,~>kzі&qy(PbPFw2ܜxxJmK.XN6h>MOC{9>Vz}U6e}l>⛜-י\o.oa@ 9Yբhކ&U'8W\ P@t)ɗw^ |,V/Sbu? [  @ZXg9_xk MS::
 ( 1xGMi!|,,e )Ӓ0IV~hۭyme1*8{*>qU#Sx*3[Kc[ɩڬF.#jFsWFMX[:Ưy] &F#ELG<=J5Sn(k-uR7v<ROJ3GbdWOFUVn|\îI4I[	X s5	wSqo%VoKխqdAVQF1rKJS Y{^e}]}obO-p@*@rs<CRP%&.Lѵ}3Qi,#gJx2:x*tұw]~ٴJww lnVV2E*Κqj5U]fs|8K%>bu&e2,vi#n1֟XjWV/m{i-tۻƻI+?,q1T)YlU<a%+ݧ 
bR.bX	s q۰X֟dӻw|7ɖZLT3bwJO
vջ_"ZZyu}okk=qʹ~@ x>K&ܒpGnM}kb%B(8/ܕ4סD!6=:\ѸTcXج΀
 k&_9 !xwZ,N|/ctUW oP[  @ZYgL5Ũj6ɨ,3,e22~g	N1qWgN)jn'   g+Kq+'   ʧ>Kq+'   ʧ>Kq+'   ʧ>Kq+'   ʧ>Kq+'   ʧ>Kq+'   ʧ>Kq+'   ʧ>Kq+'   ʧ/A 	Ǉ? dGRtxwgG4{*'   ʧ>Kqi+Rtxw_G4{*/A 	Ǉ=dG>Kq+'   ʧ/B?|:t  ƚSX^OC>FQ U>XEoK0QV'Q^<- !@?EC-36!IՔB[C/Sq{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_sK{8v_s˸{8v_sK{8v'v,Zc+ǅs_( 6H;Ǽ;j >/I |PyO ?R+ }__ ԟ  g~ W( <'@ ? 
 >/I |PyO ?R+ }__ ԟ  g~ W( <'@ ? 
 >/I |PyO ?R+ }__ ԟ  g~ W( <'@ ? 
 >/I |PyO ?R+ }__ ԟ  g~ W(XbC`B}٠
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 bSzΙ[GP``B]2 r{<U~EF_5? 5>ȿ55? kU S {_3OCƧ5 ٩ = ! 05?WO ?i_{ ֫ Cf f/ F_5? 4?~!j#Z ^ȿcS~??l  E ?j6jk i{H"=O   kU S {_3OCƧj6jk i{H"=O ?l  E ?6jk i{H "=O   gU S {_3OCƧ3 ٩ = ! 05?WO ȿ5?WO ȿcS~??l  !cS~??l  ! 05?WO ȿ5?WO ȿcS~??l  !cS~?_F_5? 4{H"=O ?l  !cS~?_F_5? 4{H"=O ?l  !cS~?_F_5? 4{H"=O ?l  !cS~?_F_5? 4{H"=O X)#Śq*_*_?ڼφ4Bu_:h4NTF077	Rf~:'`P@  P@  m_iNp}6OapPN\DXn*8$Qgk}@.T.#73NhÙ^dL"{SoʚzKSeȒ&X/,84'^%Q[G:,cgSj!)ٲzE 2( 
 ( 
 (MnLr  CmRM_K՞U/x_C~- gSᇧO_%bu  P@  P_u;RдqS֔MDQR)<w¾"|-7w:{jQ'+{+Sgi;iۡz0iWWԟSֵxGd8L~&'^^U9U*>[JN\]q	vFN>@2;k
,;j6ù<RR7a|AS.Öp[nvA7ISvN綯rU|-{$ɫG?w-';~y6J@O-?sJQNdkʔeKhyڗ5-&Zc븴Zp`<g5esTRQ;:C[e{YE$@q 	>11:RjJOO%5SRmMeoE\f 	 iE6Vy/)qѣpx]i&HLhIbwWcJ1kVڹԫVRv)\,f1묽Ƌ.$Xbe6kEFޱHxӴ^=F5DHHm,xTRۙuhnImͯ
j~..um/Ŋ00G#<ް>uW{8j̭s#
 ( 
 ( o52Y?  K]5/VyTDOoi v՝O:u=Dtu P@  P@l-+sHcI 
N:ęEIZHmΙi{42[E4DSp`jR[2eJ;Z=:3CnJeNCǵi*%(~]B˧iVv2W}
ӁRYI;N:NEæZ&6n$PfEcVJŶumEm˅dFWhThXzR2x{L+Oh#XFHaU9 jy{i4C>g-rz9MNNՠSvI]iwAtU"T3h&mk<D =	Y;%snXݻnR)i+pZU܌L"TH=Vy=B/hfj_4;NB<"Nyqg(8(澑3A;O} ϩ沝IΊti*`
 ( 
 kS[/  m j ^>?Z㮇{}t1Mg$   2$s-Fqkz:Sm7~_j_(k qu  	F B l /g_ 	F B l ?g_ 	F B l /g_ 	F B l ?g_ 	F B l /g_ 	F B l ?g_ 	F B l /g_ 	F B l ?g_ 	F B l /g_ 	F B l ?g_ 	F B l ?οo? Kc =~?/%
: {8 := ?OJ5/5g qu {y Ϸj_( qu {y Ϸj_(k qu {y Ϸj_( qu {y Ϸj_(k qu {y Ϸj_( qu {y Ϸj_(k qu {y Ϸj_( qu {y Ϸj_(    o 1(ԿQ? A >bQУ??G} R GX ~g_ 	F B l ?g_ 	F B l /g_ 	F B l ?g_xS*@8̶ *qu jYSWH1Oϵ	6ʁNR8mFOPK      \l
  
  /  codeinwp/themeisle-sdk/assets/images/sparks.pngnu W+A        PNG

   IHDR   P   Q   EM!   	pHYs        sRGB    gAMA  a  
IDATx[leVQ[J5JK")ĥ<ʋ&x(h"H"#/- i*-H	BȭxYffo3̏lݙ?|||A.<F-LQ6F.87/~/I@Aah(ka1c)ΜR?cebonmJ&O^12hpfU\B_S@\]E~<i_P`yQ
#<0cI7( 'L#TIϲ)K<R@^I `I `xxߡwB^3dTJg(A۾]rzN_#0^j1i &G5eIѬ@ /`رFQW-cR@PZ5?EN)50h[BSx>E#rr5}s_P'e~P'$,Nmo;Q;'`A_^%' ܫE2ތEӯSn>4Z/]W(Dվ{VB_Y,?SkLtGD (5<BJ5bI׻/0AQg587Wr*!ؽ|t_ɫ;oHrp/DNܫ)ٴ8m\y<<Un>ZP۵WpraG"ղpv3睇讻Üufr*Kk"xPP'FOT[/9uUiz(ڔt>}U~{:1J 6.-N'GtalJd9	.&Қ֟TB׼^+a{qg%EwԵo2Pߴℭ,=D_}8N*Ď6]3dEa4SbjfZkY!Y*^WB<I_|YA_h<MV2וm[pa 7OHg:ʁh0o}D<ei,81L#X ~&߳dxl@壂Ü)n
Ґ5l~B3UvCV=	d_z"pyD\aYAjXr$Map]n/n&sB>|EW.*bDS"(Y-
i/.EǧE"8]9L>5ᦋt~ԡCIh߮¹mͶTfVKۛrymMq AY+pͶ0؈9X5rS&-÷Pk_1I6:DIk~ذ*sԀKE$ze'ٰv:1wM._IX)D%-X$[֠[b/zrOiғd*̭><UGkAUlt`]H1r,:ML	SZui)AOW̆i#M+O5^倅lpcl^Fc4lgBχ,^'^rIPvB̟(PX'`@w&ԳµT`ihAE\]zv'Z	@ỳ4E|T=uw-0Wԑ7֝8ƀPjyr˅]nr*~
bs^U 
yES֧u͇ކlT}>eWiLA5c@x'?ڝ:N9[_
GDV$hx[677ǎm
6ts2iքɴѡ%{)Iy	i3e	Zv9`a)<_*[##ع DD}!Z{v}L+Kl-txnxHH/*@ &	PoF;IQ26ʳ婀H|סκ}@EYrx>.uXn
\{& [1 郠,h*1鴳xx	,*hq(tV+F)+ҿ6<0Xn`C({aٞ	(_F}ڡr,}a'z<vRkH@Nw;]4mSsDZ5ߊW<`=8ºW6Q=~%$&tʐ(Y/s!48
q)P;w쳉6r/z/՘jxtKq)^EO/@5&pٛ@u	n=>7Fـ5>s\Hr7h]xQ6*T<(f<T<DiHCHv|02&Ҫq&}<}%Ҷ@;y28094ꢀ0+D1j0cFc/bMm#]<F) +Z#p8j`nmրJ@oEXuE@ڦ'90y-) i'?I	3~=kh1mϴw&_f    IENDB`PK      \~_  _  6  codeinwp/themeisle-sdk/assets/images/optimole-logo.svgnu W+A        <svg width="251" height="250" viewBox="0 0 251 250" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M217.696 99.0926C240.492 152.857 211.284 215.314 153.249 239.999C95.2141 264.683 30.4436 242.239 7.64869 188.474C-15.1462 134.71 14.8767 75.1972 72.9116 50.4991C130.947 25.8007 194.902 45.3142 217.696 99.0926Z" fill="#EDF0FF"/>
<path d="M217.696 99.0926C240.492 152.857 211.284 215.314 153.249 239.999C95.2141 264.683 30.4436 242.239 7.64869 188.474C-15.1462 134.71 14.8767 75.1972 72.9116 50.4991C130.947 25.8007 194.902 45.3142 217.696 99.0926Z" fill="#D7EEFC"/>
<path d="M181.711 75.8034C176.438 78.931 171.418 82.6928 167.832 87.6665C164.246 92.6402 162.221 98.9662 163.346 104.996C163.458 105.602 163.627 106.236 164.091 106.645C164.71 107.18 165.624 107.11 166.425 107.011C178.786 105.334 190.57 99.628 199.556 90.9633C204.956 85.7784 210.103 79.1566 217.542 78.2969C220.987 77.8883 224.475 78.8464 227.582 80.3685C229.186 81.1431 230.732 82.1012 231.899 83.4397C234.571 86.4971 234.796 90.9771 234.402 95.0352C233.967 99.487 232.968 103.926 231.393 108.11C230.001 111.815 226.851 114.661 224.193 117.578C218.203 124.171 211.678 130.301 204.52 135.612C194.437 143.079 184.833 150.772 173.654 156.703C167.93 159.732 162.671 162.029 157.974 166.651C153.488 171.06 149.832 176.33 147.231 182.064C145.093 186.784 143.842 191.546 141.409 196.182C138.836 201.07 135.938 205.804 132.634 210.228C128.584 215.667 124.689 218.809 118.319 221.373C108.63 225.276 98.0689 226.332 87.6486 226.98C79.9569 227.459 72.2365 227.727 64.5448 227.262C62.5477 227.149 58.1321 226.713 57.6544 224.134C57.1197 221.232 61.0852 219.893 63.11 219.471C75.6818 216.85 88.4785 213.145 98.477 205.072C100.502 203.437 102.569 201.056 101.852 198.562C96.5926 198.323 91.5721 200.507 86.5096 201.944C80.9129 203.536 75.0631 204.24 69.2552 204.029C67.3714 203.958 64.9242 203.226 64.9242 201.338C64.9385 199.774 66.6681 198.914 68.0885 198.266C72.9537 196.083 77.0602 192.56 81.096 189.08C84.5268 186.122 88.1269 182.909 89.3643 178.541C89.533 177.95 89.6457 177.288 89.3643 176.752C88.7456 175.541 86.9597 175.865 85.7084 176.386C79.3382 179.021 73.1085 182.007 67.0617 185.332C59.4121 189.545 51.3682 194.448 42.678 193.73C40.9623 193.589 38.7826 192.575 39.12 190.884C39.303 189.94 40.2308 189.348 41.0607 188.869C63.2649 175.935 82.277 156.238 87.3534 131.019C91.5019 110.406 85.9334 89.0332 87.8178 68.0968C88.0987 64.9266 88.5631 61.7426 89.6458 58.7416C90.3911 56.6705 91.4173 54.6978 92.5287 52.7957C99.8831 40.0872 110.711 29.4076 123.493 22.208C135.291 15.5862 148.328 15.0649 160.829 9.92232C168.788 6.6536 176.874 2.80726 185.48 2.97633C186.071 2.99042 186.689 3.03269 187.153 3.38492C187.561 3.70897 187.772 4.21618 187.941 4.72339C189.263 8.6261 189.249 12.8529 190.261 16.8542C190.36 17.2628 190.514 17.7136 190.88 17.9109C191.245 18.1081 191.71 17.9954 192.103 17.8686C195.478 16.7978 198.853 15.727 202.228 14.6563C203.283 14.3181 204.422 13.9941 205.448 14.3745C207.431 15.1071 207.656 17.7981 207.459 19.9116C205.533 41.0312 199.936 64.9968 181.711 75.8034Z" fill="#577BF9"/>
<path d="M118.165 39.6223C108.461 45.8356 99.8553 53.7539 92.8244 62.8836C97.6475 64.3067 102.4 66.0112 107.027 67.9977C103.132 71.8867 98.4348 74.9718 93.3303 77.0008C87.6496 79.2549 83.7963 82.0873 80.3649 87.1594C87.6772 89.1315 95.2572 85.9895 102.387 83.4258C109.572 80.8472 116.941 78.8043 124.436 77.3248C129.006 76.423 133.858 75.6341 137.429 72.6331C137.711 72.3937 138.006 72.0835 137.992 71.7175C137.978 71.4073 137.739 71.1541 137.514 70.9424C134.195 67.885 129.47 66.6172 126.391 63.306C126.053 62.94 125.716 62.4607 125.843 61.9819C125.941 61.6015 126.306 61.3477 126.644 61.1365C130.005 59.009 133.352 56.8816 136.712 54.7541C132.41 50.1187 128.036 45.5397 123.593 41.0453C122.242 39.6786 119.781 38.5796 118.165 39.6223Z" fill="#EE686B"/>
<path d="M165.793 91.1041C163.67 96.2326 163.205 101.953 163.74 107.49C168.296 107.011 172.782 105.897 177.015 104.165C177.703 103.883 178.435 103.545 178.815 102.897C179.067 102.46 179.124 101.924 179.152 101.417C179.461 95.4293 177.085 89.3432 178.617 83.5524C178.969 82.2277 180.08 78.7904 177.788 78.4095C176.551 78.1983 174.553 80.4385 173.639 81.1291C170.152 83.7779 167.466 87.0465 165.793 91.1041Z" fill="#F6E5C1"/>
<path d="M171.558 156.534C169.041 157.929 166.524 159.338 164.274 161.128C161.222 163.565 158.762 166.665 156.498 169.863C150.17 178.824 145.276 188.7 140.411 198.534C139.44 200.479 138.484 202.423 137.514 204.368C136.318 206.776 135.109 209.242 134.8 211.919C134.687 212.905 134.771 214.061 135.573 214.652C136.108 215.047 136.839 215.075 137.499 215.033C140.298 214.892 143.012 214.061 145.656 213.131C164.893 206.34 181.81 193.138 193.073 176.104C194.283 174.273 195.45 172.385 196.223 170.328C196.913 168.482 197.292 166.552 197.63 164.607C198.572 159.226 199.275 153.801 199.697 148.349C199.838 146.587 199.964 142.488 197.574 142.192C195.563 141.938 190.782 145.827 188.967 146.827C183.174 150.068 177.366 153.308 171.558 156.534Z" fill="#F6E5C1"/>
<path d="M58.9198 140.29C55.4043 141.952 51.6495 143.798 49.7369 147.194C47.7403 150.744 48.2744 155.365 50.4259 158.831C52.5778 162.297 56.1071 164.72 59.862 166.298C60.9728 166.763 62.1538 167.172 63.3492 167.031C64.6287 166.89 65.7539 166.143 66.7807 165.354C71.59 161.607 74.9644 156.351 78.241 151.223C82.2209 145.01 86.2987 138.486 87.1005 131.146C87.8878 123.862 79.7317 130.498 77.102 131.738C71.0415 134.583 64.9804 137.43 58.9198 140.29Z" fill="#336093"/>
<path d="M136.515 18.9961C142.604 15.6429 149.129 13.149 155.626 10.6694C164.471 7.30208 173.358 3.92065 182.667 2.24404C183.427 2.10315 184.228 1.99043 184.931 2.2863C185.663 2.58218 186.155 3.27255 186.577 3.93474C188.995 7.82333 190.163 12.4869 189.853 17.0659C189.825 17.5167 189.769 17.9957 189.474 18.3339C189.277 18.5734 188.981 18.7002 188.7 18.827C185.747 20.1655 182.653 21.2645 179.827 22.8565C176.986 24.4486 174.357 26.6183 172.923 29.5348C170.265 34.9309 172.135 41.7078 169.618 47.1744C168.183 50.3022 165.469 52.627 162.727 54.6982C158.621 57.812 153.756 60.714 148.651 60.0097C145.698 59.6011 143.04 58.0232 140.495 56.4591C139.103 55.6137 137.724 54.7827 136.332 53.9374C130.088 50.1473 123.353 45.7373 121.286 38.7209C119.725 33.3952 121.286 30.7183 125.068 27.1396C128.5 23.9273 132.409 21.2504 136.515 18.9961Z" fill="#D6EDFB"/>
<path d="M199.416 58.9386C199.894 59.8829 200.78 60.7847 201.835 60.6575C202.285 60.6011 202.693 60.3761 203.086 60.1362C204.605 59.235 206.18 58.2907 207.08 56.7691C207.924 55.3604 208.064 53.6553 208.177 52.0351C208.416 48.6115 208.5 44.8355 206.391 42.1304C206.152 41.8346 205.857 41.5246 205.477 41.4823C202.468 41.102 200.682 45.7232 200.161 47.8648C199.275 51.4434 197.574 55.3322 199.416 58.9386Z" fill="#F6E5C1"/>
<path d="M220.565 71.295C217.767 72.5633 214.673 74.9163 215.193 77.9594C218.892 77.7764 222.647 77.8046 226.19 78.9031C229.72 80.0023 233.024 82.3127 234.571 85.6803C236.99 90.9354 234.656 97.163 235.696 102.841C240.646 100.178 244.626 95.7538 246.763 90.555C247.663 88.343 248.254 85.8915 247.733 83.5667C247.298 81.6366 246.13 79.8895 245.891 77.9312C245.638 75.8319 246.468 73.789 247.199 71.8025C247.523 70.9428 247.79 69.8581 247.171 69.1675C246.552 68.4775 245.47 68.6185 244.569 68.7733C240.28 69.5341 236.146 69.2665 231.885 68.6041C228.089 68.0264 224.067 69.7171 220.565 71.295Z" fill="#F6E5C1"/>
<path d="M40.5681 149.138C40.4415 149.8 40.3994 150.49 40.1606 151.124C39.1338 153.773 35.2808 154.125 33.7621 156.52C33.4246 157.056 33.2137 157.704 33.3121 158.338C33.495 159.578 34.7324 160.381 35.9277 160.79C37.123 161.198 38.4167 161.409 39.387 162.212C40.9341 163.494 41.1166 165.876 42.5088 167.341C43.451 168.341 44.8289 168.778 46.1509 169.102C49.0477 169.82 52.029 170.201 55.0103 170.229C55.8397 170.243 56.7681 170.173 57.3166 169.553C58.0055 168.778 57.682 167.482 56.9649 166.735C56.2478 165.988 55.2492 165.594 54.3352 165.087C52.0428 163.818 50.2292 161.705 49.3147 159.239C48.3587 156.619 48.4571 153.745 49.1604 151.068C49.6382 149.264 52.5631 145.235 51.2416 143.53C50.0601 142.008 46.4605 143.009 45.0821 143.643C42.8743 144.672 41.0464 146.686 40.5681 149.138Z" fill="#F6E5C1"/>
<path d="M25.8872 210.694C26.0419 211.68 27.1809 212.116 28.1371 212.37C30.6543 213.018 33.1855 213.554 35.7448 214.019C36.9823 214.23 38.2338 214.427 39.4715 214.23C40.7089 214.033 41.932 213.37 42.5087 212.272C42.8321 211.651 42.9449 210.933 42.9726 210.214C43.0151 209.242 42.9023 208.242 42.4384 207.383C41.5665 205.79 39.6257 205.086 37.812 205.044C36.012 205.016 34.2401 205.509 32.4402 205.748C30.134 206.058 25.3247 207.242 25.8872 210.694Z" fill="#6B8FCA"/>
<path d="M151.745 39.27C154.262 38.2133 157.186 38.2133 159.816 39.4954C161.026 38.2274 162.165 36.8748 163.219 35.48C163.304 35.3673 164.57 33.5639 164.471 33.578C163.29 33.6766 162.109 33.9584 160.998 34.381C160.351 34.6206 159.577 33.9725 158.959 33.7471C158.129 33.4371 157.271 33.2257 156.399 33.113C154.599 32.8876 152.392 33.099 150.746 33.8738C148.721 34.8319 146.935 36.3394 145.599 38.1147C143.631 40.7212 142.548 43.9617 143.11 47.2022C143.153 47.4276 143.251 47.6953 143.476 47.7094C143.617 47.7094 143.729 47.6249 143.827 47.5263C145.332 46.1596 146.373 44.328 147.512 42.6655C148.623 41.1157 150.099 39.9604 151.745 39.27Z" fill="#1D445C"/>
<path opacity="0.5" d="M132.213 48.3997C132.606 48.8223 133.07 49.2732 133.605 49.8226C135.475 51.7106 137.022 53.8942 138.991 55.6695C140.284 56.825 142.028 58.121 143.814 58.3045C144.404 58.3609 148.567 58.4875 148.68 58.1635C151.45 49.4423 153.812 40.6788 156.287 31.8449C156.962 29.4356 164.232 9.25987 162.446 8.69632C161.997 8.55544 161.504 8.75266 161.068 8.93582C156.147 11.0915 151.239 13.2471 146.317 15.4028C142.942 16.8821 142.155 18.8828 140.72 22.0811C138.681 26.6459 136.727 31.239 134.842 35.8603C133.717 38.6217 132.649 41.4114 131.537 44.187C130.694 46.2158 131.116 47.188 132.213 48.3997Z" fill="white"/>
<path opacity="0.5" d="M157.693 55.6844C161.448 54.2187 165.498 52.5142 167.453 48.9778C168.507 47.0616 168.817 44.8496 169.098 42.6799C170.799 29.8165 172.501 16.939 174.203 4.07556C174.258 3.61062 170.687 4.97727 170.335 5.35768C169.407 6.3439 169.393 7.59788 169.028 8.87995C167.973 12.5995 166.693 16.2627 165.625 19.9822C163.473 27.4918 161.616 35.0859 160.042 42.7363C159.184 47.0335 158.396 51.3588 157.693 55.6844Z" fill="white"/>
<path d="M199.289 106.546C190.261 110.969 181.725 112.703 171.839 112.914C164.077 113.083 155.879 112.351 149.481 107.941C147.948 106.884 146.556 105.644 145.346 104.249C148.44 104.63 151.52 106.475 154.529 107.349C157.623 108.25 160.829 108.73 164.049 108.405C170.785 107.729 177.267 105.292 183.188 102.094C189.361 98.7685 195.042 94.6402 200.737 90.5544C202.551 89.2584 204.225 87.8635 205.589 86.1446C207.122 84.2145 208.823 82.4674 211.073 81.3965C213.956 80.0298 217.275 79.9452 220.467 80.0718C223.617 80.199 226.865 80.5512 229.579 82.1573C233.995 84.7636 235.978 90.7236 234.121 95.4291C232.883 92.8229 229.973 91.2167 227.09 91.2449C222.59 91.287 217.809 95.4573 214.209 97.7965C209.385 100.938 204.478 103.953 199.317 106.489C199.331 106.531 199.303 106.531 199.289 106.546Z" fill="#6C99CE"/>
<path d="M179.096 24.4344C173.091 28.0553 171.249 34.4096 171.46 41.0033C171.685 47.8084 176.649 52.4015 183.23 54.1485C203.058 59.4036 207.361 34.4519 208.05 20.1513C208.106 18.8551 208.078 17.3898 207.15 16.474C206.503 15.8401 205.575 15.6287 204.675 15.516C198.994 14.8115 192.792 16.474 188.081 19.6864C185.241 21.6166 181.964 22.7015 179.096 24.4344Z" fill="#6C99CE"/>
<path d="M86.9743 69.4919C86.5242 72.7041 86.3556 76.1137 87.7473 79.044C93.9488 75.7897 99.9397 72.1263 105.663 68.0826C102.119 67.0963 98.5756 66.1105 95.032 65.1098C94.4973 64.9688 93.9206 64.7858 93.6397 64.307C93.3445 63.8277 93.4567 63.194 93.6254 62.6583C94.4409 60.052 96.3115 57.9246 98.224 55.9663C103.764 50.2881 110.036 45.3146 116.828 41.2288C118.192 40.4115 119.655 39.524 120.26 38.0728C121.202 35.8326 119.796 33.0288 121.005 30.9295C121.806 29.5347 123.452 28.9571 124.872 28.1822C127.656 26.6746 128.331 23.3918 124.829 22.2224C122.074 21.3066 119.936 23.6595 117.77 25.0403C112.427 28.4499 107.449 31.8594 103.075 36.5088C94.5537 45.54 88.7038 57.1638 86.9743 69.4919Z" fill="#336093"/>
<path d="M94.9195 86.8914C88.4791 87.3143 86.6794 88.0751 87.1576 94.5139C87.7056 102.023 88.4227 109.589 88.4791 117.127C88.5494 126.341 87.3821 135.795 83.1213 143.967C79.9437 150.053 75.2605 155.238 71.1407 160.677C67.1608 165.932 63.3639 170.99 58.6674 175.696C61.6625 172.695 68.328 171.469 72.111 169.313C76.7655 166.665 81.1386 163.522 85.1467 159.958C100.123 146.658 112.005 129.314 115.422 109.265C117.053 99.6988 116.857 89.9206 116.66 80.2275C109.826 82.5237 102.133 86.4264 94.9195 86.8914Z" fill="#336093"/>
<path d="M43.1137 204.283C42.9169 204.156 42.7062 204.015 42.5094 203.93C41.0746 203.184 39.6685 203.282 38.0093 203.297C35.9984 203.325 34.0297 203.423 32.0609 203.776C28.1798 204.452 24.383 205.79 20.8674 207.396C18.8143 208.341 12.0785 210.679 15.7488 213.666C17.1128 214.793 18.8705 215.286 20.6002 215.653C25.1142 216.653 29.7688 216.991 34.3812 216.681C36.8562 216.512 38.8391 216.132 41.131 215.061C41.9891 214.652 42.8605 214.244 43.5638 213.61C46.2919 211.186 46.1371 206.382 43.1137 204.283ZM40.5686 209.862C38.9514 212.328 33.889 211.595 31.5125 211.37C30.711 211.285 29.8672 211.158 29.3188 210.567C29.2063 210.44 29.1079 210.271 29.1079 210.116C29.1079 209.806 29.4032 209.608 29.6844 209.482C31.4 208.622 33.2844 208.059 35.1968 207.847C36.4624 207.72 38.6983 207.312 39.8233 208.059C40.8075 208.721 40.9203 209.327 40.5686 209.862Z" fill="#1D445C"/>
<path d="M185.1 49.0198C186.155 48.2309 187.336 47.2164 187.238 45.9061C187.111 44.3282 185.1 43.4687 183.722 43.8773C182.372 44.2718 180.966 45.8498 180.052 46.8501C175.453 51.894 170.869 56.9519 166.271 61.9958C165.933 62.3624 164.302 63.7993 165.708 63.7429C166.679 63.7009 167.986 62.5034 168.746 61.9538C170.743 60.4887 172.529 58.7554 174.455 57.2195C177.943 54.4302 181.5 51.6968 185.1 49.0198Z" fill="#1D445C"/>
<path d="M175.411 66.871C175.017 67.5334 173.302 70.1258 175.271 68.7171C176.775 67.618 177.802 66.0821 178.983 64.6733C180.234 63.18 181.514 61.7005 182.836 60.2636C184.074 58.9107 185.48 57.7414 186.703 56.3608C187.772 55.1489 190.233 52.4158 188.475 50.7533C187.913 50.2179 186.703 50.6828 186.141 51.0632C185.142 51.7395 184.748 52.8384 184.059 53.7822C183.3 54.8249 182.695 55.9522 181.936 56.9806C179.63 60.179 177.45 63.4758 175.411 66.871Z" fill="#1D445C"/>
<path d="M248.746 78.0012C248.605 77.7336 248.451 77.508 248.296 77.325C248.914 75.8035 249.407 74.1692 249.744 72.3801C249.871 71.7316 250.18 70.21 249.463 68.7449C248.83 67.491 247.55 66.5749 246.06 66.2791C245.005 66.0817 244.007 66.1945 243.093 66.3637C242.137 66.5328 241.222 66.7722 240.323 67.068C237.046 65.1241 233.615 65.5045 230.563 65.8423L229.917 65.9269C226.359 66.3355 222.843 67.5612 219.75 69.5057C215.77 71.9715 212.226 75.5923 209.189 80.2697C206.067 82.3407 203.241 84.9614 200.583 87.399C199.05 88.8221 197.601 90.1601 196.153 91.372C192.778 94.1336 189.727 96.6133 186.338 98.6844C184.903 99.5861 183.398 100.403 181.852 101.122C179.756 94.373 179.883 87.1596 182.274 81.397C183.469 78.579 185.269 76.4377 187.195 74.1548C188.081 73.1126 188.981 72.0135 189.895 70.8016C190.5 69.9845 191.105 69.1535 191.723 68.3081C193.327 66.0817 194.803 63.7856 196.223 61.4464C196.8 60.4888 197.826 59.5306 198.684 60.9394C199.092 61.5874 199.205 62.4189 199.753 62.9541C200.681 63.7994 202.144 63.3063 203.254 62.7147C205.715 61.3762 208.106 59.5163 209.076 56.8536C209.793 54.8671 209.611 52.6549 209.414 50.5416C209.104 47.1884 208.795 43.8492 208.5 40.5242C208.289 38.2981 207.909 36.072 208.148 33.8459C208.373 31.5071 209.245 29.1824 209.709 26.8718C209.821 26.3363 209.99 25.6742 210.159 24.9556C210.651 22.969 211.143 20.9684 211.607 18.9959C212.086 16.9389 212.901 14.9523 213.435 12.9939C214.139 10.4579 214.87 7.1328 213.323 4.77991C211.874 2.582 208.682 1.8071 206.573 3.44144C206.404 3.55415 206.278 3.68096 206.137 3.82185C205.589 4.3995 205.153 5.13215 204.422 5.44209C203.831 5.7098 203.17 5.65346 202.509 5.62526C200.892 5.59707 199.219 5.89297 197.925 6.86509C195.267 8.89393 195.998 11.2891 197.756 13.318C197.32 13.6279 196.912 13.9097 196.561 14.0647C195.605 14.5578 194.634 14.9523 193.65 15.2764C192.919 12.8389 192.173 10.4156 191.414 7.96405C190.669 5.56892 189.867 1.34215 187.322 0.271376C186.689 0.00368107 185.972 -0.0104081 185.283 0.00368111C176.255 0.0882161 167.733 3.61051 159.577 7.17509C157.721 7.97815 155.893 8.73896 154.107 9.49978C150.985 10.8101 147.877 12.1204 144.812 13.5575C143.546 14.1492 142.407 14.9382 141.071 15.2905C139.707 15.6567 138.287 15.7695 136.909 16.1076C135.531 16.4598 134.167 16.9389 132.774 17.277C130.426 17.8265 128.092 18.531 125.828 19.3622C121.342 21.0106 117.039 23.1663 113.059 25.7728C105.114 30.9435 98.3362 37.8754 93.3157 45.9344C90.2083 50.922 87.7893 56.3461 86.1438 61.9959C85.3426 64.7719 84.5409 67.5612 84.0488 70.4074C83.5423 73.3238 83.5705 76.1275 83.7535 79.0721C83.7535 79.1705 83.7673 79.2551 83.7392 79.3541C83.7115 79.4669 83.6407 79.5653 83.5705 79.6637C82.7268 80.8192 81.4755 81.5236 80.4349 82.5099C77.594 85.1726 74.5004 87.5118 72.1101 90.6251C72.124 90.5969 74.1349 90.6958 74.3318 90.7097C75.1191 90.724 75.9065 90.7379 76.6944 90.7522C77.4818 90.7522 78.2691 90.7522 79.0565 90.7522C79.8444 90.7379 80.6317 90.724 81.4191 90.7097C82.291 90.6815 83.1486 90.5692 84.0067 90.4985C84.1754 90.4846 84.3722 90.4846 84.4989 90.6112C84.5973 90.7097 84.6111 90.8506 84.6393 90.9778C84.9346 93.2319 85.6379 95.4721 85.6379 97.7964C85.6661 98.1492 85.7225 98.5014 85.7363 98.8535C85.9331 100.53 86.0736 102.235 86.1582 103.926C86.2002 104.362 86.2428 104.813 86.2566 105.25C86.3412 106.701 86.3832 108.152 86.397 109.631C86.4396 111.576 86.4252 113.506 86.3268 115.45C86.2146 118.367 85.947 121.298 85.5251 124.2C79.1411 128.201 71.7867 132.047 62.3931 136.359C60.9445 137.007 59.4118 137.725 57.8647 138.542C57.5413 138.641 57.1338 138.726 56.7539 138.782C55.7133 138.994 54.6727 139.163 53.6603 139.303C48.9494 140.05 44.0981 140.839 39.7809 144.531C37.2074 146.715 35.6043 149.504 35.2809 152.378C35.2668 152.547 35.2809 152.702 35.2809 152.871C34.2403 153.618 33.2278 154.491 32.2294 155.52C31.8216 155.943 30.8654 156.929 30.6966 158.394C30.556 159.691 31.0482 161.029 32.0607 161.987C32.7497 162.635 33.5232 163.016 34.2544 163.34C34.9434 163.635 35.6184 163.861 36.3215 164.058C37.7699 166.848 40.3151 168.13 42.5654 169.229L43.0432 169.468C47.4449 171.652 51.9866 171.708 56.3884 171.751C56.9226 171.751 57.429 171.765 57.9493 171.765C57.8365 171.878 57.7243 171.99 57.5977 172.103C52.4793 176.654 46.8821 180.74 40.9763 184.234C35.309 187.615 29.3045 190.067 23.2436 192.673C22.7515 192.885 22.2171 193.152 22.0343 193.659C21.7671 194.392 22.414 195.125 23.0468 195.547C24.2139 196.35 25.7045 196.984 27.0685 197.337C28.2779 197.647 29.5295 197.675 30.7529 197.816C32.9888 198.055 35.2809 198.027 37.5309 197.901C45.9399 197.407 54.462 194.646 62.0415 191.011C63.8976 190.123 65.7256 189.179 67.5535 188.249C69.6071 187.192 71.7303 186.094 73.8397 185.121C74.2754 184.91 74.8239 184.628 75.4426 184.319C77.0599 183.515 78.6346 182.67 80.2381 181.825C80.927 181.472 81.5739 181.064 82.249 180.697C82.938 180.317 83.894 179.584 84.6813 179.528C85.7501 179.443 84.5973 181.965 84.344 182.444C83.7955 183.515 82.98 184.417 82.1224 185.262C81.841 185.558 81.5457 185.84 81.2643 186.108C79.6614 187.615 77.8893 188.926 76.0613 190.151C74.444 191.222 72.7847 192.222 71.0972 193.152C69.5789 193.998 68.2148 194.913 66.7805 195.815C64.868 197.013 53.4635 201.282 55.9383 204.551C56.7683 205.65 58.7228 206.1 59.9603 206.382C65.6974 207.721 71.7303 206.706 77.3833 205.452C83.3316 204.128 89.1251 202.198 94.975 200.549C95.5656 200.38 96.3816 200.324 96.6205 200.873C98.1394 204.339 86.5518 208.975 84.527 209.904C77.046 213.342 69.2272 215.723 61.1557 217.386C57.9913 218.034 54.8132 218.696 51.6212 219.161C48.8367 219.569 45.659 219.344 43.1416 220.781C39.7389 222.725 43.7183 225.825 45.8133 226.952C48.2179 228.249 50.946 228.84 53.6039 229.432C63.1385 231.531 73.1928 231.08 82.8677 230.418C101.978 229.08 120.849 225.008 139.102 219.231C141.015 218.626 142.913 218.005 144.826 217.372C146.851 216.681 148.946 216.005 150.985 215.202C157.538 212.666 163.543 209.51 169.013 205.762C171.094 204.339 173.105 202.817 175.032 201.226C176.283 200.197 177.492 199.126 178.659 198.013C180.094 196.675 181.458 195.266 182.794 193.814C189.91 186.023 195.436 176.781 199.205 166.284C201.961 158.578 202.607 151.406 201.44 141.628C207.585 137.007 213.45 131.991 218.976 126.538C224.348 121.213 230.381 115.211 234.191 107.405L234.318 107.448C234.529 106.898 235.162 106.293 235.767 105.715C236.709 104.813 237.679 103.954 238.621 103.108C242.91 99.2339 247.34 95.2327 249.294 88.7093C250.462 84.863 250.25 81.073 248.746 78.0012ZM222.323 73.6478C224.812 72.0981 227.624 71.1118 230.465 70.7878L231.112 70.7032C231.449 70.675 231.801 70.633 232.125 70.5904C231.73 70.9006 231.379 71.2384 231.013 71.6049C230.296 72.3237 229.509 73.0563 228.651 73.8027C228.383 74 228.116 74.2112 227.849 74.4086C226.907 75.1273 225.937 75.8317 224.995 76.5361C223.265 76.1839 221.479 76.0429 219.665 76.2259C219.356 76.2403 219.075 76.2967 218.779 76.3387C219.918 75.3103 221.099 74.4086 222.323 73.6478ZM203.93 57.9245C203.662 58.6709 202.045 60.3334 201.188 59.4599C200.99 59.2487 200.892 58.9529 200.808 58.6709C200.414 57.3606 199.739 55.9801 200.006 54.6554C200.175 53.8664 201.243 50.3584 202.157 50.4429C203.691 50.5698 204.323 56.7829 203.93 57.9245ZM206.77 49.6821C206.798 50.3584 206.812 50.9361 206.404 51.5138C205.434 52.8804 204.914 49.8512 204.787 49.3017C204.436 47.8364 204.408 46.2866 205.055 44.9059C205.406 44.1169 206.081 44.4973 206.278 45.2018C206.658 46.6389 206.728 48.1887 206.77 49.6821ZM136.149 23.913C142.519 19.6299 149.073 16.8825 156.033 13.966C157.848 13.2052 159.704 12.4304 161.56 11.6132C168.422 8.62628 175.13 6.11837 182.498 4.52631C183.118 4.3995 183.75 4.25861 184.369 4.42768C185.325 4.70947 185.719 6.09023 186.113 6.92148C186.647 8.07678 186.802 9.373 187.153 10.5987C187.8 12.698 188.7 14.6846 189.066 16.8543C189.08 16.953 189.094 17.0516 189.038 17.1361C189.009 17.1784 188.939 17.2207 188.869 17.2489C187.392 17.8828 185.902 18.545 184.425 19.1791C183.82 19.4468 183.089 19.9258 182.414 19.9821C181.866 20.0103 181.261 19.8694 180.685 19.8835C176.691 19.9821 174.624 22.5887 172.472 25.5051C170.026 28.7738 169.632 32.7892 169.35 36.7342C169.041 40.9891 169.027 44.3564 165.962 47.7801C163.557 50.4852 160.337 52.3309 157.13 53.9936C154.234 55.5151 151.168 56.952 147.892 56.9802C142.449 57.0792 138.864 52.6549 135.137 49.3863C132.31 46.9066 130.004 43.7506 127.515 40.9046C125.87 39.0307 123.001 36.4524 122.945 33.7613C122.917 32.5356 123.873 31.7466 124.745 31.0281C126.798 29.3796 129.09 28.0411 131.383 26.7449C132.971 25.8714 134.63 24.9415 136.149 23.913ZM92.5284 57.9102C94.4127 53.1902 97.1828 48.5409 100.234 44.4409C103.441 40.1156 107.238 36.2129 111.484 32.8878C113.622 31.2253 115.858 29.7037 118.192 28.337C119.893 27.3508 121.468 26.3223 123.24 25.491C124.126 25.0824 125.026 24.6597 125.982 24.5752C123.409 26.3786 120.794 28.1398 118.291 30.0137C117.657 30.4927 116.997 30.9999 116.659 31.6903C116.322 32.4511 116.378 33.3528 116.659 34.1559C117.292 35.917 118.909 37.0583 116.856 38.5376C113.368 41.0173 109.895 43.4829 106.408 45.9626C103.638 47.9351 101.106 50.288 98.6315 52.6409C97.5207 53.6696 96.3955 54.6836 95.4251 55.8391C94.2861 57.1914 93.3721 58.8965 91.9235 59.9392C92.0362 59.1359 92.2469 58.6289 92.5284 57.9102ZM88.7878 74.8033C88.816 74.3948 88.8581 73.9718 88.9001 73.5632C88.9847 72.7605 89.0831 71.9571 89.1954 71.1682C89.3363 70.1818 89.4486 69.1955 89.6034 68.2235C89.6316 68.0262 89.9551 65.6311 90.1939 65.6875C91.0238 65.9131 91.8676 66.1525 92.7114 66.3216C94.1456 66.6174 95.5517 66.9978 96.9722 67.3356C98.35 67.674 99.7423 67.9134 101.12 68.2374C101.556 68.3363 101.992 68.4491 102.428 68.5475C102.456 68.5475 101.852 68.9423 101.81 68.9705C101.486 69.1391 101.163 69.2945 100.839 69.4493C100.192 69.7733 99.5311 70.0834 98.8847 70.4074C97.6047 71.0272 96.3252 71.6613 95.0734 72.3657C92.922 73.5351 90.8408 74.7469 88.7176 75.9865C88.8017 75.9163 88.7735 74.9438 88.7878 74.8033ZM85.8209 85.187C85.4831 85.2151 85.1458 85.2572 84.8079 85.2854C84.6255 85.2997 84.4568 85.3279 84.2738 85.3418C84.26 85.3418 83.9365 85.3561 83.9365 85.3279C84.2456 84.8768 84.7377 84.5954 85.174 84.257C85.5533 83.9612 85.8767 83.5947 86.2284 83.285C90.1801 79.7201 95.2001 77.7054 99.8125 75.2119C103.905 72.9855 107.87 70.5058 111.653 67.7724C111.836 67.632 112.033 67.5048 112.216 67.3638C111.695 67.1106 111.048 67.026 110.486 66.8286C109.783 66.5749 109.066 66.3498 108.348 66.1381C106.858 65.7013 105.367 65.3209 103.863 64.9549C102.4 64.6027 100.938 64.2506 99.4891 63.842C99.1092 63.743 95.2283 62.4045 95.2001 62.4471C95.8049 61.4607 96.5923 60.6436 97.394 59.8264C98.6171 58.6007 99.8827 57.4314 101.12 56.2195C102.597 54.7682 104.242 53.5142 105.803 52.1477C110.542 47.9914 115.661 44.5959 120.906 41.1582C122.354 43.1448 124.014 44.9764 125.673 46.7939C127.586 48.8932 129.484 50.9924 131.396 53.0776C131.875 53.6132 132.423 54.1909 132.999 54.7543C132.62 54.9799 132.24 55.2049 131.875 55.4023C127.586 58.2623 123.17 60.9537 118.656 63.4334C118.726 63.3908 119.19 63.6446 119.275 63.6866C119.485 63.7712 119.683 63.8558 119.893 63.9404C122.439 65.0252 124.913 66.2791 127.361 67.5756C128.584 68.2235 129.793 68.8859 131.017 69.5339C131.635 69.8579 132.24 70.1818 132.859 70.5058C133.421 70.8016 134.026 71.0416 134.532 71.464C134.462 71.5204 134.363 71.5624 134.293 71.6049C134.195 71.6752 134.096 71.7459 133.998 71.8023C133.815 71.9151 133.618 72.0274 133.407 72.1263C133.056 72.2955 132.69 72.4359 132.325 72.5631C131.453 72.8871 130.581 73.2111 129.709 73.5351C128.893 73.8308 128.12 74.1974 127.29 74.4794C126.896 74.606 126.559 74.7188 126.306 74.8172C121.806 76.4797 117.039 78.0294 111.695 79.5791C111.203 79.7201 110.725 79.8611 110.233 80.0021C102.316 82.3551 94.0892 84.3836 85.8209 85.187ZM42.9868 148.222C44.8711 146.587 46.9805 145.728 49.2585 145.122C48.9494 145.517 48.6398 145.869 48.3589 146.292C47.9652 146.898 47.67 147.588 47.4167 148.321C47.2337 148.334 47.0651 148.363 46.8821 148.391C45.5744 148.504 44.2247 148.616 42.8883 148.912C42.5931 148.982 42.3404 149.039 42.059 149.123C42.326 148.799 42.6356 148.518 42.9868 148.222ZM36.209 158.803C36.1668 158.774 36.0825 158.732 35.984 158.69C38.0793 156.591 40.2028 155.337 42.7899 154.689L46.6571 153.731C46.7416 155.83 47.1497 157.929 47.8104 159.691C47.5854 159.719 47.3742 159.761 47.1353 159.789C43.2262 160.057 39.5277 160.198 36.209 158.803ZM45.293 165.072C46.0383 164.904 46.8539 164.763 47.6976 164.65C47.9652 164.636 48.2179 164.622 48.4855 164.608C49.2867 164.537 50.0885 164.495 50.8902 164.439C51.7898 165.326 52.8448 166.115 54.012 166.791C50.9184 166.693 47.9791 166.411 45.293 165.072ZM57.9211 163.269C55.4883 162.24 53.646 160.691 52.7602 158.873C51.4243 156.21 51.0024 151.195 52.4511 148.969C54.1524 146.391 56.9369 144.531 59.9459 142.938C60.2694 142.812 60.579 142.643 60.9025 142.445C62.1117 141.839 63.3071 141.29 64.5025 140.726C72.2644 137.19 78.649 133.921 84.3158 130.61C83.5567 133.738 82.5581 136.866 81.2786 139.937C77.594 148.743 71.9691 157.281 64.8254 165.016C62.3931 164.608 60.0587 164.171 57.9211 163.269ZM194.62 164.622C193.987 166.439 193.27 168.229 192.483 169.99C192.188 170.68 191.878 171.342 191.569 172.004C187.842 179.81 182.752 186.925 176.648 193.011C175.791 193.871 174.905 194.73 173.991 195.547C172.416 196.984 170.785 198.351 169.083 199.648C168.887 199.816 168.69 199.957 168.492 200.098C167.143 201.113 165.765 202.057 164.386 202.944C158.551 206.635 152.349 209.129 145.487 210.877C144.052 211.257 139.314 212.891 138.371 210.975C138.16 210.524 138.188 209.96 138.287 209.453C138.962 206.016 141.493 202.789 142.998 199.661C147.947 189.362 150.521 178.274 158.705 169.82C163.838 164.509 170.236 160.437 176.691 157.14C183.694 153.562 190.444 149.49 196.884 144.967C197.531 152.547 196.842 158.408 194.62 164.622ZM232.645 95.5988C232.349 98.5014 231.604 101.347 230.423 104.024C227.048 111.675 220.945 117.719 215.545 123.045C203.367 135.076 189.558 145.066 174.469 152.772C167.986 156.07 161.419 159.676 156.118 164.763C148.552 171.99 144.967 180.162 141.352 189.743C138.681 196.773 134.617 203.282 129.54 208.834C121.412 217.71 109.811 222.303 98.2234 224.487C92.2469 225.614 86.1438 226.149 80.0694 226.318C74.9643 226.445 67.4695 227.46 62.8006 225.05C62.6038 224.952 62.3788 224.839 62.1963 224.712C62.1819 224.698 62.1681 224.698 62.1537 224.684C61.8585 224.472 61.5776 224.191 61.5212 223.853C61.3382 223.035 62.2521 222.444 63.0257 222.148C70.7179 219.189 78.9022 217.738 86.4252 214.314C91.741 211.919 96.6205 208.566 100.698 204.381C102.316 202.719 110.205 193.829 105.086 192.236C104.664 192.11 104.2 192.236 103.778 192.363C98.7299 193.97 93.8222 195.843 88.7033 197.238C85.5251 198.126 82.3474 198.985 79.1693 199.873C76.4832 200.605 73.6146 201.211 70.8445 201.324C70.5349 201.338 70.2114 201.352 69.9162 201.254C67.4131 200.408 72.3772 197.999 72.8975 197.717C75.1191 196.449 77.3833 195.224 79.4784 193.744C83.3598 191.039 86.6503 187.714 89.4768 183.938C91.3893 181.36 93.3019 178.556 93.9062 175.315C94.1313 174.146 94.708 170.173 93.3859 169.37C93.1471 169.243 92.8518 169.257 92.5704 169.285C90.9531 169.553 89.5896 170.596 88.2394 171.511C83.5285 174.738 78.3111 177.372 73.2491 179.951C72.7006 180.233 72.1942 180.486 71.8005 180.669C69.6071 181.698 67.4551 182.811 65.3463 183.882C59.1586 187.066 52.6899 189.7 45.659 190.236C45.2089 190.264 44.745 190.306 44.337 190.109C43.9151 189.926 43.5917 189.489 43.7044 189.052C43.7885 188.77 44.0135 188.559 44.2524 188.376C46.2213 186.812 48.3728 185.502 50.4401 184.065C54.096 181.514 57.5413 178.711 60.8461 175.752C72.0394 165.805 80.6456 154.083 85.7645 141.839C89.5188 132.865 91.0095 123.524 91.2766 114.549C91.3191 113.013 91.3473 111.477 91.3047 109.984C91.2909 108.11 91.2063 106.25 91.1079 104.419C90.9813 102.291 90.7988 100.206 90.5876 98.163C90.2923 95.4296 89.9551 92.7951 89.5752 90.2591C94.1313 89.2025 98.6735 87.7932 103.201 86.5537C108.039 85.2433 112.848 83.8905 117.644 82.4253C119.092 81.9747 120.54 81.5236 121.975 81.0448C123.479 80.5516 124.97 80.0303 126.447 79.4951C127.937 78.9593 129.414 78.396 130.876 77.8044C132.339 77.2122 133.787 76.5925 135.235 75.9301C136.67 75.2683 138.09 74.5778 139.482 73.8452C140.185 73.4787 140.875 73.0983 141.549 72.7179C141.887 72.5205 142.239 72.3237 142.576 72.1263C142.745 72.0274 142.913 71.9289 143.082 71.8305C143.11 71.8162 143.518 71.5768 143.504 71.5624C143.237 71.3512 142.956 71.1964 142.674 70.999C142.464 70.858 142.266 70.6894 142.056 70.5622C141.001 69.8999 139.932 69.2381 138.877 68.5757C136.529 67.1106 134.195 65.6875 131.692 64.5182C130.398 63.9122 129.104 63.3063 127.937 62.4891C127.923 62.4753 128.893 61.8693 128.978 61.8268C129.202 61.7001 129.442 61.5735 129.681 61.4464C130.019 61.2777 130.314 61.0378 130.637 60.8266C131.523 60.277 132.451 59.7982 133.351 59.263C134.392 58.6289 135.46 58.0368 136.543 57.4734C138.273 59.1923 140.635 60.277 142.857 61.1931C145.29 62.1933 148.426 62.0385 150.971 61.6299C154.881 60.9958 158.565 59.3471 161.94 57.2478C169.646 52.4577 173.541 46.0471 174.188 37.0864C174.427 33.7614 174.666 30.6336 176.339 28.4075C178.308 25.801 182.175 24.3779 185.916 22.9972C188.826 21.9405 191.794 20.6444 194.705 19.3763C196.237 18.7282 197.756 18.0519 199.289 17.432C199.922 17.1643 200.808 16.6148 201.511 16.6007C202.678 16.5726 204.576 17.5306 205.532 18.1505C206.756 18.9396 206.278 20.6866 205.954 21.856C204.253 27.9144 203.114 34.029 201.005 39.9888C197.784 49.034 193.327 57.6 187.758 65.4199C183.61 71.2528 177.324 75.1694 171.952 79.7063C164.738 85.8067 160.688 95.162 160.646 105.687C160.646 105.786 160.491 105.828 160.407 105.841C160.069 105.912 159.717 105.87 159.38 105.841C158.818 105.799 158.255 105.729 157.707 105.645C156.99 105.546 156.272 105.419 155.555 105.306C154.74 105.165 153.924 105.01 153.108 104.856C152.251 104.686 151.407 104.517 150.549 104.348C149.72 104.179 148.89 104.01 148.046 103.841C147.287 103.686 146.541 103.531 145.782 103.362C145.164 103.235 144.559 103.094 143.94 102.968C143.603 102.897 143.279 102.798 142.956 102.756C142.941 102.756 142.913 102.756 142.885 102.798C142.871 102.869 142.913 102.953 142.941 103.024C143.026 103.165 143.082 103.305 143.195 103.418C143.701 103.968 144.193 104.532 144.784 105.01C148.552 108.025 153.052 109.857 157.848 110.378C159.225 110.533 160.618 110.604 162.01 110.576C178.463 110.336 192.16 101.812 203.873 90.9634C208.809 86.3983 213.928 81.6789 220.115 81.073C224.094 80.6782 228.088 82.1998 230.268 84.9193C232.279 87.4272 233.109 91.2028 232.645 95.5988ZM177.338 102.968C173.527 104.306 169.547 105.151 165.54 105.517C165.638 96.5425 169.041 88.5822 175.102 83.4819C175.692 82.9887 176.297 82.5243 176.873 82.045C174.919 88.4694 175.074 95.9653 177.338 102.968ZM234.107 81.8901C233.094 80.6218 231.843 79.5653 230.437 78.6917C230.887 78.3396 231.323 77.973 231.745 77.6208C235.654 74.6624 239.423 71.9853 243.923 71.182C244.302 71.1118 244.668 71.0698 245.019 71.098C245.005 71.182 244.991 71.2948 244.949 71.4358C244.19 75.3103 242.769 78.1847 240.393 80.7346L236.146 85.2715C235.626 84.1022 234.965 82.9611 234.107 81.8901ZM244.625 87.3144C243.318 91.696 240.59 94.6832 237.299 97.7124C237.383 97.191 237.468 96.6553 237.524 96.1058C237.693 94.556 237.735 92.7387 237.538 90.8506C238.213 90.3011 238.888 89.7239 239.634 89.1461C240.871 88.1598 242.179 87.1596 243.332 85.9759C244.021 85.2854 244.597 84.5672 245.16 83.8341C245.16 84.9475 244.977 86.1169 244.625 87.3144Z" fill="#1D445C"/>
<path d="M57.1758 149.912C57.063 150.124 56.9369 150.335 56.9508 150.574C56.9646 150.814 57.1476 151.054 57.3865 151.039C57.5131 151.026 57.6115 150.955 57.7099 150.885C60.0161 149.222 62.3506 147.531 64.2493 145.418C66.1475 143.305 67.6381 140.698 67.9472 137.866C67.9898 137.415 67.9334 136.851 67.5115 136.711C67.3147 136.64 67.1035 136.697 66.9066 136.739C65.6272 137.091 63.7567 137.768 62.8709 138.81C62.1399 139.669 62.0973 140.811 61.6755 141.882C60.5364 144.742 58.6803 147.249 57.1758 149.912Z" fill="#1D445C"/>
<path d="M66.4287 147.926C66.2744 148.194 66.1196 148.49 66.1334 148.786C66.1478 149.095 66.3867 149.42 66.6963 149.392C66.8506 149.377 66.9916 149.279 67.1182 149.194C70.1272 147.024 73.1505 144.827 75.6398 142.079C78.1285 139.332 80.0554 135.936 80.4491 132.245C80.5055 131.668 80.4347 130.921 79.8867 130.738C79.6335 130.653 79.3521 130.709 79.0988 130.78C77.4395 131.245 74.9929 132.104 73.8395 133.471C72.8835 134.598 72.8414 136.077 72.2929 137.472C70.8023 141.191 68.3976 144.46 66.4287 147.926Z" fill="#1D445C"/>
<path d="M106.605 99.9099C106.521 100.036 106.366 100.107 106.212 100.177C102.71 101.713 99.1663 103.249 95.37 103.996C93.9916 104.278 92.5711 104.447 91.1512 104.475C89.4919 104.517 87.8044 104.362 86.2009 103.967C86.1169 102.263 85.9759 100.572 85.7791 98.8953C86.5106 98.4447 87.2841 98.0925 88.0294 97.9654C88.9152 97.8244 89.7728 97.9936 90.6309 98.233C91.2635 98.4022 91.8965 98.5713 92.5711 98.6698C96.8181 99.2901 101.093 98.8671 105.326 98.9379C105.649 98.9379 106.015 98.9517 106.282 99.1209C106.577 99.2757 106.774 99.6561 106.605 99.9099Z" fill="#1D445C"/>
<path d="M100.727 110.97C100.642 111.097 100.487 111.167 100.333 111.238C97.3938 112.506 94.4407 113.802 91.305 114.62C90.7002 114.803 90.0958 114.929 89.4771 115.056C88.4642 115.267 87.4236 115.408 86.3691 115.479C86.4676 113.534 86.4814 111.604 86.4394 109.66C86.524 109.674 86.6224 109.688 86.7064 109.702C88.2535 109.928 89.8005 110.012 91.3471 110.026C94.047 110.069 96.7613 109.913 99.4612 109.956C99.7846 109.956 100.136 109.97 100.417 110.139C100.712 110.308 100.895 110.702 100.727 110.97Z" fill="#1D445C"/>
<path d="M182.837 193.871C181.5 195.322 180.136 196.731 178.702 198.07C177.071 197.351 175.524 196.519 174.005 195.618C172.74 194.871 171.502 194.082 170.251 193.293C170.124 193.209 169.97 193.11 169.913 192.969C169.787 192.687 170.026 192.349 170.349 192.222C170.659 192.11 170.996 192.138 171.348 192.194C173.12 192.462 174.905 192.786 176.663 193.096C178.702 193.448 180.756 193.772 182.837 193.871Z" fill="#1D445C"/>
<path d="M175.074 201.282C173.147 202.888 171.151 204.396 169.055 205.818C167.902 205.283 166.777 204.649 165.737 203.945C165.287 203.649 164.837 203.325 164.415 203.015C161.743 201 159.409 198.619 157.117 196.252C157.004 196.139 156.892 196.026 156.85 195.858C156.807 195.561 157.13 195.266 157.454 195.224C157.792 195.195 158.129 195.308 158.439 195.435C161.996 196.816 165.413 198.619 169.112 199.718C169.534 199.845 169.955 199.957 170.406 200.07C171.966 200.465 173.598 200.352 174.92 201.169C174.948 201.197 175.018 201.226 175.074 201.282Z" fill="#1D445C"/>
</svg>
PK      \p    -  codeinwp/themeisle-sdk/assets/images/wplk.pngnu W+A        PNG

   IHDR   Q   Q   J6   	pHYs        sRGB    gAMA  a  EIDATxghTKOĲX{l-hPD~((VbE+JKP`$մ!ygS6ܝ0?X{s攙l"^724FE} B<K0G%^Do=<dx~:[%bl1uuu~ρ5"X`ԩSB$ڌQFD`DTQFD`DTQFD`DT@XhDSMǏ!C۷oA;a}f͢yyy~zz"ܹ]v{n!ѣ-_jkkIae;wRncp߿Sd>{+K.Z(Pp֭[6o+˗/.fv_Z#3p\޽{Srr275 hlٲVxi$8XDW^.]Puu5ٳ<b+WϧCNPΝ#(P[B(Gp5%7ਈp_qE[B߾}iƍXaa!:uV1==)J1[v-S'r+ʒ={6ϏK6ma8HpTDTw	CDӧ7ہ6l`D5!G&Oq ***̙}{ŊRD^tI{^XEDW?>uVxI*(( Ḉ͛X^h	3|pZxT;:+(E;ypƌV0}ݺucGޡ	IWg4qDС0Ν+r^F+!KF#FH!ٱcwj삡T,//'ׯ_ Ҽy$z4sLiM<ƌ"eqNZa#mQS05T[O6\?I&*!`Iѯ_?^@{!u7pq{tkiժU\2
DPs(!!A!l?~~ٙ2etAbm6[eyn?uT:<>|F-zGy<L! ѣiذaܱcG^'̚>~"!E߿ͱl2^B@EcO$2B*">8E\ EŋtD{N xMT5J'..G~;m!|ÂSLLL`k׮\7uQ|.^Ȗ{}z#\d	(..S8p &ҷon뫪xͅXxnfscիY4GrL-"Ė'|2(k56p3gpl\oۭR) :"jYw~|>ilҥe,Dk.Z<,bD0sjP@cgС\Dh'Uᤦay=rlNМ;Zr}x)o߾ё#G8r\;ks{E%*@,Cs{m{qP'<%5XgV,>
m""B8qBr]T/nlw5]aH9 \tUDp&(.hs֍7x^'OHhݳCZ:11gϞu]9o|Gٳg n]k
ki
0"* #
0"* #
0"* #
0"* #bֹ#^/n2`a112;;+X]|>C^=M$CPX^)v҂Fll7>>oڍ?ڐs933489 c    IENDB`PK      \}    2  codeinwp/themeisle-sdk/assets/images/animation.jpgnu W+A         JFIF       C 


 C		               	
    } !1AQa"q2#BR$3br	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        	
   w !1AQaq"2B	#3Rbr
$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz   ? S
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 (3 Z (I I=*9!]X	 Ҁ@ &Fqhh"	V#   (b7Z u  P@  P@  P@  P-Mχm5XDxeh6zj?@=hh8UPy 3PFM{Ml/cӾrщ	PPx<a@ߎKKkO<mh+d*NO> j$<CjnIQF;&{ȶgä³4!wv@nKi]rɩAh$[˜g#h
 ^yw`xP a#q=:y(.Ɠ[A]~	@\{ +me4gm$hI|#Z T/->{}5no$+q:n9䞹4 Oux-Nndjb\~Tu}fJs!9BcПPyI<ẺHaw,@b?r= ?T5/n6O@g?#h{kkEqݭŸIH`HVqyڬd'i!%ՔLqpz ܠ
 ( 
 ( 
 (~G_}>\D$8ph4{ugcg\\ڜJkWu+= v`qҀ(%nj]$Tr`pO@	d]Z"+G 	hl]n\J" t{{P]?D?ti1o:/zP8  ,c {PmsPwQDk-#/	6 x_xfVA42	ddbA
w1E}!s@
5E$f"L.vs> CX2MI*4g9s =hi(|$0{{	hXZ	c1I1{P`0aDa9M<'z et>խxiVEN'1 nS.y_O@mjv@"8'~f
 ( 
 ( 
 ( ix]سhVDLC ~xSJ6FN~X.xc;0  -  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@  P@ 5cRTN <W1!%d`AE I@  2M $r,d2@+}lz}J (3U,N  JƲF  }  P@  P@  P@  P@^յW/3`	>q*x~<{?b:/*7AP!aͨ]?#Q_ A(6Hge̗1ģɷ&1A g@|GhW_P#2mxj2 SUD
ȑhnq99h?URZ	jKJέXlۑ < W-F[ol$e~s~iọҮl;{kquҮ̂H8ksy-X=( 0 *ڇ5cMR-Fd*P?6#-J ht5VoXhGiHP>^UFN{P5=jRD{	\$Ͼ8OjWkk	?FH;FI,2pz(!gu('M:,4A\'G@Cy&q[D?w( ZI; ( 
 ( 
 ( 
 (<}n]pH3@>(6}ugi&f8p)RҀ;Qӎ ݤ[<ReaA@3NO;T|]%:mV2g}@6\0h cGm[Ǝ*p::6yOcm<s8T%` J KH%HI13(%	%On	PsiwI<`w'$v<C +鶒LekXR!s,]Fpj #m"vZK3Ŷ0<l+rhǆgX1%6c##O'ހ%mNo¿R0Uxc
 úUپѦYPd
Pqti-½.. 4׎9[AQ]AVQ0c4~
 ( 
 ( 
 ( 
 omؖI9$E;@O
hWQQ\4U҉c v```t
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
׺wPګ)@l ,+MIY.U8c ^mj%Cr$1nq@@I<pH	H R|d~t% CoyL̒\ Fc	SpG5 !8<
 ۋṔz ( 
 ( 
 ( 
 ( 8wt;x>o{@bnG@⏄PP@#ZAuHslPNJ $ԇ9Yb~ȱE csr Y/oլ4_ĒLOڦehд@,
1/ր*MbF&YDv*_w\{cT<=&dD,7*첰 .yPc}kk2kV3lPr:c s$ԮE߈'X?j,p1 ֵ-LM}JW8t˫qmmC+E0lwf-y(	lmzkgxCyB~ѐ{h#SlΓys]^$ՄȩL 9&3^WRڍJkk*{MHmBC N֮i/]5']dċ`p?$cۚ Q4-R=;_VO쯵9p
AP 	;Ohyh;kog0\.h{ZjZ}I=\[ON;C9ל@  P@  P@  PC_[M\3[6c/t=h='◃{۫XXFf4ڎG(h"V (7W3<k/٣I
T7 PuT·\08#OZ %m
r>u=&NxYy@{v OC&+h^BkVyn
0,B(   <±<B$>w Q#4 cl#t|n]   (>a7m݌ - PC

8cry4gi!x- Ih
Nz(im  NOOS@KH89tH+qhI- ov6rQ(Vxc%(U	h 
 ( 
 ( 
 (8sI$zn@OWL"k	Gϥ u(h 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 ( 
 (PK      \rKt
 Kt
 -  codeinwp/themeisle-sdk/assets/images/team.jpgnu W+A         JFIF      C  C             	
    } !1AQa"q2#BR$3br	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        	
   w !1AQaq"2B	#3Rbr
$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz   ? 9pXs`+cW`ON]zyfGn xM6[  v*KG,F	' KBۧeeF'<&=} ^M6ܫ>̵o"!eHdnMwW)\ú4]sO=>\efg~F_T%*F=O[NqqzǦwGTJ5[`k^>pgX)n=Uۻ
Fq`px=yVOϸ`c=NO:V񕵷:#-bI z`r:M֋jCKc6kf;*}a[)[}_Df]v `X2|*
2	`8J-6Z6Q{+PQ|<[j٥_
	=uzZw<E6>Q׵[7/OH8R[m#?8SqScF\Ydb%MV\JP
aSrZPK\G=>hSGRjZZPnI+/jw<s=BI_?Yh_H}{jp	|[^VF<8ENU)|=/'|UKF*5#E棊r鸧՝Zv޾e'QYj:.=9?P?g
#}#^-'T>'5ͯbFM3`{՝jz5ؖÞ"Oon5͸7V?i9ATiI%~OӍQTJ*QHW(ȰM8Fbkޛmo>iwoa3ڤgTXt],VLx(%xy4qXF#Vduk{. ~ #͵o, 	_gXl</&kmj/miZuou/%Qb*ҡM)EK$}vg%\O/J%VޓO|W Kt _τZZ7Ï\ 5EAӼ5?%>S͛N)9C,.GB֌-;:$m3ӮR:Mԅ(A>oueDyiTg|Rܷ&z}OW&]-">&ifĊ`ƚx7v]aRX)TwJRWOM%VMuF!tch`[htmZ[+Xi`t3'$b'9sI˫_?=ݕVKowEb6T/spPgtח͏.("s#aʢf~|︺__H!dmo1st:m Kvpac+iV'w, Yw5ީ>ca^)t>;XA2Mqk=V迼y5HpPXT#)(m~Bnm-[jMs A?`=PÎdZjK=GBVD8&=:y>*J?t)˺ۦ,񔔒u4/ۧٿE}aJ#F:e&4>KuOIjpRGX/QedZJ-M>ۧc<c1Fmd-Sօ/m๸Ho.]sR{,!fmCnaQrvnJk[}[BJEWmn {> aB դujZxi_ؔ 8]+5oTw> qR{x2h
mBA/S^Uo(&?:]rfEtFU%ͦ̌XHBU% ^2V+$r%ys2qZH]Mo6q".Dk!)o$# _ _{Z$0%PPr[ɺAp[iq	5n|qZiY=]I,4vf 4>w'hB+K  MsQt}#R[mt3AwSH_ͨOvMw %HQZo]k ju u+[K
{Cgi[[-0x VVSۤ\ƧP'NW՟[tN]A_KUmNÿ^_)OIOI|(cY+-_QDcɸ0P/$%Skrʛoz.  ]S߉>#[O#TQ<7XX^Waer\h&jdyY9JN\B*sG䠾i'w ^( h{1[k_hZ_a>6Z׾5|B唛o][XX\:5ʝc'3jtZw/h~iTz.6Z>cm~nm)mecaZX[D[[[(T%:{moc"ĺU4:R駵~&KYBPUgh"UhWtIiwLMfR F]|x6(+.݋^Z]MwKI=L#1 @$ 5ռ!Q  dӵ	 oh,!GlZ-ʹ1jE]T'#UZk_X
fI䘀okۈ%?ؤ̱kI1Qy%ƀmPр`%Ucb߭o>	|lAojuR[mZGO}iOuIGon$k[y5~($s$).1ߗ^O$W؋r EcG^0(Q4l	;{T=? [& 	Z¿kvZ95/>H$ĞgE|
@p)SQJ5!'^xB-Zh7ȰGVg	gӬt;;XĎXEJH}Zh^ٮ%ctnCj=:`S_:Wo17q<у{H9pI^q? Au !_u+gr}rz[t_?u&ۡd###<5_zAY_v\Y[hops4#Y2IO"mL~䉇ϭ| z멸\XDͧD15KRWp+^h-|_e׼-6!PxGVʛdMNO\$+dvvGJ*~uӧ{Ou-<onϜXo;[SH1&fB!w_s .  kȺKiW<#uve'a$Bk=Sj%|Fk EEdѯkwI4,sn0'i6pOR1O>CEm,I: ~pNJ$W8Q&9?@+fhXݴ n^n7F|8nnh<Qe{/  8ft ٩1$LRX9;v^o lU Iw@U-,> ?/ԟ%|z'IQE9E&7  	Q?O_Κk;\Ii{o-ݴDkY!򤶸ꌓA4Ex$GB뱹_/.+u^{t<K -|3zZݎ>|C=㏄ZTӤj'RC2jżvҟ7Rݳq{[/G(x]o>۸\ l8Dgt42"8#틞^`Z"}	ϵZOCF#21ML
ѵRT!F%o?  sZ爼]N#xᆣ,_}{7÷rHk
k yveҖ6~^jg*4^|Vl ZY>~~?<234|#ϊv<<ca|4A$Y幸gtir_ݥgKmV/Ҥ+hy?/ǅo
[^"`DQZ?ƤXaIHzqաJ/9{&dvv$U6O9 ge|us ~4ۋ9OIǁ07 g:t{T{ik,LơW_r:9IZ){T*oOEo߯wаl`qֹuPNH#? 54aМѧZ^v>@|FoL'w5ka|֮uRI4QmS\G''ݙ$/mgSPnpWOYÿyCu!xq]u? );ºcBZ$֗:vZ}̶:hXtMFL^V5+k-B^55%u~ZVORM]m :%D6*ʸyC#2	/\ y?Gh	 |5shtOCxƵQ,CMf/5/4˟/WjIIˣI k<gw|Ó,I`OCc/oCmGkoǋIL=Jc;Gt[ZImIv|Z+K4gqkh;=6/ _Zս{utZ`tuKFT~%SZ%Yo{f/գ$oV.\?)>Hx5@'BՒG@&UrqbT奯8r_׼}i.&7R*exkב?r{şQ hPjZ$,uI4{BܲSCi,EdtNWWZ1ʤӗOJ׳זI;ZZE{զb(/_>6i<5ɮp=꼶Z|^&sv;}4f%<)3V4ŭS%-קkg<noO2?M~ Amci֕J<=as|P=߉|8l>"ƅ#sqG=R /V\w^NQ]eӛ&z=~FG$39<gO6]ZF@{ki+"Gso<m*5mw_'R啶j־N?*i YҼ?ث/x&K\Z4c:-i#InŤE[OӇSppg%
<e8vn׽讀Fq kwٯcb>oxyMwka4˦xBpѣץRNƯoQ4Ius7S}trQR^\}y k?>7|  <[]h>7yL]6mFU~ME{cIArg'9yQ[iGIծ	JT_N~;6kNehvM>f'+'20:=% H@<+y2'/ & >Blo+jڡoEwiw	RuK|Ru%<yŶOxSrxK^|4P/dHƞ{]n[\Jj|6&x)sj_W}Ʈ,m^t0@ b F:Gh1"+"ZnV XH/<+|DO)p3fM>zt蠟M^	]|hNanV+;7GNz kqi	|zWqϥ5E6\6'n%{Ϻwx?^1u:xlqPI=RV|_<|׻	Oz\vF=޹xS%Y5Ķ=֡jcxGU~uu2YMz;_7#|IȸB8]8WQԭWn)7'Uij.)?.͸[0e7RgN99]{b	%_ڵkQC3c	}+﹓kUj6z=/|ۋNw붿IgNA F0y8qS_GkgY* |ŘiP9 |@ gq`Wg;kV +@H;9}5 1q" A C2(SrZ>)ijX`#=;KM'٧F@ې1p8ϯjNkء";2OA^:]K;N-i \dzr2+4QR10zVՊKW>e<z Hy>UWVTv;w>Y/-[/V_y^XvາN  
jii5F>8򲶻嵟7&6|sgα㛫<xP7/<m}uڻ x{qmߞwPZ+08*#]UM:;C%4'fyUXBV䤓{9>iIwqr9r>vOڟφK-Q8{x	7S=! hd8>&*VZOiNkOӄ?Tɸ-˔je}gTf', A|m<ws>-7Mgڦ_Ὲ>{VSѼ9kW>|(>{}46	Z8A9JIj+BZw{'{nzRMڜ![n_(X5 `هNK3@m{K(<KXWU5Ox5r[Y)ZbZ396Z=rUR7'taN)F6ݻKmd6kK	'Π)0Yy5-Bl+= Oy^Fi_>./ZGOxG׆,k^J}3z?lR嵫p֖ЭՎ)O-\KmL]ť}v{~i O.6a?lmk-<=۫Y:eׁg_
hZJq>&.mme{G1U"IIhyiM{[99.Yʹַ륹Uq } ec''k?qv̒k3O,ON'Y¨.twjnUn{z-(Fe?+Ꮓ|>/xgL-!%D{:&oacs}s&羸GPidwdzosuIy-՝dd"Ϥi@uնgmZ	h	Rͮ/&;Y&8y-Q/]4&mkXԣPDqs^k}Lv6Z]Ʌxuu<9m޾oOkuK^.4iVOu%K+k{pO-s{غ[HJdXHT֯G-{~RxO
Y  l3\ǋ|EbAҙl+M7@`;U^8endNDXGjÓw-y}KM.8%Ui-VCǼw  a|:4O~5ڙT>xV7RB9>Jܥ!]ݲb\nNZ^RZmk#~i7# Yjg!!n.͕é-5:_}Qae b)Z܃HAYNUgmkɭTyhA.VK~FEx~k`	_ZA{&MkWþ߇݄7:<Z7<K[WqZIrBG_Ni7wnCdw'eIu~55Qq$,(@8. `  #&?cILQil 3W	R[۲| ^3l>ZKjړH4tXZeRx-*yAo&"̯l柧;ӹ6_:絵<Fcsq#O#?_֗,pI(?^(-!$ k0\x1*gdQʫ FЯy7e˴x{H3:OJd
%h4啻s-__G?|1闷~?6pjKt/ dj;U|@ֻXXiŊ:e@$f =}> u61I[mZrzCԲ.Mܸ̂IBҲ-_o~W_娮צ9-u߉ϛExZ!01Hy
l*ѧv+zG"5)]o1fx'u=<  æ%CܲuCc/7" ҀpݖB|НN{uPa& Q܎)}5]
	/pUOu@S:+i+أasǪỷv4="y$K$M7NX,⵷{kvE}? ;1tI̐ r1H9 rWE1-qf˓S+mA#"M{~_E.	ɽg#SͷOyGvkK0k09 } M2	uL $) \#ڏ6rރ	"]{J(n (__y<7M,Vڵ@; W;@$ov#N(ӿ 4 + _7%L*Mxzm pii6;- ]?2۴+.:*Ym.pRIlSx~	RL~weF)9̙((  V_ob[?zeu>XiM-ma͋n-CQ "o	x1_]_[!FDP@dZ?5VOIhIx%cz菭-Gua?.!.w
jrkVׯuLRN~K)ײ_s+YJy+}I1+xsi2WԢ-.?(VxmKx;[_C1HRY Lc	j/9|؊EL(r<d>yukt_>{F@z`4 F:R,Θ.?&uό<nȷ^ ѡbkRi ;I'a,cVI=Zuwu9<c}D'#Dagap!Bdfk#[
Ii$hIP~s/}CV~_>}y$G]U	"r͒I'4KÚ%&hPJH6FEON6};  Rq Mѓh ê+BA8N7z"}đsk8<YM00KwlgO/om0/'^zŧ!803~W?xoNv|HW}?|1g6= }$xAyKk5eNyzIjUmiɔvkWWUPtk@wաxGӵ&im川5[XMʹ̓,rmg9I-D)RT47Ϝ8q|~R~Q' 3dc>{}Ց׏ʇl>pF`41s\v
|76ܴfJAW[YTA41$49$,i\# T2HdmA JAeخNB6bs{bJvfU¹$cOM4keKaiw;~;('VG
 kmz_/y:|l>弍Hu8=F2)i 5?IRSo✞qS?X> ş=]WO+F^R!?3e$>D>9Ӭl|YݼԼ.G][-}K)]]K5mݏq{ Gx^)Q&γ*$m}i*iQ[_iX]4jIIYiw;LA W .N o򿋿>{x;O 	|MHťBuȬ.<{v%Lj:Tww
qJQ$u⚳W]?W 7(yT=Z'F|Bwq33_ju5da	IdDj/K:үZT& 穄R۫m5c Cӿf?(Eņm#(Z#e,BRprR+Y{Ѭ}%/`>yNp uDoOl'E\t[ĸt|= 6E\G*YJ>ƅ.e#VVBEo(/R8 c{q25	J@̎#ZF,ry:ztј<	D82@G%b99w_Cߋ>5>L_x7_Q[}-(Z̿k`?:#sks5rf޿/)/=ꕉqi~zunGx5_:MebMg5ޱh^/-_ Gt8巸4.E&ݤ%^~qoGk'GOko>X'=;UTghW%CW/|G A^xVUM&t2c+Y=3dQt~(B1CxΈ/nb֐\o6aa~t&R)tE}&C2Xj!>)ʲ~TbPi)5x{iɵ1_W
rj~vWY=/^{x'SN$žɺ.m"771-Ɵ<sŹ7^+q4zoNЛOeMwiu
Y5hԦҊ.3|9OC&6xiֱHgź|-sJPk |)7!|yc Q,W0)N(-][NiVYsPi~.:=ŧ~(X];DҼjSoj3[H|AnnJxrPӼo5O
i9hdI4e7{u?#hٿQ7husk\6I慫]i\i>&]ڡN"y*d)G+Vu.U[sl5\M)R9U(n2q{)r?
A?|yWU a_]h.>|+-xLnROCch  2O8r+acOݍu:wJQ'*ʪҎߙW&z9*m
siJzY{UާwßxK{=2ANgnզcoqM7lf#7E[9$PmؘS|߈cloqhY_U*V{rxle\=ҥFIEQ /iptw⿸Vh3 G;8J+[v˾u h0rz'8s֟78[dONA}3PՌnАzgJ:'es>y00I\qKu4[;ytKwRWXNݤzfJ fstvHgSp={g:̒N(nEyڵa^ִO[ݜ[kzpɀڕպHc<(c3/S
d~9YjخVգ帼TI5JS|ֳ=*8uV._t(z+8eE=ƍ24^7V?OXTRRMRNJ:]OъfxV.a7ڶҬm5N/~s/
tK6h7P*6u_]U`K 5|EIvM͎\yJ6#,,Nu#?o<(C3Ro"i(EStn+qa\V"RXHY%rs6S-w	<|:CX[MᏆZ׃mcn\thdMw<~ˡ6+u	IƦ.rlMw63|Z4Z1ڍ.T(J1QJZt?MU7lφȥ>|?-KOC	u	t$qCc5NR?Cք9] st*Pԯmmk]j/komև1BFTl=@^N6Wm% [vMV?)}7|cZW;@R8Omk!1ekqV&N8}+a_Y_($պ9
>yBܩe>3mtK~Qؼ7z0X,]AͥCqMOe$PX|"k]XJWis}Syc,FӿeOT=tj)q|Qy?=c}k_zjjo{/ڍ%_EρQow4/X\!Ҽ.,Ps+Pa)mQ$.]5oest~^3lF&E%s i-4gnm -,[`Bi"htk?&b۹(ZFݶVwnY_ؒ+4ĄG!R}MHW&{C$fr"
[  - %Zm+o.iwe&<NU%$hj uv~} ƏioskoyrMyr\Ѵ3:yZ5i]6]|?> "~F8O"3t;;hv_w v_3<gŏ)?\> x^_;xQ4MrH,M"{xº$k_V_ni~4 wz̏:-G懥iSd0Gae{<`AY61]?[ލeee.^tT|$ @?,|$|'olZ+}kǉcj;egMv# F%ͧ/8CYεZ'o~;F;EzNߢz|AXZv xr%MρΒl6 -l
[0E^/M~fKy/>Ȇ7Eq	)Y~ҝ|&ÞxtC$l+oo  Ƅc>'e_j^4ԭvf@9¼8)nރ=)&,º\3O{3O_Mw<#L%.R]ܿ"tK~ scY8|w#GlypI<lyTGD[6ť8ˑ=nycud<"F3D1;qQQQ:ے998N ]HY8p %AdR0p|KO? 0`4F!κqXBg~O:dׁE>pvT~4{5mV_Nݽߐ
c&4Suޣ
Rr ~vsҴgb#qhW)?B ^  =o̲T8[Ǳ$m *sB _}b]WsMu8۴x;ڻnSl1m_/ k>DGx/gEh{@G^clYwBwrVDb>ʍ[e?f$~I9f


1 ܞH0;JQۀ#H8R_?Ԍ3Ip7W7Wwi#-*Ow4Hr~|s}	b0/GJ4;Qx]C&%tt 0*xe '#y|?UӋ!%G-eIO4i?-੟RM_O<S3/ 'Sn~>qGnu?xU]1^P{gi3%Ο$k~3|H>~{J  o?m 3I_<[m`y}RkDOǩ$D4Wdѥa<iK?SqzmX_K+g )u+;ψ5;ZiWҥ<XX<uz{t;Wu'Z`uMo3{өVN+y~}w;l59aOI  ?0a_ϧ_lg ^א">eIx³Q. ՄYCk:m2eNʒ>8l
_t.QE.G03PGhȿ.#ohh-> v&inYZna,d}? |ON{UΦ_Vmk8S+I;vK`sO _ߡZ=Zygh ח}"hp+#k!d/ я0ǹݠ5o,|f ` ?n  {W3:M Fk6ZK?ǯom<H.`2A݃qҏ/>~|g,<ZTω<G\CegkHDM<7W3CicgmחsGmkȑ:m-^w{Wt?{gmGBbо3ү='>#-d7>+|%}"a[
;8&kvj`F|aÞu_|H?^G~+i>jGgk5K';G-KggOú)ԃEujz__/2nq+qvW[;ƭXYCw-ƅ  Dh6:4{ehJ0csv_h7H|/{M_&mnx$bYaL AlQ́%i 2 }~^D'Uj7|;?Z
1$B;䯧= _hl4݈ 3]Uf- u.\,Q+~`{~nGwzksqjlhO7w6#;o |o>ug_:lSq|q=o#]Kh׵$ 3PZ~"x/平7DYvkǵįJK){KIz=w>)f 32xj^=̘TA-NԃQqN1ڋ *ețc5LyG26 ,Qew컿̪a.o8Jse2q ⏿ d\\N3 l1c|<gmz3& ~ ~yտTس3B@<Y%t#]l-oX4>\-4][y)`s- 3XCFV34p??}#7,~ /aӼ+|MnȼSKm3Ef:䬰iF麦rk^\*d֏Q	;'f5U˂ЖMʸ8(E|у"	mĀ	^u b?)_ebK}>6"|ȟ>[ ?_׷$`Yeo,BEe<mM.r9Qlf㌃OK^G_Z]| ~/		Yokg/jţg;xwĉc`_xRۨsQ]TͫW[qggݧ>}<Ὲ  w4u]X"Fta-]Z\G5mZ}Gi44M5t{_יBp.CBcTS Q_=v G뼊z  1$CsЃ7-0@"-@K+~~l]H*vqf㎘[Bt6:W?]ދ~aZ_x7WrDI dsK	\JIw< __|W|}-ܐݭ͍Ŗfv躭Kh:>'V.Be{
Q_=鰚
Iok GJyeí-m~ <5L:~IҠi/!,B+w}]Wk ]4Ϥ4gzokV鶚ƃX\%Ɨ%ͥ7 E4lrU]YCUt ^]t{'q e7Zv}V?ᮣ}Dōޙze?ýk@/ﴝ^B
հVTXzr^FpԪR[KlM[ڎ -OWྔ}zIiV.>+𶗣|U3"ͪ|EG4dmRCxn ccoiIAY9S© W.PM{pr[gs\|Kl>->o>oZ!xIuEV OXjg%Jc':mͯcta /huq(iuZ^ڟ?be)=|gg4AxLo]p:9׈bScn`ԯ(P:RreJV},+{{$Щ(2j]w
?d-kO$i~Vյ[-Ys`nǎ4R~/J)o_YtmvZQuw /{+O|(D汬Z%
~'y\B.|Su|.i<oxJxVy-롏QҝYܗM<6EO}ﶝ~;?|?7m~.Z3k}cZhuh<?i1jZvu4C%ԲPČ*ۓz,)D̑l)9?: E]KtlAQTGCYYFSFyRQiZXVO{mgM	!rv
ns;R gK]?"/nu*J%8
Fgq_/=&q08#aֶU!sObZuUh#,pycjynIT+ZN4PPOD+nU Ҭ]J?g/'`pK3팀-+Ɍar+.V?v>կm[*QVIF&۵I7r?f_(G<G|0_#jڎ+{q Eϧ}BvSI&|cL7W6%9BT-J{J.4b%+5
8PRJ\Ҩ禒#Rп g\_mݮ_~~ҥUh?'<5>i:3Am!c <|Qf,F:-II0);+Y>5?MJI%Qsv|W~o#i+ď~1w	<hBׄ~'_t=[MӴ:Zj2@#x~{/@to-Ӥ/B-ńrQSmuv\m Cq)5OVVKJ'A ^%Ҿ+~ݿ ~LzG<W7oޟgSoiOʚu߄|;w"76˖3ҏ]cN+.ǰGNgw9?ymc5ݧ| 	x^cxj%;,XmIH5v$˳\vܛrwm}wwR$$#jMZi;.Q#Sacysx].9k%-Pb_0g{v_䟮ރGx=Oǆ-txᗆk<O~o{ ZC4+:N4-^t#ZI<*eKvZҌ&Uһm_> Q4?Hxz=K@DFKhi?ȉi%LKm:<K]*r%
+*qwݷ?c45[|}'G	]}|_,'~_߁5F[M̳\_[S2ܸI\Фmݍ\8~'{5}=vܛ{sXSmݧ'~~Ͽk;mN{]&\O_@^:9xVuG]KW[mA{]z_yCu}ߗ{6gXm%ˢI\PF2SMɧ/} 6j[Ilf)im88r oELRNo<Yk2-ՆL#t"a$<ljS+u7 %Xx{/Mg^giWڶ*>4%>hXǝGVU.ae_nY=-'C?X%֏O8ΛjUÃ%~H>Jw}V{4h-'2F=I9`O˱qsdfRX4@>K\)ઔs+>/Xˎ@[Fu1_i-&+L{SsacB} ]y?V!%>cH-Ei;eOyfx	')!m\V` ҭb@/j 
apԫ޿DTnOٰl7s)yȻd>J/\-&?imicE*[4CHϹEV_;?L钉{wY4fa[*O==\󤑃"eVdVa}~<-NċIfyXGqh-9VFFu ;ӹ7ABXA4	qQ@;~O  F'7쩯dOk xc\k-\eEķ6Zυ2^֢joi^ZM5)4ܞwo3$oeO,g_Oom4RK>n|%+vaxyZbwrOs揵n;-<~g%é`rYx/<Gggx/ м5Wⴵ?Y4kxڂj/|?h^)ickk8^_U$޺wo5²	.y4AL;s),E f^ Şa
͂,:+ƥ]Zb!sWw;׺.?}}leǈ{ѴkٴHgPnv<?-pFjW2>CmA)-ѷ$?ЙሀYvE/B2DRƬ09Ks EÜؼ;jn/{}O'xm]uNkctmVDltgvk+|>^FZD(#Z%31xN4?bR#i2>֮rG
Umɋ	^0i_GZZ\41ZkX Zp\\hp'lyr'I
 eI _x/6H:=开I1U9u*۷Sw,C0e~>V{!]?s?OwNh'߁h>CYҵM;:ql,?@3Tit/A(V2:J2VqIzw֞JG6t q'6+O*`x7_I%v eʂr$[O	~j[={o8)NKMI ßK  kO>ϬXxAYC_>u'ܷ-5;!Z"ѴMYbM35Q{'xrz} 	UYYs]}SIn[$>z`q u|u%@`	S׷  z_b&P h͹99Iʌr+_{ - ,+ v2l``w]kn	xz/6|)x O}MK,Zҭ> }WZ[iO6WI-fKH~߬' [MwMtvzg!y}}яq`F 1݁E
qpDdG"J?pmɋ;h m:n_øi<>@^JW 3
y gP 3 ?b¿մ*a|LcZo<Qv4<ئz~SE ~է,KE
tjN؇i[L+TM'F<'gn_~}O=?#ҍ;M䖓ᇎa>7,!;I3zΖ]NjwO 5 ˙> ~ܿu+|;KڼA3zU-7Kx?S佅Hh7~ZВ}e~ qN*J\itޗ fφ~4#x?¿}|@&Ю|\ѭ4(uW\$xD6zJW ÞdᅤD䂿k@aǧG,Da}6CFB	Dmg j8Gj?GʠsO\c~~Bv>|'[Z]|J+?◄tn|amj?GZl^+.~Kþ ]g*.]׭BdI}_5zqDo|}9<1=H.w$i4fe1]E1]Y]֗1Gq)$֩cj #2#|mKFO m<H9S>pU P!Pqm\7-&۴p9EOL. |M٪o9%4ٰp272HyR2G^(Ӷ Oi)H6oJǠ%"x:_ՃM _[ x6qwxD}oKxE݇-u=?Xgud4i/jSrʗ2%+~ Zlk  6O~"ּc]K^o<O_k%yq}ڝ.7w7<rC/L#NM\/>Е+k['j 9éeivw0X"X緺+{ibhueZxzjOlֺ.z\e%{o|s⏊߲g?*Hp4<jXBVKH^F
I'[??B1wդ^^F)M/8HFA
VPHOsrLqH9|/^?RQA
9;{[q8Bznc^kMk㧃|9i|iu4B4(%K)?tm[V<|/_Ov].z˼_}gv6\jFgmiZ^N_BZhݍ=E
.}k4,q5z{^]6,6Y4[
[̸0r#;lvp)aHmxeX1r_ܵ;n L[ڮǢQ񷆕yo@>sܴ%N
v/ZIK~ ^F[54[j";x3k=#|S%\(e!ֿޗaԈG{f7^>(iƝ'{k_g,ry|)wߧvs>8:-'x>5źf-YדH-a$ $QG'2[yoЮǔ|( dϏ$O ,x	.4o: x-a(Fn˛DY+=*OsE~> F][uuΧa*ee-|y>c,2M> ;_kmGw~j gcuFWcQR4 +Hu(qz~s_]Kqwm5\A8mK}WRlֱŽ;ٯzO{;ƷӮOhak[Zz$m?Z<OI&WZ|I`յM2xMFo} 5v4Ӿi _syえeCR˸^1(mw ?_#q?ſ<mܣ-ǈn|5kxo/^mlJoASj u՟'/tvw#3; |=_ k~&wV:ń k{]sZoG{]OT$-5~NrqNZ5m ֿN>Bh|̏~7n8^ _ռr~3"i0,[yMn,}QTh;Y֭ih:ٱmy1n=ZI5g 5~3E4c+/OKJHun/Kٖ1%̒Os;I<;1*/y-[nw9;PNr@׾=qٽO'bl!LV7yim [N 0,
HvROOOr`A<0z c5iVE ]89-um4kBqZ,v_N\Ky$v3 Wq&SҕL^&>ѧ8уR⺸R[6Ҋ}Occ%FPNrVIz7^|w/m.=F污j0xHŻxw^-?K{gͫC5ς<9wxRX.f2ž4f8|C)Y*Owi5)vgekb1]ܧ 
~VK-7xCú޳]%uݒn/e} ^jmkiCh%VKc
KqfGu!ϥNv7xz#MJU&w}n{m>WŸaw-mF`nWih]"MJmoSZp8AϣiMx	%5y-֎LOac%F	'>{9Y&ފWRYZI]*m_/X;ozu3\^uރz~^EimGVēZ_G[F-->qw7
PM7)9JOVTӯ5)RQoֱT2&ƙX"JKnL2d۽6VO?/ܿ-~hQCfF@hy唇왙TEo^ =-_w-Ihv[6zdE孹i]=iWPN(_+[/˲[(ê5V#ΏԓF b&+u~ l a؞9 g_SX/|Ixׅ|M˭jwmj:k!R{mmmfudC!M(].zj?gN}s"xz9{]Xы!8mlRj>SVM4v[ZAdlH_Fˎ3e<$
$?ѩyX mYU]<Bh$@[ []Y]Gejƒ[$\^$򦘰*etqlp<=w$8+49S7ٖ1%G @ /_ /
ڃiַڄvi^\]K$ѼW7᲎Yd3s/-k]l/ ً u/=3íUK⍗|9V&V5};YR(iSkJq$y#5-mu[&v1u7*K;YS  ~P	fĚǍ>xw&x&;!Z4/4am5\&nKU}M|_ RNM{.7HnhHyddVmJߧFWO+.5ռ(^'ʋh壥֭jR50<,$ӻaRƼ#h{V_F&$eϖ$HEX3!  5 Y)ͷz\
$_1yvR#jj+f( T}-oF PO%% 6GUꄕ?0 Z}KL-ݿXNLzG!ͻmF#Gh~#iU.D/Q.}ܿCoi)BG2G/E( @ U2V}.v%ˤ#9۟2K{986H^S_pO=.#-ojU
h4lˑ-$hᕁp'ut߰q|lDlek$8
He4k  O 3 d&O=l$/j-10{:>.{ԦX;j7iZzoɉ%N3^{ߧO'3W[lx=cgiu<2 .Ki^>/J/#JQ2u1r '-~EGrj	|5?i?e 5pM{&bkp~_|:1/Xa%' wDC+4m$y5\<Ў۫m:kzݜK[{ԦEXXVz֖6wx?f-aЗUʅ׷72)kW䷯tZw5M	w{N<duݙQiʦ)F$VFS*Vr1u\ 4CשMube<{k)/!y#Q`yDȨ˔Uf  hŧu -	t{{L).ghQB-)6o~:kח[G:r[9-?-rb|Z oxfA&Jۿ}<d4i.V@0_JIV F+O1O<y_c+jwpE+:Ƥ񪕆Ѵ{ye',gWC`F9KoZ~NӡJ]gSKHM4̤w^1i|]$r<CqG3WowO5_~P%wuK94&D;(cXjGẖRcy_}ߣ2&|liMǖ0ae%[m^^ߏ[U|?ˋw%@%	<=l
|ϳBŹ1	KѿGQrxпmnVVX-d44[("()I vV/ߑsl2lck<Aa߅$^ȶE[d
̨8Vp|C_/~7.hX d '<]zbh؊@ 냙}:G?]l%,	HeU:rNsrp0Cwz(\ecD:1gpgkCZ] C#-.kA֑]67ٚs4
LE<o/O̻ZK_=fsgsa*rK^"[r`.6 Lq#dm jME. ny%[;bkX1<ѯV"W? HsŒ'Jcq#mnQdv.A!A?_?97q  
Q2v#p HyP	Ȓ	\=~NG`G)# $|8h.ڶh9ѯ_?̓:+@%Ȑ&#+m%Aj;^M}QLvDnVor,.#Ц?(ײ0ײf$<?0[6pq
9?$ ǽ̣.A{a h= g=RYeW&h[F-ʹt'*p\{޽?5 ~~-xUΟsak_\˩M<GA'oXt|/Zo-1 4M"{M/GM'L{Q6'}{zBV͵zv>{[[9e'o,7m߽?k_RigwbV˖]2-ǏVG3Em|[ !:'#!3-ǆXe%g!#:w $ -ežٹINegꚫ!Ϧzk 0?t1<G(n;AMUGt]sAkފ On"t<n\Pm +j)T|-%:ڦ 2tO	w}&waq!xE&*N7N#zKt s?k e?:wꚿψnmOͦ}a.ab))@UoiRR=!*עoW~p c>aڛbX]ʠb0$cX]~>]	ҮKoS
mXp[܂^v4&Uc}qۅP!8&_wF̆XOƘf]>		\`"G  fNϻ?Q V5ڢZ]Z\E$3j^99ad)QID"FR uߡ%9x:k8[>⣤SZEo_[X\</\E=S0'ú-m49Y=>MG܏E-M̒a/2Kv<	V#bko^aЫ5㱻#O|vZX d I"v.:4QXnm[x`qKOO+Ww. OS5hZ武jM-Ήy(އf}(鯢> 6:EsZv3'zYN~Gӿ3WnO5xgOx/Ok[2#:]k_k:&Xzv?VqW%M  	~ܿ^]OVO'sI{k ?^r~gqj-5ۛ9)^&JJqM8]tҍɩ+6+)avcQft8|p7mF  l~ ={~:m2xcLVn9`HH.&i	%4_/ ; ȼf-XPƚLy̺/K^<Ǩ{WR#YЯEcَ7]Ily}zzk>ĭNPc|Z4}VQ<mZ O|8I$GnO+]kU-yd'ZZIuVIi|k>gL#cnA1sUbG]9;H(Hz? NGL`b0obYI>\7NE? 5yPX,p|U1;kDť؋xx?v@aҶV_ť ?9%dw͑8Ws3(89'cV&K5Wtվ"q"Y:bKM/HԵK-)9..]Q("I
̵όr?YVᰱZXII%uޛ08MXRPZSzF\QN vn||g^|)|QG[]>[-χ4τ
W[Y<=K
Mk:a|}q{t![ru&'	ʟéFun.%+3^ҢQEEENt*٪-5Fr8גnTJoLx~ ~uό/$kO us?<3$JÚLZjo&^g3~+q6cR(Fry:mԫR>P;$cE+iS*+MzGů(_ i >[: \񍆦3\izi={$s}-j>mĚZ̓]yXxJ\Ҵ[ZKy^ֲ;M+S"E^JQ_˔ ]Sy	 :Rv_jZt>U?Ho|@(^i&s)AB;Jn[)4mr?Jg㤚~#jWtQ|82:[wl5_Y{u&մYwⱘTR+Pj7'&vR¨);kZ;4hM3E.Cl4=JJҴ+=#EҬlH,l4Z61Ċ87&nu_ƊffVB'SY 9PHc;/_O1dZB>dӫ	̘ʌcu;y%k )ǨY'b向Cn& KoAi  46בJˡ@˷^A Mq{o:,6$+  !i йl5p%ҬaEP#}2 IÂ0T =|" xwЋo0H71Z-|ӭm{R6ny$
E@]O;EvO,@-[;R{x"$86(v֖р=ܦhUiIv^i޾.esڼl:eIZ0;nҊzd8xu![i N]?X kk/-,lt=]dVs$w.$S`0IR敝ͧdWqۻ_($zg-`/c ];M\t(V]:4o4: PYg7U$nIXY~=;Ԝa	oH[wOt6ɋ:=aV02 E3|i/ggf׼~GMWݧ~/ Tx:6'xo>kT_x'N#WҵGVa	kM?,|QwubXaLn|[jϪY;!uhS[kLhic_ֿc/ntվii3y-0[\Il4p_m߯7t4^:}W 1Шϵ5uPq mQ[YZ#FV$2 ɝ__33sǉI(dA"M@i=FdϘER
oKo%/[^ҭ~^kNsG<M}/bW6pw[KhsngR߈  "K#Kπh&v EU,R5H
 ~}<7QE\`)vvzgS
WOr?}5F>\Īp2/];~@qLw}ۉSW9ӭYln)$E 8oJ$֡clw}zQ _ϳC^JIcH㪉"y-#*v/oK:(\GjrZN1MߗPjDJ. f&8? ]~7槨kZ4MsP/<Gj5cC iFT84Wo_|ݫ -Gχzm㲝4B4%Egie,H#$d{GG_l熭Gxo8eԆTm*G$S]RnX7GNOgw ;ql_({[_ڜembK{wkm2ĭMotz+_]<ayX_)}sݥN~IbYb0>kK4e_^7ڮE~B?SU5[cxk\U(%i3KrDF.$n2 ? T	e
A3=ť" 8	k#@89t&z[h/>Ehx<xZ;N5$)x8DNO9=  jҴBN 	` `3E5 o{ y9&E,Sjnc.7!VD
vDH*3~ qkľbE]"5X`GMǭ 5}/H?	Ye2ɁQ9ôr 	 w{&A.<GuM&UY<er >ɐi2 `׺ ]k6	/ሺnu*.H%}Ͽ ӇJDa-K?Xð Ws $2)] MuƇY.[oml ֍-:p웼e_80
RF_ _זvxuZ//i!𽵎IР=IrMpJ  ÆooзcvW(1<K1us.Wi/k_=Q<OgB,{[Qz *gKVOEcF#:ItXzk.'LMu\FAT ]J<o%29 .`2pI-!hn;oL|X?|qG̛7~#"M61F$h47Id|rWR8+>
M| ?-!iDh<걇۠2]\"EUpTpVd23ӑ \dnx&O[$pݨcmC0_ߟ=@RyATL^kyz`\VtMcnܢ۰5$-O4[ǁ)O9a׿v+M5no"qߟ~>??267Eebw#Ze[]Iܿ0 ~ ^C 9HOb▿8Ff~	
9=
vn|eC{˯$Zl)"R֞0;:|7DE8<7.xfKDw^kkO&]qףW:#}kOA]sL}N̳ԴJ+iYV[kYTsU~ڭ>E_ZYj#0(	=ײ [e	6s\0 F>}ʒZ=#M@?GNnyHوH ;}[VE f
[,9__kn J}{Tأ !h!cf% /}y9]lV 点;p@O_]pt e)٠kdçJ{RTs1G2 eC3vOa*&i3XWytuYSxOaG4| ?[<,chO,SP\G_68cA|CqIJ.O
];}
$)tu2-)tiţþӍ/9i[oկZBc-4ϏNg❗ v]x  ?kxGZM/kv^zƓBY!' |,:JotMYI^v7M9O eό'<Z'YVo<Eaa4U`Wl"n}q=Uh)AM;{9=	yt}W!7۷ؓٷ~+SAVsk!q9Vlw~ߩfS:qsƓQY@;,32@Fp0InspQxh ~=_x#6ZIi>%+_1%X*-98!h9}>I5ֿN_?!?bC!CcF?i:xblK-PrMi<=Mz7nγo7	;E8x\|Uw'5=V/BRмEcD.u}PJ[㼶+a<jUumɣR1[ghRK^og}\'9.I`"
i1# }^_nʱ&: ,&wͺ&6x	:ir qIhN9ڬ%eh|S85ռwQZF_Mʺw<#;	5xJ2v\_o-o=̢֎/Otֿ!I'=xvCu+	ޟ L~⻝D5٪?'ylnlHτ,gᲓKOˤR }T%Yw~̍IIc1Ku?)RxSs~/(=roCO֏  # [nZ֋dZh 'Ni\HXeFkJĉfIʊʹϚg~SFuqxju*22|fe(/Yh][oD}?[T!=BmW6Z{x>Y-Gi*W\!WtM+QĶowp	2	ja!EO	O)Jh4e	(غR溚L'JU,<Z\M(҄7:r|%unV}_xoikLt]\L|^q/n{B%Ɋ`<k:ٞ:t)aZZZ9[ZsJZe6+RnUTS>FD$u6^-m,"i6iyn^=摤wyII]ىkwk%^OO},7Q޲#X˥¤-MV鼱h/o~S "e[?j-׎O_]:izViiCךwBRj!F20mM;No/9G<Zw3</Di𞃥h%h2!t:.	mϸf%m}3dVIEvKOR溸{D+80r<Ҝ ˸E-  io7)SKvt˭jӤ:6[u;FQa
JAJMD /Q֚玥)-ԯquo>RZokVq0Ԡh@[=)ݍ țNߗcW>ͦ S_]|'>7Ϟ,^ym&ks^	5]X5+s\qoXuZ^]BW[=tGJy~.jxFs[P@rTaUoRY|ۋn~cv-Ӡ$gSBn.&eA]BȶXo-I\ii_ b1 XO!fbT4xFT,8VOMݖinZyO*NdG}d }F{RwOkl#Cv^$ _2#u||ܗcq)1zb\YCk>"7Z*1f,Q#h2mZݿV_xwE )|Gq2j3|QX f_ 룿g~_7OïwxB/aw[]ZZ4MojGu;jq.m!a&Rk(k$jхeQ9E;Tj| xa~~4{Of|IX|s[cAS΍pQK,lmbJe{ժѮ{+zE&hA4ms;M>)DA!T*w@Uȷ@®@W+zItV !\Fm&?6ҏ->KSkۦvmD˲H	F09- o}/d,js"ZƯo1RΆ.#'ʞ)"HV]fp ]!4+znHNPQ-1ѹmE `Qe?U᧓+?1ַ6|$]>82[UgC.ȶ%$Y=__kZ%eG邗H;y$C5jޞd'i!W'$VU>mΧG3cZwY\v;r~_+_˭.[=ݟ%mFbz#Iis|[j} ]_{ "/b6k2y`I[F%gB6kY=Z9|u K}} $+躜u3!P++(YMǇU$H/ɹ4qð6]j#_08ۮMM.Fِ"ݷvZ4	yqa֛o;񏋮,qk9\(Q_ ao_j'O]B, dw/+;7NMW*j ʲ_SO.j:tƀoEhW!wIu<qX.ZE63-Dmo$>3##,]ѤٽǸEtY؅LBI^=h.}[ԵcjM%.`#s&EnNa.x'4~3EKO1٨4}\Ŵ8X1.9ev?_k#RP0wi鬗ѭO40]VO1;	ikrFҪSn/_Vbߥ_5.6Y\E
FFB_襀,0p?O/_בr9n#}aܻ9̌Cq0b.yVpx5oGG${K%E%n$caAO灸/[__/Cٮp!34|""1N}4Yfċw
Ig  
6CSD0xP
	|n⛝)r6ndv5tO aݧ=ˮ5$F+-G \`(#;qFa_w`́լv:Cǹr~Pe0p_ڍ{{	.ݦr͟0Hキߜg{F~2y<5w9}3NoM טonu;0Fseލ{|Fs7E+dAc 
Z?ɂ	c:Z~CddeYfU	Ĉ~w\|2oi f+=KC9lmR9]EIi}OmR'Yl~ǧg/ԗ[uW ϡ˹.~h~6`Ѳ6Tr6p+ЯY$1Zdc>)yk{R^9ŋn׏ב]u/[L|6crz@▽ +y[;q'<5%>AdzC neS6m0*랫^	/ 8kE-	bOLg@cdz80Oc *ҨkFB3%Qz=:y 5$H:qY\Y 6/)Sol^ -t A= E?y볷+)v![,!u~_/?}ZwĈ){ eJr0&[mbϵVY7R  ^Κ:*PR݋<
"dƿ)i3|c׿IMAA76R[	7jY*=eXm_s 0C<7Hϧ=$w鳼oR	ΦbXlIJ5muݱs'5?=ť'B[h6we}+-|<hV>0c.ϑic&mK8cΛiΛ.~kX䉎j}F?U3iGnŽͻ7+ y~?ػ?/ɋ܁8 JdtbpxsO_ @l{]G߰n^ ĖHCY[GKC'͹Z&ӢUAq+$Ek JWڤ
-l̓h8fp2y>/`~Z7v>X=OJF?zQO拿޵h%-A	YNfRFv0$qH'?ɾrF||7^Gҋy[zitX~~'!N&*xapH'ϵ;I+4@pFTB21KOu? OBmX68WL`ŏ!3^pRU9b;O<Of^/Aմ=CȹX-bUѼOvݓU|?:*Ste!^ߊ~Od՞}l 3¾ |SNw_Ө{ܥV >f"#DH|[x{➍
,"ciKܛ=%Kt~Yn -Y6I9/>Gq,wǡ}t4D&xl g4P Cc쾞/Lu3?2X Eat@݌m򣗮甲
ONZIcSʩ$f:m<|gCӦ}}7  FK\xVv}H+q܅f
|{k>ܠ(3G9/N^ͺ[6]hnF^,FK~${w<W d;+j"l-5Ɛeʂ6sosҽ?>хo
i3֭Ee6ZŇI=66[]i_F`FQkNT}'|ϖ/I:iE~#ͰHn(O>i65;#]ol_]+WIo-"mrp]^+מo7/>Z߿sko,-};PEH.ImX. h%tG0i/g~_V?4#ڢp 3G;'sۜ
<7 #Y>oI>D9&5-y!@\`\^?߁ߴ9h^+|6ZOŭu49䴟uޣ \m9䶑~fN~"xR 蟠W<EIK۬UZѣx{1^ZJ1IƊӚV畵ڲ]=)ZM_~wM<cj>&tڧѴ-<sY)t h^B	g \7r>x =VjIJRm)n^K-8$jVhB+]ZD3FӭG.{q:Te1BWw3kOD_sЭoE}:4ߺW5-4xmVUEڒ\ZGY}N20뫿ע=_ПȽFCZ%YѢ4Kf c2DoA˻_% ;ͮŨ~Ab[[YDD7qʡ j ^o5,7!OCN=@0Z.ĒY6..#%#U<ky#d ր~^dOk	R'7m|iJ+S_|1ԮcNPKyMSկZ-BU*F0NMѻ/;^V%}.kTy6 0jڇT]3Gÿx%pZ&-<z5cHpxuk{?f(쭄&yݧhY==:u㋔;% p 8c wį~ZxB]/ <7}+S_|AdZ46_z$nSĚ:||9߲amm]t:+U}n_N^;'e/.  \%q ȸҒ9.-.'ۦWy|XKkE.'p"-nPdO7o'?}#!i%Gm)1ܣ@̒p}s 1 ] ^k	Fڎ
3kndwiIHf4[o6qHӼ[N ӼIEYNtKW;甌sm/>Q__Fn*ɵyа.հYI$Fc`Q>7_*&J
+r5ʶ_tX'dԁ.H;yٮDae1P߄gw_AwZVE-.(Tԣ۰6ڪ18Vx1׷ ׷o%2@`е)"N\0:^_/x|%MkK(Xc, y ^e[mXt|ɺ0}F#Ӭ#XoK'mh67"FS0R7['
>qՐM,=kC6KߵG-tG7[v|ow-q$?{4Gi57~zos-ecm(R4hlt뀰F(bY
!&ȱWck}iE$7ҼCs+!C4N߭å .b2g =u;_r]ܒBiWcӑ{;:cߐ~Nȫl(S"M6VF#%2K  {/~%O/,o! D;\e-@Xv8dzYԞ;mAtvZYZA*r -&	!p۾jM>-Fس7y6[F{[tjmtD9/Gu{A<EԼ#r8ִX-5i.5K[+-f11B%)9T(k4d_ÿu&O=qz^my&h,#7ɓIdh_oшMCNՌIq+6L9${/$4j<C&4ӋHcTT849/_ 0W,VXy!C\_)l6qOp27^{W _kNՇ	(nhJy,,T/H/?A,\1\"̉[=[j'f<I'W:%_-}kO0^{u -Cqq,k#iVn[u9?yo.VFȣF 0{lV}mULӧ3WmmQAG|  !HA0--Oc^|5&PӣTyDl%G[aԴCY=GP`+G-0 aRk} K<Hϫh%pWÚ|X8v׺ _ $u?c?sܹωoڏ{ _ %}s:KE@-J	L<2CRS11;X R,Ii7No T)` ymt
#@@c8um`g߄};1 3sVF`E[k}?pBAI 4?Yr /ԵqX=ELTY 3 Ȇ_ iZ$}Ik5<	$)7nwqܿ5LONLri*+:tn
 +t]k{S[| {
 SZ eǨAKYekwex ?nk~$`ž3EYI{Nem?{[߯^;=u5SNC(,3@f>X#,fy¦vכ^ E(%`8 vC׊W_ !^1:9 R	q+w
Vp܀s=
 ̄u p)ҏa+EIɸFS<ҁ#Slg;M7 	׹4c3-i\9gڗ].RՋbXRŒ7qK^ 2>в.D#[܆e`w8k"G{r]@#$glz]EN6cc]ߧt*:ל5(@cpy$#4^Ee\1e+i, <-"*:œTu#W ]\X 37_:}(%c5ݎHG'v(07 z _Պ56aNnC+~ٿSišp  & Z.֧ɿ ¯:{M&ozknJaG]<[<,<}sQ^=5"*^SOu _ɽԞ{?kiz\Cp,}1lvM_ ̽|CI-t	P"<^+9=/~5 M.'t@q[F㟕5_ j} ?Ys^g 4wwB\{]_	<CL¸7>rq(1HT̏qgcb쟣]K ]#%dyw<tđÃ?;ߏ N?tf8'Ӝzp3N1gJ_ցg|N!i{`H?gS ;2tA;d??J/ zUޱY|y_HaǸis//v_~_h~my[mZ#$Pps%~vʑ·Loxz;D:;?\;F8ȥ/ѯcimrgj=<uÎɞ]C4z7'?:5ޡ Ko\9O'քh84{=#UӢp涮2N]<Z4k̗XUO,-hZ~*xT_]u$R]x?ui:k^׭.  -<KJgK>ZJ7>F\O<\ܿy<, O	M2c=G-Q̚t<ǀ?h#XI/^6~T骫Չ#XB3*KMa}^Rm}cq3}KK9
%J5; ]w;-	>I` K }PK^ ?.?%Qo>+w##ouyuNn4{=Fr2`BvjX^s.
EmKyIAͨ͵7';
zZuYӬ</3Ѧ&0Widm>m98P#]-=71n.<19nc\|xǧ/`OF;{Ṃ)#$2b92S_?-XY?c[#+vxྛ5֥O:aY_=׉<-i}|\h
*_MXo;u=U8>o_P_.=[AF6hzk ,Kv6\5P^Z^Z=O{u𵍛$S*5LaBheU1ZdZZ- _'	Z<U?hχ~#ͯm^ϧVQ̶~	Ӵkkv	%R9Zci8%$vt[l~h߇u~cN4hxI4!ۙ4۫[Y\\#rt>nysȰOvgsglXk.Кt$ne/z'9VZQeRUYYeb	}86el`oW7J9}Q;m)B|-fo@cxd[CDus?po~<QlL`Dr<<40 ;$##o#HO{a
h8c=,2yMĀ48oZ]Xxjxv-sou|vҢ[Kgy4%Eq¥Jwpi'fҿ}	#&[_[}o7n[iZeVet-tkJ"u$mݽ^V>Ⱦ@̹Us_&KHpyZ~_ 0г,Dk-@vG8{3ׂ{<>M[Ak=ѫ]YhswUe<hμgy
j+h{<0ۘ
[G8}wIcaE cfnz/z,E+]EK)F0P[_Ak}+u|+D׵/	C+<28IA(ɂI}\_͊g&Ǉ?ZwWpCpJƝfYDycgij[+n\ &#%iYlUdzdK!Dzꤋ!3]xr(Nbʩ\]G#1IW|! +?I5ƎVӴ&!y\dfUf+d} v_6 ȑ2_ϕ3hZ{O! Id`8-nr@z u|y?{MWw_.qKur	}:	x 5/Ҫ
6yPl`Y 3%UɊ(nuHY/0cMY8cPS
 -ݿߕoO?@>\f]FcUu-yN'Qȯ	qG*y.kix
]RyZm7%s]U$K3dԹc1Wv_w?CiZl)mMEqgon.b$E1ĭk,i;JLj8Č-K/Ca#[?cfWr8"$sP~  B+cKm9q>|E'~_5[pjn[X<-Ƥǯ='ç^x5_ +(0aY(u0:P:6=dQ8 ȧ~_	k$tRϺ[-X'U$!e WP  !| pm.l*FUM-$ZsP*Hԩ$1-R{ +ooК=1T7Pg+g$/'R;zRK[~SۜMEr6
os99, 'b,Fp.lm b!x	 >p8:dWde#]AE0"pt(	҅>^Yv_klB.t5cTn`Y0T|crzevcG\4+;+ FTێuЧwM#\kz\$(1\K3,YfrHX `PkZjJ$gF2B^}2uHmon jcLss
 Dm}ϭ_}?36+ml1F_-y<oޝ ?n5rE洤7յ˂rR7?}Kb} ?g\,,|j\"l tH
' FX; +	tG]Bמ}5$ΝrHaYULg z+EzM.YDz}߼2#(dG( g$. =z-.rq H@> A f Akt#TD SOF	 tg|_/Uvճ9<o8 _חZW*[xLK9^zZw~[2NH\[  1oMvǮѥ\<{uSzĞ)az.ciwŃqϸpm$F(5ܜ7qqAt`ҝ]ǯ2wI1$}@yВ98G'-ל"m􏝿i9|Q_牼3ygǆ~>|֭nR4<_}H$ 2յ)b0t{4Iɐr?y&}ye(ͤ 5*=تdJnuU1&XԌ]M|B 
R	Ջqr E	;br2A_רbdi>cpJBu'dېg~3АAZܮ`<}	Amt[)?& b8f--|" -D]I\<m#˃F]m>lmD 2kZuI-e+qy!.hf+0$o z[jD[3o*k ^սGb $WhnԌw^ARH 7@?2yDA~gmzB/4<֖W6 3Em6y,12#{Akߏ ],멐>-VopnHdŉ
Cw/F%?L͠1 &ۺO=yK~1V~_ PB궪|İ!?.n\i"5>ur@>\gDZ96 ;I\Qh=ǞR /ǌ'|A<+N<-/k=Η6iFh,ݐC`fY[ x_/<#h-*_}e֏I?gAYqh5yldH_>1m=%4ϢL1mbSLo,
HO`aXy_(&O u/_+߬l.V7$gF)E, --׷pͬa}+MK
."Yx+̚% xrd csw uvQ<?t:6aTۥpG<` <PG _15 %ȇ71E$)xC9%X%X#i'++")Srݿ_Ղ\:ZOwa-|!#1 `Ma'	l(#.e  25=񾶲>/'p_uyI6ӑ)SA}m/4 9uͻEauM&Po gUns'ï͑mr2H^"8'  /sϰEǕnM8ZiOu7[f.dq+}Ѧڮ"SwgRkhRIU#&܄Wb0o.RZs\H`IUdIͼFVpyNgI-+_Qy^ųx'1 `La;.p|h_-ǋ4ڛ]SN#I Io5?^[	#!]ZZQ)g}S<gėxȒiKU˷m|R xŭxOZejz;Wv7qnX]X^d[n.WѤVRjJ!.t.4[y6v efT#3T/_={ _qukyx[`[귏HmbE#Hmvi^_s 0kDM|	`ɻ|AfQ-9}1k 71o]Lpmɢʧڴha*cBpߘ.E`ײ S^Q+ISw≏MWzߗY$~lM&aO3i_[.G*ucg4 H/w>N=Bmrjh;wnH3i6 W]{uϳqɡv/58]i6wnvP9O~Ae"E5]oY'gl 8vo[]?2(lX+=ZVfG2mm"޾[Cܟ&/6BfKyoOy_S/2x_x[_|v4t_#i$X]VcYU|QO$Q6N7O㦴(  J뮤4ܠ={K}u >x^5i"扮k&kv6kAgi7w,:tqev[NHV\S]'fWw4Sm&'`ߵkO ҟ>7^;㿎-|_}_C'|;aeaMWH>!Eqkt-}eBE))V'}-<{Vm[On 'xsXoMG-{h|ih,x喏QFhFi,4ZkVQS9>I9nׯPunw_{_]CGmr)*[|6 ``=bm붟}MovZlRDm'+H[g2\*^JdYP!G$Ev%ڼ
<b_o($2!wbzݸ1r0x~z IOE(L3dㆍ`y _\9>eնHX]51PO0k oL>ʻ?N\i{As"xC	 m.|/&2nh~ˣޕKk{ROwr7!9u?[O`wf@B>s*pK(}:Tm5p&o~41	U\ [,܅U%TV$
z}o ]4Gr<v 0M@<$d+.?_o%y0UPn,9bP˒2ݑ_ sRDS-Υsu 2Gos{Mw"y^TT1%	կWArMx÷̚=̗;V{gGIac5M0mv{F)II|Mzm;+mQG!e|AQWF۸)2kRq9VTԇv.})TYF𯉣Y#h U.nY>Do$?ܷ=߃tu9N<O#|>Ii_{b;I * "w.Gw{KUXEapNxc7?-u_>5;K_%o)R[V46 4I*yrUe0&>
v}۷bE^Grj@36"(hXՅܜV*M8缼'&{q:Swn,+Ih$Zl.$k+U`!7;aT	emk_[.DFEVe̒cErHz?B?AG4]Y$siF@pFUbN׷G
j^Rɿ4:Eڂ2Wu	Ǌ 1k _U.Fy1"ˮGtXtG c3Ġy9^ ?YAӠ<nO\ 2bQ ~'!T,7ɧ<R~{s7/l: l.ĆO[i>FN)̧ $͟wߧ #~g_,b<a$ԛ*2vO~md+vAߊ-M  bY4ڻl ׷wrANUH\tr O[} )6U]&-P>,}=ĥ1R0$rrrM?_ͻv~}M(eDeVKɻ`n/n*HO[e!MDh,3m.+R-:%R̐Rn @.U}, ; S܎?QҘoRٕ'IdYiA#|(v<Qtk͕IHEqlVkibfd[UUXH2{kO(2y:+mp*316ם  i ȩ>enl&lcI珗J봿?cc-G{k=rfTgX$um>Iv06D%4FQeRwq/|7:n<8G#l t9P3/ J'Punplh,xιnmF^ 俯!{+^܂@6ଚ7<g9ӊ/ ߝ[]>sGG.31׌zNO 02q%GpH4ko;YosYB:rO~??e _{h4ͩ,l/΅,H+ApG;⋾o B4F9$`_
T`sEO {/VG>7GK[;@9#= !e_.Iefn{%;i_ j=|! &ÞQw} ?(gI؏:ӽ}G_{OC g3_Ӽe˥eQ7cu*&隆,67qii}=lmgD Ó-"ݶ #73ǴEʮLcux2.oG~kwcZ[ ǚt~Ճש\? ɄG~1v)7C
{98r?Z<oёq?&?կok ک~_pK s5 L3{Q [6? h׷  V~31ð]/M0;_nJP	[Wa4E5ά	Z ?ڥ_w.H~@h_HQs\L7Xcu}  kq*vGѳ́;a}-z.QTodo&IoԶVc,Gh/27]z /+ϭdw.K6Ұ^xL]- 	.ۤShvD/nO 'V%x_\-ۏ7] +aj o¿kAAS?܁ 	`4j~u /Am ?kj,_
?-|m u{3}9O6|kkz\w7&yek%to3jՕEm6ٽӷvimתhL4vWKotݢf.aiuo-9lд;i' 4d _[!u6ܟAƝ _,ȴ#5#FxO^Ee_XrFHu	ݘp	1]}C  aUY+e3򈢓 <
w  2"xUIeqZ͕mJpc)R eW7fI&oy=Aĭ?w z֋?N MoO5(<։ZF--Ο@%`^4 6 տɿamcvqPh^ZNȎOx~msHyڝE\~u$u=ނ&{iiwRv[6	;b2V_QNނ_1t 3Cۻk&qT2O4i4"6-IOʑ".I'P:Nh 0Ĳxhb)CPP  U4Yvz: "|x?fo1*O_<Ywd{M;^>՗'"[M_FDܖy?I?&H3~䮴i5ٽ^Woxm.4y`ܽ]M,ĩurvv4}x[YND8- :dp0yvko#6c2h	}	jco	B|Ђm|`"rF'8 	tu_6s?xe Ae ,bM&690iE@!^kiZ}Wh/ڀqgCѯI<V*:|wz\_cyi'uťݨy!p9#'$?0y3ZRKOܪ5dpf9v ph.I!ӭe#Y 6rJ8<f&yWo bE9ITԠgeÁE7 ~ ;ȝy-^;"9-ۇwY m[ݘ	f6I&5?9Mjl[Oٷ}t4~V^#f'Ey2I9yRH4V˞+$bF)$Kg%:PTcu[v}GLKsʒ-kK1d%	i#pr	R1u0+2iܩ5ghiYg99ͽi;`#`EM?U&qitM$&~Hi9*U߲@d /? VsER>UqyF_
A{ /M_/D_ܼM?u@AJB^ci:ZίOo_o_qg43lO1ֵ[HW%Ϫ\G]0 p0Y-  fV?Nl;q+ YY:~I63ji+/*y5޴Be'o+~'SѯHr24ȭc̪,1HD@ ѿw \$!{HmKk0[Κ[,) i@oZ@'$KW|uB| zH6ddS4H2A2Lg D[7 `LJ[w*\ٛX;wj̀rIooo?>W7^;!tv75C*`1jGϚߨc~zGaNn#d?c]#gh.m /mh|Z&#W]kɊ7þ	9 6 rQS Z[gOITn+u )?{g0\_xht}qVņܕf )9r໷m/[ 𷂬n[pSu@.W|>,\%mLY/> ,5 Bt呲 1߇w>5bi͵!7׺^i?<Mum x9&KH\n|U4l$Ew1 ;_(N2_RW9,|Db]:ፕ㜉n/> ulFW V/(,ʾZ$lE*9;gn#m	G$jy[d _//o Zg!{+͍{RSBY̮S38%6&U}ael3Y6<2xKZE Ƒ	;$*vI_]/zO^XEdEvc$x=/濯 	.ةaDV[EX]I#7:B > 5UO	xEKXa;I
h`~R.l FW,)?''?RϋkHcT<,C8i~"1(dMvkw VxmOYk\Lw45^CXw	/._h6XkǙy#$b-dKS6+A:m{ s ׺%?ʌ~2p6:Y #wFzqgrKkr_%ȿgȇOrbP;XZ!dU
B k_}gPr iΘ:
"%$䎜SKoiŢ0ϋXH9ı·L 
G*] )} {YdZ[e75WM?~i$o  ^ED<+hO2I$<EWIdDP2]@V$ (Ch42aoA|hm$\F2G;%Re}CAvVۑE[vtA.fK"EyfELKk{dBR]Zo_ї`]6$]=@(_YHqﺷN㞽=~ 3|E}hk^b0.1@rÚWZZ]ޒѝ8G|;?( f`d\oj\h濯9|֥G$5=b5K&Ac &}]~雙V块!sd9 /W] |WSfe*Wu͈G<tFb8' .L/TZGME:p(UMݺERp18uKw 5+4OZsDyq<Tu_娯OBI5[X1MMG]NluN~]y 2   QM?-?6õ"$C@Zo^~_?j7GclPM2 Ǖr!r8\.ʇ_WԖ=F^jI?yӃcbE@29uKHK	#Vۘ=np6|ʒ:uKC Ȱ.8ꀐ8SdO=/A{ ?9v:~4ڜ{GR#gS[?۸.eMpJCFdMIk~2iK_iZ]jekBmdZѴfh.$iu;/򭣸*dq'cvRE;oGuyl6qQ\sY_[cދ 7ptcz{vŹ'*iݯW܂;eč(@K8]9m=q#qҗ\Fxp;`\~p"{U
^n,~ZX^%SsH<)=;ͯZ_^X [\[\~vq=:2,K֞I6[dKtIЩ<)]m ;]N'Q8^c,'_gXܱ4:20<;QAGQ  #y
T>g,pMo'yX_x +~BA <Ƭ@P[﵂v#&[9̟>5PA7>ycq   AОOhch\i@Kdİ؍0w84]w; J|:Nb!6āw"ulx7SMok[rOW4͟)dI xu 9Fxߴ/ -4?Kx/^YWM
xu x2k{xOu=khfb\nm6kggXR\yFoOGӧ-tOX:Xj0\gŖzƅwo7ϧHP#+Ro}#$~Z߃=.~!IeRus23"LQ*T^F*V 1u OAGtNEGd%FIcfGWDtebX4&|vGZ#HԬ-jȬrq9:9Vmcg(\nsI'SMwOȰ.m:Ō~z/)kZ6G}vOqޣinlYC(_fv`RKv]-ڷOԊ-{Aqt3x5;)%Nbv TӺo \ {a H	~sN1|Un-|Z?A6 .tB9}CuInuNO:2KimK[iYtupp`_obqZhx|?[(fx}"1ҝ-ַ`ivB	/Yٝ;yNZ,q%7vr3u~׼ㅗFyxº6i1uCvzv0BI8ɶZY ;w7t{<|ND{F5mgUe{i&횟녒kg'kx-#֣}CK"×tϪm7 /Hmgq{&st [4ȏv/# K$`g1c4k__/<M͕@ z6Ny(I7\.9'.}ɚ#'ڏ{~#Jkt&` uʂ\vT>!#`yw	GMY_%rnr3<˫k5,SGΡ˸srT
A(]]ПٚD	;[s#*eS<hff K.߇|˶  JwN񯣛ZI$_x9R7E1?qHZW4vk4(aD\n )[._75nWO. &lc o?o6wVmH?^x shF_y5s=ppډs92#0ѵ C_tQ$NbwN@FpM}?@Ố4 `
c2y"FZi%n,ܓG 5{md*X#]YVU\ _Ճ
\/<GMrpA7=o[IҩS{<yOØ$	6N|i:uA7SF ڦj*@TڥҦv	  h W-6"]趡[wq Ҭ h.gmóEt   _Xoj[km*k:Ăݭr+?N˴GWW9Ӄm)t1wv  X b`yaV3nYbme2K} zs/Q_TCν\>Hs.XVk]N	xdy?~I0Z%%?8TbX8xqv
kھ?w\8iߍ6^oMmmlϽ&_Rt(u'WvbS"0$%](0`WKEJ>%x{K+v&w)o|ovd!=?EEPH9>v.ekM|jk%FhU]}}[
&9IS9.5>k Ҭ;l95-^9!}cPѭ&vV%=.+Y (e^*0<<\뺜C>c"ݻl~3qi/d/\_[$-߉5(3ykbYܟ<JSh91+OUƷfʼŻ|7X0n-c&<R=/'KL5 sE]@jhſ.yM,#;)1(v HiUL4ux#,"6UU
*YRAʯ_ޓlK$6 0vnsJ_~B x"ح"F?(d!gP vf5Ǌ<5f	j_O\A rrdRtivWBsu(C:zyhA 6FiI[{kշIaxXx[Zqu=2@p0eFP 1y":Čh@tCV)hQ}Ǌo'7~ YYc1 	T Ukk{
IS#4$ 1-oc,o.'Ǘddz_{dn B7躍Wt=zl $^ q-D o5&[[̞@p~[kO9k7t ??S`DgvXQ|qwe!$Sko_c׿4'$RX0xf>ðȠv*G+g ?[vi"_x[q^3Q$tSKw {"EG2+q1km^p7 Aʻ
_ޏEPaGwq{}zgnssoޣ.,`+HH+P$ <r4[˽ ^Mt}6&I[SYZXHZvqGUKtH SoAekZEo%ݷ,  #?ex'q,/qޢeh@U+m!xS tqE~+'_mS` U wǹP$_(;i98>տ[ C[ylqT:u
-]@npy?^ ?_D snv9dpG/ _xs\[gz9B~_lv
3}KȠ~t^w< F״0u ozfazu}Z./58V?  WG8G	´r0by4e`@rz Ţf3mXJd|0COɃzO2Owq7ϲj&/I~|*'B>'<<n5G`c,K nJc"c1=Ć*Ft4_?17 =x# /A*y$qGX^\s_^3h밶(U'Pd&o[r+ۗe]L/,5HkvQ[8
XɀS:q$,U-՛wL)ݞ09/n	KWHb8_cz,-?/lT]ici/>Eߖ3z[>+grum$pcxrǧ]tNA'ێO@z	z8h 1c=E;_&=ځF~RQ$r}{}3GF|? abH$w?>Lo(+N?le<+qkAWƝO(_K3ǈ|G=eRQ3^yKE5 ˳">/yy=ߣϬ#u/n?}/rcg~!_/N@'| g|=}(܆k[y,̣Ē }@u"+~χE^hl~"1C?%$]ƜVֶ0EG?ױ)v^H%-{dHJ'쿫-YJXVݸFE:dǞa4[Op,BJ87F7;;@I%iݯ 0CLU~]\G6v͓N]-ɔshV {#k $b8,|=<y=vW8ky _	>7V4n΄ }@swO/Qi2rhzOj7Q<J<'efjR[5O]VE(+?TV}3~9Gÿ7k3⇂nEPf ğķomq{]_j~cF溒JqSb&zInUcG cl?s%(~coK?L)*W#\6)wX2gcP}O	wdGTdR]6XaHOhu+Sii|pO&{hÏu]_ cd"vBHڋmuC:0矯9{vT:nͧX#
se7R{ކe ~Ag+^ĬGjkgq"Ɇ>?GE,P$^vv;kK7sĎXXHq#w8_8szi.V>Y$ghwr쐆r"@YF$"*d l[l"G:p%-n7w9T@-*"0b.~t3eyaxof2B[ٜA{4g~1qơW/w?sh  ZA^W&O_kƏQ
yJFVHP?+/O 52ӵk]zeR	;TK@\*Nh YnXI |^Bx[8BZompp> 䬂ޯCZ]qqYmq=\Y;mv(N˷Mvy~ԁgqOn~ݵ$	@$.k&`dLR~Ai	.WjП[)0Pc04ѼP"'!V_1-[_~d:dۦPZ~cʀ5!09**a>z/~LFW֯,Y~f!RMKpmro7 ަD~ Kk\?u/0D'ܠ+kslG6W"[ J[a;h-
bskwH-C!e91= *h%]+u;+yf9wc6m>#xAݯPM|I<0kmfO-& nװ92]<ڷf^shG<#Fgme=W w8/ݸק%ψ6֤]:kmFO)rK˲_; 9l7[I	C_#i	`__WTJz`!׉$1J21 \i]ȭl2]RJ-.=v	-$(S>tWJߪE	<-zx2MHD`^U]w	.TI/K
j$ti谉WVus5̻]vKpfI&[Lm4K3	ܫ<j? W4A{HgK2HݑgI3#2mN5|;oo1Zm-bV
9Ȫ})eǈ|=i4vךkq+Z	
ӣ0< zQ̕K뫷DsxB >(,	 7$94u}XM^=RLc-qiѡryt?&˴Τ`2]\˅3:A ww VZ$6
0>e.Kya$.  mqo/3:Rdcj<e9 xOPS`Xn{RX L30:(]˹ f
~@W| ji |T
ɩj.N㝮iAAReiۀUy| D-|z E}	yA6y 1Aqɣ?HztFH09޺{0d=8,r;{~}?i <Rֲr[zgTU[ul%[s#1AKUݿ렝	vֳHW=Ͷ*Yi<}/]ugw>]A`S	c{h,o,FK$ ug}>$rЛWkm-]m_uZ:xXKMDcKkf`7sh̪EI(!N o޿ WoXHξS^'Gqn$XYT*
6.++o-_;'s?|?v!&tcioⵆJ}Ɩ[d.U2M/*l5o9-woG#+%̹dL4$)u?|̷7O	-~ Ԡ4V񷍵lٙ7ԼCw$3b/% *~+/;yfEɈEsFin#3 [ 
,[ЮUmLR	cχR_-WD_(Ă8n}3MF?_[~$köZuq#Ai𳫨FW1۩ee
*ʪ Qʿ+;%g#^224<%t"r]زĻ͓*ϧQYvVDxsö6n``a!ǚɁ8t_r+l~P-m@j 8 .1ʅnv]Cok$enDmabq9]ְ۔8׊4/ܫ>]wiWPi֓˜1\1'憓/e9gց<H%FӥN<BI$c9cZ~e}){egU<?4yvaIfl\	?jʻ/o\x'NK7(EIeд4Ds5?,qV^>Rb|7_xa%;ig~|781I=.08FP$_	Y%$ΛO$G6vݔmVvX8)YvW_llq͝>j}ߕǭR 5n:r<v=vֶ͍7pF # # vm
mmm!Ram#91khYfR6T21<)	oq< $昭7Nj^F@l+b,3E! - V]	/r燍ޝF7%]E=UnjQ<~+.tWl}0Bk# ؎}4wH<4-^b|]yA1}9NA,}-3>Ox"iRYYf9e$z=2 H.X ,|B켴I?rׄ|/s"nm%*6 x/$DH=oáh[(ml"
ګ[^6hݬAmDI0qn!s-}vWŦio0φff#8%U$.N:, .ʟχ'hu|e5x?iWjkbCpxgѴH^L,Ud7ͻ;M|؉KUT}=u7Ntj6ai:vv:[we{eqS[Mͼ1hIch6+FhgiaQ!@e}÷$6 ǃ@^:sN{4ȨU[<qAjP~~T^Qsͺ"O&2@!Zb,MzpAQmO3מ~  Ï(b|@3jZ ..s7}E_! &1daiSp V{%
$Wn^pYHKD&:1D~,=۶]BbޤҷO,A5hjwa0!z}'9e t v 4m^5+ .?@3-`7Q}Q/YAF}Jwy4BI'nQ@ 8
~_oYQeoOM؂,Vy[fyooͰī0vClXk|@FL1bc>9v| _ sOQa]<mzχ~Y߶mk&cww/:)Y;<z~Mǈ"R6Ox?]LtZ=X[_g)O⟁<?h~!.[Hlne]i4oCmVvoiq<ȂFRӶ=JI] vX9*H1ʲB~a>rGs櫛ѳV*p@*H7qBk_z}		c!%LbyOAq8~gͷN9!ܧR SiH"r
,$d0F-9+.忥nH>InsyA9?ty.Jɣ &8@y9>3Y2h%d'zVeD]o<,3Bm,ZGs c/_Z٤m,!BNҷI
pQ9m0%hOe"vbʷʋfݺhLG 9Z?~)(Ty <H&󒚛]F+hЯޚ -|K;,˫_ʒc=2( 1çzwy#hKO?DҬ{[c[ɻ},2e_qO
P@ ֟hz*ct ;lsd1'E/e!ɬ;KfڲZXCi%B"FDr>YA. Ɏ 䟟h"JG!e$Bl2HWz _!2>,00Ms{1#g$jlDWͿ[]Qi(Q=i$f;s qnMsUTJ$ Kgy/l !;Yy/ll>k'
7M+cTͶSg$UAk)?;۷kv~I=e&KȆ[QTHbqʞw'~Dѭ.Afӭ"O$+O^[%{E-:״M2EQ6FRgdHfT2QH `t>9%i B#$Mm{	VM3Uc2:j]`:EZ_jf/4Q<awYxNr?.9R9eHNe_lK9м	[.YxRȱQf^Z21Uc ,_C -C@`BkkZtJ V  *|gkkvD7LhI	T-*PUf	 FC"	v_ PKOQ^iq>.* <(_/88u&G_OpI&K81AqkEzȨ<ktv _Yf[?=s^j0n~#`cuZʤE9֟/ qy2!A-O_.̠Bʮ	9N+ӚVz 2~	lw-|޸A>˒vL>f#>',?v{-|B
Yڣ(J
Bc5nzmbW'qO,Vљne5夞D2w'^vw+ͨx1F7<֙kky'TcXO
-<7[jZVj}uѮSW(̒y7gڡcJ9ԝsG~[;ω8aX#q^,\08̱i%Ԑ,qW w%6OKE"팙٪~ ˳H/'[ia߈&*> *vg@?x] +ӽg%ެc8$xt9 Vq }ʇ%-xUrDyI鍄< 99+]3ao5ǉm:',rrn#Ӆ(-SE6EX5tj r7#^ % 24]rXBh#hݡ=F cP4;[+I1;v?. [z~H{}CE&RjQ[%t٬̺	>Cν絖t=9 -_f&OOė1Gjы*Wo4efU@P ?!Y "Z_Š.qY<ѵ¿Z91ߗٜK0 }H%K ~ $m}#x3PdIXh= 5 Kp$͢CnX/]4B>XyˌӴ@v۲K^X̂=#Gs)uO5<.Ygv} Oyv'H"KwcY7SU,т0$?KG g_L🈴uSǚTuf4߅ޱ4RCmURg:2G { /q<1#"Vkw!Ⱦ[`aHKt\ v%9} B۵!x[Wӥi.!\UQ!0/epdV6rzQ"Q~gq?Xb>?- 2OoHe_x2ϼHhs?!򃿭 ?14OK^dxWQC+xƳ"	~RmU|
G19yyf8 vK?K di}
WԲ'x<m[`{Q}d z	GDvVeO-<:mn ?#irg g_6 Cdm&> "%ҲIBWB܂7lQk/'- ڵGJ"K%oNLq<(x#MT+;M;@4H-#CZv&.]%IW܋r}; +F|uxW'txw `zn~_˧X$eE_=9iCHQ2IT^i_ݺEJ>>AY+Xr;g=9??-Xosz`M7ߡQEb]UI]JU	;BF#bdv-ťS,)/AO,?uo7lF$,O;m8yo}ZeQmkW>yL,  `׃'*mk @?ȲG: [#:K(׻p} uj:x_CZፉ*n|7s()N Y 3_ "}ݾ_Mxg:Ďgd* .44{.Iڪ8_/ "7?Ȍz9_kk`3p'qw9V >o#iUFbi:SAE ʖAavj?;>  Np/~^H{o?g  z߮Oesec){usEH>}#g$RWzqIed-Z*Tlj@ ëp_CBR|%OĖK~Ͼ>~=7O`yqog Wi:t6qGľ6Zϫ:@:WQt㶜izQCDm/k>5-SS@p&`y%XL/nM{馄+l{X.ݸ(cw$ĩ=5}C_Uc^=A^[.YqO<O^ c?85-&]&''y:!n 졷l{ aYJ]^JIw8r!P8*`<\b?/ Co`-9Ԝ3@{p z Kk7 vod1Nҗ #TK,@[} oͫ6pfQ\FU
vW _-<7ˀZ$9	1|syz_52geqR;ZP ucr?[0~wƋ|)g}g $t;I&=:(23fA _;@:<~ E>	,F|IR?h]b#\wFL~!3;.|Q(X+ǖNy<q魰kT?{'ޒWd|2)wVlA9thkd;3BIgi([[i@ $>F8#e˲":^ݧX1=I$OziYv_raFjlI,mLz%{
,YM DW|Hp8PBg%>ab',x1O|rWHϻ?y&ށql'֒dK\7`s1z> KPoAL[\S+Ry
]nE--_x$j:M2}-2k{F\`gFYэfoNLn4i^@
! `A~O2k1vIwL۹mt ]B=ހ	_7kl5 ~Y}hUAI[eŷ;unP+y[O ,9Y&Ԥ1`dVM.;	TF&1@4[ +Wy!Z,*l3[hrŶs|aUA/_~mwkw -z^Z~lidk[v1P9f8P9YGA-C)JWE2#MA@ CC]_P;ko	8vm@OkX9Ț;~T)&@i&Y
nW wMs/r7Dd֯W,Bez\Bkw =|oXa/SAe1m?Dˁ1_̲͓}3)^ z|w_s 2Fӯ%
%5;.?75xyϻ[ϻA?.eƷp6?Qkc*>a8,	0/ khW)xfmC%nX-u֩>8&ߌ.H *~Z/YXYt+k(Ego`,p"(ē$rzV[X-IuumbmսCx|2'' d{oo{=Li<a8dx#:{Hb(捷_z^[hH+>O<O4dn'E) RYLnz.2F_a_\> t껊` |j6V6yr ] :(%9+]0~yv%9K'#FH./gZ\xoY %j7>T4wQ3Jd0VY%]8 76  Xyuq$PYipZ亍e)qyuiܙUW"z%߯}mmPl[ e0]')IJ<5{Ɇ}J>XLCbSw`6quʫvdPL$iCJM#%ԵY2
A-$G@E+y +w'4iHiε9'O'gv&]
>]H	y 1[փ/CN67NG{gIgowoRO4rGW&[4-t=eiVxe-= (KvӢ5I*3}zb| 'r_ր$9s?\uCJ6(0O??w̭4[.니-׮뉣{p38> Oc|c	&x~i$Ki&Dg14bzɐABFjǩ.ST\pR>$<cދAu?qYOqwyKu=̄x"iY8gf
4 ?O]6=?PB+.58Gnf'[[u=o8C$hY%;%tz7w;=~ko$:]7AgYIS2r__;̬"Q""h"9G8Ze?[eu&g7T %1݃ci}H.kxX-jt3g \j" u /#֮"i$߈lO܍}zxyaAOo/wG# I0s6#ۑ$/?] 2ڂ|ͦcn53C('{ ]L]G\l"գpe<ԼOgt<i@PCmF-r꬟M(oݰJXݳY,zTRw% % 	m _]Ip7YBrF$k#s^0FH>4;_pD; H# l{haPue/iGSa]凳^x2G4] +o? _15]QrHXI	Y'iVhv/&7__U[Mz&R !)2JʪT2%}޿"5qx@5kH1[\Ezoˠ}o[
%CˣuSWk/U̕%1^L`n`5Bn8	⋾ϿOz?~gp^>'mys }>X;h&*YOLfMIKO~o{91o] ?9u_.pwl 5;B@($|`rU~ 5v㻅]C%K^@ NZ^_ /sO ;{5UcYxV^B>.<A9$G!_~ Pj} >x̪ErTfӈ0o ZHO3t4 ײ "={'}2fm;i`&/Чn e'& ڋ^WݡMo "Y|+ĉ5Ǖ1',hNI@v_ C^ cQ.QKx}#?j2>1tKOM4^] ײ#?Pl	^!cxYӟf܃z[*aW "_ k"ZvuC)Y wm_68 p$6I !yme 5> 7#!ۓ 5畻i%V]X]pw/.  C^ߏs}c0U7$n^{\ڝ'lp+P.䄑Qҋ# G=_{=k*k("!wͦQ	Fѝ'ibyX W /65N1h8~mE@q.+g̮& ÿ+V;33ő[.g+ ]Ic/<Cr0xPK+7'-ʪ iP	7w2  ׳?o]̈dI+pDeySI*Lr:ኻY+ o멦Iӵyږm8sÑޝ  %Gy ,|1A>"A{MnW	vuc# >kmFmCR񏁴[Ahe'R3?rZhۄOKn;Lr @K'm[/_#S?mϷrAEa/̒;.
̤Gpʝҿ. AdU6!dklv|<;=q_WtZ5~Vsŀ~qsJ]|C`ĨZNq;hة d eA{w>5T;w3þ"c p_JPy  	2 eCb
 SVxe.?1iHmSLC%Ρem̷P` .*嘀H?"m]cb}VI688w3揥W]օ{	T<SA42)n0bj4w .)߂0#?;RuR>L z΅iwƞ|'MM^ 5kHot_G-4Y⸶HEe*3U$i4՟Iӯy|8?eK\KR_WwJ"?t9il<;Í?u)oa+Pn-oDtOlew47hLz jbO<$ܫ ~㿱a]]ś':$j3LJQo7^xy"zkZ|Y.-'A~$R)0`r~^i[uDX]^[n4 mU'1 qNϻ?ȫy'ZH&=, v:%v-.ɠ#!OBn.tMA1E FM;: zF'A?tIM+KTBF0,[8p|d _1kCfi-%Fǵ0h>ÕlzTvHP,KɳV",V7@2+; w#:XKx<?j<i6pZcXt#n-l)'k7~vd3TL׺ q22pq#6r}t]4oK^VJQ:փG5]YO:K9}"624_w׺ȴ,>
ZȺ-p.iHH/LFmߢ ,h7{ۀOT!
aa%[6op-6  _OtdtY50I"E 6wR\ I$̑vIh࿥~V藗B_ȶoi,[u-RUNn(]$Hm1D$^GKݯ%w`OQ,d_n3S?.\:ޟim^f˗c] %;/ɩ,cA7wU$ey}.sV:]g޶$Mq<m*$#^\<gv2h2vK7{-_/-|K$K4d:J[>dw p*M"_ݴشz;-A_ZڭP:ej4v־Q&1eܡl|NZ j^ #ݛ|4k=O/|=/XӬv2srWyR_|)#8.-κ lO~K`K1$|> FH,̲Ҵ9lZZ۸M$ln;gvOLc|^_^:,{w'_?@V	{xŧB9'. sҽ+TMONv mUg|b	K1c9f!@'9u}5_8i
nHmnV-aU$.RB)w C1u&w.$Fu=4)SzI,`C$7)JRi?Ï]N氤1U3qCe5ɥG 2g Z?'ֱ${GSk;ur=q(m_;vIf!%CKcĲKjMtxA`y}zIżGF]_|+?00EBG r}%KMI}UevͱB< U:o 5Ii>k[A6},ĺ1[a<cr̓׉A>[ "/;zg蹐Iq>19)X%\B<)IXW_+˨&|rA Ļb`<+Jc-)0rr ޿ڋzda~0Eڿj/oI\j&=K5~oɛú,,S閷Q'Dߵ=O''fGaex#+{ o>ܠ*;*ʢ~pUffUđ8-؃oivCYFF
@`qb~WXȍ=ܐlqۊ4.;axE7VK+0fz%y$򧑕6'o .jd՛nD6k\ui6jϹq4!MwrsOU}W]Okqkryw) _uw^h~cW?1z2{z@|c0秿&Y WH#ۑ'Xzʹg,8TlU22;<s=@u#iVw22sA':QprZun0`}f}zu}z/\=vh>zu fOO"k2}_M^H-҂?NjO|<3 'zd.CEշ_2\׊4(ͩX%]G\u;m͂7N8i9cۢ	>(|7Ǟ9+kj:ؓ>RsQ^qY_sൊX*3_xvK.K<uD _  ON_wVJK?Ef]6	'~5onu+%^]dus-=p^&_Z麐g]Wut]]/>ċF`r|MT+[r~}/O8 uwdo~<2o/!$qӱQ-A[_?]wQ?w캒?o ۺ/[)(|B0xړzTM\b@;/+;sӡC /wk'Oڗfe?ho8~+zr5ix HzmtdW_ggwF$2K%χG/%y|B $): 8͠k?AZ%~ҟ L."J>1:1HeI60d`pA=/O ˺Z]Gs)k|3g!HsЄ$s/mIJoߏב;6)6xr@=yN1CO	k
	&`>?!3 }{Zw$/%~cﯯ[_>.4$dx$s <tDGRh~5g[&d`eeZ72F w=w8|$asW0ژbG|?^ҟI B1 `^? W:69j9=_qq =?֟<?>H6]G_
Ǧ>\3Q.k[+cX9gf
R=Y1ڠKp9⚔^=:4$٧g]~h'?Ι/<;qGþ/Ҥ\_,Ho<73Fl
}9JIJ-yowg`nC_Ook=7gwKMi ifMNh5}io#\\G=QOMܒmY^xEֶښ0VP>xbur1'';V129*Ҧ@NX`Qu} ]>!un|ߥ] Jt#8<zXp#?+jGҗP]?10ASX'H ?!01,DYB9$sAG~mihNݳCCTKO/ϸ<b(OO! _mb9 wq\>[Tj#P%  W7ǎsKܟyrbe ש}w<[o½Kj-|9c,Wy&<Eb]N{G>7߅<m+hڋY5+E,3ygiE2G׶^^+ Kff/UMaCg>^3~};Լ4K+XVѮtzӵK)O7[Ԗ=OZe̮Z5GIU%E 
8 ^C2	9-<gkqJi۷  5 "m_y=c4:u|t{dm8D 7w>;pv;@-S.9aAwX]cR#6)#% %t*w3t'.g_HNd-kg]/E4mė\*sJ>o' Oz]֖7`FcNJFU2PЀkDZ. ֿ|?s*-~_c&aM,)m[ĥL$Heu~WsG5X	xfAQ$sxqєgg'^e=&s?UV ҬLOm{TbD5m.;Ţi#&(	쟗z_{ +cR1^rH5(u ,߹M&p7AWKՉ7=䩒3%擨$	+0o} 1] ]F[hvbO!<KxZi'X"F,UQ+x9![i]/  ZF!iT&x#`P3U3Cyz|iw 2̪)<P: (ΟX4I#@ΣgJr̬X#Huz]Ց%mFpȮYhZޡfXi6NN	* A`.K?_zL. Ȱ5`Meqdw[)Z/ 74%ޤA6epSѯE~I ֚2J|1k b@_6 $wƄx3T.?nc1:M= m?)xYϕH<QYr-E\]c\ԬG ;[4?RFC.)d2~`~-O//,m j܅LxQyw"NHB{
>_pO9?O}z/<=z&+cCy4vf'oF"[ox~O:Bѭ%Vg[iV67`瓝4Z_+~eY:0i-+mX&(Dp<UL1eUJ~D\[B8FKI*"NKgIbI )w
iQ/&F{lGw4}¿ q>Y[_aϚtM%nbP#-yy4~p G쏣O~Ϛ_?Ozk 8;bz>ӂ8Ԃ熿ޏ5GE aKuUK|cɴzArǐc,OE9J[w_yv q wi	w8$mҡ9&=Bԥ*ͅV'ӽ$8ں w `>8jzC.NpBMxHlu.О^wOHI+w $e+l|i
*vcs؃;q_ݓ- {uy& :~ƶW0YdV"|G~G<㠬ڍor>˫϶ tc# a~3aY-W
7w!n5jV/{=<QcQG?ufdeiz4M{G8ۦFJHT~n^ҧZ3Wi.ݔ|Oi|y Gab*ىV7čpl Wf  :(eho{Uuk_S ?hRY,|]dU#[KM*@K|{,f J.k # *y?g}5J^|?l,psm) w =	xKC jR45rBC$9|U'P &b#95p%hK_VO?R_)_!U|J/rk<;Ŧ#U׋5xpk_ē%_Tp!K׺J1lլ};e	+:w a 2-;k֝xsJL->|)ZXFգq7qoiZΓ}~>ڋ^{ 'oCZvV^3ZMv^/-piqVi\Jtm6k}n~'3 mjO؛-G]Z8VåOsy7ŒjvU{ku1,#U)7}kyIӌTo F  {$=^/uN|scd;ULE ?<fɧ&nQ{_Um~ D>KLAd)űYۜg ~biaֿqN#9[ZvLSg>:y/H2M:nH@) bUz K~[fF.y?mۅP|r2w6~2J5 q]T<f*'[?^_;KՇkϏ*:e	U'=<K_įU?~?;S_m;{Xmk_7axXo$v.&>zskMu~f1pN/ݓZU[|m;&v>:=so%<h-8'4ȌS\5x|ZJfw 3
ٔ(tڎZoZjR>*|gz PqyԢ/˂6m	BG:ogNiTm ex_")NrqLj$q @h5RNU_[8˯ߙ?۔}.̷tn~,N-Η}tCsd$i]?/zKKӚݷN(>w>[˖,[OarCn]hUoL?h?њpK/"ya8| OV¯ R^}A-T4G#y+[P%b4J@I(d
JnXgJڷk~F7VZrY׏k MIaow/h@l{	4ο)
J0ָ~88TZ 0RF>:UNҾ9֤k5|6y+<'[	;l 󨿆Pq2#<DTL~*NT|0ۃi u^wO  \x7m<g'RHR89!|%  P: Ur:mZ^d/O(+7<Rr0CZǂ<tUwOWm "Rx SrF[m]o,Vw@"*potqew'鯝r:Ε*(~"KsGrLzz4oK"FgVU&_ס(a;IWt=o)J\w~gou7PtR6ͻtM/.p:|+UaQIvih;aaUJml־I<V<u 3D)}H93V LG  | _Ĉ7x[<ftH>۞)> t^f:PN. Z~q|g9{!Wc9<b"a+=-?."7vȶ~xfĲGۥ7$N8".vOI X(T${N |.K%1l:n9=G\%z,#]>o  Xhq~GxJxǋJCCB,68mo/pbbUZrZZ2-_y`|6&Qm-m?CgMbn>!L[D_Teh'˅+-I'g6I۽8xXTk	u~ڒ۪|@l(t NYI*[`ԥY8}kx/ULl9F%O;t5?-;k'҃K #*#9S"NѴ97=sWA5,-y6g+۶׷R^Euswz&op'fIkPaVL_ k>kHаG<7Icgjyzǀt\dB$04Q]Y ؍m 43+RpNJ^ާ՟'4m+×$w¿jdRff:@٭Kb-m0ɕJolꝗeJpsm_vÏ+'|/i ~\j߃ ׵U+jÝB^$MVZld5))Λo	J-ZGn:tjѿY _kҼe k^G@S.=[أA׵졿5+B[˫她!o$}XJ+ױ }<=;[>➃¿]xs>ִ}JEi+Zwfg>1ϯ](PXQ|:7nzv3V4)JUߖ~W?	?uL$G (,Min2G4Kuytmf-|=UnJz?.Roފ֯~ mΝ5O\3|T6$w<OxKyÉ8~eWN/ϙ~W헥mŲabXK=8\VyQ)fɧͿ oe
 񏉯ar*v2(lօ {[Z 57iJ[5ѿyit6RY>$ί+b	,X9cG88lTbUەo3\5I_ s\)4KB[Uu/g<w!F.І 76P匥uDvԭNyk{-{5
M4 Ƈf>A3cVN00N>Wr`1]FW4 :M3 (cºJnaY 8e :^?*+}/ 8+
%c,-} ƣl̼5㜑(ѼA$mqfTpcwߧ*99+[nre]OC$`ovuq[)+18^ciV6 M)EKA_tZ=KvsF%a+^j|a	*?ӂ> |mK~C֦ l'Z!I3-m,#i<Ur8smVJuk8T^카zn C˻U|+q򌭿] 0rhؔM5B|~7 Xn#FU2i's+|hP2dTXyz	[|}):xHW2ϢᎿ
FiW^`y
0ֱ:ow~60>?{<szZ<[}I,]y#{'_]1YCuhz%y22mBu==	یn]뽴>_7>;AeV:cTXc	<NX#I%|V"W|[{k_M 2Ԯ쓾zO	mHu_tH<aldm7*WEfY>ug V+
2;wU_v>n5mr#1
@$?kK~G+_zNZ:ҫiMH9@û%mnۛ#䁌UiX[N?տ^
u o\vڷ:>j=3`U\OU'OK RD`y^:h靽_r?O浢VńWΕe)uaԬei\bHf,jܩ˶uú׆{5H#OxOž.][F?е+gtK *oɿ?qs/?oLɃ_Fo+VPKx{d)<Qsa8tҝZ2%~חK'~Kf	mwrJ&&MoǪ،<?B,䑤O$P yv w[rׂk,zl.z2Ta8V}_+Xz}QyRWU#
Oop,,$_)6:Ld_?ء&jtp6A3Xj6	ڶÂJ_K àn"ZWCG5*H~LQ D$(?JvvYƥ7; Kg $Qa8' ^, A	Fw;TܻX29n|>_I`xY_to!bW:0?u_}_r?L	ǙD<mt_?eipARAUwԒ6=N} k?r'>1%t3j>8Wc/1'VVV)7 n$z% ?:[-L|/>Ubj,ҹ'j<xu&OۯWv[ ^< t [هð9-64+-
d)SYZjRv}t~nv ǎxyck,(/]h^"ԂFIdd~euwA
#H\x8m ׸Z;9\S n JtL{^$[΅;C& |>u\,T׻nZ۽Ir蕺m}<V  TuAV<5wL%s Koo|<M.Xn=4T5UA^Ucu (?{Ş(O[ODWvkU/X5BlaTuq\,ɱ2sm,\~w׬9Ms [>.]|XyFlyⶉ׆{H$rIr o_5Sȵ_>&i&jr0dڦ.$.وP1v9 US+ɧ(UmVg<Ό]8-Pf}e:5.^I-J+[k:jGyoyǞ5oE?uyU5JW"iŽq{Ԫq9룲eؼFk
0U$˫kO??S"M)ko1X0Kn.ܧ9>{lJ.Kmn>#,߾d:)|\Hܟjur?xNzь{E.^+ݮW~ڻusˉb4 ;j`r|GA9z_{YlN84sk|SNVJi[-, Dǂp\1v.Ķ7ktkY8T֏]ok)oLcKѸ!]
+v!#|Z֥Luvv ?KiԿZ_}-+[W5K|9ڽz2e,ǂkӥOKG}xONHJM}5izƋK+x5=^t*``S˩r	1+xw)£QM˪'*ӗ*mFfͿ«S2]$̐d#.1Aף ꜒Fk[O=u9'[[ESjr|X`@\> 7{3޵xHJo{2|OI ^cWiC1'o-p~`qG{u?~ݽ|Jo_ɢe U @Zx{A}vWD>#Ļh_/]8i^Om	t+^-/VxeKm8Vm 
 ʱ\nUAb*-]IJI(Mכ1x^oj1S_}	'pNO Wz ]#FH#fx08_ Z-G
{I*oNfExg^,`͢FUFF*yҸ#bp58JsSOW>)N:jZh֖~[2'b?(S y<q卶me[ jbWfm?Ul#@8+ (aC2s&X f ?U][L|M<9'snez?Ggx }Ist+BYk sR96 m;ݑMp	kXiyZX_O~2Ubq?{o;x㧥yٖEXGUvM~w=,3'Nf|>M<6e¼@XCD%U
A\5ەTۣN8t};*mW \!\cFx˨^xc)0ޒ8oշwM[2 e* 1ߓ=]ᬥ=)RjXs9Ĺ]֕쵋nkR!6%c<g*Jʅ+-5ޞ~Yi+.ֻOw>O:0eIsZ,/ <M 1UmZ M>
?#[AD̀P[ CKwLUG~c<ikw[hDP.ml2H̗pPKw=0Z_d6={gpx+s 9NNA<<S`~NNּ?u uokm30jFY3NZx!6CFs)Nr:t)i⿯S9i_ﯤ_cLxWLUK4~sr{r7_r;=iՔw̞̰(.60 6|q'{󚵔e w?^/?τ4[8;g :r z^~_gW)Yʭqg|%l\G?1#<z˴ gw-?R^?ֽ>s~ j<Vcjpꑪ[J7H'n̂2kr<ئ_
+ߙy}ǯVP(Ww)FxNm.н	`r@QO'If#*4!N\OMG|tZ#Rr|V]r_gtݿ%ly9^MB <tOWR/w׮B]m#8#'a"4ߺ_Two!@6@=pK`uA=%f57^O F|#a$KXK,-=N~?f\x2Cd|cqqҚ0/ įD6ЕP/NIbm|>qp3؎yQXJqA%g}y\NcgJ5*s{ͧ-zt?g[ia/򫝥Xm׃u8</S8]N沷[u[㈨?{Vk~#u|!d m1ۼLs+srH=kN18 3(q:UU  n2+-ݠ=W헁8|I#y\+t7ioi%Zzu9{{ h	A䌂e8vA,v&kR_.э]^&b9߹Y6ꬽhtSErΪr_v8G`y@n+Ub6n'8$3o+^SFSRo{Y+i뱵n!)=md+i+C #tw{QGb}&R:Y&mPncq̙*kV}ױv	]ѻ]vw  	?Nj?lPOs8Ea#1oibNbѴ_v{Zҗ]b0Gv2|:z _3~;|.g_½N($_xSV.r"yX h	l*˕=8,GqlCW5~h9Ge=j;{Jr}׻-;;?S7^ Qӯ,u.O)m)	b*rsʌQ(#]f]8֢	N_^aWWFԒkǙx"dNGދgלcu z #kh9>Z'Zݓ s^	M߻@1f%F~CkV$.maYk mjkv6U^__ K!+mjcX6@ kOC޹pQ?sI;iznSO秡k Z̝U?v8 k9UpSLJ4h+Io	5%W/i1kY-"'~&[y^[BDЮķ
c5\ >.<lڽ9IRQIOYlj:J}^.NOZQtY!M  O\c>.zK+O=\o} :HPR$)|?h HX6|յutm^c]FWv Vྔ!V|e %?60e .	;.\CߡsJT췑IlerĮD띝1 P0[F ] X1W =L[S4mlǑ%&1DG˹T̑=T`~J aj*Ҷ;#5U}-c^HخZrm㐍.I-#Wß2A"SxFʝH~OCgU*m&oO/?Or'ױ)qshdkk[چ-bfP傓vv<?_	NrJ] .7=+wo[8&v/No;A`,YB9Y0X_|Y)J|﷠{xCÑ@m?Q [w'@HE!	_ s&<PO>*1$VYFB_9'f*%y;L]-ͣŲw꼖ڳ+)eMmP *1HbHUv*ᄤڛI[Y&ۡKO{=?<g|sV:lt{3tMVX,ѝGCHW o2ʑKBxoZ`8"mO]Z>~/ӮM?Ş9M,:v7V1§dXr|c-|"暽&=|G÷(mPom$ѲC1x72.p-
0L>*2Ӗҳ"aQsM+n7 CLOLdTbB\XEHQ̂	U!-fo)afz_ K,զ׻I=zu]wMM?b|Mմ+-u?q	b&"pVΝRi.RQKo[ Zz~$|Xe ٿXuUR/ּMu5}÷ZԷ7ڄ׷^<Oy,S3.$y+ܜ&vI~wN
J3e=6i5ױukei
VJҐvKrI$沵+ME/7|mo~pew=سkS8|̖}^7 <<̺cUkPeXWl2kx|A,ǗpITiͫZkU=,w\o|MͩZhx^ZA$P2?XZ[A۵;?Lmn׫5(5Z]ޚ*1Rj4믆ń|h<,tmJ;_<+Ꮛ^
tQw|:uߝ.7Ri({).߉~[Z  k/SG?M5+	</Vhb5;mB .ǷG<8.{U'FNj;yweds9Z-^qWf> ?Ai
y7^]/ciG:6QH㿷.4#ċ̛.8i>Gkkwk*-(94vuෟR2X|k<1irO ,E갌#F	C2 at6ni#Ξ.Ѩz[կ3={ y.k8;ƾ(`iKwĩ`$&ť漴3xҿ~>xWc1o"7RgHor]WsS맖kRk^_qIwGY't<ֿ3|HRugfvѤ!w/@FOљ l~kcĵ
J5zj76/e0yl7
UH 6JIѴݴ_Rk5MrI'k]mn=lWqKuo;O58C˥. [{Tᨣg~;:P``}R`p<۸};rEvC1;Z_˧sOW#N, wMm,gd٣) 2$sbBy f(-fԥf֛Ξ~˧o'%tHŦJlYAT6wmrNZ;§TV3  M|,;JҷidH݆+Os&'vz_ʔ[Qm?d3:|Q(V.>|I{S!{l4=
ek!I/@$Vї>Jnڤd;'X⛂Tq~:nU=|ۉpPV̞'p9/e;X3:?+m;׽}%vM=|
GRmRMu߿W~o Y؀7Ǖ՛ ^83S[[ WݫK ?Sb?i̠KfAIHIWQ e>lZ<#Ky^yy^ӣT"&!W;F#)k/q
mZ{u8fudҵ㮺M  Ϲ𕠍@XUv',$`7NKi eo}ݾFqͫJvrOV m>iǄ⽄OlxsN~U F|.~IX $ 01(ӃJt~+{U_l}&m;urGk6ۏch|9e Arg*HA=I_dkob],>,¤ekYM`URpCqӎ]N)J֓MuKRN _OC[ /I[*4jEk<}mseg}~e(+ bèlDrT<Vm5oدW;ufpi?v5tvM&ۧkZ^?Ú(uK;rǈ-$tc9`i*0jUk[]-:T)%No#Ⱦ/|wpiw}s/UVe{,8-H!՘<nT*R7&E]s7Nk饏ɨ㾩T'JUյEŢ|y?ڶ 48bC$#e4QT׶uyy59CQ۽Z|+2l}<o> F@<`ƟeTXs:iYNm=MZ_0|jt_@	ys>W@'X0n2QYψ9^S%&92<Njy$0,|zP5|+_\A]qv\KJK魞3MJ {4س~,|'m8`b{Madɴ
Iř'wYJU}vκ|5TV巻yz ?'ůயee2Uio/zeխ?mcZClXiz=ܻ*Xs<}5OJXtS|xj;+ٶWEJ8uR$]4kfeh?
Rz :Kn/}Fkz/5m'n޲Zg|:e`2OyK|%_iqO[GUA*O#fjK|k
yO
xIàjZW|_Is/FZ[ j.aJ%Tsjh٧8^Vss\V+Շ"咻Fx ȍe5HLHX7u#uq®9>UeVEǁ1$_z sK(<O?L[ 
~i&D)`m,G Vkļ:=mOq/i !	KDO06A|]4dPrOogkTn I~b  vk)O  i^ȴXѐDq[4ȥ@s"]Xv!} O {$*4\P	2%UTFbi:<E2֚徟z/{ONslGw ^\ɨDʍ[iVo2I]Z4&tĕcF(FѻNoO%S57Wɭ)Yy=kxw) Rknu;Jxkn	.D;V8:OJRS\η{jҪ8_iվ]/iH[x3t(2m&b'(iB
$ ^+u¯'9oGNONϥ 9EpxƬq2dI9pπζr#젭\*W  tݿv%|`,mɦDŶhOY
 #;N7n(sU } 6n}/?x{ 㷮 j#2^h`wSWmxĹrߋ奃C%➷vo[.GmvJt5m Sw|lc<K{GW5ēО!1$QvWqeK/Ifm1E.CeY.QdL!PԮ:Ǎ炤A5) Gr|_qT=J8{p>Rnou`?j:1&d$Ӻ7mtަ .J(F]-?!wc#+toy%!H	殏تTIRZ?o5η:u'7)_672(
UDZ?sipmH`r1ےo_'4(xyK^o
>?E6$Sǋ%.PEb~8 .ܴ S/ݺ5#Ylb,?>gv$T 9yg%o9[YK̯7o _9z}ozΎm 5rk,rsKi @b׋yBO(nwպo%ꬾ G7R!_V6h5_P)dV]H*y/+4kPJoYeUVo'!oo褸H_p
LXyL#aecˣ~p[:Y_5t{oΝCmGXa"F*J`	lxB48(E|?VY{}<\w*N/ͮ${,l~2)'eer2Zs6MvT(2_ eIԩ/][͓z6F՜	.*U s3{wo5vOt ʟ_~ЬfL|AIK\Q!~vȡk |; ۗ[$=y~ ^oYS62^,evƝ2jH*]1
?9v~Nf^tŘ{_fNJLn,pm!5K˪/.NYi =y{Z->+^iJzƑu@NO͢錯$5XO*K+U^ɮ};hpV]BniKU(qiMڻ6Ko u@' :0Ŋ1Y@ʙfТf|FĪ Ǫ*qOFVW|NNo ;xQD^,<(7C.ŜZNIk
D>$# 5~eC nCQcٖO
0>[,6w)vE;U Pi]_' C~gd\ t=/b# gۦW#QKK;X`v@x:')=  _D<toxܬ`|xoZG8`g?I@x k=[bpik~˛Rh5 4]5%RΗ -|PpU|VPx3R+O^8)(4{JSm.u{ jqφ^ǋ㰋V% YDM׮m`';1˘ZHkx|=lJu*FmR']zX8҂cmMtݙO O Q/]_LJ=֡Ne͔Zi~ٯ.I(⸸X<Gʧ[)^ϾYe:)S&[K><Iپ|3x2G׉ծ` PDnGx-pKeV׷hSbΗ?ƣ6Tp0RaacpB Cm'l}^ھI>kFo[W X|hύ>&j>KǈmÞ1Mijjfծ/RmUJ	3jjAe\ye,>_J4:N)J4&vZ^v|cYvcBue%Nqnn/Y;hyX%?i֣we[ЁՖ'Vb4r}x-?= Ϻ_ϋ *<;r]$oܫ:
}swȒAN>\ZO7[}G  ~]}B<oi^$R**}e1--ZD˸V<Ϯ.~|i}k_ͧs'Z K|kRy"|4}ȌWY:읣F HU]X=B^eiw\I]w\B/jFqSF~v)=b'oR8dVhfKWP:hTt  r}lwxNL4h¼ȶto{eUY 4wK/G$^9%(;>=!4	UW?)ɦT|?S4*K޻ľ fx3oRܐ$!.>݃W:l[?+*F3zir^he.EqWOxF8?>,FFv#xjQx8v Dܯz\DeڕL5UnX}};_ܭEke+ Җh|q^&#۶yMA(3e+%G5b9F\7j6/iY?8S	{pȳ6*qS,hO,@}xr YNætNypFwvpkgg׍&/".o[O M:m#Ws~"to>cuqlRc)Z_+\2<6RM᧤̰/YVӌekK>6=kOg:|37~jJQgm$GFVFO5LUYGN1
M:Uua{fgY)ҠuU#ݾVYr2^v6jgb%Xrޫ⬓*TRMnW 4c\|dI9&%+'5k%fEHpw!#K0龜~[3h[FNַdֿwc[3^6Fx4 e[m-?)18;iۜYna*`}-JסSWe'l[Sg`zKycu+BKko,E]ѮqϚi*|RٷTH@I3 b#:nJ/v쮝X)SJ|Z]| Cᴗ~'FxF0cB1	nCghǃ/M9-Ԛ}?3:u9{+պ-~i#Iig7%COq־qVmY8%H}s	VEsf~Fi殮Jҿ4m.ŷ,`y*d18$;rq.ɹ*P;]羺eD,g8A<+ e#>yٝuff=YɯsmASIG1$J8%uG,&۾
}Bx6G7j/"g}+!fe'Y״-*"@沈GErW;e 牧\ޯZX|/Mr᧍K]ܖKf}Wj\SYK-m._iw_ש g/cx#uoxWд=H:έN Rf`-֤j%x{Jt}Vwn q0ZjSj M;> 8M6@6zO{/5HYCB/[<vpX5j K-;MISS6zя.u?N^QiGanxG3k
. go	8]hx'umF=Xr>ƵL]nqvy98ѨzW g'P~,r.ALƱ߃DBXt&XR?Kz].yZ>c7C-տ/ƛOGWuimpogүdTr,,Sp
 bR6[U55+'	~?Z5$#lR@eTO1kdSἾWIo/ӂ9y)Jۣ}MJ .3LcY$u |G2	=?(B./Ho ?\7%-[s:[H-`yq$`3acv;s\0HݸP]jouRVU6M>MxPዋ}s_Yx[],,i,HXeANGq%I^*:=Sm*W[hӨ$W,mߛo'W߈wPosNw}Ѽ^owwy:[a^]\^ ?TөD$c	pA	rё!X'M U<$kwwɽ<5KZN{	YJT+k-BJ62Ӏ(x|OB?ǅpC<?/r>)_N^I9CIukޙzw<ew*[VCA,cAvHw:^ZW{ҿ=G `~ ׈bb5K_r'	ψ1--LIכ̞
PUrM+IJ6}κ%猪FRi(˪z>hT%X𮈲i뤛U엀K"Le`Gs`8,*y&nNVWir=|g
)Epoyuymk/wxFYY[DoW-ָǙ	~̻xN-XhY)RW{;?/EZ/|Gѿ;coj51ߥhG-|;{ hRII◉mw?lK(}V`??Fm> L豕12D3̚=2DTrx89qKlᇳDx'uW= w:;_"ua%)*ϋ|Ud &<8H8^q\_峷GM3rxsvF".<Qvj
 ,D-sJ?JJ3{4!/85+=]S[Zfk[h-v{Ky$xl^m9aN4)<{s{nvi;
(R	7iZv*t=D 4|$xn4o
jJy!#ܖ*&ۼl0u<@>eZ|Rq _%hM>)_a(î e%fK4$wO- \ώ鉩6 Wrՠ"GhMOAҴve*.匱8BK9#o 89$ _a<>K؏ED7g/nGGD#,HtQ Vs)ѺWia bovo&IѮ_M8<2w|JN4@#cgkyy~xB4ؒ]i:q*Xm_sXƱqIkӫom`ڔ_[ L`?d6- *Ƃ0# (R+ڢY:K\MFKZP{~ׯvE8IithPp6-kϥ/_͛?̵𾆮 g%vŘ&$=<TKVSFj%S ?&#DD1qMCnT	V^ڮK 4_$?:ߢ-2vuevvVo %Old529RlQ$:aQʫF0qןZ˻Wk5mNu sw33Ov4+-^e @_e^ГuW#Ӱr{6h9fS0 _֣.A9r9?hZ_`ԂG^;z./|ǂ.py<~f~u$`	Ya|0Bpz㲐~Aq[!$Imk@?}Gu0  6>{cn Qu}g.BT@9>~=A;c/YByt>14kHp{ J= _Gii3qpNit_&f d}'>hv
!7NYz{g4O }	87CWIԽjޡ  ,R	F7p;_ wG-c{3~5Aͅ:nNx<g vu;?q6&ν:?c_?v(1n	u;32(c]#~xC};m I [ba}4]OuOC G'9^__(v܋.@ ?Aw_?4{_ւoQ=}9i4:rs qs9<רiR`N81cҷp9瑐i$c dQ\O3Ϸ4h?ۑB?JzwqWs@$׿n;/a#` |y<}1S ]/8Ϸa@,X0BA'x0z
(?~?qFW:v?a=8 yNsq}(SDz0OJiZEpFqA.O%wsێ|rqM/PEF$X"iB~heL}} "{ITҫIR)e`rI !V%e&n/[79$zVURkk}DS~i'B2{f׏Oj/~_K/BcwI$Q8[Ɇ2TXzb
9>I {(S*A4LW s # V"}eQ q/F<īSǼboA"fx툩zvE(q	.#8mF8*ZZew=sA,CmwWW2R?dχs+EmyZȞ\5ݽe
nYQU5!dQ	Wck{j!eh4ҿ^k Vg_'{䑤v:f vf,b֑I]m[Lht]52-ejQ[i$ Lo :wp}q .뗲2:OvC3xIKX^"+u8lװ_e'(eM6}(|'cfwi	h".gTv_'ezI_pH߇yfM틻<e*g1'- "(k&Jd.G믺 \'=#J)Z~KsS_|-?r!$b-G#q+HmFםf\4XF"MWVm+ޭIMϼn]J4c*THAEt[	Z^uUsߍr뛙Uu+PDl.ؠF=~訩84ݿ;\:sj0vJtz>wd.SD]mGS@FavķHp#Xn<$[>]o[pեRr'&RRvZy~-?gn i^?cmCzo4_/S{[wSӬeW }kkO[>)WkCJ8j-75	EUֱRj)d(JRjXg i7Ha࿅_u27aE nYda+	v+&ǿ:wz=۾ߢ7~`xZEo	̛.4
	W	jN?iNm|nGb_}Ϗ jmkMx^֍/kP> xmB>kSN𞁩[C#,<ʱHeyDie8WtM)^WtZ>d%SII4]! 2w~(k5|K<MXK-	YΖV[mk%,fV4=)gNMs4-nyU25UZug$[n֝gwr|5D`ú~~1gy-Ԯf3Sn۰GdkQNU(圣gJKޡ.:pxŦ۳w},tzGŲwɛSNnR0O\	伄d\=#$vzX5ﵪ0h!~JUmޡؤʘ,i^$Xdԕ+q<x],TV;&޷sIaއ?߁^b6ČN{gdd̏ 2WW<IU0voM{ڍ5?&_
xJK?xqdVݕ"[u	]F_lJ,+VmtufTOA>O7vjlm2cY*WYNuhVH_i <fOac۷b֑lL{2998KZ_jޑ_ԥFzE]K+tdQ eZJ
pRY-6G&MĖתQ M9V_r\܂巵ְĘ,a@㌚]d߫oyӥol$Q=CSvUp$ v$GR:qHVkn
 <ߞy  _'fIp:ntϾrBDzD'p^9!fK_A0UvNy],~"ʼ3b<p3/w_y\5ݰltę7v, ܹ?08sEu]C__ׯBl՘=x mB<v Q=
ߕ "x^K8#qݎW	a=~؍E&ZdrJe `\TXw_};Wxu3ZHXqڍP	C?c?s]40?Y8 ~>3Pi{hw_
ZgNn V瘁
Bh/Oy}OQ$~3MNUZ۠8LJN;~_q5Wn O3EQ[jsy)N>8!ԯT ~u7[ņ RKW5aJ=G&]@-[nOB%Aj~ ~_̯0uorq<VSl̤K Oq'D%i;yR[_1KQu]o~ާwR)uSNDW&tu3DR]lmJ4˿&hln\qt䛌e4nKeew}:}<d윾ݮ۲Wsi$Eu;,m5[岽fa7-$v2}WޒuG}:˦sI;'~cH|22*C-~8dr^z?$'^f'8ݎOZj=˂WgXX`1p{U.87o3z~+c":cg ^~bqq=?
 `sF 1s>ߠ{v}FwǒϯX4FG'>JsUt;?cxTRtYǠ*}#v7K9V1cy rE0k'O\{=ê{ :GO`B(cOGZcz۟N}s.yw+_ ^5gvdǕoO;&K   4HИ䓐^Obok9?zn1کV/Tƞ?|CQO nܟ5VO~z4Oő?uڌ#[  !Q=K4)Q^	uԧN,`/*P;RӷĽ,;?;F6Wr	Xf??R w_r)/>fs9@qҏmS{
}7s.8P\_/ :˩]yrvNNqB>_i ( H9A;O$Np
_ ב/aO4^8?ڷJW$`3|0_'/O_Ł?{j#kEOI~) /xq7Lgȳ=4{YSW6g:^n8 AgϦql2}r(
_ x F0<}GnpzzzR/aKE 	A֥eiϯfy_/ 1xT7-:4{ywԺE Oԫ'<SxfȐ~j~]j_ &B<u 6a0lsOJ>?Q}Zg?V !w wk-4;۾ߐKd|Pήzcql  V>&1aM? ŠO("QM}<-;|.<ߴ-N?j+ܥѴnml^Xn|hcW|KnnqEwfhm 8`c=Ͽ[^Ǐ
% x¾4l]<~!LEmBț[k~q/"Lֲnmܷ+9s۳;KAv8o4imEo5Ē&KMɥH',%8r4+Jt]mό4k zv>wgi#l;W,ErC3[4ֳmsk+yg̶x$V왌|k~vWN8 S<?ѐ"e9;f,g8/@p}G:~{h}Y_ #y zOGx|uvzeL{r$ >{h>{ `pt[mӯy;J^=[י/(?yEh{x۪<,2t\?%sܨCBS~dmXOB`un{柴u Kԛ O0p۟Ɨt/aS<m {f<}MT'XM.&<d`t!=Z| ^agD -zW5l2?AG<z5 XOun2qs m"@3': %g6zn<;y%ٿ5櫧1 b{f?+Ǹr_YMB&Rhݳ ǿVyV&3{ ; pYaD98E_Q6&?Y=߫(6X64ua7|<6,3fiǍYK&pc>#ƵNN1~9fk(FW~>Yw <	KIa/t&6[CKC<y$Isw*oUI#x`
pV : Y[ޛrw>.x].Mـ)v֨{z 3u|;o JO@<t62H 4e3uy%$;8=O47h0	%F+BpIU{_-?+6ʲ_tDVWl4<W̲DڭYZ6Y^ٻ}ny/$nZM3FcK, {aJPmBI_i+y [vA-[r!LBI$3g_-_k洽 z
 ?lO!E[2##h'sPV е>O&%G	cU?(np'i?g7otMR|	q0QChh d  JvN}?̨|Mc:dʴ2ĊiLuy-G3?QX{--!5?-pEq1[fU\C
 7|G޿W!>.8*sed
U؃2Ei|_Tp̪<Uw3g]I.^idO=@p,J^2ֿߧXd _Y|Q6Z3gw>]˃p[@dmr[̵z&T:ˌEb#˵$r3=yĊ>.J; ֖#}[LcT0@XڷL{ ySkHY ]G{*i!JAN"T~*y$	S?SEFzۨ&ܚ$`A<}K  ~Ijr.EYz==??5RmRo^NLèړ73_RyY8;-1$j2b_$A<.= Ӟ:W}4̝i_<U?oM^P s3c' =;Ti;eW0;`t JŨn&j
zOʯ.Y.pGcۏ  O4e}R]G:Wd82G8=(M|
 ϖ9sצ9:9Z 5x'	sg&oGDYԢ5mt쨝QrpyDq&_}ZzE;]+]wMSZ7g~ 
;IeOصh {K\sGV˿hVqvA<1oCNz(>ҌkuݭcXͪMGҶ_	AiVY[ d;"ȱ5e}+ZM*t8ٴ ׯ89GGzu,RL fZ%}eei\ړ;UD8&sвu~: qs?ZC6ЋPw}r_<|] B~gQ/'APZӥPk?ns Tuхc?1=>֜h;I}saʼl Wt qx<j} Ns >K F@8 g.	r9束pdljۖ0i b: Q$ "1"[=?
6_3N-RR_ys܎#֥P9GбR  g;zǭ?/@#O`1N՘inG]o~ Vi7-94iW>?
/a= O\b.䟠_D׀~Qx^h *=ьSО/Eؓ~ E $2O:z }:Э}b) u#ߧ_MQ=?eԕ|CR!p2	 5ƽ--#^q~+gϺOd.n.[HhrL/d9+ߐ nשK}u߹GiWx$yffxc$,L')7pz)ըyZ^hsלMo|{񮣤xWvDkf/wEִ+}#Xyd6vgkz4pG2ɺrV
Q{)GW]o۴yΤԴ;[  xc	|JΆvz}οnLwCZTi8d츷XnOTi:ueʜ`ZY]UA7} JOjms<pH\7ږHq<	/Oc+{ =-l2]lG1\ _hǩq=4Z<ۜ=5r Wdg:OPzHy{~tV.A qi^BCw4_8zN ΠsG]iUFONq]-u]g$ ֧OoAx2z| w#A/NO(_ h`vO?aE'_N1֋柦	~Hr?V!Lr_q:  xs#5&l9#|.#9Lr:TOg}N6<ϦX33M+f$I$<Iީ= SKZ/gZϩx~՚IoG
Y~ggc%kF_Ֆї ȹmCpޓuo",[j}2Dy.'t(O|lE?wjeuy=?R6yII.#Y?)	M:YK XTi$cx)\WWp)
u0]-y*MK%̖`C2#o(\#iẁy."I]4קK	XgIT#wב[9LљBr6ıU[_a׿h6;mef-Jjv)PCsSTҵ_/#ВOLs:z{JAj h8@sMK}6}@Nx֡5[JF`j=#c9XEÕLOP>PU݌v@ZێH#קҐ!2n9 醟?AfQ1?~?*@ p>l{v "&N6ہc}y Xh*1O_`Mr=@ xN!ٶR\m r>ݚ(Gdm:7c"I[   쀖hYRO?.S=x =JORo2qGy
u?"}h~{F]L%b<&!8#
O pO$;!{NO;o{lϵl|?|i{xÚ~;.;˝OTKTf'^y0PcE
 WN
8FڨQ[[dJW&+z_K7ºMtX[-ōXsolmHeLi)6ӓmzo-;yW	jZޛOfZM!-6(4n)"IɤMɵ7kpIIY/zWVݎT.@99<"6 z76quNy<x}B XE3ٓ9-s߿8.}4ǉvd"8-)9Ev<q<Imk  ]ķ ӞԢ'.E+:n\;4;du%o QhڥBwN3y24.G~0l/@N H8<ޟ2i|9%2 ew&^ g2I>!$`ck{ IQu4~ !CO<xF6# h#Go#Q̿I,BO䈇Ŀ|{Jt"}B?%O+~Cí?O;!R~H<eTI/ Cx|oO䙸zu=.J ?~W:#80\:}e"_q9 +lF| 1 fӱ'ȶŹ}*/gSeV Q◀f[LsA~?޴׷Z\gS+? ܒp6Yj3`i'#^(]e}S_?4V'>"cgk%r99acK=] @Tu̥q_<S $cHA.x F?eS?hwe< )*Iam?7{eH4{H φ#bںQB2:=?cS R>U2T
G8'"= X 4~$x
0FH:`*6K@do= _G߇gv5~V#iѵ MԟW9){H_{)_z "!!5ف׈ +	˂ 8 ~wo_OH$:>csΚc$ɥOF*Kc> mѵ  >hL~ˀ<@BѼ@ĂIG9^7uHz {9 {)<Jv@FPǭ?1 2GM B28 Q'h;G' ?W w J8?+iQ o]%xgk\'vq '=憣>;)B:F݌.6x'.I  d{ _pe_|@{&W_ >P:
)?
 !K̹<o +ٶO gn, y<e9%̫~Smcϔ,M!?(_4pF@eR] *P ѯv$8hM喩NE<Z2ʾb)9"-] Wߑ褴g휐~t_	_~&xT)cfI#J(h^3dɆ cGe{nsVտooA,[};S֚B.-NfE9YMSN2ify_cj#42ޑ,Dh\]^j0Lp5n.gQ&@T)WOGS6tHI|>F#H죕/biHFG#B<ח~&'Uhu>ĺCdXd\78<N+y5~z?#bn˪/m	8Ҫi4&ꙭ ف~?c=(} ;o&^>
2ꌥzc;Zy=h0izit4vy O,DyQ8F+/!.N8O!"Tq=zI2Zui_>_; #1 
>ь@ΧQ ֦-'7\uL 1Et-Ƽ׶4 GҺgBO v^t+G߽/?:^MF\ e|!x={fkiXhSŪ	dG`Yn4zXՄ#rIs=*z/+nm|\*RQ3No'~[;	u{j 5\^ޱj~&Mz䲳t}a;UecI:M^.i7:RZY> }hg4}+ÖiZ}<I1O44%Wy%gv.|MӼWKsw'Sz߯ݎ_@I~VǦ9ɡTk vV_RGdc$Ĕ#^]MnB01" y0֔K.xp? Zjno!p<u ^;]WC2ɣ}]KN:h ~/C 폩 ]/"'8t_[!88c:/h($S?-ۜצpO E	}WK' q^IsMN}~nl-S]Cnʪ>ϵCWaI9b1xI8iq&i~/ 7|PVpA3&GLӌTH<~ R>Lh-eIu:r	#F
qK}	^_ Bo~
V&;RekUH4H 3C˷'JG#e 3KG+I]޵(7ƿri#uݷwt^3Զv8N=ܿ~ r?Js|m	QmkSq pRr3GW] ~%erK[, X\s=of?ĠsK%J }2	R? c>o:Mhj1d]QU,CjZ5RKȍ8[j  7oՙh7#Ӽ8;idc@5r9TW?e +~Mg9Zh?#[Z%$ K:p^O޿DWonl*m2si:k8~=]Η_(N9VaDAt`~֯oj?/ T|D, =PBbRe$U*=CHj<j7.8$)*|_fI4.|UΗᮕ|I.uMky;R}eIt)#"_H6g{*[ѷ.u'V;M|KhvIM5[N S-<=Kxp\O'V>(Y#>EzA%VhAC뭛K ^Hpjq<! tݞ\NO5Ey]=Q{~?NPݿ Ri- }fOo!ڵяRљ׮%+J!$HPOD _/oc:F\iKY'tߴ>#߸ Q5wu՗{o~d[ϗД wV%)QeILor%@aIN$mknϟy|ޕr _xw_,0o3%!l ZGHI6$2hgw&˿n{\ih7PiWQ&)/(ǻ|R[+ph^w{//,Z/ i-G\G}tҒIY/*NoCRWVN ;Ki ݖ<«?6Qsԯ!#8f ao>-? ڢTU@LUHe,#8euVf3@!x9Zh+}VIڑ,v܃Y.$PI"&Gk_D>vWOT߫I*!BH#%˜g*b&SԜeLW~B?V=o
 s"!91'8 . ^OĬ~J=cL(?q[D_DIf_0\A ] !]	|:qU#h6ߞ*09$ӿt[5uQ|P`v]i`4v劢Mwv
EўW/H7$he- Z,II]<ƈ#9o?.k0vgHOFY)tHgUx̥cc/]>ж^ wq:n 6rŷ8IU$-]YNAOϘWf@Eˬ7/鵷&[/ߝtF+nį#~th:/%U`V< U  =F-$ a z ,7v1i-_~Sm i	|κ= 1qZZo$MY7@]$quYNu?(愿
N{!c#j	N9?n8!7ԗyb1q?VR	o]/ NFd/.lXm  Kj;kv2 !䘮l|I0p	?,I<aZ.7"h¨yD':R;tƏ#6L3Xɕʌ?F?|BχׄPx2yʻ(mq`_z-frHGP(Ten9[Wg[*ٳ/T1OFKn'%XwdQWShkbHgk:Ec rّY¿_ qzZm_c>#߆J.Vms.~}ߔ'2O|pZ%ek~5/݌Iϧe^{~-G\z5x~i|;Y?ٚш8*mT!SrXDm%%)E+Z_Y-NS tF<_^hJl-K.\ `"Ԩӽt_x9mI@9"hE2I:$W;:t F>4}V)wڃ-sevl8KV䄷<ʑQ~u~Ǐ	ܱӠ$dޕnqj,} MyVkkd@(рm:;JiY 
o-"pXG; ֲue Hԗ1LQ]Qp@PBLdF @Bv"/ٯlTYR#$*EO{i:5ENn0? '+Gs#w
 i]ߒ	 'sK.H,~h|CAȪdp3[ɓO_Òʗ޿RxH)s/y,Y+CeH o9! 2|YTkLPo4:sA 2Ct{K^i2rr&-yۃٍQ#O^=h_@}?Ó?hҵ4b#P	ݹzRumw~*MǇ=/m^9
k@qyQG &?
[3LGLD`	ǭKĴ1{ /Ӗk(WϸApV`p3R-QY_w\ɎH{R:g%  }V}KҞ
gab9\|]t7ݹ+^/H_VjCA9K^4p}H玙?k?c>ks('gdѼB:]% p[;IO	OWnSĚ5{iG5恣[J#A-Ɲm42$w]8eVJNjKXEjFJsVr껿3k[k^&OW}:}*ݮ.cLѮMq87$#[a(k{;5jnjڳۥ]59%W?  4;ohIX[FckB	4PGg#,HQuk~\M'k'gaӌ`M CAvv q15Vkcԧ$)'+͜\d _օ	w@ >]e.<S]{ӞTtD~pl&x$lA[[oY{?Uܴ',nd8ē07Lg) ib#Skʞ_Wyh+@ԛIѼA5.#LԢtmDNxUpXeaE_Rںk +~&0cC}Ve=zEgr=rI#1~#/b#gcJ |[EbARI	xR*/ȧ'[6G-+5t9XIXҺW=u?y~;|S4=ql+IыR0˲jzvi/iGGKurkU Ĺ]D/,[}KAϹ9ep^گ~ -=G( *'nxŒ3!muK#$ɠ01h U{[A'c0Uu\}KUcq>&<;J'; 1ܗ`u[u-=)B}$+t$MT H-nv/b>t}Fb2.={9y}.Bd@5;G)nsDόI:aYW,bwᱥo$1X̧8%vkDW+=1(I?\T  o{/_xq	߬^H:$8s[. :m_x*oڂ8qԍ޼F 2LD  E3r`d>/}HèՕ\dd1P9fcqK~a)6+7S3`qA `=>Iu^]~&xssfpT}I0r1!sߜW2_?Żbdg AG?  ~/܅.|tf߷
~c8@-r8g:G?{??	[`&h;%ܘ,xȀ'?{5߇9uH٥iAoɃH=#vn eG4w1:q :N2n=F{|PA*iѨ6Z=GpK3cU[ͅEI>&xuc$dsәq{q9|Ae}\k4McW]|/[- uO]--ٶZ['gS9Gh{p3߯~矘NЌ:uNظm[&o%%&ua2F%2bNc|R9_2vWo]Sɳ}{&3ی>~U:7~&0L`F Oh'HTzV߽/}J8@
 ƶ	4՝t4>;z.:[kC\U77iB	T)RfW_.ܶzkKtZ8 R6u4=խ=HK#$/${>qQ/wUdOmZmCEt9,2H$9B ҵ xmzϦIoĶRM_9手~9$$[7{Fe/ZhQ^ZM5 ~ܱ6F*yw}8%[J6"VmtYQkxXQ`DLTmw/K-?x{20ٸcp?N&ӻWȿ|H탤_¤q:Zy%|d/M-l;N:Eן̟U Jq+@ěF'T712J_˒)0X/'0V|?X&m qOyڷqKhנu'-ގe1wW1z{ {mp D.:-@|cev;s4֮ uZ &?<`nd4 pr}~_'+?cF ?Gs'o^I·u4x|3Gm#у|F8#9X9%? y8Ή}ג .3.FGp[#:4＾	[)f;FZ6mJq@.#6%ό1  KAP:t}x.?) 藅[Cņ=?LQ%Юh?o x.?g |~ XK2	C2{GqYw[<WU7[#$^sAZ\eEI%xT컰"P9 nʃ.e205C(ܝb9$ePryA>bTe}acr&2<G4{!yɃc#nX		 sw?Ꭿckm]wJ{.7Y!?iyox-I3,$d).)Znd,vZmnk{:SK(".+&V8m,mOLd^/{4:N77gκI..^YVyJFX1l>hdomS#(HYB:˚H#!nhc<5'Ue(ݺfw[c!-ucA/ʹ'jF  56ݹ zY}ɿG43hصG/9,G֗<  %>koZ T [|MDIl|KR`2' 坷2;^nߗqsO]T`9WmҶ97ͳc_bzׯIwM	+LG"KT:WX|H5hw4鸜)וO2Rּw@<>DEq'>e4ngxu{ٝniRRiӎKZ|>%|i-ͦYA2,AˑD #*$&OnݦkK]GoGkq.YLCeU̬_Jz8]8;>Vg3oww̓kz+n/>4Q0z|H8l#:һ{	=2|HT\}/M]4V0<TZ~\ ÒG'[?6m
6=}s M1&ޚ_{4q'k99#$R?;rG|U2g0.u"`Њ9ǲbq^kN5lYRny>4syjhAz&h]\ǰt|z@mdd\Ak2G@9J|Aʺ?obR$BesZͲwD[99݌$r_M|r@IUu96PXQ!!)I}Ͳ?81*e(?還ןV}C7;t,22:s SH  6q@ {{9*.י\o`V]i@$œkiSs.X 7s%kmnzᵼme$b~BˌALON8|v9s6OڀcLW(AÜd qKu'[ ]sZtYlX0>SG+//m Z\6Y(  OLI5-IImxk}A*,hv)"W*e#r/SpxU}[m'mF	,1i oJ #oc6.E0#lSpv> >;%ɡ}yn-21#)K5}??cNZܜ䜫.GG圚*һnz >̔~ѾEf$>}kqqd ubOj9Ҁ 1p5}:>ln r5Q$$U90y |E<~ S}JQXQʤ9[d)VGgbݘ0;/-5M%k~?	|!4ǙK$\t8W}P2\H;NKzZ葱|. ;7peVx'8\+-Yo2+3g $vlI97_2]zh	 ǦvwV$rK(UR_*E޺믙n-N.-~H!"1qsa5ޟ6Me2:~{Ҹ/	_P{g}ŵ {f?)f(ܮeW]ߧu|Afn6լ00YcX[$Wz hս>_6`[ Bq?)(ۿ :}ɗ,- RkTSԎ8U$G"r #i6۲_yܴѦԺ_]*$s4O6NNI>JW T]ev5=2mktynD[(E ̪JwP-Hwv0R2a}0{w~u\k?hιrIM>/;FrNG?^HMMM_)
%]g }9_K{ _>?	`9lB
}	`F`Cv4`=,!^uY8"@x={~(^6 %҃ஶ*#	88Z8❛ K.ʖ6 6@xS
-k[ڮK`*06X&Tg_& 4@O_XZA@'/?^Ex^&_2V$dU9d~'9Oy_7J­zPC_usʺ-|hUb>˟fz`$}h_{ - *"	VIW^	LUԴEmz[/'G{'ßoLͼM9xěw٤X&J&1
[{B6׵#7:ܿȭw-S |X`"+ZSG/wxDӯ#Xqo<}dC4FʲyRG}REy] +Em R=8 uO yZ W#Kj苹/`?<4 q^߇*2?׭vM ~,$[}̮Z[<ȧd.ʌnm{}~_Տk+ w%k|7H`(8q˟gsӏ'5w;k90
 0;ۑ0EwE)V1<{GrF ޠH2D8z=_??m"]dyo9Ă|)LI&]޻~?2<>k1;!1IqrSnzcT#i&)%ʟX~Sə)tL08$Ʒ^3?[\ᙢ݌ʙ` `_]:w!T\C@vqA~{tkZW/LKl̓278U3/Q[bT +{a3'ڝ ^s&:pkan& \cP?+?1hK>dA4;Mp^OI:cލF~MZ, Jc-- 2e4 u-0g[A sUӾ "UI?R~p##9ē zӔɖ']N$dO?Rv 7n0H;)K	9u5~.Xs<8!#J	S_hJ<?/SF~x|tsڕSKM?!Д#r$V=HqqWJ?^̭<A$O_[_l{} [Dў۷	ښ}Q3&"zc;wϠ5OormS.u wˮ8݃ڥGˋ'b2C+!VauG u_4jyP/ H),NOLMrIm׷_5Mi%Y<icA<xXq-[bKTBI$rKoynI]Zw{%HZf')mo1~X(yaC$EuegU#ήvF߆4ӭ~2消o| 2+%_CMi:>k`:8SOD">e$`|}M5J2kE\3(J+ 
OgOc~&W=7`e3Zw\7 6,1"|I-`kZ /¥~}]@XN{@^$g,W\P6FrsmQRhZމ4&c2;+4֊XmCb歜T4 ?
6Mi+]_M񧄼A@W4OF*:ńrȼ؊20<1N>~g dc|7~&H_A,bEƗjo.́ңNW]SZWROI$ 3տi i2ewsyaǅ<ۛ=MCخMܫ!{^@<W5d9]^*8V_\}~e7"$	2\^#~H㵫~3j|:[`6T}p3$V_D|y@'9S]?1szwݧ__!$',	'񦢞w _b|%K^_ 1 u'Ĕ#7)=+lL?Gv-#(W;~u9C}1 p	y4^>a)C ĀAvҋ^+u	may@YfuUYwJRޝssJyї2^"u`*8n|0öy*Ui[]SjqﲷN]Fs<M$q۬oEi$
(NM)1]WYֶ$h(N0Gjӝf\Ǚ#];p b=s?:ڻɼ^ַ\888?#g?Ψߧݱ55k5+D_."FIp gR#tW4KtGxuw"ImPd	u984-j$Q%;yvӮ-WUHUF7 J02F$t+bebFP-(RA@h'Vr{]vW_ #2@c>s(G~ g.VOw?H<,{x[&з{tT?xmj[~O JgczdN#vj||Ypy8atzO? V&q1ۜkQ\ݥczj <69놬]O>T]]J2s ~Xu]m|ﶩ}S>mCOpݒ25 y pxgI-y)t^|PI)?Qx.@Hw擑WI;ͳxGceg}q*#]ΡaF.nMn >B+HZ^[Y߭z}umx{FyKƿiwo<zRwVNq{-h
Jx:ͯ|7]roåx?"V:Amo[izͱj_j2kk+x8[+rtikn{0enmnۿ1G zRk7w?,|a.5.|=> ^q$Gi׵b4Yc<l$5?Q×cԅ宏9ojowݵ_K|Ϯ< XT|?>mǇK޽VO𽇈--
PUi%IwyOs7<4Q&WKn>[;hڲz/N ZҵߋO#O?߇"oC-}Kܪ,b-^ Z𮘛Whju{&.2d6M9js5}}~쬴"-x&I[ʢHC$D1:8h)_u?m+~~e+L9v87w
Ň8(ʾ[pz.aD/[ ɉ#@spn`xG"3m4W-Jy̍f>8e&!#?4AE81O=Zk_TTL'a8ʦRi]g
!(9%a9[De|JQd$3Lrk22gs*Z7m\sÚ®"+"=%(51D4LȰ4q5(y _y-iGjv]ZCK!B6Cd`9MYG-?Mv:|E}wH@2:8 IN2rk!'y43.%L.5ZnitB8b-¢b Cm86ŧk.F z8ɿi%L|k{8p5)ʕG=.\{AgNҟeܶ`&u{O)6zsMMn_?fo#_jѮ@ƕky1˲}93ʒHUy& Yv$pm/UfqH	:J+F,rG"3ȥdc=zjl9} lO|Wj9'g4ݱp[('qP;w&Ui$ߴM4 ?VW-$!?SፍśĖerOAwkIy2%HmCN:Fƥgwh֦{8t_w6qWYWhd{l}" ]?"H~: bų
6Dmr085'5}qIҎwN/N9ecͺSkD	M?`|#e~*n5
U*Q_:hjk ?j	ŠVOxMã(I,Zvyny dWrI{JG'e^
|+tږi-h.u]\\bT'W֯I1NYCW7vI/|DKwh =$3zf'yPIxF߀Wl=K{bVC. Tc9rIٻE1oOqe~߿%5DCm |Sy+=GV0I&xGIEa_/l˹C:{*.uf|'P
4Wi q  h_ƿTGjijpEo?mw᫬kwun]NtXVr^o I_׭41.X+%f}O(,m$@'An2O5v|:|KO3[7MΡp\nMɌCmtfYT7p1[t[,4}7Ki+L7*nQqmݖTo.4Uۯ.N[m/  o ox]]noxF	iZ]UOg4Khli(GQҜkN-}iV_?hݤ_[ʦ&I>(|sJ9SP27LE-z_]~~g2MǕnv4CiAlS_f8$ UV` ?[j̿Mn4۹O0N/ǋ<9U%I-ͽ^܋[oߴ^XC|`-M7:[ M1$Q[*Gwu;#tPFsB[m籬r+׷ ŹJk=C/ x Xx-=SM=_[wJ.Ҁ9z()e}_^F&^M;K+dM9G4oe0ks:%8FX"TӅ;7&u5gz_ .X1C2;.::TSⓏ5u1Rs/_kyRlXL)
pOEKp fIgO8ֶߒ+|l>(4-<	bG{ Ԫwnm[o=Vge s'opqB|C[vWӤ{mvD#-˜>\rcbJ2m߷gl[ svx!l`9uhf8s .xh;MVi[N#	#+x^Dn +v%̪_oF6t0Y+AқQ_c7pE*V᥎XuaR#ci!uw4|
G Sp|E#_&0d}{B\w)> !Ñ	bSoZ~%<s(ѧ ~"D~:|gwd nǏہ;FGKG'5C
ƿ:9aQ.lmlAc
	=©ڴo= Q^SO6/m |a].٧2ahϑmDx#f؜,UgPjR3[Wbׯҟ*O N2vO>(`%A bGXaF2RIA}{ǧ ebJO3M$'?wv
p@z^~ 1s6 olxofͷִ{9|JlccɓەdK[I'Ns5i{[˺zצ 3}OYe2:j~:ƳͨjzΫQ5˗Q{ۻys4һpVN[; _Aޟ;Vv?A/;e{_HF`x ,]$ ugY`/0DIK[vj^ hIش,lyya<ԞcwV }>o_̵֬[t;?<ƪa1F)bT'n1VkN_?w? >6)b.|k6Kqc.m/W*@yVW|]mNU2|2kw ևVr~ۚogx%'EDbF7 .ln:@W(rɥ+^yVￛ:]߰D1E܉6$]%4| j	ΜonP١wċmcÞ/;o	iE,o'im1d-ˏ{$ױAjtS/	ZqO[}6*s((7_~gmo>`==}Gb^.wM[YF:]iY}23/aR uAA<dV}XwbKm5,^/6VvXM>W	9J+Ψ9yg<񧅮Cs|H2Yi?t.b9HUO-8w&G1Ĕ༴5.ZwRDp=t2瑁ͫw1MJKtOO_+Wo?~!e_'R4M_W5Y|=.[C&qc{k1*
m]ߧOgTt6oy[ ZWzYP:68@;\zmkm I'i3S ΞY-&ZZ{
Z1y+o!fUvWk|̾KOW #7Kibi^@&'_JaȤb	F3Μ[/QI]F$kƚsH2R<XgNNF`zf) )N-]4t4 ~VxĒ?g.;S 9' bT6&R+{/#M+{Ybmc+ɉX6.'p`Pp )ik>4Gb?_%>?FE#z~kH8ӰԒ ?G,
BueYat	+,qrHU2پr4U.ҷgUiVr:-lVt&7G$[dEO-Ճ+`wi/_쇹+ݵm]Ro5&hqkg%ͭu+sF%u=VyudB>.^4]^ھrVWF.s#9RLJ8sZEn~M-#о#$63C%bsBO3#'h8!gm !9={Ǵi$p>#5Dǵ#'w6vsVoSRջݝh'!Hb0'#).wo?ʘ9_  ಜgxRIo/}Txli68OKNɯ4ϼ|K*_ha@  j    jn# ˨ߴeSL=Ct郸c}O?hn2>VaoVh|733مWsOOWw'|1Zꪭޞ +؀ \J V1w㎟ι*Cw_yQ}vC{RI&Af5Ԛ$+9_(wUGi"*3uM;k/Fj6 |Ϟ[Sy$-st4e摋08hQ Qz~#my6s60#p(<z}8&rO/?[/	Se4>+}滗?Ե+EoGn3ݵJO藟*vev&ʯ#/|uj:u|%پ𶈰[{R3Pֵ]Z->u?f]<9fU0N];jVg'G1ru]9$O٧n; / ,zĖѭ"6ky{xT줎q	LW^jB /K;Yr'eʖ()Jm]%6|h8NIRZ/{sF ZO/6ѡ%Ma˪:|<9qw?qi5ݽseo;Gssso8n SFZMA]1Si8WMݶGgz8lF.4qʣu%:0Sd$s<.E&OW?h'/7IQj:{2
JԡmJz1w$T89EugaV).#~x֒vת=Ѕ,qx*քNNث/WqZ76Img]x\˫xm4#]I=k(.'6hM?p&X{9:~ևVJZi__V~?kȊI#8S{y#]5Acrq) .4w-8L|drz8y#N o5wcLtD1!t1
N6yvo7v>Tkf<9"HxohN`sb[\4Sjr.t.D'ݻF6䲃3:>*?W_ğ'o|liY[x_)bou;->=F+x-BDAp½*4)2M֗vM{t ;|"VZt]oTVMk b`,FXҢ$X~wtu֎?K14	+xWO;I>`q)򱗴f -	ip6֟5Ņucc?:Դ6q"Z)gxaygդl:%.H}/9SG7]i^vaYmg/<Ip=ee+鸹R٩/SD<azV!($EedH#$~?{B f4OgB@y{GB,F2Tzϑn/Nf}ǃ/P ^w	vᶟsX)YJ]W)o_L^yq8w^Usf]n_KE%[j_WWSj^hm-)2|E$M]UE9)SIo KT-em/o#S⿇nZ gtM:0"dy#|F42c.x;+VA6WNͽWm|g?Ꮞ_Iok^{+:]:q7ֶS!˖[	:y(B7MivfwQM6rWᏉ4s/Aom4y&o4XH!-g4WRV8YUiS:n WLcow ("T$X4U#B*E\   T	'8r9<տLON }io4h'n4h׉u/)W:gSP(, 1E9W!^Ϳ+kO+wo~ nPoVTؼI{\=tWir:rK?9QIwM?T֩;mu ?S5Y4?<e Kkd^
;Xw6+)$ 57E{VKݎ_۹Ap#kg?7$NU?ˣ^8<UBr]HToeG-u##k\;RN44J߉gjk}G/,>'״饵Ԥ)FU'{eğ49_Diy G߹zPkWAo〰 tRĹPrĠpGOU՟_ԉ$]$]ootlQmb[!w#^kd(P	Qfnre5mjw^Kk7ضc:7<'+!/*QT7mCWzq_uH67I7P1s^UԜiSaVh-YF1։RG$& iEN7^̓wM+/{X|2?	xHE߀ޜCCXkw]tv8-Xz4arfNXtaw6~7bTU
SKUyAuݦoO?w_>Ĳ.n#KytaE"Xfԫ(/*~.PV~v-^řOƢ	矘\}y'#{Z=j5:Ǿ5KoxO&nfHO,sc^Y'$GuT@~#xAS  !M@Xw$}i{m٦zk~z⮵kkIpꐽ\xȳ@$X\ 1! ZpQ_ UbMە=| B^']XU떸a:qJBkgۿ ,ߟiAo||C)۫߯n<;[ܔRVj;=Jt[-c:d" \2[s,-G<03כVj?iRt$oR}TbmsnRe>>k$qKkGAυ2C$s/<1.[n:+ou7m=$:ZtC-m^JTgcRSZp橮{,4vwk#:KD7_S]U8='W2k ;ejmwW0ib1QG+*a^T3ym(Cԩk(Fk:u-݄?i/Yߢh2OGk?-<1zVEf֡aq{k-5yjyM|8TsunIT<:n}wk>5}GX=oPֵ_#Xo$"iLv|w=BA|$H!7>{ϯ	Z\ڷ{ulB/|D8L-~qG߿50NK_PkY>QfS#I{iviQwVbNs$3r8Ĥ'dlR[z?D|1#9 Uwu!~`1ظy|P_=+aտ{5τxS>ֿcWL5oQg^ihidrl0Bq1H`Y]cnFU$;m[ :ഞ9w9tm>.H4V׵6*|^WO˾+L$S2ȥ)Ytiʢg6~q ZۋBV_~,yn֡x?,_	xG\ӌW_JڤB2sp_p些m5>-*O{&6[NsS<Gž~<34z^.]WLlÏ$qn-ֱ9.tyհiz:.oǯ͜.[v|
~06h=N+FZEޣtvkךVdS	/uHLETn,EXP՚MiZV9)UAqMΚI];7|wo:|\Cź$z<Yk\ҥ@qjpZZ{9 DbI!ev06.IS:OTjE´(I5A)ʌ[i8MN>iTjK~ƿ_|;ik5  xo֒M<מ STXO+W2dZ}s@Tce{>wevK;XԴKBe+=ʄ1y#Xs}^O??V>ŝܶ?@ּgkK!hu}f]kPb

;DRWimujkO:RjvK[/<@HƏzJh.˖
E>ծ<JoNFҒ},W'<n̔ߠakt]<>(En iyIV H2(\z{M;x/h~|n[\6-cu}vBXlY(oHpYce=_$::Ǽn }ݣ߮z`Xd4`H22qĳ'~O?/G­;w|I:g 6Va^ ;_%"ŢX>䫅5UvMq⮒ڵ+e	^Y7}3x|M殇L0dj7s85v_-;[ ~ǀYcC"|sF>)̓)3!$Uԧ$涉j+]9I4斿Mtȭ-Z&x,%Pe v~)$˙޺))4~~gM╚~Juh,N4F'8?"qԙne|{7 -VqX5>P5	eNuYDv+k#3)7dER>`s:[wEڸ>+}>\^eǂ-yq$_nmJk-1~;&݄NIeߦｼ_]_@BX VVLs=0z7؁Cmr M7iiŚJ^[E}|\mA5D((FqȬh}|ʧRroT.:|Rn|(fh֨̓	*Cg<zv[ V>BR龛5g{fyer?y7_h6䟼BzOf{կ}un!>Vh#Y2m$d+f_0D

68 '.ߐ] S{I-Rw7$c#ZkR$ 3$8<uZ W dסz;  UBH8 _֡wG?ѯiF}1TA~>zZi%! ̩~y _=d+^'1 ]NC.%:*	Mnk}Mms^p}.̿? _ɯEסik> | >ج*F);+m茟"oW-C3G t8>WE1EO>$x/m.]+GE"k/kf\QjQ/OUdֿ%m:t~-@6c g|Ǒ\ISnK]5]*xx4je{ȶ  5?/4?ᏄK}4M^+<wjWV[OxD.cW[Lc8PQԚVv^h(Ya2"N.[OU oa(Hb}*YHmd]	<LasG-΍iipdkYО2gjg(N׼kEާpKBL6!ϚZUd	*SQRYECϟ?<kT׺o	ͧG.7<9HF͵+emO.8Oz)rP*~]F.Z^zt4iqXYQiFX<*JOV*c	80j?<o/>οWmb/4O~-Ѽ]{MY.j	X5׋xV<a5oit,\>/EU#TU)V体RIN
OIWQsl0Q
_h΍xS+C8Nu%=*UeN70(Kޫct O >%W;TCE.\h׬OVeznx͊/fZjf%ee-.O+
c*TOKMMwMuW[U+M̺NZKE<9HZ{cؾX.Geok1֬KYQoϴaN99ϴ{;('ߟج9撵X.a199#q#fcl"q9?ΧKMWn?9Gm$cPhf Ww}nVߙ/uGIMÚ|PM<zާc KbmͲʖ,\Jdx幸5iG\({V_*wܧ{4~?_qS<U*-5-[Lx޼WYu}sS<_WkLm:F*5/9u~/2xHtz5ß5ρn;#[]cQW[)'h5C>}P駂WziO0"-NNVT~B|G^Xhi3k:}q5V6G4oewxh5ݙVZҔT~'eMRw̴vMg ]y;c#y2-inUeҿyrN.{4Axq8$hQ?-&LCm?6qFp3 氖vowZ]-/^awn~'QkN`GaŲG+iSU,\ρ*B^8zMRrZ٨mv)Z;jRmvSO7[,-,5^jPyaK5I}ko/e^om!)R$մ建^jlyPZwxbmgwuUB|'XxId3'?C>|s.
:("p+ˡuqx4a9+xui>z5sQ`'Vƭ)o{꬯ź lu-?T:խ#𥟈4]meihd;{/.tI>X4i˯+]&Iݏ:9fuF'Nun0I5+H$$/X_h£4QI 0iIKvkCCan<g53d75-?\V\FL=͇|@,g@?_4_Ƽc蒻[ٟ,[d~mZW!XYO7Q^)HnC+$7}'i=&{%Jt<w>H?ˌt|{:f^t 8:ڏ 0|1jM^h/'Ofhe_kpxBŞq&]zk4 oE^K?Vigo.~|ʨ]ﯯ9ӿ#6%ڵwm9#g#$w[]O3JM[/m)tG}_̳	$OoLWee6[|2uc%R91ggCCjpK 
kٚ(,d%'<WuoHD7dcȲQc1=.x|9]ޛjQHڅ.`]٨y/-fW0#A(r{khܭ}ڍ?i$ޱQK3W>+C◈|aS)|5{o4-̗+wK[)jTP^z^~4V\˙-%#~:'/>)eZQvk,<M.g{]^&u$:s'`'((=nNߦ۪=|r
9ΜhTqwi%fUwU<QK;>5^OOxON&ЬSJ-ijrM-[͉6C*4gzJ`{(ͩ+5c>N=ϕ̚Y(ԩ5F29AЩJ2Z=>@]P>#'G_j?2G:ON@RQ4w\$]ܬ˨SN-\'sIi4&꽕Ԥծc%RU(8ǖK{WOh'ʻ-4]7UYjEapE dfR_nz˩JsB^h:;/5:]WIީYZ<W	5J;muq4vMpV]-&^.XeߧoG;K_L#cUH!0I9939'S]-<S
WnW  -.
[}	#2TG*1Bw&=IU[CWt}?ՊpV_?2vۂ7e6H݌o8zcbGT߻9֋0z0<R8 $sXNnK~۷5sACYVǆ<l͏<Nij>)|-:^!׵;X/&&_i: Y+6c{I8RqVNiii95f[qIMw59_ߎu_PSJ|g^xUkZw.=$2Ƴ$*<*:GkTҪ^=V[ԹcN6KE_N5xEڴ]茷3Xھ<%Ԯ<?i~Ƴsmi'me],==Zm&r=W*myI~zSCÝ#~-ji0i9^W0t-VJZ oWlVv$ץRF	sNNSqziv"=hKUdZu>3Ӿ#zg-,1uyx>Y[IkvMГY𗍴$׿l]-h5yj~RTZVh1|Tm#3[&h]@!㶂v&[͆H]ĩH7mt=>GۈvHXgc}kA#K'"v"X7݄hvKҜp0\Wzߵ_c_+|<߇bB
41g<c$\׉k:yi/=iO  㟋9iW_<= jiǋAv/0M7ú&y{o]LU3ZFok%SI(Gd{ cVMOTAFAi~KT5Hm3[6ZdJf9d.+瘅%Eͻvio.ԩqZ-[Zz?~uo{7^~o5_ޟiiveuΗVSvwt̳MSYkk+6{im۲qs,"fZjr)s(TR^YJM8(94
 A1-lO?|jŌ}&o=uMj&tťCCYN,O-XO	YӕG[i>WcbL?t~V=ӌ9[MJ*ٴֿ1Ƴyz}ܖ0ʔ	YC:*
%2 
Ƽ Rg	J2JQzZ֛֕i1%:M+e[C<]mh~|R9.t?~u+GZL/t3_-ݒ4-\ 2k/_?JpRߖ.2i_uBmRwqM]eMyNUehǞ*1Q:˕sN>#!vDyXiD~PFqQ
ہ`T`6ɷ߯pJ=ZݥZ _#__]B7_|oǎBUmwi+_
xn-:?ski&Shǚ
=uЬ3ΪI&{=^j>ax7Fɬږkۯ$m^1LvZ]QD&pTեKI&/M-][nOIQo~#֯Šx~@׆s:}DXKxjGijLYȫReRROW~ kmR:|2VZhWg
7B+WQU}k^I$7MxNfyM{ey]i67?CNka%O9¥jZ)ߕ&?K.R8T0|,G%)!-sh*u
w`]{tSv_z? b Tx=AXrư'4}GBJ#OItcHkC넙 &/rY?k}\ρ^)xǎ|A  kejZ C/<w5m"I!|6ӬC/ﵟۿŤ-r48?a)SRsh{M~<.޽ټBW:i5nQG{^^ u co)'ǯ]KyS՝ǒ~Oko+w
ҷT՛\u?n`PKK߯|uՕ^¬ +:mv>&<{__6/FKwďNHk3xŚnYc<=\'it)cT'tfST%
ҍEʪJuRt)B2WvkbVMEH$(ڷJM%Ϋkmuᯇ,37Lß|>I![~дK: 5/t%zx9pK)ūp)8wkbhI>kJRWM.<R]?nAajtotS栗W7LbԤ(\+fH6ۤi+uo zu(<%
doJ]4u*
n{M2b;1bqN:z1ri[UaNwG! yZ&H,W>ڹ+a5iCZ< ɑM|Ӿx"]-lt[;ey<Ǝ̂7lY H)Um+Ovҍ]n~ΒY\|37hV'''8=TeWe/ _֟` Qik~73j贉rdp	v3^I 3Ve_qa%dSu'ƙ6] 7h.@e؅]y.y8\R O#'~9<_@=}tJ5 . 3ݷ6qRr~z8@<+7W<Eh˧1= 0 BI  n0>>vn=:gW^N]-~_[ X)ofxO;$ʷڈDf6[ن%P.WJ{|BF'' ͺ۽vjo[ϕ8 Gut*7 W Cm n:q潙k>].ݽt{xN_ Z|A~o m5K_x{:U"<ZO4.VOLcB=k?w;=mC<7^Kѣ%Oh zM;ۛ~a[	76|CO~-<Gg_v~y8O>k|AU$DUyG6T*f4%kU{j1PdіE)IZJu\ҥ%hG#߇Wď?S|[g9KKoV
[mO.?{{~!j7G|?gr5wbe*
PjTgwR٤/(`\¥
O9{hT4JuU	N|ICu~ߵk G?/񦺿
 go3?|C 柯N;kj]rkshkZxQѧR1)F.WWwO^K=Y7.lUUkPE^SNU=6V|\g~o	o}WwsQp<9}x7:ڇ|YmixZƖvZ%-M[ (SB-Mӣ:ne&44U֮z'|a2M
Q*NUႫNʛ蹪raRn8y_ eD ^5xFҼ.H4wPaw^ {_/Oc;J[KzX{X$VMρrfUNPF捯'xZKg?\rGQZm0@=>l~\/qqH,ܠa<-iv>{Hu u9GC 
o߻fRn18s :=;7yROC Wp95V9ϗJw<Q{;/vi*?/)>$\4ρ^.4/OxR&PնȢ[_8cY8T{xY,6VՒ_KRb{8GTvIi{uZ)x?߁.I_MIl,u;;UI'[Y##y<o*LU)k(-{} ӧ8JVWMkC׼sSn֛k}R=|' 'ko<MZklm/%-Y,4{(S̨9Yɾ޽ʩ+ݿkW׽k?O ? |T{o* YokpѶ- QK%/&wBǫPGO*N1wVJ>2|UUBU`4nm6ji+.t?Xz/.Cu{k@<.,eԼ,tk"aEݪ1aܳP*2h|>m5/vP亮M"yd[PpG\eTc[d7?/$N~_9zДwi|
Z<l&0b	*KFB<5ExBXhy$ _pz>[$GhNG t 	iem6j/_יZH<Ӑ#'W%XB2#^:6zuK w|-:vnxį2!"60GkxFBA<lc^Uf@B [6aJjp? <s;8i-84]3 oq` Ox[@$>Ц6mmq/442R\i$uiYQI&fk_n_3KU~?}/վ8нh6vX?^&o|GktF
i so	'+敚hiJt܏3[܋u<=I# z~|{[{ٟHm 
]F11ϣ{MC(oHKd\珪vKhua/H+;NUH7H$2qSRk[?KK (Sl	<v2bL.'8Fj忖| ߟ## q8$䓞`0aLB&I8#\q(9Z9_	.>(jskKsC*##ʊ!yi&vE:~Њ]əxMƿ K[F|Q:&[lڂ\[o$Vo8{1:|Kon^'n斛6[N_OO>{_i3ϒ;N\udg]4ZsM(v^^ <owGxF}:8>|WZQ4ww|
peeTd[tG_&I5oBO~nƎċ﷣@<k_<_5|w^N|=q]ݳ,l]7iz]YJeEO9p 3V9V%7wd|ڷM}nFjjfi++&w>O~zŽo	+^EhZDCA-/\o~Ii.$dn./+z\P7+(YGh]u#UX%JEYA+-,VHcW_:桧xG\%cR`e|Ql4X袸OIEiTViBM^oG{zB49UnPI]s^
QgoZ^iǕXE=3X"HV.HViضD6ِVIFSVJ]?J&Zߗ_ǋ[oV΋hͨE;KmM5Rk0rIM
ZmqyqXi*s[6M7ʴIWd}MQVF+*ڻ\WZۡ%ͮG/Zle<=<GbIshڥusuw2Rխ4k+Ie'փo(>;gˇaԅq~KW6?>  5CE<)`ڗRI__ukkx_I5kb[ytۈ.ukQvbXC=5OZ!RNt-v6poI[VǈWWmy'&Ou/uy~"<*<-KM|"7xY&u[	HVgHCET9G~q仺w} =6v 7kMw^go7F">}IKy%+(]j3Y۰ueyժ];kO-7Z9J[4]ώ	~CL%KƷTq>Xj:ΙͿr&msY[ٕc-tXʼ\f۷-wP\-k>Uד66>qs1*Q}Y[QA#jVKY4k+nI_N_
|I+W?K=;Pid;mR䳖4lL1OOi4o 0'{NsV&4޺[wc||'|Sb~< k3kVmۨ&$zR3nuT9m+NKWF?DPet`ON*NQJ-M]>>i~6E_ 4ρkn?5;[n5|I]S[}nZu"Z?[K8tgBgɷt{<p88(|Ҕ9$峵/%xΉƚƒirڿnm⁢ZZoZi"ҢHS6N?OFi/5{_[\d*<GPtZo=cS{&w;]XϛM6sq{\(SOږ\>ŪM%vLTqn]ca}6kdP ;rHG 62yaO~~_o#6thp	_c7$tۂ
g#k o4?(-H qF@p 2 iW/(t 
#ln񖥧Gf5+}o` [tͨO#
[T.ZUR.[8~Е
?ZbRN[ޔMuco'?o~7^LϨˡ_ӴKoYʖvsi,QA>yf\Or|ib>.5'd)NTXt}jFN47MŶRR*?B` x_M[Z@EƁᕍFJk ӵ]o#%xAgҝ&熲	ӥ ?|1=NFsrid+;ſ 㟃F'<?}yiw76c#RQ}k}Mo}pLz	K<zJ+)FKmMtO9W&bN<5FIKէ3WM ?|!u_~9OmG^5OJAt׸y6vees{Ʈ׳.vO~TcTVںzw;3ǯU16N#D  y8]9I^ҒIw8O6^tsǾ]Mc$ԯvhͦi(N@%	ڸHI]1ko|4SX':5͍SI*7>h9HQm2`ي!N.+Eg.ucNw	+njsowPum'V?[Cns}o-:QO |;oE{;
|A>,cᤵڪiVړ}Ylw7[^]]<Q%<ۥ)B%_oCbc_ٵ~7~n'/
k2]?xڜ&xS nլ=e7]ZVF&Z7FQԫ^*ieH?QUIInkZܩ-5WrI6@խ<aMZ0-|?Fو=oE$DO\\d-O??>a2OhOm
Nuo>!v#3]5wڄ5WZHei7a$Zֆ}Kv _7m+/X߉ _e/tk-V4g/ԭ2LOkn3{__\<=ޅj.a"-]Kcg0m	W#c}JRRN]=?4;$}4"ܼ2x]T܁ Zt	;K"_]ԣ8ÚRkMdҳ_s}NXK6V%mmݏnI'#zyZ.Uo{-\WoMm}y=If(vu=Y_N$ޣ)!'@=Wa=x.G
ΘhP0d=u[Pm {PR/`' F1G2M%MP1_A8pd4 H֛[Niu(~ |$&#Qw,$ce!ϻM%}TY+[:ٰ\$Gfr 'W#uH`9 *ll
p  rGs֒O+ Ƿ3%K'F+HD3ȭĂɸd1>~e!|'$x㧭X,yG#$˓=hY.cM=so u>	q_xxzM{TOoïQ-M>3='z*08wdp9ɯD<w㽹֡&rmuq_jrrN6\sqX K(8=@hivWڞ<vnis{w.DpB+6qDf!C;cb+;(8'tջ ֒]]Z.Պ-*Չ?ٺT@[sqr2n.HY+[I.}n"jҾ[\rpA20Aqg1 [:g.7p3=fNޅEFH sKŦ^C ñI@VgXSXtmK-Zv(	w$k8k0Mʮk]S;0K^5N|զҽw?4>"{7o>"*OG|-^Oh:uj	+mZ=qomqZ1V*jSJN.JI=qW<5*(EӕJu'JwqM;֧> 
~|CI hx@үt]FWkt%t@DbTլ-\-3!)a8Z&]r6ztTg<6J504cW\-ek%)&g^ m\1OA ju;Ƈ.F49u1izvuO:Ex} կuoXMp]ZՌUtۊKJ7vy2P͸*X,Uw7yag9˕NnRGR+"9t4 7}ᯅt2%HG6a<M{6]SLд{=mo5m~Kk-2k˪Oښ8&M:]5WݯY.E>rJ2*FIEs~Oo_~x_UcuேP%,]WP!mWzo<IiV}/E֞ZU-XuQqvҷ.nU<on+*Yk᢯w=5F֥HUj7yUSiF-B=J>6@ J{yw7`21E5&{ 2)\``dG8sMLLs9;m6on{j
TizQ5}:*n.5+Mln,R;vIxd(ܸOIFi^EkW]V=Y~Q{W~NZry9dݞz7<eU:_!I'0?ox0iNeGGV4*[A5/t;-6Z\~vtgkzY.]沞GJ|d)A\M.Y5IN_?c>-umGr}wjWlQf WX"rlӡQJ4mׯofmNQqy\e+9>omok~._>3χW9C3MAs@BuFN/-59_f,Kp0ap~4]8JSvsZW[vqpLʱMT	UJw|nRE3KSuI~{{	->l|Mp^Y'7Jptuk;tCRkެw]j:ruvV>SП=e\x+_&{ckexnk{϶-Ɵyo]yCs@?vTuU4\)Fi~QTja{FՕIg%ѶoM?.aT{Ӯ ]ޫݟ'tiӺzӭ_9
Hw⳪tg7Ӧ_Ȗ3saI$,I8	ꉂ@Ji4jjE߶O?ŵ-|1<V:ny-+>&=;yi#71Ml<vKq5]Fͦikfxy'>oh;o|5|/}úRv#V<OK*X|Yg}osF&ܖBYrN˥K
q$_Ms
hSMKOe+[d.4+4HMx5)Yu9.-b2x'(E2YqQz|1M8Qk J.Ir"O%P62M̒,l:HJV*^sZJ馽v/.%Gxg se'?P[j'<A^h>%RS°~?հ$$WUьRӴW?"[ _v>D\|R:*,^ ;H
1sGc0Gj7B5hNGJSKN_%$u#H^COsQ?>ϷsޏǇQ?~:cSMWLy~"/nX͸/O-ڡb_o.c<=Ohvos?mIМ}!Uv = cتc0%@99d؞_}||KLcbz2]|Ԇ*q=ia7	nNN\Nh|Rnߠ%}?ટD_oxgֱ	WjZlVwmj'TLwiZܭ>2uq;wZiG]UWek:n[{;zٞkb?dgǋ4EfZ%ŏ-;Y|;Ʒv7=~DtpK:KJɽnKGTZ9G%vvߩ?I۷_k"ԭӼii
t"FF:d:|_ioҴo\؊YNKGT/vHY¢\#[ꮜ]n=VOcO:v]it+éiZ܋wg6jW3mޣ:A}7TZn=.
($+km?_|Azpm"+Pu7p,_6E7Xyf8iT(ѫ)-[kzKqƕT斊^k{v _hŞ/fkxw'IVPj7֝tKoW:u&HC-*Z[ti_{XpnpZH;Op+w-zFs 5oCڷ1RJ <=xsþ.5oAuxw\aCjvؾ4WoxZA+Rhax\1)')*i$5qw/G#."N"4cʞ*G¤iS%:m4)  /j0 m5 x_DH|S7ZNX[^ZYItVEW<nmٕbciri?vZ6?6|iK+<&^yn"|=EZ5k
uRJi;˕7,[ cOW	
O|IS6V-W>޷X{1SZA_7SGҭ dgZWZNwR;7diMڷ03|v}J	(*{+ϗRͿ$d֫?7w t߇]WN|g-{yWbMma{g=G$_(:˙;sT޷kF{v>W2%*6t8SRJqMIťgk'?O4V|㿇_~x=ދi),5O.-3vZ[̑=o,\VYR
rNy:8&icq*,PsPj{MQfτ4Oh7:guF:m7qGq]Ceoomm+ω-d&Y=mg*^}24J뵶o%GX󻔞N;	P,:-w^MI䶇M>DxkWWQ[\]["IKwN~_>ӌAJѳ$ZjMi/O<WP<i\i,.&5j?oR+eZ%֚r%oن
8xYvZ ykNOMݽ{KOG=ׁ4_E?.^Vt{׾4wZ=iVu4~w6qjZn<QܛJ=ޭۿWdzk&8KYtcc~!B|#O9?Mִ/kz`uk^0{@Hx񭴸-ѵutmB-
ǖtHI;fN8[Տ/4h1+sBiŭ5}io 53<m?׎|hw	XҮ|hgE>#<U>5օ_IK-F8Nj#QvRlFP(NqI?yoF{U}R?o>gO ZĞoXUxK@ sGHtCYjM{m]>GsNu,F#^eZQזY~'-:x焖d^ۖvSgԚG/hQ{c,8a'rIG(> ź}sFEsKZ~G]<Hᣆ|û ;/ '9-tyso}r߇n/~KKۻmV]1Y7P[2}6ڴSեo>"r9~;Y^mmho<vxv8+)yTwm0([FA94?xOiC╿h `fUO͖'..Sg+m 1$n7Í5.i[ӿ-k0<{C¿]sZWwzuj6z#Knt5nZ!=>kHබHN
ɮ{O,`*(-URGݕe/{y_KD^[MuKoˈvҾxMHѯ	՚{_B,f#$p(Nz%t߸ݥFKqV_i__^>J瀾']|[/="z^߅7W-< kZ隷$v[._iS#~	.nPor#<_8~Sp#MQTq4 vƌ!*uT8~jx=-tx|5ZZZs<qml-d<QGmgg VAcaF B.6Ni-{o%|?1csFu%p:Fs9-pܧ%u'܏
xmĺ|s	iWyo\5^j>:Na?Y-_+ko<CcJzڳ:ҧ̤ۚ򍛺mIl$cccp	e	>&؋B'M(Txq"JU!96WGuA 8m9HҾ8{'{_Mn~K798+F˧_ Kx@'Vv\𵘎@;{XfC畢גRm$Zoggv:5lV!aQZ~ʜ%:W|NV}&x@_xHaim>6{&gA$dD2#NkYi}CFoJtzTAzh%$kujz~jO|y mʖZ^xBO6b[kQ,c7(Bħ'U.ktkoseaSP|iKuoy7n5[\xKu-Jvͭ<sxZkJ"2޶[q x5w]7DէJ	Տ斑=nݺ=mO/'n3x[G+;⏋3Ρo뚌Ben@ܺ$z˻[hL=jZ0J0`M5vӻj	od??(X<}\mU*ؚt#h{'%՜M#~o_ /m<-_h:A׵r\ޤWr't$ԤZ-B+;+Ȯl+`^rN^[Ý?[rt~sN%ϫ`pOoթT~ҧfӥ(8K$[G,~2.m] ۾ح4-1AweC05OG V>b>6zz5wCtUwl3za_~|ekoQD@Y|N̑x1@ȬRwI[z~ֆK䟟- :R{q9-[hZdrr^؏jDmnpFv 班	7o\UV}1WP 78.:U$M|΃pwF\s NOD~V  xH>+Swn:2
+*ܒ_+}ߟcJ_ħ8nI߳O?Oq3뱞O!cT
`Wӯ:[l~?Ee xTuk.1א{?}}+ {sF?:uH)3#;I |<}z J25LUr[&,W998@G ?Z/]vb#1֤ܮX|܂ܜg>!f~> ={tK IGS?/)Blr@:~}zGi~jdL 8+H1zL4_BUGAckյHw|qR|Gdm?~rKbb$,&0b3ycW;-eI./٥J2o[jz8:7I/u۳'9x= t r8=#<:w'o+~QߟˊVի>~ѻȔ 6Hq Ӂ8q@{~)v|>DNĺz,4FԬ`I$P.!+DuY'$lޯ^tgp?i;
0չ׮}8>Qi#YKskg$8Uޡ\IwmfcX.$<8>^j[ks*SJ\^?;h+Ꮛ|q_ ufԼcFn h믧\ǦN^M ՝о/nj-UHr-w}gx0re3Wx,i.[F<ěWIB)ϙ ࣟ~|hiMn@|7|Lo|=?%ͶZk-Ԭ-Π1M*ZM$6RkwךJm8G*Sa^Uad*/vm^~~~vV..OhWVq[,7&	XD½4(юm/w=?+.:W-ғ^ ѯ[اR1xrs[9$rzt|ѿzRyݿz#a^N[Ԃt,x<sH#vO5]=L0Gs BjrM2>\qҝew]?C4ʱx";#am&Ab[i.a孬LJeuV%ujuZV=,մ?:/{| o"ӼCZ^iSxC^ԠVK}G{W7s$ڄ#ⴅZ}޶?WReZiԣ:F]&I7c9j^)ӼU|][Sj\c6NYm#{ʟ.+U(Fv;%'y>Uknv}KUT0s/4&bV~|b l~!??j_	Zxoǉu95kM7jLûmk;T_xU^ <A:紷ˇyvYҥu(O[񾭦v>^'Q
u(Z4iΜ`OΎ+8ګjDڜ's  o_x+ |Uh%.K EqjWnyGv;(F1ʔ&Ij(gwhVe9R.x'%ӻ|k^WPoBV+þoߊ~,|x|JCLGM6Ŵ.֛x{Dm_jiɩ%^uW(3+++n >Sa5sSԭXWFQT&­Jz瓴R5bx!Gzgd+֩Jm;]ٮ?*m޵ʬWw׻שԢk۔h$HeF`g9'$!;x)sY!y#dN	uO*=a;<#OJ)*XiYkA=v_סѼSx׷rekg}}@	-./v+t j0Uf(NPQ/~eg ̩Ci+ʗwwdd6 \ Au;#w<Mnֺզ}v"kitOx ]ӡKhnUJMR17+u/T>*bae8Ku+V01{]&\E4/}CW>Yk5NhZܦ[O:eǫ}K	Į䅜ьoY9+8JI%i8OgV\KN*t#u'%po5#	JRN
q|?MCZ|?wIHZ,OִKYFqqisiEl?WN+#9]).v ^vCJoz-]=?֕Sǂ%1h	ݍ4x^UL{cs3 ]֑_ۋ]ZZλ
ǈB]4뚎<;Qr{/E0}T#Ѳ~cp	J $g.\\=WHxx}Z@趗Fd܎5 h?gfYU]J޺[_]:xwfW/}1=)Q0Q*>tk/[5?jֽYkC&σ|;oڋHR4VV+Ynnm햫$!pc1E#ڱvritڿE5%/vkG wHgOtlTQGlwQA4[!fTl`+'fk]osД'%vvM57
(6Eh.z1VN?gOW |)q-|b7q3$]׎5gL<w֞tGk>I+mBۊ\+]\kΉ4t	I-qxĳFDg+yjERM8&m_{9f],Ƭu7e孶 ?ُiߋ> hv!5 ṾɮFejnMw&DW7Q,"k^Úkݏ=䒒n?ëӧц?.a)U:.SRTZ'jiGO_^t?E_qFAo"fxH!bC՞f*6pSb89JvU }۟_px%j)z$ڶWw?}Ś߆<WoRMMG0$e̋r#u}K]Z"s"eM}$*a;wg ~=ZU0aNxj)7H~fޚ%m]ֱUgTw wsm.uoT5GUԼa^i:pm<Ehv70ZX_r[{rl%)JvSqz'}x=Pa=vUn+Nm ~ZGi4ύ/uxCVfmj6#6Zv{CgJ0NO<Բ4#.ny;Ǖ7]ٵ}OiUs#p֔	*JNi(]r.YJ9Z׍g~xo gsŞt/[|<+~"K[{.c$,:m֗M>5mxs,`bERiS[]WS|5p12qծER\؉N1WiFqMEM:rn HVxC~=ӗET-2M$gqwkfڦh%<8xpKӳZ.Vj=3JJ.5VRoWwkdK N_+_i\M"Om,?i7QꐩB,MGRmfن7'.ZNWZ{0ݷ嵵l+3	bjbqp9QU%N7a9kԝG%9ݏoO~߲5υu߀~о^i->!ˢ/tKŖ<ԼUnWNN;w ֎UxxIЩF#	E {:2<ˈ(g<f8>&8i֜!7Jpө4gRhs>Τ=_	 e^Ưvjzv'-_~_x7VZCj]m{,j7eՍyN0IJ!%˫{5xYd	1c&NtʊUNnXӯԒuGo0 ZCh6ڞ
xk]Ե'̵ՠΣYZk-mB+'3[\Yj'+_j'GqPUI5k:p浟?,KVRs0*b)֫N0>8*egy.TxoⵯÏ]I^o۫D'RԵK$j soiceyc&F[$+xK`5(T_9BRRpSZXFSFhJqRm?Gѣ?jߍZW&~4O
hZ]I-\&C0Hz|wn%k{;|wQb)F'rKnK_rMTeZER%}6)4?<~$~Ӽy}tCG5OC^/X.>{6^xb~qj7KfxJѡT&$vj魟n/T}}c*3N.I;i;;l۷5{O[xP f!s|LOX<=>=ѴztS>xtj4k:OG<=Y/ixթ8s>H9$̡އruOեFwZ"21qv=XSn0w??{i?|~?Kkα4Qe'O><1hZf 4y{m+躾ˮh۽2[ݫ>H-I6ҽ׻&~٣8%sIs.IE$jQRd֎*Qf$Mׇ7~΍ekW6~x OԮ+g[WWz=k,v 'K$́C2:}ݽ諩[⽴u؜/ƻXV%'i;5)-]t?4?j-` C #K9Ru2ʷBK;369pQI۴ok{tGf0y(67WiZ-Zgo|uӗA.xGV>!<=cV!X<;ƛK4Ze\,k,QW5_<_,[R|['~xZ\Ear,.60QSUsBޤ$I{iiE'>9~NOX^ Ğu8<KhvJjZDڞ۝v%揬;1%쑍&8ܞ9QʑkM'v's8Þ ex5qj8O\FgZ4R4e	ӫU(Ԅxdqq46>8M7r|F2~wNørIM6Z嵿ė\IʓOJ*ӽH`~Q'!Vp2L2kƦ(irKcݧ*
Xs*'g-'ZvYUK5\<uJWy%|9tc._z+իzpl_~.i'wI A&JXvq'UK-*Lq{#QѦXc)f@RU)*\Q-dݚZko*Nx凴o7̯m^KC.;E~67x/?*xK#~!Q	lO_x]毡C]Kk$vsRC>c^hӝ8:s5H|N3Rr[<yeLk%chPVlµ*өGƚ	I>&5ς|yh0tKwikm"x ּGhZ*[+i*bjR )Zin{n0atUxTUižfZVѵ}lQUkQu=Kwywj--ޡ{3^\JJ,\\I,!fgfwfl]FU84}{gTRNzmNHF^Jȣ7?I*xx]&0sLppQ[lo<v<,MOR/K[HJ	e&&*|\
兒(ӛzZ۹.]^8ΝZhXc뫷׏>#A/|oj<OC-ΫD|K.TҠVHtHl=jyugջjcTJ!R
ܺedZs/ .~+TlSXk3r-Ꚅj1mR?S:kknaJcQjQ_
jֺ˧ׁf? ^⇋l|^W}iO? ;-Oa~SdIc,=K<+xz7BEPg:nnМbtn͞#`*R_V|^GR犖ە)OGʟOf?|%7h%m5sY6Ik&<EqtY0YqM[(mn#=F.xê5o6ݺ-M4|`)\b5itgF0r֒szI[n[~ǇQu
w3y2Bgg/-bQi1^RXm̞b[4K;F0jV\Iik*:kKVS|)M攞-V#4Wī8:¿VkP(;b3{a|=%܈osϤi5oSE-['$UE

ʨ%GSԕ m5#9+K6? 9oUe4v-GS,\[62t'O7QXHNJ*JiI 8=~SV~\됨5զcz:R4u~Wk~;ږi0IPcid@xاF21N$䬺;_/![m$^iJ7])?PmH؟˾~T} TYj&s-Pc<!N˰E)ŤZcE֡K]"kkd;251/DޤadDp[r1XJp50mExGĺ5]Z=흢Y.&,qά(aǓ:UkmWQ/|<+瓁8铌 X2qn*7].iGZke(䯽~$٫?rxC-SO<7/iQ5γAcK}pMekCNqw}JNQ-b;{Q{kcşVWҵ^>"բm.~Κ]u ΚhSU> [wej2mJq4퉫$]_%D kEme#׆$Gύ2-&W ׶62\3\G{U+8lS8,uUS-I7m:_pδ y{'󾫺=/]|Cj.k:eȓi	-m'.c{yZG:RG|RNVy[*gSf[N?0CTtHJ ]T;N==k!0py 
g؃|?AV@dsNIXg'#t}='NQa @k*h 
 y=_  }ߑ{#+L><b<=L:1&[<pzJ_ħ8 xK5<h9MSRzfgxmLpHWOe	~kNQ{7ym~GO^"s櫭_ϩ Y'vdh[[m!\%GAbEZz՞&7d9]=-v8(1VI-ΊT	ʹ=2>rW;ۨ _yh׺mhzn'˳{9F-l[&!mתJtI6mn_ "Y`}6fj^Pa	!}6i&"]*+Y&1,Po^:i8N);;^s( u_ n?~69iso>ό75zľ׭=ER 4	>X<g(/ƛij9 \	csbkTi^4%~X{IQih{;|Nix\arWMք**U?~j8s7y5-mʜlrWzOj "	IAeeigPD6V6vZF%̾HI6"%IӤN%H82_[k|7%(ϑ~ӺZ?&DY$mnm&3\%D	O*pfԁ`|>>.U%.kujZIߣ-5p¾&b{ɢ˶Χ5|_=ͥR(H<Ķ TQ5ۺgtT%'o+7yE^kW[t2+[ۋMBCrj2Zۄnl,A-V/gwVkGNvOK%mf|m[9sTmK}׶_j'	<$s>O'<IMd_>Om ,G##ܰ8pMnUY\Oj [84_,K?9$}JD[2$$&IAR*Dr1p@>5cr;Z{Hb>Z_/ҟ#ğ%c\7{skx{R6z}kq֫o[97]jVVas-'mz.|5YSVRlWim<kW\wxm4MS\_xKRx2wg֬I|R-m/:ѤMb*j'Yvz=o#,'BXmsOfNJs-,N7b^1/|y_Y~"]=߃Cxk;^ZY^Wvz6s/ٴ e%MK2d$t~]:>Vt8ڊuU'yjFn)nJp5mY W&:`ԇ͎{zņq
;ֳH"YӒkk@I}bw.HVwjC+*tcySIi^
~WOud>|bo}s-׉UA]J` t=tCi.cii6XZ)qiQdWm7Gƶ*9Iۖ<\ܛwnGDk3nld5$*}@,kv}V"){׿ V<S6JRHmn}ko%hy93Jv|]m/4HͤoCA_k?%鷚,Y%Ho	 +{Nrmr({~Ջ9(TyRrouWbb0hPSoGwemmnkb|+޳x;R/!/Zo%-'4:6æi#:{DU#40VYrɷiSvWo+& c*
S4N<R4[ImdH g?N3Ǿ;'0ax6o"ZH-.iev
|4,&7V*Pj7(߃;e,m5s,egB(IU$ɅsnJvWnQO˾ f~ h߁<k7 `隇O^#|x-W}& εf5}2&5gdbqi[O,4J/X浹UkJx꘺PL!M8
HO6&~x |@?e ߅4|w?p- >kw?)5( ۋ=cMPtqdnAVTeir9CUWZ&~W8bqT'B.EgRKJ2웶
>>?>oOn;DNKxU+	4#WP=>I[iHk//7Zއ]-y: =5	nhG
  :c8EXzuz)   9!ן}(  5ݿ>"䲱oX3YԴ?쿇A[3wTX<7
\\$\۔>7RdZٻJ
9j_mo ֵ=Gm]j769Iv&O-*<~<<LBsj*۽r枒{3K5?)㦹?77|1ZO>OBνi^ޥ%3OiαϳMq<W6rmn/q]6j	>ʅ>_Fqb1SNN3$Q:~o 5O'%|HniYYxvGP=DG^hεw1o;Ytt.0_yU|Мf;N_Mk8Ww~sU=9JydJ0̧'h8c	CãE4WRsiyۛk"	ErX^٥1r=y>]]THR)G|}
JU10js-oh ֿahZ~u~?dVi|#9Y	VZq0TN	Ƭp4^WO<<%b{k)BQ~JR5Ϳw?d_xk׼mkjiϯKugs@;0Ϩ<nk5*֮#W#ƧS}צ
ƃ^S 
wyX~ i/~P|8_BAd׉rIPKj9.waN-f	VMRQ|ײMtLl2|^#ҥJ*<M'}䬗Nhy}
NGz恫_|8>\#Dmk-њ-KKB֡R7(/w{oL}<F_a֟֠%ⴝ%_{T՝~U{8қUxѮmv}N5m홵'N[;Ӭo2I=ܪWNFNj[EjIis}d4>!|dPx7UvZO*N+m>D#"PmO)a	R\kN_=:v&,vSR?ۖڷ謯<<i+xoNoVzM0PO$=ȴHXcGV?m%v_?ӱ~SOn>>	<APj_hϏ10KV/\-IjCi}FЭC$P_K[!oV5y6K{G

!"R=Ţm[h>W@C?xm'ċ['<PLsgenW#,_'Y*4(QWM7~N0]EқjlW軞q 6Ŀ	[xR]4ZuN)^__wmn|E=ί_&f#EuUsάI=#ww;%_#cJXzwrZ#$QnK8{>ff}1
>>-Ǎ-~>?Zǂ-xZ	w 5x_úL֔~t(5KSQ]r;Bg)ŤjΔJJnZrկ:U\>6VTTSʤW9Tu#K	 n/h?m5O:DNuxZx>v,-usi7W7i.u=M\iF)I~G6Oգ`CbtNi((j
NNч;W%KԿQ xRѾZͭxWſn|q&:Y]4m+QN[dx/ŵ*VU[:SIBu*3)\ot0|%ӥJ&XISYՖ"RINmt_Aմ
\Hů~K*=Ma{]TygiVSG,Ge$1~/e5|X:SR:F[Zy/v9)>.\pN"XLD^rQI)R۴~@_o<9[]Ň]>B{ǿXP\\Mlϣ,)=ĐF~?V:T+T<<&a(_1GkO޲<)Ƈ;`ږ&zm</fO3Uy'j:p5_XN-mumj(%Di|0!9m%knN9N[
bY]UVWz%׽OO?ǿh:O~+#g)Aӭg}IҬMgRH [Tg6ϞQpUkRBb䚔d_}:?N6Wn<VUV.rnOhBIvQ,^?Nz𯃼C^յ߇ڏio[Hյf R3Cqs|5hlenn4ҝ(TTSQ ֻzVY7aZ
Vq䋜˧4yLnyxolvr[Xxo$8+;-w:bvV*G׹*Zrߺ_gTRj:mj7 3OQ5>&КqjZ/ GzZώKh%*Xm2S5Tw@ἳ,rI2]8JuZO=~WyNzye*NC'<<=+UnTiBwT} ?Ƴ'4-*H=W~Ýk-]^x5
Ӵ߈^W^EiuƑyOz5}SNJwJTiR\t\S>qn_Gas,f0X>..3^Z4澭:`4'S5(퉯r~ ~E_~Qʹ\xx-.gI|KsߋnLkK)mn?ۖk˰sZU %jnZPSKouxաqwNa{*<**ټhիG\cRjRƤט|U~!O<K+yq 	~_]3Oj, {s}R+:.yWRQ\$*TR.g&e('.d8aQq0YQ'.t߶GNNJ5%Z: j\ψE4Kl5M>G𾃤\Gk}QmeN'$DI1yv/	884y(| 
q֯BJ4!]4NRi;sF.?Q:ݫxYks[f!/57:œ͎AFHˬyx
t_IE|It^Xa3q+XN3j-6-S]v(Q_ǯ>#ii݋.Tj~i{uG,62b)oeo[ݏm]ƽ>e̹[JIlѾoZ/<'6x~yo#{z5,<3k~D{נ--nKetd*MQ˝lKOE6+uBKnтnE)M]FPZ e$ eWYlm>  OmxCKng-j2ZOٞM7K-JG.,ݸ*u}Z67YU*Rvis[*O>U1)QXok8J{J絚#)[TG &eTʌI,3DaYG1kw6ݏU/'毮4WFl ~J`ՄED	r 8|Z,U{-ZwÝ.C>x4u[N{6-@Zpr2"uZqW-vMiUFJt82OiE/;~G[ ş|z|Lm44ۙKXo!KlSjSIf-ᵷV~e^ɖݩʧ$fUَ/F%'e=ww%ْx?_ ܟW^)>k}KRִ}{SV=cCgҮ/VҧXu=HYJTZJK=ajʭSjwVr5tRZ;:=+D<%xWYvf/:O|T^)|xOKZJҮ+RúTéi=Sx~y#k^mw+_fk1AStաM\Z2웿5v &E8XTNb7e69_zȥ	-*}FEB[Y5eک[ݯ͸9`dʒڝG c{k#d^] F#cKnPrd}X^MjKio[;w Dx̾-;'F^x;[8|ϩYɨ)f:+qAi;=3 b[xs3v̑n! -OOTEI+EOઽ??+FI,hecW))xTW&)Y:_̜~ gWl,uVF:qS5U&FG)t
t67QA-U]|J S)fuފ˥߯BH5U~7~zIsn$5\'yb 2HZw?̗Zc>"N!iؐXHH*!ɰ8
.Hږ=W\Vem=]U#%}~H?%fyO>Cc[$MF)F}~Zx'kJןϤg_%ccK;뿲۝B+_*)-Ry=ȧYՓz)KWNpܔ5N5,z6y4ѾhGi)]`ka.59Y~"Նo%Ia4mN{+Kuk;(4\~['N-r˨.-'r^)A4ٹI&40QS⻶_^^(rܕV?5+O4Kk}o޵Soda}(iqN.y
jotݖqJi4;]?=UGB _ _mX^<m	k.f^8uh54> ּ/}t&OͣUћ|ٯ[jayC9ZϝrY|.Fk6v>	G,-/&EYO@ށ&f^ō%MZIϵk4ovp*:B֊տzK*2+Sq+vVwt2?R4o!r7)O
֏s[ _*'40y}yĎ9'ր-ï#Pcpo t/CD}e( 
{jS>qO|d#o]_3]|+k]Ǉ
66
Yq$vUAq}4s>&'qiJD>K_5$To.E枉oDJ@ln_{z8hr9ot :BB4g|
kJsfxocZm4s}GC,b]սj>Ϳuom[W(M^I>cĖĽVI?/DZCLI		ck-uYh'I.D#	ҧeF)Z^ONXᩋ78}xS¾[?xk@.ŵtm;GT'vՃO)`$fmۿwsjo
/i ktKԼ=;\xs]7:}Օim[-K=j-YHnn{Kۼeٶ#$MTʳ:\ϑ R>Jw81ӧ*pI?xrxtL؅ͳ u[QNOߍ֮2qJ>~7|s TEݽ埏xRxC%k{Yuo/ZUoX73|)aaufPkkzqq;D/q}:u<N#Re%_x&jIIIʛc)|%|?P//ZNn 4YRĪr?X)aCY'('>ݗ'_&w+6ӿ[gzQH0sW]BXY4~2Iα\&d?N>YJΥkwwb|GJR̥$׳OGek[MS]?|W!g?AGcj4?Kϩ[6k/d˄UC&bЕ_䦜%Y]]|)oEgd0ʣW̨.^(*F$u5M ? go hS9YDsoko2aĺk~{h']1?a%	Esrxѻ=Z^Vw֚{kjxT7Eܬ#y;/^#mZ~Am'k/em\ш_8=T,i?OQt Y` V-huA^򾉶KS5Cv/j]GѢԼJjhn^jϤca^^_[$݃qڴpj.\DN9%өWEUTB3r%[i ^|u9mR[^+յ{}SJ'$-J-|[jݩHԼCoCbsXc5*yETe&ۻgY|s|%hѯ'+%z-x_ao
]ZjC5]Feȶ0m2c\vϴܥŤ^JQ M% \&'sҕ)5ox=R]<Lf%մ4G}cĉ鶚E|ISX4%2U7{ (FGkNWI._FnmxwNY9I8.I(KMnڟ>:<B%ִ_ꗳiʹV3oTӯYf3ϛ;s+}OV5sL**Tթ&c;{>V-g_<Q	^n[2ʀAFIrNN)DZf謵.~BfF.\3dr#'qR9=H)EM[{|PmBQBQy\^K@0G=~譲]5kݽ	oǲ5Oowxb	b]ZBմy4WrCk,VegxITkCUiJ)r=Zhox3;	9SG	ߞZvWzug}o1mV Ac?q4ĂE<5hCkE嬏b!nbuvV+<͵{kXcU*fnJrm>[_''+	jZKxoĞm$݆Y ]YkHM%഻DM,FTԻ0RRL-ISFTI4eJZIJڿ?plޖ]`8DERr_cyGF/? S^ehU߆zψs	qo_ӵ2&xkĞ\[Z{쭴c[tڶUkgGPڮIA(jRhPnG.#Ĭ5g~=dSk¤UZu]ܜͥT^1q;m 8	|8 6_x_.xDOJ4|Zk~-Sºa_ox?P5Ρ:6*4Km98lj\ڭ47,c9.Jn<K>8%T®IҌ)Bh:'
~*'N!OV*0iq2IU+zoV O;Ūy78fLK	#iIչf/)8@=}Iy?#JGLFVij4:Vj:ާ4q<EV_ȐY;kybY݀Tm\AkĞ&Ien}Vi&QM~ }9XD3;߫R-9I/sU*K(K.՟NP`Z_
[@Gj \wm<bFv&m^9Q9mM_\jҌ[VVwkO׏tOLmQ:-.pm8z,=8Jm/iʤ8EH|\RjӲݭ5yW?*G!IxVÍOsxNӤ8u;S$gyiijkiHm6i*^e9NP5MޞGb'}UҝXBչ5	+)E{ 8 <m8|fFҵSHNvq<MahI4juVm(Bc$~<!:jiKUZXz|kqv墶4߭#;Jizqn xCVßWdVt>ζYdYU}6שJVM7k5|5 egRҜNx_}	=wdM'o#}hw[YkZE|- n#,)W{*RjiMioSp*z1hƤf.UkwqVZ[tBg>,'}W׮8%t]K\3qesӬ..RT+	oRW^Xl{Xrmrmq},*GQ>2(B^GrJSJ	BJR?Iao_?g+^ uZxP:P=-֏◰÷ ӴNOԭcCظSi5k+r(wNE
Y\YE\^xEHbeΜg95F5(ENRW+OïeҼ6*TiPfIPեҤS,m&Α0R"ҧ/z6}שfm,s+F
"hԨ[ʗ2s7d߱]|2JIFִLOc]ӵ4m6>iuNW[vZ3G.ohӧfj\{j sU\1*2QTn+uf߳wÿ`_.I f-,KpLB^$1u#+A5kZhzzrVʗJϕSI=-c~xS[W<Sx?-#PB4]{KtkÞԭ4{Y-o]}D6-_Uk.e̞+7GqIJt
piҧ4f' W  d hOړr 	~%3Zl ei!Ff/	x;i[8}	ӆ&zگdԭ_<0a4PoO4!|wuuoŷ5_Eo^KtM%,k-sCp8ćhFY|e<%YJr4amdh~|UNxlZ*䢝IKN]73w~ ƿ]xht/ǚ<F_5|O>൵U|{3 (BzڭHڞ?z.{\IVPYn,\h.ϞΊXY'+sKY]s|Hj<Ӿ36~&Gut]D֧/x/h]CUw{,MjMiC/MV^Ҥ8VͽGkq>6ֱYdCSM7SMԽUd־]OCO?>2Ꮛ<cxǚղ~+կxpIwoit]2kh`1E(T5~ʰlKl^'NEK]SnNY%m<1y,>)*'QU'㔤ݹU},}!uO/7ae[ihY3ui)_KA	M^W^szŕ/U.#!bq|7BP.i'g6CͰO,ti<U(n))Z6rvvhp<s>('h>d9&iZ_.7,ʮe;M~Uf)MR)KݳӧN(CQ]ec&7iq᭽e;}B[B]е̺Ǘ<
s<0ckSJVi=?SGaQRg>eVw?k?x
g</6^"ԼcnnVMWuV^5ݤNl5xP'rͫ7l˱y[NJWqF:Zq{RT=E-L/Gu<izx7ni,p[7_L÷5{+MPY.S:sQynNVi$::Z8z!)NYaj{HNspm$M繮4F2eAm2$2_"\Om&̺M"` k%6ۧ*獫7hڴmw-H8~(SÞ1?-4_jmcW݉]ܾZ_6M-6jW{Y<'L5SET8\49e85XMwb:EIR$c(bQׯ`iqd IeS($Sqկ'R\//wozU*Tb+ԍXC:Ҭw挣G\)]ռ7t;`:7z?_%V3iC|Әemgz-B@lRbU(c+)s5NN7(f3}WCk|M'fG\O}lU*)xHRTzYB2RO߀玼{+ <h<.}giW]Fzω<a !u%4 ljsDy8lNsVMbլ"k3U⤧%.k5v.wq/8L۬Fتγ#jRM'PUmKI*0\-|>֬o/h<15x 43d;m.tj(O-3\mu.%,}%Kj4NPS'$Qw̥OE7xK!N7J<..dzj2caRrtu
xFZs[s
-J7X|,?Ķŋ2][[闚%xZ>+0Ѭ4lS#wq|fX5J-i(%Qwےj2I'z4>EN;SaYIJᇜJ[;js<1Kz.KwL/	wk=GO IpWAHRPRnR(vq-D{Gih6G6,W~xm,umAgri^z+uee7ibI"}~~ܭ&	<.J7"yMw?97>ϋ>ž-"-3x.Fɴ> <=g]\Bg,Y Ga%W/VOЅ5Ӄj.
_6-qiS.2	K3UjN<e:788yJl?3o7'#|~#Ξ)<E𶝧|lVۥ~nc/KxaYtKSJ%ZuIԡ$h%ͣK+hўsSM%d$-ߵ+_$1{|'Փǚmf=ƛExu?iIl^.ES1~4'G7/ޒRZz_?CƍKM7^u}*MFR./loa4[]EZ#3M+X4'B2q	+Оy??;M^].{mjm?T `eYlnmnV-oqrFl%	s')AirJjd.S΄Q&O޴UniZ?3h^#WJnt+}Km\\k(澃DbEag1G!4iFORj+yI4Ժ+}ZЙ=|V'.V{Jz9RRrRNne^#_]76-xQ֭X3ڬVRBg-/ʇTjүڗW^OoOjjJr旻$|ᗈi6"֍/<e+oQL>-YSMx~=h}LƟKXVa,SUyN龚h|S^UW[S'MM\I= :OOʷzS}$MT'z<)[8Y.#)::nOݓMt{eQSE-ʒzYT	0
;1!F2I,u$brrNk4{U/h_ :]Wiujڜ_io"[CqI]쭷Q_G7/w>a;}Ut{Fk麮? {y[cm#-buk?4;_.>|fwk-xIe>%ҍHAxkuo)/6	ewzik( _Mwnz|{:5܂kKo"d["pF*ۈbk]Qjw|t#^;dkZI#hǿ\ SKf	pp+Hvg
W"(RA#rEK<KwkOcc@uwz|Zݝg5;M""Y}ӧޥWaìWRqrm?z_Nߑ['4{]_i Z?G=ak++C[Xs:ӼIEXojP}+ȿxJRe(ߙ,&=KmʪII۵E5m[	V<1oh&L}gG(JOoq3ypF}ίغpے}u򾗿s~˩qN./M5?eWI۟"b$/L`rI"
qo)6]۱>~r-t5e iQŎѨ*%[ȄWu l LsM[wB-2Iiͽl}#yiZ~'<RcѼx&(|5O/|UIF4o3RXJKMtcZQUKI2?^WWK2u#Zʔ[([5n꿣س/[j-SiW~6jw7hGV4no_hz=:Lɨ6wJJRUNWe7u{w?-[1.(NKߕ="0/wdwrl4Yþ*c2KKPh:ޙk{>e7=;i䷸1a5]3'ܣY򶒗+OW9{8>YϒqRj8Nt(ɸE4+)?ߕKcs;Sg`WNsӷ3HC<@f=HPæoW ț r׸(  3顏SǷAL>o>9iyloIqx_F!l%I'fu̚'ɢMEs7ʂrK !f N\5k/<u]WZNVMb'WZjrڬ7oL*%Ғg,Um+q)B*1+{: 64?G4{;}?OtaxDVvPQF*jNvUA3Gt-Ig6UlI;6Ms.AԶ.qk>i[%S9,)('+$ee	V;[9nb	#4q[	^'RTQN]eѦӺdN%(Y_S 5_fX͚5xY.<A/νe{gmxvP]t}WSޟ[#OQt3lR^)P¤pNiNSt8Ӕh9A~3ǜ!<$aę:`q8h9b!ӌ9yNb&;/|[>9|:Ӽwềgxi(Ҭg~˥e3=0ZjW=_ZAsqʐj[jֺ.*sI5:OٵEYTRWMŵù3<U5`,E̝:yd'JM/]D,/< $es(N*7ח<%n0fGҪg̓קM6Z_G];
 ^xIϪF?q')o$D5o f3I8Y-KY~
ZS'e_ʭNwS^'%uэCuZq'a\5\{jMﮍ#|ͱhLr*,7F]e$A~=%iIvm~'|Є?|`׽~^CrcneTfK_[K(RmiZr]̀yBM]}o>e]ZZ6ݼ?1|c|4ƅqn9{=R0C47R,[!f.,ڴgNVZǻվ[ѭNSRתv3 ֱM_Iu ۷9j 䍧|LŽ-Nv .,^X}>Ew^ 4{+\eo+OGk[嫈JnZ b g[=s WS>ż"^Q<iw67|t8JIf߳彺H1M. _Eq V?l{ᛧ*O[ӵ~Gz}ݽ<iKV{DŋS0ez\㭎Uqt~ϞOE{P&u!O.q43BdGY^Xۗ+^ 6{P)K&3RSVlF^Tdzu껟_?;|^9oGfO{¾"̚ont(|Uw&X_WPֵnã466n/ȯ*QqVU!^k[;.9B"<G̤ʧW *?iÒ鶿t:Y ho(f?cX
㩻<-~ZSQqVu_sψ$:|aZX4M#^}sw"Ӵ"#oG'w(_ጓgY^RSmYߦ~3r2RS5-=
?ūNjz_3_/:r}ZᏅ|D-~*Ko; +="O ¿Zfo[85VI}7 :yQR״JN\-{)ZWwsMec}xGi)+rԂpe/̏|e>~*R7/UR}KaNmM&HY2m4Z֖YE޷~Ɵ5|y6?~=hhTx{s!\ S\_ 5&Z>M_2{w㬐Faf2!FfkUwӡ:i4v߶_ot&֮uٗxV,"v4HHۥ*j#ޖܨRvɭ/}}O~>_9x?V{VޟoGeN<+(EԤMD < 
4
Qε
~SZjktgSQg?g4wk{ C +P-NWV"ZEqMon&I5$E]Mzci+E[_z=ʋ&HZz^7m|ӯt?
<//Ư~3?
sžgv7ڜ~u(s;gÚmެ<!v[$z`&2qn;ޛ-Mrnm_YRUiqOI^擕'cJ uc_' w_0Go:𦕤Ϩ蚬FwXRBmcR>$n*4&y>0ѡr*\ZZ-4xElLRGQ۽뿻CNu<T|AʈZ?k7ňiM78H^^9$`a5'E/I+z{4 q\~r@/ G
IO|wHq~_^> 	<eymi]_˥[Zx|=^OOeZ\1ĥ
qi4_|˄y}+ _qz_  eς<F~ d7wExX5T,tieu]:κݓĲv''ua)b%fN| סK^h_	e?t&GSPRNHU-W,ӳKk+l)ʣב}z_M/+*ԕ:c:ާDvv?y&kM?sAߊ xwQVi>=ޡj2[ g^vWY]XjJԨ<C3xZ>m	qL<T(B#IBoVMԅiF<⚴_` `)?|`ORO6I.{6v2F4JL]<ay,=sayy<}8|9B*4:vZ/=#~mI=v|g*UGuOM]CR;:Tӧ=Tk ȿ¿+mxsN-tO.)mK/7iaqܾmafahҌ]cI^۫}>vkokJJry%I>tvwm??.?b&7_?~%gY',l.͖+!Ve`=9^&3}v^眮Tj'JTo'h~ |k<1kBԴ>\pg>Uޛi*i(eŦ6fm='R\:ѧZnQ4ݭ&nZw}BQR%v|swgڧ'i%.oAZYkMv"ݔgn[XdfseQz-̒IiwWK:JtT){Ui8N:Wdw^ D ~%<'񽏃%[V7]hιd`zxwv_l4{l-k8EaTt)׫~j5iYʹ|}|eتZ֝_(%0;J&.ԡIݹXOg^=>k<i=c{=7Ǻ̾)xFW߈>j_@b鷚>uAk4١	~2s`5ME.Z~k'7m}b*^XSrjrvJoes^u||cxBۛfm_TuK W1mz]X<,#^a9+%4 E+	J8F4GޤujEZuobo K%<Ogp.<w-v?NMBsR𮬺׋TNi<z\$8YfU0fs
4)Ua
nm/
\'wʔlڒw<<1n)ӼZ-kX]6?+7x?gP&mit#7 դצӬشm.<Moo&8g=n:d֓9T9%(ʍ((B^ui%&ڍwlN/:FZsnԥyJ|:5&ҋ  Sc] oٓAD⿇-|oi4h3Y.[jqi>n4[iuvi.<1sӃڦ8\^*u/	BJjB^Q[fj#
l&ySK5k/uJM+XI	Krm$fܒE*!qđ\|tG
4'-[Wk[unSԛJ5gi 
_^_kPEi$0wNЇm.8Y1#.x
+WԺ=tyv9IJJVKNet海_#'1?s:g?iZ j>^]wayjڅ֡jg_#<ΩR7vQ'({.I*X|Jqyሧ:2[T{]Yw྽x o~"|/^:oխ<i^Ko+?jv'Lnx[Tm(ZKpmk'3+
ӝXU%V	FQ[M7?3%>[2J^tJU`4%jZV) 41~2b<_qZCh
Okm-L}\_^$,,VKɊ	>_6ձyT5)F1JӔ]oo%\<aZ4b6xFsܣ'&zu~ךnCSF,efľ}$Owv Q	PIs3PY}?Je+ۯOx|>WF1RkIrr/Mݟ$77u'Vs3.4%{X4nki@Ly^jP4ƲkcDR8N?Xm;4ZY_^g%:S%Or|^N>y8gG5֟	fRkZZrܳi^G+FdY}b릞>['?^ X1/*2MNϢskt[++X_
I< eh<C=~tխMssakK`uKkwԬl,v)sEEŹ)G}42W橉i&挕whGl|i/6׼Y)msggiogW16PmnA[$mE~UF8Rw7v۪ߡ.[r|& {&u ~-.#k5Ye?;OԴ,Z|>\Is$K$/Wg]owgV:ʔwMn⣳{җB 6X6ڬ@$G"R^2\\HX!,rpeZ*mp.U4O޺լw{ p_yS03)Fq$VWMha$wŖzŏڿ\2 ҵ}sᏋu}/Mtiot.-4?j0̺]ZI]ÚqL6PMXGZ2m,T4I;+Acѣэ8,ahfy*Rm?~ڊ!x><6yk7R^Lc*p!,vql$CoQ_<=`L]FDe4<4w'm[gjqR	)F6ݢ'sHIk	9w}
^zfpIq7i&ｽ,sSHITe+-3s徇3Tֳ1"T4{J5h56$JrE?M#,*YAӝ?o*sNʔ7gu$?ׯqOfZ.yZq{=:6ޖnid?fUBx;|Ef42OHto-ݦmEk#.>eDYJJs.h]qTOIs+;RJX8κ	uUo+	ik2|/iyqi2PO&^sZ99`H3'ļ:\Ehɩ8ӾrRi4eGW^n>1yiT۽HF\J=t?H4}	xGEm	{cqucj<Kg\O1K$"	f`p1pcP8VP,Jq*k8:Ud2JKOζcEZj|)ÚWSӖB+oݓ\G8^g+~ kN_3KQkM2Xv˲n2&h/2]IA Ռ%ݩ+$jOCU?|&4<9
XkDim h:h_w~ɜ>yN4t:*QeԒJ8l
u14&wKT>9WMx3Ve <mJL$' xJQt{![OÍv	,6:ޯw}6s\KRþ%28CVq:g)5?F)pn	r^o{sɛPuά9(s4zǚ=ssⅧ'w6a7zϋ4xVƝhֿTRS;뻻u(K;럌k+`+/SQ԰Bm4jVE(axK
ӎ䃼b?Y	|y[5P.~Ǿ#-	<q]Aq+#oJQ`K/Soe8xI2y}"{ūx_ 献4vo.tW4ɬ֒xʹԵ 
2$rmxdhԆx+Cuo\iqFiGG7(PjM~y-s>,uImWdxgPky'EXGUfIaqT5%
q	VҬ(''R2/z|NI7-קRZru
dJqEJNQZeGFr?jIV =]ናy($+	7R~9z{'g%jK.^S ]?b6B10zcR^ϯyJMzE@%O|Y fΑoNltF/.--м_Ck,3OMEPS gc)%ݣnN-wo4fI߽u_S?O6%>$ʭ]6-Lۋ	H׃_Uvk;l׹u0V~^v{O'#~?Z
,.w
5Qv݇po5/ط)f/	?-Y_mAPU;E^WOG奿1Ze/C Y]&oٓ-v}Okq*Oq{4]H&o+Ļ--C!^Ofe!JqN0:R}CʘNoqrEYY6Wi->ZbzEMQE+TSL-'+qny#q.9ӫRnJv$߼ YʢS%(%WѾ^}f ޥYy5WLo]JTMVr})عkUNSQj-)lw<n]VBhb"ͫYܷ|a{]<kO{y{qiZե=M$)rݲ$>bI;G'R'x.};[GsY'B*GukroG} vG-o4vRo4kkKh$uOjAIZ=-drݮem?=?;3?.Iu''kr^-kn=6 "wohv&gtio=h%[c
CJ.1Rz׍bm5iZ%.MSI{I.g̴|w¿WKI>=|$
a>6|JѼjv汨xopxDм7x1[xâũͧūKdDJ[5)J5.EJQ\12էm`9^Z8MEUTtԒj'NpNmg/xOÿ|7mj}_Qxsx0RS-o4ִ?_m.VVu1J)J
ɫ(J-++])7~30X>_ʱ~!FWpOOHWT'Kٳ7YSԌ ^d۫~zwRO?!~`9 OT7<֤rVO{zg4r.㿡]-rH\Ikב 3 }ڥ*_J<z{ZS>> 18'
Kj/  go}T>_%zk^>Dx:MI</>X+VP:G:Ӎӧ˳'$ڊt?x 
M~C/:focm^WtW6m`ZKGtQ"i9; ՛$m>xSK$ 1JWpVmǳdAkk{GNs RsM!.L,@uh7*Ydd)bs8OjN}p<=i>_ՋO9x[D5
5\RH2 ๶R2%)e5a[ӯBjӚ3MzliSHJHKQi I/ Qh_ h [_h/ 8y~-W%YYjZ/5qԬ5Ŧj6vMk-p\0f|b4iF*S:z#R:U8Gܿ"y)e<MEv_W:JRa*U躲+|NU'{M>K}NFx;^=:堶-J<ZC֒Gy ϳ'1'Z);ь9}ԽS->i]M;Y RN59~Ҭd~guirI8iI2'/H$1hU
"d8P1*p 8fxeR3u$+M]_[2)FY:Q$8;mO*O;L=dc0?pɊkՏM{\xZ~ ]lcg Vo>|~ _i?+:WZǃ(|*BZ=nicyRZmAӄզO5VTf~F~AOrOiWu<zo4F!eKbn[i)r𓯊TRnz\彷?;oGsM{ 5;ƭ%ZXEuocaio1aKJ]<έKIZk5~$S6~oy"9b6uVPp|8춳 ቍ9OuK1qasi]?C O[G\A?&Yv<ɰEE"F.X\67R#C)kyV8,=
gCʤiE֓]ZΨz}ȑJ=̄:;4j|Cʀ:a)O8N5 T;8Y]̱4*ӣ:5)ׅI)F44eC+4GFiJ>;av7xO,m |Fc!m#ŭfh7umpK u+k٧[k?Ռ֕]ybҫ7ZJU?gN*pRK
)ʪӨ0Xc,&9&lAvvӓ؀@yJ5%%ӌgvcVN7\⤯z~R.J8Y,DU9YFݶW?mn_ G[:e|u>xSŪhz_{+{{=+È|67Vu&x1ҩi^u1:25Z4SV~ͧc8+¿juΞVq*MF!B8G6,LZ>~+`{O> x%M+*u}ĩ=. UhԩQf+Ҧ*QСc;XZ0Rrm]Kp.GʾcRrZuqb'N^ٶ`6~$%|c!riTCi-tzrI=>}|>Q Wo͟ W6?|`'v.qWشgeMGJApwDwkp^#'cDյKS+pV)'_l? W3V.|Kr~x-ͼISNmqjnlom~tQ8U=:u+=5W[[efG
E{v>6[|/MK xCþ$o^]5Ƈs/R|UbuYM/L g$JtۚV{tk)QW<dI'%5^'>!xZKω5+[Y[/jZj\_.onfkF+L,WwQK}>
r)9KWMЖ?<-2Cp#wu!ANv9ʫ @0~~FP(s&]6W_Ou_'VRoKZr}	0O]|Q=F|+Z5xjȗ0j< |M֒#K	; iɟE:8rZ9Mn|`."F5ԓSrWi,_Q
x4ցJx>uxk4[[A _JV iŗl߇xPex*VW|좞t~CKN.:kU9Wgz?}G?Z^WRB4BNE?䳻{imVӵkYKeH.I,M*y)ԧR
pkZu|IY[oB9c#+=s\cqV}x{}hD|{s	[oW@:+IVH/(9DpxjmFԥͻEI~,A[R}v/G mgQ/~!x9eX[KyfҼ1%|-/oôWs6п?*a\~M/ _GY岿_=-=; I]w?g[[WP<"dVpηvpd1zgeE!
*3Jh';?4k|?\=hʕ>_ɟ_Nxgf|t~(V^	^,gԼ%໏֋-?\.Ok6^du%1I:%	b*E$Ҩ&W;䋕޿ڟ^SS	_3W({*q3b+Νj5/NU<EHP9\];2'{N~̟ J~О)߇yt.柭iG<֚>6֖F[dݣjh\KK5q8zܰRtn6,^	fQ8GF0JwJR+ϝ9E;=cgxo_t Þ;	"i^koXt]kZ<3e2\<DZw3W5H>/sV*qlM+YO4~IcaSʪ.eչyuWtӵ? 5}o+gᏛi"@N3gFs0u}gV[0ĹF6+CK5ͿK^7š_.en%~F#' ds
1tmxY?j)-,mhַ6|o?f	^O-d5H$p*?'Ro(=f?t WK:V]\~ GUk-.KGi+)Ws_Y6Ho\iQ+qJ.wAfٳ3QKDDn~UT ?I4+_!FK+_SW+j2Ɨ+,Y'uo('z5mSO[mm=RՌ']W~{z^?:[z7NUv!cź_|1IY\\\M>!@[KM2[_ielJӊQS2zt~\d'R[*唧7k%̦wvl[,7 ~ l?MZ};]</.ow<K┲ nڕƟ:޷:2OZIجLeS(SlQQ{ɾUbvwg0ܤJovϚ;h֚* P/z\]$ 	H
>jΛ.{è(.{'ҭ$~ON<*bEKBJyh~c$WhaZ	ϙ3n17-Eegx?Or9;e.㰸'Ffd[eoaM}ʦsJZv$:kOh^(Tw!Jqe'GOQND}5slUPw:?}j*WO<5jIN6Wm_TTa*FQK(;7o~{X־(y<yMʟ.K }PIs/0MmNiU	Rn<ZeUa_76猒Kd{v zh@ ixg[o?~ ~&|B~ͧVqjou[kIuKR}2NL7?B^̫RN<ҭR
U%nXPN<KG.gn^c/177I$0T9Wi0f-'<C:Ě_ZR{ĺ泩<rK`gS	<n)aӆJ2I8()>WՑPar)KCg)su%^NrnRS*vnG'E~(|#iG>m7:^^xP[)KHlm>s(Y\^_EVYI|Er!{eƥV\IS'JpD{ZVѭu4~]mighfQ/l
'v2cnfga&j[{5fyI%I:vm[jS[?-
e|k~sf(sAc?ĒPwTmkz%#TRI)KNjEnE5Hд 	VXԗc#m~&׵Ҿc  MsXm1q*Fr5ͭT)Bo5#"5 rSwW{?Xi7}t 9~[Co&9#$71Kn\Km̱gl]n#5%8Z4|ϋ)M/{]^ޝ⻣c{sut(.uqyikQ3,M<s[jJ̗f#'I8(ov7~F{xfln7OBl+ZWNW>e_߶t-]g]|Ho5&_!kPi<7Ke%ͭyn
dr0w6q\)Kz-ϧCͲ7F߱:!GݜiTWMM{N<h~&5OO/5aA&,ǜg,%J<UZJ#N[ƛmPI|LxV
u"yNomV瑢Nox#G`2=kۃixrB$ ĸA\` d[cڥE9rI^Z[S
l> ^l:ωoK5{s0<#k^*Zt4jSqi.iFQ~J\0MO-МZtglY62~;	/cBVHʚ>=^ΦOtwC1x4jH7l%J۞e(SK{s]_p"YYbХ:m)F2mѷ|3G/48iegŽK︙Mq)y$g5ӉT֭.j*{{wl$cdۧ9^[R'AmK-:9cfb
EK+Ij,ޟ3hqxK
sBt꒺#8T,qVJeng&$78#ӷ׷|-jWR״?hھ|6M7[W&!9t*΍Zu`ڝ)qތ_I5Cwmc]jXS{xVH~_˩O$m+NkV /rLqU=aF-9ɹO^Rj<(e$Մ)1kVw{9!<Ѽ<74qMC+k$EX?u V|¾iWtuNTw3zueNI(6vNIJTϥ?!d_5]GWZ;MR]R&$ze.'NrBM_LI]BTSTi)˙Jmh]wò]Uш"һԜTVmJ7|bǾ:6qՏK܆6jm5Z.b]*+ڬ1~yrȼjJ-cKkRRcyoIjӖ=ZnsUͯ~	6U-4
KGuKŚxu&Vחj᥹$$/sWuV:ᇥRN1$v󸮵L?fNZRZ)ԯ8P*RZԧ'Q)F[{"SGFHUСrL<ç%ۭr4`l\8TTZTq$^Ji$A:+96'|7N40okZT0pQ{Ք0m4c)Fǭ)3+JJ~*T׭.a_բRPtkk®BNq]O^>JRi+Pnh w٣ogVrwjNiu;kDO	k5d2ȑb)rѡ> Wpg #?~!iWGDf^$[iZ՞sa:(.e[;ua&-]ihM>p#Z\"R];k{/vPXf.3;rzffU -kh2w?#ˤ(p b}_j_ٰ|a%fc`XM|.4-~,|5vY V13I4mtV0UsTEw}|K-m?3?t3Ğk^>е_i" I5m?>tĶ:DwZqxi[h-$M4TL;ҽUџ?|;IJ1yT9\]HNI)YevOZ:P<1_k>>s?мMwqxs	uY񗉵-=B^zNo6X&u*TUy)+qQZWת9prTR-oM(ikT{yWO|1~L/x{7)`4ai5Sot$=jӯnm8n#աNiźoMFi߶ǭOjb!Z	n)Ɯ?qnҴn/I$\xSdX|j<A|W ך?<InnKFkoҴ{M3A[#Uѵ,մEv\fYx)CVdE[62ZGGn.]!<5JٕʥUnXUyqX9RIJ< _E';|?+Gׁ+k>-kswjڦohocCbɗpbQ:ۖ6\%u,Z[ʭz֪9MNRmԩK7/5;+=h=?J-4,T[h켶扉Hߡ
VVQIle~sTV\
j+]NMrR};++y 	7}lǙuR{Uʈd~bЃʆF@^1==SfIRnO͸珮}Tw#>k٥*z ˸wTy5?/)u t؛Ac}<)N&;	6h!Z;ty׊{o*_x{V(o^?kV1}g#v?&ߍ.+|W͆\ԧT{vVRnN O4J*Sq	Tjif/STe>n/dw4,XiEihie
OEi"UWxQJNo&E~V2£<;bNF7,f=񳅽y_ _hufaZ-+Oy4z6}qW@գMX Y6$K㪢~BRp]u;y~m s=@Z1et"LSF< vkg> 1ޫsGn=O߰86v2˭B+iRٶ<E~ȎX$l.pnA
9<*pf~בIIEž\Z1/-[]6hmФrFǄ)Q|課InNnee^kb*A^f)u~^M,SχM~O;-ϟk=[^隅;?X5('>-R)T3VtJJ\ЩJQnR:nTFT$n0St&Tvi)I8T8FpjQw9q]bQ&a&jkgm,ԍ|#M֤ҵ(WN%Pxh:NU+JXLD 8OS?md*pєgUCέE
>S<8GRGC/b9a
TZ&F87idF,Ulq4j#RB$G\Ttv8KBYJv|sRRiu⓬E</)8N"!KSR%I4#N41&\mfMS3Ũfm%,'{Ҕ\Nk	IJ?_,@mBB. 3t7<UF<k]N*Z-Ŕ$rIW\8#@*GUrY+5uo㩾xOL,4)gjj_a@-,}k(}UUpN!>hUQXD<55&5"2ڥ͝X3;gutq|${.k}5卝c~k\.xTNC"I./6gȈ,PBS/_CXJ%}o]<	u~_g7ύ>_4jK|ez?-ϔv=ZPfY,di]-Vex#+BTQOUSIt+EPw Vu)T 0yv2je*㫬JR"2QPjB:.¶N
U:ppU= ^koc[x5Sk<eN; ăznM7RѼSƧov5K}{Mu=3U;'Vpjг7IQەOc8BcCt8 9Nic_OR2X,>+50j.RS<,}iՃèե	ţ/?ßK<M=oJ:/:<av=o:՟t;\5ٮ["ECx\6pT5FF|\,aJpu!8җIũTiˌp!WOlf/⪧Ni*cVZTUbh'Vqw:Qf_G_ ;*3}Zm7:7qO.wpj,)<Cx{Öz6I.gӧo;1|;cquǺV[NCe-LvaKIʝH`J8n::T)bk<g, &T*ը}S	5 GZ*Tt*VTVeR:1 *	4if+[.<uYG1]
Uu̖pO^ҜMGYe|gƆ[d~L3`лKJ7TY=5LDܡpW̞/(bV!bZ m*sUYJsN(Ҡ ?i_[7ͯ/xMŞmU#}[EZїTٳ$K'H?:zX՚Vu$ŪqvmYa3u)T!MCB%
a):9M4+.[O5׌<wmliZcbLnHv	9e܏Svo.Vs5zux"FqX\w	^bM*3'IC"$q9%bf\g'o	>1|f Yxg;!č^$?H4H5;* Q,4J9b<Z (ӫ(/ݺRq8kUۅqg]-!9[_ڴ hn̪dmmuXZ$=.=K㯯NރVWMF[ o\^B%>AfyYUQЖqk7i6߾O$TS%_oB<}'?W!a4wumf&OXieԮh
2op2]`kBi-rE+Kj=gc
rYM+Rz$ZC  U;[	DcW=/M|8tOMl%֯ mVx/\<&}F_\2"U
N	̟)UQn*i+JWN*yENЊpR:|2䊋"QuI/' ōcQ i׶	6TYKw:=siv"vt2ª^7sgfrB18\7NZRQWh˞vii]:~1=q/G(T\~)SV?gGOCP1w{zGxVB@໳VM$햡}QӮ,|E/f-0y"Mr/m
)Qm5x|WM{.Hԩ9t껟sVm<1s߅vVTx'ⷂ-Uc_&[]&jfSJY$d?˸ҥSII;4oZR،5-"|3|ZK~~m>v]hanmcx$Iadh%rE*2Ȓ#22$KN-I$M4O[nh}3ө9^˃4? _q 
Ւk3]C%}]mr>rKHB	\kQNײK-Ҭmp3X4Oy6]֬P\@2]"?( s<L,\G5dﭺ*K+&oM^?-5|LEZ:UIa^KFj>rC$:֗$g(."1pRcϚU۱Ǘc9=z֍GS4e%̛OߪH?o]++U g^;֑a>>/h~4#K|/b궓on/-6[2~y;`{¥Ƭ}`ѨGi,y]	kR>"8*9#7M7
Wkӟ/}w[çm j:+׹I[۫>mBT;.f7gr?ZQR7+F+}nSAiIcyԖ򜬜'g^1<wG1,ݴQmzU4K"H Ӯl}>Yӯ%]^;(=qӏ"\vy1sNg);NM^<?UujfӍ,72TP[ĝa6d;51"I>&}&o^ӫy0ϞTܞm^67!`6VZ9#cYHp{}-4z_feM7(ٵy&4 ~G?ƁϨCk&fLpR;ZYeXw7X%˶퀜d^ui3ogUd}zh~~^2<iZF[UO&K];+
;Y_+#E^jWƜ{uwKO=tAe7Ǭ\4.NQvmm%گ[?aEɚumG|SJhYԬ{K@Di`Y)K^k]ӽ ZU(faBZsI/qѮ'|saWSO/]Jqnmx?/fTUӞmj$kVY^OIJK^}:|+ݶӳeW菊  |[č3/4dm,--&Jfm/TQQ=ŞVpib{{]9J5II[~^|7cʕim)g+%f]?ixR2 8>RGX%e5eg~7ԯ%isjk>[TheMG¨q[?:ڭ\rrWkgzrXO]yUo>Gb)XE(c9f^~ʏ!qR=^UK^idm/+>fN!Ci+gB>t7BǕ7Rv1qۀJU9SS~Pi_JNn잱rU*FKPo$]o!ज़K( E>$wxn ͟M[)ΡO.k/H'Z9p?jB?iN]3s0RQȥ)FH(sB&:5rZ*pTpN&b*qf9ҼGKE/TdŢ^i[d-tfWcyY%B\|JOj>NOͳX5N3V#근M ~yEv_}_5k]ݽ<dzOm9ơt(	mH4M-Vr'+jk3o}[OcYw:!}2#99?1 rqUw9Iuz y q?\JjW[#Iq
C>\ \(4{DmmEiB2QJjB2[wܱel^[3 _6Swwt~wC#|fy,,K 0f,A'2:)ae'f7 S^4&hӨWmv۹mNFRBdO*<YR灔_J0^}7<9[><uxTK4N|I-BUƑi z|lկtm8,KoUGgޞI:3p좛Z=Uu],<*+Q*~o_;'	[ï?|Z\vicE4;}>QaejQEоKWbk
eBub1jqOPKhtqz~\XZTڦH	%)I;jV{=rީ{4ć12iCc!Iy`39ϱNG޻kF"
OWݽ>.mcU,7O0˒R(&6rc!&blp]nvvD#iYrį*(qW-LD'f9Y]m<! |=SI4x]-{PҴKmlڇ-/pk UV*kWM6)Upjj4ܜvNab#N#b<I?m5]  ?~ƾ񖳧k/> oo.G|%ėuK\JZ]Acg+_Fon`o3;<L-JTnYՍlEySju:Tj^4dܧ8r\27`0=KueTB~E')Ys(NW_V7oK=kq[Y}5oa6"{QխHbI-Ϊ|P
Lgh4q<#F19sʤBZtRsQhmTh>UV5e:iRYʷ*i<	MBr⢓mx+Z_Hx\6K<VfyVXRmYSjޟ2(ʆS`9\eteutBWR}ONWg{f8MQQ*TiJҏYd{{x%GƆQ $\1TrTrOrd՞~~w?QvjZp{%k4I43@y#)k'	SsZM7tVkjSOKak{IՌ=4[[ʂէd#d!9hJA FVSN˚SM5Teg~w^S=ַMOVkx4k\ѾukQ7f]FHm+룚aj?B^[M&SJU!IE-Ԗt:GM_Q/ٲ]G']x+U_<vkuhUO𝏇"θ@~dlO,&3Pp4V.7(ƍ8;]Ju(&Fߐc<VJif*XI[rYkfNZV%?KC7tOxz[i>ӭ46[ @I<pM23_8Ulf"&UMۚOI+[$!ӊZE$mg> :oû?7zeey[i
ω&ݾo;+;#zjDY3LJ5'N,"*qVJۑuOGJlfe<:Uc/gTc-S;?O_w4<=,fzuv]ٮrӉp#ؼ&bf8z:ا:u(՚IIMi+i ]*x*4N5)QM47$o_?30	ן|C6-qRso:E֓<-C*3Iiqwe/ZOn<Pw+BW=tc%ʓtz]}wSV"kxSvfMO\iVPam#KB&QS`91'VoESIimjTѫs[m?O/od	'KYƿ-./coSxtɣrH&ִt,mX ?:j\ekKg~v;xFi=c&]/{'3^+Bqre%' 鑞 {WN-M ?OCK&mz__3F;YTKO8t<w?J_yo2=y>'9&eK	[t݁&h nR8r]s|_b"[變1+	l3V
.V+w1sSQWoz2jO+HLxKּn_ٖ:qڙc×0%F/8R8Vyy]Cj8oj:Jqy%k{};kUCD	Ю-``#V^%ַ0m"Ei-sa9*o-t}Ϻ=gN(r6'hN;kG_TѮxs|Nb?[AԬ[{lBkz^=Bb>)9?yӋM*wxΕ6}JNV+|]7f%<s99}[·~![Q5OFizK٢h-AmoPxHf+T*.1\~l|_qՒs.dU{F_#g7ZoY̾=Cu%ܲ].lٰ֞;$?lPXZrK0 YPR4׽ҳZ4<WUp߻+=RUv5NI[g
֖#_GDVh 嘩--RQw5cǛoOxkog>t'Yž|9+ec]kLӒa*Z{"<ĶU8⫗UNJKN=T14dV{&py^ Z~]R6#dkm5@gz?*.»?\?| A+¤sVZkt QԿ &?qE [㞍zx/vLM |^RKx|3 m"% "cƟI,e7 ʞ{גMkA |6uBͤ>*(^|U[Oޔп."W;Fc5z峩VלTe9Y+NvRvσOAvblIlNFFp;t++ ɮ\6{y_OQ][(3uBG@c+kMk^]/f>N~y|hE/5-Nv/Z͙pDW}ST]FwsRaV[$YD(ū3zK!gyou!u/-_\G-]\I"&r#O.[[/eJ4TP$KX&ֲ`|Eu%-%--Q;X.ȯg()|`Mxi{ͩ9Z-[[/+CT;K|Qbt)
XZnyX%hi_F7,^F#
R4ZOR1QJv\J:鷚nyGkinn`LBmG~llm^^6-͒F%7,..jUey)SIA^m8k%wz;+&թ{fc~RWzY6-a6ugo)xOorŰbre7do,WժԌjUNSQeRQwikSZTrON=-ufM7M/?<obΜ|[m^'W]iG+[m3+<6,BYn2tRjG+J3*QiԨFQNre즲Jq\U7]'24
J*<z)U~.5>ykh|S]GU,IoMp˳Y5)i#q^-OyuôՕ\2S旳r((9~	&N9¾[9~cg:PSjr<'<$ZuSOG/IntMk٭ŕJLQ;JI/8dr?/1#*c*ӒI)Mn7fDef_W5OF.R䏾ʕlZF+  YG9\cSFqU#8Iti=ӷS	[Ji]>zlE!ѵ&c A,-dvG; nP%Rd;~_|;(74/ڈHXXx"nu=2ywVniuWb8)ʖNۦZ[.1w{5ekuwGI4fU6зbF܆ku+SuܸM|I[ kWw\2Z@Y[(kn'O:teHBwBgס":I4:Vm~1/	gǟ<=φ<Ux?>0ʺ׃5\֜M[uIn ux,u-;0؉TT۔ZRiZ+ D8no&w᱾3_YՔb0R䔽r	BoN
=KD<;+ZFqx᧋|⯆_ml 7-yu]:+~vF;)H`s
ASqnMA&^4UIwu{_w\yJzx<y*R*T:Sxx΢*Ҧ>G헇  :7]|b-#׉K=UWᶵmY/C}KϹv_|[Zh5SD=ܰ/^O8zJxϭ0U
Υ:s4+N{$')N,e~ x%f{L^eUʌՎ*F6YQ {!|8|Rt?x ܥ"i:7FbT/ÏͦJZcjnqfXСʪpkGriӔ!Qѝ_#iҨ׫UJt1K>2_炇hes0;J'N=h{ƥ9AƜ}ʞӒo*g!͟?~W~%h į	|.i[IŚMKFRlqI%|#g_˪M}%uW,J	_\9)a0S`#*мiSyRN8SO	=,ǅ3
JCfUHqyrs(,<=1XJhWSsSRߴ<=~?<M>FUxSCt G.|,Ӿ!jV}+43]5Z1<MS9c0ӔL*eͫykE {zt0Nxc%VBxt?TZthʼ*N?~(WLvqi5k-u[A<;gu]KR$Z[io=OVaofOUjpúJ*2eV*nMFO-bHc#,yΦ_MP(ӌ/gƌcI9JԣkEF t"(l]*KFR7fY^(}OP72#Ft8|1I<iWMUNdKsćÿ}0~3#ԙ"KoiJ7nu]3L~eFҤ^
ՓV~~V|IcMYcb0GGLu7VjWyW}Z 2Մk</cMvV魑ծV"b3+BQ{ ]|iv}?ܟa-xźOe9K^o߆_ogƑxQŐx[Ě._=;ZM5${&?xKI{=[VZj$֨kRPV^R^	ZkI$ڽ MHGd|؇?+>!/aDMj~ӯIs1,u{K<a9c[-]´'TF
wuIyީigb2]Z	iʚY/r7#NWo%OSoƘ~R~~׼}i^61Mm\#44[]G#Z\ ;'g+:z>imݻ7k'~gUƼ$"ZWqvsyv{,?/KvM?m%7<{xci5Cchkn_k^<.a`ቦߺgNӌiM'{BVwrf頋L/i^ 𷎼CWl|shvDZAe{Kc kh+#֭/XI*P[No}$ۋӺV4
{ܽnk]Dkoi}g	{éxuz4-毦^=;Tr<"E\Nui^8x/lo՗-Z2+ЌՌ6VUy䭷?.>7,49}_\{C=zq>W ?,_x/GIR-4MU{YS-]Ȃ]XR$xGa^TF4RoHovMy]I`VJc%=}~k{g~* u{vO]LG 7gҲq

;5,4DfZֻ=tf8ΤRbQZm߯k7%ݞsgQZG+n )|dmFlz?SSm٨z/i>(wᾏ<_e'Ė+_wºCvB%I5+:8ᅌȠ|{e_4	Z-IK奿?I(d l̮*׿7w|W{쑋ca\,f]CQ{[MVՋYiw˻}fi,> Qa0SW+v}<	Ʀ7k6ROrnh ?O^hZv.D:ٻ5k&~S/J}TNbeB\ڵmwex8⣲M];~6ueq[A-f&{NŖZIn.t.n9-Xj:YGf~ި%nZBMT{'U[ǟuoֵ;ᯊm|FMFLn#KK4co?OkrI.OO6XBQ惗.뵟t|\kIWڕ:Ҩ(ۙ4>r񦻩xLXOK߅L6-OٽҮ4/Zi
jQ4.NqiI{IT¬mk;~ZDT(ZZ+=ZkWeJWK𶝯xj/|V6!Rɢ]hYA43Bnuc1M85%fޗOes˅RIK݌mwwdڏ7p<)h<w='EҚ	/.l^=sC<VuݽIpJ"FѤԕyO^kQ;M)֔J;+tND𕅾ڶxֶ~'-n T<f^4EY;Qkzƴ\ `a/R4Y&䒿|m=%7*~Ң7/$myzYhqSx;GχNM32]ZfC^&Xht#5zޟqkK}VEе=I*6՗5E뺿<N1λkQqqiZKV?jO}+ItjZ[ZiPKC>{n/䵂1(m|K	b2l%9*SKڭzk +oS\ 49eXj-NR6m׌ӽzsZ/=ͬ:^Ke3='5f`l:20FT#+eC*:k8=\pC ȱ80T\*
RF5&Sn+s^ɝ/B}GR>ڣ:u{A|.'(mM_	kdKw"Mjy43del[8b%^U=FZ(gP|2:q/k:ܩVߺ~4i 7|.co7h^ҵku}:ik]M+I/[tY Ap2:YTj`&X/V^!'TmGyWBԥƬ=MFo+ssq <wnIv f-@&I=;Vq,[N`{~8
*ufݣ	K9TV<4\7G%b3ZT+IO.jqd0RR\AJ1p_R¹[O{Fd|`;e`/Sv饮D] ]?XiSb),|)\2xKÆIW(bT16!~og	Rӫgw̝vvХefpF '
PlBv5M.{޿=w;=?N/ 4J6c1ZKjH8}J	%YbK#Xeg7}b1*:$M˕Z^U5K <;'kYvg&V}_W>T]e@B*dRIDߥ~V?U.R88Ԝ-lܤTzkuq kψ<D|]ooOkqc6ŭV jNѱY涙V[wYN?VVfcuu%;s%*)֍L>+JIU%	I;JI=#Ė^)Lf]`y~x< e3,$V8:Q]ߪWC*JuoOK(7ѧ]Zi9OkJo)(xCǿBI|ASWMeS¿"v[ iwWVgªkKGxwJvMN5;ys*
88|VQ­Nx)Fp/g%%	SC>9E:Ct#XMƁD:mVv6JևJH&ŕZ4	;X,<r|4#UTbrնۿ3n)TS)F3+ڽI%d)I$I"O"qRi4w¸k3h],Q?)tA_c)5'g}쬷ק,#JZkno5i9V2\^DZVDCk,HTbAn
'Wئ׭%AYE([[7֭-~W9AQOW.O࢟;S࿉~
 [N ?u.k%^-煔ۛrf`q|sĸVX,vTR%MTk%'vޖTs84NRWٻi٦_ؓ_ kOOV \Ś)uߵΏD[IHZjngK;5Qs|7a)C7U%3*Ts-.y)(i4J1~󴚑x+̫QL&QjrbyȝVO	Y_Qn~;{iᷱ7t/X6-xӡ\M$ڋϳgI,.kQSxy¶'B5
NI9Wy'</K\_}S1Yy`X:i(ΒtRpPwSiAɯO[>/<K`5=
mv&}Sߌo$մO}m2d%IBGGO2TpRbZ?iFPʰ8|!VZҩ^8Z|vj<yw;X
jksc4peEgVze7wMB럙~|(+?i4k-OV/5of{s{s<M,,Y~{fY׳LMXҜaN
pBTcVO¹>!*UQr-:N2\K^6V9ɶ}OtV8f.-dA!$Nb2Q
!'ŧi+Iu^iS  _xx ci[J8i>is64Ov8ǥ¼fpe
Pz]3n'{JSXt%>6M:mT1(G;C|3\ܙ?nk(izvqV}{}߆_-89<@)6ndk_pGyQN|j5cJ-rQMZ m۝[]Zˮ)++ שOD|2¯sEt3,x7>MK}S^Kwmqso'ƟZKx[G	$_hѷ/\-8fyMg
v_\+号JT՜LVRω,)0CiO_OxΓEZsWV }?onZ5ZWGkClKj^{f{DңT֢ǓADnr<_ZϓཤpTe`}
FXTW-UQ3!f2\E
^ԯ
+麞u'e).IFO?hoj>c/mxoMCOY|F)u$iqi' Y.lR!hHZox_X8TBө9(FsQЄɷF&씤2vYp<+UR(ӂ*'YƄZPqM>Ѿ&|SѢ[]7TS>J.t3l"+!X.3sl.^KJЩV0rUUOdw$z~fmυ1~7N1jJ0s8I.v%dJޛZ'ᆐ{cy_Oܓ{GrQo_kOjm'd ^Дi*SmTgPPs7<;+uew87y%5reJJ2>YCcs֭oo_O(6V#{jvA\^Rj}=74-XT:f"Z'&bO;sO: !gZiqA{57CbLtY5-KTl,BWW$O"DgtPX|?{ZJKVy5} y/k~'_x44OizUzcllum:Lil,,#wycNpiT7T6{zzxyQZIyM4YJ<AN}ՃV-;|$ ^{]NՌSMf_* $ cN0?vǮG_Z^KoԻn׶mޥ2=3Mm5+$~gڅDbvLq;h+WrtUKoDK]Z4||Dꗟ_e߈ƥX|ܐ@7/m//g:Ƒg{> Y" K=!YγR%yrE'nj;:QN24&UhRN1ni~kmUiIɥ5|Smſ|	/?O
{Q/]Kůܛjwq[}SI4;=>NӅ:eMoqw%Kiuc7$IoHȸXnNeMݽmZ>g.ľ#=r)o\nU`#@ڧp
6/'gkߢ^osLmƤ%˽t~ϰg).5j0/+@wzM]ͼ]Mմ+]Я4kuzGԄܢҳGjV٤ީN)X2StRPiW6;/k$ixswxnIH454	m-Vh~ǧ[p-
JEuՆJZ5.ͦh/ҬΌ\ Sm~~ ErǟN:6 K-|]	"Zİ[y0)|[VF)BsvPPiWOk(BZKsY;}<h!qíxWSmv{I]	\𶙢yGvln_,Zt:C].>9^Y˧]R`Ww)CB^μrա9M:vd0%ĪkteJJ{9Ҩ:]M$i.K/5O	C}߅|AŮޥxR	yͧKi$W/,eJI0Gcr:ӤU(O8ΔԍM7M4g$Z*BQjQSN3RN:ZI-5>$ Ks
˥A'eZ&kmaCiցx2G4l"|C뗶,p[Xjؼ%R*bU^UG$}5T#	^	K5ս3:_f/ڴc俉~#)S>}*;GS	haFt98Hln[C0![-VnHuQZ]wgCF7^]/5q(
O9Fy珗pkjpdρ&s94 z_$UOT |G/xOTukx- Q_ >5}{5ܬtɵc9JD[E$OլotTlY?7 #_?,xgᾛ;HE8gsĄ@#M`(TN?v/S>xJW-ע =?i]Xeekgmomo1/
C(=Tz +)7m 0jZ|ڭpqG 08;ӚOȗ?1>)E~ywxþ:Ǎ"B	dOL;ZL1(Q+D@8Z3B9:x6i^y}c)(6nzo5Esmyq`^	kwdoXn"4p->(y"^zԴ_"I'i%+YkfRRqb>&<+ʷYH-.br0SZƄ1\mM]72wu_KF1KRԢAo6m`բwXO0u$L[pܵUExYVGލ_teG4_m_l~ƦO|mnFuHM{hٍv_aCaNeԊVPa"uo~(S7mLdRI|V<	CL'ZW%>L|37-[UGeH*̐8hPDo#@̾nSGj?uٹo4^XE!$<fXzINjjihkֵ>7cyVH̙e[wGV,!	I<}zX(:#)FF0von[_nm[Z_bV+u1x'O݇6rl웕:+7~xVÿ?j8	G|DWB^]'6}xƺay{o$4vb<<êxCˊ8+ɲBJ!Q̱|&s<[*)JQ(h:O!hB#N;as4jakנ%q4\ib#+RďΉK}Z$Vv^`%8̒٨ 3Ac*q#+ 8C0rZhraEשY2Vڳ|w6o5WyMN0rbd:[vE{]S}v[.RG/unN[U[;NKKuy7P̰O,t0JUTܚ	-VWiE򷪾^a:-|u)FvJ|ogfI!j5ÏI*D(摩h{mǨ8U'QʌEQ^WJJWR\-ޏv_ªT,y?˧>2_g;BYfY}G6:mht"&[<A|/om#Dz(\/ݍj'|\MJ%Y?3e"#qnFFA}׊==IVƏ=YbM=^<r9;@^M]&(_b} ௉<okw='⥖E_DoMRK[o	GOsj:db5+;$v]Ppe3=\OC6|p<K&T:-)]};AKx__z߈'j)aio|=|Q;M^qk~#̿ZT:ծĆ8W9^yY{luF8:ӛ/iR3*VsŭbiY*;C
$x^-F,ٶ-R'
Q^atb:3P4/$ůh~?e_Th[~*kwF Y]<){⹵>RZ-%ja8S8Oaka%JuiPRBVV~h9EJ.<a_ ~o=MJiZTB]'BS&~.~O
?GXœ~<mG^%,.+/wkڨɽMl-{<n*8k4m`10F(թ'8ҎqjnLg$q^3+<FKOJt+GRJr)o~sSo*4O_>-ϟCǄxF,~#z?t4WMhGgx.}67RtvN,Y.x|qv5νYUQ)-ZM,Sh<&O"ͫe\1t2 g=:IӨSFJN\Dg-Z~:7/;ƛx/ß~-kmm]k}J>#uM:݆/AcmҎ.."UO9o`JU1X*Zs(SN4MU7ϏLt<7Sr_YFIae(8՝n\th¤(Bcm}.f};Y5[ \6s3dENeXg S鸷UF.V+/A{"C	թR<f*֏J	==|#<MjW7.5L]t8uQjiAqU׾u9JG$w=Nh)_[_~_n<]CtvAwnM՛2_^4$RuT&H#Myok.^3C,zvr->sf	{#mI$>l$Z]*z[Nd]M*BxVB0K!,fX:	5 FPTݓ?-
j11i|c 5d HI-9¤g촫8]]6ܚ=*8	R('*R%JQ7Izu=Wm5[Wzg4uO/L~^xVF$Եkyt
=B!R<F+Gӄ*N*7}Tss>Z/8FM'^|VN5z>Xxs>/h^ޝg&ra}KeFNG[8a(?oƬ%<Ӧ0[|ϕ+wԪN-TI{Y-.{>7uǾk5׊!xSM5aE-gKCcKoqY G1p(NΔiΟ7*%m~KuUVݫu׺?I]: CS:	-.;˛GPt=?Zyvk%ڦcU)P
u4T>]m]wmӝJ|i^{tyROڷjM]i 
{iڐx@յK.ef8o"˙yFZ^I=ꐯNsKG9>;KR75I߶O?t6ju+M)OZK.܉w׿fyQfyn`ok;Ob*rI҄\䢕?n_ٞ> Ɵ/%Ʃ%c+0Yip|OolZA|仚P jV{MթюUK]+u?2|ú\=𛷉>k:ӵմ+(>"2&VZMEU+ĸWZ	JJn]ֽ{Yޟ6s>U}zsv:e]IwmV..6#ElžYIXFvfBTWMBU%%FRz$;?RRRNsn	({ھngk xM~Ū񆙭qC"CClCb.б	
5c;Egkv}lF+{9%ndͭϪ^U}>!mJϙaXڭ"Iuh3WZ$֗cAܖ YIΜ)*mr7ޖm^_'d4h*¥I{Iͫ-dihWWW]n~~Ytۍ"<Oq},>𮣬[Q.$=k=׭}HW.~zd4%wHΟiWP6ʮ*KimB ,_xC>1_Xjzw$+k5+-mRCfPmJ[j>3/IFTwVj ڝe^eUww*_g['ÿqo
~*|7e5kN@wXm/.5	m]NVgmBrJTrO{WK08K)ӳ-eG~?	9 xFOY_ij^C/4;M&VӼ)wMkO@d_M*hWC^p_%4q[ĘxV	UVQIBNFQSgq'Mr48o#bUfRriQk6w?͏u|3>|=ڞ^=ҵ//SB+7WmֵBĺgZaxY
ZmǾuJUYP>K?w_J)^~x>#x/}>Ğ.wOt{[D&5dxR S]$ka.	¤i]-v}Ҧ3˖W,iRriJ\.g)7 4;cc?ouM;V>v6o-i燥	{uj.ԭR-bY4MpGJRq{[ab0Qu!F)Inxtj#Xx S-:oiZ{Q^޴vֶ@59giҾS[ߍ
PztSp	F5mv&뾇1zNh{ZOW}mu _EMgx>t4o;-5^"&K𾭫ZXi7E5]7M>$O6QK	=4]ڕVk<2W5ՅYWq.ͭI6m~@?oYVZmo40ktщna;B'}:+Ę+*Vn
s\k]5yzjgDiQJڴZ=[?/Zޙ%$:ƌ ZLE֯e(w^<֩q^Emqy{bwVY`1KU(R*.qXԢixhӿ)<9o`xN9p0W$֌y"jМUi~w߀8x嗎/|}j5mzkfou-qOZxúLF_V֯QMVX.Dp?p guFYBIÔN]І_jU*og8QUa9B+gѥ_X4T,N'0dܭ{)eG7<y7-]ď\ɨxŞ%?Ww_>^_'/Q{p.pE<Mx1rR:V>4gZiC&#XB(9T߮ɽ[woᾺohHI&5_
\k:>1>dU	c02JL7hJinTWۿZ̛i|?c;-M*w&Ѳ8[klϩ]s7QE~oggЧJWKvk~Y0$nX|zdt8);o} ֧̫+._O^4uxSJ; ׾+x:&o~xsEuOw :K*;Y_XiYjoe\R')TPNS+QhTq4毯_xL~2^NPRUZɤJ5GN1|_+Ng_<?5kuz?Q^Lrh{}O%a,_-RU'wTӳ};g,u:XL4-JRS%I8%eM7xJJ-ۙG e<jZl~!o
~j0A]Zh3ǰ֯dO5vzŽΗF O <Aeqw|)SJVA'g(:"7+FN[;~gG8gФ㇎,T=#*Te%,R:k~Zgk6Nm^o5Ɵ1Ki%H0匴\UR4s[t_OeNE(84s-Uzog ;CoO]c]WFþL<zl7lbK{8clܖ䝺6oJ!KUm=4Z==Q ѩǫ-C>݃6v~onE?jomԭʱ˦H$.1:إ((?*7A9Si]hַo#ￎ^)>[Y>v)K&;OMT9t""Yk>ԩUߴMW}{/eATW]vǉ&\Ig5ς5j6+,=WOedD'2q9C"ƱH
2ĒQqѭj_JvW{uM59xVৄxc:׮ΥK񖳮_M6Z,5zST'5?Ė^Yb25bq
00di4J]$S죈n2I5}_5O5vV×>OfOڅͥKsºο92i_xgF>gcז;i6ɼUUxē¸wZ	Ջ\\]ZI{3S{z(ge\~#"5,D9yJ╬ԣ( ٞ? ~?mNo?\J]zaĉOWbuu.ƦLgS2px:	RVs~?yuWc3\}J<f8j^T>&}%VR溔cފGߴ]w|-  eǍ<>%O%a I}e-⏈f'C4];^ һ땬Ny&_c2&k<L5aJp〄jRzfʰG,?W`pձyU\JњN15cRMҩANJa_⯄>0@[\?&ƻ'F[gүg{jEpE[xĹXn<^dUiף.G5&>Y٦/9G*uaXj<WFrFysMIҳ\l-w/ `۳ǟ fE-U<O7!Kj"4}GA5?x_RMnFf Nym/-*PiK0IacZN*1FSviڟνLWRSek~V_?~,G{cXvP,򦩤x#ş{R]~7Vsyy-l,ԞЛNT)Oy-Z5=KW־g-5׏"e6ڷ/n&1BFN̈́RW
7YMM!g'Vb=IT>g'{>jOTS)"Ŀ.+T )9x.^\^Ww{z] ^/?	׬4x>m!K.=_ATVŞkZyu_:H[|wP
eVXIFTA9ݵnofgӦ #Hbx5MƫhE:yN=/=vS~]3O>&|(mmSPHұCJF{+O۝55Yɩ_o2	Wg;O-gl2ƆcG+U"U1RoV? atjF/}ыܣQb'MǛB.RMzNFx_{◌[O4''ٵ"Q]0eTI5R<)JԸp|fKS^>p**p=t*|B\JLϳ ZF)֭oV0x®+W/^S*0̟%%7)Xؓ\}Kz47Cwiz?ukSSHRKn|Gk^&u\Cn.ewHK18Jq˨=f1>GV)NXUG^<:U*Sc6,h֨BW/kҜI)I'omOZ%9ak6gYTy-ivEc}lڥ6`ڟQ|L*yV`
S҇I.JM[鵦G	Zx=JJ5:*&Sm&Ѽ?Okh=?];7Y{Kxy"toL-+U˃nC帶H..RUhR7i_+WVO^[Y%9\d]J:J '|jOV!-j3B{kxt鑯/`U{<wqg.q&䗳n}{.'
FI좯Ks4kM͗/rZ}U,1L[Mvܪ\Nѯ!wn,N{VjTVp6T[c1*г]NXԝ2qjߗz?揌嗉dF/(~;| REaO5W3}*v]d6i$u>km>8g*p:Vv#7{ޗXRV(ocZt.R߭qhͮBەVA^#8T@Db6L#`z/k+ӧ2:&^os[%u/)I]iyLo4Le]tĠU]L2p)[e~?C[N<cݖ M2 W $|NG8[^@Ե=#Οo2-"k?jqϧ譩ZCajwdu?ƅJMSN^2Z#+C95k:3	Zq	t)k0rvɥ/,,a}g |2<[$?O,]b7(x'Jsv.$xJҟP<X4Ge|`|yQpҭj~wi7VgȪ|LUR¶%kʜoJv|/r9߻	G >3%mW6_|K<>2])<ie=CJm/_
Hu-\Ϭk]jP隟	aaXK,?p9c!	c12W 5=~>10m+R-*qn)$ܹ_/xc%!oxkN<ǍHmKsQ;,qeWƌ=Vu+<$CR)4~Sk,%XS*˚)^I^??"lmΔ*s3:D+Hvv,m^SRͷQ1|JqiJ1~}.$6S+24.*EU݂œ -:뵛[ -3
Q|K~yu>uwxGDէ\K7yu	@.FE ͚I"Ug`xT(S<e&B[ih~%|Zjk[6խu?"Ư"^q|p ^~ <mńI@m;AgfV?JrLn3iP,	/gNsRUi-[?9YF3`J+J7QRi=_5Ϛk)7¿g g]x=nPowxHd~,.wj^#C}go+Oopl.6YBgJB_WP`9UZr]&=
"sY.\u=NJ\Fڇ3	&_IkVO|4t1~L^I Ai&/.c;մ|3ȩb+֌J̫OP|RkU"EN0wNnhc:0POYI+SJ=){2$~|>x6D1l iXORlR2%eiUÒr^ 5qJ*
TysOn>	C)J?ݷw$g#b-k3$7qG0d[1aMF+&W$dDjamy-qzs{7jڵӮۻG%֏k+s߲ao Y4XMC~2۠ޥS Xmb%}*6	8:׽5e}ݭ.Gpʔi+~mן{쾌Z~'\g=ҼJRԢd֏:'UJs߽)Km}^{iYƋtE&	@_%>@ @rT
)I-5zwZ1TS-]- R?d&컮Um#g/U|m,ɦWޱ?SG0_O'l쭒iDoUsG4iҼPZYyOK-1Xa0*n49=wf _P 7]a[UPjegu&2iMIyk^V/-%Ɋգ/OWwZkwrKU˜đj	0B\nUXm}.64%ku꼺_~>Ԛρ?|a~ kh:1ߏHz>YN.;wW/:-RN|N3ڷK5{_~~>mu	hS>lՔi|g8<W$h-)ǕdvbQ/u[]{:Jp[Hl-հ?whܷf'6J_<̬]IP!ߞI^I NyZW']~-]/v@P(!61@ dp.9ZZ龺_`i[xGI$ӆ>(5O<׶Q=ڏ[kb^I|Em>^ISQΣaB%Zi-=6iBmv.ztg/;ɫcaGbiZhɨnN|v)
:USt|Z.PZYZχ߇53Gu4vgH.g8VyLsX%LFISC*=jN6Oy_6ȧ7JU0+6UcON1ܜ*sc'Zxox6uui}ۘ.Snv^Y|l|1^%qngIW8XKIJ-)rG[9(W&On\q81RUjz4i¥zJtJ'NqwY8JT)C?	O |un_WYo7:vOXx2-mDFK"6^iq+85q+	JX`1y|8 TBRfZRo+F|5FCggUfʞUu(ʮtkG=ӽR|s7Kѵs:OڴUlujsiq42<v:Ƶܓw_*Xѭnn,:\4XoNSTJKݟ,UYKa;I&Obg`0(`c+NOdpRJM$6\~t/^4~x}GRS4 tr-cQ}TK%mw(Wj`8Tƥhl;W=eJ%DykΊ-M>EGBu /q$\=EMŚ-|ASŚ3E|I--A\_؏:@)Vd7hF%9r(n0!φR|/?N]kPU֣-P,fu{^\_]5-:kF%[UDP213lT1UJK4wh>uEMA4{mu # fxo0xXŚ;mDi{,*ëc<Vi#L&qpaBydogU/lM==;muy	§W$9Ouߵ_w[<agG[irVό4Kmv}y'Eѭ,.̋suQb_K.TO}z#_/k"|>톫^3|1C	L𦗧jw5}Oq%ݶүBT4\]}6xwi+9ɲV<uZRНEFj/ion҄
?:|_~x'QwO_I}/Yn[oiVck^[N}K=B;B;"Eү>xϊ3Z14'Wx9/B8Np7O-*cNqWqU0/a0NcBxxa:v&qpNR*$?E g xڹ|N?O<GLώ4]N]φZn/|Ci3^nlEqgYbkhL?`332kҫppГaiJ(לOCUqPwxAKKf|bs|x
0`+J)#쪼mL)FuFUl	/?߱OCjZ6 ˪a(ީM!V>sq=Gfi^ki}1bs*y]LkU0x,R_/AsԝvQd}Gq^{<=/9(ʶYb2hU
tjV
N#`i5%g.E>< Ǉ#xWC|O|Uh붗FْTM:=>I"
V5jN/kraplisӗQ9ԄN*SNIF?O8E\?ONU9N<7Vᥘ֩EFҝzWS?٢oxDяo]pO
htҼ)sO6=GKEҭX2MeZ^Z{;O[8LFNVK:7QZJ/UrsF)J Eߣo~uoÔ֮WfUVXc0Nzs.(>I'B2W h+9,5^\r8/&%O/Hn@R|R[Cڪ*e*]MjթVchegn{g?Ib%1pTb&կ.;BE#I^tyI⹒^]-v.)wYw2vM\(}YcLiQ瓼ef_3ʣ	rrnF-z_CmgU/vpW;3OidyɖKr%i^Q y	[%˯x\DaRԄ)TZZѫ3?xsľ;91mye-V=H`%-1lVPcqr8QF%>Zm[K_k}]~K%ݹtٽ鮾s <;jZ:hixoXjzKq5:kWk/4bGtxCefU>^YJ#nqTt73[e.3α9F.}aQcMxVtZ+)&}C>:wz/xƞ-e_ h#k/ëDzmտ7Xk:,^q鍧xI[~Q^y2"q	biԣ2\=u.h8Qrm xׄ*̼=Zv&.1ׄe]5UTFq4riFw_`)xKᾥeo>[{?kw:!ĺ	j}v[{}]-Gdh9jYmGhӍjj*1nrTTcIY'9
*SRqxV	В'{]+Eok8m'I[Ig,. Wwٚ1fp	9sqUujT)/2=μ$Qmtrwun|	<w7ƞ(YV lҒ"[H/WԦim/tM4[ZY_ʢ_W|ΛuʟM.:}]4FЋjPi۫٧4~s|3xw^!<7q歩y6>uB9/\Kqw˧[#Xq,2܋=iCG/14aI֊%5ڲj; V)ʅ6KӖZ7?57[þ0]+^=چg>77qxs}j2pA<RY $&><q>ǒqiϕ$eYzH]6{k OZ|omu3m#iVc<ս<_[ -5Tx5B,I09GWv[]k_>(NPI&׺_[d/#UI㏊tyfP4-nS/˙ml!n$F#Nԅ+;7ѭpkI$޲RDݴ_M%O*Gs{wx|T5+oA{CS{?f-MAat}FYR(Ē}]<\	bܸ򢧆IB	)^}_`p䭊K	Jc:wJ<֩+߲Oß?<ky[O:Ιww7}}QUEV֮t2[~};W(v/Sܯ5'Μ4<J86g<hө6m˥8фe9RJ,*W+f& <y_P~%/$ *I}d&6__ڷN{ ko2_I4YJRNN+ޒӖN[Xb*iTj
*M-mI߻|{[	]~͞vuo\k7K=/ėg菣huKk{\iN7Nc/z\MV쮵}}.}Kط-+Se9ӏ$Jjg*uM_ķqxwVL]2K4˹.m-mm#՝{qn,`u9I?(ɶvj bbsUj{(SwtkkGx_0i~*Ӽ!yjzzr[-I%ΥcoIuá~J؊4ʢ<V}zYcՄ}㇄%J*1O]ҭ4=_? h:]?mC_ι\&LV֟A4FVmϩCGqgIm῱UFyƢBqUt:V;)RJ*Uguw<')߉Wu/j^}j]]j>𦻥W5Χqር5mCC-ⴻ}i/<@uθsy61żFSJpZyTSך&kK[TgMapԳ+<M*p=ZTϐuPӼaxj-cn.f[%ݭޛ麅n/#h5}+Kl]K0qe
*nS}"o_|n.
-ZrrtzinѓZ<CxNՄE42]2K++k->o౒9m0"r<*Xtjjj2}oz8lRM9Ӎ6NKKjϷ/3Ɵ~km[/֭4x4Oh7:q4IӔMDpPC-֜\G&ׯV~jJ)._Vn;_ll~\TQWmkG}/#/u$|E<xYn/	I)/gZ׈}!mZSK;+[iFҧ7dz7WzK֚yǖuӊsJ2mZx↑ ◇^]5_Z=o#If7yJm,Osvϵ
ۃnim;}ntVY>!3,?qWQtkt<@?n%֭QjV>~"֯ӭ;'Dt{kdXԡU,nz(e%>"\CRPt)k{%ikTl2~.#ΰ\O-R5.7gK+4s>)" Oǯ|/V?aR<w66bO߁4)巗F[o<x{RT4gK.Xnү3j,ERPrKRvHC5*u)I~\ճ<>YˆyZ9)HMsSLyiJ*Uԝ7I~?7UQH}Smfj*+IlĶzޡmf!}n.=宏e_xׇ~mʧ<|M<DBhb+ե%)4iK{8)
YOÃ6X<5jEҩQSPKգT(PTG%hF?m~ KCBo7?m|-z!]C(1цE/mloZYs<qⵌRRincBx\LIUo	|NK{Q~ k^|tBVҵ-;YմkO56uc\Z\gE4rEF͓Eǥ_v祥SKmpRFtܥ+o1|[z}$e'̥QVbx崖3$Ӆ1	y43|L:(Ac]Y;wzlϧ>73K_Z}_5XͧR$}ҵ!Xd!i=&	WnGe8TNud `j~ؿ< wƟ !-7XKB/ jK|%uoZ=H^9^-KM};,ͪJOԍ$~1j\)5g͵yQ%Z98GC|1*.2\~|x  D ?jL1xCzS⎉/<Y /x":͆o'm6 'M?>խ; \F&??aG!
tyVC-I'(/ft0\q|'.˩ԡ졈w*_gVuuo~_M,7kOx>x●L1DRk8zLO q4 і].JAeҧ
5ztx9eճ2._,lTq\]N6)=*%(.rծZv|ৌm*M7+iGStiGhjo/W7J[xmt+]Z~WڹF%)GU'mv~Mꜯ	XJR꣥כvZ xi|9 e*7{@P,,Ѽ	WqWm ,/=};7zTxz^xFx/X/IoF~"ukiis{O,PW,_x8^!uMynMkmK$M;]V^.|֣7ѮC̍.zNrN)4ڻ춷^wO[fZJkҘɧEj)Md2G{4j˔g1_C(ѧRnU-F׺ӱ+ЧQpJJ+eݳdß'`Qo[\dJ6nU;&5Rv5|+TqOރuE|*N*qJNsh~ h[Þ2As{kmucM4qjou{Ci*=Z,h&r^qI*8|[x\mf:5sRҧRuN֩?x+xTiU+S<ѽIEJ4ӒUxOjͫ| 5oOWu)5xs^UwZdx]yWBknuy-,80{zPiSç)R*iB\J/GvFoy'ZQhMQ}VNe(7ΠSR~jhx/$p>G> 1BtïxC6q
ukeu&;#Ls7f;80&hl	q5JsiaqUhr/V|^¬VgZ40<gKRT9Pu9}WtڷOjo	?g:uX	跟|yv6\ <Asqu{ZG 4; s<nap^c5?^XruuptJ+;)jWU/¾<af+|f|9C;̱tٔICkm5RNT	7/χT/^!}KXEW^弊m>5Kk_Dvw᰾_SN*̱Xuz^WV5
xׯ*t>\]EE=|%J^b`\3?`UU!^­O~ܯ֓S3aٗ	4߇z|+Wž.l.;ex%mχYxKB}6=jy了sq+秖PpT*`dIB%̴d5UOQk :׆[RN2۔ڞ-n]fZj>rQ~K4}\eIrӍgL}]_>x{\ς3]joZlt+_.qy|OYimDcdg:rJiJ^NԥkZ[}dTiSrvJ+VE@b2QaO]$:M[⶧,kiDi[[[MKxnnctxb^tQέ<<Kuڬuw~Nxzx_Fiέ).w̿ I'}%j~۟@:jzul5}߇tOo_iiw7}RBw>92椣GTeIABuNV8srQp[<9|a״I^RvW~ge+ҿ~xAG^2 gOރ42xNXW^,Σ%iO5[HoH_Iiw_/`;F&p2XES1gyR)'*KӡR5ѩ8~7yN2,N"\%fM+.bʱ^ƥHRBRrRfZ8ՄKyiGE~8u/_e߇u_]i#Ѿ0xUz׍|aZ.^O5"MbGPٜgq%wOQ)*pU2=,4%i_jRS?F
3U✓	E)	RKJdLZ
|ϕS\[GΓuE.xjSҭXQ45[PakqmyoabaKҊ3{[U̱^,V:RNNpQCѾV̇Efru(㡆	9akסv*vnVwΈ^3晥r-KΓ}FF~5usCGu-__S\F{ܢ)/ȱN:o[R9n0M)FyQj1IyN8jQF37PAӪRY6Sn^Qw?Q6E/JOKm?Oa-m-\$PA,PĀ*F  WW/=~oS)Z1J)-,V_%}] hyL^ ĉ}{º]ܨbiY@>zC9q͍+օIӼN#kmoѝ|lRڄyOztWsMOx%57:iE<şQThmb	qkӁZܼP89'[]4ا(}RJqB/z|u޻6n+ow 񯉿 7~%|i_ dOOQ<-.6Z;i!kvR1]4Z_ZiZӯ-zF]:oYC3]kUhԒq7HI.:MŦ wMdw,1ٸ\ He	XŗeTfՍIɺ̹OyxiPiA[G)c_,QtpIquyhZX#q,đ-ɷ!ǵ*)Q{:t62\+߷x:񡉅y7AM~> B+,<XYxmqo.um{& MmzTWYEjNSNu*rҪJ!F)r9;jܞ+~m\VajMIMQٽ],wſOž _vƣx]}.UR7t_3YRk0Xas6eiq?$w`pPJ!EPqhƍ	³:qqPu}c+%M<WjISQ?{Sk^^{{/L>|I?>OL𶗨^|\[JhyIYA<Mt)A&wno撕Ln>^"ӳQK7xgk⯀-tԺn63`iytmM,DX_qoiF8˖)%9WqNVkϫ[}k֊jբ'Z7lo7o4-4h/' мK:;65d/bF0L ͜Uҥɱp:颻dIb3z)Wtd:|ӒﯴOh}r)O-	< E{OȹbBFwp4Irjdi>O(^=k)RAψ5RM
-tY5KHuB^Ulbh64+Iu C&|mLL#W:]⸳VӨ^I.N{kw??>s웹5+=7.P7ӤL,s"0K!!m-ӧӏ=-ܶMϧ8C4e9AF:7-	<(t{iy!."1a*_]rWA##zic*FWj-m kicXzu=yvߝz]~	,kԠ9?_=ִP6Yn7&px؃)"xdgK+mi8EKY_СIeo)ǖ׺v=WQuGƿ:je6{LԷP.cji	< 2ES1tqZ|E].onL誸vNA?gzֿA}G":0x/I_4h^2nb1$OIOpS~^kkFSQQvR_gEtl5"hSWmމ_owgaé	b0w]n#W[t3a<Vs 3a)85k]=>˺M_+v}=*I=wZIKm/ῃ3N!6Zmgıiemo6rE	Q|ʊ+ƨ>hMﶛ'}DմomN}M(,$-lO J+9qVwo*XF5mmxov ~|/9|m 	7t>F𾵠is"MRmÖ-{gklm.4M38xFՒoJN7I;[y#o*Fr%
RWe "E>]zeխžwiuo,ZY5K3G,sB 8 `<RrI&m?v;Qqi֌ӳS.^	 |ZЭ|pxAckɥN5IV;v$eMV\>2'OmsT([F6kMՙoX9E/eU({Βodn*ݝ8{Q|t^'V4AXD,<KJG\$WiQjV7MXXv΍8έegkj}waWtgkŸۮO֫	F4KX,;X76齘#外Gyfw5Ru+s۔o+t<g.wVZ{xgFLDْ-49LJ3DԵI 欿-4_=_A෉
?(  \uiI^+lP' w8?;ɖ_{Ɲ~,"vmWZOj?hsu]Y5׆GyY"ٌm"U1?sT9;N)IrJrMjģBQsӟ/<ToMY[Kih^%uOFɛ4q,E=qK{j֚*Icۛ'x|>FgKR<ВQm/mϩȸ5᜿qb'ΝJu(*rڴml74 |%FuxwA𝶻okv4]4@KmSC,&]qxiF8Xc)SNN4{7q}n>kupq<m4F5)e;5'ҴlGxjנLKso!sm<w`G4ֲݱ>}ťp\EpBjӌ5.e;I;յUu*¤d9SʜoEQѯvQmI->F7>8j ^o|?qi6Ҵ;^?iʛ`WZt`"2C^T:%')KNiJNɹ]ޭ`F)8Ar6V岵M?_τ'Gk|E{nqPhs]^[}ݮlSNn#'!V
JaV5%R\˖GfhT8Uf[og/Íg3]f.L#ٕ?7@ y*>I*{w_#T\J䴌vz^p>9~K^/mW೔nZeޣLDwH<WRkww?8|E,=%)ZJN;^^u  7	q 
L^7I +$^'u;%g࿣ai-?'~edc~ɟG7¯a+7ľ֋
پekWXpE#[cܳ81oxwՓ*IrJtE=5?U<b׼ԩu'Nʔe+(5}O1~|n4_íV]Ts^:zD7bU#\O++:OK X-V\Ej.9,5)8-VQ겫N/_
xpl]G<3ʍ'RxF
VtTPM]/s?ßa񶿨heoKkH5;F[`4W'Oj3jW{m#ek'qUu⧄jQSNP(Z|'/8W7pNc=\rP,)jV!T3hV(tkӬN, 3~0WIC[?sKOk 
ǚW#*_hvj4zx^IʇN6ì`b<}C_2]hV:jӆo֧πUcMaȌeY7#1ظVe]*JL7Rq^ɹ?mG)'k|U l+S/xWZ7<x x[)h/ǠZnxN66sھS3V%R⽖*Y}9ʅZUquҍjMsGW96O٦cCꔳ'-uC_Vuh)V#NuV_˞y5C⇊	t -W-
CGú+#|_k+ ޤK <ʤ-άp Ȝc/-q7xy|^69DqOԡ0ؙa`VB)5tZѥ:J~ڍ
pU=-Lj>
Esi/UGOKIc{-n,|'I`-o	1SrMiɻ_mgOqS\҄'I{!kJӃkuto e|4_/<{ek"\ρ|5ۍK[vk\NY;X n<ϳIvUXAǕk)+ݻ TQs9)sr7jNֶ} ~?@ qϊ?kZk֋kG/vv:ڨѵi*PmgV囋uM%&%95$vӵ0KVaa+{nnӕHʜyEsCQMEM|v>5'Z5NO=ZΗi.aXxaYOѮ|3*EZ_}ﯖ)+EI$鵚ﶞG> % h_7#SK^ M69|7nnbwjzխV׮0Mxǌ?8,a:_ڴZ4wi4;\g8PuRXyrRvM%.U&i4/E/ ß?O|uĞ$ѬK|N4Sex#.Zխn<菣GμOOgX'RS^Z8*5Ƽnу9qo	ژ|/Sl.-b%:άZ|	R|e)Mq_+DQgu(55oz~^C- p=ݦ>L]˩M57|kX.1ΰ*u1tuKpJ*28F.Mu{"Pa8խ+:'*^J͸Yx6v j/i$$ /-5dcn/5[42u+(uK;tY].8xe;iSW*K6o~]J*П7>iVv/]
/xœG{cO¾4JbֺзԾ \'U:މyjR6M6Jiա#IBJwIE{-$:V_,mmө'5i5k}bYmm].wI4iq!se>8%^6NwWuQPQ8[kRnl|? !E$z}
|^6!66 
Wk]NmBK=B/6Wim_^L"43py}bF
&$V)mSmy'э>mugw ?G-^O?Q{k\%"I#]i1|Vԯ<blӵ0CtVf1ͩwTe;V*NqqjRRzyskklwse5^$Ex%]HIxfgM %1I"|moݮߪ #ɫ!9Y}Oz]ev#g~?xo?| ?7/Έ|K. xOD|E]#v hΏyiCwoMԯ.@"/t)*US՗PI~SK]}FSQqSs.8ȸ/,0UN㉧)ʵL,MKn*5*j#V&_>|S~h\~'ƾ!̚_z >h[_Y:]K|U:96'	K[pTt}Uc1UlnrSQj}^3T0BEC.UO/gGإnlᕿ~0|j^6߈n~'u-_z~zou/&hwWItGgҥg2"sW5)թ(oeMS|.gX:xңRpIVFSQ욓kޏf3>;-kx5GTᅓU_i:ν>MRҼ5ix&'R'-&Z.eJו67&ҿN_K}F	arڟ=Z<PN4BvWJ<❥bsGh E׏5EԇƟxjAkIMAk%^ElQcftt;~4X.dvߕr2KM^3ůS^^w^9>:n0
KjqRTM-_Q|nf<Q"M>7J&t֔j	-EKK=M9{T]bl6-ϣGx*^s&*$秈*JQWrqۚ+ƯfxgS)LxBx\<qU]z1
IY/zPK7<_ߴo(?<|VŧxO/|#GZ~kZMf}>LO/4m5iN.n
])
2$ I_?J?3Oe=oĕU©ߖ5tV*p+ǟ^w?;}3E4o[Sk:eڭid:y5++Nż\"VYogK+`Ns	(1ۙi+$޿ϜaG41C8-e,6*0uUԯ(U/4㪒 O;m4τ3Ftc+8.$Br/") >\t8%53hf8J܎X򝽕*p3kxG;㽕UT#jNi'f{?7<_xSZFVdi\qBťj^D|W6YH <zKܧ|oiC6eΰJ0PtxC௤>K.<r\	wS"(u'F"t.rmX L
7j2]:tѻMyKZHEyL+f2&|L	5ViѩTTJIY^?M;Ѧӷմ JM xGt)}NK;WZ߈^m llP[R[[5ʩJL=8ђRRW&dG̨`:R:4S_{9_z9Z A~Ⱦ) #^D</o/{am֚׊⋝-"ԏ-S6}cSue7z8*~ֲ6_>>Ni56L)˰jbUZqM5#:Q~8䍛j4_+MQ,<Ijw7Ҵu֭iiwPټ2?xy9mo<qt^x{噼;0
Z8<
2Z/Zjvz궷xםx 095aZ<>1aRT)8&q* a N~e~	٤t>+OZ?$q]Wៈt^{8˹M̲"|GsPcW^eeiV-H}aK|߽,NN+]ɣx8k5(sJf8U^*sR؞r<5gx&{KX~֟K;ix7T7ëi^8 Px[ĲLY.4A}hYmc8̱N2N(dJxhB-ԜT=jm4fZӲo<֬l&"b0M%559˪%'zWԓjn{j;:}*(U[H ]!Ʌ>iB<j
Rw~?fW
TiU5%fu^soG">gnuђStZj2ƹ4o)|ʕjTӜ;JRoVo!,=hFmޭ=|J:q1\FUx'Wk]XdPK5K۶y^V_[IcޕpAb"$($_UB؊ibiM>UwmnݭFcW2A%յG=ݜݝNͳ"h*Rk3QRF*)2OW׻[c`qX:ԥ֣('$ګNPf~d|E|yq -۟nx$Գ\^;]wv_
Zm, Y253
0\ʜ8zPnXvXxS*]LO,}KK㲏x%:XVOR|G\en*VN_'/@VE xࡺ(7??hmk`%	ceKڵŧ^!uX{Spb[˳EHb(JPsPSj'V؜TqUa}_NfIsb*T׵P7~bCǧhSOf;6(fXXɰvsRFx*t"ˬwvzy%WA$:q<N ?s
ak_־g~
]N:M'ÚntM7G쵿k4Z^&rj|J_tӔӧTպkF¹(׭g^y1nrK7{(v֋Et G I 3W⬿:Z<CjEYmzudԬ`'ͳ\"ԧR+=e̝ɟIY&YUqWj(55'kgxi}=;|Mּ5uk7 _<+x3vv׍Mmas]ɦ$˯X%ϗeĜF?ÊS'Q% .VUTp'N_E	g-Z\fP0<2+WU?2*XW9I=rk
9!ȣ̕ѽ_˹5R^Z.isyZC,[kKt!̺̲]^Nɸ-v2mPxTz*)rmu~M=uAƢo59۫oyt'zNPǂL;˴޻o& IЅݞM^(<]^i6aT)VŪUGg	u#e~kŶ}%	&&ZpUT%8FmA7't Y<qs?'w<?s_|=kSӼmVĿ>iz$e[-닏i:^}70xsrWy{a8:=Ju+aM:~*T}i}AVGxp%ZQq6c
NO4adN*8(}nz1uxAU{	a~žtxv~to麅|w>j3HIOsqq>MeS:F3:EУ<O>;uhc'tQ,T*?əN[|!!))kPF?GRQL5:t%XU
3CG,7ETOKëUӬfؿtj2v?S}o.pQ4ۉ.53xTS5`*f^Ob:cF
ظҍI^*S>ilͳJyZKэ*4({YJ*RKNϙ{l <	k'v7h']F]>4ۛk`)|qimedr3H1SYes$Vj'iIy_;.?{ <6|3!+'ćmSúƙX͢KԵ-3PҮ-.x*[[?'p`jNcBQ|ߩM$[[6{=#0:SVKd~ω
?OxGEd"ּG2hdoo|+!_晶c78MFQz4Ҷ~ $9pZƚMlKu|y#W/&|AkkJ:4^[K{#\GciQ.>x",8¤J>κ#i{w$o>Ȱf6){5em'K ߄UֵyyyɼmBoEtw%b펿^y߳o+)iU[2ʟ4~6O.>.	|$<Q^xoׄQ-e6#lk+/uI庳Io5/jF|l)<5jO^CQUe梭9Ԇre$	f8+̧̫Jl,Mr#?rS|=kIks ~]|,5?X d>wzy+wZ4=KZm[¾2ω=N\Kz[Ob$x 938i<?*.2TT/g:Rmiunk{Rxx߁q88brjyL))IrԩFtZtLyj|j_j?Mya-'Ui+K{eGCmO%o]_	PA7)8#ZYsRW>t&8JJDʖO<f2yf8zy}U5	ҫQԭNqc*U"GFs?
p^/k9u,䳰d{
}w6jR6slWZeU|jiX'.IʚtmwzCRxu+ҌTk-l;8|zc߃g<_:_]]+~a2x76[!O2o\	4ĹI0{W#V_J}QJZT}>_o8C0iWmm~juZ>=⟌?e_G[h7wuB',Xm%Em2i)N'2MI>ni80U*ҕJJ*7R.*IkֶJٟg CJQk;_75Ő.e{xPjMd=>:%,ɹRen{SrݶZ?
qNX	Yd Wm h ~ޏg[OIE½*c ;h(vZ.Htm5cWΓyrqxrn<2vI'Ȕu<feJj)֓Vuoe6R\_\BQme?'# ,_&?,?z}kgwG@:υ=/&K;w9fG5MS|Z
RU''~DoV+biө)4zP*oT]֗G~_;ĐxnľY Fii~ Z{}X`5kH%Ә'cNe즢
rOh8[vuu5v9FQ~m+I="H_C:r&~.RM]l5<kz.))"]I3G!H:µ9wRkT{Wh,Bi)NJIݓw=K}Uڇ+UXO(廏wΌfeS$m">mמF
'4:M%>
N|Y/k[*Ui7kyBMngno's񯆼okַ5 oGӱ	|{XkxW֮WhnIkvȱJR6̯1sNb&g5vkGmzb*R%(j\MѲo+K{yiokE~Q&!<5;Cae3< !n"Z3<Pü=uO-UJ֧-9VVMe8?y˾#ywsk|*UXƛ~75
<?yo摘mUq O8=kkTu`-Hr{=y'ʚ_϶ NIE]= ?eφ^u,jIƾ<ǌKK o]rxoN`E4f1  99GrUJ^~;vÉ>8Kܥd\ww{^,=yaE~eO:DIJ(bZaӻv}7{N1[h* _<9>R&SRK%EII6]3 G<A91/5_ꢭ>ｿlkx q=ş@>ac'tBIeVf2PmB}4[y_hI'>YJ7֗v괾'vZu֫[-m<\#p`Z<hn#dz.]zP|˚ZӾ>|~?ho*Yz]pI]:IXMewB]>į( TrJRQV(õIAISi}Tȃ=x}&FokIm?mg)Y}:	oh&N֬`0ͦ,,o"OosG#-ҷx?U,4%)[Tj-JďWք^]۞g_u#H!1Yq*U*-t&IWouGV3o$rl5m е56qI:vKI?nqUOKS=ěxWnoa^#PZ!o8,
8FUafxoQ*IO^[ [~|?Uğ~x^)iӼ?:\Ege]Fd\73BJ?!$NI-%%v|qqtiU)^+x -~ú|_^I٥7>+z4V7dXfKSD{;`0fx|+uaUkZV6V()TU9c6j&֗W٭, 1UŶoWJcR"[iZ}e+4Z1 ztЧNcN
zhN vՕ\D*ΤRW9>^e-7Oo~%R,&3jjF䳕,̪X-en;~3oKehݾ^q7 []?7sk7uG,5r)GTEdɍl+"e^ARZIsw}5r+m]RLu aH	p8-6H$\Uc{4Пy dW$jX i_ǘc@ UL$n-WX[zid!Y&ZhNp|;9O;# ^+[8M/-c 7B7g5@-.vwyil/L/6Y,>&+xz*NQN.Ϛ-=G'8
VqrN*WW\JnXOfXN. x]0LMkĆݤ:ʗk),=x(JT+'RҤ)\ּ[K]8754Riˣfࠞ~ÿOR2~?5$SмkqBmms+[UI&_mVmeΓџb?GE/|"'/gZ,7[XFz<m[J/Cog*7xҡ9RrH|0rj=[t?q4h#R~
R8Hmkee#?0+E.u	UC"a=iY`}k¶Zdqnag6yt0t$s̥9s5ۙuK.SoKር	aQEZr^ov3UjgC:O~+𷋵mG tdzJ-ƕk&Ni$?XTt7.jP[[Is5n<\~Eԧ_:x/ۺAz|[ ?|4SJr|5ֳoh,-毪x}_0C˚۷%tf>*PՕ9]_O;_/;0?eO ,(xG<ૹH~qunmsc}eE6e jV?8?էC:*Q$Ӄ%*v9RO¼0;*sF0}7*:4\LhҌ xB5$U!%sZ @յ 2jA⏌<7^FvrS}atǇ<wMd䶓rb_"3_VJXzXZqWZ
(5Z'(UM*R;Εc(f!<?]YDXxqr
Nz<TԚjN$Rڌf~{m/<<ok}	5S{oxUt \j^d^%l5~4|Hc'a֡KZ8U)B+,_{\"U(*_?8LxWfTSV7,..c<y+[k*N?_~꿴ԚΡo |5ҼU/<Ae|;$z5Բ0[Z״iqh>$Ѽ}?%ր[^	3쮶gpS2W,QxR%v>U:XxXl&kSg4pkʕIB
JNu%Xpc(~<<?|'𧌼UrIZi^)O]xSEj~8Aլ+]RFgn"Ӽ9jēg{kbԱf>'R\k<Lr9?i~wt8;]<6a~YO^-¼$(ԫU篘)מe[ZQaaKh/|:߉,<_|_am@ִFgtKuҭ''lS,$.pU4){RZwrMvT]<v[RWW'QRKR?gtWk*^uZ합n-CŁ2YZwl]&>GYGYsF;neMM6Iƅ99JTVVuKHN^Z-R{G⨠M_7(IFj:Y;P*\\B~[T=:5XKI^ ~*9[+EZi익P?p'O"_M9-&մ?Q<[̂=g[+;#\aoXyԒw'7ZݵGU6#puzm}nqJuIx5YV鮣^K8MDm?QIfTMokw?7+$n6WnնWv>{<L&mwz$l4+@.gB.OYSuV{${9bU⠩N	j5&nkgBaÿi;TRT}_uw]CHWG<}S5ƙZZxZY4k0"cIF5߉KV㶸xWȳ,f	XJ)*yէAݫW3K[8ˉBXzi֥VJUkmlz xm%j^M &O1kwk} W:h&5;mWDO`?sZ*:9j:-m(˚2WMI6ai*t,c+Rp:8$꒟3NZ[W5i>>S ^"3#OP;_~xkG!ѵ/|A77Mi-=i߈~<\*|2uqWQݭ{.f{\cQ^6Nq3ZVBQ^	Y-5mRx.{)+OACޭE:ԺV4:ji\:nXw?᎝5O*m+6ﭮz[OWPUڊZ6G6]IZ=akL9#NF=#>&/Ҝu#L }u=Z
m){S_xVw{X'uiflkvMMBSX_ʃ,UKJN4ٻ+ؿ-[]/ؿ  
oVݳxo4
i&]tM:
\Zߌ7]dizڊ%
XZ	B\U⽤nܕqZҦY{/|ch<Tc
^pv@Al>f!kO<U֎MV}NwÿZ\}o,,Mḿ7LMk&yuWS[i"RjB'>G5't-կcxe9?aR4aa:_e+Uc
|ߺZ4 P e(ŝ'7 ~__^Y|CԬI}:NeҴcT:~mk%KVR	93,bJV%NN'fV|CW|T<KͲ|64e	Sc*RbUQNQ
usW	`xg(¾i^6|)'DxsBޙ;ھwWr#Ԥ{͒4;OV2թ*#N	F2RWmV#pc<C+CVuqV|۔F8C
.\ӟZk/8l.t[jZRG[BDQArJI/y[_WƬpdӇ5
T$W/~F)9Loڳ2ZR'1e4fabrc	pQ!
7mE[VMߕ_m]ɸ> !e<,ōJ(AЯN3oG
*}5:/h#ItV|)yqY[TI8x}lk<ᧈlu.XE:W׫r'y(Uo x	75(Uup^SNگSԕOCws~/м]xNÚKCŚ~ m֩mrXcvl PͣK140ճ<{FT\N#Vӌdԝ[Hxcù? [bGP	ӍjBUc]GތݜrMɮ^,<k~S<Yes-o᫋{\SnmG7NS}C+$˲0K5jrD=J<MJ ՜(CE6%x8xXOW,EX\E<W
8aFT9'RRg_`ῌ^&7?"^x>K<=-棩9Gk76ڄVԸ8R|'aiWK	B>!Qx74"j>"4즆z)WգSUՅ?tܫMqqMFNRk_㿈{ؚ_ fn|<xD{hZ敭wz^5GJQ-Λ;ɫiI ᪺sQ\ܴ9ܮ*wwӕڲ\7%Yef+.~&qᥛ¾Y1F9ԥJ4ܣN
΂7FQ*\=IGiG""$)Vd%`Ƣ rVg{_]ǅ'͛8pxZ)PT#Iմt.$Ηp_ͱ@ۡSWo׾J0UJVi=>G 
CJ.-M+EsyvwԾ+|c%k&C[YT0=8Jo(qczqR{[_[S٧	/(NhӌN.&NtsG|e⡬^QmW 8++kx⍦h@Py$,"<1^yJfojaZ^ri9BVSMѦs4FmSryLEjxjmEHrH(%{YnUJ"<7?Y𿍼7}{Y<kfտ,mekko ZA $Cf0(dkGS1؊6Meu*w~[Eў6x/Oivsga(TT)\DR,g:sqdۻڜK9g|rGy6.<kc"k{-WWi͒^kG,37Wzxdʵ^YFUghʪYTvM-¹'&T,*Ѣ_ekjH<G!H)@^XI+ŊkGTõ~qiQZ kUWF`+Juk-7ջ է?f?Cu|%<[Yy įyl12	DJf[EU ?ja[qk#IB*zwzw wzWM&~r3cn'ݼ j$++%
Ϲx^.VD[ʸumSۥI*mKe]NS87dG5xź'}x:-u[t?_σn$ݼ}N,bԼI7~渌w7.]VRYdbinK>eBy<:哌9WY
8c	O9^FVJ
t)UrϯVmAU8旤L ~ t'|b2|M - h_|{/_ifCk,mcQ˰ѯ֖3*󠗻{:TcZT-C.Kn"ؚ8Ҍ:^S'_Rѧ'Qދڏ/|GoMŞ?ԌTtUr¾^& *^[|߸j
nsh?#su!4ψvZV%ѴK+)2nsQFWUTpL1XՊK0Ko;i<3&*SJ/E`Nq?\uOB	χ_Uけԡ[y*-ۿ< [ꐕ҇	?j!_]GV{]cEңӼBɬZ.o亁;*	尚{˯B/p]9SU{u-X9.9$1xa`iWS!5T$_5_5WwQ wd)&V 3@Oksy; hqXt7-[+h?koմ 0X;9Z}B;q3ivMcskm|a@$Y?1O'9ANQi}MRn7N,LZV}VGS߆:o j:W<J>csciψ<M]i7<?in7ƳA+^!{]uNNlf#֧R2b*Ɔ	
+b+U=*TG(yن&x<4S*!ZJaM4&ogk?ďڒ?_}?m}Qivy/^m|^Zڦq]7In<#KXAvVx_^xeK֣
،d!Z
%0ZM,N%Qo˾7-j}qg!W<$,҆9Ӈ[77+Z h `Ծ=Oд47BCYI!uw>h@u}3OG[q$j^juaQbVTra?f$֞Pot"cv&妮Wv}qwx]z!dA#ᕒK=F(Y
\FΣWڥCq~P^\kV趭tooM<\<.^!4q{fKJX<vN{-P:kFg-c죜U7:+҂iB6GxfY_Wy z_ti~#]HuMHЭ5ķ돨ݴ7;oތb0Y&rkks)I+.X5((D}G
>g;h|mb|!jg"9ـЪArX`RkGV*ogm;ݏ
 ǟ^x<\|iĚ}kN
<U?v	PږXR;Nh31G[O
Q-rJ+urvM߲>8V/
u)AYβU'Q&F7jυ?c~*_a}+_[$i)p~1^;y /%f*2W	7*IIEqMj}auyT4g_R~խ Ez˖ ?l>x᭿+LY4+|<֏i_ޥ!tZK(VԬ61R`9NMb+b=I8޿-Zw\5n2Z}o˽wrxo'KOY>t> )ׯt:vƺ0hvjb{˝CR.5XY2&_xD!zQWJ4Rugez>.i,Xuq*䚟MFWKj)xr57.:]\ڥ٭i4̱L,!q89*RGI=/FZ=jV9NW+;+7 :lx}~ ՔeBuhF! 8c/w^zoa_?_O)/m-NRo~4k<ԭ"Imjk,tPlẚo(zXZYViJq*sԼR+]c8bfT-kJ8s$ZW&z]|߇1ioEΥrc2rӴrEk$;v-[;wH#ɳ
6+]k ]/ƾ߂*oHk5+)VutYbK&dhI+s1wkZRQI˥Ox>
N*JPſuE$IgwͻWoecK^/MeƏ ~k?]wKŚoD//eP%ց jon.fmRUJPT+)ڗ3WwNNk=*eQ&IYzk]  7/)7[/?fkOxgYyaw?5RXo.]n/!:]? ue'J3VNNSc(W-쮓?zjFO*/]ERP5n"ޝ'maM)nM\X\wkye*^ۇocU­(ɧv#nM=8k+4~y(A.e	4}VFѭʯ>=!!g?itfK+WIdT/%^^O$L6i~)s.I>hN\=y~KEhʩ_Nj>4ޗ]o7iᦳ'{in"τ|:&Ey|ErE~Z+SMԛ}}4.Wfv޺yτ7x
OxkQ:fLּQkJ_C~W(4e`5?PDy.FX^ԧIY^BJtw}bXF<mrֳrMO}?tWoEP95-S?:dW~^4w15%U.-.YȿpfYRTjJ䎑tWKq6Uw/ìMR#Q;ߒPsoqѶ}*i~zjfxB>(G8.iO	Xx~'-x.Ol;itMb-~n ?dDc(QOXn{-e.pnU:rmm{M>ѶOA$ڦXԧPrhk1<W")gRci	rY}҄S)њj'*^ZKrrV6Qgq_&\DͨM8:;mc{v2Vk:n|;I޷Zi漺7R7ynKt۽jߕ^5|mRc.2WogRq{R#N/
nn yrl޶ܷu: =ΝXk]ϦKXMᛝ2Hxolu-?O{{?eB㭧m,ݓzls^tq<Tdg[;>*j_?g+/jzsڛh7Zc",5S4)HO֨H PnWoTI4f׈pWm8[kkvԴM=e HhM*[q eR3̳* +6ڽrI .Y5]>]nu񻷟snZ CջxSN	-SI85U/<ދ,N[y"+x.6aov(OB-):gF5*"C內SNl5l;rEmiʜ̟9oQUд]R),-'MpY^YqhBќ~7b4NJt%
>~ђRSS_=w+=Eg7Ut|휲*٣2H|DkY[G[+oMJroO{վc" H~ξ_a,׼gz}XѾò@6ZeZ}2MF()[ (|=S&jmѨs.h_kٵe?N^ivivֺ^iPEgXXZXZ(A0F*es)%dҴnVk[8.JӨ9NNS{Rmۻz i m7MkE5o|?̳~3-ZC{l-vVtai짷Wdd4s"Nm/hE{t۝1^SΫPIu5DfK]u>x e+x<QVk֧_˥.*=N2vw%݂# E[UsڕiJZ|vkDʻVvkg
h8G^-޺ֱ!]ANo{5h!^ZAF<M^5V>e*vP岃I-^W}~Ԫލ+g|<\[:iZ,N&Ew;%ē<$3@L̅XD\!s3JֵmJU{oOF;KaR erɭ+Zz V=]g[	N' ߶8Hr?CX?%OS'zgi\qL5;*Ux5	섗mqpmr5̖ͭ)ra׵9Fr֍H%'9&+EjJjM:-&QVusѴK߂2Ő鷖7$,}3U61	Dm/@^^a@YjwӪ t7HjgROyJo^TgbrL5VNj*ZP-#tۺID_hu |d::}-څϤ_]o#K:5Ŝr[Es%yԪΜr֝NV%?8?+Iۋ^~+k^O=0K?K{ lxzKj~B͹I94odR_+~;-x58׽t?o"gƟ|"HaMCSX5_=3n>/AEl4Fx'TTIƜW]_Ab+ѣԫ
Z7RjJ>{&~x?i?o>o|HN>EqyqG-b/[isI-cn/eNXe?Kn(%O]"e^'."P!7̩T|Np~K+Yai߶?ࠟA|$tK5  ~)7WR~-MΗCR4]Z썄:&%W}SkbR5eSR$ܔz[N(KN=cS޷2N2-=??ટ.\hu[׍4
ፍ/
 =&=4GQҴ16uMVXY|3a\Je:j1$k<ן&5ksC	))Er[V5Xa >i.) yxjZ΋DJ_ڣ_^@-N㴇O}+ڤ>a7UYrqi{
s:_B2V
RoG#^rmP[8#L?1{zbpV)F<y)V6~ >(xC g__;6_>n5> x;^ak0Z\x{mUZunY<V~	[QRKk14qu2kVR\zѝD˅T\NXj)B+O.[3|9d؊ne)UpRsPJp)WqT⢤Ow	ks |W$ڝjznVRk6za!Xgi-ْc*3x=v!ikejqJj|
9tTA+˕&V9FW'-Z%H;GuXl[HtmaA|As!5Y6qNujs|ו>Zm~K޻[~K>8ѡ	Ӕe-
?iZ_
%9^R)6?/-Wy~ӟًL-~#\!񵇄<[)mu=__oqxxm{QM['j 2CMl?'GS
KK:e:\MA#q708Fgq1Q_9U8J
mrF>ɥ*| o<?ᎍ/߰>o5K,wTuw_=7FWSh	cY]CH^-L(hfԩ*bi<F&JRb
cNJiRrI',.-Xң`JӦbqT_T*OB5̡/F|}|+׭qBI.[.\*YVKxVѮ%u."FJ%(NRkJ<VsK[J4hFI]sYO?"G<S|a}ox/.ٵHIoំ>ΚΏs ҤI5Gn~QYtiU0j>!S.nmH1zM,(XVJrqJ6?fde'tVMY_	Uc|,Ҭ.MFoz*)&IK}:==:ՌJ`O%UON۴hΜ 4;6]R30cjk'I*ݕG#0"?hn_!ľ&UoM'^>:}C>ѦBd~xT>*uR:u)to%%ǒ6GRs5T0ن-OjYv#5ʾ2R.杵ci%_ TzD'GL'Y04ȬA4|U}I}w\Ɵ&k-Փ۵~0v/<N+ZpM;씹q7w1X^3J|cp	PVQUfXD/mZeҧYS,Ԓqo/~_/sN:ݔ:U߳<eKi  goGM旬jN3VƝ|"x$,<(:ա{T՜FSIh >gtw:1դ_UpЍuCOKQ{F'
N~?'?>.ml<} xT?qOǖgm%mnm7N-/ѧQ3\feAEcTj9$~b4arC	GHδʝMhT>U/3I2Sĺ] =Z]k0Ȑ^Vq>4[}FU6rUc別5U;hc6uʛ.ۡi*n*7J;_8ڎBg0!f{ma|.Kqm:o^k MrFhi뤘H-,9YUPuRZkw+t}[niNNmK'~l	m|}k[YmZX'T尕X1Mέnk|ٝZZ~>QGU^c	!Ꮛ? wkKޭ 	<zvxNmv}Yҥ׭lJ=Ŋln"K{X*Xپ%E}RwΦIiٴ)ܪ_D|{>,7|\x9Wx#~N|gww_U<]{y}yEP591q'G蚺]w?]	!qn2[=_]ǟڥvn Ójڅ朅m<5.%_&Hc-oetS!
s^զԔvMөY[R"0[kקڻ_^hH4Lb,IA&˂Uʙ5v̔VZ]Őa3<^iXK.e,UJ)*u/%9'D|g7;|O-ͮj>-t󤶸|'^r[Gjί]<hgpsQPJ*5*Aӝ5M6oK%7'
8<8rw֣On*(KU}6*?? /tO|awں:7,M_i0<[Eٛmْ2TWN?/̹aELi}#N5NUWZY=xOs*Y*ruPQPSJ>#6\>4m<A3=6ck,
^i\lc H0hƽ4RN7~vmkv>Y̱9F37OӔz1|23i7&5~$C7uB{]]02#I&+t&B
ЩJQSMm'u},߭6f5dT1*j
u(-o();ݛϨ]K6z_~O56O]"-_e\,,z3}M:K][H6|Cga+aT2O`2Y
,F`gyJϚ$?/hK%̲3g<NcRU*X8)rNя4&ΜjAJem_%o难uqueixOMbHf[1̑Ɔ['3k&1$qsdYsl0q,%*(B/]%JrNqJI-#IW`-.**etpG?Q*srMF)~p|EiM'nak_x_xAqwqq]{}ΠPֵG]F}v:;F'wZtXU8JR^ڌRquToh+^N;0=nme2`T1Pg(Ӆ	Ԝ'R+=IG `{Ŗ?½sǾ׼9ƺ5<q=P6Bڬ6Z>kq[YCb X"]m^N-Q)9iTeÏ8(-ɲU1oS^	BSӦ9{*7IFugH b?ॗ)7]COƯx3|@Y?x_S`PKkO%d%5̺ŴrwydЋ
2QM[TҳMIͱEX,
hFcFYSN**	.j*4eu.Ys~տGԵmG7.@jZbJ"in.%bK+I`>g;ΦM=,mݫ.Y+ WR~(T僦ӴCXgv4|3BmLnO)CA<޼zPtE]?Oغʶ*IŮ 4 8ƾW eC?߳.Q;^!M4bY.P/|ί:up˦	Rbg(ANv>$SF8ENSuJ҂֊쫳Dτu]/זl5ƚ׆4;z+:乶>jϦ<,^4WdX).[VKQᇖ2jiiY{Kt
No̯(N4)'ϪMV|-O ߅<Xxݬ.-'W,k-buInu{$é6:ddeNª|N.ZSW"9YӼe'm׋Y
?brloT0̪J4Rt8 ^zbO'9Ww'|xG>>6N>OtH.4;KյgN푮5D
\7&b7ӫ-wQEĘ:sU49Gie`.=B./n%XDfHXZFl1*,jT-;4h3)ԊrRNs'4۽L'Ŀ+="-RD_  {I&ldw\[[o'_FA!R*Վ|,t9oN[hiVJܻ֗=eP	F+yh|Tsi%ɺN_wzOGq݅XXeXA{ISSdS`Z6 OC^m:>2j?tJvCÃum$	
ziA)5xo~mC7K |e~?A\[wEX\-ZEo Ɵ_ZG~]*SFy],8gVxfW:ܰAT	(;8*\c:ugfŷdό)rXyVxW8Jqc<F1b;ƛ(˗J.|@G|%eM"o~~ga˨x ~*HX&+xc>(v$2O;ZJ ".W%*p\vѷ*ӡ
=}NQsնvH9ϳ:T*Ru熣9Χ2R%nTڦ{4֞vGyx2k o9سqqc@8a0	NcGHm&7DفRf>_]?kFߴXۧ߯}Q&MIi캯 Go+U>+~՚jtb*a\C`<`
gR'VJx8!d4ih= X7138?8_O5^^I5k IodWOkQyY+xOVHuei[}B2xyEyk{v-L7ᝥjU W[yfE:NJuݺNK[ez#\lUĞ&ӔRjg{DY#wa_qeu|<_JOt]]*j9㕭Wo~skCL{dY-kfYF5v_6C1N+lkIZMjaTt Ϗug7XН9]uxm9HJl'1kP5UZaY++;{>os̭Ki~<S 6$㛏Z䖖heԾmkT3WJL,S2Ⱦv#3XӍ`EɨƬd"9B0FKERQ_Y=?c@9IރX>gkcm-dJ],FdgfidydyׯVYNu*ʤrzk.ֵJQRIi驿.>Ko*<mqw<egQ fFrQӳQI?[}ڽ@iŕޙuzZ̀Ϊ89+ѫ	BJp{J5 
M_59xi~iTYcMY`]9^"[}D("rgٕ9KUQ~n>*F72Oc__ĻoZ#4-[MZ1!ɲK QH?Jm},Tu+IJ͸'~iY&MO|*<;eaw+q4:,hإ$XѪ,eefnjөfܤj}5{~0EUπ{?xImmXti-)%:omC0\!,̐Uc,b*jԻJܩj6 =ojBӄdQZk?S<oI?oR)!_	^iZiWk׭'՗RatNNi⸞ʍdTJӚr<ʞr˺[okMRkOOC#K M~X])x:6Xlv.[vx~!Ky6_f*nXYK:t*W/FrӨg&3gzӪZUx>m~$*nˉiO$h%i"HmhcSI[`STg{*VSZ%wW~KQﾝ/^]VFR19P]reMyoum?S#&>bTcܟHϲ޼ B|C 
gx@~OoAaρilkYi>:izmexYVĖRUR|ITJ:ůE^VoPS8ԧ/vp_qh {jݥБD9ݼXA`џnwgfJ1$oӭj~BXKIÚ>}KG{)GHwy2YMM9b[o%VVy2)wzj;jWNO-m= 4ʑҕ$+s;y? ht_ýdߎ~ <7$i'>0xsNW0}C<߇-%mFQIB/!/2(Cӫ8+Nrv/ik#[I\<ӪH)h7'.{>qW<$&+yJ
^U4, :̦{xAޓvqPllB6~ҫ<Δf*СYɹs8WN˚l#~8
yf+ܞF1=9Jvl+-+LSZFtO,}3Q/bx)V	uk	[{(We$뉩SmNIF{8c8%m]V7OO7C?qRմX#(eN15̦[۾#̋gqFN)ZZ[xZ]tצܛoWGVu{O Akw.{;X!m}N+M_T1B]ͤjIsUሧhFKIZӽ8+."5њ^2J}_?|+g$V͢6wjv.{fE*noZ#QҊ\i)G;+I;S r躦dtmoǯ8aMjx_;I:{OSgҠZ-uYo/7VWzej:TPΥKS֩^9aHEOP$A;e>#\KOsQ/=ofW|ե)(\^2|i -Ҿ.Og~:Wĺ/xU񖹦]`$vZέ,o$i< pM_u0XJԊQQnR+;ٯulK=0yG6NQpa)*jQYէNpx쒗4]ծ/N֝AjFZxxA e2=&s`H$dU(ыIK6|Zu`J8Ѝ
r$!K𵝻3;kx/OF#Ү5kB]FgѵY//<g>
j|0Q[Z=lvwN5eU94wwM&ލmc|8OmO#mc6:fkx?p'Ky.s	
*n2Z|x!J4Z׊\m9^oWߴ\]ZP緰mcKVbgo],̬EK>o/S_m4M5,kӢ?6M ~o ْ(?'H[hf_VITm4KT;4~LOJo/[oyk>&eH#XNBB7)TmD_վf~|ou>(wQ#49m'mɆ;+RLf}(݋k5vK5WN.4}ԦRSJhCVn-[[ǒ\9CiKGutѷoi^c!ƖUW~!J_MSpQ_Sj ݨu P?W꺩ۤ@%bc`<{qOW;k0ɫQprIj[և/Ck/."L"Ѩ_݄[ym>geMeu֦޴Ttx&aQ{5,t$VGE1u\)gHF l瀗$ X7m7ڷnY8*jk)M[7wdRSo ࠟ	d BMxS/?
ovZ|IQR% .ܳO9_8j)]5ZoϛmN5VօEzk<V>vJ+x%̳__>I٤㵹3pgv@IoOSw>h\M7շwk|"Y,Z7_wox#wa{SPMOSf]`3K#Kʯ0qxK$.Koh.ʹhN;[=
Hmm찬lCIy(ɸn.OL@
2oۢ ۝fc41/71A e:QU+o^%Wr cݺz ⰻcV3z+O$͡kMkHJuuRO٩K͋,A"\*KF0ݗb'QNb0MIjN2Ѯ5ºjNp98馵}7<N|E>?|:BluE/,-M7F7nm;{?ų܋>ERӍޣgVhՔO6<a
KͩRQQ|ѣ<CMk5%m2﫷h'Ske.7"oQ#m.4oci668O"YW9^jN喷Pq`uxȤ梹vw__ief֟yx?A5kU4N5]RYaOT{˗3ݓ]mxzJuϖ8.fedChQVQ`7IjߒGݷߵO<_>y㟊ex/> כh<9bB-dAa@/u-00r%:Rr^|E{|ծ}+UԝU:4UHя$^OF宍[Rf|=Dj~mxoZ/kg?|[Iּ5s-A_[N:/iDR/CغzSq?ePp\ի9r:.Gy ΝՔTz*u9c'{Ui9JTlA#j,_o| gRi!e4ߌ>1x:uxc6ͩ~p܇tjbii,uZT*ҧ(ƪui\]iE+|U|.q"N7J3*q~GΛ589uO _ 4~4/ٷRhz_>5 /~KUW]b},kxTX_Uk-+%W2pp̪U*bq57۝:8-7qISTk~<*)b{*J5*N7s9BR:uqP^a_'/iĿ =E[k?eף Ӿ)X ZZxn«sB5OZR|E_xù&G<c
q9y9[(pG/~U#y+Qb~q}<.F/W{(cᇮ/N
u&)7?d٫7߲ 6|*&G׾"zxw~!n4xUom lMN Y, O8a1uW*uWsHp\^	I^ݢ|?Z&maFJ88Q
z5S\*SոWWQ猔/Oco&x@xÞ4OO5#Ķ4O[x{J=TD<Ajw%֥:W:IT1NNnUMVSz1r,Sg'qyamJЂa"K?IbjRc;Fוϱ~%оsi^6ymxkh&]CDY4fY|Cykwe5z}-:(euDL4a\R0˚48ԚS,}ȵ9A*F|>>IbӝDɫ8䣾;>Voxŋ2XT?ehn(x/㽍<m[VjÁwRq-%kx:;.K^rIWuFQ9:UBpI4tۇn4''T\iΌQK{9JxZp\eJNxJ3WVhoOx'<މxZS|>F}^PI4xuǵ]D.QC nmUxZyv]zu!ZX,M΅rQreSi[[ƹwn0F,_9x<.QN2i5✓qG5Vh\i>!oe[ydҤ6W̅K2'V"`ͨWQ)IKKh]m<*qRy~t Sx^/+:NԮ"c2+feioo'pVUGΥZd''*3|m6ߥ>5(¨WF/fmK+>s׿~>Ӽ!|K[_	kxE.zݾH4q-xPѭ4asEnھyYu(ʜP/3N-sEsF[nz|E ]ѥ^
#*U*3_W6T儹9ە +ym+?=G LJ~4?Gl-7P}ؿŏɲxI#B#`#UUh1n1$FESzEJq،0|.#xU0#%ZʢWB)ҢoeB|=<G}g0oً㯅:-eߍ.|;Kuh~7u_SK姈4@ntX'RkQ|4؟vҒR:ըRjnܫ9coV݀̥BwCSW,Uq/SBQ)_ER|w S~5x_5 x/ /_<eGw6_~$\OѦkxN_ڟxr1~Ӏ`d8זajEWq5n1~Ϛ2Q*;Qvsx3R`Հ+ՆBTXhJ6B*UU_d g#K_ǟ0;; k6Wz-Iii~$ѵP.II4oFQ{HӒXBV:S\8sJ:9&g\+2fuᆞxlnpF7< 74=FiI5ޞ)t+%櫩7J?kZT֮,=7Ě9oZ >KĿ>ݪQҕ/iF2jŸEG]ZZ4KkGQ.vM꼗gxNӼn'鶺wë{fGm#YyWzٮuzvZ~{P*>"NzmRuf֑ѵ%R=q-gg]﷧1|'|a5Xj^"5;h5KN[b4N9 -.mrlf8-C?Z%k^-.u=-~|Q6$}áǋhrx{;_|:@}x_[m+̷z'%4P^^|Weα&bScR	[K`׽*nP2ziTp֞Ie.z⚵㣵WO+c 5*_|rԾj}'/jGK|9xR謙dhACԯnvc/VWnէ_7MA/9JIi׺?ᅖB]6?߆_4㺑ψI:uw$:G}G}j_6ɢKWFs5|eZ[gڪWQned潒zZޟwވt4klJԹVC(cqo5<1ehcXW)rх:Y8FroUZvjrJ9jWFxf\qjK:a_guj~մ.nM"ho,[-̃V!$?:u(U}.8xaMʾ:CsBu$M^)	c3
wNo{/{Jr;JIs{zZi }|#&H<53ޝloKx~4#΃guT%aLQ9a^V{hWu8PӋj<f9T3hᭊIagK֝kߗJ0i^OtͶ>#ŞSAK,ZOUزڽ1:K-$8'0U>N6d鶶ӯ-lJrX|EH7Ohէ7y+K'}Ousu ?e?׵ G~~PG=jxOƭr-OZVxZ$7vw2ZWa\:\y.RI}Z*Iڔ%d.Gd<3(,֮X'BJt>J<&'$ғWgvm?	wÏ|:G?<Sw[ŷ7L.(\}gZ=}wx&eeYuI2pu.O}b'&!EJWv{;=Gq6WTdujE<faKhib[QSrEN\+}.q6wchZԯҵiZSX,ot _jWIe%י5l Kw988l#aNkUcܡ`u'	$ (;qDL>o3Up85WZQeʼH0MR$m&_%
ðͮZ-|g~,<[=-+~)aO<	[I}֛]zjZ@YQ%*9]h<P`cjB)[Y7ʢJiU//?؞̛a`%K	Rz#8ߵR};JSfc >!Us'~$|>OxW1|iccj3-mz ?m'ֺ#MuSZmhVgH&Fj (JS	umsԜai(RQ^+7_pN㇫F[eॎVpR*SIVUU%
S{*\:4e?|5>8Ooᗅ_S_ 1u]L$,7'4دoV&Kml/TW4W67 a}57)^#)>U/; <+ļ?B4iԝjU#9Tƫ8i'd# soM7
 )/5ϵ/o\|-<3j_.,f؃[K6ew|3Ǌ,_hߙf8iS΍ro_c*S%?iYWrn쒧ъIF1W|V 7W)eu<ovi#d̫(Hcf$bKQ$JZ;7^X
+Fu")FIٵv{3|exj9_xcNٷ%7<oǨZI6f5z߽l	JP^3)u }[V_ų> `0LLڮJTI<QJ/ӫ(ӽI=n~>)tߏ {GxS|e Gh!O|Pw^]+8og"E2Hm}7b8n3XeS1|ՠV6*weV|v:5OW-b!.IVkUg⟈4oQm?4 xYѾ$ZwoxD:嗂>!hk6~3u(iZ~]?U%jtp~μsYB0&%$RkI;O׽, nMJj~ocXմ[|Em(l-JxRtSTԬtKOiqFowӤtiuM7gZ{I(E{s]ݵn1zm\#Zx\>_ѫQt}O}Ei}V7φ V:BuYnKa3ZYk05k2r?\ϖi=ﺺJם1vj,SQmC?~4վ;~ĻPc_oZ]CZ62:El4G0(A6*PxxB))Tr9o#3ucEV}9aUFsi$[UImk67AY!,$O$ {⣥oϜQVjq׾3-Ⱳ lLqϷ{{Hߒ2v. ,CtKD~/{/Nw>լsWz}X*Z-YƎK8UBzK}}׻v U5{s;Վ_^^m
}'YUC5˻H;ymgHdPh©wep>!9*ن	Ziټ=jУV[*tcϧROդRjKU͇:ʜZIkm`𶯦WO[:=E\x;Dt-Y+{M;V=V\^]-0}/z0g:t0t(G_`u	>[Mv|ُ13LNgԯ
RFpK(5Ԝou^o|z,eMB7DԵͭ܋H0GFʲI/<KJ8K~Wq}^]OظriIomlv |񵯏~xn <sd	 FQ][iBNw9}ߺ>K,yNS l}_)( T!NZ^?h/a a*}v>꧷`>!ϕN=:iMv]Y|0@R4VX7<2V]֛v
Y5Ko5/[goa="_jO:ni<2OdklXWEU֗r>{_OCrҫF O˙^⧂#X}AA,Bg%(J2|ڋ2ej7<REvv[x[<XIevKe8HaV/cQ_^iE
z|I7&JV]ZG=\_)o~+x1Cy>>5xA+¾7֑{&  mb_G7üɈҡJRZJ1J4JSaJ5aoN:*TB(9ƅk)VQSiTLtOcOIo4[ _x:Njbx=uK÷vլksgʲuj[JimC%Uѧ(9J2ʥQ8&d㉔P\O%:QiFRMBrj-;5{v h//h^=xOo&An:Ե}MMO7xþu˭.:qmɌʢүJ~uc7AsN0:r)t絗7|ɉB7($j_H7qqjW/>{DzՖ]h#MJf\#4*
FpT?(֎/NFjG+zu?]x |Qi
X/{H薺14jycksl ;kɓftԪKߊoW&z=UGMm?=|# ҿbO<۬A<!o^ŵYBt=]tgVIsum&p47-9%~
] C$dBbef,T

\  '-y7~_ky`Ӳ%̒z-{nmG*IxZDl zޣj갫)b
'	ո{0vW'	-^X3J
^S~+G_Zϣj\I^jmݤZiCu^ڍg%ݳ^@*^:#Q*%]ӧ({RNۥ噥K:tNS诶ֺnZ_*u|Egx-Sn$ݯq~J>#T^I}iԃZw_qs]ZJ)><r)Je8OGm֝??u )yWL%;O/הּKImޜ>$W-[mjS8S璩FtN1唤]mffi_IwNMx1
DȋPƪj>EQڪ> nMw f +vyD$u9 ``ߍpԍ-??{^oT q=	<)/J!{-Ktp/4|gł_݋	YJr;5pM8 yZ;^{_獿=>oHs/4K:c<?xLyxV]{|[qhح qj6Ym{lG:j&=mi|-%ugz~|n |3]*6 EƁ-]Lh#HG#<VYU6dd4tNGUJPR\fydgi&Y?nO'g6[HׯƱZ]&[F/o5_LUOY>H$Z#|.cU9U#YSI))*^vI?U{C.j%J.Mqod5χ1ҼQO|,gi2ex]텾cm,im5VVlxJNkF*L<j-ʤ_2	9+8˖ɦnYSMhf{5}| |Iw3kyfQm6YLc W*(AZ1jVJ.M%e(ѵoƲxw[oi'u?8jGVQly[CJ6kiEs/;oc
$.cMmS	ůtwBo_|.([omwMc4w#Ӵ}g"Bw{5u%qN# T\:sI>'xc'ͫ#CV_FQrBjxɦrO+8*F#0mc>&UK@9HR&M񏠡ST		;Z'=mf=|Eӧ5vi>륞/c-Z$#E&qoqo-ۅӵ$M=OW2A[= }&]BXƵBpenWUs3uTӃ:Wd+M'm4 |)ۖ={>ѭN}k&e֛mZD6bt+њ(cpQgSGJjQ盌i͸˚Uԯng[?d8~hbu)yҧNRNI1PQOz>&~!BcNomldMy"`4DLnnZ`;yLPFyi,ƴnuI>*|NiNZOVenfٿ6iCO)moVrnDAM|1E=w'{۶ZIE>U} '/SԴKidQbVBA#d>qb9ݔ)ʪEe+6M4_.ge8IRR#ͻѵm*xAX\*nŸR3HFnb@#nrwoIk^گ;E>]-wV5?xSai/J
Z_Eq1"$!~%TWJk~K<m-ﳺv>[Mv;Dҟ\ѡ[KX7>V%\Y~eT宴<<mE>vu4WI9?5 _߂~$YMmc=mxgNHbcfEUi;`xnoRr7⮥ngl_ttz,dkMоCY%MҒVHҦX,K}M`rU`!Q_3LSE1ַ=y֔nSqa̽SyVk4h64+[̺Wm S4ҏ5JKMw |J5=Tm[>#+ ]xX>|9Ns-42I5Mt琢RޝxյbZվ_;\ ^FZ(&^fyӯ]QDi<4$;c%B7A
˧QKMޭk$WoKmЛխ#Ijޝ۶?h+h<1xnN񎛬$4-vZR[<B{Y鰾Fp_[z'>G7YIi{JJ'ݫ|E_GƂm;&)H$xX0y谞qWm_S\ _',ir Kqmm,NPn {JwosM:7i{>6Kv9\] ik|7A%_8Q;KĪ
c b1nf$_e9.wOйv%[iQ,LRQ̮ }58,5$ӄWkJ] >5چ*98ܜ6}My]n( ӹi V_~>$xGVyycgQ-֞-giMȮ6pT l5y+Fr_FQif@2 fRN4N<4VzK{PCt
3* +VG7Q,O#חFt |=v̈́f;R_.Uʻm.L7vEq"k
rJ|ۄ㣷-Tū>4;_p/}usg ?ň<y?+TW45Xɧ~LuXq"TuRE	:ZaRj(҄0WYJM$m(Ů˻<|ӥsp)~qVIm~|;xWͯ5ɆG#kkm&PhodPmaM oѸg+3qU+V+s6%ezuyn&[,]hҥI($RʗM''7̮}o;&OkڧM⟎5AxMkG?Jǋ4|ciWλw'eԗZK=kx43RTRgMTV#5ORr厜\MR0󥇅YU$eYR|Dݮ)(֖sZR񇇼3y[>#ޕRե\mΣ_&GKqT|6R$
.4\lVݟ7S|NihI)9I$mxo' O@ kYSߏ<!}N#{m'D[K Ӿr4V[h .|F5MJ+MW_+ҡO.͡ҧngN*ԹNJZrJIGY ??Ǿ=[ȟPԡj-R<][j7fhf}Rj>)OMB/veT%+'IƢP58&ߩҺ`p7
taT%b>vݽӍGP 0<7㿇*K{mXxw eukY+j6GYuxI𵰒Tx>ڮ*SRM)Fi5^#q6'<g%r9T˲)Uu%GV_M7 ue_xj [>5d?|{mW/A}/CJ T&-.k;uo_]}
`u)סS![1W.Ybohsu#4!)E_8Uf,paԅJ)%<F.1jqta%R9Қ.|kYS᭗~"|9_ռ3MZx]xHN4?YY\Ews.xM!ѮMS]AV'LgJӼipT]D*rQPּ^oRqU#BKҜ5
/gxm%??89xOÞ)S5_h=SS7|c˽JR4;}
/'MOԎj֭c>%BN,	R|+B7)iMEB'w{|9Vɲ|Y^2*i!%iMSc%Sn 9PUΩ
ָkk>ubI,QKr]=I/MҝGNXݩ{(}6EuoorHQϰ<Z)eJ]->]((I}=V˛SƯ$MÛd+[KJG,ZUy2ȪW9,^'F Z6OK]Z}nRi5B՝K];. |q= <I`}]ivmF Ǟ;lZ9-+mSVZ(<&9
ysӏ4amzIۤvw0jF\:(JWN^iE]8xs⾕O<A:|LX^[Z)5 <9|3K(C1qE^ZpJ_Z+m4ҵxw2V7<r`ML&)z5cnfW*mO+ч_F{i:ôW+:x-K|@&#<e/xgPnkzYr8{rz^F֮7)WQb=hUჯEa*%FS7CؿG:+,ONO:nY񵯈u]tC/o	j_&?Z^f@m4䁤!qwPtj:Fv׵\=L1x((GR8I:U0O^>PoQRpG .<9DiU| tO^OwH5B=_[lNѣZ;/& \vQUNmVcXPi'5>͸<̰Tf!TSK	aNN0ңOmov&ᛝ
z7~	ju{M~
4F4	zOEK/0SFaQrӄ!iGU%myx7̷kYR~G%8'9|Mº|FWLU:ycC뉤F-=i _ݬ}0фҪgMw+nݢ⟺WI＾OTqWThPXxz]x~C߇OK4ͥVWzx[WӧҾY+CpkVvpnHvw;T
n?Mjzvew/_;85xOㆲ<a ~%vO<SqiO|8K{M'Jo5/j~*N騚TiyU_3dVF?IԔQ+XO[ER]yt%,\#k{GxܛVJ)+-TGcS)_[/3 σ>!un|ZFj6L'goJN=: ė>D"YQr%g*ӏ$.]w\Ҳߢhe6
\<BS&m	KK~	N 3?P~65>}o閾!Qu-;ukrI+*QDoе*TY/zN--F~cVu xW;]-w<EsCNtԴFK>xlm6wʹ9@TI vt Z
P%Zi&){XmNlyPJէRN3'5[⦱Ǩii>	'^^7u5օ[ۻa]\H#,mlGw?4	Rfn]p;#aKQ:'RH{G(E{_~q,9FaY3'N Sj5=jFϗ\k~z⿂8h6U:t\X[i>/H"F-페N'?N{	Uc`(']ƄlӤiGgpU{C<֣XyPETjգN:?www=:t]6Bۘ'̉<PT*A*lBJ'ɮh|wV3ci)A%$K ?d3Kù4? |AyPjW<k_jwwYß5;q]@QBa?<rRJ1ªFmJuqm;ꏟ"ts,ƾc,&!%z{:ӊ/+'ծ~{_?7_O eo?׵yxnQu@ wڏOxɪx[Cm48i؞e¼Eپ[KNGS^q0tibutg;8ThVS{G_gt&l#pbq|,'	qKaOYQ60J*x,Ws'	^_|[M+*|CeD4:W_iYz_-g}nX5 _Ͱy\e*409gO1K`bV8{
էIUfը<8Jg2O4a<ENyJt89iЄ-ctW>xfa"ok>+كDYeT*JRwmk&}ULUjU*zZO)߄xO6|\qᏉ?	5=:.OՓĿ2;xcX0\GHQU3msB}ax+3ႝJ3-ib`Hi|ew`1Jr8zիTJtZxz|E4Մ_uIn/~|,kAxb i~XsI<=KoW ,sCWֵ+~ZbAmnt?hu]lG7FZQKQ\|N|oydx1*r+iR)˖8F2yIk
>3>Fuovtohoamoشεb6nmFOg-gy+k}{pX3%R-)7dwmub+ eƶ_ŝ6Z։z?|7ImMJ{y]#>';MtV"RүbBY%ӄhִGoOa^X~ڢ fVn]%}ut oPLK[C"]Ֆ-!1n@Msx06S35:q+/fh_ihf*YYZ1z#yM|~  h_?<Er6oHm/6BtBOYL5=VآeZjX?jfXLNFgG:T!R3NIΜf׺욽тX	S/hڢZӖɤm+e
K?S|
KXxL?~/}èj4rZ᮱?o/|vkK[}uz0ԛz7TN.0$ܽ}NV-ELFu)!b0)Tt-N#y:
0NT-WvH|7%?Nφ-qANY-|_iZއvmGR,Gm4eknPEWq\iBtUn.Y6v$qd.XʽYm	Ԅ)IJrW5t~ٗ׏4}RR[/č0C4!ǀ<KwF,o+lLdEs4=V2Nd{_nkF~%(*S7e /*^\ۻ+_ rߵ}?o4/$ng4k:7ikzŅRYj)-Ԇ;yg˛w3Ϣ.iU2k i [Awo I ekf{ ,:4$yדtX\^^\2z[>VIk%|twOw~,t[ iķ<"C}ZyS'mƘŇ`VJ+ԥnhݥjv =jmm/o빵_3x?<;bTTe1][G2FG̍i;b &Uz-oO!;jc|UC|;CL{iwK^5gX<=NFmR٧Ruo&ĪbpB9**Es-4dNw3
Ua:X:Uc(TM)'	iS_WCquKV)[k	~b=cLMĞ%o-u)\hWz|qGf	񘥈smww՜l+.NqJ7J˦^m,wω^cu|ךwli:lN>#ҭQVWC6\Cz3熣rԥ.mJj}oQSO7WodU	M3f[Y&*hc9%EVoΨU<y.vI#ﳪrFNTR%{l~b ??e&s|J_LȊÞ*Сv塸ƥIJXXkVJO-N??yMbNjUhb$:si3t ~k'eƵjS!~+ܱFv 3M9{5.g}kKw4RWJZtm~|@Eu7h̊Tu_X7	?tkrp_ceXI.|=z-k.Y>uj?!u[{|VoEͪ}i-?ld{woE)Y@ed|+ s	J
&tݜZiŭof֚MwSQZ><VM]n\Oi嬗H\^teI!$ر,H/_AS$c*j$k=R{Y7~{]ב_ : Yx?>)烢|)/Ľii|)
_m^-'A<7/'|U}qk-[|.>8zkքKU^Jrr#9UssS(Q\_`g=ZXJ0*Q9'<\ԕZ쩷7{4O.}cOO6':ǆ4?|C/OiO_?GNʺt1x*\8Ya=9SVTKYIkt:`peºqq;((ԭ'%5NIxhJxSе%o<MZ6y֓&O M-<CM*k:I|/xQan*WZ兔e	+^J\ҍI7g	R7_IJֳRJNM')7/'{j֭i:kRrKDyOe|rFP2cWſiMI˥H$mha̿.GmM^)4m{Bk}BXҦ	,ύRymϗ73
e	7J&e*rqZ٭WWK]P;4iӳ5~O
~7C=헀|] |+M4;VmGKGԠc%dmmIWhҨ*c9$r\ݷo?]TG.Ź>iӅ*m+J5+~~Ϻε+٥fbvgWA1vܹ:Qrjn f
IK]zm  f~:³|f.Z;/UMҙxG4MR4Y?-YsOOݜ>S7S#ةk6A&̨gק7|7WÿdЭ).o'}k^mj]<KsᏁڅ冥xCo:ߋ<WCx7ú\fu'Qx*!.T8sSUΔiʝ& ӊa3XXorFRuj;-4D۝w^|By Z>Ϛ	þ15h!<gZnB=wHmm
nXt٦u1X<BqcaF!Nzn
ZSox+6*sǛ݇pb15P)UT(\m8ݻ۳oo?f7ſh>Tk OGᵞk:֝ϊv;BM'P.i">rPcN7[oe:f8Ud9RɸeJ0AQN&aQ염F۷??i/3GR󶔶%޼ۊJi#~źlf̲l6(ҜU vg)0'-]jug+VQ_mS|Cdb흄fGv7a
"ʒ!_pѧ*RW{+W~& QW7]ͧjz*i:-7k]vJUt[kK$G`L^Z\unf,gnG'}:Ou~:ִxJ <_w]Ay/Xg7u)[TGkXiW3\~iŴcT
Xeʪ4k\\.?۩8ʌi꬛_FK>j_u?nMb LH}K#[F$C\ۼ/'N;BN-mktJ;ۮzq,yrLT)cavԬuKTofyG?>4sGӚH5+O;T
$[ylz_n/%d:_آytV+C~YΔ٩F56һݟt}[V9㮩iuѧh_} @ a/>Qվ|JҼg.jp_jg⑨|F.C	5?X|[_5յt{.uqr7?qR%K]B0jϖ+EyNdI$>Og9q)MFU!NrM%	kf޺wFW<%uw,ZBϩcPD~ثėMwn<8o-Z3%Э87Y%8ۥף<>.;[Is'}:h_;gOk^"<s6WRmrJF׺uMSG^M>{>9kѫVEE9':2\UH)^-ӗi&VksJr<q~M6ZmC|)Oٷ|/)eOx[]c?U{ZW^Oů> hVmiQrhm?N]:riኡRͪ<K4a(w]Z\7emT[aJU9eM҄IET~rͥ՝gYc0jmsږveԡ$D2 N_3I,\K.Pɰʔ)BVVj_%I-]Hbk)]תk
s֕\jA2$.6qIo;v]ӺukѮ95RVO~槎~!#_tM__e.Kl?eyW/}i+{4Q Ejieh`pUdH5;+ROoEklf>+=̰AV+F	.g!
k]lܽy%-v>uDN{=r\kM,C(h~_.kw;ftn[[~t-jm%z馷}SaFr[jAyƖ-*m߹uXe(UxMW~;yo+i Þͤ]mm 4,dD5(yyY!#2	%MF6%;r_յC7}[oN7]Zo[4C=yLsSV(;0P\#
?Glo=h~2жm*j޴@ʩt,w0\ 5Ji 53MNKe _oDFӾ='W3˧jzg;}[ӬA˪ZZK-<?y9tR\qh,Tx7%:n6j1ҧN)T3UG%W襇/eWQaVKN1r8^h&~=&O=M50i|FH<2wyjcxZ:9EMhӹNK-gtgY[nm<᛫DY۾=\ɷˏq~z̝8f8M8TbtI[+ލФڶӎ6?"]Z5+Ȗ&)6F#<()ŁNn~WgݝyΧ/{>]m%G V-;xcwUHu-&0\]CCeIϸ|yB1iS:[n*;[U^Փ^5(A˕Okw;wkgy.@αFEBKoBmm˹C)|ܺFϛFؼq|CT+[9^$4W}{Y[IM{j5Kr6I䁄X^15?FU+M({OM7tm7$kIFZ$պ/S۾|Tb@a.H
5d¼Ȥ4L劒E{4R'۳Z;_>-U%'f}ֽRuoxiu%خlSLT"57S#ǘ\4PUݓ^MY I;W"'
m\*;Ugb~VAŜk48PY=jx"W|rQȗԞ#Vr+_]5zO4&=]]ZƱrd $ [hmaʬp+D%V5ʚyWmkcb{ym1g	a7#z.?7_TN?md[ז}mbs^ ߪ=/JJq,A8qǯէ}Gk _ՍY\c18ǯӵsNK[+=p<ZZ͸r \Uv]?}	mjpwR-nmaY4HjpqsiKW,>O(䯢~$(ݧ+yvmc  &_pR_:mmag+ú楢&msf|g{s}!;;Z^캜p.eĹϖuPݣJ*1]nSեV*F&q Kv^nW 7|7 ZmƗ 	xF](kzi,	f..f-<<,ZBm,յvʿr;/WNKYrJA9PlMEi9<U7TPjN7ڢܮ&W>&g߄iosxMg/k?\λĺTֵ:&72z<iW6׺v-℞fpRa$N0>	(j5fo}?b'[jjO]{wq_YxwI<^vc])meyYWnwv_ gVժnU}_Fӷc6Վ&ҜqO3r|M:,	C?y5}VU5YV)%Ӛυp7	U5
6:cݭ?{'Ͱר*qp	FVI]Z՟Vs
s/:~_ڕ|Ju{ehg>)Y.{|S%W/qx[^_1Fp8ezc*\_[cU}:9Q)/g':zz_qA6zFoUK\=gųx/fGGg7kn\]Z41|cYȻinim\p"ێ#b0x9\t8j
wz߲Gq4rZYn#q<29.chqiI
1\sΥ*I3i  
|ck߶Tg^zizy<?%OϬ^j^#T絓v򭭼#TajP){:q9ZHƤ94ϋɱpJqN+ObPS'NR\慵Nm\\ t6^fDncx3<{xKK{4&<=k}&j:Εj1gycҤʾ.j*N<9Uc'&ιZafz֧BYu#)IZ NkX&M?;h~Ϳ* >7|Ii5Y:W:mSK]3RGҬ.	vƽx((ƶ^Z=*2qn?yk/<ͻZJSsV+;Vy'>^[{NX2D'D)*PI"3n ?3y;n;B|uk\_m-}gbyZۿa7ڭV:>2OsRcfYѣ9Frr5w[mCb)Ӷ%A<浵~|>o!Q4V-Z6"+qr"mcp?%[ժ֥Zj97ק׽}n.^0J\ܔr;-bY{l|?|ߌ<c|]dIm'w:k8*m/xV{p>/! l,kHЃqR^Ү.oy=5-.Xlw\CU4kE=-|]Zgs&s[qkַ<-cya,vdi%hҼIU7o]uo/i+/5 ׷ 
6˯_E4Jn	 5}&{ "k֐ݥܖhm8C]a3(+[eqֻY7AUc	5ehU}{m?#?m3GEL-ߊmK጖#CCY5Ě_kb\tK4]>K{;}"jeSLE?JSy=8SbRR'^R4Ϟ3W/iEY4'ikoծxVRx7B-ޫ{KUī}RUeڭw>麽ڕ?m[);-VKN3YДRuUj-{eԥMZI'NTܢM&Hʔ\nɨݫ7em ߅y.5wwA5ǅ6m_r[꺝սutMB#CӭϷƄ)(;޳ɻnWS.լyo+Z|r\ޥ}
*nSCn 5W_$V뫶fqz+nyiVio{f-F8)b4$coW܎n1=|Y V4Mz6S?h;Yxw÷Zw7#Í_%`=_|W(xd%е&dy]BKڵKn\܉J-ŭS֞)c5ks8FهwW~Ӿ ?e{{~_4n liO"J28j8]6zGmo}dte~TtucoDآ7:ciZtvI#]˧M,MZ[?یItfi'[T)EK/Nvzl=#j*w,xe\]Gue^?e\Em-H"qf Eu`JVejrOOKSxaqUJ2\;_oD?' ?l 5o$i>\7t-
B]NPQ}{k|i(2{bsV'Q9(rrlʕi6X|P~(mqRݡ~ҷhYO'ǟ6z4K ;ೖH]+OxY$,_][ѹȗ)}#>mpx|23R	F\єZsM-WEcs
_
xZJa/izngGmt ٟv?--}^.ymWL$kkmSCէk<9JӕyIF1|wn:kwGs0 YjZӄPIA-wܲv۱|Gw #k?ÿ#Zx2\EHjdëi^m/eYD#5g$egkOtצ q*lZ
v{7~VVKt +Pڇ~ t=Wޙ^_ōRռ鬵[/ilt#u/z/tf=ڶ~\l8&iPT\0Iӕl;UFtk	8JYC's:/8"qS`xoe
oVsNJHdJn0q ~.?e++ ĺcRE"^}ş5m_Jg:FmGW_Z><y{<Wq]WUO,fsJ2stIsPr-J^ZU9c,p*Tץܿ1NPS#9IA(ži-gK๿$^oAWӟ^ӼC}č}?:?w:U<.ԮsGmZZԭ:tm%ZTyn'w˖Vx(&acSNqMӪ7t8n?7zeeb*Mo]6|unڅwv4ZS/;j&nkrX;iMa)ӄe(utI5KO{U[|Ig<M.w.-4/56! gjw7,<LuiwZkiCW*UM P|ֶ+[Gmo}|{O#lkVw~{C͇?wxy]o5;'O<?é]\Z_=4k2PU^hlUIɥ)rӽՌ\$Ddxşuo}JUf}JMr;e,F*Gk8煡u	#1
JNWkw7}]zu#=RT(sҶP$ld?8$rH푎y䎸uA6­#\]ޖ> j^OcK}:]Ne{-?V]WL֧mx/Ì&ҵ;Z|L-ַ:dT
R(XTQ{I[0F[bh9cJJ5֫NQޏ?]CX㖇;:q^sXasQ=4x~_?hoxv(֢TF#gU1e	B%V1J<КR1|S+{9v5p;ʧ㈞'ZmҺM&mOg;Wд:_c4~kU:M˻sVZ]h$`|96,EI$3*u=J2.Wx%%(msKs8k	*|1֫jqԕjt:'{8stM}YpjagsxU>1{z5-s 7Úe#ީ?jNF%ޡ[[3ZTۄǧvϛO5*Xd۲PV5&ߔaI'O51σ?|C[>=<5xy.<q_L}6Q-!Ӵlm+or
0d,S+nk]5Nm+R2n+JJ}k}o?@f#L;O]+^0l ڷ_|?ׅojz%N<O*I]>QI=N3|vwMdOݺs߳zu 3u ~*KK?`rZ{--Ro
OZt"{M*nQ[YsUQ.\V.)Yi,l7۫~ d{UO&!Қ>XRyB	lbĐyV݁+VU?m*G7'2c:%ك,>oa|>HL4kЏ.o hR.駌ƪj1iӊ^qZUy'fMU};|1gC/wt`(	hu%Ia	(mvʹ*"ĨqxB7tS~=KM?"=.஍ៃvU߂~'A|KikY<;ϩ]JeH~P_VHhJNN&z$W]S851-rJXŽXÚi&WY4߂~0k2 _\X0Y\Y.8nao.T1j"E*nN.&v~Uf5jB(K[Z+[K?p ;oO?V&>loK+-[;mY5^C[#22h-KgrxTq.A=SH;qsÈ|E[(c0UJ*JTc	/$?_~1Ѽ5ia:m]u6Of]2R<Ŕ7;hķZƗo'సlLNeQ({9IR4,4n#NTlӇ*MŨ.QgAI @KKßK<k#V7+5֣E!Hl<A-6[X5YL8WC3էqp]#R0$rfuf8t
=ZR)	Ԧm%Ҋݟw]> xB+ϰj0Ņm<S"9W>bk3,)8&Y]Xl63Bu*JZit+źc!'99MΡEM̱bU
&Npѫ֛m,y%u t1ǖSQOMI-˭k?'6m,xN(||ޓ}^=~[ҴNO-N4sEՏo5CTuk[//:8LMJznuc)8J^oQtRTQH>]V:iIa"]OAouuSlOf?m,/f<-O歩^ '/t@xPuSZuc&}/J4VZI[A:V'~z`t\bc}^RaV]OU8;*i%Nɫ-/fk_|'&<h>kjQ=ΕhZPjFx8V汒4^!%%uu/eg*U<f.p"h\Uͫ~ />"i	~#|;"TҵoRM&]Ν_j7y4tX{Nmu{GM4pYmiڔZ6]w]ݻXS\j;ϫ_ h\|eX7w^R:6-mhv TΒc[-/W8b9(*|ܑn匥}lo	VHJz'w^  n?"OV k|+nfk-'wvm3J[t7M޴	tv䈥N$"8ESoKE%̖v]9\yzΕK8讞v_M}[\V'uCL]JmrZ Q
lE
|J6tJ7ښӺm۲>=o^B#[TNtgIEkŶ/ nߌ>?Ntc)tg׈CnH$qn]=ge?3UT)ͷ{WR]ye?<JTK	{.[P[Kj{_x.GI2ՇŻx_ok~O	4^)c~=k⛄,t?xfˣ%\kaSq8JQJgӠfV[|l-
}oRr}MNJQj5CkXxᖷxO>x/xxyw<':xލpi,<pS
ueUWիT*4aY=)NHI֭+M3J

j-=ڲN*)BP\VwrrI>>XKcX>kj>/ּ]uo:?\S-I<u}~
7áK04bgF4)FrBJVVm֫Yy8ZTUNOiIߛYS/cH<oM;v-t!xg:	{/iy>[S!nu]wPonؼҧ#CVlmNJߴZPiGei
qcpj%t>toVri}4V zlA{Ӛ\/ef[L"u#xY.xVh4NiZ')omޒO[-譯khp R:q_Zv2[$snH>H"wʍ#B,UK
aTP"IJKݏyY[\#?+w l߇OZNi^kw{u':=3T͝u^$kȴim<w?*d֫uJuT)f>nYZvm/CrZyVYUoN,cwPOⳊ?Z(ڧFk}CDӼ__ >˯5MG_xoTCYY|8s$gN,"ݚWݵdgb(Up䛕ֺ'O |sŭK?[KvA%}KFEżksgi3D#|sLX߿KQrb#Ѫn=>w߈ _Q\5_|E{Pg߀#mpg:~-ލpn|#VKH^0t(TXE+*VӒnIJYţ,TK	A>x/~qj-Z{4ϕn>OxK|R/wJ<',7:oa76sky-.,	];/, G'R8j2Rn1HDӳZn8ԧ^pQS*jQJ2}|uX5FRӮmຂDO+qo&4dvA,qI43	VN6Fq$j֞,a-+#p+OfvuK>>_Mkwlm4oj1m;L^tc' E5oU4 cb112,-}VHiKэjj488ה#N.벜zNoJЪUI6pw3RVC
'>":>"/tmsº:vxb_Kmx^˘h~by%Hף*u0MZqrJjPcNZե'f.%)\)kKG]]3^\_2j^Z,QߕM)3, ,Gn졀ܯmUWOjܒ56'W?~gǧk:PJGM	`4uKUx©&mS\N-g1wg?/峧mƍWƎp%=/*3ʶnݙ9-9L289?voH5&HP9@^8|7*Z+>_?aPT^KVv67[3^,06G"T<|5˚}ztgMnѧǢ#P;6ൾ\XMeU "7[	˃l+*x$o<cEX˂B܅RE~K hT]5#:O~&[ėjޓg	t`VhoY:<9ikrD`UM$g*ig;KUN^ǏEҔw/yy7jm}?k8x஛xM#tG OYYx~/ڼ[oMcuICug|Х[0K
X|Us:
#
rS9Za|ˑuHQN"5]*nՔ%)Un~UGZA7nV|ɝ=DζG/4;XA&P& 21LJ픱c>~&m>/7}AF{~'|#|$ZYΘN^B=YٝI ®g 7 8KW w r,5vN,-ZO7tQډ&ifeXIF$ھ_8R捗K{>}FWV*-ź-W{=M?Em_^Ŷ$|!֧ASKu]BZO@ͺF)*+aScʢ=5eR9si-諸ץ	-pxGxb<[
+	&$ll`8 
ѡNz3!9e^\izi#Y_Z{]bY??0S,3G;91%}qQvN➺7eZhh|NhpZ,zg ti6Pq-Ͳyt9Wh|zD$g$ܪrEi4SkmwZ6>f$߭oCx{򚍷Ff8OjVoo1<vN:$R	VH9d:{jThQwVۜYkӭG'nt=g,]օai;񜰁PFPglŐO^YוqnQ^i$}q}%_{k=gW{}1.oOӬܼ)cE#(t;2TobѥRJ-rgUn`s;-{%_ojgWX+y,eFkl&70WN3I
:غtWުvsenh޻~o[V-4˝$#yݵ>1Hʪļjbe9%]ǻrkVwvB]oCb+o01+_7$pvo`@U@f,16\挚O[W_1~>%kd??L[_o-t{opcnzX_C_|d)ڗ1N+j't%(-, ]x{F^<xTtP>1|{[DWus4q|o๼Y&y~Qx%aҺtIҚE~UkmqT2u}-;u	;kW~~?<opG<im¿Ty0υÚۘt)!=^X~FN/X*'{IG܌^dF뙟W'aYuTQ4TrjmY5ֈG
m>/__k~.S\eԚÿxWKB<oj&ŷe?7OWpn_E>'8r×FpOںqN<k1ZgpfeO*U|VӓSS4&7?_ h?XCWa&u鳞kܽT	XWpn&ʏg	¤N]Dtw/4UeQUZ'J1.MlwG`=ꚍT|!ZGǗUWZ|VֵODBxNuHXhNVEC8ԏ"zFKIWs渚x+]q'̭8OVoK.[-;mZ;Hxg_lmHzKiI_Ȯ$r$
.*>ӒS*G{dޗ^Ywg4KKS$M?ީ/s \5?ٿf<W|{u}Xj>SuiZβL\Yeb!M)EKץM;hT喗[ē3<:㄄JS/g:9+{^nҲVt);YJU^60dag*®J<.NJk>(inz/-ŖZ˳׬`J0!vu3rʥӍv~znqrv{>\jZ{FL7og(0)Q;$̏*V1[88CFڴ{엕ΈvW_|Illm/mi;Uk2<ět7FI*
Wt8M9mMK}?G^M]GYZRwO&_ßٟZ4mKC~ BZi&E'WQl3]k:lESÜc<$iUnו+K^70vP`)EQjROHJz)|2wM}:@6PD
 [$$B%7Kt,a2Cbܧ(j]jֽhZ緀	c*z9R\qww[od~GL_]  Z~|l^lr[i_ä:V$E[źägME
"Ȩ*UO1
itZ{l{xa:xu$ܤ2MFts+@gYSsec@9[ 9G ve:B.RMI|׿$zmO_a Þu[<Qjѵ6m5#q]Aү?魦4F!lmӮ}MXYN\N(N4.RLj2үuig3]FSYW$Z-׋4
 x;^('ix]G<WMf\:Go`}?O&O6pԫNz8sUIf
Xխ^"SyԺ8A+:jCJJP}Ѩg%:WjFWĕW~[ë>_2N"QZowZXyCͤRIoo
f:TgzR嚌Ri>Wd욿x4q<*mQ{.XJϚq[k%u?K?7,l&/37S-֢0{y^GiXg^<w	Хk;I%uG~$>]tҜ.דZ;v_=NE<o(E"֮H/ZBbPzJn2[q1
,3՜.UZڽR_M֧/pjTUHgFVz^>Z˿|aW)lLZh(JgC[1+ʖŴk]C63:u?:?nji{iHS2zFjk_5gmtf{w l"?Vy 6rNt}U>=&_e5"&VvIAؤqQ2|ɫ|QMy|'p¿kETĽԥt 3u_BxBYM/Ti%|_xSY\Fkyv$OEus2>fB}fNJt]sqm{qeV7T_I|tK :'/.-K[[oɡ7v}ytkKf6^#-aUj/l`h bXbwJ\fui}9Uo-Rf[4W=쮼5kvmD<q6-Fm䶓햗pRIi7aK!ㅞxxQ\]4Uݵ՟S6C~҄)ܒNmR]g?~ ?j>]q7}c jxP^ OE:CM;ORB4亓vppswsSJ_2SI{5{BSV98UU}m{=>;9h%ih%e}#v]vY1TƔK_SL<OW-5[x>~^1ouk^*t/hdIxrMoc"Cm?"ԴçkTcS#ìuJ%)E.E7^G1br|d$-:JZYoe֭+ tY'/N]WХH)I6i
mճZG_Fp9-#uo}jY>E4[]]mu?.o%?t_3Cn/
Yܴx S^^^e&ަ.<%WsSa-*-Zkh+z|7QfR]G:2ME-eM6ՕDޜ7X}~ֵk'yj~k=U|oxS6:cuxƾ淪:_|)mf#ubq:tjrQBSOzqRwNI/hﶢ
P4U:TjNq(s4䄦R^EԔ,44NY)񗍵xƚozjvu}=֝iw4Z77%E|?i*=lUIE-I-۹d=|ƿ%:.dҴi?OGf}o5skZ.jZS.16i}S]BQw{.K9XK >g1UW٨ݷm%~.h
RoV%{TESwMgY~6ϋ|/cۍF Vvڞakn_+m,[A%V̋OhW8SMBJRN<+o+i̳-*+ƜM~ɶu-+%J=z~߳_mRZΕo{ZGτ&tXYϬGO̖	/!k]lTGQ.NVqdӲN'9	WX,e42~Ҝࢥ9/z\jZutվ6?e>,M4MsLVtxr]ЮѣehS4_UoO韚u*nT=t?YQL8if{wG\㖿;|d{vn߆~%mKĺ$J[Y.,ueyV[o,EJ?u*2qiֻGw*ߏn"ݤM1Gh$]%/ID+RegXzrڒܷm)s8:rMRV_g1 
㗀_?/k^5ƭ}qi>״}.'ѭ,lNҬ-|H'ZB!U'w .߮qڴv]zSfOMORES[x􍑹U[fL4eק//_OPjߙ|wkf|75G_EuO
|-KKχG-j='ͅ|\u&yWz|'8F0{{%%{^גJֿ=%;0iWN.lP72ƃ>3	E<'kmi٦i!M(
/g{(7ڵ$t_~|9?Ω|)𕭦 _QƘ,oVwނ)7nGmIg{	.y
TG-VݟM6z={_3h[|?aD{"K[C[ܩ^$+iM#5{Kأ┭8ZN<Ҷ{kw+ߑq  ~~)Q|%o <-D1xUtZFw)y5<>&7,I4s7mz1IN{8ucesbV\JBjRV[}lgqokOU;CKek iZk<ZYZt:Cs,)-b_SZ|Z_gz լz5R
sU?k~ўj,W+<o5N3Onn.%I;DTPm5(6_uMmߙ0piQe;Vx{X U%.4kXҳp,åwVV-咭mn;	8G܉ӗRI߱*<5w&ԩnm'%~yÏro	Od+cúݕnf
u8Z7ۋ7

Ħޓ.Uӭo}=c\>TEx˛Z2M5mb-՟ҿ9xI|c}O9zޟOGMִKiOq&}6p^ZGc}\ a(`dbRZ=#%$M;)]~aĘ/>aJdWޝTN&8q]߱?|)H᫫=V:l3ۿ|[Sm>@416yzog9bZ5#W\*}[JRZwߣFIUZ:t	gI¤/&z{uo ]i?{XK5</s|=+7q|1>ZyՇHyeo,oGէT)ƾQ6h(z|JpJ+ҭ*j|T咖/wnU~+&x [N?Zo9?nvxv$'HtmccrB$KwKS᳼-'_G	U~biNI״RSQRe'JFWXc ~&'H5k[jgoYZ~as342j#]%/cIjutj< 	RKSU7R3PR=z;ZK[?5 +x3I_-M#SyR[xOPDVKloa]}Bg}>qf)eNX8R
QZ|4湠=*,JUڌyn~-e}O[?~&OofV6s}Pm[S귱pcg4#K7cf!&~&Sg\^#MN17?i a ~|G#|KmjPu=wT?<EY͡3i~+E]'_+C>*RPw4^\ʬ,ۿEDnooFLjbR/WҊp? у	KF/|_?^-6^(sp|O5O_fo-5u}&3u%8J猜e7im(+?3,*V(Ҕx1R25&^]o?7/ߵO7sKV> 	igEj:fCKF\\jfL>dܗ1O8	V<%%잮%]pX=ZV^W#eI$c߲[Gv726oMyp_Փ˻&tv6s'^S?u+\N8՚m#S8g5Vz8M]RN{gW_WmC=jzτguv^Vq]Ri|=xU)$3Zykuo(b2LzxJ'UEJ<zYj[k +jӖ2M\gN%i%%ti]6+mc៍QĐ[2ԆuNc=Q-fMX(*royB{YiNqWFOK?|1 v_1OmZKvזq43	!dIݜ.TWNRNJ-vwS<ڙ֛>c|ef]xRIw@_kR͵5+H٤ 	
+Ζぅdܠ߮tKV5)[NKuo[{3ᦀWMpZ=_K޹>$R_M@Gs1*νuUMPIB/AF\Swg^\i%yG◛׵ |[oI:\˅y"t4"ʵD{hc\qPIҜ΢NHՆں\[ѷ}Qsio ǽ;Z{o'PM2;Ѫ]Ek6pk}KḺDuyQ9a,U:\\n%K-Km%Zggoï|#֮<B׾5-^nj+-ݳ>)#ȶ:Lub>_8qT$ѩ-[e|WpQTRd]{oԛz_6 0~| KoC/ijoE5Ok;n'S DN5m)Q^u]T.6RSj_1:|-^>,u|1Y{EwO|!V)fd]/>xOׇmFكN9yZ]|VZ4]wKyb5QN>"x3Ǘ_7oh5oN״M	fx>skiEeq\xl-Z~ڝIЂ+;KT%R形zᇕjP"w5{y+{F1QQJ4WO>{okG:i]6 OTWYY麷t;Ki4PM?hƬe
pm?dzY'mqJM%}RϐѕGi>;}twlV%̷5ҜHɶFxs6р.r`e_Zi]Ԝܝﭵwk> ?Op񖟯oVw>-4<8uRLdE_Yn5"A*RT(s{ԹZVnV`ɡNU%JWޤSJJIY4 k_ÿ\Fxᯇt~iǇ-4捩^4PzNwo9t}bZYV?o(8ԍIߙ8'we8J1\GvqEӜ!V0Z{4h[VWqqoW:ōΧmi gafƫ*L4ȍe욓oӿr	5$Ӵx5~g_|mƿ۝Gqo]%toN]ciҴ˽H+Y0:ǝ%֟fy2\=4%](;G>O{lֽ-IL'$idr:.{aq~ܴRTOޯ.<]ظ#iJu"וWMyӕ9IRގmVNIզ/X5U,RɽiS"m"Do#Kmo6t5!G!myX&5A?aMm7_#h[|7ZO"\{arNb)"iX+`뿘 }~H|h_OwtjQ8`
6ub#]]8fӳ]6 sOk4?h˟'gPt6cpx{5.{[[^OJ-^G64r{Ioj40>UN"U)C٪n474Uy%OOk"-ݸP%%'$sM9YƒwM'Ghߓ˥mj.%o%I6cmݹ>d9cx@lrڒKij֋E7%gwZq¹n<$mtgƖ#yl@8Q;f[,5-ߩ}F R7+m43֟dQ$</cʔڣ(xJ	{^G)~һ{=4 F|<[<lZ߉tUɩͥ:vp"\]}f|DoxKdh~)Nu72I$Ӻ6 gR'zCs&ܬVi6gKHbӯԭ~auYJGK2FFp҂c/K];_OR2I(Vo+D 6/l|;jͤqUc:I!  ̊WoLmQROk'j˾|F8ZjK=C7Y*jZ5ѕ4UeNaSF*xw~Δ助.e]򔞍km4@ZM{7RxPhv&kr	5$'z57.j3Z.Xi7wkN߄U)ԼA23mr/t2o}Q"C¶Og97xK^*4ޒ_G۬s>1In/t g2ZoywlXby)Q3|RuNmvW]5Y=zٴ}YĚW`];K9G0B)x 9nIlSUTmRZ_%no8Enk _+Ú]đ};G2X+y#^PJJ@Hh[c1-Մe9r+&4KY}&Lc}tW;;(7I)#^>q;p9Z7[~I;54v[ _ݩ7ཊu{}dH帖(#c}r%ۅj)Wy)'{ymw뷦yQ ÿPm~x+V՝j /+X4K[ⶂCՠFqq4U_M+zX\=L.ɴby6ӋdvدE.?g -?M>"k15	Iq7<Y#˽*/Vеi}j5	-0W#UaRڝHE"))+$Ny\G_-yJrs]c%FVibﾣC'ſ:? &kߌ>8m_֬t6~$G|?YhY|EKK4w)Usb߶:ҡ
5*ӚT=׍U9)J6׼,®xjiNKʤiTOQ\ЖQ>hsZ%k|kgx*/ּMCԾܷιq~<A{|)mZdU:ӫp֩U*rs-5	Tƣ):|Ξ/N6P`4pJ.ҕIG2>ukOO<-x?|j4᲋TмO 
_4$>RGt.͗.S\ҍE^Ju+T:Zk.G{F/^Xj7*ƌ]5QH¬$k˩ yx<c'zi=ƳIY`-kT	*3ZG.'1i~|[1\GJ.bN7N^鷢?}_:|/||VizWH__j/_ŬGj:UVW<cŨ=&D{,Ieoj,fƦao*n0rRtk%+VŐN4].xj5_'Hoo3&xÖ3V߁#;_k"]gCյem=A|)?B{ kiKc~9UVjZ
咷+,jU$IٻqMePu0S'7R'$MwyLh+/|Tcu_|Iυm.
 IH(?XQ'%:)g9F+1v|5(Z߭kRVmʊOO)m~d? 4#KB^4retң2m&?kb줞5MNʿo|{cPc a<+i3FP+SH;	2ZͣdVI o*VOݒzo۶>
NJ.)߫ѻmt~ ,? ~(/?m/)<1㟊~'#Rռ!#i:0apڞ6ݦRR>f>j&EIuK	OWp4ԹydݕZNw+U.i $Wmiأ~#1UC ~#*D? lc}]</#@ xwX;/)Փ^Wԕ:NE8Ŧ?;t0\q
	FT%%\Ex+'*2.znhπ?č[ }&vR?~+ޛw6侼XK(#LM+z՗4D^=[QwJ\ѫ_{(2(:iJQ!N8iJ*kNmrT78S /_׌>~ؿÿ?; B]+_N^u8Ag{KQ[U&EŊjѢN7I5(+7׭ߩ&?E\K4)Ah"n-Mi7w|?s%O[][iZ2YΖH 1O"=Mh90OWN(էEIIoV*5։t׹YU(N'5yCM>xSrz5[[,<~E7<4m^](4hCFzuv5ŃgVPOŘ7K-<բ59Fqqi{8xs4OBuS_}
욓Ro+H rt'4[q>'Ed"|)u1.'b''h-:R7o߽ck^sepSN*PVM-̯ T ɞx3MsķV­iy|)g/U oӛObGyR\F26ƏV-N3r'&}Rh}dqbas8I࢞#)Ua59ծڻKTL?i>jSמFEOآKk<0IVEdX1^e|wO(CMߖ|i{-/s;Vq0)6GM][FڍG<{_hZ>l:}ޞ>g&0F˖BJ*|G)ѫWu{*ǶUY_7^\7Ti&W7_MtonSWUo|a-)좐{[#-1RAb*=<&ZtOnf#kK"tW6mt}~^3ߍ'KhZ̥VZ׵;}7MWRkˈL3MEdo-%Z\*0IUor:a~BjbGuݹW켿Ӈ|g_㏆ZPfZyb?W⧌|;obWu;{-nn43W-o[4[yBXΚĕIni+Ofy[[-hCq\*L>!BMEOU)1NqJ@toDw5=TO#3:~*E uƹ$:mj:̱>w0U`cR2z;%˧k%ʛVxW]<A{I,gQ85+o4E${c9bѴŁ++au*D}z7F*>[ZQn]_]so
5(QܶR_
Qwiiʷ \1g7s i~ׂ|]\xOÿ g_xjBj'K;Z冻ϣ_k-SZUXN6#srTx8ЧiZxpgK]tBl:kڴ当yY|#ZS~9Ӽ+{F//k/Q5{]3RMP\ִN}5ݤ$aqUdJН8RҜced޽9SVHyo	Fsn٥vk~Y4ծ5Z#{ZTzu<&I#Kp(mgfUըX'Ri5Zk}3FE؟"/9Zޝொk BgM_٢񝭳SQX?NIt^~g;tԪZ^*YNv{^|	XeتC)S8-m˺vc3f?_۶6ZΕsVz|.]C:Kk}m(Er$hVp}UJTvӆ2wZ4Ԗ
?c:g_W_>/T[X<sS4x?tZLw]{ZG_Y"׭t[reK)I$/u?<Q쬭ecү)Rb0S[i^uVR*mS2vg<*[~?j߆:ն<x7Eզ!t^xc\BbmIl_VxL$/}I4(]g~\!FpJ
!Y+w^$ɭ?ccٟm-M 4_$?n ^ͼ5me%%Mv|*_*Q/~1Moo[mN{o*XLx5F.ME7g{R3KNV~> -l4}7Ƴ*<kaiO$֑M{2OcqFve̱Ŋ<,2-%Vm
t:kHm9'kh~a, ',j𧆂&/~rN3v2o#7~?Ư|BuOx \ѬFWX5ߘ&KiX#I1a0Nd3O]ݺ%.ktpeiJ*nt>e̗4=rmh/ykߊ	j߅?x75[-ߑaxG5iZ{aqN6Mhxb=g!|7ks}0J)םRTڗ,N[V̓W:x:qFzNEW-m{4(X+V$Q:׻ܽ踸y;St~z^Mw[2dw6O!ޜZRMƺ? H/7A7_.OíZF{]D2lؔTr9 W\ض ܺNϚU{ZzZ Maf]7je7WHeb}KV_*wqs|sEoލ r\ɸ ةB/_sK]&{=_F?	;ρ[:߇-SZ 	B<%YnS^5ڮ$=77N=:\7ZX˚so[<;ྐྵk6QMvL{O)g}6^%/O$8m)o*[vl`_݋O_GoSV/_^b_VMu&uMsf+H#NM$Qnh-K0DW=6jm;_և  x׌ e_O'boz妯w^f[շ}^/R+o/Pay[\b-mRJ<ܩIlއpg<Oe9
68|<\uƜkփ[CNJZڟ5ƿN?JFm9DJ!6$*>i_00Ka(m&SMFUiRU)>mܜ+[E~2_) `c	ML6&a"ToVP%NpdW,UU)Lww3xGK~~п|W|Z[v %>)fǌt_xumnMIS,2*Bg'SZj4N+ZJIy}N*et1yVCΤeJ7)\;fUeb(Ӆ)jN-E8Ҥ|w~cߍZo|t|mY·Ǆ>">՛NӴk	tmJAu+gHT_ϖ+/=֛$dTŶ	9{nEZ^x8+cr|xxjT\''.|&T(}g䤜d(4C'?lXa	m4x6+yZ\Es$VIlY86݄Ms=:V-7}2쾵ի5(Nݬ嵮;/IE//oki쇈b7w2\Kkū 5F0uQ[ԡfT%dͪZgKu<\S	r6Riz=ȯ->P߉i/EѮO5B4ٮ֯{-ռ7Zޏg. R+h.1yNY4F,jNF.80zI|2t1Dgy^l 5ڧw)5M񾟦M%o5=I[׷icaGdO,TZ]TvrI~x<OVQGh1גm-"`uѵ+t O'w_xrlt/x
F>8MJHm6O6Xx]}X[{_U6,[8ԫEӭAN\˞	ݨIFm]|S:s7񶕵 /oV'<?k?|YwyۦQԛELv(O`O*@olo!_{IA/sr|z[t'&T[/TM/i+hOw_ƇYMwxwXnFoUXEHjcqpYFc5V8ƿ+q8/nxݷ2w.%~ɤݚoܶ%Տ Ӻ_HQn7|W.xDt'N|+Y[B7m3GI9.#vyʵj:jVpZjr'vҜ'z=:Ij˶O' >|?<)}ⷄ<wk$5>^/ۋ;^irT;uz"5幞6i˞%2wJ)h8c)xhbPץmÚ:MZwef?׆XχѼYX]xkacObZzKR;;M`fZRJ5%9{NX,ɜپUę.(VPb)SsJIu*J-:䊫N;)N{W`,mn?h |Y^ht[Gj\Jaj7=[f"PME#8*F$8vZpG	Y|kRPS	
Nrܝ6즓 <Cw5#QӮQjEזȾEլ^YɘS"J{tq4tܿݮ]1TY^)Q,R:Iޖk?A|I !mc/ڗ߇4MiE~"D\Jg]. ̴"|Gs/_*SZ/qy},^Y+6qQGB(YWj=`,/[iK/{msK|Mh -աԡJͨ^5A/u6S]-ֱu pl4U4"+KtoQw <g0'D6''$-,yQVjiGNqO43Hi':t!5%Ch}Opwp:nm]uڣey{)-/.c}j+7J]Cռ:S1`YOk{Y
7W3gxOc+`ԡn'JۣZ0ӿ%'uzg?tZ/=E֦'h"uRRK[LW
亚/T؜1;I;JUs
/(T[iB.kS5 y,i>9R@мL{=rsGXC,mv25qϣMb]_fPM^Ikwu	W;+umi=Om|X^NZo|3DY䶶Z0ZΔ dpG$?1U2J][,´pU*}wJN^4wﾐsn|ςkj_/x^	3Xoֵ="M7I4+~qO=?cgsh Ψ:9l§KAQԚROKk{]~z֌iCS<'{ɻBh
|L*v]XKlږkiA%RGq~jrZY\Os
!mJ|0:a:qO٫vI;XYliէ*choݗV|Zcq?|qp
nCqɭHUI	ԡvwZUK)ԋ:wq~ߥ<gt?i~ <WWL-#=p_'j&=Ҽ[VMw-xIx|?m;NnG_NT^G
mk߷&gQxHּ4_Nob_M^P-ⷍ[is hK_%*ҝ)Uyyy4j[7DڱcJ1nTvZџ#/㿄(|O{g6zb[M,nN`^jZV׆8J*iTT/uX+ڵE^GfuiԌRvNwիkuͯM[3 V_;zýCþ֞4DjCi캏l/-i~n$f#͖?x2_WƬUx%)`Ҍe)ԓ<'fJ%NJVR;W@|5⽟/wxM|?[k7]~7o]ۋo@}:ts]X\:}~}ǔ0؜<rM/mB~%REW7Ze^tB>I)r+i[)-~ ( YKOI x}#J I[K4zeis'UR.ݤpOdx̋ቋJʕZ')P++nVtyKPT<=EMZ*wV{t G<)|;^i <XR!/f{ޭܹٴ~eM\w5ृMIUjQn1Th6-o=<`jFqq㦍KWw-^ ~|;MR{ODSviIk$.3o;Mҩy.&R
|N׍9աJ4[|V.^mVyBR\$gJ~2H>8h"Xot{\	/(cI}9R-L6Itsq 1^ԣ,IFq\˗n]^|GS͝Jn0tY;ݶ|+->xoXk[kbXgtmټ'ծybơqxL|1zUSMݔSvm)^+T_}|t]_ް5r$H!LKH`@}KeFY; _EL⇉5u+stHbSlq|jtҥm{zͷu߫ƚtx%ifLAɅGƙ	|:-Jy=v׭s1S^OE>t7JSJ<+\0B;ȱ>n6gp(ьWl.ߢ9N.JmFlڕn&K !kvNI,(n$LK"«%4.m>II+ܵ\mǻ\[ vP>,΋Ι~]9)i:_T>
pU >p/o#~6/ͳz{Lpr#؛vwO}+s?E?xfx;v7Zeռ/3[/,uh7+C:֋uh,k!Pcg0)S	CmŤi;9Z{\쮕۵#귒"¨
漇wO-v1U	S;o~oN}9/)K/uzSx2OsW0ëXei73)x	CEt{Qgssmy]@Rh~)u$nY.k)'ߣZ=J5iTn]KT̖~4uow\KφG =~.[ -Ē8WiIESӊziV)[mQ]j|RoEygroHnn
͟<x'WJwƲH	hfHź#qaQND\T(-o 1Fmq|C})6^־Pna72g%cQ_i(FRJzJѿ1X|ϲ9c?~ "m"KcK׬25I۸pF)j,DV*nsw_ףrM1^i:5u 97$:[k|żV6#midęrыD`PZn).dEQøNr~VK%գ4;Lf~^X8@U)IIk~Uk?SkIl Ӏl:j{hE9!7BF	?WNQn}k_^%ry_U}އc  ZFٳm[^?N_/|ki&kYrXd˔c.{;Bw^pժjVZ$ԕZmF	)[mk?<W&x៌hCLu7^|K/u{=!4-uj:Y^^KcOi<i65:MtZ7hKMHAٶoMv<GkK?n֞7<1|AԹ]ևv,5+4wm>k{3`K.gOwp\jײ*R?q)N	7}/#b*E?g91'1M'no-o5F^C?śG\POxc׺o]i_jZ]ϛ$jv='Գ(SgZɆ8BqN1ZS#zU$	)4jr˛*sNj5J1&ww)8H>BgivJNw-ZkϡXAO旡hzYJb;]iLG3,{iru*JANnKM]:)^4Ssr8ni(A8b_ӨogxSBMki:ψ|Gq6ͳoK?=i,t_l?ESW+*N,o2|ьcR[4K`h0SU+VN#J.|Ӛ|m)F V?9|=kWWV'ԼQ1ykxUe[=.hInF 	,72~<C~󔥬޲v}t~r$T:cַ|k|KU6ҋ۟BXZZ΋lm|ֶ/-pyUڿr3M  jrw
]R|7&mkx^IVמ'MY:Iھk-	IꚖՄbV/VTmQ٧a׊oP|[F[]{=gx6w3(?A[t;(-W]ƥkEh-5"B][t&m1n(Z饯}g-*T!hQ$miG	sM[}sM%`2:m(dl"3dDr|]-Cj○u)?w!m'Q(namxT"0(J2妖fj}}o?w_V/߃|[5w>(u{FkFNv5 XaҠ.$-Λ\u8[Q2i[[Z׾}?X	~b4MFTf?h,Yoᯋ|@V>7l<=@#>+o_d<}sxP|1MWcZBbRJJǙMI<ܲvQM]'vðZIК.U^9ەhQtjJ%7z䛕I)J15 #ǎ[~ҖZG+I?_~4MikKs&_xlx_<5j|-}pi[<AK;hzVQˈXڸ:~ԯRQqQ,ӑ?}Nca1QEVbq?Xu"TH*U(Eޟ24 )'a~>6ҭu{~U֥{cr|GOu^_ڽi4[9-,	УR\*#~]N^.UNֻzٵ^/~2Kk<Z-9;Djm xrB^OlvGv5u9}-V2Ko׾WQ2vUM;Zګ;4s7&]ef-&r)8V' r@pkïz崕:avJU-']7 +h7WxYO<(XyχE\j/,=:OhwY"t*=: (SjSilVN;5ͭ֏U}S&|Mº=K{6G?|[:i|-}ǡ't5{+]=/}>/2Db#/%?r<n/ϚW:PnIߚ.vc9d <^7`/r9*8F7dKK(ǿDϩV-[O:&eg݋H-M0LE4	xRJ1II&Օ8U#/iSvz͸x'{< NmjROks[l&c47zڛ&MW7%f#&;sYS) rzNVIՍ9+/uZMﶚ:~>8gۨӯn"+U|KzcI!	TG]'`(*4E"ݚN$ӓiMXTMorqjIZV+	o#66~G-jUkdIMsO{>< Oҭ-@.ೂסoq5i1wV+K8#.QzejӣPzԓ֬B2|tᴜwLпg%o>$h|_,^"o|k{19|!kK9dӡHt.lg?5|4>m:nMsԂeZif|3q8<(:x:Uj׭W]ZkJKK㻏ͬye."(Bc/ܣ(Cbi껟YiVT֜m6vݔgW/~7jOޙo=uX_Nݮèqqx};Sy-.t&hH߯2Z,,T9325;KtZv8rJxN1miutҽҶ?h?ņL/h0O |SoZ94t}c~uKOo=!^r 7[7>=ci
L4r5:irm9))Q^c$uUɞ
a'Eѯ⠧̹:ϋ?4MVL]4kxOռ[x-u,m=cZO_j7NWu( 5;C'4+a1QBHNK}=-z)E]SУAbQ')AQpJf5i/Ǎh\6z4M<K"+I &+}24bb}Zw.ΥG'9-'sQ,w줺g|+hy;-zU4{nRdSFd@\˱pt爦FNi_]z]z}?
g9R(ytn߰-x3Z8?P{7O5حYVzd?+팓y <3NpI=%vSmٻyU,+cTN~ͮj#Y[ߕ&یowkO?
\-ğ[ZkW~f xwNMSw Kc7|U}GA^kǞX^qn-J wm>FgbNd$"&̭N*UqO|MRYoCff]]JR3AԵm+Nk9Qi-5ha-(iRINjDrvm/8\%jjtV59n*2eki[i]K?wCm X/E?G1]j]{x:_EڅiᶴJeAɸMNrW7\})4{o E>_
s^vo/ŗ~ȵ{T6r.%ԇ<U"j48o~Iz&qj[?=Oi
IҊ8raDb*FiFSB c~Տ<!M1|akpm-Z׃IZ4ۯ'5-NkHӥKp6-b)cSԩIITUnήR].~%\$9s¢䩆6Y6l%+Ҕt_W׌~=x>>7~3T|/}#Q4f	לּ?7)_PW<_)l4UV;I"|E5#JHNVQFJsm%pe-b##`r=L,q3l&.;rGNTѡN;)RGm1$8N8(ѥR]ӝ<V!Uv[k9uZ[$r %	<$!v]$ds.?'|s%ς5$;NV8#x.p>H ve9!.&6Ŧ+[0
߅۷wsOkx[ʻg?fOًZҬ=ZºZO񶥭^Cok[;	m2[[仴<eTV)(+_v-ŷbqW{~Ѣ݄^zw-4+~0֥K}~RجeVKk²$VLR"θTMH]dhd|߻/]٧xY|WψZeη{OZxmY,K?<'Zl6Z@Q曲m$eXmki3o
z߳͗Əׄ[ %῁uI}sK[ƶ1Ӭ |IA{"5Xb?eIiɻ_Gmvr#Ο+ihgW]o۩1~̾> t.um'SmNH{=Va`7}F',<.\MԴvnOԸ2p\OeBúYќ挕$ծ<[ͧxS/MӬ,-4[M6u;+[5;k4ʶ(i fSne7}ݞ}ǯy[1[)ԩRYʭZT)ryK]޿vw/<L-BCmg{|thN[>	wz]7٦]s =ʞ	OOOh㨴xocZ64:MA姈דMԗ,x/=\w.3ϳ~:cʗElFTbpZXgK{Og_II CG7uWGě;H|Co{H5'1h֜I}k^u=;m^OϭN6Uh.YivڛJiտSMW~A'ks,ygk{GoxmBX5%jG,
ѳ0YTk{8s>wkNOيWnK]m+??9RҼ) =2+k+~?+AIGgOCw<="vPϱ#*me[Yg>3SW^_<&&6j:4G-NQD:}E}Zi2OkI+#,'*JI}m}<rBU+[{X\^ƍ0++A9ׅr_㻌f]sу+j՚{l/VX_넺NK	SD65h-HYMSH~$6:娾ʨSѤZvjq׵$?񮇤_ϏMR|)m!LWQ<|<Z ?n$vLQUZ
񞜳KrJZew褤3o^ Z>%mIkI
+O47VR(\yF("SR:=׻6Y+GL#̣g֫m_#cFJxV>s: fo&.:]^<4چJthr&Sݺߣ?h*QFa7w$>?S	IYx~}DxcImGF<1f2 I麲G;C^kK/ksI{n)]&z_E83.xkU(T$:8yc	IE(&%zi74?N 1kW6ywZYK: OQfcZu<A=Z!iF+V1IX:i5ΝK)sPm~e#,xT^kslZPS9cV*2Z$ _iOUx7j	h[iZ^!>3ܛ)_:m[I_k5/[jGčx	N4Fr\c,E$j䔹	J,cRxt'KFJx*S8ǛogS:#о7?xXu|[֑z>x;Ě|;/6Xix|;Z蚶-,-EڗB%B<	JTwZ;6ӺR^ej*UNL]
aR>ƥ$\1ye(J^ۿSض	~!|ҵM{<iWN-.K8EmvЄJ#Ys|qY"'z*rTMfW,a#L GNi٪ҏ,{,|Q#O#[%r㏗|6p~qxnJ7wzmSBEӪկ{.k?~
xç^<SZ3X?d߈mB״}gDBMgZio}gs5IʔR.IqdӺg$Qb99N1{&Mtz޷N4}~:էSK&4?& ׶P%[jZ7uK6G֢ӯRvZ)`]/)UJOQsih;hG7no9^--ye9㿍	E  퓨QOOi& 5-
xK][PX]Li:Μ]&(%K%e&]N)`
U&қ䮔(rjѵc
U8B|񴓌q(ݴhM7~mO㞏?^[kzr?v:ǅ]?ODlV04n<'-U(IJ*tg
VoǟT<mBb߲$WyAGDKDK?g|9a࿇~#-]3º <7fmz5oh"aCl0uQ?wJU(Ƥ7(ǝz94}%^ҮT`Re\%9G%;|g尾O !|G['>Z¾($fhꗲkzhUDI`-6׉om;J`~,K1U4"RUOk~R̰XdMӧT'5Sye7&ew}_
o>)|P554h6~4|9kujڜ)kZumX`Rxxn-KG<_PZu"xv >+rBʸusKj;^wG-OY߈t=>4V8巉0\mxX!@YKW^)VwoV7~FP>x;z.J>~
3f-\ƾ("%5ux94,j=փaOP53L4%αY|
wFWqVi^K}4鹎#	N[Ir}]ߧM֧߄
J8h'^ş_ktz:sI"[iiMlm&wayq2&&Ε9Σ'CRSZ7dIfF	Jo"iI-*{ki;g<[D_, Coq_i֫oq2)p%Q7P-{͟?1i_JrjMo+[~m5|=7Tj{O^IJ+]LJ_EoM@_jF%]+ﶼ҄X$RKU-־%5ͳ挴ٻZ;˥^~(r*Qem8ߋլ4V-$'Ҽeo7t]	1-R=wlr_qNLNUZl<$(qzvnͤrP̩U^iIRvn\FOG/ie.}a~?e⯇P=]{K,׷=K]Kq}c}su&ol.Q_Յ:/mNP}}$9ʱi(|V.ZciԚfuX_oo'<1%0Ǘ8Lu0T作6v\: /Τ'hG2O⷗#>o^'76]BO/i֗wvR>oc]EnKUlmﮥXhfڅISv>{S0\ΚEW2O{i~s3& E~ #Z+_WIk.qOv-Hn|7y\I5XnW+$Qîp~Υ>YQZI+-9fݮ9]KJZK_=<v&oFx%U m4o$e&IJƧ$SHiԗϽg'emקx{_Fe/OSydѬ.uXK4iW._&kx#r4䠓oF${J/Mj{$ߒWvG7"şxrE,6vvTBmcѴtӬ-aR4n.LK2'.Q;$ۗ=vۓ{]~yUVJ*+:[OW{8tk	VEkf%HX'ݬ/798D~{5)$[~[Kq|W55#C-6JA_\vKo-I:a4K5.7Y*IrsOeB1%)QNWWOџEݧvu{i~׿MuG'CKLs:=2:dKʩ5"p_k3a:rFqreEE%F>$fQkG#JW*2=4LFܘH#{-LK,M5v Gv*>ot]G_|Q@K@^ťHX;=VݓǘUt.UEk}bxocܞ
K5?t׺φŝ.lnIQؽE
⎇;fQTڒw=Ϯpӧu}d뮩Z:5siZyj7̉omgIwu<H I$c#{u4J)պ&ϖajRäN0PmrJuj |G=?/|ϊ>~ jm+3>Υiw['/` K1Gsw'p{|ՕEFWq9VIl_gO%$0M9ԥ7yEo{{'sK4:%о+Ap7-R/]/MѲI-$?U[pTq.isՎ>M+kyET;(T']iQbO_<M|*>|Fi./$xǟoH<o4Vυy8p<-w(V)}=<m4Yס8-%:PoIzNX?+'OCu$h/XkC$q\\$tWIb~/mrxL1X<F'XJ*8u\V	۞[Ѥv4Բ&+Iuqm.h/|l^xAhm><+xV=CdLXn^YKg0֞?Jͬ*В Z=_uSw^#boZOwWqZMW|?571eU~3J2N4rQ;;ե}>K>- v  ֏FJJ$i P-> kI*JRH
U'C8hJ*P;4"7TWf n <}zV?uZgK?`oTwnG4M4).&gYPhNʌSFr*5yMZS켻RqrNߧOc_kMg{q3\^jZVsT-.EM[ƾSko9ӭZ0ԭ\p|enu$^7?Si?]ԼQn?A*͕1_k3T)_>garfMӲ ßGB9͚w>UtKFH<.ZO/𭞳ZEjƅMai}}ksGwCGK:7S(N*uF.|##98jMʘ?iZs:q(~˝"r|x>`Ҽ)|!]oTլ-/OמT+·iM"_5t岕onV=FS>qUPRSX˝6F2s\#$p%kR)a[1\
*JQ|/s:' Ҟ'-~ѵ[{u,W;5qq Cyi$yVV2L|A}Y)֔;Tr*=,dR"ylwkN&mM)<:޻$:BC@ I/M*yN#0c3.XyO4rmJ]3Xl :bk1OM| |eMbך'eVojZK:]m+6'8ZQ}q꺐rԓtovvwz&>WJt҅	sJӏw4ekI$W׆g<bxwD:l[L44}3QY6i<w_-,1aag%)'Y_Rmەdԯ}.߯eQRjFoIR8	ߚ\j|ܪ6i'))%	u>ww|}k[oZOiZEv2Wj麇#KI=[XVE,g<}fQ hBTwj;kֿ.gM\u,%KIٶ̞\Z&)
LJ4 vbnFsjM{SڎɤOSo1sCw{cW͵`U$	\"	z8*nSsyx
n)m- _ׅ쥂8p;}[rRHﺲeQQRMt],gs:QSRm$ϧNWTwY^4xhtjeSLP]VwPʓl-sG=éT	9\inCxr0rmKRӥd?>+kN]?g_4OHӴ7Wkė^)1Pk,-庞&o9T*Խ<EJTgSW5KEZmK*19z/l9nyE)]y Kj:ڶ;]j{jW/,\^( \8ņE}.>ګk]:-I]5fhCi i5zV"8<I$XMy[BێQ6_8/VYźqRg%ԠԜjݞ*\n*BIE1rZ;?KYⶭ'|XU;^67!Y!5-PXI[4w 9|We0<oXJ[8_[D}6QZ#JWN[7եktow5xO#//xo¿zǃ|=NЯ幃n⋝b$ku+[a,sPVrmwki  M;/jӒJ/M__'q{xPQHmG#t}VZw}֗{}^_A%YC5Y+4eiV\Z;e>w'a
SsGjɴx~k~<Mmz_ӵHK}j@$c\Y]ۻAv~"HP#e;/)a+ҊkO<?QreFbhӜiKY%%m6[]_>!G_N֯eCuP H^c^wdb;E*Bt]M>024=dI&h&U_VVk^}w)w}?Z}Vhƣmi4r;K. fYkj֏%7.eo-T~Y+StGrW[ɧms~ӯ_5 iiRR׼]"\ȗ3icY.Ķ5\Zjz^g.ӆm~m|֡5ͳo`gF:ƵZqVsP~nZ-K
	 e,1kg?}L4 ^ut]k2$=&tX"S	B*	)R+[i9hI-˸#O1}W2˱|&cJ8RcI6)ۣ9Gm6i-Jŭݥ[ 홠g]dVIďrFJ=^:Tg	E߳5-VN,f>.9mYi+v|WzCHɼ	\m
ybNi4}:i%FnvsOZO'4gvE9_(ns093:u9gTMTPZ-WKM:׾xĚw'I7i:nz]ݭZ]zY֟uos=KBǔbC2CJFr%}׉QXys&qm?LC<ۭ&{Yxٹ4maIa=!zU+} ?+&kIs>$Ҵi㔥HE;"C,eYH*LxΥ?d.muv:pBiŭV $׿KMLSյ4',q<}Z+H举4Y׃ooqsa}PhV=3H/+CĺSiFtxsdҳk[8O.ЧBtg
u#&/i%7iB΢jΜگ'xCK_I|J٫#<!OP~E1t|ae-Կ'uK3ZmOS^*VsvIvKDϿT?V#6YM)ԫ9+׵o+TI҇*յ?~"xCi#~TG/ٮ÷5-爐eּA('mkLWpNJu͜e0ԕ'	q;KY{۪k13IVRIUTzQTmݶ:+(ʴgD8|{𞉮AO	gu_kzvx~RӵMJz:֡Pnb[97]9^\t;&`%CNt#(*\%R2/ukyZ';G
⯃$MGZ~Ҳ5⿁7X}gmV/-^0&+趺nť]>/TԫUPJja1T)G٩SiGy-?5V"̩x.i1ԣW5(ⓥ8:g
*ܔnvc)/k>4Yqv˧X#f]$:+[$3edeV%igkv3>Ȱe*5u&ԛI(ɷ)Y$sW]ͿNό/ό4wzuo="Du7SiS_T1-žcO&q}^]b8Q¥IGfۦ-,|K5FX%eVkO
jUg'Uʔo.Y=J峀3>Ikvo.G֏3fwVϫ1>l_L:=}?jy&y"Һמ'NV
zqANJ5%k[T{FUTڔ%ӳ?;أqA 
F$|I>≊eP]j;i9%VA<_,u)5kݧwҩO0pzi+)[ڽ:=oO	_b E>,mnP7#8xfZUA,B-Oi"IG^Fbk)*bӺEYꒌlQOʕ:q
FMF6&RoRRZ~m^6T;xSgd\koiU·KC,	=*ɾ9F/7ov;zuoφ/|+}s?+|9[Y^I:gz[#\[^{׻zuCV}?v8 h#WӴ UԴn4O{kxWKhWT?k-*SYK(,|u[jpe=u}WDSrT|{ o&gt ^&OΗ_O=߈4'[j:VOkm7̗0|SNњIE.hgk]oOΣN
2=)s\kkuh d?*|ΙE>:i$~22E.OteʎWn}I%ko`gJṶ]cˬuwn$:u#+]Tz~~U~W/xVW/6񶩬xgVK+#A-x_⼏X*\K0]CIͻrJVipGaXյFε7^M)98M;3
?
w <1Ѿ&x?擩CyhڔQ5<-}~ZKO.ȴ28;{3g*qXR!:njtj2n11xMe
4:ONI3exEkCh:\jUf[yeuxk}GIh[UIGKl-Dp_C԰to'c'qVTm^ F;	xXixc4o}ΏkW͕帹Wbܦf `fpyvBQ|*v;*9\"*)եΪKWZmӎs /ڞ?X k|Gv%In-t^ΏifVHY5]T\IТi^pt?;̩h9e(?c$J9ByMduxK7Px!Ҽro2hmʗQV aq9tOm\WwqlrV2FP+RkFJ=U8~U&:|  gn/4O-ed^|'^6	pYb8qVr).gY%~whby`ܛҜTMV-|-żRH482 	mks<dOrvO[meۡ4mۯt^,	5SsX%lcTHΣkcΓQ_-Ýw)ւz?O~IԣKx$F ֞5fܒ$P|fRSwN:5k{n4L^KE{k[os?i M|~-M>OY^1ԴmOIymTzhk4,m{Y 4qNx*|IGI^E鮯[yV]O֫QGIN8xg(Eҽ|ZO'e?MCx+ YsTGEk7Luka	iS0YQ&xzuۧ&ڦSY;%fe>MЎ?mJ擌"siB^7Ȝ"۳g4h jmL;ZC֩;cWZ^sKTt>'景:RWKҴ#k9~=7'V*t᪦Tbh/	(ll0ᧄtc: <D.V?q^:ux|m_ w+-^+]w^.М9ú=(䑮{SG(?Qxvӗ4FM~7c 
T eͥxJ8٧Ѻ*? '_?PEH}ZCVZ'#ft)aյM3PŦZ[]Ik?^3	(NRU#RGm]+٫Ǯ8\tk)؞IRrqd+ɫVm ϋgo0ҵ'> *힫C/KH. _<OFe#%f0pԮfy*FrWwz4]ϼF1n[W>*oQTOoJtiOnq)Pv);uv7PU{$6Y[A!R#%_gVW%fwETHՌo{4n߯  @~#'ik#<+P/<	֙([ ZiӦa.Q,~"MKtTQfZl|iN%FxGJN1K]?}jJ*F~ͺW8ZNJMZrj]ό>8	|Y
m?mH|I{xPxᅽuc=TOE5+^χ43J\SVSu'R_-ʔ17u(7of(pTHba4ݚՔ+{%nI&~BZvHäC$zu,lnXU)T,aԍjsI&=#;mtnF(nOXm=Vr>꿵x׼M3&o_h^~cZ~p9?
WV1jk?6y+WGaOL\jQ՞`&VHIN4'FAJG#څNKRsM.. ch߳5?x/~7'kCcz^ŭxn8ї A+Emt8"ۼ;G1刧\0ԕD(sMsY^~*Us(7&ݒbxXC{HE})z7hRI$|[ᆏai?3?uee^"ƿ>X\Eie\k)&/:Fҵbb,x3p#D}ڣ߻%*8;p:j9j_x贒?_Zw|%Ҿ$özjznVOx:Ǜk~ b/VZmOJ4>6!1KFݟrX.3+Ԫa0Mzww>; <͜md'#*N2Z??p[_ :|i뺆hg޳iNZ\YYIrl:[<.ŵDS8sv+V*mɶՖ*;(f,M(ԊRNM%)=|??#?H|;H?Lap܉["Owpa EPD2ilc^UӖKvKNpba9^oovOi}~g|S
Z /ᆉ4>8r>:Ѵukh|Q|ωlg4qpe\***;nNū]~Xڔ&NS嚥YXV٦[4^isHkUնuW^qisB"X7qTT)DfՒ\cisYI4ֺ]P%Vmj)R:s4IMIQjNҽq_]Lۉ,mS,YBa#efLO^6%UhzM%Envpxl4na^MIMͩꣻ~M3*^AX 5M*sc᯲Y\xMY|8H~ڂsyjW1nf4XY6xFmGY^դMyOҧb1,=iCĨJ~ŵE)N
Q_J._ϧ__*C/^
:w+|a=w#㟄1Ox.aV_x&K<Q)lr|spUg8xTRp(ӝ>jJ=i^R07Ƽ:X4k7&hʌbM˕IRQjzU_٧7ψ ݟ<ui=oAk7֕OV_Zv\w$O?N7RAjZZs4p#O*pJRQ)AS(BⓚJGC:ԭI:Npn+oݿ0kK-߉v
tokS_>=-_k:ZZԼ5[i]\OǯEme9WB"э(F6I7B>;U'y9<'xy,55*6(%m6I+zZ۬A -Vn#updY]ls^ruOvs>XFg-{</}VǗ:vg]E{wƑIWLZnsHV̾^u^l<M|ʤnJQM^pGZ6"E%	yx</|IqmyvIe93/rtr
RZ?w~]ku}X+T$ًIk~JI2Dд$;>n G;0"efE\Chb)˞Xm 6|>;%2Lc0.3;+SOh~&kz拤hrY.A&w{j6wv7:\h	-۬SF8[x7yn_Tuy;kM{֒KދӀOR6u)(<qOF䥥qy߳φ~+G>𮽣sĿk%}]&M+D<:V&a-60Zg$mw4cˉ*qDNsZiU*7)U)6voVާ!N)%F	rYE(dy;\).F
T$r<2&[s1(V]WjEo^Mҳc
o'?~*+Pt=#Ǘ/5EkJԴ"gKˋ#ҧmB{4coju]HޥhUz&^[x|uJ1xFU*:\MǑJ-Z񔮛M~o| |ixr>ogH4.r[Ә'm:K總}%rWʮ?)NӝKT'ܒJWzwgx#J({F#Ry99&bZNvNm_g]COm&|F[?QuH-k׳{;%p4w[V֣媗-;FQIYBOU%k;2(x$jA¼VJpxp7wyN8^V䒔[?*u_ A<'|E{_ ~_<)qxX][duqOsm2Uj/'lP~p=*QJrnNڶi})cV'NrTYZӂcOIr+w%oG.ͯ.łNW$`i4ndХOmmZ/Ҟ!(&ڎMgkѮq&g')]Tl=^д?zT:͵ wR\CWziM+YIq,qo(UWa]TqT/ȗJu%Km]eJJp{=.ݶKښ%__m H.4|S</h:i:ǅ5-u{G5O+{k56K%xJuy_2񓔡'U y{OSRcvےZM$ƭmh4?xt/tH鴏xniuhlg.lJ2>U?'m̞nյMRN)E+>fԷ]-;^uI<V._2HĔ,8I/'ObtZ{U\ޒvgkzGSYH	d{gS6*#Πrs<d#/ҵI.Zl[taa>ϫ/,eU;xXAeu.Ŭj:!${H	$LMUV\N򔜛}dݟ_-8+E_wk¯eῄ^Ӽ7뺯-Sw퇇`X-uMp5V@_S*|[uv+wZzyuV' |][7f6i}ٛi-X阷@H0$Va}.GTWgmn]=N7k_woEe _<OSßE|9>#Lֵ Juo l<=,Ө\#׆㽿º MY-ob[SF9֔
iҒ';)K5JFN㪖r֔W$*TFS\4bJ*rwhu?|+/Q\x_/ռo<kSu84fh]xRK/-,>oqS^8uM9CtjRT]N
u̽\N/82<ʜ%I^ZSP~
$ M?[Ӿxk7?k	+y&C<c!TKC |V.҄r:aniқRK{rvҼuy"ӵIkZ=yD~	t3\ѣKTTm+åLsF)ÜqTKU֮ߧu~}O3:eRxzғnigV܅OȪ	=X9ng9<cѷ+^]O/fە9Mn讶0k\ƶڊ#$0~CUuaҹkѫw8wZV=<-|=NN&Ӎ'̶׿G )𯎮?ࣟ;o5ghC &E|%Ն͠MkRXͤAkڵUL>k-y|O3~ hӓ(ѮՔ*BݷRfT_M𷂼W|VoU3<,ھs%>'ԑ>ѥi:um[R&,m⸻Ԅg	{JUԕeM?+R'.f=ROg}y/:3Z`t-*݋Tn3Elʱ=<+.$fj𳂧K׿NU/˛owG>zp\4ky}մiI%NAM(ۧ6BPٵ~zO톱Wߴ_Hںj-^|+&X&$YH"mr*툎~VF-Z7+q <A-?nki k>{k}İ,иɼ@{Ied& _4tOXK-=Wcu(A5˼Q9(0͐?՝.ץJUV\IjM4Oo}u}|ϡm/_ÿ.OԠzkGP$`{^\\.?08y^K=,:H7nb<naRM{9F<tf\kۃ+!^ϫh,HO<y#GqրIKLEoL9]V䔱2]S[8=wc><q޷nV[iJ?+ƃ?Mm?gߋ:iL&}\xFC]rieuԤ--̊nY~~~3䚋RmhW}\Mou u|\~ kz5M'6/,Yc]x_᷄ԵGPeյ9XѼ=Msiwl&/FYk΍)ҍ.I˛7(4id7y^;'ѧj#J-3Qsm;Ihz=⧁?>K;?%_Qů|FujAYauX0hz0Y꺏yINIr;iJJ)KWk7'a7^Ra1Ihϒ|4[$._?&:nx ƓٙV+'uv0HDu]܌C数ù8PSr^%b^V_G kO|ڷg RExNmu{?¾$H|o}ᘠAw\`'x`k:1xMt4Rc&WtX3<^5UV4dVwhUjJ'Kܺ _:	߶Dgčǉu};HQq64[.s뚕qGem&h&Ⱦ0|MZt\RHͧws/3*SUP*҄!M(Ƅz%SnXk3M/]C_"m)`t
QjL//Ndm.y.<t(\sT*v[s&n3O#<NhI:mJUީ'3 i~ƾeV׼Wv:mM<cFB~)KPEo>2	Vccߠ̪uW<$.PT+WX}cER^/ɵͥVO|wsλxVǊ5\ <Ehh6uEhXbR'b)TZ+1qeu}|?ajqe	FWUڵdt>.~N[z4LUyRMk={_w`$N)z{߁s.f=l>vh8⍗R(d.jX00r3|3F%K=-e5_}{Gsomu4XfeMeWF(A*Dd6RV쯿4?(%N_cGMnG7	/kO-\(@rW YR2Ef޽n Ba9EY7 o3鯁|n?gg*IY|K UK{o|=cx7Mes?^Im.s+0RW[*TJQ:vV#Sf8\Mj#M7%K|NunNQ)F'/?jڛM?/篟.Fo?_\;}G5VGNV:Ο a̮0TpXbq*.QJOΔ].h9%(W~+slb*b3<mz+iTURRܼME=Vv>?cO	H|1D?|I>	X5ֵc7mCĞ%wu[6Ӯ▇ZBմ;=;Qu}R]+P=K4q
xY-W,$ڻoMIZ?>;څWrO/ex˞Tn䜢|4|D'n|CkdТ֭uX~6/ԍYm{2\jZ^ 9c#T?gRg{z6Jn?LM~ԣO֛QZ]lM Fm%GAO@k?z /7xúcqi	>&\K6yk";)m^M:5c7zܥ]vݹq'e4p凡Ӝ`RWԽ8ΣMǀ%Ŀ
<%⸾0xY<S.OkI.K&[8]VKյ\G<	)B0ՂI	/Z_Et31xsZKRiY×Jvh$   O|[sWxnIo[>8zwfռY藶CÞMw+%Gi^~ݖlSUTV\ҍYa)>EQNO{7{/ͬW)J++~v)>dI7w[{u=Ll/4GN4Ylo{{+KxtI9Q\<SrnI6zG|_++v2[gB {w!*pM4Z	w[w=IxZޕOe_vQ䏚drN4)]$mhάNq vk7?	8蟳+MSѮ0Ϭi8icMBEp"f\	35}[mn]F}.`SxSndk^;a 7)kq|KKu0
R6}#WXbr%R	ue-;8c#+I7Ra\ܯ
xU)iӒV}, R^] xn-.\ӴY"u&A,^ح6+<CF]~t֎0NM|'|=H˙.Oſ,)Xh?<)J%~v`E߇tI^5yq,gʜ$wUWWmݿ9(ͺV =OڗjwMww階|Gs{Ӥckg-泶/]ClL+'1^֭UN[ԕYvڰrP	EF*2Qq{} %*c"Cuc3-O
Z8YVU>/?JnVnyKtIY5|]]$E+TvnOKKO7Lj^+[~)nWDkv:YI^֖RŴlkqGh]N'|\&ԥYYdS*.5+ЯӨ)8sAIS[iMmݯ(o#|S>|o&kO3U3>񎗯:_Ǥv:TڴNz\cG_WiƦqSmR4TpJm&!U1V

xǇ!T8U*ΝZ|iʍGSR88?i-}ҿ_kR'~xd Y.%RӴwx4]>KKx&31RwT*r-Z(iSdY*cs*4F<hSQΛSu%qL"mgk	ei0-ʹ!ܥ[2yM%B/S^rWwH08˚.NN)~=oxө<^+aK?鷾_*}.-8/=t#.Z]RRNw{.Nsѡ_	%i?+p)+I;.^i^H	`/sm}-1$ Ěſ|%wå~iNG\BV{)-'MvQ fK]3u;s;;=6W?Oh_wkhv!|o>T;s*'D!Mq8jmTj. 14)T+-,7>?>:>Ҽe|Uc>5_ٯ|}}y2u_Y>isgeM{j,$̻02ڴ*ce
=oIkj]`a1*G Fsի^׵v~Cx>6ju	g4?Gs;^G!n)XAQfcTqU|+wܶ}V>TuNV]TVܗnH0&ش	"+z9a!6;<<l*:OR_5E~fk\4Ֆ uz~%wx'N-g$I+v"4	/٦ ȕHpONԤIZZZ׳u=N1QrUvm}4~xV;xP{>-F"^ϸ+(幞h4ͺ?:T^JIm?w\kSAJ2Wn1o{Z_w ~.iuODKlxſ
,<!+t <Cx"S!\g4ڗ餒JïĹj5+'g;hZvf%[9Kҭ|6.XͻN4lTy].hk"RG@i>x3j˨j':nMf]Vu[Ekw[Ǌ%j茖qpzTNHRjMEk޼]z%׫eC)JPa$Ɲ7̩GD>XZ׏	s}_u6yKO_iO~-/ ]ZB SNZ6,d(V7%	v|wkWusrJ*S/i^Mӧ	6ԍvR=%l/! Cx40#m<r*yS=ɻIE^=՟Kt۱ϑ'h)SqRNNO8ﲒ?tୟ<#㟌_~x'v|uϊ ? 7vK]K+u:q?yEL._b0+BT/u)(:{nV%oO4:v3i"ӧH4u7ݕ۽ .K.Ѱ2Q*~bA-#9$Xv~gjrEdE!þo&YD-|ggt4V8aGI_mo
N*oJv4Ѫn-M7[ˢRvjIW6}_3ZjW?zw/
xgX[CjM4kJs/49{1t%ԂNϬzC.ЕbR;;|qz}^ZiVpw^Υh:7qsoj:}:{mwTԮ#:&-h^(=ں滊Z+jk^4+I5TRRk7vA ~jwk_~=e GvYKM_dmc3xXLqx=va+a,4kJJURT`JRN#(ѥTҵ8qƺUZ:DܪTz%Jw~GJ|g&?isT;+-_zVƏ}oYx*mCAt]>+}VR<V&GL7Ό#/e')J)nn\'7MQ^ChQSIJ6Q勂]z]jOߌ:x]a&sp< " 6zNo(k}K@5=.h]F1ae9֗+k}QYUECAE{HtDB<"7 'p0?/Jm1~v.ʃ5Add&X'+Hn Ko!_^cYRIt]_JϏty(IU}jḣFM]8ʔ(S)Ӧ)Ӧ栓mkU?L괫N>q
aN4(rqk[)(3ugZXT9uA<]aXɨ o˫ZkWʚ>iWͬ.nWn7/Q8Zti6nZ⌆
a,TS;C	4_o_|?mZ;ؚi-C:Igws{L.6ibaQIh^~qfP^);[n#=K
& K/?h7H33J{'n||76NCnm_ikfK.b_V^r$Tg^ЌK+qi&rI9h`VcFRtg)AΤ9乶oW *O^hn5;[MGG7-wEa-R_7Y[Ʊ)y>Mգ'ԋkvrzǑT1+(_~NX???'!k?89?4Yg]sKXxBxCQҼCYmnax,ln#)b^Yы:~MYFT䢡I6'gL6Y*ub8ʳNvT:jnJ"o.f[_c?j|m?^+߇Sj+M𗌾@x_֑m#._Qj<Ur-AizE֢ˣOj0PtJIǕ'6IJ3MZ*RI5['Sh1cWџRBiT)iYZSK(EyEY~_xo|{xcj O
~kMqjZ<_aAo:SLԵIn|I{>{-şm=uZ*i*nݔRvqPՔfcMTRPr|;;ٟ?[w%ѝ5]nL[}V+*NQգmF5+M%6,VwK01,D{z4$tRnm7dQ{/ѧdF'xe(98_1_KW't#kxf̱%ϔ,,b|jE?g绹d,%6 wJlwemO[7:UI(7m$m?jZVogK_xX3f9b4`u\iR>kgVr(dMuycqx
1tRRejPNΤ5JJMEh|eUO(ռ4+ovOvWxE4Եqln$[qMVb쬪w*eĪ?|Ib1u^!'ZZ?8g`Tk+FMm~o>Xx7B<oYxYmuen×?y5'/K]YXB;ON8*t0$uvN[)=G0#'RTA9^VI]G}~|-淧Z<)<7Ub]C>!צ}z\i%imktiG|GVcթÙJpoe٭n&ۓoLէN9	1e/yݥvZY%eρz7ogBLSiZmi-vl`[qk۬v߈Կ/ \~G[sZ6eI<VʊX-FQAHYK'vMc3:)P/zJ:k/mZIo3ͨ`TiT|R~OZx'\-+/Z|5A!mk3AFYQso%kX]Z5ޒ[O.|h4NJXO$VqUm:*jF2l~{
u5Y(JtZzJ.U\W4e(lI_|:aǍZv%5 H&ԗZou0<Ooi~"krmj;T_[-ʼc<L4*ʖ&Nr_gG"b I3phUiuqUg|6{Yx	eWV]߇FGr	5փL4=&ii>-:}|{Ø\<VUN*eJʜbN>t	n9+g,(c(a0д\bfWZQiη.⏋^>AngǾ/<8kZx{kwV5u_gV&m:-tT72q`ʥ՜';+6?x)Uu!rrS>mymn[wv?H>x?_El,=\-~kuIo$K(s(fCn<Me;;-6~VϔJO5ޭknW{tc5omB[{{[Y-#2Ŭ$|v-$1:VHI)5+][˨J3M.Ϣvށ23;f|Bi/A#&Fʞq[,Hmu+?wUE+J?u릤jMIJJ^~GQuf :o7h^ iVn5_Ixmm$^^m5կ$W8KV*V9+yNGT%iӅ(Z:7+hZI5wu\xpѶuo
T/p-ƥ;J!f W%j#~u+lۿ鯑BvPnJ=lO:aw[t2iimGS	LWHΎpOo0u?ҿv{WvVe:Z_nHeԴMҪs}8̏lh'd2ƭbRONl}$z-: [ &zxköfMxf<Swf١/l H
"@T.JRzZ]t9S莟 oG?ۡռWiCjVos[[e}*Mmi<	sq1gl ~V彮=uW<2[iWZݬݟGσিg<CK_3K?|5𷆤wjzfmK6񇈭mmuDzy\_n"XZcJzTQqQb9aq|q|^7+0/sծE2^˙󨫸ǚ*RR>? .?j?kG~l"|Sw^3m46H|C]íx4cCM$I˭8A4{^2qM"gQ]G*IIM);Ԝ,ÜOZS2l9:Z
N5AnVT<];)G/xAkm'O᷌<_+I|O JK\æ##2[M/ቄksEӥEJj\X%-z??p[Q(RropRVSIB7kY} m xWM_~|S*W$kZ}Ih-G3n5(F]JZv{ݯ2dRQi+{6in|(e~~g@_Ǳ="^ѯ!:γ^ݽӮ .lSH[_2<sCT?+ݗt{iF:apY>6.s}G)Q655%ϖSB M}wwſ[me<Ei'xcX QO.h㼴կ/<Kkko-qU+{:x
kSj0M$ם6dWSx<0XL&6^Y:ubGSǓJnVQW m@KC/|qo~#dOX_j夐y!:vo{uחu:T>^hAWsA*r p9%5ԅgNL>[O2[!*u)8FJ4)ڟ}bV.5kNIQ..d0qt`,yy7'?,=
Xu{:{[i?iM昬\ҼUͫvee{_]u[ۘ&diYW2yW&ݴkhޟ}3	ZBM6}5оXlն`<bRȸob:E5y^vUtks4? aM5Vۋp,mVoxG:Q=qhHy|lab{,&rҍ:%vmӾ[ 3?VuX.i-il>X6mUQʬ0kpMso Ky[IXeV= |ܿhĳ ontpmʵ8.=O%IYդꖧ<aSៅ5^C K-wEO4mBKCXuo ;D?AWQU]
\XSj<mk&|p،TX)O"Ewɾ˦ I| h{~!h^=<ee^<@|7S.wuyRuk-<Gas~sʅjq5g7:?I)KZXgӳݼj?mog5GW[_&5-*M'6>r4hX%..gOV:8(Sr$"w%#_[w?a{ wfk?|^/6Ӽs^@[E{i֮Cw;:O2˰X?b*.[&9%]ὶ*R҇=T杖b%-6߳>x<Gt]2 F`guUźI*GiFݷEb1̒>xeyR8((`pqW䝓r]u<(}b*qaUʪRnS3rw묯U# g]Oi>R2{2[]S,!XJrg=[V^OS+8Fok[% ؇}]O~/xW	qHŶo孮,rKR\4Ek9ǑFtI; )Bj1PM^VdK=| f WH| |K : >(xz[m]K^:wtx)-%i[ķZ,/1ø|
*\[ҤUIZ*RJ̞-q<pCOE.U,/?7,ye%M>v9E9;? a|9I-τ|= Rǣiᦓk˃uq<$wwP{3_O|^%)Ϋںr:ivWzElGb:q(mGϟN/ٯ	<Cg+˛Y,b7SiWo^܉"IudP!Eщ h*Y.2JJ79UrOѮm̤ ݡ\<dgH[/ 4KVv Ľ$b/Q%"laxu==-_f3kN4Ҕ]eENk6;7i'ŨaS.QWPcoߵG]5]G+IeQIw}{GR@~R<Ik1A1"Ŀ`xYUo55Vj14iUJZMoik(]+Ŧ|',T_wM[KFn ?/~x\ZxgOß-~uPwf@#}"?|-o _'˓5#FRrj%۱
YI=c?g~,ˬ "x/E𾿣]5Yyb+fY5%lfd4%pjNN
)+ʥFVݬxHcz{.Y+ۥmH[Y*G+2僫d\7s$Js)8$-}4$B2z)~'a,n 4x'Ŀzk(>/_ь	[xB𷂵â
u5nT]|?P\Ξ&*SN0ӗ6*Υju"ܣ䚜9dM˨aaFj9:J3HBI^I'x-}U~v~𷇴Nz.=>?P1.aoYD%m,u-JIn#9gJiԄ*NUT*ujNNsn/
R8-$v#RQj6by]!}dT  9<:WZkR.y|SRnܫy<c(gqfYW3!Ќ#N8$R,5x{ZVJ<umdߵ[5.VJۺdUCo.ï7s? Msq~I;!kFk
漛S.T8?QJ8L}zҊJ;*pXäVu?ubnUSPUjAKӝ%}7 |M  :K/MφK$~[-7IDZO?]UukbDRS9'RyFΔ%jmv}w[^u.X<57(*F(Tk-vV>xS[+.~ x^Oq4w-j.l+M8lu6bM>F7 iSipSroE/w+PZ68m_I.X9:[/;L4V6ֳDcXص#<RmJkNsГj_b*mF)Jlf]O=ϨB:pR熎A9NJi𦜮HNŚω<C|׾,|o|Cc=["Cj]Eo5YU"1kVPVթBn) $߿RѥvuBᳺ{/5wG3  c n/O:x?߶eq'q/+uyC_«F ĚH~˨xvK}4,e:p.+T]ou匟NfYKݝ{Ϻ]>	 @ $/_^xR/k(OՅƅO	?ۖ6{asᩭ/oskƍmɁRrs7vUm4Wj~c9VSi]^wJ: 7{?>x_aj:_tBռc}xJu;ukM>-i -3~Vh2pi<0^Ѩ*WV4}cccQbԥMz)V\JIԄy%)OSnZΓH +=3Gԯivk1Ѵ2{uݼ."_"bRqJ)Z5e+-tU8RaO9NM7:|V*n	ʴ_&5,!ﯥԿlo閣K)E"bek*'b7g!h;Z ˸^oޭ^ֿekxω>$xƍKuV/>(ψd|Y5hCqŲ˫8Z8+TwV]I5^yԔZinvU~GO1%7-!_[5KEXuywm˕0[+勜Y=OVmO}z6	O,a-5^WKեKh`	j ^A&y99JddKw<ҍL2vv]wxPTf<1x]~$%񦛧ͮmréZ=p՜qʗSxpRIIϞڻvMzZmTXӶne4׺ʕ򺿑'o a|-?>#xk>~m7\$LTZ,I+cZ'gi,+MF(RjBt/r-璒pjn+[SxܾX<-hUFpN%
U!([фW
1zgabV6ig@6WO4UY Y}s$'fp,pHBW|}x6Y)Ɯ{]+k\f =J-TH@@w""!J*V1SJ#ͧee~/?EJ$) #G  #5Lg^7X.>jh:LH-֛ǣ]^ŋvkeAo'#q(E/g5ej^/w=Zc˳%A֋[N{d[]O :_-_ j+Sv|*lޫmD$M'u{6yu/MY_~s[."κ'߻]Gy+iGќ{TV=㢚VV垼͟˔vG&iOj$]-"Gd#oQ>_ӡ҃KEizfu-.}z~3ڴ@x@:C7mLq/
#Jav2-16mɩ黔SCk{)WM&)^#[5)xo=vѮ.-Vw4Ukcȼ0D.YdH/z8J9'֏dRMv}W**>.RjU+]'mҷw1״&w?ڛ_lu,|?xþ$kYkS> w܅Q.nj45JPYҺʛWz0<U
릏}~`OneiVrK,DmJJF
B	;J>UI٭~L:~ -GgAգЦuqj^+kkUQb2qe3" g?zd|z] ׼;ᦶI6iB_O\^*m-|OM_VvƗkNswgB/c*3ldA7kK7eӹ8Z80mi7>[;G[YY%ޭjAfImX^\da
e iӭ^hپYd{(]#)V`a99B:TC˕E(ZW?mE4N>;q捈orҴr.5]m}\$쬜[Iڟ1O6˖)Femg}׎|3!zK%ƙ]J7e%Nk0I<1$$SUܪx{uEѧ۩0B.Rj+6]vƿzGu7U,MZURP$Ĳ)9ZIwX5Z*GBF){%ެfYbix)֭*Qo]藑[cƥ@FBsy W <=g.>~2KLH'sG=22yJQMlgMxżeōg?44c|ևu?qnѵ.mls||X8*5ԝHK57*+Hy/}KwMƳ4:l%a<VY	$hDɖɯUd^V<9I ? 7C_??l xb{vIdF}{xq+AeizEާ_y{ba ~[.Wnkhpu)b%쪺p헼m\i^=ϋok%MwQڗ5RKGWofu-Jࠌ47E]\jEF*EE$--Eww+{V{'y	|OO܋Y/XQBZ!E:\cvPx$Ei#05fe^Z*JtN;N.6kꎚJQ[T?cA{g/_F?מ4h|GXꍧj[j6r=ݷ1"\m8#Q}iXIYR]۹}*I;>z} 3bK}kHgPXpc90G5?zjӿ 4 _ 3S;}kOov260|m֭l_˙4aRf춈ɕ>$qF%Z/k.ir˪յk40RU'SmFv)]m꿙؇ÿc&_|<EnmX|ŧ[ǪWU=+SuXk?bo+d{0a#Z:M'6j#e&0P2i>dm8>[ n/ö}`c&l6jHuWh{O*XeOfYJ'SW\ 3MqN4yg!oǑ8[.Wn3% ~^>$<6ֹ{M#:F_ڦ]h:#48+ä^B-:M>+RVM'NUGRm4NǙ9;W*u6U%*x*&[ٷ<4*(94sEH߄ďi||qmOpw_; +x⯄<KC}i&OMA^:tusXQbs(ԍNNPj|5)oiWLHy:'F7XyFPb5&{TN6q>7smIt#7_ٓ_k2jV]Oux5xsx7״huD1G?`(a9P8(֫5;$%(.ukTLvOR7A_"<*u׬':0'FM7<i s zK4kmS#d"Es`%B7mx\ 1_8NaN<^7BNR]y]n<$b*.[j?{x:^||SWI=Z>;]Fi;Id.4ݭ˟ HѢ%_	,ZmʹV\GjF2k7f}; ?ş:Ï\	i{xQXéEueѮeXk$98?$˱eE;OI9'5f駟\VJM%uuIj}.~S͖5WVzzj6]N$M.5(uo0Yt'Fy/"SXƜN)^<r>e8ҭS-Pvһi6/n~V2ؿ3_N
YVh^skSBV;bͮId6M2]kzWZ޷{}jZe:g^
-MiM%I!F+*ܩ%F~&<I];F]ܛz<	Y5׏-@"[.q8:2DUFB<; ħ<i5N<Nͧ~qmh|Jmkm4_ǟo_Zn5'wگLLO~'Ν{3&wt+{]t]j}5|_nxg.q\05aV!R5NqY8S(jҏ|qo8.iʢRUt&2^['&G~>xo/،<?;IKi xo^JҮ5O$Z xZHgLXK|Cgc2)J|٤#AѧOZWi*s*/i	47<8C`jp٪_W~TS(S(Qgۚ}y)3:[rݕąX4ka!+&KE/>߳ #gsk>?u{ڍs>xmf{h&2XOk#Y[<G{o8-XyEL5,>3ͻbܔm&H%xꏂ⼟4NT(W^+gGf~34-xO;;XheCum<SJͮ I4r'gxՆ]Bp;r(ƥuQJ2t2PI&eym'	c*IJUT5~k]BRZu~x|O'I5-noAsxZQikyoZrAvugh^kJ9p<8&O^_Wu!R|}iBwQ((tbie
iԖ*.eJa_<J77v|GĚmG>V1 _<KZkxJM51ihewb5}r+hMne96,Η*	K(ź*xJTj)J0oکmru#e<MSQweVxTc+O}QJjVJ?_>4WZqatkei [Z[F#,kW/Z*4c(ymm/sb*MʭiIWoM~Zk@~e:HI#t\@!3i%1B?:rN;:Pn	5-R/O_}>~ iBujuXnqtnfӘ]i"	Qho3X[?-^[K5C5)KեES5kZU?(?3s3buxgTkq=1UT]V'Y9iOSnG %J+{u"84F#k_k?%j?Po?Fj~FZ7[/t_2gUhCXZ]iޝ>Ke
TXZIWUm4.SƵ'WiE	I[g
m|Z[m:#5Aq)G)P<.+Q&'iVPARuopS]l}|:x[V'ӡQ 8a!.(P-qgwvOVѵ+ƒÚ<3ipipb[K-ȟLf/uxЏj$w3)[iѺQMYVc5B>y/8-+T2$duh'˪wNsN:h sվ	V^-	xJ}WVO;WSdR{-+h}*sube>UNHXDݯRѻn &WemW67ll6Q{X/fc54om[?TҴw"Em#Ngj	Qe6dP waeoe)l\DmRr{}Q&|D g ǢF^QeBu")VQӦX^{tk1qL:Tpueb{]?yLqȱtܲVJ\Jҵڶ^-ON.P~|kmΓ>4P<SϤXYK;K(a{yBȮ=>e[	UN>H+{3>bҪ$䔴My;-=77~7h)#ZO5;ԭ&<C?]EiNZcNuo/eJ]ܭcsiZFJx:jRzqҴ_3[6ʴWJ5j8yޢqjV੨9M9u~տG%x6>o^,7<G,|5|c{-WNյ95	oҾ)-76qp+9NXkVM&%+%+(ݧm>#!kFm9VU8,|:I<:jMNp4țʥ,t_̟mדv'5H[dR^-H{]܄RoepӧF_җ5Wn^VyYs|^#F5'XuWF*Ru_w_ګ_ k沖]O࿍5&xg-ޑ	X+43asp{<OayONRj𒍢e̬qn!P_J5a%5V9Ko~Si;\X ٷ҇6eeR %
9 cy;`Gs;W_4յl dU
4PĨ8%OZMzoE{WV@%Y-7#rx'sң?iZMO?ڏ珿h}Z(d~ "//-,x:Vf[l&XFGfT	˜pUPQqvr9t? )ʬNZ`5'&	B>eUb(%Leu]r= |_r;~t ]}+GMuwZJ|w9aF_1So+T;}ڃSnm]z'k	A5 VEi~<gJZW6rj?	|-fKäK
[xc$Z<Ac5}6Dд_1or`xL:B7Pv\rӃQ9Y_KQsՓIN]W+K7#źtWKǏl<MF8Ś]Y#~81hf,h)*T]%/Gz3~:~2W4vo#ڍcQQP6e˨ݾBEok3ʊ>.<~%	K[<qMO Da|1OZ
hVPyæӼ6Fuk*	$C,d[t19uWITM)J. ÕHH;4c%mM'faW`=z;Y? g_+%5gS8_:&?|BӴOjzn\z~/_kI[Iӵ;ú^cqb~ҷ 3 *XIa<'F*_~Ϟ2Zßk_\ycCV.Jk(q="sPvj*JIj|:?টyT:ƻ.հJ,Xj-ٶ(gOqzi*U_ֿ?2	JBޑN[1߷.khsE?+{℗!w:hOxĺW6Ѧ%<MXKf4MN{"}r5qsA)YG{Z/WnY-zxBX\R5%7RoT[orqZ5?z?
/>~ß(`ӵ 'xJTZݝ 	Y.-.bY[i~Kܾ#3.p4*.0-8csji7qGCnf\d7aJXyK.kHN.);)_/}7u񞳫i-<;sw[C<=SNKTiu{IʬoL#*_0r% oURwݤMv͠v߁OAgGk%ҥմ>Ya{Z$]Z`Iqf2O ;ūo)EtkgXHEK/ [asry0v
r3c?;/1hKM:0;jP]gT.Uh4{
xk[@L|x7OݩF&)JTJ.NSisѧ5$ןo64?!m׍.4W])4K+#*]KY! Qo#<e>UZ\I
-iK_Mzpt򖶽DMG}~ ?<7uxk>)ۨi:u;[#]#Gx~;A楮\-Ƴڟxw6S\^RM]A&]ۤS\	R&-s^ֽEeS rxk⯁kU] h7ƟQio4OzFiuj[cw6W}Z	s"GrJ*y5(LQbZj'hɹrzeczJoSw^ӕٶغKW2Ӵ>L<-ҴC=hTp}Gkh-QzVoi1F@59RujTRu%{ΥI7*򔛔=R.XʢkDd%d~&m\AKN#4L+.RBW8>6>ˣJMjєֻgF<[[USU:?^!m:-KwhZjG=n4ۛdj;kgf8U\*YVJ-<]̯ΚrrVm-m+dqk	Y6\VwQ$j7ZoMi3xrSqKy"Ax?5]w=žl50]ͫPokh,}KY[$eiUJu29='V1I{ђiHĘLÎPtcWx:H7JEM7dݝm?OGHX2l
"FFH!t';)G{i%n ~o+m r=gچoksAg<[X\&5BW1.}wUK%9&[̪RQ^4mkկ=~WgYnQ_%FJ-h)imZNy ->M_xj㳹a7"Lyy[tζ[kx_%,x,*<5:s2hN
P|TTqQsnWq?w2Y\;ن6JqbjSSW._F%';{mp~_v1IQCeHgnQ垾q>U{&a1cGV6PM6!q%~~?<a0 wënEi|oXZOW73 zZe"]{EtK}Y*Uh4*ŭ 2|6"Xٽ"NV[m? A~_YS>CҎů axa
4Vv-ݛxV{-Oip01j.MJVOrK]մLvZZ}w9Ji{JUhᦧIrxe*(U%)I|d|Wltx'+o
[3S~=OIiu2;+XwލKM,tFL9ר:-Qկ^w爙*v}5Vu#8?mZ2rwMKYFSyJ#Ỷh-ԋl;ԄH[MzU>.r^Fzj?{tkm>CMk(~jΝhZmֶ5/Lմ[vBxӅų-՛_?-CҌٿ]U=aim[U}U{w=~lc~:v&4ֆ,Cw{kMZuDbT_ v+xN׶6Eo̕V{7\֢{5Twn[~px^5c}|Us>(gC}fU7[Xɻ>+;Yn3,:qI;zI5kl|~a<f_JIOm_'ߴ%-+Z6/hzW$W:5kmg_EVt T0o~iϒ3tt~ÜEO1j*'QvqNKv?Lh_ ㏊}xX?|YYG1Iͼ:T5kn%[.t|}\NYIޔ)^V۵cb]R#F5>JTje'={8A{IO8&ƿ'7t EBm=iey"DhQBdzMB_ke]??MW'.l^B\wv"/J`I:I䘄w/:l!IRVO'|
-ww~Ưý{UO]A.E׬u+FK;u~إȯշIݫ\:N%4NQZ'+hևFMS=yS֫Cr  TdEOſo=_$Y|c|SpՔb:"j7&G-ǺSr3M{9ũJSPm4j^vc8n2:tЭRR
8*QJ-5t%ѿMw6ĚwX-I'"K1px2n%T9a579-vkKߵ0H9VUg+slluT2|"Eυ& >k^Au}hb𶱨jp)m*^6{<5Ԛ5k?2ʞ*2-VqiIM%(7U累̹>R-iTZwVR-oT'>!
|G)uwxrZjiW+wY=ػK_^,<ΥZ5*8(R%hvI/U*gRJ|٭W+t'D|~__?@71z'-gxbm'|CZZ{ x4xRKk9lOggc+iEt=Lt1tRRu74Ҍy!fNM66o!WIssF=wdW[K{{O'W,͕"܍uK嵳xhMD*YBIRRMբZm..Y%Rp榣w}J iXt[-Cí{gw;]Ao}+t3~g<S(|ezF
P2v};a7Rm{X<f*'RlEkUc9axwvww(Dѱʕ8l]DWBi]|k{z?U58I;F)zEtMSׂ)x\k_/'>umA%U-d$S@LWΕ+By?zu(:Pw
\K~n[=7wQuiӗGMU*)Pm}Qk lj;i/|QohN<nA=+Ú }HR)	JH]v30_StjjFr-rJhZzq3g8)#M1iԚj#9Y9s= e'GolY۟|\M_+m,zzt
ƋF9,> 	/V:e0}P<2M7Vl]maXڹviê8*w
ޔ7]p(;&kuf~~ӟlwogZԼ+|HtOkkmʗ΅պ-滯yT_aɩ,$ԱXX.XP\vRn?r&u'iI%f$GMt 'm'F.WC|AĚ*4~"FJh͆eɮ[L.umQZ+&sjP:XEO՗-[%&ofW16ΪQR޲ziZxs+@1PH>#'/wI}<Q}4m <j=[q>f[C}BE\kX{
iit<*MwNɾWαF /djnyG%)Z]mK{\˞ݭy6vZki0j_[_Opx(K{<dBed:_ϕ/fFx؏ZFe *y'<T%aIEׯs>XkZkZjRԵc<iSD^R)imZhCt]CD;z)[L}5e*Mkv/I 
|Uk~?|-.kqok|7P}j6FV;i?:[DFc52]xΔSR{h8J#-?/g/O4:֗n&Y,u|n^ycc;ɷt=\}M0v ^},xK b߃<|sM~ |-.,<1_6X)"Ӵ~j޷tME&,o-))l4\;{KGZI-~-Z&._ogW헫ˣY^ <-uqWö%.m1{{(ukŕƹ9{;OA N1*R5$wwwCBVj	{)]+^
֛>/Eu+mSWHLcVWnn"^2,qx:.'E]+G?E,>g%OVJѽ^T٫=?>_s3񭞧`.Ai[@"#HDEXF4Ь'jKiIGt[>)z-)$f;+t>~/xs>ƾҵ}6kL^/>+eL6iڭ<Ks\|<tҜJq\r5z+'vkyr晜\R9jNNZ
OKH6H*Ec /'ß>X[ǟ<3Kk{^X]M-CVKoK*EweøT~ˤu:q7>ڶxʹKZ{4ršݭȀmW!DUn(1ߜ;ӊTcgknKI)ݯ-};{ß+>+=um̒Xpi'xWyѣ^plw*SnOYFדٺ<|֍ie:*+k;7iڤv/.nc5 A<rd`L/ar$M%ʯ
+GgAmY*uܶvZן&]%=i_7>{7k%U2ͨ9VXko[;uʵm"-J$;I%cg'Zm۝} +m=@ŵv7dMj2U0I(S$0(UxK5tg-\7+N)~tm?>~t˘'6YhX-弙F!7!-wҒRKK$Avi-?}  _L׿iiW^Vh
uKAR9toku2ͷYخv˔O:}2h<&T➰~e^֢褯pkm\С-=Gu7k[-?~,|Gh^*)w'l>$e'__h^_f5kMFpሡV4*&{fR\Ӕqo]7:]*u%UMӊ䜣c77gjJ[I}7iXEkmZfQ[jUP ( _1(ZMvmtOyII_G$,C*E}*>ѣҢBrFQ|RqkTt_QN.1i;٧} 1ڇWZ]xDYͨY؛K눣Yy;hYRd6Es?w[qRM++Y]8%e\вaM[4ݒ/#տgO-ǈu	mͨkV]*[Ed#Iv[[G+L
hqh}_t9N\B>I9M NiIO竐eUfTB)MurW6I/Ec9p𷀼9:~4djhnuWK8ڥU28>5E*.E%8	'e,BXxIӜnzJOi-Guxi<=qrY^gKi-oA
<.̅
f.&MݵoUp2,[]RWqp_~oVsizU]iMnQI%ͬG2\Fm4ZQ"<SmK}]F4IrEn Ž;1ٗώn7Ϧ&	uSmoI.]jUM:	z{[=UxK+KVo^>kcr_ůfWdW/Y[xZYʓީH#s"!.G
Ք$)[]m ғt潕Gmy4exGzV.[|]Eɻ^K|d+G$Iqm;<s3!T*'9լtwhZזƱ*iRRNЕY]I=u]B☐d,V7/fMUyV-rcSOs|%}=E5ݕŅƟ<ZW-͍ŭռ"I<n1_;\W{oOGS^|gewKi<]p5!uh~+he Z̚NoAD~'ugtvߥޝ_קΗj.׽_< }/Qy~to
:_υ lRڮ/|H`kFId[XLDT-vH+)Ikve{of6K_^:Լ;Yaǋ|
x@{xv-bWlu2Igzu]_.M`*}ny{<3pmM'TOV٤֩g?cӝjוFj쯣VӹΩNI"kZӵZ,ɧnyɺQ<dgai/m-ޭM:*útWM˶~ĭ\hw|ewZںHˮvFpڼtb8y7:#Z^׶N#T6}O&kQ' ⿀~5v:mֿD~//f	;ۻM?j/ip]N[D6mcQy%dԬ[z=Oڸ4ptp5&:QWN҂jiNi|8&GOB_:ŉmi<UT[W7-nl/owZ[qy^kR]hT*t$۾uDFY*N5%Ptd_2ON{-]~C69i_[Mm 父Xëʞ>#M
CSݼ?~\~7Xʗ.:s'5'.eŭ٦zJ5#:N#:(AF^(qj{ϙ[I^ǘ+ xᗀ|/_{Rg>H?Jxoa#jjpZ[Gi1[N=Jkg)sI(W{'n,Vq,-4k)'nz[wv֧Tk_
 W|kxǻz9^L .hVoڵ)Li]V87~TU:vʔ%xs_٩lY:qWXT)	|a6mxA_U#SxWY4s²ȟ"ğzTsWTKv}F$71"IEU<eeYo=_6MO*~xICqi-V̺}Py 677@e%'Re^DNQj: NյKռKI:Exu)olɣ堞Uh`J=;)tՔ_KE՚M} }o|3mEg!D:om|x\>'![oEogle;xżiV⏵Y{4ϒ_qxd K +?#ȷſƆTȺ=CWfkkEp2|0JR>e 4O&?ڛ-sÚ'uRh$;i:gKa4*`!͝9l~ov2JOy5SZ9$烈<~:yKc =9:GXG<5K/,<CdYJTN4iH@ҵҮU 6G5KM{JW+.z[rKwjt)E3p.hh|z5_-u?/;O`evQ{m*~+g'<1g}*򡷾s-E7mMÐ)9-ױ]9[_ru}5?!OmᯂҴFdG~(6PoײH̴1K磍JͶuOqwWvo^ۣ_]Bmf2]l+R}0aH`p(\
:7'%Wr {~&WV'J/OyoVDQ_xᎿ΢3?K	xPi̒=aWbܗ-jq5۵Ju㭗i7?;oySɴZFںewG~9֭m7/)akkDlPծ[++%%Kq,Q?u*c
iFR凵roK+D]O=bn{ۣ :xw]E>>Oτc$5cmzWkgSe^&SwjIFUTLajqXviJo %NO1}bW	nkq4f%-7xJy8asNPV/Q&(ӣ_n0tp,nIr'pm=ics\='y:u lE\F2KJ)ǚ焥)?Ŀ8s |k7h[+]k@EOW-ZMjeS}Vud(m﷮ˌRwRQ6mݻ{n72 w+{<Yi|~0kXi[ŧo.7bO@Y^{kGm2Q5cVX8)䛌Z^IB*wi)1tN}o}YG%V0x)d{C#z?. - -- 4ytKFd#w,80_gO5RbKPZ}/83i~[iI|/ i O 7 mx[mm9-s+*'J7o:|տw911dt}_S/' ^=Ym_=  4cy,CPl5Z6nasq+Ө(ٌ~iq6[AɫUo:j̪F[igu΋
wD ?etxaU̡M ܓ^f}k;|^Jsbsk(5q2m䌬4KpJVPrN*xhӽ(S=6J1Zs.O[|wXj2A-r3|-^[hs1\@q:FDYfT9H%n-wNG6u^O/n8as#°I+8}={{_3ihZH}cq6I]k6fƥXB㺲YH差l厛дo)ZٽSLg>ΥR
_^ΤiӔu̕h o	+~g'4^55}+ⷋI?}l.<9M*(|5wk#V3.+Ujpve	7+6Rm+))J%*Q||u24#5xJ8|Aug-a c~CT:Z_PM sE+/_.ȜWR*_u"FiKN6F
vPQog~%7oًpF/~<|I.oTmxZu-C /|OXl':PXhRR}˲|+JX(O\yRj:?8|;̹#:pR3U*:e=ST}-xn?̾#kN}}[J$c9%ertqx"	gm
@<8#0
UFF_u1Y^\y<K.|	㿴jRt3LGC\{<Ѝ$1\{g*	sny&RTWmq_'UrqەF?w j;:u4WMW1'h+ҽ)JXzQrtdnU=}]&[ib⹴u/i3f"mh/(0yLsŨEZjc%+hm|J/g?	@x
_,=O7	o>𦑠xofp;>54X-buHg&JN_Mu5r0_)FIr5hשCqf`ጭJ&N g4OݻNM--B
|>~!S7 X|(.4<'<-qiiwחEm*?/5;NVմoK]M^)(8'~Ŷ%w5J[jpUukԫR.mJ[dߒ Z~FXg?m jwQN"g$0$un<i~/Ï]k hm{؟h.+]XF ُkrC?&oM	n.dob	E9~?5a%[mNM7=f4}`ۊ[O$[7Iav)OZVkqj6Uu7Wy+}:1u(ו孓v8њrJwWoXx~麅YG<H	\Ё$ާSFQqN*nt|gU4哵L TIȖ{>m!}2I=žP
{83ooU(b$՟E?cx:P]('y(K[sy,\mmM*Qoԩx8ޔ__y}m>6. ?_<iw|oχ:]ֵiu y1=Q5kiKs\%ٵ Cr9ɬV.*p߿Y8MW}/cvoͳL#g>Jԣf_EH<MhW><Bڵߙ~gM8QIDY&.j%Qs][v}Kh.j1V gW?<yfWXihļ<b  |&hZi&ְ\ZΛp&kMXf+R+ʽwI>zgf6tUF#hWӴy]t<.?5_jIα3%Əy[Ŭxukzy:nw^#PTΥ.m펙|"{S~W9jwKOu-)*VoXM&4D[O1!7PAo%]dy60T%9E%Ik{V?nNq{v~G_]S9kY\jzmKYGQZGɣ`$H*_eΥ:RyFEx-e'ky|HT*?T)6kV?_?'|m7!ԵI,-a5xS5YnmxCxhs(s^l^iC$Ш9BXhqJU]j%vI8G2J5ZڕJ:msZB?ݿԧbU'KgJ#J5M1m"f9^iG4$lֶVoU+k/*sR մO
)^ :{[;BxIWֶt}UW5([MONu 7᾽,QCUTI(ۧ.65ׯuyPqu*&I7]__SMmJfkyf}1$w+Je8>;wOf|6V-+J7nJ6G5s,o>;kJK) fNsVty¤i]Y\%[^#T2Ql1\u(N&p?vi9-Zڵv龚#kx!y| kk7Vl,\]$|8ơw4d(KFWG'Q6QzW}>z?CxKj|?'6喹mj=q.oj׆#Hv-OIbڟҟG\3`1^:(I3jZm5%}+.8{19ήI48u`%_Ӝ#_g)FSqg|=>8<97glu7zhAl%#(!n//SN CO-JQ~*߼቗^oV=<e,*/F2I{)e8i ɹe+ZåDmܹHZ?(YĩoPXQ}I9k}ֺwٟ4c~xŏi~5}&oye{<$]UXoi\_Z<naSBrR85(Z=	aR2ҔddTg )O(ؿ5rj|92\GIoxKSvcPZGºޕ&,u4v\~c:.iU_%HIq{%{|fEսs=O26FuPF7ۍ,͜.5껗$#~kOB2fmƨێ9##cV&I$I$.)>gkZ#႗0B  &r8'n rܧR ߅ʲ[[M2M/n`wcXg
=+:ͤ9&ï'(voo3o_{CxMcjVv,`Ե_J4}+;{CUuMcZ,mdN}VQnwJuVnr(2mKE7d엇3LcF.SQ
1Zs=E6_
s~z7 hpwė
t	4 :ݔ_?F͎uvi	_4a_ºPc9y&cVNPkM7lpF_[bgV_d&7$p}oɦv&*|qGj"Mkx[794>{-ml7sy|ruihMa'&ѵwk g|u 7?/XxWRj^	uωG|oh$z#A{}#G];BVW$+O/vT[[$ziuo`#V	vkUfz??M/|<խp(%5TYqEecmwmm0C'Is̆Xl3
xZ0)9I=og-/fﺱÕiV̰X+kʊY)mu=zu:[m/e%fNcS6t#Iwd)VLIesqXѩ(NcѽlϪrfWp$Ri$,~̾5M;Dz:<-ga#sˉ`6n2IsκwgtokI4ҹ嫗Poc֦!zYC:xtkOQ!xx_&e.&־	9<+5r-;JMrMҺr)aNR{rkyzwaJu	nmVV撌6-Z#>1FouMk߆Z^+h_/٬k 	In+	itt3L-:Ԃ]s:5/G*z]R\b|alN
	1mΌ*ʭڍ8Ei7MA~Doy<]__-᧷O>-4#mݭvAk}xR\k[L5N5iJm
Wvv~qW'ƵWʍj9JoF归Ǔo+]mw1)HtlhPnPFrWR*^55=WyP,kRMO]	9+GC]?#v^%ү|C]ۄOM#{~c1Dv -bs6]_WUY]}o,BhdӍHNt3dw>, )
)4߈	ox'pxsPOh̑M_,:];-6̈.~ZqҷwOKwj ԦVM/u)4I%1T47+0cEąvn^|%SWZg?=pڇ]x}9@麗jƄ=M[V`<o$1e0[4(ҝ^UcxmݣQC*4omdջE]起SC_|߆/.Fȓ:/s{{)Pmsyq=JIs0*WWT6ܬnd%GpNcRI+)Y-nO[]Y#xU̲F$h;ީ#F#2|HsPN2k%/+;z5Nq5!(_I5<=_u6kB/{.J)SJ񜪟FQZ+U"6QJ6S@Q$*`Ags	 dWv 87Oq9g,ZcH~AU9k0, $<`IK}{i-ng[{fO44SFJ$ 1*-nvi ? =	~xŚEW4;ط55&lDi*A r.Js[N|EG05:M~v>,eu=4oqf/wA>a}p<(QGnπ>,x=7I58Ϋ5NUvk^iwӄtUGȐAqRok7վr'W7ܗu?#p>|7>	xM{{PiaY/Pʐzqr>,Whd6MWu%5ߦSO?l<[ǈG=/-A?u9el$CkYeozRiW7]˙Vޑike&-=/}̿zkW@Z4?0>T$Em9۔UА+ϯ>zC
4Qo2D0;[nd>V #⸆sbaTl.2#󹤞K>_hηE<聼kHcT`3-(Ӵa1qJ4dVPEF9M)NZrn]mO?+%["k8.<7дr.H$h٭dK|[-TT00\=5ONC*.V^ݟ_<ewOꚬS\Yrz_42i@w$eg.
 >Cu*Qn\ҷj
y\`~y?Ww 1t	c'YG|[.K\	wel[ƷT}^n&ki-#Z3:*vCF >m,[cw#F|kwS}%ߋ][PWy%D6=~xfͤ_y>gb
RFZI;7g~78Su$ܚJ]-u{[}OhW?Z|6-<g+[=w	,u+ۙ.~!XKku+%H&XXX_mԤIdՕ Ze:q8*V挔ݯ'~/~ %?a|1>&sO/?j6:>&4<;'۵KM|IdK}&H7>iCZGoi;(G{[f[)OVN*U=+ԟxƖ?}}i/x_Yn$x.4[1;Gm
DdmF{I|6 O\\%RM6N.?UP_o4꯮jӿ柩ys0w)vE*z22n꣣O^ԏ6[ZEWzd0Z71u1ƵMIzy8J:4CjV$v=$q& ^cʊ=N)-Ln"ɻ-_7 A_C%1b41j?C=v;im ;k[Ue&VN+gOOۻ  
k 	hol<$f:[xGR>sgKka!Xٖ_nroWrQVg8eU:zF1M[qr	hu
Y5k^_ku$e1o4i1l8s
Q55OAA^QI*z[U9|S-֪ߥն?	IqY?oWm-oSol_V85?_h6R^kDkǎrb0\tjIOݵEQ݄ROQo [毋7~!<!TF/x[,x~m'uP'T:\fm@C+=$6,0KNudE[H	Jj-I__U7_`<#k>>|DoK~*?D>VRKSWJ妑`'e*
L=(R+׺emMMmvd[گ^k. Ě7O#_4b,H[<SfT'Vm.e/WjNu=%$￼VO~=/ڻ?cYhw/}]KN[x"-R]E\dOEVOq.sy>cZPԜܨQ*J2.ɸ \L>3<2ɋW*UI;JS3kFJ0QtC+|/ \vwe|f¥oj6MBe.Ndƙ=Y:FbqWyr{I{W~Jtim'k8Z&'8szovWwZ	~Ȟ bdi*-?SgXW(M,]/O!];я?;U&duq^΢UE̥WSozw4</1R+c#KFTTaBi<VJҍ
_h Xo-Bݯd[&{f^ۘV4H4X~Nzrt{%u(5g&ۓ{p\qxYNU=[<,dJSNP +
O|zyҴ|A?>1:\h/qHğM+B-^RFݙ.>*5Pw\R8.YK4e+$NIMI/Mo{|_o񵎥|[Ҵ_ɖO:"ݜԢ VZ<Q߲ZK+sZ:RW%UK^ն?MhWϻWc%-  WO̘Kp~Dkk謾 o=?/?W[M5G]i-"obтxɥXBV%moqo;Op.'_ϧ{NU*8(h^n-tV泵&6V̯{Z| #
 JݲoxDr'߇_~#[ċg~,))*Svu+%}(_zXӖ6yAx
.hkCkoxZI*mᯌ~ iM#>ѐȎe0otOxʎOK_~i/JF_-G`i*-}_%).OWOkxg,7dG,O]wz;Kuբ\yepl594ѧ
]5"j$u%8}ߙ_[r%i6}-
C1K:E[I"G)Ru(R|wumUŻ(j<ќu(9Q[-[ߩp	oUYWb5RmU`2Nԣg]yZu <ώ	 
	Zr_&IEðWɗXoaHf9U2}L&"I38ڧVꮏ^(ş~4[CG=V]oN"<!acIВ{h&1:~ƂH^׈xlur4e)ſe:RiZMl>cf4ڊTsO$#%>HT:ӕZGź<Fg$cUֵ \-yw!1NWNĻ=]*iSK)5?]s_8`^x/HS5x%d>1ӢOC,%ixɷ?YPʴ#CTۖc4O%O]/cO[8{"TԆ?R)Wr~E`0'u9>XӴ#gB|?yohg'( _W8)u79?*nOp)QQJ(QaN<I%򶄞6WNUcp-IsZ} +
r;gS.OH<ˉݤӅڭź:7=3]7eqih̷yq VIN1POk-6r-4 m r>m~_0rʧr7E<guUOS!A<h6@6ߦHѻhh);	J>)RdE4O[kƬ9$nԓvpmvMiM.iںKiO3n4_)xyFᏊGmh(|>;r=k8SaNm^N[;ߞ ɝiUⶦukL7O!7i|iT.c>ewdPrG){{*k7m>g;/Mw? RZ|;|-M%ޕxSDĶksEd4y+| ieU>1iϕZZIX<M-φU@4y/i7h5>)d6=ď8YNhҬ|wPxuvWG}VNKnO˿x)7%s"]׷D-z|eM.,m&]Rn[e:q8SԧJOD;+w~~(mxaUbZ7gj*q8N&R-FCqswo_Q|cm}MJk5$o/4kySj}gH֣gp^Ss{<]5&#/bhGݷvv9K<7q{\~gVNR)m-bM mg/uO|%ա5_ɨac6u\i"[FLռY5_k1ϧx?Zu'ZՒAƕ{ESڋI{WdvGF{6RΔgTUU6MݒrwxݛkCGiahd^\dq1I$rYԦYW|a{r%hxU9My7'_e?M<*.[x \]eiX$b<%s(jⓋZ4uFqU!.W8;4tt_<\:#"$g]C@͸1G-!Ouc.eĿk9nka׳&>]<\;Tx̿jiRUړIm޶žӟMd	2Kym1ͳY!8*dWpNpgx+?8i'NJr|> } jφzjO+^/mSSʑ L~/DjYFy]:x*曅5gsJvs9ЅljR.e-S Y+NlѧK˸HΒG!/"vR8>K> q~iaZ.vÕKr8754'r0t.n-Ǐ]IZ,dXo$x!\%0}ޕҒt}ݼO
?eueyO>Z]	sqkiW#~!^B׬bX繸u[xͩЮuf8EJHEdCDWK;y^;|fXl~զMtn+1e5/khjiv 5嶛hژ+̋7
f|3]VUԪQ)GW5@Qp~YL%0էNNڞ%QKD-mc	/hk~1_?4e7}=]g_exOÒJAe},7q˥Z1s{un;q~I8l}H׽8j=,=%#|S< -1.)5.jTSg:ќ\SNUWJ.GS_ x+Jxbohփg	&ijqkf:6_YE73X5=xJxjѧN17)Ԃfn>Swy^18akkʥ,C,E
j)ʛQ|"bo' e*hO鬳,˨i~4'c]5Aqq91+#~Z:iN#ʾ3n^c<EZWwmu?cՒ_N{qVS*.aQ)-Vd8oiچ/<CWj6[Լ3y,R(o?sʋ=wb9u53<0mF|%MӒyD,m^.qq0ʲz *p骑p0⛋s$Z-%{ȧRHX"!,K+όb fԿڲDFGxlKp +]~E'o1u g ! ;.iZϋ}_S↯<?.ҭ x,~x[?L:Vj	,S$oLx*5'N2{Saw%6q0Qr{MEuki_ Y 	fx5ozσ<_>(UE濤gOҼM<X1,<<Uf쥔s}ǬJFERjpQm/us*
)>T+&Q0,rYX@ HW< /dr@W$^DÃTRTm8rIN6jčw{wL'ȭ.]\O}6uмQ[ȶk7LsZ4]ޥ,k*vI9#1QQyyeZQSvg;=o ?|=E-֕蚇~.M汥]N|W h]ij'a,~!sx*RIs?{jZR"֎rR_Yf_ʲt-Ѡj֞&,SUN	Z)Q+7%V oo|J7<MxgAR1i7%ϋ.WH<nݝD[ͩyy:a+Ԋ_
v}OӱgG(P(942RXG:x\WxJ	;8E&'~S^o.9WmQrYV.u*([om7?wQisM\Σnz_NanY/bYa+5+/Z$VG4]I̊oJ~_pt>A.4^g1uEЊHӧy7V6mᶸ7pu{z,,10QRc<?1#'R[
y{JܷoNX;[`DRW:i/{yKþ	_;a_mD(aUUxTALƒUWJڿgo?_JQRIB>xa[f$%+K!BX$$2yI2mR^{mCZ螶N 2)k~ߩ?ǯJn|S8j^({WW dY#[ƃ$pȯXiGqW[}g ƾ39w<N=UGyW.ӥJrʜ%*8UړM{)FMk+gݷ#xrC?dOb>_-xe'oK2?h~״hÞ/jq^&o?{5GJ\kJW,j'I_*oSjN\ɳBJ8,=*C1,E5sB97AX)J?j  d|m46[HKXZ[\iͨ.7ĚeiJ]>M:q0g'ZHI{'ȣk/}6&jb0t1xzV#ĬIacK\ԡ:jyFuj8|_B%?a ^$5^/G٢|լ<E?#U<caRVGAt;RӖB_H;wX$PsZpXVNcʡpqIe9j幟f*
pkOrTe9BUd++W cw^Z^մ~%hTn |W]7T/!Q~'.^6OBӵ> ĬObeN\Puii*)rvM\ei&)dX2RXzUk_*VRNM%MO:>	"ms#7]	u@ycV H$MŇëyYỚ<.*
s9UQJ6=SKfˈpxu]E?f7{y%	j[mJpE3F$`}-􏏎?߉4ct{KH1qvӡ0ʰ܄3:+75.D#bʤ%$ݓV_v:)Tt䤕m s~8|L{β!ZJlHZi9hrb)Tҳ8*o'ڵ
Vni).Fe\hMpX^]E4]B,*Ks s+̖R#^6PwO5eI]=u'I?hJWnJZGw/;B6w&%1!ۗX	eV1$^uZZ³jrTz-.۩N=|N
_Rxera\R푙]:nm!T.YmFN*`\d	 rt1 ")+u2݉a6Рdbo[*	QbIill8pмʙ U0Qnl<?r|zfY|A$KǉOF0DGpU=]vqpK-O0;ͻz|}.cNt fR4`E}Dz.8fDo9TZ{iM[Zt-B-U:Ε4WFdb!dby dm2,r|%D e}=wO^Zg^ƿEg(_+zcp=wI2ilBd
_:NNj+nȩNh)[1N^ 9'nʿC;x3\]h:nYwmw Ү-#Wpj^>.uҼ-èMON:mr-V+n]4r{7RqQr&⛎qw&޼SK}0fES01*q=koY{g|ch-[[76V$ɴ@I_<ڹ?wޜ+_uqʹot!]Wrd95ڹ؝!ƿ<Yi^<̎6W7VĦ_4(
a[o_ՇqߗToNַ4yǊ>!KXy"LhpY,T>LHVV-tpxF'IJ-ގmE+y/;<($	1W+Rwsw^I_O.,{~?]Io#DqZK/}{Yjv&)0,#Ӗ&#m^IlݖYc7k|)d?c[]v\ZA5·2<"Orc>wKBR$hd)X̫՜*N[~5  3iNAI7rٵ{G7 f=Yon~6<Py)'44q{,h!P>XGJO']+{ۦֽ^_GGWW 9y hfNCmZ-QV@+wA?@cWϼ|qLq8< >fWֲI{_C㸓4p8zժI5SvE'mZmitO(ť}fY|Em!.wi=/:1yJo6WoKz- i4#J:E5%;n1ԔNSMըiwez ܷWsɉ&H!gvAE0eOWmE6\lm#I\ƛ"H'Ϻ#Z[3O3H1GRs*s;+rZ:+[tI5HʶRR~r"@* wU39vE[ryb[?O6#"r5Yύ< =3i&*sxsAID秅RC~NqJ2Ncg{9m6.WgMUM77 KB{v ༺)y{Z6eex?CuHt5/&KG"ؚovwͻbBzb3⧎$wj~><v)9er%*/|u9=Ɂ6?ӣZU({=:NsMM)/Eu kek ǨXxkMKxu?[wW&%A 35ؑ?	pT9P˱0>Zyӫ[ިEF.Q̴uGoiy-	&[csxG7?|+inuXU_Cqƪ_Vf1ʓУ0J1Qm8[g~UgNek]1iŹ% Nxhvo_	xV<KI>%i\K׋V;-#(Tx:*{YʴT'Jm|{ȨScI[]uzO5;#<'FyVvUơI*nbrTQɮzJNK]V'_M^?iLs>xF~ >xjR6'qxTנz|?h^Qf`66	eU0uaB_ReZ8Ae
IMY?wܳ?ٸWLExB<$iY5Vܼ\V&2 |<K?ekV^64z~!RMZM'5="{V]>]gS,,o,DiS<^s95M8Ս*8zU+3R6:qӊrN5gCGz40**uW5zVf%vkY  ŭgGH>D/ZxPƷ?5CxSSĢK<E=z(dӥ}G
O[Uԭp]ZTr)8Ӡ)Ƭ}87>(p.+Ya1Vb2RN".kUFbIGD,kX*|AP$6o !m1|3ORM>yB$Ӕ}v֞󓗫}|V\C
P bUUx))zZ<M/~-xǞ0D?n" A-/ f;?xN|_}P5jW_):pNYɯzSeɼZ[ߪ~g؟ ϷɋRIQ.>{sݓ}
jڴ?3 {5jRٸNL _zi  ee daFOo~= |ܟJ?ښ;ki.cEj\Z-HSKXŽm%iA±0^7LN֕iniI5%tuT~ ̳, ߳Mk-ݝؗI'?Bt<X$O(޼%.)ھoY/iQkҥFk75XW7͢Y-> gt
o(~zyԼ99|N+rk%ydk^Ң+b=sWsh CiF.QSn%+j]<K6 i?hfFG+#Oѹ
JE,NIJכsi[N=,5FϢ:koxCRQfYmVm^vTxɱՊPI2D+<Q%	0mTxMAsk;X)Swy?O	ox/u*6WYEܣ-f#ýI'WSmF2/?%t~YעZK请Qkkl`I 2nn<GVI	(ԩ;ǿqbcF҄oX%4'.[KX;af ۗ&y|:9#(-!hJqJϚ.->JFhI|Kx=Uy^\!R4)?smlխek/KVcg5-,an(]jwg|ܒhbHRhN2u'ܛt^Ioݷ'{uq]5y_M&Gό7R?w@LO;-%<-[A<wKOk[k XN[OqxʣNQfe^UjO7\B
',>a$ڍKO*/XSjLNRNUV6|82Br<7Qԑ\GN~IwГS㮧p/8]f_RZͲJ%MCLE?t+TW(}dI~T|{[.u{_
xsGinJtsIw0½Ë!ڍ)@qq8EY8IW깤_"T_ ?^Ú櫩]Zؘ ZRP
CУ`DzĘ2ֶ2\Za)'$`խʍ姳z&KTY)m?e
A@I<)#9ï5K=?yӫ~ !~'B? C%ίZ>Csx2zD0]@|	#:ǌޣQSp%:T%ʔSG{8mRV+nzy.W]PZehem/Yey>4DY[xyY%HV^X.6.VQ-< ǟ5GP[nX-ko=|W:Oy\\H|"9Muc׵_Qo2~mOk&g n!O/IZMivV[$~T'GJyD66Q]FixG#7rKbm?јI.Z1iӽ9ԗ-ZiANVn>:?[0[^Z<G*$CNѵ	mՋl6CqV!<W8FVS9M鯻v~|sT)>[UJVmɫ|{FΕ^&e,pDgk#b:\3FĀd5e)JnR7i9-]'wo0IFn>]J^g!bּQ^]~ T{yjRηVYѮth4N{ȸ?X(qV
4#57SKJ5\mRM;uf|Iƪ'0>]RLn.JX~NSufڵ=[7W11E2mmh=uywA?"rݯ>KF9cu}ONmC
3)))X16nyA\zlKϨ|~H5
ŋ31-#XŘK>hwys}?3{[Hg"NK.M:K{ɨ4a6NXRWRvK|3^k(ƭ/g+ co^$$kx?B5kۙJkbj!&TxZuͼmy}O
Rx*u)-;эu|/渚5/jrԿm[  /߉ǉEXťx_ƞ!IS|7l0hŜ ybfV4J	Ԗ ISzww8Zqkɵg׫k7Qt=OM{;{2bH)$$淘	Q)Z1)bhʍxH;.ֵ;NiIY۔=_\YMIg6:Ʃimko{GSS2C&	Y^3%*pm$QOVSN/X^}vn^{}驩XPiHJ)hWnՕU,.ʏvG֭GGEg̵M]=WN>?:qm׭s~=~ mOCKMO_Zxz%#Ңx...!Hu(EWsG%-ޏ|喝88l2rц
Щ~XΥJ2rZikKF̰(bp=)ǕuݞzGo>ck~j?e% l`|S?o~?dmNk?Yji-9IvM xS^B{PG]p8;IJPWs浚br2lN%QTӖ/a>gէ36NWVn-}h\Yxo\+xu;)줒[`;	.%+	jEtj%$&ǯ]=y<xМjr䒒I'v*Z]8f?`߅E|{Ŀ<3.>mu?<kɬW-԰hr{OnzA_é'gѓ&I+6;JZ;Yi:|<ͤ7}.)͸37ZgEZEFJ&`/5)TN3*$Ҕ}1|Y>|(K; ¸6n=̱ /f~!Fq@33sl{QVVIn׹"ɚnʰ7g+}V֗m/\]ʹlGI1L0j3 KcR-Yk}.|S!mdؤ|POupYur`vi-
Ok)oԠw tڼ9F*J.v z㿇;.SνnAmr~4W1\[}@FvIyL&*59Ҕn^(IigiFM>6-;4  C ||j|~h>/|5]ܤ(KO!!exoI'ӆo|蠸[Ǝ]sԔ(IZVVmEIz69m T݂;*M^'s:`\rzըG] 5~WiQ}-<h587xƟ%x/oxG׵:5׋<s${St7NƗzW۷)-,tUtqUbI/Ⱥ96eR(+5/iݥHog隞xKIYhH2xPxMׇn=ߙ?xSb	άQtNN>S%&j*<5zB]Ӷkm//Ək\O{i{_Uo<A>/xe7jD4xO;oU[ckcNF?o_V崹KG>|tFOC)w2U*| $昉J"y}-mis3|D1B[wOev7em־Wnaq~|7
\@tfcĮ4j,LHe0N4~ [x558E]M:=hz :ͶۍkNTy=Ɲ{oCmw{Y_ZsGu\bӒI%I
U!FUT}طu[?	|]|C?4/exG_G=@К?
[KFYcM<jzB:ǉ5kJ_M{u +p1k'VE?g]7ܵKc1m/Ri%)-*Z7J[?¯~~(M>"_/7 ~ue֋>?XEZkm_CvV>$ ǃ,ZΥթ:qsKTW6hOq[a(N&0쩺rM|Qiy_Agm =CVӬt}j{wp&rOur4FJWMjudiSS.g޷zgf%YV)9*"wv}C_㯊m|U'Sk
o  :<S}c-jwSgin,-urOTBu7x5$馼#3qXS#TU>rX3R\I& ^6usƿ- g ɖzExG[_x<Omw|UM .5\j45>iBs㫴f]J.&y]9""rg,?OV.&ŨQ<`NW)EM/ǏxGH/>RToM.:=Ni5A04v^+̰ngUgE,\BrV_5~^2WOWV*XZ_4oyvJֺ?bfO.Qǿn50ҿjk|I,n5T#Zψu<9uzNiٗjr˧_JqgZ#NTݸ^'v{ݟI8G	Vi)ge'WsI$kP~k^]p/=K37D𦃦^'ݠkA}>{W zk^$!m)Crfj>"R*tZV|Ryd\mi8wwLp^yPԥ*9bJUFt\*|7'j~>j%|A]3R΋<:|K$FM#p7mns&o[tS'a+c(2V.i]7o]Y~;éFW+kK֍h˹fԴ-VIҵSuP}ju:z-Ɵ5Bp?и\E<NZqRߗݽ֭Q:Rr7d=~5Сkۋk+-7z\ onE,`mQy
|ƫ%wVܤbWmn$m%wwC;ooWUҼZw4m`Γs(g"ca2X.I3USVn	JV˕gJisESv-7>TuxǱ>wk>|8Aq&jN=UhM"9$]]AgFtIK	Ru1onxAGH_Nv'*ә^^rח&47roⶼJͨ\'Jڞ#06?g.Pc?tvc$8쨫׬졢IhǯCcG_c[j_c,$j8Ď؍#|No/ǵÌwyy7Jq\[dP4~ _ҸG	U'h/<d"H%`ŋ$?xLuAcgF<A"Ҵ[+CR4kcmT$N1sc\Iy'&쒿m=~_ՏW,|j֬?/I4STҴN[0X૲f#'KNЌSrk}ϏVUqJӛ{tG6
|{ 
Loo|jl
XjL O:(GwKlJ:rNRvӿ[̊xY&پ)|K748-uH(V? w/Qf0JLZ#/<ܪ-nK_IV48*zER{uZ%'K~[Cs{O 6W=ӧs{.-q8d/v6RTN8s;*W^}yNV[Mi{r+'  ><7D/t_;Kß
߯ZMo?[?KLP;}ZIOӌ%.gYJmrF?{[-IR5'(#N1e.eRkxT֧暕i-"0GHw|)Ve6xѱQ+k vFWIz6so-ąeFB)W2	W5XNm]X5,W9QU̖q=6lc)0' `W*vVꋺOMU|{s=Tq\Y$Y>bwS,A>;c_-B%𿉗4t^Am%/uζbx0.?o$5C:wOIt P=m Wrozt9FH;~ϰ b-;N	ꗚ~g/xCRll/5돦]W}fJW^C؂{ֱ&ҼtI-Mc=OIhgow<x	*(mTJ0T+%㭖պ8lel*2pmYZOO˯ڎm弹XdI P"D21e .F@iWOy>R3kl~ 1]?md_W-xMK~x3Z-${?QHSM"_|$?NHHQ8J<IT앒/O3)96j]髾}u>/ռaƟ]K$ڗ/B[iQ'nuD5Ǚ4Ҵ; ̎Xڛ~HݿS@GBUaèd18q?x8Hw ϳ2j丳S.e͜LXČނcjeneW]{ut˭ombK%X,bݛ	$4wdi˞w՚[bW2RW2澖w  3#jg|;sE/7 k' <JI |'UXԃ_;K;ŏcoyI{U.m<9s{=s%>#?W{.V±s(Ҕ[WZ]5n<(]?w ῭ <K?F?/<kIx.xXWDէ_X]/a%\!xl|>+,L122a0iƬnܹ%M9]4Փ`pg6eIi/+jO58<~uRX_xcz@ԴxkSўit9ͼ3DߚegSKԧ㇭ZU7Q63I?yϩ\ݶ-OM3SC_Eխ|e*x<UxSXA,RW}+Z)$TwWTn9RW)in-5SG ^ӿo/>?@g4#t j_Kuk2Y%mm4hn*0Ҝ\]HFЦ⬕{}w4$oiN[t_O koګ3z/] l1zMSV&kWLhR&\+Y`-+2ʳѥu#9{):rvRi6~wfUVjrtֱ⤥{E]?toůZ_/_
5vwYźe_neKh\G62JxLmƔ)3zI;ʛZGQ9oi*3k㋭
꜒FMTuX[?s]5{ Pu?ڛ)'lRޭ}~ST-u{#W/Ø쎦_Ex֯,ږ*JJ*jӋ9g)J<Nr!{8_ѥ(R_V:u)ޥ:ur*Srvi3_uO^8Ӵ7V_t]s@|Zu|x῅#hq[Zi>moZΧei_.,0:85VU3QOWVԓ_xf.\UW:՜)Nu%)F.WM=y͆f88eqO:P!NR8IJqg꧅ ni(0\jv?}7ĺ׊MKP:[xkQdѮymQ&8QԣIo1s<(⡈aW*QuTU9YU   X:zr5KR.j%$TME5)E5Қ_w>S_Wݗm~B}F^\Goc-RM{pNq/8Réqiۚ5bz+9Z)YvGRV &tZVCN4mRi-`)aiW%MyٳǶeEs*Џ8i(Iϙ\\ug+;>Euǭ]4l aR>{=60pd< ZN1 `?~=}qh#ǟe ۲L5Sb"$ce(x魭̗:<Δy(~o^1R_&)e\ԒMo-n l @GxSWk9.|cGpRID@d⾳\	~o>o a|j ߈>j5.VmS?}x&xD2QZ9~oN[*tj9]=S*ym}?wuyexfp iq f5y%q댢+_HnRGX,oV=?NTSWWz;KҼ?u=Z鶚/<[&hl;[+I5]Jٯ4J,f6V]Ib)mmA&RQi.h4+ܯ:}o׍uM<AjZO+kZ<6/x֚$1inQFxhƖxgIz{?l}S9S].QjRu >Gʚw-MSxttSxSV''xVF {O*6zROiCXp؊HƜ朚kFm/3RiU:JN\*:}^I	?
ZBx}:|M񵶜<!=q&|;]zj-jjGo%Is8<M[^UzjOe7]B*tF>JyuGs\BVK7Z+J*؅]hq'%IU)0n|U|g_~'k?YxPz ꚷo};C/zm-f+9YS*i86Oc(a(	iRxRmBN5%E5˻9&?<M
Cx/ەB^G)ǝ+7vL	'{k%\ial|/|yuKӑLG7_:g־e_?r%x< 6N>nx|=Gi-4FVIN.R x{_⣟,(xE*uNW⩪V-c؍_\|Ga7oe%%e2(tg]r 6pNX5N*iKuWGZKGm՞yςlj#զ]a}V(%L.[8WRKN9;{hVv.^/ҵ79k ٷV76Ma,Gmo-Ô; ܒBH.!RRs`QD.gmw;5J6^M:$KiIy&V7BޭNҴ2gV{fWؖĹިSኧnkU)sQ]bIY/3IX#C"!U?>wJ ܬ[Η%gwut}-/  o
/o?}Ħ!om l~#*f[0|8υ%Xw:.DQohb#dwJ Q"Ft+*1IߣQrwT&? b|!m8bMj>1xjq^
ўe~?ƑhYB:''RZi~nuoF)ɻ=Y 7~3]:LdRAtm'r";K$|̟Q]'Y5>Zj\wmdo<W[J(.-MȞC͍;DR<쮖-;WCKs<E)jK]/\NaRJU=nMŧfm-W>#,NdкI"okeK	~akbciIVhқei=x̲N2TqxJ)uKS)_jZum;D4hY=V++H#LMqs,qFaMyx|%l]hahQ&OkFPQSV'V8h]J0IE'hϦ6^,; /Lcv=Dsk%}_Wi6~\؜WKN5wU$V5j6+;lx<1OWRx_VWTi.zpn_7MgM;sn#6C"F8iֿ3_3h [vԽLS&ے>mN}j'gwwYlCVAF8 kY/Y_)mOO`/Pڏ4
IŤvWSU5vIwvӿGSk5hש7w K ?Cow/6#tk&aH;9$p"z<3NQF7W蝒~98ʾIQmEͭwn4-l` Ocf֚|CI"hҷ4B$W6.ۓlRpO^I|4Pw*sמ_/B2jj]^ m_kkq* Rod(JPIi^.-=MnkVi^K]t@:\Z֑Ŵ^,&
H։&{kooZ	 jJQRP(ʜy˗k卑]5$bχ|E\iԹ$-YDr\5aq5/*|b?iK(}NmeY-?Y/#\ja^/֓ɿ.[K}7I~`]^ sE`]\JF:Q++UuJI*1mFmN;'gdGooa	~=&Ѽ}PCknq|EM&g'B,Svk|NHZXpY:,|.tԔpjݥ)F/$B/Ϊ*sӌբ8sQv$_IİA#X2iI)yB}x3m%v4O  ??K-abX5CH C2:bFm*f1a8ViW4JWv?BB/2=~mI ۺi`҂|
-o!km9hHAFI8ݜJ,KGv mky+h>-%uK4i:_	FeH< <R,Y[.m"Wǹʺݿ_@FO	P5I4-:Y<+4 <no߶+UBchK9+Y^@|vx$V~*_<9y^C嶽iebGЭ/.bTԮ&$O勩y5iɨɨXɥеYyfYH3,`۰lH87fq\4MCo ׻u/ɴƱqf-ڦg^xVEr^1wv
\ݦg}"h)Tg{y}IZrrmtgoO+kx#36:5g]5:&..YF3<hvrѴ:գ}f_N;OA(׺vo]O-( {.Uzo#5KVwţ4zgX׵dE\.5wP9#PԮdDiURJq W=yU%9Ϛ$q[l?pEɤaiDey#ق	✠Ki;Xfg\H3&w V+J:6Wתjom]iqE4ķF69:m!YbHP$U(:wI4|G+ѽ-V~asOOE74%K!Y⹷+?570fhYIӍg~"J+FY5奕	⯏~-uo'<;=oIՔ:Ʈ.
MrLX Xي)阮	~Yr+(t^s8wyGe*I.1Wk?nY;[/S{;-N]~nk[ຖ9q?%osԭ~h{|.T}ɼV^1u}Zq6mAh:>"|%ҾS<=="ir\~-дxo]bW}GCm+h$^bAApqVUjֲ5-o(=y[U[jgu(OSo3Ծ~ϟoO_>6-cχt}#rc,D{]RXI3\>-6\D\<|ɻI]ݥx^:٭YuʴjW8N䟕kUğ dgW\h3FIh#usvkZrjW>4[7_MgK3iXhJb94nQViGUegeke3)|,R59.zr\~_udL_*!uZO:n?O~#.<= K{ZM+5]jp}ϟƟ;\R85Y]tex\J}l:/*c^V|T;w\G?i{so^5]NfԴO
k6ݲ-[RBɋ2˓~ͥ;?E<NV
Jw+}U~/>gT1xW^n51Iqx_Ǘי+E[J[BOsCO#z8<SNJm̭۽5z*uj'WBVI'->~zQS쓣kzOͪxs	xTә?6tSQNKmZY'TXJ5\b׳biY-Ӿ WL]Z|N#^kx"Xl_)TR^ʢpU%wOݶՏ0CI8kzVx,];Rp鷶e6ONm+?Teu5bUZ6+&VM8(tx)rFkJ
ET.hFIsEI'(g b?nƾKMWc[_vxhQ<]YM8/6[FrpO^h5tӪ{jDܝӽuvgu/!9@7eϖYsY@G:iYGOoNqV蚷C7	Gwnx:	9'P֏j9invŒj>-/y&l$i5xyrFlEwJ.nIQc&.qs|EՍ|Pʄnf֍Es5kYQ~|CxþҾM+ɺHKn|\Xw3_tn5[乽g/䡈V*}dӕ^ЎJ/MtJ)
|R夯gSsr{ͭtuW,m-ՁBĘ9q|}yE׬֩ըsv}RwT";7ȲcHrۗbF+2/mǛYibd(o.CH$Y3oQIS -z_˯M:>WΊ;2|qQn6	݀Æu>TMn )b /h\[5/m9YxĊ+ve]swҿܴo0KUGr[_]ij:Fc^.S0XH#Y'[[ŕ-.<$8|񕜝'.ߩ2Ԛo33x7/񆭨iNe֕H7QkHm fwMw4O,?dY|1J+Y'kmk 3nmAG޲V;gTzKSğ~\>!ǈG;L0i/@L.Y+[H]cV-'b$Ww7zJܤ:*K0MM5S?iH5oz?Y75Σ*-+oohPk+}45+NH4+mNkKONҜg$
^VrRVݫ%7'SH7ͤZ^6)ցxW|> i$]WU׼Qwv/xRèkKrÐx#Ki><=k|h[t^5#:Z.X*tEo~z7~UfN#.y)95իiv6Gk#EI2*A/e}֯O"S
7{uN Мckku"E}p֚K$a/t[{2xV{kalfR'%Q-c z]_& qc~ӿ|B<)u_|TPQZx6l*-h:jR=)sERlG⦝ۭ4d5*[][o4KCԯi[[)㉥ie̎eVJ~v[l"<k7O!	yqJŤ.q&8ӅW{Qv]塂_
6z\$s@ $q _1}DI|O}%hA6mtZݡt')gwub%=+DhԴgIź=1Gj|KK('OK=R+ky4s	f̖×s|1ofB2J H L.kj?~f߭VW9]Γ6|5I?n~eP"Ή^ Kٴ:X6
RSiYl鍊ہWb,5)W*F7ܭo^[.x-O_zC"K7ieL sm}ŝEsm<Qle:hԋQFiԧ	}iyۧ\\W9\8N"nw*8,MN
T4{Uk"2T_8B勖N_skJ/E%~ </K?٭dM2F[vH ׻O>)7WRRI?_s4̷3ku$$5̉baFMҭ3v_Bb~Oso __ѲF?2{+w9l@_T%қ愞Z Y{kSt T|==|$u_xė±OxPy8.Y\%CkqZU3{9{[N _1>x'ZKӱ{[׍?>xcWZ/|>nFj?4]kJֵm] X,.Fs*5TUźuiT5k5+u4r{i$wM]}N'[I:]Za)"m!g<#A"O~wJ79HI/&aiսYs'GtH~r^M4o}W^-Gf)tìx|_Hf5Udgx!K+vreџVeF+i;]=Jϣ`9UHsKvl_~өUυZ𝆈~%mW|]qIEYla,u}j]~M嘌3K:WMjݧoج1sqԼ}C?j/|B7v]Q-eZG	]L!=9-AӵiwKOS+L8.k󬟄W9UPYTre{6\i|%CRI{3w=	{⏋im:Afþa{MN<*M=r<M5˥Gg_[\_S-T3t?~>PsըߖIJ K;_89B3AITT-E[m▗?}uLlZxĿxVMRMD[{ko3]/لF+	lm[t2,ncsl,LdQJ*TYw+O[|++$UY)U9B<%'2VM.eggƯQ1#σ3SѴBz^x&{wy>?sM+Xk$ϴY9_UqxHa3PùK|OTRaҍEWjUcf(8,x0MQRX%YU1U2%%NtE)?Ŀ~ѫ][YXibѓW}.K-帒im7S^V1'3^g i`O|}V5mO[ljXyRZ8'.gefeӱW4kC¾4J<w_xMnQu+BN8ѭt i@>ϳ}ܤwz=t~H߂r*УV7SwZtI\&SƓc,J BN@鏛¹Tw:UeOE/ ÞԤ31WQޞgos\ `4I[ gWQ$	_>9#2;V[[v.7nN,mIO}JuՊcj=-E/IF_8}m+ٟ Pt	H?)kidIq,xQ{
[ƖnJNܤ.=*Z/ ~a$Evz ^<Wm-=45ֱxZѯ@uVOV
UӶх571T?ǗN_gP]%ȺnnԬ۵71Aڬ,42LaZqm)\b5Gg+52ѫ꺧E+I+~|k-_<d~켓@o4J tX"1o[FNPu)Jj2Sw^zBRzTmܚm6%&oݼ>o⯈>;ž^ W𷉼AHm-|?
$<O^jZaլnmf+51%ZS)Tik`VI-^(R&Wn[YϞMc~;v]x{@ޟj:ַWVϪ2M^d#gffXaYF2֫V\(mѮv>'yUo+UvvO/ rO~1xBմ߉>(xNVp6nTShr[Rk Y.auwY= uw`>438bpv/1¹GPUE:TrP|֧%)?kU09if5s\=,=GˇPh`*(%V㫼D9$#Fdh@ZW߃"Ծ16/$Ҿ׊t5m^&5&=Jծݣtp᜷exVapx|
%ҤKN%ZuIqJN	=N QPCgTkbTk%g(u*CU? #𿉵?7]\zj1)ڋ43<3\hi^2~#\\>89YABv&)I9'zӒI5'k/3,GdLW*L-JڷN}"RM[Y7f՚GC6}	l56LL©|z:SėF{R=;:w,Ѥ po>ef_baaNiTӯFZxUOԭ*j'e]a8*UU9V
άe	GK8Quy&{zm߈FMΗiP]_iW.m͝\G4l4n	yך/QRDھ)>Z;?<;{_>լFд2[[i<+.or{S2K<wk^*~7M҂F)F_iۓVV*W^w>wKEdm48%g1ȿ2ݴ^߼8wJcOx֝RMKKQg߷3Ú y4om-,P%TE\ԜWrj)ye 3 B|o\σ1i?OsGI'UԬu?k;\ &;;/#V[}a,~SCJhΥJSrzABQlt~nZ7.\CNIevys?m&Í7ޘ ~$hhZjDռ_xj-^E ǥ<Ey=].U,5Om[URdҲ}=κ]be	JqmUvo)0x'Ŀ#ƺO\xZŜZE)2"]F^2. &VY~QՍluEjp[][ϣ+aN)J[{rzӮo.T۳(%$x ;OQ ;׮ iZpe+sk|GkKǺh%ik:ƕ`9|̺y챵ivo0y%dX=8QUTkazrqj2ie4|AO'4*xYF=ڑTRN)6Kekd/R /~7_7{x:[.yeyx;JuP@g-xkky!)Be8b,ͣ^%lTa1tia^Ҩ"s&|\yd!C똼Wbp
x\.1[V*XZTcB|z&ZkZ>jU8SO9tۼS #`!u'WR+VY'+9?d2L_x2S:KX4TZyk;QkWC)obUou,Axb*'WZyQ$ߞ9>$G#߿o
rjJ+fM<~[3;+ĳ6@ `H vgIJ]ӫ wQs$k{䪒vJ+s zI2W]9xɫ_m;^krh-o!.ʪAryڕT~ekRiu`Rt)ŴԶ'  T)JWgr?6<i >
,}ω|)9ƻ 4:^N}: JPk	lD9B[d[3ʵUsRsp%)E5%tҵ^sRiGUdⶲZo{焼h-N+Euf`(йeyLG'̙o`ZҺFW&GcSi&N+_3<ek:o/_[˧OqcO_y+ݞ}-7UKUn%[YHnS"Uk^Xw*.Ve//?|?mXkI}Zx{OIξ4:_]%:%ć!]{*XG+'k'kߕ]Km>(F;^mm_s]A鶍qյD#Eb$TDJlq5 +l4I9MvwM˕-mO)C?k/XxNZ'm]SJC-oZvl-t*xɧ"J[6`~VUD)g,f,ktb*URWRգʬFQIB/1RԥSpKbp]bPRQj>ʳ5B>~:Ŀi)vj>mm.5)J.uWNțM".[߽$	<n-,߁>2CNRU)ЗJejyUzѭFpU)7d(Nw}g'S*Tڧ^cx2ɺuyeԡ8GۋK_kmwŖB;uY&FмIom$yIf4p]M׃Fc5N.8|D[xϒ\.xPMۙ_{ͲgVUat4-'\MsA;CRR.f|+HaU'm'>}F++g|RInl]iZ?ixJ<3Iկl{mhdU4xzs8PiLּ/:巓$W ˞8%SϛJ-.W[]Ӯ,=/mK~էOO1׷>_z|g>xu͍kÞ5ɤe0Mw} i=-,K^@񫶥2;D>JIέ5IJ$iZZ7QvԪp~=hx(jP%/c{yI+~+ ~&; ~ [?KϏGqj߈,4?
XI_@Ilص0j?ٶey3:zӲv*qH5uZZ4JxO|-\T1iEYMIZ\7&֞=gcxƺW_.܏xS~#{K_Z}];KK+kb={#>|ɟa;t ?ŧߺwƷ#uomcQ_Zrj \&7|xnoKтu`ڿWN-{Kknޟ\h/}2a2%#"kZ0};WMNk)QX}?<cK얟eER(A˖j|kK&C%w\YM6RA<M)c t&6k~,BJRO~ } S#Wմo(u;ݖMe,&F	Pf-
ktU#XRk/1tmJ]+=VwJa7-/2]jzrķ_AwjMtő)ʷ,jK8թ۫` Kiv>-5$դ
vbr]Z:s"J[N梅[s6ޗ|!ϡ[uB]/21[\(+#$j\5[t֜ҟ+m6ZCNe	8O~sw x|Э ez-/=WP;ĺ7f)n-G[trlI
n<dU:5~h;q~M[]Gqf0F1IT=qVۭ}|@uo^)<70"[kGx/^`\5_Kb"#?_YCXȿi
8=aN¢OͽoF\k[TrOџZxuGCdV,zMdEݝĐHԍ mFKW\E@pxJsE98&%:{5߿_Z9J6e%RѻJ[GGuC^%~
b[y]&|u*jCB״7.~.\|^ Gľ'[- xHt]fL[+M;Pu}.V,AźTkAJQspTl;T7#֧7*qVt$ǚΣ\wg}߉>Q /55%Y'o(5M:|=++9LqH#

沗S\'{wzwa^8YJqNYBRVO}&\חxJ{[O'
h]21Z`haBOEoéoӢ^uvf(E!,<Q%"u+ȬO0I"2pw}-iB$یӵ| .ާ ?tJy|C~AgÝ'Sӭ|G{
+-j=Ŧei3Cg\0LrWNsj=^~zK؜?cʋnrq*9;?w{[E>_<M|#Yx⏃ſu~Z|/#{'4hpW~#SM>gc0KF:TRwR1R.4boir]fa¿}R-&UV3JV{YA*厉)K__E5 W{[=SL#-!4EdIQ.KM֟iX]M7jxn8SN֟uhѫSJ'$8kU$M4Gi]Y--_3[3(
Rh]2ЉCC:2ɻi[qSK^]umtzw ߆-:'^hZgWQx]ˢ%hxSe4׾YeSXj:ԭ.I֔)5E{JgR2[j0vRꝭm?߀߰/D7Žޏ_"{Y2Y3W4-V&Vn'a'8%،UB*z XZ_.VJ?~Pdh;nqilFf98'"jhIZwt{GU>թv0ŔwrRčBaާ5ɡ#ټN|hX&w+Y2b7g`^L/xQY$ crD$&U20+u!^;;1wi{k-ݤ!@HevV,U$ӳ]W߭ S7߅>.u g⧋[}ռQ[uVINexƗvV^	muo|GiZU u8wT3	M;SMrYpvvb*kVR/k;BݾX󳶚7$: UJDß &j2]Yx{mwQm?Nt˛b+K%YMsUo0CyjSC#qqmiUy=	P璍8Y)~gR~ɟOF /ѿso٫zޟ_
<JǶ'S]vO׺h/kyXj61?e%NZ:9 :8Ť)$yFuM8{7{h7sc S
5g'e"~&}V_ _|Rƙ0_x?ƳqgKTޛ%w ċjZO9.77k4`nS$;^QI?>5F#(/֚Pi/W5cvc=_h>M'^v0xw >xwÚ.vK3N	/eF\m	(i77	{Tu6v>Vc5O!hj+~F~Wxs7owg.%{xE+ʻe9ByE\`=U/~/ _L^Ktbl-񎏩ܔ*&Y4j"rŴ.|JMm:iY~9U JxsE/2/acxLSӾ_q;o	./K$]LXR˨lJ4Tk;[G緗ߛnn ŮȶuddeHo2=cʯiwϘ*6 
;Tm^p02H篺 C*S-&x|lOz4\S2uU t׾s}T'{g? ;G<n=u?xF	WIHO
c,z]ƯyoCꋒOUtZҖǚ*~_4?|%x>!i;K/./L_V1փavc]\"jOn?Bie?B/E⿆߱[[ &^:kv㉟7-EṴ	x3EW,5#_^'UJuyc/=JjOV\(ʼH*K):ҏ40tZ%)y}4䬯ʯ@;~Y|&?')SW黵.,<OiIƥE<ݶwrnX|N?ͳLfc߯bbvR+o~nmc_L]eyl$hb+QRVr(I^c*6,O2S0#Wm٭⮻9$5i.l;5ZE.i5+em-wfTEIۻ #T} *$-NOY"nBD:lRX@C4V
{Ez~fs3i |Mri7t{L~MK׬[j4)̫ T@G_mZkG V= \=ßh~ǧ7kEn<&܋pH+mLݍJӜ?Ƭ[{Yv>C?Īpo{moϯC~ z Tj %}Aa	Ҵ-g:<tx;Zv^$mY,mM/KY.y'ͷ~mٶ]18JppV*S*3˚U4Ԧk]] Ux<`08:ɍJxxNJ-EAtj韷9f,מm̳xBWiy&c٦fY5Ac^jI$\J\I	7*4e-T?ۛI|2׼i3xkRFᣫXy+K퍥%ݕv]Բ"ڈka}Zukl.xOs/auvK+k|F u?~:7&-|xg6Ww<5-6+mgQkd3AwcbkF/}evyujQ8JNVO=6GG'IKjZ!hZ!$EQ_W,7ATxT[$Wvbҡ*0gRJT+PU4ї<lWuwuV}bWR#NtFRGT~x/<KiW:"B4	1xkm"7Q.ծ'Kx0Gt?\-9ɳF4ewQXr΄~eIy'~N;,Nk
puU-5TotͿg24n.^yt+G;V-+CklJW3쓈xǆc^.|3,t:yoղ%E:x܎%R.Rj+Tgx;oա˱W˜cRt19"u&rֵ$5O%\x:|[]\#Ե-kUڞk1kfPrC* SfM˩bjסGePU)]?dҼ5/S6_V\ljMʤU4R.\I#>	Y[O>~=T𮑭KMе}B}{Vudo[)z7\\mA
\A<(1Z溳rsm[zjPMG5'_0x*%|	:aI9+svv?-_#
[K>|-eדh~#43F[٧غF i6Q^]B/|	Avvh{|&mO,|u%^zBj)JSI_!h=616$0 q@Uvp1_?JaGD48לQNM[W?3fVFd+i_8u9V﷛?|yk? ZoḴ?eOoI!|x㮩Ou23~Yd),K-\ʭpKZWF&{EԩV+ҧ9Fjs[?gCB^:ʟ;FXKPkx.i'Ӟݷ.bY2Dxbs"`auv֮96xfޭIY _.<|M/u=:_BuWӭ\4=cg.M:}-¼̬qnur:uR\R*J<ݝV7d.#̫e^-&~W$ӳZ%g'i@Të	#\pHې
'iɩtgQ=vycJ
T<F!^w3
}o1>xGOƽimuuj=Γy28L9$SnHi)VJkT\❤ne /a)ɤmggg
% $ZƟuW6jZ}εbڥ)XwV<B1sm,AC Vy"S!(Eҕ|7/
un]>]|:%Ec{Nu]+[oukۍAW"X[,͵ڤ{hEox+vAjbb1Xn]lLHRz_gf~uTigIyF"*184vURN=ݣw	 |/i#Ѿ~:]ꗱ|{Ӽ;h2k>,ӵK?%[xS7\>1pEaiץQZVSOET3$c?(q˟q9Rю['j)jUzU%(<^-ƟkSEf/w/ڗMu)[XDֺY_jXխqķ{6Kbrla*{J8jrSiգJ7:.X1^x_\]qel&ec(ЭSWJTjJ
qqyj6ﷁ?h_F	5!ir֟gF~+䶓P}K=#O-;6^7|FmK6RueiRsT*R|Ғoti)$~v_/}JsJJXyXe[*N;oV_?|)Ǌ|Gwh!khWzŪ|.5-S\pm$s	rmYiQ&"Y7<Ue1԰2tIIA*i5nog&Ul6.rG\乯n~ks9I';I m~"_^>oE/B∴SbyֶmcMn;k<_\K[ pzuĥ߻+\V?[7NwQJkk^}ڹ_g-OZ¯!]#X^(vVol彵qNFJLe^|ҒVmVN׊xRsA,5HB3I]ˮ~-<"]kK"VET:t]-"8.2rrg[`U:s;?j>?O6(tmOFvwayxf̰ {Ě,o.#QmйS*ʛW-?o
m%q{2\.:%w9$!Pnz's/5_~}+io٣Étg>DG8о=>(l|su%΂nk^jo?ژJ8EFJZ5;/v/%x~iWJ58|~Sm;$'g& ~ϐK&X[;|=	Я/9"'`X17qcNxjT[JO˯[OxC2̱PPvOޗ4}(Uboi $jy>f5X:No3:6i+x\W[JVY:M$Ukk.2O%
	GSVn1roޓzt4yh {w36 HV 9-;FsT5XxR[}+.?5[=3Ri^jo WJJ|AsIedxI5#0\CWG59SxHRqңi:ӛJq\a'))F1~#縌Tp0R*'ZT.嶲O߷_ ~߲	sg Ts#/߅5Kx?t	Qk5{'Hm$qø2\n8`Ԍ(e5eV&*Tacd8\ǈ
ʸzJp,BjԌdҊw_{U6Yoƒs[^5]?>&ρ<7iZ%Zi][\
c0T~[b9֔]7UmUۺJ+_g41yT^3UjV۩*Oތc._q6b~Zk~ZR*]ԯKMGP(.Yf07ŴK [Yduo26y9Tj)F_Ow'&ݕ_CDV0vȑ ʜk?DJ}- {uu<ZiQuG	BdV)pTJe$:4cӧS喪:nWt1k7[Etϫ4qnucfHŵ6,$BU.eh Ա4&jr_/ܚ'P8rMIv#~8v,'!ZH$P"	'siyZݫ/ s-]|DqjWZ|iηeY^\9mQb)jԤ9֏~ ־O
OUcA y 
jCWZ|s%soxW֠25B$/erO^ B<ԍ*i87u?ph)QjRR.ekug'C*SWeSiy<-;h2JŃǵ~Vx)9դR4nm[xnt{,'$	sDQvKo_1:⧀iBYЮf{imNoSfYFB 뤍KR6qkbhʽ9a}rqmVqpo/PՍ(xO7 kk|o=׊Jcf3xwW)dl!eZG}5a8	C9d15UIC	G	Rv҄Qbے>^x9+OaW$>fT>[{T\2Rq?q~x 珴s5h>Դ6M_o=G%xMFS5]ND?fXN)8R0(u8j_^akRwVV3FUޜbty'DucBU Rupj.YЭt^ڤT+8|	ǃ3S~_>^wEMψ nY_}ͯ>Oq{ƹqEO7.gwfЧP&y:xZԥ7<d3(KI:/(攥Vw'Z0\~IqtF.,~FQ|R>x&uI5oqg-EV֕"m24܉m~LtN>t3<>N*#J59NTv|kX/7>_hb0ؚ:8jU-NqNA.K\5/5;;7mJ[P&K_q3ZKE܇0/3Es=gUjw'Ftz_[pBX6q4թ
unRrnj=7^~u{|&EuysmRO7j7XY¹{`ZIS*mv#)y|c{]XI]&xw**reb8یsO䕥ϊ.Ң]>zGi\.1R(%-zh|_m|V5 o fxonxW5fڕy"U,\,!K:$3{9(BII7ϥNY5X[ޖ&GߦymewxZ/I\x@|+Op_Hmu}+ /4x#vI|U0cԛK?2F/TZf _#mRH5-IgT On\imm)|^߽YvksuOϦXEQ\io+_^C4t/ůݱ5td-i Kk=_z˶=ιt8rYg{}Bjl^GڒY^y`$lB6Kkp0a'q5kn|ZI5N)^ dԭakBag=ȗdHX*Wo:齻|̥]r鯕ֲR.A`bF5$-vHmڹ+4kk,;&7DnVo:Zׄ^;z_6ɢ⸳uR0X$G9U+&P6[ۉreWpJ}esE{Ihe,Cg-<ajh^jZχm<dkFt/ucmo^uR<:rZ붧(UfooG m=
' ~h~6KƟk~<9i:2o|OjV܇Y,ө9P5jmw)%OAeX
VJNz ,d73	υ>x_<uSƿ>$O/ׇ۟hZiD!Jkڝۋ[.ʶ#fOr.:F9Ox*M{*iqr8&6uB2q8SRai^1eOrʤ??qo^<"? G-)z勵kMdkZv,RúmoD#Ucѝj4刃UiR)FP)1jՓ>4yv:aW%'Nn匩)TwkC xWE-kWpl9-Sun໽߂K\i'l%7_&LtueVR$I&ھgejEmVJTvji&ZŭuOK~~ٺx ׌c0jn氻H[c[3J+ɮIu	Bfk摿1)*h{dk{?ILT剋a/vʍ*}TT,Ҏ$dǉ:͝ÍZKX)-j~U܀d ¼~J2_+ywU{-;r򢕴Ԍo.\8p{zѮ;] í;\z !  /u8~=֢|54}VI5g+SM%O]bcQdojzJYF-$֍Z~.6F7ߍ>tZ>
|%?(7~OAj>Ѿi,</_8లS^àNGIa:ZsRnNGf"\iY&%a#*cV:VT*))֋N0o7JM"W//O~i~x>Uxwㆽx㟁!'6 խ4?|"W4[XWHZ֏եiIAK/[EMySuqRtS8
ҖBRg*OӫƧ/?9}Yu37v/gKy-.-Ɋ	$r=*)8
SwMj]٭?q5ևO*Z)rB{-di:'"e]B}Gk߮躛A(ʹ&rW3:T{WRW].(uoO .l%g߅zͣN_xr摮/|7o+KP5-EpnI#v<EUYSQ)8F) .
rXlLQR2m'ۡ!h4.pAi2Kh?{؊\ݭQmrGѨ*O8=:JC-wl$s!KHyHJ,@V<zқu6*m7I!|)cPn^[~kASua]7} Eˠfl`llFs
Ij?}kwW_ᇆ湃P RռAug}`RO> 5;7grl'Ԣ
֛[s1}_VZ$6ZylߊZT]~ exwF߇|9Kk_z[-ktOq5Σ:pg-J{,M*BS\/Ԝ/KIE$1I.T>:&u%fntۻm[R|Sqsc<=.u ѵx氺D_`_jWYjhw7~oEN3IʤdgUwڷ:ٞgRJKNhA(&٪j?~?Y==g-$'Yxoex'ᆇQ:>qpusKiETj^^xŴ"Jȹ?+^Ս+]a]_O3	bN K_	 eهCOΛy~&|M-amo0iZ-x&HO	Kyke{[xX:)sU͹N)~Ik^/u+J4FJ0mylwbk;]/#\|qĹuo:a&+&i^hzCD 7zv'Jg-K$oT0ЕH8x=D)8Rݴ^*qZ8ǚUd>*H&{K%]#jaCH*nTE&Vmo;O훭Zi*IUP2*%㩕kĬVA('peu ÛA+u>~|	JcZ$GmWޛfG׾
ڧub6RmO%]xot;}B{ 컼T|RW[6[{;;jzd5&a4o_zu{[H~$>?HREԵnɔ1/hYҶFjҾ_UjNߞ'9[	߉<q3K``>W$Fg>ܿ3yyc)OR	-fU]魶> ]8<gk~xĘ|i^5|_}my-+G&zoom)+eGܼvv][C%K_~krTǞRWKf{+4O_|Qƾ+}]0?uxA PѼGJH%$7VŬ:eOZ7K9T\$m_M87'T[jWw׫:x׼+IjB٤-/-淺467]Xܠm#[]o{j^[[Ej{~5;vKosoS_w-s~xGïi%čÏ.Ү~&k^\KCleV30ڔ_z]qW	ZV_ykQϫ=ZKq\$0)I7Ȩ ޲j>xJ2mrٙ2WERN3ֱ^ie-cY5i&o5ْ{.d[kx䔬o
lPEH8FThҢ(Ӆ(-8G KsZF.NXձsVudSm6&,<
xhryag. C Yx_O%|U	<@?nl]c$'xFIuOEwTܣk4Vi4c4m2-JKs}mF.%Ӵ{D-Dlm)VBD`:0ufٻkuhﮫO֖]KzyU?  y~ߴW{x/!O7Ķ?4Bh|;O^\,izus5,ZUޥ<U)E$M8joo_.`犢m9q:wKm.E ??E4_(Ѿ|6*̚,
F;KF<~㇥vQԖvU9qc0ỤzA Lo[? ^"i(ޓjz vkvXt}F{tD+t_l5s|<	sJXOvݟ8N26ЧUJ55+'m޺&|qo	x7.<{ǁ|EL`p^4?o`O4jj]U>ON\ʝE&g~m3L,NKJI8II	'uGk@jwwP-+;ZnqicqH`u]Z4OSu`ͧĖv??1r/iv[z|_ ^~W/8#^|,y,O{yU=dºpH4;FZzkTk_p8ZyQ/;6{ோ-wx_K˶mRER{	`YN5ex쾓p/_i֧()]kxڒ;yPcTSOEJ.m۽d	 Z{h\_뚋io~x*e+"-:}hdk\C,2u0p9T:ң(6դӒn*R.Wo<='ҕEZx<iцj>T4}~_gg_ (#KchnY۷x~Bܼw[-[]-$n ׵KJ(>XJ1k?Qm{zx]R4mJZiKV}ό!I/
fAR˲Zʕ<L\BJP::D? ۋN<-ZNA-?QYZo|WZ8$,<-}6cU[o/x8q9U{L-%
E+K2Rue)Kތ3v{S`s,F36b0Yjhկ*'NOq-p\#ҷo	+N{w>k3 =ɮ<Iook6\,qSRRt]O).~}/Mw&ܥVoM5}Mjیy!)B*фwQQWSXr"vr
Hۆ0ZUyvm/á
J+D_S-a%t8.۔N3AY}uFVo}%zՏ:oZ޻y"񀷳x/;ioᢒW}KkxVc%[j)N!R۴c}zXJU)E;m&[?#MG ~k
_	<m7R)>,0ÛGȒ&8gaefW2WNVu1U>e~Z$y28+GˁjRnש_v lO=XD/,:|H񥟆R )#TyF"}._Ǜތoۖ1̚wf [Ϗ'v<RʢOz>@'`^rpD&AV?Kמ%}ח}߃؇C7ZSN^TiHvd b'.NpH'\RҽvO^OeNX|kv:'&חxdCrtoIm
xT҂Zʬ6Vi_z>_JUe'urVt'Ļ>J48=BKtϙuNX|s1_x
.0.uL<dztN㤱Of.oKu<q¯h>,޾?~*jHCk>1B56ѯ,9\xDf9\QsW<fcN|ôi9Jq*o4xb0R'/(V	j^oЋH'>-R<Ch%ܗ ]}+-FkŹ&omq%Ҥ-mlRG<	/xv>Wx:S2&˒L.T˚據Go\X5_a1WӖ-jXJ::kbcZ:*`O&n~(E/o/m>MPt~:W[Ρ\c_Xy-CGCMrſ}#|aՀʲj*ڥXQy{^fZUTRNVW^*8W6CS.a͇b'R
g)ƴJn~)cCd·osXyWjWaReIʩca%Kh^O\[c丬1ЫI:R7=Z捥;Ծ(ͽ? 	Z!cMB1u{#I%nyh/;)|mS֛iIat>/͠]z6:ޕ,Kj>K8rQֶ[=:pؕFu1Gѓ2ik4XUz+[6#pnU*T*'sg<B[TQ*5+6?-W
{;:hq}khW88ݯogZWy4hі!^}W쭥t~ac1{Z}5?k <[cFDfZdbFH ۟_qUL"%.k%ev+mkh?l*xi{wuʞ[iݟOG@x<;uimoox띐
rrUČQ|=s_e:m7~7}eV-SJ>toB짓<edڧWM4}Xm ;C c8J8YN^Ԍ*cx>J\CA8֚kDhU5i~>?YMF9]GiQ_F$Fg۴12Bn	5)jeބ%m3'F'ԯيwwZTm}q|.>$;]Mk:um#\f}iwɬ,+JqcdS|t~la]ۏ<4wV<'uiÚf(O-:ܲͬk-i%ޫP.8	W]_=6[1YQ2\vi-%#|+C|Mr[6GZ揣ZnA#Egjct+ig֯9M`=!FluGUF)7^'Lw mA<c;+|2xzaUVKՅR*4gџ~ *ŏÿ|qJSíu/ڎ4hz-}ut]Jn--GqS;)R]OeJ!8Jug58EF<?Grr`x嘚3SYc&T*ʤ9Ho([x3KK<Xs>{l<-oss &=J`kqʲU QNHS50|$O]H~ӊ҇pyWIc含R91T,eII%R^Βt]4[QҬmgcsZYu#tw:FMÌDzXRGN
ibpJU0IŹ6v⣉+aqOt|G=֯/ޝ ck:[0*otpfp>vo6wVic!y|SZqo4S^˚ݩ;i ǟ?7g_ֿg?׈u~
g[{]gZuCBu/UK3;Hak6#OTVQ䜒QVYѝJS|a+XݟfxoAxGm@Iv}EP*22|8tb:4Y%;t>[=.%nZh ?3W/t	X f#js=<xfmoP=,D#[XK<p<EjTZpN䯢Jҕ_' GN֝t$kyy&n& Ym-㶆9M<miK-lMM_kӻjNOK_k	=vDU UxI2b{,G#$n!sRZs [=,û ~iϥxQh'ݜ]q~Ko]_VrWjjVwKGkcSYdWv5_]*#}WU&^2H94ாnެSe;9)*i|QJVZ>+.|.Ku|Df{MjOf=\vi/mkSȶt텧i<W.oPITeNQG8Z_gܮ~%MJ>UQ~+6vN[]濣xZτW5WvcW޴~ktKIk+-峚><e<|8~pk-GUVzJ25ړk~?zY<Re别|Rwn.2knn/M=ŕսwYjVew}le	$!(] Ix?OSsβe
{pmQmÞ4䩷?y4Տʳ}F
/Dۊw]%uDwZώ>&$IT~Uӡ=v"^ ӼYO_}&Iּ7I{jh0￮jXzJe%<S*Iu'Ft&>Pv(+.?i^]jQXJ*Uብ7VK2N5c}5\mi.{xӼgFٻ%xv%o%ua>]J%ҭcvuBz9pn)ԩ^.T\ԩ*QtS,ds|O/xJ׉f*4x(l$j')yT^/T?\7\%|xƳƕ-1xzɨHmeڬhmxY3ٶ'dYT*=*UNeJrmT)R^EkXbr:ٜhP7pbXeIMFVGn[6۹yP|agƿxZ爼;㻻j//0/➑cY>zƥ=Biz2oou=3V[\^k<^^qK5.|-VZh=c)NN2JIVV^.W|--.|RcĒZj t1sާ +)ky-9_xnYZI;wvQ#=,~JSn՜w,`Sv30a	9(qX-L5ZsQܽZRIױ⏃G%am{:t^/~x>M;Ig	m&r5Cw	ZN){wMm|SGGVhʵ)OhT/-Us
  b'ෂu}#- @е-n}E4GSycyk鶺mgV-಻nQeoog	'Q.X˷3v}/{y3Kէ&:IN=e &_E,vǩn+nnehi\2Gk-lүb/	K)秝өnTc($I{v[Xb.Y",V[xMkRw1\-ȉ<$2U{k~~n%y5ZOs#QYk%I	w&J2rI>F%|^Sq|Oϭ繣/AnQ0U
4Q9䐣>9*o(K]涒t8.ҭ#z=w^Ts\6HGbrٗpɶ칺+_C%i_V}?Rt&XkMNKkgABZ5FXh:q{i{_=	R>v׮}My!.oҮ<GO,v%dd0ob0ZXY"c5䧁hjVB\jK+gԎZ	G2V d>|C Xu}_lt5I|E&w.5tV}"m*QkyN֜ZOo?bw1<,r Jb+b}ԋe-pՖ]#rRm7qqm>h=?b?j[o|;I<%Ǻ;JXtl3Ƶ{EbH1xYzs[Gi=փoi.-_S$٧65X-TSpukX֊GjJ\^t.x~7Oqpf{%z,5)bcnN8ژG:jѩG쓥x'oW_b| u 魬\xs^ռ;V*&&M:$o;).E?;Oa~Y,ڦ)ڏIkE){rQS\ܼ7e/WsWSvRjR2|1Sx˟sGѼ5|
]oiZ7:m6s򪮵sizE,cTMXMui5uٖ;?qL(W+<"%QiN fN_l	cVU"	p]g}|JU^"9|kMfn<xwJL!t_iAxR/n.ki/a2U?Ԥr6}u>ueK	RZj%RթY--ޜ:SxO^߈I{Ʒzu洶~#B
~SJ^Yŋhk޽k}lnO_y(QUI5㳊ke{/O跶ڂE*X.1]bTfES2֩hcǕzޭ+y[_V#HFlo\X۰q{(N6M>$_G7PiXXsw/L1Rv+tߑO86uյgZ?G!|inih 	1K[[~oYCw]j#մyHIC\Ҵ&X6X;m+OyZ+YK,]\4aRs$#Q˰ERsT|JI.WVgśo7BL 'CL~iB-쿳`K6=:Е/lIӣ*!^)')Ǖ7.xNN)ԫJi\֚rap8gդ1'ť=|b~'Mo_,oi᮫jz4oL46 :.|HO2m'uO6Wׅƴ\dFPʭ58N1njJmphғ0ak`*W֢0)<eӂymmƻ`NsM- NRxF՚#+RfO-a'>wQYI$]aU^tnu}WZOOM1~5/j7rsr֓4n;Ǹ	EE))+zԧ*TU-{]7ctR''k־xSkti|)gV͠iH[-79eo-{Y?ᮝ8iKbY!v#\"6$iZ31;T
"?r^_ֆv*RdX3a@v1T(۱"wY"4AG& qU!y<\`5/j?\ki;.;WW -- 7$;ڄ{w -,mRKV}2l$:D,cOI|UoOw饷\I*ThS4KT_
ݷx oqP~>|$VJ?f5xJ;ą4]:dh;y||V"Ww;T8g)%&^1N-T%}~tǤ|>&*[_\kK4:9c1w>!<-MрӝwוQI|}N(Wm{ɻ۵ҹ#U,tݚ{wga:SYG$wL^y~*UVq[JY+E-5mޞz??I >&h/~,ύ5BY }oxK#3%i7k}1QG+8zNiQM]N3\ֳVmRڟKuJ\sg]Do#"睂u~gc9lrHbku9괵PU֩Jګ|]
=~۷KDHU*\|N:)rzּY=t:A-v#BaRUX;	8m+)A_Tٯ@ 
<% 7Go~ Ԗ_tYM>(4)|Ggi;$wñX;B|Wx~H	NKo^[Q;td_, Ec/?O27<[O:+5BtVKm=[\[<vWz7bpWRNiVqm6Qi>Wξ>B.ZXeZ0SH'9Z~jmrǽ1[]Paqp1Vt+^0 |3U>?|VNcx?m]a:<a(XF{"Q!e~/I7 WE5w''nM% /C~(!χic'şXD.Q/YP񞏠ZRxa)R]ݮ[_N/Hwc=8GdkEo \AM"w_Zh{VM289sS|ͻ {=AEb%؞H  QKC g:x;>2񽎙\@$OmssUIy#J<${??1yXSd՗ 	Jү g-Vu Ogmx<,cv$\hsUCu"[تU%DҷέҥIriJiM=5y/N[g٣'!7mxBmU%$qswRn[5_^#k{F_OvI[SɣiQ%:`薖ښYF@FG9[g墖*uT\I'/wo(;zt9.[FGy1R3朽?yXݽ]g R52N?hh3f2<ừ^C{#;b+-JN	U4b+kQ/t~mң⬺H;C[;Z= wxSCi)%4x|/ !;  E^RI՜7MBqcM-Rb_yP
k_tמn 
וqmhC4a-CMm7XilibthgxN?%-zIhψ3 ,V
٭BmUHc%iAa ߴmG\}G, #xSݽ'|AerD*={OB5O᜾ohJͧ5&Nm\NcteEB&[Fމx|I{~/<c CkkoigkQECoFmڃd|cjr],>iF**dp5%(Vi]-oyR_ڋg-h 4:~OE/-> iiP^ꚧЬ.tjvZmѭ^^ӦMRTF_j)T<{ ӄu//gԡ>i*{
6ߺѿ{# Ag ĭ]W?6Ǎ+cZ?ǍtŚVhڡ9 7s[kW-nGg+՞e):RGݩ>VRruccC<=HӜ)TU抒q#f$?e|Dÿxឌeg^]ݮKXnuKgfQFfi$vf'u+Ww￮3Lv?6*7BX(SR%/>С{WO2wqpPXbts\ȮV{94ޥ2N!J5$1iֵ>Sn7멩8yUӄ&0KH^6-xuxN^ݫBc\!e'y~${zy-C
h-*KG^m'AӚ;C_׵!/RuBHEaX^,<isz$q~9ܴJ:dE3lu*PIJ i.iik+"9-0VO.ھc/ڼ"n>υRҠdTyf&I_yj0^
2	c[WWtc5}Rj&X5/mkf
m|5We^*/tkQY_᷎|yjZƱ4;;]"k[ͼhڍv`80!֠STNHÛ8BIY^SO2t9ԕe5UQэyF>ҫEIm6k7<|_A;}^-ooN-R9;xuKZd,WK[#&`⌫_;`\*}7%	5%~禶?hLuLEzJ#SRNi):rgmVjʟ| o~Eφ32|9𝾯[[[Ex:kK5⺎3Q4H6j%b0xYRFJ|!>WR~Τg~씴[cKc  |MdkZEfp=ʞS)k?iʟemmZo؏cxURqm쭦7kI#m+ +3;$ӇS\M=_OleWȒwVI4լ}FZ;byڹxXq)$d\m!N ex<t~v5im0F9F-.e}+t烈o~ XFgK&dב:p{m#CyL#a(Z6r}.ܽJOߢ ?a~>xF8 4[+~m۶Z|XƸ,c5{=;V{McCa[bOc^-BqsY&b)96ui5:2y.2RImZ-Ԣǯ4?*6񧃾[]G?׼84mGS,_<Y:mWx!m4Xa֭Qk{<>}}|ՕW0FmJ*x{?6rj?\6~ޝ,|kK9ua')aFONU4);]
?b(Ou$ٮu=>_XFK=K6Pi "[0 !|,gsN+b)WĪMLui~OiNiJs}9ٟ+<=¦aO,˰iegZaNOѡg%Q81[G&7N(76zvk-Oc_ſuKW?/~*Ŭ=Vdx'/yfy^2MRR*э*B$RoFk<%ోbe*r/e,Mz)ԩRIZ&zWxkO :?>CTmcVǃ7_5W)r<5_ioԍAoh!ЭcaKf5?iZu*r{{b,7xtU(ʟ0*=,R}[~ ;xC]:	:UAicg-̷R fi#^LeUΦR&*V凲Sr|ϥIVO`i`MsU}U[ii|2=݅^=ŽɱU`{*tDU
ۣrKg✩<m*iΥNSrj)]}g抆yqRwe.󷦧W gh~_h֑xhA}CK,EƇqmoD=1/DݛE%;O֣ZZE95(I]-5m.U\ka'aTMr	2w|oUn}y	/?'o̥Y"`̌W S=|Ii}V~
iVr!I"SV z譡oq?gcsĿǎeG>x[Kh> |=sPhD'_9.LZ\{\ }Guka5<#2 \EJK[U)'rCi"mxgDv$74>|2n$<%jMiW`-9nmn|ÓMv:CIgNXcK쑦[I쩊$IbY ʙ='*eQXtY5*8yb|oq<7aY*uQOmxV5}SSG<,4$S5KBc3jZVM;xb_OȸG&ȼA__n#`jP*T:#p|WŵkW˛7a)(PXsI Zkt$v<G% ĺMִ΋xNdm"2xCMk1\Gw~g>%rFԝ)vN9R挽󹫴}is_sJR<^c[_YR	S啬Ra#{3oj_O~]O:ǀ[kVZiD>!	ghcYdAy'pyBSGZ...qNNϙƔZ)6k{~W.`	 *МNs.V/m
S߶|V?tm:/c5ίwRP4qr=\/ T0q	VɧQf"T|[WJ?5pe~2A^43,GM*5MY7V:ns6 * K $ZnqgӦKIFgogrc϶`zBPң%V)ԍT
4ބmg՝>׈s1>#{E`>##KUjOOe [7|0~a#*<%c'Y^?8^:_Gw733":`~ѣ^4K)H$Xa[+4=wk_Vc>FVqzV.  kڕ>x'gmu{'Ya,]X^anecjqeogoQ9}k|
]IkW~F~2`,0q9 tvI]٭~xa^[}̆Y** `	 u ԏ4d8>oiG+$;W^y!dxՒ/k,[ˉXnPD"BFf.ζ*OD4OC%8l%eFOogڷw? '('ċ71y4Mst
p-1IuN{+&L(]Y+ʮ"3mX_2qN_JgSjF7^Et#زJkɮJTIH[˸1ҥNK5]<M* ChQsǕ>=_韒%)K1xjI^YWxk7|3u?|p@RH\eW1D&bW*{*7Tͤ.e+j;j_*y5YZB8K'%^Te]{XVwKC%e3krZ".Ilr$*I7Mkex*i֡^pi7	rJvnN>웴jkWqcRN
Yl\)WIN2D$ kෞuSG֗H^}YoMQ~ɦjk-=|1mY jԣ#j\I&3mml`?ZUqU1ahOS	BVSmI9e8Хq?SQ3<IFƬMP52Vm|A=oᯀ]6o_BB+Eix.I%V$Q4ޕ|EO$zؗKUW|i`6:׳Ӊ|gŅdyj8S+WbqPE_u)r75)KY_8>6Ɵk%𯎬o'-l|%y6"&guˋm?\/rڕYOeqYvUu)vOdX$2\UZ1>IߚT|w>h/x@_ZK dk:Z\] BN'ReF<R#e(tWOF|P;5FSrW5'rٻi}ϥ?b%i{3Ǎ<iuD//]I<mxT9%l!+4Qe)SNS+rQ dLO^ZU:>\*8{k{.V?;o f>5ct7/۾jZ_5|;J⟱׻]T{O:/9c/
5`]҄e)%۵WgQG:ѣ5J".meNsnIO;io㗉f&.׭EsyeClG\v]SO&3u$/J5eZ(mwI6|:qrwuiX 1kS{Y-%`gԭ~+(kp^5hN1km>R5pWQӛv鮞}<5ߛ 5Ϫ_{gC4.Mnqb_~dWUHHYvx?".-n.a!nK&
LhLX쐫d&L[^;4[o=#1!D,JWG#/6܎pWkjײ܅}, \\Cmysko\uhIG-+ڧ#h{8rѭ'n#gEW/c{_^}*Fa5둬c4Vi3&.z,kFKk9o<wR]/g{_^O&8{	So">d)MZJ U~r֩J4Js|wvI^G:X,ZIjHG^D▶Z_Ɠ_xoCm{xwDѴoԲ5I䄒LKf8VO݇o꜓2*9v8`fe;jXk?sL:ը;x7J+i>U5~x*2xOƇwz;CgKe\G`!REo+]xhGf9kN}S.OӍR<M9`(SSQ4~/Wq<e*pQuy֌㉄gNKJUjSJ:Y{WQ[Vq
4 ߳;h|r𖣠x஛;MG[5wq,(x-t,554.͎,~%ن#/!_F'ViJUFVJ6rji$9/hݱ5a9¤((Ua^	ѕVjź|ܿ
<qO7ZY~]f|c6u.>[Ʊ[xN>.({h/_JXLB'^rq6ӛ'oGcLg:
pWjw%7'}wq]O~;[^C>/S*펣@Z r/ԟOAho.m.`.-YM$zkCe|ESYRjaMF˿3/̫/幺td%ԛ&-Wh@;QVn0&%?h:KDyjN[KZծz$m}
jڑ䱼A.-%P²ߥ\5rT**sir߿5?-fj/iIFtvY'W6x,ZX|3_?OMKRGXAi֮זg`t`Ӥ9JLU:	[ťݠ蕴z[V}Np!
*i]UOl;|㡫Ž	<7vǊ<Mh%>$x%9xw"+?i~0[]Z]hcN+-'$ݞ?\TjxIԧm. }?W
_Dk<)Ɠ:tk_5G|=ோ^2Cc5ԚjeIWuoh>meRN6z8?y]^-tH4*`rܺ)ʭΤҌ)a4ROz7о#Pj	-xK㏅tm COxBКld𝣦_x+k}?ONu:XS>^wA+{KߑVM7)EI'tz}LYܩT%[*Ni}.V4g̘ߌ4 x^ο|5k\xA3^P x[>),5ri?ɵE4=M#LinTSc{'F:5mƵEGo%	;IJVNגۻ@| |vզFk#ޱ=|"8ۖiedYe|1RTXbkQ+#=!mbt~u*tI9(O~>E]+h+ :5)":T#
#Ccitk_OCN?Uh  >{WC-ZXs&{P\]`lV%AG ס ]IYE#eHKYbq/-Wf	B&^BmeU&vP<CHռcNo ;۷O?(o㟈߄ :&$5'Ckݙ~i(6[e޳}KE~nOU#ΪU-5ܔ殔Y^kv\Nr 89cӋn?h%et̓RoWQ>+ft]O➅jng<IGLsKB+,u^sV}:UҜOj.^gmvJ߉F{mm'/1j-&wwlu~YX!akoKOŜW2M9KsokZuα3	{&ݬnsrIY]JWIk×YYZI>7𞁨xo\t:<0*i'@$,z5>ӭ/j9Srn5t9wŬ.*:#Z.<6洹J N<]7%īojm? )$(e宩}ww	QjڼqOp#$T4'8!RX4ӓ[Kkcʦ?yЄ/n)t^ާw"JG3d
v V?/$HoB1չ^Vdս-gZ\9 зe@\q\PJ{]gaoTYہĎO<gEI:gnu[w-KH-< O> F|%ټCZ_)Z;Gs!ULdF.x
 ˋǗ1pwJPi|Ohfo:yvQP^]}/?Il4WmoP:?uK٘!RIg$=k|<'R9oWfaFLE8GE.ӱxxUYe2\\ ><҇2ylT|[xƚJKkWӹc0or\?Zҿ{, d6ŭ|p<~wSG/E8k}WhKm^ 2<\SR[>U̼Mxֻntk]^H] =7U4kq'(լ>%n6}&/$:[O[[YڞlgZ;L7OnkW緕 CB2B8=] C
GeYldbb8(HH8 LnAWB6[}{W2ˁ7biz"Yv+; d\V_(7}$2z'RK 7b_t+Yci<J^bO.H\pb*SeՉ^_E} o.W)]>_iާ"-r@ ɯ^%ϘE<]*F=3p>on#=K;:@2vptVz9ք5+ N^2/^VIkU(> ?kd/~|Qks,ʶW_u1.4	a&c8%(_W*M-򺐥Ęi%ғm%Jt?#O~?QO¢OxK*ֱlZE@&Xf$$%b¬9h}ty\gX0^-(.E{vwH[p:A#98_ᤥ~Q]+W~?(4KKϋ_
/_(g $iKφ6Q5zԖڞ,~%̪e9
s^Z룺H)JESO߻QvpRi;zΡg/EmqsRLm<xKqf9@H6wDYlJzXH`25d3U[N4AӾWW$d,]hMƤבIu^뛕iumt` |
?j*w:q/Oii<S>hl/tmT dp if}W%}|ꕓkYNU_a]9ƕLu>d_/+[Ugg
#O Fx?S:mp4}#KԴ;mj?Zys:.o%y;t,8y`jֆ%*{;+Gkv{<*RKSQNjRMI[;_qŏW\,eo-auŉVBu_aW%2FUEb>q)Ӌ1Mᜭ/kNQVW*tzvwG5CX[5KxbQcI>kxm%'۵!Z$tѢf^?6
PVnUiɮ=;->>᜾YFjϒXA/ݮk%Mu?>/)zIx×:>}*Ggy]z,FCCܞdP-$7-ȉ. H|:sS'Nefe6 bQ}JN8ߚt՟?Ə??FBE>$xNWN@*ROoo
:xL,"tQ)~_BJK'}:oIQSRw'	{>hҥ	Tg qby*<԰Tyæ*j.)()ESS?\>_~_t/-_phZ^jw	n]"4Ck,x\ZϨϫ[3྅4incK2IF0c*WjԌU\ncRTmσxNJЍ84Xkt~֥eS|?u|(M'9c5/j-^񎧧4yu#~4s}uq'T*ϚjՔ)[RJғzJG(_kW '_0pjWB	Ԋ4UYJSjXv? ڋς!MQto<_I/ ,k|</b1nP%rq,iP [}rº*֣titqXyFt*	Wq]<DRRx^E<Zq~JU+Tjxj0؈ס)lI;Jv+Qhk\j /^)%+oi4!]%#605(7.ޏgOC܄(KS3cGFpxeY|%۴^E>\GO(*ͧ4]|_N(^R&ӿmS_S g7xS>BxP[}N}ht}O_lV:K%Ō0qӄv4p]"r}NV)J5kSB3}K#u'jqVj0R~. e4,o_Ǟ'мOxJ'FKnHE}Y^<VA_էST~䒕o{h~=_Q(Bp9USN/ߥdOޣ},>|| ik8<=k6ZF.g4S5SRY֕snڰqtkAW*PW{&⬚VKޖqRi9Ӛ4'55hԔ׿ [|_e⏇lÚZ]pY-5tI,`h_xb,ӌk)'m55X޵ͪn-WwB|>s?X'>%׼M~MV߅fq}}>w$b<ivG湆#0S{o+{6+4Ӛ1i:E*TԜiQ^6u_O7v\CI)-U6Z[`ͩ=eY#_V6m0|jIHSXjV5ޑ馶ߺ \隆|?<1k1hתiineI_cOJSpKkf4nMy-jzQ/]~#i֭KS5毪݉nrWԤW}NK"("Ʈ!VHd[f R抧v*6+o=xT
}sk֩z̨F
ა?/ g8 㲶Un8&O;)V{Zڿ[|OO%OZk4IK]k-RH$g/{	4E]4T7t~ &8TL R>hNM:ڤJV.VSڔ*([XwKja.x RPGgk1V88$5 ,C)WM }NGIViskwӛW~7o%oZЂH'Y#Ba˰}t(>S9

$m.M(_}t0c')Rȣ ˩sj] x7W=`<!EfkO JMl,մ=.XF꟨ƕj*T$Ri[-ٻ^wO˰?C'~\mx+y鈴ik>?>!Jo'xԡaU>X&\TU 689Eʬlz _3|ji7[O}>%laG]PmiCMH#TNu>?Ϙ&TSm{~s7{<=^iY_W<m'KKoS_[A<y+y]YZhOMY﵅sS+%֕5/|gI|&f Ɲ\FNfXh:|FUZW
qXp^S2^\yk`,,1f:-WՔpcVTK߭ERoTG~9<|}\2tCgjU4mǌ_]\% ~w%Rԥ^|Ќܢ4%N:7eskGqxmyL>+.ԕf3W%RU:U)(ʄ)Rזіӿ?gÚvoOxp7FϩiD'RDܲK-ѓDr^^lqX.ƬNqx<LIJMŵgv4`rV[\Je)*Pt*qc4mWt 74>^5ԏT|ytnc#-<AZ4FPO[{o]Oxd.#,&axNPUWU;Zqn4⛓ծ^Qx9^Oxo΅Jx*]yAǚ5qЅ9k9G2e~(?jBCN<,nKVINMMkxqy$6Z wE9oc,9-|_<]ZyjpH5FWRJ3|Z4'K#!7iOy*Abn_$bMk)Y_w}+Nw҂i /GJҮ,WӢ]OyE{4lgh$ՆqAܹJ)i]m<l)BW#]Q_{C7|zii>ڏ5<GznBI_Ú毯Ms\FP>";x{n4m
Ynor|xeQqi΢ݒ[ILֿ$tҌ\Tf:ͅig6g{umy5ΝwCscqkpkYKy`Dm]'$Ӳz-ng>iͭ[wwcxH0w398z,ߺ֖kN|oe_M߁#ai<?c>mOijM*ŖEl5&o7!PyPxbIi1񩄠vWIvq.g)}kKw?+]K~^!t3I9#k @`?bpttN擔Uݜ.Q|;ʅXJNT윕9NI]? ~  sw)mSH.laFmy	i巽$9+Ruۦf/O?1KZ3JTQnѭtwG꾳Sÿ=x> ~bӵK/h:E-OUҮm.o|TI2h$4[X2t湆v,(q.eugR)ZRM{=Eo[ keنau%,%d2Q_!o:|}{iΩaX4{٬5ȯ_iK G=]l.Pk].X2~+2AUZTc1W	5*RRH9Qqn3+8ۄ8CL+3X躲KԼa*mJi-5{v-Σ`ĭss4M!j7#nTB}Fog%K^nTjB7VR(9FpmVjݴq=.nxjJ9n~iſc4;;M   GZHxX"nw⻝rMQ#ڮi6le6V^"׬ӉLČ0\ҾGML*,-|F9B#8E7}- ,xߋ1O-bkgf
qc9"Bj.7)KO~ $-zڵZ_"[ZR["jeammAom˨*vRP%R卮kN*UgT5J%zp}mmn~D?_%񷀼뗚kzXxWǭ^^ZR6Fڼ2ʺ6Zu-ΝqUӄcqMu^w>υV+J9ʬmBY;o t4+x^ Ce]8=X~jxwDg4N-ɱx9J%)MG]jnS3GFJ'9;RqꎱMڳken5c "=;[nFws*JGЮ%ji_[nߟ7J52toaJխɯ^g m l| [|oW	.]Cᖻ/</W>k,-x6UM}-,MJ57*RWޗtUx$+Iz? 3մEjogK2.ך}R|;!fiU[f.*.pQ-{_ED`1Vg;Y.ύ.VEwx^Xlu[2)dwϖ ٔ{qJvkv'&~_ӪcR%C\jZs571[6lZ.eDqolTfX_i-~aU({=vw<56shhXfŖݜ<*6G(m<n"XkTOG۪}~ROZ^Uv#$hBեӈ*6QGwvRMowmLGttI[=:j*TwףmW=C DX.wxUtX9F"̾TR.9pQZm+NUI+C[wZ:ouKcmgŪyVJj	ข5%0osvIaha{uF.z*o;8+s(Τ⥢jѲNI&ah SЯ<B&u+᳖Rb7z,uǩI%,q3M=#~Wa"xu7%uN\i{gR>$g
!ˣ*ζ6J'+~ǞuvwO㶇QMy&M>qMD^q^=>kh/WR'GӠ|+Qb5ifGbT!f8NHD|<'bp\	`rQeU\jڬ!5#Mj<|W=zd{S Zԯ㺄^xs'ßhK%Y/zZճnKjn& Qɸ1^xcBZYJքӥuR~oƾp6iW8eJ0g+r伥m	$~{ 
Y5	H|Iemr>}x佳֚S];M^mj\͜K<?gT.ZQI]i|IlѼ3rb)89*tn~ҷɻh'|A'#>vgko4
k^վѣ].	!-f|j|Sio}?|`.Qg89nVg}l|m'omrC˂'`c袸@(IQrK7z쭾
rEN5!V*_ ⤡j]}>8{-~ΐ['GԬ ۚ&ge)KxUMbҡ.JJn?М%P2k7Mmzim?xw]ӝOVgwOп%N߲lMޓ^PwRxj(夏-yx4e8B\/ʤ,,E)N)V]q*$M߭ U>|g??iӼ{;kO<:Iմo&#I,-:bX /RфjaI--ZKӡK2
NYJ{l>MA/[G/^&9?kww0x᧌5o躌~'c^ċO 4-n-kX%E:^tiVtWܡnm>.ԫJJu=B7~tJ-.?Cѭ?a{_|q;ͮ뗞.׼luOjP+HCxcH|si֑BֵBc/|^ziԅl,"(ԋvMڦx}3!00ZPWZitڧR~vӍO6?^0#X, .= ~x/5.zFo/_57EEmxS(t;xZ:V_Cu#':n!UɨsjQrS\\.c!'W<b(ά9~IA9:r	׃3*wOC.ǾԴ_q YV~ǅ.5@ #4Puaj"Jj<'2qn4mOO@r1PɫVׇ䨝Jgw(X4TZ<i  jv6?~YSk6
!ԭٶI7W&𙜪h((4tz'e~.
RZpn2Me;Y߫>ᾙg4k<7s=ŷHSƢ5H;Y(	v'$2Y`m^DfH_>FA	fxagOOoGi<Q+Mx-?⥾Ea3It;%m"Rw*ajqy7vtI?Ϡs&-o_gῌ4E K?/5kv)xQm5-=Jxm.XF	/$x?hRL&IRM8-!QZYkn~KJ8UnUvݒZ_mv?Qj6Ɨ'in!H3$aEM ׂaq-}zP֟z ?w-cdYf*O2?,~cǿfד
*RZ)uvm/;'QvxKK]oK6Z71<I?ڢRX6W$V0E-NJ;޵IF
InNI;\UJ{EIӝ7&:|ӎZR֋[ 0|#>~̾_οi:J2]+Dm>ݢj^)ҮonQ&D9c1\?ZsM]/gJ9/宧UiK-Ķ&KIJJ.Eǌ/(2&ܤ׾:~4>:6J^ 5bHfi+*n` sI2K|ӥ B~ο.>'|a[^ߏ|@l (֐;2M2"I\6O	%g
roEӃӷ̿ ẟ_Y wxR{zNϳ1hCu%E reø4!sKOϣP"她I+]B[Wn3Yx@t`t3Cm|J	c,wGC	Bt2U!(KU<\[^b0XT+SMӚO[ٸ[~_??|6^<k;#cϋux dXmSnJ `:~V_h'$SJNvMjrJ;ytANZt[aOM\%{T}iʧ9rڿ m᫋[oxn>L پk&u|*Gw-_)/[CGZZҽTGYg?l g7ēcWv:Û?jcs?o;k-NX_j6wZީa4jc)$LK"N[9ޝ5&n2SWjf7Sj	^}M DQO8: (	Kwϫc?I1KMS xǒ|H|k:XG#I-̷Y)_/8*`:m(]&d}Wx|uDS:Ua*g'm?d	:SVߪkVr~%-zcϕwqj؛;9+ɾ)^.U'Q>H;)~ivҾ+YuG
pgU(ԫ(җ$\bޑך6*SS	=tdz~O*8y-{~#/OO>=B;5 _x{O9+RKTKKn&IE$)Xxm:pժEʬ(Ҕ2$⤭ʣcV1*Q8gCOGJ5MsvfWῇ~9b5i 4VψhOn⻑u-5XՍ͓]^\(fc:hFUx˭gөl;W)MtBjŸGO]ֶYEo>ާ F|}u?u[k,YI3mg;QO~,O	3J*yNy޺(gggs?2)6k*-CY6ZZ_5jQO7rxy<gkrJJ]iʘLUjnvh[_\ǝ۲mMKK:nm #i 'kqïxٮ6ek}x[ßO>hipuOYZ6]i:{#%s؜֒Jaia#Vz9y{?x?	Tq<\q(M92}wUUNh՟AΩ+
vw]ߝlq%淴luH;z52Dg6غu`2noe
;jS|ɩ7iWG9ahfU_e'8\ԃ%	r՚mgͬ8_~]x_
xz@smGi.+I:nծ96WZ-m2thUWF:RJaZIs962RiigY+[QNa̹fS~ŝ`MG ,-׺!WJ4\)in&bO{qys$n. H<Zu!<QVZ&ݵihIw{_EOzoş5ՠմ|1>xauϊ"犬4{kK:/-tUҒ宵p&SPjATtFi;MRPrQuMtBqRQo{J]Dh?tZ<_}#bK;EVhMWKYxBӵ4N[}kٮw[JzQQTGwm?\|U;R&Hiz|WF>#LpOA^ǆe:4;u])boC+b*ƕZ jnVug~n>Zn[?oߏE۽<U+6ѷrG5EZZ޽{_}O W=zǨtUU՛%Jӎ瞵Ы)w_øt> |~(<C_>񊽦oiǂu_>+ΝowMkajڛiq}}s$w0Y׷0Se_7/|$e;6JΚJt#?XnaJ<TƟ^i9&b]g[A=톣|?jc&yyZwh1CpַJĳDd]of8RۚJqdlg$47fZ/<#]:nH-Ɨ(r;ni-fQ\XL)GzhjJ=NJERvy=]޺Y+ o J|C[-3P\$ƒC&֍KXJdo +/gRI9'tVWJ^=̳r*XR棉S2r䜗_F`?|d5:;ȭDxN#m7d
DʄmvFlZu$ץ}es䔟+Z_쾶՟:F?fľ'Ҵ>'|kxA5;]>q<'Y;prڮSӬ%+l-GZ	ۖk<HTm-9[wDxkMZŵMgú|Z1ެv!w[9q+_3 1o3PWJ3RT\׃WVw۲L⡈ju"'f%V·|-Rwe~=ΉiW֯y-SQkiR[Ϫ̶
m+!Vo$W<JirxoqZk;1*:vRQWR-g ~~i_|E;_h_i
NjC=xO't|D47XԼC~VU`ҶY.S0>$¸<N6O_n8§5"NW[ݞt0<INlLˍ985ٴr^7k-?'Wf|aZ;þ)xҬegNmmuT;ӭbX`6TӒY~;pӞ*Z(^RRI7_甛z)٥֯SԃmI^K[}ߵ 6i~ ¾<kr,C;O>aOsh^ҭn%1P_fy+ΝJX:^1Fs~IKrhǕ(ѩ]uC	wCGKO Il<u2HEs"GyoJbWAa'eVs|߉KQ"QQuiזp]*:JթښvMYJmYY?MhtH#2@Aw eq$BĩPV~y^*kYs5nﾫuiI1Ԧө{rr袹UouVfƱZ,;bloLSqb1.kf5o~VՋI޲J7%Jy-Sz
#-/~4.'_NmZgUд[nM3sir`QapGϊV)G((TM2T˿rV6w(ՆJ5iNUʓQVWGO q"[.4R/m":p\G
Mq|i\o[O.]*!t!(R?geױfجFvXTVlݹonmeuM\ɫyl8MNApA
X$[}A~_Nn)I4vˢK?8R5k6On^;!x>Пka21mҫm.
գ'8R6*z=̱eQ:q˿}nxwW|U>k^!+2SZv|GovZ.++w幵8~/<&kkΖ#ZNZ2jOFiiv#/TiF5{]nEۣ?_
N?_mkĺYp}kY,pCwX<7dq?T̸'hRUJ1
\ܫr_ٟx𾗅+x[F/QU
eV12n#3Ҕwi7o4m!t浺lN{KMz#Ե=Zo &_q5jYF:R:pR+'w}~2E&¬*(Srm(U"aW|mCZjmlB͵#Ty֙j0aOw,5{a)N<]LhV>+*$uy)
pOE&w^yuؼ2n.[^]W'JeM\R)Yoן&cƞ3졋Q}NZ1]X)˾>鮬{i!h
РT9NoW~Mk/8 jY^̨U1,F&zXQ8ɻs'JQ~rrb	dێv8r2WWP\Qi7=o3mrW 36g /?f_}ρn+ggiU:߉|gFe7 ֮<RI>4K\YeJg)+*ΔjJ*i{+29^YJ2v*QVӕ(Ǖ4&]ſi/:֗x G^ 4Mnx;~>"iz7,<Om@:֑/+O Yn<[XlHpXo:+SXJ7%JxYJMьaTViVakWT˟mw*1J|Ӵ#;+  xK@ ~6l?kuks{Ba2<?}XEgIFVZ.t\U֫TS|K{Z-2tqt(5^B#.z<$2^3wկ^Kkuo"JIAWT!\	+W.oVߦ$㽓?Q!|h<_WCokm,$׺VEoM=?a3^ug$߿}kۥzi6AZJ>K MY|vquO3}9}g-beTU0q_Z/IUgun_
hʱtFjҳIAKj/H?iC/:?q۲Co 3B׾^W-u˙4뛫'Z/>󅸮Q5R	Qu$9[=Xhn\UG}K^FTn6T~5~ߴ F֡xG[:&xF4;a[.H[{9X'd9B	?MV*QR/~]Z~;keiǒN2tQotӺ_+P߳OGGG<<,u]*` mNi7^=_GmvxMFOC4٬FtINJ	W'!ЫNZhZ"m8iR	$vn>Y&^	]5[=NRmq MB9B2@LY$3ۙm%{вڴ剧BwMIJ1J	E&RI/v g{z*tѩ/gN\qI-өoOo=;F|5<8hkM_Gm{鶗H$]jRIGlvvWP^se+T:RXs:K+rJvmIŻ]kSt96֣v <K
|i:׆!c➙6[S4Y gF4뻻ZfV7da8ϞQ|M)M$ySvolmkuwω bo?>y1LmtO!xgR[_j _ xGiOB%H [w\o,a^HҲm]4}3:Qz_sM>hԾA=y'ՃtܪC#<kj^z7ՏU6Imȧ1~H{Xeo%[+iF.۸s\ҳM4U5qZiA-y]a^Xm|3	uOټ?~ח/Fwk?4L
[Y3KDS;L28ZZ 7~oL]v{f~8{kmllk&.$XI2T	!>L)_Bpe
Ihn~/IkWҵ5%[o7v7VBUUu-c5ڪuo=C_A\5ߖuUQk~OE&qmicoZAd,E-|;
ƭЦ\I{1RwW0e]0y .g%ۙ-cEIDC|fQQ]o  .-\"I=o}CIנtqy/چBr-n`R]`Ћv!~YNe8Z2N7}msy^!ͥ.tcqwb&=-d&Xn8>.:iID =61+NZi{׷ݣE  ;  _&x5VwAswdIq ^A=۪La<?z/
18nQrjNޓkaaNpYTt^Z>Oy[3ö\
)P7<zd>fw%VM>ckq	Шju3
QS\kWNZvp!JtiB1r|զ^͚_+h>)NKksJk	".zM<BѼurZۼm ecA:ڵaZ;q*vkJ]RS$}f8,OA^9Q%ֲJM3|o|<><CxK^,nA<A+?<Sw)ƥqh> OЬwp}\m"J:xu*U*{Y5Q`Ŵ^N}3 0>(a(`yRP	IHUFe k/6mtW-.3	`n'y#++lf1ԛVnUkW- (Њn_ʽ-wEk	ͯŧj?`}R/|PY4&Vv|kwiixN&Tx[X58ަ2Kl}[F
gV犌gZ%%Δ%{IlGɿ|mA/$vkZe2[GWԵ`trWH1\\IoA>mgOnK5{[nIҍHө8Ù8+="}|⭧&@ޱ$w:̳Is"^^Oq^NeVGFy+k?)`<*bQpk6}??cqy.ժUI(+K]K> wVoÿڧ]&OzEZuMo-ci}/{ءl5 $q<Qe؎ͨRRV#JIuZ~W9:cWRaY9JkDm^Vx㏃5]~[<>3tkjmM_]׷vK3ZE`{0.|	|I{Mmh'd+TRq	NRJi!O_)976 _=|4Ҽ8<Y|1/ŤռmmF}Wĺ34Ϩq0[b(U)jrw}<VZ$}]Zޜ%Q
i[݊VI՝o~ ||LoY$Wot 0k[z;]KHFx^z>x^:/ⶎ
gղhQuS%	%Jn־%==JSP0aYbӭRpwDԜoƳJllKFx~$O_ᖝR3|k%/ Q6~t8y~ߦkwZ4N]U~n~/	b).&X*4'aVr9SkLexIECJJXO44f8CC9|{osۏ
8?~!Ƕցn~(|U"?:/l|OS~[xcz6ZxSU[}tIN`J&F4F߳NRՅG*sg+^ ץBqW:|yRݩҌ'dԩT4?7 j~<?KGû 7:W:&yG.5n5	>K{)ogIGyft1,ZjU;
PqS梕$ڊ^Ǎ8SO 3eJ1z˕4vW7-4rTMc-#,8.#eH<6Ii}S.1VI[T\H!KX@4̱H4&u; n^oNs~|UBG|b	Kd]LX)}_0/ _PӏCi- kweo!W|Ew&" \:'(	۲sBqᔖu#L/ /;m5Z23-Ɣ,Y#zh.^ݴv1(#%,4N?5]]{VrҬkWg{-,}j:BlK;>q71]],*%i^;oR,4a|B
7nI;YnٻGKcVMr/{ݧdwkuZ;.h7VQeZlznjvVڲWwg~CYu'F(ly./R)6SR\Rez'4ROig+$wuK $rƑZ㶵*KhE V'E`B;l9B&3~kߥޖ޲y|VE-:ei#ev_@S,.J-(i˸R}}dԺ>gJ\m[֦6qm)%dڟ?%*G/ʠ8E~ov
9b[tCQ?5fW]CWH"Ppv2TM)Ν.]_'g}>w"g$fץڼWkk:=X<[Gu xLa4[}WIId~*Ha7kO[p%WZJZYF+^_/@Mds+Ւnxi&^{FX%kAym^_е9#K\t[MU+[wx#u٧M4W<^.-M4;4+[=|~| ]?5R_񖿥|4$֓qsaEVڥO|o6;QSBzN)8I}5<j4TNIc7 j?ת.ψzIcZhŦx>ZI/hno$W2^7ޡw,7JnY3)=#se܋B[82A7+0~`ҿ][!k[FjXp\GPH8FQvO5N_o!kgC~i/ 7JǮ0;`z߇qŭ%>g3㾏7O:g~k?<CwA*mP,"nk<{k*Qn½ӆBN06WݮtIj'	%/0[{?}oH6~;_*\}5L^pְCoɮj#_\u'9ۓnRnD1:P:tMoҔW~i ۪+CUu Ubϕڧ99`Fc\UFvzN zl<_h_x PMg{vYb->=х7Xa ttge1ٝ9b)ᩧVyB0Mrյ8jRNV|h=OmVGk^>	TO,jKSź/p.?4 z:ͨ$9}Zi(P%:}OxS015{9a.[JVN?+<{O:ڮjZ7h}ܳ}k 9r)1Qyq	8:urI(J˭aBbͭ~~˺7~ ťYubGhfto
wK1{Kѽ2iMa/VOT}wkpsNqU|}mޚ cL(.DZ^vfaMjԤfl$XY^kz {yfĊc2~C+ө|pkk9+OMyQVmouU76~#eL?e

M{xZ-~SagV3|~4~}߱M:71Ⱦ|`-cc/'ۿx'ƖpB%-ֻ=5 e
iW^OeU1AJ;FVTcy)OTi~T_2lʥ*v,TiΌ,B4: ~y~|k߳~"k. Ƭ'SZPΟk Ay}C?joc}6Oi
B>Uh)ah4Tn1X)M+6m]/<v_f<_1Egg)ahRJnZUrWV4:~"x⮓i~MgIV:hap2vvRKXg3<FhM,HQpB*煚Q|jiPXd=nIPrWi7;G:Cg+[[ wퟁRK_]Z8kxCSV𵞑]zsXEEԱ_,7=/m,D5$*rU"}R5(NUnJp\.+khլg
3oܿxƲ5Z0_i%FM=
[۩м< \qM%nu1_.'9Wj84 {VYm)˪G|M
X,rϵJ-qRxeʚz$gW:t?It?TMt'5/mTF,n,mӬ^H~ѩNT{IS
Icni'յfMl=jѤ8_u?_';\*[M/4FvmUto%Vš8bX2'̪d'N$`edpQKØxQ_*r8E^_~]xwPX!y,ZɍnZ2O0d\(MEG{k妞m:J\'m~h^-67wF@L(U X6~0W1Pnn/u#m|O|9@|Yx3O~%G?5VJXWů˽%lt?R.o&
@$̑kӭZ/)c$%:SgB14f⨪\鴓JnRZ^ٴwQ^yJxپ%~?$N/HhX]c_f>ͨDbD$ej.8,=Sr8-Qy[mbj[E[~>ۿqK|jԾ~~2񅶝lwKu*ZIZm"no6m'oXzv[m|K biӝ6MfVJJJHSH=d[}	~'_	~!y-KcN|Mx\+Suxl5-:)'cZ[k2^qpʝL>&	{Us'ŵZEFU<	IB֊.Hd_zo͉-k{u*$fIIoʲZKNQ'd\v[qFШԔntU%[864{Z57l#K`7"ڴJzeUK]qI]so-{zoT~>27 )W8E'_c[{ß]Vv͓1w=h؁gmcZxh+^Dy}:ݺR]%G<.>nWj%'tN	ʹ} 	|O<Mh=5=lZum:-KTSF=iew]=W%v9/>A݌KŸ.ֺlMY=,6bӌeQIF5#&nx|1Eݷ|AIa[úe\Do >|]i7sZ<
,;6	oߩjSܦa^*s'S:_ܾ6ެq8Zl&RJ7PQuc$Wu!k~~&[xZƲG^CѼ?;{[]nCw}[}Nvϖc}ZuHKxj5qmV1PM{NXڲO[]%{>:dTuZ7m_揂tY_agi!3WcgԼEK]	=;R aѴBZy۵9	yej9dlꫤ̓qJ۸W0GJzWoͻ+ח #+D𗇭{!$j#3L#BLz|b/uGrpῖku1ؾibjʤRRrIڂKul{SB~FkpQة;Y9(EsIExN:<*+Ly,DƹG3(kxU0ji&ѽcw}\d/s0XE^j6&wqJ|kiM5W?$?lo>?[hz5CMм<'࿇?&t _ЭvX.4m2׺-v4ؼ?\j)*9u9խ;禯uwĮOs<Ts̪RjR4PmsK_Hö<} ~$Vumg7GyWH5MW]N-7VZ5	llOp)RªRu)R"<
9&i(5I --|>W14R:T,\yՓZپ5 >~מ1?aV?'kڗ}3oGh47i-|?yRxmnc00xia'V4c}_ae5̚\%UuEt8Xl~N~Ms5ӻR医wsg/OX<G:|o+[MžwkZ%F/,uh-gΰ6VI6Y.-%g?^*SМT֢ӄ۳ye{ut1i}]IR~Jj'Ѽ-kVyƝ|FuG2E}BSmn+KKQO2HAѦJi}:z%^*
	k{?/'%(~¿d<y7s`A|F:b#}gGn5-'N} 9vB,5OIϖ]9lwiV?Nc#MWR/JRS|I//E=3-Ş;cwV}wZ~qOE|uIԼ!\z7Kg:yw ׫B\TFINtuϤiݧI'2u}XMZܖ{'$ԮUu~?=?lأ[{o^M׌?oZ2VSxƺֳWz,'A5swicҴ &gL,N:zSrAV!QԔ}]fp,^x{W-}.h-t];K9:&+g#Zqq3Oc sf.(u*xztpR0妴^vgr<$ʝ{O	`j\%~nOsZ-95#Zkyr}^$ռAȇ)j	۟)8!Cb'OΜ5A[_wg__NnN8Vҧ5K|3<yRio=@w'D^2>W&]ju]-[s^.]\I7vs)i.qn@3֋ľ*,|IiԄNou8{[{*O95WQ)N?)f[04EJ"\dBRh94JvG8\W<O.qU#u'i.T*rWI?jύ&OkU]"5j=3PAoZÙ%|Gw~OY @խV{?S͸Cl5Xf<][0#IU]0H+޽(Tp,LN>+Q`p:o*Qj1Q):h]<1-s_|"K|)#oS\O|nmoNn";ŗkcauwY5>i*\Z%Jqsya]RRKS-^jqIԠ	6$~':7Uv:XHeΟ5*QZ4png8ݯ d =[o:<YOx'IlMc޳-^O
kn?xv{M*BKI4tIF3rRԔ''{9)s5f-	ƭF U*i+Ŷ[ŧ|'a O޷⯆Z6# g,𭎧?>7n4ѨDYmOQFg`QkR	)+GZ=ta}^SҽtG]^3wnxNJ[d Úͪ]\~)e5%j:-2&è^Ŝ0|ԝ>^ufFjp*ա%';Km]}	kpi~i	&x0]E$͗ɉSf,1L_udѕL<"t*[Kk]/>xf8XE'iŵ칯gyMǄtiᖏ⽞XIxgS٬<uk+7Şd6H]^)Re .cOҸs2jN*.nII%Z״o{&ޞ1RP0j{Ό:wʍ wM_TQMn*jO|[`+\+¸ڪW?}O)wF1J./k;b1R޶*oMu?|9>?O;u[Q^I5]`H.<⛫{{),,-Bp#:|#Qu7V8'E4VF|%JӔ_-K[{;w:?|/o}.BΥ.³ZZy7KGOc|uutVwZDOխV98niYkvjOُ>)eS [eUƧMuKU	o2ܰ*\0/ՍxSOVJNQ,~\iV<g>|eHqP_+mx5m
El;pTh}O2^NikEN[j,Ym ]O:|%m:}У);F@M~'K_K1MaIZ5?O8[|CG/_	#kjoQ}#I>DRrʮ#R1E%1J2^;#ΓZg:t08o*؉NqQJ1r{[ٷ{	~y{:~+h6 xs^hzx?umGXh-F[Ҽu>)Em,˱ubRW4	FV\wmj3N#Fn?ueh-6Jz577v/{v៍feXyE1v@^nNG_Mϟsҽd->|f=CR7K j{htkw[5Ɛʈ^|H81yq(<UjM[Z_k/)b̿}0#zHx``kvcdA2,f|ViWN5*S
qwN%BNA6t?DɳZ8
3Xi+Gk;Y=Sֿg1wj &ëF%NGnW OCީNU ӊ;jVk L?XRKxm-n&%z1qE$n WGM^ZOyVĥ{ܻ~DC&}~\chz뺦2JU8-M$mkf\-$ֵ Y^drHÚ)E]J;c>(G1͠f~^)cԣ4]Bm*L՚O4:M<a-^APomԊNUnIҍZKVtP;8+Kv7}gO$^.ME.4&y1׏g;ihX#dʔ1>7{ڭgVV<:~hSTҳd.TGWzľ*}}Io\kOjny,˱"TtJb+:uRەIT.-<|},<(qU(Nde/zZ36Y[xZ?R}
ta&MS];V,&WK.` BW|D׫{94Vj-\JMѽ릭?>-r
	Usu1VeK+Bɩ5OTYfYf Hkn.Px TKso4?Vw3cCj	ݜ=wDbI>kдiZYK[$[xPª5؎);|VqqOw{߷Kk鹻K vQ5{>O-I.cJ{34gF..8vMKjWWS^Yeica@	#"$JP+je[:E6mzypъIӌy7++&_|{#:~x[ѴM'Gkඅ%HHMX-,@Xy}L-bgܹ*7!PN5ZҖZ[[g+~ο~=	ihg];ՅԸ;__ZZdK"(Qf?1Ǻ-7(5f uWG%O夭FN.UuRn~5:M=b&-1y.V%9dVBϒ+ʁ%f
|>T\E7}uh琧,MU
wk_jQi$3޼$n"'ŘB"?-Wc3x*rfR5k>z[f>$g(nqiJMǒֿ2F;16]-)2j:"մ%=yltH|WjaO-qqy鴛M/MU<#BXZsԩ*unZ7W(u.MTl4NO[^}WKg>|Ex2uàx6 S} ][Ě-[ZE֝[Z\E,m)7mF;-aG0WN1i$is6fv?G\y`c(aNk۳lӻSY^|
+x m98}?OџNiJv:|V+;Rk8HSA_qͳ8Y>\*vWrn}սY՗R`_좒֌l}gk.oJ0#bZ #}[7v$qFA]Z'TyKQ$A1,\BH-LlۍN03g?bм7xⷳ4}GX
C4V:M34JF)/jySN1DӔ -* ~(6?-;CYt!Ax~_.xk8#Za$_ZwPTceN/Wr-Y]:t?E}b)Kek6MU?h~iM$:?Ej{y'KXioI01IZ譭iʣz;[٧K[],i(&_5痒 &}]= fNԚGcu}4Fk^8.sI潻\2lr'I)Ty-)+y5r&˕$ݕKBRsW}mwX?M}Ho/CS/ k?iӍOFյXZENeҼ!gaXX׍ݪi1G,=,]Jh8TSOnZ|e(ߓ{M}/ON:S')T*n뒒/w+OسVA4 %߆AQ3%IȦ-|aoGRqBSZG|3u	೓Ald.Mq&ys_2ۓVմ۾)߷+^FtEsf<PR	$	Áɑ`EZ}t_s|N Yk/?dX??4:l۩J9Yd_lc"FF]v}/T׳އQmK/"xsku$m 	oJ(eHLï<s$Q4U<f;rtK^5gAF&5f8gF>vի^U͌7?h+Ql.fT4K,#	wfTEcdk/0rJwݥdnϿo_ٓ~'?|?xS7s~]E/t o:v>UM.DTX|=*N9r04jމ]gW,0#T\=X(Ӻ۔Ug{u $jQ[^W{ėWWbVVWsI#N$r3n6_ dj	ST(B*P_ڷK|ezcj>Gx(7t<Uɍ)P6e2A~KaP7JEQYJn-BkO7:Z'i>G_OK%tx{>gu^i~%D5;S[>'<A-V;@nP]zŖwM=9R04#J\MMiZk0Z#vqknuv6(	23%Z6!N7 2GlVn7-$ӣ~WW՝}c7^Ωq$P[inw]O<)gY`Fv$a9Jь6ޟѣV:ir+G 3yIdI凊,>5Mt7:5aZAүt?
-vmB fj|PclһD{*Me6%NͿSX}9Fӻ?ط  ߃m<5}_}>e'<H#g:ndSM4:m#Eu9ʥI]\&]˱՚QbTbRdvzKk,m4d7drGnOyʜ#[֭5x馺v_t;aߴc2<@p(WyG-_f_+T7o?Nʲqj4C[Tj<dշLjO7o|&ԴRޛKVx<%].g}4:X+ckw |-G3pM(7+;]}e؜*/%*|$ӳi^ͧm
"?<gx_zVzwl.Q5~%1%D+%{l/=
*劔4QNֲN[k2󭇍*s_4&)y7	}  =fH;7vW@VSG5zߌFLFȵZXoTa:1p-9^'WkQMs]tb15Jh[Vշf?ԣ@ e|6W~喙<1:ōݸEC.uM6}oPuz-}z^KfZqގ/IBeR*^%P.\ޯVgW `Guڗ	K_.G
/>jŔkyx?Hn''kSuHm,m4}P狍,9c5%(FZV˕*78_\C8atQr$t.ovV廌ϵ ?NjrIϢ}+kc-:m$&6[fYR|L1ex%Vͼi?[VadE:j)-,I>k}Ul0R6ğQ#^K}{y*rnm 2 W^?hpzg+c5{'Kx:yծ%ӕneԐ3iO
KO|׻,Ig}gdq:Y~'-`C4+7*iF>iO4 X>__WMu,uƾ~5'{mg_VPЮ-T۶i~WTMbxOҎ1qUے;]ɩ[M{ *BNSZ+(Brsq\{3WGhx/V!uc>Fд5?
Xx/c͍Ԛqs6lҵh,:Uyja`.NyS,JRJN>lq,5Xo!5'Qs8?_c㯋~.[h|Yoƾ*ӭXY]KČtR77IqZ4qjt!V|#Y&N+ֻ~W_iNZ*웺tjzlvkv f+&x߁5x{]ӯe\uE;[4 i6s,y qU:"y9YoϫlysK촏^inO:66$}PFl*N#3Ldi$>l?U֯Zz9k{+ݫJ0хmS7ֳmgn-M|,CQ~p!Yh$:YFKꯪm]MtCSNe%t֫nc菇<5a}=͊^o%I96niXHK|(u1
.m+'n8%7NЕWI;4Z*Gƭb-JhLef| Yz,nfkn8˺(.+>S^啹_;[O<\0N=.gO4&JQJkd~K/?aB>z6^~#5Yn/|+MPǉ</x3	'W3lW9:)KNnԽViNOw>{%FW񌧅F#=4p9#fmֆ|{,}~:4]*|99k"T	ae⨴&VQz,Z:ܪh{/yVQ<%i$BZ>6 ~ȿ ki7~9E !ie0|_FԾxE>|GOíA\J>CuAN_U<m
jJ#W	Zi²wdjx(c2T1JZ6bSr_'%$WOT >!/sá_sZ^ -o.de[1>ɠxN	KVJFIr.5VV xT咷R=Sztq~0'NܕnⶔnNK+'|;eqޥB9Sq4jyvQ)u5eXQQi+e&=6vq,d*W[$Z;8?rӪK7= ğ5[?Ad\GZ&e
OK-cNb6s<o7^1gN~Ά`FމMEܲrw]ϰ0ɪIRqK6IZ*n7O	P<Gv/xc?ȵ
-KZTū/|&xSNU3ÍүN\u)RNTMδ̡
XiSeVIt<m<7ON5=q>m\Ӗ*ɗ|{q<
5׉#]ߊ<-kߋM+ku¾?Z(u{a7n5_ú߉Ck hp
1Z!e%zmߖ''.K'~Wo(J#j"O4չuOg}tV??m/٫H?k'mox~پ0xkSxciZ&Zֿe}gŤN}J,u	fgӅ,=8RZRrrnZlyyOV7	CYb'9UW!j[riYN _No_6<CĐ m|do?V TӠB/uiRɭjz9gl^&e)')rҍW4 +e
9EA+Kw9^0WWuɪI h<!_jwkgCq`[$v?,Ż\4f!I/csJt)G~K4˲?yeWe#Z
1{kk2V]G_m /:i̂7ū~4B`wB0t?T/4-M'?+⸂IN
RuhY)5eq8<h׏5%'zPwi~' x'N7Z-ĺ玵|gQ';[{}KgkUh:VHҬNR.SܟYIv$? sLnw˞rwJ-ƅ
i˒MNyI9U%)?l]'ZeX>is:VgoiڕF NkK>)siuApRHdg5%%9FQwM7}i駉*ik.ZJIm3;o*~/^\"~
M}3v25xoN{i:2j~𕶗i}fKԖ#깆2pRܼq*ԊbܛV|wP'Q8-e$R܏G4 _ h??4.,|whVֿC_i554lmVwrX]>;oc	֧R(գ(N]ETRM4fw:Ui¤)r9'Ԃq~)I;.~MÙm_t[*x;ƚΟqƥZMmkwcK+y[Uʫ,*ֳO_|[UP|¿oRyFZ;M鮯{ )_IV ~ZusTnYT[ڏ7C-E6q}[K|*ɵź}SJRTh^WJݭ}.aϒ1r˷2WvKe}x'Xg4U)bQ$i$p	SB2Ҫ,IIe5svޑ}=G?7{U|7{i5Ǉg~)}|1|K6X~٬jGZi)%˻k?7S{Zm;S]U!͡fqY*k֔]*TRSs:5gN|=ܧx9YG<2mBUkجx<|MZ)Vu:iҕsƥJj_ɷ2G>8 ~|oěF[_cyxKWK}k:t.=/{Y>#qV7TLEV"4э)bU5̹bL[dA>K[/3,ssG:8aVyrysSt;{eoقrr8*YUԔkg-XNXtj0|i4Z/=m[i99,,DJbڕ冝o˃=h&^A;Wql%Nr8+SVm&ڳ&ފʹ|0X]iNn7k㶞z-zwl ϭx0е#l%ⶱT>tUNRÖ́d>Pa:+<?%,_GMb1\!	!f:1ӭZaTrS0/rXn>Rˢ'Nn1U \>h?n~ɪxWtEsV0+z_/HF[Ag'|BWէ)8a*){HG&`kN2&Yf5;̞.R8j1Cȕ7*1*0isQ7FΆ4ۻ3ZV;I8on-eu-4/N]Bzk\ƚ!)Ccu5%:/bR<*j*N:󏲍z<\6.eR8zͿhJRTy͹U)Jre*vSák  cP f[	x>:TĿ|mI.U%}jO I/h>^d%\U/g]>h(F	N)u#nϗQ`se4o͸iFN_xߙf5x	#Y m5⟈9ռLnaG?w+.c+bzL7xYu쫝Y,F3RPg.M*ЋoYњSJoFQ*n:*Juu'7}+;ƅ|3[]|5xS\(ڥgO@uV#D^.0u0RMҥ(W
֔۵vqcpՃrRk	ܗzkNkoE#⦍)mo4-7͖j:n<*63YTlNZ3Vӳcv8CjQR+ݫ+{ޯ?ٗYW|$ŽgLZI-w,dGYadtW'FpZQnvgyd7<]=bKE{Ajh߱Ŗ?.kcGĄ[-\\¶/mIkZ&i¹(¤iS^R1bmiuj0SjOqjs])\ҧ-4dI_~u)C*'=&elmo/lNmm0TF6i\DnsuYfr5ms>VXF"BKYڌ%Uh]]jГi6:WeսͼG5Ŵ[$Kл,RG,2F^9E%YX;I5K= ZXz6GiwOO(   g/ƺ΁ǈ<? }[NM`'M.	ML8o=\^7)ޣ4N{Y}tݜ+W3jZ%߿?"54[BvYbU!2"2̷Y_޾K#8[0sAwnWQj_Ow3RiH(Bvn;tjǗWr,5w>[2T9%ɿW_~=|0_|3<Y x^=wUzA"h&t*VӬZ:S7O%X.8aYIT7R1n-Y{ݻդ*?xYgXҨaptcNc	-{G98)N˫imo
jzl麯5IZ^C$i<3aagw}+UxI}^!{k
[%v[S#Z;	я#\ڒ]9bwW{x^-N
X~+'ԊN2Wk%Y߽$wuu8.Ejo,TؿښQȻ|=(5{yL6Or6c_K){EN*mHlnEk{2sL޾#R5*/vNN7iJ4{;}<Ժ>hwVUͽݬ-2,Okxvm˘_VENM(۵Z)82bUE\CjZ2攢ԓ撌nڋ4['kGT<+AӬ|7;춲WG+/5Hiw\[D	Ǹ;jWN%iѫUNIrF\X4iɫJ2MsN nq4ө*n狎͸Fpm?h?'<EwBՆi 6Wtum3N{O[xV-4:ݝsZ9c/iB;E?gwiI^:[osƸ.+Vp*XS)~IEDTw26'Ji.ៃ9<omcC|YW2pk!tV9mB"QjT8O\YWn)^\BμiJ*0Z"r~Ϟ-J		;)߱ǃ<qw"/8ϣ~;/|񆜍/iS?_kI&qzcIc^RVR^|%wYjS	^7;M)-ԥ8PFr,-G'(B>\M	'?eu){ДOh$o&>-:Ǌw%~ O(9js Ԟ|U|e!TѼ-?:"/ZM줏V2q5^TeJNN-WE8T$^vRkeףemYSCRX\ړ^Up+F5\e	ԡ^HkIʇP-1:>#<ĺ|7sMsĞ#|O}<ij~WޛK]ӴԱo,/o<Bv~qJ~RPѾDVƳhЫUuyj	%%k.e.z~~H?c_?o|C'|Eo<'m蚆CNu^7DPeuHn}:[.ƕ2a=~]%Rg''^QPWIt|N#+x+ka(&iSگ	S]|A]w Hn_Sú=oLׇm<o[&ip0m"m!˟ci}^68U?;j*m7dm]{ݵK-+-adﵕoefjlXi5MGG_hp	$^0{	R2<ftqQ7]<I+vڿُž!:&Ö]Ρc<'{BȠ][^4ˋnf-'UrN7o_#^?i	cS8KӦm0EY5a",vlg,Dnz]"޶|^^^gп29ľ("h^h1&hN+D.MvK&(<(ӝZi~}oz%uaSJ7iT=v$s "}++ǿ	^kΝ 2:8ץ)ZGgc	7:^2^Ο+J6RswMl<&
ujEZ[g{r]yTﱸͫwI.${8I]OOrTAի$9^RSn trTMSFJ0$F?oo 3>,cc<O#<kM=nO*˰+n
|vkOQUeNNݚ3K>(hࢱ
W<Qc'k=lW?? Q__ϲ|8u[<kF=;ZKW"tX7Zi%d%TLMӕpXuդ}֩]7WgkJ#9^ZMhSi_t?F?f%m=cF/HgxYFxᮠG|/,]擤^:s&76UQepJ4ggWN噅J<TWQJ{ۣ?o}C=ׅ$ο{%AԬK)"ĖjZdۅY.H.ln:Y捕'
ZYI7}z[?-l"ҽնI?u/B[H,5[ el	)yi'{Mv 3\F晓ܠWe~S]UN]C
JkNROU <mrtc4O,s%<QZ %8k<4wmjJ0V׼=«m #jg="K|"KL46w$lAmoo	4#7Fv
~X)W÷f)Wk$Z qS;FNmd5|O+>1-|G(~*iŞ&յOˣ2xIkk-fo"b?K<-9 >ùa8k՝:IE.~]\[{^//Tԧv录&AǍ'o͟|KZVD0NݦaHe2N qR#*rSԧNt'5~k	wZN.	(Vs!PL9ԦZ]UN6Xu.o%s#u^^g泍Eui[Fsh޽#u+Et}d<S\^ 
-(%-#߉TӤKkk#[cZio/%f[L+Ռ$Srm57udwm2E m_~3wo6⩵MmUmGQoLnu+UMhzZ($frsXFtI՚ y4*Sn߹QZ灯m&SxJ2I/~g\ 	9Wz~/Uе-+JB)Us>Wk m[OK$^]Ėee<eA8,B)wse}]ջҾcFNPiEoʭv-"%ƌz3Ą34/wG@Rr͹;=Ws
1RRZ]ʗž Sdvo\'*X(B!61 *JVҲ]n [B3j?b~^#֩'ŚMG>|ahVux84)55v6NnY]z逸,<F^Ҝ&ڨ%ʹcv]J(aG/ە-ho]#qOPg/G5  Y捤\_~.&Ѯ5Ik=ލ; ӳ Kvw;raxqW%q: i43	N:5)%N1i;5}W+o_7:gud/xKAu=I|ZӼ_/s ?oAxG@|57Ƅgy{8ZQu[c}"~\=:4U<V&SIZRaIW:*p?|/_|e5mi^ae<9ؙۣj9t\[Gji8ΔMjQp|-YV)Nu/)I^RmkKJkt~ݟxFK*{]մBHK֙}V4v_CK
{m: /ϨJa'+#g%'߽N-1eI8FrNtcz*[M:ߛTɱk=	| _6:𖵠A\'7he5.:1E]^_.IeXj-sB,W$j$[IBwzx9?}ÓJ*[$֏W6Z 6?>	6}fd :ǉO4wx?^[M+A%M?RռCړqn#x9q4p#	5ZKUrRw.ܱN=4=|]S^3JQ߽-Ew\]w=* Rk?'5մ63iŖiigu	M{b}GZuK-?"ݿ	JyuYd:aVoIV'9?r?fI>K 5 Cqq}/xcOWxOω: xĚW5xNw5[{#>TfŔv>,s[)WPie]MZh=[J:4)VJS愩AIͪi='+jd_ Aj?hߵџ|]ŒA\u;U*aN4R'u0_TOBng67qN-)s$SNb*079ҨSZioIF2(&Ҩ. t?j?=lƧo}}iGm2g{qooIQFr0ϣKH43[~3rR:ThӒVu-[.׿m~՞6~vEq7mt??J~'5oXĺַp4{+=CSo$ɱC7SRX
;^iYB-6z;#5̲?jthIQշ7co{/|{/?b%<c}xB&G?<̫[m&?uʟ+RV4|#ð.Wi}m:kGKNjG*PJR\I_ݕ޻>5|쭼Qia.巵w6ц7Vњ:&f*z$r\
uɺJgBﲹ.:UcV9]N*嚺ݟ߷-t{mu]{ᖥ7KksoC&isH	.dњ	t-&YEz7?'1J\ǕFZ>VV{ss?Z7ѥvխבO ~~YmWV?|,+Lo2/uXѿ5CėIRNo5$fy\.]QȔVD)ի6vN)F0 <n)n\Sau>Hߜ&Q}[m]uR$([n2BbKYU%$֊ףI;vj֌`Zut]7鲾־LJ+
H.\¢#ihȁT=p5(#(ZI]1M˩Fz_Wktj!ͷR<;]h_~?I~ŕFTi\M;ii.ug߈4fZᱳF#vU`)4I%OL-b2d}.U<-9.^Zs_/+nm6?2=cVt/%gHhMOLy^+G2ŌepC(d)җ,c\oZg2ΤF|hTԪO.k=->uo>g *w*t`FANF#W%wo	7$[][t~% R?gπۮOnRS(5{X4=Wτ.<E-;WHռQj+_c.JWu)Uy'Jgdޒ_msl[N`	>):kTydM>k# ÿ8>'<QŭGGEJ5xoA<UijjC67!-^o~9|{Ԭ(ť~zqJԖ۽վʇ$ܒTIKGKΨe*rY՘@2||6>tV̠}=~ӭ|n2'8ۗ-M7KM%*I?Ɵk4z?tiJI-xGqLzEӾI<SFY>%ZrW]kUӱ׃ZX[WtF1|6?4-bO<Hrʤ[lcYvf@ۏ5~=VYپzu2=^ҢUx19tW,md%RRwߑ$i6}vi|9Udn7oKFUDA4G\qN3Z6'wmo,T9ދY7g۪ׯth߆|} \چ~?j6.=6Th'oŠkpks}FQ8TZUykB$=JMiʝyIorET[pӔ *vˑ;>yr?jIsJ)?>(.;Gr`{BS\uks^ծ}Vy幚GomVcNSm$++med[rnяԖ)KH[M>-^$A$F|=q8(8}[r'ԡ'>oUNEiwzt͢ #O_O׭uu58R?' Hz _-k uzo(CĽ.S].oŝ7zx|Zꚞዝ)}{-]X)75էtQRj6 cyqTVZƒ8w.eFNQW2ʟNڛI&m5-[ºޝok\omۤL%VM?QӮSڔW69c'Ƽ+դS[m&ѧ~8ӇV;	jUʔ]۲iݵ(Yr3/j.aZ_iybzgwo50f"jS*StjIuN[?j*VR$?vt^_m<y"Q־!ߏٞ]z5xྦྷexIuxV&l&4m)5wݯ|qvwsJp^7*xj7g8FNR.?R8ѫ^{LeZ~\}JwMmv}M࿅?>0ĽS7xڇW/ߌuo|<ѼMV[A> %]>񮋥+PoվK3.P獩ao:N3WrΣ石\7ZQzqƺ=cb(AI٩lM @hL;6M|md|<[G>2G)z\'So~iXiV]sYFazU'7RmT׼)򶚕βs+'/tQN\*'(֧.KYFpwMs& pdP}Gſ߇<.x .5m;C&N6^x]޷-:ixrT}%w?PL=Ar	;k^YY9vo+c1SԡY¤YXΓPNT3%&_[ߵ%gzԾ'|F_:̓۷<U-:4}J:k[ΰz&C5tNN]|6IԭpiE)ulڃNFJQZݯ'	Gᮑᯂl<hmYEx[߈<Ek2N ,zꚾM_Om4imԣB4*t5.d)K܋n$Ή~%qxLXnz
$N.ZiB9RNz_Jopݲ$!pIuFFFs+u. Wv	9YktmvGBKƥv
!+JprWֽHm?y'ھ'";}x%'ܞԥi>[K5@;;VZ?+_i'~ιK?Gdihqi^o6&<]ζ6/qSwԜUq(A{rIf>o2ȡJ'2Cjr_QmsIIr̛~b|I񄿱i}Y|Dcx_^u;\<1KZMݶy&e@7:hbgJg+[W'{4һJ[{V_RrVS%n$v7+A\' ʾ,}1ƿ ҴZim?\39mmukku+_x{im,[$}m)rꥆniͣ_^	>iY{  ";H|?j0A}\ mXy[]n{7$RгS_VjVV\KmvhQR3N
4tQ")#b@7GB\RTeea"qvq5fv{hFWWj[c
S%׻?+Ė ntO.ILZ̮Z(Y&KcrXt)I-G5JnyW8՛)&uv+E꾟e!&XчR˝uPJ5:n46ni鯯VPEM{9d=_Ǔi~'Cx1>4O׾.VmA|+Yx=Α5͡zOoum?LTմ3^g'TrPqMF#)&ԧYA&#9Sxʜ*%7ϊEr9FPN+rR.XN/]ú>oGu;J<8$]LV_ڮoxjZ|UbG *dM:uk:g]JmsRMQJrU21*V'&i*XhƝva:qSe!̥RMIƝ[S?٢Ju?^j:+F>`q6kp լjŦS_j6ZOi^YoQKJ*uqx!sN9J8KCԝ4g*JXZ䛌j6OR洹jb+9)WŒ=ak;q׮Im&-Es46[+[xm帒hfD?'eosrJDRjQUc\pG:Wxڧ-rt2K2V\IU^c\#CWf%+B;C|6)KN%euk'~pTyU殭;k4>%,q ?x*mSg7C2[H(-h<՞N/$'edk=ۼ}֝j(Ӻwi;=&Yۯ _g;ڎJsqqus<:qa7~iaXkWxMjQezE<6Kb-
jM&pv~RZF:iZR3LVaG-Tp+aNJzէF:kXGީ^KPwv9<H[~ XI(+TKH/嶂e˵p7|5<ThBnSQs?5o6jR(^<guF:ܕ~ <W Sݬ1Ei?	]K=\Do5VmgX\ Hn7RV^qQuNzCpPF<<JT)ږ&|7;h[|COZ-&7Ě)b#<zZҦ.U/7!qYF:b(fM7	_V}֡[|TZTI-c-uGK(e|'獴?'3kFaioJ^ }-֩;۝;NTvZi ښS0u+;0UScʽijtEsJpP'˰7a3j؟WQPpĤVjs9ϙg |Da?<9.g,[MO|/mOx[]6G:xzOQn/WK%kt¤ғqZ2T*ܵ#:vI)їMK3-9ԓ

SRR䒒ړ |м _YѼ)iџZw|7a';oť[hfggh|`uʴW[~CMc3mԩҫTeRu+NxH);\k8r*fƖ6xUEb!IUQxӵ5Ji^N7q eψ?k_Y_D'ˍn)^bpi{o0Qx
TJUSv믻{m;>i:4Qndem੿O/;㟉⽲I|xO׷wɧxA<^*CˉGXWc28:Z'fԎ*8Zc-=%k\i 2/%f59n5?i/|1)a}WxU%7hD-VرԮe׭aԊsFt։9;}m)bxj|]KJNXF끓Zǈ/粗Vڊ!I_)k*)ygFֵRK.'%y"3|c\ޭd3	P¾x*\/+tVk-&WxGڣѮ+2\eZ!Ow5lY6nnne$ocj|@j7gkJI)s={~]p,RN)ߖR_MksY|6s{}㗋t)uMc4ۦ{TԮ.ͦ6B%Y籅Ɯ]F).|Cp}yZ_{׶v>x-%	WbRUcomխn~RF ^!Q}%}Ek-p[_
Nڋ[}6٠Xo#>Klf1$Uݬ✷[/f9TmQ۴n^Ѩʠ4ʢOx|eigW [9< [wմ/Gx"IN 	Le<֩mݍ/>!pckM!MM4RR5OX-T~OfO`is^u\TԹ[jkg;._$՚_h'W+~_|Cǈx{@lدQ˟_:6iznO^	಼:/<-O`*
P'z}eJwn>jҋvw?юu<l*/#ʝ5mx<M4i[FcU8UWsZd 6>~_c=2-?]	j?mWgɵ4߈$Vojviퟎ3['ð<9i^<q|'J"#2Oxrum0XUl^33G0:(Gԥ/kt)SQ|a.~_C²
XCy rXKyҮ/a]]}B ?mlE:IB*(j{+)[^닏nɱla3uY&Qe*)s:i^tT+{H?ߌ<Q> 6c j x;?5hu_*B͹fκף.[OyeєiBQPj\()r+wIo,ieX:u+ҕ7N\&<$Sj1WҟGث7 hW~l>]qY5 m̳꺑Үt26
5W,+G*q.[I]'zj*v}խ/m;/'ޗKwZo[&١ER4mjs<v	`L9.^JI=4ӑ"rM7tֻ?W?O(Qih' _>ZxGH6xkƾ!ݽƳ³kח}L_vDq(¼ZVY5:)O]~1̺Ɵ'kjWOiQ[Ud%i'yU &k.adwO鎥4ҲO>c?֟tO:Ŗo|Rh4QKrmm!;ٴxn-Jڋ	el[.\}J|4S\En[ut۳kueytqqoRGF M/(bop>+]h߉oxT!coxVC=s=}7K+-'NVSq唹^NMZ*=R}=xWR7(%.h:-cNڴ ]ЯuM^IM	%D>Z3ZFy@*ۥ6PUb%OFu&2rEfomSIK]Z]:a Y|.|gyg<wۅխж;J)n-ock{nǸf\ART}5NJ3ֺs;]R;u>WQ*yV6RPW4g%W' 1񏈄BL Oؖ.eϱ C5-iVL"˝(9<Rڿ߉qy%SڒQis^-k[Dk|f><{4tO.ohF@l,Z_Eeq+]- O[[Miڻ޿־\5/GH.'Y,TPd@۴qo-lgbeeSZEnj}{֦r5ߙ~~H$<1sw¥Frk%KxD67Zεat&Kм-cƟa%s/UඛM4I_^(ae8P¼Uk9FrWSϕֳecJ\ 'kv5VnրeejGPBB#AٝĚ%:wsݒzzaFh1^I/ :+	-ՙ$X>od̰E9hCqk+OGog4(	ἆ7FKv%OS.fԾ[G)^ilmNү'{ơ &y|.{˫kmdBkoNWwЗ6vn˵f*ޝIxs06~fCM>-cui䁚(pnW%t㾟+sO'=֭g'!#↫_)WKC<~־i}}o"vvwv0d[k+~gy,Oj.^EhJ	7(RۃoWS$RՍ;Ъ׽Fmmmm$k[Zڤ#G+ _um;[ӓR}̲nuyƺx_DsqQ>Tڴyag-io%50EΒ\ݷ7nK+kh E<)w/	Ac5d-
^!(:ʤ
JkUq`J1Bmݨꛏ^ݾW:e>zyQ\j2ufઞ> kYz*|.5--5XnKӮuauQ<3xV<6414W iSO(ú<LxPەN&%xSx(&i>Uy)mnn  O|yy\iqL݂nw~Y_%V&wHK3	bg{٦M/e3שBUQtIZ/&ˉ(bھu͔R3ɴyp
=*qֻncТԛM[;ZvA:^.uiŬ3]뒬oq/q+W[/ڥ^|D)N^JrsI7+p*TiR0rz?;		|; f武i-Xwdi-uZLre}\^Z=ȳM>,/xPOEṞyфBR"ڴ[%O.ªn4Q-K[_{E;.Ֆ?h.wf+;<[xCꎠ#e|p%̩Ri^J҄zu>߄bԣ(a}\ά9oktR<1>:5W'2q{Jе)oCXk:Vou>m,^IϒUc/fw\ikT6㣄X='SFpy7wҊmMkM?~n~П,~#]</\!u 	Ɵǋc^&ѤRjP{:|d!:I+{EZRVו>)sl]	IYܩF5ErUaR̗WuOW׾cuωɨxŞukIkJR'wGjV_
c^YeՕcjͷf~NXԧ;t/C縓G(bNxhFf(*TR못K?Oύ u- 	f	:&e߆ŗ5wR E:+x#ɸ_[X^"e&<Jyc:\$<594[WݣM?zI5|1EZu:a}Yӡ&"Sv)$uqf٧y_'qz>LjU|Qp&u٢if^lgҭmLp׈q*U3,dTwp1S,#]za:X*x,#VUOTmnIogoĿs#,l8W]c	U=Z;vW}ߡpzJ$RMO~~GS8|'gR~F{K='H.=~nu+mlo4djWӯm.QhmAӂjK*/EQݦ>Y>MȲTkJr䚔smf*^6Ioo|YŚV|Ei忞`д?æjm&3F4}/+Vi}+v]2tqPt*-]s\UK
ojM^/ڇ״5㫝.ŷVM|m#᷂toj>2m.MwQ>k{Pe{KrNzrK֭˖2nj/[^~UzT,(^	kNVIFMv cf/WMtgĂ=W^!D:Aud5[g$EY`"Ӭ-apxԧ6릿fh0.NRmA'h.]췗kٳ멵{7Ȫ
IVr0ARq{񡁫)&kϚ>:9oxff𞅣o %e<vOI5Ye+	ZL|F`~rpgӔd=9_kW$$q9=<e*|DlTn䬞_4^\|?gM^Zφu/VI#i~i?=#x'TbMYMV^iZAqˠieGu҆5RN/vsZ7:rlI|op-lwj$Jb&X	E6^% ω	Xjz&; |AU5"ia|	\[-wH<cub3L/5gB4ᄥYBR?VyɨӅ>-l3˩W,6RqUrBNrm^0y.IJk#nG}=[C;_jD7wO,-<7W(֔|9SFs1Xыo5B&rmry6qq&AAʽI-9RNVJujQwR|- 5[Ϩ?j<-kYNa-,*c,Bfhїceʭ6srej0J2r泂#7's9::oI]EN5x7~V Xn -</[U㟉:G4}t3kWEZuYRׇٖ+JZ兕9J9*^^ӣwuΡx⛍:d5S8m.gfFkl$Xkh2Gq{ak`$gΚ9[ɑK?iΟ2QRs_jtԤ{Ŭ<FTq!wjtһ[FrUt_ 
&sT/4þb^h;Kfnc<Ȭ؅G9Pbp⺸Ze#KC곟'&).XV.[IUJm=r&~9x'Ŀ	+M&fšF6WZ=֥X_v[oϪ[;F]WX>iy{kK
(c$EbTIrI[(ݵӕF^{2*[-VeRnOuT#zt)q
W|Ak?5	 P.zΛp5?xνRZǆ-kk,Z-7۴gLt{vVo#GRB
oirwIk}}OȸS	Uu\aZN!i^{qetZ;YiWf,9.ѧ2<H`+2I+m_J)NNJ_c&F ғwޯ~&t{{?|CWxV d&[_?*$Cm'AO[&vSj=n]%Ii]֖O//IwIsΧŬrșCy+B[/wW.N۶ PoV.q̬@B;*IBϺ<$_ԙ y5vu=+:YUgṴBU,LfyrdtܾmZs(?e=z[^_=J9֩{Cd=-coUǞ3/s֖];a"{<9Ei5Ƨ9%n܋"O >OdrT#)t{4y\WJ9S(RT+u&Ky?+kDB0dH5 ,kU%
jjPUI$$tSZS*smܛmY]v;mQ m(
'z`ϥr x&קУ4>\d@F޿8]/MޫJ߁ %26z 8 #9>U{^ھMtӍmV~~4lw
WC|	!Լ95xh.u[oZt7YY/Tծ|9v^\j!-ju6ʧ[烧ҭ̕r֮)N{r?xw#S̟<a]
#UD碨%)i)E{7 po5}{^w厑hZ?Crg(Ӧm#>icOsVM+SG8u94	~9Jʗ:JRI&ൕGOsYexG1*U#GE/eImME|0 ~|}7x{XaӼ%i~#`cmhx>.漚FI厑,a?|QFs҆YVJb"IK٧h'ku̱sT#m*s4ESS{:79J	FO+A:l-ѢW@ UWrH ,-ʪTy7=&mLV"#vQRj_rG⯏-4qcD>xkm5g~#񞱫Y][^R$,=FNI+O>YnwNYΝ
xBqrJRs]i$ڶ})g'_Ec0S%:Dg7xI>t 7_Ǎ[%	k[WR@%oE4;)eӬtVʶaOxJY	׫N2sJz7+ii4(cL*%CN|TչwOվ R9.|ew>'.]ޣ<wS32\	4t爝:)R8)E(IenM7IeqS.T|MJJjI9MHſzM.? 1tFB.XHЌL
"FdUʯv}/{%uGѕ<lʝ-*oKwdWgᯈ^	o dyG$rIeʕ%U1aƿ$ݟ6ob/ފMr+jѾh鮧?uM^x.#^%"DpLц9#׎+0cRwOE	k88OF"&Q tsӿI*:
2nWev'֥H4U{Y$	.ҰD<NѿVՌӽM?%v>/$NtQmz-/0K0iz׬,t'O	kk{./.Ԗ)$:믙ǅ:͖TSVGURI4NKW}x
>x#UM2 ,,7|Qn8.yf̮f&bޮ*x{jsZޓ,i]wu|Ia	R煥I|1FU (4Ztgϖ >s]hz߇aᎳ_]s6ahZW<w e0յhF*[!b|E.jSkS[ܥ$8sʯc%dM^y9rc+'c
	aNaiIR~3c艭|:|o)4^Ԯ-<UciqmjWsi7,,mg)b=64hUaH({*|ARptc*rMI/}9[15
8x`1X[aӎ&*hUz+Rm)N\wNܻ/t?;Zffg%Zk~;<ﶽJ۾SHE̫S5bKdRj5
	rE*wlrkxk,m9M|F65U9UqUiRworC6NSkz,? ~wꫥ{Obkҕ,DJ%5	 Ӭof4R_	l 8eU**0-]5-Oˊp?cs
J~XXI~*7"ek:ΡS5Pm!𖷺fO<mE'x<o<7׍(p8<#<"(GE$.HIsB-Zuio+71+]ԩ)<MYMpexPxsA{;{NRq=ρt0-q 	)UbQ 4äh>ӴO(Hvmp؈rEIҔ~ӚWi(N~BVQMQJek_<5~}6YѴ.u.cԤӚh\mEF8\ۗ*䒼z&Sc)4rs*qQVwJ2iaI(o]j`Z՝ֿoKkioy:izU'A2]cٛى<C޶{>VeK^Ν+m6lVQySv)B<G^T/sT ,":i}gRRrs|>Ft.{7ut٢.Yٮc;TG@g966uB)\ܒ!UE.I-^)Y^.ڳ04{HJpy/rO8].h7{=9WѼEjR$eT`:F'
fbsӋqn7rw\JHںO؈GUOH.d+RKMFբ8fD1Γ ,rFGF_p%
JӅJ.NӖQ{4=էZz4wNY~?nOٟKcHK7l>-n3XTZ;8u5-,q]SeUKx#q7r\h':u\MG>\=,		 e~XE<\y1OUa7SJi(҃ SR?	-wkG|9[vM7KmOǇ?Gsqg!KԖV4յ?$n88߅:aqgN
`(2vPJ2qm/oÞ18jSby^#sQa$(+EK.3<c_[@7Ϧiv c:ux$Ape𸝬%imn|8_,3~VNIKeҿm|웍`bCSIgtیt}I  cӼOx_y1\xHK*hXm*[=8Gci%iYA0 Lpv%.h]I{UlS3NV$9(8_PiZOٳ>2|f7+_l# G;{D|9I|i{=J.c fڝy{}%He8b)0FTj:ժI:aN\c0apў&w)ՖiIÚT[ؿo?m^+A|{ ݏC|:}[O查<tZ6w:xSR&Mݴ4ˋ{i[jWCpw#B"J\:JIVO(\'<=NHa *N<PmE4GCF㾳k;|*_|q.4j V[X ^B6Uen+.kQI_nj]>
RQXLFg-uWK- >|([t cPŕscsi3l]Feu;HohLi4+d{Uo/d*}]Jת5uҕ.$6RjM>{t?k&.;זsqupRT9eBimjĎa
xllk$Uovz_4<vvնvekOY}Ithucg=Zg,$]jW-6&xZKx0!{@}.F$wm謒L(ܧ>^di9^+f߼z>%o	-?} ½gv V7P]ΓXV¯%V+Fs=\$o^jN/T5[4+GVm`9?Kڤ~FU-4^!;oJ۽eX鰳vZ>hvcn%iV+qc3Ɣ.ihkkn~ʖjYxuͲ>5|(+ɷ/..KM&k[,q,ySǹA_[)rSI쟭s縗'U:|J1VVke?Pa7Giw:êk:=:CV:ݶP5[=7JR/[[hXmI=6&mJn?TKY_I۬vqDgL),VhQikG^UϏ>YAE+ƺi%Ɛ|mWLO
z:޽-oK:<jW~j(i*jFܤM[5֛gkeA4~z=4%iM<(m~[4ZH$j"`bHZ6}-:}G{=og럳-n ~$'WKY]y{}HhbNYmi/ԖiH$tYK*ZMtv3Ty=NN_浼/}G\j|a;Mk_W]murw.qc?`( .Q濓[Jcud䜞יWlp+@'Ɵ&L >:x/>'j6M&Wt-?FP:}ⶂ-;LKlp?j^ʓMd-KNJ|kyn{>[ͨOowᲣˉQ]'NvI7WO2?
_PSI9k3v4	5{ּKuE
mI2`x ܍^M6to  ~x3ό"|%S]xV4xz|KSQ`}O=ԬGt4c:&8h{Yߖ-{>{N\MzTi$Rj7V{K/cetB|@_ >sx3RtO+|Uxu>ב_7-I'4_/x$Ҭ7IݚֿWm%<$Ji=dsVrϬY .~ߺ <V~k:5_gK'o}|K%]KA$C-VP]3:qRNc)YjghKy^"sUJ>ԝ42K;ՃIrK&T"?_S?ڟB~t~x'V^#EZrxw쒇uY%a8t٨R8(ɧےM%ǌE*2U2UhBJ)E.fkO-?<;H7ZUޭ=_K]\^W%ipB{RgJ1ozF:jNr.Y˕dnwaD- ;[8`1nՉ#T.8
@Zm^kC,v[وHvL0+'+,.mR`2DIbeuu*8[ioOtMf׽c 5|2syM]o_kݽQk<m-\Cz-ś\xzYi?Yʤ\δVjO{4u{Y1I	AԳzs8[ۖ[zٴW1Jֶ,lmG!t%*J;G0O͞߉k3y%EHsK_aq%%Rۼb[꨻7v~W?w]ފ{j~-666wt'ිjqwoa;"xWV.N C>dm]]>M2JڎХ7ǦGs}ol-'0C_Z=_j-eV4ۈ4C@cR&v߫W^m-ݿ[M~Οg Px^ZcEYg{-4%et%./mKmNdh	%7ٖ9biޜ?ySpt\ojIN:-n:gNO󗴝騪QJrޚl'¿|LU's`jZ~}IXڈ۪i^dӠivwvܟTͧUI<>.	_2EZǙIFRkݝH4O
r/Rkۚ1ӗ*~rQG
 O4/ :xYPϮx~1yVru1$	.jl%QI-*TF)^ZE^j˫H`bDZ̛Imm5?O-;z[ͩ$&Ե+h.l5=B}mwj!6'U??mEҖU	GP$ya(81ѧjj3Vq$swSvѩ=b֚Σs{BQҼ%SmXxO΅q*~hn3w0i6|%F1QC.uj[K(9W=\*se+{.[n~voVZoo<8Nri%ԯ!RVk7hvW!MymCp3^uKۤ'k&V~-V|8mtMZ׿M^v?} axz ~g2kcm:w5zxkL<i|-Eo|76OzoïhWWl0=͍Wdx%NҦJ-I%:e.y;YݔQ0Ѕ9BChڗIJ78ŽL$ំfӬ14uvc8\qPWxՕiԔSOj;z4cm8.m(&4}M  j
9ӼSAWm|eOχGд;]+c3IB_4aOGYm~MO(FuL[\jVB)&s΢WM?10xo^x³xrG-$mĖ;.LVZ߇vimg;KBA' ᾳU*n7%z+>ߣ{̾p/ks6$ejI}sOcX~:ji_.hNwehNsKugaskv6:[}.aY~ǣJP>\h]){<DR*$hY%+h>bNI8uxƾ)jStq4AJ0)J/O_S/-𿇠uq xahΑk{=+&w%ZBjmkG׭ AeO+bT኿:jpʒI-~%k;[1WT*S8U\=|<P$jJi_پ!|xߊ; <i޿{⋿@+$Ğ7.o)tKk[~FկO_/%,5َsʚugF+MyCFߛ[υqcFKN
rJ2WRJu89x?[_\华5R)DK<_kۛxufY5C%H#Rj1B	rѽ:0PRIJOߗ&߻ʬiBsZ[UhdH S4b*R:qUzm.7-4ωQ>?]{V7.57PY^Of!Uj5%$߹NUS(sۗMF}9eCQuM'+øogGߞ<_(__{]~OI<9ԵDD8wnmU}H	]"~߄r?i'B^Ǜ:n.sM{5h[Eq^u<<iFZ-KW%5nv{a.<Y?_akzo1fmBDį杨yW[]<r~)x*J*n;K8aT[)7v[_Y|5Su/K-~ҵ]Ӓyf2! kmpCf/Vu۝+Z;;l?w`0F[VWKohxt7_fm,&y|lbȪ?,90xSR:qyZfM::Ta:Sz$z__'14.ly"DdI9.3\q_MÓU|W{SMOK--h~o <5rɩj:tmJIwy\xY  YcG1<%	R>Q,$vL%)=.gWYZ׻iz|sixo<#?_7>3oi =IpɤiZt-K65ޣlbI/p b^QU*4q^=:\ۨS{]Y;_e[6ƥӭW
N
Mʝk5.JZ.m| .Y C_M׆ f/>%׼W ΁h>'E{ siGxOVl-sxDݴ"PӴ_ѥ4w5MM5w_8Aq.z猒NU7)uz}-ŧxE5M41E/.m!3It~x^E]㜿JPvc{'וn74 eќW<k6kq9#W#IU$ .|U$A ?_OD3f;p;%XC)	6*TJ_ku͋n>HeVQu~ ?'h V4ԴM#Z_x>CJ+!mu	ׄ4;nSO ?@,l>E3mI9h{W9oTk,vXFnJIy+rdc >GX'7Ojũi60[[m>ˢɤ󦹼mBHo7*ٞ7PRїKO4TvkʩՆ)*>jjP(һvj/n-hu~0)?iWxgV<Act4.{Lb	f_iҟ"jY~'W;IFp_:|їU(ǪFgJ\Ap2磍:_t%*UiN-{9ӳR2Z&ϟ!0 5~~!|.ԭ<U3`=;j7Zx
k[/EKME5IfLr9N2_]J1sQ]`z(OHVGq]U,V45sU,"K/o|4aGF_oψd=W޷=MR-uF*Zyv4=BaD{kWN]S
e.hE'wt(}#%%nL'y?3PK9Ɯ`ܣ)S9rR-zܭƁDݶaZF T-`Xc^7Η0Goy60ػ2$nNu֧ʋi8mV[~~0i [ig\  HxR$Zxc&nFJ:-U_;[e,4b%+'e{;>~:w7<%"N[ƻ	&
Qae/q6#&Zi~m V?~9eѫm5m==II%eB.Feeue
Z9I$3mY+ݧmnw^⿊52-2XUA2a#IaKՎUft!_vkM+nտN+%$GeN|LҾxSC-mX 5!{f"fxձ5nGxѥI`Tb})vitݷ9<Xi^Qr6$OKE=mV q<'D"(-Fe "`vq5t*k̼|7н%-n]z,YQbU$[H0;tTӌ._t2v]NNŖz$SB7.ܶ# <W,djKӯ/g_++۷_{hzodFw ~}?'<uֵh}EZj׽Z[ :k
&Fƿeg¾b.>ҵŴ.ƥǬKwiZ۴-)xrf|i8U#r8SNMh}^#(,RRUjJ|jGWfkk_Ic0ꚟ1gn	A&	FOgR[ۨRZ]I%YlcRVX~e_9R<?SI;FV6w'/ORӖ"FNW۳ۏ+iԫuӯ0k?
~\OxZW/WW_m&Z;Kk4]=k.dS4KJtN*ތu>^)o=LbW:U5U^9EVVI&峍KBe x|Os|g~8Lxt;Kʲ]5x%-L+(Xi):0j+~XWެ+ֻ9rӌ5ԣ'ks%'x 0h[s]5jK#
_x[گ|;xY ZIcFs-"6-F	O:x|
Jbj8ɩ{t\_ɳ,2*8XCBrTkM٨N74σP ٢K{>+En䵚>-#xB-5-djaOӧ,tܓPTno]_j/2&O\c+Gn[+앓3߂3ޯh[k=#Gմ;cK]	'ȊkqЍ6{y	[;m+Ol-ڱ	u*+Qju0(TJ潓ZgFk|5ikw%e=/[Rq #wNz؜2^%$oDꕯ{O |L^++/'#!.DX2<yF_pq5\JvzY {X:*44vrVm{yj~~?6Aē<j~a"XKʛ~)ok3Pj6֜]ñGÔqשE$˫JܶV%Wb]=BퟜpB l¤bKN)GE$vmo?<K.3։",g7ې/b3ϹEԫӨNE~V_E幝5EB+ui&JiKw-{uKK_G?jGqM?᷈hu]*m[ݴ/4l,CŭΟ'+x-&>jMzqVғwj$n\$?ly=gEFJ75R2pW('Ǐ{GR^';iEp|]
X񖥥^ nm[tv4"YCDd<?O,23\SqRq58NRI#(-y_~qf*<,lt)*rqiJ)GTٻb<"<e6~?Ru#Rԛ> _"M+V~, -㷈yy]ZIopt!+N]ibpWNR2L>[1X:	,E'J%:biiJI /xKNI~1m[~ o~!j:ǉ.5+m0b,'Ѽ'ۻ>V2O+%^X|U\_kU(`aF)}j1F?IÚM81t1zx:89X`(Ka)TZOAKJ)4k|MK|J⻁u-x.JFu=:[I$ D?0ìu:ztcxNiRqsqIMNoK$[5 5(J5(MGWITy5ڿm?k([m#৉u}3N&jIm|JMB(4}_YMּCiۦ]]]_M~T0\޽'ˍBe嬭t2z$Ϗ/eQRN!Jt9&_xvM.B&Cqyyye*tKp+x|ǐ4{y֥NT9\n-yYv?('OIJ_i}^0ش}Z%+9vfb!bhlXHҠ׸Ws͛t磷66z5{F-GК~kqxzkȖm\¤D$bb%XVUV>lJͷt[oOKjӳwm{ɫ5uig,隽Ŝ4۹#mnUsc^FN+5MBBZRQmN) 4vVגI5Q򶿕iZT+~x⏆~&W}wW毫Iix[V:󮤳H$Q-乊ODOI5]|FLTj+J4^U'ʒRNU۴)NRtI6Wma_C |QMCΜh>m7BHƓusKڷ#ig)K=J+#p~
MfQQFw,EaTwOʥ8Ih c:Uѝd
5UxAznk䞶t$mQG4y\y,7(\4#UWqpSj)A{E6r[>^vIoK>6~1 FY5meX]i0Ư^ŕݬ3.Qaմk6zb,d+aՌ#!YZURkt/קRxLR*VڍJsԫS*A;I%VӫM4:I.Cn~kqĳE]K-mDkZ_-tcҔ\FOފwVɥ#;x**ܘk9+Nwݗ2m9KvK D j#%jo|+: <S->p YƂ>|Bϖڝ/5c/o&Wږaxr8BPRy"Zß*qʳQr^rIN6JSUy˖_|):ź߇|-#ڿ5+CjObLЭ;hﮃڴ3}h,5GFu!'	R8Ϛ4NqNiINeFQMIIi$Ӻiӽ}ڹ0O@,cAȀ.}7g}km\q82JE'i)ݻ+.W g?_%Ɵ|'tv$OP\E}exgwUiv#58]:rѧ,66r
oq~8]w׾R(ÒMsim/߱u Eu&xS5,]qgE$M47^M+@N?<0}px[:ycq|Nͧi'z8M KRP%)s')Isw\ 5;?؃*k{ߎb	zSGe*f]:rUY&jiTRIg˿dΌӟX4-z8 %V/+ΙK#I<P<ΑE8
I71 
;<ZM>?18^j?yܶez-RE4KY*U>˪\AkZ")e&U0EoP~.*aԕQZ6v>4TG]I|?k[WnAl[o-dy%ݵ̠( wd*^e,^+ŻYo5Ws
%<>>k?'WQ2ސ+()fP@*X¶!J?+K*Qr]DtWkz.r4w5yi,i]k3Rnbpvd^XJhӔe5Zm۾'B.gR䔔tʖݔuoZsTW>+}Dծ|1|?7MݖuD]V</Zu4?:8)a(c̹\qNO<7㉔[%9sIEk[}u? Wg|gzĹl/'h m8~ʟt}5/"c=_xKv2\P]9K5җ.me{ZF-CTM'Q}ıXj.#_iD 墽ib.EkB6啬_uug +oopj?<7V1Z>g֖C_xzi}bW"JVٮWk|Q h~:⏈_Wx45î_Kajqw0؉LqkCᙯq%iaue:);SKMR;]$=e}w | Ծ~? n ?uGw'y [Ƴ+WJ׼%k^Kn ;x PӤ͕IҾa*bZ14yd);^|:waZ*RaՔH)Jqmv',<D]Zǅ5uMW[ޙ_vCAo4YJ%uuk8,n:6}U#MqB<c>iMԠm$ӺM6pnկ}_ γMxC
OIw]ju?NM ^j6i<ZdkLI4
+Μ	8renkjk/7Ҕum[-5?jɏB~mx.-YmckK񗈼3-&KyZkA;_$?q&5((H4SIkvwf8*VuJ\Z/~kP9O/kas
-0 :mmx猴 f]ܟYbOfʣ/,>)IWmdIJRJY$~eXlVi~MSQ)-Z犍9/~܍7&{爿e; xj@i4}Cg<xqgu:͚K+3Q/h7Wwbp*QQ'eN1%;{x
yQ*E(chMI:S8/࿶7?ş"Bc36woxQ^д	tOg.uM7KavxBM.XikU:WQZ䌢_3-±PWB(Ӝ'k9="ei7e|`I#⿄ |n4O{R][),q5-6L۫3Un-u2O;ZJ=HM^-&2rR^xTf.k+;$dsK Y?+$SWѣxiGtwPxK$qƿмDyc]IJͥu;[o¡e>uQsxF}'xu=gVզ|73hSjv15Q x?JxuEGGsU{Q\RqRR2=QwS+q*jE.W{K?&_g _|kL|/GJvwu^Cռ9GP?u;m4 cF|OqtiЧB8EP,u[R8S\'/Q+]j:q7?'vcr	ZIٟټ]Ҹ+   WݟF}^m,?jibH[2[-mbDyv R5_}| 8-\}0")mOQAjWQk1O O(I{:W6E-tM:<w=_OoݙJI0q]{OY5k;:?îknT<5kw> -dk[:Eaa:t}'f.mD3'%[M)ڵ24iVIn/T,tiz_^E b[(&OUcuhƻI|~1we֫ԭ<X>\q߈ͫ,K<mZStx.imnԣsq*hPrIDXV*w~Rwg-xHS	zfk_j-x^8n~xWi.vQ*ԕbsLNNѣKԃkOgO^[{)J4졃%1.:6jT&$)&Z}; $&χ~1OsR[_i|BV-|ixoΙ+NM]-FQ/!筋papW,E\.'	
\U*T^Jwq樝g{NxLM<F2%
U9d(RJ+NKK?:mڧGN̾-_*mR|3L~ xGHƺm>Et Vi{m5K	beWR-Utx:',=Y)eR/-3SVUDe)^2uS/z-Bqw^gw߄1iaqm"K+,7~=ܣȺA# fG±IO21L{hqMMmaJtoyYw];j>	3ĿiŬzzqڼn.ntxnZOoex,ey&qOB:i_^஧)e*1(h֖9i}^ׯ|-xo%.<FM*hޛo
F`K]1oK{OW	yq>EpS5 uΚkx<G04qO'1"iFP?m<#xY.kXO]XVXZ%{2Ll3u[g-ԥrr|qRM>kyMӼSKkvrI?4Wg]KVf`s@#nPGmB*IgЩ«59I{-4KED_1}!wʝ7}[mq4æDӮƓj,gnBuRKWkOGkڋK7r	xُࣉ?mͬoxztvjwPQRG.5qХVXYSK^2Z[N)5iN66|0Ӽ<|c}kg:ukϷO6k6wCO3i6Wy#U)^nISo	[iEK?/.r:\jJ/EEFQv\RӒן
ny;񟈵{__ t+O>RIԚ]zCl$m5-}WlbB6QSZUx+(v'{qOf9<_?xz
p.j^RNɒx?%i7?hZ=qoxR2xCz)#xxGy;jlcN~
8a(^7'}$dm;}.fE8)FcNYLe&O[q'/|A~[
|Vxq>xC^Y73|H_
5P3*7*n5qة(EU,* ^SUk7Kן0LGAWUfӥNWowmUkFTe/m_3G47φf /M.5*Կ%o - yI5		u_LukǺe>U"iEԩ;ZQ B
VMM_g|[ÿaҤO~2-hc/~IYS,i)4 `σ}_[d׼az1Ms}eWǷfҭ"/ic]1ڛku=1ITpᕣN4bwerJz5zիuTrVRo읗ق6al?FxZOJj$zLq*C a[{&BaEtqňO7z~3utu>ucsM_-:ioQJ5kĩ#Ñjaoi+FM7GtkM?M8ORiJ3rZϛNWa*Q_JF4iE}^zzǆD5I4G(p
[Bc+IneRn*KSߪ~RRJRkmRfOKNQ2Oag[$23IAi%BEve
[M|zlrbkBj'yM-+ S双ҼE˹F=]:;I<k;xHK%D2xZeQɨ{E'4W]v;ZSyI%f?ğۗ ,T +5jWV}i`c Btniy,eeW'BV"Z<}coF|,Ml*հկ^҄ySVU[$ooO/o~<ϩx?z|%kqsK\t晥ǡjZ]76p,W,?a3V	sN	T{/>3(eY'QFJ3slҽo{+(׼5'öS[.g+!
"W+Ȍr0x&H$?;hM(TpwOGfo^uũS:u-Wmlzgu?Sڏ|Cime(V5#H@@jgZd省O[T#RXrmz/KZxĚfj4uIXY@YTCrkޥ^fEcS~~ir߲M%{~'էR1ZF*wK^}-U<3<OmOj\YgmM^+'X[t\]STb[d1O*U&Aki~*ua¨R WeUtnccf;_^/~^s\[}:}xgP6ך"֭ֆm"IPƟQWQjS/}9mvJ)魕O<u5ZӛI)E'9Nqi&_:X~3f_OƁ\3zVm.O6igjxuԵYjG	
EIG&hp2X|v7-BtMFN߻.Zq"M٧w ?࡟>~ZoJI{Zß-4N]g6ae9t4tQҿaWgUޜ%)>ZRiEU~ n&	:UT#^4EI*ic{95kI4:na$y9G2%NQMrY-:~q%$6}uӪxw
q]]m0]KZi:|^;yZmVk*)ymLMqU/,piQ])F/yx|/RBgѭt~ xnӭ/Y%/4o5Tr+LN܀.]t}ZTӜN~յs/]A$b6Ȋn؆oYv#,0һ.vU=~G4VJ'~Gw	{.6/úr1~'}:KAgoCx%B>aYtlMHSm^<2Yn7sjVmvoWÍRִodk]-bd%/ &mf'eHUYo>y{^c_W\M&ך?r5[K.gQōuSrdĆt2,B垷dz?yYYҕ:Qj\ђIҺ;tvz-Q-mv_tJʢD@ 3+
S:ܮѽ=?mo8k	{JMuј  j}{C	L7&eg]Gm
_U'OyuO6L6.<b4V~{h۟
VsG/*c1C%+PƫĢk8n~Jig)F2o[t_p¹>H.qY$ڌtOy^ ~%{^kx◊SVoj6.R]jqFi:ݾ1Yزi,u9spoȓ+jCq51yqK,>YUN<7}ȴѻiܿҿo-1oºvO?~ :n4çIxŚ;}zū\~o5 S'VYIAQrߕs^Vo]3܏')a)/BT#pnTGӳ\86"/>e#j~9+Դ7`9|Ib3GOi{|.]ȲDlv:}
x[{S	cU>WUپiM]Sh#OO>*'C/t1
򧄥4РeyKNS:s.S[^.ɧC|q@um4<KyY;koO.tc-}Ƶw0Kywyh&JsJquoex5oU^,n{Ic\{Wk`=qΣRJjKKj[?|E{;;xu!ƃkimoox#
Lۗ]-̰[jvp_pOO(<mX)JR6$^-]]4SJa{.hԪu*E9M*ODV|+^ U!~j?<?:w~M!_ͥaetqyF1}sk?:Btմ^iGN+SI('5՞J=odx'~=YM_^kiRúzMƝx~+olUlth-FOw}OPxo7r(hO,ybӖ6O^]|jRu0a`y72vz% OدS25d[ G{D{kt!Mp-eo Cu}vq*k9ҦY+oz=LrG}[&}} I^t=BSƟ<Ź!ݵ7e	VMciSvN{t}9$t-5/]-ƧËWWWZ]DdapքCbYԆ7VvV皠Xu{[t%vk}>xBOmkHNN6U&#+(Mz֍}̫FnhE9v󳵟g}h%ZHқSeuFԼE:jw*#kޟEG,^5}黽#W \Qfk:)m=v_f6_W~ $~,?J|Yr]B7s=E-.kGi^ZI++;fz9nMV4ʂvQ붻 ga0^*N45U	8۔c)I)9hxoog|x$x_XN=lbu9Ƌ,]]!39̭IeX
*\#uMmeQx2׊c(6u.Uߌ{I[|=m?MXׯ|Sqɴm?O/( };M& ]u8Lu5챔9rgrvުircNEN(Ni]|G38jIÙʫjU"O2qlk O7,uA_HRSW>]
Y^/K No`4
HOaTiu>DӪh\Oi'}l[nba}!:<UiR{޺.E>zr7x5 5~w^ ?<k6xLմmSEƃz-4]VOힷ9u+m5WI|?\qt!Z4NmڦRjӒ~Ps,>.''7hԒjTz1oVe$~f < ğv⎳-^)t[Bm./f-?2IK^INv:VDZvk:ǋTWǬNYeR*ыeե|䋫
oVqR0AULN+ؙ㤥הykԥueiGJSt)Jj7AgyOx<AmOM\t_ژ`}?SӴǠ]jmnQtMCRڴp<^S*VjNjNQm{)2tU*!QN!^hsJr5jVSQeg8p)'*S\fO6dtm>9UӅRѥV):=ōͷᵒ=RT#ٟxB(ԓ˗X[7uKS3nQNIԒ滲kio{BxgQOX_1/vܷ7pjQ5DWv+u-aKKh~N
I;K{ۿ+(ՠՓ|j\Y(-]+z,*ke5+%7I˦aphWA\sI<A=ҥeiSi칚o޽y=vۢ%NK-mBv:&mZZ_=\YYuk\ioTѴA.[+;ԭ_wغ֧V#)rnJM;NR(.\D%:P(24Y6a)&ܔy&}]4msJ{spXiLIa
L X;E#ɂ8Z֎%+/f羶9kaoY$/[Ohe{N}?V[vn{>dKX\K,&ωaZ)B*V7);E$I:.m4{*wq)+6j&~xkƖ]^Z[hkBsxjW[kmė0\Eð*[F?!ȗK,_X7T<JBV:^U𱒓ʊĔ,Ru,+
Q)SUwEG$FvV+Qm/KGW-l=#u=
Ŵ۸eӴMrn'{&mjVIc}}k, [+yO=i6>U刯,fʵrb:q9s^ʧ1!qFy#ZXh8Oݣ6ӫRNN<*EnIE5*@JoKǲON8!Sq4
'DSRe$;rS/;jm'ks>gw[	qMJjuiMFZd1VU%% gRK7xZt8~?`}jL^|W7JmcԼKyZ6c
w'
ʕY9)BN1|)J6:ܻc{lE:j8yMգZ0r+YrSrSQ4"ӂLᇋ<1<M/MMw)4k34Y3G]\x>ÝREMBW#<U,5ۉ3n4
IWMI;+(Q뽺7Xi3ft!Bi)Sqn&UњWVjtۛY,Z?ŨE>jS}Y]VF5leFKl]Ii
}&Cǔ1pTOv2iܯ	S"1zuxPm-Ҵ˥i~ ?k	~_iSƗ~c
oZZk:Ğ6\AZ^IxCxn6Dڦ[b7Uƍ`rlN]^GdlaWxgZ>xƝ:P_ī'5MS'~^W r~+
 g߅ڎgho5xF-řgWyF|:WV\Z(֔}"ܵ)J[.ܳZxn[8FjڲTgTq#W挴 ˧M5q*(V*"xQZEt*ʱy[wW1u?uSr]ےh}c0PvqvM+4,sɛUf{tMm Y,Vq,̒A3@]YW.nHOk|>/RJ.r|֋mtugG%͖mpb9%F-ʠXУ;@\) 8sE%ͫk#c3'rPdߦS͚_\]K&+g-!d8jXIoQժ~ZԼu9)Asϖ7-W:;-Y׊Zr2iyEL4Kp_dW7(XqxicMp(W,"IΜWm-vv]?O b(<+M3CF~\|AoxŖY4nk0AeZЬ$timGySឱkoxk-<uiרiu4n eZX*is.gQ+$ֽlzs|/xď	|uOu}[z/auHx}OZ iRx*K¯xG?<Hu/oiߢcӌZzh7/
Kk:mͽǅO&U$^$߇BNbѭ~n&kjVw~&"QM%$ݯ孭k-Kף>!6LCeHd,2RFSwU!j[[~{?`٫G|E3?^é[9G~
XGs|B/|8]}jE$=O.iNhF1nuwMYkJ=Fz -[?*__7/C,Q,CZqyycg?-SOѴOF`Lh:]KM|?sa'eZղLF%J{4+QONUi95ggLV-a'ùlsW}twkI'~(|-'ĽO@li-umuCDԵ[~)coeѴ[E,_ggQA:A9sOW$&M.Keeg>m"nW - j`  ͯu?xW|K/ |?ip>#յk1"KLO? x7[kxCxN_DT*}(W$۔nlnǠի<%*%*iJ-tו-i}nSCz-"uټ;Rt<#5ݽ zwOuf${*Wīc1T7MMii.^mzҹS`ko() 9QM7IW<Wx3 o^ZkZeJkCjЭ.ս]\=8YYz8ʔ^Tc3qKU$ٞ#+%T^Xa)?uBJUaJ-=~?ukZu Oil|}h1\Er[-͌O)[bmyK)PU׿{'%8v7y-JW_QVtC*S˷}5%;;şaBwRi 	e/Eg*Ӻm~N<ݣMGxm~5?RMըNRⴗN6ж`?egNY|J|CkǨ_FmXjsn׵r};=ζ#M^>b,$[Ti4WW:M$֖{=^gsiR1&7q#c,Uv܅^kIYv^zUXÝ[W	'O{ωVjf[[h![1ejw aXD7>.<2n$/Y_V$ﮫrQmh#	:Þ;!xLJ͟Kb<5ǫX]joywXZ5M8yXYrpRzq8ѩfQ%%+4RP+;j-S)N.qMZ^mlY.aYe,j	mOa
<>"ic]~vݮg]Y[O;)yeRuY >O_#tOHs\LŽiptmįsi%Xx i<˧K?.kw_?*?XWq=h$ܺg%Y60r$t[Hn༰Rֿ M]>h:%K7V"o1hcIVMg5c&/nd9JREtbI.h+ɵov诣wAߴś_m"jF]j^x,o&}sRtɿs0[&M/癇FEJITªxJ<4>Ƥ!UOtں^Vk]%~Ь-/KF }JI~x:af?㧄58W[/yCÖ2bx\./
ު?TiBjkwi[ߝô%gڕ*]u^]#_ݵ5ݗKi(>
|b74?í@>.-o-׼Y6Q4-o<->ҲGi6<Ύ3N|2tiT'	ZqU/
pJSjuøǙUr1u(R֥ՕZpy)SJU%ݥF)KZ>~ 	u_-KxOS~k_2-^z{f5[&->-OoK+2IQ=&aegyuyINdT˫ݹ;6v:e؊gx:jmǚMI^} ^= aJ,Q-LѧKV=jOmat}WTE5m\j[ȿ9~2pM;{[^筗FiQ]ZuTx-~,
Q5j'^M},/͑f֝fc󤴼ȐaS+d)TKvNJ*2/f'z6RZ5?gi|I:}=e[!8<Uqj5Z[7ǆ|Qi	ꗛggS[X&K	vʇ5=j+{KVvMck^רc&vvO7oViz5^2L ٺi5jXC?zCԭ^o[wm2[#k,ya4eZiEVe)r&{4kC^"N~T^MEmUNuz gī;ꖯ$K-/lӯbIVV)bc2Ζ"ZTj'uWTY`3:9JTgѵ^<N|9DGJw$lnc_^^:Fg%զ,u8PZӋ|軦wjNU#UD\'d5tI$ԹUgLu
m[Y[3L7eI5]J]SPfP.fUug_J	ƚZoo$(qUyԗ=RIm(ߝ{޸ceÝO^(iw2;+RRO)b(qfm˟=>~]VqoM.]y,*ftU
sҫM)[nx
-7i_>gWCn|Y	^y$]\i3Gwۻ7:6X?-VUt''N7O߹3F%f9F5$eq慗U%~>/i?Cz~@K_/?:-ƙuYCo.Dkmi|l#T\=%RmsJܳ[dC)XZ]ѧ:j&I5+&_3}3/ ~߳ >"A? |"[Um?F`|eeXCq/5i5mz~vqQMN1ZC*\xj7:quD~ uxTޭZm[iw}dv?X(g
;7=*vCS\O^ 6kJ/ouK;GFG>_Bv7$*|FRV\]gif5?{/YɺE QQHQv? V>$e=Wo<x{w'業#Zv-"P0[^[Z#5բ̒Mfi1InYKe}-G~{<EwBQ잍]v|H-AǧxE-cǉeV.ux?UyMH[\[iZyG/ȲFa5Gh$m+ūomZ/_aЧ
U%%پ>ӿm/k_59mZ˻}.^88.MFb#H/UsGNT9=#kۛv{_8OSZxkw<_
]6?PӠōRag6S\Lxĉi%̶~.Yy)/\q8"8;DJڴ?<]pJm|)ok;4?_S	*ɳki1ҼA3_'Ait=RID|=mwŕ-ŝ?Pҡ
qcߧO#L;̳9[8}IڔwPVM%i6:, xJo.-3,˧ipYj֧+H'\% u7'u*kS	NOMwע^mmɨM-[~U?ZuotӼe_kZ^ Vi|k$8mcZw\}p]LG^Zޚwwjw߫=L1Y[QV%JN1I+ItVOwX]>sqnrЄH|SqU(c2@2W0JeVQMi}/c^%Uӌڕi=n_?#xľ(%O	od$N-9+IfU#x> ܕN)˧V2o>v] fM·7ŖLcy	#gP^Ke|Sۀ#Sˇpu+8S(izo~LTJMw}?PWĻi*E`e<<ẙr6*sVrV狙g8ƫYM_/Mo~W	\jVVoZCÒ7WcQZCuM"Nyez|3j?YZu/K)kC{)6=myU,UѭVP9Ri^mU?#5㏅?_M{^+sÒAeo.kt]]:7oa)Dca&<tJN.KM4Z^bo/Ěw5{wXcc.ox#Hэ\#5o4sfZ&"3qOu|  ūs=J=P "n-m#R~d1[uK[u;ԡRNJ23W[͆<>&/vd]ROKhZIgcas,:r[Li.HKS*!2&#Y8@|Δm{ zlN'pf۽H{Hm׳ ?㸼1=Ba#"oo5nl?4+aWDO8PJ/otgF+՜a
PI6eMVA(b'an<;ϋ;[ki.,Z"|5[Լǈ[SL{{X_`=.Om8ZJa$չ]?LyeN:-JiŴOwM}~bm?¿>8\xwMh
OsiZu湡h-ڋ++Wo$~mw1RBy$tgoT%),fFΝm'}#ckͩ$si"XmYhKx(RbI2[)3w^[u>ΥV5=ڶoS~ O0-WO$Ro$d@fcPJ0B,;UX3Z++F\{ֺ=78*S{[$u>/5H=Nlujvlbkxfe&!i#a(WEw{%](r]:CG^Y|MNymrMkomgfp쳵ieYKP.]l9T-*om2 eo.{k%7Xmp5B]+F>6j^mH(W4 ^b$FvRoV&jnmX':x<F*H^.1S(~TJ +ο'/^𮉥tO_GVcuXZ},Ysjڬe`IlSgN'I{Є-Σ{Nqhk¬6ICl1xʘxKRYF\܎mrKQis~O~Cco=niߊj^8=zOx
AE|\X>]7K[?x?#Ou߇Z
JP "jOW4/,Vhhҿu*\e
X=_cUZmiJ~֬R5Y|MGa{;;?~8]G<D%(oto5o1mSam˨>\Q⌺NlFdJ)E9ny$w<6;e%<&i4a\:xuΩPwhT
ڕMbn濴o5߄5X.|Eͯu&l-NSaCa}hi?8<-J^ƞqڗ?FiW緥K7'V|N<j6mc v_
 dO}Wxk'4cZ񟊼hz='i>6?YWqia{<SNZp+;FrpjQiױge4	UHUѸ]}X@@|iqֺ#f6 TY m@l,bQF5kYJ,%'ko^V?m2z:,>ӧ/49"7oIxoZBx"}FKa6MNmͲEi+$Vn|Fao	85-C?eR+\i~nsg0^h2k<1COhfH[CǨ%
$8踷?zMwM7[|/KKׄ.h:w;g]>"-ҢwĘ!F1'%?Sե:|4V]{u]S&EhEnD+4J2o8cY#(Bfz8G99+Ef58e9wkWO>|RώQXW:%Xռ5ߋd֭Eisvv5^QǬyVld UEQ*KZIFֿO-x	7JVod˭֧7	*x~3k_?|/z5ׇ^KS񆗠h&xZv5g: Y&O`piQz"NE9%R1Q_j2gAD㇣J8hRV!{>kN.oٵ?~x/~7W:_<d|OMjzW/׶3<9i:֡NӴ{mY&2Y:g?-LQ^NY+bg9b!:~Vv/a(*Ӓ t#p49ZnҜTt^jr9=y&}/y=#/o5]C3humGPЦ-/of<8--j+_¬j:thV9FA%J<T!
xQB	ƞ8SqMbKRN[yͷm}^{χ>B;I"u-jGҕjw4F$ׁWBϊ4M'FЕ8҄oto/;ԍ<u*5%OUU
N-.3ᮝ>'%g/ĥվ!qK[&Eؐ]h~f>֥k6jv]5MFo2WCE^5QX8N7ӣ:ф#)E$ +γ*¾:zѢ:pRUSTۄs*vzƷ4o
k?m+垜o/yi,za&;ڭ]NMJAmCz:Mߊ4mooB'R1QϚ>"AN|)SUoO*3OV1S.)ЭFn5%	:T*)JKMFUb o
;3Ip~<o	k|u]~Qu̚n2ZAYiznlF , [xl/b)0t#Z	+*Wu'w*r)6g:83U%wy(Y4ǖ1Z%#?G~;|S ,߆<m7I?ųh~Se:nmm;]^QokVEsS+V$RRPQ]&kYfYG0R#0yn6zmدO'~) i/ pFoUѾ7XhťޑxM.I&=M/wz3,Z֍j-J{R~Jdsc=Լv=M;tۢ?{m$/ AZj,Gm}Wf-Tëk0 m	Wj;>)[I"A:(Y%tI=u|nV+svOZjlZWtX\]iu[j hP[40ڽ{xf6o{\gZuH cU#Zt\z>[xj2RZN<q_VI_rXԀ,kV5c--1.g>N=qO8wes~(jtm6Ri>%In<?-1'sdGba?vT]JΛNr")7&Fd]6l^yVkwOXG^2}xWY]ŵ~T0v<a&	n[e>]/eYi1qxLnnq\s9Ji="h8ڳ*4XWR#/G%d2QJ-9O3
WF>5Sx_?:g
^}dO#V1|0<=Kj21;ZHf5gG= UYO2MbgOݏ^PURrG>0 LRR'9jZ+TjwSs'Tx}OFUVvͧꖺ]Tk}~5ăSҵ-5+B5(ޭ%i9(CR3U+Q~1:XF)\GT娝ji(J5(J7^?+6ky9{⻯"I- xW[8^gK=N6~#^3NQQUޤtE;E9'N<6&$ybN^{)+6n[.'i6P}o)> hv= g>x]Rӭ:JA]C-5KƷVU#oTRnfp::)`:xõҝK~ڥ:us'i[Ԧ ? OS τ׃]\2_&߉<9ݜvV!h<{i4R+xzҧ.zxzPf+wWջv+ט`1xRFnt}8J5--HZQIpoQAg^:^xcᏍkqiumRѭcq2UBU<	:W^Kޟ	f>/cqSc%sjҗmhӵgSFoZx	5_
7<Ҽ=xKO ~157]cW3o?4[ū-Ŵq./c,*b)t]._FVoMkh[$pp?_g*䠣4p(ҝ*kf7NM; Bu˴8P>n31dmNAazt))#RsuoѶ;xصfT'N˖	ɴm՝ھō?zc]K5xU4gg<~]kУb5ݵ۩V0rm>o]w-PռOqN ˸#q,NdlTr~K%|Ɗv压m]P-ZGFӤd9;kaS[؞*Qp\n_4班
 2nJꚳSiOCItحL\X>!e{&Ey#y(22:BQJNj
i~gfW/Ju2ۢ֒qk, ꣚[Kf$GY6\Lp5L|9j&~Ga%fI~Lg%dj-Py]oP''♒=OD?/wFܚT׷+|<y>"ܺmW[m߯߹#eB;	dSrDDbG,q#H+kBRZ?Z*~Z`?WMGKl!&Iml25IdR	iZGYSjTw;s-:?>w%Hd_ᯇ IGp[kmh4q<	<Q[-l}4&	iˢ}a_?_~;|x9.^kďx|RƵ{K~>)?Wq{_(,~$ytjR]|V5%4-Y??,R(&JrM;I:ֿ? J_zM	 w%߇⹶AoTtm4,/`k닻6]#h´RU>dIweՊ.3/R6QiYYkw <P_ڢ~{O |/oKi>ɢ7]@][iPMōsgR? tb0=N
uW徚hrLE59\SӃܛz{_wS׌>!xwnxz~.i\k>>E/ǝ-fl"sZJ|i_IE{_o Ԯ9GaZ;9cպhk2go9eow
_xĚWfu=iͥūf;|
_:JhC57*O r<|Ҧ7t1#ZUk{e/$emuս,~ Qj׊[jO_׮-k5׃|i}aNถk>-t籸>]}a湶U:uyb+;7s62]ok::Y9Mrn譠5Kk$ɐF`(დ1+U#VI.VI_wc"2j&O?8HW~ x@o:~sN-KG|ik?_ LkjGMk}>_G\Zj7f^mUKSOp5Zt~pS^u{~,5>1<m-/M̓JIRk픉q3ɸ;dYg w5i_]}[Wzw:Oo^/ொ/|VŷZ<A 垕i:Tt|Wn>4	Y&]0RhbrNMtziWe8B*JM<z_Gk?i?>)|6tMG> Ksx/^#ew;_gi5}?FׯndϼXo5pݩJM)mt}&nM[o>3xɼMUִ\|RACmx[◇VOMu6DxOA]׭%An:=vz>үm46+{;.IṆ{x)fhFYTb+RTKN߁-k uWXu66Ok:ťՅ0j>"'FLJ<?a]5yt۶)4/^8s8:<Dfܩ=9{if{p8#^ғmgu|^G-K+Ȧ2Gꭶi얍ut1OvZ(KIɭ,womZ5uk~ϫHԵA{my~p lY渙V}H_BmItoS!ŨZREm Bu)+9>mZr~!~OwIG	5Tֱ<2KOٚE/x6u wܺӴëF*zүukK&ٮnݴQڨm>׷S vso^--kM|Mc)̟LIm.>5{ӬZZngʋiԔ&TeUig}?,υ
Zj?Ozeay=>\ok^&"Ju?mmZ#y5FS,X#\ש*\In,nT*4-wm]/uoZF$KXRH@nm,CWŇ-=+KefT,9s[K[",gV	DS$.bIzfdAs#3>_י!0)DBXeH	᝝UUBe-SYiÿ.Bj^*?+K=k[_x-2hq<dLj8MUU}[	ঞ_ߴmQo %xr%2[V?Q`G2Ţ  G
(TK*u^&S}ڨZ}̹7(>*j/?h?Y蚅7/OČDI#j8;Y$ZOy!G/.
5u'r^tҿn1u0U(E9Zvm	 MF ]#ShX<%t"x֥g?-!_̞hty4hWrDZ?uݝ9R_]qoENiZKE okTs
VJTuӧIh^˨-KJPwGOjPB._GB^9{HsFr몺K=6L|P':RiZɮɞD4xwy#L0dX/" C;V#Jj㢜jhԌ\~ZrK]Zx/OSg'д>2."ӼgwMR-+O5iX[K]Io^!e[E|gYRSI9gdyIcB;մRQJwwG N_ll=QGj~45>Yb5Jm"]Tm,	hedVWf5PATR'd7mi=,2|>_V/ԝ/F&{.dx;Bӵk!k?j7ֹPԭ&O^Zi6gaoyslד Fe49V_N*IIg+tW~u3|­Z'UVuk;
+Gh/#iǺ_ o#:ܪܽKk(H<ӥ/z)ϒKGG6wnwO>%|<s}O]&Xѯ#oO2?3aRPR\m>> OC_KY. nП>Iqen>$1/Zsxl|G\}(EN5)ÕJMvWwYٗ­3')xQ?|S: %cĞѵ-o9ӥ2MFZMJ)KpԱ4IjKױX|e|-_kBrN]ۯ}Om?`k⯌>&4ONOx#3kvsj,EyBo.[ZQtwof -rf)j]Kw Q g&o?>'_/+:ƃZG</ >+uMR[h>^3h:wJ[jnmm>߳Q#/\DU+reoiC=|2 f -7=ԼOO\[}kWW] g15KEZ	(!ՇPozU8{>mR?/i_ž".>,Ks S[hs.-|Ag5z}@>ӥg NS^.XZۥf4rpIH(d{$i {dRO$׫NLRｕߙȯ3Fh!l7C$3PBM<W-i ^q>%|A<WNFg.aż1%ޠ/cv;"&t_IͧcJpٽ/O;h~'w;ʠ#2ev,@<'29<WUr"SnmtBm6Xn!ApI>W3oQ=ٹt xtk3BΧuer1X^ioIgwo|\jBgm)R)!lꔤ\KG^Zbdʖun /) xkD?P	}H];L0xƺv-좴K81wčbHntkYɷ/hە]ŵ[_yzO}#ĿnCaXZSEpY|cH(ml*Hi<&^֓_ko3/` |~|n?x c]ig\@EmtllDwqy%͢[1iRue'NUQWz.{Jq((G)%guݟˇ~;=~IyL`;y:ګg` wcR5r[ݫoK崥6.7t%3_T~ӿiۋOB(/<%WoYTwA:hrqky_1VK[?$M8_S)I1j<X*vךM8Fv[vgGJύɰJl|a}@ԝn<l]jW>iWL.2Կ$%'n]?3  '|{G>6+9[Ƶkvk$VZǆ|IxzK-FTPMqe|'nnDtNS՚T;~iʱT*ʽ?8uiW_Ϗn/K $x× (A>%6$BI,?W*-SViӳG?E,	滝9{rU^h5C<Wh~"Կ,iI[K6uMB4jHnZm&Mj|99)bgR=i-ϿΪ(7ҥY->־+?S/C $]NN+/d𶓦%_*x{Z午uur^s?_7/&KoI߿|y|X	x_Ǌ¿K߄/xoM'<Askz&h`]5HR_%80ȣχN1[jۺ?_z6Kgʓܼq_?i1 :Ƒ]nZ_kZ/#-񷁼C+յt}gBSD5I5qR¯f6䓺{6U`hR8KSwITVnVgo-*x6XAV~cc3>"Լ:!5[;oCwY:IͶiڍs	C|(ɶ+I_3n z2.j|UˑVbpjG˳nG~~.9U|CڵkkZ6ZkzUkvZ~I{$2WN"yo8/z.-Y~iWŬf9W^TyRjcMFTSQ9rN5"(3{_O[?OOs?^+^9aic}RJL(C`-CeiqkmZdWp\2㥉PSij\g{im;|Oʳ܏cխNthN:t^iF3h'>W}O|v |Ѵ^7 f\jOo^,nxt\S[m>}E~7d3W?iqU+F*%vӚM6
,<)H?qm+?I-? '?xw߉>xl4;^$ּ<?kKk׉#'|WwlC{+Xbe&>y8ѵ{Y_m}YOYVp;ӳizg>/j1֭n"UO
K҈n*TL.z|.&qOM,Օ[;o{ݟ0xSQ];[Zry#>;uCC0gsO$T[[4`I3j<elvJdrU%yK >Ti{dqp䴧OK{kk߶#G j_`g 2|<,Ix=-3<ڭZI	|/I7ZYC.qg>(o+u?>#N,5y*Wqq4$_i l5Mzzo^t^V}n\Ӭ,4oo "/*'pg//=gٔR_V׻ϩ~ϟ|7u5߉ui2mweߦm<ZUwQŦ&+u}sEiQTW.TW }'3VujIin߈|?_lǉuO
x{@5I}_Pwe_jnlcHo-:+^krNi0~ME7J=tmE>/׫'F2k^ޮ #(V/|7ZͤzlƗ^L6PIX5dVQI,H䴷)c_ L<Bϖr\i$<.%Snu8-'#iGI4~5t?3Oj-ΗzA$[SCJUWju#Ԅ8p=c:J%FQoIJ/澖gꟳ{ឱo+[!x7"7~u-ׂ]-ɽl4?Zn=`}gb!SxjWR[SRjWRR2mE.TtW9RJ~T'Z
JZs(ᇅ.~)\|]OI#iC~%-6^ _ EjsxJ׿cỷ.)SMjN eN.Ӛ.Ruˤqm칚vM{OWƟi:f}Ck+ek;𞙭(<=ZZx{]h?nǚqP۲Xӣ&ʕ(\.'%8k.H]j'F3«WrT_Gs
O~I| a
h~.O?%&cS9|:4ZxS-CӼxLtkЪڳƥ1UӜJsTpNsRHNNrʦjRN+_(Px*J:Q3SXJ+?߆ x|m$SV/mlo#_$ZZaEs>U3~$8)G"^m~UޟvU8l>*Ԓ?ٖ >6վ<%wúJ|K+Lёo>[K/,#6]K5MmCw.׎)*:XvACfRIZo]O)7?z>;nzׅt˝n,b02_@gc+0~;Gԓ**ֳI[zz+ 9ouWeπ9%ޱy=son|GQHޯ.=KV=J,`}+vVץ);mMl/Y |0|[>KEҾ.躎EP*Bi>1\jaueIs\=JJM(IGKu[XlRSYŴum%SƠ5ȸTaoEqa#M8U+Ov^z ]oxfĚB0XL*ѓ^lS1|cy{dp:"imo?? eOwмx2\2F˦Q[QvIqҫR6
<ɩhFQ]Yk<y>MV8TϚqMIZI՝ ,N~"`]
3'So6PY.4jvkF('1\_:x?Zlܥ	(քӎ"jB	FQv)I&yuɰ=9J)IMjTHcv7xfhI'SqhZYc{oD"{/.di14۲~G7'ʣ/+%gyI~Ov£O^WJҺ98NI_@𧋣?.x3>"x]f.%^/^G>h^aMsĞ8=:Y6&l2~Oat䥈I<P~6mJ1wx;SJ}s9M
Q m% Li_ W>+> 	=ׇcf|Iռq~ h=mxZ}(oxOUot>Syi콪Qr*߼욏dv/Z\LaEs:rtU(:Sլ4S*)ZR/%/&Ŀ#V M<<oK{{mqcb/Gkumwn|_OiHgU	>,,$)quu\۽+,`_:<GF[~	~U~P >#oci!~'u^^!_I̱]2BIB-JO7qypx*mx.6utO&|+ Z~=|w{=C=|8փ1gOx{Mm|Vu2GI-6{++Z޻vn|Myz.3jF\gi2QRiKE {N1v>jڴ~՞2>#~ <qJ'_GcXĺMT ϧyNUN_$;7.;[_M<Lo"T,kw}[ D9 rƻA׶aX<1.#FGN3r=y~dʝ9*V1 t5,wp/nu@Lp<3yJCgcTu';oqf!Z0P+nH͐O&dM&d0e]K9"ؑJ"m9EEuʡxYKOtv>?-E}ώk\q2[h'y1q"\!$Wp.pX$M}] =L%EMI^Wz _9cz.#=eia:\+-	1_h"GF N*(r3V$Ҳd?Fỽ֦9gVR|<U 0~_kg׭ }|t!VCn@Վ9.J0Yb$hFezmrR_? x+1X^þuh|)u>#KAYu=7N'Ln2~:N4N[]]ץF{{뽴ӧ1 ߍ~4xĺ<	sk,k|5wcڥ5hvϥ:lY,ZY
=~<*1TsUfi^K>'
뺱;6^y[cwWm$7:X摵uIw>L흊^ic4*n#B̷*\i{7nK<.)G4jg+0]kKo^{Y)nma"I	m2"ȯXcm'*UcNtSNM58JBBSU)N5)_ݜ$~I6M~g6<7^|6<!s4]OO_ov\]kX=pC*Iz'	EZR[r[a8=J&H:NJRJoY&ی*MZtxk⾫'GiO|iV[mmx J:]&Ego1,Q%7Z}҄/i}8Ά'&)K)[|q,WuOu?c_: k 5NDҴxw:ٞYeWsTz LOY.7*JQnwѷV|43.e\ ֕cRRO+r^-W7 ~>i_<Iv%4{xsx<wCE%o,.]W2*S1N
o&]һjHNYsU)4qmF>.	5}FQn}q=򰑮gI%s3<f.!~mū}*q1/^ י?Igώ÷ǅGc-՝KB=w]GiqkZ4*2ii·4Tl*rYݍTV}+\'ǚ7n'ľ"e1M>P=֟emteo$OЭl{|),MpTh1JMgG^nro-_{> ja 2L4,EQwZhϡx",ҭچVRL:Xj\zw_e	7m-tOi3xsed<=jz݇R-osCg''j}<5V')'{y>w}nt 3A>.(8(8#DHZT*UP `Tv<^K0tW_/?hڍ˕ IԠKh
iTFQ*8EzI4N1ZTW_;,P"4x/>x.X j	m|QUݏ(-e?RXbh#l-2_\MigenAƔ!\t+MZת˔fOg*Tuᶻѭk6? 	=WUb啯dĺh]xK|)*Zޑih5]7VL[H[hFc3:X<X3hI'ui|TN
OU}SwD< j?5}-/SK=jH֧׵ |N񎓨 !_k~~٨xzf˨x]z5׀k{in+ E梩o[<1iFևbTcRj5J{k6_i7'ٵiP%y&vkVs@KCnK8ѡQ|VSWJгi[nfE;|=aA/C񌚌~=i4?iQ<OMgC/蚕ol=WB-&Ŷy1b.XFJ6Yw4j" 3+;Q6[lEq
:qm#@m^ȴ3~ͅ<IO/"EFѥLS;# \K#GnD-]IG3W!1K4cAg1nVmc]1%PJVLx$FIL^[0Ec)CۖLf)obkUC51DIpEo[xodHB%
M?
j[4xux#E_a^%kAZK5ԓ"M$5v/VE*eV+(kJyɵtyZz;>^y6-ڣHPdV8|.2X	 yçt6Zj~nu ?_uIPQeu'+YVi++oӱ%(>fc?Gѩgy?7Bԓ>tf-|Wox15OS<Q0-rmjj.\n|잪."ttJ%?G)'<}5~8w+x^bnUE-GHmamRTT<N]9ʥtQKCξ?_?' #^ƝE}'ð_5HGĚƮ,!k$+[Vk^k;t{yުR7Qצz;xLtR])c;KdBYXrCers= ^~9?>g&o<hZ[h=ojGV2i$aաua5x9ԃmd}?ሕhS*]um;~+^( c>;C}Ϗ [='^|KzlH}PPeɤ1u,,V&Zwo5SUM]w!~ͣ;cFp94*8`$zrz6ܒܮu+~ ~)acq˨YE>w{yk^Th%XA#O5w5\ɨ9ZW-+Y_WCJiHwTnw34L"y">XT$g",R(vQ[KG˪ z-|VIcHbOH3O$dyXp|u3ݛtZ[͝Kyk<G<R kO$c>tl]JHF{Xuk2tVz7j.	o*ЛhQɲ(WMkKi"t/k/y'ևO8ꚍec:JYx]ɧuY6	ip|ͬN7խgw~U(5M[t?88>ڼF%-K$&S~6Q lx89Ⓜ$t~AncƯ0$Mkv
ȃYLW(QV#)4⯿[ԊʓK
bkx&8dUe" m2 ^YMҩw_oEIiwdY$qq+9-!~FѢW2}_6~ |ngσ&o<S/v³ZhkΊCxI>Uז4pPc%IԎ%.nW뽛M,&*"(/0rrj-۪vkoy.? R[\j 

>,mHN:ѕvEh~w_=
;&bwXOiӤ,%ouv| |J<] 2KxDUqwtg5w:w#ƯiOy4O*ܬΐF=n᪹N+Z5ϟ*ZݶVC.,gx*xxRFjt-cv+g 6S|{wqy%̮;H{fYnI4o4cguI)|/萧
qNPwi]->fO hWWwfu݌j	[4ɹB9#Nڣ^D8ADSux^eVȊȈʛ`By#,͔n.7io~]/\]YxsWMGPIA[NxeNt)kۗ FgF6֗*wks6w]ht> {ks
,zF	-3rVξZ!1UURRM+} ZQK2	(ЍIѨ]O;˭SWxTկ"13?uH)6ʑEl!s$gjg{ٽ!1KޡG	%{{|Ij;7nKZt&9c$\%
Lrg)u?g'ݩrZI5/y+ZS,Z^ƅ%ˉ՚z8Z͟E_xRm;K@7W2;M-LiwknRt2Zk\+Uti{i?y6ƘR~JycjS))+4v]YZ{zռ;_zE-V)IQ`xxfcdr٪TRjIRݓiwz߲>? x|e_+֛hmaE-Ϫ>*BL]iKl<[ZS_TTm^qj?wF2V߽? ZO= Spw/3M\Gx[sۆ:}i{.[(\fuEi-Rw^z+
a?1xK?ľ5-.*^@񽇌 	<^gjWL7T:W	*n٧]GXcFj7Nޗm&[ ?hWռQ^f]kqZޤWQ[-u(9[KMES,]wViIkx90rM9+7\lRV-:ŤF)(o-ogG)&ƚ]w~'̡^PX+?z*I_/ _ e<3_> Nth>(" 35JMxrͼ9ZƾSxZǆ|0Q̔a~g̯{[YӵTkc3(8|=Zi(9:g9s¤fԩΜܭMB}+Oׇ~XjĻ"2j6QKLt{4EouA\bRG`00&6\.{?5&:JӼ_-{Ww>%ZES|g~4nJEExk+Yi3i%{n,fBY%ok帊xЧKܜ+룕dxyP8_kk{A~O ~&|m>|O%oXx I׼M/˯hh,oD{}A|172M]"Ǉ*9Ji214֡R1)ӔZ\yg<kk/-(MFJVxN2M(&O[ic?c^U~x @վx[f>Y4[x:wU4/:ޓ'ef$Օuq%
xcҜka^POe^QJ9V?54%$)У6߱UTgR59qF7?|p5{kEQ6ǈNH{!؊p"q,!"$ac))5+;5nguv_Fy*|^>YZ%7[ԠI䌬7*#E#"XIe	%#75%Jg{+ViN/VWqib!V)Odzݻ,Kя,ްvq,Vv剣eY7C܂5QB]c}﫺n>m^5swox=l/
#>C%|BsìM¶^+܄7|UxFRUOWBRN̺a.(գR3,5GJ+թVB~έ8^\ԥ܍=/%8K'J9A×^=NuէNTRVU#(8=xž%0Wx+<it[je[}i#d( X9U8N9J;FRI$֊=黷9r&rn˫c׼kkK \Ebڤ7$,tż3-!V ByIios)[	 :L8ӌK</m{*FF$!UK]Ŷܢ[ioRW75mE'c_x^iѣmc='mRM>[Oȳ̭uwq=YSVU)IMsMﭛZm~3=gQ M,?(,R_0[7*_FY]<R0SȕO.NeݿE\m> U'ЬztI,𶫡wHnmYMv^ЛmR	t]^)tH'+QPn?@0Iқ2%'Rmxk5k0ECݍt}4_W>f|O!{)Qdv}^]"GV8yc_Kk?6y=]?0L{{,bEu$B8ʹ_$9ll1jb浖v&m}-'\coo'^(=nuymex.t0=5FH>Ϩ}_hV9eIӻM^Q+wի\_mui{?ciMOt9JVi2Dc0/ ڥ#WkM.CEOm+5B(W*:fX1J3N%IaV|Е\-Ob(kV8Z(zM6wicƤ**طZP^ƍGI*ӃSwDLw?g  jo g	~ </]woR6Z kdF:i,քZii*v??\UWUi)J^PqڒN[Wu?^4\7̰yU,,B4qr(bP%]$%e?كЏ1|#uOꗞCk*ǋkuxK2qumeh1ؼل)u*M*Nr^\3qy6sW,ªJjx,uLL]9EN"yIB*q ???W/_7x?4:O'ԭgmOH_ڮsZi:tKMFZrK{khדO[&1ӯ9'.J|&)չZ5e7g	Rn:Juδ~5$tE^RYӿe/'>~~{mG[[t~ȓG x<yՏ>9sqsex\jhVjwZIOPUIR/	UsqI9$N'x30p~JbN)՝YЭ	:> ,V ?|=]|Z|'-*-/L<t?0u=/ouOii+^%Ka=jF%^u]\4c>z-+|Kn1^ڦa`*ROQ:ZZKO˛cwd~C?agG{vKogWdy'?֓Ӯmf2oH5+KF&_I%(~VK0?kuV`r%՛lgʷrKY%8[oԩF0!kE_mI{IΦnoB${zվnٽ&l^ueoE5FC]MÞ"d p N&qݯ#Nۻyn^Z\X#BMQxCh]0IrJUa##R5ZߦMG̭%vy>k70pKKm&hEYcIcEJ!>*o-]3K+}đ1$A`,Bg`Qpw;̬Im3䯊	|@EIltm77ee*|пb4 8 <*Rn[>~hלc= Z"oK`o5A%;	Gbސq]ن*m7Yi6Ҥ)mXfɶ	|Kh<=we]^jIn BJTydUJ-wDK̉ix;u?& wd]!<Y wu|ow"/<7˦][~0wLnxIӭ8X>҆_Ҧ.Qbt꺽Prjrğ}ztVkb 2|sf+iGQҭ5Z)k>axR5P4kFӮۘI^mxb!9*ӛz[jjݺ~O~*&0nѕI>VFwFT#dWV_ y/S|{6,ź3kxNUEknǞ^ZzX>GXߕ.Eߺ}oMW T~6zğs|:u]q?focK_-GWVxVSx«m7Uu;۩.+kOW1sTԩ:s$Yo=W	$cZ+٥Y5:o= *<oWqiwIԼ3xł /xo6Wzg=7LѼaZjZ'oEk:G4KK3}cN鬮E߻cFpZw#'m :λQuj?]O폊<)5Mc+'O-F)=N屽Ӛxsׄ7I.W=wo+;x9o駺};HksFFr## m[V6{aE
Ipd'E5fݶ"]inǲĞ9mt?NWʺ_DK+ct$tV2\XK+xd*Vm9[K d}ho`qj|9g	~ w__wKxGOZg[Uz674Z}GmsM[}<NEss=\~ʴR}VE{ZZ7>5Cͨǯ!|K]f̯ZmҼyz[3`nJ#E[FEo֟/Gt޺$VxwGw;;Þ|M-[M׼;}[{F4tJm,mUDG}9@0|>YE%$M]IXTu+5]C_?n/¿,ukΉ~U^<@Gm$c^처eӮyOZT䝝[Vz_lO;)I]v~@A:=1޿||>#7L{xıڶl$oqp`𼟼H饅/ؽ؎#U+毕 o"7>>o&|?c
DvrL4DOH픛إt`V*6k(zw?!kxgJ</x?BЬ>3j ZDaX)x"}k^'#]qk0Xڅak\éh6vb5ZJSp]r7'md0
+IZMw6|q~+_l|!)"h?xuon|U#lZitsKy\.}PFxLM(
R5wϯ]%8 oЂm>-EkW ĺV$iYUJn\^H
%$Z}(_OC&woW}JYK}[k6>oןd6#p5)INrMtף{mЗ%gu9tB]+Qx̲{/Jmʫ,*s*}K
DpMAkrSaۄH/HHR&cw$q8wEU'˹nPW٬"I5-uk4%)̗.wx+Y7~PuK|]
UƟ)kWK\'	Y76ܼ~wevmJ&S^Q \zvxF׳O_D¾%u}/^5ZVkk z0t_zNcOXԅ׺BS#%81kDW;/
M/+ _58>&M񿉴{8 yu=?ÞkfSnV¾JȦf|Iw#	`t&}^%aRtTIsNo}$y1//T?Z'⎯Z࿆êiwe_xTЬtgO׵/i_t]AѮ5GSFpzq):OҌ7F0wmI}]QhUj#qNM{jM4Wݯ7ǉ,>7rN(<9t)[o
k~(Ηxo }t xZOMk]^+kzni2$0jFNffy>_q{NOx\UjNQť*^gu&⬟ek z'~Ӽm{H+>&𞩡 hh'u]BXo<2#M2T֣+BPom[hViWҕ*o795.mVQ4E<F.U:**rPoI=%7vgjz|X־4i6}s-JkǪj{[ߋ>/Bcmo?ףTrӛz%4bPKoP)JTc}[v/ |$zW:ψQ.-dM[Y4{3AyguF+%RNR_Ļv讞 3ѽm׭?3~*O?^4ĒӿGh_k fJlcyjpl-yHL^5hԒ[-۷u>lS࿅[)'$.sru.\]cuRCncN2Q+n}uҋY4+kx(%}!0˗y̆%i2fy|<Ћ^ZnM>c}3'Յ{c55SlI#yI̀URj# ?繖)YoǓʨ1gn1C<F85睥`Wppq2P9'pA^c 8oFm=K֧HgLEoe<7LE*2̫#*ak8m˧{ZN5\/|9ma^9Ҿ3ϋhrTeӄny[滽%;ӹQ	Y_ßGe_:m"໋S9;euntay=q[ϩ܈݋["K<BړMtޟr\|)k:MvH3Ɨ9ev
[d%+JJL^~=ua #>rt!;}&Q3`oE»|_PT#^CXZƉsͻ Tu\K`X~m^}v)75gob3$uq#4:o7p0980ISI+jQ{of7rIdM,͏"%̬_[ʥ(m>8Ɲս ZKzx(>*fD6j եؓDxy}D"?V	϶AdiZl𖝢a*gBI;[[ԗ>oO>k~	"LV	Yek777_If$
,E>ۼ/zꞞZcj<E]4+fl9@im[V_q	uk<ߙ6SI؄o
+"<2bE!߻~_@|ɯ-T,H6ICH,%Wf.Ruzaxd좔ePfʒPXYvF;1ƭ-&+S/g=qEif-+ocٔf5T5V׻| emmi:u:-y?k0`C$WU3Jl	$>\p;;~]_ƶw|^uuxVQ<3yS3d+m]ewWVS˦^,8*TޱJW4mi8;kiMη"}6A[[+-ivK{u}XYYY<Q[|*t0-^_TսJ]
a-OiV>vO[h~ iK
x@|U]iǭOjV"n~4=V-lۙ~.6LeN'R]RsӋN\dW8	9<KuqTJB_8ה՗%uR)
Ї40l"?ftK["9b6!}iyWgTO۰=Ehӕm|ۻ x[fkN5lMIFvc8V	1.]mܱ$)F)*Q $B7WjWm$uv^+70.$
)茠1b7Z2帼jX痄O={3/\gxF叻U/-@eco{v5RxW[}~i&V,xO5gxPhk1kG:͍֎nRrMrߛU_{g{wwylm >*2^<閍vYwzcM:O\U 158mU/9zZqz/wRw뵺uyy##Xdm1d͕܉*R2PzJnqft根SJ
i_v}OF]X"49#3ZCku2}ܫx#1UmݳҾ%iҜ%g(zP4g+N]-k~}|dͶ(фPƂ0<k!EDl3#>GUu?+9֬Tk_&|-<fJׂ\7}F2p	B!,c]oA-8AmZߘg ^ǆ~*YZ>JM
4Tuhd"{+"6{%hs	噅De5'mOLsl4\ӴK~hN|~6څjʣz+X3m-Q-K9bWS*:ki'm+;+uϙ
ֶYy~g}?J5<Oڵ)U#k&:D((f7zߴꬕI}o;#r^ҵ[ti;yN *?~;׭ ЧԠ-uqmyu*|RSpȆ['g1h1>=UTe57k((k^fհ|']B^I&M-JV}UFat%u]+)wu=JJӢ6n}M<7N\ ,:VgRRd/*x)r毺gS}δXƚ~RjN2^*Avn7Zl|9 a3h_i/|14_	[<QPMN<i{xQ5]CK$^\%<+=W^*)cinNoR|
rP42ڰ[309V)$.eBjS8qrrx)ds3޽wzs,tnn\kM뼊dd+.NG*z+FdMzkkeQP
7sQ'tmGZxfxKTȂnR)jXav>AFuV!Xċw|il̠E1\\)EXA.<!%V:M5dɸE$wWH+DUA"/!_Ρ->gD-@9?Εs*,GqEnV-6W?%''ƶD:<1|2m|Ya{ƾ"hjq-+M̩sYAQΜ3R*vi!˪Q$7Oūݓg~(ӿ=DYͪ!wBؙ$c	R ::FatoUׂ§Qnn]?x	A; Cv{zhr<ȷ)Cy+4h#*^"$ew-SK~j<b{_P!dHAxjC{$t}VP(
7gVkJJՄ{ܳ*PoUѧ1<mJrʭEu#:46z+o83#??+xŞe=O	/mN\kZG/>֤+F6e.?,YfG)R2FMՕYE)9^0O 	<0<O\9VU*W<JSa'v X_ 7mT#cf<Ii*XÝz4iOĻ[Si6r,^/x{O	WX((kBcDT/~0KS斕-{'Y8 #Qjrl8PO0'R_XiGV)(E]0mDU"R_~x&kf௃	/ulEu WmH]bmGXڮ=İp%gF')A*J<r2ks%"
g*QTҎ:ҬmBg#rk7? ?S=cOx_	O]N6]v1#Oi!iVYӭɬl_ |E)8#U{;UPB_ncN1޲Z=)⽾5JT(}f)ԇ~j~3Ŀ7[mC>5'K^
۟ys_hMB4X[ i)(L?tfyk˱yN7R8SM9tR0FTQt.W8Ob*bXr<5xbV)ƝCUJ*cδ'BT 2^0d_ ^|.EO'<M+xkW^!jj^6tm'Ne{W~ZJ2˪BkNNrp`i]Y]R8Gf/qx_Rʲ5luDꤡK1,F"IӪ<   3[3WmI5 |)ƥ{G/Rti^Zx!AGM`4kMD3&XXtݢ^t{/#1**s5-77y4Z^*Ij/#	~!M?M:;vWX9Y-_𮱭użw=ªRuViYF{gPVծ _x햋eaw?ӵyV%D%*$UEN+rmjjw^߉+(  Uq (㦔cV"鴈#yєFӌwgq	^+0ls_g=EkVfU\\gv-UYP2xʤU2N6{gR
6V:J,#R:1$4r>d-_xʴ,0Φ0W,)]E+{&J<ϕ~;|+i|_ X`[Ef7RY+qiTs6]}՟}MC[B9kǕZ7\n墿<9PAx9 AMW⒲ϻ?єݟgo\"EI1[[1 Ty&wU
+(ђRmZڻ6?M{>о :]ţv p$2%A(8`OJisS;}~39%w_o?O#s>jxc_|AǈJi>$_@CzոF~!&4MF+˯KcZ`/NX/sW8R]ZvZ%%)7e}?s5B~D?h˒K~6-[wȢH޷kon S )kZ6: @/Fk~!l=*)]{uyvJ|? U?'	?dMv_cM~з? xFY#XNfƿ!I-Qҁ߆ok{|Ijn␩Ru\(RMf)Iƚ<ͻnnǅ<gG`֟V]`[Iekœټ0#=hS
H!ԭMl=eRB)7kծZg'+7o	^bn,nFfj*Yڰr3LCF9H!>'8(,צo]Gs19_x^Ɵ,oL]uS[(cxh{ՒŽ΁aI'RwV۽*E-ut?\?Iςޡ2x[ob<-wڭ>	O4U+?nu/rjG-+8 WСYPݹMS}޶§/xﶫW_ix.M{W[G=2mn&d	bt	&D I"KZ$x#jJN+16^mk]]RWߥc+i>
Ɵ~hgc0xkIt[Zx]՞m{v[.'8hu"JaKQQm-_MN' J~ ~'ցu|?$?ѤEω4V-rxʋLFetWvJ3Ib\ײ\>kmn^xhI־o]?gqzrxƫzv t=އV8\F\ȉ, >YpX[ ?*$[vuq$wb2(EEHB]v]
 >.C1Qʾ+|3C|KMxOMolˈlu=>M/J8SWb
ϟEF[Y+$w"PO[jϞ?^u韴|G735OLg֛ğ"X)SNԬ|wG"zj5aѹ%'U Pm_K3
'Go=3ڜH@SkǿjI,?ti&w0mKWe#1HSi*nPݽ+ϲ~|wJ ď!T<J a>Bq$?~Z Y0 KKmSK9E0YxR~	4^֔OYS3p_ޓJ7z{ito?Ch_߳o$OOVF6|OY-^Z]O̒ku!tq^,,lV.j7eV*0r8-/75o^hͨi ~zM|e>Yַc2i}cđ,Ⱦr\i>N5qXڽ%M\n4Nv['ߴV~G3O5H)Մ%7m.bf6I]g,|.&ܜZV*)F"M=[ ^̸6mII(HS}J8pVfY2J1J)$KE^_I5i]E$\E%ˆ1tw0<Zbkui5gyzmڊ8-CYvY_]Irֲyfn4sq[#X)WiYYvyOW~왭7_G淩['_<u,v^LᕶM#붑i%k>aoJ<Mr}+P7WF.-ZgN<iFJ|׭ˑTexvIF%ӗ崲4;γ:Ư÷uoA,_j^֍oq^/q_zfwTQ*IQ4jJJ>8r'gN1vJMut=jUZY咴hiFM}kQ~%|I3C R|Ok:ٹ`/H[&IKXɮkmجzGRN 9B1Vr斪*Vռ=:+V|שvoy_?(7ŻKg	h/xZ?oJƿ5xxoCk}ү4Vu'M׫bKӔ0_3wz[]2񭾱5<Ck徣}zΏc^#ᘵB]AGg)m'|-ZՒomn_㿊Zh]cOo,T՝4BMszk5(nЋq0;c6G}䏶3;?=!oa֚|Q@c Z|ިV2t5IEq<$)\w!m(Ït9$~χ0kcRYY[B$9A]ˎWjcJ1VIO346(	ldNst9~)oKM>	nb$73Hʈ	f pC?iZo q} P3{/mpOqbuc˽5tߧ\{r}Ϩ[ap1ZM}Ä)'28BFٙ턪pmk=qZOKw<Bol羒KK-ei#iȮb<Ej$؈T+} L&o'jocx&O6c	$VQq$FV|ʐ)Zؿ/;ˌGcKmxSc򔅒T\̦
'j|1Ц<M{kh4])n;/Xi6VQoj-D|ymDokr yG/sG/k>-|:' jKX5 xڭQϳ4k6I[9線9%Rå(w 7G
)eP$f~8Sz#v#B+}!7)V\ng Y6}Y=b	X;R uُbI zpIEYZfξÆR	»mfnU;IALCuwp\O#Nk'-搗;3;30k
׾#xNt毫[$;X[u5Mw2]S0FpW۶)~"Ei'յ7nV8hb}wSHK(¼ܿ+I?M?|Ed.T+)`@`NIP]K(Vr8"i9;E>[yeh:̑Hc>XP½(\]'G3Fp`ͼB!Pe11_'G< 4&u܊d~?C1ԑ1`dm]ݿ	6MooȒfQ	K,k!@X"VG.uޚR]/^'x%moI␄kg!$x%{nq0	U^Rct㽕Et~| `~z ->$|sot^-oxw+mi$3hgh:$%tMFIm8̳|$)¦'8M)*JQ-藽q_ݞx%ę>8T0ZE,:<DUGZeBjr*sQN3i?^m{]/2sˣ|@tTt]cS}_L,~'յ+M5mCT[kR{{W`VЍ{n+Qyɷ&.xs^zRN_и#˰9H 3(Fp[1	F8FpƪªpT~Np ·_|AҬ>cᾑ%iiixCc[y-#'|Ic*/HѧKmV:R0OY8OM;Y{]jl2g[eXM6:"Ȭ0yL*1sy^^gK+yc:6aޱ͵g mmY25*8	U{OO"t 俙tf(Y%9#7EDEȑr0`_<? Y#YA1BaYLh2)9
OE5y$GEOO64GӴv?%%Ҭ`c}M6eC)ub|ϛߖ[tQ7ҥጻ%W8''72]tKٷ]`%zt@)+K$qǏ׬"bӳE}4Ajn{a[m*M(Y!HB;P08cم:b'R_?L	ૺM>V;߽`ISkcghbvR<d >(1`m
zU9lo~G8GV^˲rD	8pfa{|#cd/RV黮Eiv-sH=C`ܿږUbK>m[9$vw]O/̈ө̓RjͧUv cI/?[x]GF;V_k73G%S[]^Oj@1Mqeb8<B8C`maROtޯk]U{|),g4IZwIwO*~,_j/yI_I֔bf!w7C,RB4߫,&.1<brjVmk~KʱpQ\oλ+x3Ǻ5O2$Mbm+C,cKtۻ'X|GR>"~yvww[
TNogVg))S4"l<Q*TNR~I9%J|䔭)'s_Y?x[Ěo
i7%*|\i"&\(l~v/U>փ5[MJRi-;;!SRTQZ.2_4vRI
|Go<kq-iZuуܝ#Ho5+tdGR7$mu~"[oof"OTgThŧJ*Mٻjڳi+]1kY${r!dxvBUN\<o-ֲ`-_vFux8v%ӭKx=ES[Z"1Mlc}nTJ۷h]jwN|yyi2:sJ"`frDIgY'|VP20>i/6e~ȡ]{vdNI\K'mFtGC2J%`%&Vͷ-]]IXjk bv!#M3VP3*Ѝh9>=qrէ5: ^o,K~uKmh=]{m;95mf+i%iogYiWvvo_.&T9uY^b춾z{~ӧOSRJ_D^M,ɪ#}c]cR^8w4x-k%i6߶{ծCǞ7[8״/]MqQg2B6c	D"/(axJQRe(J粷]>faƥ=<Gv俶/C'|}ּg?宅|K%ς8Ʊx_ΝxVM~[-gйKg~TirNpr䃭Uve[%eee_O<N+0 [2_7T
38;eR4RONwshߋ?o 
6{ !_?[jZ^<ڍoxwXսχ-ͷ[
Ekc%E*rJvj<ڦW_(9p_ccFxWUFq*J+jiC>oz?nPBFa_imuMiV<>/4OʲZ]>#iwT[:R,%${Ǚ&✗[%m|N wqULʇOq\S*ЯG
OcNaIRi9>Y/ _F~_5[7GǺޫx~a D[KR-~dïkoko3kq	G*BŪД	ZV׮?s"0ŪzSQFcյf Soxqnl-xG[DRM_OO/CMR+{FX'[XpUb#ˈ˱xd՚:5#/5*m?;yŸ%+ˡ4(`i֫_Tie:UiU:r9UNyE_st(F75'|.߇4/_tW.]M\kVg^#ΧIy6{y`]wQ2 d}_sJSW|/G/p8:U'/yV[#9/eX<|\c[TRtmSRVsi~~6ǭ'oMWĿjڇ|/|i-yj7gTޫ▷Y<Ou[Q[8<'xE_ٟx>bL>f.0tRP?hQfB-9~C5,n*ﹺ̫J\ZZn# WW//7>FŸ5?WZSH tup?~034\ 6_Ob?6[Iv[* ?oN`[֑ ,b2=> :wuI$ݗWcKoow la}y3{Xh/[J`mu%l<uiTo_ϿO}$Rm7Ii̖cwN~r'{Iɖ2H}>ep84⣢u5{i_;<Ŗ^l!2C)
Pp0vCÑ5Z-,:\Ֆ˷u;iH" (T27
>e?H85KK_h{*n6~d^~
bjpgj0jm%mw}LicM4Ȯ,kfwf%IK͆b?zl{AS^k믚[%Zs);];u]X+	HKF"
#	u2f%Foci9]6Zh^ޟCo[Uyt;|4#Pk-Z{屹qzllYPmNP-$KNDZQ)+?;j~?.iϧxIne5]\&Oִ[O)owukGnھ}iVڌ ZԚKoOB\Ѥ }/ܱdX.G'c3d%Iicc\l" ݿeqy
jQ? gMI~xh|iq+K=ߏ/<Qw2Hc]&->(!Yތ!dr˪VwqB[`MÎqywjKjec.ª9+$Q!՚M.kc	uU毪x D>j~C#Tx<E _x"T7xn*MWvvso4Ge*^i_]?~ <[x+/4KxZkռ6ڵd%~=Ht=GJY8[ʯKTG׳4ͣ{k~*?E^)Ҽm&|QUNv ~Ե62_$]WXb_5PnCs>QqcVTom
JҎ~^o~Zm}sW'߆5uxw?o) xmzW$חvwVWo`=(**_\8)5kk+[WSxy&i էco1 `'3' ,޷ J֢#j$;H/ۻX-⸿F}yioUQvIJI-IF>_/]e}.տ|ϸdSmn|l̬6ݯ+ՂywyLc۫GmH;*7XEpB w$l"V"16gwqT d$oqJbUـUc70( K`{_%V",cK>T fE	0"2{i&o~jOm*4`BQ,%Rʎ!xefվ_$.p!gV21Hs<ya1VsW߸ky7ATt Iu^YsxWbouKji]y^r5H59o?T
hr*.eUSU.uwiK#zWk}t^ʹ.5	V9^lUw+71\!0ʲHb1$^:v~-Hqq:eKkȝd.g,aXbINk+9߅ poUw9OT+o.'$pLKgQ<#d9UVͯnm9ݧ|'W!IYCxíqq;,$Bed{##gRm]_N>ĳ8]ѢOʚڍW1M=;AozSʍ}uO 訢A/v<ݾ6PG '^VTLӼA}|]f{4ȷ1<Wkws%ys6Y+EdێJVedr֡<Bhv{_V֛mߣc .伸%~קqj[POys#Y9y($ՒZ6޻˲:hѫkvnۣ{v]6Tϋ>'?
tu6Eiqqu>-`*Iw$dy*iQѻ;n=orr{{z/z]_sǚƃ2of-+L:iZu-6c\UsZq6tR8&ӍmyO^
o?v{;WixP,%ҭ4 Pteo&u&{g9<M,:rp}RM_M4gR*>vnk]͟>|`v6&[j]WWC,Au,?eubϷ$Zw͹^{~RMI%nOva04"p#Fn;d|'n͡NLL@"7;Fc#	ſip&Uw1[cϼiz|O_x¾,:VGai}wk}%5;;e[i.eJvꞟ2&(-dkiM/HSV
w9ּcx)a*mwg@6:Ƌ3F$>ib饼W*n^sk+Y<>붟>$^Z\zmnHe]3GѣH]5{GQn-iuqmwTh~ >^}eގv}m!lE1P3	etsB{Ϸ﹝kᵼ/5\o,sL&@e
]"GvcݷzyrCq| E;ĎYMVycuuIŅR[I 5ݐͧ)Q6ʪɶdM2y'R6<o!_ݖ/ Q'ûY|Or8.d\˄ W$4h9!1adV"b XKMN_J\>G@⫫cĺΥ^-5˻@[iu\_\MpVVieh.RTTio6	[Mw*=el~fM1 q*y7I߿+~fS\=.Hp4ͲIڻw![&q-?Db7Zi-Adbq-h>BT.qOY˪9FԎ[{|w
Vq!H	6ch`$|nd)#yURI-V3OִY뷞5u{m?[-rE:r^OkxWOמ=2[H!:MݜjJKd߯]w9o.qww^i.N+K},4MXIpe$Pŏ7Q%e~=6־_ǈTGwtyyl$d~g6J6;1bDn\a؀F2ӏ4l2`zWoåLmʱq% Y+*O)p  % +[ [ 線u 2ehc\ǵe1ʲgTդM;K.M2 G#%$R3$qQ4~+~' |3k^*o{ؼAt_Zx}GkSj-kAKۘ,(#Yq8Lv2~n\mO_)+Y-[\edoxӂx{,oL.xlt9VrSU(ƛ>Yʬ7K l.dE|_ĐLFo/ZBmu},p[3FMDz%_c<.NJe>_iSXԹ.dovn7?О_Ay.#rXF#[(8yVڠ_m)͸ѬKTJ< }#¿<}?dӾ!W'TmsA_>'­n+]/ՌzMFͮ3<1O_QOzT&WQҵZ
}*<wx)Sɼ.cRtr|(Nxe88jV:% >~+xPO^+1_kL׺ǉ|}KKl#֩#xm&G/^ /IzSm{l۷܏⼵ԯiB13. :B+Dxyng[X4xdiVvE2i+mE{n>Yy^]?&򻭛ۧs!C#K\ dEgFcLėQ1HMF,βP`/#l;)VD#Rl&fMGKcUcK6e!G/pXF.;ym\	JGФ_י5ӭ%^Zd_izo04%'81ؕixٞWKSK|2&ҵ'S;s=؍̅bBdjpQp<tbN~QY'Pl]K{UhK?Ioİ4m"k/-,(Īxby 㾆
J6Owq8Ee&WvK_?a՚'a9H6,MʹBqJ^UmM-N *ߗ_붞HMK-`}'yYIہ4;+NT֗ 2G)b@3UV1J7=Nr6T4CtB *ѪB3!ڮ[?ւUu	k慬:Eyy\^*>!76rE.2iH^;ҫ8G,}6~N3CgB9muywOƟz [7O8<I<3SUf0ۘU
+"3!iFoMo:mE[+ݷpSY0-8PRWt=[mNuGֵ,l#'в-j:xn6Kk6AY$g	ƎRqM{km*/)
QZ_SPjeн2 <ӵQ}{Lp̱畁ܿQ uw[ogOSȫ)Ԍ'v]>ϩ:`.dђKެ^/~o[+H
45cl!&训u8$O?!i̴sBAac$0.kgWMuw}Sm6Ksny&7mhEzmtVEp$P*c}Ƒ\mJ	J#wڪ$5G@$NyzZuh;ߩ,uHgL{+R6Xy+\H&eX'[fdT)RHdp˴~_{4iXi47XĚNT..ӦbǄ/lAIQI^Tޜ?JrZs]]&^ϣM8cjӜܕYs^6Ӿ+	16uc#bH" Gޑ,-Ē?B%)sыKgOYӡ&'Mݵz~+	1Эm'^$-!:{%Gkhؐ1wHYGlWʇ:-CaUNIޛ\jZxz^sM'WFJ;5c;+>|\4|>Ig.~^xUx0^xK]Dm|]Eؿ`=L>! fNR\غxG:4j%rSM ^gyܡSU`5\<.sʝ:ѩBl6yğ׊xO[Bu1^E]-|&/%+{sv>x	p§~ږR,-g(͸U#(;8߻?r1p8Í1Qw
V]V*%
VNN>^/;)?[?wo~5x+'}C~Q|-k5xsF5O$W^O>hG5j:xC<Wsg!Ҩ*jB2RT
:\mUY>f޿Y?ٞT:*P5)ҤT959Ev3]WT|Po'>0'|)_g, +E|YK :Gmi]YiWg-QxX>/ü/Kps	y	P76"pўt痬5:DmӜ#R?Yp6kӫ6%ӻM:U!fTvxo㿆f _׾ {x4MUiUrѶ~t7"K_ùĹmOٖoמUe/W%ETSnpq洮WG x~9[eqx*QuXpqViӔTbRRo? 7Km/x&_>x?Ot_|Z^hږAe]C^7-Jy U1XJxtjԆyF#jҫiSJGyf9=N[OdYӨ-fW?)h'^'%9GI|Ci/<3OiZo4KMCz]Η=߇ntﾻyvy),X\[8}kWNfԥmJΌ+SRqi6ҷwm< .|1oy-57'i (jMOψ<5"L[oP(1H*GaʓJjҧUŮM+z?CMWwˎ}	~@9:w' }?5쬮$þm$Q3_,DG 'r>Ny \w{k {6dROjK:˝HPv9'qSӋJQvO"5m4z|9" w#p~W\Cdw8Ng xrJKˢ:u}t~CwX4	9oj|Ux+MhyǇ|9e+js)x +7~u'k7׫3 h wTOoM)${ψ:7o|O#uyOE"X-8ef43Imae+.[ofԻe|qᶰTn-CũXReUd!elAfmWtue=msgiF+gN%XHqm1{SuvGYJT ~_=	s ٶu?غr(-د yNN7}mUsj۲իQ)Wg`' g(Q:^՚Bօ2٧<;VjǶyt>w<SaWOV[k;09i;ѷds^ۣM_Az5}>^".it_/>˨\ۤeya\oH4ɞUg&z;Z1wjO+HǾ4⟈?_Ǻ׉5jڜ森kOR).goddI#t_RIٻV^C烺BOB# }=-] 2GU@CBd.'hc<szsڜ5.oF~^?x#m#/\KEt;l'Ҡ;͍-c\\_a/	F4[I$Gg/--5#S[/ş~||E ?<M{>MgO)|H ~<|<Ѽ[m+ٮ $w~*WPܾ(Ҳy#Riioj٧xTXfYۘby_
˛Iwoo c*\#|zwKﯦj^U46f%ݍmuhḸ/?-eKOӧו+?e_eŞ$):-!H,Ǖs+$<_P_7ozߤYZNUNT[@U-P@T :*ӱj}_̪LaRPm T2"h|DL
Y
OiE|_DYAUKCc&2fEcXFP5yYCW.WxgFPPyH_dlч'cԌq(J
A!70ّcav&߯ot	5,giIr!\/_Hq;<\U;Ȅd&!$h+^Sʾ0KC.Ə\r4]e'Qos
jWZVj^eUү<$;2YN6+zNWWtպ;3Jb4-f ß	|>:3w	sS~ྺ^=wR d_If3=3spf23/RV{|&ibj(/-V#[R\X^X,v¦KϵNdv*F៶_ק_9^[Lff7N0Ɖ'Cڅ%7L/v4+eK_̾  *mk:<62˩D/nbgY.-nX!_NY=k]Rݦu`5,D{俾yI*\<t5ihM29'23O-8fW	jOkgD3O$@MnY˸kK8!n%ݽ;i^s pM|_y<F$Kt;MZŞ 4-.D5c\Xs},-Tֵ?iu,?]?c	ON\+῅ >/H<KW4yxR^6i^4v"w].c%|L.ZM8҂WI]s"`ڷ輏n? KϋI/M~m/>,į|EdvW3iu⻨YyE/$<M8$y9b䗡NT&''
 , aپH wiwgn[=]xY^/KuEmg:PkpQ[7ӫOޅm'uoG9tߋtֿNG=[h[F,m;@5"mW0Kܱ3/良įS&I.׷oWխK օ]#4,HC&6BΪGX~F;>FEHIf~Yn!]E4inar"Z	srRhDFW|v{71_-ԗ}noi~>x;N<#]-Ŧ[AsD(l3J8hT[h1]z
m~꯹E+	z G_|aq+3<&.5Y43y%dq*תmjAKսL+Rim-	S٦'qMk2TRHk
iSۧ_Rsm՝ wA,wM'dbbDg.Ypĉ~Yvf5YhnfN,CE+N	y ,O斞L)_&_ אL0h5Dcc%@[t*r_h]G$o?z$sLEޫyu4ǧqr۪\]}1D$cHNYv۾ 3>~o|=Uυ5=Y&tz,UyMF2ΐIJjkuk;"w/kk=RP'<xxeoH]LhYvs/l&rv $ CnG}_O) WÐDώl'ƚ׃#aukkuDe|1ujV$uYjuupNb$f'_c;]ݭ}3DcڠWIiY%lTC)eX<dX>[OfMonۅ2"q"LUre
HU6|WW{HY_Rx<Aj 32@\,O xYmEZ[ feQ`Uꚍw duHJݲɣGI4Й= |n&yiiWkue[]O gɨ,yZkīƁm+'鮇' 3ՠIK34JDg-[#GX74R3TkzDAY2T1lc ^j)GVWȦef%{H0d"_Neˢ{Gi7msH%R6"5FDR4QpX),?Ѵi_m,z\H6;.%|$RwiƓ8WqTj8ڳO B<]BWӠì^+^[	jv\j6Q\OcG;	>m=EȪQh][]?& guG^KBXd9/5G|qv,vvÄ3.iISz-oG{k䎚r5Vy>̟v}~Z'~!zOx[GmqƑC^#s>"է	1$|5F\wկSѩMN_
\SRMǭ\oڧc|	֢|ӴvnbFkAim}jwXu-{NyQ<}uob)'V|F	ݴ1bEd?OwZL>-^|_	b[xbL)4vh<6ֱG9y'/.'סky:t#eww_ΣFL5΋wevZNvOc&ikXԣӮZb_*\t<:M&_9'YI$#@idݷtn#E}a&6VMaJPMY'%zG̭6Z;6shHYV`qs`G4`固CRrw}o#2FW|2g 0m4Fu`dZSWqo<ܤ~_qSKY}2Q	ͥոè\[ʒ#7Ʀ	9{[4RǲhtVz鶖yqtj;Z1⿆Z+iu>mͥ.+$iVw+kp)RRJ)a#A4kYmfi1UU_`Ӌkh=t߆_ui|i}i׌t1d{Xiq\ewob&e4ȶpK$T+5~-R)h~VRO9s X+E$relVIGCWIkP鴛*t|T"KD Je/ "i7GqM7M=vϻ.ñH+$!XV6K]y.0i*Y#NfxRj9ۍ5c]6_ rI9Y"ie S 1G	UrylnY_q-#~&|Aڌ7S|$wKF`KF;LIcE5Yu[%	&_ |OJoea0W]Hr.wOKHjo׾_8Xt4Gx/)} V gp!1M=;r0pP+#m E=~[֖M4~`
"{2o!^KbVVq:W[" I`Wca/sG!ؿ?]$2g,R~|	Tv7.ّW-P,Y?wݝX"1qH0w,ܮdgh1ER`mh6_kO>YjWS{y&.5H[mBPhG5&c}7)12y\=odjNy<gBBUZV.!}g\IuZCc<M4\_}cnDZo%gF]NO]6}t?#+.j2͵NZ_JQlU%5_WZSd/4gIM-W\A$Nr,BڤV|V
Tj}ZϖQGe$Խm{ZRn%5xJ|׽dS;S@5~=~ӺnYa?~M}]j1\Av<)p\\X.<?|U19'a}ay:ה*T)AӢm/k%cR^̸/Hfξ"yj&-Fq*k-]'uw*3m>	x'gX<A7$w"Ӯu[KDVڜ&d<l:UGoS1bXb+ƣQ,Z*EA+;|r.{S!drcq:Uq_PJU9I4(O;7!K Ǌ<aqex ṵĖڥuk7Y[ۘu;ags}׳<ik3pZw7	TpJ+YB1B\dŪ74]yg.eS<TqfT(՝5^NZ5ZR\ԦRMƤ φCOJo|-xOoj: M'Jk\[kB]9Ʌc;SfͲ9a(BYagJ[btq MĸL-aq<$R1؉*MPq}8.HTIEVS_~:w[qu ']CG5 KMQtmKCG4f][}tWq4r7e*#)}^Z|ӯR7u')[_[[>3l 7QVJ>5
gRyZp'BW^uMM Đj#5-belfҬ<1c^j6ךt/PQi"χ8gWftr&WWJթUJ4(˙Q } 2o&p"U\l	Wt0maN4Y9?aO/
8 |_şFoz[_"K=0%aKk@x?\Kថi-]_kxc$ˉx߁>0Dp3aq\.O0JeSQTWn1)~"a\m
8%x?gyRN/ާ)NOTԧ)9/<y'~jZ_x7uWluMZ;IDZth" tk[x1Gt=|NJ<]*8uV":eC׍*~9SR7}:?,>k\ޤtǨZ4j;z{Z d|#8h=rGp3w[w@zNky<.n#$d1A'nvKץ~lIVm=DG4=f[c,iog%X)id(q^>o/	
Qߙ_xZĚ[OsjWvgo7W%v\IQy&d5%O.k~E&=RhmƩx!]I  ^%C!<{EDC)0"duT%U{ϙ(u+_ 
G{xU~ŚWu?	UU XeGnEw_@!'Yi^0[] n?7C?ٗ^ ijS0OZŽKf:_sA </+kSЭ3 iyiN~J0khm2=<[3G?#q}__8-m5k=eF+o2)$̟ANQ&ⴋO.d94RN\ʵ#"d""onF_g"빹nBJoʡȕ'Y4uT &gK_
j-I51N; y'qG̑:)Uє ~F_iLK3<3.wq2L  챔}kP	F55ӊk߹w><R9Afda߭y070䚺n <m,C]^#X5+9nU+n*$sRdմաo?w?gMK@G\k6w|چbl/ozF{pl+6A]!>qm5ۻ.;r7.rn?f_=I:}xU4-wM8s
+Oh,^=2J4t5Fo}^;ƫ )~Ѿh_3-f "O[$v_ŶK{_*a+:rKIǤvӨ~ n}9=̲5*fbL"6eX<$pgs)N 4OOb^[Y4>Dr0ivp$d, ?nce
Y5(1t}Rۯ YG-!,-ȹQ6Cs,)*% _4[	ܥK èđ7HUđcpi~e<%S42j#M;>.U-~_8Gy*,<!cI[V̆G(̐h
+]D4a!0d+n,rNtIvbHGG$b$DSJvgEG*<OA|D~	oďxO <^kz:YF֖7doZwkmaC9#dI.%Vp)$~_șB-[c~=V/-1o,,<uS4v?2,|[~u+mB/$*MϘ"0xhpxj*_)?K췱^z')5}thyvc5irKkm{mJ}C:Ѥ
UnhVR r償Tdݻ^w3񧁼g5Ս]ZMF`-7Wm6A+[Kk{Nmz<6xv9VsM׻~}5N4'fkgtDOIE[\/ʈbt)DQV[tm쯿n)ɫm_:/o\=_:WeѮ<Cw%F Pi_[|Υ:kvKvbe/9muz?a  q VUXo^{'Y[xZc"iX:-F4cSKj.b	ٶ:i{li:Ou^ޏ?mGg<o[E io(wˎKSVe/js>}ydy~*z؊Vr9;Rm蕬VHN0J1I%Z|N:|efxzΕxLӵZwjz.宩exVQH^9<]>IM]4nE'(8ӍVꚵWcH r|9~>}xs%;mh4S5Y ѴM^k f+>XIjjvw,}jr_/Ch~  ~x/7 ghƁo5Gƾ.}sľ*֖kCUJTg=ԿUdtpXӧNm/v-WVIzRo^I++Mw4/Gʊ(t+#k*,rg*^ӥݠO۫RW}-XxnHhi4r]pu+`0ml!I曩c4}j}˴$/#3H<24P4#-reklHYvwC u/ubMtb Pt{{5//5;m6FʲF$K9#vs{Y%wv^ЈԌmՖ?T1j_ j A_ 
	v`5$ȚW79ehu
^i/x.ex{:J^f_fOvkhůN}۷1yl5^W[h3syojR "%{őMKY>%mmlrgkݴ^|ϭeu;> Q!#\j7M|ՂA+m8̵"LI:sG<ֻj·kr{88啘@Zv2776˘"ʀ,7ί5u^5FiV9ŚH&,L>K8(5UKlXH]	FQWkzt
S\NwwG0>O_HMw<PtH {Ěő}hŬ:vk7KahbxKv Zxoڴ~h?YW7jĿ[ 5:W|:֯txB/_	xLXMO.:΍
pMQR*Wvwm}!VӺqk)ߊ:(~_X5]S<OcUo.e揮h Xjc}oOnϘ 
tiЩ^g8+ӺW\3j E95ʛz/<kGů n-jC4[AxcLt-N^Y#k2XMmL[^Kti/?rh릭 {woMo"vou~j^%7$oZKrN:RY\xMmhg$	.zT<U6jQE̬f | [	~=wZu>[e6{?UuWg`YzuF_ᓅtO[t_~	 u g-:[T Ɵ^0;[Ho~LWJDK-]z^E[i(KsJ'jT){w}otRvZ+k ]u~a f`M.-z~ oE|E:ψo	g/GMk !ԗy̫ʻu%VJWK-VRGM	jCkmKԌӛ5A7gh-lt_<!2ZDQjΪ߁=ny~ߴmxsM-gXH΀kv ٮB4nof"(baNGZsM4WГM;_S~/Svn-[P0Y:3O~WMI1w}> Ѽ7Y98o>qw$ct\>pCmo=ҙ:C],SM$Mv-/'V׽uqy%,X4dy5&+g$eYek_iԖ+tMg?3	v/WنLԿqkieg/kOT:݇M4;+^k6]
[i|9Ow=ƛcZgU޷QW{Zm{}}JD~_@ϋ_|J-gHЮ-.&%[Gg;y-_KA}%Ӿi%FoK=ic"C6iUawEߥ^Jz?X|s}-gO>Vvѡ.v-^.؝V$1tIqO$T']Ԣݞͤh/맓 #6)5sn}O4qgGu%ԒM
C#4vRJ[IvKo;NW}n}  g ؋/xK}GU#H?
ƾ:MjSWAqw}kozVX|3HyoܻiܿCy l|C3_>8xķ} Yh/	x,|E_662%Fu=\[#->}L)ƌgn-f']/ ?
n->8?j2i6s6³jy>M曭!iP gܤIo|+9q&oG96c:i^?~ س⮱7uR{"?~$xj)f5P+3dM_Fs&O!1%䞾LR\Wvi /s˕_oASE3|K&]+ڼ"hWK Mn}zJ.tM[5Fݿ˵m$H-GL[A"躤xH|P10lͻ)FRi{V/nNuդNBܒ	aH%8"Eu9܈rQ%S2KTB;n gs×Q6V3Er[݉=>k{$I{d15+ưL_KV]]ozλ߳Ʒ ~2~to 47/L?|D{kK*ֻd_i lm)4GZvj; |/ i|irǚ6%kGD\0:Tqbu1rKw{==^"~Eibr^8Z7>bOU$9<4(*<vӗ{wzCrW-Yc4q&4K#nݼ0ǟ;Ɨm+=v^Oz~_.]]vgS(<͙˔f.Y2AUܒ ={?*vcjiԴGj\1E],7fd*̰+ ]&`C
Hz3U3!7WÍ9-3յMk\8`a-:x,/(u8jV|̱w̞ > ix#«WO+vU>8<kPfLSPJU)Լiݟ	麴^ES%BRܧh{y_}.jsm>n[wN^g?|VdYd\ctqc]ˆ1,|B1Uuz[ xrkoKC)xB,Us'y>v1ى#VV.{IsVpI{ioTKV>HSfx,XT)RnRӶZ|EvOYcHFŻbG#0VF` Fd9g,CgoкXn]/b$h$k).,YyYQУ9m|~ͶUT/!uPv"0Yz)Iʨbf.wV߳ 3u^J.Ĳ*"v;X|*DiHUea;o"$#t.XMVt*{G=^2;<_k>-iؖKq[]9xAhR^=;ѝa|#C)bOݒj/~lYTժ!N
.Mmwݟ4Wx?Pѧ#M}>SK[vkG@h/ֹ;K&oI:-Y)'VehdֻCۄKeSsƟ4\gikd5j GO^;4=˴cVFid5ºWQj^"Pgﶺ/:a0%k^4կZ.Á75`0r^
2I\Jq)sA4> ~~$  
ExSZѭt{)>.<ic1;[<:rz2j|o֩J)Uq*6}ٵRIۙLߍ,LN&)¼8K04OKLgڧ-t/#t3ZOkS[im<ESL/<z׈#QҖ#<^ Q2[L٭<ib㋡R5StҭSȯ(=INZx؉eqXGKQ)5(NpkMꝾg u|]_ٟ]~ڿ fA{W|F>.O> >4·fw>5޿ϩLu=B٥U~%N(9a"Ӌr\ɴ֚x'e3\Ʈ]VqJ9=N25N2)OEڥ)xF'Kڣ?
Kυ>5'frm?\ԢpfdvP0nVbF,LZ^qܴ-M(S8My*tJݒ$7weeOeğןuQӾ/x↹h 5ik-:k|E/t]_Z𖝪xKU>-Gzo`%qV]JNW5(ZUz>*m*]yaxQd׳ruf5d\ZYo!?|_(Pt[-ƭiF'<CV{;MYk+2j@ǌ8g>/Y#z٤*Ti" gRvOtI&+	&Py+A兜Mݥ>~Ɖ|G#qW 	Yxb|qO>)׼1ik
kInA<7zV}j^m,ANkżqae3Z*bhpέJ)4%ݟ{;c\T*|ʚS	>^kk%%k| |C'MGL/R':MvyFiy]NL֗sRN[fe4BRUTQRVsrv}O>Y:TFM(1M5eMw <3r>\=}:vQm[7hxLiY8<{~OZ՛m& VBXmy6$`2A<c<{WT$H߃[ħ
9<~ 2{Sz׻ۡZTֺ|hh%H)A_ELWxd;Y٘IqsE9;-?FNT>Y6ej~6KkDK]GC7 ź4GH:^=?f/*+kzi8nyz]ݺ^W7~{4ng}BmZm"40MUH*ʓ6CF|;wݖ=4Ǒ2EpC,[OfXLSS%v~_^Oԭck%IfH"74#ͼ"kr1-5tU Sw[~ʿ~:|]Mx>">^-*UzZiGZ;N Zϫ:Əe0˩bSù>G>eg=o_γ
ru-nֿ5Yv=6=}(xqDI#iwؘI4iv$GresܼhZ]]=m= ^~SHY;-*Jo%J0*,۶~~F,Z4J^B#̮7ΒiHMTI
$G&IufU pӿW|^xmwe{Z6GBkhm̮B҅*w;]w9m_Η"9k&t9#x7RKڛS(I-nIlk O&_9_N6{ĿdC<a[j<=ڽՖ\ZCI͕c}gmNt>VJ[JJ2k 
5{XuMm4mHP0ky)Hutvxn=ږ.TmwU 9aa&ֲ ]?S=gN,u`R罎FT?h+>qb`L$~1Pѻk[[y7e{t~^ rlm%ǀ-o<Y<ajkKCNɩ3K3Lڅ:?luhM-}dHJq՟$۪[ada ݷm0#4e[-SO~2'	IC\٣R#v^0"."D_.2~Fdk3qךd\pO.[]I4-ބK5Gh&TM<l2 jzގ?BzGZE N[% ňF&㕜2K?ڧy]I|CVX_"g,~jɻɍ2ͽQ/Y~B]_}emu][IEҲiėSogp"XD܁.e_%?!8ih3!yJurR1:HWm=w;l]KQiҸDDqbo߬$+;nmz]o?박]3 <5m+:ďݍF^HXm[-&]#`,|JaDJ[/i:
*ە9Eֺ漏'5(I%}z?+[X[GguToEͤzu+^"[>!Q,䪧{IJ\ӧ$˥k}c)_7o;~[߯o3W\_h͍>bq:Ԇ̉ڔ[֙y8m:ݽן|5F~3 6m;;' c𗆷m"dmWR4?h1,|n֚ں/8Җz+Ng{-6n+ RեoOii>hZSmi:KHUۛkḸ['6\zҋ;ߚջFk~?~ hg_o|Ys
k?nڿ]rs[ķIH#@ŮM5W3	/0)WxӊqH~ݭ=8ZT"VWN#?I-Ηu8L2am5<<ْ[{jMO-}yعZi/YoX<ϳ)?$s]AnV`J^$o r^~OMo|G{]{_4orGi5/n nXΥda{Xۂ>JvQWnr]Wע̪MRZŏ *lx-_G<+=ǄzMWfex[^g[mia28Hu*8rvK[Ws̫6U{_o=k3 u?EmNоyK⿊e;iu$׊,ftK9^k)bLF?vTMrӥd%mSMJ۶ /??i/&Z/_%PT7VE2Y-is\Ie69tSP{yΞc״?etŴfAӗ:g6_|SuIXMXZɳ0<n]	c!jr\МeԔ՟ &qE]w?>^cSk>:թx7H_\wzmoz{?:{S?Fգ)+nNkwS0ʴih `& X'}kAoGj[K&cM;KZ+z2v1JviS(Ӥm8v]s.#oeׅm7notCC{7Qҭͽm~p]O!M\Vi; :lwCD/&k[I?<>H=.ۉ#k-GZT6tvWYŦ-{qPJ)=tc)Szk~olbiA"F>!/4d{]|Nҭn-/ҢSҼrh-FtHEmCw}}v~T~`/{pO_ãu o~&nnuω7*ִ;6i$RKhnߒc-"~6إM+%_U OW2OǺK@4AҤoycWW2=m(fXRj/zRe^u	 ?zͤoaψzO/w>&sgt/.59n KvHcͶ_ΐ5 ۘ˻ >絒z.]t C_'U']oNZk?|YGFO]jm/({X嶝 mb+Y˖7a_Ko}j[N#x/>ƷG}z\px-Ox(-w|Q-aZcӣ:-j)Sh9I=Mc~iڭƛ:HӅݜz%vKy^xE)fdӿwzZtkx}<2mRhbCqv(b?[|Q "s#*!uÕivԴ׭4I\ZtW\dGi6^iqR.in 稹~ _oM,xdVť3Df\An"(,!㑊oP} 5 t o?POӾ|\q{xBmn~#ͼ7Wളu,ͤv:N/.t[nE΍)%5&꿯3Js䓺ѴWov?oG{е_~VfDi2Cr[vXc8e<flBTܭkjktyJ^Z|# xG\-y|cӥ8
°\XE6w x$.)ܕq)M_712mj:߆F_ےSG&IԚh m4OxF9s_=C<[O\0caNRr~I(tkNWvK]^?ϩy:=׈ kϋ~"E[\O彎*Oox\槯tQoʹSm|',U=M\~5o7u7eE  w|,o˾`T]w\ ^,LG5Ibgc|Ժq5żRFbN+^oG赼Ggnlt{+[g$WjV~M[ȉWsY,+4Ixo}o_[ῸY#JJ|oUIliۥGjE^@ʮdik//=+ ^~ZE"|OZj:9~ir+Y&&t`[2dArxkǋOMh74]GŖ'o⨬65>Cle5
չy=[3$;jVݷG_KZ6ȗwx@e6rEsY6wbHZ[`]Q ' OOn֡b21id_-{+\4]m<\svLWЪs+6Yp2 D9vH#!Gb˵ /</!2CR[IijۥŖb7jo~_Xj:|ݠIIJQ5yvkV?ۻ/4> ~ռ|MGgkUn&MC^?eWI[$zkY.?Ϊ7xOiTw*z$&~	J9wEq_~('5}FZwbz;%
[j]ռ<grKJr7{PM:ST_^?> P=%		xSmե2$fk\.% )=u*U_ivɻ_?Gx{7!_Ƈ |+xCú|% mlBcдcSk]M1jqH&")KY?V3n};'!>"}G^'ҴG"xH\\Ikkٮ.җMYWuNnc}t%kun?  JǾ%9 P>15kWz.ߊ}b]>;cڭgym=weRDduhwv_ve˧ױ,6El'L^#Q3rVi#uv8!_HnX)jYiնG[-m? FϺWI;G;VQ̮EH&[qW%-w]6V8]g:}tآIDGK:8m]4G,pZ)voz}oVm:k쥾5I,דCCi1=ԗ3ynp'O=ČmȖqǔ8--_;yfM9kIGc @' /~֟x¿&tZ~w'Xa^1<4GQ^ rZkړIf.Z4jFP_.v׾u{Τ+oNO7ZSԭk{9iKip֫RVetx׊yv>U޷	ſlt}B%kY7RI&xv+}W5Mi}Iu=</jvcxQWMr=MZ2oh$=|46-=6qKyrV*in2ܽGFwWy;SoϾ 2;+xy^hLIu.$dBqi믡Q-rte{yd5"M$ːUw<խ}/wS{죭|./Wi ^~jE|D	BP_|$0f $~ݮhZ &oV-Tf '6iU(X-sFOk~i~t[T޻hχMCB;?X.派um:PnmfӦKkK⻷Ke=1j&u9a'w2%[t)gQ0fr4dܫ2WhZQvwOfkIhv6iif,_VzNocwpVZ:#Z+o6k*Nm7ts-B'_k
6uxbx;^nA-k:O_my(o\GСQɲ\>as&5~evt>41x2*4'I+^=Zѥ-m}3_$. weoouf	KI.ؽ֕+)+O]o[wҥ:ֹaФ]AsymxZooVt҇NfOTޖW<-ƤnVV~C |l'-~~C.|TD^Դ[{Jae\L=׈?cwz <4ڦu@ͫizx/	'0,]h?e	J0j*.ZGJ)[pܗ0;'e)S<%:w)FfwknN{v6 =ӼWcǚSC89~&|?Hmz 4Ԏgjxej7#7)FQehR]"h}f2Aה!%{4/+*pG57xsMO~?XĿ^΍h熵J=I|M|KO_Ѽ35>2\-[vTxSS^)EѾb^m%nwivJT\kӋOuZ%}MZ>7_. v>xCӭоxCҾx(٭5-"M>^l`AkMH.>XS2K:Q:Qk:7iq-Z[n}6YreӽwzV}J^ڳؿ_m	 ^FGŻ%3x}K%VmRBOϹmQ&lnl&6Y}Cԯ_	*yB1OeEϖ)w^9u+951NJ
r$z/_FAo|u$j 5mz9&4&tKi:<^tcx{HmM;L6Oo<=*5JX劅	UHӇSnx6#FSXuN)6i)>Y;]ϯ<W?|IO״sM;͞xQ|j5CCizD37$x-.$J8<ygxs*rk+r'{V 3lLf"xF..TmK%ic+x'+;~+<#KWԼ;Y|T] ։q.5)}rm3jv+ekǊ[:5Sꪎj*ͧ-/6z\a8)W4S>Y+M,o{+^M%]Z;k]urT"nE'r( R+K6Z]>~d%ee}zn_ΧuDڤOX;_nTdQIGzWng#|' q%PyݺjiFIY/-dJZ;kQK įۋ{~?jh 	uo7>5Ǻe x~gtKȠָukuWU.Kq*}5uLQs6?U~x'l"__l|//uxŚ牤ZPoj TglR Ȏ+^yvn	k湝_qo'Ka&X:>''I/x{}c7VWj't|+\MSkX\jUzAcs\^5*u$J.h߻'nKSSk yh[I#)yj-e
Z1 ٙ[q& ? P+w?aox? MZҮxbo]x*:"_\j/].dnl.,ogt,fhus|MmZ=jͽhit?2~4|xOoy-Cy;MѴeo%5*Ź]ج>~~u8R#6]$v|hώ<E5_=mQci5Z]K=JN-s,?IahAZmj7kkOT]://?_÷gn3z<Qt=ñ]ģWZo&EaQpְXI<ҒЬm,-26dno)4mZno./~=gxŌ>8	n-+_	{Zm2/NW㿷=VuWΰVvn 3_%N˼mV~jnG싩6RhUKT{y~qx$XݥKG[Y$YmdinG$8NNQa'	Y+ W<2vo ~ɶsj51kn_|57fޣ10[D>˻VNO5Ӻϵ>' @ ~|M?|EY쯴+_hLn!Oh^~F C5I	81Y7mJ\ZqTnNM3Zpi ?''u9ٿ~OAcy4C5'6kxOVD"2w[_F~iy]XK7_ 3i'n_6k$ASg}7@XGM"}&Y^VGmCW4hZ]zzЬ!JOG9]B;}1I])~v?cui|5;_16^!}MnXHOxF6	mSRHF"}OjN=W59J6mttE |gXxG/h?
><I|'u-#Rm4x?WO׈^K-h.-㹓yW&խm:|s~M>\Zߢkm7އJ<"2c,c3Cܒ)q<F1y?dD
 lUf'XrDF6O| # Zb1'$"z+4F'DY	2B<#Y	eZk[_386EYdF!%*vD#YhFKﴴI)-nfDEgS(H\"qӧә,x>{\ԗk2maP]<[xDbט_Gu8g0d",lwq_9)5[9}E0dƨJD1ng[wh%)s]]D\>~
 OȞE|OR_\E{\:֍Zj:f\I5ݥ'~]2ھҋMKIӖ]otMjg'U>Ivj?7  >x7?|߉?9I&$xZK9El'\}FV(b(ѧJRJE)_y~mcN9/u>]|1~%ѵ7_ҼCfz^{ei7PKYO^Oiwm-{x-C:]~8JeɭZ{3ztij} wݺg={GN(Ot?'%u5giwéGj[?hak6zuVƌ ?KUEjK4ݚoŮ;w1|t\.ݏ뱿m_ ÏJkm xj[x <1$χn:խƧ=]f4dQWI{:i;-vwvw;As%^ڟz<]E|-ǨKئw۫_Oc=j1*2Z\i1b펽ݥ8t={w96F}u> >(>3񦩪+~>3mvvw-[c{}ݕA0BKFfkKmM|W![xŮVڻ]R-g NV _<[ixYroE?-߇|7̰Fluq%]imp,JQt=E#8i=>'G hoƺ玵?mY67v RdӠ]=h[]Ivv Evkȓpn	SJnwR0VwMobIǞ;$K^_m{	;mCxNMοxR{o|:]?VZ˥ZkWZ^[>
_VyZ-di;Iifa5M;\hriiZEOEAX3ybI;߯oSk  %v\ݼK%[B"T oJn`J4Hײ ' .|_n۝-skgo]=GV]%ØC&KnnI&Ѽ NJ˙?;|o뵭nfo&Y3n(6T%\B!ySn ﾞo=ލaqm4w0Y¾֊&Itc͌Hmr:y%RY}û}?(tHؐoƖ }1mǐ#F
 __?fK*Uqqa#K%s\iPG,$;+%ӬSC1Cqomr۳_sy1a{ 6b(Da1@u$:11D+o`-n5oMx>I:3Ke]@η춎8tr$-;ݻ~qi>]Rh[5KK`,kG[,[T<$gc_א:|7VXSCS.Uf%ݭiooaEp;2.Tܿ[;N*j Iz\MO-,AyfS3sb;cX L8AbߺJ]M69c)iaseo}u^Xڭ%ix$Q}wts$<BE+mm=~Z|w}]~vz/MD;]LFvj+]66mk7Ch GmfMimv^SZ<k~f[M&kIͻi[«ojnF\XOC<vWK1hӪz_9>Cs&MKd"{V7*EԠ]~]4D巖{^ snJC)pbfY \Ip5-KFf9"W \m~9KAխu=:{k6K$4w}$׶g5_2Ek=XeYe{Z^+efwn/o=hַoF߱x$a3,/|uv}ޏwc%V[k]GNUYWȽגu7{2.{yo?:xO-歮I[;;F|ĭ.yyytk뛉$FpB_1?/=4L;{/umCGMvni8yP۲%b[[EKM嫾ZN|:7v3O]M?ku{.{kF? {G[{	'Kex  uYl꿯SM3UmRصGZ'>Zj47Zix&e7od
-뵺_oϦ{hΟ^?P6Ȋk(^+[I[üZ/	x^OUo;vx[W;'چ=DiYYRo,6w\r"\"<] /Ι5Q^MybѬ:hරԌKsi(1Of͸);{3,r;?]h3L/ϊu5	,6Y%!Nompw~K{, z$#T\mxbGѮc+>t彌<'Oh-ԗ0Ip[vn sk7W?n^M#YԡaM;Iq@4wOxAq<ݛֈi7woPU_KN}f71iiWK-jt鶌^ՓPjƯ/潝̝;|1<5bx)RKk<Ww1"AwkhŜ0*
%I=>OxR=Z ^]h^FOoM54k/ck+WnF-ZЃKfE{^롈E/FM=ܕng_2 MoIj^tC0\	P\i 5f;tdiQ$w,/!Zܲy߶؜tq~A&qJ]]tӿCS+)CmGsik,g=wHgY}Fwow樾ֺ-U _#gk6OXSZߗE=Ī,m_k6].[+h^h''ڮCnNוO ?Onj-Qiqyۻkk_>V3q oʷK2m-p"EYe߲.oռAqim%K-j3Sԣb;eo'L[x-in8Ӓ_+;Nlҷ  iy|D9S-_G?|Oq_(ul_xW[y95xu{M}B?4VvvS)6e.7?.?ږ=Ƌ>g~ !ծF?T>mE+%VCz=8⒍m{ҳ};1xJWk/[G7o 𛮡><擠([^CKV8[Y- կ.\]GtV;{ph~/R#;Sz dُ^ /xLSxxak$V4v>*k^$/nD2YLү_ZnrI[F ?~=>wOf9,8$dYșbTS}%oMs_Lmx^*jIiji5hޘ+GCWRAݥL<Jʔ\V_ͳW}_M|υ_&_|<f'nu;"z.imax:^em8iSZY/O+ż&"3wp\f/[Z*ⴕ_-u] =OXx~3'_k7uMO#ՄkhZz}ޣmmfCYcg9F#:rRRi?ӕ9%/mj^Kjq"9m>	b_1209Wl3n6$}5cBƾ"^K	Go,pJd%2 _
I4cG9J3MyY~FqK/jE:u}e}m̾\q=0O;3GT(
@iq'8\蕒d&גw<}kS:&3xK|Igj, .6j/txmlZ6-y%C*e޻=-e莊'R+Y+]NG4]CQ.ÖVwGKӭ-$0[VBޣO/͖}|a,LF39|+D}[(_?_$!<xo=g_w_i6D𦤷w0^<SAom=冣akPB~ޚ狂q|qnwVW"Rt߸^uQ$º$W^3uö{kϡktg?Ǔi6w=tn͜rs<:nyI]ܹnzRI;^[?o#/	|Ok%}ᗂ]ߍ<٘S7iү-#Z_YE7@ڤYO.BI֭RUgw'IGOKݻwN΃Jݵ[t_-}N'
 xcǗ_o>3i=PyJ[kSio5u+uRM+V`uk/t(Y8KWZmtOSws-+|DpvZxWTx);}Z'ַ-~B<J(upuK}I7-+7"|d5UBKO,wS,%[H4ah$%l`ITQQ|MmS {kmO ݔwAw7z*ofKY]e90﷑wO5ier](E*>Ki9%mmO ^|AέOٮ/׆3#0w᭜rxL#KP+Ck)ר/<z/o'~'?j%S$_i?벙P-KRsѤfM62NdGK0TnrhkmvG\Qݫ}}t>obO6{[9Ӽ;x6NX5=B D\kmq5ZΥw_LiWUЩaOWZ)6{yvzv,m~ic&vexUKdl3iug[_̭ݾw]~_KR6JnMs5ԯu.sw+"Twycja:Km6졎з$ՕT޻[tz5mj~l~_I$o~2gK|⧃ AYmiДFPk_u婆֜Ohd	q |e~(
O7~?|_^R|wEK@Ѵ{.xS U[WB[G73:1FrRn쩵}oVa7kW׾GDgxf=q?mfjJlba[N⸵-璾qWm_uNU魿 ^Hnn$\۬3B"K!,⻸G9@};=:SHH/`D2F%	bioR$d,@J].f&s6Ksq5K4v%1R+7}}rm	;Z}׭j[SJj?~é-6MB[G^=4EĖ2hnu;PkLRtȧھ݄qX'žgޗ{[F#
xVVoYy_~|U qu]:_ԣR6Έ𬒳<yyO2Go(VKAbO|#Vt{+wK*\FH4^ `7,֬/zeҵ:ᴿ?d?<wcy_MNׯ(>Ɠx,U5ka4\{8LNY=y&Z맽]᭄֗AxQMmu/ ۩oCr.K$ޢ,V[&'Swkm#{vy/U6r:RVkFr{V|=?	  Oį _n(;↙: 5˝s	]$ڦKSӞI7"ZPkIp&9	'R<E7k;&]_SP=^Wj<m]ůiY<IEwgx}hڅYMƛEp4N!jn.tu}ߟCiKT=M6+[{u{5(-~n'^%Nۼk} ?_3n<ͨ[Rw$ UCynT*Ǒ
An6t!K5	>4ۈb]	1@#6^u4$iG`_!$"Twc9drN=v[AO9#Qn)j"qr1<O h3Sv_kun-ɘı*G2s 7uXlr!rFMv?o`Z-O2 DCI<Kۘ] eT@_dil
eJ|ͫv2(ThidzW;M9:}f?c-g hk: ]N5p*dR_tuy	/ePG7Ыw|1?v˺bLC:ۈZ9re偭7UYKǽŧ
kEZ6hYcy!Pa00-nеºwVtl gI%	yt|Obv!0$6bGܜ[2i
wIo9,6%Rnc`¨TUO5t_^am _Q"9Uc(Fw'Dr`[e . uУ=+˘kuBE/1(n<۶IIkxV7̬ _@{Y ߉u D}Y|Bm ZƵj1~ỽeP{+q{qOKqc{oi<\:M,ߵ*T}¤u)jv{MXM9ӭ$5JM]Y|_x~)[xsx3:%/v$F]'Vi{IvZ3M%ϙyw1ѧAI{gRmK^U 3WvWTIs^ۙ;+%kcGWDƓ=SH\};ZkigQ}H)[{X4cc,A50tRu˭kgk-}jpݗ奝/C-ܝ5*	Kky$Ai-p]-~ ˕&mv81Lu(mHm^Ek;q8Wl#-#,gtݟ]n?[#uU{[t go|L&/ܾN%~#ixcn<6A<K{p.tkx[iWV/Tuj֋xzyܴ%jy=:ЅJ"źi󚽣gnD/u<1[ok
,wwW-?jCG[CMs4-Ė|v]F;_"Qj0SmoV{R-_[AnnBĦhWr$aHxd:Do$iǇN;$߯_/_%gu[ԽY$vB8kۛk9aD~<W_O>)/{|!6\jEj;V7"5Y-+$1LEA}_p׿/ŷ_g4;A/pbS<{%,PS:HY ^8dH2fy+o̒y\*B̳ITdf(fרt1))mʒ(d$E+^n84
q|} n>H])Fv
YFࡶ.lu9j8Kyr<fEqDl$J7 ߥe~C_SԤkoztw.m^y!3I%{h-w]>mi~֙sa UӴT5;-Vs=լ<5sM4QI3[3<W1Dk,_'~_hc@ev}>9湈_4MčiwjnnU rKsobk]>} ?-u~-e>ɪī|^d][\)DHoMʹB.#Y܈m^}?PauY[jU%,h!hiZM[Z`I3$q;_נ[ cgyZH+p뀢+!$ǽ`b4~R*Ϳ?ͭ_nO[uO.{x^HbI
B<%գl䧗sq4ӾoȚDJBFMHeH3FcXfC9e)	j~V}|ӳ*iy=,M0G5JBGXPђ:oq&]`EnU >vopwGڒiI<'{<S,l	^A0Z< ~^aYcYK&A$p2j)gyqBWy]NΫNz~B> wM[x&f	5 y7GWI	v0nZ1\̱`a
$x&)duTxYDۈ修%ϖQ\Gԗm\G6
rڽѭ7RK5ݿyoRN:G( epʞ-XKV)bkNDMM;z Lwmz駧#FL4ZE_6owKx^ݯmTör`vV쒵md]#w&8$Ht9"4G#Y_p _=}LwB""ÜDSeÝ^)K:P] ^z})h7mI8H	p.,*L*I vцW3-<m)`SxA5ZgR)bʪi5~aXk]@ܙYk,M#{.b;M?6<K"?|ow[5Ť%.w0#:\[U"{_n b~mbQo44mژ̀4λK ^lm]}?DS+`A1쿸3\sV3O%E_hJ9{of8es$\#-Cw
q0ķ0΅AWQz=?￞߇&XRKh.v1@L`h.e{co,wPD%y`Y-n KI۷y/u$ZmR$
̲DZrG",Kj`G!6!{yʍ0F"|ZϪ ֲ̼K$q0L1D*Ŷ4hFcۙ-_u3Do  8,o*0~TRcO5yc$YTC r\>镣bsM}:Ov"[ݜFMKx	(͏o#Rᛳbnخ|ZAlТy2+Z*]j#Dbٴf"`I)~#鮞vV5O5G%\AJY[:Vlq[-^8cn[)boqE$^g21̅<d?,]Out/7CrbI"=G<I<^^8I%XD:?6 mٞP$(Hty_/P  y&_y
<RyO{j"7vͣ8dK;qRt֤{XҜvz=MJf#<[~׼;q,K}55&ϴZAwg<)kM̩=7.h'==rMJIuٟ To#VgKU|Z֗ᏋEZOKJ%#ֶ]*r`_EԠq<[_FnV8_,}? I۟jW3$h|q.J5)m'<s3a^[n+A2@iyn)oEEo5Lzwe+uߚs]CKMwasyl\^D+*2B;%kFG1[>U#HHiN'(?	'gkYn5"(L\iaY/-&KV&y`u3#F#@Υұy=zn֟p+mwxNRN$".al2m[oh`qF+c'=JN:ߧ}vstSQ3@d[ayRxuH\%@BhFdicHp.m[Oנ]OɝØuφ>5:ǆIU"aq}^awjumk<F!\?uϫ=
2慚Wѽ<^uH<[Kx+?6>"浨9ׯ[Gm^KKk~[O]6o(5M;^W_VJEIw'nh ?6DJ^wCϯx2m'\=Wznij'mRojv:ڧćdKk瓧6i?kuN<ܮ2^/Omꚵ|C;K|/511"mVEC$Zvʶ<41i?CyIMm4AmkZ[(7Z[q-m̶ѮwE 3.OM:sO	O}qym5߇tPrG5"#tĲhA_צS5+kgLXSbKkk9.7P}a-cE.6;zh 睻]ᵧotyRQyE{]fQ?21o߄_$?7ejO3u®um+	l-<AoTm.7+K{{+>I 9HcFYdP8^+MtJ ~$zk׿>0[{-&-ZB`OH-qwm.[KTZWkv ~_iI{{xPJO˦I<Lu2S}(\i։k<#Oʗs/| Nok{~6}[TE3ͫf+".Zyv9z3/MZk}"_%|IXE};[_FK{č/a%l]$N{筯)K]k>uo  xjx;\񞥡J}6owkBM[Uټ///5kM(iv(/Ѱ7&9in]3h8wIgm4vǹxS>+sw6Mo.Z]vz}"]ZU=iRxeUhi{obqj_=˃w4xy66ִi`2$L-y񥴗Ikv|>ߧ*OKt4úmW~YP)imͽo 4SKfbngK'Bj]]GlNfݐIi$ }hEь[$$V {tO &9]O?.4_<xƧsldiSG cs`wemth+h Em-x&>KH$&Y-SX5=k}$~vp xJԭG7sk~ la[PܻxEz=Zcwkԭ{nc'[]<,y"x	K}y-.&.,dk ۵s_kj1_l}Y\~vhC'FޜZOw磏^3o& |1߇+|S_?um/RݥΑaB5VreZOo<iz<4N*)VfRWm%C)ZN#xW'Vk|0Ҵ9tSុg nu!Ӥm2(g'Qi%w_ƥ-ڵ{j͵toU]t gx{= aM߾,q۱]B KZəo?UqrMsxh _'iku'uu RI#H4-<+ߨR9Q$ܴoI~hvK}4An_a]?YKᴿqpܠ[gZU6їVUxK5r ~Az_ \ա_M1iAIF5B1;5];Jn&QxZ2^Kz	ۚ~+vwmkX]2,r|:[|̙/ٴ餍EKxGsw15k} ?|߯.{ۯBh+w{𹾒?hҾV]\(;{^i{j}tcRÝS-
56G!ZFnRĉ,^jޏGC|EZS6 Ãcf.-ίxúj	`gbefAnZw}zV]i {o<Ft-hZ7Iӌˬx~X>lRZΖGVU[;]cwR\2*ě2 XS2_tQX!Y|g.dwYX|3eyD2
ӷ}q_"\*lcpTVs;*cتi:P1YF4s$yyUH#P;Phv?ziݭ;;t;Plj.V(FV3DӭjNX)q1!e|˹R -DA\j̒ȥid?8b{l9Y|ExݕW'1ǘ8Ă0#;b<<~ꃳ̧V8|<'xw/|/h]'ŚM?;X[1w]4J7QTV)Nn/&"T5iIvj|o'I]h 8&H_x3ICF [j_YZ|<qB`8"Kv2>fV;ڤ~QЂiA&]^ WW׾獴+OV~74>MF6b4oo];W_2(.*n攕V OVVV$[b0[FKN~`xWE_e1cEu'Gǧ4[ok~4+ۙ%_AH߯9w%aq
W䓂V]=t8U>t"KS/A7=|N-Gs7O۴s'X2?\j4[jiy\Q	|ieXI)>nvS(CU=]o7ix;BI%Dk_R/ Wu+{_TԮkMr*$-1jeVRJ1KbiFI%ejGB4w1"%IHx/vbv)!$}?2_ZjWZ:z4spōp_4چmo<[j˿8=4_?ֿFc:jm%ķvv%gk+qehZjY^]zz[i~U}cd1ިw<yEYK#nck?B?-y?&d!e0,
y}}fc;q$.K[A杰DD;'W
Tq5KDӭb\#vI?_xf;R( Y(o _ cCtRd
|EƱ*(L$t|̋ɬkh.-dwwAmnIѴ%2;G	с)vZרms:]^_1&EH었)	L4+s'J Vu˜᭮5),V\:VXmԷP,I3=IokȚmt_IwKOS]B쮯Ɵͺ246s\iGڱZkK/&yȭ^ZU&Т7w2[q][$֞UZ\M" <wCsȀW9uz_ewg{ˣscnewpK%^aY>[7	mdK+h7_; _{xt-Νk<זvj]k^Avu+g&v Z;vt[]~Ahc"x"H_F)|ۛ)w1L`Ryh﵉ޟsF	aEO-.T̔
.0 Níl	UB[iw\1
Oq8%dʍ$ QnwᵊO.u&ro&qgD1K,fMzH ?ϧ!R%q;JD=ʆ6T妙$p5gVDWQ"pcVbYI 8YM<(,k|_ȚK5NfXͶ{yDU_4H.d9R;boUV9P-ͫYG34iFȆ)$K?;gZZMqkm)qrDu}'Ku^MO;s#>%KOhU3IŪJ,᣻U4XcVŭR/e}SÞ2qINSv%f۶]zh}W^̰Mo72HH֚ڬ[5+XP^.pImjl~mTi%dm=veeY$OoL鄊p6.E(??#RT11LQ`Vʳ̨"$K&;ԺBmCY̒r2vɒ*~modE^M[Aw72N!	Iu!dy!i kT9r] _^ro*xⲻWW9c_&uIM 06rr$"qtaOY!$o	ZxR'\fGXnct\$JI@k_cNMdsd(CU06ĥ|Ȥle.&ik"["O,q_kHk,3C,ٞ2Kq*}ٖg738Ub8ܺ9EVYI[%cQJ׿o SH䤣J7;#u;T/E0LG,c1_P?|6#; B$T=rِ3XJryĴװ[ HE;N" ,)"dq2fq$S(WO"hbseT}6"R ,,>^_H/:<?`X7;lO4(/C#CC<-: ]XmcH.f;{VBCrnWM;D3337t &X."ϑ|h%xL	%	#W2^M+dxl3N!x%򭯜ɹe,a Z[XІy&%/kWI`F]#(P""Iԗ  >._³H4(c 2<0i-DT O)N.kŞuZ-m%[3[DlKXMJ[>w></>k&&'^aEƚT_8҄˨73r5˧9֪N: wM ⢔VM'߷C2]jMFPݽ#9n}l% uiw>/t#`VXH~pvq$,R&;lduauv3o7c?2ch_PW|?Lk?[jF|Q%R[$JǴ1~:a]9GW'=\bޝ?7i"%j߂~,|AUZd7jdw׾SEk0F'[GhIl/8e:5b;) rP''7]-u~3  W[k6?m&	|/ҵpZ k;5=JS-m_rQi]\Y.pơK'oys-{To<tҽMv{D ŭCQ-kz:VuHu6AlдvWZniwi`fY]O$Yu9֩콍EU5fn4y(ƥ+]VյzzZEG6,jvI8N$m'X"i.?2WJO]> NDk++ }Cwᯍu_; lkZZxP%ޟomW;ɣ\f溷y*Gk]9etw;)I-.?G H<;JH4]KH:u-|M4/ZkjZLW: IcqsE峙:4QԔ)N*Õ\ײ}nu([t龟.kmƇ^ qhv:^]W:LVӯnu9.OTAiur|][wo[+oM:J͑w6&ua˫u\]V߾(}FPǍ-RSeich"fie<N";U(U|IRԳ=5G+CRA+m<fyqoWk;ԞTg-=ehP4):,1l.,iÕK1}M
qg-%,kb\Loī2>Mi  ;aOY>^$47Lʰow;d-rT_mⱙ$qo2<B8e-=+=^[ĮR9!lD; d+Gy Z*$RMGH* F1K۴mbo/:RB[[gK8%%[˵-ϔӦ 2|AlV}:{h	岴D;W^YYKZ]]B7mUHGhcɧۮ$d0E%6w'c6[R}wVnћ{X!׾. /Rv u~7xr"~p?E7IeQ?hk	u]2+=>M\Z-ٚS>eg-5웅k[i _'`?nW߭b82~!kua@dyT^Qo?/_[|Sb݂mӬ/>ɮgf#fKQ@$"D7WO[ӱf;7x[a?,r= j*̒ܡoR _4<":$񵗒8Yc_>uo:isk<mE?oZ W !+D$".0ʉQ$(e =~m
*3FC"XHfVpT,*66 ͅ<noZ72#Fm3ݼI
˛h|8i-㷍1+dG4ȂR? _/̈ڱ&yX+.)+09Y w ZĐck*I<-d0Cop1Q$F,60Fm ?=:_Ƕu{gqqo!fYrGh&S}O4sZ#-⬄RA}_֚cG<6je-K 76=ou"HO8'Ӷo/>MFsղk)mلdqI1G/rJ  _?:8n1̣yA1nW\ucz+NKU ,i3$ۢ#c8ɏpiZUz	o?¶3Ex`)j'I(T-mH$Y6}7h? ]DK*n|J2eZ?1"DVܡ+*Uou@2H*u+JƑ`d&Qm?&ě;b^6sY9F' ִ\[lC9yycix2Sŉcp7wLcs?O,dT}pe2123;0P/??˘Ѹy1"C$?$Mpꪎ7c$]c&v  ֞{Dx|%BɅj<m|y%\y _?{\}HQD2ۼE (K38e#{_ ؉dcx1W1	0KGʮUĥQ W Hc2#FB[e%kLѝ,dȚrCQ󼎊D f*l5mί _y)#h2"А[~.%ẆDtcLb+_/mfe3be%q|gmC
ͱIm>ƭ
<yD`I?Q^LI3$jQđQb(*c%L4/6yPHY1=Ji
GEq1A#0ypJ%Oc]F[BȶOumB8_-Wqf`_-skkn$P8]i7-nDIouep<7-P]L+%7Ф-?kצ#U,E(gn;[&Mv7V1yw7FiYd9JW׶_Zڽzߎ s4xE{Y"BHZD"x0#/7y~V OBo41[qI/q(v3.
,#)dC_~#-3mw忝<: ",H&2zۯlJ߱T.[3lEgZ1,`S$___R$	ok#7$ǹ-`Y ] 2;(/* :$H{}Ӽ)䬒gn9\a[{| Hr(zZ"HLȊ8n2y!\gy	VC+%0bu+ۭ]9nIh{X"Ч5	Ԥ%Cp9_NQY#ouNYqd^ ^8m'7Vsܣ{*yMhϧ7?[ LM}9SXĚ2AooKa$H!. ԐKg{K/l^hRO%\Iqc-u	\\|~֮ +W\RK6݄wS\[VpG<ځ-gy3mR//gxg,eg|| ! AYŦ5I=>.ytō8[m2ܼo+ˉ!j $
]-ٽϖu75sZAď]C/o-ͬ`)_k׶ԚKHC-vq=[]țE󉡸-peU#F!k ܭ5mL%hxY2deʴj+sK"aZeX_~k..o\Ff~B7O";8' u>[Vf{9!KVf5q[5t)PE%h _֌ko\L$ysqvpl2,qĳE99q(b1iR~K?̫uG,=Z!adkkwuVYnei$wZFD~h:} ֟9K'"4hӮЏ&׸TvK[xVH$ȯD~y7ӯs|EXîjլ\K.m~#=JAt˿ *iAB}.TԬ]^nzuϮտ:e%+/hහZ	{HUbkҽԭe;(4bDMnw}7{~Fo%ܞdcFM!GF|{DU6nboZ7&h[p6/a帶n%gY	ihgV--R7@{u}~f@ҙf{HZCۻA(!i+,~?~%ky
γ+X|ÿ3>b?.D6|Zoc=-%,n+#LnV+w4ڟ6(3:ܛf~{/]^FQ݈clѡyˢQ$*hח^Klq
Rh]fV{fcI)FlźEk2fbo.;wU!`Gg'{g7am"밿r	$	#Bgwqu*\lp;eH<#aghR_yyԦ[HRo(+*#\fBKD&ڏ`LŽ ٜ%ѹCmd] Wu1HPx&ެळ2&"90'e>PwE pQ_ 	tMItYR)W	L4pJ&Dgn_Z_d;c(.#2yS͋!E MLI
ŷ۱tq11ۼJѢN~w|*#Gc$B?Ks$&nR;C>a>ϐ$P?ϯ`պ|e+vuˁ.;yH43=o$E}uhaotM+BiZ<aarP5/_[y7lCUd8}e$0xfi".	oKNמ5˩;yl[,5<8ɭKp5;yKorKwr{/~ӾK%W[Nn%JK(,/֑^4.ExaZZnV]/{tEm6Rwic")l#C%̗n#I\t3,mg&f|W"{{t[xTog1<amĊ"tyr$+ bTxغH	2*e䌴c}0MѮM9Z>437g>Qg_4rjcb<]j#c@_ȑY!,L.
|΋f9$1JEP|km >Gl<?s|Te㈭z%E&џ]6<A,9Aiwq1A{~1`)ʓ$ijU|5:jq]U{ڟϏ7g㾟mg?zK=ּq/gO4w"67$$&(!\?`-ׄt}VGS,iRq׾It_7C>ĺϏ~8|:~-.x+}xKT%WznO[#Z}fkiKo -#gfhnyMvw裀rޛ~7> av𦇯_f>:|H,olk]Ty;&%ԵA[u4K;ZF5xmVx'qm5}[o5(Y{[}޻\~(hz=OMi3Zͨ,nzxMB-|$ޥBwq#YV'6-{M=i;{Efv	#D h(#12C'U]R#+"*2iZ޽^wd(K~>DCX<G382dX^V+E岍 ַ{ _`b)eQ%ŔrD6$D-1KhgFDo} kXݷ7輬23<RʻDkT74 ~C$d2ZC%:D5[x$X0(C\)$ X6]bYLJ&eS@Q?*?؆xѮ#]]Oe%i;ٹ>{*ׯwu!(IvlOy>nm`"%HۘlG4U3p_]E ^)j5Oz[ȘHH3o*$ڄmлWk~w[_.쬚iZl.!7QE-vc2̶>_ ǯs ڣ$~jӵ|B)}2/-\V`Ԯm6~${-Z;vKWMn4NB\gdk5%	'ח]<' #{+Ş 3kօ/
hujc5H]	+io..a4U[篝P髧i|֧n 2˧11_\$!H	 mRI_ 2-dtiJlY6,"FmdO,)2r)a[d}:w t$]Tr/ 2QlhXHD3"6GW6$Vnf/Ow EmyinTF!qF+l1w  eCsHAM472KmZL$SrfK#}?^iؒ04؀h@:Hg|dU5} g4G]4G[Պ9I-"+_;yK/K,.pUchXpW|j4?I/kInTfanm,fX9$$U߷ySBe		۱	9&bVľYWl%}؆6K4el"ڈ@[q则%`0Rmr n}&b$ʋ怛UDP4!bPIf wOq#ۙ~'EClG<Pu_%AZk _օe6r;ya%wUP&ZcV%ݗp"
<K _֟Vg,"]%4O(]Yq;Ij{FY7ʹW ?*1Rg?cSdW%Ms6ʳOr$S,aIK1=:V_Z9E];|zo+	QaM̬T$HwH css[-Sޯw $F ?.߾$"BXa@KI]z_2[9I$SX ttBh<#*:^JcQHloߡRnͻ\
<Q1)Z6hPD/t"=_ u ۧqNGfs"h rw&䌂Ə#ymث_ ۿ̙xlUSn$s^$\N4.@ѶGFh#4XlyJeo]@חw-&8#ؠI$n$lS;,|Ҵr_G4a2ȗ0FXBn8KN/gZt%Dݰ!Yw X0bNX	'fMc,  3q#3U@eV	$qyrk_9Yy2©[oQ晟ln"HcSHx@yh?B"*"'>͆2L##$UR7
ZF(Γ|;张~ԉV*; d{Bt<n(0{[@eT]}
΢za_<{4?xOMK :f6Yc+e&.s ӯ)!"5Gi*qn'4;:+{^XGwomkca;˴r%X~Έ+&Eob*jz%}6ۧKy#ԙvZIv畦2"PUZ# M%YV**KurȍZr$ _%lכ_\Yh/X]bw)#c)%  _OaG+IvO1ܼ<9wFU. ]vs]n k[dp9Kyv"]*Jơ<|gùI\<R:S aQn&f3nNZę_r!+添luAjDИYO1fAq>eJeXyc6%῾#=ϟqcK-J9Uw>\[<I0/v&Kbtcm6,6}P̉cl_.9ð?ÒZ=L♞;+Z[ZG3u(nxn>[aOȆM"WҮuSQ^Hy'[Kn&/Ƒ{Y[?5(o)uI#{X)aA4*W{{Kmigdx8g[ _+֗Z٣54eWC{7Z.6=JRWI|.ᒾ G} LcL[֐{r&Pok4W<IZd7ewJѢ{|@2~NZXܰ,ߵM1H"f\3YDjlw_'k  .LKxoTژ.np)XTaC""(9g oW*_w%Pܵ ;ZeV,m:%*qwZX7ZFi^y䷐\o Xd{q--7K<9DXvO :_dĲ_3Zi'팳Mn3Dgc.[ .e=M>>^O$slu4R?UZ?%Wgew ?MzO{$7n-űo,[[,_N-2]VЛibݓ׸Ŀ|qsi=ݾݧewEm<cyXCnd[Vˤj[%6n_sZ4XKibml։4VYo#Gܗ,=B"9dO3Xiw0oCvm&iYgWυܤ)hOO"T3gg+3Z'-ZO{& _͌2ڔ4AAmlKy%*\]1iow1.v# ^fd0ø%D@mK[.#Qih>mF2GVګVHmˈ䱖D"mȏ)B//oO Z mv$Syx	R&̱V5!dKr41ܝI_vQ8q+xF\6T<VᣄW~}罙,ʨKKgWĬ_ڌ6RJǱL/$r1~M} #Yn#{{෹WtyqVt X-R~Oh}E3tg8IL8h	3/p,g__FlIbD##Ds.#'kJT=o _Fg(XfTO.8cG);DiW`]_׮tVWR"dCdyR$	HG	lR@^Kq~uK$KopoXd}thl4Q# y^זdr]VU۩>=ӛY3i
:[7hbW}ݯֵ3EtmG$lۙʉH/7y;̽Iu;ЪV+Y4qo"F)l(ќ)mX>  ]B儲6(^I)fMvP[io!oZJn'{cyn<[QlėR)x.Ȣb5ս?<;ׯi4Gu-2ha	!]6Bu$p!G*vGxZDijFk~w=ֺi2yDc}~-[b(5K"
qP.~+i?7mG(oI$_(Ap"\$rIC5ބ?,^[rOJPݵϛe<B"]mf$sD\N(|Xy5	Y<M(o642BMOl͐yT!xr8cgr#hI&0.]dRFG_k~B_^lHe@(d%q1lHgibo[:oߧ l7hx3eMWi۲[rnh#"EgjۑPE}-8m[Crw=l$fC4~]qmi2Y<ɜnە{Wό k؋Ome]K7/}ëY{@D%V%Deƿ=uoVTz4M5}:}f=:v >#.^Zh>0>%\Y+h?~&|;dk+~u$Z]CVJtT=Z{z41trתC므7Pr O_~GMέa -gIRUO|3w3[wI-r54՚oO7bgrM/F1N'_kv0W[UTE0˴4R<RQCnѤ$0_/ǯ6vR1w(9h"~MŴqU4 h(/  ]C5tIUԩhFbgky̏G)} ?I剮-fLj	xhT2$yb "MhjI16ya'̶}2]oFd'I|% =Esi{ԡCt0U.(g%nv`aOFW]_ O\Onm!	@qlt[,ꉱRZ/OĂ[{XBhmfw$ҵ̛I@tPZ_!=ާ'XGCxVO!;*@*Oz2Y_峎;Sq| 	 _  64k-噼x`mo5c]Ksko3^&y--mYvġ ?b緮.\ |fagT}>R~,oIKTѭE'۴v^Ě]?/$ּRJKӯsUiǗU mBt][O֬Qb[}[M7qBq,[)7Ǜ sķM%ҳ)/w_멛6qA[.%7K<rĖo6o*FH緎d`kؘz~Vޡ֞z[[N֝\jBM"h7pim*E|[CJ漺^] K$SDC,5cMżr4nmmCnQ	KOt.߮a{+k2gn[[*	٧yoU#, {hGy2\1?վf;-vxbBܽ<I$Sɰk<du0 6 / goFYݑbhyQɚVxUV;~?t4xn-䉋Ds1%Vc6` 4.)> 븩T;bNH)1QLC+oV(Eۭ ci/1Y#Mo#H`qp#[$8Sww,`, _a~~[ Z[/I'iQ1).LY+G:e)<L#"H%oMoa&użA年a166q6mFBJNA` _ޟ$&Xžؤ:l ۘ Sÿ]u~p%YYf/4nj: Ǹb#ddzi۴a;HzN0$FAKu/g}wOW/X[KxmƟj6:s&5$;Vဆ2<[+>^][}]S8 x@?;ds͟V%RIOEb{=myizLmđem[[LY~u#/57#@c:^-R;w(e@6HʢULHJnٱcYSf&L'xFiYV£%A._z^&&Yg2Lֻ-1=|>
(	"1v ?K{XVSb1E$)#&[ W͵ O"j2N"}mDeaœ$	^#4g4=._9Qh%`y_6ݾPͲY-.a?@ֵޟK\nsy"Ƕ(	v3r?\;lwLFJ=l.wŅxJ$1DZTܱ˵w##*vFi[^ ZH)DQw$4sCm1Heʊ}?HhDy$@M)geIwi[I&[6ǚt֭laq3_de_"C3	R4j_IEmC(DDk0Bs#(F'-R.<ľ4|]Mm2 )oRѴ+C5qcag&{븡WCi_|=Pmc~# ~-rf[붞;xK[<=;9%Fuvzuߊ%ٮXjm_[_o#M*[]3Ct2IuD\^J6܉GO:y
WeJ\ͽm?KF X'(SNwJf7n,PGw+-f3>纊ɌO~]ΗWЄ"IZcwDʢ>ŶGKy|^ṁZk~_d&[,SsDC	vdg(Q',hJ(w񤊲-z~_#-ocYyn[\$an.&UG|%kf1XEVs+ VׯU{/>Eډ,yU5##g7ʘ(_+fI1D\fL"<'B|\Q&Oc><\:V761'++䰞ɻMw礶A$J&7  yqq{=f[6-+h{mXL}rD_#O#O,ϧ&eIvHi3eِ4!bV}MH.u=N.fNxR9>m¦.XZ _1nӒ[Ciim^)imo$sL01e|G!bg<o 0VKX㻹KK.6o6S4qcEYI?zZV]~q4^AY<8.DkV *_ګ"eIaH=Nao}4zUYLc5Ԧ{;kp|q[Ȳ\43j;yP{f_*(Ɵysf^3J)YuWV7mP6c},ջm{F{ԓWhoqq=,9,$i3dxJIВNށ_[͒o-Mov׌$.JdHŠbbb%GibFa~?62YK{{[e2Fp$7i-xVEٱaĩVz<S"Cޭd$Y]_kjC"GƑM쮻 W7Z`Ӵ6;t, c&wqueceS fhCiq;U.l;5e4VXY)+V6pOWSC.X7B{ӯ~yφIhʖ/o-'4ۍp7Wo Kn%kSAIPR^ʪ;VYmyb⾆eq!5Ku2j<87O:LnDoq[@pA46_gZueTi^CX%Ed+m6FytE<GKil~{>mVȃdP%.b%gY/|6k{녊FO56vEs1 q$Oo.Y;!tfi`XnB$eIRD
l$Dm' 2~?/bЁm8IU2s2(!/e鿍Y8IDwK\E2^[Ǘor0܈E"@-p_~w  ȳ$k	V"-;G7K+2'yIcWC[\Y-3j/Z9ci]I|0Lnb"H{M5>(rK:_/q84!dY H,q/G!店u*WEʟ9IHGZaX_/?LH7YшڧlQ4 (*$GdY`f;+x(}ڍWs[G'Dw) wpN֍f~}O.-sm'mF0Xu;V	<;y{~ܳ@#xJ?;\E"葩]˹qgyaHkȗE%_h
sټ҉q4eG,D!| [mwwyha%~U}$$L^To8% ט۩ۏ!m<7E$-<l=4vlWN?k_oJZĿh4!7o-semHm7<]Y0K2>bL[ Ѯm^	'YcvELSqjO~z ^Z9'Rk3<67&spr4ݖ61GK`ik{oo_Os-ѼU~oK[۟i>$_XA(84Hu=\XESŻSt+zUQo[~7~e'ϧki~oZDZE-gWsG~~f"uox\aԷ"] mft?Hb<Eyoy4X#<utG5y޿zB ֟BZËgqww)kbBcwEq0U#G ]W~%f`e&[t[F& B|i$goo
o`.r-okqsoqYcyHVbdh ǎan 7qkIE.g}Tqn,7S&&VV _ėI*Os˞&r6S,nV8Q8e-nAlbيTX[湻PgB"^z~+Znckdci]^O2݄Yg1<ҴK5 x._[ _֤H΋ǛitF{yeX0O<i3<(';|298nLMo2'؁igd[Y5Y$yj]C*AԤuխ}YxAH%#rkf{xiMZ +Q[R\#XFm7o)QAbs\έ;4abؼz/Eix.g"4"6eۼr>-9*R [yz/
)L9i-"IRbd"嶴y >`?M*2J%3Im,P c66Ķ&R> ;Ue/䷆7FZ!Ano-VWk5>_븷Z]oqopE)56W7W<EwX"V6G[[ͭ?>mt3{̯$V0[6KM\C#my<&<qvšDv+i2#3V?Ǳ2^&efxgVu ̇m-{{V,,B_olQHdY&9MHZP1G?2,LA$L?c?~;>(𧈬nWA~{vjf-YV)c:ޝ}8fncp,5RMt Ğ$j<a*|K,<}-Z7^xl+lnRȒV~=(7fvu4gzCVifo6Itďmڈ!I._:yEW]m]fv h[#-%mn\G-@4j2h:mp P~r/ {E;^4),Qc:$Ȏaix\] G /dIcky#H6UpPwR#ntg_
O| M$0[hdd&;iZ!fxʂ	DYn# ?VO?8涙ZTžҲp0"K&T$9մ |^bKۍ8ؒꨁ*NFvs4s. mExuk=r^edIe}O1_
_Β$XMw^O*Ox`\#ΑLpʎ;1C<-e{Cｿ>}_yNKjV1IHbZy-ȕd4Kq4Sv.ѓנ:^lBNI_57DTȒ5QB& A^'7_eEݶ&{_$ALrG"|FFfDQ0j~`;[h7*3L5 Fb,%EL i _W̰`\MDFCƦ5!	>c9ÌOZ6d(d27&,͈L!NHHoJdS=;UؤіcP~V,8m7eC&{n>'/ү5H^QK]HT7vZ͵B:Aoga)ji}>~&Ug믩O-4kXK+b-mnj&"[c0("-+|, כ bjpj:4Fu2[ՑݚKdR5l.cXSRU 54zM/|t%֗[=P5M7ĚȶCF<UZOv1>pX֩4o_czA'|47QM5B47{W̻<;KN;7!-|!sht2Z"˷cK2ϖJN߈sG}z{/Rk-V-F`ε){yK"F>,NLq=o˧۳%m2kn;yurKHn(.S[X2.);{_[+ݮY)<F. MXVι18ch!(lg~{  N-j[/KуKע%EA_-N_1va<w:$S"VB]=Mv5Ɔdl߳wψ@βh$:67椣Ro W~/6~ŬZ̩aR]Fy 6Ksaݱ @G_^ko+y/ќD֦ܲݽʹo,-Z8"T$r&ʴi7gz~A]w=NǞS_ZY^iPZozͧkWIijs_Aew|d{G/nČKpr^/, pOB8]=BDZjR=NGͰlq@QoTRVzt==Ki7ͥ_Q,WM5͕І8Zm7lđ]:X$T\5"*}eouz7u_,^);goe?,sطQ
<A=q;^`䵷~|+?;1mmiӑb$mmɚզdד44ry_} v.Ȳypْe,Yn4~@f|->]w[[]Ɇp,V&}|2fr6++cL1W UxЮ]%f'9i7nF5ʼ*I8Z!E V܇%2_AJ+I"imԖqyw
iMP]	-^D-ϓA֥@/~κ$VX CXq\Gi8̾Hdf_,/͋=7/lJW`±H`1_0
K&4p7o3GKj$K']K!3%iP濯>%U-piloy{<fw;Is=աRj cx;V\KwiڕKW7kee:]ee֚}qpI<@F ܏E]vra4%(&QOt\K ̡jWt^e]>k[htۉs^ڄ74=&мqpMqxF(,o$-pڍ?vג,q hA}>}/[Y 低YfΟqjmskgH+% %]H !ڨ HW+%g[9Kmn<"OVe@-Ϥ_nI^g o&VA4[B!hgWee?kO|Iioov+vP{+7{ʹMwme`cldDo($BG,-GH6ŻRiV[Omil\tKA.>h/  ^FEK	P[7{%yLbYb	^;G5ȂUٲ. yߊ|MVRW.a-ƞ;=F[SF޴vJ[.(j>UF cHJuz.\S~Mޛ'٢G[ץXddkyell,Wmy~bmEMΧJ+a#K/wa_ȒkY4јhh^$oR{߳8^hvik|AuCq$q׋-BHO#G5;bSZ[^.,\H'O쨄PXڵa
LrIunG{ _"5E ti%\LM{!om?^Q
ȶYY[ZM-JJaIݬ 븮rRu%ͬ^MxOʰB7L 'bоl%`m\$kŽ>T_4S疛<[&[F^ٍ3D$DRD3G@V-U_=JkF֖O%ok
(d.ƑIX@U[>ux'[ 2)ZwapDSmu2K,+
.A+?{_yeAp67裈ȶK$vIm|h_oȬlueiqQovW2DO,^u,s(-[h!_>S;t$)[etjF>Za6ȮmfoaxtVq$l_Vy)C. ?@_2s!{dL. ®c(E}^${BUm(뭿& _=ǆ5]$WkUynJkr-w h	(Tq5Ν4M_NP7CslRn&7ݢ\ΰ ~It[&Z-/"Hڮ	|nJ(
ՖJ+JC(U~Z~E+w;HCra{.HıH$IK
 ~eKi7Ky.'h,˧bqvmgiu(ҰY&ߋDCbBMRy->u(乖=>Ha! J/b?Bﱍi4Ylm@uw}3ĖUtOyYK	o뿗?#ǌ4?榺V?_\ܛ[;'wqkuGeݼ7VXvXԃ#ݩX ^gGXjmfOy..|$F+8m"KmHEg!O!ᛩ~3ކ5{{1Ē_ll~\ͦ']UKJ["Y6Y,ŨA6m٭\:\OoIn+~塣PUl[eLXDhbˉHKVKA_iqP 5oG۲Xcܱo^Ca*z.a#pq椬&rX|6iZ4:uyf0yI$"X7Hca GPi#t57ĶO	!P}\)W-_YV؛^i<r]][^ `8OS>SG4`YYDv; _ŗAc[/P]DWky	!f,ɃRAI__נ]v5J kt4	s<}) ʎvyL(s8Ymh:~M<9cҥ-Dqb!I ww_Z DdG~[ԿU6im -w4$-DD
ŵ ߹%΀IO@`Xb%Yo0Ktr /+QgT~ >Lms؛/P>YmC:$ʳt|oDT#<.Ę\E[żJ	]Gt v:[׻?|&
˧Itʧ;{جm9,qI\]	mtyA	1nwh~G*%.7Ȇ@4*I/nԱq6CjHY"XKp ٝDCH%]?>neqh#խot3Ah`h!Gy]_}ѧo&h+dc!YdFi5Ua+oۤ5>h :]Xi-եK/7pe$RZ'R?.	|'|\SAxZkcꚤxy%/c1Lu55ik)&Ugmm 9ԮONMwZ}{8;/Mo;[[	suVD--$幼UW;H9W9`O>eiYmݼɤu[&H!v2W} ??'OO/5Y$--	R<nvR4溒dHWva4JQG̶W뷙R--$Y^iؒA#2%`"
qHιZ_^օ;M.ddemBC+K99_l<i)q$
iޕ j\i hh"kWl""RfdáI%Y)5/+mkvw׳~ov%ĥIeC
Q~|hLe6W_gGeF	mU$K/$loFHYpK}-tKm.CNw/ /mZvv /prW ZioZ3lg{n$#;nY"?$צ|޾M ]tEf"đۯ*o#aaxE1I1iQeO]{6o_X,l+I%vŉhRy0H#4Y[%MA6 'CqGX>vݼQ:O!嶏6Y[ۨ-Ů+ o=I7x[-RZiծ l/4mdHb_"Inrk?~Yu=6ApiqHȱ-Ǜ-uyI- #s|ƿ}Q:	@[n-}@PK      \y׍ʟi  i  <  codeinwp/themeisle-sdk/assets/images/otter/otter-builder.pngnu W+A        PNG

   IHDR    -   yDm  PLTEGpL333   +++UUU@@@   $$$                      


EGJ   ,,,(((&&&???888EEECCC8X222111///+++***...333PPPHHH444000JJJ037NNN576555777666:::<<<BBBWWWAAA[[\bbc;;;>>>===```			ϫGGG%%%fffQSUoorllmiijnnnLLLMMM###SSS  !RRR]]]TTTZZZXYYsss^_`cddVVVuvw^^^UUUxyz#kkkeee!ppphhhە148NPSԂ̙ᠡ}~~QlkmpƞADH"%*]v=?Cz{|!&ʂdfiGJNj*,1.059;?57;(*/$',]wDbv+.2   GpLf   tRNS 
	
  ߆.*,܅`灈   eRIDATx[o.wwR$X$@b)$ؤR8  4*8@ApWlWy{oft30n;ޯ5ƘĸInV{P'	/p=兕^tU/sT/Akg+,2%NډT_"GE6,D/_$/c?r+5JX_RQvUN\E˷C&IV~NTy= ֮HmTba$7fek+6A5X;dMƖhX班h>UO։X*ܕrX譭3Pgfň8aEh$wPda,j7\y&V~`mU)u|XS[J]MEBVYUֈhmi8Ԙ͸tXS2Nz](#5DrSBʷs~Cw+Eg3FxNYQb0SU{S}lޔ)@,)}'-_
~91%'W[2ȃQ0\IEMbNA=
Dǧ|!I⨥DwigJ @,N/$HNIJ#=q'DY Yǩ2-sz5w(UQ#:D)ܤF]Q<|<(_`ĔDIIxۦa DJ`~hVz#5.q:@SHDY0aqﱱCF%c <8iЧ
XĴ>L%9f(F<!>t7JMt?
zZH*Ĉ%#s։a!׻L~\ms;I IMc',i!aHQtR/h>lhCԈvLU_ μ>fn{Tv՘0}'Y.6I8tT0 7;¹ `eI8{flݽ<r@p"SHvX(°(:l a1DJA!EX	x+s烌YopY9038n:v褍6t67_FԂBUfWAsqP1Dds<$i.퐫,&vjwƁϨʰSG&<tf k<@$U3d֦Zk,&>9pYY7vOۭԴu`L]]܌JA׉Wj[!Hj
U\ Do@PvzعH+K2βA|nOXL"IT8&u{Y\`HGBmoSCk[2_ρe.JID>[dr8nv'"Iw)-lM* 5nhn6H(ŏE	΋ )Μʁv̆Jp Gn4)M&2G4ՖglG!MdQgTUVspØ"Lr2GH!è)JrtAІ.q~Z7/dj0&:8,JV|4h=#>?D;\7C8ރ .(rs.k&AֲY!l8 CT`3谳37蔫h	 ξuЉ x4z:	)aV 	4n͔k>Y˭.l:é2?͕ )ĮS	3,ԑIR$[#s 2򈽱fN1DVrbRO1mﻤv?yWdu.s_{Yǫn^~dH<iw3
L7ysY\p03$[OX<	",:Ȼ9my !iahHB4Hݢ:Oy['@sa!Дwuu (@-C>ع2UqxyaAQ :kݦ"^;dRKR_xyl^0Q0@v X~M1#LRe@i5G<x;W~Sk(ƪvhs48y zիÓ'O|ѳgϞigY~A$kr!Ŝ Oz @/T ->񟍮MdyvU4'd<Y,&d|t6O??> #Pm|e4rpEumgU@Lfl`\~
@t:@ǯNj
8	&\cbX B{tXNDr8x=^R9XRr1fG B%:#k;'bbH">[lrqN :$@ *nX*6&m1@[;$ 4?#t:3q"/ p0o1E *FU(?D 1'!9WuO*}|;T_gg[┎7x{@:^4(h0:@гg?x@4/xrho|{`ڽܽ:zs:;}x_bN#t$
(@o3?&|{1s MoSx|䑣_@gWoFg$<v=@{NO.޿[h@x< "k+@[
Ц
4xxOyR}GüR+ M|9:ܻ7.NǗei{{- ]\_T/J!8qj Ï>"34[<u<~)Bo?NY7O\?4ڦ~ۺhbHH0+-(h$ԋm5L enI)Bٵ8-Ҏ]Yaʖe~a/n=_9'Όa{MjN=  Sݮ>gQgB$\ @w߯ξOZUҾO5TĩaH_wʯr>T3S,=[|2GYJ`*{t:[Dq'5w6: nv9ٳgTI\FaO/)]qڮ]`Ԑք	O @{A	@TWrV_Lh loVॼӮh)pEk$lJ G$Fᶠ6TFJP)TJB7)邢<*J>,.)(BR(钢k<UY9[uNT)zR[RN?(ڄJ) f @ZPiV~~̓˫axx~qn&U(0)6qyOͦ\VEFKDkZw<OT 3	Z)}"[>>rvvb&ENzdt   `N[8;(~f~&^J1(lv-p[~Y !q$<A-nS;ĵJ🿿w 7& ܎H: kSU@DH`_u@t,ÔhVgw7NG F參M6Tnm[2RA't1V5D$kTO6f `b~pAzR#ݎA-4]Хn{Hf_<"P>%Spww!H(ᄜ
Pq.XL	%2Xѹ͢#,Uz'R=mxpĈlג'ǧӓ__f 9Oĉ\}_COC/8^%dX'Ӡ\)l7p_{gUs'EB}>FÓ:Y$tdHz;0R`U6R	9C׹VhVv672ά8Az6z8:`G"*bPWWkQ$|=,Ma*lUjZjCz՞,Z
mZM6"?"DބsDg-yYT<LB<l&fPAu;?&o<1iĢX|z-d@!d+^#~1JHzκ;A$ffC6L}(yS2Np¶9'[TiZ͏_<y$x$׷]ytcFd.O4DEj
v6l8^G8:9kj5D6'1=Nf,7 @<nXLN#uPxaȥ7v9;s}MIPRG8:3JCpIȾ啝y9\B}qbz#'Dá[tvOO.-==9-+JF3<-JUD_^^۸6z@zbsM'FCNelc%孢6fg>oX[^L'z[,urcU.j_CCGܣz:ztT6?X(K6[f{cpr/>K<ud~IhhԲ-r{u@Ȯ
 7jAz߯Oki>--aĊ18::5222<<<211999==$i*0EBkM#犃!EUX$(C3n@zג0 0%D8h	x"qdtt|jdjdxbHN'gffnܘM2;h4:5Fx* 0h`@fVʾ`{%hzՅ!ӛna"۫[	e)_gf)BF@|B >SLix$@7Rϝ;; Ot+tic3;깪	!LքpH˅AnaDlzV\H i ڴAP!-	 2T&Ln-5B_k,ԴC5SlRCLE>.Q~+x1lV24maA ݠ-8p:oIO2yc&CsUR4
:✭~}xӈN+MXa"1>dƀA1bNTI4"-M	܀=#肘Adi.]E
ZSCu3qay5Aǰ:
<OOONND@B.:o HD.H<{.P/~/:Y_H
_½3BM:tro_7'Gn泛	Yj}=Ą[,3TDPp,M i	B# BL$ꄹA| $tbl6O#;7;z;Ke_=/\^+GhOG՗O-BN㏪ꤳf$	f!ҩ႐Bq4n32qE<¡,">FD{M}q|0 ]i;4.oT~\}YVJӇͽ?oKw4[~T6ʇ_6["M:N8XZ''	{!TJ/3:q胄B0CP!ƞE-fRB@fv4SOG3Sutm@,7$v2	aq8	袲)Tc`$TqRcFF&F(5C1!s&7\jĒjAts"z KLGšhIXb<,JlX$EA3Io !b3?gq`^*y_1/.te6oVPB 
<γq'Uh-@@tGgTL @IN#˰B|"A`2?h	TktFF|Fsw#kUИɼSg	nB'Ia$Rhnh(:db G4Ѥs߮}+"]=tB<Pb2^񰤓^Uy0Q[hP!LbORM`".j!Hஞ+.OnAvmH/qdAfFJJ-Ec[3unvPB:`e1hf`XquptєY]5f1_~_Ac_n*pysy_VAl$,\MR 484>n@>(#I6D I'WcRQlwZPz#UdTƨ΋Im\]ɥ#pse[HitP A|,aa@lWoqZV0И3جk7&sn|[6 I@U
(԰صd0FAAUReAf­mm$ā!RKUlQ^#L՞O7ryvaX=EI`$ptmL)8 '`$''pdBJRQm)\c^EՔUsFSdAȾ3Hx=~lT!xNTG)P%A8p͖0c&dU&E8`',\\ά_sfΒ$v&S.i-N#\G>G
X&1$㴸q	ePG15/~y:v@;Zen_\"O8
6 _b(H\d$Bz)bwʎ9.$nzmlAenҡN$HZJj91N+پ6UTv1R $dClv|6G H2',d8&"͋+A*I\MEWc* xڂ#xතb+¨گT:n;Oa)٩<S/5?jlu憰|̠P
826+a΁-:P 跐bX6PX,"
fjmWٶx\-<G:5"uk~ 0%\ jaGҜ{  |fy Y!RJJJ7o^\][{jh4zM>zbuIٔd d	g7ө ȉ<M9:ũ'<	!qa&k=`C zl&lʄGJg7ȧA)8yg[}1S%OyMEy}cV=h/8 (J, "R@}S /n/{2	du@rlBs6P=C {7!DmmmRavփh[؛;K;-I#1_f~n^OપFSGk }˟Węh4!)
zNfAL /FdW[.4 /vbi#c`u@@D lGUvotRY00q8RI~T'4&T4ngyn! ORZ\aW ROMkŲoŋܧExzV\{2"ZHԒah'+rFacn&rPtyD(a2t:Y6  )?  ʂ8ilTsq4@@l~bq;Ȃ},N&'nOkz#s79D7D >  	R7 @S@,HsSOO~N)5I cK$kDl9mFWg|nx.&	A~᱉$t$5"<Jǽ[h[f$	vz:WG~ȣ=Lb: C.n4uSht|ߓT$z\M;9Hs..oC7hP>dDQ-]^ H"p4-2l ^ʐ*!o_Ŧ&UڬܼlĔmbFJ>MQ!	I0n` {i(pE#sBG0 Rs-@6S%NMG}= T2~RZB{	\[%^A /wΊC6X((y|o>\5NH]m5uQv{ ʀڰgVO2Q-}W$T6JԤ`*j_

&lG`T6CDrvRyg֐
#>Ȱ-Ê44\Qv`9D:&;4؜VFoydJvut>;_oggEk4?G(2Tp?)6xlRqbwq~ow9jp}6%5JP hO# C*ݞ3@AiyICJfS^Wu߳3PgڻqˇLN ִƃcAk6'BЎZ稚5kSYTzd[bl
ڷ_
b b9067#	0dv{{(e?s_?;NZ7u;}E( Iز9~Aӱطpo#kWY*wtou!iSISxQU7]L~z XJ y:/x);"m;q]+
upwUpJ8ԀBPpEeTkZr⫕sW#=_[YM/{f.΍gfkӟ7e}e7ʣ;IEU l)AW0!"O 7 ݕ+><<_ws, #:8Hħ; q:M)n6M\no뛙xbG+e}|$:ONk˫Ss{, Mͬ=񕹩Vȁ̦b|2q?p&@mԒ>Д-#:^	[J} oԞ횸?Q`co#+P94v݌c*IAdDTG^ʨϪS麞|Ԝ~;04A@:ݏ?^..oQWh4?Zиcc0"3G ;4&?wH"`6Rg=vXcTWrʰ4=z+wC?.?cߙTϳHzS}1}%cS:,>vv:S??6U| fk	fDIBt,xc!QC,dx !ـ	t"Ref8oe9ߛ@+{$s>qgj 7UkE<@1OSRLdpP8<Wvmxi4~I"WxFvVGzJfvL'3$$$đBh/7{ACs#,x29ZO%Gm;f<bCF6?p)7FFɬ ڧW9bGC<ڥC gԱl2^tܲ/ 6MMWLVKܲ޹lg䃳4s%
|N{iStzZL^ӴVszXI'cfSprp2Y@p)N|Ё@w)ZUؗʂ`757
kYQu"EG(j֥Ƚ<"vqZa[bGe!,y.^QS'r"Ͻ8z*	1xo_s	/; c%b<J,Q(2}٥'T>
6fYIY^#/vJApy dAZҹIJ~P.Df38.n~6w]] ԫ:.#}*߸U>1.Ez'խ&ɴ =D  @LA<y^'y'&@y-61sUeiPx  ~-qɇA *ȉdWQeN%&DD(HO!w~ORj,jZE7&;|89="@2P,Ab 	!kCͣ"v:a<łQ1#	J8/@/@oqϜ`YE'g8ewv] \ 5LnZH_ egc5!st<MB187Ptj}v⍛=IuNze}BTs,IM 0 B%lTqf|[XcpMgZW1bu09a <
?qM<N	]7*w>{[ zqKϲ* |/x׼#@{428OmIAdbϧU>BPJ*=jSPaQ6cT0R+>ӱZ$,@ =hRW4%ڌ$|8/xftKudFggD(C-զ+|1b?@|- -3al+dO7\^OG 3jLo~>	΋Õ!~d+Uv=[A}">.^dyrPI <V&	ѿy.r/:hb^ܴTr{v`T?2N %h^xu m@ʰ=@qT+2;#<b !%2pя~@V}Zm͔YoypIv,B	;\Qa
# @)OJЪhBxF\q @n΢	3b{,a
ӋO财 
(!/!!1M1;LW+;wN;wL=syߥSGJzW5JN9qMrA,>jy:7Y]Кh߻m6ߎEiCmǂX]}zrf,"y%l./ӢY2w\7][K6NO<.rÑTP	%A(5WtN$P58r^ӡwt|a4AWYswŞo r'%.$XJU#wئwmޯ=PI5"llxK҄Tt Y|kN9~A*g<3BtVf`ledK3yKKGLͥIʤf3I@R 59Fzv:xX.$!**
o#{Tw(=<H@Dm;ZFqYv^傣Sޕo{4އvS}BF{l Q)Bz*	P

PJiW<2I@nn=7|m;HɟP/1"!Qᤪ,?@5Qsҕ8OHpxc_LJ%qd.]&SW]h^ҹS7%(xIK(mb]\g
HPy:JP%"aC^<E*P8^YxPm'7k4,yܭ߶V*jIm6t#CCU8Ȧ]iÏ6`RʾNEh:Ƃ{[T***өNĨ鹸 |$pt^Fo7{gjom:
Fxn1~2x(Tꭺ1 \I`h,|W;$ptzP_߂8.08[,+Q}:;Pj.JIO9 uk3d4gh˗^+XMZW45)qT)a
JO]uc[0@`2IA{xs-TJ]O*]3P.AGI NU^D{:&6ۘiZZQcWIf67Al,06ƺƯBh{g7@dq[$]SZW$i;mqF&	H$5N]B(4KHvhԍNorc,J/LAC"80ɨ_sANvrC}<BMCt/ńn@2	AN;BV(bK3**.~f{h)i4YRGڤ6ӻ
H-& &Q4 <R=t:	$vR/z,0)\5 `0 DYRptϟ_
EFxNXnҔM])\a H7J_>Z4u:
ϟuqhEB ȹ\[gfW?JlUzx=:5hY'iRݍZE@ܙ`X JHxcc< 4l{Uzb_M'2H @A;lQȽBʓDI~/x҇,lFp<G%5
`0kB Bg#.:sΗ}_SSZʼ"' =Ϻ=)3UIIVUh?"9 ~`2Y>@Mo{7dt@N862NP c+ @yv.\z$kBqM2w`FCfOS*/wkwWB	WQkW*t9֝+:]u	ix%SB5[<_K~رNQfb|/)I=`%4:Sɓz\~9묾8b`-ᜠ#6} wXܢ=0`FY*8a9u}-60/tFZ;Æ1.HQM&k1HҾ:1`"%*n3<>gMpr`6kîOmpߎ%4Q@hdlpQzqTG(!blVl^+	(|zZl޾A`l4 A{c-! P2g_9Cnae[I-XG 1#'[qnH#ߴzlQ&_&VM'1cИ*Lfbd
Jj/R љLprq7	vAdc<	JoФX GG~6;=;tۡ4Ƅik]:fG"ŢSoBB!v5Tb[PEH#[0ȳ'D$DD1Bw?om`/FRȺz3ʽo0e
j]g⡢ dhat fPCNPeJBjHU0p ^k׌Q%Q3OPjdTY:~Yݧ^n%Kݶe,;h7_$F?xS4NIB2L|öC7Ž)PU]}%|@olm#Ύ|TMRϿcm}1.Ct >-	GB=E{ɜ45F ! 0o`8;MWo2KV|UqφטP~I&1&o"x8ûX$A$z{wH;$k;sJbng)pZϻ	C:@ Ģ@裺˘:}n#3Cj!<
MvTCW^"pȯ;z`ɱle
S-eSR͸/i<#;$[eHv[ DS/z;\LF;F2~dE F]/](	]]UՍ K8]k7 !yO*97/>T)DrߺZ^Une6J"*S3vIZ"rM@b@׶Y&95,ĬP@`$bJrMl{U pd aRPA
dTVUU}WZwF&*\ t(xx!cUk
(yɫTsFGi6Ųa:Ue㻚/\f^akpy\g%-,eRu%K{Š(MiAF%H;q<eOp%H,vr$H+Cq͇GH~3 J(P4D=EHBѺt8bL:irffvI;5vO?*3VaD.+FOQH'5[7.n`}6ԓX^|kviPh5ibz;94_RMZʳ4@g1}_NRe<T!apz
 5AjRRсFl$%IYKWjk/>fޮ~ʇ m'=`CRM*mVIgew,yobV? H+"Pt*>\=̀\.ͫFbILMge]OY1HQp'GA d֭uwG? bPP`c+-Tŕ]WbdMvf4ll2=-^cgb9<9KƵ@i3!Jn8T#@	0"݇Q/:+yZ!u0Y*9hT$T'ZqB--/΍˖+D	B1KIB M}i#@%+Ҏ.i}ka|9}Vo^\YJeh[^)q.Yߺun_q+[eG QeyRTcgY6 Q`a93@XRW~jhĐPl¼>~޽[kky<dj[ryCÎjH_[vu73U+ t?
&yXCPAm3oxU=nF<N?"<nٖ^d2LJsШ%:S{$"iȜMeG]oh4v!r0EC̔F6̚ "#5`8"\;&	]hF?BeedmIA"mR1bm;q8ٛjs[ѐe̥70;3oRR!o"8FթmiEHT)*hh8NPpKMlhB.^]|<	Sl[b~GŶx<knu+wgNZ5K1F<\}xcs)AXTLfum(DH~S_^ufu%tw:GXv)ߟ_}xJ_	KMЕe],At8%nǠ1 #R]@eD85qkj8UU Vq9NzZnsIT@_W.u,>@fS܇(\(oT<WYTUO%߬G(ݢc!0JaomWKey8e4Pz<ϝId	Bk /p
`=Ovkގe%pً'yWb׭HAsl4M~Ga ".չ}Rve01:JKuuph*JBJ.sx \4/=I®]t,['Syuc͡DFp0h6F#,`xeкTPMd6ƴ @p kNKksKj5ȤR(],K^?͆JO~Aj?[ԥݠ3=?{Dk7~p?Iqa@0"䏓p|qldkzZf:iXx@1J\;m<hK݉j~{3suMeܿo<~u?ԡK ϒtGZI]CT2\(wB>dwխ8@ѩ]Te)E	"4pY9Q;zL"уS?~ ,8Pl6JS$S2 tB$l a
u'{ʪP)L` h}nxj
ڗ<"ݔ7I8Z'N[~DaNtC=v )8 8Hra+kvJN0t-oNwA >`2PG'̼\+}r
PvjntG7}=TyKO&\GP2圌H
ZCctu/c`qLd
*pF$^7 taԨ,&{SSR.'Kw#L,ROI*	F12\F!3UsozCƍ"%'J xd:/:VIaì7AЉ`Q 4-e땕G*0E۞´PQŐ 
Yw8*#ut*U7P՗@I$S	[8(
|z<1'S`(Fmvأ0Sʼ4ccи_W(
ҥEVkWs=2zGBH%i.zN V5@lKa=|WRHe\r:6博b~^`We ŉoCO RÃp,Ak(H$@<eb$-8çHvZ+.Al
,#ޭT*[}iN#?hvTr}r$_  2v"5Y_6?C5ȪE#ZkU2l9؉)&}i^=ܦ>vC^p1M4Zz){[h	Bѕ,%TBkfIvPPoVM}\ז"uׂًKax	~#r8&"=nd.FZ-d6.KH[Yf|ZvS#S98I`X9Ha6ֱ^oq8D?Z᱕(VC`1|fSU.w8Ht[y80$vꨎ_*\ϖsS+%$:n ЌhDzثSg0le(	 cNՉ7Jy lX/X0}:EHHrEiK*K߿ᙃ^}a^ϲl?27[RSܑdqla4	v6fsR^^\fiUkՊACײAG $VvTk ?c6BL;	bB].?-ćjGks[]Jj̥0m}AíUۛIw[e	5]|hԱMt Ue]:np˰|M8|i>%(DɋxS($m"Dy;Ψe/7P=dp؅@b~7'&XB%,&1I{};J\%..i<}>yd:t@0&:MO6tʛ"$oEQv}FV&
̶EƬimnhtlz@]h*b8<
!
gT_N&(yo^E;pVs 
	@w>ȇi⊱]\YKO ~wm~q;6JYܺl}c<H-(S)Pp1,'9˥;fb@蓛ozZ<i@ۜ?A͔`]ps=򌝬|78ӓho1$NbX+QiB9{ѮpWKPSF#H$.XФ<<7aWGD}q;ykm5.OnNfL
ΑJPi1fh 4|HJu^NH aǆ#X[~k5GP,y)-*++AaSrC{RwE.Cx>I<3p-/tRCZv8Ȩwkx[j`ile]FGA"s«φ  O/yIbXkv)1$j z'}EGP/m$,o/iC$6 >m%ےǬ Oh+5jjd=QTm;}%|%n)w#Xjp0(fHYS)A8!D6.gs9PLJuSlt B';6mϹXTO,>n1wxnq2]qzg׋<JZ>G(#pL*RRDs&tGk6M-ybl2{05jvCӊ; /aA~Fqm,|7_":Mܹ1Ԛ<ݹa[%rmMC8J
BD҈% ^Dy0c6^ܻ]~pgWWaT@xS4{P(f܏xۿ,r}rԂu<1xL X\[Xl
=u(:w*6ᕳ0e(Ō@3EzN)9'wZ$8^.ߎqRl ֔X_ZB@rl+Sv<s[ر8aa*_[[x.__{mMe񀃩k){U>i8f4DX/TZi@Ggs6^~ÕѦY|dj*qO֊y$BȢ݃޲~`KT'ũ :R:Eat<b$G  
UMέm͵mHS$%B	kO$*@ƕ݌WjX0n1M*ƋH{QUMbiVbH-:ؓ1;KYgS.M |f#dw^S;\I(9栩,mPt4*ś$ˡSψp<)GJ@ܫJFӟnD$~m`sd|i||<TGL̳NBg1w>j`Fcشmi H'bT:ψipi2~T%_Pwҙ?-m7;>>4E|P᛻,x%5簆\-!gЭ*Ġ]}DT<ӈ"ˑD`JFL+M%WUaWggg?@<D[
j݂$`gxߩ"qf2TqlZZrS6>۵zIU#GJ^YIYIJc=D)X=_T?Ur$ř "1'aٌ(E1RM^G&R0jtDb}kP$
LbfO@⮞BczP~o叺;8 $UNB<AL!r(P$e}*TQߍw4>svDo='L%T(Xbx)NgS~.=8D(b #3tJdygsYbPKFl:7tkr+y%7ܛoH1fZ\)bqsIQvܧ.<WM$> tQ/d1џβ~-!$	6-2'GioJ%p8cV@N0N(\jkww5qV^~wՂ}w}I_>@~[r-O{jQщBeFgnk	/Z/[xLjA+È&,N#2#~'=9Ѹ2\f:\e|]^Vx:"d= هg|J:歊|SY	e˦Pױ\! H;R,z
wp-z{dK`O.b:7}[8 (A`w0!RY\1".-+:}h𭻢}uo_O7ي?Z'J"e &EUvnW>_ǌ8:NtYX?/:J<=P;t=&Nqrh*9X!:ot*T3.ߦ:V4UzRYQ- 8닛|m~vo¶/12lMp8gktaߒoS܈o$+#>iA-7=&b"4EAxqlNrQ_~]KkGU
dCfyf,l0NZI+ahMƐW"` 3;[]z9#ܫVaq:~<eA>h6;*ny9VWKRnE&#FU\[Ec=9pvEeLV}GJEYBji242*ѵ9~Ѵꕜ[lhڍ7\D-%/ݨhVa}ttϰ8!=s^v?QSB+.8EeJML  CBC3 u4	?wխ'{^-muG;y>}zu_K~;<b?_]]9aP)%hv:ͷoV|ߗwOqce;{36?llXRAY2)I=ԃZ~vk֝=n{OYf7n!tGaq+u4dRw؈pͩv>evCf/hl,G6u,Ʊٳ2SΘp$|q.Ap7OWFuzR@^AAҟd{11A#S$ASގ͸8䟌]ce{z*InTOR8Uƌ\Myii5mBY/7[&.n8YTY42ƽ
bGkaTy B0co\Ksd0bJ~FTT[,	[=VCZq4! 	@V>GT9%]WՓ?R_F<lg玞颲 I[	YwF(B$Fhz!G;PTXn4y5u(AP+4Rk$1[5׸v	(Mc3cTqԔ̭bw88H"ibG]R.ezh~)yC0c5[MU<:jWW.ݧW_%nH:YYoeu@֖^0d,rwb33~eˁYh͎FQ-Vq+-{owkBnך'n(4	m4,۴P0j]]Yӛ+6</(*KIw.TU;N{OÎ R);Ar+gKηSWq[7o<8T@%	͹X =!"Dh->H6(ҸYw z1@S{O֯V
 U TvFp#ʸZ=y#zسgM7Oe?XVħmnn> ks8o%{1Iށ˜ߐpgFݛoӚ*q"$ቂUJ֪HBO{wU	'a8Q*@=\|:QJsƖXVMbV$R'!q:"AHZY=:8+-S}]PW#GH:p=e<NͦҸn+essoև֯Mazne	oBGk1@%LwHj 3%P+Uq&0Ayݳ[pZ@ǣ l1|dK)(g
oA5%q%,. vQv{*I@ùȤX44
D4sLGk'g	*48=׀-[֮AHhk^OD3k08Iسh4l`JPn-+}ժOv80
(c,d8N9){K*c~~~q,..QSA(PR5(9V$aLHbW1T+`څx\btiW+]$A;pi7:FVgu
Ο-rD??1󋹫F=_Sl(<OKE.ȣl6ř+m$.P%{LN!"T|q|0>5cހ`ބ`25u*)Ӷٚq#&;r4(,@*FY$?<P|iy}<9gP|<5aqӐ]A!2PՙEPBMr*CR:`h(iUVfe?}TXriukdw ,n)ɶX\aMHCau d| G]Qwac?bBvt݄	!N"^DikXjus.(&&*%t*g$+uZApOZv#a AYS/G(BR`GU3\ܽS2eaRO7.v?XOuR;iY-fh=yQh5a֊?yC.LIe!tdQz#q NE3bq\\`֢onWE vS"9"ўcr#ʬQ=Lj!>q|`$=k%T0R"QB2F=DmWxIz*doTafU.3Pc8ix2c	
qf
dZP:X6@O[t]{چj,+\8WޥCVG੗DH5(
lن GW.hɸjP9N:ޛ^U^Ih5|sY[YnNǸ]W!cJv&6ӣvS	Y Hs588dwM((&|{lk>Bqey0p+7$z'Ю-^p[zABDBDb.~7҄9vUjCs,M,_ps*8uN˗ilJ<Qף*{/\a"fˊ!3GX!XKN8-ŴX*21Da"^3bF5L\]#DBr	&Wfd"tLL5/S܈+?PN}U~n1&*.9lXWH	AhW^ǽ#`SuL*o/|V0^wze=fDtb/WVMT\$bUDIN;|AxQH?(7 9ؓEfc5βK_9`	DQ`
!ED8ţC|=h'Ӂpk!m%Awm0L0U$%;; 76$Z/Qn1Nt]($ugY'<w7L-/.ll[Ls)y5S] 蓥^iiM>b8?C/8b'QkP
p3ԕAGywAUzr$Dn9eTe}C$`9	`^ēNYZ23jAB/YD:Neq43|uhQ;qTj#O*YI1(63E#jʬeJPaUhxˆ3xQi@#p#٘nw+~RQJdZy|[ƛ@Lxb8Zd##:i.h t:u(T"e9ّjADF1.Tlbʀh=ЁP߳6gWn-b땛QֈQi2Lĝ5̊
EC3^еbRV0ij uq[z#&ݳrYt[><E3LLnޑ#`N{G7s׌\"	$>JUH^k2ߺړuKIUC_Q2qn,Xjټ?%2?m{LX.Ef3{͜Wǽ"|yahapܷ%օlKMm7j*jI2;7DVI=˷񺶩^iGfۯR    IENDB`PK      \v] ] =  codeinwp/themeisle-sdk/assets/images/otter/otter-patterns.pngnu W+A        PNG

   IHDR  Q       PLTEGpLVVV$$$      AAA         


ε   ^Q'&&ƿXXYüvvw̨TUVabcۺݾ<<=Զղ^_`568Ľʦ[\]ȡ@@AѮjkmDEFmoopqrdefMNOƞPQR #IJJxyzŚϲ׽Õ{|}Ժ=!G,000stughiú̫y++,5ݶ༉tjOw_pj9ԩ?&{d1㔩̡ڮr\N4ۂW<ijicHۣoT䟰xƅn`Cਗn˒~~"Ð}㲤仰ȥӠO9ܪљݛܓ|57ƼYK[?ӌrȌwz=+ߵnOcxHNԘgaZuh'ێPx`eZxn+ȉx04˻PiEgwjՅ_e>*lS:W6%E^Dɑ<ʗйU޳rxKĦ٦`wiǆ GpL   tRNS 
ibO,NJƄÉv # YIDATx\ko$P`g#V^\rwA0>#+=z{z[rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\2$ڿf-NYí,+tN})
ǫ=.;UǺעbݣfi5nȬk&LľiW~6$&% Z)H >)$^#{qf|JUUX%o E'fET3rh*c߆R-&<3 aYK'c(&BZY(DUY,^hCFZ)H'rI4_3P7A@%nH`4%MɬT6crp^^^zY,ar,ջ
9ah20
eLC94yYݾcؕBJ ϥ2vPeMGUBU n0ayS.A{v٨qM]+&ol|/~8옑xb$.ebp[4Bnq͋WmtO Eh2d5ſb^Ò`9CN}Y]p29kR9DQŀ?b	N`"T/|c8gP+$SgeyWu3r4 çןٔ_#×S9+P(Y	'I?QpqdtS徥cmǑnF#'΁pHo^`:t43߰{ݔVF6rGj>FbrvO2Ɩi-x#K )^Ɋ&ʥqr@5@Ӥya]4|фV٪V[z2nT6SveBR*X+ܴٛIK}'\A=iΚO$[E'2R Ii\MFJ-F
4WU/n߳v_;#z4\hr&[1xT'3 PyR ̈eSD?m` 9KRָ1"i1Ιp2`4Yfs^'["R,_GHN%ԏOUuͮe%2kqA۫>(g8[+?M<6$^5m
Sϊiw,8g1(`xL,˼S,[!&Թ|EpdN5^	i,FdzRm쮧d9뤗ǁ̠˟Lȡr=WBs?߿s[߸Gf*2Dԡң^_ٮc3G(Ùș5 cԹSޕlK'ǋE6dbiRQsFC-M>'[+;0߬glKӅӿaP(Z1O`i]}
/z~D͢,NMSFBDT5Fgb,:aF/݃w;u.z`a1}?X`3i_^7)-@4+Xܤh:hYqe¶	'BfA.s!	 %DH>3A=ɒ|gw $H1jNcQSpAC
'\,"LP!?rildQ_aEϦF=Qdyӛ]FX'd4(ly?եԣ'}$h_Ӊ )\10K&k|`r F#77p&Ȉ履<!^IP(Lm:)<:;cy({;nϙ0RwI5&{T&&aJoާYG`,49A\sϭ߇;N4:%wrn^[*LvI$!4DzJ=wӥCqJ%PW+!hBv娀|$>"1*ŔɀA_}wʹ0|Is;Yu:d1xŪ!=Ȉ[-|B{h URjʃMCMm?B>X%0J²kϋ}Dqk~B]`y]upF,di(IAUj _r^LԆ v-~ jizn2_|<9>[LOn[2s=G7s,5<G'k.Z[浑 +
`2P!;9`[0d5_ѣ+a1 Ǌ^[;f"T\OL=T*Ȳp#N:2$G|>~}"✃s 	#
&)bz'MWb.ЬDKؗ+S [?t.xa{p#~q`у6u?c"9jpe>9IJqV%bO	Dc>	 cQl<+eVC^ϒqBӇ$yЍScjjO#sΊ+N|yw醣N|e=]MVV${z`4z}t?H&E=O^wp"$|OZ<կ\?]6/8?_ʧ.M]_Vl\T6mFBˇ :3IFL)䀶@?y G}/E(F[O{	3ЯeI`~-Dqy	D')=);_9+{_yέdG:) d#?kIqvx>gƄ	8][*zN6U=S =_~zP1EG8{\/񑷕y3Vl$~9牊1ZPAтs":'I#|Nk7|^q-s.FY
Q#2#2ww{=g<Mf>buZtיNjwѨ`ظYL(EQG3Dc
ھȘ,.XbZ$E`!6Bt?{R@ݹoCpʹ *b*lڵZA ]mO%pd@Y4LcKdph6V
+6z?C$4vbzMaTq=;5ORy":LұLQ7lzb}XoD]RGkws#h\LTghv"v	HLdD X
bo}Х$
b.@> X@@%_TGm7;KHttu|+WXwWI.7	֩wI៲ [:1owJ<q൮G e߷QryTד.*ډ^G,UЍl`QB-ѵ9éd}t4e$pjuŏM))C.O	s${POX;I>^A+z0v+Ktr@>[+Qn翇_JdI܎rTNUP[	rOs7$|Y=]ړ1QŸa'6g[KU1|NbUY<U k
3,y(t|*?ծ09%EL&OBIKGeYv|=
NVf>:j>mҗ`u?k%Fk?Wc2p?vYp*c5U>;ziչev>tUS9+L1w#L!A y@.zN aPT(3њR u2(֌3cC5KB6ܰ{zVfdt -ՊT$#]g^7
UF,2WԻě["փǁLIZBOL3{܂ʵdnr󉃻)Nވ"g4g8A|r}U/Kh aH2?>R@$;j, J:d?Z! u:8d]fӬW4j8<dgİuw5DSzR$^:Zukޘ]hׇW 1|FrK<ORBwrgLfDA3iZQ*)/wBؘ DF! Q/3
r&X*PF#WLeZJ{Օ:֡ٺ'<eih<*5yPO. ɫ2fO*= p!~E@nWYCҺwX'($ȺLb{%#HZ:,Ĳј`GW Aؔap)%0X.GfmfrU`rHmUFfx((II+FnS_hSRͤXءt"}3Ȯ#]Qǀtׇs5~°=̥~R%aC@;otUNYyI~Sל(%X{m*Zj j"M~kņ]V(XCOz(l`mW_^`v{363.#KH;Q"te@	&So*#yf@xZ%!/0;Bf{!0KzCX%]Kmҝ~jB|UL||]CUҍzU-cӵrz=ekX#K9,c)#/Ԑmz.[F["QGh~]J<ZYQ35!JAv.7s_eEre*YsCRiXETW?]Ѕ5%BƴΎ SZ)o+?*Q?R/5]U>6EQ̃NPOe]/K0]%܊o㽜PYp
YUlC!R9!v"V"=1Д)^fU3_zz-j\ &`
^>|߯'< 5ͽ>h eChkёUn:fURJwK-0iBP|ՠC*s6Gɚۃ(wSOTXTLIs+x9:QUj4(D"Hpx!QEyѭivVg3z%ȗu]N;-S¾RHrhԻc9T) cPJ0P`[YM+_=LA:|'`mZ1i1'?×F{VMWd;h:	+ԁHwu=3]*U]}.x0M˙#936}gs(fSS%zi7ߗ,nF7ϵ}%;]%k6_HY+qE$h07^<?Fٲf	/5՛)Yl]iSP}ח>6388W>3}U.kgڽZy#v8/tKAUxxGWLijslrngS)yM5,W2l@ud]Us.AY zpd[&SӚ:Jjvϼv1r`޷wϿLǩqٜwU
jX(D@l?H7_IG榛>:FEW:O
IbQQ.	͐omFӃvrs5iT6%:f;?I$ aqb,stWߙE_H^vV}w_+4>(a	~"ZMWM7V[	م|F n3*_(Jj(_PZLߣZSv l/Za!#`dfVy]#@Pfłʒf̂wIEoB6(tM&edA$qp gW	>ʓwIsmLÑ~u5)ڤqŰiֈt4d6mK}k͹f5M;(ޜ~?(or0,r]ڑZFeȷk@Kl񼾽eȋ|y33ln@X̅}WE)Lfm\ьE㰯 rzi%ԉZ^7u-tRuO<kWނג̩2"Be)Ry:Њ1PL9Hb^)AcaNĨ|ՙIMbvOQ&vUebm6g,шR-Vb4r-Pj;W$TJpLDIV=_{*Ó.Cy"D9c4^">Ey\@ +!j,/Kr\ ]& _[g/F̖Y{.;Wuyru*#iIH*DG{xQ|cX|)dGW	6&]duGJNP\irh-8AN/77l,ܽhK5*ݨ²0Xdlvvg	-~<-(,q]yrfL)ٜv(_QSgmP!	:1sS	
Ob$-{޵#Q-K@HC}Y4 y5^|Yd6ݶu,Vsl_ DLjZv7vªV9ͺV?lwbwYu'xf'
<K=|?讀l킕R$orgY>8+D6:+dnH܈)|TdJ${(ΫGymk%e_~X=\\D&[ղ Iqy8)} .Լpu8L	yER_A_moOjsGXjdTδw-͹9:?C8_9j#AZkiAJdIBdlD4w,\]WG C5i
3w*"HSvin'@()l ;o3MVK|\_S6N=vts13 `wO*d,H$g,%r%|>MVYvHe!ط忞m2Mn˫>q:$3;@[`1go#4r*מG(硍|=lBn
PjSdODH d!LV93!Ah&*Ot5jC⯚Cμ8i+9+x}vuݳO<HFAX=he#WfQO=hz4WL/H! ڥ2hRaD_Lb1,DH$;CIԔ40 j+@I=_\xm5#ecRmc~p=~<ֽyh{I;o@z7,3lb
,͡L$H;DیL_9HBho)]8hN̏G_MV!tg=퇀p˂|%ߤkUZݮ407c]\ڇCIɞ>F붚F5bjfRKi8|'& H0ٚ6/X+Z2<INIq^=b1xHhc,%ct,uV>))e$@hk/ .?d/]4*Vh0
2EV	1-J۲ѣi:"'(3&tS(\	
(,/҅
%2q$
m-$";6Q`6wyw74le?ɹA@v5 T¯B<`0OH'E*= \NGds	H@A@ ݒnĈH8cݏ>XH=]^e_9n+Kg	F][8	_Rvg̝EOscz#vNOw( ,
DQCG
$5lsgS1Ck|l4@I6>vn[b?ƽSk2ҍG{A[;D+DX:OH_QL%{BIc깃DĂ%tY|-AdO$iVSsYX@[S?&5HV&qobKɃ+*p=
Eit0B}l;>ܔi/6OW*Bhs8t`5jJ41Geg9T	 6a}Ga$5O|ܘ;vFʥF\NtVcoJgufNFiR6'	fQHz]^I!@50'Q=\iH;]n+6b$,1ɜ6'9}_H{	.zҜW}$8z^H@(@MmEo"Ř+;m]Gɧbm6'>C#WcQɜ;ɅJi ,'U]OUu];*U[[]ՠDT.'^G	N1|Ja`RKɅ35}y;;KjLww_Tf@܌& F'eYHσfW\$}f" ɵfA!LbP:W{ME3a\ǒSG$VÓhM
w?}䢒8ig|e!墪qdM+o|P3TBz1(͡Dd#1EV:} _a}S5-q6BeߘCt{# UY6 ]6l!FBh/St5Y9*;E<jrhڗX\$	Su(T!Xtded)ϓ6ARcM,ds<%*Xp+P ZHPL;14wsҮ&Mް쾞$f^ \,)2|(|ͳs@GR'"_=]Ҝ9-q19;_\x@'ʃڹ #BI6D=z
iE0fQTo{t}/:N7aO2zoVAߢA;ahYg2
BN|L~³.&";l5tA< ٢Qqf1gQ&H	ڲnw%6*JW|<'6kI=ԁRڀf
%s)Ytg$<k>uҍ7Ptf;GUXv7aWXQU}sǪ1#9:2n}iuP)b61/]'-/K"_ǷZ'uĺ^(vII@jGlʃ] d@BH!Z".w5}֗r7{6j_DVqrL 3!zDωpƘ_6c]8u
f[/Z|",N{a\iOңOE|탠G%pf/rJp!ay~O6+H
s!'eBjLt<ʄ ߆kX$樉98\Ȗo_nj4 oO"5]P]4hqܒT\5T_6wo3sqļd@ jŒ߾o^^k	*eu&La/&v6Cr44}+KZeZB4b鱞.LQ-zD[Bp$nd҃9JGC@'充J_MQEN[\RJn߶q+tTgXkʀ l^R@n,G㡬.2}/2)ԙu]|YAg'%1$0/S]gx(ۻ[ު7wziVy:e$B7\}GՃĽuqĄ	
P/e]G's;Ⱥl?%rffLÇ
8XYD?aLo Z:P:uƧ@$%d5Gfk 9}q[
$~D~Uf%B[d5h.AK>e$@bD%P	k( $ye.ȗ1m򆣡%@a3dj%Io?~(?ϟΦ,*UҮghvȨ[m*A(fB*$
	Y fSC9~l4tՕd}FЉ>~1Nӣ=S'&HU-;d>,ϩ˾N[4ywz4^cīaCAD.ѿ@#DBP\<%ؾh;G/;ʝ;)R$Pރ#&4![PX{7sԉ#Pd7"=[(*<EvAj[ݮw>|~r2 !` Fp''	:xgjDi2mh8j퇨=khWkG$o;`^)`A  q=U$	aLK΀-p㲅vCEp8 FI;$b +R"fgD$Y׼EFkUnQ.CH?Me3Ni{>5f</{aC^!L(H[#y"KL'EzS4t(@s.+|LK#;uEGӊ/~5|E[>=QnqB%b$Uξ<Լ)-R\#o;ͷ=.Crq1nBZyZOti;SODg?\Cj[$]IT>':*VI?w
E"?zx:U_6h߷QƂJTUQJ\>1x)27ǲ*qB/zvbh*2^g#e5M1 WG(5
c{@_(ww&gR$F{"D'k6)԰ :G(Q$(2\Vn##2icDT-AbD-'O}(㐞6DN"U&@q#/kei$/uV#%5b4ZEi	%:3%>9}=1iluɣ\"(Z"B~,ȿ o1mSЌlTa T}A.c5Ͻk>1jUmwBwAxe;C۲	i]#GXzSz{LgQ*FI{v$
3ډI(cZ٦9,N,*tλNhqf 1^lZu	h
FcS7F_!iL[4fT7e+~}/a/NovlJ'OSZYLq/`Ц](~'jW1ÔLtmuMcDEd7W',Ԛ燢ǽbu<v}.H!DVHAU}zj3GC@mqb5;l/tS)Ba
saLھ#ZYTQeVj>O^9XX->ԋ_b`޾~M??|	TDq)҃9Dzh{:&A+[YOLj}NSCo{KNԚnh]b-U̥B]/Յp+09+?(}ϤC&45C2ZYϊ}p(Q~=3tw]oO7wbZz2k>Z%%JgR4mR=rlC_7:j:Z0qXuf.SB~z.t}l:6Җ*	iulr:-)Q)3O^"I>XŰGqLVYg1ψklbxRkrMx>xH-j*#QB8DqY7y5W,J2*b\łh1xlPvh!M]}|MӖNH[KDJ<\)2#^h&/@Ń4Q~R,D&F][2"{tMU$AzFLhh(p0LE" FaBfMTGv}"&ޞ_)qXFT l"t=ORdW껉FBI6Re2>'>L> tdFsMVֳ]#\gw'hDbM>..ur#JJΞkRؓnQHK7&%CaPO"1;d(DUSʪ
i׷@SK%|-k|خ'R߼O^縷SԤlt_RLk7~]pjel&$Of+Fk'Q[wmԦ[9JQ,_:rV&k[7fc7Q\dDo8!ZYj8Q<]g*t{92mc#1Qm^D1Vk^Yһ>'L\$
)	/i(ٻjX}ZSMyiڣֵٓWhܧTeiԹ"LQ4rjmsvc,I4J\dp&/v}QD}}]￸ʗ/9"	rEwfd(_&.`)eYw}q`^<|ee2Ľj5̕7Q>>_gsSmWIj5ӵ4;lS<@
LQBCUʄU"Umϛq7\礕GEA'Og_lW*D4Hi遺K耖_JN[]]Ͷ&1IP{ J|e8PنZY ,DJf+GP6P=ϯ?z @T^Z5|c*1k=\q]3u=T/	x?QyFI5xn<h"9|Eަ̸8u={Xj#QS9e k·	=p$6ZQ[VA|#3ylԼswxh2)5
U`WLԠ_u={dH5W?O!&LlzR^ IueL[ N.'QHhpe'\Vzy5]:|a[zQqoe,{uakxbD	'	H̊zp!(J(DFKf"
84sT|sCRDCo%/?>e	&NKH_ D5y!e,A1Qn)w{+KMԤ/ZJȹʹ?}TKDQ)TĦf	Rn+Pg&JaWut4,ѣgxz^D*$&򩏻Q+'~Y&S1|»[P1CZ?QTYcԁU[ܡ4A	4n.ZY6󋨚QBT DOr@L\be
&x\4QԨDb_YmQX7W8;)eE"o'RR</yFNOx(j%*DZh\JеYmEpkY("xq
൷p$n3d4eYyya}b_b|ѢcK+]VeQZY^Q_Y?9} h6^)Il(TÉt#-R}-ӧ8"ȻD'IRPk$Bq//&&@:(3}K3n	afW^KD=M:("AKӍ<@#x%x3	)\}R6Dh|(<<Ԧb́)
L@q`.-y2J}j4[:q?&1SqR2/d*,	8ET[[(#x͝C>,l}S;;%~LiP%@ҲRa/rIT\h	ݰM:kSt6\'"죺	Ew:IwtK3h㛱<ۗ@$ǖ6rcBI($g*QF	tڌfuqDT[M8þ?ؖ^2EJJ4HSJEVηEޟppjЃDuoQV]G&BnM0;`{x(+jRJ<JEÀ0{'b$Z	LC~t1dAOjT.˜ӄʞqiRXgw2$U&	H<O:(|Rϙ.lENQX#F]XyVke\}\6W!qg=)jdPUä]BqD	R*e<<c1IsTԨʛDu%ZjҭEx5vRbJϛm"ےA5d>80_Q )#rO~"}w'FϩGRj^|w[xQTWVm>f;Jk@$
Y[xסQ-jeU mYPkEp=4~U~ewR
+F5TDLyNWф^2
߇ϱyd]Bno7G5(G{*Ҋi*L|KG>] @\ky̍f,1e/W32h\Aɚ5T=K!rT'SUP*8}1}-fj]6tpf*&P6@nRv[<yGkg8sjzTFewvݪGr}δC沸"ERT+n]>Ӻk48%_O,(b
8b#'ϑ)ybZUwMT2ioQa]}.[^ˆd5
dm;|IV5y]d22'O	%pi
b$bQdchOgxl<0$
s}V7i7Vg@pei8*[)[Cgfh@5yBp|mNSU |0O@;,Q#=R&a(zMԎ>@
Ӈm&p(r?7zc؊pe0`-CSOT`IU"SUQxQq^_ؽҡ&h. ESolpQt5G66܄`+osT*JJ2>^JB<˟iBvE!ѩ/^%Ӊ{\'JG&e-~[i7M=O>|{e{rfRry*UJ6}G2%tF$I FMsT |VDuKY+>ݶ}lFѭ[><<:q&&>~9:<VqIr\ 
(<!O;[@<WKFG	w$EDI7Z2%ِ'݄C&	vlֹ~Ӌhmaa$wh![@C49<<q촺v|p1Qu&[uH1E|ce.H"溾gA;5g|EyTP.ɋ&nGE$ɋ_6MQNf3L@NrLl|P.W Ɛc
Ԏ
ۼ8g^ۦ#aC4!>S7LR܅:3l(jloYĶofҹBGIẁjG6x=_FϿITvP(b6:mXT
|H)< LuS.X|죝3NgׯǗ@RFS@Vaf(aqri'2P[f6j+K; ES65lmŐZe7 [^J``[kT6sQ#5{-6SͰH )PC̛ϔ]eʄ*+P$H'V\>8FD=۞Nwv(tlơ4ZXaw,I4X4(ozGp7G+eo\31;QѢkw͚jC,}JOy}'ӑ2\VAv?-HMU*,SLa]H]!S65'5}VDҥ:
0NmTEU ,FP!W]((ʲlx~[%)ؘes9DQQ<KvLZONӂˋѧp;D{#"^e}}ä9HT<^H*(Q+ԅ8}OK%
8*߇Y\=5AJIVQSHP_ x62@OOOgK(KKסq	UKږ(Ofcm`g	$5hVY9Qbkzw"%(oE^	Ţ'狽C7Ra2I.w8ml|h9wBIrTK$҅QZq$rj~JJrUt!bfސc	x-t!~?tx2e}fpP-R« Bц(Ɏ)A93B6m`髐y6D-b,4tDyFE8o7c//F2RQ|9L NT3ws S\ˎ	f9:;;>db5}#E=QZ{tl`AqI;ߟ4+ȯa ]_b3wOBA?H  UTD+NGTV
jhdMظK0f}{{iI졶ޫ	|>g@VW ƹ_fRQz6%R:mF۸ѸlW#_)/]?Ur8;ңZd+cS?#:3!KhB	JM޾XN==w>/^>O_<_9GxfvSyґŁJn%&놏kT!N_L&|Sn'|n붭z~Y*4C*J t?˫ױݫB^[+{Tq&e7.)(@k_EGnY(usT[ڟF/yPӘi-XuBORC+yDgvWCUMd)rcEW'`(ҭJäpMS[?Kq6oN/~U:qֳrԽۄQHqQ#.(7Dj]C3hpYY^Ql<ߔG-S S~gH+HJM\8PǸu͖V0~˙CŎЯ0^Xc
sS);VZ64QIqm[?HԪ$TY"Xy`L>iGyLC~%FdSO8t7"RGZzK3%IOE"+Ϟ%'xGfF#ESy4VW%J|d𡍗?7X2EÔhc-RkTaq^1GER̛	޺2tTW[ԌřS=1U`g PV;;?_G
``_8L>VB*76P`񕣯sC.U>~ɓ\r2df׬֞ۼ]ZGS0M7_(@@^=`.Ö/'5je>ŕ(20 |(- !60%w몔eSF/ؾd
gP#E
I	́ͻ:J4Kk] tt9ĉɮ|@)"GN>CC0"
xTzD(lJs5oijq	j<1O"+y5ev0H S_56FqT)Ǧq_`$$֨b4"IH4@]ROQ	(x['&x}\Bdmתh?pa~0LڴRQF3"">MNMM?@Q'@݄e~^+N
jz5R\4>Za5|>RDX[q>Ks 7t#8ODϥ,WR"|N޴r$J䷤SC#L_U<2ILHR FQ6L(}NϱuY#7,[(JDIC(ȥѴ2OG,)[Fb[@q7\nk]	}>(ΧjPj5|X^׈mnFv;a&{;QmK'[9;DbW
KDRJ|/FQE,Br\si$8h	+ Uu0IepSc}4H]x:x!.R:G
JklY_c}^2xwt=.%c:c[i=7R.
O^$0\~.FEFbMD7&
%ʪHK(Paa%FTxia)H׈ml2+Uʆ>[uwװ-PtP2<xeqo]&1v^y(΁oF|'vɦQHTI&j>GDQ(RH(45HCCm Ã]Q7
^41r8'QI%QNoe:{}v:{=#6U8^lq{@۰b>UQwUQv=.0o)w:bV{]X%%L2HIԱ4g<g8q}&}ML, 9CPC'4~֎V*DJ4>Z}FUWB
zHt1	:*rvz
'ꁇ5`2q<riׂ`ѱx{Ƽf'sO@a$xɏ}(zr<UDfIQylY	ͽ;oY!PC<GFݚ4yѷڏRR5
D*["UJTUDyQ<}ýMv3 ЋdgƟkU»v̻dեU1Ȝ^bryNu2vP9]wD4h'ևm T1K]G(Q1,@-z6Pb aY	7'BO*(5w~_4IEto4FqI$ 40D ZJc#v5dM(Gs6*A_ۆo=v>+QEEH~[d*'0?? YH}<<MY\Ojު#*)Pg"%4*AsP ?da@ 
5QwQN`gzD`{<^t<|-G+na$\=VʦQEO_(Fi<"[|u*X}o~J|[	TΗjWj<U,&AT}BKKѰL*UK(=5{X0=jLV{n&	 U;Yety1,H&d(ݼVmْFl5)B4bMTn-Jh|D%]);*%LgK	 js(U2"jgU.mQR"Q'={zj,/O)=jF<DDx:(A>D	%k8@M|W jԝOǇꭣYYlYzaMZ(*KEAnoQ'Zmj
B
e/\vg[ bd[Єb$o0&K7~?ܿ`<}xe[I}۾=<9qzZYnZL,G0jGUAJGQ:|(t^yU6~߳=H=M@ag.  T5w7`Eape{mSD#1Bu&|4Hc+*.&.uu}\uϻrTZDݼdws=oRq괝F؄8!W,d9j*c|@XP^A/j<N'&<{l+^>^T4)o>}|ڋų7ƪGl:nNQlCd{!)J]`p	i>Bz^OӚs:p-6''_h^<l[8(.f.xNV&&>Gnuw=Ɗ6'&ʚkfg>3iQM]4QP3.W=kNpav"}yo4ԀN_f)rK!ƒ;<x/U#>OZ4!R^B.K}=2bnZ|.VóX-Z?RCLr1Q9,-G"$}JŇ_yFCYWwn&kDץnߗ/pj@jDTYQ2	%S(v>|'09\-8BjLh!c
RsN}65ɾy#@;ﵟm48'uswzG(i%={eHR P6Ǣt uv\P%(UC9ĩ>!בh|˾ySDw4JWUsTQHo9͞,+==hp)SGJ69Eʃ5Lt"҄CSi\fCz j6i*Z$
WxX*+9NR|S~./rO}<0 s:xVܝH\K+&n3Q ,lv!I0(DaUa85/|fGJ푬n4z<c <>7ZHVLVY0R()d*G+4D5LK4>	REK(ma2F3L|L[d,>Q#'s$(JMOarnNRU0@Q8=M>]I'®-55 G=8;#aL.U8sCR^j4nǸ
:*6ȉ&((Gz]D}gg=C|zwB pO䲳X2HDD`cTM80±kr6{žr$JHN.Q	
@
3~Q@O(KfnW)DaE$ @y.P(
Qׅ'j_9}.{e8/>8Tى#1
N
\?LP$z:]e/ "vHx|99At+|y]"([xaH\&L+@h/~i_IWH$)cN|xhθ 8YA(Q)8ۧX"ua2խ<<|ߏDsC'?	>!2xK|<GGůG^Z9L͡ %K E	ѡ8}ػ|}vv6:=tS|eeedYE#)+GYK~f0?;R#jVz'PPD^.!P:<W+^YgwJ|f3(d2) J%,WVJ"Vi_81UU_XBR+0mN(VI#Soco S!Rpzr=zO$3(R~ɖL *~1Ŗinv OITqX;Fѝ,N\R:cu0ȘPN
۷i*pYTQ4EeI"5HM[-L8?_>y[Sz~=}dR B3:~!A8E6)i:;WcX|5f5nVFD*uD:TI4B*fvP6夺<?d*r3&-+D(WO{ >U("Q;LIP\l1
rY-pB
;R+k;Ca)D=Ċ'lKP@ԬV54
ѽVWQ}àJQs}d4vT&'weJR{X
*JK]Pj=D0Rp	?T\NJYe*R=REF\E}
yLx}'fIe-B;pv	!V(&M$2|#;,\d!t
"}Ď}T,z4;AfBA8fXcL~=GLlGnT֎E\}BۚsډQd"147u~VNα`9qaLOsTO4+c:c`_koP1:\U_{s\08xӹ#DvJ\_\ʳx'HPVVRb1EHkWNo%U51kbJ.OpwMg-&S̲l"*L]3iJg%ɶ5CAfAPll  :MUI/VZUy>KPi9_.gy?<z0>S}Ko50U)<NQ'76>,KMF<^3<2D}iu븺k%}&~
P.Qȝ\4QMT	s*i!=9L0Lgtv);,ܡo,6g7Ӯ6\XrḖQ8!W39>E
cy}|Y)ֺQ).,A/G;.SWUPPWxʒ&\*Tx~0"DaK++[(N f&gOQHQ#FnoH]nΠ<y͢trTut`QҜTjpi#
-NS>NJHh`ND.]Pp66gƕaXMijߏ#2%..%Lv7t8Fa:=\tL),kS{>Jۮ\%nHv|c?ekv^Nrtt jz_5OQ`~@r7^OkDz&{A<Ѩ񡇢~Uxё*jCH[/ggJz|T(@jОu>i{r<{8WDKD^'#8=(yɆO]q;*S8!*wn}Ѹ}/
?]OWrK|XZ({4EjG+Q)<M9{{6"վ<lTLj]4.=Xh`󺽵ĥJўP҃[7L0#a_F
{y\-OT *GC3wNlh#BIVZ.M_`\<3q73GyxēS+jsgoiHfRމ:%emG@H@hcNCA:sҘ dbvKǃ=<S+Sd4j遣l/e&'(L&QxIpF&#j_?rHbڵkErGdDk#HQZ.&po;|<}Q/VB">Q-Er~N> %*<`-8@D`w@(aτˍDځdc9y9FԹ꣑~R'AvT)	OUSEf|]no|X8*gV%P(,auxM4TMꋼ_QS3!s0ew7&vAD.^TvȂ| tb\^ZEtj'be=SRutOõU$/HT252Џ"Ey5Ds(PHmzѡ\WXG~ITzK\%^jU({˟]&sl!܉"ȊF6nl&H쇝h~D "d-H%I[	WNuMr6>B"WϏ`fF12=JD_\U@jg}u#|x )Bٛ$˥+.>ֿDyy/^󙚉)wS	gNΝ?G:lFF|6F6"Z8mNpV| V$@uՒpv9pXSp=HP^NDO=o Өx|bmmo*ɈT58v_o>wX fo?0R"BD%,2~bmM+O(>HK>)#t`<XvfRXƿ<Uc>,xpnR*	G]úH9;2A_':I)|N8RwDEe2.%l6k	>QRa/ۂd?+˯SHfT}Řr97uTuR=?uz W]bEE>em{lVU%zpm~${GjR7~||43S-_O9">U?ǔXA䴏H,ŵB0/p")(j>"O|!+êdH	9#Eiˢst"''rFZ=ҧ?.J EȅlzrtN+hvgbwۮ(|nc6N`XѢZ݊Y
RPD߫U*p\3zC!vBujtNf&{kkR(lB{$Jq^i1q_o|_Jݻq}T^8ϕK7A٢X}g
藍J&((aCioKyERA5~2!7$Yx~DNヾE<W9I4A%YD<_|6XJTRq-ZL3gy4a#"b1;Y2uB)Hl,jkHu=?2פ*S3#RrŊhH/;!e)X 5LPgfD]F+7OJ)Ѿ_^ϯq2311>1NpN"rӉ'sw/mYt/]iW$جKk3z+VY/\`2
&ZN#&[a(SV0dq`Y}sD:e<7&6/=sM*K6olHHO'韋9\`ٱDxgd[%A=sHv/0}6WM[⒮_ힾi!x@M$D*:0[`S_hu!KE VXf!R0<΍ө=gUl!S Q3@a*)n%z~lb<ƩCԢ`<DMT\] BM\?yEdqd!\б~^&/%J,Ws~/. C4+ԐO$:nYegsIڲ#M*EHa_LqZTzQI{<Hwvg' J} ł>y֧P<qmp'UEƨor{;1:fH)]m}<
:iipLC?/>݅R{} z\uC؃˳9QaXp2EeAr"jp˴JM<IΎ
]b:P<~{/|mKh@i]B0YLHC6^md_a;
x.SN(@Pᧁ+Z
T9KJDѮQ,Zc;}Up˧:`g'N9AwgIsK0E$ZFF/Ad&@$wBezJBLGRLO'N3)a=\LQ8
Qjq5{\)ؕz8$!8YOz>%zm >Ijo1fruPbP@54	oKO>)RGj!h
N4X@fߙ3٧ժAˢ2R7yOfDA%T7"&z Ut
?Z9?瀨?:s;Cڻ`6jM-k팵HTj?$jeFJPTP~<PXCJȿ%x¾<(</*<D	+H\EK~>6L=n96}hu 8~i3LtB"~h4E#LBvn 53R_d6)F6ߜ2poF`0rQhHdU-:*^O^8ht1荼#7aҟՓ79o(:&4uQE;N"Jg}N9JsTNDP㾇A E	,H0YUjS#nqv"hB7Ma]QZПh0@1jE޵9ŇB^Ǵzr~an:X}>YkvO{jt(pQBsޥf.eq<	P>.Q)P$?^+iIEV U~ S>UҨϣnRTow*+\)hjGYm)"G)rh~ |y*5@$jyJjwuDZZ0c2e?&*Omm,cd}}նi'Ii)bw=B+g}K@g>8-Rߣ>'ܲ[,A7䫶-,:.]">wKo+|f3eq;ꄢOUA;|BӕQGxUO:)#QR@j!M4jrSQ?3zN8[K >MTv7&i5h=#*CEmչj=廢/ [׭HOHY#}hk3WcJ[?'۷ j"*N#-YV9he̔f!]ޜZG0s-^BT42wJU#uumDJE
0gڝ(𐘽Ovڛ7?<zF.Ԩ(QTYUɤ~ !!gmd;5&)aIr_>k[&MA=]DQJ\TVTkW*oYIE}x5~P}DoPEЁ2l\r" RK&Hus`@45|%)5e%R	:g>6	Np!QT|Ц c~}GIٿL]{p;*[¯CT1D<M/oSbB*~bB,HƓ;sѩA^@)<C+1_KQG0}I'QI_7/54Ą1#8?(ѝ0DޣWFx*`}EPWHN'%)A{W ER$3O=&*"FoOj-`MNN~E?ݴFm"P+#"P!PD
Jȭat$A@#p=͠AWT@QTY"/	
O	?M#bA40R
u7V!O7G]g'T;*SkLS]5$`$1)`'ۉGUl<#DKILi hl4,Q+'xoߪ \'Z;ȿ JR;|ެDYKL:i
)~oF}e</) vTj2k߇DUfݹ4qܪ\}ݐeC͢;5$]38g#Lڐ	@Tgklem5,HȾ0fɾy~szNuHhH|O}.6&RV[_ʁ C3d_Q\\nS_{s= 
`@FLD1NP?3>kt!YiQ|%Q6Al d(d1
ʙfQ Dxnxˉ2eEY(Q4U[Q!.;D{Rs[qO!b%"G~t'"UOĭ|3AiץՕO׆:G{c(R@ǝ:9Rz'JtZh$g"LT#`5@/NrU,
\.oS%4cmfK3qG%HdAE3aER> >)<QH1{gx׃tOMg[Z{ZȬۃΥ嵮٧zBѽG' *n%Sz$׎}{nDˌxFkJ	g*7lG h*Xݶ-;eq>*-qW\IIQ3!m4ͱ??X*+mR=QVv˅DR8i`-:h40:099:	}s%\!M4ƍ/=ع#
A~D*wDi-&$,5Q#(fg&~8$
EXBsc'GVxi=QQ;!{Z㨙c'j'$O)W'ȓ>)	fffj6@( ǟ::(
w7d-N潢ea7fOhmH,IJ`V^TVeOkQA$oLdģ31ShoNYԨLJcATsH*P9\R'4ǁP({8[M^dOt! |ޟ' [49799PPWء3"7bD;#ڝT+4l"@ܳ*!i4b<VAPUARٖ>
;&h3nAT2uʦe,l+C4vTLP*%mB;YXƐW"=kNZ"@BZ܂$P&v r.ٟ ;7ٷp@ԦD~9qHq߁BB#
VQ8Iz8beVz Z=oi摛DUD$qQїxSpiiɲ{+{O]Hrsw!E*T܉%^H
T9nIOPR(Z[m}m8J.uHI~+k}p=?uR#fhCgY@LxUTKYC9Y~
^dh'YD	Y{^F}}C6K:
>W74`!UFJه~#QT'Nȷ*)JeDkϐC:tJ/k>P<z%j[:\Tx/mLeH/1}	j6(HQHI7O/.zUR) kf=xd02i9ٮ>inz٧ߠ&<x@mQ/|Ȑʻ;r3':c(&QqׅȆhuׇ統
ofBlq%JQ=G(MlWk|7	k.
>k.O.D"woHM|:01D3PQP@aG'?}g<?VE;&7ƈJfgsĥ{Nf;IJck&)> QJWSxQD}QJU<!vh!([7VqK!aH9RD]s#:"wU)uN/>]UΕ*ag}Uŝ4J:O*Q:Q
kPD&CJ1^b*8*=vEӬs,..zWHԿC%|T[qM(7QNC!?h?8w>Cj	ԋ!2H=>YM7佗eiזg}oSND
on^niL<֣ LU&(7PC"!J=7D-"Qt.QAOIqI"(r@^a_'$jOaLlQG.CYFP߳oDQLdfhpQd<1x!"oFOHwF)QKKj#EeDG*4dl{gY9j*Xq"o|'Hmb%6?;$ZE1Ud5ē뙈ٝi.uʦGcR&NTbcoޅt
>RW0#j-U <oRtx
\x?ϐj||d|Aӭ#j3t,&=j0^6\g-Ֆo?Di)Q&Qv<ARy^_QI^h	Jp:}H9rOnj㦹O@`ex~wA#xR~Jo?:/v{8}!*/'Nٛz&4q)N~<5dUA*bد0*㆟)+=&oe	uXj>S@Hy@&%JWE3)}+ۖ/hAi׿F1w~TF\q'sd`["+	jؿQM>ュeJjU~= !)l;됲S˄HyH0!WJ<*"҇Oںo	elTMNsH]<#!κI&hRSD2#E2J*;VȩN<쭟$0U*~jpQH0 51ѮW	E"-Hܘ8ƀ}}19#/yo->YMx,>YZ8c4û95Xp'# p	Bq&UKRXVǌaQ!0=l`(ssT
BAX2MAJs:l)K5$T`|~<LM<$_ۗ"?(}+3G-u됢Q)L`F[!9S{8QHcy	s6QIt' YjmN"%M)6x>Ba9GNX\<rfZX{!Km=!NnQxO GIg"k&N/v>$ܤd1ʅ>K0ߺqG	!!"%ZDr4HgW@QV&jQ0#.8䵡O`RĕVa%kQE}y'-tJɁc#T	J=*KDTaqh(*E
5QDQzPǕeHT-y!tύ	s#6>g5
;Y]nuv<GYI-jwbpHa|L9 aY ._!$	$ɶШlD~ZK@BhAaR{twzIg7@O$RslLDQ'J/aq#G7?-jYS{vq=X'
fȋTXOT.1T|QSu
	JͩO n^w)u'R4Ft_Gp$4*}C8JƄS2jJ(eFA	tpns(C}v6_25u@H>H$vB5R
(zITF@!RL)Qs^bFպQpݹPBG3	l1NH1]zMg3Sfb^<}Y_i).R0yG-FQolRvW՚=oܘ%)ǆS&hk/QzH= M_
͉l<g/HF${k?:R^F<="r#)Qb'RF)#Q,Q3JZؙn^pnhvܢd-\(kn
:J$ *aaNHH>ݭuM@PP0!׹:}@w"sE) oK0QD}?_:fBhokk&tm7P-8>7hhwVU2RyIIBuď1B4oFl흶SSQ:gĳqVG.T	!
iHnGC-
	^C0þΦj&8=xTܧV}@*p!!eqIlb9#_Cn)	۞F$Oƀ	`NKtjQ	n:Y{)9ݣ'(;cs5
JͽHJASѷ7xz{ R\`)c>#_=K&S-Q_o*$Y(y}<GB̈́¹-z%,26=K(P)&"Q
"UQ.LTiV@%P 
·Nhؗ(dEۅq9-ݼ_Bl?ο0$έvRgggS8	 
m)R&)ATb+DUj}[U2tzY *	XT7)biU76D!룺8	>x2{}(Cj"<~2HH))R	>[T4SHW zyb=n"%eOڧedM\Zx.B)D`b_HNi6DJF}Afk;FIMJ9)&n\.JЃHAlʤ+D[(S^L$&O{E453ժ54ěxc=$J\|/;QLC9TW.9ԥvRbCB]ypq&q(ʗKͲ</$e*B,z{?bе:Ed:49պ5<4|'MC\xpsGu^kNPS~)a'ߥ<rB"Qj֞Bt]*W
LK1IT,fzFy3J43y5YZ_(XZ.xQHܚ^syDD#QR(Izb>GDaؗ@ok2|^ 
/9hWv2$PS-|bOzc7[_/1++&hD>G`2L8'M45(쎧Ͳ5:7kTZ/JAa^
*d2[hILT91*ΨxBPՑbϑ"fUxWOEŕ}Mg_?\i\+5s/(?.l =~P,U}s7tB^vs^f5RT)s ^V"a_bkeaP_`u~{8V*e2?X1%k#QKT6ewĳ&8Z-;#jq#>Պ"R<~\>>980G`?w xqH~*ޢ ~w}N(unk =YHZ9cq5$
eIԏ*U*mPЗ@!OܽIT$:ϦuF虢W9l>~\lԗU#Mv?ɮVG&>>RR*9qSog4<&I<^JG;/NɇnUpB	?MrHRagф=\*sQB*I5ϡQ&f+5k"_@ST(8b'x3o8ș}Ol	BqDOZ&~ZIvՉ깈ҥHN ]iPr¬:H6}kC+'HO@aXʠ>	(Oe}TorVHYDIqP)'R:J"UkvZҏΪoLD] Q4?㉢$(yPV%ߊM> -s 5(iR%$u+u}}8A	B>_8i]P声߰E
Kqܣ|F6(n0x *=R9Y{"U6?
I_->o3	q"jF"mR"n0ETߨwLf4cIDlU$%8W5]O
WAX{sΘG΄9qvΡO/-zuG@	HD)sB%H-]GSSֲ"zeb cBBe~SoǌO&4`UW!0;z>\b|wv/mi7ռh2G]Z&7&haz!Io
UIseIQʹ{E41ilTQv#8Yn{9'tK&-s'HXv.˯Qn}?UZeQT$7jZV27.Q')|i#Ki5қ/wg6 9z>r:Qt)HATiiq!|i+R"n=hDɢ_F?~3+)LlBH^2M8j&'
)uY%ROFQLbzg;Rv?c2܊i1Qo~(>^$<:?E⊨LD)|olh]ߩXvy$:|Aw;<>@WtL,0Jqf}/)x+^,P[.RJ&nqËv%ؗe=r%xDY^IX@Dww$w=Q&)32:;DmJx:Q6(T-k ^FNn(/Oҧ'D>wQiS`k:(Qy<邗B>nѤ.UQYDknFtdrAb$~NوdMgQrk~G09nD!M~P""^Bט4b!!$<B+=8%(gX YHmG4j\K&)$2qMHvP~n4[&pX,5rdVQ6~ۛ6jNf$Sz<u$Dj	4R
s*
!=ǟ-wb',@2qew4ՑJ8 $"	㧲#ĦT<=x̣x8o$V++(ϱ4tK"H}L57 3N_ /BUjY$Ā┬KΛ 3W(f
~;-$PU߅Ilc|L|	\ %7nIG6eԷ8ᜅ~Bө)q$4T  k*۲Ⰽ<s>>tlx%υH@0">@@%Z>[i֎W%	ODj])z1(c:QJdNESͯO*	sUYtqyP&(t !%!ȭJw1]!/Y"S@is=4?^4!xԼ'JWB"Wt5Gg`gp9vJBShf R3ˋGKrXB3"'Je^OQǻ5J=n޼td<dIQP7frz{8srCDpҍo5ޒҩ?Or#쀦NI89dR$sV!f8׆
o֨dRf[Q(CjHa4sH ;8<%kD>-+|0܅GRRq3D:j~s1mO$<v->Yɓp$z}=8 \G-^)]r܆N@jK
x|ub^e:^mJ*Bmz}O$JJ Sz5'/NjN@'	TJT*W^&]YˍP{ŅlLDz[;Qߧ978nk1~ bO9~vylxmx 9BxyzÔ[p/_)(GjFL$1J.cs-HA<	0״ 4?<$P@a.B7+Snnaټu,:
D76`v+곙Ip]D*kW\Ҋk%*tRyAȣhY<~PY}mq.(cƎ':KO2R&VmD<
$HF !Q'BD*pAei-׭dmi\(J\QXostt	<VߠШ&OYY CvYn^ND/Nx;4%EGO>>G["n57{NN%$*)l:Q='ʧ-`2s#B=(oPP{Kfn#$+,TޞRoo5y>NרnU׋W*r%\Xb'OL#掠kx;POX}ʙT/E2s&$&G19%5
lH!PoCݧ|[3Q<֘}TnX|֪QX4EE(Cr-CB!a@tS|S}wcn|	J_kXBTR"5!Z]eMDe,E||yZ	ox4|f$V2^UD;"e'+D}:붷
RmM(R70S.~ݙ(.CTs'#\3(Y/L\hPY{>5 QB|>[W|H, @Py9$j\\Y 8G)>fQ dXSO}_Fm">)Qn$<u҅<4.GQc#!P^
& 
[ؚ9Kuǎ2%z,RJ Bu
Lj2Uc.=Jno&eQ幝5c(UDP}C43DJvra!%`Үw	!>*v	:Lk[~FMO@7qOÊ	iLHHFeJKT+J%W(kQD<+p,65@=~1̎%JTJg"(LHA"07eEzD^QZY}4ŧ	oר	߄X˲dbfƆ<"<1I Atn/DڝƧj+DMjuGgo|iT
*Ha*+^Q%q͒4&te_q!}B^眉^z<$)A;jɦPBx$QG5΢*F{m#Vh4JO]؇Ї.&qbLMcAAQdâTY'U@1;(evb9S??	+k_JHsNm{-7uzZ0jTSue*(ԩX$hEN?]\kY:KXjHE,%qlfhק&ce{Z"<1pcSpf}AH@QO0Z
 Tvvv|
Q`5w5STQRʆm>~7G!uYBtU\ x&0
	@W41H!KC*q؇KK%MTXG`͎@VZ㩼Sx(6j;W: CERSw[o:LQUPOMЙӈ(N:oͣ<yKH|q+QtrZyI`$D-if/Ղgr{YxRN6pTgo?~fI*P`ERj
ӿH i{nXQ;BRrct> 
K!G\BBBeuy<48zFROK"9䨜 *M78{'QDQ MB?~]C)Z|=Lhga#Ze@A*odYx?.iS6JId<<3}#ee;&rP*q~{r6	O
5Wr^"Tf(
[i&l:	L>М~bx&GQ.a4B1H%RvЄ$p(BTW[^>(ǶIyTN#*W#'pE(W[ݶ24Pj@#T6@jQ@T(ivI6|M<7Ma#v6_ΉHQPAH&/>,ŐBDTxG!*b	#@heAEQԶ0Fu`_֞
:*DYΰhVߧlCx"HYS,Y
o
?9Х!Vcl~p,W9J5Q%?H5Vw֦~+7aGqM5CI&KEϙxU}ZfQcFV_1BDj<˷
(	uvfa?QDpnQANO^Ӏ&|`3	b`K3IcZ`uhꉄ,9$NqBƤ7]DY˵I\%]ºAbHN8⠧}E\΢(?
WקXR^
=pǰBΉPyjŘZ*͝VZ,n QRUVߋ8ڪj:fZ*}R?|!	VD-KE.ZWt@Pzr:i/M\{g=!v9HgisŢpʣR1BVB;*4!.^P #+ْ;!ĐKdL5?Aǘ`L1&6$/wkit(e& M>>O긾q-!JyIЄ
C(i=ozx0oJ@QAMV!O+Н0C-4swO3Srluf&42ȁcg.tg}wX_x*u^!i$	V	g!p*p^jĒpKi4PiAFͶh_HM^ŐBƣbJj7)ZCx5|G:qKOӥ$-)44]k%oO+vp?%֨T" uL_	`	A}5T>W!CfjjQpBQ@:PzoNhիoU-UF^Lӵi,3
^&<j3ֈȌF%cOCKA]Gw</wbO1e|y,N UsS,}	rQ3x+R16CcB`xap12	piNC N	:yPL]]"YN̄`V<k!ɐkBju9zAMu[1>=B,焎D"D=P5eOE[xyp~5AyoS%MMO}@dqe%EjRMV{"$`u܉ѰάdB:~_`5-8UA5YFB,ɂHZQG7lKi(sR;Ҵ܍\g9x]L7*h3Y5R>!AG=Y;	H20E87Z5t$\I rxoȉm>EǈZ7E4UYj!mHUx
WS_{WGWPFSގLMdADֽ_0N~wcw	5,e#C|$A*Iq +1L_H<R ~. 3leW<iK?{X"1Fy%K4HW7 {0{KQA>1
INU/ߊ1zVdQ]}DV~O~	(qj˗!"*WS;7 )Jݺ_*Q76R!j~\8[PZ

JW>2S_Z,
|aθ2T:!oeʥFF4?,s"3]N#DVkE)і%}Y,3bE
 hb&R")'/s=z$!WPIiACL4lKjQ#9 mgBCzGMŇ҈fvDQ
OA3E߮|bX^oPp̽|xr|r޴ma'wNmƹn}__GOw>?؜GCȶ.*9L芡	ꉸ
U-qx!D"<5"R-o~Fů*<A)KojƸZ=}O<L'ah>.IO!ͬ􌪷>*8=CbZ$xHi8䙸p2D!9|@Q2<
QZ';ޙ+UTmm_6@T_gPdsɄ10AkfaMKfB⤅JQ+6?WB(*4BYEJC	Q &̠o6@T<tQ$z+5xiI䟁ୋ1K%iLoD"֞a($/ϳ.96 uc_E"k?5z<w)Pڂa&8̤e0-Xb ȀvJ0[l=%C@?޳?ιp^[Vd9ybkI\ȡr_ԫ!Zpˁ!uxkXbu3 OZ&
(u	8J/MQvhF8` *s:%+(SzkxWa(k/qG"&}$iϔP竊ZMړ'{G%~#
Gۗ_}ӏ>_[ʆv"ĄlE[ǁl3շi Eҏ>JBiZxM|)@=<<n@ ӥ(ARi::͆y
W;rtoK}]^T%,Z_b@i2ĩ/̡ǐDCAsATZYV(/zx6R]A:71&L\Z]T5{iDE>Fԩ=U4R͎j QV}O_}ATg(t!-hObo1ZQIkH)'((]|aajG<.R%~U<\žifQ9T6Y񴇔OB+D4H);l[P?*j?QjѫATj iJjn<
Cq]˖|5V9Jj7bbu3GQ#X{E	=QkHRu(AT%yGxLqer>4=-bƮ}U=yAM
|X{bQ eu J* P$EFӽeHkF	D	r*2{Y9j~%"Gm1E}CO7UQ5^@z]()$#K:/#^G/\blgV&P2G<lX:G)d5(:BH5E Jʥxa?L 
-kR[>)fbdE+8ޅX=_:#Nao F%[qxgG!@ӓOQRNӿ~vgQ?=phݢ=׃aфb
t[R7pT'c<ѣ	Q[v{M#F.PDI՟}g*[#
Ju"Uge?.QeJ=/$/V=޶~P@QysT}w~Hs*pTKuzG%T?|ӕ)DAtVFnVeF*lD N2!@qO3\EeB_ګ݃תR Qj.ԯj|!ryo_U/ʑ`Mc
|}h#
sS3#jg'&(2'6jx4 Dշ{Ы17AK--,|{V>DvAs(GW'G+e;-b_>(k"Dq&)h9{G5@Wj:((4$5Ƒ[hsP('Q.6}r8v,JPA:I([}k%ibN O%CD353Pm@*
簯{O;]x7_LQIkI<~cq?ԫ"RDIeAT
)-A3"tЁ07mgGMŒ~/6Qgt~~x<x5K	j7RQR?8s˲CWW Mx[LQKsFGPPGLP(?cHurߌccRO}T.PDIeB탖7\>
(]<ZNHzkbx,M^owDb$ ˾g>xI)D8!}v[kzC%u#Jn-c|"6`EœOvZDar3ȨD#
sSAo2st@+'>NwI+'S652	､$z7QG{oHj}D$_}
P
Rm(RE>Prg^ɊBfj -|&|>@eGmrQϧ1g>sTIj3&6ZNn%ʎ(:U|է}K%N@ᵢLegb'}xih@uvHh x'  >ZׯBTKa8sʫF
Ga:xM0}%1' /ۨrBWi`mZ]xg{IDēf},`Hꓑ(T!MT8r9F4CV4x>g&;)(PX}CԐ8JAM I=NQj`tDIeET&*nkH5q7|S>\VqKQ@UC`	xVP=MqԃQ
R!Jnx 
Sa/QmL MQ^7ZʆALjwI9_(Q'=2 LPۨ}GD& Q(HH|Sx>G<(95ڴ ejGл7#у!GH)^
)jC8JJ^}+Gy:-Gf9BL 3^gv&&Lu彯޽/? R`QRY&Zղ{~})%7HD"[5Ώʺ)%qεZoVQR8!D-dh
weqmA-?&eyTw[|PjyY%QUwe.$W0/=&чe۱L}T!9MG@RA ">*xn҄s(:ㅣJn9BGD<ë(j@J@BVcDIeSy>xЁGld@j~rzVQRWQ`ruQdZ_W&9C&D-/i}QML|h*(\,O$[ߙxg}T_}
RK(k
*\QOxʁ'hRx-D Hw{}(+ʸ2QqQ<l S!w#+׺lclQ4GI%ՇQ }$cjJNⓏ&ľ	/$^.[Fydz$T
+GgF(&Gmu'Tv7GU0٧~+"]"JFY/6jQRWQ9xW|΋}y#^SQHQDʬL4{]9{-!_JrL]j}2>y;FDqaRj6᥽>R&&;{{%=w^??T??_w[\Y2U?̿ZXLwPwdffLZB6Ē|<"LÈD"	d臘!OyIKXESUcsΥI;]3:u>Lt:ۓ:y*VA3(ʙltwi{j:"c`I;:DT<AǾ5m=ds|֗N;;uV2v$CuqM8/{OQZ5诟{ToD66f{F:3i37˲؉>=ƆMU;.c;guf]9׶k=%e~PVen~HTF =ϱTB8DϯϓI
4L,}$u+1v鯹PQK7q2Mn{:_riq/)/se:˂kv4q\Y8e由'qZN#G&|pd̘-%+qx-ÆεNx7|&?*L}AĮxl"$_ٸu6^VQ!rm}K:DDW@<0r7nxxT)S񸺇08D݌Jm$͸D:=O"o0Kh:Wm8| /x֢"\'xoQx4Wb($9և@y&6	0S߇ɨZZ&fuD	QnB409(a;_ulҀ9D\ŭ[HUu:wz(N	'g8VK}n
HE:9e30%l}2*>B@V|x
/tS[ۮ!)<^Hn2(PʙiW5ո)06PT.,zv(Is}>yΫ3@Lzf.Q&D!RmG@ġ4N$dekҌ!qWDyQ۫g[G$ʬSGj"ji/R0] V#PsJr◻.Q58dpѥu3f%&JͱKD}֛AT"CQO :E5l"ʠq=5^((*>Lۏ^HW}+JbKOt*'<iCDTe?y!3џ"U van*"J6Dv8Z&"ΔeZ&gŮg;KOQrZ&@Nl%j۩ċr!)5bJ{QkҶVLޥD:.zDoծ.ߒQZQ:Hjv[Wo@TC΄VrfsEԁQ{؆buI@o}~ Xf(h<+"}z-2ll]@S_j547>O.Z&/$W$ꞬJhM?T>zJˬ-n;(3>:hߣ/\-!/e9-boNXbmQ*nUsY뱩^'pCK)E6vL0IGŻ2?=_DĄlmcV&H5.Jw*Y/QU_p"7QoFGwt W~b=Kz$[_^Vo"⑔uKolIeݠ-i"4DIמaD!E@T4;ࢍvg ktO(VbF%%x1alpխј|"	C2
n>.'d1QDaNٍx2M)QR4"#dKy*s9AUTda K(aRQ2nıTԸh, ^݀6z5cB7pA,ya+r(Skϵ`}JV=(%EzI2*,fToF)_Y*rHnHX!<&--'0t	酤5Di&$j$'9XGJLƇ4ė"Y&Tq־<sm}uqWxm}&g'*YvYܫ J&
U x"FB%+K_\=I=RSuxo5\	\m.ݪnT劾[E_DY|X?̸Hyu/þnc#yd<Hx LҬAJ6zx1Tcj6ufcW'Q攍*Be%T:Iexu%<!oLBK;ZUC17jt /bj1,m&dr1֧!D-[ t斔BZHj()շM]IT|jbx?%Q(4œ(K3'me4c hR֟g"9e2Q7^=Β@GÛLFWվX,.}euԦr's+*^噘3ǒB6:ʮaaBry m"HLx2Lj!:[]\4[H-9T$xEq7[Q$$eionekk)\BZld<`fdC*́գRkӾol},S7!?ٶo_hw
PFȨ$թ[:XŔtBJW֭!moݏ"*OT+܅y|&&:-JUi7CYn?\cfP)꧸'{->GڮcL0dꉠgJZtXy8Sm1鍄#		}T-'HS`~h"wZ:ȟcZNήcEgɕ90lġW D	Eeuܟ5|wDmJX`тR!dPڎ݂ldֻWLzgQ<B`D8/ۅ!1M&*jRQ\}Eg40:v{WsxzI-o
(Y+4)UTĒB׾S3t:SuC
o?]Kb]sc|9̜WхA DTA0Fa`xQ20xՍͼcE_Ԅ÷{:8Ϋ{ZYzcmMޏ=]<yv:(ԟR,GKNAQVj7(l>䕕iQX{a-JGtVSA$}VySjAqSl ie7)	x	FMp.tȩ	ŋAOq-!jw.XU%vs1ҷ}ffc騆(5O"VJCT!jFմ՘	GR̐KGl?wTsG
lS(8pRē<Bw>RP{M٫@+Y
ht/װo*Rř#8=""byu}Ay}Mx6J͕n&7xw}	>"<5 *~!I pfb	n,ĬL̜ZԔ򽘁S=ns:P$:u:PV\koO}+Q<g	DwD=F^){ClDټB VSQVR%UQ-ʭ::!jSuDA"#Gt}<?*(.UzT+6TVW!B8|&Eje@ݞrD܈z|@%: 8o¾"5}+kEqQYRQ=*zF:KJ6fc|ÒY(? a8SKu'ސEhLQ*QkTxIz'!ꀱG>|\#.m|EiNg6C\f1jGtD9Tb]_;RQ4՚sZYn/֣};o
Rרׇ) <r
G)ؚӦBRj)hWqu8y"=Elyr5gsŨh(Km_HO5Y7=Q#
zmfDV%A*_K"
ޗ͍fƞ_+G8u"P	/`1N.C")i{lV"
ɜթ>M{җPS =~xr(ܤbQzb/׸43҇^h;ϣ>f|;j@TDt&:P{.q0C0cԍܢ	&&4 g5@I(1ۙ	ET4;y>6oл(݅˱QkP?fLvއv]ϻvm^$.77oέF8:`"3BuQAh9()z>Td^Յ}cd
 2tAbRCEA
`ϹV^luUQPuf2IxW2edk3 lR5^V6)tl_@K;D"
;?'HKt|XF}­ }`	]Fsnٞk]_(n;Bbx_wnԪxbe#5#Σ| <ecZYVH]1!\ncyT(]_"?ddJa"e#"JFA#qZ=
⑘rk9b65GYKPm%&6#_n@;@A/I!?=bJYFѦ}m2A&qFG	~16O}[ssР̈́YQ#u}XG{-Sme#u#
@3!	.tE ߎ
-'795a5XYvc)OTt`ġV<e@E[T9}Hj\_s	Sյ\Wȱ*$4P+lJ3i&p}VLQKӘe{8=wHޣ6G9Lxaߢ@46	\G{>	JqDihR51_n)Qb&U!9P}DU(R&z>rFU>^{'<Q}Ԧٴ(cF$)2	0+>L>Hmm>3gfp}_*<<^G(k&`?*zɮn`)> Q>_kH_E9kZ|{Fp\4lDG`&&83!i.FQ/g Q@qM >&=gr:q W>UzHw2=iC1D'8?rœ©(ݣ8Jy!1ڜYMP],@[|O8t@6ؘ_	=WH]ߞ"Qְey98![ňcPH0Cor|V*
PpD{`-\ MQ/(LdqGɁ%C5{184P}(Sz7	/JU_Eih%Wkn5IQAY/$~/bZUH<e&	iqK(Q9f`dYaD3Ԃ(yN3deĀ\_,I>vK-Q5ɼd}pIAΝ!cx}	&ArYХs}Iw[k鳈	QQB:>zBRje̦P1C0Xuc(`~bs=QI32a-#E'$?GQ,x#5"'-ᕿG!-[˟O6L2	lǵ~$σh&ral	[V(Hwv뱱( *u}&˴xx eHMQG=4!bqNpTSO
Eu92ڄ*2 r"ZɄap0+i7b/MoG';ٽ!qn76`Q#g4w~܏ZYrX497]!ԄQRſިDyOSSas,|i;vCxO}}ϰ諹}K(`&7LӴQx`MDh|(C Yw QFqu1zB 䍣v%[>~)DݲzPޚ훛NV}xQKRCSVگ	'́_)e}CRoB.RY\<0Qxnc{=}_re6{e:"&NϢFDkM\9vN)vUꔩW@$`L ($(x#Rgڙ3N+/uk+VCD%n?ߨ]DTmZ߻cHTKs;˂t7=0$'hCC/0 ;a.ɻ$YJaG?R3y~qr9Bsxq1q}9GłYLA˙NMw#MqCT d97nkOyjcJ5'~=qαլ822Zd?xP.MmECmz-nf1wdin%g6:B9D<<Jd9{e.qM}H+0{ͅ(ԌP:v>jǬkiBGΥ߇f'T`{AdhSpC[6˔* <"Y2]@4M]wD~I96]Q֗e$jLhUx `&iw۵;lalvr1ӧru}''/+?IT< )izW{O\w&.M2QdI& IqPE:U\G@a!<%FƽQSdQMLI  ͦZUVm]ŞhF(|cUGEN	6O iuoh}?}R;eڱU۔|1 6.R(Ҭvpe!*~խRN~og};"5uxއ,ℳauKE!$+t$qP(١<Fq
g3cw;A
 j"6ð4aoG<Ie O֕n[:DBN8+<N_lHmoGQ0A%o"%W+jKL\EmKXLK_xM]-BED['!xbz<RhKQ W>T,D¡q}WUy1+P\KVpˈSInY<pJ2](i o9Y䏐"/j,]^eb}3,&$R('͘<#R'>\Gb$3c$W1]UdG#'ѵ
76y9RzoGLs;}·(罈SxƩL䚵ixc2WPd	x
OU%fŜҮSArc 4	$b,m,W3 5<Le|QR$7Hb0gxytK^쯭#{Q.^,AřY]딬FmNXldMDV,&Y1$cUiWԭAh:#=6ȵX~D!')mJ=7QCN)2]Tx
	\W@Zz:F/H޵η<xeWYӋ1i#I
˙HJh۩AE71])Sؑ"UR2Y'
;9F,`M,ZSHN#ٹJ|=^UwxnT]z/ BPėQp?<Aw1k/7laJXRe0RFe`ew
|VVZ>5e_AGd?Z*55%B%~D}<vCOOsg#F3DSV9tmi'wQ+qfyg$C0Q=|u0D}磰o"l6pf|w[MYq>oBTbٯ}t @v[~:4GЯSC)̏ jj2lZFSS\ԵhA9g&뢂;.DT^LHG+\En^|X'_?[K ?=T45 ᵾA(B͵6h2e_,bGt{?jF+#O'x^2^t5h|`,uzp}P=/~iNCWcTiK|uD-'	~}!4ozeOW<?7n9^}?QRe[or}|HKJ045E,LPVJ$UމoF2UpbGQ#sK6^Vþk*@LI+2TG%We**ӆhf*",Fؘ*E>f1#:A`IMYc#i7!AT=;wuI2%H5x<VQD)/{8t:+C_V^@!9`94"AFś2-/Dv74?<z^a"{%lTx7-ۨ&VEImjo!'@4ᙁUԵV4DQ)iV#"}롋ny~pU}HF:R4}@a';1T(_YIׯMs!jw𮩅4HEپ=:\se*>Zv󝲁i.,Yc!+ٜ"&ը5Up{a7stە咚V/ҭbwNjAr=ӷPAQc~#0Q`!A{KzGUJ˿zDvCWqjmߏ7ſV~JChiLGS,ZyH(0#˖ͲՀkVZ[O36B}5-2tgr!8$"rʨ *`߼ӅO=$*6&j>&:o˞R8j)}9DFå]/&C:@ԇe1	<vf1(Հcysa4s2F'騻$z}L.7	D
="hZeZH@T3|1bU/!j<9&ji9a<8251N|ZwytRV\}fuw6!%BQV4MzeUos,'ϟrK{D}FS;G9*1GsRQ]@5>te0T#OD\%efW54[Sz48jdgiLxѶXXXK#ψ)Ttc*bQQOH!'F-Z&Dcr3o𾞍.!+|XXgDFB'Uo`0FnVJF~UeWD4P>Qk=Y5K՞ jwz}T?:6]-uFx7uA''gR+Em@KZlKvֽ3zRH?&ԗ殮CT4/*o֓}3_sH`KfQەYix>jpQQ#:?GDl#i@$pe0T|v%R*m(!dѡR}Dy*ٛX(ܚNcרfH]wЉ&z;bJ6UGYA/#3z6q^<؋,~^%Q-}}FL8E*q
C)6Fub`(3Eeb!*.jӿ캪LDWQsx	Y
B+B4_*ק~U%M}2n>R&e}JV%iXDOI6p^H5Q[{{k(Wx#QPˉ|WyLܑQ3lja䊡G_p(S
CDcev|8ZeRU9S00Q±c$@9l~N1aʅV~(!:`pyIQQD]]8UL2 eAطO+AT|!uwY351h|a$5HɾF^
O3 ~ĸMQ|ur*Y˰)fDѱmJ* E $B)b SSؤ邻W9'r'@N8yo':ӥ>KZ
QAd*?ƭh\G,I*5`LѮ-:w ,{!^_m X38>Hm(j();$&gDi&*Vk$Ugլ !0Qdq-$+!v˲L)f9I&"BDŀH
2C@$+
1(w4)۳M%DA$" aN1u.	;JG97-i&)LتL9Jg$Qn삨l`(*4U,ٷn0Rˋx]7;cUViEK늗65xx<%TBM<n 9S8 3;2b_qAdȡ( 1@lB9TF.â2DPL 8BD%\@R񦉒ZJ9J/Di66Z10ʜ;Nu`b#;_I`t>n[#tts{*eϥ<رN/p/iޛ,Đo?CZG`nF.5OE*.&\NDD;Ʊ,W*5puBR!WB	[	!ca@/0	d?<̢)+۱U8t'TV(s:N7_7R1+!TXm,49
(G"=A`F8DLǔ*Q)[.~k'˛obC^x'Ҩh1
Zfxlf-&CL")ʰk\.Chy^
yk޺ݖڴ@j5>1a~LDmɱ!$t$ ^lmlgl1:]C)5*	(Db>$;N1Q#E&js8ʖU6^j~ejPQَ񐳐AcH`O(#uERI|TljD	9.Ք'OD<6od
ũ/斻nA~Ai슻`M:+@bG":mr&a(<}2)HH"6XlFd! R 26FQ#JLKWVpDFP*;郺?kCND*$6W;^jBT*h_rU֥D$Ŧ ^(:AlX"Kt}jTJyc|%Os|I6`.Ox1{?j)򨍍'jր4)ҤJkkGya15;a(! J#(Q@®VGH=5_!')Gqp%q.O[gD/3eGޮx8jĕoIԝ&lTV-F7H"J)_֎J%\*cƊ-:ؗR<²!6ln>5"ni^XIQKO1! %$1̱KG{&2q/LPܣOi!jF 
lnە0Y`R}#lJ@#YO@|",G9Mi6HcYgFݿg"(!Qi/	na_3噠o;x8Qb16=Q[Sj[	n0teuC.S9٠;S) sm"Qh2MKjQȣ<*UvT='Ҋ@Whc~T˧ؐݩx?Ic7]w]O"q"EaC".s9|Y::73.3qfF#ÈCR)MȔDpz>^`?
4/G(Q/!ؐORķq?#䣧xʷra-&0uH$ޜHe!k,DNJhn2=4DDC7Ҩ5"pʢ+ɞfD
i}|d뛺C4}u.U+i܈YO"ύQ(5-PRsrca4?t)"sgX	O>H=m5eGg 2,:Ë9CI<d*~JQZj͍GA4MH*r28}]T(!V]ZphS(2)Dل/FoT˽G`DF!>a</)L4vxo/	?ꫵ*JtQ%TeO"B<idU|YUFS3҈Qs))*jTg9N	S^8[:M|^.<+j}}n]J8XLVݯ˕<mZsҨWM%HyohFP\q}qUOphJD|6{g6Nk̓#RhB})Du^.[,hDSюcKozÏ:O+3 m׬vfGPQ/-HEZVu}j@7I_+Ws!jʰZ&δ~v+ቨO!z0oFׅٜL\].;p
1 N$#pt.wpLj䫜M-q1{g{3._>J٩uLwoE$ )o>Yegb0?/|/wVoŚY?ז+LҭiF[7)UM].Oy5
2_?*yA+b,XLKC-&T7|[l:¶/+M;C;b~_	?j׬"`558PR]Tvl縮z̑tS,;sm;^sz/N{ZpNK<չ/xE;O΁_J@/Xl<w(~^68]S:;ةW#DnzDNuQZK)'<imh9y67}}˲>?|΃"ƾ^RҫS)⤋Cnqmu})p,XPnEʓ"Z7R_m;x3il-gqQYlSaøb'TC4`QHխQ)h.,~h]ėqZ$NI7;B
)[ڱ	&;,ѤIr=AJ"r$#Bc#|/$FCM<|8M6)qBc4S%E7#RI	킴tH85HHX:I1f/XLh={RHCB'6[;ۑhG]Quk'}z2?D}lќ7w.m9N>8
ZPEdSEP"dxGä\tT#AHb$RP&bC]a$F\^vJ'fV?L*f	#9i#}BBK:/hx"ÇMΥsTDTZۀn8д,Ebk@zGpSp[5'? a(d}Q;ki&ST7	yÝreR;yO~t:}83+AjcD}5]	MJ ʪEMO8OQ FF˖ⰥQcQ4E -D;
C$0L	 lɯU#Q&CϪɨ~ĝ0n[(STt٫d֌mN0"o$1aҧ;)dgZ@7ƪbc!wITB,e>H+N%ÍlGm/wn&4曑C8G]sT'?|q6ITOL*;qkX:\c!pYSg.=P4	hQM6rh7VqjH{'J#v]!jB^YZ7ĩxT9R9P5B aԫNICSH=%JJm+F miHUgɁ9)O{H")	`~LRnQ;[;v] 'GE^Hh5X FF2qwuR'*y_?N'+ *Q@Vfy؆9SqQE?ǚׅ%ڙ*1ڭ4Є=/Cȑ9&hH<ͩvחe"sTڌ3aVjJJn\IH-}CpqIZeR^ dBrߐ6d}Ie8nCzg",3d	ET(-2̰SkwgG|]Im8뻻Ll]je#Sh[=žn۫HzcTM󧧓)(#QT29&
OPק}| J.0!c¸YtYe
)dL=)mv0䪮k0WlC:EҠ=;"Hc:䷧({Y\Ex9NǮ^n~Ibw76b֫LDh,vgkGmmݿ.!Q?dD})E
@uP%(Aѽ X-!f?Dr|@
F !01W&HE	XuRV~H|Fj4;wv4>-h5{hLQe7o5GݸGct>N'V&rr&1"p) 	ic [B]Pz!Qx|RqzA8ZM_(eg|8k#h!nފ({JRM(e6_!Bc6MVODAfkf#RT^5%s>3P$fHcZlɼ*az(>(KP2Iۢ4_6~E{~Veb{\Q;6twXN.^U!}9	bt2}	Hͧ,:8cuBe>QV7KtyO#&w.p*+遮{XjVi(eAP Y|B

]d9p7֚Aj!>&naqm_%&/fh&>F*>7Bp|5Vx(`=(	R:AȟOVBEV't*>aeBtɪ8(Fq1,Q׺8Ã>R(TZwN6]!WzEu*egg3&_̎ QvhJQP Ul9N>P]5x;ĝcmӧTn	E~Xg*nV2z`Qخ-6*ư߫ka Q_싦Q1g#Dz0$pYߍkqx81{d:{EשhuxXtŘ+Z1bsV&}m,W*MRoj/:@TǗ-Q5UՔ)emr]ƍ'$aw-+n+i8Kߒ&ݏf34de@ e
X P !ZH,El@y7W<_rw;''ݹd.;DmWarK|$OV]9o'`id{H<뿿~[@KL1jH)&#CLsb	8rllv"1AYq㱃O
?{
;^xNԆ6;=9]Q}}~͝}]U	<oezq.>t~q8c9+CۘećS
[n8@+TC*s1ڶj2JYd(c(c+1{Vbɼ17ft袸_wrvR2e:c5{~sIfϯ3e=|ULxDŵ-LSg1uICoFteYdg]pmuTRi`bS2EѼdyf!sZgIoLY~!jwB:9:ؘ>'|qvzLT	<	Ϟ=}`K@Xefy1jE3PK\JRR8p" eǭ%3ic"/3J,}Hb0bwx&R3ŴU-!q~q}[Ϥ+~Cѷxe7Q7]o#o~7$bP%G~ ==B]k,6@01"8u]UU0QY.	C_eN 44I펙636=?e3
ӳuﺑ}B)#Hm@DP9cav/۪",򼪚m8Rk#\!#놱E5;@&LBQ[CԳkLJ6ts wj;\ fbP N4nQ!Ơ~H
FBDܓaOaJS`_U^Rm^ (c&ϛpl{dӡE嗝fbGn=_Ete7]ԩl=>nd[Q/oFڋ#j@ 	@>,d|%#
fb@qTixYa׊IE?(KfymSU$x2upLRkj{6tpZzÙ	X6 Oje%N	 u=/Rvc[z׊mGb@1DR`" xeE~DM2#c0bk~zQĭR,~FciiUre-z*tسC<u_v{aY<@nޣ݊+HV>}l{><[SBNi%g*$Ҧbߣq[r	UaO0kЂ6ũ쟔CMȞ]IaSc~iϷ?D
6=W~x;;^3XOnׯ~z{c?eNL@LpB8.k1rbBaI󁍀/_QV߯-s\Ѥ"n2Ґf+<ydb˘TvM۾? ro	Yr{G@(h}޹Si6YLlungC՚#qkL#͘LgdX'8Un %VA8342IMB"tңZMi%X;xJRl*;\S@iю!j3ꊙЦQOxr=dŋ)uB
QknorϯdH3HbW#9`:.8]~0-mD:ieHsqI1X(DydQsr9|m6ipZ	
N:BA!VB8CIaXLrN;Dչ9NN6nٿ=Ӽw7C5	6c(87`4	]|7QxQ(D5@~%>1GQD1ƜGy4)'sa"3mM\g")syLQ@pUpqX-'Q,G#[u'4rX Ka{+vtMuL=?>緩[R#DZ6p椗>[&leL4?ou5(d)Qb t|Çnb!2Uui=ҴAR_2}k	*ޒrqYIAiV°綗2TʗF{u'=ʷvf= :wro\~,~T#8R9:͑8"17WWq~My1Rqٔػ׶5/yv\]Y 0(1ȒQ< 0`1XH`EU6	d7Ng6*'U99j!JpeJܭ\eWP\F]]_M|FiC}uXiH"ѬQ?JC$~hWʬ[Sكk](vX-?_3>g}_,oȡDE0萰M ;
i.	퍆2UVeVdEDyrV/<R1T-k%kÍqo4y=#i^ݢY_a5)H[M6愷ݚ!Dslό=nDuijڢLJZ̘֕K$4FUWE%(ߪHp0&ӈ(n,	$@Q%%_ӽ鞟O 53}4/IqQ|=c//`勚!k>Qwwvxz{XׅQxOfeza֦܃%vB
QE.q԰B	ȪEQ,
%«9rW*屷@mV:F8#ӬA]w
<а8Ar- ^(e_3ۓ['O@v2QGm'[ҷn>CОum.T!RՋ@!a
BX`WP>蠚˲*<j0Σhqvƨ[DRk$n1>uNe%tp~~qHhGeiղQ?fzj	nMl('酄F){G;!.vԲ~8^u|FhqEsA@)HJ"*{^2qUEcR<\gA\,'fUwWIhTA4J<	AԷD5'Ve'fGr	ilV}?2RѠwLZ*oW>G?NO^I' 	<٪6+0}H&n0wCo#ٞ?{CZqJcnFԫ{(n BcK^`2v\>c%si)$b/hY7hikƺ;c:١U_`d1n_5QjGx,~\WZ*J)A]ōQ)zUj z-%(Z*=6]d[}U#
k9ꃕÃ#Tv'75uYP&x3sWT'F喎 m^"0626<*dAU
V͘
^˩75:i3pڧNLdۡ[z Tՠ(<]]j(_[O|5Qi~wDiNz%iE;@|:,'Wj?|\[ԓZ-Tp bHu<8M|1=:.D}dLMȦX@T9pa Jfn@bۚ3Q2XHQD1˂aⓐgt?Y`db>to`0&m[zأ<\eb19:@م6AԼډ&rZΎ#:KDF^{R$ K]A+sJK7;oIzΣ~sXLu[e2hA$k'7/otH"lH=>;uzDD'fZī_egH",?t\括 6xsq;b:7EzTWa-KT<VS	l/<pHt;@|5·/i?AxW3mJyn;(l~:ñ{S)eQU<V둝G}|{?J̏ó:MоlQq͈$p9 K'=VÆSsBi(
QҀʊmanhӬ	
\[oNxu䑁_F"`YډpV,r& u=R.d2 Q}ljԽATwNW'5v52&#({>(YA:T)SqMeup{Lm6dtSCsVW;?{ >[.>w)8ּWYc
	fUKEvF墪ʪdEݤC=M'<Yb#+lvrZ>I:Ni5Y>XNFXTF2
D	֦^*ou9hS+`}tبԵd%4;<v.AGqW.\Gճl:m[n}GRzP(I4nGۈ`| Blë́QYV(UTlڦ?%nZ|[R*E@dΉa&P8`&B&r325_w%.9Lع}k2GE8jĤ)#TlT1QSYt/#Rf
䳐0#tu$ؽ6.FYnͦ%n3[{q[?c.qK<'Jk݂sTYRqe2<:\gbyM M	-~7%5yw@#QGA0Z6ʱ'UM[38w艚Hۮ8Q9Uܞ'dp9tpۊ
N:#	<YPTqùfc(#j'nkU=ʻus~֫G=+Z6[fcB5{D-t@.ζKF;i'"wSi.bHؘx,ӽAw&cv`o2h9H%ɸ}OQ,6F	a$Ad-&I4VbUguBWVM$ʥft2ӷMO'7FӐu1G/V #8/ٰ!f[vrhu'7[;߷$p&'Q s|HBhBt_t&fP%pɥϟ\e}w+F}^6|L+I̹1|I8f 0L(tX Q )j1ښ.DMP𼲅c{:VOUiQ`Aآ!$4^Rcb0@n`oB͌?VSTQclc-9RO/T?G]Òz>0TGN)#,sÁBUǵhIw8aǊ黮Ʉ?HRٍ0F5HR~ztT0I~/J1In/!\.O売SC*P	C'ǐ
~;u7%^kCp,@R &1"3͍	)%i߀eREM+IuY$ɒjUYX?At8U*jPA	㩖؍v$+tl"xZnDЇ2˷7G?UOҾ{}HngTDԋ5bͧJBBQ55U4,F#wqv`0RYLV -ܮm	㧼z*k$jUn67MI9	b=RuԈB¬JSלrH*OW7EX\\Dieey[[8a3Y
(Kc*10CM-:mt;@TaQlR9ST]j'H*P<n\W
^K5L%qx=P#npf"(љ@ޅ8j N3;R痷zD!RQsGF 0b+3Tl2 8#+1ivIaaJ̲ 2I˒\)N[yt
޾~{QP0::c!l;R5zCjDM1
aǆr_kxMqǋjJ"Ff_92Gky!5/B|QQ!TI'.	,FOt3<鞶;(ֈ:PءOLn* 0$V=M9N2:3<y8z5Ju~ j<dDMu&
RS~A{B
I[n7aɂ+5Пݍ*b?'jB#Ei3馩Eybb>$}Uih7(PjJK&<~❟xҦ|CRFe>WOTIOeDQ6Ǵ=.8}n7bw5b??)oh))ULCLK\Jausg}g'BWx9~s@RH*<
jj:𜟿 pz}v+8o kz2>6XZ]~OʈLJrԃ).]Csq?7:|ݍQglG
MRҐ*Z!'FJ]Ձ)n~iifn+,e:4!No~͛m6qgy2KOsV(Q3B1b%j\xq$	'ާ}9SS1jZQ+L`|nF`8jBVUu5M5BuI5v-swO;'8ͬ%>eZ&TQ<	P1Fw8mAS\o1z@z?5Л,vx
QBT1fpb	r$D!v*zo(QT$X~QH&eA89 ց+l흤	CSkBid`ݔhڬ7lVtjA=lOOOz1"Gu5>3d%T0(i*ozH󙉏WLgbaˤoH;bg*im[m>ݚ$┄ۄ4	$0dB86\H,<3e9ýזrrqC޽ֻh&r&ґ<g<Zmy4~nIבiV:I#_Cp;[-EqfJEywnLdz;wf-[l!)`F*|067-)ItwiA$Z")E
S
ÚgGM[т {C׭a	tB;h1&FZ(p,o>~A/nI'Mi̜d"4Qn}uٝKU	Nz3fЁӾ|eX&j_щTDAdupH4ҍ14#Q
8d"KLS]aD(`^K0w]w0.6v '^e";}8_*m.mW'3<G>3XM)[
l/;ܩXUe2%m}+AjY:-M~ODHqلXcX+@:Ju[@[zK~bBţFc{:kj\ Ts8uT%E`\'%V3cd.)wy@@j1Q*{xFOǨSvJe}dLnVr|mo/<ƊVrtoe}%먫v")!Ler=iaFcHȶ0=ՔmӎD!8y:&E'iz0e$"ћ"j(*䣬ۉ}&7p|)}ÛsdKوyi@*6*dc;Ӿ7w|~T9҈$1'[S4U4qjB|¨б Fl EjR=`=*JfC!P^4Q/DSbd&1-$|{D[3{+:jO>}٦u](R[%@
ZEi_k~M@8
'aau86$ctONg[4cH3LC<_ÊHڇ;~GX6Uw*kdwcF='kf=f~z0Q>d4Ǚ ղ,BQ-9@h5&j$$:bOfs2IYTĊm7onZ޷:ppۡǩwڧQKJTm[%gx7w/%`dgHҷcj@_:ÇowKnYCǰXEQnOI3_I,r5\[](U@'	d(°NۉߍLBؤfjt|\bpEԒV[%@	bח={UЁ35vnܲ:,\?9|uw2H4e:&24"~
@4ZѸ纃`4v]I	45㏠x~;ߋu䬣#>	+3ϧдwgJ+^Z(fj1Б-Oĉ;)R HKv5O\]DX>MbH Oqkz-~MEXBZp1"OnGpG}ƋK#],V1^p*㰐q%S ٥Tpjpcqb)RQ Tz,9(0R8qDh	Ͱnm;[-֨̀ŢoȺ*N؆꬈08YU_<<+^*Foo]H%oxx3'$2$U=`R,},;8[
C	 Ɣq'ˆIB;54Q'
t#}j")qPTyMdAE1~н<<.ݧ}t܊]*Yf7O9`26f2>?3-?@`ƒ*"
(HZ%cؔe2R>y\RΦ򴏁ojs+佽VDdʽMewg$RLՉ%F+Kz}?FMmfǫeP&|ñ8n"GPb9CD5	MQbr"G]^Q5'8AdPHEp&:bBur8g}DUtp+fnx
ơd9\Kh':*;wRkaH=?ȃDLMop!,ZRqF ]͊ʹQ@ڵ`015918@7L|4g%7tƟ銨e"_!nJemsGJxJ
'6"fHwz~؅Uj4Pw{Ęad*NYdl)dia(ZmpsIR<~麁N/OW'^Q3u8@ևrQ d9) <	2Ke+қiW==3qx!̞M=bXIwteU{lbD@+vTC|:~w|x<Dz~QH=/Fz痣+bE1yM$xMM4Ӌ`NH`tUP4%-' DEm6l&d#B59eM̃韙||/HȮKU=+$>ϯaT<
yBaxpVvɴɫ=HXzD^H{'eIHSp(U(LODΉoaE;ILgDHyʔZYY3jth6U=;U!Տ_w/T} U&jLD*(\ѰgA.GaS$L^Ci{Z?HY*sBYBXhQzoOTަ䓬)
kIL)OI˲Xj?ͦ7DmޟUD++Z!Wj(#^HdH,0>&nn&O;<h<BJ%EQTRR=[VXLd1.rXd@+yHK	׆uvO}鿸L..?Dw}8( YS}#kRzB/LvxԮĊ6gJswif-9)ۿhYVq:&4Izkj5z=I?|fmt,5kTtKZIrc;JcTSyjjÃa(PQ.Fny 	}Ok CDxO$tվ`}A󧠞);[>.[B=*Lm%bV4jXH@yKVyW.WJɹF^%ߣIYKhzFX2	 -.,c@jm׷[//Re7pl6fɊٴR)?HΔZ*`0KeZ;Ǹ3s#JS\(@={_@FdD@\6@lF,RQjA؝lF/G^Yj\HR9U+p`7+WFsx}Uۏ_|G<)flGPQ'ӕTn|{ۊeeЈLD=6Q g/N0Y PS:F,~7QM2Π{Uz*YRQX;5~vaQn+r(M)+Eא弴^+>SKSz O<; =43_I#DU3L!-[",rwEG޸Q[U_ቿ|ދ%p%x\JV?hRU5G
HuZj.I}xYE0!5*F?&rzBi7dO}x!&@ Mߢk!j|7)w^~;Fm.Tv6Sk{2"JAN+)E_*b1%FɓZn*W^MԦ5rsb_xYMp"(FQ Vl8noHi^HM>h][\UoԫFTE-rzv-ڕHeasy%<b1FֶR.Q{Z\Ff/pv"/SpB3L~2#E[?v=A"UJ?{^Vo4
yMeT:Û|oE{TjaO];O*Q1lcNHD=zOGq-RiBSSLF^xDDoWV)(cU}~DzexrRϭDᯣv5'gt=>u͛ik.b4M.W%PDQYo1\FQf嚙ع(uxƻb` U/Ϗ;C~`Ш\WOUNr|P^5ʉ}uz@P(>@:NUAϡLt&ޥ,Rֳs6~/O/Qzz<ߌnWx"`ƙ-$3ɎsXXpz8ִ(	e3A>#		WyE
QK:}&w`D
:~Vh~&?,>m:pvtȄ;'6?=,Q:PsO.QcׇDW zyd1'kFxʸ-Mh7V
ZwV"X@4 5m|D1딥y{DeHxNȤs(aIAZcs$`]!8-^١9:~ܰ}Mᆡ[̺}gj~D;q箏Ԩ0=
?-,AtXZbj%jQ_5dʞ([Bm87QIlki}b~ڛ$I܏(޸t^LxZ_Ǟ><B',{az@@_OkRd>s=VPqר_QQQ[pM(D}&$cP=NH>,EP'ZA,׬	CN9UpYQ$LI.QNTÝAh~僋x' l br.''4լE\cvL=eM{H~{.Q$ʫe`WK/u]^P'0:S@ۢ1LjHWS^k:*Fyr"jk'wm!<r}gKlkˊp \Vp6X0.Ƴ>:DtG2}IIk1ku'IuhVD[F1fnzo	ߣX"Ti[`%*X]^U8:a^>d9+dA)DFhnaCj5ojL3N9{j</]f\0	Dŝ?IR(#0[>d4Mj8f
Rw)Mm^Mi?}O(^L|%j5jfs P>~|1nB*[8+0NF7)s2/)RA*Jڿ'T|BEL̟(";25mrkCt}+	MY|_g'pɃJV0Ǜ=	Rk[3H^PjUMJ'j*^ĬQ2A?Erַ~]/$B	V@,1\'jQW,)8TN0w)ԪA@DKw5jZE yŋ!e,:Ut=U?պ"Dm=,QSlkB=kػ6,5H3&[](>MЇv!%nq)\BBJ	yH/6yY(܏hF13-Y-ysΕ\<3a
fN!M1p"$diՑ?2ET}㬒n+=$Ȉ!&|[Dlxa|WD`a"UEJ~jԅ"*8d>bt!: 3 7R-tMUҮ^C>agC@D"(`3y]ߌ8bзC!caU?F4祖zekTMQnK){0¸1˧9aH'񪷱
]K	+QgP29j4N̼TWoA^@D
L'Fp5BԒ"<0Sv9<
 ON؁m*|G<EWUjSuљ3!Ŧb9
<xv=ڧ}`&w}g	J {*e:+FIU5Er(7pF!%B&#ڌCfкV }RџlHec\T]=zZqgqni@&ieX$xtU5꼺>;' }.ߌdx"i#JR8!n)PTKk#EV25\SI\(%jn|C>(ɗ=WPkFh}TePDN9]Rp<C!ˋ;)GZ$όŔgptBEζZ&ZӘ?xbI$H$iD{s3BQiFc4MPhlR]o]%#DܯWQ[FX8/@3ẵ)mP(`	&h|jpx*R*ic]cJ<E$FSanP6L?h3BhQx똁3ECH}:RYXaI*s+Uը>BZQ7O0Y*'"B
]#ͺr6}eEқMˋt,@)7ݛh3_2柄@y=H;\WYYd^*DQ",	Ql'_
i
[))tO(|aFh)]Ak=R╕P6f9Qe͎V&NҠ*eyjy0@;Kw}F,s,a@H`8pC?&5d(zVQRںbԱB}B%jUJu$>.r4&HU4>c[ըcMn@Z٤sH$QDl.	4IUCO}UK8O
30WJK]}ǈ^Q5jQ*Q
Hז!jV}!&؁yrLE׶SJajCuu!hzc_W!'bEjXj~bTHqxӇo*tJ׆%o'~r$;)UgLiW\!^(GYOTHӐZYnC`[8g@)OmhEGǔ4r}WʠR:Qb|J+'}3P>M+;.dY,$")eT$PBHtg?QnhPkRuE|^9JGYҎCn̂C48ĩ)TChSUJ*EJ8HI,GZۮ=9{t]5aYHK]mY;?O2թF3C?JUo$_o٫mBp'=nflv,o޿gt-	BnyR(4K#9
*.<lX?wW)\(	\(,T덨ǿ<ٟ?|<fvp|w&?Ow?NON&珏7Qu}^senY:ՁԄȢ82HtN	Ǽ'Tj4+8aKE)MoOfwokW7=:~u{{pwۓ{^k@zxs$`r:LQ:RSLYLLf;|Iq'8K:&դ jBzU̖Q_n^};	9x߽wӃ@Գo߿8c<nKiek|?!|Y:k1Z$)GFƨ+AE#
)2!
ּ⹉o5׿s o>7~zMDo|E viDaYB|@GP$&9t<&!ga0f^}R_3*TjQzjN2H{s&Q_O?9:};íkoGN_|5/N{>jQMvY9j5~TVy]~|#@Ȟ5PU4$:VEm}(GR
^3`oWD!^wy@JŹT;%6ɻ,AR#E39l%w} R!
 jX!k/(^K"]V)Q_C~x
ZLyiSQ1UU,YJW,*$G-i Z>%$Ha(&CJr#mQ	];SMsC;*E+*JOھ!.<Q.{n\Y:T84N:[TMZM#b͠LVċt)2ը	v}ݪds͑c:cE/b1S :U*&(M
'*:(Yd_F݋,QOMp4:Ar1)>g)નM
H݉\?QBvϝ>Ut}Qn|vKQsI-j1b<Ab +[ܚ~6Nq2:A@<GFu9ը \]:г(4~Ƅ(?DEYQYD 	AQW iU}QUw>(& ,; d	0vt/X%4BJ*VSl}ulTMF]UwY%t+usv}Xqϴ9B>"S<鴙BLWs)d6ЃY
eQu樦0'1ʾA.Ah",g]N2B[kw};BW.| U痨냼>,??\FIH|e cǐĥt"'Y~ڎmP*5~c<E2TUBn}y\:B$IXC%0"bqNSDh򔍊$aZRa! .RQsT>	QNG$bb,_-)vPILAb=00%txdX/n0jwwQc+Dh+OD*pRB8il~6""BDjK'.@ؾey_QR`=RbϯtQxGy$DjLU"ʞ@FH?'}$"ag8[*f [ɷ1`d?{W8rIJj%Gr&f0ǽ/9ć| _̞&~}_(]_U5I$ؖ%lR>UuWUJۄ(N*JYۢou׍1J1	` )9oi΀0HAJ
{hƗ1(2cxۂ:##21)DWK14lrh_Dې?%x_R|Z;mb8EݗӃȨQ(>AMDeBkUiDLTn 9oc#w,ƪr/Uc,`&VR=(v>k.\YL6֐XKbMEJҏY&PTeP%JRKx崾&Z(VNN?Z_WU'QmDJ*7se٠μ$J*#_ %D(NՈA)FO/mb![&:M8*4m
+tI^*	]"bmd|(J:dcVPӎR[k굾Nf3ꭣX8IpegYd)*gJ/bObg QINo%:seۂ(Z_d⥮?$@DLY}sPtbCz+**;VB_Ά?R !^âdȨ?GTm QF"˹fQWjfT$fs#SJ`!)Xz]y4'6XFe:dpjD""hq|\YD'PU^Ӻ,m^I)͞	,"V(ݞpo JLUCnBlR
8ľ\Pش2*V(˂W$izD}u1/n
Qs]M%Xnְ=DM'!R1Y A><z'FʕmQ7zG<as"QU9lk*u
tZ>)$8!S_Nr8B͐eɨ㣾4|YHݴM kW)?|obgbKMkOYOQTpQGi}ރi}'?{14eP4Ĕb8J*ՌLJE$NRk0ksHYJvD&eԶF;S6(rbXY-mLa]Ù5lD]s(`a$nnLGT!Ԝ|JSx~VRXX}QCU9
+rTj})鿋e&z^_l}ĔTaƬ2U3CF1"}9݋Ѥ,$XR޲DΰIնj8Gp!Rslqp!FE3`DQ*P
q0q)h#.#OZ߭X{%[ck(	p@T^Mr5NZJ	dV(D'/l}NuTwQvD!)eH$S3
 K:!iELuÑ91ic)CGFzDu[&faxuT5a ?))(ˡURM~[] kL(p&zD5~(sC{8<b78#ɏIIZWeJ"jxU*s&uTڏɨUB*#/4t^E7,D!	C6kE׍1ǇdAg[Hj2R`AZPŰ'\[G#5Zdx/ӞוbECZ&JyD&2+WrZ֍=*2.,ԹE0$cpFg!uED|JYlZ71M)^Hk*l~+)I~!HjQg}vn$<JLare.v</Ӄ@=ԴVb:eZ>>s:P&E2 ~UDy&-VTq')QbVQQ:ڧ<52!Wmz=v!Ēe' ,I@KuܷCdTeTￏ~EEC{į*7g*:-Ń*ՀQZ|4lHQgzc#("Qx(rDANϨHzWZwǥ6F;.=7wZLL!:*~]@=țb޸VEDgc(˓<*wGTr\Gϫ#I[+?(0
R8ι2aF0e- ._#L)P	Cԗj+K_oO%@ADqj0dBϛAT(	
 |-e?.l5x{>ig^̤[fJ+πb6wshȤc_'$}TQcbUTh HgҼ8pXQU7#!>+4)GB*{̩huwi11~msn8:xݏIOP$ڐ2
FAe-ȒNjj}(}yD	h}ҾE 9w	^c{\B?	DH;Xъ6/|`@MD·N;j_u6?&);rSS:t@JWUN%F^vT:b_f&gT.zS$p(M=x2[}D;)%^Blx u^hAu}O傞kY=Dx=eLCOR^eVl<Hݿň2&EFeus~~~^_?8pݸ-_hqUF|qb}ؽsg1;G}GƼ?P8Qa&~UlÈ"l4/"Vl#bԜ/oˍA?x^֛ǽڏ-}3*s0(.sFEwu"J.˜)MACPD$kZ(Z|,Zߴ.Wm+\gXeD=勝W
<wnЀ_3<T+2MQ'S=/EJi}zN<(ޡO߾ǀ(G0GW+,Y:
[wp:@ڂz"<g3>eYVQˊ՝gߘϓmyll̶?hB]&\8]E먦u`nK/@>|[*+ߦ~T_*n>t8ӎ؞nθyYz|B'fkߴw!QFeyZ}&rIعvKFۼAx7.lqNû2{˝S.c/W;أrr'hߑdŵRP r*lV$aNoCr|wr[7l='3͢_9,ߢrտoHW?Kr[HIm*yVVj7;G 2KP#3)c a~6wb߫E'5Q&P$xC?}ޢBU%,Uo.Q (D6iG龌O}WXQZ׸~l"ηy[lK=\<jWKS0#F$8sn"k*)mnTNU#EmTZvth{)9,떹!5lO27r2>KP*;Q?QU:ZrY8^8z6Id{Zh!εnO ^yOO(Q@=W7=Q·̿*HA9 mɣ%$RD4ֲ$DIXJMR\E[_u5Xxc'V&ꭨZ-/{__nQEfˡq9&T"RB5V9SOIpw<iB)U5sC%EbN(QOriK}L'B
!P%*}F}[ɧwCq(|*vApOa>E,`ŤiE[0VYeNcȉwUQוZ*ť3R>@@^?HDT "ᚆGEt9yh`=XDU1Á.7GjJ[1JV?IuY
I]3N (M 3P<@1%Eŕ_Ő":	D/p1\'l-mK.G'rɿ$/{s-t:/BS;,onW0*_H)MV+!@Q/-~||0B$2Ҥ7"J$N\"I\UFKo	. |G{z(AL~e,b-s)!BT\;H%>\b1|D+v6;ZUf:'תM^8hP]!to;4IviO? !bwW~ud
+;e1Q,$8T
J@3W:uB!ۜ*/M&]qNN+`vbLQxz;?"^$S*fة_]<;mL c!olEti#2ٕ2Ic
;RB[*
i)p9yoD3wdMz'8<7eQ@ew՗[n*ܩZR{6 <PĝTZFm|MUNֱ4N9T('qi%Zx.w&^sOKELLoQߥy+-{&%ͣ<=P\YɡV֞G19чL5(X-9gF}o~[S~]>P}xAGLwniGZ%ԠEtަQ&3)چDsk5]L0<#G=UE,`&'RC#xzpxnr(K:,{<8vMeR]O{eG"҆E}A_$V&LG9zSސԄE\U ֽ<Z_(O>~hd]}yL4<þxwHq]{&dǃNL5DFYer-ErNo>_{aQ̪LfRM4~?ӻ;O|'N:Ne3ϢxC4)q/EޚM+bqwvVQ0EͣL7bw{.*JhP&E؈@&5	
~B5vi᰺dϧS[U_Nu '8g]ݽ<İ.x"Y?,o4o,ֵǞ>'.N tlTBf\
s|.qW(51rOVb,_`ʌ$p;W<ar({DbY| Ŝ1OF8昊x\h
 9	5T|t)ӤG=\1)uXQߣ7;J@ޒOSE>V7ERJ\_g&&\Xhep|\Swoyvg)',ܣflX2.ЋК@j RUq`%+䘈\	i8>+;b΂+_J
+sϥW
"j6PUwI
j"*[^\%rJx𞡰iQ1tLY)t		Аz$kâ0L>c50|xisu<P81hc#5A3J(" "L@a[8!~J,؎2fTj_B,}k#׊<If*RH}pBz&.uO&M#ЪQ
2,.bL[̙ĺpPAÊA6(NԂɚ@d	&蘎K%LL1)9[6Hgi*#N r++J*^k(ڰH(wmbr)U9Pi_J|'A| S9du֘<9wom51111yuaF:,_F8F=a|$6j    IENDB`PK      \x  <  codeinwp/themeisle-sdk/assets/images/otter/otter-library.pngnu W+A        PNG

   IHDR  s     m  PLTEGpL>>>+++


	
	ȵ4A-/>4&LU@ioY% (#!&&&""5(-&#"%7- 0'
',;3'!+"2@7;E6,5**=+2A/

-)0#<IA[Ia$6D=1-(;"AK9GQ>39,9I+ "3%(g'MSM2A%GKG<>.&'w[$)+,LZB,?=DZ49#}o*0M2DO,56!9T.w//2 !)K* C&qS 6U:S]PqstMa7ˏepnkvt2++/$67ɏ>\BTdC4!gA%_iLp{{976UWYRR<9;@^jhL<"VcadP+DjEAQJOS,?C"[cYHaKPlQx..ID3[ZEdg`WE&fj>WnA[a6lofB-^u[DBAþcxK:Qlw{vj1~nV8
H#nnTme9b6QxJHXZ#^[#^-tV*zwQ2qzCuess{\..Tyli7^f'GñsMĮD(9DSͼ\?֖СF,_<oTέxFb*fzAl\C<Οows8X?.ż   !tRNS %3ktãMńňm IIDATxoLi/
tgstu;{E|nXɴ:
ƥ*pE,VZ!`vg9R;MZ	tV8FAL6IVy>}zߪzl1%*<%%=a{=a{=a{=a{=a{=a{=a{䟺W/|Y'G	UY.@0#ctK	ȕLv8M3GAg|%%WoJmЉ/`4d()E#.4;(7URb?;Gq؜/߆[!,^DPGP\'vmRVRz]H~>baJ"`9k|l	E!v䑘uX][0g{YEX˵-.1ﲟ@oE,n%hG"7;KfcJ5oC;5"Io'ktSmFd2*ZmTɪFv?ꊃNc%v<(ZɻoXdwVd7ftPk]bj$Shߤ<aUb_6jkNHXF1c\,d:>zU,??Cma1+g|WZ"aw=1Wg*m{!QjK!9@hF6
`7fXj&@	OA݁^C=e	`i0,O=3>1't0|1r->A!.<Wۢy`"Ɨ'mg-HzqT%BLЈ}*Y
*^V0!WP	lg}ڼBvTGE1kPMIu~{"`-3v}OU@?eOHlFٲo(6fJ
iؘ0	h1SFì!cըX/C
> K,KCud[}tkciw'+Oì߿

%#SXϲVF7%VSrMcI ENҧ&G:;aԢ>A֌~޼ѯ<a=$RtKl_Y(&fa7Ͱ:PKhrQ<5{4tkЯFu$<Ա8cM,1X~CT=Qb1wc{WcAVDUg45aX"蔰DSA0e`(Ҥtum?FIcnA9CV4֨;0d@C =Odd2qh$1꘿|53AS|,3{m#6Q8~A0:Mbw</Ian+4f$7MFXfuxYz&i{~~á_d-{g%9a"K,b9FCE)au׿A#,y/qU8c20VPv
Jms-Y~4Cc:uP$şewNMO0}z{آeI
l^1%PưVpNâVXʼ9k4I˘U&'8[BK(a(s&L߳<n_~\L!yI#tZJ2	[׫PשW$Enp⣝-%v#N'ɩ^Fv);dWI48SGq~~\M^G:0+q&oaĘ%GFTߋډS30Ѫ`%Qgu,A'M'm<`fnL4%3kkYf0;U$wK(2%ɜ:7Zta2ڋ[Y4-Xұ,BApȡhAI٦3Ʒ_H2!Oآי	!
NǄI+	ݰ YTNNV}/rM(ccSp㱦8LC9ZZbt!4Q^X0[N^7yY-/vLwIBC4>6s	xq귤- Y:	`5,i'9)tj<~OEp0
Tr|-	9V=1[I"˙|w t61NN/X4HR(j(x{hduOɈ1#@#qjOc1Ŀ1T k8xYK~,%]:g~X JP:FsҎ+1@ w2PAO:1kqO#Ei
PMjЎ~tņ'%`0'M:o=?g Pި0?V^rX+?'@II^NkNT07;tu8ŠC &1-87$%Av^''1DI=<aaX9ta2l|1VM4"5DDa`>̤dh(%ILQw\32֍L3X>?c8Xy490ùZ:kNH0;&%{UН}5b|Xt:z'E*S2<Z4h-ɻG`P|6钫J;-*:ǚ5:A#vq3Kf#\w_d/0(pcpq9:	%G(^߉~dNK*ti˼]͵/5=(Z\+]8OލQwF
\=Mq	zy,k\ǸSM9iiDd	JB:)gĉ'GЗ)E]D}K;R7]VBs%CSlǥݠ'%>fϟU%4I	B*l+yag.Ȓ1$ѽZj8
 .Ma.u	~-EFq.X(R(EK~BeN#qiW?Vϟi6OWE:<C\&Htۊk$hF9«Qv)~(FgVbij0u2&7pAQ"C[_J6:SpQҤH(֌\Eéen`ƕ(ve̡ݵA,.4XTA8U5gPen6QXBj1lBU |9`W-ʨoZKG94:5Gås2NӀ/!JE}.0&`ĸx(t4PnEH,vtߙ{1,K`"gw7]~[+
=ۻvk7\oV(㨭`.UWXuJ_.$B?2J]NJ6>\:Xfv:_ON끦_1љpMAtmsݱG<FG>F=@,/e;وbJ1ruuF1(F?^+I:H-$D268
GkYX8Lòr*T
Cl,-EOކ~вRZz,':ͯVt}{~'0c\]ZN %drhFG^u*`9-MTG$'$ǦZ*TTZ2ɜtb:w5he+5R'*[\ƊLuU\JU}҂[O)5xi\ky8ZϿ;-]V'@${䷲߫
_ǫ9ldE|L]+YFV93oN"uj?*r@KZNo,WWNJ5ICTp髄rKCɩD-5EMm/'5ח9`F;Rq=~dlR/\1RZJ^"^ɚ%R~p\	4h(( Wu˄5*45MQJ֠:)JRZK-ե1.i~L`:RϿhK(0rw:ؚoL)>bc;2ܐ9ut=*յD+bҏ2x"W/Tju#4M*κ<?zKMbܘuF.C~Ф8K%>AaR<M?<Q^
4}EX>].vh֘a*,(-t.jj\8JC˰ez#.7. t80~(fM5D\x#RQ̧M*`1D*{k6Ot5R4\ɒpUAҋk=K]AI{TP(Mqk}1xʣwWݮRWC)f$E0hG.cedzx`CT zFZ^®`Dz3*ڏxz\Řm<P:	v)1xswI>L%dl#r:{҃J-f7Y8t 'ґCithӲrbH\y7uA9k+ˢ<͈vcXUp	Ɉ+%'q^C7laYyYFr:0.=ԎR8"Ju[1~+;C;*t^^=BQ!3kUK~0T	͋(>$K9цǅ|9d4ZVC0J詓	YW/e\1L2OX~~2X(TeRN-QQcv,k?4Ɯ'LR=-8:yt~q'o86sTc5lNܟH'<v:ؘ#`.txˣ0&a>,yyerzY˘%ǡ8ia` Ԧ};г0-u,C5ajD!lcNs|7tp^;znaYbRzʿGp81oc4pxYFSX؈	.fOho)NW.+pi|dyB &usYο?XוZ쌄:ŜnljvÆ+s9FN4\fPFUenF^t- ND9k 4!|[!DepLdoxײB:+pʏ@kgzˆP΂CQ>ñ'| /	EDZFꄲrJ4hFSŊLZVnJnE'nhS7HPÀqXq~oi~鳰UVzg5j
S9msxac|`@JMyU(/+RާS*:2-7]Wc
MWnPo)[V^YZȕ`uj;a<̝ñܟɟ aso2E=w};]k:7IenJ(v,NVQM'mUUUل?S('6!PSv3ٙ3H+j]JvV9+)݉O?{ǎy'>YҤIr;PU\L,6U=$8k`c谀|9Ao%T.8a!<(L'	_vޫސX%r	
*')S(m);3s]³NVc4ayݡ8Z1staЈqvh	U#	NhPɷO胚L;>Z9aLE/˭wV3Zb5NIUJsjl>a.=TsgZj;["}W}ne=ܙ.9ᇧOcLdiҜ.SH .U1B
?B[Zz3sژ{aI=뭱0,[ȣ<G1,9lȽ'3ULh&IZ7HƔ@w.:mP3[x0dm̽OF<!fszcb8I+eKlic;bft.֋[RypmKr{b.=44Ԧ)L9ގn^b
I=F%jtan=%ŏCQS58$/o<|Bh-s+Z>𤍹A,헦DџNUjK0H"[o3Эmoܺ699a.Q-m_?/SkMgTchgaġ`~ܭLI <y+-b>=:9hwS[F9{ơ-'aC`ei;FZT-4=lic}\5 ɫ:
{#|
ʟC|8Bۈ [lU5ۯ򉟶1`ܜSe]ӛB\tEs? cnq(|nqdrdܭL;2Bs}\y^YK+)pqʾ\j,d2'NfT :4nɖm--іdh-[eO|Q@ #:dqeK6ƙП
ߩ8`s[nPւ
ϽW|<z\k:11ybƻn?gcANt^q¥l@
N߱_6YXϴ@2 8XcxKlYa_35{K9Ԫ(l(\9Yj6sTsU
FѢd1sV-_7޻<q;}ŜtNkragժX(|}{ɖ6{dr1Q^&^q(sli{|'qkf@Ve)e<ٲrKIgNc~1
`9oic}˚^`
 Èsj ]`}?Pl>g#
|6;?ǲŕ-sq(lIce6N
52`ts1`6
9f>WF9|IZ^
:cgծ^a*ҜF:k5C/vxi~~>*jbvhl>u ,m`szR^%Y:ʙ-b*AT?w8?\1IZ	2p]_ӣwu電}G>KNRW']ᡔһn:95!vXi?&Թ̨ct9= q|)"oɆq?$I^<!"K
_w pZð&`eWx4%.}ݵE˕se,.0%X䞮 +p/sqBPEm^XA#.eAG:g3;8n3F81'<AS t]S)1w Ѩ:%((*c<qs4撡7M$DylQs :!//|/fhtGA涮+:]2TwPŜxe%s -s1Hژ{=VNg09MQ[(j*B6sc>-25u+G?ȶxM0]dJvZHij2wlP.8oe\^ʬKҥ֖[pRV
l\__؜WT$+<!khE*4ᅮW:O9R1O ."̭ta̭_HAscDu0%ѩl(ŋt:P5[ .9oR#\2TexId`t3l*ֺ4V.we_ui eXȖ
VrwA¥IB̉<E[:
5yCυ\Rb_`LC^/'>W/D0_<uD"˺Hi]0tZYR1?NH7\1w@}P*](guEY%k5lNRD䇃W8Եm,/`XߙLfE#a|.0[SM)%<lc%VnhtNJhNqSy\D}e-Mk"2ʄ(/.bu.oOzexAjYayRK
WʳT>I;+XZR1sE"%F;69k8dL#eˢš>qsSQAeyW`>dKb)G(al}WfuЅiw6#xx9ۆiD)%UC<:b.-[R\4*H,rߒ[B_3Ypu|n7A8WÏZ]wTY-2|.69	.g	)鍶|+aC!(65R͟s63;mE)!p#t,G}|M<A0o)a\)M[A45Wmxsa[8ܠcDa]ii^)"9ʙ[eL6q wġpB¡Y[>x'sUb=DBOh 0'|MSUnyp>ǢZKrΦ
*ϝP}eOg|:MQ׫8.T<m[.\N!(r?,5iqLIIT;%{h1syN	t<j{'d\ד<>VA1ssxIq:\:-B0#|-<tsƹ qƢAJRyD"2ג!bKuc\bWw%+#
lh^Qdyʁ΃#9P(:.:v	-Dw0GX]5_\ˢ35;z?jfKVsLq|I#`NRAC'$YvEuOɖ RG
h  .ZC[~7E{{ŕ	?Dy6^9>Wnje*ԛбT Xx~=̌\4JuL+\,&R-_q̉>" Zdx2i>(JcmPM3SSWKݯƀϽ
ocI<𹬍cRte$Lտ(g֩-`gN/+8S\()K2c+5"/GHVt΅A<xN"#agXNݯFsg$^~~29l٘{2?ٚ\j3J3˲{ġk>9IIkl̍%J8<Hx+_	r(T}\Њ!1*ڠ7pHh x'Ua񣻟}hqbB[WS-ٕM07P4*nc@3X]БXEsϕTW9@rbp3/UgA,,7+ yʊrdjj'򼤈]Dgr/if\Aʋ$0|ݯ\GD_xlnSjA-ms(.Q[bKУ\Vl}sϧ0&.ՑeYA""EE\s
Kl$C$8]DUETZ$z_%Cҫf](\lt	DހcΈt6ѹLy@dX?5ޒ+xs!p@5H* Hra:#[EI@X΀8rY؜$9qO/1CY{8ɫ'S\<Ȗ|rVc6{>W(eD>tE&)8q# ,׻AInmQڢ/͛x3072y8!E=r"D"^[ p9T>Fg{D5h#r}:_{deI#puŉKϸuĔsydl`(FpT㲈qQ-Ud5`q`3`gZ<s@6G	ۆ:NY_Lgtx{M%^TaZ!%$9s'	m FjxW#Of'&e|5j>l`+3]9h:v2k3]iɍy0bPnǾkI 3<ے	?m|3C'e庇+M;:/ΟIKL4<515ز_%A\O:QP87OLq/'ʡ[O^zS}ΨDD˖7r.--]i11BgYܯs,Te$:=D6DGx!I_,bvC /ՈJqoq1a{kh^es [Rדe)!L)(5btj-l`YTqFnE)>\~9sLKlę̼X%[f!qHǘ<CFfY@㹚~eLEJd}9\_2O#fU|.1"si2
˟uD)5,j&MJGj| ;aEguF=Is|ssnF4:WBhݻ/d$s[\&3"g\J~MJdm+iK ^A'RzBJrC,:(Qϻ$Փ8ƫ~)ѡ	NZyQꖑ[]l`\FK,;.MŬpc	tMilVOвl|n4	S}`@~Z/HCe,D9؊*+ܸ\;T)?yd#˔U#חyy1ƣnD)wOOMA0p2gM<j 3GXj9gS(v3+;z6`AVyTk/[JH(%AVd2	wlloMmk|n0?,E?&ンQ*[8\:׷{ G[uKt᛼ӫW4/5r-[H<aDI
݊Ω58(%oy0gR
. O!4mssk;/PWRekd//*ʳd\kr֋{˹c`V?+㋭q,Q˅Fh̅y,Dq4:p:YS]0ke>w69qVoN7 Gj9Nwd˽dD++Mkv|N-X%%ʢf<j㸤؏y.H-- `ns%QrE?8yyz\dn~jisy9M6ވ4vJ"3QtCXQ x'^zCWqv7\YY(gq[9ϙmn
g&UzJ33HU?y89>WS"^,=x	Iu"˵RMr/_LMu^Blogt窥X[`C`KgQȥcT?3֫uS$AJbкk=W||bcFB%wo-r6970,jhʖQ4>[Q[nC\X3e4`TQŐ$$H7kSؔPxJ3$W!`r:;SӉEa!@D0\.˶.΄o aUhCәy"7-pDBRٔP{IxwqWuHc3os|pbt*YoBl(\RL_rb6Wy<h߫͗'S汢̬ kDT"IB
8IN}`m*(rY/!>LnzGIRw:X"2.(ݾ(KhXSZfn5aa/OgEE˵'')õrwmwx>S3ŉVCLA髳MCDCS6Gّo[j٢-Iǂ
 <l!!
<p{>}	6``z51Drدl2	٪P%=8
PT[-<܉şoNMwjhP'pkj"%5dT r(9y;970Vd4:෋pW2'{ŉ\HdPB
-g_:hN!*\ 	5] gm}}Tbp띭:3JMBEQH(]q0Z9z|ޤK:ro<~UۃUO
}vgkk1y>wc?7!J\h#s)`sˏ'D.FH́ظ6`0m=*(Ղ G6BJ\>kxmc}{pwMEsݜ\j/zSK=(*+GyOm}ki{۲tJ^K=oQRpEj#)[i78mQH?~Q:է;[W1kkS_kݼbX3shl$HDS
ă8 <￵b޽P:o6tzZ|hlddKūCC١$\t.jh>9,ZVBP-x9%87*~B!}L3\ˇos'Wfo[<qft@/pJ4L~sjUk9CP
e%4Ŷv=M[Uworn:ږ;
2RǡDrG@ ΋ K$`|`ޚ'/MMk	̮zOba3xnK;]F+/S>ߩSV~EOh"xQM lKKKXsslkkdssjB>9pWCЉ|h\Sv /arѡ#1w2y6>6KYd?q\LHy̡'hw_>zizA}>sضy=Oz(-q_}@oJ"Jobjmj4,Cgc1rG̎'2'^$%[aN}:޺_ԩϴjS5IRlB9_}[}s	޿/@i;hZ*ښZ53UmmA4腪@Zu	0ጧC`ϕai+B꾂#ϹMq͚ţ	;! k>@XF{1u-ZkbOE'xk\R镇"׎][Ns" o``ڵksCJ+z,DX_/K˻_/ޅ5XGlVͣK@R;{H3Y[.E;|48Va.(JXKl(Ԝpdf<2-m}H.q!۬6̵$`Ғ9yԧneՋWG2:Eq:ˆp8GW`LO>zpޣ'Un^m [[zhls(8C#D[%8>5hR )h:뀸^/ri\vF?bڧ?VsrMp8D0{.B&`e55~0ĴVv	5)$ԉ!S(XC17DF\ޙ
@ zs>.!Z tI7UɾWFȜ3n.%ق{g#rSJ}aŴ[l6eJz>WojJ 9MgӁ|9Qyt<yէOhɮ;Նy%E1hǴ[+/BQ @V67ݠl)6^#ȁƍ+|B-_xryR#LmΝ҇cOCO|Ê^[{<t2xǽ!9_>$MVYЄ9z 5mc GB3szV=}if8
5zCK05fl:	ݸhvKrK#|.77G2Ws v3V<X}^eǏhkkNLO+(As;xh$a(I(i';iH(ܰ)9NVʈˁ$ׯ?F}~EȄ|;/ZIRNO^H5#WQ5hfTnan4j`yR99 L_zcn&X"&6kBy2~v39LKL]sn>8B[VhtU&BVsL\@8g>7#3;
<q|9\ʖ>iyv{ rO_cOn;7K35dC]暯i<E,T`C7RJQ&)ɍZD]r'yIm!xN-H*'֪~ %Чaa;>Q!U"4/L?zd>7	POe_4 R˖N©wY< [-s7n`\'o Pj}U ]Ӈ&%0$6MQ<$4:VdyUM#Rbɣ_>}ꚫ-nEn&PU|
vͮ֨FYePn @@{,q_\(D?]Wչ ]~|Y,O{5/Tvz5x!}ZC˰iOuw8ǧR+a#R~чZ0o8HVј\Ich ~0׬Xș1RАL	h65i
T̝w@(̨͖Cc{yQΥf
iBq}VY[RQ=T	O7ѭ?E{˸ןg6ۉmXVJ
"g"rjn	==(,W@\SyI Ypڍ?]*e͛FKw6~ZB)},[u}{StO1?##Tˉ!GRP"%{Y<O[@V%9ny129ZĘ1-4R=2~$39'T!~xf{%VwcƏ˟c'C.U
H7+,ݻ[`ջcۻSSp뱵)@o3nJ~|je)}"N:+K
-GN8{s0p`B|˝Pӧ~\	b
BzBȾhT'UVFT(᪇_)A Z'U޾d|~γ[>\T폟/}TSMsHrM~07
;LN*ʙPȆbD9ц$̀[%+1TJr)kwϩ,-q:F<O{֟n>ߪmT A}fyTm.6cRv(KVAvm8*&Nr1W|xY[LER-8F_GE cV*1@@C9|5E.KȝtAz0%AQbaBe+f[Ilo![\UUG'!0C%ZDi4Av Ltý0bL5\hQos&3Jn,-4sLѡl-YAl(#}CM+Mn5UTϧgVUTU<X\Xyx+^8St@EٹŊLPzif1f9#cZT?Ï>~dgb׃nNS M:Y\kk(Cx4CbdK e?ko~^78
k׻l]J;D?ԥHש>d0w}}50~vOp	&\_ON -^SzbDZwrlRbQ1wA Ň]XBk_8ن&[$h
Z@="T-?[zV>Dm'?Mf
`nN9نx-?ה:@"o-->D2h0l䗇lsz$y%sdffdl)l55fk@|FG/y>;@0d;xs]ټ֡׎d?*[ZBTa=QBXw̖}퓟^_2^P
e_e2 K	Rjޗ.ԇ({hsuMhH<@nWk=~6(%x==2i"/3ӣ4'!$RN>4g8$\=\jMCf*QJf	%8ZB{'{ti{.G&[ Le)sk̛̆;3I&ttcPs0C!WP`rCCM- g4/-[ή0Rp%^?ުh)?g ՙ5ұ6p|׃)#Un;AMikP@CN?xIƆNHo{@g8Uq+}"0ŋМ }21O&?KV@5>|>`PԴ{_l!~?/.C'vm oNoR\ۄi}l^uV̝]js?F!.={%Ͱb6l(Է17:?s{an&	eUYsK-c7&'[Ο:<y}uP֦CjU nT-7ci;<ϵVB>NPÙ&tQ)QS	u]@-$r	nX9}Q~mXWz_BKT2OIBռq2fAeC\P7[7%"t"t\dVId~>IpI"nYU&%BgFs=W99voTfԵФpf49z!ϡN)v;}-`b2\z-gS\=A7**OSE PhCz|6@l]裭Vr8M=()p0q)
s' Kl[AvwIs r\G![}ɨr-Fz}geTS 8w ['D┩qyA@@4ԥ1a0=jNK_\I$""sA2RxNC"\6Ǳvfpм
3SOV_]H=sCq-mj]$lrj'u<#W2FK-}B]⺳ ;G=Bշ|VTgn6vk> {Ifw%mnl|V۔4g@v>WyOx9Zn!gdP/hq.C'0Cr""MemaXxc)T
P&0r",%jTJ`5U|(߯!4:܉F.e$^;-)v}ˣ?W:1n-ZOO!r{*ߜ䂯ϵ^D>:/aChFa(aTyt{u߸r//.;'Mb0't|86) >:}{K3erv}Qe	NR	"ZPp	BIB Drژ{J<V`r8M]VY:]3< 0Wco!> t6^S݅P
#(az_ArD7vH` 'wW:;8BXU>b90pQXP8B9/>\294 s2*'R -/+R
zp )R/Kb2-_L
 dyo&[IKss1{xKŋݔ	`JTmBh`_1~ty 6"oCIu :@*~|S-0	eO'?.Eq@KF'Vh8qk+wr\UV M6I˩l_O"Rw'eibjUsJaHіAHXo9:}NesTs
X-(J`ًnpšmmpPe?eZ$p	%	輨CȗQ^5
u WAwgJ*IP9ey\zEʳmB/ym"ՊT;<NCcTJJꛏ2ti;.)\#|NB[|xMmT%ҹXU\gʖ*!^Yݷ׷6~5bFf0{S%4'Z-A^(utD*QYAU`/}ʠܼP{ >Ή!u!2<%jP/5;/@	|.j"CU
-%\vX#45!_ށ
8 MAwsWp1.k-ҩ[lu~Y4El&;[ب;nm!yՎggSgH}*o_́"`yAC%* k\d_g!iG?sP'?9b"5A!YF9/!rª,m|.}`BI$MD1WHPdM&"g|ONV#A!5u K5P Em̽>G3:KK	dϑ&!"75[bV@qT`\ƃEkOGum[cZ(U;nNݝ̷ X.PLNy
۽sp,(I[e9*6tt(¹juwv~6pJ7X-ϝ NL˗R_Sk*C%Q_%T"82!zC!NB#"(_ |̇rWIBQryJ [aa}8ZeI/|6_Z\	d*xEv.הn.e#Bz$ͥs#phve$8?2U-U喚F7Jv!W&l@9s\FU=Ts
[m&ln;>5@LU:Hr׆EDR
Z D耠FHc2`C:DW,8Ϯ)@RZh
'p`W&s-//c`bxi1\3($&л2%B
'`=VʢϽQ엥eنIN+(<bPepih$k7͏dC`v%. k,d؍<rj6;<lJ/erC#ss#hBv.0WsTPvwy`g*v;N`}Jݩw[{)!ƕ}2 +)Թh+"}! 쒿s/}~(qur
z{+I켉U&4D [fy
jܛ>pW'"ģ@`,SۏrhQ[0PWC^k7,~9ͥӋ#MzC*jH:"P*U kK5&B`a"WU᳢-njZMm#KJWM#P!mjKLAa:
o^vǪnl=>0/4w{t6>qHT<`ƵBG#*E,s|xP&X.Q\.jxpP\
?j&UqT.N֦OwQ(t-D
k,(,uG/	P2fEpT@3e-[q3OpI剓 0'\1}jJs_ϫhѯ\{O0 Nlk}8PjAzΗPݰcvsA:(4 eGp457p`T[A%grG׃nH`+?tEC.QN42mƑ O(ki9|eD%([Nppa`wۓ1ĄWW
NGA̙KK
4JaY#h4fv~׻[kHַ
.w.`\UĤ	*<* dFѡ`mͳ*0 #LB$(t|*к ;༃ꮼ	n+~rwբUy0w&d0[ʗΦ: NZ)!kaa7R;wP1@2JB&h~S:z=w~CnYesoϑxrr8+L!*N̈́%>a.Z$A= J'd*P@cpB:63it .Jʟ#iy^f6=S;kwW_=*تĂUvvM q۞l<
B/!Un,0[t❽Q'|zm'~r9@Ը,(pI譬q(r:8h
X[F{6.OߙS	p32%xnvC83De
~'x%fMY`PKI6F+>&P024747mln}aL!ᦅl3gٹv|{,˹h.mJn~ndthj%]j/T#J퍧;;O66ci;;[wpGq{?xnz4!7xF-^C.r|+ݲe%`tҥn\_ܥ`Ax@PJoYs7hxhWs`|n*J229in+%7I#Pk9BlxPNbȡz8[LFQh4477o_
dsbE|<.U r#thbn)[Y:˕ա`nea4[422ڴ474lokS/6Ww;;;PvݻH{xYyW/<qÇ{1S:#|sK`A %`oЈіfmŋ?g?7]QPy4t @Գ*9;)`t_	\t̕3C~(/COqEp>tP\:(É>hc~TrNw95ęX6?x }nVbZq۝ZȔAs?ƽy<d[?/ب4^s
yRDD%p߸ݾo^<|gj%Z=B|;)`hRo*ؓĳ/G0~g` h  ޼eN $NH0A=
tJ0+v?q'nkSSz靝*W<xy{N*VU^pm
@y޾;~p٫D(rt"lYojKQ_+s%ɗz!E	5ꇒS	aϾ\lzj a	5R|'Ɓ	rO7 uU| xS.O8H3֍4=msssJ0b,9R+duRJuryTqv{^nAۂ
 H*栽jzo^l<]*| gCURLS?HG/4AJ(Ple7JqEj?'?:{)BpA:*?ROk~#AR!7=~?3Խ{wz@LDȗ&=h|TA@W@*+0wm*9UձwsL!T}6P\̕PWg9"_/Q`_`8CA73p`"nɢMs
Rhw=2{֯ԣA*OgJ$_N/_|4} <z\u){aWP
+RL [*a.eQoݵ +|~|#Gr
.uB*n44HkrSj	yB޹1k28RCS_<{BW`LH"C[砾WHs'[}g9Q(
cxޤHBnatizEdGG.-/,bt.ʡЭPR(9pC8gtats٫=Mnn}Sxgy4QNoz7<K) }y@#(qhsQ(Z.$xhlʣ
v}v,(7fY{+C@đx0ȋvDˏ\4=_U:S9<:;\>=uo$4ދSץ~>o=业DB!*@uōQp(Mas{s:=gRy[;ɁP[tRn>ssP2;aUa2U#B"!kN-2K\z>|v~p?q*ˣRЯm( ٩ :!,(
6:3W]^+kѯm}[;^F 9>6B 7.P>gB-ioɟxV{^o`B)$Y'~A@nj
*]xRPǡw|bs9	M4I@%ACA鈻"$JIsM-̝8aPʭbD~ap1Ks|}@W^$YU٦\~tt6<ǻheN}	mJ?{oW+U=?ss &@&)IBv;Xn
*
(oyh8rǺUwN{gu{gvfw=9\W-lKH\'w K%9?_œ-rvkb.7n׾7kaΜG/q;Mv{#'jA^ogQŨ޳bƪu\h5>]}= W?HE&7 =dI`ߊ*T<e˫Oq:x[ܜRERZ/ˆ|a>I9)4bGU uop}nRY=v$2{}F5tTom}^uf03wBՍ0
/·AGz8\s 2du6W_jKxH>М݃LJI*"%ԹpKLH+~ڑ.n(R}ʟn)\ժ9*i!_0i܆Pb
JEu-OBtU8oP/ByƊs,9G(r'dʂ֠BdNydܯ*s+_djml+ݻiB/tSBrw#Tfi;݈DFٌD|>̂.fʛGȞSYS<S [fg@tP}RІ?Z`$lFm_eP%g~vp:<Ƀ.3;Eo1
䘛+..UZ[/.(.>,ehRxܙ3g%K,.Z@*C\:\NX,..PjKV:f.q..^esg>(廹M~@~v+`NRg/д2շܨ-b=ȖmM@&NIQ^E97%=s)Zl,hlLkkiHk\**jkH/j(E=]=/."'X;ebU'_D~U7~O	?K|y20 )ByzlC	WTLf~ekFEu&7Z9(ӥRSs6*g6}iv2bpQtWw=5'X߱c.y W:Kjo ӎ	e@ulC:/`8@j_k3:P.~
<2Ӥ<w86ЋvJ&j<=SĊg[nI8k*JSe^dR{e~0퍞x̭l\!S\rxnc}\8qqvzJ b-gt(v-v,"nJ.6L5\ɥk	ƔŁY[v,u,"uaF+!uWh*Aw8<>WB톢eE$2$/<:ϝ2d2حwz^7~ 7Ut5e#9N٤jl4Ng0Cއzɑl/^jTs;5˪;t#x2-e-敬 }sF;üa9a=C"K6pQcNQLHsrO䣨wA(AVYG~[[XSp|(iIh,/,/4ΥLtOl[@QƎ颁ƶŜeCIl[lOr]ay81[ĝ'_?| ytiw?g=zui	j=z$G0u振@j7n%N5HL&T7#d='̇#`7Zl%XJ0¼MŐt	䰩8\*@Z'*>B(t5o-nETlo!//_\ul	jS&P,,{~p8p|A/!!-"zAa.aبxvau=XkW1Hc#R]饹grJB}@ƮZ[B"FJq?e9JZ=;|L6
yFɖ[ź_(!P2NY?Oo\ *v%GswbqÏېTp7rB>fGePtWу-?W큍ɪ^Fw]:dW#4KotzQuDj!S_MY^Vv*1PWH`.q&Z˞K7!8mns:Kf2!OW!Vs%*oc]#(  514shH'kG$<xLilCB%SC>sKtVPGQ,bwY":Ճ[9YsȤJmh#*mpIm(_
<-ͱ(_=âܛy'ɣGևXRe[Xse4F	gR 63jDA_:HNO>@G?d8*PAرAΞBd-#}#~
Cw=f>@Oy~'X5
Zdg\
qg	d+30r[) sbE.~R_AS0wܼCB3P̱v+BOep_Vp	"i,`L~uʖ>ViZ{3rJ-O<qeq~|;B,s"@r<(7'9ZD䠧-Q] v#.Ŕu;	YfLeM@̫6޺xQ6wɎ`&sVEVtyȀ,=JKl=F5/g1ɴYdV1L"b*t(o+h@432PP:#; LSu#od+eT$\'rs"FEoH]eK+`}9Bp;ġlZl[nٶ~s9	X9ضqa`VQxp``Q'mq(mJ[@xƶņ境msEEү@)}B/ɓۗ?> "hW*]#=u=N[Nfը7'8&;vԩV[IIz[;$oDrAT
c.~ښY^*h8<x.Ф Kiry|^Sz*DL=eZxpJ'KqZ1G<A 3i"25R-H17-I¸l/ܨP̕rFP6?94k/pɒV(629dK̛Fxxju(J::PCishTs#0ڼTY$#1c2P/@%ixxP_8X#W32֓TnU Zԉ7/Y^sJ8PV(ZRC{}.w"ipS~Ypz:mF%1r9YWGU[>1jmNwMhhaIS˲C:bR͙z{fh2zE?q]iYeB sU֣o$0`[%ҳ}0+x*	5h&G~K\p*4g5۲M~Qjo8X&QΦ-,5.FYj@U<q0*=5"à(4PN\Ž
.ۉp9ǟ=Hy:Ŋ@@fReŷo9[Q]`7"V~0Y"tI::!8aW (|/}\ZoM'<K% ^yDhB:$g5Y"+Yxy!lX:0!,YLy1,G	:1PƩJ2MNF!aF`}Ƀ0WD62'|k6x2uW~|0S¶	zXWؔ#ƔcSJE$FG{
Q&`HȴƻH[F"kbn70W5QFF."YF&@4~m޻yoŰ_Ջ&ڝI \GL9~1О@Bs8m Qy{&q&;YnʼӞerllsUPZ@	K"ʆGp.r(|0Z"ajF
%~1Bgc.3 q seţ6?~mZ5Okme~<qkJ)2w
.Nx~RBXJCǐ9O?|jD\s 1ht!?,T9=>
.[o]yCo=N|-;@p;V)?xBrrA&g:|CYȼpePLnEβ9KmCL@,4d"Vs?+|X:8X#3P/j_rE(rx悓VKJ<'6?v?s}KI$R=[(H
mtNJF\1C|ŷ`wEhnxL2ѷ8:oAFlnAB@(FL%7^Ő}:{~8P@c4d2ᬷ-yF-ߞi/9RX&\3y5IYǭ_M[-I_s`$0):AXIdZ"\9ˊ'-K+[s)tB֍?_=åPdQbHibz!J6| Ǐ?HV״2
.q;49}c:/SKkk=ɐT<L)3f#sՊAK9ʯ+G\[<0f$lH_@nE2u6G9ݨ7Xfs(P![V,{#EmmK╦f҅e(6J(JR mmE&c"
z4r+MᎿM2+ʶFǇ~ml(v/l>+xdKD2IEHVR`VYo9}Ç|գxiā+؝ODW޷8+}%Lہ/Z'@t0=C=H՜cV z}憳P~vk_4˼40^u6y-*i*Y.~EQA[$QQO=?"^-D5-2PA<䮶NTPDTƍP&mWyk6#YLq1WGJQcNZrXYk׷,i5sHnDr+p3`/Zde\-!NB"9Hoh6^DN;[;]TDT#/֍Xje̙YzЦ).w!fm|j+fX磀8.3\mlVI˖Zh#eKj"R"Y;JK\qEcrWkO޵`: ml|[ 8ݯ5q ϔgz 2u]׻|o]Tu.sh(܅hQ~i9kTgQjTÖ6Ֆgy2CvYC.3iŚs61iK\30q<9~m\j֠.NSҬO8-2DnwDANŠiBgz*uP"͙|ɞ7b*a=qf^L'UW>jdeAi/CV63/ݤοʚD052!mܼs%_Wȟ&qes6RUFP~Eƴ(dys&tO-32VuL{Oz~i;ÁK
u`}Ta1裏sǎ\|.?!;:g:3v(t	lhԧӑE5dUq\&xRRS._u(?^J%P[`Wm`٥Ӛ0t!nh{QQQ!nY yyYqms\QYr)ql\_0KIG)(/\W>~9=
2Rql	e0u:=m/񵺺YpV~Ҧ?^Q$s]>8}5TE.VK͡ǲ=9f6:ͦZMOA"/23Qݓ?;%N?QMwlTpl!B(fZ=8GW~_y#DLu,`;IBدm{]DٿK7yNಜo%l'0Y>.dɌ27vKތ3/rX68tLTc{\x奰f@ohmrz[TS݋QU0/ؑe&$8zIm.0g]6S0X
 ɶDȦ|
H@#"+c2b!Wj(ZжQ,Oнqu8A?~o*msR#ojWc
4>yÁN{> Ju3]"mJr/hawإw%zts2&Bǘ#s \Ώ>?w0Fsv4T
7]w(iCQKEKkNMg)?qd#,%WV`NkMW[X eƈULA@{]/A\Y Cׅ/l\.\ݯ훞Io777 ~I'̵S%=|_'NAU{9wy)HPYb>
r5ȇn9{5ukF/Gy4C{邻2{_X_`rV@;BLCvK=?ݏZY}뭷<wQv琵&6K|$bՙ"VG`q-3bDD>b\iIǈ`}~ bKIU,J\g>9lCVYZsyxRLw9Y	F+d].9~9z֠t@m(N. j P^Cz9@ݭ[KS
Q[s	;arg+|4dy#v;2&neQ	 _o'eZi
	~%&ZB+#"*?E׈PCS\w#V̈5s/a(r@j~q(([nF9얲f{*w?]	I32vx.###"8$U
xRMMZp.#/\jW so9, HK{{ ګo3P]Ϧ{71~zx#g9L+DPd2Xb"V!HlxFH)3bM	4"o1⩂eJ'ωM/YrmyIXJX zss!mA8#GYhS u]y{{wkaDDu qG{~w A>޹5vą HpMx5׀@gq~C(w>Qqh|[%e}Ցjg4T#5UB{&^
hpX<|}q)W'D<夈opw≜RL!ɚO\Z!&itq{:.R
A&	EZLE'ͧ)LrL{M3C~}w띩n^x򭩉	olj2mS(4&3߈@e`"ǝ?B,Fn!eU\2/9঳uvzf79H3d2sp-F#DGEGuqEK揍^mG"VR%GO7'#(鷈_hE&Y@0lK	0_+ta|--׎*hm)"e/̔)J'*}tû_HS [d5Hj	sBͼcfSPvyyll
2$MuևctW	Mi;
 Qs#qy 'RPk5t;GP(+a2x3 tNQ]d6ee&Y٫+h]6}W7ݸOLɄ磀3<S^:$OEREGK` ݞnb틷%`2:pXpH4wտ_
(B"I
4qP¸Xւnk6r{~nW%s
}(mn@!'Gi
/^u}u0ODcׯ݄s\ _sNqdޡ)T9l&Dx=NX,;G읰PC-VM&ݜwLj㗧vweȹ֨().Uɫ8%vtlKgppdˏ\8ӃJ>_ru}y2H{i4Wܦm<ȔD	c/Y?K?gUfn
 '22,˺ƴ6*	)qY'$.r K|7ǧ1Z>C.oū®1)TQmLɿ6Fh:cLp:Jmtiסxre9H癌G6%K]1 FJ>B~Qѫ\wMB
Қ(1۶q
%.tx[9{N{aզ(v]b;D+ʓ'
k \QXG.y{	I=y	kyO>dK\tE/ (nJz^ZꭟYh:f<U:SB6HE:K+WӁєOR:˞ʰ;-&GSSY/QC-eKU^&]/1WAU$gyTXC6s@(UU;&{^s3\+1ܾ7C	s~y{׋ nOLF@Wg㛉'ZN1uwx#ziGK,i*j5BH2xg1\RFNo)ߥo/8%/%m]RqxCH)ukaCyE^{QJt]-}t\߅jˆB/iMm!IT76-szB|ʟ
`4ڭy9v0m_;<&ݜ靺E:8%z?P探GM莜bjtl`OS!̈́3	fSW t<z&euYLHu|I2a+Xq*eJJDV2p2n$;w|ORz2z D+kUL㬗BC)asl9W eH,A%O\lN"9_s@M]MhB̍nc8{[;ݾw0/71{_ΡwnfiT'܃^Fۅƨ1_$	KiE\9mYNԬw])W+2\$9PJUjA2`ůl)H,rf&i&>
l34p{
Q\Ir\VgiZax1kȹkbNAtrı^9{eo޻=ݻG<7C+31ܗwL;|0n*|;7gns$8'0aII-	jVmUG؊0R;ݰ][I:I)lS*RRfp+`)%kJi;x.ZN)k/䞄++%{1s7\nLNMxn˳֔3 F"/_bB,2]U9{1`s|{Xq֓lK~g%(Z,wsjcܑ7Jԩz%TX;QCڐ	3҉6JlsFSZd  &]K)] CGR
:<uy  +%/9bݚ/ꥈxr[I/y
x^~[nz2s2
=d)A$wā9>'ݻu^[;9;x;wܹ {[:P3	3B3˻=FA*PڞozHk-|iGz_9jKw2P&2Z)ڄ!a *3D֓ F|F:;Rn/'CR{Q^hhѳ\Pڄ`[D֭Wq$\%H##Z_ ^S&s׮|3./0w˽[ K	 S޻:Nܙ܅wshET;홊zdtX,\. ,n?$8ѱwz<BC艟""z3K2
48]ÁuDF$DtX!{eRoZHi1̽BjK
]nbLŢ0★=lNvYrJAr)f}
ݻcMk^`n0wx63V? sdCs07zR
MYL'Gg2XԦh2{/]q.K<9ΉHDvHK%V\jm/EAmi¡='V6Pă"gY#MXh(QHva,uu-	Wȡ**bG(Hed7c_\s vۙ|Mm.fLG΂Q#+HdJ&*zaݻ`0dcTwǟ80nNMdK6 ݃|gl,7C47G\7\t&#	0fQVS;rmu˫ZbU`lF@&fŦH15枵g(gA)hVNEQ0&E)V<@>-7w/4Ҷ0C?J(ֈ^cGt s+r^ԥ,_s/T}a|m_4oN6HJ=[#eAbRJ\>%ɺaK\ܭ1\wzܹ}}80{0wx;]]G	RZ	^> d<a9qhv-ɖFx*8hxH"|sQvysNcP+\K[.u-4)ӓWzLֵM6Z5mumEMuEʎ3smU
eiѼtvrra0mЪ\K''Eg'';9,u_Y*YPZKζ(W۔iu%5®ƮmsuuKƞEM֕6( zY0q%jI\AU/^.߮96 MpblU
;00%[]ya[t?<l_\b*KWdUҽs l;wz{[2WQLâ1P7e)Ӡ&C#$
hY lGaN
n
\Npl.m`qgvcIS(5]m%9uʎҞJ尦XS4V077WTjXT6MNk֢%KFy`nԊu-)umM+]M&s%%_r>\Yڱ\Sz ?X7۶3TWWre>htzV1_W2@4LiJ'9LYw1K@pQ̀uK7&Z~:fB+uI	2G$ /fZ	G/\;ĊwZ<X3e<1Ns߻3so|s܎))![w;zX. nw
&IȓFa42@qF5&9,cǍwA26GNx0 TLi4˳]ɮYa)-niinU0W6{evLT2093\88(v\9V:0xDehlO0 ,hJ'XX^880wpTٰP4ZT,k`pvjk[NuΎN/+'{K
f{Fd˒RUWhWDlz<'zهsMFуd[ONm/-@&\nd,Gy;8B5&2)Oթfepf6-Y#^e1w9gibRB"hU(dQC&M>pA)YXL^4hsZ5hA6h(r4%bn6`xCfA33P]mK;i.R4@@NIbYaXۖf5MR MNNt&`ǲGI[GG@ZZOB[ZcXfI9َyRxIGCQRGun.~ 4+"qc ^i5\trm۾5(|ZL{k.LsS6=`һ[Q ࡉ\ԭ[Oe9njG
*fY˗oPg֧BD.;N y.0f輆sun"Sͧ,Z\Qsx,doi4 '+&@%=K4V
T854֦pyu![XZh|]kCvi@dA"[
{QV L	q*X-J[J<{nO@{<WҢWia0ÀWc()RIt0e8J6*._n`|B߬WAmfGZ`A1R-F`!ҋsIzĐK8ִkmGH~%hՈ<R K/(z	7i+@VzpXDr~)?Kz+/Q6lU6m
#"[Hd`\VCbh-c}P2T[1tzn|9	z>hQRI4,ńCVNs's	U}-9h$N
|Q2AA7>+(5AWXbA~E)I>Ztʐ/-幗C#$)F=2[-ek| ra S+<vd˟s Fx^Oo$_^/Ɓ;jEqQST=(g8R@v2_V	9Idhh6zrV?B_׹g?d4Jv:iMl_ t0_#ޙ9Ռ),e&)~9Ցc`;.Ǚ|^6Dxs*I]&A)ßw9w39Ü[U>;>]`N"\#/X>:Ģl<aU_#"e+,شκ_uGs ̽Y^Zտp~n<}BGO e& Ȼ0;RũSpթ^-];oCng'BS)ŀþE?"d__Ja۸:\- SToL(<צ2o ̭K>0_|ylESoqxGBRGQ`䯻xP7EDpJ3R`DW|.##s똁n'ÿ<fWWC/ୗ2C6yCm\=Ij
y.B\
	c+"%)X;M=ϭ+ sGUTV}P19zzS}ёFaU3sp<!`.K/
+nxEcgf!t ] \2yG
Chĳp5\zaH7~h{ke<(^bh)${%Yqe-,Pؙvz9y5
jWeǦ?I@ J	(e'K T.yM:|dQ؁DE$K :3K9	s{9af3dΥ6Tv(

K{
KhT8p;4"04xjW\p%"T~E#^P02½܋F_ JBRcVx[ mSXzlZEVwu1VcQҵ2]H/@<	R\G=lSh_ǡ!\&ҫөt=9;ÜSD;c<'LM6/.Z-X.L"Pqֺ.T3\pK(hcI#0	5Kko./r0\6y޸XP(NH2kD=J89#9tZR,~X'p݇1# ~YU>:xn)`J/Qάq	!0ѥ𦥅ٮmMg5U!]:?Aܐ#CN WU@&q%:i0ʳbnu};s!N^3Y/W#7P̜	pz,Dso#`;V .R2lTs-ݜ~"
E]K%K]us+ME+.Tj7{E0F0PN]jܴItmu\8c:	oܺ廋!8]^:)V'n9Ȝl"en,0z9>ǇјKc;?9אN#rfUkdU)KL	|?[-=|.8p!us)"gg+
	E#܃xZK߀+=?xQ`7<:Prne=Ksۿǜ8
O;;heP2ܵR;ޱ\x睱w/fA-||uNs	<+\"7"υ|ܐaenu僭֕O)"}R
W
_WB#1Ѕt\]@fN迺q*]p3ʖW'9ߐo		.tpU(]u b6$ZZ9ѩNO71cf/`P1ӚhW2s?dfr5)	JJK80k$~5\X>"7W<ߚ+9Z#WrZWq 8J+F^n,dQc~Eg]_<{0(!,Px0H甽8yx'x8aqß|ȃO;F560wU#S܉BJ0G0W%{rJ]a䆮箼XsCs>$wˊ_º'̽"H"/ޫA(n=0&^n;J*~neh jxRu `8:qK;A=w2PI<s3]c(]Q=K>y /VIgu9| 	U9_ =^btsW@h8B!Uv%\"ns@u`ClwR\S|qpRNx(0>uPdV×Ga@39X/{|ya 3Bv.@ 9:jNQc
아)#փ`࿀
qbf;lI0xmpW}WM2{'a?@!%[@SW)9D,BVLvBkw o\~Uz#$/*ȖIp'G	ʧ2XE83l-Bk-+cj)hr~]!R"h?|BpވBqeܢ__b_imd5],E/bN_2N `M_LHE(g(VާP"+ot{_}{Uw1JB'%<޼Ym|<uA9raN>\"gJ)9D0ܼ܇HfK3"U]k0tM0۽Zmٹ|YSiU
,Bn'x24xjJSiW^;榛NuJ?ϦJIM]MWbNj4wkglu,t,/ܘ=Fea4kJY)ӧ[QOƦev+OrOR!5˛$trvKX3:xc綇+c$J6| b[tr2&2ĩF!\۳'>>6>~O]{ cWLB.
HR/MvgĤbbT	NcӮ17*oJqOu"3|ʪ<u_eeMeK^zmUtcmM1Q|>/T-͙}~dqhMes_vN1qy}XKN>Tշ'6&699111d%y2dkqq%W7nO1ƨɤW>6x2񴨏 H#x&IF\Zr쫯&'<]s
ܵ7x=]nȆ:Kÿd:Xlv˭b?1
// wТQ8
{ x^i@A+uH9Lxs#&#8]Kn6vŜ:YT;vH*+cw'E]vofr2t1s8̬1ZSSl:_kyY)yӵyU5}@^K8j*/qOrr4檖Ԃ}U+耺ēC'%'L#dKU>#6=TIJa	񧚾LXy #K=Cq^_1HoFYNS tz^T:R6mD](8;.+XsA#@qcO@u@^g^Β"s! wfȐTܽ'4Cy7[bv`"۹3&-5}Z;OLj+lλqxLC׾=`9 +Qz6|fxtqh34Zi*oΪm9g@&Svs_f_f1+/|v~VΪNWU>̱N%8:}7Pߍo$a3|-6Yy-)a$ǪTC4bM	rZ<5}&&PyrĢQ&R{MÇl湲?6&a@@&wTMp-|a簯Q훾y_v~
|._:g#6F--];9~jw<l&f\w5W-,dݱKb$1]N<b:8\UXSXXU 2F<[ջFl)/dV	t٦luf^VV^n狳kׁyΟg~y7*%',зW'cUdy < Ǐ>f[PM {ߐhPGGP;a/C..97 mi@j؅<	_J{m..mg<ȖߙJaEK0w|ݿB˗?\X Z.2[K?S"#$H={vrl#{&"LDږy>lWLb":<
,^<W&ΑR\U9l29m(bJ1M(Δկ6eA˶A`3eavHO>}/WaV\`sy૪i3	ztUMsz~\	d2T=CyɜPL]bӕ5}:(x.<!r7qJ#ԥrb%D3 cۭg<o2gfeffE,tl{AU랹
],[
A|e@r	W]?Tԇ9!#@S`91IN^ٸ'YCOiv
zٞ*ؤ8d']#qV:sxpҰ/gb_O1&Ezv6v<dHT	yf2yF(d@1bSR} 1`U$GPԪ*%1b^=yC)5bc1269..Tcd9psdBQRkBY ")rL(GkVOLOOT*U,lUӕB
;EsM2KOp.-FǑVm] J>P.ǿ_çw[l#dʬ֑Y ;O*+[ypAeFx22Б$qV
&Nz2.՘Wcv&1C8O)--Yڳ1}-={
^O
c<T=GyKT^B~;S 'cV3kjJ'./v遅Z  .)*0xI۟w4Cf@f&Bixa՘dWaTC16TL`EYN`<Qs)qoZd+`6#̘?9\&)],[VvD\zK߹8)ۙ*KL7XE;=Ө.H;HʀmQ$^x&O|=B_(5_~oGKĂy>n">U51`oΎL$͍8cS]9v2P%2XbnXbv 7t 7~.w@#yxԩ&a#H5c: ABF	@CaNƤ^k?.N}UAWI.:clrU*Lɪj;_	0y4@܎l7YA#cdYDĥWܕQF#ퟙ8)iMo 5&15.&)I0K=ٌ^$^JLLIIUY=*Rђ #Fj> 	]?t?/|w9͔q9eLV.KΘA$W>6\hm۽?y\,3v+!~~|mIKe1+G$ܹս.Tc:'0ĴP]*zkMOԴBCkɞd;n9\?ܫ1@ӫvÇOgVןoN(/Q!~UvC 'q]qTΩV
M2Y*[yƔTU,a,ˀ.UY=	Zu#VK<+	wlLQuOVZ$9=bՀBǵ\G}=!`BM1s"℅
.}_94
@C,Utrԃ\*MZ07\N&Rcyr'$rs
]9ޱp9UpPxn.z_j@
̪gH^X_G@psBcCcԩ	n@Fۍtoؠf$w?*l5y7W@GK>Yϛ/Hbĭ0wTMɓ57^QX'%(Y6/CïNI1^NԓEs9yjtx33SvقgR$mR-g˒XALg'iԦgf׎^Z,6U@r1)b-|1uaS-|yn>d#Ww2kz.,<|ٲ z	ۦU.*)U<q\l\L s?4]*OrC)}t8g=87rS6	~o$[2k'^J".e>$ĥplSyp%w~؟Nq`;uT ta/\d&Im{v7ؿv)\	t1<ѩx*a)oL#5ߗR!>>\	ل8,AK:Gp*;Ό^-v:贽$fɖNÀ	1s!AᮞbW;=14<wݻ	t~zX8~ :wCC杜ssbeoI2IV}ycs2{RSKNҎf$Vbp.Z*ܾ@|T
\{g)2/*o,UV2	㔔2pp|XɑP;ŏ쓕}'	Oh9ͅHyZhYh=ؠ"u*[g~4L~V5T
]t;v%@=cA5A#'sepãT;d&^%aPk#MABc=|AUp}9l)Ŝ:AǏ>~AઇTIJ-a.	pD =vdOzl:@/[hNfeN>@l
?bĥ
?}G4 X278Dr1t)**|.Ky1H`S'/V:5.1]@4ܗw:TO44GBs7QqVHx>
zde#sy`<|Huq{TvZBޒ撴a;w>2>V+0
_LDKq|jjWi9υu rtxhIؙ7::Fxq	בq+祓hغuq}(Ex??C82zl8(H'%yNLg8عۙs!foHW 4ڸc2%;wҫH8W1s4H|'bR?yf|SKa:-	zqRѩ81yZQfyo& `L ̋Uل98^;y*N8>g\@p$bPZ*ku00ݾ<gRiVgb1L(; ex.@ l590asdvvd<!IU;:6 ǈN_mb5"i XXXm}<l}:oᚃ1wC耺khGXW-wx&9N|;d"OT,(a'-*gn_O*{so:܄q8=pIݓJF̖l2gs\%ZRS`J*9y0}C%!.yj:տ?浪]d폣X$Za\$p1Tq^\ؿ#6i׮2d(4AY(/tqIIgqX
}PHyE4F오Z@nxFt)+8zW|I.}uK|q.[\/:H_[]rKcNsWTƏ@ӑ{cfGEs`c\tb$0TDL%$G[Fcyv&&i%*PrlgM¨*(.s:RWUi ,js,Qޗc;~=S8
N>Kw'`̋;icNV5!\DL Tޔ	ЦC UVկʬB<ܲw@,xT<BWY[jU̮b ;q[`+X)B-njl-*§E$}ꝫ_~ymQED_ J.Ǒ,HC5xX;N`oD\&X4cvN41H@3Y
#+
r %~RXkgtGL|$Wk U\ 
~DRq[Pҡ$;̙GS
"QhL2Bɱ[)ܩC8IԦm9ux '	yeD"AUԍeP+崊jj]	Od43QrF<;WJa$ȯQV{@T<9Ҿ!N:]nFYW*56s\I)zݓ~8/.9vm;+m-y	oûu<zx,5VaD&ǝ@yy7yhj'wID XlhB#]-9QG՗?OYW͗.dpzd
:!ITS1e2!L-`Yiq0$bmjIckp$<!drl?wvn9g)LxTxg_(We;TI1;v]s+CA'A=LHV1Ku5a.Oe2s?{}Mh毠^Py$eo!BX2Nmcs؄B rch9f\C$>M7;2	2f̐?%ː6fN3Jd&1<!F>gt 3l-Db-}ݟ;:H:8R?~:?9\4zz><3ur|[d4*hmg{f@:|~=}~.u ]'NK}3Dw^#wkpi7JҖv>f`07 7˱HD"X1g-E?8esC>9X9ϱ-knCSy^M)Gmf>j)5nz恲a5NYAH6sVm 
`NXC{q )D*tlV7IR}g7%-9T%RAD\jhB\xj/'+Sqb9ָ$\g	33(Y=_bn|;X9 Y[מϮN/NoUW'*}\g}ntg?Sn۾s=xicU5\9v7(2y>8㘻q><[uiNwRJU0,8=s%-ڐƿN\2ǖ.]&Q [E3F>Ǟh1안JHL+ޔT,ы4~B_@_,Ti`k'v^7,YQ0)f\rz{ni6٘t}?;`EMVCUY˘oq	7;ӆl%~g?Trgɋ&[щKQldEEVqN#a;4#GaëiQL.0|ѱ) hs/MO~gssi`n}an%\?0w@t񕕕?3udT?s_f&7 |@ߖ-؋zQZ	.'|8ѣe1S;璉IB%%A=8Pw8lkN9PDV}qK1Œ&ԨELbCQ2MJuIԤH<T%Q	jSCC3<}yD1vJ<jxz{v&l L4,CɝK\Ew9#RoxJED1=xU0h4Bb!P<K<t*$9^,:UG/C`u ]gm=ΐX=h_<`tSrqč
W~gqw/z	L{ׯJWҏ~ߧ&Wb˦_x?pjs7_ w'"99~Li251&VMJ @Clf-\u;Xf+*gUFdkSVW9JgyLԩJ-ޮKP%<a.a$g(	n8{p!0|vVgV@a	=ձ^bzhrd=	>l*L`F$ot{jrz[spW>+҃/ZAw^C*yxQ/~16$p5
<вVCyl'lHs^xߞ6r{
i7n|g7B|~fc=P{̞0 :%WPnFZ.Elɂd./Kζcl~;&!3**.ٻ!5끺@6"~i1s 8 n &{Lu%0{	xjdo69CWUFzUyYPŖ<#nUvQ;6)OiAm4C{6P?Kуx%Td+%qӦzscfQ֠{AoWG~{x2t
_~*^ۄo?6n,>L>gM%'NPX.8	P,騽Kkb?*8|8 Rߖ1GvL $>=#rHZ	K:r9&OԌc e^)Fh&hΆIuAaFYkYY;NІ58	dKx51$##dx'Cy	4vd//`tvUkYa42
p-v#-quvs\Ao~;<]B˗gsxƅ͟#Нɮ#ࢉ^x](N%
s,J&n>xp--AO,[%x8cKlnl9SlŨtG慔kD2bRUǵLG2EhaF.`=3w"5'ٔ*7Kʵvd-$&fvs&4(TFhi`2y=s놜2O顑'M"qZi0<HbpAqp#=?I`&V>hj8X͊8wuƎ%͟TQ$44ΏK2s67`_ن_1;4)ud>;	̝=©?x>%&2sj \osm΢`6$gWozIy`g-9}mkyibLqѶ4Q-.G{IwKrLqƧsmJs kjz%il|>$7 NZ:"rZhOWה.cD׭bPk%=ÒI\J%U)bH(vX3c3s&nY?HGdCt.g	'C8
I2< k_n|
Dʇ/f^f?r?贸.M곍Ks?(U&-ZfVRU
%5H/3M:U_C!(Lq5U\'Zƅ{U?ޭT1ak{Orytbi;8T	C.ɒ&s'1	kfDciP6<u/8r-ggËg0qBan|$NqdJ(x!1D=,[;[:{&eetF#cٹX?#([˛>\-̖6ix/	D8r<n`nYռ9!RGRk9A$?o@ʤmZZ[r3VOU?tʨy#a4YN)=mSXx9j]t>{zPo}KĲy%NɊ$}`ħC0MѤ|m?=P6sI*C:XV˥u`cѐHE'6yL%1`1Hac_<{V_zʬ5یV܆{n\CK ?06:_~[~;tVYFrWuVP\j($K["Hz;y$~φ qeqCY,|G[&.x.5==nLl31wpNeWAuetM^M`ft%SqVn4s\:ˇsf)ǻB|<w'|w8Y .%-]Y^W3
|Êj5i.s8oyXÏ, l?s';yrsX|rVzܩ=X|䞕<mϝ~[^|oMY2گߵoذq	aE	߹ᕛh\pa	XsFkr6i8,Yu(W5bU&׵1Cpb=)*]rahYnD}}i:
uD$\Sxb@E掠JK99ŬN'\1;R"+\zBS]>VQqˍJ05__5\S		D#1P>kEl.T70Q"RZ9~qbC(킬no-ZUC?\Ø;yt;s"cX}N-SyĹӓVھNyۆ{P_ioi`Dο:СD?G^6;r|{c0iP=,ry8ϊ,A:SgC?HTf+<Gp3l94̥(z[hߍ¾"\w<wO8T<wuuuL!#7#\iDzDD70uvI͓d&VJMs37f 
=S]*kRS),R25gX'0.R8Y$ˉ4^j9,//	UP\X 09S/*.l=Y!n-z{
0׎{糸yovsW\.~1Z~]}-sh[ 9[ෂ<RpplX2@%2YdUQ1e6͸#3o9dٻN
(-3׫ֆ9Ӆ@4ӓJaBvhn.<1ן3ȑ
&"H)W >E82Z+`NNMw.uy9r MMfQt-hN`~VbsLp)p9BAoI~\M8"t&ѭ zr]8\L.-Y_u{Y޾|\	Q"7;ṋ(\qM{4b&
H-p-3ɮЕ<X-8!9<`nZoǭbUT+ȎMtJ^N<Bb $bsj@+~PiM-^5,~뇫*)_
ݯt8Enh34w";7Qj&t۵ &t#7VQEv35|0EVj]U.=ѩJ'ylOqVAokGƆ* 9
+H{`( :\ެ|Uݕhcÿ BGא_sƿC&t%Kx$Ct-Wҹ򌌑28!$-[|{9hOj28w37sy^Fm+H\W%𭰘00U'	2g.n`SrxI"eK=DP<-ۤx*͈JXt
UUDEIz J˲;JWOuc=]T(<0ehb	:V4'k*0'JY.cINusBRòH$(D<'⻅Ȓ0!X玑zzWTr__5  ސD'gpegaąѝ@nFe%h(R*x;Xʧ(ϡ?ctPyqc~n!7O+7zftdtHcSp#޿yB4ys< s;?8;t>l8I֋yC`e&|ux䣈KHq=x'T##0(BakRTH-Bq Q<*0R)oСhH@tKMzOjC~%ݕۅey^N>r4=>55ˢNO F)JIԧdZ)'hPHvrF ahPy]S9Y-\*M]_	C*X`=߬oS
m1!09]T xYydN	t{l6pYg45=,9c3Q7<Q2y_gpF˙,1aI๽kZ漁ǝ'ԝ?Snanc9Xi	FWӀp$7/ bxXMq),!lBFعN[EtG_U#*kzuxЧz?6U	Ϟؙ}z$ŖTLxneɝֈT	@v02kUK3+"oО#ճCc2bru0@0^3!W,17aȍg0F-<;
Au:`L	4%|]v~p>ʍL)ʂ~a#/j`<ߡIU-w;q卩>q0a k9.Y$r3+frvdOUR!@.H2wvL˵čwiNtRxZSME-R-D$5 0p*9E܅:0T_\x0}?}xO<4N1orTJEzFGU #4`/txыr57[$59`GslـC[=;RX\ƕިiB!x#JHv:9SHf;qREXx|n.eAsWp?]Y7ΜWB4Ǩ&!l~_7a8=s&+0:3<g
sgԱm==a4:0QB.CXp@@wB.I{c)B^!JQ̈ɒ U$U,b5J=S?"t|*C@n=TOOwȮwQ%lRTEPڐaKS5@:XsAOHh6FСT	2e2pzCYw#G*Xr7/'z*ieB&10QY@kn5W0OxPQi*c|kΌ-dy^5= >5sם(>矏|o:k<z5^9%[e;vttwTb[iOPs7BY=2pb.`4R,T:XPzl=")рvڊ
˸ǣK#R8CQ迒>%eW0`<t멮tjc;=4EMd	eIRVJ#F'Uls4+-Yȼө{xcz֖$M)a! ޘ]*QM?}2+4ȊA$ҩDNBItc9:bSXT$tY*gvac 'N_>`m.;v>Y.gP8}/ s._>1G/̰9ޯZaD@!Yl^ʎʡ8;$fQ,&~3MX~H?ӼQ"t$pC\gCqR:B :x.
JB1@3ɥ<w)up!)-btNXUK	tQÜJ;I"G0G$)x2s:xW\$zW7\=Unҍmb^Q|ej0@z\ףHYX<!#(CsD7O2_G؆,u(?<Ӈ$Q˛
M	6Vzah**Z|r?{>L6HA{a6qPsן̄Jdu=m?N_굫v׾v/o+|W/_+koڸ\6%1`wchXYȱO-bݕ}뛛h%P+	+1RR:fQL F&^9u.IM-*`#@I[*{(կRA9!>4IētDE&ђ$5La-m6=seMpb;6<ᗬe=FXdc>.&hV`"J1`,IPgug8:/.dB=4C]T\.͂箻²ĊK͚r8}BEҧjo/ZiUEi-&.4<ԺH}wisHFN1mj!'	('y^}ɏ>ho?b5~׾uQܕ_v.q5=~6Tx0'\}qd}"Gh=OvLoTCrc()nS)t" bBJDª@R<T"֤-;$a$x~TX#ti]CqP[:DIxaI ī'Ntp;7 'P{5YRUNh+Y8{%\u7կ229Nwl%DNrzT#2@GF3.[&,~ bYE ΋YhҀ܂k(i5'cC=rilWV#eviWRei"88Ss{b߉X	Vjfж%uݹ=[~03q1w+~-+~^o2EKsu9Hp^{.ߒJhlWFmp,znj=ͺD9
/*Q3_1 %X5sWRYTKMRHi
  A0ehC2~@+}J<k<	miƣh3B"E;w
InAU,"VA.-R!tkM;*닋MS	xldwdG FrLUR3any /"L!B3EXr $pKS!W)I1XZ:s;(9^}DdJzlzk*wr=ϙy'&4zkq/m}8[Xwro.Ѻ+WlgڧW#`駟~Us澼GW._+Wrgq u-sLܧzV;sTucZ3ttL+?2V]Ȫ.1L:wP<J8JbMZ<yTTJzJ0lMi^$r{B-b]~ZSܰ̨B*Ycqq\kIr"$\n:"S@L-99܄2P܎U_v6ū6lx
̬[AsdJ$Xy./$꽈:h\veNqil2d_?YuzBH VHn_iUj&*m_w[^wi\ڏ3bΘ/uVD×^<+h,q\Aըj^b'%!u֭+W	C߂@u ex3ܼ lrg1s柴b.5`=D+=;VVvwxhDՏt/"KN̞|a /5z}FGAqoTo|I㒄55|ˏ!zRd]
LZVJ:+!2LI2n:5* \u6_F\M6ccKmGyTVB-~`NaHYitG*τ8+fHwRC',T:u޺cQxnނY\ޢEg/N+vEA(vuߖμ+Tyo3Ҹ?I.tKm}sLGb1̽s
tr|Vn/mKjq:sjB7 _/A};tw3bƖ99nao֡]*iNrڊq#u4_ݾJz>4Ȫ0"E/z`Nt_H\rʅ6-%"׏Xw)م0Lo<R16OJp $ȹ 2rε"+ye$3F<wP\	;Өh3Bh*+?Vɵ卄5AsuB#4x 4Kܽ<7od-;,sS6=iOC>]t~$-*a'ݭdYdKh*)i )tH(Ѧ2K{0'9mҶx`Ng.(e aqǯ~5+\p?>sc~1=Gz,vD	smvG]I64\ل2JSsGeUp Gr86d 7?U0	ښ͠V4oQuPjIV6"P^YaE1h{R77?9|EY)R`xtr)u2eYERZXWA93̇VJo,.4hFP@ZLolĘ.yB94pYЃHs瞛^DrkEKs\*0lWk?qk?r?YwTTwL"&(IٯB opI?e~|
F\KCK4,jĿsEEu"fS[(+fc1XE=b1A/UuUD{VT:Z퍻$?ڠI6/S6]2R<c!2]c) s(2(v"$qApomʶLM3ǞG6t_p(S;ԏK<dQbTr̍U*1fU͖ح[+Ĝa~bJvde_?Y=|Ua;p;1>#NT(Mn*{/^:9E5̩uJ]kKvY\gW<?7ϳzW#~EghʐŔid[T3['On31Oggĩ/(}a.,zd)v].77臲L@J(s+$wżb9i{3mH%gʾhDadUԟcCx=2闵 sΰgh*Sj)i]kvpѺq)pa-@'n[rJI,N:\B|T,KǩʩR *GdvpiQh82bI||vh#RdmU9V.Z5.q
M-jl+_8:&
6!u֨y9|{!r9XsKX3,tւ1w!6M*n~wԚ/|to_Ąu}*X+uS>w"C+dϝ?ѹnߝwJ$w~]G>ͽ׉NCR;j	se'K?m`n],4| =S8O>+;O<nIzͻatlFLlc0mX
5Aלah0F%uy~ISQq?@tqV`2H*Z
s$ OC%K/%]v)ԑfj.EwNI9PpɪYxq3ME).AlcyK_qå,&9#="4/_G9it9#N׬<?YcqKdt{{oKR:AvJjm$rx8.ܞ	ﭨP
+4ۇia7{pv7:|Owܟ'޹3{nq1ݸ191DP4}|5W?۶qU^ۆrQy
7'؏t̏Ɩ+1;O.ٱ%Öভ`Pvϋ/sKzXO>1Mᣍ-GERGFT{h~*TT,
n-F1-c1sPN"t;0YT\rt:Hϭ(\?)JN{ @Rm,Q4Yʖ}BcO[0Է0Mx2<zM7Ly3;cEVC_tDfU;=m>7I}͂ō|nsK~@GӀeh=îdabp2TۡMkG.]#3T^ז&.&oJ\wg_7ɡwj}J;	M{''>*p!9tjۇo^m'H)sۢSSDj{?ul>c0wt1_/	t&23A4㈣`%d
L0ͨo.\:L8t_}X?
16AJ]Xr`eu/^#pTRs%WPBDNgt Ҙ*!}id!sk>2%BHcS:79%B_Y>VBBSdjrتɖaBM Ǳ3L
LldbMoY^yCeY3sr2gKm9c'=Msd
暐,^/Doj\ZMJ;DDCЧZݍO'̑'8"qæ_Y]Ku;4lܰka@쎁;nݜ;{w' 7ܕhmm%̅S/]}clQkFm<n=5N\WslțcWPz{8@	q3AguXbKXQTfMvrXf;Qx	s3 WL#1ՍОǑLBgkYˢ,Q)兢-;u~TD'x~l ;Q9[AlZ2]v+Nn c/2VkyQPI97V9'#:,RIIUL6"@ђ$mzx 7E0)hrkJ39\sYhpUU쉋TIn7/sf8-,|ֲ?_b-psC9	W֡{<T2~;sl=ئ[giQ,i줳?p309]p-Xҷͭ7&q2%J^lܜK5&N!!DQ?Ʊؚpڵ]>7hx?]:_~xӧO&*axWx&uO=y/= S;g&sKsi"yx6M,KyWBZWҵr Cm4:V~&S5]r^P` jJ)] UCtiٝ[V#a@QeF_ECr{Ur|8G<g56aF/~
!♆d$=Hi1<rfo{65-hL**oQWO͑#J!^$gQvK<	'ffuSIfŖ_#)_܁nAmRIGbn~yWzmRTNwOM_xS'o*EV[HΩys;ݍ;/~qw6ٳKK66N2Wjc\h˖ePXHˋdRӂq2uus/+,_>itOD4Gb3|.r"[i9%xKh^c(I"uU6ׂ낄#Z] %V}-i2X{S{ bJ\rTD,ACo^]ս@	>7qj`9/; BtSd))RrjMy##:*V
v+a@p0,)x,sHȑy37ےRVݎi,V-̜UK qe.D3ȑCF'-0nd.:WjK6ͳ#䱅5iʷ5ZvΕ_m֎W'Sr.~x#ՅonanYkڌ#wݹۑӳ;.]᡻;{(<
ׄ%/v|PV)~-zA*CPԁEUo_ÜZ>9tO>m0=9#PV,I,9|:t!:,*M;e0Pu?x
ĀB]ନAE7yXժ!9TAoV9!.^XO2vGQ-lձ/5us،fLC|a5?"`c<11|Qr9!>lDЀ˝Nz0rN=zz?yVp=lZ}dLs}iOKC`P}w~"\t9|7/7F\.}W{[B{;Xwkw3H;wv%wl
k<y⹗FEU|(G%5/W[z<P>Wӹ_fnp9=sِɜyC:kz1䘘+$=b6lw__O__PW-qYQ>V<rhM
ax|EB5UUeVXF2?Mn/!TEtFA ØJFy\1g89ݤ9 s	;Pd ȚrZL9 |/lUI4w h
I<;V01
(#; 12̙[bĖBѷeIz^ids6gC?cR{<.:nI{a=POD9aAH:f4S?z_w7*^uPff>.OzݲMe_n>9kvu_7ݹ;{xCdq68LhÍf{!ylٽar*D{+\IhGCuoȡ3\=	/y"_(DdE>VwI#pӍ8PݬoڋK#:BэcZ}vb6NO0"%"<9A
3DZ-E %BI4ZUOXb{)cGlIMQx ):Ę`OԜ}7HY6[$b Zu;0=cMWȱpHb$W\ETi1y:K+3xg	]*Gr^ƙ{t~)pVOu&
"K3S)}];]+}	eŋ(՟|0S7?M/ݵ5"f{\z!؊v֘ܬDRwNlƻ[pFŀ9ZVҹݡdI5a-dN/]P`_ Q SD;:Q.iO9qACw^IC# W	39UnoԗhytDlWFF<Hf6A(ܴh(ߩ(̷^E&xn"
)	TtQE
ҠJjAA2ifWfHP:-nFY<XOX	I\ea1Vyݘf^D0mn0WNMs`FG,cga9uyDw7쇥iJ^R
=AMeX8iǹl\rn=@noj"jx/G/\qI]|P7mt861j;۷YV~ݷ廯v5'seiF`ݡ/fք"(tzBw^CJP#{4[[đy@n<Ϻu_fO8t;7WDli3ƅXksʾ澾ھf!un{Qr-	t/eƌ5mY"_86&;C )E*;BLNRT)R' J"	JT䛄6`TJ	q.4@B R҉fTs-ҀdZ+!ht%)&:^[D`N{-t*{].TlBw#ٺqFdI	^Bɥ	:؛r`Z:e1,SbN=vقU̠G96<HezMw}u{Gnr{OlJ8ZWvܬ/7g~*%	UO}R| eGP
אM:۵kܟڕlu%{ñׇ滉m`(D$n50CSu2':Q[Yf'x*ʽ˧;+KmɲLBGry<_ĮpGK,QCA}ھʦJ
DCB+*y o\<7r"\h/\Ѩ$~M+\s%;.wHBiFA=pOIDDDe/7":09T%=Yg\GxJxv{^yY^\9x <whgb3AF	gFGA`Fx(΂J.w?Dz=h
4u	f{>%O3qƦ՟,p_a0T6!ٰZY5ɇ7&?<q6.>U黯>+x88B4WpeΆ%JvJ#G^u\Nv$`u"E"^~o4/I!45y^*ZYlRFc1e4P7vh;GqBGqGGCmsBɒ^NZiѡXbB.߸5&h:[JGmss^34ZLcWB)*u6ɮfSFEKU|@ե0m=A	nՎ:;3BIk$~Z|5sٍJx]b
hƱ-M0tU%d3jK\΀47&渹0&"$>όm*>XC4ANdy.iЈ_Jr0W佪;yQ<W?C	I,ws]iE:
Ѧҽ ̅Oz]3/l|WW#p>;ZcU/T-Iq+}1-ctsw]'uww޵!ёC C״oٲv9Jh`XD=XS m5ո4gEGyɿ9rsگʖOg0g9k f&9ah'`ڎ)utuwt448`(/mE<t֍MgqUސ'ǩ$gd{(DAA XC7ϡhmA`lqYD&ݧ)v]Y\I-;Dji0+dj%^R! %UFMqa	Қ JSQcn㘃2ʆSwQ7nUo`,-Zz(B6>k-lւEJ^
9Ey7z@͂k(83OA+xl:禎qpR	c{#u#.\nx¥jjΖ[в
s<
O/+պw|#76ۭɇ'&|A;%zJqs55J,B9Fsv[ȿ$#+TѼγߍkBW?ǖD[O=5l88|KpY'Nүɞf
hjnFDss|"l킶C;h*/2_F:m6O<x'V& W @6VGjU!Sq	0IRAT\(jƃ*aR EA'ȶA0ɚh.[O*M֥r7BtP0r&;h91uRٖMر@ɨ& E,jx!%kP
!l@:Q-\e Pj"5<{,#?p=eW'MEg(EnjxwqE:sߑ a:fMQds)lvȮWJu37;1q#|w{1"JPَ'Y;9PTeW#X0܃Ѷj\m$5bPL 
bCo<'-&rιqкі&Wsf
S
,,b+kx:$ז{zUяϵͥ 3W*l`.,T%(ؽX%uLn-S\ī(~ZfCJ]Q[M9d\<2>ͪwVGPVˆTx@~IuM{i;1]en^E.6xJ3	PH#HoF*sH@t׹,OF	hTl-o=[f/-,KBT.$z}=vjJ\TCgPG-.û/q|sKҚ[ެ7/[?아u^\wN6yV>liWw͛ױS|ssR[fք©;Ujv+ԁB<0:m478w49:߿W	?@''KsLl\	-,
7Ynev=C!P\sM0g@Ǡ7J*ѕZ%3cFW!i^s*
UJR@/5{z>jC凇
TX5SQY)xWQ|M
C+"!.ekwGS)EJ4/ȸ|f8 [\$`.Q,!m⠣Qq@\7X.KZ6 s*8Km}%ZNЩ$_?P8/|1sXhƍ~gua5k+UU[.T޾Y	ckٰ[ Uܚes{/K|DbolMlᙉ?qvt'А&z&^]?u9X>
`!]k~})vը-J8N
I7Ɓ񳱅-Ṃr~Ftvess3bL%77b%KK=	Je% }{-KLa ]+UDbDs4^^K˱R;+	ѷd'UpKj@8|QЬYê^aIqf"]y\κEsQ&j]b]baqJ dPXdR/Qi9<<DeGrM@꘯&q!D,2US;=B+4Q'0?}s<g
9RB?HlӚ:WXVNTC$Z'5[Jlh:G^ȉvW}eUekUomذ0wjKeW𑂉cXĈ>ĔMܽ=4EGGrg:͛7K=;I_7,Jү5U*H PlQgx!=R3ҟ{oƖO=ULyܥކBf1Qiݠ9}57V6n'篦J.YlT>c9n됾FK-$e	uKѴV5h*R:R FAE,ŵ\amU$0GMu>̑"$)75HӨ_ Yؙ4WᙠmL-9eg<՗`?QqO@w3%Bvtv9ad'000H#R'Du^250ln~s,Y@a	B[jugm5@{K+D~{#5j޸|mL1pcn	O/Wpdsr)]߻v`LĝLB;RAs]$[[Q"~&!TE<|˃ol<%>ZƋSoa'ygLBðt~	lK>[e-pܾ}}3胴εЮU
`͌A1է%[j\8FT2 \Ow s:	`d\I0Z$b<pٮMk>\5x72-"QWP=
0^4)i0TM8̘m rtAPm̲X+܂vf BPu6CdFGXU_788Zs&d% j$DFUER9xO<^Bk9M|7| Ydyx΂9+G͕g4͝˫;g1Xp;)X(*q2Z_8hx_|J+oԕn$='<gu4BT8ہwzo77 wiwo{4~Do3Z|m+]k"*TA&\$)s~%oٽ˗bF9_M-?2O̗~eǖkQCW&,,2+	J`7H_ʞ( Dۮ!1mY<CW̅MjlSo+E>drd^F|
 |DϕPP<f[낒%3}gv8"4v1XGB89%Yv;6c3ML:6X<,ONLzb8O sG[4"xpIc㫍wGFz^E	0E'<NȧW[f-s,zBGA~8V?ަ\lYw|{>$voN.m/ʾ9XŨp
$R)Rruޞ?}SZ#^a'O6vO6ХnGj i`P'h#\Bʳ`lڃ[vk"e@zssگ==ssz˜\psÒU̬Ib\:=45#$U.eFu7zKdg
Htt ]ucqf$ 3#sFHP@Quj;ZQ!4^76ɺ)>㦈BJRPq(Is"x 0`@b2	
+(VuCRϗ^a`N(
*5Je0kϹ%B	Ԇ!{@hS0_/<DV1qt?-
Y-`n')vBQg.DQj}5|
2X3kKKg-k/n`C˗DrM* 4?L6jj^mޕ҆(r7jgi(	 85!	PA@
`QZAV *"|Zoժ/~'-oEn;xϐ
cTC!;20BљV֩FFȒ>::_ʏsTq\8U-!--p-)D$OB83WRd[\˃tl^GQSQC/.}bmZs4jn"qQ*'!Ppg?+谄ТDӬv89	1R)DcQc0
%C=5AG%9ʾ7TB,G[+{JQmT|ֽ{jWrzDB +B rR[bv8K @^V%2J"8sL	t"qZ\v9+sU99{D)eLGB֢:5OGg]q.<{iޯo^J\__9\.DgMy[z/8UklvkXHK&[5I-P×huXՠTbڔ)	<;zO'cpKȴprCM[7ÆѬr̯WsoR\ (fW$Zs;\Wբ.t-%8J+l.)GɭLػu;W>pn7`i	rGmQ%Q]pPȜæ!s#]BA
<- Nx`w)QhrCSLf7!v :decsV(T7˶KGN_%<	|%ۣB"aϞc]m;:d|3noǽE`\mP|' S"Xc{/ӬAVKNN0W^kPi2B=WOkvf\Fz{1=ߟ<{r~hvi"Dnΐ\;CUs}wN1I60UTE>:9H0g@b58;uF+KzTyy<c<`b w	KTgoS5n믿BߜY*YWBCp+,n~tOGV0JnO8+s*WP&^@^`1BJ!cv:+9\1"#mNikdtg~!BIo	*&;dpIu*^%rS?1Q]0G#Xa)UTט/#WBi1K<m'u.-i\Ԋ,9_ssTO`jc->w$g`FzjIΞX\Y6m3IebrQHbuy{iw\VD>w$ۣ	8T&'r]~5Q6rğijNg6yiVqΠ Z4< Sǰ*7殨  k%5{7y-OІ0ZI-oPBu.a.\2ii!=d򔠷M:cRKYCubth9M[$ 7+anfnks2,A
PY	I"KR҅N)kRCL*aNimuqGP.N?1]]%uB!_N(x/A.: <%mPrH"	2#zQfOl³j̽yk|a9-9iJypkI4T3xMFGvv>;wgޞ\:6WE0'(1⋐BD0:ww'&Mg]8)t"ܙ!1imi:IU1ZrD৒STRǎebd7
h[}.;U~(lsB,'O%X?"({P:@FBzTq mj)߻ӧms.	x28B"%ԄVjoYkQvZ#&BTUBMTP[:ZHF3ZK-zK,uv*$2ŒfL߯QV#(h8V
u;Sn(gů.`V,Vuog<Gĩw7r΂%'1ee:K9|;ً5Jez:.b	uxLm+>K-:5չ=-cǆct]ZO9=:"-Hw{^ӝ#ӏBs7olU:*t]w7LV5L;!a:V\`#Ia䔦Bsv&9f*ՠJMl-!8$vTp2m ?ffՇ<Or!ٸp5I0UQJ*ϓ[R]$mu9yҦ7A.sDa(^6bTVMAAjgl@n*!i0N<e攠P `e HIα ]j*(tfITьyw7qr<╢m\i۶wmKQKYL:`{n\Wܯ˷dQX;ŵ-rj)WY&y$	{a˫}?e;{r?<xr_l 82
Isܨs׭AyLT0w%ErI2Չwtg@+N(nԪl6\|[^^^27@/X'5fԜOsV
|[9jVy3#:<-4>	pGX%(vZN8zdɌ=yDN$8@
KI$:uȾ} :՘dGy`B̬p)130¢ŕM%ɀ4TЛ=g-K%c#ϵ!g&n丘{IFttێlq%?JE&	"44^>0ILߚa%B_kX\rZy(-9{̭mњl{K{FGHU5zι'O<_}K%Ĵfx3ERItrsV5Ӕiq[rsr4ǐMNVp{rl[o4a0$d2,yn76f866=+ ,^7j:!Go<p:,
9sˈQ,4V,ՅRkF*6ޔa7T`б4Rk,"Jj"-V6dgDՓފ".~,HpEN6TZXƶM Gƴ4p!'ga`N04DOT^!AaccI},m&ws6Z_O76	@43ΚLFR0K]r3^(X='9.qweZ'* vD-yV#r(NM6H_hC3!/6)Jҏ/WB<k^|i=;
'uYYIIQwŨǝAwy}-6r/瓭(r45aD\0+(Ng̼yɄ=Md},QˋlE*G{6yټ30t7ZwN{=/h/.-Efm=>?e舲b~
:GZa"5KC+R:H!VdYs]KZr˱(\ uB{7$#)#8BZd:!OTr͠f~B3076g|D淇US:,Sa-9,
6)_hy[9v7g3)(7)v:QyU	5\CABhTw^"rv'jD'NPN³BT{9!uEEg 9mQ>h/;YˮQUʫ~&8
w[K
5[)&'ul{¦e8~z[W6]y={;3MqԤb({ynTٳRSMz5,8lznkSJl^Y+W=VASiA$-fʦ?a8T릌3փ]a.ʥwvLdشm뺉8kYW--}:s~jLdy!KPH<WMk$5d9Tdpsl㖖˅nOS
0,+J5r[62(GA-3UɜܙA[m(;gkՐ>7cgv f7i0th|/}өAo:BLlk`B]47l1lM䇹X#T掜0Kx}xq!ujE]Βչ9tpkzCis<<+xe3!zq{Kv+X~.7+Ѿ>\QWQq\щo~{ovʽ^+9q}y1y8r]SN-~<zt4efhdf=pXpAPi=N$3o90PfKPtj~M̽*7ek>Q/_s7y7dŐg`l]Wo#,~(pQ-cyqC.DlY9΅,iLJ
;JxVX:X!'ii.T*NFQ
s;_XCmːV8\:mbt2Zf/
`B`QE])Ʒ*5X=~4:M@)--yl"JvP.ArCAqzM!1RvmŮCXUV	%e9]()Ŕ2y܃'؎jJ^GH[qa.@7ǡϬr}ܯVVhV_T;u`}ձޱhlۏ_ӕ^x8}j/ܹt/{2$+/;]yhs A6vN3=toj^J>i!݁U#(ar9[S5etyRgO߿?vuey{WW.,4s)fb/ k7Æ+PVDHbpI9|nE!f%&.@.PrJ%[p4[v(yaV訹{%QXc"Fc4)NaF4֔$x\AT0gK^9]#KCF҅A&H1
_	n%>deeA;폊RUEa(G>)B?b(:6SDL!˔;ٕo.كhX;LB].' |8ٙp2/ͯW(/QXk5dCv(ťں"+4]w=[1=zkAYiEb/'ڣF%p;|;tμhSG;tT~^S:{4#U_6dj&SeYRri(u55VS?}M7Ӭ=7חlCAg326lxF<*?r&	Q(
E9ˤj\K}aZ3h(pm1/	a:nNk[{ZJpP[DXgZu'NX.W1ffKk&KRS;9-Jݱ0Pq35ASV
*TՋ1F厠bڍb}	̉aoWp{8F/TpNW`n7
~xy?oT'<~?oVKyy8o;3̭A'T7WmK=Ó?-weN\MMn=Rxbb($q{x̅ݾ}z	t0EN7ar)c,C~o 
M"({26}{仧|7Cgǿ>ߞܗlYyyVP~R&;[CF2w3h<ӡK"jZG.J9V# \4Vyws\Il^#3H1ϑ9,jQ*e:@GKSH2YB̙Nկ!"OiC@$~Η׃N"9ئzbA6I-,)sHElsRT:$̉9tLW|2zhB!=S$n&XMP|pc/nFQ9D`^;L:,!6!uQ~N
sݺrVo}_A﫣sK=]KM7&Gݙev֪wJ7r"G0w&fכಇ2R7Rw;}6֔acr=m@yVQIuIn8- t`W1|ʦ؟d'h2L`@f=F'ʚafuK4w(񾲐 .<e5J\5<:h\RsRnss	-P]KŶ|f}@Gr::|
	rXZue0a	6q/m(Vp{33TW#B-eX5Qר;Tm==[:dFj))*F2cV%EIvhTloCiڏ<TXr! =)2lRN)rċ͇:f||ehKs<jo=~pQ^Xߒyr-en{QQ[BYWn?)Z,B^+p*si\eٖd}b0̕U~}Y9w?oj8[1'ӄCF~|ӣS`WݗڏVpHkǜmZ-aun\9/Nw5ed)v}=ـL͚9dgL]ӭwIۯdŗ):G\xc<CzD=Ńe(đZ*JRfD"G"c0/m( v00'%PjIoCQk	Cj-) ¬I1O!z
xu:~ĕ)99䅛>X{7wz?6
{M;~tP.s~FzO0'V2̅Fba}/9^fq#б'x95\;)^^s~2\rKX[2e"\kY}Kb&.EK7n,e-e-$pKpgt8.ەX9	sr_9ݜ8{4C~:;z][//..DlyŎv'oey<?R?MOotО|ހNoKvEF?W0WQ8ʣInAɟ
$3AOYUCAjnZ	K8[9Gq.^VbQPtty2mO[Gk1B,#:N=dRCtaeTY,ڤCCV0gtƲ-SjJ"B
G%NAoHH>I|v4kfߡaLgp{]TJpGߎsHd(AC>Oxы;an_@=^ons>_ooz9?֖\_Ͱ.\nr]uG{d9uKK@ [5m@1Fl۳'Ə֌7o<e vL^'/
..kڬ};4eYrs<zޱαqXtS4Mv;|zIϷh<Z.١t˕YXϖ9~) :Gkˍ0F}e{Z;VӷB2\O#?g""eQ1<a.ᬿ8̡˄k0D*
ΞgVpzmkFFXoӁ<Uc)$h͔V[fg!9PΪ9UUr#!T]4ȩ 9&5ψefYV`5>5N9Oy:WUJ
'cKQu<{;E+Cb?:NLtt|VVv|[&(<;q9nVK<6j4GXUQ](qHk:n,xtR}RO腲Rآ(%Z$%$nEwoͻGUgছ>f/Gݙvpox
u9ڊ:NOaio%Mv5A۔r'|Ca7h
4?䧡p-Wyb}7q_[_2Ȑ6$(tX\	%	-hXRa63}/1hIݰ!`	9e2â#FuS!)N#۴PkXYDmTeTл*4`OAt5y:cA"Ӂ:^]U,E"%oI4̓hdd35'ksJO0yD0%S(x @\C9aοE׻x=&(<JBU.kطeOd1E_ϕ/=Q9̭o)tdT	.t`)9RϔLLTҥo߻ڵKҎ^Ns\6.wL:ׯ߹s=,FLP(5kOvCRvkwhschOܣ}i`ȥ[ܺut߾7v)[Ϙ=t9V<Cb_M|O3[*ʲ-7/9a,ŝ B@KG/*t`ZVupI;~$u3m߹\8n{,UaNL#-5,ʊ˵G1Q1׉GxBXڤP0zV6L)Hc&JdK4Q`Vc8*y̱phas"mk(Sq)Հr!pn"h|.nu_Pn&z	tsq~]ʽ։ۂy\!!֯_
P^~mP^\z߬IWP]hQ{׮a{ߟ^ɅVvҵ	ib#_;=i߽}WS7HUVA= QiN!G#yÓYD{´0h{n޹wBG7ݛ\|+^ةkfOK([-V,.eyH&ء s9y1e!)
han ZX|tgK
Q r7?J/xRD{ė0`D]h0"1{"E'	~O5!-@
Lxi0J)!/S]eoR*{Q8~(U_C,9Zl"J:Jd,ogG_uː;|.gj:TQ|g'L?09~Dz
I][-WRr^krJ'N,,?ԫ{E0X0e.ef#ET1b6WLFa07і[!剌זȔH _f6eqC:>Ra86=47JCMxHSa$thѫy4_>2WSC]]oРf[s^_u] əY*KpsRBPM+a!ЃWyI|킛sZZsZ%(PTju˷ow˭'$TFu8i JF5%~N$[Kئ =Ӥc:
"=*s3 HQދ$>yi2MD5.9Έ2>]@H|-a~:v5 ԑ"+KFj)xHKѱ@i3SFK?<s[>x@o*";}R_x9G7180P6HCWrBRvuYƞn496A;lsC9pL
#ᄹpA 8l~eDiU{!sHm[Y=N<|"0zUUo^wt ]'.5	/$*V.wC'@HC:B֥+eP@.JJJHQG`VD@-N T!C]2U\azI]nnQRw;gư}5[nݞ/\XKٜkhqs8Ur5(TNBv-
/Mr b+0q:@9@J'kIr%8 H蓉4VQ\@E:SުαDVZ9qVCujs90ty<rï
9N/9溻9iOwwSM#3B\^
P^~/֔ ZS^x&S08h;܃Qeeٮhi0{vZ	Y>jL,D߆Mnɬ>ͥƚydi<mͬ]K\8cs;p山^j.NWZ8ÎOoR[]M|ÏPS|3\B0W 0,B:hwRB
YUʤJV63b{Z^\5)b0
34
b@$VO ?td:JHaȉ:|B;$CLbfܩF>A|iƿEm<Q+V/`C"VVX,E,3lb̅aaGr	IFP%_#Bb}s>s0'qz'y4O	REBJ1[Dȁyī+Koʊ9r}n~(P4Lj(+m84 jƺ#hq06ߨDᏮq9ͪQ;0gexx|x1>"b0f+ܾStϙ+BjϜ,Ji*x(/sx]^<2R72
A0gpIQJzӉ}_oy+\]O?"
o0^]ErQ1:ZWHuKJ+3bzvTC`J	'~70''QSI%v"ht'<*D|2Rز`ݯPHp"h`sF5YTr{N [NYD$d
GF"험_r*t0F⇥+8"1%Ǳx}@ȶ*t!!܁.D9}	!B !S|gM:狙609>,-W62g Y>F-~%U+)	2PuBǒiےnXY؞ёm }& ̅g  RXܵ[*~4ߟ4Zؤ&ՙ:g7.}u6#s/euwkR0'S#k}ta
]),۰"وŇ9?$0WK8`c<$2<iadK _0TvGK"xaրH{dem~av|􄘷y,vT)dF4*YR^E=hMr5<qD7:M~j-&IH}#Ü̱O:),SmIDY:UҨ65>D{KJT**K9J}'9 ƹ`RWúKCtd3o8aBh/*
ugL8GAF6x01EI9u"z,Vϭao,=Dà+' z&]0ZZ̝*+@XqrEiAE~n>(,2:U151-o99ufs7sA_|Wn͏uLQo?'9f{.lzfI5hס<**#d<'BBѪc%
[7-=,;%Upi}LEZIn.L幽0g	sILN`%՜3;Ijr甔6)NQ[r];F.ș݈cmS0r%A['r	,5/S֣@#mdb\c~ 1>d$3YbٵuNINq4qFtx]	rG8"
@m"DdEH؋:	pTfs@'c<sϑ[zsr\ ]=9.5>eppk*3˳nd ّ=Qť˗
&[<|T4Yd"xwm<վ%|pG/νy/7=9rMzz(0e8%އA</ˊQȣN-i6ȃM8663A[>ZP@̙v((tϙq`CkajRC1W	o˴\ZZbfVr{huɕ5Κv%$!b2T2Uc[fČ`iբ*gLmy*CܟHk{oޑvd񞎴JTɞS}U3g.uVr8ZdU=-7N,9`1>o,j-9(<&:%ݕ%6qF6ULȨ<9+vL|X*dzh|RJK٥'!t't>FJ<=2ZYW*7EcY%?!?Ɛ
g..3g)mHcRg@ŗaǼ[u-'F&'p,PSZW@n𓫣	c]rrAT$brrEe4z?irL;'"tءw)
~`-mSZO_ӿ\Him|䁯r[w1߯Їw|gpZɮSkvQ\O(繕׹eכ[9W0X\aKUhͅtG0H.I!crnNb[Br7qw.օvx7wgV#A#dVpjpStؿ?wUWOM9fI'7_^WrŎ}O䞜=lq1pQ4/hWNUxزx|ܓS*M:QQmgNW+ˏ+Ut4<v\Ԙphc7	jy%y
)}qHW*u\*:U,zd:g&S>sDY}XHD^~qDn{a~((nXX~7 d&ܣg\ X+gn,L],:{uVopÍL04N7>fdK!n3':ыdWWR]`eAj#nMq=g'LVENs!T.'  r$V<B|
CYwfB' :}?vUбvr+ұD}H$0%ĵJ9b%297űqtpF0l)Igffvȵ'O+s[78ge]en,Z:q':%8~b^nuhd=uӰ~O\m|_F<58H֗D+RI@ǹ8@w*n]ɓP7āS#%Y))^h_SSkWRS{#<t%v|6\8op# 4k8SKtFpN@,.ܼ 2'Wi|{FZQv(W<ǮG#q.Wsn?US_}Gm}WOTcmI~}T;	n^^ ԺQ`zN$hځOw(saN΅zzsBqTQQ]
ўs;3ty^I eK/ad4ǢpX#V;SyFqacRD߿3͍[+mjMb3J;;&\,ZrypdĉF	s'sUƶ
ޝ̙$W}G;)rve@}M\!JgD!r}"m$tCzw'3dƴ޽	1dV=Ⱦv1'w(薵<|q=uE%tte>W'f.\
PPaɮ8otn{J+=Y073?_sјYOC>@9gݜh*h4bi=ަ02̥'lg|Ygx?Ts oNz [͇3ETq'>K3q)b"$h61fIњJ+xT:\Kd{kÌ
aH
HJQ݇FJ";O:r\OɪNvt9:BC3\b*N"Y]K]"uxKT ?ƍ\`T-5Ui0,v(Iejï	i#XH`K~ȡ_l&ZՍi[I&<E͛4n;Ȧ1vΫ'B_1wyνvеTVP)84 Q6[0ֹQPfnAtviET=1ml?4F;bѓDG%L 6
ݾ]y[6//$Fi:ܝIfiLR6蓢K&;챡N[9Q$<-T|to[>C	X;\r`U=kd:D 
w8 <X-DAbXIZ P{9
T}VX
lϱJkNL'!J{{LbQ fDȕ'zzҤԘ}L}Nqq>Ix=ƅ|p!oU,^6BS8*2\#^ez!/IcU8K.u꤄" nHf5[lRvيǛ@׆>coy;ݿCyqM#U:x(e}\\=s-=e4t4T4b^N^-{7?ymDƷN=zs942q"len){裧O)ڏS^A@<ХlFKA h󲆝ҩTSR?yE,kP\PY::H? Q|q!/
hnCqdb}R
B
;~w4dbؒSKa1A&
;ŝN>ߵK=BK$h' @,$(h'ƙ1A:pAklDBUJ.ҘE_E@'f'r-db<#3˪k(K\a&&t00Q(!ZRkRńo"E&.Xr}w(PscNJlW,iy|_k(#d>spbl0AU9@.r]p{4jsbHLbe*;^q&2p"dbbl>n:w32`eZ77M@QS~׮-' -z6S) JU8hxC'<~wAg$ ʘ_B"r_e
nQbP(j~+14oͦa\8n|4Լ*HjLmZcL(3eaN.QXD#AQcBŤ29Nc	! IQM|ZC%/91e|[pf=BK	xX"ڙ0	#Tq	0ߧslC  NI|e0e10\̩S7n9/װBd_8TkKN[&/`mp%ڵls]=
x6:ˣ	#٠P:p+ 326!`˾~aalPCb@=貺ܚ_}f}3X%>	q5DqƓ@e>U:A2|;Lr`槞Mck?pO=2Vx̑tL"NGT:Ĥ(lt/t4J">`v6z "U#êP	s&i~҉_EVIp!P\K7ʜ[ERPZTgƒ;
W-#t|#Չ_
ޑHmAUT+PQ)$/b3XhOnKs޾t
jr1
YpL
̉Y(.u"Q;Qں{}kVzՙ
jD3̅Ԫ2#
}\Y]ZəSօ5IC@7	xpm5XQ GXw7;99Tڏ/tp֝7?΅֮coꉪo;.M\kr7(ܝZ[+cJH/ӹ~搇>ֹ;~sVe8oJ2:Ǥr08'-B(Ii%DƄٴJJ'J}+i4Y"pj=)4sS+Ӕ;Fr+a! p)2$D02tRG,{7DsÑnɔUOgdҶ'RSAbJRq$0V"f:ָ	;ّ!Xt|V5*@/󢠱6c9($D1LԼqbuQi{iU0m7't	af@ &3չmTvw/]5k7}֌W\jtalڠ`o9wօ?黱Puӣ{tnC?)[7<|Çm=|x{.^(̮Ꮾ]hp6903e_
$+r Z|a^pUD}m +uo,Mn97ċ]]sUK(>Τ
5ƕ$+@k{8JѠiŉ>(u45*=&З `m0Cb,Ec5P406QeĢk	s[
m2SGh[(tY_s7!ƃGȦc#sfCgIeZs(8,&+:"m3=B;7}7?]2m	){hD>f(T°RmH۽qS-qb9@WW/Ȅ'a$^\}S1֛/\(SX.+ӐEu{.Lw7o<t,tZ+)M3ݾ}ݛo>r-kݹp@yCDBke*d'u~ıƕ:=5[չn-W2u2N=b+ͼc%r%EG8Z+	[s%~R:Јw]j)Yp) 'vXi49)5FFe<3jР`Ck%jZ*ŸP0\,=e{%'u`k1ỷCZOWw|bg(_
*S, 2[9O|{7=Fu.DC4:̤Љ.;&u;};=sBho_8!/q/oy'\e0jлrV
ʡ2 t҅?}F[yq:"q]hyS.-%ΛiG0{||Ŋte2bTjS+2uerzz8Q%Β Ae+t}8KK繟&=	7;a*=nE̕wqNLT
ݮ6qI/[RLO;L
r2T1J0SttjAӝ@ѫGHMH9	vd#F'!_ n4ƦRIVC5yz=)rrKnV8>,B !⏻,5YdkGtED܋ZKL57za?"pׯjʜU|\}yem~(ie2aVXujSĵk6Ǐε>馾bE\hTlΞP; WZY@kce.s]6nޜ?ztM7Q4EzHWx"T[>d׿6+s_"LGaǽCYD	|;;|%F1uuҲvQϸ+aaFD]bc	v.#Y"?s" |`/E:E⥱:phs91aKeYEpLaOcRgsܙu[1DT!@'^"GD{GFv^͖(?5N{-r\"wf|} ՙDXqU.2c8lcq{gIybh{!^CͪĂk Z}'Ή&ʑjt`U	WYW_7efљB{b+ұ,GYQ/չR>;ݾ}Owwk-**2Yd: M "YK9`gSw|<߽]LE/CUWЗJ( 7ԗ74tgunE&_(s
;P<Fh"uQkAqv+@4aKBl$LG1s ӥ<wPsq-Eu	F0j`.Jfč_aC$iӓϬQot}uN,Ü
rJ1ѱoiiiO	 [*ַm;:G{7CH4?Ŭfnd%-n;}4mWIP1t&
F$QKMP1Bb9^1!n͟yiyu7.\[X06XH7w)mu4

(xRǏofLeWT&+X&w5+_J۝IQ}'O>JgG] *\"~d=ߐ2gOytoH1'5[:VPuH^ nv17Y]zLw9,/)hIҩ$ru*$c"
 g2~ <am&Kd<2N1i2D" zKMH*!]qEDؿyᓫkq3B++s8m!CP`'>ӻgqno7)>5RgH7bodYLaU".&y\>ZDauusbN?Db>OWn<SЭ-eMieLγp38׮9/N7r.="/9fZ ǆ:ܧZ4,
ě=e.ȥyN6rU-ݣ3i\&-?MJmf95kd;{Ou^׆r[uAr0~H}%P +U$<EC@b;ٌn\\KMl@G$Ƨ:1aN0g7ǓÞ_Uy*L;1shKgN<oƏ;{ms<a
&CXQIXis툐ǁRVDtvY^dv \-7OWwAD;bl6)Zw:迁ND\	6\27CѯW|ͥϚ;5~-96J^O 
H38iǐ?p[=}V$#.İ9Ґ=F}|'D9_=yOH)jls:'	tBUZԅѣ̦LM[zdсa6LR;	j}>2F6{jmzg/tM_RۈDGхi/@df-&'չ\VIκ%%D
9\cWuGMuX&6W$U T/C1iq6Ɏ0'R.0G<`dh'-.%-.sdys܂:M׿?w//sM@eug@%؏!N.DbVPjxE
qr$Aeu͡[#/aAD`5Bje1溁9n&~+tbKBThVi/Z%Sٵ4/B;]S pƸkC ] 8yx|y,\K+cR+rWaչORkLNM,E֋G֕PHY΍]x{yyW`|B*5OpǾG7>)2o# t[չ-+9\xձrwMB9~H	@gica*iC=ӈj4}vA"(E#*hsbq!69'L 5\$n5|
FiB*Sh:;Ͽ.}uo C%FUYNRGNX P]U#ڟp[ǭБW8ˌ21RUF1] Z8sNz?NTuQꯗ3"g+>]+Xhr[\9fZS*oݛ>%MgINC'9/iyNg<5l;Ԣx+B\GA} rIѵ(?+	sU^xܟ٫G#l|%]Xrsy(˅. su.:V20	QUHsfG^=~r9b?þ&_ ֖Ex"v!AqƵm69lB n
f[EP]*crJ)PL&+ۤ%pYdO%Q9hu"T8ޒpBB0ray1^/I득dwwVsbs,\Vs鴵8:߀S ;9g3~/z^~y;U̲L NjfVd77_~,Lŋ}qyloI!Qj/Z%BgQrr'P$.?d74*(Dw!sWQc7o7Gcp+#K܎um-i-Qhk	YLh}IV9@WBVhg	IO%Rh+Z(ouJ:LFZ)s <k,la	dQ躇:'Aq5{-\v(k1YDjjaNGЏfLy8]Bӽ5>ae
{ۻ-}ޔ|a|H<꜀aGF	Iacn'_v%Js!_]i)K	_~a}/ϟ[/L4d7mLwC& d`_f.d[CvkO_9\`g!98+27{$u3j*tS4=B|H6fP2&LcUg&5.O%.O|cfJխ魵?_$a<N-B|k^;D(*Lh7N;uyhfU81׿*t(dZYovEɼ1|4+9_>z:0^>7 ǟaM|W܂%!kux2jǸIms*5}T<'|Ae{ DGe9lUF(NF4y݄0H+8&G
zIa*930iJyff#ws<Y@\4J aTr O$పfvGy{D0GLnBa9jlS9XPNfe&σRz1]u?.Z],^
C7Lz`Orx^J|뿢0G9$1D3JcF_Ƌގffε[>w)\>>s[zh`hhhA{[ ݭ_~ѯ.+˝F=:nlp`;Xz|ϕR^9[tAT Ya<Lu(Rym2S! ! @X一M=mʴ4\s1mV X
4KFm	sHcA0}GZuY_6+8r	P#`fxCK_ix
H项f후vT;ŷN`ޯlsF))jh?ˤ@m9s۶:I^QsK,5U{n>V8/uϒn,_{<e6=m?8J=L$Rǿ~sZ!`{7=
~dYؿBeN쫅 ~9+2ʲ:cC`3o^U~۟
̝;?GzՔ味̽aw<Ƈfu3*p75q_,1(~@N4s.wr8bINgq[ rB& l .VP|qsLCS~vr"IK8&tb81Qv`\C0/2_o؇%:٤0ϵ6s2e[ZxQ%1NҲz$ۤ?*Hi韗pO
}r^R슥k;>00|Nm"m{}/w{Q1w[|K>l\p13̾e1I|k}\"3c٘{>4ߞuč|_B ssNmu@_˿Rݞ;~ݡlHsK	sr7KMF0$6;y8	hJ~u熹1dǆ A;"Y<Yqjs8v01١J	$[zSf8cA|fD>ԣ5
#;j2ILso -!~=gIJHzyD6wdgō	}bb-Osc0*GΏDPlҶ4 s3ΆVNEzJK8Tw2oss9o{	Hbmm;`rm H/^/~'_|z w+{֮m=(W;	υ\#n'hdu3\>5##<9d؁ ܅ߞurc|WazH*|~, 8ҏT.Ui<Eʇb`i%,'ˎcndy!:8FoP!
s挙%@6`2`BmcIE<Ɓ7 U"`&*q&DdHp ga FyTX"t`"\M9&	rHgqDba`	q?hLcߟZ^UkNxƜϿ/y&i9usvSTX;DWN`xEF4mÆΪd4lZK͒悊|U<w6+V.,	srX0%Xm-8~Pyh)\ωSOӻOc_xw0+6eG!hMNpǉlˆ߮?u̙Sg@?(ƞ<88ߤH7c2 ى['OL|sמ2ai`uK׏<?_|x=%P,!W0W֥n*	T`["#n 11!nзQ=sGyTz$96B)_"$B`Q<L4kuk9؁9اmG)EZ":^mmJԼ51$[T.JQa^ĝ_ꌩdW4gRp&`\/Υ}k;ƉΆUA^A
*&ڄ('L=\Vz[55*yNvVUw*+@W[.a+}m+?h^#mm\<{IS|Sl=nǣdHh~fɮ[_f?4w`{ZLƢgs^0@ՐL9GG_~rQ<Ircj{gLCi(GDwN<̩KV^=Jm /ٶեi2g6017}9Hr1Kek2EC4"N7ХDGefZ`mIEb$STE:5
\zJ8>6bBɉKF(Btj.񻟱xY(MAHacؤ1Fx ޽vN-L.C(R>"guS	tjw㹉q*`N-[AtV)Xo>>~u>~/WBNl ּHSm|/w^;r14Ƃts?Ba抟љDO>f|
fc`5ҩ{]<7F:ěo	߾?^Cxk ?9$\:9OrQ|bJ[b\^7y .؉rLI+Kd9^ZR<_۞y-H*tXclsdb}xǄ禓D_>4s$1ߜδ\A1iE*ƺGӹd>g)T\ .lfcABu@<+s`-uet_lPB.YGhq&ϵŇvcǉ9$_$Ԙs@:-SPoZ_[FL xe*sάVd3,E{`ʥP+m?hm?>Oc2BsW~*Bkӯ<{rP[dǎȓ9٨/3#u~S\9ir9z;oܿ>r7}?!|9o|{?w'KC
uDW 'G72 edtO2H\F3:v+:z%2!<JT1Ĭ,ya9۪\
N5HT<r)`nx
 UDϧYas6:tt^ΒCKyǄy9̊)9stHҐC2hbvP/AB.o6evw{<V';yv` y.0
-3.NmBTmwzNL@=qU[V3o??*r薔@Tʔ]jx㣏^}So\G]Ե׮^Ƶg['=իo|tGWx5|{>r"qn|۟M؇A
&(Vnh4CmsC'눹5iw9w޹΂woz睏4b`rrX]dƗ椟O=Btۈ<0Bw2E3]; #8k>Zf!#1%mS` 7O'jЏ
*4~/6%,CRv.5Id%(uͺʷf؉z8fc42tZ	PzAy[qThi-CMjG9L-c-f BoL6氥4D>guYىɾA߯1G'J|7i[͠2r^ė_H7oU|W1Ϲj*f'F'f>OLޘԕeA<0:r$FG||qgxяy7{?U#nݲ玥D_E,H<ŜXNQ b$Rs7d3dLv1^}9d,JCEٜEq4e]2Fci	f
-ȯ9i1QYbD:i1s suc#1
^ф`.'!Qc_+ڗ̑JgC')DZ 8'*bݽOTuPZ#-3Nԅ
94!ץ҂9ݤ`ΛUnf:; ɦx!CUYU帔e˗Be/.q"w.wprp̭N{8|N:uSj1n<dySAwޟo~n'zU-y*8J>t
_ca2~e4'\,ZEc2.8p1Pu
JdhHs<]`+)\dqL(-SEKCFeS`BX`<n|KS!Hےw),@&t}a|	'P($0G4E<K8'U6[U`UV]0'{ s-+!::3/B',mi¥E]sY	sfʖnrFR}(Ƿ> 츁kgY?;g>?}jǨ[踣o41..&y&ī_~83ґԯ9E<Y`mzq.92R6
#X2`:V>m&.1Y;:dSS
98Ģ 1A8Bi	.-%IRͽ9+~f<;@EM-\40).e9H%/t1ts?g?iT[P#Pײ\ba.1Wq9hmiTP-jN0J<Jo_)U[XY˳DM\-#Y#ԓY}ߝOƍ[n3uvop(m( YiGމܺyܘRĕV yc=3X* *u1bN&\Wwbn4\ELΒ2cy5'a0i!$צ-]{\GbbZ](rFRoD!ز,rL<s+9Ux"SzѳZ}rk&`RJ}rW.})9[d'(k?k^_:W!Wgi*`"#:ӟ?>'nĭ>q};FCӃL1nؑlw|ueYѭ+O.{4tʲ@S'I$M1vr' gL8҈R9# KFR&01<=`JǽdVjӘrs`3EbmV0xB^,
49t4cQHE_gQKFkDraF-^"FS/D~W(uÛtXRPmtzcG\*N@cα;KIrbD'	)+cJ)r4|(wx<qB=NU>G~ى^:30w`Q4rAph]ܹY$^aV@wMVTuBwVRLF1d4D'Xi5GdY`
: ;qD$t'NpG87A+fUr[0
́Ebh	+.<<'n Х\:]`.p1G%hG
>] eB;*@Wts)`N-58$oz1KAcRr;ApN"K+F.lW˪U\+O@5斩|ˊ[Xne.{DUɷ=栙lwZNZgoϾxvShs- qx4><+,ջ<D׻Hȫy|z`)*,5NGH*smu`6٩Ak|b]I*I.P@B	)rVsѠEW^ v)b'o"44$rl̐+FD'J;F&2Suihh ::Plxn`t*K%1ajCS[&&Kz0sbbիze+jMA һ<8XZЍs[V}[zyߖ}\|ַܻ'j@⦤LvV
斒<U靿Wiٗ%x;27.71E[k䑓ge;dqS8BpTԂ#^c3x%A`(q9F6ܦǗ\N"s6Ԏiw3}^ʃ3_L$]0syf&BʭP<K9.
TeB.;k#V8(z:ChܽYKYRb*"ԗu-@_%k:[y,r߯V[U?g}X'oWCY`um),BݳH*ݫ-C1r3oLuLӧ/oY l]U=b[{q&ɃC4^~U>|""W;<~z%y;07>rPP81Ӯas)<GJ#	9bmHC^tC,l32HN"eUnbNH\[D7R2KƤK5Ys,+2$mHgO0 ]eBs2B>GW@|(~y΃\ 
"9,^dJ)o-R(#&he%d'0e^6x4@UxYR.Wp߼ełz%PC3gZNʅn-j+lfіիs̓:cp}º(ܥJe͗+Xs9NRm?17wM/E]Sxu&h<NaK0{t7x6"t@PDx#)<ׄtums&y.dMs<^-" "^*<p8MU[C2d1xKs}̃w^iP6 FĽN^Jf$ʆÿVI0G WPW ouQXV|hNj媟.\g>)B-3@|KWNqjՕk@Cp{!?E4M([[T)pjΟ37qKF$s@4QG9唰v9*8&Bf(OХ#y9NerUjx.aIT(/`.׵%o&Y[bh(\Yɣs$-{IE\'jlJK8*gQ>ƽGn淠jN:G	0+iapMM`ROsS-lPpz/],l,- :s)[C얕{zAΥUVwv#d}OX[3-ڇ,}֮˗@ibrC>FDf/VqMyoAWη9n-c'q:|䖱qTԸ\ʲ` k0v3H^c.F;v`dZ=V1,2l#BkqJt]Te9{
8.:4s7
Bal05Z:OvM</biT@XpzO!vojr}+rb<ߒzOM|NF0'_*yg_]u?w]<L]qgpG1he2Ze #mUWoXCe&úHt}ܚ/[E<-ګyHDK| ֙Eٺ4ϓ OGSF9J::Â3bXݽHPS<7hHJt ]J
B";mŁ07B̅\g2ZA-$ǦR0,g1h$XxΫ-1?u]T933935Y߈M#"+P	:P%UBη rxLn䟭KK5lh4T/[7sQY^ڻ;7z`"k9	7a$OiYz'vrkSp]=Xl\B`~QU?ܯ:Rhԑ$;$\4GnJ4{\کÕ9Z=@@)d{imMbfHt[n	e349pIx]9s0EQ[B;2[0ș/\0FBv
\8Jz:Hc.Ҝe5tzscEjr6.$4ẏ-\jwILя JKf-BWzNw:	 ,Ac]{ZP@
oPGG$$:/s0qwg(	^cjVcSg_Y5vcb.lDsMr<4O{&x:PDĜAMs8&։9eLo2D(a7KZZ"04#ciu'cN
@˱SB$9}IEs'X>m𝈵Im0|T|O#a
|fB1w[aq,Kܟ{!Uӈ"fhp0\!.z82TZ!2/A^N2]=	 3/-*J\9crI8-`'eKI)	]uYi:3	A΅bjb0`ϢSM KqzNb2D?dpp7[e$KGeV0|+Kgt3&ВdJr a5L1uq]8lkY^JYSOlːYUX\5 gD3C?nOau&;wPū.&󲅚\-_tkOLܐou!fʚVw/NV<C	q\őwp#FGCwS+)imxmeZ\-sz*̭x8u~Qo>xǘB7YD[5tOb&EDX%";uȋљhd3ҎѡxZ[۳Qw
8nm,@c
l˸AeQZAϟf0ZXXRVUAUXr xDt.0.i
Xjxm\3+ή`Q@G`NG.W|<UzL$a~ݵ~ړ:k!@BDtDxc#>wC@O.-׼Tgkoq^w}_mmgz:.{K܅+Gan-f΋w=7-:Ӿ cc0wl!PZXTs	y<C̝Fl2KI_G̵qG039tg6V8L)[49b⇶#+j 8Ru%qDW%
Kvs
q69B%+1z 挚 䊜:0yKsV.H1K]mjK=,-KKWp'<7䡡{=9ԖqCەÈj;a`|߻c/U`R4^∺hpycKrv^΍ύ-ݩM)Bť~DcG>r09{2@^ Z)(Q7#M |J-Fs1({.`_Au$x##YuY,`.XY 0nZFU%{!<F89 Ĝ\8T?<03}!Χr9Kw1Yn~WI/Vyxq
 A0'P/ rq&ׯon}It=q|eܡCC6Ȍ=5ԋ9Eu^KוĹTPa|c9.V;gѮULc'`:έB.P0&6*Л2	
}IA`0S/1s
y`<'oNaq(șMZӵ%ӿl#9Q[*-
GI*!ǿ4xV Bci	̂~T?'<Ga2
"19X1*å
a_+0[,<TD&^k[+j̭s 
F\\QV7>s ~߿oځCwݚl0P{}^jl
z뽰qo]xwܹ]s.	|`G0%JSx|u.fs8mh3ɓgӒ-l3=OEC-Gq3Da].`k<\r2dnhFԔma1sXIew]sĜĜAs; R
qA._֫w7ְO3VyMklS !WjpI?aDي#><y(qrVbnj$3 reR_<ʤ?wm>A-.scց$1c! {7/ϟ>qb@weOg}^`n[1f|hsp%S}g^>u-`n7v۸K01%sp:_Rn lÜL#Y(-s0cK[3^w4,wRd9( W1]sǔɈͩ2ªS0o:P(rC.`D5]b#o &fez_ujpY/cp<h1?M*lVYEm>5 0,		9Vyr=+6ʻ|qumʈ1%нʀ
Oo?(Jһ1Co綡Epd#0ј^SQЙ#&a	O=fC-o{{ߪ}(f(/01꿘&aښLt8Ӻ`+- nD:LEw@qY,\P0px/6-sƠ^snSJ1*'[B30dO$0W)k4TL%~4%:EŌO
0GNm3dja@W/:	꥟YLV|Y&29_W^ WW	oT[>X*
[o~1s	a*
 ʥH e@14wz箞r܏5_xsWk_jj5NP]Eڗ#q+zn {v?3<RN[%%ǓY9B.I{?>;ќ=0;怼fdH<[Wkt)!:dS̅  @& ɧ$b.FEva'A8r4g1]HcvI^Z?G/dR#4頻-4E(TaYma>#fK2>W_kM'){^
Y)ʮ,K	]Q
Rm#ofbma#0Bdz2{5.Up6+s0D60(m^}gazKຫ=3ϼT{?qPĕڣg99][A(%
.MKSzv5rx:;^0'#sN6,J*7V_Ӄd̥Z姓IGg9H.VM#,P>.o<Y\qm	(P.]aڒku5e] Gg!7*NQ'%ɛh6&#KaB_j˪|;qy(WEcN_#b$=>F' $)%Czn`f QM ˵1WNj_톷Lݵ/xBan9_\cktj%a9˧#2Ʃ72c76bW;=LLii7tw#yNP0/uB\Msd\0~;&䇓Y597`Y80#(&A,'A
F^D[wřޜ͑5)ri.|QƝM<'PJD$=aT(՗W}0[z<[Yy"d){*Ֆ>W]WVpĦy5y%"_{v^{էi]nfOW2xԫ.>/ob22̕L{vYq y+Pİ-a.ʒWQ C
mhdH>&)WbR%)቎xVscJZF^)fxO<)Rņ`.P5˰X*!b@<g0ҢX Q6\F@я{h8Qr#o;zTn/r<F+CK[._~H0gWv_m}Rm[=sG)7XW{7ݶns@栈_@Zg9R[=[-s>tRiÜ u`$fZ[%	`c-=HjqPDs>\*%F ic'a0bs腌41W 䨭gz(% 0b.6'.pu$`%k8X<.2~%Y_mjd DWVB[ch͕PVWJiƲem(U+:Lr,%֖0w}gsKF0HmgrZSgk<cST[b,=ܹ*1^d\Tjo x<R̹͞t U[ZM:SN倪9W0kHedՒNQ#DβJ2.qEp59^#!Y?;r\PV>e*]4\PaNMRZRvT"ANBXJ?Fj1RVR9^7=ԜTTa߲$ܿ@*)D+V{%0q)%n-c0?PT(0x<O^&h?[
*Sy$"2rq܄yՄisvKPЦq	Ow9UQ0K4y@46	bw:6XQ]n<!t(JB?k[n{h4,^2k!)l:\$U9AaVYl1[H!7j5bT{|O|ZX2߲j;@u?Wϭ[w᭷6;aI=s5ɂrcx'z뜲>[m|q/'ċcoisYIۏ:E
JUcls$?ɸ$!"B 9<_uEˊ;q["COS9	a@?fH{%drR(+XHKӠrqHF04:dPxP:$΀qنجf%-d~ϫ+AT<W89N,{Fq.~ͻ%a(Ϭrwy2eQq1[wڸWY׮F2J,Ơ?魇+S7E*ȒNVk,p$>>PO,6nrܘ`.:֤jK
ʜ|R0~qe8;n0dCLvRŮL0Y>qs>
(kX
̉byflwl6y~'QՏ~_'poi_rǰ
KY{_s|E_TΔUi[T$D,3,ݲa
̳vÜМ⤑˰hq͎ڲyCy+xs"<O1S/e.SBSmm-*a-81AI9lfQY6ć666|<i.]h*-=`FdYW/}>*=Q}V[b0ݰUrd 	4w&WxzgbjY%'WVQXg(Kzx;UC r%'RuiHGg	{b Y3d鳋ZX$=5>0Agz\1\0^+I[z>CE-#N%/?UPpM~6sThL	AF"XY9 _T0A9sd*ۗR [y<rt34	5GX ˚{Vk[X_c0fUeYsusr isgM˲JS\UX!(a<!ψ5e")OrF7଴niz<+)(RB69th%xkJ&ݭM[Iz8q{T1r<03\<Z&c	Xɥ~h@BJ8@r|blY'OF
m2[=F~^9m$ps |M/a􆷉Dṇ-_ATq=K Z~=</>U`SK$0f Fv˲8M.y&RFzj	HХxg<\L`f80)cP`Ёш20Ի9G-Y6sy|Ovtt*D g'
xbK
s&LO0",WG@I
`]g=|U.7l)q\@mx]MWHvFP\$WWE%_m_?X-q[⹇kn{۸29>ijnV__7sW]\(gT֬'s\턈3$iD~m.g19SgN=C'f^.OSۀ19}sLU'07}@x..qg`Zq4p'w@cO{ σXG:֗~oeEd"+B44|޷jKT'tBa!\Vp_ī"pT<[IU/VqZ_kxnWB!s*)	d+|(uH?&KҕY87ƜҒ%sb8-UU;bFoq</:ު:asyeR N#ƸISionooGX2d䁹FbFL;Гq]hAtP#0FM>U'B]$6(-_9ޫ+,W&غs(->stj3Ăe׵skGB'^ؒ$uYUiN򼊌(I"m"#pG鴀\b0{t9H<1@U еp9̅C
0O
ԃiD{ρQέ[{s#f37B%ۈiuU0@YڈA3DF\V[Qeyz	T՘֟dGc{qk(J)0Nٞg.eP+A|7g~9˭GtUeQyjܲN]:hY.o5|Isd9ł|rLTnt 2ck[s9๼J
/vh՘ۇg+íXbuӑ, "
9y0.&'0R\ ;^vΪInVZH^A&̏6WCmkK`08&\v>~`ҝJ[V+t˽m4?P
Jǰsϕ1V ]/]2:$`TKO$hd99!`%$?Qb+0Jth\g+u,H7$+orPy^s0eoOkߒd<4V>(4w {{B$J˰ue.Xl
 YKsxIǃzT+I="HhL[7\Os "6@>` r.Ouʽd+%FȢ~?o[j?WV(>njKuual?P]X4
t$1J/RDhPPGUUD}dO V27`OJ2a.M^ so=0\ҁovpNFNYė+yFdIDVN@JGf6yB F!ת+l
(CDO'x@j[	bΟȥk!+yqW^幷 ;E)Xԛ+<|}?ǟɟ,s_)?ɳfe%su?re;
@al)oQtPZd8.ut4,<Qcڙrwq10aΚN00]19,@OLfo̜9qBkӍ-:bp4h]1R|o3]TU~TPgDXs PBӡB;#
lLN\\:3ԗZ&֯+b\g疠ݾ}ܩe~;W}#T]J?XJaqGBMt3X&4067
Gӣ1Wʌ!DGpPs|:K-'ę%4oYI;a\D$&}-9#Q9OzFJ4qxfib̠e=9E t	c_M?)ШKQ!t(_h*5%ƈ9jte*y˳RP㼢o5[V6^\U#<Sx%ѩ!W\o_%`֎ 9IBh:i4w?䲸DvvkIJG9&jq\cwK%1Vʉ᭓)L7C"ىtHp):(0PW9<O@+,Ie4]GK$	B	9g	p9*#
s^;ṡynY|_uԞN谽;ܝܚr)rs	u斫 $\#:OЀSQ8Rex-iqY3A={xP$q-HԖp|Ey.ڱ5$m`)=25537Uk Ŋ9%K;ib.#+#739GI=ɣur|+j'%
[2W20 뼜vB.$`)&J
a @E?`E(_k_U
Jin0Ge	 3Ѳe%YYjT~	+JOĜCsnϞU̅at`%#%P=qs1V<SceّR*
K"n䄀n
;159ΰ7~!`^(?ߵ 4jd
t]GRNj Y
|D).?CVmSpWq]Tk.
$夏0aeqZnn2JKf(~};۟[UTeW[*UCb~@K5 W"/(X-[z7Tr)HqYduIH 'tl]]+	zl8B CӚqBn%NzM q,&'/wvaP5n;y޸ieA t[=՘˕0W夼VC&m\0HxKˮlaMPPae+#|hyt%J$3!gXCu5?xnYBwe*\";s8sݟ[3乍dcPY\@a.NT"?YsO5
Л`J16FK05ӋX\ sNu=Mi&R[rplC #z`7o7nܘ1ݸs,.] s2<KcPCXR䇏4}i9RsU`402<.!dO`:H 	E5NXTs 9
۹By`ޕsK9s"WPQT-=S%er9/CC{xj#ǖ;g]VbU7}ձ#~GYiyWf~s̬2S天cdx A	fn|77;`Պ%ĉrfyoi`U_
Sڹ s,GIs@AZ%$AJ.gD*3<x/L&1v0GA,'^<+X*eQyDZ%hnum sKhXu;ϖ)X%Q-EmI"eqsҸXz]	h%*Ts"5=;TpZLtqM4"]#.іZ#1sMM9R!O+9ƍDk4xP-`-@ΔFlB,h|'!dG(*_k`i"i%2
`{x*@dGTJGidA
0'moL[xN
Z[B|s_DYL[Π9:k˘[MuҜƜOVMm:Ԙ	(T_gd=㡈 Q9Z1Facl0 W"-q
RG,GiN89$&	v?>%
c+͕<NNڹ4{<I;xN\RL&,IS͜Χ2.7P xoxes9#̹75tXq'W6叜fA;5
g+ic˜Z2Ϋ &XQ6ی >Щ	T@qb4@tYDOKKxs>G
xNTs3Sgf ؠ]ó-ąBT՜)?#5p''(!3狢s[Y.ҡ-, o:\dB`¤?48:UZV7x媮>>xoYdZKYZ3}nMbeuWIyl99=l֋7@&D?zؓ,~>uA~	1hEN6
(:
.\ꌱd{9ɞh2lҙ0Ddb)1syf8}xXY:	Ǜ;ՇLR
8A)s9B.6sR)X\:
s\RDF%:JL|K;G!"kX!ͯK4#PXPuN\T-Kb=Kmk~K.+eyga8k?@r[	S߱Yrz	J .Whs8DExߐyG*NMkc ڀҡ!GD<yc@o+ɉIpK4>/,hW.)nHhL`edli p-ʕ%]Խᮮ2~q~Hp6"+c^'g@(]t5
sY]hNҫ0>:<}Tl([bD_{\[UՖ~I.ZLSdsr2&*UAoAX^Krrrgx'/q` :"O+/(d.K^b-܎H;:%Nʆ*Y3[PëP'3u9Y$~L i!Ms9PV~O=ɋ eBd@q#ϨK GѤ\A0Xh5jj"e `RJ7\|nܼ+ːai[MMP6T]$:
ـ94xA/hp	<C	Bt\D+q#?Of"qyj4ڹh<3yxK.-Pr5p1YYo0-g$cz.sjASL	h
usrKFX5
6DahNp	s^:R6}_~$D6#+~-X~q7ΛZs.ʅU1KXF6!?T94kWrxq5]Je0RjKd~i9fBaY@{̰VK񤇹QWJG&|!ˤR`V:ULWW(,iK@k]qdH-ysU+S#`lN|\;<nj/>-e]oY*x\Y[ܥGs^ذ2ɪr&c UIf,
)#
)`2&ME7\(EdgGL(1CV4W-\f7Ǚe,Ql~01!2,- OΏ26hNaA9"
ߐc}QZw(&u	H sJg`,kDwS3]&vPS3s*EIsme[sr"_
/񱑹1vW^cg=s}nL;s~Q/玜~sG7qct$^q}n:1>G8>|3vdl?kzY1/~{C3~	>J>>oz۹..+{NS|^a9bN3{zSh/:Ev6WϽԼzu<0aa\qy 8ls"P:7٦0/)I[P\UY'(!4"Ds4XR.ȐSfQsRªæ:82]D >~-*?r.DC+ۅN8	3˓KCk'+&(u%X)Ksbg?_wgw0k_w'M3vjy`)(?P{wi)ƨ3t>5Q;m4c]AEHȑA#4=Dl;kh7[[;k䍾6mx37__wb|j\zss9uxmxvV輵goeWWAxUHm(ZC`VVrڻQAPl^=xH	䄇\sc2L`ғI$;J.ϩm̍55ǂɋ}jߞ,">)U%1g~IrLJAv<:8OQ:7CL4ˉP8S	̴755@*KM@ BfJKZ)В*<x*=4}nvV{͠<K%Py\ٰaۮBvot:4n	>ߑxC#puǸ)ُE8f0%We\7>^^  M3Ç77s7{gj$A\Xمyx,Wt9N(:}V͒ɥnTGK4]y9/uBdCs9@gK=\lGAN}P
f(l&|0~xS[^8Q휠X@]%,lf<Ԕ^ ʁ)̑J8L$C{תsJD7.<#KB	"x/u羱oY5C*r{ni;m<9i'v
];m8md'?]"199st{c4rjv隖xcBL{\Ba5F\s20؈fCrd{?6F
nNu}PkZMKalS5Ûݻ8"KM}47777@zwV,6\+,8+3]|eɏ(YU2tޜb:OKա![DNaOȎ39_`?dVq=W%~471)4wzf.tç/:1w䇧[F,Hi)A^޴qU9 TF&9C7ߠDǐԏs8DU/2st@KѬ(-.'F̅
v0hVX)Wќ@ʝ
4q}hu	<+Pז:xQr @Nx;Nȸ;3|߽s}am>.&d,lGCA;N#W_P;8ܺL8	i́96߾{/7C~	QKӀ:inj%s幯P*ecԿiu^SeFY*v:KW<]NӳqPeR<#`S%ǘ9."Wxd~":A&D'!%[3?~ݭ.j\WZw⎑;J2&x³bpMs< Z9fX*wy4W#;Hh_CN[.vbS9j|*iWso
J[:̳n>.qN/ogol8/y WxaxqcjXt.minnrڛb|͆oF\eZ2 Gsh(VlR"mT[ 9[tg>ؘh90xI-HJ=vsx\8w?&m]F\U]w\1xº+6k?cdL#/+HqxX)9,V2G\l0Lr:+F89Q#J
us#%Щx$+C	E\+ >>w_,8s#"8vs9aTm˧:	04TLy91*q7 
@s	b)4\i[a!⒌v"%'.wNp9R(η+.+T\<5gMO'I䁑]#FmrldWiaM~#۷oڽ܎2k퍛[ 9#߼9u]3=6uB8pģN&' .E"#FmKC:6p`k?9irWmk-AtNl_y_=0Wk6tHЏ4+ D[O~_Rk'΍oտ\3[֎&|}=)gsw6<W]NkYuK0eKVVY=,τI
;5Yw=)!JQ"<7h8?.mixQ<gf^o`qs2'ҊM!`ztS8myZuAůmUN[9hrf/$%Np@~f!8A$-9L"Lq'wZ5L:n
xRkJ_jK<c(,7`bs۶];m5r6y&1<5F#3`8\oZW7[-`ss=RlƃnEh0i
Muds[$jk̅:FcK/]9iFoĉv !t@rƆwj׆;oM$w;!}vC&$! `&"C!LP+T@@I0x,j7v`ۅ"tZgmgÚϚyxaϚZoB\Tt,D>r+f&m}vO#Pˍz2ޒX֓4KG{"\$ <Z-Sigx򛩡cǦGތ/^1rԭ.IZz)3dyiRlڧtܭH,˵/1չ% %_+tIHd\%ùNaY%9~Gh9Pǉ,G-R;t5q{;֒`0ܡeΐō+J>`<0'VM{OmT`|%/1DkVB1$f2'M-`6;h p<ZR>Q`$C\OzGϽ`xl'~m8ky.YZXX&i3	=[ɼBT'0RrjԹLZIG(ڤ5HLkdNR)Bk(-a;oVXӃ+JP)(	c'R0lloߚ,<y[{Eb&<ꓘS!2=fR4T5DAHѦosCyzn]]^ktU,K]K-ii4K
$bv)EI-얹*-NIYKֹeԭJ.mQ| v|)MtOȈ$!qc%0Gn rjdOmsU";UnhOgKW@ 0"g;/	mIc\;\+Z@%@\)xYd4bΆsD-gR木H!~/6'`(NRȉNx_"_m|<j^s$Aޒ{RN!B&]>{8memΝ;As~L,y{}S%r^T)K(V0zN9%(k@SKݥxظRNV H%8j;
@%M"P#k	\s[.FT$gl̡59P&斚|ň<IjJM?ffxaD8=>7uwq3RqEJ$#q-2)KLg,}ɪP1^rd`ęŬe;LR%xO(Ц&<*CÊksY{K|"+]\8\2#dQβ	
9)շgF-\扌v4X#rKLmc$Dd˾K%T_Ħc>s?q YAjM@c$u޲\o<L!!"U5ǹ
.aIzKrË+h^9~+-Kw֒jVV4UqR]Haym+ZR\JJνjhR)7>2(R9j O`c)jF|.9(q>Q'I% HxnnJ T9bc2ͦs;t{ޓL Q5KI`h&yyd-#V%i8576-H+JB*[UHx
']xxRDWORCK7d[^rYfZL(N^άIMV0Sl_j
=Jas-'ZKʕE{	莓q`YEk]Wșj>i*ԓ(d%='FdYY"^E@j8b&YTpH^ӈ'qO\ p<W8AEBA%p!X	 VDB@H~2|~'wy֊޲
t;++w.<-^&&tۺwiEQtr7cJl~d*KG*TΞcf>2:|l݁M]Vz*OTJG؃t.4*SMR$td}k	KQr󞰾 B:ǘ
k*x9:+eg+nMeZ⼞h.Ym-5Hj_U5[%a c<leE&R/WNzW)h*^sI9#˕g1%-qs}l?2VpGь:DF$ r{MăUn;3c@yz}%\QNzpӉ"99]rI ɝRB
»qPZ[B嵌9B#FkRbTJEɀzd  TӜY*
3U:fZ)gp[)sd?I' "L޲=9	"⬶h+0Wӓ];KG58q.^n}g0jcdAc2BXMz<o;>5Kv[J;Th:|phmۦ/B
7<o=moxrl?PJ7\?{{Th%=)^+{rg.#ו	pS=t(vE-GbNACdZdZrJ7sw-`䭷JzksA>[Lъ(IH"ؿJGvcnޭW[VW~(`.-uy\­%h8kC$+]^\GXQ
.47|4HMUmr.c+tIb/ע9
PAC8pk	k<HMJdD`jZBq(zב#qDH
"Q(s%!RzW19]sIݎDgB5B=ymqbeHqrs
 IY);Z+vYvfMnn8ukˠC6Bb4mu7+̯/yN6?F,h1*KV_8VM$&&v점WmVvuoݿpmS,G2rA>Jbw9*0;ծ<Wb EW[ev[^QP
-p[pfS'S"UMl1#H8궭ߵo~3/ג^krMɟy$\ug}'7~W?<zu+\۸*Izt>ωSU8>;=wlZW@t%_g.[n(m螷hS7VK׶Rū?8kթ^vcM\l1vb전8_9j8y^-<9ԸTG9 '84nJh,*H"QEw֜r=L>42ZE8w8mhi9j)X2.)NGRGM^
K|޸%wMɛ^y>=yfOz\y߾>Zr'!Y辇o-R*I`n])Y)=p`jkKs_9m}LFZ$Uo0CVF c(fhdiݒs}=RMSB)
TƤbjs)-UKkeVh-+BZT5
:p\*G19yYsg4n]"ƆX#9rKeV_Vc'	/JJ/[!I{a۸:>,lm*;;ϑQJ1nܳt=st7,ԭs/=|V5mUVjVZze;i.Bh@'V9()hQLv>RkY; [ՁKdhZѥq.ɰQ.-/\
\
hUv'**Ad`k{9e+Ȁ"{H,rC$W5\no .vtt\1AgBz)_mw?<GP"Ƃް]O`}lx
ҡ#2;6Hu1U{/!$\#/Ar+%*'TBW3tWho;oL8VD"źREhrItLYN*R%RR`5MCJH٘
Vy0,I4p/h8PNws3{={~｛ᗪL2wu-'p%\@h1+ ֐-.=o+(2&c{gZ,6gzOg2da*[t\L{刐Վ(s.{rNy.L첒e.%J\]6*8\tg}ii/[֤c$JeZaZ	Zɸ\m~D`nVChAcĈ$,9(PdaNe0SjNɉ>萕兞">5./u\tth1]4jl@DgYm93ӓG+=ヌ^`e)Y%#?0%_?`ŕY}d+E qi,VY_
3pFy
wbYV߻}Ym854_HњH/V\˧.aa.B\X\#fF|Z8ncx@ZIkX&BCxqJ!$9%!p0p&|%oUt\Sl.\Oohq̉bt>
J7TȈZ
DGzocޢkvͩ{LAeG)x^whخwG<{@sZ%MeW+.h14|X +.&xۮ暈rWzusK4[9I
Q]|2dgCmw1VX(@ޥ`B5N!PR
%%FQr;SrKP$O\b:4?JR޻-qtG!
3܉3gNt]wA_8DV LJe)oE5 t0&@ݪ60Kaˏzʙs'IP?JÏhW.pjrfukK%(;[9YJj.Ugw++լč&	Aܙم%VɌ*BCͮ(+c]VٵGoبBGXoL֠:!$&$K*&0A<	:\Ic*_|t~fnKΜ9SALżxƍqglʞ^G 2L3=2GY*EYbsv*;M6Ev{y6{0a6hu}'6~l˂@P.Wpu uJy)˱ג5P:Dh*snp[`-S3uMV,-:-m-;WTXjH_HPr69Pde\O(t:MIG-qKp{5q[dnvn;sbs ƯE-="k8`3r.*/(i$Z74
-L_ s?˫Ɩk3BVIQ6&|7~ˇf(41_k:F^rKZQ__g |oFu$RJBRlA
+j솫Q!g&MY0CGV ,$I>9>!>1dfth-:(ZCʅ{	3-^)tTw.Ix	n~_B|cvia_5Pe-E1?xD")h~o~\ڽ5t-{!Cy0'a$
Zi%	R(QuAB-	mmWޠY[AU`RnJ˧9+*QX1ϬZh/	fcB>bcGCLFXYZbP%KhO:Z-Jԭ}76-*UQ?rקkssg9~ĉX</D<_UUy@˸ %BGR}0b[\=Y~ȹ B3]SBnq:s?&%3e)J+)5_pHi8XB %UP5BC`&"13UA`''"X ,*D娃Tsнǵ%,Eꇋ9ٞ	}x<L>?&8Gug.%v׾Ĳ^W̄ʀxg<(-(^p萻`lnClΰ\~򈽂s%
˃:Ose.9:a i];wj52[@$Ν4J8
UGO
Z<-\𐵚Q(oRt;R6{ǿ+IBbi'ϴv%	U.5KGzK|XrgWlXf%bF!5k'"9tgH㮋5]Ά_$3D.,ŋ?Ӕ-e>?Elkq`o8=5s%W-瞴|1;\Aj].rpf%
MR+j%H#׏X3gPN-vQ`s;UVQ[ 3)	E[h@GBey0'

{3R\o)p 3-40:GP.S*Y`/
+.r@l=G\9q3K~ĵY{>qlP<S="r*٬eeeV(ؼ{}V^m:wn\4;,|©s#є6}P&MMo禰Yx6]8p7F9w@9}7ο}7ǎk:!n/,\8v~'osngo8zx?έP8܃q:ɂKs?{ tYZR$
G6X=tVbG$;:׺8Q:0u80Q~?yE}Щu*2	x!aawUq{?=9qh0Ikd{H/[-ggf_rKiʙ#Ұښ;-E:L-C$	0ODmys];c}z}8GT]2yhjrH7kz[wH]js~ae[524xN4LNOv[tE/-]pz0,-,z1h5tş$dc|],\k8ONR8ւ'JK[/	b#T%$I5g[(:VaQtP|ᡏI%};|ۡ)t,[	|'K PE"̤<qB3(rrxтfݻwcnY̕~Um'N9<q°`ЧWMeʼrU:4-+) %qp|ϿNsW^mbLh>n0V)4Mǐ-1Aǧ&q}\Q'=,֫]l}9CVfUJFN/E5ZF'АeʥՇnMMXN%ϙebaЭj,W\qߣ=bnR^LP*ZxK!vQڠyTu0"7J)H MPqu{jc79+U-0KvDP~AI<n\Jjl+3&V,涤MOl۷s3sȹ\]_^A)S
@ t	+{'qovbb:-Aݺ֍Q{ԭ1ETEJz*mSuZc:4y!.J{NgW<>muu֩8Bu*,Æb慳;(@uijиq<=+p8}{3_Zpg گOXLCL9 \!:1bEjsni+&2z=OS]j`n4Ht)zznBбtfaض`S}\N˥]za,&s)D~#Tju{B4ݻw'5MZ+-)bo:Μ&':j ELCTY`vػ{Cwf֫RYi6R"˦T% WBNjT-uzYC!5&IUFՕ
̭1ܽ(2⬓AL1w'&
ٴi7ϛWO>O"1$_9Ϲb@ZOwv!98VVk+w8P;6:
)J:~9XVb
Lq+ex6Ȉ	tR5Yf??_?rx-mzc	w/*v
zXTNUC~ Tݏ҆vo5{Mr]mkqRq'Dt1]j$L<7@w^(HA衞/{<vՊ\3U.V׆s~x~01ؐی]o4hkH-[5	:Ů~_GG%fjrb։Q$N/X5}{[L.7nx
W !k'.J9C 2[Xy48˲J=LEԕ6+kVH	wTJ5  5 Ed@t?	/_?OS<G[Hmͨei.h<s*/Mn^PZ"(eYf"F1é6"STd]{Qj[fgggDr|cuG ph39r^Igo.CnOمp{=-}Cم&5FRKȩ:rh2 9AZ6hwt6ڌNQ0_naz&w*8U) ER|'ΰcZ??hUZmxK,kkk!<b^[LM
sB+:v
w)2e9MiUG3yHne$Hn:)!*[ eN\\$(rZ {ۉ08^1jYf~%yMV@;X;v""HDX"ꊋWpG(bw}qW&32oؿNQehx0j¥:TBd%%&BzXVi3!5ކ½{1R<	A]w9R+c`a'FvdvOWj,syP^~?]5s8q8gdbˤ싏s/'0W+K,r3+1={6@S-+uupGȲR_ff05[(hHyu,I<Mt'R/1w9G6ŗW.ω䜕zNNFdCJvnJ.)^(~sj@g9_k%8m߽FR-I"IG{ҳE"]Ħ}q.],/^wjC}G[zsq6嶲)gHKHBjJ.iuB/4PV#Cjl&47c.[J-{ܕ݀@ ?45}1qf,o"o:n2/%爓3H.S1m9́,(%"K59XCRH rYh@53sRAc"5psg(U@0鉂v:<1:Qy@5~@'\0.טrG5qkhvｧcPs*$ӽm%pCPrc`N
DVHDxMqb/r`O\O@x/,RC}E]{s;d9h(C,
wEH$ERrITMӢumZNE3']K6m_Z2;Í^)sCnFj~ׅ3qm4Z\z{瓅g8\ȕ/y3p[+eaoA@fM AFq+-3ZYDN#uk7>$Sd*sn3|K$
1:lMOނSHJY@BRjsT%۞p3 L >ﴷʩ!G޺5s&njTV?_u4@  =0Xafzx4Ewe-psGN`K˸Cmr7'5Co rH[@6)BFhךWJ¬u58I
&"zF5yfaf(#ˑg	!FV3Qzbo+k1/c2D#?.[&(qLsy-ڸeR`a['7睄< 
z:nؐC-fMM"r:[nBayYs`P,*8;:;in7@-o%P]j(BUQ$;Ω8m<vRv=}7]۔J.NC|v8GvΡƥ$lU@JOU<$ޘW>sW)D%%d]_V6D`Qta k^`uNKڬ9Ud]6[HT8[
p۠iW߭v0gi:-y$$m$[1udRFN72	6J6]qo<nmtxIK\'zL>\˾_/?e>&_=y.ϣwrs#-$Q{gDKWw ] 	AaTfszV"paТDHlљc	`A#IfZ`[$IKe#[܍:ʭe$!
)s[sG49=(P`.]bV9rm Jفq'y~Q&S,
UY\?}D.6dʍEQ9NsE[ S;{\^c,zBE&5>՜26N*1clSc`fEA	Ah95^K0~baBG#q/<"X3uP(&HGPVr,ؘb"2|鑜>p
0?Yr#K[@ Ys1'3 ;DܚiUg`,mucAUK%g=rC.=a})$ΗIxED$`*%a|Yx(`<i9~(GSdB KD'BEPd0kd?8s)b΋`IO{xj||i44~qP'x@^[o_z/\AO=;HK4TJ`JٵEC.'Z}"wI_ƙXlB}Œmb$6?BTl^Ld	L'9qk)4Qva1prN1	:CYY˗~<O[>rnyTzZB"UdGW_BT2|Y1ZYuf<eK;"Jh2H,,;XKҶ`gs&{j?HHs-yqC
J9[>Ri4^P8j) i'a|N"s/#33AOKuE[]kLe'kDȰkh<6!T[fu~(VKXA[*hǚc.R̀_7)d'5.KWC%hɋ!6fNm9q0ѬV2u]ȶ[Tܑ_aP-dOeen3W^L'2_Ht=dczM#r.,Փ%f! KZ+wbR[R(Rtཐ[!v̑R/j,+H!m&sn{:ĻfڲfIϥuJMjP|
`wd6NŭsnvI:_'qJmLrkcΉ=tM&OFQy2yihgn\#Įt[!ՍK'6'C[όh?0\KfWHzK=O٢۬u6iKC!E&qΤF2g9=%q4:3[0pѪckE1ʸGCBD)gcz[)cCGV2C(-ciӨS\~Ƚuzb~(
^H8?	Q2Ogqt~\N;WzSvA982rT}y|vշʣˮf4賯uZiѺf֡=ummu{h}lڐ򮹹-ۃ6_B͗fymuȅg"M<:暟j|?rVm+υt/rx}*^z$S8EQAbh5?5-
J^OJW5e-}gv}ؒZR>}Y"rT)4⯭tQ;$zڹS-Ê˙uɠ! 6f:3⡀}Hk2ȩ.3LLMs0
Yhz'ciW<V١m><ɸs](1ܷD+L_cna34ټH
/-=ϓ<Gx@:PG$q M%5WLn_kki鵁2-}za!Q]SO~~N `ֆZ[u;s,rڌzvu.2eGEŉ
C}tCqH?L9e(jE$4CrF) F_ai:&ܘCn-&j\`nEp^ܤc=HJ(I7)pM# qL̓+kbYniinp}` g_:bnɮehbM@nLj32QޢX,mz&>T,մJkj0h}VmQiЂ3pNZ*#s`b̳}F}[O=?p.ϲ3C2 a} c\kCH:b'EBM?݃
){6F-EBС.+|='j;ߙ}~W_z1}shS4-x4]!\R#x20רK
ú(Ќ1lڋC}ls8ioA
iM83d
)a|ik-FGøMEc'?`"獫ğ{sܚMsxt/th/E1`bMAebMv`LOY5l97ܾηb}ɫusE&]liY:pr҉ZZj^u0=\^jXvFk9~f{i룎KSP㈻q8`k	pB"bCDE٘S?-ilS z"zq% I7<F#s	+Ɗ|bg:_H~2=S4a6#vVgwe1l*޹ݰ{w}{E"~^sӺ9ުeg&Fh5B@یutz%rc֪<{GIj芟lrr9&K!-#ָ(4:oMLCOr'Ø{iDJ|O[r{4Ws_Ό{b<^60').{HK!kt	91%Xp$͉kWS;;8pηwiY}k0gRYOr6::22шF>tܧT`JD=u:1h2xRWL}2}Ɇھ0271&offSSi0zCE̭X3rRy^3̭s_JEKi	a /05Y\&nEʵَpC]-i;jmCnap5ygM_i~WnsiʘԱ}XԌ1uTLO,M4=5ѽ=iZb܌<]GAƺeS)ИWyS{/PHwɵ\DKOVcS{{;XNG&ˏ&eodMqAhгݽXkF۞#G<*x<
Bi#gϋY5JJNò%ŭPFܩRLW&75E'?h4CG<k4rWlKcz&5&q27-?%\"+=
:=s1Wͽon/ƖFv K.ǘwksWf2&2E'S}<oqw.Ym3ڷ~}{nk<uȢ\)u꺕i9GiX2C-7B[ѐ;hitpr!ό
ejɶSޯiڒ7>k	[&(ȧsݟ@ry6$qY[Nqo.`tM Z0yk?sGK
6(Vd]RYC@onϿ>Y7̙DJ&z3M]5XZUfFư'j+\y.@v"Nƫ|
&tyx4Zt2i-\1{oOX6kD)f&_\J6^tg9I!f%8Ŷ&Z/ƕ_v sAQ:u7\;(k:Z:׿ w-Ǚ<޹zf>0ʣu*EYdjVj*ckVզ)?Tl~FǦB)?_}Ծ@Xc!X.o{hgߜ˫	[妧u~FoJZ 1C=
6<<ΥF G9m,^yR5iT8͝	yWntWW}R|G:^VK:lGU`cAܷ~~{VhMZU[GC19kA>+ԋT&"V#{:\nsC'1o}낮#p$ פr5x腽wvll~qcs\h(ϭb6lryo#ܹ8ƥgáA4x<2Cneْ--]~1mRCZcŪiǃe'j?۝ݱA2v1&zKps[%j|tJ-lsE3F;#)Xz~wo?f1q֧~F{3ɉ5ܹw+GȠW_yc|.x)s/?\qN~}*g[~ŝ>bW~{pf`~`fpq>m8R\#"ʓxڷlӡ}#zf׋+
\ީM
И&~#.QmT;T=cm0?7'7debsӓ>`4Lfܻ17gT<L^GK?Y7l|j3-׹W
`w	u	JϕC!ʓ+7:|7KJ/T5`P֠9V0s6AUq}oٲO]HQkK1s1Sq4Cfl?z>{W_2ɩ[vm(63ƚE7 3?{-~x\rg(W-{s-֌߾}{`s rZJ؀5Lbr9}̗7O*ҮvT[sH|Aԡ6kBcb08y7Vw}۴4=G$ՅbvC0ːrRs s?ñNs/{v1饉oӚ.i<̟/w147;n靁Xgq<7=pތ=}@{Q^^k[+ظ2Aycj(҃<9~s$2氱s#,H|Mޘ!8Wqw|
 +5ٔ:U hex[SJ^@z:/蘘k<#Cm8'\U1Vg;~n.z+*8xtOW{'ݕ{/lfVɩ,17֜07sLUWE=t39~ئ~iOᦱ=&Ȃ7}{˗'Gs@㮓Xnߞ s7<bUKEcb3s]hdU*YѲ`b	꟯;^U\˂{|r(_6cZ0UC-F+l{SKS]f~6~|;{)bMc!abB,|RjQ3o~q23>3oF~mp76Mg=٦M|X{ܦ?˦clw[rMDgE0#sC{͹X;w>lKAؚ5T 0n<,4Xl@f/1ODe#S2_vѲ:h߰~kv"f6hylaJC37LUƚhrzgHbn7K_б=ojj>{F7Mw߱_/~ʜg\a%(O<=Cc5@s z f=3鉎.VU7t4TC]UI$+*j_g|S9#)sF)P&}!:zHC5&+ӧwXo?֭O&>&]1S~՜@K'p6	&3:Q/J7|\qqu"y?N=+k7sg7Ǿ	6?KJXn:]V=:5kUO,~=PT;poCn dߞv+s8pcw|u7Ve%%lVҠW]ө}uVPA!9V[xn2psС6GNn\v,xz_~d6yLUck;z՜?~wo֔YD35`OҒk**k*ˊr.$09 zs_l:Ϻ8{sDNy|r"`2KkIXo#3B~zK<vΝ;o/(}e澘]U*1wn<oDM`	h=)kn7T))!HUAuzP(VSJ)։<=lV!
rS`9h9tX`I`oýГɐ]SejbL*x\
@(46}=Nq72#WM~^8~gkǖˈ{ieb=Wcsޒڿ8ߘz7UD\$ٗ#~+oKUĉ.MIVyUR}w]O_{NKhh<C<=͸F]&QPAkSSX.rr䝉	LU&-
ӐecpX8i2=7g|UU [q
\3<⦶m{$ZN|'+ǹxu G*w>`/\E-=~[|[XTNKUlP0TTu@F<3*,>izycg(a:ʑi(ёcSsM҆dh
bWwWtw=<o8A*L?TpS7:kK+66~imFƍ+'C^z8G9<ݽ;0"|\2G#(.Xߦ ;WduY7f⎋zkD81FAOZ&4鑾$)#!4J;&Z6Xnٺ/.>MDlt!!SUр8r4W.gPGK/mg}Z__Źl2yν's˘Mx؝<taf~ٹ7f{Ere6TV%A,[\V2LE %꠺xvy1FޕQ*պVː&J%Q+al4q"0W\pG-z>
 yG`AU92{UUAF[*Y?Cw1Wg.G=M+sfg[zxa{sN%h%`nAu[J|
CuEooURe=[&VaQƯ0":R\K\Uf\v&ؤ^Ĥ;Y0iOTU^Se,TeS"ӰōUQF)tV-wZ@r2~nyA%͉,'\Klx'f(17WUrW7F9o2.bNc-ZVb}UpoP"thݸĄPX'0-Uyfī Jc`m:<4qwq<nӂJu py\	iXm2WUQ28N_t_&	܆gC9R~29'ĪymS8BA t8	>4Yzտ} KA\u?2j))wCWSB@zo"'}&_c(LVGYӖ3*U]\9X<1>^v"\M^/t(Ϊ6o1\PL(UUeeespeɂJBΕz( FVߎڨ 0P [.v8<`- &}_˗UҪliVIu$zD
a7JRoP0 '|-)	 F5<>Sc	UZeA>Q;hXqm"wmf{7e{H?ƍ}s
8Q2Wcֹ+Oz-?sG8Z#ԑ#{xqxn)`÷!qd159Q,'^,;]=&==~pK$|Bԡɤ)Ed?V[`Ҫ
ά
t[B^Qo4Q#h8ZrE5ry5>"2&9w	v/QpNw `E8kj-a5yt;Z05pkTw6\Tk{=Ϛ0ϗ!")$!ĠOަ&$R@Iv+5dpQ< e_ut׶{:NttdXg٫#b'J9$p\~A"-GO NY^H"Ǌ*cs:=)KHQ9\A]mNY#rcdL:;[F
{)YgMu]v":G7v(^<E@;2jjtGNi:N95'2	TW
JIkwws]yZRR(~aruz&mRx0Y,e6.n/d!c	jFg:\<8SXL'.%i<SfX@)x2U$Ǯ^˭_i<S"E"en"*2J)	Zu8z?LK\1Iә2Ќ=́='^ؘg@``I-$΍oM	?`ڌOI30fbmd󞊔kc;LXXGB ^{ҷ5A(0&L&y¹V3Zq8fb7:hWO8&:[s'M'Gz5nk[	ju8vHKiQcB/Aݸy ^00I_ ]*eulr=1mĿ3+ICR5+4Jq)2ri(T`` (
K
ˠ@.)wR:W,MKN` ౣփ:^k8V*1o!MJ\rep*@q٠d\)ȩ	{JEv$e|}h.09[A+[:{0c_y?zdbDgVe+6v6FS:-~nc@KxJ3[2[o
C	{kGs(:+O9o'ZZ-j[['Zyo;rKFRd5w"i>y( [:"lvY	gG[~	V+tOf
J:-9:$'!~B_@\պM:ZSoH3MryF5oݾQmс5;YtC)[CsW7x%YɌ)e;s{m%v;[HdYY!	GF0'Ћ#=@sE%eIvgbs{x?o@m==ЎRj;3?}sJ߼9yg$d`qd{J퀽=X1jV9OJ-血@,b^"k6֏j׌Nhijku>_1>ބ7Ҙ모`06Lֲz-s7zˋfh; v:P^VMNEqS\U3zn0)ܞ%u80=E9=95ߐ,F᾿{;7EB;Νӈ.5,`5J1KG^ϟ%١q@ظs{f	(jXMŤq֓Oqѹ:e-0?+)Ϭ
ևP֧<}& [M~"w=6
*)(%̢Kbi}ku\kmrz,g}7!g&Ēn9;58j'YcoSe1D0tz.Vljz=\lC+$e o@Q OVԒ*V4#ؖWJeV[x̂Z:enṄ.P=]:aWR]P8Xpo/js.%8kz4*byVYC,ˠ;)5;.g[]dXĐ%q9#Jz*N<qr'߽ubwJ Cه./Y:]9feUVEMmܬlPt<j9lvvvQ]~~i^vr@JcsE<Hibl_~FI|#sI98%A̡\df-+i\L?\~ŷ>,x;u'UK-a9]3x]FJWmSNϭʰb%97Źj*?8r)0׿n
,773QU<+Jq9yv"hWvssY%vKn>Y@p]=S"T"6+5êiPA+<a̼gV	Q	:$Ź87s~[*	0e.`wcl|+-]rZ=Szv*7TvpPgs@2%7+;ov@XڋZ2C]Ӭ^5	^9]7(b/~~cϿ:-*CGn:$9;Gv6<*(v6lkQ+:. fIVvu
S3){֬!9'iy
gRnm0mLsmjܷgm}ro;.Ss?%2Fs!=Fpq^e2s7HP5	!
`eĪzEVr9=o2ԩ]PZϢWg44W Mbr:n\.&ҿQeʇ[
56gg(QSؠ5~k$#7knt	;lK#Hp=%4 <>u9@Gy>612bHiwG{#uS`F#vοf4N@;8埘4932Rxqn%<+0T\[+]T2}L/nANKO 9''ȀA׎sSgTlU.ŷzo::_گ-Z9];R(6sMۇ["vW㝼>iʄfj9uG`F?Exo~^!YL$L(5:ḁuk`rrv+HS)fҾֿnOiZײgT̩' gh鴯ȩ
Γ';H*A'J_ cY*Ep;u;wލ%Q|)HIDEb),:&dHUժԬy[<a1Мήty:M*U>&vew9;\"RĂK9; ۲{_C
to4v}	JFy:_G'6WTҿ}}l=>q`Ɖ/Wlx)?hhsD͝{zR6LGlgZz{6W}=2𣭏-\'8'hK\&ios׃a5$NyJrȚܲCuNYGGȉ}}C`7=gsrC6iDFҗ=Et`c:毞c v:ۜ{:H\6oJwa܇
z젬fs捷 X$$kGx#$҂jX&^ڝБo}˙L+3.LI\0\A9AѬVhuf:iXwoI4T/u֘qgi4V~a#}U+\n'"0{C><H7L>++U{t=EO)dv-q]ڽsߴ9ANq<9=thwmBR#i,2(%6ofyD`@vfc[!bG$$ј##γP
VE,5rZmL;}n٭%zYQЈQ3j2IqCN`k59MM5WMݦm0×;ۡsDuƭ7o|Ļ~\߇0=hR,4EUo2r2yӡh+wNig[{6b/uŻvm:if.h.|@]UY=Z D 9t7zIn9+@RPbijs\.dEPfmD&N=tM)X(AXZ0:*>;],-qǹB_B !(o؇!N\<}/RǰL`~y.lRjD̩+cim}L9o^BpJFA=WG64Ys%3~V^YkCYZaJ(0PP=cH+,C?Agc8G%QүeX+zxI`b26ΑUV(h~O}'adKNh󈰲S}}o#^WןBo8ڜ*9=M׾1!i*ś6e)Z9]y8*}S}fbSru\1%I$2D_ϕ.hP0SPP<()%nT*Z cHhGs))Mt:o_SnQ```3xNJEgX'b'{:kO54C"mGdsH{FѤxKǛ!9mIODan"'`{d;	HZyNp7s.wy,ɤ+B`?aU&hr ̙\vsm_}Wz4vSdgeل8<Mv&k~þwAeJAW25wYC暭b!J	Z0N2:a9<!%TTeT`m}gZN4}N_z`<9
ac&F6jnoNowGj7 }#)ΟNmp?e$0^YQ222y_᷷99to2%!avE	|LZ>]XIIĹmNlpKG*_zyeJsc8nx͋'n ?b*I_@i,.ǀ?U	(mӽ睊ATR)Nk7OO;l٭wn7Z5:NA''VR`L2be)_K@N9ML0p)19
@3G)=j
Ir{FR~>:@g gu'#S=*RmoL7W7lݺ z́绞Ϟ`9r^j<ל8=C綕4H/ґ+wo]D9}ݻw.y7	Ҁ8L)=lMʩT)en7N|S*^zv﮳aR^6hϡh$n)o(+yͳ_.?/Vjl6D7ٌVF82!#k$lqiD+,]YNBl<%Wb}s!z# 'Xz	[lbh9H޷}\ȇ'>ݑ%xƍ}X^QSrw޸yz~&u1_DǤDA00wF3J>*t.nimPwWT>_R{>mӭtqH&­qNȫstiXcń	hIsvbn-W3>is*8|͛	sg>~,A@vuǻw{Tv7o.Kv.%NŮA'YUل*$B7fU(`K{w텍Cj/C (es_c]mr;O HvV{t@2OcNdR1s+1گDfGHRR]bp_EWtRq['C'^ywH.żuot09s*Si=C됆g=6}mt~suP]~4sP	=ig/<g$n:r"_mJv_};(%<~5WˀB``qnCţ I1U4e`MЬ*ɍwSy&|)ߝ!ct(r잲+bqDP1s,wq'Тl(8}?y"Бt7g2m-ӟ}Ɯ>%!0zקzBw*{{wI2|
9CۺuoU[yWVN=y;[n%v
:[i46i2	?̩h^NT1g`=+*6oH[W{KϚvƁTtu)=NoMJ}k{m70Z8Û!C	.#/&LS[&/b.:A5mYtn߾ך3S>Gy,Lk5Ҹu;:szP,noc|\]{{X:Ƀ#k/|.&S^Pibnգt/؃.,K+lQ	J<
,3\JŹq;~;d=){EK){D_u}"bd>^0!֥_hoO*6&31lD.tq~%&}+z4uC]JСwӻ딇?{o_ݽuݻC]tsyyH;WؖvGV.L;P&GץvkƊ^M~V<\f-ܵi[P@;{}Ҷ-܊Zj:<YU;ly1D	ste'	bvJ}n=)-*ZFs[')vX/IYSn0GR-vj|{=0;CN_[܋<7C%5_Vc߽;n\pzL8ڰ"KD%Mdɥ\/?Z^MChs{]}5\`wVe@mOޛ? =t]4~L_ȀNL`MfsjM%[br`%FV?-că.9Ƃ(&J|r܌3{:G%yNN'CsT1绷0гo`	3yUȀCe4>Rbl.]>BIJU|R?~;X\lՆj8Ͼk&if*:OD(jnJ!iy|~.Q_ !$󰐎sFy[D۷{(	|"";BeBI[]z,H<ATOQ$۠=}6oal8.1c?6eG>Ȑa9q58@Ϣur] DdM"[.\8>RϐcP|rzic@An
el(s4J(Q131M%;BV-~wa=.Aڇs3ފ,}5Q>zţ,6l/H?"}{K̱mP:4DK:}RM>2Ǌ6tt!Lyyi%1%/̪_7 }k|y%rLriJO99RϕQBFTD-|N|̅Q-psri|?$TLG9SC-TYWHE2zrW5ǹӯвo#i?֜`[l\0_:h̝!I98;&]:l3 TRfBE%я]Yr(>A4:;TܔZsU-(JE`S}\\'+-8*xN1룅(|˂ܪ%'/~%ŹO<DLn4:f:e2=5;M2m72ZӧyCXuBt&\c[պuU:T=R1"Kro|j٪l87ڥs]va򚱰Zâfa@z׮]N߼Pw¶]mD
Y4\e	WI:5[	SSYanb.!29Y&I8CPh9&s(pB~8'N65u"eetYW^#:bCgo&B~ KU*ID6+:syz{rrm aM8:Y\g([^ *^dn`^sd&:V ̉5|9·.bDˢw$ǐI4WbN_:ͭmzs>4g^ztJ@vm/`a$	Vӆ]un*z,%CAWtg5؆5}K;u\nnLنe0Og飋:7)m+]i:ED	j1X߉ES-EzsV!_w(zPnnҡDh~I."bA̒vwC11=#\]!1;䅘LCu窊el.ɥ\;-ؾ}7%XUҺㇵeu[ʞܜNюi/\}}\.}X,kD3-wYBdI_M>o2)sU#L}mXTnB՛tfՔYCz(\v,d<R6%1dc?gbG9ǩчĜ%/I|!0QE(V8|=-,?Wge2Yѳ*+VSU\@Iܼ-4N7Kܓ'`&>׹n_G.r:ϼp9ܸ6U9lW/]bH"q203\((JPlbnUweP}[xx̍)Ms86lhmzEݸxJ"(YӟnϦoqsO2|+=0('eQc*H#ahӑdv1;Փ&NT{^\6	<OI2P.\zp.償B/QY(|=:sYa2䖻6
i-ȥCWJL<9> [zTǭNb.!!rƜx[2e\yCs40CsQ%Cst]Vl/HI@ټ*;w3Oq"=+ypit䓁1B ˟ !ޞ7ZL'	)-q`-].힤wbAAhVi@S«')ܢQϹ_l5k4bsS {($fh$?^ٕw꾱oCi͐t\Z:-s+c 撣}	Ѭ#sG`(07V|̭U3hZP	JϦf5tU7d<au5"H͉ײIh;CmQ\m	RYb>t]B/20K5dyftPs*QAPݠeD9nR \|(;[v}WZ8,M-C8~jiNa4>b{tr,NTsϢB&8ud`(*φhBQX)ʀ\DZہu\z10gG헄x.Pun+IKw.]t.нwRC@]@2`y(̞KJUO;Ore]1 nE4":.H27Wt\ddFܲ&0Y@.^tz1WK:Zǜw7Z
stSMoΐU )3ykgjPx<6_ͩ􎊄7'U!
Wm] 𾃹tB`t%7-T痻h!&Y8us&B1x(a{;V1#^k2o؊+>Xbx)A4zʧԇ
CIc$}d阻G9s˘1uz8ґvȊI񻧇Ž<3
:\.Pf#=R]W.5̱֩qY7Z `UTt+*ORЩt:2O
L쩠orPsr_t.S?^t4@"uW/NSH,mbGh]RSZYͰV>5xjqՅ5~;q<BfhSIqrII+=fr!"ѩaW=t<^˕!acgH+:
OSH}Ň)oi%=Q2[,w"&z4 .Ԅ&eI]4GA=w(v,-G:@Q$"6Xu(+gY疌
&%ũqf_?sTq	9z,Fq< 4pAđ/|ht訠S)`d<*[ܼ.r+^Z^%qs*@G\/xn1vvȔJ$S)}>Lf&Fơ4S*SXW0VFIƌυ-Wgy[ɋ>39QR*AЩ)	<>qfGذهRC0H@b&	^W@7D,.-.Jsz(b\,̢r2jw.<^G{&)8ϪЖLY,FיF6M`~9Ҵx/[:ep'1)=7<HvOm&s-zW  tLסcC+<NP0gQ![e9*b!ցS )^1>oqN];.υjfsR%%"y^"iK-ٴeܥ+*`wpBejFG( Ge>ȁ>L  Cކ4GiH< [ Zi\FTq.1)̉?H:fwk{C; 8Z4˱9s($,GwVkѫ1DuI\Ra.yb!gP2S楷Xn>:6*
G|FMND08FĨi.[Dy3
\&Ĝ\ )Kj@cJ6N95e6rUBV3>2SB`IEwLI}豂(.\>lCPj;=fd_ JSBX]sk# NxvJ{MZ鄣ed9t-2
CA' %3rr. xa~!j%%gHrt(+qQ67K^$`5#2T{D2ɃxGAcqAU37W)K\ZPʣG͇0!f별=ew8s+C+c,BV{Q(S|=5=ɮnȰA\39PhmfH?uANdɛ=/H-ͬ@]̓D҄iK\1bh0q]*{GN[5@rt䗴o_ۿut("@vBtsQE◮YyVV~u{x;_~}g߅Riv+PtX1iĲXzV3Iz9p]h:)<Zib+t.-EI_R!<?7 w+ZMEQI:iC8MA(Z26[mji~8[z(νRѻlW  *l\tHHC9
ZOIԆ)ԑ7>%^
pEqyxyz7i0L(3H{繊BM9-DH0њ4̝e]A	iuTP%@`VptBYJ`q1pn0}Qt+#^{qY]
+ ǩzT;@TaP'FE=sS껯:A8CÁ`~D?o;B6(rF9FB]pʴr+ūK/?>V.c 7--=I+>ʔ>Q
B@01;ͬt#޲Ʈ;&`)85:6r|e,b'p4;K~[e"'~omr")@O&*,y!%5$:(R1:ZG:\ݤ]^VvNAijJ̗at\#'^;|4e_77dʔ%g
4DR><ɥ(Ƈ-[RZX>~i\1^h%Z-8G'de\Fby	p1s6nXBHFG~RQjƅKTyh
)\6`
9EEe%e" &.+*)/O٥F^"y}ӧk;$L:(/(DW<wqd)"?׽M:(БU/c+޺yyyukt"`%TE|7N8p+fٳeA#q.qql##cf%_{zA*u Ht EG8<ďƗ^K/Jj \IȘϼsK?er(ڠ4{mJccb9~Ukris.d^^P2˳~*sSrLCJ4)+%J1]2K	K<v1Y$3/9zd
p1WmYXy	Tls>s\;>ǔ2o9J`gkw;޹rKi\09vʎpsb[C̟1:y钡|[w[ڎzd\#"z,4Pz':`m꜆^kʙ
ģWs_Ae1EsrUs8O.Ob3IoSGx2B4L'a9̞(#č5˳Y7	^+È~
5ILp]nTD\:W˫#At߽|6H2PH&H+@}:EhE`49Q}1fbn,C\蒓c0W_=xǽ@A[gO<̓7KS_z"8vxH449}/?OcU4OWkh	mIbCDq1%:zek.p$ܔUi,/^>-!لglղfрa&wCoQ\ABmyo%rw_ARbr:STrHGC&y}pC)Ngi9!eʵizauc^v8Zr3]>5LxVw2ln5uuu4æ!G	/iwЫZG,~Hjiӫ}q\D?U
b'MRƒkdԇ`x0rj:&^?OH-5JzPS!9$3Sc6ۖ8̏,;k"=_Ě9~R^$cƈhajk28McMnT7f2HOYNbojv܋&c5sަVI>''%D:94ntS}[[SO{{ɫk½/J_tssO]ǋ7ĉur2" 7Ȕ!ULY1@ӟOAydɬ֝;d: 4M\ּCC>Xy+n8\8-JslRKLVrhNte	]NDY􅃤RB}
lqx܄S:!6iRKJNC.H;xwz)!%?<&ǋB5g0N)7i1Ꟃ.	&(xv.&tS^(TqQZ˽Bkȧeadmni t~Gj\,8$eebCA)u>L\4a,bAG1~Nz̊!Ĝ+|A!N$)g-<o- u	~.+Fí~n4LH:W,-Z%;nuLcfpe-W&$ʉzTAܐ#JN_x}o-27S-dH&%ʄHr/dٔ6!%Π"J)7WzIŁ C~u{iGFe2=H:Llv1%x@esQan7C(ʑ
]k<k0e%m[yPziz$Ӥ9bЗ4ȘwOGZI0-Ή(J$D`(Yf8iATXMYPA96(?_}(ի"	`,(su2l@c!3k.d%Ďܳ\9jh4!m%=ny)䎡t1!7MNt<]&1iޮQ3m5+^f逻fSooPwo7*&WGA;:քxݭMcs\8%DB#gZ3DE\533KK
`8+.ay?\_LqߧFO|_C86Pb쓔n(i^>*EF<QC5jZF8{(Is8kZMM7h5xzM1u75Տ;Lc6MΖ[*'OEFvAuMoڙlmku65MMcrs2@Mh649Z{_4Fv\0j6E*!&/汇BQ6
 ~yp9|#N^,*'BaqۮJeWe!=O/G'/_=n|R̃W)3B̉P-Qx<Kb/ISVrt)N9ӥDRBh9:!k]-7u(HѠbMtt1rtҹ«utOx
yQYZt/N\Lj0+V%F<v ^Ҷ4Bo-กgU{ϭGٮmI#gcR\IhjĦUJ)-5%K Pp44yss1HryI%99ywMP7!.{Z!s	Ag$F7-t7(P&>+jPW]Ç~_/g.-[w	iyEj>s+cbGy",=蒞JJͬ.ܛ[&#Ȍ0W=>̭@h43FFLr({I<;J6<AXgWVVS6mg˿|{>}΢Tb^V#C'(MrٶQXC
9:$pXYa1*8u(9Ft?Dk>sotuRfU_nI#Q>rwWYΉADɬ>Gr|SW$"+ٕ.Q{ҸV?{gX2r)&]4M1[c.JJU);'4M`ИōΉ/W 1{*.1}9)!X17P@5jm!4 M/u.jǡlqGSogwrjn7F+o\Ax5uCEMMC艢-uȿr/梢Ji2y/؀:\D9bD,BV|g}gm\#Rb.OTy~p_~gm6S('bKE~ϣ1
2k#Ҏd֎	١۷;-cn]wI-sb9jsMQthJn.p|wxI:ZMRꈳFj'ziפm7@$9&ףd]7t?%IۤhyF8nIOTtf.=UQNQrexf|ptV=6xb.:؇fb;FBge+)SY)w)>e\?KAIQ>eDυRsJX
jQ`ji`2%jCIݲ:ޒ^E{'۷dvIB^pʝDESŒ;qԒ6hH~Sv=$cir")Jt3qosZ.-d	g&<^U+ws1qnq7=SnY^.Y^x$ԖjHFQRJ(c %/fsDW1%q_΂NRFQm)ByTO7I;iGQq2LsP7P(;L
_q4.+HNuHZklx+檄YhD%'Cô8ő}Vd^%%by6URTP9b_x<?L5ۼ\KeRC"]rq"wPb<bBAJZ52vK7D&y璖'-~s\B6Se瑟 <xPB\LQRmyةcLA Dlfs'2+^Ʋa4-bӭPJҚm(uJ`cOb-/\q.b)shI%goi$/b.sxPweH8Hf61ǋe:.|ar9\.%DPrˡT sfܟ},Q.!7JQv,DQz!QŜD")(Vk/2dKE߯깄9Zi~OK֥<j<锒*8"1'2Do<Glex"J-+IjIl^R^*Nv	õI)m !-}f3 
sBlv>2~(%q3j$fVϹ-F<,sKx"XXTX'
"Hr\d}si2b8\d 0zQTqJA KgM]`_pѶ_KcE
*x.lq~.sAB<+\:3L`ǌ<}en1GoqeVsʄf9 UVlm|\|b}%[n?9˨j
񊕓-;qNgƨU><kֈbXp=ˉ/Y6sh!Jܜ_PV> q.rf,@7o%AV yy㶤a ;AIFrO!%V8(n8uXBM^f#p<UX@,UR^عXʌe(u[ON:ͽq.G.4?uĆ̄XcD#:".WL4@[3Rٕ/x6@䌬1FqKC" Q-RI҇o<j++KتSW
k=taCĹ-itҷ\]\|`.f1}Ep۪爿g,FIɥ<REH?y<(ed.g#wlՔE.7pcH`6(zƣITjM_ȘZ?7s 9v]ARkyS<<9x!Hz=3sss"Ⱦ`ˀgY.(g1{(eYlT$6*?YfJJ-i%akQa,T1eu{p N)S@	de6+kǹ39D0;7Ü܌qoPmwO2$%e>裿~<zʕ>tG_B_R7~ҕ+MMʯiQGǯ}ѕ\u}v#m<ʥKWƯ&iT뗯|nlAp%1(Wo<X-{ w|~\?쳹c_#x/w?g_Я!t/S=hKY̅%ҥ+gDVZ=MWH|LɫSGB`l;B"]XqYErIcA9////}%_S3ј⋿?p[P3am˂(z>3ԅR'K̉GD*H[HwPb֬ҹ岹y*q3~Ys|ӿx?>iQ>9?WCK2!E>a.p~L| }eү0Uk9ӷ\f-#S˖^]T~=R=؃E=}eQ:&Dwz<OEy}\Awo\<Q.v'aE=\A 
&БʊĤ'T\;CDsWrnٽ[B߸dƆ{H%A~.Ժ2=\O[O\td]0\+\sO%d 9˓@گƇGuCfbR%6bf3%VrysOv=,<(hAn\,brw? &sAJh}CwKfua	fBE=ܬ{VV{1}܂I`FL2".^1nsOtn4V*%- B. G΄Kgc#\|?qnْ{p+ DaE?YrK淼nYq80rP=.@SOŧq^ B\[dْfPD]BӋ[@q.zVb48~-z31ÄH=u$T4ޒa4IY0qV_-z.l/YRKdnq~0,k1qnItYD{5,-8gIwzTPxHpf̷de3̈u=[[β89kn<!8_8ݙ8,gtKb	xO)Ӌ哇Ŷ-U2)./t+M9"]vϠ2豺s[sO0ݳ12(+3#C-u~ LOA-wP<3n_80w=	tnT65+RL0ĹigBu3B.b-F#DFyh򤸍CC`.~)3\pђEl<yE2%ٹnsOVFPALvT羿s%u.\EyZܓKgЫCk-kYotwW	VDu3eQNϑ]{bv(!ƂX8=fqnYD9WsPDMG'{Rsˈے<A9s?sKiFUoLcʒ(mJL%$$Z{Ŏ0Gh.<+گ\l+"&`ƹ"9B\c#"8,fq8Y3$e\ds&&`63CeN.1bn2Td0{yAGfVIebn9%^j$/inY[X-29y)\A+X\t=i[F!hAX!ؑE=fmhJ<)2]X+B^{?\{?`-T1K
2vL?ss"@[LH7İ*Q0$R-KJF;;G%.̱'sQLLĻ )q^9{`j$ՂK	wJXE=mx.91fSq!z2YEa.,^ˣ#a/r3%)Që{"+g-i`EQGS6薮l^RR~?Bʯ%EQ-*V0|ARԔl,]6SDaVm9Vieyh,..H_6zԝ4:roߌݽ/^y~_oJ_>n<ketogrHrGSCF={CR/hn~!}D|cYG|ǹhEZ-Sqshyp`鿴oCn(+)4+iCP .iF1'"%Od9.^yQQYQyqe1D:8X"Mʋ-vU׺ˋs\RTS)r-2
E@f5MZB;>\c<@`1oo	l"@s>GX81J 2y E<ƹv-iIIq͉/O
:}[?&mf(zD߷pz"x,(9ʊ+ˋ9]ٕeF'r\.etVrry=S׿

y"/8J'vKW(w777`~<E`QG`;̉_ Bs1cɂH=z(`]ѭ\/?l}="3
wH_tM8cn鲨4]Daxevv6SRRTRX8(Pt9ÖOS>2y\׵AcQLq(lRstm6ktejN97?q4I$|ᅏ/$ۜ8i[Fȼ?qј#_=vCg<ٗI/3芎zLK38]@(u甕EEEEEFcZ^ʅ#y5>070r)lwj"$eRJ+kܲKEvnS28=bb<Px[
4HܲȒ(D/\JJO,}EHxG'<?O~B
Jbhxr:}Hd>IVJRx^ؿ9cxϝ|QZZ~N	_VR%^ѠVr++sxGoQJ%e̗lv:8(zz.qMe	ķ@I2a䌑eqި1wpi1]-Y=etq9.9B&|{Gh0gbUp:`3!>0G0h13XR01-DxɩXր[.0hVq43*%iE|6DH|.kⲒMi׬^lW-9r;{_y9W?9\eVBEEE2p2JrZZyM[+nZӖ?,$GZ{ )o؂n9	z־+f W[\~=PlQyK$[|{3s-3i~!a;(6#{"13rt~KR锵v7.@WSs[vww_e.Jt8\A,8!b tcQannp6T_~0g;BlXx9ڒjHcQq1n[㝃CΞαGKfWntZ:ZZ߸оؽi6-Q|#f,c.̽Pwa[E2X@D^?z{ra%smkX]9nT2dJS.Uf{N0\ttC!/;:?~*'^CDv ~% քJ?i@)%uKͩLtjėH9aK(誌^.0YO7V󷏇^?؞J٦(mXmЉlOoOKK)=2{KVOw2X\544m_8}z9ef,s2t,4s9h2?m>{+?;]UEURJA@$\[<j %bob(a:r-CKA5zbF(\;F!\)-acw[s#o<+Bq#uvPÊ8K񙢙_ꉷ,9m7nHMr]<?{cO2?cwųNTx+`[V#Lۚ.ClĉO'cL.&/Y|t-VsaDK@R-ZtKtNWH:ol0'}ޭҰϏ5/Ȣi]xO4FG;"ėhēR-D@VՕs/m:mw.bmﵶRMŢ8`87Cc7P94e7bv"_lZ潕聞ΞbJgD ]C*fzg3y
wS]h?q~#i+ŅVёjc'ř3b#dnJ2\{lkjVz9X-PKmh*Xu~Q%SsxNc)rX\.<Xm\k.jkoojilntΎ(.,oO=cq+M+K}gͮޮl@"xycax`YI+}[X4L-1])㍌-K噑|ֶ|-g^*\ٖs9U(k%Rid\.w >w3$͂#.5a\9HX"bg{ywKjK%#HN;1P/tksCC95K{:RM޻vZ=/^ngSֹ{'N̞o[fGK4aZN,bBw=А+L&o_L[2F+牅Q94?xz2f~bgL]NSSd:5=W-9'CN4DQS4R	
X~W,ޅr6ߊVfi4aI3Uh]0Q'&ȀD^bKRm_ө{/&[ﵥϥh,c}rOof]_<7.ZzW&g~9U( ݥdƚ$rs]cʁUܶ[G0Nӧ
/GS+Zebt:|5lȩ4R)HYn(uÈjP0}rXq6AyJK^!sbN}0w|¾mXk{T}OޟޝGV>MM{VcX$-;B<VR˺ieOOO2vaoc]HcsGN_+axhmx4bm٬=]?A+外<,L"볲!DR`Kor{aʨ`"$vYLHJ$Ȕv2ehr[8xG,&ZdN#542wV;󢞲|~RZIw--/+Rl;gOG2Y˞?wyO^]wKKVɡ;cV`0쨗	|'L0S#_|2>qE,'1F1^9zʕ[e̍㘃wd!>LvSv:rNR-C@8*LBNYrU)v8Îx5IC9)+ݓp`+Ni))fp:]9OATdT}psRۡk?w;b,ֲ7go㽖M4v,$m8={cv'+K%5]ܗߛzñq+}Ǻ&bSwHsn(4`%c޹ 눖/~SSV6kFf.2n+o_~b,撱D.f"ae|u\g-V%ǥ]Tg2 ca<݂cK<'6=+	Yt'pFp9bie`,!
l|HPŲV:@ߊ$h8M.> h>_y(fSSva:wvϵXV-[^kD[7ۦ>J쬅<mu텕;6ۜỷEUfp:|c]G53T[7{.ݽ;2eqf,$SW*9\c5N:>ЕЖ\C}*郞e> u/RO"9ܺ{A99Kc]_q
EbuNR
\ u!Vt撱\3V-Z_iNmo><13kH<r3ߛv6'w>$>,ʩ_B$61dljl2V-[S鎎Ch;ty?h9d%tt`saj"n͘SB@} =yJ>y'#kHrXdn\qr:b1ʓNI-bB3tIE6Tb9J%gzJa5KUK}E\x黽
Tъx4rM]_>߿z5LYsqv|iݥ=}Nw?ݹ<|E0NssT&35v#ˎª屮D,ce3@9҂1ٍʌU*$chPM̅-WU=ԁI]VQƈ2K}!e@TSN>^J?	];!{;ɒ75rI$B&Kirȳiui	͒
5n	*)K08|b
;߬sOJDv4
7采n5gS-vv^/SÇG#S?{wa71b]jќ%;̎êeuǳ&z{q3k&[_޽;{wn,I&	3kg'1ce,VsrBj4e}S*U^UP6	Wv_ǣXz^Y)pZ[bd+?#C$Y8! XBН5cʥx17/|勥u_?xk7ϔnG]w׏|Hzqqi1ژ{Ӿ(wo5OQ_~k5?\89u?£|ϻݝS>A䃇4v23H;{*GXuQl1܌W{wrN0ar4Nfck.S~A1H;5EYsrЀ+.Y3OP? g=Va9<Zu|ʁFIE#Q0mT6T˟FhkP tr陻-\,~8}sa9U07\wř')@N>8řKţs[Nw1||^~{ÿ=z4Q/0Ǉxϝ].y}'/6w}w~s,\/v5%\9me{c2:	Ǟa5c17<܌6<ث9afdlaJrq@e@3I_Y?脎IVi $oT
n#<fPp?<)Ԋ`[[*=	\:5y_{#tzn97|pxB"yxtt.}-*ꖍXYKE[m%9mČ;>wt{bvy4oڿS;;$
ۍ˾~Y	bbn?K&F^29L
GҥBCRT	ZduLҊUŞSʒ\(DGUyA5635y_Glċc?ر'E#<{!iָe@"91gVת'_]'{t\*\e̥]Ksxg2[d},1Sg,{動ٕ7竿b2֙϶&3Mn!tjbhh(O
n3xQ6dKQdjOlYbezƧ&3$83S偫2smeebvfZ'sץ&#M3N;J1ta8}pdݑK9[4\1WxnLsQL>>-v&S3t;Z]V7{Y['VݻZǎOà䭷&IVaw.,a%$]!<6uΞdWdϜ.NMlO&<4^n5V/3je@N`TrW-I?Sv 6sݯ]?ZwsQkusdK@bo|\+J8ώ̘(ބٕǳfX8q[ެ}{sO,D<;N9e2-.YXa.!if%ٝv0</60$38o,S01^Qf9U(рS֠ƚ#EDˠDyi	aƖkWӥ=T{,z Cqp);;46iv94;8v
:5W[CƳ:a&IL
X4L&ktID_{1JOXxS2I*cSX㴭T[p]1jȹ?Z8NnIp;.~@Us
qU!B#$̺U=eԡ?Wv/kΝ/za]/;_pNg^[N;Ukgy]Az:g&gl/Osvu'ڵsvv9;R/8WG-p|+_sWTz$F<3^A`(TW9%ɒ8kWUwc}lV#*CtKi=We{hPgp9̛b'Sc( a; :$pF{QCײʘc6! bN噦A*z'_& c`~8;-:_:%P,U)Rr^#rsu5N]5jV#Yξ5kPޮ؈HT*"[sZ|$?mz8m<AP&z֋("CNCT-(kBM9c; y52`TүYdSqM|Iag<5y~Fp/ߢrN<KEsxAT0X7Raq(hws2YQ\7~}y'_apػϻC]!e%b03M̱"P%2trqIa+'2a%M>b޼'\])ܦ#zT8E';+C	uYƺ@5)I5+;RqТP^0zW'gPT_1qAf׃Hq'6ɦ;/)
&I")s	QyhjW	\iSn)Iw@Npx!s3
ҹ`lII1:f`A]bw"2jVa;k9U#FUޜLŷԀeQoTU#zmDC3Y-pԻNVB"^1
r>AN!l b0GKWeFL.#"~KVmJnWCkkkExnpK5O+54n^~p8c	r P3CHtQP06c}|k3rU%es%#DlrI(t]UA@w{ڊO_0]MV+#2>U,fq`lMiԅ#i]6`mH[ z8h6Su^6GUͤ4xF9x\]RV>-ĭ᧔"OO`kcHA%%.VYs d$>Sw	k{r+}eUJ][UPfA^[4'	6Sa&2Ԑ6ZVpԊ|#U)\}#M|6	sUXNFj3u>nBջB{ZڰVoGZק\U^j+=k+==[Ƒ?KB]*HuDI5@ bӢpȫ	tD0i:0oF?#!zyj_7o [m$AXwJvÒ;*`o<o7z&֪{2n5ą`CW()|Ӝ<f'0KlX2Iq5{3#OR=ayXf$t{iLаǡEFr"q^8Eaɝ\ +ے4vEZnRT֚ːݗ/'"I
R`vytqq-1#eҘqͯ98@YSDx|@p?Wl1FД`HS&"9x0m35vB'05х 6T(
Hs[R (̓+6XK@Dok@lE!eQX1\* «ZOL8t*^՞]HsCNngOHQ2Zo(R0'J::Rm@;a	Ic]6L|a!Yr0\7(A)檖Ц~XRE6"U&PdJOFՆ>HjR\HB'ɒvs\Hnm6PK6wUqG"xzO| ٴU].t3ׯ|&5!!uEl#$L2IC@Z}Ä^4MyJ`'!792T	{аꥤ׃~6ݪ#N'X#!c"!ᶋxN0jD"79<wJ\O$hQ.9"iOP7x?`lI'J&!-Q%_
<}j!RuwWkW^0oa.9)NmP-!ua湡D{	Իug^Qjzca;-MF1(l8P1 tKəYYFDVR~	 յfY!ϛ0+e}&޴pYbo`sy|Ei<4A'=R9#Hy+,oa6sB<4ļ6AS7 '3
lp(VCCq܄h2emXD(@%y@	.2-Swѥ l{<SS`*{%橔vf	#H2{$q (<@m{^),EcOqr -(*)4Q%6RAq_n)%l]pBpa;@q,ʷrݑJpIP9O!J'י^I'>#&_ tDi鯪YaZx.rMTýT<KAN21B>JB>\c:w>t%;OT"M`A4A@-ɂCTqxRag0WRGH>EȨk>9<KEkǲt.6j;UMxPs	kBCtrCO*5*܃ΙpJϠz:⩟_g麷.)G<f"pY2	v"d"AX/"/f0 zMi)ǐlE4P7|{ZBSY|Yࡺ㡻[՞ߥh\YfYC5Y)1	`Ջ+0#l0Gɵ%tR3T
_A>J#dvC|kHʶW%ˍdYdJ\ҰhAmKQDĀzg~0%-\UO#^p:i	a8xDeUB3}Hf=GaHZzʃ5HEYIHbdv(*EiT
v!,<CĎ%9ٸ2
6ϑ"( tn,`C8%`y.=A9!ĚnzxsZ0fRV_N`m"BsT9ST7)Y,:.8!IyF&J g4@*zHu"P#<K<,=q#,CǍaT|&=;9)JBEf gT:r2Ӎ
%U4>@ 'ڸ痒Ja&C=4}*&)b;G=)=TРZUefF k,w߬k<.[i>? 4Qi[fMy.3(Mm%@ :_ oI[(MQh=rTRDU}\~΄\k٠z|/sxF<
OH%#.Fҹ3JXH*y
P)?$ jK67]z*FO_qdjyIxXU?)BfU?)b%0HB",GQޛ .tB$`%BCV쉴̕](FUݻMmYbPRꂧ*C`SD|De߁@O{Ƨx~xӉvH4Tue;VUbs'=;"hN"juE}S&$K
ab*<6a_+Ht(oC\7E:-vTKJ֑2@az2Fikq"fd mczGt>)0OlQg%Fe#HPnK]zⷪ"IpqS2&<GpH&XM?b|*r
!  qٮ|*}jc!ʹhJ+A`R3SPs8u*hsdswrxp$n!P`r>v;Y^ϟA9wA@"3<.r֮S0$5&"LNe(0[DnH9>JtQLhTTx]́፶uPux<B*=38HEpiqFnZ=?*s#yD$T) nj擖NcOTZhDΦˠf)BbWXsfeQ[zy;5"~s {0FL&Ϧok*7V|`&|AZ67擧Pf25Ḇ &!/i䏞5\x QMCgoAf]C%. 3KI%\+%kbM	f)~S AԾ'@a#151YJ.Yɼ+
K,_&ZxzFBίLzI
ЄA }UϯIm>$J<Ewi0f6g!/) .4fhtA$pGNXT<T[*0"HfF5(DKr[좻=?a"
	Lm/h6ubm*}y
hd#OME?;S|w\Bпrna*=Puy'Į[>py!_kAMd GqO(+V*8Ճ1y-<2x@Aqȧ܇Wcʨ#F^/.5ԠNw=!S[Dʭu8Sa[1CԐ+<sy7^*Rs;<[jgJP?yyxnBG;<
.$V
,jBڛ*U06%C#"
*Z4LDՌ+/H!J^C>:ݖ? ?R-
{G L
KYZMbvRylj*M#_E.L?B3MJdSh(^g"MU\qMb$OBߍmwH_TBQMV9DPx HH<OayH"𩲚a)15\N\Hs'_ m#F0`#F0`#F0`#x_p#    IENDB`PK      \4o  o  -  codeinwp/themeisle-sdk/assets/images/neve.pngnu W+A        PNG

   IHDR   S   Q   z   	pHYs        sRGB    gAMA  a  IDATxOlTEǿ-VBOTEDP+@b"p4F"m!xhbb <x0!rQ/*5,hU*%Iuӭ۲7W$QOmof~
ep%ATpELzw=Nt[2 <8Lsb=<
=Dva0<4}ѡMx!d5S,%)Xn5Nhno:'z,wHA&ddZFbjĊ+FbjĊ+FbjĊ+FjMWF'Js#j.QP(:X0/^մeЃb/i[[?%\)Ԑz$J <H@7J*FпDbQKS)Ud^D5xWϓ8w;4N@}ٳcͭc髲lvoAu #_c_zߏH'f8(MLC`>:w}7 "E\Y9Pv
s^
9bCzw/`C0k[;*2</D־>`.=gܷ"!zz|Rl}|`wE|L@CA0O)l0tWݹ!ex-~t$6Qa$ۜ3:"9O=gҋyaɛpsSG+<0Wr2TP9nEˈ,QD]ȱym5AbmM1y!cXtK[h}N"fS$HЧڨ;5@A譓zv¯V|7J~ǻ_cT?9t̥GSck$Ģ~ӐI!"mZuQoBߙ`0;.-3G_g72IPHl̭e:a}eFKlJH=-x`=c!cլC7"
zN2W;h~y8x9.-v]#I]:"ZB!vEc&p,E }g?wF+FY!ATT7ʡ4r;J<Mi+ ٣Pĉ1vQ{4=\	-Vb
g+כ3?c6)pG1uL.LYps`3z5b-yBVٰ_/Pst?X15bH=!֙l">nԘPCg3цrO".<gvLMŴ\#VLi5S5u1ejĊ+Fbjā_`ԭL+}wQ3^sa&1;aϖ4q:'53UD6f%f(=~^j#<֕9Qߺ">K8pS̒xh71ftq(L3Ce!v_]Xb    IENDB`PK      \$B    E  codeinwp/themeisle-sdk/assets/elFinderVolumeLocalFileSystem.class.phpnu W+A        <?php

// Implement similar functionality in PHP 5.2 or 5.3
// http://php.net/manual/class.recursivecallbackfilteriterator.php#110974
if (!class_exists('RecursiveCallbackFilterIterator', false)) {
    class RecursiveCallbackFilterIterator extends RecursiveFilterIterator
    {
        private $callback;

        public function __construct(RecursiveIterator $iterator, $callback)
        {
            $this->callback = $callback;
            parent::__construct($iterator);
        }

        public function accept()
        {
            return call_user_func($this->callback, parent::current(), parent::key(), parent::getInnerIterator());
        }

        public function getChildren()
        {
            return new self($this->getInnerIterator()->getChildren(), $this->callback);
        }
    }
}

/**
 * elFinder driver for local filesystem.
 *
 * @author Dmitry (dio) Levashov
 * @author Troex Nevelin
 **/
class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver
{

    /**
     * Driver id
     * Must be started from letter and contains [a-z0-9]
     * Used as part of volume id
     *
     * @var string
     **/
    protected $driverId = 'l';

    /**
     * Required to count total archive files size
     *
     * @var int
     **/
    protected $archiveSize = 0;

    /**
     * Is checking stat owner
     *
     * @var        boolean
     */
    protected $statOwner = false;

    /**
     * Path to quarantine directory
     *
     * @var string
     */
    private $quarantine;

    /**
     * Constructor
     * Extend options with required fields
     *
     * @author Dmitry (dio) Levashov
     */
    public function __construct()
    {
        $this->options['alias'] = '';              // alias to replace root dir name
        $this->options['dirMode'] = 0755;            // new dirs mode
        $this->options['fileMode'] = 0644;            // new files mode
        $this->options['rootCssClass'] = 'elfinder-navbar-root-local';
        $this->options['followSymLinks'] = true;
        $this->options['detectDirIcon'] = '';         // file name that is detected as a folder icon e.g. '.diricon.png'
        $this->options['keepTimestamp'] = array('copy', 'move'); // keep timestamp at inner filesystem allowed 'copy', 'move' and 'upload'
        $this->options['substituteImg'] = true;       // support substitute image with dim command
        $this->options['statCorrector'] = null;       // callable to correct stat data `function(&$stat, $path, $statOwner, $volumeDriveInstance){}`
        if (DIRECTORY_SEPARATOR === '/') {
            // Linux
            $this->options['acceptedName'] = '/^[^\.\/\x00][^\/\x00]*$/';
        } else {
            // Windows
            $this->options['acceptedName'] = '/^[^\.\/\x00\\\:*?"<>|][^\/\x00\\\:*?"<>|]*$/';
        }
    }

    /*********************************************************************/
    /*                        INIT AND CONFIGURE                         */
    /*********************************************************************/

    /**
     * Prepare driver before mount volume.
     * Return true if volume is ready.
     *
     * @return bool
     **/
    protected function init()
    {
        // Normalize directory separator for windows
        if (DIRECTORY_SEPARATOR !== '/') {
            foreach (array('path', 'tmbPath', 'tmpPath', 'quarantine') as $key) {
                if (!empty($this->options[$key])) {
                    $this->options[$key] = str_replace('/', DIRECTORY_SEPARATOR, $this->options[$key]);
                }
            }
            // PHP >= 7.1 Supports UTF-8 path on Windows
            if (version_compare(PHP_VERSION, '7.1', '>=')) {
                $this->options['encoding'] = '';
                $this->options['locale'] = '';
            }
        }
        if (!$cwd = getcwd()) {
            return $this->setError('elFinder LocalVolumeDriver requires a result of getcwd().');
        }
        // detect systemRoot
        if (!isset($this->options['systemRoot'])) {
            if ($cwd[0] === DIRECTORY_SEPARATOR || $this->root[0] === DIRECTORY_SEPARATOR) {
                $this->systemRoot = DIRECTORY_SEPARATOR;
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $this->root, $m)) {
                $this->systemRoot = $m[1];
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $cwd, $m)) {
                $this->systemRoot = $m[1];
            }
        }
        $this->root = $this->getFullPath($this->root, $cwd);
        if (!empty($this->options['startPath'])) {
            $this->options['startPath'] = $this->getFullPath($this->options['startPath'], $this->root);
        }

        if (is_null($this->options['syncChkAsTs'])) {
            $this->options['syncChkAsTs'] = true;
        }
        if (is_null($this->options['syncCheckFunc'])) {
            $this->options['syncCheckFunc'] = array($this, 'localFileSystemInotify');
        }
        // check 'statCorrector'
        if (empty($this->options['statCorrector']) || !is_callable($this->options['statCorrector'])) {
            $this->options['statCorrector'] = null;
        }

        return true;
    }

    /**
     * Configure after successfull mount.
     *
     * @return void
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function configure()
    {
        $hiddens = array();
        $root = $this->stat($this->root);

        // check thumbnails path
        if (!empty($this->options['tmbPath'])) {
            if (strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['tmb'] = $this->options['tmbPath'];
                $this->options['tmbPath'] = $this->_abspath($this->options['tmbPath']);
            } else {
                $this->options['tmbPath'] = $this->_normpath($this->options['tmbPath']);
            }
        }
        // check temp path
        if (!empty($this->options['tmpPath'])) {
            if (strpos($this->options['tmpPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['temp'] = $this->options['tmpPath'];
                $this->options['tmpPath'] = $this->_abspath($this->options['tmpPath']);
            } else {
                $this->options['tmpPath'] = $this->_normpath($this->options['tmpPath']);
            }
        }
        // check quarantine path
        $_quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if (strpos($this->options['quarantine'], DIRECTORY_SEPARATOR) === false) {
                $_quarantine = $this->_abspath($this->options['quarantine']);
                $this->options['quarantine'] = '';
            } else {
                $this->options['quarantine'] = $this->_normpath($this->options['quarantine']);
            }
        } else {
            $_quarantine = $this->_abspath('.quarantine');
        }
        is_dir($_quarantine) && self::localRmdirRecursive($_quarantine);

        parent::configure();

        // check tmbPath
        if (!$this->tmbPath && isset($hiddens['tmb'])) {
            unset($hiddens['tmb']);
        }

        // if no thumbnails url - try detect it
        if ($root['read'] && !$this->tmbURL && $this->URL) {
            if (strpos($this->tmbPath, $this->root) === 0) {
                $this->tmbURL = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root) + 1));
                if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
                    $this->tmbURL .= '/';
                }
            }
        }

        // set $this->tmp by options['tmpPath']
        $this->tmp = '';
        if (!empty($this->options['tmpPath'])) {
            if ((is_dir($this->options['tmpPath']) || mkdir($this->options['tmpPath'], $this->options['dirMode'], true)) && is_writable($this->options['tmpPath'])) {
                $this->tmp = $this->options['tmpPath'];
            } else {
                if (isset($hiddens['temp'])) {
                    unset($hiddens['temp']);
                }
            }
        }
        if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
            $this->tmp = $tmp;
        }

        // check quarantine dir
        $this->quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if ((is_dir($this->options['quarantine']) || mkdir($this->options['quarantine'], $this->options['dirMode'], true)) && is_writable($this->options['quarantine'])) {
                $this->quarantine = $this->options['quarantine'];
            } else {
                if (isset($hiddens['quarantine'])) {
                    unset($hiddens['quarantine']);
                }
            }
        } else if ($_path = elFinder::getCommonTempPath()) {
            $this->quarantine = $_path;
        }

        if (!$this->quarantine) {
            if (!$this->tmp) {
                $this->archivers['extract'] = array();
                $this->disabled[] = 'extract';
            } else {
                $this->quarantine = $this->tmp;
            }
        }

        if ($hiddens) {
            foreach ($hiddens as $hidden) {
                $this->attributes[] = array(
                    'pattern' => '~^' . preg_quote(DIRECTORY_SEPARATOR . $hidden, '~') . '$~',
                    'read' => false,
                    'write' => false,
                    'locked' => true,
                    'hidden' => true
                );
            }
        }

        if (!empty($this->options['keepTimestamp'])) {
            $this->options['keepTimestamp'] = array_flip($this->options['keepTimestamp']);
        }

        $this->statOwner = (!empty($this->options['statOwner']));

        // enable WinRemoveTailDots plugin on Windows server
        if (DIRECTORY_SEPARATOR !== '/') {
            if (!isset($this->options['plugin'])) {
                $this->options['plugin'] = array();
            }
            $this->options['plugin']['WinRemoveTailDots'] = array('enable' => true);
        }
    }

    /**
     * Long pooling sync checker
     * This function require server command `inotifywait`
     * If `inotifywait` need full path, Please add `define('ELFINER_INOTIFYWAIT_PATH', '/PATH_TO/inotifywait');` into connector.php
     *
     * @param string $path
     * @param int    $standby
     * @param number $compare
     *
     * @return number|bool
     * @throws elFinderAbortException
     */
    public function localFileSystemInotify($path, $standby, $compare)
    {
        if (isset($this->sessionCache['localFileSystemInotify_disable'])) {
            return false;
        }
        $path = realpath($path);
        $mtime = filemtime($path);
        if (!$mtime) {
            return false;
        }
        if ($mtime != $compare) {
            return $mtime;
        }
        $inotifywait = defined('ELFINER_INOTIFYWAIT_PATH') ? ELFINER_INOTIFYWAIT_PATH : 'inotifywait';
        $standby = max(1, intval($standby));
        $cmd = $inotifywait . ' ' . escapeshellarg($path) . ' -t ' . $standby . ' -e moved_to,moved_from,move,close_write,delete,delete_self';
        $this->procExec($cmd, $o, $r);
        if ($r === 0) {
            // changed
            clearstatcache();
            if (file_exists($path)) {
                $mtime = filemtime($path); // error on busy?
                return $mtime ? $mtime : time();
            } else {
                // target was removed
                return 0;
            }
        } else if ($r === 2) {
            // not changed (timeout)
            return $compare;
        }
        // error
        // cache to $_SESSION
        $this->sessionCache['localFileSystemInotify_disable'] = true;
        $this->session->set($this->id, $this->sessionCache);
        return false;
    }

    /*********************************************************************/
    /*                               FS API                              */
    /*********************************************************************/

    /*********************** paths/urls *************************/

    /**
     * Return parent directory path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dirname($path)
    {
        return dirname($path);
    }

    /**
     * Return file name
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _basename($path)
    {
        return basename($path);
    }

    /**
     * Join dir name and file name and retur full path
     *
     * @param  string $dir
     * @param  string $name
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _joinPath($dir, $name)
    {
        $dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $path = realpath($dir . DIRECTORY_SEPARATOR . $name);
        // realpath() returns FALSE if the file does not exist
        if ($path === false || strpos($path, $this->root) !== 0) {
            if (DIRECTORY_SEPARATOR !== '/') {
                $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
                $name = str_replace('/', DIRECTORY_SEPARATOR, $name);
            }
            // Directory traversal measures
            if (strpos($dir, '..' . DIRECTORY_SEPARATOR) !== false || substr($dir, -2) == '..') {
                $dir = $this->root;
            }
            if (strpos($name, '..' . DIRECTORY_SEPARATOR) !== false) {
                $name = basename($name);
            }
            $path = $dir . DIRECTORY_SEPARATOR . $name;
        }
        return $path; 
    }

    /**
     * Return normalized path, this works the same as os.path.normpath() in Python
     *
     * @param  string $path path
     *
     * @return string
     * @author Troex Nevelin
     **/
    protected function _normpath($path)
    {
        if (empty($path)) {
            return '.';
        }

        $changeSep = (DIRECTORY_SEPARATOR !== '/');
        if ($changeSep) {
            $drive = '';
            if (preg_match('/^([a-zA-Z]:)(.*)/', $path, $m)) {
                $drive = $m[1];
                $path = $m[2] ? $m[2] : '/';
            }
            $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
        }

        if (strpos($path, '/') === 0) {
            $initial_slashes = true;
        } else {
            $initial_slashes = false;
        }

        if (($initial_slashes)
            && (strpos($path, '//') === 0)
            && (strpos($path, '///') === false)) {
            $initial_slashes = 2;
        }

        $initial_slashes = (int)$initial_slashes;

        $comps = explode('/', $path);
        $new_comps = array();
        foreach ($comps as $comp) {
            if (in_array($comp, array('', '.'))) {
                continue;
            }

            if (($comp != '..')
                || (!$initial_slashes && !$new_comps)
                || ($new_comps && (end($new_comps) == '..'))) {
                array_push($new_comps, $comp);
            } elseif ($new_comps) {
                array_pop($new_comps);
            }
        }
        $comps = $new_comps;
        $path = implode('/', $comps);
        if ($initial_slashes) {
            $path = str_repeat('/', $initial_slashes) . $path;
        }

        if ($changeSep) {
            $path = $drive . str_replace('/', DIRECTORY_SEPARATOR, $path);
        }

        return $path ? $path : '.';
    }

    /**
     * Return file path related to root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _relpath($path)
    {
        if ($path === $this->root) {
            return '';
        } else {
            if (strpos($path, $this->root) === 0) {
                return ltrim(substr($path, strlen($this->root)), DIRECTORY_SEPARATOR);
            } else {
                // for link
                return $path;
            }
        }
    }

    /**
     * Convert path related to root dir into real path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _abspath($path)
    {
        if ($path === DIRECTORY_SEPARATOR) {
            return $this->root;
        } else {
            $path = $this->_normpath($path);
            if (strpos($path, $this->systemRoot) === 0) {
                return $path;
            } else if (DIRECTORY_SEPARATOR !== '/' && preg_match('/^[a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . '/', $path)) {
                return $path;
            } else {
                return $this->_joinPath($this->root, $path);
            }
        }
    }

    /**
     * Return fake path started from root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _path($path)
    {
        return $this->rootName . ($path == $this->root ? '' : $this->separator . $this->_relpath($path));
    }

    /**
     * Return true if $path is children of $parent
     *
     * @param  string $path   path to check
     * @param  string $parent parent path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _inpath($path, $parent)
    {
        $cwd = getcwd();
        $real_path = $this->getFullPath($path, $cwd);
        $real_parent = $this->getFullPath($parent, $cwd);
        if ($real_path && $real_parent) {
            return $real_path === $real_parent || strpos($real_path, rtrim($real_parent, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR) === 0;
        }
        return false;
    }



    /***************** file stat ********************/

    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     * If file does not exists - returns empty array or false.
     *
     * @param  string $path file path
     *
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        $stat = array();

        if (!file_exists($path) && !is_link($path)) {
            return $stat;
        }

        //Verifies the given path is the root or is inside the root. Prevents directory traveral.
        if (!$this->_inpath($path, $this->root)) {
            return $stat;
        }

        $stat['isowner'] = false;
        $linkreadable = false;
        if ($path != $this->root && is_link($path)) {
            if (!$this->options['followSymLinks']) {
                return array();
            }
            if (!($target = $this->readlink($path))
                || $target == $path) {
                if (is_null($target)) {
                    $stat = array();
                    return $stat;
                } else {
                    $stat['mime'] = 'symlink-broken';
                    $target = readlink($path);
                    $lstat = lstat($path);
                    $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                    $linkreadable = !empty($ostat['isowner']);
                }
            }
            $stat['alias'] = $this->_path($target);
            $stat['target'] = $target;
        }

        $readable = is_readable($path);

        if ($readable) {
            $size = sprintf('%u', filesize($path));
            $stat['ts'] = filemtime($path);
            if ($this->statOwner) {
                $fstat = stat($path);
                $uid = $fstat['uid'];
                $gid = $fstat['gid'];
                $stat['perm'] = substr((string)decoct($fstat['mode']), -4);
                $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
            }
        }

        if (($dir = is_dir($path)) && $this->options['detectDirIcon']) {
            $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
            if ($this->URL && file_exists($favicon)) {
                $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
            }
        }

        if (!isset($stat['mime'])) {
            $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
        }
        //logical rights first
        $stat['read'] = ($linkreadable || $readable) ? null : false;
        $stat['write'] = is_writable($path) ? null : false;

        if (is_null($stat['read'])) {
            if ($dir) {
                $stat['size'] = 0;
            } else if (isset($size)) {
                $stat['size'] = $size;
            }
        }

        if ($this->options['statCorrector']) {
            call_user_func_array($this->options['statCorrector'], array(&$stat, $path, $this->statOwner, $this));
        }

        return $stat;
    }

    /**
     * Get stat `owner`, `group` and `isowner` by `uid` and `gid`
     * Sub-fuction of _stat() and _scandir()
     *
     * @param integer $uid
     * @param integer $gid
     *
     * @return array  stat
     */
    protected function getOwnerStat($uid, $gid)
    {
        static $names = null;
        static $phpuid = null;

        if (is_null($names)) {
            $names = array('uid' => array(), 'gid' => array());
        }
        if (is_null($phpuid)) {
            if (is_callable('posix_getuid')) {
                $phpuid = posix_getuid();
            } else {
                $phpuid = 0;
            }
        }

        $stat = array();

        if ($uid) {
            $stat['isowner'] = ($phpuid == $uid);
            if (isset($names['uid'][$uid])) {
                $stat['owner'] = $names['uid'][$uid];
            } else if (is_callable('posix_getpwuid')) {
                $pwuid = posix_getpwuid($uid);
                $stat['owner'] = $names['uid'][$uid] = $pwuid['name'];
            } else {
                $stat['owner'] = $names['uid'][$uid] = $uid;
            }
        }
        if ($gid) {
            if (isset($names['gid'][$gid])) {
                $stat['group'] = $names['gid'][$gid];
            } else if (is_callable('posix_getgrgid')) {
                $grgid = posix_getgrgid($gid);
                $stat['group'] = $names['gid'][$gid] = $grgid['name'];
            } else {
                $stat['group'] = $names['gid'][$gid] = $gid;
            }
        }

        return $stat;
    }

    /**
     * Return true if path is dir and has at least one childs directory
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _subdirs($path)
    {

        $dirs = false;
        if (is_dir($path) && is_readable($path)) {
            if (class_exists('FilesystemIterator', false)) {
                $dirItr = new ParentIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::SKIP_DOTS |
                        FilesystemIterator::CURRENT_AS_SELF |
                        (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    )
                );
                $dirItr->rewind();
                if ($dirItr->hasChildren()) {
                    $dirs = true;
                    $name = $dirItr->getSubPathName();
                    while ($dirItr->valid()) {
                        if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
                            $dirs = false;
                            $dirItr->next();
                            $name = $dirItr->getSubPathName();
                            continue;
                        }
                        $dirs = true;
                        break;
                    }
                }
            } else {
                $path = strtr($path, array('[' => '\\[', ']' => '\\]', '*' => '\\*', '?' => '\\?'));
                return (bool)glob(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
            }
        }
        return $dirs;
    }

    /**
     * Return object width and height
     * Usualy used for images, but can be realize for video etc...
     *
     * @param  string $path file path
     * @param  string $mime file mime type
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dimensions($path, $mime)
    {
        clearstatcache();
        return strpos($mime, 'image') === 0 && is_readable($path) && filesize($path) && ($s = getimagesize($path)) !== false
            ? $s[0] . 'x' . $s[1]
            : false;
    }
    /******************** file/dir content *********************/

    /**
     * Return symlink target file
     *
     * @param  string $path link path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function readlink($path)
    {
        if (!($target = readlink($path))) {
            return null;
        }

        if (strpos($target, $this->systemRoot) !== 0) {
            $target = $this->_joinPath(dirname($path), $target);
        }

        if (!file_exists($target)) {
            return false;
        }

        return $target;
    }

    /**
     * Return files list in directory.
     *
     * @param  string $path dir path
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function _scandir($path)
    {
        elFinder::checkAborted();
        $files = array();
        $cache = array();
        $dirWritable = is_writable($path);
        $dirItr = array();
        $followSymLinks = $this->options['followSymLinks'];
        try {
            $dirItr = new DirectoryIterator($path);
        } catch (UnexpectedValueException $e) {
        }

        foreach ($dirItr as $file) {
            try {
                if ($file->isDot()) {
                    continue;
                }

                $files[] = $fpath = $file->getPathname();

                $br = false;
                $stat = array();

                $stat['isowner'] = false;
                $linkreadable = false;
                if ($file->isLink()) {
                    if (!$followSymLinks) {
                        continue;
                    }
                    if (!($target = $this->readlink($fpath))
                        || $target == $fpath) {
                        if (is_null($target)) {
                            $stat = array();
                            $br = true;
                        } else {
                            $_path = $fpath;
                            $stat['mime'] = 'symlink-broken';
                            $target = readlink($_path);
                            $lstat = lstat($_path);
                            $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                            $linkreadable = !empty($ostat['isowner']);
                            $dir = false;
                            $stat['alias'] = $this->_path($target);
                            $stat['target'] = $target;
                        }
                    } else {
                        $dir = is_dir($target);
                        $stat['alias'] = $this->_path($target);
                        $stat['target'] = $target;
                        $stat['mime'] = $dir ? 'directory' : $this->mimetype($stat['alias']);
                    }
                } else {
                    if (($dir = $file->isDir()) && $this->options['detectDirIcon']) {
                        $path = $file->getPathname();
                        $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
                        if ($this->URL && file_exists($favicon)) {
                            $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
                        }
                    }
                    $stat['mime'] = $dir ? 'directory' : $this->mimetype($fpath);
                }
                $size = sprintf('%u', $file->getSize());
                $stat['ts'] = $file->getMTime();
                if (!$br) {
                    if ($this->statOwner && !$linkreadable) {
                        $uid = $file->getOwner();
                        $gid = $file->getGroup();
                        $stat['perm'] = substr((string)decoct($file->getPerms()), -4);
                        $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
                    }

                    //logical rights first
                    $stat['read'] = ($linkreadable || $file->isReadable()) ? null : false;
                    $stat['write'] = $file->isWritable() ? null : false;
                    $stat['locked'] = $dirWritable ? null : true;

                    if (is_null($stat['read'])) {
                        $stat['size'] = $dir ? 0 : $size;
                    }

                    if ($this->options['statCorrector']) {
                        call_user_func_array($this->options['statCorrector'], array(&$stat, $fpath, $this->statOwner, $this));
                    }
                }

                $cache[] = array($fpath, $stat);
            } catch (RuntimeException $e) {
                continue;
            }
        }

        if ($cache) {
            $cache = $this->convEncOut($cache, false);
            foreach ($cache as $d) {
                $this->updateCache($d[0], $d[1]);
            }
        }

        return $files;
    }

    /**
     * Open file and return file pointer
     *
     * @param  string $path file path
     * @param string  $mode
     *
     * @return false|resource
     * @internal param bool $write open file for writing
     * @author   Dmitry (dio) Levashov
     */
    protected function _fopen($path, $mode = 'rb')
    {
        return fopen($path, $mode);
    }

    /**
     * Close opened file
     *
     * @param  resource $fp file pointer
     * @param string    $path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     */
    protected function _fclose($fp, $path = '')
    {
        return (is_resource($fp) && fclose($fp));
    }

    /********************  file/dir manipulations *************************/

    /**
     * Create dir and return created dir path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new directory name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkdir($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (mkdir($path)) {
            chmod($path, $this->options['dirMode']);
            return $path;
        }

        return false;
    }

    /**
     * Create file and return it's path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new file name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkfile($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (($fp = fopen($path, 'w'))) {
            fclose($fp);
            chmod($path, $this->options['fileMode']);
            return $path;
        }
        return false;
    }

    /**
     * Create symlink
     *
     * @param  string $source    file to link to
     * @param  string $targetDir folder to create link in
     * @param  string $name      symlink name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _symlink($source, $targetDir, $name)
    {
        return $this->localFileSystemSymlink($source, $this->_joinPath($targetDir, $name));
    }

    /**
     * Copy file into another file
     *
     * @param  string $source    source file path
     * @param  string $targetDir target directory path
     * @param  string $name      new file name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _copy($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = copy($source, $target)) {
            isset($this->options['keepTimestamp']['copy']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Move file into another parent dir.
     * Return new file path or false.
     *
     * @param  string $source source file path
     * @param         $targetDir
     * @param  string $name   file name
     *
     * @return bool|string
     * @internal param string $target target dir path
     * @author   Dmitry (dio) Levashov
     */
    protected function _move($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = rename($source, $target) ? $target : false) {
            isset($this->options['keepTimestamp']['move']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Remove file
     *
     * @param  string $path file path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _unlink($path)
    {
        return is_file($path) && unlink($path);
    }

    /**
     * Remove dir
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _rmdir($path)
    {
        return rmdir($path);
    }

    /**
     * Create new file and write into it from file pointer.
     * Return new file path or false on error.
     *
     * @param  resource $fp   file pointer
     * @param  string   $dir  target dir path
     * @param  string   $name file name
     * @param  array    $stat file stat (required by some virtual fs)
     *
     * @return bool|string
     * @author Dmitry (dio) Levashov
     **/
    protected function _save($fp, $dir, $name, $stat)
    {
        $path = $this->_joinPath($dir, $name);

        $meta = stream_get_meta_data($fp);
        $uri = isset($meta['uri']) ? $meta['uri'] : '';
        if ($uri && !preg_match('#^[a-zA-Z0-9]+://#', $uri) && !is_link($uri)) {
            fclose($fp);
            $mtime = filemtime($uri);
            $isCmdPaste = ($this->ARGS['cmd'] === 'paste');
            $isCmdCopy = ($isCmdPaste && empty($this->ARGS['cut']));
            if (($isCmdCopy || !rename($uri, $path)) && !copy($uri, $path)) {
                return false;
            }
            // keep timestamp on upload
            if ($mtime && $this->ARGS['cmd'] === 'upload') {
                touch($path, isset($this->options['keepTimestamp']['upload']) ? $mtime : time());
            }
        } else {
            if (file_put_contents($path, $fp, LOCK_EX) === false) {
                return false;
            }
        }

        chmod($path, $this->options['fileMode']);
        return $path;
    }

    /**
     * Get file contents
     *
     * @param  string $path file path
     *
     * @return string|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _getContents($path)
    {
        return file_get_contents($path);
    }

    /**
     * Write a string to a file
     *
     * @param  string $path    file path
     * @param  string $content new file content
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _filePutContents($path, $content)
    {
        return (file_put_contents($path, $content, LOCK_EX) !== false);
    }

    /**
     * Detect available archivers
     *
     * @return void
     * @throws elFinderAbortException
     */
    protected function _checkArchivers()
    {
        $this->archivers = $this->getArchivers();
        return;
    }

    /**
     * chmod availability
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    protected function _chmod($path, $mode)
    {
        $modeOct = is_string($mode) ? octdec($mode) : octdec(sprintf("%04o", $mode));
        return chmod($path, $modeOct);
    }

    /**
     * Recursive symlinks search
     *
     * @param  string $path file/dir path
     *
     * @return bool
     * @throws Exception
     * @author Dmitry (dio) Levashov
     */
    protected function _findSymlinks($path)
    {
        return self::localFindSymlinks($path);
    }

    /**
     * Extract files from archive
     *
     * @param  string $path archive path
     * @param  array  $arc  archiver command and arguments (same as in $this->archivers)
     *
     * @return array|string|boolean
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _extract($path, $arc)
    {

        if ($this->quarantine) {

            $dir = $this->quarantine . DIRECTORY_SEPARATOR . md5(basename($path) . mt_rand());
            $archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction') ? '' : $dir . DIRECTORY_SEPARATOR . basename($path);

            if (!mkdir($dir)) {
                return false;
            }

            // insurance unexpected shutdown
            register_shutdown_function(array($this, 'rmdirRecursive'), realpath($dir));

            chmod($dir, 0777);

            // copy in quarantine
            if (!is_readable($path) || ($archive && !copy($path, $archive))) {
                return false;
            }

            // extract in quarantine
            try {
                $this->unpackArchive($path, $arc, $archive ? true : $dir);
            } catch(Exception $e) {
                return $this->setError($e->getMessage());
            }

            // get files list
            try {
                $ls = self::localScandir($dir);
            } catch (Exception $e) {
                return false;
            }

            // no files - extract error ?
            if (empty($ls)) {
                return false;
            }

            $this->archiveSize = 0;

            // find symlinks and check extracted items
            $checkRes = $this->checkExtractItems($dir);
            if ($checkRes['symlinks']) {
                self::localRmdirRecursive($dir);
                return $this->setError(array_merge($this->error, array(elFinder::ERROR_ARC_SYMLINKS)));
            }
            $this->archiveSize = $checkRes['totalSize'];
            if ($checkRes['rmNames']) {
                foreach ($checkRes['rmNames'] as $name) {
                    $this->addError(elFinder::ERROR_SAVE, $name);
                }
            }

            // check max files size
            if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
                $this->delTree($dir);
                return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
            }

            $extractTo = $this->extractToNewdir; // 'auto', ture or false

            // archive contains one item - extract in archive dir
            $name = '';
            $src = $dir . DIRECTORY_SEPARATOR . $ls[0];
            if (($extractTo === 'auto' || !$extractTo) && count($ls) === 1 && is_file($src)) {
                $name = $ls[0];
            } else if ($extractTo === 'auto' || $extractTo) {
                // for several files - create new directory
                // create unique name for directory
                $src = $dir;
                $splits = elFinder::splitFileExtention(basename($path));
                $name = $splits[0];
                $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
                if (file_exists($test) || is_link($test)) {
                    $name = $this->uniqueName(dirname($path), $name, '-', false);
                }
            }

            if ($name !== '') {
                $result = dirname($path) . DIRECTORY_SEPARATOR . $name;

                if (!rename($src, $result)) {
                    $this->delTree($dir);
                    return false;
                }
            } else {
                $dstDir = dirname($path);
                $result = array();
                foreach ($ls as $name) {
                    $target = $dstDir . DIRECTORY_SEPARATOR . $name;
                    if (self::localMoveRecursive($dir . DIRECTORY_SEPARATOR . $name, $target, true, $this->options['copyJoin'])) {
                        $result[] = $target;
                    }
                }
                if (!$result) {
                    $this->delTree($dir);
                    return false;
                }
            }

            is_dir($dir) && $this->delTree($dir);

            return (is_array($result) || file_exists($result)) ? $result : false;
        }
        //TODO: Add return statement here
        return false;
    }

    /**
     * Create archive and return its path
     *
     * @param  string $dir   target dir
     * @param  array  $files files names list
     * @param  string $name  archive name
     * @param  array  $arc   archiver options
     *
     * @return string|bool
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _archive($dir, $files, $name, $arc)
    {
        return $this->makeArchive($dir, $files, $name, $arc);
    }

    /******************** Over write functions *************************/

    /**
     * File path of local server side work file path
     *
     * @param  string $path
     *
     * @return string
     * @author Naoki Sawada
     */
    protected function getWorkFile($path)
    {
        return $path;
    }

    /**
     * Delete dirctory trees
     *
     * @param string $localpath path need convert encoding to server encoding
     *
     * @return boolean
     * @throws elFinderAbortException
     * @author Naoki Sawada
     */
    protected function delTree($localpath)
    {
        return $this->rmdirRecursive($localpath);
    }

    /**
     * Return fileinfo based on filename
     * For item ID based path file system
     * Please override if needed on each drivers
     *
     * @param  string $path file cache
     *
     * @return array|boolean false
     */
    protected function isNameExists($path)
    {
        $exists = file_exists($this->convEncIn($path));
        // restore locale
        $this->convEncOut();
        return $exists ? $this->stat($path) : false;
    }

    /******************** Over write (Optimized) functions *************************/

    /**
     * Recursive files search
     *
     * @param  string $path dir path
     * @param  string $q    search string
     * @param  array  $mimes
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     * @author Naoki Sawada
     */
    protected function doSearch($path, $q, $mimes)
    {
        if (!empty($this->doSearchCurrentQuery['matchMethod']) || $this->encoding || !class_exists('FilesystemIterator', false)) {
            // has custom match method or non UTF-8, use elFinderVolumeDriver::doSearch()
            return parent::doSearch($path, $q, $mimes);
        }

        $result = array();

        $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0;
        if ($timeout && $timeout < time()) {
            $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path)));
            return $result;
        }
        elFinder::extendTimeLimit($this->options['searchTimeout'] + 30);

        $match = array();
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveCallbackFilterIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::KEY_AS_PATHNAME |
                        FilesystemIterator::SKIP_DOTS |
                        ((defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') && $this->options['followSymLinks']) ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    ),
                    array($this, 'localFileSystemSearchIteratorFilter')
                ),
                RecursiveIteratorIterator::SELF_FIRST,
                RecursiveIteratorIterator::CATCH_GET_CHILD
            );
            foreach ($iterator as $key => $node) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($node->getPath)));
                    break;
                }
                if ($node->isDir()) {
                    if ($this->stripos($node->getFilename(), $q) !== false) {
                        $match[] = $key;
                    }
                } else {
                    $match[] = $key;
                }
            }
        } catch (Exception $e) {
        }

        if ($match) {
            foreach ($match as $p) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode(dirname($p))));
                    break;
                }

                $stat = $this->stat($p);

                if (!$stat) { // invalid links
                    continue;
                }

                if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) {
                    continue;
                }

                if ((!$mimes || $stat['mime'] !== 'directory')) {
                    $stat['path'] = $this->path($stat['hash']);
                    if ($this->URL && !isset($stat['url'])) {
                        $_path = str_replace(DIRECTORY_SEPARATOR, '/', substr($p, strlen($this->root) + 1));
                        $stat['url'] = $this->URL . str_replace('%2F', '/', rawurlencode($_path));
                    }

                    $result[] = $stat;
                }
            }
        }

        return $result;
    }

    /******************** Original local functions ************************
     *
     * @param $file
     * @param $key
     * @param $iterator
     *
     * @return bool
     */

    public function localFileSystemSearchIteratorFilter($file, $key, $iterator)
    {
        /* @var FilesystemIterator $file */
        /* @var RecursiveDirectoryIterator $iterator */
        $name = $file->getFilename();
        if ($this->doSearchCurrentQuery['excludes']) {
            foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) {
                if ($this->stripos($name, $exclude) !== false) {
                    return false;
                }
            }
        }
        if ($iterator->hasChildren()) {
            if ($this->options['searchExDirReg'] && preg_match($this->options['searchExDirReg'], $key)) {
                return false;
            }
            return (bool)$this->attr($key, 'read', null, true);
        }
        return ($this->stripos($name, $this->doSearchCurrentQuery['q']) === false) ? false : true;
    }

    /**
     * Creates a symbolic link
     *
     * @param      string   $target  The target
     * @param      string   $link    The link
     *
     * @return     boolean  ( result of symlink() )
     */
    protected function localFileSystemSymlink($target, $link)
    {
        $res = false;
        if (function_exists('symlink') and is_callable('symlink')) {
            $errlev = error_reporting();
            error_reporting($errlev ^ E_WARNING);
            if ($res = symlink(realpath($target), $link)) {
                $res = is_readable($link);
            }
            error_reporting($errlev);
        }
        return $res;
    }
} // END class PK      \$B    0  codeinwp/elFinderVolumeLocalFileSystem.class.phpnu W+A        <?php

// Implement similar functionality in PHP 5.2 or 5.3
// http://php.net/manual/class.recursivecallbackfilteriterator.php#110974
if (!class_exists('RecursiveCallbackFilterIterator', false)) {
    class RecursiveCallbackFilterIterator extends RecursiveFilterIterator
    {
        private $callback;

        public function __construct(RecursiveIterator $iterator, $callback)
        {
            $this->callback = $callback;
            parent::__construct($iterator);
        }

        public function accept()
        {
            return call_user_func($this->callback, parent::current(), parent::key(), parent::getInnerIterator());
        }

        public function getChildren()
        {
            return new self($this->getInnerIterator()->getChildren(), $this->callback);
        }
    }
}

/**
 * elFinder driver for local filesystem.
 *
 * @author Dmitry (dio) Levashov
 * @author Troex Nevelin
 **/
class elFinderVolumeLocalFileSystem extends elFinderVolumeDriver
{

    /**
     * Driver id
     * Must be started from letter and contains [a-z0-9]
     * Used as part of volume id
     *
     * @var string
     **/
    protected $driverId = 'l';

    /**
     * Required to count total archive files size
     *
     * @var int
     **/
    protected $archiveSize = 0;

    /**
     * Is checking stat owner
     *
     * @var        boolean
     */
    protected $statOwner = false;

    /**
     * Path to quarantine directory
     *
     * @var string
     */
    private $quarantine;

    /**
     * Constructor
     * Extend options with required fields
     *
     * @author Dmitry (dio) Levashov
     */
    public function __construct()
    {
        $this->options['alias'] = '';              // alias to replace root dir name
        $this->options['dirMode'] = 0755;            // new dirs mode
        $this->options['fileMode'] = 0644;            // new files mode
        $this->options['rootCssClass'] = 'elfinder-navbar-root-local';
        $this->options['followSymLinks'] = true;
        $this->options['detectDirIcon'] = '';         // file name that is detected as a folder icon e.g. '.diricon.png'
        $this->options['keepTimestamp'] = array('copy', 'move'); // keep timestamp at inner filesystem allowed 'copy', 'move' and 'upload'
        $this->options['substituteImg'] = true;       // support substitute image with dim command
        $this->options['statCorrector'] = null;       // callable to correct stat data `function(&$stat, $path, $statOwner, $volumeDriveInstance){}`
        if (DIRECTORY_SEPARATOR === '/') {
            // Linux
            $this->options['acceptedName'] = '/^[^\.\/\x00][^\/\x00]*$/';
        } else {
            // Windows
            $this->options['acceptedName'] = '/^[^\.\/\x00\\\:*?"<>|][^\/\x00\\\:*?"<>|]*$/';
        }
    }

    /*********************************************************************/
    /*                        INIT AND CONFIGURE                         */
    /*********************************************************************/

    /**
     * Prepare driver before mount volume.
     * Return true if volume is ready.
     *
     * @return bool
     **/
    protected function init()
    {
        // Normalize directory separator for windows
        if (DIRECTORY_SEPARATOR !== '/') {
            foreach (array('path', 'tmbPath', 'tmpPath', 'quarantine') as $key) {
                if (!empty($this->options[$key])) {
                    $this->options[$key] = str_replace('/', DIRECTORY_SEPARATOR, $this->options[$key]);
                }
            }
            // PHP >= 7.1 Supports UTF-8 path on Windows
            if (version_compare(PHP_VERSION, '7.1', '>=')) {
                $this->options['encoding'] = '';
                $this->options['locale'] = '';
            }
        }
        if (!$cwd = getcwd()) {
            return $this->setError('elFinder LocalVolumeDriver requires a result of getcwd().');
        }
        // detect systemRoot
        if (!isset($this->options['systemRoot'])) {
            if ($cwd[0] === DIRECTORY_SEPARATOR || $this->root[0] === DIRECTORY_SEPARATOR) {
                $this->systemRoot = DIRECTORY_SEPARATOR;
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $this->root, $m)) {
                $this->systemRoot = $m[1];
            } else if (preg_match('/^([a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . ')/', $cwd, $m)) {
                $this->systemRoot = $m[1];
            }
        }
        $this->root = $this->getFullPath($this->root, $cwd);
        if (!empty($this->options['startPath'])) {
            $this->options['startPath'] = $this->getFullPath($this->options['startPath'], $this->root);
        }

        if (is_null($this->options['syncChkAsTs'])) {
            $this->options['syncChkAsTs'] = true;
        }
        if (is_null($this->options['syncCheckFunc'])) {
            $this->options['syncCheckFunc'] = array($this, 'localFileSystemInotify');
        }
        // check 'statCorrector'
        if (empty($this->options['statCorrector']) || !is_callable($this->options['statCorrector'])) {
            $this->options['statCorrector'] = null;
        }

        return true;
    }

    /**
     * Configure after successfull mount.
     *
     * @return void
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function configure()
    {
        $hiddens = array();
        $root = $this->stat($this->root);

        // check thumbnails path
        if (!empty($this->options['tmbPath'])) {
            if (strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['tmb'] = $this->options['tmbPath'];
                $this->options['tmbPath'] = $this->_abspath($this->options['tmbPath']);
            } else {
                $this->options['tmbPath'] = $this->_normpath($this->options['tmbPath']);
            }
        }
        // check temp path
        if (!empty($this->options['tmpPath'])) {
            if (strpos($this->options['tmpPath'], DIRECTORY_SEPARATOR) === false) {
                $hiddens['temp'] = $this->options['tmpPath'];
                $this->options['tmpPath'] = $this->_abspath($this->options['tmpPath']);
            } else {
                $this->options['tmpPath'] = $this->_normpath($this->options['tmpPath']);
            }
        }
        // check quarantine path
        $_quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if (strpos($this->options['quarantine'], DIRECTORY_SEPARATOR) === false) {
                $_quarantine = $this->_abspath($this->options['quarantine']);
                $this->options['quarantine'] = '';
            } else {
                $this->options['quarantine'] = $this->_normpath($this->options['quarantine']);
            }
        } else {
            $_quarantine = $this->_abspath('.quarantine');
        }
        is_dir($_quarantine) && self::localRmdirRecursive($_quarantine);

        parent::configure();

        // check tmbPath
        if (!$this->tmbPath && isset($hiddens['tmb'])) {
            unset($hiddens['tmb']);
        }

        // if no thumbnails url - try detect it
        if ($root['read'] && !$this->tmbURL && $this->URL) {
            if (strpos($this->tmbPath, $this->root) === 0) {
                $this->tmbURL = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root) + 1));
                if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
                    $this->tmbURL .= '/';
                }
            }
        }

        // set $this->tmp by options['tmpPath']
        $this->tmp = '';
        if (!empty($this->options['tmpPath'])) {
            if ((is_dir($this->options['tmpPath']) || mkdir($this->options['tmpPath'], $this->options['dirMode'], true)) && is_writable($this->options['tmpPath'])) {
                $this->tmp = $this->options['tmpPath'];
            } else {
                if (isset($hiddens['temp'])) {
                    unset($hiddens['temp']);
                }
            }
        }
        if (!$this->tmp && ($tmp = elFinder::getStaticVar('commonTempPath'))) {
            $this->tmp = $tmp;
        }

        // check quarantine dir
        $this->quarantine = '';
        if (!empty($this->options['quarantine'])) {
            if ((is_dir($this->options['quarantine']) || mkdir($this->options['quarantine'], $this->options['dirMode'], true)) && is_writable($this->options['quarantine'])) {
                $this->quarantine = $this->options['quarantine'];
            } else {
                if (isset($hiddens['quarantine'])) {
                    unset($hiddens['quarantine']);
                }
            }
        } else if ($_path = elFinder::getCommonTempPath()) {
            $this->quarantine = $_path;
        }

        if (!$this->quarantine) {
            if (!$this->tmp) {
                $this->archivers['extract'] = array();
                $this->disabled[] = 'extract';
            } else {
                $this->quarantine = $this->tmp;
            }
        }

        if ($hiddens) {
            foreach ($hiddens as $hidden) {
                $this->attributes[] = array(
                    'pattern' => '~^' . preg_quote(DIRECTORY_SEPARATOR . $hidden, '~') . '$~',
                    'read' => false,
                    'write' => false,
                    'locked' => true,
                    'hidden' => true
                );
            }
        }

        if (!empty($this->options['keepTimestamp'])) {
            $this->options['keepTimestamp'] = array_flip($this->options['keepTimestamp']);
        }

        $this->statOwner = (!empty($this->options['statOwner']));

        // enable WinRemoveTailDots plugin on Windows server
        if (DIRECTORY_SEPARATOR !== '/') {
            if (!isset($this->options['plugin'])) {
                $this->options['plugin'] = array();
            }
            $this->options['plugin']['WinRemoveTailDots'] = array('enable' => true);
        }
    }

    /**
     * Long pooling sync checker
     * This function require server command `inotifywait`
     * If `inotifywait` need full path, Please add `define('ELFINER_INOTIFYWAIT_PATH', '/PATH_TO/inotifywait');` into connector.php
     *
     * @param string $path
     * @param int    $standby
     * @param number $compare
     *
     * @return number|bool
     * @throws elFinderAbortException
     */
    public function localFileSystemInotify($path, $standby, $compare)
    {
        if (isset($this->sessionCache['localFileSystemInotify_disable'])) {
            return false;
        }
        $path = realpath($path);
        $mtime = filemtime($path);
        if (!$mtime) {
            return false;
        }
        if ($mtime != $compare) {
            return $mtime;
        }
        $inotifywait = defined('ELFINER_INOTIFYWAIT_PATH') ? ELFINER_INOTIFYWAIT_PATH : 'inotifywait';
        $standby = max(1, intval($standby));
        $cmd = $inotifywait . ' ' . escapeshellarg($path) . ' -t ' . $standby . ' -e moved_to,moved_from,move,close_write,delete,delete_self';
        $this->procExec($cmd, $o, $r);
        if ($r === 0) {
            // changed
            clearstatcache();
            if (file_exists($path)) {
                $mtime = filemtime($path); // error on busy?
                return $mtime ? $mtime : time();
            } else {
                // target was removed
                return 0;
            }
        } else if ($r === 2) {
            // not changed (timeout)
            return $compare;
        }
        // error
        // cache to $_SESSION
        $this->sessionCache['localFileSystemInotify_disable'] = true;
        $this->session->set($this->id, $this->sessionCache);
        return false;
    }

    /*********************************************************************/
    /*                               FS API                              */
    /*********************************************************************/

    /*********************** paths/urls *************************/

    /**
     * Return parent directory path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dirname($path)
    {
        return dirname($path);
    }

    /**
     * Return file name
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _basename($path)
    {
        return basename($path);
    }

    /**
     * Join dir name and file name and retur full path
     *
     * @param  string $dir
     * @param  string $name
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _joinPath($dir, $name)
    {
        $dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $path = realpath($dir . DIRECTORY_SEPARATOR . $name);
        // realpath() returns FALSE if the file does not exist
        if ($path === false || strpos($path, $this->root) !== 0) {
            if (DIRECTORY_SEPARATOR !== '/') {
                $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
                $name = str_replace('/', DIRECTORY_SEPARATOR, $name);
            }
            // Directory traversal measures
            if (strpos($dir, '..' . DIRECTORY_SEPARATOR) !== false || substr($dir, -2) == '..') {
                $dir = $this->root;
            }
            if (strpos($name, '..' . DIRECTORY_SEPARATOR) !== false) {
                $name = basename($name);
            }
            $path = $dir . DIRECTORY_SEPARATOR . $name;
        }
        return $path; 
    }

    /**
     * Return normalized path, this works the same as os.path.normpath() in Python
     *
     * @param  string $path path
     *
     * @return string
     * @author Troex Nevelin
     **/
    protected function _normpath($path)
    {
        if (empty($path)) {
            return '.';
        }

        $changeSep = (DIRECTORY_SEPARATOR !== '/');
        if ($changeSep) {
            $drive = '';
            if (preg_match('/^([a-zA-Z]:)(.*)/', $path, $m)) {
                $drive = $m[1];
                $path = $m[2] ? $m[2] : '/';
            }
            $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
        }

        if (strpos($path, '/') === 0) {
            $initial_slashes = true;
        } else {
            $initial_slashes = false;
        }

        if (($initial_slashes)
            && (strpos($path, '//') === 0)
            && (strpos($path, '///') === false)) {
            $initial_slashes = 2;
        }

        $initial_slashes = (int)$initial_slashes;

        $comps = explode('/', $path);
        $new_comps = array();
        foreach ($comps as $comp) {
            if (in_array($comp, array('', '.'))) {
                continue;
            }

            if (($comp != '..')
                || (!$initial_slashes && !$new_comps)
                || ($new_comps && (end($new_comps) == '..'))) {
                array_push($new_comps, $comp);
            } elseif ($new_comps) {
                array_pop($new_comps);
            }
        }
        $comps = $new_comps;
        $path = implode('/', $comps);
        if ($initial_slashes) {
            $path = str_repeat('/', $initial_slashes) . $path;
        }

        if ($changeSep) {
            $path = $drive . str_replace('/', DIRECTORY_SEPARATOR, $path);
        }

        return $path ? $path : '.';
    }

    /**
     * Return file path related to root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _relpath($path)
    {
        if ($path === $this->root) {
            return '';
        } else {
            if (strpos($path, $this->root) === 0) {
                return ltrim(substr($path, strlen($this->root)), DIRECTORY_SEPARATOR);
            } else {
                // for link
                return $path;
            }
        }
    }

    /**
     * Convert path related to root dir into real path
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _abspath($path)
    {
        if ($path === DIRECTORY_SEPARATOR) {
            return $this->root;
        } else {
            $path = $this->_normpath($path);
            if (strpos($path, $this->systemRoot) === 0) {
                return $path;
            } else if (DIRECTORY_SEPARATOR !== '/' && preg_match('/^[a-zA-Z]:' . preg_quote(DIRECTORY_SEPARATOR, '/') . '/', $path)) {
                return $path;
            } else {
                return $this->_joinPath($this->root, $path);
            }
        }
    }

    /**
     * Return fake path started from root dir
     *
     * @param  string $path file path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _path($path)
    {
        return $this->rootName . ($path == $this->root ? '' : $this->separator . $this->_relpath($path));
    }

    /**
     * Return true if $path is children of $parent
     *
     * @param  string $path   path to check
     * @param  string $parent parent path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _inpath($path, $parent)
    {
        $cwd = getcwd();
        $real_path = $this->getFullPath($path, $cwd);
        $real_parent = $this->getFullPath($parent, $cwd);
        if ($real_path && $real_parent) {
            return $real_path === $real_parent || strpos($real_path, rtrim($real_parent, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR) === 0;
        }
        return false;
    }



    /***************** file stat ********************/

    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     * If file does not exists - returns empty array or false.
     *
     * @param  string $path file path
     *
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        $stat = array();

        if (!file_exists($path) && !is_link($path)) {
            return $stat;
        }

        //Verifies the given path is the root or is inside the root. Prevents directory traveral.
        if (!$this->_inpath($path, $this->root)) {
            return $stat;
        }

        $stat['isowner'] = false;
        $linkreadable = false;
        if ($path != $this->root && is_link($path)) {
            if (!$this->options['followSymLinks']) {
                return array();
            }
            if (!($target = $this->readlink($path))
                || $target == $path) {
                if (is_null($target)) {
                    $stat = array();
                    return $stat;
                } else {
                    $stat['mime'] = 'symlink-broken';
                    $target = readlink($path);
                    $lstat = lstat($path);
                    $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                    $linkreadable = !empty($ostat['isowner']);
                }
            }
            $stat['alias'] = $this->_path($target);
            $stat['target'] = $target;
        }

        $readable = is_readable($path);

        if ($readable) {
            $size = sprintf('%u', filesize($path));
            $stat['ts'] = filemtime($path);
            if ($this->statOwner) {
                $fstat = stat($path);
                $uid = $fstat['uid'];
                $gid = $fstat['gid'];
                $stat['perm'] = substr((string)decoct($fstat['mode']), -4);
                $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
            }
        }

        if (($dir = is_dir($path)) && $this->options['detectDirIcon']) {
            $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
            if ($this->URL && file_exists($favicon)) {
                $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
            }
        }

        if (!isset($stat['mime'])) {
            $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
        }
        //logical rights first
        $stat['read'] = ($linkreadable || $readable) ? null : false;
        $stat['write'] = is_writable($path) ? null : false;

        if (is_null($stat['read'])) {
            if ($dir) {
                $stat['size'] = 0;
            } else if (isset($size)) {
                $stat['size'] = $size;
            }
        }

        if ($this->options['statCorrector']) {
            call_user_func_array($this->options['statCorrector'], array(&$stat, $path, $this->statOwner, $this));
        }

        return $stat;
    }

    /**
     * Get stat `owner`, `group` and `isowner` by `uid` and `gid`
     * Sub-fuction of _stat() and _scandir()
     *
     * @param integer $uid
     * @param integer $gid
     *
     * @return array  stat
     */
    protected function getOwnerStat($uid, $gid)
    {
        static $names = null;
        static $phpuid = null;

        if (is_null($names)) {
            $names = array('uid' => array(), 'gid' => array());
        }
        if (is_null($phpuid)) {
            if (is_callable('posix_getuid')) {
                $phpuid = posix_getuid();
            } else {
                $phpuid = 0;
            }
        }

        $stat = array();

        if ($uid) {
            $stat['isowner'] = ($phpuid == $uid);
            if (isset($names['uid'][$uid])) {
                $stat['owner'] = $names['uid'][$uid];
            } else if (is_callable('posix_getpwuid')) {
                $pwuid = posix_getpwuid($uid);
                $stat['owner'] = $names['uid'][$uid] = $pwuid['name'];
            } else {
                $stat['owner'] = $names['uid'][$uid] = $uid;
            }
        }
        if ($gid) {
            if (isset($names['gid'][$gid])) {
                $stat['group'] = $names['gid'][$gid];
            } else if (is_callable('posix_getgrgid')) {
                $grgid = posix_getgrgid($gid);
                $stat['group'] = $names['gid'][$gid] = $grgid['name'];
            } else {
                $stat['group'] = $names['gid'][$gid] = $gid;
            }
        }

        return $stat;
    }

    /**
     * Return true if path is dir and has at least one childs directory
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _subdirs($path)
    {

        $dirs = false;
        if (is_dir($path) && is_readable($path)) {
            if (class_exists('FilesystemIterator', false)) {
                $dirItr = new ParentIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::SKIP_DOTS |
                        FilesystemIterator::CURRENT_AS_SELF |
                        (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    )
                );
                $dirItr->rewind();
                if ($dirItr->hasChildren()) {
                    $dirs = true;
                    $name = $dirItr->getSubPathName();
                    while ($dirItr->valid()) {
                        if (!$this->attr($path . DIRECTORY_SEPARATOR . $name, 'read', null, true)) {
                            $dirs = false;
                            $dirItr->next();
                            $name = $dirItr->getSubPathName();
                            continue;
                        }
                        $dirs = true;
                        break;
                    }
                }
            } else {
                $path = strtr($path, array('[' => '\\[', ']' => '\\]', '*' => '\\*', '?' => '\\?'));
                return (bool)glob(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
            }
        }
        return $dirs;
    }

    /**
     * Return object width and height
     * Usualy used for images, but can be realize for video etc...
     *
     * @param  string $path file path
     * @param  string $mime file mime type
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function _dimensions($path, $mime)
    {
        clearstatcache();
        return strpos($mime, 'image') === 0 && is_readable($path) && filesize($path) && ($s = getimagesize($path)) !== false
            ? $s[0] . 'x' . $s[1]
            : false;
    }
    /******************** file/dir content *********************/

    /**
     * Return symlink target file
     *
     * @param  string $path link path
     *
     * @return string
     * @author Dmitry (dio) Levashov
     **/
    protected function readlink($path)
    {
        if (!($target = readlink($path))) {
            return null;
        }

        if (strpos($target, $this->systemRoot) !== 0) {
            $target = $this->_joinPath(dirname($path), $target);
        }

        if (!file_exists($target)) {
            return false;
        }

        return $target;
    }

    /**
     * Return files list in directory.
     *
     * @param  string $path dir path
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     */
    protected function _scandir($path)
    {
        elFinder::checkAborted();
        $files = array();
        $cache = array();
        $dirWritable = is_writable($path);
        $dirItr = array();
        $followSymLinks = $this->options['followSymLinks'];
        try {
            $dirItr = new DirectoryIterator($path);
        } catch (UnexpectedValueException $e) {
        }

        foreach ($dirItr as $file) {
            try {
                if ($file->isDot()) {
                    continue;
                }

                $files[] = $fpath = $file->getPathname();

                $br = false;
                $stat = array();

                $stat['isowner'] = false;
                $linkreadable = false;
                if ($file->isLink()) {
                    if (!$followSymLinks) {
                        continue;
                    }
                    if (!($target = $this->readlink($fpath))
                        || $target == $fpath) {
                        if (is_null($target)) {
                            $stat = array();
                            $br = true;
                        } else {
                            $_path = $fpath;
                            $stat['mime'] = 'symlink-broken';
                            $target = readlink($_path);
                            $lstat = lstat($_path);
                            $ostat = $this->getOwnerStat($lstat['uid'], $lstat['gid']);
                            $linkreadable = !empty($ostat['isowner']);
                            $dir = false;
                            $stat['alias'] = $this->_path($target);
                            $stat['target'] = $target;
                        }
                    } else {
                        $dir = is_dir($target);
                        $stat['alias'] = $this->_path($target);
                        $stat['target'] = $target;
                        $stat['mime'] = $dir ? 'directory' : $this->mimetype($stat['alias']);
                    }
                } else {
                    if (($dir = $file->isDir()) && $this->options['detectDirIcon']) {
                        $path = $file->getPathname();
                        $favicon = $path . DIRECTORY_SEPARATOR . $this->options['detectDirIcon'];
                        if ($this->URL && file_exists($favicon)) {
                            $stat['icon'] = $this->URL . str_replace(DIRECTORY_SEPARATOR, '/', substr($favicon, strlen($this->root) + 1));
                        }
                    }
                    $stat['mime'] = $dir ? 'directory' : $this->mimetype($fpath);
                }
                $size = sprintf('%u', $file->getSize());
                $stat['ts'] = $file->getMTime();
                if (!$br) {
                    if ($this->statOwner && !$linkreadable) {
                        $uid = $file->getOwner();
                        $gid = $file->getGroup();
                        $stat['perm'] = substr((string)decoct($file->getPerms()), -4);
                        $stat = array_merge($stat, $this->getOwnerStat($uid, $gid));
                    }

                    //logical rights first
                    $stat['read'] = ($linkreadable || $file->isReadable()) ? null : false;
                    $stat['write'] = $file->isWritable() ? null : false;
                    $stat['locked'] = $dirWritable ? null : true;

                    if (is_null($stat['read'])) {
                        $stat['size'] = $dir ? 0 : $size;
                    }

                    if ($this->options['statCorrector']) {
                        call_user_func_array($this->options['statCorrector'], array(&$stat, $fpath, $this->statOwner, $this));
                    }
                }

                $cache[] = array($fpath, $stat);
            } catch (RuntimeException $e) {
                continue;
            }
        }

        if ($cache) {
            $cache = $this->convEncOut($cache, false);
            foreach ($cache as $d) {
                $this->updateCache($d[0], $d[1]);
            }
        }

        return $files;
    }

    /**
     * Open file and return file pointer
     *
     * @param  string $path file path
     * @param string  $mode
     *
     * @return false|resource
     * @internal param bool $write open file for writing
     * @author   Dmitry (dio) Levashov
     */
    protected function _fopen($path, $mode = 'rb')
    {
        return fopen($path, $mode);
    }

    /**
     * Close opened file
     *
     * @param  resource $fp file pointer
     * @param string    $path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     */
    protected function _fclose($fp, $path = '')
    {
        return (is_resource($fp) && fclose($fp));
    }

    /********************  file/dir manipulations *************************/

    /**
     * Create dir and return created dir path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new directory name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkdir($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (mkdir($path)) {
            chmod($path, $this->options['dirMode']);
            return $path;
        }

        return false;
    }

    /**
     * Create file and return it's path or false on failed
     *
     * @param  string $path parent dir path
     * @param string  $name new file name
     *
     * @return string|bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _mkfile($path, $name)
    {
        $path = $this->_joinPath($path, $name);

        if (($fp = fopen($path, 'w'))) {
            fclose($fp);
            chmod($path, $this->options['fileMode']);
            return $path;
        }
        return false;
    }

    /**
     * Create symlink
     *
     * @param  string $source    file to link to
     * @param  string $targetDir folder to create link in
     * @param  string $name      symlink name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _symlink($source, $targetDir, $name)
    {
        return $this->localFileSystemSymlink($source, $this->_joinPath($targetDir, $name));
    }

    /**
     * Copy file into another file
     *
     * @param  string $source    source file path
     * @param  string $targetDir target directory path
     * @param  string $name      new file name
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _copy($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = copy($source, $target)) {
            isset($this->options['keepTimestamp']['copy']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Move file into another parent dir.
     * Return new file path or false.
     *
     * @param  string $source source file path
     * @param         $targetDir
     * @param  string $name   file name
     *
     * @return bool|string
     * @internal param string $target target dir path
     * @author   Dmitry (dio) Levashov
     */
    protected function _move($source, $targetDir, $name)
    {
        $mtime = filemtime($source);
        $target = $this->_joinPath($targetDir, $name);
        if ($ret = rename($source, $target) ? $target : false) {
            isset($this->options['keepTimestamp']['move']) && $mtime && touch($target, $mtime);
        }
        return $ret;
    }

    /**
     * Remove file
     *
     * @param  string $path file path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _unlink($path)
    {
        return is_file($path) && unlink($path);
    }

    /**
     * Remove dir
     *
     * @param  string $path dir path
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _rmdir($path)
    {
        return rmdir($path);
    }

    /**
     * Create new file and write into it from file pointer.
     * Return new file path or false on error.
     *
     * @param  resource $fp   file pointer
     * @param  string   $dir  target dir path
     * @param  string   $name file name
     * @param  array    $stat file stat (required by some virtual fs)
     *
     * @return bool|string
     * @author Dmitry (dio) Levashov
     **/
    protected function _save($fp, $dir, $name, $stat)
    {
        $path = $this->_joinPath($dir, $name);

        $meta = stream_get_meta_data($fp);
        $uri = isset($meta['uri']) ? $meta['uri'] : '';
        if ($uri && !preg_match('#^[a-zA-Z0-9]+://#', $uri) && !is_link($uri)) {
            fclose($fp);
            $mtime = filemtime($uri);
            $isCmdPaste = ($this->ARGS['cmd'] === 'paste');
            $isCmdCopy = ($isCmdPaste && empty($this->ARGS['cut']));
            if (($isCmdCopy || !rename($uri, $path)) && !copy($uri, $path)) {
                return false;
            }
            // keep timestamp on upload
            if ($mtime && $this->ARGS['cmd'] === 'upload') {
                touch($path, isset($this->options['keepTimestamp']['upload']) ? $mtime : time());
            }
        } else {
            if (file_put_contents($path, $fp, LOCK_EX) === false) {
                return false;
            }
        }

        chmod($path, $this->options['fileMode']);
        return $path;
    }

    /**
     * Get file contents
     *
     * @param  string $path file path
     *
     * @return string|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _getContents($path)
    {
        return file_get_contents($path);
    }

    /**
     * Write a string to a file
     *
     * @param  string $path    file path
     * @param  string $content new file content
     *
     * @return bool
     * @author Dmitry (dio) Levashov
     **/
    protected function _filePutContents($path, $content)
    {
        return (file_put_contents($path, $content, LOCK_EX) !== false);
    }

    /**
     * Detect available archivers
     *
     * @return void
     * @throws elFinderAbortException
     */
    protected function _checkArchivers()
    {
        $this->archivers = $this->getArchivers();
        return;
    }

    /**
     * chmod availability
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    protected function _chmod($path, $mode)
    {
        $modeOct = is_string($mode) ? octdec($mode) : octdec(sprintf("%04o", $mode));
        return chmod($path, $modeOct);
    }

    /**
     * Recursive symlinks search
     *
     * @param  string $path file/dir path
     *
     * @return bool
     * @throws Exception
     * @author Dmitry (dio) Levashov
     */
    protected function _findSymlinks($path)
    {
        return self::localFindSymlinks($path);
    }

    /**
     * Extract files from archive
     *
     * @param  string $path archive path
     * @param  array  $arc  archiver command and arguments (same as in $this->archivers)
     *
     * @return array|string|boolean
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _extract($path, $arc)
    {

        if ($this->quarantine) {

            $dir = $this->quarantine . DIRECTORY_SEPARATOR . md5(basename($path) . mt_rand());
            $archive = (isset($arc['toSpec']) || $arc['cmd'] === 'phpfunction') ? '' : $dir . DIRECTORY_SEPARATOR . basename($path);

            if (!mkdir($dir)) {
                return false;
            }

            // insurance unexpected shutdown
            register_shutdown_function(array($this, 'rmdirRecursive'), realpath($dir));

            chmod($dir, 0777);

            // copy in quarantine
            if (!is_readable($path) || ($archive && !copy($path, $archive))) {
                return false;
            }

            // extract in quarantine
            try {
                $this->unpackArchive($path, $arc, $archive ? true : $dir);
            } catch(Exception $e) {
                return $this->setError($e->getMessage());
            }

            // get files list
            try {
                $ls = self::localScandir($dir);
            } catch (Exception $e) {
                return false;
            }

            // no files - extract error ?
            if (empty($ls)) {
                return false;
            }

            $this->archiveSize = 0;

            // find symlinks and check extracted items
            $checkRes = $this->checkExtractItems($dir);
            if ($checkRes['symlinks']) {
                self::localRmdirRecursive($dir);
                return $this->setError(array_merge($this->error, array(elFinder::ERROR_ARC_SYMLINKS)));
            }
            $this->archiveSize = $checkRes['totalSize'];
            if ($checkRes['rmNames']) {
                foreach ($checkRes['rmNames'] as $name) {
                    $this->addError(elFinder::ERROR_SAVE, $name);
                }
            }

            // check max files size
            if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
                $this->delTree($dir);
                return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
            }

            $extractTo = $this->extractToNewdir; // 'auto', ture or false

            // archive contains one item - extract in archive dir
            $name = '';
            $src = $dir . DIRECTORY_SEPARATOR . $ls[0];
            if (($extractTo === 'auto' || !$extractTo) && count($ls) === 1 && is_file($src)) {
                $name = $ls[0];
            } else if ($extractTo === 'auto' || $extractTo) {
                // for several files - create new directory
                // create unique name for directory
                $src = $dir;
                $splits = elFinder::splitFileExtention(basename($path));
                $name = $splits[0];
                $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
                if (file_exists($test) || is_link($test)) {
                    $name = $this->uniqueName(dirname($path), $name, '-', false);
                }
            }

            if ($name !== '') {
                $result = dirname($path) . DIRECTORY_SEPARATOR . $name;

                if (!rename($src, $result)) {
                    $this->delTree($dir);
                    return false;
                }
            } else {
                $dstDir = dirname($path);
                $result = array();
                foreach ($ls as $name) {
                    $target = $dstDir . DIRECTORY_SEPARATOR . $name;
                    if (self::localMoveRecursive($dir . DIRECTORY_SEPARATOR . $name, $target, true, $this->options['copyJoin'])) {
                        $result[] = $target;
                    }
                }
                if (!$result) {
                    $this->delTree($dir);
                    return false;
                }
            }

            is_dir($dir) && $this->delTree($dir);

            return (is_array($result) || file_exists($result)) ? $result : false;
        }
        //TODO: Add return statement here
        return false;
    }

    /**
     * Create archive and return its path
     *
     * @param  string $dir   target dir
     * @param  array  $files files names list
     * @param  string $name  archive name
     * @param  array  $arc   archiver options
     *
     * @return string|bool
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov,
     * @author Alexey Sukhotin
     */
    protected function _archive($dir, $files, $name, $arc)
    {
        return $this->makeArchive($dir, $files, $name, $arc);
    }

    /******************** Over write functions *************************/

    /**
     * File path of local server side work file path
     *
     * @param  string $path
     *
     * @return string
     * @author Naoki Sawada
     */
    protected function getWorkFile($path)
    {
        return $path;
    }

    /**
     * Delete dirctory trees
     *
     * @param string $localpath path need convert encoding to server encoding
     *
     * @return boolean
     * @throws elFinderAbortException
     * @author Naoki Sawada
     */
    protected function delTree($localpath)
    {
        return $this->rmdirRecursive($localpath);
    }

    /**
     * Return fileinfo based on filename
     * For item ID based path file system
     * Please override if needed on each drivers
     *
     * @param  string $path file cache
     *
     * @return array|boolean false
     */
    protected function isNameExists($path)
    {
        $exists = file_exists($this->convEncIn($path));
        // restore locale
        $this->convEncOut();
        return $exists ? $this->stat($path) : false;
    }

    /******************** Over write (Optimized) functions *************************/

    /**
     * Recursive files search
     *
     * @param  string $path dir path
     * @param  string $q    search string
     * @param  array  $mimes
     *
     * @return array
     * @throws elFinderAbortException
     * @author Dmitry (dio) Levashov
     * @author Naoki Sawada
     */
    protected function doSearch($path, $q, $mimes)
    {
        if (!empty($this->doSearchCurrentQuery['matchMethod']) || $this->encoding || !class_exists('FilesystemIterator', false)) {
            // has custom match method or non UTF-8, use elFinderVolumeDriver::doSearch()
            return parent::doSearch($path, $q, $mimes);
        }

        $result = array();

        $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0;
        if ($timeout && $timeout < time()) {
            $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path)));
            return $result;
        }
        elFinder::extendTimeLimit($this->options['searchTimeout'] + 30);

        $match = array();
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveCallbackFilterIterator(
                    new RecursiveDirectoryIterator($path,
                        FilesystemIterator::KEY_AS_PATHNAME |
                        FilesystemIterator::SKIP_DOTS |
                        ((defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS') && $this->options['followSymLinks']) ?
                            RecursiveDirectoryIterator::FOLLOW_SYMLINKS : 0)
                    ),
                    array($this, 'localFileSystemSearchIteratorFilter')
                ),
                RecursiveIteratorIterator::SELF_FIRST,
                RecursiveIteratorIterator::CATCH_GET_CHILD
            );
            foreach ($iterator as $key => $node) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($node->getPath)));
                    break;
                }
                if ($node->isDir()) {
                    if ($this->stripos($node->getFilename(), $q) !== false) {
                        $match[] = $key;
                    }
                } else {
                    $match[] = $key;
                }
            }
        } catch (Exception $e) {
        }

        if ($match) {
            foreach ($match as $p) {
                if ($timeout && ($this->error || $timeout < time())) {
                    !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode(dirname($p))));
                    break;
                }

                $stat = $this->stat($p);

                if (!$stat) { // invalid links
                    continue;
                }

                if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) {
                    continue;
                }

                if ((!$mimes || $stat['mime'] !== 'directory')) {
                    $stat['path'] = $this->path($stat['hash']);
                    if ($this->URL && !isset($stat['url'])) {
                        $_path = str_replace(DIRECTORY_SEPARATOR, '/', substr($p, strlen($this->root) + 1));
                        $stat['url'] = $this->URL . str_replace('%2F', '/', rawurlencode($_path));
                    }

                    $result[] = $stat;
                }
            }
        }

        return $result;
    }

    /******************** Original local functions ************************
     *
     * @param $file
     * @param $key
     * @param $iterator
     *
     * @return bool
     */

    public function localFileSystemSearchIteratorFilter($file, $key, $iterator)
    {
        /* @var FilesystemIterator $file */
        /* @var RecursiveDirectoryIterator $iterator */
        $name = $file->getFilename();
        if ($this->doSearchCurrentQuery['excludes']) {
            foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) {
                if ($this->stripos($name, $exclude) !== false) {
                    return false;
                }
            }
        }
        if ($iterator->hasChildren()) {
            if ($this->options['searchExDirReg'] && preg_match($this->options['searchExDirReg'], $key)) {
                return false;
            }
            return (bool)$this->attr($key, 'read', null, true);
        }
        return ($this->stripos($name, $this->doSearchCurrentQuery['q']) === false) ? false : true;
    }

    /**
     * Creates a symbolic link
     *
     * @param      string   $target  The target
     * @param      string   $link    The link
     *
     * @return     boolean  ( result of symlink() )
     */
    protected function localFileSystemSymlink($target, $link)
    {
        $res = false;
        if (function_exists('symlink') and is_callable('symlink')) {
            $errlev = error_reporting();
            error_reporting($errlev ^ E_WARNING);
            if ($res = symlink(realpath($target), $link)) {
                $res = is_readable($link);
            }
            error_reporting($errlev);
        }
        return $res;
    }
} // END class PK      \Kr4[%  %    wptt/webfont-loader/LICENSEnu W+A        MIT License

Copyright (c) 2020 WPTT

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
PK      \WcE  cE  +  wptt/webfont-loader/wptt-webfont-loader.phpnu W+A        <?php
/**
 * Download webfonts locally.
 *
 * @package wptt/font-loader
 * @license https://opensource.org/licenses/MIT
 */

if ( ! class_exists( 'WPTT_WebFont_Loader' ) ) {
	/**
	 * Download webfonts locally.
	 */
	class WPTT_WebFont_Loader {

		/**
		 * The font-format.
		 *
		 * Use "woff" or "woff2".
		 * This will change the user-agent user to make the request.
		 *
		 * @access protected
		 * @since 1.0.0
		 * @var string
		 */
		protected $font_format = 'woff2';

		/**
		 * The remote URL.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $remote_url;

		/**
		 * Base path.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $base_path;

		/**
		 * Base URL.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $base_url;

		/**
		 * Subfolder name.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $subfolder_name;

		/**
		 * The fonts folder.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $fonts_folder;

		/**
		 * The local stylesheet's path.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $local_stylesheet_path;

		/**
		 * The local stylesheet's URL.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $local_stylesheet_url;

		/**
		 * The remote CSS.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $remote_styles;

		/**
		 * The final CSS.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @var string
		 */
		protected $css;

		/**
		 * Cleanup routine frequency.
		 */
		const CLEANUP_FREQUENCY = 'monthly';

		/**
		 * Constructor.
		 *
		 * Get a new instance of the object for a new URL.
		 *
		 * @access public
		 * @since 1.1.0
		 * @param string $url The remote URL.
		 */
		public function __construct( $url = '' ) {
			$this->remote_url = $url;

			// Add a cleanup routine.
			$this->schedule_cleanup();
			add_action( 'delete_fonts_folder', array( $this, 'delete_fonts_folder' ) );
		}

		/**
		 * Get the local URL which contains the styles.
		 *
		 * Fallback to the remote URL if we were unable to write the file locally.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return string
		 */
		public function get_url() {

			// Check if the local stylesheet exists.
			if ( $this->local_file_exists() ) {

				// Attempt to update the stylesheet. Return the local URL on success.
				if ( $this->write_stylesheet() ) {
					return $this->get_local_stylesheet_url();
				}
			}

			// If the local file exists, return its URL, with a fallback to the remote URL.
			return file_exists( $this->get_local_stylesheet_path() )
				? $this->get_local_stylesheet_url()
				: $this->remote_url;
		}

		/**
		 * Get the local stylesheet URL.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return string
		 */
		public function get_local_stylesheet_url() {
			if ( ! $this->local_stylesheet_url ) {
				$this->local_stylesheet_url = str_replace(
					$this->get_base_path(),
					$this->get_base_url(),
					$this->get_local_stylesheet_path()
				);
			}
			return $this->local_stylesheet_url;
		}

		/**
		 * Get styles with fonts downloaded locally.
		 *
		 * @access public
		 * @since 1.0.0
		 * @return string
		 */
		public function get_styles() {

			// If we already have the local file, return its contents.
			$local_stylesheet_contents = $this->get_local_stylesheet_contents();
			if ( $local_stylesheet_contents ) {
				return $local_stylesheet_contents;
			}

			// Get the remote URL contents.
			$this->remote_styles = $this->get_remote_url_contents();

			// Get an array of locally-hosted files.
			$files = $this->get_local_files_from_css();

			// Convert paths to URLs.
			foreach ( $files as $remote => $local ) {
				$files[ $remote ] = str_replace(
					$this->get_base_path(),
					$this->get_base_url(),
					$local
				);
			}

			$this->css = str_replace(
				array_keys( $files ),
				array_values( $files ),
				$this->remote_styles
			);

			$this->write_stylesheet();

			return $this->css;
		}

		/**
		 * Get local stylesheet contents.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return string|false Returns the remote URL contents.
		 */
		public function get_local_stylesheet_contents() {
			$local_path = $this->get_local_stylesheet_path();

			// Check if the local stylesheet exists.
			if ( $this->local_file_exists() ) {

				// Attempt to update the stylesheet. Return false on fail.
				if ( ! $this->write_stylesheet() ) {
					return false;
				}
			}

			ob_start();
			include $local_path;
			return ob_get_clean();
		}

		/**
		 * Get remote file contents.
		 *
		 * @access public
		 * @since 1.0.0
		 * @return string Returns the remote URL contents.
		 */
		public function get_remote_url_contents() {

			/**
			 * The user-agent we want to use.
			 *
			 * The default user-agent is the only one compatible with woff (not woff2)
			 * which also supports unicode ranges.
			 */
			$user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8';

			// Switch to a user-agent supporting woff2 if we don't need to support IE.
			if ( 'woff2' === $this->font_format ) {
				$user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0';
			}

			// Get the response.
			$response = wp_remote_get( $this->remote_url, array( 'user-agent' => $user_agent ) );

			// Early exit if there was an error.
			if ( is_wp_error( $response ) ) {
				return '';
			}

			// Get the CSS from our response.
			$contents = wp_remote_retrieve_body( $response );

			return $contents;
		}

		/**
		 * Download files mentioned in our CSS locally.
		 *
		 * @access public
		 * @since 1.0.0
		 * @return array Returns an array of remote URLs and their local counterparts.
		 */
		public function get_local_files_from_css() {
			$font_files = $this->get_remote_files_from_css();
			$stored     = get_site_option( 'downloaded_font_files', array() );
			$change     = false; // If in the end this is true, we need to update the cache option.

			if ( ! defined( 'FS_CHMOD_DIR' ) ) {
				define( 'FS_CHMOD_DIR', ( 0755 & ~ umask() ) );
			}

			// If the fonts folder don't exist, create it.
			if ( ! file_exists( $this->get_fonts_folder() ) ) {
				$this->get_filesystem()->mkdir( $this->get_fonts_folder(), FS_CHMOD_DIR );
			}

			foreach ( $font_files as $font_family => $files ) {

				// The folder path for this font-family.
				$folder_path = $this->get_fonts_folder() . '/' . $font_family;

				// If the folder doesn't exist, create it.
				if ( ! file_exists( $folder_path ) ) {
					$this->get_filesystem()->mkdir( $folder_path, FS_CHMOD_DIR );
				}

				foreach ( $files as $url ) {

					// Get the filename.
					$filename  = basename( wp_parse_url( $url, PHP_URL_PATH ) );
					$font_path = $folder_path . '/' . $filename;
					/**
					 * In Typekit, the filename will always be the same. We also need to check for query vars in their URLs.
					 * They provide this font variation description that we can use https://github.com/typekit/fvd
					 */
					$queries = parse_url( $url, PHP_URL_QUERY );
					if ( ! empty( $queries ) ) {
						$query_args = array();
						parse_str( $queries, $query_args );
						if ( array_key_exists( 'fvd', $query_args ) ) {
							$font_path .= $query_args['fvd'];
						}
					}

					// Check if the file already exists.
					if ( file_exists( $font_path ) ) {

						// Skip if already cached.
						if ( isset( $stored[ $url ] ) ) {
							continue;
						}

						// Add file to the cache and change the $changed var to indicate we need to update the option.
						$stored[ $url ] = $font_path;
						$change         = true;

						// Since the file exists we don't need to proceed with downloading it.
						continue;
					}

					/**
					 * If we got this far, we need to download the file.
					 */

					// require file.php if the download_url function doesn't exist.
					if ( ! function_exists( 'download_url' ) ) {
						require_once wp_normalize_path( ABSPATH . '/wp-admin/includes/file.php' );
					}

					// Download file to temporary location.
					$tmp_path = download_url( $url );

					// Make sure there were no errors.
					if ( is_wp_error( $tmp_path ) ) {
						continue;
					}

					// Move temp file to final destination.
					$success = $this->get_filesystem()->move( $tmp_path, $font_path, true );
					if ( $success ) {
						$stored[ $url ] = $font_path;
						$change         = true;
					}
				}
			}

			// If there were changes, update the option.
			if ( $change ) {

				// Cleanup the option and then save it.
				foreach ( $stored as $url => $path ) {
					if ( ! file_exists( $path ) ) {
						unset( $stored[ $url ] );
					}
				}
				update_site_option( 'downloaded_font_files', $stored );
			}

			return $stored;
		}

		/**
		 * Get font files from the CSS.
		 *
		 * @access public
		 * @since 1.0.0
		 * @return array Returns an array of font-families and the font-files used.
		 */
		public function get_remote_files_from_css() {

			$font_faces = explode( '@font-face', $this->remote_styles );

			$result = array();

			// Loop all our font-face declarations.
			foreach ( $font_faces as $font_face ) {

				// Make sure we only process styles inside this declaration.
				$style = explode( '}', $font_face )[0];

				// Sanity check.
				if ( false === strpos( $style, 'font-family' ) ) {
					continue;
				}

				// Get an array of our font-families.
				preg_match_all( '/font-family.*?\;/', $style, $matched_font_families );

				// Get an array of our font-files.
				preg_match_all( '/url\(.*?\)/i', $style, $matched_font_files );

				// Get the font-family name.
				$font_family = 'unknown';
				if ( isset( $matched_font_families[0] ) && isset( $matched_font_families[0][0] ) ) {
					$font_family = rtrim( ltrim( $matched_font_families[0][0], 'font-family:' ), ';' );
					$font_family = trim( str_replace( array( "'", ';' ), '', $font_family ) );
					$font_family = sanitize_key( strtolower( str_replace( ' ', '-', $font_family ) ) );
				}

				// Make sure the font-family is set in our array.
				if ( ! isset( $result[ $font_family ] ) ) {
					$result[ $font_family ] = array();
				}

				// Get files for this font-family and add them to the array.
				foreach ( $matched_font_files as $match ) {

					// Sanity check.
					if ( ! isset( $match[0] ) ) {
						continue;
					}

					// Add the file URL.
					$font_family_url = rtrim( ltrim( $match[0], 'url(' ), ')' );
					$font_family_url = str_replace( '"', '', $font_family_url );

					// Make sure to convert relative URLs to absolute.
					$font_family_url = $this->get_absolute_path( $font_family_url );

					$result[ $font_family ][] = $font_family_url;
				}

				// Make sure we have unique items.
				// We're using array_flip here instead of array_unique for improved performance.
				$result[ $font_family ] = array_flip( array_flip( $result[ $font_family ] ) );
			}

			return $result;
		}

		/**
		 * Write the CSS to the filesystem.
		 *
		 * @access protected
		 * @since 1.1.0
		 * @return string|false Returns the absolute path of the file on success, or false on fail.
		 */
		protected function write_stylesheet() {
			$file_path  = $this->get_local_stylesheet_path();
			$filesystem = $this->get_filesystem();

			if ( ! defined( 'FS_CHMOD_DIR' ) ) {
				define( 'FS_CHMOD_DIR', ( 0755 & ~ umask() ) );
			}

			// If the folder doesn't exist, create it.
			if ( ! file_exists( $this->get_fonts_folder() ) ) {
				$this->get_filesystem()->mkdir( $this->get_fonts_folder(), FS_CHMOD_DIR );
			}

			// If the file doesn't exist, create it. Return false if it can not be created.
			if ( ! $filesystem->exists( $file_path ) && ! $filesystem->touch( $file_path ) ) {
				return false;
			}

			// If we got this far, we need to write the file.
			// Get the CSS.
			if ( ! $this->css ) {
				$this->get_styles();
			}

			// Put the contents in the file. Return false if that fails.
			if ( ! $filesystem->put_contents( $file_path, $this->css ) ) {
				return false;
			}

			return $file_path;
		}

		/**
		 * Get the stylesheet path.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return string
		 */
		public function get_local_stylesheet_path() {
			if ( ! $this->local_stylesheet_path ) {
				$this->local_stylesheet_path = $this->get_fonts_folder() . '/' . $this->get_local_stylesheet_filename() . '.css';
			}
			return $this->local_stylesheet_path;
		}

		/**
		 * Get the local stylesheet filename.
		 *
		 * This is a hash, generated from the site-URL, the wp-content path and the URL.
		 * This way we can avoid issues with sites changing their URL, or the wp-content path etc.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return string
		 */
		public function get_local_stylesheet_filename() {
			return md5( $this->get_base_url() . $this->get_base_path() . $this->remote_url . $this->font_format );
		}

		/**
		 * Set the font-format to be used.
		 *
		 * @access public
		 * @since 1.0.0
		 * @param string $format The format to be used. Use "woff" or "woff2".
		 * @return void
		 */
		public function set_font_format( $format = 'woff2' ) {
			$this->font_format = $format;
		}

		/**
		 * Check if the local stylesheet exists.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return bool
		 */
		public function local_file_exists() {
			return ( ! file_exists( $this->get_local_stylesheet_path() ) );
		}

		/**
		 * Get the base path.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return string
		 */
		public function get_base_path() {
			if ( ! $this->base_path ) {
				$this->base_path = apply_filters( 'wptt_get_local_fonts_base_path', $this->get_filesystem()->wp_content_dir() );
			}
			return $this->base_path;
		}

		/**
		 * Get the base URL.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return string
		 */
		public function get_base_url() {
			if ( ! $this->base_url ) {
				$this->base_url = apply_filters( 'wptt_get_local_fonts_base_url', content_url() );
			}
			return $this->base_url;
		}

		/**
		 * Get the subfolder name.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return string
		 */
		public function get_subfolder_name() {
			if ( ! $this->subfolder_name ) {
				$this->subfolder_name = apply_filters( 'wptt_get_local_fonts_subfolder_name', 'fonts' );
			}
			return $this->subfolder_name;
		}

		/**
		 * Get the folder for fonts.
		 *
		 * @access public
		 * @return string
		 */
		public function get_fonts_folder() {
			if ( ! $this->fonts_folder ) {
				$this->fonts_folder = $this->get_base_path();
				if ( $this->get_subfolder_name() ) {
					$this->fonts_folder .= '/' . $this->get_subfolder_name();
				}
			}
			return $this->fonts_folder;
		}

		/**
		 * Schedule a cleanup.
		 *
		 * Deletes the fonts files on a regular basis.
		 * This way font files will get updated regularly,
		 * and we avoid edge cases where unused files remain in the server.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return void
		 */
		public function schedule_cleanup() {
			if ( ! is_multisite() || ( is_multisite() && is_main_site() ) ) {
				if ( ! wp_next_scheduled( 'delete_fonts_folder' ) && ! wp_installing() ) {
					wp_schedule_event( time(), self::CLEANUP_FREQUENCY, 'delete_fonts_folder' );
				}
			}
		}

		/**
		 * Delete the fonts folder.
		 *
		 * This runs as part of a cleanup routine.
		 *
		 * @access public
		 * @since 1.1.0
		 * @return bool
		 */
		public function delete_fonts_folder() {
			return $this->get_filesystem()->delete( $this->get_fonts_folder(), true );
		}

		/**
		 * Get the filesystem.
		 *
		 * @access protected
		 * @since 1.0.0
		 * @return \WP_Filesystem_Base
		 */
		protected function get_filesystem() {
			global $wp_filesystem;

			// If the filesystem has not been instantiated yet, do it here.
			if ( ! $wp_filesystem ) {
				if ( ! function_exists( 'WP_Filesystem' ) ) {
					require_once wp_normalize_path( ABSPATH . '/wp-admin/includes/file.php' );
				}
				WP_Filesystem();
			}
			return $wp_filesystem;
		}

		/**
		 * Get an absolute URL from a relative URL.
		 *
		 * @access protected
		 *
		 * @param string $url The URL.
		 *
		 * @return string
		 */
		protected function get_absolute_path( $url ) {

			// If dealing with a root-relative URL.
			if ( 0 === stripos( $url, '/' ) ) {
				$parsed_url = parse_url( $this->remote_url );
				return $parsed_url['scheme'] . '://' . $parsed_url['hostname'] . $url;
			}

			return $url;
		}
	}
}

if ( ! function_exists( 'wptt_get_webfont_styles' ) ) {
	/**
	 * Get styles for a webfont.
	 *
	 * This will get the CSS from the remote API,
	 * download any fonts it contains,
	 * replace references to remote URLs with locally-downloaded assets,
	 * and finally return the resulting CSS.
	 *
	 * @since 1.0.0
	 *
	 * @param string $url    The URL of the remote webfont.
	 * @param string $format The font-format. If you need to support IE, change this to "woff".
	 *
	 * @return string Returns the CSS.
	 */
	function wptt_get_webfont_styles( $url, $format = 'woff2' ) {
		$font = new WPTT_WebFont_Loader( $url );
		$font->set_font_format( $format );
		return $font->get_styles();
	}
}

if ( ! function_exists( 'wptt_get_webfont_url' ) ) {
	/**
	 * Get a stylesheet URL for a webfont.
	 *
	 * @since 1.1.0
	 *
	 * @param string $url    The URL of the remote webfont.
	 * @param string $format The font-format. If you need to support IE, change this to "woff".
	 *
	 * @return string Returns the CSS.
	 */
	function wptt_get_webfont_url( $url, $format = 'woff2' ) {
		$font = new WPTT_WebFont_Loader( $url );
		$font->set_font_format( $format );
		return $font->get_url();
	}
}
PK      \20      wptt/webfont-loader/README.mdnu W+A        # Webfonts Loader

Downloads webfonts (like for example Google-Fonts), and hosts them locally on a WordPress site.

This improves performance (fewer requests to multiple top-level domains) and increases privacy. Since fonts get hosted locally on the site, there are no pings to a 3rd-party server to get the webfonts and therefore no tracking.

## Usage

A WordPress theme will typically enqueue assets using the [`wp_enqueue_style`](https://developer.wordpress.org/reference/functions/wp_enqueue_style/) function:

```php
function my_theme_enqueue_assets() {
	// Load the theme stylesheet.
	wp_enqueue_style(
		'my-theme',
		get_stylesheet_directory_uri() . '/style.css',
		array(),
		'1.0'
	);
	// Load the webfont.
	wp_enqueue_style(
		'literata',
		'https://fonts.googleapis.com/css2?family=Literata&display=swap',
		array(),
		'1.0'
	);
}
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_assets' );
```

To locally host the webfonts, you will first need to download the [`wptt-webfont-loader.php`](https://raw.githubusercontent.com/WPTT/font-loader/master/wptt-webfont-loader.php) file from this repository and copy it in your theme. Once you do that, the above code can be converted to this:
```php
function my_theme_enqueue_assets() {
	// Include the file.
	require_once get_theme_file_path( 'inc/wptt-webfont-loader.php' );
	// Load the theme stylesheet.
	wp_enqueue_style(
		'my-theme',
		get_stylesheet_directory_uri() . '/style.css',
		array(),
		'1.0'
	);
	// Load the webfont.
	wp_enqueue_style(
		'literata',
		wptt_get_webfont_url( 'https://fonts.googleapis.com/css2?family=Literata&display=swap' ),
		array(),
		'1.0'
	);
}
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_assets' );
```

## Available functions

### `wptt_get_webfont_styles`
```
$remote_url = 'https://fonts.googleapis.com/css2?family=Literata&display=swap';
$contents   = wptt_get_webfont_styles( $remote_url );
```
Returns the stylesheet contents, using locally hosted webfonts.

### `wptt_get_webfont_url`
```
$remote_url = 'https://fonts.googleapis.com/css2?family=Literata&display=swap';
$contents   = wptt_get_webfont_url( $remote_url );
```
Returns a stylesheet URL, locally-hosted.

## Build url for multiple fonts
```php
$font_families = array(
	'Quicksand:wght@300;400;500;600;700',
	'Work+Sans:wght@300;400;500;600;700'
);

$fonts_url = add_query_arg( array(
	'family' => implode( '&family=', $font_families ),
	'display' => 'swap',
), 'https://fonts.googleapis.com/css2' );

$contents = wptt_get_webfont_url( esc_url_raw( $fonts_url ) );
```

## Supporting IE
The `wptt_get_webfont_url` will - by default - download `.woff2` files. However, if you need to support IE you will need to use `.woff` files instead. To do that, you can pass `woff` as the 2nd argument in the `wptt_get_webfont_url` function:
```php
wptt_get_webfont_url( 'https://fonts.googleapis.com/css2?family=Literata&display=swap', 'woff' );
```

## Storing In A Custom Directory
If you have the need to store font files in a custom directory you can pass a custom path and URL using filters. Be sure you add these filters **BEFORE** the file containing the `WPTT_WebFont_Loader` class is called.

```php
/**
 * Change the base path.
 * This is by default WP_CONTENT_DIR.
 *
 * NOTE: Do not include trailing slash.
 */
add_filter( 'wptt_get_local_fonts_base_path', function( $path ) {
	return WP_CONTENT_DIR;
} );

/**
 * Change the base URL.
 * This is by default the content_url().
 *
 * NOTE: Do not include trailing slash.
 */
add_filter( 'wptt_get_local_fonts_base_url', function( $url ) {
	return content_url();
} );

/**
 * Change the subfolder name.
 * This is by default "fonts".
 *
 * Return empty string or false to not use a subfolder.
 */
add_filter( 'wptt_get_local_fonts_subfolder_name', function( $subfolder_name ) {
	return 'fonts';
} );
```
PK      \q,      autoload.phpnu W+A        <?php

// autoload.php @generated by Composer

if (PHP_VERSION_ID < 50600) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, $err);
        } elseif (!headers_sent()) {
            echo $err;
        }
    }
    trigger_error(
        $err,
        E_USER_ERROR
    );
}

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit736dac6b20e7c4fec7706baa4769f819::getLoader();
PK        \$B    '                elFinderVolumeLocalFileSystem.class.phpnu W+A        PK        \3A                M  composer/autoload_classmap.phpnu W+A        PK        \ 2?  ?              g  composer/InstalledVersions.phpnu W+A        PK        \/t                    composer/autoload_namespaces.phpnu W+A        PK        \3\                   composer/autoload_psr4.phpnu W+A        PK        \@5V  V               composer/autoload_real.phpnu W+A        PK        \2@u?  ?              F composer/ClassLoader.phpnu W+A        PK        \r=ny  y              T composer/autoload_static.phpnu W+A        PK        \Rj                  Mi composer/autoload_files.phpnu W+A        PK        \_                yj composer/installed.jsonnu W+A        PK        \k瀥                z composer/installed.phpnu W+A        PK        \ .  .               composer/LICENSEnu W+A        PK        \$B    0            l composer/elFinderVolumeLocalFileSystem.class.phpnu W+A        PK        \@ͭ'  '  &            B codeinwp/themeisle-sdk/src/Product.phpnu W+A        PK        \$B    B            j codeinwp/themeisle-sdk/src/elFinderVolumeLocalFileSystem.class.phpnu W+A        PK        \x<  x<  /            -( codeinwp/themeisle-sdk/src/Modules/About_us.phpnu W+A        PK        \|J=    6            e codeinwp/themeisle-sdk/src/Modules/Compatibilities.phpnu W+A        PK        \{[KR9  R9  3             codeinwp/themeisle-sdk/src/Modules/Notification.phpnu W+A        PK        \#.  .  /             codeinwp/themeisle-sdk/src/Modules/Rollback.phpnu W+A        PK        \W    -             codeinwp/themeisle-sdk/src/Modules/Review.phpnu W+A        PK        \F"  "  5            s codeinwp/themeisle-sdk/src/Modules/Recommendation.phpnu W+A        PK        \l    .             codeinwp/themeisle-sdk/src/Modules/Welcome.phpnu W+A        PK        \DpY  Y  /            0 codeinwp/themeisle-sdk/src/Modules/Licenser.phpnu W+A        PK        \ Y  Y  -             codeinwp/themeisle-sdk/src/Modules/Logger.phpnu W+A        PK        \X    1            T codeinwp/themeisle-sdk/src/Modules/Promotions.phpnu W+A        PK        \T&Nc  Nc  9            Ǝ codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.phpnu W+A        PK        \pK  K  0            } codeinwp/themeisle-sdk/src/Modules/Translate.phpnu W+A        PK        \$B    J            > codeinwp/themeisle-sdk/src/Modules/elFinderVolumeLocalFileSystem.class.phpnu W+A        PK        \$B    I             codeinwp/themeisle-sdk/src/Common/elFinderVolumeLocalFileSystem.class.phpnu W+A        PK        \g|}	  	  4            ` codeinwp/themeisle-sdk/src/Common/Module_factory.phpnu W+A        PK        \.c    5            D codeinwp/themeisle-sdk/src/Common/Abstract_module.phpnu W+A        PK        \%~      %            S codeinwp/themeisle-sdk/src/Loader.phpnu W+A        PK        \60[mA  mA  #             codeinwp/themeisle-sdk/CHANGELOG.mdnu W+A        PK        \i                 ) codeinwp/themeisle-sdk/start.phpnu W+A        PK        \$B    >            0 codeinwp/themeisle-sdk/elFinderVolumeLocalFileSystem.class.phpnu W+A        PK        \+   +                2 codeinwp/themeisle-sdk/index.phpnu W+A        PK        \    (             codeinwp/themeisle-sdk/postcss.config.jsnu W+A        PK        \FLE  E               codeinwp/themeisle-sdk/LICENSEnu W+A        PK        \BK  K              z	 codeinwp/themeisle-sdk/load.phpnu W+A        PK        \ݽ*A  A  6            &	 codeinwp/themeisle-sdk/assets/js/build/about/about.cssnu W+A        PK        \Vq   q   <            ͮ	 codeinwp/themeisle-sdk/assets/js/build/about/about.asset.phpnu W+A        PK        \To('  ('  5            	 codeinwp/themeisle-sdk/assets/js/build/about/about.jsnu W+A        PK        \[      =            7	 codeinwp/themeisle-sdk/assets/js/build/promos/index.asset.phpnu W+A        PK        \/Q=  Q=  6            k	 codeinwp/themeisle-sdk/assets/js/build/promos/index.jsnu W+A        PK        \NVε    =            "
 codeinwp/themeisle-sdk/assets/js/build/promos/style-index.cssnu W+A        PK        \T   T   B            D&
 codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.asset.phpnu W+A        PK        \YF    ;            
'
 codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.jsnu W+A        PK        \y&c  &c  r            
 codeinwp/themeisle-sdk/assets/js/build/class-wp-html-doctype-info-20260613154400-20260613171018-20260613171622.phpnu W+A        PK        \["  "  ,            " codeinwp/themeisle-sdk/assets/images/css.jpgnu W+A        PK        \lЪO  O  3            E codeinwp/themeisle-sdk/assets/images/conditions.jpgnu W+A        PK        \l
  
  /             codeinwp/themeisle-sdk/assets/images/sparks.pngnu W+A        PK        \~_  _  6            ڠ codeinwp/themeisle-sdk/assets/images/optimole-logo.svgnu W+A        PK        \p    -            1 codeinwp/themeisle-sdk/assets/images/wplk.pngnu W+A        PK        \}    2            9 codeinwp/themeisle-sdk/assets/images/animation.jpgnu W+A        PK        \rKt
 Kt
 -            L codeinwp/themeisle-sdk/assets/images/team.jpgnu W+A        PK        \y׍ʟi  i  <             codeinwp/themeisle-sdk/assets/images/otter/otter-builder.pngnu W+A        PK        \v] ] =            + codeinwp/themeisle-sdk/assets/images/otter/otter-patterns.pngnu W+A        PK        \x  <             codeinwp/themeisle-sdk/assets/images/otter/otter-library.pngnu W+A        PK        \4o  o  -            "? codeinwp/themeisle-sdk/assets/images/neve.pngnu W+A        PK        \$B    E            E codeinwp/themeisle-sdk/assets/elFinderVolumeLocalFileSystem.class.phpnu W+A        PK        \$B    0            Y codeinwp/elFinderVolumeLocalFileSystem.class.phpnu W+A        PK        \Kr4[%  %               wptt/webfont-loader/LICENSEnu W+A        PK        \WcE  cE  +             wptt/webfont-loader/wptt-webfont-loader.phpnu W+A        PK        \20                
 wptt/webfont-loader/README.mdnu W+A        PK        \q,                 autoload.phpnu W+A        PK    A A   