pax_global_header00006660000000000000000000000064143424677710014531gustar00rootroot0000000000000052 comment=3a966bd7e402d83258dab06deecbce1ecefcd2b9 superagent-8.0.5/000077500000000000000000000000001434246777100137205ustar00rootroot00000000000000superagent-8.0.5/.browserslistrc000066400000000000000000000000241434246777100170040ustar00rootroot00000000000000defaults, not ie 11 superagent-8.0.5/.commitlintrc.js000066400000000000000000000001051434246777100170340ustar00rootroot00000000000000module.exports = { extends: ['@commitlint/config-conventional'] }; superagent-8.0.5/.dist.babelrc000066400000000000000000000003051434246777100162530ustar00rootroot00000000000000{ "presets": [ ["@babel/env", { "targets": { "browsers": [ "defaults, not ie 11" ] } }] ], "sourceType": "script", "sourceMaps": "inline", "comments": false } superagent-8.0.5/.dist.eslintrc000066400000000000000000000021141434246777100165040ustar00rootroot00000000000000{ "extends": ["eslint:recommended", "plugin:compat/recommended"], "env": { "node": false, "browser": true, "amd": true, "es6": true }, "plugins": ["compat"], "rules": { "node/no-unsupported-features/es-builtins": ["error", { "version": ">=8.0.0", "ignores": [ "Atomics", "BigInt", "SharedArrayBuffer" ] }], "compat/compat": "error", "no-console": "off", "no-empty": "off", "no-extra-semi": "off", "no-func-assign": "off", "no-undef": "off", "no-unused-vars": "off", "no-useless-escape": "off", "no-cond-assign": "off", "no-redeclare": "off", "node/no-exports-assign": "off", "no-unsafe-finally": "off", "complexity": ["error", 10000], "max-statements": "off", "no-constant-condition": "off", "no-control-regex": "off", "no-fallthrough": "off", "operator-linebreak": "off", "node/no-missing-require": "warn" }, "globals": { "regeneratorRuntime": "writable" }, "settings": { "polyfills": [ "WeakRef", "BigInt" ] } } superagent-8.0.5/.editorconfig000066400000000000000000000002231434246777100163720ustar00rootroot00000000000000root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true superagent-8.0.5/.eslintrc000066400000000000000000000013621434246777100155460ustar00rootroot00000000000000{ "extends": [ "eslint:recommended", "plugin:node/recommended" ], "env": { "node": true, "browser": true, "es6": true }, "parserOptions": { "ecmaVersion": 2021 }, "overrides": [ { "files": "test/**/*.js", "env": { "mocha": true }, "rules": { "no-prototype-builtins": "off", "node/no-deprecated-api": "warn", "node/no-extraneous-require": "warn", "no-unused-vars": "warn", "node/no-missing-require": "warn" } } ], "rules": { "node/no-unsupported-features/node-builtins": "off", "node/no-unsupported-features/es-syntax": "off", "node/no-exports-assign": "off", "no-unused-vars": "warn" }, "globals": { } } superagent-8.0.5/.gitattributes000066400000000000000000000000141434246777100166060ustar00rootroot00000000000000* text=auto superagent-8.0.5/.github/000077500000000000000000000000001434246777100152605ustar00rootroot00000000000000superagent-8.0.5/.github/workflows/000077500000000000000000000000001434246777100173155ustar00rootroot00000000000000superagent-8.0.5/.github/workflows/ci.yml000066400000000000000000000040161434246777100204340ustar00rootroot00000000000000name: CI on: [push, pull_request] env: SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} jobs: test: runs-on: ubuntu-latest strategy: matrix: include: - node-version: 10.x test-on-old-node: 1 - node-version: 12.x test-on-old-node: 1 # test-on-brower: 1 - node-version: 14.x - node-version: 16.x - node-version: 18.x steps: - uses: actions/checkout@v3 - name: Install Node - ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Cache node modules uses: actions/cache@v3 env: cache-name: cache-node-modules with: # npm cache files are stored in `~/.npm` on Linux/macOS path: ~/.npm key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} - name: Install Dependencies On Old Node ${{ matrix.node-version }} if: ${{ matrix.test-on-old-node == '1' }} run: node ci/remove-deps-4-old-node.js && yarn install --ignore-scripts - name: Install Dependencies On Node ${{ matrix.node-version }} if: ${{ matrix.test-on-old-node != '1' }} run: yarn install - name: Build run: npm run build - name: Build On Old Node if: ${{ matrix.test-on-old-node == '1' }} run: npm run build:test - name: Test On Node ${{ matrix.node-version }} env: BROWSER: ${{ matrix.test-on-brower }} HTTP2_TEST_DISABLED: ${{ matrix.http2-test-disabled }} OLD_NODE_TEST: ${{ matrix.test-on-old-node }} run: | if [ "$OLD_NODE_TEST" = "1" ]; then make test else npm run lint make test fi - name: Coverage On Node ${{ matrix.node-version }} run: npm run coverage - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 superagent-8.0.5/.gitignore000066400000000000000000000003131434246777100157050ustar00rootroot00000000000000.vscode build lib-cov coverage.html .DS_Store node_modules *.sock test.js components test/node/fixtures/tmp.json .idea superagent.js package-lock.json *.log coverage .nyc_output lib dist *.swp yarn.lock superagent-8.0.5/.husky/000077500000000000000000000000001434246777100151415ustar00rootroot00000000000000superagent-8.0.5/.husky/commit-msg000077500000000000000000000001141434246777100171370ustar00rootroot00000000000000#!/usr/bin/env sh . "$(dirname "$0")/_/husky.sh" yarn commitlint --edit $1 superagent-8.0.5/.husky/pre-commit000077500000000000000000000000771434246777100171470ustar00rootroot00000000000000#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" yarn test superagent-8.0.5/.lib.babelrc000066400000000000000000000003031434246777100160540ustar00rootroot00000000000000{ "presets": [ ["@babel/env", { "targets": { "node": "6.4.0", "browsers": [ "defaults, not ie 11" ] } }] ], "sourceMaps": "inline" } superagent-8.0.5/.lib.eslintrc000066400000000000000000000013721434246777100163140ustar00rootroot00000000000000{ "extends": ["eslint:recommended", "plugin:node/recommended"], "env": { "browser": true }, "rules": { "node/no-deprecated-api": "off", "no-console": "off", "no-unused-vars": "off", "no-empty": "off", "no-func-assign": "off", "no-global-assign": ["error", {"exceptions": ["exports"]}], "no-fallthrough": "off", "no-constant-condition": "off", "node/no-exports-assign": "off", "no-unsafe-finally": "off" }, "overrides": [ { "files": [ "lib/client.js" ], "globals": { } }, { "files": [ "lib/node/http2wrapper.js" ], "rules": { "node/no-unsupported-features/es-builtins": "off", "node/no-unsupported-features/node-builtins": "off" } } ] } superagent-8.0.5/.lintstagedrc.js000066400000000000000000000002251434246777100170160ustar00rootroot00000000000000module.exports = { "*.md": filenames => filenames.map(filename => `remark ${filename} -qfo`), 'package.json': 'fixpack', '*.js': 'xo --fix' }; superagent-8.0.5/.prettierrc.js000066400000000000000000000001331434246777100165140ustar00rootroot00000000000000module.exports = { singleQuote: true, bracketSpacing: true, trailingComma: 'none' }; superagent-8.0.5/.remarkignore000066400000000000000000000000401434246777100164000ustar00rootroot00000000000000CONTRIBUTING.md HISTORY.md docs superagent-8.0.5/.remarkrc.js000066400000000000000000000000631434246777100161410ustar00rootroot00000000000000module.exports = { plugins: ['preset-github'] }; superagent-8.0.5/.test.babelrc000066400000000000000000000004421434246777100162710ustar00rootroot00000000000000{ "presets": [ ["@babel/env", { "targets": { "node": "6.4.0", "browsers": [ "defaults, not ie 11" ] } }] ], "plugins": [ ["@babel/transform-runtime"] ], "parserOpts": { "allowReturnOutsideFunction": true }, "sourceMaps": "inline" } superagent-8.0.5/.travis.yml000066400000000000000000000005301434246777100160270ustar00rootroot00000000000000sudo: false language: node_js node_js: - '18' - '16' - '14' - '12' after_success: npm run coverage env: global: - SAUCE_USERNAME='shtylman-superagent' - SAUCE_ACCESS_KEY='39a45464-cb1d-4b8d-aa1f-83c7c04fa673' matrix: include: - node_js: "10" env: BROWSER=1 include: - node_js: "12" env: HTTP2_TEST=1 superagent-8.0.5/.xo-config.js000066400000000000000000000037661434246777100162410ustar00rootroot00000000000000module.exports = { prettier: true, space: true, nodeVersion: false, extends: [ 'xo-lass', ], envs: [ 'node', 'browser', ], overrides: [ { files: 'test/**/*.js', envs: [ 'mocha', ], rules: { 'block-scoped-var': 'warn', complexity: 'warn', 'default-case': 'warn', eqeqeq: 'warn', 'func-name-matching': 'warn', 'func-names': 'warn', 'guard-for-in': 'warn', 'handle-callback-err': 'warn', 'import/no-extraneous-dependencies': 'warn', 'import/no-unassigned-import': 'warn', 'import/order': 'warn', 'max-nested-callbacks': 'warn', 'new-cap': 'warn', 'no-eq-null': 'warn', 'no-extend-native': 'warn', 'no-implicit-coercion': 'warn', 'no-multi-assign': 'warn', 'no-negated-condition': 'warn', 'no-prototype-builtins': 'warn', 'no-redeclare': 'warn', 'no-undef': 'warn', 'no-unused-expressions': 'warn', 'no-unused-vars': 'warn', 'no-use-extend-native/no-use-extend-native': 'warn', 'no-useless-escape': 'warn', 'no-var': 'warn', 'no-void': 'warn', 'node/no-deprecated-api': 'warn', 'prefer-rest-params': 'warn', 'prefer-spread': 'warn', 'unicorn/filename-case': 'warn', 'valid-jsdoc': 'warn', 'node/no-path-concat': 'warn', 'unicorn/no-empty-file': 'warn', }, }, ], rules: { 'unicorn/prevent-abbreviations': [ 'warn', { replacements: { res: false, args: false, fn: false, err: false, e: false, i: false, }, }, ], 'no-bitwise': 'warn', 'node/prefer-global/buffer': 'warn', 'node/prefer-global/process': 'warn', 'unicorn/no-new-array': 'warn', 'unicorn/no-this-assignment': 'warn', 'unicorn/prefer-spread': 'warn', 'unicorn/catch-error-name': 'warn', 'unicorn/prefer-code-point': 'warn', 'node/no-unsupported-features': [ 'error', { version: 8, ignores: [ 'syntax', ], }, ], 'unicorn/prefer-optional-catch-binding': 'off', 'no-unused-vars': 'off' }, globals: [], }; superagent-8.0.5/.zuul.yml000066400000000000000000000005041434246777100155170ustar00rootroot00000000000000ui: mocha-bdd server: ./test/support/server.js tunnel_host: http://focusaurus.com browsers: - name: chrome version: latest - name: firefox version: latest - name: safari version: latest - name: ie version: 9..latest browserify: - transform: name: babelify configFile: './.dist.babelrc' superagent-8.0.5/CONTRIBUTING.md000066400000000000000000000005461434246777100161560ustar00rootroot00000000000000When submitting a PR, your chance of acceptance increases if you do the following: * Code style is consistent with existing in the file. * Tests are passing (client and server). * You add a test for the failing issue you are fixing. * Code changes are focused on the area of discussion. * Do not rebuild the distribution files or increment version numbers. superagent-8.0.5/HISTORY.md000066400000000000000000000602631434246777100154120ustar00rootroot00000000000000# This HISTORY log is deprecated Please see [GitHub releases page](https://github.com/ladjs/superagent/releases) for the current changelog. # 4.1.0 (2018-12-26) * `.connect()` IP/DNS override option (Kornel) * `.trustLocalhost()` option for allowing broken HTTPS on `localhost` * `.abort()` used with promises rejects the promise. # 4.0.0 (2018-11-17) ## Breaking changes * Node.js v4 has reached it's end of life, so we no longer support it. It's v6+ or later. We recommend Node.js 10. * We now use ES6 in the browser code, too. * If you're using Browserify or Webpack to package code for Internet Explorer, you will also have to use Babel. * The pre-built node_modules/superagent.js is still ES5-compatible. * `.end(…)` returns `undefined` instead of the request. If you need the request object after calling `.end()` (and you probably don't), save it in a variable and call `request.end(…)`. Consider not using `.end()` at all, and migrating to promises by calling `.then()` instead. * In Node, responses with unknown MIME type are buffered by default. To get old behavior, if you use custom _unbuffered_ parsers, add `.buffer(false)` to requests or set `superagent.buffer[yourMimeType] = false`. * Invalid uses of `.pipe()` throw. ## Minor changes * Throw if `req.abort().end()` is called * Throw if using unsupported mix of send and field * Reject `.end()` promise on all error events (Kornel Lesiński) * Set `https.servername` from the `Host` header (Kornel Lesiński) * Leave backticks unencoded in query strings where possible (Ethan Resnick) * Update node-mime to 2.x (Alexey Kucherenko) * Allow default buffer settings based on response-type (shrey) * `response.buffered` is more accurate. # 3.8.3 (2018-04-29) * Add flags for 201 & 422 responses (Nikhil Fadnis) * Emit progress event while uploading Node `Buffer` via send method (Sergey Akhalkov) * Fixed setting correct cookies for redirects (Damien Clark) * Replace .catch with ['catch'] for IE9 Support (Miguel Stevens) # 3.8.2 (2017-12-09) * Fixed handling of exceptions thrown from callbacks * Stricter matching of `+json` MIME types. # 3.8.1 (2017-11-08) * Clear authorization header on cross-domain redirect # 3.8.0 * Added support for "globally" defined headers and event handlers via `superagent.agent()`. It now remembers default settings for all its requests. * Added optional callback to `.retry()` (Alexander Murphy) * Unified auth args handling in node/browser (Edmundo Alvarez) * Fixed error handling in zlib pipes (Kornel) * Documented that 3xx status codes are errors (Mickey Reiss) # 3.7.0 (2017-10-17) * Limit maximum response size. Prevents zip bombs (Kornel) * Catch and pass along errors in `.ok()` callback (Jeremy Ruppel) * Fixed parsing of XHR headers without a newline (nsf) # 3.6.2 (2017-10-02) * Upgrade MIME type dependency to a newer, secure version * Recognize PDF MIME as binary * Fix for error in subsequent require() calls (Steven de Salas) # 3.6.0 (2017-08-20) * Support disabling TCP_NODELAY option ([#1240](https://github.com/ladjs/superagent/issues/1240)) (xiamengyu) * Send payload in query string for GET and HEAD shorthand API (Peter Lyons) * Support passphrase with pfx certificate (Paul Westerdale (ABRS Limited)) * Documentation improvements (Peter Lyons) * Fixed duplicated query string params ([#1200](https://github.com/ladjs/superagent/issues/1200)) (Kornel) # 3.5.1 (2017-03-18) * Allow crossDomain errors to be retried ([#1194](https://github.com/ladjs/superagent/issues/1194)) (Michael Olson) * Read responseType property from the correct object (Julien Dupouy) * Check for ownProperty before adding header (Lucas Vieira) # 3.5.0 (2017-02-23) * Add errno to distinguish between request timeout and body download timeout ([#1184](https://github.com/ladjs/superagent/issues/1184)) (Kornel Lesiński) * Warn about bogus timeout options ([#1185](https://github.com/ladjs/superagent/issues/1185)) (Kornel Lesiński) # 3.4.4 (2017-02-17) * Treat videos like images (Kornel Lesiński) * Avoid renaming module (Kornel Lesiński) # 3.4.3 (2017-02-14) * Fixed being able to define own parsers when their mime type starts with `text/` (Damien Clark) * `withCredentials(false)` (Andy Woods) * Use `formData.on` instead of `.once` (Kornel Lesiński) * Ignore `attach("file",null)` (Kornel Lesiński) # 3.4.1 (2017-01-29) * Allow `retry()` and `retry(0)` (Alexander Pope) * Allow optional body/data in DELETE requests (Alpha Shuro) * Fixed query string on retried requests (Kornel Lesiński) # 3.4.0 (2017-01-25) * New `.retry(n)` method and `err.retries` (Alexander Pope) * Docs for HTTPS request (Jun Wan Goh) # 3.3.1 (2016-12-17) * Fixed "double callback bug" warning on timeouts of gzipped responses # 3.3.0 (2016-12-14) * Added `.ok(callback)` that allows customizing which responses are errors (Kornel Lesiński) * Added `.responseType()` to Node version (Kornel Lesiński) * Added `.parse()` to browser version (jakepearson) * Fixed parse error when using `responseType('blob')` (Kornel Lesiński) # 3.2.0 (2016-12-11) * Added `.timeout({response:ms})`, which allows limiting maximum response time independently from total download time (Kornel Lesiński) * Added warnings when `.end()` is called more than once (Kornel Lesiński) * Added `response.links` to browser version (Lukas Eipert) * `btoa` is no longer required in IE9 (Kornel Lesiński) * Fixed `.sortQuery()` on URLs without query strings (Kornel Lesiński) * Refactored common response code into `ResponseBase` (Lukas Eipert) # 3.1.0 (2016-11-28) * Added `.sortQuery()` (vicanso) * Added support for arrays and bools in `.field()` (Kornel Lesiński) * Made `superagent.Request` subclassable without need to patch all static methods (Kornel Lesiński) # 3.0.0 (2016-11-19) * Dropped support for Node 0.x. Please upgrade to at least Node 4. * Dropped support for componentjs (Damien Caselli) * Removed deprecated `.part()`/`superagent.Part` APIs. * Removed unreliable `.body` property on internal response object used by unbuffered parsers. Note: the normal `response.body` is unaffected. * Multiple `.send()` calls mixing `Buffer`/`Blob` and JSON data are not possible and will now throw instead of messing up the data. * Improved `.send()` data object type check (Fernando Mendes) * Added common prototype for Node and browser versions (Andreas Helmberger) * Added `http+unix:` schema to support Unix sockets (Yuki KAN) * Added full `attach` options parameter in the Node version (Lapo Luchini) * Added `pfx` TLS option with new `pfx()` method. (Reid Burke) * Internally changed `.on` to `.once` to prevent possible memory leaks (Matt Blair) * Made all errors reported as an event (Kornel Lesiński) # 2.3.0 (2016-09-20) * Enabled `.field()` to handle objects (Affan Shahid) * Added authentication with client certificates (terusus) * Added `.catch()` for more Promise-like interface (Maxim Samoilov, Kornel Lesiński) * Silenced errors from incomplete gzip streams for compatibility with web browsers (Kornel Lesiński) * Fixed `event.direction` in uploads (Kornel Lesiński) * Fixed returned value of overwritten response object's `on()` method (Juan Dopazo) # 2.2.0 (2016-08-13) * Added `timedout` property to node Request instance (Alexander Pope) * Unified `null` querystring values in node and browser environments. (George Chung) # 2.1.0 (2016-06-14) * Refactored async parsers. Now the `end` callback waits for async parsers to finish (Kornel Lesiński) * Errors thrown in `.end()` callback don't cause the callback to be called twice (Kornel Lesiński) * Added `headers` to `toJSON()` (Tao) # 2.0.0 (2016-05-29) ## Breaking changes Breaking changes are in rarely used functionality, so we hope upgrade will be smooth for most users. * Browser: The `.parse()` method has been renamed to `.serialize()` for consistency with NodeJS version. * Browser: Query string keys without a value used to be parsed as `'undefined'`, now their value is `''` (empty string) (shura, Kornel Lesiński). * NodeJS: The `redirect` event is called after new query string and headers have been set and is allowed to override the request URL (Kornel Lesiński) * `.then()` returns a real `Promise`. Note that use of superagent with promises now requires a global `Promise` object. If you target Internet Explorer or Node 0.10, you'll need `require('es6-promise').polyfill()` or similar. * Upgraded all dependencies (Peter Lyons) * Renamed properties documented as `@api private` to have `_prefixed` names (Kornel Lesiński) ## Probably not breaking changes: * Extracted common functions to request-base (Peter Lyons) * Fixed race condition in pipe tests (Peter Lyons) * Handle `FormData` error events (scriptype) * Fixed wrong jsdoc of Request#attach (George Chung) * Updated and improved tests (Peter Lyons) * `request.head()` supports `.redirects(5)` call (Kornel Lesiński) * `response` event is also emitted when using `.pipe()` # 1.8.2 (2016-03-20) * Fixed handling of HTTP status 204 with content-encoding: gzip (Andrew Shelton) * Handling of FormData error events (scriptype) * Fixed parsing of `vnd+json` MIME types (Kornel Lesiński) * Aliased browser implementation of `.parse()` as `.serialize()` for forward compatibility # 1.8.1 (2016-03-14) * Fixed form-data incompatibility with IE9 # 1.8.0 (2016-03-09) * Extracted common code into request-base class (Peter Lyons) * It does not affect the public API, but please let us know if you notice any plugins/subclasses breaking! * Added option `{type:'auto'}` to `auth` method, which enables browser-native auth types (Jungle, Askar Yusupov) * Added `responseType()` to set XHR `responseType` (chris) * Switched to form-data for browserify-compatible `FormData` (Peter Lyons) * Added `statusCode` to error response when JSON response is malformed (mattdell) * Prevented TCP port conflicts in all tests (Peter Lyons) * Updated form-data dependency # 1.7.2 (2016-01-26) * Fix case-sensitivity of header fields introduced by [`a4ddd6a`](https://github.com/ladjs/superagent/commit/a4ddd6a). (Edward J. Jinotti) * bump extend dependency, as former version did not contain any license information (Lukas Eipert) # 1.7.1 (2016-01-21) * Fixed a conflict with express when using npm 3.x (Glenn) * Fixed redirects after a multipart/form-data POST request (cyclist2) # 1.7.0 (2016-01-18) * When attaching files, read default filename from the `File` object (JD Isaacks) * Add `direction` property to `progress` events (Joseph Dykstra) * Update component-emitter & formidable (Kornel Lesiński) * Don't re-encode query string needlessly (Ruben Verborgh) * ensure querystring is appended when doing `stream.pipe(request)` (Keith Grennan) * change set header function, not call `this.request()` until call `this.end()` (vicanso) * Add no-op `withCredentials` to Node API (markdalgleish) * fix `delete` breaking on ie8 (kenjiokabe) * Don't let request error override responses (Clay Reimann) * Increased number of tests shared between node and client (Kornel Lesiński) # 1.6.0/1.6.1 (2015-12-09) * avoid misleading CORS error message * added 'progress' event on file/form upload in Node (Olivier Lalonde) * return raw response if the response parsing fails (Rei Colina) * parse content-types ending with `+json` as JSON (Eiryyy) * fix to avoid throwing errors on aborted requests (gjurgens) * retain cookies on redirect when hosts match (Tom Conroy) * added Bower manifest (Johnny Freeman) * upgrade to latest cookiejar (Andy Burke) # 1.5.0 (2015-11-30) * encode array values as `key=1&key=2&key=3` etc... (aalpern, Davis Kim) * avoid the error which is omitted from 'socket hang up' * faster JSON parsing, handling of zlib errors (jbellenger) * fix IE11 sends 'undefined' string if data was undefined (Vadim Goncharov) * alias `del()` method as `delete()` (Aaron Krause) * revert Request#parse since it was actually Response#parse # 1.4.0 (2015-09-14) * add Request#parse method to client library * add missing statusCode in client response * don't apply JSON heuristics if a valid parser is found * fix detection of root object for webworkers # 1.3.0 (2015-08-05) * fix incorrect content-length of data set to buffer * serialize request data takes into account charsets * add basic promise support via a `then` function # 1.2.0 (2015-04-13) * add progress events to downlodas * make usable in webworkers * add support for 308 redirects * update node-form-data dependency * update to work in react native * update node-mime dependency # 1.1.0 (2015-03-13) * Fix responseType checks without xhr2 and ie9 tests (rase-) * errors have .status and .response fields if applicable (defunctzombie) * fix end callback called before saving cookies (rase-) # 1.0.0 / 2015-03-08 * All non-200 responses are treated as errors now. (The callback is called with an error when the response has a status < 200 or >= 300 now. In previous versions this would not have raised an error and the client would have to check the `res` object. See [#283](https://github.com/ladjs/superagent/issues/283). * keep timeouts intact across redirects (hopkinsth) * handle falsy json values (themaarten) * fire response events in browser version (Schoonology) * getXHR exported in client version (KidsKilla) * remove arity check on `.end()` callbacks (defunctzombie) * avoid setting content-type for host objects (rexxars) * don't index array strings in querystring (travisjeffery) * fix pipe() with redirects (cyrilis) * add xhr2 file download (vstirbu) * set default response type to text/plain if not specified (warrenseine) # 0.21.0 / 2014-11-11 * Trim text before parsing json (gjohnson) * Update tests to express 4 (gaastonsr) * Prevent double callback when error is thrown (pgn-vole) * Fix missing clearTimeout (nickdima) * Update debug (TooTallNate) # 0.20.0 / 2014-10-02 * Add toJSON() to request and response instances. (yields) * Prevent HEAD requests from getting parsed. (gjohnson) * Update debug. (TooTallNate) # 0.19.1 / 2014-09-24 * Fix basic auth issue when password is falsey value. (gjohnson) # 0.19.0 / 2014-09-24 * Add unset() to browser. (shesek) * Prefer XHR over ActiveX. (omeid) * Catch parse errors. (jacwright) * Update qs dependency. (wercker) * Add use() to node. (Financial-Times) * Add response text to errors. (yields) * Don't send empty cookie headers. (undoZen) * Don't parse empty response bodies. (DveMac) * Use hostname when setting cookie host. (prasunsultania) # 0.18.2 / 2014-07-12 * Handle parser errors. (kof) * Ensure not to use default parsers when there is a user defined one. (kof) # 0.18.1 / 2014-07-05 * Upgrade cookiejar dependency (juanpin) * Support image mime types (nebulade) * Make .agent chainable (kof) * Upgrade debug (TooTallNate) * Fix docs (aheckmann) # 0.18.0 / 2014-04-29 * Use "form-data" module for the multipart/form-data implementation. (TooTallNate) * Add basic `field()` and `attach()` functions for HTML5 FormData. (TooTallNate) * Deprecate `part()`. (TooTallNate) * Set default user-agent header. (bevacqua) * Add `unset()` method for removing headers. (bevacqua) * Update cookiejar. (missinglink) * Fix response error formatting. (shesek) # 0.17.0 / 2014-03-06 * supply uri malformed error to the callback (yields) * add request event (yields) * allow simple auth (yields) * add request event (yields) * switch to component/reduce (visionmedia) * fix part content-disposition (mscdex) * add browser testing via zuul (defunctzombie) * adds request.use() (johntron) # 0.16.0 / 2014-01-07 * remove support for 0.6 (superjoe30) * fix CORS withCredentials (wejendorp) * add "test" script (superjoe30) * add request .accept() method (nickl-) * add xml to mime types mappings (nickl-) * fix parse body error on HEAD requests (gjohnson) * fix documentation typos (matteofigus) * fix content-type + charset (bengourley) * fix null values on query parameters (cristiandouce) # 0.15.7 / 2013-10-19 * pin should.js to 1.3.0 due to breaking change in 2.0.x * fix browserify regression # 0.15.5 / 2013-10-09 * add browser field to support browserify * fix .field() value number support # 0.15.4 / 2013-07-09 * node: add a Request#agent() function to set the http Agent to use # 0.15.3 / 2013-07-05 * fix .pipe() unzipping on more recent nodes. Closes [#240](https://github.com/ladjs/superagent/issues/240) * fix passing an empty object to .query() no longer appends "?" * fix formidable error handling * update formidable # 0.15.2 / 2013-07-02 * fix: emit 'end' when piping. # 0.15.1 / 2013-06-26 * add try/catch around parseLinks # 0.15.0 / 2013-06-25 * make `Response#toError()` have a more meaningful `message` # 0.14.9 / 2013-06-15 * add debug()s to the node client * add .abort() method to node client # 0.14.8 / 2013-06-13 * set .agent = false always * remove X-Requested-With. Closes [#189](https://github.com/ladjs/superagent/issues/189) # 0.14.7 / 2013-06-06 * fix unzip error handling # 0.14.6 / 2013-05-23 * fix HEAD unzip bug # 0.14.5 / 2013-05-23 * add flag to ensure the callback is **never** invoked twice # 0.14.4 / 2013-05-22 * add superagent.js build output * update qs * update emitter-component * revert "add browser field to support browserify" see [GH-221](https://github.com/ladjs/superagent/issues/221) # 0.14.3 / 2013-05-18 * add browser field to support browserify # 0.14.2/ 2013-05-07 * add host object check to fix serialization of File/Blobs etc as json # 0.14.1 / 2013-04-09 * update qs # 0.14.0 / 2013-04-02 * add client-side basic auth * fix retaining of .set() header field case # 0.13.0 / 2013-03-13 * add progress events to client * add simple example * add res.headers as alias of res.header for browser client * add res.get(field) to node/client # 0.12.4 / 2013-02-11 * fix get content-type even if can't get other headers in firefox. fixes [#181](https://github.com/ladjs/superagent/issues/181) # 0.12.3 / 2013-02-11 * add quick "progress" event support # 0.12.2 / 2013-02-04 * add test to check if response acts as a readable stream * add ReadableStream in the Response prototype. * add test to assert correct redirection when the host changes in the location header. * add default Accept-Encoding. Closes [#155](https://github.com/ladjs/superagent/issues/155) * fix req.pipe() return value of original stream for node parity. Closes [#171](https://github.com/ladjs/superagent/issues/171) * remove the host header when cleaning headers to properly follow the redirection. # 0.12.1 / 2013-01-10 * add x-domain error handling # 0.12.0 / 2013-01-04 * add header persistence on redirects # 0.11.0 / 2013-01-02 * add .error Error object. Closes [#156](https://github.com/ladjs/superagent/issues/156) * add forcing of res.text removal for FF HEAD responses. Closes [#162](https://github.com/ladjs/superagent/issues/162) * add reduce component usage. Closes [#90](https://github.com/ladjs/superagent/issues/90) * move better-assert dep to development deps # 0.10.0 / 2012-11-14 * add req.timeout(ms) support for the client # 0.9.10 / 2012-11-14 * fix client-side .query(str) support # 0.9.9 / 2012-11-14 * add .parse(fn) support * fix socket hangup with dates in querystring. Closes [#146](https://github.com/ladjs/superagent/issues/146) * fix socket hangup "error" event when a callback of arity 2 is provided # 0.9.8 / 2012-11-03 * add emission of error from `Request#callback()` * add a better fix for nodes weird socket hang up error * add PUT/POST/PATCH data support to client short-hand functions * add .license property to component.json * change client portion to build using component(1) * fix GET body support [guille] # 0.9.7 / 2012-10-19 * fix `.buffer()` `res.text` when no parser matches # 0.9.6 / 2012-10-17 * change: use `this` when `window` is undefined * update to new component spec [juliangruber] * fix emission of "data" events for compressed responses without encoding. Closes [#125](https://github.com/ladjs/superagent/issues/125) # 0.9.5 / 2012-10-01 * add field name to .attach() * add text "parser" * refactor isObject() * remove wtf isFunction() helper # 0.9.4 / 2012-09-20 * fix `Buffer` responses [TooTallNate] * fix `res.type` when a "type" param is present [TooTallNate] # 0.9.3 / 2012-09-18 * remove **GET** `.send()` == `.query()` special-case (**API** change !!!) # 0.9.2 / 2012-09-17 * add `.aborted` prop * add `.abort()`. Closes [#115](https://github.com/ladjs/superagent/issues/115) # 0.9.1 / 2012-09-07 * add `.forbidden` response property * add component.json * change emitter-component to 0.0.5 * fix client-side tests # 0.9.0 / 2012-08-28 * add `.timeout(ms)`. Closes [#17](https://github.com/ladjs/superagent/issues/17) # 0.8.2 / 2012-08-28 * fix pathname relative redirects. Closes [#112](https://github.com/ladjs/superagent/issues/112) # 0.8.1 / 2012-08-21 * fix redirects when schema is specified # 0.8.0 / 2012-08-19 * add `res.buffered` flag * add buffering of text/\*, json and forms only by default. Closes [#61](https://github.com/ladjs/superagent/issues/61) * add `.buffer(false)` cancellation * add cookie jar support [hunterloftis] * add agent functionality [hunterloftis] # 0.7.0 / 2012-08-03 * allow `query()` to be called after the internal `req` has been created [tootallnate] # 0.6.0 / 2012-07-17 * add `res.send('foo=bar')` default of "application/x-www-form-urlencoded" # 0.5.1 / 2012-07-16 * add "methods" dep * add `.end()` arity check to node callbacks * fix unzip support due to weird node internals # 0.5.0 / 2012-06-16 * Added "Link" response header field parsing, exposing `res.links` # 0.4.3 / 2012-06-15 * Added 303, 305 and 307 as redirect status codes [slaskis] * Fixed passing an object as the url # 0.4.2 / 2012-06-02 * Added component support * Fixed redirect data # 0.4.1 / 2012-04-13 * Added HTTP PATCH support * Fixed: GET / HEAD when following redirects. Closes [#86](https://github.com/ladjs/superagent/issues/86) * Fixed Content-Length detection for multibyte chars # 0.4.0 / 2012-03-04 * Added `.head()` method [browser]. Closes [#78](https://github.com/ladjs/superagent/issues/78) * Added `make test-cov` support * Added multipart request support. Closes [#11](https://github.com/ladjs/superagent/issues/11) * Added all methods that node supports. Closes [#71](https://github.com/ladjs/superagent/issues/71) * Added "response" event providing a Response object. Closes [#28](https://github.com/ladjs/superagent/issues/28) * Added `.query(obj)`. Closes [#59](https://github.com/ladjs/superagent/issues/59) * Added `res.type` (browser). Closes [#54](https://github.com/ladjs/superagent/issues/54) * Changed: default `res.body` and `res.files` to {} * Fixed: port existing query-string fix (browser). Closes [#57](https://github.com/ladjs/superagent/issues/57) # 0.3.0 / 2012-01-24 * Added deflate/gzip support [guillermo] * Added `res.type` (Content-Type void of params) * Added `res.statusCode` to mirror node * Added `res.headers` to mirror node * Changed: parsers take callbacks * Fixed optional schema support. Closes [#49](https://github.com/ladjs/superagent/issues/49) # 0.2.0 / 2012-01-05 * Added url auth support * Added `.auth(username, password)` * Added basic auth support [node]. Closes [#41](https://github.com/ladjs/superagent/issues/41) * Added `make test-docs` * Added guillermo's EventEmitter. Closes [#16](https://github.com/ladjs/superagent/issues/16) * Removed `Request#data()` for SS, renamed to `send()` * Removed `Request#data()` from client, renamed to `send()` * Fixed array support. [browser] * Fixed array support. Closes [#35](https://github.com/ladjs/superagent/issues/35) [node] * Fixed `EventEmitter#emit()` # 0.1.3 / 2011-10-25 * Added error to callback * Bumped node dep for 0.5.x # 0.1.2 / 2011-09-24 * Added markdown documentation * Added `request(url[, fn])` support to the client * Added `qs` dependency to package.json * Added options for `Request#pipe()` * Added support for `request(url, callback)` * Added `request(url)` as shortcut for `request.get(url)` * Added `Request#pipe(stream)` * Added inherit from `Stream` * Added multipart support * Added ssl support (node) * Removed Content-Length field from client * Fixed buffering, `setEncoding()` to utf8 [reported by stagas] * Fixed "end" event when piping # 0.1.1 / 2011-08-20 * Added `res.redirect` flag (node) * Added redirect support (node) * Added `Request#redirects(n)` (node) * Added `.set(object)` header field support * Fixed `Content-Length` support # 0.1.0 / 2011-08-09 * Added support for multiple calls to `.data()` * Added support for `.get(uri, obj)` * Added GET `.data()` querystring support * Added IE{6,7,8} support [alexyoung] # 0.0.1 / 2011-08-05 * Initial commit superagent-8.0.5/LICENSE000066400000000000000000000021171434246777100147260ustar00rootroot00000000000000(The MIT License) Copyright (c) 2014-2016 TJ Holowaychuk 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. superagent-8.0.5/Makefile000066400000000000000000000034231434246777100153620ustar00rootroot00000000000000OLDNODETESTS ?= lib/node/test/*.js lib/node/test/node/*.js NODETESTS ?= test/*.js test/node/*.js BROWSERTESTS ?= test/*.js test/client/*.js REPORTER = spec ifeq ("$(OLD_NODE_TEST)", "1") NODETESTS := $(OLDNODETESTS) endif test: @if [ "$(BROWSER)" = "1" ]; then \ echo test on browser; \ make test-browser; \ fi \ @if [ "$(NODE_TEST)" = "1" ] || [ "x$(BROWSER)" = "x" ]; then \ echo test on node with http1; \ export HTTP2_TEST="" && make test-node; \ if [ "$(HTTP2_TEST_DISABLED)" != "1" ]; then \ echo test on node with http2; \ export HTTP2_TEST="1" && make test-node; \ fi \ fi copy: @if [ "$(OLD_NODE_TEST)" = "1" ]; then \ echo test on old node; \ cp test/node/fixtures lib/node/test/node -rf; \ else \ echo test on plain node; \ fi test-node:copy @NODE_ENV=test HTTP2_TEST=$(HTTP2_TEST) ./node_modules/.bin/nyc ./node_modules/.bin/mocha \ --require should \ --trace-warnings \ --throw-deprecation \ --reporter $(REPORTER) \ --slow 2000 \ --timeout 5000 \ --exit \ $(NODETESTS) test-cov: lib-cov SUPERAGENT_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html test-browser: SAUCE_APPIUM_VERSION=1.7 ./node_modules/.bin/zuul -- $(BROWSERTESTS) test-browser-local: ./node_modules/.bin/zuul --no-coverage --local 4000 -- $(BROWSERTESTS) lib-cov: jscoverage lib lib-cov test-server: @node test/server docs: index.html test-docs docs/index.md index.html: docs/index.md docs/head.html docs/tail.html marked < $< \ | cat docs/head.html - docs/tail.html \ > $@ docclean: rm -f index.html docs/test.html test-docs: docs/head.html docs/tail.html make test REPORTER=doc \ | cat docs/head.html - docs/tail.html \ > docs/test.html clean: rm -fr components .PHONY: copy test-cov test docs test-docs clean test-browser-local superagent-8.0.5/README.md000066400000000000000000000235771434246777100152150ustar00rootroot00000000000000# superagent [![build status](https://img.shields.io/travis/ladjs/superagent.svg)](https://travis-ci.org/ladjs/superagent) [![code coverage](https://img.shields.io/codecov/c/github/ladjs/superagent.svg)](https://codecov.io/gh/ladjs/superagent) [![code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![made with lass](https://img.shields.io/badge/made_with-lass-95CC28.svg)](https://lass.js.org) [![license](https://img.shields.io/github/license/ladjs/superagent.svg)](LICENSE) > Small progressive client-side HTTP request library, and Node.js module with the same API, supporting many high-level HTTP client features. Maintained for [Forward Email](https://github.com/forwardemail) and [Lad](https://github.com/ladjs). ## Table of Contents * [Install](#install) * [Usage](#usage) * [Node](#node) * [Browser](#browser) * [Supported Platforms](#supported-platforms) * [Required Browser Features](#required-browser-features) * [Plugins](#plugins) * [Upgrading from previous versions](#upgrading-from-previous-versions) * [Contributors](#contributors) * [License](#license) ## Install [npm][]: ```sh npm install superagent ``` [yarn][]: ```sh yarn add superagent ``` ## Usage ### Node ```js const superagent = require('superagent'); // callback superagent .post('/api/pet') .send({ name: 'Manny', species: 'cat' }) // sends a JSON post body .set('X-API-Key', 'foobar') .set('accept', 'json') .end((err, res) => { // Calling the end function will send the request }); // promise with then/catch superagent.post('/api/pet').then(console.log).catch(console.error); // promise with async/await (async () => { try { const res = await superagent.post('/api/pet'); console.log(res); } catch (err) { console.error(err); } })(); ``` ### Browser **The browser-ready, minified version of `superagent` is only 50 KB (minified and gzipped).** Browser-ready versions of this module are available via [jsdelivr][], [unpkg][], and also in the `node_modules/superagent/dist` folder in downloads of the `superagent` package. > Note that we also provide unminified versions with `.js` instead of `.min.js` file extensions. #### VanillaJS This is the solution for you if you're just using ` ``` #### Bundler If you are using [browserify][], [webpack][], [rollup][], or another bundler, then you can follow the same usage as [Node](#node) above. ## Supported Platforms * Node: v6.x+ * Browsers (see [.browserslistrc](.browserslistrc)): ```sh npx browserslist ``` ```sh and_chr 102 and_ff 101 and_qq 10.4 and_uc 12.12 android 101 chrome 103 chrome 102 chrome 101 chrome 100 edge 103 edge 102 edge 101 firefox 101 firefox 100 firefox 91 ios_saf 15.5 ios_saf 15.4 ios_saf 15.2-15.3 ios_saf 15.0-15.1 ios_saf 14.5-14.8 ios_saf 14.0-14.4 ios_saf 12.2-12.5 kaios 2.5 op_mini all op_mob 64 opera 86 opera 85 safari 15.5 safari 15.4 samsung 17.0 samsung 16.0 ``` ### Required Browser Features We recommend using (specifically with the bundle mentioned in [VanillaJS](#vanillajs) above): ```html ``` * WeakRef is not supported in Opera 85, iOS Safari 12.2-12.5 * BigInt is not supported in iOS Safari 12.2-12.5 ## Plugins SuperAgent is easily extended via plugins. ```js const nocache = require('superagent-no-cache'); const superagent = require('superagent'); const prefix = require('superagent-prefix')('/static'); superagent .get('/some-url') .query({ action: 'edit', city: 'London' }) // query string .use(prefix) // Prefixes *only* this request .use(nocache) // Prevents caching of *only* this request .end((err, res) => { // Do something }); ``` Existing plugins: * [superagent-no-cache](https://github.com/johntron/superagent-no-cache) - prevents caching by including Cache-Control header * [superagent-prefix](https://github.com/johntron/superagent-prefix) - prefixes absolute URLs (useful in test environment) * [superagent-suffix](https://github.com/timneutkens1/superagent-suffix) - suffix URLs with a given path * [superagent-mock](https://github.com/M6Web/superagent-mock) - simulate HTTP calls by returning data fixtures based on the requested URL * [superagent-mocker](https://github.com/shuvalov-anton/superagent-mocker) — simulate REST API * [superagent-cache](https://github.com/jpodwys/superagent-cache) - A global SuperAgent patch with built-in, flexible caching * [superagent-cache-plugin](https://github.com/jpodwys/superagent-cache-plugin) - A SuperAgent plugin with built-in, flexible caching * [superagent-jsonapify](https://github.com/alex94puchades/superagent-jsonapify) - A lightweight [json-api](http://jsonapi.org/format/) client addon for superagent * [superagent-serializer](https://github.com/zzarcon/superagent-serializer) - Converts server payload into different cases * [superagent-httpbackend](https://www.npmjs.com/package/superagent-httpbackend) - stub out requests using AngularJS' $httpBackend syntax * [superagent-throttle](https://github.com/leviwheatcroft/superagent-throttle) - queues and intelligently throttles requests * [superagent-charset](https://github.com/magicdawn/superagent-charset) - add charset support for node's SuperAgent * [superagent-verbose-errors](https://github.com/jcoreio/superagent-verbose-errors) - include response body in error messages for failed requests * [superagent-declare](https://github.com/damoclark/superagent-declare) - A simple [declarative](https://en.wikipedia.org/wiki/Declarative_programming) API for SuperAgent * [superagent-node-http-timings](https://github.com/webuniverseio/superagent-node-http-timings) - measure http timings in node.js Please prefix your plugin with `superagent-*` so that it can easily be found by others. For SuperAgent extensions such as couchdb and oauth visit the [wiki](https://github.com/ladjs/superagent/wiki). ## Upgrading from previous versions Please see [GitHub releases page](https://github.com/ladjs/superagent/releases) for the current changelog. Our breaking changes are mostly in rarely used functionality and from stricter error handling. * [6.0 to 6.1](https://github.com/ladjs/superagent/releases/tag/v6.1.0) * Browser behaviour changed to match Node when serializing `application/x-www-form-urlencoded`, using `arrayFormat: 'indices'` semantics of `qs` library. (See: ) * [5.x to 6.x](https://github.com/ladjs/superagent/releases/tag/v6.0.0): * Retry behavior is still opt-in, however we now have a more fine-grained list of status codes and error codes that we retry against (see updated docs) * A specific issue with Content-Type matching not being case-insensitive is fixed * Set is now required for IE 9, see [Required Browser Features](#required-browser-features) for more insight * [4.x to 5.x](https://github.com/ladjs/superagent/releases/tag/v5.0.0): * We've implemented the build setup of [Lass](https://lass.js.org) to simplify our stack and linting * Unminified browserified build size has been reduced from 48KB to 20KB (via `tinyify` and the latest version of Babel using `@babel/preset-env` and `.browserslistrc`) * Linting support has been added using `caniuse-lite` and `eslint-plugin-compat` * We can now target what versions of Node we wish to support more easily using `.babelrc` * [3.x to 4.x](https://github.com/ladjs/superagent/releases/tag/v4.0.0-alpha.1): * Ensure you're running Node 6 or later. We've dropped support for Node 4. * We've started using ES6 and for compatibility with Internet Explorer you may need to use Babel. * We suggest migrating from `.end()` callbacks to `.then()` or `await`. * [2.x to 3.x](https://github.com/ladjs/superagent/releases/tag/v3.0.0): * Ensure you're running Node 4 or later. We've dropped support for Node 0.x. * Test code that calls `.send()` multiple times. Invalid calls to `.send()` will now throw instead of sending garbage. * [1.x to 2.x](https://github.com/ladjs/superagent/releases/tag/v2.0.0): * If you use `.parse()` in the *browser* version, rename it to `.serialize()`. * If you rely on `undefined` in query-string values being sent literally as the text "undefined", switch to checking for missing value instead. `?key=undefined` is now `?key` (without a value). * If you use `.then()` in Internet Explorer, ensure that you have a polyfill that adds a global `Promise` object. * 0.x to 1.x: * Instead of 1-argument callback `.end(function(res){})` use `.then(res => {})`. ## Contributors | Name | | ------------------- | | **Kornel Lesiński** | | **Peter Lyons** | | **Hunter Loftis** | | **Nick Baugh** | ## License [MIT](LICENSE) © TJ Holowaychuk ## [npm]: https://www.npmjs.com/ [yarn]: https://yarnpkg.com/ [jsdelivr]: https://www.jsdelivr.com/ [unpkg]: https://unpkg.com/ [browserify]: https://github.com/browserify/browserify [webpack]: https://github.com/webpack/webpack [rollup]: https://github.com/rollup/rollup superagent-8.0.5/SECURITY.md000066400000000000000000000001541434246777100155110ustar00rootroot00000000000000# Security Policy ## Reporting a Vulnerability Please report security issues to `niftylettuce@gmail.com` superagent-8.0.5/ci/000077500000000000000000000000001434246777100143135ustar00rootroot00000000000000superagent-8.0.5/ci/remove-deps-4-old-node.js000066400000000000000000000011541434246777100207400ustar00rootroot00000000000000const fs = require('fs'); const path = require('path'); const package = require('../package.json'); const UNSUPPORT_DEPS_4_OLD = new Set([ '@commitlint/cli', '@commitlint/config-conventional', 'eslint', 'eslint-config-xo-lass', 'eslint-plugin-compat', 'eslint-plugin-node', 'husky', 'lint-staged', 'marked', 'remark-cli', 'remark-preset-github', 'xo' ]); for (const item in package.devDependencies) { if (UNSUPPORT_DEPS_4_OLD.has(item)) { package.devDependencies[item] = undefined; } } fs.writeFileSync( path.join(__dirname, '../package.json'), JSON.stringify(package, null, 2) ); superagent-8.0.5/docs/000077500000000000000000000000001434246777100146505ustar00rootroot00000000000000superagent-8.0.5/docs/head.html000066400000000000000000000005341434246777100164410ustar00rootroot00000000000000 SuperAgent — elegant API for AJAX in Node and browsers
superagent-8.0.5/docs/images/000077500000000000000000000000001434246777100161155ustar00rootroot00000000000000superagent-8.0.5/docs/images/bg.png000066400000000000000000000212301434246777100172110ustar00rootroot00000000000000PNG  IHDRffPzPLTE#%%:;;!##9::*+-668,--556#$%355 !#%%'455/00:<<%'(566(*+666+--689)+,446+,-88://08::445-//::<##%89:,-/688--/!#$/11'(*()+++-*,,$%%'()+,,)*,022133*,----)*+,,-456002014)++()*/01-/0699135++,///*++3569;;**,::;001145(**345/0224656866999:335466889"#%"#$899.01&(*024011+-.*+,013!"#)**)+--.0$%'144//1146244&()99;%&(9:;$%&134+-/ !"012(()555%%%''(000888""#!!"<<<:::999))*##$;;;222))+,,,:;<569k| IDATx4zw/> U^D%"Q\&$Mwݫjr #i*}3>S6|n K^Lbp)63 FfWmS[!>׾3;%]|ʴ޵$ф '7EV~ngHIkvsmj~WT5Z%ԣU7X?{ ӱd`r ȕW `D⛁h :b~[@FWuMcniUԽe&)Y z}ЌZqۚřhrb%Ɖ+ 3,%,: (9=l~9j*LJQ,M.h&[ n#O檉p9"w!&i=^<# ")Ð* 6ꤗ@5)M%z4YWsDj MդY}A J#kt>7cKV(.Kb꜃>١sQdV;:8ȹ#-v\%vLp+A />&TVf8Ͼa- )Z?Z[wF[lH^KZnh*5 )v5i\٩3iZ͸׮p@&'G ЦX&(ӆؓX9 bËԥꢺtmoڪǾOW8Ue?؎8mj4ͮmyX03[hW]l 3}uE=>-x.LruKEW|ke!&O9lWx:'|=52Xy& 2%mm?z,@ r}b4sV5(Q`oS7э-(F^Xd_\CU& d1J2Xp47R5OuͰ |Ku)L*ĶI?(R?Vfx,nF\tF⾋P9$BFY4+j5R黉7FO+ NcTmgb?C*KeA`n!6^/:C~QWcKs9bǰf{"דp(m ƹ-g[%0f.DL%5Y+U׋45N\&{F[J&P$[R`'c9 ?&EnC "0n;,gP):\]i?Z4GX_K&Nݺ`w0 [%. K>\qҏFVN5UJM.nB'Z,d?l?mOC.&X%槈 b,~13JrJr" #sh@5b ɄIwND7.-r^ZW55 bD*%V~'9ܖȖHOmԍa5g]#7ӑNGpwVCF:;0QDD[{h>g~ZxҹAq*1WԎ)OȔ2*L-3BTYnOm.[wZOiB]z8 D\{:${࢘ytFOG &,< ƇQsmA'sB:4[fJ`CpuVJHdvԃk5v#kZ6+Մ;\F^f9)~:3wХU'TI"_~|913~LxD2#v!JGD&I] G»Y~*`j}fς* >}ݝw<ٹ]NX?8-#]1bw3`ۄRS pT:I#R/S#,MpSt䮑Qo+\ꘑTDԙ49ҽ)JLV'`oCR5iw; ٺJ5:@JKgB`&ɑ掩ה&;ht̒`ܭg}BG ׋;E9̮b?`ֆؔ~@,uTϦ%6*klr?0c7n{H솋<+~r)X@#xX?_ uf YFHBKjQh7ݞ) s٨ĞΗpZb`-Nz5c 5JTW-q 7 G77'&^e.d.M` 8`I !$BVXKܶV GBFh$-(#1dylyJ5=$Bb#JX^RBm&t0 }A }'0h,Mu,t,`搹=8L~@+QA7},[œwz"kb7_(U[o5<6ȓrx| sk$a1d@lrq \v*SLPM%~nՋ~A?v3HMy"=xWR.^ 9r@='W Kc ?$ 6Ef5(|ߤw|u302yf &H\H=ਈ)r*uK^U%SHjn,!HPYorbrډ^? HYpq{4Ws\ _SΔ0\㎮5 =_^Юʠt`˰.7)*u_ˊOʍD;/;"-M~,XЁsMc&nG 3ڠ9LSEsZ"-TkpO}*/uKMQ?O/uׄ{kѵxct>2YY#sT;94&U򑭉Lo$P֙ve`A݇X5*x6/|׶ x\,;-?sF P:r"YlՃM\P{!bP[&C& 3btA}ax}^_]:vn |j-ѿ:Y"R?h{Afv5[w/bs՛IVg;t@ uXi/NSDM= -Hը蘹,R)ޑzJ$_O>ObQHn@;_9cݑ+%07 ٣&xK-jXld]}UI%UQ'X'۽/ o,D(Oܳ8~R  L&q|>d/ZO%O$'x?Qb\CQJ/@ȿiiR>4d#N&};Ax.33Ʌu~3JO$a /h'Z-us|a\QS")qGݑ?uA_F)3Yapfm&?[u c 8Nئ xcl֞?*+ބ)bǬcyڄvO󎲸ettv.;3zJ ~We%:ZޱkQ^@ n0a۔8DJPvl "ꠂkh.T35*,O)i96u*NqwPDv-Qـp9/ P@hҔNXIcl|ʕA=5|7?5@|i_fX4lu~dj'}oi2ؕ4De<;O0K_/T7I̐xBpxBJMf$~Q~p@QZ2"d n>[^e: pqfe4|%;kySEOo]tH^ᖁ*=7-7( }WlPG40*: 0m"zsjtrJ6cji4q o,TX4O fr~C7TkkRzzH_eUP 8 KkܕTz[KV/Hĕ*Mj)I?"Lqps5z3{:י̠eB_x|"KDibq?jnX>tB{%_>.+GJM+@;pCy(~4z". V |hz:3msX.@FkxW UMHƀ\~gN~vX }MĖW+_ 5mLcj(MکƇ3@@t%[X ˟uVP!Dzpk@E9$R?&58 :HnAg_m0MnwMM5O_eѥ/ʅi!m|.cM~wU|N 5'+|zWs@JHMk 37lT"O:y0]k\ :~JPui)lҒ2]{-E %%?Ly&`6jW!!> V7f ZTܵ%mT{ICo^QT\FrI߬xV^n%v XGyn_6l9%==vaoư7z8_gQa?+81 8W$-;jj 0MV+bHBuܪ9kjWn孬+og#TE{|y!Az}&VwR ir? pG?mFLVs r9bM(٠xyQ[ ^¿p 7 gt8X#b&-kjŸ+/| xm `Ӓ-K >mHC5yW~8˩:gp&L R$8\+^DQkG D7-B<}"S,GRHE3gĆtH:Wel}aP񵻗I)/ ,ͅmר2d% H`)-FU8vѺmmPZͤDssK \@S琭_tpot{M{ZѦ?U'K?.X Ggd! '^s>$YWi_GXfB90aПHfhu 0^f@'}Š*'H;>nwNF4l Id5h(EoqGS[I|d7r9]M7Є2h!N!Lq̽yNhqW-t=#tp,D0ֺe;W ",alHuI`*Dàe>$nbFkV̖hrW'qpJRzXG?$?sPU p- k_Ѓ \3Z^M\oQ&U6OV]䟯zjiD7`ýg,Y^),b/)6&`xU_y3nj\쏇/9=8km'2l4/AKY@H])Z}ZBVx1|Iږ#mRx3H)9hhl;qdG1j{ t:#3W\?g3/i٠Xǂ EB6"tE%=Nmy; hˉ"q "eKnbD;`JK#qLywߓ44;Kec24h%0SeeCàvAB\%@5nLHLa1'u! ۍF:hqkHG3o޽h9lײsSƜDH"e+{푟-0YJ}nw"#L7`8/7YP\L5n'p%;}"fv>,O,Tͦ Z߽6Mv8;bgUo=j~UV"͉V}pmS^c[SkQnl7U%-z]EY?4m.ٯz+XtAl~;|i>.t=hoh>xOd вbXp+- V?Wf*V>V",\0#[8x 6ړݚl^' v7߽LFk[ۃICЎ[=UO |UK‹LWnmZ/Ղ&e;y4@nۼV9&sRF_20KvY{Lf\ B>8YSAxi4lj=Zh߲mK] KKIENDB`superagent-8.0.5/docs/index.md000066400000000000000000000754471434246777100163220ustar00rootroot00000000000000 # SuperAgent SuperAgent is light-weight progressive ajax API crafted for flexibility, readability, and a low learning curve after being frustrated with many of the existing request APIs. It also works with Node.js! ```javascript request .post('/api/pet') .send({ name: 'Manny', species: 'cat' }) .set('X-API-Key', 'foobar') .set('Accept', 'application/json') .then(res => { alert('yay got ' + JSON.stringify(res.body)); }); ``` ## Test documentation [**中文文档**](docs/zh_CN/index.html) The following [test documentation](docs/test.html) was generated with [Mocha's](https://mochajs.org/) "doc" reporter, and directly reflects the test suite. This provides an additional source of documentation. ## Request basics A request can be initiated by invoking the appropriate method on the `request` object, then calling `.then()` (or `.end()` [or `await`](#promise-and-generator-support)) to send the request. For example a simple __GET__ request: ```javascript request .get('/search') .then(res => { // res.body, res.headers, res.status }) .catch(err => { // err.message, err.response }); ``` HTTP method may also be passed as a string: ```javascript request('GET', '/search').then(success, failure); ``` Old-style callbacks are also supported, but not recommended. *Instead of* `.then()` you can call `.end()`: ```javascript request('GET', '/search').end(function(err, res){ if (res.ok) {} }); ``` Absolute URLs can be used. In web browsers absolute URLs work only if the server implements [CORS](#cors). ```javascript request .get('https://example.com/search') .then(res => { }); ``` The __Node__ client supports making requests to [Unix Domain Sockets](https://en.wikipedia.org/wiki/Unix_domain_socket): ```javascript // pattern: https?+unix://SOCKET_PATH/REQUEST_PATH // Use `%2F` as `/` in SOCKET_PATH try { const res = await request .get('http+unix://%2Fabsolute%2Fpath%2Fto%2Funix.sock/search'); // res.body, res.headers, res.status } catch(err) { // err.message, err.response } ``` __DELETE__, __HEAD__, __PATCH__, __POST__, and __PUT__ requests can also be used, simply change the method name: ```javascript request .head('/favicon.ico') .then(res => { }); ``` __DELETE__ can be also called as `.del()` for compatibility with old IE where `delete` is a reserved word. The HTTP method defaults to __GET__, so if you wish, the following is valid: ```javascript request('/search', (err, res) => { }); ``` ## Using HTTP/2 To make a request using HTTP/2 protocol only (with no HTTP/1.x fallback), use the `.http2()` method. ```javascript const request = require('superagent'); const res = await request .get('https://example.com/h2') .http2(); ``` ## Setting header fields Setting header fields is simple, invoke `.set()` with a field name and value: ```javascript request .get('/search') .set('API-Key', 'foobar') .set('Accept', 'application/json') .then(callback); ``` You may also pass an object to set several fields in a single call: ```javascript request .get('/search') .set({ 'API-Key': 'foobar', Accept: 'application/json' }) .then(callback); ``` ## `GET` requests The `.query()` method accepts objects, which when used with the __GET__ method will form a query-string. The following will produce the path `/search?query=Manny&range=1..5&order=desc`. ```javascript request .get('/search') .query({ query: 'Manny' }) .query({ range: '1..5' }) .query({ order: 'desc' }) .then(res => { }); ``` Or as a single object: ```javascript request .get('/search') .query({ query: 'Manny', range: '1..5', order: 'desc' }) .then(res => { }); ``` The `.query()` method accepts strings as well: ```javascript request .get('/querystring') .query('search=Manny&range=1..5') .then(res => { }); ``` Or joined: ```javascript request .get('/querystring') .query('search=Manny') .query('range=1..5') .then(res => { }); ``` ## `HEAD` requests You can also use the `.query()` method for HEAD requests. The following will produce the path `/users?email=joe@smith.com`. ```javascript request .head('/users') .query({ email: 'joe@smith.com' }) .then(res => { }); ``` ## `POST` / `PUT` requests A typical JSON __POST__ request might look a little like the following, where we set the Content-Type header field appropriately, and "write" some data, in this case just a JSON string. ```javascript request.post('/user') .set('Content-Type', 'application/json') .send('{"name":"tj","pet":"tobi"}') .then(callback) .catch(errorCallback) ``` Since JSON is undoubtedly the most common, it's the _default_! The following example is equivalent to the previous. ```javascript request.post('/user') .send({ name: 'tj', pet: 'tobi' }) .then(callback, errorCallback) ``` Or using multiple `.send()` calls: ```javascript request.post('/user') .send({ name: 'tj' }) .send({ pet: 'tobi' }) .then(callback, errorCallback) ``` By default sending strings will set the `Content-Type` to `application/x-www-form-urlencoded`, multiple calls will be concatenated with `&`, here resulting in `name=tj&pet=tobi`: ```javascript request.post('/user') .send('name=tj') .send('pet=tobi') .then(callback, errorCallback); ``` SuperAgent formats are extensible, however by default "json" and "form" are supported. To send the data as `application/x-www-form-urlencoded` simply invoke `.type()` with "form", where the default is "json". This request will __POST__ the body "name=tj&pet=tobi". ```javascript request.post('/user') .type('form') .send({ name: 'tj' }) .send({ pet: 'tobi' }) .then(callback, errorCallback) ``` Sending a [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData) object is also supported. The following example will __POST__ the content of the HTML form identified by id="myForm": ```javascript request.post('/user') .send(new FormData(document.getElementById('myForm'))) .then(callback, errorCallback) ``` ## Setting the `Content-Type` The obvious solution is to use the `.set()` method: ```javascript request.post('/user') .set('Content-Type', 'application/json') ``` As a short-hand the `.type()` method is also available, accepting the canonicalized MIME type name complete with type/subtype, or simply the extension name such as "xml", "json", "png", etc: ```javascript request.post('/user') .type('application/json') request.post('/user') .type('json') request.post('/user') .type('png') ``` ## Serializing request body SuperAgent will automatically serialize JSON and forms. You can setup automatic serialization for other types as well: ```js request.serialize['application/xml'] = function (obj) { return 'string generated from obj'; }; // going forward, all requests with a Content-type of // 'application/xml' will be automatically serialized ``` If you want to send the payload in a custom format, you can replace the built-in serialization with the `.serialize()` method on a per-request basis: ```js request .post('/user') .send({foo: 'bar'}) .serialize(obj => { return 'string generated from obj'; }); ``` ## Retrying requests When given the `.retry()` method, SuperAgent will automatically retry requests, if they fail in a way that is transient or could be due to a flaky Internet connection. This method has two optional arguments: number of retries (default 1) and a callback. It calls `callback(err, res)` before each retry. The callback may return `true`/`false` to control whether the request should be retried (but the maximum number of retries is always applied). ```javascript request .get('https://example.com/search') .retry(2) // or: .retry(2, callback) .then(finished); .catch(failed); ``` Use `.retry()` only with requests that are *idempotent* (i.e. multiple requests reaching the server won't cause undesirable side effects like duplicate purchases). All request methods are tried by default (which means if you do not want POST requests to be retried, you will need to pass a custom retry callback). By default the following status codes are retried: * `408` * `413` * `429` * `500` * `502` * `503` * `504` * `521` * `522` * `524` By default the following error codes are retried: * `'ETIMEDOUT'` * `'ECONNRESET'` * `'EADDRINUSE'` * `'ECONNREFUSED'` * `'EPIPE'` * `'ENOTFOUND'` * `'ENETUNREACH'` * `'EAI_AGAIN'` ## Setting Accept In a similar fashion to the `.type()` method it is also possible to set the `Accept` header via the short hand method `.accept()`. Which references `request.types` as well allowing you to specify either the full canonicalized MIME type name as `type/subtype`, or the extension suffix form as "xml", "json", "png", etc. for convenience: ```javascript request.get('/user') .accept('application/json') request.get('/user') .accept('json') request.post('/user') .accept('png') ``` ### Facebook and Accept JSON If you are calling Facebook's API, be sure to send an `Accept: application/json` header in your request. If you don't do this, Facebook will respond with `Content-Type: text/javascript; charset=UTF-8`, which SuperAgent will not parse and thus `res.body` will be undefined. You can do this with either `req.accept('json')` or `req.set('Accept', 'application/json')`. See [issue 1078](https://github.com/ladjs/superagent/issues/1078) for details. ## Query strings `req.query(obj)` is a method which may be used to build up a query-string. For example populating `?format=json&dest=/login` on a __POST__: ```javascript request .post('/') .query({ format: 'json' }) .query({ dest: '/login' }) .send({ post: 'data', here: 'wahoo' }) .then(callback); ``` By default the query string is not assembled in any particular order. An asciibetically-sorted query string can be enabled with `req.sortQuery()`. You may also provide a custom sorting comparison function with `req.sortQuery(myComparisonFn)`. The comparison function should take 2 arguments and return a negative/zero/positive integer. ```js // default order request.get('/user') .query('name=Nick') .query('search=Manny') .sortQuery() .then(callback) // customized sort function request.get('/user') .query('name=Nick') .query('search=Manny') .sortQuery((a, b) => a.length - b.length) .then(callback) ``` ## TLS options In Node.js SuperAgent supports methods to configure HTTPS requests: - `.ca()`: Set the CA certificate(s) to trust - `.cert()`: Set the client certificate chain(s) - `.key()`: Set the client private key(s) - `.pfx()`: Set the client PFX or PKCS12 encoded private key and certificate chain - `.disableTLSCerts()`: Does not reject expired or invalid TLS certs. Sets internally `rejectUnauthorized=true`. *Be warned, this method allows MITM attacks.* For more information, see Node.js [https.request docs](https://nodejs.org/api/https.html#https_https_request_options_callback). ```js var key = fs.readFileSync('key.pem'), cert = fs.readFileSync('cert.pem'); request .post('/client-auth') .key(key) .cert(cert) .then(callback); ``` ```js var ca = fs.readFileSync('ca.cert.pem'); request .post('https://localhost/private-ca-server') .ca(ca) .then(res => {}); ``` ## Parsing response bodies SuperAgent will parse known response-body data for you, currently supporting `application/x-www-form-urlencoded`, `application/json`, and `multipart/form-data`. You can setup automatic parsing for other response-body data as well: ```js //browser request.parse['application/xml'] = function (str) { return {'object': 'parsed from str'}; }; //node request.parse['application/xml'] = function (res, cb) { //parse response text and set res.body here cb(null, res); }; //going forward, responses of type 'application/xml' //will be parsed automatically ``` You can set a custom parser (that takes precedence over built-in parsers) with the `.buffer(true).parse(fn)` method. If response buffering is not enabled (`.buffer(false)`) then the `response` event will be emitted without waiting for the body parser to finish, so `response.body` won't be available. ### JSON / Urlencoded The property `res.body` is the parsed object, for example if a request responded with the JSON string '{"user":{"name":"tobi"}}', `res.body.user.name` would be "tobi". Likewise the x-www-form-urlencoded value of "user[name]=tobi" would yield the same result. Only one level of nesting is supported. If you need more complex data, send JSON instead. Arrays are sent by repeating the key. `.send({color: ['red','blue']})` sends `color=red&color=blue`. If you want the array keys to contain `[]` in their name, you must add it yourself, as SuperAgent doesn't add it automatically. ### Multipart The Node client supports _multipart/form-data_ via the [Formidable](https://github.com/felixge/node-formidable) module. When parsing multipart responses, the object `res.files` is also available to you. Suppose for example a request responds with the following multipart body: --whoop Content-Disposition: attachment; name="image"; filename="tobi.png" Content-Type: image/png ... data here ... --whoop Content-Disposition: form-data; name="name" Content-Type: text/plain Tobi --whoop-- You would have the values `res.body.name` provided as "Tobi", and `res.files.image` as a `File` object containing the path on disk, filename, and other properties. ### Binary In browsers, you may use `.responseType('blob')` to request handling of binary response bodies. This API is unnecessary when running in node.js. The supported argument values for this method are - `'blob'` passed through to the XmlHTTPRequest `responseType` property - `'arraybuffer'` passed through to the XmlHTTPRequest `responseType` property ```js req.get('/binary.data') .responseType('blob') .then(res => { // res.body will be a browser native Blob type here }); ``` For more information, see the Mozilla Developer Network [xhr.responseType docs](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType). ## Response properties Many helpful flags and properties are set on the `Response` object, ranging from the response text, parsed response body, header fields, status flags and more. ### Response text The `res.text` property contains the unparsed response body string. This property is always present for the client API, and only when the mime type matches "text/*", "*/json", or "x-www-form-urlencoded" by default for node. The reasoning is to conserve memory, as buffering text of large bodies such as multipart files or images is extremely inefficient. To force buffering see the "Buffering responses" section. ### Response body Much like SuperAgent can auto-serialize request data, it can also automatically parse it. When a parser is defined for the Content-Type, it is parsed, which by default includes "application/json" and "application/x-www-form-urlencoded". The parsed object is then available via `res.body`. ### Response header fields The `res.header` contains an object of parsed header fields, lowercasing field names much like node does. For example `res.header['content-length']`. ### Response Content-Type The Content-Type response header is special-cased, providing `res.type`, which is void of the charset (if any). For example the Content-Type of "text/html; charset=utf8" will provide "text/html" as `res.type`, and the `res.charset` property would then contain "utf8". ### Response status The response status flags help determine if the request was a success, among other useful information, making SuperAgent ideal for interacting with RESTful web services. These flags are currently defined as: ```javascript var type = status / 100 | 0; // status / class res.status = status; res.statusType = type; // basics res.info = 1 == type; res.ok = 2 == type; res.clientError = 4 == type; res.serverError = 5 == type; res.error = 4 == type || 5 == type; // sugar res.accepted = 202 == status; res.noContent = 204 == status || 1223 == status; res.badRequest = 400 == status; res.unauthorized = 401 == status; res.notAcceptable = 406 == status; res.notFound = 404 == status; res.forbidden = 403 == status; ``` ## Aborting requests To abort requests simply invoke the `req.abort()` method. ## Timeouts Sometimes networks and servers get "stuck" and never respond after accepting a request. Set timeouts to avoid requests waiting forever. * `req.timeout({deadline:ms})` or `req.timeout(ms)` (where `ms` is a number of milliseconds > 0) sets a deadline for the entire request (including all uploads, redirects, server processing time) to complete. If the response isn't fully downloaded within that time, the request will be aborted. * `req.timeout({response:ms})` sets maximum time to wait for the first byte to arrive from the server, but it does not limit how long the entire download can take. Response timeout should be at least few seconds longer than just the time it takes the server to respond, because it also includes time to make DNS lookup, TCP/IP and TLS connections, and time to upload request data. You should use both `deadline` and `response` timeouts. This way you can use a short response timeout to detect unresponsive networks quickly, and a long deadline to give time for downloads on slow, but reliable, networks. Note that both of these timers limit how long *uploads* of attached files are allowed to take. Use long timeouts if you're uploading files. ```javascript request .get('/big-file?network=slow') .timeout({ response: 5000, // Wait 5 seconds for the server to start sending, deadline: 60000, // but allow 1 minute for the file to finish loading. }) .then(res => { /* responded in time */ }, err => { if (err.timeout) { /* timed out! */ } else { /* other error */ } }); ``` Timeout errors have a `.timeout` property. ## Authentication In both Node and browsers auth available via the `.auth()` method: ```javascript request .get('http://local') .auth('tobi', 'learnboost') .then(callback); ``` In the _Node_ client Basic auth can be in the URL as "user:pass": ```javascript request.get('http://tobi:learnboost@local').then(callback); ``` By default only `Basic` auth is used. In browser you can add `{type:'auto'}` to enable all methods built-in in the browser (Digest, NTLM, etc.): ```javascript request.auth('digest', 'secret', {type:'auto'}) ``` The `auth` method also supports a `type` of `bearer`, to specify token-based authentication: ```javascript request.auth('my_token', { type: 'bearer' }) ``` ## Following redirects By default up to 5 redirects will be followed, however you may specify this with the `res.redirects(n)` method: ```javascript const response = await request.get('/some.png').redirects(2); ``` Redirects exceeding the limit are treated as errors. Use `.ok(res => res.status < 400)` to read them as successful responses. ## Agents for global state ### Saving cookies In Node SuperAgent does not save cookies by default, but you can use the `.agent()` method to create a copy of SuperAgent that saves cookies. Each copy has a separate cookie jar. ```javascript const agent = request.agent(); agent .post('/login') .then(() => { return agent.get('/cookied-page'); }); ``` In browsers cookies are managed automatically by the browser, so the `.agent()` does not isolate cookies. ### Default options for multiple requests Regular request methods called on the agent will be used as defaults for all requests made by that agent. ```javascript const agent = request.agent() .use(plugin) .auth(shared); await agent.get('/with-plugin-and-auth'); await agent.get('/also-with-plugin-and-auth'); ``` The complete list of methods that the agent can use to set defaults is: `use`, `on`, `once`, `set`, `query`, `type`, `accept`, `auth`, `withCredentials`, `sortQuery`, `retry`, `ok`, `redirects`, `timeout`, `buffer`, `serialize`, `parse`, `ca`, `key`, `pfx`, `cert`. ## Piping data The Node client allows you to pipe data to and from the request. Please note that `.pipe()` is used **instead of** `.end()`/`.then()` methods. For example piping a file's contents as the request: ```javascript const request = require('superagent'); const fs = require('fs'); const stream = fs.createReadStream('path/to/my.json'); const req = request.post('/somewhere'); req.type('json'); stream.pipe(req); ``` Note that when you pipe to a request, superagent sends the piped data with [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding), which isn't supported by all servers (for instance, Python WSGI servers). Or piping the response to a file: ```javascript const stream = fs.createWriteStream('path/to/my.json'); const req = request.get('/some.json'); req.pipe(stream); ``` It's not possible to mix pipes and callbacks or promises. Note that you should **NOT** attempt to pipe the result of `.end()` or the `Response` object: ```javascript // Don't do either of these: const stream = getAWritableStream(); const req = request .get('/some.json') // BAD: this pipes garbage to the stream and fails in unexpected ways .end((err, this_does_not_work) => this_does_not_work.pipe(stream)) const req = request .get('/some.json') .end() // BAD: this is also unsupported, .pipe calls .end for you. .pipe(nope_its_too_late); ``` In a [future version](https://github.com/ladjs/superagent/issues/1188) of superagent, improper calls to `pipe()` will fail. ## Multipart requests SuperAgent is also great for _building_ multipart requests for which it provides methods `.attach()` and `.field()`. When you use `.field()` or `.attach()` you can't use `.send()` and you *must not* set `Content-Type` (the correct type will be set for you). ### Attaching files To send a file use `.attach(name, [file], [options])`. You can attach multiple files by calling `.attach` multiple times. The arguments are: * `name` — field name in the form. * `file` — either string with file path or `Blob`/`Buffer` object. * `options` — (optional) either string with custom file name or `{filename: string}` object. In Node also `{contentType: 'mime/type'}` is supported. In browser create a `Blob` with an appropriate type instead.
```javascript request .post('/upload') .attach('image1', 'path/to/felix.jpeg') .attach('image2', imageBuffer, 'luna.jpeg') .field('caption', 'My cats') .then(callback); ``` ### Field values Much like form fields in HTML, you can set field values with `.field(name, value)` and `.field({name: value})`. Suppose you want to upload a few images with your name and email, your request might look something like this: ```javascript request .post('/upload') .field('user[name]', 'Tobi') .field('user[email]', 'tobi@learnboost.com') .field('friends[]', ['loki', 'jane']) .attach('image', 'path/to/tobi.png') .then(callback); ``` ## Compression The node client supports compressed responses, best of all, you don't have to do anything! It just works. ## Buffering responses To force buffering of response bodies as `res.text` you may invoke `req.buffer()`. To undo the default of buffering for text responses such as "text/plain", "text/html" etc you may invoke `req.buffer(false)`. When buffered the `res.buffered` flag is provided, you may use this to handle both buffered and unbuffered responses in the same callback. ## CORS For security reasons, browsers will block cross-origin requests unless the server opts-in using CORS headers. Browsers will also make extra __OPTIONS__ requests to check what HTTP headers and methods are allowed by the server. [Read more about CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS). The `.withCredentials()` method enables the ability to send cookies from the origin, however only when `Access-Control-Allow-Origin` is _not_ a wildcard ("*"), and `Access-Control-Allow-Credentials` is "true". ```javascript request .get('https://api.example.com:4001/') .withCredentials() .then(res => { assert.equal(200, res.status); assert.equal('tobi', res.text); }) ``` ## Error handling Your callback function will always be passed two arguments: error and response. If no error occurred, the first argument will be null: ```javascript request .post('/upload') .attach('image', 'path/to/tobi.png') .then(res => { }); ``` An "error" event is also emitted, with you can listen for: ```javascript request .post('/upload') .attach('image', 'path/to/tobi.png') .on('error', handle) .then(res => { }); ``` Note that **superagent considers 4xx and 5xx responses (as well as unhandled 3xx responses) errors by default**. For example, if you get a `304 Not modified`, `403 Forbidden` or `500 Internal server error` response, this status information will be available via `err.status`. Errors from such responses also contain an `err.response` field with all of the properties mentioned in "[Response properties](#response-properties)". The library behaves in this way to handle the common case of wanting success responses and treating HTTP error status codes as errors while still allowing for custom logic around specific error conditions. Network failures, timeouts, and other errors that produce no response will contain no `err.status` or `err.response` fields. If you wish to handle 404 or other HTTP error responses, you can query the `err.status` property. When an HTTP error occurs (4xx or 5xx response) the `res.error` property is an `Error` object, this allows you to perform checks such as: ```javascript if (err && err.status === 404) { alert('oh no ' + res.body.message); } else if (err) { // all other error types we handle generically } ``` Alternatively, you can use the `.ok(callback)` method to decide whether a response is an error or not. The callback to the `ok` function gets a response and returns `true` if the response should be interpreted as success. ```javascript request.get('/404') .ok(res => res.status < 500) .then(response => { // reads 404 page as a successful response }) ``` ## Progress tracking SuperAgent fires `progress` events on upload and download of large files. ```javascript request.post(url) .attach('field_name', file) .on('progress', event => { /* the event is: { direction: "upload" or "download" percent: 0 to 100 // may be missing if file size is unknown total: // total file size, may be missing loaded: // bytes downloaded or uploaded so far } */ }) .then() ``` ## Testing on localhost ### Forcing specific connection IP address In Node.js it's possible to ignore DNS resolution and direct all requests to a specific IP address using `.connect()` method. For example, this request will go to localhost instead of `example.com`: ```javascript const res = await request.get("http://example.com").connect("127.0.0.1"); ``` Because the request may be redirected, it's possible to specify multiple hostnames and multiple IPs, as well as a special `*` as the fallback (note: other wildcards are not supported). The requests will keep their `Host` header with the original value. `.connect(undefined)` turns off the feature. ```javascript const res = await request.get("http://redir.example.com:555") .connect({ "redir.example.com": "127.0.0.1", // redir.example.com:555 will use 127.0.0.1:555 "www.example.com": false, // don't override this one; use DNS as normal "mapped.example.com": { host: "127.0.0.1", port: 8080}, // mapped.example.com:* will use 127.0.0.1:8080 "*": "proxy.example.com", // all other requests will go to this host }); ``` ### Ignoring broken/insecure HTTPS on localhost In Node.js, when HTTPS is misconfigured and insecure (e.g. using self-signed certificate *without* specifying own `.ca()`), it's still possible to permit requests to `localhost` by calling `.trustLocalhost()`: ```javascript const res = await request.get("https://localhost").trustLocalhost() ``` Together with `.connect("127.0.0.1")` this may be used to force HTTPS requests to any domain to be re-routed to `localhost` instead. It's generally safe to ignore broken HTTPS on `localhost`, because the loopback interface is not exposed to untrusted networks. Trusting `localhost` may become the default in the future. Use `.trustLocalhost(false)` to force check of `127.0.0.1`'s authenticity. We intentionally don't support disabling of HTTPS security when making requests to any other IP, because such options end up abused as a quick "fix" for HTTPS problems. You can get free HTTPS certificates from [Let's Encrypt](https://certbot.eff.org) or set your own CA (`.ca(ca_public_pem)`) to make your self-signed certificates trusted. ## Promise and Generator support SuperAgent's request is a "thenable" object that's compatible with JavaScript promises and the `async`/`await` syntax. ```javascript const res = await request.get(url); ``` If you're using promises, **do not** call `.end()` or `.pipe()`. Any use of `.then()` or `await` disables all other ways of using the request. Libraries like [co](https://github.com/tj/co) or a web framework like [koa](https://github.com/koajs/koa) can `yield` on any SuperAgent method: ```javascript const req = request .get('http://local') .auth('tobi', 'learnboost'); const res = yield req; ``` Note that SuperAgent expects the global `Promise` object to be present. You'll need to use v7 and a polyfill to use promises in Internet Explorer or Node.js 0.10. We have dropped support in v8 for IE. You must add a polyfill for WeakRef and BigInt if you wish to support Opera 85, iOS Safari 12.2-12.5, for example using : ```html ``` ## Browser and node versions SuperAgent has two implementations: one for web browsers (using XHR) and one for Node.JS (using core http module). By default Browserify and WebPack will pick the browser version. If want to use WebPack to compile code for Node.JS, you *must* specify [node target](https://webpack.github.io/docs/configuration.html#target) in its configuration. superagent-8.0.5/docs/style.css000066400000000000000000000026611434246777100165270ustar00rootroot00000000000000body { padding: 40px 80px; font: 14px/1.5 "Helvetica Neue", Helvetica, sans-serif; background: #181818 url(images/bg.png); text-align: center; } #content { margin: 0 auto; padding: 10px 40px; text-align: left; background: white; width: 50%; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; -webkit-box-shadow: 0 2px 5px 0 black; } #menu { font-size: 13px; margin: 0; padding: 0; text-align: left; position: fixed; top: 15px; left: 15px; } #menu ul { margin: 0; padding: 0; } #menu li { list-style: none; } #menu a { color: rgba(255,255,255,.5); text-decoration: none; } #menu a:hover { color: white; } #menu .active a { color: white; } pre { padding: 10px; } code { font-family: monaco, monospace, sans-serif; font-size: 0.85em; } p code { border: 1px solid #ECEA75; padding: 1px 3px; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; background: #FDFCD1; } pre { padding: 20px 25px; border: 1px solid #ddd; -webkit-box-shadow: inset 0 0 5px #eee; -moz-box-shadow: inset 0 0 5px #eee; box-shadow: inset 0 0 5px #eee; overflow: scroll; } code .comment { color: #ddd } code .init { color: #2F6FAD } code .string { color: #5890AD } code .keyword { color: #8A6343 } code .number { color: #2F6FAD } /* override tocbot style to avoid vertical white line in table of content */ .toc-link::before { content: initial; } superagent-8.0.5/docs/tail.html000066400000000000000000000030571434246777100164740ustar00rootroot00000000000000
Fork me on GitHub superagent-8.0.5/docs/test.html000066400000000000000000011173211434246777100165230ustar00rootroot00000000000000 SuperAgent — elegant API for AJAX in Node and browsers
test on node with http1 test on plain node

Agent

should remember defaults
if (typeof Promise === 'undefined') {
  return;
}
let called = 0;
let event_called = 0;
const agent = request
  .agent()
  .accept('json')
  .use(() => {
    called++;
  })
  .once('request', () => {
    event_called++;
  })
  .query({ hello: 'world' })
  .set('X-test', 'testing');
assert.equal(0, called);
assert.equal(0, event_called);
return agent
  .get(`${base}/echo`)
  .then((res) => {
    assert.equal(1, called);
    assert.equal(1, event_called);
    assert.equal('application/json', res.headers.accept);
    assert.equal('testing', res.headers['x-test']);
    return agent.get(`${base}/querystring`);
  })
  .then((res) => {
    assert.equal(2, called);
    assert.equal(2, event_called);
    assert.deepEqual({ hello: 'world' }, res.body);
  });

request

res.statusCode

should set statusCode
request.get(`${uri}/login`, (error, res) => {
  try {
    assert.strictEqual(res.statusCode, 200);
    done();
  } catch (err) {
    done(err);
  }
});

should allow the send shorthand

with callback in the method call
request.get(`${uri}/login`, (error, res) => {
  assert.equal(res.status, 200);
  done();
});
with data in the method call
request.post(`${uri}/echo`, { foo: 'bar' }).end((error, res) => {
  assert.equal('{"foo":"bar"}', res.text);
  done();
});
with callback and data in the method call
request.post(`${uri}/echo`, { foo: 'bar' }, (error, res) => {
  assert.equal('{"foo":"bar"}', res.text);
  done();
});

with a callback

should invoke .end()
request.get(`${uri}/login`, (error, res) => {
  try {
    assert.equal(res.status, 200);
    done();
  } catch (err) {
    done(err);
  }
});

.end()

should issue a request
request.get(`${uri}/login`).end((error, res) => {
  try {
    assert.equal(res.status, 200);
    done();
  } catch (err) {
    done(err);
  }
});
is optional with a promise
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/login`)
  .then((res) => res.status)
  .then()
  .then((status) => {
    assert.equal(200, status, 'Real promises pass results through');
  });
called only once with a promise
if (typeof Promise === 'undefined') {
  return;
}
const request_ = request.get(`${uri}/unique`);
return Promise.all([request_, request_, request_]).then((results) => {
  for (const item of results) {
    assert.deepEqual(
      item.body,
      results[0].body,
      'It should keep returning the same result after being called once'
    );
  }
});

res.error

ok
let calledErrorEvent = false;
let calledOKHandler = false;
request
  .get(`${uri}/error`)
  .ok((res) => {
    assert.strictEqual(500, res.status);
    calledOKHandler = true;
    return true;
  })
  .on('error', (error) => {
    calledErrorEvent = true;
  })
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert.strictEqual(res.status, 500);
      assert(!calledErrorEvent);
      assert(calledOKHandler);
      done();
    } catch (err) {
      done(err);
    }
  });
should be an Error object
let calledErrorEvent = false;
request
  .get(`${uri}/error`)
  .on('error', (error) => {
    assert.strictEqual(error.status, 500);
    calledErrorEvent = true;
  })
  .end((error, res) => {
    try {
      if (NODE) {
        res.error.message.should.equal('cannot GET /error (500)');
      } else {
        res.error.message.should.equal(`cannot GET ${uri}/error (500)`);
      }
      assert.strictEqual(res.error.status, 500);
      assert(error, 'should have an error for 500');
      assert.equal(error.message, 'Internal Server Error');
      assert(calledErrorEvent);
      done();
    } catch (err) {
      done(err);
    }
  });
with .then() promise
if (typeof Promise === 'undefined') {
  return;
}
return request.get(`${uri}/error`).then(
  () => {
    assert.fail();
  },
  (err) => {
    assert.equal(err.message, 'Internal Server Error');
  }
);
with .ok() returning false
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/echo`)
  .ok(() => false)
  .then(
    () => {
      assert.fail();
    },
    (err) => {
      assert.equal(200, err.response.status);
      assert.equal(err.message, 'OK');
    }
  );
with .ok() throwing an Error
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/echo`)
  .ok(() => {
    throw new Error('boom');
  })
  .then(
    () => {
      assert.fail();
    },
    (err) => {
      assert.equal(200, err.status);
      assert.equal(200, err.response.status);
      assert.equal(err.message, 'boom');
    }
  );
with .ok() throwing an Error with status
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/echo`)
  .ok(() => {
    const err = new Error('boom');
    err.status = 404;
    throw err;
  })
  .then(
    () => {
      assert.fail();
    },
    (err) => {
      assert.equal(404, err.status);
      assert.equal(200, err.response.status);
      assert.equal(err.message, 'boom');
    }
  );

res.header

should be an object
request.get(`${uri}/login`).end((error, res) => {
  try {
    assert.equal('Express', res.header['x-powered-by']);
    done();
  } catch (err) {
    done(err);
  }
});

set headers

should only set headers for ownProperties of header
try {
  request
    .get(`${uri}/echo-headers`)
    .set('valid', 'ok')
    .end((error, res) => {
      if (
        !error &&
        res.body &&
        res.body.valid &&
        !res.body.hasOwnProperty('invalid')
      ) {
        return done();
      }
      done(error || new Error('fail'));
    });
} catch (err) {
  done(err);
}

res.charset

should be set when present
request.get(`${uri}/login`).end((error, res) => {
  try {
    res.charset.should.equal('utf-8');
    done();
  } catch (err) {
    done(err);
  }
});

res.statusType

should provide the first digit
request.get(`${uri}/login`).end((error, res) => {
  try {
    assert(!error, 'should not have an error for success responses');
    assert.equal(200, res.status);
    assert.equal(2, res.statusType);
    done();
  } catch (err) {
    done(err);
  }
});

res.type

should provide the mime-type void of params
request.get(`${uri}/login`).end((error, res) => {
  try {
    res.type.should.equal('text/html');
    res.charset.should.equal('utf-8');
    done();
  } catch (err) {
    done(err);
  }
});

req.set(field, val)

should set the header field
request
  .post(`${uri}/echo`)
  .set('X-Foo', 'bar')
  .set('X-Bar', 'baz')
  .end((error, res) => {
    try {
      assert.equal('bar', res.header['x-foo']);
      assert.equal('baz', res.header['x-bar']);
      done();
    } catch (err) {
      done(err);
    }
  });

req.set(obj)

should set the header fields
request
  .post(`${uri}/echo`)
  .set({ 'X-Foo': 'bar', 'X-Bar': 'baz' })
  .end((error, res) => {
    try {
      assert.equal('bar', res.header['x-foo']);
      assert.equal('baz', res.header['x-bar']);
      done();
    } catch (err) {
      done(err);
    }
  });

req.type(str)

should set the Content-Type
request
  .post(`${uri}/echo`)
  .type('text/x-foo')
  .end((error, res) => {
    try {
      res.header['content-type'].should.equal('text/x-foo');
      done();
    } catch (err) {
      done(err);
    }
  });
should map "json"
request
  .post(`${uri}/echo`)
  .type('json')
  .send('{"a": 1}')
  .end((error, res) => {
    try {
      res.should.be.json();
      done();
    } catch (err) {
      done(err);
    }
  });
should map "html"
request
  .post(`${uri}/echo`)
  .type('html')
  .end((error, res) => {
    try {
      res.header['content-type'].should.equal('text/html');
      done();
    } catch (err) {
      done(err);
    }
  });

req.accept(str)

should set Accept
request
  .get(`${uri}/echo`)
  .accept('text/x-foo')
  .end((error, res) => {
    try {
      res.header.accept.should.equal('text/x-foo');
      done();
    } catch (err) {
      done(err);
    }
  });
should map "json"
request
  .get(`${uri}/echo`)
  .accept('json')
  .end((error, res) => {
    try {
      res.header.accept.should.equal('application/json');
      done();
    } catch (err) {
      done(err);
    }
  });
should map "xml"
request
  .get(`${uri}/echo`)
  .accept('xml')
  .end((error, res) => {
    try {
      // Mime module keeps changing this :(
      assert(
        res.header.accept == 'application/xml' ||
          res.header.accept == 'text/xml'
      );
      done();
    } catch (err) {
      done(err);
    }
  });
should map "html"
request
  .get(`${uri}/echo`)
  .accept('html')
  .end((error, res) => {
    try {
      res.header.accept.should.equal('text/html');
      done();
    } catch (err) {
      done(err);
    }
  });

req.send(str)

should write the string
request
  .post(`${uri}/echo`)
  .type('json')
  .send('{"name":"tobi"}')
  .end((error, res) => {
    try {
      res.text.should.equal('{"name":"tobi"}');
      done();
    } catch (err) {
      done(err);
    }
  });

req.send(Object)

should default to json
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .end((error, res) => {
    try {
      res.should.be.json();
      res.text.should.equal('{"name":"tobi"}');
      done();
    } catch (err) {
      done(err);
    }
  });

when called several times

should merge the objects
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .send({ age: 1 })
  .end((error, res) => {
    try {
      res.should.be.json();
      if (NODE) {
        res.buffered.should.be.true();
      }
      res.text.should.equal('{"name":"tobi","age":1}');
      done();
    } catch (err) {
      done(err);
    }
  });

.end(fn)

should check arity
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .end((error, res) => {
    try {
      assert.ifError(error);
      res.text.should.equal('{"name":"tobi"}');
      done();
    } catch (err) {
      done(err);
    }
  });
should emit request
const request_ = request.post(`${uri}/echo`);
request_.on('request', (request) => {
  assert.equal(request_, request);
  done();
});
request_.end();
should emit response
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .on('response', (res) => {
    res.text.should.equal('{"name":"tobi"}');
    done();
  })
  .end();

.then(fulfill, reject)

should support successful fulfills with .then(fulfill)
if (typeof Promise === 'undefined') {
  return done();
}
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .then((res) => {
    res.type.should.equal('application/json');
    res.text.should.equal('{"name":"tobi"}');
    done();
  });
should reject an error with .then(null, reject)
if (typeof Promise === 'undefined') {
  return done();
}
request.get(`${uri}/error`).then(null, (err) => {
  assert.equal(err.status, 500);
  assert.equal(err.response.text, 'boom');
  done();
});

.catch(reject)

should reject an error with .catch(reject)
if (typeof Promise === 'undefined') {
  return done();
}
request.get(`${uri}/error`).catch((err) => {
  assert.equal(err.status, 500);
  assert.equal(err.response.text, 'boom');
  done();
});

.abort()

should abort the request
const request_ = request.get(`${uri}/delay/3000`);
request_.end((error, res) => {
  try {
    assert(false, 'should not complete the request');
  } catch (err) {
    done(err);
  }
});
request_.on('error', (error) => {
  done(error);
});
request_.on('abort', done);
setTimeout(() => {
  request_.abort();
}, 500);
should abort the promise
const request_ = request.get(`${uri}/delay/3000`);
setTimeout(() => {
  request_.abort();
}, 10);
return request_.then(
  () => {
    assert.fail('should not complete the request');
  },
  (err) => {
    assert.equal('ABORTED', err.code);
  }
);
should allow chaining .abort() several times
const request_ = request.get(`${uri}/delay/3000`);
request_.end((error, res) => {
  try {
    assert(false, 'should not complete the request');
  } catch (err) {
    done(err);
  }
});
// This also verifies only a single 'done' event is emitted
request_.on('abort', done);
setTimeout(() => {
  request_.abort().abort().abort();
}, 1000);
should not allow abort then end
request
  .get(`${uri}/delay/3000`)
  .abort()
  .end((error, res) => {
    done(error ? undefined : new Error('Expected abort error'));
  });

req.toJSON()

should describe the request
const request_ = request.post(`${uri}/echo`).send({ foo: 'baz' });
request_.end((error, res) => {
  try {
    const json = request_.toJSON();
    assert.equal('POST', json.method);
    assert(/\/echo$/.test(json.url));
    assert.equal('baz', json.data.foo);
    done();
  } catch (err) {
    done(err);
  }
});

req.options()

should allow request body
request
  .options(`${uri}/options/echo/body`)
  .send({ foo: 'baz' })
  .end((error, res) => {
    try {
      assert.equal(error, null);
      assert.strictEqual(res.body.foo, 'baz');
      done();
    } catch (err) {
      done(err);
    }
  });

req.sortQuery()

nop with no querystring
request
  .get(`${uri}/url`)
  .sortQuery()
  .end((error, res) => {
    try {
      assert.equal(res.text, '/url');
      done();
    } catch (err) {
      done(err);
    }
  });
should sort the request querystring
request
  .get(`${uri}/url`)
  .query('search=Manny')
  .query('order=desc')
  .sortQuery()
  .end((error, res) => {
    try {
      assert.equal(res.text, '/url?order=desc&search=Manny');
      done();
    } catch (err) {
      done(err);
    }
  });
should allow disabling sorting
request
  .get(`${uri}/url`)
  .query('search=Manny')
  .query('order=desc')
  .sortQuery() // take default of true
  .sortQuery(false) // override it in later call
  .end((error, res) => {
    try {
      assert.equal(res.text, '/url?search=Manny&order=desc');
      done();
    } catch (err) {
      done(err);
    }
  });
should sort the request querystring using customized function
request
  .get(`${uri}/url`)
  .query('name=Nick')
  .query('search=Manny')
  .query('order=desc')
  .sortQuery((a, b) => a.length - b.length)
  .end((error, res) => {
    try {
      assert.equal(res.text, '/url?name=Nick&order=desc&search=Manny');
      done();
    } catch (err) {
      done(err);
    }
  });

req.set("Content-Type", contentType)

should work with just the contentType component
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/json')
  .send({ name: 'tobi' })
  .end((error) => {
    assert(!error);
    done();
  });
should work with the charset component
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/json; charset=utf-8')
  .send({ name: 'tobi' })
  .end((error) => {
    assert(!error);
    done();
  });

req.send(Object) as "form"

with req.type() set to form

should send x-www-form-urlencoded data
request
  .post(`${base}/echo`)
  .type('form')
  .send({ name: 'tobi' })
  .end((error, res) => {
    res.header['content-type'].should.equal(
      'application/x-www-form-urlencoded'
    );
    res.text.should.equal('name=tobi');
    done();
  });

when called several times

should merge the objects
request
  .post(`${base}/echo`)
  .type('form')
  .send({ name: { first: 'tobi', last: 'holowaychuk' } })
  .send({ age: '1' })
  .end((error, res) => {
    res.header['content-type'].should.equal(
      'application/x-www-form-urlencoded'
    );
    res.text.should.equal(
      'name%5Bfirst%5D=tobi&name%5Blast%5D=holowaychuk&age=1'
    );
    done();
  });

req.attach

ignores null file
request
  .post('/echo')
  .attach('image', null)
  .end((error, res) => {
    done();
  });

req.field

allow bools
if (!formDataSupported) {
  return done();
}
request
  .post(`${base}/formecho`)
  .field('bools', true)
  .field('strings', 'true')
  .end((error, res) => {
    assert.ifError(error);
    assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' });
    done();
  });
allow objects
if (!formDataSupported) {
  return done();
}
request
  .post(`${base}/formecho`)
  .field({ bools: true, strings: 'true' })
  .end((error, res) => {
    assert.ifError(error);
    assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' });
    done();
  });
works with arrays in objects
if (!formDataSupported) {
  return done();
}
request
  .post(`${base}/formecho`)
  .field({ numbers: [1, 2, 3] })
  .end((error, res) => {
    assert.ifError(error);
    assert.deepStrictEqual(res.body, { numbers: ['1', '2', '3'] });
    done();
  });
works with arrays
if (!formDataSupported) {
  return done();
}
request
  .post(`${base}/formecho`)
  .field('letters', ['a', 'b', 'c'])
  .end((error, res) => {
    assert.ifError(error);
    assert.deepStrictEqual(res.body, { letters: ['a', 'b', 'c'] });
    done();
  });
throw when empty
should.throws(() => {
  request.post(`${base}/echo`).field();
}, /name/);
should.throws(() => {
  request.post(`${base}/echo`).field('name');
}, /val/);
cannot be mixed with send()
assert.throws(() => {
  request.post('/echo').field('form', 'data').send('hi');
});
assert.throws(() => {
  request.post('/echo').send('hi').field('form', 'data');
});

req.send(Object) as "json"

should default to json
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .end((error, res) => {
    res.should.be.json();
    res.text.should.equal('{"name":"tobi"}');
    done();
  });
should work with arrays
request
  .post(`${uri}/echo`)
  .send([1, 2, 3])
  .end((error, res) => {
    res.should.be.json();
    res.text.should.equal('[1,2,3]');
    done();
  });
should work with value null
request
  .post(`${uri}/echo`)
  .type('json')
  .send('null')
  .end((error, res) => {
    res.should.be.json();
    assert.strictEqual(res.body, null);
    done();
  });
should work with value false
request
  .post(`${uri}/echo`)
  .type('json')
  .send('false')
  .end((error, res) => {
    res.should.be.json();
    res.body.should.equal(false);
    done();
  });
should work with empty string value
request
  .post(`${uri}/echo`)
  .type('json')
  .send('""')
  .end((error, res) => {
    res.should.be.json();
    res.body.should.equal('');
    done();
  });
should work with vendor MIME type
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/vnd.example+json')
  .send({ name: 'vendor' })
  .end((error, res) => {
    res.text.should.equal('{"name":"vendor"}');
    ({ name: 'vendor' }.should.eql(res.body));
    done();
  });

when called several times

should merge the objects
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .send({ age: 1 })
  .end((error, res) => {
    res.should.be.json();
    res.text.should.equal('{"name":"tobi","age":1}');
    ({ name: 'tobi', age: 1 }.should.eql(res.body));
    done();
  });

res.body

application/json

should parse the body
request.get(`${uri}/json`).end((error, res) => {
  res.text.should.equal('{"name":"manny"}');
  res.body.should.eql({ name: 'manny' });
  done();
});

Invalid JSON response

should return the raw response
request.get(`${uri}/invalid-json`).end((error, res) => {
  assert.deepEqual(
    error.rawResponse,
    ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}"
  );
  done();
});
should return the http status code
request.get(`${uri}/invalid-json-forbidden`).end((error, res) => {
  assert.equal(error.statusCode, 403);
  done();
});

request

on redirect

should retain header fields
request
  .get(`${base}/header`)
  .set('X-Foo', 'bar')
  .end((error, res) => {
    try {
      assert(res.body);
      res.body.should.have.property('x-foo', 'bar');
      done();
    } catch (err) {
      done(err);
    }
  });
should preserve timeout across redirects
request
  .get(`${base}/movies/random`)
  .timeout(250)
  .end((error, res) => {
    try {
      assert(error instanceof Error, 'expected an error');
      error.should.have.property('timeout', 250);
      done();
    } catch (err) {
      done(err);
    }
  });
should successfully redirect after retry on error
const id = Math.random() * 1_000_000 * Date.now();
request
  .get(`${base}/error/redirect/${id}`)
  .retry(2)
  .end((error, res) => {
    assert(res.ok, 'response should be ok');
    assert(res.text, 'first movie page');
    done();
  });
should preserve retries across redirects
const id = Math.random() * 1_000_000 * Date.now();
request
  .get(`${base}/error/redirect-error${id}`)
  .retry(2)
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(2, error.retries, 'expected an error with .retries');
    assert.equal(500, error.status, 'expected an error status of 500');
    done();
  });

on 303

should redirect with same method
request
  .put(`${base}/redirect-303`)
  .send({ msg: 'hello' })
  .redirects(1)
  .on('redirect', (res) => {
    res.headers.location.should.equal('/reply-method');
  })
  .end((error, res) => {
    if (error) {
      done(error);
      return;
    }
    res.text.should.equal('method=get');
    done();
  });

on 307

should redirect with same method
if (isMSIE) return done(); // IE9 broken
request
  .put(`${base}/redirect-307`)
  .send({ msg: 'hello' })
  .redirects(1)
  .on('redirect', (res) => {
    res.headers.location.should.equal('/reply-method');
  })
  .end((error, res) => {
    if (error) {
      done(error);
      return;
    }
    res.text.should.equal('method=put');
    done();
  });

on 308

should redirect with same method
if (isMSIE) return done(); // IE9 broken
request
  .put(`${base}/redirect-308`)
  .send({ msg: 'hello' })
  .redirects(1)
  .on('redirect', (res) => {
    res.headers.location.should.equal('/reply-method');
  })
  .end((error, res) => {
    if (error) {
      done(error);
      return;
    }
    res.text.should.equal('method=put');
    done();
  });

request

Request inheritance
assert(request.get(`${uri}/`) instanceof request.Request);
request() simple GET without callback
request('GET', 'test/test.request.js').end();
next();
request() simple GET
request('GET', `${uri}/ok`).end((error, res) => {
  try {
    assert(res instanceof request.Response, 'respond with Response');
    assert(res.ok, 'response should be ok');
    assert(res.text, 'res.text');
    next();
  } catch (err) {
    next(err);
  }
});
request() simple HEAD
request.head(`${uri}/ok`).end((error, res) => {
  try {
    assert(res instanceof request.Response, 'respond with Response');
    assert(res.ok, 'response should be ok');
    assert(!res.text, 'res.text');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 5xx
request('GET', `${uri}/error`).end((error, res) => {
  try {
    assert(error);
    assert.equal(error.message, 'Internal Server Error');
    assert(!res.ok, 'response should not be ok');
    assert(res.error, 'response should be an error');
    assert(!res.clientError, 'response should not be a client error');
    assert(res.serverError, 'response should be a server error');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 4xx
request('GET', `${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert.equal(error.message, 'Not Found');
    assert(!res.ok, 'response should not be ok');
    assert(res.error, 'response should be an error');
    assert(res.clientError, 'response should be a client error');
    assert(!res.serverError, 'response should not be a server error');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 404 Not Found
request('GET', `${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert(res.notFound, 'response should be .notFound');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 400 Bad Request
request('GET', `${uri}/bad-request`).end((error, res) => {
  try {
    assert(error);
    assert(res.badRequest, 'response should be .badRequest');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 401 Bad Request
request('GET', `${uri}/unauthorized`).end((error, res) => {
  try {
    assert(error);
    assert(res.unauthorized, 'response should be .unauthorized');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 406 Not Acceptable
request('GET', `${uri}/not-acceptable`).end((error, res) => {
  try {
    assert(error);
    assert(res.notAcceptable, 'response should be .notAcceptable');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 204 No Content
request('GET', `${uri}/no-content`).end((error, res) => {
  try {
    assert.ifError(error);
    assert(res.noContent, 'response should be .noContent');
    next();
  } catch (err) {
    next(err);
  }
});
request() DELETE 204 No Content
request('DELETE', `${uri}/no-content`).end((error, res) => {
  try {
    assert.ifError(error);
    assert(res.noContent, 'response should be .noContent');
    next();
  } catch (err) {
    next(err);
  }
});
request() header parsing
request('GET', `${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert.equal('text/html; charset=utf-8', res.header['content-type']);
    assert.equal('Express', res.header['x-powered-by']);
    next();
  } catch (err) {
    next(err);
  }
});
request() .status
request('GET', `${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert.equal(404, res.status, 'response .status');
    assert.equal(4, res.statusType, 'response .statusType');
    next();
  } catch (err) {
    next(err);
  }
});
get()
request.get(`${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert.equal(404, res.status, 'response .status');
    assert.equal(4, res.statusType, 'response .statusType');
    next();
  } catch (err) {
    next(err);
  }
});
put()
request.put(`${uri}/user/12`).end((error, res) => {
  try {
    assert.equal('updated', res.text, 'response text');
    next();
  } catch (err) {
    next(err);
  }
});
put().send()
request
  .put(`${uri}/user/13/body`)
  .send({ user: 'new' })
  .end((error, res) => {
    try {
      assert.equal('received new', res.text, 'response text');
      next();
    } catch (err) {
      next(err);
    }
  });
post()
request.post(`${uri}/user`).end((error, res) => {
  try {
    assert.equal('created', res.text, 'response text');
    next();
  } catch (err) {
    next(err);
  }
});
del()
request.del(`${uri}/user/12`).end((error, res) => {
  try {
    assert.equal('deleted', res.text, 'response text');
    next();
  } catch (err) {
    next(err);
  }
});
delete()
request.delete(`${uri}/user/12`).end((error, res) => {
  try {
    assert.equal('deleted', res.text, 'response text');
    next();
  } catch (err) {
    next(err);
  }
});
post() data
request
  .post(`${uri}/todo/item`)
  .type('application/octet-stream')
  .send('tobi')
  .end((error, res) => {
    try {
      assert.equal('added "tobi"', res.text, 'response text');
      next();
    } catch (err) {
      next(err);
    }
  });
request .type()
request
  .post(`${uri}/user/12/pet`)
  .type('urlencoded')
  .send('pet=tobi')
  .end((error, res) => {
    try {
      assert.equal('added pet "tobi"', res.text, 'response text');
      next();
    } catch (err) {
      next(err);
    }
  });
request .type() with alias
request
  .post(`${uri}/user/12/pet`)
  .type('application/x-www-form-urlencoded')
  .send('pet=tobi')
  .end((error, res) => {
    try {
      assert.equal('added pet "tobi"', res.text, 'response text');
      next();
    } catch (err) {
      next(err);
    }
  });
request .get() with no data or callback
request.get(`${uri}/echo-header/content-type`);
next();
request .send() with no data only
request.post(`${uri}/user/5/pet`).type('urlencoded').send('pet=tobi');
next();
request .send() with callback only
request
  .get(`${uri}/echo-header/accept`)
  .set('Accept', 'foo/bar')
  .end((error, res) => {
    try {
      assert.equal('foo/bar', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .accept() with json
request
  .get(`${uri}/echo-header/accept`)
  .accept('json')
  .end((error, res) => {
    try {
      assert.equal('application/json', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .accept() with application/json
request
  .get(`${uri}/echo-header/accept`)
  .accept('application/json')
  .end((error, res) => {
    try {
      assert.equal('application/json', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .accept() with xml
request
  .get(`${uri}/echo-header/accept`)
  .accept('xml')
  .end((error, res) => {
    try {
      // We can't depend on mime module to be consistent with this
      assert(res.text == 'application/xml' || res.text == 'text/xml');
      next();
    } catch (err) {
      next(err);
    }
  });
request .accept() with application/xml
request
  .get(`${uri}/echo-header/accept`)
  .accept('application/xml')
  .end((error, res) => {
    try {
      assert.equal('application/xml', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .end()
request
  .put(`${uri}/echo-header/content-type`)
  .set('Content-Type', 'text/plain')
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('text/plain', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .send()
request
  .put(`${uri}/echo-header/content-type`)
  .set('Content-Type', 'text/plain')
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('text/plain', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .set()
request
  .put(`${uri}/echo-header/content-type`)
  .set('Content-Type', 'text/plain')
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('text/plain', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .set(object)
request
  .put(`${uri}/echo-header/content-type`)
  .set({ 'Content-Type': 'text/plain' })
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('text/plain', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST urlencoded
request
  .post(`${uri}/pet`)
  .type('urlencoded')
  .send({ name: 'Manny', species: 'cat' })
  .end((error, res) => {
    try {
      assert.equal('added Manny the cat', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json
request
  .post(`${uri}/pet`)
  .type('json')
  .send({ name: 'Manny', species: 'cat' })
  .end((error, res) => {
    try {
      assert.equal('added Manny the cat', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json array
request
  .post(`${uri}/echo`)
  .send([1, 2, 3])
  .end((error, res) => {
    try {
      assert.equal(
        'application/json',
        res.header['content-type'].split(';')[0]
      );
      assert.equal('[1,2,3]', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json default
request
  .post(`${uri}/pet`)
  .send({ name: 'Manny', species: 'cat' })
  .end((error, res) => {
    try {
      assert.equal('added Manny the cat', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json contentType charset
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/json; charset=UTF-8')
  .send({ data: ['data1', 'data2'] })
  .end((error, res) => {
    try {
      assert.equal('{"data":["data1","data2"]}', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json contentType vendor
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/vnd.example+json')
  .send({ data: ['data1', 'data2'] })
  .end((error, res) => {
    try {
      assert.equal('{"data":["data1","data2"]}', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST multiple .send() calls
request
  .post(`${uri}/pet`)
  .send({ name: 'Manny' })
  .send({ species: 'cat' })
  .end((error, res) => {
    try {
      assert.equal('added Manny the cat', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST multiple .send() strings
request
  .post(`${uri}/echo`)
  .send('user[name]=tj')
  .send('user[email]=tj@vision-media.ca')
  .end((error, res) => {
    try {
      assert.equal(
        'application/x-www-form-urlencoded',
        res.header['content-type'].split(';')[0]
      );
      assert.equal(
        res.text,
        'user[name]=tj&user[email]=tj@vision-media.ca'
      );
      next();
    } catch (err) {
      next(err);
    }
  });
POST with no data
request
  .post(`${uri}/empty-body`)
  .send()
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(res.noContent, 'response should be .noContent');
      next();
    } catch (err) {
      next(err);
    }
  });
GET .type
request.get(`${uri}/pets`).end((error, res) => {
  try {
    assert.equal('application/json', res.type);
    next();
  } catch (err) {
    next(err);
  }
});
GET Content-Type params
request.get(`${uri}/text`).end((error, res) => {
  try {
    assert.equal('utf-8', res.charset);
    next();
  } catch (err) {
    next(err);
  }
});
GET json
request.get(`${uri}/pets`).end((error, res) => {
  try {
    assert.deepEqual(res.body, ['tobi', 'loki', 'jane']);
    next();
  } catch (err) {
    next(err);
  }
});
GET json-seq
request
  .get(`${uri}/json-seq`)
  .buffer()
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert.deepEqual(res.text, '\u001E{"id":1}\n\u001E{"id":2}\n');
      next();
    } catch (err) {
      next(err);
    }
  });
GET binary data
request
  .get(`${uri}/binary-data`)
  .buffer()
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert.deepEqual(res.body, binData);
      next();
    } catch (err) {
      next(err);
    }
  });
GET x-www-form-urlencoded
request.get(`${uri}/foo`).end((error, res) => {
  try {
    assert.deepEqual(res.body, { foo: 'bar' });
    next();
  } catch (err) {
    next(err);
  }
});
GET shorthand
request.get(`${uri}/foo`, (error, res) => {
  try {
    assert.equal('foo=bar', res.text);
    next();
  } catch (err) {
    next(err);
  }
});
POST shorthand
request.post(`${uri}/user/0/pet`, { pet: 'tobi' }, (error, res) => {
  try {
    assert.equal('added pet "tobi"', res.text);
    next();
  } catch (err) {
    next(err);
  }
});
POST shorthand without callback
request.post(`${uri}/user/0/pet`, { pet: 'tobi' }).end((error, res) => {
  try {
    assert.equal('added pet "tobi"', res.text);
    next();
  } catch (err) {
    next(err);
  }
});
GET querystring object with array
request
  .get(`${uri}/querystring`)
  .query({ val: ['a', 'b', 'c'] })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, { val: ['a', 'b', 'c'] });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring object with array and primitives
request
  .get(`${uri}/querystring`)
  .query({ array: ['a', 'b', 'c'], string: 'foo', number: 10 })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        array: ['a', 'b', 'c'],
        string: 'foo',
        number: 10
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring object with two arrays
request
  .get(`${uri}/querystring`)
  .query({ array1: ['a', 'b', 'c'], array2: [1, 2, 3] })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        array1: ['a', 'b', 'c'],
        array2: [1, 2, 3]
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring object
request
  .get(`${uri}/querystring`)
  .query({ search: 'Manny' })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, { search: 'Manny' });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring append original
request
  .get(`${uri}/querystring?search=Manny`)
  .query({ range: '1..5' })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, { search: 'Manny', range: '1..5' });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring multiple objects
request
  .get(`${uri}/querystring`)
  .query({ search: 'Manny' })
  .query({ range: '1..5' })
  .query({ order: 'desc' })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        search: 'Manny',
        range: '1..5',
        order: 'desc'
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring with strings
request
  .get(`${uri}/querystring`)
  .query('search=Manny')
  .query('range=1..5')
  .query('order=desc')
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        search: 'Manny',
        range: '1..5',
        order: 'desc'
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring with strings and objects
request
  .get(`${uri}/querystring`)
  .query('search=Manny')
  .query({ order: 'desc', range: '1..5' })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        search: 'Manny',
        range: '1..5',
        order: 'desc'
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET shorthand payload goes to querystring
request.get(
  `${uri}/querystring`,
  { foo: 'FOO', bar: 'BAR' },
  (error, res) => {
    try {
      assert.deepEqual(res.body, { foo: 'FOO', bar: 'BAR' });
      next();
    } catch (err) {
      next(err);
    }
  }
);
HEAD shorthand payload goes to querystring
request.head(
  `${uri}/querystring-in-header`,
  { foo: 'FOO', bar: 'BAR' },
  (error, res) => {
    try {
      assert.deepEqual(JSON.parse(res.headers.query), {
        foo: 'FOO',
        bar: 'BAR'
      });
      next();
    } catch (err) {
      next(err);
    }
  }
);
request(method, url)
request('GET', `${uri}/foo`).end((error, res) => {
  try {
    assert.equal('bar', res.body.foo);
    next();
  } catch (err) {
    next(err);
  }
});
request(url)
request(`${uri}/foo`).end((error, res) => {
  try {
    assert.equal('bar', res.body.foo);
    next();
  } catch (err) {
    next(err);
  }
});
request(url, fn)
request(`${uri}/foo`, (error, res) => {
  try {
    assert.equal('bar', res.body.foo);
    next();
  } catch (err) {
    next(err);
  }
});
req.timeout(ms)
const request_ = request.get(`${uri}/delay/3000`).timeout(1000);
request_.end((error, res) => {
  try {
    assert(error, 'error missing');
    assert.equal(1000, error.timeout, 'err.timeout missing');
    assert.equal(
      'Timeout of 1000ms exceeded',
      error.message,
      'err.message incorrect'
    );
    assert.equal(null, res);
    assert(request_.timedout, true);
    next();
  } catch (err) {
    next(err);
  }
});
req.timeout(ms) with redirect
const request_ = request.get(`${uri}/delay/const`).timeout(1000);
request_.end((error, res) => {
  try {
    assert(error, 'error missing');
    assert.equal(1000, error.timeout, 'err.timeout missing');
    assert.equal(
      'Timeout of 1000ms exceeded',
      error.message,
      'err.message incorrect'
    );
    assert.equal(null, res);
    assert(request_.timedout, true);
    next();
  } catch (err) {
    next(err);
  }
});
request event
request
  .get(`${uri}/foo`)
  .on('request', (request_) => {
    try {
      assert.equal(`${uri}/foo`, request_.url);
      next();
    } catch (err) {
      next(err);
    }
  })
  .end();
response event
request
  .get(`${uri}/foo`)
  .on('response', (res) => {
    try {
      assert.equal('bar', res.body.foo);
      next();
    } catch (err) {
      next(err);
    }
  })
  .end();
response should set statusCode
request.get(`${uri}/ok`, (error, res) => {
  try {
    assert.strictEqual(res.statusCode, 200);
    next();
  } catch (err) {
    next(err);
  }
});
req.toJSON()
request.get(`${uri}/ok`).end((error, res) => {
  try {
    const index = (res.request || res.req).toJSON();
    for (const property of ['url', 'method', 'data', 'headers']) {
      assert(index.hasOwnProperty(property));
    }
    next();
  } catch (err) {
    next(err);
  }
});

.retry(count)

should not retry if passed "0"
request
  .get(`${base}/error`)
  .retry(0)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(
        undefined,
        error.retries,
        'expected an error without .retries'
      );
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should not retry if passed an invalid number
request
  .get(`${base}/error`)
  .retry(-2)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(
        undefined,
        error.retries,
        'expected an error without .retries'
      );
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should not retry if passed undefined
request
  .get(`${base}/error`)
  .retry(undefined)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(
        undefined,
        error.retries,
        'expected an error without .retries'
      );
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle server error after repeat attempt
request
  .get(`${base}/error`)
  .retry(2)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(2, error.retries, 'expected an error with .retries');
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should retry if passed nothing
request
  .get(`${base}/error`)
  .retry()
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(1, error.retries, 'expected an error with .retries');
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should retry if passed "true"
request
  .get(`${base}/error`)
  .retry(true)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(1, error.retries, 'expected an error with .retries');
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle successful request after repeat attempt from server error
request
  .get(`${base}/error/ok/${uniqid()}`)
  .query({ qs: 'present' })
  .retry(2)
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(res.ok, 'response should be ok');
      assert(res.text, 'res.text');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle server timeout error after repeat attempt
request
  .get(`${base}/delay/400`)
  .timeout(200)
  .retry(2)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(2, error.retries, 'expected an error with .retries');
      assert.equal(
        'number',
        typeof error.timeout,
        'expected an error with .timeout'
      );
      assert.equal('ECONNABORTED', error.code, 'expected abort error code');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle successful request after repeat attempt from server timeout
const url = `/delay/1200/ok/${uniqid()}?built=in`;
request
  .get(base + url)
  .query('string=ified')
  .query({ json: 'ed' })
  .timeout(600)
  .retry(2)
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(res.ok, 'response should be ok');
      assert.equal(res.text, `ok = ${url}&string=ified&json=ed`);
      done();
    } catch (err) {
      done(err);
    }
  });
should handle successful request after repeat attempt from server timeout when using .then(fulfill, reject)
const url = `/delay/1200/ok/${uniqid()}?built=in`;
request
  .get(base + url)
  .query('string=ified')
  .query({ json: 'ed' })
  .timeout(600)
  .retry(1)
  .then((res, error) => {
    try {
      assert.ifError(error);
      assert(res.ok, 'response should be ok');
      assert.equal(res.text, `ok = ${url}&string=ified&json=ed`);
      done();
    } catch (err) {
      done(err);
    }
  });
should correctly abort a retry attempt
let aborted = false;
const request_ = request.get(`${base}/delay/400`).timeout(200).retry(2);
request_.end((error, res) => {
  try {
    assert(false, 'should not complete the request');
  } catch (err) {
    done(err);
  }
});
request_.on('abort', () => {
  aborted = true;
});
setTimeout(() => {
  request_.abort();
  setTimeout(() => {
    try {
      assert(aborted, 'should be aborted');
      done();
    } catch (err) {
      done(err);
    }
  }, 150);
}, 150);
should correctly retain header fields
request
  .get(`${base}/error/ok/${uniqid()}`)
  .query({ qs: 'present' })
  .retry(2)
  .set('X-Foo', 'bar')
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(res.body);
      res.body.should.have.property('x-foo', 'bar');
      done();
    } catch (err) {
      done(err);
    }
  });
should not retry on 4xx responses
request
  .get(`${base}/bad-request`)
  .retry(2)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(0, error.retries, 'expected an error with 0 .retries');
      assert.equal(400, error.status, 'expected an error status of 400');
      done();
    } catch (err) {
      done(err);
    }
  });
should execute callback on retry if passed
let callbackCallCount = 0;
function retryCallback(request) {
  callbackCallCount++;
}
request
  .get(`${base}/error`)
  .retry(2, retryCallback)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(2, error.retries, 'expected an error with .retries');
      assert.equal(500, error.status, 'expected an error status of 500');
      assert.equal(
        2,
        callbackCallCount,
        'expected the callback to be called on each retry'
      );
      done();
    } catch (err) {
      done(err);
    }
  });

.timeout(ms)

when timeout is exceeded

should error
request
  .get(`${base}/delay/500`)
  .timeout(150)
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    done();
  });
should error in promise interface
request
  .get(`${base}/delay/500`)
  .timeout(150)
  .catch((err) => {
    assert(err, 'expected an error');
    assert.equal(
      'number',
      typeof err.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', err.code, 'expected abort error code');
    done();
  });
should handle gzip timeout
request
  .get(`${base}/delay/zip`)
  .timeout(150)
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    done();
  });
should handle buffer timeout
request
  .get(`${base}/delay/json`)
  .buffer(true)
  .timeout(150)
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    done();
  });
should error on deadline
request
  .get(`${base}/delay/500`)
  .timeout({ deadline: 150 })
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    done();
  });
should support setting individual options
request
  .get(`${base}/delay/500`)
  .timeout({ deadline: 10 })
  .timeout({ response: 99_999 })
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    assert.equal('ETIME', error.errno);
    done();
  });
should error on response
request
  .get(`${base}/delay/500`)
  .timeout({ response: 150 })
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    assert.equal('ETIMEDOUT', error.errno);
    done();
  });
should accept slow body with fast response
request
  .get(`${base}/delay/slowbody`)
  .timeout({ response: 1000 })
  .on('progress', () => {
    // This only makes the test faster without relying on arbitrary timeouts
    request.get(`${base}/delay/slowbody/finish`).end();
  })
  .end(done);

request

use

should use plugin success
const now = `${Date.now()}`;
function uuid(request_) {
  request_.set('X-UUID', now);
  return request_;
}
function prefix(request_) {
  request_.url = uri + request_.url;
  return request_;
}
request
  .get('/echo')
  .use(uuid)
  .use(prefix)
  .end((error, res) => {
    assert.strictEqual(res.statusCode, 200);
    assert.equal(res.get('X-UUID'), now);
    done();
  });

subclass

should be an instance of Request
const request_ = request.get('/');
assert(request_ instanceof request.Request);
should use patched subclass
assert(OriginalRequest);
let constructorCalled;
let sendCalled;
function NewRequest(...args) {
  constructorCalled = true;
  OriginalRequest.apply(this, args);
}
NewRequest.prototype = Object.create(OriginalRequest.prototype);
NewRequest.prototype.send = function () {
  sendCalled = true;
  return this;
};
request.Request = NewRequest;
const request_ = request.get('/').send();
assert(constructorCalled);
assert(sendCalled);
assert(request_ instanceof NewRequest);
assert(request_ instanceof OriginalRequest);
should use patched subclass in agent too
if (!request.agent) return; // Node-only
function NewRequest(...args) {
  OriginalRequest.apply(this, args);
}
NewRequest.prototype = Object.create(OriginalRequest.prototype);
request.Request = NewRequest;
const request_ = request.agent().del('/');
assert(request_ instanceof NewRequest);
assert(request_ instanceof OriginalRequest);

request

persistent agent

should gain a session on POST
agent3.post(`${base}/signin`).then((res) => {
        res.should.have.status(200);
        should.not.exist(res.headers['set-cookie']);
        res.text.should.containEql('dashboard');
      })
should start with empty session (set cookies)
agent1.get(`${base}/dashboard`).end((error, res) => {
  should.exist(error);
  res.should.have.status(401);
  should.exist(res.headers['set-cookie']);
  done();
});
should gain a session (cookies already set)
agent1.post(`${base}/signin`).then((res) => {
        res.should.have.status(200);
        should.not.exist(res.headers['set-cookie']);
        res.text.should.containEql('dashboard');
      })
should persist cookies across requests
agent1.get(`${base}/dashboard`).then((res) => {
        res.should.have.status(200);
      })
should have the cookie set in the end callback
agent4
        .post(`${base}/setcookie`)
        .then(() => agent4.get(`${base}/getcookie`))
        .then((res) => {
          res.should.have.status(200);
          assert.strictEqual(res.text, 'jar');
        })
should not share cookies
agent2.get(`${base}/dashboard`).end((error, res) => {
  should.exist(error);
  res.should.have.status(401);
  done();
});
should not lose cookies between agents
agent1.get(`${base}/dashboard`).then((res) => {
        res.should.have.status(200);
      })
should be able to follow redirects
agent1.get(base).then((res) => {
        res.should.have.status(200);
        res.text.should.containEql('dashboard');
      })
should be able to post redirects
agent1
        .post(`${base}/redirect`)
        .send({ foo: 'bar', baz: 'blaaah' })
        .then((res) => {
          res.should.have.status(200);
          res.text.should.containEql('simple');
          res.redirects.should.eql([`${base}/simple`]);
        })
should be able to limit redirects
agent1
  .get(base)
  .redirects(0)
  .end((error, res) => {
    should.exist(error);
    res.should.have.status(302);
    res.redirects.should.eql([]);
    res.header.location.should.equal('/dashboard');
    done();
  });
should be able to create a new session (clear cookie)
agent1.post(`${base}/signout`).then((res) => {
        res.should.have.status(200);
        should.exist(res.headers['set-cookie']);
      })
should regenerate with an empty session
agent1.get(`${base}/dashboard`).end((error, res) => {
  should.exist(error);
  res.should.have.status(401);
  should.not.exist(res.headers['set-cookie']);
  done();
});

Basic auth

when credentials are present in url

should set Authorization
const new_url = URL.parse(base);
new_url.auth = 'tobi:learnboost';
new_url.pathname = '/basic-auth';
request.get(URL.format(new_url)).end((error, res) => {
  res.status.should.equal(200);
  done();
});

req.auth(user, pass)

should set Authorization
request
  .get(`${base}/basic-auth`)
  .auth('tobi', 'learnboost')
  .end((error, res) => {
    res.status.should.equal(200);
    done();
  });

req.auth(user + ":" + pass)

should set authorization
request
  .get(`${base}/basic-auth/again`)
  .auth('tobi')
  .end((error, res) => {
    res.status.should.eql(200);
    done();
  });

[node] request

should send body with .get().send()
request
  .get(`${base}/echo`)
  .set('Content-Type', 'text/plain')
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('wahoo', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });

with an url

should preserve the encoding of the url
request.get(`${base}/url?a=(b%29`).end((error, res) => {
  assert.equal('/url?a=(b%29', res.text);
  done();
});

with an object

should format the url
request.get(url.parse(`${base}/login`)).then((res) => {
        assert(res.ok);
      })

without a schema

should default to http
request.get(`${base}/login`).then((res) => {
        assert.equal(res.status, 200);
      })

res.toJSON()

should describe the response
request
        .post(`${base}/echo`)
        .send({ foo: 'baz' })
        .then((res) => {
          const object = res.toJSON();
          assert.equal('object', typeof object.header);
          assert.equal('object', typeof object.req);
          assert.equal(200, object.status);
          assert.equal('{"foo":"baz"}', object.text);
        })

res.links

should default to an empty object
request.get(`${base}/login`).then((res) => {
        res.links.should.eql({});
      })
should parse the Link header field
request.get(`${base}/links`).end((error, res) => {
  res.links.next.should.equal(
    'https://api.github.com/repos/visionmedia/mocha/issues?page=2'
  );
  done();
});

req.unset(field)

should remove the header field
request
  .post(`${base}/echo`)
  .unset('User-Agent')
  .end((error, res) => {
    assert.equal(void 0, res.header['user-agent']);
    done();
  });

case-insensitive

should set/get header fields case-insensitively
const r = request.post(`${base}/echo`);
r.set('MiXeD', 'helloes');
assert.strictEqual(r.get('mixed'), 'helloes');
should unset header fields case-insensitively
const r = request.post(`${base}/echo`);
r.set('MiXeD', 'helloes');
r.unset('MIXED');
assert.strictEqual(r.get('mixed'), undefined);

req.write(str)

should write the given data
const request_ = request.post(`${base}/echo`);
request_.set('Content-Type', 'application/json');
assert.equal('boolean', typeof request_.write('{"name"'));
assert.equal('boolean', typeof request_.write(':"tobi"}'));
request_.end((error, res) => {
  res.text.should.equal('{"name":"tobi"}');
  done();
});

req.pipe(stream)

should pipe the response to the given stream
const stream = new EventEmitter();
stream.buf = '';
stream.writable = true;
stream.write = function (chunk) {
  this.buf += chunk;
};
stream.end = function () {
  this.buf.should.equal('{"name":"tobi"}');
  done();
};
request.post(`${base}/echo`).send('{"name":"tobi"}').pipe(stream);

.buffer()

should enable buffering
request
  .get(`${base}/custom`)
  .buffer()
  .end((error, res) => {
    assert.ifError(error);
    assert.equal('custom stuff', res.text);
    assert(res.buffered);
    done();
  });
should take precedence over request.buffer['someMimeType'] = false
const type = 'application/barbaz';
const send = 'some text';
request.buffer[type] = false;
request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .buffer()
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(res.type, type);
    assert.equal(send, res.text);
    assert(res.buffered);
    done();
  });

.buffer(false)

should disable buffering
request
  .post(`${base}/echo`)
  .type('application/x-dog')
  .send('hello this is dog')
  .buffer(false)
  .end((error, res) => {
    assert.ifError(error);
    assert.equal(null, res.text);
    res.body.should.eql({});
    let buf = '';
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      buf += chunk;
    });
    res.on('end', () => {
      buf.should.equal('hello this is dog');
      done();
    });
  });
should take precedence over request.buffer['someMimeType'] = true
const type = 'application/foobar';
const send = 'hello this is a dog';
request.buffer[type] = true;
request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .buffer(false)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(null, res.text);
    assert.equal(res.type, type);
    assert(!res.buffered);
    res.body.should.eql({});
    let buf = '';
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      buf += chunk;
    });
    res.on('end', () => {
      buf.should.equal(send);
      done();
    });
  });

.withCredentials()

should not throw an error when using the client-side "withCredentials" method
request
  .get(`${base}/custom`)
  .withCredentials()
  .end((error, res) => {
    assert.ifError(error);
    done();
  });

.agent()

should return the defaut agent
const request_ = request.post(`${base}/echo`);
request_.agent().should.equal(false);
done();

.agent(undefined)

should set an agent to undefined and ensure it is chainable
const request_ = request.get(`${base}/echo`);
const returnValue = request_.agent(undefined);
returnValue.should.equal(request_);
assert.strictEqual(request_.agent(), undefined);
done();

.agent(new http.Agent())

should set passed agent
const http = require('http');
const request_ = request.get(`${base}/echo`);
const agent = new http.Agent();
const returnValue = request_.agent(agent);
returnValue.should.equal(request_);
request_.agent().should.equal(agent);
done();

with a content type other than application/json or text/*

should still use buffering
return request
  .post(`${base}/echo`)
  .type('application/x-dog')
  .send('hello this is dog')
  .then((res) => {
    assert.equal(null, res.text);
    assert.equal(res.body.toString(), 'hello this is dog');
    res.buffered.should.be.true;
  });

content-length

should be set to the byte length of a non-buffer object
const decoder = new StringDecoder('utf8');
let img = fs.readFileSync(`${__dirname}/fixtures/test.png`);
img = decoder.write(img);
request
  .post(`${base}/echo`)
  .type('application/x-image')
  .send(img)
  .buffer(false)
  .end((error, res) => {
    assert.ifError(error);
    assert(!res.buffered);
    assert.equal(res.header['content-length'], Buffer.byteLength(img));
    done();
  });
should be set to the length of a buffer object
const img = fs.readFileSync(`${__dirname}/fixtures/test.png`);
request
  .post(`${base}/echo`)
  .type('application/x-image')
  .send(img)
  .buffer(true)
  .end((error, res) => {
    assert.ifError(error);
    assert(res.buffered);
    assert.equal(res.header['content-length'], img.length);
    done();
  });

req.buffer['someMimeType']

should respect that agent.buffer(true) takes precedent
const agent = request.agent();
agent.buffer(true);
const type = 'application/somerandomtype';
const send = 'somerandomtext';
request.buffer[type] = false;
agent
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(res.type, type);
    assert.equal(send, res.text);
    assert(res.buffered);
    done();
  });
should respect that agent.buffer(false) takes precedent
const agent = request.agent();
agent.buffer(false);
const type = 'application/barrr';
const send = 'some random text2';
request.buffer[type] = true;
agent
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(null, res.text);
    assert.equal(res.type, type);
    assert(!res.buffered);
    res.body.should.eql({});
    let buf = '';
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      buf += chunk;
    });
    res.on('end', () => {
      buf.should.equal(send);
      done();
    });
  });
should disable buffering for that mimetype when false
const type = 'application/bar';
const send = 'some random text';
request.buffer[type] = false;
request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(null, res.text);
    assert.equal(res.type, type);
    assert(!res.buffered);
    res.body.should.eql({});
    let buf = '';
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      buf += chunk;
    });
    res.on('end', () => {
      buf.should.equal(send);
      done();
    });
  });
should enable buffering for that mimetype when true
const type = 'application/baz';
const send = 'woooo';
request.buffer[type] = true;
request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(res.type, type);
    assert.equal(send, res.text);
    assert(res.buffered);
    done();
  });
should fallback to default handling for that mimetype when undefined
const type = 'application/bazzz';
const send = 'woooooo';
return request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .then((res) => {
    assert.equal(res.type, type);
    assert.equal(send, res.body.toString());
    assert(res.buffered);
  });

exports

should expose .protocols
Object.keys(request.protocols).should.eql(['http:', 'https:', 'http2:']);
should expose .serialize
Object.keys(request.serialize).should.eql([
  'application/x-www-form-urlencoded',
  'application/json'
]);
should expose .parse
Object.keys(request.parse).should.eql([
  'application/x-www-form-urlencoded',
  'application/json',
  'text',
  'application/json-seq',
  'application/octet-stream',
  'application/pdf',
  'image'
]);
should export .buffer
Object.keys(request.buffer).should.eql([]);

flags

with 4xx response

should set res.error and res.clientError
request.get(`${base}/notfound`).end((error, res) => {
  assert(error);
  assert(!res.ok, 'response should not be ok');
  assert(res.error, 'response should be an error');
  assert(res.clientError, 'response should be a client error');
  assert(!res.serverError, 'response should not be a server error');
  done();
});

with 5xx response

should set res.error and res.serverError
request.get(`${base}/error`).end((error, res) => {
  assert(error);
  assert(!res.ok, 'response should not be ok');
  assert(!res.notFound, 'response should not be notFound');
  assert(res.error, 'response should be an error');
  assert(!res.clientError, 'response should not be a client error');
  assert(res.serverError, 'response should be a server error');
  done();
});

with 404 Not Found

should res.notFound
request.get(`${base}/notfound`).end((error, res) => {
  assert(error);
  assert(res.notFound, 'response should be .notFound');
  done();
});

with 400 Bad Request

should set req.badRequest
request.get(`${base}/bad-request`).end((error, res) => {
  assert(error);
  assert(res.badRequest, 'response should be .badRequest');
  done();
});

with 401 Bad Request

should set res.unauthorized
request.get(`${base}/unauthorized`).end((error, res) => {
  assert(error);
  assert(res.unauthorized, 'response should be .unauthorized');
  done();
});

with 406 Not Acceptable

should set res.notAcceptable
request.get(`${base}/not-acceptable`).end((error, res) => {
  assert(error);
  assert(res.notAcceptable, 'response should be .notAcceptable');
  done();
});

with 204 No Content

should set res.noContent
request.get(`${base}/no-content`).end((error, res) => {
  assert(!error);
  assert(res.noContent, 'response should be .noContent');
  done();
});

with 201 Created

should set res.created
request.post(`${base}/created`).end((error, res) => {
  assert(!error);
  assert(res.created, 'response should be .created');
  done();
});

with 422 Unprocessable Entity

should set res.unprocessableEntity
request.post(`${base}/unprocessable-entity`).end((error, res) => {
  assert(error);
  assert(
    res.unprocessableEntity,
    'response should be .unprocessableEntity'
  );
  done();
});

Merging objects

Don't mix Buffer and JSON
assert.throws(() => {
  request
    .post('/echo')
    .send(Buffer.from('some buffer'))
    .send({ allowed: false });
});

req.send(String)

should default to "form"
request
  .post(`${base}/echo`)
  .send('user[name]=tj')
  .send('user[email]=tj@vision-media.ca')
  .end((error, res) => {
    res.header['content-type'].should.equal(
      'application/x-www-form-urlencoded'
    );
    res.body.should.eql({
      user: { name: 'tj', email: 'tj@vision-media.ca' }
    });
    done();
  });

res.body

application/x-www-form-urlencoded

should parse the body
request.get(`${base}/form-data`).end((error, res) => {
  res.text.should.equal('pet[name]=manny');
  res.body.should.eql({ pet: { name: 'manny' } });
  done();
});

https

certificate authority

request

should give a good response
request
  .get(testEndpoint)
  .ca(ca)
  .end((error, res) => {
    assert.ifError(error);
    assert(res.ok);
    assert.strictEqual('Safe and secure!', res.text);
    done();
  });
should reject unauthorized response
return request
  .get(testEndpoint)
  .trustLocalhost(false)
  .then(
    () => {
      throw new Error('Allows MITM');
    },
    () => {}
  );
should not reject unauthorized response
return request
  .get(testEndpoint)
  .disableTLSCerts()
  .then(({ status }) => {
    assert.strictEqual(status, 200);
  });
should trust localhost unauthorized response
return request.get(testEndpoint).trustLocalhost(true);
should trust overriden localhost unauthorized response
return request
  .get(`https://example.com:${server.address().port}`)
  .connect('127.0.0.1')
  .trustLocalhost();

.agent

should be able to make multiple requests without redefining the certificate
const agent = request.agent({ ca });
agent.get(testEndpoint).end((error, res) => {
  assert.ifError(error);
  assert(res.ok);
  assert.strictEqual('Safe and secure!', res.text);
  agent.get(url.parse(testEndpoint)).end((error, res) => {
    assert.ifError(error);
    assert(res.ok);
    assert.strictEqual('Safe and secure!', res.text);
    done();
  });
});

client certificates

request

.agent

res.body

image/png

should parse the body
request.get(`${base}/image`).end((error, res) => {
  res.type.should.equal('image/png');
  Buffer.isBuffer(res.body).should.be.true();
  (res.body.length - img.length).should.equal(0);
  done();
});

application/octet-stream

should parse the body
request
  .get(`${base}/image-as-octets`)
  .buffer(true) // that's tech debt :(
  .end((error, res) => {
    res.type.should.equal('application/octet-stream');
    Buffer.isBuffer(res.body).should.be.true();
    (res.body.length - img.length).should.equal(0);
    done();
  });

application/octet-stream

should parse the body (using responseType)
request
  .get(`${base}/image-as-octets`)
  .responseType('blob')
  .end((error, res) => {
    res.type.should.equal('application/octet-stream');
    Buffer.isBuffer(res.body).should.be.true();
    (res.body.length - img.length).should.equal(0);
    done();
  });

zlib

should deflate the content
request.get(base).end((error, res) => {
  res.should.have.status(200);
  res.text.should.equal(subject);
  res.headers['content-length'].should.be.below(subject.length);
  done();
});
should protect from zip bombs
request
  .get(base)
  .buffer(true)
  .maxResponseSize(1)
  .end((error, res) => {
    try {
      assert.equal('Maximum response size reached', error && error.message);
      done();
    } catch (err) {
      done(err);
    }
  });
should ignore trailing junk
request.get(`${base}/junk`).end((error, res) => {
  res.should.have.status(200);
  res.text.should.equal(subject);
  done();
});
should ignore missing data
request.get(`${base}/chopped`).end((error, res) => {
  assert.equal(undefined, error);
  res.should.have.status(200);
  res.text.should.startWith(subject);
  done();
});
should handle corrupted responses
request.get(`${base}/corrupt`).end((error, res) => {
  assert(error, 'missing error');
  assert(!res, 'response should not be defined');
  done();
});
should handle no content with gzip header
request.get(`${base}/nocontent`).end((error, res) => {
  assert.ifError(error);
  assert(res);
  res.should.have.status(204);
  res.text.should.equal('');
  res.headers.should.not.have.property('content-length');
  done();
});

without encoding set

should buffer if asked
return request
  .get(`${base}/binary`)
  .buffer(true)
  .then((res) => {
    res.should.have.status(200);
    assert(res.headers['content-length']);
    assert(res.body.byteLength);
    assert.equal(subject, res.body.toString());
  });
should emit buffers
request.get(`${base}/binary`).end((error, res) => {
  res.should.have.status(200);
  res.headers['content-length'].should.be.below(subject.length);
  res.on('data', (chunk) => {
    chunk.should.have.length(subject.length);
  });
  res.on('end', done);
});

req.lookup()

should set a custom lookup
const r = request.get(`${base}/ok`).lookup(myLookup);
assert(r.lookup() === myLookup);
r.then((res) => {
  res.text.should.equal('ok');
  done();
});

Multipart

#field(name, value)

should set a multipart field value
const request_ = request.post(`${base}/echo`);
request_.field('user[name]', 'tobi');
request_.field('user[age]', '2');
request_.field('user[species]', 'ferret');
return request_.then((res) => {
  res.body['user[name]'].should.equal('tobi');
  res.body['user[age]'].should.equal('2');
  res.body['user[species]'].should.equal('ferret');
});
should work with file attachments
const request_ = request.post(`${base}/echo`);
request_.field('name', 'Tobi');
request_.attach('document', 'test/node/fixtures/user.html');
request_.field('species', 'ferret');
return request_.then((res) => {
  res.body.name.should.equal('Tobi');
  res.body.species.should.equal('ferret');
  const html = res.files.document;
  html.originalFilename.should.equal('user.html');
  html.mimetype.should.equal('text/html');
  read(html.filepath).should.equal('<h1>name</h1>');
});

#attach(name, path)

should attach a file
const request_ = request.post(`${base}/echo`);
request_.attach('one', 'test/node/fixtures/user.html');
request_.attach('two', 'test/node/fixtures/user.json');
request_.attach('three', 'test/node/fixtures/user.txt');
return request_.then((res) => {
  const html = res.files.one;
  const json = res.files.two;
  const text = res.files.three;
  html.originalFilename.should.equal('user.html');
  html.mimetype.should.equal('text/html');
  read(html.filepath).should.equal('<h1>name</h1>');
  json.originalFilename.should.equal('user.json');
  json.mimetype.should.equal('application/json');
  read(json.filepath).should.equal('{"name":"tobi"}');
  text.originalFilename.should.equal('user.txt');
  text.mimetype.should.equal('text/plain');
  read(text.filepath).should.equal('Tobi');
});

when a file does not exist

should fail the request with an error
const request_ = request.post(`${base}/echo`);
request_.attach('name', 'foo');
// request_.attach('name2', 'bar');
// request_.attach('name3', 'baz');
request_.end((error, res) => {
  assert.ok(Boolean(error), 'Request should have failed.');
  error.code.should.equal('ENOENT');
  error.message.should.containEql('ENOENT');
  if (IS_WINDOWS) {
    error.path.toLowerCase().should.equal(
      getFullPath('foo').toLowerCase()
    );
  } else {
    error.path.should.equal(getFullPath('foo'));
  }
  done();
});
promise should fail
return request
  .post(`${base}/echo`)
  .field({ a: 1, b: 2 })
  .attach('c', 'does-not-exist.txt')
  .then(
    (res) => assert.fail('It should not allow this'),
    (err) => {
      err.code.should.equal('ENOENT');
      if (IS_WINDOWS) {
        err.path.toLowerCase().should.equal(
          getFullPath('does-not-exist.txt').toLowerCase()
        );
      } else {
        err.path.should.equal(getFullPath('does-not-exist.txt'));
      }
    }
  );
should report ENOENT via the callback
request
  .post(`${base}/echo`)
  .attach('name', 'file-does-not-exist')
  .end((error, res) => {
    assert.ok(Boolean(error), 'Request should have failed');
    error.code.should.equal('ENOENT');
    done();
  });
should report ENOENT via Promise
return request
  .post(`${base}/echo`)
  .attach('name', 'file-does-not-exist')
  .then(
    (res) => assert.fail('Request should have failed'),
    (err) => err.code.should.equal('ENOENT')
  );

#attach(name, path, filename)

should use the custom filename
request
        .post(`${base}/echo`)
        .attach('document', 'test/node/fixtures/user.html', 'doc.html')
        .then((res) => {
          const html = res.files.document;
          html.originalFilename.should.equal('doc.html');
          html.mimetype.should.equal('text/html');
          read(html.filepath).should.equal('<h1>name</h1>');
        })
should fire progress event
let loaded = 0;
let total = 0;
let uploadEventWasFired = false;
request
  .post(`${base}/echo`)
  .attach('document', 'test/node/fixtures/user.html')
  .on('progress', (event) => {
    total = event.total;
    loaded = event.loaded;
    if (event.direction === 'upload') {
      uploadEventWasFired = true;
    }
  })
  .end((error, res) => {
    if (error) return done(error);
    const html = res.files.document;
    html.originalFilename.should.equal('user.html');
    html.mimetype.should.equal('text/html');
    read(html.filepath).should.equal('<h1>name</h1>');
    total.should.equal(223);
    loaded.should.equal(223);
    uploadEventWasFired.should.equal(true);
    done();
  });
filesystem errors should be caught
request
  .post(`${base}/echo`)
  .attach('filedata', 'test/node/fixtures/non-existent-file.ext')
  .end((error, res) => {
    assert.ok(Boolean(error), 'Request should have failed.');
    error.code.should.equal('ENOENT');
    if (IS_WINDOWS) {
      error.path.toLowerCase().should.equal(
        getFullPath('test/node/fixtures/non-existent-file.ext').toLowerCase()
      );
    } else {
      error.path.should.equal(
        getFullPath('test/node/fixtures/non-existent-file.ext')
      );
    }
    done();
  });

#field(name, val)

should set a multipart field value
request
  .post(`${base}/echo`)
  .field('first-name', 'foo')
  .field('last-name', 'bar')
  .end((error, res) => {
    if (error) done(error);
    res.should.be.ok();
    res.body['first-name'].should.equal('foo');
    res.body['last-name'].should.equal('bar');
    done();
  });

#field(object)

should set multiple multipart fields
request
  .post(`${base}/echo`)
  .field({ 'first-name': 'foo', 'last-name': 'bar' })
  .end((error, res) => {
    if (error) done(error);
    res.should.be.ok();
    res.body['first-name'].should.equal('foo');
    res.body['last-name'].should.equal('bar');
    done();
  });

with network error

should error
request.get(`http://localhost:${this.port}/`).end((error, res) => {
  assert(error, 'expected an error');
  done();
});

request

not modified

should start with 200
request.get(`${base}/if-mod`).end((error, res) => {
  res.should.have.status(200);
  res.text.should.match(/^\d+$/);
  ts = Number(res.text);
  done();
});
should then be 304
request
  .get(`${base}/if-mod`)
  .set('If-Modified-Since', new Date(ts).toUTCString())
  .end((error, res) => {
    res.should.have.status(304);
    // res.text.should.be.empty
    done();
  });

req.parse(fn)

should take precedence over default parsers
request
  .get(`${base}/manny`)
  .parse(request.parse['application/json'])
  .end((error, res) => {
    assert(res.ok);
    assert.equal('{"name":"manny"}', res.text);
    assert.equal('manny', res.body.name);
    done();
  });
should be the only parser
request
      .get(`${base}/image`)
      .buffer(false)
      .parse((res, fn) => {
        res.on('data', () => {});
      })
      .then((res) => {
        assert(res.ok);
        assert.strictEqual(res.text, undefined);
        res.body.should.eql({});
      })
should emit error if parser throws
request
  .get(`${base}/manny`)
  .parse(() => {
    throw new Error('I am broken');
  })
  .on('error', (error) => {
    error.message.should.equal('I am broken');
    done();
  })
  .end();
should emit error if parser returns an error
request
  .get(`${base}/manny`)
  .parse((res, fn) => {
    fn(new Error('I am broken'));
  })
  .on('error', (error) => {
    error.message.should.equal('I am broken');
    done();
  })
  .end();
should not emit error on chunked json
request.get(`${base}/chunked-json`).end((error) => {
  assert.ifError(error);
  done();
});
should not emit error on aborted chunked json
const request_ = request.get(`${base}/chunked-json`);
request_.end((error) => {
  assert.ifError(error);
  done();
});
setTimeout(() => {
  request_.abort();
}, 50);

pipe on redirect

should follow Location
const stream = fs.createWriteStream(destinationPath);
const redirects = [];
const request_ = request
  .get(base)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .connect({
    inapplicable: 'should be ignored'
  });
stream.on('finish', () => {
  redirects.should.eql(['/movies', '/movies/all', '/movies/all/0']);
  fs.readFileSync(destinationPath, 'utf8').should.eql('first movie page');
  done();
});
request_.pipe(stream);

request pipe

should act as a writable stream
const request_ = request.post(base);
const stream = fs.createReadStream('test/node/fixtures/user.json');
request_.type('json');
request_.on('response', (res) => {
  res.body.should.eql({ name: 'tobi' });
  done();
});
stream.pipe(request_);
end() stops piping
const stream = fs.createWriteStream(destinationPath);
request.get(base).end((error, res) => {
  try {
    res.pipe(stream);
    return done(new Error('Did not prevent nonsense pipe'));
  } catch {
    /* expected error */
  }
  done();
});
should act as a readable stream
const stream = fs.createWriteStream(destinationPath);
let responseCalled = false;
const request_ = request.get(base);
request_.type('json');
request_.on('response', (res) => {
  res.status.should.eql(200);
  responseCalled = true;
});
stream.on('finish', () => {
  JSON.parse(fs.readFileSync(destinationPath)).should.eql({
    name: 'tobi'
  });
  responseCalled.should.be.true();
  done();
});
request_.pipe(stream);
should follow redirects
const stream = fs.createWriteStream(destinationPath);
let responseCalled = false;
const request_ = request.get(base + '/redirect');
request_.type('json');
request_.on('response', (res) => {
  res.status.should.eql(200);
  responseCalled = true;
});
stream.on('finish', () => {
  JSON.parse(fs.readFileSync(destinationPath)).should.eql({
    name: 'tobi'
  });
  responseCalled.should.be.true();
  done();
});
request_.pipe(stream);
should not throw on bad redirects
const stream = fs.createWriteStream(destinationPath);
let responseCalled = false;
let errorCalled = false;
const request_ = request.get(base + '/badRedirectNoLocation');
request_.type('json');
request_.on('response', (res) => {
  responseCalled = true;
});
request_.on('error', (error) => {
  error.message.should.eql('No location header for redirect');
  errorCalled = true;
  stream.end();
});
stream.on('finish', () => {
  responseCalled.should.be.false();
  errorCalled.should.be.true();
  done();
});
request_.pipe(stream);

req.query(String)

should support passing in a string
request
  .del(base)
  .query('name=t%F6bi')
  .end((error, res) => {
    res.body.should.eql({ name: 't%F6bi' });
    done();
  });
should work with url query-string and string for query
request
  .del(`${base}/?name=tobi`)
  .query('age=2%20')
  .end((error, res) => {
    res.body.should.eql({ name: 'tobi', age: '2 ' });
    done();
  });
should support compound elements in a string
request
  .del(base)
  .query('name=t%F6bi&age=2')
  .end((error, res) => {
    res.body.should.eql({ name: 't%F6bi', age: '2' });
    done();
  });
should work when called multiple times with a string
request
  .del(base)
  .query('name=t%F6bi')
  .query('age=2%F6')
  .end((error, res) => {
    res.body.should.eql({ name: 't%F6bi', age: '2%F6' });
    done();
  });
should work with normal `query` object and query string
request
  .del(base)
  .query('name=t%F6bi')
  .query({ age: '2' })
  .end((error, res) => {
    res.body.should.eql({ name: 't%F6bi', age: '2' });
    done();
  });
should not encode raw backticks, but leave encoded ones as is
return Promise.all([
  request
    .get(`${base}/raw-query`)
    .query('name=`t%60bi`&age`=2')
    .then((res) => {
      res.text.should.eql('name=`t%60bi`&age`=2');
    }),
  request.get(base + '/raw-query?`age%60`=2%60`').then((res) => {
    res.text.should.eql('`age%60`=2%60`');
  }),
  request
    .get(`${base}/raw-query`)
    .query('name=`t%60bi`')
    .query('age`=2')
    .then((res) => {
      res.text.should.eql('name=`t%60bi`&age`=2');
    })
]);

req.query(Object)

should construct the query-string
request
  .del(base)
  .query({ name: 'tobi' })
  .query({ order: 'asc' })
  .query({ limit: ['1', '2'] })
  .end((error, res) => {
    res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
    done();
  });
should encode raw backticks
request
  .get(`${base}/raw-query`)
  .query({ name: '`tobi`' })
  .query({ 'orde%60r': null })
  .query({ '`limit`': ['%602`'] })
  .end((error, res) => {
    res.text.should.eql('name=%60tobi%60&orde%2560r&%60limit%60=%25602%60');
    done();
  });
should not error on dates
const date = new Date(0);
request
  .del(base)
  .query({ at: date })
  .end((error, res) => {
    assert.equal(date.toISOString(), res.body.at);
    done();
  });
should work after setting header fields
request
  .del(base)
  .set('Foo', 'bar')
  .set('Bar', 'baz')
  .query({ name: 'tobi' })
  .query({ order: 'asc' })
  .query({ limit: ['1', '2'] })
  .end((error, res) => {
    res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
    done();
  });
should append to the original query-string
request
  .del(`${base}/?name=tobi`)
  .query({ order: 'asc' })
  .end((error, res) => {
    res.body.should.eql({ name: 'tobi', order: 'asc' });
    done();
  });
should retain the original query-string
request.del(`${base}/?name=tobi`).end((error, res) => {
  res.body.should.eql({ name: 'tobi' });
  done();
});
should keep only keys with null querystring values
request
  .del(`${base}/url`)
  .query({ nil: null })
  .end((error, res) => {
    res.text.should.equal('/url?nil');
    done();
  });
query-string should be sent on pipe
this.timeout(15_000);
const request_ = request.put(`${base}/?name=tobi`);
const stream = fs.createReadStream('test/node/fixtures/user.json');
request_.on('response', (res) => {
  res.body.should.eql({ name: 'tobi' });
  done();
});
request_.on('error', (err) => {
  done(err);
});
stream.on('error', function (err) {
  done(err);
});
stream.pipe(request_);

request.get

on 301 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-301`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 302 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-302`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 303 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-303`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 307 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-307`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 308 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-308`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

request.post

on 301 redirect

should follow Location with a GET request
const request_ = request.post(`${base}/test-301`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 302 redirect

should follow Location with a GET request
const request_ = request.post(`${base}/test-302`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 303 redirect

should follow Location with a GET request
const request_ = request.post(`${base}/test-303`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 307 redirect

should follow Location with a POST request
const request_ = request.post(`${base}/test-307`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('POST');
  done();
});

on 308 redirect

should follow Location with a POST request
const request_ = request.post(`${base}/test-308`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('POST');
  done();
});

request

on redirect

should merge cookies if agent is used
request
  .agent()
  .get(`${base}/cookie-redirect`)
  .set('Cookie', 'orig=1; replaced=not')
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(/orig=1/.test(res.text), 'orig=1/.test');
      assert(/replaced=yes/.test(res.text), 'replaced=yes/.test');
      assert(/from-redir=1/.test(res.text), 'from-redir=1');
      done();
    } catch (err) {
      done(err);
    }
  });
should not merge cookies if agent is not used
request
  .get(`${base}/cookie-redirect`)
  .set('Cookie', 'orig=1; replaced=not')
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(/orig=1/.test(res.text), '/orig=1');
      assert(/replaced=not/.test(res.text), '/replaced=not');
      assert(!/replaced=yes/.test(res.text), '!/replaced=yes');
      assert(!/from-redir/.test(res.text), '!/from-redir');
      done();
    } catch (err) {
      done(err);
    }
  });
should have previously set cookie for subsquent requests when agent is used
const agent = request.agent();
agent.get(`${base}/set-cookie`).end((error) => {
  assert.ifError(error);
  agent
    .get(`${base}/show-cookies`)
    .set({ Cookie: 'orig=1' })
    .end((error, res) => {
      try {
        assert.ifError(error);
        assert(/orig=1/.test(res.text), 'orig=1/.test');
        assert(/persist=123/.test(res.text), 'persist=123');
        done();
      } catch (err) {
        done(err);
      }
    });
});
should follow Location
const redirects = [];
request
  .get(base)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      const array = ['/movies', '/movies/all', '/movies/all/0'];
      redirects.should.eql(array);
      res.text.should.equal('first movie page');
      done();
    } catch (err) {
      done(err);
    }
  });
should follow Location with IP override
const redirects = [];
const url = URL.parse(base);
return request
  .get(`http://redir.example.com:${url.port || '80'}${url.pathname}`)
  .connect({
    '*': url.hostname
  })
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    const array = ['/movies', '/movies/all', '/movies/all/0'];
    redirects.should.eql(array);
    res.text.should.equal('first movie page');
  });
should follow Location with IP:port override
const redirects = [];
const url = URL.parse(base);
return request
  .get(`http://redir.example.com:9999${url.pathname}`)
  .connect({
    '*': { host: url.hostname, port: url.port || 80 }
  })
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    const array = ['/movies', '/movies/all', '/movies/all/0'];
    redirects.should.eql(array);
    res.text.should.equal('first movie page');
  });
should not follow on HEAD by default
const redirects = [];
return request
  .head(base)
  .ok(() => true)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    redirects.should.eql([]);
    res.status.should.equal(302);
  });
should follow on HEAD when redirects are set
const redirects = [];
request
  .head(base)
  .redirects(10)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      const array = [];
      array.push('/movies', '/movies/all', '/movies/all/0');
      redirects.should.eql(array);
      assert(!res.text);
      done();
    } catch (err) {
      done(err);
    }
  });
should remove Content-* fields
request
  .post(`${base}/header`)
  .type('txt')
  .set('X-Foo', 'bar')
  .set('X-Bar', 'baz')
  .send('hey')
  .end((error, res) => {
    try {
      assert(res.body);
      res.body.should.have.property('x-foo', 'bar');
      res.body.should.have.property('x-bar', 'baz');
      res.body.should.not.have.property('content-type');
      res.body.should.not.have.property('content-length');
      res.body.should.not.have.property('transfer-encoding');
      done();
    } catch (err) {
      done(err);
    }
  });
should retain cookies
request
  .get(`${base}/header`)
  .set('Cookie', 'foo=bar;')
  .end((error, res) => {
    try {
      assert(res.body);
      res.body.should.have.property('cookie', 'foo=bar;');
      done();
    } catch (err) {
      done(err);
    }
  });
should not resend query parameters
const redirects = [];
const query = [];
request
  .get(`${base}/?foo=bar`)
  .on('redirect', (res) => {
    query.push(res.headers.query);
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      const array = [];
      array.push('/movies', '/movies/all', '/movies/all/0');
      redirects.should.eql(array);
      res.text.should.equal('first movie page');
      query.should.eql(['{"foo":"bar"}', '{}', '{}']);
      res.headers.query.should.eql('{}');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle no location header
request.get(`${base}/bad-redirect`).end((error, res) => {
  try {
    error.message.should.equal('No location header for redirect');
    done();
  } catch (err) {
    done(err);
  }
});

when relative

should redirect to a sibling path
const redirects = [];
request
  .get(`${base}/relative`)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      redirects.should.eql(['tobi']);
      res.text.should.equal('tobi');
      done();
    } catch (err) {
      done(err);
    }
  });
should redirect to a parent path
const redirects = [];
request
  .get(`${base}/relative/sub`)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      redirects.should.eql(['../tobi']);
      res.text.should.equal('tobi');
      done();
    } catch (err) {
      done(err);
    }
  });

req.redirects(n)

should alter the default number of redirects to follow
const redirects = [];
request
  .get(base)
  .redirects(2)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      const array = [];
      assert(res.redirect, 'res.redirect');
      array.push('/movies', '/movies/all');
      redirects.should.eql(array);
      res.text.should.match(/Moved Temporarily|Found/);
      done();
    } catch (err) {
      done(err);
    }
  });

on POST

should redirect as GET
const redirects = [];
return request
  .post(`${base}/movie`)
  .send({ name: 'Tobi' })
  .redirects(2)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    redirects.should.eql(['/movies/all/0']);
    res.text.should.equal('first movie page');
  });
using multipart/form-data should redirect as GET
const redirects = [];
request
  .post(`${base}/movie`)
  .type('form')
  .field('name', 'Tobi')
  .redirects(2)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    redirects.should.eql(['/movies/all/0']);
    res.text.should.equal('first movie page');
  });

response

should act as a readable stream
const request_ = request.get(base).buffer(false);
request_.end((error, res) => {
  if (error) return done(error);
  let trackEndEvent = 0;
  let trackCloseEvent = 0;
  res.on('end', () => {
    trackEndEvent++;
    trackEndEvent.should.equal(1);
    if (!process.env.HTTP2_TEST) {
      trackCloseEvent.should.equal(0); // close should not have been called
    }
    done();
  });
  res.on('close', () => {
    trackCloseEvent++;
  });
  setTimeout(() => {
    (() => {
      res.pause();
    }).should.not.throw();
    (() => {
      res.resume();
    }).should.not.throw();
    (() => {
      res.destroy();
    }).should.not.throw();
  }, 50);
});

req.serialize(fn)

should take precedence over default parsers
request
  .post(`${base}/echo`)
  .send({ foo: 123 })
  .serialize(() => '{"bar":456}')
  .end((error, res) => {
    assert.ifError(error);
    assert.equal('{"bar":456}', res.text);
    assert.equal(456, res.body.bar);
    done();
  });

request.get().set()

should set host header after get()
app.get('/', (request_, res) => {
  assert.equal(request_.hostname, 'example.com');
  res.end();
});
server = http.createServer(app);
server.listen(0, function listening() {
  request
    .get(`http://localhost:${server.address().port}`)
    .set('host', 'example.com')
    .then(() => {
      return request
        .get(`http://example.com:${server.address().port}`)
        .connect({
          'example.com': 'localhost',
          '*': 'fail'
        });
    })
    .then(() => done(), done);
});

res.toError()

should return an Error
request.get(base).end((err, res) => {
  const error = res.toError();
  assert.equal(error.status, 400);
  assert.equal(error.method, 'GET');
  assert.equal(error.path, '/');
  assert.equal(error.message, 'cannot GET / (400)');
  assert.equal(error.text, 'invalid json');
  done();
});

[unix-sockets] http

request

path: / (root)
request.get(`${base}/`).end((error, res) => {
  assert(res.ok);
  assert.strictEqual('root ok!', res.text);
  done();
});
path: /request/path
request.get(`${base}/request/path`).end((error, res) => {
  assert(res.ok);
  assert.strictEqual('request path ok!', res.text);
  done();
});

[unix-sockets] https

request

path: / (root)
request
  .get(`${base}/`)
  .ca(cacert)
  .end((error, res) => {
    assert.ifError(error);
    assert(res.ok);
    assert.strictEqual('root ok!', res.text);
    done();
  });
path: /request/path
request
  .get(`${base}/request/path`)
  .ca(cacert)
  .end((error, res) => {
    assert.ifError(error);
    assert(res.ok);
    assert.strictEqual('request path ok!', res.text);
    done();
  });

req.get()

should not set a default user-agent
request.get(`${base}/ua`).then((res) => {
      assert(res.headers);
      assert(!res.headers['user-agent']);
    })

utils.type(str)

should return the mime type
utils
  .type('application/json; charset=utf-8')
  .should.equal('application/json');
utils.type('application/json').should.equal('application/json');

utils.params(str)

should return the field parameters
const object = utils.params('application/json; charset=utf-8; foo  = bar');
object.charset.should.equal('utf-8');
object.foo.should.equal('bar');
utils.params('application/json').should.eql({});

utils.parseLinks(str)

should parse links
const string_ =
  '<https://api.github.com/repos/visionmedia/mocha/issues?page=2>; rel="next", <https://api.github.com/repos/visionmedia/mocha/issues?page=5>; rel="last"';
const returnValue = utils.parseLinks(string_);
returnValue.next.should.equal(
  'https://api.github.com/repos/visionmedia/mocha/issues?page=2'
);
returnValue.last.should.equal(
  'https://api.github.com/repos/visionmedia/mocha/issues?page=5'
);
-------------------|---------|----------|---------|---------|--------------------------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -------------------|---------|----------|---------|---------|--------------------------------------- All files | 85.79 | 79.93 | 78.06 | 86.6 | src | 92.5 | 83.83 | 91.83 | 93.84 | agent-base.js | 100 | 100 | 100 | 100 | request-base.js | 91.01 | 83.9 | 94.28 | 93.06 | ...21,262,316,501,525-533,579,757,768 response-base.js | 100 | 100 | 75 | 100 | utils.js | 92.85 | 71.42 | 85.71 | 91.66 | 94-98 src/node | 82.28 | 78 | 68.42 | 82.94 | agent.js | 89.79 | 66.66 | 100 | 88.63 | 39,43,47,51,101 http2wrapper.js | 24.8 | 4.34 | 0 | 21.49 | ...76,180-181,185-186,190-191,196-198 index.js | 92.49 | 83.03 | 87.71 | 93.1 | ...,977,1142,1182-1186,1220-1221,1301 response.js | 90 | 83.33 | 55.55 | 89.79 | 78,86,94,120-121 unzip.js | 100 | 92.85 | 100 | 100 | 47 src/node/parsers | 97.61 | 75 | 100 | 97.61 | image.js | 100 | 100 | 100 | 100 | index.js | 100 | 100 | 100 | 100 | json.js | 100 | 75 | 100 | 100 | 15 text.js | 100 | 100 | 100 | 100 | urlencoded.js | 90 | 100 | 100 | 90 | 17 -------------------|---------|----------|---------|---------|--------------------------------------- test on node with http2 test on plain node

Agent

should remember defaults
if (typeof Promise === 'undefined') {
  return;
}
let called = 0;
let event_called = 0;
const agent = request
  .agent()
  .accept('json')
  .use(() => {
    called++;
  })
  .once('request', () => {
    event_called++;
  })
  .query({ hello: 'world' })
  .set('X-test', 'testing');
assert.equal(0, called);
assert.equal(0, event_called);
return agent
  .get(`${base}/echo`)
  .then((res) => {
    assert.equal(1, called);
    assert.equal(1, event_called);
    assert.equal('application/json', res.headers.accept);
    assert.equal('testing', res.headers['x-test']);
    return agent.get(`${base}/querystring`);
  })
  .then((res) => {
    assert.equal(2, called);
    assert.equal(2, event_called);
    assert.deepEqual({ hello: 'world' }, res.body);
  });

request

res.statusCode

should set statusCode
request.get(`${uri}/login`, (error, res) => {
  try {
    assert.strictEqual(res.statusCode, 200);
    done();
  } catch (err) {
    done(err);
  }
});

should allow the send shorthand

with callback in the method call
request.get(`${uri}/login`, (error, res) => {
  assert.equal(res.status, 200);
  done();
});
with data in the method call
request.post(`${uri}/echo`, { foo: 'bar' }).end((error, res) => {
  assert.equal('{"foo":"bar"}', res.text);
  done();
});
with callback and data in the method call
request.post(`${uri}/echo`, { foo: 'bar' }, (error, res) => {
  assert.equal('{"foo":"bar"}', res.text);
  done();
});

with a callback

should invoke .end()
request.get(`${uri}/login`, (error, res) => {
  try {
    assert.equal(res.status, 200);
    done();
  } catch (err) {
    done(err);
  }
});

.end()

should issue a request
request.get(`${uri}/login`).end((error, res) => {
  try {
    assert.equal(res.status, 200);
    done();
  } catch (err) {
    done(err);
  }
});
is optional with a promise
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/login`)
  .then((res) => res.status)
  .then()
  .then((status) => {
    assert.equal(200, status, 'Real promises pass results through');
  });
called only once with a promise
if (typeof Promise === 'undefined') {
  return;
}
const request_ = request.get(`${uri}/unique`);
return Promise.all([request_, request_, request_]).then((results) => {
  for (const item of results) {
    assert.deepEqual(
      item.body,
      results[0].body,
      'It should keep returning the same result after being called once'
    );
  }
});

res.error

ok
let calledErrorEvent = false;
let calledOKHandler = false;
request
  .get(`${uri}/error`)
  .ok((res) => {
    assert.strictEqual(500, res.status);
    calledOKHandler = true;
    return true;
  })
  .on('error', (error) => {
    calledErrorEvent = true;
  })
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert.strictEqual(res.status, 500);
      assert(!calledErrorEvent);
      assert(calledOKHandler);
      done();
    } catch (err) {
      done(err);
    }
  });
should be an Error object
let calledErrorEvent = false;
request
  .get(`${uri}/error`)
  .on('error', (error) => {
    assert.strictEqual(error.status, 500);
    calledErrorEvent = true;
  })
  .end((error, res) => {
    try {
      if (NODE) {
        res.error.message.should.equal('cannot GET /error (500)');
      } else {
        res.error.message.should.equal(`cannot GET ${uri}/error (500)`);
      }
      assert.strictEqual(res.error.status, 500);
      assert(error, 'should have an error for 500');
      assert.equal(error.message, 'Internal Server Error');
      assert(calledErrorEvent);
      done();
    } catch (err) {
      done(err);
    }
  });
with .then() promise
if (typeof Promise === 'undefined') {
  return;
}
return request.get(`${uri}/error`).then(
  () => {
    assert.fail();
  },
  (err) => {
    assert.equal(err.message, 'Internal Server Error');
  }
);
with .ok() returning false
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/echo`)
  .ok(() => false)
  .then(
    () => {
      assert.fail();
    },
    (err) => {
      assert.equal(200, err.response.status);
      assert.equal(err.message, 'OK');
    }
  );
with .ok() throwing an Error
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/echo`)
  .ok(() => {
    throw new Error('boom');
  })
  .then(
    () => {
      assert.fail();
    },
    (err) => {
      assert.equal(200, err.status);
      assert.equal(200, err.response.status);
      assert.equal(err.message, 'boom');
    }
  );
with .ok() throwing an Error with status
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/echo`)
  .ok(() => {
    const err = new Error('boom');
    err.status = 404;
    throw err;
  })
  .then(
    () => {
      assert.fail();
    },
    (err) => {
      assert.equal(404, err.status);
      assert.equal(200, err.response.status);
      assert.equal(err.message, 'boom');
    }
  );

res.header

should be an object
request.get(`${uri}/login`).end((error, res) => {
  try {
    assert.equal('Express', res.header['x-powered-by']);
    done();
  } catch (err) {
    done(err);
  }
});

set headers

should only set headers for ownProperties of header
try {
  request
    .get(`${uri}/echo-headers`)
    .set('valid', 'ok')
    .end((error, res) => {
      if (
        !error &&
        res.body &&
        res.body.valid &&
        !res.body.hasOwnProperty('invalid')
      ) {
        return done();
      }
      done(error || new Error('fail'));
    });
} catch (err) {
  done(err);
}

res.charset

should be set when present
request.get(`${uri}/login`).end((error, res) => {
  try {
    res.charset.should.equal('utf-8');
    done();
  } catch (err) {
    done(err);
  }
});

res.statusType

should provide the first digit
request.get(`${uri}/login`).end((error, res) => {
  try {
    assert(!error, 'should not have an error for success responses');
    assert.equal(200, res.status);
    assert.equal(2, res.statusType);
    done();
  } catch (err) {
    done(err);
  }
});

res.type

should provide the mime-type void of params
request.get(`${uri}/login`).end((error, res) => {
  try {
    res.type.should.equal('text/html');
    res.charset.should.equal('utf-8');
    done();
  } catch (err) {
    done(err);
  }
});

req.set(field, val)

should set the header field
request
  .post(`${uri}/echo`)
  .set('X-Foo', 'bar')
  .set('X-Bar', 'baz')
  .end((error, res) => {
    try {
      assert.equal('bar', res.header['x-foo']);
      assert.equal('baz', res.header['x-bar']);
      done();
    } catch (err) {
      done(err);
    }
  });

req.set(obj)

should set the header fields
request
  .post(`${uri}/echo`)
  .set({ 'X-Foo': 'bar', 'X-Bar': 'baz' })
  .end((error, res) => {
    try {
      assert.equal('bar', res.header['x-foo']);
      assert.equal('baz', res.header['x-bar']);
      done();
    } catch (err) {
      done(err);
    }
  });

req.type(str)

should set the Content-Type
request
  .post(`${uri}/echo`)
  .type('text/x-foo')
  .end((error, res) => {
    try {
      res.header['content-type'].should.equal('text/x-foo');
      done();
    } catch (err) {
      done(err);
    }
  });
should map "json"
request
  .post(`${uri}/echo`)
  .type('json')
  .send('{"a": 1}')
  .end((error, res) => {
    try {
      res.should.be.json();
      done();
    } catch (err) {
      done(err);
    }
  });
should map "html"
request
  .post(`${uri}/echo`)
  .type('html')
  .end((error, res) => {
    try {
      res.header['content-type'].should.equal('text/html');
      done();
    } catch (err) {
      done(err);
    }
  });

req.accept(str)

should set Accept
request
  .get(`${uri}/echo`)
  .accept('text/x-foo')
  .end((error, res) => {
    try {
      res.header.accept.should.equal('text/x-foo');
      done();
    } catch (err) {
      done(err);
    }
  });
should map "json"
request
  .get(`${uri}/echo`)
  .accept('json')
  .end((error, res) => {
    try {
      res.header.accept.should.equal('application/json');
      done();
    } catch (err) {
      done(err);
    }
  });
should map "xml"
request
  .get(`${uri}/echo`)
  .accept('xml')
  .end((error, res) => {
    try {
      // Mime module keeps changing this :(
      assert(
        res.header.accept == 'application/xml' ||
          res.header.accept == 'text/xml'
      );
      done();
    } catch (err) {
      done(err);
    }
  });
should map "html"
request
  .get(`${uri}/echo`)
  .accept('html')
  .end((error, res) => {
    try {
      res.header.accept.should.equal('text/html');
      done();
    } catch (err) {
      done(err);
    }
  });

req.send(str)

should write the string
request
  .post(`${uri}/echo`)
  .type('json')
  .send('{"name":"tobi"}')
  .end((error, res) => {
    try {
      res.text.should.equal('{"name":"tobi"}');
      done();
    } catch (err) {
      done(err);
    }
  });

req.send(Object)

should default to json
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .end((error, res) => {
    try {
      res.should.be.json();
      res.text.should.equal('{"name":"tobi"}');
      done();
    } catch (err) {
      done(err);
    }
  });

when called several times

should merge the objects
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .send({ age: 1 })
  .end((error, res) => {
    try {
      res.should.be.json();
      if (NODE) {
        res.buffered.should.be.true();
      }
      res.text.should.equal('{"name":"tobi","age":1}');
      done();
    } catch (err) {
      done(err);
    }
  });

.end(fn)

should check arity
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .end((error, res) => {
    try {
      assert.ifError(error);
      res.text.should.equal('{"name":"tobi"}');
      done();
    } catch (err) {
      done(err);
    }
  });
should emit request
const request_ = request.post(`${uri}/echo`);
request_.on('request', (request) => {
  assert.equal(request_, request);
  done();
});
request_.end();
should emit response
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .on('response', (res) => {
    res.text.should.equal('{"name":"tobi"}');
    done();
  })
  .end();

.then(fulfill, reject)

should support successful fulfills with .then(fulfill)
if (typeof Promise === 'undefined') {
  return done();
}
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .then((res) => {
    res.type.should.equal('application/json');
    res.text.should.equal('{"name":"tobi"}');
    done();
  });
should reject an error with .then(null, reject)
if (typeof Promise === 'undefined') {
  return done();
}
request.get(`${uri}/error`).then(null, (err) => {
  assert.equal(err.status, 500);
  assert.equal(err.response.text, 'boom');
  done();
});

.catch(reject)

should reject an error with .catch(reject)
if (typeof Promise === 'undefined') {
  return done();
}
request.get(`${uri}/error`).catch((err) => {
  assert.equal(err.status, 500);
  assert.equal(err.response.text, 'boom');
  done();
});

.abort()

should abort the request
const request_ = request.get(`${uri}/delay/3000`);
request_.end((error, res) => {
  try {
    assert(false, 'should not complete the request');
  } catch (err) {
    done(err);
  }
});
request_.on('error', (error) => {
  done(error);
});
request_.on('abort', done);
setTimeout(() => {
  request_.abort();
}, 500);
should abort the promise
const request_ = request.get(`${uri}/delay/3000`);
setTimeout(() => {
  request_.abort();
}, 10);
return request_.then(
  () => {
    assert.fail('should not complete the request');
  },
  (err) => {
    assert.equal('ABORTED', err.code);
  }
);
should allow chaining .abort() several times
const request_ = request.get(`${uri}/delay/3000`);
request_.end((error, res) => {
  try {
    assert(false, 'should not complete the request');
  } catch (err) {
    done(err);
  }
});
// This also verifies only a single 'done' event is emitted
request_.on('abort', done);
setTimeout(() => {
  request_.abort().abort().abort();
}, 1000);
should not allow abort then end
request
  .get(`${uri}/delay/3000`)
  .abort()
  .end((error, res) => {
    done(error ? undefined : new Error('Expected abort error'));
  });

req.toJSON()

should describe the request
const request_ = request.post(`${uri}/echo`).send({ foo: 'baz' });
request_.end((error, res) => {
  try {
    const json = request_.toJSON();
    assert.equal('POST', json.method);
    assert(/\/echo$/.test(json.url));
    assert.equal('baz', json.data.foo);
    done();
  } catch (err) {
    done(err);
  }
});

req.options()

should allow request body
request
  .options(`${uri}/options/echo/body`)
  .send({ foo: 'baz' })
  .end((error, res) => {
    try {
      assert.equal(error, null);
      assert.strictEqual(res.body.foo, 'baz');
      done();
    } catch (err) {
      done(err);
    }
  });

req.sortQuery()

nop with no querystring
request
  .get(`${uri}/url`)
  .sortQuery()
  .end((error, res) => {
    try {
      assert.equal(res.text, '/url');
      done();
    } catch (err) {
      done(err);
    }
  });
should sort the request querystring
request
  .get(`${uri}/url`)
  .query('search=Manny')
  .query('order=desc')
  .sortQuery()
  .end((error, res) => {
    try {
      assert.equal(res.text, '/url?order=desc&search=Manny');
      done();
    } catch (err) {
      done(err);
    }
  });
should allow disabling sorting
request
  .get(`${uri}/url`)
  .query('search=Manny')
  .query('order=desc')
  .sortQuery() // take default of true
  .sortQuery(false) // override it in later call
  .end((error, res) => {
    try {
      assert.equal(res.text, '/url?search=Manny&order=desc');
      done();
    } catch (err) {
      done(err);
    }
  });
should sort the request querystring using customized function
request
  .get(`${uri}/url`)
  .query('name=Nick')
  .query('search=Manny')
  .query('order=desc')
  .sortQuery((a, b) => a.length - b.length)
  .end((error, res) => {
    try {
      assert.equal(res.text, '/url?name=Nick&order=desc&search=Manny');
      done();
    } catch (err) {
      done(err);
    }
  });

req.set("Content-Type", contentType)

should work with just the contentType component
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/json')
  .send({ name: 'tobi' })
  .end((error) => {
    assert(!error);
    done();
  });
should work with the charset component
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/json; charset=utf-8')
  .send({ name: 'tobi' })
  .end((error) => {
    assert(!error);
    done();
  });

req.send(Object) as "form"

with req.type() set to form

should send x-www-form-urlencoded data
request
  .post(`${base}/echo`)
  .type('form')
  .send({ name: 'tobi' })
  .end((error, res) => {
    res.header['content-type'].should.equal(
      'application/x-www-form-urlencoded'
    );
    res.text.should.equal('name=tobi');
    done();
  });

when called several times

should merge the objects
request
  .post(`${base}/echo`)
  .type('form')
  .send({ name: { first: 'tobi', last: 'holowaychuk' } })
  .send({ age: '1' })
  .end((error, res) => {
    res.header['content-type'].should.equal(
      'application/x-www-form-urlencoded'
    );
    res.text.should.equal(
      'name%5Bfirst%5D=tobi&name%5Blast%5D=holowaychuk&age=1'
    );
    done();
  });

req.attach

ignores null file
request
  .post('/echo')
  .attach('image', null)
  .end((error, res) => {
    done();
  });

req.field

allow bools
if (!formDataSupported) {
  return done();
}
request
  .post(`${base}/formecho`)
  .field('bools', true)
  .field('strings', 'true')
  .end((error, res) => {
    assert.ifError(error);
    assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' });
    done();
  });
allow objects
if (!formDataSupported) {
  return done();
}
request
  .post(`${base}/formecho`)
  .field({ bools: true, strings: 'true' })
  .end((error, res) => {
    assert.ifError(error);
    assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' });
    done();
  });
works with arrays in objects
if (!formDataSupported) {
  return done();
}
request
  .post(`${base}/formecho`)
  .field({ numbers: [1, 2, 3] })
  .end((error, res) => {
    assert.ifError(error);
    assert.deepStrictEqual(res.body, { numbers: ['1', '2', '3'] });
    done();
  });
works with arrays
if (!formDataSupported) {
  return done();
}
request
  .post(`${base}/formecho`)
  .field('letters', ['a', 'b', 'c'])
  .end((error, res) => {
    assert.ifError(error);
    assert.deepStrictEqual(res.body, { letters: ['a', 'b', 'c'] });
    done();
  });
throw when empty
should.throws(() => {
  request.post(`${base}/echo`).field();
}, /name/);
should.throws(() => {
  request.post(`${base}/echo`).field('name');
}, /val/);
cannot be mixed with send()
assert.throws(() => {
  request.post('/echo').field('form', 'data').send('hi');
});
assert.throws(() => {
  request.post('/echo').send('hi').field('form', 'data');
});

req.send(Object) as "json"

should default to json
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .end((error, res) => {
    res.should.be.json();
    res.text.should.equal('{"name":"tobi"}');
    done();
  });
should work with arrays
request
  .post(`${uri}/echo`)
  .send([1, 2, 3])
  .end((error, res) => {
    res.should.be.json();
    res.text.should.equal('[1,2,3]');
    done();
  });
should work with value null
request
  .post(`${uri}/echo`)
  .type('json')
  .send('null')
  .end((error, res) => {
    res.should.be.json();
    assert.strictEqual(res.body, null);
    done();
  });
should work with value false
request
  .post(`${uri}/echo`)
  .type('json')
  .send('false')
  .end((error, res) => {
    res.should.be.json();
    res.body.should.equal(false);
    done();
  });
should work with empty string value
request
  .post(`${uri}/echo`)
  .type('json')
  .send('""')
  .end((error, res) => {
    res.should.be.json();
    res.body.should.equal('');
    done();
  });
should work with vendor MIME type
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/vnd.example+json')
  .send({ name: 'vendor' })
  .end((error, res) => {
    res.text.should.equal('{"name":"vendor"}');
    ({ name: 'vendor' }.should.eql(res.body));
    done();
  });

when called several times

should merge the objects
request
  .post(`${uri}/echo`)
  .send({ name: 'tobi' })
  .send({ age: 1 })
  .end((error, res) => {
    res.should.be.json();
    res.text.should.equal('{"name":"tobi","age":1}');
    ({ name: 'tobi', age: 1 }.should.eql(res.body));
    done();
  });

res.body

application/json

should parse the body
request.get(`${uri}/json`).end((error, res) => {
  res.text.should.equal('{"name":"manny"}');
  res.body.should.eql({ name: 'manny' });
  done();
});

Invalid JSON response

should return the raw response
request.get(`${uri}/invalid-json`).end((error, res) => {
  assert.deepEqual(
    error.rawResponse,
    ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}"
  );
  done();
});
should return the http status code
request.get(`${uri}/invalid-json-forbidden`).end((error, res) => {
  assert.equal(error.statusCode, 403);
  done();
});

request

on redirect

should retain header fields
request
  .get(`${base}/header`)
  .set('X-Foo', 'bar')
  .end((error, res) => {
    try {
      assert(res.body);
      res.body.should.have.property('x-foo', 'bar');
      done();
    } catch (err) {
      done(err);
    }
  });
should preserve timeout across redirects
request
  .get(`${base}/movies/random`)
  .timeout(250)
  .end((error, res) => {
    try {
      assert(error instanceof Error, 'expected an error');
      error.should.have.property('timeout', 250);
      done();
    } catch (err) {
      done(err);
    }
  });
should successfully redirect after retry on error
const id = Math.random() * 1_000_000 * Date.now();
request
  .get(`${base}/error/redirect/${id}`)
  .retry(2)
  .end((error, res) => {
    assert(res.ok, 'response should be ok');
    assert(res.text, 'first movie page');
    done();
  });
should preserve retries across redirects
const id = Math.random() * 1_000_000 * Date.now();
request
  .get(`${base}/error/redirect-error${id}`)
  .retry(2)
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(2, error.retries, 'expected an error with .retries');
    assert.equal(500, error.status, 'expected an error status of 500');
    done();
  });

on 303

should redirect with same method
request
  .put(`${base}/redirect-303`)
  .send({ msg: 'hello' })
  .redirects(1)
  .on('redirect', (res) => {
    res.headers.location.should.equal('/reply-method');
  })
  .end((error, res) => {
    if (error) {
      done(error);
      return;
    }
    res.text.should.equal('method=get');
    done();
  });

on 307

should redirect with same method
if (isMSIE) return done(); // IE9 broken
request
  .put(`${base}/redirect-307`)
  .send({ msg: 'hello' })
  .redirects(1)
  .on('redirect', (res) => {
    res.headers.location.should.equal('/reply-method');
  })
  .end((error, res) => {
    if (error) {
      done(error);
      return;
    }
    res.text.should.equal('method=put');
    done();
  });

on 308

should redirect with same method
if (isMSIE) return done(); // IE9 broken
request
  .put(`${base}/redirect-308`)
  .send({ msg: 'hello' })
  .redirects(1)
  .on('redirect', (res) => {
    res.headers.location.should.equal('/reply-method');
  })
  .end((error, res) => {
    if (error) {
      done(error);
      return;
    }
    res.text.should.equal('method=put');
    done();
  });

request

Request inheritance
assert(request.get(`${uri}/`) instanceof request.Request);
request() simple GET without callback
request('GET', 'test/test.request.js').end();
next();
request() simple GET
request('GET', `${uri}/ok`).end((error, res) => {
  try {
    assert(res instanceof request.Response, 'respond with Response');
    assert(res.ok, 'response should be ok');
    assert(res.text, 'res.text');
    next();
  } catch (err) {
    next(err);
  }
});
request() simple HEAD
request.head(`${uri}/ok`).end((error, res) => {
  try {
    assert(res instanceof request.Response, 'respond with Response');
    assert(res.ok, 'response should be ok');
    assert(!res.text, 'res.text');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 5xx
request('GET', `${uri}/error`).end((error, res) => {
  try {
    assert(error);
    assert.equal(error.message, 'Internal Server Error');
    assert(!res.ok, 'response should not be ok');
    assert(res.error, 'response should be an error');
    assert(!res.clientError, 'response should not be a client error');
    assert(res.serverError, 'response should be a server error');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 4xx
request('GET', `${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert.equal(error.message, 'Not Found');
    assert(!res.ok, 'response should not be ok');
    assert(res.error, 'response should be an error');
    assert(res.clientError, 'response should be a client error');
    assert(!res.serverError, 'response should not be a server error');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 404 Not Found
request('GET', `${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert(res.notFound, 'response should be .notFound');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 400 Bad Request
request('GET', `${uri}/bad-request`).end((error, res) => {
  try {
    assert(error);
    assert(res.badRequest, 'response should be .badRequest');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 401 Bad Request
request('GET', `${uri}/unauthorized`).end((error, res) => {
  try {
    assert(error);
    assert(res.unauthorized, 'response should be .unauthorized');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 406 Not Acceptable
request('GET', `${uri}/not-acceptable`).end((error, res) => {
  try {
    assert(error);
    assert(res.notAcceptable, 'response should be .notAcceptable');
    next();
  } catch (err) {
    next(err);
  }
});
request() GET 204 No Content
request('GET', `${uri}/no-content`).end((error, res) => {
  try {
    assert.ifError(error);
    assert(res.noContent, 'response should be .noContent');
    next();
  } catch (err) {
    next(err);
  }
});
request() DELETE 204 No Content
request('DELETE', `${uri}/no-content`).end((error, res) => {
  try {
    assert.ifError(error);
    assert(res.noContent, 'response should be .noContent');
    next();
  } catch (err) {
    next(err);
  }
});
request() header parsing
request('GET', `${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert.equal('text/html; charset=utf-8', res.header['content-type']);
    assert.equal('Express', res.header['x-powered-by']);
    next();
  } catch (err) {
    next(err);
  }
});
request() .status
request('GET', `${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert.equal(404, res.status, 'response .status');
    assert.equal(4, res.statusType, 'response .statusType');
    next();
  } catch (err) {
    next(err);
  }
});
get()
request.get(`${uri}/notfound`).end((error, res) => {
  try {
    assert(error);
    assert.equal(404, res.status, 'response .status');
    assert.equal(4, res.statusType, 'response .statusType');
    next();
  } catch (err) {
    next(err);
  }
});
put()
request.put(`${uri}/user/12`).end((error, res) => {
  try {
    assert.equal('updated', res.text, 'response text');
    next();
  } catch (err) {
    next(err);
  }
});
put().send()
request
  .put(`${uri}/user/13/body`)
  .send({ user: 'new' })
  .end((error, res) => {
    try {
      assert.equal('received new', res.text, 'response text');
      next();
    } catch (err) {
      next(err);
    }
  });
post()
request.post(`${uri}/user`).end((error, res) => {
  try {
    assert.equal('created', res.text, 'response text');
    next();
  } catch (err) {
    next(err);
  }
});
del()
request.del(`${uri}/user/12`).end((error, res) => {
  try {
    assert.equal('deleted', res.text, 'response text');
    next();
  } catch (err) {
    next(err);
  }
});
delete()
request.delete(`${uri}/user/12`).end((error, res) => {
  try {
    assert.equal('deleted', res.text, 'response text');
    next();
  } catch (err) {
    next(err);
  }
});
post() data
request
  .post(`${uri}/todo/item`)
  .type('application/octet-stream')
  .send('tobi')
  .end((error, res) => {
    try {
      assert.equal('added "tobi"', res.text, 'response text');
      next();
    } catch (err) {
      next(err);
    }
  });
request .type()
request
  .post(`${uri}/user/12/pet`)
  .type('urlencoded')
  .send('pet=tobi')
  .end((error, res) => {
    try {
      assert.equal('added pet "tobi"', res.text, 'response text');
      next();
    } catch (err) {
      next(err);
    }
  });
request .type() with alias
request
  .post(`${uri}/user/12/pet`)
  .type('application/x-www-form-urlencoded')
  .send('pet=tobi')
  .end((error, res) => {
    try {
      assert.equal('added pet "tobi"', res.text, 'response text');
      next();
    } catch (err) {
      next(err);
    }
  });
request .get() with no data or callback
request.get(`${uri}/echo-header/content-type`);
next();
request .send() with no data only
request.post(`${uri}/user/5/pet`).type('urlencoded').send('pet=tobi');
next();
request .send() with callback only
request
  .get(`${uri}/echo-header/accept`)
  .set('Accept', 'foo/bar')
  .end((error, res) => {
    try {
      assert.equal('foo/bar', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .accept() with json
request
  .get(`${uri}/echo-header/accept`)
  .accept('json')
  .end((error, res) => {
    try {
      assert.equal('application/json', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .accept() with application/json
request
  .get(`${uri}/echo-header/accept`)
  .accept('application/json')
  .end((error, res) => {
    try {
      assert.equal('application/json', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .accept() with xml
request
  .get(`${uri}/echo-header/accept`)
  .accept('xml')
  .end((error, res) => {
    try {
      // We can't depend on mime module to be consistent with this
      assert(res.text == 'application/xml' || res.text == 'text/xml');
      next();
    } catch (err) {
      next(err);
    }
  });
request .accept() with application/xml
request
  .get(`${uri}/echo-header/accept`)
  .accept('application/xml')
  .end((error, res) => {
    try {
      assert.equal('application/xml', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .end()
request
  .put(`${uri}/echo-header/content-type`)
  .set('Content-Type', 'text/plain')
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('text/plain', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .send()
request
  .put(`${uri}/echo-header/content-type`)
  .set('Content-Type', 'text/plain')
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('text/plain', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .set()
request
  .put(`${uri}/echo-header/content-type`)
  .set('Content-Type', 'text/plain')
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('text/plain', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
request .set(object)
request
  .put(`${uri}/echo-header/content-type`)
  .set({ 'Content-Type': 'text/plain' })
  .send('wahoo')
  .end((error, res) => {
    try {
      assert.equal('text/plain', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST urlencoded
request
  .post(`${uri}/pet`)
  .type('urlencoded')
  .send({ name: 'Manny', species: 'cat' })
  .end((error, res) => {
    try {
      assert.equal('added Manny the cat', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json
request
  .post(`${uri}/pet`)
  .type('json')
  .send({ name: 'Manny', species: 'cat' })
  .end((error, res) => {
    try {
      assert.equal('added Manny the cat', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json array
request
  .post(`${uri}/echo`)
  .send([1, 2, 3])
  .end((error, res) => {
    try {
      assert.equal(
        'application/json',
        res.header['content-type'].split(';')[0]
      );
      assert.equal('[1,2,3]', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json default
request
  .post(`${uri}/pet`)
  .send({ name: 'Manny', species: 'cat' })
  .end((error, res) => {
    try {
      assert.equal('added Manny the cat', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json contentType charset
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/json; charset=UTF-8')
  .send({ data: ['data1', 'data2'] })
  .end((error, res) => {
    try {
      assert.equal('{"data":["data1","data2"]}', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST json contentType vendor
request
  .post(`${uri}/echo`)
  .set('Content-Type', 'application/vnd.example+json')
  .send({ data: ['data1', 'data2'] })
  .end((error, res) => {
    try {
      assert.equal('{"data":["data1","data2"]}', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST multiple .send() calls
request
  .post(`${uri}/pet`)
  .send({ name: 'Manny' })
  .send({ species: 'cat' })
  .end((error, res) => {
    try {
      assert.equal('added Manny the cat', res.text);
      next();
    } catch (err) {
      next(err);
    }
  });
POST multiple .send() strings
request
  .post(`${uri}/echo`)
  .send('user[name]=tj')
  .send('user[email]=tj@vision-media.ca')
  .end((error, res) => {
    try {
      assert.equal(
        'application/x-www-form-urlencoded',
        res.header['content-type'].split(';')[0]
      );
      assert.equal(
        res.text,
        'user[name]=tj&user[email]=tj@vision-media.ca'
      );
      next();
    } catch (err) {
      next(err);
    }
  });
POST with no data
request
  .post(`${uri}/empty-body`)
  .send()
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(res.noContent, 'response should be .noContent');
      next();
    } catch (err) {
      next(err);
    }
  });
GET .type
request.get(`${uri}/pets`).end((error, res) => {
  try {
    assert.equal('application/json', res.type);
    next();
  } catch (err) {
    next(err);
  }
});
GET Content-Type params
request.get(`${uri}/text`).end((error, res) => {
  try {
    assert.equal('utf-8', res.charset);
    next();
  } catch (err) {
    next(err);
  }
});
GET json
request.get(`${uri}/pets`).end((error, res) => {
  try {
    assert.deepEqual(res.body, ['tobi', 'loki', 'jane']);
    next();
  } catch (err) {
    next(err);
  }
});
GET json-seq
request
  .get(`${uri}/json-seq`)
  .buffer()
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert.deepEqual(res.text, '\u001E{"id":1}\n\u001E{"id":2}\n');
      next();
    } catch (err) {
      next(err);
    }
  });
GET binary data
request
  .get(`${uri}/binary-data`)
  .buffer()
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert.deepEqual(res.body, binData);
      next();
    } catch (err) {
      next(err);
    }
  });
GET x-www-form-urlencoded
request.get(`${uri}/foo`).end((error, res) => {
  try {
    assert.deepEqual(res.body, { foo: 'bar' });
    next();
  } catch (err) {
    next(err);
  }
});
GET shorthand
request.get(`${uri}/foo`, (error, res) => {
  try {
    assert.equal('foo=bar', res.text);
    next();
  } catch (err) {
    next(err);
  }
});
POST shorthand
request.post(`${uri}/user/0/pet`, { pet: 'tobi' }, (error, res) => {
  try {
    assert.equal('added pet "tobi"', res.text);
    next();
  } catch (err) {
    next(err);
  }
});
POST shorthand without callback
request.post(`${uri}/user/0/pet`, { pet: 'tobi' }).end((error, res) => {
  try {
    assert.equal('added pet "tobi"', res.text);
    next();
  } catch (err) {
    next(err);
  }
});
GET querystring object with array
request
  .get(`${uri}/querystring`)
  .query({ val: ['a', 'b', 'c'] })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, { val: ['a', 'b', 'c'] });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring object with array and primitives
request
  .get(`${uri}/querystring`)
  .query({ array: ['a', 'b', 'c'], string: 'foo', number: 10 })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        array: ['a', 'b', 'c'],
        string: 'foo',
        number: 10
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring object with two arrays
request
  .get(`${uri}/querystring`)
  .query({ array1: ['a', 'b', 'c'], array2: [1, 2, 3] })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        array1: ['a', 'b', 'c'],
        array2: [1, 2, 3]
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring object
request
  .get(`${uri}/querystring`)
  .query({ search: 'Manny' })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, { search: 'Manny' });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring append original
request
  .get(`${uri}/querystring?search=Manny`)
  .query({ range: '1..5' })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, { search: 'Manny', range: '1..5' });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring multiple objects
request
  .get(`${uri}/querystring`)
  .query({ search: 'Manny' })
  .query({ range: '1..5' })
  .query({ order: 'desc' })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        search: 'Manny',
        range: '1..5',
        order: 'desc'
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring with strings
request
  .get(`${uri}/querystring`)
  .query('search=Manny')
  .query('range=1..5')
  .query('order=desc')
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        search: 'Manny',
        range: '1..5',
        order: 'desc'
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET querystring with strings and objects
request
  .get(`${uri}/querystring`)
  .query('search=Manny')
  .query({ order: 'desc', range: '1..5' })
  .end((error, res) => {
    try {
      assert.deepEqual(res.body, {
        search: 'Manny',
        range: '1..5',
        order: 'desc'
      });
      next();
    } catch (err) {
      next(err);
    }
  });
GET shorthand payload goes to querystring
request.get(
  `${uri}/querystring`,
  { foo: 'FOO', bar: 'BAR' },
  (error, res) => {
    try {
      assert.deepEqual(res.body, { foo: 'FOO', bar: 'BAR' });
      next();
    } catch (err) {
      next(err);
    }
  }
);
HEAD shorthand payload goes to querystring
request.head(
  `${uri}/querystring-in-header`,
  { foo: 'FOO', bar: 'BAR' },
  (error, res) => {
    try {
      assert.deepEqual(JSON.parse(res.headers.query), {
        foo: 'FOO',
        bar: 'BAR'
      });
      next();
    } catch (err) {
      next(err);
    }
  }
);
request(method, url)
request('GET', `${uri}/foo`).end((error, res) => {
  try {
    assert.equal('bar', res.body.foo);
    next();
  } catch (err) {
    next(err);
  }
});
request(url)
request(`${uri}/foo`).end((error, res) => {
  try {
    assert.equal('bar', res.body.foo);
    next();
  } catch (err) {
    next(err);
  }
});
request(url, fn)
request(`${uri}/foo`, (error, res) => {
  try {
    assert.equal('bar', res.body.foo);
    next();
  } catch (err) {
    next(err);
  }
});
req.timeout(ms)
const request_ = request.get(`${uri}/delay/3000`).timeout(1000);
request_.end((error, res) => {
  try {
    assert(error, 'error missing');
    assert.equal(1000, error.timeout, 'err.timeout missing');
    assert.equal(
      'Timeout of 1000ms exceeded',
      error.message,
      'err.message incorrect'
    );
    assert.equal(null, res);
    assert(request_.timedout, true);
    next();
  } catch (err) {
    next(err);
  }
});
req.timeout(ms) with redirect
const request_ = request.get(`${uri}/delay/const`).timeout(1000);
request_.end((error, res) => {
  try {
    assert(error, 'error missing');
    assert.equal(1000, error.timeout, 'err.timeout missing');
    assert.equal(
      'Timeout of 1000ms exceeded',
      error.message,
      'err.message incorrect'
    );
    assert.equal(null, res);
    assert(request_.timedout, true);
    next();
  } catch (err) {
    next(err);
  }
});
request event
request
  .get(`${uri}/foo`)
  .on('request', (request_) => {
    try {
      assert.equal(`${uri}/foo`, request_.url);
      next();
    } catch (err) {
      next(err);
    }
  })
  .end();
response event
request
  .get(`${uri}/foo`)
  .on('response', (res) => {
    try {
      assert.equal('bar', res.body.foo);
      next();
    } catch (err) {
      next(err);
    }
  })
  .end();
response should set statusCode
request.get(`${uri}/ok`, (error, res) => {
  try {
    assert.strictEqual(res.statusCode, 200);
    next();
  } catch (err) {
    next(err);
  }
});
req.toJSON()
request.get(`${uri}/ok`).end((error, res) => {
  try {
    const index = (res.request || res.req).toJSON();
    for (const property of ['url', 'method', 'data', 'headers']) {
      assert(index.hasOwnProperty(property));
    }
    next();
  } catch (err) {
    next(err);
  }
});

.retry(count)

should not retry if passed "0"
request
  .get(`${base}/error`)
  .retry(0)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(
        undefined,
        error.retries,
        'expected an error without .retries'
      );
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should not retry if passed an invalid number
request
  .get(`${base}/error`)
  .retry(-2)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(
        undefined,
        error.retries,
        'expected an error without .retries'
      );
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should not retry if passed undefined
request
  .get(`${base}/error`)
  .retry(undefined)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(
        undefined,
        error.retries,
        'expected an error without .retries'
      );
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle server error after repeat attempt
request
  .get(`${base}/error`)
  .retry(2)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(2, error.retries, 'expected an error with .retries');
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should retry if passed nothing
request
  .get(`${base}/error`)
  .retry()
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(1, error.retries, 'expected an error with .retries');
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should retry if passed "true"
request
  .get(`${base}/error`)
  .retry(true)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(1, error.retries, 'expected an error with .retries');
      assert.equal(500, error.status, 'expected an error status of 500');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle successful request after repeat attempt from server error
request
  .get(`${base}/error/ok/${uniqid()}`)
  .query({ qs: 'present' })
  .retry(2)
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(res.ok, 'response should be ok');
      assert(res.text, 'res.text');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle server timeout error after repeat attempt
request
  .get(`${base}/delay/400`)
  .timeout(200)
  .retry(2)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(2, error.retries, 'expected an error with .retries');
      assert.equal(
        'number',
        typeof error.timeout,
        'expected an error with .timeout'
      );
      assert.equal('ECONNABORTED', error.code, 'expected abort error code');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle successful request after repeat attempt from server timeout
const url = `/delay/1200/ok/${uniqid()}?built=in`;
request
  .get(base + url)
  .query('string=ified')
  .query({ json: 'ed' })
  .timeout(600)
  .retry(2)
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(res.ok, 'response should be ok');
      assert.equal(res.text, `ok = ${url}&string=ified&json=ed`);
      done();
    } catch (err) {
      done(err);
    }
  });
should handle successful request after repeat attempt from server timeout when using .then(fulfill, reject)
const url = `/delay/1200/ok/${uniqid()}?built=in`;
request
  .get(base + url)
  .query('string=ified')
  .query({ json: 'ed' })
  .timeout(600)
  .retry(1)
  .then((res, error) => {
    try {
      assert.ifError(error);
      assert(res.ok, 'response should be ok');
      assert.equal(res.text, `ok = ${url}&string=ified&json=ed`);
      done();
    } catch (err) {
      done(err);
    }
  });
should correctly abort a retry attempt
let aborted = false;
const request_ = request.get(`${base}/delay/400`).timeout(200).retry(2);
request_.end((error, res) => {
  try {
    assert(false, 'should not complete the request');
  } catch (err) {
    done(err);
  }
});
request_.on('abort', () => {
  aborted = true;
});
setTimeout(() => {
  request_.abort();
  setTimeout(() => {
    try {
      assert(aborted, 'should be aborted');
      done();
    } catch (err) {
      done(err);
    }
  }, 150);
}, 150);
should correctly retain header fields
request
  .get(`${base}/error/ok/${uniqid()}`)
  .query({ qs: 'present' })
  .retry(2)
  .set('X-Foo', 'bar')
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(res.body);
      res.body.should.have.property('x-foo', 'bar');
      done();
    } catch (err) {
      done(err);
    }
  });
should not retry on 4xx responses
request
  .get(`${base}/bad-request`)
  .retry(2)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(0, error.retries, 'expected an error with 0 .retries');
      assert.equal(400, error.status, 'expected an error status of 400');
      done();
    } catch (err) {
      done(err);
    }
  });
should execute callback on retry if passed
let callbackCallCount = 0;
function retryCallback(request) {
  callbackCallCount++;
}
request
  .get(`${base}/error`)
  .retry(2, retryCallback)
  .end((error, res) => {
    try {
      assert(error, 'expected an error');
      assert.equal(2, error.retries, 'expected an error with .retries');
      assert.equal(500, error.status, 'expected an error status of 500');
      assert.equal(
        2,
        callbackCallCount,
        'expected the callback to be called on each retry'
      );
      done();
    } catch (err) {
      done(err);
    }
  });

.timeout(ms)

when timeout is exceeded

should error
request
  .get(`${base}/delay/500`)
  .timeout(150)
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    done();
  });
should error in promise interface
request
  .get(`${base}/delay/500`)
  .timeout(150)
  .catch((err) => {
    assert(err, 'expected an error');
    assert.equal(
      'number',
      typeof err.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', err.code, 'expected abort error code');
    done();
  });
should handle gzip timeout
request
  .get(`${base}/delay/zip`)
  .timeout(150)
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    done();
  });
should handle buffer timeout
request
  .get(`${base}/delay/json`)
  .buffer(true)
  .timeout(150)
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    done();
  });
should error on deadline
request
  .get(`${base}/delay/500`)
  .timeout({ deadline: 150 })
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    done();
  });
should support setting individual options
request
  .get(`${base}/delay/500`)
  .timeout({ deadline: 10 })
  .timeout({ response: 99_999 })
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    assert.equal('ETIME', error.errno);
    done();
  });
should error on response
request
  .get(`${base}/delay/500`)
  .timeout({ response: 150 })
  .end((error, res) => {
    assert(error, 'expected an error');
    assert.equal(
      'number',
      typeof error.timeout,
      'expected an error with .timeout'
    );
    assert.equal('ECONNABORTED', error.code, 'expected abort error code');
    assert.equal('ETIMEDOUT', error.errno);
    done();
  });
should accept slow body with fast response
request
  .get(`${base}/delay/slowbody`)
  .timeout({ response: 1000 })
  .on('progress', () => {
    // This only makes the test faster without relying on arbitrary timeouts
    request.get(`${base}/delay/slowbody/finish`).end();
  })
  .end(done);

request

use

should use plugin success
const now = `${Date.now()}`;
function uuid(request_) {
  request_.set('X-UUID', now);
  return request_;
}
function prefix(request_) {
  request_.url = uri + request_.url;
  return request_;
}
request
  .get('/echo')
  .use(uuid)
  .use(prefix)
  .end((error, res) => {
    assert.strictEqual(res.statusCode, 200);
    assert.equal(res.get('X-UUID'), now);
    done();
  });

subclass

should be an instance of Request
const request_ = request.get('/');
assert(request_ instanceof request.Request);
should use patched subclass
assert(OriginalRequest);
let constructorCalled;
let sendCalled;
function NewRequest(...args) {
  constructorCalled = true;
  OriginalRequest.apply(this, args);
}
NewRequest.prototype = Object.create(OriginalRequest.prototype);
NewRequest.prototype.send = function () {
  sendCalled = true;
  return this;
};
request.Request = NewRequest;
const request_ = request.get('/').send();
assert(constructorCalled);
assert(sendCalled);
assert(request_ instanceof NewRequest);
assert(request_ instanceof OriginalRequest);
should use patched subclass in agent too
if (!request.agent) return; // Node-only
function NewRequest(...args) {
  OriginalRequest.apply(this, args);
}
NewRequest.prototype = Object.create(OriginalRequest.prototype);
request.Request = NewRequest;
const request_ = request.agent().del('/');
assert(request_ instanceof NewRequest);
assert(request_ instanceof OriginalRequest);

request

persistent agent

should gain a session on POST
agent3.post(`${base}/signin`).then((res) => {
        res.should.have.status(200);
        should.not.exist(res.headers['set-cookie']);
        res.text.should.containEql('dashboard');
      })
should start with empty session (set cookies)
agent1.get(`${base}/dashboard`).end((error, res) => {
  should.exist(error);
  res.should.have.status(401);
  should.exist(res.headers['set-cookie']);
  done();
});
should gain a session (cookies already set)
agent1.post(`${base}/signin`).then((res) => {
        res.should.have.status(200);
        should.not.exist(res.headers['set-cookie']);
        res.text.should.containEql('dashboard');
      })
should persist cookies across requests
agent1.get(`${base}/dashboard`).then((res) => {
        res.should.have.status(200);
      })
should have the cookie set in the end callback
agent4
        .post(`${base}/setcookie`)
        .then(() => agent4.get(`${base}/getcookie`))
        .then((res) => {
          res.should.have.status(200);
          assert.strictEqual(res.text, 'jar');
        })
should not share cookies
agent2.get(`${base}/dashboard`).end((error, res) => {
  should.exist(error);
  res.should.have.status(401);
  done();
});
should not lose cookies between agents
agent1.get(`${base}/dashboard`).then((res) => {
        res.should.have.status(200);
      })
should be able to follow redirects
agent1.get(base).then((res) => {
        res.should.have.status(200);
        res.text.should.containEql('dashboard');
      })
should be able to post redirects
agent1
        .post(`${base}/redirect`)
        .send({ foo: 'bar', baz: 'blaaah' })
        .then((res) => {
          res.should.have.status(200);
          res.text.should.containEql('simple');
          res.redirects.should.eql([`${base}/simple`]);
        })
should be able to limit redirects
agent1
  .get(base)
  .redirects(0)
  .end((error, res) => {
    should.exist(error);
    res.should.have.status(302);
    res.redirects.should.eql([]);
    res.header.location.should.equal('/dashboard');
    done();
  });
should be able to create a new session (clear cookie)
agent1.post(`${base}/signout`).then((res) => {
        res.should.have.status(200);
        should.exist(res.headers['set-cookie']);
      })
should regenerate with an empty session
agent1.get(`${base}/dashboard`).end((error, res) => {
  should.exist(error);
  res.should.have.status(401);
  should.not.exist(res.headers['set-cookie']);
  done();
});

Basic auth

when credentials are present in url

should set Authorization
const new_url = URL.parse(base);
new_url.auth = 'tobi:learnboost';
new_url.pathname = '/basic-auth';
request.get(URL.format(new_url)).end((error, res) => {
  res.status.should.equal(200);
  done();
});

req.auth(user, pass)

should set Authorization
request
  .get(`${base}/basic-auth`)
  .auth('tobi', 'learnboost')
  .end((error, res) => {
    res.status.should.equal(200);
    done();
  });

req.auth(user + ":" + pass)

should set authorization
request
  .get(`${base}/basic-auth/again`)
  .auth('tobi')
  .end((error, res) => {
    res.status.should.eql(200);
    done();
  });

[node] request

with an url

should preserve the encoding of the url
request.get(`${base}/url?a=(b%29`).end((error, res) => {
  assert.equal('/url?a=(b%29', res.text);
  done();
});

with an object

should format the url
request.get(url.parse(`${base}/login`)).then((res) => {
        assert(res.ok);
      })

without a schema

should default to http
request.get(`${base}/login`).then((res) => {
        assert.equal(res.status, 200);
      })

res.toJSON()

should describe the response
request
        .post(`${base}/echo`)
        .send({ foo: 'baz' })
        .then((res) => {
          const object = res.toJSON();
          assert.equal('object', typeof object.header);
          assert.equal('object', typeof object.req);
          assert.equal(200, object.status);
          assert.equal('{"foo":"baz"}', object.text);
        })

res.links

should default to an empty object
request.get(`${base}/login`).then((res) => {
        res.links.should.eql({});
      })
should parse the Link header field
request.get(`${base}/links`).end((error, res) => {
  res.links.next.should.equal(
    'https://api.github.com/repos/visionmedia/mocha/issues?page=2'
  );
  done();
});

req.unset(field)

should remove the header field
request
  .post(`${base}/echo`)
  .unset('User-Agent')
  .end((error, res) => {
    assert.equal(void 0, res.header['user-agent']);
    done();
  });

case-insensitive

should set/get header fields case-insensitively
const r = request.post(`${base}/echo`);
r.set('MiXeD', 'helloes');
assert.strictEqual(r.get('mixed'), 'helloes');
should unset header fields case-insensitively
const r = request.post(`${base}/echo`);
r.set('MiXeD', 'helloes');
r.unset('MIXED');
assert.strictEqual(r.get('mixed'), undefined);

req.write(str)

should write the given data
const request_ = request.post(`${base}/echo`);
request_.set('Content-Type', 'application/json');
assert.equal('boolean', typeof request_.write('{"name"'));
assert.equal('boolean', typeof request_.write(':"tobi"}'));
request_.end((error, res) => {
  res.text.should.equal('{"name":"tobi"}');
  done();
});

req.pipe(stream)

should pipe the response to the given stream
const stream = new EventEmitter();
stream.buf = '';
stream.writable = true;
stream.write = function (chunk) {
  this.buf += chunk;
};
stream.end = function () {
  this.buf.should.equal('{"name":"tobi"}');
  done();
};
request.post(`${base}/echo`).send('{"name":"tobi"}').pipe(stream);

.buffer()

should enable buffering
request
  .get(`${base}/custom`)
  .buffer()
  .end((error, res) => {
    assert.ifError(error);
    assert.equal('custom stuff', res.text);
    assert(res.buffered);
    done();
  });
should take precedence over request.buffer['someMimeType'] = false
const type = 'application/barbaz';
const send = 'some text';
request.buffer[type] = false;
request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .buffer()
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(res.type, type);
    assert.equal(send, res.text);
    assert(res.buffered);
    done();
  });

.buffer(false)

should disable buffering
request
  .post(`${base}/echo`)
  .type('application/x-dog')
  .send('hello this is dog')
  .buffer(false)
  .end((error, res) => {
    assert.ifError(error);
    assert.equal(null, res.text);
    res.body.should.eql({});
    let buf = '';
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      buf += chunk;
    });
    res.on('end', () => {
      buf.should.equal('hello this is dog');
      done();
    });
  });
should take precedence over request.buffer['someMimeType'] = true
const type = 'application/foobar';
const send = 'hello this is a dog';
request.buffer[type] = true;
request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .buffer(false)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(null, res.text);
    assert.equal(res.type, type);
    assert(!res.buffered);
    res.body.should.eql({});
    let buf = '';
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      buf += chunk;
    });
    res.on('end', () => {
      buf.should.equal(send);
      done();
    });
  });

.withCredentials()

should not throw an error when using the client-side "withCredentials" method
request
  .get(`${base}/custom`)
  .withCredentials()
  .end((error, res) => {
    assert.ifError(error);
    done();
  });

.agent()

should return the defaut agent
const request_ = request.post(`${base}/echo`);
request_.agent().should.equal(false);
done();

.agent(undefined)

should set an agent to undefined and ensure it is chainable
const request_ = request.get(`${base}/echo`);
const returnValue = request_.agent(undefined);
returnValue.should.equal(request_);
assert.strictEqual(request_.agent(), undefined);
done();

.agent(new http.Agent())

should set passed agent
const http = require('http');
const request_ = request.get(`${base}/echo`);
const agent = new http.Agent();
const returnValue = request_.agent(agent);
returnValue.should.equal(request_);
request_.agent().should.equal(agent);
done();

with a content type other than application/json or text/*

should still use buffering
return request
  .post(`${base}/echo`)
  .type('application/x-dog')
  .send('hello this is dog')
  .then((res) => {
    assert.equal(null, res.text);
    assert.equal(res.body.toString(), 'hello this is dog');
    res.buffered.should.be.true;
  });

content-length

should be set to the byte length of a non-buffer object
const decoder = new StringDecoder('utf8');
let img = fs.readFileSync(`${__dirname}/fixtures/test.png`);
img = decoder.write(img);
request
  .post(`${base}/echo`)
  .type('application/x-image')
  .send(img)
  .buffer(false)
  .end((error, res) => {
    assert.ifError(error);
    assert(!res.buffered);
    assert.equal(res.header['content-length'], Buffer.byteLength(img));
    done();
  });
should be set to the length of a buffer object
const img = fs.readFileSync(`${__dirname}/fixtures/test.png`);
request
  .post(`${base}/echo`)
  .type('application/x-image')
  .send(img)
  .buffer(true)
  .end((error, res) => {
    assert.ifError(error);
    assert(res.buffered);
    assert.equal(res.header['content-length'], img.length);
    done();
  });

req.buffer['someMimeType']

should respect that agent.buffer(true) takes precedent
const agent = request.agent();
agent.buffer(true);
const type = 'application/somerandomtype';
const send = 'somerandomtext';
request.buffer[type] = false;
agent
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(res.type, type);
    assert.equal(send, res.text);
    assert(res.buffered);
    done();
  });
should respect that agent.buffer(false) takes precedent
const agent = request.agent();
agent.buffer(false);
const type = 'application/barrr';
const send = 'some random text2';
request.buffer[type] = true;
agent
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(null, res.text);
    assert.equal(res.type, type);
    assert(!res.buffered);
    res.body.should.eql({});
    let buf = '';
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      buf += chunk;
    });
    res.on('end', () => {
      buf.should.equal(send);
      done();
    });
  });
should disable buffering for that mimetype when false
const type = 'application/bar';
const send = 'some random text';
request.buffer[type] = false;
request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(null, res.text);
    assert.equal(res.type, type);
    assert(!res.buffered);
    res.body.should.eql({});
    let buf = '';
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      buf += chunk;
    });
    res.on('end', () => {
      buf.should.equal(send);
      done();
    });
  });
should enable buffering for that mimetype when true
const type = 'application/baz';
const send = 'woooo';
request.buffer[type] = true;
request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .end((error, res) => {
    delete request.buffer[type];
    assert.ifError(error);
    assert.equal(res.type, type);
    assert.equal(send, res.text);
    assert(res.buffered);
    done();
  });
should fallback to default handling for that mimetype when undefined
const type = 'application/bazzz';
const send = 'woooooo';
return request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .then((res) => {
    assert.equal(res.type, type);
    assert.equal(send, res.body.toString());
    assert(res.buffered);
  });

exports

should expose .protocols
Object.keys(request.protocols).should.eql(['http:', 'https:', 'http2:']);
should expose .serialize
Object.keys(request.serialize).should.eql([
  'application/x-www-form-urlencoded',
  'application/json'
]);
should expose .parse
Object.keys(request.parse).should.eql([
  'application/x-www-form-urlencoded',
  'application/json',
  'text',
  'application/json-seq',
  'application/octet-stream',
  'application/pdf',
  'image'
]);
should export .buffer
Object.keys(request.buffer).should.eql([]);

flags

with 4xx response

should set res.error and res.clientError
request.get(`${base}/notfound`).end((error, res) => {
  assert(error);
  assert(!res.ok, 'response should not be ok');
  assert(res.error, 'response should be an error');
  assert(res.clientError, 'response should be a client error');
  assert(!res.serverError, 'response should not be a server error');
  done();
});

with 5xx response

should set res.error and res.serverError
request.get(`${base}/error`).end((error, res) => {
  assert(error);
  assert(!res.ok, 'response should not be ok');
  assert(!res.notFound, 'response should not be notFound');
  assert(res.error, 'response should be an error');
  assert(!res.clientError, 'response should not be a client error');
  assert(res.serverError, 'response should be a server error');
  done();
});

with 404 Not Found

should res.notFound
request.get(`${base}/notfound`).end((error, res) => {
  assert(error);
  assert(res.notFound, 'response should be .notFound');
  done();
});

with 400 Bad Request

should set req.badRequest
request.get(`${base}/bad-request`).end((error, res) => {
  assert(error);
  assert(res.badRequest, 'response should be .badRequest');
  done();
});

with 401 Bad Request

should set res.unauthorized
request.get(`${base}/unauthorized`).end((error, res) => {
  assert(error);
  assert(res.unauthorized, 'response should be .unauthorized');
  done();
});

with 406 Not Acceptable

should set res.notAcceptable
request.get(`${base}/not-acceptable`).end((error, res) => {
  assert(error);
  assert(res.notAcceptable, 'response should be .notAcceptable');
  done();
});

with 204 No Content

should set res.noContent
request.get(`${base}/no-content`).end((error, res) => {
  assert(!error);
  assert(res.noContent, 'response should be .noContent');
  done();
});

with 201 Created

should set res.created
request.post(`${base}/created`).end((error, res) => {
  assert(!error);
  assert(res.created, 'response should be .created');
  done();
});

with 422 Unprocessable Entity

should set res.unprocessableEntity
request.post(`${base}/unprocessable-entity`).end((error, res) => {
  assert(error);
  assert(
    res.unprocessableEntity,
    'response should be .unprocessableEntity'
  );
  done();
});

Merging objects

Don't mix Buffer and JSON
assert.throws(() => {
  request
    .post('/echo')
    .send(Buffer.from('some buffer'))
    .send({ allowed: false });
});

req.send(String)

should default to "form"
request
  .post(`${base}/echo`)
  .send('user[name]=tj')
  .send('user[email]=tj@vision-media.ca')
  .end((error, res) => {
    res.header['content-type'].should.equal(
      'application/x-www-form-urlencoded'
    );
    res.body.should.eql({
      user: { name: 'tj', email: 'tj@vision-media.ca' }
    });
    done();
  });

res.body

application/x-www-form-urlencoded

should parse the body
request.get(`${base}/form-data`).end((error, res) => {
  res.text.should.equal('pet[name]=manny');
  res.body.should.eql({ pet: { name: 'manny' } });
  done();
});

request.get().http2()

should preserve the encoding of the url
request
  .get(`${base}/url?a=(b%29`)
  .http2()
  .end((error, res) => {
    assert.equal('/url?a=(b%29', res.text);
    done();
  });
should format the url
request
      .get(url.parse(`${base}/login`))
      .http2()
      .then((res) => {
        assert(res.ok);
      })

https

certificate authority

request

should give a good response
request
  .get(testEndpoint)
  .ca(ca)
  .end((error, res) => {
    assert.ifError(error);
    assert(res.ok);
    assert.strictEqual('Safe and secure!', res.text);
    done();
  });
should reject unauthorized response
return request
  .get(testEndpoint)
  .trustLocalhost(false)
  .then(
    () => {
      throw new Error('Allows MITM');
    },
    () => {}
  );
should not reject unauthorized response
return request
  .get(testEndpoint)
  .disableTLSCerts()
  .then(({ status }) => {
    assert.strictEqual(status, 200);
  });
should trust localhost unauthorized response
return request.get(testEndpoint).trustLocalhost(true);
should trust overriden localhost unauthorized response
return request
  .get(`https://example.com:${server.address().port}`)
  .connect('127.0.0.1')
  .trustLocalhost();

.agent

should be able to make multiple requests without redefining the certificate
const agent = request.agent({ ca });
agent.get(testEndpoint).end((error, res) => {
  assert.ifError(error);
  assert(res.ok);
  assert.strictEqual('Safe and secure!', res.text);
  agent.get(url.parse(testEndpoint)).end((error, res) => {
    assert.ifError(error);
    assert(res.ok);
    assert.strictEqual('Safe and secure!', res.text);
    done();
  });
});

client certificates

request

.agent

res.body

image/png

should parse the body
request.get(`${base}/image`).end((error, res) => {
  res.type.should.equal('image/png');
  Buffer.isBuffer(res.body).should.be.true();
  (res.body.length - img.length).should.equal(0);
  done();
});

application/octet-stream

should parse the body
request
  .get(`${base}/image-as-octets`)
  .buffer(true) // that's tech debt :(
  .end((error, res) => {
    res.type.should.equal('application/octet-stream');
    Buffer.isBuffer(res.body).should.be.true();
    (res.body.length - img.length).should.equal(0);
    done();
  });

application/octet-stream

should parse the body (using responseType)
request
  .get(`${base}/image-as-octets`)
  .responseType('blob')
  .end((error, res) => {
    res.type.should.equal('application/octet-stream');
    Buffer.isBuffer(res.body).should.be.true();
    (res.body.length - img.length).should.equal(0);
    done();
  });

zlib

should deflate the content
request.get(base).end((error, res) => {
  res.should.have.status(200);
  res.text.should.equal(subject);
  res.headers['content-length'].should.be.below(subject.length);
  done();
});
should protect from zip bombs
request
  .get(base)
  .buffer(true)
  .maxResponseSize(1)
  .end((error, res) => {
    try {
      assert.equal('Maximum response size reached', error && error.message);
      done();
    } catch (err) {
      done(err);
    }
  });
should ignore trailing junk
request.get(`${base}/junk`).end((error, res) => {
  res.should.have.status(200);
  res.text.should.equal(subject);
  done();
});
should ignore missing data
request.get(`${base}/chopped`).end((error, res) => {
  assert.equal(undefined, error);
  res.should.have.status(200);
  res.text.should.startWith(subject);
  done();
});
should handle corrupted responses
request.get(`${base}/corrupt`).end((error, res) => {
  assert(error, 'missing error');
  assert(!res, 'response should not be defined');
  done();
});
should handle no content with gzip header
request.get(`${base}/nocontent`).end((error, res) => {
  assert.ifError(error);
  assert(res);
  res.should.have.status(204);
  res.text.should.equal('');
  res.headers.should.not.have.property('content-length');
  done();
});

without encoding set

should buffer if asked
return request
  .get(`${base}/binary`)
  .buffer(true)
  .then((res) => {
    res.should.have.status(200);
    assert(res.headers['content-length']);
    assert(res.body.byteLength);
    assert.equal(subject, res.body.toString());
  });
should emit buffers
request.get(`${base}/binary`).end((error, res) => {
  res.should.have.status(200);
  res.headers['content-length'].should.be.below(subject.length);
  res.on('data', (chunk) => {
    chunk.should.have.length(subject.length);
  });
  res.on('end', done);
});

req.lookup()

should set a custom lookup
const r = request.get(`${base}/ok`).lookup(myLookup);
assert(r.lookup() === myLookup);
r.then((res) => {
  res.text.should.equal('ok');
  done();
});

Multipart

#field(name, value)

should set a multipart field value
const request_ = request.post(`${base}/echo`);
request_.field('user[name]', 'tobi');
request_.field('user[age]', '2');
request_.field('user[species]', 'ferret');
return request_.then((res) => {
  res.body['user[name]'].should.equal('tobi');
  res.body['user[age]'].should.equal('2');
  res.body['user[species]'].should.equal('ferret');
});
should work with file attachments
const request_ = request.post(`${base}/echo`);
request_.field('name', 'Tobi');
request_.attach('document', 'test/node/fixtures/user.html');
request_.field('species', 'ferret');
return request_.then((res) => {
  res.body.name.should.equal('Tobi');
  res.body.species.should.equal('ferret');
  const html = res.files.document;
  html.originalFilename.should.equal('user.html');
  html.mimetype.should.equal('text/html');
  read(html.filepath).should.equal('<h1>name</h1>');
});

#attach(name, path)

should attach a file
const request_ = request.post(`${base}/echo`);
request_.attach('one', 'test/node/fixtures/user.html');
request_.attach('two', 'test/node/fixtures/user.json');
request_.attach('three', 'test/node/fixtures/user.txt');
return request_.then((res) => {
  const html = res.files.one;
  const json = res.files.two;
  const text = res.files.three;
  html.originalFilename.should.equal('user.html');
  html.mimetype.should.equal('text/html');
  read(html.filepath).should.equal('<h1>name</h1>');
  json.originalFilename.should.equal('user.json');
  json.mimetype.should.equal('application/json');
  read(json.filepath).should.equal('{"name":"tobi"}');
  text.originalFilename.should.equal('user.txt');
  text.mimetype.should.equal('text/plain');
  read(text.filepath).should.equal('Tobi');
});

when a file does not exist

should fail the request with an error
const request_ = request.post(`${base}/echo`);
request_.attach('name', 'foo');
// request_.attach('name2', 'bar');
// request_.attach('name3', 'baz');
request_.end((error, res) => {
  assert.ok(Boolean(error), 'Request should have failed.');
  error.code.should.equal('ENOENT');
  error.message.should.containEql('ENOENT');
  if (IS_WINDOWS) {
    error.path.toLowerCase().should.equal(
      getFullPath('foo').toLowerCase()
    );
  } else {
    error.path.should.equal(getFullPath('foo'));
  }
  done();
});
promise should fail
return request
  .post(`${base}/echo`)
  .field({ a: 1, b: 2 })
  .attach('c', 'does-not-exist.txt')
  .then(
    (res) => assert.fail('It should not allow this'),
    (err) => {
      err.code.should.equal('ENOENT');
      if (IS_WINDOWS) {
        err.path.toLowerCase().should.equal(
          getFullPath('does-not-exist.txt').toLowerCase()
        );
      } else {
        err.path.should.equal(getFullPath('does-not-exist.txt'));
      }
    }
  );
should report ENOENT via the callback
request
  .post(`${base}/echo`)
  .attach('name', 'file-does-not-exist')
  .end((error, res) => {
    assert.ok(Boolean(error), 'Request should have failed');
    error.code.should.equal('ENOENT');
    done();
  });
should report ENOENT via Promise
return request
  .post(`${base}/echo`)
  .attach('name', 'file-does-not-exist')
  .then(
    (res) => assert.fail('Request should have failed'),
    (err) => err.code.should.equal('ENOENT')
  );

#attach(name, path, filename)

should use the custom filename
request
        .post(`${base}/echo`)
        .attach('document', 'test/node/fixtures/user.html', 'doc.html')
        .then((res) => {
          const html = res.files.document;
          html.originalFilename.should.equal('doc.html');
          html.mimetype.should.equal('text/html');
          read(html.filepath).should.equal('<h1>name</h1>');
        })
should fire progress event
let loaded = 0;
let total = 0;
let uploadEventWasFired = false;
request
  .post(`${base}/echo`)
  .attach('document', 'test/node/fixtures/user.html')
  .on('progress', (event) => {
    total = event.total;
    loaded = event.loaded;
    if (event.direction === 'upload') {
      uploadEventWasFired = true;
    }
  })
  .end((error, res) => {
    if (error) return done(error);
    const html = res.files.document;
    html.originalFilename.should.equal('user.html');
    html.mimetype.should.equal('text/html');
    read(html.filepath).should.equal('<h1>name</h1>');
    total.should.equal(223);
    loaded.should.equal(223);
    uploadEventWasFired.should.equal(true);
    done();
  });
filesystem errors should be caught
request
  .post(`${base}/echo`)
  .attach('filedata', 'test/node/fixtures/non-existent-file.ext')
  .end((error, res) => {
    assert.ok(Boolean(error), 'Request should have failed.');
    error.code.should.equal('ENOENT');
    if (IS_WINDOWS) {
      error.path.toLowerCase().should.equal(
        getFullPath('test/node/fixtures/non-existent-file.ext').toLowerCase()
      );
    } else {
      error.path.should.equal(
        getFullPath('test/node/fixtures/non-existent-file.ext')
      );
    }
    done();
  });

#field(name, val)

should set a multipart field value
request
  .post(`${base}/echo`)
  .field('first-name', 'foo')
  .field('last-name', 'bar')
  .end((error, res) => {
    if (error) done(error);
    res.should.be.ok();
    res.body['first-name'].should.equal('foo');
    res.body['last-name'].should.equal('bar');
    done();
  });

#field(object)

should set multiple multipart fields
request
  .post(`${base}/echo`)
  .field({ 'first-name': 'foo', 'last-name': 'bar' })
  .end((error, res) => {
    if (error) done(error);
    res.should.be.ok();
    res.body['first-name'].should.equal('foo');
    res.body['last-name'].should.equal('bar');
    done();
  });

with network error

should error
request.get(`http://localhost:${this.port}/`).end((error, res) => {
  assert(error, 'expected an error');
  done();
});

request

not modified

should start with 200
request.get(`${base}/if-mod`).end((error, res) => {
  res.should.have.status(200);
  res.text.should.match(/^\d+$/);
  ts = Number(res.text);
  done();
});
should then be 304
request
  .get(`${base}/if-mod`)
  .set('If-Modified-Since', new Date(ts).toUTCString())
  .end((error, res) => {
    res.should.have.status(304);
    // res.text.should.be.empty
    done();
  });

req.parse(fn)

should take precedence over default parsers
request
  .get(`${base}/manny`)
  .parse(request.parse['application/json'])
  .end((error, res) => {
    assert(res.ok);
    assert.equal('{"name":"manny"}', res.text);
    assert.equal('manny', res.body.name);
    done();
  });
should be the only parser
request
      .get(`${base}/image`)
      .buffer(false)
      .parse((res, fn) => {
        res.on('data', () => {});
      })
      .then((res) => {
        assert(res.ok);
        assert.strictEqual(res.text, undefined);
        res.body.should.eql({});
      })
should emit error if parser throws
request
  .get(`${base}/manny`)
  .parse(() => {
    throw new Error('I am broken');
  })
  .on('error', (error) => {
    error.message.should.equal('I am broken');
    done();
  })
  .end();
should emit error if parser returns an error
request
  .get(`${base}/manny`)
  .parse((res, fn) => {
    fn(new Error('I am broken'));
  })
  .on('error', (error) => {
    error.message.should.equal('I am broken');
    done();
  })
  .end();

pipe on redirect

should follow Location
const stream = fs.createWriteStream(destinationPath);
const redirects = [];
const request_ = request
  .get(base)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .connect({
    inapplicable: 'should be ignored'
  });
stream.on('finish', () => {
  redirects.should.eql(['/movies', '/movies/all', '/movies/all/0']);
  fs.readFileSync(destinationPath, 'utf8').should.eql('first movie page');
  done();
});
request_.pipe(stream);

request pipe

should act as a writable stream
const request_ = request.post(base);
const stream = fs.createReadStream('test/node/fixtures/user.json');
request_.type('json');
request_.on('response', (res) => {
  res.body.should.eql({ name: 'tobi' });
  done();
});
stream.pipe(request_);
end() stops piping
const stream = fs.createWriteStream(destinationPath);
request.get(base).end((error, res) => {
  try {
    res.pipe(stream);
    return done(new Error('Did not prevent nonsense pipe'));
  } catch {
    /* expected error */
  }
  done();
});
should act as a readable stream
const stream = fs.createWriteStream(destinationPath);
let responseCalled = false;
const request_ = request.get(base);
request_.type('json');
request_.on('response', (res) => {
  res.status.should.eql(200);
  responseCalled = true;
});
stream.on('finish', () => {
  JSON.parse(fs.readFileSync(destinationPath)).should.eql({
    name: 'tobi'
  });
  responseCalled.should.be.true();
  done();
});
request_.pipe(stream);
should follow redirects
const stream = fs.createWriteStream(destinationPath);
let responseCalled = false;
const request_ = request.get(base + '/redirect');
request_.type('json');
request_.on('response', (res) => {
  res.status.should.eql(200);
  responseCalled = true;
});
stream.on('finish', () => {
  JSON.parse(fs.readFileSync(destinationPath)).should.eql({
    name: 'tobi'
  });
  responseCalled.should.be.true();
  done();
});
request_.pipe(stream);
should not throw on bad redirects
const stream = fs.createWriteStream(destinationPath);
let responseCalled = false;
let errorCalled = false;
const request_ = request.get(base + '/badRedirectNoLocation');
request_.type('json');
request_.on('response', (res) => {
  responseCalled = true;
});
request_.on('error', (error) => {
  error.message.should.eql('No location header for redirect');
  errorCalled = true;
  stream.end();
});
stream.on('finish', () => {
  responseCalled.should.be.false();
  errorCalled.should.be.true();
  done();
});
request_.pipe(stream);

req.query(String)

should support passing in a string
request
  .del(base)
  .query('name=t%F6bi')
  .end((error, res) => {
    res.body.should.eql({ name: 't%F6bi' });
    done();
  });
should work with url query-string and string for query
request
  .del(`${base}/?name=tobi`)
  .query('age=2%20')
  .end((error, res) => {
    res.body.should.eql({ name: 'tobi', age: '2 ' });
    done();
  });
should support compound elements in a string
request
  .del(base)
  .query('name=t%F6bi&age=2')
  .end((error, res) => {
    res.body.should.eql({ name: 't%F6bi', age: '2' });
    done();
  });
should work when called multiple times with a string
request
  .del(base)
  .query('name=t%F6bi')
  .query('age=2%F6')
  .end((error, res) => {
    res.body.should.eql({ name: 't%F6bi', age: '2%F6' });
    done();
  });
should work with normal `query` object and query string
request
  .del(base)
  .query('name=t%F6bi')
  .query({ age: '2' })
  .end((error, res) => {
    res.body.should.eql({ name: 't%F6bi', age: '2' });
    done();
  });
should not encode raw backticks, but leave encoded ones as is
return Promise.all([
  request
    .get(`${base}/raw-query`)
    .query('name=`t%60bi`&age`=2')
    .then((res) => {
      res.text.should.eql('name=`t%60bi`&age`=2');
    }),
  request.get(base + '/raw-query?`age%60`=2%60`').then((res) => {
    res.text.should.eql('`age%60`=2%60`');
  }),
  request
    .get(`${base}/raw-query`)
    .query('name=`t%60bi`')
    .query('age`=2')
    .then((res) => {
      res.text.should.eql('name=`t%60bi`&age`=2');
    })
]);

req.query(Object)

should construct the query-string
request
  .del(base)
  .query({ name: 'tobi' })
  .query({ order: 'asc' })
  .query({ limit: ['1', '2'] })
  .end((error, res) => {
    res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
    done();
  });
should encode raw backticks
request
  .get(`${base}/raw-query`)
  .query({ name: '`tobi`' })
  .query({ 'orde%60r': null })
  .query({ '`limit`': ['%602`'] })
  .end((error, res) => {
    res.text.should.eql('name=%60tobi%60&orde%2560r&%60limit%60=%25602%60');
    done();
  });
should not error on dates
const date = new Date(0);
request
  .del(base)
  .query({ at: date })
  .end((error, res) => {
    assert.equal(date.toISOString(), res.body.at);
    done();
  });
should work after setting header fields
request
  .del(base)
  .set('Foo', 'bar')
  .set('Bar', 'baz')
  .query({ name: 'tobi' })
  .query({ order: 'asc' })
  .query({ limit: ['1', '2'] })
  .end((error, res) => {
    res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
    done();
  });
should append to the original query-string
request
  .del(`${base}/?name=tobi`)
  .query({ order: 'asc' })
  .end((error, res) => {
    res.body.should.eql({ name: 'tobi', order: 'asc' });
    done();
  });
should retain the original query-string
request.del(`${base}/?name=tobi`).end((error, res) => {
  res.body.should.eql({ name: 'tobi' });
  done();
});
should keep only keys with null querystring values
request
  .del(`${base}/url`)
  .query({ nil: null })
  .end((error, res) => {
    res.text.should.equal('/url?nil');
    done();
  });
query-string should be sent on pipe
this.timeout(15_000);
const request_ = request.put(`${base}/?name=tobi`);
const stream = fs.createReadStream('test/node/fixtures/user.json');
request_.on('response', (res) => {
  res.body.should.eql({ name: 'tobi' });
  done();
});
request_.on('error', (err) => {
  done(err);
});
stream.on('error', function (err) {
  done(err);
});
stream.pipe(request_);

request.get

on 301 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-301`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 302 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-302`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 303 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-303`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 307 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-307`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 308 redirect

should follow Location with a GET request
const request_ = request.get(`${base}/test-308`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

request.post

on 301 redirect

should follow Location with a GET request
const request_ = request.post(`${base}/test-301`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 302 redirect

should follow Location with a GET request
const request_ = request.post(`${base}/test-302`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 303 redirect

should follow Location with a GET request
const request_ = request.post(`${base}/test-303`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('GET');
  done();
});

on 307 redirect

should follow Location with a POST request
const request_ = request.post(`${base}/test-307`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('POST');
  done();
});

on 308 redirect

should follow Location with a POST request
const request_ = request.post(`${base}/test-308`).redirects(1);
request_.end((error, res) => {
  const headers = request_.req.getHeaders
    ? request_.req.getHeaders()
    : request_.req._headers;
  headers.host.should.eql(`localhost:${server2.address().port}`);
  res.status.should.eql(200);
  res.text.should.eql('POST');
  done();
});

request

on redirect

should merge cookies if agent is used
request
  .agent()
  .get(`${base}/cookie-redirect`)
  .set('Cookie', 'orig=1; replaced=not')
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(/orig=1/.test(res.text), 'orig=1/.test');
      assert(/replaced=yes/.test(res.text), 'replaced=yes/.test');
      assert(/from-redir=1/.test(res.text), 'from-redir=1');
      done();
    } catch (err) {
      done(err);
    }
  });
should not merge cookies if agent is not used
request
  .get(`${base}/cookie-redirect`)
  .set('Cookie', 'orig=1; replaced=not')
  .end((error, res) => {
    try {
      assert.ifError(error);
      assert(/orig=1/.test(res.text), '/orig=1');
      assert(/replaced=not/.test(res.text), '/replaced=not');
      assert(!/replaced=yes/.test(res.text), '!/replaced=yes');
      assert(!/from-redir/.test(res.text), '!/from-redir');
      done();
    } catch (err) {
      done(err);
    }
  });
should have previously set cookie for subsquent requests when agent is used
const agent = request.agent();
agent.get(`${base}/set-cookie`).end((error) => {
  assert.ifError(error);
  agent
    .get(`${base}/show-cookies`)
    .set({ Cookie: 'orig=1' })
    .end((error, res) => {
      try {
        assert.ifError(error);
        assert(/orig=1/.test(res.text), 'orig=1/.test');
        assert(/persist=123/.test(res.text), 'persist=123');
        done();
      } catch (err) {
        done(err);
      }
    });
});
should follow Location
const redirects = [];
request
  .get(base)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      const array = ['/movies', '/movies/all', '/movies/all/0'];
      redirects.should.eql(array);
      res.text.should.equal('first movie page');
      done();
    } catch (err) {
      done(err);
    }
  });
should follow Location with IP override
const redirects = [];
const url = URL.parse(base);
return request
  .get(`http://redir.example.com:${url.port || '80'}${url.pathname}`)
  .connect({
    '*': url.hostname
  })
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    const array = ['/movies', '/movies/all', '/movies/all/0'];
    redirects.should.eql(array);
    res.text.should.equal('first movie page');
  });
should follow Location with IP:port override
const redirects = [];
const url = URL.parse(base);
return request
  .get(`http://redir.example.com:9999${url.pathname}`)
  .connect({
    '*': { host: url.hostname, port: url.port || 80 }
  })
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    const array = ['/movies', '/movies/all', '/movies/all/0'];
    redirects.should.eql(array);
    res.text.should.equal('first movie page');
  });
should not follow on HEAD by default
const redirects = [];
return request
  .head(base)
  .ok(() => true)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    redirects.should.eql([]);
    res.status.should.equal(302);
  });
should follow on HEAD when redirects are set
const redirects = [];
request
  .head(base)
  .redirects(10)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      const array = [];
      array.push('/movies', '/movies/all', '/movies/all/0');
      redirects.should.eql(array);
      assert(!res.text);
      done();
    } catch (err) {
      done(err);
    }
  });
should remove Content-* fields
request
  .post(`${base}/header`)
  .type('txt')
  .set('X-Foo', 'bar')
  .set('X-Bar', 'baz')
  .send('hey')
  .end((error, res) => {
    try {
      assert(res.body);
      res.body.should.have.property('x-foo', 'bar');
      res.body.should.have.property('x-bar', 'baz');
      res.body.should.not.have.property('content-type');
      res.body.should.not.have.property('content-length');
      res.body.should.not.have.property('transfer-encoding');
      done();
    } catch (err) {
      done(err);
    }
  });
should retain cookies
request
  .get(`${base}/header`)
  .set('Cookie', 'foo=bar;')
  .end((error, res) => {
    try {
      assert(res.body);
      res.body.should.have.property('cookie', 'foo=bar;');
      done();
    } catch (err) {
      done(err);
    }
  });
should not resend query parameters
const redirects = [];
const query = [];
request
  .get(`${base}/?foo=bar`)
  .on('redirect', (res) => {
    query.push(res.headers.query);
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      const array = [];
      array.push('/movies', '/movies/all', '/movies/all/0');
      redirects.should.eql(array);
      res.text.should.equal('first movie page');
      query.should.eql(['{"foo":"bar"}', '{}', '{}']);
      res.headers.query.should.eql('{}');
      done();
    } catch (err) {
      done(err);
    }
  });
should handle no location header
request.get(`${base}/bad-redirect`).end((error, res) => {
  try {
    error.message.should.equal('No location header for redirect');
    done();
  } catch (err) {
    done(err);
  }
});

when relative

should redirect to a sibling path
const redirects = [];
request
  .get(`${base}/relative`)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      redirects.should.eql(['tobi']);
      res.text.should.equal('tobi');
      done();
    } catch (err) {
      done(err);
    }
  });
should redirect to a parent path
const redirects = [];
request
  .get(`${base}/relative/sub`)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      redirects.should.eql(['../tobi']);
      res.text.should.equal('tobi');
      done();
    } catch (err) {
      done(err);
    }
  });

req.redirects(n)

should alter the default number of redirects to follow
const redirects = [];
request
  .get(base)
  .redirects(2)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .end((error, res) => {
    try {
      const array = [];
      assert(res.redirect, 'res.redirect');
      array.push('/movies', '/movies/all');
      redirects.should.eql(array);
      res.text.should.match(/Moved Temporarily|Found/);
      done();
    } catch (err) {
      done(err);
    }
  });

on POST

should redirect as GET
const redirects = [];
return request
  .post(`${base}/movie`)
  .send({ name: 'Tobi' })
  .redirects(2)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    redirects.should.eql(['/movies/all/0']);
    res.text.should.equal('first movie page');
  });
using multipart/form-data should redirect as GET
const redirects = [];
request
  .post(`${base}/movie`)
  .type('form')
  .field('name', 'Tobi')
  .redirects(2)
  .on('redirect', (res) => {
    redirects.push(res.headers.location);
  })
  .then((res) => {
    redirects.should.eql(['/movies/all/0']);
    res.text.should.equal('first movie page');
  });

response

should act as a readable stream
const request_ = request.get(base).buffer(false);
request_.end((error, res) => {
  if (error) return done(error);
  let trackEndEvent = 0;
  let trackCloseEvent = 0;
  res.on('end', () => {
    trackEndEvent++;
    trackEndEvent.should.equal(1);
    if (!process.env.HTTP2_TEST) {
      trackCloseEvent.should.equal(0); // close should not have been called
    }
    done();
  });
  res.on('close', () => {
    trackCloseEvent++;
  });
  setTimeout(() => {
    (() => {
      res.pause();
    }).should.not.throw();
    (() => {
      res.resume();
    }).should.not.throw();
    (() => {
      res.destroy();
    }).should.not.throw();
  }, 50);
});

req.serialize(fn)

should take precedence over default parsers
request
  .post(`${base}/echo`)
  .send({ foo: 123 })
  .serialize(() => '{"bar":456}')
  .end((error, res) => {
    assert.ifError(error);
    assert.equal('{"bar":456}', res.text);
    assert.equal(456, res.body.bar);
    done();
  });

res.toError()

should return an Error
request.get(base).end((err, res) => {
  const error = res.toError();
  assert.equal(error.status, 400);
  assert.equal(error.method, 'GET');
  assert.equal(error.path, '/');
  assert.equal(error.message, 'cannot GET / (400)');
  assert.equal(error.text, 'invalid json');
  done();
});

[unix-sockets] http

request

path: / (root)
request.get(`${base}/`).end((error, res) => {
  assert(res.ok);
  assert.strictEqual('root ok!', res.text);
  done();
});
path: /request/path
request.get(`${base}/request/path`).end((error, res) => {
  assert(res.ok);
  assert.strictEqual('request path ok!', res.text);
  done();
});

[unix-sockets] https

request

path: / (root)
request
  .get(`${base}/`)
  .ca(cacert)
  .end((error, res) => {
    assert.ifError(error);
    assert(res.ok);
    assert.strictEqual('root ok!', res.text);
    done();
  });
path: /request/path
request
  .get(`${base}/request/path`)
  .ca(cacert)
  .end((error, res) => {
    assert.ifError(error);
    assert(res.ok);
    assert.strictEqual('request path ok!', res.text);
    done();
  });

req.get()

should not set a default user-agent
request.get(`${base}/ua`).then((res) => {
      assert(res.headers);
      assert(!res.headers['user-agent']);
    })

utils.type(str)

should return the mime type
utils
  .type('application/json; charset=utf-8')
  .should.equal('application/json');
utils.type('application/json').should.equal('application/json');

utils.params(str)

should return the field parameters
const object = utils.params('application/json; charset=utf-8; foo  = bar');
object.charset.should.equal('utf-8');
object.foo.should.equal('bar');
utils.params('application/json').should.eql({});

utils.parseLinks(str)

should parse links
const string_ =
  '<https://api.github.com/repos/visionmedia/mocha/issues?page=2>; rel="next", <https://api.github.com/repos/visionmedia/mocha/issues?page=5>; rel="last"';
const returnValue = utils.parseLinks(string_);
returnValue.next.should.equal(
  'https://api.github.com/repos/visionmedia/mocha/issues?page=2'
);
returnValue.last.should.equal(
  'https://api.github.com/repos/visionmedia/mocha/issues?page=5'
);
-------------------|---------|----------|---------|---------|--------------------------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -------------------|---------|----------|---------|---------|--------------------------------------- All files | 93.42 | 83.3 | 89.67 | 93.92 | src | 92.5 | 83.83 | 91.83 | 93.84 | agent-base.js | 100 | 100 | 100 | 100 | request-base.js | 91.01 | 83.9 | 94.28 | 93.06 | ...21,262,316,501,525-533,579,757,768 response-base.js | 100 | 100 | 75 | 100 | utils.js | 92.85 | 71.42 | 85.71 | 91.66 | 94-98 src/node | 93.61 | 83.12 | 87.36 | 93.75 | agent.js | 89.79 | 66.66 | 100 | 88.63 | 39,43,47,51,101 http2wrapper.js | 96 | 82.6 | 89.47 | 96.26 | 14,83,185-186 index.js | 93.36 | 83.63 | 89.47 | 93.66 | ...,977,1182-1186,1220-1221,1275,1301 response.js | 90 | 83.33 | 55.55 | 89.79 | 78,86,94,120-121 unzip.js | 100 | 92.85 | 100 | 100 | 47 src/node/parsers | 97.61 | 75 | 100 | 97.61 | image.js | 100 | 100 | 100 | 100 | index.js | 100 | 100 | 100 | 100 | json.js | 100 | 75 | 100 | 100 | 15 text.js | 100 | 100 | 100 | 100 | urlencoded.js | 90 | 100 | 100 | 90 | 17 -------------------|---------|----------|---------|---------|---------------------------------------
Fork me on GitHub superagent-8.0.5/docs/zh_CN/000077500000000000000000000000001434246777100156515ustar00rootroot00000000000000superagent-8.0.5/docs/zh_CN/index.html000066400000000000000000001157301434246777100176550ustar00rootroot00000000000000 SuperAgent — elegant API for AJAX in Node and browsers

SuperAgent

SuperAgent是轻量级的渐进式ajax API,具有灵活性、可读性和较低的学习曲线。 它也适用于Node.js!

 request
   .post('/api/pet')
   .send({ name: 'Manny', species: 'cat' })
   .set('X-API-Key', 'foobar')
   .set('Accept', 'application/json')
   .then(res => {
      alert('yay got ' + JSON.stringify(res.body));
   });

测试文档

English

下面的测试文档是用Mocha的"文档"报告器生成的,并直接反映了测试套件。 这提供了额外的文档来源。

基本请求

可以通过调用 request 对象上的适当方法来发起请求,然后调用 .then() ( 或 .end()await )发送请求。例如一个简单的 GET 请求:

 request
   .get('/search')
   .then(res => {
      // res.body, res.headers, res.status
   })
   .catch(err => {
      // err.message, err.response
   });

HTTP 方法也可以作为字符串传递:
译者注:大小写皆可。

request('GET', '/search').then(success, failure);

旧式回调也受支持,但不推荐使用。您可以调用 .end() 代替 .then()

request('GET', '/search').end(function(err, res){
  if (res.ok) {}
});

可以使用绝对 URL。在 Web 浏览器中,绝对 URL 仅在服务器实现 CORS 时才有效。

 request
   .get('https://example.com/search')
   .then(res => {

   });

Node 客户端支持向 Unix 域套接字 发出请求:

// pattern: https?+unix://SOCKET_PATH/REQUEST_PATH
//在套接字路径中将 `%2F` 用作 `/`
try {
  const res = await request
    .get('http+unix://%2Fabsolute%2Fpath%2Fto%2Funix.sock/search');
  // res.body, res.headers, res.status
} catch(err) {
  // err.message, err.response
}

DELETE__、__HEAD__、__PATCH__、__POSTPUT 请求也可以使用,只需更改方法名称:

request
  .head('/favicon.ico')
  .then(res => {

  });

DELETE 也可以用 .del() 调用以与旧版 IE 兼容,其中 delete 是保留字。

HTTP 方法默认为 __GET__,因此如果您愿意,以下代码是有效的:

 request('/search', (err, res) => {

 });

使用 HTTP/2

要使用 HTTP/2 协议(没有 HTTP/1.x 后备),请使用 .http2() 方法。

    const request = require('superagent');
    const res = await request
      .get('https://example.com/h2')
      .http2();

设置请求头字段

设置请求头字段很简单,调用 .set() 时传入字段名称和值:

 request
   .get('/search')
   .set('API-Key', 'foobar')
   .set('Accept', 'application/json')
   .then(callback);

您还可以在一次调用中传入一个对象来设置多个字段:

 request
   .get('/search')
   .set({ 'API-Key': 'foobar', Accept: 'application/json' })
   .then(callback);

GET 请求

.query() 方法接受对象,当与 GET 方法一起使用时将形成一个查询字符串。以下将产生路径 /search?query=Manny&range=1..5&order=desc。 译者注:.query() 方法的参数不需要提前进行url编码。

 request
   .get('/search')
   .query({ query: 'Manny' })
   .query({ range: '1..5' })
   .query({ order: 'desc' })
   .then(res => {

   });

或传入单个对象:

request
  .get('/search')
  .query({ query: 'Manny', range: '1..5', order: 'desc' })
  .then(res => {

  });

.query() 方法也可以接受字符串。

  request
    .get('/querystring')
    .query('search=Manny&range=1..5')
    .then(res => {

    });

或者一个个加入:

  request
    .get('/querystring')
    .query('search=Manny')
    .query('range=1..5')
    .then(res => {

    });

HEAD 请求

您还可以对 HEAD 请求使用 .query() 方法。以下将生成路径 /users?email=joe@smith.com

  request
    .head('/users')
    .query({ email: 'joe@smith.com' })
    .then(res => {

    });

POST / PUT 请求

一个典型的 JSON POST 请求可能如下所示,我们适当地设置 Content-Type 请求头字段,并"写入"一些数据,在本例中只是一个 JSON 字符串。

  request.post('/user')
    .set('Content-Type', 'application/json')
    .send('{"name":"tj","pet":"tobi"}')
    .then(callback)
    .catch(errorCallback)

由于 JSON 无疑是最常见的,所以它是 默认 的!下面的例子与前面的例子是等价的。

  request.post('/user')
    .send({ name: 'tj', pet: 'tobi' })
    .then(callback, errorCallback)

或者调用多个 .send()

  request.post('/user')
    .send({ name: 'tj' })
    .send({ pet: 'tobi' })
    .then(callback, errorCallback)

默认情况下,发送字符串会将 Content-Type 设置为 application/x-www-form-urlencoded,多个调用将用 & 连接,这里产生 name=tj&pet=tobi

  request.post('/user')
    .send('name=tj')
    .send('pet=tobi')
    .then(callback, errorCallback);

SuperAgent 格式是可扩展的,但默认情况下支持 "json" 和 "form"。要将数据作为 application/x-www-form-urlencoded 发送,只需在调用 .type() 时传入 "form",默认为 "json"。此 POST 请求的请求体将是 "name=tj&pet=tobi"。

  request.post('/user')
    .type('form')
    .send({ name: 'tj' })
    .send({ pet: 'tobi' })
    .then(callback, errorCallback)

还支持发送 FormData 对象。以下示例将 POST 请求由 id="myForm" 标识的 HTML 表单的内容:

  request.post('/user')
    .send(new FormData(document.getElementById('myForm')))
    .then(callback, errorCallback)

设置 Content-Type

显而易见的解决方案是使用 .set() 方法:

 request.post('/user')
   .set('Content-Type', 'application/json')

.type() 方法也可以作为简写,接受带有类型/子类型的规范化 MIME 类型 名称,或者只是扩展名,例如"xml"、"json"、"png"等:

 request.post('/user')
   .type('application/json')

 request.post('/user')
   .type('json')

 request.post('/user')
   .type('png')

序列化请求体

SuperAgent 将自动序列化 JSON 和表单。您也可以为其他类型设置自动序列化:

request.serialize['application/xml'] = function (obj) {
    return '从obj生成的字符串';
};

// 接下来,内容类型为 "application/xml" 的所有请求都将自动序列化

如果您想以自定义格式发送 数据体(payload),您可以根据每个请求将内置序列化替换为 .serialize() 方法:

request
    .post('/user')
    .send({foo: 'bar'})
    .serialize(obj => {
        return '从obj生成的字符串';
    });

重试请求

如果请求暂时失败或可能是网络连接不稳定造成的失败,且当给定 .retry() 方法时,SuperAgent 将自动重试请求。

此方法有两个可选参数:重试次数(默认为 1)和回调函数。它在每次重试之前调用 callback(err, res) 。回调可以返回 true/false 以控制是否应重试请求(但始终应该用最大重试次数)。 request .get('https://example.com/search') .retry(2) // 或者: .retry(2, callback) // 二选一 .then(finished); .catch(failed);

.retry() 仅用于幂等请求(即到达服务器的多个请求不会导致重复购买等不良副作用)。

默认情况下会尝试所有请求方法(这意味着如果您不希望重试 POST 请求,则需要传递自定义的重试回调函数)。

默认情况下会重试以下状态代码:

  • 408
  • 413
  • 429
  • 500
  • 502
  • 503
  • 504
  • 521
  • 522
  • 524

默认情况下会重试以下错误代码:

  • 'ETIMEDOUT'
  • 'ECONNRESET'
  • 'EADDRINUSE'
  • 'ECONNREFUSED'
  • 'EPIPE'
  • 'ENOTFOUND'
  • 'ENETUNREACH'
  • 'EAI_AGAIN'

设置 Accept

.type() 方法类似,也可以通过简写方法 .accept() 设置 Accept 请求头。方便起见,其中还引用了 request.types,允许您将完整的规范化 MIME 类型 名称指定为类型/子类型,或将扩展后缀形式指定为"xml"、"json"、"png"等:

 request.get('/user')
   .accept('application/json')

 request.get('/user')
   .accept('json')

 request.post('/user')
   .accept('png')

Facebook 和 Accept JSON

如果您正在调用 Facebook 的 API,请务必在您的请求中发送 Accept: application/json 请求头。如果你不这样做,Facebook 会回复 Content-Type: text/javascript; charset=UTF-8,SuperAgent 将不会解析,因此 res.body 将是未定义的。您可以使用 req.accept('json')req.header('Accept', 'application/json') 来执行此操作。有关详细信息,请参阅 issue 1078

查询字符串(Query strings)

req.query(obj) 是一种可用于构建查询字符串的方法。例如在 POST 上增加 ?format=json&dest=/login

request
  .post('/')
  .query({ format: 'json' })
  .query({ dest: '/login' })
  .send({ post: 'data', here: 'wahoo' })
  .then(callback);

默认情况下,查询字符串不按任何特定顺序组装。可以使用 req.sortQuery() 启用 ASCIIbetically 排序的查询字符串。您还可以使用 req.sortQuery(myComparisonFn) 提供自定义排序比较函数。比较函数应该接受 2 个参数并返回一个负/零/正整数。

 // 默认顺序
 request.get('/user')
   .query('name=Nick')
   .query('search=Manny')
   .sortQuery()
   .then(callback)

 // 自定义排序函数
 request.get('/user')
   .query('name=Nick')
   .query('search=Manny')
   .sortQuery((a, b) => a.length - b.length)
   .then(callback)

TLS 选项

在 Node.js 中,SuperAgent 支持配置 HTTPS 请求的方法:

  • .ca(): 将 CA 证书设置为信任
  • .cert(): 设置客户端证书链
  • .key(): 设置客户端私钥
  • .pfx(): 设置客户端 PFX 或 PKCS12 编码的私钥和证书链
  • .disableTLSCerts(): 不拒绝过期或无效的 TLS 证书。在内部设置 rejectUnauthorized=true请注意,此方法允许中间人攻击。

有关更多信息,请参阅 Node.js https.request 文档

var key = fs.readFileSync('key.pem'),
    cert = fs.readFileSync('cert.pem');

request
  .post('/client-auth')
  .key(key)
  .cert(cert)
  .then(callback);
var ca = fs.readFileSync('ca.cert.pem');

request
  .post('https://localhost/private-ca-server')
  .ca(ca)
  .then(res => {});

解析响应体

SuperAgent将为您解析已知的响应主体数据,目前支持application/x-www-form-urlencodedapplication/json,以及multipart/form data。您可以设置自动解析其他响应主体数据:

//浏览器
request.parse['application/xml'] = function (str) {
    return {'object': '从str解析的'};
};

//node
request.parse['application/xml'] = function (res, cb) {
    //解析响应文本并在此处设置res.body

    cb(null, res);
};

//接下来,将自动解析 'application/xml' 类型的响应

您可以使用 .buffer(true).parse(fn) 方法设置自定义解析器(优先于内置解析器)。如果未启用响应缓冲 (.buffer(false)),则将触发响应(response)事件而无需等待正文解析器完成,因此 response.body 将不可用。

JSON / Urlencoded

属性 res.body 是解析后的对象,例如,如果请求以 JSON 字符串 '{"user":{"name":"tobi"}}' 响应,则 res.body.user.name 将为 "tobi" .同样,"user[name]=tobi" 的 x-www-form-urlencoded 值将产生相同的结果。仅支持一级嵌套。如果您需要更复杂的数据,请改为发送 JSON。

通过重复的键发送数组。 .send({color: ['red','blue']}) 会发送 color=red&color=blue。如果您希望数组键的名称中包含 [],您必须自己添加它,因为 SuperAgent 不会自动添加它。

Multipart

Node 客户端通过 Formidable 模块支持 _multipart/form-data_。解析 multipart 响应时,对象 res.files 也可供您使用。例如,假设一个请求使用以下 multipart 请求体进行响应:

--whoop
Content-Disposition: attachment; name="image"; filename="tobi.png"
Content-Type: image/png

... data here ...
--whoop
Content-Disposition: form-data; name="name"
Content-Type: text/plain

Tobi
--whoop--

res.body.name的值将为 "Tobi",并且 res.files.image 将作为包含磁盘路径、文件名和其他属性的 File 对象。

二进制数据

在浏览器中,您可以使用 .responseType('blob') 来请求处理二进制响应体。在 node.js 中运行时不需要此 API。此方法支持的参数值为

  • 'blob' 赋值给 XmlHTTPRequest 的 responseType 属性
  • 'arraybuffer' 赋值给 XmlHTTPRequest 的 responseType 属性
req.get('/binary.data')
  .responseType('blob')
  .then(res => {
    // res.body 将是浏览器原生 Blob 类型
  });

有关更多信息,请参阅 Mozilla 开发人员网络 xhr.responseType 文档

响应属性

Response 对象上设置了许多有用的标志和属性,包括响应文本、解析的响应正文、响应头字段、状态标志等等。

响应文本

res.text 属性包含未解析的响应正文字符串。此属性始终存在于客户端 API 中,并且仅当默认情况下节点的 mime 类型与 "text/"、"/json" 或 "x-www-form-urlencoded" 匹配时。原因是为了节省内存,因为缓冲大型正文(例如 multipart 文件或图像)的文本效率极低。要强制缓冲,请参阅"缓冲响应"部分。

响应体

就像 SuperAgent 可以自动序列化请求数据一样,它也可以自动解析响应体。为 Content-Type 定义解析器时,会对其进行解析,默认情况下包括 "application/json" 和 "application/x-www-form-urlencoded"。然后可以通过 res.body 获得解析的对象。

响应头字段

res.header 包含已解析的响应头字段的对象,字段名称小写,就像 node 做的一样。例如 res.header['content-length']

响应内容类型(Content-Type)

Content-Type 响应头是特殊情况,提供 res.type,它没有字符集(也可以有)。例如,"text/html; charset=utf8" 的 Content-Type 将提供 "text/html" 作为 res.type,然后 res.charset 属性将包含 "utf8"。

响应状态

响应状态标志有助于确定请求是否成功,以及其他有用的信息,使 SuperAgent 成为与 RESTful Web 服务交互的理想选择。这些标志当前定义为:

 var type = status / 100 | 0;

 // status / class
 res.status = status;
 res.statusType = type;

 // basics
 res.info = 1 == type;
 res.ok = 2 == type;
 res.clientError = 4 == type;
 res.serverError = 5 == type;
 res.error = 4 == type || 5 == type;

 // 语法糖
 res.accepted = 202 == status;
 res.noContent = 204 == status || 1223 == status;
 res.badRequest = 400 == status;
 res.unauthorized = 401 == status;
 res.notAcceptable = 406 == status;
 res.notFound = 404 == status;
 res.forbidden = 403 == status;

中止请求

要中止请求,只需调用 req.abort() 方法。

超时设定

有时网络和服务器会 "卡住" 并且在接受请求后从不响应。设置超时以避免请求永远等待。

  • req.timeout({deadline:ms})req.timeout(ms)(其中 ms 是毫秒数 > 0)设置完成整个请求(包括所有上传、重定向、服务器处理时间)的最后期限。如果在这段时间内没有完全下载响应,则请求将被中止。

  • req.timeout({response:ms}) 设置等待第一个字节从服务器到达的最长时间,但它不限制整个下载需要多长时间。响应超时应该至少比服务器响应的时间长几秒钟,因为它还包括进行 DNS 查找、TCP/IP 和 TLS 连接的时间,以及上传请求数据的时间。

您应该同时使用 deadlineresponse 超时。通过这种方式,您可以使用较短的响应超时来快速检测无响应的网络,并使用较长的截止时间来为缓慢但可靠的网络上的下载留出时间。请注意,这两个计时器都限制了允许上传附件的时间。如果您要上传文件,请使用长超时。

request
  .get('/big-file?network=slow')
  .timeout({
    response: 5000,  // 等待 5 秒让服务器开始发送
    deadline: 60000, // 但允许文件用 1 分钟完成加载。
  })
  .then(res => {
      /* 及时响应 */
    }, err => {
      if (err.timeout) { /* 超时! */ } else { /* 其他错误 */ }
  });

超时错误有个 .timeout 属性。

验证

在 Node 和浏览器中都可以通过 .auth() 方法进行身份验证:

request
  .get('http://local')
  .auth('tobi', 'learnboost')
  .then(callback);

Node 客户端中,基本身份验证可以在 URL 中写成 "user:pass":

request.get('http://tobi:learnboost@local').then(callback);

默认情况下,仅使用基本(Basic)身份验证。在浏览器中,您可以添加 {type:'auto'} 以启用浏览器中内置的所有方法(Digest、NTLM 等):

request.auth('digest', 'secret', {type:'auto'})

auth 方法还支持一种承载类型,以指定基于令牌的身份验证:

request.auth('my_token', { type: 'bearer' })

跟随重定向

默认情况下将跟随最多 5 个重定向,但是您可以使用 res.redirects(n) 方法指定它:

const response = await request.get('/some.png').redirects(2);

超出限制的重定向被视为错误。使用 .ok(res => res.status < 400) 将它们读取为成功响应。

全局状态代理程序

在 Node 中 SuperAgent 默认不保存 cookie,但您可以使用 .agent() 方法创建保存 cookie 的 SuperAgent 副本。每个副本都有一个单独的 cookie 储存器。

const agent = request.agent();
agent
  .post('/login')
  .then(() => {
    return agent.get('/cookied-page');
  });

在浏览器中,cookie 由浏览器自动管理,因此 .agent() 不会隔离 cookie。

多个请求的默认选项

代理程序上调用的常规请求方法将用作该代理发出的所有请求的默认值。

const agent = request.agent()
  .use(plugin)
  .auth(shared);

await agent.get('/with-plugin-and-auth'); // 带有插件和身份验证
await agent.get('/also-with-plugin-and-auth'); // 也带有插件和身份验证

代理可以用来设置默认值的完整方法列表是:useononcesetquerytypeacceptauthwithCredentialssortQueryretryokredirectstimeoutbufferserializeparsecakeypfxcert.

管道数据

Node 客户端允许您通过管道将数据传入和传出请求。请注意,使用 .pipe() 代替 .end()/.then() 方法。

管道文件的内容作为请求的例子:

const request = require('superagent');
const fs = require('fs');

const stream = fs.createReadStream('path/to/my.json');
const req = request.post('/somewhere');
req.type('json');
stream.pipe(req);

请注意,当您通过管道发送请求时,superagent 使用分块传输编码发送管道数据,并非所有服务器(例如 Python WSGI 服务器)都支持。

或将响应传送到文件:

const stream = fs.createWriteStream('path/to/my.json');
const req = request.get('/some.json');
req.pipe(stream);

不能混合使用管道和回调函数或 promises。请注意,您不应尝试通过管道传输 .end()Response 对象的结果:

// 别特么这么写:
const stream = getAWritableStream();
const req = request
  .get('/some.json')
  // BAD: 这会将无用信息管道传输到流中并以意想不到的方式失败
  .end((err, this_does_not_work) => this_does_not_work.pipe(stream))
const req = request
  .get('/some.json')
  .end()
  // BAD: 这也不支持,调用 .end 之后调用 .pipe。
  .pipe(nope_its_too_late);

在 superagent 的未来版本中,对 pipe() 的不当调用将失败。

多部分请求

SuperAgent 也非常适合 构建 它提供方法 .attach().field() 的多部分请求。

当您使用 .field().attach() 时,您不能使用 .send() 并且您不能设置 Content-Type(将为您设置正确的类型)。

附加文件

要发送文件,请使用 .attach(name, [file], [options])。您可以通过多次调用 .attach 来附加多个文件。参数是:

  • name — form 表单中的字段名。
  • file — 带有文件路径的字符串或 Blob/Buffer 对象。
  • options — (可选)自定义文件名的字符串或 {filename: string} 对象。在 Node 中也支持 {contentType: 'mime/type'}。在浏览器中创建一个具有适当类型的 Blob

request
  .post('/upload')
  .attach('image1', 'path/to/felix.jpeg')
  .attach('image2', imageBuffer, 'luna.jpeg')
  .field('caption', 'My cats')
  .then(callback);

字段值

与 HTML 中的表单字段非常相似,您可以使用 .field(name, value).field({name: value}) 设置字段值。假设您想上传一些带有您的姓名和电子邮件的图片,您的请求可能如下所示:

 request
   .post('/upload')
   .field('user[name]', 'Tobi')
   .field('user[email]', 'tobi@learnboost.com')
   .field('friends[]', ['loki', 'jane'])
   .attach('image', 'path/to/tobi.png')
   .then(callback);

压缩

node 客户端支持压缩过的响应,最重要的是,您无需执行任何操作!它就能用。

缓冲响应

要强制将响应主体缓冲为 res.text,您可以调用 req.buffer()。要取消对文本响应(例如 "text/plain"、"text/html" 等)的默认缓冲,您可以调用 req.buffer(false)

当缓冲提供 res.buffered 标志时,您可以使用它在同一个回调中处理缓冲和非缓冲响应。

CORS

出于安全原因,浏览器将阻止跨域请求,除非服务器选择使用 CORS 标头。浏览器还会发出额外的 OPTIONS 请求来检查服务器允许哪些 HTTP 标头和方法。阅读有关 CORS 的更多信息

.withCredentials() 方法支持从源发送 cookie,但仅当 Access-Control-Allow-Origin 不是 通配符 ("*") 且 Access-Control-Allow-Credentials 为 "true" 时。

request
  .get('https://api.example.com:4001/')
  .withCredentials()
  .then(res => {
    assert.equal(200, res.status);
    assert.equal('tobi', res.text);
  })

错误处理

您的回调函数将始终传递两个参数:错误和响应。如果没有发生错误,第一个参数将为null

request
 .post('/upload')
 .attach('image', 'path/to/tobi.png')
 .then(res => {

 });

还会触发"错误"事件,您可以监听:

request
  .post('/upload')
  .attach('image', 'path/to/tobi.png')
  .on('error', handle)
  .then(res => {

  });

请注意,默认情况下,superagent 会考虑 4xx 和 5xx 响应(以及未处理的 3xx 响应)视为错误。例如,如果您收到 304 Not modified403 Forbidden500 Internal server 错误响应,则此状态信息将通过 err.status 提供。来自此类响应的错误还包含一个 err.response 字段,其中包含"响应属性"中提到的所有属性。该库以这种方式运行以处理需要成功响应并将 HTTP 错误状态代码视为错误的常见情况,同时仍允许围绕特定错误条件进行自定义逻辑。

网络故障、超时和其他不产生响应的错误将不包含 err.statuserr.response 字段。

如果您希望处理 404 或其他 HTTP 错误响应,您可以查询 err.status 属性。当发生 HTTP 错误(4xx 或 5xx 响应)时, res.error 属性是一个 Error 对象,这允许您执行以下检查:

if (err && err.status === 404) {
  alert('oh no ' + res.body.message);
}
else if (err) {
  // 所有其他需要处理的错误类型
}

或者,您可以使用 .ok(callback) 方法来确定响应是否为错误。 ok 函数的回调函数获得响应,如果响应应该被解释为成功,则返回 true。

request.get('/404')
  .ok(res => res.status < 500)
  .then(response => {
    // 将 404 页面作为成功响应
  })

进度跟踪

SuperAgent 在上传和下载大文件时触发 progress 事件。

request.post(url)
  .attach('field_name', file)
  .on('progress', event => {
    /* event的值:
    {
      direction: "upload" or "download"
      percent: 0 to 100 // 如果文件大小未知,可能会没有
      total: // 总文件大小,可能没有
      loaded: // 到目前为止下载或上传的字节数
    } */
  })
  .then()

在本地主机上测试

强制连接特定 IP 地址

在 Node.js 中,可以忽略 DNS 解析并使用 .connect() 方法将所有请求定向到特定 IP 地址。例如,此请求将转到 localhost 而不是 example.com

const res = await request.get("http://example.com").connect("127.0.0.1");

因为请求可能被重定向,所以可以指定多个主机名和多个 IP,以及一个特殊的 * 作为后备(注意:不支持其他通配符)。请求将保留其 Host 请求头的原始值。

const res = await request.get("http://redir.example.com:555")
  .connect({
    "redir.example.com": "127.0.0.1", // redir.example.com:555 将使用 127.0.0.1:555
    "www.example.com": false, // 不覆盖这个;正常使用 DNS
    "mapped.example.com": { host: "127.0.0.1", port: 8080}, // mapped.example.com:* 将使用 127.0.0.1:8080
    "*": "proxy.example.com", // 所有其他请求都将发送到该主机
  });

忽略本地主机上损坏/不安全的 HTTPS

在 Node.js 中,当 HTTPS 配置错误且不安全(例如,使用自签名证书而不指定自己的 .ca())时,仍然可以通过调用 .trustLocalhost() 来允许对 localhost 的请求:

const res = await request.get("https://localhost").trustLocalhost()

.connect("127.0.0.1") 一起,这可用于强制将对任何域的 HTTPS 请求重新路由到 localhost

忽略本地主机上损坏的 HTTPS 通常是安全的,因为环回接口不会暴露给不受信任的网络。信任 localhost 可能会成为未来的默认设置。使用 .trustLocalhost(false) 强制检查 127.0.0.1 的可靠性。

当向任何其他 IP 发出请求时,我们故意不支持禁用 HTTPS 安全性,因为这些选项最终被滥用为 HTTPS 问题的快速"修复"。您可以从 Let's Encrypt 获得免费的 HTTPS 证书或设置您自己的 CA (.ca(ca_public_pem)) 以使您的自签名证书受信任。

Promise 和生成器函数支持

SuperAgent 的请求是一个 "thenable" 对象(带有then方法的对象),它与 JavaScript Promise 和 async/await 语法兼容。

const res = await request.get(url);

如果你使用 Promise,不要调用 .end().pipe()。任何使用 .then()await 都会禁用所有其他使用请求的方式。 像 co 这样的库或像 koa 这样的 web 框架可以在任何 SuperAgent 方法上 yield

const req = request
  .get('http://local')
  .auth('tobi', 'learnboost');
const res = yield req;

请注意,SuperAgent 期望全局 Promise 对象存在。您需要一个 polyfill 才能在 Internet Explorer 或 Node.js 0.10 中使用 Promise。

浏览器和 node 版本

SuperAgent 有两种实现:一种用于 Web 浏览器(使用 XHR),另一种用于 Node.JS(使用核心 http 模块)。默认情况下,Browserify 和 WebPack 将选择浏览器版本。

如果要使用 WebPack 为 Node.JS 编译代码,您必须在其配置中指定node target

在 electron 中使用浏览器版本

Electron 开发人员报告说,如果您希望使用浏览器版本的 SuperAgent 而不是 Node 版本,您可以 require('superagent/superagent')。这样您的请求将显示在 Chrome 开发者工具的"网络(Network)"选项卡中。请注意,自动化测试套件未涵盖此环境,也未得到官方支持。

使用代理发送请求

可以使用另一个作者的 superagent-proxy 模块

翻译说明

文档全部内容都是根据原英文文档翻译的,译者也没水平,所以如果有错误还请指出

Fork me on GitHub superagent-8.0.5/docs/zh_CN/index.md000066400000000000000000000726711434246777100173170ustar00rootroot00000000000000# SuperAgent SuperAgent是轻量级的渐进式ajax API,具有灵活性、可读性和较低的学习曲线。 它也适用于Node.js! request .post('/api/pet') .send({ name: 'Manny', species: 'cat' }) .set('X-API-Key', 'foobar') .set('Accept', 'application/json') .then(res => { alert('yay got ' + JSON.stringify(res.body)); }); ## 测试文档 [**English**](/superagent/) 下面的[测试文档](../test.html)是用[Mocha](https://mochajs.org/)的"文档"报告器生成的,并直接反映了测试套件。 这提供了额外的文档来源。 ## 基本请求 可以通过调用 `request` 对象上的适当方法来发起请求,然后调用 `.then()` ( 或 `.end()` 或 [`await`](#promise-and-generator-support) )发送请求。例如一个简单的 __GET__ 请求: request .get('/search') .then(res => { // res.body, res.headers, res.status }) .catch(err => { // err.message, err.response }); HTTP 方法也可以作为字符串传递: 译者注:大小写皆可。 request('GET', '/search').then(success, failure); 旧式回调也受支持,但不推荐使用。您可以调用 `.end()` *代替* `.then()`: request('GET', '/search').end(function(err, res){ if (res.ok) {} }); 可以使用绝对 URL。在 Web 浏览器中,绝对 URL 仅在服务器实现 [CORS](#cors) 时才有效。 request .get('https://example.com/search') .then(res => { }); __Node__ 客户端支持向 [Unix 域套接字](https://zh.wikipedia.org/wiki/Unix%E5%9F%9F%E5%A5%97%E6%8E%A5%E5%AD%97) 发出请求: // pattern: https?+unix://SOCKET_PATH/REQUEST_PATH //在套接字路径中将 `%2F` 用作 `/` try { const res = await request .get('http+unix://%2Fabsolute%2Fpath%2Fto%2Funix.sock/search'); // res.body, res.headers, res.status } catch(err) { // err.message, err.response } __DELETE__、__HEAD__、__PATCH__、__POST__ 和 __PUT__ 请求也可以使用,只需更改方法名称: request .head('/favicon.ico') .then(res => { }); __DELETE__ 也可以用 `.del()` 调用以与旧版 IE 兼容,其中 `delete` 是保留字。 HTTP 方法默认为 __GET__,因此如果您愿意,以下代码是有效的: request('/search', (err, res) => { }); ## 使用 HTTP/2 要使用 HTTP/2 协议(没有 HTTP/1.x 后备),请使用 `.http2()` 方法。 const request = require('superagent'); const res = await request .get('https://example.com/h2') .http2(); ## 设置请求头字段 设置请求头字段很简单,调用 `.set()` 时传入字段名称和值: request .get('/search') .set('API-Key', 'foobar') .set('Accept', 'application/json') .then(callback); 您还可以在一次调用中传入一个对象来设置多个字段: request .get('/search') .set({ 'API-Key': 'foobar', Accept: 'application/json' }) .then(callback); ## `GET` 请求 `.query()` 方法接受对象,当与 __GET__ 方法一起使用时将形成一个查询字符串。以下将产生路径 `/search?query=Manny&range=1..5&order=desc`。 译者注:`.query()` 方法的参数不需要提前进行url编码。 request .get('/search') .query({ query: 'Manny' }) .query({ range: '1..5' }) .query({ order: 'desc' }) .then(res => { }); 或传入单个对象: request .get('/search') .query({ query: 'Manny', range: '1..5', order: 'desc' }) .then(res => { }); `.query()` 方法也可以接受字符串。 request .get('/querystring') .query('search=Manny&range=1..5') .then(res => { }); 或者一个个加入: request .get('/querystring') .query('search=Manny') .query('range=1..5') .then(res => { }); ## `HEAD` 请求 您还可以对 __HEAD__ 请求使用 .query() 方法。以下将生成路径 `/users?email=joe@smith.com`。 request .head('/users') .query({ email: 'joe@smith.com' }) .then(res => { }); ## `POST` / `PUT` 请求 一个典型的 JSON __POST__ 请求可能如下所示,我们适当地设置 `Content-Type` 请求头字段,并"写入"一些数据,在本例中只是一个 JSON 字符串。 request.post('/user') .set('Content-Type', 'application/json') .send('{"name":"tj","pet":"tobi"}') .then(callback) .catch(errorCallback) 由于 JSON 无疑是最常见的,所以它是 _默认_ 的!下面的例子与前面的例子是等价的。 request.post('/user') .send({ name: 'tj', pet: 'tobi' }) .then(callback, errorCallback) 或者调用多个 `.send()`: request.post('/user') .send({ name: 'tj' }) .send({ pet: 'tobi' }) .then(callback, errorCallback) 默认情况下,发送字符串会将 `Content-Type` 设置为 `application/x-www-form-urlencoded`,多个调用将用 `&` 连接,这里产生 `name=tj&pet=tobi`: request.post('/user') .send('name=tj') .send('pet=tobi') .then(callback, errorCallback); SuperAgent 格式是可扩展的,但默认情况下支持 "json" 和 "form"。要将数据作为 `application/x-www-form-urlencoded` 发送,只需在调用 `.type()` 时传入 "form",默认为 "json"。此 __POST__ 请求的请求体将是 "name=tj&pet=tobi"。 request.post('/user') .type('form') .send({ name: 'tj' }) .send({ pet: 'tobi' }) .then(callback, errorCallback) 还支持发送 [`FormData`](https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/FormData) 对象。以下示例将 __POST__ 请求由 id="myForm" 标识的 HTML 表单的内容: request.post('/user') .send(new FormData(document.getElementById('myForm'))) .then(callback, errorCallback) ## 设置 `Content-Type` 显而易见的解决方案是使用 `.set()` 方法: request.post('/user') .set('Content-Type', 'application/json') `.type()` 方法也可以作为简写,接受带有类型/子类型的规范化 [MIME 类型](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types) 名称,或者只是扩展名,例如"xml"、"json"、"png"等: request.post('/user') .type('application/json') request.post('/user') .type('json') request.post('/user') .type('png') ## 序列化请求体 SuperAgent 将自动序列化 JSON 和表单。您也可以为其他类型设置自动序列化: ```js request.serialize['application/xml'] = function (obj) { return '从obj生成的字符串'; }; // 接下来,内容类型为 "application/xml" 的所有请求都将自动序列化 ``` 如果您想以自定义格式发送 数据体(payload),您可以根据每个请求将内置序列化替换为 `.serialize()` 方法: ```js request .post('/user') .send({foo: 'bar'}) .serialize(obj => { return '从obj生成的字符串'; }); ``` ## 重试请求 如果请求暂时失败或可能是网络连接不稳定造成的失败,且当给定 `.retry()` 方法时,SuperAgent 将自动重试请求。 此方法有两个可选参数:重试次数(默认为 `1`)和回调函数。它在每次重试之前调用 callback(err, res) 。回调可以返回 `true`/`false` 以控制是否应重试请求(但始终应该用最大重试次数)。 request .get('https://example.com/search') .retry(2) // 或者: .retry(2, callback) // 二选一 .then(finished); .catch(failed); `.retry()` 仅用于[*幂等*](https://baike.baidu.com/item/%E5%B9%82%E7%AD%89/8600688?fr=aladdin)请求(即到达服务器的多个请求不会导致重复购买等不良副作用)。 默认情况下会尝试所有请求方法(这意味着如果您不希望重试 POST 请求,则需要传递自定义的重试回调函数)。 默认情况下会重试以下状态代码: * `408` * `413` * `429` * `500` * `502` * `503` * `504` * `521` * `522` * `524` 默认情况下会重试以下错误代码: * `'ETIMEDOUT'` * `'ECONNRESET'` * `'EADDRINUSE'` * `'ECONNREFUSED'` * `'EPIPE'` * `'ENOTFOUND'` * `'ENETUNREACH'` * `'EAI_AGAIN'` ## 设置 Accept 与 `.type()` 方法类似,也可以通过简写方法 `.accept()` 设置 `Accept` 请求头。方便起见,其中还引用了 `request.types`,允许您将完整的规范化 [MIME 类型](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types) 名称指定为`类型/子类型`,或将扩展后缀形式指定为"xml"、"json"、"png"等: request.get('/user') .accept('application/json') request.get('/user') .accept('json') request.post('/user') .accept('png') ### Facebook 和 Accept JSON 如果您正在调用 Facebook 的 API,请务必在您的请求中发送 `Accept: application/json` 请求头。如果你不这样做,Facebook 会回复 `Content-Type: text/javascript; charset=UTF-8`,SuperAgent 将不会解析,因此 `res.body` 将是未定义的。您可以使用 `req.accept('json')` 或 `req.header('Accept', 'application/json')` 来执行此操作。有关详细信息,请参阅 [issue 1078](https://github.com/ladjs/superagent/issues/1078)。 ## 查询字符串(Query strings) `req.query(obj)` 是一种可用于构建查询字符串的方法。例如在 __POST__ 上增加 `?format=json&dest=/login`: request .post('/') .query({ format: 'json' }) .query({ dest: '/login' }) .send({ post: 'data', here: 'wahoo' }) .then(callback); 默认情况下,查询字符串不按任何特定顺序组装。可以使用 `req.sortQuery()` 启用 ASCIIbetically 排序的查询字符串。您还可以使用 `req.sortQuery(myComparisonFn)` 提供自定义排序比较函数。比较函数应该接受 2 个参数并返回一个负/零/正整数。 ```js // 默认顺序 request.get('/user') .query('name=Nick') .query('search=Manny') .sortQuery() .then(callback) // 自定义排序函数 request.get('/user') .query('name=Nick') .query('search=Manny') .sortQuery((a, b) => a.length - b.length) .then(callback) ``` ## TLS 选项 在 Node.js 中,SuperAgent 支持配置 HTTPS 请求的方法: - `.ca()`: 将 CA 证书设置为信任 - `.cert()`: 设置客户端证书链 - `.key()`: 设置客户端私钥 - `.pfx()`: 设置客户端 PFX 或 PKCS12 编码的私钥和证书链 - `.disableTLSCerts()`: 不拒绝过期或无效的 TLS 证书。在内部设置 `rejectUnauthorized=true`。*请注意,此方法允许中间人攻击。* 有关更多信息,请参阅 Node.js [https.request 文档](http://nodejs.cn/api/https.html#httpsrequesturl-options-callback)。 ```js var key = fs.readFileSync('key.pem'), cert = fs.readFileSync('cert.pem'); request .post('/client-auth') .key(key) .cert(cert) .then(callback); ``` ```js var ca = fs.readFileSync('ca.cert.pem'); request .post('https://localhost/private-ca-server') .ca(ca) .then(res => {}); ``` ## 解析响应体 SuperAgent将为您解析已知的响应主体数据,目前支持`application/x-www-form-urlencoded`,`application/json`,以及`multipart/form data`。您可以设置自动解析其他响应主体数据: ```js //浏览器 request.parse['application/xml'] = function (str) { return {'object': '从str解析的'}; }; //node request.parse['application/xml'] = function (res, cb) { //解析响应文本并在此处设置res.body cb(null, res); }; //接下来,将自动解析 'application/xml' 类型的响应 ``` 您可以使用 `.buffer(true).parse(fn)` 方法设置自定义解析器(优先于内置解析器)。如果未启用响应缓冲 (`.buffer(false)`),则将触发`响应(response)`事件而无需等待正文解析器完成,因此 `response.body` 将不可用。 ### JSON / Urlencoded 属性 `res.body` 是解析后的对象,例如,如果请求以 JSON 字符串 '{"user":{"name":"tobi"}}' 响应,则 `res.body.user.name` 将为 "tobi" .同样,"user[name]=tobi" 的 x-www-form-urlencoded 值将产生相同的结果。仅支持一级嵌套。如果您需要更复杂的数据,请改为发送 JSON。 通过重复的键发送数组。 `.send({color: ['red','blue']})` 会发送 `color=red&color=blue`。如果您希望数组键的名称中包含 `[]`,您必须自己添加它,因为 SuperAgent 不会自动添加它。 ### Multipart Node 客户端通过 [Formidable](https://github.com/felixge/node-formidable) 模块支持 _multipart/form-data_。解析 multipart 响应时,对象 `res.files` 也可供您使用。例如,假设一个请求使用以下 multipart 请求体进行响应: --whoop Content-Disposition: attachment; name="image"; filename="tobi.png" Content-Type: image/png ... data here ... --whoop Content-Disposition: form-data; name="name" Content-Type: text/plain Tobi --whoop-- `res.body.name`的值将为 "Tobi",并且 `res.files.image` 将作为包含磁盘路径、文件名和其他属性的 `File` 对象。 ### 二进制数据 在浏览器中,您可以使用 `.responseType('blob')` 来请求处理二进制响应体。在 node.js 中运行时不需要此 API。此方法支持的参数值为 - `'blob'` 赋值给 XmlHTTPRequest 的 `responseType` 属性 - `'arraybuffer'` 赋值给 XmlHTTPRequest 的 responseType 属性 ```js req.get('/binary.data') .responseType('blob') .then(res => { // res.body 将是浏览器原生 Blob 类型 }); ``` 有关更多信息,请参阅 Mozilla 开发人员网络 [xhr.responseType 文档](https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/responseType)。 ## 响应属性 在 `Response` 对象上设置了许多有用的标志和属性,包括响应文本、解析的响应正文、响应头字段、状态标志等等。 ### 响应文本 `res.text` 属性包含未解析的响应正文字符串。此属性始终存在于客户端 API 中,并且仅当默认情况下节点的 mime 类型与 "text/*"、"*/json" 或 "x-www-form-urlencoded" 匹配时。原因是为了节省内存,因为缓冲大型正文(例如 multipart 文件或图像)的文本效率极低。要强制缓冲,请参阅"[缓冲响应](#缓冲响应)"部分。 ### 响应体 就像 SuperAgent 可以自动序列化请求数据一样,它也可以自动解析响应体。为 Content-Type 定义解析器时,会对其进行解析,默认情况下包括 "application/json" 和 "application/x-www-form-urlencoded"。然后可以通过 `res.body` 获得解析的对象。 ### 响应头字段 `res.header` 包含已解析的响应头字段的对象,字段名称小写,就像 node 做的一样。例如 `res.header['content-length']`。 ### 响应内容类型(Content-Type) Content-Type 响应头是特殊情况,提供 `res.type`,它没有字符集(也可以有)。例如,"text/html; charset=utf8" 的 `Content-Type` 将提供 "text/html" 作为 `res.type`,然后 `res.charset` 属性将包含 "utf8"。 ### 响应状态 响应状态标志有助于确定请求是否成功,以及其他有用的信息,使 SuperAgent 成为与 RESTful Web 服务交互的理想选择。这些标志当前定义为: var type = status / 100 | 0; // status / class res.status = status; res.statusType = type; // basics res.info = 1 == type; res.ok = 2 == type; res.clientError = 4 == type; res.serverError = 5 == type; res.error = 4 == type || 5 == type; // 语法糖 res.accepted = 202 == status; res.noContent = 204 == status || 1223 == status; res.badRequest = 400 == status; res.unauthorized = 401 == status; res.notAcceptable = 406 == status; res.notFound = 404 == status; res.forbidden = 403 == status; ## 中止请求 要中止请求,只需调用 `req.abort()` 方法。 ## 超时设定 有时网络和服务器会 "卡住" 并且在接受请求后从不响应。设置超时以避免请求永远等待。 * `req.timeout({deadline:ms})` 或 `req.timeout(ms)`(其中 `ms` 是毫秒数 > 0)设置完成整个请求(包括所有上传、重定向、服务器处理时间)的最后期限。如果在这段时间内没有完全下载响应,则请求将被中止。 * `req.timeout({response:ms})` 设置等待第一个字节从服务器到达的最长时间,但它不限制整个下载需要多长时间。响应超时应该至少比服务器响应的时间长几秒钟,因为它还包括进行 DNS 查找、TCP/IP 和 TLS 连接的时间,以及上传请求数据的时间。 您应该同时使用 `deadline` 和 `response` 超时。通过这种方式,您可以使用较短的响应超时来快速检测无响应的网络,并使用较长的截止时间来为缓慢但可靠的网络上的下载留出时间。请注意,这两个计时器都限制了允许*上传*附件的时间。如果您要上传文件,请使用长超时。 request .get('/big-file?network=slow') .timeout({ response: 5000, // 等待 5 秒让服务器开始发送 deadline: 60000, // 但允许文件用 1 分钟完成加载。 }) .then(res => { /* 及时响应 */ }, err => { if (err.timeout) { /* 超时! */ } else { /* 其他错误 */ } }); 超时错误有个 `.timeout` 属性。 ## 验证 在 Node 和浏览器中都可以通过 `.auth()` 方法进行身份验证: request .get('http://local') .auth('tobi', 'learnboost') .then(callback); 在 _Node_ 客户端中,基本身份验证可以在 URL 中写成 "user:pass": request.get('http://tobi:learnboost@local').then(callback); 默认情况下,仅使用`基本(Basic)`身份验证。在浏览器中,您可以添加 `{type:'auto'}` 以启用浏览器中内置的所有方法(Digest、NTLM 等): request.auth('digest', 'secret', {type:'auto'}) `auth` 方法还支持一种`承载类型`,以指定基于令牌的身份验证: request.auth('my_token', { type: 'bearer' }) ## 跟随重定向 默认情况下将跟随最多 5 个重定向,但是您可以使用 `res.redirects(n)` 方法指定它: const response = await request.get('/some.png').redirects(2); 超出限制的重定向被视为错误。使用 `.ok(res => res.status < 400)` 将它们读取为成功响应。 ## 全局状态代理程序 ### 保存 cookie 在 Node 中 SuperAgent 默认不保存 cookie,但您可以使用 `.agent()` 方法创建保存 cookie 的 SuperAgent 副本。每个副本都有一个单独的 cookie 储存器。 const agent = request.agent(); agent .post('/login') .then(() => { return agent.get('/cookied-page'); }); 在浏览器中,cookie 由浏览器自动管理,因此 `.agent()` 不会隔离 cookie。 ### 多个请求的默认选项 代理程序上调用的常规请求方法将用作该代理发出的所有请求的默认值。 const agent = request.agent() .use(plugin) .auth(shared); await agent.get('/with-plugin-and-auth'); // 带有插件和身份验证 await agent.get('/also-with-plugin-and-auth'); // 也带有插件和身份验证 代理可以用来设置默认值的完整方法列表是:`use`、 `on`、 `once`、 `set`、 `query`、 `type`、 `accept`、 `auth`、 `withCredentials`、 `sortQuery`、 `retry`、 `ok`、 `redirects`、 `timeout`、 `buffer`、 `serialize`、 `parse`、 `ca`、 `key`、 `pfx`、 `cert`. ## 管道数据 Node 客户端允许您通过管道将数据传入和传出请求。请注意,使用 `.pipe()` **代替** `.end()/.then()` 方法。 管道文件的内容作为请求的例子: const request = require('superagent'); const fs = require('fs'); const stream = fs.createReadStream('path/to/my.json'); const req = request.post('/somewhere'); req.type('json'); stream.pipe(req); 请注意,当您通过管道发送请求时,superagent 使用[分块传输编码](https://baike.baidu.com/item/%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E7%BC%96%E7%A0%81/8359216?fr=aladdin)发送管道数据,并非所有服务器(例如 Python WSGI 服务器)都支持。 或将响应传送到文件: const stream = fs.createWriteStream('path/to/my.json'); const req = request.get('/some.json'); req.pipe(stream); 不能混合使用管道和回调函数或 promises。请注意,您**不应**尝试通过管道传输 `.end()` 或 `Response` 对象的结果: // 别特么这么写: const stream = getAWritableStream(); const req = request .get('/some.json') // BAD: 这会将无用信息管道传输到流中并以意想不到的方式失败 .end((err, this_does_not_work) => this_does_not_work.pipe(stream)) const req = request .get('/some.json') .end() // BAD: 这也不支持,调用 .end 之后调用 .pipe。 .pipe(nope_its_too_late); 在 superagent 的[未来版本](https://github.com/ladjs/superagent/issues/1188)中,对 `pipe()` 的不当调用将失败。 ## 多部分请求 SuperAgent 也非常适合 _构建_ 它提供方法 `.attach()` 和 `.field()` 的多部分请求。 当您使用 `.field()` 或 `.attach()` 时,您不能使用 `.send()` 并且您*不能*设置 `Content-Type`(将为您设置正确的类型)。 ### 附加文件 要发送文件,请使用 `.attach(name, [file], [options])`。您可以通过多次调用 `.attach` 来附加多个文件。参数是: * `name` — form 表单中的字段名。 * `file` — 带有文件路径的字符串或 `Blob/Buffer` 对象。 * `options` — (可选)自定义文件名的字符串或 `{filename: string}` 对象。在 Node 中也支持 `{contentType: 'mime/type'}`。在浏览器中创建一个具有适当类型的 `Blob`。
request .post('/upload') .attach('image1', 'path/to/felix.jpeg') .attach('image2', imageBuffer, 'luna.jpeg') .field('caption', 'My cats') .then(callback); ### 字段值 与 HTML 中的表单字段非常相似,您可以使用 `.field(name, value)` 和 `.field({name: value})` 设置字段值。假设您想上传一些带有您的姓名和电子邮件的图片,您的请求可能如下所示: request .post('/upload') .field('user[name]', 'Tobi') .field('user[email]', 'tobi@learnboost.com') .field('friends[]', ['loki', 'jane']) .attach('image', 'path/to/tobi.png') .then(callback); ## 压缩 node 客户端支持压缩过的响应,最重要的是,您无需执行任何操作!它就能用。 ## 缓冲响应 要强制将响应主体缓冲为 `res.text`,您可以调用 `req.buffer()`。要取消对文本响应(例如 "text/plain"、"text/html" 等)的默认缓冲,您可以调用 `req.buffer(false)`。 当缓冲提供 `res.buffered` 标志时,您可以使用它在同一个回调中处理缓冲和非缓冲响应。 ## CORS 出于安全原因,浏览器将阻止跨域请求,除非服务器选择使用 CORS 标头。浏览器还会发出额外的 __OPTIONS__ 请求来检查服务器允许哪些 HTTP 标头和方法。[阅读有关 CORS 的更多信息](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS)。 `.withCredentials()` 方法支持从源发送 cookie,但仅当 Access-Control-Allow-Origin _不是_ 通配符 ("*") 且 `Access-Control-Allow-Credentials` 为 "true" 时。 request .get('https://api.example.com:4001/') .withCredentials() .then(res => { assert.equal(200, res.status); assert.equal('tobi', res.text); }) ## 错误处理 您的回调函数将始终传递两个参数:错误和响应。如果没有发生错误,第一个参数将为`null`: request .post('/upload') .attach('image', 'path/to/tobi.png') .then(res => { }); 还会触发"错误"事件,您可以监听: request .post('/upload') .attach('image', 'path/to/tobi.png') .on('error', handle) .then(res => { }); 请注意,**默认情况下,superagent 会考虑 4xx 和 5xx 响应(以及未处理的 3xx 响应)视为错误**。例如,如果您收到 `304 Not modified`、`403 Forbidden` 或 `500 Internal server` 错误响应,则此状态信息将通过 `err.status` 提供。来自此类响应的错误还包含一个 `err.response` 字段,其中包含"[响应属性](#响应属性)"中提到的所有属性。该库以这种方式运行以处理需要成功响应并将 HTTP 错误状态代码视为错误的常见情况,同时仍允许围绕特定错误条件进行自定义逻辑。 网络故障、超时和其他不产生响应的错误将不包含 `err.status` 或 `err.response` 字段。 如果您希望处理 404 或其他 HTTP 错误响应,您可以查询 `err.status` 属性。当发生 HTTP 错误(4xx 或 5xx 响应)时, `res.error` 属性是一个 `Error` 对象,这允许您执行以下检查: if (err && err.status === 404) { alert('oh no ' + res.body.message); } else if (err) { // 所有其他需要处理的错误类型 } 或者,您可以使用 `.ok(callback)` 方法来确定响应是否为错误。 `ok` 函数的回调函数获得响应,如果响应应该被解释为成功,则返回 true。 request.get('/404') .ok(res => res.status < 500) .then(response => { // 将 404 页面作为成功响应 }) ## 进度跟踪 SuperAgent 在上传和下载大文件时触发 `progress` 事件。 request.post(url) .attach('field_name', file) .on('progress', event => { /* event的值: { direction: "upload" or "download" percent: 0 to 100 // 如果文件大小未知,可能会没有 total: // 总文件大小,可能没有 loaded: // 到目前为止下载或上传的字节数 } */ }) .then() ## 在本地主机上测试 ### 强制连接特定 IP 地址 在 Node.js 中,可以忽略 DNS 解析并使用 `.connect()` 方法将所有请求定向到特定 IP 地址。例如,此请求将转到 localhost 而不是 `example.com`: const res = await request.get("http://example.com").connect("127.0.0.1"); 因为请求可能被重定向,所以可以指定多个主机名和多个 IP,以及一个特殊的 `*` 作为后备(注意:不支持其他通配符)。请求将保留其 `Host` 请求头的原始值。 const res = await request.get("http://redir.example.com:555") .connect({ "redir.example.com": "127.0.0.1", // redir.example.com:555 将使用 127.0.0.1:555 "www.example.com": false, // 不覆盖这个;正常使用 DNS "mapped.example.com": { host: "127.0.0.1", port: 8080}, // mapped.example.com:* 将使用 127.0.0.1:8080 "*": "proxy.example.com", // 所有其他请求都将发送到该主机 }); ### 忽略本地主机上损坏/不安全的 HTTPS 在 Node.js 中,当 HTTPS 配置错误且不安全(例如,使用自签名证书而*不指定*自己的 `.ca()`)时,仍然可以通过调用 `.trustLocalhost()` 来允许对 `localhost` 的请求: const res = await request.get("https://localhost").trustLocalhost() 与 `.connect("127.0.0.1")` 一起,这可用于强制将对任何域的 HTTPS 请求重新路由到 `localhost`。 忽略本地主机上损坏的 HTTPS 通常是安全的,因为环回接口不会暴露给不受信任的网络。信任 `localhost` 可能会成为未来的默认设置。使用 `.trustLocalhost(false)` 强制检查 `127.0.0.1` 的可靠性。 当向任何其他 IP 发出请求时,我们故意不支持禁用 HTTPS 安全性,因为这些选项最终被滥用为 HTTPS 问题的快速"修复"。您可以从 [Let's Encrypt](https://certbot.eff.org) 获得免费的 HTTPS 证书或设置您自己的 CA (`.ca(ca_public_pem)`) 以使您的自签名证书受信任。 ## Promise 和生成器函数支持 SuperAgent 的请求是一个 "thenable" 对象(带有then方法的对象),它与 JavaScript Promise 和 `async/await` 语法兼容。 const res = await request.get(url); 如果你使用 Promise,**不要**调用 `.end()` 或 `.pipe()`。任何使用 `.then()` 或 `await` 都会禁用所有其他使用请求的方式。 像 [co](https://github.com/tj/co) 这样的库或像 [koa](https://github.com/koajs/koa) 这样的 web 框架可以在任何 SuperAgent 方法上 `yield`: const req = request .get('http://local') .auth('tobi', 'learnboost'); const res = yield req; 请注意,SuperAgent 期望全局 `Promise` 对象存在。您需要一个 polyfill 才能在 Internet Explorer 或 Node.js 0.10 中使用 Promise。 ## 浏览器和 node 版本 SuperAgent 有两种实现:一种用于 Web 浏览器(使用 XHR),另一种用于 Node.JS(使用核心 http 模块)。默认情况下,Browserify 和 WebPack 将选择浏览器版本。 如果要使用 WebPack 为 Node.JS 编译代码,您*必须*在其配置中指定[node target](https://webpack.github.io/docs/configuration.html#target)。 ### 在 electron 中使用浏览器版本 [Electron](https://electron.atom.io/) 开发人员报告说,如果您希望使用浏览器版本的 SuperAgent 而不是 Node 版本,您可以 `require('superagent/superagent')`。这样您的请求将显示在 Chrome 开发者工具的"网络(Network)"选项卡中。请注意,自动化测试套件未涵盖此环境,也未得到官方支持。 ## 使用代理发送请求 可以使用另一个作者的 [superagent-proxy](https://www.npmjs.com/package/superagent-proxy) 模块 ## 翻译说明 文档全部内容都是根据原英文文档翻译的,译者也没水平,所以如果有错误还请指出superagent-8.0.5/examples/000077500000000000000000000000001434246777100155365ustar00rootroot00000000000000superagent-8.0.5/examples/simple-get.js000066400000000000000000000004521434246777100201430ustar00rootroot00000000000000/** * Module dependencies. */ const request = require('..'); const url = 'https://gist.githubusercontent.com/reinaldo13/cdbb4d663ba23410a77b/raw/0345267767d50790051951ddc460e2699649de2b/it-works.txt'; request.get(url, (error, res) => { if (error) throw error; console.log(res.text); }); superagent-8.0.5/index.html000066400000000000000000001236531434246777100157270ustar00rootroot00000000000000 SuperAgent — elegant API for AJAX in Node and browsers

SuperAgent

SuperAgent is light-weight progressive ajax API crafted for flexibility, readability, and a low learning curve after being frustrated with many of the existing request APIs. It also works with Node.js!

     request
       .post('/api/pet')
       .send({ name: 'Manny', species: 'cat' })
       .set('X-API-Key', 'foobar')
       .set('Accept', 'application/json')
       .then(res => {
          alert('yay got ' + JSON.stringify(res.body));
       });

Test documentation

中文文档

The following test documentation was generated with Mocha's "doc" reporter, and directly reflects the test suite. This provides an additional source of documentation.

Request basics

A request can be initiated by invoking the appropriate method on the request object, then calling .then() (or .end() or await) to send the request. For example a simple GET request:

     request
       .get('/search')
       .then(res => {
          // res.body, res.headers, res.status
       })
       .catch(err => {
          // err.message, err.response
       });

HTTP method may also be passed as a string:

    request('GET', '/search').then(success, failure);

Old-style callbacks are also supported, but not recommended. Instead of .then() you can call .end():

    request('GET', '/search').end(function(err, res){
      if (res.ok) {}
    });

Absolute URLs can be used. In web browsers absolute URLs work only if the server implements CORS.

     request
       .get('https://example.com/search')
       .then(res => {

       });

The Node client supports making requests to Unix Domain Sockets:

    // pattern: https?+unix://SOCKET_PATH/REQUEST_PATH
    //          Use `%2F` as `/` in SOCKET_PATH
    try {
      const res = await request
        .get('http+unix://%2Fabsolute%2Fpath%2Fto%2Funix.sock/search');
      // res.body, res.headers, res.status
    } catch(err) {
      // err.message, err.response
    }

DELETE, HEAD, PATCH, POST, and PUT requests can also be used, simply change the method name:

    request
      .head('/favicon.ico')
      .then(res => {

      });

DELETE can be also called as .del() for compatibility with old IE where delete is a reserved word.

The HTTP method defaults to GET, so if you wish, the following is valid:

     request('/search', (err, res) => {

     });

Using HTTP/2

To make a request using HTTP/2 protocol only (with no HTTP/1.x fallback), use the .http2() method.

    const request = require('superagent');
    const res = await request
      .get('https://example.com/h2')
      .http2();

Setting header fields

Setting header fields is simple, invoke .set() with a field name and value:

     request
       .get('/search')
       .set('API-Key', 'foobar')
       .set('Accept', 'application/json')
       .then(callback);

You may also pass an object to set several fields in a single call:

     request
       .get('/search')
       .set({ 'API-Key': 'foobar', Accept: 'application/json' })
       .then(callback);

GET requests

The .query() method accepts objects, which when used with the GET method will form a query-string. The following will produce the path /search?query=Manny&range=1..5&order=desc.

     request
       .get('/search')
       .query({ query: 'Manny' })
       .query({ range: '1..5' })
       .query({ order: 'desc' })
       .then(res => {

       });

Or as a single object:

    request
      .get('/search')
      .query({ query: 'Manny', range: '1..5', order: 'desc' })
      .then(res => {

      });

The .query() method accepts strings as well:

      request
        .get('/querystring')
        .query('search=Manny&range=1..5')
        .then(res => {

        });

Or joined:

      request
        .get('/querystring')
        .query('search=Manny')
        .query('range=1..5')
        .then(res => {

        });

HEAD requests

You can also use the .query() method for HEAD requests. The following will produce the path /users?email=joe@smith.com.

      request
        .head('/users')
        .query({ email: 'joe@smith.com' })
        .then(res => {

        });

POST / PUT requests

A typical JSON POST request might look a little like the following, where we set the Content-Type header field appropriately, and "write" some data, in this case just a JSON string.

      request.post('/user')
        .set('Content-Type', 'application/json')
        .send('{"name":"tj","pet":"tobi"}')
        .then(callback)
        .catch(errorCallback)

Since JSON is undoubtedly the most common, it's the default! The following example is equivalent to the previous.

      request.post('/user')
        .send({ name: 'tj', pet: 'tobi' })
        .then(callback, errorCallback)

Or using multiple .send() calls:

      request.post('/user')
        .send({ name: 'tj' })
        .send({ pet: 'tobi' })
        .then(callback, errorCallback)

By default sending strings will set the Content-Type to application/x-www-form-urlencoded, multiple calls will be concatenated with &, here resulting in name=tj&pet=tobi:

      request.post('/user')
        .send('name=tj')
        .send('pet=tobi')
        .then(callback, errorCallback);

SuperAgent formats are extensible, however by default "json" and "form" are supported. To send the data as application/x-www-form-urlencoded simply invoke .type() with "form", where the default is "json". This request will POST the body "name=tj&pet=tobi".

      request.post('/user')
        .type('form')
        .send({ name: 'tj' })
        .send({ pet: 'tobi' })
        .then(callback, errorCallback)

Sending a FormData object is also supported. The following example will POST the content of the HTML form identified by id="myForm":

      request.post('/user')
        .send(new FormData(document.getElementById('myForm')))
        .then(callback, errorCallback)

Setting the Content-Type

The obvious solution is to use the .set() method:

     request.post('/user')
       .set('Content-Type', 'application/json')

As a short-hand the .type() method is also available, accepting the canonicalized MIME type name complete with type/subtype, or simply the extension name such as "xml", "json", "png", etc:

     request.post('/user')
       .type('application/json')

     request.post('/user')
       .type('json')

     request.post('/user')
       .type('png')

Serializing request body

SuperAgent will automatically serialize JSON and forms. You can setup automatic serialization for other types as well:

request.serialize['application/xml'] = function (obj) {
    return 'string generated from obj';
};

// going forward, all requests with a Content-type of
// 'application/xml' will be automatically serialized

If you want to send the payload in a custom format, you can replace the built-in serialization with the .serialize() method on a per-request basis:

request
    .post('/user')
    .send({foo: 'bar'})
    .serialize(obj => {
        return 'string generated from obj';
    });

Retrying requests

When given the .retry() method, SuperAgent will automatically retry requests, if they fail in a way that is transient or could be due to a flaky Internet connection.

This method has two optional arguments: number of retries (default 1) and a callback. It calls callback(err, res) before each retry. The callback may return true/false to control whether the request should be retried (but the maximum number of retries is always applied).

     request
       .get('https://example.com/search')
       .retry(2) // or:
       .retry(2, callback)
       .then(finished);
       .catch(failed);

Use .retry() only with requests that are idempotent (i.e. multiple requests reaching the server won't cause undesirable side effects like duplicate purchases).

All request methods are tried by default (which means if you do not want POST requests to be retried, you will need to pass a custom retry callback).

By default the following status codes are retried:

  • 408
  • 413
  • 429
  • 500
  • 502
  • 503
  • 504
  • 521
  • 522
  • 524

By default the following error codes are retried:

  • 'ETIMEDOUT'
  • 'ECONNRESET'
  • 'EADDRINUSE'
  • 'ECONNREFUSED'
  • 'EPIPE'
  • 'ENOTFOUND'
  • 'ENETUNREACH'
  • 'EAI_AGAIN'

Setting Accept

In a similar fashion to the .type() method it is also possible to set the Accept header via the short hand method .accept(). Which references request.types as well allowing you to specify either the full canonicalized MIME type name as type/subtype, or the extension suffix form as "xml", "json", "png", etc. for convenience:

     request.get('/user')
       .accept('application/json')

     request.get('/user')
       .accept('json')

     request.post('/user')
       .accept('png')

Facebook and Accept JSON

If you are calling Facebook's API, be sure to send an Accept: application/json header in your request. If you don't do this, Facebook will respond with Content-Type: text/javascript; charset=UTF-8, which SuperAgent will not parse and thus res.body will be undefined. You can do this with either req.accept('json') or req.set('Accept', 'application/json'). See issue 1078 for details.

Query strings

req.query(obj) is a method which may be used to build up a query-string. For example populating ?format=json&dest=/login on a POST:

    request
      .post('/')
      .query({ format: 'json' })
      .query({ dest: '/login' })
      .send({ post: 'data', here: 'wahoo' })
      .then(callback);

By default the query string is not assembled in any particular order. An asciibetically-sorted query string can be enabled with req.sortQuery(). You may also provide a custom sorting comparison function with req.sortQuery(myComparisonFn). The comparison function should take 2 arguments and return a negative/zero/positive integer.

 // default order
 request.get('/user')
   .query('name=Nick')
   .query('search=Manny')
   .sortQuery()
   .then(callback)

 // customized sort function
 request.get('/user')
   .query('name=Nick')
   .query('search=Manny')
   .sortQuery((a, b) => a.length - b.length)
   .then(callback)

TLS options

In Node.js SuperAgent supports methods to configure HTTPS requests:

  • .ca(): Set the CA certificate(s) to trust
  • .cert(): Set the client certificate chain(s)
  • .key(): Set the client private key(s)
  • .pfx(): Set the client PFX or PKCS12 encoded private key and certificate chain
  • .disableTLSCerts(): Does not reject expired or invalid TLS certs. Sets internally rejectUnauthorized=true. Be warned, this method allows MITM attacks.

For more information, see Node.js https.request docs.

var key = fs.readFileSync('key.pem'),
    cert = fs.readFileSync('cert.pem');

request
  .post('/client-auth')
  .key(key)
  .cert(cert)
  .then(callback);
var ca = fs.readFileSync('ca.cert.pem');

request
  .post('https://localhost/private-ca-server')
  .ca(ca)
  .then(res => {});

Parsing response bodies

SuperAgent will parse known response-body data for you, currently supporting application/x-www-form-urlencoded, application/json, and multipart/form-data. You can setup automatic parsing for other response-body data as well:

//browser
request.parse['application/xml'] = function (str) {
    return {'object': 'parsed from str'};
};

//node
request.parse['application/xml'] = function (res, cb) {
    //parse response text and set res.body here

    cb(null, res);
};

//going forward, responses of type 'application/xml'
//will be parsed automatically

You can set a custom parser (that takes precedence over built-in parsers) with the .buffer(true).parse(fn) method. If response buffering is not enabled (.buffer(false)) then the response event will be emitted without waiting for the body parser to finish, so response.body won't be available.

JSON / Urlencoded

The property res.body is the parsed object, for example if a request responded with the JSON string '{"user":{"name":"tobi"}}', res.body.user.name would be "tobi". Likewise the x-www-form-urlencoded value of "user[name]=tobi" would yield the same result. Only one level of nesting is supported. If you need more complex data, send JSON instead.

Arrays are sent by repeating the key. .send({color: ['red','blue']}) sends color=red&color=blue. If you want the array keys to contain [] in their name, you must add it yourself, as SuperAgent doesn't add it automatically.

Multipart

The Node client supports multipart/form-data via the Formidable module. When parsing multipart responses, the object res.files is also available to you. Suppose for example a request responds with the following multipart body:

--whoop
Content-Disposition: attachment; name="image"; filename="tobi.png"
Content-Type: image/png

... data here ...
--whoop
Content-Disposition: form-data; name="name"
Content-Type: text/plain

Tobi
--whoop--

You would have the values res.body.name provided as "Tobi", and res.files.image as a File object containing the path on disk, filename, and other properties.

Binary

In browsers, you may use .responseType('blob') to request handling of binary response bodies. This API is unnecessary when running in node.js. The supported argument values for this method are

  • 'blob' passed through to the XmlHTTPRequest responseType property
  • 'arraybuffer' passed through to the XmlHTTPRequest responseType property
req.get('/binary.data')
  .responseType('blob')
  .then(res => {
    // res.body will be a browser native Blob type here
  });

For more information, see the Mozilla Developer Network xhr.responseType docs.

Response properties

Many helpful flags and properties are set on the Response object, ranging from the response text, parsed response body, header fields, status flags and more.

Response text

The res.text property contains the unparsed response body string. This property is always present for the client API, and only when the mime type matches "text/", "/json", or "x-www-form-urlencoded" by default for node. The reasoning is to conserve memory, as buffering text of large bodies such as multipart files or images is extremely inefficient. To force buffering see the "Buffering responses" section.

Response body

Much like SuperAgent can auto-serialize request data, it can also automatically parse it. When a parser is defined for the Content-Type, it is parsed, which by default includes "application/json" and "application/x-www-form-urlencoded". The parsed object is then available via res.body.

Response header fields

The res.header contains an object of parsed header fields, lowercasing field names much like node does. For example res.header['content-length'].

Response Content-Type

The Content-Type response header is special-cased, providing res.type, which is void of the charset (if any). For example the Content-Type of "text/html; charset=utf8" will provide "text/html" as res.type, and the res.charset property would then contain "utf8".

Response status

The response status flags help determine if the request was a success, among other useful information, making SuperAgent ideal for interacting with RESTful web services. These flags are currently defined as:

     var type = status / 100 | 0;

     // status / class
     res.status = status;
     res.statusType = type;

     // basics
     res.info = 1 == type;
     res.ok = 2 == type;
     res.clientError = 4 == type;
     res.serverError = 5 == type;
     res.error = 4 == type || 5 == type;

     // sugar
     res.accepted = 202 == status;
     res.noContent = 204 == status || 1223 == status;
     res.badRequest = 400 == status;
     res.unauthorized = 401 == status;
     res.notAcceptable = 406 == status;
     res.notFound = 404 == status;
     res.forbidden = 403 == status;

Aborting requests

To abort requests simply invoke the req.abort() method.

Timeouts

Sometimes networks and servers get "stuck" and never respond after accepting a request. Set timeouts to avoid requests waiting forever.

  • req.timeout({deadline:ms}) or req.timeout(ms) (where ms is a number of milliseconds > 0) sets a deadline for the entire request (including all uploads, redirects, server processing time) to complete. If the response isn't fully downloaded within that time, the request will be aborted.

  • req.timeout({response:ms}) sets maximum time to wait for the first byte to arrive from the server, but it does not limit how long the entire download can take. Response timeout should be at least few seconds longer than just the time it takes the server to respond, because it also includes time to make DNS lookup, TCP/IP and TLS connections, and time to upload request data.

You should use both deadline and response timeouts. This way you can use a short response timeout to detect unresponsive networks quickly, and a long deadline to give time for downloads on slow, but reliable, networks. Note that both of these timers limit how long uploads of attached files are allowed to take. Use long timeouts if you're uploading files.

    request
      .get('/big-file?network=slow')
      .timeout({
        response: 5000,  // Wait 5 seconds for the server to start sending,
        deadline: 60000, // but allow 1 minute for the file to finish loading.
      })
      .then(res => {
          /* responded in time */
        }, err => {
          if (err.timeout) { /* timed out! */ } else { /* other error */ }
      });

Timeout errors have a .timeout property.

Authentication

In both Node and browsers auth available via the .auth() method:

    request
      .get('http://local')
      .auth('tobi', 'learnboost')
      .then(callback);

In the Node client Basic auth can be in the URL as "user:pass":

    request.get('http://tobi:learnboost@local').then(callback);

By default only Basic auth is used. In browser you can add {type:'auto'} to enable all methods built-in in the browser (Digest, NTLM, etc.):

    request.auth('digest', 'secret', {type:'auto'})

The auth method also supports a type of bearer, to specify token-based authentication:

    request.auth('my_token', { type: 'bearer' })

Following redirects

By default up to 5 redirects will be followed, however you may specify this with the res.redirects(n) method:

    const response = await request.get('/some.png').redirects(2);

Redirects exceeding the limit are treated as errors. Use .ok(res => res.status < 400) to read them as successful responses.

Agents for global state

Saving cookies

In Node SuperAgent does not save cookies by default, but you can use the .agent() method to create a copy of SuperAgent that saves cookies. Each copy has a separate cookie jar.

    const agent = request.agent();
    agent
      .post('/login')
      .then(() => {
        return agent.get('/cookied-page');
      });

In browsers cookies are managed automatically by the browser, so the .agent() does not isolate cookies.

Default options for multiple requests

Regular request methods called on the agent will be used as defaults for all requests made by that agent.

    const agent = request.agent()
      .use(plugin)
      .auth(shared);

    await agent.get('/with-plugin-and-auth');
    await agent.get('/also-with-plugin-and-auth');

The complete list of methods that the agent can use to set defaults is: use, on, once, set, query, type, accept, auth, withCredentials, sortQuery, retry, ok, redirects, timeout, buffer, serialize, parse, ca, key, pfx, cert.

Piping data

The Node client allows you to pipe data to and from the request. Please note that .pipe() is used instead of .end()/.then() methods.

For example piping a file's contents as the request:

    const request = require('superagent');
    const fs = require('fs');

    const stream = fs.createReadStream('path/to/my.json');
    const req = request.post('/somewhere');
    req.type('json');
    stream.pipe(req);

Note that when you pipe to a request, superagent sends the piped data with chunked transfer encoding, which isn't supported by all servers (for instance, Python WSGI servers).

Or piping the response to a file:

    const stream = fs.createWriteStream('path/to/my.json');
    const req = request.get('/some.json');
    req.pipe(stream);

It's not possible to mix pipes and callbacks or promises. Note that you should NOT attempt to pipe the result of .end() or the Response object:

    // Don't do either of these:
    const stream = getAWritableStream();
    const req = request
      .get('/some.json')
      // BAD: this pipes garbage to the stream and fails in unexpected ways
      .end((err, this_does_not_work) => this_does_not_work.pipe(stream))
    const req = request
      .get('/some.json')
      .end()
      // BAD: this is also unsupported, .pipe calls .end for you.
      .pipe(nope_its_too_late);

In a future version of superagent, improper calls to pipe() will fail.

Multipart requests

SuperAgent is also great for building multipart requests for which it provides methods .attach() and .field().

When you use .field() or .attach() you can't use .send() and you must not set Content-Type (the correct type will be set for you).

Attaching files

To send a file use .attach(name, [file], [options]). You can attach multiple files by calling .attach multiple times. The arguments are:

  • name — field name in the form.
  • file — either string with file path or Blob/Buffer object.
  • options — (optional) either string with custom file name or {filename: string} object. In Node also {contentType: 'mime/type'} is supported. In browser create a Blob with an appropriate type instead.

    request
      .post('/upload')
      .attach('image1', 'path/to/felix.jpeg')
      .attach('image2', imageBuffer, 'luna.jpeg')
      .field('caption', 'My cats')
      .then(callback);

Field values

Much like form fields in HTML, you can set field values with .field(name, value) and .field({name: value}). Suppose you want to upload a few images with your name and email, your request might look something like this:

     request
       .post('/upload')
       .field('user[name]', 'Tobi')
       .field('user[email]', 'tobi@learnboost.com')
       .field('friends[]', ['loki', 'jane'])
       .attach('image', 'path/to/tobi.png')
       .then(callback);

Compression

The node client supports compressed responses, best of all, you don't have to do anything! It just works.

Buffering responses

To force buffering of response bodies as res.text you may invoke req.buffer(). To undo the default of buffering for text responses such as "text/plain", "text/html" etc you may invoke req.buffer(false).

When buffered the res.buffered flag is provided, you may use this to handle both buffered and unbuffered responses in the same callback.

CORS

For security reasons, browsers will block cross-origin requests unless the server opts-in using CORS headers. Browsers will also make extra OPTIONS requests to check what HTTP headers and methods are allowed by the server. Read more about CORS.

The .withCredentials() method enables the ability to send cookies from the origin, however only when Access-Control-Allow-Origin is not a wildcard ("*"), and Access-Control-Allow-Credentials is "true".

    request
      .get('https://api.example.com:4001/')
      .withCredentials()
      .then(res => {
        assert.equal(200, res.status);
        assert.equal('tobi', res.text);
      })

Error handling

Your callback function will always be passed two arguments: error and response. If no error occurred, the first argument will be null:

    request
     .post('/upload')
     .attach('image', 'path/to/tobi.png')
     .then(res => {

     });

An "error" event is also emitted, with you can listen for:

    request
      .post('/upload')
      .attach('image', 'path/to/tobi.png')
      .on('error', handle)
      .then(res => {

      });

Note that superagent considers 4xx and 5xx responses (as well as unhandled 3xx responses) errors by default. For example, if you get a 304 Not modified, 403 Forbidden or 500 Internal server error response, this status information will be available via err.status. Errors from such responses also contain an err.response field with all of the properties mentioned in "Response properties". The library behaves in this way to handle the common case of wanting success responses and treating HTTP error status codes as errors while still allowing for custom logic around specific error conditions.

Network failures, timeouts, and other errors that produce no response will contain no err.status or err.response fields.

If you wish to handle 404 or other HTTP error responses, you can query the err.status property. When an HTTP error occurs (4xx or 5xx response) the res.error property is an Error object, this allows you to perform checks such as:

    if (err && err.status === 404) {
      alert('oh no ' + res.body.message);
    }
    else if (err) {
      // all other error types we handle generically
    }

Alternatively, you can use the .ok(callback) method to decide whether a response is an error or not. The callback to the ok function gets a response and returns true if the response should be interpreted as success.

    request.get('/404')
      .ok(res => res.status < 500)
      .then(response => {
        // reads 404 page as a successful response
      })

Progress tracking

SuperAgent fires progress events on upload and download of large files.

    request.post(url)
      .attach('field_name', file)
      .on('progress', event => {
        /* the event is:
        {
          direction: "upload" or "download"
          percent: 0 to 100 // may be missing if file size is unknown
          total: // total file size, may be missing
          loaded: // bytes downloaded or uploaded so far
        } */
      })
      .then()

Testing on localhost

Forcing specific connection IP address

In Node.js it's possible to ignore DNS resolution and direct all requests to a specific IP address using .connect() method. For example, this request will go to localhost instead of example.com:

    const res = await request.get("http://example.com").connect("127.0.0.1");

Because the request may be redirected, it's possible to specify multiple hostnames and multiple IPs, as well as a special * as the fallback (note: other wildcards are not supported). The requests will keep their Host header with the original value. .connect(undefined) turns off the feature.

    const res = await request.get("http://redir.example.com:555")
      .connect({
        "redir.example.com": "127.0.0.1", // redir.example.com:555 will use 127.0.0.1:555
        "www.example.com": false, // don't override this one; use DNS as normal
        "mapped.example.com": { host: "127.0.0.1", port: 8080}, // mapped.example.com:* will use 127.0.0.1:8080
        "*": "proxy.example.com", // all other requests will go to this host
      });

Ignoring broken/insecure HTTPS on localhost

In Node.js, when HTTPS is misconfigured and insecure (e.g. using self-signed certificate without specifying own .ca()), it's still possible to permit requests to localhost by calling .trustLocalhost():

    const res = await request.get("https://localhost").trustLocalhost()

Together with .connect("127.0.0.1") this may be used to force HTTPS requests to any domain to be re-routed to localhost instead.

It's generally safe to ignore broken HTTPS on localhost, because the loopback interface is not exposed to untrusted networks. Trusting localhost may become the default in the future. Use .trustLocalhost(false) to force check of 127.0.0.1's authenticity.

We intentionally don't support disabling of HTTPS security when making requests to any other IP, because such options end up abused as a quick "fix" for HTTPS problems. You can get free HTTPS certificates from Let's Encrypt or set your own CA (.ca(ca_public_pem)) to make your self-signed certificates trusted.

Promise and Generator support

SuperAgent's request is a "thenable" object that's compatible with JavaScript promises and the async/await syntax.

    const res = await request.get(url);

If you're using promises, do not call .end() or .pipe(). Any use of .then() or await disables all other ways of using the request.

Libraries like co or a web framework like koa can yield on any SuperAgent method:

    const req = request
      .get('http://local')
      .auth('tobi', 'learnboost');
    const res = yield req;

Note that SuperAgent expects the global Promise object to be present. You'll need to use v7 and a polyfill to use promises in Internet Explorer or Node.js 0.10.

We have dropped support in v8 for IE. You must add a polyfill for WeakRef and BigInt if you wish to support Opera 85, iOS Safari 12.2-12.5, for example using https://polyfill.io:

<script src="https://polyfill.io/v3/polyfill.min.js?features=WeakRef,BigInt"></script>

Browser and node versions

SuperAgent has two implementations: one for web browsers (using XHR) and one for Node.JS (using core http module). By default Browserify and WebPack will pick the browser version.

If want to use WebPack to compile code for Node.JS, you must specify node target in its configuration.

Fork me on GitHub superagent-8.0.5/package.json000066400000000000000000000075071434246777100162170ustar00rootroot00000000000000{ "name": "superagent", "description": "elegant & feature rich browser / node HTTP with a fluent API", "version": "8.0.5", "author": "TJ Holowaychuk ", "browser": { "./src/node/index.js": "./src/client.js", "./lib/node/index.js": "./lib/client.js", "./test/support/server.js": "./test/support/blank.js", "semver": false }, "bugs": { "url": "https://github.com/ladjs/superagent/issues" }, "contributors": [ "Kornel Lesiński ", "Peter Lyons ", "Hunter Loftis ", "Nick Baugh " ], "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.3", "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", "formidable": "^2.0.1", "methods": "^1.1.2", "mime": "2.6.0", "qs": "^6.11.0", "semver": "^7.3.8" }, "devDependencies": { "@babel/cli": "^7.19.3", "@babel/core": "^7.19.6", "@babel/plugin-transform-runtime": "^7.19.6", "@babel/preset-env": "^7.19.4", "@babel/runtime": "^7.19.4", "@commitlint/cli": "17", "@commitlint/config-conventional": "17", "Base64": "^1.1.0", "babelify": "^10.0.0", "basic-auth-connect": "^1.0.0", "body-parser": "^1.20.1", "browserify": "^17.0.0", "cookie-parser": "^1.4.6", "cross-env": "^7.0.3", "eslint": "^8.26.0", "eslint-config-xo-lass": "2", "eslint-plugin-compat": "^4.0.2", "eslint-plugin-node": "^11.1.0", "express": "^4.18.2", "express-session": "^1.17.3", "fixpack": "^4.0.0", "get-port": "4.2.0", "husky": "7", "lint-staged": "12", "marked": "^4.1.1", "mocha": "^6.2.3", "multer": "1.4.5-lts.1", "nyc": "^15.1.0", "remark-cli": "^11.0.0", "remark-preset-github": "4.0.4", "rimraf": "^3.0.2", "should": "^13.2.3", "should-http": "^0.1.1", "tinyify": "3.0.0", "xo": "^0.52.4", "zuul": "^3.12.0" }, "engines": { "node": ">=6.4.0 <13 || >=14" }, "files": [ "dist/*.js", "lib/**/*.js" ], "homepage": "https://github.com/ladjs/superagent", "jsdelivr": "dist/superagent.min.js", "keywords": [ "agent", "ajax", "ajax", "api", "async", "await", "axios", "cancel", "client", "frisbee", "got", "http", "http", "https", "ky", "promise", "promise", "promises", "request", "request", "requests", "response", "rest", "retry", "super", "superagent", "timeout", "transform", "xhr", "xmlhttprequest" ], "license": "MIT", "main": "lib/node/index.js", "repository": { "type": "git", "url": "git://github.com/ladjs/superagent.git" }, "scripts": { "browserify": "browserify src/node/index.js -o dist/superagent.js -s superagent -g [ babelify --configFile ./.dist.babelrc ]", "build": "npm run build:clean && npm run build:lib && npm run build:dist", "build:clean": "rimraf lib dist", "build:dist": "npm run browserify && npm run minify", "build:lib": "babel --config-file ./.lib.babelrc src --out-dir lib", "build:test": "babel --config-file ./.test.babelrc test --out-dir lib/node/test", "coverage": "nyc report --reporter=text-lcov > coverage.lcov", "lint": "eslint -c .eslintrc src test && remark . -qfo && eslint -c .lib.eslintrc lib/**/*.js && eslint -c .dist.eslintrc dist/**/*.js", "minify": "cross-env NODE_ENV=production browserify src/node/index.js -o dist/superagent.min.js -s superagent -g [ babelify --configFile ./.dist.babelrc ] -p tinyify", "nyc": "cross-env NODE_ENV=test nyc ava", "prepare": "husky install", "test": "npm run build && npm run lint && make test", "test-http2": "npm run build && npm run lint && make test-node-http2" }, "unpkg": "dist/superagent.min.js" } superagent-8.0.5/src/000077500000000000000000000000001434246777100145075ustar00rootroot00000000000000superagent-8.0.5/src/agent-base.js000066400000000000000000000012041434246777100170500ustar00rootroot00000000000000function Agent() { this._defaults = []; } for (const fn of [ 'use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts' ]) { // Default setting for all requests from this agent Agent.prototype[fn] = function (...args) { this._defaults.push({ fn, args }); return this; }; } Agent.prototype._setDefaults = function (request) { for (const def of this._defaults) { request[def.fn](...def.args); } }; module.exports = Agent; superagent-8.0.5/src/client.js000066400000000000000000000552201434246777100163270ustar00rootroot00000000000000/** * Root reference for iframes. */ let root; if (typeof window !== 'undefined') { // Browser window root = window; } else if (typeof self === 'undefined') { // Other environments console.warn( 'Using browser-only version of superagent in non-browser environment' ); root = this; } else { // Web Worker root = self; } const Emitter = require('component-emitter'); const safeStringify = require('fast-safe-stringify'); const qs = require('qs'); const RequestBase = require('./request-base'); const { isObject, mixin, hasOwn } = require('./utils'); const ResponseBase = require('./response-base'); const Agent = require('./agent-base'); /** * Noop. */ function noop() {} /** * Expose `request`. */ module.exports = function (method, url) { // callback if (typeof url === 'function') { return new exports.Request('GET', method).end(url); } // url first if (arguments.length === 1) { return new exports.Request('GET', method); } return new exports.Request(method, url); }; exports = module.exports; const request = exports; exports.Request = Request; /** * Determine XHR. */ request.getXHR = () => { if (root.XMLHttpRequest) { return new root.XMLHttpRequest(); } throw new Error('Browser-only version of superagent could not find XHR'); }; /** * Removes leading and trailing whitespace, added to support IE. * * @param {String} s * @return {String} * @api private */ const trim = ''.trim ? (s) => s.trim() : (s) => s.replace(/(^\s*|\s*$)/g, ''); /** * Serialize the given `obj`. * * @param {Object} obj * @return {String} * @api private */ function serialize(object) { if (!isObject(object)) return object; const pairs = []; for (const key in object) { if (hasOwn(object, key)) pushEncodedKeyValuePair(pairs, key, object[key]); } return pairs.join('&'); } /** * Helps 'serialize' with serializing arrays. * Mutates the pairs array. * * @param {Array} pairs * @param {String} key * @param {Mixed} val */ function pushEncodedKeyValuePair(pairs, key, value) { if (value === undefined) return; if (value === null) { pairs.push(encodeURI(key)); return; } if (Array.isArray(value)) { for (const v of value) { pushEncodedKeyValuePair(pairs, key, v); } } else if (isObject(value)) { for (const subkey in value) { if (hasOwn(value, subkey)) pushEncodedKeyValuePair(pairs, `${key}[${subkey}]`, value[subkey]); } } else { pairs.push(encodeURI(key) + '=' + encodeURIComponent(value)); } } /** * Expose serialization method. */ request.serializeObject = serialize; /** * Parse the given x-www-form-urlencoded `str`. * * @param {String} str * @return {Object} * @api private */ function parseString(string_) { const object = {}; const pairs = string_.split('&'); let pair; let pos; for (let i = 0, length_ = pairs.length; i < length_; ++i) { pair = pairs[i]; pos = pair.indexOf('='); if (pos === -1) { object[decodeURIComponent(pair)] = ''; } else { object[decodeURIComponent(pair.slice(0, pos))] = decodeURIComponent( pair.slice(pos + 1) ); } } return object; } /** * Expose parser. */ request.parseString = parseString; /** * Default MIME type map. * * superagent.types.xml = 'application/xml'; * */ request.types = { html: 'text/html', json: 'application/json', xml: 'text/xml', urlencoded: 'application/x-www-form-urlencoded', form: 'application/x-www-form-urlencoded', 'form-data': 'application/x-www-form-urlencoded' }; /** * Default serialization map. * * superagent.serialize['application/xml'] = function(obj){ * return 'generated xml here'; * }; * */ request.serialize = { 'application/x-www-form-urlencoded': qs.stringify, 'application/json': safeStringify }; /** * Default parsers. * * superagent.parse['application/xml'] = function(str){ * return { object parsed from str }; * }; * */ request.parse = { 'application/x-www-form-urlencoded': parseString, 'application/json': JSON.parse }; /** * Parse the given header `str` into * an object containing the mapped fields. * * @param {String} str * @return {Object} * @api private */ function parseHeader(string_) { const lines = string_.split(/\r?\n/); const fields = {}; let index; let line; let field; let value; for (let i = 0, length_ = lines.length; i < length_; ++i) { line = lines[i]; index = line.indexOf(':'); if (index === -1) { // could be empty line, just skip it continue; } field = line.slice(0, index).toLowerCase(); value = trim(line.slice(index + 1)); fields[field] = value; } return fields; } /** * Check if `mime` is json or has +json structured syntax suffix. * * @param {String} mime * @return {Boolean} * @api private */ function isJSON(mime) { // should match /json or +json // but not /json-seq return /[/+]json($|[^-\w])/i.test(mime); } /** * Initialize a new `Response` with the given `xhr`. * * - set flags (.ok, .error, etc) * - parse header * * Examples: * * Aliasing `superagent` as `request` is nice: * * request = superagent; * * We can use the promise-like API, or pass callbacks: * * request.get('/').end(function(res){}); * request.get('/', function(res){}); * * Sending data can be chained: * * request * .post('/user') * .send({ name: 'tj' }) * .end(function(res){}); * * Or passed to `.send()`: * * request * .post('/user') * .send({ name: 'tj' }, function(res){}); * * Or passed to `.post()`: * * request * .post('/user', { name: 'tj' }) * .end(function(res){}); * * Or further reduced to a single call for simple cases: * * request * .post('/user', { name: 'tj' }, function(res){}); * * @param {XMLHTTPRequest} xhr * @param {Object} options * @api private */ function Response(request_) { this.req = request_; this.xhr = this.req.xhr; // responseText is accessible only if responseType is '' or 'text' and on older browsers this.text = (this.req.method !== 'HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || typeof this.xhr.responseType === 'undefined' ? this.xhr.responseText : null; this.statusText = this.req.xhr.statusText; let { status } = this.xhr; // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request if (status === 1223) { status = 204; } this._setStatusProperties(status); this.headers = parseHeader(this.xhr.getAllResponseHeaders()); this.header = this.headers; // getAllResponseHeaders sometimes falsely returns "" for CORS requests, but // getResponseHeader still works. so we get content-type even if getting // other headers fails. this.header['content-type'] = this.xhr.getResponseHeader('content-type'); this._setHeaderProperties(this.header); if (this.text === null && request_._responseType) { this.body = this.xhr.response; } else { this.body = this.req.method === 'HEAD' ? null : this._parseBody(this.text ? this.text : this.xhr.response); } } mixin(Response.prototype, ResponseBase.prototype); /** * Parse the given body `str`. * * Used for auto-parsing of bodies. Parsers * are defined on the `superagent.parse` object. * * @param {String} str * @return {Mixed} * @api private */ Response.prototype._parseBody = function (string_) { let parse = request.parse[this.type]; if (this.req._parser) { return this.req._parser(this, string_); } if (!parse && isJSON(this.type)) { parse = request.parse['application/json']; } return parse && string_ && (string_.length > 0 || string_ instanceof Object) ? parse(string_) : null; }; /** * Return an `Error` representative of this response. * * @return {Error} * @api public */ Response.prototype.toError = function () { const { req } = this; const { method } = req; const { url } = req; const message = `cannot ${method} ${url} (${this.status})`; const error = new Error(message); error.status = this.status; error.method = method; error.url = url; return error; }; /** * Expose `Response`. */ request.Response = Response; /** * Initialize a new `Request` with the given `method` and `url`. * * @param {String} method * @param {String} url * @api public */ function Request(method, url) { const self = this; this._query = this._query || []; this.method = method; this.url = url; this.header = {}; // preserves header name case this._header = {}; // coerces header names to lowercase this.on('end', () => { let error = null; let res = null; try { res = new Response(self); } catch (err) { error = new Error('Parser is unable to parse the response'); error.parse = true; error.original = err; // issue #675: return the raw response if the response parsing fails if (self.xhr) { // ie9 doesn't have 'response' property error.rawResponse = typeof self.xhr.responseType === 'undefined' ? self.xhr.responseText : self.xhr.response; // issue #876: return the http status code if the response parsing fails error.status = self.xhr.status ? self.xhr.status : null; error.statusCode = error.status; // backwards-compat only } else { error.rawResponse = null; error.status = null; } return self.callback(error); } self.emit('response', res); let new_error; try { if (!self._isResponseOK(res)) { new_error = new Error( res.statusText || res.text || 'Unsuccessful HTTP response' ); } } catch (err) { new_error = err; // ok() callback can throw } // #1000 don't catch errors from the callback to avoid double calling it if (new_error) { new_error.original = error; new_error.response = res; new_error.status = new_error.status || res.status; self.callback(new_error, res); } else { self.callback(null, res); } }); } /** * Mixin `Emitter` and `RequestBase`. */ // eslint-disable-next-line new-cap Emitter(Request.prototype); mixin(Request.prototype, RequestBase.prototype); /** * Set Content-Type to `type`, mapping values from `request.types`. * * Examples: * * superagent.types.xml = 'application/xml'; * * request.post('/') * .type('xml') * .send(xmlstring) * .end(callback); * * request.post('/') * .type('application/xml') * .send(xmlstring) * .end(callback); * * @param {String} type * @return {Request} for chaining * @api public */ Request.prototype.type = function (type) { this.set('Content-Type', request.types[type] || type); return this; }; /** * Set Accept to `type`, mapping values from `request.types`. * * Examples: * * superagent.types.json = 'application/json'; * * request.get('/agent') * .accept('json') * .end(callback); * * request.get('/agent') * .accept('application/json') * .end(callback); * * @param {String} accept * @return {Request} for chaining * @api public */ Request.prototype.accept = function (type) { this.set('Accept', request.types[type] || type); return this; }; /** * Set Authorization field value with `user` and `pass`. * * @param {String} user * @param {String} [pass] optional in case of using 'bearer' as type * @param {Object} options with 'type' property 'auto', 'basic' or 'bearer' (default 'basic') * @return {Request} for chaining * @api public */ Request.prototype.auth = function (user, pass, options) { if (arguments.length === 1) pass = ''; if (typeof pass === 'object' && pass !== null) { // pass is optional and can be replaced with options options = pass; pass = ''; } if (!options) { options = { type: typeof btoa === 'function' ? 'basic' : 'auto' }; } const encoder = options.encoder ? options.encoder : (string) => { if (typeof btoa === 'function') { return btoa(string); } throw new Error('Cannot use basic auth, btoa is not a function'); }; return this._auth(user, pass, options, encoder); }; /** * Add query-string `val`. * * Examples: * * request.get('/shoes') * .query('size=10') * .query({ color: 'blue' }) * * @param {Object|String} val * @return {Request} for chaining * @api public */ Request.prototype.query = function (value) { if (typeof value !== 'string') value = serialize(value); if (value) this._query.push(value); return this; }; /** * Queue the given `file` as an attachment to the specified `field`, * with optional `options` (or filename). * * ``` js * request.post('/upload') * .attach('content', new Blob(['hey!'], { type: "text/html"})) * .end(callback); * ``` * * @param {String} field * @param {Blob|File} file * @param {String|Object} options * @return {Request} for chaining * @api public */ Request.prototype.attach = function (field, file, options) { if (file) { if (this._data) { throw new Error("superagent can't mix .send() and .attach()"); } this._getFormData().append(field, file, options || file.name); } return this; }; Request.prototype._getFormData = function () { if (!this._formData) { this._formData = new root.FormData(); } return this._formData; }; /** * Invoke the callback with `err` and `res` * and handle arity check. * * @param {Error} err * @param {Response} res * @api private */ Request.prototype.callback = function (error, res) { if (this._shouldRetry(error, res)) { return this._retry(); } const fn = this._callback; this.clearTimeout(); if (error) { if (this._maxRetries) error.retries = this._retries - 1; this.emit('error', error); } fn(error, res); }; /** * Invoke callback with x-domain error. * * @api private */ Request.prototype.crossDomainError = function () { const error = new Error( 'Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.' ); error.crossDomain = true; error.status = this.status; error.method = this.method; error.url = this.url; this.callback(error); }; // This only warns, because the request is still likely to work Request.prototype.agent = function () { console.warn('This is not supported in browser version of superagent'); return this; }; Request.prototype.ca = Request.prototype.agent; Request.prototype.buffer = Request.prototype.ca; // This throws, because it can't send/receive data as expected Request.prototype.write = () => { throw new Error( 'Streaming is not supported in browser version of superagent' ); }; Request.prototype.pipe = Request.prototype.write; /** * Check if `obj` is a host object, * we don't want to serialize these :) * * @param {Object} obj host object * @return {Boolean} is a host object * @api private */ Request.prototype._isHost = function (object) { // Native objects stringify to [object File], [object Blob], [object FormData], etc. return ( object && typeof object === 'object' && !Array.isArray(object) && Object.prototype.toString.call(object) !== '[object Object]' ); }; /** * Initiate request, invoking callback `fn(res)` * with an instanceof `Response`. * * @param {Function} fn * @return {Request} for chaining * @api public */ Request.prototype.end = function (fn) { if (this._endCalled) { console.warn( 'Warning: .end() was called twice. This is not supported in superagent' ); } this._endCalled = true; // store callback this._callback = fn || noop; // querystring this._finalizeQueryString(); this._end(); }; Request.prototype._setUploadTimeout = function () { const self = this; // upload timeout it's wokrs only if deadline timeout is off if (this._uploadTimeout && !this._uploadTimeoutTimer) { this._uploadTimeoutTimer = setTimeout(() => { self._timeoutError( 'Upload timeout of ', self._uploadTimeout, 'ETIMEDOUT' ); }, this._uploadTimeout); } }; // eslint-disable-next-line complexity Request.prototype._end = function () { if (this._aborted) return this.callback( new Error('The request has been aborted even before .end() was called') ); const self = this; this.xhr = request.getXHR(); const { xhr } = this; let data = this._formData || this._data; this._setTimeouts(); // state change xhr.addEventListener('readystatechange', () => { const { readyState } = xhr; if (readyState >= 2 && self._responseTimeoutTimer) { clearTimeout(self._responseTimeoutTimer); } if (readyState !== 4) { return; } // In IE9, reads to any property (e.g. status) off of an aborted XHR will // result in the error "Could not complete the operation due to error c00c023f" let status; try { status = xhr.status; } catch (err) { status = 0; } if (!status) { if (self.timedout || self._aborted) return; return self.crossDomainError(); } self.emit('end'); }); // progress const handleProgress = (direction, e) => { if (e.total > 0) { e.percent = (e.loaded / e.total) * 100; if (e.percent === 100) { clearTimeout(self._uploadTimeoutTimer); } } e.direction = direction; self.emit('progress', e); }; if (this.hasListeners('progress')) { try { xhr.addEventListener('progress', handleProgress.bind(null, 'download')); if (xhr.upload) { xhr.upload.addEventListener( 'progress', handleProgress.bind(null, 'upload') ); } } catch (err) { // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. // Reported here: // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context } } if (xhr.upload) { this._setUploadTimeout(); } // initiate request try { if (this.username && this.password) { xhr.open(this.method, this.url, true, this.username, this.password); } else { xhr.open(this.method, this.url, true); } } catch (err) { // see #1149 return this.callback(err); } // CORS if (this._withCredentials) xhr.withCredentials = true; // body if ( !this._formData && this.method !== 'GET' && this.method !== 'HEAD' && typeof data !== 'string' && !this._isHost(data) ) { // serialize stuff const contentType = this._header['content-type']; let serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : '']; if (!serialize && isJSON(contentType)) { serialize = request.serialize['application/json']; } if (serialize) data = serialize(data); } // set header fields for (const field in this.header) { if (this.header[field] === null) continue; if (hasOwn(this.header, field)) xhr.setRequestHeader(field, this.header[field]); } if (this._responseType) { xhr.responseType = this._responseType; } // send stuff this.emit('request', this); // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) // We need null here if data is undefined xhr.send(typeof data === 'undefined' ? null : data); }; request.agent = () => new Agent(); for (const method of ['GET', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE']) { Agent.prototype[method.toLowerCase()] = function (url, fn) { const request_ = new request.Request(method, url); this._setDefaults(request_); if (fn) { request_.end(fn); } return request_; }; } Agent.prototype.del = Agent.prototype.delete; /** * GET `url` with optional callback `fn(res)`. * * @param {String} url * @param {Mixed|Function} [data] or fn * @param {Function} [fn] * @return {Request} * @api public */ request.get = (url, data, fn) => { const request_ = request('GET', url); if (typeof data === 'function') { fn = data; data = null; } if (data) request_.query(data); if (fn) request_.end(fn); return request_; }; /** * HEAD `url` with optional callback `fn(res)`. * * @param {String} url * @param {Mixed|Function} [data] or fn * @param {Function} [fn] * @return {Request} * @api public */ request.head = (url, data, fn) => { const request_ = request('HEAD', url); if (typeof data === 'function') { fn = data; data = null; } if (data) request_.query(data); if (fn) request_.end(fn); return request_; }; /** * OPTIONS query to `url` with optional callback `fn(res)`. * * @param {String} url * @param {Mixed|Function} [data] or fn * @param {Function} [fn] * @return {Request} * @api public */ request.options = (url, data, fn) => { const request_ = request('OPTIONS', url); if (typeof data === 'function') { fn = data; data = null; } if (data) request_.send(data); if (fn) request_.end(fn); return request_; }; /** * DELETE `url` with optional `data` and callback `fn(res)`. * * @param {String} url * @param {Mixed} [data] * @param {Function} [fn] * @return {Request} * @api public */ function del(url, data, fn) { const request_ = request('DELETE', url); if (typeof data === 'function') { fn = data; data = null; } if (data) request_.send(data); if (fn) request_.end(fn); return request_; } request.del = del; request.delete = del; /** * PATCH `url` with optional `data` and callback `fn(res)`. * * @param {String} url * @param {Mixed} [data] * @param {Function} [fn] * @return {Request} * @api public */ request.patch = (url, data, fn) => { const request_ = request('PATCH', url); if (typeof data === 'function') { fn = data; data = null; } if (data) request_.send(data); if (fn) request_.end(fn); return request_; }; /** * POST `url` with optional `data` and callback `fn(res)`. * * @param {String} url * @param {Mixed} [data] * @param {Function} [fn] * @return {Request} * @api public */ request.post = (url, data, fn) => { const request_ = request('POST', url); if (typeof data === 'function') { fn = data; data = null; } if (data) request_.send(data); if (fn) request_.end(fn); return request_; }; /** * PUT `url` with optional `data` and callback `fn(res)`. * * @param {String} url * @param {Mixed|Function} [data] or fn * @param {Function} [fn] * @return {Request} * @api public */ request.put = (url, data, fn) => { const request_ = request('PUT', url); if (typeof data === 'function') { fn = data; data = null; } if (data) request_.send(data); if (fn) request_.end(fn); return request_; }; superagent-8.0.5/src/node/000077500000000000000000000000001434246777100154345ustar00rootroot00000000000000superagent-8.0.5/src/node/agent.js000066400000000000000000000042511434246777100170720ustar00rootroot00000000000000/** * Module dependencies. */ // eslint-disable-next-line node/no-deprecated-api const { parse } = require('url'); const { CookieJar } = require('cookiejar'); const { CookieAccessInfo } = require('cookiejar'); const methods = require('methods'); const request = require('../..'); const AgentBase = require('../agent-base'); /** * Expose `Agent`. */ module.exports = Agent; /** * Initialize a new `Agent`. * * @api public */ function Agent(options) { if (!(this instanceof Agent)) { return new Agent(options); } AgentBase.call(this); this.jar = new CookieJar(); if (options) { if (options.ca) { this.ca(options.ca); } if (options.key) { this.key(options.key); } if (options.pfx) { this.pfx(options.pfx); } if (options.cert) { this.cert(options.cert); } if (options.rejectUnauthorized === false) { this.disableTLSCerts(); } } } Agent.prototype = Object.create(AgentBase.prototype); /** * Save the cookies in the given `res` to * the agent's cookie jar for persistence. * * @param {Response} res * @api private */ Agent.prototype._saveCookies = function (res) { const cookies = res.headers['set-cookie']; if (cookies) this.jar.setCookies(cookies); }; /** * Attach cookies when available to the given `req`. * * @param {Request} req * @api private */ Agent.prototype._attachCookies = function (request_) { const url = parse(request_.url); const access = new CookieAccessInfo( url.hostname, url.pathname, url.protocol === 'https:' ); const cookies = this.jar.getCookies(access).toValueString(); request_.cookies = cookies; }; for (const name of methods) { const method = name.toUpperCase(); Agent.prototype[name] = function (url, fn) { const request_ = new request.Request(method, url); request_.on('response', this._saveCookies.bind(this)); request_.on('redirect', this._saveCookies.bind(this)); request_.on('redirect', this._attachCookies.bind(this, request_)); this._setDefaults(request_); this._attachCookies(request_); if (fn) { request_.end(fn); } return request_; }; } Agent.prototype.del = Agent.prototype.delete; superagent-8.0.5/src/node/http2wrapper.js000066400000000000000000000115171434246777100204410ustar00rootroot00000000000000const Stream = require('stream'); const util = require('util'); const net = require('net'); const tls = require('tls'); // eslint-disable-next-line node/no-deprecated-api const { parse } = require('url'); const process = require('process'); const semverGte = require('semver/functions/gte'); let http2; if (semverGte(process.version, 'v10.10.0')) http2 = require('http2'); else throw new Error('superagent: this version of Node.js does not support http2'); const { HTTP2_HEADER_PATH, HTTP2_HEADER_STATUS, HTTP2_HEADER_METHOD, HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_HOST, HTTP2_HEADER_SET_COOKIE, NGHTTP2_CANCEL } = http2.constants; function setProtocol(protocol) { return { request(options) { return new Request(protocol, options); } }; } function Request(protocol, options) { Stream.call(this); const defaultPort = protocol === 'https:' ? 443 : 80; const defaultHost = 'localhost'; const port = options.port || defaultPort; const host = options.host || defaultHost; delete options.port; delete options.host; this.method = options.method; this.path = options.path; this.protocol = protocol; this.host = host; delete options.method; delete options.path; const sessionOptions = { ...options }; if (options.socketPath) { sessionOptions.socketPath = options.socketPath; sessionOptions.createConnection = this.createUnixConnection.bind(this); } this._headers = {}; const session = http2.connect(`${protocol}//${host}:${port}`, sessionOptions); this.setHeader('host', `${host}:${port}`); session.on('error', (error) => this.emit('error', error)); this.session = session; } /** * Inherit from `Stream` (which inherits from `EventEmitter`). */ util.inherits(Request, Stream); Request.prototype.createUnixConnection = function (authority, options) { switch (this.protocol) { case 'http:': return net.connect(options.socketPath); case 'https:': options.ALPNProtocols = ['h2']; options.servername = this.host; options.allowHalfOpen = true; return tls.connect(options.socketPath, options); default: throw new Error('Unsupported protocol', this.protocol); } }; Request.prototype.setNoDelay = function (bool) { // We can not use setNoDelay with HTTP/2. // Node 10 limits http2session.socket methods to ones safe to use with HTTP/2. // See also https://nodejs.org/api/http2.html#http2_http2session_socket }; Request.prototype.getFrame = function () { if (this.frame) { return this.frame; } const method = { [HTTP2_HEADER_PATH]: this.path, [HTTP2_HEADER_METHOD]: this.method }; let headers = this.mapToHttp2Header(this._headers); headers = Object.assign(headers, method); const frame = this.session.request(headers); frame.once('response', (headers, flags) => { headers = this.mapToHttpHeader(headers); frame.headers = headers; frame.statusCode = headers[HTTP2_HEADER_STATUS]; frame.status = frame.statusCode; this.emit('response', frame); }); this._headerSent = true; frame.once('drain', () => this.emit('drain')); frame.on('error', (error) => this.emit('error', error)); frame.on('close', () => this.session.close()); this.frame = frame; return frame; }; Request.prototype.mapToHttpHeader = function (headers) { const keys = Object.keys(headers); const http2Headers = {}; for (let key of keys) { let value = headers[key]; key = key.toLowerCase(); switch (key) { case HTTP2_HEADER_SET_COOKIE: value = Array.isArray(value) ? value : [value]; break; default: break; } http2Headers[key] = value; } return http2Headers; }; Request.prototype.mapToHttp2Header = function (headers) { const keys = Object.keys(headers); const http2Headers = {}; for (let key of keys) { let value = headers[key]; key = key.toLowerCase(); switch (key) { case HTTP2_HEADER_HOST: key = HTTP2_HEADER_AUTHORITY; value = /^http:\/\/|^https:\/\//.test(value) ? parse(value).host : value; break; default: break; } http2Headers[key] = value; } return http2Headers; }; Request.prototype.setHeader = function (name, value) { this._headers[name.toLowerCase()] = value; }; Request.prototype.getHeader = function (name) { return this._headers[name.toLowerCase()]; }; Request.prototype.write = function (data, encoding) { const frame = this.getFrame(); return frame.write(data, encoding); }; Request.prototype.pipe = function (stream, options) { const frame = this.getFrame(); return frame.pipe(stream, options); }; Request.prototype.end = function (data) { const frame = this.getFrame(); frame.end(data); }; Request.prototype.abort = function (data) { const frame = this.getFrame(); frame.close(NGHTTP2_CANCEL); this.session.destroy(); }; exports.setProtocol = setProtocol; superagent-8.0.5/src/node/index.js000066400000000000000000001020701434246777100171010ustar00rootroot00000000000000/** * Module dependencies. */ // eslint-disable-next-line node/no-deprecated-api const { parse, format, resolve } = require('url'); const Stream = require('stream'); const https = require('https'); const http = require('http'); const fs = require('fs'); const zlib = require('zlib'); const util = require('util'); const qs = require('qs'); const mime = require('mime'); let methods = require('methods'); const FormData = require('form-data'); const formidable = require('formidable'); const debug = require('debug')('superagent'); const CookieJar = require('cookiejar'); const semverGte = require('semver/functions/gte'); const safeStringify = require('fast-safe-stringify'); const utils = require('../utils'); const RequestBase = require('../request-base'); const { unzip } = require('./unzip'); const Response = require('./response'); const { mixin, hasOwn } = utils; let http2; if (semverGte(process.version, 'v10.10.0')) http2 = require('./http2wrapper'); function request(method, url) { // callback if (typeof url === 'function') { return new exports.Request('GET', method).end(url); } // url first if (arguments.length === 1) { return new exports.Request('GET', method); } return new exports.Request(method, url); } module.exports = request; exports = module.exports; /** * Expose `Request`. */ exports.Request = Request; /** * Expose the agent function */ exports.agent = require('./agent'); /** * Noop. */ function noop() {} /** * Expose `Response`. */ exports.Response = Response; /** * Define "form" mime type. */ mime.define( { 'application/x-www-form-urlencoded': ['form', 'urlencoded', 'form-data'] }, true ); /** * Protocol map. */ exports.protocols = { 'http:': http, 'https:': https, 'http2:': http2 }; /** * Default serialization map. * * superagent.serialize['application/xml'] = function(obj){ * return 'generated xml here'; * }; * */ exports.serialize = { 'application/x-www-form-urlencoded': qs.stringify, 'application/json': safeStringify }; /** * Default parsers. * * superagent.parse['application/xml'] = function(res, fn){ * fn(null, res); * }; * */ exports.parse = require('./parsers'); /** * Default buffering map. Can be used to set certain * response types to buffer/not buffer. * * superagent.buffer['application/xml'] = true; */ exports.buffer = {}; /** * Initialize internal header tracking properties on a request instance. * * @param {Object} req the instance * @api private */ function _initHeaders(request_) { request_._header = { // coerces header names to lowercase }; request_.header = { // preserves header name case }; } /** * Initialize a new `Request` with the given `method` and `url`. * * @param {String} method * @param {String|Object} url * @api public */ function Request(method, url) { Stream.call(this); if (typeof url !== 'string') url = format(url); this._enableHttp2 = Boolean(process.env.HTTP2_TEST); // internal only this._agent = false; this._formData = null; this.method = method; this.url = url; _initHeaders(this); this.writable = true; this._redirects = 0; this.redirects(method === 'HEAD' ? 0 : 5); this.cookies = ''; this.qs = {}; this._query = []; this.qsRaw = this._query; // Unused, for backwards compatibility only this._redirectList = []; this._streamRequest = false; this._lookup = undefined; this.once('end', this.clearTimeout.bind(this)); } /** * Inherit from `Stream` (which inherits from `EventEmitter`). * Mixin `RequestBase`. */ util.inherits(Request, Stream); mixin(Request.prototype, RequestBase.prototype); /** * Enable or Disable http2. * * Enable http2. * * ``` js * request.get('http://localhost/') * .http2() * .end(callback); * * request.get('http://localhost/') * .http2(true) * .end(callback); * ``` * * Disable http2. * * ``` js * request = request.http2(); * request.get('http://localhost/') * .http2(false) * .end(callback); * ``` * * @param {Boolean} enable * @return {Request} for chaining * @api public */ Request.prototype.http2 = function (bool) { if (exports.protocols['http2:'] === undefined) { throw new Error( 'superagent: this version of Node.js does not support http2' ); } this._enableHttp2 = bool === undefined ? true : bool; return this; }; /** * Queue the given `file` as an attachment to the specified `field`, * with optional `options` (or filename). * * ``` js * request.post('http://localhost/upload') * .attach('field', Buffer.from('Hello world'), 'hello.html') * .end(callback); * ``` * * A filename may also be used: * * ``` js * request.post('http://localhost/upload') * .attach('files', 'image.jpg') * .end(callback); * ``` * * @param {String} field * @param {String|fs.ReadStream|Buffer} file * @param {String|Object} options * @return {Request} for chaining * @api public */ Request.prototype.attach = function (field, file, options) { if (file) { if (this._data) { throw new Error("superagent can't mix .send() and .attach()"); } let o = options || {}; if (typeof options === 'string') { o = { filename: options }; } if (typeof file === 'string') { if (!o.filename) o.filename = file; debug('creating `fs.ReadStream` instance for file: %s', file); file = fs.createReadStream(file); file.on('error', (error) => { const formData = this._getFormData(); formData.emit('error', error); }); } else if (!o.filename && file.path) { o.filename = file.path; } this._getFormData().append(field, file, o); } return this; }; Request.prototype._getFormData = function () { if (!this._formData) { this._formData = new FormData(); this._formData.on('error', (error) => { debug('FormData error', error); if (this.called) { // The request has already finished and the callback was called. // Silently ignore the error. return; } this.callback(error); this.abort(); }); } return this._formData; }; /** * Gets/sets the `Agent` to use for this HTTP request. The default (if this * function is not called) is to opt out of connection pooling (`agent: false`). * * @param {http.Agent} agent * @return {http.Agent} * @api public */ Request.prototype.agent = function (agent) { if (arguments.length === 0) return this._agent; this._agent = agent; return this; }; /** * Gets/sets the `lookup` function to use custom DNS resolver. * * @param {Function} lookup * @return {Function} * @api public */ Request.prototype.lookup = function (lookup) { if (arguments.length === 0) return this._lookup; this._lookup = lookup; return this; }; /** * Set _Content-Type_ response header passed through `mime.getType()`. * * Examples: * * request.post('/') * .type('xml') * .send(xmlstring) * .end(callback); * * request.post('/') * .type('json') * .send(jsonstring) * .end(callback); * * request.post('/') * .type('application/json') * .send(jsonstring) * .end(callback); * * @param {String} type * @return {Request} for chaining * @api public */ Request.prototype.type = function (type) { return this.set( 'Content-Type', type.includes('/') ? type : mime.getType(type) ); }; /** * Set _Accept_ response header passed through `mime.getType()`. * * Examples: * * superagent.types.json = 'application/json'; * * request.get('/agent') * .accept('json') * .end(callback); * * request.get('/agent') * .accept('application/json') * .end(callback); * * @param {String} accept * @return {Request} for chaining * @api public */ Request.prototype.accept = function (type) { return this.set('Accept', type.includes('/') ? type : mime.getType(type)); }; /** * Add query-string `val`. * * Examples: * * request.get('/shoes') * .query('size=10') * .query({ color: 'blue' }) * * @param {Object|String} val * @return {Request} for chaining * @api public */ Request.prototype.query = function (value) { if (typeof value === 'string') { this._query.push(value); } else { Object.assign(this.qs, value); } return this; }; /** * Write raw `data` / `encoding` to the socket. * * @param {Buffer|String} data * @param {String} encoding * @return {Boolean} * @api public */ Request.prototype.write = function (data, encoding) { const request_ = this.request(); if (!this._streamRequest) { this._streamRequest = true; } return request_.write(data, encoding); }; /** * Pipe the request body to `stream`. * * @param {Stream} stream * @param {Object} options * @return {Stream} * @api public */ Request.prototype.pipe = function (stream, options) { this.piped = true; // HACK... this.buffer(false); this.end(); return this._pipeContinue(stream, options); }; Request.prototype._pipeContinue = function (stream, options) { this.req.once('response', (res) => { // redirect if ( isRedirect(res.statusCode) && this._redirects++ !== this._maxRedirects ) { return this._redirect(res) === this ? this._pipeContinue(stream, options) : undefined; } this.res = res; this._emitResponse(); if (this._aborted) return; if (this._shouldUnzip(res)) { const unzipObject = zlib.createUnzip(); unzipObject.on('error', (error) => { if (error && error.code === 'Z_BUF_ERROR') { // unexpected end of file is ignored by browsers and curl stream.emit('end'); return; } stream.emit('error', error); }); res.pipe(unzipObject).pipe(stream, options); } else { res.pipe(stream, options); } res.once('end', () => { this.emit('end'); }); }); return stream; }; /** * Enable / disable buffering. * * @return {Boolean} [val] * @return {Request} for chaining * @api public */ Request.prototype.buffer = function (value) { this._buffer = value !== false; return this; }; /** * Redirect to `url * * @param {IncomingMessage} res * @return {Request} for chaining * @api private */ Request.prototype._redirect = function (res) { let url = res.headers.location; if (!url) { return this.callback(new Error('No location header for redirect'), res); } debug('redirect %s -> %s', this.url, url); // location url = resolve(this.url, url); // ensure the response is being consumed // this is required for Node v0.10+ res.resume(); let headers = this.req.getHeaders ? this.req.getHeaders() : this.req._headers; const changesOrigin = parse(url).host !== parse(this.url).host; // implementation of 302 following defacto standard if (res.statusCode === 301 || res.statusCode === 302) { // strip Content-* related fields // in case of POST etc headers = utils.cleanHeader(headers, changesOrigin); // force GET this.method = this.method === 'HEAD' ? 'HEAD' : 'GET'; // clear data this._data = null; } // 303 is always GET if (res.statusCode === 303) { // strip Content-* related fields // in case of POST etc headers = utils.cleanHeader(headers, changesOrigin); // force method this.method = 'GET'; // clear data this._data = null; } // 307 preserves method // 308 preserves method delete headers.host; delete this.req; delete this._formData; // remove all add header except User-Agent _initHeaders(this); // redirect this._endCalled = false; this.url = url; this.qs = {}; this._query.length = 0; this.set(headers); this.emit('redirect', res); this._redirectList.push(this.url); this.end(this._callback); return this; }; /** * Set Authorization field value with `user` and `pass`. * * Examples: * * .auth('tobi', 'learnboost') * .auth('tobi:learnboost') * .auth('tobi') * .auth(accessToken, { type: 'bearer' }) * * @param {String} user * @param {String} [pass] * @param {Object} [options] options with authorization type 'basic' or 'bearer' ('basic' is default) * @return {Request} for chaining * @api public */ Request.prototype.auth = function (user, pass, options) { if (arguments.length === 1) pass = ''; if (typeof pass === 'object' && pass !== null) { // pass is optional and can be replaced with options options = pass; pass = ''; } if (!options) { options = { type: 'basic' }; } const encoder = (string) => Buffer.from(string).toString('base64'); return this._auth(user, pass, options, encoder); }; /** * Set the certificate authority option for https request. * * @param {Buffer | Array} cert * @return {Request} for chaining * @api public */ Request.prototype.ca = function (cert) { this._ca = cert; return this; }; /** * Set the client certificate key option for https request. * * @param {Buffer | String} cert * @return {Request} for chaining * @api public */ Request.prototype.key = function (cert) { this._key = cert; return this; }; /** * Set the key, certificate, and CA certs of the client in PFX or PKCS12 format. * * @param {Buffer | String} cert * @return {Request} for chaining * @api public */ Request.prototype.pfx = function (cert) { if (typeof cert === 'object' && !Buffer.isBuffer(cert)) { this._pfx = cert.pfx; this._passphrase = cert.passphrase; } else { this._pfx = cert; } return this; }; /** * Set the client certificate option for https request. * * @param {Buffer | String} cert * @return {Request} for chaining * @api public */ Request.prototype.cert = function (cert) { this._cert = cert; return this; }; /** * Do not reject expired or invalid TLS certs. * sets `rejectUnauthorized=true`. Be warned that this allows MITM attacks. * * @return {Request} for chaining * @api public */ Request.prototype.disableTLSCerts = function () { this._disableTLSCerts = true; return this; }; /** * Return an http[s] request. * * @return {OutgoingMessage} * @api private */ // eslint-disable-next-line complexity Request.prototype.request = function () { if (this.req) return this.req; const options = {}; try { const query = qs.stringify(this.qs, { indices: false, strictNullHandling: true }); if (query) { this.qs = {}; this._query.push(query); } this._finalizeQueryString(); } catch (err) { return this.emit('error', err); } let { url } = this; const retries = this._retries; // Capture backticks as-is from the final query string built above. // Note: this'll only find backticks entered in req.query(String) // calls, because qs.stringify unconditionally encodes backticks. let queryStringBackticks; if (url.includes('`')) { const queryStartIndex = url.indexOf('?'); if (queryStartIndex !== -1) { const queryString = url.slice(queryStartIndex + 1); queryStringBackticks = queryString.match(/`|%60/g); } } // default to http:// if (url.indexOf('http') !== 0) url = `http://${url}`; url = parse(url); // See https://github.com/ladjs/superagent/issues/1367 if (queryStringBackticks) { let i = 0; url.query = url.query.replace(/%60/g, () => queryStringBackticks[i++]); url.search = `?${url.query}`; url.path = url.pathname + url.search; } // support unix sockets if (/^https?\+unix:/.test(url.protocol) === true) { // get the protocol url.protocol = `${url.protocol.split('+')[0]}:`; // get the socket, path const unixParts = url.path.match(/^([^/]+)(.+)$/); options.socketPath = unixParts[1].replace(/%2F/g, '/'); url.path = unixParts[2]; } // Override IP address of a hostname if (this._connectOverride) { const { hostname } = url; const match = hostname in this._connectOverride ? this._connectOverride[hostname] : this._connectOverride['*']; if (match) { // backup the real host if (!this._header.host) { this.set('host', url.host); } let newHost; let newPort; if (typeof match === 'object') { newHost = match.host; newPort = match.port; } else { newHost = match; newPort = url.port; } // wrap [ipv6] url.host = /:/.test(newHost) ? `[${newHost}]` : newHost; if (newPort) { url.host += `:${newPort}`; url.port = newPort; } url.hostname = newHost; } } // options options.method = this.method; options.port = url.port; options.path = url.path; options.host = url.hostname; options.ca = this._ca; options.key = this._key; options.pfx = this._pfx; options.cert = this._cert; options.passphrase = this._passphrase; options.agent = this._agent; options.lookup = this._lookup; options.rejectUnauthorized = typeof this._disableTLSCerts === 'boolean' ? !this._disableTLSCerts : process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0'; // Allows request.get('https://1.2.3.4/').set('Host', 'example.com') if (this._header.host) { options.servername = this._header.host.replace(/:\d+$/, ''); } if ( this._trustLocalhost && /^(?:localhost|127\.0\.0\.\d+|(0*:)+:0*1)$/.test(url.hostname) ) { options.rejectUnauthorized = false; } // initiate request const module_ = this._enableHttp2 ? exports.protocols['http2:'].setProtocol(url.protocol) : exports.protocols[url.protocol]; // request this.req = module_.request(options); const { req } = this; // set tcp no delay req.setNoDelay(true); if (options.method !== 'HEAD') { req.setHeader('Accept-Encoding', 'gzip, deflate'); } this.protocol = url.protocol; this.host = url.host; // expose events req.once('drain', () => { this.emit('drain'); }); req.on('error', (error) => { // flag abortion here for out timeouts // because node will emit a faux-error "socket hang up" // when request is aborted before a connection is made if (this._aborted) return; // if not the same, we are in the **old** (cancelled) request, // so need to continue (same as for above) if (this._retries !== retries) return; // if we've received a response then we don't want to let // an error in the request blow up the response if (this.response) return; this.callback(error); }); // auth if (url.auth) { const auth = url.auth.split(':'); this.auth(auth[0], auth[1]); } if (this.username && this.password) { this.auth(this.username, this.password); } for (const key in this.header) { if (hasOwn(this.header, key)) req.setHeader(key, this.header[key]); } // add cookies if (this.cookies) { if (hasOwn(this._header, 'cookie')) { // merge const temporaryJar = new CookieJar.CookieJar(); temporaryJar.setCookies(this._header.cookie.split(';')); temporaryJar.setCookies(this.cookies.split(';')); req.setHeader( 'Cookie', temporaryJar.getCookies(CookieJar.CookieAccessInfo.All).toValueString() ); } else { req.setHeader('Cookie', this.cookies); } } return req; }; /** * Invoke the callback with `err` and `res` * and handle arity check. * * @param {Error} err * @param {Response} res * @api private */ Request.prototype.callback = function (error, res) { if (this._shouldRetry(error, res)) { return this._retry(); } // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime. const fn = this._callback || noop; this.clearTimeout(); if (this.called) return console.warn('superagent: double callback bug'); this.called = true; if (!error) { try { if (!this._isResponseOK(res)) { let message = 'Unsuccessful HTTP response'; if (res) { message = http.STATUS_CODES[res.status] || message; } error = new Error(message); error.status = res ? res.status : undefined; } } catch (err) { error = err; error.status = error.status || (res ? res.status : undefined); } } // It's important that the callback is called outside try/catch // to avoid double callback if (!error) { return fn(null, res); } error.response = res; if (this._maxRetries) error.retries = this._retries - 1; // only emit error event if there is a listener // otherwise we assume the callback to `.end()` will get the error if (error && this.listeners('error').length > 0) { this.emit('error', error); } fn(error, res); }; /** * Check if `obj` is a host object, * * @param {Object} obj host object * @return {Boolean} is a host object * @api private */ Request.prototype._isHost = function (object) { return ( Buffer.isBuffer(object) || object instanceof Stream || object instanceof FormData ); }; /** * Initiate request, invoking callback `fn(err, res)` * with an instanceof `Response`. * * @param {Function} fn * @return {Request} for chaining * @api public */ Request.prototype._emitResponse = function (body, files) { const response = new Response(this); this.response = response; response.redirects = this._redirectList; if (undefined !== body) { response.body = body; } response.files = files; if (this._endCalled) { response.pipe = function () { throw new Error( "end() has already been called, so it's too late to start piping" ); }; } this.emit('response', response); return response; }; Request.prototype.end = function (fn) { this.request(); debug('%s %s', this.method, this.url); if (this._endCalled) { throw new Error( '.end() was called twice. This is not supported in superagent' ); } this._endCalled = true; // store callback this._callback = fn || noop; this._end(); }; Request.prototype._end = function () { if (this._aborted) return this.callback( new Error('The request has been aborted even before .end() was called') ); let data = this._data; const { req } = this; const { method } = this; this._setTimeouts(); // body if (method !== 'HEAD' && !req._headerSent) { // serialize stuff if (typeof data !== 'string') { let contentType = req.getHeader('Content-Type'); // Parse out just the content type from the header (ignore the charset) if (contentType) contentType = contentType.split(';')[0]; let serialize = this._serializer || exports.serialize[contentType]; if (!serialize && isJSON(contentType)) { serialize = exports.serialize['application/json']; } if (serialize) data = serialize(data); } // content-length if (data && !req.getHeader('Content-Length')) { req.setHeader( 'Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data) ); } } // response // eslint-disable-next-line complexity req.once('response', (res) => { debug('%s %s -> %s', this.method, this.url, res.statusCode); if (this._responseTimeoutTimer) { clearTimeout(this._responseTimeoutTimer); } if (this.piped) { return; } const max = this._maxRedirects; const mime = utils.type(res.headers['content-type'] || '') || 'text/plain'; let type = mime.split('/')[0]; if (type) type = type.toLowerCase().trim(); const multipart = type === 'multipart'; const redirect = isRedirect(res.statusCode); const responseType = this._responseType; this.res = res; // redirect if (redirect && this._redirects++ !== max) { return this._redirect(res); } if (this.method === 'HEAD') { this.emit('end'); this.callback(null, this._emitResponse()); return; } // zlib support if (this._shouldUnzip(res)) { unzip(req, res); } let buffer = this._buffer; if (buffer === undefined && mime in exports.buffer) { buffer = Boolean(exports.buffer[mime]); } let parser = this._parser; if (undefined === buffer && parser) { console.warn( "A custom superagent parser has been set, but buffering strategy for the parser hasn't been configured. Call `req.buffer(true or false)` or set `superagent.buffer[mime] = true or false`" ); buffer = true; } if (!parser) { if (responseType) { parser = exports.parse.image; // It's actually a generic Buffer buffer = true; } else if (multipart) { const form = formidable(); parser = form.parse.bind(form); buffer = true; } else if (isBinary(mime)) { parser = exports.parse.image; buffer = true; // For backwards-compatibility buffering default is ad-hoc MIME-dependent } else if (exports.parse[mime]) { parser = exports.parse[mime]; } else if (type === 'text') { parser = exports.parse.text; buffer = buffer !== false; // everyone wants their own white-labeled json } else if (isJSON(mime)) { parser = exports.parse['application/json']; buffer = buffer !== false; } else if (buffer) { parser = exports.parse.text; } else if (undefined === buffer) { parser = exports.parse.image; // It's actually a generic Buffer buffer = true; } } // by default only buffer text/*, json and messed up thing from hell if ((undefined === buffer && isText(mime)) || isJSON(mime)) { buffer = true; } this._resBuffered = buffer; let parserHandlesEnd = false; if (buffer) { // Protectiona against zip bombs and other nuisance let responseBytesLeft = this._maxResponseSize || 200_000_000; res.on('data', (buf) => { responseBytesLeft -= buf.byteLength || buf.length > 0 ? buf.length : 0; if (responseBytesLeft < 0) { // This will propagate through error event const error = new Error('Maximum response size reached'); error.code = 'ETOOLARGE'; // Parsers aren't required to observe error event, // so would incorrectly report success parserHandlesEnd = false; // Will not emit error event res.destroy(error); // so we do callback now this.callback(error, null); } }); } if (parser) { try { // Unbuffered parsers are supposed to emit response early, // which is weird BTW, because response.body won't be there. parserHandlesEnd = buffer; parser(res, (error, object, files) => { if (this.timedout) { // Timeout has already handled all callbacks return; } // Intentional (non-timeout) abort is supposed to preserve partial response, // even if it doesn't parse. if (error && !this._aborted) { return this.callback(error); } if (parserHandlesEnd) { this.emit('end'); this.callback(null, this._emitResponse(object, files)); } }); } catch (err) { this.callback(err); return; } } this.res = res; // unbuffered if (!buffer) { debug('unbuffered %s %s', this.method, this.url); this.callback(null, this._emitResponse()); if (multipart) return; // allow multipart to handle end event res.once('end', () => { debug('end %s %s', this.method, this.url); this.emit('end'); }); return; } // terminating events res.once('error', (error) => { parserHandlesEnd = false; this.callback(error, null); }); if (!parserHandlesEnd) res.once('end', () => { debug('end %s %s', this.method, this.url); // TODO: unless buffering emit earlier to stream this.emit('end'); this.callback(null, this._emitResponse()); }); }); this.emit('request', this); const getProgressMonitor = () => { const lengthComputable = true; const total = req.getHeader('Content-Length'); let loaded = 0; const progress = new Stream.Transform(); progress._transform = (chunk, encoding, callback) => { loaded += chunk.length; this.emit('progress', { direction: 'upload', lengthComputable, loaded, total }); callback(null, chunk); }; return progress; }; const bufferToChunks = (buffer) => { const chunkSize = 16 * 1024; // default highWaterMark value const chunking = new Stream.Readable(); const totalLength = buffer.length; const remainder = totalLength % chunkSize; const cutoff = totalLength - remainder; for (let i = 0; i < cutoff; i += chunkSize) { const chunk = buffer.slice(i, i + chunkSize); chunking.push(chunk); } if (remainder > 0) { const remainderBuffer = buffer.slice(-remainder); chunking.push(remainderBuffer); } chunking.push(null); // no more data return chunking; }; // if a FormData instance got created, then we send that as the request body const formData = this._formData; if (formData) { // set headers const headers = formData.getHeaders(); for (const i in headers) { if (hasOwn(headers, i)) { debug('setting FormData header: "%s: %s"', i, headers[i]); req.setHeader(i, headers[i]); } } // attempt to get "Content-Length" header formData.getLength((error, length) => { // TODO: Add chunked encoding when no length (if err) if (error) debug('formData.getLength had error', error, length); debug('got FormData Content-Length: %s', length); if (typeof length === 'number') { req.setHeader('Content-Length', length); } formData.pipe(getProgressMonitor()).pipe(req); }); } else if (Buffer.isBuffer(data)) { bufferToChunks(data).pipe(getProgressMonitor()).pipe(req); } else { req.end(data); } }; // Check whether response has a non-0-sized gzip-encoded body Request.prototype._shouldUnzip = (res) => { if (res.statusCode === 204 || res.statusCode === 304) { // These aren't supposed to have any body return false; } // header content is a string, and distinction between 0 and no information is crucial if (res.headers['content-length'] === '0') { // We know that the body is empty (unfortunately, this check does not cover chunked encoding) return false; } // console.log(res); return /^\s*(?:deflate|gzip)\s*$/.test(res.headers['content-encoding']); }; /** * Overrides DNS for selected hostnames. Takes object mapping hostnames to IP addresses. * * When making a request to a URL with a hostname exactly matching a key in the object, * use the given IP address to connect, instead of using DNS to resolve the hostname. * * A special host `*` matches every hostname (keep redirects in mind!) * * request.connect({ * 'test.example.com': '127.0.0.1', * 'ipv6.example.com': '::1', * }) */ Request.prototype.connect = function (connectOverride) { if (typeof connectOverride === 'string') { this._connectOverride = { '*': connectOverride }; } else if (typeof connectOverride === 'object') { this._connectOverride = connectOverride; } else { this._connectOverride = undefined; } return this; }; Request.prototype.trustLocalhost = function (toggle) { this._trustLocalhost = toggle === undefined ? true : toggle; return this; }; // generate HTTP verb methods if (!methods.includes('del')) { // create a copy so we don't cause conflicts with // other packages using the methods package and // npm 3.x methods = [...methods]; methods.push('del'); } for (let method of methods) { const name = method; method = method === 'del' ? 'delete' : method; method = method.toUpperCase(); request[name] = (url, data, fn) => { const request_ = request(method, url); if (typeof data === 'function') { fn = data; data = null; } if (data) { if (method === 'GET' || method === 'HEAD') { request_.query(data); } else { request_.send(data); } } if (fn) request_.end(fn); return request_; }; } /** * Check if `mime` is text and should be buffered. * * @param {String} mime * @return {Boolean} * @api public */ function isText(mime) { const parts = mime.split('/'); let type = parts[0]; if (type) type = type.toLowerCase().trim(); let subtype = parts[1]; if (subtype) subtype = subtype.toLowerCase().trim(); return type === 'text' || subtype === 'x-www-form-urlencoded'; } // This is not a catchall, but a start. It might be useful // in the long run to have file that includes all binary // content types from https://www.iana.org/assignments/media-types/media-types.xhtml function isBinary(mime) { let [registry, name] = mime.split('/'); if (registry) registry = registry.toLowerCase().trim(); if (name) name = name.toLowerCase().trim(); return ( ['audio', 'font', 'image', 'video'].includes(registry) || ['gz', 'gzip'].includes(name) ); } /** * Check if `mime` is json or has +json structured syntax suffix. * * @param {String} mime * @return {Boolean} * @api private */ function isJSON(mime) { // should match /json or +json // but not /json-seq return /[/+]json($|[^-\w])/i.test(mime); } /** * Check if we should follow the redirect `code`. * * @param {Number} code * @return {Boolean} * @api private */ function isRedirect(code) { return [301, 302, 303, 305, 307, 308].includes(code); } superagent-8.0.5/src/node/parsers/000077500000000000000000000000001434246777100171135ustar00rootroot00000000000000superagent-8.0.5/src/node/parsers/image.js000066400000000000000000000003261434246777100205340ustar00rootroot00000000000000module.exports = (res, fn) => { const data = []; // Binary data needs binary storage res.on('data', (chunk) => { data.push(chunk); }); res.on('end', () => { fn(null, Buffer.concat(data)); }); }; superagent-8.0.5/src/node/parsers/index.js000066400000000000000000000005341434246777100205620ustar00rootroot00000000000000exports['application/x-www-form-urlencoded'] = require('./urlencoded'); exports['application/json'] = require('./json'); exports.text = require('./text'); exports['application/json-seq'] = exports.text; const binary = require('./image'); exports['application/octet-stream'] = binary; exports['application/pdf'] = binary; exports.image = binary; superagent-8.0.5/src/node/parsers/json.js000066400000000000000000000011071434246777100204210ustar00rootroot00000000000000module.exports = function (res, fn) { res.text = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { res.text += chunk; }); res.on('end', () => { let body; let error; try { body = res.text && JSON.parse(res.text); } catch (err) { error = err; // issue #675: return the raw response if the response parsing fails error.rawResponse = res.text || null; // issue #876: return the http status code if the response parsing fails error.statusCode = res.statusCode; } finally { fn(error, body); } }); }; superagent-8.0.5/src/node/parsers/text.js000066400000000000000000000002371434246777100204370ustar00rootroot00000000000000module.exports = (res, fn) => { res.text = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { res.text += chunk; }); res.on('end', fn); }; superagent-8.0.5/src/node/parsers/urlencoded.js000066400000000000000000000004741434246777100216020ustar00rootroot00000000000000/** * Module dependencies. */ const qs = require('qs'); module.exports = (res, fn) => { res.text = ''; res.setEncoding('ascii'); res.on('data', (chunk) => { res.text += chunk; }); res.on('end', () => { try { fn(null, qs.parse(res.text)); } catch (err) { fn(err); } }); }; superagent-8.0.5/src/node/response.js000066400000000000000000000052751434246777100176410ustar00rootroot00000000000000/** * Module dependencies. */ const util = require('util'); const Stream = require('stream'); const ResponseBase = require('../response-base'); const { mixin } = require('../utils'); /** * Expose `Response`. */ module.exports = Response; /** * Initialize a new `Response` with the given `xhr`. * * - set flags (.ok, .error, etc) * - parse header * * @param {Request} req * @param {Object} options * @constructor * @extends {Stream} * @implements {ReadableStream} * @api private */ function Response(request) { Stream.call(this); this.res = request.res; const { res } = this; this.request = request; this.req = request.req; this.text = res.text; this.files = res.files || {}; this.buffered = request._resBuffered; this.headers = res.headers; this.header = this.headers; this._setStatusProperties(res.statusCode); this._setHeaderProperties(this.header); this.setEncoding = res.setEncoding.bind(res); res.on('data', this.emit.bind(this, 'data')); res.on('end', this.emit.bind(this, 'end')); res.on('close', this.emit.bind(this, 'close')); res.on('error', this.emit.bind(this, 'error')); } // Lazy access res.body. // https://github.com/nodejs/node/pull/39520#issuecomment-889697136 Object.defineProperty(Response.prototype, 'body', { get() { return this._body !== undefined ? this._body : this.res.body !== undefined ? this.res.body : {}; }, set(value) { this._body = value; } }); /** * Inherit from `Stream`. */ util.inherits(Response, Stream); mixin(Response.prototype, ResponseBase.prototype); /** * Implements methods of a `ReadableStream` */ Response.prototype.destroy = function (error) { this.res.destroy(error); }; /** * Pause. */ Response.prototype.pause = function () { this.res.pause(); }; /** * Resume. */ Response.prototype.resume = function () { this.res.resume(); }; /** * Return an `Error` representative of this response. * * @return {Error} * @api public */ Response.prototype.toError = function () { const { req } = this; const { method } = req; const { path } = req; const message = `cannot ${method} ${path} (${this.status})`; const error = new Error(message); error.status = this.status; error.text = this.text; error.method = method; error.path = path; return error; }; Response.prototype.setStatusProperties = function (status) { console.warn('In superagent 2.x setStatusProperties is a private method'); return this._setStatusProperties(status); }; /** * To json. * * @return {Object} * @api public */ Response.prototype.toJSON = function () { return { req: this.request.toJSON(), header: this.header, status: this.status, text: this.text }; }; superagent-8.0.5/src/node/unzip.js000066400000000000000000000030231434246777100171350ustar00rootroot00000000000000/** * Module dependencies. */ const { StringDecoder } = require('string_decoder'); const Stream = require('stream'); const zlib = require('zlib'); /** * Buffers response data events and re-emits when they're unzipped. * * @param {Request} req * @param {Response} res * @api private */ exports.unzip = (request, res) => { const unzip = zlib.createUnzip(); const stream = new Stream(); let decoder; // make node responseOnEnd() happy stream.req = request; unzip.on('error', (error) => { if (error && error.code === 'Z_BUF_ERROR') { // unexpected end of file is ignored by browsers and curl stream.emit('end'); return; } stream.emit('error', error); }); // pipe to unzip res.pipe(unzip); // override `setEncoding` to capture encoding res.setEncoding = (type) => { decoder = new StringDecoder(type); }; // decode upon decompressing with captured encoding unzip.on('data', (buf) => { if (decoder) { const string_ = decoder.write(buf); if (string_.length > 0) stream.emit('data', string_); } else { stream.emit('data', buf); } }); unzip.on('end', () => { stream.emit('end'); }); // override `on` to capture data listeners const _on = res.on; res.on = function (type, fn) { if (type === 'data' || type === 'end') { stream.on(type, fn.bind(res)); } else if (type === 'error') { stream.on(type, fn.bind(res)); _on.call(res, type, fn); } else { _on.call(res, type, fn); } return this; }; }; superagent-8.0.5/src/request-base.js000066400000000000000000000460321434246777100174520ustar00rootroot00000000000000const semver = require('semver'); /** * Module of mixed-in functions shared between node and client code */ const { isObject, hasOwn } = require('./utils'); /** * Expose `RequestBase`. */ module.exports = RequestBase; /** * Initialize a new `RequestBase`. * * @api public */ function RequestBase() {} /** * Clear previous timeout. * * @return {Request} for chaining * @api public */ RequestBase.prototype.clearTimeout = function () { clearTimeout(this._timer); clearTimeout(this._responseTimeoutTimer); clearTimeout(this._uploadTimeoutTimer); delete this._timer; delete this._responseTimeoutTimer; delete this._uploadTimeoutTimer; return this; }; /** * Override default response body parser * * This function will be called to convert incoming data into request.body * * @param {Function} * @api public */ RequestBase.prototype.parse = function (fn) { this._parser = fn; return this; }; /** * Set format of binary response body. * In browser valid formats are 'blob' and 'arraybuffer', * which return Blob and ArrayBuffer, respectively. * * In Node all values result in Buffer. * * Examples: * * req.get('/') * .responseType('blob') * .end(callback); * * @param {String} val * @return {Request} for chaining * @api public */ RequestBase.prototype.responseType = function (value) { this._responseType = value; return this; }; /** * Override default request body serializer * * This function will be called to convert data set via .send or .attach into payload to send * * @param {Function} * @api public */ RequestBase.prototype.serialize = function (fn) { this._serializer = fn; return this; }; /** * Set timeouts. * * - response timeout is time between sending request and receiving the first byte of the response. Includes DNS and connection time. * - deadline is the time from start of the request to receiving response body in full. If the deadline is too short large files may not load at all on slow connections. * - upload is the time since last bit of data was sent or received. This timeout works only if deadline timeout is off * * Value of 0 or false means no timeout. * * @param {Number|Object} ms or {response, deadline} * @return {Request} for chaining * @api public */ RequestBase.prototype.timeout = function (options) { if (!options || typeof options !== 'object') { this._timeout = options; this._responseTimeout = 0; this._uploadTimeout = 0; return this; } for (const option in options) { if (hasOwn(options, option)) { switch (option) { case 'deadline': this._timeout = options.deadline; break; case 'response': this._responseTimeout = options.response; break; case 'upload': this._uploadTimeout = options.upload; break; default: console.warn('Unknown timeout option', option); } } } return this; }; /** * Set number of retry attempts on error. * * Failed requests will be retried 'count' times if timeout or err.code >= 500. * * @param {Number} count * @param {Function} [fn] * @return {Request} for chaining * @api public */ RequestBase.prototype.retry = function (count, fn) { // Default to 1 if no count passed or true if (arguments.length === 0 || count === true) count = 1; if (count <= 0) count = 0; this._maxRetries = count; this._retries = 0; this._retryCallback = fn; return this; }; // // NOTE: we do not include ESOCKETTIMEDOUT because that is from `request` package // // // NOTE: we do not include EADDRINFO because it was removed from libuv in 2014 // // // // // TODO: expose these as configurable defaults // const ERROR_CODES = new Set([ 'ETIMEDOUT', 'ECONNRESET', 'EADDRINUSE', 'ECONNREFUSED', 'EPIPE', 'ENOTFOUND', 'ENETUNREACH', 'EAI_AGAIN' ]); const STATUS_CODES = new Set([ 408, 413, 429, 500, 502, 503, 504, 521, 522, 524 ]); // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST) // const METHODS = new Set(['GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']); /** * Determine if a request should be retried. * (Inspired by https://github.com/sindresorhus/got#retry) * * @param {Error} err an error * @param {Response} [res] response * @returns {Boolean} if segment should be retried */ RequestBase.prototype._shouldRetry = function (error, res) { if (!this._maxRetries || this._retries++ >= this._maxRetries) { return false; } if (this._retryCallback) { try { const override = this._retryCallback(error, res); if (override === true) return true; if (override === false) return false; // undefined falls back to defaults } catch (err) { console.error(err); } } // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST) /* if ( this.req && this.req.method && !METHODS.has(this.req.method.toUpperCase()) ) return false; */ if (res && res.status && STATUS_CODES.has(res.status)) return true; if (error) { if (error.code && ERROR_CODES.has(error.code)) return true; // Superagent timeout if (error.timeout && error.code === 'ECONNABORTED') return true; if (error.crossDomain) return true; } return false; }; /** * Retry request * * @return {Request} for chaining * @api private */ RequestBase.prototype._retry = function () { this.clearTimeout(); // node if (this.req) { this.req = null; this.req = this.request(); } this._aborted = false; this.timedout = false; this.timedoutError = null; return this._end(); }; /** * Promise support * * @param {Function} resolve * @param {Function} [reject] * @return {Request} */ RequestBase.prototype.then = function (resolve, reject) { if (!this._fullfilledPromise) { const self = this; if (this._endCalled) { console.warn( 'Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises' ); } this._fullfilledPromise = new Promise((resolve, reject) => { self.on('abort', () => { if (this._maxRetries && this._maxRetries > this._retries) { return; } if (this.timedout && this.timedoutError) { reject(this.timedoutError); return; } const error = new Error('Aborted'); error.code = 'ABORTED'; error.status = this.status; error.method = this.method; error.url = this.url; reject(error); }); self.end((error, res) => { if (error) reject(error); else resolve(res); }); }); } return this._fullfilledPromise.then(resolve, reject); }; RequestBase.prototype.catch = function (callback) { return this.then(undefined, callback); }; /** * Allow for extension */ RequestBase.prototype.use = function (fn) { fn(this); return this; }; RequestBase.prototype.ok = function (callback) { if (typeof callback !== 'function') throw new Error('Callback required'); this._okCallback = callback; return this; }; RequestBase.prototype._isResponseOK = function (res) { if (!res) { return false; } if (this._okCallback) { return this._okCallback(res); } return res.status >= 200 && res.status < 300; }; /** * Get request header `field`. * Case-insensitive. * * @param {String} field * @return {String} * @api public */ RequestBase.prototype.get = function (field) { return this._header[field.toLowerCase()]; }; /** * Get case-insensitive header `field` value. * This is a deprecated internal API. Use `.get(field)` instead. * * (getHeader is no longer used internally by the superagent code base) * * @param {String} field * @return {String} * @api private * @deprecated */ RequestBase.prototype.getHeader = RequestBase.prototype.get; /** * Set header `field` to `val`, or multiple fields with one object. * Case-insensitive. * * Examples: * * req.get('/') * .set('Accept', 'application/json') * .set('X-API-Key', 'foobar') * .end(callback); * * req.get('/') * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' }) * .end(callback); * * @param {String|Object} field * @param {String} val * @return {Request} for chaining * @api public */ RequestBase.prototype.set = function (field, value) { if (isObject(field)) { for (const key in field) { if (hasOwn(field, key)) this.set(key, field[key]); } return this; } this._header[field.toLowerCase()] = value; this.header[field] = value; return this; }; /** * Remove header `field`. * Case-insensitive. * * Example: * * req.get('/') * .unset('User-Agent') * .end(callback); * * @param {String} field field name */ RequestBase.prototype.unset = function (field) { delete this._header[field.toLowerCase()]; delete this.header[field]; return this; }; /** * Write the field `name` and `val`, or multiple fields with one object * for "multipart/form-data" request bodies. * * ``` js * request.post('/upload') * .field('foo', 'bar') * .end(callback); * * request.post('/upload') * .field({ foo: 'bar', baz: 'qux' }) * .end(callback); * ``` * * @param {String|Object} name name of field * @param {String|Blob|File|Buffer|fs.ReadStream} val value of field * @param {String} options extra options, e.g. 'blob' * @return {Request} for chaining * @api public */ RequestBase.prototype.field = function (name, value, options) { // name should be either a string or an object. if (name === null || undefined === name) { throw new Error('.field(name, val) name can not be empty'); } if (this._data) { throw new Error( ".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()" ); } if (isObject(name)) { for (const key in name) { if (hasOwn(name, key)) this.field(key, name[key]); } return this; } if (Array.isArray(value)) { for (const i in value) { if (hasOwn(value, i)) this.field(name, value[i]); } return this; } // val should be defined now if (value === null || undefined === value) { throw new Error('.field(name, val) val can not be empty'); } if (typeof value === 'boolean') { value = String(value); } // fix https://github.com/ladjs/superagent/issues/1680 if (options) this._getFormData().append(name, value, options); else this._getFormData().append(name, value); return this; }; /** * Abort the request, and clear potential timeout. * * @return {Request} request * @api public */ RequestBase.prototype.abort = function () { if (this._aborted) { return this; } this._aborted = true; if (this.xhr) this.xhr.abort(); // browser if (this.req) { // Node v13 has major differences in `abort()` // https://github.com/nodejs/node/blob/v12.x/lib/internal/streams/end-of-stream.js // https://github.com/nodejs/node/blob/v13.x/lib/internal/streams/end-of-stream.js // https://github.com/nodejs/node/blob/v14.x/lib/internal/streams/end-of-stream.js // (if you run a diff across these you will see the differences) // // References: // // // // Thanks to @shadowgate15 and @niftylettuce if ( semver.gte(process.version, 'v13.0.0') && semver.lt(process.version, 'v14.0.0') ) { // Note that the reason this doesn't work is because in v13 as compared to v14 // there is no `callback = nop` set in end-of-stream.js above throw new Error( 'Superagent does not work in v13 properly with abort() due to Node.js core changes' ); } else if (semver.gte(process.version, 'v14.0.0')) { // We have to manually set `destroyed` to `true` in order for this to work // (see core internals of end-of-stream.js above in v14 branch as compared to v12) this.req.destroyed = true; } this.req.abort(); // node } this.clearTimeout(); this.emit('abort'); return this; }; RequestBase.prototype._auth = function (user, pass, options, base64Encoder) { switch (options.type) { case 'basic': this.set('Authorization', `Basic ${base64Encoder(`${user}:${pass}`)}`); break; case 'auto': this.username = user; this.password = pass; break; case 'bearer': // usage would be .auth(accessToken, { type: 'bearer' }) this.set('Authorization', `Bearer ${user}`); break; default: break; } return this; }; /** * Enable transmission of cookies with x-domain requests. * * Note that for this to work the origin must not be * using "Access-Control-Allow-Origin" with a wildcard, * and also must set "Access-Control-Allow-Credentials" * to "true". * @param {Boolean} [on=true] - Set 'withCredentials' state * @return {Request} for chaining * @api public */ RequestBase.prototype.withCredentials = function (on) { // This is browser-only functionality. Node side is no-op. if (on === undefined) on = true; this._withCredentials = on; return this; }; /** * Set the max redirects to `n`. Does nothing in browser XHR implementation. * * @param {Number} n * @return {Request} for chaining * @api public */ RequestBase.prototype.redirects = function (n) { this._maxRedirects = n; return this; }; /** * Maximum size of buffered response body, in bytes. Counts uncompressed size. * Default 200MB. * * @param {Number} n number of bytes * @return {Request} for chaining */ RequestBase.prototype.maxResponseSize = function (n) { if (typeof n !== 'number') { throw new TypeError('Invalid argument'); } this._maxResponseSize = n; return this; }; /** * Convert to a plain javascript object (not JSON string) of scalar properties. * Note as this method is designed to return a useful non-this value, * it cannot be chained. * * @return {Object} describing method, url, and data of this request * @api public */ RequestBase.prototype.toJSON = function () { return { method: this.method, url: this.url, data: this._data, headers: this._header }; }; /** * Send `data` as the request body, defaulting the `.type()` to "json" when * an object is given. * * Examples: * * // manual json * request.post('/user') * .type('json') * .send('{"name":"tj"}') * .end(callback) * * // auto json * request.post('/user') * .send({ name: 'tj' }) * .end(callback) * * // manual x-www-form-urlencoded * request.post('/user') * .type('form') * .send('name=tj') * .end(callback) * * // auto x-www-form-urlencoded * request.post('/user') * .type('form') * .send({ name: 'tj' }) * .end(callback) * * // defaults to x-www-form-urlencoded * request.post('/user') * .send('name=tobi') * .send('species=ferret') * .end(callback) * * @param {String|Object} data * @return {Request} for chaining * @api public */ // eslint-disable-next-line complexity RequestBase.prototype.send = function (data) { const isObject_ = isObject(data); let type = this._header['content-type']; if (this._formData) { throw new Error( ".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()" ); } if (isObject_ && !this._data) { if (Array.isArray(data)) { this._data = []; } else if (!this._isHost(data)) { this._data = {}; } } else if (data && this._data && this._isHost(this._data)) { throw new Error("Can't merge these send calls"); } // merge if (isObject_ && isObject(this._data)) { for (const key in data) { if (hasOwn(data, key)) this._data[key] = data[key]; } } else if (typeof data === 'string') { // default to x-www-form-urlencoded if (!type) this.type('form'); type = this._header['content-type']; if (type) type = type.toLowerCase().trim(); if (type === 'application/x-www-form-urlencoded') { this._data = this._data ? `${this._data}&${data}` : data; } else { this._data = (this._data || '') + data; } } else { this._data = data; } if (!isObject_ || this._isHost(data)) { return this; } // default to json if (!type) this.type('json'); return this; }; /** * Sort `querystring` by the sort function * * * Examples: * * // default order * request.get('/user') * .query('name=Nick') * .query('search=Manny') * .sortQuery() * .end(callback) * * // customized sort function * request.get('/user') * .query('name=Nick') * .query('search=Manny') * .sortQuery(function(a, b){ * return a.length - b.length; * }) * .end(callback) * * * @param {Function} sort * @return {Request} for chaining * @api public */ RequestBase.prototype.sortQuery = function (sort) { // _sort default to true but otherwise can be a function or boolean this._sort = typeof sort === 'undefined' ? true : sort; return this; }; /** * Compose querystring to append to req.url * * @api private */ RequestBase.prototype._finalizeQueryString = function () { const query = this._query.join('&'); if (query) { this.url += (this.url.includes('?') ? '&' : '?') + query; } this._query.length = 0; // Makes the call idempotent if (this._sort) { const index = this.url.indexOf('?'); if (index >= 0) { const queryArray = this.url.slice(index + 1).split('&'); if (typeof this._sort === 'function') { queryArray.sort(this._sort); } else { queryArray.sort(); } this.url = this.url.slice(0, index) + '?' + queryArray.join('&'); } } }; // For backwards compat only RequestBase.prototype._appendQueryString = () => { console.warn('Unsupported'); }; /** * Invoke callback with timeout error. * * @api private */ RequestBase.prototype._timeoutError = function (reason, timeout, errno) { if (this._aborted) { return; } const error = new Error(`${reason + timeout}ms exceeded`); error.timeout = timeout; error.code = 'ECONNABORTED'; error.errno = errno; this.timedout = true; this.timedoutError = error; this.abort(); this.callback(error); }; RequestBase.prototype._setTimeouts = function () { const self = this; // deadline if (this._timeout && !this._timer) { this._timer = setTimeout(() => { self._timeoutError('Timeout of ', self._timeout, 'ETIME'); }, this._timeout); } // response timeout if (this._responseTimeout && !this._responseTimeoutTimer) { this._responseTimeoutTimer = setTimeout(() => { self._timeoutError( 'Response timeout of ', self._responseTimeout, 'ETIMEDOUT' ); }, this._responseTimeout); } }; superagent-8.0.5/src/response-base.js000066400000000000000000000051001434246777100176070ustar00rootroot00000000000000/** * Module dependencies. */ const utils = require('./utils'); /** * Expose `ResponseBase`. */ module.exports = ResponseBase; /** * Initialize a new `ResponseBase`. * * @api public */ function ResponseBase() {} /** * Get case-insensitive `field` value. * * @param {String} field * @return {String} * @api public */ ResponseBase.prototype.get = function (field) { return this.header[field.toLowerCase()]; }; /** * Set header related properties: * * - `.type` the content type without params * * A response of "Content-Type: text/plain; charset=utf-8" * will provide you with a `.type` of "text/plain". * * @param {Object} header * @api private */ ResponseBase.prototype._setHeaderProperties = function (header) { // TODO: moar! // TODO: make this a util // content-type const ct = header['content-type'] || ''; this.type = utils.type(ct); // params const parameters = utils.params(ct); for (const key in parameters) { if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key]; } this.links = {}; // links try { if (header.link) { this.links = utils.parseLinks(header.link); } } catch (err) { // ignore } }; /** * Set flags such as `.ok` based on `status`. * * For example a 2xx response will give you a `.ok` of __true__ * whereas 5xx will be __false__ and `.error` will be __true__. The * `.clientError` and `.serverError` are also available to be more * specific, and `.statusType` is the class of error ranging from 1..5 * sometimes useful for mapping respond colors etc. * * "sugar" properties are also defined for common cases. Currently providing: * * - .noContent * - .badRequest * - .unauthorized * - .notAcceptable * - .notFound * * @param {Number} status * @api private */ ResponseBase.prototype._setStatusProperties = function (status) { const type = Math.trunc(status / 100); // status / class this.statusCode = status; this.status = this.statusCode; this.statusType = type; // basics this.info = type === 1; this.ok = type === 2; this.redirect = type === 3; this.clientError = type === 4; this.serverError = type === 5; this.error = type === 4 || type === 5 ? this.toError() : false; // sugar this.created = status === 201; this.accepted = status === 202; this.noContent = status === 204; this.badRequest = status === 400; this.unauthorized = status === 401; this.notAcceptable = status === 406; this.forbidden = status === 403; this.notFound = status === 404; this.unprocessableEntity = status === 422; }; superagent-8.0.5/src/utils.js000066400000000000000000000041031434246777100162030ustar00rootroot00000000000000/** * Return the mime type for the given `str`. * * @param {String} str * @return {String} * @api private */ exports.type = (string_) => string_.split(/ *; */).shift(); /** * Return header field parameters. * * @param {String} str * @return {Object} * @api private */ exports.params = (value) => { const object = {}; for (const string_ of value.split(/ *; */)) { const parts = string_.split(/ *= */); const key = parts.shift(); const value = parts.shift(); if (key && value) object[key] = value; } return object; }; /** * Parse Link header fields. * * @param {String} str * @return {Object} * @api private */ exports.parseLinks = (value) => { const object = {}; for (const string_ of value.split(/ *, */)) { const parts = string_.split(/ *; */); const url = parts[0].slice(1, -1); const rel = parts[1].split(/ *= */)[1].slice(1, -1); object[rel] = url; } return object; }; /** * Strip content related fields from `header`. * * @param {Object} header * @return {Object} header * @api private */ exports.cleanHeader = (header, changesOrigin) => { delete header['content-type']; delete header['content-length']; delete header['transfer-encoding']; delete header.host; // secuirty if (changesOrigin) { delete header.authorization; delete header.cookie; } return header; }; /** * Check if `obj` is an object. * * @param {Object} object * @return {Boolean} * @api private */ exports.isObject = (object) => { return object !== null && typeof object === 'object'; }; /** * Object.hasOwn fallback/polyfill. * * @type {(object: object, property: string) => boolean} object * @api private */ exports.hasOwn = Object.hasOwn || function (object, property) { if (object == null) { throw new TypeError('Cannot convert undefined or null to object'); } return Object.prototype.hasOwnProperty.call(new Object(object), property); }; exports.mixin = (target, source) => { for (const key in source) { if (exports.hasOwn(source, key)) { target[key] = source[key]; } } }; superagent-8.0.5/test/000077500000000000000000000000001434246777100146775ustar00rootroot00000000000000superagent-8.0.5/test/agent-base.js000066400000000000000000000022611434246777100172440ustar00rootroot00000000000000const assert = require('assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); describe('Agent', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); it('should remember defaults', () => { if (typeof Promise === 'undefined') { return; } let called = 0; let event_called = 0; const agent = request .agent() .accept('json') .use(() => { called++; }) .once('request', () => { event_called++; }) .query({ hello: 'world' }) .set('X-test', 'testing'); assert.equal(0, called); assert.equal(0, event_called); return agent .get(`${base}/echo`) .then((res) => { assert.equal(1, called); assert.equal(1, event_called); assert.equal('application/json', res.headers.accept); assert.equal('testing', res.headers['x-test']); return agent.get(`${base}/querystring`); }) .then((res) => { assert.equal(2, called); assert.equal(2, event_called); assert.deepEqual({ hello: 'world' }, res.body); }); }); }); superagent-8.0.5/test/basic.js000066400000000000000000000451351434246777100163260ustar00rootroot00000000000000const assert = require('assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); describe('request', function () { let setup; let NODE; let uri; before(async () => { setup = await getSetup(); NODE = setup.NODE; uri = setup.uri; }); this.timeout(20_000); describe('res.statusCode', () => { it('should set statusCode', (done) => { request.get(`${uri}/login`, (error, res) => { try { assert.strictEqual(res.statusCode, 200); done(); } catch (err) { done(err); } }); }); }); describe('should allow the send shorthand', () => { it('with callback in the method call', (done) => { request.get(`${uri}/login`, (error, res) => { assert.equal(res.status, 200); done(); }); }); it('with data in the method call', (done) => { request.post(`${uri}/echo`, { foo: 'bar' }).end((error, res) => { assert.equal('{"foo":"bar"}', res.text); done(); }); }); it('with callback and data in the method call', (done) => { request.post(`${uri}/echo`, { foo: 'bar' }, (error, res) => { assert.equal('{"foo":"bar"}', res.text); done(); }); }); }); describe('with a callback', () => { it('should invoke .end()', (done) => { request.get(`${uri}/login`, (error, res) => { try { assert.equal(res.status, 200); done(); } catch (err) { done(err); } }); }); }); describe('.end()', () => { it('should issue a request', (done) => { request.get(`${uri}/login`).end((error, res) => { try { assert.equal(res.status, 200); done(); } catch (err) { done(err); } }); }); it('is optional with a promise', () => { if (typeof Promise === 'undefined') { return; } return request .get(`${uri}/login`) .then((res) => res.status) .then() .then((status) => { assert.equal(200, status, 'Real promises pass results through'); }); }); it('called only once with a promise', () => { if (typeof Promise === 'undefined') { return; } const request_ = request.get(`${uri}/unique`); return Promise.all([request_, request_, request_]).then((results) => { for (const item of results) { assert.deepEqual( item.body, results[0].body, 'It should keep returning the same result after being called once' ); } }); }); }); describe('res.error', () => { it('ok', (done) => { let calledErrorEvent = false; let calledOKHandler = false; request .get(`${uri}/error`) .ok((res) => { assert.strictEqual(500, res.status); calledOKHandler = true; return true; }) .on('error', (error) => { calledErrorEvent = true; }) .end((error, res) => { try { assert.ifError(error); assert.strictEqual(res.status, 500); assert(!calledErrorEvent); assert(calledOKHandler); done(); } catch (err) { done(err); } }); }); it('should be an Error object', (done) => { let calledErrorEvent = false; request .get(`${uri}/error`) .on('error', (error) => { assert.strictEqual(error.status, 500); calledErrorEvent = true; }) .end((error, res) => { try { if (NODE) { res.error.message.should.equal('cannot GET /error (500)'); } else { res.error.message.should.equal(`cannot GET ${uri}/error (500)`); } assert.strictEqual(res.error.status, 500); assert(error, 'should have an error for 500'); assert.equal(error.message, 'Internal Server Error'); assert(calledErrorEvent); done(); } catch (err) { done(err); } }); }); it('with .then() promise', () => { if (typeof Promise === 'undefined') { return; } return request.get(`${uri}/error`).then( () => { assert.fail(); }, (err) => { assert.equal(err.message, 'Internal Server Error'); } ); }); it('with .ok() returning false', () => { if (typeof Promise === 'undefined') { return; } return request .get(`${uri}/echo`) .ok(() => false) .then( () => { assert.fail(); }, (err) => { assert.equal(200, err.response.status); assert.equal(err.message, 'OK'); } ); }); it('with .ok() throwing an Error', () => { if (typeof Promise === 'undefined') { return; } return request .get(`${uri}/echo`) .ok(() => { throw new Error('boom'); }) .then( () => { assert.fail(); }, (err) => { assert.equal(200, err.status); assert.equal(200, err.response.status); assert.equal(err.message, 'boom'); } ); }); it('with .ok() throwing an Error with status', () => { if (typeof Promise === 'undefined') { return; } return request .get(`${uri}/echo`) .ok(() => { const err = new Error('boom'); err.status = 404; throw err; }) .then( () => { assert.fail(); }, (err) => { assert.equal(404, err.status); assert.equal(200, err.response.status); assert.equal(err.message, 'boom'); } ); }); }); describe('res.header', () => { it('should be an object', (done) => { request.get(`${uri}/login`).end((error, res) => { try { assert.equal('Express', res.header['x-powered-by']); done(); } catch (err) { done(err); } }); }); }); describe('set headers', () => { before(() => { Object.prototype.invalid = 'invalid'; }); after(() => { delete Object.prototype.invalid; }); it('should only set headers for ownProperties of header', (done) => { try { request .get(`${uri}/echo-headers`) .set('valid', 'ok') .end((error, res) => { if ( !error && res.body && res.body.valid && !res.body.hasOwnProperty('invalid') ) { return done(); } done(error || new Error('fail')); }); } catch (err) { done(err); } }); }); describe('res.charset', () => { it('should be set when present', (done) => { request.get(`${uri}/login`).end((error, res) => { try { res.charset.should.equal('utf-8'); done(); } catch (err) { done(err); } }); }); }); describe('res.statusType', () => { it('should provide the first digit', (done) => { request.get(`${uri}/login`).end((error, res) => { try { assert(!error, 'should not have an error for success responses'); assert.equal(200, res.status); assert.equal(2, res.statusType); done(); } catch (err) { done(err); } }); }); }); describe('res.type', () => { it('should provide the mime-type void of params', (done) => { request.get(`${uri}/login`).end((error, res) => { try { res.type.should.equal('text/html'); res.charset.should.equal('utf-8'); done(); } catch (err) { done(err); } }); }); }); describe('req.set(field, val)', () => { it('should set the header field', (done) => { request .post(`${uri}/echo`) .set('X-Foo', 'bar') .set('X-Bar', 'baz') .end((error, res) => { try { assert.equal('bar', res.header['x-foo']); assert.equal('baz', res.header['x-bar']); done(); } catch (err) { done(err); } }); }); }); describe('req.set(obj)', () => { it('should set the header fields', (done) => { request .post(`${uri}/echo`) .set({ 'X-Foo': 'bar', 'X-Bar': 'baz' }) .end((error, res) => { try { assert.equal('bar', res.header['x-foo']); assert.equal('baz', res.header['x-bar']); done(); } catch (err) { done(err); } }); }); }); describe('req.type(str)', () => { it('should set the Content-Type', (done) => { request .post(`${uri}/echo`) .type('text/x-foo') .end((error, res) => { try { res.header['content-type'].should.equal('text/x-foo'); done(); } catch (err) { done(err); } }); }); it('should map "json"', (done) => { request .post(`${uri}/echo`) .type('json') .send('{"a": 1}') .end((error, res) => { try { res.should.be.json(); done(); } catch (err) { done(err); } }); }); it('should map "html"', (done) => { request .post(`${uri}/echo`) .type('html') .end((error, res) => { try { res.header['content-type'].should.equal('text/html'); done(); } catch (err) { done(err); } }); }); }); describe('req.accept(str)', () => { it('should set Accept', (done) => { request .get(`${uri}/echo`) .accept('text/x-foo') .end((error, res) => { try { res.header.accept.should.equal('text/x-foo'); done(); } catch (err) { done(err); } }); }); it('should map "json"', (done) => { request .get(`${uri}/echo`) .accept('json') .end((error, res) => { try { res.header.accept.should.equal('application/json'); done(); } catch (err) { done(err); } }); }); it('should map "xml"', (done) => { request .get(`${uri}/echo`) .accept('xml') .end((error, res) => { try { // Mime module keeps changing this :( assert( res.header.accept == 'application/xml' || res.header.accept == 'text/xml' ); done(); } catch (err) { done(err); } }); }); it('should map "html"', (done) => { request .get(`${uri}/echo`) .accept('html') .end((error, res) => { try { res.header.accept.should.equal('text/html'); done(); } catch (err) { done(err); } }); }); }); describe('req.send(str)', () => { it('should write the string', (done) => { request .post(`${uri}/echo`) .type('json') .send('{"name":"tobi"}') .end((error, res) => { try { res.text.should.equal('{"name":"tobi"}'); done(); } catch (err) { done(err); } }); }); }); describe('req.send(Object)', () => { it('should default to json', (done) => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .end((error, res) => { try { res.should.be.json(); res.text.should.equal('{"name":"tobi"}'); done(); } catch (err) { done(err); } }); }); describe('when called several times', () => { it('should merge the objects', (done) => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .send({ age: 1 }) .end((error, res) => { try { res.should.be.json(); if (NODE) { res.buffered.should.be.true(); } res.text.should.equal('{"name":"tobi","age":1}'); done(); } catch (err) { done(err); } }); }); }); }); describe('.end(fn)', () => { it('should check arity', (done) => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .end((error, res) => { try { assert.ifError(error); res.text.should.equal('{"name":"tobi"}'); done(); } catch (err) { done(err); } }); }); it('should emit request', (done) => { const request_ = request.post(`${uri}/echo`); request_.on('request', (request) => { assert.equal(request_, request); done(); }); request_.end(); }); it('should emit response', (done) => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .on('response', (res) => { res.text.should.equal('{"name":"tobi"}'); done(); }) .end(); }); }); describe('.then(fulfill, reject)', () => { it('should support successful fulfills with .then(fulfill)', (done) => { if (typeof Promise === 'undefined') { return done(); } request .post(`${uri}/echo`) .send({ name: 'tobi' }) .then((res) => { res.type.should.equal('application/json'); res.text.should.equal('{"name":"tobi"}'); done(); }); }); it('should reject an error with .then(null, reject)', (done) => { if (typeof Promise === 'undefined') { return done(); } request.get(`${uri}/error`).then(null, (err) => { assert.equal(err.status, 500); assert.equal(err.response.text, 'boom'); done(); }); }); }); describe('.catch(reject)', () => { it('should reject an error with .catch(reject)', (done) => { if (typeof Promise === 'undefined') { return done(); } request.get(`${uri}/error`).catch((err) => { assert.equal(err.status, 500); assert.equal(err.response.text, 'boom'); done(); }); }); }); describe('.abort()', () => { it('should abort the request', (done) => { const request_ = request.get(`${uri}/delay/3000`); request_.end((error, res) => { try { assert(false, 'should not complete the request'); } catch (err) { done(err); } }); request_.on('error', (error) => { done(error); }); request_.on('abort', done); setTimeout(() => { request_.abort(); }, 500); }); it('should abort the promise', () => { const request_ = request.get(`${uri}/delay/3000`); setTimeout(() => { request_.abort(); }, 10); return request_.then( () => { assert.fail('should not complete the request'); }, (err) => { assert.equal('ABORTED', err.code); } ); }); it('should allow chaining .abort() several times', (done) => { const request_ = request.get(`${uri}/delay/3000`); request_.end((error, res) => { try { assert(false, 'should not complete the request'); } catch (err) { done(err); } }); // This also verifies only a single 'done' event is emitted request_.on('abort', done); setTimeout(() => { request_.abort().abort().abort(); }, 1000); }); it('should not allow abort then end', (done) => { request .get(`${uri}/delay/3000`) .abort() .end((error, res) => { done(error ? undefined : new Error('Expected abort error')); }); }); }); describe('req.toJSON()', () => { it('should describe the request', (done) => { const request_ = request.post(`${uri}/echo`).send({ foo: 'baz' }); request_.end((error, res) => { try { const json = request_.toJSON(); assert.equal('POST', json.method); assert(/\/echo$/.test(json.url)); assert.equal('baz', json.data.foo); done(); } catch (err) { done(err); } }); }); }); describe('req.options()', () => { it('should allow request body', (done) => { request .options(`${uri}/options/echo/body`) .send({ foo: 'baz' }) .end((error, res) => { try { assert.equal(error, null); assert.strictEqual(res.body.foo, 'baz'); done(); } catch (err) { done(err); } }); }); }); describe('req.sortQuery()', () => { it('nop with no querystring', (done) => { request .get(`${uri}/url`) .sortQuery() .end((error, res) => { try { assert.equal(res.text, '/url'); done(); } catch (err) { done(err); } }); }); it('should sort the request querystring', (done) => { request .get(`${uri}/url`) .query('search=Manny') .query('order=desc') .sortQuery() .end((error, res) => { try { assert.equal(res.text, '/url?order=desc&search=Manny'); done(); } catch (err) { done(err); } }); }); it('should allow disabling sorting', (done) => { request .get(`${uri}/url`) .query('search=Manny') .query('order=desc') .sortQuery() // take default of true .sortQuery(false) // override it in later call .end((error, res) => { try { assert.equal(res.text, '/url?search=Manny&order=desc'); done(); } catch (err) { done(err); } }); }); it('should sort the request querystring using customized function', (done) => { request .get(`${uri}/url`) .query('name=Nick') .query('search=Manny') .query('order=desc') .sortQuery((a, b) => a.length - b.length) .end((error, res) => { try { assert.equal(res.text, '/url?name=Nick&order=desc&search=Manny'); done(); } catch (err) { done(err); } }); }); }); }); superagent-8.0.5/test/client/000077500000000000000000000000001434246777100161555ustar00rootroot00000000000000superagent-8.0.5/test/client/request.js000066400000000000000000000202031434246777100202000ustar00rootroot00000000000000const assert = require('assert'); const request = require('../support/client'); describe('request', function () { this.timeout(20_000); it('request() error object', (next) => { request('GET', '/error').end((error, res) => { assert(error); assert(res.error, 'response should be an error'); assert.equal(res.error.message, 'cannot GET /error (500)'); assert.equal(res.error.status, 500); assert.equal(res.error.method, 'GET'); assert.equal(res.error.url, '/error'); next(); }); }); // This test results in a weird Jetty error on IE9 and IE11 saying PATCH is not a supported method. Looks like something's up with SauceLabs const isIE11 = Boolean(/Trident.*rv[ :]*11\./.test(navigator.userAgent)); const isIE9OrOlder = !window.atob; if (!isIE9OrOlder && !isIE11) { // Don't run on IE9 or older, or IE11 it('patch()', (next) => { request.patch('/user/12').end((error, res) => { assert.equal('updated', res.text); next(); }); }); } it('POST native FormData', (next) => { if (!window.FormData) { // Skip test if FormData is not supported by browser return next(); } const data = new FormData(); data.append('foo', 'bar'); request .post('/echo') .send(data) .end((error, res) => { assert.equal('multipart/form-data', res.type); next(); }); }); it('defaults attached files to original file names', (next) => { if (!window.FormData) { // Skip test if FormData is are not supported by browser return next(); } try { var file = new File([''], 'image.jpg', { type: 'image/jpeg' }); } catch (err) { // Skip if file constructor not supported. return next(); } request .post('/echo') .attach('image', file) .end((error, res) => { const regx = new RegExp(`filename="${file.name}"`); assert.notEqual(res.text.match(regx), null); next(); }); }); it('attach() cannot be mixed with send()', () => { if (!window.FormData || !window.File) { // Skip test if FormData is are not supported by browser return; } assert.throws(() => { const file = new File([''], 'image.jpg', { type: 'image/jpeg' }); request.post('/echo').attach('image', file).send('hi'); }); assert.throws(() => { const file = new File([''], 'image.jpg', { type: 'image/jpeg' }); request.post('/echo').send('hi').attach('image', file); }); }); it('GET invalid json', (next) => { request.get('/invalid-json').end((error, res) => { assert(error.parse); assert.deepEqual( error.rawResponse, ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}" ); next(); }); }); it('GET querystring empty objects', (next) => { const request_ = request.get('/querystring').query({}); request_.end((error, res) => { assert.deepEqual(request_._query, []); assert.deepEqual(res.body, {}); next(); }); }); it('GET querystring object .get(uri, obj)', (next) => { request.get('/querystring', { search: 'Manny' }).end((error, res) => { assert.deepEqual(res.body, { search: 'Manny' }); next(); }); }); it('GET querystring object .get(uri, obj, fn)', (next) => { request.get('/querystring', { search: 'Manny' }, (error, res) => { assert.deepEqual(res.body, { search: 'Manny' }); next(); }); }); it('GET querystring object with null value', (next) => { request.get('/url', { nil: null }).end((error, res) => { assert.equal(res.text, '/url?nil'); next(); }); }); it('GET blob object', (next) => { if (typeof Blob === 'undefined') { return next(); } request .get('/blob', { foo: 'bar' }) .responseType('blob') .end((error, res) => { assert(res.xhr.response instanceof Blob); assert(res.body instanceof Blob); next(); }); }); it('Reject node-only function', () => { assert.throws(() => { request.get().write(); }); assert.throws(() => { request.get().pipe(); }); }); window.btoa = window.btoa || null; it('basic auth', (next) => { window.btoa = window.btoa || require('Base64').btoa; request .post('/auth') .auth('foo', 'bar') .end((error, res) => { assert.equal('foo', res.body.user); assert.equal('bar', res.body.pass); next(); }); }); it('auth type "basic"', (next) => { window.btoa = window.btoa || require('Base64').btoa; request .post('/auth') .auth('foo', 'bar', { type: 'basic' }) .end((error, res) => { assert.equal('foo', res.body.user); assert.equal('bar', res.body.pass); next(); }); }); it('auth type "auto"', (next) => { window.btoa = window.btoa || require('Base64').btoa; request .post('/auth') .auth('foo', 'bar', { type: 'auto' }) .end((error, res) => { assert.equal('foo', res.body.user); assert.equal('bar', res.body.pass); next(); }); }); it('progress event listener on xhr object registered when some on the request', () => { const request_ = request.get('/foo').on('progress', (data) => {}); request_.end(); if (request_.xhr.upload) { // Only run assertion on capable browsers assert.notEqual(null, request_.xhr.upload.onprogress); } }); it('no progress event listener on xhr object when none registered on request', () => { const request_ = request.get('/foo'); request_.end(); if (request_.xhr.upload) { // Only run assertion on capable browsers assert.strictEqual(null, request_.xhr.upload.onprogress); } }); it('Request#parse overrides body parser no matter Content-Type', (done) => { let runParser = false; function testParser(data) { runParser = true; return JSON.stringify(data); } request .post('/user') .serialize(testParser) .type('json') .send({ foo: 123 }) .end((error) => { if (error) return done(error); assert(runParser); done(); }); }); // Don't run on browsers without xhr2 support if ('FormData' in window) { it('xhr2 download file old hack', (next) => { request.parse['application/vnd.superagent'] = (object) => object; request .get('/arraybuffer') .on('request', function () { this.xhr.responseType = 'arraybuffer'; }) .on('response', (res) => { assert(res.body instanceof ArrayBuffer); next(); }) .end(); }); it('xhr2 download file responseType', (next) => { request.parse['application/vnd.superagent'] = (object) => object; request .get('/arraybuffer') .responseType('arraybuffer') .on('response', (res) => { assert(res.body instanceof ArrayBuffer); next(); }) .end(); }); it('get error status code and rawResponse on file download', (next) => { request .get('/arraybuffer-unauthorized') .responseType('arraybuffer') .end((error, res) => { assert.equal(error.status, 401); assert(res.body instanceof ArrayBuffer); assert(error.response.body instanceof ArrayBuffer); const decodedString = String.fromCharCode.apply( null, new Uint8Array(res.body) ); assert( decodedString, '{"message":"Authorization has been denied for this request."}' ); next(); }); }); } it('parse should take precedence over default parse', (done) => { request .get('/foo') .parse((res, text) => `customText: ${res.status}`) .end((error, res) => { assert(res.ok); assert(res.body === 'customText: 200'); done(); }); }); it('handles `xhr.open()` errors', (done) => { request .get('http://foo\0.com') // throws "Failed to execute 'open' on 'XMLHttpRequest': Invalid URL" .end((error, res) => { assert(error); done(); }); }); }); superagent-8.0.5/test/client/serialize.js000066400000000000000000000043311434246777100205030ustar00rootroot00000000000000const assert = require('assert'); const request = require('../support/client'); function serialize(object, res) { const value = request.serializeObject(object); assert.equal( value, res, `${JSON.stringify( object )} to "${res}" serialization failed. got: "${value}"` ); } function parse(string_, object) { const value = request.parseString(string_); assert.deepEqual( value, object, `"${string_}" to ${JSON.stringify( object )} parse failed. got: ${JSON.stringify(value)}` ); } describe('request.serializeObject()', () => { it('should serialize', () => { serialize('test', 'test'); serialize('foo=bar', 'foo=bar'); serialize({ foo: 'bar' }, 'foo=bar'); serialize({ foo: null }, 'foo'); serialize({ foo: 'null' }, 'foo=null'); serialize({ foo: undefined }, ''); serialize({ foo: 'undefined' }, 'foo=undefined'); serialize({ name: 'tj', age: 24 }, 'name=tj&age=24'); serialize({ name: '&tj&' }, 'name=%26tj%26'); serialize({ '&name&': 'tj' }, '%26name%26=tj'); serialize({ hello: '`test`' }, 'hello=%60test%60'); serialize({ $hello: 'test' }, '$hello=test'); }); }); describe('request.parseString()', () => { it('should parse', () => { parse('name=tj', { name: 'tj' }); parse('name=Manny&species=cat', { name: 'Manny', species: 'cat' }); parse('redirect=/&ok', { redirect: '/', ok: '' }); parse('%26name=tj', { '&name': 'tj' }); parse('name=tj%26', { name: 'tj&' }); parse('%60', { '`': '' }); }); }); describe('Merging objects', () => { it("Don't mix FormData and JSON", () => { if (!window.FormData) { // Skip test if FormData is not supported by browser return; } const data = new FormData(); data.append('foo', 'bar'); assert.throws(() => { request.post('/echo').send(data).send({ allowed: false }); }); }); it("Don't mix Blob and JSON", () => { if (!window.Blob) { return; } request .post('/echo') .send(new Blob(['will be cleared'])) .send(false) .send({ allowed: true }); assert.throws(() => { request .post('/echo') .send(new Blob(['hello'])) .send({ allowed: false }); }); }); }); superagent-8.0.5/test/client/xdomain.js000066400000000000000000000030371434246777100201550ustar00rootroot00000000000000const assert = require('assert'); const request = require('../support/client'); describe('xdomain', function () { this.timeout(20_000); // TODO (defunctzombie) I am not certain this actually forces xdomain request // use localtunnel.me and tunnel127.com alias instead it('should support req.withCredentials()', (next) => { request .get(`//${window.location.host}/xdomain`) .withCredentials() .end((error, res) => { assert.equal(200, res.status); assert.equal('tobi', res.text); next(); }); }); // xdomain not supported in old IE and IE11 gives weird Jetty errors (looks like a SauceLabs issue) const isIE11 = Boolean(/Trident.*rv[ :]*11\./.test(navigator.userAgent)); const isIE9OrOlder = !window.atob; if (!isIE9OrOlder && !isIE11) { // Don't run on IE9 or older, or IE11 it('should handle x-domain failure', (next) => { request.get('//tunne127.com').end((error, res) => { assert(error, 'error missing'); assert(error.crossDomain, 'not .crossDomain'); next(); }); }); it('should handle x-domain failure after repeat attempts', (next) => { request .get('//tunne127.com') .retry(2) .end((error, res) => { try { assert(error, 'error missing'); assert(error.crossDomain, 'not .crossDomain'); assert.equal(2, error.retries, 'expected an error with .retries'); next(); } catch (err) { next(err); } }); }); } }); superagent-8.0.5/test/content-type.js000066400000000000000000000015331434246777100176700ustar00rootroot00000000000000const assert = require('assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); describe('req.set("Content-Type", contentType)', function () { let setup; let uri; before(async () => { setup = await getSetup(); uri = setup.uri; }); this.timeout(20_000); it('should work with just the contentType component', (done) => { request .post(`${uri}/echo`) .set('Content-Type', 'application/json') .send({ name: 'tobi' }) .end((error) => { assert(!error); done(); }); }); it('should work with the charset component', (done) => { request .post(`${uri}/echo`) .set('Content-Type', 'application/json; charset=utf-8') .send({ name: 'tobi' }) .end((error) => { assert(!error); done(); }); }); }); superagent-8.0.5/test/form.js000066400000000000000000000072161434246777100162060ustar00rootroot00000000000000const assert = require('assert'); const should = require('should'); const getSetup = require('./support/setup'); const request = require('./support/client'); if (!assert.deepStrictEqual) assert.deepStrictEqual = assert.deepEqual; describe('req.send(Object) as "form"', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('with req.type() set to form', () => { it('should send x-www-form-urlencoded data', (done) => { request .post(`${base}/echo`) .type('form') .send({ name: 'tobi' }) .end((error, res) => { res.header['content-type'].should.equal( 'application/x-www-form-urlencoded' ); res.text.should.equal('name=tobi'); done(); }); }); }); describe('when called several times', () => { it('should merge the objects', (done) => { request .post(`${base}/echo`) .type('form') .send({ name: { first: 'tobi', last: 'holowaychuk' } }) .send({ age: '1' }) .end((error, res) => { res.header['content-type'].should.equal( 'application/x-www-form-urlencoded' ); res.text.should.equal( 'name%5Bfirst%5D=tobi&name%5Blast%5D=holowaychuk&age=1' ); done(); }); }); }); }); describe('req.attach', () => { it('ignores null file', (done) => { request .post('/echo') .attach('image', null) .end((error, res) => { done(); }); }); }); describe('req.field', function () { let setup; let base; let formDataSupported; before(async () => { setup = await getSetup(); base = setup.uri; formDataSupported = setup.NODE || FormData !== 'undefined'; }); this.timeout(5000); it('allow bools', (done) => { if (!formDataSupported) { return done(); } request .post(`${base}/formecho`) .field('bools', true) .field('strings', 'true') .end((error, res) => { assert.ifError(error); assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' }); done(); }); }); it('allow objects', (done) => { if (!formDataSupported) { return done(); } request .post(`${base}/formecho`) .field({ bools: true, strings: 'true' }) .end((error, res) => { assert.ifError(error); assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' }); done(); }); }); it('works with arrays in objects', (done) => { if (!formDataSupported) { return done(); } request .post(`${base}/formecho`) .field({ numbers: [1, 2, 3] }) .end((error, res) => { assert.ifError(error); assert.deepStrictEqual(res.body, { numbers: ['1', '2', '3'] }); done(); }); }); it('works with arrays', (done) => { if (!formDataSupported) { return done(); } request .post(`${base}/formecho`) .field('letters', ['a', 'b', 'c']) .end((error, res) => { assert.ifError(error); assert.deepStrictEqual(res.body, { letters: ['a', 'b', 'c'] }); done(); }); }); it('throw when empty', () => { should.throws(() => { request.post(`${base}/echo`).field(); }, /name/); should.throws(() => { request.post(`${base}/echo`).field('name'); }, /val/); }); it('cannot be mixed with send()', () => { assert.throws(() => { request.post('/echo').field('form', 'data').send('hi'); }); assert.throws(() => { request.post('/echo').send('hi').field('form', 'data'); }); }); }); superagent-8.0.5/test/json.js000066400000000000000000000136061434246777100162140ustar00rootroot00000000000000const getSetup = require('./support/setup'); const doesntWorkInHttp2 = !process.env.HTTP2_TEST; const assert = require('assert'); const request = require('./support/client'); describe('req.send(Object) as "json"', function () { let setup; let uri; let doesntWorkInBrowserYet; before(async () => { setup = await getSetup(); uri = setup.uri; doesntWorkInBrowserYet = setup.NODE; }); this.timeout(20_000); it('should default to json', (done) => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .end((error, res) => { res.should.be.json(); res.text.should.equal('{"name":"tobi"}'); done(); }); }); it('should work with arrays', (done) => { request .post(`${uri}/echo`) .send([1, 2, 3]) .end((error, res) => { res.should.be.json(); res.text.should.equal('[1,2,3]'); done(); }); }); it('should work with value null', (done) => { request .post(`${uri}/echo`) .type('json') .send('null') .end((error, res) => { res.should.be.json(); assert.strictEqual(res.body, null); done(); }); }); it('should work with value false', (done) => { request .post(`${uri}/echo`) .type('json') .send('false') .end((error, res) => { res.should.be.json(); res.body.should.equal(false); done(); }); }); if (doesntWorkInBrowserYet) it('should work with value 0', (done) => { // fails in IE9 request .post(`${uri}/echo`) .type('json') .send('0') .end((error, res) => { res.should.be.json(); res.body.should.equal(0); done(); }); }); it('should work with empty string value', (done) => { request .post(`${uri}/echo`) .type('json') .send('""') .end((error, res) => { res.should.be.json(); res.body.should.equal(''); done(); }); }); if (doesntWorkInBrowserYet && doesntWorkInHttp2) it('should work with GET', (done) => { request .get(`${uri}/echo`) .send({ tobi: 'ferret' }) .end((error, res) => { try { res.should.be.json(); res.text.should.equal('{"tobi":"ferret"}'); ({ tobi: 'ferret' }.should.eql(res.body)); done(); } catch (err) { done(err); } }); }); it('should work with vendor MIME type', (done) => { request .post(`${uri}/echo`) .set('Content-Type', 'application/vnd.example+json') .send({ name: 'vendor' }) .end((error, res) => { res.text.should.equal('{"name":"vendor"}'); ({ name: 'vendor' }.should.eql(res.body)); done(); }); }); describe('when called several times', () => { it('should merge the objects', (done) => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .send({ age: 1 }) .end((error, res) => { res.should.be.json(); res.text.should.equal('{"name":"tobi","age":1}'); ({ name: 'tobi', age: 1 }.should.eql(res.body)); done(); }); }); }); }); describe('res.body', function () { let setup; let uri; let doesntWorkInBrowserYet; before(async () => { setup = await getSetup(); uri = setup.uri; doesntWorkInBrowserYet = setup.NODE; }); this.timeout(20_000); describe('application/json', () => { it('should parse the body', (done) => { request.get(`${uri}/json`).end((error, res) => { res.text.should.equal('{"name":"manny"}'); res.body.should.eql({ name: 'manny' }); done(); }); }); }); if (doesntWorkInBrowserYet) describe('HEAD requests', () => { it('should not throw a parse error', (done) => { request.head(`${uri}/json`).end((error, res) => { try { assert.strictEqual(error, null); assert.strictEqual(res.text, undefined); assert.strictEqual(Object.keys(res.body).length, 0); done(); } catch (err) { done(err); } }); }); }); describe('Invalid JSON response', () => { it('should return the raw response', (done) => { request.get(`${uri}/invalid-json`).end((error, res) => { assert.deepEqual( error.rawResponse, ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}" ); done(); }); }); it('should return the http status code', (done) => { request.get(`${uri}/invalid-json-forbidden`).end((error, res) => { assert.equal(error.statusCode, 403); done(); }); }); }); if (doesntWorkInBrowserYet) describe('No content', () => { it('should not throw a parse error', (done) => { request.get(`${uri}/no-content`).end((error, res) => { try { assert.strictEqual(error, null); assert.strictEqual(res.text, ''); assert.strictEqual(Object.keys(res.body).length, 0); done(); } catch (err) { done(err); } }); }); }); if (doesntWorkInBrowserYet) describe('application/json+hal', () => { it('should parse the body', (done) => { request.get(`${uri}/json-hal`).end((error, res) => { if (error) return done(error); res.text.should.equal('{"name":"hal 5000"}'); res.body.should.eql({ name: 'hal 5000' }); done(); }); }); }); if (doesntWorkInBrowserYet) describe('vnd.collection+json', () => { it('should parse the body', (done) => { request.get(`${uri}/collection-json`).end((error, res) => { res.text.should.equal('{"name":"chewbacca"}'); res.body.should.eql({ name: 'chewbacca' }); done(); }); }); }); }); superagent-8.0.5/test/node/000077500000000000000000000000001434246777100156245ustar00rootroot00000000000000superagent-8.0.5/test/node/agency.js000066400000000000000000000115201434246777100174270ustar00rootroot00000000000000'use strict'; require('should-http'); const express = require('../support/express'); const app = express(); const request = require('../support/client'); const assert = require('assert'); const should = require('should'); const cookieParser = require('cookie-parser'); const session = require('express-session'); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); http.Http2ServerResponse.prototype._implicitHeader = function () { this.writeHead(this.statusCode); }; } app.use(cookieParser()); app.use( session({ secret: 'secret', resave: true, saveUninitialized: true }) ); app.post('/signin', (request_, res) => { request_.session.user = 'hunter@hunterloftis.com'; res.redirect('/dashboard'); }); app.post('/setcookie', (request_, res) => { res.cookie('cookie', 'jar'); res.sendStatus(200); }); app.get('/getcookie', (request_, res) => { res.status(200).send(request_.cookies.cookie); }); app.get('/dashboard', (request_, res) => { if (request_.session.user) return res.status(200).send('dashboard'); res.status(401).send('dashboard'); }); app.all('/signout', (request_, res) => { request_.session.regenerate(() => { res.status(200).send('signout'); }); }); app.get('/', (request_, res) => { if (request_.session.user) return res.redirect('/dashboard'); res.status(200).send('home'); }); app.post('/redirect', (request_, res) => { res.redirect('/simple'); }); app.get('/simple', (request_, res) => { res.status(200).send('simple'); }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('request', () => { describe('persistent agent', () => { const agent1 = request.agent(); const agent2 = request.agent(); const agent3 = request.agent(); const agent4 = request.agent(); it('should gain a session on POST', () => agent3.post(`${base}/signin`).then((res) => { res.should.have.status(200); should.not.exist(res.headers['set-cookie']); res.text.should.containEql('dashboard'); })); it('should start with empty session (set cookies)', (done) => { agent1.get(`${base}/dashboard`).end((error, res) => { should.exist(error); res.should.have.status(401); should.exist(res.headers['set-cookie']); done(); }); }); it('should gain a session (cookies already set)', () => agent1.post(`${base}/signin`).then((res) => { res.should.have.status(200); should.not.exist(res.headers['set-cookie']); res.text.should.containEql('dashboard'); })); it('should persist cookies across requests', () => agent1.get(`${base}/dashboard`).then((res) => { res.should.have.status(200); })); it('should have the cookie set in the end callback', () => agent4 .post(`${base}/setcookie`) .then(() => agent4.get(`${base}/getcookie`)) .then((res) => { res.should.have.status(200); assert.strictEqual(res.text, 'jar'); })); it('should not share cookies', (done) => { agent2.get(`${base}/dashboard`).end((error, res) => { should.exist(error); res.should.have.status(401); done(); }); }); it('should not lose cookies between agents', () => agent1.get(`${base}/dashboard`).then((res) => { res.should.have.status(200); })); it('should be able to follow redirects', () => agent1.get(base).then((res) => { res.should.have.status(200); res.text.should.containEql('dashboard'); })); it('should be able to post redirects', () => agent1 .post(`${base}/redirect`) .send({ foo: 'bar', baz: 'blaaah' }) .then((res) => { res.should.have.status(200); res.text.should.containEql('simple'); res.redirects.should.eql([`${base}/simple`]); })); it('should be able to limit redirects', (done) => { agent1 .get(base) .redirects(0) .end((error, res) => { should.exist(error); res.should.have.status(302); res.redirects.should.eql([]); res.header.location.should.equal('/dashboard'); done(); }); }); it('should be able to create a new session (clear cookie)', () => agent1.post(`${base}/signout`).then((res) => { res.should.have.status(200); should.exist(res.headers['set-cookie']); })); it('should regenerate with an empty session', (done) => { agent1.get(`${base}/dashboard`).end((error, res) => { should.exist(error); res.should.have.status(401); should.not.exist(res.headers['set-cookie']); done(); }); }); }); }); superagent-8.0.5/test/node/basic-auth.js000066400000000000000000000023051434246777100202020ustar00rootroot00000000000000'use strict'; const URL = require('url'); const request = require('../support/client'); const getSetup = require('../support/setup'); describe('Basic auth', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('when credentials are present in url', () => { it('should set Authorization', (done) => { const new_url = URL.parse(base); new_url.auth = 'tobi:learnboost'; new_url.pathname = '/basic-auth'; request.get(URL.format(new_url)).end((error, res) => { res.status.should.equal(200); done(); }); }); }); describe('req.auth(user, pass)', () => { it('should set Authorization', (done) => { request .get(`${base}/basic-auth`) .auth('tobi', 'learnboost') .end((error, res) => { res.status.should.equal(200); done(); }); }); }); describe('req.auth(user + ":" + pass)', () => { it('should set authorization', (done) => { request .get(`${base}/basic-auth/again`) .auth('tobi') .end((error, res) => { res.status.should.eql(200); done(); }); }); }); }); superagent-8.0.5/test/node/basic.js000066400000000000000000000220141434246777100172420ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const fs = require('fs'); const { EventEmitter } = require('events'); const { StringDecoder } = require('string_decoder'); const url = require('url'); const getSetup = require('../support/setup'); const request = require('../support/client'); const doesntWorkInHttp2 = !process.env.HTTP2_TEST; describe('[node] request', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('with an url', () => { it('should preserve the encoding of the url', (done) => { request.get(`${base}/url?a=(b%29`).end((error, res) => { assert.equal('/url?a=(b%29', res.text); done(); }); }); }); describe('with an object', () => { it('should format the url', () => request.get(url.parse(`${base}/login`)).then((res) => { assert(res.ok); })); }); describe('without a schema', () => { it('should default to http', () => request.get(`${base}/login`).then((res) => { assert.equal(res.status, 200); })); }); describe('res.toJSON()', () => { it('should describe the response', () => request .post(`${base}/echo`) .send({ foo: 'baz' }) .then((res) => { const object = res.toJSON(); assert.equal('object', typeof object.header); assert.equal('object', typeof object.req); assert.equal(200, object.status); assert.equal('{"foo":"baz"}', object.text); })); }); describe('res.links', () => { it('should default to an empty object', () => request.get(`${base}/login`).then((res) => { res.links.should.eql({}); })); it('should parse the Link header field', (done) => { request.get(`${base}/links`).end((error, res) => { res.links.next.should.equal( 'https://api.github.com/repos/visionmedia/mocha/issues?page=2' ); done(); }); }); }); describe('req.unset(field)', () => { it('should remove the header field', (done) => { request .post(`${base}/echo`) .unset('User-Agent') .end((error, res) => { assert.equal(void 0, res.header['user-agent']); done(); }); }); }); describe('case-insensitive', () => { it('should set/get header fields case-insensitively', () => { const r = request.post(`${base}/echo`); r.set('MiXeD', 'helloes'); assert.strictEqual(r.get('mixed'), 'helloes'); }); it('should unset header fields case-insensitively', () => { const r = request.post(`${base}/echo`); r.set('MiXeD', 'helloes'); r.unset('MIXED'); assert.strictEqual(r.get('mixed'), undefined); }); }); describe('req.write(str)', () => { it('should write the given data', (done) => { const request_ = request.post(`${base}/echo`); request_.set('Content-Type', 'application/json'); assert.equal('boolean', typeof request_.write('{"name"')); assert.equal('boolean', typeof request_.write(':"tobi"}')); request_.end((error, res) => { res.text.should.equal('{"name":"tobi"}'); done(); }); }); }); describe('req.pipe(stream)', () => { it('should pipe the response to the given stream', (done) => { const stream = new EventEmitter(); stream.buf = ''; stream.writable = true; stream.write = function (chunk) { this.buf += chunk; }; stream.end = function () { this.buf.should.equal('{"name":"tobi"}'); done(); }; request.post(`${base}/echo`).send('{"name":"tobi"}').pipe(stream); }); }); describe('.buffer()', () => { it('should enable buffering', (done) => { request .get(`${base}/custom`) .buffer() .end((error, res) => { assert.ifError(error); assert.equal('custom stuff', res.text); assert(res.buffered); done(); }); }); it("should take precedence over request.buffer['someMimeType'] = false", (done) => { const type = 'application/barbaz'; const send = 'some text'; request.buffer[type] = false; request .post(`${base}/echo`) .type(type) .send(send) .buffer() .end((error, res) => { delete request.buffer[type]; assert.ifError(error); assert.equal(res.type, type); assert.equal(send, res.text); assert(res.buffered); done(); }); }); }); describe('.buffer(false)', () => { it('should disable buffering', (done) => { request .post(`${base}/echo`) .type('application/x-dog') .send('hello this is dog') .buffer(false) .end((error, res) => { assert.ifError(error); assert.equal(null, res.text); res.body.should.eql({}); let buf = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { buf += chunk; }); res.on('end', () => { buf.should.equal('hello this is dog'); done(); }); }); }); it("should take precedence over request.buffer['someMimeType'] = true", (done) => { const type = 'application/foobar'; const send = 'hello this is a dog'; request.buffer[type] = true; request .post(`${base}/echo`) .type(type) .send(send) .buffer(false) .end((error, res) => { delete request.buffer[type]; assert.ifError(error); assert.equal(null, res.text); assert.equal(res.type, type); assert(!res.buffered); res.body.should.eql({}); let buf = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { buf += chunk; }); res.on('end', () => { buf.should.equal(send); done(); }); }); }); }); describe('.withCredentials()', () => { it('should not throw an error when using the client-side "withCredentials" method', (done) => { request .get(`${base}/custom`) .withCredentials() .end((error, res) => { assert.ifError(error); done(); }); }); }); describe('.agent()', () => { it('should return the defaut agent', (done) => { const request_ = request.post(`${base}/echo`); request_.agent().should.equal(false); done(); }); }); describe('.agent(undefined)', () => { it('should set an agent to undefined and ensure it is chainable', (done) => { const request_ = request.get(`${base}/echo`); const returnValue = request_.agent(undefined); returnValue.should.equal(request_); assert.strictEqual(request_.agent(), undefined); done(); }); }); describe('.agent(new http.Agent())', () => { it('should set passed agent', (done) => { const http = require('http'); const request_ = request.get(`${base}/echo`); const agent = new http.Agent(); const returnValue = request_.agent(agent); returnValue.should.equal(request_); request_.agent().should.equal(agent); done(); }); }); describe('with a content type other than application/json or text/*', () => { it('should still use buffering', () => { return request .post(`${base}/echo`) .type('application/x-dog') .send('hello this is dog') .then((res) => { assert.equal(null, res.text); assert.equal(res.body.toString(), 'hello this is dog'); res.buffered.should.be.true; }); }); }); describe('content-length', () => { it('should be set to the byte length of a non-buffer object', (done) => { const decoder = new StringDecoder('utf8'); let img = fs.readFileSync(`${__dirname}/fixtures/test.png`); img = decoder.write(img); request .post(`${base}/echo`) .type('application/x-image') .send(img) .buffer(false) .end((error, res) => { assert.ifError(error); assert(!res.buffered); assert.equal(res.header['content-length'], Buffer.byteLength(img)); done(); }); }); it('should be set to the length of a buffer object', (done) => { const img = fs.readFileSync(`${__dirname}/fixtures/test.png`); request .post(`${base}/echo`) .type('application/x-image') .send(img) .buffer(true) .end((error, res) => { assert.ifError(error); assert(res.buffered); assert.equal(res.header['content-length'], img.length); done(); }); }); }); if (doesntWorkInHttp2) it('should send body with .get().send()', (next) => { request .get(`${base}/echo`) .set('Content-Type', 'text/plain') .send('wahoo') .end((error, res) => { try { assert.equal('wahoo', res.text); next(); } catch (err) { next(err); } }); }); }); superagent-8.0.5/test/node/buffers.js000066400000000000000000000062651434246777100176270ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); describe("req.buffer['someMimeType']", () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); it('should respect that agent.buffer(true) takes precedent', (done) => { const agent = request.agent(); agent.buffer(true); const type = 'application/somerandomtype'; const send = 'somerandomtext'; request.buffer[type] = false; agent .post(`${base}/echo`) .type(type) .send(send) .end((error, res) => { delete request.buffer[type]; assert.ifError(error); assert.equal(res.type, type); assert.equal(send, res.text); assert(res.buffered); done(); }); }); it('should respect that agent.buffer(false) takes precedent', (done) => { const agent = request.agent(); agent.buffer(false); const type = 'application/barrr'; const send = 'some random text2'; request.buffer[type] = true; agent .post(`${base}/echo`) .type(type) .send(send) .end((error, res) => { delete request.buffer[type]; assert.ifError(error); assert.equal(null, res.text); assert.equal(res.type, type); assert(!res.buffered); res.body.should.eql({}); let buf = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { buf += chunk; }); res.on('end', () => { buf.should.equal(send); done(); }); }); }); it('should disable buffering for that mimetype when false', (done) => { const type = 'application/bar'; const send = 'some random text'; request.buffer[type] = false; request .post(`${base}/echo`) .type(type) .send(send) .end((error, res) => { delete request.buffer[type]; assert.ifError(error); assert.equal(null, res.text); assert.equal(res.type, type); assert(!res.buffered); res.body.should.eql({}); let buf = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { buf += chunk; }); res.on('end', () => { buf.should.equal(send); done(); }); }); }); it('should enable buffering for that mimetype when true', (done) => { const type = 'application/baz'; const send = 'woooo'; request.buffer[type] = true; request .post(`${base}/echo`) .type(type) .send(send) .end((error, res) => { delete request.buffer[type]; assert.ifError(error); assert.equal(res.type, type); assert.equal(send, res.text); assert(res.buffered); done(); }); }); it('should fallback to default handling for that mimetype when undefined', () => { const type = 'application/bazzz'; const send = 'woooooo'; return request .post(`${base}/echo`) .type(type) .send(send) .then((res) => { assert.equal(res.type, type); assert.equal(send, res.body.toString()); assert(res.buffered); }); }); }); superagent-8.0.5/test/node/exports.js000066400000000000000000000013751434246777100176740ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); describe('exports', () => { it('should expose .protocols', () => { Object.keys(request.protocols).should.eql(['http:', 'https:', 'http2:']); }); it('should expose .serialize', () => { Object.keys(request.serialize).should.eql([ 'application/x-www-form-urlencoded', 'application/json' ]); }); it('should expose .parse', () => { Object.keys(request.parse).should.eql([ 'application/x-www-form-urlencoded', 'application/json', 'text', 'application/json-seq', 'application/octet-stream', 'application/pdf', 'image' ]); }); it('should export .buffer', () => { Object.keys(request.buffer).should.eql([]); }); }); superagent-8.0.5/test/node/fixtures/000077500000000000000000000000001434246777100174755ustar00rootroot00000000000000superagent-8.0.5/test/node/fixtures/ca.cert.pem000066400000000000000000000016741434246777100215270ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICljCCAX4CCQDnGz3+qH/zGzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJD QTAeFw0xODEyMDIxNjIyMThaFw0zMjA4MTAxNjIyMThaMA0xCzAJBgNVBAMMAkNB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtgUDcB7R94A22I0D8Iba c000ZBINtvnyvoPP5U2hRsxI9tcW/LLm0GhzM5XJJNQ0jSv0ixIFKomtFBSjKMq/ NH156SqKqyDGU1fPnGjzcJulxceODIokAqNCbZ7Bys6nqUdilNfLQ4bBBWYsEUWT vgbUeDRHvQGycou/pLpYGLCJ4tpc4n6ybox1uPi0qlvFI7aWvQFjOxxR0VeRixXf qXjVCDIr9OJIWiXLrJYDlYqG2gRF/yTDZ4qmQxbZzJ6AXMpaRUiHUO0FHu7baEux ylIc0KVcAmYMGdhFlmDrMNRsmnADKPX9DIMh92XWyE10oNK50I1rIhpvN4XfQx6E UwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCIXj1vfTVRB4ea/udjazPHaLAeocbg d8babbDItOm1ApAoUhNuxPVxyISSFrowCVlaWxB+1ztfeUAB/Axfj0mbXk1hgo2D 4+rft8hOtdg91bU+gHPd/7QGkpPIs5PC+TsnVj0mNqZ5o8qZsLhgoXp3Dl5yMhEs sRegLkmBQHzEsKFU2cSxVD7BXXGLDJxcoR4friGOXdIZeYwqHTZsuR3O7JOVbLew dURqD70jPuf9v1tBnkJPbUECMlL7BCw6ZQtglSvjPP/waWir9TMsDk+xwPK8NPbv DGi+w++cImBbxcnIMBTk4XtlFcOnCCAYUfkaxZMw2jNhYbjiEZOGUG8m -----END CERTIFICATE----- superagent-8.0.5/test/node/fixtures/ca.key.pem000066400000000000000000000032131434246777100213510ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAtgUDcB7R94A22I0D8Ibac000ZBINtvnyvoPP5U2hRsxI9tcW /LLm0GhzM5XJJNQ0jSv0ixIFKomtFBSjKMq/NH156SqKqyDGU1fPnGjzcJulxceO DIokAqNCbZ7Bys6nqUdilNfLQ4bBBWYsEUWTvgbUeDRHvQGycou/pLpYGLCJ4tpc 4n6ybox1uPi0qlvFI7aWvQFjOxxR0VeRixXfqXjVCDIr9OJIWiXLrJYDlYqG2gRF /yTDZ4qmQxbZzJ6AXMpaRUiHUO0FHu7baEuxylIc0KVcAmYMGdhFlmDrMNRsmnAD KPX9DIMh92XWyE10oNK50I1rIhpvN4XfQx6EUwIDAQABAoIBAAomAWkQ7tgD2Ar+ 4cdZXXisR02FDCq1iOlCZCb+yw0teqv4lhmEyAW6rSGlKk/ZXQy59KqEWLFkd7f0 5pvxofOFQ3TSoGSmMSiYbsTjvR78LqP2Wl8snJFhFOUTwu5R01tG1aJC3dxn+P8a ET7tSC2CJ/qDv7Q0EgT88bR3h03pAc2PJAGWJ2QwutAwV+6Ilyt3hcz29f7JGQac Da0jY/7RIpvZL20gsecb/6Q0a50VEbkuJ+OF5QyIQNT9qtfvsqavtsjHgBWs3iFG yKaDCey4X7D+NsyJBKNCuDqWXzq/4+mQ3atBIvYq2mcIpIbaku7TEWHvpxfzsT/F SzLncMECgYEA4qR1GU38UxZ/8x6Cc4Z3DKUuCLBqvv69IHPcfSkhrtTeApdsv14U KE66/Z3g4FXeV018GYUzGODfjBt4VnDCutz9tmiHFH+T2zDpgC7hvODC8rJ+D21b G3Q5eyA+XRao1XHjc2UD/Ev6iJPjgCT23Lur2bhAqCKkV4g2EAWCgyMCgYEAzZjY 5M7Jw+0g5b6ILnFX66JbESrw87OtiIpiQh5XUQssKsmfONzbXUp6ch/MRTFVHVDZ XmG35Xyg6vy1FYg9HTALl1tnkh9UIhKrH7jx+6euhc0HyWCCqSp/3CpJqVjdoxtS vtZigSaxwTDaOYc8r54cWhHIIrpTrcqY4mxdZRECgYBpGWhv9pkXEqz82d4Wonlc dNDXGLA3p7uea/wIUmWbRH07aGr2hzMDyhaue2MHxOoZRAZTc1BRrh4cQ7TXKO00 aDyDNQ/G8q5nC9SMK7FkvDnK//izQLvqDEiHj1k8I8DhUjHulh52BenFIgdyqjGM BL9ZdDcPgRkCuliPr25pTwKBgG8rf9QxEJ51oT05Sk+6j+zk7FMbIhDUjjfvg/P2 jgZPgUFdpk/L9H28YPtGwGCFrV1dszu6oQJg4m5N2OjcsxcOPKZKEXXMpOSLraZI jegiolbNJ7G3Es/AIET/RLdiSu4APzzblYX6U1GARe+ndaQMXY5CYTKOB+NIUmTU bafRAoGAV8PptnjWf9ehJvt96Rz0FdfpN7leqdweK2JrGZwJQ9BRcKwUO758lmyN nC62Sd0mwHivxRqI6e2u7OSvGj9e7iLnHMl4qYie7VvsWAWmztH2ntEI0iWA3V3N M3T9+sz+nslfhWKgIA80EqOWB1AF0EmbmmqK0igWEbYynAr6v0Q= -----END RSA PRIVATE KEY----- superagent-8.0.5/test/node/fixtures/ca.srl000066400000000000000000000000211434246777100205730ustar00rootroot00000000000000B23299143E26EFC5 superagent-8.0.5/test/node/fixtures/cert.csr000066400000000000000000000015731434246777100211510ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIICWTCCAUECAQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAsjNYMUk1HzBLM4fL/8c6Z86X/b13V1bMXrrcV28w jmvQv4lADlghZGt/zbinyvZrASp8v1btR9gLaNTdrxxnz5FWu1bY947ljgadudh0 STLNs4jWI2wcjgguA8B2rDtvap0bn9JkpjQGcFuqEdJRlr26OwsC5SNCtFxQmTrb sneFMWK3JsL1riCrV9Cw0L3joki/YKYTTwRZJ2TXrrHvOLQCIUacwCU4oJg19D0F KU/rDtdUFFojnTio0RFU4/OpjxKzwqjSJE80nPSRHAqXtSgmphrRk4ZVeTxKEGKC oAt/RBwqvxPFjNlbr1EWY9S7SpFu06V35jXJYD9CWD/WcQIDAQABoAAwDQYJKoZI hvcNAQELBQADggEBACia2hDAe1YqzVn/P2KSX+/9yDrjOhU20hKF1CTZr3Zfjep9 R86ldz1aFc2N2yqDjUYpj0+DODEXlEfNaYcD2nn93qgy/gAmfQUvCejBh6vsGiIW qc41lzEGHa9/ErxQ7yvETeuY8OozjDAoUs5NUbFL6OmwJFqX9VzLbQ8uQxNU3z3l AKVkWBWIubqpSa8tDn/+wf8vW/xtOCZ/Zd5YBQdTCwb5BdS3vpBkwpJbPBvR97Mc 2d+2a5qyNqZdb1CuATS2MJC35zp62FErhcnnVqtaAcaE/C/in1OO3wLJvXa5/LKp 1riBUJLHscGbIhe+KjlLoosXuOcUNvBkNbt8MFQ= -----END CERTIFICATE REQUEST----- superagent-8.0.5/test/node/fixtures/cert.pem000066400000000000000000000017111434246777100211350ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICnTCCAYUCCQCyMpkUPibvxTANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJD QTAeFw0xODEyMDIxNjIzNTBaFw0zMjA4MTAxNjIzNTBaMBQxEjAQBgNVBAMMCWxv Y2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALIzWDFJNR8w SzOHy//HOmfOl/29d1dWzF663FdvMI5r0L+JQA5YIWRrf824p8r2awEqfL9W7UfY C2jU3a8cZ8+RVrtW2PeO5Y4GnbnYdEkyzbOI1iNsHI4ILgPAdqw7b2qdG5/SZKY0 BnBbqhHSUZa9ujsLAuUjQrRcUJk627J3hTFitybC9a4gq1fQsNC946JIv2CmE08E WSdk166x7zi0AiFGnMAlOKCYNfQ9BSlP6w7XVBRaI504qNERVOPzqY8Ss8Ko0iRP NJz0kRwKl7UoJqYa0ZOGVXk8ShBigqALf0QcKr8TxYzZW69RFmPUu0qRbtOld+Y1 yWA/Qlg/1nECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAWYlRC8e5flZED/JDP0VG aNENVwv0bFbbzp1urgQeq1TVBDHGKuMJM9klVMBQiMT9q+nPjEgfynSiLVuY7FWs yD/hFjQMLV2cz7tdBY6l+IV1sAtBdX3ZRmmzttaAs4xmFXCLXdTm4KJ5bPcRnRLA klMKOsvNY90mRteXvhQy04J2TJVpIld05+yjnYVWoODyX9A/Xda+33qjZECLTnj4 c5L3mamPZEo4nwY+329d7dNvEu+ETp4UzwkzwPFHSGLD01YEJIu83TTi1WDBZygz dxPUkLKYzRkpYVp3hbZsvkCQVtruY/e6DADZTKAlhL41V6VdH35Es0uw7JrbPf7z jQ== -----END CERTIFICATE----- superagent-8.0.5/test/node/fixtures/cert.pfx000066400000000000000000000043451434246777100211570ustar00rootroot0000000000000000 *H 00G *H 8040- *H 0 *H  0(R*exZ}.F|7dCx) 2 Ðf@BLA{ɋcHEb奋b-Fk^c nCI`ФԎaE!}s]\KAe-yH((M6 r9I'Ζ%^JŽM;޸ڕǺ09R+wJZdx.u?9 Na+-GC>YCZPYtQS&RJO7zg7*ISlN:mi܏T-d[ p;hQ7h2CKys0=/NO29D`FѼ&Xb *kU\HʧXvpX(PX~"ujoE|C#BWS A}l|?8|{aJ Y30U]kE!3rWk,} :-Ef 2]jK;R8`fhܬkv_ObAz3}Լ::36[EYToռ!n1@Zy R؁Z˅1%t?t͔H1'=Q, q,pЏ8>9Y(oo( ',CsS9jbfR56?!h.P04d+aV(~4~ 0Yu!Ug+Xp^&xvU0A *H 2.0*0& *H  00 *H  0$b|NrZ>7-7 Ym&nmM 1 V[ ƺzsKPj0:J$)>lMb-dL@6X;xao_|_X B͐(-8aZη9 `U Z r! KNJH*C,lf473"7_EX犤g*F|2eZJ.S{#x!F@_BӭiNm`%*]OLDܣ&c>J.tz\ugdGvűe:  %b}tZ撱 [:ІmE i'r3H=J?ƿ~9(eG5vVE*3A0]B?ǦRmGLr+(5'e(ߌgW?K]w~|&*FJb 0݈2!!Z1 zfǵm# u< duF򜷡@ $23{_^_ߕaMcÍb.2t5pQc[nOs~·?IB\cftLJ*=%]Ni b YH:C|6 4bVNA姬-3B;Sw2'd̲%L-$E#E|TJOYy.9yjYAnp ,SmHWj ]~%G/8SJFyIwAs" *0TH]~m>IqZbyب:L^ &bwR Qdq*la}xV;&$!lـB ^'$oFe+I|ݠJMr ?J_N&Zag vcqٳ27/f} "] ^"&{1cT|I>iCO!.L ㈽` Gkm@!Qh08О!1Ur!Ԍ\./AۚrXoV \BN].4Jݷz@2 k-o㲔ESP6WyD3$NMϭF |x=cSʇ3H4ZN.n̽?PUwUZR٭pPZL+u/*֍fՍ<ִd&>Lw>8l !훐897 U<['uWmpU͇XpS[-Q.LgiI{ fڝpLxؚcC(f(aL)4Y锛! 坦%:)4 t)i9pVJV܊Gd\E]%{UQj} q[JZ6 ԱIat{kH _ah{HzUS^2N,jrR)~通 F Cԗ2T$D LZ֬QLϚ۵52KX>y?={f(@ucjdoX)d0A *H 2.0*0& *H  00 *H  0Džu衺ȆE"KK\(맓 ;(r|:!۹*q9fIY \ז'9PvyJ+o;eb'ku*MdJۀZ}'W++rO_3s%Y ,Aש'͊Y!b^^YT)c[US(PۨbQVwwBz}-߈د<Γaʹ 3c] 'u5(n 4 Rmcq*,%*l9n'Ho۞v KyF~CnM[krW$F4drZ+W5H@Woi̫n謿Ǐ{Qhl`C@ώxH ?o#8< 0y=9^:!xZ fS1%0# *H  17$)ej5y010!0 +LjdXxr:-찃:h2superagent-8.0.5/test/node/fixtures/test.aac000066400000000000000000076425561434246777100211530ustar00rootroot00000000000000P(Lavc57.107.100BUAp5檩|Rd/sUs=SY xO$2Dٞg7nbɷ.=)ɁWY۝ř#RaÒ7|DMb1`NP!?G~bNF0U-F!35WZ[*]Vwodm6/B*x昃g>7 k1d#'&pP" zaۥ4a(~2_7DB*˪OgwƫPP)!Ll>Z'MŖűQ?u9׶/μOm{oJ2&J8]>K5ʆ6+y]JU,gD@ dHe8,TDGpr_y]E mn.&Y}"D9>?'2y2l"] 66KPe1?B|]JfGY&tpuQW ]3Dp G>Q:rw}w_2uԷ 9P-rD &s}Tݑ9bqo%əxjjxr/R پMi>zawuF@$(k9 /.E׷/yyQq0  jLL4TO3:drU\ہ܍Krzo1*)x_T c`7]kęZ ]1pP*?!A NhsCiƓ_~ߙUyU֣u׵5AÐ5zHК?*}irt0%iXG|DUbNQax٭l/12 x}*ݏ㪽;t痂]s,lO֠zN?/4ou \ )sRvI!CƮyV8[o}Қ Œd[꒡U]}Y:wn ; yE9W_ JNBRω6IӋFu-#2MQP,_!aNaM B%ҿk5}F~o|w.^ג殀,lk*CR +NQ6 "|^2uJ-ηE;T솮 ں Ajn>L:C/.:..88/8> a ü)*w& "J&=`],(6vP^B!ӿi}\[s8w L){F,)A4XS1Jhj}lȴ6 !Dj8ym+0JPE+(P_Z!!Z0(]-sp %*ʴd:#G_1 pP,_!K@Nr#ǣo~{=FuLKzEw@:gmNXAK@i8D>pOݤ̖!qzc'RqakSƙ9vdl)JV#n}%?G꿏3%WfQ -{ pN+ˢ:gϞ/fkWͺ~咃3@b"6m7nEe{QYyx:[SҼ; 92gCT?$햁nPy rucM{FǞ{tz5hv0TpP-! G PV\!I~y'nVΥ;:ӟ5`s9$r:PX/&H/]B|xp (?Zh0Zաb!)GXz`]dWS `s`"98.!:r`H:$zn];>O}@ ~_g^8yID""w F DL ')NHL3'v.nxsSW?U6tN债.Ȝ󅋨Xd~LJHD9{TA^WZ·T8=iB5F>J3!kН3څ_)@p)68P.!OV(|׿&ۼ]5om$ ߊլg(,yU Df ,UH46XX4HY aԝT<u@"$ 8"W{f N|^5Rk-|+3Da/#hЯ/'Y$u rʨdByTy4^M3g3U*{g>mʷ4̞Ғ_yڏ-g$p0;fD~BR>O 6NB8࢟> 袵 hSb@$.(taZ&GLm9Ż|AjJlns-P._! :N!n!Ei~coo9|n^ӻU%PC(Y%.Sݔ\s4e&0Al3D|2W?s{D>([.>ug~~t$lIre pW &$Q܉ QF|W#0d}Vw@%iAm( vaxL>Cӿ?_&jsYzsֹJq\5qQPsBu5Iӏ$ e7'MWr9$@TAoKF#|ڗ5.$[C:ie|/^9{3tYw,'O/3ƬOP.!N=NY'FE{gs^}kGrq1ׯ4STU |FO /!<6s[;qӾ8>`wEk #^=AXW]\cz8~glR+EzWfZ2n vF$0,宖"-;ϊ};xۍW;z}x avE{VT%!C:+^YXC^ s4r_i!8@2՜#+Ljhnն8wrh|~|z5Wvr7tq :xbP.! MՠrM B#?N=3g|q:kvzּ}S1et5;AAaQl‚Ws.,W^nА<%y#y2KF=|Hzj{zV=q^z.Asnn^ge!9C[hL߳t ҮWgQ0A{꺪wzkzZyrÃB,j@,M:wƿOƹI_өS|۟uLOZLWK: ,/3M=Pu.X_7#{z.!O7' ^7lg{7iy|N)uv|Yvewdg57g>P-_!ŻMǣmq[ǚǚg+^2=Þ m\zMLMD~\RG=s> 6;^+ w%w6Z2HGrA.?U: 3G^N<v|P.!  M[iIǬzϨ'MZjCE}ϟ-߮&=q8ۆIRׁ9ɞ.7-2qho!1Šr{Wg7==W;}6%y\*Xxk1<'/|+dTP/! K$p7Ţi|x߷|m^+_4@=_Iǁ<OSOz/>,E1蚚W߂{4U$ 5&âS?o.={s]~5տo@2VcK$(ɣr:7!RE{L ]K+i v 3BhGP¢NSo*}`Fwǡ*CQS504/y`C MbgBl/3}UP-!߀LYLs:'f_uWV$Fks86g7n>@?8Q}{3=d~[sxqE:u ?Pg`3b7Bhi:vWy;*Me=>5wG+9e9۪ %njPknM./QG3`@b|z+ҬU\K+~>s[b;Fl6ry8^3y Mq#(=A&j&~Xn tAL|tl5{H?XY,/P.! 'Qݘp5.C螽~9qWre[%;qg R6>d5;"?pU";RөQHU$%iKXPDTΰ >R;}d8Gn&@/vsy4B7D_lOSv2\?{g :D\ґxjB*2:UTQ|<Ę{iwr- ͨ9g)IV%}Ҍoh9~E/ b9 IP,!(NTΓ&C~kNJ=gvb{súu{wj"V=gDvW7c5EhxsA6" WѷVIo+?|Nm_rVQV> {=m(st]e|=}!& {P=] i!}6@i@NR>â~kw~9⧋nռ};\ a=Z#p<]z~,mͭ˳l _z<\O`5.ßzN[|r}G<+pWILP/! c|N)u>Co|״?^FԨꫩ샎1ۥf`%IyfvvLQDyοڀe pff՝nXӠ(o{]p`E|E2eq-) OxDpv! 8NМ-gۯ/Gy]O4+@V_kUhV iV]қ x'V8S`^g'0TAq@ @# P@xExOro895 -OCg#&< I+&]B'Oo|ch`_Q:}-Y4ZswF12϶ީe#9@"yx:r+ټ'VhxE֒},L"a[ye ၄kם݋~[8˹րj{W !leW ;Ċws,Whk+ zbvH OK ;X@:)Lr3h|:?<^8׮3<ӎmy9!9ஆ7^3Lvgz8[tO;;~땭&holNz{c.dq1|szܡcd [CHK^N.|_V;ځ9pP-! Q,~MT&=B#?Ow]V}|ǭknE:_y? ykFpj_MZN0}F9Qv5$'=:3ho\nFn6y ,B93h9ڠX5eM쮆W]~BYAZ\ Zfy@ׇ$'$&r&|Ǣ}~=}|zֹZz.+5j>w2KqW\ƇԤ}3v=uc1>4n3_N_qcp[Xq~4Fi\A\^x[nNw 1þf:>ixƎ^' '^q5V!}dp` !^5|7|~?>}gZN.҄ni@;@ t QY} `_R9&\#㷥]:6Tal>^w;fDg`^gz#s 孥?>ߩMP/?!9@LԤP)2Ih?fSo޼~8Ou_o75|2;_7ȗxg'CpBWQ32 L]:r9 8~9UzI#f/z>VT  »Δ(԰C+Yd#B}ٖ) h `@ T!D>-7|T[5Ʒkqy=ìmPx6C哵k-ro[%lOn/yiesNj.5wu}~J8^|z@ d]5! s\~f^^ut+$P.! !LݠR B$?O;>7uʵ~>)5{)e)j]Jn,'J :,b~Pa©e *+Y'5M̧^(VS"N^ ԠC1cFw3 j~Ñ5U{(jq9ݙMn\6+^M jH2K -L@)A7+JQMC4O|{|r_}JyGR:$P6z'PC5۝ :ja|/{a߶4"9!Ȑ9Ѭ<߿|ʰ {lbk!¹P0! qjK IAB"toωqn|8׏3MJv,m-;6'TAbl, ؼ`V+N5jw>nalֽu *x箮3HioZ ygW+დiIyljʹ80Km5"IЈt>!ã~U~n|>Wk&M26M=ӸGtϚ&kq`WjxDܯȦpH;v'5:(*[*ߖB m2("rn6*!Zc/M(y"pP/! Q}MVԚAֻ:牾k>OJ[*F-\uEd_zZœf`ˊIO83 :[yvT|H/6nJefV"mۻz܎gբ'fi_F(v"(a 6Qoc=uj0::h73^LrxtN?Ywߞ}5Z|Y@OG] ڱCѶFЁl֧'D9{tE!a]Kg鹳Z93.hQ뉖O`DC$qM Ƞl^3z}mMLFP1!}Ni09FCߧ޻wzwYNdǾ 'XHS{.9<9$zzliQ1k_Do2bq2Co2bLG"e2֧; 6\_9 UeGōyVqC9 gT vb8A 40`CCѿOwg}eok\vM!/!=9<ʊ/)k*er{3}h0pqOn(.yS( ?G6g_V.L>4Yn bP/?!|L[ašh}ssS*Hϵ~ YtƈcatQ傰RpDqc]*Fyg#KZGp=u5[wq4gUy=$ 輔yz,],`1 /W+l N ×%gfb):{f|~ߌǷ}wǏ;w9Ng]D膈mJl90/^?(V7~?B!TEG*Psm/&^,[s+6id_GZڊ~Y~Ȑ|ϙk'A嵸CbOP/?! K\`sN5⾯?Y~޽o}uN t1uV0D47F<^vBaRFX fSsv?%)NߕO{C$d'?vwl ?`Ϡ Ү%_MXig+ bB땁zR!@O_mPl ikɡh|B+fqn]744X)wa73Iy#mg_rHG_\z&.z8aƤ(pqܽ\$`*BY4O+ZzI)'P/! a nK՝F=F}9߿ǿx\/Y'>. } xO̵:z@w袶 9K3DD&U-BF%ROA+0ӳ|UͲjxkޟlQ(۰::V8R.}Vd^^r_ `7_4K< E(8N[Cѽ:85\[5*~PFϱDZ3u9`1iab_2l..Щ{OzoxTzQߕ{w: x8 S=ˊ5sP/!(jKUef=F8ׯߏf|_1Nܧ^Gk{]E||_b9~ `4@ Z7>s9Za"Z>ͽ΃ȜɁ^[۟S/}G?M\src:NjwwyS.YpiYI}VR\c)cj_gמ\^]ԙ';uM|A`=SYh,9:r9I'L5cwTYߚ}). "ϨO8ހ | H%/ @V+{xhJ "%V yxP.!A{ހL]B-P}|뚯ozu[jxS_їAkVwr/6ѧ+MJÎMŋ.G~hXyG7(~>y9&q(0jhnA+skS3(+|B絽;lĕ]8Yj8̲ߌ\4d 8D@0D:>Uxk8ӹ|Aߑpfvq.c噡K|\yhz P4l#閖a TaMPpy:F|'_^)ol,;%+s$B89\|X.,L,&ocB]뗃3|c#^F.:0WurZl벐j芖ԀUrkZ B^DyL>N5q7\-ǧ~8tOU׏F܍Qs&^yE$9|L"]}pQ>lr5MQ|TW \YH*a_8GBf$K{G ]8s+ΰFfܽ˥[]O"A<_>pP/!1xK$=F!O۹UwĩmwmR#n5IP[53Eu/+WHOt.\|6p2IH8۞VHb:(HH6:Τ(ce^T;0ڜ|r7uZ]q[_#P@a %7'CЈt+{ϋqr/w.4g b,aCVc9Q-'Da1<`f\OVsbPo B+׎24>LTDGPր ^8ig-2 ''_ ~8ldP.?!sKinT3o:UVZ5u.>j\xeѪzW ;*nxW^5wWN~o/K[SSil2Ca#+BGt53F D?mE-($>, &]IϷ`f/V(9cq[owȥ:3RH\™_Jqit2]^f͏;UcUTH*&p{vr﹤S$Z>8s^< 7W$26+BUŨu[)Af8N急sĀp+uҧ' / :CP]:莂lN}}T2AŃ(a%= ^7yDqd¼>P/! AJ]h]swisN}%Ug\Wq0,7Ufr鐪(/؎\ӊdTum:Ϫ*T_0g)azUo:Á.' /'oF B`aR`*@FqqIvҝ%S@#Ārb9P9ˆd5a--L!r7A;TnliLf%`@hed~ 1V_Wf@5~YZ]5zSr(}J΃PP.?! =H(]{e~'DŽ ficinz)yպaI׍gbjjET(ݮۛwng3׍hƸgT_ma &W4ӘWvYq.e?2c^-,-?Vh;s|~ ĝ:Cp>~'gkIvo 6AcMm`Kdhup~o]SϿ;랪ZQ@lZk .Rl]uny;@tѡ L2 k) q F0ts=jggAu/<T'3_֌SɎ2;Y 칪A_QȾǼP { >s`[P1?!%n*IA}{q~8k85Q:eq\RO3F|J~kV@ռڔ\K GcJ .o=VeaÕlGOA? FOĭ<#)"+: Ox Qӛ,de!I;IИt3|8zۢ^u@B^br)$"DKPĿ3R*E>]F"(BiM|Rk X$ cϔFF}XfYwK8^{CEv}ϓ|mUIm¯WHP.!HF&q?~zwu4.NWԶly:R4&X&' l2>G̛/8ÿazWvyx( cEcxbnULD͌M.JBq=|G|^3D8VpN㟝Z혨{ݠNO C?ox<}|_*+5mU'3UZ1٦:mX3s^Q/ '5q\1V̼U(8پK/{ىTvO%$OR[Q.]n:"D)u,c{O29\&h˜5XP.!+MD]hn]{8νqS/)\"jQWkmmlC- kK {g_d>gQS)Qa{#QKr:MF땶ߜ1EdzM;z"˜GpII'3t1fr V<]}^rpA۲ݲrgƋޤ"rxT:?U|?/S ӫv=;+F˶;,6Fhci%|Tjjɤ,B?Cl#Mzn}*ƌW QG ,Sy%- Zi1${,3\+pБvF"?!zb]*e?l)M~ي[HJҠϏ7]U^q8/7 'ӗe{XB+oQ-09:u\1=5]\{gmT:s㫿nC>ګ R [Cp$b.g84P::ȩE`8P0?!{ MPi BaшΕsW_oè뙪wM+Zma<;Qnf]Z+ܰ^ p&5&.yّv[)fa/'/۠A@1Apr&$:չw4%g2$ HR $&[d]6@sAo]*̝瑜X8`K p=+X$Js8Uo Y*q@e=3eԻxWd7 [d@": *$T@*kHH3QוC !B鋚-H_Ћ s *Y=2:3 ko!pKscVP1?! Nd=B!Јt"-{k?=}-o~.S9+2$E 3;r^=Ct"9ImGZ׏k_ocx6@֎?px݅1m͓dqG\0e^ Or-#>,}A`)̺Гn0=FS&,ju8U)LF#_D_Q2P0! I:Na ˥hD:y>?o穓qQ㿆g_gsqǑʏh9]^1bd=UΌ֞}yp7=pwϱ9)'l'f@nЙᔥBď?$`wQKrY D(oV8zBtj{.M~Wd(iy~^PյGB-B!}y߭D.ywiſtB<_¨MRi00Cid,#m|] vAg#oA&yhG/%zM\{Twz+NI:1zG4tu9`B(žv>8fr8=*, G@!}rKu<429K0 ˋ{>eWE^ݕ\?/& U5KtOk}f&*Q>j; 2K? STՎSE :6X+DS qIqF*{8^0s\b G=0jQ@eC(8FEx/ϲpg~6 ׽ءb҇ޯ gpI@' ?LJd9@0d=Oɼ(Cѿ7g_~޼ޫ˓xfuo+*Hvu3rJD]9YD!WZ}ϓQU8Q?ҁ;$B}Dgw|qI^͸2pRJQ`P/! R]B!з8ǯz犭o/rU`Y,z*R|_>oc-_݂vj ր>XQ `Y!+Z 4{^6q~^Tn5ca|;vun?FfozSmt02WyikhWSn\ڣvPhx)P ? !rv= 8}"F-^?YzwJo=1)B  V(#dyEv?p pNUMQ31A._h78.R__^N8P \@PH3T/A[XW]/P.?! f"M4)D"?8_k~;EEplK4~V y]5ϰ8!?zKsrb7Ztq$/. ~ a)K_C~Z#3 P_ [r{2C~s=L xG+w. 2rǯiE>5^rg^-S7L>lKya+3P<&q~9Dt3~p0}#(ХM)i%/ΧA/k I_t=;dѶҡϝ1_.7dW? f@4 P= n(s It>FT9qS Vu?nt6"O `ƧF^RItkZM_G0Wp~}Jg傊@{}ʷ@bJ ≊^!3`gu zX? {~yǿw#P/! P8rNT=B!Јtos7Ǿ}97fzs_,GWx= XnQ9Qɸx'Ejsm毃+k|ׁ߯."2 Ϧd7.?_vc>>}Z/[_@:rp~Dž  43'3pY,Qal%Et"ugU^Uӟ<{/֯/JiØZsH.ܧPDq"%|QP=;U$CC44Q Z: E`ARq|>?{ qM7zq@#FϩI l(*T'P/! yӁKhu6I~ӯ}zwnuϷ<_uuo: ,dҗ:m(6K){w\Yi~cIb|JYhJ0%$yf :pR }7<9/9nPF>|l^P0! L]R B"<{xR3_ǿoZZ,u it=d+,þdh u-1+`[! %XOܗrh^Ëq*[ %P56l[b:ty>N{3**mY;ޛR@Wi?z??iZѶO’*1WM_K6 (P]X]Ъec\f@@b,\`"-h:9bp(G-|uZc["AwǛx}|2\|* f(pP-!aJ]F=Nu;?_ן7VwBq19w+8.Yl\&:U@Ɣtr!DQ$ڸ٨K[d&xJLKxm!!}ÓܧW3"f=u[TL nF}n1 Hc_?@JLB{L4xR&|:w{57TU#@'epdz1k뾩a8̈́ޅ V42 ,P 4He`C: &1!7eƻ}L#vxZot3z&P,! HՠR5.˦~x;]{w[ꙧ_jٷlnwUɤ62:]*!:)RR:t.H5CD>2ոrF gĵ w$ ]8z߿y_(\>oW 63F# aA02@ Aa>:_t;g_~x]{w[ꪺȘ HA}pݮw:/=9Sz'"AXr=l) WD8zG\!>zro:?VWFupĘ-] 0z+Gw,P0!D~I\L!Јom~zztpL^]@Rj*QbÚ @qKǭ8w!PX 0C Ya;b,vяЍ'^{ "_|qP/!~JݠR5.C=q8rO<sW~8 9P&rK=:A;Y.d.5(iLy$fbis~Z`RųKy vL2AFO\q3m@G+Հ,p6r;_k!;u+gt[8QRr'QѾ{|w+\ߞuuk1N/b3ɔ6 nR&=q1IV0%tZ;e%Y0EꚽNNr&}{E(ŞrMi@3W7 0_*0of1HB`|nspP0!OkLݤ]0Dߗx~yk]|>{ECZ^ބZ4wfSfc1{.W[-bK(QWtK1M`pEʂ#aS}5TP~jĢg5wan~|6@/u|S|r9+贽 eUn3x d/g`WM0Q h 'r.ChvֵחnwjKj62}Sin8} (ؕ{ UnM008#:Xj1cEA"o15iV+\<]NPKsj2 [7*pP1! fM%}B$?Ok^?We3GKKR6~y|#a_jS_ƘWRDri.BX- ;7&kК| /Wtis|/8r Z[~ธZQaۮ<4=֩%syi '˦H Vs`uP" <&0_GZ'γ?mzMq~s:9ǯǭ~5~(S4(afУT2/.o4VecnG:P5XL,2piN!=sU8~_ $XvV{U 1P1!fJmF$6F_EhyM4\kO(p訬Ѷe+ 2 kp;>+qɼEto;*wo?^ZsMmͼj3@aVzC1Tcr}|DMBw0Yx' *WPUDZ&Y:iH#K<%āú@*@ `99p7vYW@OH;pϫx~K?%K-ɣ{:q榷[{:kߏઔWBgؼhJd,OqĂ(e^8x/+ zn疾?x3_>s2q6c]t&o=P/!DP]`-(B#tFzr~=^}jV:}Sgz(R^I$g7;t2E`nxv,Ú/) `a1jM AEɈ0_^X?y -Xf"F"h r5>kiZL=aQ{?vo2>ĀH>CЈ:S|W޾{Utyqwh[oNx[HVFS^K?Zf*5k"s-\+Pq#<xq"DR",գ&pT8H5:Y 0P8P/_! eQjlSB#ЈtjUd׏13tzW&Η@>V0`UGu:``JYcYDܵώ.ޜ:Kw¶||ش[trQ2Iz x H8ׄL.-EHG#,6%U, *ވBf"6uOCL"?Pܣ>]eUP \<a!QE{JǾ"[ڔ1` s\T}M}90"`Da>+rE` erS`3fr*?} D`T-8,xP/!ϿTT!!B"ЈUq[:ڎ~?ǟn dIќԒ-_l؋-Qx6h*^Bh(efub9UQ^/‘^\&C5cpeBے_S̉N;(,(dvK2?S"]d=_#IobbiefJP~CЈt^#S[U|5 /8r?̮ ("vRP#^F2[[asPŎW0Q֕i-Ym7+I=-C̵Ə놥0,r`R j#=#O? ￱/¥hR"0P.?! _TXV2B"t"#+=kګ*ޤq)Wl|{~?e]gتcrC!]9ydFf^rsc7"uhVt=&zsWU\H- ʭ #aGn --LkM#2,կM B!xtS.jޤq*O'^mL2uq#;O/4ɗRd; ;Z/)\^W=- nD+G5ODg/{7&tQ+2sl'.8ppP.!{TjmB!Јt]{Smw;kk :yϊC]_HV|$j&WvGe*Ϟ(wDNsl+\ۓ}97&M$(S_;$rDGX gV.{\{R+X#]|E~}H3J}?KL0>=Ţ|:F9NjMoUs3^_~_5Kz" a7=Sc ;x2Sá uXaRՒS$^&ڷq9HxyӒnQZ>(cɋwC\~b|n!N( C|@FG@0X0,/ɡt~kWᮝ3ߘg?}~=@ gݔ[+L+Ϗ͂4d\R_Wճj@sf@ L Pdyf3\-NK'ph2I# B4[5P/!Q`mPu_oo랦5}L1ugŪXCsw>b3/ KRpWh$iϾmV<=|4Y\"ӃG"6ٮ'qFGi[`ޕJ֍{#;* sVsȈ ӴkغBoԢUf/P/! -Sj] GxeϷn[q Ӟդ^|^P([xWt!܄tuO(ه!lq\ 1Aae{ gWSUe:^mn 17zL*6\a9Xz(<<]b K.a>D!7>}{Oi9"u^㻏0y-ayX+N4  I:yOf Zjނ8OnV_:S(,|ڄJ[)Cvg?; 2c.S76 b)P0!SS&šPD:wee|z̺u=}ҪNju 5S2O@gUOr >˃!A,7ԓ[nOcX?M#vCsՒnyyz3@*}Xj&=?$j0gV헏^FY疮B";d5ty KW* <ؙA!$B^=CЈm_Z֗o/wn 󚝲ggK23~ K6SF)UY?%`AMqU \|W06 >gr @灿C mqĊOڲZ %~u9^i_dzSuB^7 f⚼ř\RҶ2*r3W2 H]ؿAb|Z!Rӟ=^yVN+g?oޥHNÉ^*_~k*Cy"Y/,>6NnD@n/fBo&),)Wӹ a rw./ hpy$8r AP,! :ST C.C|6ܭߞzkokͩT@O>>=kFI-H^.b(0 c&X0?>Mߖ(+#`ҟjP;Yѣ˓N_$p#r/#\m^_7 q^'f3E "M(zߏ^oYUy5|r>~D$Kac8-д~ 9KN4/^9j"5̼ #umE]MƁJA@;V=8!gBs|cxh.t|"k5P0_! ƀSتpU)D!/_o/;Ƶ{϶fu2> ~->Ȧ^ޱsJo6ۂ|Fu'=B  s>b- qFUKI/_]]^a4$M X"sdxvP년g6Wѿ9o~_I ^~*_f& `9o5P*CD>3/浙5~3^k(8~N2h]:`&`G|-pIދ0zlᝧ`x,p0.=  RNBh+ˆ|!|(N_Ҫӛ)邳NRU DܯP.! 9HUՠ4cЈt|~~*}|npus^uu*t й=wuڶUĈ{@rӶ IT*8nfWE. KN`w죧`i3GQXD$<ޔZ@V6Y2 M{vgt/W^ϥҭ!v$ :!E4B34]nh;M@!|}<4fV ®rGC3<3Bq܆qLK[/A) Cd2e0i A*{`fr:NUa2 Fտ=EOP0_! RۨfD#jZ~ک׈l+|}] 7sR|ӐVe+7BP(+:Z>q6FNoyު9OzE)?fadj1͵=tWpַ>:F\TĜr;^|;K @R4oh(UtԊJڃ-V :mt~-'Fܜ'3۞}SoeҐ# J>K˜uܘiޖ7,?%d4$h9~mMqUEWnY \) O7qsՈ`Lۧ^jF˟`cA P.! Q[i]J!ѿO֧\u[ۊnZUq~8_7MP$"j"L~=٫Cwj311jb#)E2B$܀hX "\/v `(uLlSջhZ/_Rj^^h5= L@@#hQ[hg'Cto\=u;W-+&:-W-g%{GRpEx1lh飖w m'_٪gfч00r%1# SypQcX9̾G WޯíH}(#iP/!Si6.|W^8qx:5O$fQr2 3&{<<; CCv2iۚuWgDUV;79>Ѭ%ّғ6ͼIzrX4 s޿v # ro#-щUeͧ˰( /yB*-P?eAw ;Y*JT\"W#jFHkuHD5ˮ f9@@#g=TV<xOyd;'!1]2@'h@e|ϡm f'w&n>wg/s+wЪ1Q0ރwP.! Q^ n-Vs\{^Hjz}󩪏 {\q RkV-$l-Hi'>Ph-vE&R!q;E-y;"Y.GUEirX]L/VGaf*lW$hqKvD2;]D,q23/P}b_ƏO[L#Eտ=Nm3Gy]ޒ]'b# 4yLړ[Ym?>Fow#g"vJ5Zot&!SoPG`>$Q! ? )N $vq@ $Ls $sެT_8gXP-?!QXj9B!Љtm־~}qqҿg}*bEw+W:tRc O2$+*~bDZ}a@HDN9DG4 , e[5MZ/>뤢rW>]pB:۽Qvk۬hawC %$2V7!K-]ؘ!2NP1?! 5OޠJ]F#ѽSqjyVcP&へ fqel˾#U}=^r)AY+t1Z{0d*|)?x|>GUSl?\0x \ ALd,Y|ESwgg8o\vCeG[[Ij`~zyN`M*!P2_! ~P۩%CDZ7:7]U.:1ݤoZo}+y˘ܐ͂IG^$RG=oD$H+Ƥ&#W)jQٓ+\<(~Ӻ_ _Yn޺[9={cdEXP2 T лcF 3ӒHG{'5Q8Xs y#N5wBQ U:Бr}N (9cϘx Fױ;'ºZE bzKqPXZk޺όή<Ey_pz%5':3rȂo^ndDP"”N61X3긾%jM(d&JzhpfU_`%AP,! TgOVJ1&GOw:qy-_L\;ƚjH|̨(Nʉr%?Vu`E&"l;\,2Pj 7~-IDžoA3QX`N=LTWsG3{铠 z;\DpE&^dHgʀ׼TOU 4Co>x\ޫL:<bA=Cߔ(qqC|^䡂KB?QjWvH9! 2ǡ|:?g7w:yi@wնz.u:'=ܤr nczd988]-[  G202"!8cW#RS תD6v}P.!:RRl4 F#ш\~}w>+\Rk[W[?789oP1Qȗ,^=Ĝ0er>.XMh#GkSG[5|@6ˡMH.9$PΑ ehmC*LSrVDmH\lp-W{hzIvb (=Wbtb;Z}}5u=ǜN11`-SWSk`B ךWLq6PNyo6 ٳks@H #jheׯb M@A$Jpez28P0! \GQZj0%Ci\_Y_W=v廮.Ug| G d!|PuWEW]I-[ok7KPv}'O)}/3 duECd3wܶ#'fSɉxHhaoh9$4SKVr28'JJoY1gQ?<] wxNA!j;u)P^-3::[J/~VٟUE`MȠֿ d%1 x–wx`t8ht;W`,#8;MS^KD耐M3?![Q Π!2ȏ5`+ڀ@3J)Z$3;Ho8A0E8P/?! UQ)L= Z|}p{njk4\y3SSP # _omwC"ףrv7UבD+O+*qhy ?R] ړq T@9UA99`Q),_{e+zoNu^P iP?F~!ũ!d_4)i8Ҳ-7!bJ7u+p>L)"&',Z7naf}Ym? `K"j< [$)`;D\urޥMJ)D&P3! M\)  DЈtyǷqS.D*߲{sO7Fd0z) oq,t_Fn"(Ms88Y! ĹyRCA:2x!|z;d9zk E03yx,%\vro6% uqi+׻; (w##Th;6a..Fx3C/вZx&/BtBDR.2VH.ǝu+C eQJ(OO :h/ƽɤcSbeM.fΞ8CxO:\!SWbf(7>Nj>3xQ,cنB!:~ LCPP,! ߽߄Pe- B!?׷qUʻ}sYxWx=Uo 1JF1񠍀ҷN~@ZAkӛe"koNSsdǦ/@-/_\ Lwo7Zc3gfso;z?| -TEY|"\M忾\*@p` w`p2`(jI)âi<:^^ۙ|oi~~krҿY$y[Џ}~_ wZ4k7#Ǡ̍NԠZ|hWMIb(~Z*'MΈAkQ?)d(;IY+fsHMin3gTU2QYxTɿ[= N5Ӣ|ple):S♀&5[G@8y#P TV`_X"s  Rd#Mһ篶?>ϩy|MgL;x\Ʀ47:>\Bp*'cJ+%.Z^Ͳպ B~9G,HSt%׳jJMjLƒSGt̸#|q~''CgfUƠ]nk 02"P/!U߀M\i,%ç^9;KqϚB6f*~uJ棝OIeZȯ3tY>U/ >wUԪmX(fEnYlgwcNed0WX(fo8 2$e๡[8m+r!G9Ub𐾮s4lnv*<RH(/P-_!M[)mV???U<gKg;ؠIݮwGtS17u:=6SRG4`m`6GLDQ߾xAi: Kd6/˥@H3sKPR6Rn˾?rV=zNL8G4\fDVT>c׽gqKg~թ5L`ȞǑ/9NxypbI0q2$$oƷ#'-P^?$yײea|O5>0@OZ-zq"j/nl)P/!L$pCz[5W*UZ;hO2Z|+R,T4FVfRXhș~bݐ GYdHs X)ƣUN'0:.i, +"8tsND Еj&&9{_ԹQ fih+ǧ^ӟq޻JivW3 "GVݞW qy g]ys}Q%N#q)y$ (;>C 4W"=4)IQ`~9d/&QeN%jbW|_&+.`̭-$(NH{9;RXP/! ]JޘJ=H!ҿϏ?~]]q<|ܳj|9,ezEҶ),zh?S|N3lc noG˂sVpkY양Gk,O\.@yVrVB6#FC91Mpپ=7)K]1`?,Zsz')$b~2Aʽr:aب_!?i_~|\ηx)`W96TY^h^[&jfK˄Ūe2_\D s!,%SD^c/|U:OOMNd`T/3՟?AwH΀pE;"18P1_! EgMޔzC<|{ξ+޹U^s:{oJ;U1i~ۓ~Sȸ/ٮ<=T0賸u^cyLb_x>j> /הލ  7GTtmHRV}cfYE4Q1N k߫hqǯ]OrV;0<$<*A vUD:mukΔ޺OU*Ι B>ȿKE{^\Ϟ߬awk S+ZsgĨ YDXJ;]%We?xWU6NjDNw]Ϯoo;{/TpP/! Hh&E0Zo}wyqT$*iux 4l>vu4TVfkzVrȳQv$iMxyBϚH~t 7g5iS,X bfY528T]s+JΌrȔB%j{n!"a.HlϤ5SYŞoj* -L$=ݘ|eYFY#&jQ/ZQ&z#%M` %w?Tiv$zVtKV%džH:~z7.L&/ eP/! ANhr] X~ٟ]o2U%cKkvuv;1KiRΔꕝ | X[):1`-H99ZE洹6 ݣz+uxf!$CK3%f(jzO7nټ'mjeS/deߞTA^G򪰮a/Pܞ!պ_OU]ZS|I,3K˯:妅:؎"wM>ʅ]PNSe{rѪS0Ú٩@gCMl7tQMm1v+@j.A~:óнi2DЌnN|P.!@΀I] Z浝}~~ߧ2jqST]<5;miuV;z$' n(y|I)F/<$c%~=XLm]il CΕA4}<8ZcPc7 G}DOWVN:8T $Y+ ¡tb;uǿ̚jZҲ,£ NKȭżDiJ\et\R-M /<bE|0gjȺ[D㌦,x>l~gè!'~_g3T֒xn:WE<1Lw;31H$P/?!L]l= Zߝ]s3oZ9rqy $zkgE`d*/ؤ&HhC Xi {+a}e>,6rAR>pIj ![`*BAn-SѦ+hyg[ 7|f票m9(ymF =@I`>L N/ë\5>:VuK9Zl-1Tj(vR^rNͰx'Seg74JjR&EhZɉV;U4p-au,zsObu}I!zcfGL"S2梳NU\g 1ScMC$d5eʋ O`5A?ZP.! H L$Ŭny^ֵ϶\q:S5%* _ssaZ.,x~:Y>d`cmˌxW7;_.l[7su塊@1d"s bn4IJ'U>EP hM |؏oAi'\SN/ë}ύ__??8>iu~$ sXأN蛽+s6V!=:#;HUQ~s^/U^pΨ.3tA0mqMzUT x-kbA(}>vd[fTRjk/P0!+ n׀C]l={'>Y㿄y^qsXl]l^rqӠA{GT-)9ۉ\wndiG $C~F.<\d>>CT]ޘl@O\y\0_8:Nv;YlLfz]ܭ\ܶ;,NF[,17Hь/b nE35_CSK.Ea'aҵ3P0?!Lv;Y;mc4ٌe_xEqzaYRO\X~ȡlcӞZ5bfVNC=Zz<Ր 8j6_8ۉbCP,!{ QV )R׶_^3>xD~wZqo;ߊ =B/֣k0FnꠛKm!;c~n:z+j]lYN4 ?VUu kC/Ro^}x%˧ɬ5W1I-HƏSPUշS* ji YbGj h%a&c#kWz*2oNh0~,`U,",(i  cwۿJ4|P0?!R\(҂ D!B+|~ĦKԫ\iۮz_Rk^/x]㾍V~\XXC;(c5 玼U^[죸onΙgJ|)'ym1cmˉc|^TخcWwdAWx7wi+M/|~8p#oE谳ʭ-0gu`N Uߗ<5Ów?XReSw6,)gg04EqBRne^'; wXpGdhI|⪋{-Pk ?)4#-v]%}X=@myځ'\ezߣlݍ<kN/0S" 2 @q EcX&IЈ>#gǏUU]qP7!X &wB"'Vʾ  ju0'T~"sdALr_W=";%pxέ:qbucpxaƊ!&S%0.U.hY/B`3"BP-! RU`="D!>ߺ_ͦvR{T'k ¤jX#C| [)QogS&T+'Pt k``EJK 9Y"FJOf͝mV8SB;nr.2^UlU5O33 mMCA@V c!eBЈtJqkwWq77XBቩ>U+a~0AÒH&Ck15FF&T[G4-N1'ݼ#bD8rf$-cB c:$AL\L pO%Y2w6P0! TکV8$J"Јt"=̧}/5e2] ={iC8,$s|lu^賚j\|̧Y]-Ƙe)`Yi"[, ]Ӌ*13nyJtZ)ͽua_GX1̝c#a`ѓod]#_h]d@6 bX:!xG|eo[ ^stq7"A/ wz.'~t{nRQ0MÕumPM/tn|9(\I-bD_m:eKyB*˱qLr i qJ H"͸ZmԲ~ F(ci3XP-_! Sli ɡ1Ě7N^^ܜg\;^o>?Z zJ ͯVVqU zKq,GZ3v8[`plB(XRm\6o×q,cһ̩< Y}SH~Y'or4q.[5~ 0ƤC,Ccl1Oyg7\1xwj[Cⸯ񜟣Y%6eXᚇf)TP,! T`(*D'+g}\Kq<޺? ì(nUZRsWq$~ tVBc6e7"\++霱8 spJMsaJ3'i} k}'Q\v#4f )ɞz5I"-'.#(u]OX< y@( e>3uϟqzɗ7gJ\oP.)HU%{g$D#D,aT ۃ]!*'.ܦ-83/]bs=TUP-! SX8ɩK_y>ZS"W|ʼ 32}bk-~Vܶ yt&}fG8#;h2Ǥ@qϖxvtvd&Q/.N {dˆv=Ptl/xZoS͘<70usBƹpt'8E`*=Wx]U3E3rPRZB!Ӫ{z޾S"Wu*?HW{*Y ,neQ摳 T O+b }W9ugmrc@3_? J\>,3[w&@1.r@N5r )A2V*P0!#Q\hE&ţi?wyTuT_YƷ{0GP悽yܓeJ3NgUnN"|g7{g'I 5)X9HBC*I|#$Xg\(&N$Xruns 1@Jrh.i* ߇)]"& P\ +F0>Ť|߾:u{uT_YƷ&:߶PbW MtQDY%$"62ӱMxY,o^&PD.rRپ8\ŻWl^cRSЀzg!yS~(s~PP2! R^J B!87i⫮<_ֺ1{q֢Trelq!zN<ړn\m%M(' NZ;Jrtz-Ȳɹ'7gdTf8&<:zE:)fP8+0vH@u!> N=i@X=( Il," Ɇh:/9֟*˕{LvHZXI)XzA쌯@EfCN 0yAYESSrqr`as#DϹn$iPO&6:*xv (6‚$8-F#D0"I@JjpπP-! OdMH!Ҿ߻zwWrωo.zNDt\3{kR/ U1Aۭ.1D;WPLe FMFCZXtmᗖpjI]yן'$C~1Xg{}lKxx<~s|kC [h, 'p'?Cxto;Vy8㿍t8渨 ; Jsj7YDTL(St4Գ4 {̆K#,Δ=)`Ix+օ ;è y.k ZOm:0eFz`skjcP1! Sޜ&Iu_>7z}q|]gM* migki)Qkq"a9iQeB_6L,߅|6옪ĵWZ,f%`J$0`Y&1, R\07B)(r\Yez\טgLqyJx!ClG4 f2Eh P) \% dݮ9|?&?|y}q|g㜩ǞAIZ©5Eѽv^S54Q/z [v§,A2 (wlʊ qy3*Sre+ݙ/DzZAP,! zL\hmN|W:2\ۭyo)8q(=U\7~vT5 rUؒs"{Y/s.n:+JEL~ 3ӽ/GČH=۴ H0dB׿[i:fxބ7dThHv)lS@m%C(2 Ŧ#)/=@;=@\P/! XMޘJ-B!77֦Wⵚv<`/D YcnN\9NtAbe\;yvA̜z4HMXsn͍=@cw<#s}) *J16jVwLh*A?}z@DGl >!kvSZ s W쐋bѠj_ G__qyk5pA\>)*^u%JXUpK9Uq/VXcc5c8b!{~1\Snяx8wC-#seqhͥޭ'Zfcq F&hnW|_0WyP1_! I^H-F!?Mg?՝g[֨KU ZGDk"l\i5}Fb%G ]^[I=H C'V#ե"d8 )u--=#2 ("Pv#G1Upi8Ir+r8)\kcUDw~e1tC|w+o{֩_YЪYzDyhw{ґ"ө|{f]9.Cu:bh菋V|lq,2-H C .Z73Sq0@dxҐ5šy9 O4H@ -8֑ m)n!m]u4es(pP/!(L]e=T':u^jxÞO:Uh\h%3GTR-O(-`(g ]BxȘSeiUYqWV0j8P0! ̓I^*- J!шto?>uqS\sc]_tS0‡<\q|yiGXD/'"m"{U ZWmwktjK3h>0  (kryf;KV[eAr04LWs+ oyX~88& ]d4DWw.CuϮ+^sz׶ufU ҡ*'D6O%/ZWLS%f ]pU5VzdOMY0a;N=5YYjġYU;Cw5y&2kP.! J^za>3W<8iR,8k)1ޭͳr'Xڴ髂ERF |fNjrf?Q9Q$@ii:9B ՒYM6X`#c@ў4]U8u$8 !GwaZ.5UpFwH[1xP0! H^0%B"Јu/yGxJk*\"xCb+m4Ny$r-`7xI37-;Z9%,+XXA䣛^`n )zAETh·b38LM閾ھ@. Ɛd!шt+~zq{떮o^Z\P72iy!(2 >kv֣El58ai,*BC<.WFJeF7n{@ꗳ$! U4IG%xe+C U~uvrGzۻђe2vi:{|'-qݽ{^86}&6ʹVY(a'ٯKwDD}7\z -YϩvГg>Rji-Z]l~k +պ,u嗋ׂ5>̃l\ P/!+׀D jX>矉ǯǶhުJ( FJl> yV˛p5w{N]^^-LS}dP1w1cn}^poFaLJ!`z})Ƕ^T%:sU\kp 5CWKK){Ndz;ɸW<7x `}Ƿ9ĺ^]]FSO6CAG5t3Ntx{0?<7kF\U |}V.&h1ӧXiI竗fԝ4N`LKJBW2=DX!Aɔf)D$a cxWb±YLpP5!Lx(J-E'VHtZ^%9V}&y%o\ߟ{ ,0O Wb7wx3̬Oy&zc^s۟4dAg`˂h(8Q#cud3P+Ec&0t*- );Θ=oL:L (t .s5RIQÅ;Rx/seK r ;02J*#L!Јt"B!=o.s}U\Zs8azHƄ5hv+8بuhWH,i&F;[K9oN:Ԟ xfx5$\j0YSӅEd ?3)P/! XTlp)1D:!>z8{VkXGFJLF:Yp]C!(.`]$>eMqop1?}qGDI8`UՑ_ؽoQO:%J10u[^J{D"*+qs(ԬrD+doF"pfsC<o77׉zoZƞM(Wc5Bcc|Z,PUAz0CQbޒϥ-ƆE D:%8;>&Q㐀Sm/!Z--,ke=USaZP/!U! Ci_oǮ%upu]7>߾ 2=!))p58*Q6FUΩ,So K;esۘs:4,[, o녨춏6Օr)ps0&[eK:GE&jJr8}C$MWE0BێX0`!0y2@záxZW̝}5UÊ%L7.{6M!{e8%?!xs\A9k ωjLuOd8tU"N} N @xgs;ZEαeڡ.l9^P-! :"USe&CD7Y{sxU]}8ޣ}~׏}ٮfc=c!3;v]hd"eC0gF=l,)'Ao ދ'5e0PpL&Oř)MkjwD/?F g0,`X*aB~ bpb/ǣ~3/KxޯWh=53R@[ڷ[-]NnsUVU8L7&)U΅>i&>H0eBc8cf㼼rŁb|oI х+IJ ^=\s[w/~&3 pP1!ιTU aI蟷W9w[{VλSk<&&^p ='Q=) Bu$_S9lz(\yq=PZ}0~=uMGaUnskL+b+/"RjMSW}zkLN@x)yȧ ?S0^#CDZ7W2.sW.jyh&Y{`rƙPum[lB;d R،>xtA$D)P+SyЉY+EƑϤaX$Mnsq>M4x"3eDy! @Nghu{70[Cӑz^ Gz@Q`J $T6a`Q &-]Z@=hQɣI:^8!U/M,ՉYe}_{Ð+(>F՜P,!￀TUBeЈB|W??N6֮So>?ֿ];)Aeh c#4: ~!;) ՜z.ֹԢ\$Adz}E'9.rFib4^6Oxa"Kǐ3DX\át^}xd֔o5}@ P!% ikʮ*:R/U2?p L4`8e(9o<98PYP):$BߝxZard/sO cWT1HNYy`7%P.!S`j=D!7WU:ng5??^~**ddXR|=ZU81I8Hy#ZE_^(a%,o(lOGIT!NC?IjT3X3YX 4{@ک7TѩiI`ҊDn΢<=OdQ 2?X đE~XH 6,J*]Arx~-æ|z׽˪[FY@ˠ h-8VNpnM^m4 JqJӰ- BMn{ T]";_V:_MLL1+!\n 55},Vw枧Nx+Of@pP0_! [QE 슋g!@bwՃ"js*Jܧ9Gzj5C24G&R!u 8(E[) %t7':i:@P6< uPHs %{!=]awx^P!/ -s뙀Pu bŜќ9@iĄX]\]5Rp4#S-|8בP4q28P/! US48B"5~ߚyZ˼߶J^_UPU`yo's[z߃t7cыʂYpvaR{tExx>&v0GFyǗ;gx ]^wV?eWwJ~2gY:m `,jDepe(J>N知xQo7u\M[|ڞ?Pyiegw]BH+a-D8ЕX%R V:s"0%?t|oy9Zi ʇPپW ARPІC t;0Zq@lP._! SY*N("ˡiO8 kiZ+ϻ{O }dxCQ"n `zw0yܱ돒*;=J knߺi]2y1H{s'^DB(6}Oe` ,*vP0,)RܓJ]}}{`=v_l5F |%IDZW>+*q=82U̹k 7L^϶'5y68\ ъZL,-SK SFyˀϬS,9&Kap*L/ sxI!pF:3(TzS?ʺ=XP0!@Sՠ-RO1^>Zyw~qTճF"xgsN2*Ufڡ/ 292c@xd32X9YUU 3{s9NC$~s{e_h $ʜ R0(a7iN47p0w1Yd18CM=:wUs{W*.O_|Pbru<^F 2$[_:xGD9qۺD'$rr0Ѫ@9?MJr tr^Ff! \s@I\Õ_>K+?,HK)> I8P.!j5QԬR5״?Zx_ʽf¤mzO&I@n嬁sXC%njX\WBUQ2p^QV8;_حDN3W6y&l NYln~m^X# G7+w5ksh`klayaʍ-iLK-0+Jd616[šhD:ϝC5O=8nzjo`$c {< ʩWn=SrP/! +Q$9 D!?Nu]yoʜ$ ?,Y1um9-P׵q߿]ymHoЁ?9núilzzI $MkPGF:ܗr5Y$c> SYQyJyҌEU #XuehYCo3Ӝ`/bBP0! Q9&ɢ雥u*oǵ3^xs'ȓl^FM;Sɇ.X&\ȗ|8!oqp̈́O;:(]"F_}I(r<":OMUQ^̛pIBRI !+?{!3ϗR1m;B[ )V*!"?s⪮U޳8_/kֺ%XoTy|s]75$]q=~ .7/W</3SM'+zSpr_|<%#"@ߦME O- ^460kFR\ \gzd.DP/! P,ThBbЈu/}{nis}g[O:௵T=!HH@sP[?RNkuz9T9WC/,p>B-f782jYmv@ [VE1G8D AtHODߏ8r^%ZY`\+ww >U,:!qF"/3N6A-̄S0Z3X]y{p,j,DYQ-vP){9 Dag R úp٬?P-!N@P٩&H"t"ǎu2]yWVίֿ_g+,YjPKswn8b*WF+I9C^O)"9l!t!k)PZBNzq@.IG[,\R>N5O+~yތ^,peZ@X aCo!âxog3Uկoi]]kY_ʌVz\揍$Y `r"דu04iѿGP[T#->t }_v}3qv[A^hjYD/~8⯜~ڥy_'nN$òÞJ1 p@z#\ /I*=!F:(߃PM34,"QLv(HP"c1C\\H33Щ aTHK+#NDpAޫ ^m9+Efp0\?){P-! ?MUNM Eǯ O7zߚΫJ}XXz]GuA / E9gɤ,7vd׏{EHlbr(oWNB$ b5vw| S/ϔ#[7/Y$}^L_gh VCd)zTECTt^}ߌxח}xjLΫJ߳sIpٲ8^LԏgzF~JQsTU91#Aނ|352TacOӟnoe>5Ek ӾǸmZ =k P-! @.LU- Unu߶sWoUεz')uM*5'O}jAjo2""m%+}~Lc Do*$BD/ˤUd2yE92lV!r,N])>UX =PH p &WKL 0֫WzoN+Tq]٩`>_?s/F EnMK3M^L3P| P1DyP N@]`}PUlvʠjwrO[1t<_a<<ju=uj\e 4eqYc#.P/! *L7'ON^|uI\_޿rݹ4v;EN7Z;` SX]Ր!g0 MDaH[\IA PyĤvX-O@Dr/-F9&NCggf1Nzi+K򯓌ӟt偣{P@ ס J!).pW"!hZ&S;okqIe5.q{V0J}<>SR@#"/{.ctA:Ya4(C7jޝ{!ѸyUR2:7i%Tƀl+Zha/kdgt P/?! ;N3.C߶k\He_oq5}ΨzѢA<Ɛ.)9@Y4mj@vz< %n^LDyfsElHLk#"Qcukv(uOgA\u`V)0 RF6K s0і9 pyzD) DKPCf/ۣ\_U~jEGԭur5E N.\aqG058 8d̃ mr_dt^0V#R2ZdXwıJcU%:^ _LUF^7cp\0^\1}GiP/! P\'Ii_:lGHǚ[)1B"%ey;L@ur=K.>^Ҽvq V{2@)\(cJ'(*gEx|/|o֙z+@6Ct:/ٕc cěF:J.dZg[2ԋ 98@8$uPOv)UJ湵^,%mQ;x+i^ùtz$ ZpP1! (?PSZ GhDz}w.[~k5|UGUk{˷:JONuKġA*ڑ1Aju GEzYGfi( F ?oz; r^Zuw9["M./J.JB9"aN]z}Vkj; BK18 xC-H}&jkW]\?[oB:,Thp]υ]{oW.jSo8WZ\6=$DVzIuϷ(ywYwѶחqYFl^8e)hML$7Z2#znJPw4cc-Bn&}Ysp-v$cӢP0! qP:%Ci_oU}{>\U*yq݂֗tKHMg>:Orh;&%+ږzFeĶ$q)ansNZp 'rvB2G袊"oI'SBӂE:Cր,78L*!W`EVzs@  aA4bP:k 8Ԉqx8P#'RiN_?c_'pRg1F6Bv[ Mm$ FHp.54̵x fQ?V aW^xHUW WvLTvsC9GXE(e"2lP.! ˿O)-hDׯ|]5T]yN2N/R]y?WF>ob}~`W]h~yz #NvZ}J1}xtwʟniw!מٮغPT 'YT D$!]AN45*=Ev'd,y .~bj:#_?8C*Y|cUtFhm>EXs6v]h $0xg[W !E+u˦E: ~d>4O*cmzw>"hiY90яI;v8 y–P@k M/8/٤xP.! R۩] J!*MVs$*<5Wz `jFm{INYQg7>5)#F\AQ2%$U'W GK;iݩ1RRO[r4AJ8qDHM|XS @] Eqw{ӧGNܲ|>` xI)_Aʘ\DEi<:âpd]AΆ:'1"pYJ})`pO5pΥoۍ׷qQn?j@#$g {P8P/!Q)8D!>sn=klAzi 955 sƍ0  E4{7#՜ *vSBu CCƿW7$jeڍheN3? 8.|?0|HL]Nnd }^&Ap`` x@Q%>=D! /ϏWw׎9\x8:b'3 ɗœNbr>F,ށ?EB"@S ˈsg̎< gE=\\ru}O~[/3vI=,'H1&݉<`WvP-! QYp5 Ju~~}ν\4MwqySH`QՊ(zq_ZI.{ #Ex*'=CYovcI@՞S`BJR>`gVPI(-gx`l~GL+eCO;*N?Ϋ< L`"`:Y1 0Tb/!h:':5w=in^ycߨsoga`ovqH$0FWDrHLb!"[ > "ud;RP9{Ò3~i~z?]Q@P/!M>RleD?U}ƥ߷5f.N~*uR泆yt/#C̪ApD*+XIH w]V\S T;HAR=8@t羝1?=JQՎO$聩kl@i|zb1[ԃ<P.! sRU=B!ѫzo׼.o85*|8ꦍZpVۧ4#C\ Qd75hÇ*RAN`S]A:@@ՁXHy8M-Ĉ;8S ;Z)ҫ=ưlN1Wkӱ[TpR7 XJQH * bܮ!F4ۺ `( 6npć1>+,vk?҈2[v\D q:c\?n|+8P0!psVUrQCrƩ^侷#.co\NB)7!xKPoV"ho s \z?"CEhu`Dx5U țDTIـ*s͔$9qѧ0tW ΰ ZY5Grе(|+aE\xƧ~=U(լ1Tz-BHq e%@P)gCЈ^D~7SΫ=ܙq˹| v|"ik]')")=5c>L3,=(%|.i|۞Q(9'9o@F'ps>WN&tԆd+/Lg jahg@րP.!C{RZM B"шtb-R}xjum^:|j8z4g)rjy!oT}9\±c| W khqb{мEetlSE1Ge: ~v˶Z MTP0?! Ol4 BИtJ5}seqU4>$ۏL }]J 5%L0[k|]mV /kCL1߄7ubm(DXsqTf'/9c̨VQd|QDvmD8 V.zt h?dP>+.TqBЄ*ޡ#unlkUZHޘ'45 PtJKܕ*f.92q8ρ@JK4~fJC82- dle LJbF? L>&'n}SOQ1O}/6"lf:$c*#$TS#8Y[* Wܯjg)ߤd=pP.!P,T F!>k]UyWWUv\{.q=)5 <:Z"lM܄ř \`[zXlR-vs%|~4)+u,x&#W0)z,eኂ&\re33'k7rveI4>a~x^Nߚ^]VwW~@=PKv'[ߔ<搯-) uiڅy*м[|͵ZK@hǜ( 5ɮѲ/Q,uplj1s/JTih,Ȁ k!Rd@, [WS_P/!wQ\,H!3m$\m8Tm{83K)Qyyz#z=tnB%V͡4U#ڝ sZpvLiH<Hh6]jg69~v eQEQh(F6 >!\1y ʺfTAY#P9fEb MuoIx7z|pGªPB],.[R\Dhŗe:3mj>xvPY^RՇNizW2ΩBP%[rS!ISiOr:eYe2uu{ehP/?! M](- \wUZu~/8E@Fm+Vbs>׷?'%=^(=^ײSr?1ֱ٥kXڸMI{Tx"+}Ja(Gw+}d[6E($AUo E;:*q_X0sMmWDiXDv: 9tA#ӻ%ozrz`,@TP0! vM(NCu|_q*_5޳\lIt@j^Y6].($&9XhSUPmqmPևn & g㞌h8TwX<`sF8Ӻy;sY6ӂ/Ժ hş+YgǐJ,\^2C**8 t9:i&EJv!Ng#uc5Ss{0ބH{7*'"a<~BmJ2Qs'h+V1Oԥg ŭU+ P6"P/!6܀N^(N- \ǵOl7:˯|w9Zls{[idE&~_TY5^ӎmU!NJƧ9qj#N1\2"&0T$,[[(Vz3ӭcENE/v\+Lh*'9=,$Q==w+l ܸ7QsS6ejP{~zԩ*P;:`Qs/tW\qWcO$Հ km-P)|c\'ҨT|9ƣYʉ´DqP`0Q'j$:j4!~{Nz[sjJq+ Uf+63y6RI$X}ӥ6soeJ.Ho*hoկ .Fɉ;4*}|5[?>:y,C.GЯT@ٙ0&Zk/iuk׿l˝y͹o[s#Wܼ '&4sIonbe!ČSeC$;Herd9 (n?nUG9 Db?qy׶zYUÉ҈())W?Rstu:*KHv?9_8*WGDM j0]A6+`6K7vsKCf?yLā0n_sq>*Ɣ7,*>O  5 0d[ܿ٨.|pP.!+|HӭT(zӍf_9/,jY|^Y무uuH/973-%כm뷫/8ZK) Iy ⩄#p)_LγJJ:~9P͂ lP@%A׮ p5ȚcCg[d~^|)NPb6Ŭw\k>$r޲@ f)\uge8yb"%~P{]V6t%u?oގI hXp(#O![|HvziX@K8ڞKˬCJ4H[H 4E0~9^s92=8P4?!L6G>ej*!vb?eYn:gOm3k/?}!( &Pv*]>rKt?AFiNiº\/a~׬F`qy/:z9k_eg,M[j~Y='@@fvb:m"/,z-UVt\Ť2 /g|KʴŠ9i!XY94ns":Buh/T|{%Jz>>ǎ,15 O1zdoR2h@w_ Ӏ /z^mFSJO4(T\A!-0'At\TsXJX;F}5ٛ8ל\-MypP-!{fR Q&vӾ=}N|笽ksRw&AVa:hM Lq떮O،PD\Z5lNmF"LvP~'i$(ZزԊ|͏#ƯdZwZwclEISoO(@@!\EƄf H`(tCxuLǛ5~OO5ƥoUu%:K5>[ Fy "K*LT鴵&\njWy(&j^PPC [2yQ?xp'N\kp0CS&ݸ) ŽǀP0_! AR^ r=D"шtN{Kzxbqc>[6misS{˔wz*m% ElespCˇ][=^Q]qpn a/m5JHWH{jB@r>:'99u\xSo_^Np;fbd: bF҄1<%t]I;bsYTd=oM8ٮ@ˊ;V`;@pGȬyBV%\]m)4mUW3.1|3P/! `Q](EKD:&o5R׍J:Q7tD⽵o"m @-4ȐoyPn=&ٍE %y|#6mpL\p (AA= W‘DcCr5x u9=8,Ƣa181t5d]4A)Pe * =s`/!t>ZjuIr\eʾ%EG*VJ9I R}qKutvˠ nIuaBKu>@hTR$pcY-ڍ+ِ1R9ΒQ4 P-! <@TݠO{x}sSφwϴV?Y}xuWhTn ;¹'͸,M8PU܋FRا˚ `]V yxBrMrPbKbޫ8+U*\0s \ѭ xbFоR_+(X F#@Y9f9:? CkoRu%Mq)%GZWVmoڦDIWkni $Yen|-[[DN3nX*1-*$^~5?۫rĀWwŠ]:]921 tS/.^P/_!P۩- F#шtO>>J'?Ї%Wr3 FUB۫-?SPF55Q'zw3mtRP2$S+\=ݷ( o75Ҙ 3%J "" J\ EUpQ CyVA F?NIr'lz< 6F5lМGtO|<|IZ#V1?cU&ϒ}.F4Ren{2aUIN6 i6+U$ݗq 7X˖9vt7 !@dJ&g)uWUiCɯ ~MP._!/QUeb}D{oWu.U;4kͺkKq>uugW/ ݘ:0s D9^p@h/?p"rՀE WsP2GB5 uvF|Fz @G;+UQY}rOd*g &@kpaEyΧH Pg0 H1@-$ Q>!âzOm׷9Ͻ˕z_E6).;,-Fr ]$Lp0^z֢ g!u' `Mv:v3/r·?f6ϱ> op2;(j]0(P,! ?|O]%6ow5׉R"Ik/Vsv5+gDTbEQM̢sՎ CK ^.9lA v>}y 3H_ȱ,`s c{+_ktk\\s 8f7 (bā,nOgwy׿EG=;6z\Ah<uDA:|'#cS v38{N.!Ud-|伆%|c~M_7̅ "'= yƁP/!so@0Qm6C~|/<￿o2q8xW:cs8zw 5S 5FËP*)z Uw{b[k AE2j)޽s˭54<@?SjiK ;Q5_hh% |fp#/̀Ds@3˨%K{BP?ZJ|z6ãsYW3^^+-^k/ V4װk${Q~X1WU8UZc b!K\HY@\P}69IF;ႊ==1|p᏶ꮺ]9,Eo-Fl4ǃP/?! QOeI_mjޮҁ|~Fޛ<,(G Y{A)KFVj59Kx(#_wntYx}'2:#}nzu< Zz_a.xmM`P,!2 O]%ޕn}={s֞ܟ8kM2 kg_|H:CJџ7_@\:8+3Ȏ~Em#u)˜w'O)ࠎwK, ,Wm%7skZݿ.:XNV[KnES hǖikR"%l  OTe޺>^xϟ{ןZK>&kS^ ﵥߩ7*ݮuK@>(T|IHwҫ"^"Mw3}_tgsrrӹkYdXWP0?! ˾LݠrcM~wWzߎ2wrLc*츳!U{+,SP8D  }SoU˿k\owǟ&]X?iU0&XEw#a5{DB N=Ĉ(}#q9D{%sv&vO^eʲˋV]eP+P4P1! 3M^:B%ѿ=;?YnWJǞ 5bnzZE ̘IWzMrrKF#X hKɢ_RGTF9GܚePya}umNay\dpՖU2&, 8Fh{@Xn8X1*Ś86G UdH2o,eԁ !@TP](Al۔&%'to~7:nUy޷ j5g &k d)b|{>9c zmnPuHDR}-"t*q:E?^븐 0faVS+֯Y8P.?! /K\=B"ѿ?>~9n֯rU;~yHjUG,i.BSJωD<ꈷiV@m!>2)GO!n,X #RaԲz`mֽj؍_<ߥjh/%N=z5r̊tm/[Imp ] -q hK]%>]CѿK֯rUg|> 67E;}Et\-OUB{EJ]H FB%|b 鴴^a+LzVM.o?潃CWF+RrŤWCA~@_#+P1_!CJݥE~#|?oާ vWLJv|~-kv5S WrǶ*KRk뗑E8nFk`nA;=ZQFp- H+DZk/șλ.S;v+w|d L1z?COzӘ8҆17Yd -+ "@R%" [%|bzmS{~=qn~l`=}j첈:7,D,.9٢Œ=VR3.)ͱN=:u]d6I'D5E`\?β "BBm'P^H@V>o[jDP0!C`J.Gz>+kWˏ;Y#U=Vm1}c7!;bw3'`&FAkl"}yȁ',( e*HWa;Aafta"gU_'y`f 5{o}\ou:0Dpv=<(ύަ"8[_`8.VV|:Y_y?ww$w+L 8]:suFxI < \csyh(:E0|pfFUo!lu 7l4d*%ٶM+N9@.#w<@OՎOjP2?!@H)j- T!?~+gk珷wz3%ˮ5XߟUw?.F9':ޯVA\|]bاI"jϾ y mA '([c!daHf<÷-9Xx~DZ@g eγ^P`\8<:mE Pa*$mUxtOW檫\W9WG.:"; 뉖Rkx66H X @@ SZâsWڵ^Φn/t;Vlgqʣɧ$ĈgQƙy4~sd|3 =@يEa5 fKKLù6M1WJk踞F]9e$b P,!O]:!.m^7^ks/hvַ|=poH5\עɬܽ H19 Y .x,hyd4R6@'S zagݽ=?ӝkkA”hq  i YnW`I`/ 0P/!J]O{_k~j]}Η|z_AƏ|1}nx𼤮yX?22Dah ֘}J ̼m,Eb۬8LxIdRν{1.: gr\bxy;G@h iʺ *Y猪o@nJv%PDb3 D1`()wx<F3M{K/~2"FCd|![ᦊzWQEtcُ>JTnחL:)y \B81@hDt0$>%ox˿usxM3ߙCP/?! & LáD&{|z럎SoZJžu^<DžqҩMvrsj1'e,*WF40QߺD޹4>;BQ`0 橦3W`~'0gVpxq]sϭʱg4 xQ<Qa`B#A%N1>C>w^3Ond{>Yv>{˰/?;?* xʍkC_Fhۏn2#ϳA}羑7F|`4W+HwͯW&M#1\ZP0! "M]E3]WzI⧙ǶS{}/)İWDބ1W \"z6m#@gKm)JUʌlpT:+CóF4!oaM[xi/Zy>? ga|~YߝNc*Fyt ljz{`R``"̼JD!toL~smOU~I&{R00z w깔U&=h!Taʲ.zѡ~G .i: |!3=nWXq891ӰkM K 0ċ5 L'7]QL#{G)DxP1! uk`RY!$Btb=DЫyϷu_ot^qo@#'W,\l`Ψ֠آ1:uo8u3`Gnܒcmj9)k]<13RJ2 `:&n9-)b14|3s`NsfL{վ#T=ym -@ j8@xX d=EDž~u_^.ѝ?mW0a~~Od#QPCJѓ{=N)ԣ16}'|~gA"YX2sWnH ~uWmW EYG^C..tAr '7L(\˺qۓT(3BK{B[Wɛح24 A. FJOӿ|=/Y]j#Y\@|~{>8 e } yv"V +?F ܣ2 BT:;a;Qv [9YsIUH5z |NvD-!r׷|I[mҼ`W Yȏ䦾IP0_! -QE:G{w+Lߗ2_ZFG+=b FM\(6 p&)}tu@ޜjQh\trٗ~4EQ:)7ZF~ V#CZZ?_^wϖ=T5NXTGBX#H,_ja4>EhD:GJ{]w TKw{kKW:J>4D7Z43i=?vFH1u4;bM5l}]A9j[ޜ!QEfxiqN΍( >%np>5@/Np5xgVX`k %CP.! ˀO4WE0:1gx̙uO~yX1RazjygS%T7UInu4\!Hc> Feu8>EQ/@Gܲ=J>9s "4Fu}8sDr^*w0R⼧{6< $]` H!Јt>.CwZ=ޓ7|/J]=kWUJ҂ÿM\bqφAcDx $LHҭI KSzJo;esh6u(Ic 9 3|ِ9r?Lžʰ-l?GP/!  P\zâhDZ7>]eukRqWgޱA+pX^M+D+,:4v#s nㄍlz'ye/8T3@+)deiT֪d=r#QEr+( W0}L`sQN?Vr嚝\vJjj~.0jP._! %OҬtǡi]}x3M7ێ~f>@S3.qlKbƎ]"noys/t! ^LAU(δ=%d064(siů' 0y5eEH-V ~6JaP04M0'Wä|B}w>'˫{iWiS)ǜoqdiA _Y"\, *GOUW`(רbj٫mCZt @BYs. x!J(Kыݍ6dapA|T ] 3dWLeu[dJc,P/! @QTMD'=sYi^:pG~~Wܤ?-'4 @ip|֭,!ߨy ͔rP3:w~՜Fz.K=\bϡs(O 1jsa**|F 20H!}2gG186Oq$&E@+Z &>xZNjԒ"K^>2_g~TpfBTwdP;{RIp ³KMۉ PÍ+ ] @Z.c8RJaK>7<?`!45: JxZ5:P-!OS4Cߜf*8jn;~;Mgݓiv36Ѷ]|a ӕV"`X^~SH!<윚dbLنJ/u54糬@UAx%'6TFxtM#γ5*8:oUzޟnNq}T쎂Rc5QէCHYN-f찉%La b`KX0Ֆ2B`3.ZmڋyžW('r/Z(dGl* W^iwW̆qI%:arT7PpP1! w3P,8BBЉ\5>~'fq|׶!<+ҁZN7- `ۛ@"AU}WXf}tFljϜ<pz_q6=C=-_2ɡVۑ/Hߴ9Q6/:E<o}ߦ>̆`  (* @fG8t^D!?uԽ˼p{fÛOA Se!I)]Efk:ץI֜-_- (@L[` ޡ=*>zꤪ#P qx㫥(A$v<߀4N}ƯLco f3P.?! ΟPZ* =#B#Јo]_rqߜsQV8}}VyPz5kpo|TkAP CBobUMfd8X(c+)*;V{-vc$|twxASWc cs5#A$zr,K4:c9e-} }d0"]|Z NUX-F"Јt>gG8][WU:o⽨ʐ" (3ؚ* 2-#IS$ʮ`J9 xθ7;!/WuЗ@J)F~9F}u{rGIzA ɯ%|^&Syl[lm4DHQP.! 7׀O[P%äD:꽽j$L_0'?앨t?W)0FH/̍,ne)]fL?ea >^&d4f["CAaG1 VGr @f(%ɷ؜w*p@ep%`1LQn=It>oW:3I.?m~#UpR! ; o}935מӼǨ]GZ$`ݹ{f ,53 ljK 2EXk׌FDu7(7j/^̥9GɌ8P0?! 7N)- Bt"F?<^+yOo5uztD K0S~qfM[ +u{gvp;FB{Ǧ$&ƬrPȖGXno xJ0|޻֜5rYY 0A` GP0! OZpUEhZ7g}5z]I>x֧iwTHb&5X6H/Rɺm֎V牫;0{ ??M4)\o1-i-//}*ww9_*cߔVݨk.{ '-ɘ޵l g_qz v3:`K . p#gZ?E\+:k$>|O /+EdFȁNAhtgc mT=ޡwiNU:уJWO KBvI<# 6QE"!.a -WG!n..Zt!QE8k騣5а|UGv.Ha I@rGtڶjUU7*@}?R0+0#3$0R. BMz`=A,(e?ti9OB(HP4$.v'j4?X@lPqD' Nf\h}\V s>tSr)Ɨ^Mܥ^{ۜyJFk;O"q[C5ؙQ<ˠ>tឧ%ad捶v̮8fz^ћ+#yқ̐XY$޷F_$!X:Vsƙkj\W7>*9a s{1;P"sLep\t|r~`G΅ ʅeݳu,F=Pwt:&C$D0&&}<0"%@m9w`y˅[vR5t;OM͝|uxj^b[Ϸپk( KEI8P/! ?NVZ5ChDz'}Yq9Krq{?/4}:>˫/QzkI5m6Ǻ'`Qw{PҰݜSC3PhZ-\hJħjTFuCJM. 9(a+4i.Q1 qqn$ =YhQ١9#9 @V .&5 $.pgáx:Ǣo2_]/|H7WhLTnݎY}6/WbPH2Y׮H+2P :Wd(IݪY8B֣~kJi;lmRW5Drmڝ W5P "yja2+Jx{kdxP0! }πO^.-J!һPD?P.! NìW}WI|ZU fΎvWfgV;8e վQEնhۻۃ,},v/,ljFR8MAVʺ"L8̾Eߩ2{֜W($32Z=ޜ1/Ć1~Z1~, rFTh:!x{~ÿ8ҫLԂWqU'x[UtUWU4mió;۬N53u{-o8am לBUQ>բ12f mcy\Ǎ/ x4Z/W nP-! RZj,äh:6lϯg9\T4z֫\($RC'iDŽ|g +Q[uI&7xS{:gfj'-Y5BIF՚#,]h+ C ^\Zɵ)},A_ &.Ţ޹γIY-wEZ^b#U@w7Yȴdbu皙P NgM`[$uitkD'pW:^QFpqx1ᆏ4t~ *nAP-! /OZ=D!}I^2q\1g7/KL3nFb ]0Uy]-Sر_^1*_6< 0>ʘ?†:~iՑ*5:p9 mR1"NL*$!9cYB#%^^c"tcN080#a"Ԉ;Zx9sr̜e+UW6Kzloι/ ¯ӟA:+"n(2*y& TN͂ΕkC,?SJ¸m}wڐ,XCV8XYݿ9sW)> އn&C/91P5!2?L\ih5ChD/~ڹβc5]=o0?H&SfD`9vU G\pcfbnA^^2\Mp\ό?Rڪt XY(Fyt0JYRoZŝ!N D @(Ya÷;!q " a%EwT *o7-zm|@ABdŞqt7DڹβZISU5Z?zU⬿֘>H}=' 4 l׽Y:1zO=% !p4 }\-g~nXfOc!ZMf +L>7~'u)m _PpP-!XހKZëz5|eˊZ|N]k)v^gY @il(wHD`7nūI|M]>w ^ԲJ~ؗfψF)l/ ,H]O6uhL' b 6#Ohv!P-MRDԼdF3jZ$BaPOULK3N.q?F6Ie#YnDž"XEԥU\S̏ ]>8zk<۴#u8u,=xjN)@y経[!1o](uKt!GyC {MޜwHn %16q>;yʭm>+u[sL :u<Ų#`<:/Z'\ךjd^Oܟ8km=SjG)aopHԠqGk\}=&RUtO;L% p Nl g8A3l8)"'+w|,c'U q tP.!ZݯNܩ - B"шb;|g~۵J8_[ .񺡥].2aktSG}tּszi,mܖڍ:4U?qqd2gOZKD!s]V ee8o`of~?0]n ;Z;'0_ {$GZIyy7 z3HP.! 9NکWB!Јt|nW.vֿ|~yCGD\ڝ?3{ +=vyp1\*Y"a䢦YX*Q{2cikNEO94sEI#(?+ ~%q/Fn#RifA'񽽯a2Mj L)(g { 699=X_h?W"2IMt"+޳=wZJu]OcW{o cnF_;N n @ą3^5KY֏Ԅ%-v?\gϻ*uw0CW wc2]@ P/_! PUh B!Љtn}|{ߴ)>:޳\fcۍ_<ϩ[q֊]>.A潛`cldzbvmPB`<`zzĻdXG@5A+YhW7 7t k2se T*ro8u ?h@Жhy`gR~έ>  \a\ r Sxt<-CѽoS?Z).e9/_}ʀ721UF&ȨY\# 6#UEscXZDLw^jq4|\b^ISmNҀGp qXu2/^aÉק,Gk 8P1?! Mܩ*-D"t|3_?ڲKϏ>goj<_LET~RѬ:&_*UE½7.|sjj0%(޺2Yx3rن8xڇ|mHz*Q*qfyi>BBXDvA z b# ;xāT-_%m$ʋP:qyWj]:.S]ߦH:Z]Cj]*u`[<㞀bE-DxcpYJGSB[YeVQj!ArSָwdNpp%dg㶑sl#9W_ /TpP0! DJ]- B!u//kRޯg7}|]kRO~9M|_]Nx],Pt* QLS~#b~MbwJ/"gtpHFۤ߾I8ǸFt\Hӻ~(FV)؝S#rs!:^8_0.EԿ֞|}㎽_)V5xO>iF3tk{L:N؜RPldFQ\ڻnB!M$+WF˕uv!?>}!M8P/_!O/Jh- Bbվ~~N|]|^tky(NzsՒ:#ջ7-;d 3n!_1{ Hhf8lS WX=:3 Ot $HÏФMu3=ܴ^Bj+Xq[JӆY(f23bRf`n<(2;}[gQ߶PQ)mLXMog\5+JF'=Ge*^{CYt; x.k}8| ]Y-v#nE8\;(vy4[gE^"2E ȓqErʌ0`.DeRtcP.! 1πO]ìu\xsI#*% ~{ʓbxfCs|E =Mrq2ޠj&w}5%At#-Xoo=>qbwM^yohªlnk3 o8}#j#b å [`#S(2 4vegi$ì@!타A(P._!EܨEá0_>wo??U.?w5)΁ yT ^=k=h^ƈgY[ ؜w:y~2'ncwaeN8k* '֭Uƿ Kr( zCc0b[:USoD3r; {"5á<ߊ*]Xoqo73JxqaÙ#H—a)vR玖Rq^_7sMbѓ 8jcN¥kKVa+a*wp0jꒄ-s1ރz(v{aՄ?5쀼-P0_!EP/M J- H!Գ^ޫ>k2UKvSwT>B@wǎ\ye&(VގRKˀpD\`P܊HCz7o͵f[bTjk3M9ۉ1ꑡܽ*=[ˉ[IP$7kyGo]!{u =qf096 gdަ]wV 3<0}Cd4?6~40}M=tW+dhj/24k۰NV˚/ p瞲mJt%X.X sz|CS^y ~$1g\7aP1?! DG]h- Bau/e{\}]\:˭!2jfnKVxsS;a oonF7*UZ۷H{[_2 U5==MC݀7g vob.h4SXh@IGAH4-d40L'Ľa6=шtb;u>3Ƿs=wTqJPv+mQGw8T7"3QfC9ųG&l<4sB+p>eF7Sk).",㍇X ,'W(0!0Ɗ%r*Bo9cx<8P-! E]zájÍQ֧|}n.D:y@jsez?x>f$gSwe,qGïnqx0NNd[ܤ uCG8r*~:ªnTh$x[3HT۔Ͻg1Ceքhi24[E:7`&Uh ߧsx=kqr$qԗIUiq>(_EGw#uaBa-p_:~x?5IĄ1gC6֘zi̘JDá`qs4AL&ˎHrԲgD @عQؚy˝Z3qeّn 2/>5TI"sj%$t7"%=6+yg4/['f& R 7edAUmrrmVU )W h-D<dOgP9 L7:nTC,b5gî+3|u7s}㾞o!x,6`⹟uhA N4LX? 3)5:/Ա}=V<{٥UCҹxqD\Iι)]J<!*XkfsUj?iufFU1hD:Q+:qYcZ?_s~ߏa} r {w+ Ӝ`O.uA9b:G^!xefSճ kp %< EtgP%fC!@/PV+(2P'>0Wj#)7FPJFP*_! E~P,C:!:joT7֬Ҟ9ǷOnk<˴.7Qߧi-ǯHmқ]Lؓkp6B&[W~| JjBŬD.W@ p:L\)0cenFڡ0R#)P"m K%Eͤz6ǟ1_Y_ NDYQP0?Lavc57.107.100B6WѠZCC]~9Ϋ\Nos]U'|$y)D?e6:x=sv ֭,Фj=՛,<(oQq"l,6GK¼:L,͹ÖBu̽˄N`z+2cPDC@BTk p\Q ke2ZιOY( ǡQhD'˹7zߞsoL+9.}5{^%u\rOV u@jGͰ9TEd!D^/:$Q?uP'E{'lx \E)-6|78O-,  (-H]gkk0 r0b>pSGSxt"'Dj|5<˺D_WI[HF\\]kk}Il+2|EA R#;AE;X+@#щuS(p/H 2Fsjw(?- tzyti P1! l0IrB!?s/<~{q+I\>s?dQ`1 sIBg^MLPJ?; S^JzAdPx9Y': H((lC qzgIaer!Cp.WB:4Me^HeٗN0c/~eP/_!O K\d'&ɡhD:Gg8ۼcڴU&KՈTu|&+Uã xH!\9?/׀/ZهYvw{=J6ŷο8)>NpWF;2GD} ~"}]G녖}t 0聻;4 *7-NrXho|:G;o==kZT2u:t 3* k<~[e,v1AAIV=XgQ+{=m%O@ŀj*t@ÂVw6"l9Z=/$YZx@Km/$u_q[irg8P.! iLVCZ7ω~~8|[Uߪ|rC6ƃΏNAĐR>0iQs&q"z_ (wpOY~DH8IO) ?y,eK& bxrt^+z)u9{A@ZA$NxZâh?>x;Zꮮܶ?hL,J==K^jt4\@m3dS#1U($T0^"nbpޚ_C_ 1`=˒’M[`6ilrP/!HJh*;#Јt"F{WoN{mjU7#?ߑ^:<$p};߲BCbNDEW}܀F j<8N2x;J@+hҚ]^"+sR=Έ{lG՗.2H=2ĺ*n `%.%m7Ct~ߎ5Y<}wWjUUVITu??ռ/3y:gmFSR?09?f-UGKrڸݔ1?|6-e&=!rЀO P,Է<8N8sELS1a ޕpr+/&UO\\dNޣ 3[uC,A"|CB3z潻o:T=ǟnñ*\&Ft/ywvȇˁOߊIU8k|mTᮇWOSeHp3e]#rjEq}ԑqv7_ញZu/ʴ#BRjP.!~DݨM D!Јt߈fP0!B4>FޜCjo;WzKSwHx:3{ޫ@AbLӹ/wQ/F"J<j5kp7p'(AUQq@DS.jKE4u{}+*' gyApSQ0%zn ka k3xyo#(XJ0".FݤH- BaD>NW~Gzw5-ĹJWЄLJx[Fy^Q5#uG%b _IN,]XhCU0sUDTc˃`{!L9F`VҐGU:1{`aɘq.1@Ì1pP0_! p&BݤT'ˡӟ]߿׿moΡU3{U*A?_z5ĥ_uqUFwàc5ߋQMK%ǻ0(8Z} {9* iQ||ԣ ++xoXz ]fLɢZϒrhyz= ;Rf@"Q`!nt} BZwZfI.\Ow}TTE#a"qk+,w xkՒv ~WXE&$)`?^9̈Iԅ>E_(hrtHD7+D@uy·I9q&D%) P_*#@~naKP/! Dޜz!E~_o}zdH >DGq-,ƢES3rEp]uNkyq5+vFiy.7o(c|/W&WqO[F VG.|j0/b;-5\Ե%qcSѢ & S|y0*O(4O6,. x"y<^k@凉R )WbrA^nAx:!Cw|ξ9;9q]ViOyלMv:pK[ dJܛFq Bj|r^9k!3}& ƌg&ЉѠA#?y:o_ڨ|݃wu첐hedpZ@8g{ݣDP1_! EhD^z#C|TW[o}W\澹-g]qҲYs FbKt;/H\ K@oSMa|U[1Ś> % /$؊ÓN6xVsT;A#YJoROFw^Mc4E6:=~}П@L|:EE0:~k~\zkq=q~kq`޹/tT6`3ae5aJ'm+@6X]?lnfy- iHfc0E q"[gd=IkәW!*\y zDz<)[י.QHڟD;_;4݁eHP-! G]CO~fo8:}_W~y5t'?(t M=q{̳ (`Ait.nڌzpkձU =ѦusĔ+1^7ps <Ā赩Uύ1I]>:`u`:̀@M{"pFáoO?W㜯m/4~]u{i@5%@*)2K{aLt. _z^z$~>uYĴ 1G16^fTScLy*u==§OwGC> .P/!WٞH^ NmH!=Iޜ_?냆;u8γ]brMYs":u*Ԑ۩ ĥ9MS0Nx^x]W QGG %&:V PL"*Z1qke\."ƖcXqUzWh @fX7N6+!@]Gqxt>T>gzyosw^mVn[F~4=erOϖ^;EQţWW  MMT[92$Ĵh0a`ʣ6:iϞPdV5]e޳˗$Z3/'~05qRA^P-!+>C(={*|Eߏm޷nk.3PYPhAUoi'''8Y⥞79δPBm w*3 yEWd (P3!L VDkmO_(يK}ן7{|e~u>νb=vL7ШB^m &t1b1.bPReJO@d}_2­xln ~? cȘy;YO-!q2p\CX ϘDrq"ܣYfﴇ>GvץH1F)"}Y>oj.y?Nyƾ}ۻ yP}{..Ic"/h_ ;m-,7kyRpq9-g&xJgX+X 4ۚrp:K~Fl}5Ҟx<ZSP/ L6f6[vaf1JE=o{q{~?=ք'?߃BhJHbHny6.0E ftM|T6I 's#2gTNm[wwcrد_ p1Ied^i){4Wt<J {$H-X!5n :а=y9UJfDP[U/$I{N5;*o;]Konu??aWSs>{=y,}M2vbj5BKٲ*n#[2st .qT<&K;i# S(  \S A69k8P,_ {VCZaé㮼jT\;֧T~؆{o\> ru[{ 1 痢sN {5Qeqjr o0Hѥ3MζrMj9M8sYкf)@NS0 Q1N@ aN6-Td:C>wQgoiΫ _߃Zk7{l7 !GFIKYka-VgY-/Ji? T!kUK>ƱN4Ɓ"YS1DLtl"Hd?c_>Xl`pP._!K?Xݤl= á^T>xJZK:gu_A|_ K7g9،+d]Z`bқ%iΠHD<#K,(_)7Kk'd Nȣ$[.<xmOp9Sj@ ajM-Y!~ d0^)J,D5#EP+>|wqYKt)5{_ptAEzM߅ML[IF)\Ѻ-# HI]Ka4sǯ| H/,'sdaLGA,c_A7ųVy줜.;HbkOI=tLnĈޣsFjϚZ;^–9Exϯ n,9 g_ ]=Q:Na8t(Gt"Z8V~[/'믊0 y<0.*;W)չ M3{1iGsVff+ 0* Hy~ KL{ұgղ`[*OY=aͭh1Ë5'  n5 Š1S,0{ P|B/CD:7_[Ϗy&/3s55x|,>ў$Zdc:5boק-i&m}] VH-g04Jwkhh[W^rΦru;:Z %nGBx\+\3.4%P.?! GD@T- ǡ9랫-_Ms0ay4lM+ɇ[E5Bv"R\V)'iZEqBTRr9(҄8B!nIB)mİBQDu=]^c,od .kuKV?=-0:?JϽ=Nz㞪狭5LJE|ڀ:南ԇJ|o@O"[Iʨ:zl̳DؼS)'EzLTRb8 zSԪd'PՀxP/!!T(mcЈ""O㾶_.;֫_?oeٓi晶0tCX?Y?5<Һ؝noUiL(׻U]̏/Kl>z1|8S ;eL!n=g\Mέg"0#}x#vzd(ʾwAOmV.S%\pn 7<@LjTCt>=#?'Fr8\Ue>pԑop.t 㚄Qa.Ew1[OA8-@ÿ~5C:S LꔴwX1_כ)Vymcˡg@ ѩ֪T2>nP bUyǣ|")7o].ۚդ[.W*uo JUu䤟w( (Bރ"y\ >gd4ѓ}`^ۜ(gL[Rq~/";=ЈG-q vE|S=W*P2!@U(}(Fz=vׯ5:~s ;Wi=^Tw.d4l`"w-[cF%0OSd1IM |^yB=*/džsBQK4hhZǎ&8${Rx]0|"xT#6=`/Sۚ=fO[ 68㼓2݆k JxLHaL}Gvs" `ۂo! T }uC1]8oypcX㯐=N=Զ5Xͤ( e?%Y?~ZpP-! eV\MF#Јm*_3njqή'~.ZyDmLZ7K8r!%GR}lmLK <50K{Xs2X܁}qg~D(vQNAh͆Fj֛rVۧLA{4Edtpa@.* )HlV]L#tZ38^Z 9w_ҷ&.5!˯`x(bМC(fqz1/i1Dl2#DJ j} "8.zGfiQӉ~๼j΄wLUH'{+X uꯀP0?!ÿ7_Y]Rq.E}}qY7Ww.3ݖ_U#L3A lvhCX=`Q~_$1:VY džeǍH6\ubG"!"2(%<|{e3/9ü`O+%-NWvD5j{}\tgݐuE.Zp-|@]0,,#CЈ|ZG? ]7TbZ 9.sx,plp4@`M5Tq3KޤxȐK aT.(c >#(ڎ)W? :QҬ_`2P0_!IU]T0B"Јt"#_SΎ~^u5]׎^k~ݛˠDRvk,dMuMMq"Tfr *_. .C6?@*BQ@sap| xHzf- uza3Χ+ z=}  xG@ CUvhxáz+MT: _47Ia c6-- Qut |q"@R: % o1̌xHu::~ɶo:7ǥ.kNL=iy9BAHP,!+CT]zâD:Eۼ^oƷk8hw~>?URY %SvDq"@8>;ze=IWӋ9 2770ԇ3F~v.9Kn"00h~O90Li7PQ36gS9<jeѸJ۠-0pYPct, C4>"矿\z{xgCxrQmb0O3q9wl8qBfB_H'peaS -Җ=09sjWP9PF:hSʴ+P7!L@> OY,M\kǤ㏆?e֭|}{皖W X #&W+_N9uGd߳J6MoL0 ~VSa:3nS |W}0 ɛ]l8pLl%UP~ƺ6Tzg5;b9LG ><%D" $ D[ yB"r}jQD~W]ہIBJkF#|Q>>Y՘嘻Dw>oD8{5t=X<{#`hM&1gWD"` O[[rrrp^VG/o!Mm?iNmD8ODb.mI$xsRrU?t< g>$yz֯קPX!C2+&ۄK%VYa KRx6*ߐh`ZA9P0!XSVTaj-+J!3̕מ{2YRIǿU/ʽAGJ-mLpo pҿv4D=@o8 Dk̭NZ5<dH {tV,QXF#y,mv)ͣT`c CshD 4Xy:/J=7Q`/F!Ez gp Otâgrs3NrkQK˲7/Ig YR' {V]$!rN $JfUB M ɽBiJ 'b5"sQcmjBLh&*DE"K4AټOe8/.9P,! YNY- CpD:'5ݡmեk&U\C9Уq;Rtgn$8Ĺ'V3ßk JB: {b*!#6S YWVx +A3 2,#C'9>1wF@j?e}v#uO\wqU2z8ކX|Ԑ?xPCt<_^Y}W=s]֞hyއU_kspjDޥ Bjrƛ\,ANX<#Zc;A'|]a* J}vg~g)2dp>w9&>F؇%KTS' }TgrYqP1!鋟QݠRm,B!шtOm{s^ro:fSө' AܞU2&NUq@j>f:)*ƚEn#0BX JihJEZECs$4@^mXܺkc1 vj莓[@C, 'wd/ 1aHG>7βk95TM OMtJ@~wƂZ%5;E-B@)"^xuT2kp.b}J llrNLv }{0[h^(@Jsn^U-E@vn[@f@J ٛ>(Jrs/UP2 +J+DҸt"D]]2~8ڙ|I3r_ƿjH6DsZ>nʭ74xEŔ$1+H 5K1P%3K_3`x`PU3w2պb/6uWƩ1P@P m-ǡid"-Dϟϟ?_Y&S4{֯'?Gp-+7#ې,*jߝ˰p^>,6Xj:q~,8VewgƔz;ś- 2v_SM.\8EVz9~7c*> 3ԼмiHg&So龹@PP1_ Le#bT*]j꣭Q/8-Ǎ^Vgɭzq*ߛx77wf=R7[Eqct<#yNT,T=tū>aJvND/ѱ}3Z [|oLw@2 3c6&Rd"_SQ bwdͮˁ[}?I[ϕDbhhZֿ}*\׷6qDkYfm ɩύ0 eNZ&H(ʀٝ\"ltDoG{y9_]cǷ`ѣF$$$''FJn[6y^WP= LE%HMk!V/ҭ88'id]S"CIQhvQGWC0v7`k{PyS)4DŽ2 7諳WgPr.fnqQH~=ULF gpX }1DnQ (MO 55Vsۊ]biyn3!$ gL'|SCcjybyC'4GP !{tW,&AhZ7|VWJC%j$e 㜢َ|oފ˫GCbҚd֥|UzKrc5wrrSԴ/֒TР\ sС5^#2\%]ELVg뫠.dtj~<8p wA^8S7t.u2iVA:V hBw;P&! QK VR' -̖ҷ+=8㬍x`-# 9V˫7t~}W6NL3UO+v3F!F 3d\DvKiD BRBD ?pT2k3f0 <9* VT*|[k|uobE:P.?!0_SaFBcЈYW\fKļIv@{u<q4u 42`\dp0DdceJ;p^2Qvr"8UYsG?wwT X䟮mߌ`NWs1fs6 ww&^d@09U\KD8 d tB-H}y|wc>i(t7Wh]T02nS:G|W3G1xH0U*//s,cfTr"6 ӱqoW#Ԑ od`Y$ܮ,X\5Hy~4P=nP._!+ `VQZF*B"Йt~QkZyl=?_k`#;YS~YX歆{;Zwj׍fxnZ1 (-5T7L:~*"Q,wET$L D*Ã"5)wTPR][D^|~&bWK4EBF!3Ͱ @_om8SX}|Wʹj˰|>?3kN3׭@}_g^HJIp2v@s#1+V*x==v^z.#Cv/`}ϳx.[đ,@m /|TPF!L' OdTe UMq6^%\}>uyg<}c!=oo[cx9mҕK:(lH=~x .λJREvj()R +߲L]㎏i7_HV(}F!Шt>-ãwƲ*@){7zE>Q1 `][>7w5qc>iYt^W?jK/NP,_! R!,#$BЈ"-Dgb^Om@JEDPHw.f>qF|0wS{*y{4,,kE%(l O،_6AgD z py}<`o?Ӑg*Y^ -ȴ&#x:'~Ǟ%Xfu$[Ynfy췉yK,,xKmbԿ?tr6~^n4/P0!]sQ #Ј"- W㋤kڿ.߽QЀ|iSEܽ{V e:PmQBхGP'xucOHz]]@oswPjl]YgS8շ~70 Ң /Հ>)GP'^er 5RUGjXB!Ј"=DW9׏˩+X3MOa˴SJnW uJt`{Q!Lڝ,)<.TwLFdqP=*e(X@T^" ~1{~O?0ˀ6Z^P-!S B38N|~wS|a՟?lỳ ύ9;|MZF&2~_ދ[GK Q_aS[+ D0O< čTހ\lX or+Nߞ0,tlY >|}:@e~ NNcB:I!tN|WdVow?x~gxetOM* Zv*WSEfgn,aǗ:w  (\F)PNYN^#̡uD Yg-vK%4wc넷P.! aS[ ] CP"i\o닽([¿ZO#H(}{FpIKZ>-yLbh/X324E#j5w&$_-B7I,Xe|d0妟Ď//MD D)O\dRѾ\.l>? z} 1ڠ"Cl&-DrPZ{7p>y5`G_g*h+5Mfat8Ä\OW 4$^JDEF*D7cXpjl] tq¦L2?[Aˊx #`Ċp:'*4&o;SA@!p1yZ<@iW&ZɕbP/!oP[!H-BDq=u8Ԯ2Rs?+?{>d߲-XRLz'{5^Jg6Z݀\ }>(R&Va<*;yOC ߷ŗF@+3W=\qboeZ^@|޷ji~^t;cǣvBsk/ߏ;q|S^q?%<dž~;ˋi!__4ym S;Ը΂*XZoӫg I' qA hQ xJ<ٴP0?!N +GXDZysZqJ?[Xx.W:wMkJd&G.*gAG+86zq<'Ҿ-S6yVTN?!Mg:F.HEo҈$`dgmՃKV`;.h1qb=!(Ii1ҟ+MbWA@@d|E,T:d\H-Bd<'yYێ"UK<'&V~7U|ѹi|`p] 6MK`llwS0 +<т5+E%4ɀ$dZ۟Q [SW~R;%x_~nP0?!+/M[P,]cUƛJ_|q7{"PVs{#@ 7VzGVBddo JZ'ijI9nDk?-I T5hj Z{k{{JִU kZֵh5757Omϑ7Fp+ VckVK!D$Χ; :޿99ZkC`d [Wuϣ{Ag]`3{5e>̈́b;^X p+-36{g+"JjVϭ3bMydmI~1]@6l$@[tJkD F:Ԃ-:bĕ2h8-!8Fͣf"*@gt9/@:]I)ii~w6RakKVt$1dA̒4AF\Ш2g\/ݎo*0'X\1w #9rc5b9^lL7]/@ 4IB!Й4"-CUIuZ{kh8KH= "1]bJI|Ȅ_Y++ߠ*e]8>{>qD`@P.! {zSa( c!j{uۦuΦiN2J}u H ͜*F>(&F#FN \~eUU&UCI}X:2/=IQ "$O'CVnyf)_Uc"ѕ 9r{X=蟁}ܲ?vVTēH@NO6,|pYmYTpe1B$h|-MqΥYG3R'+QO_jGmq oȩ1/3ky-Ů# iExC A$.O{K*=?Zh!RH+ϲ7`Q)GP.!+ }xQ[!.CCxYVq$w{s0F {~D|['Z/fǬJ߃ŝL^hZIPWWˆj=ND6ٗE+d\&z+l%kЙ8"- */zƪ+' ^O9_yji mFRoS.,8ޝ*hEpmw9D"ns"AVrꁅ8y96 OUZaB(K7B#X'̊PE!L؞/^f;H٬ﮡ?P?ju`A<:a2@c$/#@*,Y"6pF~i6SofUpIp` chyN{L kz]h;A. K_gAث .L1}[VqR#'u|Oʄ tud Wn_ n/}&hd&0NZI^6c,sfG7֪oγ^޷:gԫpMyϐG/ TD0z9XѣGSD,0zYCej>ӋS9_Ϫ{ɾBNƼ 3z O Mƀ[~hu3>5c{> =}p]?}YW:g!_GH "* Y HUa4"Q9ЈՈ_mL5841Wy~zOmSct`P* L -TZDǟ4Չ3.٫vS |hklF^;ZZ s.ӏB )bV-y/M{v:@?ar6w\MoWURS]M)@Xcf5>k+~WMT~3jӖyV2M2DL2rV=+ @Dz'䚭+*KUȼ}WΕT(qGLk~fU% Qsպ5>6OϭEs| C!V,VN7FdnMo" t$>f-YoZsĠ 'j "@'buN@' -=ݐ#B>,PH:3&F4FUqKIG}x| 3 Y$%&vCfI ^V9Z羼 .6OA3򫂯~1HͶB aTWp;5׶ɰDbQ{ N+[ =xҜeP+! ׸UѠBcҷy=Nb5Jq7?_ޮ<߲{sCy@ ep נdD |L>V:bB4T!z0p LBIvd;I;)h*mn^g_蛪EWDT\ޕpKe@H,ãL1L[U$jgꕊ*MJdE[.d C6Ls˦T\svUP["UܭH xɀEcFwljYM ǠG`Z%PHL0PqNSl5w@0ɝ^P)!{VPLeJЈm)JɝfVeurLj h$j4#5g@x{Oð܅y/Jf:0 l\Ojxo=[aU'ZhX>PB{}+rxq IvEMXT$ hh7EhD<-zJzb5̧׿9puJ;vxэymgR Qs,*~u4Rś!ਕTpq18\N}*&kfP/?!17~U[`"Mo:qUTdܪS8_lG+6C%%e9)!HB>RT `LLX4d5DV}HQP{BqZm|];Qk܊b  eO >[5B;Tp ~|j;VjMܭn\Ͳbjy T5T?l:"yd_IcY*:po{ɸMDbmG[@]’8ﴝkF7-UrPq_U !a`'HAhT S:%P.?!T[`E D3]ɉugk.Y޿o/ouQKoRj5VaMyMZm{zc>yuRPֽ3嘐 3aH92ddE!sWŽ[Hm@)YE^RU ĢIxO"Z`D"BiH>uWYRLUʕvuοQ؞~g(ѯ 3"/{.*v$2NHJPg`p P.!R] B"и#MgYⱪM߷ןo`+ s~o[ca*hc,MR4Q'' J*hež\P"B v}]L13=y _MT[¾`%}z7]256#KLBT8D#D&jgIV5PMk[5REjDӤdeڄ2EKǹ;.ULr> f@'p/%Wֺ75w5lJYp *fs + ` }fNF_KP0!-P-B3h:wd2=kS]EKNjnFz r=lJƚvJ1nπbSychٗ*ald xu/_y H\Yg/dьAS0% K:x,M% RB;VyK+J.y5 F5Ⱥ{YbĢ栿P̋gJq á0Tzu:>sQHZN?w8Y 05/+^?rF"8rPp,\&&j)rC8U:‰g")?iP#DgLV{$']2ǰv5UPN5#!F'Bl?o -Łb4H`BB1Kѽ?tr?吙X8;Ù^Sr\fv@#6' qS(owZ p),"G/Xv"cXZLh݆,iyP0?!.S]z.â4hWu7{ӮzԽx&>y 5fgq]I z}A;aR&a8SCS\z͸N:@U홠Xh"a"ſ眱$hH9q;+0 {os NzAI9D@oZ:8i2s =^7<8ƽ? 1`ӷ჆/N@sd z pDd)RpՀN !~T}z`gŢw|oD8'6xMwΖ'P !bV0J DEАt"= 9Y׋.8sVu]>ϝHix|lϲBbsL.'eLδw6aEo{i0ޣƱ?r oS_᱋j#OU[A1O%O_-lvEDZšU&u~<<'[xQ$+ˌ <;g12 cM멬Q5ޑ(5+&&SfvlXM2|~῏]"ߍ(Lx|x h\o B??/6O!ۺl?Jm8ۺ4d͝d=Ҵf{V i8F *%+ߟusz/<^GNPYBdvCOivq `YvXw@v7e:*DrǙܕ3n7L"5gmvDю/Ni?BT8P.! ˿8 U,v)Dt/=_~rɽLrwns@Nn/y;9s@y$B$؛sWTM[O҅ : j{;(|0r5\}nۮ)M0ŀ!:L; /=l ξy\Z૳TJ"xrezz'oOƸa cl D!{=f0}>"yߐd =+<seCgJ} Rܥ&UL$Ug"w"#7A,El ^HQS[LJt77\?P1! N 6)y5u]+u]ens繪?NwۅܥzqR]Th>;;mM,NBRퟻ"4'Վ^ƒdQ>'ç݁1qv8EVbBFӐM-:_x8g Qu:iZ*捲(W^]eJi+̮%힑R $"qߚҮ:}N9% 8W ^l;_*({,.ʪhEpu"#bQs_H}y Tal#p =֢3x./V1Wwn35x@a3xpPR \oP2!S! !${s3592_wnqm]3"R l.E>$q9XJP11}՚ֺ$y Q|*Yd8Srhk P|1:5wu.IE;S^;St <V sFm.V%9[Xܼ'Ή2A׭=A`$"]DW,U.ɈnϪ`m=epu3m|pF!W4΀Pxvԍ;<}̹(Ʊ .q!p!(#/m` $T:AO3k2TlVÒ@l~{_A~0P1! mUةeCMLISn;jۯ>~?&+&yJ3G9b$0] S,β3E'|je1,)yz*ʬ>;nDM'1a|b/Yv[;} y7V3[y@$i4zm!SoX&g áUƼ]VuzQZ9X+q ɷVqy@롦"ۂէEp6r3vU4RA2:ܵ UܨA]E3c)[ZDKĥyUZ@ h35`bYt@ P,![RکhmB4hL$- r]JTǯ9[Z%n2"{p5"'Z!$@[nRMNFsvEED"0 Aŧ,}\zc"wz Exi}ܝYa-# '-z:׋>hmSRb,0v1VSAM-t2.E_S$pV:_p^:~C`E%5(z8'h_kNrV)PÅ|}9E^[`ⱛ9<  oؽFx? `L R6P6!pQܠnF Bmxo\x֪N2[CL2Vli{vU]9!WEآf|d #vB+7 f4j6[KJ6 8W 3 :##>h̄:On7acvv5qw&A!d]Jz4 MU>Jdq10TYŗ_5Su3pn#- īGpt" ]3i<\B m*ݘeҎ"]fnP,! ;`UXnmi3ӿk7FWGn]u͒ȎAA-]DZPv#ɣX[!nqXFQІ6BRrR2e.W1onn5PFס[7Z`$wxcl` @4hO Q,pE2I!47+J8y&u랜~?5' 2P(% t +3Zo<%wT6!`a]Bv>S+rvwuB)韾\Sdxj 5ja(1.MP*!9(QXU6eЈt"-jdAZכsu]KC.mux7ȌmԢ jе-('ҾDSY<*ޟMu\` N+%zEL =-Јt.#OF^_?_o= 6 @2  1F~׃H@9fB dAM+SL>:`.5f@>RP.!ۼQت5!Bj!֌"js%nV3 f, !I|D:8B.Mf }Q|(NwųV1#W}}=\u(Wz )49Mc4+JVzO]և0O $ vNa68;Ji!$&-ΩYĐV<~>u 8o9\A]&.x>K4b-P]OzK;hZꁘe1 U`Sm,?}ٽTd|N\8%tx@/k t?:0OP.! iRܠnkgKЪ곮eN}) 2s5E4l~ b1l!Kbp$"Jjvli;RIHf64fƦ x=6l5ˌ aEa *؉Mi V 2P^6 ^o˨_.*]*KR\"5ߏ7UuY:L\`/ݻuMS=X ..p9s;fN*٫XX;]+ ) }L 2/ÕI.Ap1j~ߙ `6pP/! o|RܠC#'sUC^yd?&O#a0E1;70.>3|9n%Y90vU~|q}}}sssQ5 "n@ 9&p9XOy',{oh dԷnZnPCCs쩿ߟ;.iYFfQԬg< һ[~IsLKyϪ5PUN㾒7l@55$` 9Bt3~:ʞ7/L?:`0L7KG/ҝ-ً5v[S#UvZ"Mos _0h< Uf!TGQ iX$"9=Z3\w5fe }%)m Ɏ+\EfhzsN!~ր=6ON0QP/!hPةe)B#;R\5>~߇OUp .Yp9])1]`?P_A~`wÆ$Q <_>DǪ#gErkLqcmkV=V*!eܬ;i5yPQ\l<$L,3,7Co &š:zTӪ7Ҭ5>~div ȐV4oە\2t(\< ܌; n{Rѣji v c-²ɴ[..KD2N5 Z@os6 wP,_!+IRت 5Fաyf⋪noo;< 3EZ` K{Afi22 @bD6vв7@^gk!#e]GeuqM)]}ђ[ޮP?[Nʍ4OvmoK!X{\=2.Η9| as-԰, סpt&8/k=u[/xqbg$Es"cvI“,=M^ƀL2~Y~v#K6>r˼Ib!Y;$ @GmZ(`tNPD?!L̶ @QQfը0٫k}@^3U]O񗖽 7y`IuNtMvFA[&tl"7(._n >MOu4_gD"9Oz{+#Q|f0~3NRT2,VPWګʠWdCd| ]?/DЏ8""(!B. "B#⤨(A$m@gz.ŨU36caoQ2~I>omsfKEUA9˹wYk[0@tXb eb>?IoQ}\n|9EH`4߯.釷j9 8a8MAO+ Gv)?7켃2?ޟc3O<:%?&=>4q`('}2XQ ˷GZ Ͳ hFNQnI/]?qkH.q{/P)!{g`X8٨ H!ЈtbIuIS1uNk_RA$5(4m4ۧ!N`C\k0_ByMcɄ3=v+mz UHV1Z;\&71f <fJN  `tBBd7ƽNSq7\_ME)j--rH-,o( RI&QɄ=$0,GX"3)`cΰ4!CƶҺ*<,b춸vCꕖ=YJ,P*!WX0BtFB#ЈI8WTbU=gǙ?_ 9 {W|S%(8?M:bܢsfLsIfǒ1FE|4,C%4`㏄wT0X \LKnh ecYß 9ȸP+!9W!HE3D:UϝԲQeBJJyu~_?W_0r?~؊rmBU.Rhk5[yNZYk90RUYgZo]Ⱦh~=V,g2uk%.R6~]J*,-B;R\n ֖[F fZrav š DZFjjT R?_ouA<,twI&Eƞ3N_XUeoɇA8*m6 ) xVN~exx +s 0-” aOpP.! WTXBhfQ$*)SO6^O@6_n^O*t$H&B| !q)MN[Kh!ewpI<@E!#exY7 ~hӬvE\Md9ɖ!MO?oL1n l2cZOZZo˓x<ۏ?뼏>K $ixإU+_MX H(GV!{j57d{5bd C* "iAH3FO R({m_]Wt +;TyB5l@yZP/!SSY0U[zk2몫޷Dwry`iD~q= \HL6udaxxrQwU+p<RpC(Kq*DHArg"f] HL"RYYք1weݰvBT-\[ MzCeok3NT:вrm]fu{Ȏ]o'M/^& w!q/f&bN2I)zSiyk#\#EBc#/R:G-gXEՠYUH8IW3Lq5$q׼-s>즌O.l7T)f6AL(,2P.!9Rc9 Bf!NuߚʹJ˙_x??:x/A.K2>4)&}$bT,k|8Mr&iCQUM:N\jŌٺ!ǞEZ4zyAx̼@2Iߕq1<#|4}ڂ3o'|x1(7;#gm x% O7)mt1BAxq/9YɤU~{T=N(?D}>hqcG1 @ :AL.kip^+I8G` 4|.݆pX&zGEL{7xt P.!S[ʑB(dSY^wu%ԙu{uR~H6Jw,[ Wpi W".F~Pa7+YqAg3. AO٥þupT +u֥u7r i$2Aݗ91'w?F !RqKDL< 'WӤ`lQ"WVkpReqHPi3 ןpKNyˉûÑ>)ZoJ z4 .C$!RVQI4d` 2ɳ)?DdHP-!LQ[cEptj~ffҤ2=/x tV?QtZ7<^+;-I`IpjǤ=ȥD.ӎDI#+/cU\ 3Wܴ#9Aj&VRT^nh*v֓~psҶ֙-]xKv/%};45e ИBm]nz We{~+_'Q!.bs$2IX&ONP<8f_Ƣ%,?x J?qi" ?=G(or/W8 ^/]XN4hŀP:_ +ZsCVqܴ˕WwqZnCm{aL_K|*UTfYZ.}^ל@WRK?R!bb+OeNm~7mXT\!]VťS-J%[tW*x:7>'xhk׎VK3n9@ nw<# ͈6vПWj`O_a}طB{=ԌR?ݜ)(Ho T?>Lܜ]S,Ps0sIh?qzztۉ5r*ք|38mWm]dW'!oyu{fc% rt/kaYC%/ZŠ*U&pmn EM+Amy@ Qs?osـ·9P%qaJ-Af*P&_ Ld%t*]ZkS^?Wixm}kd[vNh4(ќA:fE \!Aa!)lcuݧ`[ 1/ͱ#Dk)֐EТG;bˤyb4GCa`JАB]F=yFk5Wxj^/Qrŗwk]#Uaz־}52oTjch >'x $CO>?Q3?AO>D%?P4 {$LM7u{.LH|_֝R/ VT]$„4.9kSU-_AIPJaēzHkBRT AkQeOAK߂StI> @`6ptˡQbq\uRڜ87](D yĔ ZL^֧[ ;r]M+:'Ml)=V<\ZG0c6T%Wo\պ'/sAz +wg4-peF{9ppOšiE/[XVқދGJe^P2?!3"tU! ӡZK95PCզHxsx=:]YZBϖ9oe"E;\2MS ,& izOm]Ƽ?v`ͶpF@s;EM[kM0{NP7,{4*`͂- e 5ssKҕhH[5zF_Z矮w*|;T4?wIYKFna4MB]y|'ʌz/vyjTWv=wZ2H5,R.(1](+5oӈٯ.<=⊱9)&ZF$P%u]X?J7@if(j3r"d2DzC^Y'=fNyά*h&o- mu2U/Hx/z|<޷ͶhsEuP6:8c' |j"8Zӧ>1y{2c#S^n@cLp9ΰl(~̤~#9-Wdhk7Yw(kHeEg6fm1%=_Wﻟ[12ý6~WƯ7&@pP(!{ eVD=BdpD:73>yuY 8x}?_AjN?-ˌ {!g )虜Aj}dqF * R=2_wʂXnf_q6^8=+,CNC0Dz+ED$?zsX8y/}O?9.:A5l;噏%5 iGДB, Nj@@}>} P.!sR[a 3BdDzҭ+^8}O_s)vYDf5=u*ea3S<&OML"J|ks9sE3ӯҳe@ISxDKӤ:Ɂ wq~JpuWtX.p Kl%cD 7%o9HlK޿WuCq(ټoj䧙C-INw9)W}BnSG KJ{,ȕaKwqV/H{oҍ?8#+r־l)tFj_`P/! 2_;hRSBd2-U+{JqRcqƵ}{o_ߏhU{mYz̹n*i ZzZ nTyd2aQk<l+hS;A(+ל h3P aW?.,M/?EA#O*n^\K)Ws$2ަ78k__z]+ Vy'iHt3[i ] }^b9p SxRN)Ӝ'ce\e]ڸꄓֿ@hjv;>Ϯ `1t_} aJդWZL@W׫bP1_! HR a!3HDZY]J]L]_]WJݘ,񓞦QF>+3Yc%"{ Oq soVt / -U-rfj | NS %`oH 3zm+el_%Tvv\'`[(WNŴ1R B|"[˾z.]]+??2 x( \jz im$p=ۥTaH[EWlV2ȭNkX$Nbbj~̦>kr@W@d R;Jd'D%{P,!@R[ WG0DR4DָQ`{ls&]k;$``L$Њ ]WтUɪ DLК0 66ygV}P kaOf_~ q_72WCB!tb'D!hIZ(x};@T@K6…]>ҲTب*#&B3k="ڤ(W2Vi|˭IE[_cwVG{o>T]pO1"!LՖiUE1Mz82I(n7%MaPe&gdzX2i\\:BŞ0^<] 9q,+q7-]]O,G.epZ$m/u2?G.ZCMB)fi83Tq@)kЀ]%?Z _Ʃ ?`n鎉z:۫ 8P,?!YdvQXT)BheLk[ws}JX;" ; (h p@"x:'ׇ>>|ټtNςO;С, L7\9r(@.Hb. )yN.=9@ |޹HOos.2X=,hn+Y)X<7 o>9TDƣԺ'F38>]Ң[Re/+<5P;8g‡p6g 붱a>@VYqS5U/ *?T^ ˿ `T`2՗J5BmsKfP+! }RY1B%КO+%랽㊓*m~s:K hHTyй{aF/d|\VEє b-*y0%Ɔ!PDT$G  8mlLտ3>laA>:g?ϓ:~AILϏ$erA+F šsuώz'|*oW߸t5^(; w~:9iƭ0:$k)($S6k"Ps^:Pz:P+! TUJ%Wjk$! yS[jJUIx$VL`98[be-Q KpTԜÔ`\&08JU6 :rowkT`)`n.&czy|QP<7D05]G=wE"%$e>]sǖ>be? v[JiZ~3w7_N06 ă ٸ5m,!-kSQFph) n\uԂ5<@;etxNoÔUB"I$38*VL\ɟrțFE%D#W'nMTa %#GyG$Jz^Q@w$ZԖ`Uy8+ _@P+@yP@_xt8P8_ :lR#oeiRT^J7R?ނ B&sSG;."T)XS}(Bf%]oW.1.[c=gϱϔqKиS2 )];4*Q+h=UvA-9Q{y8^'ג?T?.BM'm>$ xN :krL˜T ʄA+^:զKeʼ)Zܧ~!*^LOI0^^(슃s̜ rA{rphtO G6|Q!:J4SlШ Ay3q/m:T̡xA/8*Q+P=Uvw< h8=/:j*YL {m7Y1A<Ҩłkp>?_ώN >%PA vr5* |U]Lꢫ }/9+,;_X@G$?Q>p7._PgQkN}= qWe#eɬYB첞D2dvg>ڼ#> N_: q@SP;"p:708-ǶJZ%\Df,f+DW;jq|uj;{TONjǐV]3[m$I1+-­Cd#039TEәglm ی_:%rZ~e@oR Ω1`)kzEuE}ϖ8iʒw;`oF@*$T6{9f}5V9h͔«[/OGⴊb- HJ]:ev[98^C(ǩI_$ofXIk"Q$U 8 `YBьǧk<P+ 6ИtB{wN7wY+v7U.ʿ_ $~?.&tzƋ֊wfg ;m$d|kC ʋہ\)D9D$%EJ]@Aޱ{ݸi=ѺQ Gф<ǐ%C c1ŢhߚN"X|u]uUOo=- \߳VNIW2ՕkQB#臥]jjW>ŠzM'yU٦q)2bX;ܙ4} ? `^P-! '`V١,(Beє}{ʸJTiTg\sF(i)H\!W?,p6HNz_ ¨ӛlv:L˟zrˍ. a 0;dhYm*ڦ~.$!-6]g8FEU0<@ x U^_ Rkq*i\+M +V[7N4$L %C>pP0!A@TY,բPxʻZTrfxWfQs*w@j3FA@läKTc\C ĴdLhIXLnN},QpV[tsk{sI:;KZqJ@m./h,XՆ_op?.(YehLzIK_Ou&5ܺ㻹V͇9DK<W$p%S:LOVCͤb*$}hkJzXA]VmBp( ~" xkOfQ2zX oz~,6de7JP0!ۀLTZU. -лϲJ-2fꤺSϜ֧r!>M1R 9#]p4p<KM-?1NZd.6 aLvTWgR3y0gEZ)= sXu<0Fr(F`0Be՛#7¶^ߏ@sed ~kTeMӿFJfPBAn/UWytu|o@w`/;te*MB'FQZI9[o׻i$l ]lT(!2ওR+6lƋ*7Vn..ZkD^lt̜L)^[e@P.! U[q.O yVuToU\dQo_(2ĵY),]qei8^ 7)(P6ӫ͢cc4P`̜M=K-CEFDAoM{)^ 2t3C_BM.V#+eK^ke3G0zWK2A"``V! C諨2H!D:{JkYUoSwW*+4US%:ಳDqz|Ť< ۇ fVJAY1ggVv.sb ک\rإ`#%$JboDu{#톨Qvea2pP.! T٩e1 F"t&] ݵWY\mߗ/ \ׂ+X4Ply,Je>]@I{fFȥR哿Bzﴇ;]&3'&m^3v=dHѯy ~ q\eVՠ%v-맚XXCSpD D'^{f/q8YUQ+H/X%eQ4>̩F*x{*e-iFzu3:pSb KIM_(3۾0)ad]-sfij~cŸX |R7pP/! tS۠ʭ B^pIyy*׽dsk!&UDEe<}_ Z@p!Q_M'/9q `K' !CvO"D{=L3~'*aq!J /(bP h@%@!t*kpKKm(Z BlYzg~WSvk{2^>z XrzJ̅q X} Ћz X$yDƈi}=W'< լCB%Z;Idytu$N!>ɲ~e™@wP,_! S[تa&ա@Y:5 /w3\*S\;c?:5%ZE'MJo=/9%.@-͏l.LY~S骐#iap!|7u6N*YлRcՉݘZ4ti +x2 )냠D o.4|BUAۃ ]|qDq}48kQR 7 GMZ6j5ui2%J1D $P+!Q١s ޼Y\n.U]]JsW&k5?AVj,X%H?Sgz_f'34ݲ3UÞfoe(qAW}a>XxQK).Yk! ؤ˯ =LPE!LLY\!f{e7Y5u=u$knxZ􃾭h~%+ԉY_IZt$f:crת*xt Mrf k$cQ5:K@\a*PƘ[d6 FEme!,ݣx u'SL%P[}r;m*gTT)U}a^)TKJS >XL2>z=w[\Jkq:EAr%,#o`L>,Ra>˜ά0'󒻂"~a9k-D#B)'=QqxVb=ĵv-}!Lk*5dDu$k.*;P*!+{_P[ JN*JMIoˊ'_j |c.iTv{(⊠P}t!,-;w-' RcEB7@f9rsdOo.Aft1kДrd*){N;G] y!P]}Ϗ":γ,KWy8Rf/ɸӅ73v譣,Sdc4"M áoD9]jq\dXnڴ}]*4qB|tܕl'=9M-<ha^5ۏ/OT;O^TXKd]PF!LfLYbP6b҆vvZug~?7}Z빟u9? Unks<Dn|.j'*kKM\96Lrbb%ZE?}&flE97nZB[{u  ([hg<ڑUB{oώَ:ieEEp>xm&bhԼ_:@jU7*N:osc50h[5J }4}qkă=N=?`胤qG(FĐ/h L4kZM׶w֤'t?Ƴ?\ )$,B@;ʅ=xWw@\0ƹH(1\)̱ćshA~D _?`!:#iEn#,c P/wui-nijh`-8I햦 ft7.ͺ}:GehՎCnzM+fS2^Ym2cm,>}pPA Lme.:٪Ȼ1Xi꿟4Z4驪/n_cHDugVSS(_mz;RF] Xf.R.sVRd0B"}N59U~!o< Ӭ!EBu!iE'BE\-GcU.guRӯ[I(@LM~RL,LOe %>*4 6o9!']hᣪPU{[2Vf,)j5BlՅ%K狻'7֣z=KWY~Q[ 5ZnF !E}0HH tFӭaT Nq# pJz{FÕm}}*k?&w?lE[Z.PjSn"qP?`գe=FP@9A'ݔqܬ$~L+t\ /[Nb߸7*t7keCZgP/! [S+١}ȫn.Wt'~W?rtvUvHT\L&'_9Bj EI(D%p"|orz{@!_٦4 6tWRW$έ=b(AZ҄)Λ fF4t yJr>vE#? u{|~]S &n9%55| e.uu%70.wYiO7RW..bUf A}rI7VuO~e\~k3MjnC+B]9b^A3kb yccET-c>_DYd}U`@D'@Zqi}"U{(bPKMտ-bP-! {V\jFE ڹw&oq$wN;?z1:\c֠O"~y VFaa)j4N!4*Œ񔸄@u)>ZPg,\^pXCx\A[+3Ef ĭtѓۉM<7wdU> |J0d= z\"IsB'B"xD:◜w%R!҇:zzxag1@ { {[OgP.! -uTX7)Bmr޷]C*rw&OBJ;5l9Gy٧u!p̱" :tft+O=^ S-Pg19IE묔퍔a>k1[rv3giv{ :Bo$OKضL M`ϼ3bn{P_+^T%XU&E18DBSJޤ7oMj|Q [/,3^3( e75hi5*b3) z\MYC(U\[[Zfo(ExrÄ\ ^)9S\`MjbXD2~- Ǜ7)x{Iߟoqg0caYl`Za{9S߸ud*r-ze&Kt|MVhd\"H54o|zVY4<,bhpP-!yxP* 5Q΢L1s|s[#v[Gbv[@EEML@w9p?8Zy[z#'@7+Ծ~Tro.PDs ̃]<8ԮDܔ3Xz [ ,W_t[@1DŽhNj6ƕ!]N˨+)P,3{ی{|꣝DJxToMϷH;%P v;]Q@DyevLEo>:ȹU5Zg!{U l(zџsXc_ źX9 *{ÓP4u{@pP/!ӿXS05ARI.&Rǿ_WFps)(ru`3Uy݅p# | (&I8% )wxB;9Ð(1Q#$3dws: +(:+TȨ5FWlF$=@!J'c%]qj@ӕb' !RuMnҕ|~:sTp*</U}ߊ $Baʨrb mp- Muvk}pJp˟u$Džm*m"* ֔TT@>R٤&?c׀,Gg񀞘ZcÖEǀP/! P)TX,7Ao|uUJt~O*ha:0?ITjd!%=ɫȖ}1Rlѳ,bA<êSE_Jn7Hd%r[SAhnUđ+)c*&Pv0DWTiwNT Z C!ܪ-rzip$O]NMJ2( rSeܨ -5/I |>.}^oڥDYJNvkDΣN?$`gߴ|t=G<@Q`2BQNKp:S[<ɕq^k.FJw +f.@/: @. tۈ*Q@ Ck8b"ZuRCȡ5xRnZN"Woϛ ]&tȥL5H4֚̍NY+/p l3P #uY57QkƓ y$'<+.P=l`4P-! ߻Rܠ3q {xu櫏\"W uiY_-#U/Yn7RX8غiwjɸ' 5tF2j}TN3'Le1ӗ\$QbTmVbZNSc Mhz(:PO*/U3 /Eն)Wgd7p1T@z&3ç?J+R )n.W|f5/)3YY(-maυjZf~s ٤Sq_MJ8r%K}e+Z<\+v;&uVqXk UV, J) D t M@rP,?!+S[3RJsg %_S>nU~nۨxp,WJP,rn*"{`w$\.yho i S]B&!5|޻xtN<'LQx [ wx%?Q4?85$9D:MZeI{/$|Lܚ1A:L *56 OP N-6^;7z܉:|n-&vOPH!Lð Rd}YMٮ4TjqT3YkTս:U %fT-kjڟ֜s#MYdip~ZC`{ .d V|ߞOߎvڭR26)h;[G`3Ŝ/zlxþq "tħP kB8L)MXij8i޺B B-d^]fLdjf'aol@{U F8qOMsLk?k6g[a^Х ̌oRO6jfHOi|k_x uzw׿5)sո 4sVDv=?ˠ;5 \#y1HQ k_=P}5띲^+=up'r n&"+=Ծ^wjA$O-LTҶ6@7yui*k (HdmtLuۼ^ .,ݹ/W*U5Ƿo{_#4MU&o +C&_tP(!{ ZW} C0ET˜"J{kwI" rtYA=:#ީ]p?|%(V! $Urz._65XnpP%k_C:QC]8uqkTP}A vI` m3aZ Hd!$C+/wpP(! h>VDGQBkYQW+$_ t<]8g򣬓 xz*~ 8.EGɗ`Wve2r9F8-KQҨ9"<ԎAX X$q[dmdMАtfMDm׿]Uz|ܽW^?~ky. 8sB]Q1(>EDĿf: tSMמojh]UN(rI%$K[N\N&^tx#aRdǁP+!fXR!*b&ǡRKVk!WZ<|jWnPt񴑽 ǽ p}"Qܞ/Dt|\e)\ttzC٨:ʍ2+>xV N7wrBsa(3ivm""hDUuBeϟZZ)qg"=$ -FfoL4\L-ՇXgXz;1r}.Ϝi\fHTe+snDWw3hh @  ݎe=2SyP/! TةnB'{|k)\`x?$a5~jxᏸ-KnѲ1}8 强Li8p\ 'm|+MAJʫ*髛V3`%73*.kYUX[q"1;(E~B$ZhF \|xј rfuk*ҕx/"t\ /fͺo`ązPJiB/&,) T|lqf:+#m=Èe%߶ZྥȬPM鏪{">IW7p]5yƽݼ8{čP/?! n}VZ` 3) g׿&k"輺LWy[@wnU&g>pE't2)1/3OBῲ+$h.TPT]z^401c:ФqZin?ǪtDo[1K xd=z@}33T.xĨdW| 3ۂ[ĄgL'c=xhdVS`] $Љ:#S7~>";^="gZu`s5 LB KzZ`]`=$aƙ@/B!arN ԗ3D7zv{Ǜs޺НQ:kJi.yUw@Py!,?O@pP-! goRة0)4:|I7rD*?3˾hf||]:WR0CUx"j]KӆeeK)HzkKryz~hcՅo]v^{OD>ps7JG5|)TbVs&yv܀PrZҊqe+`C#YwܽTs D[6`) '.(ʰ-Ƣȳ3%9K3A @ R|;cP=,@w\3a%p3pP0?!jQ *4<^J|]U9>?XbD{ҘѠ8(ԬKll:muGof$GEϸ q ٶ9eZn4P'+RFrBu<@ =Pyç&HWo-pҤN ӟVt-˃f2vX"l<\ʭjH.sc|P!Ve0J=`4DG ~15ˍ; 1ק|ժþUg:dn9V^wdj Htq寤ҴGiY8P+! qSZ)N63'6&GiCZ_uQCBP0!+,{RCB ngMJjjJ5_oaٞ 5XثaX37oUђ0w0"D唤E,&2EZAo4ׯo?w$ {%1@OhrN*ٮn {_6z@ =r6e@/p\j3R (V1翉{_q]I*sǯ߬~kcQ^qB9Jx-à 9lSo_Zo#INv>MץLbSb $Gtd#Bu{9o–N.PrFTtAVQPE!L0PTD:K4Hk'Z55oWzZAV?/H/|T=-fhcݖp]͞;ᥩΝP$ "$=Oh}F?u5۟P㤷G"),Zθ~'ڡ=太K%!i2F_z_Ī97nP8\Wޑ/ls{=-=X]~H%8]?w`3H6c1jsrr'o_Y\yq=XngGUl"?DH :sL{;Q5#j==p3lY}nɶH)!v1k;-Dy\>qtAGhåz nAUǠTaβ-&WB%ݾy^e݂nwlj\YzhN~}~c@algn?y&XG=eAP)?!{ WL"BG2i ˽>jSU(o:qݽ1_@ʭaƟ۾1P" )I$˲H_Hl1. Bǥk þ/v08 qtr E=[I%Ј"-ʴ.U5RWV\cާ8 f!/m6 NTYcH0c3xy@s@ݐ{brP1;d"j   P(! XC- H:EU6rK5\W@VҖwF$ҭ\(H[シeOnfvcǶ{S+.rvgU( C+chğs/ S,U !hD:2bЈ|WUMI3.]S#W5 sJA;E%p0!&G|=>PCM[}&ZF%lB;<&ZJp;a x{'Yd@5_U+ΏP/?!`UR]SE1hDnu2ȵK˪׏m a],*_7οo N+Njˑ2 ξKvU7yrd]/'OuN1:;_h)_GЖ e6;E8ppA0Ɲ C8SGXޮ={9~;`fs,8bـ+"B٥8wY(ٵ>d SőIC}Et+ ֣y|Iq;kJ7Ӷͣ^;psedžm@t@>9mļǐP-_!OTj B!ffdŨzߜ׿D/mpݰin V b!^H)% p!>c>z\RJ́|sUԔg@ыc{;vUғ~f+&bg;mUIZy\om,LĎ,%qll QΦFc!ZNá^skR3Ũ{\ֽuAPzW*WԬZ,&b!VWnKۊ60ܔ;l&`S.NQE /˳o!*zޕ6i {tYA?(PP+! ~TX"B(Јq;z*޷O.ÊpqkjvڵjP<|N O}]p"'I+>S_^٬9xgfחjZp+b9+6۲wV.9Ciwz5)2CCJ?͎/9S t- q׶z޶J/+I"7zP=;ёL )a|QwC/ -ސ]}W|x_g_YKӟQWӡ6 2d۬]eJQF:#qr㒈VHc X:on}46%͔ģw&M!鵵>EP}q$<2gRMr s#NUPcv9ֿUYӭTsȤ=X< ُ [q6UWیv}ch}wxCߙϾ;3D5_-q^בھFWŁY_qr_:ë:.$Y1iLy_Y GP,!{ k(VXmB!Аt*7*娩s"o?=׿ޏض ۄi'֢ SB9.L EvF jj䂪ޑuݵqǡ_n>>ßU7n?`*+ 1l*+9`1* gt"BЉ|:x_\UUrZ9_o5gXr3 ȼC߯y޷7 h; ߸ТDHo|nGK/P1D/ɴT> x? OL#&LmRQ8 U(5@4bxJxWrPI]V=G ֹl+(St`kcC2%hBX KcArښ[9mtxAqW R U5'Й$"=!*U몾U-?2?98*{tuh 8Bz6EC|`+bB>)WHy%<6beY`@" ߞ~wͷ/@*uX"N@@TÝ-I?_lU ճ3] LHԀoh~e [JNƾGa㶲=Ry>P/!?ȨhQm 8"77qqWdd{o_k_(*j漿06yhR#q߷q[ESDѠ&idA\X_wnocw o/eYƱ;fԄ@'ـ3 'HdQ5<@w¯PEŀ grdz$ɡD:'7޸2ei?_?33d9ҳ"2bՓZ|pHXv_ȾzKؐX%㦜E [-jdc]uHۘPEp/-%B q 6}!LF;Mϳy.%?WP1! xS[=Bd"- jsi+WWVJxgoǿSg01b{dI.ttŌkMEX~APSL>Z(xv'PVJ($r@YVQ w9` <ۯlp%YKˀF]dM@evx1%;A`ʤncJ.#7Ƣy]U-*?,|ͺ,sD4HP3kyU_- /pJI9I]1*xj{ę]s LıVS ?MahȋԩVHV54cKf7WCabOVe}h SP*_! P-BdB)uN=k*Q??˟ q8n#L>up:Y@! `:S&NKϮ;[π6*v3ft# $X3y~FyW/KP^@SxPpVWQ1mLgEHZ?Jyǭq㦱uYof@ՠHnю( fdiEc`tEkq h_DԁY{.Fxbcuz#CV;$]SքP.!^XPMBt&YBf2n"4W?0v¡9eqQR2IOUnMQ Ye.Ji76E%8eLgN?MDu2A=d"P& OZ?eVW)' &/_!WBB%:$ǡ1x"w;+[w?]_V*<,ZZCsIF2sq#|d|z\ P^:Z2vb2ajqjsr@GdO^sAEA.֫7P0! P[4Bj]Y{k;⁅bHUG*n#Y#lJNS@5QV!Hi3-Ḽ*ovwq4 g7$ b'+" ;Xg#;@@' ghH8@>?}Ʃg:̡v34paCHAғG0R7jJk?ڿ\igx"(߰dKrj8=5SFdIg@?rs=hUdsZ3HQJLwp(ae'å.oMѨ lE-p1M{a/ ?_ P&! 7P[͎ B38PZו+*z<isV2HDɀ@(} ax, %Șt[)Fn3RUyuo=>~̀M@NP.!uQX7" ɡQ N}yT⒅Yj~{]χ iӽ`'EFG8aG:]o]~ӏ4F6<3Ԉ|Eb7ٗ73U#UlKM IC4t]pLǭSq&0*^&⟷.|6Zi_׬mۘi(4(+S#TT, N$КNb^MߞRYj~_tkV"Բ^K[Iօ4!AJz{WϮ`G;13N\u u޷z˙3IWjﻪ3~$^^j#4"p%hDde7'wʁB)Bb@Zz,$ه5vg?k8x%WQdPȰ'K.# 'xpc^{ZiTaVkIR7snUu/yRJSNÛ[G"<5~߯G:ޮ|}}><6$ܿ4h"$QEU.X'`nwI?eIs𣌯a7V0!֓_c6+ey`F2 pTw^Ȁ7+>'`hQH!Cž]Ng FU2CIQM'"&"1~XGR}= Ew4JvC7Np԰e)~ۋeYzaTP(!{ ftX`LӁ B!t"= i//2jek_HRTj+E$CШ eY_xv!&nϴ4WקX/RPȖPU NJXq` ^F\(K8˙᫫}U^@} '88 x8_-K>S,т#|>ätK*G>mA Q"hxs4~ ;%qgѯMLt |X)Kgk4<~;gkQP+! ߘ=YZ\5AHCZZ^@^[Z7#P+j&ZFV[7<rUXw_WV,v1&O+根F؆ 6;<;-Zǹo.nQɟ<53;Kuܠ>cfY:eE0:{2m^=@u*}x<3"b_r~_6e˟uZF$ݣ G++(UzO^e`{ % c6׿*ْ&+ 2N4)P,!w`V] #EPtfjc'o2^jSo@ꕹpq#yL?S|2϶:UzCt,c+b}!Hm@&|ޖ:B0&-̀W l5qhHf- BAЙ]c.q/5SׯߎO-#ȷ3as EhڄIAW3ݏܵɆ޿[R\rH H/H @y+NJy8=>GqqVWb:˕]ΤćvW:s -5q(P,! GUS`4F"" l^q*]=)K@əOƍA95) rnM;ń1Hr5BIvHvljDy:ւw&J*kem2Jp[AN|gWHbY D#BBЉ> N~7wE^\Gҿ c>cl`9͗J{( F`u0# munjQGr}T*giI^[GmTKtZGGw1ܽݪ:S`RTR~?BC3J,*E@JLP.?! ϿUY& KTB} {ԆZjyVˮ?_ uyN]\Z̝Rʜs6x@8E5XeD}B4e QCI'y$}"B`6Nr! Tpy"hP\c rj&qsWE,Yhܪt-wA"V/.hjD6GY3W#%ˡ^Ԅc|^/*vuzJ@}9P 9HЦ(x, xy< i#uz@O&"N$ҵS3|Z8` a+Peb& zǨP/! UX51eךTTJTqvw/W+Snh^KJ=| =0Vl~U%b'2Ї\.y/V$&]z>_p bV|:qvs3w~37,bxwߠݍ}g?oRW-elw#y/U 4&*}TJT:V?pB+Q6hpA7 -0*Pid^₮qeLgvUpv|\5oytx"V3Sd023K7|P1!R\Ns* hk?i%pDV?`,a:kKH|˨=y܃Ҍ-<@r^2)z#R9& dQfB>MD!'y^Qx^|8zQM(4iUi P^p/mnD6 r/R}0XG Z5#XEgVI֒S8&x{"V?{)4e(Ш&dR/0*9\ ®@"5D80B-KԢl#"p !C%uprT %nX'zL@v^NhP[01 *}U% KG`;=hSQP0!|SZE12D:`P[ZpqZ!(?8aU>3 멶FYjz+hqrb, 鯎@^J@tU0lAa:H֕Q8[~?*)YnF2|$s^J\]wwz8ųߗk{En24aܶuv`/ĝch?/q]= WvԦp,+YYaTLG1;SWa @JHfi28}HP0! sT] &{RT]Lӧ^O [Bv4oD@s2)#\TWnRCQh*:|0tp02<2hSoyR} K-'{_sI4z`TJNP'ж5(غl#H`,<~kћPp~Ԏ}LxAg dn|ڪJFnc3ruTFgXfo?߹TA뛳tv^\{<ńU:ܦ_NP/! KlR\Ɲ Kw]#SvKU/Su{?\I|Jː)J?pӎ\֝lwnc`K FEF oe>g񴕢 =rSU…Ѻcڞ@ wu3}T <6$}_р@#^ʹ` KtTfp"- q\īy)ju1(@)H~&(`4iql2p&h \㮦ÿ(a{_UmbM䛎* se+VZ1H 4\RP}2*` U̙< rQ?R/uUc'P/!~Pܜ!Dq %T]U\Og>z, oΠ T%Sg\ր"ZzW"Dg_B{>yZ-*^<_:/nNk ЋFWEOYWp Ԡ ^ޅobPL^5 UB z0( N@ ]?>>rydg$+\LiЉ> _,檫q{_;_PNy٣.)u4;@o_^8lg;A9O224{'3㸾}:dʛIǿ5*B y0oNƀ)BF8P-!aRYˡLz&~7lfWU8U\ӻ?y1@*ۏA />±f//VN\LQUwRS hm^xKouی6gboկI/ŎtmԲN)= {krt»A{+sM߈;H PPwi-v#Uw~&.Z2_i_`@? }JGI.9%+(~>݄+ ňt>cI,ML5D EUg2+@4yIB`[}TSHP0!}Pܥ'xX=fS"?`~{V$(kiZ$! Y Fi~R7ab3\cV(S1S()Q~W}7fXc>O>#ؼq]vvw*WCQˆ% ]P㧳6x"r|]3SFwA_Q:Jwia JOWJ'E*;|3~دIW7uO )MGXv_VYo sJtpG?ݚ~XV4R r0{kHGןWc!6 \Qp7`q3 x6|hN#P/! ]NQ]ܿp: mG[ 4= ꩀ]Q@Q @M㚧z(1;bu g&WV.iouoiMS.sZ'? wwdq)켵RB9s* #+ܡ_'VɔMC=maNn/2#. #C*k _HSVam]l@(+e`X>P-_!NQ[ΰ8dis_ꁥf /xKFJN]U= [Vkf&2]"]p0ND|찵gGYog7_;*xE'jWꀅ4IMab NGAэpw!tw*.k;z< 5ê]P'O~~OiU`(|#i 2ʡY @P4 +KCx|fdT\\DJa  &}?/˕T%_v]sIREsBiT2`G}s50eyLCcXo dtU^$+cY%eLtw?c@W0-1)uP/_!N+TiU>eЙtF[VS}Q7Ly : % IPpF,_dZI 3 /ƫ(ɼPbh\_R9sϯ&cc`VvF1B^qY9tX;,R@fƚ8OpҸXoa,U&ǡD:DnIUEK)*giqKS,zUkcr,RMDpzq?32W3`5g2-mYn*Auۘ)):7S3Yw]/} c) %D#AIv&t,P1! ؠXXe&F3Dz'U϶Gs~k?Z_v_eZpyސ́Fc[e?#tM}HBY{nN2>*6nD0N:nUy01["20zriD4$#)lL+u&G!h_ZU}~熦&k#R}q> t +b[+@E6訇JV\ G)-,QMRh T\I W2D$^.\Ϋ:\Rm߻@*}JCc-F-M7w#+0@. xI+E@p:e.b=xhP/!qXSPE5ki7%ex\~ޯ]NOu5%.. k 6Ԉ} cjEN\y%# Qlએ7_G+YKڷ %'{-0&{o2ICWkv|qq}xkv` e Hŷ/EXB,4""Ј&=y:rZy+_Uy?YG|E.nzNƉG'yvnnN b,w2v[X'|5$8xk;L_&ϰm\K@ T2{P1?!!^pWU]Fm2uD3\޻֯_ٟ|O7qҠW:$܏HmZlDU^`Tˆ oە/v3RCHAq8ji>#1t0 K2l.4]" t:0;O\{gcK[*~BP@*(ң?<,gbBPEb,TJt QhLnWB7u_VLKc-[)uLo_]ŮaQJ0{p+H94VXx:ZޭրW=]ZlP)Tu#$r钌ݰcSeedT\&MU2Uuxo5@mVQRl`sa WLE*Sbk8/YTʒ; WD/ '*ŀ_ 0P-!PlUS,s3.o[RTd}d͟?ynW ԬcmiϠ\QU#>{Hsx 5Wwx\g"Ip(Ƒ ?$ jse((t'n!L)W7J@=E`Ebr@g9w3 #1 T/e)xNaI)f檟abn_WqgFj㮸~Q6";S$U&OEAXVP w| !qɾ zYWȢP<֨mKE43Eob*4v$n-Ă˓A_P[84}褹~s0^ |fyiYzP2! [V١(2L}z׊]{W=||ywb\p &*~KKcKX|6Nax"*+/va%_MtPcp]m>xjT'I  s7aI Ϳ鱿@yVbpU&U3e:48M~%[w.ny5QU^>Zu~iw$ i:*<5 KX7D fʚVԼ jW|-8kPNp[{~6,_z#Ёt1 '9|6qLtQ<`X| @օ ?8P+!OSQ\Xi5/qV/Wy~ǎy8nJ>{Q-Q˩4C9!algҭ!xwBvB:)[ToARMms^klCG\B )K @I]`,H0iH pO>9;ׂ3b/O=jBjf !zIgGc&y.j篞?OՀ`V,J^h`86h"_ ,s!_0[{&l';cXv̩rS_7t@@xK78WSZmUjβ?$uAuҦBa;6N}LF/-I8zϷB߂'m}B 0. šdߍ9~oߒr)|ȓ㢦a 1{PXJm YGO 941Oݞİ(`bo^D^8`EP.!+_vUƴL%N)H[:׷妫Orl9meu$# +L&3Dأj8`H7@a^xx4CN@_ACG u9^U#B_ 'ﰁ,aN{nadKkWzֵp095@P%A[&SmUfB#/K])$}QÖq_P $ $0C yH)!nb b{J_3}a+YLCaC&;bSxVFРН?O9@D#k?^@/OPJ?!L6 q+M՘>Ϫ?=.iPjɣN1G=6w䄕y*cGaM &C!U!0-5,~b&>9)޲>~`奰|0ӭM guhq"J:O10K 94^g$ |3W(Vy99e({ >$Rdb4 rdi_g'`(HVJ)Ş|tB吊b[-63rLL"ʛI24l-1gٽpGqp<5ڄ}:wd?Wsx[tO޵s~q^EA¡Ȩۗ@4*CbhX JPRǿ9aw3@'?oZ.E-i b'fnVDʩSjV79ÿ`bB%P2:vk (Oq 4d%a E;!196l0.Bķ?>Tđ ퟫ!ݍGx6~Ah~PޝH\H%P,!{¹@Wh Fe*rU]ҵNsǗ__!J$NǠF nJ0DQRxdOΪ{ѢL˱U:"p n04  pv:9Z[^=(fDlCE-^*/8JxG(@ E-jeXwKe2cmhQ0 1r; =P~7m+^XжP,IHvWm&e}9ubɌ~+4ghzhvrNP0! 0@VQ,W B!Рt"DɾyMg t/ xz4"K%A X)A#34WJ90Z>233.n7Tqn[V'ij;±UL^Q خM y[<iY,1egEpAG2?Ήc ĚGS}{w3es/{~=s{C6ݘI(\@%t!DCF$ix͡T" ;=V-ִ&D,d8` oLt'%E372d|l_OU//Uoȭתۗ xAR-EP.!Uؐ56K2hLZ jS3-\nS>?:t֜MKL`$N/?gFNzw5[a Gb>`bL=_\uQ`oZ⺿gRekhJs!7rDs 1\P&+S{: -3sw-ӼV"PAKѻֲ+⮵7RۏOdxZݩ'rE|Kcܸ{{KUF0< Uqv6hr:CALX@)P.! ;UZ!}ѡ!*d\T/7]@nF^z2N^0) P3FmS1oR%W@T\ɓU9pSs /GJF@~Ie2^d&q b`9`֙0D)8/ՓeCۄ!q[ +='nb$%ؒv+@WP,! SXCnG{ N38犒S|sp_Rpq@0Kz=|U5@DѰ"BѨk&2 g& }R ,)wzmPjф,cM(ҨK>ӭ(I:9{ [vq-4;neQԨeM~#>- %T򧅋Mc&=D&Јt> U$朗S4WjqǴ>8wqrRPWJ`Q9ƜP $x( , n+Z0Vr@npTtB}C,&`0 !T7P/!+ QD$нZ˫JRd?L2;X0 uZԄYm|6}٪Uĵp3nȷ*BYږUV3 hMQV&__ʒ礹>˷ϑT\=a+N 85Nt1ׇ\y@:Hopbt8S[COT;iOpdCPF!L sf<٬H\ٮswZߴ,ퟤO7k~>hoʋy`"eU4ؾ sNHvaF<:ttJ>ګe B-9Ѝ.qJOx`N"119!6\Emų%0k)_43$J Q{0^d` 2Th@C9U bt/[޾ebx_F~~=3 MiAr-,aqCQ m><tgM4͇^G6\0(Жԥ\|A\7O eD'CnIB`LB]J5w|)nC25s6_^ X! R# 脚%W]׷>w^.}բ_A_[ESZ .4IlhAlMd1)7;MTT:""\44`M-zuK;^uER^w6'>;P`*`SA_P3Lavc57.107.100B6$!,BeЈt$ ]f֫mfSr%-SλMŸ: I1g4&!E"uCAEGbg3lu 8Yib*Mg:EF`A!dREd^0L |F /Y 2p55h@[/3Z\iD3а5ōy D.\es^|rTî*qXv*\P|sTC}"k&_\Lm$W$+SV<0ۅ>]fa =$/FBѸ䣻lb@RWbFFQU0L49`Ԥ00 ǒV>G˼P.!TC@V] [U<*T-6л;vI/A;52%l@Ee󂩀aT{ X0RuMUgٵӝr YJ*TM>*zܩ325L5b)d*QhÜOޖ r&b9843x4Z"3B(|"Ze늹U3iomᾷ5BJXwL 0?^J^|# [;T중#Zs6mC\2lY(-MkO#m$^Ts_o`M&IG&B"J;L=8!|P/?!= VZB5hzx!+Lyo+Լ~ߏڍSUuJPWu p Cs"/M,mYr}E1fjm8Q^+Z:DOƴ ~X9 U|4v [tX'N.x`J]&Йt&m+LUi(')S\npThUA8ю@xR|F|28_B &bɺ:$*]>tݪҊ:"2̑:G:5vkDB3a)XZ\xJ~*hqv=[ӏj _fPdъ5b Ch̚C/5]sbdnǹUhDXF\`{N`$B\Q$L $!Lm+bl "Orv N&tOeC!ˉp2ch\ZBA0JxƯw@P-! (U[YFMBeРY[<S|nIO>O9y?hJ~)3;[B$h%*m >ZltF7mO?Pw( kEfJ_#tGx 3}ʼqkVZG^M-Mf `%}e0~g)8Ge%ĢhǺrUXl.MxH^[<$-IGq+7}n *-HG325 #( vDƜ."'C3FVǭ:x( ~SxH;֕]P(! Ejo9&IeQulrnL͸^(tPf j ќ sieg%{Ɔ9@$NdP)9P=ieM %Z[ orF5SZ#)Yεjlw}{W+O P8Wh Ogoɩ'PF!L?ߪ`H+P56k6kǿu\u} 呂@:Z{QkgôzZflZw}10D |;^BӮ$v &M˔qSdǑƇ~<+M%Ƥ=#-?iҗ'm_p;HKc5F 1VDZ-9.D30pwQ9;qș?N;7rQ/4Ɋ#U/x/nK PjZ*ƂmUgEFa~r6'srItҤj^KOƥ!5cLOhZ!CѯִLZE;nk|_?ƀ0]=4[,@AAmo}%r"!T@zA@PP+!TYF)BeКHIU<5&qWo ֺ@%񧈩(8v 2c3fcqmfRw̍[|t6rϥirg̎3}ܗ4gD 8^k\rs4c_m'cO)DeҌ.tTD􈹱SX!:sy)W^SfbIxS=t*Ey@&o>  OѺ'PYé+!k\"lN7S/Og-KpiVCPM*-P+! SDBaЛ4'TΪے/&Ȏw8u71;YVIK.9as8TNW>@7&t3=0{f&*T?#~ ygEI~ lJؕƳX[m/QA_َ#驻H>ڼ|ca]`Wȕ%ΖFz-T)B+UwU]H"KwN;MX8% ɷnV@S8pQ6ǔpkǙD4J;-UX*!^.-ҽtqv8+̮;ODU \넦hJ8P,!ѫSXU W%pqWTlAv!Heneo~:JA]U)Fz _iNurVw@)t$O}[gJT+}v@f!U9`(a%e:Iz.V;/+5lC*W*/l* d.l,Zk@WVLNr cK"1kbԄki{{xȍEOWWTl(3)-:ʘ7l-^v%15C b@3^P=uv]y'ۼZ`'ΛYnwGfׂyq;Iz+^xP.?!SYi49_Zd&ҿB PJ9: :4 3%g&IK~P\yH/0hFG)g6Ƌ礟";1MB.onEwu ]z[O _3YV$j?tʺLJOCWJfw,'89m7]*fY2 *+J-*\4]zY7s5$TޕLnp ;!^@# H pKI !fܩԒi \".^Z $\tX7kP)ȍ1P-!iR[2)'>RoʺT^?PhǨ|{OT:\ꙏuQJÙ !̐p$:G #EͲ&]ZX9}.78|.ph^v1DyҚ2dz˼SR1HX@B8T7jQfFox:y&CǞ>@\'8k[!b 1|q 4Wy\omf^,v SEZ^ZUP1!t)֟dީJ'Y*zLlY֡ުng\uYᳵ?J9^'Ka3@T p~%@B I὆y-:Lzrȩ' Q.,2<{,/qՍggq0\ ~y׏ Jܦ+o/~*:\g-&N7YRJQ2BS񬒦q9:*F}|xJ18QvǛEpdU~VӳئYeFvOMR f0i!)DvԸDhS%ZAMa2_ Nro9jOq {QS}EP4! R(:BhЈ$$\w|dҼ?q?Qwx-ʶ/~dMDnm8 \J2<sxů@6ΗzSOk`?R P/?!TYj*3fG+㙕5dTW~3+foG^ ;MPl}*:>F D]SfWֹ5.X(XGZyU2nj=d p0SZ0Y!t;)C8/9p=.*D/]·B\'kj#nWW3*u^I^W;_OPYd/Aa6w!<"ϰ,J" 'fhYD*΋ -ZޜhKbPt@\}.N>{IR8P.! >TL3̘\bUܖ7_5YҪж1ˑuLO߳Or/]zkZ6S[j1rQuRie)}Gj yPt ɼ֘Bwtڡd3 @)<@s{\G͞'i:t~-{X2:=cnbG9RqTfu<{^U8q_Vt9nޕ9i.MP"<+uOm9tHL^(8;,MMdn$=o1'zjMb@{,'1pJJ N jP-! _S\ 3ߒrsʩ㊬ 6{CH$/}6rL%tf5ю~P-7ط'#2fΡz, xzI`깼ܸiI # ΓS5-v=jSS%͵vY:sWy_& Paj\<글&#MT:cFspđL2qT*8οf\\m阍hڠ豌ƓEx])??4}aUԸLۘEJtψe!rt**,+(xN"pC<秥>P/?!+ S\`( ĆUS}&*-ε]|?kZ?jC{ΚJl(n1G- f8g.e$ #5v 5!h5&B!F,l-֣]=g€9۽<:H^x 6zWhx܆@2k/R`}7m=WX%h~cL<=;֓)4 U1!P3 J(~twZ>=/6|Y/@2zyʵR_Eo<@)$]etnI$F7.EݚvOp( @m5@}X\‹c6lكPH!L Yf<ۊ6k.e񿋿L֠?u 5W|%ޤNznz|~*ڦy!SjdU#zF}) NA3H L?OH@0p-`G.U'g|l@ԭ"sCfUl!E߿>?ƍˏ$x9c"u|79Miì=>ɴ~?ȵA)Zh%Z18RwO; ?Y%̤η}F.#p,ʛ͍LNߢ^ct"5R\ٮs._]}M@~{K}I~}y=XAG( 0y$ZX6gO%`!~]uirx y1g&XrRpw^?: XunT0@3hi8,Y3;@$vJL5gO>}`B̺vba97oa--V+50wA#.Y͖ڽ'KTR *+>N6>3y~P/!{ I Wđ )BfЈt$ˋɪm;=g? мJ&wSB %378+c`8ߡU 8 Oz ʻy'i_ BWfLKd3Ĩȉ#9~opƯndƾϯ/ەyIn{9v T0F=D1z6CsY/~|iS>d>g߀̹]FA zz,kmzR=b]_yՖ 3shM]It*y#anU2X]F < _دf s pP*!LWT6!hHZ*J[U-ZyuOܸOtJSܺrDVs;c mn_8?o Tv]> uqtjV8XΤ2~8 -5HÿQx( di{~pֶnx R_RsJU3L\SXkDb(l6 6o74 5saKиQsy+P,! V t!BC2&q/5JLTMr?P5.EcuPwɖUr~ʤ6ă Rux_K{aC%E~r~.6ѷ:4}:hɷ޿+N&XIҺW/g*t;ދ9Y}HҺQ0,':Ju؀q/M}}EhQ/*}PRS8\8  o^ywJ j|' SWDJz2"9V"|i'6'rg)}\\I8juv~ma܋Y oDP1! i}~S`nf&dК9Vnȩo|8|_7$T sc{1m9E}FU9k؈THA~t%bp]$˔٩\\ܛjY)Ѯ rn9 %tSʀQ<}e{ziVRj3K&kzRTJ߶5? n턱 mv#׽qN" ٘ <PL !nniz%Zw_8O7~CǚmU3S/Q-_V=NO.!Cee(U.GuA/eAt7]AP3! ISYf CqO5֚|?ڬw] CX*2pFzpEhXܠ-$@#{*[R"#۱Nױ[u`/}N^ZHʭz6x\!d^#k+XxeD=)>K9t%Ңtt7N:TR%JkM5C 9uRoP$.}hԪᔫ)r8U/F ?><8:y)ΧA}^J]\) MZst. !xS8BBa1H$nAA!2Sx*m-[Z(\ΪF-[:䴃K8cv7:@ }f%0&֫ڹ]fS.TK?x~CqDxެ(,CށiU_4S'w)(s8Ilus12V`?=B䤧g%zB3%sGYi/dAiU-՛cˀaJ;Qn/.PFvϸP+! !|T[XEf͡ Ye<{/$qشS4 f39 R;B't~YE(*S,sE I1GZ,p9B3^Qqs;_ ܪELhɅNлiv cAq\h$:H+['zOs$Hd^WF֔n UV."סgx;R}jMGO3za'tv&>u k:G[+Ʒ632 u<e?@^@DU~_5Yr0 m@D2Q 7rEa3bP,!%vQةp(yw¸g2Mnw.t? \Q.:0K1I;0N@I@OF6tTŜE9^',D$ n-S,17Coa=ƒЇOnϡO,S %Jeg{}z?:i A3ޠR,9AVn{c_F[jNgFbCd-C^UcnYrIJڽJB!@F NN։| 쯮tRpYBY0ɹ\Ea`T/C(ߩQ*),/sX) @0h P,!fQ`rB"Ј6*^TJ55%_orUt~n%2"IysR@65,o" %B;bA+X9qfO>ؾ1͔kb{E (+^!@4m+rub)ma@ >hU6BtPC~su}ܽꤢT/}~/a4𯊆p&Tќx?p Z$ )e. |,ɺ堧)\HL3AU8Wk k?A2b)?M$cY/Xt\beIt*D|m.m63pP-_!MKavz=ʼZpz<1PO;VP.! fOT6*^sW^Jik4\\Ovݭy5rGűq'eg.LK$gi:<1:yǁX`__}/?HkA4cu .AxAkeo;]V =:+))EhÑ $,ʊ\@[gFJDMĄTӊXeI)1'q'r/@׽]'Gi;jHF'Q}?%BvGHmhʞN^WG] ޿;r1bP)!L0 RR:PZ|^Vu댹%V>juRgUy60Pryݎ!$@nE~w-wp8،y@[<{^Kw{3P0 %6B8]>~ڬc ~i:©A!@AbB!RoZβשYUy\긩~5UUU>7" & F&Ej~rgm JR~q-//꿲[<'KELz?˦?alϏlzdP3!S,06T!Bnuή실&jikr80~݀x I}(T-ɒenR4Y8#D9dxG K387Wk*Eci"-"WïFj1ih#t+rb]4b$IE+3.^ TK: MV{e߉ug*QP;^XWvu/wGj` Oo&]T"ԆG5t4浹?+FCWt˖()<{E6/Ci_|":L%[PjɁ5wۜ؊\wNdb/fǞ0 0C۩`pP3_!)?iФBmF3\RU~u] Ԭ CC:xM鄳ͣ4=ak[Ɇt5ѾFE,~w׵q؞ߟQXL a*|MLckDˍcXB;G!qd Bj"q Ih(!UYn0@.OS@PAmǙCdiJDxey0Sy`n]*-9biZ䄘Ŗ(ӑhP5!{WXeDա!?~ˎ9\nLzBdiqG @]߂Ǣ <%= .0MAv#}Q;ـr^uv)Ej 6~)Y)ڜ e\#<G>|;P^gr3D@\wQ<>T4 zQַ}6suļSU(3V\;tϺ7 PKOw%" T8M/sq7+9lj]q#L3yl=oTlf!,M0TD?0!гZ'Ek(EB̽Z۩#˛6 XP\SyVZ٭Ȉc*&T V0nFw8OpFЗeb2TVZ4-SWK4/MP1!LwwQhwmx]I%2EVz學M:;#/7l:| xJSE$AѤ&3yD! u[j"(^"gb)jF ܤHF1睽1pwh0ɍk(KWNz*JC [)9=:g&5=/<=maߠVᱥYZEV*8E q&Ǟ̦\B&^w^~NZe-t|K"K Gr;HBKHtt # 7u9~g};j }WYj{މH4U@3vOݚ+U,ӦK4#(׀[gd=mϏxІܑcP/! Q[S3Zks/^8-U?ڄ:-#+JRQCut-ԽFfZ׽\Xu[98i),W_=ΜTF"jm_j7jفՏaw"?R_n{+CYFMA0/w_mw+zG6&^Q .} sn b/K7pdju3`Qo_=%TuU{>?MZS8©"b~k0-|(3S0QO&%A@=-`p D4$8g2E܍JPA!'|fƕ;˥4/VjwHQHXZr OفKsv6-jάP7!SWBC_zIS+U%UOkg0p|ʅqAZW爹Srx[6磫u et6K;bmeRp.#c^or7/iM=~p5);bgzz^}\]Rh|k?[/ P1~i͕(Ju?OO=X.:"/EJli u?bhyAh]vQ$_S-'}fuw?_dG0\M-lAiP3!Ͽ?hU\g|DzV%^??_y _ed۩ӵzdjR VcEWksY<.@9ѳnB\KѸ{k`3.^U~j+ܕXD@CEmޞHFe۸<"igꗏRzvfNک;GLr*4YBiՕ&Znussʥ=ɆbCBp @|@p!#5݆- ݵz錦9;ݖZ_`s  K_\R USJ .M>ՖrjjxOaxP4!ySi*1+ւ> Us}}~~+o;@ePG#}"4撴{CI'Z݀܂1 e\WeIA`hdw&EVIaߍ'm^@kc29 yA *7qv> =J n*f4aXj81ŻTd#3f|'WXdR2W~NeNw-0a k=d_%fӒDj9O+6P :Q2)JnnNQ u L铋Z߇YM:x N]Ǿ11'RwO`P*-H @KV6eP2!  Sj3,C<뜗y#Y}jkquM&dm p4|ߝD9"e;D0NH%Bwv#]"%z.n>YpK=FV}.p\_$fg'9xߞ{P:P[G^T@9Bx@W^YNp} @C l8xwIaSr"C! ύw+T+u}?Ȕ({ԅrIֽ.RCHro[I0c_7: ϳ=2ݵ6v?+5teYIޣ:ym^pdy~[׌6WOe{-'`IӢ5ǀP1!+H0TتNju%y^>\}\n.fCꦑb>NXQo,kXWQty2bp俿Gւ\OKEcӜ k"Ȍîz4ε;>:7G ܮItln.1u]@`Ս-J6@2uOp9n7weħlAԜWЧR^ު&?`Ws"6 ذ1IsIPzJ'R@ &{Iv`y'p/_H|^NAaܼIeU k>D _kŸO<5VfrXbp'`?AItm2#P0!ŏSHTUF񬿵N ^՞~*N9 `JكϞ]ЩAq-CG[,.-E1ɠË [fQBtZY;(ax貸/5 מY . eêUEbq8X^e9(Br=xǓZBzpyϨry<{f k|l``ASP=cv2I֫ QQ~HFo]+`i Ȗ#u'rPK;03P4txV5VV}~~>}Jj#nHvu\ap<1mto@{^k|XkVV,P Q:!*T72+WXʶ_)9'o,+EȴMc'(nu&2?j2sWNؾ-}}Ч|KzNB?W 2 GiO5_~#ۇP< tJ M I]1*g:ahor{]5ڶM4H?@L?[*%$8l ijUh*(ZDqj$&{a8b;s4Tz!Ç*%y(3Ff'̷͡gt ;n@W ҦuM -ɶsm^fo2_?qMkx@^iL y#dh0%N>f> J%xտ;/B[;~,E1W:ݷYFqYn-F1_֒2 &B"ЈtcxJI*LYI_~^NhBZ`:Ea|dj3ScZ,2MosJbKbR  :%M5n0 ",& @[En_2DUK5Ub{}O?{w]ɖ 7d]8Cfb{|Zchr#OILINnS$drsq6Mο/(40gtocKhfT;-wnCKUpl9'mPV\g DZEfu7%%%uo9/S!4~X@:DEHEcXC]]dߟ_[*Iw'|J늟?j fbОոNpɒ.Š ֈMVM]Z?T 5#U4»vEF*jd6\2;"%h+OP._!QT[`#R (VZ_ݥ$?-@drw˭ d@E G5;B?D3A,t+2 nyxe<%\`hun*Y\YT DګJyS%"{` 6Kjz%) p^'})ˮz*ITs]Z~@w:p Ab~RNVatFy~IbU8Q"͢fzk./TkW{2Xo|%R^&&sٵi\R, YYRhۧ^1V alpP.!ǿR\&4~̺Ze[Uo7:  7Y*|dFԕl1`˅C$߈LFhغy_]vp e/OnpmHa0M}!xOtԂp y^l+QݍO~e ) a%W)wR!muCz{\q|̺Ze[Uo7:} *K^[1󤉖cf[ ?"`c(S$_Px8& oRvd<,@-N-G[rpP/!M`CJ~USwb>?ڄcaO%_1hq jsb.@e|`#qQ 2a:_c:r/}&}W "Yr/N=f5ЪH*p\.B2@ HJȕ\tF&dj޼9`NS4FPbڥJ|Swb>y‡7E{CNG$RD?^ G|PX 蒑kELB^'wr5S5 ۵NwY}nEYԳ `1ns"B*eZIJ2m\&B#_SJ +=8ZP$EEN-+3u|yuI!jmp\zqIx,nVX`354*>G+.Szw/qHD}]+B#$%N֓rVd]l֮PW@ULj+uVo 9 O<v@oux<|;{An9:XcG1pP< Y"$3S2ה\erWկ5ZМ8\ѮvE#ɊOGê8 y}]"yZp=VhS)z}{/f Gx,F%&-+47xE? ,lG WQ+㧤i 6=(MDW7 cW :ZlQ} LE#.6fef;}<8ޫx>uuUdBJǼwdo@rd`ҐdX<cjC=nC[,myWUR |=d#&ճ rc4|@@]DžK'I@똉}bQ)>9@) 󉞷HfnjU^cy;kL( pc[1k`zP|d0(__jWƱCpP. +D t"-l^^\UQ8ʔJhc %-Im%17ȡwhp.&BwST/f{*<q7M]mH3܏q1!s8><^="%ۀ7qcGm'?@x{Bo=*y x6)@=>,Itbssz9)i}M$*3 }2dEYՄXwdNZrd&a`%SKrik*˧\`lR gpŢY8"9Nc ЛSh`4k A:3.GWn]Mn\Z??zn[(Gƌ$.a¥~B _1F "Ĕ(,njx!&PKnAsjM}VؚIIH*-6~6EDe!u";0%KK 5 Cbq}}@3C>iP-!y}TRJv2hD'խuHZS֤ל$$gFt42)(M$1NTSg`M1y=RgNObZ)Fw mcYڭ#qCdwmñSz}>! L="!,+0T9e" BBhWY3^ύk'|_:ed;~ҿo'﷔WpW .Fhl7'}$poAWEh]LTeV2}0:-d _w S}u샗&Õ wN;К_xŀ@P,!F?UYd.EhƷ}wJUM;?[R. _b" mbQajB^'X.Ԡhuv&m5ѻܮYn7O N]xXPYZ2"Mþ_/;Ɵ;e#Z+1#h2xJ`y<‘O[PCD:7F5Iy7>ڟ~a46j/(d5Xl=e_>tt!ƾ=B4Аhu8wƪ0Ҏ۝;]+O˕NrBK30),')+aWuy\ lX\P+!CwRZtF"#BBЙt^ՔoUPݭRo#j[drjZV\ GIҼb {)N) $ʷoL&~ p{r[LFkQESUq:Ts5qOk>]碰9& E;B;x~ uҧIi4*J[/_ocuC8޿# c/+4V^CsDN9X {d:s}fuh 0\UJ-f@逼X@vPRr&Wq@10ftāp<݌:{;{@y@P+_!+ @sRҙn^G!h]Ug<%.jwk|?ۚϳ堰P`Kxr)" [ʻ඄ "Dcm`_T\LEJHiA.ޒBN\\,Ylb)F!D/Yƅ[mW }OL@ )I9bb1!.mgYC,i3 +6qGv?$|`jDE@6l$ÍsEy1W<:6@&pP+_!{ITQz; BcpzCoU;wf۹JUֿ~o"ʪ Z ?Lw#sGz i$s?׎u}<>sVS#Sk\Lho][*hD Gw'/ˆCa AyJR:!Mh[ԫUr=Z>9ҿ D^w:~qz.ppA}nX3V8 +e1@\]OeA\7Ax[HnS y?OP-!kR ] BdR=VnWỊc??y9 я V>Dx@Pj,XU|t < Vb f ȭ$o?Eu'p@\VLd_-&IW\!ھ0 ף9C8xs@MDKLϡ0t&G Ţx3dI2]_&W_(<lJz0™4 呧^(>A i5(’)ߕ8eﴠۓl bx0>T1\ Om"/V[6ke؃`ͺpP-!HR E#Ј"=DW|&U[?XDX׳m;wTLo_ݩ_szˁ?Je,SzGvJ5\ͭNz7`.+a<:B! #`*@T(H=\/wп1GyHOpOr}m$OP0!WP[!.}BbЈ"7J[gYKU5?_'u?t^ jw^r $9‚aCrۢ末:&\bN \4dA% Oa͠eiff&vLa|8`'FXOx,k@;N=:}J> ƴ+\Re" ǡ|o5:|\ߜq=[jWjNkS;x~Ǩ@SGRxi p"~ '$c MG 2=, >oTV1"Uk gLsgCos;qx* O^P/!P B#.q]xԺ^/.O>>?|Iď|lcc&0<A8p7)9(_M8\D/H,/ݥpAd^84JlU 3Щ415`TesʀH+W97G4:G@(ܾfqhn7ZKq.˭g??˟@=` I| R#MBifu93 uǗAf4!lrB TJ gPۢvSqw|M>VOP/_!P B$!1DRszR5tWg4?wff +)"긟w) G/b׼ACĮ[%J7.n"LbP@`(6w{`>16)[2n;pE蠹m ߢuʖ ~zIsB]U]%oS}da.- B&h}uk*yO@Շvgnj1S2J)K<0;FlSɥ\tj]\k8F`충H S. @_tV/`Z~}?L|՞P-!~o xP[]BaЈ:-FiĞS.?WV,|yy ; D#r<ʟ?l& I-&i2RᕵB MeW13"?Y~l UPJ?('.ICzt`K,SPqӕF(V "8b'ǡ|L#ּIPպMO'@w@bUNx-X٪/B(˖:M[@.&GP76NӀm&/ rq</Kp+ oB0l`:nG̎mL(G/ P1!O[`m !H$sNz爙J"8Ԍx:  k ~R]Ƙ@,`J}P"_!HVNC脌\*bHU\ĿMt_l#ArUN?h[]@PPV W2V! Ǡӫ=qZ+:[(6>U)/5wÄp ۣEJ~ EZCM!xc=-ZvhDzE>6.&q)Vt'8獚acx E%oV]~v|8ZTpߠdjj אn@s.(V\9"bPP1!K RY0DE2;)I2huIt4^[ Ԙ)+}ibņ&zSPH}n$0]'M+`C6cxh#>IƭOل%#2:,9GX9^k |Iý/,q&b߹"?$Dhk +F/~ڹ@ƁA 1!?Ntw.GY't=KvQۏ? -1B"s~%JhuItҀ2=.Фԡ-:a<vpܮXWw CE5"&JVP27BqW,h>NXe`تlwr0  38øqÆ`] j'h3+j3BeUx',a[kQ2Ɓu@d~6a`Q09vI%4m nzr "/ \]IZ]s??W= )dLcڵT:V|;6%ྴIֵ?`Y9I|iF@#vԫeY|%rA x{*칀}|"˫P0!+ Q\! _o=R|{Tλ_7h§ez?|)D,K ođ_ )[i(1]KmSy\~A.yj9X'@9i~LXs5@aksEΧ ќ7^K˄N- v߸rr67\TVDgP^'9|{XL\{*JK# ;~U-rw)q2D5 n1ΘFnj]`,y@z{GGE* 'zh`jg7"zuuld` `8 O` ֵJPC!Lƴ@RQD/H1SYُϞ^?͜+*>w溩iWp'S]9c̕ST|@ܞC.i&^&y˲w"[؂}j67:t7dm󻙌=m{yZf΁c.}r̊Q5^2*ё!۬}rzәvmp&?!Ȁ+ON-!U(s<:} 9ΟLWo5v]|g8[j7{ojs=AIzc"ܸ.GA o,X2Cƨ X ;ݟh4-%/xfl iu&ˀ% nM4dPz-uv:#[FG4¬ltכ}w_f-6=!lD a~=b *3rI4ͼ˧3\kdN5u׈~hl6 ksݶOĆ #FaЉ:&:Sa7+믷?pxfDWT+u^/@㘩d|{Om@RXX2[N,;R{b2Q%*+>Z5Ďײ&ȁzP,! 1A#0VТLeI2hD:5V:SzJn_SL:EF&>]o!lSԻ,ey"܀Λ)85xZo1z9h@G)ycfNiK"{ %JV ]c.n< g\HV-00\ˣ.t/d>]+iC1hD:V(:\={>7~=PDv0ʾt,%##g/$C8ri3՜2TW* Aa++]NjJhZ,"uR7ӲBf^QUK?pP-!3wVPJs>Beѳ[Nx2X"e_U?ke^Ec]`]\Š1KȚz1CAPV@XԥN.ֳۨSى桭M==E*@S_DRIt3R\ap4&}5ojzI*?J~@&&'իGe9nl;|K*. t8XHOXs[Vwp=(Q]M217w9ߦP2Kx?},`g8܀ვNP-! VZ!Feѷ5uj &k%GNxN/ U謪] EG~"8r.9N:kʀKZ»|+W$f#"ç93spNv[zs$1swIAe ܕuC&-r=+$; И&m8ºuV[z2fTxtzFƪ!촾sOr>5j @Rb2JߢK8 dKA=Su4;@|sgH3w1C+;/¦}7s^ߥ) x#u0 .>XP,!aS`lE8JЈnnV˽nT\ޙ}?:(~ktHJb~ͽKlpf6PN"i|ԽYWL=W({09 M(me%.s/8oX޾@mٜ|/]w/>Gf۞O!| ?C@KMЈ"- FܙL JmX&;,-ƴks gn@,v@v0C9EBStg͌9Nmw: 1J{^ۇt"`)(aQa \PIAޅXv@Ke=,^PcP-!R`qCBxշz[ܚq͇$3f75iAxzrUq@ 9y8 i+-$q;i>%ۀ\5 uZ`@3W-SZ^wMj?W|y) EIl% fBQ@bY xڑj3 KY QP" ǤJʀ{ ꮳ̎4uyZo)B击2&W7+[@D'&tp8P.!a/Ra*DB(zLۊ~uI??[ 8H yɊq:scIL >-a q_@~Iˁ[-ջ>kHs) _;4u2F)Dv; 6xUzUqYrTu׏A]UAEN9ڽt!ъ1A֝'3DF+39mZ z (ZP<J /]I t֯ O AU fv.[焯W):lڌr@@ C4P1!1Q\`n%)hs۟-ozWRk5xJI-T ͵Gvc8F6%PZN>(+r A: 8E ~% mu8,'?kۗ0W oY &| t~NM~ۥuk$4W{@/[vtnb 1Xkirb҆Erb!Fd5ȼRk52-J6UmG?cٕfMBˁ PS Ȟ\"c D\M(WJ:|`W[|?G0.L5C77fy_oU {i9dZQ;6 s!pkZGP2!H{Q]F2Bxu&U|I/\"Q –䟬z x5+ Pw'㉝,2SiѣJ$mg,I\h`q:܀ 2s<.j/MOc:,bv~B2BJ`7Rc#- 8TuCJx=Ϗ?_25Y.)|I/`y&X!YQ z\$ӸM>qWѡ3a)" n@l7qvnXH g1*0VYf,j_gn-L1Kx|c8P/?!Q\]E2.jY;Mz.?0JU2ZLx^sG(Fpgǚ o(Eq/98x9X2"dj RX%7ؿSظ6ve0R؍vREnY^?|@b\5!M4B;TU8D}zjgĨk{_?`Y#S]}Kl17u&ifVh%=I/^h2Ksc2j~^׿ }kZqV] \B/ 8tK 逷%@epP-!Q[ 6 L3hη|ޫ:ʗb^]?_TsǏ0$~&!qeaُ™Q ǟ\Ve #dA8ipraGxᷴ-M+J χX hVUI5 +*cQ?:兲aТZ1*^ηL \Ľ8~&p'ɂ/7)ÇȚ5b<LB=8,knșPƐ%s9sʦ kYee]Kԝ_@t6:%WxP0!aT[) CW*TnqK!w^Y]O9`1TVn%b-̻2@r$ Q)8R{7jj?a;懁\|P kz0PHD3"ZmNDžވ>w#P'ReREp &ɢ˻Umyeu;)W6wU4ގ#jOqUI` 8+T> iZ( 3SsjUN؊otjZ,YNV×[,,@Ivx8TPMH"ZpP.!bQFЙOI㪾}Qj;~&MxXTܴ 6*(H)^#҃\~)x6sVMie&؊z鹿g DYxgOų ~EtѼ1!1A6@Pl[DԞ:=cU*jפ&|P;ؽ)9YUQWx6$L5U?9Oi>RW`# g޲6_t#@`]VO2}p56d@-189}: \"۸`ZP/!dPۥ= Dg<|{궺R|*,𾸿ߟ?jGzf'{cQz' UQg2i!ԛGVԿ^=yy~-F8tC0&~O*͌u +U`q>^,N&'{r sx 쑅@%"倈 PcЙ&n 's|wUi?_ߟ=>casr&(p֤ 5·F"'ҿ|4q⼅d:ߧ)s'W gPTs.(»,oΘ}<)qu&:ˁ~x  =uJ8P:]m͉p9<@3mBP9!L{mMb9 Vu{ozεs@K_NjT &i*[O>HKb/\Q\ka|Sa unD0t⨞\>f~ K~ --oZD@`8{ghGoFо`5JfRdw@ԡVFr}ǒv :CCBdzR:F<__Q^ހ{jh`|ڸ*lEa0Py\bC>p,j0Q?2F&3E,~<wRطBxP*! TaL}BbЈ"VT3ʯ/w2k|f_/Bs^ft6m[h_S+µIornvxd.[/rH ӷBRĀ,(BiPHQ>KE()턢J4Sη@bY\wDT؎F pzRw[]Mooo|EKAx񨸶rH׋ UIC ~9H :Cyt␯$<^n>3;>+ {4I>A£̰'3P1!SةsCעwp5U%̓z.]xӾ<(*5yvױf! 9Ns$,F əЂ8䦾 8yvl&kuq ;\5_+"$ڵֈu~^=0;.OV'*mhC]bUE᫃>,Om0Bi Bk5sIs$\x5[ 7ca(Ȥ\݋1N(ya5t%)Ep1 .i.9 XTjW,@^7na C1q yVֵ𗜎lL2>'BxNV /nr勘;$Z O@}~9c%v'b(ucO?9\X0ԂG šW\+ɻh2Ww_}o8<ޞk4cl=fG%=XF>l_|=,tb' 4 Bjogq'G sߟfOgyeOdbO?d@ѿ{pL@VD#ԾtEY]}7H1p !Hp (q 41y7'2bȢY` X&a>c0ދ0 ,яp~]OXKq ~tDi1N9^amFa`$" kooU$9꘭wǿwzSd c{%'MืOc0C{@*D/Ϗ GR"QU>d1AuY5!ӻKݩb,C:5QuPkJH&OWPa@`>HHB#ZG]P1!ITY&j!4= oLWkLy^ҐK},@1A2tQ+%M:TjPX`z>ɶKF:❇%g+NqȻ)_ea,봰YCLGD"1z7Q7Pk>UfXQ72-m ]L]imFD":'S9KšuyzߵM0_a3f*dtjSX)<Wfֺپϴ~ljy%MgJ9aYH1P٭JyOt?bW2_=OFR&:;ѩѨAtH@'d÷T4t#P0! U\ fЉ4"w%.J\ߞ_:_x Wˁ ^uCp x2Cl9s#б9 W^_%«d-/8IY3iL>|tg˼O_'(ߑ?to4b%A/:TD\j`tO**[4>Z3^*׍Mֿs}Uir? 1H"&Ootf#z(lbS#p?,j20i4f]"AoU P d},(cL=x]҂@?p躪 ZڲnP2! }S\ Ai!hێSܼc]}}7<a` rŒs 1kYo;qF)5 OZan=FȤ/+Nx\ y kC H^,עW0 WbX m?rUF@o MnQ\FCА_?z3t]M޻믶4;9߂G) !JҀ\5@Hd?ol&< "os^(%2<҅fQE6!X"Pd^QG:|2W/z.,\]rA / *y x @r}hWH<'P,_!PUTت 5QB"ЈtKz޳U|ޫ[}TԹ\?] YKn[r+ X#~&[?Qnp'>O"> Mm+gh[;#I®e B$ ^c6t*aPTG~e@ >9@J2%O@ !/+S(a)R"nL}I^^j\.\7M0߀a/DvՃt⽪Ů&̭lvmnE4j5`8?m =\F8ьZo1J$yI\MID? #GP)! ]R\ Mߎ5S sŊ8hbݶ9y(hvUQ'8#LhU-^-G3ݘ D)l,+ƓJw 0sE/ؼ A垟EU( l@?Aۃۘz>p[h3_K=X:,|iK%{.Jc2Qhjw[G:WC_o% 3K=!oͰN̓aÊ?efA3QNE}5G*:|Kl9a帻I;4Iz/@P+?! xTXE>ˡ2hL:$h˼5ΪIW1w][>>?zߏ`+zy6[.*zPX4Mr2)Ӟ#A.C41*a5Jl)b&,=s,Kyw˭I/'oE|7*9 H` 1~ Q9ϗ s#4(L/D٪kVU]={W]{DwUbrp Aû]ͪt)IF/c3{ߚptꨃ63/$e3TdOb8?Qri'#~߳)D? |P,! 7_lR\ &OwµsS=yWD*uS1f?ڤ;IB=8}S  c$jZs*PPL_^2E'R_ǷЕȥLro$h:#291Kv8 Dy<ɁKSӜe#jGϟDŽHn!Im .Ex._/jާBH^i_ `)^YX<BͿsљHPdPxN|BK<L]/iNs3Ǵ1!5g\(P%!+ TPc>IhFNxk+z*\umkÉ8 @&ϸutTtɉ 8j,@~@LmzO9>U;HL ApA/9?m2̠D B#|Lz߶)|sTWy|Z`voW(Lk4n *Edژ;9GxE@_O"bo[*|4Z??:!>@PW?!LlORQKjPَ]:|6jl곡{{\ 9o#XMIvﲻ;VM>eBeq>`qy^e k:U y1NV76&U6u$'5_x5fbTI|Aw~zN|BqmbwtLa 7m36c?+,]íPģ?;Tp)_iGB-b|3'PƖˀx;(hsI6P!n`V|cJD PnChxj+*nMljlƣ M/OO<0sD<WDt u@RA>www,#x;cP&븐\@矌, xhGוJGWg7"﹋sƎW.+W{t׷ؐi'aNKÛ69\ƚ)9Os}5UkXqJ욭[ :NW" Ư_c)ŐpP)!{xWFeW3IQQjS7}`V=6;A 1(Y|l*JEL}@"rMcb1le\Fp< h ýkeNŶ\r-RJ L{2ct$љ}^>S4ާ}eڮ{}JSmP 18A#J'\֏EVw oMpκByR*J63Ζ:k !L1:"Sub*7v^#n&^P=^Pt<P*_! o?lVZt!JcЈj_:^K Rڵ5Ia{1}d|SRf)7.2YrĪ$I_nZ7faeBb?)UAn8r'>F;tJP,HF"ЉNTS9m*TzM^?}VuAM p[ X%*9GE,  gJFdseѝ?Uq`9( eao;jm;aEeqxgLf eu ,y?%E;P.?!`UZ!} JhDZ6V/o8^KJJ{wz]5?0 O:[l]I4bwV/P__H2*m{k>%U וA6}(_u^=w?;ӑT/U7~]Fy51mOosx0g*tCCЙlvqeγz\n=:a4 GK_OOgBG޷W ]E?{VaDOkBjx_?.K{w.]kxwu=wZO'wgȘB"<Ʊe%aM6D =L|RX 9C:x/F- SJ TpguVN*RP/! mT٨u6Gh\&mίs]J]qYW{Y*_ka)iв[nv$ϓ-ǒ,dr(OpcdbكIj;1{n3lZm:cvTm,S:0 JF{Â`< 㙒XtNsE]MC8M]bVUq]?,!e5G%ݺ^ֺL-} 0h _|F/_ؗq_O>o:E@:=wm˨'sYAoaJp䧰V0N*]tlV 񹹱 xKFhQo@`P/?! MTZ!Eš!hTF".Z<^M%UtqqIν,3~m.DU:)(n7V%R'Rh@o1Ht17H)6UFf@VC(c+YRw{ pr?>)^"~HmgKQQa&;7}fk~sUW~:?[?3":5` u9{ۂ;-<KA'q9Er@'l\ྋ u,-*6uv罚g:Ipo9ʺ ".$n3w{4b@=hv|l \@P.!S&B"АYw\_=U]#57-?t' 1YcJ:[~Ⱥ37R-DX䎖8bZ^u+z/ѳaa~q)S87= 8nl.34"xI}8jttu];+\]+kc|Sݢu˷sǠ HN䦪t*1&G0DZuWUWHMǭ}?_2iBÕm*|QA2EƀȴVq>\+wcDΞ٨*5}Bޡ^`n=$8ń$:9fgq矇P.!g}S١LBpJuTŲ^seʌh2 R_E.Xy(o=Sryv$šXXikbs΀ z77ׇ ^sw`X:Hvivv؈ }=Tvp%/Hj#u]^^m4rVΫZ@H"К<:q*~|u. nӪ9ڿ x2,C0ą61ifUEH QtS %/m>WwpTw8›X _@6%tHmjd!2fJI? 5S%)P&8P-!_~R6 H'2u2ԋSVƫ_?)Oo_ߖѯ6kXXu/aiT($3>)1fnozm6qzFsQeWvD/LGN;RڢT6\<ڄJ4_3g>$%'A82x>9{rԋSVƫJ4LdzA';2a"Zmb2E7N^@B~VAU/ *LN׈VbS`]";1 g0 |Pz4d|k@@5P-! Rc2 Bdԭg $t_/Dž| z1Ѩ&MYx:u #6!VXڲO!p1_ωW.7pެe+An.r ͚b@LށlA4ȷeT䙒~?i\ ug⵲bbtZ!rQJ^uq %]#5{}p'_:$e|3Pp>`9y;Ds³Z<#HKbJQFtdsSv*#!o=H=E/U dxKP6 :CU>sW[ꪴRJ{ۉ_*PZFʍ9y7tף~66,>F{G8vZ*(ñ&Z _} 뒻uǣ[ s0'=4ЃCA'4̟_ U8F[ͮIH17݆7mJ dS{*[֥j/߯qT+ T3$8xph+L09d#TjSg,>~w&˶ kF[Lc_xw`Vab{:)&zT0==c]+r*p^ me1r,u| {c|QDe0һ6130{|9 # :wP; VJH&kyƦĕ+۞mO1L"?$[%'zʖrh8 FjoAԱH9OBٽۖ r>'~Q/s~oN;qňa}⨿w,Q/&^瞠g@3-jS~.^_tT;څ3ETuVtSf8 KS<.jZ# z| ¡W} ~k/):D( Dc\~w_bn̙RD>_]4'T뚘]n&&@z'G~;Y6*nɸ.C:*#KF!)At W W ƏqnTffh뵈\ ,j|E[,t }q? P- :!$dJz{T -~[y9z,<7.jSѺN9+)e> ?gVT2{%"%yM)ꐞ 8=qi0@oG"I;?Ǘ| '뙐n!-#ʙWˊ㹥%ԥGkR`!I83(_F8ʬ#>yFR Q0e*`@*3_hl= F07@|UNt%p;nSx Pm6an@6A368P2! 2Tѡˡ ,˼ޤ⒡u%=֙O@' (h{/UpT:Uea)24&q E]PT ߧ;?E`ŕmzy@Ko(q #畦r6XJVp=1K{mD|.%-@M^8lO{ e!tB]B|e\Nx"[y'[ziis 8b|yʲBrqi>]Q'GJ9hfe=D/Rg8M sM˵XfzRiœfF/묺ٙIWR􁻪$ʎUvoCs/Kg'|=KPcSO9()y* [ \}Џ.P/?!MSZV9B"ҳ༻x24\=4?=*#;c1WU#]uzUWlboopzs eK*j\E"bSaCGjW!N%mf@V#D\H.NV!IrX׀J977g|qYvhh?` *!Lɲ@ن#;JY\*KrVs/`%.o=<+x zs䚗Sx-yv) EIw滀TD-:!`/#P@@M`r4m)3tzwj@Gv]B]6YyIB).lP-!0S[!LDEZa TMzN%?.ۍ+ "&v,Ӵ<4 YO=9%?q# qRekaՒ^20w C8 sC8[2~n18yQ@$ d3d](gǜ_~cEga 9G.^FhLZ./Ts|*f}U.(wv6f*'&,UEPNj1V@@$n}%|͗f#}ץd_4$a-@>4Hm b>: 45X=,2 )4AO6;yCJ,ڷ;r/(P2!2(0SYM ١ '`G½mJ /Xt-\R=p$5 hLV%Yj)YQ6ϮT<%#So'p*7=-&;lƚ?]_s,v8ߔls( =Fd)u))<'P+_!+ SZ,BBkЈjWeZ7VVy~ [ary,ZiE,HKye`e[ݨN:ò3d]fYq]̷MB"4jb;P:W艘Y*/UPHbӍ EUod oޮcbD>#k.8qx*fSu`+*Dqߚ{e`ioGtbJ!T:s.q yRoCxrE)TM*NI͕.(}̝F foS$,TG5#fmhQQ pPE!L6w_+Uj%Yֵ]WWשw]g^կӷw|h`Jb!U,cJsJʐ_<1T׃ZuݍoeTO X*;soQdl%3=|PTU9€p$ `Ñ$e8rO#@@y|(6n)SWʮd]Me}/0r~Q0at WuOD\3sf#3lĖ{Vz|϶9߷}=uZk?k~AeAXڱBv;8Rx:8Ǽl1+L]o &ZUDʋQLɂF3 g@ @Pܢ^QQdW kG{'1'0/dR U9V5̖&T=dO]bGH#Dp$w3yw.$"`n}8P(!{uTY=C"t.А󌆷ԜjW=}5ןN8F+8(Af.M!'ȁ%JB-||C.i* qq{ u%{ }'@} VŨL>RƳEpD-yd$.=J߀a*Eޓ ɨL0qTtMHhUu*6kX~1MBˍ|. x~<—P/?! R؂I9FwUJK/Ǜ꿟}yǯ_=>4X.9d_@FfZ$lcu8cte/2teГwMA&u)Ϟ;˪r*ڐ@߭CXy_ @o8K+%WW6  .*SLĴB!Ј"_DvO5d窫+ڸW?zpcW(Zd((RhӒPCb9ÜҌqr~ǿc ;WX#~ ?">r k 1h{ } pP/! DPs+G~yqViiY4tkͅymtei1Eth.Bnq$ͬx- 8gn2HYD>źn@ ulّwXZe-0'GEd`hӮjF<7P} B#p:#Z38ɣ\Y+Z~?{,P\[6Ue3pQS3tL;5s;`IRHUWut-5 T FCc.zwd41|\mP,! Q[]C2HDYbNr\=_o7r2ZTs^c&Ϯ<3-Շr ޸3,5"Yܒ^QcbvG8Ï"ѳ7Cў!i`1~?Dc6~ӋȮoy-U,=Sl: (5 *Й:ǢVuXy7%ʪ;gN8YP>R+9 J0rǴT&ۺ j^{qۡU/:H ۿ<|Z?';@)@# \jVGP0! ݙO9@B& /ZЛg~?ϯ+~QxzkM5nmd3>T-m2%mqt͎)FfڼfS&/I58.UAz + ]2 Iye j\sAQHp0Kα(a:l4l/o_; kpp~~ȇl T/JGCȴB9 ǡs8vyg *nÌ^_ ͇ۢXΕ?A,X(p/"GՉY+ܨPbcyu6j3ep5aӴ?Q \2@*9k\u5`ΏT×}P0!_N[l7HB&-wTӪ ?| s?5n!^'.-1jERF`_Ċ(\)- Ƴ |5ÆB@1a/ИQ ;)b;Հ;DpxU-GtB PԽZ5Gٝg-g E""oáoǶ+U__w/_ /:3&j\l3ǡ fݱ]0ӈD޷ߏ@#Me 96R><'J LHPaL_UP[5y/ OҸ@ \|AL7qp`wP2q TLCͲ& +sEq\:C蛝sӽN=je.O 4cA.U,jӫdQ:Oݼg'te຤e,w~X\NHwB@4`xNw 8P.!{NX= E2HD|V-dOUL^hW T95h)#. EyF+p(EдDI6GT+0#;X\cL>~l <#TB1ׇӣVmp}&BƔ"o BAoei=_d?V'5xwP#K}iC6E~&UL:g)+@._ŁΠ@J436ňd" {5? @ 9WYA5i S3P!!W<ED:GH15Zv̕+ M歍N39y^k_1YObubPd/ >Qh>pۙ|gn5ظIEr%ЙB!C [nUq5+iq5_ ͥGl,aǬ A 2NH,#ۿB|JP.!ŞS\h* sl\7/4˲mZ*[UoS\PaVY!H!L~G\çX/PD42OȝG%rW=^ I#59r+9#@TrF3xįAJbsݖB30Px1+S %lFdW7Gvp<\(7zfbX59^l8i~g?ϝwRޙd56۩h-HyEgA(Da GRw ٫#[:nTh+w<Ӧ)/aƥG%*p2nb?22D͉NpP6?!'P(E)|+.nwyǿ~?t tr`ن`V9eo:eS蜽$u'`^~4-{OKX[]5pUnrajWަwr~FW9'XHW7'=Mι/M~|!NjMirQFz$7t|黠~PH[A( U#E GRoϮ$m.nwk޿ꠇŇvhN[` GQ-]=f&W ,:5懞S"Dhqns=`@Y&ڢg24Q5X gbfCA`z(tN?03\@P4! =P]\/̜sҮ7???ODȯ1wT4n6 t^pAaXqzc\h]ُ?Aޝt?ֆC!MG^;T ʨ9Løƍ\L%}[th8σ݁ɜ;OPic%Q'C+cmk)M)[z ݖƚBMP[a*c+LwU^5zJ8޿RKSv|αW2kqxj~n[fi$L8$Qa(O$}1[xPx= ҙL܊~1k=TUr1 It}eld8^cM o~T{x˦.Нr4;JKd_WpP- ɡ0D:Ǣnk+ϜT7*??ҽ~8O>i٤`%jϩ<.HȌ~@fzh73t MJm$-HA5v IJJ&7:TLh >@ { 3HV*PE B!Й4B-#_<^׬ʚ;wY$3ѽ{}T4qU]0^"WX!9.n`F4*5BUD 9oI;8޺dt`CoYooA<?٨dOP;  u^R/UISVl^8k~4ct3zm{$roTׁfaićF7!oA/ninW-=F#Qs*Lq"L-ym -zCs42{KɾyiGE~~1Es{NqJkt`lgK\L{:oR Mai#x^tqӯ=߾?…nå~,Kȝ#ph>ȈK[&GaW:`l1"ҝ[ݗ.r,HFD9¥)iW.w !WΘoYhX2 Ha_8'c Y[z ׌f%v7𫕓iࢢLub0{LFsgO}xS.S*gqZ_RP* V!F}w[:*s\dɪ{+]]=HB?>>r 쯧9}‰8Ȓ<)cwfmXyfJG3u7DDGIR;yU/ |wvſ (PbX*{M^.L闸iPӾϽV Rt()0Qsc`8|aa`xz^2aRCMw g{Clxw5zn:D ;mSl [ ^1H7X+6P2_! sWZt:%" s\su{\^KuDM0asnuYN]n),Q~iRa()yUZb|Ԅ4Ȕ`ug+L&о?DGrh?̓|2ntZ|Q4KA,Pe`V Qeb~tRl5ҦR B"B!7ίԽԼvOoquwg3t@vч]t @ o~' zWM?.}#]ǻt/!)=OQ. (2!a#Ք70vl~z3 kN»'Q}7A\@]oOa6sp.sn|6BjPh8fpr82D 31.A'9$q?hlUo0RH]# V)Ue"-ãx[u^]ܣӥ]] _]S 2Lta_ban0d߬J'cgBQ,AEwQ!wuQUQ)nUQ}6LpOGҤ(ǭ8Aqa Pm`P/! |@U! Fj󕚻P%]w9}Y Zb\NL8Bҋd]\#x\n"T[L`K Mep\^v_ /uAW܋tnk)qh/%!y=0* ̓_@ (L b:CѫU=ɻL]: h)_^k_9kZOk<1*+]X59(#dBch+&[x~jΈ:k@ | ^,֌7:⍮}9{2yA9r`y铠5;{W RGJ|8P/! $T٩Bdѐt"-'{n8ɬK=gE-Dɮ_ş!1)s!)D*j?QP-jH!0QڠGuRb#9rrk9$ut Y׺^%!315ׅS`ejC/DD~\01Sf̺A |s˾u}s˘]`rl:x@my?,u;hZмe:In cI/ + KEΔ0jc9s5#h BRlC!͆ba&fpK:`#Q쵣MF۸lP/!TXJfH"H:*<̩_}̂`wV`ipFzx,)]T&R yۑ@ee 9]^ZFəVf73\7y @q<9^%[ҮG^-]N'ӱ Lleb訥(BaD:eyLZHϷ:/y`'$c fΐv3 "j//TO.[J{sˈ6EE x4+1 ˃;7/r^4B0)POz+ %xC-[t@1 kD 9 7VKt 1i z&ߝ[]qS$ܽ_JYJoW/p"p6ٲ%qׯ,JeQTgR.1&PoA-(KN{Rv2Y\ @qp>5^zk~u65jt~! g8P+?!|[[!#JLtܨǏ=UMA$o"(LSqSTTkdQٜClN l>o~*l:^|^x~3V HqZ\Kq{:.}6-dH g4%\F.Dq UBΜGSoRΝPNJX+[ԚSq rF 09.5ͥ5B'JNb]zMQL8ӤGOwŧъ[ppuR:Q3T/@-P*?!={Q[ઍ BgЈOOjfEu5\W}?mQڥ-;% "y9 X|{)XE{x(G&Z[%(@! OEY?`Ƀ2j'Mi,\8Dȹc ߕҌ/=M; b"l}7\~jcHCt& Dɩ޵{L%=xWCCٞdf2)=hxPȈ-%wZx ,BKҾ:\Jy[r4Z3s@{os{ 2P,!Ps~޵y77r8ѯo-H֑3yaǁ9,Ѻ 'XdFVZZ߈Q$8 =;.wث1u+&#wE[ɪSL<.,zgq1̝K:x\e%Vo\t\a ~TDѡBS jNIЈ]][.UB]g5v$jvvґ)]njpZ ΣxɭAs.n拭17s%87vt0YL`=@d#{pP-_! QT)TLS:˩VJDU:-OS)> g "HH8a>Jٞ1xe>W!,a)B،Iv# Tؘo9ҡ1jtkTn7ռd4LiŇ'< QwqmWV}Dwy5|dƊl },)r/Jj;l!Љ&O߳5X."POz.( eŽ; =  R <Ȝ5T!v>T7_мJbM?ήuw!V3.xTg+~( <P-! Q٩l5G9q4W.* PzTPLxJ#sp 9gBQ 9Tb-}R#2TȥL}x'w:ʈ&$Ze!4Baح+n_JR&ݏD4v2o}M쵴A-~Wpwigcr>1I_ 'ޙ =f Wϖ"LBaq+%%]ի*d逬R'ETđH,wYifjߨbi-/WfPPڶhm䧢[R/T'*D@? IHb4P._!+xN S5=hD+U%&Zd4,@T1 w] O7֜\ʹJIvƷZ-YY@z0Oww|@2,E:Fu5QVJL|,@0@.X u{Җ%B`"bPt)pNpM13y@8-u;: J\ic m؀P<!L6+M͚MM2|aU<އ닀}p;$p¡,~C&7ymC{z5CWx>3삄1Tk%ҧ 2kƊbPi)uXu!6 ~nj2`њ\̵:t[+%Ӄ@䊯E!1!u!doPz$; "TNI/@{LQBjZͰ״'V*|qq8SmM !Jnvq|:SP& RG\ Wcz.@g1Ku9]xKw4Lͧ-T uxB(bEv=o*M깠r% dWc&RP&!{PP؈&C0DZ ˫9Ԥ*7^sϻ+? V$7dLn;G 'EPԔ^-Uʫ6 ٚ5#tl*rwB^M;2v=E;(b{siz.yXl%x+6V[}NTB]C/$EZCH>URXUx{p^&qoGg<\nmA(IVDǤ}G.A+P'!}QXkKʭTTU$ohiO8TS^H[7_SWp>K%dBSͷՐܹ۱~¹רs(Z9r+0j(#g3)hͥe[GY畣, v#_yʼn/EumV;swun˩D1IKʭx+b)".I?&XUߋ8<6!Oˉ'UJ*Я:?>mQbQM^Ȼ aA0U H-P7! :TlUA6on޷2T]yⅇP d!;_dpnUj|8BRHN, OR!5C_:ud@wψNCۥ0Oget0B!Ū;5 }:^ci;]Y؟k̞>ӡd>+MPCB@H:ˡkSyt[z <滪/ya ȯDZT-J1zșwW?[|7qsA $ΡtJs_u5mnU)pXphyƔX\'#ۼC aWSc;nr[ȭ=;XGkԉ~P._! I~R6!1oI{z1 7|i ;Y*&IfwV%Ԫʛ@N|Rqְ L<ܹZ;B} O8\A,':Iuߜ#FKV܆w"kWUI/7%kto!oia68 O>Ln5`KP[0*)IJ2\q)taʣxzcwB_WVU@bu" E߂7՜(.X" 78 yPogYȀ{t}v8S{]%~B]pP0! wVX6NC1%g,}8WzAOsW,]iPǃ 6fE*0F99Xhmsm|fIQ_,5Ju=*2O;=i~ {k* b["tyz| 8.u/,GP1! UZil5(Bmn7#-W9*Vu9_WsޚacKwp|):UҨS 㷒:'eMMMwE) -Hz@77'@95a#2"ׂsupRAHS]bV\p "7W\Q/IDd;6D9,Ʀ;km[5 gLjW\qSw=GA 4/'${f,)RY&LL"nSEt`\2A`=ֽ́d3$}y қqè^Ȁ\Η7U*,TJKh WhpP/! ?TX C;>sQEgUVͯ]S/߿pLw Z-3v"wP'bF0{N3~ݢ[EzeH薽0㼟%~@Vo_5le sy(KcW5W]F||PKh ub ks6,# wq>miDntifފ ޷푥#^]lQڍE3HM~&(ώFF.O]O=ިy]Dh\*=M9H/fR.Jȣ #2HbTB*6XW:!QOt@,' L+rd/9i_3.8 >`7<XP0!O\ BmugZJmmߴm-LUHO~koآxFZJ cqO{v}nΘ M9= yT=t#)Vz S$&{U_%9ക*8Y|s([!IRCʲ sZ ]$ē\z-sq=ЧIϫ;:Jwfs ?Q#%|oTzV׎~@gR[h +^P,_! wTTll#Ck%5y*I_^u*qˏN;5?mu#E ImgG>`6/G"C5 8.x8j>7-PgΤ5=_|K~/D}%Go9vjxߨdE _%3' 7Qy)>' \32 q6|NT7Qކej*,p#J%pNxk jսIR*U뗟iN;R}@M`*'Z}Y7#KC+1͘ [q:>?j0ye 睂=[H I3okTP0!'NpECqΪu2"s^ֿ)8q689:}O , Ⱥi3틓Zʭ4` >Et๙)%q ?g"nUWKU0WO7_|?):7(/ /d6_s,] `{=gX5eOߣd 1A5;ntYyͫ!mmmvMK 9ΦT^.y .xn:w\AW@:5H|T\7+2} #$mʕe)M3Ạk (hr\UHgd  ի( P2?!XwQy I_?_\_(cC͑7)]lclXuPaGu KG_8oiQ1-fPM+Ō߯Lg<'t*w4Bwrd6r3!IƩV 5Qh4'wws5q?5oE>@ 6%**NbJLgߚ11uy+L^rzU[3?`([QB+B\ ,-9nSP䠧Zb KZ@d_ޚiG޺4@~ Sm@/{p t*P5_!vkP[7I!6gj>(*SWKamlXÆ{75ʥ|r3Ei+tpt?5L >bSp,x˻ Ꚙw4z $QkhaZlq4ܦ}&5βq_鮯L2WleG|ԽmG4I /C^LWsFmWRpXy auPx\nghs9¹dfX{6ZCXD.. ,`1rkPާiAdZ;tPW讁45;8P4_!φhPnY [~ն]or^⿟/3 SP|!~.E…h9JB3ka W;R-r s<6;69(à2m03iKHqDc^' WPaR&ؐ Æ5D3~-pc Dd|Հ=6EJB8MdF|%Nk<_[jJ"򞭥g_yj}xDLhSS\:1W eŨz f=VEg98W5ڽgmg9rN: S}yK6@',\@A%qn:yjcr!}p f KYaP.!+?(Sf#Yu{W[U߿̡9ZF{/~5i2J,(iz@,G4xan\#Xw˞+b& w^M͔V"D@d@=hq%ĐR/ҷ)LK HfpnoIu|xȫU|qVyDM(U(:ëC$| pL>&Zml}8 qU]B8Dy_ʬkuåm¡xe~a%@?Ok@`o
=wiAeej2#gY\jR H#.2FyԘNl2D@]Їc!Eȸ+J]/tԠQ}^0n1AUOF ܬ@!q^ >% }7rl9SM-$b*V|Ye5*U]K^W8ݡ@9-/ԺoͰVG~-3@Fux_) W[n}<_g:aUb@T H "f >ؖ0ˆ8P,?!T݆]urs?)*ConW}0^w#zdW^JJ 9U228G~xS{[5H1gu'Ns" 2x*X@2 fb$ðί}@|.= 1(h5!v"=mbWZE=38E~&}syRޜdJ/[IV Cy=*J6IGH^5! d8f33:A?""/[*IQP Bn/H"{4*`nz%pNP.! NQC]uZUzsw?7{w^@ێUJm@* yPuiXάcW|zCRi1(68t=åc*$Sw.e#W]-|}3&ˀ ax OA:r9p3c^3ǶÎ?.n:֞ܽMEPʤ5'GotN\ޒsw?7{w`X_MmA?sIlj]LMQP B;|9@Bn9<^QGeԫv3sjW"@%1UʺXl6@X`JP/_!+ S'G/_>fuys5~?~eu6n]5W7L^{Qz~`J:72I :&>ʅ_8p8I8X-t[V9ag s|VRߝ׻&Ht␤'S,L`OuU}qcJ^+r7vG:OT7L%%gk4K=~%]mjkAPqުUZ3Uys5~?~dMԩlu$1J"Oca40%Q\ı(uzl.=}U]I[qk_|{E߉L#.va-ir3YCY,#pc-3!#mN>s]a88a)ǹ7VGbqg/T~NPMȷ!@wRv(ך_8YT)+JMٱ"=d]t? pM *9h*A ^EP2ijeP#8#L698=ԀlP+!{ Y@DB!Бt"42wU8)aRRIS㛟ͷX#!B4)([v5p'GѴU3C;A\3ĹE׭kh)ayO&o;"%U3?zͶ~۞"] {+`4M0$}Bdo wxVY4D CP޸ᄎdw59}w~ݼ`*]7ުҺ/Ŭ]:UQUJNצ*E('L[9FZƖӨ#zZFlOLY>}=:% yl3.PX*N%$xP/! | X١,t2BbЩ4"=sׁ -7ߎ5)pG/Jw`Zw$4}N&WC),H|U)'}$ E6`]JVs،U_L9ފ/D?S M}G ɄC>DsΌև^2R x@.nu 70-4xbqh589=sZnۨ]qKs ^[ˎ@z'3Hn B ,T"vڴJ11uR4!˜$Ah3Îq0( *(hJeQxaqٕE~pH4pQ:6kHP,?! ,|TZaJd B"Ш'9\xduVL}j_[YUg/T4-/Bي KVAAp%jo(Y%)Wq Da=87W&]S(mm*.Ñ i=C,T3ۺ<E-E"!h\-D!sU fHuVė~g;:zra:)ga 02Hw< ȩdq MfǢnbaulG1Ɲ$uܝ91斜SbBx`T+ ]lYyû' -GgzpP-!tVZ)L%E"]sWZޣ-Vf^SV:99y8Ж~[(́ix; a,b {g `g`zO]@2J.'t D8p|4%/?8a Q\ZáhDI_:/5M`=/?'.,Xy9MtO (%N FIQ!j걸c#_~ufM2/XL؊xQ{1K^ $`R8a+%vP,! U[ CVCPG=UNxoTDZ?_G+( Yrzۘoٌ5)XU)Fw.<26WH-УwJ @1T9?Ml:8E~˰{ҬvhǂParL+'PDKX.830UkUQ᪭B!Љ$&s\Mꈛ R~ߖ! YǥaRISH%-'I!F^0ĦSyE't=VCMNyS lBµM ޓ3@^!?Ͱ2f`.ۦ@N::֊P-!Tᆭ y6T%\U侴/;rHR_2Z06tu {Ep &K4FT:a[VB3' q֜%D tnZL &5Wrtߦo V5j9»h4ImGGsje(7I8xxN2gXi^uzXRSmFy6B*"%O*5VIS ?07x`!s u>RR,'BԘ Jp7'q!;Z2+._0~VD>Bj(R:;@ P@J'P@KLX+P-!=TXpw ̂и(IW"<:W_J *Fu6Pkm9C`CSn?W&{WFYm4FkPQufGs74_eqDߎ 74IKgvo.'[iFMgZOUW_Ji6D}-zg. p^wP:91[ IV`BcqxėV @+2ח񛮔}=-@td$a:Ҙ-0P/! }S[h3R͡{RVLk)UVlG5֐d{j_\73JK C! 82&hkS p* ,#kD}5 սD>h<(` Ɍ5/ vf0v7k@>Y/]+Z;N`;]IjpTS[ c&O Uy{4MdU#5d`4Կ2DV+a!2M/dhٽQI?^ v"no}Fj@G_& _9 I{U^_:?.0w6>Ս٬Pz'Co[>V"$ޕmh @Gph럨 Jkzhc^R3Wi *kjDt5e) ;0f}HO=~[ Nޗ=ITzB"\ww=RZ꽾'X?y$lEwO5N~'(ASA9ۏ%}psBg<ֽc唥Κ]xFղTH]R$V[WU` !xaP5? UHgЩfW{{ioq{WWC8D~UKδ +%㜸(Kuo82l_s8RçU][|o05w fh={-€(M-^R1gWX6sZ~nZ;Y&-yu>턯jx"lG:Q<)XASIA 4&qIZ~ޝNn]{٭ooOYeEqvT K#A2l|ġt] s߇O+wjCU=M*0+3)WHķ1^lNXuqfZALڠ;U4۞ !dnt.R?Nq-4~^qh]CP;_ 6b-$7Z2DJE]{Nǵ̇NK7[P. ΰ?L{~w:&vΕo^h"i,a .&+E?hjۺ^t[DNJ`egI4L~ }SE=(LiP&fHz*)\Uf.}k=zjh Jhc t=c8}i=%VE Iox"f"@3ppd9Q}s_R^C=r.ێϹv1k V/\_]yxn5jp-f Jjc[Q+UxWHPʱ ooo*,P9hDJzD*H6q&k L̟gzǙ1P/_ jB:&+wU5%\ҷ?z_HP\x)G)SvVpTddYՖD0!gk ~~<|@EšyiQ3u&o,bz뜛|?o$Vn~q+NsCXKJ#,5j8˪BTuHߏ7 9Pi1rJC LDzT)o0ěG/FIve|怎p 0 I5v[dK F1,iV%rxHr!a&A&SSQ\q"'ZKeH:Osv^b[S~Q`M A%HFޚ&t@_/&!Em2ЈBoYu*q5Wuo^_I IRz0C9 0J$V[iJSc[φ3s32^jNtc.mWW> 1{E :u{{jn`HqēBLT L8dQ0P-_!UT}F{UKB7j U^OtccG'P^<]*(@eV dJ?0#,tl@";ѻ+[yHb"WTڳ&"1sL5d6䍲28+Sٔ 55 BꪸA6\~|)C۟t:q,s@cGtЈr!U#(ǗBa,4EP70ɮruKrbzY߂*rVdC rdA1BPIOP._! ]SZ*ǡhDMq 5Q/oǏ?Pȫ8FkpC(FsAWG9亙*[;3w05ske܍o9͊ULkΫp^Wx]팍%øepi+wxg .ZJ02V AF1ϭ²(-ռ!sGmt'9s'B5V)&ĸi+C[ΊeHJ|P1}$mP- +IB&FK1e/rѽg SzW&JA@18_pmtú:Jz G̗/|O0?U 4А`(-BaJW]RkwWgTqI*꯹8$f/L1[,0IZɑ-q;9zT%_:ŸowqLja}jPSMuc-d=AeW>cr?`@~?H @|rMTGapP4_ Lli-lʹs\.9棾ޏ~P 3ivT 4C^/ם;sbq8(9d{H>I^.g"vżhEٛ:XցS =bu}N)p9^L5a0}@0qOtlEuҰ}lQ$eBHtGIT\..Td| ?@R`Pp.S}3m,."[FJR@wJB(iX7ڠO \Az?;M1Y \7e6#P3 { Xt- š!"_3[޷q-+{?l:O@?Uq>a? yBڀ-BR]1rA5&.gken ^Y-FaJy$r (u] J2w(F&#[zՀ ]CW{b\ OՀo8P-?! owR 3,F":5L^䤵5N++@:gyyzY*C)Xf˥;G4$d<'AZwC^b*]`:&ׂtWcq/pzn A|?ִpϛXH}3 =4ඕ(uҳZzH[@-bt2- Bbp&rԨ5?__N++ II!ci搑2|Tby3'-1b5owgxknދ. &)k5ؓ={HǬʽoP1!PlD;G!8DoT{gR{W8\hcZ}s2 Nc6S4UcTs]B ƽ]%nnAҼ& l1dГ ۽7>QE(K^wN$4r>}3CM6 áȴO7y>.Wqyww&:.7Uv#c"! ƒ_w3RI;YG_c8onp^wfm ^Ak&ܟL8RǧԮSblrP/! `Rq,IojxֲK*//oV/ zG_ H=x5ʥE(r*s2#R~;>\]ΰ)-VZY ~G@.S-78ڙZ m*%}G'\oѷe+Z EwHR-ݗ\FWp^oڞq:!Љ|sOIeUk>u?6-Bijc@xc$ 8(J݁)|tQrS_TG>5 UO‚\^mm,YWx`_T_e ctSZ`]ti7p*P.! Q[(m M!rPOW_?sb%t4ӑZי&) CY ~R㣞^dc,!tP_P0T7 wZ!eBk'BJ@Nt z@oqp eØP0W4}rNrMj?2}ֵMj+lˢhR7Dq|?b>{q,xe{V,x ?ѫUT'`̌d&<(X;jt881Uy*3пGހ*@د?y|>ٿ>P1!nZNs,M";W:Z{xiWݱs!`Y%G !X@1p< CH PJ*s,4| rZCH Q*i' ¦xf]g/<?)-p rƷ<_Kgw>hb%[ζ>͆Na(- GL!=w|ߏl-G/%P)7j>E-Y0@`G3 X[Hditۡ($!)¥2(,@'_ ;ʖ\Y^xр4iwp;eDYkY,t=}nP1!ӾQ[MG!H"~&MqˊMdyqk_^?ȽeRHegQz7Ky* 53$0Ft HH)?ZG8rKAսs&UxJiy$K-O߻)$]Ti ^r ֕K,? H_(R B#ИZ x3f5ηrUa/Ż`sAm7:D2AF!kfPEXɐ9C#o|1.YD54/7f+[Vȇ ˟z3C$cՐ ~o`XPhMh} 6 ? C݄J\nM=-'P/! NتM BdZjٜzu{K{mwz}x4Te_-P?MLeҸPǗx'~/麷&V+G#uS.dBg*8EBeŖ^& o@(PU!s#+ {O8DZCKfǫ㞗W^>?KR jt|؂G N4G*<`@*GhJed~NwJ"Q f]ioE>yd9/?v:`СߛwxP,!+ O[:CLN4D3s+ܺOn?.?ӟ bIɪݎ΂cѷ֖?ߛJk)̈́1SyYsSgÎB#"l)= r?P G0@tx˯Ύ.JDO<3qo7f39 :ȩЈt. #|:7 _zG}iwU?LuBH_1XlN:?+SyN0 O +BHtĉH,jY'm?9 @ߚ? tt09v/PB_!Ls*MYt=Y7QgMKËO|{oOÞ9gwǟjPph[O{>ͬ$ȃ<%)FLeM D"n' ڋz[_-!BpT1I5ilӉS??||{oAn՟>gJm E++$YyY3tҺWJ\?\g,؄ ͣd5E xA8輥#/%Yy>y.}9GnF׼p;hmdP,ې2Ƀoԑ:=ETU9ٷ0zP.!@~QܠCVQD.dԍ7}*|g_ Qfn8Ri2(kkJN4%P'p>Wb*(O^0 G"T08.HRd}D3 * 1.LѩzlCBuxØk =opj/Dn~@p X*sFCt^Skdo%BW_SXW.ep)̂P}=;iL_ z2?i9~zɗk䋁= QlWv3Zw[ ] O@/Q -7`zJP-!~Q-<{K=o_?#(z_$J`u(ݫL7Oiڜg;aZk虨9 Oh(tMY]Nó:~7+/z+{<;>:<7^hx ('@L/n Bn]n(`՘cх.HR4bBĺoU^Q~zv_M0W]UdUϮAI5DbJLh%$(@b!0 !aTpǎ5ϴ>X>OոEC `^@c8P1?!_PS] G t\U^k??oC/Đ\ھ =}l8 n/q[ZE $W "[kUPnTt=/q!{[./K;$-M?>Pe)?$3"L@8d'`*G@.uy5 +mHkQhH:c}1t5W9~ɧcORâ5#)g]0pzt/^}US 741\`Q -{]~'Sdr8 [4/vvFQh4kn@ [G`>%3!1+J|< yJpP4 :ڃ3s*5W߷sګ3? Sl8A:)٘v^D S`4[ >󈜖!'XQ ipU+OunZ;2%`'s8=j2ӿqqiϡm7W5Cϊcx/k9+Vd#~F<<b[i!cKoxN|[%bQJ"Kosi\?_~o|@͵:OǍ AǨrT02r)-3EbnbI8yCC&q ˫ $NdD~~^F;<ٲF=o@@jˇ]Cd.>;7~ ?!JAP9_ 4y!%NǿJtַ*$:=oVz,]]ø@MӯyWzVcgds4FWmayJWׂ Xܲ8vȲ6Ddpq;pV0=&`$=;1<]Ǎ`e7GsBi3A&K6X҈ͦ:{u1o?-}}IMe+P5[ #`KE L;9|GEy rs&SKuɥǧTE)XRg٨ Taqvgj4=Mj=0K4 EÏABΉ'l|&1Q UTTNϥTiP+ ҘtB-Dkxy׍mzR~M0ǞaG: g,;Qg#ċ :#*E )3]|_"-cT>>GqƊq+67WVU_6"v z`W0Y;-ИĚF[\E^e&zqǗg72WB}RKEF|o]3x z~y1QdYM{ ;])Af`NvE}P(D*w?:֛Xi /Q[{܁LrOՁ<>?v\P+?! UU`eNˢ1D-$qη5BQ_>8tJI/GQNEĊgHm0~ (I1U\3o g0ңk(gEk1e@VEIrNJ7𴆐}4Zֳ't@`|  n"Eh◞{:ʩ DR=`\?^g˴Oe0U X uA0`TḦ]0C7G%AU84RܪXۼȺm\)(˼xxe1ՓHգ 5X V_yJP*! W!3hD:pMnkfZTz_?ϟǿ@grfC3V ,^Dп]ȌA* -=O`S%yAZJͱPR'(;Wrn)c x9zt GI[Laz x> BFqh:CLνq52RcStK8sm= 3 HC%QYĦ^ ,ui]!ڊb.oN6XC UV7EWK]"]"6ZZh9bLfTݸ˅ $O}=pP-_! Ti] MP"Km1cWY.|~_?hJ_'TW6RL\HgT}T\ @:75qXՔz_1;?N]&w`dpZK%ôLշnh^LyȰ&?~4RVMGT&-+]4&,WXߴLe3tn^j6CbA# _\p(i+ڜz,N0/t9BzׯN ?w8WR*=Hx٠cB|+/d*',Am0!|oc' K tJM0tH >CFz^dY%0z!˱<@|@~ %kΙ-k}{~o5Rb+UϿ5' To[yN8QfbUWw㧑rip5T ݍ6Ȣz>j]vjq(Ŭ, Aa:3 @>an}lJEP/!Rj 'g=+Ϗ$ۨ7~*ڪR't*xǏ+ FS<^h0ZhrDXtfUv ЫWSj uY}"Zg_ H](b@TpI8}QFrE\"*&We=h'j7@0 ՇȖHSp @魅G6[$Hc >GƢh9liC6A_|38 A X7 0)X7y@ X8"rKX tP/!íQ[hB|RW*L%ji=,'}!^2c91Ql]1Εq_/5E[MCr&|sEk$˙w0Jz_zi>9,=t|9*i@bP5MX>Gv$Vf NB%|~Duw'К3-`y";y^LXK> :4㵛k.-f}h/'ԾP.!?Q\ܦ Ft3Xsw8O|ZSR<$)f"pځU-Y]CBXo>^'-Rb5̴@FDq; _Fj86N}FBN%tadxGyhJ0>`oS֤9ZK lEm"= ЫVԞ>o~rUOu= 62J`x T=MHFh~itʶBf`٩'\ nkM~̇gn"U![H Xߺ $Kt؅ʫ$\P-! PܜƒCz>?I+Yya3Uu?Z0㞚Nx8W Ʒ01P.\Rbq2U><ye@-S>З;3պɕ.9 6Lkc+qQ[T[kHQGlAE\vmw- ˺X-|$H Uo_}\}f^k/,&j?5'<(+W@눉! kEc5sd伈d 1*N%6$r5|g_k/2P/!HP[ = BЙ4nd5uu*>Ϗ.7P=2 ]Wy^Ԯ\N}ݪ^:'fݥLd+j@kN}]C]v(ny#PYnUlp}fcP]?ZP:x_SVˎm raw5hZ" -U%ԫVj_թOfϙ)]zwA^ĦcHs@)o6MmPQČJ T&3@&gQb( B h"1ǘP啫.Pm02A@kˀ/ZzʀdU xP1?! GtSݘN3gsZ]US\ʙֺ%Kv8# 㾧O&g;YKf ?4yInQU#N wJy E\"|-Dyc8Ϋ'M vdO&F@z܊UC=bL-DECrM(,zԦZ}k/~mK^㞌6/me)B!ЈB=s'kYS:u^k {umtu7EqMQbډeD|7PBE GiNG v]MfߌAu #\/?}ht~]e|>6Ma8"X8>J P/!L6Q\& #3ϭP]ڄ:Rv*s% "XIٖX/'Lٗbt6*t%E֯YEwEn|:'jԫE_o/_J5Vv:1a]1v< B_-PodII> "B4/}R5z/Wd0\Giik(q 0P8$VѕGP/?! R]+T%]V/tx*ds)IOqmPNQ(p\J%i6S$NoG4:T&m'rϻQy1/ 6@W,^* HrCƜ԰\>55-\su=wct,I'{ܐ3memY(reVp|*'/wԲc] ! R|^pys2Fgu}fl[ `V)f)r-~J_П ѕnKt62جMYLDLV`vMqM*@rG6-hcʎ>'ⳟ]7ҵIQ3^ww`<b?)jwPT^;+E^ ꂎ{E^^0f,#Գcu>./KW8ǰO t.ډ/}f9<S?G5@&D|J:@d}l@P-!+ PcVˡߞ*o0MZ|}i Rz1P-uO=8sUJSs@'ܲ0'0enGz`/%^lV"TUXÃ^ RB6tW%Ӱ(4w<[zݿ \<_9<6ueSHnK<AábT"yĕsknO?ќƆ̥{\*˓oX~4fқNyzHʯvn*@yw08sS'. K5e`?O @PC!LƝ$ Pfe׶\Yd5ǖ|_~|u_W5>n5m fu {orh3i~>_/7 0R,P]HE,EW?et+,s3GXT.>\:e9| U)wIQ'%BYRCzbQZ[>VD k GJJGA窿foNz/iM{´ +,֊{ulՓj .z_Y_oO~ǟ^d!E^+:zg>9q8) *ЈZDCк1oVVzt|2WX9 -A< L_8DD}ACLֳ%=Uִ` ?h=h%ǜM`Z~rB$Š=DVG["}.`T^\7އa%@!%{9SQA |$űsSr@s0êZBtQ> @'26hNA, t 4AM<ȞU&2EFݪ]EKK?_^~cV tMl Ā|Pv4mTE,e0!qE:^CW6X$e \^oC[qPTh2al@b`z@.MP L J |5QP-?! V\S+BaИ6SsĤ5=SPlQE:06htÖK pEkR;vW[kqɊiv^7IHe% SG<8^Г: Liq"qCgF~-y `V[`] JИtF] cD5x_/}Vv]u0 He2D1tz`K괏 u:MnLt6v1АʓX +8i.*i\\eS )dO2pbP2!@T  K\bFJR|1뿏_2ӨdX?J 6#(d*:Y@ӴSh{n>w52=(J@ȍEڈ j1ޒ{jjK\Ҝ? Rբ!o&m@/Zr7AjS%?y@nM$2L/ $"Ur<<;JGG l؄RLmjEv5U-ïIZXѢ-2/b;8j 6 K+>].6:P³ԖF5?5@ЫcprxJ@Yny9.P1!UYiU)g"=ZruSso~x{ uzz0KsK$w?)n: #J֜xFל ͆P ݬ{C\Bَ٤w!:7 LBvyP2Lavc57.107.100B6ƅPӬ0e)B!poL㞗pUwο?3X '>e$ΓFݰRћoʦj ًg˨"x hcnacK+ T)pj}Ӎxsˀ׌*_,9؀U2u/kD@%逿iSogϤΪr\&}#~ ek|]w=^O~Ȁ R3>026G2sR^XqE(l Z]x:-Q|*G_0%(o1cz w<]sF+j(}x hy d$ѮZEm/ӥUC-FÐìctQZl-ـo*jw@t|{CJg%Ҁi$+(@f$4gGpP/!BTXjcnEq6:M[Of@u~/Ԥ %}|>B =+Š}(ǔ{c2￀GuVJ*@^种Y^YhNhӇK]zvGPfB}V/b@ sOkjtmш\oY!.e.W_~4Tߚ0,6O^H[Aœ̑z[H$f=Y]mLfwt7'ɻ] ,l/Ӹ8 .m@'#&NdLB=3SgΣz$T^S~Er| ?WLfq-=Q@VB"<Ư󧷇<]Jx?o>?kDy!c،~V|~DdG7Es] :uBF3bF؀  'HjSPeY{H^+A.< *{OD _e yxP/ :D-JnѸu޸uK&8__e@;$b^t`tL]o+]ףjt\,05r10 /:Rl?HLio}-Bw{T+\ $-7}7Tv-Fp9nP;G|1e*b+؜TN $3=puyuDh:]ї(@ PER=X.Rی z7( P: 2-Ϊnk/wyr2>._9{5*nqzo0 ty[+BO=l1v)m==Px{n `xyD?l_l<` w{qvz*0SO}O@f {Rʼn f,6b|C|wΚ_^ok@w5ݴ˸bBM8C笅&q,XD8¤D'&LZȞرH 8!vDkqR >%1OoK)R~2E,qŔ¬L z&<Ư/Ŵ:!Q'wPR)2YSTYϮyxclT3~4 Uгo I]mPP5 &! :G^uq&WޜsZ|wwq?ma`?>8(D*IeiLap|URI4aC)Du]>>.AJ'k *q E6SD7] 0=DR`:nr۾p %]5;v\2cne:20tT&m~Y 1*2HOjt5U\uP`n* 0 !=Ag~5Z 5πu<_$ U58&%8l'Cb 4,̥HwF9c8v?Z8P) +7DАB-+{ʺ׌*ދ8c[Bڐ)_ƛRBel 'ũ}-‹YU]jQSS4*KwȘ Id79i*XgPTW]ϢB+a@$,mo#P-!I@TBAЈtB=+)w>Qfg[^0,;dD*x̓zN .%Y&r|N9yVҿz|VU&f%( "TSYS 9=UYx%H:C3h'뒋iByŖkq2PXS+2VNjι 0!DXڎB} szP -zPpP-! QTPr>255Tu?%Szz(]?1fI:71TybRfJ SyB@$fuÕyT7QW#.s}ij\3n9aNT[YgBŠbgk=QItB+ 9ֹ%浓tٓcjp`no`?&^Oy ~3we"ئɡ=j.;Bbpz:P+^ 101Je9DBRQ hj.w$ZpP- R C L.ۙy޴Ʃ] 9IosWKQy|2x4(cu1 ?B& xB5iRfbіB66|8+wwf5IbcLWnc>D>Qmg~5mmSX#rbA } d^g`o;~i=Wv#(=ēldoS >lU`/66@KM\(^׀P; JDJ笮;1PJDusU>?jQyA 2e-R Kht'@ Q؅H`.n崄),q  cBcr|Ckwwwf#`{`ca6܃ !F|DkOS3@8hnև3eIڭ\q}uouƯ:={k̚jc &#Jzگx߻kM ]#U;| Ĝ}z\/9^veOL]3Y][_ {WuihHw{/gu-V񔴥-uP+ &2D!D(D.k3Ut/T^.oK !E3Ϩ|Z ==ed/> @0@+ 0g;Z8EU{B^']R\XPfiU0's} *5QhH:HBЉηoe䫫yomqs&yZ!Xtg~,L5쉛, jX=Qu`ZJt0=/11C/3(Rq ¡쒄bʑ(MBɻց,BS^!H܁CIcy#^([&7P+!_ARآ3&C3iU^w}7kY|)ʸ|P=Ot ?>~ߦ^Rbi3o3jwZ^L2h9u 笓sG-anA 1 K{ñlF OH =W+_Ja{n>K > O9wuIJ$=<]#95b W27:fQɠ9BdD)>A\Tjfh9E8V"2a}"d`y_&n6 ET 0P48 L8P+_! 'UԘ=B"g|z7uwj}V1`zw*$o6Wx{3& *P90 2 J.̡"|6YN$* ,ۛ@]7#"A.B} ' $:68(ocVFQ[GuD[KA3)avCG3D^-B8/]ڥO[ZÃ:ߓŽ/)|{ ?5G!i=ꎓ,lf-9zwRCRch w"V&(b9 M'{luzV0P+!+`z#RTX- Bj^8eMoqS}K>?J,.$aY1 6;u0A=/WF(8r` =D^P_XIrn|Q\+K!hF$c\ܨחZ3E]}R pQ6u'[fp-TII r񗴉:r[X"Tq툸_ iC UDx)_ a u PF!L+;PZvcRwf8-z~5v=c4X<_</De| F9`|A!.Iǥ._\f& <_e@E{o{$[-. <꘠â6AMA(SJSL M@~|_p`!׽I;#N:™pXDm/!* #ve ΒOw[RTo}U#!ي ;xO8~-?:I0ǵY'et$VV]O}XWVA=FNZ"V r2)s a =H(˧TqT KQQ11{}w?Ezz tVR=hҢQW lGŒ*PI<`e'yP)!{/VR K ׋ZA+T"J3$&z)7`4LxVL\o¶`g|. Ե=$S]%봜vlQQYV6)Et5w0ŸFf A(;Zm՞͘Cy۵n`TXɁZ D%ЈqR>I+:߭X|_/It-/ɛE}a G@/Z[ D<$m58D1&lUs3;c RF|U3 ĂN*$:>XP.?!Y WQF B%t(e9ej^S˩_J<测"f*_.j`DfQQb0aQ/3o7Df\IdLp!HZ"9F\K.fk0df v7nӿ6 T2lTg܃Db[skF0xO^v!ӆPR59+i:_ LO|YW}B٭p֦6/hS1;9\7:zw ;`ͷmm?skOB+T!Pt"-B"Ѽ{9oMLHVu^ OX!+jWc()}]J6!Ra]5MS{Fy<fD|`SUlOiuj7(ߟS5#jىsX/foqx}N ձ2 m&?O bu7m[ׁuaHʝ&&Owĕ7Ǐ˘TZf_]D L֓-Bs /.W5ZX^`GzJYC8Y6YFzDTU|0i^6zi"vIiE!6/$^I4ɋ/E̬?+ #ɘ@P+! c SXpfF"t&] qEʕMTzUǝja],nW2ܓqR^Hr8hV@hANTÿC sQ'+LxY\y`F5.a[*RXOOXc|졸(u&'1vr{yEz^ƁZB"Љ4BjU5O:qΥ "/!m)>zh?i#a eX[.Fz6bʐ+"`*>ER ėmXwɣ>ܚLOI\hSh,|P+?! WSXlFB4h/e:|U>/[$a p +%WUE|ؾɋJq$wYp0TK|;F3K{,")b]S0V?MMZ zw޳ ҵӰxOVI&?T)r>Z;n=sz7i=c@Hs)MMD"щn5RoI^E_e`0G\y71GBj1X d@=3vpH.86 Z%t  B$xP0!OڡB1?qjUjZgZ08-YzUI1\m>&6Qd,"680 ؂$O5|+vh>=liAfD]Ls`/ >aE\KKt4 | 2V.hTKKo nDrm|@pIVhPJKtOs/|e8QuVY7_f08XQV;DHD<"?"1]2 Ӯri]nĩfPVy[*5RS)7V<|QЬ#N, 9P*!TY(4"7=tsv\UpZݞIw/LT/qkmU!:hĔ 1Z]Y_Eb 긲OKѣ"MW*LO<(:@ʋE/< 9gzMg cgTX,U)ԟRKw^JZ+a΂!Gޫ@wk`2I_ Фzr{=k4L@$3EV];~zIQPL )%nҮux\\ޜtr穬^lV|ԏWZ# <1>7m׺lϢD>['mgYUzy2o}3u5 Uk,ٴ6( CxSꤔkIR/rJZ){K19d'@6yd_1c_ ^O2Oav1FYq2PhŹpƢwH*wCFiʙ+*PKqÆKP3?!T(dI5zW$4ϑ+H8kD-hNB`8f[C2 "M'PX}U rsK!#9Oj#HB,r>Ypp- ƻu-y%NBQ*,l@2LǴxX7= JV`2yRyRUU]O?ʀms;7W 'o9;K Qa,ע?\=źcRS;׍*Y'.? y9**%vxdtlD[VXmEpP/?!1e_T)*R׷]|3ܕU޵{\7?rff7A;%IHNykyDn07F t"dcKz@CIeF!ܭ/B0}<}/%dɯV~,3Mtn %ޛ> φ;c͹eL!>4wh`J'ijЩB,l״ݲO^wDiU+Xku/Ϯjhͷ!;aJ3`EW՝{y?;+UtD*G(~M+.} ZICK&G~ЭӄnUmLW>)a 'T \P,!SX 4!d3R3BnҤ7o3:njnf!RI:B°gvaGpHo9d%cY/r]A6ep%@'AI=x'} kQ."iG7IE+ϮӆdJ3=(2 gQnc7ɗv$_kr뱍n ;cʩ t^(jbcCk-8va^jsN&{ ià*88,,m^f7b%đkzH)F1׈PP.!_R!("_RyFiSQM*,AjKG% 8 phVѴA\+E }8Q9 &2LĽDB|EkXy7'r 20QE#ARhv_|{D ?!OA<"0ǚ%̐>By'DPƔg uno]+V[KE1ξ%~.f9$QM*P#(#%b+K]/yQ»!_\ז‹WY˝~\CF]kAPX!ҺΛYtUڮ`ҹ㝷Z'e,qj(,P/?!;R 3!'ObedB^YJ 9W7ȯ1ڊԋdhnNΠJ/y [Yn) cӀbO"4A׵g!ܘzibJm(,úD2z<tɄnovbc-ℾ03ƚ7O,-4>B<}?:kRpF0ğ\$k'3$DTӗT !^x5bzrJ*9xV|}~%gNqzJD8tZ0y0sz}aN2C{B?^wl;`g` +wP0!wUتlB.bЉWKϔ˵U\++izD/<40[XM ahT+0햆T(<ڹ.6%a{ҹ[%!gҨ[$'T)ix7I;DH_TdB"- PDR$+A7cыj^>. |)[ #z#Uߋ\Q$ЛL< v+~/U۬M!{UipF#Й4"Su̸Rgpq|%knqnͻ ,@>Y㍛t4a>|ǣFP8:fx)(ll\9 MSJ2ú5K> &Tq $ݫ= 3ꔠ aȣ@z8P/! GT 3JB&к8G:檓~yp›ɓྗejs0 (/kq&_lf1όګ\ʍKc: ڳ"AUqXMїUn//hcOYY&klǭt&pѧ'`y-|W8wON<4adiGa>f: _b' &~GS=C'+W5n?`aP7LZ̦Ȭw/8o>(mY_1dQ.1V0[g)_Bd75QjIJRZ^{~S%P -zcw zbtbD4癩q9w5Sdw!4-YMZj}ϏNfmfI:)x,N%ôhrԜdEsOiIH%FHlGuuh'׬h/ ×e?PK6Pxpp)1\ 8P(!VءlbАt$J#5f]g_3[e}N2I?𕕆܎s@34Fpo;O`4stOHu<ǁk*@4%a#1SYeEH p,լR^.p|Jg8\-s'hBr%$SX j lF|tA9]A$r}Z(@a uf2DZ6\zT;'*T2=潧:3AG%0N^#@}d{IMh;4U&LFkXQ;޾n˛G6rG~ifjۖO^ iDl\.zf*RP.! Y VشFQǡ3hDETDI[{^f?%X*4=f&1~!f% %No  8ܛW2 |q\_W1N';}+J8J\2e v}# PV1Pdyb.@4jQH 2)+UB:b&aHfRPQ\2$ +]GN6Dk=r1,1\"Zܖ[euX^m~ZԦXt?nR8JaAm/6 KnőF Ը 3> 2t稳zKtַ}g_:yRIVc 2*ƙe Z| #>.( }A]P,5npu'Փ6ӷu%_ qfb{9G_HUW 4/> lP5:`"3/PVe~P0! 5TS,02F"Јd'|q請߶W^8eē.W`X;^*]7|T牕53GIҟ@pTR^PGEP9G;#~~a@OB}Zx8+|yt uKAî'/LuO_h(\Mጌj6)7N{h@@K8P,! @SYpI "Њ4~u\x+UnQu?qٰ:/!BH+)|b:1~C 5$  ֻWav4Yrt5rʛ%TcyMOᏖ״$ΐ(,Yvn*+fOeO'(R PdEi^/4M*U{9Pimٮ{TWM|$yj8@IqZ6#{hg+e, :ܡD;9IDݱNfh 2syJŒGG7(sE*۶\zg }\Sn` P/!c+?ePYNfDeЈt x'jUoOL㍫nҩ ?9Nri!dL1(t/@ќ{TSs1:¡hew|'J#|CFă+ʗ'eE`b"L@[Pv8mLA(6(%]{4%5H:[˜e.sU T5sGL.+9B#!HgZF}ytG4k m'*9qk7ƪ2Te閗qmo zUR/h4tiC2hD:7f^~&UR"/%oX:;w.(8,9 X ]ad$X3 [(pni#[@l=>!;gϳgu}j~r@%s53nhҀ/؁OAlVS[7k)U皠O9AnPo¬#ͧhn%~h``mY 4p9D9/au!C' g={zž4+  `AR}Z#>0pFxZ.zGM>a+EК^ |TwīĦ6^SxH(Z`[uiYIlҘ-VN6R4hӕt_P|YX7$^WGS϶) DRs_&O3μiM'EZhkD\)xW@=+ $P1! ?P[`dB#sϋy.JÊZmG6y8EUt3ʔJ*m糈 p& $a4Br OD2%0+YzXT#+n;kv̀Q ZQs/-ku5hb%_u\ٝ: It -bmp :@L0Ǖ=iPF5*&]]DƵ(W~Fj1&{HFyFࢰm+ƈEyZ9=-T!Y @AZ+tOP7'j|3Q[N]6h Xl A.Sj˗;0ת qjbH-&uE$ae!'R7^ghǘxG{*Cv+ [E3iMs -X`H༻EP/Un~`1v9 `kuV槮- <'ك? ؼbP0!+OYb]  HN}2]oRb6)@%y X }&Fe s}=O|Y>" GϴλKܺJP8ۺZLlTVa?LcMd*XBX 6ڈ/ow}߳Áa 6YKƛƗBl7.EtdF("#>ئd~dcX?PB!LëA4]V+5$,Rݽ5o*M:\}<`|FqDMw޹aW\v4lug/xˏm?i}EVXnrt +=^)JOde/L (J0V:Az pǺz l&e +P%(ӑ// P heKD "[ l̳KsqARv7n 4]- w$GG)hK{6ݛ%9L*_Ӓ8.&]zj W <Ӻ}iEH"neVb2t-}}Wi<﮷* ;nڿ KǨo65K@oodSo.2( E<'f2{@ t+Gkn/½9lM-PRPWadѹVQ[SR0;G:#8疪3{}xӋ-y𤶓5 #–XRaJ{ 7MkDĄQhq*M*1ybx.U.@rLM,T`-ē~D&V`ʃZB(h$7uI\Kg(Tf7}M(XA>ȚKP3$[$e`J5z6u*3uVܟnP`sHP+!^VXi$L+:2jUROk^:׬\/Dl"g->giб4^n]}lk^jpJ1A:TolnܚLIp+UWP0 Lh}gq5i%e\^υϊ/Dg"J"DTyUUJUKzUy;{]@3Xm$06jOl%̢y`:FS?g2 Zx`}3 8P._! xWY 3ڹJDdi$ڂԞ8R41< 4 6⦝w`{roӚ WP;qxYȻE#Fe3?u֭~V)0顠Fpw/ń4SҌ|3qA]jm}o|Uc0b2}ŖMIWR]~>ז7m1ubUDyJ%'8!Wϭwvcy帮1GGBQk;Q!ZF1P9 qTeD RxD`%G\]FjiYv8P/?!HWm ]q{WSMUE\x˫ӌi컗m A xgK0dW8M C] E{:jws{z:s𽥍d(ҋC @OR` %CaxF^30֔$VZ+91+Kd^B!Հ{dhLC1hD:yڷ&&LN;כiz Pygo»e*e ЏChۗm3 {k1F: B?ukO@ eQ2W)m=h~sӠ6H"` 8Txdd$@P-!~&U5DИtᒬu)z5J*_Vy\iqD OEÇO|Rc ;g sʵ EE+-у섨Ua[6#V gxUVBYBs5 7w3ow!_FU=‘V+*M .fn/ULjU UӝTGQURXը?ϫ1A 6>$ ZЯ(q*`އX+Do@8P/?! 7 !C^ †W@ uR\/*iڀ8OGWbd= BaИ&MB*$;xRʏ`,k@/*5HF*s ;.]nc19KQ$h_| f 3mцa1E=v~H;ax,͜)]9!nh{ %-cjNP0! Sb+nVkzeҭIkt+yޯQAPҔ11+!H AU3‚aU&_E/\ȑIW:hcA`8xnQ`fos힌v>kyrW?TJ7ӻ3^:j8 O@ FP˟p)@6&Lsw7 &IXN>LP0! QZlA#fڿ;u̜UfZ5|lFĦ6 %y h5KE(Z_9ye;u ]KCA R~@H \^BG l:S1b?KcZp\]ƦyB\8D'H #J$h~m4u›ҽ3 pqdPЂV*kfp>'8nk8H;֫/_hK[m7vX̕FLZ-<&ǟBt$phڲpP/!¿}T\jA+M=|nKgxӇ4q}T$ŻOck;MG1vq!y -]rq9qihh9MQRG4`CPq8Fj2WެϞ2槻`+@@KQ;M^{0TjcyQ09fΓRAap{o*)$ hDNˣZ黪4ܗQa|x߇%4;pH&,*8nɣncaDME"(nt[kЉ,+q2 e .24psJ32H`D@gӄ|AD6P.!T]\L#+C/]]q9U y.YZ! P/;ԟ<$!l=i3b8QFˠ$3K_d`"\.YW30@FIM)~\%4l[:Oۃ)< ~dd.-.Pc~y Јt.#Fâ_95^iPKbjYZ}SBd"ܲU3@X{-,\AxPI_A7y钻#BzGjJK&ǧ@ڽM9`oʬ%T^=&UXzNpP4 H*Bd~ҩx<+%!3ʼe(Zd/F,Xe+,p\ dY49U̟]5$+@u5W4,8ggqwW5ICT9m3]؜&vRz{C@5AWf}ݗ6)ege懠Q cQT6 Јt"- yU~:ƗUG׿ߧ#Gԡ?er]z =EHs ub{-r3v=HLM-~hcW,lVK+(tQp'-~ M@r!!!|vktOÆ`6. tJ"%۵ORSUY *2Ġv"HTL~P< @8J5R&Tqms켞vJsV^b20?W@zn!tsH.O .Iq50+0 L6GC&=$`نhO pG)7vWvOVߝd<$ \KɪkLeAbT.:n%y_Zŝ~eu:+_-H99<|(0IYh WE2⥓%lPg^r0Vq.)W%K+S:]ֆ5 \O&ߟؔĘ.E.?oO^ǥjTvQ.;|W' e/hrDZ~QAGz4sY16leG8}kt`;ĩ=o#{8P:[6P+ f\ ҈tFUVuŷu4ʗWIu8g5_2H AelZ㳅ҩUzz{| v8+~x Fsjk?w^rog.Cǯ?uIˬ7zoZsGHGz5ڍ>n WlcDAhĺR+:Hȗt~_9r\桔o`^WWTNyM*_PJSN6!el檒Z>הy,t ~9 iif ;ƍU'n;hhy#,uDBf]E{,+J 7Gf\5RЍ|5p:!?Bҷ~*qqޑu=o|~.p j#8ة}AVC^o4;j[T2=}@iZߝwJ=.:FUnWUxm B4 9#G3Đ;﹌/FSFru`'1N/$)P,!~`U[Y**͢n2T;J߲2)҆ClNm%|PE\{Ȕ>;ҽ(.j=>` &um+mtij1Bz1.YAI JF0c۝ [1P,!TڡJRB!ШKw%JQ/^ug2RVL\!31G8 7Xs#\Zĥq.yXLLJTa5+쌒KRK`9 L})RME2$R,"NԳJަSa"x[SzTJwםX2czq=s/q\-朤 m Qd `|n]W8oRuOmdr) jinl.(̠!.7cvY)0,%GT:t<#dǺNTYwP-!UZ`: %!E3+U*׻J^Ut{h $X_#JIܧ#!g ݼW<b3E}/wp&^ ƳN'| [?Z) G|LA}^r!~!~ *t41hD:7CqVUv5=h@[$g\ .,C?t};s30\po#/文aKVe ;P%ȣj]; D<7Bq03ʬbi+P,!S!.A7yeZTUyO-†jkm,σxZsVt(Y6$#kͯ78JY6qzRVYhd+2gD<չSiamOCc:x ٳd:xn0q! woqÛ˰ӐPuVWK7V,O/i'r3EEJe(f޴\%f4(8SٜGX@8bq/Y|u17yj8QHXh3g̞p`K|ik3f8?..YpjB#|cC$ EIE!Y\潜^S=l_/7eMH0CL?qgD{@9^N.P/! ɟRa&BzWǭ-UMԬ} < 7o c/<,׀ D.[ 9{5Z1_Dn|og4=S]|'"q^(t9RރF=HD\O-c9Bysz)U\n3D<Rt񮥷$,1*Bx[o~JY*Jy@ z8KfpLgGK(f9F;2~m5jꪪQn_b DI˕@{)t>cޯm PdLN[S ) ffkt9>g/ُP-! AQ sSr!W2R\w/wںiR`QhSzoukdːR.SUmv%U=4VqZx ёxm5!Sxb r 7ύzo;zzáӪ[[UWF0@ ylڳ3' Gm !g̬I܈U̔]TŢb@~J0y CrՅE G&kX~@ޔ2]c ~8D  X@]9+bԀ¿om`"@81a KS.sP0! %CS]D"3~7Yw*UYsz(){9s 0rƶWSƥ牽j1sYUt>]ء,wIX!.O 6'GR]>3 m|Q\B <_}W3GViͽi4IBaА> %k~:3iOui"ҍ0\8}4Љ}"Z*03ey)SdJ,a!ʡא&=g U^m !K'OV4Ibjqǧ 0 zsh% ?<`?3P*?!6YMBAИbfqS/UҴ[*qHDe*BX!%ȂR  i[kysu`OP-?!^U$# cЈt&Mku+UMTI= G$ 4EvBJYUt+XƄCU:NRmBa`A:t.<_1ױguZq_ k'̻-nD(`u-<:by:u*Ol33CU-߈g*Ķ8+ƂСM&{vמnjy)1g~4mj>pKGve>7 `[:|}m.I06Q޳,1$vpE VhA?t#x/hܽ*3٥888恵T!(<pP-_! oT U%Blwĕ9%DWKݢuݷNAt bK8^8 C<Ҵ=zLG{t US S(-(d+L836ca8_fCa؂>K17;{cAҍw+7L@t^u>O72d;ET?Y@7MjGo$oR䴲Ƶ*s~>DJ4{ <Ij&Z LcLTDxP {^\]\@둴.FK7PIh]*W]f{(r%4a̔}U" Yx iNwbP2_! T`:EߟUwBTBT^kҁo\QUz8cnĺ|ϩ:XhwkDQ=V,;"3]sFfÚ:Ф/V NYJL8#徫~ϕeN xЈvWt9A^nJ7ϥ1 ˈ@ DM&-=yfޤuրXJ_7眾wV6v&r3 ׵T,:TFn>/t *lhj`4veKPC!LS*rhHT{mJu3w KDž\z6/uW 7{z3FL 4jף?wTH8vip\Mj?~o=V{_ $R_Phr8V+'=fR}# *o ,tZ8D@ IPJM PC>AZ(Mc%P,$HpZZ.Y[(PQpZ/kW/5ןSz|w~`TgqQYO\mfS`3doKiP)(֍Ӵ qb DVdgw2JO3/`är=b4ƒ0[0,ӒuAOukS:iIH~ R2\zOnpz H ̄m=ֳ*Cb|Jz@8P(!{ VC $+%!9ҙitgZʲL5WW~*H Ĺϫ _6e-퇱+}61Ds0G˷qMO}F>u͉sg]P._! oS$4Sї*%J'[z ST8R2SE}x MDlʓ4OL 0 @E$޾@-;3#ꨜR%{uXzyr47}Q/ux Ns$V먦mF%cDm3>ɴZXAEnlnf%Ěu#$',}#F'{mU`Nd$lL)m$#"7.wo;ˌeȍ޻(3٬Ef© ˻;$K ۿw452`^1 Xt.4h'p\U8i^τe @3xa%߭FnH@z8N sNOu}͑-xֹ-\P4! k[HG!3)v]qSϾ*"+%ʯ>8\}=,ڀXcF(*e[m8$-:n& B)lEf'Y4ns/;(`HŲ1q8%)KqnVq,OrL_΢,rK!ux&u]\lA-'A&iz?ɍTDVK\sƿ`h@fnȴXXPJA%D M#z->v1L&lF;}h[y$12]G< $ޯBu^. <)55?8̆XO*^9Ş>V<QpgҹZ﷧P2!{[*Y@#qnj)RL5zg1%W~;@ 8f(WfD),@SB5]$ThUbz3vnLw WnrbZX><0MYnd2Yc1XɈ0?i@ xLۅ4x:hͱ/|vr~s^/]wKʐjcJn+F㟏R*k+84W •,Qg>2/[lSx4/v c@^8é*g{6F^JHgxqӿIjYTnk; -?I>`/وg9^ۀP0!+X̡ק/$ O]a^IÉMV18XÈ[B:Q)mFyG8R+A @4}G* X +ଭH/,X{J)OP3!ZP[' B&pnx+*TuUt_9?^mJ,l\,I=H%QHQ/%~)qu__azZW{*Ś @ `VV7w1870{<㭅Y:?4US0`>۾ԭYVYA Hv;d!A ۍñ2$Y B";k|T)*r'> RĻԠ2--/+yz9=J1%QBWTMJC*hhqBv;a*/{WX î  / 5e2sWM̬P5! aO[,!38DoUt2k+mRn~Jş}klڎՅX1;!_vgFU\T F , 蜏6Fn T+IGuV~J&{xkA@t-[^kP2rl8oт3\@7e)D/mx!y> 4elsrlء2c,Ma1x^>7wzn^YEMUO?B2=RxKYrnkJg8l<1)\G9׆PeiIܚ>gЛ*ō XO;/0Rq{-j6\4HP.!_gQ[ U9fPxwqWYv~?WxHQNYt0UCꣴ.+@" O5J2nX(1 oD/0#P,^5烢0?s4r)0 ~ji;( ۶_Hӽ ;BD4^|]_/w.L^_t}9Ff+b[,T^^)9G!!̲JmG9 m?l: f$wxz^O_5W| p |&y 2c/2P"!˷fVQT)B"Й"F-ǩ.dW[Y7{\vr"|-]!yL/D!uzYaA`H%gP(!Ϳ[Yc[mW}F8Uʭd0OdOc%$E0j tV"(eӭτ0 k*B=*WTd2`@3>ePЦ @c=3cG@,A6G0v~cnx:{.הyL8vcʹV7-Z}AWCNjޔFԊUwXGCO(σ%РX-=,5ϢC|){'foT I^~@" \<H93 ~P2!#>PqY620n׿.,XҢs^л{l}$)@AtkW48;q\W VjYpW |KE*dLhkySd˝ѺF&笮 cH6'Yy+OۆC<Qn״ TX RX$ )cQP;? +jlJm!;ҽIW3URofǏj?|؆;4=<RnO#]T[hu0xH UhU/+ï-}PG7g2(l@/1,D&-b|a||u"5ivVgZֵ}сs`}Xt9ts?37}?pu;4u#t?O.tt~y@:<`>qǫgf@Jc- c">WYbJV]׿($^m&"/vWpF$=;il Cj?IeKY#똧 A`7? Ma7NHc2Z00~YԺǤazǫo742:p~bOqNۻz<;g@Ƿ=EP1 L7D6S)"HKzjq_{skƵ ^>ﷂ .1.j `\bxyc/ 2 Lտ5-C8^ZiWa͊6LTBhũ P&!dTYN jsQ.P=Ʒ+ z@t*{lnv\]cRx|Ԝ\F~HD( C$-CsuIIֲy*o`Nj0Y'0C,#FK1F0pMjSV HPFƅO%Qa@8XKz|FTUl1dewjV%vlejB~>LkPC {&[i!87RV+%jb$UU׷goI~ Szu;biy ,@xbSVZdԶTNNoaPxf8X7C"(=t3D+a&3Oh<+#0^YM[ ;r㺳diPCHhaATGG+.n~S"O>1(Nו3srXҺT@_*?z.y2)UUI1'~.p/?oj޽Tཋ$DIL ;5zVL+D\6w | (eNr+`}oTeۺ*"FZN hy@ECwӎ ćPaRJH'_`HZw.Ͻsa}!e5tl8rd>-IP,KB4v[i a#f"-AπT (QE:Ǜ~=PW 5VNDh]r`8P1 (p4* Dde%.oLo@ 흇k492 *4NB3YU Z!XQ EFIq Œs,8uG{V+ MOɑ6٫]hAN4,KsL'v 7B1:S͡%K{f.J* A  @'x(yjtzhǓF4<*i2BXeRT QxzM6 <`i4RKxWZ5RISH`%tN]LB – k}̽VDQQ1Ko1 4AM u 7" ؙ nX7BhᠶP0!R`* 2[o_D*%Y[)߷WnG3mnsE\ILhqHUO3j@=:(1L$w8a oOOO~Ƕ'b>x.;̜L=U -27m24o~`x8@"3Np(pIj1\o~9~7ZB^uOdf;-g@1f'-h4.؃"409MR3l+5 ȩ: FpcrX¥2eRH_s)@׊OD8"„.':u.P.?!ß߼RXBw]Y}TUv?`3vw;hsSΏ=7:Y/Z ?VKs.Cq vjjrky֌VrZiЪ- áxN][51&5ZU?@X;`L^+z^RjYS1P:ƟxpSUaA "c N=[~:t,{]jerNJo_6d8\J{Ȣj1_/Yϣ_(3 + sޜwFțh:Uc/ Ģ8;`l SخT >ﬞer &ɡ4x8w7w4 Vq?_n'5Sn&UD=8+$3Ot r ,(0zRQ,FUo%}=I'8(H8@@}R4!>eN HjP1_!S[cKCgKg Ϝ0_?v$&?^. {푎(ŗ-xRuXKS¥aeih-K noV($cZR!-icp7MT_\q7|Fl5 2 <H7P.!Q[ &B3hD.o=z㛵JEZ>__?"kx wA."fDwj5vbWqѡepɿnz~wr~w|8???d8iPOFȄM:[* Ս)s1n XN+M [B cAcy9n,+LJAO[ H"ٸ9ܐ2].P1!Q(K rx>q7szgεs2ð^*e ]ONmN"U*OH0x[.@w@0 zM-ݼC^dQFׯ +^&)&Ƈ9Ro\Vj?׻?!Oǚ|+;JhEy%)(c2r fѺͻ]]8_芐[j# }Gjl@WA;. >X 9 /޴ PivigOe8J.CHP0_!>Q[qϿ7 "1woC?܉jFN\}.WJۆ=kN xU 9byz%&9x=V^\wfŌR~YR5}fXuS]չT3,< 1V }lgYk52.\#-'W:;#+s/l)O/ìhjwյYBpRp@1$ E 8P/!߿Q[g]Sϝ|nui{!dRNt+X9eOԵ1\-M "B42r} 5|lK+.;c/YPm"42- W}K( 굢en#hsq%Kghq ʸ-Mx*+lk{k;w3nSF}{Nݯ)؝v{:ҎS E_$4Yrb7?;t;"_zuvA1@4_dWnKԝ uȜɀ; `>DP#!3?AT@ eVCBhH޳.ppJy/~U?\sp h{wT) FSߘ+ZVwEMU8 ֲhJE[rΩCwܚ"іGGFû]*Nxe !"rv@&I=L'7>+5*P / =d~I.Fdahb r*xQxPX'xq I.޺i(@P-!+Z0i*Bc"zzs7.UeUm0$aS\ ihLG3N)k0W¶J說2N0ʥdH%&lu$6(?5:2ҀOuy[XE`h?ZPeO+ҰY dS@f#٪VBMi[z5Ja%C8DZzSw7V]\fޕ\<_g00+ $^tTr<^Ǚpie OkpaĬr78=Imf;Sf K8qV3ӿ.&iӟ~iSc β4td?drΑ?>`p]pv{|'2@hиgvm|!& e%[6E(\j-ۅID˕ 4U%y'"_Y.βq%AΝ8%St]7gnxC5]jr:R.Mٵc6\6%n0imOsG*頌<ˬ:ES/(A)\0曳L"GU&iӿU \ngū^w>@'nےn)wru6q%;󙫽mJD/)v|3\k4Zy-vN#208QvUzwلoJzN|=/Ҁ`DA;GO}HF[^8s G܉F8P,!{ WRd+ JJdYQUZqpqcQ 0팘RǕzUB<~8i)WGRٮjaʑ خr"dZnZkjOVéAk$N(pUWׂMd8]?8rC+ x1̯8QkIB-{!w4> G3v=o`32: 3*_ӒK8P/!ءd# ą4*zɎy3 ZIz򰊖u}pGTmU\NA2 K:8 Z:/4K`#,!;gvq ҝp EcEY"2@Qp0 |q2h3AvUC@ڝ㛗f) αL8'<{}2O?52&pSW}X*i%k 0鳕]4nWGD:YF#9zh=0 RY[~+R[p%dDd$hj[ Q!5J]PW 'G B `'E'!*/ VP.!1XdCɣ%gL̴dI5e0}rx'(VdX ف 7ЕEPɞ>,Q8ҝ q5SLU9 yC^Dfq=ъ]1-}7Yz]M{ʠ87Ut:^^ԽCG[O t[ި_69+ŝUOb)k:y,FJQ^sA/fWdSimU_: C6f ΖgJT&D`&XU՘ǺMso|xvQ57!ȱ Ҥ6- $~9fLl>+yWѤf+7P2! X d$ͪ*Iy^.qU٦ 6q0]-٩Ĺҽb s4CR ~r(!c>^|5160nglT![ʅ+ͧ9k;a":WRE@ ,izwOmFxuq2|{?u*;n{ڗ% Xh2n`hpܸ5іUQ\22KZ*s8ñų[UdK!:"q\@Ogs mG4 (XwDžX}hI\/.!Wg}߻72Kw(@@[4[.MvP0?! ةeQRgR)V˿﯁K t@J'ݵO* ӨYJ7؀.< zN*jEPֱFLPcL'!}1+s2%ow1XKrӜ]+4esp 鼙E\tl1~Mbąt/ V*D%N$pUҕ*ܻV˿ 8&9( -pMsS7Ɲo[Ā}ܨZ0hYbJyI.fO@g1\ۄ\;R2ol8{2":f%iDHgJ{ P2! NxsymT˓hgWj Զ#8| (cy)LǣsX!t9#f5Rk+u 9 _-g_sJVr:\T/1F{C@֖<*ns*q{HO-ͯcTrsxsz e龮Zi\"Qr4A5tKF۞(ȥЂGsß#rm⵿@70ZXTD MҠ,~8}5j.DK *HnpU%ڲXwmq]7;Soַ~px}3C?V2%l)0^)$m}}Dl/dpP1! /ةeQ\JΖn'OL3l!_eq*DI}Kd bK5ZfC(֗1mJ|OȹGǮ5"_c`_ ;਼C91(.c MBEVZ|t Pr FX@݃:wJ3p͂_s 3gfqm'l/=a1kTU\w-UrS8Ng{QJy,8W)i$dxר?|HƆ.T[YbD}YX%>,z7-˂_ M; @)RKD[قQ0Ū3 Y ߀P0! )_\ MJW%kz温R<*"*x$\t4JL"o@Tx no'(i;S)mQ4P%N{ {OWU =9JeEn&*nxNa:H\#q~d^n ۯe.rz}94nYNߕV|=/雫V< 4t\R}% ٲxNZ| cѸtb-D$wǵF׍\L=|o_ϛOm[NB5Bq8QyvQ=?=dbsPzyKk{asϹ0N=ջ^T ;zQ@SEJ!J7\P1!nک ECҭ*s$Fq.?y̩O, 84ؽ:ރ럣 \7L y5=[r׌Qf"Cߍg1 qDcXTR*+uc`D\;>,iho,qʩt:3nHaڭ=y=W4SviX12Y}jasHY/Vx"U@)q2g1 8xCkx&Xw+yJzG^}C$M|pqh臜TFQtYiv%^I-?3$98vP0! qR)JC2Ժ˽q!9Mw|qDxE+4MW 5 > P,a%6aBPb{б'3EL;W:wau?ѹ1WX o:HHeE"W Rw V_J`Gҙap 6R}x]mpV_=rMrS " 5׬m Σ}qDzHfJHPҲZ1ȪӲ'B%YEwN9[ Tޭyks)˄+i r!xmm_ ~qPq5h+l2/W~P4_!ANXEH~9^8goRS\UW5[ښa`Y>ʡ!A-Ķi Q(n2tS\Gxt*wh`e j`w ~鬁•B;bZ# s s´(˓B|YF_j.I§Wvx2䧅]sĴTReY'-6"~gM5Y/5\z^U#@OOHm"r"quFѝhusȌ!=WBR{IP?R 79R29?.3 E ր1Xb%y'  lgm0g:2/h.^6K.h*RtԷ7P.!Q k PH*Mxw_5\ U^xz+3Q'W.8z~[#3u-q8Ԉԝ*&V 3ls}lt(L)T^9N=-'ʓu(Y-D-ɂ*)@ɂ uP?D% g >ŝȔ61zbW&jKN{2._8b!o|)nL3KW{n犭V5>=W*N$:aG`J9>U0gEVl^R˂A(O)(A_ |d ]U /{)P~9*z{5?skyN~΂**#-0ot/}`ؤǟql<8(mߜP-!kR vϟW4_~gIwZ:[l>J RͪHB~w1c{-j:(iBL/j :mf a wHrkZdx2x3Y=.;@W|z N{nG4 K]]iǘ-.h vDXU;`B^SY$)mDl𽹪q\֚* ߙ]֫_@v+S|b< ų@&`xcۇ.yA5x?+{~S:hrc.r66A4 XKigPP0!+ zQ6šRHϵo+Z˛Ԝ\]m4k=|U (K5]*d-4z;Nܒt7>q[YF#Y`Vs5aRPU̦==d%[>;r2JWsD. 8C@ifYH.m!(Qn׻WY0R{dR{sKqiJB4DZYㄭeqZtI95iu;ifpxjܗݥ=9}AWAxg׸8Hh"Q%k|v+c(*5\#l r* N [ a@E xPD_!Lҭ?f8ً͘b!7Ě9̀osZ sۿ ZrvA(J4)Z/"]b)ȼ)6 !7T:Wol4P(f 4\}O8vY1hOg GS.ϰJ=ߤM_hMP^U TiM;i!*A`7X`=1&I[pϪx9G՘]lP\i}z} 'O~%Xsۇ|KuFIRP~^tEZr(CBL0<:@6NcRX)/|ȋV*^F><7 |4! }8fO[ozS_'F6DPٮP5 LDf8҇UmYZ_-q5>k.ΟZ˞Gn.P! -"9Cpm0&Ib}iŸM=y}4AD@AUۗ.1"Ҡ (뗃Ԭ$ \1|[1^3S1Qc_Vss=:*,bHs^ƄZ2#)"0R+E``D}F ig:4CИ"5x\n2cOK/N}ZhD/s%y%ib;jvml(2"FNQ}ɥ,#{0'x{e0;WVZ݋2!Ɣ&Cv.ll0$P+ {T3 t*HV5rTWZ=o >~N8~& *Pw|O$Śϟ.!L DŽHPiQhoZP%~L'uY zX7m}۳s<26ϩgJ,f+B ǣ ggJ`X9А:zW:njKĊ|jO?&szyP` 1$KZ!ezT 5`gwYl?mp7ʷoKFڪN;cr?ܨgg=d+r\`yV(M9gpP+! ;oVQpFb(t"D!ЪYFJUko2KD<"E/ǟMhQQ~`jaE"MgMMV:fl/>&8$˳1ۍ5(*1pEn.]e/Do?;۲FBZCq5ֳJVT3?֠HMh<4Wa* uһݨ'yK_oBIAZ#8cLH70-H2~rrHT>-ٔQ:JαƧ  z{媾 JdRH=k8P-?! sʥVXaCQtJβ=u*B7K?5#2d Й~2B$2Cn'5Nr=m5^sA(WDjQGߵ]VeLZjk S*9e*J:k͊)_ aoKre`3c"-2dR^N8pvuQ^{/z;jkحL~ N^6f=fms dBAXVdmzH'C+ `9a/ KbF1φ`?=J%%SD:?B[YUp:yeuj+C7 aKb>&wHb4> ng’ݻJy۷ZlS:`h#Sds f^E3Sw`?(H*$Qx {vxo,@ %pP,!]TY5B$РBm9iVԼ\d?_Aܳ7 n(r-3/;,Gmy14C7mFa‚r[JՙTy+W4`\s]0T[#F:A{_ Pz stU%arթ !v+,qw)d, %֗*!6F:L+|)L>rYa|yW2|^;Yabb<欁DB٢薹cջ Ʋ+nQkK⟀[f56 nʕAQf `1=uqPP.! Tةf!De!w]dpܒ"e:/h$KL%CPFE1"s26֎")uH`<]s|:X5?)ao.hR~%E'J[`@&>ދ$Qsټ.GG%^tEO n:AqֿbkeH\g!Bg822DTLgWS: !Oe/@O-RaDŽ,^!U#n6ȍ/5G8A]KC&7cB10#"P K@B b1ˡjy`/>ATw}v1Nһ1phLHV(dbLM?|UzJpQŤ'eZذ%-HqX#w&JmUQĬM8JWĕsg"X!XL/u鎣WAp%t=Tß#Yeer7W4j}s2&# ԰]E^*@%Eg$4 qc%" 0f? sM:K߀P.!ZosRڡn= Bc8bVW]_~g:GV%sgFa=$g ^1])>fĽC!ԵoEԤ,,Zh4Ω/A[|\:ooF1E oUPPou&+h3 )+DݠOƗhaC w஥L(YUKP!D:̺S) U$/uT?&g4_[;v7] wEc5C<.r %322Lz^2m~~بy%EB du yLJn(J!P1! 1QۨD3hH.o^tz]]^]k)kufo S&9ŷ m/̯Mu"'yg3jli@WTѽs_ r|'"{taDwzm1pS{[1Q!<xNqYLrE)j.s@A1{80cIۿ.߁tx};- ?%iJ&bJ]BaЈ[n/sw \N~u\}OeN|~RMNxּOP;@1/^F\^h.z%A2?B2ɒa.^$#&mDR+zQ A532oZStրosho@ orݷ:֒}o}}e<ڜP>  !BnY7\+UXMTSUVͿB3?z?Ϲ' qX~e-wQuܨOҊ DD"J"پ"צj[Υ;L5΍ pI;h$2, G9$Z3gfl \U?fYk]z%'{q ޯexҢ R]I&6W`,9f9V<ݽ8jg2;:b~򖎐wxF[<5Hd:ViG#^\jw,/FI.}JzmQ FQYi-%(@`űqXH_ꭕ? c~\-TV-+Cˢ-~he@Bإϻ҂%."8Fn}<} -ԯFmP+ 憉ҥk 䩖Zg:dqn6vD^1K΍Ή ,߀HXaS 4ױOcTWT|mq, 4T@R[V̌fmřlQs _{(M3#L@nqS0FSK,Bv/~V%0CS0|@{Z tbD7yLZ>gW^z)p&m G T;ͳ~]f/w߶Ia(Qg$y# EKjbu-o[NxL<3ZAUHx}jE)-DP7x /8P.!lVB*BbЈj1 *RjTyu2Y]z( .: *GTMm ;1װ l*D1*7&B4W[2΅5-u4;td*GIOHF;)l\I)oCRrsz[ 9!{l@Ne` +3Sa,lSEr5tL-"P,_!_VPFCqq[ԬuVJUvcJrErzVf& *kF5"-r[dBGyᐝw8A@BZu$\pV@Zل'd$ LXPǑIT΋^8fS;Sᤞɢ{C>։ $%hD!׶jM+5^^ArZݽ٬αOT? !&ڼ" DSܺSuQjhb+ZUS:Ö.I:Te˅ppP,?!TRDiѫz&uUMMn/q7\K\\HV!n(G>\[8Z9Jsъ0ϼX %UzdktQ.&@+c9"p իf nxt[V>BH@!'snPc*J 2G:`1;4pD ChEZ5oUOjs}d*>7]uf0ggg5 3EWަr/crV!O4CQhlUe!gʤ, Y+9/1]~qd1hV )1P-!+8Sʍ B65I$jWSU4cVu4 hO#o\^Ȇ{~{?rF1wu39{Wlon{m/>FVIGSZt58x4)ŧg,<!<DV[pIK¡,TC#%oinz3! hM:;JU\T|VEu5_Dt"LjG[=?^(?Ae1ͯhN(QTimKVy[I3eHe.7)Q%7eզ3{_GEox+Oe   (P=!L6D3H1fSfr+Ƽ?μց9/|V=kYjh}Dq\vvN iغpH:"%K+e%Ф>tm; Em]PCK'".QU8\0^}* S]r''ï$lX 0u+ +y\{u~ΛY ,֘A3hyeZKG7J 0R0V?˃йFQ̱&ڋ4t0/ B j:%N)A2w;uQ*+H10痉xu9.괸ƳJ=b|XD5u !, #.WꎶM7M:x, p)91P(2.'>8_(Ee}<6gWh+, ppYXS!?"2f ~@kti]S4CP(_!{ xV FfP˪LЩ oxzW?W\J"rp˕aPUTbMl'g-gx):ȓS?xZcvHJ#lvPִ&gzmbZ??:+BЉ<&[/%$ȭ YozO][詝I_hg>&oTh/ DDiÒ]n 5;^mqP,!US(M ǡ@RS\ܩ]U ..>z0ԒBI _^" He BZnyW@Vݯ w 5n2U S1N8pOʈׅnk' sCh~YkUR9 ^ʜy!Y._`ՃJ!@ ŃPa*L+L/ztTUj}@o[f?oh\prz`/Mm!u?-h:yB |wCtW1UXJӝ?>@V2Eo5{Xt5I8P/!TtD5+۝3KU]]IT'`5E[pcS={-w `a-Mx+2(p8P3?!?yR[Y ơHDl܍ޫ^}^$$?s2Ճӈ21=,يv|a=PlaHK!IN#ss7d;Bf뗁 |@,^@S)n/}GEnS )ٰTCtƝ{'E OtO&P/yX,UFio:CuYiZ DL? 7VU?n!%Lݵ~ϟhyVs_? U+`B"5gp ~@?MdϸX:Wa?ԈH+Ԍa'ـU.!`km=$!rg B{WLjOVN/,!c@z: ^xn? PPj&7HP2!&`R`ʉ BЈtFMY}u}jVpޕ*Zcҽ_zˋF 2+]4JbM/]8iEBLNl'-LJmH۰Zv5t_^y\ kw+{5xSӰcKպ_k0OՎ`1`qc ? F$ +r3E7_SÎfrzϚ_,[A'"8 F4 NQÐrAXE1.F3=GbM-L\t>A%bqa"zH k~w~L"Zpxc/6Z&x,{1`S +RmP.?! QWCJ=sԕ%TzeI{{kTPS>i}/`Lew;ģ,oXgЃv[ٗwФK}?ĎnT(*g"˕ 9Rx\1]@5tt(^<E@$Õ n1=9\|ʒ{pO]?BS>8b %b^0<%({XY_wl`2o,m{=Z ~Y.UY\\^u+WA%P |`廀"s_P*!Q[ lt,K!hz%U:V%K))__3?V㇏Im)ǣ"5-TӒO)Pʑm`|UnD +VJP7B3#hniʻ I.Z}U\.D/i/&; Oڀeu}V`SCHJ[SDZ7DJwK))__3?V=wP/>^|].^N} e⎅g ;͍M XY!)SPn'o:r=ȥ <*?[X>\m Ѩ_'."_@)P)8P-! Q[9 ޓ :P1! ;"M$fjJ<{w/.FD}Uǿߜϯ> I'M1=O 0"@b˥ҩr`xV3 +Y)?X.-Wr̾`oN1_Z=%mPk AW$b-HD0@g +??2Xy"km>P$VHQ d#("~WdCI̲3F̮9ʑ'x39q 5|t/Knhϰ?B۔饇h~o«9/~'WQTNQ2"f0j+/-+ LkjmGuS5s2Mc_dg] +ڳ~H7r5pP'! _P1D!А(- BB/3U߶%:c.Tԛ]cf{jLr( kz"ȃ$wrǥR/i+?R-4G& B Č׫.TZo'NoDDo DzPo\o^rdⵌI-I(.SOZ epXyOIxt М5Ze:cS(K> ne ?=a&h)kdbP.! X2H T[Pw2Yt<O J=~:2@6_By#"dIVIIƇb0]aq;y>ӕvNt^Ma8죌qsxĴd ^мHcDg80cYax3s aqNs#[Ue\NhpͧH=688ʫ[Y*fҸ?6z//O=dCuk Fj`6tCD4?UQA+S| 5a%X֪@  d|v 4ioYJqpP6! [݄0Y LϜ$z$빦=NΏ9?EӨ,ms|ēvm]>rF9chx~ }k6Ty}SW^10jdͦʼn&-=8^|"oslPEy8y3kS#/@@r:3wYo0+ 'C`=oG>o @ dX)tv= eP"4q㬒rNtu~?? d.U ~}љB=;kj7^$öO,P~B}"]%PSG<1@+i5O8ok2*\JX |&Y*&&]N)|' g-Ҳy¹ gyƔ~XP9?! f?(C@7qqU+jCeIy9!Ŷk?ǐkwY4 7@.8:oecoe'wH΂a8OGa )nɫ1ӧ&>1>wNqwfqWܻ`Dا<5G&LR`>RS+[ IJRkb:UTֿX 7{}{]磉׋,j厌cXϻ d8jZB4bQ |3ŔTQeD3a;s0fqz# F WVOv8jp7[.W@C!IiJE#2f3gE@NSǀmU!P/!{ ͐XA4͢wdfJ,9ZL&qs>bVb ܸ}lB f{WJVV9iik:BNZ1qio.Ufd#zHwj.g%..]#G* ܿZ;9I|`% vh!E&7jֳ}9̽?vnhG0͍j[Jw-ޏ4>N ^$&g)1dYJ 5:꿳3'7'n }P)|^_X ÄU x{WJ3),?P2?! [bUZ D#+5YZޯ5I*Uqªo8\ ψ>t?$κx"?~[m_ TΚ: VPF$rQ Y fy- @*k8j)dQW!bJ8vP͈BNw5UIߍ5'=9rՄ z/B t%Rjrb BH:/MV5wﶗ_:s|O'Y2'O{wٺ&+|[SG.6DI> I&_MMv Lk/X#J@vP"w$f L@-mgVKQ~#1W, 0P.!sWڠ>G-qLַLx֫u 0ڣTN$CXvb$2x,K9;jk"yR PTs)5 M]^.!Kr/-uG.YKRx=%??PIk%u8x+Xk[}&u*IhJ.Jb$8(\$\HS@ aP+! _lUۙM B%ѳ)$")Ʒ֗7 ﬗB&NQWݞyw\+v1]_[t"d4]K(el*"SD;vXMA!GhDZ6*LԔwj:[Z۰CW0.>t`!iD&stϘH >Fj`<3*‰H@//r(L* iFg ww@ZR:ޅob [9lP+!TXi BAUŷJJRq^O0/cz BBpQu0ԱSIAQ"zXW x7E:<.#rN҆tKO{ٿss2[}ŗuP))$F4hD~d7)sR\xׄۮMpHkGk1+5Yv`7u)7Uݡ H0IWiOf)_ 9[t8P.! VS.k]W<ɗ*JTUγy@<ؓlA)Oɩ>AvAYv痟 e`2x*HTN _Gn/sWfw9q|ksYc7TCc/5LxLGIC9nyv!?D vT@tVV|޲eʒޗRfS_B 9ĠQ9lAC+JE9 6kD!8;KM^*yĢX7䒍t,4 itsۮmnP*! SڠeXNW-,΢o%<}Lyf87v8f|?'G*4:B2SXf Wx]R,ֻ- p3Ss7Y] 42b'v7q/%E!& k9y?͞?=?ﰔO,Y@Ƭj;zlx<%*{co3Sup*UYyMdgqe^bpe /")JRmޯDEoB#kq~R90 TnfR#iչ'hd%Հ'bP.! R!$ zJ%q[9 / yQuۅ˥Ty5,ckmq(|dw@5۫nl~ncE5'[cm Pd7B'܆ڗgIUv!;&R nOOZD%ng #$TA=ξvrr +rC72ƒtg(s^xCOzSVb#B6pP/! P۠tۡwƥγJjWqs[ƿ¶XW~A5gOҸJ4a\T(N٪+x#gUIjC'sёF1h%*qcW1w10`|RMt@l%OkT:Sg7- epv]J\rO[49D.3%j,Ӆ<'D+brO$/,pJv1B ̳yĐ8frAv%"$ }P)=9yE/>mȬGpS x%LAq}:3-5ZN{pa@͂aN21OBP62B(Йt>ϊ2V׹c&*]~ N4b6gu zH{~iT-N! DUۄd u+*540\CVC~𮧂PllF^jxk4-aLـ:%Ɯ@c Jd!P/! ծQ[ &C"hD3ܾ|Iu I];REZrJeR1 8Uec\Gi Ɗ$-QeԄwj]rwʓ.tn[^{䄉k7e([Xl]N /`Vf 3 5Cy?~)'+~t_IJbhFsV>rԑ.ZAO†[3I#m7o%PCy{cSq,幃S4^.iI qEZ(m~pjG ,VlZ=ō*rbV< P'! Y|x|*f)7uw1.$CG>P͚JKV}}@ Mr' JiQѠИQQuR4 AR|;㶲EfфT-\XpY,H%][Av(4mrsU" [@KD {_W^mΞvI?1Nф@ z{7;ټ~jH>|9+L|P8? L6[h-"i3"[x̓gzY8,wI\飩[hBBX |C^'>$N[yN=Efr"TVő_D+%L. <%[/{\;kgZGq+XP :nsy@ o⌱" k\[zV9cu '3rJ"h 2 /!xjc>Z1`_RsCa\1|=dk87(qXC$6gS':*DMq(9%-GPb#->јk-mneK Ie_MB}Wx.i"u}=׃8 ܳs(@ l챒C ކn_}4)1 ~P1! Z)F##꾾jJT]dRrq943ffC@V#TF)Rtarݯ *s=ezHL)w`W:P0".dVox@lǍU*P=&ivX"~wy.q~UAҊcTRYڝw ,&{2V=фAhP!1v:nf^L'E%}TїW}|ʈ6vM ")$ j i]{Q3")^E=P9:@"\Vv7U)t]n\g$0s⪵;#iZ9$ !Zʾg_Vɞ+*L5kcMImj=5/qܺg9#w/Ot59cU<]@T5漄NP !e , .30|@ q , C/(%GKG z/Fl;rҙP2! YD #!QNtdݸ̡ZWU'9[Ll i `MQ=&7#h^<0 D}ב9BM` <94:!<ēb?Y!-Se/c^)Rw}=L7McHfJ ~g&Z a< Xkr]sY&H+[v2a`"comKOL%m 1&Z%R<ݵ}>< h%pOx^J CP2_!)\jksZ7$)r㞳[g]lR850˄걡ss LrR 5;Co>h@^)Dh=@5kcyBLJ(\z];1sNCuuU8bJQr wwmP{;Ab<-@ 2x@(U| ۰p`iSJcИWWG74nK*)=g* v'kդ$j8`y8S$0ʥѴDZb-^(68\ډѐu+hie Âh/kwhF0G g>oP4!:UZLW1Mu\&]gU/umoCpcsH6$"hualHl,#Vrz4NJPl,B]\UvZbD0,Hw!+`76ghJ'`/EP((VG46g8b]Z|T6+{ϮrXDu{_`UL}U)By^ĝyxӖft?0=GR6 LF9c S\n'  o=&q(ɣ-mp `EԀ %z8:Wƨ[lF@Ooh-Ƽp]%VAXP2! nT jw F!NowLJ_}Jed]LnN=K ׺#8LxS5ءeFW8ègY-M 1&J-$0MQHm)Z9xcvookitGv'>280$@(1VC j&=Z3lt&Y ma_KMpZM HEoWE|qR$TVo(Hb k3=MMb cmx+}I1@1Z Y3׎u1 uհ#kj%z2x7FbjR zp0 D/m^= ~YsTGrn8P2!sPYg)yo8]Z2~re2 ɂGztg}.J@]T;Lܘ1uG#!D̜r6 2тޗDxB X *yQ"YT?oMp+?y 11Oת+ 21eVfH}<<)btY4O ӾΕ](t{U@aGb +=WIMU_?îՙց: űOM{-Gw@"p3h L3 iʵrOf|ݟrvi!pzpVq]7@<}xCKJ;m#kJrq2UIІw I^TҤnמgS*3/}{R|JSX*j4k¹~>PS*-Ӫ7?pu qS77֬SԪ,rp>^[3@96 *>׾ їnXk1J *(Bm 7P-_! /PXNC frJ]L\]7q3%&77 5:6 D7HՃSL"ER(uF>`)ޞp ɶJz=[: Һø~Wρ,f|w%{b%H$<Ԍ5xi'|>I+:j 7R۠1bzTM)u3swߏq(#QZDU0&zge\GwqW~A^| &2 v]{ #)`(WjA {S"Rۅ LP3  + Bo׽]oW&Iޮ{g\U.xg=pT󵳧E"37 ,fo뒽R]؟A|5E b]F1tRGh|5KA04ó'L@_]զ޴PU4)&v-[|-bս_ +AR^iuyy?Mvږ\sQ5k!N# 91RLc3[POrP?#|9;J։?&Lxk`O$}旧,?4 4P< dB$HsIuΫUW)Ja}8hsP*  "FetOJΦ\No[qTr4+} wUJgY,CO3I 3]Eı.2mE z˦1BJs;H%-6Z?S]DTb*kBeCl)ˍO=7Sy`< w*<y kraTvϜ <P. fuTԈ#=o@*1eb0.0H?'P0! )2&VŘ0DZ;%UU諾^@qMLn6C pK<ҼC $afgMb 2dZP $ot[} vj60e"+ 0]y -P4+C$Z4q|/v.?B`ԆFzy/+j_Ao3Y  ܽh1DZ]M|RP*N^FNr)#4YVZuڡm<Ե%h]u4jnI3wYjQS-a7f6DXwfa>)P+!+TxW!&PEk-$S#Y&U5?"0PṕN0oG(r9cǓEVROO>7v)2JeeWR=yBQ]|#Lsfb+j1qYi8,S Z)duxZj( WH6 "љ:#)_)3%FNeO_[y"fKw$r>T5z@B/SU6UyE,<,`Oj|V*n@Yte]5ѬaWiBn AV 34kwA~P-!VYLD6!Ј*M BAk*eQ)睊Ӯ@'{#D^mi'g $Fϻ @ nn9n!+)/1gj;\Lm\S|Xky2J_Ȁ\o *xo;܃3ՑE"áɺoZf]U=GrCQSnzφj *; ZKVH-$LZriQ0ɎRx)5r!KV>1¸/^]bbQ(_f{qV;P0! !Ʃf1$D kvP2Pf{ZzrpP,_! /7TS`4)B;pWZTJIJyC?@E>,q#䚭7nI]eN(aemԉi:Ш% $P7Xde8;=3ʥn9XTuةUv6KϺ)/2ƭtfLj',)OGeð˪xbg־\AИ"o.~R1~!Ҳ?#YrCKRf |.@[ߩߞ6IDFb|*qϐ33E̓,[ B.D?V 4z0P.! lSD6(&Tj~r?|;?4"}'^h>}=-5+ZN\dp~!Se[SS/<1_&`1K>ݒtk,35x3|3)8ә榈ozLWq %/t@|=EgSl.j?-:{lYh+.q7r2exG?R[AnJZ6R؎OFW ZHKFCUX`ʴR"Pc7]e8jE툓sVbBbD`U~ߦrmPdyH2@qP-! STl#cZbIUEI5ξǷcgC[}$y K' ݔ"o 8NȩI/vQ?3ؗ=okK0%>V7:[HŷM^tQM x_.,)ylS[Xg}bIUEI5ξǰJ/n uyJ 拔jƽ3 z{sbMQ2cDIz^\!څjrTlLHYT` ~aM*ޣYz'O7pP.! &OS)sQ (q넫+8(73q>U.Lհ$pql*=MMɖ^#^ZjͶj?w90-ԱX4p9yHxypJe9A(4O*Oɜ&\B%^J@VBz%^6BcPJqWԊ=ȇEo50 8^0F-3NeLLX\1cȈԬ%*SvBk'3@-kS0TĎzU˺K<d]Кjl9Ϻ<aZt@%QOQpP/? Z#BЈ"- $D7w+~~.??#4 7eb7d,4pտz+f(N؈uz~ {sX} !߁j zu&Zwh+f%kZh`kPW ?Ч?ïbbAUHf=s[Jw:7kӰ#5rkJ%G- }Y;Vִ.6Ow :w-6bRp7~ tiu}?C[~0H?OL@`Gx!P@ &DJ*K%L[.a[Ժbz)%K+D9sK]]EaY(«0 &+d*j|x~Cy"Cyelߍ:ch%v&lNDَ>oPZ~Eu^^*]H#izR`d8ɑ8-g\˼/\\5B%6j3Iyu3Eu8 I+r[(eG/J0NAEJ620SxƬ*2Uэl'1Og]\oOߓMsg/mb{@̤$%i&;lڜ@,bYgZ@~4[= Rr|yx=Y 5OB{2V%|BP._ B:n{R5YwT.)tu.KoZ4{{6 .*-\tk-9 rYT'm ˻yLgx*I(:)moa|Y<&ZzroBTf!# Ah:EYR\T7)z-y/ϟ?w&Dm &)ւ,MM颇*v8 sRhm26MQYcQ&̏ Ϸ[J)@SЏ#`nv Qr]4{OË~ k3@P-! vWZhf ͡获)2]qyuyuJLiS` 6P8AA8uȧSn/a=Z E`ޜ0 1GR+`oCs> ꥙Z"I&gfcI$WmL= LcM72H!wK8~dٞɘ\)ʲrJ2uZ6pP-_! {oUȡI BdЉ4,αZHLJ&kzNq?NsZÕ3??Aܟq֧j׹BUa=DFhA yͪfPC}DHx``)#k+%@uo^x"OV"gwNjs#aā~PfŢ0y0 Qq4IB(H.JBLNn&kz^*:u*2O;WPc,6x}4WTGIYA0Uv~Fq.ؑrHYU)DyTwA#H^O~4QvbP,!US! 4>١7Mi/,GDO4V<@$M;,K"%rL}1qW--+" dyWа #{AE^0ZR,x`qA;Jx (hǶ\VSsV+Mlytެүa_M(Qp0b/ѽ+|4 $کsupOT <+wV,vh֖j Y+F1AаthD!Ј$lJۭ2׬"graZ?gSB H$koaQ;IbQ%_wnFgȻC I^BʴA ~~B*d6jw?WB~ bNOP2 {3C"at*= C{wk~.J{Iz ̮AWgzۥjD"VkoJowU~]8x㎷e3}jX {L&Q!]$^Z@;x t@ۈ 08~bEB7 to}T˺IbjYn+` e.W̨ɆpWA3Qp#;cSmO .,[/R Z'9wWlL:Z8O+4!6'r2\gg4 _CP[ vD6%P- v036kInMiR D;S˲]bwaY\~ SP.P*! U S@v꺔5ʌuf%, &Hw: T`.s5 .P3SuPUYʽ%qhn~xU#%Y5+>d)A3:?4! .W er_]n|xo솁4h󹔯 { E3,\@2nrCP0! T43) TȼU,`Zx.r<"&C0)A"!fQҞ]8HB vJ:'. Ax#8ǿ_JN R….MiBଔOm8 vc .y .Iĕ@<:nb=hfN^`%vz ]Vbb/@&gy^IK0vM@2R>:إ(4a5<'Q?dM uk[pUi @ae5K7&u 2 T^9a·` @}vmzdP/!eT[ B&R>.1{8$F\U=ƣL nv)o|-ɏ֚ӝ-ey`w5NU: (wl9vRn3E o=_fE*`ӎ"g q)8>ê_/_5Nu@, *GUji,)_ "Dep>7}#Y]65{@lG'Mh#G`OMt~0ǿ5)HZqG AD5ֽp71-3'gW]@7`y@*Fzz?v@P/?!7R[ S,̡_:E.I+?P,jVŋ g?O+zth:k֬L%i_\!hJ@w6PA &ݦS&awjzr59nin,-⧥ǝ/wIP|2]iĄ+lpFIJ2 +!_ĭe.I+n[Ta}}2=b  8ԙhlk\DO`DʄFK6@7Izzv.o iE ѽx8KY4, oO)op zpP0_!Q[4$̡!b'Uu%5kYo |׳_qq#ӧ 8U[Ba9b3E 0c Au\0L)|X{cp$zڪ$Ȯr Qw^V3ė]/9Ni88LZ\^{XO6FӃX-](~ ]H:s\&iVּNJk*γ?髏oLyKpP^ԍƘ{MTꨌgd jʣlL."D4xf B v 4#<ԱD@7J aωP/!M}Q[بuB&P~nxB w_?o2\ påwS,erJj4cv5[c-̮0v@V;^ZwqŠ~] +7QfYT|D] @R 6,"sWjqξ1zeA[Q!hDK# "2L zԩHWJob=նqSYnbNi /& f-B= Ĩ'i8|j1纺yg&!p28>w]ϢNJqN] ?U0 ku%shpP1! //PD' BjN|+5"tw8ۿC8Ey_Fp&FhIR0暱ʆ]-ާѮLP , {@hezbb^BV 쾜cWI|w@[?POT±D9_u'VkKD‘\&inNKU\L_^%9kM:40@>L#!^Gb̪z4LYVEVhd noRҊ;z/)Jҗ.D~ !gؽߐlpP1!e/N؊+̢!8>6 zp[[No vzP[a ursAhĬ d*!EE=ЖPqhCU^zn^ Z˲z6PI mT>*`轜^X34p.߿0s7`>>ɺtEf~2 F+4dâNk%qFv!dc9̲47g?&[[ޭnU"c3 duό.hS@b¥2@ ʈ0;AM:oJF3 o%e erg#,Ei9 GA /P"x貰~7}`P&! gPT3@\Z&׻/w#n=^bqP!3pqUri'B3lXuQkQDEXfbrhczTVd w{il^c:ڊPa@:dt>8515x.k ThH:F3xNw=yfzL߱AS}0|IU.#0*w-֭,hg̓ ҟT4P,! :S)6!B!К"6Wu´o耓#0ֆE٫TtkcncJS M-Uy,}pMMˋ T(a]ǮxI>- Y8r;3;nQcIwS)xW7h'`h/gVaOiPPbmB4]_ssZ;\wQS~L*")yruȚ2y%Gg(Rs xoajohg +M_iq 탓jQܚ;XZ=Vi7_An7F`j*h^JaPjQ#q%D+%\)1~kjOY '<ӉKee <r\zI "6^]󼍧nL+Ŀ3DP v1ZiQPc [MpP/!#Q]B#zk|]UboU?o=Ÿ%7LCR0f7j ٪`d<10싶4P5hↁmJ_S>L@I"ĩhc\.Z^1P'_Mc$4ÿߗ \ e{Nc{@zso,6Mj*38N1%享"_SDvZ.RDe]~ib: L>)Ǚ~X +"Ѝ_|I ^@G?{ 9\:o .@$lOf/<-^P? +8K!("A'}^f+Tޒ-uަ/ iSzH"à00sZXxJ9yOX(ƫL^#FN㬃ͱc]xӇ|>up\=o0w}o{xxyǶ<<<<<<=Sdh01:4gl l{l5veq&qsWz\?oKGO+l3w-$k,#QF(] T]@zH0"p}_~s"0 L!Q3}fdHY)wo[9GG)3RW#Ԓsl x乎6A.wڹlEB0BUBhqLƹ=ѥՇ@ zE鴞ڙ-d,қgzy}s-i 08P=!LlҾ&GDhS;P-i:5랫WZ砿Ζ׏nxnhZOLa('7.@.!݊3e屆&6 Ӆ)_?Io]O]p'/}O'75lRF R-Rrh> .6a+c w9yb$j_07Ɓ{$7?1i 0J%h0GDfd|oW\X%Ʊ6ZUe('lNRoq]P'q~PqP߇ȠdxW fpe޲j$F v㕐xSooz.2@zkuy z3Y5+9`H>h(#a۵o >rWySN>:<@T;qc'$ǼcN)Q}._tG |P)!{ 9[۰XT(B!Шt"FRoW2^کV*޺_?_> Y -ْ+[a)Dono< +%2Z"s3zAA:3+&~)Z4YRg E*{XBmLE6ok&a(MLZEeLrN}.g>_?oۯn?Ӡ`Qs6 :F G&MhXS{e&CE vjM%Mn9y'0!2%6<#N%քIް:߽nP+! ֟xVh,1B!Шt&]qkjZy*=%?=Kyi Ż2$0iR:Ҹ;Ղm3"^\2؆.`?/KP Ɉ4V9o  0֦BS2`@2@5*BD1̚ƲRniV}%Kߴ?4~E!tBRP҈3:b&%8h*rwC8.v 8tr\pDfF4GV0![jahƠj ,^R%r wXE ᑆXKSP(! W7Wѡ Dg"&"-Y2J@8.n<PMjEf,yEjR֧8s-5 z<gew|33݊FrmraԕBqd^ӉPM^ـ8-JHG$eP.! _U[%qFTwReeҸ??38#%w!A%2Ϊ:ޥ^U;'^#zAe>*g ҫ}[7P#|aM1,%r"L"V_>{؟Vgg9Ԋ<37-f@_EMBx X }TP1Lavc57.107.100B6w𤹹F㫪8UU%JWœ Y8{n/FW14 c \ɟѨUg(2^upv(o}:5h z[f2j՞wk& 9NoB< 1 S"UXTÊz7Q54HW%)P%a I捫[O4-KޒU4&_83U%JWŏ_~P lXg9ɕ >9 ?8UE@WL_tDt&v.Ώ s*ǏuGæj{E3`N{\pbs:":x8P-! R) %XgWycS4/ },J'j:cFhm4B2gFjr@t oN N(o8(%@*' 9K*EM VJgMX szA8e6m9=ҫ4:Wex>ߠ"WR[lТ5pHZzj]檢dIN*O4@3C{9--|O˓N*P8q Y`Zmjk,FF8ắFC;\&\ CLCdXloB|.ܔ<;ހtn-6ie1;&D'xmaobr@tqюYZlVcd^3?py<~8*]vT/'|pQmk3^:_f{֧bN1` VR`S8ne\G\&-?ϔn=9%8j5vKu.U p7E a%aAP0!?Q[) 3Vǡܼ%^|d5QL^k(SeA,+~E1qؖJٵHafx(aT;=q"EVfTK77>M?>컛(7-jwei.`&o nUHy8 iЊ3s֯w}L^ЛͰ5v#(#zޠQ2/k"V$L ^CpGҎMOy(tvhRlj쑒/Mٌ8%3.݂s _$)ٖ: гg =EGOG#ZijỀP/! MSZiC>͢ 5)w%g\\\Wz?y_kܔ,w'g3O֭b`\޺^YJxB}`(j!Jf,טR;w'@|@J>j%:tpN@An€b O:eWR"-~=%k7|G@0q;աDuϛVu̼{_nr%U}ùU+Bv!D@PAbFLݖp-N_ {4 *.o \0LAXDL<`tg?hy@!5y/V4Ju5xގ 80tIQz@c.&%5B`qLf " ٕz8P.!G]oc5q:ߖ?QIT7,ٹaP :yg1Yl}F02`5X2rpKtð#^@ ~[i6O)NpH"06C|n:W&Ne?X)z{A a5g 8/2mռAЪ6ʰ?>+||ƀ)+` O?P ?>rf/8PB!Ll_ؖf;sf5&Blb^jM8f_rϷYĻHeG%wT%F}vAVE)"V/ ڸPNq ڛR% ?lM>fMvE*I?H% Q+->2A\3g/i7/TƎö$\rD**Z!"&s[ J #96aJp^hu];_]QK6.?qՖ/&ժXʷ85̾ɴ #$BA) f)f]ſ:d?mgW_rgyqW7w{@FL :a+2ΘFl.}tY3 -PoT BMN )^1I~nv>y$"ખkbt&6[rSyW 6=¥´ԧ/.= 8>3tҩߍ ]P%!{ KXDP$! ãD*+U(._PFX9EjSWN:|x-rA J L'n׸rhKX'?Z UȂN&=b PLx&6jlŞcvb/O[\K;r$zP1! WSl$iQR%^T7ҵ.~E㰲"fn<ב8p]xgɓyIcQd_#V<ߪǿaZ=v $_4f~Ȩ(8&4Ɉ >I>yop{F|}L]qpEe Űe6܍]j#d&I+s\TW*joj]׀aN'>x@W#kW.8̱ƶH?!v>TX;i Ke:'CD@XT54K8#h: )=}D"О۱xi-hi"-njBth ~p Ð۞lÑ:8P1!٫V( {WC|d<>s;Z#"|]u#q czq'FDʼn@\X97i^9G"9qPLkE8uI]l(M u{y-` <ǡmSN|~Y Z7Iv{7[MPn+CO{ mQ!DN_V<2TTU__9iV 1-xG&~ 4fY'@pp!sa G訂q0>Ne|E}=SnQ`Ol^%V7?I}l_' wߵ6HDP.!ݿTv8"#pIhɪ˄yV<+o5Ǵ̷+>n( LF^2zk8PN*7xG r kӼSK+}\$Vjtc&F'ac< !*>/l˶rnv*f ~Gh4ǥnb`4j{l?-F2ڠ{HepEpQR/8ֿ*Mڬ9[saRU|%m] 7Vk[rsǼw*@_d3ru8X6tx> 4u{ X}o֚ _ y )Y1pP1_!iU\ 2#B_{|%ZJ=J447'(nZt_i<}8ANP0VO(~n) 1E~+] 5Ӊ-&[-?JP5Fi =?W)!l|B2f3LNM`2]dtVxc""Co'+>%A߀P1!~Tت,56D$ЙH=RQs$eǖ{j|Wm 7Ay3 }K5>[\n;UVSXƸ)t٧E#3G E5+$+JW>u[?j-(`mƩߎ,K.v"U%9X'C< )5gqFf/E}vչ'.UQJmAS$XXʇQZJ/$lomLꦘf@09\oTBK͂0=!5- WqL?[8@%)?JpÿP/!~VX U8B'иiM W:]^|}MSio!w*:Ñ5GW[$PTOs >b uNoc݄vE[ZZa5BqccF@;e) "lԑԀ;N:oox#ZU;:2P.!TeQB#+TtnXq\~sG_k!o:zLDRn5:H,yLo{=[yĨ;oUDR7h2"<2D󄵊s4_\gc}|h .Z6l 2IXTDN6t\ Xe4>@%(-Ru!=_&>"[gj,U"%unxIS}fZS} 5O._} $2+(& p6Fˮ:g,,syCd?w@oDOD8[ }\dZ"Aq _wNPv_KHa @Y'a8ypP0?!T Fњl)n8K[IJ+ L"T7|lTtª( k(P5͙\8ldA=ȓc8;Af(V}[!Ǣ{oZGnz~>5>0T9wnPBRUԨzy n4\MuΓ^|0qcFyn>98c/8έ`S%І= Ϣhz呒Y7T;|K~+ ݟHtQ8YK/<5DԷ:"\-k/ur˫<܊`^sNa z0pӤA(q[ `Ռ>#NP.! WVT`9AwIS{}2rͩáNktC$f9b*&-mMgur&Gq2Y Y!)p3[kL,dTgn/πh'$Jk&[eqjW}8N"=ao.F_BsKx@.t(k@L}eG)ofVbm \ksXW⎯oZ~dc!CIJN]z?qw?41 Tasp AQmj8HL;hkE?=̅HJ* 7㟬jP/! osUSŢMee'} >gJ_aR%U yr]h"L:HYsù[ЈHf﹋W6&%rty+h\轥~^'m˱2ڕzt>fįnϏtiN }fҎ]=Lr'apz{sѲ <9\1UFӌ̹u']n>}20ˊA)Ig@|ѓ#Gq$c)]V| ex"GsZeiuU0CY/h-6[Dx+41u`=s:YpuG;ua*G7ɀ ޤ| BZV`V:Zibj7P-!Y~wQ[a C_[UN~xx_9-zSd@$='zW.ƌ2EIeQu(iphѬz:dTK%)Uص(tNi[LқG)@}< K7@A=I= J /97,d[o ZU mSx$/**u7I\9Vqש?!4^m]Њp9 ri^3L!pձBؚU&có' ^Ħ3w ;I- u?@?E'7Fm3DMnP.!wU[5'~?N||ܼլ^(۪/MG=$h~99sc1 M]qkv*)C~% :rO#4ܧq}6񽨿W dWKQw:PErSW\hIAo!NU,TEz-:AFz}hzeZSԅUIsJ.+w|~JjOooM)¼1D݄[!.})wO\ |^BtGF.D>Kₔ@YmrG@4@vL.A,GgnP+!+ ߷TةsvF.굗W{i_Mx~bJB, wmb8P0ƹ2d]H} BD^mkE*zm_2Ӫұ7 9 NֶXz}SX]@KҶ˹N?8.T×\uӵO)$Ҧ[w 󗌕pUwek;@VI $_R6}5~? ɪOà Ft-+:p fA,SϰqRgj6ه9oSTְ SΨf_ /+} WPK!L uQQdLoی~}5Uk]~޾1Uq!|Lٳ>nW^ rUxD( hpvwp,fx86G-gps)XlK~3tS .>fc?vJeQ%NcffQR2_pC-˙t?_.Ѧ'w>vy7OTH ԃ) < Μ=L& d1&{'gcDcK O1 c{h[a2]2kL[nkn25Zm ^ξٮzk\yxH9C2C.%j!t Y+L;.5٭,HHu@1g]vgb:{b=n bf >Pt∻W؁1}jٛ ǔӮ\RCr*P+?!{ Y[Y5]B&ЈWF)2IɒH=JQ]d-b.[n!tW%fv8G6ц|<! ®Fs xSC'tRfL^2IR;kYI$t< 3[y_dЧO?f3| P,!?V4I B$ИjI7LKηuu*L=oS<ՀOv誚n}4fBVh%p )c%%C%q ~!s %09( mոˬ1%m7ٖkB-{u3W*o HVQWva=EОC?MO$-u.qKwZ]pI BhD:1E Uzʚߝ]JkP^h %m:OiR-L?d } 4[+]QaQO$RL.)s^<`Kǐ"4} F#OVR_ NÓ2!P+!aUPt@Bkй*^\z^]L{^K`o`|lHag."d+gW*4Nhp#WR:Fl~#)JŪI G\Fģt4~yYbFl?"7AnFnnjg \D*c# 4noO>dnTKrYJ3EGLe]Te2mv"Mgwv7mcs<x+MVJN[ 5U qLIY &mلP$6HP,?! Tqˡ37.xjedOMD?]VԊg[ᭀq$9Mj9hjQ:QXQ0o8  ῆ|*H녨g91fPK lpeA fSx!, Aq; ե ן6!{UtԦ6^G> `gP.?!#3SSa('BcLϟ:\{dP{8OP,8,U''U!::'%q^KT]] |axF,;Dyㄡ¤m]JںJx }\勎{[7FZBmkiX @A|)lh{ #74ޚWe:b5B=F7괔.quYBEY}{ aCj0\B`щҎl~z11_GH/>ic*W,bk;cSe|ެ1JX@?n7O D'@:Vf>^ғNpǯu5Њ"-*mxqE)W$HHf^fV}GDIlՎF&lLht\sb#ǂ[Z-E%Њ~ ߙʯ墳^Fom]W kdrLm<@DJE`q5@ ++4]^sj'BK?q݊^t%tW0e/OwKS3@*)8PC!L5y2 YhOH5a,\3]wWϱgnw5= ]LBݶõ[Lfb hKadr&/_ER ]2|ՉLVArU Viw:nӁQ>=Mjx:!j!L@$n,vpizn8FC?<>2G(ljMUT0ૺVLi7GOVr嗱!2HhNFy 'Ӓg\R2U7Vu_OWu8{^xۛ8GbNeWuZw(HPXRa-:[r Tpx{sи<-n\s ϩQ^3eXOO jw5v{}^\Cz8Z0 Eu (aF6XN'5n|1j@12+ DU8עzj5hRILTwPjѠ3@PX(Ԕ@YBЈ"-BA2/U4fOZ]]\7sL{K/a INUáMD+=v  gveH|h1w~>+#ɂq6MU,-vY/~ >>8P/ {RDz%]eڢj/Qjoν(:]E`c3wGFX9&֍T+ @KI '$z%͏C/؁p<2@pW I[ک,$M=m{h9|ߌ}ICb%e0_)D-CbBDzEjh5[no44@!aT 8oyq@Rs `U=>i<= 'y0X)CJ asq%qnW o]x_XחΪ6.ѳ5A~ _BT dpS#vޱLjpP&!oVSXNE茹UIh"Gs銉5hspqo8 %g} hItCg)-V:.IJ(\Eb|ht2? xP>kWq7uc)-7ir`ۙT!(KpiVm@Ţ &dM%v2E/m稭MۻC RDT$QX C"wWZŁNАbGd(ZSRmbw& P,! [dUPl+D'9U]~ RVkSTS՟|8zq3aNnbØ2bUk!VF6+WuUs3c|jGj?!ŽYEPv H0;lN 8v^٘U5xTW[ۖ> o6{9˜ϼD@-RDD!Љ|:':U:*H2[/l %㪼(fl❛tk6C%r>ɬy 2n8^t= 7Ls>ҭi b"]â_8c/Mmuw=:ޯ:JbL 2 m5>[s:e"|(7YN=੓wR9Գx\ƿrbgg1`%P+!+'߯Sҡ D BjЈ=iT-jչOYk$CA22,qv#zF>@ H7+X&gr GR M:e,ҪO<_JQN"/NDyYwM,ڎcJNlJ{JKEXtg'HcNţxy*p78#U_ @ '}vDAeh$(lަ!LYF<ًk/zװ.{gySP8gW)fYiRoEitv'R01{tR" `05XZ >Xk~F|m'5Q bT8Tc,=#d~ i"vRRH*WJjy{n;R!t8<0P'!{ U(!Аw3S.T)l侚?62<*ҮqO^iJ@Z%! oN\i;b%E[FqhFsxz1/տvzpbSqF3HٻGð}J %=v66] NI{@A'3f B^aVxY{LT˨g*J[$/xfKijj6R 3oBC_NZHt@8/0<`P.!لfB z^(H:V+RFV,R+%z٠ y2*t%&b:35jLK^  wx ۸݌:&Z,tWCXuEsVIH*4kh*޴ N~2ԧ]s Gų䷰n",Ҁ )uE/I,j ]L{ԢA"Z(ўG4k4'J8_ xc WjCly;iOq O2c% }˃ RYdж;p)SI ʗKP9 +(z)k:ytғd˩/?5Y9-n @H Zy9zh?~rBOmސ*"$ Pҋ5ͣ= !+iY`' ZF}(EAmnl5! .áY?Pj'G{ ut)tύ-֍=4%ZL]Nf.j_ߞؾLMgR@-D23<t]sކ#luyX5pFv3 J$ԅvY4hX8\ɧcڄ~uf{z :x StCP< Le "(Պfj!X^޸>f:鍿7XTXQGJȴhܨkJ`Xͨ݌}U)Hf1% w!ݞ#) a0P.M7ij}lNd_GN)!4DUkYMcjUUOeu7,4s:2Z~HM.HJp9GWO=7 D|fӸDQ%g;9oAW 2` kh+.YZR\8 ^S̴;.7A+|D t[O>$أzB/RLOGIFdwH0 QÓĔRR/.F7gFd)n]=Do$0xHzGy.3lRztP,_!{Up1B`4"M &yw}jy?a󿍯0nX}9j Hw1Zx)ƪ{! i޵k&j}wߚ9P+|T= 30Q$x4bg{:>8F'h1e~2M- gVf(F KihUA_*3Hɪ%n-M:sp"F*f1W੏aU2<@+K;_d_(SnL|QfgNp𚺫[̂%kc/Aå2]~9dxް@VP À_P-! TN&8BКZMTTwY)%u?>+{ϭ[&] LykJ숙-4971vJ-&)#+)rߦR3ۮb"@G׎6q.gM{&wT)<&NÛmGK0SҶF?Uŧ\ImI||&_Y5BV(0ˤhy̹*IUT$_5#h`h}4Tb\*(CsRuuq*(_~2$E OmjYaO53uu_ iCL اo_U=$WWW{,z9g~B$yUPh T9)xz!Ko0)wF?Iؕ<!א$a?=If:d\,i&O 9uh;N ٖ)DL%}$ ]C|87; ҞɡYhDWTR'|,Ugt 3x' qS<K2 `] K1W7k?+Xר-P&VM =)sUP}g3հTHyCQ)\uL jx|@VTO'yxlP.!OTYa49FOzΕ%L¥]T`J$xQMrx6+\{PX%p ^ !tcJnmFk94jWb1.wlVCx·߯T~H~ŒJ]0eũ>ˤ'83;^=Ϋ݇@eO@ B@ǀlLk,2h0Ÿ[қMaRTUp* 1D16{J"PD1d|=c~o3bf[L ofi}AɻJ 0 A8\hB8n{'ь"7l02XKe}+]P.?!hPY"P_yR}Mny*k%Ovб$B\v`wb~W5}%4cb \k%}MnyeBdP*>O=CE yZn&!yĬdE$Rr.˥'i~K?x'UvlZݱufyEyY-'b'*﮺3'2 I^BꟇV1$$"fD$UP.!ֿS٩SnW<}S&LG>4~5Fo/nE9o|gd6jPH/Sʂ~hCA/WzYi$3S duЯN',Q812%r3#~6cHƨhc)u>z~8OPG; ~8AA?=-LT@2b EtcLjڡhC'q̬%/Qj8BøK]F71C.9>+x@8 >ܾ߇Xˮ!aT-GjNͨ2qvO넂qQ^м@fCd78h' }>`='<^aP/?! }! fTڳ8մiWrۄOk x O*pSD-yxm ,JA{5ZY]`>)"yU%d^j'ye\*]p<'rX.r聖}vё)dPenZ2=D% >60:QRKҁe"tXM43Vj4oD݇lmߍE\GɼZ|wa@0wvLc6@*a3GO2hJdz\NE0gPG!LPي:jnK>;Ƿt^Iƿ_߹{!X _Mnp_Mඖ*w#դ^!tL8Q};|84zĄ*`g['tKl+#lW#t3t\CL;2~fGޱwyyu:G =`cnO#bX{b\[iTPDgD.Smqԇ?DoϷaHbu7D\tfTcݱp5S{|ԳU׶y߶3{x}o֮qjwοt^߯}n 7}U%p,"VM:e UP5= b֝P_Q}31r0AHQ h+c~6Ki_p8zDLlPPϣ:dP+!~X03 aјt&jǍTԫܕRV#EK@s|mM<%?Nt7QInR:CStp\ǛV{<#VUX~z̠l{kÕid-Mg8A]}\Ǔk0)n9g]Pt#L|kS<:jԫܕRV&=V ǗFg;?tB-!TNݷbJf ދC? $ՈOtCOǀg1N8+N{!z~Hvr@YًcԇdM 7+bO5q(P.?!AWYlDN$kyyK\,V*.Ǘ~<ׅ'`_iRmֵ8fIN ' s3n7ĎN'QK(^>auvUJ*** m'Ҫ,L#?y)^i"XTF(( ШSx[(<#xgĂϻaUy39Û'nC{vqx J*DtZM/KZgUu;YwR]>7ܦsBOF l- dZ f R ']X.oaA^H wLKhr'OONK)/GvL6ыCVǀY:jj g+u>|cKƩ& ?;Y)U*퓝P@…k:'staԬHbiۆsm Z9@6 `dP3!iߴ[뼓$IV*^g>?>$3RGEE',"G0Mho " Dp F祦 O=HDNb"DAnDش`Kζ> kCJy8ZVPZJ[-3iwjM Y:$k:fXj{1ϜXdl _̈#{ӛʰ\bޏ9*w*gtnL Nu^\YN&KPڨ$ƌ+z^@ NiOqP2!_?Sa,Deޫۼ]Jd6U7#MfW6a/arorr0ʱxAuEr%9{^k؊a-o'sfC/f4SBHK+pZ_h+#$Bxi:LnpWV:4Hg5-hKn FH^j˚ H mk 4*\B,5Nx$Vn]j۾h ~PMX*EqRaPqQO68L%>*1L&&O]!L繋#{ [z_''v +PtJVO09أĿP2!R٩e١17,UEҧW;Y(ŤwC>dZ<yp ªXp+ gXȡFvBj@ 6t`ة0ETL2#Q,QrЫH*s_[}js!7*(ZT̛<9sʗ2G4X۝n fa` "xBFoLuDSws#2]M*(8wU[aWXg\ c+q`"oăHfDq#jc PFm%}bLX@1StLnRsŻvFl0Gϣ q|Uf5y%V>r]_+q[ P!\NN|&jP dH7`A|d.\ W`^ ϨY]Β&]fNQ(ػ{ه@ߠfа}~'r9tmWEdPXH2DfАt> ޳TkrIs=gÇ=Эi)͍{uCJ"urɍ8B,d!L*riXpɬpZA (#C-5뿻S5Qެ(MZ>!FAgՕ:( _G5 ;T%/P/!!RXp" Djǯk.)&q%Wx\/es惨g$ēq' TxGxBwF7Ai $ԋcβ.V;FY1_3PBhoeBA.Hگ/MGj]EsLe70jS7@OeV:H92.:OitaH"CEзׯޢo(iWhUu!$/QLo| %DJh /DFA֩:uHcp (V_nqK#*us~jނ iJ{5y+ ON6k} .m\˄P,!C]co\"/ZP3N.W>6d"hy4o.XbP?+u|Z*\b,>,&X;xP-?!QY!TD2zS[U!yy+d<Иr"2($j4x8\Q "UFB@Oސ9堸 :$iPS0V(=|81 2Kz\mtRLJg#8ea/  | eɌfco5qB*C1 m!sw*ۼܾ́dϨrF/JSYd?H1L^yvY\A K3s" +}@fQF3 JNSg>jg}o01񾫃ΪlZco1Vv0b.P._! PXT0D)Ѿ}z YWHzk.Z'Ò|,(,&/dz6 IwKl!d!^!&D36%ffRxTEU17WOʕ~so/;Cڮml%HALݡÅ3So) i`ĠCm CxfR9]!4enYhY;32<Ʃ6VHnRM91iT"O\-UQ{\7p,sWQT▝ԛ(ꠕ8R4L-a*w"#B{h˫7 EXS"gKP.!PYLd9>?K~M3T(*U\a1j:_Fm[%&nNC$Ş*H*cCYK{`q0`A$ڊª/S>ɹz=+$ۉ7=DrxKYٕ4:[v1驆[oO7r֧.tsU.el(Ԟ<-EBLzv7]+Y"YRU\1`撠S4#U?+cImWԏ5N%7K_!P>V{duVE9$u7:-v UF{BR\Q[4Fo` i^08"6y.mP+!O[ c _˫IfNSڿ]yu^rST9!*Qȯ¡% vN/R#Sc 0ƃ辋;o=WY4^m<oK['.m[.ihۣpönKο」$EKtJƭP2G'` GI@!B^TLzO C /jjdӬTWmӮPpJA@qH$,{C(:xp͌#ȊH?@ ո4'=ftR&)D4gc,?/aXWƸpP,!+Xba/'=Zj&V5y?rNcсFR͆\N ]PbK(졃` 0;cR˕ԈzR"h3M=Oy`LC w}Ms( Ic>*PRPpSB3|#wlK}~=yh)ͤCrz%ŸF4*;1szKZj&V5y ਬ!LFrLD"\S:G 62GPt?V Anc際'4:$0Ssnji0"_W|qTB,i쭙xX\;Ҁ83wli=/wA P x˞yk(vtO$Lߗ|M_><|5\_>Y~<:zz{7z=j͵No+݃ TۧXj zL]~{E 9HO3ȇh.5RMPcn{qm"a;Bpv8]iﳾB jͷ_mC ׺ANNP}m2CX2ïlkk@?"5+w#=jUT PD Lm6iĢոlua7pξ7w׏wz'koH@hm9]|'zg@ɍನl]ʂrHr{Z Fs7@4.A`*.kǑ*"݂8Ü`az(dD30Bo0Zu:Ýݩ@7a`f:dwdF6G-ΈΠJ`skoI1 ~? S ~X$5D4c'#Ba1č"s谮^ޖblm6LfdfmL*UOZռ?@AІK~Rغu#9QO8=3]+=G{ʸҀs@EeadƁꗧ{.=lyYjSVP^h HW$.Է6˓hj˟+kF(HdZLe΁&TKP.0:4vhڠek/uuɬD&j<{5Z~ Kr-":} \(́ 8;#8("XcO-bAN.'=`%WaR-}gӏGK[1xX9ȹ]onNRyqWjwπ\`8P/?!ݽuVX.j}ǯmӝFq\YkDz[}Xxۛ6qw.ZMp>'\n!#e螭 L U".zbUQTE;q煇,gjsnXƚl,^BQ ^xa& \R;[>$H3wVxrS1O7O{idžN񧄸jٮVIYn4("И}ħ=i{*^8׶irT VoU2:]w>׆t k.XֵIy {x)!uFu:c0dU_~ͨ@%ҞSP8P.! _7~VYuHBaИ( ڸ񚫬y2+|܇GطF?7@;9:#XEPϣ"{DP`'x{q/;-HbˈQT' | $5}f.  s9#2@K;"gKut:V]. d&7 B!Јkⳬ񬫬y2<:ξ|܏55g&UK[K>#Q hE[./y,YwA!ʀ4moŌbhs`TEo⴪JcGd%É~%q=P1!U`c*H:|2DH_zֲ_[L2lͰ`yQ?^(0+A&74JrdXt84ՀN`F4WX",O-Ԩ73  t@2bM:q>CKO6Ѷ\(9ցMr~9¨l3giZʕ"3VUD^8rŏ Ej!sC"*iq ?O!FS  -7# f>!5Uxxzń*hO0<@6oAҿ[E~C}fP2!ŻvT\nM ؁VǿZwYWuR==}qϚwXhC;Fv.ӣX,nv=G_˯QG,M#ѯFtD,O~15Bҡ|ܗθy8N'(@eqpL0ȴU2$3YY>Ӡ7;~ ȗHsa魃>06jĞ\y#5WAn-B"+Βwe:ja`j\NutmkCRh@AM$n@~0h|ùN 1!w9jY Ț`.8;0"D*׸FX,YfMKP"*LP/!?T`jZ{{+Y%]k/8߯o]u_쁯Ӡ`lZb5Ǫz.@".XaC{d8**۬_Mau`6UtI,~<$]@8uv\V h~DR\ ^/NR+hhZZ ɾ_%9HZ/ƯuV[WYkz0aa1{v\өV&GO84FyG!R?t(d;u@BS,թ0g, ~צh6Va T&`8-3Gp'؂j"P.8P0!{R79T]KU]^^juW D柑;LhfS`Wk;kn2HS2Г&~`P ,( @Of3ljPN{ h -y3zV%>{R ^.Kv,vo6h EX+ћAe_^nѿ$,Tr = w L= Ajf}"S튌k׆mfRx_pxm%knNt;/QoLWy:?mMwl{g㊒ J{.Ŏv vI) RA/mrN6~t߾4yǏ57+nD[EYPl<use.E#268,rLI֌

'|DpP1!/Z@T\BAАW7ߕkk3ߧ|{r{MHBK%?7?dzSβ%k85-iBwC.2[aG>)QP?\SuyƠ\!]¶.U6kgTߝJz%٣(Cz8˴B](n3sB=?"]3 _ TiΡ+͡H>ʚ k=^fg] 0&% p8* F#GR7k^]փ)r3=V::3o~6YV͙f6X5#ҀPVsWSpo§CxSbpP0! A_kR(C+TCwO3sWLOJ)Owbͱ稏tUfI8ش0OzhfS\cn, ̼bw{XYO"u益0YNDIɇhٯP߽S+;ϓtj ¿`c&cz3x[p|OlBo`ǡ< zҼu4[|i|:γXYMg'!(G8j-ʽMG{&}?u菂@{34ɰisVܑgA@HtP(mc[Wa[v=30 d\$-r*n@Uӓ |/aʀiBQZ(/aP-!+_TY3A BB2hH:ֽSx12??7*T9Hy&1rzx<1.< H-=Xs qToKL!51 kщ|"5^5y\ޱkO-ʯROލ0a8"9Ht@ $ B!4ut3"A7fA=9}@KrG{l+i[x Sq0=C$2QeqPD!LOCRAm쵆MHi׳ޫz&@?5Ͻ񇑵?PU0OHd2ۓYk&:P/V]㖘+qrB 9d3 [u]痔 sN-]ЈYQĭ薄ss^ nCg檹UoOx& Jvj.m6wZ-$_U0AQKL2 VG!郉͌Hx.fbţTpS~u֟5ֳ<ze﯂龜8ބ`A#L͹gT!/uW۪ a ~f swX&8/ej"@;INYSۭa"9/sB*6 OU4L3ykߘ nQwfk$Ԓ@<3Wz}M] ٦:>o5z!K?Dbf>:'Jf@+1$M޴ 9t/Er5EIdLQpsb8P(!{ Y ,V:4g*-.&ZSuڟ`=X](s'* 8 GefWlR`4CZq`Fnp rӺgV PN%8#dUj̘@,V JРtb3zk9ե/D=jU}5ٜ%b5SeF Qr56•zL)m*ԻwB7'k߯,?HgWGAP'?!X14hDat"ɭf]UDniS@M!_&xC&{8x~M}Qk5Ř]ԬtiT$.!,SL|MUL/pmhyҕ`'e> w44qh:#CD:U^*뙻U4>ڟ08?/L ;?%}_^N(AHn1V8bh- \+6TՅSBAT)VGZjbjjH,<P+! qVPls9FАU1nxˉR5yfTwrv)'/E#"*"$RrD xW07\>htE3odJY)]xpUocUծR>jV,3MF@5wɠW$ ԁ@$1ۧGcB'h/qi)rkGF.DDMAQ \6. \s>6h y`"XXjl7ޯar:7xnUtXkV H k-ah!@P-!UڠH Шt&]׮$VꮚN#ǹT6<W ا@0@YȎ!&M0UtΤUwIM`ߛHApCNIe\]P:#>5jΦIPNdG,AD.{>x@EIuJ?5|k羴AkEVBu (P7{ĩ"_"F@HKL6\<(TE{k]|0墈(eY^F70Ҁ6)ħP/!%S`;.wAtƵ_ '*W ;~9,e,F:HʣQRhr̨Y#Vĥ,!&UCIDV1V0fN/179uL9$ B+fg+DBrK.$G=HŒ݊\@1EP=~"o%wt97ڨc2[XR&"E4xwܺߝ*!/O5Ryy*mc6balꔥ,{_# B4 v~z1ʭY7e6"4mͨPO۴{ǿejUr3.U[_ȀtPP0_!U-R),)yuy{ɒJT |dHZ.rQXVx(0*~Z`_,"b~z/ c'{yޥ{Lס[`g@}O>7Xxo'*qWB@@h:k?Z* b) zܾ|yVp.L׿?7m1BDO%j;YhR|D`G ҍvQ#Ċ-R{\ .Y8IPI:,6)fK %]l:%n4@~!/@~xtP.!޿RSRNsKKR{v{u?j%a~5>y"|+%bzYR'8j"tR)EO+ܙb\±)鞖 mhݨzxu:u oEhzcy2Kibd},тښ8edlS*.ȍmuYrKEEYPOG]vg:<!-:P2n5=({X1VƱ_|F6Y~yN9xsz;C\eBW3G_ Mbj -‹Ң8P0!OS*N_dTS[mǶ@@D'/dx+T1%[B&Dl2e1>T᭜EÛhS=v%ؒ 0<7w?ybXVXl\=Q]wf>1"0w<,ޡTpY\N7:꩛fh4Mk!^{ng08`hfގђ>ŵA{k.~r~9/|g8^J,wRqPǸ/Nn'A`}R &1oXmW1u y,W_05@q;Wr > qk'91 ~P-!+I>Q(9A'x|޳S8Č\qẑ+bfoUҪc6DŽ8B4):?=؝6z<sga6@W d vDZQ@KIS4VCI9=: m6}` 50yFU Lo+ҮНbAڡG/dz{3몙䌸\qzU<ɫ鱫>:4p=X'5 F.Qܚ;UB%)}OnxƣJ]B 4c:{'< okI[.UӀ|oZ)t_P?!LǷPYLh˹uC$6gIʀ#92ZlځȇNt N =:}B}#hj^'Fc m0;7u`5'4$=Gھ,gaKi0"^- g%6+%CN3SiR,1yS\_7/#y2۟Ӎ8ZW 03F:[D&&?Ė\2(rGyi*~/D5LE(aEG $.ɿ&r`ŽcgQy9j?fTvLVAp>. l(&fqBV@ӂdzF@rR1eI :<ܸP&_!{ XahJB!И"=SO_M`{K}s ` tB$]ΦO4(b˃T2.`=tm6GP*?!_`UV ɡixJ^j1u֥(D&BQs粹d|*\;xnFlUm!Z`=R1"V+ǻXaO6Z.zwAԋWqv&zF^G#}B|pBҰc +bk#3LRxL"Lb E׏;wZF.QPzި`#.>\|H/7 '&bhq@lǏ{5da!F - IC|ɩ<~WeStu籷> pmxYhP)!Tɠ̅NNdѹ~ٓ/~ʫ.TUi^BWөOYUReu\?RDO\#qwXkl}=fĨG{gϔ+}oW9NjMnH*OO=rwEEL1Y]GJy2E*x) wipXd@;ٞ财t-Њ:7:ֱUYu¯+OA_c.HQRk3a[Ͷ W+j|cfvu=6Lb(|zC.%#|?7cg<&P V0pP1!UES!HB"Y\蒂Tyjud6e$$٦xmb\|I qƴ9QP#5w#2§3# q^&)ćLDzQӭ~]螟3n8i{&sN~/;W BrEY/sdپ,Ѻj,pms$'IVMgК1xY㿂smSzz^׷\W~ħ56"//fipƟoבq6&sl%&tv+PڦtBmr;8:D Ͱ HT3/.U=P*NbX}dǪN1%fǬǧ7c^ѵ 3GcA98P*!ؙH E=qT|Iu&J&ho!Ŝv1\ljWѶ4IgZ2 r⎄fKe&q|l%dh*гD~#+.}5 ,Q.@€ݞRg ,G0Et/"(?뢇KMtoKި t7\ֽ.nT1d%I4q5`9^? Ë--[oX L-ARo7`@h>輀P0!{HZ "3;Ixk5ZdO5;g_O=b -qE^pYP2$DAS4p}ꀼX i$A[(ty/AP錆<'2Є $Zꪝr^F@ /gKUHz q\a9_ŒoC3=Y@*<{H̜P:ЩDS^/7k5ZdO5]9)@J׭(d2D9r&Tu7*]-VzTLVYFM Ϣ7Ô.^nh޾mil+@=x)|aJv-!$n3FV:"U]k/5\<=`4ŨAEF(4&u2ά_S +K1d K+?y!YRQj4Lꎬ\Otmd\fOgYRExP2![HY8Hy&MިWgO_"qAN"mr'l%3¯ڌR}Xr=\FZ|$]k(Wv΀NT($L%)In3wkoǺw;S7 ߔ /e&V[tz))<eXqu+ga角| T9a0Nea 1eg 4Uq7z9UlO7II7[[m-4YО@;8@,UʝN68Hkaxy,b@% \&3«s` o&Ewv}eP3!![̤zܽxVE̕r8l eP:'DR,TQG $@ ʃCs)Ç/Õ^f0IWB012f@d )/(ݗuoĪtFԡPww{NNuUBA:ߡF`_NÑg}Kf9١L$55 ְVA*AHSPF7 #z?+UTs)>EBc~zDFP)qy]/5 QVƘVȾ<4DLTzV{*z,7qz=rp3bp=L>~@fCv[ /d e#};cKקP1!9#^ꯙJ2ReuY]sө%UGjļrƾܧ`+89WKY񊻯VW[߳RnZqԶm4Ā^0ضC gGM qh@]$ @{Heֲsi\p Tpp5UYFby I'R%mœ; fڹ,UTfW <1+Y3'X9W:5=pLlxX|\/(Cu5y-sKMϴd`:/?E xR|ᒣ;Y )x5킡' P\˘b-5.|E)4?rRm/7;pUA6exP2?!o|Q[H)1fR8H7sֻ_?~@u0fDrSc/nqET1tЯz 1 ,6]wT%0؀nBcIYz)pɩ@ K2!Lμ rew۴L74e@X*& WIH)Eoc8D&.9*/^YUѾ2]x~o\7F oQ a|') 76x %rT8_ޱN%RG<5KoT Bq9`h,q@,`j,/ӝJ /? K$KP3!}?P[YI #{L.1EjUs֨焹˯P!awu!`(teՁ3 @46xyVs:uWPaHh\$Ҁ]6d;+3*А oe,./Čp  PK/;B҉A Z8zU߄Vh#L_-ƀE 1$M!x^xɓY\ewyMVf\8YE\ XݸXa+z[h3zʻ]`@8SN~[pIyV`}MÙEkST9b49>Wjїv"O@^5P2!P[7&p|ݯdVJ3`UneZ"hq }]ՕǞؑ"]9ECqŚӄ,#qB)XUAxʩ'z&]vu%.f LIV h~qJ`7Y'~j ˈ&@Ce)Gxv;Z@~nY9LK<$'HO^qˊ2+Y]s%W`.s2xL7H*YB⪂ɃR,݁fRZ!Gm&.@TɄ;,ֻ7Ow`E~^-:hD/5h2ǡeeڼR\?-?4P&T8P0?!+o>OY"W BO^QSw|H"iRۭh'SJ4F5MЁꩍs|r_8 η.Y6Vf#À%† ?l | M~45WLU37&N*wsvyS T x϶  o"ׁu>"+M"=quuQ9/vs_7vyFGi;ldОQe9F!H]kU5Bp[:#<VXD`ʆ f^@痗P=/4t b_k 8[C'2\?_?f4)`0 0 CPG!L}5`Z\2{ml꽾o_%}}ۋ' SvMTϫ卑6omQ-:IϞ^ۋ_+_zH#$ٽx/E_;Yomy^gü(\ż3# azuDCˁ~qg ke.1py %(2ɰPf<:BQ|r.a9~dD`uyG.;PS6cΖP`L$Lh $'X>W |u}^Y@6 ~A2 ЬQ`P(!{SHv 8޳|]q^:JjNxmM`AuHGE} QJ9(ڈhf46̋Vdl/UFx4%.$:º< n2ӿ:ӳVBMX[Sچ$Љ/B QVZ;r_'Bh0 4UrqXɻtFtu@DqETuӛ>.ZVURsmlo_{#&;n2wؼ^?[q'ip+ uvSl0_P/! \38󦌲Ty*(]q0&o6LS-T}>PN>3M*Q[*gc E4W$_0W[IJo1Ke肬1;2 k;TG[|}fحk7fU4 E^+]B6s@/ 㓁>P2?!ɯ(TǮ|=q*oTd]V7BN,l֛^ꂲâ9)X&CUv՗2$dn?y?~ ;JO(י(\_ftygmS ֌O O D.-o?q] 6ϒWOVPTp]XQV++)n3` LIvo&wGJp鸧oGnOZz${dPK\Bc^tיYcQ8~Ox|-\S=kҋÛ$Aa ]rh'|N׺ 2kV ̂~f'ɰ|oz'塚xdMBQaP> LB M`锤ɥ|JU'YH_9yzj6GvOh}}(  ( ߣЂ-5UBa/x*=Iw=pHM4R(@d̹QHd}Di)^/*+ vy)/qFcё orI Љ_gE&w}<1ƙy,;a\E^ߕXA=/D{ /jaO;;6\`{ TJҠUQ5<<;OQe=:K(FDZ뫪vZZtƯ`/f AԤ6t{+,UL sSTD3WC&t8T7ɖARډҬ2*ֶ)3IRhiД`,#:q7@ n1hؚ/V ]_6fp:z=~.{]NP1!Y`ld84=~'HBV+qs5.z `z@x~ztҩ([+)sI~w=o˿wqԣ7mI߯ ɣTl:%/ŞN.g{I3D/nxωZ!+URUF-q_ pZD t%YcLzhj8/ա[^&]3Rvk;q%qZ+-6qV{ XlJ%S+ĀZV8wr0yp@@ |H˙+w>P1! ia(EQeWTFZM굒W>"Y2Cn-X 0=bޑ?,pV&8Sŀ )=)UB@ F Iθ# kLԙsqs|p94GD꯸V]Vix +0gdS7+0W.ΰҦ-R"]YWm1s8~j jM굒W>"WQ&fJn׷ ׽WԘ)@ K{J#urQ\_HQiq:u%;FAr#WN-챍'}@z (oi65~Qq!7P/!qZ.c(y-E䫔Eh^Q HIAp%7Oyg6o3{>qa},UEk -{Xax8|۝fULvoӵOepƝ/n9D%yR 4H@'2 8;rhT$b1bh6"ny;E䫔Eh^k uf79 !uK0x+PSAMQ:6$N38ETh%DAPm~I: Ed8AKw2׾ܗK92wG{9-q$˭ Q]ZߞP0!Y#[$0jwqZ֭Ui*saxЍ`x|҄#Kh+1]JOyX1ne⇕&.$)^:͞fYǷ^q ZUThל(LeAԨ7^:njڪ.U]x~OײXuv\fX ,31e@DCN†\iTojZ^;qvGGg'G MkHN3JbP'!pJ)XD0 C/b*k+zP2!#N[ؖ*!4?N+KuW**s/?7B?/!bJ]w:lu#<1N\̹_1@=Sap#t/_D!^X;II)Cwos# 7DW0ee?vn-6LҐ"C85!e})ϜЎ#R8~R] J3SW{SI׉23g?5W7̿GrliPOLWcç^B!++ig:!gfrPFfBPIخ}27 i~fV:MzG}БP5N"] 4oMO8߭@KL'|k~`׏p V2f5!P0!I;QXRCCzqϷ燚߷RTI[T17}mYrN# y,szTfggGۥkD< }{{hwVA+t4f~vW* @LJ`"ә@/'ū=掯po7S ]0G%V00A3IZ02}V4Xj=u8m\*%}[<=DYNzKxs4ѿkCD9*/]L+1{gz0یCI[/Z<ʎ(+TMIsˠ vu5[Qr@ `j mP0_!}QP|{Mstn緩Zo3Uע(< M b)00N02BEsZ]!5A*sDž!{zUx1lX%Y4֦S] d#4gi}O'Ups+pd5x!aD Ekt vUP/?!տ|P\`] D3h72 I)ם{?:|V"ȈaOv42rڱN[q_1_ KI|+ A&SJ',\tz 6W۫gY]LA0' .B;"_[fԤUrTF2뎫zR&'??/wl)~o-KjQg\X(C|(A 1TFga9ؚ+z9Z{l`GL,8:M{(X.o<[ |GD&2yrx,\5c}ZpP0!+S[i,- B|s<ǵV]V_z@b> %FVm( -?-a}qh+x}\i{/+D8%5xml٤ spP3!iQ$655쩾):jW_8_r90= q0P"*jPڔePxvo|A(C덾+cb`^q, 3)_֟'M_659_FJ@~GbJ/w+M2Ah}뇋c7p\Z(]Pc0F|nfk]GoX'/^}u7ޣ^wZԮq~&Qהx;˯%DtSyc1bB>ޣ^56W~.z,x[xOLyꣅ v_ II} @KnԈ^~Pr/m$}A5]P-_!+ R[h^N2qn̽jp?wWA=,Jq|4@Jq$L|+tzI aM{y-I0DX`şN0[+G7uinh3c8"bؖ1pn."{&g?T̗o-b/GE@|nrInt&o yUǎ{}eVg` æh=D-} 0$!-$1x<=֣ m 0Ϧ/N;"IRp đRA pMUX-AЀ~P:!L PSDP]&,y7||g}隿ֳm!$½/N3R.#eU &(x0eI<聆zuNS.dEb\W~8+'wc> =oyx0w^QXCvH]CM9Q  #8jѶ1y lmC 2o~c8ZB^]ZN{rӟo@?ժYUY<5LMt&cGTgU~~Ϗ?}[o9װG0CoKPBuDK.eBk0cnًђDw~eAi3;E:-XXCOD,!ChDUWjuW8W-^uO Z`B@PFQ y,AQ^zn`֑z֣@Ej$7o<%c_8Ư~t Ȁi0cڜiY (]IAV4W`j P1! [R4goW{^5I\djiv &HR # HZ tɨRi#AP@@QPLBqnh6<Ȥ1;Kʈ IxK>16V_䀡uLa䗋ޏ\(γ~^0C_'~t4:3-#j3ZwvsI>]ei8ϕt.f NSAhDku/βcZw]W`< Sk"U37dNE  : BP];u߼|5WC9LpT~EՎp ܶY?6ʾ|`;`=8F?Rg!P1?!;ʺ86^J^ܿ:=nC2ryY<",H 5R`*RwGآCP v(%9[EgYN>(Gi8rvbJpK9VoG7tغ. M[?Cӕa`ˣ_꛾-:FX٥}}`emqvf\)QTYO׌VMh[_w1)uM0a Uo֝"NO s/bJoͫ GJ>[{آxU!U/]~ :)$W~aV^];'i.φ")Lx-|_Z_RE wbV\P3! [ңo[WƂyyy淮7qa68/X/$Z73.Y]>9`ɠ蜌OP%GzI jV ' Sb@.S{`ڐչ,O)U+/(Vb;jjcI猀cR" >Xg02_r>O^f/%>8ybޖ{'? t#eҥ6T[A$oq˫^^^qy_ $'a8LminyAF"N׫ɧֺIu /*(c<]~;4i@1" $8Ĝ.p J Au^eV\{KfN 9`(/3^@g~0oS +v{P0! S a's+w4)}닼y =)p6F>uK K1D…culnRە!5pa=Xa2IpÖA*^6~ϐӯ$mnpI3dPcV^V(?@XNvzq8]9pQჿ:dxhWAD@, Jdu%WWac0Fmp2in hvqzAW\aN0i›bߛjEV ФvI}oI64I@\{+~  ,2l-P0! uT[ʙ ǫ>4k8.U39`JMyŲY)Z\񀦝"SEx1OGL ˊ ho./&6JYW RGryrACMe)L0>W ˜vnmOB~f <]Bge WXx\u^<5~8ho ?1le*3Z#6']˄ҟ A_l (5vsrq۔bA).dB)А|O8猹V}8U__5j4"9m O:LyD\Ӌh5"_ -3 @P9sqBS?\W Fଷ,F Hg-Bro!}{21Au@a;4=/b1PF@͠H~NP/!}lS\#3CILǒ^YW{{n4+Ɇ:հyj,fFבf!_ȩ5m+0MP5HiW۱xRwp[dp"nxOCE\dnxqU.Z{It~~|F$΅βzl`b>9g݇XɌtAZ%T c"M âM_okռyEu]{oN%)X %[{i1ZQ SOܓo'H5&F^:Faҧ&2V~( {VNJU֪2j;":UH'a5ZM']|8>ɍԓ$N)Tpޓ0ƪ%%mr iQ-h֧Ku[Q%~y_Gg积}f'] h>BJp0݋-T"5h|JϟDWeKWѿL2N#lkYtӍE? n]ǢYִ\s  ξ8_$DsNK)*,-Z!^pp>/GmWM<yX8P/?! S\ 13A5f*&YkRҚOY_uL3A$o- /+b:m t (.PdA]RiAc Džj Kg:Ju?VAsOi|L"MUL7ӼW mP`Z,-\0KgBs`*NoNoYbf V$'>YkJKJ?O]eq]O449 pe2>q3Sն}_NpL>b3 cVճdX)2JQ_pgLة LJZP6ڜ6UW6.uuNNCDZv}d;5U~33~)u< "pE{,9Wes[Е(dO@a2|0Pރe@wy#C!曉 -0}У#ac"-C uk>+p=_N' &UTD>T )& (*fX'[%BR$@$,T.v59ҦBMߜ7D<@-Q2PD!LdpN/lģ mjq?_e늒|tCA 6V13(?f:B\{l1^:;"ywnTx]Ǯ0{AjBoqZ]D~\XE$29S[j=Q?sPrJ='BI_@tW$DgVXh18s:&caCB|v"#>YWH'RQ8x?[h`a #N3!61癚o+{nK< C 0"?a Ġl$Ɵ9Ѻ͓[= :&SgqF.ɘaA*bw7A@hK>#?CMkiRLc2/,kҲ Ni T%H§kLp̠j6A(v7H; J?{JT⨤wh)Mb7oŽjVf%2\ P&!{ Zz$ǡU)ZIR<\qƿ_Mat羋 (!3^zG,IQr uWe3UurS0S@y7?~@@/Ђd.% Bд6_Dӻ}*-Ѱ ˣ6_tY"DbEЈtOjIRos[C6V#`N&;oz8Uta1JaS2@{xP-!-UR!] B"Ш6]Vk&u"U]EǽԺw?tA. qwFN`Apgct? 7F-ZԷ&cFJVr s%N7_Yvxζ[ET]w9oP cI.v<,DDQSC8zNUWiEɗZ>8Ⱥ,5fFM#5) HDEfTā:XI>m |, . wp>wŠ@\vzS7"Le${ ivowvR4J{@WɋEf7ߞ^/sh;%RͅsGUB%G,UC#;9,ܟKImez>`51F_c"BBlE.IhDro:U%I2>R zd蜡XJb h|<|axjp0_ʵt1QJ>=+PsHYqR`#jy1 QKy"8P-_! S۠:Uޚ۪dyw~OBعz^̴JC[("R]&ȱR Z"E>Ьt _`D޾#`Ti=pY ~Y#hmuD&Qs*+X 7QsaɷkwS-d,io+Zьoh-Om*"=ƥUg\ΫϭW2N.~@ UXFkjHѡEY@95rjsNDjq dNR@ 1NkvBIxQ neWrbHTNf[@{0dP0! WSZJC[NγWUJ┑Uh<s_:^C؎i#ݸ9L~<Ӓ~˻X{{ : ,c7@A'X/q*P[~SoS'Zhu3$4r|L <-mSbM|nJZK+m&b> W[MʞtIGSY,5CY2~)"ѫxi fgEƧɡ-gu',(P'E>D[E޼Q>+\e욀Wݺa M `!U+p]׽ qcph۪IcK\X =P-!R۠S<ЬuƶỲxo69DW^`2.8i,YU1t`wI*Dn=$0wNj exU> ˌj%=0po[ 0 ϚJb-YS+z(̲ x"kQPc7=;SJ5in EQĬz2oP^%ui@ j0/kGutL,326n?1‡ j!t.GgYaX J9]_c};CAg<0"@~T}in˶w ^3pP1?!N[hs9 f!+;?R3n>=5mc;ν)p} s1w@Llw41nI\勦-:fNJI<(ߤjW"uxD[sck sV̠X 3㗞[c$ֆ=+N)5pޘԜ]|.hU{L8ssKZEįbjraE~%O~3wn/m^Uوb-\d @YG{AwqNL_ f+H7ֹUZm9SnhD+:KA1|ٝMtFc$=ċ+Qlx'd" NleW@{oY1H!<4)#JOo?qÍ3y 3<' ~2p3lo!|1ϰٯuȴ(S6Rd<ٮ_lf7y~wrZxۿh;Y[gX;'Cl /LPLף`0}~_(00y6>꡼e;[ɆB(ɶ1&2Gn\[Wz8 D>/#0nP,  B$5ݭ{%V\+UYߏ9ᖁ \JG$!,NL(!ŽWՑnLSUavV= Q-XM,YT$r#"  FPgt>rBځ9L$ jA_l:Uw[Os)xvЗ$X_5KK1rUfֿqštq eiY6*'R*:Mɛ1RM5z;< v~njK O:ݴ&+_ezrFL,j| u}.P*!Q@UF BCИ&=9Eߜ] 2)Vq;j_2H WhfΥe^1.Fw(h(R״C3Cb5Zi4JKWź:ojءVZ+0N£,9b]EqIr%<5 Q!D=DdhYjY "5m5RJLzw3.$^sUȆ3Ҫf3W̅"a.eۢM;h'ȮIdwsHAyb5tgi,gTI2a<)Çk=pP+! kxUڠtCYx-X,RG]֯ {be\ /_U(zUƑ` VS3I_CΰZ =f2eIXOОvfnpآ9^:'dd؈2@B! ~Һ% ъ<:$ĥ{zgt˫~C&`,a-.ev7XDY3 1q#9Ɨ\]vlH2 'sNfou3P,!SڠG :&oUZ*%Z.Uw8nd8@ω.B| 칫n Ԧu|y$zC634ZiDkЏ79 hA g 3j6%tBy{/ ?O@yž C7_ 7^kN%ȶC.@S(d>ЈYU8S|Uj(s*;?pNWhgEx)Q,kA A貊.AWo lW|5*u*i$:*|i*-dR{=Y{*L>T2FWxP-!+ \SYilW Dgѧ=sfjɉ&H x<|+duA*AF аکRntFt`^*m4f^#TvN֤0E$c"~D'@a5R}sx??ҁ띩Ni F Ʋ#`9:FW FoZ~c(_L%!,V<c92th$3/$w'͖,A@WҒeӢEC eo[n睌msZtÕW?Z ^Yup$G4o q&Ld̎EiZ&q=̀5 RS/ƺ`oN) ZDjr4su~׎`}W2&sPb!=N1s`A4Dr/| R0%L*N:pKTr:Ϟ.0˯\kZ a5?IMץ.!;TdH+@`Cͥ?]6ޥe!<+RsckocB:@3^:rxP1!E~Rj+ǢQ*=۞W%I㉜S3}l XفRqvG< ^L?Q p<;2K}BT 3\P i_sAFS$)x“%xn:J]䡏n*g1Ol+3*r0=U8oYV{6#V%`W'gX3x2!ml P3KKWY?~$Ke!2+}|FOq_]:$|2Km:8P-! gP[G!(Dn}kYd>IuW5#Vl~*e{K&ka?K4:O4RB1ƹ1zOlsVh!ބa[ߧgIw[} -Xp8+G=0P/!oRRPd+G!3(Iϵ3E+Xs4# IuK,00ʄ)Sjleʒm.ÌS R y(2|7Xۿm8,\ZR# aw|Bs\´"9TH;/+ Ҷuۣ ,X]M2L4}+^oXqן?~!ŒcJ5ErԋN ĂQxӹ`tf]ھ#BA.gp*O%Z,P*T@frfbY qp%8P.!U$W DQ8fqxRUK%SMee *:-qx,;Px 5K]#<>ñH|qSzјMN8װI[?3y4 Gf$(}" ܭUnG؉ ]\¤29|ުLa#@F UXdu݌0~qa %J|@ V%)L8ep"4ٯ>RUK%SMeeŗWY2d ZZcdo"L,fofq5*+7ǚ^pھwW/,l^Mn i)pP)_!JBjg9kcYtt= {z8}V&&=$JP gA&uDyb%Ju;Z%k6JZjp|S{ҷwͰ2WF+AN4;IB\8bB5Z$x2FyW~e߽Vsh2;ɝ Bߘ s/;SKŊ*LMT|bLk..0U3;Cm=(Zr  ]y` zP? +A¬ҳu^\o^5)=s>!Kp Q@88Õ :h6itP.J2~E7S8uLB"6?1+h @Mk^ƅO|P \0&RbmHsIJ#YM.g7.1H]s0]d~1=Tb 1 ^>wet;@^* ;&Fž BA0HVfp>=]Ju'[Wy^U֥I?r[%r͘s&p$IZE8+I/E`wUʌ|a#WIs-rpszݭj )Z9crâ]aI$(>MU<lh! Փ, /^t\:Nho:*XmFY ˜2CcfÔpP. LI6aZhs<^i)=w7/<]5= &Au}64{Q$ z$ʗ892f2gyĬMT0Z5cLZ[/ ^1 AK@kjE$ݯK+wdg":MLA4[gq\YrH b͹s`J˂#tDB!UuβyZɪy^ҿ_ dEU; 2uAM.E3#lAqV!0؀ψN e!Gy#03Cq# Ir< mg*hP7 {(LBC~kT%^V֟@@E=Y!tKBBj\,ԋsD GH m' (K2t=9)V|QD{X^DZ: B̦˻ഁ wnp1@lAf~L Ҋd)\ Ylme Sq '-+ŪIJ^$ɚxRUqQ BV$mgUc -KJ^r fUiUN#Z4x:]:A"+c ,H߸MORV)9aVEjʌjK2aMܵg%geLٴ$ȡZ06V= xMtk/- Aw` 4 MnR(dP-?! ui#U{zVWkr DDfz[@(B`ޒTK.,q]Ӛ$li4YZH&B΂7C?ϥ0͡I;7A],ӲOz4EPŘbyU%߃ oDfOUfwqQ.<-0n;WzxNvi =sR?2w#⨹VWkr?%)bؐQ`KFira:`8[5L@:@ԣ% |D$j$BP/?! QF F$nYp E|87B tvdSLz B>h'4YUrQ ΜoC(f .=NP]@?$@)'|i$%Ɍ2wbc dZG[d0UDYySZ\~*fK2_|p(b'+H]\,U ŢU{z殦}U$S[ԯnUߕ}Sw GԎ!.Z`,=]~֙, 9@h4ٓbpKZCTVhDb0M9f_u[di&X2s"vgPSLa/ծCzIM\CS940Ѻќo򧏋K]r%d~oGsow@1MɡPC? &&` d'ݫ+Z5ykTM) sSNS?1p(g%wT_>aW*'-e.4o8m;8+Ud|f$e>q c,GrvI`(Pn.{{0~njwT+^^ _~3gάﮀCQE84Ia:Dيo׉z5M߽3@xy^|@w@?9#R'ar DBw hebHO'%G:3WrړV94g&}{?hz -O?2{#ۥ0X ؟b%9z޲mYl8 A>'@Nut]j1mm3B~KŝÆ`׿rXW;[Am iUbR.M C_u3Ͱ.A`LEDꛆ'FS`߶ KICP0 fѢ\s\M|&f ˭^}wq/__[ 6+0p+b5sY۟DB=Ҝ{xǥznο7fM,VYIՖirbAGE/jM#7AyFW`il|dc3HH@ޔa%>ֻq4w}Vq[s>`Bv=ﴩpX)OP-!V- OIWҥMJ|BȚ0B_X18ЈէJVv&M[;ao=TbW rPP U(r2R3m7>nh.ӵdk=N-jhpJR,=Rt<~GM){VFd""UI$&LP==abӳSsqx WW\JHi;.z(o8: ]K=JTZjz{ƤF7H)?h/A/ 5y]P2_!;RiG#m{ddLU3OA$2FA- 88sJ4I#At07H:E΃PѯJ:|nkrUY3&^8 Su.50=8K(i.~ i`ɚDI9 H+wQ @vۣ2C'H&FAbP ؀bѪ(iضjRk.7kVPG ;)w3H< %tzx2`?uݮNY@C1UaLT6ӢM7^/7]UJ{{v,ymg1?JJ&GƓ4Mw(DH[g %lAD'sM6PBMt3,&ݐz|ow 7.W6NbJ 7/^1ΌHF, X(OO*(+P1!V[T٣N+7K^]-<%o{O?I@fى5J^,Rs^TWXV0ymAZÅ"@r-r+En8Rjw <9/, 9LyKj|ҿ7/'O( -2$@P+!_VZ!Ck_i0Ct_ 6!Rw11?~ԁ7rw+"`,ڲƱBg-8l%^ '"}l߫/ZR1\OF%{[} >mkv"fGGZ8K8:9*.e, {@00 lրbd.ttt4X;S5;sƵt:[I@_쫨Vme=p=M@>eށ}ODUf~g|MChKqlKYX­ DwR\YL. F1 ;^$AFS_@P+! SZ.%FE6򆔐Sy]$9;tEx)~dG<)-<#AȹiJ$Ο~SD ah ]6V ΅UXwX nnaq}s'[EgBXZM9QPjpK:n*j#'=L>^E7r%wpc ` 2A|tyi D0D'ИMs/M) q3(M,8'Y(p88u#+,sC q#R`d2z'lHԐ1w+fh7O4ZP$躄pP-! R a9_[[.fbkw{#JT KoxmDYQt#agZ%WSz9!= NqL*2>فQWF+"5-¼$5VXcS5t͏&T2k7=e>gi/bn!Fh2C.'2kWf ۥBkeLMnryќJDQcqj0&#y,$͘umRYt g+<Ճn3Nr”o aVߦX-/*KP.!,S[/*}4.IomlI>SJh2GX" 0B횩 òcކc!)Q\7Kq=Pdg72('w|.3)UL ba Y)k {ަD2xbwe($Nc>԰w7A/]8%y J2ז[9eԦB[j Cгuޫ1JI>ۉ-gOhxV0laXd^ r*L-ZijxG}nIJ*+׼c爠7." 2 ` ϡP.! QX.)Ƽ87U2]K%;L= 2R>WBX@'@1"랺6ۡ@4_iV<^,K[ndaEAqD 8y,e6i7: cKaH\.4`b)>ÛY8M%>P'er UC8Tӷ8T#wOEk Ë2R`.Ȏ̋DŽ7OZAA<=󂾰N)shn|Λز9WfZS?ۡpἬn>@10]k7H.c:pٵէ C4g4Fd yP/kO6P/! _L٩0tbo׉|nqΪ RMjss/Pj{Plo[)Y Pt49eК)V7DQ!2.Ms'(a O&45U}j@ }r!~C= Z259=8`kO g d9{pcMQ/p9A,e I!i2ݦ,ppC-~z6YK^/a?xj}0 ,.@cХ6pP8_!L6 Y+MK1(N/~x㯴Ҡ3wx$ii:,⍂2 WyFYcbF1 D둀BjǓH袊^tٻlq;ľG?踴m1² ٪gfW32SɃc$mߗJ(DpE.9b(x9,"8Fg~'h:ve>o0Ptm$C_.0.,awPk$⯘F^^ Sc` ihJH]ug|cr1|QreΠL1 #O~ykJy@wҏ<2'Ytkfm/cί{^K@Eâ ܪfq^&!A0w#ıXޖqĦR8P'!{Q U F@>7ut;U.Y*]Vo̯AD2ֶAUN&Ed5257eK]蹠pnzh^Gy/$ĂXr~+Z>P|=<2ǔ|:ejt7RQL2;խ]Te_+jU{㵌 C A Oɠd!GnS8zp2Y 6N!}YmZɱOkTP@p. /ΫPP!L| MYD3H5o_=\tT{nu|޽O'韧sH a\^( :uD5푮}sx{ɰLܿ g'kw n儉'[HU;a7Sj{N5r!tEo 4ggbPTT*mSHA=ű.Kf`5 U6A'%Ԓ3W ˰Zgc}>O3+ [aI)lӤZBS |x-%W4%tN~ތ-%٢B2x9'%Wљv,En֟SL72WuTf/RjƵ}˯Ǐ~~q P8߬@"n4yx,dI֟[QY^xmcs]εIS/ݥlSE>gS>3DۦyI }}uǬ"xMaY`5rzC3foF!ue~:9ҕ\0Pgj<9 W~kF֟, mD3©ErmwP)!{oWP(M B/(jGNƫ'%"o &ة;4@qQj*Q)1 zp X7ǝrAVII: ] Vj?j+*NS(L7z3 VU1 *b:NS^6 PTKeZUU 73WLXF B'ЈtkZTjN2iڵ|_ݭTClxlvswG>%Մ+K;ɮ],AOU`g)l3r}^ )@dP/![X$)A63u^H|w|^5?`2PYW*<QJ~sTe S@Ųfy;v4wHt"5ex S@IZtߒ'<ֽ( ur^6y{. )m dhP輸Ë>2ZE8J:,-7+DaBTG9xŪ-U|^5?`)&YuR,-.{p乼bzVX;|5r+lj(5 'ʘwv曔Gv.1 .Of8{|oA(k `(((Nc4K!hP/! Ya6+BC.^9˕`IRdxԔ?X(llXBu{CfzBMl4{H07[o7Uc`L5 q2pVp@㌪$ji ք: Z,l0bѐWܴwr59nxzC7pN~dc 1z6a`Ȧy[+ªM!1PbY  s{*@IRdxԔ?]etmlTj͂I)\*F"x蜤:Żo7PyĴiVk 5p]u3S.И(%~-ݶ*@܀. "0:VsG $#-{̍pP5_!  U3HB3R/wtSUK9qxj|I77_-ш g"lUw049 ha,1> jy2k } 4;bH_wa=ȻUƏ;u;/!U TgՠSSXZPNe*=ѧ w<x?eh2MP4! SکL4!Bmz%{^Z%wŲl4fr=(IsZĸ:rE4w( FAۊ=#NsJ?%TIu 帻{ PiɶЍyv&!`F{m%T+~f3Em\i㾸(%@'Q=VNּ%v{UEO &\|Ey/-WW/x`@N }׵*imRvWHUz&Eby<7Ɖҧ΍SjD71*)`sl&x•ϦZy5}Krҵ׍Zmw7ޠy@_"^`nZxL. FmSD{hzjI-f,Qօv8M1nԅxż  R<|<` &L+8+۽H6S "o" 5/+kqnS-4W#C/@gFY5:ADggIzT-yY}X{乯e@=ֳ11|8 ÈE5! r^uxū;0_Η)GWY`\8NeG»M㈃7p0 3?k8%P6?!)GRZ,a#Bkg׎ɚ8PULh}I^9Yo9h_C?'p:iïP2T״蠢'Ja 9kPEdo Q*̀gwxp"TgO % zL#/"w8;ZΜļI}VdzHv:n~- LTL/X)V*6xZw_oR/&kSڽAV@<-GUw:jVd)!p䒣J4)MYZ0h: %}.ggDmUQ%jCV(OTYw1 3gFsZ?._XgVp+uZQbz@%a/>-YoFP7!QXjg ^=K.L}n}f489o*QE\:-!Ԝ xFQH0?qZJ )W!i P3@Jْv.,SDS.Cr\0f&Y\?tS fopjB,Є^V r;Rxf8X cJŝ1=GsFI 7_?[ݼ|SPSUu1_I EBd&޸S*u8"VESsiA80(y^ZĚf\LѫHg*BR^?0]Uoꢱ>9$`Ѻ-mh؋DȀӏbh |tp8P4_!hQink}g׾|fW9U=}kJ(P_,; +XCClQ^flohhAvd#GA.9Zؗuc 6v}gLvew {"@,x/\Bssߐ8֮ 3SKV#B}c|2ۙpBQܦg CsǟsF5\W?-S轢[L3A$o"F[Y6`t5 C9 Q- X+@W7fSj*Dvsӑ[#S\J3tA3@Ҿc@kgU=_T)goz#Bd!>[P/_! RԢg B{z랷T7ҧ>s_\u Ξj *5s 40QO$I ` l2Mx,^TH;G<cϥюǩn .{^FqڥeO VGQ2t $N' mN)E|\)48\4-UT7ҥyǷ3iFs 8fjUB]G@^N{cgwó,o旡~GwLm~ 淯m^p _~@l@?6%m qBp☬Lq|P-! ͿS]bן^ǽj[I?X`R@PIo:1#XQ/%@dM50y%B416fD,cUM*r: A0;1^{T>ibcZt} |%X%P2s,ti!Zr#⛸@Іw |޳]k/.߯AC2bS r̃6h\,'ƿs^&h p)lhL$ Z^ Օ)oiAfH7[d(H6ܰ0QoP,!PYi8ϟ.;W#XsH*WW7P)xhޝwNcN8vɞnyK:4jlPP ǔ3*@ @}D/toB!ôVǏ,x֬P[u bϞI!Uw{{qPtU ;kGVh9"Gˆ0X%*)h¹{dk+EDzXX{PEwLL [gǓL D@ FP/! S)EI#rOqY9/w-k㾷Wsa |#kCRd|#ޏџ͏e1+@P\LCo}Kk]\r 9Y%+Zc]D)Ҧ`u!X~ >3Lr`rܖ^PA0`ӹ ߖed֞58E^6}o˓-jq^;u7 =rjV+_?*PtiV('@ { a)p2pP.?! oSܘJS߆qDž3^Ϋ=oK?_kfk%4{˂cSA'鐹YU^SG;̶cXu\0Wq|(;yן<~/6yS9h" 9qa dktӡW ]Trgg9Z_':x9Z< fCg48E^7_\ܾ7<Ҩ2ۨBM$^Ba` gx| =r(d TO'6!h@ `Pe3PC_!L6 U.&a6i5 -ɴU_]~ jۆ@SIVxv]A.T/`ά:3rVA>Ĺh$2$adw )tk8Zaug1푎W>k~wn±r䀑 Op ]@,) k(N;BKPשY>G2쌁N\eN{ K*XzH!P]8èFuSpp1jC.)mf:uf8͔JU]5ufq>b k.b?"ͩ25U÷gM@9s6J:N$BH%YXL(x).kBIV7't*֯FoNR'B<,oxc.,?v=VZeг !dw4bHFͫ>L2 t 'wq18+X֟'x%c+|3Iif>✀(6P)!{_W٨"͢sfu]Ld|RuK +,z<^5Upg 1 X4MU%P+wH#l `Dqg/fRp_t-/!N΄FE ZSGҪ2_ى_ķ; 3ݸ6κ>|NEkQxP_;e8J]WV$"?7uVb8P*! xU ̕B%ѹzq7Zei8?|6rO{#ml  E@:q%bQ32 "IZ0^eISW4nogU.Eh#cඟ tAҙx:5Rs\S5[Ix^_}ɔVz"Vfy"UH-4Pm6h>WbH(Z]ѝoy(ay jq*kc JUBw0wAd" qj^L0v\P-?!QbWRaRQ+c\ݥA% n}Q?>4*)tk. @JRPi̿ *g[%3h"y%8E7wQxSH#8Ep«ArKA(zݩqJ9x;DWۚjBZ3Dm-rO<׮!S Dfˍ.<$}Q͔-˞- g""Dik ~zJnޑ>-p@z55BBG{/U@aWeߦ81'BJNP>t '߈#HLJP.!oUuC1hDz}sZjdܪRTxq"Rq_~3vw$#0'#]Sob΋96Llkڅpǻ5D'beɯWtN#1[a.7,YUjAPJL\cl],Dk K6W$I@~ mF]Gc!"=Bd5٪L*ԕ*8 d3Y_=eJ|__ qL%5?WcRɥ A.BP ~,2w>d.G#(Js9SXlaO$MkzFҳtO۰H?=pP/?! iuR.3^Beѹη7TLU#: 2}Q1w*s?ûcXǹw펌 ,ڤ 81 ތr -j[Ƶ2|^&YÐV^%S4输ܟeAnG7J촭Q  eZWӢ.[Xn<+cL&][vpwݪ + g4׎g3w))F Oky"Hm0< 4׃MkD(1 F~P.! C~S[)SB %!7uuy䨩U39^^komE9-޷xz0R 2leҞMD6SG\YȢGoxD%H׾P/! k|QZu Bm{oQ\7+UZ^J=~WgxruHhX p8HleBPĮXl:cģbvO3ZOC Xҝ"P ~sw|7- jZoE֏Z{;;\<$4!hSniuXlTVz[̡2ˬί"n.TO6o/sڤc"=֩$Jw$>r/:PBO鉅B.r0C'2!WWv{#NsuR*񼮀 x &і u vUBP.!+ pQZ má3&jn骘ңڦO:LzMV6d˭ȉ9b-Xi طʥ|xPK"!pqtӔIqAu*X֧]{ϢM.[^_2&Wߐ:=[ҫSi'X b$f' jßjO{:o-NZtW"B-ղHkwRcJj<3I:,ƞ7т,lfb@[:3XksƮ BlH~3Ԟ%q~n.F@<)u>ׇF0p/7 -D(J.PF!L܂D/H1V 9V(J^xy?8wZߙILvӂ Rj @DlĜocŲފx/?_>l4)IW^ I=LbIO0SQG@>ݏm>FYxV!I5v@`0;4c;?*;d @ޞoCXiώ /TRVN!7Zvv9yYM Dd&BhwRҌAC9ǣtHOT=ZHmifIKsھ?N8=OookQ: ;WR4ͼmf5ŇJT6)WJdE Ps0>ʹyo#Ql ``7=*LB.؜AP;o$dP!w ʮ)k&7qqY>MLUo)G =-Ԗ}%o3:h!Rx΃99ڇF}J t5EKvt^ @pP)_!{]P X5D=B"Ѳey*Ze^q|i ADFhtTIC諫n Vqr!ê 6k[gzK|x)X[Cu52o?!pP-! V}؈WCp""hD:3^J"T9Ⱥjql837W)3NB#X;VAʣhQXށ_05&q2r%t@Sוu? }YWU]E<ܦ*;,*!B<}}!{_W@9sڳD4B=áDI*V/r]^US &$Ї]lw֪W<4@C!Ӱ.k憠N>d}z2C7\ЙQ)Ʀl"ܜe8`+}5m ;+@8J3oP+?!w_UR*4"FgЈt#\ԸIM9T=qOfU'WqJQ&By7">T3qMk ; јRT1dj6C P_-k!,7xB\t F[e'B?V.|r8'᧋TKU,H-B!|:j3fEҢmk ֌;|; >+(:%ǮلI0F!; @a8rkd8eQ͛8\bJsd:Z?SĽũ> wMJ P.! sTYX"ϡh)WkZޕR*5OS^mճ^Q*5kxc1ͽzc(\]֯)՟O9]uZP"E%pPp,[aKpz"6+o]#`Я|75W_'.7k](9Ccy |<** e0B&Ыǝʓ~wkַuR*5OcUDHxЖuO.)è#gL|Fd"w2K>ѻSۯv(Wb!ZLk)Wnk".Zk5v뎅M_l{-l_08F^=EhL\+&B*~\P.! 8SܠFBa!zE^qoY$*۝%P*~>W-\m$q[zLhi҂a)cG+y*3%y!]FY]R&Yw_2O3ܞ2Ec`;9lL;snz3m{y}C:XC&eZBW0rOme:3N)\oY$*dӞ-@Y^+k%k/ݘh 24<)Y*M},~-}}͆{ɀ?5JGlN.#sk;E@-G7$J"Ù}7o\\׼\H[cpP,?!xoTFRE3s{ߜI%MZ;lrA`DG\> KZKvÊ+TY FjxVٽ['􍾓6 @3/Ҡ w^$BYCǀii+@Dt ]#> VM\s2[rqwRoU+2Y.5.P&mg#l(ZD F<&ɷufqm T@<&NTzB"\( 9V|xeJ6%?6؁>%DaLka`j8/,P.!{߿թlM @ϼAWWͭWJj(x1^A fo+em(7 y -1N(0]ݷ@mV-|t_ "XL߇8t+6ְeV%q"8#Qvb`!@(5#A`՜jnX(νJ$mP2! ~`D$$38Lj8RDUzqY786r"4 3'T%B# QE  Dn͝":@6~/2a<|.>eo˻`3?ƶR]SuT\Ol8g,9@ m!d ;5`Ja&Å _s$E =\E,9B%p"7sZk|T˫&=nq7P4ЊҼuT(n8\F7=0sq ;-?`{֡;[2>>&ϒ( MrIz~]wb*ukpP3?!3RlptCa`TVZ3.M25@+y|k?p",&H1k"'iYkP&=5&"Oe N_YV}Ώ:?  uBTJLZP1! }R!B 3)uVLK٭vqzW!KmGwTCJD3Bn]]@#$!^ d΂LARL)T>ɰ]O"k\~ ~ rzRӟ= GD{(Dc 4Z:yJ@OSL{ Qܵr ՖU[J[lJ#\&gW6u3Y/fǯO ұ ӯ8jfʱSBc9q 2I .)f<_Ohxb@Ϣ<|߂S,).o[ T%9*7pP2!OQ!FW &PkZLԪ^Nu&?9*W&ޫ"~1 A_|~`yj6DH6ԈL0ʻIOнT'>oE8#vV[__epD@Q0Ɇ V{w? HB[Ahs^q[ذ#,I!Ȅ^~]Ij_MsF>p:N,^UR8a}Ī[N壀yoTEs]T m3c0Ն%t~}saȈˋs(vߓBUDž׸\@˶8Xz_T|| iBwIr%P4Lavc57.107.100B6#̤g: ?Z]F2L"u9#3J@!WǴ̏k"WUEmm6 vfJ[-:Gz!WlE佻FGB hzZ19g)UyWjyϝ'qWV:5`ϳ<<b84@Kyʟ \\ Z[l&Le"/ ⻛jg2V59 KNkzMjqZ "y.6FLg9J%JHTdg2)BrvBYilrҝ[" ߝdŴh?me`iaP1! /OGD%Qo_oq w纲4'n`t-.33HT*sNk=J'IHfxU|^[뤮~ow;@a_h ε0 H_.+gD)n8gf 0 'Q!yt;mې  Zs*ƃ<`~^M=x甀Rcd@hP0!OeWW]].cϩ}ws@f:RD۫"Q8)xQrJEi0KF%Q4Daf\ӌwE>#x| 5{u^!tzM@(5fbA32yF^de@)%KTM)OvF- c\&i^w㜺]ǟRo/*)Rjf4o[E JB3tl X?e (`x#檙0P"vC/C9d\r\{z'v b%uԠ'ީ P1_!O[W "ИԎN7v22L?o?*ϕNxxP\J|! Gksn5Sk_,P+ C-c(Ip@F3ݚ<-K :m4rw#]%?[.7B|Bx ۀ9jkT /?<v cw Ћdj. O[q+"::W!Rf[~y15킬ˮN(A/?Y5ac씒Dk/AMNc6>+{WKo Fz"  _Tw<}}G`tkq@͗G-@O쑌~kP.!?NIADBz S[.s^qqVaU0xU$a1{j6ܔ 9K UXBrэY Rw9t lC Vg488 Et\Xhs`*gz|F|s:?<E+@,Pp%9!:P,dp>7qsםV˙x=}}N>~{,7ۆ\!~Sn ɱBbzk02׾.@m q!PYP8cej{0`1! 0DzoŔ]*N؞Np 7&0]28@P&!+ NȖ'B!Иt"BAЉߥz*T"4N*5/ہPՙm]y1l!xICltu %|⌲ \b*;]=y09aa2M'B:f{> SOO3Y)] P$иt&B!И^ 8W]ʴF=jԿ?9Ixl_:ػ -hrZ@B_k?K*F:@% .PB!LNZD579m޹o_Ois\huS/oR`bLP+['0rҊ(A/pX:Uz[ӁJHª;oO=;7qo0 oOSFQ-3TMLH[68)Aԍ ~[ ƉXw#Я?VettkUP.bZk&D%\Z !CϲevI Ls`>;jSpݛf 1:;&E9D3ϫh&b6fUo zjOApM'z(XsHQYxPW\(Q0k-h{ C#w$abQ&dw0YY$88'fҹctg р.Tᛝ gzaQ\s"_`pUA^JP'!{]UX49բ8Yg7uꚹխFV8²ZuZ?{SYC%%PRN)[8QaiJL,JELզ߹8|j4&T;,.nJ֜}Zr6Uq-('ϖHd'%B;V蹭{v_WVѿ~Ϥ C]C҉IuM\_Dw:,*ĩYcǔC#5;TX)=}hV<9Գ,@p}P+! kS* D1}{˙*QVeɪQ](ه*.!BsEUP5nQ>4)@D"^PN8 ^Hc\}.<-{nTGגLG']GP+=g'MHH6' J9h5%z$n0aQ=@%ڽ%Ri]'_ u8^*"̺5]}a NЃ 䔈o,Ip%`@pQzb ]unj߇ը&| )c* ˫q,c7KȬj+nP,?!Yi41ڮUYrv^W\T?@\%m+CbFDjS6qBHs]w7o ;s*\(\I77K@•r5no`b$~Csu&JK !hEr-Wot(o:<j^~N`H"t xi^yK*ßlI }0-^#i!s 2dSJܒ:0rtiC fc$;x+*fdtIy77ǟ C;Ѻьefg xjq{mbh:'m޺b Bt7^ ֯/|zp@QR^{KT^~3>gɞ%sm.åD%?6 t~/rp[^ӳd-́){pcl arP? +TE1w]^y2jZ %WyKvs, 1uw+I~\4Ø}4s(ͥ\){iq@#x">YkTb$ñxw@aβLe =570\@'@v◘>3%^z:ov\>^^w돊|xj=eFT$O)IC $~Q"D%+u&x-mG;jft,%17Hbq#q;PD_ LE v:l:]YI|~?k^ϷL666Gv %2i%^SM۸b!:`w5~̿ImqvDt;/RhAp6uG3XX(!)+e"j{U`i/T@V Sbe>􍹀&>]An~+arZ$R-x\L^ _6} hݠGTc߫b$eV8FUγ6;U rjn." 꿭ܯ@U щlf&ͻn)gO6'^rb HP+_!{ Wę(!1Z6D٭R.ɚRw&U6,nL*^NXW1?3*0:tSқK,nA3WjWxWU5ꀆ "",WP*! ?o]{yЍy@P&A;qA2A8F]\N\/*֥Jj}[suSmp>|&!&uمA+DGtbD񐋸 r,׷nl P,?! Vѡ4#M3H,թRIZN_\E;hZvKRᤦ&ݨT` >z"rN @6bz<3 XE50X4MEB")J;l! |c:ꃇ.|irx=a ό*B|FpLa;It^rI1u Vi<|~8:g"QQ*I "Q]2}ESqKȍ=187zo// \蓎hktwo$P^)R k(i_|P׏~\P/! RUT5YDAg֪50Ι-J\[G a1F\z(AؔGOxQ1odz 33T-@6c2q5΂ԯR_]J.L`4" #t,\`:z= P/! T٩s6DeЈ̻5W=-LQu|Q(j&^(֕\;z2]Sn'NHtPOa*vq2;֑fMN#<'n]*5`O%>wS7k+YTr,L8ÿ0nb<. 0{Hjb9z>áx*VqWuWUj#[{?]p"t[`!S2j#ЮB$GL7eG5ug+rM]PՇ,6" utR.pbF TH  %@8P/_! [.Qۨ΃"x/V]eVmZWß_7rH!cH71sS#f5pޞ9Ty4A%N'wtZ ڊhQYMe[0= tc= ghJJhnz.:8̈́CgtݵuXJL$2t˚}(C,1]L ^Uo*oWY"JMe|9#wEsfj`QK28;U]ȝ : _.eKPݑ P/WoHOTﳗVN{c@}t*0 Na $P.! {S܊S3CS4|oBC%|J?$M'<$LЏ8ơ?rjPh1Yng j%/mstr%r}OX]WUDtxopcyUtO]?֐8c8e#,\ ܮ,vԊ(N;4w@X0d\|ӣ )nu9kySz2/WmdzLc϶7۔A^c-|$ YTc )oKar8uB8#e:*]6\@ l'A~ P/!SRܠ) ٚyqRJ^L3i?8~PO^tl ֨0ecfIq 6B\# ?^',!&Axvr'yX{3@ Ā+@ Z7R&םb_ۀPbiu,-:S Kmƿ?nz.V]I)y2ϭ 16kEZuR#!)y pR9Yax%z$v9Ze*ͨGa"=x&61b@36oƮ#yV γ`fP0! z__QTlP7AGh[޻^8uKL^5/nm!_>׺/>&mrlXn͏M,JzFq(TDT?(AY'6x ΟŒiXQp4@}R ߴss5Py& P栻`#;zdEmbMFkxUɋ=uoc&6/8ȴVEvHI9= zP5d-M3-JW<ȢX Jzenw*$¦QΠ(z!SP<":I]Q%ғ#02P.! ݿQh-B!W}U[NuuQu5jhtMf+MwL|xg9s !SIb)=]]dM|q#g B(: ).#N/ Zy bIo4@Fe /8T"Ly+=_P0!:O*4B"V]k4y*龮pڽ_t =7_9O0:v!n 8Q0^O TBt~5$'k\ CB7۫ rF}?3O7 נ PgKEw9^]zQ10ueSGB%X/T1yЅ=@v0#7Є4ִ*Qt.n9@TS8q&hQXf y}pP-!R[teFeЈtoP)u.Qpw@Oԩ;,1ì:λ,Wr{{]BE5k_P\λkA6[ك5'W"0ݺh!T; S츂(Fq9*=?|jF#gq`^@˄䊛NVQ ԓpxJWl(0[wџE ?LxX18oQxZϛHqӋ ( ʣdke`` O9^K6IdQb^ɶw?Gz_шY<m~/ktݖu\v٭ĩѫJ֢} {p@ r7Q @qÅ$<*P.! oQ[2!r_5u/[Jzj?o{O`FMYbϦ}gWD+{^وI/0Oұ*}.!ޞGxym.mM঺S>+2A`L7eÆ2Z`hǝ'E^ %uj2ՕpͩKw~ :>2g nz{rn,8>w[V2Y=B!ٕ\y |QX'?Vіƥ v冇;QYz60_.#/Eal V&-~htwG– 䕼 ugP/!+ PN3 [{n}z!*&՜u3'(Ù&rq~9I6uHOZ]b*c0!raHX,0L W[0 {Lz1ÎQtO}[ߡnK0m1h jC 4Ϛkh0ѭzOkwU5G LhuK9Duzm74pPC!LҲV oYfkH5Y"f~9s*y7\y5s&̿+rvNފ^_fSW=8an=a{c&L&\'x!F؟qf !Ņ=X* z #uj{W?o M_iFqn1F"yh:TMV2d+qu.o?lk89I,<*fq[56zJ R\6G:14m<Ø(Fڋb:S޽;򮈼s ; _q_m(,$zUbm[J0O=?9~w?_W~5+FGv9jo h TG;$S\ D+#u{I9O}vD~lk Rn"˶6<t*Ȧ`47' vӢgqsĝ)\Ԯ3JNYL:dH3'Հ>#SarC&9>9@[P'!{ ^4PW!Ušqh3[B)%Kęh5\zk7>TDB1a8)$3\DF }IBL΀i YT$5򭞻ؖ2Þfq*N査=b~̴̽ηuuqV ݧk@m 38j/D:1C!7epRJvmkו-#Z[&*!6mFSĕ 7r圼DU浻Cws6Ǔdw܀LmP)!oVj tCHttIxsu/.e)ի.9t\d\2k ;=G1@qZBU0u`pˋ}-3y$&9S#nʲks߬X2Yj7v͈EsDSmޑjkV<9O8t/"quW/U/.e*;5• VX *9qbLPἥ₯$>+s\U,vM,~R8ǧv)ISP'9" JwkaP._!~WZ)lWDЙN3wN#W'U/NW^*|$ 9K6B[LNXΎ`.J^NFP wSXݸy5P&yfDu=cm,b dX|M>` 5͏T˭Wo)̒!G,S}{y.LkR1I|KyMQ>Q f(e'{G8d~JS0 XwW|e&Iq͵wK.Ea"[K uIV A9X3 Qӻ@ R&6z} GmB D{)ir@ Wp+@3erbhuSWhI!˦*%2BH쬶ANq#_\{{5r˭c<|1˹7 -fCoffMRN,:Tz\yP8DSMrPL:P7f!#4e9Er1,+ơĩ *AQj lA` ?1O*th-VXZ;mX-nP0!g_}P`S+C{׭5ޥk_8}Ą(r6 Y--?f(`GO}`dŋ^/[zQ'_"ױG5:&V7UbL(c w@Vl t~pO <ƟO'%賀5e4=۵)è`Rsd( R\&ܒ|{*֥5+(pj鏶.HoS̱!lw}P:yHHk+s=hm<u Jn1`9KJ"t)+]*{9/߬3EX<>HWG>u=&>ӠWv"`*l!2"H*]]j۟q^wYt Y95kX|"$G i .1%9,+X4Fπ߭frsv,vbk8*X+Uwq+$P/!U)V(24ړ.Kƫ5jYZ>;+`7mKFo2-rSđNޛ[x^ Q6Kf8ꅢHGͿt~ZbM tcaNDk]>X <xp7azKSP5U?quD04JaMRe 72ڟlA9.P3!7(S).ci׿^Uֵ~*k7V?^uPwc|+\G[$"+ONRHo<譈mub~QerE]TmH?H`5 Uky'z+;c2e5R/-Z^=FG'Tt7?pόO *Y~8hJsžU:/ n3R+??ns8>ۑ1W:fƕ#UX7NNaP$I19d.6ЄІ6Kh@?Ʈמ-8hE'5P >q+{5*M'}4W :g=JRΎnv$P1! ӧ@UZ)3CD{k*8l׍u<_||Oʮ4U[nrTdvDҐy@s,k-C'@I,GtG0/$!rK0үHKFԗcnh|T_qɀ$,%}𯲜@&[; C@`x=;]*e%N$p:ʫk9T5qޥORZ "%`Q%I%+@O:SkWiu)cVedNE1v4 Xi8J՗m ĘfbfC0L1E@aWL/,x<@;~L0KKo`$@=rtpP1!}UZUBegM8osI3}͇J5w$ gvxFan O$_xv=^]x!ipR6$J29mto椙Hp3VĬq@1Sпmt2Q}ɿn@9~qn{]z [*1:85WQuRoڿg4-{Q}>h.>/ms |UFSG| j&kn ūX9#" TVP(VKuUf) p%D n7RC.ibԍ҆uoY\^fTX:g6xP-! v?U` DAyηsq\D?#z~k:Lnm|B`$qSxe qmD hHR+x4Ҹia@ *È1_KJ?SMbCކ<aKP@2A/~[ F NtjI_׽2_M6$D:6犊7/&g#h^jጆL/Tb"I-rc+h^"#T OJNAS\{di^IĢ[ p}!$+WlJbP1!cWT[) C.ϡ1LJ^J\k:vk?-Kp9tT?EԦk\rp'h0<,<G":u吻~PuБyd !L؋ĿY<]״eRҿYq?}CW[ו5F6\~;Nc8 o!Ãw< qJ$ٺW}8ClZiom{ƛOKū8ϝ/ L{ g^ψs4E(U T6;JbNtz:C{:~BZ)1|L2jlȽ\A+gU;m\27ft%%pҽgq?8{o|Oybi @pl>6 7:.\"lpk]r? g~(eOF_axOÛN w5Ah;Y+R`^bcߐ[sp7?hM~ݟ>k% mΗ.Ņy&|||4"f P#?!{ BYBHM CB 4(B!UyTS8{ԩrZ`6wj%E K%wRNS=,˻Vh@,-dnwUiӀf^/qw%h]uxM9R;;տY)zoSS~WdThF RS [z00@yQdWDzE>NuMR0ZI#!JboF.f4ng6/! *6RD}bLo*e\CBID/EAH)>߬ ^[M% XR M6-/~=0$/-3^l{2*VQt_4H {Ep> $?PI B'$P$P!WSQLxmoP-!|Ta,S~BqpR8Z͙'Z jȭ + ƌ̓(x񈴺V-ظ] +a˼phSˍG-А5f >Ls;K$ T; AH n[ocw#,.R0{ӫ ND:TIVqY>˷Ÿ^xT:3[GwԐhF1B%螽k9ZNR8Za=}lb+3ͷ@ usf1ӆT|@ 51@&:T 9'+O1ggm u+G@@ ,pP0?! |T[&KhTKfWBUK\q!шy:dm5{0yNwJK4HN"Kf#БT-eH=H „|2&{{v{`:L.3NqLUlNP,43ȯ3}S+Yg 熶"8 bf1x܇cSڡL3áwt_j4bThƍ< mH}$˅ں#odb B~Y0S;ݗ%]p@ +L7X"F۸VqO>$7 .֮og83~R8eKu=.P \X[Ur@P/!|Rڨg1 BЙNͥUϚ{R* q$Og(OR *oHspgc|gp:#u`%0ڊ7u'wc8fC,}&NCSr{N`eR)m"* W)4g5> {hm :KA\HQ>K@]gU%TZRT]o]_HSjѧUA΢ œc㪜<@ k&@dlןwM5T[ִt߻-f-G>{%sM#H`!r4hP+! HT 3)Fc!syY"Jk$xǏ}+e p_hvd4c4 ʰ?7ޱ}ˊisR>dZ2by/cizsc+L-o6 {0殦Ł1ک/䊵+Y+%Φ/*@u}~-.ھq LJ _f @,fɲ fznEtx>Yδ "TB4 P0! S 2U*yWur?5= a/q:2L:+zHl+FR$[Z ϢXa;[Wž8!+HG%/5i75a ri6$ !Hr IhJ|^tiqptίkK'= |+ŢohCDSkCe jBj.lCW~8ĩKWur Q(̜׋zͻ*zCI2OY塆-r6G ,Q1QAFw{|oW@qTuj43bʻzh貈wFmpP0!.~Q6m_γu\|Y5i1E_[Bkb](yJ.uEhMB(K,!ltOh0fo@/A(ԋ8o~hk3ƑmN$M6kN@ @4A^.KzRlqKЍn ɍN7{La(CĖ$RҷQtS+Cuq:N cMV Q |k{d&ZLjwWǘ̌Bc yR{_N5drXk%9EBfC>x0\78gMDg)TuMC8XQKŒL9b{4 s˥#P1?!>/R[)LB)BAv9u*^GCW>;;f{XC)m16N)[,<{猠LQd%4pB."yTJ`y"BfOYHxWB*sSr2܄ ]N]2B2П—!:oH,ZpqۘGY.t Y%xH>z59ʕR8j[4W-xcWL]fk-̳-b2X%v-bO"IZۘ8ܪ֣c/|۹;Ѐ󦹟|{oHQ+v=] $'~[xuz慻vU{ɁſI{9v; Ah5dWD#bA0h|fJ= H ͜YWcͳxPB_jd%N-t/;jCLMK+H v gI#v߮99ُ∮Y,Gs[[x22tQkaeV sswenC* +l tW1",\cpcq/_*]?]Z 6P/!{RکLeHEPWjjkv[xyJn ]яvs V[ŷ~)cEyk!a  bt]LRWTN|xe mscoMZK=U}gah*j` vBVH d'{z gfŻX\Q)屼g6*`az}_uZVtRѡD- ߖ.o5^]A Hp*)rl\}yLF)n:uaPᘜCx 4KD9Ä d :;qOܞEĩJ#_ 2e АP1!PiH#N͡!=kz㞲r/|l4YtAgQs#Qw֕Y?3bBx5j-WVU8OkKZɱT YKGH# ZnT QQL48r=JӨ3PMYF,Qrӗ۵=MZa9ˆ/}_pP/! O|QX362hHF"#gHy+N5B{%! !($/6IW@@El̄1WD9nysuˮs.HT9"f1Ms,r4XfI! rh%@L2HxP>p|slق(Ҍ뎯0{q #&ٚM(nc<#BـpP/! {O` B's[MbDUZ5yhWCn9'BB|,$tE5 [uy O]+ol,?V1IK=cC˪oӗv\\9T.tiN—W-D)0>+@76( UV`Bq+bMė$fF.T@oY,i_£k&قJ"ɡD^- [Fk"KWgtYLI(&%R%SOqQIw8Hzcl!֗4\Q*l kR$@IBn&cqʂ/u,aMj i0|Qc+>`V]<9P(@P1_!?uglP\`bϡ"h^I9qNj ߟj.KO,k=0sg؍Ȼxueqܹpƽ*;avohۊD4\iBF˿xȵgQ\Hw/ey0e$<&oCu.EKppˏ[J:ierRa=-jNB/NL` HujMnЈ"/ԒZU{F*[U\QϪV#q3eƕy+RVN1Ei[nHBwfHSk]^ޒ8[Iᆱ_o5[}ZѾ*| PNg>Oc+>,zxʲ@vv@xP-_!+OףO_[Z|ٗέ/^r`VLjUnʳ\&(z!E".:jqӫuy=Ƶ%}0?oC@,b3_jg,j\$˳nϷu@+KY\[}pAGfJ*|۫`3=*7ϳj_?hͽ[횆GZ<\#)~R9S|P-!L_PA*:&h,U Bn^+Wu nZ2"/Ҏa7Uv㵧7Fq-ϛ'CcnU Gϧzz!:RI)ivfL4Qxb,JzqR^EWi#1zxV%Vg_뗥fXrC&," VF-ѭ{Xb#WpP%!{ pPȓ.ǡhH.$RޭM.M=i1qh":DAZg<^(/CLfL_|;IkZV>4+S.ҵ0 w)eJ%gRx8#s\INXuXW-e{NA{|7v"^4<0"1CMS"=Aзiu{k%ZKQwZFhӓR . 1: Zn^JR z(P)?!|OTY  fйsiPUe:e`b<9dzyN3XH0)H 뺉t[ߺ΄&'281Po1X-I%9]V4R)~ Fk m ?,?pJxkBEhXnq Вo_Rqi)G{ʕBzYcI:LvKЈ\˓mUʂVyNq_u׵;ڜ'n9JU?O#"&O>$Nƹ[ d Պ}-H FN j\P)! J\XbI3<^qurTN 'ul,@H1nV"訚5` @J̎84-r dpԹKIc: e@V憑h9FaJ*`Tu\HB+7{̧d&P>2h>CMhdz0g:&3%=q;n+i(;^a)pbyL,P,! L)(&*J7Li+wTR8o,\ͼWR%V*KCj}|\JB^B;fs` XXT'͆.?n֩!EhL+'&<|)USBßF_h8UB^#OU+`1ycJHz9+\ 5vovH"]['Ŕ'TǕhkx}lrM2p8&d6eW[4E֪ԌcCx}oG2S<{OY )voI a%49fX^ͺp_+qa{~,eO=c 0MZ*O1-mP-hf|UQ't _e&BXtP2!ŗF\`")Uy}~/~ 6[nM'C':ƙo&RBYi^Ẇĝll $v:@Ku]ј Kz=r9 “01G39,ɀ||V W~b|HEx7hx<؍?0t 765M5_^v4M :PtVQ'O;>pqswWW@#cתaQm+Z~rD_r)Y$#؋lQ*֣$|x- Xա"\c [1G,sM (&/ GfܬK8z4"Z KnWռ#~mΜP1! gH`"Nn~2zg.d^JIYzWL6̚'99 `:b@bZ@= ZlRFD p"x;}%e̋S+#/J(97SEaB5:G ՗o 1ʫ}!.6#*<聗@4Xi r$@F!R%Һ4Tv)($5)fpP.! }G\ QYM}/Lz+_zK|;xý]y,UP^:<!ADQEHc\y߰r4ɔ߯µP|@Y*ٌa#M'xz41|51Dh C/ z}@;N/q\ (ƅ"6Pl53dߍtWWiW=gBII#x'JFrVQug! ZIJ*J<=0[ykt\*e誐,BS+W\E/!tPHWaA"v3Р.mj C,^WDŽRJ(KztW4|+" cᔧ9‘c6nxԩ2M6:ُaWDXUY 8 A8ηä5덂sR5tP[~֢qv)p ѐbY tN P0!G[a 1NMw6.kn\LtxU~=@v(搎+9ѕaz_i{3Kd;7w~fJ&s+-c#A萠Hegû[@w] X`c_<*)H1E-f؋viH#rGXxT2|GmS] ܌@dZ ?{y9ܻ,Lz:,XZ=xDSqP' vO`{`4nY/}Rox/]CP1_! -wG۠>7ۛ&$|n*cY#=L͊hf92&0@R;ɆL&u9ƭ2&S-SB:')ZʺU^34,)<|F3mmڸ:!XXF!V4wB*$\u9'KobZ@Te# *JF j̔a B"qu2Uq' qQ˚f|˝:8e:v˱@Yrz4 +=o#_ `N__֥[V=m'd]f^xޯ'6P0_xa0<GM2894$s/r_2Kh$_91< j$tx-!YQuR+vz!+ǡ) ƭ+gMӦ:[FBϩB۽!>P-! ]_E\wM?Z]qϗ 8UbXrJ|LnX 51$n|#t ғJ0Ш:04bDgo BC5V#<)B+GeF98*v Im~N5"!EzU=,-JJFPx]iE7F[\HW%–|T8K^WUZUT(X\ k[M{I=AYO I'ӌfu: R nǹiï_ސR g;@@l7!8XԀb|h8JϵN8B|RP.!GYF/K.[sLSĪ*62ʀ\ǜS'Cogm-B-+_䅌عN!nxA+(U-n|]xG XiVm)309?"PAgO]:RG^`htN41C)bUx t>y/o\|nN+WR]V)`bcWqVTKzDj"L~"*n?tb*!ZƉ}oZNÆ-uax,Yk bcrPx1 @-@|v$xPa0AۺCP0_!eG[M ŬMN~>u%oSaIB _DrA Wt PD &,1#>'z=) NVT*'ZlڹC,*:uMZ7Äe2tkYkgeV4%yx),-Ay]os|@v8k.qS.eM'.00t.-.7gJud__uI_fyKihi;.uiu>!Jt[:MOg8;# uxٹTEe;ÙtCUhZx*WvpP-! iF[Y8B*ֵ/U)WRn7&ZX\yee@5-Sм*UV.j,dp>ˠXIM@|p9* T d;8uP ᨯ\F sF :'PL̕Ra88Ɏ!QJN$`ǨS2D0;IuUZVH EMfe'l™"K%ǤiN\v?Cdͣ_eUū.MҺ>xexմ'.'b/}=s : aQC@5c! IT:e߷ -K7\MkЈ&oN7g~r5$ݻJ@rM+(Ź}e+$XӕE@:i'{@)jOǽlQ R4ŀQ>{B%m}~LaoZ驗Bm$Z&lDX X9gd.X6]ˣVP/! 3Es s߶/[~UT/wAg/H8&!>%EבxyŦFY0 Wϲ9骔^_1ՅH ȇƘlun,_\KC+oйjY*|:PWrMUWUM 3 Fdxr2LbɆmd޷ƸU){ңo4~<:K,65"j6~KzWϿ5eUo'/ L\bl?]w %242sȖ,&;80w^4W/tBA14N׶SOdv-ygxľm>P.! DDЪ ~sKﯷp))Z_?y܁fHHa>%s9ۈS&o O乪~df՟`k3ӏ*g4g^>UBrCN!| :]"q롱]t8DߗEd҃:(↔y;dff3閶T%%^EKXbd|#se!_V0飳Yhڥ#5gZZqNY]k֭sˠv.,+>|3m^}ɊjV$ *Zj(jWP/_!~E[AVS*|{sĨ5yV;7u{-֒Y٦ [QH@aNQmwcu9VLU-m]lW77=ۛCN%-ndOF0a F9|1r %wyN0{Z-6smF6*Ueoo poSȂ_~rqOnxZ"ʺ&5M=; `łJ_p .M&iݍS&h9U+lrO؎*/l^;9ErgRKPsٻ{-Z_{ySü9]sOe3͊U\e1-Uo%_Ȁ XXYP.!HE[2#\kmi?sr⬙)ǎ㡑$X%Y?|`s> jj'1!@'[_011ϟsW;8êrΖ0)u^xam -(%pq-ŧtK;ᴜ3; 7@prJ\?3ی`bcy/80ԗV5:o]I{NY2Q Gzߎ"yHaF:WxNaro6C)N\<15{[xY_oЗ̶i^ o 55&ԙ? U,T:=7hNe5ToəI (}=ku(4㬣P/!bDU"yӾ}^G}uXmX/"v_c ?֗)hΏ钀WeJCdxv6k-M72uu5T;A8S—^iK>!,x;1m|ю<_8iSd oԪMbvvjjת/6-0<,u}}#[c[㖱$ۈ7zW mx(AQU;Ju}8o|uwo>@wn(d4#BM=L#/=ҦKhˆPJt.-hSC]OlF-RJFEmfܸ/Ç{ P.!w'D[wA+%H*98B2bAg+&Vd83t(cWl6jMb5Jl*$c[!}k|nXcsiT/.9г4e'O;珿jLu"TTv~(AfA+d̀GQTQ M&0"&ZVҦ@=q(<rrE&BcaaC%:V?V;SS,Rbu;(3}7Qƶq)ѕ؜(O dƿ)e3pJ,P{VSH_bh'kYnaF%' '^6Q O(NM`k)!V:c,h}[Dp~'.3]iRdVK>3PFP,V)9Ns, @?D%/}9pa[O7}[og۬1F<7GYyHH>SP+Ts$64[-c&ԩL0Jj ԷIGlUxPH? LJa5"3{lUt?q5z3&̈q:\5$FmL:4|Gơ~\?aa_g;T&>I҄a!X`>rbV g'bE8/SF$څ:ᖷiZQ6w z-/1^xئ6e"D_4 NOn7qzx0ڪӳ:C!EF׃ְWGqCZ26Ĥvϱ١l7&"zdtٌMŘuS7U֯gy|q~8paX=O_#&>2|1dOyJ(ӝiH=CEf9Y!j8yz?39-_7Jxc4d~akkrgx;:V~ }9}Xw:+g2WWm(ns9ڵI=;MUfuh@(;9=&~S Ba_\c%D>P(!{۔VSHm FXU!jV\W1Q/kj`-!bDۗCut h-S]+[lT$h$'WqLLp8| 9]wPww0HL]0Ы&隺NLDB4 6pfIT:kzwxU!j{Vk2k+?ˆNǶu:=#fF;=WÕU{8MTDHmTn1@Z9TP*_! ]T(56áQ DFswɚ<5]]ORd-C Vm<VqקVezPݶEumWr.hu}25," bfMkdOSa Mwԃ*!. !fqY@}+KZA#B!и/#|+:ɿˊLrWuHz-@@pP/!?R)J[2oPnoA#e|l/|= < HfAҢRLe0eۋQ_A6qCvxSMZ@ d4񗃋鉷glS!՘U"a9@m[,F{@ *Mp}ZìO ϸϼq427: XH- zzO?fJ("K!xޓԶ\ަeHNi] oB%SPpC $hKTi$ $K6ռҳc;-b9@RvOKgb{&gw~AB@c zAϺ:RuNo+oV>Ԁ\?j7@>s9s`Ky=c՗-9b"%D*$LG*U5\wr*-))weۯ\9wO_u* ϧ&u;qˋ^;3Vm[Tw}Տz+#-2 \c9 ۔A~` @7/Dx e~?iP1! +?Q)NS+B!ЙtO^Sޙs5)W~?WYb!6"QҊZo76qΩ2beXz8F-{1O~!{ԇwRYLSe#2$BCfwbXFcv/0ɒ ʵ}0pBp=xk;D&6N*_~޳WR:^~%uO8J#9mSiY7b/c }c[G\ۛP'WM' q|6JP"T:+.e'"RBnV#,@K0n;6 uUoG Һ^*Í"\P3?! DnR\WϢx_z%K&uz?M7a\LyD-PU7+Pe@2>W:E6=4(\'f@cY{@1ύ1,wލ߱^n^vl:ejL }g U⥋t3t` +g gGv@xp(cLJ䨷 ?Dm|?qVLޮK2~8?Sh*وU-Vέgb`YJ7"'VJ-џǬzZpNh{J=vmo2x]@VOH,O%u EZ[Qhd jE`\gƭuNhXqHσUP2!WMQ]W=JߜLo-\oU?~T웤Mq̀))}b42:ċ#e3~UigD~<*sM$C~e8y Apcᩆ-ة7h[t{HAl_(/X|qL%,@<7͓7*{ktlaJQ*z]be$/*=ϮOk8Ntw'$ͻ.h&l ]|\2QCnX$+Ћc"ZAΨ$8MQwxC|>BpW^~@` x|5KHϟ@F :n7k(KK+; @8P2!YMQW L޳un\Ϗo_~ ZuK$zwQhB &^CwI;8;qh8J{ѱ8' W"0ysͭ?g7J9p[W`k l&hQZYpa]0 OFhW,A#$DZ!loSWoq~iY @#j?t}~#RrwX>rrA+CyrEu#-%*A\*fMd⾐~ WV4GP1!BQݜ} H9ԩ:񤪽s/<չ?/PeWJbaIzv"E :E9Y$M$W>?t V~SyEpT˯ %h rrbS ެOg:XQ;w/_KБoN^)t1U)4 ڼx2%orOiSsTZC޾%8W%oseۇ:[Wq?1h֣UF9怄ύCxD 4>VH~2P/! ʎS]U H3[}`r[=_{ͪi $L&^ ^0OH2B˺TOT54Ъj2Iq G6kSE,ڗB9R83d$0@;I=8qJp~wFM"ܘ3DGb~tSt6NTaЦkN)N#f 5\]|]_>?8;#Y^DGWYo06s. zI4MGI w @; ^؞xմFt*֋tџ?|1C[C JX= N x@77^8 hP2?! @PUBAмu Hä[++ P!/"=7i"-[X :'@3_T-CNʼK'] RA{seI*VoڹS[Jn8N!(<&r߂&ၝۯfX|׵D)/_+',nY3>horpNVDjkrkH>II &*L7Qj&lBlmd gP0!~!Pݜ= B#Аާ*W\n)OR6DG=j}Q̵ 8VFajXd 5侞 ד, B)z=o/|4$Ī,h poG cK.p)X/`N+MCo9 /B!|/mJ%^qURB'/FUbkvo"REć}Ϊcv}}TjDQlT(:C?ap#ћ%p^)+Fz99wAgqfcuϠ a]j%@~sO|\VꛏzS BEHf9ZϙSV+Y*&=d@Y33ϱĶ!OO:@](18xP.!ߕ*l;D!i:FcKw/U\eWOy 6n\x4|~o:44VL L4ՠ 駷ǿ};sʏL,0[mC&a7b-UU"¸, la Oo/>#,j|ׂe+ĭd.E0D: k7ԩR-~z֧]j5Uou;0&?w|cfY Jc/tA Y!N^LXhttd7[w|Eݒx=~Ѥ:κ 6scd*3 _}~̀Ε8P6! 9W,d#ڸʸuֲs.t倢5tt !f9G anq0++T a7BAD`8Lj9 ! =JVdX[AV9>c@ӏd,H6%J|/_sjGgNls-z:3>e)Gs5pn{8h{}qpbE|*e :ˡh]k;]9|}o@rkV!TCKob*F#Q~DB`D:ɕФNXbCl-ĂȤKy9=Vs`f4k/׷]b i2XLpi[҂M?Ѩ'}K+ t"B)>pP6_! ATD K4h8ԤҭkRzN~ɀG##d$(j29)f%fGբP:*ƓC R93 nn!qd;mlz`4 J˦|=M'O.%zU;uDu3L@6кxޕ&F\BBdЈt"W^:w 7LIY3=Pa؛.|EU񸥥XDtB3- ~=:ٱeQw׊|EtY,L_B|Y.fTJPTx;I%*݅znQ[s.G pf=x~_irWk/YW7,9LS d8̺CVyuQ/>Y{ kkӜ)C-v^ "dUQNUOH+]#߂l-Dr$TI ]a"%}auw_/wvߴo noW L 32|-\JiCes,,4s@z`%]RpP5!G@R F k!9{{Ub'RnsߧN=/GGCy[3{Kw.S\$ )UTXƋFH%;!,4bYV]ybçVR4̥D^m` U Ɨ./sGKtN>"][gJ؜xq v`Њz`O뷠3kֺ—ԣ2dذ$D#Љ4Neg3z7+[Y?=@"}$t qω\V-s"/E1vPI} ͷP%Vp[C)`|0P@#1YۚoOR "M:lM$ \޴N:Y:K*Q U,۰*(f H&/lXP4_! S[RD&2u&wu1TƩ瞩IdXvpWSJ%leشc?o.~iMTRqR4'eTwwؿOlwÎcn\8?@Xdx@}#f+d̠r2V_bjN@V݉ځSlH7B#Љ4MTumssUIήgY-_;6n*[ַmۤiŖ(!KWd:W[Zj)J$uvw8FȞq/Xv>ɗX1Kg Xjj!ULcVn7{?F, 6*k ypfS0.3P1!}}!Q! S+Bcш$2s|n$˨.TnX BЙ: Ĝwԓ.//of 59f,u iB)h8C:(4 : "=M扆$@1LF.Zx4.a"!K@~\}J2+wFۢ'|h>wHra,9I8P3_! ?4R[!5 B#Јo:~)EԖu?#Bտ;0:諧F9v G \>o4LgX0F#c”BO3F)eBa*031[ $}+9ElTb%L)aG vV-,#(:]wV]@~ EѾGmPP#Be;|U(>Z?W(Fc)y)޲Ѣ)Mg'Ј[>R|ْ=I$,A#r+P@ KM+dxUSOYx p>kTū8)~MXकHZ@3 d3( W>mM-R9⒀8P2![GPaJ^i<{MUlO?jsc sX nﰚk"3W~`+/B|7\^ -Ф9\ c|Nb4+jeXHyN>N}w*d & 5)P%B){վcci-xO?.n)[=hXBЙ|:7+xmaS/!?XyayVGN|;3T~% EH>ihnK~=ThG@N~^=W_b/Χ@1=àp}׀^iq @M SK[fc dE}~/Yf؅95q^# Ġ~C}uUN$괂& ϛ@LURP AwoGyi:)tIoR hV<t&BHSe(3Nږ,!]=?g|\qj㍃'pF Tj^N3*&#ߛV6j郥S'u\K9O 쌣Ti$75Cs OcwB`aZ<nhF 1q7uhpu:=OGLDd\^6iTn!>x SQ`yаtbFjFEB P#!N ߧ1&09=綩)Vck+oWAҙ☭]Khꪇ/cG=(uz0w(~/  Zi}1pP.! [UR!D!D!t$׶Mw+E[8&J#/U4K9eIenWY/)s?(Db^_gJ>Dxl)EnHNq񎇈RpCa*]x2+,t>Gc1xT/*fo埾oQ[qs32 _;Pήs7_jUE@ H>y2a CЊtoqN%ҚC\kO+R{Ujx{NC&3 @6{r+샹zgXf.Q§<$gbAPpFw} /ɠE7[A>n-:& جl[ hU>?//, #P,!kTTG# 5iWߜKZ޹3SO~i$\xE5ix:iQ`)LIk{0D/ïb (ˏ4JHP{ū` 7|T!R64D:5i<|z람.Yr@tBP [2G{s>zwb[G[mvdlYG.bbaJ(C0t/Q]7N{nwDC P"sOg*], CX \x2pP+!RؒdUnG;UuT{e>8bZeJKuuqXʼ@Y;HEz;K_nQ}p"'Ze"493_EmD %9<C/%L R BjD:<&iRּZ}_u- S:N5oMspL0 рxBUW ّ +OЗF{;(x>q48s#eh!tk6 Mr#*˖#19*@L ntS1O7hP2?! BοrS\Rt(B%ЈsEдfGYhdpANn E+}6 z[J1OE}p:ӠfSge}U/oXg ߯b6w_#܅n.[Y\仢6f?~= 0//]Xf6KtKLƃPPBMA7}u]3˴cUIӭ8|Nu z זpauX'S9)2$N<#wW0GcvƦ /@>'չ0=-O_;#"HūB0sK_,|i6_g E\P1_!bTS ¡8#:l7o r50}>tx3G,H8%E*.b~jW“۹P BhBbtWt{{=  R0ÊuS | n }o;mlcc̍*(-CP:D!ȼD wQzl9v>9HrrRe Uy:*V(r0.JQPe")$Gغ,sةVMFVZGh,A)&ETU&W-B^ =Y[@Wo%H 75r+BkSP3! w^R[ ҳ"ϡ2k_2]i??fRJ"U5Sc)*Y eHs~M.wl)x\7,6hSP4QŔz.<_relp2 v@1ˀ6(¨7* =ҠtSFDx)ƬX+^x ұ$A7]jgYR3?ӿ:jE80F@Mdž[hAP(.<4d. )E, juwQ!gi_I?>j4U/`  w:UrL?%PgYX,7{P3?! oR调D$p4KW~{]S?_?( כP Po79.#igHŔ"`F`e̍}JXv(8$!@uBѵc5Eiks? 3͈ 4@CX9 š up7Nuo/o~}kY} wzq~B֗eˎ6!UKq ϦI`:SY3i(tZ=73zd]^+3O k sP(>K}^*}  (-P&?!Sèjf"!HzF&]̵D1p[-S_@`v!5_W tK \c%\Z.LЕEijTDS!񄛱 bRoU#2v.11B:GsѼtGV1/dZ@TO=]%u]٠O_(BѢqhD:á׾=yD1qT]yLh2>wR) võV[J#L( SX"0R ;c)&|P-!oPBlЙ9 Dp[[7V*Kf5럕:NOzhFDw.Ddlബ>ʙZmЩp\pVl!\ SQTfN&+~lq-̪Q5d6|5W+K0LwB?UAGr=\U/0*O2vh BX[O5@KJGn狶{bJ7V*KfÀ!0 Dc|L`)2/c<.QǃXe;'eIG() d\pXbS:e5WP epP1! MRJ{dμs\W/rP}z5= " 8)X*ӐN]*!IQd@Jf%RO&@l=5*cMjc3>˶%UM#JodJ2閄2ơs9YTU:ř!{b!W bk")dT d*AS2Xn$W/2]|/ VAIikם}\W/rP}z5=l A` x4:~F뺵 8r:,x#U1:*Ǝ4:m /I穮Ш[&adc8rp%'b5}Df~%\o7P5! ?L蒛 je7]ߔy8ώn]^%IUA.RPՙ@ wg{dB4-lp-R#Lɥc%mEf1 5wVEwkl݇,p3MAwQNbFsέg;\u#7Y0*Җk}J \KfHEo mZRfKDjO{`m>=/ݸ |尉&Iwzߔ%N;3㛮s` b f[\~9{)3 xg 27A ^j]'+6<)%Cz#2b>]vn֍[Ԍ$T֨5pP*@a>p~`'r`@H&P3!uLL#%"52 ~'Wnjsww/g5-ka Jč|1fWP*EDR$觯ê%R-}:8鲆W(L. lW`s31Qo,YN0 eӿq^_}O|xV)*4om@q[I)`35L!7-!28D^6]q/U{uW~/~ {KP0^kzNy"g|0W[]`3F#L#jIlQJzO2x K슩tS)Lg[[!@YHf1mfv~Pa8P-!&zlPY s6ϡg^7k\[su=~5u@w&`8혤14 >M[8i(+|Ԣ8=+dm( 9vAx5v>\7- U27( ? ~O-0HywcQ2&ޝ $3GsБ XPU>CtL8V`^8z#0u ̐e f{V9AJ\rl[_V!>UvG ןI-=\e孮U*Iަߎ~?uAbxt.cax*.-&v(V9\ C(\ ƧnlUS|H>(^9 tNJPXx0SHOlBP᳀P0_!~Q] J#|TqL\˥O~~q:-V|Opf=93pVM\sɐ7~Ps! ;R >1b#>>wF0A|p v ,x# C`xdB0맄$Ad.|;g28XR@5ѓw_0; b_SH3\6 DP1! PlnTi*sY{yÕs}z_?jҔyvGcP~ohZGLr {A vth>Q' 9U-] Ą:HHt߷@!}9(p I>PA#N=Pw擣NMc=/b`e$Xqt Ոkuޯ}dwҦ][}_?\TG u{Rm8ԩUEn;Mfr74dEB_ʴ\v;dփ45:,WlE7cῖ;Z5w@,}P^ CP0!+Q[h3\Үg~?)4hG]e7OxdnNI#tMasMıG<(G"   kQ1_tlg$CL [@O@>;:_ҸAkK ٬Vx LGB[; Djif á"RdZ_c_Ogk\[S) "`CivhBV104QϪ|H)J8];t}`C&$`@u%EᗢO@p0_P@?!Ls>PRJ6]lţMyo7soj5ӸkyuVz-ÄH|P{7;.BIF_L(TgECCv/d}p<uuiE9<4Ẃk[_҃yNdGi&{+Ԫ,kgy==!0x'#w;! Ai'(GqXKxkT1ܽaZEWo5Փ7o53zn~94&uǏ3\j ZϑvdC7vMWd6;QlYG$uGſONAڸYS5;lVOZd6y%n%4 94F|4x@ə.z5x:S 9 :xF[5҃heo:F4y|B@QJo8P-!{ ۧ Wљb!B!Ј"= .d˺%/|bS\xzcQK5vj"1…5u25{&fۣB߰ppꮖ~nј|Q#2R` mŧ"K'FJ">I\7ѿ׎@;,`DCoU[2c :R+k\zC1j aA^kY -wuv"NTZ;uл+g C]&KO,.hk;ԩʶc2VKgә/0gz_m0P-! R$8U\H= De8rBݮڊAnӠ*U!(LDg[qMm=? 4+JkH٧PXZ S#ɜ+Vq#T%뭓[½}Ӡ" }j.׺ˉYQUk@`7_Pu$qqu`YyПٴɎP/!4&>S]l5e 4NԪw+|dN^=MO}(=n.XSHy suG[/aYsSk^`nE*$IVkьf@2F[x{7}hɚ<7|>lD0z|:`p-}ވ.eî's,)7}?QAog1CxNܚߵejdgLJ׍wZYc7k8O84:W͖`2r5B\IZ5y(6峇XS:gV Jfn%(z/krtGhO= ZniI1u܀1hD"$(:gX,[C3eݣ9M,w"$*;6f 9X02 6P.!{SZtIV$P脚&WY>3TΪ]R o+IL.|qmgU%&=/G Š F;򌢁ObD=ˆWۍyP+bz[d7UTˣV773|Hwa8YP~iwOe\X\SgYS#MO)߅ !.OJ6q0Op%n{k; Ȍt Q-0gaB$t.zsR5$2_^_'5bL+.ZڥT8ʜ*F\Q4VfncjΆtC/8N}(':SsHq>7\z+]U2T 0glAs7D `[HZ޼a挠`׉yy0F"  Ƿheq]wyo_OjȄ*0yhcd$2~'=+Fjb;+I$]]@[ ϴ3/DK>TTP]믹a>uN4CgdP0!O(UFա_jFSeeǧ'^?mQ,(f# jVVTvɌT? -늉 #%<.$' NrG~y隁z*ep$G y-blr+K(!>1M}h~xr;;U"%u:Ez5]W?KPO_z\{!fk[,G!UkhM9jyAVU4S2s ]Gg}!BA[̷hOf{ovnV^5%vdUM)`wz>pkNGNho-L`P,!PZN#.٢k}y瞳5&] _=`tw\1O 2eQ7' T*1OwgWvđaӮզeưÑ7a4/I!?:|3*Lm;D YpD>8nd|Q8J~P Z ˤ^ĩu&]4 K"oL!Q /bq`hEE%A0(wm'60ƵdBWZ@T*AN$H@ qB4ׇ ?P1! WBQg ΕDR(J?9G@9@$$' 3Ŝ qZ o %T^lTq3ZxEO (Ҍ_f@ &bAҙ n`C?t@Fx0^}Cu `Hꩽ 3C88eh Tv%B")qk>%sҎ'};}Oh\ .-J4RSꗅ¡4PuSbn^T 5;LW$G;Bb4A#{|Au8tc'r Z3֤ؼ_ hP0 ˾0πP0!o/P]$Zl߿_>w|xTe~w͈D~Hw1f\>BN4E=/<CD5\͛?OQűQBY:fB9Yx_u3N~uA2G.L? 9  .˱ @^>` qN$@PHUAr4"/áMwΦ||£,o?N ;AU#($> _XLiɘ# Ҍ OZܫMk@qmv2~c7ka]GXc]^}8d *RND)-ޔ0$(}/){kP,!wPܤ2z7McV8y3 V6XI4=;9kK1\j*."1<J,{QRZNLhV{ k]cRkO:M OYC[,k~su~'2%5 c!46lm@o^@#b܆eލ_3Xq|Ϗd7>JK< -1^*!ht$l729bHA5G&QU\u.ɚi2e[Ñ҃?ZebDC1=<T(.5P.?!MNܤ7 T I~Ga}/Xb_;P\ M B"|" ןoWK*V%H<}5??t>3%d8-y'9qL̏(ѳ>agZbp<lS(Yּ7 "DpZ s_d^7`bv}߀P@!LƲ OYf<{i5l>S?qn~kЎ(MѰߙ+.fL\t80%ʝЭ3P@4U{>fGHT%dt*FoኩCRKSqgOcjDX˙o㛵JǮH}[h]oqW Ii7z-b\Q-"a!I%SNN/IWێƘD†^lH*wq/˞7<_?Nu|w{qe޻b;裎&91,J.bJ2 x6׈IDVf-Nȳ) kz4#T7a" 2 mݟۍP -@o|t|EcP Q.Thvu ƒ瘃hR,;WbݿD(Odʟ=?An~f[ENEYe[pP%!{V 5^C1hDz\*P)Gη_xӳxF: Z0ȀJ؁?jq$Ѱ ؚ@r`ˊ@ɑ*{ݖWwЭg~⁹: U6 `cL<pn@h}a[Ld"UCh|Z!U*P)G'b$Cϒm1#)S Wݙ>ԇ ՞Gs4+YTtNIˋz,",ǻ?e4V,P+!}T[(U&E"Љ&w\*J֞wwꅱ@TĢ&u{@)fS7c , L"'5q2@)r-(ˠwe4d+%CJ]wZ;pcH1x^m? `xAHH`D)QF"'I YU~D*T5UwDpo\#szDHf#6RJqh{ѿϟN< f4zm/N/i@ ®P,!e.WYW&HD']xnpg%_6ן׎~-2=sjCG&*m 7q%zџhҒpo94s4z)'8m0h9QD8yZx+-l2fH2H=zmݘp 3 ,A5u 1\:!ǡD\B5*e^I{_o:?@ f;sH)|! -sق`r']E幢nJ?q2=E-847dWwz ;$A:`*iXc efE _P.! V}UpG)#Љt"VyTtEj;^~կA'Sj6h I͘:zu^oÉ712,2GK#^9UH[9̱43^q*3L~ԜmȈȿ6gvN&q'JcedܺH,;d^ ?ڱW)54Yؕ0gVTDn-kTުoHEi?RU?'&daqJaQ$yB8O3*a=)a*kVhOG8qk@N⾊y<{'>pP-!J?S[Fu&Mmw&YN9߿3 gg]Zuf;yQ|:Y"/ۍG*Fd h=<!K8R/ķ+yG Rem"3m8;T30~~P@ddOb1X!-9N?p/(1EKBC5>r \&oo1*]߿3?zƊ6 OqěE } UFso @/R̈́yvM@.ݙ F`f)x@2^7P3! mMw}{ޠ^]So^uB8b }P\=R9&`Ln~&5Py[B-=QO&jG#1 zVrVjH2@)5fiᔇ]8_۬J1ƷfNʀ<(΀ZzP4hKnVz9b?M@?lJXz|bod(MS*Mš[c]-Z{*yxWw>?@Qj`zE3֦cCihiJ{_p"ˢ'd]o$h% Q[r/J`řf"NyqPGd 27O@H"P.?!NR!NSG3h&KE/&o'J~ooo O<%XRH.劺p]V[+kOd=x|3983S3a8Ȳ e,8oafJvQ@}\Gbâtdм-)h1B&hHM"s2զD]m3|JsEXdRf3RW&Wj-%lPQ=k_3ɵDL<, (CɌU$_9Tm/yrڝ`\@3 e@)БP/!O:eSXQ*ǡH:'5$]K9{{g@ϧ'"ry=++:TWmu?g(ɿ=X MX%;:P^'nPbd4F&=XczuH)uW+]F53NwY4PSBe_dzSlwS[!1+Gh.}Z\T8d9L_gAD#GǫBcUgoi6M z ѮG4@9c^NҲ`Yb-W%:U:YwY R#i*#jZ?P_P1?!oTXE!BC_:q["w㢷_|~d =AmCN h\]|Ly\48Ҩ$.![-@RmFSuy!^qp`uX6*Ǖ*7yZ$|v͈4Lqy۩YlABxt^ ■ZYV\.W}"*!x#{~<`V%l[eŽAtRDWF3}uB]3GRx[5ZV=+ؔ%Ҋ*&'%g"ߍ7dkJ+ \XSgD!гu(u$+?9οhpI ^i]KQZ4!,/BZfȠk4"Rh"ާmU?oT#$?.+ $'@e1 # MH !|@,P._! Z_,RتC&ǡ2Dl5l;֛xW4'_@4U:2s\?*5dTxpJۉKcV9cAD^)%^G(C}} pgz#4g4V;A[`sNw~ ]$M= 1mـ0F@mqۛ=rr!y*j( Bh|: ןjd%]^5UKZ=EUz^PeTˊ Fs ڢ @ތw%RKǀZ߷I2NWwe_[hxP%ۢKu1+o׈pP,! H-Q[)RC&գx;||2Nu߷ݣ_'}P#QL3鷺m Ϯq{T|RUlL,U\TϫRhWnqWXσզvcǝﺚTlKfmnF%P( S Iis5XfN9ltVZ;7NwU9ך'iS@W5\fdmGL⚩X+mN^g>g-E9luqot$+zaq8UW+)0W.P.!+ JyU՜G- u[nqRx[3S^ٿk{GGfjnV7t\k4ME8uA؋|+c\ԛo%d& `q<]JB[au74ILH{=EdjϹ9tI)}s:/j p}w_[bE0usuiѡΟo{d(|'\MޒbOi}~ٿ B!( | 9`yu]+(-Ç)(.LO @d+]l,V@@l{p[S::$@ 2ċPB!LGYu+onΛnrW?S^9>wZ׫QԴgqowdMaqcQd'<͐0 )D `k+_ }Q: F)^:򶞴6W@^ r;ȁ3G2zhF!=oedU_H$7u׽Pz*AS ]S1]MNiGeK']l\-d|H>?Zg7ZBf)fx|鶥ϿϚN2۷|j翎պeQ@9UEΧWM@T "*T DYŽsE[Xo]_v<}yNT1ž\ǏYf[ ^UF{ :e9D+/TvXb"wU@z?&W ȭJ"G7smxn^SJ⽹ h' bRҋ& 8#jQ@X[.,XEse*,c/>`<<u~P!AC,bGl pP-!WJ(VTS&GD:&]5VjT_6o8WP@#=i=ɜm,rj ,"(`o>:`@wW6F 0Wͭ!6)?GWڱ Q9 o*&tK7GhX+ ~_9 )"eBEh{ekok7yu|£tH+R1 T4t_Hr{η/Nz.fË,rYdPl!xJ %ʡbEt9'9kLQ,|AYdI~r-wץPg -L?SǀP1_!SPUlfGPt"M BK=u2ʺU5m韏ZooJGm MDY)hfv<EohVs)e`wm7au zsi8ɔ,P%mE`Tb=!8nn˽jF[hT?[!dFVd+4[mY[m SX/m@+$Dv_ ^!}4; c뢑25šb˃ =ϔ&@8P,!)Sa B^s"D$˔v5Bβ㸦 ]<}p2fv)PEW&y |0=*-udDrT'\d\>U'H^N7 CL &Utvd G/ đ=f,=(oF{*ZjSp6E2t-jG=o))%?9 0>}}%9}&M s_сҘTg0摽Z1NvJ 뵙1eC06wȶ jCMpTTA_ OC3}h&xP0! V S\ MBeЈ^>3xhd*_jdÙ) ƕ9VdV_FA^ AQ[I\9k=Ж =o~ԉ__@q`o %->p9NX{Θ3y}H@nxc Л}0FD"Аt&m߶cU[&uǷ^?OYuYuj`cC~&C;V&˃|)]M\6*asÆՏx|bgr.0L19$cxT`TTʡcWOΰzV$sh6 kosAP-! QTRE6ˡL&d*٪<50pT&2l`G& 8_iJ )JA񃔖6+ePUV6\ySjӓ~7hR>y c% @6؉boq%~sJր)W d)M2h:#Zpfz(P0!OS2a.͡H.~8KRTB8BS y6B6%`B^–V=NsAKo:AuT]-dn {m"QB(]us9gO=SgCq6_らb`) P=_!L{QAm֊X3e1oS_N7ujj~ 5{ cDq%tuocr} [|"6M R Bb";"q͚4,eӽJ4Qr(eϪF6+H׫eӢt (w)6}2% Rʀ)?=å _4Hm4Dm<&Q1٫:|ٍI->_}q5" $pD 'Rf5 \lR% fAjX!8v7vrSVU߱YIS~5+4x#2W:;9}9x0| {=-n섭t8auҹ8vOmv@ɓ6!G&Le89f:pU֗爴_TW{%q=`@T\Yx"m{,쏈 ^@֛IG&H'4@ V(IiGQGRZ &XHq`#LSp|rǣ #`e>"ݙ^2cVYs^335=QcgPZ|6#]H>Jՙ  Q?yP(_ +H%)q^*L>e&}Q-s$Ieڪ23|l77TNXqx 1 3[lK%=s6H (cQHܛ@t648-yLw_mD2^i@La!U0zI/^hMXs gXzA&TW:) dItɒKĦ]2Q횫Z3,وxŷ_.hZcT]9"vZ#d V^@V%=H3T Ve)%tڏx.RBP5k%@P+!ԶWRlH"BhЉHϚNtW{}~÷][H@wQ9?m^9rSE~)m@˾A1^dDA4Ǎjƿ#5gMeUQkWYx:LV@ϢZ2,)P>D~Cpfsn [eܖ<sW#nlq@8P-_!(V٩,U1B'Ј.2J[.uAljV$ZGyT]XFS$ |\xHd 733PT[Ѧ6G/!?QުFt7ՍTWa[` ѐt`%4@nzG^10@^*L5CЈt&-ásP]VyWǞ:_4XGf&%p`^y:o9en(A4>'Mc($`H#J|&%&CUjSRA@)rN*O0wXh ΢ f(P,?!KD@T[} B#ЉIs߶qKʹjzy߶ZrZ7u;w5:$kHy ˋ nǡ6])gB!#QoU_3ڎ*:u9JG,dX1 g} ^ '(13)X\߶,x A0QLc@j= DdЈZ4l_>WZOg~Db~u;_(@#d:& V>&yzi33g -o#s ꜽnr,i2ԫa-?y/,һs7V~` P.! u@SjMD!5oc5s3-??GGMףXVz嘋G)Lm\k5w's}h|jYz;'U,-4g- .0dls/'3YǻMHp>0HB\ [!bg7DZ SEys"*n.6R;RSL׮;sNuWj'^>?9`:gVT̑δ6;X}HCNf#$]@!7Maf2:R{22OuwB?hgἕ!C:1^PϷ4Jr\cte`WpP,! gbRnBC1hd76b_~Q/rUxO \J|/Fi" j$Rê * y<bY/־D:9̬\X:_/\^WiFD>kA+ btM=" Vv]_UJ KLf@D: áh>V2ӿknKܛ鿿W^wih^I5 |[ u'ׇIqA}z}I>Vͻ~lzE{h+ 㙏72iKҰP-! 3S٩m BiЈtN+7NgU7wi??{ ],Yk9g) '[y-f%JWZg"jހmV*55#FؽE;]'Z4+!Tce\Ut ㆖6ly$*,աq"!B#Э-.^y.9q8' E}A ۥ2)55ISջV6e*@:J ?M?SOpPO!Ll K ԛ5̻5˷5yy:/yT9緀 5j iW ^<ޙɇs)\m6Mh5SUi,P:vҵ| < ydq?GL@A@ۊ-q˽Ypq5cJ,ش1GBU*/JlP{Oݻں8ڲ0TSIzs/FP%{5LÙ_ },=v4~3 ֺtYC:lE߲"Kgx)җr|}]Z|oHӱqJQd߷6zu~\ۗR65QҡFG(|Mjݢm$}i1DXWMל%qÍsUqļ֪}g뫀yyG=ڗad7 Џ|Nc^Y?69n×2q7l +Kx:A9mChpgúƖ8؏ӊQR²{BHk{Wvkz.ϓ?a`7ti˗5SGʢ!HfYa7LHsP+?!{ kRDث*^fG^}-5UW롚4^qqg&Wg*4xt3[̟iZMj1GGTq;JKh$w".Eܬf5H3|^Wв{[̊E1NJE&oj ִVB {ڪ NWPE{/*;k9c&͞m I(%Xrˡ(D&ET{.VJw05k,m#(U[\V_JߋQ\.p[:;6ӈ ) `8P/! w["4?kJ˹[-,Y5b[D*w)vz:vnm=0i*:VdcI(9αU(k֠RB[=j )*Հ{n`WDXW. $JӚnP/! 4?(Y)>JsW%)5j'9p"[GZw^|9UT0=Gk*+սvO>n@Ft>XQ\@Ƣ.DCF#I 'M(xLB\ նXa@6 Н4M]. TVwdZY7 zLyIX =JS xIc;P)7.ǔHKvɚ]njd&^>$..:^5iYUGf?υ_wߜ.<&%u;Hb&fHߠ]t! Beb&@}cDBjX'ҚJP2?!["ʃ3Ϊ8[.UZxN|s}ͷ- G$̖IU6(-<xؚuP mzH WℳD)ov°2 ,4CsXZ085@-_t]/bf+c g@wC95+1nVE[+WelFO&pńhqEA8O[Y&i%ZgdUV{~' z1lS<0;gimdzyJAX8]VW~M0&L""\TEҰVZץЎXp?q vd! )P) ~>`'Y<,$?8.P3?! cG]7߿oϟU5s:Nz:{Iy %uBp"'`L 7X͸upso??͗ \mau< [d_K c@D{% r A!4vt}]C.gU  \w}KuOW'5(#x4-(xoi’t ]Kc1>YR5{֐ <ƯPW{_q ۷ߔq j1 O*/ch  5 x}HHZP";nGO\j(Lb9@֞96A8 /((& ^ ޓpNTl+ِ6MP1! B}Q\jSPZެƲ.nS~VU?zf)*LJ3'Jҏ65"(dO\Ңo>R+aYZk9ȳٿ#3ɉ_~L%|wJ"9C@O = =̗[~kH jɰ F:wPt ¯j+%2 uS} MԞ~P$%CGI2]Tr_7^F>c ;4.l jkH 3=@x%"[P m҈[%l*nl,pv.ƊSf;FP7_! GP\#qwsQ7N?sovL[=)jH|=0ij܏r)o )ި3m7\TvρmǨ1hHkI[[Dbԟw*,c]}Jf2e⼗{P3@z咁* ʆYA[u],[[˚, ת@m,ri˝b6aP\`? T:1u}׽{4|7ڴ>N#Oc/N[ߐGtXMJyۏvX4ُ[8Uk;ӧ# :9VU2ޯ{]âÛGpAZ nΦGm[oS'N8\Mh-~pP7?!BBQ] NCJH1\{ζ+v,waz%k#jgSȺo߫.œ@/C=$@z=40ZKPP˴Y\94*Vr`Gk kʰaWU&)},;%̀˚ ɀ;j ~~F-w@ @yllJR~RK] >%][Fy?ZNAL< Q]FEͨS7<ٕ{SjAY"`}@J]mjNhvqقTUM:u^Oǎ`mr0.v}GGfhF|=m:(|[ҺStꫭnՈP1!+/wlQY( ${7\;]U}Fyû6:?wuQc "kܘZsB憬U -ͭ PxP 75JN659w!ۊ ;ϩ.ubmO,& wFX:OOu{ϸ"{[|朹;-M1tv9^WRVJ]Yj<8]ӎiMUM7u6uqJܫaҠSWAcԠ-ɪBc/, ^99 >@/F: bN`uD V8%e7PA!L?P+m nE:y}l⥋8?ͱfk4U;|} Gh 6őx卶{wXrp?Y'F,bc4"-L׳#DPhō+5a( =^qwO垮ˍmW[ǮxCY$:wیD+]Ke-dR[[ڠvvf_?3T{nFtS|'E{O51Ƣ:^֯۝p*8|qwQwma)yFf tub90Kw#8$GXfht\ VΎKSoYhC'QAI+;LsV%İSy9%"V!V <a<D(̹S?w ]vRrCA@x?934UqXaR&h0)"GRDA~Y- ;_B;8P,_!{ 0>*XÙ.ţD:'^%J|U*k))pNɺ|Ι <JYy$MOtK5;K8bv@;1\n:sxf;x\+d(/3"7Ud ,bHv ϡD:72s={G|q%)ҝuYu",B<38JGO(@Z!E`6bY *eܯDJ!7~Cy3MCLdGVw Kk' V㸽\w쏸(ho?8P/_! 4.pHVR( áa Z.Ek2긪SJ_?R8SW[K*rZ`)ϐh)*+XC7RaI9kDp젒fN>xvѻ ( np^*;U FߥO{oU.c7ZE9(>f cEh@ V=gמxzPjk |췍*bSW(n3PIGni,}N#&YhtG@̘z@n:O<~ r{dSJ{UTTUyooVf7E!DS蹹JZ9n1,PhsP/!iVZj2!B#75یd3ڵǿ_.>?_KJ.w*j)"U\HhQZPfk@HpRf̱ % N'v;wEs"`w=ߛ]g5}Aq)]W͸^A PKp#/J♮C!t&}\mMI*&H*cnd.w)8.p*P"LsXbYEuTa l)0s\ 䶪h\&^,0me DUjV%:ot uDT_a ^D7OuA:@P0!y74WS,0ZЈBMo^>2sr!\]|m`K.T`ID?j; @]rix06"9:QT~}N05ή+46#W 60M)5*L % ]^**3$PkYރJɸ4b +0F"ЈtBD3&VHzeut ^.VΞ!loƄi , 'ExҐnYJK0(SJaZ43$H,)E~ɦ5 e E?Z#:Me@mqU0TjնπYcʓn`OpP/!]&T)5AB%5^}-e04?F_PKXX|o~u2f>?~apd|n$kCTFA}H+H [RHKJl!s嚅xrP/? WGJ/9紪j;APT ૗M)#,^oyNn:8>g]2MR4BD=xi񾛾2^gF8eݺ2"4*h8ɸ_ mvy5ΣRzɅ^e{ XUc SܪMjYr.$ /u;)]H,%.ąѸ Y T"Jt^y<)lj@.P.!}WS Ѣh⪴sz.Jy5+Ͽr+8ުn&Dkgz(Pԧ[% ^E!ċsq_^ =M[:P*:w#^T"ǥ{D3^*:Х8LĹG5ZQ2;&ʛxn,@\A_?'ZM}DKhZUj9zso6>?o@ 13ɣn+Z0 1{.xEad`$eʞ ׀SЏR3 V ̉ uyi:>S 0seK~DoP0! y TZiP6!B"4Mێ}\xj\;ӫ`4 Ec::Ol3?v u E.z} a~J1QUA8s[u,feݱ _@WIc%xP C[Lp}> >fP-$>i+0$Q`V BkЈ*}>^reCڣ<\~WMq4@Z$)X 3,Y'Z %8EШ rx xDq~nocaXK/MMHV]B0t־yI"7G.ty[SʕeO7\0Z3IކIf` raGKz! Df:ڽ{su7wI9sW?^9) qRI@|!T BљdCm yUt;r3x/p( 3h>K9CJ[wy ~*sEX,-tדM!L:(3P-!@TuDι[ZL?ZWכ, M1(btų.A \JYH`CO&,r{~CA5裔QyAY3iXJpzGz[ N~UWSoJWt]8On'1o!1Mhؙsg֎m7UcWRElbH&G0tNyN[ZLsSnh-o G/4EWñŧHc]& FSOwf5N(\c(KJՠ9HHgAJRb(D+|̀|'P0!#ːSۡ*]B!ИN7SR.kvޥZٞuN'aKg?864I s@`ߧ_3hXMʗE`XR2#Ʒ Jwjl%WWk[{ tts*%}5ݶn;J&J/X 6WJJ Q0/lWz1cyLt3 ! +[ޥݶ|)YY%^`oG/znsgIx]gXD(i;OgVNgOJw (+,9V5 CViԀ4t D."'0 Hh@btl6N08P.! 1SaJ4B!Јk7|[uζJ&kw;Ua[/ٖ܁l YB"LuC~zғyߖ2Eu(nX`m ;М(0:rSei7sx!}5f ĞYXx {gMt @2fҬe8܀)p1`S`Bш"wyDRfg_% Gϥ7.Z{rg~0e㮶r49 h#k썽Te HTB2Dܧ vb<"~}_h& "pP+!T\`359ǚɠ ~o/#UC^S->T}c9K<~ƀ #SHrBPQTpqGZ}2Ty_s 6 8t_0O>]D.q鷄HX\yٓt iڃu*S\:~0?<_Wj[/,{ˁeuvP-*v:]fz}U4us7bwgsŨ~5dlRY2X })Jg)aQKgBfoBW`11`H0]2ޡ,#z>"P/!o8U妢3ٓfĕ\kmԬ g;K5t ׮;f0 vl)oYc0".F# p?QworU^PW={Q^g˧_kR g$ A')PZ@gw'f[|vCp^(^PXMPe&C7YR`}XW8 |9x̙rIP^\<^ՀVE C_m {EkE9 *K Hklk ; k}˃!pU=[Oy'/#,͐r>ĭM/Hɫ'Q @ 0_[wB!voee-IjJ v|P2!}߯XT[C'~k^5]KܽݯX+ Sٞw6m8;5' }Mg<XrT}W(2Vi^[@q>_I\@_(WVÕn<VBȓ]!(qK,Bl0rgǒaatf_S> rVȼJ1oVJT[rs~~>}Mޛ_ǯW-O,a LcF:1rJ6vk͎?֊g/vՔ{&g.u-C/U˓ʨJļ2`QgXaXj7>0"~KO&%( pP2_ IBieM{^Xws\ޝ6>9{D9nŅNDY]E7pY[ 4Ց~?X/x:=}Ƀxs$:%I=+ל7΀)*m<3E=bk1z٢w&leD=qw.zvƼ\;# @rWmB~VȫE s%ǁuU ]8d] h$s:cTj? NS?>x}`yt`>:` ?%s6;}|YP> xjP&"g.S5TF^}Ya/BU8\6F8Q.Ҟ *@7 Q:` V1uU%0'y͛?  5??Jq_ˢC;rI'yCs}35FٮY LL{cOs4$0\r¦>as=SV+4-2lXW`wi7"}N`ZT54Tcav_+p)pXn/I ~Z=&P.! y<V]U+߷-l5oڀg$5O:]Fƌl^A[{;Oם"qM ȑ[ѷ28\b:1LiybKv1@C|/O1lP%el%92 X EЙBƧ~/Uֲm=J3E$o=]}ǫۯsAACйwDa "-Dx:1i"aZR%9%ʐ" 7VbϟP 2wlP/! pT]K!;WivܶMy^'qހ`OSޜՌ,^Ui A^K b%bD jhr1Xqt@ˏd!U %ݺyvyA/ [.)Q4|cШuJ>wu4ުnS27gP=5ݏMD| 5Ɩ~4^RFXjMCtjwZN᪼(<"P) xyH=;nOR-p\87*7VȭEB TT2_5z$I0R{RQ@(kP0! S& B+TS|Vh{W'#㡪+f(2\ H =K͟(ѵ Qf̡nd߹*C˗s\Nq5]PQ{y@fviC1/H8N[JlX߮XQ)tЬo^8~Ol9Ī!G@ )d+ҧԜ= B"H>}x5M*T7YO iZIĸ݆Aʆ&C+Puz$> LcC~C( E\t!AlqW (0<<QR5~c,|@z?EL\8Z$V7P/!,PR]1*ϡhU㫕wlq?>o]oݟw Cs.^v'Z<{)zn-ZM|#&H>=ofanזk4;̀[9Sܡ?-tfN|JctS'N5G< jöǞ)쭖2B(Fy4e oz }oIk:zCt7uyޙ8$nSR`z Doq2K(W\2AD1OP}|.A@H:2nr/}蒝};1 a#._SK f4jh{`J`-W P1! ,$SnCBrӮ5y7{gK>ӼA|ne70= b(Xꕳ-~(Yv^RXSdaoKǁx}W5HXAY`t(HCs.`)@e; 8 d[ۢ9e)閈"ǡ4U׹׏7|+TΟoZ=V8UOtz^ s懖WRܻk[&(Ь( JeH΃a 돞[iX=3ÖulqgpA0dJ[C?j@@J HShϡ>;[|sܻiSte{epfZ,Pi %*e<[]Uşr[&)!on^ǖꧣLJBj 7Gsnj7^6ٴ̨ 4BM(;b76ћo[U-^9|Rѯ xzk|fИ"MF6n]R7%lZ#o+WrS39^GQ q]s^WT.5U㬞I2ib?ЯY+-m3͹ƛoaS8:坔jj7(z"'H 4:85U({L> .Yq*ryH!-3ju=b D Ҙta)@ 8xzPkKw/>.yutKJw ^g} Q 6Ki<%k5S:ڮ5uJI??d zͶ L;R9iMXσ+6#g ˀ;zIf3SzkB+6dr%)h&46Mb?I?.|@ cـ״cPP0!(|xS$ϡew.ML%o}W\oZ-Τ#{o)M7ܝU>nSs==;";"E bgyYm&^`CtdՓķ"h[KeV8*ߣ^rwz\f>]~c[pAquXygNdF "6 ZX>O2**GSP\5FLh:7 G-.~P0?!SXAcu+T$WKEIT?|vIZdӖb17/h99|@×?w@kxZ|þ!=Cϻw(}D?1}/* ϟ혖[|Z6<`|- >wD, aknRqzTEoO`!ʋ sؖx8$,^9K&[3qw?PSI?}0aaD> F~6a@ 2wg@tU 3c)""=pd'@~2]ϣsb퐖P4! &XDˡU˩U@^_ݦ n 6HΑ kMxKG38@jk,dx W^めoy?b85piFK7&ϝ|6R/V;ܤx'!ݘ9:Ҍ+6h2Zŗg $ DbЈt"fL{{|Wk礨l.@G,4X^~f{{߻:%6p9yNMr^D` NLY(skLDP@F041ҬVR._',, .:.I&g7)uH&v8Puͳ`c&zNwtb]@bxR71`hŅ\//$GɗV2'.#P5_!h1AW UDBшI)+<*ʙ4n^ݎ6_*CX%7od!^<y\J'*c1'uJIo@!>1KTh'i6DŽו)p^"Br>3( L TQOCtsꩶmVTM̀߷<#݇/"o36GRFl߅ }P7Lavc57.107.100B6$¨L4K ifYYuk*(!ٔI 8ZW`8򿿕:#hMa IqUhšV)- ]@ڹ(SKGSjv9f N"5hq/E33AŅw0_l`?` 2he )}aߙj`s6ebc FeY2q9Uu/)Rc~:XSVݐęjb5sU*i'b#yoy_};ܲ<-x[4O[Ǟ)p tJJ%CB^<:`LI 4H#V'ڜd`vT3vQj_:jDG_Ool .%! v`n=u,f^(K@PLE!b"] B_:eִDTgoO?bzPGCP#Tl<"R J8.lL Q7 2/d%P,{4NMV/whӉΗiM@g|؀@a/Pcș~ge:ϣ<@T6 '1(pP1_!?R[h١2H,ISUY-U~_?<:SnnUWuQƫ8 Nrp)pRJ(jXTf\.G@(JYK c3g~j=5Υ'wʎjqڼ|(6F< Q7"儐px_8.M%%T t"/Dę]IΫUY+[\/G^y@FxtqTy'g R@`EOvb)E"FTI(NQ^A(.Ueϗi><-3o2āD )P]E5)=aE. g%3P/ JBa!hH!#w{Ei.wMqHߝpVds5#Y_:Cޖ3ls>3#-In}sB23ErxĎxщ%ޅK,c5>DbUmSNm%M -߂|Pgw_Kf Q%` :j`twHw_C4FZ}6\թk-=H$Й4&=ۉVktyv6l|ϔq~y{,UD[GZw!n8=4}`51EE]VN܌Ȅ4I=yhk;fY钵^s508H^>-!u@}""<$\#>$,ox51+@~m@P*? fB+D0t"(D҅Kꤷ2jx `jP"6P$HZi¸s1fmey`wq6fu]/N+wYu`} hVﶍW:'\By ]3M38K5jIZtmS$@bۮ h B!ЈtE:kjb3E W\J) (0/b<rc.>֩7~l#L ;у]$D"813 $֢H2%VtFQa`uU_$W XDs_5XV~ 3sT` ^>cpP-! WR஝ GU-MVk3*Lέy&S=],-'L:&f w [nXT5D2PLnFj/kZu4aL<X`g.y%;hV%EDH1X@b xcw>x@*DbT&Lz/NYeXR=x_7+Xc]=8YL Ϝ IL&ycjL}fhTD3Һ[ne_sXD>})4?%a e.b, =]T QP+!ZoU'1BgЈCi3+/X^2駝?h cK̉o+<%ciqd"5XATp'(b/|0`ԥ]z1XWU%eRN1Wuq"4,32{g*cy`N8BZrހ(^6v=fsnj]B4"mD%n珆/XR.z"t|pGɸߋԊ&A.RħQ+Z.ZaZ9RP.?!v4SiD.W0H.UcWESG^?>?߫'QpцTYL|sV}V(@(2PMأh^~SAnv~٢:6`N҇|;8nI}@ Q<(4% a @%/jMy=.ab$=C;z[\>22LyN#?tr4" -YP 24#['I>¹9Β6֞FzAJ+EF_ȥ`$d`H{&w?v<5[V/GSa{yʥ5kq Ř(jUV'κ" xfh3N VWqJd[& =7b=x<2X?`,suP0_!kPSڠ&)B$Pz! Sz8Ͽo`׹߄TY@l)6•ʵFh٦r o]֚c NtRjT$*!@P_'$?g3T;dCճ=ܑdX .=9uG,;)F"3e|b iUv?Oi1Ē6ɡ QXde(ƾ6ϳ:$DǤ"UJ4A쪫 ܊P@(D*`tʞXP@S?@HLށ/R41ؼ1 Xb\eP0!,uj@S\j] DOrvH[/#8ϟ\r I ɉ潹6RՃmxii&k%TfV*!S uN]"ޞq[_.m#LȢ~㛭"mw jϘ@3f+Y+EbZ_vYa)9B7Lj3\~??_|#N!S?ǹ!*ĝp@1ЉW7U8T _dUĩ8ᯇ6XOvU16H) N|_2 %Ң/c O]"sP0! YTU0HDz! ^޸_NU n~xjwSg8}sUy5S@)5=N|QE 8C?MRDtPߢ=4kR'#Dp jS@*i]D6D {xWhȬX(AQ^5<p@emWgA=hиD F~o}K#]8s>|}{?,bۻ0BZAnI ̲>Y/[:mޙѕ1TjV@*p@rϓCjgP0xl9V|' qH17v%=3 +GP.!+ |PTکRm BaиtB ;'}ZVi5כz@nxd y@W ո/P?!LؽuzOfQUl*lޯoz{\<އ^s'>/}`CY4f C⸁<,8p\ yc ⮠;ͧ>m-kkvޑo\13T17U&'&;$U$(ހ.z0rBAp@fTez_[;250~%ϸwN>GBydR ,FK,lfNkY%]ןZ8v:^sug%{ae ;Mﮱq3:TCBX-N}|L)p  $;zN#&i$UzU*΂i.QY{E\ӱ\:Wa0x_ z;Nm\ǘݼ#פoo~gXzd t vSp~Y =hpP !{VUY2&hDZGqyiSrqYr~=Sn)UKp uK@9FC?H=[=JKz2?D>"37R[T($3Q{1@P-! J_z@QZh- C"2H"BVq%fQO9+8s~t?ga%3uȪ2StrT{k'p%P|N~XBw"R^݇ $6w'8"!sg6^Q_x߳K+K62à|d() b&? hn LTTfLJ-BR8~oWDzN+8~y|xW׭CUg8qP+"1?V~[>zH)^}MN,k9Uв:Au!Ԇb&%ebѭ@^x  p7n!P0! :RIB2hHZ\s5Sr*fIJRJ)m]ayaG8ϾuЪ1Hy, 46pyKz#<ῢ1L](D_! 䚰Nʸ>dsj@YThVcM% .Yf+5d4m%D)q#E1xt^ W|6*fIJq"nNu ^kZLiELJqĦ<n3k vύ -B\U Uun_jղ/i*?1`zhϸ{eP! @Ɩ=GL|œBN,zl4ePw# @8P/_! ^4oU LCqWY̩59wTǚq;pSׄ[-lfgԀ]C莧g![É ~H$wW C's'*2ԠJ Ě˪1 QϏ:XKXlRSHf'$6P噁JL#HKhgwޫ|seLׯ5?W4&fT]-^qԢ>JJyZmPx.8R`lwnŕ{yW_NjyK϶BJPQ$[춝9%s?iRǀY8`=t@P1_!R\BcЈtN|}dgJ^[nOu?H(ִy'yiwz܏are!O'٩U:%AcI X 1GE-Y$ݴ[li{ԖJաxt>nrjW|zn?'{l8%u"ZU * ˕Aᅡ`&A6qW **6mvp^jI^=:_N>=}7 /.M'VZ@߁0 r+n.P,! oS]-<}.]̓$U_[geΔEgi^<}I֟9XT-2~QҰ&ϦC6N;8׃[Y]r=6}:xD/(fQz Lc`f.!, 'Ee=ejo OtԦ,qBԆiw㪽ȩZ%UqZfd;s(T|#YS_H[8PR-Ly $ -q1g T$#8wk {@~͂=L!#,8P/! RP\j#u;YRgf涉ν_w- S\Uc>YKyϏrAC9~j~54v+&!5VLV'5>꒴ ɛkggw :BQ{521_z9pe̿0zH.o DzQ 8`I x؜<#xѪij z2۹*L&{Wƿ_u@k\h[`70\^x}Z;iMjm{JB}ϫݗ3$aJG4}sYv"^['}>Wb4@GI=)|Y@>xP+! fT*}Dbѐt"Tι[TIkSofq duxAg?htJf֍qE{̂L  (U' 0҂Dh!] =$,u:GgQ!6f@k1aJ3۪YM_t@3>9cߡXڦǠК D%Љ}O-+ǎBVYiy]2SO?E0P:?! t3t@VQX ёJJ%3IVJ#<6FHzo6]aAώM[BUZ|'f~ *<[NU ~M $"g( .H h5P%v@%!,&rZYR4f*؅-^ bHG5(.x@5k2A<&4ݖoweknheБ: Bi+'2J(U>kg0DHYM/K&B,5zx.bU~FFe$u;ME{K8,He~,2,Mێ$P&^BpE)fy&uU`Y>5HVk{m37H!|,OiEtC0 fљN_C{:zP0!0UXjTˡi/kܔ]I*))諿tU| ^P@zcUPDBnL -[RZ{Rin+aޝ s]LHXW19!̯$(m$35,dOY!D/8R ॔-%v.4v 2\,@.k h.cBMBĉZn]iӝo.n,,*\)~th}Ԫ(caّ 9S4KU.eь8 Ta[5ÛN]9_61e\$':3_^9tJlr{#s/scǎ0p>hFq34/q߀P/?! :WPW`6* BИt&MDˉ$T+R ?}g<I3֎Cc04&fhq%~pM]!=#ΗDgyq> 3L8ȊENGoA| "L {  R?@m}4:,$T62:68Ɍ\Y׈h>ЈB-D|e{nZ:Tg?\e2#]SϖmNotqŸHT[jJ4UR:syxCȵ NNI# ^̐ղ5]?y;uz{Ww@.30S?,7~/@P0?!ٹVT٩X ١dVoU{JuufF^cܱ^! `uXQP(kc0D-҃Ή9 nN1GB1?>?W  4x59yĈ5Ɣ x/\kOtՆXT0~ KD 4r7?82r ˁĩbXT5#dЈbDeUqTޔ+~TӝZqpt6z墡čUM+o2b?`UyD?ra}OBnH".B>r_H>6L\k-pP0!Q! Y ^]Jn̗o]U|f??s?A ^(j7IM"hV[ gzA}zDG7\DNOcOlTy9ZЪdzZwEk>]=>@'K+S苰LUdY^qn0{)YivQifRk_3TQ*;E1jBkUn^JSo)kXLyH o9g@q"/@ jPhAa2e'3* Yx YL/ˊ0]m{p~+m\K V֧ @D{}`(wURP/! U!jSFK n󟬙PLJFL޵e3?\d(4\?W'7d"2TpO;LqI_ӓͨ28ĥ6~\߾_:O`7~N1`l45YC6h7e˜ey.21@ ^+TUXQ )Bl56*B1~23[ܵj%cX/9} #p/{@XsAh<0'/Qk_ t &`|b[DMG3 *L M}~;6cb_m "npe#O56 F`aP1?! 7S]$ %&huHNo>B:\& T/a6!G@WnaB3~, (݀!nwlgv}sBjU3_ɀyNtG. |H速_z6"筷jOQQl*ĚEЮVnEKf/͙JeYy)?"-a kU @qAIFƕ8791kM/qӢXo陈D\WtTJ aW7_aS =}y HP._!sS]$4:\Rs%*޺Ne4q(_z i|c&D=! bRWBX88iҙn(BNZ:5wྚ@blKFꊕՀ]=g|@:~;0_zjŝ'9ʬS[! SNM={뻪ꄄ]T|o#v<:Vޕr|ڸY-ɶkr1-}nᲵkhPWR%obۀ5:NȐ=cfek%귗޽4@;qb%0N DSdTrP0_!ڴU],и_:nR&ں_?a>$^B^c$r$5PK^w<7"KK+SBZ]XsBΎQ 5[xWU},9x6} ԓ]Rzݫ('܀݆.a%* roÖfCXd_u(* 9)#p4"?DNuڸ*EW)‘ RCۅ,N/Np Q̺†N DP:lӵu"..}`MnkH$jn/,jP[J@X=-ޫƔBI=fzP.?!S 4 M%9hK~U%KLwS-qrDzTNwxbH W=a|,W.k0NAOh'.tx1Fc&gg`XSs\4g>e8 T|botBJ+}J?DTF- QQhDZ1E^]4ju}1cBa">,PE5Qx+ gLo{(6aL+5f.-.3= 3o*4F-V+#U@w mΫkWAH|1ﳀP._! O3_UZ1B!Ј"WS'Zׯ|e}`'5{Gu׫siT󙂜@[{,GH [%٘}-|ejGGtL׌7ߺxc8s;f!ek_g\ZD1e{ Oemb2TTfB#WNDZׯ3??#)QEI[{.'.l":ֽW8_s bCO(.>t_NWvK,zԿ u [8B,N@{hOJ`$P)!)V["FhшtO<׉ׅ7/2uo?oAbc4XrR[q%u J&o2nϫLAyUoIgYHֿnSwn+u_FR%# ]`݃o f\!DfК"'i8[ EO%e{ j2Qth- 9U3&+ñ&f @XD@(/үڱ?N)`#}2˷|‡ Ds8,@t ݞ1/t pX3nbOj:qЬelmcjƎo1sfec'8ɪuw9Fo/02i,zH㶨']< ̋sc )ܑ5.m>Yi@h:(%{Lѻ5}PN_ j631}6>xߛyq6BѴP3,@. 'kokSlP/!|kS%ɺ֩*wj^ǐS1%_0\}FxK*I @?ԆkjDxAPz`fᡕ\]:KRQObxѐ ㆻ6Eʍr7\eֶ0&mt%u+Iɳf74)JT%Ɂިe.ý_Ӡᒯ5(8 \@DzqQ):f׿*<7QQ2is_x+rQ |3ঙP1!c ~ R%wZH/+y׬Sm< \.!o9IóOpvU{.;hm:A E !W}U0=?qab=J^pmf;v(7kSr6?yЫ+,>1G@~5gxh k`t @ hevc`:K%.ez[UW^dqo77EQɵӌ!8Լ@tP4^p0B'gYX K7XN`K(MtmP[`'n;\P/?!+kT"xnq≗fJ{Z`\FEϙD)'AK EtR~yx$X7l߼Tl`ͦ Y\P, _#gsgVyl_Ӓ0o")5h_!L [PYFt]λ5lͪLΦ_{xShfnEi:pP'!{ }tnUlá@Z#Bxu.e.oR[q?"iI/X\jE&yR`U*?N;;e11SߊvUR+mcM6"O0d""XQfroTXeB9?zCrDpW ^Į6CFP= Hш"I޳YrR*)u4" 8U$ʋ Bg%4jO} CPӄ'q59TXkEN?(8suy<_I P,_!? UXiuv͡^*Z\Wƿ>x&`.N;9CȋHuHGAkHgv*;^Ԫx\BxW+ss1yk;cWsU2ت1@(?Q9$\PF*&AZd*/ L+Xp˫qj0`iy42J1hD~= j%JyZʲ\Wƿ>:# pƨ @I&xQ8TMEuYTouDm1tT0 k6y-i "P(ه3@YPN* mzfWp@"!HNP+!6U)*mŤ1/=UfkUoj1>?:?ןxMF|}m5F&*3w%^H@Z34~"H7@Lrd+`OՖ>GV}͞4'"i!VI eY]N ҙ߀13E]X'9 џ@ ι^vr$P.!UxU= to<*s盫7+:xs8z̠<}I/te:W{eA!\m`Еn_C o sbzr`R]̷խo8EWCs;gU#Q%5`] ̏r0_cw"?UcfYk$ oWWj$zٜuL{h^L HVpP3!\nUܘB϶f+x._* -ݗq@vCΌ%X+7Opc3@wғ֋Q&PC9/9.[U}CE#zC;j@v(yZ3L` tF)SEu =OhDQp'{ YWm8rLw"J!( ^fnd]gIf_ͷdb>q;ҧV._ Z<"y^"` J`Z;UR*"l5bXƅ qPx3zڦel(?%FZ{9ٴ8Wp[JB@κYBP1_!u-S[)*36D+^]͵A׮'[jٟMkH6Op=^;ON'1UoVr 3IЬ{ae(Nѷ,y!Ĥ)=X՚ u(:tY88KV _.yL ]6zHzJ@@}aӦgmk5kP4"Ƽηy_:ޟ{uM0paYZib<$zN^vJ nr'+vxoWu5f7(`Tm\KN-eR{xF}\h9m!G~?ro2˦hV?xwpP/!sU\`cq :#5|z??_=n^5\[lKRv7 T8~riȯHGirm\jO~~,߽dǣ][[ c3 D״X(a\8ϠO< xZ&\ 3vuǀj#xUX~`a8gQR着%R+JG.]_rT h%OUƷIyD^ ee)+213{B>" sTʱڪ+Dt]LԠHJ 0LisK?X&x$&hƴ[ SwCq}5ެ\hg]{љ {Z͹lP ,|5}5>C`ɏT9 w~%hWQGEH-gǺ6@[ixcĆ ]!3ǻUǧ. [<8V#--X% .Ú9FP/_! O_wU\ & B#{7MڦyʯZL'W9W.0CI V*,C=*Bw)rcM 'v}M'"ށ,`3s@yiՋ%),8 4)&BgL|D2|ٶ?&1OA -68R@¾ d N{]Oa!ZG3yW#]+{>X7Og[f@Rr 14ޱXTRk@1`Wu iY}]MyJ GP0!+sS`C~DZjeW矿~vjK9χ\QQ]x(.F6xeHs?Sxg*DrWu2YÈq @%P0rkTsP,!+ TcfsW[IJ|\_z!6z0a~J=1LYH5Ec(!1mU :>ON0UyiiJ3ٺB^s[ȥ %<;_4? @F.L]GNX—ė-7SNt&D{fܺr+JזO~?J:uSÿҲ@=k|#:i+$`4Z! 4zg`ܣ\= 54TgU/RYHB9(լЀp >Oz|P<_!LҦSPYf<٨<^ep:_|Q>PG}D<7yub޺Nm.5#^8=o ja(% @IL |,~7 }uQ\(븕[Wz5mX)Z(YQ_Q)挧4f<=Rz}G]3o9ZBa|<]WoF3fl\-_UQ+, :5 [IǮZsm }V|scǛ-qmRǷ?z}~gj}+kW;9$UΓdZ FIB!bB`'QGcaײNmKf]τg\T6nhً/.^*Ǿ@CM{s<.Y1:prǀȆ30D HJG;,y+ `uǝKpn .2M4Xj-i)ך {{eƧ)?b? 8cAI8޳UnS/&[JF6z)fiuk.Pϖ a>]{{c=!hosfjg*L@E BsaU ؓ{rj%}xba\mtDŽvƣj+SXDKMkP0?!BX& BЙ4D"v+,㾕7GG3U9^7k~t|Aޜ 4$%k#>3!.W>$X_Pw71k>sʸ)'6R0Kݧ ZClU_Pș[@Q.jp`{)'i܃XZ #>G]q퉮77QoA["_K>BE[R>t)۩eSLUw`<:H`5A` l($ ʇ-PzӺn>^sԂ3` Oc!,.r?`Pe8mT%o 8ol8P-!wjHURlX O:uZ&|r׿ʨ i.[oFj9$V٢<Ё?ZUE) o?r3ߐz&@TSY=gӓ(]!`֦&E]@޽~3X)Fq4`)@ @8QT"4..C1h[.'y/|s'޾p+d"E isE2 M>6Tq7~DAe4 jm0$uuf +fN"S46ECVdHCGŕP鷀ۘR mg莸P0! πUa& BeЈtBBGKbrN0g]!=7@"t e6eͷn"@Z/L4ݬb^?%g|lǷ}^JL1qhZ/Dkf]U y2>7rEQy.rs3-bIv9{ҲËVgД_)8# JjZ.zcWkuN7x٫ "QŤC"+03ө8I0l?p8P/! ]VX8 ͡h'U+8u*%USn\( H->e\#-Y/oٕ' lha^K1:n;UrSWGVAgF `p!? 3°57̈́H>aİ6O㩈9CtVO§/ 2jl(LT3(<|/tsP*! TV[a*#Nâhk7xuIRu^597^~UMInqưĪSMQ5vZY6D%FjEgRrL.U|!~[qUoӥ٠GN6dD3!kx@"UIOQM5h:CjeIR.wu@=]7(o.DLwj`䂾d]o!U|/s}nӃ}8 JKQ#TD͹=,bvŢe%$q,8ľmXm]@O]`8P/_! `S[hUBc*gMfsχNohv?Tn>nL̒zK 4P^?ؖsDM3҃SF/F P qs=eR9<=g^SQ]l@o|x2 ‹^^>筡 @t*|&zp5gpZ!ǯ5yqt˶jG~_33tOoK@qJНz;&2PPqLYn A!m'5M& ! b ([Y$(ݫHh."ٗ%X`g+o^C 08P2! l;sTZ3wZ~ȓ^k7}9s,oiŊpZH٩5HeWP$!OrlU#3O:64fgfֵK46VIv{(9תkݡ^.F6H;M8{p/ӃnQ(z@ UM[ѻ@f1t5r N@ڏٷh9`SaJ.E2%z޽uqY-&~GZE*K"0-;eÏusAt<`%]|r\էy41!M-+-KP2j EYI& @\ 5 lU]VM#YX@m|MEP0! LRT`ʃ.E1hH'qMM^kUMp{-3< C.V_7 J@۪#Lq/nw igHԧD}Uq~qG:2/U{=9*椗u[ TTʞh2|r*.!ZN?іtP[kUi]MКt" !8U\մFn*z<x~mȢA&݅6~n7پQZ}L40fǂ{]EY{n2WP('T,@x!zh4IbR_/4 OslNpt)Kf7O9(HJ:P*!+,} `Ta&Bej0*굗xoznsU0^t)xxQVzsmzH00`T|TFXA48lP Y#Wˌ@3p8JAx`2l:SIȮO3g(y&9Ol(hKBR0IB |B7泊]v|>xs?pIVzNI?Wwڗ Ub@UVD 23Nch,~0#GVC-Q R"@$65kPT(shLP@!L6Orp-oۭ~^ߩƬ 8dx_rF5Be Mz%!!-߷Q|M-_#zi\oLk/:u6 )P$ G1'1[UZ ? |ӑ(0^5#1\c(4ǴY[齨-}(T%<+Qx!3x ]$Gk=Bu 1ʯ6["Zٷ:: Ah﷪dg) ^3Ez,7Š(n%VJj+uN(8+IXp xUQ X`P*_!{I YBD$үTTd[ \@ZPKF=ܚs~?BRd pšی"Q\4!|S}&S%L(3K% qa2kEuX)EQ|]%/ٖL^DǒT fAh"=Fx\xuG_|Y =hV0k~fVsh~aU2X1 Ǻ"hTzbH))ݫqdAfr A祊'`I)AQq1zӾxم$Vԛk->LgD(8P,! HVTm DbtIxg\h"@={96$ x P?vUJ g+7zSH B'Ѹo kT|;֗T*1ts;QQJ}Y񚸣PoU6o@*ஞYX݄ nVD=\Ja>ѧ9 `,i٧xG7Xu{ &􇑅e1yP,!U٩ F*Ѯ*wN)uɐB\UԿPuAitXqzJPyobhjp{_p0 g10 :1|޲R@J8M-`B axBߟm,tخ6+XlW-2 4"y3犹iWYn-`>Ma{['Qvqhl=Z@FIS~^y{7! w+D"#ڞ^JSZAחVpx=sdiVb[ x>s cYC]&f^P,!X@Tکn4B%ѵT.tFUL1o*􀋐]`sPfF7ɮdlǝ,~ &Kƒt=h]'eY$ m{฽OhŶ+gC4&$/ye,ѯP]x#RLHg~Tm07.]z%QXLsFKpZ2KTZ2:ON/8G8lwZRY~'ö{A]aT C[sp89ARn~ii,wPٿd"'7*a $(Jjj\O?n^ %sy@/%Dư+LpP> Zĉ1nk.m VuRS5WXOs-x`|fBLҷ br玸aLi!&FnΛR^Σߌ$~r狯y >׾dTeTUER$00Lfk^%b ѿږz/qWi#l 9L1%w䨆S`jk 2ieMyvU@rhhȱGxWYE ,)R#6W+>79/Xqh):rdFJ;WtopY5!MEt<@P- SBqt( B!AhDk2M-j53O6nWCZ.yү+;Cq ゗ZQ' BK$1x5KJaz2#4/(;%JpB`oB~J=M0=U !#LtXOPl`3b'Jw\D)V;NiqhD>'[ Q2)?xfŸģ:)#l?rZeRɟP2ngу~ȰEs|#vq γw,Z7x1xSa,ނUq]n=a*ghpNze쓔H5ǀP/?! ?QYj,34h8K*JuʖL0\޷e_5WW?#zDh<]P_tB" E|m6ޒ1HRf@s%&yky2*N <b#.eZy/HD' ETp$`(h3NiHx|~Η]s(xߏ_F dnIG[Zdf!oX~va !xV~#ր7z{Y^IVc)gD)A"FOSb2a/qPDtIj}ugLae~pP/!Qg@O܌#HoƸhoU>o>~CFYу)CMD`B2N <`<6VHocx*1ۇS)P. wb} W3gP/!@O).D$puzw3Xzcx??X*\4|؟ JESY%(4WcbMfkwK.rhL`piR7FMiāiUaf3SdEAcX9{l [V&6|e@ XsV[/G cē"GMRnuYS=^)VꮥNz???MG!?it?;˧>! -//JjU87Ui.JwuL7rcpX qHKO٥2 \vP SH8P0_!Nl,G"3 S5ZwPw?_:=^fK:bύҬ6򵈵l1#=_2Ϭ&e"ĎPAᎮb6ebkfkGC:, jw@-@do x-PeBL@71=J`xkZV. (:"Pn%H8? iU8OοlquSkˡᚧʕսI+Bw1iAUrD9Q`3z2rEJO;?g'[[BW]xOt.0gBV+Ld`pP.! MR#HS_3ZpL3^}λ= UevqMkTJ7<(LJ,թ')Dl#GIRrc`DY) sГ>|^Su"a+~WDVSOt}D@ {@ F+辑ַפN1`#IDJޣ{Z{5[fǝwŶ{`tA6;/lpΣL[7';/=~N]۠q.p\Ra,V 4@el7pP,! "`L)E3h븙{?WU-•عfl3~c -3eM^$Bx1"1tqNR[cըF#/۞8IրF\,S?ze_`+ө  kc8Vj:zodͱиoG|랰{??/@p8\i;URK[X U@ǜ߈JF"mTO|2S5ӴhsT9m=CapoF{@`.* P*?! {GT4K4^+Ǚ[vs$j9Y,HF%8rN_p (U 1Đ`4K$2C47+!B8 1^X}/xl8U@<`>0>"9xA.{szPRB%Њ<:B}^Ԟ:[S{'Q|,#q7sfyzY.k.-vFq$lnNT%\@E ?̷z>A@ˀ:y"1xV pP-_!wQlT3ߣ z&K~?O_OO2qE&;FrtJY}MY*N P+VƳdl0}a[ӟanM=:vv{`h6:i 8 !$ uL-@lI\ iˣmpќR=Q5eϬ@N}z I2r~"G0ōMRt"=Be[Rdf*Ʂ|?knt3SkSh$@ ĕBͤ TSG*|cEob ?_Wf𨹤N' a[!3ѱ, 7h 9<̶E8?}>ulOdi` - hXw,?npZPd@Թ7ywh1EnQBkֻ/CR(=0Hc{?$H~# _nCC~/ڥ/it 'l!}~\~1t.&@%nKmn8eB pP/! G~TY*,4ݣM5*8ޫ+]W~'O|ƬfQ# A>k\uwdjͣ\j:m25%tF0r @owDu"34#$*Uá!6guTɾ.EW?ԏS,g'4MDLOuK1b GtKU|҂!DEDueQM \s"Nm^bYbk=4zZhch rӠ8P,!+  TS0US2hnzZIO:xIqϏ^7x6 VsogLmrȚڧiq}M^-'N1=RSpLjpG#߄t#2XZ+G'4h a!MR1vɷ4Os|IMC"=Cx.$ۣya j3S{|*xsMJw#\w뭪tr(>x;a͞Jx+Br4T(soG'.7PD_!L6OQf:UiTf&M>:|zoZ_]K\uJA/)'Ͽ]<㸖8*>nT7Z;:1 3pI@a:޾u8,Ȁp9AT7!=r@A'5VYݨQ y߲ĽV~+6(jQC Ou߽գk{ikET6O R}P+!{  YP&ED:Fo8yf]wO oRJ?:/MUSP+xtj@ '&`AnTa8r&u.#q$BsNvFv[RN:[#%IQ[J!RO]̀Q!"[Z45fc97XY$&>Cm,7jsMgOkJ9(=i 旄 tG5Nجzƛe%@* 's{G}6Rcz[2+&ACPDWu㬫6Qq6f@*ܑF$ep?pxjކ>P+!7VSh- D(ѫ{n.Uɩƫ~ Zf|]Ʃv?M8sfTԡm8|J*Ĥ[_(0aB@5;!̅¾h{DY?áu{9ܯ.~\N u%VB:E:%fN+s=>e>|\W[L3of0ԙZMxOz\'`RHwcuv*)#swH{@V'ވ l @5!'. nƖ15-}~ ?8P-!m5WSDE1hL6z;֮]Jq^ŵP-+7WU~P<AԍKBZ=%8("$DЁ}T~'c5;;Ɩӻ?m@ rAu|R Uz$"tU,"u kFUNQh+t$bЈt"]3SƵVLyGU?ू0 bv&lA1tN9Z +e%蔤17GC-zG|,kxGKRt@HtM\ N&h\yִХ<2Ũc>CP-!W[a*B"ѸTysU&KTZJӫ=PEzEݓt{4Ė1'[i' ŎIxq*YĈO Ol%BG|""WEI$ϻX3k>/}q:<11k:V DICe`*=ztJy& o\HQMh*+wHj OG`?ex YKV|U7'%>RWܚ/͟Y#bpь\Jֳ FG(jfc[Fu d%S)2'Z 3P*!0VS%Fӣjd/r&Z]Mv紾P)oWpG|9oM͵wل:!zXщ *, }~G a( $TiR~ukX1xR& 53>5zr 2b` }Fm_1١ (*šz#Fyֻ^or&gqǴ7ARqxRj3ĤnH\;3Y%#w<8T9\kIK*U8Ol^8Z{]_lO7"8R4 1=2cP/_!Ta!V*SzW<[~yu8_SwFǮ-|qid Fc!2vs)B:G9/ ,W"3jY Y=VjG)mLUPHҽ.~7lCّѿY e?`m}>xB3D`A sg_;Xpt!áU|RoU^]YWᓃ2VL8º#e`\_;T+-P"B%<߾dk7"Q!A.Fsӄ'>8#'egtPoo?d\I9ηJnJDƾmJ̭䎮ixi υBA1wgX=QL2v~uM/' 9|(3u3_ÀP-! c~?T[i0Cϧ=Vï%ղ4uRdΛl[Z`Mq@qt#P5PIZ Pt1:ysr'WЇc;ČȾw 0CI[8nЊC~Ŭ6"1oRLhtC%dl4Bg'VgVGvU( ܁ο RRHٲ"Q%/b!d jQ6X9 %X"i72*٣u#l 6gJ-w넫RUӘ( ']^X5q17J\5@`ɿ%8P1_!5\$DEi=ܒFjֳ/AbEp]垪(yM 'a `RhfڱԸۧxn; .ͰxI?wn _;W+Џސ ]bE7:Mo qG±It,؀'!<`IQlfM,ktt4}T[_r%jAZnIu٠mH26ZYBLb[D%lF 8)UhD {dr+rǫZ `qAZ5\V NDcB 8宕vXmbs|`MrxE CȖ!xpP/!R`d!BAЫ橗ԜNU멯_Ye?Aה{ar Aj2iٌ~L@WZ`̶Ӏ] S<ƂqϧƹhZUIdq[-YUvR mxP,j5dRqC+jOLS z?Y\`8M3O4.6PrKJ"CC B!W\u$tkk4ٟU^ G?S q'OajYA8étu,89\(uc<٥maˋMlE"oJ+8paXS? #+|`ĵǀP0_!/TZ}B%_*WWYuk\C|;UKtGzyp/?@q47C>o!jY'Ь>ie|BƦt.R@,"^g>gxpH\wdnfwԂmHPjXDUR9f_g_l%'9YkL?U8cgzЛt>- 8nWWU*׻QG;w~2{;?WHRzh Jisyqh]Ti%PNcbg.7 *5J֯fpy:{ y=Hrz KLn)8/ @lO s4a[P-?!?T[Xdɯmɿ4$+X84l+C=Ɯ Rw!o0"~@[tTj*brR{#Ϣݭ ;ޗ.6׏{nTddоPkq_0;$<\vSJiN{Pz)P ;G"sX /Qzòv8֠Ek"ל5)7uekN/ 5ҀfOc;(,//rG] IG♤@BdUWBPz*t%"p7ua~o M\7]/{߶ڣYʿ+k^@>t= +EGݶP,!ӻSڡ$ɯ%Y *j_Oך*XT(5I*R!ȵa+>!sgų aLF@Xq81z3Qv 6Y;3qFғۍPZ7)V(:ME, vT܀ $'\#v#f40b[Xn6]o:IJ#%MU VjS"I'ml5ioTFlzX`0c ~:xcpj_q hGA`*$$A*)'J-绎֬Gk"rO"y:WJҁ.jQffP1!'~`R[aJ$!B#ϊuh%5QQyƽ}ܑ<Ӝb).qQmDd/Y:Ye #lkk. R<.FS$QIԙA|JX`x X_맖60Ó^nBN6z1PY9\̅H a G3{>ޣOt[rSe:y!Rah2)DA菎z댋޲Vk *$Uv>vF+@E,(!v: qR$'T2b"k\Ps$O zG{@ A)CI<ҡfQ3\y~>fqN]P-?!&SX7"B/Ј]uUn!t#9j  ynE*`/X󺕴4H?;5hf7^Dg`bNQL3T0]7[;ժWi{K))Ū\TVaoῴ1F[M?0s8|ʾt%Y77W-kbkZ!kڸ4ږ)DVeƹe43/c?~Y]%2,Ϥr4 &J"E)?, cp+E<`VdytaKLj%{VŻtSoE+ Ke$n\BЋt>~o/BUۦkVʿ~(3F?Gigq$HMZeb:X㫌$dF\HWܢs CY dfyFS ]3e= ۜ-٧U ;ndr>WpPC!LoY?-Due͚ii\^|LJ<~ڏ}|pG}XӬ@?bGPϱ3j 3ޛ> cKP0tdzz?<9HZտϨn7X)*1LL$f, \EF;=ޡB7JGKUQT5F0;A5e='~GwYaxP1.С"zy) ziC';WT `0'r'H",\LPY/0YlJ5XuSu@w v'Q9[[s>֝\)oII;7eJ[HlX `_e0bUnY?M[~;=->uh rK\HyCyz("Lj?F: h=G?q^z B2*- U&R/P,!{ \V!H518"]BCmiZ|T۶xw:7xn/U7BĸytRTiKE|,-TⒺRE\GQ^(er;J_ep\@{ԣvm7 zou}/9ZYL` `l G W@CW] B!Ј:!Ext)H-TT엫EK,ESYu܀&њe^HƛtëaKTοp4i,hvD:}flvfh}PWS{'Ą$xP.?!d}U[)H7BhЈt'cx*Us5OwU@5gaoAG}dZK.G$B^Hu`-"qX~= G = /R ʕl),z׈8w/@XCB$NPV⒋Jd)Ј&oʽRRLDx|y_(i2!:vsQPN,gofޭZ&XVj 񖖢gwPÕId(u1ݴZ c67̿'sFRT-D @'@8P,!!R[aNA+B!*cz޳Rb/w;Ƨ,C~ !h@{y{eyr_|Xh+sKڔ8,ic/2%Аv+_qP"d>Dq(E$&3+S|IS(`?n/'}H?r )9P*M"A^.5I%/wogp<ɭ^UKI i$hrtiƀU&#Xw|~r% ~l-N4㹫' s",܌^j(:9f Vv 2/sbV 䓅9+Tl5㒙 F|s0Nu̴I5@J`CSn$ᤒ+.wr B8P1!R\(Q*V˩QyuΕu9߯_?>t Ea<.gg*bzˊ/I0~'"s4gON!R:JQD~b9E>Z ޷}Xhz [.Y`cWPķ@]? PlRYSw{6h +JWhBkmЯԖR ǡDZ3Bˮ*sSY5Φ.*c_s?M+ATԾϰءC734* 91H'8ceC 7=A5TOWp#߃.?ů,_L 2X= Pg58P/?! /Q 1+B%=oo]iޯ.HYU:_U*@y'\SŵrJ9'f@>~7 !Txjcż(GtJ Lw5sҭ&?.RB{W _bI-A@]7_;,*C U((4m@ dLYD8( bшnf2*Tuu>FcjC㠑ʒf-tȭyb:68}Y}» 5upq=S Q٪ 5BЙ;U3ZWɧvݣϽo?bKstzG(Ķ VMnFG Hϙ7ƊLLIcvL/Zvƻi=cR% &{*@F `s&~IQ}3ٓ{r\8gZ>VA rװ4:v=`%>@2d 11,yF^vAɤg[ֲ2x=o?5[Q#KüyH% e}bVYY F 4>Y84n<WM&FSJ}fDs;Rl3} k浛ng 45{-$#^ÀVu̖_V(?S{M,>h׺&P0! /6S]JɣN*u6Rqx9W m瞴IILutMz6 K'?gB, %Oh/:' C" \=h,V?@Ab"bsbr@c &3y3`SW%8n?~?8+JeR\"oUV|&i2ۏoѩf5^0+MռN)ʟC2 @>G }f  M"ټ9,GM:__;2l$Vv@;tHȁ]w 8ˇֻW@8P3!YQݔU B[|k:}:h2ѐ5!懟[[AYOͯ3^LixFrJˌY ukTVHţz˅U X0 h#c6"ϫge6}:. psS1wgKҮ8t nt6^JVXn0pNz0۩ = J2hD>Mo[/F\w&)2].S aiPf@4AJLNmPCrJ^jSނg*!|f$@.NЄlF%o=H6τ5]+v߿M]<ln9ϗY'sw/FЁʶ4W,,hթrMPK}ΚTRǡQ*B"s5YȒoS{\޿I)& pe;;INZ-Jx8F(9R뀍v3_Aͨ_CuLZ,(o`] 3\~C%FB&l0DdQ*{P1! R} UjuΧ5RF,Oߌgǜ3FMh!*0Y|)ҀL╚x'/5ύJ4m!"N7o^/JRۯn&qm,p>[XMlIx2S{ƈ3Y9㛹t`dbAuA?9kiwES!)E ݎ+qOR; LFh6:4u&xA4LSwsKZ7_? Q+$P/!n@O]`JC>I H/ 9IMJ_g_kcoQV"j1ưXbVj+CSmp{Gn[:E0N^q@mtd}T,}}ܜ"yJ`ATyy:Em6@&0HY'1 C,d5D:ԾsDW~o?~k^il3VBAA^\ l.u ׯ cMILaރ a!Or'Y9r=؋ߜŸr+\wEbj_`u^:$muU[gǭ)?2/g7@yvP,!+ {OOUF}Bh{T Zx`"pd0jv !H||f^V@ :{աu ]>Lp2hЉ&-B/׏*HT˖|t>FV@8;WAY{|@857xcRlic n i;2`'xPXaoOwYrCDmא MߍkS-7?ugfICf;FضW:PuQ6h^Thѱ\@ ٷh(k BhD:G2K~}Gy^_5Ƕ?6Wǁ zMGX GXj1ԠBX2n" 8ۥ`؄?w|Hߥ,FyvwTMg-GzLucԘ2|*d0NZQwD^@HeKK\`/i!tb-!ЈtLN7ǏT^N3Ϯ87_@Tzpמpu RCnAGfSt3=+ђne*D!s.(-BFIIT2;<)|Y[.A~  t>\rƞ迄/׻v*ױ0t87P.!>AWR!N&2 ϡ蚕:K]TwuC8R)7p" +Jne^L@?R·oZ5} S#FfB YD@$A"Yƛ{!['A&ަ5/ZF%xR {CFTL- ExDz&yKEqι=L>kǼ.$e`+n#wG[~zmVY] SRR1$TXF(efj,JR寅Vw7apq&9@AVR֤2W](kp4sp$zO\ wy<7=P/! - SfBeЈLBk|Rf_NG-u:: zqh]TyKTˀSJPk`tV+;?*Nm>lyT+# dvLD؛ /+M8nî'͆$r8 H4pDA߀:$ +7#9D:Beoߟ*gsi\fkt{sY;?+fWN#J<滝4Yֿtr+,N[M` ȤJ b=D-tTМ/fRipF5Kw0Z5N%!xĩ;|" BBPRv@GiP.!XT[B!tB/7yx*z?N??Oݍ4)]@AY^KY(yn#KGA"4fid,PB0T6LW{Gn=޾rxĺXe"(U1&!܁Dp ?p=yeIE<dsTAp$;ˡ"jx}WznuZ<6KqxC!&0S jʻ;I^Ŧ;HR{obKFi* ʂhxזoCC|m[wwAl(4jGJ~h bU2}n^[RpP.! R[m ˡZ':ΪeڛUJ{^uԟ6ic=Dh^pij>]`T\)PQZ>ǁKXbhxbÁz+FUݶP +%{d O6j;DŽO <*XR)v*BD:DN޾+/#SrJ=34e.:2b@.F1d tA[ t 璁'4 J{=2㊢__`H5@*?܀ vNe@Pq^pv@r7+1ӛKzpP-?! tRZ]E0z'7\Ϟi%\YK^?gF|}1c̓-(<`;@3)Ѡ5#w(ʕ@`~ y4H'˩c@)E(̮5R 1m7Qf,݁Ⱦe_0~C̀~րZIZ כ֜I[=#Рf}k.<^4A4ShD)GqJKwR(:SOƭV<>lގda8~IZӿ.ɍ6 82.t EEm5|q]߲R M?_?p)/4Ou0"w.g D(Ճuyөi)2]8V|nRKOc Xg:|G՞eV,#N5JŚY%&`+?&uRDפo速ByP0!EߐQR4E3hZ߫o:yd=k?gd2ov*bOH'hʲ<׌rI]8> B#EnycT}t8vf9ʓ GҢ0r[yGY:?!s2;?ovy [CY9q1SƂOvcD2H^}8dLNF? q&o!΂{& ((YZD6#@ܺw}$7 $ pp> *L"qIQ5J"qX։N q= fOY#]P=z LX 'LÀP) B#BAРukkΫ+oYޚyTO[A.sxXre)fgkDk% c\[|%c2ZK,F+Jq6<lZ0=o~phO♾p#ip#C+QBЈ"-D+{+kJF3*kڻ6e,ݺ}rlB!բy@Z%QCN\b@ l@} | -߂ jK{"ֵY?ƀO>_6wP: ԙ1RJ\ɹKJ*_87t(VBJBX8b*0m[rIGAA ĩJ|ȩ,oxlɆ _ (W WZw s |U0NKwRkE T]^9RKyrn ()67R 7r}>W׸M-&9| AD`Cjr1mc,nPe|y\گ,_kq5_Ǘ4 ~?:d1Ǡ1*_ŭ-fq4԰=4ZdDR ,/4xA]d&D<il jPWgIL'G}?ţP+M܏=eVZ_WFl 7^Ak Fҙ3:u{)|ΫhhWz"긡Z:N.|>Tkn1튪@ʡ4P+ 2h2HyrUEMsFDP<;<QV2kϠɒ+$NAIc9,Z&4 <% ν~ug)^Nc*WekfOt}}|:+۔aP_玌^\4 w_)sOGY݃De}8zoA~}9Ss80)R[`Z ,.F{!vVc *ys/O z1\RrPz$B&h~Zʦ&8Wy8wlw`<\B`1D4W  K֍QhBe᮴QF/>L52J>xA)튟1F\m-$ \V3ޢumywhP/?! uWoSgRjYŠ*^\kfӽ-]s qJiRfQ,VDW#Y-U+B TD(4B }}b[ui>>d\ u"1-X̔sFVˁ C"}KOt.hi1$+o|.uZ~9G $z+=UU/N3R(ЀxiSƎd1#k_gؒuإ֎!JNeE`d)gQEJ@%4d ^+5/xMޅ,FMW'DttsF9RU'L`R3eX{cbq.C,pP1! goPR\()Dw|o\ܩ-˺ֵ-HȔƬ!6"U `W j *>#}"9R/ړ+v͈n>r~>۽>ߨE9>Y/UIb3G4S ȉv3 nh8\i-"Bj.uҪuJT|^j}UUs1D|k<'tvyQԹ3DK%H%35j 5­K/MP#E\FUZOѬV\c}*{hq4[i+f'oCt7_@"q \, =vvP+?!TRVG1hD#|ow]J3&*{x_׍u{oX#^L1"LM8sN_Xp'Ϧ^w1'@@$HbdʧX S`hrESa|i@_31|猴386C30*%lGA`D:CQFzԪ2iU;U7kUn #υ>+7qo6K}ݟp*+%~P5J/eyci|sĐT"S}o!nuTIjQcP2!׿:R\n H'wOleV[l]("kBU:bEvd9`SS$?W XS9e+՜,.,t2tYJWʊT`MVBcp/(QE(4Őrx°G OH c1!xwg9 ?/%y&pJIj9VC0dD/Ǐ?8WRe4:}mZs+&erf]wrZj蠁)-I$gIҲS8EYhG3Ve ^.qD׋%qY_c( *#$.d/ִkd@9i^TP2! Q[`#_|E|oj"{oDIཤ6#.ѽ3^Z/j(l$5 >2~y֊#[bMq2wz. 4x\᥉X,b o` `CAol[4=hzlBC%_ N0|ʮ,Te&'>Zb~i]w}!jA*nkkE<7)y$Q҅H1 EEiMCK嚫?n1ſ,24FjyOSuda Nb~0~g̮ߑGDtr&8P1! &S[ಓ#5㦳sY^K2Y|́N`ceb_N (}Lbdrr jN!|oc%A =ZѭPQѐQoz3qrqU:\3#;¢K)z )j kmՃX80>@!xHN :[-$yV̾Mn>;-2)48$ߝ^K2O|{_4}HN/Oo/- ^'G JU `s&:y1NdA8$;kxӛd^:`=V{b f*wzzD I_ ^J7">2QiXIP/!pR6GRhM sƮŧ3W05OO?EJ81[ՁUs9(^|3ȭF0&PlT o%A% jIsMPsK?" F$Qp ݩHHj@Bfszq0 ` w5(J W v;.3Z-Ŏ$d>ėj'=U̩ 3S߽{~4wLR6sTdAB0kP׼@X\g8q=}Gfs( c% "C;3#_8?(P=a'pE/_@zdB}x47Jӊ.P0! Q\iХ_ϲlꙣv:_ׯ HQ5 cj&2ʮd1 Cn sGчLYj_ye5\^Ej/6>qe+* v@Ke@8Cv=@OHQ]Z|{\$8r϶Kp_uh@6S"|$SzS4U:_?7A2VL +Ztd-{vtfbHЧ|hߚ ]\yl Υ V-WWh. sXQ^9  II0@.RIWG ߍH15PP'!$gRTD2hD ϜnJ?>q!JƂKNà)899C" ے#zuYx{[sʮlffi߮^B23:x*i'K硥ȸm(`w=W hhRʍDe>+[܊x㛩k]v89d lCDɛD .\N1_s3Dh%@Oh W xQ_RV8ܴ 6(?<)>l +9$93f13YX+ff\;yd6$TP !5y]|*J/'e(Ԧ{^)†c}EKVPHWMS{*ʝ/G'-4%9ޮ=?}.P1! 5M55I!5*qNfcS_~օ^FttpOv$6%ʇg1'\ɏk4 )Mˆ$F.@xwee{9aY.J-B-~43ԕ@P@o|g_(O_HhOyÚYc ptˋ#@ihyR$$"/gZ3㼉C/g<\@z&QՖUL22^mҐZ )At3ס%^73P"nU8  1y(g _K<P3! N]ұ**/!?Oett쯭yw _{,{kw5[2Y@/)>$Ŵ,BBm6ZGCJp ,A(2HTKfmJ8TF|UwXbKCܿjh*kB$X)ǐ?#)$qM-WRJ"鄠g+C7R-" F$poĝo:\8?SR%`v݋lGW"\"|wըFZg?4Z_e,E.Ӡ++*Da@$/Q! P0! !Mѭ4F S/~&B]:|OLnR[3FE_*$ҚMF,ZAe]TW`v*Sj@D5S':̪*Fmg, e +)vf2S>{0! ,'u@//^³ΪTI"+<&X: Bfx玪*eҦ:J91{b8x@m~"h!8D_W~8yk?N+?kݨp[.92#i,DHp} V-N9ؔMt` R-?ʃ`@-{pP\s@0@3V@!&gOP-!(.O]+ҦYrc.sxkޫv7X^WEN5M ׊f}cP yᇕ 87>1}+=,96l:ꑎ@ F3,Z~>P ޢwG@py(w(iʆL9 Fb{]>١n>4фr;/zJ4o[WV [ .nz:|?86I;b2M1:xl!EhZ8筻2W ǟPQ!Mi\Y@Eyrr6p Gy17$KF?˔eC4m' = r<36m`z )a>Eh"'.|LV͜}?\zavsttB|$(at l:_ TbEp 9]{7/~@s|4|!O-hUw58PI!Ll,`RM̑͘ \xcYz彪ys؝cRϵ]ky׵KcK=k ۆi8,&qNi(qb8G;qPȸ.0dK ]Ԙ29i++.\)O`V(8I?fxG(zYO3%ԭ#Rcpʬ=+B)&Dcn r²7G}ƌ9de| ܶ]oQ#LH8ƷFN6Svnƭ#~~W<_1f8D͘>5\5G̮Gc5-ٰlqɜ#=( 0Gc|"sC\c9j%N;Y-aM g u?-bB>WvqpF^MK j%}WCTr"%G#"ۺ$u!߁m|UؕdϐȞeypRjf  5 RPgb%s9lr(*1UF110 /o>w'܀P.!`UةvS7^I[7*Ŧo\3'5ɠ3b%u+0*(DDv/C/b@ ,H5,*@ D830 l$OAqUDqo(5kmNlk -a(B=!+&^5&jeHK+Owc&Xy"Y֩KLVlb7 4&kqfF.~XG!"PĆ\@sff 䈢t)N'޾#0Y]Zj`8F71\E=!@ ym=P-!|sUZ*TBeЉt"\UɦYWmַwV+j@+B? !#+b-U` .)<;B"iJBy;>cI;3}"Ou`1!9; hmSCxtXM@}h a#i%1M H.[I`>3YG = B"tLVkۛcUUz/]?~@ICq/Fo8!.ĶzϲuCai}5GMHm-&N!*b`1¬9hqǶG#9¯Džbo3$ Jpf\HP1!zSZ2sNIw}jo"K]f*J 6hvs$JHr=4**E%ztgdo$/so4y;; GT8 +-lۥ͜sG_sbWW* gxօpjt6KN%r] =77p FU %20JP#K%0ZEh_wSu'>WYۏe$BDjbMU8 j"@B"FV i5#v.uYT)'DRu' 0) % 4VU@uetVB0SX 2-c+@i1&4 y,G``P3?!WT[h3 Lfј-V7WwjE.rblxn_\q򣘇\LRnw(`{渓b pF?2gpoQ`"A {1!o7!p^1rUCr[8gxIbpUМSо^끸 HZuFۜBZ#Ko|߳UY{3 (BrJ \AQ``r-l3ԧB0g8ecFq]z:s ӭ7wpb3AWz Nb z3 [Iz*)H4@P0!_2SZjm BЈI*w/뉬 yL޿wT'ܽ*rv*t$\Cl6CjĚ! F{@'OI(瑻hi +hO\"G\q30g'E zD6 Aכ6_ `)NɡI*w/[WN9n1ϟOF"\ O>|2 L#1 ac'oQ4ToB3/eNL-C^yGq|^u]] (&^--}M^-mlF8.8R.-}=l>toRy݇.P0! 7PܜDeАt"=לZd˧/ Kod\['lPcVbzbF 9UdEQ Q/,g(v8 +0 ,ҍV-ė/N5X4n5{pyX@' 8,aFn.Eh3+ۜ^.3Ul JKs*`}#27@߉P%{&4-4܀gQҰM"p a_UR[`}á2hD%Ng~gQR/ry_arWLqC9d/Ծ2CsMe]c &})HSkq+9z<˹S%Z؊qIEXLs'J7~uZ 'Zd,e<3@P/?!!?P[h4.ϡܽw+WE\{qA^ W@ 66_R4=4)PիU49 PaAǒ(ձ_y寝Sii7e<ҢuL:/t3 % ' ^x(B[JlƯQ^eZS)ƪ/W7|X0@t@y'h}qhcCP0!?O04DfЙtO]]o޻5$cι__?4w'<@kD2:ҥAY%D#ZR;By OF\CN0R֨@r*=,k] (ɱ>>@afVS29t;A\p0%Q 8z7i 7cNu:'y޻f$'_mnWSe(W7lD;߫|2mb|v n[T勳$"2ݪze*g舐B%f <`R@ 0/1tsa/x%0Qi V#н+( 5R$#QWk?w?֗5=QHSe. @%@#?p=ŭ~P/! iQeBU{Tޑ9W//id@xt cʕI j^P_L ]+YS"1*h|ƪo)Ʃ00^>s dI4_L|D _\2`B+i0fMg/ Phq*K2hH/׭^5|7Nd񭿆T`10f4?t}HZ@&P3Bcj 25K(HX.&5 Gv 㹵:]WU" aW$&>иh'^ P) `3r7t?hB8P-! ?Q\M g Z/*ǿqAtmBz܃ʈʂ^]F3ޜaE"]Z,pL%}_@^av cV껎K8JahB &iF)U.(t'I ۱na(OCG/}scW5m tW))B"|-gE\׿]i?|v[x# N=) "م`ډd(pJ hsƤ9_n/J?S #d?|I( o>HP1?! ^qPO]$'n+Ǟu8ޜ7O_Yu_wZӑ҆ [[7PITG313$Jɽ@&ۅ1C^ 5@UϾm~&|B \,ґ&PчZasaVVxWhB7 S)I5|Z'W3];q((zgr *8%Z@Ǔ-Xm%3X٭ΤЇ-6EՃYzI Qّx&>CNaa0rwZ@"feM6| 'l&:-3x[N-*Y!@wT `7K (nRcfEлs|?NaRN]4s=ރ\_O{uWG*N+΢? =YOJ.pBcNH']-Hrϕ" HO#QI! OL֧֯?wcQ}ׅ(<3D^ bzMmٳbUi<.UxhmF#hY`>3?4,v;B4HKLKhDz VˑU!ۿ]oh}Px 8`¥E4b@D^9 )|&P KDT#֘~;vXW ;25~}opuEPo ,P:!L6@?gwPQN6cvk:iB_;_ϝ݅\U~>Z߈QiCtA[}_Y[" d0I'*=~mB5 JM:dYK3kP^ԓ?ceȶH+./Ĵ5?dͭ:_?2 p 7Rz i>D?yp:%G Dnpw ځ M*=YiS,op^M0D @&MۀP0! VU[(e(Аt*OZqU8eʵk soe(N?-x#S!Q=̹J>l[TYfÉ=OE0+P9oOjKuX B}JBͮr+VdDuv NP g)YK4|/7+RSٞ0e}˩ Uk&7K5&fJᗜt-οb3$N8DӜ8JN6` 9t&; ^\SԐN#݅UXh j>K^9 Y0%XBIb4 k,:y `)Wz P/! S[(g!B'+Zd/_sփL1C_>SwXuۉ 9%_VXpP=\[Tw+%Ǽ:&eI)xJ&!5|ƊPawt!i\NT>Ja5[Ch#~ojHyK v@3XN@tָZD^"˒U̙%kd 4Mj=E#̠!*oC]mS$vŤ{k#`Aһ3BYzobO Wy4`WNbq ~ $W&O*PpP0?!,R)N( BD68'U&)_7(xҥQΣTY F@bY!i #&G6jD[@YM1W78S*L5[.?=u?{Hɀo4,0F@,CHThDcqhLfW^Dyo;Qp_֔OndwNR 2S;ow((0ȻÖeaIȮ"r 85vB._rwшJSt=NˁM }@CCWۥy@P/! x>QXw Ѣ qNuzޤ5KwO:.ڪxp B__**JM\ OjM,H*@uf#I" rwZ#8H83ۍÚ.-ETa)L7Hkz*WU.y?__h\A k I4jTM HbB5 sv!Ȉ:QTJDv獽|z|N(oJ%ld + Y NCcؔnBBPt5ǡ\_ύ鶸r+5Uo)TAI-5@w@ֱ5-WCIݗq?HVBB#Qh~!L5HK)î>85GRzFU"ŚYFq^>Kqց=QȔ3~i/gd>2 kBFR`yN@jA'.sf84pjPTVq?VE;K=8Q2G'u۾6WVUռw[qʿ'UB\,9@2ďۧAϞ6\R9\wU : 8Cڎ-BRt>" [qϚj*O??ݛn0+iE b.sjvi`4nn8h36ǃ8m\Pw8&rfT.W<@"h HBK 8!GP/! oSYaTX"IQ&2%bJUS87=k/;Q2:6p2*_ס8h4_;aiHfaBԼlRi3zzŀ92:$uVA ׺_@-bf}WXgi,=j:KD^ǜJhhj2(i퐣FЈ|*uYtgSU1tjfM?~VgzE|Sзёc}"=F|X3\ܖIHjj*Ƈ<甯 sxtghb֪WLK-OTП$% 3_i~$~1٢ؙ8P.!(R[)N= Bd 7zt*H{WW?i'<-t{L].+x^ UN*c[-*!`vHGͫ!j C.\3&Q5-E+6ň`6د[y3mLs<0F 5`u;Kpώ`$"lI~tC7dhm񣲭BEIᙻg.dAWՈ /9a%[Ǧ<7́GfQe"D#<@ji3ת P1!(RXna614.no[^g՗y~__ AXԫ #zu6cyzO0 C[$ٛm pAB]}{Sɾ$ YW,s]?Q{rUݵ3nSlAȶNmB$@ >_ex\]Ūq2*J0 Kt ͡TF=EЈ\"[]JpN?NO~\ Wnf#b<3yWEl bF߼4pi_~UUoȫ|S`BF3KO4u[8R>-Ғl%ǫS*M^t!.|{q s Z8P/! }-T)N#/5nS8Z5?s>m[=ȽaՅXG6֑nð婴hΛr; U}8h8ar9K<8tys<z3thvS dEqgچ:Hubn[lB|yZp9+eN$ 3e*iFS M T*Y|IZ'N+؈f[;#s8LTd{`5EC)$BׅH!7:s7HVEge7@H 645e#x, p@PD PA|-P/_! Ne{V[)N3NK\qJL7t-? 2aZՔӞLo14vePH| Kp ?Y蔧YNӡowFqߕt[}u?9H?:jثGȌ_e)nR)թc%5yF %P0?! L_(SY*NCB͡3>%گ}ViRLooR圀ʈ۽~U 4uߟ Q/wy_ڼ 4K;l~\t0NG n+ty #l.Ln6ްŤN'/L00]O roTDOP Z׶H˅5rtI^{wKYi̙]+yjgPUn17jO"ld|5+_1> 𣒸0 xK-[XR%]_iz(pLehQ6֬Ik7hb0Of^lQ|"62:Fp Eש ח2v1Z;ZY߷0~Q}X隕T4hM>Fq]]qY{I)Om[g}ųP?!Lq79c,fSf1O /w/>u%k{^w?N0xWMTY4m@/ FH&]E^, C&\>l/蹞9džWWf)+pV(TЧ7P.aka$6dQ3ˁ 覜ds*!%ߟ:ŹɔHPWI!"5)%1qܡpK1C|u󦝸\gߪ>⸨Z\JXw*Z Wk@QJ@G5+?x͏G g=7c(3a Z:(^PUKs#ER%H;(^ " V8SRnƦZ(S\bfq{L񍵜)"FSL6r -uVإDNp P,!{ WD&Cz'1+5*W~/: 낭Nv}{jިzz FtȊS8A{> _߯pƋYY_wƿ#"4ݿJ_aiT&i0VȮ%--TueW?\BЌ&C|Z'|YWǷy]׏=I*p;:x)m}Q'N'MbŎa,x=]Nn(&M4Ԃ͐omP`fc[rqe=lbwl̕]Mzۢ>L0ۄƱD2mP.!)لXa(8 ˡhD:vܼ˫8kd߱~?:tS [>1Hȁ6r\*TQiPqTqfd,R[-(Y}'c]6UyiQ i`}\3qP9SҋJKZxD\;mvhώ ^ ZDZxUy&qJ= 'rv\]p<n@ B*|Y$JR㘪E%m ݦ榘 B ̤4 Ac `ZL]lO\V'17 ^ IkȜfۋq ѫGP-!vЀVR0IDc( VBݿLݴ?[T هG/J罊ق:s $6q\|b `sl nr1LcYqe1d[SL`d?@t%Vׄ)ihP'u(/hkP4c WhzB۾K7xO)į%ʄ-.]/vzbi@B\at@LRgZ4X'3ʗ!LWP[}jxp38ö61L3tPYJ Xw;8P.!kڔTjMB3:!ιd}Woj8ހE 7:~*Xֲ/n(KxBPyPp NYSfZ p(5>*0 ,;UG,t,~PRDh*iP+p&] !ЎonYZYk%>g{_$ [ĊQd7"r@:{iQ /; 9vXZk5 Y^w\#+a[&|# PZcFa[0n'Bk00#R M:ڐ8楠+5 Tטki|l[.+eٜYy<{)XAp ~ys<}(8P/_! yS!#9B!ЙtILޮ]^ki{;/PIҞ=ƯۘĊՉWYHblm8HYoh (rEj#&Le@H+TŸ_* (7LF[RWUϡC/3G2^_{yzK$**Kb`v 1UZCtIWP.i~?ϻ~_0N 7(mL'B   ϋy-EXh,2p`̮Oo(]qΟjPp;ewasՅb#fv`PEHfIwq 3r ij0P0! YZU[aF] š1hL"]oojwXxjۏփ-n~I.!#x8Ȟ\PbH}W<^IpaH\;>8H@.x(.2չb5]jnk`.<6XƾԀFuҦ\p_J2s"\)e q=D>P/! nTۡ.3VK]{vdBe ?fc#\%9 w :~%U2^֔;=x}~ȥX`h>E. N*N;Q0rD{!(8:ԹdE[ ^q>zZ0f q`KLfѥi͛;Rh.$@c'Si1C1hD!s~yLf r>,lrU_o"ms6ri󣙴17ɽ}2CwM\m=@":k׀?u8K,xo _ ,R:55= À8P1?!V2QjϢfq}Fq.2M_)/Kyg,;g#mOLpB@]FQBih(mt6qӅ_ZT gfj0B$"Dh"Z%xxN{sRdOtk^Atjn ) mh ADGȃiP8U꭮ wΠrX`CWa+Y& Șv^UU$2c.0' c:ګA7x τZe:Dhj?/tmvd 1X8P/_!t>0RZl&ϡhTs咺R_?yIڀA2[)rD4UVE {y=($TXFĎn&r  7C>r?S?SY+ۍedK1@*ga dyrR[!H]ˡxD^ ۟;7Qǭwǰrx-p_Y4rE0j7F]ޣb\Il&!"yˌ.'"SH-T.EY.64l<,- @ @>س~Q͐yy m(%@ľP'!+?xX TЙf D:C nsyOxsRu|DOFuw(ZSԿ_pjIe"7gJ`#jq\t)ωR::p o ${7K*MЛ"G5s}w<Ԍ<k2}j+By_ ! b`B P!"y| t@Iv O៧oO>)t LO4PF!LlDNYKMmU VoߚK~z.;~m:HC|jfG%=)Í&'WViOT"H55zM:+$^G_a炯s0zSˮK3 FEP,!{C`XXFZǡi\UNx{fVjQٟm|MTarݱ8r>l~7Nk 51>ba6Uaqęp|# Ee(!5#H(}, &q M1b [:a[[< !H6 D%шW}xƲ=U{ssl:_AR%RHX\d3Jj$4cRS!i{j",#p}C5).fo (j"&O_8MR 㫫N>;>#Mf;^Qfs~*ALZ_P+! w㬀VRjJHTEj(oNsimiaW_ò#KČЉ^:Pw©Y̳`LlX\j#,+e@TO\LI 36AP7GI\}WQΪ_/}aw'SsMte2VS)aĔ >2g pa:uOC D=UuCeo4 ЕAAJ3-U((+7Nqvi$tVBT6dm f+yA?p8P*!URpW* BcЙ* D?V][Vr쓃W/`G'^ |ЗsyU e4_nŽyEq撨ua!` (!'F bWU߈Q{AKZ;@%ڨ_EuZCeb UЛ4>Dȭ8eڵkwL: dt$#[(Jf[g-k B/j@0C:bwcܾ-@G 3zSGV[;Qfjjq߲I铀KPdT9PSP/_!kSYnvBdw%5uަR.뮞ɯrh+e@ )Gn dw2{.<$dKXau&0 Ng-zxKb.;M`J%Plq˕\Kݣ.=&&-sFrJgEBc<oZ;z pCJڶA4>k{k"wWSryOЈ(HȚ7H~NNxB<5d67ܺd߼_'bM~r0 ƍ1| o&U[7+/eA&(< @)2FL*{)-pP.! ߬Ta*CPB\|IFĔ^}ϯ n;=ORNX@RqDwx9q@ڡf.+B4e#mVhxn.CB+T}uFfQĄ"d-孧`*}{_]*Y1nG0VT1j|B+U.J5+z$\\g$.-:_uۂ[,cd~P\]bn$u65ajgzsPn8Pڮ2S5єK?8۵O[mM)EL27. qҕvb~ފnc>HyHP(!kvURXBЉ4Jnw猊&ZJ_ZyŲ̫3t~seD mjjo@(HJY,Ѹ?Tx&x=ЦDbbugy}`>yi- D^C [Ke`t" BdЈt&-DY.pidP X Jxm/ƽx1Dyc"u\ \(r!8,g ̀=.%k(dbIbȄv"H8]dT۳zo`/5D>JS9h&ddDJ CEJG虂R6ef[i~;Ye+uey_j<0ɏ-+%_Xx LQE=וX'!A@7ޖ@>K<@P4!}IRZi!h!2}=VJ1?j 9J%kΧQq61l!/Sߓ0TN# ֈ2< -="(SPI$9JS(J~ d(,a%b OgJ݀軨˺ 7vD };S A>f>JrZ]U%'1O/7z{˥jJ2?Ƿ4Dgռ 秭]/*Vj9hY@0T(x ! Sxδbma$/6JԖPZ;l/ ׌UGR2g 4?Xy6 Gu{@`jh3E*BB P/!SY)i!iЮ;U]w7rTf?g㕘YG*~N"8/ UGᲒd-%AjO!])A2czN?4)EcWRV93 R?(L2Vz =q\PueAȼ,/xA;uVIʔZcN#ШD-"Ƶ.$*٪6yzA{ 2' s>P/áfCHln#sorN?P1$eLc=Z+vLou'FW /KW8hg'~!0* fJ /TP2! `QڨH* F$ Wz/-y5޿hZ*y#8Z-c󔁙yBlUMk>֍*"Yn )9rU5$% %6l>l`*@o y0Х,V ` Z "!L vRRדvu s"EB#/fך/'j(!hp&wE0il|^Dr{ ZtVCgUu3N>HƄJz50aJ0aWjcJ:r,_( |hhTcK@ /_XZa^P2?! OO`L4BdpNgW[M\S5ǿ?;oeBWQ Qd@Ԏl#Z"z&IXJʥ4̓j1^&تv?s/ zJ͓eLVf*~귺sBC +@a0/a.%Nڠ%zʀ\93um.~ r&G B#\F}Ik.2x?^~@)9BBEV( ٚgq1~k^[/Cju@-at%x$*[!(`0jX|TQ>Mk= := .ڒ&wtA0ϑln7z4WP0!=@P9dP]w}Z*V?y G^*ZvT*pr@wupV9V/+}%1Ō0| SdPbjd'fg@P-_!u?k@O2 Gh[^G#|Vx@t*,+ ̤n0}}L,؆ 0ylP jK0N c@!`+RcQ>"_U^M_?]~TSGujW8 w"g0ȈskYOV׽& F1 AWZzmeMNVS`mN b󔂣S@x@+. GP/_! PPI$pW\nW}*IR/ϯo__{`8jEuLU;%e1Suc)@ysu׮%= m-t8a0F(YwU"n!*]r=Ԏ0@*4|O[H+ !` d܁9pIO ` ú/~ 07`[r:U8&]8.:ܩ'=eү=O=jetm#c7rX {XQI lCKPp 4θ)0#]pXBI 27VeI]=,BMN-B}Hsl"cmMeb 0?]j?JhCEvqķe4dD4p]~WK.%K\P-!=S[SX\sgnιy -ƷW+<ğRdӬ\ӖXC+qp( [@tYs{k:Sظ_cn{ze0O3.y .o*}ac<>2B`-ͯ:d{vJw<ٔI塳D>-ңT*ZޫO~_o^74 $Dˑ:IDZC7hGa"O0rl)IzAC F;-$8PJ]I.1^GnX: `QD3DP+P-_!{P[)N#^T/q3F˖mv@mBT \Wzd[+HgvNF<A ;Y)T h#m~2\ܽN1ͪxI-X%̊p1pcZzu5:m;Ԍ펠8^1Rf3_jN7G*JI-7ǜa|w('X'$!3"0 HήAZ@]dy q/D TOZ< P,!+ FP(HBkxz޹wzˮ7^'O֠;q?gOҮ.,Y/Ӭ Wxm78{1ʦ)Zg:[CTO,diQs `RfKٛRœ@Ř=Px] B ``!0 iš N|߰R;P CNxRPW+}x}ش nW>?N+ss><g.Bs~<ʙ(u;f.[rյ_1y|HePW $ "蒟Co\Uj3S4妿`(} qk/@o'O$[1"Iƚ2} IU.j4P3.eh``d~R9U!jy8$BTVdc9EK? P,! `T۠eFǡ螽w{ԊWWnKz[_7c*$qvEAXì%aW,iB3SA\ O6ʈlw V+ޓ{s3wޱ5)NSV73lz}ȹJy@7 WQlCU"'G|B̽]T3Nfexֿ!U'5>H\%['AdBeYsHk(@DVLEvN1龜kyDW q13©ZGOAs[>ޖ;߹X22H 1DP/?! 8U #XӡHM Bc"dLs[vu|GlU@7Ư ڏIX[ 7cVz2Fi[ڄfVTq2O=@CJͰ^R}hR߃S'8 Ņs΀KSH[ vhjPLG{nWS:@x ݷ!c ]<@~0-&tJB#;<^.E8wwR=~mB3zNBX-ܐk:'l`UShUK>)=Rb|&h&;a(#H-/@֎*k'}|\ ݌cK6Yá=Į](-.!0%o}gڣ "P/!yWT*- Bg 4N}Nj#"_<;}naFۋ81,iNF-?2Fe$s8N'v(a=r%>'K#)8 P[xΔ%SrCQGPD((00Gu8wjEN/3sifrє@(k@' h x L1K TF=B%:8R~}.##*qO+__lր ^P2diѿZ%z:x!,F8 hp8x.OyjNv9fyXp0?]@|ߑvu@]!PѮ? ȴq<ˠ0P0!U[%HB!Љ]/>n\eI~? ?_]c^~rsAC Fѥcm,uj< dų8Ҍ%هqY0*rJ_8ᾦ8 rl,)q+˒  RHvͿ1J`K %ŎD@aΧ(*L%c@&D39K猺w_Ǯ #hq~g&)MفfVNкԛ̏eWnu$|vT'd#_ ɀVd C?6n^pmB{<៶ B>  {$A{8P-?!T[ઍ B&Иtk|51s5j2;\zc P,6BP#؏={̙.@Zs6yjOyrj܏O߳ﳱ3n7c;Vp5*3L 5j2 Āb |_6qÑ*$/_Qj*&M#/۳R]Zwǟg? ZO@GĠ=ɋ\sc $\hJ[cW*B<-p)63į~z;w>w=LC|dX|25 )B\?"O LP.! @SZ } BiИ"?z}8+EwΝԽko`8ZJ݄!x۱#,J' e!2˾|#U@%RgK.v颢tH=Z uMLſGXis#!M¦taRAC eq2qx1E] 5&ER&s[.OH%Q|P0?!^¿USl0&ӡhLZ&s8*+3Y25tu4BG* k !AM0ɲ@2Ј-%Z!LP/_!N TۜW9TԬܿ>~WU#u{?NJOxa2ؗ)>F;ȿ(v18s~<&>g$ʚsPuSEbEE&7cn7RwZ||2 N8Z@B`F`W -xJ(bTbT mU~:tJlCq"&Y$qǟqTz:_jܳ5ʪPi,"<A^ū$Q 5'pVנ A5^] bFzpR5!Fƻ-] ]hN};f0x p#O@P._!Y6TڨgP2nk%W}kUEq7|S*k 3B w*pı@P k)=XCG[``}ۈGgMmr-Ȓ6sT$aR{mP!Eи_}b[r׏ڟ auxߜC%Wq-cPn}kԇ}NA0r9FE8j}ܘNڹ=~Yzu]hE{K3Ɔ猔 H?{u"@4{'JSa}P.! 6{#SکNCw~{ɭTާ~?g7ha 4'EЕ\!W:\?Uu_&rrjA:=߉c9$0fQxw˾\ eSI w<7Ukڀ{QG'k~C.O;+&  05]lCkƞ64I|Ze/*ϰ‚JvPbKH+YYf0zB78Šqj8fG6VR/ \7 73B/ Xԓy[gj&Xai4\ 㘹*= MhZXdP/! ׼Q[CW3潽yߚO;|_[랃{4$$q~a=ggVWF^p3Ot][a,=#JqC`1n0Ynslڤ 0CzSK7P< 0.xMj0Kpur'Y{:+߿~ &Qw!{V{.{2-?' >C|u4SJ&GCҡ @=h )[bP/ aBH:)R핿9j}w~w]MM(\-0ƶ2^=h=X\jO C~v&e\ _n'n˄Ԙ3π0t9( x'A$i '}ӯ@>;siujix47t`!J{zm FV-TW+ AКľV{W\ó/`>G E8'Wy%:7 I箨G$!kO-(@6:zIX4ޝ8Ք za=+Qm0vjwLn]U{X8!S/1]8NTbv{pˀPB?Lavc57.107.100A`6,T<L"(Ȉ!#uR]L^[^'_Ƙd0ǞIvY$%i”bw)Ho \J3}k3f ]Wk9:XIZ}yB'q Oxr*{T3%ɩ3;qr,ȲMLt l.ǺH |ww~Xw-fZ78R9c V&6dShM'YnY$w}_]xW{o5TFvmLк?7h[l> 7/r 9gcj7J5<;y0\eDkTjR1SJu3q@qA` q|6?q i?@7,駝;$4r-=8sE xQp12Y{6/es'RE{ },:@pRs[ $t.'@BהB(v_P' -U8=NdUN Ӷ6ܺW/;D<%fM1P̕~ H7SdOdKA-1 ^>k_s|r]-t&1P;QTLT ^ bq=N7Eɪk\2蹺Suoʸ{:ã18t B{*긙UqRU?B+omY$u09_4evp4n(̨Pq_k(4/"Q.& ^ U0@Z\o8Q(0^}?nP*_!.W[) GELZi/2f]ukX^yWR;jo /F ۹!:;(bLjq1|`QIr|#4=ߗ+^&Dy(I)xP /t0ȝz7Sum28t&IAѸ&sIy U']5FX_죘c l]鯭n.$mL 1m}JO4WTGGMSq>;HM*ŠT@E۬m0zP+!.dSتL5& Nu/|]+YyY翿u?l=]#7M8텊;֨Rl2"U@BnfT\rKk /E͸aojW‹T.S"达b@i`)}@27L&6)~@)J{lcиt&- B"tns4s5ocu~׷rLucg E%n(%jy"ҍ)m*5男ZʛSp ^E (-T @?L o5 ?ڰd'^yP.!GsPjM jп=RJ M|׍=~?fI Ȉ+LNzT|⃯M\1C lYYm<%1$Ec[T[M3SZ6srvݍ҅/uBK o?Ru2U3 myYa.v (`P4ӅtImH*I!xo=lMT7+N{?PCG `Zgۋf #-ԴJA[ut rmA,e]4gn'"f7@ Hs8X r*~$$R@8P1! ~S[S+OH/_Y&iR '??߇y,F9v$ͥp'!U4CHjm6P*Qf|qq g<ܢ^ma 3S 4zgD*L?=ňc^ׄvHHӿ]ГNk4.)A*(-"K+jFRp55A9t"EAѳ"&ݓOkc{qLKn j 7vέ@o\C2_ÖPqAFJNiT֖!x.Vˬo2XMeޮYUY@ JdoHWP.! m R%)B3әN9ֻҤ.5}2=(w;$̩{EIJǧֲƨs:3wdN&ɓ/`%b,jxUGPX^ syUo8P " TΞ_ހ&;^ ׌@/ 5:}hJ]_" 4 [dDW6]ꡭn2uu7%8^K"׎ th]V`{yiB~eSa +*$ 'p8ֺٰPA@yh}yqs!ze40R ,1-/H >)pP3!N SL5g!hD'ow\ȵq*NtoǭnFn6uF,<_Uj1}!83y\  yM'R[/chl`p Uqzz=j kG no̽ P>1pD թ( NOu?6e`cV,0c[QT@WCuPk*d ըギu&txXXgq^7 49=ۉ> #h`eu8/[Di~pi OS[G{` 'KKKFHO>D&ˋkMH·oTWxtknk)+H:>?77DFt 8?T_=Gy6l H$UےܨZ:CPRQBU(DC\xvzz>}C׋nsqC@ \(@33悴ˀ8P-_! 6?Rm D"W.V^JeN=>_Y˲!{CX^AP5F(Q!lYiG=156QG.v܁9\PG^MT?F_ {3:43 @FtD@:k:F9Wr [lNcШ!jms%˧]ۃˀ 'k)ѯjzm~>5N=j,'jX1$^Cfb!ۦ _-}~׆rkwz𸑁R~2~8*fNZ]R;;4pP-_! .S,'D:%yݬW5s_W79ݭVSNJ?7i0PG> r$Qţ54Dډ!4. QUիOޯkIr>du,DNcbe@[;X6ONL7RKʞUL-J7ubDMefW~|Lq[@8[LsEXPdzFM@r/( )k$$lqI8L70 \@ ՐIx`8,#P/! 9TZ,'!Bhoo8fZZfud("+wKy)H;RҴ!LMG.\qz"J!xBԛ6S )vޯe%xsQ04N+iU ZF︞}3guh u.֌ȅ] X+{*hQԦH{jUD~uf FYt 7jF*sNHٲ!Aw99e(eNgאjHTKz$N=>sk_J?:6%_h$J j=Fgh,@(讞P.?! ~S c\|]\κQ8Tt7y v^G5L/zhja %U7Rod,p>A1L!O0IrΘR|263k2:1ܤΕkLeghK__Ġ^[1sOۉ~iY az僟`7AUl>-5rH)8ϿiLw=ݫo/(9^ `RуVIpzq.ŕ]ȴ Tlݞ*?7k6q/\eН D(RxP@?!L̷rPF|m՘hjAUf.y?`}e<:咦eqٍU;^.4KQ i||@X@ >K:z1Ty0_ A`y#S~/2Φtxm#4,QN*0S)ŽGe)2T~VT HQI^Bd38c#pzλEVe")-n@8fx"i@/_}\ bCZC ׁDQ>gM/6bSEp;GJ/ǼqΜuP<ާS>>v*RpB I'@,W>cӀh%9!Jk-f7Ômc]@|77'b#U0'綼Ii-A"[Xpfk - J J­/Բ] `r%2 ;Xyji G$ jv!oP+?!{*rZB(V ši:&8TnUQa#])w ;V1TkAgGv.TuYl$AR%O(oW{,ըU= C/V09apj+Ĺ\4/Oez:O$; tBDmPqWuP8t 30T S˫tuazUmvS^ hhWj,BʐYԑl{1YY+. 8K˶7d~U vɎC-P0_! V[ ] BbЉt"g\ydS_o?|#&DàmnkPfdŵ* )nӬZEK&qJ&3 OȎW>(DWWN?6gS8̃a ^?Vysl Ƹa,s~E$,PԀ.2E )0,i> ¶ b9tfEsnS+8o[}Nu29f%仵Xp"6qeurj̙ы$@44jhT yXpqv/FsCX_cO%@s>Ug u^Pf*oS/P 3=$P/! "T5ADa4LΫ3u̵/:W8잿PkōD4ZލSXcB7q#YFX@I$ǻ섥51/ϫpC\1rvO .x2ɕĨu*F<!g.]xQ󊀩BcǢhF&lu]̀ϓ y٩T :+|ŎFg).@y;Q8!?r c7M@^)-U+FVMf}̀ J霍C@ ͠P1!ڨ StVC3}хygr\N%=s+5<cY:GQ7jeJn1U.ㄧBm*_p8VkM3FjYx[uru6-(Pdʅ ,:~T[ʧrR!#BhTzCfq䗝wst3ǻ__|_WA-ǖz}s}T*V盓BQ&*LO[͟NJ;80Ն5jP 5GS0I,y.pz V-v1,ޯ 4k\)f$@U\E ++P-!S[) F!ЈtB= ywgXTȑSo۩=?>{&loG0o8˥8Ex)$K: ,e'V ;) AsZ:q^T/QzF;yD֔'ZPJJH1r, ԽSl8:E)α|d\L9ELv_ߏNȃәYyUj<\ cAO\, -/5aRqI$?E`_>ċzxr('WvASو@ dZޟ`"3H6\_Pfe*\P0!ؿÀRD"9Ξu&Thy,%|LG|"=Lla4zK5W6N00&3V1QJ2>1I5[ Ϗ@6D d2CwIelN*e'b<:$rqKqD~٢Xdxx af?t..IuI&QoO-kk٫Һڔ9ЩS#f9XrLC|Pw8*ì2E)=sgU9RYO-kңRo{htun^JЫ3!^ D:JKx@a-$Z  hoP0! @RZ"M]eVF"Gzq?*E9TD?gLjar41OV@kwtdLcî\{Lwd[T@;aPkp1PqӘҥgmRAImLzB"hH/S랦nuw_o)`yzVWvQ::Z3pְ Yl)46OM{E\H+,5;Xϧrt+VѢ8cTL@ ]@xQ"(ʉj2<<虜P.?!+ (WR[(CVEDz c۝SYR"Vھ~Iig#-0ǧ3 MH&_`%_A}r͔F9|ʮߗS9Ӧai"!dڦhi,_e8˴bEy@|G5 zHM.Adi!B3>q[eH?ҿSbOR#6 J7#ѩԛl<վ+c&ah0:mm07Q΢n_g,kvUƣm.EGiE/;0'@9{p҈0:@9W>P>!LؿB QZD<٪NW_}ëÛoSWU]ctO*; o? Vʗ‰3V(9WNCCiԌO?-`pkAˉ{?ɜ40@"Y ,QbnyU:s<u7"#WRpu2W<U ӣGc'XYtbmR!3Pl!2B!$j+Y+E.^/=m`~|a\ YU~4rLV}Ҟ{%=H ^?! uh˞%ƌv+|Ҭ b3(vtCi‚FR&$ hHoyqӂP ~'U{&%;P0! {T) >͡d}oL"TeŦ[Lw{=ˏ6@j.z\;D; j5 'PEtVEx^;Or%=쑽ϻq۾& KY]!E|=4 nW gg[ߋW6KL)m 9.Th,t!B"Nue,uypw4Hg;c)?zB̎`,֪\Bt{0!Fp}@Bc֌TGx1};x7e hKZ3w;âmTK\X@}%P5 C (Љt$]nuS}d:Z;_\ղ+E/BėKf7&2L"Z* ,G;@)n%=P.? =͡d&= B"Иs:‹c\_7},%^-w6b 95QtuOybGfJHR}jS; u/ Ƶs7SȠ1,K )12%;%hR`Ρǡp:rY-|\k}>ҪCIZ4bnz`m52U; ,&]6V4/ @2` >&(6\ <)'(L-5_wP0!S萑Ddpt-+ZPh\jEՑy,r7ԠQ& "424D$xk 3R#Z`'9c^P)-a 'qzt- ~W~M K75a_D }Ϟ`~|eco5zڠYIB$t(Y#5qZ*wtJkz6]/Mm/ǟ/5+Itn9`e&c@5!ZrЬ`,kurH 3 2B\CA /K{2q-ntzP/! {|+@U[dPs4"Ј"M <|f]dn[IreTZPzh@zzjLxŵUL# -viuu- ;W,PŠf;p[TDf ۣutSɏ@40Ia v8U6CBb"OHkzFG\_^|P~b*`´?{X]>Sr+u2f:uRoxRp0,!fN{K^Y^;:2np@կp'e:~0* m(@@P+! /TiAš2inNu#w"d+v7ts;@G X!^iT~-E@H 8Ju++c7S3FU1wQX_?5WY/B;yxa g`\O]g nnI@_wP6eሙyD 4aa(D~=Bu'nLW\MMqL()SiBEeY0:.R6N=wT28ǻ>8n3VUY5YR"?wl;|Z T,CJj0A`d( 4>P*!XQZ,} H4h.nr𒥽wZ]__zǽT gU 1vW%G)5Kpl2q^ǀ D,0#DE2 *# N3l g/P<:~ZHS>[MxuLQ)^Uc4>M6ʹxIO]mZҿ_/~aMn:M98:۳yX rIҀD"dh@_*Q`P-! 4OjkfшQ3|ozrb e8aoNP^?: jw&|GD~r'Zd#!Oq:}H>[ DL  lu㣺5਩vo@cbC.K 4þ)u KVMx6)?mr$I š|(JMWt|nL?O56 Ӥ!Mq̓U"X4]++Mk€yM3G">:MIza;1Yq_t`/*`q%/y%ϢF \\5vP.!~M4BdDZsuqu#5U)_~uٵ=SSAbNq"/Gw iׯޛf0ܕ(ZRH9" ŐY\wZ8zEi7c`8}R*@  _)aQZ5xD 1T#V\|iNvh1`jdtJwUuu#5U)_SH K >^i*NX(Nmp+JkP0C%C@Ls! +ȸTjf+} << Zr @=(g(8P0!?N[貓$BBзTr&_l!݃L*{$ݛȖQL8vCDY*DԪ+b57L4rDegRYZ:P*.@>0 y-iGh`S*`@Vt]Щ Y޻9o:l. -_ηWr5sӯ6Rhœ2 (wH!eoWDB=uNz$!-wQ?&-TLYED:zso4"{ a45GaP,! =N[)] F3DMe޼s~wUp=_jJbWZrh"8 @gIB,,uH!^;ӒsQO'l'%(iD0`Z=# /`^t9Hkސ *w(g٦gq@ 8~=zӕuX/9l1z)d+^Ϊ{8!c)}Xx6e#}dYmF=@uϸA5$(/DU%3cZ¶fhKWYX ,NPP1?!zvS]b HDZzd3WWKυo_?T]nBh#t62G$Mf#t8zQ:ϱ{`.eA?LB0V 6tr TUyƫW$ޅdL} "䩀"-Ҋϯ@/GT"B^*eէyoӏ{xuu`AEqTy数HKwd$HVs,@Ne1`ĶA?z>#b79p WĀ\?TNC{r59th+`W #K+yP,!+LRZL3RM!7E)gS_~Os8BnfMs79\a-OZ[_pr p/b Ǣq '#[@ah+{Pb44%"ŭU@յ"x ?sG ǵ]f_*x=jS%7hL Cnz.)ZU|sOoq2%`*pI0뤢Phv2#B Lq!QGZg`i1{jVt l&t )#(AŢ8PD!L!P `OYN_iU?y>i?vw  4" RDhsK씌]E&rFI!i02IaOeh o.Sg=dl*K-U&$kUo?9 >߳l0<.gS H0~z>};wM9zPu &HxP6 {dB%/V5Ke&wx*y8p]t^8-&L{9ƭTg+Ц8c'N^ )VwZ%#})1 0ic8iٗ4M:`+?3\Р518-E-UMc;=K`Ox'O^824BФj Q&Wh5) [F_5|[닿|oZk= bx VͶfkЗ @D u}fH5 iTvd8)+ufo\|i羈i-(f+ 2 0;V(ka IFOo@X-P:NxtļU {K{߽{{P}rِ>RE6%f)6o5o >F]Qx t\?(>زIkUƟa&{kk-}Wn i\z $L0^\月F xbB#"A>rmg O}%p\Z+-pU[;΀NgѴ / -YUNZb @4 @!Qh:C艛Vgy;Ԓ*G9!" NF,᜻Z{C<@)R6 jAth3h?q} _L@8S&AB[83#0]o.nCA\zC_@/k~$ <{33 pP,! 7VYT%IB%.MDT_9WC~?|^ymP)N:)M~iN4VE )"le<| \̀t JLRP0! UfSj.ˢoosJڳRb?ћ2P7:[9QMl=N/RrJZ_Õ ET%hVf|ܶ349[QBȣ7L?g!/$לV.g,@YW0. G{KΥ@в |@S!?E {wue9yOozW}} V4oExFg@:E_>hr?x@ X)^}WN]g[]  aq tC g"Aw_H%H 5`1oiP.!#uS]%nz%IsE]e/_wugDI4;Qr'uJ0n4c,TSdh 5V^8$OkӎDFflz^9w&/v@4yU*:+@, bpmc\bR&5\:!BaEnqS8̗|˾xW7z߾,K2R4jU2#9Tv}B)_ۭrC$?d`{%kH80X4|I*c[  mG :ؗ%z#yIoP/_! b٢Q:>͡w<﹬&*U͵_K?k[;Ubu&泎d 'Nq\9.Q!ͷI'JLy=bI ɹƂ^o+ڬ\^=l饫WZk\s@ٗD@n9Phs"،H%]!^^ɛUrTCM_-\xA c-L:QURڝl7gN9a̦PyBN"t M7_x,Kȷyl1Z iV tҽs0J &&1 PuϧCoXP9[FP/!+-S]BA8egz׎"򴪲3gYܣp++]OѪofZ~ŵtՖeYpDb9·g9K<˜]%abP Wy=p&W?3~ݩa@Lה @YgaB!h1O=$EiI>&A!/]$T ^] )M1:5 tERfFtW?j$y$"HQ^7ehi,;6|Ga}@{|P/?!PNFϡhD/Ss۟/WH'EL^V8 /Jk /sZ &-/ϰP.!Lv~Q[$9ӡ2H/]eW3:7kx]M,kրuO 3ö55iBU+,k#2SdIxs >ϒ@;]λN}8Ԇ4Y?MP3VQ\5pC͌%QZZr1.L E.ZgЙB-8VɜIi_?=:Fǟ~~ac;=ݖWq>^8}F`˝,NqzlLAߨ:TIIatxDd Zw%N $Υ6!H8P-! 5w@Rܥ'8%kwHeO7_ϲg8qiKܞ# ĊjM|ȡm⳯1Jnw7UGM/hH!}@}vtz9x=~, aיD43x eY84}nҭH qZ)զJM!m*4?##Dy|fЯq8癀?]:P˄q=/R1=OHky^{s dw+ϧ8dg㎁eozQU٠7L20- @P0_!24@P&+m}3˫o=y\4%K!a{H챎 P6%t#/9HR)AK)k 6F2Y`\˺{s_Uٷn|NLԐ_'JEJ0BZkDjT: @1O f4\Q-f,hM |`܉ΜCtr|b|oϞzﭵuuW?x@\p!wty Sb tݾ^>Z`S,{L $MNR; E ,nF,} x|yI:;XՑ]T,|zsUB`Ү~*|pP1?!@Q]0%1Ϋ)iB~3~2tUwD"mV`\ \a O@gtiupt@o|sNo>><@7hDzU2+xǛ˭x^]~kЀA A<6$<$TK|(} Nw NLN Gu\^%d6h@wi@h,GAܹW{40|NUzJyz)ӄp>7e"DcxtQPDg2m^M7XϺi+[}͖qѯ6b.o_FW:oS"}?I(6RCB/_kVyv=%wsN|l)Y{T OƮΛJO8@԰s:,j*TL4=ńgĈ_# ?4hn3:B7Q +P)!{s|WR0uPgЈt&UoS\ޥUߟuN?xPNŨZvi;.QM4T nCs{cF40Q%(cU^zS( @Cs6{qIy$ GL&%Lӌ5<y 12cܦ@"Ȩ2P+! |zHVA9HєX y( @L@Ց%40tQז+Qд';* #8P@Ù8ҁnwu@@ig fJ2Z ?InVUdиtB9CTM8ɭOGO}F@DOܶPSOj[^+f&l(H)r&8]lȪ](tE+I|ltG WߦIX.으^JaѣP*_!~U m $ЈwepUIy*%O9wo?(K@ͧl'L;3aSg?A30G\${ngl=[]62ƄQvQ"P{Gks v򋠹#pGe֜P5FL8ǻA\q UshL-'F!k87w3JIy*%O9i_d"$E+M;n~d!{‡cAj)|@JNS?<:i>@\yY 1өgcy 7vv rsP0! 0V\(c+ܞg{;R??S€H۳:> +$ğQAc}AǴ4住裢qn˸չ#44ruhQ=y_ dAqkw´n[EQ> Xeo(3Nϭ> yB߱0plCbɅVvу> 6j{!h^#Iδ.uWj 8KVGb#hƼE`k)'1da[ U!ʻN$ȕ:R̴nî#[xSXso@3_:H C֟hP.?! NT\ƇB#8zƥM&kުL׏|~y~ljF8z. %壠ڭpMh]x)2sr-xr[Bqe'NկX2BuP2|z#ϧXmV:7{`?ȤPl!Ql7H4yZ77?o Ƹ뇀(RFcf # 1Xֿ:w9)_SqHjJBͥSGԐ$)PS0#/ ` ~X;z a@˿HֲFpP1_! T\QE!4-o~9t?ƞifsso1_xQfKZ9<ز~۰r \ |y^(_B!;*pmwX5.g_!Q IWZF\\x\^i.@ 0΢|` nFzcx1~::$|DA UyAuGos!lYxcx>T@]0XVJ@)%'ani9S8='2,LHV&V}_WHX<^ŕSW3N` OM9!HN p'(%&)?0JG5P0! u&U[cЉtNMcz.?loh(W8_0=AOQ>HYO~E./Њ5eIuK_l)$D"TZu] .:-_1[u­x0 x:6a \߰_Mq| nZQ Cߔ`VH-nU 2D= s*kdW?<210686uH'S5؍4:7k#6\(Q!GȱYY%F\>T$ u6. ]0 Ql#Ӑ4q|0ʠsV@vee4opy@L:iP0! T\`#Jǡ2ܬ|sԭ&I{{nuӟ=U7 x1{vg \`"9rBԏ;p5K*6]QZlw|6Ws9 )g;Wo\Ze)m~Vb UNU`+E}69q B@673$*)u1Bh2g3?W΂#](:_&vЃN ,#X~9y|L/O+qܭdUKHpD/h 6F{oOir2A, VgP/_!1ET\`c+ѣq-Int5k\_:_ɗC* [Uf<9Y6K}[>2F(֐qIPܢ0D\ޔO:jcER snU%+f9VqͅhP&p^/*tLcЙt&/q-Qyޥ+͙?@410'_G1>p:cr7ARN#e.Sۜ^@fI֍#,Y Sk$ zN޵YB1~d?@ {ax*4`[IAi fP/?!]BU\`SNǤyW[]ӆ( V]tҒGFU^/Eeh*(ӵQqw1='x5 kTJEfzA^.M2CꎮOnל{exsZa rHC hf'(w*YJ43~;$@. L%p$-:smnuZ?ooˀ o$)'+E(ؾFv'|ӫexi3|UFcG3\l^t) D8VZ=/PH @&#/m)޹3 ,rOD ڗKiXP+_! / U\ #^Nr/"szg^_ϟwb9\^1ZQ!c2KnzX!ۯg\ ز5U\^5KPXwDVf$Dw)v0kצ}-Ӥ &Ӏ@4޵ )1Q=:`mÁ.38nsVID"hW|UE̺6W?&IFyJ6:VHsor:p鴏$/&MH !)J"jGJ v-0*fՈM@_8P/!]yU\ CYUKn>gڠ=}f9sd' 3YxC={m;URn?+?(Q4o9RS\sv1Ѿ }5NQ_yB׳@nz ~,U'N9~n/WpR =WAR\^^QU.S<:? ΥK]T>gP4 8dY3}i}MӎgR,>V0CSMz7NWNTh\;_L)Pm/5c?8g0 Gukw\Ms@u3A>T@( zPP/!U[)*C~knb\_sYZ?x]iq1,Iw-ڵ+Ve@|uFpW+2ͥ=K(ۇ++H[Qj}l_^37}ʵwQ%?. t>Oψ-VJZ|ٶ>6$OÝ=Lnp,+{ R\%X$AnĄe3r-vŻ;{3HxVpzn LZաD|\~?n5k>@ H-IpG: h-$٬&'øB{\QuEL! ύHųeJ>1EFdoʥuS5XX/<+O36 :*+<@`'aHdcP+! ߥT\ B+U5 7\[hK]jŒٳJw$%+K$$IiT<8|\^>Ʀʗ5\up׬Y 36 RRF8Εip4XsdǪHnMLw"T`ZLwZڿb.FΩG.+F ?3Ɓ&MšWutcNnj8ӳ:@Zkjb~BE*こD`\9q5[ʉ@ *V`#0q}|us41hL qq# 7iI9\Qp 0Ew"чfP.8P/!gU[aNSYoo^T!}u7?E<]!?>* YS9+ IN[ iZQ\dXY?Vaq?P’xkcbS]xgSڸ+\PA6$eÖ|YD3F}VRyyJ%8o uDccStGª 8_:yߜɢ Y !̯)Hs=!G5\ha;xl'fPJv˂KhvԖ7Ĕ=ӆ.}vp:pKP-_!T[i*Csyɗ* μ}qㆾU 1oiF6?\I9:!*HLiR停&ȸnUEXD:pˈe80Eg`{dydf+V=6+=#l|'ASEst- uB2P$ C}qG֔rVzE "Dgׯ嗢.UZx }hI07^'@gR227,c+Ĉ¨"=HPz"t1B뢴xeژ&g"$O b]/ /pkhKDPP,!eRCQxY播*TL>Vރr6mb{FZ^wwguor,_b*4԰f㬧m'H!BWhy49& RL㭐="ߕto]6#,JXIE;}  `'7ڼD(J[%9p`i:*:_:S9MWKl|js{J"qϲ/U%ʿ0DLXUOb"Qi XX3f fR})R5]pZ,6QcM?bqca #0$HCH'4@ )DP3!iwRg%uYejv׿}N#z_ Nc%1S`i9ډB&(n3clM%*~>F$F ì1Jh\RxR5a!z@C6mUn= OԌ麺]|"3^ O"6n-XSìRG/33&j"n5SޗV.嘲Fsq fK)ҼӏJ65mKҵUHVq_Z:Cò9z]}I3bWˋ ֖aѓ @-`x;Q A1L ` TC1z@j$5Dp(\H,3»`8 8P0!A{Shf#^#{U/Uk3^UG[Ò'' %0p{:f\b?!LzF. :պ>-ˏP@͌`W}=HEͫVq)`%ڃ/{ْUŭk\^mO:;Xj )Ƿ?:|32hgfNA>E>uRZUj}TuRl02Cg,n /I6%g57.!}Ye$s{H<,IyZ#:y26;UonQĥ< 4Y(#c(DH}L7Nt7@5pP0_! vTک3FEk_;\ˬ*.H5=>qP̷s<(yOZ~_FU0)Y| ޫ(sYY^ lS` pZ4O'I-_8E]t[p }KT]SYJ7pFv́IBԲ#G=fN⡑(c2zZ{8e4Jr%oi@KpV^Ңgv_-vaHuz@Ck#VP/!EqxSݔ BA"joʮOzkU?0ޮ׮g:RI'l _dSS4̪p~m9k$P +35"&|yM!OeAXR9ۼQQ({_u^Ww3r岯[JpCkBM=q|)VOJ!><{sW|wxԉz Kе %EQւ<7e|x7]4\ WAФͨTŒg VB|]D{|;lEF`#ၞ=5<_%M JL@ Z\P-!7RXg] ]Ru˻J%OߴV4/yyGp 76m)c޽MԜZlSuV KA @/.i>D»b؎F$d(D)_*4SKlWa5so *;Ƕ.֏+/W|=Do'`o-m'w ӝ(zg l i)ã_38\q~8qľYZ4Prr^F%rqM ,@\G8I\VfjYcV,H)ONed C(y @ˠLpP.?! T[a&I BBJW\UEWU*|kZ53wq˃tPa"̺%EOYFym ol%2[J;aT(OoUsCKCV%붵5c ..b7jguH5yN.Nfl$iQ=4H$qDW>El`FHr2{^".`5!E7oq}y0uy : aҟ@G'Bn4[Xc5Xeoz*kl%:ض/ILZ 53-&"q]ywfC^7| 6N( 9[ul"$ctF;=P8.+?S* pP.! dwQ feZZnRRq?('&&}#:ޯyJ1+Fь _oXEOa{QASx>iqKI*_‚@%䣽3'DZEΕgn@, :P!VM(J ZEđ5 M!PsRIم0ԗ1 Xbૡ(Q* 1V$7 *RX'/#U+LdJN~yO4Zʏ{M2Ea>1VXSL*CbZB-U]3EָQ<'XuZǵOq(RO.'P/?!Q)3)BJnJ;5>ܙytR.Z2ČWP{i$SM!/r|l:a| m M\w~=D3UN6"E+ ʿW*5]#8 GƅDF@ 5W)uɌVo$w=p9sgmBf8hFѶjK^ɒQ[!G/"5;nj} n6ӥ;Ksi+ezs 31u#.4XvXPUR\wٸ~"h!ʺ7t+-K<@:O>kd 3P.!R\ 3Yzpozܼq>y =}9++:ޞIk# -N4xLoL9E}A瘠ǝĐZgtiMDM2W=M ֵnW_W>0$ dcJl\X灟0~7Ruyu`}$ۂWNK6e0"-,9EIlN^G oJ ܼq>yWĒUrF=; axjʹ8vamWz !uW*MO|rFs-P;ч|V2 3D3P/!?Q[),#*-2y[ߏLSg0e /{r>V"L9+qȖ*.5@OmXGbDbCI2L`"*Y.F:oVNV/_JYdݨBsY*o7O]jwPl΋m 1s.Jq9:qS>0IF=򿩒8}n[ԫ˕1%P\^zyE/ѝkMV^ I<9 w=4=g(F#BF!eo}'ȶ\>WCKf`zOe@P.! oQ\(#! BZSݺJUy_nSޝpt3}o)|q ohM2kS?XS[#!UuzwgqE|SoMgZc4'#5 K>QӇ3HC=CF"#B =XSZ2A/r]=}m&ά(՜SZ*CKe/&I?4Xق&2RWusN:3P!*Cu)5uR( 身Ĩ1'腡EQM,vԣ0I_{vhe_CE: +Ȋe|.B^s ,Kxs0~Y+B %L` P.!_P(3.L%H%e]tZڻ!T0?)]?`e›#xl(,o_Ko3G/kSmkUgsL~yb}S%R#pt\rSr8çVv-O2OIx2fo 5t|I(Uq v'&\u3Tj l!p:ZZ$kwW5"w`tK](S*nz kM_vRh;0 e":Ƚ$#.$n`qk %J_TuD͡'!g5aŻz$ P1?!HP\(3iZSzɝa3Nu빯ƨ/P^kfż&.m<79Q$miqD;9Z]l ƍAv^@Fr(V}ɐYԼ;} ֦f3PW،x\\~րJپv~oNNYGID+qWU/;BEr朚W[Y%9CNRy~ww㞦ea.֎wtѹ8"NYs[|Y٣nM9S1\̼^xb01* ѪrIinhaeP6ﱺA$y~W$4)6ٮK@DTTP1! xP\(#yw 6ܒbx8kaTzT9;bq.OgkgM:O.̸P7rEw}ݳp̿3ԬJQ8rGEv&j?}o笏s@3F26D hAr r8ZSY,pAĢ|i3s P+ͺh)u3on͚u,^PfTm6SVKj|6r[IarL*~"cW-v͓$}7lv_ĩ3B1檟itJ#\YSȈbaducñՑ]8P,!Ll_QAKMq0f e,cGW4@[.ka*#JtdWU;P'!iZ5 8]EM^$V]-]p4xl^15W1dNE0pQ0N$4_ET W2u+T !x('qvTVYJe`âT;صĔЕ;Td䫛m&]wO 5Nƚf -c E+}.cG/:ݯ$KŠLѽc@" q{m^$V]-]p=K! L6rD'C5?= + 8`jP0!g\`Q^a^<8-U,g[{$8)rUHa-ܖl?\21IjAWQT.j6::&(׬dv l-6Cӭxl_l-[/w"=64~0WHvC_=Hu *<X&_q*8:J  /Ю߽C Q&OKqaf:e w{A^<8xXTo&9 ut Ok!DC[q,>Η3x}l)'f{;qD]XBuoϠP5]mP/! [)HK׷?@ QɗV\&%^ĕ?3ڨECy(|9,qE+ƫL=[V-c|j\Ғ$ڬZf%Jlc2b{u@u722.FAxOFЅY;<\OkZ~$Vpj w%x3h7ȗ0g4vz6ӤEm ޽p5y2 qSīxd%0#sJ}5BZ#|5{ xBGCLn@|383j˘E@?w0P,!=\ lB)\sq8FZ R'ݔ:sAA|[6.]=B+3f/8oTިO+j-m9MF<'nҩ623B%?L'2|xq92 7mJ }WKpyRsKwɎF`e@U&4kum[(Q/UJYW:wcۺeú}SL5(Q"A5p}Ye3*xa|YD O&:NP/! =[(4!]3Kܾ9|@46'/&΁KXqùd-><]k[-q)n KU\\Rr9l@jHX(iVoգt(Uɖ}M:ݻȭ:nq}N, > >kGK}L3çbi8[e୷?37YbZj؟Eұ%%{ZK4{[ap t/|nkrIplcIH\ ^|bsRm^bg.3B[Tfn1_F1"P n$U m_{eVҬ#ƾMxP3!ƫ\hpy1|Nm#Z|A ΪɿfXd-w;~Ry8CRY "4A.,+z֥b΋FԴ:إ<)o+2[|} }yuMVwU^l8\-~U9v-[R[PLˌlY35J dtf$r ($3 5]jEABіld\s ~:?z> Uc<(D8z:'\ϕp+/pXd$ֹLfktl&WPY\}o2"\"+Y9br]2[ma,kH1:J_lhät+EYӋ)MJ)nP0!߯[Z(5j\jJ^V@h(n͢#Ke,J@)I'*emR f&6ehΞj͎ww~/ VdM;6 ۢGxtcndg}޳N.jֿm᫬dbPXm$@mtR8z|ٛzT89 %c^7ԒTY/)Ml8cIpP1?!b\ pS*]j\u{u[]Bu, '2AASdٿOơ !hM1hnz1ʌyh݄"_ Q+k5XWiv4 KOul w fa vK5]W/]1A"K ʪ8g9Nq8cߌb"IEUZ=۩O>fL| a([T8F3;kڛ5_E.J4.-*P0?!u["( AZ|}\N ^]@s{4=Q&3jQ'iA=# ڻKlK'& 0S%%u2f:bќ05.mpM. *7HB+o-}l6i=E>vKN$/|(:[ɝ> 9݈<-6BQ#G2pn9ﶸ:=`RttUy\Hm#!FTv6cwRǗ"+N3 (b:[ ͊l 4 ~Y~8Q8EOT]}0 V9ȒYNRpP0! WF['p7W7>;^]̸n}x!oK$WOIgĎh/_έIcqJܙ j^Z$~N$m>p0+m㋵e|QQg<= zGXz4mqER>Hodju[~枥+֌Lm\r]g5݉nvlw W7j.&a@1 wB(7O))m:=v)omU7;eRu0֚/ ,ɉ00y@Q(!{7~gF+[aR}W/;RG7TKDofXgȢ׺kEOK逑q4P/! ͣw[8_ޓܫzJ ߛz_CNmq53f3df΀PU(soUӧ&BcLov+"H#;JmzJ9V-ޠs۵. (JP/Y-/0 866mb,vB" 6 >GUwr3U(MP}ݨ3SUrw]#V rafAF-QxWy@~8|va!޺^M,Yy.pġPE|QxЦm{!D8d:>,bLII٣6VihlupP1! [!'vݱۍe[[$J2IB6X9{f6oj[CU\y1+I@8IW~srsFu8aX姊 g<:48FtbƶLlC㮩 4jfΕBgY+KiEwoF47C;PEY{aSҧ|W#:fe"h ݆|`YVksrHRe䒁9Rk)Qz Cz N2-r 3T %-eo@_\ 1m֦ZO;]敐FZj›&^~m*]&ޓ$M8`KkF|0H3KP#]%E~XAmp<tWP0_! i[g5tQ͢ 8uvvr8\x$eƁtQ+7G퉾WrNvI`"1f#=}h)dRW.`Yw ]|3>¤bcǏLx(q'6vrmS8G+s|DttZDejshoxDA`L&O=DD%N.P=43 SD(+@nc!{+C$5Cvk&ZcsF0lk[7O-A)~' 0.rN#B#r6RI+JߡQFJRqHZpP3!o[!&@:^uoTne5450hI?i!%\ QZP :hiQ`;#Lz@QW.mNF~,B{oϭv1PE|@inT'])6![}/w;5F**6GaM)M҅VC>>Zڰn޷_C[jeG'?s(d$.FdJR|V!6 KtiypJbҔ-WZ<M Xs.FQy˄eL=9V_R-ӺnŎx"-fq4(џ~kVy(7kߗi{%P1!{#tƕN1TT $˕j%S@ڀЉ^ǥJPkHW6en/c~QY֦~Y⣮Y\=s%\'.֜p:G ԞbfO)B1HH!u(J bՆP_ xIEۥ#gkoijN1TT>N2OASV#*}pzP66Cn1E]vH/ӂ bŒ%IVXI # a3 TES_/kypmA[֊}:gW܅ ],iF x+}j%jC%5:%Z kY::MP1?!  &/L룛V"PG`( ɫ @dt:j)8 F-A\rnHi--N&86ah\{כؕYl3|-KLS<'o0!lӇTqf]ϪD+aysUhW8$qA"JWumsurUyVd9ܨᙧJ ć6'i+ٵʴ+~qÊ9/zMoI4?A OPpn7P*sࢴ6a|&y|zĺӅxrF|9ݛF LnuR8P/!%[;ρ޴nD$ܥxiQ &ȭvuѪe ry8Rlo ozjF砒xދD\VFU1 #$=RˋoA};tlf\}7<Eݮ[6mJx`SvK,f~"4 t&,JD7&I7kwo-Z#Xғ@Uʮ'$)]9f:!˛ M ;%"0.>MG?RUK_ybՙD>5#3wqmQ|JV kۣ| >G ,=wnX/IM{UfWHjZ pP1! C cX׿*O%TqԗZ"$z ) E`5maƠ*;;0 eڇƭw^ip殊jq+2-Z /p'WJ%P ǮtXUN TZڤ)ƛ0%/_ϙfv?UXKg?o^ӰH֊%11S߻z59|vj>KY5蕆LsbJ*IJ'a1cĪ+VdDQt]+KT>F 0 P/!wA[ sU381MdܼU XudOǙI3af6rlGafR02ᡪB a[~tuLSW/ KFU63D .+ũ+*\=݈ˎը3.6*750'v74З МA4#oil&Y9JnC8 ަIӌSY*/icN Z(U>tIJ^&o]7yEϸj`*:mBq AYbfl԰aip}xI:5VV2MQ SĤɲ)s%(|DȲhE_

ѦL؋Y{ELeCnFhh2N KP!D h_SJ`88RKP/! ܷA[&S淮җK+Z.`S<#i 9ul1)n6k뾧W[?e6֝fSCOi83d2JKNrpǣ.jPh-LJc(қt4kÒ8] /&l7@_84_"BI|R"p'tT3mޔ](E穇;QLA* NEu2e(= o>n3 k5 -We.\^d,FSu>9e|vS4 2ǔ2wkOO?5oP))RNm jOnK4q,Ck&ЭG*5ՎD[c.9\i:f!%Js7M P-Hܔ xOO` NNyR)_c}HFQˍ bCgM1gj7dS5W nuƚoo〴d"鱥?|n)'^3hB^RVh0{#hpP/! S@'wo߯<):?Q%[$ܫ%c6X@uY ۵ڌԹmAV Z!lB! UZӀvW0`6뺵zhÆ4EmzD 4*ժӾm +r5`^ݝ*M:kVmYPY&]q+'#u`7(A/whHdWm^8\Rj![H"mpP0!+DDfϏg?7~uyQ̗( A g?7/{9LVcuދTQ06ڊ_V`L3 %mH Xi4[y8S^n~2] d(c\'g4ν:YԩN%\iW*&^PQ֍j ~å@0a$6M?ff_czѮWs|PESBMU;V{:lp瓎V| {!=4;'m=zJH;9j8YiQ)/|c}iA1/Z`J$#<oX(fi\ *oXpf6μVw1?תif rle¦']1:|F}`?k*tܮ;3EuN^#i^"XsQxҤM`qxe3CgdXǾ f{|vi.Bp~<?)^s8YiQ)/|wo( hJE=Z/`N\hTG"}NҸ^gytz}wdAp"qZfd"Рܔ!\*׿L\f+ӬD'G3`αU~J(/۴<dx>5Y]ߐB%55ٝ.j{e>Zď,_WIFx|gE>TuZi9% FCFVT'gJnn5RU.:4gmik]͟3`櫖ӯ mWD`|̀< 5o@v0 ^ya)C齇E5Fl`@U'S@S.NP0!D4) exZω9LI \RV~V( 9M Aо`d(7|/C5iK 6a|1̝'k)"%)E?*B(Rn \״2U903OzEl@s}35X 1ٖ%0Q,wcu+QZ0ղ+sW[SYUjWz|"e5|TʸCؖデ522JGb9Gw?;\dě%koB=OS25Xw7|̩4}_9Yq`2BW!. cr?.^Kzo=IS g@ 2j4WլxP3!~.[ܐG: myf_=ߵV]$W$)x9Yp/8 9-Q !㠶L1 AҎz'3BCޛS^e0C*1PƼBW+լ i`PU@[$Tv7, <|QCW.IU(y+@r#:r4V}5(yѿtO/qhvi]%uyw5GUIRY3^m86I0':PQd@c39 ]6E3n1;}SȔz;]rV2{F%kt-'Ǟna'@׀QOȇM>Plv(P2![\5R $}xVZgy{I.&)4.KuvMz֣i4`:qfc:ԎU|]Ӽ% ) ^BJpDʌX7`tvgY4ˊ]O\B/eM!E42=!{eh|@K0$1J2d ,3@kXGkP3!gN3i ֲ~?9uj[-M2ܽ_J\^k2b_\۸,(SW%r㶦p*"qi꼳ECLXi^DzG"mۈ, AEc/+9Y:T di^ xXul.:$3&ruӆr67I;G&> kG3.ؐ6]JtSz͌S˧?| ߉jx!ӈЕI\2絲*Zq[gn))92;dhTWZc ܕy>Fg zu =4BMlN"gFLIjցꚉlV1mViP/!`[ "%8ZH53[T}_uMCQ&{yyHN`P 2,ɰCƭ?@VLWGrB= hTj#Rg9!X|A3]Y0"b2$TJUMɩL)+u'.3vBYJ`'l :}W@h(-!tk|f%k 4QZpJ 1e`GER8"8(c&e y8+SU_~w ib?rK&4t9@B{A=X4'7W ,T'P.!\3i JzYIREwrn.'tE(t>} BȺPe3~*qRYQq85W2q|0vT0JH'ڞV;M֜wu,Fjs~[%TZzVMHNoP6S{[n],̰@O|Fb‡QVKd͍\Ua VuO<|i1HnME΂Jh"*/4P'I\+`ыݶ|++9*Xo)7fxnpe3\6)ϲeY:^ziťǎ%>LÛD4u#5 pP0!q?[%'(#M|{{w%kD/joQFq:'3AU|Z5jxԢ itBy)>?ec4Ӆ 5ʙڵ);*g~7X3/%YbkZ.].wˇ.d||DW>I8٢_猽pS׬rl|4MobhP1_16(*Ω>UVxH\4e_#$#3޶bd0^WRv W_E][=7p-EȔY}nJA=̱]''OdYp ΅Z 6OziOP1!1o[BJVgzǪ1\Z Aզ|>9N=?~(I5B=s0&q-71jf1Oyrblkzvҷ \4dM rG,,\\դDaEI0l=[~da2-뙉0沈Kl'>>Bi ;~taHrH0(4 朳V\Zw4]y/C.μ)̳\D ԜOU3 ?Q''Vמrpt0򴫉A xU 5\)X,"zt'ͧp?РgO3<n ^ XFx]vP1!wa2aλk^:,\VԹu 8 rrD>K':n(GҰչL1q2t~PBklR:NkU5L+\\:zq/}֮xJ֯n\BJcx |^ G+m[]{W\فY㒇XgcU7( ĵ<> [:]S%G*~HS5+=KP1!\?\E98߷2*d DFݥґė=Z9gؙi6+Cc_+cB${N=Xm.=;r|}69^;S\m_U$e.UZOʏBb?[ ȟM euf (bg\Oh xڀanǵ=Ywˎp!{M6$ ԋ æP4M>Vh D@- t( D$P+! ~-&:%".iM*jYrP'd4Y Ѷ]* )$u 8Hҵ4v>1Ub^5|ugs ^h!{`b@<ma9ww`j9Yсr.1$JLJkz+_+|M H3h\#& ٔlCڂx.5pf7U5O U&jBsz[}|^y%Ŕ_ @0….P/!QZHF:HU7oHy-02.2惰Q" "lBrՈQ^wZ*BdX2M=(UdۤQ:9v,|ժ@ UOՈ &HKzEh. cjS ]=IA>ŷ!$a>PII"fbAG\i7[4֝i-? ުUD&\Ds|2BZauU%kKS b6PJwc!vN4hD# $`Nn,_RXⲂn,u!;;\xk[4I(^3`Be<)^TP5_!_ٛJD!&^MTDJa`)5vsU٘ >wpbSo.*U 5m ߀P/!آ"tBQ&Z\4eoXhK81K>(L@a,7wPN4xeE =ƈd$Y9.w /1@!z%j(!CG6OZXfTNS6(uY? |f yD2|78pvxrtIdA/ yhO '*Z'].VE{ݒ*ђj2^:?itL nJ,z$1amt%kΰq-N%\83g"F5zyn%a?b_EӣB%foUlÐ B\޼q ,Z P/_! QbD&xx%RrRoU{*0;>P`lVIrunHS,膦0 g)pOZq+iC9>Lk@#lΦёD2=skeTm~bIB^*1gjK,TY`U;cARvA/}v=Wgv͉{Km~z-b^xΒjI)7^r ۫LQ3[?]WZɩ^N ĽwF{`3ɷv-is kN\vc Y-Wg4Nr[;'E)%in6^*;~=jwPIIR*sYހ/J{ϫ'w$L~"U_"m .rA..KxqA{Js0%QݕL|gG`<.77emw:P/!YT돋"/%HTu@$g7&׳"tB| Vlt}ra &~Y9;\hvL*:-n8:)L ܛWYqpNi%r5m]Łab8'~X k8yZcڒxePT u.(&0ASb].nchfҪybq7EHǫE cf!"XA*/:]Ppҟ&\x1+#5!UbMuu*܎5gd8cܩ[V>]X!:&hrQ8 ldR)*H5K`~ww6P0!ooZS>^2G׊*wrWU[fΡEI!#W@EªOܼ%WnYn.eZ8~j xU2hK9;MCW}1W\b j`$lnf86hU*!]n u{-mǶqʍ]ehl;1q?#J*wrWU< Ov']M|G=M*0 wHs&}X5&D0([P蜒.<&s=|f͒#>/͗ܬ) {Ȅ7zÒP.!Z!2(" D5u2k.%J-y3_Ձd:mCW# !Xyh(.Zl3rD}oZ|-dIs2K aejMyi\\G^F$-y1 'OySC8^\YPlNͯYu0 L I_i, r^{5rZrӯ+t U;Ib"rx@<:^y$da`&` `ˆ%NfTx?i֞dP'xKѲnG:2c0't`ʍD4JRpP7_ hm!<{xֱyr*ؽU]ƵyM$rՒ]יHpzz(0>d8 ,ܙMFg>"1 L $Ew P3HNj߲yTm)S2y]* vic>h[+ҁu#WI[\mdi![$KOoqmMtEbDO+U3+qĉ_˽k#B񎊘Nig|y/#>3[Dۘ8 zsTA$LDcLI}7`vu gOH.&67luƙܱ uNݎ\[B˽t 8 :Ļwphj+sC;o_k&I r%^'PJה^@PE? +vj 23\lséɗ޺Uu?h b@WƧ=Ii LE8geU,?z H7B`EEYa0IO\DbG󏈷Gm;vGW,cf+'pzE>)ѬQ!FkT @zb<N`xπW|1gcϠ|,`n:0Rs3M]ɿln[:޾3JuyUC[P7ZH."N `d*X C a"֩[]oU0(MpD*MWǭ Cl*FBC:,n]GD҃t A1枉xؽ sz)m8U~mDA9ϵSLC4*n agNהT)z6Fz48Ә3)Z˅_5l{{1w F f \I],^? Mm8P9 LE;f.L6j곭܏8.7ƞޣ|]W5TWn$adk|XMGnEcaF3flT|Lu2Ul|I^'ln|;> sNCFȌ^+F7xb2м5uFHzҹڱD.eKjq__ef-P]+l[OqA g7O*[llMJ[⯶(nS{`q'@0wܫ!!0D:C艹I|⬍d|Uz?鎖[[!njpŘ(?Qr;hT:v ^QeJA4 ڱ8(sPA-~2% LZtSLc`FwsL koT7nz?@pP,_!WC a( ORJ$mw*Y*W;_AN* w@YGg>ksVCɎ+qwpd4Tܛ+8ĬZ"E,| Aa2UlN{.zg&uW&j-^׈6}C4k ņbeQ@<0>׶{" 'Zm.J%H$Љ4&?IRH5UZzN`{S^&KV͵|s;EA Xh..BS4\s-.GDfI9ƭp]6nuD6ψ D%LWg P+!~VYٮX e̩!u%%Is`-)+mR yqua"jE P>*y( 8HWYSϪqJ`l `2#4 ¹T)3: kQVy&0&9a:U~9(%kM@=on\1bH01ٟX];[c(ީ2TU!u%%Isߎ C8bͤ:J Sq9N!`icyoҶ=zM_/bgMX ){E&P.! /TѢ$%BBBMsZW-3Ɓ(UWREn)n;;s ,Ӳ a!˵yFI=!8 [?e γ_ͭPg}~)T5bs.Ɉ g,A5@TUL5 *j b  ڪĽtR|DgjZDj}#Qy 㤕6vjЉ<*U̕5Yy$Ry=l irLĒ3"}k4cMi[hmY PȎD}!ުɏ8%r{[tA(f4FDKH>P0!{~TR0$<&׮uRJBzTxg_I#L_4Y«;3ʡSJ /ocpX [ 3c2%:x/,fa8|}&9z,CqqufM`V+zđE I~uCKQ|j!a Z7|F37aջ< .cqUIB3hD ㊒W={ܒ{{~5V+ Q-:'RL)}ЮKxeb2c@fJMQwTj๞rIlVtZq9~9F!Ǧg'p݊ZP(!5@x enǯ>{$˕\nHnu@6+S%4( ?PEН%qj%Ag: XZ+dᝫ*өlI/wگYIbTJk`>U } pŊ"u3f)XVwg6YYݘ`Zb[ Q1cB2$o%`1f T46};knfcGAYQڕA[s8wrIuW.)II`KA0J  rj)畜P1!Qf, ba٥IZwLYt>~B])>&m#yۆ]z; s( )2V"G9h@52: My'!31 paTnjvCEy5WP(R=K\|jk@b5~p>h+LAb𜪡AP,AkSq{o<Z]4v5QMWsZvYrtPlA٧ZYTk.Uu\WЯR$hG@p6@L(Oر}+^w^ zJdzcx^x~ԃ΍{ P@ ڀa`C[ >P/!Qd(|rDUǞfpWqra& =!u$ V@XZ> I$պ\Cъ24ׅo~ۼT eQ5$OYeS_1^n'pwp^}¯[/w֚_T? CGvTiӻM)kc㧯wsC-4Bfma(%TfbpF Q*S吣!`**k]TjnΪJjjWn( Yks?a-j+:s<;}<1o)nB%ߺK94΁{> ƛucMatҢe%z u !1WW@OϿ5㑡XV@28O5z͈,z@bYIiV6[P1! cPڈV-uRMZ8j@?P g=tNPٙd=huZ)Qb8 hs/wXښ,=))HN$orh\`rl7]P=Ú;ӱlyP܁.+ XPID6ټcJ7#66|e\IRUNuee}p>sL} vHP,3" ) eLķZF隒Ǟ9m|=U.qFa=ݸҤ8_,Nyn \RcOLkq/LhpP/?!Hs[J@JZd+5 X3E|b~}^ x} GQ`CGp]S/AkUB ~B{ ><,"VM+ZQkx\K5Jy(h>Es*6=`Mn׿@JZd+5@<7zH%RflP% ~&1IWd0r ax5V U,}O#ҹia|@ kBA$s] i=s,1HmiN3"D4>˝ bg8Hw8Drm³qŕNv)P/'i oK< PB@|X-]%\T8ms=+DFYږMZ17Rۗ\nJ5]T"--*BJJXB[n D^/onuު EH;^oO>pJOLZ;Dg)<$ o5N >ߕ )S3NP.?!kZ4R/%}B*7Ӗ:xxHHsheҷ˻&r6F_x| =8!Z'j:O֌jC֠*I+ lLln:A/:ilgLùĞd:N+gIi'"J(S,/%iTU.o/[[x \J؂t0:>tbONJ @-5RC-d!]|-VpʺMHd,əBxr`K=zOا'|8* V45*QP.!+9 "֮ܽ՚ku\s2aDMy,D>AYT?3GX>P ѶI'[sϼ=>a[NX rpP2! lj `Dk?k纪& I&W[?YGX3z0:=VO3`hn )+_Mܓ|  Q6s^P ndB:#j( =5bh$g5=Kt&V;x:899ˍ*_mZ-C"{V2!4sΝu9q~nN2v;v(7~ʖ9/I3ؾ3횪r`eu+}s?*þ.f:(Y__v^YN(gO@/a}K:d?::y<`cێ(pP.!+!nDpn3wG'ѽ1`ѩ˞.nZΘ5T+6YgUz|21MH6Q\d%q|^ƞ{1AMU>x$y)YRd gK x\anFnkŎ,w8Dk P'J| V911UjB n|zszh`MGs%ȨtM\D H\M!˻^{@~ c&Bt% {PQmӀkwAq5}]nT%Mh Vreewvx/ۈ9>3/ߥ-MXȿmrb"bGGɦ;Üz#Ҧf6@f>g7ontwqOi/zE" P%~?v@u:bPCз9eǢ?֥ VWz]0PeFw/ r:Z"c%"PL}?UgiWdR`==偢 8d1u {FO91?|@>t{}ä(rb]߾n Ꞻ~Yni?!?L;wJbq/~_ﲮoTg(/]B?k,]-ٟH>pq`E@߽@P2!{?V7f7:oAnu2]J\T޵__dE\wZޟ2F SKw^K>ӕ2iPaCIԑI#x_e)ȁ8Kp\s }0{ŒӖ`</HĆYGwi+QM2Al#m쯸'w;}&tX+GJ(P":oNW&KWַr^w姫n˲(FmޝE5<' VEb3-8s-e4bmݳǿmh\kaK%!7>ɒ;@3Buung *nL`WٲL8AyyD62#T7Tm)ѭʔ.C$U\pƤ|.![a\2<[gl4RL(Š7MZ ׉*ptPunAxe8' hO@d=N$jP1! rdsbUIRD_;ХQi:`!?O=t Nz%PoyƞƉ(-˜$I#xTC$pRм JSOtE@%E M1 WMzPbFQc}@)} 77֜=̩{ZPH> ;a:;EDĔn'zg1_{=@ 1RWuٺs3:wT FThȒDCzޤqLUIRD_~콬PHV+ާu+2_ǫ]^1|!Eƺ^[GWP̀_!CAReщ;u;mJX0K( [4ɡTvRFE=TH-ËbNfXhuU/:iRu(NߌH@xP 98̀әde=XU(@!9ýBi]ɩ}@Z+ (LvyrFw5+/ņYh X@ZnpP/?!ZURJ㜿ժ%Qj\3fك:W)c$Ɛdl0mKMtI[$HoBe ^K0&_Ox/_M>>)>Ϙth3~):@tr =8b7U,>5p07{}w6NdG`sxjJݜ7^Z0TR]V.fӊv䒼%R]fVcZXALv1h }0.pP9!Ll+MR&ZlNJ>n=vUg>bbep?3.R$:T ECnTcMXrakѠ|98˹A 7\;)[1|POc~eI.~ OX !Weuj})-?O]ޗz dF^G|hyDg]ձcTSǣ1ke1'm鲳4FاCR^=;RGkVsLXeV΍|QtYd4B6[s-g=fWnb* I`qoP"낌DfDwOD"_GpP9?!Ll Y+M匫16#{AIS|oFoG<#z&o9`4sbһxK !)0$ѭvYwN*SNsAp:HI/3 y\W~+?e* wtRX&^ ǭ| %QUc<T黎hX }?©Ij팧)Ȕ2f= -w&pZSi(ɨ-]`òG+ l'N.sͨ|HM;8u~<;h1դR=|]ՙ!7vՀ.G$==c?#n1> L/9K ƈaGG RMz_`)( OԀcƁppP'!{`"dL8.bIU$Js_)6KwL/sƾxwVL KK3tl_[zXXO(Sg#_d&]T#Y+Y~ ;P1?!ڙ2)5{|޾sq+[9U'wS G'ʧR J-阰n\dgNfH sccC`4p<&7+3hoTh1EʜIy_ yZ+GUz q jK FN7G\=SM@pTClxi:ΊO[Ɉˇ/+,>M/? INx,(3뫇$*_mHBoM~'7U㛩Ryu?`AW92+%bpDg}Z7{?Yi:<h3bW`]a 0eN {Hr@l[W--*^}P3!{ZvHny꾹wr~udʲ&({3_0ɩ*YD´R%L .Ovz@8M:wT0|²ي͔C]5"e@0E껢?tq1ԄhڦKlo~4sP΅E/:ogO =ٚ}[oS NETCoЄ9޴]&U7|΀i݀llPŁ"eli%\V8\&~ {MwЮ:Q˂t)uL&;P :0C+c__Is[zW!:0n2%ܸ Cei8P(!YYFB!1*kVȕe.uZF'3Ĕ" /%%PB3Ag#.ׯ%x[a^) Pa@ `8aWۧt1'0ف<>&yƗ̉#vv+KI{7a!`N|xyDgy'}7[L<9 kI1ހ}SeuQTʡUO7U["V5Uk>y>ҕ~[G@"* j+(EǐLB_ӀP)_!Ub"Lk:UQ%^| bհ_ 4 [P _T3\,A 2Ҷ5 YBlSk۔/ey"Ѐ07e:vGgGEA,Rź#;*D[! 3R$Ys|%@cYeRP!ͅiTO5M2[if?p"^@(Ǧg<aVfdEQ嶈֑AQ Hw2co [$aT~[]g_<_j* dϏ'\R!ϘP0 pP9![hS|߷7xu3jW|oۢI,E0a*4gɍ6sl;(P"ƧesIG%Db++@G i`c)t_"PpY WyX`ڃ RnL963O*dKmNf5, fiIm;hmUFR1!$He'UIDFi2͓*IqBi4 ODřwWP?ᤀ Ru7XⅸFw)AziS PWgwݬPZ鉛TakE\2|߷7xu3jW|o~}}-9([ÍB1k6ǟGK< A={#;>0dO4P`Q VP5!w[t A<|huHu+Mպ_K inU3^촎`⋊) `Pf8?OuɧBݿL uzpDD-PΙ.,{+fDVGRHv,nv\ma@HP" J$OGYeD|/_=k%Zi캙hZ fy:=8FT9ԝ  ζa{JZ~ h6:ݾVPod75\0ՑlAyݣϋ[]"RW !$Ju~.N;( >ƄOF p 0m{]ֿary}*s{jBX0%0zã C>4{lJ{,@VJ(P1!Z%Fʦߪb *Th:а qğb|y8w|ع5zEu|U+{+i˨xpjyiY ZJR0,Fl 0#ALD h IxT:N +ى\YP{\a}嬉.K&4u6$i5k 6wغ>rIik:Ps{eS_=Vغu$ʕ"6@eBH\'A~ tVZw *9z[\"_XТ닠b<_١N}@t=%bO2p5©7G&>H \T^)P3! /Z& #c".ۚ9Rt$˩yn ? )wtmndK[DW|.q^-}]lj!{Ff&w }*zgkeεideUҔ?xA}^r>К^ ˽dٗS375d6~{+nUJ&0y"496/FÍt!(\*?G>>7*VP8‚+C*Ez]sUjRDu/?TWyd0g/2R޴orJnA)y[^3T}}7ˣ;O_WOG`35|}ܺ$`pxXe .@ߘg>8P1![%jT)eiԭɋ!**5sFGЬF-)Tn6l@2(tFYlqZn1VEgK#N8>.0|ڹg0ƥk=Mo~&w(uK8;:32.9Xڱ"V 9NH[5% =wez J&h"b<(鹱ӼNau9޳ޓJZϲ3MVkǝɋ!**5s4"ϋ4+(*06* YI1;:q5g bEjjɉ.u܂+*Ʋ){,O^3"b8%Z uCP3!R%Yǯfx[BRT' DHl!yx- wVW@"^T09VS Gpa‡S$^{ONaiu[{W/O]3_4ߊ1yqѬª[+kqK&Ѭݱ) \s37ЯJr+x6ʦuXţ>3~Ӱ&,XuS6wǯfД 1W4Gf#XuqȗuWz/<ϲ*X]N(NK <ew=UmwdN0q}Ype^0ߛ]PZ=U@"ӕ %#P2![$+ ny3㼭s\ oW5?AkbGgNiByײWB8·/x84_s3Bc\ S x*˕*$ F6ZL0xrw͟ڃT*D#76W͊\TvV,Bw_ok7O+/2Råaoß6֟CO)Ijv^{jo5kW#&:(\b81\R;. iI { sJ#qCcŮoHi6t,_nDz>W*f ,'pIծÎN6zk𜑿# Wq}N^v.S*S,cN^]aE:_(HBnQJ78+SqV^]|w\5r)@㿱] ]0ѳ%Xsl3Y|h<1.MFL/>-<>!Xsw{g=csvʍVYKx|fq!W5ѝm_V̟+>6˄ #n9枝]+jtw; h'P l.Fxr㊕ZJZ/ DTKc_ɺvo+云Y[;BX& V1u<99 c9)8+LU:ipOfcg jc/@ l+Zij|P1!?Zv$>|W*%JBN9x? dcO>JG+x~!#O<Ⓤm 賆g \&iҧ'/TKl(uOqvvipGC_:SA7wHM=3P.! =[*c!ZWd/5-2&$Rq?,wgYr___b yPm`m̖y 7G{;5P0! ZI 9]gj.q\ٸ(Eh0 &XkSW2:~dcIW9B* E١Ӽw4m) 0Y<Z?:|Վ]8 ^1u05̤9xjВkj;H)_`ŗ˩yLx۞esT87G^_*u[eq D^r eJ;MCg q[εK/+]T?C.!xzBtu_R \T 4}ZzY^DcNmke,Kv) 81a>75bX+ `ԝQP/!*@s.]V+Yng i$^R͙t @|KטYhwϩF0A) q݉gVT6~q7ܠ85{zq 'Fz\T!!pE܊o7InP$_4OU͠w|4Tp =`Z3KaC[tl8˻o<̑޸IՅ$pYWٞyV+Yy{2:d91OV4^tHʸt|n>0?{ E_>[pzir' 0%zFhg5!K@!MU፪P1! N& Ϸy&\)W>}N*i%ú"+~XriF|e i3ZkqI,o[00Uf;]VY!tUy:[_/kljZujvlJ_!- nqrpe0:g'n?ǴOZhö( z='$eu!JD89}{~xJ.T]]jҀ]]rA#?SF/j~后GzO5VHy ՚C*i gux],FVVC?f7̼-'*2TZ-D3N+pP1!+zZ]}T]6\Z|NWp7hʍv<],{kJW[sʼn=#WyL*0=:~ UULa2>|9[W#7rQ0R13MnoIOϬ >o @??.`UOZyń.]%*4+;TM?z~o8{Nl!cDI1 8 ]r^gL+`-2,/0s>m@ έmL,?{i@mϟ>f=`&?||`?>XMwPL?!Ll Ӯ&FlJj\J;ܮ}sė^sZqIWHZ碯nI7 'uf>?·%"Q sPvV>=X=ytB5#uaRJt&bJf8zpAxxgENeQ~u@k bB݂u!Ru5YA|>YbBݥZy$n8dۖJJ`3WQ:`%51Ήg~ '1僇Ư˓@7}= gWn-ߥ]oI,cz;M^ЧN4cRSq+q缺&5|8W,@Os@y"&Ko fgF/ "^CEX seRJ)9 sF,I;"@;6 p3FMӰ%կ nf׷KK #/6g{9MVuW)ju7eV,)xK35!ֻ9^2}Ur#1HpT\XڒB64Y?hP,!{}XmnWk8IW TugggW^\-Q2Z:'pQcS_{B@ yhU0 6_ĐMlQs!!C.bE$31;c8[j xGY^`k{;˩@>U]K]Rop xDJ'wgqh(:0Y ʒ̑*JJo;A1/LBT ĵKJ-X7%Fխu!Ga5c[,r[wsAAAjΕir&>^m*lvObYbGr蚙{h[Bm9#PM9r9ÕKU?tU4{}/(lX._ ;< M 9+`" LI>38]沫YiQ^[sB\ |0Y{:h+bMhls'e2-E\]f: L޷<%!H[Rb~^?91epD|^{ZP0![!l$1^%k$*T~y/犛r/);Nj&(4v5#LC8_iTz1 :DS#qg׬f;]'8v (WrSXlj#CZ|gZazwyP^*ÖDSfiLr:53kIY[wУn MAa!4ST B(;]^*NnT~y/j4ϯ,;LHI:h#C])E"dř꾦^-v>kJY0">ٍ<$Yρ ˽0BJM=ÀP/!R.T(B32/%TLIu@>ْm:UPtN-Ǭ<񤇼+>#pDe-ȻE>$"`֒JyQrlj$wfk?AUEj-5i)1ς ыE9I'¾+:wi`Tx>6CVBts67CĚcY ۗ]<\"W r;4.Q{:̬-{6MoyX=AH<ԌO9: NB[6xKMLh u{.Ňq\%,؄VDѽԪ; Dֽ/w+TS$]JIqMjuL9kgC+f4P@>d^$h1՝zS{^)VʇI2]2S=KX.ux > HKh9)R (tM!vP:_ c H@loTdN.qȞD!\g!r0f?:(&MA!U~AUJ0K[5L& 9'T ]s%#܎sb((uŒ&WI&X:#&ˀ1G[s3FP ګ3r) ɩ޻^n򇄣 w`L bL--6†3bG8jR15;DF['˚=ȞDn̼϶J,\ gZFƿI$vWNJHb[RQZrYAکߜUFbBOԕTlA3Td۽pjk}>[sHcdѩMfbvgèMSoG%ݪ12]Io{ .誵k+@Yc ԁ~PA +X2N&*W%v~Wζo_^+5^X RW˰u΃&to|9_}- z\c~-:m,X(pw jڞp+#o?չA" 3m}/|@œA NϜW~>xm. >'|x}oҐ?7J3m:>7Mlz`,W _íkWv?uⳋק^x7fSf¢=A̗-I,QA)B@"DN BWdŭVTQJ3ǭt܎)!Ȁ=7)kzbMsXW5Vr:7|;&a *枋fOs նʛCo qda1lO|miJD [E{C'RA;6TWZd<؃v?k@ǁP9?!L6 AMYn SeD]<3ν,T'keTXși]L$45(ض2EEAq8KDdb$mF#x fg9(m&JN׳g f[Z/G=b\e3:[+VEݷJ0P1\@tSԆu0 ԕH}W `0VnaUu48 z=:ZUz~w`ʫUwX@wo"v6O'QxWO :$˟]ԻVpsx@pB2睉C>h/>zbb^ pNQ#j$&"l-g+rDoªPS/=]|iu4d%⭛霆)LrpP'!{X DCЈt"d2ڪI{v |&pKP !m*Xz^aGQ -ۅcqDquPj7x|PFni"xtՆZ75)vIx+BvP9t+,9p8 ,E [hâLsnڪN}%KT-L2y1@oaWPwj$ft!0a1 t˕b֦,&f'Zpói@P.!g/$WB!]TrWHTLosߜPM~/UsBBq=MkWC/7NḪI !3hL3κZ͉\ 9ȯ5bE 37+D,@cMۋw,%wH6/> 0zGl:-9)=TV`tuZ/D!tBBîuUr7q)rO TxH<'^iB"#ݴ1 싧1gK]X^ĚOT;1Qk/oDKF}- :&+v]>G qNP'!_U F!ܻڴwLu$)oikOchJw1R 0.!h+3"r TkMD=0S`$ ~݅@O5V w6VPM.p@1<1~ Gpml>̝ZUQe^=bhwǟ/{/ǝjB0CD:3USKWtWRB7֔3~CT>pԱOדPO.}sAbƪ-_c/JJwk 5gL2FZP.!T$]BdД*ʑz\_RAEW Q1H3+_lSXEW( mj2-j4K^&h fA0$Rً0yrs"ijaH&"8XVu}(L9sOޥZ첒jw 67])`DmQBЊJVVL]$FSk5V9l Y1}NHfw3LGmQza7wP]k[|g6n5|pնy;| uj@LNWp@=O& q ^ߺP/?!+ wUZI H22YjE\.GTQ>GbA 7m{$`S) 3I%cD3hN[ա%kߛl @vХȉڴVBhHR<6z9wLLbs)ݢϱ/MI,EFMc`'<` sa30T9$~v^4һCcP)_!{7YQb,B{kf;Ϊ;d2Ӯ?S(dYW.1J\>Ek1/ T=lԄOYfbHq3 %2SKG>ɑ߱^ͤυݾn5 o+]YH6L[mj5eJm(dE %@,kƌ9ﲍvYipc$0s=S!n/2\ULOmW?UBjKRt2IMEF2u߬+K-&l9t0+FnL9ҷ dg: yG!.Z^l䩅ƀ@'fz95z#ku%t:v>ﻳLsȯ^?<mU@JVc{gff%95:pj-$РÒjwK=[*ց,pt/~OeW2F(e-,71"9wy^iihц P3!ّlT, HkLsiWHd$_{ MuH|Qz6:- ԁ˟KA3g^z8 瀮P}?{w6\}qAHJ8h\(I@xgmc9u x\}w-A'4yl(t2{`En.@ 46)p7\Y ŽFg ͩU\|nU*$)7z8.DbdKExZvygk Q<ND%̂U{ׅV6!$T*ToDMp A$ 掳$eu*8!1EuS٫: Di+T bssѽaoF 9f9fv\kx<6b]#.bmP3_!u?X$|/Ƶ%+U$Ln]E?GGNxL"r*%`Y^""@%m䐘/ޥGK-6t|훴Ldjf9sKq0o4/oBn-xK[*zohA8*bڏ&ցʼnISoMKsm%#q d%z7O9*$ԩ"dwMjo <yKwU!̐ט".RЅGG ՌJͲJ].9dgVM5@kcvɜ>7wߓC 'POF~ W)vHGWjŭt)Ř`јDAE{>Ju)9Z,B`ПP2!ݷ[*#c7E.a][s$ ,0x9$R* NE? Yn =ث}v U:~_0Y_hT:G$XKaxvO@KZXBQ_G7TPH!LlO+MMᘛ11*۞UO⯈r/tKoW\6Ec=[m)[h!6E@dlYp00Qe`7Vm r&^5D̦T,fXSocYQ@2P;M.y3FD`bg_x}p >zlVu!4nlڸ9Ntik[`T^a8y*i77uN߯juh ,(v {H Kͼ xmSTQ 5TV5 $WwwݞHnNn^D2w36oa}J,JLgg۷BM„Fnv)>U|pP2?!LQ.Y͚Q$ǞxLXbʀY!j Џ i9P2i ngp'.2G$SP8!}{0Y; R Ď5s|d*ҍVqR? ZZ2r pN3<$H̊)Tu\M݁)+~oqt0j*Tl"xXCgګһƳ; (3^\q3[S*^θdp7Fd2/opRe&aF+QUC^71ڡ, Uk E^1ұYEhH)s)RƧO›ilT$Jiakr d*ҍVqR?<r^OstTd}w~ȣ#NyAMjlՉ3AS9<GO p ﰹhUm@Ox _Ωٌv^*`Nv?:o 5zjP7Lavc57.107.100BVCgQ%MzL?ל=NB~XzSO:+O q[:qF)z&tPoh&ܣ79ч:h CT-%Mkmɯoy C3#ݝHL;0)8X;سMASӣr>ߓ)wcij!)!oeƉ6\a"IOfbw dar̔prc(!S^3ʒ&I&Hkl}PD 62B ob(ZbQ*" # VJyۂ/m qItފ{}k_hi/@ׂnUrxd(V蟇ko\?L f8K¯CPZ?!LLM;mN+/<μOmZ_fkSrbj$٘/M-\0˨*9N2:*,X+ $3{F7=Hlp͟zr~#"Y6]-0)_i }ω"m_Q% 3 _*wQy I^M(am+ jqqTlU.fLJpe#m!%0JDpB{S΀!m]~Ӿ)zׯj}_:֟טyy z=o=5C!D;q\`$7CYsj\gijәzN'㑳=fT̓~ a%+~W>ʬ'lR1pNl۸+|S:Acp+2t1i D,ǹ]neShQ]Jzͭ*V3SWdqr4TiiO%{&^(P+!{YQT eA H]*xIRRdvyA*^grp|Q2u4K +IUeK̽)lUFP(r!Vy'|OYC Ab !PK|`;Ngϫρ6ǙJv@ |8-Ij|Zzm8_|OGAD=iJ%KIqgw$q#xr 3j' \EE:I$LolHDDJust9>õr3AHz\a- œn~KAQzvP.!WYe)qZUqwQ݇1Q=`NRBΚwㄭzVD F"nfA\T;A:KJsռ{|~>(o[x{/q+#},s]ǷNu}~FrG{-):f=+un/*v'i?c??u¦2!Hn!5>u֡UqwQ1/r̄hrtV-:sރcp"Yoҵ)dvqR7,ۭcrK|%/ @t |̼4KOPP0_!Y"D+ &i%fFI'A%1L>m{Dka-<Ü( T3QS%tuxv%K/eR͝MݰƝJ\ݨV$ih$m)_a*BӛBFddԨ/PހqZ|Ķcꗜi\pɾخUFǏ2BJ*O~M%&LWT4EPuw<fa3^ڈa#g>׊ 'z||.׈4'44iS C!nP3!Zf2Zw*f%^Z Mu(acw n…Uŀ2?yѿw?(4_քi.SـjRG IAkl-u`n k@;oJS#Yjh@ 1U#NoP  QCG6&C-+-_Ph{1t-Jͺuu4bǷ.S/$Wz]s)t4㯮aK 0cL `pZSP3?!Ga# ڭTk]*ۜ+}8'q[8jp塠Xe^G%K% K-'?A\p,`d)vP7j c yF5#"y`. %k.r<$VD%{)E myA}']yu}?Kݞe@|Z [fש90v@^U^ceYHCb]IAywU8Vq0<:& 2@W1XHpDsotI擋#EۀUnds$8cLPtU{,21|M!F0 lAT'W#GiCR s<ڈe qV%fkP/!Z,7 T1w&8WN/ߐӇ&;2OŸ ?5(/m@}Kq˳ ;~BU5}X. ǡ;}#W"ׇǧ5rrQjMUx˭_,nٗG^wv9L3eN!=K> 6;`d D8zńr{x `KB҇$#cʒfQd]8~F0in9l$1_Sy 5/o6^GLd,F'VM9SZw{sAS=yZB{ *" {jd#~X01oodnZ_kFpP/!Z$97?kR\3>>7倩n `UK#<?p$paѐmb7W&NGOAv"=\׀UKYo !m|t`"~gX,ְ.[AEe>^3.i2J0N[7kσX%ida4o]+}"g=Q6v-PF)GܒEIUkWB!U,.q??\/<זriOtܿNG _c3y̍j+P)=ӕڥ87ý BJ{uieP.!Ѣc}nVd]D3UZpyg \g.Kqx+߅G[bt9 ~+BS/ IjZ3jWrʬ21硳1V"9*;{KiJzO8z͔}>-4յz(O lb{Q3=9|0WOߜ;Z""oEk3WNFb.,7ڭUqI*LV+YNMl<.<ٷz?A &Mx8O).&[;fߡ ʫV- G4> !D0E/Ag L 6itV^P/!Ya*׷K/,-\RqSO3#u|YDGi6t__`HW(⪤%`jHI :5mNd(c gXG|ٔz.$58q'Y*DL4*w/avpYnO"ۉG hAX>h l 婅Y˳7oh%p@ kd[P'!+=ڙ)13-^rg*J{QLm|~n 㕰pCi*m~j d^D!0ʤi})|3Ut+w5jmۮL3].1,ZG,wt3Ud#-((ⷩ³UoyVWR__\msIϋO?LԊ2βepd+WUdvC/i춿HF%,UYB~vReuZ<d " Z2 P@!LlQ+s ͚M϶d}_|mZx?:J?Mu| 9LDzTME`@}=LP(!{ژH ;q{eVԕeU~?h' @yN 4zPc{E#_NA;7M yEyM;U6܈]@,Qy)ER{ɊksZ BVco4?͑qG{ , wwqEYweqTb] S$O`UŊc{IJ"cXF1gVoUZRViUW߲-J0^0h.kmC9PJ+hY+'[pP2![V i%\L6 IW;AueduL=AUH@YIƽ;l+`+dܑ*ح[d]%y<]ίw>[-TR}(x8&JWKb8cȌ^0 DGgVYsޯĩ)7S"e͸}nX&_8dbH@ & " |% LN)B(P2ɤ왪{*%ZxU‡01}z=K8cg ?04 S^P-_!zٔfj/|]x댙9H+@BlIY($hxP3NۗsNئr^[WTaK= d`exVD[XD :Q%qAJi,k.6wj[:&8G\הwA n=Ã^I2f.aY}> ^?G1ͪB:,P._!+٠̤YgU(k!Ȃ/΅ 5Z?\^\َvnB##e3[z7Zy{a0EzS4}zzT3 -(^ν+ɨgΚ35f1{kɓ)sxtQ_'voIFph N2\c5M7DSJ d3YU" =@0_y$+R59(>Fg6] gooʜ2㝆W}ǞÏA _eMS) @290'.W7I9PN!Lϴ^O,M״ݽΕ䗪y~o޿=e/?U{UkP~ c\5e $x ~2|!Ǹt5>-G @q ӏb5!` }H7s&|So?& d}ue#E zi@\!sD)lnM`i>!_ȣ`6Aœ+,K?v6o na1$NdC|8-$!?b=kn Jd!&=$k2 D^@q7R/o|i4{pZc#GtןQ?UX؏Hi6e޵/T;oߜOW/|qު~Xs'ڭ\9-Z\8H1Nod_|}M?#kJ%Co-`?9 `sa&ќw&g: 7ͬvp=;{r|({8x+2h^8M\p d_Ƹ\)^~I"FFdl]#P*!{ AL+B]w8&T*dXm0apsܧ Xnӎ[XX>Ɛr$ XPci-Wux眮U=  =Ire6v(*FKIr(E^nw~oL!LfP:f]Q׭wyeEJW;7|5&xo܂YA4϶5ĖY~30;w؟>{m?;QN=j8&T*dXm0axW"JUP-_!fJesngJ1s*%̩+|HMCbB׸@bD+-ZJ0aA IDIpA-WԤD\ M\㾲#X#"664Aʠb21 gO4ɍQ;KN=ح1/hu[+7܄ >\!d`+BW2 FsfIg5cFOX+?D[ZZO Jោ]+7ዙQ.eM\s}/h!xƀ RSw RDZ3T& +Z&(,P0! ٘j .B*'? 5|Hk5S.*j_bL`ɤiNyBfʰuFA@1P( Stb_=[ bo_MHf$|203ʼ6Cn Kjs98 Klk"OAġ-ASrjh׌UEר݅vFq9(Ou(m'plV؜ mlcaz -nsݳYĆU2钦g9#޵t3 } {<}.0O|=vџ iٖB$D,w{]f{r3tWU/Rӧ$ SPmA8LHp\[1ߟbS .|L@+7A:z)~3:+ F˿Fc8٤jߪA9P6_![Xv$ Dls\*Uu/*{w-Wlj=/)0%RH0@ YHs~ ~td..QQ`,tbVӠd#eI]xpu>NS/x:ePay$UVoCjUC`^wael8Z+s*-:^L8d!7h+:ຟzqzW(}_>ŋoa^3NR{:;.@sE'¼p;FUȞrwslyW`@; "Xj"+wۖ e7.S+27!"`=E.g򚳓XG'N|o5g57"Yun5 J!HyC)]C:faǮ0Ӻd_ҭm*[; &m<#&L* o`%',f90%2]P0!ܜ)ڙηɮ}Kߚdq 4y#`2l (*&9!&(xb0&­!s}A:DF;/j)l!S:$,'ga@'bFb 1"{(#~2$Sxlb\0qVwJ81wŜwˇTb'd 'k8vVmٕv: _9>MswKߚdq k*ċ m{bYmAh`rjnqAD '_R)cl8iZ6/4wqIsGրk@fQߍ ҽ-I3P1?!ۥLE ԕU{nRk|_UTv͒95ճgP͓(*zPLƗЖYþ0 akph(ˣ8g5 G[Oo^_iy.dӁ=09R9)Kg]VH/|M*Tq4% ^o;/K`=1?-W%N]wvD[2&*r_dn7Y7_<^츐[9!=]ot 7Xu8V  xإDaiKsTpP/!ېvG aE ]^k>ͬ=/j)Z['*)jT7WϏ隭dUtT5t af;|Y+kC>)&hڙh\b.V_lw}},}AD}.[wLdQ+0(+JmNP/![\I2׽]eԔ85`ZOaLA|X/٧ p0+T`qCǚBA:g"J WxվGV&7~R* nwƏPWDbp]5SNAtUe՟ap7[^x9'_}F7Gd't [ZJQYjx>·5Y^5iVwjw=.yR%Wgmm6ib8g&ؾ.=_dy|%Z0/j=K$ԑUuֈ^ BZ|wqq"P2!ݛo]CsW18U&~5_/r'|VAPA) QWQ`D˦X hm!@ KFd~5SX~yx$g3qVfL4d9m&@@k^ *zOp}Y6 -oa <3cOpDlZ]|ӋIGrf_='g3N~ K ]>-"Tθ$#ZfkzMn_vʼ][]XgY"h戏@iz(p 7;<~#`-zo)$zpk#'W )՚Ӭfo&"H@|b ^pbB߀P.!\%HQk[$z%Dҵ?s;?ԩ8_Sޜ3S{-*j±Eȣ3$lvr?"#fw|߹Q5}ɀ-RPq.d[%}D+3aF3w5 04qXgS:(B0KՎXc!E1ޕb,!2_8dg^Qz*:!IfyzuKeWiZJ3nc~fŶnaqK>(j&1kԲX^~g [2e G<>L<zP-:ȥ r" KGDHZjP0!w\dSSεEMoL*./*N-(}F;^(魭EM G IN5CX22TJ(b4ֱAyUa칼^rk^yc<3wt(UZB3eXIr4 ϙ`a.۞ac"??665}* ^4Αjum?Q|qU AK`'i~ߝjޙ/zuxq~68[ .NFtkXv>83볈{ [Lr4S(ʹ=E:,\xd;%3SЗ>WԌYa(sJ zdeǴHP/!y[Xb(}3炥uJ* XKPPڱkA+W)Q-if=/jN$2hG>txҫ + 3iWG;5fVrU3-*,ۘM0.)0,Ӎcb/bT/)!z9+(7"-c\aQ)Q$\%0ik; TC5*ET"ws]Yj;Qv( w7Du~(S_s1^K Ơ<v%-Nq~Qva3#iM;ƺqʿw@1ȍʔ%U=>2Έ빒*U*AyCmyؖAޡ^8y)4|y7=9qv3+G7 p*1A+rRPA!L/Y^Y-WV^0Dn7̚Ry:E[\>N> ֹ& 8Mfz 袡{5{dϠ)Hmd.Whs{_+QKſT\DL-V#^aEstvy'}Y}36 նP˟ K5SAyΤюdP[4Kk.%1j\05RZ(W/)xTs4Ah- Q,5 XA(1L#) #֑6cG)r}WcqwUu{g^j{Lo-`$,1 ;IZѾ' /tˬ㢧eTؽ_Wn4FU̺ta΁`:zb~3W=;=@7G>q >L|G0PB!Ll n.&vvfvޙ^_{5P']8׍89bCb r1ҘEh Kedu>@uuab2 <1q+02CZ "x9gҙ$g[R AG8W;OV$T"ƈ)G\TGG؞M$ ԫwu[ \&EiZKaFh/MxAy).J`t+EWb.`G>)gzWjD"eɮ2@9 GY dֹ<|8<'K^duu8t;_MFqV Ԅ윷#K_YQdyXP/D:Dh WnP-!{*Y"hn̾nQ*s-Kfy@ly\D+XSbX:& ԅ3 (),`n"$j^7[~UV߸|W{)eT OwGܚDʧwY%F wjtdx~~žÌlv;ZiG9Vv,Roz,U2dB*5}W7|uIuo}euϪp}38^X5c1x_}[9rTʓb_ kح& m{A8(+ûrE!{#3#$d@jq" A_:Z+p{%N*+P1_!onWQ$M K =]nԆIO^2N?>}CC@IM '/J[xE4Kvڭݛ8na|(vԊХ{FsppbGdRaqhwTY֯x V&"f`Xnrnvtv;Q zC8)=k@1Ց#UʆO1Ӟ=fmnC$z__7;qDu<3-Z*֓n3KeyCM>x2<,"C OP)'_P._3tʰ!чw8ȯ([۔B !.H,"NN'P.! ~WQ\Z CJ*Ы^P]l8?W3'2^0[ EήR %z6H _^% BHU)Gߒf༎guv8vEP3*)Qs-!\'p .^YUw`gב%Z gK0ř$]ԭ:7֐y f5ܐb2 זE]ZK˼Rq,6Q/tA <fY·*K$alDS4+(2oHҢ+'Tfab6Bqknd>+HѰ "a|#$h]yrF1Lk7.Exuo`\u5ܸz"={q ߕ#*_sjjVi]f4GN3B t`/(=3ήڬED"MyڴdJ3[p,iKuwrG>jńnIN;|=媪!|*YFY@` (hJDcX@$EWG+ A4h(ԧxĹKf.iL2`N'j4%ұќvP/_!TYݭrҡjT5}O;Jm+S)C7hÜ᎜C2MrF'[JBfGS$9*sId /8~RV NUT!sLPb1VG'-<,M&2Ȼjw@aoZX :Kg;8k-#Pe) Oz{Dܴg &k8O5n8Zڬ3Rd+]>풺"%wFdf.Lg?[ƶ`! uN7/ `R+PT7s#K6(IW[]^_֓Ѯn~|I^)3]VWV*ͨ!EYXP;Y vX9mȆ] ;:.k?XRx'Hܝ-~زejv2X3ymΝC(FZe]eʺ]k\~?M/1iXYr?yg)e;Xz#k3\y9—Zg0UN9athPBiY@gsk5?Vˍ4ta+zX. tiK â|ޝ;4Sф8އfY6xFpg.n +v;&W+,++MQsy]VeѬB*8jjtwM N2 M{j Yp%Ql7Ǝ˯FmaLXSRTW]*N/j1SKx@RYRҢrC*υXP0?!RYVDq=7w*IJ$ Z9>Tp9f+d? ְJ=J"$m*ڈjQԷ;&/H!‚j?> ' wvv]r&4c=kExC֬nb)fmJy7>Fi-4qx\{|xVٞl.zIF~\vVX/:w*Rv,!9# _J$)RMUY$J~j^}P =JzMͳ A*וgXmOصLLVJ؃Չ#,8ʈa$ J,g5)rΝh5rx w'ڝp)ߛ %IP-!+Q)9C56IWlfx]yv/.05SlѬog FD,y ̱O-?*&΂6@.ңF K)QDF`*pI'TLrohڡ:lwQF/,B 4Ł,c/s^WS/(ߝZzÊ uMf7$8дc<-]1aaxꬭꖰ*7K-LgK^7qܪSc.?bh/_۸"}QյAT&-ly[8ƯG7~\΁L[L'o 6[6?%JnBX?,0 j#/fWx/QɤQ>3bJj5tEUq璗LC^t'yr,ݚ#0#v_t@P=!L6՞&hH쵦Mȕߙۮqn2`zY碎緃o(hOћz*Ȣ C$Z߱|սb$_h b< ,Bʷv I#nJ(qFfkI1k^5Y-p5Gϴ+~Vk{7:/hPv^YAMU>l" Gp}/’g<{0\vǿ½5WG}dwHw*mlzcfqHq{;X?El3'T+SB*=JΕsI{6~^h?^Q\lk{pN誰 +t@n ~^R7{+256ޕt3_TBj|>A˄B3bP&!{?Y1TADBt"MzoqFqY,3zJ=Oˠz徳 ծ%VA(ku eQh:ڦm𙳉f1gkΠ"YF; Ǧ* $~r2:3巫npPB = F"73gL]D yZ+P:.85ڦI @kN#|<0|s}EՋU捣sqSmETR)<W:DK&#P*!;WJh L!%LqSݤɭH/L/ [jIrFlJʱ4$o:2&]4}K|"%U2kry7NWv c6/~ ܧL&bUGٝAO)--.^xTE4&D2V;I5㪑'3X$dcR'V̥ X QV{ԛcbhzs+idb܎BPz e >nWW ;1w6G@ ><ҥM2}@pP+!}>UљV BЊ*V*I1uW{zp-!#p!`̔a9KZn9a&&Qo`-#qU UIں"97V1PSVŭYZcW7JKHRSǧd&[T 9ޭcKzi |/f>0zk b&/B"щ|JޮW9vTb&{ծ^]쀷 "]!I`0 lZoUѵ6ᾶ8 Ȗ޶-R*+ARoI]n R %%2;:k)wEieVA4*0HuЀ3P4I1$M $g%9 .!J'4Wy6uxpؙOʼpVBl3w3ʼ;Wԯ~ǔt\#GLsԱYEy6k8PA!Lmԡ9ln^&U{J޽nsT访)pnRc_m#$Ԙ,TW1͙]͜MNlb3fT<Ԃ i+:Q3A3) 3F&d RNAG{Cr2p"$ q[W= 8NYI*WwU"=o~vHL -)F2sqJM9LĎr"s"ۍi5? {BDA SϮ.BN\5 "װ0Kz&TEއ34- c=j!CA65/_D]O'ᇒ%WZ_tyTc>'>W{V!MIPuYKjr]#W/ ;k( {R d 1hL%w=o2ԶjFzT5^`kRt[vTe4J6VN:7͘ $Xh.z5y4ˆ3K=u(c0(:|??4@*i1 ƹ "jb)fvizRWʉ*- D!tjΕe\#.EnΫibÅqsTm2R0Һ(8y<~+×7gC]?HL\P/?! _hTʘh) Beѵ5z=jJY+KU{Y&uzu+\bHa+gU H0KcT0x4P3\Dб ,3?B!Л$ޮL*d{ZU^so l Sjdjy+? э陹.^|htlJ` 2HA|.03z8o^<@p lqb IVu#YVSNx;ڌ^Ԇ2ElbrpRP*!{PRъ>͢beR2ٿjma5-a bRK 3<nef/ nBỘ;.[JcǏDu-sи6[6퍇Ԟn̫co;[Z5tl=׳\ZDh2u3R#ˡ2xLL]n2QR=Z[MyR8m!6Bhp(ᙘNdo`4`}-P,tu+*z(lG3.;R/!^hf+v|} 9G\KRpoJq%̛O0i7F* ?vi@KP,!{hQQ:#ˡhDz'5zV=7lWݹ^2σn"ּ\.ke ؕvk^ 6Z6Uޛn#aI]FZ|"U\,_C~ןw zDfo7v=E|>odDN6zBPB W}T),{Rn٪՟?;Y257*E] &jy-ͷ'zVwWܳe޷%Xx?kG  1[Ǽs]}:v]SP.! Qوf"ϣwj$ĺȬKi@8jԀf|0i;ΦBCZ* J<(3wFY?srj$Ʈ H@2d9dzJJ3u=7C5@R07;Ʒ#kjD9p.oiuÆ}b'>)ާ@ 8HCE7n&8I.2+/R7xcTy:ٿwW@Ռ'>]+ @P+!P$F Bx_ΈVS.(Ӌd>vL7E{xЧ (ФUbug0AzĘDg`?;rٽ&o~O1 *.Hxu@2lttZ􁽶pAwv='zKDo[T Pz.PTo~./E.]HQ[ 7puO* IwM7<>$ -%G:rɌQa vUsp޴qV+ ͮh\/hZ=n8 i雞Dthar K@8P/! OYh BИ-R*B(ҪQ뮷TpM;X3SGWb(but+NWr<-kH8o Kam&ŀDW:eqndEݗ˝\>77Ƨ +!ntc۳i`!oh'XL 1B"ЈU5 J4zk0"pVȠf$xC%4Y]\\n E5rU4#NvB. j-mI'R^nCX>N ?Ԗ+ct |]'ܨKcHiP-?!+fOYd D$oUJUJG>Cا8'g>=8UaF_`Ӫч6ДVÏ 94~2aqc[ s  ( }– ǟ3a9@:'Nyٺ~oXkuvQƚgeZ%T""/?t`T-\xdiODZ!^>7UJUJMkP+U #3`xȸd).4Lr]T!_m߽Wy3Ôqԉh.bofߏ/ ,bqHpP<!LXQNVc5ۛ19^n^kT#?71nFjs8"i +SDmBs0 bdm6 i `8 ӧk&9 nj0SZ2 M z͚ #1eZ2D_ぱ1eIACM䞇ǢSSzVwjk5pXCO*vEWY 7&%ɶ tOY>1Rհ4kD(7dIvǶ[בS йn[\xz{G=jYkX#ΫJsGޖRt 5NxRNޥzkyyKNd pSLY+"lӑa^0+OV>QP2!LQ*i1vɳ]u5sh*ƽ4sxG~4uΟb[RBOS!+!2sk\6YzQE]Fc&,[;wYhϨ2k<ҵ0LR1qg8vfYD XsTbǢ@*{rI;EjBXRzk9;,+Itȩ-}7;|]fQ66kmn7z yxezJ,e*{}j'h(RevΦ?|{7yJ+}M.h3% r! ")ߛf- :Pt+WP?qp}?.˓SPUpP(!{T#k3[ͼXy/#^5pr@-N*>vskRL`L:]"['y1HMX%zؤ*CLݷؐ`g]tRsϗ!|s DgGW~0(_iC~G #N p=p[EU&㝨TU=Ls'l;JGaB xA~ܲ0D-zQ)^mU's݃ o셴9ZG /'{1 'ayL«Q:h@h!-P2!z{o\Da{wλmJey׷TK9I2=ǵ,FPmBPHч@ƏP4Mt2ӹ<)#c%lzGsqJl?uKSXlk34byodNvI- "W(9*"v ɘPU+eڣpL9X+(=5Oo0 +5 AhXh1&I ׍Ss%[58{%(]IardsU@u-T>Vmvzg3'뗁 17,LZYg{naAzw)Aږ<0f{+x~o Ҹ^)/Ak|7' ?8~ P2_!KwYĬ"a!=P2?!YpR+Y-2QWYOPxgWS\߼a#T Js"KA%أEZm$¶&R֣2ho^s wjBwm1w* Qر΍Nu|{A}w7\t^\>kt˳b7Bz.PO=ڣ=4l9W؋hEBhsԯeu52QWYOPxޕff,hKH54Z쐋>X:Jũ$DXmuo!wCEـ پ,=˗OiR|{@muȈ oKc4P1!07RoK]2I뾕^E¼ŢAeI 80~* %TQa "-,ދBua57iw:{ g [}9]ubqe|e#)^Ԍ+= ǧf جU19@&p77_C'xZ4ՒpфEd"BP >W^W^I2"]wүXK7("5ǹz0`ToF}7A^ޑ&JUJ5>\C~mH=[)(hwkZ%>5/|߲DekVw")nHq, J)w ara[P2!Yܴ 1 ~^nvSS$1UkO ) HJN>V^{}AMNwUrE6lR`b<d__/ 6$,~{7"),6,$UKֺ *|i΁H ~[sKWg_IdE>4s̼n+9o˾AeR_!j4 sq,̸*ZZӛS$1U -QމZ^zL<+$;r1dPP pk_om;E qfh:`G\WrдVnOON;i2]/ncx5RzFP3!;YFmWcS WxBdW{NRPT.X=yݘЀm!2`p_y4` v e1z \a[?eD؋`FQO:@kb_f.D#ӥ掋)icLFOW I4\Q⦖3F ϛY϶IXx\uN50DϵY:_ޞgr-*\6Ϗvϼw@b|nZ;P(QxnG+A|%xDot_?-6}۰?”BP4Iqx<4[DEqPmVmH2#TP2?!{f" HmeJV*ꮖ|Yx0Y\ DC}aCY_>wPtP*Q0Q4{$¿H;6X[Fۓ|HZb877^0k s9\yC&Cy^}%FnG&WydIb uq=np 44á[:{-<.GrLr )+QlwEm}gS1Cmb c Zku臂%ĭXqFOK ~іJ, BjFT^P.!XptIΤ[.QH!Iyv_|ē^'g1,[Z.@vQMҲWɠn])V_FsRJȴތ%o^^CpwNn6@j**2zN3bt^4GE>Ne_H=piԹA]+; k;#P.h3Av˕H!Iyv_|S?|u/(BZ;E2%8g(*3OTԡNQZ29(ze@NVP/! Y49Ʀ}x{I) w}})Le[͜uةo%i~J ߈sϨvo;mNjռ Lms8V4H⭞2m40&),0vЩ1+nm+,D#=1wS[6X}_r۱[% \kGT )P ,YA;jVVz犗d|U]qZn1I~f¿FU:@)/wLWB sM5\6!.$+jw[m٥A+Tx]{_Hˌ}_6mAs"e.^l5BP/!+wQ lU!DFn\oQ]%EZ qOd&. !iLqPX"v:Cvv B4!de!BtT=\%*)w pH~ꔊ2ɋs! $jkt72'}p?}9H<_֯%V189Hd/Ey%S3λT2!"_#͒A"ƽ|-I„WcmXil}tlF2)soyNuΐ}I`8 , xrXE:j7UUS$cDaK.|e/},H~5U tAVgNZ$!s\w} ]Ƌ"NY9z0P8!Ll?Q+qf1vz5O2<]*SWHt[w; `këDax+ʚ&FnBLJo!`0$wC$(&$ eGX|bNkZ&tKɹlWrk W.'[CsI̫mm7p(~x$4}l|{}]TNWRE-]HcdP%(hI@sC8u\ݮh|Yg-Ʈ2TN=LM0V`eRĹ-z V ==ѼfgPܪ!Owm[8Gm䵓o>)Di&Q#%>7%|˪E [XkG*+&ɳプ%"*|9D nߣŬ)hTpP(!{QX,eJBk.qYZfR&^k5{:aYX}2iڞiQI)]}cYDmQ].%eTkf1[wt.3T̚1P/p* T"j!wo%NMf1Q}bZƚ^TJ`Nr շİ'.dž!۾1>KD.4˻VVT ^_`[W{>23rk"ݤJkACkrnd韓ŗ Uo ~NTK|6g')I20F SBIZi㷂t;1 P; 'ɒIcOdv2O$&onY4%1b]1vPp~# -Z?-uPYkvq+{ξ? }&֒#%Cwu V+xy난'njD--O6S%\M.h e ;~ga@K8gINty#[U kAP-! }YDAw%IiUjR\Jq+||[P K=y!B$< \Gxa/JZQ bbA# `hǷbY5j{nqs<|kʭuTp 5.2Kӻo|rO!Z/tIu)ܖZ/.<  RLI|QYCǷ|TߚTx@h=xW]}PZ P#`TH=[8~le} t 3F[}#-J$4hoYz/(/ku1E3mH0D2VႳ]e-P._!+Lr)ex\z.U5y q9OI[v+6LAZ9-`,N^6ꍪk$E[R W cB" %@t :@E-MOG.:Sq锓Xd|z.ng4u 8&+)u==ēg:m2.jvSYOK?cjAƲPkѳ49giO`|ņ=#. s+ g5,3Tpy!-!Dze0t {mbΩ6fqʤ$WHt|m5\LtJό kxSh>~*˨=g=*5`,$#Λcw!JJ] ÉG"]ׅ(]~3k*wlMqD`zf"Oe&C+P mGPW@=(׋K{ P(!{e$cT2+sKխ&A'鶚 5;>ߦHYМ^$QX?kLxk|ddI_cF(@@pP3_!YBQ! n}jnw];5ιq{UO&*eCa)ǟ=d}gU`͔oT{ݔV2'3rj <7c=^vup%v/\Jߣ5Mk聴!!oBhES4mHYɽEHqU.6SzmF±ZcfB0aT\7zPIŮ[\X<6ggt^%~ǡ|܋چo~wRb*KQpPWUނ_㏯F.Wa}jxn7uӻ\TD窧_`k`.ȥ]v΁L ^P E _NLoVmZv(P5! XnJC[_]f>Yqި!q_CSOnXGi pK[ ,Q -}7iWq?;cL(c.]7ټU.#hN 0;ܻ ^8eYp; s<~z^]3͇:;w8,iSC˾d}{=`u?a%v_UX&>_; RBi0 DGWo\ ZjtTHd ^ve҇RW%MkS6 D7yYQ@%Yʋ#*w:S\ݵ^q%?e FR9$GS`צ3o0wyq%?N?~ Xz5իO{8jOfׂP/(kjEM^7]oݞHOۄNY}P%%uYtf!Ĥ;%kuZsu;Q?P\x yGe;+U)y^*30|$oRgb8BLx u|%vYRxͪ cd~ J, O fG7P0?! ݤ;۽Ku[ lҥSwq_{lS:3U)"s>9Ѫ={i)f!u9QU#B<\W eG xIqI\M|ɿ s.v&"*cqƢ<<(K6m.MK-d6$0 1><~ Fy>>lz0\=T|U3Yѧ&U vxe:[f(⛾`5YɥcΝZ.qlb} oF-V'pa>p /@ E~7=0 Y Xbf֙7Q =EP2_! 9Tv)I]e꫓㜼G{Uk;KTrgJ %yL?Ҫnϖ Eb?Tҝb̘FUrOg힇Fs3μm~Q;5> v#08OuGZ"vnܩ[@z|҇_.5<73Q&6IbΊ<@7߾o\]Vj8_9 Q}cWY Qx9<231~I02xhFDi* gzFz `7zN1yP,LM.xqH@6K%KP&P6"$FG: P1![dW)|nk >yUv\yxXosFJG&J,U·Xuxݞ="״EM!7*Sct688lQ\n;A\'2ɣ p7T t=kFuMo|]`5ӱ 5sXrb~ N} Z08P0 |<h @0TooL|p$@=$0}nj`XٮP0!3[e$n<"JxoRqO?VOT5UmRi -סbY:yVvOw? o~ã^?6Y}:1.w ̻7[p&ҀWyodoNuwb8ci?hN.phlmgܦks-#?(al ZSc>T*6#>@=uJR}Diu󺨕r^"[ԹS/8s8#>}ք7~Dcʚ^vB=}~eV^s;Жr3o !oaxڻD{nrL /{ ˣ>N`>|پd-P1!_]d&\ݮ.2J>_ V6FRn~ۡwwbjϏՋ\á K5)Q!.\#H1P mP"=@q0\;tZKq}JdrOؕ/UKdfKJ1t:ʒE8̾ H S3UK?4_xkEʴ%aZatky%jsykmsPe>:o6aЅU"06I3j{_%_ϥiQ^ߺftr 'zt`ӵm\, <+=+<xʡA&p9`fP/_!߿Z҃u\˅BUֳUu8 NUq^-:>As7 hH-%IuRȝrO8,e3xDL?A[S][b^Wد@s~W< wbj^{݆X u'ᡧz%蹴 ?&%,n9{hw39r{wexuRiǪmNѢٌ+=hxOm֞{sPu]iq5@8TsC/ |ŔoEWb@h=}]~?7u И}$)({7T=x-O?"F 0)= [|%cC-[$P.!+ߟةp!5yUKܵDJnoބGNd,"k<$[BP8{j0*[[@ ,Q¼E/)qZy睮5;6s$o_jMߥe"*E|P]HAx%iA()oNGNÚ\BzppiN=D ж8PI?!L Oh/H5)xJk{ko_|q*3θw#V@e͒i_챿 ErKMJ0FX^1=(lǹPn=/j.X|ʽh]xuMr9(aLXp\hŷBBe^c x5) 尉c4ARN%VzRNY>]?]1ya<5f$f5='Ss/0ڬmѷoyuV"2U.WcOkmV Tp zzpK'X((֕NnU:z:=}pw;nHе)IgBIugjuoϯq3cAǃ:-˓eDVE6Q82 ?ET nL[A7Ha&޲mnuρ_"PXn (5tas}= z`||jTv~!kJgz08wKпP@!Llw8&&'LF:SuuZĮ$oj=$!ϔFf ֵy:12m!LRKzx fXŁ޶Zw)C^b"祣ǴWDltub.ĔΩ&ƶ {h&FDH_{a861VJCcq&vMlå!40H.}.)$7X;HT.&9D*:Bjp1q?i8T8p߽ښ=_5c AjGS(|PfN0$Z7TJ2_#kR!quIO?خYwEV>%8: 蒵:MsKQ8'$()Ejw:qƙcx|xzMxnCkfJB+"$hS7v5"M3Ő>ꯪ*W$pP*!{qyXBC1hT^fEKMbvYֱor2ENVyfF 0 ga@%}"$}]g'cWC7.OE&*kˎ|D…%B)^]u_ _ X=ЫqtR(5־jSNsNqi](RFV 4"/Ji8[&j%JUsL{e|HEUPFKU>қ bȘdVޚtR4M{+m11 7=,sYu0MS5 nfZ6P/_!zjVQ]NB&г"U\{QI)Zn?#*g'|2ݯ3)65ig2\^E*xP  Y (@b:h9lSC*{˴k9J^2q"ʣDoz ~tJ; \,f.s^TK ÕFylwJ Siח=b![-5BDlD(B"Јt"ĦΓ"k#_`NޔYZ5* A2bb4 ($ VT4=cRsf:b/wK=Ę9 q9V]5Mix@۠2 &DeP-!{UY:B"Аt"=e\2-7u޲Ldq]_74wD?ǭ;\KNd2؍ZN%zB0L@ D+!O$o;Պα5bHΧwVQ+ ¬ACJZj 0$` n$C#5(R|LRE(7&2,fvH-I3gaY[@wWE К"te)i P.?! wnVQ̴: %s*eJjRKҴܫ tPTᰵaf0OVB.wYEjø" @+);P?Eorc(?_4ߊx|uY_X#7377N; HPzTu)t $CY<Ӛ-eӎ%S]˺# MGFDJ !LGgyPJ/+Jޕ$ ,NBb 2{`$p5-RI*QSST-SY.D GJ :W%[xh.Lݔw_8ԈP8 +ۡxQ*U%^EuΞ=ofx^H0#|kF(~ރtkZNwS@;15I,̔F(R $-DJ "0)YL%02aBsl5[bWG9|Z9`eBs챵Aٖþlf]Y^_Q4:M: ԅԍzk:gy^<=_grwc0m pPd,L `F.SҟąD*_4OΚU΍.d-]ʏs2[YNШX*@ϫdD3@ָ z(Hdo2Z#O2(&olMa^2P? 7d % hCYfiO:̖r O]vT BhHZɡjԩO+qzߍ\k:O>kz>e?tO5R ͻ8zzocکq+cQl [n2tUF6&:@!) O瀔vP2 {vLJD1 Hz#+|TEUy*U^N|ϐvdp73**-YsN &n{pnҲ),<娠yI9f]c>ȼDQRIY$*n{& ||@'‰,(((= { }r;;oz+uҢĀ/=&8آĔF%xⵑI-&74㍸^K>_a鰴wc ĈQtqX). (%M@,}>5&3 *cyZ )G;ʕSU0g*o][s{bVx{d;]x׉.ʁ.ұ:/`A^Oe78=)8P+!oR[!j] D[\˕(^,CN%J𠱈cT!}ߔ{phDI3^ךbP 3rpSяbRZ6sXdB[p ĥ( a\EYZvEvT[E+ZR|){2˽^A[qx3RX= GjC AT7/:\D^,F]8*wUg8[@ id,O C3Y#LT@$A`nGϸ^H+ U&)?;'3 'IQ,',#Kk$%eIlP$gÚP-!+߿\Rҡt6̃D:~yֻU2k)a%=m8ft4_^qY OX@:=JއnzӸx̞!:ۥOo`r;6vBJ+mЅgqNEO&jg5` q΋wB{lhB alP*m۞[*~N5)DT$ "2LIΥ7YKމ)ik7ԟ("~adk0f3`yD0ژ>R3C [dD?k mywjf,q`^ߤX|@ !r~-*_ PB!LGPRfc͢v " n8jJbAc)Nmdg0 Z_*ݻ*]QO'A;0<,$[C @X sLX "> _fß!.^&/+J @ ͂ lat7p@cj}yqj[pY $YB$InQ*ꦲoG8?+i+'&2]0%ޜϵѽCM5edFě$1dP.! ihUBƭ^=_~rf⮉xk*@dt~>g nl0*;DL/Biak{Ѹ$:ޟd½'| JDK jtƹQ.y:-Ю8+JLFX0%`iQAJl\u8Ύ, 3>昖,)UĊlҿ XQ9`tl$fxU35a.k]oԔIpV}^Dܧ04hâwrm&$J.%TrLy"B/c!t>-q:P)bE#:,[zK *?~iR0'8WU ;Uu)C\ܯ*{Y6v"+6lusP._!_S,4a LU]s.jLMTix6莓PւnrE(5[ƶ[W #E ŕ&@V_r"ÁZԜfUo8+S+rYaZ YPsw#Jzi.֝޵)VN i.gbB/ n3TG̦6I_XʒN2 'Cn⫮zeԕRVUݴUVg|gУ&dFXNJ[OG#u&mD|[;nEvӍׯ*qxzcy6?sFX&@%8P+!+ TJ)]EzZԕ u9a˲m 4ꮩecC ٤(!^s6@JzԒVrLd)2 n~s(/PnJfP)Q6JمǸj6'0v|~Ϝc x465~}{YKZԕ u9Dڷ̇JI]HDnZRR6z i eqR=(\k(]~ E=t~hz򴷲G#e jaPB!Ll79+Mԡ9%6c-q>η }eK 7}p 2!fI^jDF<@6Rb$3zh`n?Z٪Jcjy[.,wX4RFq]XEQC{>8:5 MZBs+ L9Io"SinNEnQU$CYs[W޽dSvulҘM8 W.Y HJ3<cXOVbC'MMS[sqeH"n~- ub@KVDx^X0)meH#[AD.('ɑ}nNK Ra<; Uśq1lqw"9ËCEI9v>WI^ k{;$GXӅUH GH -jcpݵ#uuکx!L <5T^5ys@8P(!{oQ* a!3\kW7rnS'^kҍk@Ra%4,N)sUZ:j؏Y[!%Si4Kt}N몶'u`RukTkq /p=!i$ёnG_>C</:$9ZG 9 æqSJ5\\޲^JɻLpcO&GPgh@RBfԪ#= )}߿φED)pP*!& ADf|UT\F\&&LMK]lP#SXUT5KTPaƩam`1#'2h$Up"a:56UT y|iiHO #Ms^VO cp_mۺAO!&&Ɂ)ډ`+VPKhqܭЇCn;Y/U ޻z˪xK˓]d )U^ o%*)jg.o oUSA3$^dUV|:pܮ6gD,C*48P0!mYUhA^\s%q**׋2p"\ɐU)Jc-SBiEC~hV+D !#@ z)ҳQJ{*I` R5UMuX1 RIqd'Q@AZJ]h3J 4v5?G@bM4 9:OՋhvgF8cW4]!n޷z%T%Tuurg;,?Cc]͈c,@ FiV"-+qz*Kɪ+-u\gz{ɫ*%U" }h2dWڽyEO7SFU4/ 2u4%>}I}K/ +eImTd:I@.."/ѕu'44ZzrA\)S`3 }b ]} #Zm/P0?! Y!,S֞[TnV"%6m.kz 튣@hsKsd`'\?w|l|͕obV$j^jo ws!;Cf5 Ed@F]ߌUtJkF@$1ZWHK),;Q曠0rrrs}(IC4,RP'9 /KƙRGMڥO;EU{ͭ?@9`#,e0B0PNI1ezpң9?(sY?ɂjr^堽Θw|D@)j/wPE[dl:L,Yv4T"\;QS\}~JGy;98+Sm?` `+E'"y#&3E+f[^~>OV^8Z)nrV W_3a"a)/m}G%f&h*q}B=N:FlK% D ӴSZ7QP1!ZHf (+:5ʮ*U :ֲbUOܥYvi5(KI:ޒSC ZDq$RMP`3jwu-YfBIh Cjmvxo$Y*w,S6ƆMe1=MJ8߸rղ!/zV[4Hr560z4S [)lQь>@xe|CK5 KJOO|NдxPO!Lμq `+5ݛWzyw:>/u{Ƹ^wǑ@Z$'e`B V źA8s+`#E$RVV 9ꮖ{˱qja:+cFV3=~q1h#Qc+4|$.z62@}PooJ,Y &5s;x*[(}e|1n ~6G х8/4I -sbR3ZUNOx?;/p&@UC 6eRrDcKpƋUx+eF;G'&ԕ0s[\'ٔKt\&.5$W^ G+gf@zXOj.saxqVJS~P*!{(V*)xq ۊ.i7_$$xG,53)רTA R1`+c3|zf%hs\X"y[uS)J!+'{, zaՂ#8PTdŇ{C9Ms9̌]]Ue5c.$],9ч=_oLUf7U$*.J|pJ5KVUf4[ yw)Z ۊ.i7_;Nrz^t]AU@c7 `HP6!__[aRIΝj53]d&j+Z@t m1˳$[8"CŒP04`)㱌ĨM3$V~>ě2 )ȸ V!EpV0.3t,qU8eqp\h-m ;^99VߧiZ%2E%a85ۯXr{ xTneÉCD.|C%Vĝ2ngqK$z5}O`\x~*s1gW޹ǟ:k%Y3U\R L8XXJbEa߳8*v;rvwnИ9vl5d4vuw|iBО0(Z:w?1:Jx[Q82xP4!ڡUfN9]T׋˪J9 v@|$ .'dHVoC(d(&]0Nxa aR/5|/C\ֺF:{U3FWעʋ˾F} ݭcՋ5Gow@uܓ=9 F`̅Ȝ{j~*TN*7!ISs]H vIF6I}{'ʮMU•?({}?=y.3p) .0SUt^OJs*%ΞIWv%r5sx{׎/;N}?ş qKWj6 MMCP9 #%R! +2Up,u :繤J4')0D9sA@q} AQ{TeS_}ƱV0es _1 q+GK*Cjo}7PQ6 g*P7 ;}*>Op6`$VOEXRH+G .M6\:::2꥛h6)ףme϶z"jf) *V >¥dUq\\2{$2D뾭$83d3! T4ttWQ1/$n")|п U@P-ѨDuU5_%':^{/!6,c b;J 8繅ܯewVNۃuѻFew(u[0}U4Քut]DtMGö~PI_ +4KPe"Ƿqޫ$oSzɪo7 Keۍ?zP;Q'_l _$r$4a6{QPXQn;l]2PPg%ˎ HɄɆ gvv pnR;%;[f;,tt(7MJ4Iy3}ٯYsKoWtܢ(S)JlHE fk(W{mܗs][y<}MgnI|O~z 8ԚSgiY?IV_\nT#va1c =mI7wg}GWF@UG8;l[Ԓ}'ǂ,L`~G} %\YY> intqfLjϩܼ<TSٿ p^o4UQ+fc!*eӲ74ީp&W$AzU%aMkMce & vި,X 8grHwGwøP< L66[6alh{1S-uk=e_LHXy؊\gtM)dC*]⯢D$B{$T!O1`;Mi(n!ִ* SYL؁R+O3' !2P(` ~4*=*`;V Ի5&]E~-Dft`H6_ ȩ,ɭo`R )/V<}+.#8VRy>" =[?7?vC[;l iK½lMe\Ȯ7%5Uy-RInWP7 {FC}}\m3:|KH ]瀺?Tk2=0tHJM#}? λ@#]zJ) 𪹟o&v&ܯ'T,6 toMTJL/xYs%bc` z0s @+UpIB"ЈMΦ)voUy Q: @Z%Mۊ~Z R=}u^ 홻{&R0,^}<4])c_#Kgb'(HimmХtP.!VV܍ Bo2iH]3ϯ?cg×"J䏵-P~V;N 3+~pbHJ3,펿LHW.KW-9,Ѵ椞'WЏb6z13˅8B;Mâe҃ww])rwg]] Rt"B!е̹T%jUR-(υ[鷷Q/ f4h mgT5\iz|_DkF(sBRG&mwSHYL/ g Y*8P.! śTZab܉ FJ%yܟDpc0(# jP0!'~Sڡ"8NqR/rnZezo^ Q<(a%RR|B.Zѥ2o=NMq@ˎ`iRu=}f;\}N~tE"m/U>cOGp/$, +EŇ.ګ -Oc0BΚnv۞LGJ82-۹;)b-QvP΁o EN |x<~:QU:Mou;T5u7-2qU't e#BG9l.# V%+K|A\>D6WX*PNV֖.nsDL˵ń[0\)P/_!S[!h#) t+UWVP_k?hG;W9 q 4Q4~ )yivaVؽiHjI'DuYfSd(V="L}* nU0-y(5.? +uNDf7x)pjYF67ʟ,3;5ZlMR 1Vbt^3NXljS x+ x^<{UJO>+_`ֶF{8+86*A -- a+*S O(r*xXM ZޟbԐh1@3A1H?D3֠pבxWJaHZP0! R[!m!{yW\sj$]Uﯮ ?ŚԨIY阣XE@I 2T oXqȥJI ӃdV\32MDhZB4DXu0J3[co>f[I?')CV } <>갖 pYKK67]W\sj$7]Uﯮ 0qMƺwdf̀]NjAx#C_Nu~}ׯv*Uw X(18 SmOv%|=!NcA4WrA/CI>O#L mx2P0!?Q!h&Kީ~ޒI7ruCx $6`G{mm)MOF"Hqo3꒗)tw 'SJj7tI BO1QwcXOSĂ@D9Ϣ)^-\cX%6{n Mh gw܁cZpCq Mn [D"1,41⮅䗹WsEij"ɢDY PigSՠ^G鹻Ȟl5xF2 >{hBls+r'} 7%oՒfnBe ,$5kjh8P,!Q$) JXT5Z}xu^ٱ.AF+[~Ͼo  ZKwmtRl5 : h {jֲj7LTfVИ(Ğ"@Β8L]u_2hF]z#tY2^ 4\[ki86xWKFQ϶tydBҖ3U V_^W Ӥy8>n|ߍ2^S]7d cz  :; `}]O:Zpo#V%3blP0!Y̔9B!{5⮲RV h&lNh 4yJQs=[K_,l\:h.(qn+۾Ï0UEKsIt,`epK/,f'W Z Z kR% I6=ҿ7.neU$[i%`fDwbyHV?ˇi!]0|)@yCPY9O?(5~.pzz{/buCc>Im&`( >$ (K s%R؂z9@Nb ~P1?!'a[ EB9q yoie#N88h%U9Hkn m=hLL9n$%^?_^+)ںHlӰ9[S_I܉ toޗ&\ aUVlѽ͢ 䈗w:X4-# .@-Es{ZEE!N9◻7u/:c=e|C]r",ude eȺW&K,8y)jt) wF;*%~-"pl?}Uq@X\R54z.6ZBg`?J"q_[ˈb[a  j[ VpͭP.!~YaL.VR^JN2^i[Da/#b_ˇ닧9n*k-G#mCizck=UȔ `P:@d"7 N]bSsQhw:}d OS t8ci^۴4$itJ4+m|;za2}3kѯ3ŷ/orjUY8&P(,ׯ= Iy*8ʹyl;Cgr%B1c"F.o7N:b?Vo^ʬ0!vl@ A ".Pœ|.4ʌ+i@6X( ,h%b)}!NP,!+~YوBY#oחjTZT讱iD5젱vҖ@1hq9Un/z|B@̊Eaʂz{!aq*xB4X @"^H @$3BIZ*KiR\ޙIut ا-uI'8 mbȌ&!w盄tY5y_iKuo:-> r/KnWV*o7%"Qp\)i-+mDrtoc.4Lpd”x}L0 *46P"8i ŘnvP9_!L`Xe)6jrߝZNuϷzԹ~5C1xrU_׫cYP''Ħ [-=A )Qn^vtM֛='W@ֵ<9wa1HXcY TX$Kj#U`ȏ$Ɲu`#-T57!qOъdzlp?fdr\+ }r'TU]QxgYujIyT0 U\?wzck_j ]{Wg?\{/^h^әFt&w.M(.B[-Oߞ7ZNىϷzԹ~+X@@qT %J4r.[0̙vMQ[(@z`4@ze:rlg5`P*?!{= B5Uk5ur]^*Zy-B%g( Fb9\D❷C!`:7(s w?fA^۸rqګDrMGڳ;IPX'sYgQV_ɘpCe.gY~-G/EnU+rМlITqJ;)CaJ3=LAT~^ ZTdcV=0 c? w ,_iUw7%u{Uk?":R(S0P3! [!l dx=߶3Q&-Q3VD ;aeh簳HjM r3 3Ӕ $#i j $`58s A<7c#w\(y˦q=g,#u άKՖ__XXuY!Z T@3:Ba$ٙy%KQ1~kSop:e^ɪ \~/q, 8lX\z+O (Hn{4Ӎ4V8;9\lȨI氽=~&LM"_h>XBf-FJWx/_ ogcv>8kN`Z3.ɀL4WZ+/nAheRP3!ZAD{s|מw\xnR^\kZ%W n^,fat[RpT7Wc&LZ,{ʭ\+PhtAI0央\0ِ"0T|\(R2Ȏ.;ʉk!h^nkoTKW/U{c N6ޡF`K .iU( qB,`)Dev#Q\҅G'Yt5kW%l.M~u9k;&/ eƿ ,y!ߟ9`imU\d֦'y0/[st7*R }:F$LYYV`>v}i/CP6!Xe:B{ϼZ*U&\ȐUԓ_&Xhpڀr 8fm`EP5T%;z/FJ+!QlA"0"(v\=->dکz8޳^\oVsyZp sϩkrc-(:tLmo`7?JC2_%+s5ncjʕ i߀P5!_Z`zc!9L*u[[\+t;&ީQgU;EH=LtǾp%=n/q]#f7(  4P]4(& &M6#XBA 18soXX':*FX{vRR'rRjw2_{PI XT:[A<-teŽ^J=`_gNTjHvjNԗP6![d5D7>=GfT\wW8P[?{~ sA%c*K z>{J1}S=ֲ^}8"喆[zkR'E[&}/k.Sٻ:Kq%@Y)3v#ZEV%Nj.iYXEp ]:]F^Dja>-7]m=mU@? r; ,jNSZWs̺㙚ާ}T\a*s$y@FV̨8GZ~ؿ)qLjӔϽsg=*ӽ{Ltggo쿶'ZmԪ酱&KoaJ>~W ZMHP1!O~[eJr9LύeEjIKUuϦ_~Ȭ}lK#U'a،.ײ sK@~t/>W9|֔]\ݑ~rκ"r]Sat3C9p@V ]h, CY<N\䆀~8,)ʘf%1p;*ɸJd?=;XDa u hB&wIS_RQl_ NJ疽 =O&Ł,FFf.ּtN ^ L/8fX}~'eׄP1?!?[`{)=QfU^FSWA7O^N"1 xO 0;vlKe#Ddf8/9{OC}BGpG~13²W]cŭQ#Y z@f2T_L#6ԏIvpii 4|qaa=w-`Pu>}S"8J$*v8ܮo( )#:ӕVHhJCKvWMqi/.̫(^/8F/548z.m v7sljr_Sc 8ZK-O9YaʞпT[qGN |H[BZz1a])`gƑ\uF P0!/[&c!NuD˩Rju3ROe]+ 'V.c_,=6#?2e P27Q" bk:U.%jete.ș?SzCE)}5ycO /[74cyaM;4vNN[SAR]_Ng7Lsw扰~uJˋ<9xݮboqdo2X@ ^6guΏu~uXT˒y>>䘩 (8jUQ(MI(ȭ~W*oDp2"g24 LU1 api)82me65[ޅP-![eSH<.ZѪK8_oWP˙|DN` =dtw)q*^&1|[/ 6z^_/-]{܉ٍ\ek.L]Ktc3 ! %"ރ㻴{87(O򽑤ygĕzshYG{w% g(שg;kZc/Ƥ*]LѪK8?\2:\P$aԟ χ]ZEG7IϏDcA9laxnUYQiB M1yx#"\4 >z4&dW8P2!?[etx| ܹWkIW~aDѓ@C:vdE\j?Lq/&ʣυ,P<(oEbWu=3#7> r^';f̆yT>!LJܳDg)kI>f):hRDgtmR/* u%kVa:@ CDrj:BJ(6v-6k3mEjuO]{~~~>~; ܹWkIW~^6^!b"Pcur6K PLK+e-봹5S8"cy1Nq5-\.?nCA!S*24dt" v$ CdXY){BC'XX?'+񃋕.P1!{>] %<|z+/.qRcy#`BdpxcA,dzy}v|j8!kL {)ur"_?T99`r yAA1J0|2TiHLb` Lkr^@,Y.`S;9QX܈C"3a4 ѧn\qO05&&?T*#uWѪƷmeԺ㞥I{/ ΃םoiPgz=' Ͻs׋_N szt{+o-C8DD/h4~4Ԇ_^Wf&NFr'—2Vv ];^zˊpP1!vk\lE|g?^h$$e!͏кM^"#G{yHm1ʑitP r(9}Y9\W1(5~tZ@vÜ@#T\e2ttJ$jRÇjo5O ҳblV ~i,{r;wbZOL?ZZ5O:Vyq`L^ek.KKF^ /I ^HBv:^gں>WȮg=5O:vʌM?&+B[1(@Z' iE l\P.!+?[!*#bJ/Ĩ%[TA HvRZ*1<%&zN9=7eG#F 71_.ej+4ƝNY~nMk<>mwEؗ3,M%~4=Fg%gWuMv4сxၛ S\9Bq7|]f2d‰,~|T۠Bs_Ϡ2EkA:mԴn%D*ڥ޶ZDvHhȋFYl#zHCC :3$nh*K_s h QXnݜmZnBa'')q8 PG!L= Yf|0^{m'^iZ+~o]/2}/ry񚢛EiL0{_!TSkaĺg[knP9v'ܭhʤk ٌ]MUkmXDeOz9 |zr =(Z]9ߒ|%+xL>Zyo$VEDV ZKm͏j ӎ$r@F> Wr692LC;P}rٮ8~^{@wHk1T `&..m[m$KW _N?JlPےPr]g%1Y%Y< _z0N! @P)pTLiߏY"渇-推&Nqcsy>Lpd 3FaMrE)7:KZ'Oǂ* 0?q&ya_9s3Q8?_"ۗc6|C4~$ob3LGs5ELiwG#{xwVF.P+?!{gnXd]B#АHE瀞VH"WV___.$((0;sRh1ݟ[ޣ*s#pZXxt7"Rti>S1e$ rQH1&oΧ-ol mcb+c"9rU^qY U]Z+`HTS-)} {Eoä GYRP[x;ڀȊ/FojѨ9hO:\E{ұki@o*mNNAP+_!uZAPA'Gך˩R@tȇ& X"d8N %@= EbTŷ{;|10dݯH?Q?*jj&@|2 ;$Ƣ"}aU}tO)Ҩvox[ ol=K_ {l?/=4MC"CK쩬˺$2Ry/z<7T"vhr #Iv+A 1LQ#[O+]IT%2?'ײԚÕUBC pP+_!XQMCI[w3V^EԤ%G5 HM'bav|tS6 Hh p:nWf g>ts7MJYbs4t7+ݠjkР gd*+ Z,e|- NPpĀ8>!XȁWE.G1GB$АV RHJ{p?#LHZ[yo%iH l$tgᚮYTtXQ=3幺uP1ИȋDeIi\P.!YTQ|HUiRTl$28~2*䔍s]XH(׫w!.7ѯ1Ys_p<>?jK=Pw_D szR?p ' D^dEoOȒT*JV?`/uN\װ{#+du0m4#Q Ҿ,ymϰ/-mزVKgS=T(v)+,P,ŴNSiIX *1PZ9V6pP.!wQ7 hf$ I /Z˯o>1bcNCƅ膣JGp!-AAɍ-60K,Er#!*<)2³WgD.qβ8Lޕf%u0ijtnz#f*i[8[@ZmˡQ:R[2 -hxpbJE' !TOV3Ӭv2jz-2J\ke}_E_ʠ!2ӽy<)g?:gvI館nrs}ȗ~e{MZqdm 7,ـf}nv ksSz7Okӈk ZhP/!Y(e J&o޲+Uc,RLiW7]'/{MPhHfgԯ3X;vC!0V&?6 T1P5Z-zCsl7II jR;}}x㐹3Yr=otn".1A{+,H>\Ƥ}fǣ۠S0SZU;{|nZeZcJq:_SӳCp4)ʡLj\654S`cCBb=B9|fvQE{>v,G͵ˬŗpWS6(q@/t0㤀o` h$הP0! UE $ywIZ(LS[{z iS]: _zX\G..5hut '+ͭ@cC;,n. Dm~gt`.9԰Q}7J b@uP.!ҡr%IjZJR*JWZ?}rjײx<8?$Sak^b)nHcT^$Bb62fFiE^S^k{^LA?c&+f ^lVPL=ˁ|LgqG"~w=\c.=+Ari) ^0)N"N51k%֒K+_u &WdxyN,fl~[Zh|4nk=}9n3eP ԕ\'2ͳ}3NC. -P7l f&JlfIpP-!(T8?3q)7¥"IWqځtjs!ܲ R9p7>@aѿEڌBը_]ƇZFwyo{֟c,3 k"#@hƹw4@0޼$Eֺ.#|+^} p60s7]VcWC{QN8R _m&c-1D MxD|<xX3ҋ<9^ŏb1|/LTOc_eʗzkZD@ w矏TZ$J+Ɓ4U,'2=-+R0Bxt =>i.S?i?P5!P B0P&7g)5ZnxγUVRMJ_W\\=i:B ^ʎNhW9Veݎ5Ba,EmI*GD4yX+Vb("Ske &5ʴ܀s%F}=%/ni٘3[\afjdYcb` y10ttYv'^DcH\GgfxFG怶9)%nLCP0޶ұ ᅪ!Fa:ReZUnJf4T_Wo"dYc|Բ\[tj_;-ڰ}u H ^iٵIُH]s+>={/~- \7e)8pP2!30w5<գ^:%BUIJ_:TO8 "􄧧H)/am~6G'r깏q3cE5SC!9”R ъŠ6VR,blkٛ2i$8d7//v/Z@-hPu[{rNsYfjt qo8*Jj?Bty:ȭdдc*UlAJi)KU*ܗc5ov@TiҙF1xO@&+RP0!5Q"ND+ &w5j[u*e8J}sLx#ǂ/ZqũiYzo'+X^,)({\M4 CTO ez#?oˀP)!BtCa!9-I{ *d5n*q/viџkBzʤ[wRcs۫cq@H8m˧VcoV@ yx W( j"0Pywq0q01u_/.Yej!wpC >}?a$L Ouk|c\bC7ʻÐ_s֮eUK!ΪԞ:egĽ0O8Ԝ&˳``כ O"ؐeA[ 8Dh&|`Sm9P)!??Hv*Hsd7y/8? eAC؈35F-G†`IJM֋*m,t2gj,>!Ogc7Rq )ȼ~ZՆ3Hvc+`F(3- =2V SdP;7o܆ gbw~Rf jѪ+ڈ+VBUllV%WwO=`,&&)B@@$J( !ŏF 0xP7!ZV" 4?|ύJju̩"kFBvȔD/gPpB.Ɋxb 9LHM[!m, uAMzԝ 2k"HRlK'yN;j"úآPjM)z<@)4(P8tJ*UNse尹M+!M7l甐WZS  )Փ9ά_HhYsKLO~΢f < 9=$JzF#SRZʣc|sg]ʒ!*m琛ꎞP4Ǫx7=jAu+wq-;i+1]bآ +5P6$^zkgJ龩}Pl|>S<  )NPpP4!ۦj;^L^KeVf?]HNg(:oګc+K6Q,ѬEg[>퍢XŴ;X`G^*,r7XB[N ¹,Lܴe8]30W~YҲUz.e} ?eJ;kvokm nXqW 6x56]M3,RnגqUY?N4Yj~$ZDiꊨc䬹,.R3$iNLBa>L>:jN>ű .sMsP>w>o:&KVg[Y½wdĒ=P1!XLt[ܒUhJ2g 13WWl'rJ^,'8X)UBR,̬lqv׺I>bj1gfOcJbԡfB#ި`{hj*I)y5q 6XƔ.A[XXå [<%n@q֩ٶskbRުJ3K&p#5u<u9 f*#%5N+Peݎl-TSEUE'Xd%,%;*A{[Cm"-Y ŽDh.* &A짫9zLۉ%T@P~4]7P4!GV"Y*!u*V3~ rhJ0==á<?@1Q́pַ_Mb.) ɮt+Pe3'ťhBE ZSx,jEg[X<17oAV4vo&x(V(sBb:V.ȫW\`IXDH@VAD*r0>@in~7mtRxu#M{CPAaC'{G>3JCS3^qH lqF74eMvQ>Q ݰH Y۩xߝ1n͗[DML՞5@Wi8#L( CP/!WX̴bTUՊ.-V*m;Qsi=s$Г0+縷2Muכհh:DH1N/Aϝwh΍')5TrO駶\5sְgښY`= vQ)k6חDiB2N#֖QMD55"QwjPh(C'bL:F=Xƒ԰8=$W~dv5 Q INUdɘӿeO;X ݛ5;Z*8V~r[ٷ6h m:GMπCQ`k&ŊPL[R(0OjrP0?!wA}S&uJ^䑫 ;ކD=qRM+pe1z]I; $ &8&⻾x 6V#͎jB댄4ot;$ܓNmie v?ijD$-LՒǃɹ W,ERjwջ\nTΑ# ]wdq})Mf-e0l1Z" w9 W#EqP7 J'P/!?X,j^7ZUu/b2.? ZKQY:=POM(L^>N%GiЪ^;4"A2$5D H dSp:nx$n! ʛCnst n-b_N!񩭤mL0#mv<:1z1 ;<]q'ҟO⇁s<3g{.f٦v^oRR%FZ^y@Zo9^0, t {^Jq wokϕ zv9Z9CzO~ 3ܓJ3[Ocp@33-j [;CP/_!oZrA޿_J* sk.^vC>pGA\Wn2+ qdi]_c eSa5妏v 0>q}\ՁRL=3xbjO #<"4+D_(f83 tp 6Yb΀R3#Ev8P/?!Gو{]jnJjꤢk.\n8Q-ݍ S,Öʂ,|oƝ<ӑr]?`UXvF>IdVG|RX6ڵ|SڻugSGk #<6g(ڦEopS䈳75Ъ!^uVJV M ц :.n]e+UWU%Yrv Go,ְ/P0R|;󯮎4yvEMC\b:>f&-]LahñiNn7@NV_鑦gu%.Bm<5ऱ|_\P.!+ _SHCY2WLq.Vk_/hja!ͯEa6-X͙-PK&{;%אLJ :u z<]7Cby6UM ӠUlmVrhIn@k(xg^cL!-xNWkۧȴ%oaW /8!5IQ8ck\\d 2^UW+W͵yYgiݾ`/XWbUXtn)7t@t|~7J1+8{lFq1hze웾Ry&BUBJ{ *BNP|Y`DŽNUW.cub_̔uks: T5yeʇ!W/Ie@[= s'iE9hDPTW~}ƻ[9܌&|B 2%I/c[[Muv/]ΰC_NϽ4$3M{+yrga Cos}]d=qvP4!?Z$V AQ"4{ʧ̸Q*ו)Si7sŮF#3L֭#v=GMGg nD%>zD BlzTQ)wJ2BHkls}ͥoьqnw/X>W|Ƴc?k#|>nlyx甲8n7RDX+qrwEj <0wRxy]f;޻i7H:Lccؗ{k\ %Z򸺥?wp>_mmQDu( ,Y22PD}7n(<O mۏ`=LEsgiX.삖\1c}π1SM8P2!+W ҄+#jzu\7kժYYwj'4: ƞ&IC$Ps#b帥C z"Ny=2X*m[híxX\k?[ʠBN_tݢՅG?}buYK)󵪃Yk,BƢ_[ 5SYzdUT2c2N\R`ih)W2IEeZ@=\'?hN$9p%ChYPBs{γ2xڵW5 Fj W9o3SyWڐv^0."5{9Mrěf!yѭ}OV}u&LJ9~@H`6SP[_!L ,67+ZZޛ.{浪$>sguӯȸgpStU͚$ۮlJ=<~~:]wǼ*[y@@;_n%Q>1>5H4%\/ MO^2}f&?9W׳8n}nGNf VQkSB1#.rS(ʔ:-91V>-YN^&KC4Ba~ҨN7J7h{[o;34"[{sb` D'`/Wݶw7uޤJML]%#sLʽ8i3 ${::]S՗<%T(&qpܞL-lqʒwIZJؔm*]wU"+*|zʗF- KN ]f5GV3Ze(Iʜ%0[hR+Xw)N'qW[BR щV \V^s_)ά$5!}AJnl\)K_GV*mMm[Iw+Tp 9t\Oc ig@{v Fýoi%0ף@5ՠ4J wwz*oWRh<@2Ӈd5"VF =9R^J^M#N G1ފѨ ߪL鏢,fIA‚m<-dlYlŭo [d~LE tK@*;P2!ZP6*뺉RoTRLV2΁M4UlRov1g @+u;)j?;p~Jև`q$eX@7+/| p6bww3T,ҹnx>׃4dhUg/@6:G6)u_aQ2m_;gW^{|M֛Hr*m{Z4)u.!*T$nUis/_h-|IOw޿e5ו=F;)PCMI KB S; W뙄q+@襞ZF8ih춙a|RD%_Yènա}ރ:3-ʜnu/ͩu2Y*󄨫Ȃ%+XqZܿZ[}&vm(ncu={.{ D5zj.>^OLT, o - RyTaYJ`8J,3 ހ+jYHYP-!wSkU%D&[3n?]|͏ >.4JS`U4^GfJ7 }i ^]'ň@][R o偛{W9b/.N:`x/_ڹ?rf8ZFWwjdlZ9_~OE6 K*vzҥD T\TJL<8fX :ᅭGUAB O;f6Yq:se (N RRo{=_N1&Z2%`"HfP.!ڙn!S-.ĺA&]%Jto2!kO0oñ@ŜƂw(7ԍON50]D l4FWzBIAr~#eˬm^ϒgU֫wuiRk{ w=63++*\ `) + c@/>KLgO4sZsDv;90-.ĺA&]%JtoWR3593vnY\14YT) "Q0wFlU?sa]-D/)(k}˦b4[0a Vg`%`^38% IX`SGP.!tѢJ"V2JI)㊽?0֖>HAЀ[YNZ X5.K*DۊVuC +s'xstBFR4޳(`&CIUvTK+Y)s0Quqə̖jX*v\0caO~2܎s(%xkeyݷ&nz.z wMbne'Y tt@_3.ˆ|a t(x8Cy4Xϊ^8P@!LB;P5ۛ5ۛ5ۖךռg=q?qV{WjqcKbb;9bE,H o / x_B!X~gn'CDA T!A2('2&轅]4/=OF @xObC+z]lAP7!L6 ?A+Mb9&4dn'W6@;9i zs9<"5z= c<9bAj߸IQ \t6!ߨ;l'Z0X}dɘ袏:{JOWVuj-k2Dojj(hmJKh"k$48W: [,fmq%4q)p@}, ]b9HVWzյ/Dkb1, B;= 񄦅6G6@Uŋb(OV6bs ٟE$FFyk?pA&uGzV --v1Gl;8㊪J9i zs9< .Kx "BR+Y0@VU*'00IP'!{t#Ȣ7VYZRr%oύ}< y%EUQH kե/]7,_(U7SV5u4 oИ!G b\`h9tBݧ{Mdt^=nCFdzplg@"+Jv@L{^s|ЀMu$/wϷO/|TGn%XsJߟy 61G)(17&P1?!oڙ2dzUu nIZ&\GwsbXNJ] <@,EA<2LN@ *3ke_ucYH {8z&rσ..ʬ[Jcr"q_"\'c5ST?%3&ײƗ4poZSV{\4#t!zKbSϟt"(2^Ǭ̛Nxw.js94p NWՓˍgL:-Ҵ.aYSClk5Mo٩m@g T s0c @ ͧo])P+$2$uoP/!+6Z3 돟WUə' )6m'9㵞Z$cOs w[! nPuժnsguPUN9/j0ah! 8H5*&}.[TՉzu(S~wp_ |5[gަWMZĝxKy;}h1FX`k\^Η Ɇ@3?3pߺVV2Ntjw7uu3Jy3$oD" s)KDY,`6ӑ+ᝓ#:ƃv^>/55+twNo[\'-޴Iv?xg@/g1nfsi%Sc \S7aŨPQ_!L"6`Yd]{uRUYfήHs>5㿎?t8L紋cP pa+m]Īܮhގ]6`RH7emTN|C|%Tg䮆ڳ>6ksȩ.^4jAIWcft䑴Fך6u1?K~l"5|uW$֣|}^ ɎކcJ1)wܟ|ǀVlsp_[ß3Lݗ?j4f4EqE>u@+q>@ J؆x_z̨H Ilߵ U=y^{wι>ӽu qOng>BdHj.eoxc@wƵթ";a(*Jv>,oSGa΍\C%TZr\Zi!4X .8_eqd.uر1Hhf[}LtՎӼKt)=Bg@B^0ϡA|8i9HSeH`ٍ %ɱ0]UA+Dߔ^P[Hԉ:A)R9nE8P7_!LڿC՚Mw7>uz[w~@q#Iͳ w_lkqdJSGT?WQIN[KC%԰1jcDY}0:U\+@h_f˵I5x*L`FPRGՂ=.Z8f%XǟWEܨ @‡&45ym :}Gh:8˯TiY$¹}}pL%\+Ɉҏ3"mpFM!UGon|,'o:qA|=ny~sWU߶9pK4-aٜ [1@.165yշuV\ѿa "OB#=1&\P'!{QRT##yλ|:\bT#L6)#l?ݛn:NHdhL ^OQgpXg{5L h~TLǽcPn+,l YIy뾷ì*!*eI2?4b9/0pP,!: 5e_ww++"n^Y`Є"O!$K eOre}7w;V Bu[US=Dd 2H~"O1i7^VLtfB-R zg:DVtB_][tHVc շA8PD6% n]Hˍ@6ԬzJ:qp5glLkOV[O Xs@ڴ2#;f<_G;kܯld!{gatUv4kf-YT{F\=L m:o|P8?!Z匤1i?όwrq]UJd)W4,eaZҌRPg;9y\,g~o٨k &_~^7Lq_{uq5 EzBƢ$TpfP dd Sr,+7%K5`\a,YO_ӫrk+^JO/: ZYA8*Qլ.paZm3hh^ P'[PeL4@7>`(6N-+m5aUN *Q!KKpP5_!vFBNb!8}:zL-+%fq3Gn_c&;I PfΏ 7",}`lKZ f&N;*J\aMLd-cِGr2W8H[mImwz'r).K[f4(>PSD {x/!;ϟ ٿI“pҟ8 ҈Bbm#D5Oskk&DX C)g`zQE]dZЯΩEnCw~SGZՐV\6svڔ˻OVW|@b,-('1]l/eXK@xl^>:@ E tyK^1P2!Z"F3KsJ8Ujwr e]եj×I UdA&dRFT⛧ (_ :=nft~Ox쿠a@?A9~tݳCuop#1?K]qu @ !$&R^LRY:hCi"Q0"q?`._uoCWҺ}~jpZ iD8io5 pTFwhp̻J_ՍDEqcaN]TUu 2EWVA2x@>Pk bsT nm_ ny1?uK7:_@db =b \P3!ۥSH޵ǾjTȒTu*R{Oڡh>R^-D4!!/(YpjC3@vzY]mə_>[ֶ.:ӓy%q, ;nmʳ+N r MW \- 8Bmf^ FY*T =Qۊr:PR\6 {M[\U:grҼأJW!l!7q奄*"IRjTu˂?w/\E^uF gmu&&,O >Q1K/K g2r G9J$qT?3 HnGѻ PK?ܩ<(b& P1?![%j)35\Lsp2be7I.=2z˫縮(G+_,%K~tq?4 Q=O]vg c=~}=q[Ӝp 7\1vH\3w\+%Qc%lނăPhn*uIdF$*>@bdKBD*1a35\Lsp4`u| D v߇(贠篁N waǿ1ԯq}/ 7תҒH[9C|=䒆]>&D%Кb>qP2!o[%hJ■}I&i)]/.CY/_=]z%;cz.̣+lLqJYgpD0l޾p3d㣖ܘOAy+9&Q(%#/rU)'We$@V "Ox3tv4KquxOCCZL߬ !MӬ݃qZD^3m 5v hFkb6={V$t dM+Cqs@QJC،uxNpGĨ+InyH R }(D減N)T^(lbC혐Ć9\L`EJư˖x$P` r'Rű9tYpP-!%B)'njK8%_dWc=%l.itqN a _9^8חvi?)=*14KxVW&fndNBS{٤j*[@NVLp.<C n CQ_ O_~Hr_Kfiŋ?gб?isASK 'TĺJQmc_'"yёo9q{x5 "d~wNi3sv6(%Ҏ`Km$N/V%ʲĝP0!9~r ]2J*][_e@0S~S>$/2_Ff=+ڣwLW78ǭ֔&6e cecYJtiWT3H.sweN1;݉W\TF:[FBr'erlmRE&w-T'Iol%S|i- -ӬwǀgᶝWar[뙬+KjTwMn1$EE$O髪miZsguU\/,Y"!aq!a0SIDƏFCf'O<B|OǷ]p,P.!%UH\s.}Tnp]bFkZ~c9ykAߒuGQql 9^tct:W2>ˇPQŨk.??せy94Kݞqtl֎'o/b^_ U, 7v;GiHZpP1! ]DIů<~WJVvqY}))5>(ĠES,mא׺g"0 T%*L3 nR4b|2Xgk']TPLphA%I:[N.9[Gp)Ud8嶖`}j1{xW;H2LQn&Xԗ3℡_Txh7_~x-%/zU8u@p%ml{)[t$3%-L!䴙x1_KS[ 'F Mϩ^]iB]SU yk,H!K@2PQͻjRs rsPJ 62uF'ŝu`#?s7紊X޷&f5;d2j5.}Jq.5%"+L!oN#B.なOѼ%\koJ_!k}<'dnX8ĎfZ*% ᗰY56Wg JIl$\8g^+.-/C>0x ޑ2/zMP-!+%!ǎugEk.n\[je;<4xkҝ#gbhus uM{?t$O^ӆqѮNs~a3Y?B% 3K/ɫ\1~m2(h ]5P/BCdf7Vo8)-FNw8t]Xq`e,]lSǎugEk.n\[jewQ dc|"}Kr:S{3Vj(+N~"Ԇ秜kJc/Wɫwf\18,_^"F_5LY@R`_e'*ߌ϶&J՘zE %3]äd\xj 9XMDY%E4V(5$.~jiq-|,ˈu"{^9wz.+9`+㞵7U磜0qŀ BVgZނ|@0[4k+;FޯM6bUfFV~"DMRY݆ϮM PUb32&7ۃB+pxc,Ch"riMkDAMzTdF͔2vpV 'kKpe$Qz/ʰg9}_F.'SK*%eW2RJ%EEqTEKƳ% XQ`\4Fu<~ abʵ0mإSp<)ԁG,d08Wy%x]Drj^q H"`gJ\VP/!XAX Bt&= eWUh*+-Z燯Up9A $M.Gc!W9ijіІʜ;[7~xc <2 w+s ͍Ü,Ε -7;J|z|Q9oE%7XDܰKf@n ] Dل/;ls N۝/O@PުkO(+Ŷ0H^'|zTI2SgQ 򔝍SJjϩA3o:lgc`p2^oFs+”m.SUиͩ(gcFהL#**x\Jj[!.rIQV/$F[%6 M@SiѦz%u*~Z c:C^m!lxw^1&y랧1g~Kb(7g9ˀP1!a!bBZUuVw'77!߆U]JN\*T*JT$2XS4fd(ʳZהJ!ߝ: 0КeyT@G G `·ז&>AYU5*J`|Jd+,JpJ;<4gɎ4`އ6 t< J"1ReЬ3˼]BZwUn7|?nZYc[^?rR'HMwɄ;<YĞ8"9JV 7Ry¹we7NmG-jBZZQ~,7SjXCNpO˃sp}>Dt @!l,kOP0!Y᪡1956ZĒ5Q@~Dq{50bz@'u\duPn@o0pTUI3SEa835{S\y>j*w7tB&~qL3*FvųM\vW8qx bBQg3ai#u:'ϒ'҇Tрa9~rtUF%C73MܻZfJ*Gm/>o_kwRWlF_;.sd;fbPiׯb|m@8AΙss) g[DS8{MI pp΃; ى)㡺o\g){+CҰ]A<b M_rTbP.!Z!lD)ӏR*H"Q%՗2R?6ɽ-_.!Q+iMh8-=8Nw;B)OWSXJ T{NP HWϸ C@(S>0Y*cyf.5 a:$>׵ы!WgzxQe⇛xN-Jn%jVfj$\/T DV_Y@IJWS9X!ND `&mx7,cYP;,] ű$Mb(x;nɆ >_C՗w N{[%B"$VR;5P1! ^j~uQuRRY}Nu^0F"PKY2ϯmʲtIJkS QD6#@vtamI T8ģOX1 ]qYIǏS=dUp8D0c$0|.읺ձ{'MkļuVS:k_J\k+_LVr O>G۟V7QT#Cv [D"Tβ*TJWs {U{Ћ\c={PdF0@PJ$ANĴʨP(!%Cɤ2_[QB$-# K)VMyW7[aDҍGpkl`Uad:~E9ь*`P.?!RXXyj༕%Jf]1nA\S,/GGȜ&@%})A#޿spK]L ߊ"u=6,cOzt7鉴ƗYBKpp Z,D wsn-6pUm@㩟67ؾӧъa9|?-t:]7ÕҞYD աt*T5Mf|)r)nFT_,eN$;#+\;)mZgDuTr^4պ&(5'MҳO*)W2`WIP.!+ g)dnꮜ%FiDUW%ɽ%ϴ5rKW !G\vӀ[B]= )ҽNJдOv.?k{pHu^)3*s6Mf.˼nCצu"Ops6HX[fH4du0*jX  c ;;\.z}J7{ ;ENׄG/\h;ԥ7Uj".M+}ZٯMt|%ڮVd@W,g=եUa=tN1jz3ѹUH*#xuwR$/E`+*9Ӷ> i4[@PK_ LI:3{ulֹ%#ZuO>\<5q{מRW)ߕ `\ՋbojS+]NE;0\Țg*ԫ O4 nп Ϫ9֚ۀ Vg^K^) rpSw r$ȘѬ;Vz]}<5_/>,=:bʨ4rѪG[m @[`*$kM=h H85ů(:M~?GoɊ͔T/H1NmGvkdž^:|qΦs_=qW}uO#ھnV)hf1fjJ yw'3;cϹm*v.^ZBjsшP bp C6fo,"&L"wIo?P@ܳj|%/My?3_[ %  p"_;an~v :wLs9jURUȱ&%-˕N5Nѻ=B豗TW\P,!{+>Y1$.DCЈ)ʫjIZ%U rfy~[2::,b^_T*{sǕjlwEd,{w̩*BH&3*yf8g{X?ޱPVmCɟwg9H c˳|d܀ˈv00JB A"-B!&R3ϚR^Zc!nF/b(({s鯔_d 4 a.΂]i)Cތ$_{i; >xhݹb*-P-!Y:(CV}3TXWUR1+ahZ~^SǏ"eeߍ7rd&qCh*xFرW]UR LQ34*F}]sNJ30a )WV $eyx\RT<Y't7\N<6v:TCe-9@ڝUF^te'm, C h75Yq%V<]gRVw9<7>y'<UZ:ޛ SFO(wj2f{w: smhխ@`™d gЫmmHqYb` P2?Lavc57.107.100B6^H3"UjIuu.=kگ+}_FR)[B;oJSC8[¸:#|r?w l RfdAN/#3M ҅rNbrHKJ,l=L.笏Wf_TN%SKL4:Ld%hmEvZ i@lïKr9Z!jKU*z%I.1v2[ic98q1몾}ґG+糗]T40ڷ!$1X 1`Lu3H tVtV 3 . (,[ r釳´[J xK&9C pP-! {U*4+D3UJju"a7QI=7%-|g:2C"jB+L̛{?oa Oѯ6Ў!&6])`vuR*UZϴ! CzKB%BzC2|&sfYau5؁ N]N,j bKt,*$QTEԉ˃ 5p pugSa]E'~WQ3hQq`pC8~dݯt½x]}g6 {@P-!T܌1K.^]^^\"Ƿh¶5NKTd8GO( Cw%1j#sױ1 frT$I;j$,faC Wi8WSF]\N_8գk<F#߉p= [ڰph&'E ި(8zuV`#1NXhsc<=(%f(X7JrFsvթt352%*Eo̰ e :#k> f5lwڵ ]^d~C@"a^oqafv4~)oWbqdhA/)dVM%od|%J?(yͧP)!+T yP+tp "aYiaں` T3,= B'CpMvҁag ŰNؠ>f@ <6G}(|Sm˝NOd{N cauKJ6z\3U2AFѱ%{_HP}D+}( I@*5Rq6BPXh-GC'Cq;t& ֗oqrjzMxDP;!LR*:y}ѓ{s.:ZqeV֠Jhki5X$F ׄra%؄)]u%#8: N .E,6cKbI'tM9w`斞wg}_xڶj␅Y9X|qQ>$M]ʉcJԯDtU:б0D_?MR9_Ц$r# wM␽k{EAi!!8+.V3@eœWTZw݅el uYB(­ھZ2 Qt!/aQaedˡEՔւQ;s.UV"8G֯S]5V{s~opB | O \Clyl\%k-@!0`$E"&烦" +Zr ے7_=ᰍ\#%SvH6!bu P'!{RLd c!%sˌJr:x~tTzv*f=[T UYP+u{Eg}hjB /z7Vyw+ Dce 4U23R[rV3O|d5FYex ﯇>~Ebo@m;F`*.;Vt]ԀpkL? .kg}Sp[zeS]O>e劕u2Koߠ > PHUCRI%#S \*zrH X@ NP/_!Ҭ:Bl]jJTܿ?y3Q+xXjf=CvbG"*;./A;M27TRG BX1CFb&f,&6Y9'fN2r{MRHCi U4\<^ꑩΙA&kXcuͅj/+>Q.kOT\^pSѬ%Yq]n񬫬ԕIWV~g YtʧS䐓St}QL,VnPsʒ|.ѻ9NB$f|P|qN;JB#%{O$P1!QRgVU5ԫ.\e;>vSsHz&c?g~1$@ 5,|&ЈDҮ6 U&4=`6,I$ d4wSt'Б ϟ >Y/Ls~t޶wD$V V "[J`wimZ-*B6"95U7ԫ.gW4u*%3^xr23V"zVAGܔL>/T&*zK.O]ޯY*>bW*p!؅nŪе@O`ՊKM=&Tf:|gA~P1! WYH8tE$&ɬuAs=@H5}$ryVD"N,&v`)^^PaqgC1o g'9P@Q2uy.>1]t<"4|w"xaR~f{6 9{V{4AdG}5\0G =p #؁ZgP4 8IފE Lf}u7LƊu f L5prdSeݝ"c wyGGʐϯ[Z_QhXP;hAQBNĜ`U9i.0q g@lXƦ|ҙ+X1VP^̇mks bX}N ʴU~P7?!h3Si&jS%kz-(Rs)8@&ŬiP["vEY>4Or.A3mo1Y^Tn]<ȟO(qN7XiַHѓP2!suuW*R*q.Xg3? F` ]TgRa4xCQ(jjoʂah2ڮsw#S5Ȯ5<К$;tSBr&<ؓ1-DV}74vg8v(n֕e_ʴ5>KVmjk%E =NN9RWWBn8 Z}]>и`%NlVD-&gX%$TyJn0 L#=@ M`jmrIډQJM\^9 qBf'9wT+Z3&1Vs c7_p\ @ 1uД{/03 e{l(77NP/!+ Hs{+J֨˩*`;fG`W}h607Q;ks~'SonLE~U? ҁhZ{i`MnREdT9hْqqPLπȷ?O^}'?)0FZfNwyRrV T&]5QS[UNΥ&ǃԊQCUTa\OaFi#Jg I,{{ču~kh@%]k;0<&.k)b{ NFȟbu'Zq/mOtY<9W.]"hu>9bZu8311݃:d}F(xP?!Lݔٮٮ4BėU\oMjS¿]_ f?iE}TT% -gb>&hlf(drߋ>`sIdHbWzfoVŲ5ɸ^uіV 8$Vw,)77Gc,\*2`Kj*{@ď:%3Ɣov >UcRBZHTe= mVrYLPylAω)ƌ{VLoqx=>]}hxc!ϥvZ Ij<=N~}*#fA(2nvHT/qO-d _dtU+L*l}nvxqSdS l7J&0 ]c P.!L?o(|YڭiSz"'wrx/D7\es&7j[IL6r(m Ո$ kAz'qYvqu3_c6εd(` B駩'$Zj_EW.P vk56 R5$Bk<*3ݷ)7ڄB'_aX{%J.ύJ> GD\94tf[Y6-iÌ=MEr-@{+@0/\0Wu7ƖwQ-+HpGwrx/D7ZR8* Y'1!yFT y߲ɘr5 PP(!{ Tj!#s*EN;Rn-RcY~uhgsܐ8!)4 6Vz'"ٕVl!928IA6v8o@cWh& w+9bd}dܱ}BO=oC\h@}иi<}W?X9SWh~RpzoM鞏{*Z2 8 ۿMijtT[T_ ~-MbDc>F"HX/PFa9" ۀkQ-'BߨP0!PeKf}u㋧>kԤkzmTWx Mo- ̔"?"ŧaݔ33. F%?OPeJl'8~)K4GlV$Wy fޅw*HbqZJ>R*&@SˢjPb (R[gU7]*(}99y}&=?+Qvr;&.3#.>n^4fYx:&o@n>8s-n]JFUE;F?i?+|?| N0}zdbN'xq4Ppt zC7?+ϑ(dŇD8p{ Cw#YPk4T*\/˄GTd*F*k :ˬFya]taF5ptnw{NuFOBX6ѿ:1c[AX& k&K>UN ?բLi-#ل XOW ѷ.=gܦVҋ4vBmǿpPE_  !L&ÙYo\J]5Lq{s! 00 Hn&­^=D/y[C֍_Fm|o.n/7 Ta@fcQTMa9N-)[N#]cH@iaY 9ߕ6l]!eI +\YvӼ>nhe1wB=ͼVY\@jTPqef`0k#gPj vԉpV􉎆:wr=YE8^'sP7 T;)CJUu/yzcXj*E`av,}Fti 3% 'mm]tb84Ahcz<瘦䷂Dta?P~9طYNK͌mzXTXhVeө**rжظpxCpƂ|rʆ;]PhOh0ߣoJSQMibX c!6MnK*qDn_] ɼ@0ʂ(f)a.NU,QA-&lIHw)Z]3b"hh%H ͱVY@oܔ jgWf؃zQ%ż).&\<=Z= :@/'WR7FP4)P+!XQ* gη%\%DFMe7j?w4O=Ñ1vEqǺ՞<1j1{opY䷝,`2 c@L DzWL-w+z,/hiDg(n(?6S=[Zm~Rx8kE$kd ];\8Q JS̍*ɷ3a:˒Z' {}p$Vc@&1$d;J..-JЧ+oJzS k@ Ao'rsxk~P1!7Y! k/ WW9ᚔUKȕ5㋞?[ GnVY eDq9pP"ԷIh 4ut9'^Zxzd0'II&fvfW zܧf1{q 硝Lr]>/nejuffh?wʅMc:N/W^# C$dYjS!,$3Ryy2qs|MM =[(!~4}LZPe3hDr= HΛ&"SjՖvSPU"8Jn}sR}H(HN- L DlJO\;w[D8L  DNP0! "4#lsfU-|9.MnZ'(̄yy1#1csn+ qK5HIe \Ɛ*Xe|O\Ƥ@6!.o8՛4CSh)C&@iܰco{&]oCrԫl}^| rXd2r7qt١$\8: h@jpRnf>n(]L?ovlGD8geURtW}8D9^tJU.&'B1]&stOdzP?d(&ހ QVVQP-?! T1kDeԩ{uM|~CYB-A羼nW+TqEFĀuSɲ$C2 [|HhY\9oaRؾ[war?:E ߥsMKn얛uRzpAfִ =Ae IcBs!a 5 |KӱE/?b5~ˉnv.`CȃDxEM*sD7>Ķ5Q25U/nh13UN"b|[̓UrQ:@*' #%CWp;WdCM[n6Ԫ_b:w(z3dGhOD4@pvխ)P0?!)pta:*e剚2S5nqIN2KZwzW $]/>F\iF Fe~F[*lI_@&F|PSp"+眄^QW*h+Kކ0S,s ‘HT hJ\m!E/ {¦k@]?W- ..mfuО!E<&8A.<@8:PED]CLYo2RѤP-!+ wZUaGy%}x]ڡP̒!g2o܂f$;[g qEB8,3Bf%;[,8')S9#!.ykW,TvR!b#@)"%[vo!xDaυ#o6Ԛz㚨 M3V-n?:9o\g7o@oQMc ^ZTJX#C]oO$-E48gT)75I~4$4%ćLe궠iC@61K0eAfL_1bȐ>4b %MR,QzLPE!LYT{I59l׎qcϷ޹_?%h%}(×Ar9c^?rV f(=1鬪N՟Ս.VHW=r?35֠Wse ,qjw_%xzj8o}<(gSXNWh%XXBO޾5޹_[` 8ebv]ԏ` tF]l@P'!+YtLRV2T]22y"Ssq Jt$Nij1Xf~nJljZ`Sn ˪x%p[f,n \X#V1aY{Qq2)|?T 5s9޳]oTVwRe~5jPJT)+!Eܘa dxZ ndp\\ݵJ7%[8QtxqUD\ewLrUOP[]Hmd Vp-`O @eTޓ!P9!LlMQ+Mَ^?CVks|8s*o2_P|I{xq=׌t FUP ۗ J3@θZozx`Ž@O^uj\Ryʨ8ᗘ365Or)OɚI EbBk\t[yz{s~Ve%"N fR(ӪŵsՌ ު*  M{Md0O{< Q%#(zZBIuXJgZyԉVܜL] ,]E.3;ФZ۴ҔeVB nf֓\CؖsNVە|Q~VhkBr8D %na71>>3^k&G[wU2kW~h 8P/!YJ2P̍׉UNjYf3T] 02 | " ;=.SOgwmqv'YɋDHl$(@PKE)Ϣ QzwV;j0W//XN%Z:f$Z)$eN)|e)iFLdvf:|LWB/Pa#;-+eC" u}9\4hW;k=\OL5w^1nx ^M9!6m^.^<_W4L]>ڙV} ZB e[5:.]yQ`@]* ݶ˅\5NkGP6_!j2CZ~g=wg\̵IRkTзY":Q~W@G:;0 R䞣ny+BtB4۠?4%$v @@9Ps [CŖ7.eA%r-j0Jg(F;ښTb4uS8 RXӤ+h]XR>r<obE֟Uz7z 5-Fv`Uvzi{6Jmq]ȇ+LNїBwֽ׷=wg\̵IRkT=k7=xQ0 }&c+:y{=;a<=v{ţr7%N73^ ѫ`ج1~X9^̾։hC`1;ڱP7!}\45Smz+JsG'"RPk#xROPl{鼉0BF?=;+4L 4FLq0{5fuxrY <9;p-|ÓCҷil~4wJ^CY:!\i IrP|YMjE/ 9:Guy}Ky:79g'a]c7s 8X4! D8Ag1(Jr~߯L~v[7WI"hV#xRp9Fj{Dm"UJ "+=|7yZkW 6+ :'Bu; ܱe1?O ~Dr@/op9Zugfdt8'ep5ѶˀP2!~[XGҕuZߟdBJƼt!>2>+ݍ칟cX z y ٦2&ۄRnUZ_;R=.,,G"-BMkV7FmRd9V1ƨ}%1mį?Qn&8Ѯ=qU,`'kr+(VRltt⧢J,XN+i_'›HS3Cq"}w&IIfuЕ*ύk~]LIXןn}= \KxI]?.4 @ω_Wl+ꫫJpU z:kq8î+91æ=| +;_RbmZ x@, l&DhpP3!# Rsmv;sYMnT+SYF)U#]rm 2r e2A[aG%G)gIE(HtIaЪN(s)\,¯8]޸?xᴈưyljZZ蠉g%a@ayΦ]VP k~f{6hufgU/\imd6`g༩ 4 )9;_*v`%u^F2xNd\#y !{¸Ax}O euX*37{OS8,MJ0gȩsHEj4%.ʬOF4v l rt^hn7h-n@Rzyk3P3!?T"=ުѵjf2jRۖd.s!%"K!`1Wg-ӓt$b$B- M: 8a#;b ;Xh'}5ڙ+g0ハ|XuQr5 LM.d\nc0](Oشֈ4Y[WgK'E_豟J2r׏;߾9Nk7xK'1m>TC1)7gS!,.s˪m癚ކ\:w0F<2SHNg)ڍ1j&8ZD%<}>uppМY'cQ4%w43sR'x~輯,pO ߈NP @0VyEP3!\T!U_E*\W\zXM*[Φ%d:0p ,?F}p҅4QXݞx0 xOqFLp":{ [0~*"8SZ/CU: S|*!x4dJ/a[|z%I[yCQ5 Y]Tc.׶h b WvIImBPXCj=!JĤJ \4"e1c!r:=D8'QWA4S#. `}^μKs` %E `>KoOon`: s8YP/!?]d&e]w*nm`=t)qtvzPsfGގx*34f0i`(0q-lZ>VZɈs)A:nd75jeaFFlKiI.2[s8K}E t8]iY,UY(ʃKv_Bі̜3I#}n/ɻ[XW?9;KBeVS k^qi)+8;}tA}0,@x< 'T" P.!iRe/GPIiCP[[l%ZhHT-p30Q5(9@IHcP^4QJ7wt>u6lݐn"!b.w+E䥺853 +r9@V Y1-*g@w{k5zhO6# P^"vyu_>>eԙc-&k-:4_@?YΥ38aXh,ӝYTg 15g9grRho!RuIr / uwO+S) o 9x ٣ڝbշP.! ܤj1//U&ZJ^H"KOgkP `Lȭ4wr-\٫ƞ^Rh0 `ctE@8l(,g*u'a+S`- *j?tx)Aٕ0Bh J`d1/0JnXWh!nmf]zx>ח@9U'Ϧt) ڎbT/I)lA몌Hi)y#-? 77C:ɖ c{WC'>x֒[ .)%J\1ҐR%*rQb_r:"!1` }2>C9uǫ w^G+K/D\>zBąIJ/_*bBXUɛ#EN:X(.s^3>a! g3XZP?P TJyyo2oKlC]I^r17k2Kyd\ƑZHck %mV <_w9`Ң&18 J :.tqw +S0/ ܡXlFʏ//9X)-K,HHasI]ЬfWEpP/!Lܠk!+ZsU+5Ωy:į?I(Q4`7bTxPK"iR4rf2pQ8o&2l8Rsq4g/)Ksu~_ UFR\ l9h6_t&Y2nz q7Fv2f[9UzV[TZ쎛dҍ:ujJfvKK|~RX*sJp;j`:WvhJ _-,/}]yOGvG y({¸Cu}v%| %;;ybo@':SU-~vكP*!+Y!!$kDT*5T}xF{KW8L9y0w1/7 ~W. OkY%# 61٩Tq]\hq#-<ճ#S9䊉ql>o i1Ǧ 9Ll~iΓvWops q"\˕|'$v=!\ao#W8%ϝvˋ>|sv7xݯ9EBSY8I7׍4g[+ՄV0~~>*WʩcDR*E*zf8S`T$&$` "+T /PF!L6Y[ptM1i~orcW$ c}vY\yYoZ֎+ (DEvVG5ǣvvux-@XCUGBQ*(QԻU4y#5DylƭSח@@;mIIہ߯mA_^Ł_?P9焂$MzƀYh:M}NHm*$;;'߯L=/Ha UCl7 ]}FKI)6Lb+/HʻQ=lyGPSx sjD'&hRj8u]}yu Lp;yO%@^(oSf;v4A?N@pkt8N" 5fC>vk3~yW࣯޺]#~YCN4jhҭj-y '5 ת4?^kQ3F~:UӹBMB&^_a0 P+!{XVȻʴ^"DΰgtKu)+˴M@4eng2tqa祪51!H |G<*7+CޮĶ肅;+Rk/dk.uiS7b5ljx|kjAYd)cUq\ݬ{KE)S˘ny>]AbDHMW{ZR"UH I4]_Tsq7zytJd"v&GUstn1jJ!+J^b!jKT77"^%[X"W:+P2! ~O}kWAmm BAdȊpT Rs5qcggNOTL%CnvEQ>N&]Ex'y =@ aT3$ rph`D4TpF'!69v$ˌI"Guŋ.joіz=>yaV1EvyJr+" HMSUkɢq7D6rp3O8d\ߪyC5$5Hxp^ʤl1XD "I\Z,ZJO>"<5Vh#Cn :_(&٠饐(!Z ;e gjz7<^nP0?!uUpaUJ]{}@nr޼4f谔Ed / NJba$-$hșO#EG9^÷/;%cJUmLN[5LޅeTLG}En|* WLuSb3bKcڹcKeM#KWCɋKNj:;KLb(]LqڵT!Ań'7S\*IQZŪD\P]bj+KD3 .0jF.?ѪKa̪*} hݫ}wj+1 q84lJQXgr/-T:_h˂wHP}2ϕP9C&_>UpP0! TY&*g{~>Q/EdUTTZ17CC@!.yiJRʵ6g 'q{yhv&qbDxw8oQc7|Vw f8es{11Q:F@^j?k<)sWGw~@ Sҵ|4:-/y..'JP%lIEhDrRYf R4ɗfo'>+%8ݜPƭRq߲jp_:`[]EYZ.B}DRC:Un0cAc"MHkTkN PO5ep džZGI۠uP/! Qgi\U.$~<Ք󞝳U?03! (݁CBJ"8R p0׷.ovH=GD.{vyǤu,rgu2ۆֆDjOVuvlWDS6Z?ki[漴bj;E9}PX8V2lT9P4;ˊeҢĘ\7/Ǟ?Zö5?<&IvڙrY$7^J]Cp rDq>p4*<,rohWGktc%QdA'VCv^tG$~F7x `"@ @&U#Y#*FNP0!٘vAM=JC.U2T$㙯y밆KQ4P$)cbӉOYxXMo+bwQ->!5CI]^+|gв e+4{Dc9 H$ρ A0(V+V>q5j(^P%;)`b"]+, ]456#TO -ج)R5  Da=7u-H&\׎8J3% a(Ɇ͌L,m=S;J%-DZ;z;+RUT`z˨6~"6̽T[o'i :rZa~P0! kRTG9߷Hߑّ IP ڲLhV,AQ}"5:+6TuUqzX99A3E]3&n[\1,[sXfwq+ŷռ`[ǕδJU髧Z-.&g]ŗ:πEdWjˡ]*OӆH tZ O⇙SP8!LoQ-V6kBlƨvwn9Tb\oKKxq1F u 2"'$/ǐZl DFK'qdT(]B-![t\3]YZ Tq>KGĄçAE\t.p1(NeK1ߩ6H7a; np07 I0C6L4_F.Tئ ?᰼c>_.k}dt{6"S˰#.|-k*6Kgݍ M"F&nL%Tk1}T,!":$giz@?}RZF!YϿ.C,ԱD"PsIo>]\5O 0 Xg ӝ(+*;'x1Q MxJ.wţ3??8X PP,!UȃNu*A䒑UFyK2(Py7}c pEń>*Mj12bnRČeDX LaCK滬5Y4ۺǼ#T>Dis7ΆK#: DRƣx)C(C=(Զm<\aQ. aj݋qGo> 8B(АY8Pjy&=3_;f 3AUyۢ,qq&s |4F9 dپhݨ>Ol9oo%)0Q)±Ap<@pP.!YTQp&$ס "R**V2A!ʖ;<R3MN;#0CwSK c뜜8juSfǣ{q&Dg)ܡ1ocrZ׭zI>I.KHZX6J`:t6tXcfnQ#=cЏn0zfrNm͊ 8K[15DZ%wwdTt ՞W?:s|㉠wud!-BF4Πs_N';u :fH̏kb39$dd@ rI %P8+5^})G)%=Y*@ d9]bLP9 v,5W^H˩':ZV۟l6ϠPHJB:sUy1Nf#q(|t[שqaͬɩ{L 4aÁ 4X%VGiT)c0QiӉZ}aJ Z'Vco^کeŖh5xvbi,F[2~Wwq-b)?[RQ",Bfux˚*ȫJ>A6jGxM8H–rNcd^JZtg uV\_s(-$E"g)@65Z8CE u[AYN:W;_Cתz\g9DVМ;.~bu^˥E(_oQfQ9>!vOP?  4ONuZkrgL/_z _616p KFX-rc}!e8R{rYE-Z?Z}"3𰮜ߘ1$5٪'GȂb7*[+/9>{LWf曛lMW%޸zuzo<_/IzʋU{NaXL˲Sw ,$h{#]֑"=jlSLXU&,.3XՎxݰEDv&TIxb SbĺC sOK˙)w*[O$PJ7,kkx\R/xp+BK)&A#HwV2f=el;ߍhh|bU׃148ϖ N=`p!s/5uW#8ݽeJ˼_@H?! Ua#ό-w"SZp1rå=?uӀh' V2r@ズ` Q3^ƿP.!?SQRLh ɡ t[+Uuy&Z4NkƊ//W5[ 1 =x蠺yC¢( dP@ AmN؀OsFuHB$5ʾH2f~ ƨd)cY7JT]#6]RU }+ƏJ^ʺ\DO#H(O&"tnuΪ]ꮯ8DSԺn1rB% !Q=ϺVVn.*uUgl+Nt7%υ_*b>5aGty6֠[?M;7y_k[pv;A.Gۼ8P.!~SQJ} G4[t%{BMp"w)šAȷ-e:,ܯYNF<7U\ń߸\@Q*4 gKz3griۉ"vS9֪&u0YJImEf@w^6mi8P-!~QL5>MxYy2ok$2Z`q/Ca|D5 )Zy_OeJi]p *UrLkwlWd5`!Yh |tՉݾڹwo|>_ c.V+dWGlb/ 6ε8Cf<*@2L4!D}eɦk$28V4hfh(!+MgXS` N![z{,Cncfs+z $`5#S,e&+^qᷛ]gxJ9GRȟF>T@P.! nRY(" hLqJr%V*}_<4)'3'k-(s`mwP c}ޮI,]]@=M< {*?؜XzZS- H3%f MŞzv0^*!-ˏ]tΩ]qbK0.`Hgh 83},Ib踀mh[lʭ*9ZeЈ>775BRUĪ%TW?tAI={^Cޗ5ٖeZJF=9Uj@v{ 2q{>xw)_>G#] C>ul 8Iؾ{s/<_p$lXcP.!Of)^כ)P*mb(jL "w=\8 Z^KӢDJÈ)`s^b<>)0|V^=J^V^42P XKL20V;A RQL)v \ZJ $ TW)=[yϫW4goEl}*qW&CGB~RCF x%JS.E Ii[yԪW淚h{5ٓds1F?O)gmFo 3UwB!ɔob*Dt{}1ݏW3i.秅/ݟQ1a}=7U4P,! PX,tasR 2.w rEMVPZGoK@@(|~$[a&z ͵s~6++|`RSմ߽,/~Ur({^Ծ;n8/ɜ76ѴSGZ:Qo1'ɟW(4Iši'>(}'r!|,AB!B|)mJ*ˏe.w  aq)+HB]0ބp\AG<3\ҿ]՘G{Gĸ@=cj>pyPm)>^( *!xP-!VPYh yQ(;y;N,hTFb0wiJES5yN-/-h@aZd5ۋsEDKκ+j1*6y+av%T"wwq;AGp(A3pyj -]CȂ}ݮ!x$X )O<:ői5<%{hn'_}k}RXcd>DM12Jv3S,jϽ9\*fs: x~l`aovCm5R$  jfOEhL9 g i fЛKr[DԀF} >?FԖ4L}ZQZ?dCD|04|Gfv I9`dmOP6!LlOA+vXO,:5Ǎg@T7,P(9=mv1kSK탸etqoiǹa!3:q{^59%RBj 3ikQ)6!kn삜ylFA9tiQ&M~翩m-i~gǷ@Ld*Lά&06@Ldv 3XAJm&w.O/+wm|Xaqʬt:~N}sJJqJ*R(t^Yҵ2~NzZNʹUtbÔ}1Yc\2;0*^$5 sQNZRJBi18u5kY tAz%H0ݦ}()=ފB>C+L?}u;{N繞ۿcf]Rexh+o3*T"/,aNWjU C~Q~y9@AP'Bh~?yoc>1lg>^_sH4Ω~FP+! peQ *Nןw\.I5Ag"YN~V. T3P'hž^ntj6t\4"#㳵ǶF%qT!%д0XeȩT_Ρ 'K9N_KDUJɛ-KIhzz^6E5Ąy92Z6]T2kj˫mNF4Fr1L6y8qm]"t9.yxvyuNdFNYwz#e/{Kӽ77%np v7:rsViP*_!Xn0|_42&BUZll<o/*o O9ZjyQ9],2cO=̱"] Yx,QS 5ҹ'c@oT-ĝZ0V,cy79Y-5qC 22WElESV:ž:p|yeeY:G sk{bŐ шj ~}^I׍.T˄ Uku ьi1 `Ty뷇Fٺ\239d62I Gyfwwp$pIbډRQl %V#}11P/?!w87ԫ45'MejuDl)Xby;)>ARYmHD36x0~^}>: [lhl|m߷F7\NF[!(=DbЉuUu׉_1ҥ^ycM^ X` vM\PӎWp 3EQ$X3[[7d*0$ W\f7B*'_ ƣO!l Kz~2x@Z\PP*?!u2Z`DfGh:'zjkWH\U\cBcv#ȂR7G5spo ķ`HTZU\ 0`֒._DIK &}s'c٣ZXvB!Јt(CU{*H\`520BAb/i`Jf|$,*<=6P(cqMo} +*''R>Ou>vVVJZ%I7N$J |?C&5 +  7^P3! VXHA4)Z3U!T37<[?YEZaGA);RM7ZTa zi2kD8@Dlp,++#,码?uf^(5 =WR@5&ir[ 6*bBquƹ vc@]v'Ѡ k@7넮{yYPj~*DDVu&UoUoV뾳U/%HU+<,4xA~JNRn d8V|L<la!R5'nK#5,k>7UgƄj%rPFHL[aX1w%28JZpQ8~aΜɱ@YZ]/qP3?! _VQ Fi]U|czT^JK̹Nj b3[viJ:ӼIYW3TV+,,]?}\v{;o1~v)^H a; 1 SlK84/=T $Fy.g9EP3x=ah1/^63;oD"POI%?@{mn؜p//I?Gqc 6>9NңgRj'.Q\U(7҅$c Aç\MřC#(*ۣƚ'a f;YѫGU[O=}}=z 7F+K$7|A. /k}E稣yP1! Yax *e%H*\nQU7QWaxb*ZXbRqŎ剌)~'Ȭ`]guzo.Dn2]"HF8:#g]|@Vo t2&  aZN-:PɁfneľIb[, tcvMD-)`Y"fAGrjTŕ.QO HL KeaaBjm=U 'Q,gIl13W½sx~5Ո^k%ZeYZ[R".J2V!k0BUKDL20)EEb ҭ̇H'ɞC2:lwF[Lգ~(L`',4ئKZ0ʳaP2!1١1I?;v8p==wdf1BwApĝx*r ^0f)ɑV\B-n/k40j A'ٍȮE@i b $3RH`59;^1?wՊӟ8W*1u aD71=ODG7F'iu{<:G(Z5 ][$T6T6'j+PU&uWvDitR!ɉ^&X5/.Kdq63ivGWL[H-L2,49odJUu7U3~QrjdļMZ:JCڷ_Js0i|uPh*x#R;֙8)v yNџPeJx{!':@ibjP/!RX.6 ߟW^^kw$U5?N>T36?HnÜF[7qLO _GڡOўLNo链1[H[ҝn rWDp{ WPnhuCGa/ 4ظp4NDvZ=a~ 5;htU |-_:yiJR* W/&J(%I/-$|[z ծ|),=vpWqHRηOF&c N79޶n5>j?`soXxW1K2!lGlP/!~RX6(O%ɐ#LٜW_YtfG%TޑKq<X` *4B9yE NFa3|B#( 1@)[Z'ULn:Gf6f%r״mJ[h,Khjɓ\qt8d1R]JQ$C8B á {&DBDUk&Ol+@_aMEĘ0r.2,ZpwAT?MbR }>HjEJ>+qǃKзv;K٣IڅVWA6+R\DU@AJL^sZ! lP/! R[ T!B~?nԗU$ $*8H[?Yr[Bq f#bQw%#-zӼ Ψ82ղk P:"j>Ndl&>NRJWx LwS9 t17N1wZE\TrӟFUxObmEr0;Z^H`P. @@&pP.!EM(sW үLBd(X[̞x$?Z:6}B0C{UlWk.2| ?,w$lʼn Y3>X 6[bI+g]oot2aQm(d@za$c,ʭ'C+{JQkdWbdvDžװJOfzw5UZᒚUiOA6[J3HH*w^sG?JXs"])?ahh3[%H 7Q&xj̀3Y4@ ;' >jOVP3!n6%i!+~QZkuF\K.}O%t)ɻ<:*YEN %kN䬉Pr_1H53Jݾ!Fia]-a"t`S]9~ODqO]AE̻^ܱ*`hhZ0`Uf2?4oIT3C͈/Ceы_չ;ҷGy]'y 3-DS@CSr AW2[kuaq/ndXVqͅ¨yv1oE3 )| Lc% {y}>2& z0ÞFHyMu/}#|h?(A_tm %EP/!+ۙ9BV^9ZiRTXo;g-ɷ}{<2p!F5Mx?T 8iz9/}1hO'/~\: ].P_{Ž&wgN |/&:W1*ϚaJY%ofKc/#I`u_3F6)".`?7fY8{q~i,=p[^Qҍ~Km8R F`w= &D1Y};2-*JU3K Y$S4  pD'`wtRRxVƅqjKtݚMɕ؆ 2śOU< ;lkb|MS4pPK_!L?H/H5ܛ55WZ~Ɠ/W+׶xN{8s9,?ORGMV~+ AE1T^-p"2 2. U,0Y|J4g8v=\'XE.XjG|7ߔߵ%pN+({F+ @ 0-ppR@L)Jݰ, 89 L E Y=\Odtͳ6JNǼYdžU8~z|9xx$:|sGc{fAp^ਮrRUXz6XͲKt~' tA+<5&!P3!LCk4ݭYfWz U56my:~5W48^!bɸfHTs!-RBhʚ]\vdClڗ`Ūu*+pv.#Zk/MIfyp'n:m׮Fx#y':IO'+m]`<6_~oeYOnռ  g"!׆޺:9XYP-3n)]4YgUtO.9e*}H7&T-KLzyּ3xF<ְ}& 3gI_toj,̋ +jda*l9n4?W敥2A} UDulP(!{% ʁsܹ\*JJ$!4N=/Ҩ xR_"&393SI)?Z|IXmmO[ˋ.:|0SƧu$D5liPwxႉU bLj4 V#-Nu1b@^}+J>(<l_Cffq (]ɧV^31:*y3 JDž]t5!rWp!)(st0MP\LhHP mKP5!Z2>|{^Oxι35$URSU5PO@>aSKWCV-bbwבf4':%,7t\'VB+Yq'sz!{W!%G&5qϲ6wQ19vC~Vq IfMOщ ȾY4nH]9j/jƤӏ0ئ&]-,.=* 8V_IIPQѭ5vKUoMx묍Z#P=Ib)TVLW֞}wYX (Zb`>3!)hL0:Jfhk [lq:cfDtN zxJ^Sjt9QNm3{ 1v'ԘPmtg{w`m99Z](5I׉1zsJE>tO[7iY£6, ՖўFMs05E&9bHkbg3ќiU!u]ڸLub2럟>|5V=ߐ bbv_+ wr^|\;/ڌ@lȘ$P4!_[!.F*hwEWgu\ep'|2>wa+2V|X@To64YR}ZJX\& >kMl>h̬mZxsPK5;ҳhHf1\ ڎ+@T@LlCG>og]YΑW9wNxzG޹G~V%[[Gy"eЀDla+\נ-J#so^s-Mq˜0ÿj'<(sܕY3:&?{#Zc-]w\[wkr/lYKC>SWt ]Ow\}8;0t0@:6!vK eӺX0'"a|pP3!{Y:$ J7?|S$*ZMT? +DӞǶwa՚ d &/wq? ):^(T&]I`!ټߎsC,ԹSS'_,ciT;l+vg9V&BG:NGtԳu!ߞ)(Qѧ/Z%m`QJ$ ny2B2p~=72:H7EJjt{(huE\{2׎Boodz"}5^} E.TLdt`H;QIess@0-PU[ k~%1WjtS VJٺTM.-.^>xP2![eJsiW?Jβ57W5`JIۜUaxJAˍlu&C?jVQxt۽L_r\erveZy;tFk蒱s9̓ݿ&F8=nloޯ4|K2ge nȗrދ{(7:Zq>ب/l=qW=Uy|#Yysq!hHp{`܍+b-쨽j~V#ϠjL{s\x_%S'/k䵝w3in(K7^ ʒZ΁ l*EόtK% gLvw?IP0_!wT=zPZEU𫺗?I=S5-mic3RCc38ilּcF|8 z, fIԔ%k*Qx c&@.hc# ]/Eq@_i15 qlC4ot" C D,fC8γ"H`n5-HT"3vSp߇j}#n+mdQ5(Nuuo;ޫ*iWœTށS^<|ѩ7mǼ:;0}{*UUR L>w o& 쒭\7}Jꧬ4͊l؂2)X aɞ5v0yhP/!a2FP/7^Z^HZ޲ӟI?󱅒K2"}M}!7 dxP*-HuCٜ.iBV>suѷᵪ*CG`9u"bt468sK렭G|A!jzN| \I*98=Rx9F>`9qϳ ~Gri %Ym-ž?)h.{ɾ2EJVI*"rs9E.f\T|s4яV$WPPP1/$&=^;V1x~Q_4zWs@,`9WP/![\G!ůqIUZiZC[џɬW j[OHHo !P.)U`Is<3-KNdM9D̞@ζJ# Qtts'q&-+KqSzVo0D`qSW=X%ָp\”ZqeF&wFP g<ԔeLܤC9FX߽@W8sJqT5?~0(}- W3e@1j^8Xe)`%xW3Y#8n\9/w;Fgk/I4' S'_/q^swl7=P ip Lk-.X^4BܕidDc I!9"ޑXx*`_?gdXpkF*mQ @zןxyN{FIk+&҂5yBN8#/1͔93ͷ~,jy^0x5*׆걼?vOtzl"l"Uҗ^P1!\RSaqy޺泊)3hG3e!d4v}(Le/yEAQ{!ģJQ  X6B\XozRY}o]"!A?tx]~/,pO .0gr:!Y8Fk>j&}n8r?pXd*rYp! 2xJNINܸ%~36_Z޷qS!oP|RcC=~H"jO۵lUg ~Sf,0Xrbn\ LQ$gTxy3<ޏ~Xh,Yqҹ;%}n\h&\rkj>?>[|M.G%NBY°ͥ r\lPʙTr X6v{/K9 8IӠ`jK%B",v캕ïe 3D92o@'E$BxKzH'ZL5WF.۫>>J2d]i)GzT+3\oDșw-$|k뙟Rԃ{| ̍mOa8w>e5? o@TW]^Sy L1CB$ѶJ0 Mv=2iQ~o \ [tY]W {] ` ,iCy&U pP0![%B1=ظf]Б2'ē~ۯ9 ݔ<-s9|ON9 aZnsqIYy.7 םO0¼'q_RdO Mњw0@:G/CrvhfR9HF/=+bIOysRSc1<2E[KYPfe$0jFTN*ٯ=Wft$Lsq$߶NÛϿsh9u۹pt`]; hFV|4^9tp ܿX\[*<_Į~̲}Zde..=|"ܠ5eU ޕQ^pP0!+ X)qk.$M h2-ګ<.PDo}ia=Y?J ۂ=x`53'UEp6CKX\N>{Ԃq e T&YjȌ_b;2_9G UA qs42OӗO|1ufn-UЪA'ʀ{xW㈾k_]*HUѯ"л񩞿ӭ:7iesy//,0F>gt)RtiBs3˫y ѿ4$2SL80 B˥Z=7$zID\AqPH!L`Yb=f6jۤ3U+?=[W}Oo^|\-.Z9p\| #ÏR:D)޿,HigI!6W:n~T%EBî}:*aW$^HRD0Qm+(b߳5 xp|*!Rdyo9;|qм-lJtb)HumU]!ǤNү!ꕁ ^nK|pvG]yk%[O~~S}Ԥ6D7׃?@V7HWc[%>_:5+ǖGT>f<πňT9++TsCf"~#F[Rģ(g`/@ b^Z8'p|xӘ'5s!N>q }ՠU2= B*J*+D h/ y\yg3n\Q d029O~,͡+hdSpsӨX F" \ļ4҉uLֹ$\yʲ05M;Hھx Go%8oퟫWǻ#C'0 EQ57Rd\V pԧ0"W !HJ_!('5y^P1?!Y8 HB4=n*+IP$IK'ނ(7̌G b 50Lo8_[|0ԝc2-vg%n>0f\" H-@}dY cV3-TKWh߼Gx w}ڽc:yLbs1W`Ί*g?>dQ+^GvZo>~E%Ox-^ 6MRUkL; V+K2DT;Z_o9,IA1:yS7blώ]yf( ;7"MiARRS6dv ڹ6.Y% ; }>]% nXYc{QEݷP1!{ښϏg8]n5I(q2jW`M"2,`GVDZ,RTokMMRJsoGb2$h7!Fh "DaLLVW拢iZh x&CT\ggI+Exො%kxs |MVT C//#p9?@9#@+:ѹF ^qY[S(\/@kicluE,wsLNetn6bp*HO3:-}DN m,hWЪYiK?]W?CImX3Mj06c-E}(ָF rn>w|XZ3h\کC _1 ]xFqVf1_WHN_V%GFҎMs5{趔[34I^1z"Qn򳎣pxNQTY{w%$%].V?t_vZh1}fpLjU;V!u)A]p:9E} HiO9\USDͼEO Uu hqgݳiD`u1`9{h8P3_!6"Me%]^Zso%NEQ5[KBaGYW0*Dn}ˣ5r"C@2`1GFi!=J^<0Tc7,U['/"AIhpPRbAM3 a$Gj7`kƃtU8ZZ7b\ݺxx:y, fw#_)(ڗ#8^vSh# suwWΐ%%6X+›B#aLQy,RL BŎ,{RiA.ș2 -7, 1 )DR#DOoiK ,tC٥Aeb +*P.!}ڠ*cs2QHRV;<'|c*ٽ.ӹ`C)@c}R\sӮ_P:q/hJz4gȬy5b1_wy3[yv츭w^#_l @n{tW'6r/g3XD>s@~n|NYlڧ_'şP)*oAr&ZT(^>yE"%JkZj? QooB!Oka7$D (~'> W_$";DP)K;.Gt4\T=kOg>~8G I@5wuU%P.! dZ!#R󚊲*Ju:W^L2l_cr]O[NِsB*-Hx.n1]%Bteq?%"etÞ!j;ëgnR|IwUR>Lm5pWpUPKr > YaBGi#|| %]|8s^Ϛoz.MT$nv 8d#jq1SYhC%8|omu5#QYW־DtR¢xcZ*c{e ')s F)_uxN}P*_!{X1S,#$UJ%ַi*LG_fXn!0A}?A V붴wӠB$HA%jɑi.(A ;m3-/"BWxwWv,t-Nlh,[,M(<@d1@l@B#Ъ+%ַi*L>'_RItc44;LIMhDADnftkTzV;M&rY DTP1!Pa2%Hy!%UUq IrMΨkJ dd}O>I]>R҃¼ $=`(R2 s6jMI:ZdVX bhRkDPƷ2c!8RmgҹޫD_#Ѹb{f\2&▏IOrޕ62=jQ7_g Pk$2+ːzjyƂ 4%\6t{|syd-ۺދcjroD բg}O)a~\.tNԂG:}gwRO>^97@uP7&/9ȄP/!YV9IT^RhI5!/RRcS ]DT"IH08B%$SIYIaPzSK-;e*_-E{ oKҥ&H p@WpP'p"tlցdX@>,jl|: mhGi8}(gϓQO:n! RYffdV:Y$DIv*/zHJV$_ gVX,wHyRC'Hl`YNsNz#S%xδ~>(:27mCOO/) tќI3ɪ:GE1gqh{bP0!OP7C29xV\eBJ޹'?.f%JIh'T_'7@ٰMo}1 o(zjL])CpY,7S ӌ"AȳgQ*dumt~/kAZGk [ Tɷ|NUf9J8o;"Y[L٠{n,ȃN{%ts^1o') Vd#M$DJ%L\v=qm$ , WIu54DC50 ;ƪ E+:5a)* !y0aOyWV%y@giP|jL'x3/P.?! !T)KIRJQu|oorY ֓H,ȁشQkZ("Q(9c-J+Q"HC=Ep}@ D-B I@ ~|:[;oz`"Iq=-L*&L0*gGbf溯G3 oxzǁy^^TçI8GOMӸ{ߪEy V^*.v?"FȂqbMb6,JߧeRkǚ7fDZm\K P03g؜VQh W0v_f%}P0!R!%IDQqW w?dϿgP 7&.ǠcdJAJƼW9P*M5)솸Dw#uOc3ݽy3Mt֧\G7QqƲW18Ej7iYtH.&0g89bqkdME2zl8> rh4~a KtsҁN8T4V.oDL0qW 1KK1h\ eI,hᨫȭs;T\I5.ХѪ }~+zpBЫ\w3DUt㽮\0AtF, a̷ P(!UL; b!7NO{2H7#.U AMT~1\nuKcH}M)"ܝly7{-um۳`ÉȽv3_JACKYm-KNvoEEd=hu{ne(p- Wx>5 WF`|^{c%@FcStoe.8 ^T?|T5{2H7#.UyTL8's#<#n6w" `&\-n8#P(!+YQ$C Egi^WE&⦳?xɵ9>6 8Dg$*~,LqFeyӫ>@ 'm&P."iD le:9K~b/u2OZ.}$ Τ@xY PA|,k2w\Mhm 퐿Js'4YƤ8*:UwD6IMï`}THYnO!7ڮ3MMfEΦh_Ϯt%ZSDPh_!L=YkI7~okk*j_?\x_ߞ&N{ODvk?IUVa WA4C Qjot&ClwPdɅ4?l?*t {=SƟgJ;'TdVʻy8ɉ\~_þ=W,Z bs1 F@YHQvɇPdf4ʭMӜԀ[6""R>   %ꌘ+XP6é2/&+4&_%JHؠ {,H~y&N4Ψ *x@ۂ΂Ts~?~q/w"'T@,!' Y3b:D/);|#|Huk:ʚzW~.iۍ'd!}M&b빭d?} ,>x`Nh*æ'_MOϟ֯Aq%ڊ%;q@Pߞ7K9LJa;?'~~@$ꟿĀ9shiG/S>M,c:w<#OYéݭM*l]l.Rr¨ vIy:V L5\FvÔY>P 8SQv`C4 N(;-LlѲNR w۬V'^sؗȶ|qFpۀ:n*.n+V\Ov}BV0\s\<񸫥R.['F>Uy|k2id`EU? v!S]g0N4=OҖ3Hr\|_T×Fr؂@&aKZjգP0!9Y4<`L>n&nl(5Y#5̸+<,`N#XSu0afq4(Za7lY thD@B#ѹ]O4 }jhR D%P8TD/ κkI,;O%g B]E_UNP_+YX);9'GF ѱާu\'0u-y j 9otF1։& ~lq4Bx@4&P/!߯dq&&+E@^jSf6n: ]QKRX[6DmR:0INykۛ{9_^ XFyܑUc)|eOPFh%y;%!~Y.&v.cwgG>PA,!9PLA 69hK9\~x˙׼ Yb&~k`TQ;Lj(So\8es-J}7{%CܡcXJZ̫xw)N%kd/\:pbdxh@ZxzaH^JIlUP-!pD,Da׵䗕bLJї5+]Pքd!@bYd¡`9 G8K&~F9Ԡr$`CY-iVʾJ9lԘnj9?lIe]:SM^5Bt갶w9F;Y7þiFCrslp݌R{= s0N!}N- i\h{\/*rhO8dftBTu;{7urQ0W )+~g63W sfqTNNt. cn~>d'P@BT =*^ntmP0!?XJReuZdQZJ*u_jY&`[;NphbSC\R?0<&?BcA=Ern ʃ>=+\XP ;Y Ii(Ay]N(Dj|i3E{ u𫟅rfo9 (ŇJa")TӥVm4E%E8;W=Zw.N\UEi+TFCIMSd_?} ,CtZW6>E"3@^,NiPVx# 9=>⃼٢%?=wguqH8heicny`˄} K_Jʱ^NP/?!+HS%s5˕Qu3[y;[ߍ#ɬs_77O +DIEȮt=;zGNI K~#"i`X|ƳČ6w o4|yGy>tn4`M>U!O␜6WSFVB^LӲKp=Zn` nbz=-?ۀgH'- podkY¯.nEkrO;|Oy }BanO7e2]TLT.+Z9Bp)v&f)-Guw@0wF ,uxle=;/R bbWuSuQrPljPSPM!L| QYfTo۟W8i+_e~\YPS9?BUK(sBTyD't.$oCU{sVqnoW_WSxv2S*dݥ^KG62촪u1L TZ5Z$Sy* WOuǞesI2=λ`t~]}#3F#[s:'o]j/SޗUW5_֩iIRWcK%A# >r'€$Gp!{LK ~P-?!{yY wǮ7y9^k*T} s65fW?6)?ΓoreupwB0MZJ49@jeq" 賚 ΨSߜ?fZ'Bi_q?AVX1GC%*&4)Z~1N@Np"OM=ґ^r/VkJ9(N P&Mj^0~|!,<Ɵ]qDX7}{xq1mbeJ526]TP FOfݽZJOP2![&I~r4 2 ?rZBWKtm 𖫁c7wp$cGY W__NT8|Rtfkt3c=߽JUDP'qYf+u8`&ȩ/\Ϟp Lͣ)h6:l@SSOmN-Nn׸nݻy*N32Tׅ8xb_jSLC#pe qřN- J])ɻҧclTV9_˪]SJ lrL-ѦeVϻk7;BU ]\`6)/) }|(NapP4! oڦ_xU+S^.z]_?A|k ;/8労o*|LPEw>0yuDg0El%zUs?'hF}_|J_5$eSn^ȼ10@Yu 2%,f.nr٧\奆ϰx]`~حWO ;iIG91~ ɀ7S>G _m-(<=! 0?l#`e;gP( h !(6 { Ԏhz im q1#AAvqz~0: OoԇʛW$Xdf Tzq$9qMyٮ|A0;1^:P"_٭E8aI3>o׼] >X;Ǘ{ sf`@]iݾx) ߿_IַG _[f}9|ߔ @gwàrxPK_ "C,Eۭgoq;rJUq?L2Pl'ˏl8^zv|Z[+YeSiJ?/5%UEw&~U͢dSp;25Yp<X{joǁDݫ^M,àrqwx'?LB b䊴 }Vvg{X%TM<:.jIdףLlĶ:ٍQ͘Y=]K^~7z]Ijw5]\!P<7ƙ.FT!Ȥr>S[!րBϤ} LM8J s``)N[R|3{ѧ0Y"h&Ch؁13^lz2(߼ܸ}k(}?˕Hcp _bU=\ƯF[fx"kpFЪ婺n}`T T4t-x /q'o]ք+[F 8nѦlsFyU@|K5P: Fᕂf$*Rp^DU.3T?i_~V>C]eXx6=b5Fv*LC7W RG [!`&4-GU:I1Я&Ry*"f@d/\ V+X ZL'X=OH+ܰϱ: .Gs-a7{j%s=gOnWvCذm" C|=W/%sŅ^Frо| ("v (ɩ{ȧN8N %[,ҒHv8cA5 Ub]e@/[cT D`AXy`{UFY IWM_V2xC$^eH_0ˍ\x]DC<==?NP.!߿&"e~=Jy*L]/ucX22F>0ӣPbRh(q$'}H:n}8i@@qA%$[=Zp~1ɶ~T oiÝxM]5حtV`  7*E93ȊLO*K+LCZSr'1.X-~=J$UK&k.V<~q!)SIv P'hXc̄ $d}HD§U wcÓ]M{g+&bMû\(r`cO*tpP0!wY DʌVTKWN֏?$:X{]@wIF]6\-x5Q{|H |uԀP_ d&hz d59LmҀDCS5ФLbBHV@)T-KW)ІŴu0%J-_DmNZ(K'=_\ӝWxV9*\^os{%"^Ju޴`|oHd,0uo<-l3)7 E~O:@ZڱEPZq4? ³B2Zm[^V?6G(|Ԉ> KU,P/_!QTKy5R+5x?J;5V|'>Qf$Wsцa0(/X;-Tz TacOJGlPDw<ws!vh3*L 8qg0U/PW)GSoV߉ ݬ 5x;2GhٟmKBTN: e\̼Sw`H]gD׌j#T,&}V=l?PG7Mƹ+m!rRɻ;+;J zJЈ2f Ww/ݝq&?uewP6 #mLpP1_!ZSǝt2IUu"TUjL~h yE*H+DAsܵfRȈtzb@kmHZdu B?!9A4[ %Q_^Ly2 ;@ A)^xH1E]9p?]'4%s?1*'ѓimkC5BFTeɻN:o2:\qM<@ӿSVrT!ۙn&I*JI:ٔ-mYg9A1 % $J[Q-QcTМLVkd8Ѐ6Nc+SJ!Ldk̾O[L{r n|CC/*"S_fȎP0!SZT7 f ٭^4+f+C;tq7RSyNWDy TGLkrdP+&9Q5 ։H%tN["H/]פihwۀ uBSѨ,qsP9"P0!Z!"g+E/$DiZ4It 61iT/~zQKKJ:V>,[` DR5}YmݾˑHyDs*!: H3.zo[O 4dU^q7EF|=X ßoyT7;uhoz0n9P{7]ԑ~Faބ,Qά%٤Y`﮷^mf%@ZdֻM:~!|'~=*zrx [#͡>DW@ڒ)p"faPKWO"|- Qz CM lV#92JuN{P0!XLZ*$^iB]DWK}e'XmF ,82|PA"VOMYH |QC +W :k"B$i~0V1~vۻ=},m \Ƣ,|2nQN!{ޗ%TbB]YV " b ʦB/+n}{mVNXn R"`%%dJ]+-?)պ3x|x8'h.As1tߘ.:#0 WsFZ?ft+ 3Mvbzg>xu fiҋv\H~XRׅ_*bp P-! Yଙ pxL⭋JE汬^F^qϟ`ÊT͔-Ha zOxy뒷mĤԑ nNL?x 4rWT= @zFZTb͜RhpjTkMdm:5o֩Wr71˄O7)g갳l{!/la=u`4tN8w, B^?Vش汬^F^qϟ`+zÍD]??GW|u,ds#lc}&LB@@YDZ KIJ(ux]x;.bmWnb/40F]@i&}V,-4P1!HS_^7I\Ik|_z_kNѬGhk*(sr t2"zI>%f+*o*(%򣭁T>WV\\y&-/ۙqЪP4%stnjmh ۤroz/!Cϰ8RD7SSx 0 . v 1NL.Ɓ1fzɚxs$QյΠs%F<" DN, Xz\唇y kBD[p)ApAtILZT @8q8!I<cn2UOh(OhC[3 `H["1pP0!>ءl)MUTʁU_ 'hZ'GE0! wLRS"g-|YnrJp C%ꃖF_B|{0NlGXRbјGS1gi+h"_ ;Sd>vÏ<zweə"MLmP5LaC*h041Xm: W|k3MLv\w?tx|pǁ)գir oe::Mzc|K'1LXDcZgOեN9!oKQiiuThg,cAߟO'*=62x)>"htYEpP/!_Y&z_1l[BR7\sx s sxrp,$h& j{ ! B7TpKr}"=z`S1%t[|Nx8;p`|_U [V$Y:LvLFa:;f۟)uǑ _V[^I!)vԮ9`h4 ˀ F cQDK%H4-6 \YVytKq.C276^ @. 奫hLEiv%:=h'\Xe$-ns /M;«A pP0?!  4953[T夫^]AtmŲ*P%)Xk=>n*T좌eQh1Cܩmc;Fɗ.X +oH wPmU3ĵK0{ep:seYFd=]ua-ܧ7l21G&Zn-R5{wxNtwhBDž%lM#}#4g4; AK8@|(%14 ~5ŀSdq30nD6ga@f1:k1:S t9A,K52xT^P.!.Z T! ekԅu̺JBJW|Ҽ*dZqgO Kӣ>/D"np ݀FɀH"2Ã\c2#Tgn|,3.s~-4 HYT!S{bN%]/>x2Ӝ0Z㻶o 8k mdzp V][:\y mh#e0/mQPskR+Y (Z4J_ ρoPjA>7{-%*Z9gUN0,0By(9}DzWoq@D8>k_?kTSnx].86J{7)NUڣ[чP*!+;X 6=Ҽыe\VuO&@?9Ip4*×Xӎ +{^"5}bz;j6a>r~@@ xzT <mu;`n~.P>>{lA?3S}1(cPk>7%\s:TSO\By@"!=/iR`#?mN/9<0Wq19-x~}{|f)HlzBW 6lKBu_CX^z 371iOΦd6_ E @) .k# {ѢJETK&8` hZy&e4t@7Et_=jmڱw-Rx+J JP(!{و .椤UTU]^ɮB@]'>`|!6J@Br%fXz,A~O1z`iv d.YEjk=^3KFO9b.ܥg5=u:S%͑t .{8wxx&~Yt>%P`||0;C1тwMTj˫>R7 T8 (c[\qPPw.*Wpw݉P-!ҡB0k97 A3JRJ +P=Eӽu# 3ǁC]##j gI$(!9]kYSNH J}N58cZ& 1+D(l-}Ηaќg4 y9vg YCѠ7~-[X;oZYi4y40o+6̦!ԂwrI&iR7UOCI .꒜8aEJNk ߘ>QxT\ A%C2hU.Ba"iP3!`#FF/^}_|JS%%ZauP4,m3/{L{+2m8,e|%n1Wtn;z kq%)Mvj{d5!mua)72H$©F૴k*+1ُW6ޑ*Jas.-J0>p 2h$̛1=CN_ !7f$cJ 4!^bY z|ުb䤫L"Ug1=][^thBX?Kʪ~e_U]33d9!2KIMK+qYe%TB9RDܒ(*fn6SY=Y?)}UZ"=ɍu;0@Mk' 7cfQ@߉YT 8 )9^M>$;U읷[Ek͟EҧC}̬Itfn;ATɧvzSL6߮gs\yW "ZJk' aqQ#:kʢƕW*'=MjzN"qhuUYeXwLL5z  (Rare2xv7N-ު߆g $#V[9:! HFPpP1!YEA_wBlJ+t=L5M-wQ΅s`R*O'1)9 N9G?椝TT'yXLU%S)2B{˝cFg 9BUݨe2dc: J5%HQD컴g^9sLnWiå.{37z}ޓ &<\<[C]ͶJ9NVZg _rK6ZIMRT<_ {T6B7.Yz5iۼ̯FCZ֞fd{xj!@}>c7mP"D6%``@~ Kц7]nXvT ĹmNP0!ɻojA9[}]VUti?QĎ 6Pp} u}j0qK_08kXWԜ yu4b-u}-iHEG#QG5(_vX~ _,&ׁ .oP'qJ1 9ly<.%x()ńˇ{|rϡCO2ieڥh*Dk~r8&]VWA+UݓDop"N,>nK޷[藕ׯ2?_fx/b 57jYl28f5bΝpP1_![`"f|x{Tu32ھg߾2 n ~;95֎I䃯P]W( Nu`j(TX5 85T~<6~"C; dnGud ĀVɺ҈ ]1 F78x0 #!M}4tu9 IOζehW|VV͡4RVIm|x^ύT*ˮ//6|㓥+0xfYĭz4 (KQ cv Z-[* Zۀ HљapI EUPZ`RgtS =A-nE7M8P3! *Z\U^K(=a tuHE?'I#.ϻpA; EG+12A07ۨ Cbi1Ƣ0H\CZ~{9`qKSK-rͅԚm7̫2(_t0T[`QGJ(r_6pM*Su2"GQ3 "|gVop4(nHiw`/@$煇AHqrVS 8'(h[x~~,S? @L̑doS^jeG *mykP0!_U[a* yRqW%-l^O/>;2SFJksn5!O,0 yѯ y@j&բHBG9zF^Ўc@W߀uwENWŐ7r@ DrCFް{X sSB waE\a" ujuKE[57׼uS`a6Ӿ *a()Fb]2")٭ K[+Z+ (Rkmjp#vP%MBa't]!xfm?@U-˖]GwA >G|4uo+9PP5!+P(791x˟oo5WԹS]qI+mZADi}LH"U{vlӋRVzfZ ߩ!id |n/w~s?(:E9B Vأbg'Ǫ,4zf56*@6ϔsUá1`Bo./ Z0d \D([+ =Dt}oFJnI<ʾ 0 WjVqu]:pZqT\`_ҼxgWHs8_5RM:ܒe:ĤD4+vmE 3)hdxY&Qat 4yx\t(AQڷ,R16$( !=>A8\h+P2?!=wT1CgokD\~*j@w,>pC.+ m  2ݐ(.dtAb">GXvz;ìuq9s@<S+%IT7UoyЩrR4ӑIO n0O**xsf>V}#ʆQȈI u*J_YϚ *XP8xm0cat0r]߯,ӰFԔ|H<X 82̶Fc"eEB'!Յwu~W|&%#0qK7@-zJ$I% GEydcԧ)ˀP._! P\ s yeMLU+U2]b(kbsF &>MF9hFa7)R7:s$Q^"|q]$ 7 ޚs [s.MlpO+mnfZ46jDY2U~hG 558>w<:3(=ӏ\KQ>O .Xz)ƙ٩Ϸ}4Tk??SS2:]Lz{9Ҁ 4 ]i[yK_Ś0 ;;eާng 00NN k&9WpZ' "B"CW@  ~Bh%-@-q(f_P0! TZJFLUoFR~\&qty`Z+#)K+ ]m*a)K * HEl~.'08X娐;>9[AMcW@ިM]rU^ n dRIp p%[Ɇ+*ʶ $(`@& BY,|fQ JnD YöT2NTY'ݩ {\6 Ƈ<oZ3Ir~xADe/1%ʃGd&]aK<|շ/TнRȠJ3[UԘFUNy2g jQFMaa#IvHNS@Pf!QyrSP*KBhH}m;y,6:glS]ְj6A* nֈv-@ℱQPA!L̪AQYdx]k6jSWǜ牫gAavivT/Ji}ݘ LA$j^ZMha *apRÉ{IuwP*!{ѫY B"щ4IS8=]*Uq*deUQRchʨ$IbNQQ[|2 /L2J6 ߜg1jyD[ʆ(Gu~2(gtd w?9o '!!3G@p}6H2 ,̔jGD:4y\JnY*nyzǟ8}k\{>E+ @ "Wwߵ 39P&؋գ_5i*Im5,FN1c+D}ɺ4Zd4`t]T9$1F+8>[\+DR/}\P.!}U`G*J"Й[J⭬sRE䨩oA):j CaFT" >?X18CCS5U}z&o/Jw`W=zyNc -BW ۲ jXDgo CL3njR1՗c*uPޥT㾵5J&y2 TnQ!į 'RӤ7ԦnzmcQ!c2R "8ցqq,Lg˃t]Xf`sZ&f"xT AJ~w4NaWRuW>IRP/! TZR;PnuGDWk^Dj(n Q=LEjk.6| }B,kqk.t7'@w(Z8'* r]~Y$.;`'e d-gPH;s!F)%2^`}Piy'X l[<ݺ[~TZJTWz=˪⨊"zZ׀k$S.#^ >ԒAjpL@(pN8N c? jV}^g:bA:Rv\GOĪs yr S q> P0!/Sr(R3w󒵜J%YU}vrɓ`}~nDt.2|R@e%X9_ݥjlB)gY㿯KԞ3g咢_=tH89Y=15[ V˩3j@GZ:5_, f2qC} +hD_-iJ%J)},!l;yqڤ˺2y}?_7ee\ur !,ONp-J{ 81Ƶ3ď@2DCe  cZ֓s8]lּ=>faxg r :;0n>ͳ,؄;vUX5LdWu2UX~=8z/kQPuFס}w73~YwTGogx868h#0/ay@^Qejr 50G -=Cz\|[+ՌKμ&NOUK~H)g ԁz 0DQMBW& 2eZ O5l4ڻ.+P-! ӯnTinaKЗVjzR|/|ȒU˾*^"~wT9@#esIJe^!AEtwGgO!6e*'uK*C(11|q/A??zT7||w`9n9ϟ?' ׮@rjzfUlvBbЈ"\9uW=&7<~/|/%j"U:e VuX a!G{AA2j@/W[A#4UR5P_ @ptKQcA )EpP$?!u|Y.BhE-TmUԺɮ%AUx3yWXxj[`}or|g9t9q.<>=ݰ?7|xzW<>4Foh0A>??L:!o|xK=i5_9FrA>耕3ed+;5jIB-kwi;*W鶅ESP)wЮ@U_z@Io@C? ZpMOPJ f8P2!{VDHCccK뚹VE3LZ3PX 7)Ф@T(@es3)Y9򷳉OOfI(V3 @:ѶۢUۘ)QWhxlrz.KPc1RE]:<_t[O-GQ]O1/Q8Kq>3A?ŗ(J)򓣦sq5NkmFBQ"-B"й<$Wʲ)d}f?o|/- Lkq}<[٥޼,~w," 8y9VH)+xqhqli.kkT$ U (*\. @0'KP3!ѻV!T}nEDTo?ihcPiB!+V WwKD& lAyYv@fƤǑ0廝,u-?(w!5RθM^?r0|aT=9pl1C;U)-BŞ"Y|:^DJMq~@ɔ,HKLYMXaʘy&H1ckcD?qZ0x{jx+kWQ&Zr+k`vR9~Ig(@VbAqGBt-MHW8], GL)1g ŒGAg}}WWit= 1.Ͷ.nXCK7 Z="|Nn^>zs\ʘq8X3U$b)F\nho;de# 5mD!$/C-O,!bQ仝J:>vUЇbˁŋK.kR"Tm@pP0?! TZD(fTWUtWV}ҶdI^5veeIB0!5້NA:Xw&Lneuw 1;+;(eTd5 %f#[^]=H2Lٌ1N:yڼ8%O0>+ Wܔ߮> S>C_*u)vȬѝE C P3nq$qe:w9({MG(D S3mxZBЗ$i f#XaT)@%0P1!96Sa,DVW(IR KqǯZ skm0G++S)߉nk (Ee kbI9k;O/'XQodSS@VN5q|i߈eo*TD^ nIhc> p_*TwzU%͔gB]+ (|urԜ\yV;,22_>; z ,#G7b:- ta qi+{'g&R銆 uf~^qpna_ d2dbNkG~) (7r!'Jv.*mI_0H۷^  DP/! M/SS!*6C4hZlww淬iGKbX<w?dBKܲ{,+yKp_QyRE8)K &|=)fLD, xo~guNZf yQ/ZB0^@U%]{Df)صM 셷ܼ`?\aWMOD.xܿ9_[fLCDg?y&U*e`xD͞vAv");Dvܫ%iVZz!_u)jcҼ/r!NuSj|=2_Κ*e]eyzf<ٖ"| %$1;m 7^K?tx>|P,! ?]™X BDA *M+.[ u wF8-ܲK-G \bypWab:yf2\_;w+97}b:-f~_BXEu-ICKW%b>S: 7U# V]fU *;I͍R@:`ivqdB0%&*J.B%o)GְE}?g׼GGuk\Ӽ;9)(VYLD7vj@-o /m(S P+! BFP{f^O7rUJS$ _ ױ Oa׼PבZ?i̧S\uj*=Y4 Tkj_Se|>/8ܗXJUܷSnjQoD)9~kW媶('p?]TY52wwbpA6]ɞ\G۳ؔxW&P⤆5W%E]k7^*Fe3j8kx H*%F[_6 6ant3#jE5`v YX,w VsJXT(, Dm/P4! }HW §n-*Q%cLiWQe_=6>oԭF,HAxK0 a3 :jU|(Fp xvH5h?kfgxENKȂU @ {NV׬^M4B]er*Tۉ&8,2*Dآ$ pTlF1^Gw9,эS,#p"6MoĒUV+iW_G)ĉA$~؁ ';$&QP  L[d"Zd%9Pfk@58Hd|р\ ٟڶ[P2_! Y̔##(Dn;TuHIS&Mj7-P24 A#lZcwȺdS{t26dJPQH&[3ݺ{Gt4nXP4ಸ5g]ӹqusy=rcuGXe;ZHv% wa!냝N-BsJl (I &qBJ5*jx)WiHNWWGcFcoƪ>R+N@"+d $BoIZGqzYh+; _HHRĖe '{MdGPpq3VqȎ>3P7!+t?[YD7!B&Rw(Oșc![}Nĉgw,Y-c&M-29[@0 14&| @!! 3#( D=Ш9` `7R'yٕobgN@>if[zi:%zfH%ϲ]'@T'tW #ky=6d$_3Ϯc qo1W( Z72El!Y&Gh+3ʸI!F(6 9-,4w 6LeX2jػ?9പi x v((oˆ]+ \ %_mFkρWP2! P!(IBfp׃s{VK/>5AbQFd4(t%~y&E37V@13~==ER&8 ;͎9D%9VϑԴ7%Lg[v^w WbZ..\niwAAhS@K0 e |C A۵e\&i7TpVK/>5}: 7_EkVaDE䫓 D (? )F te:BJ]]sm-Gx<*[Q'U_5n!rCystQ=-ܴ^ ")XTּ.]P7!~fO[!J[ DDq޾*7:p+JsXWE؅˾yN+-C 3GrNIShO"<@4?߈1 \ © ɬ{FAv/#Sԛ$AL""y/zpަj7yN'??Χܓ?6;@I7Vޓc#1"Db(P2wHeVtzJ\JIiásd4#J0}IW+ I,_N\lF؉#8:POt 釰 FgoUP4!OL[C+L|. NnO/?GKP7? +JepdD7~\fjJDJLOny=_|p#  .:4U F =3 M[گ4掴Bh듃&~<guQ; ]ҚR0 ݇AD2܊i`])lAj72|oH C` y|uڅ!oc@P B&pr^^w~Wo&8Uy,Y>|ٌ1G]^v[`SB <°l8 R2pg)Q.}3DUY l3t\A O:7܎};sh>(R. m}kv݇qOZa᳀P. LeeMZiKߏ<_n8<|n|eKSՁT D{r?rI (?-2j(T0lBtoi5DKt8:1ਟ=;'X5bt5#joҋiͧuؽi+(^GZ1(ct$mkZ T[ CvB6Bј,+>>2fqje{)ꔺ$̈́B(1de/&*)Ӽzs nݞ]TQ,![?p5gO?74/>MXh18P+? {BAАt"]U黽nDTޤMPvh(ur NN yW%E}5_W JwǕו`A ֮,IKM-+{5 -" 96ߢq?޴.мT9Fhڍ>C+F)єp؄*к. ̺%<5}7] t(δ^-h:,6.ˇ_S|#u_DKY}lmU븘ih[ UZ$2E\]o@[C :s]T,(i%?f@9;v$)P-! Y)GCҵ{,$]X^p<(MLB4ʈZUYL:z[K2@ {ߌ 2^zL)Rm~n{ 1YQ\komIk/]Yϳ"Hj{51799%p%`;{j}C}k/yQ᧺?/Ďj+Qf<`9ʰ(rNqjk<uaZ[-K )s~?EYw ^q2}!4o{sn:+=e@g© 25w}yq3%hٴ |r۔P: +R i!>=]Mz.qUz$pvN"$q}['z8J'*MFlAr4l+LC5]ii,&˂÷}8&wxC*F3>AҨ ^fxg4cYYoyETgJ&if); z5zWG2إ͵GKnޥؾ jjWe0إ%@Ϟa{y%eJd?(N|l>>>S]F㋾䪄x 2vs@zaDZcN#Wf.q5̗ٙv+bCX w&rI(n +A6넷uݨs2\LU_ ,Q'%f-\TٓႡP' 'u߃;P8 Le(ͩpqJx{sPm#~FFn 23/a*Ɲ߼19 @DL6(p6q^&nSF F9+wkX[wN%T h.U+֘Z#X^T x 4qZ# @頚՚ת1@Hln$u-#AR Aq3Ś"d']ep-W78YMW~x~Ir}{oO{z螆E%wc,)]tAB%g }we2D4g/E(CDGQ˫$INQ(1}yݹuZ_mոɻun$oXVoڠP2 {JB1虚*U5LA)/)3tB8Gq rs]nfHz3D^)D2Ј@䥫VdɇRw3j'LCMgFvgpռMB٘eWhd7 4l>$RuܝIjm|*ӜP-!ݿVYVɡNn+ZRl{(-K.t(]LO"b\4/WcoQ<atm߲<>qO%B~'EP[oI5T:v"ukx46nN7ܫ^Xw?CwwI;N& _inNMo>3S "GFK[6p_4ΐ(SY%FC71I .ܥ%M0#qwJ; TW we}}S1[kl'~v|\59DӖME1-"1;Vn ~!b%Je:43굨OWEC8L/׬׮>=Myp^_\eQG͒ P Q:L!SgcP0!QR[)jCk/w LD΀yK;cˑSTLS_^ayQ߄4ppBQc8CB!UDݢ*glImg k]P]8Tj ˔*bޭ3\a\1CVT}Rª:Rw HAFʵz]s{H 񆨢JmrNF®t MD*C  =ac?@A9˰i7 f b  Vn8HJ$n&k:hXY.[3Vc|-1{NP-!Rip5hT\^jWߧ*m9gT=LСkX{sFN/7nI% +BNwf 񍃲M rkw0g; pVa Dž?jRb+yvi+#5KJ||;@MU.JpǛs?s -lU߽F:/{.Mc;>wQ9 d.eB`NVb@ be xib Xmr7\08P,?!SةnX)'D2X.fLL篟k.**TԾp8fb0Nyryc7Tc}g9伉CDN!)csΰI( _nBD D61G Z@I ^Zc\[ Uվe{@|O͟⽳}k^4#jT);jo"S$q_>מ_@5 (E/V|skq4M4h5D EFʬ[3K?)@ϥYvx4W *cOlcM'n|x;`J &Hzu`pP(!1^)1eMܽRn:RzQ zLssDe_<|b ר>~ .H-Ҝ8T:,qŵGx'40K{-?]ˇ׼C*#Aa/s6p1gre@,XP ?bx}0b+)+"(CڲϫdJReFu)) r= odo Zkik>J2%s<*qMjjKP*!gB,lP5ɬKy@:2'+ yS_EtIaHܒ AADPk ]U/ъ0NʼJW<+U &x323"LYzxn DӐĸPU=R*łDudZ"zGl(K*jRjf^TނRC.RvkUB+,P6oY_>:eJU%ku`BIv>棃 h(dgB oGcI~ `mpznom7mݾjN<*U4wM4jG7]uҺ Cbl@rD2QO7:w03M(%AmsX\GUR2oȶ$L r3Ӹ,@$X Y4HQK3HϠFg!q#\qx;c]b+OC~0P0+O: Ӊ1ƥ <;3u|3!>ktP0!+g[$6׭Ws:p^&8˔&ώs_6".iB8ӫ*!DXmꮇ8aO4j;GӹBLct1 oTciҔGӞw͔u`'KC4H%twivfp+}PD=ƑR֍9:h >k njR[]bS^M{xXFq).M@ihǜ+Ȟy/}2`2uhfUTp:Hb_ ;Er4a|^^rM{<~DT;ţ&L6J]H/g 4d<0P`>Xϔ' p$(RWPO!L؋>YfOIQ/Y߯wǯ =|OοyRo\|Ons_q`[ VӰØ7,!LUQc4PL&#@6f$3vYҺ;kW/䧬O:TGe2:"g @ߎCZvޓ 51EĻ S0?Y%k[-8XS qf?iԁ<Na*Bm"EhXhp'pJQdޕq6}oaʈ[cz Z5~`L%#< l*ii+g|BٌMAө:ɀ=re,eլ3F#e-tZQfiL,gj{οާO>~?ZAh&UlXH [rJPMɇƣfaDX\9|Elҙyw=^R|u2ȕSqC(Ec>GɾT mmn[Zsu:c~2dav]?7V3}KG;oVlKufKꞝp Gp`ʯpoTx8P; LDz&yeUf9bi%5{^`;8ϝ\T?0:Ndjƒmu (Ϩd u!&r3Ê2gQWܾ;TwNۃ֡_4K5lx #ꓝGaSLt]~-|Y=@H!FU*v*:X@rqP/AH#$NŖT:5w$ɯ>Ͽ݄)0(L}psqb.׬|06`X=SJ#HIRʸI)W^yE'@7r].6  +Q(5x ξ]] w[^Yz[h{.!VetAN k fex|;bOo{dq%Ā͸4ۜ ;(B5`c? pP3_ {: Ba &_*{V^J׏|F_< xdˢ^sGLJY b&/mv_jG vEW;? AmUA}z-%T߽!!\}s283̈UL޷W~Bԧ[-P3uqdy1z7,lC ЙI7"YR^\ݾ$n:?  0FV1gĊ&!3!,+˲Rz~ +I J% ܴVfDJ+ tz@<784FYdY 4Xu@RSstTN|*L2yŵCOkƗK*PP(!Raq* A3LZ'Knu-4~:DUL5 Ҭ" 2%Ȑ#rBD ^4_) 0O'sT,edC\@6l0OTEg<MUaLz[㦃>𚕶n͗jB\KqU:3nhLUopOӽIW亊\ ncavmNb#EAld Sd3w?{&7ijrh&.}P-! gVZXCT3IR.RiZdO zQ2**q4Q"Ӌ.k:tYW:8fduҢv,Ǧǣ;HTjV5)mP4ck~Eej[u4s*nghKlnEOOҪ>6d4;~ ]'+gZՖ*Px_FjL*U*BM+_Ј ͺ%PG:ݲWW?z 'f^v6nJ/|eO>55_V aI:a$pB\`A1i &.h~ȝ T?ge4~XҘo\ {j"EFj7ehEvSG & /// bJ !@SGb[C~ 1raZh㫴d(r3||\ޯ':k!*L<\peWN~6/x 8cx2GA@~qa"= zs5Mqg6%N=no2E9;rݫ'}tuTu|{cKK" N Z^ĖkpP1!)oyWR-qu5eOe%l'Wh5RhgI`#BҥiN o~C=u]sMq~jr̋Hޥ`[.dz16pNޓnve%D:Yp jӽ̫,Y- V E[ZoyWovil;U^/E@O^W@h L̆?:|bL%eQnX=5, egTVa"E8*JH)fC79b &7wDgaȽ#{\"wH?-"˂EFi ƁWP0! -Oa2&* ! /ӭwRC-W+?|crJrS.ۭB%S'Wm UОOύ`I&{IG5;>@c6倫X_<䯍n=q=Mb֤ep10Pd#b8K(n{7Y"Aόɀ7Q=Ku:*ދQa*CF :W]T]Rr9SB#i*QnF2WS-U k2/ @Rs׋[,àڔ Yiw+Xvs.sJ8*՜wUoH ]яҽb<ύbD[nh0>3h[dkb P/! [SةuIJ筴/ .qW\fٲ]t.ݜUFEu2fxBՑgqLSZ~'d*K\V}y0Y/K0!9ba8sB`&):bkpȹޟS ;H1"tGbNXO{oO%=s!;]j2g[{yr[!WP*}K :1gY qƔeT$A#kY1\,d@@3- Qt+3_ ;>J$S/ h/)7y9"VS2M<iP0?! TS0Umgq3*ZeRL3A l FkJqE3RVaYyP_eQ%qM#. '6&h / 5/0یY}#kx̛?) _.,[w0XEAW8.м\XcO'Eht/MΐtM,pQb ­o#/J5Kֲ?ihC zUX;\<4 ӁmJ1Ғkviئ C(rrT YrԌjBѹd= O?#*b}⼜gnY~ %ұKFX+lpP2!3{Rݕ"c;U]n%W)h-]DF P/H*f+brXEhmw#X[?H&mƱ},vGNSB)(<9rH OTt򨄟:^~ c` g7kvQ2ү2N+mds 0T-\Y$Fޫ8ItVuZTgr{))=mt*D^m*nlB4p +O^pu'"{'.OlmxyG)Y@lJѐ+N7Jl>fW )zDTP1Lavc57.107.100B61T7 y\sߟ|*RMn똚?W.Dgi<0\QҠ߂8As{QHM0˝:I|=<K[JaG/4e* :9c:JSo3ui'1O [oI<26tu8 \1ؓ}_W, #֐PT!k93JϘI5MW P\wckXRݕ4`fwSyVJa7mr1,ӻS(Ib]OR'9(# َn]" IK~j!y"Z`3P/! ~BRY*H9֨387)[6WC)SҔ'{""OLdU3 鹲a>g#YO#$6jzTap J U0!ߔ4EZ"mU:u2-4c* -IfnLphqύYltbGr+tngso7&b=D"Јt7~kN7׋U*4yj|Wq)o8EK|zcc2]SwGC 47AY<$DQ8%`*VNxK~s (/ZN@ X8Kj։zxP0! WQ[}Hg<|vT\U.<뻵RX 8 Y+K!rz(cަBG12֡c#n_߽mΚ{`jx wBW%&V8j&;DUԬՀ//虱)icFp "7tr0$'"U<`g#И{rEo.I;tZI+D\dqe;(1xZQ bd}TYoC1<Гڭß'w]qwlf"t‹j!P^u[D i)BpP-!+ R @B!f~U/zQ O"8vO(M$ "^ѭBs!"J *f#}|Klu5WaV!+ וmJnixSui=>- EZFD7pq^vJd%%sbmƖR " ;'ޑ] =6zhk4&4?vNtϪ96y!>Z}T@PSIU-JGs}S #~™ Ha.w:|8PC!L̿E@RAF|fF.om2{Ns?#uu83qǍH|:,摹NL]Ը$ʵ: V`i 9xT~0w`v5`.jNAc ybjd!@RԬ>޶g)ܭ>5L=W2gLoO` Z@gq[tNdu|,Oop>$EB!Dg_4½F c潧=X>{W~xƷg8qw;PvNp-dnh4}yB(t?80Ӛ"\gK;!AYǶ_t'?wNq6FM[X5%ԍqR Tk^-^8Ld&]tqi2 _a1Ő M^7}}TtLO,L p&qe,s4)Q};t}8@Hrpz <|{_:P*?!{`[3`,IDfjsa oqlLTE`zNvHD u|47p]y/ (~1'hdtO+^F[Gj2>?:FUM&A[#ȥEP^-_7WU@ tLX:' q{f,oj1cz\/%XoAcϗ6uLPd.38Iyԁc)=ޱQ^A\ITM`P.?!VS*F B!(Z̓Vg%S5_ jImL(s{3 ncq @fڶNvC-0h*4jr O5Mo*n1R4Msˎ:VRhw`ifwD^BV]1x/ ,' [(ٌ1@3тY*(GCh>1|YR7U?+S[|xhlÕ!t,Ƣt)e%4AhG*p?t?Bn<~+y Fq#􃼬r0`7{@M@h&?b)P-! nhVҡL4FbAsz)ֲzu[o(7Bح^r^N\xH (Dl G[^ЬrB'WFzhY2cVX |%PVcSOo)pSJi<E)߶3 kH'W,Ceۧ &Iuk D)DqD:MZnz2k_Hr93$R@x1~+^4H%8¬13А5(Mx= =q%9BoZZVxLȳue"+8qݓQ Y&Gw)P0! {VSخ2%Ш82.gk?#=R bux;)ZĀaaNj_ P(QN ۟<-]qZT_KX8ټXZǮ"VÙ%2%|x_1$jzx)xū~ G 7-Zx:#G}k)L+  B(M~/sz9W~[=VSkO_2 / 5F2wB[ҏNfKľ2\qx^pJzqPZ +['7b-~N:Ǘ~d*iDN/w}xh_YLdO*+(P/!&T l ѡP Z&Um%[wS]}sg"G5 ^6~bIxJd!YfSnx#aSu'ڱU"{@P=z[RZ8 b&OrJ@2/3ngur\9 lL.Ba+V-(BMV@R!(5B&D-{ϚֶvĩW榞_oq֝ NF'.,TU;Xh6FId7_u2=3 5dIA;u_rtEI% HF$jB2`n(>р?(<8cHpP/!"UTZ7:J4.w3]Vsy\OC6E'* eY5ԍS- 7ӎv>$ƓɣͷI-تV7ZX798hRXEvڢ0 ˋGnP+4eZ?wY$3qI]m  ix%.Au1 ɺiޔ}Q1A_s^O{D:k;z:'HFz!yh(a;Cu6eIȦ)0+A* _.aw-?Zqe04)@y_@P.! ~TYi,w͡p&M }KuAy%jUƤwz㬿: {yFD=܊A9" sY:.G@jacÀ1y:UdnpN{QjDŽQu7-MS͈wj4kIū bUep*yWp.αi@We @@ @=1P0!]E~Q\ R1hHz lRW+⬫Ο?_ 70Ӟ49`*7)1#En0muլ^^)bN7,צx֢.uqWئl~'>XV2pXU2}i$ (u\xمrz6j5*~WJ3 ;w2U.F(Јm{/ל[W5>?Ov ztd[,NE|]^ɋL tk4 wCEΥ# \p Eʘ [ J. G8P-!X^R٪ M D1hƦR&"[_;ݰ}H8wnZ?%\$w] *)wr dU#\s,EFQrSd.''bqإ2\aFyyϊ8zyV)VTKp+tBMšTwN?^*[x_x@2JXUG3Y2{#zNPl( ]},a9Vcv5? Tn~ HLU 5 k01j.&c` `&wP/! 0SQ A6JC+s\j]An~_?lA3G6!Y|yF-uMu7u?! ӂ=pq!BqӷReQ5iS-=tEN\¶I TԢKT5FJxi0)c~X+JyHv174>><:!68l" F7BLa9 &ExHL=_ْun{U?'4z]h"uɣ(nĈS3TNGq,-c^O6dʲ$ycނJ+߄ǡ"ױPȅu P"_!.YH(V2!iԙ^՚Z>QQ9@'ӗw:2[ُe:0k^/dA'>bIorv4gOHK|i>_(H`n=-V B! t-C]}M>3X _<9]]WmU@L?d4<N<<=`\>z@; < 1}?pP1!LxW@H$b*e2Г/=M3yߍ1^(@Tg-W"FP!Sg&Swm\'m88Gr"X`N^ s _ ?T~'*}ZRL"q&gCJ:bXae0O`uP?Ŧ z\zh 4s=b!ANO}#ń q':6D%"V % |,%RTW7DBL|dsRE7,H Jj.4JAe{uK0!PM4vρgYpG8XϏrq8ꄛ]SCˁ40 doTieFA+ *4(* i`8P/! UZg nf~^wj$^ n__ ݛ|W@䀂lbA@%4c.N:FRTրlcP."p~( =4pUp)Q]&A~OOyg⠍"F\ 4R=p˱ՊXNf|Q>ʓbE ~`@M~OzS ֪BAwno E/pu7/JtEᚗkvdT8;A$AIAHh_5Db@Lx|X9G:xf3(jq֣SvNȬ.pKP8P-!~TZGi!+4"EUn]DuUNV."~X"Mm:Yfi'ѦJ:xH _yqCjwWoUa/Ϟp"(%r|]PD,~*/ELf?ak?J Fn'-\)Ϣ>|[pn9x{6Y^'U ?D<T _wơ5UszQU_LVoeg (n!:In?ŕI[0 ;/QN$1(|<͟).T%ZЎo>eKp6[uSt:5Q t8P: +hS%A oܮ*]Js{+Ul3nea0V9܊(g/5SNזsJ-RG2&=ݯKt@<]XSPA(!鱤n勷B 6}2?i߭Zm&ĿS + B5m㫈7}y΍%Ƙ47XR:4Al+WVIU°ǰGP3? LD|uZiΗ/ď;xWk'u]Wrĩjgrtus #p۾p{2䖔psKH58|?GfuueEC=sOņ g')Af=iq)0`k%g dnɚ(LP)Mwyw;,;Y?VSf TOe4X ;d-|ΦsµRV%g;꒴L5/@C6Q-%{XGtJc*"شM' ҅4aFA77B@r;fD8Z@ĹFWJ mij@ wXuO=St!>Y`I~8P6 {k Ab+ *&kǶI2@ꟿIbBUJ[߿.ZpI$ҕ+eCOKs_H.A=x0:_] \˪b꼶" 0r TX\`]TW jf@0d@vf@4L^Un +wTWŪH/` c2bbX c3q!iB#BܺER3 Z=KW Ė?s(~yބ^y,$\-YU;;|n醂t?غ݈ܢ 3 V]vJYTք %@3"^  'Tj㣍Ȓ0;'9ѽW+*TaP.!iTR%f] BAhT&] DqxƷol7~1JTpq #{2."&5̆Yt^e[K8˕-8JgZJtQҎODQa=G@$zUvgEj  W9'=%8),X7@? Z48L7ͯNxƷuʜ=kBkS[/ZWY T}}#"6, @i˂pi +OVV6O?>_S:/2^e[m/spnP0! SSXDcpD-kzT@Y{d-4y<"=.FqGM'v%vj҆~^)A `Ͽ3Z3OXnYk]7'ذU _Ҵs_JwᵺcYx7Q,l./~/@jiT(!M!*oo523*Vj??_S;uX:Ȓe1a BQ>)O u` /dtr6nh=@#)o5e;3V}lXm0Ê  r@VΊ BhpP.!S[ m BB8z)V$[Q2=_^18J%Ρ3K5尚Qb31 ƌLg.L~m9wE{?W~ nIp1m5~z,Q۬t?c%]Ҽs;V]m K8u>@_d@KhdKDZ1 D׎ U#y,d)_;ыy?0/wN]&`~(ll)^N ӬN`%e}!63!HXB GD:$ʓ5]n%Le}[ax3vL_s:c5Ͷ2b]6T"IdRY{9tpxu~ֺS_'̀ \jLuR:T"IgrB"0 k, $P2!n5[7y9*nKJJܔ_ʿ?uOPEEVÆ0Z:S-}kR$$u 츼@*3 YB2&9dAVάZDA^rWyគ gB7' ϸionyXvY6P-_! oPZ B1LD- D$_-*!֦u;a!ٞcEBz'`.ǁygl%f&Id@;b@t>'P%aX{#"'T]/PZ T$6Vr?w ` < 0׃@caYsQ܌IA"ш|Z&іW{UBek|ndžgo)eL5研T[`bH6D-P. f  ~%3JaG!"W &?j&WQR)lސ2| -:%E`\ֲ8%`}̒̾9\: ZqD)Wy '~ o pP'!+TP0D9Baz&\wmVeǖW/x*t5*`C&S M陾߆Z"10L z;|s3qlѲC){iTΛ6 ~DwHX" .I$515=N.@#r jQ0!FWVe[Y].^ y<0:<٭5 еtVӬj = /@ԿĔ5˸3L}`TPF!LZ>.olmӞU|_'W\Wx8>޼׷U9?^6i`9-K*z(u?T.ho5\Cca"r7 <@c,UƵ xmǾTm\su?kAn|ۛPZKx Ԟo*PoկL)8ű xu7vǩ8KL>I#\$N_; xHg6}XԟNetӳ{`5iχ=N|\9jˍr*Kwzs ;@,P1C3I1 ś%;ҚAʹ3-M7D'fڙ:b_j 1m} ܙq'c5K9 3Y琶l@esi-^( PB?"pM.[SG+9`m|?0}X+n P4_!Lҟ?+6iv뮳eqZVT{fy}R4lhߐi-H<P { fo`I+VDž8t08 B+ %rz~9?^V4R:b>t8 ٭[/m-pe3wޫn<']A[}d'{MnOY:켮W򁛥Dұt^;ӌ^ bl: [X>2l5nmzn 6Cќ*@ Zƴ9}:[SOW^{g "*>T$Y.{2Rp26P-_!_Y+ c:V$̨du] plHƖ1 :NUE>+t&2`ռӓea0AFa=VL`m 0|?dW$UVO:tX> t*MʰZ[sAUC,/Ė׵> ;rv^f=Y/wQn#@Kђy+<~Q|aCC=pەkW%UeBn2]+c R WyEoB=*+V;03U&ksF~K$x '3e 3(4i:SьxP/!  #>j˔*_O˭£??GJTnGqJxC4 e<Ձ j K{"P+뜩]5ma9хΌgoe>B(~h<E~M(t3tMUN>};&+iil䉳ԪK9tYN {kt}|?K&qS.Qu{{vuʯz?Z][<3lmqťB9{-v-D%ybˇ//%[vWFqq=ܵedJJX!ZNj8P@ uC ,dX3}oNZVZ$tI 6Tnov_ixO77uA٤}Bct.w}PPTQͭ"'t9@ǘl*ξ ߬]q8[eA("ϵLLQVxKR>ӂq{s( 2qUBbC~K}+ą_*+eKDI1y aqyFR= N:ѓNJ#:4Ч֘h_ȄqRLCMc=Od: $9/ۺװF$P?,ݏ\ ]y)P>  4WHܹUsY[)_[<ִc]ЀdM%u.E*h, Ws2}Z٤0ԗ{oPL>]C~&7!ӤgDg,&ZDRb>+^;I)qV̤Yqw0H[/ ^1$+8k,'2zaiFPJ50ϟ0DHvV$3ricwRȨ d2 @HEbcKB8]yd஍TQU 4\4 аI`0=?V %h 3q{[]qU %oD^P*! sYQ,+ 0P:m'2jU]\KnG|?mE.ɼƌ*qpDR?Z#FCC4s80PN8aQ8`f%i YY IާȢOizT~f']wF%9[M^^l*8"j.h5l aoa*nIWXYE:ED: D㫩%%I(ڻ^X/&U{BD֫aX$B\}:cui`+RŨSZZ&v-=G0-ILP.!VS,4j9꧎sR s"_F4:3H6(MJrmr5dQnQzi>&4~tr1 A'#*NVKj L#B7>&qWvIgSf7Q[7: tgF nlBL9hb2 h6E9%gIU+B)q?8ӍyXg:ܶKƉzΙnaQi^MdR!K\P;;{ZⓁ;Xs$ ҃v.MXҀ" Ӕu?P*!VQD6*gܭeJ ǩ8mPijͮ%|>"-ct&2 qWZ26[' /1mk?=վ;J>Si`)bX[e40#, Ob;-q|wx oᙋȖBз*)2!"}+.*T^GN2[Tm%d/C_d\!R$%01È qx,^>&V u뛼ZqYz_1TMJSXM@#P.!_UYT"ܤNuTU+۪ACVm՜c,9ق4q'#ΩUXG `e#%p~(qUzNؓ9RKA+\C|PMO. 墏a 7}govns7[[/F]ʔc %]o:Usľkb >a.. 5\-m̍ˏkUBld^U)/׵_=gS*d{o۪A5H ]yV.JσY;dc4^L,ڴ ɳ_^%t'={[<ʈLRlUv3JpO=,$զB-W޳TBvrs{mPeJHQB* @#̿"hsזI6aGS櫁>_dXW5YjX_̛NW_/7H:=wP 7%OwP,!#|TةnBCИ* jq%*=asWY,Q`Gy[iGwܺ[}Ş@?M/ȼcj"::gt/:u:6u}&&Mz@ZvCpyh2~SЖ/+g%49Lt "Ԡf2BDz!/U^KU*Թw3"ݚ'^A;ZVEՎ3 pU/?7u]kH_= ̇Kع?=DBI:Ѧ[r _/di?P-! SکL$1Ͽi1rbeԙMwux~ k--Oq;Vlq\ gV1RnD m1 Q% G!|ɷ jGpo8x)|Snih 1MCNg 5CE]8HTM nBˍxar6 ϝ @Nрh%)CfkS><*&]]I|d߷wW0%N^:gVP+hFp/(ADB::R#?P$i8+-M BPB~v_vѴ<{CY^Wx=ZzYfp9[ѬyހP7 +C-S5o{Z2]^d"vyϧ2$u|)zsKlT6 $Z)( 5_8;Z" P%wd9QC> 8g1D]û#Ŕϋ@ \rӼ5mzC@ɥ)p%Ǩ"hb% tEP0i[lT+Vl]$ Uٟ\bjoUyݚw̲^ԕ1ƈg!OW-U(pq@>SH%ӕ]TㅫlST{wqjd<4lUƌpZ/]M*N>UƫmO/Nt{cKO"zEJxR//P1? Lem6j2tMS\.gx8>8nqmh5;l.hANJTkԍ)+@;> X/N`s'>+pr+ZGJo#V]UDmGg JD,$gЕn6ǚd>z }Gmpbp''=fv3b Ay"30#Q4Odx8]JT5EbShL: BBtB652kR~iOmk-zs~3S,Pؓd2 06ׇw ANA-((<ZtNpRUݩ)$Ƨa-%CVmFUf<M!L;h-,b%&_?i;=uҠ~l;# J#wڗE{oyIQ^d{6K/60.ysd\QS 01U .Ⱥ oq 0.@ro*fII OtzD*H ܘP+_!{Ya,x $I<=RMnլWuRJU&Jac֝_!I蠏-3)4I԰(b_^t ©DW«1\T1W.zМg_6KmUkT捸QG-h@N Rx6POzshlC)}2|@Yw?/<W_Ywlr 9O]~jrݫX2ꤕΪMDɦK%q:,wOZu9WY 0U]GeP!xƥFS9B {nfmM ;z=HSVJ8j<:tZ֜>|4Y@O<I8 yB QUq)ZĕQ5trPsi1Ue3SCm_ =$C{ af Oh,ׇǔ_x{sN3Nɿ@{A SpJcZm@̋MOP3!_6…#[ӎm8y痓 5.Tm_n8--IWazφ@,/41rN[6~' ]nO+I 5zdc_KukKxPL^$gn NXbJߓf050&T;ij!3B7?i:cOW9A<9kaB49]8کq/&k*] 2rڇuܣwq$#ZdINiQ/rڋ,Q:m3@P%eFY_nެ=qm'2]tn,;OFFfC5рKh[%5f [q/P0! YatQ f~=ViRJ{uɬ&a6vZWB|6;\,WL.DL)@-$|όЊyuv'Ӽ/B}bHW*KfE3W^۳B2ix EVj,Oc]ʝVD-Sʴ_Β#_o PixaOPQڒ%nPUe~=ViRJ{uɬ&rW9N1"V\GKp[UlNPp(Õ)7..x1DR+I{t*Kע~L☹L~D6՗7kת֊҇P+!QЎR1ӌW"u+Y%]jtg_ՙ,[YpӮWл_H 7 59dG5huӠA n]y(Cw?[ I1k}0-i gQ wq>!}0{K<`Łwws +a@Z;2ZEqVJsonο 2y~@T\ <9HY+ Bh yj*rqP(?!C#qUn~n^ȥGʙ}'p\x WDrK ,|<<Kͧfͻuz✿o8\>R?;cW[bGwR{<{?Rx?@6\V'*< +p?܀`0 .ԅS 0,L+V*kby;n^ȥGʙUU3vIeMoH?$6hޗ9;ZP1_!ZU  CռqI3a;\Ȃ_clƕtka< [()46F/13@ЀMֳLD: i UcjsCZWǾ5YϰdAMsw#e?U܉ rrSR] T\t嶻z} _Z>x^rԏvP9!*HhMNy ǂNe2o5y?ua`Y>ֿ&Z7J(uXfnI}16>Ɯdp('HuT :*;_"h%|]0+?ϟA;d$ ̤ut ґ:65ߗ&a@EFuIcpr"H ^GDߏh č 9)}s'v(1SZǪ!z'7E@tVd(F+o&ηzLs/\y =+NMsQޒxib7.f8 a5 L(ziƒ5>JFsO0ZjH!V`d(V=g O2p'n9|BBY|>5w:LTѾ\TKޯ߸w+,Th:tfCl^aU);=#k9pJUKX]_9qΠK޴!~qjA sS2j+&1邠l~ όewx?rq/M 둫F3N;}Ћ2tP5!\$^޲f|x<&]3?jtefDJo>pv7@,pn3 ^yFs_qh]ILSTsQ;!ʅ eL doןCn֬' aQ@ 7hzS/[iߩCdf`m?eM9Ś)b%1oZzOg5#JjtUj| hpKן8Ԛ<&]3?j5CXtqkO~Wو(U, ul-;l4$/E GR`PTMFnӘ!o'8Fvvh d,mWhV@3) 7]b.'SehKt3K1Yw3 fuЗ`3Wy!4;ʺΌ/ JWSS,`r֛c2HCӔinjRlD^r蛮⺙(^=SP6'۳ݜZH^w tIqp/ A6 X 0ae@ zdlW@jP^ %Wb +|P5_! n ~%yuΟ^Q)8REqNl:_yRsTd9UB:U]:=`x5hq$67) C֓@3м^20qF!ļlLdSKԜ&YSQpuIvׯ5r=&yM\箯w_i(Ւ!cKy_<*%'ΨNx/ְNF]66_9qZ@`0PG8(vlYg|Wݨ59чbF6b.w<89jB%RzL?7 Rj5\ _1+u_θonP4_!7n73׭:5kɒjMKnu&AS{09+|$;),EƊP%cMnÝO*N˥ԆypצD-?0J JgWFBz]6v6/Y@=WwsQ<o'~O3(.k <PJj}p=; fUäjE:2Ld@Όmv偫r܎ǞqZ؛:OQ3}*U{s|*D7/:(4#-^t%&G=R , 5U+Ռ 9 Ps W+83]ގ8 wоf(h*o@@SԒJ/O;f/rQ' Ԟ'k{daP1!OܠgbWvET52K`v7c(zCZRmyÆh8NV2)=]$dc͌B8E * I &EzYH^{$xBg(}A}8{uwoweb m_2c?$_]01yqc#DXaZx]=H;~bvgg Ğ2W>?(UCY.Թ"E{ijV(E"'U FD9o#ٌe%o_F"umXx[y浹:ug ǔ4I11RDlxߞ w? @EP4`O`g P1!oOjt8aW3LKg #nӮA SjZr`nI Gޮ,[k#$W1" fCt'3쿏GKɍ.3eڻH)\+!ŀ Ζ 9g C<N~*Bۈ >QџQTM~%kw{q>&ise^ >sϴ_UxA.WZ _ES""tckn-hCbm5Z/gsz<ƺ:ǒ2%oPJ?ogDeOSD-@HIP1! Q\j]ľ9T^]+U48(4'Onљ[z~u8B,1jFtav+VdHd9O!Rs#ڹtcXr5Q._cb)Ir&RA P*(`P`l">Jp6q_6І&ꗴuû3Po!&>+M}>m-9[Ja3JUߎ8SYytTӿ]C50Xa\Z=jj:J&pNI+qnM Uа#0%@6<6[+ȌjH8P/! Oj8]S5R5_]/{xԩ%}p:l+vo;BÎwLxIE^8QF (|(֍#i:4V$pA"LRWIgVkӧä 7,\HRs"TcS{ @?oZU yn|S#n%/m%-fO u(f_TTU!5_o$b,C45. d;5 1}$E; ix="` +=!TTrqn,zWz,!0;, f3U<*P.!TJ}&Rz޵LT ΢%4Z6*U&<Ʊ tҔd0c(WOl/`?ݿ OKŇ9f~v;|?}12 Ju;M0 VŇQ|P}ILR(TB1w4(sQgOKFm#F$<>y4Hb}yl߽+tCc{zZ*5T^zz5U=t\/'  pP8 Ca%zȮ2].RxitP%y$pFow訆l^rV.0-D&Fu~SlчJ{wZUijZu%Y!^QoQ-${:Y󮤴uw}BzPñ[w1ӂ|&ZxMw@ kM.}qVY)SF~۬Td~کy4hN{5WV׾;^uXB"Q炶f^g{Kr k- ̆\ Mf"g>|0nWo\T!lŢ-r%6i.XSLSƛ|'yiYӷCa5&>Mr9a=_{yjүc l5tَP< d(F7s>7:Bkk^R_W,cj1%.J'j/S%`-Yԡy#QJ3OU*^{F&mmwUd# 1-/z<?2޵Wۍ.}8DY;+/|):*#:mw!xʱ}Oseǭߑ]AdbpPa >D |US| /3&je jLATb 6m|F)@N?= 2;\VLR`NMj>\bbS9oohX /H'DRBdҜZse4Ncz˰~/O IdE{yXt13=[LySom/ { 4xB"870֙*R43}SodLd("}ۚt stp WteCNIYnfESU5xtth_kWY U𥺚ՠ]h{nꍝNŽRةg`nIuiAذE(b&V;v2pP/! zW I5hU"oN笙{2N\$a7,7p;|&s.8M㡍P L`>w!8aT&^ ĠqSNN$ z0L~1eGPzGlPu 7F%׋J.[WJyGXdsX Çbd+U*DQ9j\n&^V(cH,K)f4y(z*Lςg1V[*hm4ۿ<,: ؠE ! SX#q@5{}ftiԲy%5;2nj E( 8P,?!+sVYU9Bg6\ܩJ!W9zK? 9Sg+L\ o~ 8XXCxVJ ͣ.b?n6TMҸ~.a5Gjotb,7YZ:;3L|٬UjX+\Z J[Z*zxp$'[7JJ3n=?åQ(]dMhDzB!l0jq9Zs}UW)˵3cR$h",d=cTQzaHP0It8W }6,%g]+9] *挐0mj;)T&tɭx{]DǴ// QhUF'-iDk!j\b;f9:);8QJR8ARvJjH>ܮOT8z"%.}Pq@3r\P.!.V[E9PW׽gQ*%V<ݿpgG=RmGdfCUr↜Ey0tnTp>8R5BbUⶲUutčOװ_ )_7nQ\1B:`RzW* b} g\-h{`-RS xvszW!RB!3UW]NzoIIy%+[|q<*ReyIV"?Ĩ,`Aiv`#;[Ef<.h+3JEYl/;ȬCvGVә/R nc@ 7<ҶEQ7:Xx"pP.!sETܠND5=7&jEGO1~aƫ(VmBC-v)JsSq rltR JXl!G=^s^`^+q7vO-ORyd3M.P;+78l *IPR^PM ~\4 {h4xQ1nqfU[`W㪞|.fyi QQּݵLqݱAE0}(dۮ8L@>}̙.1 D;Dhֹp살&)b誊\հ H=JLQeIS..'P+_!GR0Z3dJfǷ>@u~@B羖ou$,|.ndp{q8*YHl" {#^9;}磖rjurrOdbu\؍e wX@beڨei|mʄls@EWJF{hSfMɠWݯ3 k%T^3^W۟`*5M|"0Bm=ޮoqc^w20Il4+F1<̺Y|vw_ 5- (;D&H?>P~#P._! ?TY鎓2PɾrX:W/\?Kt}0a|go"#m`r; f\ČA=>t2/ :BÕ(~20awmҀ2}R>S؆hKmg,tv=KNo_Kє)?4#=ZnmU&M.+Zĩz>z1' E, E4FXp.B92N3|,|">IY$h^X%; ` 8?\MVws ]UŮ Lp",&7P D7E7{uFP.!+ /R7 Ag3[jQǟTq~?^Y^y2#L\~‡EI%)d)[B^F]Žўf: e\:KhdxW:P&W7d~@Z_DHTņp;Ԃ~&<ujy+ =o*W :| ʖMc)'i*TJ7/dz@>Nd(Xj%ȞB (.G8;5>{ X hTT _WDJ4jq ā n^1*P[n?ݟV.fĀ \@<#A%٠!һ*PA!L؞`YuXBfl/kW]tZ޸yU_o;5riOuɼ8m~(>Q&/ݫҥ!;Ǖ-S [3*9[Bj}BlBեaʭߨ [ KLnQ Df:4Ĥ*\Izy 51ڳ"Dzh}F@g¹&DJ%i9&DMPdOH6jSjO=u]t;_\;rêK_m&AgvR% oFThX=,M laŶ6@a *gT޷;AJ`C"}j˲JgQQ.¨2@ R| Xxb̦ZEߥuC#Vؔ~ƿ$Vn&3TߟLpI-P_YLe mpu q7(F4z~iP&!{ }x[Vz$NBЈtOk׫&8MnGyyV5eg"@j,)aâ#7nYD2J78ҷ:Фi4w|e "ۑ̈́v#>kwww /3`?\S~&U^yӱGW/==Wf ͐ I@"_~5˼IRm*y2Y"Rk?nsEr|]Y+)eG }.}!6Oo`pD zP,! Y" DZ ΦnTVg * p}gwY dZ1G :ɥMdU,9Nf*sw X%fQ)orl׊һ'.U0dfymᮒ%AB۔ÕPeCr%{@-24QhlU 'O0+#P0_! xV!h%1ϡUAZ *UO=?#x],.5zq D )Kx063=[KQOsŠsO,QdjLŐ/I,ůn|:륵uY9/xNsݓyn*bjNs}}nL6*K.J-1CžuR%P 2~Gb &Dߚ5&J,Dyys'orW4Kq0 c^H1b-_)څ#J]xȠeub@dcp^ghn\~|_bI w=;CA#_G! 뛕udͤ y0)pm$uƷP1!  UYZ%1h:;/&\܆iGp :cd/P(hU<WndctCf\l!|"u5#0;m- ,bB^YL -}W0=8t*܈xd4R+T; 'И$ |IBk5!S']er گ!8.j  GIAbBqLq҆K cLre Gx]n6\Е`֥ܖGA5g/ R90}/N(JJs]U$K$ D|;P+_!+)S B1tJR.TuuR_-ɴ|!b0 mos#BW$'~]FBgU3,WkʸCzdqRnf<>Z2!9YIG~IXd ]SF)/C%]d뇿rNآpO"<EkHJٰ@7&ђo!++3s$kz+i|8XlL|M5b8O^ Xw,’L0P@!Lش}?QQ[mY,׏S5>|qq`}wUX=:+7g !?԰|3*8ҋ)Y[/[jja]$NTx6HOSrUk)r()&Tn E 3ni51r<*uIcUc siH2$-3a<:b6 p= ZU cuJ̪G %xEg6b* (f2vbf<{5>k_x%[(jFDGS~/GvSy 8% 7E1$ƒ~;PpP'!{ WhM Q(-BAw7i[/.E^)~@A)u"bDFFBS)A UM;&fRH Rl`cS-M\QFQ{y䙅T1(<[;M}]LPs}զ%z#Vy\2 /"sz*Jsul5(ǂ_t}VeB;/b ,|@g),}EWJ? ;s_Fo{`(pP,_! t*AMG7*D{Hșz~NNIM1b3w ζr3``%`*SGJP. #L!xԏp%aٿTEyt=8(ȠI!DGc@O$nEe`IJcz:Iojf vf[wJKYBq_`SBt&KaMNwrg,"odL=x _,$|J03BF4ݧ3b?Z 9G5@30TuP/! fo[D'#Dj}~Y륲*u!γ꯽L@l~f90Cvmdrd$Ru4=>j~͖'/ I@iՆE֡r,&@V;AZ5<_/܌QkGˮ@/G H@9 O]WdĀEI\}wcN`ii1,IŇqn'N+SXƇB&P⫞/,Bؕ:YW޿ ]|S E4AM(QwF!%$&HU7L&%Sszė+LԨ'@mVj.nP2!w_[!H))fq˧2,k n3Ua Hˮ+}"ٳ6Ke&gMǷ5^Yg~xJ#BлYc$ 4͛$XrJfcsVؙxR\Eș 5x_v|ҭ]8 a_桖<~΃cw@X|`6RwZ޺[P4!v_s[ ld,c"7w]׷*ɚ9|g{~D0p8xq~EVIf DGynW_&}D:;E<;˧[ #DlIZ?  .5K~7eǽ_: ku](-kvZ $>Dt[ˍxΑhd(R Bfۭܺޯ$&j]'|q?wIi%(  mgbM2đY~=9N)8Nk-o| d#qφJ졲&GLRKun#,8&!]AU:["xɀzFm5*Z(/'P3?!Q\fW !3(Dnd/tNzˬMuϏ?ӚADrI!eXNyI4dpSE( F׎b*ޢ_jl6T*W˜n?%+x\lV2+);(vy8 \=3Ak-ow|π5~~^h_2;7Ռ-J+{dr4Ew4qjD:oSz_>?@ ʈ"7|jp2ų#*:NqvֲYewߜ_> oz'"t !M4:}a7CT"b13j~=y+z+pP0?!=[Q[WBf5}qD}μgX )OH,Z*?fD{6Uh ك:t"(%u2Ln,舣Bc*MB,ʱv4^f@5;,o;6_@1as?)ӠNƽ[Mt'qR+%N^ [a(W  dc@L+";gw;㺖2S׌ gˍ!ljBvW$ =KTtl|J#o}~4kz,%@/C Dzp?sa-t),<ɡNmP1_!qmP(dd5LnqR˩#7G@;ƌl%_m J C .XEoW&!;r]e&-R0 x⌮ifdv%\l^8cR"@:^sHP3! O[4#$7{9g]!ytO֫ooMOrcpX+yiƒDzyUȔ< O+*aE^8lL ?s~3C_H5LXҰ:D^'yo|o[d/.?~9,8@RI4óX(C6J9\I:ۂ2V6I5, [d%B~ !9p>tޕm!VUh8؆7feU ""@6P/!+>O[W8H羾I8+Q~<7ǜOo]ͅuj 5 ӟtCz 2K,'4)TeĥU&ܛ zF)[l"EAW]du9G1.KKj+f!Xa^w9~^1a X@ˀń`b ժETd )2D~fTJU?kOo]g tY8)9A8q"(}fG'Hf&LQɜ Ūbg<7q}V^|]6Kckc$l W7aG99_ha1(I-wPC!L؎dJPQ]q\ެ޿/~߯}z~߼o{e:o63.Fb t2PB>  t#OK`!U9͔).#3-(A92@x5 !;M6*e,S3?afUVNg9"Ng2r==@d Q>H s^gy5o>]=vl՞8NB78(bgyuڃ.}֚wf$a5׶ Wr6 nT:(|6eVm*zwK|2㬿=MA w7!RErl|c@nql4K'{( h{)hG-ObQd}3؞ItUe3 v*szYy9| ᑺ ̭S r&j}pFF|o>qN6?)'GeDɲr0P8!L#!snzy=g^>8ns;)!;Ҩk;Ԇ8&k|{$m"=~ ͇יq.D?.&L0e £J1[ ]&F. $U9qfgMJ -(hoR y1 ir2U eMP.R9qݍ7<ਣE~[Kr" Bo㈢_6M@H",NyJ/mk8=8>?d9?nk\Dbو|!-L8u'肫覮dz)$et  yWg)bN:j]ST눠9ի };uÇP4!Ll_Rf#EvaRhMƦofyNkPT@xB$#őȄdA[Mjdh!$e.‚UƎw%30V^ ӳ6jhpg=!pE}Fp̞2tq5 buph{.yg">TF/"g"4_y ,M6RYL$AlFz7.:_@[񢑯X|\;sxZ[D=Al<8*Փ35Csԏ9Xrr]MΦVf%<0M^[j?I eAw )3;&F 䢋$nO]? aQ[U."P%!{Sa&"BbD-ƘWX^Uʺޟ3Qrz<Lhw5ʆh nP:).k3Zf\*# 3FjL"`L,w0m쐰Z^>ӥE,dP%xׯabZ7J䢚y 2zL{;#O S&rL'e4,_3%h_YKKQݒTwbq"5bR!v0֨&DX%@@pP)! TXE!Bdno^RnKo\xy9$rE$ekYj<Ύ4qA뎌bP $8g*]Qq ˾!rik'?^)xjsDQUkY.cfQoKE@Liy1ȭ*)rCJ [,Rs7'>w<=2D=|MPе;'@PŀB(د !Ln@ڽK 5N[=@1 t, ˤ# }3==Z7b~pP.!+ zSXTH-W߿oL纩$ J(K2^5TNJ}jwy$S "=`y((-s,}=nꤓ|)+UBsU@\NTA 0'og'ÇX -9*}A Jvhj :/OfA^Wv-_@aM2KSm*CCy_:F۸PA Le5++WSϿżp"k5]eg@禁3%#fj:|tePAb, 57VYW8dPDM.Sh3O8(5R{ú{*2u\<*7ӻ2Ӕ[a/ڷelƑG2R凍_v#:^^~=k ?@*#Plŭu xŋLu>(YMH$)ܿf,Ǜ5YiB*]l諾gsn/ڼ~~.D=_;}yڏgQ5 e@G X mMU2k3ȀҷAֵ% =LSMd|Zx^C'Z*@sXI zȕm2t 9k9r@si [x\؝I|F+5ܭXI&wpp?[c*7;! GP(?!{1WRzKhYJµ,/o53nt"mcXƫ~|<\>OQ"&+Jך3@C:uG r :Sqfx< ?vx`{.bАt"=!2yZUFKb>ko} ͓=#="ϸe#p8IqR|?P㇮N*M~ G(i;:P&! UX(BcFI/\ovbRϓ@әV 61ToڔP[ eD'Q\pB6ax[?->[['Furvu{쬷|pKN%мEhj|ouJ,wT~3D 8 D=C}*/rĥ[@1INAKS#) [U:R64KJc^U 4Z:Pr U;n~}9JHN~˿P*!WØm 5hz˔+"=oJVY(~.ϝи'9fGUp@-ܯ:y泪: B[ۭF~|uL @BrnpyNW#gN8}\֭,M &C=ĨlKM/g `] |@ v;2ȊExAW+VEʒoJ{VY1pqaY,BԠR0sQiMe,ta;^h`cLa ڣ( G@;1:ĸf5A". wJ,HP-?! 6WZ!u9ƛ&]$kh]ƚҁIDdW(r T`yn"@w@p\q1Ѵs"K0CB"JޫSyvw?^LxN͋c$ G·f+17^=P$59@+k+ 7 K1ϠTpgy' ;=’q߹@5nì_25YW8LtBQ ]6]$kh]Ə _)Pqk= 9$"Z*bB,8:נU;W;ff Sy~ɓA ӕ  8 P2!)U)Px>ouHΣ"TX>C3KDx-H|l0fBS &*(֎D=HS)AFy ゝj]!8@I6,O;j+kbnstw^Y* orkEPL$L7V*tj !y0ACێqU/\M{-t˝GJk&qk9Y:yMsJg턩C_KXhk Dxb7*T\j}q} 1 A@h%NEC8f QvBphM{@>0c՝@ ՜Cr7'nAvK((0rJIku+87czj W 4jFf]+݌bH[X=wN{5qAܥQFr"C`baӳI{5xH> DەHWW߱_ mʜz瘛(@9ϊkT=P} g\&cv, #.)fFj~PV",v|^?؞芢cVeޑc9eSl;kJEŠ=Gw$_@] yz%yqP/!7SjAljSz&u{W*_랸01+ȑQdX?PĊ)g`,> f!K[Y|M(ol G2^;2tf fQbbs~ Wⶐ P/AʹP@%F3ͭs/(2d1&wTMnBJ\R3T"tOV.I͔ӧ_=?}j-tk |U}%b [O+9b[¦3{T-x]c]Z.ZjKBb]8P-! \NEa+n:yhZNx>{:#3Q8Ν tFRo]Ph+r9+PHfīK>747c Uerw:p7[bcK! 3 O嗌RŢ U8k>1S6@2E5H^|oY=eMW7f%[^j#){}QHyÅ暯C 2hLeVq(tn4*k@n|W[upc:ZCL9V@9ǡizbptz$u(e%\_O[i6'<ӬNP,! RiG)BBxUn"HV׏o}urS祡zk#w-)TߢBZ*Gj YC9 ) 0\v]>"\܋п}NwakW6?-2 m<@aZ&K.:<.>STΒQ>@j** |*UnWZ﮸OH3LA+Q)efhw{M-82d> `p%N])҆71ߑ9 fӥe2ǷbD@ fz{9HߨGֲHq dGJ Te ߋ^XcI)QnT OZW], }}t̿P=!LQfP՚TeΤυek}^O%O<&i` O%^h}[: U5ȷ^<`dTKmpSVQxo  i7}ۊrDυeo?|y\{˰T*҅%kj$6M9ALvgָ" #] LZ5ÎO,'lH'hUB/buprGw0UBs>^f#ӷt3a`}5o'B'P8!LRL6rmt:a;^񚚯jeɨyzvI ˫=iiU )*ɒ@ },fΘ b,`VIʨL R6jcLs6"_̩;ִ;iwu[tW=D1SEs ټwX6ԩ'1\t>ϽfE[^c.>IeڒPF&$UE"2dN%2Z}BM2w8CvZZ7wy_?.Sn2P6b'˻:@o-P[&>s| U[69w+9@}, ݠc)wsP)+sT%/!۟VȻ=O0M򟱻Goo>P(?!{ ?VQ x ,BqC"В}ώ+FyyPSߤIXV$7Ims/?9 t3r أ|QG<8 K\ 6ZPg0K5cZ`5N꿅 Y{$41_<_K.>8|6UZCydηrE%UUδJţ3r/G $g o'_ߠ:l H PP ϊp 8P.! i_U\ Sq gԕ&OaRY{X}5dR iGS}2 xP2\~uB=<`|+-wF,xXw|lV:4CvGkY[ReXGZ"eC }}3uY%9jbj=׶w+ڵr,y /wkpM"h9jJB*2*Wh|i`J @G|ˍv_|Ǐ?fy#X`4oiLhч u0hI e2 jE4D#U˪vn`d@f_t=ߨ?:P\{̓JnܺH`MFof_`cP(!{ XFB=TKEUęb-UQ>@S['DM=Ek/*a+j 7[mX;xFYJ p\:2XKM6E 7p"6s*"SvLMԦ1 T(0rx4QΌHI"۸okX$;>||f +B-WǪ+E]Db-UQ>A<]U[zˎ.Z2ZlKw_e)F~6^uc`'`8P-!! BUk2Z4J2d7\epD@So6\eиd(!'G6X]/E74%/dV_?@/?HZz 2eBM_+/ }ln"v^> (77M'P1! Y",7 j]|w)R$ys3Rnj?U`'96;9uV'?oH:RCx*6v4vHՁSU9a(>oEЁ|ppeiFD=%>In!Wh=j[ɕ,cYq4~+V'O+@+,ө[\bjp%P MD룭]Oc)nkU$KsHeIUWG+%;vIWGo 8)(230NLCȥU.rSV_OUI`(gFWYjz#å@C0-n6(PSr[@W Q>P4_!sXW!^::1T2U8̒o)%7t'۠_ރo@VJ$Wb(7U RӟecUrGMF0D:{c$"E˵0k5&PBtT`r ""*BKHk`vR]N+.G qoh E8u8 .xor@р[6a&fG ^n8RΫYSTUT2K lI¼~ UHĦYOF`F9qũ"պ( /j})ݛoXeNjjDžw<*:@s=@\?6( )Dt%ik@4ZDZpM.> o[sQ{TpP1!YiPg mq~T2euQ*.suA-1lI7M32r6xkS.t'Gx7v׉vyO鋢 ")ZF{b~qEp(ff،y2r2:t{%q1oTKt|[?n%MA'E<I Ii0f*-q2ZUuQ*.su@z4\5W =~xN3-2=gV[EN_CRLxh*Dap_nM\LW`*$+ gR%s%2S~/lp>`>@Dd#¨9DžHc8P1!(I 6nګRKZވ߷~y8 _tʇ~]ˎa.;:{QUQKrj`蝹)VM:+u300Jύm&j CI%H_W /=^oz)+OO5UF'M]2]>Fq[Z;-%fp^&~=Ƿ9ވ߷~y8:G:{S 0TXĮ4½_x;~b|eUP- $ K5PB Wp u ڝ,q-"qĞ2? m @xL` .3kFP/! ~T`ʃj]V ]IϮ~mwY0utDd2-PC~X( &M2HG1P/!Y)WQ7YIW@_5_ pOZDY*?TӷCL0F]@8eSʼ\àmU^7Ue[p;Vj/՝qj\V&ci1dl lK]4c8yz9x{;Z bR0:f^Lc)cY#XY7Yr{^uK{k\xc Q{_=e7@ظJjhTei}hiS#ռc v`W^\n@QU1%(@`o]&0.=0c 5'w郦^z-M%`P3!un\ E!>eunq:^]My/wu_J<g%)1j4*mTs,G^n+NG~5)Io1Oxg3.bL[BA46!j _sLk%]Jvj/&v66#s_wj3S]*&)t9u9'hn#vt^Zq@xPz ¼[:%US"ͦMgU\{k.My/wu_NQ:+fNu끚cW\ ኇʿ@09j|ދvsj.: ΥۢQCIzLP+ 1 ?% ?_ƹ քπP0!]lpt*ڲK{{֬uy:~|:^3?a:.~~[ &ԚtEl[`@t_@|c9F~;M8h;F7mNBP3!TY)UHc!>-G. 6;2$ E7.8nE5TlN[JK 3[sVGQ7ҁ_?>ҠDap[EMAS <+e\&\ur )a}T*$Y BKyV >`* QCQTg}wm w#Td;U[``P̀@~p yvxI ' ߀P1!VS0tHE0ujJ|&=nbJGWTWlͱU{B 1Bx Y(y:1j/AvL&J 'pg7=}T:P.jmZ˻VdЃK !Htb$99 R{"1c oPX?vTTV`&9 МI,-8܇{ sGN5QhK@hXP0!U 3e"oڧ>2Nqi('u$5ޢ;p81r>-|d⇈bӾkW3#\zX|B__ZLQ^c'*@y}/b\|ժ⦹97?a8#yԗXnb%6"BفK/3D G +R?aBZ/Svj H!8(M%"Q4Ak=`FCKAJ4 OBTywL;dzΕ9||#1;o)ӐęT)o>.B֢ (sNX`_WSY7߯q_PG::yJ`ʢ&HiC'1%r2k k@BDV#]:F^;EƒłrOz c/}2D4" k9l}BzA.P6 ({IfoQZKm&WiH )Xs~Yu^s `}V̩WU\uK悮#jhr2M^m'{h}Ul y0]:/F#^m$i||;G?=jxw5VƾmN' ?X?ݻ|D: x,󜕅b1LZD!АZO5ܑRUU_ӣ>'uyɟZvWKx o03vf079$xbD>g1P+vqkښm`HqGrVav6q{d?МR=XŇ;P4~w>JK 'AWgm^Úi?cpP> 6$a! Wjo\ҳHIUi /*d%:hpbuBT~/B*+*'viR-o)hrv#M"Xz}Ytn[g9/W[ފ[.w[j ~uss~η2/.)`Gw_>Y}%jf܁79AŠ)YR]M呛-!/z_9]ٮ2n>6)v.HJL'NDN_мp[o>I3H,_TXa "(aJa"!C@ DlrTe$ίڬkovca$r fvh4̓6HUauq]=I4L_3͞zwi1omn $Ԕ$PYEXO#,L,g"AS߁y?pP. R7B nTK$BgʟmnV ZB\WE 6WX_Sꬫ6PʝYp ( 4;A ѠR|4:#PZo~3lȰ.N-6hv- l;g>#3o| pm4'uppeJUW-IڅX|ms_S7Ư7 .=EQ}5<4Oxy)!2FWD$JSV o{<ر8Tp'ʢ{$ʌQB%b^^-yVhVE7r&Ԩ]zN(]|N_/@(җAt=q4 ][@?dvB ]˜@yq`c3HAU Nt[P.!%~VY0c3:0u3Y/5\R :FT#V>ҐP)p Z C09J>R*3c9@7FAP a E@sØѺ7*RإK~[WrŷA7.'sOqbrbL;exbm"|dɱ*C<ϡhL&q7Zn%]ELGq*W=ױ4YCOF!ROho_ۄ%}C$M!"7l)@ Ri%2>wbhhDNm.@7O `_ pP0_!wUڡsaBۛ^KԼk>o5vP(nyVr uNyT@%@j H)l$ڂ]_S9g$oojaZGq ʭcGMi}SS5rJO]?ob2;csEV_}p \88tz.I..Xz^ՠ=''UM OqJ9U(%6xH,=s{㪩r///ϿnQԯ_5@d LU~Yo\rSKGgUQ(u;K q&4v_Z޵Un^EuW[[[wNb'4ڼqT)easqgP/!˯T[X ٢wlndȹ5T]]js=NsSZ_"tJl2,Gc-;ǐ^ oF z7Y[ClKsֹ>ɤX}&*  H5\C)Og.-yfu<6Un|S[]V&Y[ #oqm&{p=%[O|oxpP.?!ԯS`U)u鐸.TMG Ce$ g$@Pkj}`\:ڌ{,wō|*+wTpG-V^g߯\r-ۈ\gᚖfP-B2K݇[oq'^8'+s`s=0KbtYBinmD4Cyŵŋ^tQlZEe2~'gS%KAzL5 ML>R8; "xK @¥IGL y} LZVwkR( Fٞk4rթrr_(zKta a.o7P0!RaL4o&٪ ޛ=`@sJ~'곈]yYvjɪFr틠Jb!9nf'8Pi`M4JQ놥&cNA}ft86N&h^V5U`h/Edk Xν0iN{ ^ ̲h0ލ s3{3,G1/#7rR`=TRB!К> |V*n효ֵ7{o""bR3۾ÞrX[*)H⼸qb >ךz#R8{`R0yjcP ӌr4wzN4=Д >t\-upP0_![SXnBhЈxΧ@"FGOst]*N_TѴ:%P!UrB3+dj3:͝DI?8OMokweX䎴rᎈ'z2Q$ZEYEv| .ڈ i+pDe`.)xtc7 :rKL Pȯ>a.&;oGn;6?U3뗈 _g/. PF!L|J{QF+H1Y]2]r8xqw@z߷PmWŐ利 79У16bStj٧tb/ZU'찔W23ؙo4-žmZXTT/ ӪSnrcbPoܲX 2A>㪞xNL}YƶYDo@ѝCY{482d! ͦe=Xהj&<<1#\:G9enp͎2b MQ1e߶٤㧇>߷q=zUVG}G}\8=ϮYo*05QN8Z5yM?F2mtˈ{ ?q~j FEq񜝱03q 1|}xw~C.De51H#BB2T׀Ps_ۑ$J>`x\u$-#[RlbZ؇!Q)g4\RC]#4{޿hc#P,?!{ rXZHR&Ec4&%qʙMq\69XAq#+_ ;rήr#Ì\NAa"4GҢܢ7mݙ O?秂 졊WZn7H\;O:fl8S72~С?i|JK@,PIB"x"N;^rSzdnmLW"JD]P(Kcke3mIo&1)1u0vP8LrV+ZP~ApYL9O+|ZWDL|~ui)|~1}%DP)!/m,TV DР"7:$Tǝ\W:Vw_6ӺNͼ Ќ: 0B/se5j nHXpyU=@ 5w2Զ,F6o|`TX #1>gUn)iB6#Hmǭc;z#]tf眜,yxT"Z' n$j]^D*YuQ68~eZISNux5\eS:Q+ں~EW{/8~'ekypR}"BM*E4URP5bZ!8^>,/";Qbڈw]+A(K ڶ`Ӌ(#vcJ qM Ks(۪U+յs;=b4Jl{RnL^~zj;/XFgHTTlO8|G;Bm i֊TZJӆBнMP1! րlt+$~=u+JZ(fTP6fVV8-9νl" YkFM gD)# }L16Ǹk6S/D;-09 @M0"`A'01Ē+3xk\n^UoEB}620u,{ȋ6۩AdFUIKѯ׌@@q+uc+P3!؎ D1n/"fjM%ͺu4Wn*.al{4d0$⍽=-'q/G6~6N眰l\^³[;N^e^03=&wr rʄ[?TX2fIXwee 2K$Sw@NI$(CdpGP%CfZ3d8e NnY?iH ~+jwY 7:pG)/08Bj#EE" n)f(ˆAxOzgh6NOFtySnʚc0 7X›Kx8nYab j0 A:vN4\XK_oAlP/!T`̳ Ƃk=<*fY]kWK]!'X3-^6lKFP%͇:6V^7?PG/E ?'])^-&t8P'!a mYU U)"fP0猂:{`N_'009ZU3uuN &j&T0>1TQW¼48ȫ+-cӇV&T:uD >zw9*W2=Vp*3O*kdnNm|.X<.|61[?㗌gaZWM~OnP7~B ]3L޹. 9U oh À%x9m'9Nx%P6Jdۗ?jK딼.R]*qzb7! p\&cd;$(J T*}bx2Hz/]~šqq(!3TLt"l^ lVej\uiPB}v̽z83T@liZZ7_Wn&} 0:pm*/42w@xgRs:I.G-`Xgʖ,H](ˊ\/) a?pūtx`P kC}`F~c^=_K]%]J^ws3Wa/:]*ϒ"lkz?e9\!8Lv;_7*|#:T_} xz3\a!*֦~Jz ېi0 (P/!Y ʋ GM|L8λE\LmҚa>`k 6,WCt1an%GۍUf/AϣNb(LaHIa3^JfEK>)b.6fz~t]P>9z~LhWVfBȈ񣅹 i(Ԝ1]ij4;$n"X 1DbP><@?h',9x'\Q1e3dɅq2ҩ۞}( |z Ϣ>N:JaGT)}o+x?QMFC\ W$}nPFS yV}H/*/@ @V0זHU ipP1!w&<;犬}rN r32 NkT̀*/DR}lF9hȈUB~9zAs8P,>~E^s,-;[z& p9T͹$c`ki7];5[W=gK`VqZ]7"SV䕂^rc:3K]DiKyUl(([|5*sAJX3kaٮ;RL+K,lwxui*d*/|_A3>LUBhk XĐkpşhE,|| DM&F)%+;xPǫnaXi`M{ 6ߟS#/@(>%P2![a 55u7 3JjqE!*Ec|Jm~#iWm]ܼF&\jqYYP^| {(Rap-#(̳;g0 "Y=ZQdhѥy)5ErBP"։ U KzrUZJoӃ nmy}&@.f}i鷺z`]|67+JEPb9hsWZ}PU3JjqEio7RBw$ ҆zR AF7A=ӡ-τ(Z;NL3S)uiȜs/heߦ/ox%P,ŷK,n1;X`K L\CZ8"3"fnqpP4!#oTZa4G1y׍֪[5.RI}wpe{LU92h6Tg~<}}ƷzD4>]kp1-{G>$f̠O=pb=3udT8p]ypY*c5;]&!:"0H`ylV3j6tbt]H} =~i7:\Cwɂ}aƮws#*QvrFзT.3sJϏuS{Å }=B3ͱdIKz.|Qv_B ((hc>"0pd^|$s>sԔuJ{1f56IXWf[(AsNBRqzi ij:+(6S;Ĩ-w~3>SVٹwi,OU,e&)2`^Ppqq& ׀P0! _[A:SY;R[5RegsZx3(3;gNfI; G)F:10aqcߧKB؆݉ith\4!Fsْϒ,~$A0 5B]~~{D!!"(wR)3u|z:O`zgX`?oYiۋ_h7J0n&DRȱg@ RG9%@}_kgoL;3^8Ȇ7=tqBMJ^T u͗ߍs^HJj_8?azݿeku-A)%n8P7!\eB^ӯu<}ekuxj_jJ5 @w^c>P :gMYuXq!s\˜^-l P2'1\0bCB-Ać+4~{ӊv}+}5ƬewqjZU0sGYY\lTGtV8ϭ t*1:FM /2.q ǮY!QrAR1'@ed8#u P rbQ"4{6CbѭxP6?!{(t)\_V||˼7Rku· 8ˎ׾צ6bXvJ%tsCBWɰ%"ʓ&8V!6pE<#h; ecd袉C/VγkPV]W/_a]Z\ T#5EYhOf9سMPL"Ƕ<^sgaauTӍeBRnwSՇi4Q߆I. э9:|qy&o뙯Ny8K]}T_Àj0;?>ux@udzfԞZºlBS<@;k{98g h%'/kF@S7>-i92PpɕP5!}~oF $@҈(W.L_iN֒)W,80%t1g]3;NKR#m#~.\!t/U请PDGyS4vt5EE%w˽>W)Pk" 6r}tO 0L )OlH_key?0op:ڕmV1jWDWJݵ1rd~ǴV6=F8_B<6B[~A,r΁Y2xn:4?d6nH=-U(pdg?aЙ.wϑi.: ߿vӻK󞟿Oe8?  ,!Mq8P*! 5D H^gK2ҳR>; #F!eٖ޲A 鹭7eXR1 "ea]ǶwW}'<QHb{]O(MƢa..t_:Pj1Jf??$ t>-rpehmM@м. c5*IS_0K 3;r5gs7z,$ R195YlP7`,n@7(G{Kj, >5O] ^c)[ Ƽ8P1_!QTYHF ؂zqo{xI_2| 3.d`S< J\@xd=N  oSno%GZ ȩR2^{'R*#h/E^Q PVK{bOUο`w%OuIXhlP~Lc 6-JP%sG]jQ bR^YDY ̿=]ea.̷=w@x7-KO_% `.Hw$d$flNq0dOS;9؛lÌ'F;)5B~O]i@"XvjGZc$pP3?!/[VaLT Nd!lqs!9Qy2ZI}4T{|AQⱑ  dh\ K2L羧Гa-bv,rshh`MZ@w_RÏ's+(4\]iň&'pޱ*jPSӾd3ME􏄁s _zA+TG]Tm;i4J<-۟u4b*r9|9KȕW eqN?9ѷxmr&zyFdG5DDuHZ]§[:*SNۺXFK(nv؝Fth6hAO41K&? 2Iۊ; BdWP  tgP3_!aLssq7"i"i-U.I5*raF[軏; "%#r""Wp.@@~0 @e"琕it2f W0[}-(6]('Xnm R:43n#`Z`~w(pOC-zh]a?"vRˈ| 43?hs}X: v15vKLo{xfRTHۭڪ\?(RTV׷y*”|br".*x,%#uxTIoq1 ə_uĺsn[|!\*!n&J(3p3DgmT:KmdnP1!{ڡS0dUU$e*J5|A/ IJ <]phm)*$9%%4ēL|zKB"(GY 2eG:#UˡȾ!u̒AMb Τ_~P>(|?M~,-cq\E8?fK.)䊞l̊a)` C/\`mnH]cRq$9yjɪ2u%qϷztW' mO TD.3토22`s?! F8펽CKr';P+1DqՄpn3ĀF͙Um"]՘S^=.X%%eL@0~%-u'd~P3?! ?[ LY5ܹ9^~lLk772@0ju>dD4%ֱk+׈ ڪ IY\\POAf9g_ ܷBF(*T8\s>C;%|i=Pn:.~['֦9'-#GrO7TA~:SqP1$!0Ūq϶okOz- }!^%d5Եָ@+SHY2%`|Wވ"[3 ;K-9 R +i|X'p9N84D ٢F|\km(P '4}  Mj**-I57׼{wq kvfOF& EgW:їH6W.C)o&7nhO^:nJ4Ef@N;RDU'[ u"Y8;Q+$09\'f >@]ITU.Fq@SbbwB3 d%ŽW|/_v`vݭ9+B\k &Ku(DP0!Xp" KL+U"׷[I]Kv]/Pa[JIQۥ8K95?Qbti rFL(r[r--(8䔸J~r p8 ݙa vzH3/gD/@kO@3ɀؒO]ye2-9YHF|Uy+1R ]{zu 8N vy^~%~lg(τD71{9gMG}dON-hׄs}=c3}D.rび=1x g971"/>Ѐ%0%ƼQb:P1?!9a2]BUqjK84'@H%$뛠1Cdo IC+ChL$0" WwW&sVk+6uf32hKs#FJa֮jtό b$cY^k0KMnvr`(dS:<*Qm32Q)v!*8ʵIG]~? }8PVYs 7чR!,g&="%Xza#;Ws'dQ 6PXS8|sC]-jX^K$=0.Ҫx [` $J1{.5#{1P/_!Pf"?&U꭮zRu? rmb^NA:}uA9.Phߔ<"pGH i24Y1W.Bw![Z}lG_,b TM]DU-X/΁նڜ/T&*FE xn&2yiKS1Ht֔mC0πŚ(aF"CXhC͒+ RkTOQ(j@6ea3AHE>L#,XA&:RBGS^A5*}`ˊ; 6m\ C,-Qh–&@ja3r/|؀:&0@uq0#SZ P0!VXpu*猍RyީReL:jbMD穀T|qc/ NAsrփv<. PK,mCY8P =wdT;+zG9ڎW[a)=VWs{fi(&p9:hDϛwC[8EŠ<` e Cu*ީReL*$ BF1:WQ̈0TT=e20kGi8.N#GSW]&1-r0 CxUhbsY{CItr?褐:8?mק DolYx@ XC(cʔ2DGzҵq׾P/!޿aH3y7뚾tt^CI^Zz/}_@ȶbfџEmM[`B꿈Q]pu@'18[x_}fe ̵O;ũޗԳ?`Ӡ49, SR[ OElR='KYΰ$y /Ž,Z`tK(-@lTpYJc{y75WΒi1|nX|X$ٮGV$*V [Jb _RMIP.tOj: _>;hqs 6-!ZCP1!c[s[+.JTTW oQ2OAF+]"¹bԋD*H@yEp) 2Q7@bp]Δ ڜs?;gQ,=YiWDD';42_2up d奧,YٺV,.11"h:f. ڽxpq,QEP. +TYIW*+'yw;0R;|w#R.M:(S'*muMA)݀XG+-\z1;(-aI=eմYA-&unixi7<=Hi^."uA;f1cPP3!PD)Bmo7u%qʺ7i1ZuAzX[#:Jz: M #koP0BTL<00 p3h,4-G%/;u l (*×%c}o`:*{5rz'L`4*Uɝ+֚y| \qZ]vwZ b ȦcߝueZne9`?Y)#ToHt)*]rҌz01 U͸z9뵖#]T\; y+xnV(ō+k_A?(qWP.ua=!Cs.y W 12ByfCPׂ6fwvP.!١D9NKz.HWWuxdIҖG2CVFܙwnHNIQnF眀aip"vV0՜39ldĭhSΧzXe@mk"sK.8єyM27[hh Dh'7d).R'%5Zp첳DnCbW^%K[HtDsu MHiuFs Kx 8zh/ԠJE#7qcnzK ĝ^7Qiwb)XTM@A48`%KP7 +:|D5?Ǎ&zmj*MI7H L+=f C6'Z`%Jfَ‚gejo/2' qTC̭EᎧDzW 7株-V]ٚ:rsqցI q`Qu>9+6"e0,j7\='Жo.޼*Dm=:a϶آDPCkں%KkZyʓ^i_Izܱ UYP4Oa1Uk_!遠0I(O]&#|C-ΞEz\_!xWY |Vbbmޔվ^wv}=]O+6"u=FuX6"웆̺ O] -)(<XP) Ldx.QS,ӗz's_[\*N^~?﯐]ɩtWl l^o4hK!iGљ*qM_}aKmgi 4(`prXx{^&'z@N'-mA#$;dͪ+𹺁څDM  {Qh4C n ֢Mmy֮4*@)壳 .lUPUB!|kwm =\ˇc$6p9_VBP4 {6b=B"*g\WRUH:J_F=ݒ/a%۾.l;bF)xC=ׂѹB 7NbHWFs4ynzK3qu9HZjauؖkmד=0ﶧ[tE "ĭ["F'\: anQR:\h!B:3]*Hd#(&{'RIrLObrXOxtQnʓ>ob%nm8d.׻[|ׯ H ˣfd t <[nPlLgy ))<{i\u9}:$틸 y醢)hK}n\UQY$3k`r+ta9RtúXҢi:yi8@ },YP*!ϿW١,yȕiZeUZ*l\փ̈xy QuQp ܂J$=m9D:AR*ȫs0'3 pX@.L!w5ОPc>v%nӜ 移%5>NsN2u;蘐-Q`40ʳ Jo3]v})]CӐ(_J>#s WSfZS 4(ETuWUj\Ur+_Zp⓪,,v` @-ƣ$]hGq!iL_; s "X7D_P0!Yc; )%DJ6pDlıqt bi0^@=2GU+@ꄅbǐgmR:Wlc-,ORV*fUO+,2b4b01h'VSOX ;!^n[aj~{V_.\jmXQ[T 9Н~5DbLkn&\Ԩ)t^N֟Oq"w؍hOTU1Xuͫ Y_?" ŵK#VUD.g=H!ː-'"ih$ICN ɡ[P2!iY %_T&q%Te? @1' VI6r-2P0 u.7Bذf2 M聄F_N%k^Rk ;fEl!ݺ*27&by ꉰQ曾AEjx ~hҦvRI!"^we'kT<F%fpWS/K*]E~a`Ҙ7` oV.xRPҁa#pCWb"\P9T0]1ՒnT}S@dկTfp Sg`%g=dv6Qa 4):)@w닿P/!k{S jL署Uʓ8#U?H-z{sWbwA؃ )pzmJSFvnj xH;`Rsw|AĬ~psX\Mrxp)UM0|MbѿDID}4 Ripre-\*c2/z^^hKDAq]jYJc,6I}:\-r%e>?A^J)B }|`X2t d,^JN BP z%2 ^%",Pm@毨@V,B7] +lR%J] ^ٱrITMjVP2!o_ک6HE.{{u9i_^1RhQqDR_eh *}ҫHxS<*s޽.H}7KA8N8/klBEV|eyӒ Nt?O❼z:b"=ەx@%U:w(jg ~-H~Oq~B},<COZ0t%dJ{38Mݾ܉Uک4E΀$dZ9$:Y^xkG_gLWv ̆ R+-@^.v6aDI]7qv%F_ eݵ0x:U'4' po NAapP3!׾Thc3D23}xTwM78]jSױnll?6h$j60k _<(#p"RX<3Лܰl]vPB`h'6su(ZԌP|Ynޖ|_4dџ6UxM_PfZӄoQМ^*Ee1_Xۻ8KO9|ҨdcYEVEfHgUq[˥ V{ǸkD IHe,ʁ5 Z.89˺{#m{,5gX+rt&Zdt:=,vtӾ4Z*s0TI˫QA $d3+ )])`-9*RTP3!/P\sj늷{ ܾܔPHF-4S{/^xR$Tv9z(j"dyGϸWO˶Ptƽ D.±h9eҨ!8Y?X?tQ^9P k=pIl aV]4 4` `?sP p?J7ZfK2 KR$erA g[qWYu$*}I)6:~\]QCӘU)I_63G?r+NqR$ 9ֹT{:(ЌW&ܛelP_~~)X3˸5=ԁ( eT^QP2!_}P]`nqk۞._:mw8 j6'55DVux z`w0eX9ȣ0=emSv6.ik\^Р-ouTwH[\z += AkZK)Ƿρb:Ua-rWHJX3eqdP/!}U\Y ]SyRɜmq+Y^MWGuܩ('FP0& O(vP¿B@, ӖdL l~9 -;%: >uFNxDqgN{+; PiҐ K+U=QG47b.P b*(c99?ojg؉. ]<[S[BZ\l3WU=}g/&q-qJn8LûQ|Xc+ռ(:l8ڦ:@YDžoOJzB-7@7|>gdͪ ,]ǾЛHj2 8ʻXe8a>P1!PZP59Ǎ}z}wW|Zu;[5U͎W',{f_8{=RP]vq9ȺVdf虇ꎂR[&]E^ ONs;@$Or@btS#N(Y*2ฒyh4twZM\ă *f$kbD% h.:36u̜-CYyZ!--X9sLK7Itܳ+F2UOYE]Z;[5UTLGMX-YuE@t8uŚg0Dw8Yn]k\\C<7 8*V60%j/PDTH#P0?! /UY58g}Z-tN{m**c/_~Ւ:w̸%@qVBbA{i&`ıyL7*t,I;3);1f}R\c.Ϣ̤dĢ`ݽ.\ f Y3 #eco1 p[5ɠ{Iٔ?H%.b[ܐ&!Bk+̕K%DžIwҮ uwiF\V2:&:cӎk =$)=x.ڄD?(G]+9 >d ?>1G b4ijth qv4*=@@jz&ЖmP/!5?U\ewoo+rP/Mfu%ѪdV mZ* )&^aUMsF),'b D(^eW>FنG8׬71,iYoi 2x?% nM{D3g<| h,  s`% o8znl\SFGjTGĻ<+[X^}R_>m󜦏PX˧PtqMpx_3xS}Q9D' +cox8O dC' z*@<=>{ `<P,!OT٩PVBk!+&_="ZPB́Sstuf#zsv<=WU,'A]Ģ$<ܙ$:D+F}W!k(Raځ:0Hu B ^\%@y~z}q4O@K\"V!&eD v>j kmvCGG.YEw)~+ixD4ݼ%'ycr1N>5uW2Vt+/SQ͆u7ӴoGoz"M-|\_ku/@Ǣ6SvPf@%v7׀jx HpP/!kSPc V5s"eմ^Dm`kPUǵa#g3o?;j +S^i(H. UH$Cl,ǥY|T;zy.fӺN[=[֌Z{A{ t~-ģ*KKW÷rl.Jch|At!^s(Yjc9]֪U-U.)%UO_Қa `K[O0k{W!9+ 忮P-3!k8OBeF'γ(H )or`iZY׊DvyP' .i8P,!+ ߛS0SFE"t"G~̜Y7uyezk7ĺ,0ߣx,1 a0U~-e >ld\%%G>_TaZP; qDuCQfrcoaP#t8 00,96d'a1a<(OVuE Bc"=DaMnJUzS]TK!qx!0m)Ŭ>=yE@ kP[3\  >YHԗlOI9Եx~3q"xu.d{ZJ2ןsMT59)UjId>9c,l;YL፭թŴꤤ Elk0 ~iok'ӄb&t"=ŢMg|^JEʢnF$-qyA@1f j=5=L hBZ%00bF7o [GbѭC^ K+B A^ bP)!YBDz$ZR/v1N*/od T yP:20j~2JGTˁ`6yHN:xyh7tKR_5҇p[LW!b\Y"+U'KaA$eJ;TXطhyނKQxt"STݞ1N*K $lfo?L]M#;;q? uG@c$T 艒.hUqRp33dpK%pP1!QU!4NPˮ5IV*=9}\ ;aT+o]{?"))צwohN^"1jY]h <g6a{ġ}R6ƤbUE^]"InbiHhs9ǥ ZLAD+]lEZ 2m?p:+v`/ cEIrDE|TDCg\vP}A{a4\{Ҹ(@~% -9q1G*X]"*G 1:?:6_գAwO1'VWEL9__NĤ0_h=wK_ Az0 P-! qT!;|flAW*޷qWSkVd_ž߸~T#Խ ?9mS SwRYd@#I5PT%Nqp0*7zD3p.n59-X$0OjLJb]U (`k^&vrH+0 D=b2yZR!52Tal53sUVV*An/Az( b\(AWp a *S!/ Dj{P$ll"J[(HNN摩/yr/: U&`^77LΩP/!TYBNѯ>,-H+/~ ^oՓJ1Lu9dɆ{>J0bZXoJs5&\T%Lk}O@q\Sd^';Z sNm u_`99s7 0^;:-^G& ^12d*ut)hnni,,8bc(}ʈwz%>ONxP0! ?Sthߝz%Z]dw7ǯ?^<7Tmīg>LmR4ymc([e xfRiF Qd] (p} > |f` nojڌh0% SUqDxc<?)OmȘfUߊn*"%=y/ϴ1hhqj%9qc= 4q$XVV%/ʼEj}"n@tj *V 8~@V/yȚ?bt(5:/UҢ/ N9<@6<1ӆVxA~ "zgP2!CO[(sA h{=%4Q-4ZU6@N_|tΎo c3KD @ٜF.8;wJD+Dܓ/EtФIF}gg Lnno|{~^KTQ- E8hI8x muFF!0cF=#YX/V*@**` gZ.2{P vDGilRb_(hhWxQGGP/! ϛR;I7V77qZ_zG-eAj[M> I0ȋ3Je-%k0ױ|`X߭X~/2U{m8f5<.Td14o _àgc՗R )qi߄Sasƅ {}L/Nr["iLЀA/qM(snl34@'N~.ޢ JŤ pP8 ztB{u*eմj1S.|[;d->uM`0Q{a+XHj A=aC!G9#3~8*Bx5y;~U@>T+^%,h=*Jk}_nʕX:GWmwB^vp~e@d$UQN_JV-Z"PwԛKB^jW>|?U Inf,/R+ bv~3cu>H6q} ;~ MrH 4Q4H"ȕ/nz+n8*/qDzLAh*m TF!ʍ]ĆsW3yZ j Nȩ)lezj_? Ӵl,31 #~Z'U>yP>_ +vj@swk)ysr^Kgˠ5^CCO}_0*I1̦rk`XX7IGfS\ycwRf"#4=!S,lc ?|߀E;`{[-+m>#w,]z6WtQ=|}~MrWo6p@"f:,UkVk4<{o>%⚽@&e$:#6L]$6C1QlT/ހ-=P{Ex>M ;:㞰ͺ)]nU|9c̜1-ep9e|P( =wWnYҘ=-EC4Vԥ d9 D˨ BYfܟRi!]{Ūww}NFauBI81f{$ZARDYw2u[)ÀP;_ Le.v[-',5Z_H%]H}_ þQ(F 7&n&!X.o!~QpTc A}/䎂^<}ҝp"*P*^a^ʢ `P9o|dxuټ w/n~5ւB2UgjnWy@3˽ @(R/ExZu6 Y5O$ -K͘s  Ϧ@_* W<+WS*b{yXn2XpL!&.R5"c;Jhd6Р B[@3SԵA(hw;Jx[Q=\Ԃk&)<m9Q,7щ xgTLmNK[xӎDtѼjzԹ !MfJQ63S8VJR*ޗ|_оq6\D`4 %o, OewiRK/!}&8M<)Zd` ]  \/٢(R!2Vn"}7Gyecc(bk)U!1`~_TR1:brP'! bWiND$шtNCMHꞓYӊ Q<[JB`ݏj< Q$iyjWkۖS:}&M62Qx F22ێr8d.o* SYi].9u\Ʋ٬gX ^owFeՅe)D,d&HQ !Ehݲ7RI)]Sٮ4G n$458up<ֶwҩ|mt̊dM=4tYOZܻ83شzvײbXr@)çM?-8P+! USd+B!Й"+Sutj UG8A&<<tB97&]Ed-@PQp@&a @B}Ӌ!%*!;w<Yސ4uA||x9l-y^9 &HvLQijojxJ.1S-Sي?@4P,!Th5D8J_|]H_y8f\97;<5$lTɪ̣ȖB OxsEOh -+Ի7eQe'Zm}l찒!T,3/-FniE,PsYJYhb֖x*DV4PlhuxsIVԊewl nD p^360%\p_G֘3vKrdaW^8EZGjY+>-5 .sAs$(pP(@@P2? +nwK/{KȼT._yӪ ql̓Dz)j0O ku`jJ 9bN*MDSg5r@P C+(-vi-fw-%#HcFI2}hɡ>߰#J\cw}i51$g7sNS%8oo=nkR9)k{`3X%bALZ6CsU}nZW2G/( !e/@zC!e"GY2bm|V]>)]D@9A f"13!b, 㓥ޡ&̖W6li%R:Oߎ[>Qi_8P@ &ED'5d.h?>,Pcmb8G@NlRk0VC)AH,9T1ak ,XPY' A4 fj4=wP4l(dR '/.JPw ej[:h[i(`wz5DN-;Nn ]i.lE -]1VyQ犴m/'}؁,;e5heS{նWnvUluY(tO& Jly%ٺҥ4R[w4‰);s-XUou| Ea5zܯ+wm!:Ӆb꡸bS$?\/YH>|/fEmi:[H+*EvΗ(tJ=o=λVp=$vKR9 ~očq^5;qШkP0 [3C#Р.#.EqY98/,JyWov~63c{]iXc>yV خ# ]iۺTgc2xyLA浚?ONnt;¬#Rb>H{nƎ3xa-= 4_K,/,[-| Df @MN`4*E"СzB"к3RԮ;҇{[UӾ&V~x{wl}*k 8Iz$U<0)p ьZ/.>ܓf+masd􍉢81C_g>~^_L4eYHg{6J,J/˰ :kwP)!dWSQ$- áA8̚r̕7ZU#g/_:sz&\ג =$J=5\ =f5$@C!Z/Tnm @tjwycrF- L^9Y0/_ ]7cD jia*P+!Q+QY*!QD%"K[uZ4ysDAﭜ`tywq"M1%ʡ1M64TS*LrBH\X~b V-}LF`-c hh7 )|_?|g0)ayqT*c7҃Za!loBV)f{L:)*QՐ<";mIYpT5NllfhcPdW Ⱥ5Z5WVӏz˾B f˕e 3B2SFapGAXe\{"y1ЈpŢt"_#<+DzL=z*T&RSM*Am#X+5)퍘3£݁J jw$!%;HB 亸S w.3@<wP/!+Q[ lu[!!t*/XH|ǿ߯Na{둀E 5 f*:DвP1$^';VhBRq }.F"# z?78r;@wES2P` ZGIt 38AEo{ :ͩXk(fO5V?(܀;zOb6`ˬ.,fe:"Јt2 B3xtk]d*5xEx̜W\zn_zËM#E~Ð7&ʂG / \8r I዇N--JY0Uzo2UP-v7z̎x5-s[@~PC?!LYO>JnK뿍O)*ľ zWIH.:MV-JI$5& Y'k]z! 8W$7ap7L,7u|(nj: )W2tFZȾaM xvlmӘӪʩ(^zArWYiEرXnu@ۓelDR}A+SSP㜜)H qn/2"_gc7 "IL,K%ٮ5<t/}]%WI}p8{W8i~;Aa 7p" *`RfP6%dcb}:u=JN7V`}Ⱥ埰0Zi}E#A-tZmgkh5Oq,BiWD~$ݟw=Ox|pP)!{ͻUPɑB㛓|^Yw{G^5hݦ64WqR[orU]I_;$^Y҄"S3j yي 陡U,%)_G#mTUe⯅xAbΨ_mo|Iy@-sЂ}E a0%̮1hx{xTH9Qi)Ud&U; A*Gyl{Vy* ∗^<^/-yx?456&3KNԞ  4n~bD#dU~&xIn?P-!TY, JC3sr*2UjwV,]ΗN8S8#]#=:9;F8j''1/8(ƆXɁR4(6d /N98vc=qd:xAz]cL# '%^g}C.7R}HkZ}>'a xY_ERs2ˊ˩Vު%4p0 zRk|XHS8=)Ɗig\.g Bz5z֒3$4Җ28.@X z +] *߀P/?!GQ,NJ߳52V*Uҭ2k>?iIX c8ct{_E&'>"U!,Imy8S[Q>`AWAT1+Ttb]û%õVwgv~cqt@:_џG.O](3J\:keh nA{% WjxiJ B@bU S810#²_>ϲFj::_ &u@k!7bsBS?+-^xOYՀX^Uv٭x92KSv!l<,z'FLbqׄJPG!LƎoQ(oHp_ًF#ޣ%@+{A߽骫Ԃ6BtϨ%NFJ7#.6nB lPK+9gwg[Üzk:`?!Aƙ.eQ:k>kӷ6m-x2q 5:ZBk)NI${*܊Ÿ@H ;9_ M ʂ\E1pI"=Γiie掽zN3_}ߴtYjy>wE9顐Ķ}޸(G=MU=bx,}+$\*nMڰjA",hiƊtjTҰ̼dwcKJvi (p<_X~gSP*!{ 7WYH ǡ@D: +$fexzWPZ!)jI9MʧPu=S˕=m^ \C?D~Xx%`2`C4x tNMxST$('~Hi ۹?7M-S|}>$+G|:'=eeFWexyq+>*E\&8L9sFcb7Ť#h#uxJB"=g~@3Th߯&% (P0?!WSYH)D8ۅ^]+Uyu#-2RNuQ`A7B\? v:-A6Fi4=Ž3}!@,k{ [;SkP oZJƴʮNx14yFȴ]C W.姳P+!VnB]JVRU/x'@i=T2%75@ )@wBGWMbC2svEmJwJDI95 E'bƳ@(SJ`!$zhS)C#Cw`Fb8T]vsx>1Q~ku' ӣn#.$(frXp{bn\bX ]MeʲRe^<$"&n8xujKJá4HU|(@ [5h۟pA[sw ׈\A *:4n Dzh [2^+0D˻Hc ELwpL;~!O YJm𹶪t8̑2YϷ}=bdŃ;C'җ`o[ilbf+}\E@Qpg(aӾpߺ {ƫZ R;^'xš܅X@ _U e%83:2i'`>7:ΞP1_!I7T[`tB(__6窭UqLV{]W>+bNb#Z=Stƪj*) +ݦ1:6d@_ UkOd֏E]jk*٭a*K?FJa`1 GVg[ NDc_婻]`n0 znr`-Qmd ~y78ԩRү}+ڀ6yO@9 (U1e)R!8/ko[I*r2{=EMBU1tM;ܭXqhM]0[fL2YpϿ4 1m،/PK::V!P.!3T٢*AzCq!?7L_ʹ?C><srbUI!\K  4heGJ>(TT+5P|DMbĦLk OƴBW`lr^8=/Ul?Yah `*:L'{uĵj,ɋZjDTx*oɺ@4hXü) P4.lopkvT@&pV0j.dûa|0_@<.!9мN`y5F(vͳP2!RaJ W7mn-2Ҋ?O(9S͊ XFrU *hmF6/Q1-@ݨJ00cQ?7A(G(ʾ\wF9󞈭*'`VsvD{óT{M`>30 b¶cs76Y#loD,PꠎjQ,3ce+i`6w_˭n-2Ҋ?O) zdշM0ӃT*- GH(-"C נ]|{JBbt/+`qVF@R1%tT,c :gzSH@0>!.@ :`7fiW 4훭P3_Lavc57.107.100B6{Bƕ8.%]+u}gqY~I)"r: ;qr5k~glTC~H)&,g9p? h=:WKy"Fݓ_I+<`r@4P1! ٳQ sKP|{oYq7|J"|^)BO!ťJY. ;;ߐeHٯ$ 5uq(lیý /`ַ"f'lJkL$"o(" ;+Q~r:7߈bxD4|F`rG` `6+&nP2 LD-kid]~/wSkƓsdoR]5صކ"VWRVꎴH/m=+Υ~A Ј'*39mٷJo$qlA}\q? ٤Դ!޷l3j ;nYosa(΀&iC7' ;51,(1vCȺy~; yX $=BDАXb6q}N|WJyUk+r߫~ޭ2rY˦rhBh7ŭ=uE=wKyN!Z4xƦI3LJ-+W*-lv ]H .""pxx.ng""#)?ƀ?igsiP@_!L= $fٽ*K﫫󾚺ϏWā縄s ]W7(6r˂u?r`)qQ)x: | nrxgf* d@ghⰬZd ZʑZxXWhY.X pwl:}!}čj+#}")Hw'lXduD<^|skiU{6a(x+6z&(7%&A:88)Y\:oM@PD<ۦUzn㿋|ֳykghQS"Oi)N~ ?ٶ~<  S\٫@z] +\xK~9B<881I8l@T@Wݜ_W;:H{; ӂ,g/I/P*!{ U[^Ɖ.n%5\6̋|Hsx3˥(ch":ԙ4hɔRǨj\_krMݳ*:=Į{ C&<ȑsWRK_s @5 }|$_N{$thAn& n}<2P }:iWUb5 CY\Ou.VDMD3:N}o ] ܂!Bj-8*ƻQnII<;Xsi"(34 fB뫀P,?!mwڥ61>O[EjoQ_1A]LN~óͶkDoFJggWҙ[%tue[T#+*Mi<^ |gtލif&0Ͳ<1s>ZKꤺ y1A%pC7Inp40AIK/I#}Η&^DZ73 u,́ļuVhV4LZ["E}lzDM8]|xUf1m p'WsM[3Q6x3tn!]:Q{P-!ԭReL3&ϡ1D*^kz**\^~5 ̏;ژ1Ѹ~l0Z,Z䏾Qg")1GkauSGu>#I#<7gK_B eoוx.k$D2v07rzᣅmb]WM6|{F pxƕhu|D _kp)"JZt2e/9уio,8Ï2: -#4a*ک`u(Miׄ&);O^^{\y+5)ob2q%Y, g%~( P(! d16JD'xSJDxf_ ]]~"h 7s:&`A+K܌ ,2 |`n iІ9'#s_e1!_"c4-n 8}u9u ґ"@lϦAKu{W1S<)־3tSJDxf_5xT۽JB25\pS4 1X+ٚ,@Q`56zepP(!{Aʆ$HbMW|WUݤ_ɝqXzN P,~((U=QOeYY-ޙ]x (7"ۈq QS5в;*iڷ Dcc̯f15gST\2pre'ܦܙM>* 0G bV'^;d/՗ia&xuQJQ{uQz ;; 0+Ʌ` Z+6%A@<@:HBu_ 0-X}QP5!Z. lx=^k}ws#\3R. f36b rqE 3/P/!wI1 WJ\u_3'[1lUqG+()^<ˉDQ&F}Ćݲ@TܚZ5/m!$`ܙAZ*d UBiD+eH`Δpc"Ʊcq ]^ZКd}L޾}SlZ bl#J#/EEo8jXC6zJ]+s-`:zQ'h햇)$ehJ8wlhWʃ++E4J#륽G$#hm 'O?#a3 %Q} t/%ZѵSP0?!wY(*mo?oߚMA{3QO؟av!0p ͹|eKuhgR5UiɢɋǤEPΗ?r/iie,룏,ް &+Ar5I PM41W(!gVϟlU @F F1-3Ǒ×P2! :[ңk~yoKT^^ukr_u@܁%2R`}IX-g_gJQx 4e2]G=!K&]\Tsλn&\L0XMI^驂Mٸ-]y@nxӷ[i2 g!ԡŤz-ƏRO֦oz_ R) !"$b(Įk~w\f.zZ5kd0DU; wlZd_ _y^s#f07ӇH OPjt|nP2! ߿Sک,'4{|w=9.JirGh e;n 5zNDco{U\ZWIMN*Fn; Iq б[D鰬RXZ,q7$k Y\93p۪NDi=K<_͈[{XY=].{^n:d'xDBpP..Fb8֑Oocgߞm 4#y$Wv0eJA< Nԅ_J(ף!yp4 ȓ):G.~9'*)utvo|P3! NΣ u'=x%Yӏ4! j$H~32 n7Ƅg1fW%U< \"{dvn]BuܻѰ R q&]l9.oupbZ@|nɆ, 6`$3O;}[mq+J΋zw`}<4i2opdJ@'-vn.P0! T >3 RW;뛛涘gb0%Njz_3L~qJS n1e,}$s_?n96i?Ż H(KOqg 1pyԓP/! SY%I߶ַEDY={~Tܽ@Cn ڊE=vVM'3+\#pf{A}P]LJEe\\HcPEP: E\ L+Qxɜ1 J1ԫ}tNDoxkb}2OEr@jˮ踰Ҫٲܭzpu˦fC55E~&ǯnjV]gRa`ȋ}K7"tÛ翅?Dpm,4J("pÃvޟ|.uM?%߫h8T4#_͒?P0! S%HCuysWtƙoԨܙK0xagYXkruSh!gb1@"GSؙB UxOZUplVivY#cp,1+\fsQ3[YU*O  zXt <]m!,Y6==c 1Kuw%_2_Ooc\&^[.u*'CL3l+z bi|jbm{:)Xy)~Ǘ)>igoWX7HG_F Fo@3Pc i9GkCf p^ eQ)ɦ P2_! R[Y ~U+8T5y^k_SL2lMYl RXԒi^2$FO}ns+WUa^|Zm }$g[)YWpnGj@&LV2RJrZe}O-̻ZF=B$>D=W.kup费}da]Gr9kR\u ?mo5zJN*W5'?74gTjJ;$l8aR즇>2L2"wLw,#]߯CwO| )H#~=*g){t@3s77QxWsP.! S[3iƮ:>.WgTzIInGGF&X#š>CY\唖IT6=aECHkY=Ы, 6_WW/I\v_et Nȗt0lzMO:N9Sq跛Wi*}n/U'f(0=% JKsr ۶J!{7r@RShk}g({-'TXE$v oVX B8"UV  CNZ6OI>_Rm=q^lF+tiA Q[{q+ZGbt>'[{wR9Բn/U#S-G 2NqK +' F0BW)8Y勓q=:>=Oo:V~{VAX")0'glœvE]AdnZ9<_B 3~ ɨ%B B KE<'DWsG|SZy1nPRM'AqgDwh|4@cW'+ھqbqSi3Bd8P@? L|UffᆬFqqkF,Ӑ$g{Q<3Zӄͻ\㜶/囸mm9EnA$} E<Mp9q+wkXx9IN+ʘuGRd걈߬0Ɓu{tn/F6qfR! \֮ΟauRcdDeT"HDَU\[g|M |]R @G*僞zu:=1GEGIceK;^R7N55 A`'\8 _ 1Q'|TWҶ8aVDT(:ҳX>Dݞ_"_PP/mn":Z6 \w+AD.\LjNh2tNd%z q P݃.6KaM¾S qpP'?!{ {`YBYFˢɺ㞻󸛹rҢUDt-Z6D+T콢u*\ BQB5)meJv"\.ZC=75*:ԆM-j5# |a{_~uE4-aΥgp)~F[Cx?5?0,I |:'7<2ܮz~~(5iD[sŸV:k%)i޲WS u+AX:,{ Jf@` xP*?! ,?WY-$АJG53BSjqzPX&3kK/!tn|8tj͓ٸpy}:n9I@CSAFx̒B- mx\lLW_[aSa^>.ٷw𻀒L3cg'} &_$h4aWL"S=y⯚3\BUJR8=p#pcM;⺂pٚD%Q"Dr)ш|qqsF0t#{@E3Fw3jfђu []9 T'ǤLP/!WBl0v>C1Lyߚ▥M*z.^|MwBxR HdGvg!jOvö* *XԨNNeh A`Ao(Ԉ_ӥj^Gdu9ᷲal[?p%ğq0c{s+=w\1.͡H+o:Z4ݷK!ysK^ŒXIO5Ԍ1aSۻ%ܳ:SĊd@6чBJUܙn{p|A<0@*'(8@ʷ3Y 87"tP.! kU` I!)x.KĽ)Zydb&j۷ks!_6_fU7w{S6T% 7PM.VrHĞcF{TFeUKocr# ̙DD&YN(' 6DOԁXP-!S۠$BpL5]+ʯ%ZeZ{??PPǧ2[d&'+0LV%"s{@3N1Yd]UU8ڹ'P֚D`jó/Oa[3äI>XȐ1f.>jtmض@#seYB#h׎*ϕTk˫eZ{:?!-$8ގp+v#f3#%&qEj9 ]!);o1(F}8{&SǾ-;4Tbq#ۏT c΀'pP/!RikC.zizVZ[|?ſ U"-׭z&nj:yp!5gRUhTAcu-B3Uc01_$qq8,in #Uey~f5)DbLFy*9F演_c=jt$`Bݥ.@H6bfM~w-6-GKl! ; UhJ)q<e0@(P/! Rӡ*ЩgqT^JZ>?qtp;F>TMa!x_-R&J%Ѕ0%#/TuB'sz!{ m]"Lą&3Hqhi[MK+pWD ~b65QguvbOOl'vU NKT#"dX:kVw׏ZG!3NL7-#v75x!ߠ!`߂t%\cͧЊ޽DVqD1բOu}Z^8ή>|bu1 uTI[1fkr:_`pgpP-!Qک.] [d~'5vjG\>:w::7byv@P8ٰɯ^RƦz@!*8۔DV:e`쫲һ$IPV&Z xMN,Ԃpi20޷XfT]貰!js*lF'ikD,U paE84]+TpЈ&[kQqos5ՆqixfLV9 cȏӞbߣDǜ1X8Aϳ?=ݺ;= ^-W{^Xb 3bP,!+ SYiCB/ƺpUj^j\Jx~?rܳ~tM*3^!}Մ#!t#V0]#|! OuZ#^_U-ٍ-]}|!>ȇ2"KρCVZzowZ.M/P٭uzo0>[/Ŕ|vÝ3㦟sGƚb(Ξg׺zWWysu*uIր2^T 8Ei" Ah8JY#&>c*M (c88I t XB3`mW|PF?!Ll&jnmEݘҟuǧ+4oi~x= h S Bp#E( ⴃQ* O5 KN/Zܩ ?-w]2c+VZ(OunH~; c̪ɒ]dsY~k:C:Lv 7$l.8ҷtt4qIILyE+Tȶ݌׀4;v/tas;Hs9o}LNub2 y_4)6F.ܠwYUwz>V;@KΥu_Pi3TvEv] k})\zqrMSo;j8hA*GSOvYk=׍uqOwăwrz >8/Zn LBl)c@#eI9bBm_t9Wm;_/B ;b.3;58nʊP+!{tXBZ(] B!ѯ.* %]S{΍*d*N̴p^ \lm2?|Y(R 7.y{ǾX0KZ$쀣sUOS葅bRX&%8ny04f *fh꒼0v(A>=?&|7 yMC u-L5o.@s[jg"IJ"FϹۑu`c͔aiC_;d+=ͷ=N<`Q3meA~i]MM|mߝ||oە ) xˀzJ>L!>`΅Υs I`y.RTt69 k 5h]25-Ov5F'~zgB 8d0EӁi3VMpձugd7yC\P5? L7.6kDSe&*tYt^|&eʰzA )0"|CBc*1$@ERlSS4R1ƒ=o>*"L@/YVPq68yaw.VdЉ~y%4ZsLB`_ۊߢAR֘u`JM]e =@L%+_hu*s/'b }K$A5qH+쀯{vzШ=ʻZTҊ&vҳpGAKy_O_|I^ ?oB j[57ErV8PR᩺p8ВicswwqEM9BH*}R>Ke\iFܤ6<<)w195v"ā SFP4 { 0jUۉR!uMmӮH]L!*I\;asg3qR  ժyaQDDmi%^5 ;ŶaPZ/Kۅx;PëV;r)6k3 t:TW"ArCbU{ 7Ǖָs, lchئz @蔚'Ysv{:ޥҷ¼EL<N^<`<Z\Gf'{iJh\r@(ޜ]"Yb..], n߮ߒf;/,*fNxDyVbAX+'ДS?|FND#à aZczWh P+_!tSS- qhD-;+p {[㏨N[x4 J6}Ir*}bP0!SM DN-o:jiV7Mfv"VP| f^%ݺ:-vY^1:"@GgvsF!Wke ; Aa9znAqI/ҁr(fG *""XIeH$z2Po>܃* "9 AIPn#7FsUZ+USMnSk$? z"F3SyVu @J=,D{LU! !4z%PH ?+FETu" $^Y{hVto=qoCB,i a >6K˜Ue_׌ۆP1!קO(lqDLZ^gJHMnb_BBHg^m?~EH77 }z%++(G(púM'*jkE,TT5$ zB@#65&7歏=Z'92$K@31y_~c4Osy]нtW "D>'N.nI *\k_7-%>.S< mMn9i jbbLH-E#:DN^` >z[𽛻sbK@#3? !qv]JקRU' , Uq3)dKħ᧢ :vP,!Y"U Df ]^Ն^{3k7yT Y4RHLz,t5)X_M &Gu8 a^a'r5F{皸q?9Zm(ED>#(g1|Jt("8ρI]{܃/P?F<;~ޔ q?MܠP+! oQS aM!53|I~/%^98b34"z CD )zS.9 f4 /ew5 }،;U8.c ` B9Tޖ:9edn01*&lT z?صfy< yJa=K<b%~Q[Y&35'%q\n!EJ5nc0puyL`^祲:)Tw eRNUeW^/T'XzZeг8O;Re~S "q| Ҕ5p/w&0 gP.!g?[I!8Dg/o_-*UՉ~o,ח P6Hqf1}\3bѺg[Ҏ_ $5 uvZ~mM,_;@kGVu=on映Q2 %"I:V ݐ]+A::FԀf|,?ıSge)QWr2y71/7az U$p\"n!ʲw*/nxL]/N=¾ *Y#G[ra8Ԅv 'B6 *rhrȞB 2w('D_ @0Z9(/P*_!sS4[ 5>>xU\sDeY)1V^?`j4\ /*3r:p1Hbg=8qYPx}.*;NF"eQ EMABƑ+౽^z|΀O% :@d3x uu%+XA,J8D^ V*/"Iꁖg1t}O.pcE#d2RM"#+z(v0qP*!XV9BpwTU^T]4H3ΫjhMX}'|r!1p*.d#NӲ[ĪH8`Y$E2I~X͓6U0JƞPSbQhžkR )Oǝvh]|&jF 9!ӂxP^t)sZPSX(9+[%63RK͎*L]ei%LiU!'gnӵ"{*躲PX /\X }T1E^pCT}M\P0_!+ДAJA0T15w.dۊ}z]s_l9i :1(PD rT:fϣOD~=h8Goy,2 /a #%pIeU ݇n0&bT=ÇSU4RzP5bV{^>w<}(|z:z'QΧK`U/1b\B(>aټ~F97j @/-'o/ H̐d: 4ar5;6PM;uЍV@`(GDC=m[WrßRu~:gWj@|c$}Y  ,韝˘NDH|0PV?j4yZQ= ̝MV̢4> vD_W# xGskq a4ZϷ,緝ivNcqaߙPGd~;[E6;c 3gzBjmmy J2E e.7"3p@W @2qTfikU{.tօ'8P(_!{ Oء7 8BybYu{Vy lq|?\ (\P4l^*IUZD,>jV/!KCFq"kw^5wۜ60ipI}y֨[9$ub"w||xjslދV).w@nu;ݒ&=N7Q:T@ >3/ji{!n5Wkzv@JX 22ֵq4&XCX=tSQ y8P*!Ȓ@w %D O;*l`$1: &8@*&*fO{M 2;khu];nRd2TqUuh_}D~&e8xUY^ ĠRn#'Qn3 @;O劣괎P: |8|wnJlMd%˕gbN^ ./G񟱵Z9X$ց(+vIR(8;!`\?kPohՓHoڝvҲ_\˪KI33|6Fn˫W3k_r'YT㪊wy F5꺐vU\K]#̙F%8j_闙F~usl?<'#37wĈL`I;+Zs72p#F_# \qYE": }qv&fJWƛ:zljZ'?p+:nO3{nq)P?}r[q)Ww %i>ZyzTveZ D@7φc/*/7ߢ 71%Dbjcq?SvY0 sf b l3.dZ6mN&Pxsv߿C~WCTќ6ӹR z{k)ec9^=)*G'Fa+V# u\}/+crTYa܆5jrx|._Y4㣬T#*Ebcҏ@Ym8K5VlyȈ\:*9S֟P3  [ 5#AMVus5QJ+Kmͫ `ZqA[)NG -pftcQӋ7Re~ )\=B6wr<ˏݾK@f`Hص#~SogҸ]K|o)Dg<~?c =53է6Oaa # u.˪qZ*32[3&ig-1F$JUؚi}ݏ[On몞yTIrC Ww7S_'BfT2;VhAU7S"LqLywFӾxD˨]x}GwmnbeHlܧ3oΌ{dsˠu` `9yhYgP+_! WŔ(F g!7pK*Jym}=ټ4J0v2j|Y(J\r8Rr溂. G.@MϐU/kY?ڎ$#pdZruhbBu:oW52ULԳz]+qV5CСcoM. [ιצ뮆xXgʷ[G{-{w2Q%UY/$*eWy8vm9jh[?qtbvHO6^M2>zL |u;͇*IrJ|-@P/_!VةPv2fP/7z+P&.;?z{j^0pL5 #=8T D`(6&fINuQ5$]yD`U4TG:$8rs\ z ^̝?H02oc? }|CtJ.x>)?=@ M .VWJ;`IZĤ"C{x޵kըXZ1*>XH J"DFM8w]lmZǯ(HobË<8T^¼G8mDc<hxECi+%P(P1_!WZD.ˡ1RoXTRUȧS8g_:Fu}B-֣Gszc^|r@u7C71jg8,]PF3A8Fr֑" [ۿ|Ynw_5OzX+>o]F-C-wn[/Д~ tt ohy7gDyq*t MhDz LL8TRqSw?CDjHn[׊|gicT:狭%Ն 5; MUAᖇ Iwo`>{QZ+rNfq?KˌkYAC p{DX p6P1! UX6 k!+\$I2ʫw{5* -]Jަ{"&&\2c;-|*=g/_Lot:"hLi,s4Qm}:`/axILv4ŢCjJkX6-F\5Ae3fIsptOqkզ@eo`!AO8ʅU*@&=뛕W2g2ʫw{F9{SH:8NhНI `S_?Qh-*b9¢F;xᘍv`1x"z~f~`8SZOTʟu?ei@=h@"{谟E"!}lP1_! U!$)kZ)ҪWFu/o;榿=E2OK\P)*-Wb;Tw'Dĺ\ӶD!.]0rys7kU\b [AEG;g]i1 zTHoTPE)3ihc~/:Hvx m% yT0P0?oiКʲR0P k]^1[S_`=],PArOLJoz!I\^tɘu{K0/T8íAx!6ܥ R{ 3´CJ.V|\rI,jP._!S[HCq ޳W[JEYt^Tq8ײǒJSE ;P]$iiF8't?1ӉGq 63_`@I}0)d!'?ߝR*ˣ.CP8hɀ3#,dWWö n,Q`#D'k( dHv21!Z:}o7WY.dFZ^LEF04WlMA9!&2XN2ыfBUfα7̮lu)H?g@deHHP0! gSY"^/x7)UԺr?Gd%DPf>0ɰ-!^((}ABD\ (<%V\b TNKӹN q:#P:;Q? V2gv+_TS%UJ&MOGJ_%Q:5'q@󺩡 e hd1d3:VһOGI(L]=>!;sJ~Mh:[4FD.^/^#Du.\oO; [= 0؍g߁b*Nr%oe=ލh ̕-!w`fQ{0ފ+{-v k"+LxKIR5VpP.!+?S 5 F7.ۚ],UWXGa Y ?D#,d;Uj\$B!Ӣj)c|E, ote|~pw_w ݎn9j HE#V7FfBf""sZxav \FPL#RsoTBPֵBƵ -T`nNfoCqv0-+|O g ۜ]GKErc'XA"\r?'ZOe"\POL?(R4 ;ОS= ]OjfmZru̹6smhр ? :>PD!L`OZRPY+5ŚVon˹/Myq=8yU_A/%y9-ߙ#K9<W#8WG_$mUaLaZ4 9Qz-:7}{뒾61=q{[_*\qVylDD*"_VAqgxhP,"@d늭O lA!k;LO63|g7i0Ü+e X%44{x 8#!zq0YXA#R6;AlA|,s'f%uVe뾯q=8z˕?O}D+2?5&ez (@L/}BeE\АTčk/ hdқHo ͪVl<_:-HzOe;x^5ِ~qrVNΡGx8k4.p׼AuHB3-fP8!L`PHnUFMrhcWc]:;oX9')9j%zFSN7`^*=>.:yⰓg/EUv >%0Mr9INj IZ ~.7+c7_!Une12@P4,ZdgVLXcf 1ak㙯8e Ձ[/c4O= Qf^x[ɵ@`wsKݓ#C{Mf"RMkc]87ynHRjjYu장k`1Wc~QKKo{~`'Ua3 F)Kp Z;34q+E\p sD}P,,()jM :4A& w4Hb n<@?Qihcv h)+<iGs5)T),N8_QZ^iLo5g*C?2Dߥ:|,1O-2j ԙny VK7CD;S [ )`cLH~ȃP4 +hJ)B#+_ڡRI/O MG)VY!0a<(Bt^6I_`;hv?1.Qfl:W;+T)0}kjS|-upI Z6fmXiju~ԢRMUgZٿ :ԥ I[&-OpSgl[S7np\w.56/5u:sOq | T@<=]x@x===`{n؃z;\i]PC!a #ɺQr1P:? Lmd6cVb&f)fOHOjޠx+CS kg*q:_!P+AN-ƆNU|FV ]:B͂)"["R j-#2dTJ'NAb ٦|#@ Fv][֭b\CZd]A,,7g*=JޱB{4ݲz[feի2_t&𛣞̱5YNGY-ATa<M_UpCb`(=T*r%uUҞt@%e[,bۊ4V/ oF]5G0ػn풚q~ )bdj fV%f38 hh桬 F-՗KZvM:J)4_栤5 eTY [:()j]dT=Lz7d7)e"'_P5 {r 1F|{֫UWx-n8ۊQܶy5/Jx:Jh/ݮ?  X !B 1[#뚋܁6"z᧖o{ҕ-} @n}f [b`{h^pG2.ݮ~Q@8-OLAE7 :~G>?$8+L[vfSV⁹YYlq݉ |7۫iD"&jbDF!Py\06f/ٺLͰ Q-%dg }5ĥPZyR۬y6ne 2! PLO>ԋ1jc#ZF!{ }k=P>ruu#`%cAF b.a tc@P2_ 6XАt$B1D.g KwF-S*qYod0<]GlS\#=5>R^*W˕#f1#K(,SQ9MWH"ׅ/ h'-2ψ ,* P}bۤm4] +w&0rqjEa`_2 N :5T(vF16p]k%&Z/jfItb 1}HR_WΈ,ӗc3蔠 Tb"4*6w 1@ !(RC|! ka+ fxe-KO|Zo&nrpL'S\>X+jP(!?RX GmoRKclUa۬.˥:^48fb$'!Y+\$q i҆ [0"LA EP0އDݲjej/ 2xŒPKƎ[÷,W„|OGsYb;,[8rˋV^Q\ yt@7Z_CIa1Idf)O}VJ2\ļ&;_DJs-5kt_*DU!Ey;7'AxR)B9Dz@8P-_!Z! 92H˔&\ުzR05IAE\{WnC yK]XqCtӨ3)ѹ`\%ݲtY˷`mI83ըb/~h&$w&BsRHAs 6/EM])> =3ϻ3 Vc[Gu5M\7זg#.Rsz+V&~R df*m͘Mr7zJz>_A&Dn 2 a5#鞱f >d,Gm8P,!kUnc-dܩIyywt"뾕?9u|ã95{ I9+Q 9<=0 X| ǫ?lIT9@h|.|K)7l[C+^faX) Q KUj:Z=M>3MWLEKK{x^>'c6 Q Qڹ LZθjPLw*K~v )]fA,T_<`ސ "\{bDNsS8{IOFTe=4%`-myP1! SY$ Hdpo~̺K"*M) 6 yW4]Hd^HLT]!Rx*ǩE{={"n#xc$K5T , W7 -[5FqYEE"y,!"OZ-a0#S*W^!u:6sMKQXkHt@og 2(_wk`g^[aMfB,Ft-3NHI] M4z'kM4k"psʆ&O`}i}3Hrvwa.v)m@pP/! S]nkZ)ߝ]*J%_k?JJ)&"H~3ډ5"o#.tw %C鲞hO ȉ 5pt +4,ne;Ll\'\D7B),@]O "ay@|4{U 5'U.n8wxπQ päK1lSX2V)k;w̒S7,]*J%_k?Q0?`y_^^~$@x КUz}xlo lY–_6DRp8y@Тp?kd$oUe|hYj@P-!;SYjY Rk|wZ)W<{f7 o9=/hG-Aiihd0#iqY" XU!k?r{< ;PhD0VW^Xo4+6$D*k<X{A:T\"FiOQn\ع.b[Yz`nharATH[&pNk|wZ)W<{f7sēɨ!*yOw| 8mSt1P`BQ}HWqdq\7r[fo[v+{Ҩ'pP/! OSZGInWILVWP{YqRHi<كT+`]'*⸜14IuL'Eqj)~:RHN_5$M×P XLh Be|\$P&2T9_3WM::76?n^-"ğ] #KtL^‰TDfpNǺ{}!%y澾U{<"=-Srf.v5iQ-h0V`d-I@ȆS|q.b3½sn鈵j)+M Yx_3{e,30P.!R\N0[gY+♪J\5/h9S5 G#ny!2~*vr= F)&YYEC %Πybs }lj#osՐc%2 v 3^0^*%KGT-u^X3Az Rtt)}ٺ1mKXSSsd5[J\5/un4fs>0S~bSv'#usN}/@SxfI c<nNOtzz. ;(weh= T֫!Z8P0?!~Q) %I~_x*+\˪_  ?KDVKR:,;G0K`oKq7}@$;Pf ~qX$ Kqrri vKw%{(5}nzSfnUFzN܀GZ^{с8?qsM[=Ѱxq/1u2R ř-]I58EǸ79u"˩|̺XU1jм#;udB\h["2ۓ"PI*]ET^r齦uc4c{3Ccr3ZBP4! TiGIdԾsi/%t굺_[aG`(RX!6EB`+1<|'պD@'V\i>xpy@'koZ&kTi򚙅cZNf*,8+k Xi*F"b@M2a~(~7\H`ap: ˩QP+<3gZ{{6x^۞:^s´f{joTu489ޑ*%̨amxzMCu&p+3N8jы [4nCy)pc=C_BTP=ԗ9\Z.HCl0ˑR T߱Ky'. |Bnnش6P1!~S؊I{s?]9qWI%[)8[Z$9@4+gIv̧e@*FHU[t=Dn^zw7/rÉs-KW6ś]5+. T"KiLΓkF=ᦴ ZSDj|lh+nb͗|AN +I,JepN\LT{uu%]$n~|2s<2Z=&()+ccUYڜJ3F#3B5$bU[lvrmV{Bq!8NwC lN.c } TzM B1yHCP/!SX E@M ޗ5+LuuRjznm>L;=(v]}=Wv;ܷBc#uޗذf7"VkrLkU"/V^]Nӏɨ Bw[pXV p 6"GmZ\ h8P._!+ *R ι\ìW *Z^o[\} ޓ(ER̹P̥̀HcBPݔ*ՠ!H Z _d*cIU1p$N13?C+"S8NJĄBqKTks;V-RnS[5n㄁(4o{zA" V.hÍη& Mi-ЉT:2B";WduU<.p@A>ucO֟ΤodKyS?L01FWn/~ۼ/|$>B~,5ƐPE?!L`5d/H5Z\“~nnۉt+É޷%VzJD_~Q@'5t6 (i+wi=`Qp-E?M"<?0+r g+#|a9U X\I0+g)^Lh&.66IU ^:[S5t_'zB(YYm:"F,h<;;@dybsjN֙4\_Kp&ޙ?oVEU'P'!{YђDAА&U7].T|/ ׮j4 $ aÖ~GvY@'Y|;m'5OZ[>C|Fn5Ժ]D |'vaټ/_h BvC㡅WFAd-T{LR1 `B$6(]&WPS(-X3ҟtbmpP+!ΰyXh}BaИtK2eUҵ4Uuwt QO38m$Pj=1i'*/^ pAzf@d~MOPA({@,{p_&K*(w"eMy۬oڵMRf(4WWvE:BPU4aL8.lGcDAbg!t.!'ѯ=|g:j\R>3]L# ЬͪTG:JF7R؉I#25fFZ ݞءNu̪BL<~«,aJc6TF^ G OZ_ O ϟP/?!CV4"$dЈ$JUʸ&8ϛyW_M)*T'u# +y¸KG(*212y  " #z"ApӚHe%:p3t/@;rd7U[i Oс2H9JmD #wV\g >p:vz1P𪖕WDS7N 1.$i czE`'98U7żF5NU=۟E@X "D55*+b电Nqޯf뻴t3=6o1|Ѳ[m:$ȘYS*\{ J{xJ&:{79&MS=ps%@Ң`\C<$y w:羒0w~r7\r l0%@?OP/! T[`WJhs/3>=okUyҹ6Yr-~HDQ8f1U2Zʂ-d$LG_' mz]"]{oG#@&N'a:Nj2R[ 8Jz*>Ɨ2it}R&J0Wbw,A45{6ڵZϨUF#Mfs|UgKUyҹP,uq4ԾD?VYm@,(l4=d@@D&,A\39̍rbnW}xvkrP/̪{9X=QL,DBqQ-' P.!T[SJ*JE\Z~NWwe'ՙGXa\iEOt$bpLhĆM}BV^k5f/t󛕱4.0wk<5:uXx_\Yf)>z$5Rj\ִGUu9ZdJqIX%Q}RIK%"o?O8V66e#^2bt-O3y&Ő.'5X}|HFo ?q~f 6bZCnVEG4/pށ83̜6Z@$E<)3TaiO˺8P/_!S\ CBJCwkJVu*ҕZ~U:Tt]QپJ7dž顑kE,!(џJ>Qɰ(d<4%F4c#jPj{L87:<%}q$тjz "C. sf 8٫щQPtMmq0J_ޣntb)PuyS@ \ݑ2ҼeTpKA,V@&V;4CP,k`[50.v Ek5XUn.*!1@].Qd 2@3.(.HP0!R*;Bq/-ҥjHį{|8`eϲkS෶kλxgye@'shW^V%I 6-<9UC3v FN9<=/}u/oZܥ1KlY1<^5oG3zS(}uշ,Ni_R@7@")'ssu- 6xqzSJZ=qS^?>%Mpe<$Va )@cdAE V\ qF恂;O2jbrUfkt P #sPt}b$a (rxeށ.`P-! Rۘt%>KRhL &Msjy"U޳?AQj=wŊ1jPcDuui7Qj3=x]*ulɗrJGjө/Et ͟ʸ]K||^a$K;HɄ8P0!5$jJ&3U/5fedg[X3}'LCSMjTO*$[g nD[bW7NYW }s[PyrkMKq. Zƛ%i csڳ'='$U$,Pj=/H7eq-/=%뻻pŭ:dqy;.7>ˆDH+J95RYl\˳23 L n7!Ay.\M/ {3-EbeݞRN=5j\x :v3fl»,‰hìMxxM7J>[ '̈́u8BQ8'qX:`f`BR%E\5BoKdm8;Tghs[<7JPk+VgGS" q}C $B/~w0Wu UbDriU#'6ď=]J:ﳧ2;x:uuI76S(ŲS )P3!ӡ69k2qjR*5I1ZejYnXs<d@2PF,0 ք6.1W(@)(B"XvL06*4Af0Qd4w ,S=Z9C$afi:xWUrT E{;LNޢ^6-uCKޝ2'-m;P`K Wbp0|`210HfU"oS%]+RqY8qD#C矵;n*zNZMȌL4LX<i('ضg18Uz}ͧYp '+,{OKlqaHWOqSH d Ll2+NnHqA DE1UgnX#̃ \lޕAm]yPu%_+ e@b]1S/Tl[ N(m~@|~MBV5L6,BB;~nU5炒Ru?. n_cu@&7ؓG9莆W.e&܅Pr3TP5 *vq/V0S I IZofR,Y~q{5 |<$oasSPS/Tl2?_VPO{f@P7 LE f.(٭vsֽϭ<9ަk[i^;r 4C`S}ax[ ^u;F<"3! c]?Ԥ1ƌ $P]Qp]Ƒr5qvIJJhDY5W1t[{*`ǫj}"%M#=&&]չи2<AwИTHJǨ$ 4Fvh;BH:C*Io#FS!\=D; Qw Y#|e 8;P % Pxi>iHNyRE(.JzovN.+VG(0}nKxvxo+Ou@;$I&k0N 4,P/? {  H-Dc6Tޫ1x\dnjKxB, o½$w) 4򍹃 0{dw )[m!VTΧ@cReJVlcP#ETu\-aUnvS":B8$q2ӝR~'yh^u| 1 c!V ҘMLz+kN*|'k$6ǯeVwZ*_Ck* xF!BR FW65'.}-Xs}TR\W= B[G.)z2\e+$m-'rB&U lcʳP-!Td(q"6H=;`%绥~ /<26W#h)-E B18L/}~o7{*L]+B|_?_J2 fl=iQsv;99-!=+|rk>=oc@L+!虮k*]o5-^©^(>NE~̢x/Nn>,81{e=_ϝI$" V.рŐ}c'_^9ڙ*_.*р"?!8|k}7~C`P1_! O] BȌz%ۉ9s8*Si4K{CS e;AL8<0"(?^7NڠS}NB1RWS:q}8:AJ4&woQwDF 9=8"M ٮE"g 1'V@B1L ۊ׍jNn᪒Hܷ,"9;3A(tC/0r]L iE-RhWo"B1Q!Ɍ2I;˒>x@XK?n"T?3fpw:K pyyn}Ʒ޾K y#7I|P- ACAh:qzVk^V`pw$U:K9/>U2e]Ri)=NRExO t80dk 5c㺚 mi g~ (db)t.=C1hz'2׺7 V?:@@5@|ދP> ԱBs5s\x*V,sTɿ;1 Q Q(1 `zq@*1} x*ORk(AeWׯkmwD 'QkdLjϖ/7Db׽w޿$1v]Sφȹf UGʔ x1+-M'-W*L1ɛ(bl6`ɵ\Vbr>7=N9swf M3:=3'z*mBEv ŒL-y_VHFPX_8܎Jc/Z_ Fb>=Z[^~I"C>Dpme)0L̑2$ 6?[:@^ү9)8@V."y#Dz*yYx=2ᾲFdU-QN9 e~/AIhz<%+Jtɢ8P;_ 24d!&]Eq8qmx2ʼA˥3 1 _RxSU @Z.g;c ٤R]bKc,vݻtK0u!,#1_<>JH,IZSEV,%mK\[u wi|BHb)lB:f ^p]3AdS`]L|R56j6Rό'|d~kRH=")eŶhFied' A~l ӛ!aXќXi3Uk{kZon]9{ޯ^ѦbQuNl"mݬW.:jQ. =R"DdŢ[pA}`f8ZN=ӊ_~H3rZJw'qӊn zŷI`, `̨ XW{8BEРE Uk|o5swMrPO_m5Hwۧ֔tj2(gY!I%熺qE9KTD5eDb$>M_RثYе$83z{a +wBS dοklCrW1J{n2,&YP)!ߨS,$(B5hΚRԭdݔC`?lYpYvcWRh ,)F,9>jDQ:@8 QPgd%VIlnsV$u/bv2|\KzX޴ŭWt2g,%md |yІ]Pԧ( h.<SLt&ɡ3hD<= BܹJQZz)u+)A1$y54_=;T$Q\eď,Y A>aE`n* oqU0+P-?!SX,%MJe%W\EGkc&cw'j=9Qۚ;#6 @X:߷* iZ`vP4%jk51hLzWCPVzU\-#U38oCM CU._ @(U Hp=Ge%m_m:o׸â )>Tco-@%*5z @.#chP#!YȺ"* DBt" ]u^8­\Sr^3 DBR_ E^!V#2A`E2~GG]§ M@=B_dAה zX(K~ȃD$.LhP2D^7]b8_-zFiz˷l9J,="XT9O ]2K4#y^%jL脄IzYj]wN$ Ź`F՟P/?!WWٛY pV{* KBV*8uEV@Trsqne{Nj ,hE] ΌcA; BNet8,hv]N&0S:iRJ+7uwb [w]Z5f`882Xp0P2! WRaCBdbIHF׻Z{~?n3ʀ*d®dxORZwCi4mb O uO({/!"qW/XI%-5kԾ»^203U1VIa\tٲe/o ;)8n\"wS5G6F\ :J͈4`#7Go IeuAB S8ʫޮWSwR~cMid3c\܄c˒r6L0#:Q--jdvq'zsCJrH(i . @BX bzxhiXsiV Ch&oFfP0?!sWQ'#4hW\IVF#z'߮=o1Qm`>(1Τ]awiadgx]dDN27xz~e>NSfJip4IpȗJ@ [Ic ~#ܶ+xIY F:g7^yz'3ĵ񀮤C._D*j|eJ1 w|"HQ:VVt~~-dZq=Ck&^&qhR0 p-&Clqsj6 M47Lnސ[3=fVJ%Y -`*NeT5pcN~P0! Ul'2CǞxu.Z~.o/`@aA}u'f)!wy# fÓ^_,do*F{ѫ\iFUQ+~p3}2-1hfoUfKtj+ `Q \( 0Kb:8N#WȨUi FNgz "pl=u+Mw}{2葕>ﴠX8u3U(n?.}<0SU`Ecހ.z4jpO¹zTs3rD A XEWL(pҠ]*Ĩ5$X%=cz_KH*r@P/! yTۨ5q*IWJLeus?i-k'͂([xHdsFR<¦ KiA UI8R.%|ᖂKG49}aVC<5A3_#wH/Ⰸ W;|df~s"b]~ d+8Fi ~ȫP- ݣ]K`#웩bSp*\&WQUҵS$~/\X4\i祸aj 0[5fZ8fၳ:sfyHCP#ψg,:] LHO]\Hx$T`:p PP.?! Sۘt7PLt(UiIWZ̿h´=EFShu_Z0]? a>E:쫲a˜u\Hخ*kWv=zv grWT"~ 2': 9q`f@  mlͯ} puubc=V+<{~ΉǼˊӾ~4~٨%ھbFh1)0=  =p 5kXw5,#Q}cQ΍pt5_tL[3P4 P0! #SZiL'HBe!Δ+UutZ+/?0FƹzwPW 3Y Ăn2)0sᅬt%pj7CNϴim^3Qz ^iPSCiX\hec >qIw|Q"GD$PVSY0EQǯ>)Z+/?ݲM *Z=w0CƁ p$rdmFl1M-n SQЩrJ/oJɸr1[U¦h/ _u?Pq ?p7\(4ȍfdP1! |R&w m IQ%JcO!q |eA <.d /Z!d 5vY1m^WX3#Ј 53ŭ( SOM^K&VPv9v̅3N'ff~`4B^0?cKdhkEN U5!.VsTԶ-2D6s딨yMq1e@X+{̔a^jQo2Nl!uKBցݹvt"1L͟K8Zܮ.XZ["ֽk9ĂC _&䠷 3E n顯l%P,! 9ܠc;J!9*J3Roo>dg}GLsѷ %UNʄedl)@tFdMڐ j3e9d IRmIZƬcw5׳;D++>LJw.>bx9XⲸo.^:@fRFX!]Z GPb:YU2FUb @jI0ww"enzɣcÆ< Eלw'A)JrTdW1dt>D!mݚ|r;:|%vM:ǷZ]> +,Ну, y98z|!B hWs 1pJ&wFzR;zr6`ǣ|D,방@@(@sMyq;# z^B!FC>B\a2*4^J/6 * &~\Qx@N'Rzl@\!=>9SbDbP)_!+˻}S[fB!Б+f :hTr`_8nō J壉Cƻ)«.mr˩cNxV߉(O5b`B}|yiQAx2LÀjLp>v<Kt+>o@ؤt429h>5geqWB˹ˣj<ߑ:('N1nEfʤ$\ ;qMw4\χL@2,PNwke-t@\PC!L̎Y QVE ZC[Y6#8jGi8 xP)!{USt&"ա2^eֱzeg>uL_`PߺclS*L%TV]0 u7}J^͢D Ak2b\CIYUj ^se{C7EY>kn=;UFaٲ]n{W<Ԁeuޤt^T]+_/s@UY.B!2UHޮJ^YϮ4@s܍g98{-!pX Дs:cWye׌a@3Pb@2`xO'pP.! Q$3HܝҤUүHԷ_}LdBxĥyW -P(D9!exO}z6𪚼o/;ץc9g{7z brR^nۗ՚1]nqza%Vc=)kZg~(ń{?r#}kO D6Fi_\:ڎ^yj*E\y9b稽<)Jյ9-0sY}mF0qC|60W/fQ=21 <\-}< RG?ҁnpEv:"@`8}QӀP,! IZ貣fo2"uƧ}?l*25+ xm"zc߇|:S2ytC׍o;Ovsk>v)\RBs]@/v GDal'xCA~ &qZQ%n0'ܭ@ڂqGD2xѵh_Zm%o2JEZLfS([Hveeٽ'V8TV\ҬY`3FRGsמLj~ %|A.W#wޢ8--y&@'frJ&=Yors)ud`99IP.!Q6ǷZH޸ܺyLls|3HqRP:xQ>z$duM9YB# >?ݯNTz!M).. }'C[lHj=v~ KE8Jʒpshiep[DR24`3V;AHr/ve4M&9x߷ǝs毌K秿@f8(*NۃMHt]W=)z79?:Ht"j6]--2fRur47y6~A%0X Q0KԈfL'(@KHN4E//MP,!`QL)BB1ٗ⢴UqIziPOAdR%оoqo̠FBŨF0w & '7}}>Nieg/ ؑQz|PRHm.<e>яWOsRX< o6nH|=E5&. 0* ߮_`_QѼy4DevrgЊ|lGk%\&3 - T9jmq;~2*cqiFhaxNwp43lj潾*JRȗ4HN`+ݾ* f@PK.P*_!QH( D35WVQ үpu?"A" Ja'7(;%[ȷ}"՘L0j%LQ, g8AQUESO̵nq1W.$rwt"j밡B}V.|y:%ɕxXz(F9,SSƏR2U8`}'` puw=%h>?{GJKZZx!U{j}TBt:O@M1 NlX'֬jH1l7C`:߯ZcmDYJӅ7P.!Cڡ5A m |n$W%U+|&AL7X)%ު$佩R բ N,L)b@QgB'%%*y(ʊ ,ҁfPpcP&Oͦ9QNع__[!0:qbSҎ]d2ktc_~ԮI*7%$ E @ o'w_žO& hȬ5}`Vwmgx2M='::X_'cW.Od?j'[=EWE؋hSYX+wĿWYJcS/2: UbCDDg uo!j$|eZ@-׃i=Te/GVޱ8oe .p^W&S ,5?e$&L֧P5!~)2%DoVz^U"^yk_]X|]/(kPV&Gwfi@.6j.feHnRf>MZmڀ$eF!(߁ _/~otJkuo,_}]FZ*$0wF0'D~>HVn\ؽSPpX-~{Aku2"x2PTl0e /U*mWWץǯ.H8rIoZ5bM^:V{ 7J :hS  2yp|y_B-P[;?hm&ju0G<>n4rޥ%UVf'Zaiz9@% ǡi&.gP2!Z)Z?}W滻볮j Β~?_@X- mr  ӑzv>E]w3OuϏf!6GRTf6*s Q0+M3v: 2SsըWtT^Sp/qQ/$u @qzwl+W뼅ҶA] \#1$bIOI@6 Y1DnB9VS`s*P{K˭UIUy.&GJ9A\z#Br@6SC@h &kYЗ/nUBq߽2=J+"U(W[,A,LI*E2^"Wr@1(7A]P4! (C#ֿn^12#$D?t*NeJ<c[&]bw%fS\vakNg2U"&XAImvg{+.4dvboiq@;8v | g旫iP70׌w('`hb6:V sBW oZNcHdFIk;9zO,$cwgڐTs,'Kq=rxLA&= )BX-\`6E(%|\ fEw; =%҇fIOf@JPSZi⍶1Ʋ|P1?! U*2& g"&9%e\ަif{?h8#01~k?+,NH@~% (q}C 1ϏJ@Äh`kY!gR8l}^K6odДU%Fx;#}H^Z7:}(@')*&b3pP`]t8S*퐗0*7r"e^.eqR q/,S M7N\.Pi)e8Xc@%:(CD2 n`cQ+faJF)J DXXg8}@h#Hj*)_d#P2!{U[(Uaoǯ*qZ{[?֊]KR{%\_ٗ!O,zu 16Oz}5^(d]}QuhƋ -,hڄp7/l5,p(Kd婻砸W<^{܋}J9nJ:+ !A0Hv-Yrgn?k5) (jL%p|OSgTz}o~ RDn:+̄ǟ4_+Um^(˝!oP"Zn-nUQ몉fQnP_Lǚb(Q0 pknP0! P`ʡ[#c']e[YL>/ў}#9*QAf@.õ Dd}ÿG}ƶ/ yμ+~%[e<5"8 +SF{ +>ٞ7ens*dg 0OA"6pS=D Q xG] S1h]^h"JxxZuBu\|zkA\ᄆUYʣ]nH`gxA0!w}L NxikP3! P`sǟg[-׌9Y-H&ɺp{o>ޚTtz4LOZ%Vdf:SnF9`=vڞKwmgB|xf7C'vx.kBq=oJd`h `;:8]hrl foR*ֵ߿_J@aM\z35+6{fES(syzOlƒ{ ;΍4&dL0h2S. :XIF/'#n֙C~AG'i?DFpEX'ʬCuc- t>d8P-!9}QXj4 ; &/<~?AN<[5[̖7T`4ǃ #M؊_5*څYy!H%e\!(&)++_PuӚHMHF/g~9QQljG/]M@YE4׶ź9#[.X:]s[k`uWN:ʥ*Sm 7v{֧oֲ: 8U 6٪5YDgVQ|M=[xm OӶ ƣ]+u;I8/q8' P_(i0P.! kP)U!VϿIRer^=8$9ZINj7_K1RBwypp5WZ4QT8Uk =\^r_#qNFYpe k@̦֖g3/H\:cR 9 K[-uuip'Cl|q\ & 7HOoVUԕ&YW/o֠1U9ucw^Y˗| }i5)QlA`f->tn䙓oƹS`(\NkH$[] bxJcxRH3Cn pP6 J׊Q9Jֹ| ҵi*v6ݑU1 o~̓캧'%ҎdJ5UA);A*"Zd}IQK\\x\Խ4em&Jqcr:ӗo%@>fuavp(~_7`m~MPp7X .ť:Q9.ڪ fOy~8V=j/Ywyr<0eIE%]H<,jWhY."T9z[xL* hHj15 շ-AΚ Tpu;v?9C?pONF3‡V\q`_⬽|P> $I%S%+Uɻsc[s?Z+G@o3A.+D `u1yac."9T0"?!| 0a)@wFZR6(=` :Ҡ7~Nse_?3heH~$YL%CDdk:uHNyl:7/E]nćJMj e@7.u"zu"e~+@G}_#.?oX~7]pёps ?=zɍZюaUNP:  dIýZUÙy5U*|tw4*N\b\+]eN睭Km+{k*A|?0JC,Wm T0fn[c,ǰ.om1ػ?Yᩧ 1m5c!qު2ޭ]騝U&mf=Uveqw\Uoָ7^5 s fZ]iNTx!h^1׈l/8 `0"A4gdc'BnpJV43[9A_o*/t>6eq(G1MicjXOj{@0 I3"ƪӁMFܢb%ߧA|4/⃃TAA_D㺽gNK-F_+HJnE@Fgxu\v̶@4FaQË)XLjwc1: M X*FoT7}- T܀Mi?P,!K`UڡʝBcЈt" LrV&ITQ:$ʙ ^k^aȝc4KT*etw FN':D!,&eX~P )K9c= $nrQ!?7`}Wؓڽfq\9f-~h{0On}Yq/6xՈ .ɣhH<wPrV&IOjUӓ޹ޙl; '$FfmR9g@Pmh)0KF"_ k.4XÍ4Wjy~S,P,!U[aJBBU^e[{/yޱ/W}Utoŏ2茲2$& X}+ r:P&=4sӉ ҳgB#b#/ϮF,x[|wm7ϐ` 70Yh7 ŷ^dн/P g C~_@̢WˌjzlAUE6E 蔒<4R)Y_/[f?D%=wCT$ur%Y44!%D(O@K/nfQ~ /xOT--^ vͻr(]P.! CyV[aJ&ǡ U8VUԘ[T^'3mi*K9皐WaKyD5̕H;ŊY.ϿȂ*"Ul׹~-DZl98! g%\jk>t }~KjefMg9V`!tclr^9K1ٔ0St%Q,_|:./,LrCquUU4zFߞ3/(ʺ`UUH p”kZh˫Cz2rn{"4 ϺW.39"Ǯ+&nc~ ۅOJD)hBTCXA8ۭ P,_!=USaJ= DCѪ{ol$]H*p\qS!F9"_}XBr+$eDi; zzi:)Lz}Ɓ-\Pp]G[n4U8QgxM{'UkmXv50>}<(͞(%4vӔFkĠ|>1Kij WiW H)ш|:" %g? H]H*pëSO=Wԁ@,jYh,PHd[u}`(z p j6;$KVeP&lށ`Vo/\,끃e_):,`3`sP0?!oRiC3xI&k%)]lFypP/! +R[hUZמ'B*yly3E lGpϸ)깒|DBУv}$=J)m W*"A%$tOScu?w|R 8'T tۢe؜t|5c#z$/e,'#@1>E!!.$uwlM.'̗\?$:KT5o>8+ڥ$E^W[_ o<Ӆ#eiIΧ%2fҾ{î5d9.HsFf05lZ90Ǥ7Q%xuaw~2}cFB$F Aӥ_鼡8J' - @ zX:T@P/_!+)RZ,D!Bkwuy06RZ˹w#Kfa!<>eX}qTڴB<ބa栒gō+fCD5qm^hPεޭΨL͂[+eQcWAA:(ļ oxPz!:{r¥xl&!Xi0B"Йtb-CwYϔQ0Rq<`Jw<ƒ#iUcGr}exPi},)+k`,`V d\:iIy|{^(^OhrM4[.Z+mm㌶?:3gaelPE_!LQH;MYPw]_pFSz'W2͓uz]NEa P AYS{gk f^* Ȩnym}ۿvR ;(R* Ss>?+(U)ƞD!5npw_=uv|:̮@XS,oҝ_@*r6م=&yēCB%^'mTuo4Cnlbb#l~leE闗JYIm eg듊{/Q$1[_ *4tۨ\ ۈE&!+&cNSN ƃNP'!{ ӨfZ@h DAЈ"=⫩RiB˻cjrybIӪe҅`_4waَ$i*kM-p^"o}}ɒo; /`SѦnor!}7K ؁) 4D !hD:ATުW뻵q}x5eOw_`rVd c|&W/=h:)Q~Եo=ߛ56kdc{O"CDrF2B6F0b`P.! -XS`l)D|UVIU˩RNb乓O%yRA+-.,;4@uƆjm:&yrZ2;Pb!U 䬸U$SتFo r:u0pL iw}zG=V%?J~ec_u.1a9P+! ݠVa BFnx7J"ޕKU?LFw~%?h|y9K+Ģq:dT_73R"^ +;7w} [Y4y| mTjύmJe &Рt&- !9~?|/*4k'>P[<{Ri+ ~|ި03{TD@-֐1|H=e!NP/!+ءMHFI*u"*WudJBB-+#;VgZT|YVJ)jXh P!rQU {038H]hw1fIq#X(ڭÔP.͍;Z˨Ƃۇ!u@V%^9܎Ɇqe R{ޓ%Y~ ~}eCgy_G\\@ApO PG!L^YD;H5ۛqf)WG}MYG5N*q5|jF4a DJ!h.wzᄕTj8a' {ҙŨDtT{m*NA`2ʀ8nuE~x\ ;2vxp;f/~_3o 2nObiyŕ `p,XLM$Pϻ?@Z3f[VGc\ʴ MBA9l 3ɟ'a.yǔ/M:$Fʯqfyǣ"Oիʮ5?{n( 2U7#*㔫k/)? ^IN _ v\׼T.'PQ(, @с*}\v) B>qM;Hu Y-wگ7>OqN]nf ?V\Uo1o^򆮞8w!ǝ8u](`GƩsksk4X;p9(c8sOEfy9F~ ju]Z 0dOFZ0`;c]h ͤ{3 T*q&\S3P0![X&bܾjJK !xFqW$S%v?rU7p4 ª@kU%<8w.E%lC' 酒PGAaCP}YI@h(AMi]=Ђ6ҷGbpXf=+K4wgY>M0atPo糁@ }n<ݵri2E`ԡ 5U-RH^DA %_eCQpڒéוE=䶳4{SҖ.+>Y\ ʤ @,Q@38BY8;SIrư pʡ]I_Gb@ ]}v$޹yvBB>SZgvqXd@s׌xkCP/!wS!,d1⾽&u*.Oe&ڼfyX1BGj̄3 ;8>+.-FBvUktžn՛x~]F Gu EPm`w+g3Ƕnì; @(6W{'%ǫ[j8i{ى<6N%Y$ܒY2jj9NKWgOU}aw4厢jNϾh`s DHZw:M؎oww=~付B%vcĝ_ S=YwJ9s-'nо%q.o(~,FxvPP0!XLtik5Ks2QZߞ߶Sj- f ~t;%q^8v]VmCH,Sk9yVeǝ* ӫfhq;uWwzZOvq YѯkM`ť3dlނK鷎&ӕZ3s}%l@YzZҊϴkZV2${|֪=eI&jnC=0OHjA:u鏔dHG3oÖ!NBS.4UX 'Phn)P2S48x9ދfy;O~8wGs[[Z_ r[;[Y:``HqZ2UR{P/_!gO`t0f&VjTIY/!s5.2|"K*zX\@r4b1ٹƥUf1iS(#T# 'a6⤦M3ʾvuUha{ےhܙc0ܯr|-FŨ0ۼ9ExYK \b ,0mm(;GD2:]%p%JJu(uƫz`V/E1%)G:ƛ|9'~D`š}69.[8`rʼ)· ",ҧ[shO)ӫP._! ;}QiV(%xUuYG=+UW]T5&DHӼ*QJfظ䓍I82⛐'q8 b:)im[ xFR-Cɦ9Os-e/:2Ie^;bL'wEDp<ܭWem-^˟0gxBE@wܟa|+!q.? Smv[ʬ.Goc!F>R?^4]UVf_  ]:TJb* ug=g`UdY Ya'4ӻ2@RцGZb=``OY)}71.8"T*HO%P.! UYiE!|{KUqR2ҥ]_C{-U.,I"$%Pcy%ϴ/(F 6[L=°{5iqE_lbr]*XѷD7ES5Anw8 Xvj!>ʤe2 [;n\l5[fr+G|UZJC?+>TWy'`«o,aM(6m{9vEY6jbhl;hx*C\/16E+&-Z.1[@ 5@_6 @*j z7! \P0!+TX&9DD4DHW=oZDޖ5J/:| ?pk 9u\c<[=W%RH6ˆT)&ذ<?2Q=6/>9W47ƎXӂ73[~&Ror+&f~lo0_tz$p',UBw5}3Ւ镜3szb-޽g|qI׷7s:#k>dr55$I\&e{F,;!_,^*=֑1rEχb^4jj'|GKgL WW[Fp;KKQK&t+V Cr!B&C10_}{apd At2'TX''/ Vd[,hJBɆD3e奥  P.!ɶTZaRBi!If.Uf^]>w|\}u7GM5WW|.Hr.?%tF2 |>rO\a"r _OX/4 @w#K[(pȕHIa2ްklZKue輠Uy[ۮ4N|VZ FF =:"r U( †Dz!βn/̪rYR̹s/o#Z)k}8VjMbšQ NkM%LSB3Fj,&uR4wo,:߃/hiQD,^7 @\W̍ *!V!-*~_P1!M|UZ,h i!ejVJISURO;OTO=8Zks<퇀 ~_vժ [aJbjm  FWV@2mG ?}Vhw@3>Gdׂiwb~/\ !ۙK;RǓvm{0u4A{=?mou˨0*5B*D1BZ.wI=]%JJ~.8Via{#}5qqKo |}M>4XpkGj\5Z_kD]G#h('}7PUVT~N)I'2Sib%/oM@P4! i|Rةpi8sǵUΪDJkq*k5P3u@U`-(j{L{p"!}n2¥0L"Gw]+D֌ti|5v;2lv8E┤GT!=VSThPǹ`X T>:LUCP4!NĺR]L5BѽyW s.Iv'%h1/>3 YiKsKguz(k_p15҉.Jk =Lתk4-2 Rᆑ# c-isiX#~tvL|s5U_{ f٠ٔZ̹exK>[X @kô@0c##GI(#V^<8}bx:in/AKUML~ UHXl) .c(d \ h+s_y%ŀpױ%0P1! R` 3: YrRw%J8PPB>?38unݼ& U> 3lWJJOÍ̓$EKA@+{s P+! Qd.Q 蟟޲w\EH˕/"8?U@W=A=G@n>< h:- R_P]ϫsKe =WdhrzL@*gXQt*xY:S֭b{'O%TF0Rd Q h0F!Љt|](rTzVןk7W8  YGZJrG;DhMX#Q1kGE0ݘ%zn-uV6B+&Hh97Q5]@<<%L|V>P-!wP`hDߵnZNujO9iq={̳$ԣJeg9e͞a\EZ|J S&z2婵޸ `P{8MIJH)@_@1C o!|=?l$%28 uJ4'N*zREhXb=B%һj7q}+%=%Ĺ 6FTW9R**IHţzbaKsqN}pSu{Thz^4n ࢡlpcxtm&&+H1 F0K8P,!G;_OaL3~BZpWY*&RVMi$_[R=xw%G`YJ0rܴ1c @b0E;C) F0 QE r8lV,"5B&d#Rv[-]]i @hNCw+4$E!@g ('lF8!&xdL}JbX BAЊ:/ UCLk[S#JsehuUh% kYr8i`LtpP.!Nfˡ34/¸˗V*wN&?=%^Z(נ}OP`'!(^yC3aQaT]Fi I?SuYi)uk]pM!S\{v,VWIj}UΖzgϞ|X_sc7>-,D85ҎX]dbA?莔BmD!~~ V'YV*ZJ"IMڎUjXY4¾mԿ1^v2OP '*6eY3N.E~Zcܩ@etZ4nyM=>H,M1] 2K3b (ns/P.!_ߵP`4 B"Б4$M8˷\T]SƸēoRE*9.Ҍ+Qzf#E#O2QN^{135M$?րs> n ?>׉!4 {t,L)' %z{)è D8ZC&tܝ s70f.'-GKcHmz_5e@|K=VUT|\tS]P:D55l<*V&u)d€-`LLPi#x)M؍)"; j^"B;8䀁Fq`:P%#+z) XalK' \P-_!wkg/wѴ15u}u5R"#ժƁjrt:Lkɗ9 "GИs9*.Dʔ-\*φ #*6Wz6W0,NQZƞpeѽkҞ< ^X8aJn1"g | -b[\/YlC=2S4$PZ +6U%-XEj^R܌);xUl@2Od  $P5 +*[")\_to\^d<&UKaKiYX&hv]u5?M[+lrpvmyOwЎ]\guEMMkRtE}!%T0n +.3UQ'7 M#:$R}mH Mch)H5E[tb bz &k9Uy,˽˫ĖW/Mv'!?E&&d  y&հd!'y!|T{s.vOpyKcuցw`c%^a"cGMoikʸp [Cޒԕ)ݨ w£uFs[\*׫a>ӉAZ3^qq[? GhNQp>Y6@ϐBԆOg _W.ޠ19 ;H"<;4ퟍ/{0Ɂ0/v292;dYIhi7S唐K!gZè:yn ӌG|ySm}z+.yB BvTj72;%;j=U >Q9Tw Vs1$U(n6K3h W"lXip3"" 3IRd&k"M5/Zt)S4+liC7A"`ܱ0Dˆ er(#o|H/^tc5WW?зP/! P!s+=u:^pTq~2{?;XtڣX7tT̅Lb"={'חF]hrMHh^Z$3*CYG|h8:ߥ(^/DVTl22c&|鼜} 'u]lw@Ss -F"[qRĸ~ *]+v`h RdBEk~p],qW^vyIVoU仿Ix́<>WchuG jRR)]'IR# ;Dt:EIn ύ8-K!ac,jki֌85oB&J l ;°\F+JBk N<|0*;"YZ) 1f?ƊZm yBGsȅ̫w?g/!׻[ю4y1g_6(u3 7dj4 Hl}C O MFrʠTʒWe@Ĕ!(-U}L@W6bwP0!}S)N[wչTV9k߿_ۏ݆t 5.BE2o oį ġ2h,P#C zNJ n%ӹ1G\A,n]5w]" 1" T6Dt&3 δ7M6c(TRJxsĨL_2\{4p ʘwG#E|F{Ѩx$ٳK`P(ܢ KBDe %nAR57$m5ݥsW@,%.)@q$P1! mQa#B{ߟǾo3^W3Ksz_A^nmBOTܢg!ԑ?gpuWw'fDL}`~nfsb$LAianbW_?qn}t2!!x0-h n0˹P}{Mo{^{\~" #`޺T]Nf:eXFxvIepoX1]^)yƕSCݴN4zP$HG˄j|F(نΚ!c.W;.й7lxu׌q )'_դB8p=C0KV"a%IoAaU ˍ{>ito7 S[ 8J?@@Dj:,HxJM]TU ${Wyw5uVux_@e)#]A}vJx? $L1 VK|# }#Q8 bo U*ꆤ-uɣo0,cߟ:dz9'B/'Ǘ K }8ӱ8A&upJۣgKj#,i= p~[X2P3!q޶OݜYB$=ow*UݯǙtLSqK=ăN}]U1 ]YoSG͈,-w^(T]eL9TX\XՇPkTD.TW._7hӈq,~ 1`5"mu a6lAF@ ~3D#ڦj7w7ݯ5_n2j^@ڼ1zu,íFSJ\ 75XWAӨ#ꦻ2-tf% cUPR= )]LwJLnz&ot6=zM/USiW~4͛(0kT63#P2!=Pݜ׶qΥ.1MVoW"Z%G :t^9Rh],zѢM3ޠe2~q0  #yp= X\4SaS驯UKޓ/G,İ7-<hs|+ 67G2)lFcJa×L*qU^~Om#!nU/,LV pWvБڊ@6/} SugObK"P1!ĭnQݜ#1w*u|nqήz?~_Ղ>٧8fK{;n5):/4Js`KΈe!7#RkiL%DXP\O|>=Ai3 ew$NtWA}*Ϻ^Oي樓 p\%pCNxF u:@"Ш&-42|*G7KZ_;:z>o=׍VLN} |%!8pv:LD@sPLQEi'.0WC>lN @*qZwy! &M.7I@b!`#**3 o(xP1?! >-_OݜU HVL믟o5?_5ԨfPTaf-/ _8+x/5 U8?ٴJcހbhř8̜/,iD~0"ӦX˽Nx~x(kaCw @:6p2I~ c룂bVfY7 +qNw7h>IR޲p_=+? fʦ|j :F^TZь N5 { ](3[#L"kߠ#5ʻO<G=ߖ*՟d r$ o׌3dx:P,!z=Oݔ= B!to2e]$L{5uG~BC=U\FI}GUs m>EC8,O@5>T /V5v!{2pcx~>pgEw$߾ģ qYopQ?l)M'fjIQK>?ۯѫ@tB~팟E@ Z>RQt9A\>1} Q ,!e~T# w.Vp.nqkɿP1! LQ]M BdАOnߝ}]jY]yhO_Ԏ ouca{7gO'YSZK P26J>a7fq 7fuXh*r_-O~Ϡ޲:u"}s.#'A|l~9y:q 0Vz"v$Hݪ%(p 7+X K(cөP.! ެQ\S>C1g]ߞxꤩUnw?~XQ ggUVBcmכ',pdsb71B9 x+2qJRE*տxnےV zn@C6;CI.[.6 $13a:~:Gl@[N~ 6'_f}nPE6C1D~BAоy=e*J߯U{_к0qV {lQȸA N(ܸ0å)c<`=%pqџX*-!tI;,u (Eg0HVO<KG1m#*VP1 f ϡ@:2rޱ;׷ܭt=׽bIc'9.MNaVf W\v3޾?_qgzp$R[5Quhy3N,C ~"A`hO5;>dJ4)<;A[7 !w ȠX-|_F CzXEuC`# q֠Cm㳶XO(1rt|(LDTvuhPƚ>BWqCeYQX"VCKQŲqBaҥius٣,N!&P- ZBaШ"DS2T/vmt~>txlZ5a(I6acxVR򯺵'5.d7d*H}># 3R rpU(O~,u|ITc bd~MDՕB,/br:ˡhꑽUWqNO??֘}}aX&i!d}}GH48A)^sF !8j3(961%aZ+Ut$-8U+H^:eYM )z6rieyzb f]*.} kv P-! }R n"B!ИM<+7u잼jq?<4qhįP1[@6h,SC[`<0˂8 B)NyyhoYW_t vX|}yz * 8:sU7$t=-¿^-P~k(3Ј:DwNR e^{s \锌-UUwۆ 9 6 gߎu؝+or c)δ~;.y=!9Z2"rr'x o Fҽ\ P1!/XR]"-E2oߞ|\WW?5>=枣nn-~-V!CE)5V,Q7"#ow:qj@0>bU.1uad8ϸ] @q*gT }~ @'(. pQnw-R[(΃$B#p3wLΝ$\{/W'| ēk,˕p8;RhSi|/%& 2j, @Zfrb뇋 zBjNxpVn[j蛿uXK G $pz.su.zώvo|h35A;RPSǩO~e,SH' )h5, {C" x rg0ѩGJ0/1y}ӐPzG"p 9b3P/_! wPc+ˡ֮R隕=y` ˮ(QSFm;J}L: sFGVPK 73{eq #/~'Ͽ/Y bJ:@W{iP@%P x@aK5H!8tBD9uU"]Ͽl)k,3M,3ܥa7ӊX^_ Ga(Q ?Έko=66L@b ' 쒞8K,&#boI" tR!1ؒ_'z.P/!MwPZn"MVu]vq[HĤ?뿟Wե V1^/h[V;O=yj&ӂ⦙敳 TF)l^I<)|d*Vo4^7LT:տ45yG4Xv)9:@MLgȈqsh?8ec+(EZ4̗DX>-w0᧔Q϶z(eFCb ]l ˇlB 8H&e8P2_!CgQ[h5!Bb3򼫿:Vmfq~}~ZʔR*vLܵW4թ0݃LS*7#܆v&N} #fXLRTg$آ t5XOf_$ Cbr>ު.1e.].p i䀆ߨE?@RC"Јt&(!h:׏~=:Vp7;-#իNUqiҀwh@^7H6'.Ǟ_4{ StsyZId #` f  @R< >dL7a(f?*e'nmTX|P.?! rN)n3eЉ/YS~˥qu'5ßO?#-<ٶW 웰ש,Ug)e2DZ ׼u1z  kzDY$qsUfD̸mN OCAN~򰇲C$,:YYe%ow: AE5p鋝+p }VSdgYӖdHtҀ1x@ "|-AkZ36#нqϝ\QZǙ_R {ΔXopF Tc܁(GÒ7@y0\lҖ5$"b 6]9CBqwD A/x{=d.cSaTP)! @=WV٩ jшtb [98 ?ҁFDw3d+﹠Q,XZ0NA PĸAQ;~9y2f!Pm$\l2Ր(h&oZ/YA^O.Hbmk*Y$0E!&)y5d˾}v*? &R)"rb_$)||J}L^%\.`Z^ye+W|RE) ,:ׁ& o/q:~n]"0 S(̨P1! >@Q'!ަqyÌ*ei]o_O??rgi{Tg x>k8ٴ__*a~uԑ/|Lɗ ˄+^ixe+#o>,7|NR%~B@:1F`= 'C(SRoJ,@`7P1_! `@P]qKWWUm^[)w*A~df'cw߁oX|qIP3Yy 9`+#% hoҽ,-RNP\9r=<| FUzވx4t:k`+0j2 ݗ%'3lQIם*4?nWV_:Rz/hiI&D_=Uf!2 >J~qtﵑKFYc|t.>pAOM:;ynem /<P DyŮ#۰UqGƯ,u,;kj|qh.} CD:&/u|joz{'?^n@$>b`$B;fnPѕtP ?n5C !Йpˠx4@ݫ3~ce/a+WRM0ԣE.CyInV@WnRMp6P'!7T(UCPZ!ISd$qc]{W ǵBk-qC}TJSQR;gS|}jLDDB| c[y?Dp38}3 T :I_/$Z\ޱ:}ymBź>/pa(zˏ +!UwXerҾ`*b(^\˞À,UTb캨 ?J|T @/%z+rkW^$P.! \rSX cиtBsӻ~t*NcM|z=<-^?D4 T<5r%w}eE{Φ8\/Hߖg0aWيNd1ELߋ4[ފ +'l%u?}`WshxޅRvS,p8b(t7û]JOO}u7WxtoV^= znht` ŸP3!q>QݤG u|]T{U_}uv܇WظnyEڢ{s'gj*@:^6EUf}R4*'ssSr §4KnsAE9S!}\V֌eX *h q\П >0Xû\-@ge +9ƎH0DvKFcNxU~xhlP *1JCfRƵЊ,SHTB b(U,1 8hfN n,hMP'MZ&1,;0?X$|n TfTP2! ;R[}ӡC:wn||?@]鼝ƹJuB^V/" +38Ӝh㥊t"iČ˖1/bX^Lc8X&; "Ѹ957+Ӿ*F__ڀ W(V C䏿؏mbHI+9:.ϧ ^Xԟ'4w  du ?FbHw@0)Wn Ŧ p ^Қ\oYB uq\P1![k@Q[6Bdp"MSq5l%:#=z.u2}]s$ ΔfȪ*952b%%| C0! Ec믦]*D-&r[˸-t&h\az` ']v4QyX ~%w-/ ecElIDaB߳[.IR]zo?Zr$QEz$->:-g|ֿx{X-ՔYC}naYXyՏ ;\00'988`X51LXd4@gR@5*a_{EP-!GP\`1I!L SךW>ںsj'<_?[{}s-ı'`UpUW(h'P6Ro)N:98CJ43ɌB\n:/+i.>B 6e9~4,OC;6')O ʩԏN\,XR24XLJ~ԓ\pBqU;GVDh@+PPQ/)W2Dj !YQ3\B7 /0:0dVP^XgLѣ@LKC!8"%ptqx7uW{|=T:еJEPa/c1gͼR*ܔnJ^%)oTDDZ !I)UǒB `u{TB@UHn(o@x߯P,!?O]%Ƃ8ۮ˹Q9z}k}fq|Os"+E}[ob&SzjTGhl c/.:JʖŚ y9hs)FM\(~eu7[cWvn @cuwVVNu 2E@Vմ15% KULHMgKCXdPz/8خ>~ƨQw|k}fO=/,4FAON/4ĂNQ9m{Hɬl$K#LYOH" +_ƥ2T^DOaLq&{1ox>A` P.!HN貓#F.|Tn1]}~ G+#-{<=]@@3{#5shϘ3fd@U$" Ir=(WbW)eqVF8niV@^ˌ{ %/[rYdGDVRt+oK.sB%"G !ЮsNb/_k5uTy3 h%`7xaZf0vBߌԸpb/p(@yK)r@<8r-0 #@,S~6xEo?P.![_L-%%!|U/Y9^b<Ɂ]s {j:f?Р~(TsgF86fdilOġB("SC@Lbp/D0`0^\ @3R蕵C |Q@'g 7}(}uqX)`B1txWa勒,8TٛbfЈFG ǡ7w^k\*QW@J,ܞp4BAoo =NYVx*=Kuڙ\XXz?2+` <P/?!{M\l)(a!&- ;ΪT?z#B'፵:[m[a$ĿB8: \pftp?0@~$H*")-mͽ:zuM7}D+UOq946yXq$8ұ%:F^טT%M d-%/ʜ &ͦIB2x>7w⸞=Sz5=Tnc1qUOU#b,GlguGBKiF3Ԟ:NA] i^aWf, 2V?Ԉ*'{`qpP,_! o`QY D!Е~q6NCuk9l\'ln;'bȷ&xkAk 0'X=ހe뽠c$Cy rӆ4Dڬ*()B"inyn9еdzO?A-_@f?Vq=UWmbپ;"X/!g ]V+Me W:c} ɁE"XZ.2Sa ]A~l} GO/@$P-! ~?Q\ 2sҹ~=w_ey`sx)V<{*.XKlVxR3o^Q7jYu1cW~bJl!*p-nƷb}dAPhJ }S'P<,RB .(O[uZڈ׬ȊSGVr3M>gyE:n\כۿ?w{}`?9E2= EW *H(rV2}3rx;HҢ'F]̧%|Y>KsUg_ 96 LL?O~TP.! ~>Sݔ"ujs绩yW?w\_,Б\6V$!U`Qql(mLWvxr G{0gih~aަ#*9}o.1*y ^»@ ,m@zp}i =" YLi]Zfҕ_-BLz#⚰ia"BWAKiy%8@G`U|GU5j<%,`kDyYl'hZA@ 9UP0?!|?N]qCԔoʦQ;e]uz?_>Ϭ; ; 㰟q;" \ɩFTȮS9v ;0u`l,t )9tRɤ |l6fǁ4o~];bAԕ{P/`L=1< }9gqKAǷ~ |K-l!gRrG2(MW)R2=~/X=l;ǯה8\ Vۗ:l4y)TA):E>"w{Y*njƌP AF\1"?DDz30; cNP1! nPݔfLJS3k5ߟM( jo9|V O>f}g/lHEbB#kcrȍE->[ԁ Vy0 1p7씹)O f`zY@#NJt䝡,iÚȁ) snx(ZzChw 38LCeKߞs5dOǮ*I0㛑Fn3نX1;ARh*Ro/:b]ԉPO9Gp:+RhY^|=oӮd}(JB'li k|gQBAP(?!+@RT }D!Ј"W<憎+3>?O/wo@$^dQ#)z`WD)0#"=B1]śoYDr'sg @ūrm I D$dJ0|tKh0S5%)iш"?!𹺦Dywq_|g.[3PWKq1ö LeƝhܞ&+i+}BNY|d   X }`sPB?!Ll6|R+VTَ$uf+==Wj5sǝA c4|SA\D a:42di^o'#V`?yKq@7>i%5_!L9 =~&N%>}d1{jUz\Hjsōƪf5ڮUq2cÊn{B.''w0c!\2$߫H8AD xvW96`AbܻpDpDek=A#:-ܒL!kwHO2 V|р,߆ $i;6ؽ_&RPh&Ga %"Q:#CtL껾*ksqSw=pfq36XxבXa!@+zN4-JsbTBJZL`mHP'( sDg&@+CK *W稠P.!T\#+ˡZ 5sp_7=kqiV!)&f5=e7GmQ`PcfDF2jkf6* |`I3QGP׸/PIpOˋV:g*^P@ ;tvֹQ7GgbžAG B!Ш|"5skR!3YZ㞳_wO9ϱM;moM`Hq €pQw厁dE, wL"d9mϲ;y_#v9hK@06щa() qf P/! ReU BЈt&M ߶T5>j 쿫;n̚n0RM$WVv^fcOߚCVQ3n&}4o1o0o|oWGqxx G|sjsJBN/{+"j8]-+HL!DN.Vj]^.OKuM:7=1Ɓ TSπ !]wK% )O}51EiG&={t,)/s[s(iaWHb ?oNP<;R4.B)z֝1P0!=f}R]Db9e5T{<Dj #6zf|bNOP,p+CO.LXD7r?6$-T@LUeEz?'7|ifJ-@_P- o8 ʊj2.;`)-WiEhNVxr^i?Oŀ BiҬGN0څiqgː@ ^NolLnjd2=9>>:0H;#?_^ϱV\}_WsR P9xR`܂ ϢhfD (bP2!f^Q%fEGsƧ3k9|._??? Rڂl=!2JijCqe-N]iZ e+>HᎤ9D*eẀks>l"8ޡyY'㫷5cRWK ߲@ @_!:AꜩPpk4v,m+P0! ?R]BdМ;޳ڳ۞6|JkxZ_ށyO'ә*ZG8o:Hxs{0~[n\u#F21[ԣ^gS#G@֡ݾO9+u8:`#J 5&PMw`r0Hq&Y~#O!}`[~xr! Ov"rz;=:71P1!Ag~Nܘ2c+HЈtB-Y<%iUr᫿_{?ETaqe飨UD^^y'%'(Dйx HD7@-?=+%̭Gܙd^ 5wDF3OT*rhLW7Ľ</U|jlOFY0v&28L_7ߙWcJ_w=k?^}{|0L)( &_-Y $ZB2{ZeJ[#e6끯3`>b×1g J`N3$ȢЉ4N>?}LmWQ߿sS@Nz(#s8[<?Wog]۟sŨ緐8P1?!'uC@O]$GB#<{q*[˻Z~?oq_?y?&zʟ#=hM\Ŗ`q2CUF)2G2Qm,B&@cX)Er(/r!1. LdiByChcPxxy2 S HfHF=6 @]Ic=}ϩ1wgǎuβW_$P)*0TPxLJ*~̢Yec#RJAEsQ0 u2bbQ`k ƩS ْ~-l&HF#sdN܂X@`kYMKҌP.!fUZLW Bc?>w{gWgmOuz׷+ӏ, E@/1- z@&/(`U)=p2J)P.! FR] fB!Ј$ s}krs /3'| 6sT!uƘ6&:E_LF\#iR 1rGd~M`謈,aϻxyi.DsnHa9/`x6>,n1@L ϼ<DR)0SqŒ:6Ixt/o&澻_?]odm񽃟RDnqCQMd³ρviONF&-yb=}EP2/A4s~ P#P.!~oSR\ stJ5\W3neޫ^/:ðgp46;]ӥq-2 r Va1PcJwRVG]7ɴg32c#C`}_pO!( z\>`AhP7M<'Ft}x G6Rb4t4V>.I\^t10 '|'ۺ'Da2iax&ǧ.ެL3s~ (!)G'Й&Hнt{zw窔ޤ_5׏+A(rA4y#Me+'|G{Κ101P Wج>r4+z.qg~=g ꦼJUh+߀@\?<>&y7=(-V@\j22jX5:/pP0?!4|@Oݤg5=3}՞?w=d薅!J%?`k>qǿx! ~3.3J4qwu76S )33y ؛€ed4S޿+_PQ7tcW,^kFrP`Ͱh1@D] j7x66"!R<@@gBP9%?r0L#.|:N6x˼ܼje:_cGpX~`=9<B+Ԏh9i1#Zc; )+{@q6\c,Q /BY7;Vp\R0 \<5VKLr P, '1Bc 4O_/[Oo x.͟dX(L#^EW7Zuq}O_g8%PHch3;'AlnAxmԘڗ1c~Q@" 5ʧgI_m'B)$DyHxªgb (d u|i|$;C .b`g׀P9 Xre!7s֫ ]VWo?JS{QG?e;@ vc&:+ _Q2LSfݶwRo E< bAtUX_W}׸U#M %lu3Noq]F3U9(+R~P|[MoDy SgVg VPOehbQM^BlvnYb}gÙ{_xz}lV7-clƜxT />.edҚ`Oсswzݽ&WIVШ(1 0Zd4fF>F]˄#DpP+ ;šQDNB";w\d\j/7uIJxw/Jtg!.' #}4%8'NO`0tIGYq;Q=QY]]x4('Q/pzw^.@ _`@.|00DaKe 0eLT͡8tB-HާsY9Zg]uקԗHo\NIb03-UnNpd}*9U+&;Uӓ̈9v¥#e^ۚUF:Yz0;bLɯ쳙i*BD2OvdËP E% P'_!TjLm EqZDRT\z{Wu(863m [(

F @:rC8p(Ej4Q`UE 40oB Ƥ%oG^a]tN;3At00JD%kO&Tu(B"p|ZD+w~>*m.IF]Ww8%U@XW/j3P1a6&t1t3wGˬĎ<w6ڄUD蒝l(ZYCe`?f/wz/KpP+! g@UXjl'6áqhĚG|jo{U{w|___޾7>=}-wm N-<Kݎyk䛌. N}򲹡#:?x<%aq_aX*#-#)W25qʸݷ S U e,S@ eИZ!Hq\\ݦ[/7?g̖[S_!ٶA I#[8(j,.4C%(N}O$ZD`\3m Gu jV&D^2nya 32 1imFʙJ4dP,_! _rU!nM š:UW[<;5 l W*i I7,*aHͲ<, oXnׯӕ'Z~$A3;#%rixҸR*:ڝ]Q̨El*]:4w@t(b}+UԘ]škzɪ޵+zfz ѱlyq:!w|m(P<[tI%Ϟ9(1Fڊ%?ZrkSz<%Ըµ\;DoyiMX8P,! R)0C;ǡ ۯO{q>_,J'giciFz * hǨqF@#a5ܒDLVK:SI=s( rEnQ|$ Kxj2BM2w8|tB%=Vc-Ǐ.4oz%po:$m]2a8̪-B!i s<ݤEKیwʽЏ]1<Ӌb~ 8`WsfNUrGŴc I/üBУǿ0"@k|oD"v7 07nP1!n{O@Q٪ %B3N%Mĥnuzݿ- η{L8޲%qVЯSϷ~t:u|}W64=d$}kYxp,'N3_{^ I7@H9wVA6[v+xĒ\n+F9I$#Oe"ῤ짇P0! LkQiEIF۪\xi{ѷͩ'A i㔥ᠤfyP9dmw7daOyWYRitv8/$j4"{2a8Nj1\,~b75(܀vI,h ߿ }J#eO`op JQ*ǡD:G38U|s*fr{g<~q׷7%wہƓٹ%FɌ])meQGu1O/f$Sr:²jdJ,]Uq+0O[ӋG~f;"1R8af|- 8q_}/Vl3@ y*P/!OP(e6ӡ!h^wY[B_2/%ҟӬs'8XeS763Af.I!?A0Z|` uzxoxipWD֕ma;|`9|`\op2g|grsOnAdRnFq=#QQL)pP(pw)B#Ј:1 g%e~0d(|G/^m/䖅d44VÁ1}\KS:M>0X}{;ˆ\)QzU=)]x[baxm~k4  xiP+! M/S(MBiАtLַ\f.75/}gS3 7zzI/;*9 # D4ÉHM|-sٗ@]}t}Ct's eeeV$oW.%K݉Z+UhR<8K"[!JQ*NutR2q-?=~.O>%P)3u?sOqh$.yZr*ٱhiܤiT9I @I*;$*fUH y8dR{q,#u5On fAxU=IZWX*ߥs]:p-tTY:Z..xAzz4\s\1լ/\֙T*bTY˴t 9853Fj=_;WVK+Dժb'U~  |O~=pOP/! z Tت3.ѡZugʛ/r73pݝAUTx>,vbS -2g5xp[H7I,-,]ipV"0 {HiYL'K<5vej5626EK>F)VSg.=EC )fCO]xJG8ʅr]䷨9Ʀf(iEtT 2M[[pH"jN^hC[*hוǦP._!>^`2 {Ŭ8S\_]H.S^p7DZh4`X|ψ|6= ۴B"ti9rInW&^|BPۯ.:&eGFNH|f@c=D}wVb۪gj,5:6~y2Wxj٠6wrlQ|@_U (P.! .R)NSѡD::КO`GUT&yG7j0fH o =2ѼrbHJ^c5^@(n8 ]Q:s;mPDS%Cq[{8?c]%%;XI_o5*9Ҍuh 9.ԗP*!@ISGBAgx]q{Z\#?S; P}]|ݤ(sVQi#I<ĵ8Dj@!I|[b\/liK[^`.*}DcaCsތ]\N#A|A._$7 Bgh5]Ol~Ob ~s??zeS>ɡ:|w.^RZb::?s+/ߠq~HuwJ-3mݚ5{R"'0 7E>RbHaz'RpI%aIQ=AN+LP(!MX(Hјt\OӎK/.~gƮW?v۶H߰fm+>=CwZJeUoxiR.$%1iWx 63V,=D5 KS1MzhgQuY8g\?DP7?! _QZiI|BZqw ;KnmjQǧ02(,H$A)[@{$C.߳T>zH ]yp9`pq({3{<թuw#߱e&%鵶@)^Iha@Wp Q*G SFX"}5. }+bTEɲ݇`2 "=]W9E\TR>=W}_zt PvswB~h=6`1.V-;qDFQ1y4qK0"Q wPIsIhqn3}k߀L #, _Sو^5u#W~\ow% ;PP/!T[a,C\Jƕ~?>w[GwmzwG6N3҂tLۓWh $,JGKKIm#{2`YRWB>b!|[C1-Ҕ d"|Y/؈jNpN1yd;7O3 E`%qK/EaZBz޹uW S& dj(lQt=>H/5""f{{G%Zc7GVCobM e|"Չ*#i`Tdcd!}8-:Q<EH%f^\bKe׏ms_>zڌ;kJ1ASi֠G ah6;#X|'~|IA*{aX@Nnr\62E_ /-}X,.dN!Ue(zedP,1pbS2a@ Ml) ?G/v uu|O<+?gFvypXW[zȐ0S6% 8I>rjjYt-&9 /Hpr zCV- P}|L0 a@!֜$DP0!eU\BeЈ]mN.R⤨.\__/ןAJ+zU)}?ߑ.Q1Sܩվ*4j{[=haT );u-l0xsǃp~v#W q=9H~o?җ8.T[pn`F*$ `8@eK2`JbAG BbЈ|B-ۍc-]WO QǢމsT[jǔEYp@y6Bol~0vb^f dY"胔PU7!NcywJɢOgH̵<&U@@P.! m~U\CVChⷿ5{[8mwo2+,!^.p'_sQ(*T1HmMq[qU99qnoM߿?}?_YT(Ѕt.sK8+Ce7r,^:qv3\qove}E 8$h2j`ʮGM~(6O]3ˤ ?:Q~򊣎P.0o8n5)5۳_UKiĺExojԼu4??Ysv72E{I2m!ʯs \X' &@(ش%;/e}nXu f|3YP XVSJ{8?zS{8P1?! RnCVC1]3NgYלsqTַ}?}V27ntV h1ΏP%1^Ha{ݍ2Qq5P&!w@VREMZ']wU%I7x~Գe;u<~yk #$" zmjP 8%  eP@R"TO6L҈ s`]_ON2Or\ <:ɧbO&+e1$Ј"B!t$Q3^j]D$ٯ:Y޸ֿD51r}VՐ`H* QLw(m):lZVJ |i~1eCo@?( `:=P-! ;U[.S|y}TkzW}8pճ(&魯¤g%O>A @CUM :;+Qsh L+srC3Qv4C>K0CV5o<&$QW!&{5ARozqSIoU&s   #)$N Oؖ)aBJCgs5K]JU~}{p᢮P>˕hKԊ׏ <=KZH=07bˣ.PQPCmʄ p/W U:>Zֺِ\^fGgAZ LˆZ&l@P/!QPP۩c4~~(̭Y A]Oa}X@~c3W"|I/'t NMk.xl xA-;'k{,n aHV046ҘcRҢ&2>b|04C: z @-{_@7 Cz){i kchKtY |LQ+XO5IS>kCnnBUBXTjl (yJoZpV:r;կfrꉣ}LJUwq֩\W(qAYe$SS1tMKDP2!LUpQݔ&w﩯jY_?PJ 4yEyHSRwvg BQU?0 % .BPW׊ދ&))Njb삌]xrwt*}_}۔:Diyښ$9oQh!8% (8bY6!<{ Qv|l7ũɄaGt |B}w+㌋_5s?~o(Hܿ}?Zw&jMeW͚]P!V4S3֜\y*)50qO_i ^<-#R ]vD?<`)J P-!ZO۠]z|s7q/o>>Iwв?R?ߘWm=wlj_#V&u켑A"}Q%D_v ~!D&R{tdxQaS}߂aw}Z˶qf6A}䎏EurT+!hjF? 0a t7Xh9a]Q {r^ќ^-h^V\m6ZV[ߞ7{){}|Y>أa^h\/}'~>#OS`OEڨt KƔ N"'Y9HW c+y=go|pBop{Gz <*P0! ]S۩Ch;2d]oSǶWNdtdD\mG|߼ ݉G{mBFHNCF'9(ԫ SocBTD?} {N.q*/wX ?Z&pi'Ya".VNP\n5 ]0#7kvu0KS #,H\.t}' kd-iЈt&/&_>r _vi}-Xn6UlonbtB[~M&_+n/[Ie?cO ڨhtjF%!y,]:~$$7XkP2CʦžC[LpP(! XZC:'M<ҮJ]^}d<+Z<vL9&U wGjӝGΧ3 ;߯R_b5DIR^*^uľ_̀s3a:us8 @|1YD,C1hDn5oʵt*.^Ӿx??w, pel Oz_O7, T k:Qh|Y2U+62ݍ 8P4?!gnSZilUhИ~juۋ5PT?S\KA"QC NwP1! ] S(iBj:\W3j*sy6oK_U*P/W= zU[U !+͗vxX|z-b%Ǥ[K >G‘2+\&:)"ѹ?=&+X]Kq {e8~9L"aAdU#69ƤHc*VZ*%6 1&=ä{[ײR5R{3ʠRIA$)MTX]GA^"*w2# Gx!-OաVYu&:H@Ѐ $22,C%0%fӪN˪ #& ?>"$0zZ[P'! OUbHfD1BDVWj2GǺ GWJJ|I+~'2kX{.("[`,e HϾ6eA0P$ǠNL[{#C>aGHzMϖHi^@?#a֡C`~oDpB* >D'И"/j\2xL_rryĘMuu=/ ^:42-E  n0i>P.?!]?bjTa"U$\.nTޝzihs  }f?c|PamQSboQj̬x+ZJrPYZko@ ViNp!?Ե,kr":]iy:$?ϴ³MvwD_ W}~պG\PPTL5}5)Vj//u7kSPS,M w5ѦBhR8(*["DW࢖׍PΤ&; [j N_VrSzu˞ia(,3!AMR $E&xUau>ߚQo Y&= `5, jH_P1?!{[)HIL\rLsխ[5n=ת>[e]"mx$m,r&KS_ЄC;ϹV՗^yɭܸSYgr֛y[:$t"&򇠍b\_cc./jLS '}[V G]8Ndt4q i siCrb &i*n="78Zվ^P ޷>v (LmA b~5 ڧ2+(4LʔWVa ^nOvPH9T.'vt(P5!Yu)SϨμy{5VuS`N=Գ_`+HUyVߔ+ɬA"oxԚ?p{BNMQ9?Iݽq1K@ϱ5]JJ2t4]o3 X E@Sn-`ߴuyU@JS2VfM-:,[r6#7m JHN7_o^n5WuS,ߚmCOzG 1({4ݜ^Ւk=`򽧃6?Q!kk+ Lc'Uܝ@aZ/#A&A@Z.Q#H)No}Ӵ( X> TF_alN+ k,OP6?! }M\(9!Be8ưY^ZoT>+kT8voK6^Fv)f.~F+6{# mJζ^1h62& GH&Nlu]呹N0L~PԠS?z7h g[84>,!@;=,B&(;ߓCV~0Rղ8M.'ˬ%Zo]x>N]?#+(7_s1Ϣ.T%U_ɯIM0 ;>@w(lojO9Uג5 ˬث>xgڳ)o}7eN]uT DZ[iMJsJ>P4!_M3'+nԯΤȺ2C~} 1}C\) 'fCUfڃ'*̫7c=at6hj2_,"Q$MnIF.Iz([1[`yX>5҆{ouwA?|?W2Жj 9Ǟ1ìLҌ]+7l1"HE-pa; L ẁ4+,~W<`{Y)@8P.?! TZ)%͡1hD:B{ns]'W,u ?SmpDW&Bw;1%1lfh{/^a̲ibJ+9mT0:xLs= cxպ ct ։iko WvX<-ڵ:\C$- BЈ" |9qݿ_?_kkO/CJK/'ɀ <|aD%ynpc\VM4;/pր hmtF~ e;VG,ޥ@VD5K's~=P8!{uB&O\3Yɓ%R.ܤμ޽|JTDNOg(r 6GȺJhT峎vYUӑW=D$XyeRozjSXJcsc^n/Iȥj!yA3s K`櫑}L[4sb3F!?zݿHX3be}ʉMR[$[3iXl! |E!H+鍁m^[99 *0M0nVf.a̓)^QEGh44~0|d5bz+@OZ90L8AP3_!BrYQ[)NCVGejg>r\O_hĤ"W_۹C#Jɣ*EudIxC!^ƀ&GcBKE ސo*{Lor>_$.ʓWN?nF,e%DkDҌ6Z(Q[sYqPIz̓QZ:6Ƕtg~ϠpEm%9%(ac_QCN,aSǟ6˦ iETBÜ j¯c*у9lv2f:%נ9MnHQĵ6y3J9#@R{ & 8QSB8P%! j{PV}BaЈ"B$Oq9xìfyq꺾<XBZ31h %&ST@8 " H!rU!꽬=Gט] |`(?ƅTIHE{hX̺Ǥ2h|Z%MLLiYRLJI_y:?A_k'.ϵbkb+UK5I_ibE '8WCF;3)Q/.Hr 7pt;P1?!5,0E՚ی}{VeȹUƹP3R"Fg/no6HEh?}$L"nf.钔5řD$qTrRщATuy|}A.pmrLu-c<ŕ6c?_,MasQtH=]"GԚ4GS9&w{(_"|a*FX*UI{,PWSHj "S-Eʮ5_>U?#lc <=b|>s-#D B*5D;?NPn+(Z Dir,7|`<:g `AnP9!^y(3a F/&J9p:[?yOte߮<m*&mi*x!E;mTB`Vp,=wu,!o'+Lu0 \7!jҎWz扑IYo ~ar& =K j gQL#@]<#J.6Sa1/t/&N~1϶ι~?>o[?!iN˜#^uO{W_c*fFi #1?t {W*Q[ue7+-_|ےuoo.RvH|,e'ǫ#Boj=Kpa]I 7i g(C~Hcd#hqU3C<-7j/ iẅ]PgUUXBi-}f)^ݧP9;nɖޟնjrkҀ塚u1<k6S5odz:} 8>gC)m43/o۽scj8'(:cX8J尼}oe2*fQg4bX8Cny:TZ D>ə;ޚ 0le\-2#+O fT0wLHi=縆;6qu׎՛ `7P5!cG`8R]ơBoU9ׯ>5{=eWD)x$'LP8;qbQAph ItVw m=.tfc]LoWd˜u~x=q#{nOf xՀx~ 7ω^` Qn`W/;)yG7NPzkIo:~$*5fuW5_?>lFv5<&.4 Rqt 嗘"c n.8\1E]Z$ Ӗ^~tQaG@v$m&8:=7*+xcEo Vn/B@d$+s l<>tӂZpk;HK8\)NykZs?A'K|d{w}G&&t;rHQO#,m' \apz"5xǮWy*^o_?Uo9"'lz󕏳$%J_ԥd=g!.E0i>k1u&R9.i^um;_{1>}lF1ǝ}&%)vMg]9\P5!yݞxS]%5:]IΫW޵ϯ|% Nh4ǔ1VcYHP2fv%/wg%cʆGpȯ̫'jgxDPcpuDl mn >.kT%ݡEm a a?!((Xt˧x^k4\7Pnc^A-wt`fvU^a+ )Pķr]nY7j?*$2Q~nH)l> [Nf!1Ä`Ԡ 2M<H)Š~Kڣ(zd8nǵz>}}wfs\s?o,jJe)@y6%G·9ґEjۂL7<u+r1ڧG;ZMm`pVP@>A"^ V.)s.0UlhntX^x[ЗLP-!U=BhѺk3..VUvW&lo q9aPlI,#x[ ͇ûVs$iX'Q+mw˾lFB3|T͂_M 5:/938 P 6~LAB}8Vn" p4h٢DZ'WS˹n]d?g9?M0a<]=lN%㰊"ZPՍRg9l.adQ(efU}^$},y1|(& 9!(@ -ETVL`G9[|lTx˜+nǢdlR}=M6`:ZK1'F b˪1^8}4oG7« :<#kN^ $.&XuqRN  aZ'Yaa8P0! }%MF;뺛D}0EV/f6-f 7uY~]nBJ$8 2}ϋ0 Iyzgg'{f)Nxh ,o_7Hw23Kz< j' --$ [yORՋ.7 € _lw]5g53FG8XhQ_Ê$b`>% C-_Nzgl;8eP0!PYKR[4g!^=xN|^MwUj洮ńq0EdVly@_ݤVe y'i*R;mA !A8Xxu}>$MkD{M/ a|fTDZ ֏H7yA1.Sʵa> ҁ8 k@jpCKƞX .h/0dIoQ\BC|)׿ǿyʶGol0tQ3NG3 ogqnX91J1 kp}!! rˎDU7s䏩'D&\mD0c^!nEuG3%=D@65 MmT0)pP+?!I T3&IhD+7wS\%c]~ӭ59<7=1rv6o=(:}%NQƥq91sBcW!Tsʜƞ#^ eQe8o/u+'S\}Ռ"+LեA+W[J8\Vd0zT%oAGwpBF&jk EUwyhB.KK.4PcYs]] qFB@9{<]WӵmE\fuz03GP#!VX,z DѸ-Ds|rtkt~~D!h'=ku%ԭdַǞ?f=d?9,81m&ֹUr:pEwI6c ς:;?8h|pZ3"F ⑊:Nst./7@}*EK- fČ jCⶇ=0tr3`×u 5(*>H1hZ+Yyu^|=?4$80]TM;$ły\r3L +ə65Scb}M|9lr} {tO dz"xPP/! WV) }D#)4$Yx|FFM,}ZiRu!ܤ"TFT^M:ہ6Ăޒl.pȆr+ Mڔ"DŽZ`DP~wˣ&z۝ pDqßk*:axL<_ӄCK^ߐ8q)5=|;`ˋaYL/ąC2\r8jA"O819Қ7kYxv#d1X ̛=RsNHhtNR#^ Y*;$ˤXUjVE^%T `> buwY>l]5"槇 $P0_!+kiT\} ϡ H/efQq+.^uS~TQ@'7kTxްiKh̲:VgWHbBa"pĔ}u3|fJ׭_#; | J瑓;LހkAA1^i#pdxU>DO>nPl)^ @OD}͎i]ٙ*+B%f1u؉{.hV-zHY?ȱ8c/0_#LP1trD///F4i8:4x&@o@ԃ[!Fj(LLkY/Cﯱ8 X-OTG2L~9]g}.[q]3jw5G7IÞy뽝h'>_+bŋS]w`Kl ыg&![\И*  qnY)KR6gț*B˗ 6~pͩs]40^P2?! S m ӡ }d$"x󓣣}?.;_#P|pDlZL)IMܟ%{SEXd:jB1$*RE8<.11 8h49wH* NIQ׎3!]+{v4G}O@B<˔z{P2!%PR] _eK+/ϟ_O]AS;[$U{{q16 tb!]V:ed(F-m!#U:))nCg*@P>:>tȒ?HC{Psu>efp#& hqL $jR`A ͌RZ5YYQ&hǭ~SL3leoI|VxϣٔC`*7yՕ!?ke?A1ʔ9`` ļ[_Glk4+DYS^v "4춀iŽ;{^P/!Q]vF߿qT2su}U=o=0=~ @ Iald x{(S:$Wh̔;\X tNF|d3}h0/\v ȂJFpxhcZ%[u2k!G&UN8.]m[Ak7uZ4V:Gxt>- w߶]Sq3/RtwWuS^8`Mtp}q}A9ʥHaA#NVU%.)޸'WT+b3r=7P hO#a PP/! O\pBÿ;$cYOd8:m{\#vQ79eS9 A]~ä/ } 9 =P1?!R] #B}~o6UpD#5g<^~O]b4, {<:Qiu-<)[}k>EK1?]0RV*/!;R; L}ӡm^bv{uQ{ 'mckI[D;yctHKz(gٷ/阣-ɞD90'ħ3?3ufq`wϷ0g9M."']TΙS#/L }kA`i$085!t"-Bǵuwieu-?1`[1? [%̂ryC/'#6^I^4(.'EvG! zћNL&W)LX$(u}B[Sf3R@0x"hlw pP2 Z\ ͡4hls ޢkUze?׶g&Ϟ|!C&)+3 *UZ^5Fxj&?ff9kx$q.679p=iF/T@o[ğqH@x{,I3-g8 )oo 4cxӌd@ v!gm/ Rl) Tշ[Σ[?g:c>g`3qU!I;"D2`ˣSy!\9Oұg[%:))ShTlۊ/oz{+s9CZ%繀K0[UC?KLuItKư|]ļrOzZk\MP]}3ukD^q)ok"訖6WεyJEԶt֪hE_@WylˣlAö6vvb$E/H<9WWDgVO&fyLW9u~M=ν~_{zǡ={#Ř9N/ Kgmm1#'~W4S>p/"|_^*G[s~eL\4@hA4K7_ƸZ7\Vp^ >x2O qs~wsYؤ7{Lۼ}V||WUs gNpvXOrQmnYzl=7yM9p\6:`c#DdZ\y/&jսӢѮ? -(Gwi8ubt%sPˀPL4@($-ڈ{Y:Q+ǘ&ne޵ cV_G|n=d*.Ƞ3][pP)8P/?! K~U.O_zIb~`G_흋}3$ItoF3P+e(6yN# 0M{(r! >ӂ2QDLvB9wLRb:ح0, Ncp ߬IdY@0ݺ$ @ De[ʣЙ4^K=qQZ4fn|wgItڊR&#Ftuʇn/.Yӟ\g:ɾf>7:9|lQpr o[E0R*@e*l ǣv0Gq'>wx357J4۽Pu1;Kre2OkG <5j=|zVDM7 j HR P<=2$#HM-28t"B!|: +|bVZnG{\+`qOE8^ߣV *oz/3Ǽ>Ep§먯GҡlU=} nюNkw}(mFH4~ Q @aK7P/_! #7S] j#^ˢW񬸆8^Fg?;y`GWfze1Q@$^Se8BJ4#$pjfNt`|n(rmͅ@B18S;`rwttq1 5x3qx]" "pԃv( 3A?eZPjpx5idPD>!D3zb\nDft?PZtqetl:8wqK ld^ϙ\o8^Su\RN}a1+8ꌽEjDJx q"{"o^@0&P(bP2!#T[)ˡuz9u? xJn948{ h,w?(^Z &J `rbtrʷ):ءnyTݺ8/&%/9.vQ%$ ]~˃%NKqw԰C;# q# ܯG"h8 yg>k|--L/ :f mo7 Q/{~I"eso>sHP/! ʧQW D=n湹2s_wK&SO7D^:k1H"Xfuʶ &#^^<\XXՓ%]_˼~wRUe> >} @h=|@r\- ̇| H:8 E8x9 ;fpt"#Vp=ΜV\˓]綗~? OBU+ iyNAȥЃ]lC9KXK`*Ma}i>?\9U63B(1,G+&H s!h K.De=|5eP0! zM@P[iN#v9w?/On(<_M))3)M`Q%L,am8EK')S I[5'~H4Yh"@@" *BXS368O {*j^L ]tQZt 89 e 0%}T3N[J Y8Lks&8V|wuVu!m 4lw !~?Z*?ׁޤ k(yRcO^ m׉ L8It Ω]0 nx=0 /UYPrn7.T.$R cWP2_! BPˡhL'3w\wxNZ{u?F߮'|z +=sRLSчG=jL"e)f(Jl,ePFN)x),P })Y9qOz @}b~u }\97j$4a3i 3`K ;pf5$ޚė˘ ":}CBQ\"Gás޸竻¯eL5,?5ޮEo:ҘWOvEemDcz^!bkG?ޜ oH]T ۝9kM|aP~ KR8~fº ؀T^˶b2M?53P+! y~4Q6&1hLCxfjn_}gzyom߷ּ~x_P-T6e3q1 f dYrrNBG3XE6wLaUF`1΄2\vG)su&v>P L?8]+DPuAb(&mD$=7I:?P3K.5TގM5GJ plozm~m },Pp̤[#-ݗyY\u]@kx=P%%'Pg =  QdP-! X\%BAЈt/-w^/gϷ1{ DO?u@|ӫ;V6uR7,8 %5Q-ĶZP |ɋq,(pyԖآ{ji=<]{2L'ۜo /H?=5`d.(D0o^7{笊]3DzABwZ5޹/<oM>+~Zї촐${۩CNLǂL ,X9Zb3usF5KqO=,89Vďͣ'^' ϬJ.~'Ɨ&}qN{V%ph88緂(m GDZuoA 0fV]+_L;WFdx1s+ `װ=tp @E`J>O`HRGAӅkOkXeĩ35͉lR*eO Q^SW7%){9bi2x٩^%{s)ϝǾ.~.οN/ɋ0O:LDyBZcO4lrGj`2P-! S]%+2JjW'=_?o?u 5[lbweGԣ}Ԁj3"U2"Ͱe!KUBȢJW:cҰʘs~;cIZU2CKxJ$a+t j'd13[e<` RXS ~z V)yQaלJ3YDW@ :Yp ٯ%\QřY?t/+8τ{޴S"Ui޿c\]+Ά$J_:MŏU~'/ԅd0N>ezwP.! s R]$jSFE7eΒ[IVTWC/_5>ayR˧wo5fq35ov?"blM]5> D*&h眈X!ϣx99ɷ^QnZԕ,G!v ozq—C-0@JJ$%,"Ih SP4,x*U*>@qgUa^̑vm"nPr v7ZC3(w?-E)]5Nl  \yˮccC?. w~/t4˛E* lYjS>|~_ P,?!@Q]-W qNIH==͊KbKȣtɟDMTy&!M;*JO. ҩ} “Hr1HM0Y`b'>ԕX6Bf.s{0+3762u8j l@ 4: P$! SVSS.ä0ZKʗۘgn8n8kT=ѐh0,jGg*($D=(B2W@ @7b +ReT&PXT~/rKuy^?/=Sm7Xš1MCA`:CšT7W1WO+*i5ojljؙg2~5=HҿgxI[OsFnWɬp X g|s)IFh8P3!9S!R$pKnjY{'w:߮V{2ѪNDbbdۤ:i4ô;&#"IO3˷; 7EZ 1~k?ӅZL4>^Ži" F8  3n;&~c]P'\\ VE%u=* AɌ$EY ԤN;x}.k܀z{KgfFȩ*=z3؄džҧAQ=ZT=|C.sȬUYë9ed 5x|U*_^SKG, #򹼮o(e ='\:+;``P6_! oSZQ#<>snV\UԷ|ߧz[[쐧LJU`4O4XVHnB\ĥe*ie9axҏǣBnFw`oQ Hē-niw-yør@hhb'U>tQOm qC@Ζ&IE|zĮ毛\VKUԾrq_??]5ͅ.ֲ=_ܻn_RQGZwABxhIX!ua~p݁m k fst5GZnt[c_2 2+VW`6ihD>L0Sg7?džȑ380P1! oT\l9!#Љt-G=oۖTJ.;ٗ_UfaX1yܭ5HLJLf&xV0rM-*d9$NT\jQ`ܶ #E#7P fE$[PU.@=,>`:=Ll3J2I ^XoTZ= !h]{niut\l @lR5&7E&gG;BNj3+wJ7e/>?A.ER1lf#|  w.y>Ap ^T m9Mmup5*퐄/ǍwI2LNwן5T ӹҨ JsӥrFdԐ;R[K],ܒ pMwKuVꐲ)z(,N9E.ŒUz H4cBi`>@/WP,! FTڡR.hjNM3YZz?O Tq?-~ѽN-*JNIC8u$  $K/2S4.Y!P-XS fk犗PX *d^d B€_:rI I.0=74`3kkikXsK2xD^'7^XgyymOӉ?2NX)5-Qr˼յ+ 3ja0 0 ^`0負~ٞ>F((@CfS d pP&! TQوNChܓ^W-޵59xI+<6ep< bX#z?T2Í1+ۻq"Dcqd{waȐZa:ʤn z}lNVq㿲 u0UkwޗVG)JˡhD:DqUoWW-޵Bw\V=F}fR&{}\pzdCeE(3я) EWO>}`LY^}-'e"3bRkY^yV^KT'^JjBNז$jQ$<.,c";8ťN='irRYu( +ז570~]FY.Vj("JoG@^01ȲXEZD%XgSZ{^& +@ 7]Z_k~qW;Z464ȡ2Ko#++7uV޴r=D[ٜtZgA*hSH泣2$J:H/N:~' "ZE?nk 藌-%Z ʙZ`bc3 /8t:=o@Ww3q&uPkaLt@'P-?!0P\l- bиJm ^<̌l|ꮣk^G?4V2؋/p#fkC57)p''OT)jm=r"89%-C@},eՍk800BQ:!fUyW8^wzy]@ߵya@E@~@m6Ca$`fJm4fCZ#BNl|ꮣks_2[laEpڭ49Ѽ@XO 3 ]vZC)oo4sͪ )%}ʣ\ e[bɱ4P_lP.! P\R$"5לN+"$;VU@%g!/d dcϩ5oNLS10BiB@6F-RS}O7&Rg8eUt{mG')jleq_q?{uc8ٿgjvu:a2'?~\PFݡ M,D02V긯|N&ަ4wjAsQ|.y)<2Xu7ԁdYQJ NJayBj @!^*jeڙL, 8L+ x07P.?! OU- GpLC4'-qVq5X{JP]Guͭ魮Lf ö&hLZ=@7%3,C,ڐxPla`P>e=>"Dm~7c8K#,UL00?h @R' lypП+^ c%O!(L)Y֦کZʚ?mZMwSu6H~;UUP: |BVh~*n hV;/U(L^ݻ01\ 1sH>Ɠ@YqEP/!Ty߷U!7ա LZW5$޳ڱk9]^~BsUsby 8drj =V Ϭpg5GR7AL-XC$RY>| eFTa9;ӻp MmcEe3T/;^a*jw8rfŬg/==^9w˫8]DZ +kiOc sS}*=7x<}-hDuYTkmT3ι߿MRu>Sm cG[f}Ӳр:{S ޴8SxD8MewNa#ٕj Djmeq+&@<ªc$5(l+5o؏?zIO?IACbp5Kg×av[3zhqssl|,L `">gdҢhx*C%M7:h;6쀍G+u|ѣ>G.%kwkr_:~'׶4_e_Iy⫛?JLJD6!XKS8ÎBN/25Ԥ"Ix*2^ g9x};b x@+GB~.:P0P0!0SY)4 D}Mb{M.1{DK\Kr۝f%+ߏ9ɢo8}U|}NXwEHA7b;^9L 9uXNKWٺW6#80ip@6@ \b]<ߗD.zmtf7!eB!=,MU=шp:.x|7 Fy{/̤@Z mE#̳E :s Y#1tXXԬm7&)y2<4xzTa)f+R.݀7?`8P.! i{/SY*J] F?r^]}c]:?Y%ZƗ?y ?ByY>j` ʭd9ΐrY'p < _Ѿ W ǟ=įDAl}? h3D O$}lz/:UFG4AMc"3JTVV_?s:Sll.7Y|SV НuC-˫zHJŸ *)GN Q~DRB,#\vD^g,k5P({X% `GI׆Q}h a`P"y1*#q7P%!sRU$FǢi:d^WԗOwNkp8W/>vla49Rzա/,Z 'Bfp 6zݵ Upc}H00tL?S@}sիZC|'/;:8ݮy: fkB Wk D̔T s΀6p;{gt|7Y2a Cp7:7 $ j˝c;ܮ0 8P1!%}WYt d!7\>5WtYx_|'m}ނ覌z| 0 b9DqNi"ax^E&ݠc#lYχW:P\Yvm]ި*10=+%`8z]/A@Deh(.odu3"b4GP1үjJ)cPó>(h `bdijdx\*]+8wY{7ڵ(>͖̳2t2?Z,D;tHhRBGȮv&J^I \—IbeuTHkCo ^`A:x@P3! U\RsBJm=j> !Fߴy8ͽ# i*M 3ƂS7K3 &p+%dHR /)Hkؤw=nmpiֱ5SKwY^I7}dŏu"8i߸ (useYUeB$*PUb˚ʫŜb50nGWv l2HM>G測ھPn7=S$K)t9vHMX}sx&3toUb9KkR GgSyGG"U_C*keg^%95Jy"yW--בnJdķ<vF^n:T@8P7! rxS]%Q[xi78;w}A̡wCbE9#݈Y$ÕmCۊRd)pYNf`gY:yuh?}'qwŜC/oz'd:IDc'#g9ߛz~a{=3?,>VxPF.1E&c!ij(SU1|5q_1pB+!laP7qX,(5^mm77@ P/! VpOsYHkvH_|oLTй"GUXEM8A_nR10KJaq=Bx裇<QEK | /Ҧ/ӫ*?!.zlWNߠ K!&ϴVxT( #iuV~<}|w%ku"7ןW1}Fz8:U.H3W>N@dQgZ2jsg]=WXX5UǦ5IaT 4bás^lTBk6q?%k^翸TgDxK/Nw$)e5(W,(asyύ[)_PVhW5V//ˌ/v }Lpu̅4\ f(RH[JddP3! xT{POܠRs7}w׷_ēv X>'ZèD]a->cy}) ģXxާW|X^C*ʸPj:/> g~5O]yV 1V@7H&jb T%uXX8{漲fA'y/u䤾_19/QI3!|-+~K58TWz̝4P4/RF, xsm)" %S#:Ux6Cw7n 3ZR Ҁ'N`g |E@v(gs:&P2_!F߲@Q]%bqN0Z|)chBXU~0ۗ\fqP~ oDv(Q*0~9\wN9rb7L׿jaiRps݌cڴXe 1I2*CDGkE ̾8Оu:ۛ +Vqǧg/(-"(3E@>^ mXS4&c-.Ō0ߥ}/mV+e H_( @yH̀@'@ R MyOFNI'._W7*RJәik_ʿ~yf݀h9#XerHp :қ.0C (QSMgo=~V&nVW ApnS "(8A b雰th D 5]7P.! G_@R] 4%AL玧3}ofkS2Ӎ?o4(XMo]jt:X7y"==u~E׀+ZĽ`HUKWWoW^$x J{Cz\SMw˻",H ] 2`~@Oߙ'n8Bs [̡^?~zSϯTyk?z ep4I_SEDdߣ 4(wf ^3 ɦn郂ۦQXl-OJ\XNi揰`?`)@e?Kc6}#.D!,Д>ÜP*!OS[t6&ED.UǍ\_y.іU߯onmG +tg?ϋ9yaŧqsbuXŁºC" I{ c<o+qЈt"Cw]dv_o/-_BRGAPL H00;.QYq׉g\/ mܡ*|:Y%ϲTW Ϡ <@pP,!LT[hs㏝4$V=qUPr~c;(q('aAFH 4 }lt |B A:ΗZ> }sTwH!AO?2 8|9ny@@1{FZ'z$rF,{0,`OD/k+t$%zX}ljwmb6qV}~neozrTKSN9ՠ;,Lќސ qg' q`,QP֑e qZ~Jcߨpkd2/?B~T V9{ qç{5kP2!luR]B9^޵inuηĨo]R <}.8w+F&=C%O9!NP(xd٘{q`2S7# 1;2ӷZɃSk%h%*6qvYz,J=V6`ïn@d8tП̀< n\n"s :m$TJ^#Z|eԔojF/9~+Yt^)?^;z~tΥJR`K`da2Yg.Ǯ?>=_(+h@,^b q`c0L6C2" <]oH>N vGd>b P1!sn?@R%.~k&57n+/-u;Y&6 ~d ͉%KcD@( zLҔ  (>Ve:ka˖VWta8U (r҆Z ,Q t Jң~+G s@N6[h4: |`G]-i"x^"&V״f^uYyoǿ5_k}lMӑ.ϷJv k=| ƛيxu8h1,p袎{`Ս,ƙ.߱)`#8;0:kr?&]R⍬E _xP+>Y =4Y F2kmEIBQ/r6_(oHkOnrYÜCLA]^t.W@W 0%s@|e%龤ی~o=1=t4NroM-Gar^!4&I|~=Ƿo܀3ң>GirΧ[{^(焾P>b&3 T(ÂoeTK?|rو}# @5aܟn'}\WƓw.| 1Кp$#?typk$ td㟧2P+MU\{k[Je5^Z}s;S.Ҙ'dOa4Cpe'4Zw KQ,H]G9%O$X.=\j 8@jFuw&\'P [1q$5$epV9zh;e `#K)kRd,{ĺ5ۊ|eDԔh\{q8.eOIʒ=㳕ZȺGw (ގk=?eG[=#MRa8U}#tHNl)_}nP8rD@XA,B#ixu9yF\RӇ͟@[ŀY1B}!1ϰY.HKO'TP:@8A*X,!G=*sJbmz`߷5ya+:(P+! C߿V)*mš4h]mVi2䪑HLƟ/5ⳇvp*N483lJRI3.lsmQ7y57jGO>'0^Yh CLGR6ɒRo-Yp+b/i xnkpt-u͆2dkRIr6>Q YNO_w ]ZxoEr@:Mox0Pti^9pB^JePۮ\: Ǫ*E8"O:ϕffttNG+<\8j Ԇ0|CWEyC2r!no F"kcN vV+Y{q>여ԪW:@@pP1!swT),5B'!hD.9Ԗ'Σ}cdE1 #[]ЖxuP g8v x{ Ih͟@ltpJP!r Q.8z[eM 2"OCudb]t?Gi`OE! RϨ)h hg!{JD|YA5,Z.<;T.uw[Ppk#zJNP-! ^U\%BЉtD ꮢ1˜y'?JQҳKh[g)sfn5(>5uϫlJm6trǔڼ=S>>(650@ 5m#uCԜ#31, :'i}6W\|O \\0#U[(EG"O FzJur.;_o~c@Wg_gJ R [a+w-$T<qvPC,.4"o`A { W,+p  LcǨ ROP._! T\(C;Uq߷ufy9o_{LsXUxGLu8wI Qshp`1* .yM%za6 N^ e\A9T8 _ ح;R`t[U۽eSs䪖A/W}htt^PsvLiɆ~ o\X_1xrʞ WMb } Й"oAIw8گIr#o֭~xHb4&Ah\}* WJBSr#ځJD]ӪHF e껺]ĴCZ= 81vQP3!JS\`aD4H.{wZ]߿J+URx׏t ~ 2\6ƈn"%õ^Y1Ҝn}Y++V[R}\FE/ߥ #]$bؘ8Df,"YU\ ^K*:==@`l6vN@gU–sp?0P^h[*JH{d%2DZCP]wug)TN o']mY[QsR,"ҖXǴa6?.Ƀ~u#vhQN|J4 DUZø5.(Xܫ@ }qP^S$?@Oxʠ]V;P0!2 T`1.DhЈۊwM+SwU:~h+}`;QiLZjv-hzZO9aZy Lm_Ne/ v[Wǜ먖Cm,NFŤKW"hSS@?g(drnKW-DAXضk;NPc`nZtL#Ш#VI2nzu(ۗ}[uVs3ƍt<%(<7W,X҇l_I^2Z<\lj4$N<7wO58.PmvKV'@Xx5,C.PP1!3RܠgBj^/x߷?o;>JiIl|qClE#/j].IW;w/Wl6XJ~SE 9c%ctѰz8a为?{,9. B\^DA=@aZe>Ŋ|mu'Q8x gT)?6RE1Bf|:&Lߜ5UprdOB_/BϖBT]4?Mk:9@xiFpRA LwdtNvMdC) |ssoO's/_w8{G+J=~a@G>Nnj@5P,! U\`C~]]LJIS_d~+2o5EFN rib6z̓-9$Ιh{=*EpO 8,@ ͠=H XXAka: ;3څHO8>Dzi gY0ƲACU8:wff1)%N__o_)>Yh Ϳ&f#b{E>nl8CeT2_(E|huϣJ"J8q`YVc, +=M0s̀Da.pO:)P,!V>?S\ M^9Tޥ\ܵ]uOq:Y~IFp³]z4KNff!8I-Ŋq>5sC܄Лn$(zܼGt>69w;^DwnϤH^eC4#4ʿ? a.>v,`/d.܀8yֹ:V=@O@ٕ@luNk ‚n-å7ͷ*֯jޕ7 ۡx>'VNV[NemOzwkѝh+ݍle Wdaim~\f$lڥPOܻ {`.TR1=_uɁ3ݫisS7pb/f/ąxdpGݬ8P.! ˽T\ .z zO{uxZk 0|H0:@( aPJrP1 +S.E5hTnۘoȚJݟO{#>Ǎv_,`܍N63xxzWuzq^^BKZbfpdC>:F7>s3y<7*܃o˲OJesPᆵ̖'dڃ1ڷ d kAbeZR6,5&UH%I+57Z_sѹ߸T6{9QbkWh-쿅oc. ׃.ձ-Mh$Y&/];9#k]l#UHx90Al ؞x _}0#@ Ǭ_>˵Rnb`KP) Ld|KZf.z_gkOqeu35G}ہ<]I]i;=,p@ &>Z0uD旦)/a&)2j,K~FV {nMW8#~̒x;A#J.yD0'0'Uqx-Z1h\ZACo]+y]JcTvIU5@D .(vIkNȲZlZyIL{jJ/._O:?O`LV8lrmtԒs#*]K׷M)&h >G$R0[sA%A|oXΕhjZCeN y yJ&XWq<+'tߍ[+fU5SK8x'#)_BS3m}yrYz[? F[өsVxg0V_P._! ￿VaNb&=ݤ%ֶ꩜7ߟopB43~q̀Xg8EZ楫k4Lem81y''Ύ@F$qw@u'΢չ-gƘ #W@so &OvuX";W3g=BFXiD]M šx:#v󍺪Hަj?9z<),X 1wT_SP"䄸 G cY~m-u΃ %?^!oȁ `2Ej yNx~5=eIF^w|l5,@P0!ý~TZ3̝m:UH귩?wYWc'$uek;e*/s6e07PXԹ4znG MPIELHw+ |GꉯDHysANpT0?TgCS ,C:u7ʒ>=`/r%~7*](eS5EQz#&!3:ەtz,If$n4&[A[@FjK,o hmoQ ;H(+C;VD1P^3Er@t욗[T ϠԮf 8P1!IvT\ 3Jк- n/neJYw6e9ьHYtVJTq~ZIV #{8Dk ^a.em#(}` pZWu{' AҲbʧwXs8 @2E FDei[]MTq:Ѣ]sn3WZE53ǯ:f"P[{|;?uGLBs9$Sc Aw /Ulo,;YF|K#@68waZbRs GU uER-N> 2P3!I1T[i.C޵˅//g^=~=oo8tqi2O?5ddHSr#hTģVhjaRI)p'()HZI7[|ۍ0hp=PykXBLw(<ۼ  OSc*(#Ia qV[L]};c-}Fl{h DqyvGe P-z[WP2_! ,+`S[i,EB%}ZSuUQ* |p"Q`3ms MHeb?% '[J?@LQG [bLntWAtHlы>X'2 w D|؁ =b+ yJ\ f %І?lzc4p)pC8t&M$и_|jZ3uO?}}?,XZvz Y>%U"(BVTOҕiY8ĥ{A0 8XĮ*P >TIK nKE?~ E O >x@~@b G8P/!,SZ谣VChW}fkߎ?N?,ŸIxX>I~̊"$$%) k;?o[/*ӟ =kRD+sF-_W=җ S!uB|utJѝ9ǶE-X<= PH@ pv5.P`j^Z8*Q+[Ԫ]_q?- 9կ>Fbz@M? H5m :(ixbl]bp'#jհ urSozd=3_բ 㻐|  ;|+?*齍\}@YvV08P0!?t@T[i*D"8=JzÌI78Y=WS@7}0zZB[uUZjC.O2:un\rs;_:P6Og=Lm {rgGM:+)d@p)87%B|o Z0'BDڪՒ8X~Y? B|Q,x;6$xЃ}c%*!JO`}uw6ᇛ,`eĹ:d n Q1+H{>wP q @4 ? 5 <`&XĥLP-! w>2T\XT&!B!"D!Iˮzji+:vRyT3Wd%|Խ߭h`ZAAa\W!] [p89p=Ѳ qЙͫcوd5Zv @eTה?~#F~|r 4XJ TQCH&B#5KqR<8}MfHnotNW1gm1'U߆ct#qRXpDJiQʴTT}@>5aM.#qiO{(D( ]c( qzP-!'S[H8{_6Meu\snm;I~MVH0c >eMGGIQkC.qgrYRʐJ tu=E)4 9R\ Gdn(txDǝh7ST&`2rۦB!Bjxsu&es?kӎ>ꏯ4Y|UŔ%F곆?9g<)uh$t;f8gQ6wM vRC8PpA)Ӿ^#ǻݑ6>g҉FSɄ!H\  2P0!c T[iN3y Ku{ˉ59ڷU`m͘zѝ갯OMMFέnةHU`Tx҉j0tM12xťq?_TU7slVœ<w./.l P<6Nqs9rE`wCDw{no`D/>*/)cڅVpI <13?}rifajxt: b_EM@Kנ|) , * Ů3DZ!&:|^Uf௟WYHж}Wlq(/]uIPJR/kWr)j"t!RFβO>+Ɖ8N~R&su;@ 9 )Ú *X.Bފ25o3X, q&`8P:_ x3 e"N1RJFqrNu/^e{__l3Yu2yMoqhmxNg19*Csӡè3t^N>-Uv ofuRi8]bIg00N>'zl=*Gu{9 d?5i 4Э7!?ZbWb_WgWN ϡώ!V${uL,tْ_^_]Cq,=Y޽ 4nټ NTV}BJϋ/Iy s05 % =K%а](뙙vW.|:G듥YFaEej11Oxn^bU%5Y5h3e2&?-`n{Pg- |4@ 3>+{\]b8P+ fpNIL s8R%];ΊJ~]lA"e8r[SRW1 <'+:U? N.$_Wm5Ryw*Qqf4 aߢ &^y's'YZs * }g+,Aw@hNt Y苠e""mY2#I)P/! /Qfg dPMcǛ;,J/}uo? )zQ U6rÔ9pAjX 8q$8PB6'אfhK?M 'pi˻nΗ I*Crk{IXbJq,&Eš D+}oM.Q|k_?ǻOT!Jש Z;ڬI4cB4@ a@(sXjXb(.@;Qz;>P.!?N\f&G:熲VU+?ҿOV*7գE&Ze.kr |h=CW2,e$Լ6% ybL#=taI赪4 ]n8\@^&Y 3\-j/WW@uݲ6ϝ;£wƀlLdT^FSeMs2j]q+Ԍ8ȵ䱄3KHGnBK,CfPN%9ĴtHwNo==gwa_a_btPy#D=`'/jpP/! N2Q#ϡ!&5FKKu_;O *rKNmzϭi(vFum1 \D&Р_E਽Dǚp~]R':q/{g`5'*H+r9tD'^)OZp9@/ךuiTE%K8;oq*q X n|\}`PxjExP0! o?M)@gАwڭwǿ|b3^~6p r6IN-^5dW)!Yfl,J[̄,O)y] z`l4:aTxpmhϣUj LnDtG SmbKֈc RF$kG)| &"OA3k^۽wo?y?~vԯDЯÐ9). 8SNZ,9Ta zO'^b=-5}1pNZYoƲWtݨ@""~ Z_T5D"Z ^`6e0gP0! L\BI V+9!KV?WZq5nC;?|nng(.c6(cq }jB3G1M :[|Cj\5sK[Hחe1H  m1~t4uL%+?;2Wt(@2S$PpP,_! :P\(3dPolzާWyw?nqdqSEnw((zrJ刃uy{xhq1Gt 8 \y1o9WZ& g `([{0W~P(!8TY* SG3hDZGsw[NtRX^O*_(ѻqva2j9* /B3]0[MF >c9X ڄ/*I'X z88ePj%<BhZn|9⮗zVWϿyEufpz:0UH^_P.ZBnWJTbobYkeKﮡO證Ւ1d>Ye;`g @/pUgPt'*U: M#9Pah>^ոiJicZXCe<' ;h7\Uϸ }R^8DkTqG@0u8XҖ~X9P/_![wS\#q~{2Hwk>'oӏ?@e479~ܕZC7gw( sYcJ4P-! SmX!BiАtLsf_ o<~?c k/ Hh-@'A:m&DD/ȈW`:[ϪX[]143M4|$%oGZHoʂT{y(mRZR2nu+Sch;D{ij)i|[ 5. ~Oʀ\Dڃ̂[P/! R\`o>ɜRW:k|OZt CDay f2+~2K 徹2^5G1?s"Ui'p1qïgUZGPM gﭛ(\O'ˢjޟ&Wͱ Z"&bxx@nP(! ?$XjLXDbЈtMT߶q*Kixwqo?Z[,q}bέ/%oŷ6niX58Yܥj"8c$4ELϕPR^\IĘX`xzpO]gFfmRTBYhVázD޼qrUh՞*$}3͖iE_¼X(F 5:tu 85Rg#qX o{3̀P3!(S[i"'wν(|x/ϼsW3WS_" tDjX@C>p[ts@3SYNY0[d"%PP8Յm{W+_ЅV+/8ь}<"}+虹\n O+I8U+!VEuJT.YFl<#7i|)~_- ڙ5O^zVMmaȠa.CNnԻ.xx~t?wqſg$v~ίNXݴ|ewvA0tҟdգgĻF,EV+hecH&lc#9^F`WK`k(P/! CTi.s s;Ҥ 㯿|{{9a&8'UO1$4Y(m_Xli*Tx6 a ,uRDf]vB*FqR Ea>&+kj~tּx+چZ3BsۆWR@BhT_=7?P4?e†$О:(H_9'w8P O)LIMUk!R{߾=P9aՍyrrHG_(w8lHVZ)’.pܶ CPa's)^G/l 'ϱs& 'PP/!߻VasS4J+<7!4v5M -[ ̨{}[,ULl.xPϡ!7`dN500ST|9OUG} RGNJtxz :nNe]c+ @0Ґ#l'Hz@" KUW7Y E(MK(fVJk r|׾W<*$LTv%5}+5M(>ej(dS_9$qm{]&7WQ"toa\x?$Wp <sX/fl\"2@@'P2! V|=o7Fk.[|WYzM ]8XWA<n8:dT~,DN1=:V;P^YT|YaC, ؇i ME$K@M=6WY|n|CYgpV7*wH * - A>"ҟe?i n( qKi+h^8䧄kb R]_tE(%05z+X^Ko|~~a^-Klj~(_֝c5LPRaW)r *7\S! WRXc8aC-u Oy]$z +9օzsw[3 ; SB PPJ";Ħ@ pP.!KV[񺛒^%]H-Y|{~zu쾷Zh)Їa:W(qeoժfxkx{N|US~yW[S9sWAݵT1h@eX9pϏy@8J}єIAC3 c^~N= ~tGIcMY U5+n{s̗__0Zl[vK0Ou0䓲FKnfH8m?w3~WN.GiCWǿ6g/֏c0 VR'` UKP,7"(d-p_P._! IeU]$':㾥k R޷8w/]m+>}D]{˱I%*Y{^/^ZDx]JӃߍfp, \M•E!E@ x0m<ӎ9_O kֿ ~>)aUs u@*Ir޸$8Y`Ӯ=mllmӇ-TzҪ$ȎUno[}&ǷbPu(ْlF)wrz ȃ͢0A 4t!$}LW{[>UY '7[ ~C&>Ș?\j;/m\O'P l@P/?!߰T\ 'znw2YW _NxB1SUK݅:Y"/R,⹭5SEգ㞧MskZݛ1(E_hAĠW:8>}<>Np3.tG4kAm#2\0Kvĺ)Mm,!_Ճ81H'UiXlC=gxj\+]|x{}+S>5uPVDǓE2p.mIO] ?<-"6 +8F,bV{e~{X鵿*f"YFԢQQmߚ T1 <{Dpp&r7EEy8lzMn8A< KJsP`Cap* pP.!i~Rg&mN|\3?||?h "/2`Fr_rf]U ɪ,*I@١IK<7-/5Ȍ(VϕXzvh)g3@o)S jwХQ0O-b@cMN$i6`]TIshQ0)Hj8QҒ{˲\ =޷+<|IyMSN>jf#8&,w35Ak~54jut+a4h!װ4..,eQԡsCkZ(K:a*߆Q (7yZM}Rҗ7?Wz^}qz (!il ^;R8C!-_R[f :iOM֧TwW nN͖¡ RX 0iP/!5y?RԢr!ښ7yjg]^/՜QjȸjǑK~Iŵr(.qgҁK՜ɜhT ) Bt\cq詇$b3Όo콢fiGGG @F I9b""Q-SF{|\/v3) `ǿ2 NTA 9k&I,uz8)DV,q_Uߝ{F5Ro\Ƶu>Y xD?㈘KiV]ٕ7r]|Ex MK_g|ms?2q|d2D;pF&DK%qP8P-?!gR\ #P=')/ sϟR0A$@?4vF|>V9齅ϭMK=iҪf;rK$.Os\gvɯk}~ʇ{vn>@ohtJ,%P}ᖝFާgg2)G@<_mNa;[")*%ImIWZu sy WL(Y4LIG~?9Wf.Vxm;<1kuُu9W=SF)GşJҤ@HA%*@pP1?!`~J\` Cxzn^'d^Z%_@N4B]' 6L BI u*\-Ub ;n0=4\cXո3Jܟw9"jhQ߈gەeX|^R`lĩfIKsDc7@}٨KLLSK_u 0*.[0D FNs^J\#?_k5޵E@Myp!d JBO0$"bޒ0U ܜ`ϭՕG 8ae~48Lw}KCein_iNr5z@x,QehJ T1P/!Q Jc+d!3; oT+3BEIàCc*\QYʇ% j|i6AAƷB1ffs)BXZKMdž=zV(34z>8OSձR ďqG Hp5+.s0tugScZ2vfLK2l1]S?ė"0T,|f*3(ZСy|x VQ}x ~a˜A`}VM zQܪV /=Vήw!=] ǜ-7`'y^v>0=; hPޔK, ؆!Ds@P+!+uBRTZM ǢD:!Vqy\nYǫή_}Mma㷠iʷwFHQ,@MslTɆ"h,cI'`˂q$[/KImtCt P[PL9Eho-+J)#HY8Wg$5jƹLAS^BTP7B8wP}ꨁm(vH?R{ag$6?7w̏ɤ?ƂS}?#o?PG!Ll+M%6c1nyG߯?,?J{\]o5 iIr̦ 'y+'ky`4W7ï׭?zRRkDqSlÿ)(gPy`Ҋiw=|f~;/5sv5TC햃cU)aܙRHb ݲθ2GyE?Ǽuxo|dOpeo77J W3+xH y/kQ#\o~̮}+~crp0+ɹo!*N8rg +`|G)KBv7!3f4vZSG\n8\z JϸXHCh g gcv3T'1N)HDX9GwH:۞nFzﺑNFS:1Džpv /2LP Zuq4!pb^4BG:bq/37 ɉx|V,lٗ ;(#QrWc.= P+!{ W[!D- B$2o>of:wpߝaY05^G]KM]۶iS70I(\S "^^]b9rgyJ@U_#nZ|ߙa#xz+7Jkӫ( [h\˿|k, F6RCF\"= B!|ZBuSYrg܌EOmkoť}a3\[2AI7dJ JTnuE2\$3I[b1";I3?RL5;3D/a! RZ RrrKP-!X?T)L7Cq̚GY/zuQH_s% ġSG?+-=ꂚF9X:ǖW~t"89ND34FJ#S8~$OSМJiTQ U~w$P7RQ n\_F;Az2O(\g%80{۫zd)͡ȴ-"uUqWTTxUs@b3 OSs:UZ%<Ѫe26Zړt9XG&,nВ O 6 *4e )%B@O|㗭w+80uK(~P.! G0Tjm"Й:4V$i:^[wSǯߏ??('KNI'[ȅiNa?'HřB=;]=[-)Y ?q7UDTZ8a"udS?_ty/UsW _;8cnP\J/j%y@,Ze-shJE0蛮+Z7V8eSӏߏ^gփ{x( hh.sɮeRg90DʱJuQ4xp])=>駜Ƚ,=8(*zhxƅ垺qݛ5@ P)/ P,!w_R[)NQ+DЉ4NuZ2Tþj?g'r H&;)gsedҙ1DE2>p]JGSRhv։N&X<)l`cԍ߁W%A(^oɰa @RP0!R\(7Gi|WU\Y?oqox4ӟ4\8 :mRbiqjJ^Q s)/ZD)&"KDPEH~3_I5TI}V'cBp'/™eXT 9A/|bRnπ :D@h?|%:qdZAC!7wS8UUo^D϶rov=+HZc SMF>LYX -][^i8P@ ^w" _?.018bQXP࠾P2!]:Q 5NMs癗W'zޗ_?@JyupN1901/[anU_9ĉ-60~ c&6ԎDIHzX4]fQq',F-pv& I-⮬M!8ێ ׆5yZgrVYw=gNީ0Rgs>@ 煝ȐP2?! Q[)L5 'ш]|s}t׍j钺|ƿJieO=&u"ڎnZj5=B]kH (=Dtf>gE{gQJYA܆=t:xrfjB@횛mO%Gn)ɢPaUW@6b@ݢZt( j+t!DZCێYzsjk.|{_Ѣf-ms3Nۏ'x+! ~JoF:b{pD9IV:uXH2쬛P;4y'0Β/;hy{ƃ?ŗ{Z[pyU|DZP/!jgQ)JaDcЉ4B=vjWWU[? x,7i.@8)D/cJw vC@v؜eN$윕aò8A[ BjWSZ~zs\%9* ZBs )> Ir_(Ԉ;ѡ1xD:"\%EVsw|\˖c ]_Jdn>it\8'5&}@Z!C5 ٱLB`1B_R_q9Up*2;{AFDHB8t`l <(3i'v_bמ/XJ@P/?! cVqH`S[i*QӢ!/S8O|UjUUιٝO1I7~@4 ̐vjC.>hZjѣ뇌q Vl|mnKSz95mg2"[\zЪ \r5 XZ>^Y?H ~tf^sbgrJ8P1_! |wFQ\j3vC Yu_:E]9s~^/K@f,|JgG} GG>ӪIeRF] $e$]W ;ua-*} .eNm:,y 2}}s=ZyDO|Qvb57qW/!dmN6𭋊O߸JC=44)J#Щ4"/á[⯝g$ Q;`eT^[zDOBl$SpA`ģQW|F!@_O Ni:^2iEHg3P0_!gPݔU B"Јt$'sV{sֹj+z{F{O kes]4Rc5\Yݽ% WuLfHG{N,F@h6576K*1 Jb1 }N{_l9*dѾ ]#2H 've\RKP)F Ӎ`jѡ!xDZZ|ꥸEGoz.x`:: pdܖQX#^Շ օF\~jG6{ NtKFd`USQɪبJ1M@Dp^ +P=MhwȀ@EJXp FkC_pP.! },CdQݘFB"Јtngo*Vyj9y̠)gϘZً{g>e3KMl裑AvWF1%+ msaJ0F3Z5pwMYm< W'֩T; 3=At$'.qYUvI w@D0?8*+|eКn^Ⳍ¥f~5\665I9 732'wAGok KUs WQ~9*hiG}Mw>ɷ[q).vzL a+dpY:-@I0eɄ /< (%ҁ c߁P/?! ~hO\1vC}73FgtsZ\_կ4 w7i_Y+QȍWD P}tqūX/W$“OJ2ZGu~A*8yx tG~,Kg}ɔvn~ϧۻLL` H ʮ ކ<@PB~ڤw<蹗9oo~r&.31ROqlE5x4/kKE6Z ~8q <;!^IGԀN$S[@hAJb򉽶`.@4dI~Ї/P-_ 5FE3H:H5eU֙n*O?ṧ W]<31ʮuQ@R+uHE_" G\B5j lTgmNχOck5r quzW >Lj]5ij 0]sx mh 5K~ҌUXF}Bd={8V{O^®&_^ V|ww 潰C66Q.D1oY]KVͪ kwI^{aA lDA K*ѥe8_}>FХT7cpUL?==?ӹqfdtAP9 JPi&UמxD˭oUsr-hB ' vPJSL>3UEM4DҰOqR >RBG8\6b+rLI|&jw F,V[*1Pzywx@ ޸i(RkXF$!9]F7٠Y8:%'^/dz2Oݓ'8Fzk9uQ&M~\XRWL"Sjk~w֫x_ϿS>\ceLmJf*b7Pn*@hce8bj?+6^qce%㉔(.t0Dfљ@nƵq@lb=yxH66 ekca2{[6nް?.uD'uaA:l9_S f0[A?jD+1fOD Te{4ջOS0('j? PTP/ BBeИJ/'\ّLɭwNwzV]^m)J^}iAxjtLP^ SE3va3M=+t-}btU_l!D ~h9vxxzYnA7 HPP}g9ºY'"c^5n[3OoV,ꪗ?^6ƺP2_Lavc57.107.100B6(o{.C2H/Z꽝w7}]ˣ_p珻w?N-S,#Njϐ>c8cɀDy!VfB{_8vY% r5xsY/>X^jwzpje w[WH@+8TgP3n/;|i}< 8 P ;9El;*-!нj3~ԕw۹|{Ͽ槞:S (_؟4 \{ &ɪKOs4ÄDUK":bؾO*̀ h$O)@a ]葈WhO) ;P-! -Q\Uɢh7HeSw] [UO}'96ʫ: enJ!*PYq$JZdSN|EqnO5G饮 g0ip/}ٰ~Ndl|xQm`H @RWF:'9Brw^_ְ+>qvm5/)|98Dq(@,!C88Djj}K 6~a}F܉?*LR'cPPB׿n TU'4ڪ]/hpP.! /5Rr3E2h!Ǎǚߝ|S]^4!VKq ?}>zwJφrӖ/H6 (0M#FI$J(Xry;) 4~926iqmw #̓@ ɪA- BctJqrueUjekwN_' PH!-3 mJP/!K.vQZnS&šD:!W[oǷz7Ze^߽F#]ۉwf xI >L."8\2S'nݼy"B%`D:8d?514n˦~@ `K?(H[a-ڱ%DķAUEǢzOx^U\9֫.?G?W4+=Dq7 EdvVdO(r8``r<1 q찐UuRW j`+ X/F/8Q LΟpP0! 'OݜɡZ'ۯvjjJ޷xW&`!}"wߜCc)T5g="Y/<1s\ѭ.YJ›$n(dw},jѽv)LQT 5+FW4V4,Hxނf[kJ ~Gr\&]^5:{Ug|_={?WZ_ns^-zYO~xg6qΤ:$3{'m X+xAD=%%q~.o ^= cɂ ׫Bհ#n m7S~=@ NjL)K2v@AUN*P-! &O[(py BbЉ4"D_*K}q7:o~~MR/&#BeQZQtwczC 0*֓h?cScGeYݏsan4k1;J>X%#e۫VoաDx}X06~ @e&EC=q{ML&S_ׯlV~g@QڀoJf WOЪC}b+J4=$I*(yl%Hޏ (0'C9+Wcjآ4׼ 2.d kP`( Zj}h4@18P0! 7lPn& B!ЈOҼ{qUz֪2~]?@4_ n9'r%_U]sz!n^quw[A7FyIO?/J3mH")'|[uu}D-ye@)!Ϯ{W8w V<-`g03)a EH"B!Ј|"- ǚb6޽_ݥ=?7h-ˠUf@$3~V 7k0J~dj(s(+ɡ0d1 xɎz0 P!AT3@PG@I108nퟕxP0! ~6DQhU͡hD:[7ۉ/ǝqZ?-+ghάUvA s5V,P:<}xs(0l *t*:vkMBLcێ5Gq@@pTC V@@ .^\<0p<*AS5#p\~#ߎ `). (!BAЊ4BDL{V7e4b1b,.xӐq:'<ᯁh <A\MaP  |Epbej /y|/?PƧ+P-! Sh+ͣW[]\ɝfR[1|A:m vq8_LUxE|Q2LajoxAPhTtUE|4QoL>铢p1t0^#9|G!\WHhb_OG<@O _eK)g9D$7ԙ3W=o Oϟy 6SqIc!w UtMI~̵QUOŝ%NQ.'цx3Hb ǍE/HTKЗP/! s`R]%&:U_~Wj^9&O>"up\ĵ(R&F^;wȽD Yu`ַ+p <DY3 p0| @W$c%҃u5gkh/FywBtLS>SFSOQ_IEm KlLn|O^U\7$ܙ'?\ڨZrdsNiDzx1cearĐt..Wؖ1(cY6M|7,W I^ bpNj4rcEqoX JfHP,!R!RCB"R|wK;-\WcWW2_8 cD. (  (P0! Pݜ D׭N^uߍydͷg+utLjT5+(b$ (@:^[ =lw(a4Ϡ[x2 ux%lgWlq~,C3Ҏ wPY"apiDn_U{Kkԡ 0 R#fk;d^kZM3I[MPJ vYx O,weqD? ɕv|Q{䎈|"VKH3<]E+Wmc8x_WObq':ðLjw nAA>o8|PtfT rozρ~| P<ےP(! O&R[eBXUs|fMFUWo$ޞ^c.~\V$zC \VҊxߥOҵV_:z/RNU^=ӺwMH1/%c\F~c*Pjfp2{-D43'dN #.?uդ :{oޒ.7h|iZ\+O QRFs8ZCNҝO#; 첽naZΩe5eaݱ2_y߯@x}`L V Pˀ.1eO@}T5P(!]TÐVB"(tf椺]]qRw;nʗON;l>=rާ-ˢX@2p_ѫӶۅq!I{P 5`S]Lq:''?́=?`6իJ06Qï]P*_:Ţn_5%דּ.?OM/]>w8Dsv}wS}w7+[PGS-I6,9!Mp aRRtbYAx+0a괲^?gp1+Cɒg"54GxueV"}{o3(9C*ķheA }^G$nL_zk@||$9&2?8: LP侮9ZͧeBQGZqf@!rAY3  3QP;m]8\>6P2!@Q]%"G B&s__2:(U{_??r}Z-2ah^+c|AgGyzoa 4UNYmf:Rw/ZeE$HsIij2ywfO8K?N/ӹ[2Q=L ~dTd 40}a EX{\%zA9)ކcPX"90C!xSw\Vtnչ㗷<߯ݓ&(ZQ PofB,>(֊5yʠs3yZ$GuQ? cn P<:IHa  66%P`7p`g@ @AqzĨ P,! FQ[zC3Q7rTk4>?N:&vJ&MJ;L)`j]cʯ&VLOfaG/r5 nK]a*ln)Q@^!1?? >Oj+ka`NOį=|@1I B# <]ם黒+Y}|_Ҕ3 ҭ$,hSl^2,/ٝlwV~@:*$7d׉KMIaH 4Lg"KR0()6O˲P(_!Dh ,dQW-yiUӆYd3z/ZþLP;G۶_ԀvJM @Ybi^u)gDeq'w]Q)cn9/#^/\ 9%`r3Au ^h+Qwԥycĉɋkltr+ң dNWF%%X|3]e#C|(ZNhF[^n%\EK7AWׂށ컽/z^w7t=}5&W_K> =JL_D"/Mm׾ˠP3!\(pD-ʥ2Oos^3ڦ2Q):?Ӡ#d/zϨ|m7<մDzKQ:ma>g\㖂TP$7#hOlAk7rgNRPL [R31lP^lO}̨ 4,eÝ7Ř$"Iʮj%A ˍ`.nS\M3\܀ݐVכ?ӟ'U@K+;Jā)JJ=sϞ^O96II׏gu5)6;yx9gzD$+ƔtD٬ q@__- G+?-P$<H_] B5 RP5?!]NK Dj8y?OĶ ۦoo(j8C[l< `<1{d6$S[# r-4`jC;z2Knw(#u*&:A)(#2-úu_+Bu33Uve&,q_wxiIą AI0O xC[@2ڶ 'bhF^,sE4a=G#/EKNEzUjH} dPN+o: ۦ?o޿ɡhQrN_ xucF[c*5}&:VNNˇ)G V͖ T5jx5!xh @Jk'C4#ƮP5!]ݔ$L$V;e[WRu2Yk:M:yAWNje4e5Yч8^% ,뗖ёtVm[Uiq\cBma;O+\)Jٮ5>䉞TI]/McQC;;9}+Sv#_ @ Rڍl"@&o&7 G^hPnтu"sZțAK BdpU㊶]uu+.o<^<$q3iQ) D.^49%añlHd$aZy1%]{{oHBE3Kn'v k2> @k~]w0zC65guJ qNP6?! ]%%L$oכ|||w?7_?%'\9QlIwG83bF `GJ\R<9ڲpa}|ǶEj0,Ċ%%nEp%51 (b+U&ټ`4 RࢃEҀNHiyҀZ Is 1 [\/ H% YۥșK&IeH2HDy9x+}fzj?u/kJ#x׻t4ɢSluQULdoa|rc94sM!;qu3pncp@SPZ V{t@s=ti<4TJjMJ*pP3! gM\l$F;~۽rΤs|u(oRMwV0y!n ?9>(S>czOcza0sH Gp?wMOx1LI9΀$R(? "~X 0@+wΊ0 p,Zajw7?i`f]ڳBFsc SCAl#5%b1vչf\"O wYu9ԍVG?_O?:^+=]O@FƗ)r:XBn>IvW]q 8  =ؓ@9} +O|%z[qz}1atwP1! P۩ S8{w<7\OOE*xI'+ #J {:vߗN\8znUپ 0X^v/b#渧DX %Z؈̇ qE$/@q]|'}Dr=7JXLѽ"6 {Z:U;7񺫕?ƸJkY ͌EwsD" H]Vaggp']l>yr/А+q%VO;~x )hםG T "JJ'3T'ZE$ o! 1J02 %H2NP3_!?Nݔ'WW7i?Us?dG(ǜkS0AaP>+D0 -ljBIi:aJ:^J-\'Or3;YL~@B]- ĜQ[A5wxp ;64M׮%]4̡ۤ64uuN)+e]W__>?fX-9s>XFoL_.)4+vmo)'a7[RU#+? W!'ja=\nwA d7dj3 1@ C2Vs*/P3!7 N]b#^ƛM=|9⾿o߿oEybAșm' p}tue];Nq!=L_݈ȞxJzK F#š|Վy<NlW9Hh%q[WA_о"/ nu|Z " b )ZՄ$e eb{11qv:2RxN;+IήD*Ws^gʽ]oJvUUnAsۀPИ1ǓM 5TܜNPqB}9T)D xFԊ<TPt :lс][pP6! !NܨSiϷ;ODCr~,=L90qz5Uz1T:IjOw p߸;Gu>p8qmODT]G@r_ד!NrrOfT8w^M a @0 c;}2,LsG]XG*wi3rN+m Eh4!M72):.s  8ۍg<;M굘oJ$7LSb|Lpal)\`y)㱝,] ZT Y@f,26? x| Ƅs |ͯ^ޗ^> BXk@ M Ӛඓ)-HᤸP%!4Uِ&QhLZGsv>8ܙIssSwR۞?'Q^Vy}?]Pfߕ(Wx@^0@ sp {!j'nɀZW6L!h )̚C0:'7y~QP3?!8PܥG f!?<_2XL\kO`]/ϜVܟK仒Rsb fNz:;K`ZGX4#R?8۟:xƮr9:!3LU|58w.`T ^Vn@3t]6*O{ j`+Jx})fŕ" E| ]M'(nH8k?<_|uRjYdcj~ bV5խJg\0`"CT6z2p>(զX|1^4;[t?#o`Ʋ+Knz 3s4@ 7 LMx3Wʺ(Z=~vy0dɗTV 1s5%ۈI]"$*Zr(2HL7|U5~' M|]%ߟ%:+|yGFB7JNY^>YF)6=M. ]g dUnaݸy?J0lj޷y x0\8@ԨQ1zc$M`:BFqG5ƠNNÓP4!+PܤU1==w۹~5^yqaÝvM|^3}zj/FhVτ@xbcȵU(%VbgͿ~27[YƄ^WKЃr~ɰ~ll3sW8Ǹ2`~P Ѫ)@/΀ C"tf\$]ԯ1ZZdow`ir`2ij@ei:.JfXǕSLDE G58hjLp㌷o0457Yu_W;WaU0o'J8/[+Ȣ[iO"̑~\U@@6P2?!3>QE ۿn.BV:o~`:(FXhYb$. +#b(EOyvU(xaTjitF|YmL]7,ƧitrW;WD= ٙ*$w`J0+Vsk* oY' 5@Cc[~mH!eŅ'8Mn5rJϿ?^E1Ez,F;ᬕH\V$X00%"1zZ vO@*d*r N<U8Xr8k,?.XA59v=`"P5!|j@QܤC/nji 9AKq)%#?U2&[g,~6}8n*@P +6ĈbaP7j&X?\^\% n۹޼WWrG O`{P."b .( yH^\a րs@߁ aۡmXۆԷG1Bdp<"<Ğz\J!$Uq9diHR%dirlVs P(l8׎9kY,b3 !Ƌ8Soԑ]NFk.HO Š,R&s-~@!uٗB~L]xjx!'Vh=|h ,y} H8P^!#_/ϋow\޿_OukdZH:1+P _8[}`ܫj) j2OQa^.8t|aGYZ7p9imq.ˆ?H u4tb8%8@  +)G\˝%bL6>P3! ZN$Y ͻ<Ց:櫂˿9ӟ,o.G{_ahEGuW>r>5qލ[(B~jN:mW:H[ B1h/( Q4nԭԘW+xeZ {cX1Kj}شR} 2C݋+ JFjRn9&4!28T~Ln]? ޲c>tDѪML  7x)yd@$MR/X/+@VD0p3P1! kO HBfн|js8W^}.~]-i@-\-rvsds< Lud-}Z(=70CIEí;4qޏ^ 89q9հUTTW  AĻDG?5*?l:BC"[VުZ&?:~&@t-tw`$ePXuBRLCt'ĕG_>C1ma_#<+'{Ta 5֦D8as,7~q2%?Hhz"TkP,!`=T` ١S[^+򦷮bO>>~4_1s]íj_hX4У %99V=STچ_SxnIj(z6pkVw G1].dNb N&Ȟ0 @%EӢsÒd6;ۡhS[]Mo[&_?'|:{mh_q;-G8ob#mQpMzY3Fsc<@j=3xD3E'Њ,e`PukU87XOgrPKXKpP/! oRP\v!X浘R%"^qAQN°#y>89oKXA^蠼Zv#Rı(4⡒TD+YU챔fj/h~& Җn,/uZ| ,Gw5O"`(=;%LH5w<"[kEKƤ%iʔh يW2}\R 5f(JD57Qc#0ۖ#Қ0F{&p=\DŽ9Z5t`͚s P0!=6@NFSVL|Ϸp6j{??ʯtyST nT<|J}ݏSŗHn@ڵ#('0q΢4(pձ0(:``P{GQ @ S(Б`!-|Să%0 %׳x{wb,)(VɌ~>l`Θbt079NۥfyW:7ˍw۩Siw_ <}h `uMtfZ) ׻pדiyJe0_iPC߰ii~'Wcܲ0rNұ!9>)O eIͳVi/} 5̰P0!"}@O]{s&Va $8l@=F@w \Tިg.5* {CM?x`!Ks_Glۿh_P4 *TШ$ B!ЉvwꪵHMˎ|} 6y7^)K۷Q +p1@KiWP iQ:ZS0=yt aJ娅3 Ɗ8R#tDLs4LŒИަK0 _u)Jm>}kJ5ԇ,MXVRD_0 w [Npឪk)JT^2hC~Я@f[Ǵ2'myYK9yxc/L1 hw#ZNxMQ^N>9qeVnOC"bcz0'\YTM)fP$V֙?Z,AD]XP* :L)GQh:E1iai)#.MOz(G_4 ^ݙ` T!dq< ρ4z O.~m>v+O[>Snbʕ u3}WsֳrOxbÖOS R!t.Bc:V_H˭cJs??KU9_v\l# kx5C StUG; 9B ַ~Q1)*Weh$3yԳS$uć#+)Kh )G^N8h^cý5P*?! _{րU!B"qhD:&_d;&TVR$.cWԎAעSo%:$:q~ 3{g쾌Sr Bpe0qbsp(G+cNX<[Հ`DbU! 7 š|zEy\_)?7+J#{Ufl;/ 擛m2,AnHRvO z U蔕^{L| "$|a$, . y>\#/?`+`P,_! 6{.U[)NSǡDzF\oiUyew_~߻ܮus_x ,^35(p @2tj 2eׅdm =Z$( X$5V<,4ܬ%a35N 7 ;I({ D V!TWFЈzGbrMe:uPf+C leǙNÌl&t2 ` 5N'9mMB5[aYpnǬG79-ix]R`n;;`SkDo Gxg)1Jx%.ЙZO! ^qm˕T;/T<&g K0:%p0 6K:8>(%&\,$ \)2xF .p@BL"{:'CgƩԴ2^P/!8{`S[)L5BЉE4>&i:k',Lm }ӳ[!BoK>ejș:5 oL¿t PP2=j Z޲.}Pm[Idф +ŀ=qA*f:z^@+LK >@ _P kd1FcЙ4"/&B_52L4_5/ȺOuhSCc 7ԓU]\Mڳkf*{oQmu%gnehb.#W9\67 kSݹ2guJr\̞^wQ/, 'љsmP1!LS`I7wkZL|nQuOyg@3o;F!# ca: ;DY@2˕c'^ %V辽"sbfwr/ p I u'@}F%lw~?kJ'-@gN\ۙ+&-+xScA ~POP 1kb_9jWgAOcC.}VzL\nQuO@ K{"a`a}6x{RhbVv^\H{2kh# y   y8S5nDRurb+PfEYJeWXJP0!zT)ED#ѐW۲w|^NooqkCS7v "nkh*cˮ9SAPj眻I΂o-<ܞ$с(LZ5Lܫ8D_k`/ӈm-/pZ V[Π 68FlЈ|$¶qd]^UةnӦOw0/Q|}ka)UkaaP-HB ƗKQ,@Jf$:M8Q0qNn|TS~%8#Rq/v-H:Ll` \)N mV_tl!2jKP.! ޽MUܠDÿeVL:~SF rbVeJZo dM9@Gf~ 3)ǒnP/?!.m7P)N3 k'f!8QR>y /T8ʑ%w-%$w ip@?.*eP1!NfN5R)NC/J\Sܾ7RsַW_aJ#+ʃc΍9zYp{+ҕ8/MLuTp)wɶW@F@ 0:ic'|{>}W+l/FvS47YS^(7ԎNOݫ@Qy2z6|K7 > e.O@޸;^KeǬ6+…]kKoM-wҮ"eWβkuoӏ*Xiݬ'F #΄kdAD@S[Se;]jrt`7/EHūN(B|6B_VU@ҹsV>[_cj}HHP2!~S(QPCАSub%[/[ەvo(7$i@5|gC0zS59;\R z*h#˕ߌҥ ^ꨕ'۝w2,]DG@vuЏ`u ًoG_r;\Zo$zl7J,S o-ls9.>;9G] wg0uqD?;)h}5U6h^F-V{w²zS'StƸ"@GH&LފgNțle( n)4):;n[89 C66-D(<)|X%N g8.6X@ @P&?!찀Uآ*fIZ&%*K}W '\w&R] SJDS@.45pg+!3υ hƝ:TǿISO/j ytM-N_X_h~qޱ?/>o]L!âޥ+ZFj:z߷5Zk$5)Qˣ X\FhxeK\/$㫤rG3;c6xD7_m<pUBQpP.?!yUYLJ 1tEsmL]_=_&inzV}/;ʅmV~7xjQ z |uu@}s>2@kw5b^n/uly_s:{# a$vӈit;q52]0%UdwmM@APNDјt"L_=s.oVz`@0n+bxH*|<mB7h Qz[#78w=DBZy'Ke uI_IxqQ7WPgq U`!ȒTF+@`P5?!2Sک$'7Zf-t=s_x3ԙn*CFB^~7)g3;(*tyǘZvWCt"FPӄ,V CrU1t}]i 2bVzM[CH ]Ǵp?<4EqokmB*ˉ8/DotL\yiPGI泬zuL.|W`SId7R6}K4yX7%9HMgi# V;p; ?vKp W)ZCa!zXLİQ#*@Q'irbV{H~TĞn˭%pP4!/uS[.Y S[%Jg~W&xdk&\܄ϡdc6Er \؞ge̽,mUN@; ֋r9`"D!"7s2ʲ,AHV^lw~үg i[@n@2]zo\'TyAnqtx  Z:'#mPr$&- E;]S%W@g]a_J8) Q̽%m..B} &@AHaZ[D 5E] jQ0['jsC& x|h,gv;3lNthc]*P0! U[%BeЙtMu5MU]M:ʟ`fI CB z~~\KhU܊Tp̿L[XarM_ xMܮ+S_PeCߥ%Vk\ouU)q"<~ހ.9lZ0x@ |CH5M}h` q&]#gRqZ&Nu,Kll~T;!Ӹn dȗ]jw" nӒv#fT8dwx@ ռr`4t[Q H=0 TV|uDDeDb5@R1;H3hD>=Sǵ^8FNz3[P#h UɡtQTڀZ;/@FEyTtghg\A#Ua;SP @ߘ1F'( ~jqU=US@U*) hp48 L]P2_! /S[iN3#ȡhH,{mn˙svvw4x}ˋSG8Sr?)?AoǑq۴U>5H'z#L8oH hV^Ίcw8}~@nG *QFftb<=kg\ Oe+(ϋ>t$!hJ#0TK~I!fА|"-}W5zދqN?>?;zwޱG(0.q[[R NWWPƇg۝jdEpx >Ǯa]5tV_.2Pb0g+ -ǑGs{ zph6aR&ńP0!3SZ3.סSSxojUJ7h~?_xThn1m}>1_8SGN@#'1tvXpݻuXf~(q H'=g{1adέf? Of`m&.@ymVe1 Q1WO &AVKY 7{7oH~^!@X{~@WeGI^ʳ[|8-st{n0jkt ^?ZNzSvz)mּјDQ"apWF'~I/dP/! 3N@Vۡ*B$ИO_[/}'/<ꤓsyd~o(=mL~E|7OT&誋90#WrJ4z+JI+47#du) ;Y >c՗_p|:?1۝ CH^`  a'dQ(]((VZdHm 똝sj%I?+A8CVT.&j7\lSbsLHl@$ kHQ4Z9=FP[,wFK zdBb3@wsϫcQB=Ʃp݆@ ˮ7JsL=8P1! !~UZlCVChD/6ܼn浖eWB/m Hӧz{ e-ccCEѥODѼ/y\Z}3M OE\& d}Q>1 5B EAFCQfqKeFݸtrw@@[! EI@ Uv-3hP:u{.)qw??ɩ? htZd]NXcma0Jh&maRtI5iw^qٚy !9 $LbDm@P|p>DjU^%ab]WΆ@je;_c|}m/}rpP/?!UnSjm Be&yߎ8\^L:oe۲3]8AO\6tCruf)㑁;ס: )#FƪK1G[Sڐ=}gLp;1.IL2dwu.`% 2axC?Y!l xI=hpBM ]uRe}x? ??on8a+֊=M?^N2ѷ< lG$wl:JhD3`뱄i>ıO8NP%KpW[H`'qEi^f f^)oRT8P+! jU= BeЉ4i9*p&.!,xeiyr39V"1)IIնQNXsRLN|tYd͖vlF/ۆ-E^_ ? K aX a%uu cКt"/DW:櫞橦c 68"]sw<]-.8M^\׫y6*rѻL',Ks[ H s %7s4X_ֹOYX0dX A ``;h?6P-! m@T[) Biш*Sw92#+O]xWsLlO/#"i͎b2h;L9͜:M{3zSqY#c:*-AQnNw$3_Np8aaebT*MޫJF= 1ֈ

rN'V-4H>MMs.x{v+`% +Tz_/`81Z]?L'[0$@@`=A@\ɢP1_!rU\NswµS\?/o=?aO,Yj>|sȚ@`&^tNǨ8:Ek;vȺnDI1p=h]asth`1@N(} D";ѱ]o9ZCzqwvWY yT᪵\ƴCq}ן|+U%35_1npK#|PJ(SfWkN ͎ KےuȆz.m OSi3|^X9S&\55jDPd Hrà܆p _:~P0! GTک6 8sgzwUq?5?gһ~oS;z%y|ts܁Ԧq.yYlzB݇Aͬk|J1l+j#')I q}ΐ_h%Ix@݉a 2ARQs uVNцl1:ew]Sm ɾUU]w_M{"^}U':9o}lto ^*f"ˍ "&_$ -t#%8\Jk^4>A>Ga5Xn$rAupbP!%?, P rm7Z-(Ɂp P0 j<HlF+}cFf=m>}~r/㼕/o醞P]T >*BTN劕V">p+yS߅q|>5|'LJ~}L0Df%hƒ#g(ixSH߫z q~4e |g )\-HkЉ4G^w#}km7|9x?h{@yw̓NFz(N.&Ԗ]7!f)Y}hr?䎼3 6Pen]}wL>B ^Yg!'6!&B)":@.^[P< yBD3&\U\iWW^|pϷ~PW="A;M ѾKR W>RZi'AWiN0 v5k?񸺙pZg""٭B.X^>~D hvOCT^XY">Й"$o]|P5tYz/(XSZ|iur7fkE^g[5Tb˛5t)p*ϯ+oi:Ø~S/B՚3H?5록"+K@ΐKFLAzxt+X9c! ?|*puQh'6-Hh!̩(V`p=^Th-uEXkU:\e!rweBm ϩL `X2叏@~hlqڒls+MYUR &p$P-? Rqt" GiQ]zޚyq:(!M4L~A=djIk= qjJM'hgw)[]X D;b0mgM\$2\}܂8SmWLE Bv'0T_@U4S5`BUIQ*-#g7j]#µI'>S= 7p;МBlҬj6''i zS/.h?$o}(* 5jhܰ^`+ ˍݿ;:[5wPA(_~Ys׋c z@lP*! 7.@TTX BИ"}xWUԫz3jW?Ϗ|f].cݤTѕ`.R(ZP t,U&O|qoV !P!|k\6Z0H.>SQ#||s3ʲ+&8f3bY`Ѐ#<S.XJC!3hD>Ye*kWN{WnKW(׿+|/3܌ %+Q{z1w Oq|-W`#*@ 4 >JKi,! eg)nP-! ~*@QR= Јt"e/75BԨˏoV{Nll+]|Sw%T>e ̺@~Q,+BSm̈0Q{)/j+[|P,<c( fyYKt[@1@)z@d'^tVKǡ0D:2Hu|R%_}T<]Tۏa߾ObTyp> $!.$냜5X S\ vᶴS`'' mg6ےH-k/&PrϢVD X`WH"dL` H8P.! ~Q!L1F4Z's=}٢wӚoIN,p!V`|*RAq8kfc)( ;$^ OVԘx4CdȻhJ&F'=d_@4T֦u P1$V_PemHhwj_ui֜Mȅˡ;qD8RNs+2b}hoqrʽ'r[KDyޣ~>`y^* fp<y뀟 P=$QhD>="|qR.}w??<:ϧwsǒAOx:T^riƐ:,3w-X 1c(3aC$ ~2a.056_@$PpP0! P[dpI GaHM&Us4ۍ}~o=QZXz?OP lP{>@y[(* ;nT@T͙l Y;vЈ&EŤe9ɝK|R޺~l(B=XVkKlCAy2 7ClA!8 ]s9BJZαhNi4!TEgO>&s^1"خ b|;# z✰˻dgL DpP2?! M[FBdp ~=qVTgJ/__u q р&g$Gn?V/d<\\T#X=5%2,/Ci^Z--m_5f#lÚ8+`\n<@ X ]6:%oF=9R XMeаT\g-!cQ >V櫋MުMW_|_-`N:5/ a^£1ca\* {S-Ĕa{l:&_3@1qr?D1άHS8yb7ȎP/! N; B$Qh+M*B w_/᭓ICGm랿&!s!+FXbTGS:h;Z#Hl6<npHպЛc Mk:Rpvzot72@nYrm+c:De\*@|KR*mF$1\> M֫_W^yff_?[g|fZ:r,5uO7:£=\#V?ZsKlS' g;.5~)9Ec h5z`Wulf4bSF?-P.! N\R$goiZsVnl=ˠl& co_EZ.%]8(L}%XIÇs@o: tQ1ZifL7Q>U' \ su6d( 5$l.hi~< r4b x_ˬ@ی*y8ɩNvj9V,H\>-B3n&l9+7W?퓝mP#Dr{O3 Ɗ5T6tHpi,MZu(XmdqL#B¸Ke@z?ߠF6),P/!۹L\$ dDEG5dǹHND0hhyG:TxA5~5=zM|wfD /F6 2iph1 83R筌xB8D-DeK$Us{c}oҿ| ,N.XtȺ^ރw.:$@, 䳲Zшi:c>yQ`,=shP! )?ϡ[^P-?! JLR)'FӢA3oկ<33?[zx%='XޝqS|㶷>t6RMtdpR U*8tsL:z\t7Ub"0 ̔wMdj<wk6@ƶh"p$M3 3K; /=q#v[dz&_5ѥ>"竹XGk۹Uh얂jz^}֫CQBf04p:OQzn 6AAzhHWjD7;P .*"~H2C6pZ- P-_! j_TX0c~CV^qUy^/__l8C*e ^_ pܷ[WJ(8[,sAipHzX霒/|&s!9lvrRJoΪ^@ ZQGl 'rD2[VDzzh=\144B dM3wTz8;(^,+ z5 <+,HZG|-0<P1! P\nCqnx*V_O_ɖ}NDdF:=JGqQehͮ7gb1 9yVƻy4]]#Lf>a+KcaD{cְ 5"5oBA= l>S+j9dؓ+%,7p@S2^Ҫ?JvFBZ ]8Lf޷*⫊ej_iX7YCx: {eWp_~ d׫dkdWrep@DAfN#rwbe8]Ș+ ׈ GK<s;h 7 P1 *ˡ4,\oxZYyo_W؜߫H/ ]ϩ]}>xMbz[⋟WVoI+܌?.eMYCgŃs ~-Zsq~1.(&^`X$;׉I,bc6 2Ch5l]XSؐ6G4h[uykI1{?<׬?W ,[CMFӏǟ7M+LQGH!]9d"+Bͬnu세*t۫oݢt;Ӈq [0ngZDc[9օo{&@z4>˄;q2ifH>8P; \JC1tiiyyCЈQ:*H,U _[ݬQ(,AF!C釖b q&!3.wOTqJ *A%5j7y+ummhF<¿K?WtoWp sY~If,1Y97|ibKOm?/ZǗӛ\sv5Tj*MjPy/t>;Y[dH|,XP(6jAM֠KOUbp'gB\״??vdqL?*W-ǫ(ki@cH`LQ*l{jAwD1 {[|(meNx?YJ,x*X^ rnǓ/_ yqGP._ D E(" B!шtM^]wKVowkk~}K%kJ|gXso+yjX)^->τ;^7 iJQ]g]Kֆh.6ĦWԀ{\[s0){ KDZ B!Јt"V5*H&w3S[ `W(nC#%> >iQti F.:W$&vD;"Ln. }>o~ǀw0GZe9Mԋ'!CJYBX|P+! bﷀS٩l70BЉ4"BVsYx~??܉`l-u!f$FlIIBxT}.Նp{$kNe>L{,.|d0h&#_ +>J㬶YM PWe "-kO`m@4m{[ $pD!1wW"*@eP ,`^1aOWsDf ʪ'h3u ` F`+PFKHSh|:B6Z\nRW׾7>8aCGA5$s;WM^(DkcJ"@kJ ~`g]#ivP.!jVң.Eh_3UQUtg[c.~m{&uܱ6߲nI9:% !Ѳ-0rfawz؞ gj&+Q9~oE\>|ϚJjnZ2bJ }D薀_zdOMa`:/1S%]~AU E=@ޅM-ۋRPP/! sS\ QȡLZ%c߶dE=?۟MQt_knyG_P2},D%Xfӊ?.-KN:qgW&7JcuI@npubdYk~+q=C_ZA}`00esP3l/ Oq ^^@S\:DbPD:/D o֭fK{~E'ڧ$U?OmTy"H' 4rs;P^,SCJ:?G׉(x#ědC xv0zahR\KwH@}}jeP/!iU%fEEhH.YwrҖk|{PWʟN_7@1ѨV:6G.r;_|*a#yF4Qryi!҆?17?=HjWġtVIq"1p+1WҠL 0 @0%T*.CtN|g[ĩ-)f:gS= d7hhΥgLobii_I~okr+o4EXr+ ;S[ಳ#BfЪ“늚qQ~~?A7PpGEq(LGac /}]$aD7{:TLgP= 99pkVY%3Ù!ۯVHӸM85+*k6_Dkq`93n}v3m5 Jp/Z apXMU]Ɔ@C0?<4KY;G.pvXT5$"0.#"!DT ^yߏ=z3?Vߏ}{sCY; 8#!2pc:eFލ05y;,I?+A[2  ^L=Dx,]4G$@H E6T/*oMnMoS8ן:H:npuqfO ]r %$(K*pV4]ގ/l_w@9F_WpD?CÒ|B?'!h%)eG/TjeRЖh3ˠ.-eOT6nee-(T&ext"-Ms]Fmoۣ~A=o3-^[X;;߬ X'aa γь1K]?Il4aso`@5ba7q{tl @C,Xa2P.?!}U\= ס)yU\VG_?xޭlw103K\HsQp",%av6Ny91$!88.xV(L|)|d eWoyjD*߫3òXܙ)A<ĪD`t vxLx,>bbpVC&*:[ۃ/ZZ( DG 3O|P &Swo7,qV?ch>]1b@n"@w36 h&'{Pڰۀś;|Lڷ4eXC#k-Z[tס>kg Zfyv?'f--=y=ʅ g0|`X`>uCÕ\K*= RWi3+՗] yW* 2|gl$H*P/! S] n3~|1R _}opJ[卹#ڃX^4!5NJ bq3gQ7Wf~:?@cFyPC{ tih72P+_! ڿP[G97rڲ߳Z=Pkײ+ _D#DԺ@9 # X|tV/}zS-_|AɑR@B]-UB?P~plN^R䖎x5=u"@e#&c _HصX,Tc(vk^ZrATez (d8(s`*|KKĮO ƄLq)2 P: hJ?_LbN]VUs|~w;ޜdG_(.j C;᎛m g+j-zU9·stW_w׽˿Zmw``4{49J]MO*ATkEllֵe[zҷǦu^^ ܚ֍s? (?Ÿ0Lw@j9p'S6Ykon϶~}q 꿾}oϏ^}}hg,S|"C W% 0l3b;6s2tJ+F*0 YČHv5Im;9t*93`ql9K~ۧݑʯu=ׂk&LONŞ"("Z"Z0ޫz 6S?yƐͅ.wKH3n|0t,_CdY񞾧m. g~R c/?54MZ~pSP'! 6UتL5&Fщ4eeq3Rd;8[?j U?IX'¯SWϯ7h=]2"4 bG C (x |Q PI%d<8mc᜔ٛf!D/ T e)* KVN sr-H\YYfjLDŽut+@}4 a|ޮDbᜧ➲;f[vYP,t0sW/LViGQ8)]]/Ӑ@8P.! ~X Ujp5)gш\1}w梥q0>?dȧpQ;WȜy]:*i$|\)U7:(ORD hcjD=t(P+J|*!\kjʄP~+&3-dˇW @/GؠL2 XϬ\ϩH n]&d94"ţz߷}cž;:IUTn<`0+S6Y#8OLyiq1~|i #\+@U.հ@'һۅ{LBP._! b:TX"Bdp[**&#?c7οP?1\KZ=P/_ ܪOD(~uidA]S*ޥ%!goα$H}Ѩ1c**(=x2D$>w_p1p>v//p shL-āї5ݳܕr8׷^~eB0(4lsaR- |jd "F,5.G1>[v'$ 'd⮧,^`V<mڝ. iM}kH CP0! OnS\C+ѡ[f%q&%U?}ۮ6}ANVyVnþβY K4 z)iԓk+mV Zz$v/ ۠u0̣n 3ߟ#֚Ӗ 5ၚl; F9q/(޷@Γnf3b(}`]xM8Eږa:ǡD>-#%n+\yu|?ωA[C0ڡԒ'TteѢ#ߥ0؂R;η_P\!ֹ׸%?kHSqNOu.ú7` %()πP0! kOU]+ǡhǞs\UV%ϟ?ӦV~s{#w'tEڒLt**R[ďyK)F\%\'QO!p%rӔ7n.sF:uݧ)>,I/@ "V_{?L x +Rvyet L+JJd-H#иzBcqܗ\ϙ3:2<3;gtύt e1.%_"(5X(⾡e)u(W-)[2m þjRZ4CXw.흣iJHBqW! GZ| M)oPq)nϻb ޟɤUP0!&S]Xh%'Јt"oƯU+H*_og.#~kw:]RO73u3ъN! l"']:.j<[jCמ$j+;*5SzV8g\f2vV3Ju:}Ҡ1.@,0z`0trI3>/%S[! GbkH)NJa 05?zP0!+ UM ӡ ӾgT2E^^OϾ^Oa Yr48:|%:H>5-(0ݧ0OZogqeFZ$䃠#NrkA\=m;yr#g}"˄F?@3.9a9jr1.)vN~5!M5RT"BɩRb8\d>޿W?O9^U[ze_ZP Uzjh\r{jI c8\8ګbp#`@]FKpl!84CِCVjZ'ĺaxf=Nr}6Ȟt/(9_,%BU Tu3 ,H3t0ޜpX% RʳR +OoNWֹpƹ_{{O( ~n,ĝ&:_.k^=)+eI *ut6og#YE{ic٧ OwPX;_8 ui'{P% 3bP.?!/Un4BcЈ" g7vUl/Yʯ.X>B =9<+3,*>OSGrIlENTw'D&J*?[~7xỞe8e{ qP0_! T*AАJEJ%5N?T`zJz*4ZA_a}Pa(G@;u[ k#9%JqͻNi>'HmrZ7'U`Cw*2[to6-Mg.߷ЖW=.P_@ 84@BI} .j/B!.2q̺7wM'?Tr,\^y2K3~mˏ$q!AK;XQcR%!mæYr)0O 7cP^A:{!(ؾ5.鲁7@#O(b;e~P.!=SۨFBg*pRF^|U|{qu?f8wHfI&x5wou>^n@`6@&u>_$<\aDm;p=O`^Pϋ׹!8ځl6D0X"D^;37kG<\˄)fBjh:qkrkm^.z?>_㋮;h7Kv /׈Ga5hʠxijP,?! -Q$= J^&]Jw_v㯽?64.oe/_丛jr= ]7ٕR,T¶(ɟsh9#䔨Vv3ժ`7qzWh{/7xWcۦϢ:*tr82ӒMq!(P7S ntB2ٽ@ޚe-(u>E3t_ar2TO| I>ޮlTwaxR+S4/hIF^rAKڙG]㻧g]~ǂx]7 .&Rz Z3P2?! U8qWo/Z(_Cw6G:coӴj Ρ :  {PqfD|P) ([ `LCDz'7=yWL<ϝ٤6ĸnP@Hó{Zj=ZӸ͟ϼd.>тocs n+fnGoV)q9ogD40zWeJJ,ɨ~tS3^ !YKQ8dC aYɌ+0ija504,f0H9 7Ck;`7{0k%9SQ+Mq,5f*gj 7M^7ws?:;w"PדeV/$"jF: C˭F[a0Ku{A鹈iT 4 Asx=/ ե+[ ѹ(Eۄ2 zY:Wұ R8)(9BWr>>]fqaI DHݠɥ~vH}`d }"OBJ:қ ePIp(JakLuݢJB ^P. LFcpJEsne ]z܂4v6F^4n9炏%ꨞ=8%GQ^B/gò8,4&)>egǺBu s606\6nzr;TJaL0 DZL94&7C1脊|.UW?]{sa. >e`W9 kMK2l-&6>B9% IЭաBRS|`E呕CPS߻S.^H.Ң׀ ] 01&؆P/! ~S25ABAxIe+wJ_/~~ݙ:='o;ݍA S|: >kc W֍DnBBD^U_rzXoX#>xـF$X*xJضdTinA8 ܉)=&u4Yz'?;sh}iQs|c^B`DH>yyGay3LKe^]LHU2ʏk WeӶ.6nvc cIvp|nK"$:. P0!@RܝDns8 U\?G';6W5N! UTV,3Ol|aY3P=}уe5<.C= OVR_+ށL%:^ʤ )]@{`?{}Δo9A0XEƶHtj,HbI̎=E@Ntn`ecEEH4{{X9XyVS wp/UP0!۹S0%@B&Е1b3n+*q}3~[/fIJ)3bwbk9c.fܚ _5(i*'A-::-Kd5dl[m 9xy@s5rFfdq@(I |9 ~U>ڕܲO>qnp{z+(}eLN픳ɹOx@22AkƜIFl&fQ`g _jA|4K 9 P<~eIjqJ|DZ!CvF^QHKDf4 d.Q0LZ?BKUN*{\?oUl;e VTer+ҁ, 'l̉0\0~Gf8P1! (,U)S^Ch]dAq{o}_U~ B`oAIYp }pUЩUygKgPCPTNG*3=nn3#鸞-=p 9ʖO^ˑkwt} m[ !Z؆0H K DK$n2m?U4D> eN {s|NIߏ?i(<<ܪzq!B'RP0ױAR^\^󳘓ȯ5%oҜ>' k}nZ}HZVP!1rЀ/6] ʻ]P u`%P2! @S ˡ3hD:\޳](,/=!CGmI p)RfôEF}3gmkJc;U9m"Ӣ撝 )=G9Ԫ77#eH|*D*D)C z[hpT &! *XGH bqڌa\GB&52pS:wws>?,3(#888{8lABZ4=^x'8#0tE0,V4ge D.5nu\NT@,{%x @wDF^Y8 wDD7%eAQL&Ky*oϋK+ˮ9wUWuOG.8Qg4(˧]Ԯ=|%#AqJ";4Z5(n2[jЁ*`жr>saXEb^ jHHg$ H:aZ̍ 7U-:>x &P:(Gnyq 0e]kgc'8nĦ+ˤH2|$DUU/%u5z7ڳci{;/s3tV>PO _^D*ݩOfRC q}ڔP% >j("Fv[ԩvnzz@Ղ/ =&83ɀ/3bV`fb@pP/_! hLS]$%iYji_WkN*h~ɥquj(Vj_! 2f.`0wZP*40[Ql?U S,kPܦ B!h֯4}QR1'g뚀Ɯ2.FR0e$'$nm' jJ*;?=.ZgxbS^7kC'+ur9f5:CO3)[V'w?j@/Ti:A5-g.Qӄ="( sB6.wوM+ ITܟk#ZXr}_V ݤP>). L%[L `]P. A AkeԻTJM9ԺwW?J;9+H)Jrڠ>8qZdb̆6S8 x) 1͒U1zv2T\ I?ypV*i@;x=i.W'!-<xzE m) zS3vra !G.eMJ_RO0s`3 q8HER)"(0]@PUC_Xgl(y5]Juyxc$)\4 $k89x^q8zf"l M,Hۼ\Ң2br+R Lm۹DclP<_ e""8Hb%ˉ^t׎ϳz ;ǮRg4yn<0jޏV{u!f03XDr1дtGɷ97FH#K-iggX棟+Cs\'{$T^? c&Cܧ|ɚnf'z6U[D ˨\)pKTɰFfffYbm:_Z}y|yt2~~DHD)7_$fOG#5yd,;1쨑m 7cx(Ex%{,_IX U;&QZFi'ui >3DEdƵ3_S߆2c[C/:@yxdn*hyJyS v F6kM~yr4HTCý+C@V@P. DB"$:B#/׶VoNxGw)>o|9:<ٗvhTTze aiNH̏O/.xq 45:K6"K4iAw:Uoq>elL(U#=3]eR񔄋j|{9#BIBAЫM8(wow__uVa*˂@Kp AAq&h# O.~ ^gt˼p)k~W v#*^?d !J*Ps0/qg܀0C'P-?! Sa; #Љ4LR3 ުFm37L#θcѩHޛnA)i6_I/i} bWVE^2V|,FrAC[8+8;]=~q|>q1z(g  hLaLŤs57.Iq_?;zsoFeR֙р u-\xᕳ ȁ \ϿܶD6@Py<6=* 2n0ΨHMot23"ED:&<^f↰tW}_?_oϊ0R%(-*MWD\U S`K,uAA1ݽ-k\#@=kU5L<{.vj6 + s2jxHWkcP ˆ88P,! ,޾kR1G4E>O=VKqnk/X\I_܉ bISzh7S834;%uBӖZ%\^9c0eh.!rLa>ot R,^hM@%@4`&Иl"E9+zl&vY]^$c_e.18 GpP3!?QCa28ŽxIyk >ojiat@vJ8ta+҂)T7t~jX1QAk!Җ$G~NeI(M:U^? f-푆WW*, h~YnB`\;Q!/ 2@G|*w[v]_I:e@t0ᷬxHQ#Ia2(D}~[귩b)3k׿ueX&)>쟪ɂ®֊CH=򍀤QpAs3 ~Bŕ6]Ff @QLp>}R`VlP6! P[W !1Ȏ}U=?Z.%sƹ{]/0wHbgC@[' +:6}ܶcIZR7|Ta#J٪g1=A)Ur1Try"AЌ3#<_|jUZTX5Q GQOtRTu8{[Nc}`>zj}RT?u sXLN3#Uz"W?_2XOdN{9(>9dˋRF1YܱqX)DUIGBM6'n7ӤKTVLp{qLlԀqϐyDW'@W9R uf'8=?2@P/!O6$g\k=5_<=c/\@r5X5T N <ޤ}* ZcSox^Ԝu1&(hqmap/ R4dUWG@P,Bb? QG`-@8{ѐ 2SDgTG$-?nafI=SYڤs?NJרdQ ?=uU(9/]@)b 378u G5JMpՖ@**VH 6kVsH[l]0_H}aP1! LP5a28_>^֞8JOU>7o?ԁc ^:1aaW3.Gڎh, 0CB7O>q*rBGw}|*|c1U_=tf2Be_q4+'w0ttX7Wۢ[(k$;[a8L/#3M}7jgk|nPw|uLs`[F%-"0u0 /(N~12V|{ //d@)Qy/HK2`$P0!dNf- B$p4G]ϬV}}[ɏ-T&KkZ؛8A/ ~y)ߨ -Lyvf*bBn3-h%ֶҺ*F"بO2 8 Rr\]3͕^2D)ZRQ"МO c.,*en4pZKta<:v|^^׽d?ǷpG7K;jB$3qD@0q0(8N[^[iNh6sDq$m9KDFA#;q:c] =ذ44'=N'XEpP0! ?R&GĮz^+]UI>?\uʘM?2#nNPvǻS9n%&6{CpTyY`3F#JetY8NōSqp`Nb=+ڎFֶSOVӶC8eU73Rdـ>̷nsSY5@Y/Lwe/9D֊ U!2HM^UJI9JQ|M_j?31ˑtM!ꮴld<<"MlQ{p `mMᄓ#j!ED|Yg%g>/>h mu.ɾ N%1DpKHpP/! DP]E ԗy*y_K?( %ܿ^-Bz?&{9>H9 4Nv0qHWt BA8v#qEj hbx`+SཋYUO^@>%0ӀK: ݚ 4uWWV:1_hOܜJWwkn&H^y/sEqW+sst}M*$SwyV<-l1X c&2Lie <;"uL\_ _0#lxYz`}fx\cJmŹ4LodDe4'\.W;WUgܴ  `QQ+ L%^toi!zD<'ݑ 7 x")MJM{KbҐWu2}E=:uY,~6\wNvsKAԱ,_:;Lgsee#;EWWfG B!r\QGu}|& ޯ_(OH;a7S'pP/_!~PhSyB}p%J[q??uƘ"Y+CCR"1eW {{s v06=4ȭ7:Ec<dz~u6𮸌7-ߤ:=:|@ K;;Oc,Xv:.hx8"~Ŋ,r#B 'C2k.8|~/uǟ?JoV 9#D1WKP M+2mU#Y mq.Yz5ռY2Aêi#i<t?#xI%z~;zbn<P"?! ݺ ZjtC1h:E ]uԹ\ۊ][Wo^~n=Gz/q.DI$r:yLZ=w/MFǃu"CzEk?ޤ+ c C:A!'/⮭z_[9ZQx |wM%b;IMOT7=1~jn4 "lZ)G]gm>x~tmo} Π@tP1_!S!%If!6dKxn[οw(5BBʅS/g,#e JDq[J׸㥄WycIϹ(lfrg GHt?H ,%$+JKD[4tn*&9~灪;^;8d%ONv &"GlJxm=o' ͻY|;Vg>c]F!ސ9A9>܇,bЪ_syo~xSSRˇ 9u<_FZWʒr D1{7](|Mo8* ݂$Re3+P4! fP٩1 RquwS*T:qCDÊC4xGNz!(MLWw&\l%@c05#yP93Q<*Q% j+P^.f0:Xόh[`@kVY^ b@+|W.c( 6=@=HXaO*dR)TUW zI֮2Iq{w 8dx)p^94HP "&.p5t$q]exZ&ie?ݺaztAzBYٲ X܂p_{TP1`5"y*4 Zx 6P4! .Rirk럏}++f?Ow|h{QuC_E|C9Y9iΕT)}hAٔM_X Gp@gdҢKut,2fg:t{1q\NFmjoa1` D1ۘK 9,`QxZ vp:|uQ-Dj3w溙7¯&&^ ƢzxXtnScK)\̶ߗ`@Xr!{ /ܔ [L/.Ⱦ.&:'\ >l]t3(W0jMHL{@,Sͩ8 8P4_! hT\G]>=Z&'wu\at'cyOI!Qi:?OI] ixwhMJ`)!DZw]W񴞗Xpڰ+ úD`1m qUGKd@=-sp<@|1*]l(cQ@IbbE6R4|Nk&-]L=c!5iVo("E'N2p6--8:zԝ|9ɍۈ 8>Z@:9 p`eC/'B3i 5(XW~Lz2l׾gb~/HD~WZ^|nZe~|s`Ǫc3Ү? `aRa@T}` l P2!=@R%f1R\y5]dO_|І#a@>d_KP}0/-(w;{31Ab}m7GuzSP2U{>,>["S!ẘٵp1q$3g  {q(wd 3v*) g/( RR=>Է$H!D>5޼ZɥD|O_=}&Aq\_\MYmGƢ8(fEFi3a#&W]âm.<(\9?4n3 dBP1Ʌ@_v2Hz8CNy΄ P1!kR%fٮ|97ڪ/k~?;O/WBo4W~&660B'CvEqa *G:1MkHi~ 1#W)Lqwx:0J8j d e%"@@$mU,^R76 @otyKh&]á3S59}3:OoM ZqJFV\"{U.~/Ѳ?++lUO^F/Y{MxA>;S?mo5oev-S@epDa=hpP1!TܤUVΫRNqgO>:-șmJBU?/N-++ͿKZ Ԙb2]? 4w@hhٯa5//m JWM]lZ-'${jv'"0eIk9h 9"D"hu[7Ven?ߧݘ{z[KҐ9XVԦdz`Ѣ@QoRzY(AM` 8XMґ[֬ۯ1/?Xx>ea\h+ '@_Y)R4&26u`_yh0P2! #S]DϊSߜg59_ݝZw ڇc3d+I*ߖR8;z97!bfM_k6{)y%p9[uejqb(mهGgwdZ.9N!H F]>6p Op8 klEqhLC5|7'9v_\u94cU/Irt{b+=IX4f(GTxn~rFsrmu46a$5zOcI뱮4^4$q: ToA@/; yYS_ĒB/3& gS*2FN5P2! go^@R]WBoZW%d>}_};M}Q<}mKXIܷI?׽ Cq0jG D.Q}Oz:Rb+)(w7`9tlku~'68E+F+qlWe.'7iS1$>|4K0 2Ϙgu`a G܌jItu$/|W]!W%U???q>;hxgaL&{9<9ub}4qK*>xl Gk5pȫ@ .%W.7x'3Oxޫ! P3^`02c_S 0 O-CpV`3P/! bT] D:ߙz]e}:eƿ 3A,I"яOg[6d Hp9 Gp@(s˭sgZu뗠E  IN<0 3D$P4 ,% 2rf@X d1P.!H=U]Bc%ڳ9d:oՕQ}KRe )[Q&Vu䍔3S!hb;PMEU`g3U,ҸQL\*Zqʐ E#~;{UD;B sـяZ `; /1M"7k:8z_+$6hD$_~suZN_{ >Gd!(gNJ;㣖9/4`F 5ϻ ~B0O EpL \2bS{Ǜf21 ]4hӝe XJS4x@P1?! ld@OܥC>:oau^?855WѓFu*H wBRVf >*$QK1r)VpHX[hiQ~W_i@˷kМNhl 쑳MV"-*zAP 1uHP5!(˷H%JSN}>FG)B"O:ϯu//?z'O@V}P 9j^ }Iq4" ,D,X(RS+!A&A|_ I{l#g@tbڝcE $$w"ɁP/!@S\GfʴR/ k?[xcu|>VMљZy`*w6(x'=FR-_cx;G0|Or nh^*c0S?qڴ؍T,,QŀN +>Dw: Ǟ&G)!$u\}eVisNr`dO E%ěxәQ>ݘkWK` ց+u*cR)_0SJ)6@cV\=榥Y 4eѠ-\\ehiztG@jhMpP1!0;@S 쩬ɫVYZǝ?5C>G dhuWl<9:SV]p1z*. -t߽u7m.bp~%5;ݲO 4z# _ $Y $h65I܀`p:1]V< %y6x# {d١@K8NcY&?|??w;2f7Kk̋FT`F|P淯by]ުxܪw*24_nlgrō.0S``vHO 怲2vadP tB \P/!+$6@S\aס:׽Wx㟮u/4>?gC.妙LvQyOi\B쯽ݪ€5fXYQ  |{1ecoM7[}mp3cO*iv_,0+砤lk`1 1,`JKB}|zEqjQ~+ oun8MsrtBDu[ZSz<﾿_=yNFPY}A c N|@L`kϿ;cރOdXn.~>PV_Yp4b3_5t@nP<!L2PfNb2T.vfd%^^<ߚu}܉<ti#7ՒE>1-vh4qڗٸP F@A[? p{6+e`Y#ث .ꚓ]\jB@Z҂3u Ls5">`4fpBЍ j T\PfwHyyyoS@@g~g-x-uc%T$BUITqT[#jծ#@B8e$I y9@K 7RUB_@Ǔg:S LuEIK&@YAkV?°7glP.$GF!F>7~k3P- LmE.6[vR,e9:U~5zִ!3vSLpyy8~?O)A;jDc2lgJrqD ߆l8/{`+[Gv=(v] Qr>z b?/MK?U@cW:mH}h-|P)!'~W\ =BdqhD7\n*+WuQZ_~j:]cڻ"LLU#u.#'[/ߩ5+jkF_oD7Bzk\[ι@+cv _nUZ=L};:2ट<*Muk W6HЈzGW9_^ʜ]TJdyë4TAaEgN:&gs5`gv !ўCN~ a@i15t򙂧%\of!PP+!*ߺV\`a+Oy/㿉1]g~\2@Zm8<'p5SSy4q BR؄8i dЌ"g@d춅)1s5m ^>ϷW`)ax I @@@'D ǔƙ;_[ֿrK^dOZ1!J/9Gre; %HVwl\+0s'g!SC9?X yp]5˻1"5~T(Nn' >p@ggϗѳP,!_OTa+E*meW7DȺW d%\F_u-{4%1H0^ulpzyif["Zwow' n}LJ?^K#ȺXQ(;$[q<͈c򤆢PmN$@ f<$7?W/gBef^P3! R`C&D4hʶLsc?w~?F7O' SLJQg\ײE22lt_;[iJt \ԋTGs~ hϰdl[0k((/䶁a. {!dj~0cV.pu[\G<+Xsg)Rܠnc+Hme[YySJ]Uk/3ߊs QnfiTB^FmPN۩ڡ˜d(#xT(֣$y*k}@Wv vN'aP8=/` [gcCR]eh X?e@'@8\4O D Oy 4812`hpP.!`T`CVǡ ޵϶\9Ud>zY'iAW ݫav7YH1sv3xbn]ӒHDž38.϶WaDFUSZ ` Wl/1&@~pwbL޵[h)~&$4@o*Iv 1L7{nW[k?g*1]!Us{0:9h/yY)!vX/gkۺ0Q>genroO~ FnD^h]B콞w'/(jjtp+D)7D ӘDP.!}+U\(A:GN232~es{+* ^]o&vf8bw.a . nz^m4n#w8ƚG 3pǻJ!|n q0ď3m83l÷r>p e ]Pb4.Dft> & Veջkyzhh"('s|0E%%HqS퉋7@^9 ոgckv /_&㏘M)[47@b}P._! v T\`SNGI㊻*T}__@ٱ U  M1 g)t1t!8lZC!*zX[;d 9>1;&y(Kl\̠+,'ijJ^6)vn+w4",vԀ 9* `\GI   6Aڀk^ҽMЩ4.!/F!qSIUZ[TvNŕ>*B|r<7E] c^֋:ꖄ (hEEMc՜vgSe1P" `hVx {>g7jp`\_^0Ƃ*/X c%P!EP0! ovUܠ#BӢ|sU^,[?_c")_!4/|_6v)ʡ-m>ԕ b@s'{"ߕVGݿ LֶTmmh j\?t iNf\`_LW8^k #gYڿoA hro2*e1BcЈ|Z5 ۝87yꂥN]}yͻj~xf)W &s \lS2˶ 'GѪMnbh&ГXڳށk=QJ+=z֯2+0UD3`Fc>>xQHLߘda]#P-_!o/?T\`CVGyz;Uq/2&I']Z]7*1dAHOL1nj }sanlQ!8Dr\=D؜"ΟǨި9FzlxPmq=ѠTQ d"oЈ|Z!}d&D{~[9Gb@uʉ z0R0l"&@45!_5wV zB]. +!߂F1gKS]],tlX:3G"50H Nt2p2_xP,!r;U\ CΒYRL~OۯQSgqQMK$v ۧ(MU@@=pۖ[ cX<{RE8HQLZFubn'c,:P{ o uۘ JxEm sؕO烏2TM6ӗ;H`ڎm<|LY*S+Jy\u._jUki;| f^QN%#<:-!h.1q12nV? Йa2pXYuR޵P>m$ɉzmpt‘\P0&RP.!)T\`""몼V3V˺^N:_?TEsdt..UQ/.A nlo]1* j9: zH9lr+ÑnG-!8;=db/TI+E佧'ϣ|>-a0Z`) /tۑ.^Qz,%Fyr3sBi[Q6K}^e䷎l 5LzC\zoέ*z{\sk4g ֐M;hc!{b7eZ WH")粍œn2_^wجA9PCBl\ScE؟;͓'[Ӏ% L- P0! ;`S(#܊^8s-9޽'z62A~mIl-Ň :9urh?(vF[ FEYj|~` D[@jETua:20nG=N=[KwTAFKsx o :މ#G<9V{l9^ .4 [[Į GdBBiЈ:!jj^u޲*٩xW_*X{2))g?t+ޟk!&T@4NB 9Y2}`s>g86:8ݎwIIB^&ERhlK@3P-?!T\ 3ͯ{ !]z{-L&N_ذEM| ҍԶ'G|a$y@0To,М;F}tKg 0G3KP 8$ V%]*p2q3?$%.1}u?%Ow3 2)LS|('u"eeKs7RƊѢ_Iyۜ0PiF@$& }b Vp e6!P+! `Tp.CDz.BoX%3.Ӿ^}g'T'ʹ)r.Fݦ}&g:,b]<)i2ՅM@蚽(LB#Ņ>>JaRJ/ K\cI)J6?A @oTo mWSLe)t(B"tMkN"S8˂2O_^G"+]b d`錳 wuOCo:By4Jݟybr5AkuutLr$kVPꥸ'@qe P0!C{W[iN] BaOoo;9WSS}UNzw^um`o ٷ9ڱ)~Ӌ9"SXe۪nqȖlbNGՕTs&/ɓ;&ڏ{K ܙ`PYZ5qI ƴ1w~whLr*}|-cQ0 !ԯ ml'Mk(ibdng>U+T"BbЙZ7{s.F[zkUr G+yv+6 2-#//ب"Av2/ "g|Cb>?PNqj2k# 8]8|3kI,u*Ej (0[8T;';(P.?!׽T\sqߕs]Պ%&񯏛Zf@p&I}Y^uPw Of9e=?.({0dY{!-׵}XkKd(W綢o4NkWbYy´V! @u  ҃u[QT^qut 1WwhvztT[aJ|z%&񯏒e2t%6G3߻ż ʿI[]%8$q@msӖhlS AP2! ?Sg$usOsY{3~?_S(xB+1@iܗ mZ(ځLu\ui^]{Wp3mo`3@0pP/! JT(uYk#u}Ą2_--E mނA4.C8QTz\<Ý;BZ1(2yAAB s7 K9gK, #0cR~%09Z%ނ LzDs=xMjvu =0%l`@O^7CF߈%˕HNJ ,O}/n֭mruyW(Q}v~1Դ@gU ;meeGtjHss%V(ac@,nb@gD  DQ +#3AW?E_KT\` ^Lib?Q-4P/! vSZ3FѡTnɜʒ9o?_z!9[+w:vHztcO! }ջ'#_"9b.+2^1#m H"%AWwg} ҈H'Eܤ(%b2ꎋŹgП]sjI&G|W؈h2gEXBiĢ{g% (37bm tbMk膴Q\jhy"XS]0eP c2,\# P-! 0WZЇŢL:! ~yⵕڬ}W׵yU"un j?$E2%b\#|KFl\AN>wFbH<|J}4?={?aQdVPʽ< }0{@ @3m`5Β^3a:ɩQoV2ÀdUU3ɡh- 9ޕ{㾵}T֨ ( lC'-Gi.ƏwsC") B3Ҽ8>F^\D˲"SlɔfSCkpZw0@Д_DCd6kP0?! tH9P!h#ɓS.7[nT4Dh>@N+p.X*xD_QቭhC,S`Ku}2c#ga*7%[ Q|oU$={s4)Kh do^ aYD,Sx(M3SF~a Z"Z]AI[~ϕU_tT1 焢"pBaϹ="0kwQWJ'+K:K70]8qq\|n55U^[E5߷uPSgzj.+,o [%DZѠ !U ]/i-Xz"e%cέ n?q8&o#xӳ9#4VPeP/?! ?T[!{+UWKq\moL""]:T,%s>CYq:`RO;"1φsz*)`m/ʨU#U?_fMm2@a|9nw|zE˔[̷11d:qw󢝝inN:= W7> !x6>C:QmsAUݠW8(mFțn<-1blyR1z=x$|OU#5+$c}bی t.t_-إsFXJK5$EA;H 㡥P/!I=S[iJ39-S՟[s]Kώ_t޲>8\~K3ҴBB;<#0E\y^@sNJĈ#ސ  Ib2"SKezd\$x5߱nk}_yB:fA8ɩA w K{FM 10Sb Mmȅ:/ZZ^Uڄ/b`h{$t]w*X0 Y)F)gCQ l]?T:Dޮ-(|IAQFAMExf#b"ՁP0! ǙPC ۅzJ/n[;O*tdM]+Fk2CGeYjU#(f̓e&#^ı޼09' dxZf33ĖG%7h+y%\韷vzWRy[;AL]ѭNW{=CIfJJ\壽Wqg) Q>ΛT^NPn#5ZW*.:p\k1z.tMS9z!ڣAJZz<Fbb] M| psSEcdC ^.,DolG|Y ` -P.! i~Tݜ N~3lK*U^۪Q/fdL7?:sܒKcXWC@!TkiT\)V -W_@q$%Vlhkэ[an;C^YS''89EF]N-%sn6>R1[[´^"&=ydUi8;mM-&+]a\ѓ'd2s;-x@RXW BIYk%ԫ{u]*8t&Q^9C}d\̚t? r3wDDjJ /Ň&(uM$zUZe $,Kh鸳@STe`@@9Џ5x>P/! H]R[hEK4sjd{s#UN4?ϴo`Pw"m=QzW$)@w~q z݈gu3<>6t"X)*-9:b#dO;O30k C1#SV\j iEœy|bU>$O-譚.7h6Q7 C ^9R/ Pt"_águg+xRk|<ޜQaGu֢.F⏥{7V'7l\k\Ky8]]%2~_4 rm;.#CĠ,R8$p߄TOח|1\Zyp zP/?!7Q]KOZ ĺz95S("!AͿRd84:'5{ N:t}9N^蒀9eȯaW*1}6u UR߁!+kpTo\#Tb7_toB/ l thZ92K:R~d;&OnaeXsqk B됌wA JqUZKުZGNtlT*櫒A"e x2M{>wGu$,+\e\NlZ\gRFP.!+Y?Q[i*QAƲϟ3SSqV_90S4W"4ĨԿn~9c]ܧW`e1-"% =^Z<o ]2Kn@ѳ +1AJ`:v v(ؠRcؿ-A=7a&%L? etOh\C* R R<5o=,Co8ԿPY_[/~F496/'ϲn79Շ8ӎFIuH\'XwGT#|ޢ_ۮ'J\qmW}_^x ӏsQMn e8hAQ*hѮbP(!{YYv B%̤QnOK_7SBg)J'҅NoupMG ^g2tnuVfLAC}˹T'Z Lb]J H*PPW =u=aVAATnCA]w((`PPT#? }?@>^DbDɒRmԫTI*kk]g+krHg27DWM\;vpE5I%' 2x D,nP,!{!I+^|~?7KB)2.. FsmXi׺ nY]zn{o(.2_`5p;VwrJq8Gc%<尤Jڨly8ώJo¸M(@"i%#f4mP-_!Y ȓkZxֻުpҵ8o<\i-d: Fyͨţzm .?2Ncpؚ]@m`|' ՎoBB$qiBazL)uq7[b#J$}^:Ō32²Od-#l.Mniቌ 4~OLm y{G 0/G8جHqrC%{T )b(`6ɊPlP,toS|ҾClpRˢ^ T "\2 @'iQ)\P> +V Co۾%quU?̡i#B {(I$zI` 'NSaƒˤjHL934m7Iq4͒bz>tB*>3spǕ)im:gc`SaY}9Ye{%$i(/2|b2}<.{vFGKk),F9T~2WX7K% NLˎ1 /ŀWlp(k0C>Peb2Ely_|z_lS ˇq ^9f R~|h:ǀP: Li#,dsM]Su? qN~5"=Fv`VlFsIXdv'Gw i's+`~_r= (YtaA[b\s4ː 'nnop98~}~sr%3"mK.{E}#H}|@yF@"l]G7l[UTU|Cٱ9)ZhU.ͤ>QʖҀStz-LZVREHت0Ԩ31jV3XȮ+W]ΰ"9mMI5caky%!::encaˤg՞&brnlnћ;n:Нۂ .j(DyJ}\'E0X.Oς# {JZ=Vb=2cPo t|oԀO3 Op,`ADnΣ0pP6! CPh;4qzsw럊>JyitL(?`E tW.lA&䌓(gs U 8ۙiP+wuLԳӧ @D#5`uO?Xf8?7](ч&x?}^-z@\-ƾ1HAO:y ܣ͎F<.l2E䛻~O_^QuEĐ3в7iCẎ77!1Q} ˬv KUڑgƜ'-%f h&x(:rx_-yǸ Njfaa6u~!aeG b@ ˄%p‡M;NP/?! _SYjN#uVL,^_kZwcܱ+, Arhn,iV,%^T|ó:yUV&3bY) m:sىzZLARyQ^hphnӢ)rm뫲 8N8Z/57>CL9_{@` ؅UC$8ZŚ<]9x[ԭRxvʩ5ִ(s:r [IBgTtVzKtާyp zDP`k\TDӌdvHB.Fۛgo*{1i= ޅl^٢ 8` pP7! hR\h(*!5߷7ľջ;ֿxSB7W\ on⑶\)H]j.xrgҤ<$JNc0ς;f\m)Hv֡%ذ0:ˀ4bBd= &r:*/<&ket l}j J+gpN{M-0`4<^40pR耜gi^GhzFGYZ\ę[\+\޿?(x%,R<k *blU0蠄H]X/]#̥j3܈U7܈9`8`paI 'c[鱉)Wqʺ @TS# @iK8EN@W-opP0?! ,4S C.ˡ2klNoUWWֿ*lq9~z"j7؏9oN|-=ven65H-JHӏ }O>B *8l~I֑͆+!2zyo˒]b!ՠƕAF:%n9M aR^-h@<] zz((=%,`8bJBX]:5V**Zp$"hngg DBro^`N7YP #]-s/^78P&?!O TTXjc6E@z&+RUMd_:k%$i\YQ'wGYe{Q_㛗)r)UED$ILpˣClHZlfH`[OTUlO̠^ ~zUfb?_~& eЈ"/xy%%J3Y~7ŸX:i^ .Saڗ.3,ҹi@4ߎ>do@ -}'F gSksp?z,\H8P.!MS[a*f BЈNs[NVqYwϷR?!x{g[L۱fզ ׳OOa'BhFZPb$NX.ˉ1Rtb/'h Y]æs}u˃I ^Zo-/N<]˭'cgЖk[G jv], =_|Tԛ %mЈt"-B%j51Y/8y_v(js<N@ XX@H CBмHi߫jWT” u~?EI ^<@j*XRm/^XrjY^8{R8M7$@rRNt!8hh!?Ċ* ?VFNp$P]5v F|Ԅ1g$(dOk}~9IuCP/! OV C0U׿LsY6=\z'hss))}79P(J}RL>QmA4D~5W9cZ^τo?cjh^n>"gy wA5mz2#H[I&aŋEv@l[+ZJ|P.!MUC:TY$"WĽQ e|=W%i7"WUqƈIMt/ߧ,@V0>\rV'`wyS.;D?uPqDʤJ%c='szgp\@vvNܟ(D )3LyV Tg?FrS'ߋЭuʕvCjgRJTW5]|}@ 4L>Is~]z^գZ)mOPv( ao1axT{!1X)N䞐c$)BR`K򍴭7UڼÈbrWVY~Js,#)ˏf&]s'x#`ƠVCF Ћ}Jؙ1f-uym2j 7Xn3:+9)zq-Sd9`}wz.Y&]q{@8U%n0W#~gH1ڈXH-:g9xn>l`R 80}5g@!8=gwW0^7ҺnĂ¢C$(Qםn8P1?!CS\jC9-k7fk+WYIyU櫏X=F\֎}=84+tڣxm8_|TkjFAMH&m" # s΋^01TP浮8w Hʳwz>sfӝ;st0{@8;;|NfI:ZC@ _@GCm0 0!#4K_q3\je&y-(]]xs 't٧R9KR aFFpuG/P,EK7?A慚_iAR{&`,-42rxtrRUs P2!t֠ҕuL;XTpCXsQ̾%U.>i<px ICtD5i\=vWel;8DɃ _"7:l'W(10:,@ȧ vCZҾVEk`C8CP/!>S[i*C^Y_7¥]7מO5ڇ=~}hv?U)_G8`hLvK;`ClHHEP|ԕ9G'K4`4$H3<"&Wb}1N1 ,Cxj-m+#\^УҞn9 @KizV 3|LH/Ah)])jk|9xVy0dםi@ķwœ%Hdj) KphpP0!.>S\(C^ϷLsz 9kJ^dBl%,N)X {0Ӡ"uXB*SgMHna ϥ$F[)**ȋݯVxX vIbX2#=xpĆKn.rۤ= 3D9#W~xƦ=˜Eo2:0_Iwe)j; vQܷ,i%?f^T'󉼲QXp0ZF;8mJË^nr3nI ! =#ga1I:i>()C{Y]E4}llz\lЈH秄vWV2 F} &5t8N+U*/"S sS+/KSF媖6TIʫPj1M}״jՙDTs\*\-QIwU(>#ƿ9^h m7N؄R\P0_!wK[aAΟs{oOoz2= .gO͑ФkJUtB6jmśw+/ںsJN%^"H7,ia#TgF9WTh#m)|I}K24`%'ͦȱ LN-yR?߅{ H3C#3, m}Ti-JZ9}1S̏ol;Ɲˆ.<2Vgc@يv[{nO - T/vP/?!K[a*#2^*t3kU~GXԼ*sHsDtc'u pRQ uAXt\8ծ[VG8'愀}Y,{ΤR d'"ĉBI=a{X;%ו7^q9sr'}I`7oz񓎅-=>06IBa,z=Yָ*t:xE'¸sUr4wӨ]Mx)?S2QI7o1&uկ[QB]ی 'pm߲mKDib gP0!/TOi'g쬑s\ʞ޼]eL?L@x2%ww6[DI |IU׳G98eVpGgZ{@Ep_R®BP+=xiLi}x:/[0ul>{ܰ`LKbt/'! {? ,22; Ӊ*S2tu=?6.?,.Ӈ NjkӴAUןB'?ΛpJVIieoI+HH6Ie : E2K{YˊP))93U6K?@|Qס0? Oܔg HU^Tb,ZP0!-P$pC~|xksϊ)&U8~lR2d nCwF!>ku,_,LbhI0"E1Qz㙱z36cPuG $lO[UABZޞw#m*|z޸:tzIpò45xv$7Y(j_'5=swZzؗ!rsW0ZfqmU xϮ߮%ЫRLiq6T$7͇n;: .䠂cDwWdV7H0F04pBdr-O_>a#~"84ǒQȾFRۢJ(2<(L\ `1P-_!+ Q[a'gQZ5VR*Lɒ<ˀvҳ #ͫSss/\gLvi)&̫1G@xr,Ј FE;0 o r&MC}ؒ:מ:~2z }9ltRKﻛZ]kKOth'_uDϖ4%$pC5٢A؃?n(^JYKJ2*ɑ6)/'/"Q3np8?,|k: ǸL~_rXbEg,=Ʋ^麒r`sԁZ b 1o7gP9_!L߼(M3܃YUjvo ?PL{&ST5$DZiGgmEN4m'.̈́j9[Z!swg7GP6WhFΦJJ)4kNz~gf皿j N6>p ރ %ә$`\4P@8xuOdϣC(=AAEI_ExGE>8G/SC P(Lavc57.107.100BTC!!7;dͮ$/rO>ɜ`gPl xcf LZK0جB .nauU鉫*xHv-Afe㵯#r~xc$.O! h` -lmZӽ)o y^ˆ+X|wD'jFyv2QQE(p`j"5r4zZ7dֲds%nWI+t#ۍL@ }@P.!mcPL$)vμ|zⷨV^K˗6G@k\mVh 8nzzFkT8uWeYj'kn.y-ɰҒgGRM&&Դ0rՄ*6t%BAkZRy蕨 %W!ϙ0t7:n ccW2 +Qٜ+2>?䌀Y{5n-HʴۍikQBB_{/X rUqU] vμ|zⷨV^K˗<0 /t 280/- J` w\$Jd'x-\%P3s$P7![ +Q!S++%+UiB/pɯ@%>y>"m ~futC\uN2.:8YhQ55Dk@äQMvQʱTD;v<禬Op~#iAAtNU]pElZGpvxmF HVgfT,,HϦ|>]Y_ _S'ATtu™x9 _uUFMF@xsf6`nMbdFy es|~rS56ϻĄ^_[u\S[8!뙾ӡ~Kz{ `=LJR !9V7i5L >S]V/AzO~JL3'\zx1, ii K KA8P4!%hE?ֹzu)uj{_ 2  L<9F(x1p~/q3\޳ŠлLk 4٧kq}Y,ۤɶG@( 8I=Tgfj=I/ԹެE|AQˀ1}G'`.BvE />`cS~?xr@![H[h4IR L2 _zu)uj{_77/nmV}^KJ.9wP&)r{~kǠ7W =&/gǻjq{9*uTETfüOm `7%C׼@oP5!Ld(%HBq!MKWols?YZ/-xgV)b\34@™0 O[A \* q2K2y{. Y 6)e/;\q7C׈J-q|:rW4KEPZ4S"FV\Ŗ)+.@>D^c=N oF[alh$s;1 ^9,ReD]7ļ@ҲC}9oN6+g\32[yenXWIN7Ӷ,Z0y[Y](;IY8E嘉8#XެqG4;o$FdmO:bx%갎'S v0b97%47P3!ܤP5;d_^Mܼ8ܢ٪-hRzJJQ;<΂mDhz u0٤SiJ4<>1_עU, mZj)뛃yOy(Cgݟ_C=8p'o=54EGw+gΕq3w\1XȻ/#VɄf$+Zo"<`'' yL#hz>:ͣ|Te<ڿgzݦ^WȖB5YKhA'30 zl$~^߭1ɫX%Gj]*z ܰ?@ tvL` <}7Jz'_ 0,0a#q f[r QtVr㋀P4!] jy _oo+JLIRtn yh @Z(~v_)V\XQ{*x;MCՉbP<|S G!S-Єg`dWL֒Ι *K^]i9yet9?A]_(f=-A ~j˪ٗkeČPնol]lk~K5v;U#QJ),*$}q{|ғ5RT*zܹg23MGb[ȞDcC@^ֽW!X֘u@FB/oa0_(VM5fN#,sJ%/ 7 }ntKـgTbhPP1!}]AJW^~0ZZd5^mi8P2!T[riv{Lu:l?֝mj]GoUIcQt6K:R[ L#M$}z<wg3SQxEw{3r9[}8%C g8Z)r >IҥgTfCq9[xx>V$ iiD}\ ,+:4!*\6]Yk%n\V)@3iw3.Zt󰜧s1y^EaUcsS%V~L6}=2F|He󹫥b@.>P]J.ӢKN%[B`FC4`8P4!?[fFT"P 0c\194Wne &r"k_f+ pA`2YH^#:ѷ8x  Z"dQP._!mT[ݤ%@w\/-yYu\IWܕ]niMVuWM9P4{=<#Lg6,ړy.K ,|SaOsQc@\r*Fę*b.]\w*j H$Tb싱ls ܊֢paRgY#B P2! k[埿ޯrg!u"5yR+TAڕO<[j!;R eB.|ޣم=Da6?Xr+/twWz> 9S3jkW/*~Hѝ(TX -m Ud!yH_kȧr v=6M '^ |'Iyxnvq/:-wηMz%gZ:~qAϏh!MAiHnjr+5^]?XAN[aR r%QspLz_7yZӕxQ1=G /3.Z쒍-w+qM.T炝s\c l @~g܆\1&u 6(g=*G5pP0!P[%jjr>'j~kY5*eI>6g=ww6Fux^$D޴RG_qw=]9OvهU ?3G/դkC1rP+;8͙eK fB -Eo-8bXzDr΋eO :tgM( nyц tpДIGT%c,!~-r;N_'>UsTZɭU>l@Qg_7o>UMGGZ[!":s4hsk5/Np3A ָۏk-%\ ƑpHJk q@K*{^#׌zY`P.!OeU (jc4ɗ]U^q%sʹ%?Lj-b GQ.C%l(2Jy%9'xq8]9TMWM,j$XWku㼆쫍6M p2kC` nH=PXrbXUƅBU(uƝ nDH,TsUaw꼦zG;Xdu yy$5YFZ(jn1`"MQf ];@Z7lrLrFAkI L*(q?nnCObBULzw,ʑFlp<)ׯ|_ΩWW3ԛqwV?hq#=VCz0QVޭQ(Sw^y'ycsOZHwAb^2]nz (8 2<p \+#]8]S9ƘEmq" 8NJ=Tn⬦]g7-]RzLV{`%3 @t =)hF3;$w<53=t T  7E_cŒ`4  elpP'! h RXڭ1"^gvO_yLUFr%7=>+w9眠e9YA(ݖSBEj(]D!(e9Px_?0!C`Qψc*ب#IVڒ0\@XCN>7@@[gc e/-{Ux-Q ({ [U8ܤRùq猲NUpOF?t{ 8VRP/!ZJ0Џ>/Lpˤ[eS/=l Vo@e~w^H~ 6*Gbq9%]9S\"4*c Rݥ0]b 2o#~8T I`jǧvBiw27jU@ w!rtHƪ֫RġkaT 7OgRuAZ̈́'Nh<wq&W2sQI-/L A? >폹]/=_x_V8,׬ |؂ߪvُ8>^{L6 '!hjP ^1;#o9SJ^^\ݽw^66}1J&3Fxs >VYx9}!nP1! _Z!T"YUS-Y%JLJeU}g^W7Lp I4.O(')ـ+x2eC8\! w,T}Ub`  . dN5 FUԐƄ%5&#ki3jF7&|taJ2Kf !VsVk]d1Lԕ[ V ]&*UUD<eiUS-Y%JLJeU+TK<<7 ;="; 5^S~oMIt9#ݠI(*"|D=*Q}.iu upۚ]mH GҘ`[-ӸPG4gP0!ژn8,X47{vi7{uQIi*$qo09xq~G8wP_)S_7+:V]yh ]&[+DWu%WLܘ+$&K )Ybzq!Q|yn+0# 4L! ®lӿrZiFJ"qfN9FG(/r<"5-S,D71jtuQIi*$q\r e1DքV27s{`'}v.J@g/iυB8P1![XR$P\]/Cas\Q©OG nC<yV>g"2hQ19]]׎: πotͣ? u'뾿[hYr#fDX7+ uѯgbu쒔EmT[~sKU+/|>\:?ā: ld DZ@Q8G i߸Ch@[>f(ʿ<rDqaҸ`tv,)nVvs7Mm8 ʃqVHu<`yt^ϤcHgPAWPI!LN Zdhul{m+]8kM{s׏/|n1kϷgq,sNR2{|(-_`ѹd'UBŠ Md s?vU`^/8TjLQ3fqxQcѡnW *m?hȹL#:.nv ,HWi;SsG&>/턞=-LLQs6N>GF朎op:gzl6kVTqkż i^% c2S^ۮDVp|x]x?|:{}>br(9B5\˦xܥ;I11cB!̖~qGf]5kʕ|h?CN!c֒0֗z/!WR-׼(Hq4u"nlRdCvUG+Up+ϦSnyQ!*a}1whT4gP1!L6AMБSse&^<#Yv.kZs) 40!A);m<ߠCh{\@z߭/^ώNX/`X7Ϊi&i3-R~F.lW-Y~cNKCh#m5wuNjYkJIV̅VJEirk-8<ϕaǑϿ9֝e|v"&5fv:ȼz>zaR NTsbW-&#C)]@@g7bO4#v-#6#o˷ƲjsVgH NP{Q,6^ P@l0X\`LhP(!{XhJ F53+7w%$_'̉YYv#NG sfr\B,+5U9< *!y50^#椑 Ek!@'l)Dg&a8΃ +p"m eJhj9ƙrzL/tHWL02~YUUm76&2T ]>/;XiCNS|}obJcR!JÓk7eIYwuijc@*y1m|sT =׹ Xv7l enbsJ9hŽahV7tmnO]2U@-F`\PI!LlӾ&Y5ي'6k.=do5뾺8WodeFoρ9k,KϿFO;wDs5\>lIFr# 2&KqJ (hW^"Qu ~pEcRPߢ4ԣ{ @ ߥ=漌y?AmÓzCNhDܓl4\G"|;~储S֘|c czDCo} mhEgo dD?F2K59g5y \gOmRJL5$3HDnRR%W[1|sG(TFp5#!@12 uhVCG,pVVr. .ج{s5Vw8 |]2%|^r3!ɫ68UP;! Oɽ!J[ HfpI\U8ukO|oky>Y(:%4B |`Hc[}8ę˔B߅{ I2]EUY?4! .1paMB;A[mĔgq`nݷ.>ac:8 NoK2x@:7@6]s/`zJd]j\Rl;1L\˩]n!jh#ЋbpRCkYLM*4.|a(MۋY90 ]Q(UrA5}z_WLչnBfLca7(Hf"29Ȏo(0pg^te8POſ3qY0c\YʰPj/GɈp9@4e"E[̎"ڮ쪎jME|nPG hb۔BibP6})`;` ,O,` Sz(@8¸e>H* gOB>hҚsRi l)Iaa"k\dCޫ=yVk~o?de Xk Ca@!rZmjCWu4sO0sL i{4E ޴\cyWwpw]uB!fkc:C:Ud!lOH,6͗N~ ޮ9KeW&s>P6!Q[ l$(OYI~Ek'ۉy|TA{,Փ2ٷR R,k-Yb&m%-U(F@),P[t=v_s(Ͼ6[nwWe: ǓD%ft!=)\"_ `~{ "%(%D#D?ƥԗZ dV{}Ww>/JބFhX-A3glu)'I)BbG@@j,B y|K>.(ڰ;T\rǯ)<ˆkQ@;~zB%#.0YԾ8P2! /uQ[X" e﫩㼓T/&ܶuo:МudYvX8J|,Yzy ^_ 3\S>SU T4g=x4؀5h ;/<[Mhxu]^0f54*-\h jXj(]AB' E^˺- r׏N .U3'+8nH|mfN*Pa!306I1)sŒ[>M{oM4=~6oْI2 E 3w+{`[+<àGj![n#A7jY§('z8h#U F]79+i\ZC.f"댶Ym,*n Ʀ1H=όs06ŻF.H%P ^?v ^_逡: y4%XB P#ee7-|Wϳ43N+uOC@US"G7;EfJl^> !˗M" 7ûl{s} $1?1 0>::W5pO`:_V ըR.Ev5E*N?EP1!}L[EG!38Dou2KR?Iwރ|2]~+h\EE7hFl|x!qG6: hL#" 6[$$}v> T4-p/?Ei/\8ʶLHD 'mPGCI ń?91YZ~8֦jYC~̝vӍ\W$;j:$Ы?EF(amr{+hOׂ)yRKvy>lr Tj1 SN8dXIT ~r4~޿Lv~@Pʶ\RFhéŚ^`K?X_4r8P0!?nL[YRs̤_+J*IEoUYC^JkW]\ud"K&4 }MzPB5:]M9G^tmN}Owx\"1xfp@cH$bUݡUe25`+p+('fAs!cpO \nzmTovTL[a() Bfī+9J-7sz}z׻p3qJ7e+B ۣ!P'7ZR ۍ"'9JLQ${+ÓJu&izzJ2׏*@G2 2c4NJҟ*8H̗/t6ԩww5e5=0.YN吂Hr&_[r"E2-# nL q=(нHpP+_!X&"%BaLngێRR/+FI]ozo*eӏ&!V@9 3 WwW]>}K>=CqғWH:H 0f=|WuGd73䄊LMV;t4[xQ9zg\N}LXw nx, KHBF#`ҩ7ALDa=unP"7WG5kTKђW[޳ʄ{p]^#XIZX/Pyd"a8P,!&Z 1ySu3B{ԬyƘf01-"X(* 0&jdK j{GmA"4S||X@ 8Hc]'Cf#M. /+}ODK:P{JX@do@UF^[k .˥f:%ސ*8j8REThQķ %uSL-;ҡ6(Dn3ߩ^n˪k2Ur@!B͵ꆰBJ>7kZsΦ G[@\.؀ h~Ir&e@9z]7J|(cP'a890ٹ P9!/O$KQL5Dz;~{J7}M=ɩpϧM:M%Yd' ǫ.f2pqcx%7&۟Q297g8/)2PmPd)g"kdK}fpUN{ۄ)iˆ8_}5[ܑ1on3\ F(O3 iy+`MZ ܝp*mQvp[ߒlǀK.u Gm?oXB7<ש^.o-+W\3cLYbYja` 4%V6/̀)Bsi86qނWwYn$.?T @)]_vR~gxFxGt_փV[ ȓnEX:h`y<>:P3! 4Ժ;ޣ]ei{ WU}߮\ 7 "dz8 R0?+kXֿD JW%$4Vl4͝ "5_0WNR]+찼ZQRO? &UoT}WV)];=C@O|3v+/Y9(kWWEo=Ck@c'g-htԀmg l5-I@*5(D"zx&.KV >rWA4[^f^UAF>% ; i'1('h1@L2FuדJIV4o)8P.!+Rlte HST~kZe-k?,Y00騌c/GEXlS,pZsP pH34W՞xyϪ8~a:0㹆"Ug!Td-t{9T|O6q{J 3pIQ;= ou{֕Y᪬'&@nYE}Mtiz;];N vB5CtT'oZԭ2҉5xR׼=IX_d4*-Q@|%' (rs7(ׁ8xق~e;yD3=_>;ܲhlӋAPI_!Lѱ(hmmWVl:m9sƜxw7zߴ= 缬 ^,IOZZ\?EɼwlC"F:w;p,3YC*L:GHbߌY\|GҼ.0N#ȫO|mMR `[aG\0|-{kОYа-.[0#u7Oel֛NMKLSmǭ:[>$˵0-T" IUk(H'TR8}lP 8{r(_v;͑yދO=pgU5îPa^ڛݫd8;GKZ[a=-S4^Uyy/:*{Ϯ?,> ocg/13`:6z85 #v@?lQY-@x V{R< &w E JlgU|y&,ëg #팸ұa! ʺKZ*s/߈SZ1IP2!oڄ4F<O)s̯>2oZ& ϶su1vC$gyX;1J d=0"1 [',o[-h1v@.[Ꙗ컯lV}3R^ibWUD+0/ .~s Ʋ>N`zB"?w͌ {4`*`UvuQ۠a-pR= a"0(( |ן~2ϷsgzW9X(!D}`P/x՝NlH/X?KV儖5 Sp)Yar `XJ ~c_{8@ p途lRqOq McP1!߳[a BƄ:k7D{Jp˟R \kZ˛1[qe5ETV*DhB@o$u,6V&:ĝ\Ei))y~;pN뙧fL+ pz^] &sD;sRkЗO@+1j=PP{C0UyX 0vC'@sR[P<];3JiL (%Y㦻ᚬ%ZeXSsEx+N1_,}Ѓ}' 3r:f*ǖKܾiVdlr3,tB@fpM\yC6M7S\{hXaHuh3pP/_!wXL)hOu*R괼&*Ae?E.cy;?g 7cN  ς}dO_նBj[!lRf}WfJ1'=e=6N 1CFJBν 8 ;ccP39;~4D BP 6I 7nv?Q%:z Aq*?<)PGt{Wmͳ5=%Xc7a@EE= ~1ïk\^YaR1p7rylfώ7{a._W(^[JeO}FiލE4V39 ~uW|2D.jCh. UFnikGhW0 u:׳•w6=۠:>+m9[P1?!|Rl)=y^/ۏn-Q/ηw?DLܡz9P .*䃏[7Ct1[XI-xK j31@'SyJCt s# ٙ_㫼H$.?t28O#֬YAAqlFeL7w%<7F1T sׁ Q)&,e:yڒu/ηߟMx{ݑxƻwq/K-,~ت@~jTC[eSLk]3X/b!6Rc{ۀ^Ҹl+ӔgYA]j@' _s2X]HޑYʹ,w= FWIڈ)%K{:P*!+=ءi \^pbq5Ϙ=؞7` jqi Ĝ!Du.n̦})87=J8:JwG1>PjS\zozzYOM_T?1@r7o熜4 2]6v ~JX)Dv)A^^UWỚKky%+0{%F.^) ˧Oںϸ)BopO2̱:Gk 5[N5?gJ&oyۀPG!L Q^_ٽʸ5_[Wzk]}rs9<3:ZMLn!8 72U-dzJϏnWM7ikZGnY΃=(U:?%09ƶc7 _E]/Tl~k/ޝ杹6p+q~ G)z(x/F9 Rڰ+uPi ֨32j9Wߞĕi4,3vBoКXB.vӓ :]=]+6P{&cz>Y@LǪp^{kpy~ۏ+Mn~g+}ǯKhOB2 ̏s_En'YUmt z =r [B3ht&tfnZeB+*xO59BI2#DV />:bU3 t|gfHQ3:/2)Sݟ5xFVUj D9UR3cn(n_ GAzY|43O+62{kK- Q#7}Q+cI5)|^J~8'Vcƽs-:({5Yuv,FOI|Cyxgi ol:D·do@u؀f,ׯTk0[Amb6`fC+'O5CT8P+_!{S[X)||ǷofJ7*oY$\ԓ:;YC(X%V Q:19øTzqǕ-opXl ^>]S<^⵴5U{)UM}ӐA}A]z 0/ Љ~%8jqZ5ٓ0͋rKL2)$6 PO1041]hoPCY/O^A #ws MyrI%|m8v-FMajaֹ~:iFŚPrH& #z|{iĤuPWژF 8)',+cR:΢w)-jL7tO5wə I,#;&E}ҒU9}S WeU\ϻw>F) Κ#w5<7OŸOA4l֕>|UB}!ro*_e P5 LePf,^|juZszyѷx箫5wxWUA\oO}֝V:!_B3 L*23:դ^.9eIfMfw=KgNIHlS-y@.Wy m}889mqѾuB1c}p28! !6NW`vs46, z>yfGJ!HÀ,=DÌ똍ϝ=*@vmLݶ!|~vgm! ${U@~j [{tP@1r㚐gbn(mJejgv(DB皪EO@Q|sOP3wn-5QLS#fl%ń TDM DQ"7߇Ht Y^_`/md R{P+_!oRY(hB>ԼoZMa%$a G>Gě&km^7/~XRay<8;.kWxsʵ>eky,$4^~hm ՓDcx O@{ƒ,╌{*ÄZ@1 J O} D@]$ wP+!Y^Fy RVη5uU$nfueQ{k{5J~D2$/c`1/^9_sS0G3,;=(tRηG-#?3B,:lg>8+ {;5{fh2^*DI[@H_`˨R_'?ѩ}}F*C (P[*jdV!U<q\Wi@(.Vo-1.VDhgBy6d$d%FR 1w$Op-)8a{DRݙ8IDP/!UU ιA*UBZ4 GhgM-PcBH0"re]eҰ:zVJŝJ9HƮ#4CY=AnHlX{NIc\C ٙ`@*fVD,W]~x̹uεUe$Ȋ^_s}e4ig ; F tv@HpBi1r\<(-~'tp)y곴gK@gS43(DZ_P2!]"$痛7kǷixhM)+Mǔx|*lC: 8.+͢dY m\0CAդr"Q$4tCH\9h~GQ] -ђFQЫTC\6U۴5( yn~ l S_Y Q!wNq}3kP0!?N#o~9㾫[U\wTWc''?!}vڿRKԡ~clnQ/N9,S 2#y7?\3GE֡ F RgBE%xЙT(*F͘1L|O߆9H [sC\חH[, `|Ed tcUmFDJETMK 7?V}Vt*T`PNAVð6]}TtZZ?[L79>Z_ƞΚR_+Ds o\$<Ӭ7%?.q%0L[d0vk0@P0! [&y w^^u\bV.W? Fta8Š1ܻ!3g v8ޔIGX#j76቏{V.'<=@9z9=^<d$6)L:8twO*KiFؼ5Z"7n@ QO7k@<|Gipsi[C!$RMzQ;K{ʪF[q7C bc??<@S ZFT3r^!n@P>W0R e'Iu%Q-tXa`TήspX'XUZR3J<8H[ey ߞ߻Uʫq 쌣vzJ(9XׂX ,&&Z-x&e~G MGzިkSx0 N?b׹vB@, K|9h'{4A?pDgP.![MRkyo]sǏ;V.oiSQ}P:Wx,7]:$ +0y/i6me?"55XsK?ލiEܝ B0_T|:<@nTb bE\5,5@'_1z~{ q#xSgrr}:98gQW&)_ Fn/;oR%\ P'z]MѥhEloR^{xgL%KTT==,}NiHwzOת=CWMIMuiw~I*wA+`&ARW@X$fh3:8 ;38P2!ಳ8׷\Ǿ.u]qsL3p$l,{f2hi%VZ#Mc5pgdhY*4+:^@σA(W[rLUрLe$* *‰Jn&RT*$,@?mtGZ iD>gdi˃x ,M^n Ĕ9^G2SCL^U叭b͸HЦ VNg7w\2Z[Si o@߽0fNy?R,3YgƱ[-=|EA Ž-[}l~aRe ?@Rh(ǤQ z% u>pP0!oS\VI$?OS5ߛR^kY丿YTkՙ}e:CI ''NJgyqQ!HcXЀxU\ #TOP91;|}<"> VMU2.@o2|M}VC]Xax}X., O0\(=4UwDxsdJiZhF%9S[ ~ut^-Ix$LֳqgQ0GMooSjX eTez0>laK(\j^>y bBqsh4a.|O:Gΰ@23@00o魫I@Cih8P0!*~Q[rZz~y;C[URq]FJS<%7Ef gH<€^Mn8zX|qzIAį wbnR1ߌu`7I?z*e4EWuR6㢑毻8KQa]xaPr8}sZI)8; !x\o\>5;Rq\ў; x+N;>P!ca5Ҥ̂0 b.FSR|~(;t A:ˠ1xY~O(gͨjb폅aOR5כ "jo~P0!M$D FڮU+w֢":CL2pØlp8mA23;K '5W.\ܮfU*Dڞh8[ـa,+ 2+ 4wV X+]x,J "`!@]ݗUt`\/m`q? eZe@:uqiR_C0KrS7o7E9xڮU+w=":Hn'I+^2i4^38cBQ[7, opV|J*P(tIe  PlD 4[4* M4cLTpP1!+ zONc) $A|k۽U'j%]u5EӃL2dcF4 ϋ=4ggTǪX,rRFNt @P+_!L4*1Z'.~uι}|^5w4 ԹEԸۺ1r,%z.mé޿<;v wgN /U{TV|tΕVn,"%Qb]Զb9w^ ߷J0|v"]\w} B$,8cE#]+Xob KEDP.?!{}B)N~8qֳr^03xT9Vot@:ùkk(8)iTIo'>A/2|W~)誄 =uSFHV☵0v}e/wWaDJ3W>4Kv{0252MT_l& /+/j9F徧ĺLz<I33.צhnwSQ73 eU6_6}> ܏-y9q07fԽ`gVS381cpW*o e^GB˻ m:9bVOPjp>SG⻋}+L2qc[&3/t?ViP^Z\YM}SG; i~'~HrCt`MdZW[(X3Dս KF%pMk7kzB_7J;W_+Uw\P9>J*&d$Be$ Ϝҩ[uiۮDK*VP ADH8Xpl-JV4bNP IO/YmP1!  4&ڪ{HBU.s|WOڥ6q$zf-.hFm#!Rҿ9^}حڝ nD1n,^ghШ ϸUYѐ9CJmHm#y+]ʝ, })U#m5R7*EB N)&J{Q${.CW \pi-Lx㹎`4Bmq$.UR<~荹k V)Fx_Pr虊#Cu8.אo 8iO>v!X&%xV}ՅV6,' XZAxb/r'}32z细bmY eHA?(q-Uy$G577ujqWwnNy5JxBTMw+Z7%Z۹`s'1 @VXRkĨ*H}e KDkF3^žDwwy"o?uN:0 ^d<$r.v3lϿկCNCe*wlf➈2y]ME.}A6!zmpP2!.5I hj]ﹿn]2|TZwӢFb岎* Y|bQ!p / oBe~x^ǹ*Zb^wQ]Xrؑ;3gR aR |rZ[`%e P}Q#,og]/Ǝ!#`4Pjr0ƻ M[;97Dxgt('1M  s4x/ ^ ^ %xpP2!^[`D!4dʴ7nn=o9awO޾" VƫBv৙ &/ X㘡AD[9_@~![6Z]vuyYA{,=;+n-POJ;ZĠlBf6CWo ځ_zA|2u1'Xڷ K{#`9K7\1&^o1F!JYLvkЧ33^H~`az $馫&< 8>jʳ ²p+8i:fdE WX ėўU%}DͤXx~E ٦L|$1lan RT[P2! [CQh>=mW&EԦjuxռ M|M ?Lܺ-Y±S ah8*5*] )GS~l<'5xa1+ 7[T qC'U$ev-~+%lAvn㲺jZ2P0!?%@B(;_yePnj /8v"9}|0yɈ50d-E(~R%Тdt\B s]RG]쟃i;rdUz3`: Fze0N(@>ÊW¹錺6k9?(X#-|?ձoث~.)(@ovLH{?zM^w^L*;}=C`L"S Pc8ΙBpP/!a#2J4+WU^.Jj쳚:bI0Cy9Nyp(Հ_)e`}]b D>+[@"Nk\sVJ!33}!8^:? l}f s9f)`[<zcn1kcCŒEIj3+(Wۿ3[犸W%Ki"g0 ý`pVWYN 3~)HW-`/s,7l (a@⻮̝)N\zՖGIqð3ގ%=`Tar翓hP+  u@Jat& B!ЈS&ׯm}x^nN@un4n,̯]Q[_*T^q(.}5f5Ϥg*Gy!]=YerH؁`}?09ܤz{+ !IED:$ 0HZJ =~??Ͽ?ozgsS'2' `MЙ sG|Uveg oY;\['|?޹Wc-۷l*6g*Ye,,0@U'a]L6刨bH:<̆%{%1=g *kɄzu~V^c>]l4X1ۗ@9q'L9}JΦWPNb |>sx@H@%] D`J%9Ϋ;BDk"neIVĮ )g%TYD%Ēݭe2j.\'$=-[o,gt<{>_ WyuI8 _듕Z2)Sgjja#Nuתg$RW `pP4_ Vd 萚$eٙ59h7|i+ @Ih0ЀV_$v1  ֆ4ZTʝI-7zR4g? T$4ƊԳޗ zNkU%٢$BF*KоpWS&n|^ҭh47X"޶{s7BS u\÷zd0'r+B52* I hJVyeqTKIskz/vު şv{!kon4$nᮽd ֍Bk\,w~A;4TQНİ9Dj`Ù-ϋxLњm( >lOW'^z [k>C\]/BSwHS3^FoWMdJyv:cl;gP+!?TL>IVUj$)+THnʺ{q]Ӷsd+@ϱC[xVF9(FVh5EPE?@KuAW4k'pIud'oK  0$kV@3ZBsqQ+{t3CU:'#u?CWw~6Kq[}H[G9~|\ c.@N쩗âVRrHҒD쫧V {C*+?KūȂC N%;b_.W!(:3kqH7Y'爗g0Ĕ %-P@5qP-!T,NѢ2%^M D##oi/_{~/D8XH0]|R3>l!%HR.#P=t _g'A׃/>!}~f`kP+rEU=už2='7{L٣tF j B2h&K5_}noЛׇ΁?ވd?A_ E l#?|{N{y:Q[`-jvIRTlC]+?g;^Qۉwo^e~P/!TYܭ$˭)*ꮐu2dsx ~.ʨ|trWaBo%T gwKpQ;gFS0'i! u 1 A›1cC%"X$$xjp#?;^һQ[YXMs]Ԕ&VXO&E8xh8}4Rr ilT ZRU.LptTD4fHm+ԷNXW87㉭G ൥q2J|JNs0H1Ơ^vRQ$O 0B3vT!cuKb9Y` 2gt5B}f*pP*!+SBl c"۩!ZVquZݵΆ9Rj>N{Nc5Nn`1N 5RO?.$Mswΰ/M[Skh./@O%0rY-0Bk,"޺z[|YCףC<yv oᩀoC@r8ri /S5WJzjRZkv0HLi5R6߲_J@-f[efGAV(DYU۫ 6ߩ~% ]1 4[E:ŨPA!L Y(<^ڦ6k]}O(WŻrC$n.z?^d^ rj-:܏1K)}-1vFi.A4&{<'0^1Fd:r!g lQ5tN#l3&eך.+fy9SZH1F)٦nYk$Ÿ@n]CVg(PivSib@vDu Zv^j'4:>~eO1;mqMx&!(/ fO~qkU{su̜Dx8ewz4L CMrPO5`qz;_ Z_e&b‹E&_^Oö1V} 8bʄPwP|Q8s=2sOpV2S /j9Z$de:6P8P)?!{Ԩ es-UYǯ=][ ͫ???@0Vd& VY>F=$P[U~M8(()2l*h-b .,mjj/F-FdM]`t^3cL}nq ffffd@ On`{\{`Q֎ҹ wAV!Ƃ OptP7]+:WJႵ.ps8˽r9qyǏ?@[|`Uߺ U2u#,@ @8P4!v"aaF5#>3{{M9rLer߿AVy8m~FyURoN"y ^+Ow"9 aa !R$=N~qߋu%?(%5\`'TLvQIr;#(׉T#,8:\-uFx`gݷL> cq t"3RJ^jW w]V#n3Fό̓v\mܯ7/ ݦg2Pf(j[쬫k̥\XIHN 0u DF( d>q||{>@?<ҍq`%JZ5^P1P5!YЖ&2’"7~gܫ(N6'**#^y8uT'k4bˏ?c ANs!ƔR(B3.㿵UeT:} -VJnNnp'siXk~EclZӭӯTFL5sFQQokn٢yӳ(-;"er4F۞Vʾ1S5EQusaz!/gxuuE0r1͂z ;)c^Feg޹B1sB(ʺ)8'Ey Ä HS3taMsFƫBLSU =r19ֳ-Q IY zuebgM\~Du`Fr/SP:_! ww[ &ޭ=Ueml\o|Vfc\cH-~WLk і7+bьxqFgJL}G廦~À4aR*^\\8q|lx`p.zyӅ9SM 0 E_CAl~p5Uքl,%%ޤ2Vkb_OW_DA ^M0ChQ1ExYLVVi_[KpY `|`U]mi, t,C7#>oqo5{@1s믦r1*^T60 I|ky0k + j vfh{o st!Nc"/ {9s5Uu*+eU? ?VVj(.h3u1E$b OP#:ցyƬcoa"53]红t GV #Wu dn3(Y|~e y_^3zBD2 K6%8+u5tt>ozMajP6!O[vBfpRN*\ZT?!-ݼJThmU O],|@)F¹iٷn;8h.pI)W8LHc1 Ճf&TΙ;̕nUJڿ.S|}PnW 9j7لِ"99vhIIm@CE(جGu":7@&ey_i- s2i53$P`+A^&Pf PZpP/!گLXUcG!3(/: UjML+%wǮ|"iA-~[+A ˏsѴCOq7l'χ.rфME?z |&@6d7ַ$\▋$MO℁W(FH3@PYF0Q;)IJqRx$EA4L*9E<=+iV?@\ܼ_gJ]+7uױCޕ7&d2D~e+4%Cw*7APbĘa51%205xs[I+wE (~mEKK''@ I%Z ROҼ"^s>P2![) u߶ώFp55 znsɰl{ӡ&Sŭƪ;%X!3F{W# VK("X6(DE0_'^= w +F1y߫vH=6 AQEZ:HKJ_ePKҲM@G<"8%.ϱ6^Iŵ]ϧXv>IHH"Jq2FIƳzgnSY3\?Pи90tB8aomc>{{CQ#CUH4F2(Ja +L/@}u˸o{nM1+{πV~Y'8GP2_!\d8ɾ<{mK"TR>wz=gUcvV4>^oc71V\ % 5udKcwq#;zwmoCY¯%Mſ0e-\Vx hT۩Iq8g{St 4Rm{7ӝ}sn5Ŭ)z]868̹e4F遁c5G1N֣.T`47.garhf1VQ{Q}ʤ3P]ǩ]~6ꯊ}!3P_76i"y45e{[?VCcX=2؞sJ f~ʀ޺7p]6;1"ulՌ"0Zڋ-jsX&!psCUX 0Lin7㛌 w~Z޷{\ V;I 蔰9+eU9Zo.TM*U$^ t*,"P$`&_~8WTr~ ?7Y?l?W܌-M1Ϛ} #*7FSsͬ [ ^%V#\+DCk9Zz_6Aq. '"u8H55;@P6!L6&Xlnَ>4yn?ߣIs@gZӘ%(0;ee ܮks-~an5mPBJBhL5T'[N\(?4'Ok{:-Kn[eYc](}̒||妧9dU-toU_i2u?M6y::d=Z֠uG TF;A$'P%  Y#4һԫ~1J %khj^LdV(5LFUW ℚP.Il Xezrj< $AHzz9r D?GwՀyHe֗=Cx 5jKd7JV:RFD P(!{06* 2c~R/qޫ.f__y!^N9k3ҙIyo!\ВkL&BCX0 x8SJPǹȯV=tv3W!c w)`;ORH,86XIN!~ľ[www wM2fϽ5VDMN߫ <4(E\lV^M2||ᰯr?R/qޫ.f__ydYmIBnP9![F T3o\޵/YxΫ**]Q1+?ġX'fWO ]^k X{gE? l*8eS}.? -x /N%b_94 )A&GfwQHac( 3K!3YJq[ G4)!9Gs58la9PA$8EG'λh̙eW;xbs U*>Gl*Mώֹ3 !M P ־5֩E Qo\~+YϏZ*tnEb\![^əN2ջdkwхY%"w;tݪ~Pc>~ξ1GRbyD6WY -jXS?ZʅĦ q[OlP5_!ZL)T%n_U/^%$Uy/*?{ Z^ A!fc;Vv0@D!e_҂ @vѠ\RI~6z'4 */qꂷ8˫1ʳ )`l FԌ^ti0ę{9t35©~F= .@|g j@^eĺ@xbF'7vR4N'8 o:P5! 4Y"kq\7y}WR %S8νuw FBqEdlpd*w%A @̱dRᔙʶv L<(mɭt2z^֩||ƍH2[|LJ7RGp7kzFݵ4% @x[f`J {eZ4U$=O~~㣼OQ礧-%)6*);gB@LEYYw}ܕ)|U3W`0yp菨8[E|R :ʻ$gx& :u*+funN{}3ӭ.%߭x)邹S ֍=i: b#| P1!{ۘ9"P$=~bir Wl]mQCMu2}#GK8sѡV4PJMŪ,5#q Xr{pr=ݥkAq6ripիq\bunu6c6 ofcSyT.$c#m}JhOT* u5?k_~qyA)s/k`(VI,G:#_oy)NoGdX\)[ ]Y<=en0qh d013 Dn3s@9c#vCP0_!0e8%o53%| FN8u>IVuc ぀PJ*,*kU2V %F+Qy5ZCCaȱ5x3)fU_ (FDq!k17;=p*XUodPtЫfwe{'/y$Cx~lyη˕K W/){=ݴ^zk_5KWTf &z-,xgilgU/Tvè ._] ]t@%wOw`_Ք ;xN G;FP0_!~¤Rc[]c_*g"QO'luS!d&Gucst 'LǑwh - *Xz;}ȤO[5P+@7Nef+J s_uj]=KQu])oLK䰃:sUҫMu|%WV|P*V^r Jt~:\sRTW1汯LpmkGS4«zKkTU0Hb\_)U+!vQiin_oօ0XyD%ҷib"] }> 룹@۠vݼP0! )oLoT #yX4]P AR)фҼ3tN>)ࣙeOKzGSi@ KǞ֜$LuE_JU9 @;7ƍU.OFPr^䵫=E5 ӥ6~mII`7çC4FN1%jKwE6gYrl@sHr;kW5u<@qtXw'N$SS܂Kl <0\ v]-tU$JJXӱpah !fwB[5:ѧbk@ =Xb:4Pj`P/!+ w[3A'q5=U$Ms/[kw*>`@||Fk._0`{^3 e. 2ћGg(W:g\;1 1JJ׬2isV{>vo)$j"ΞI-Vt~gxƽ$2joMp49NFZ'z@s8>$G~T]y}Q/ogD;q *N%Qf;qyI]+~KDr7z>@NI˜@' kĢ8PK!L϶ ZHq{ml>_oӯ}_3?Gǿ#@IF  ~rΰ=\ j<[4jޛoy>.xZ[FSQq %=OuP{25]{IHZ%"v&P-THZ|6>mlWkTؽNI݊34$}Z9['$RKFk};Qxk*{TRX(EcwDo %ku}+`0߿aV5\]܍}#n.,r7)A?BpTYd\Sճ\Z*md=յQkm[Zޮ3w|'Oof.uOg_\B9ha_N͗j֪h6C-AP W@qùH J0lKe!lUoq(3DM)1'l.jI!PU ݤȅFMQ.Fn"LQԚ4ªF$yrҍKYxYihiFשOgOH[ "75$B˲xBPC_!LY^Yٮܽ{wϳ|I֪Q9.C!qYf,d` vl @O08 o|ˉ;h%ff#R{11EP VUΆ%]:lY"T?4ux)AˌDaWI i6%χaK5ec>6/hPó0ښV AXKZaAga@Yr+VKiZۖA=/ H!{,^c<2LsFJltq~؆\zDj:*%f5ZP}] @>wTDQJ R :iR8))F&Ún#z)ִƖCiWC g!}U!@h݀B_-#^aK!|z |#1P(!{SXLbJIJ}KT@SXh͞MUx>ȧ}֕,GHsBew̭WKW;ޢD31"T^l\pnbVN"2㺪zY&r!C=ڋc1Պw!Tg9wA3Xee9Zmu)4wqAAAAAA wpxfB՚l WaW]Uk+oL"%j.3jV5 oU_fJ V[J"ms+e\CopT+FtdN6<#my;!A](3⧼]:hyk&k nOh+ZX_T~o*{(}>[B#S4Ҍ!B{RYt<}zxJv)D9Γ`ڳP*?![PVWU1iVȦI+5uTPyQ-,#bc.SDW<]GI4G11THoxk(52$T+f[T{uo"Sδ^J)1?.,h)i7rܭsIJN׹Bϕy9C!@$Ol 8oIDE-5ՖPk??jD)ͷB%z B!*(CTJ)[uFY_aB ru)À0ڦ\2t<]DgIu!x赽M ̏P:_!L6A+yf5G6cRڞiW+{ɩ,An+`JUl&QP#Wk Up&dP`ƲecQg{BΗsUaȍ|lK=Y]'a-+EƮꡭ يH'CpҝAv2XcBd{EDsſ~$& ߥ4텬) !8b檹nIՅ%A@K"v<:6Aon2:&$ 3W 2H0<{?V~=6O|V@۟px}DP4_!Zt&5Pc!+=yxީRj/зQ@RpX҂Xl}iG ̦0 Y28BSHd)z╀Gsrwsքk[$]QԒA2+I40}0dSa{3nZ飼smw)8D?~$-LE?:׸BA:"jZoH>|F&Tn cw:܅M3g7n$3*++l[sIz]t aRXMjןzWS/;5_ǠAfO{ RND/<pI,FؙΕLбo-x64fŽEBݽ3Q=WP` RmxP5!$kwjnL*y :@I(&vB3nב2J\Qc 0 SA, $O-I@?t, bf9,JSB$}OES:{,Iꊢ2VWv KkhΗ{/CL:_h41G-N޼?)|h0F ^^ɫkǏ[kej?92Ln 1'R4pMv:Q!65{rfiV0oIu"xZj.aPkdηS1 A;t;!dV>>Ψ]7u lM \>0;b\ M cx* :A4NA6{hϊ)P7! [V+ J@Ƕ;dZ^u/x1٧@..Z'-T*If'J` y<$q%A"PRcXk8~lҙc%\)<Ss\y::9?ِ=10b9퍦P n' uV"x/6C.{[^v{>m*JM-L]%ؓՊZ zdÏ$NYL]u<;㌒YZιqoh[ZTe+=h0d/U]Df2i<cο1bg: SFn=Wv=)*iwųB8@-9㎈B P4!{*wַYp*3ʸ nBu ^*躀pJPq}|p`MztHho&"1HSZ %lbN|΅l/>3 :ڬ3Ԕ"ZcGlW#NnޖfYHqG:nθfhK1wAn=bŋMʔ2ʖsx0v ]hɁ(f' uTַu n[8\1ZL&C:g5ΎxpHTp"l;[>7c]A;9 {=5?Ă?6 J@}7J/ف12x% ΒU'e D/U,pP0!\G UL߷l3ܺ~_ ٭z&k+tǽ ۋM/:8l+qtv3!%'(e3OI)zjN0vXal}VF)Mk ^wfz r4:<3c*t'~߬^ 6W[e ɓ:bB$B%g RRO9*[W~> o]?<ivMlsI)x]Z[=܈C@rM\ђ*{S/ %m;J)V[r#s81l$0 ­AMP2! $$nfn/,*RWJn;po/.6ᲠvEBj=!u2H%ѮQSJ٠ڔl2Q(~y\r{E7X YG N?1Fl꾋Pav5vwA:nur _wzzԵދX`b< k_w׽Ǐ /gJ@mǎ#{6SP2!=ܠrT3y/W9*ё$pGUDMAy*t͐J(0gKTh8 sӦx=s9VLP3~`9~zw1]ӄP3!oܤs9?]ϬI$S:5}d~9_ BM#ŘX)=dh8=hFx{` ƄA~Q9h{>ZRth ILL3>7vs t!?] 4Tvxjb dq'.n5 71iUC;X{W/e@:-VRP&׷*?3ЕI]G@5Eb)VUKr23\ z=ʘߣ|שjɕ},b* e.}}Ӹύh@|| _ ֭g;朦{ @sXVi+=P1! T\YUTtxUL3l#IbA1yru_PjCU)˒a$@\l M-,ʐ hRD=_Uid6=cc8Jz.*a)U]Dd^:aLg&y+) V_(ugdEϗ7Q'O $*E١}"v0xb [|\\Efp'<3[V9k)qEi$lIh%*../.^e,O 4].ht8OOO?iKɣË#]MҤEeR&g2y+Y2E]Iq1rQ)}\hgz&;ek_*'$08ʬ{3ǯ¿ wX{(į6[5uR}N e g]{,O+ ObP/?! T[R0汑ƶޕdx_C j.Xu U:OYM=iF"-=|w Os48>ouhte\$Ww0Ƨ&c,>2KYax·F'%VI" ĀlHH~?sQvfY6䦇L__Ps𗘵aPun޵}ġϷ\9q$ (UY8$|tX< "P+!+T١Ej|[5R"Tfj_:Ae ~?T3} |8b#}vxA݅ CC@gG,(p[GU];ԵB;x*fckh & 1 j7vQZ{ 3u΀ĹmpCaǯ땁Ǹ0v;~of,Hh Z(g/FT]x_j3DZԾuhq˺G_xa>"&PW:tr͢0%IKͪ[)բOn@Jør*P:!L-ttSO{W:APXr9>'9|# ,eϱ^ZbL\pCQCEfõbݥC'xR??P|Q8޸ 5̫S2eɗ_X I|B|L+{hot/P@\P4?!\x N"y+o=뺿_~UiS|TtJ 3/NfnyĨ"U^ݦ|4N14*eBb}P N!CLo-̛t# P{hKq"$Hs="j!sQ&$D",A:ZjՉ/4i(--.ybț5 e3_{.Q_t@_/4FCwȨ5g7$sx}ET arBUFRWzyV7HN?-*;?`ZQ_܉)~ CoNL5߮|#odH `RaHP3?!\f" ‚\W̽LTFlgj[-iRVlڭ'~hqtGj"TK9U0 1^;O B3&5}r^w^W#sRe2ֻ䬑qhdmn@nYf#v֎,*$nne3fTT"Yp->?{޶ۂ԰C5ZͳkO MKS'Jz"E5W7϶^^]TYߏxg`7*rk- 11lGDy *ďW @h*v#0ە'hP=1DyPT #HK~&I+gOjnP5?!ېt2 ʃqNU{m5\dJ"jqk)֘dLMn3SbG}deRЮZmy0g%I8#|ON7dq}֟{tkjMQM^'RBKm.\S[~cYjķ]ac8Ѯo<.d"J֣dM&G BSTCgԒ%1uYi&xXIT !js= ST5QDeP{m^5\nvd{qڀTm$Ϊa#ò/x1Ҋw}!go`5ڹ T$ <7v^jˑ9K>K v &d ڲm@^( Vu+P4!_$#2U_;nf*Fq?zm !XXc)x,7h?Ujy,P`OMDPaaP4!ۤtG49Ӟ=}{/wIȾ~?VVsYQFkuI'YgǚԌaX poӖ# &" ^#7CCZ)rJWIY.SY\OL;:,dyh@ m'燡?S;DSi4MG#cU 榜|o{bLEz`^+^" {$E.@Z'SN"pvpˋԵbt`N i^)"Z0 TYMLT0T+[ds{5A8ra(D@hL џ췁``/rZ1]gP0!c,P=tZTJs:~XCwҖ**uğ@:=lQa!I )r0p0cȍ#ifJ1WB2/os,Ø|DǞ8X#op7*GODBABqmmQÚQī`VRh(60hwz"F#9l/9{mu*UݥMT9|?@Pt6~NE@ VxU|Y54"uvXjg]^xVs FR2#=7[:%-wB|MH€l@k>LtJ~nܡ& 6ɵN$:ƧP2_!޿\ {sY]uΦ@UyrlQpU/H$]8?GɮCUt`9C.=EŲ] >yVzuic( u\,::+xܧn=k jϛζkL;XH:FΙ6 ό`JKB+Y5c15;[wZȺLk=okHH/. /".rtEDE WtӉ^5|6 bEEY1ب$MsT`hp`ѕv͵z:(7 Khh0ϕ2>|sP/?! 'ܘn3[PۯΫ.yR\˨˗i<}u⸿DDNs82MPqJ^K\asSk.`8DYcƊ(:S5˻@WS- Xb D<:LMTڠ zOoN9~t;IbSEWfZ3/=T8݊&]YQ%U!߷_;֫.s]F\Ğ>\Op+ZslV#Lrӯ?3汌jCD:5m`]Iˍ {@Xx3 .tH>Shl'!*KOQzMFLP*!Wд%R"cO/w檮V25?Q .U@3O.C@cfzj6vkZ /΀ =}.>i@rt)Xқ}4ϖ?>mយa,ϣ=eՌMٻc~Kj\*?$OT]QwI#yGQ7>}m-Ib?^s)<^ߚZV"7hLڪ c+7j KA/%Â*kF1P+!ٚ8$FJ*gns\no4;Ɇvz$t,gSF>9 :TUAQHin#:X.MmLl`KVM5πZ{`"fWř8 - ˀkxc6髸Uҏ6pg'i~3/B6-LC[5;炧\WNnozGU(Z ʱ}*JǫY\x;>AﺞQMOG<Z n(B7uv6iŠ(TE55?8׏uqWZR1!2Iգh?r9M&Ej&$%}2CHvQNeԗ:=wyw0V+ 磤 xk5뗟;puf瑯X{]p.X }%J3mGz|K0i37ZfP3!o!2(; A_vE{fJT'27KI=;Gd;`'pȀt673ι%ռ]a.y=Jb[r@ EN`T+Pť{R˵-pZQq9u m>bEiJx{^͑ĥQ4ᡮ%]]&}g%>8']5hh@OBT#vJٔ62({YfJT& S{ pV|1( ~[%I Mb_n2dVr:]c|M}߉@\cBUs3|7u֪G=C~@A H@rJ>PMjL~ !+P dzMaz`X9NC!f 0.-Z@ŴAj]wEQtnM0pWTaV,KDU;K\ ryD1{#f'oHXV.>Ǧh/>2U(G,p*WhlmTÃ27hFQMY u6.Xx[,.o fpP,!{WA CS5%dG7uqS\hU\WBuL @B~ך%Q |/czuUοBJ L5U&MKr)pt<K0̺HOKEbgҽ-{,(oϵT&ߊnrr]L$c3bઝ ,S[,&󹙚^0Ps `j c!\쁛$"UHU\T7W2:UᭊtB(C,$B@)-OT Pl|q/{P^}b@ ` J^Щs=yDpP0! Y 0dFg~8u뺒MoMou94 40)"(ꮱ}4OEm&aIC2{Xygp/~T*uCuo(7­@@2g||*xO0:1^-9 eC2% =erJ1ߡwė^mtQf%DžXmXZv6O傭]Ka2Dq˹zo|7Ce,_{z5"l]V F{8ƣq ?>^KCIeZr e#f/>~QvP4_!d he4AHŹ>>rJ&'.QW_ LwLJ*%0Bi! @sy9D H ڣV䒏1|@+/}OLϯ =^zO s"RvKI;&ЀVrGg]AAXP,-m:*b)gF}=zHZal^B'|zRBfpsuwRT7rUu}G׵1it1ժH iI |he,{Ƕ/+ŞL;}nX&c __󃢉wyFl)o }<6FNtr#KaAIdΛX?n_voo [w6+4ԻFʁZ7y}V 8 3%Tm!\J?,%j`osO=ݖ>U|?jM Nlۇ 0|@l$%9@.8C9ԝ ReԀ]x%`p%J'c$pP8?! /?PO3u LS6ϗPC,LaSD'!e31s:u,z{44h;XQf<\9\,Мɤ̧΄@I«7wҬsu 3杀Q[۠R`}<C$zxR .phʩ0Pe&/ Ƶ+5<7+LO}{GW_ gٍJcy:6sX hҍ"+)>ay`T(Z%ucl,ZR@nPqLeV̂Q:gusG+djJUp4 x+l,^,'7lO^7p#,ܜ[C!l!4UX[tP2!5>O2G!8Do\SX_[R7/y}s"f], n-4O7>QD>xɱSNFr@{|/_m>ljȺǶq]$0.<0ňu/LEIVK31(u$a@GyD̿m-J U*yņz wEŔdš zH'򍹀yNTmkhkvQ,8P3! }_P[@BfQ_u~i%^D .XOÝvs~;s` P†Tc$: lWrbt7"뻯?).:3_arOZI\P2?!P[!H9B&׵2;uJMUH?W׺U$]1PvB^eDRQG W<;tC|E@QpGw$eB倪1$d5{ڳ/C!ŭi9`T;yJ^Hi^ teVX.jHz(A$i9Bfx׵28׿JMUHm 77{#JiS"(@YN$J 1S8%X/fS5f 0Yc:3.7v b ڊVEnL- \(P3! PGG!8HnxCωu5T5ř窟fBh<1 .Æ flB͈%d,Ҝ"qI}2ЉU,=YC37 ?Rr3g.wpU{xH,9|bZ *tѫ;ֆ@Wq/Bc 7DV 9B,j Pf}M?B1B9p c53Ja2 }N͢ڻ)QCCzlRT/zOvC߂M+m{|xPөj@ vZFQЖB*B8D- B!;Ms\|f_o\kk> 5ȱ*(HE0ՙTh8"Qm;~2 #S3r q2WL_[SjqaP 5>^0}!_W2 s *ڗ.P@ { A59Ͽ}wƷrS]U.eLϿ†d|tXMaˍ@K\B[=a &3-L5ӆ70f;) dU ImEOsٕ>~GTHjw`l RJMc:G(2A%iuDe2q;ek>ie%Mבa#|a_k]7v ec0\T>ԫ!ƮyP2  eaBАXh!I{Vq۫B^kv6|cj+]GU]5asSw_{TFW-)*\Y"eouB3gӑBрS1 !DW+0^s)A +h|'>?E~kdJL߭1^`OaGH,4dАS.gRsU͚_%-l%X"'ۗd.=sS3z Gܭ3jJŇ`u­QeH Gϥ6O离FH4]X1%3Um@aE<˙coA m;9/ajzhkIv1uee5!i%iWP(!RHuA_ܭn\J]eXqN$qkg4z(JMPP4aС:Yy&3/ꬫ= UC/L8q׉ħb$Qn'v|[(?\ h~GO]w.(t5d sVX wDbB7 n/ND'((6(L/_ܭn~iĥY5|la&G pˣ+,ذDX5O%>t+bc3 @lpP+!_R[ 9 oڪy檸&MbwǺg` X:+ 3d QPix(@Ulpne1 ^xEB~E;p v V9D:LH f f®]^rΓ`]7+{Y̾!(Ņ0 p(_°Ƀ$}P*!P܋!:s|^A*  ;XMBM entS~A0ֵ> ew[JNҫihcwK>C,/ 3+٘.t5PN%r\>U2n& qU{ʳvTf U9]\yb/g1T5O>e|m@ẵ>SW &Z^%W<'^~[nuY9Jp4B%IJ6~ToCe: OtF$cQ @"lkaqUb@+8@ "=8P.!+ 3KFo͗%uq/%2op#c(c[dzg,q5|edIV<|'HSF}NT"" ;;cWGLֳ}v+£Z}4*܊RYs5Wbx/0Tfp W3MHV5\x3 @'GK ]6)M;\lMG-P1ا),PEXB&qjistKDcn쏇<"zC"uuDθy,/ZR*$E?S8\r L,@dd^ @GǤHJ13`|IbDPE!LˋߟQV;H5#U_pƽ;_PUkYl]}CpAXͲs#P]0~0$ɀ ;.Kw!/vss3f(!W޷BJܜeQ#_Lm;=!JnrSp ۖx~'0bP)!{4b1xkcԄ&'A'@ж>{xhOYc /]<)jIѡ֮+2a|QtM~6@E#s+s&:HA"k2q@@lBdt@J`:!_nd `pP5![h̸ Fd!V |_Ej5y4t9aSi=w3 Cm{HDia j2V΀ %^yĐa75vߌmCOʴ&vT-/ǀ2qˤK{Tދ Z_^?cē<,(aKnxo~{Λd]HfD}ζ-բr7s\GȬu1GЅ )q(Ή X@12 ~wP%_jQ ^,P2! =\JsCUXfSwIlILpTT  C*{I%4.^iF3 $mX(3:QHWBt=l0:V=e;r\z4 Ui4x Xq`9\[V 3fF|{x^orҌ‹E#ye;rl=Lɀopxi;Mmu \F檲W溺Lⱪz1%k\;r.J07(hmt0ץكOUΦX^Sx<֮33@|ot@RgX:1UQ8<;z8"F ZdP3![tKƥ48Ϊw5{ⵛ|ܕ\nu?K}e"ʫf=os/n AMo餋_zsGNj6IXon;ca~ =,d1c:jCv8ijuh,oɒAN%]˪} G`jv:r Mᜯr> V"IW ?8#,AJ,,䩄4T5B: 3q훸|ܕ\nu{Teכx>kO+x4X )&m.11 <,&YL&aV̀Rf.Hg[W Όjjި1\Op* r6 mpP3! C}^:sszLq/$Kbc%R 웡ҽ@lΖjX+B(#rw羛YnoY#.bqθϿlz__OP1Bts>:|A! gj훐sY&\X qE\cI5dC: ,y LY!.|Bu0%( ݻ.k` %P1_!Yi%CLhJRZᖪdsskCKW>k~pܹCĀCi=%egD ըFɠaF{I  v|"1 `k[gӷM&Jָϴ.&/4\Iʂex]\0xD\"Ȱ,*nJRZ>;KؽssV^\9<'y3 mҠ T8fa}G`b*IċzbU`-A>{lLRtO|Q[v]8s+#s ߊ3ž$YэL3o[N.Ua*ñ æ.& -c{pU`Q^y7"Z z(9a/tcdϧP~lJlb:̪Cn<[58T]8ǟ q=ħ ] BwZs3* !AbH>̰䣷ȹx ik{RjuCGޝʊ n(pm#w-_,KxsW]N1rJZT@DԘaEE$ /^*M! g=)[oFpaueϪ)W4=n1'b: E; BdBֶ*,׀VVk[-+> oSkEeʅăRxHF8M^8@e+-] GON. V jlh D;vP^͝)Ví/^%dL$"_PEMg>WykFރl'K*9p@[=wkeᵒV1xP1![a VkJC!+Tߟ_?8N%ݬ,"R>xKqfL'ZN:}C5%oT⭇BL}㪭jtXJhx 릀0^jfly6,.K.E4j"y *D3 CTEKۚTBV9?־:zg4Vo]PVC-!H_*$EG4\y)N7Dwn뤝#_C."Ms|' $T)_C\k=W&@TL+;:Oۧ~.h-NZ6(Z_P*!+-R[WL"~kƫ5ISY|owz[oނ_kn!=*JX8@QPV@XXo.)ֹs;]25@5u[x&w2\L o{ëokֵ׵Z6H_LZ֛hzֵfy1t +| t9RR1Ė%)»>|׍Vj.޷3Q6ZQ}jDo~bhCOkXnD5x8UqB}^2ť>P?!L?ڎٯ5]V\g*p9qvr]I~֟1kJ3LN4l 4tQ05umáF""$%ťlF5bey)eLJs"b6W[[\sg"&gHQ̓RjXc( "r&%}\qWĴ߼Pyd5c7בjdr09Drеp%XD*$d͔ 2pH;mG G缫LKv'#ABIz=HVhTȝDbb=ij psZ_@o3@p9Zԁ;@%T"xZr_@f,K G% wj@pga}ګ.-bh4۽D aAZ ~3ɷ E.r`pP)!{?X5IQ zJu̚bymK yݭ{۳mChYhv8rK9yU8B.o3FOx1ߝD tʤdg: bi^؂SUSRvYSrs ̫9 |Jm3ۤ ow.kzz+ [|ۆa-J:VW<_Ms&/u|1a BĴ;q%B@6\PX`\P4!oܔi15]sꪦ"J/βL S }B4J" IsTz!BʌwRf/Gݮ1K(x3 l/ |eR}{,=ZkKsvw\.D_}Kj U ΃p<[[@tYsRokIv0`2/@2졟fjhטcB2`;1'5ɏYP1!`T*P犜ҫZʹ/qМ3-(G#E[2fqKܓO[{A;K=y9e0B刘2~cg2Fkm/91yNKGR%P2!\X]nsҳUxwU ϏbuRGe3]R;6SI jۙ,#px5N'R2h,YG4tGrƫ+?( XvB3Rezljnc)짫fn~`SU/9Y:KOK[s 5y@ 1>'J` J&'-]Wwʯ.8j9Y@YjhT(1WPsG9t,҈Pѭ9fȂ/lrskGAgg8Yk foKǿ,:.qjnpYϗ<@J"`W\zn !#/1Np:#P0!+_`T Hq|d/J_`-o^3];(p -%u8 FyMu#aP$u+8BbɎWV=fgWl{m20CU>}FdyUJMW.x`70@Ԙ `5`GI"JDCAؘQQwZoI}]7*U_vGX}]/N(L܇%QR#uq"f(#V ZЂؖKS,O\2(NRM劜.䅹b`Hds tM*^-TnPD!LlAMM͚׷I>yԮ5[k귥kMNhl^9]Y\ݙBrQ̽9}q)HA'kUJ $<,?[ t}q o4NwOˊ*ip-û}8d2։rC+C^DfzҔM\i3vV"m֋'% ,p364)PI3G>f69 )`ᷨ]hYxo U. Ɩ&_)*{@p0i3tR',)m Tb? z#ƷzqhP٭Wt^oa= LF ݹ,BC29 n}㕱?SM}TƷ֗U;_MFRM4WߺK 9 /#^,` |0\Mh \&󙟱~{ Su='Re/R,U! $)HE_m*MJ>;o("EN,Fo.̮J+q(g }Gi Naw˓*Q+#`@W1/Xۘ@Tg`dUP4!kZ%YRξ9޷e7vJ+e>4"?C qBɋne 9({`|0ȅx shDP(7}ݲūWX7F&l$@pP` gSaƝAxNj7#w*MK+8aC[&#c9 Յw~%-2HQâpx=ڤuogkVW-48M?[[\]]3wi+$2Ď4м 4j߹:|90,1q<ʢ %z/߮qa6iy8vho+fmF_?&=Pphc$5OuC(&fm3.OoVpFP2!߿!x"l}D9]*rs__~u!C}~ێMRݮ[uaw N=> yr `-[c^H I91^'w(ׯahkkQUKŕUˆ3&;[?ɟ>-uYDx2VBdЋ/(op<63|Y3tWk41> T 4CWgk_k^EҮ(5?3"Tc'ŧ4nVX+{_@$k-WР*ĕpy>{>x:8[W-]Z5aEv9U*pԶ=5?qh0TԋVP4! Q`#a^}/8!W2β?24< vd?tsQ/pݹ막LJS|.e'zvV8>n s}K0EsqqCO;&L KoFZ!n3 ^0ߧvE=+oz?]X,aOqn̴7xS[G []JzI͈zT5(w*6(dhC\}||i(HU*L &@$\*Bh{N{!R}O>ʀ؂pו@<,a. hyKO (o|-Jϗ6;J p7=UOwOKKKy`k @`!Zq˅LHˀP0! ;ښ0eB(&6OXӼ篪95K[h̽Nş\ |oUj}8L7[ݳ{C2/sK=m~:Q󮻛[j3!{|=gt`!}hP[;+ch+3)VABmuΚu;Vʚy?]4;pٴKbv2?Xd (k [2+)|rbX{ff~ö֫nt:G@QPd怖7v3*:L#OU Γ鮜 rExP0!K [ңj..CUYSY}jnl2uo+^I }(p?@xqdZkHQ pe#1Ɉ ic)1_W!0&qeIp$gkdhۢJQ]/摧 G?Oӌ}; DɽrՁ.tNz3ρMJET"jJ VMeMgyϨ}%ѱoVsUEw(GhUqXTMjk@L 2ip zO.Y3i|

OF>qq6/yʴ2Ƿ^ ͜#(@dw*e ,r}h躺3$'l3DngMY!RqSy ZR}.E$x뛯~yQVл0 za3p1%u꒥~np[Xfj0Hg_}BP9wyJ  h}֯tLhT5`P.?![gZQZFT[&uPO]VCThMiwfeP@ '&(Q]3LJo4wxvJX@W<_АG {h…] @%V}J|`'p`~с bUOC[|ëJ%8ch;<7۩@N7Jk2*=JlpWZ׬a+?穞@^4 +pbnҜTX.L}}maϤW/o/FhҾo?!$a%$d,X[w:uWEvxBm~_98^MV(%Sa8޲+ܼf38Y쮗͖X`nw0! <@>]XiK| hpюQ xgoM},X*6Jt\!Th-zjP2_!K[*"LsY_s>E$Ǜ|OzSP-"a={c``J,ެ>x~ahF|PeNZSZ/F?7xLg,BKYgr}U ͠, H̄_WrBKfffXT}{{@=R &\ƞ#yڄ]GM)uJLk\NǶQ$puU S;(nrJ,'# 9j~+9 L57ZN'i|oԄ[f-clk@V0Bx2FO+Ԉx:ǬŊMuGPkWP0!T[rk*R*g굓mPa>Wu л173)dh)G{ǧ3C?(<Pqgܘs7z&)s9v ;c*8 .`%p !Ĩ#y}@))n](].B篫<~i|ٰh=fn-Z-^qd+jZ'.U-#~Z*3UZ6ud}-p1QG:a+Oov+Nwk1}D`c`5}}w!"|h ljP.! U['a5߾xS]"K9߷}7G+TsG# Ųk\:1ӌH } KnPq7r YU?'?>2P0 b$ \YdS .ϼGq &4XXdbBYx*SW'N}9lNqM]P)B+\6xZrFp"K9߷tkn V%c9@V,ӌX0µ7V /v 9G:$a |5@(و4 "Q.3;K ,@ (P+!+i΢)st5*fR5%Qퟏ%>EΒi A%: *6ӗF=T "3ε$fgœ|&!WzH_LDWG Ɣ}je3m^(Y?5D'35}o؀Ha}D?}0}o|{b|a7!B-xe˯]JT IT{gM0 8m~ou8dtxV=Y?S+]zsUj\dI^8 nPCS `AL"uiM$&*tN!)pP*?!{Z83A(Poo)ǟ |s-Ry?;u9sN .38@84"/H~њ8$35y>*E`drXd.TZG*xëdib/<>= Q2˳z+)ǫ`ٺb4,EGnV]3`cggtWjC7扪',$3:L S뭺ozFv, STMd*%_t R@dl;-SyqZ+./<"3`I"N@Ӏ0L?{vXP4!Md@Q"7U׭ϮU:椉IRf//3pJg7ֳX)2h2 Ag;xf$qɜMyq.JYf8}X\/DA*#!oUrvf~esiEA0;rXƖC7!cxJ7ḛI鹕͞]GԌLoa۵^2ww2eofM=sDӅ>oDAugN/ ԡ:no^}u5$JJx4uq-Ϛf(Ta7C%WN"aM8]FɃ&o匰\, i`@ Ԗx.8ց-KV3OB% _X D.P4!a2v*LBIxәwU%Us_,Fk&T\qUJnC?@ urߨA|+p&cя-್\Y#SUu8! qhFbu`4#$*#Mi Ѕ.W<^q> Ln_(ݒSd^ժug8adF/#\F43N2E"04'mNg7_2.r5Ko49 0AY`S=NT)7V7αZ0./ˇ> &Pf3 u;]/k.T#RjOZmP pB)Ψ(Y6suyu߶/dT[_gJNlw.W= D)Āb^H$39˯7msVDښ` )!c̄O '{3E9F\%#c>f !uP0!-R37DS8Gѻ8wWY5{:[i/4S<,&ٳA0B@Q0tCW.5BQM``ݹk,7"-U|&'{ZX)B}tވn{P\1%i_$Yve^:N+9Ps$vdHN,xcO|K]"u)^ sqN93˩Tq˭PoO;n-De7nTH 0g]5`L!8`a.{tpNuޕq5b2Żߢ9{@eҢ ^#SP3?!߷Zag"(dwϟ ]L/%%8UWU8OAf#q^~wE1iP'[2ϨVQ>,aQ0DR$̗mg .mcCoyU ޡPWs ł'\-+S@ýY+6ȠL&kʰE:.v"W+?ck:g7 ?f"HW44 Gq(1f^|Q5G:+R9 ([=GL۟kAIltfziHD]"`T vدkvk!k@Ld f\(*.^YĘ/Z:T { }&2uTઆ #]JqZ}xnlwHơbe?v&R PN~T/_QaQnvliLӃWQAT.ف*@xüyڱgP.!+}\9WWTD5IW^B0Z/Iv܏(Rdo!Uu6i Q f@3phe61(D-+8 19o tU7~yZ=Y7 +Ϋʰ;DU):Tosז34ц>K$5^w§x mW١-7i3WުRU[ezԙ{ns[=5.RksU@ A+G5T)To@=01 ˎޠ]x)9)!c}.PC;DDA$ז-ZLD pPF!LߞGF3P^'\߶W_8qz<_}k= wѶ<1Z-Wwm 1KdzS_*)IbfCT8a9{^q磩 if?iOM_8e1=3dqGJv03? ãisŹ11g{2؀}ߑLs?s.n^hTM tN.)Te,o%L_&tY'g6ɀv`߯kt,p?.|ձ.3F>OVB'TvkHSCjrB:$9)0c8wHh4U0,a$Q^{\2 GApP:!LlԦeXNlnlj[O'wwrj<%qR{E xOU?[l;0[mAJ22P3`!pϨ uYfM!r%M';eeqbU;$1+3wQ_D-2 1^r6$x|f-ͱFY%x\L*d#Fb ]ٺ^9Y~M=j5싾l>MHN:Ճ>xKwsI?zp'@ۢ|wh?qBTSW0AD@&}rkRן7k ?8K~P'!{Y"J&*,BKyɑ:殗I7uZ㗷x 2qH,YsQ%9p4 >4YII͢Iп9>M05!$P|$43I u%`iAdrMHFԵc;֮8$ [~8ûEQT\SurӻR۷n a4m]*xP;u( mVvn)DubRBuP.Ҹ!|6yrdc`/dk&D뚺]$Uk^ dԸ.Gl@BP1!Z %$/ykzdIe˓5_ #/aےכ 8NK*qj$YԐ_5PDpGi.6`&q:X_\?i3 +3_6f3*H $\9 E O]_Jb/0;#36K%l¢.2QqOӣV2-gNW`y,2iN9-Ÿm{S"w/sꭑ)7Yyrfu6?61W ZcRP Jy.ѩ[1[ztZϗű0|`hzi947=Idn^@_C+q'@J I5E〨3`8P3!;UZ0bBkt>:$Iʓ.TX%t*c7-XT7->eֆ^0JP~{pqfK߸fJP@9W `j9D͠n8Z R 3ۓ;,C2 )FpVI(WvFzP4MHR k5aW|ݘB]&HZaQxݠ /->c;~,Y<9ky&Lދ( /%9Yw@ nX}yD.P< [ 1 d'z뺽ݥ9֣-)7 Hni!ɒEa DY)ܒxW>H%ծ8 x`gK=/DS+nE:I PPu94$+U,zԔSWY >5, N ] .=t4b5 8{fNd xcxNx|i t8禍qRf)f^YJy}|sN_urD=C3b5njxLlUa~׏S #/ŝzXXDL}0#~W?[УZV栄uE#g}˵*JEiE2 d.KË;b Dz7Tk8Vk0%E8byE$\$ (  CcG^5pM٫* yΉ}:Wu5/.9T;IV.dbY)Rm 9w09:(}zfPP4 +4c"۸̕U V!%) nh*۶ iVr)>OaNiwZa҆X0&|mpnPRTQA*MNSO)&4y$šq̯1fʥl$4L^BXy+qpfXan#=Ostp_D}%drk4h9cv[={r;"jy^|^֙RIUu&&}Md"@IuB}K :$#w@oX+ T|8 oyngԞ>]ŷҠ+3312V^$3e!u4-pPe,aS*g^yL`KbrL\_}=З yN(ދ}{z9P? Le8$*v]׵Y-5V-y%^u2o}Rx)R=i‰UM=@jDp*|;/Z󝣏Q*hv=,wЧFxUΰ%oi65ݍC$[ z1| -[>(Ҹ6ՈNi1gƜ(5cZ+NĺyqX)֍ emM^j^'1,Z+eBzbFi]S<J)mM q3-^]O}Gc1b %4 ]y1UXf2͆ls&WR0 ΙHO='>ō^BP,t! BDpTzԩKǖpu{3448ImXd}??8E(ʚB_ٿRG} )SL}srMeiP^u(/.sJ8&'lI>-Q\B/ +aV5>.mm?sCIG\R.֥|7A %IrѷKh2 P.!wQeC/-k-EJDŽ&So}ږށ@ ^3E twQɂ˚ɔK+G 3 /@xn基Y3}T\=ǖąg8U@')c֍#{tWkB~ ntxaU8u]+fOOCRM=Ѯj8 nܵJޢkz%}}3C]v0-_P^o_8=xRpBn0!m³WSԘU&+Yṿ߳h* #lz? ^P/!_U(c* D1 /uD]M܂MSL >GK G={"2)C Ͷ#q˅8ߎR.jiJ+bWqۼ_f4~C~I`<]hBHN璇$j{hm^ڥ K=vCNt2zcm&\Wg:upE F5x_qX%IT?PswOc=f'ma g۲Sz.&L"XfplCB$V uTjRWH R..u8@ |!;tbZͤ$EB'TYv8P1!LTY2&"!atKJ%t/-Qt#|dJ0Gel'W3Q{d۰+?Ѷg7Ata`P (+H_{ EdOb-Ƃ'sTQ~Mۘw_jeH(w(Jl6 ]EUYZo 蹫xqOZ]]~(2`@߱4,N|YESP-!SXR8"B3[|eqLu*.NgNZI7)O:6UpR""1*IFlV﫺Z7[t0pǿϻ}VkcG > 8zqoCvo C/kG 6.J`u<+fɈa(q^}N9q2U֔^-9S3~>kύJ`.0qa9$8t7߇"pH陆!Ei4DL'49Q3wo?PbR8{ _"6ノ)pP/!{SYPT:+{n,V+YAW%UDmx-n{t1]фPdi.D/xMO/',eVa=n28`=V7{NVX_Os˻7rc|:k}Y@/Y"u :׭}٧Ucw<Ʉ2^# kDD8)u93%AB ie45(*Y*?huxh`)N0L#ɇܰ;ɝG 5ԀQ˦^Xzh~>.& =2xZ=*zU=^5w pw{G4H itB@xP1!+;Tಔki!>~-cRZV5^ ?&(vdbQD1F(-_e_+S() -OfTΓXyW)17/nnwrz!jlz To8^ۺi[|(^n>uœRZ8#9|-~bBqz-8cb5_nTz'>=h9p@aqRS?oֺ.lj{+{lWΖ ֐."ƊހZ[bra'k$@:U&6 ohBPUGVײ2Q:vPYj]RF' T,+~c;8I6"}x,*+ZpoV2e<~1)FFX? ,\16'cR>Y532+@ P'!{Y!1kumVK:uYz__3 i` GHkR*P1Eayʼnߙu.y'0QwYN!B0 ϩ@zR#kiGJq_e)V% :fo-s][p&(E(T5P7{paۢ Ҋ˛:hJִ\y/A> n.Q;ǮS[ⷪ]Ww9Kr1/|fH]~1w"LpP.?!t2R+ߎwm[mlԺ;44pXAll=Ty0qz_ޚ\]~af@wa@5}oPYN)B_RLu^818Wq8Mn YJ̸Ny;GܔvL88͚XgШB"J((05|[&q}g>_{kð)FM. ̫Ǫ_zk[[,.uN0a:=֍L7 ~%w[KP7!?׿0fH1_#`eC עfc=fogAq;%_ bِ?#tQ?e#'X-4:&0}@x]ڎHprÚ3@ڎMP2!o F#X&S[ުF.R*4E qɈfΖ.w@1k$0MG$9B_ N"F./ɁVXᏗ.?WڌF700tXttmzu\wnYG^OkTΜ_WheR]JEX{Y<&AWWv?;BoF^P3\֎š^ЦM#RJMʪ*4ERPb?v6B 'usȈ&@:L0Tヹ0!EyƫmɑYOpT@ ?ZCՑ[8]*oF/=+/E 2t`]> JHOP2Lavc57.107.100BVl8cInj\\U\wqS\X9vCw01<'-B0+Bz0|ZŸd}r.mqťå9QXm2_WfBwW.=囮r+ T T0tW:$ƷZL1gepz߃]kDtd9 N`JiJW D.eUq5߈ i]>Eg _ )] rY5Qeӿ k^QsX42Xr{,`[EQ-{)GCG,7FPK}`x@[jOPH!LY[Nvk7ڨW8F5UgϟvP9ꠑKZ8i}$1jWxڔ>Riehxz]8 GeA\WF& XV1NbN=rI-v͍k7; x)W Ro%yz|1HZQ=S<]/Og |_/֑jןzP>H|QWc=7ai'Mzűwi߮?Wyv/ U_;m%Qm^fԔh~zna{|G|dP5W1kGY7.jϷ;|98ydX`Ad&`ڤ%Hhk2TY0A(SDٝOA85WtgCxiWp L83K3;++ ]j]UL7 Exzvbr@os7{M$?{9:?+ѽӚ8P)!{-&D~j{Ҹƻ"Qe>Ù\c4Bk@8zDM (B&K 57:b4SS"e_mmS[9+hAi쪼0rJodBd t4H.AW[33, :#\-xghĢ2[l#^T|S젯 }&B8xP'ƒﮢ ;d;[!Dew G5<ԶL;N_KAt7]*)N~zzߚ1HTquϰ<ɖ4 P4!aA4 X'sX끮uԮ<\Ʒn$GU]γoǖ OFǬe"EV&H!pCx82Fp̫{uu8;qf գz VrXȖ U"@iZYO$*uge51⊅)Rw9jvH.l§UN۩n}N&%:̌BY.e7 w cU׫9FuwW}j V9=u1 1H,n../ZP3*B-D)J(w댞yc[7Rsݺށ xv` !k\5!Q0lWIoc/" =HpQ4LPiBSkFz0[P9?!}av6BC7x^c[fx]i\E\ &&w-'f}sJӆjzmA*C/sߞdA',@e,-Y*iuU&uGt1o.uQy|-D|Y)c,˚6g)-Lk=o|b"N״4M{X~,{ISpR+GYlycpE)҆5`~є ڈl v||sǽ}[fx]i\!Q`}wiỄfŸX=]vJ2Ӗ?@B[իb7HH6AG|R24jMͿ|Ց5|/'z5}لr&!/KqYg'ˈm9"^Xg{gZ'ҒoT/b_1L]DH7 [b7Կ C\].$'Y|LI^7sGk@1y$ CL:{=W^8k~]5QPPg7?.u ui\W 9*YljL3W|}qOv[[<_'2y|Cp%\46U d{ׁ^%X>}7PL,@)K[>rP6_!gک6EY ο+<|ɴuv+ܔY IEN$n=xf70lǎEICA@1q!aTi֤ fy !G<'ڱNLYB]ׯNF9ށ9_ ~9āՒUd\ڭ΋Z1KU (ppq)-{ rRvd:3bB״&ZP&  7/w׭yMS,\g(%riS|zBv-5y}=`ky6xZu+ZkDe98X5U6^u/]_t3eϋ_uل>U|%iV!"YBZ#FQ3Hg>@Θ#7d1&Wfr/4+$u&f]W`#>"ûU+[/ wNC,@=W~OMCh+ޮ|KF_9:XbF$ l'}LlN ` b NLk@ekN6:P0!EB㸫熓N57ϟXܠNWu~'N!>YfCz(SLb V/";fP'b7[CVwM(Aɞ3U&qUk#?+N0@5b4̩5"ef}Bql|rfӲ-6*V$Nm*·:_@tbТ_7uC:͔`㖴hkU W:jsR\IƹB%Xa㣖uzʤe=}eZ-|2+5DԷN/t"ML[JۋH|Z(;Nՠ%y7>}"_Q P0_!XSם"TŒd&ڂP_ϛhz{nUpppO:lޠ <8( qfr$M讏s62H 0i'=3GUܣkb8FzˆIh\tS6[F^OPfpP;Mm.;ʉq5~80s0W;]ȃ%Tut$UԊS$q^PcތBv=BC/ڱ«Vy *"{\a+S rK[ e=Fឥb'R3N#_퉻}Cy-8^,Yh28 ՗[f' g!!еmcX^ ISDvmK#D8;[Zγ̺+S4~9"?=W ^2ъpwSZB['6Lf!vDHp)+ j5/vf~/4SU2nEwgLoy[vhO4^k05͈Uf~m:xP&H%M~P/!x D9.\RuyKqN^~32 "&,Z?, R]8B8ND*.ߜaUyIw t3[sيkmS;"WULo{v\4kf3YƯI34*IǨ[E9O.?:t'N?Κ>voRX"ha>pRBkUʙ:^DR V]s?$5!3ּZRnrɕ-&dlj ry1hwe#7';ֲ egޱ˸gC4@'Qn;.(Ĕm|OO"P.!!4%a?^81pU\ݥJmVVOEI8+Lf!ݥgp3rÈ=D0beB8FYqiq9$hvZҠo+;ԅnƭ3.'$<zFYHݒ* ĖĀ\V>Y:9]s }hO<94nɾ_\uБ?Hr2`FQk_7\W7iR7}U ҵ_KJv+bOe 8(cn0`n w9+}ae)魵}iEp"KSZ84 M33~P0!!N$ t"eJq^A45ae?YiO^ qFmҩ4"$lȹIQmȼYAB_ d]gXMʂ5^o_L(լVW1'?@u,f3RS+fvҟfɗcjYwJ oǜ EHOUa8`B!Vx!\Wb_~kM[c|# RaFr6Ac,7"7\80ָNn6l1$8켂ўZH[Ξ)0[%xyS7g8!u񔠐2R$md\L P2!O Jf]L\*ҥUYΤԯVW"351gל+1A8"Di2˳Aqp$[&mdQZ`k\jETr 09!S+H LzR +cdSIq,ͪ_8I _U_0|8I|M1̘{LwG_F-OYZ_**:}N;oh6 $-#B^sٚސIIutAp\]j8IiꀼGk)T#as=mU/A=I[_Ce<ˇxe]ЦZf++{y<6_ZTOA&vYV@t` J&hLv[ S|6 w9\P1!+{Y!TB"E8i%T,q2AMd]4N2kՍJکK(@AzD_~ɃfJ{P5eXg~TFs+\tNWل|d2;opB݊Y߸,09bf,hb>EDd*qJ󠊎@`@;/:=y   H0b " 38Zw$NpK$姜i1Cu ||߅Aé!,Y D,1͋F Ud&PG!L f]ۯmnӍ%qO\qtX{$AܪS,1IOAvSSS)ÆOmz^MY =r"%mQ ]M4 = P$#VϺ_ zi5N[Alql>?.ֲ&f^͒haUCV!&X*egOKHA$5 +7Oӏ܄Hv?sxd!dh̓Z0XR0 @}##"oFթ\:Z?s_?iC &9GX$]U=.jP 81f`-}`ț>]ͨM,oU^w*/uz}Nh+8foJͥ%goӵBGG!.3L9? ^]sW@@}[g<> nYpcv'P¢"pL1"*Ԑ~q*G25` een0ΩdP1!L6.&dۑ6[/=\_vT넕i G1m ~;c#| a Qwx5!/dPA7G$͑Ԍ+O`yhN}z>|9Dń(XڏĆQ@LbJTglg} TD66y T *`;p^d½4ܟwPXѵg~sn+w\$LNz;`!Wrhm"G>'8.v >v銅0?u ײ6v>qP#(~P)!{ZYp$;dW*Q Υ$n~C221kS"Cb_p*|m8ymD좏 }zM?1*ʨ_QB}rw9(A\ jBg|^pL2ΈOc0h,"9B0R+dw2tO*:%U x}:J| ' +YպUBE2xWl_NU0Xbxhi\gேZ_4ulp|W&Ly.$x8P8!]`N{ $H޷ʭYǎS5޵]\Ax$K(@ȩX( Yg#~Bcs:9hc -I^:j2EЃH"{B OZlwKCK =TFr|7's ke:[8%o0T0ժa;lx))1qᢺx ~: F{޺JFo~cR#ⴒluuxjT)f\hLWmix@"?V٧4%4Mx_zYǎS5޲UzYrx%>y^8Rr~DnqOsRTjo}k}ç @ lHqțp48C_G0T@EJ8mX4P4! uZ aShu76m8kYP)BJQLyO'+28>^sRWr L!{k9Q3iIvUzmen_8xXPPbbېc>UP@`$՗,XgGO8_wbLMf "<.fkV*]V3sFS1Rn9E+ NJ3SdOWBHiYׇsiھs浚ީh/}iX BS1YSy+gOƀ >%(^yNSʫdE.z@Rݾv@ _\ 7ƌyCf5G/N8*P6!hNj[z3wWYRB%Bf &b.' >Ms!*fߝE ,sy.c>&2qqxrޓx ʑ/#KFP(CA6]5?P37( > {Ql f뭩M{B#kIv+ܓQіlw*@S^I^^󿳾LCJ{x2ЗX#"һ`}dP3![r:6|}xs¸󌩮ԕ[*>`>-|5rNy]?VZϫ25#RT7ޜ`k?C89̘ǚM[iWL7]mEy-:~fa:g cz 1dB-ukÞweMw.9\O6O[T"X tgw<ήYIJ5N0Gupޣ˿˂ףxUPgXr=Q/#n ~ǫ=Z6P3!wܝ2*5OӍnk{dLԼKg`0] Rf0XrP$l BW&)/' 9E|P NHJsudXjhʬ)S jOɘeyiˁgOG.S$ R4`y:foNobO~HE=\0SLA6 %k +Ѓ+Y)^O:a 7r vmOL3SzƹV#Zu:o u y~UH w$V3RSἂf۸Jy.kt,0g]@v_.\>ʤrwIm]-hVfDbn\]}M2EFcI#k^y>2J%VJ߭JNA/jdg9V @ݛʅY}B]a,Ty{r^y i"`z05G]Kb2TϵvO X6G]QK%e>P4!oܥq֛cnK6Υ,ׯq>v:ٛݯwD/y9!;M .,PHTӧu DsrN12qKbt;pI)+-5(tP2! η\WjlDΑyn4\5\mXA4aזDjMpҢDH/cRgݱYQצc8\'/YG>4AYEN%Eve̓x=7P~S\ߤ'+#=Su>/RW&A]o|4({_~" =XxgV'PTPoU6 fF q}Ny zh^~֠S^ }Γ+ڽ|S.E52Uu?48Sz89)_wcȈ :1,y\Oa)5KR_sDR01 @bx{Jr_f!P/!U[ǎ>7TfN~Ÿk7<Ց>:kдj=hG 9CR!.օ3_yy_}szEojdGBM9Xj%q1k3irpTz|gg%vtLyVaSU=ʾ|iJ+Rz[T!;_[x_wj*N~6)L3y$l)8 s4cyB\YGgy`_ F mؔr$g`S@J u#`6ȣV|`@8cܗP2!)Oܜ![xyĪ!y)Yk8%O5Wjh&]b%dP{"Hwn:jMP ݼ^憔 ⷲg4w _AQ7a8q~kR0)Vt &[@5U`jnGl.|;ɃRO<@Kx:R(=0uhiNis0t_6R"؍8rgvYl|u'>h!y+w8_%186kŽ\! A|WP4ek%p#y )T 0O2W5yb:pȃo-,.5yXD0垧؂uo67c{)@_쇲<7i _@Nk6MvG.Hv~5}_f$DO .hJ|OYw įs]b,zL]b @K!kΊAUGs͂v,}H} <q!Mqx֦bkКt"?9k&V5R5l]uw 9 p}Gvu5>)-6_CڴI " @8P(!@V,F㬫Up*q~1PNuL (쯯䬰MTܱjt ly)!|;P̩w蓖'^}$`Pe}t[3#T}꼂di'-2{E0Ҍk]q]B[ #R/ߡO!`|q P+!VZRȫ7\V$]"^RmPf ϡ( h=(_-0s0fg\$%uΖg^L;0lT :j+%(T Œ>R(蕧C .]hT'^yIy:fvhzO :oSwKzqHiTE>aFِ#* 76ș[7L _2H.6w4 93ġ [CʲZoK7\V$]"^RmҸ6 `s(G"v"pP5!sZ)x+#u-βeyXRWn?ј"7'd`\Cò)D -G PjߏG b5R4j86V8 X1.E6I[„r~K謈]d#csDb4̓8KOݎr,?䯲ʺc$yRPIy$#Di`s/c(&ړH/4r!;t' T$hS=opu]=;%@@'F|ׇ"<'y3>qIhBXX™׭x75+:=nguW5x0y7Zꉰ TX(nBZ>/ N,XYt^WyU 0@sGG)P9?!R&:h_5Z5Zekr?@ZLIrkmsnH:YT3d \0eF:Ix8OɈD)?@\e1;c> |DO{!4 PZS_tz,3  $Nh'\d(56Q%N"- &[5z0xSSRKH/.gYx{ qSKyߌ@lfu+R4 +2LBeUsUqLnT㛿hSj~[]l0&mclܵR1tHrͭ\M2ݯ~K\28 |aǘ lU c\ou.j}ƞ@7h/@ =>_m:ވʡc}P0?!ܠ;ǝ(겤ʕ2IR:ք_Zw99[7.Q(>@BuT5TP3P 1O$Nr^:8w`H/aQ bkZa3lbN~ Nb.5RfJͮBev"0W gIxSuD|wdH` x %q%|VT[52IR:ր}s8koȚtt}x-9K;qy;j7?6KBd~&X -\773#r;PCE>ǃ,:ިA| p7gL:P2![eJ yќekw*KxZ;fY"3vZwJ@RlpGCYyo2YRL3X$uS,%{wj=*R!}v/g@LH蔄wNHG]B c2ut{.ѯx!2VW c93[(-ĪCx Eѽ~Ҷnoy gKe/ Tm@ bJf&ziP1Ɉ'VdFCv{^vG^0J513e@ńfM*P4¤+ d$ܿo]gu[NiP @(F)@} wۓl.g#s^kZz*u{tC2S #p, 4`)F:ׯ(0M6ܹ|,xIz` JExiA,Vd뭄`m8KiM:xv֌9}Opt(jI)fP/![eJPz}峌{zv[CӏEZ>.C0m(qMWgfXqϰyykؑxd8= zrMVȑs%҅fHƪf!W5L7::ps*9 QI Bww*2F!kOeP,IFp%%q_>^\eE]qQV_e,u*o(aBg""pŭk$P5tgm0HSĘ%uX|\+~q̅Ȯ R@U/ NR%&\A=DEŷ{Gd;+P1!+[aF&x^ӄ}Vso)Z8 Vi3qFGl<aދ.Lfc2g\q8,r;q9LvSYj<,(×0g(u=6ҶÆZݞ6UwPۄjh{zy9@E'xAL-?o5 / FǏ8IjU֫+|qJwUx$ˆƏ>/dߦ7|yJf=[./n(j Hh\RU.P@7+܊`'w2Cq\@47T<>OBX @*SZ.PN LE"ǖcTsfw%Y̖~^e:5oڕqs Iu{OkR7&NhN(U E2Ӝ6ģ*haS+#qc1OonVA*Bx;YdUpN]*0#" =4F+ˈClI[ m9`kc,k&NmdʚLtǸPS!PxTҸ}a[& Xvp=8=FvH/ٷ79׌oJŰo)b*D͔X6vvx8U^e'}ǿ' )!ps)$9]DFB:;rܪ0-9?"\ޑ*3D'Fiu:ڗcY2(XS&DBKP3˨;]_E| 4K0T6LPFZ2)- 9:|?+43@8oH(hʴ9# pvc5Y9-'#Y̷sĕËaR\P(!{YP#+^ԼW\ED*67\eatlNCDHQ3RQmd87CTl.τ߉خ1?TLȾEnәyEuH(i{qM: \zܷAm"߅t뻻PR4qʥhkz_z,"O  J$xh ?cx_hOӍR5]*9ж+\*s5HB8s3%nsTf9_ z DGϓkZ/T)Isf#P4!{ܘn 65s>7}N6{̙AI6uxhR33AM_cg Rc,3EA9STyL/xRIc&Sy#tJ@(\p CA cX'}=ȇkhsmYXm>5j,bXD?ʾ} J5|al/% }ڢ1#ҶUm º,65o2fq$DJwvש;UWB4c- ' UioӐ$$=]m]䉭s?]/`:X߅pi-Iv1r gd|҈f`g߀}cZ R]35دP*!׸r$BUM%JIsF^?Pmv}aЦj ׆ FH/w&~j%A󘂾M`K$ O=q6D5A }-M_Q ckn!\UR1ʋe(*DB*Ԋ7@f#'w$b4KCm=FpY-hPUX뻉RTT8o>9 v˦P hN; XNL(GX;cap.i~a)B-:i+8P0!?t%2"€(S*d.w+뇋7oӸ#ЉOLHd^Z&*٘k{qMDzc!训^ltLTq\zAdRy{4>1]Cc^E^hl!i漄 '8*Gs vv4 aצفTM|D=5]:Zl_̶w@%˫mt4ev#uJ(Dj\&M_eqq^If9ym+xN *˃jN|́GDVNPX1F X_\ AnEǑ Հ xh4-iײP8!$%*=9*\x3b|~?}[A:"Q(7ȐbH3 6Kmv߭r d|Ba07eX \&L1uM?f\IxoPb6ŽX#4 `{Zqty1VӤ%ņ][s{HʜX,٠ᾜl$^lz/X×-\HXѩ-Uz0V^ VLKƦ{Jd7#-YPRA4WMμqߕVZXɑ(Ʃ9{/_xJεpJȩ( HJGrap[%ɇǠ@hk & XyOsK%SB 0/p Z! q~cm,~@![1i8P8!!,%1XDFu9뛮uϵ_~vmLί~hZ84=A\4Eigw>'-K ;g)*$wlfG"AtF @y},suWw>P܎$ԗn7Aq(y7c0 &qXW"/o^ yxPŷ0q._ + M\]RLTKaA0dfi IuΚ|s- _ˉp\^2.C%$dH&ţ]SvGA$O Sf1 s(@ QSͽ* m H^ _0/1ϕQJ5d6t~R_P6!QXy; Hep:UqR_7bz_lgCK 痭V{JƔ;hpB}kHHUgR,*}MWtnf̉:` 1A ,b9qѼ,"HP |nz)rێ/o$Njq;`͊ߢw((4o vl3Ȁ$H)!B#xܺqR_7bz_oN)m+BQ V9tOQ)a#@J\-}h+Jw?4*PT7Hߡkat"uEUz]:p` S_'+"wl ې%?(/ &;P4! o\ls##8Do^n|^^Ieg w9}]ymm3~n>E<~× b@o%9=`#mKtz:v(<cp^'I/!&gyڕYv]Kz K}8C™NpFӥ-pbhȲa748~a]!|Nj+p.̷7n r@-n̪6g,O'^-P3!^O!L1!)=2|zpJ\nMr'D4/ULQQP$ÖhQDuMsFl-N.3I$걑kɣ+,.o t_!;IzGRmJ0,`^PxwLNrtl'n/ԝ0 b?9P|ǛbQ5fN8&|i#gUkpUsH)6dJm?mBI 3HOKʶk^Ttng{{P^8 ¸^bA4dV_2LR,P5_!gO[!H7HHӎx.2RoZz?W3`X{Q60c)ّG4q3xLBd휉BQπQ- H8Z[+(TV`0L $Eݣ;я6H`Eu8ÓeF8E0^;φV]4OLb1hoѭ[ [9JfABgPd2T4ZQo8ڃFtze+pi?qSWv|49 !ʂ_7 eRGA6@1ۚqm׷y/X]KdU^ H!@Ql-+ RbE,h8P6!sf|O[a6)fQwϏ ^k}q+_=N vJ R:]9uiXe$7T!zhJQ:ܹ眆Y 5!L@)-M(1uts@ϟ|^-Ub=| f`aW=ocJP")E{//+ϊH^?̕ƷCUH쐟0~g.5|(ԴԷͥ<vK7dk62Eޅ>s]Gfg KiBy@+ڄܤ@iC2v[X7:h gSPwUg~g8_.CP&! _QPDdБ$= FkuyU}nUc¦E^w 6YXpTp\[P )krzRB։H s8*~p kcBnTHVZb[Fq:q=՚`n mthj`HDlPjW󬹻nJ% ~?C!Hs|h 3m-0q7:F7Z1geb1Y;dͶeUS6#x֩d} y ?/@[ǗԂBXkGP6!,H3%qyb]]IJ]Ps`8ۧpw<(ȖTb@ i{xspz1D1\foծD;ٽ FK%P㲤 UBk 3 `Aj/()FXCigC123.E$h 1Zk.d%elg_4m.ÌDDY8iDғQvoeUZuHK }Km|F[r.Ft e ͊/=yVĺ/D0 r$mr~}ΑKOI8Ff$? KNpǺ;(0fϹEb(GLuz(*#6HlB[*>0`oǕ#GP,!+T5J)cvoRW+:Ke%]l|)N QހB#<5S?f\,{?%#sK8;{1R"P9H%v鍄Ĩ΁@% oqus 1ec"[/0*1[pA[ t5;hhT}UD/ 5.LuF^4TWP2>PCe`dU1ɍV8dUμiKe%]}X5 T- `8r$%$ܤJk&r5474Lfn)̖ :^h_)G~@3œ4PN!LU MhUΛWٽ7<:ߋ?ۋ=9櫏"3m"JΖw+ul^a<04$"&z`YMT,6E.yM-`| A~ѴoBq})Zc'bRpZmlZc+?R},6▟ #؃S(9]OyOԧ]cTdwMqf򍣼<>52>olWޮKKs~u%|sr|9`/ڃO 4HQ`_x{d lP@D 勉{O}' 7GSr7?0Ska [#;b :P8'gE*#t~ނ6w]$2p BrX\SDg5׿;+TxV0Ʀ<xu O'Hb:ڪN"*}C\z&~K>QP)_!{6L$+C1ww="&\R&TUנÿ_];,wx X%~ErXrqJ)Aݲ B́ڄZqA Zw}Nb 4]9GX $Z70ՒcԬD@a֏H937_jF#[/s}<|ӯ$^f QMB͓^j;2J7:?"vZSH | 5H_ZR?okO]DP+?!5e(o]zxL\S%˧7N i"U(m0&Zdg=ŹdggIޤDQ5k5""(bqS]lxVOLD6dTkdނ⥕r4k uƀ%~v d?woTfq3H’MNN.Q,ќRcJ_8̟8GqиPTK{yNWbaM ՗$1 dA W"ur_*ˍUL34ܶ3s}f+s/n*_϶~ B6~c (X Tځ@(R@ 7p(XʅQ݉mLP2!W[X+AMNu7ꨙR*Mw*ʩ\D$TI"˄t{@z(m~*5mf'2)݊J1ƛgXp$]B,4?V#+u@qU,Ԫ՟XBw#uT/Rsq6u.oZ@tSc˕_Dx8@[% kM*Zumֆ%2ȍDWUDnRoP,CO<~ ʌ8DgF1vGR|Y*(~۟slGzuCĉtIS\s||W]q)MϩxSv) P8]!|hzp b_z6k z1j[n,@<P8EIܹFP0!R[ BBhuJkd+ۏwn QU:|d0![LbJ N7 3(E QoI3s+2KJ;7ܳW wQtWJ#c3cy_/dWA]s9ˑk!'K]VfƔ 6t_=_P2':.hMTj-g)[U#srWk隫d+ۏwAgxohfXcxo0_C=,+43nIιN󡀞ZEbus7pO&9 J8>{hxbmhP2!{X42dz*eoϞlH3G؇ިa'NO==ħ>=D:ք@#Ɇjk'mh֔37BBl20}Bi[e`n5 gw%-0ݹT A@,gܾKZw4lݻ4p2Xqxg+)*1B,wcP7*2USˮ7ߟ=~1 #|LAͺ@A/f Oɷ6o;4½.,FrAx`8}*GqǺ×@+<5FH)E=k;HGfP4?!^Xp4qE]^ޤkrqp63^T{(F)\_3cU-סK)fCI%*QyUre iQ21"Hu\ڢʪ{3p4S]4t]kg04x,S%f+,kWxDJ3Lj$7)e_7pD%{#[Y*(e5=ybJIpJĽ/5@8\#AZ@mg`A0ؾG̊x}jm3g8ɜPٝ(ȳ1y}vsX9B˯tBZp\/Y NC=*P/._?# G O)6z0Uc?P6 +ZC) gp>*qYkU;no<^bJfF4{Xf` s/?Pꮃ@w7iw\S 18 F%b~&b5կ .VC}^Q#?(/Dz':;l0܄<; *N첝kJP9_ LEf*lLgM\ߜ~~Aۻߛ{þ\esbnt,6/]I6^sHl24Am0|B)*9; LF~Ez5^NDt#V -D嶭F v"F ;=ѨL4\0wѴ[R+ZKg!^!I 3#SZBucAӾ,S{`44|$TcРt( eЈ۾5u]GU:jUNuky/̤م$s=F* `| BS"Y]-jO}38PB!LxpP*m,٫jlyܬ+Z玲Ԅ'9cF,NDh쩚K˂[>p-N\9k:y*ylQZV5ʠLTs aaWF~&EFm |YO(L"q 0 Ymp q:` %u}sƵJ#-HOy?Hc&vɣ]iO] ivHb9yVBek\T1jcbnP'G#"b⟁}K+!s>E؁' 3٫㚆p8{;:KDjC@P*?!{PL#`.)ʲVUJkL7O l9sV;%v.j4)QrAwql+ؖGp 9Hr ߏw$fbpcdjf*ŶrÃj{dIC OwfU 9ފ+B 3SOH|

Ӷ߇N4W*-0> `"|CX~پGh~/3}#Lu ;4io%]KajH\50u2WK@m3slfev Dy`9ߗ{gzP/P/!TYZ< A^x2SSq\ouU.42'q&!!@{2yAE˜J0#̬*ʠDUh.p,%Y7i)eG0EU(HT۰rꘛ^Q5e2ڒqxᕴbD/c*;|9ǷATA ӿ" ' TUVP/x(CUR8fidži}Z_Wu"? +rWkcQ3;^x2SSq\ouU.42'X/kwSذX6j$GO&`'@0ó +GP3!S&,LPf3੸kW Υ4vA(f2h.?=!AYY1@)}  8 q u̕w O=|1@T|`"bI*w@2j:sy O}vE?U#08p-Io8G/CHaW^}$W+IP5] ܄h.5gTї쬦7/qtc,0_C_@E)BjnSc:^ua a?Q*|Od*[ҋa ZQݗ7G?Ü7@ RBѽ)mv"]OӏD.duR$ k/r)z=TBYSDP8VdR%쓠k],VyGbUߜ<`6Ji|svF+KU=F` C$ p[vP2!|o 2Bm|zߞe_֫ۺJ/r۹.oU&M I\'&qmh h `,NPoh2 K ΄R^KmUǤCG:*VGW WV ly: 6VOH_0f.,#8iw/i^vF~h.(RЕbp ,2#><-lCJ ۥQZ<ʹ/+][wWIE[w%_j/7xƥ4ӍUkhd%"킫D>]na d,<-j-q+Oz' (Vbto>dHH1v(aK`.0EπP3![&Fm|[^%a+^\HFCeq+d1{:qe(WI)lXl >O1LYɇ@" (uq_.Uϼ )]MJ75OZ@\(7_W`=Q2i'AƔg x83xd\R%P6!w[t~{vtnU]eqC%`}!]kq!cq8Ru4窺cУW?nާiʬ ^yX[_&1q5447'49T-+ پ* U`H\Puya8'Ȗ{ЏjpiϞލ[q,.¥ݎܔ}4OՋۺ`snZe\qa<`t\ RWVR`a@Ԩ|`)X-31VG~ݑsP B|OҎ*kTxӾR+R\IDrT2ЈJ OJ#D( Pg+Yެ.P3_!ۦ&|}|dojX_$~PI Pc *NA}obE ]/ˆr :5礍/#xƳmWF l+yX%m`.pC a&P/_$#ϻq 9A.t貯We9#u;^y&l,VW+FNTAxE3(BmO~x}w5RR⯌T?44nx@e$Q;0̊0=ewD|(&K֫}nXV WreXC¢E1N P +pf C<@fh{X%ih l7pP1!^ Bmw^+cT$Y]ԭ](GŪpbkvC=}`FI,|B :}E'.N  k{w7bۆ3On:rv1OxV,Kn5o;R]KZ%kG7jD^j;tZd럯_>?OuT.Vn1ckH6\׀Ǥ&88DDᡛ6 Cy` E+vLRb($xeJBzP1!_GM w __Ϸ2b'<{siϵOL28lrv3 ȭΜ'9(m 6PAͥ:bRa fRVf o&(O~71m̌ntqɥuK^Zۛ6$qEϢDiu{VDv tP%pyF#p<3val SZVDpjslɻ{Jx_7;J]ͧ:!`?iT\7cD6 ,4sCJKi@ϙ:kJB&.r29JiO sYMo\$y*`vUo;|j*'_"A\P1?!ͿQ[ Y ֿOg WR^3քaNK68&.w?'Yϭ=lc#{ ߩѸcuo++wb:W:/UtWrv:uInKe''D S\nð)z^^ 2:t]c% xwm!M[_^N>ooP]Usמx\#L3l(}i٨yR~fmi4XDQ;gjk@JS"5ӛǢ1ٮXTiHZVѹK$4+{GO/J p#49d?POL╢V8P1!/P -%OIu*117gc@ՌB*l]i \:3 A/ R [O(%Y:N Ӑ{?M9qF3KҎ+J[JObr&=U뛓/^MeZQߵQz`0Za0wHy̢7;-43^)ϗG?7Wd_P^Rl,A>9Ո&2DP1!+ӮO\\e! $x<9P@HN"T1irn${ӷ<%#rB$2Qχ A! ԸP9_oh֏~;R~~}g35}eQ2`@#_ 95pai &@z)rq#21jOql9 _%`q 9æӭ҈]H>Z܁.W 8ъ8P(!{hA S2+Ҫ]I)o/ ꮈwK屿="h>쁪{"4*_.̐tjVZU݈+۞.3Hi_]R%d}^=Z?bJU%#oa)*Ei\"<^e o],P:%"ߣ%59N˭⿭7ES' Q:T ";^9ԯ>5ѻ!RQλ@0sE䯼B P#h1$e%(Hƚs8P6?![`a!\("ʫ:u9]z"2شOdJcjCз>Ș*Cb3*ƽBjUB8Z {< qW@fHuDZlZd*Ndy{+3iv+::ݵJ}PbRY$Q_]^$j{״7b[J6除Mq7;a{ $pjQc3X*N}1:@jn/:.$"DB(rΪVrq܋q9:``>ԁT/!'Ѫz\k1yȮN6na#w*  kKT ,`F 9L) cy@T̔LpeO]P7! [H0 ;{f=W|e\u*Ui҄v_cOs.0lC^m1Oq#ed\aŚw8>K/kOG3\\* rbhF YZcbx-"V\PhQ,,RcnyG|-+;B \ai6Xu̺,nf5ǃxa01R9([\lEDܩ;}~g]e%ԪU\OJ+ĘIY8 DX(aCB5XbkeU6(\7sڬ#u%T-3%׷y=n~R0z;ӹg/ #::[X&ax* \hp4H"0Ntqxfc[Gw@\(0h ,}~%ɇKY~!ljwlݴ-uT}݌o_&<` ʫ$ř^yvPn:/i\ˣxNxHȐyGL ;a\{q.8n@uY2?g0Vw>0w.ۊ4"nk˥]\بߝ5`u留_^M@I}4kEKtj4uF%+"bM2:Ws5Wz>saO/V)tE8bAVP`_j%Y0 hpZȿ}$R%{@[MP:}lg ^F -009@g衖4)(MRZ|NuWUչ.Vϊs$P"9tsQ1 VdKNG"S+N!P5!ۤPI"BoO{5]nO3n Ttq"+>1Z@4(W&@!mS W6 ƘuSYRۂޕ0ǹt=POȽ2u 1eg`c]TZuIaTxڸVbV( 4F159>Rx,Aꑰi@p" _X1qjc6$ʡ4%Os񨮷VW EIWSP_0KEhN}ъSjƜċp C[ ')ほ9D2bOǼs3N!<>[iπs|` zU#YGevFY٦P/!e !4C}2XO(6Fa3)L|tYa+n5`F* vTuu1ߏ@Sj'0'a6*H4ԯݭH OOdsrS qD@2+zWUh0èZ?6f' 25pP-!+r[&#t\^I*Խwy/0c#qW%9:Ϳ1TB|܍8RW̵u&5zeSƚS_@'"ţaf'xsP@b>Ds@9p(-Ȼ5QҦZ٭u렣z:<Y),%Žãxr0ͣB׬t6=XaTwd2}goJ3y %xwW!w6nE CUtwh`qOG94F]"uu}]('.Esjëۤg19TKFɠL~},arXVQX.Z:Djg*fV?\AvuϜQ2PuҏTzuf.XSQtb~E?/Lb~ZHt&wSzFh۰v8ك%YNip\h5fmd6 u 4XT(U݌v>u<_{52:^-sùܒ9riV6Se ?k.ۨށh+$Id oojv-\W!PR3!/9LA%ǟA/̜rz'?[g7j*ckv^m*>k?_~6w\xa~  [ϓ+̸@P6 b!LvƧӭmQRRe*:xA0pW\pvOeſJwn p퐃 II('*pWWr ()Uk#ɡM gVfj+eG[Mc8Q{v/G[r=+Hʬ UYXř QtZoqX3eóM^OB2m8joRfҡV*|BFpiFu y]qcldv@ɻ s:׶>`%[k DMb@fCY,8z]S7Eⷰ=gX:{@?: ~:BEmL22yOrS7X7Iޭ`w@ٸyt]H?2uθP*!UQ`IDRe~SR/_. BUCڮ[9kځk#tyZ]i2랚*XTr![@(m+d Cs`3RWh.&=` PL>Q{Rڍ\S17V۞#>L&ڕ"ͤ1;*U1btJ*d)MLXBfI|<_'OB*B^8W;-Ӌ^W1sPk CnnxRÛdOfڋ3CCwֳhʌX /d"xP,!ϝSL1~art!u ]\ S1I!ώ!"v8|fK{ .V=@PA^OZ'9 4Y[dg"8n%ձJ+Eq_Oϝ݉/TiB3?S~%m Ox2\yPNseo@Jp~r8+;3 LQ!]ECW#AzE/Ïbp%8"~}}yL<(8  FC8MZ'4/Q2Xg<Bp[e|xy G9P0!RL)̯lE&Xj%Lκ~ fuwsf3ljK^ye]nEJ2R{=T9SCI! rT'b*$u0º @NJyV4fU(KKnz -J!>22} 0c 9K0b)£=|z[ 2U+V?K=t7߼L*>K+{;7Yj@yUYW-R*Zjm7[.]>G{n٨){O`8SU!#M"8Rհbpz-E>TYP)!+Tʢ!|*J"2}n$Q[m(g(= u@@TI ȃȊDg?/wٙ'h]4Kݷb"6:.3&7Qhq` J"\2S=C~P7د Ow rC9Ώt sN4vKw/㹹ZoIRbF]կ |<0=CuKvGU1 rDV jgb5IZ2VyA Ƣt]m!/*kzRZQp;xkXɃP?_!L6 Ӯ&yeXjlë ~kZyj5~'Q.7ƃYU*X[1\,H$1--"ǗsۖeS"" 0g9ҳh֯%a5D' A([! \AЬ#Kt0D<8#HllJ:ʘ7Z;+l`FJ[M *Tc ›x_{宀}30#Q_ӛjC@!wWI˳<1+P+!{_VC,9 2DuXTR}. ~N\3R283r!D.Gcp)(1N[t)щҺRuU h+  :I P檽XL3-3H[ckxn5 =/~+(8n]sc"y1n/)*<,@^sb$f] !D\5׋KZuc|+͈ɓD +=toj%3`("8P3! ?RdvJ"5eZAsǟ㥐#t4b2ueB6Ь> D^w;݈Z*&4DсFvW͘>"lm/WWArtZB)N@ncp߻Jc>XPfE~F=`^ э,tn즟"gYwԭ)[l +_7"C>Q)'m _ZyMx ݜP3!{QYF6kwΖ]Usº[̐ϖl&5*h3@b ~*N.8qS}S= K<խfSxG=?cdeܶi^黝>oZOYN£9(N-@ tR^\s1P2!mOв3FSzei*״gPw׽9<3Τ8A`"t/  33"./yWy)%I:mHq:Ő:XeĀe¶NF]@_ͣRnLb1E)/2@RwH~/tmTo9}"2zn`T1?l:vhW#s J5a"GGƨOM>@> pWF8Y B&5ZTWV?N*swt pg,oya8ܐ 'T +$IAHHBҽ?<~f*L/ Kg+W2_W lP&! PSQdAF@tTpyx_80R3D@+%G4\ǂ1@p6 0.\[47'rSrӧNUC#iĘEo{7{zֵSL /$7ztv`ڦw"UBnֹZ󪙮{IZzoQz1u \* ї+4t?mm}-xm< 1.= 3ezHv*|zw`l,J q EZ f9#;ŊdeԺ݊235P j*Mܻ^>8@=%+ nPi8xP,!XC#*Ѯ搵MNj˕ a<`@Sb9ύ# DDh;P^4#Ib Nwv4 3QMs;eXfEḛUm(2f抡l qU~zu`l*ҴQ~3Vo^+XX)=my-<(8X#Sv˟uζP * SM ,a-S˅%H`ĺWX1 ed8Ԇ| jHl! iUյϚB7//.T&Oow4;pA{ѯ e| | ` zs&cP5!?[`t i{w{O;QyynUWA//Os ׆\0Bbt⁞qiiKL7ܫkkcQQ6ʍu8~$vy0]s'.n jի0><ĭaR"={t{Th4ƈل`͈`Iɏ Ys d`#*̋}}Dg@($ׅUǟ pQ)Y/?=]<\ +[J i:lRFu)]U}Nou4*\2m礋>.=I3зk,5} f9̮-S44DmFL;Uo\}Z K.'Z__֤1 ASº‡[&^nu4h<=+De^"j֢-uAptt8ayohZ?Y|8 81VT:B3\3z\Tb[%(_*3t.g\2SEȆsn[D 'y%15؃WSKlNCQz;$̀7!]؂֜Y02Wb/R>d6a@pP1?! (FNމs^yFo >h#cyy~mc!4RY ^ݮBΔ2'f*G3p~(5>GótIQ,Vu%kvt|˥/:nCgtP^Ƽ~}= nNG>.C'o z_SWi(\ j*q(IU23Mj!_ԍeH&+US:]]9Pҹ<\Z($q!7jͼŐU:?%vAAg~>_l0tP=3%?kFWSd꿎VP0!+(6Ρ58k7:J-RsWXŊIM<^3ƂiU96Z ,4")*K@%qOP%]Uev &Y-(6a̯ՅO#9ha%sDzZS>.EV}33Z;͒x{߽1 \ v״'ضIDnqUh%FI˩O9?}3ݻ2cPHqFq C5ɫr5ν|o4= i-hDDN8oh{|URw@w^*ަT\dĕ'n( 84  ){oa/Jj{ }0_-&PC!LϬkA,M%6k7[rн΃C}ˇ嫩ZK]. JK8b_:kScY <42/v#Fo:ss`Sq6 ǃx[H 5)tE1xc8cAL?`Pq}_jh%.[(htAEDJAPmAXc" zQf:pFcR`:f<1c7~oøqB8;P Bv.h *^|$̊[>Shrㄢ ~tV� `~ US>X=3jX_>|/B`;n|s$]•k@zgfWJ9ZyL+3?2w]>=3M | ݲ]P9!~[!ƫ|Se̔M+}OMjL׭w 0BI@SU(8'*ሎ_@)!5 W[j4,.ߨp ls =5*]] I2 )M_H1?"LY0#  ؗv*ĜE[(@3y"Ԁ $ Z<4ge .~pԙ$︕ȪƷ|q- G{a0yE\IN,*P4!Zj D1 {g;?uߜdW D{ _$+g釀1Uo(tuMq IOzE3$ {57=7mnR_ 6_IS=@$+ wPc$r^ 7zk[E_(BWn,ڞj!#/_CU[hoϺ>("^^k &fe8js <6бuUt3V{8N}CKO?7Q CTP0![tG &AM]L9b@e]h.oT缫nOẺc=.UB.e Im'5ݷN2ז_5~J|8TA:a m39m:d]'j w !&8*4՜ՌaNHV c.0\gG]߾5pL`J(o%8i! x&qǪ,HlyZz/ܳZ \"3PiB)yl`T0 vtuhC:`z E5zJpb-[.NA pb\ԸׇP1!4da_^Uί2쨪j'\Ʒ_=YmB.<(oA9ܺXj@)jk'bjlfW)ʏGXlXǞ\0oMW t;!eby۷rS.-nj~2ښi93Nq[N^gm:R_u5lN`MB, P[kuW׽uU2쨪j'\Ʒ_r<1)XBw1[+]~|+qd@1Bl+he j/VMޖGZoz)_%fNh'fc< 0 H?,URT:P1!k۠TIZwwUlPկ?Ɏs*--T>R4MO0pϴ!u, BpBdp1iZ~~+KeS}wא54IE<ҬY jεjfw~UuR*KEv*Js[n_<D4'/J@GEgíx`N(TNVuTvIջƽ~|q[52T%$yk0)S@[.xj =% l7՞OSyIUYfW:͗`LY4O"_w92Dh~J FIGN?)@jO%KM(OЀ=n Y\P4![4t# ksrɻ*̵Jk}Ss[1N՛(0q:E{5͗M7u毎MJD}P# yu "zJ` 1BI9~"=j^ƭ A%+-^AM0noYɒ2*T|H+KD5uԴgE5"'tFƧHa9" [4H2~\ N:t ۊqzuA.E.q?c]QX3v:.bb DfLz̰iP0!+[hrC urd^kz+SѦd 2H6>OCYAyUƝYlz['f'x(,@@:Ђފ\P17v(R2?ez cqY4)>`&ES2u~D/OU`gO ? <Eؚf7;tPt8x_ͬ46J}u]V+OZ65dcnFR,jݴcuIO矶2_).Q6QT&?jtTP[CƆ՝3sf%6rvҌqlĎixcX{do뜈P[P L yF? w~gP2*v619{hG+ߓ3?ki}k|u^:\$P?~8 \2)PCu>da/JbSMJxX UѰ-K-3’!a[}%IQ\}3 *4gh<`5jL|Dz/DoٔyY@I[ .<yق>#f1VP(!{Q S֥olkrIURw?סv,!o"[BAYeՔ& _fh7/VgJ m9IY|SY ,吮-xab=~P>*;VúO;딴aP !''Kt\5AUeo&Rz "G_]s%+V wwwXPWp ֹ}bnI*2*UXM_I0 p~朵B^eth/x*pP5![!re!WȯoR\Vs uW  A#(P$,w+f&iѺm]; (qN FFgչ#-g޼AϏd+fŸAؚ_eu쪅ƌ4ݳ43DаE"&F(4R6B fZpn ` b&nJS 2+aԅI` x@&g?9^_k6sm<)6WfZG%'ȗC[Į$ْfԾa\Zїof5^_LK#\7hfRۅK>߶e\r|xZh/y&ߞ;7WA[|=02+]` tL\6}AKBwL>3̏ѾWzF>iȜ eh]Rk,&xt(5FJ;%_á:0XdƼLz>IjKEcG.5hsrCMU PցK>lm5my>uzgKSy=(Kb,E mN?=t|4 ksŔlhP)?!{e#{ᕗˬj{Լ}&eyZD (R2K{:JYec(Tzu1tr"^08xQ\<4$Ej}/dRnpD#%CLtgz˶%h'˩Ba AS;1m ,Xd`'%{0>am l,_wwpPSOROXk|25YyuR{OO]0jz@r7@tpP7![alZFQ}u{d4ܩJ%%a'GLina5ҠzYzt6aykED?e$a0V!Bs!Dӹ 4n f ޜ}FQXR18H! w-y}N^ z4' k`cS4T,? ԝeN il bXc41Qz4 @ u0!58ILX)a=U]܂j$?v@8cJDTuPŏ>.=rܼ$ɦJU(xYUy>87;lZ+ r&JH32ovp b ykj?[3m9f>E9 ,1#1lDn #A dw9ǻ8I\T '.ȃ/5>>^cC= bⰇ;O b}x6`/F5]:sOT.7ZEs+ь3q>@c79g\x5` cs4|H쪱fx4e9_liR 4XE]o7y/pO>?ƘoG0w:# Fi EBq T)/XS 'Bj!IdN͙ h1 j0!3|\pmh[bSEV3P5!ِt]DkyzħMP]TVr[ǓrE35uȚE[E,eH3_"Ȕ]۴Mg <K4竚Ǖ=yH+"x2:XeZ}m,zD;b Õkn< DiAMNP79=PaF $?[ @| JDo=Т%jisc*^iQќK С^?fw38T7ƹ]TV o G80$pEu}Nu09X[ՁR=Xcsu@7Ư [wAcaYT,Pm#;H\;&q'=@:]GCr#L.ג,KՎ8(Uւ䗎xP2?!YTm.m]fJˮWs9z Gg^s|ZncsF&=C Lo 8'Cj-XA* ;x6`OG}y>v㿮ˋ$.sw1.ۄ֬ f)ϑk8诱DzsZЍW/e䚽 ~?JI;7A/SmȓkbS;V Mz6l.m'"pP2!45I#1 ۹8ܨn躔<&a |I yq,ܑZ/Nf (Š*1BD*` ڇ[`]v2&x ]}P@4>BtvYgp~ޤ x ,b-}YE]ߟeKwIzPpo0xxT3~FCadZkJtro*)DVIɵoNϢj9*PiRwyytrrö72_ݴ27afGPD4`33-9qVvqGkh@ Vb K/-]tWP6!1o%fԩOwoZsPRq5aRgd9k۱fQH(zL%g偡(Pe,GKsN 1lyH1kwh>em\Nh#ms1uՐLgPm.Quv9R@NybL ]Yv=eOd7k^VZާFLrxgOGC{ysGaM{! K&Ҟ@bz fo7JRZT+FzP/!Rܥq3k^*?n"^Y{8U\`ud_r!3w^@_]pF`wP2"G֨ȍĻNХ:WymtH/>2 b2‹ː0j S`@ ol .j~#A'8%|d/znLVJDO hv|'8-P&N2y~|3^/,Ԝq8Ff0 1AiMmMJŚa *dq 0)1a` lVx9D'ݩp0GK= 9/.[w>߽5!P,!Qܥ~w^eZKPaXnFPp)hηz-ur7]s;fdeƈɩ׮ȅ_D10 P ?r3J]cPK&=[ːq?D+.qɑf~cwJL J)MV CoT& 7|̺ūJ:s+Ǩk8L8{\NF9(ÕЛѡk_h ;}^ ޝkUS)ktX>OѮ;sz6pP,!R\jk}zySjUֱS/8EC)x]#NC.evw=HLOiS0ؿsXdT/g:6f_Kʎ&F֜+(@VVnCe%C} 0lt^?߷؀I6 Sv/NEUo<&\4?:%H³{ ɥG.veA%"(D!_S3~+[bɒ^qWPg`s2>CDYxÌBO>?0āZ,|$|^6|(:u[kR~0oˀP/_!ǟQܝđ̽ ~sP.VJa`n;tXcpRuo0 X d`Ǘ}^'+9m} p s :8x 51 1P2^kPsʚ !<5!m6h6>|?iUhGAV-]4 "GV<d+jLx]|~_}yg:u.W2*Uށ,/3w_u<8̅/C,@3GzLLd LLMH. y2J<+ܭ!`2@?H|ޛI0a x|% nQ3?(0P.!+ R\3 wL겵uO:DΊkRW| K.磊 _{J|>x?#CG8)oz  {Ar^" ڪ ]Τ\&Bh#z.H!}a(fW+zH˝/ \w{@T6j%ip<.V>mQ2Tk겵iv ܠ9d6,aCv1cT&Ñ{*qک;-SÙc,zg!EhH-S}2 mG|pPF!LnY[m鋛5ٛ;>|q<ǟku2n=cܑz {n7/sJ47"ޙ0l\xf+cW]3}:sU\ 6k/lgVѝB{z$#R? x^]U~aj+U.tk[®h.p491@`OO;'+=Հ>W!1/{Ş|3eo8յ7?>.H=Cݟ@$GmҴ^ 0pP)_!{ZY(!Bus~)zRҨZ#kWKhH 0L  l;xw`dAKʳhz ŨM96Rl'CR·0L]#N>mS&  `J@M'ca) ! [kV S/?.%\/uW sFdUF6FW '?DFٛKQEs\{USYQ+U'@)}.k:@#Q HSŖP0!\F" „2;yY %!57H^"N%ĢWS, 1ezkL![ŌZQYI]x[LZ!ܴ<{|$pu1$Cw[Ҳ& -]XN/_rؘ8R FlJV&?sRv5P_CSB&n ޿h\& ]}(mHRqFLSeF~g?^W,jJBkCGWW-~1EO~Vf5&8\(y@␼<7v 9 6%Te p߳mP5!]k5yۍZZ8O AS͓Dx@#4K 1f43+ UU/9.R%^6Sa%)BL05Af뗺Pe!~QȐ* X$;P:].T f/ +X YVf2yD?ek"Qc -OdkjdzחXR'/с3t=^!<<ӽK fpDAu{nfnԊ켙j DŧU?"v>3.Sȣ%E$GX4Wx0 .dTdXoaJ$@/"~ZꆐY  Y1R\P6!o[v Pp :\8q.5|f2YWJ\+%Q\ZYD:#yq'+\0ȗ3Y0jw)Gph<Tw^ggWg՞~پ/ndw}{^1P+Ɋ*Ge>?,:|󁟔3*Ɏ42aA{Y+,}V5pt\9+uҹ) zFu_J+H/ɝJK_f5bu$F:燍85^%Ң@-WR/58J4&S./ѫq֗sNf@c[Qp$/=x(veYg;vܾ G`\=,UmӀgWe 2epN@%bp;׃m +gHZM.@f+VS[_Iua]c|׎ <8Фr6"eP~gYvnTd뿏?_r Bo~8Y2ӌRc۵VZ{VK4%De Wu5NcJ`A]pݞ)oTzH/bK2@¢ jEq-YpEP2!]rSC$s3+SZ-ֿϬOmw4-@]( M9*3l"P.qD 4G>eȬ:(R9T+.FQ=ױEh{3JT']W0N.M%gUJ2 XpxV3Z97涀"VwTDq T&ISY|92ejJZ/G:dS+:#n5mW9\`M %~(5 T p W#q ]z$4ȭ8qOpۖ8jeTZ* Yu]ͰA#gϺ @Vcocg:ohAP3!#! (~o۾one_6"wwO4Ue aYf;Nʫ5a򆎀@+9VD"㤌Usy|oc|FCB8Q 8ݖڑ{_]3ڥqw/掎O$ 3V=520hwdtwXPeǠfp@8E0;VU0&]^us| ( Z NhTZ3E0B~ZEE` =jbœQfef(.ksZ #+XyU!>⸌ ݞ{+/GxȞoA.hh=g(EZng}~ jdP2_!o&ҵl^{xrJ)BIl-ɃC 4XTf?q{fLie -u6E>i`jŊ*lg= =e-fH gu Ps!qnЅSUgUYȫ&ߍC1MS2 ,#.2ѮDa\Fҵs/SwonIR9?rz39E~-{+gV=$E5炏E{Ns~ν?y90'rhݥY5Le/t4 n{SbYs{#\tA}cmjqGb\$ ]Fk֪L\Ϊo%:"}c7,x1lR! q:':b{0ګLq9)gy@?T\#i%7!C{ z\†_=j h[5o@֢#PdQbJ-CGfupG,>*QP4? Lmn6We<wkߟy:O+R|Y|H'Q9VI% 7@Ŗr:y\.{VZzy奭UYJ,cq:D #>vA9 Vt)_xghuS׃MpL`D AP99DŽY^wLIik?"㻐 ?Kb*vA2Zn|w*2 ,l;ZADBͯ++]qi˯G~ݾ+Rgw__%M韭DH?QSUj;-ev/n 0.0$I@;ɵU6m~0؉}J칃2[YOP4_ {Ƃ,Ge~w;-y&d8Нjzj8+]wX]2Ill,)UsR3)YJ 'hH`J! $6 {B8#K0zn$W+w!! .dJ*cnn$)O8Stx@d4Аt$2nfVK|J#L2Pl>ђ׿ MOw\;R zd= sؠiPE9\D.Lg:R1tDLc2@@xXʅbsNw@>oa yz̾+ԃSf?wNc>@U5q:8P'!THsC׊ %UI:@ fYUo!fEJ[@/PqSnH \U=}̂Ba 'MNѥ6_l+&AG`!HޫjRH_U:\ABKn%:&楿#4*ΐJD4-\]t^JkuҀn\%kCJ:Լ>J"Kss[WZ*7uX* }]4łtNrEX3 Li,Bh* )P0!)jS5RH'ރsN\?JHզ,Ɗpn>>m'AQlI WG~ġa^"EPP.kgWwJwi;}SA94V[PME %׮"|CDnᗸ3}USm?[>0sb\pl6&)o?{*p/yP,!+XDI <""TBߞ~ԷVyܺ}:5q0Id@T)`Ӓw fJ7B!:E !Dxġ+u S)ISNpdx_8s܀H:ǩCyE%uxb/3,Evh'|;bX8}?tC>ْLvP[Fo1*!H]o\?_ G\N㔜EAyɤCb"ѭt#ES8i:67RWtTIsD| & e2  0YnK[}a@䅛)4W\1[8PD!L6YM*ln^^fk+彳KUoN)zCLI*19L_NP_uYg5#9׉ 1pN`]6;ӡ`P@ܟ .шb<%tO]WR[Ct" R'b 8nˆ/H8zȩzeJve|u8o[Z3RXe͚:{E[0$ KUcaMn&/D䰝Tv79ISi; &vA`od)|]{`_X ?#_!Q84c e} Ma cq4 v;`5 ^w |iP+!{U fPuZ%(wr8[=p2G8MTڲ컽.lf^9٬ $?`WeT$Q}T+'~C谝xE.`B(}ԈópΠBaKIoK9Ye%ħ5!Ow|$D0v"*_tSU R6LZ#G-} hw|=XNtrvSL:Bf[z۬JoRou. Yk*?ꐨJݡy~XJݨL@}";UnWj`J  Լӄ^79vߓhZ;$@ս|QywwhzCHuvX c{k8^1B*XP4! Q q,iosRM9;\0k]L~4XMd7\.ob DH_E]TۢJQ`xP3!Q[[  !8Dn=\?s5Q&IJxҪ?|gE8TxZZz0>kj44fAL Өo@a/7 lFF֔p,=@oĹOֿY~'M/P|Gq߽мV>ûC[8XFW6UetgҤń_@"u~6!Eh%() GqO2rdU/?Т B`&벋DE~}CvGk_[#r\~hGBKAjIYe5T Q`O{jw? /BN C=ehH( @@'vY) n&P2!wR[G E!3(DkY{]Jbnx=_xiIyXmN=_0<`)>jtz/KYD1F,ڛЫpkjI PGT\ .52.ULtN G@?Ā.o@V J a_dhN+1ZI]2Pb) C^zwJbnx=_xi[=K8Pyٴ ffU"Y%&ֶ)@Qps]dJ;@`eߖx@MX*>$6}A i¡e@1ˢ8@ (ܥ8ƶSŞlP3?! /OIAH_O{K_AqPMXW?De1]t ec3q=ea#ɶ3@hcdaLLb H4T2®m,keF# hc]F(\|y ŏ ! 3}`Қ(k@˄/ B@Za*Ց,i:!3X|m|o|{/;/u, {L n>bY;Wu:·a8q3Y#yu,e@eW! ШxG$ۍ7 ˄ w-v AYr?>BY<P3_! Nخ&>yYWUuz{??FI:㦲hc@Y/.1O H #ܤ8ǴqUXS nV|ۜMI vUH  +ؑ}+@ՠ%fu0mѱ|qf[0z[e6$qav7qw?A/|ЍGdcIF9B#h|/UIϞk5uWZ窬g6?WޘEULQj,F59&A6hW!c`>;QDPkJ"NJ`̵~ilkbV4"M0k{wӊu<-!DzGa_Sd@$>(0&[HPJP+!O+d"7jwAu i׏:;.]U7rd0rՍ'->Irʳ$~ CA'<'!ol- o&*y)%S @ @\?wWۧr>t l  ^}gv9q&=O'>kUs cLּy]`1~OK)IEc3iNn 16Wl 24Ů]K"Ә %?reXt P}(@8n -P"!+ʺ"S@ֺC``:CQh~ĊzS|WwN+]y rƠ fOk{tHzT@-Rޑ}syK|~v(ݕ_ZId1S M(m~Ч 0oЈ&]s+%kVN$TNhKVq`0z˽` BH` ~ 3q)p:J#M.`_OP;_!L`NOLr6i{sn!{V=c+|3޲i`tEtҩ9 ցjS!gjy1!q,;G"0\8_#nkΐߊ`wLN;T/.wү?#GQ1-}7}`ꦴp# Py`|e182-}~\ОIcP{M:[q u ^w[7_h-4v4I$T",xKqS@2oՔw]@PYC˶]*ۤ&Hq, >L}I9:XM qђ~5XlP'!{()ɾ=|k񖔙qVˆ' 0a!˒'Q&ˣ˺`ͩ偅r]mS0:#=x#!c88)P|i6bfi6(Aft7-s=w:i)YV%k9/UxnVE.pgU }[ +|R9TDy@ᰙ}8 3?ɾ3Ze&\fL7xl[wúNb X'@ pP-?!i1)ό;Ϟ)=?[(e"ނY9@Q iO"ve2E*&SN;BD Czv+8~PWJ^+ZqPbKC9K~SoC5 I=0U,|iGIca.ۏnڃDAMGn$L,?kt4%LVIMXA#'s]z3y|^޳E2Gs`Ryd}q 3cLtilNa%YZxBZaT33/B@NkP/!Yd3 g*)*^IDAȠk6pC`JJDޮ9]m5ك-_ob=QV$cܚ"":UU}Pg sVZn.=5I.&[cwLF F$994ЂZ@}#3ee㝶E9B#n)Wu^K-qZ1;g n#@}]ieP1!+u?{\g}MZ(|XiӬWdG,`,(XohKųyu[)%@†.ExHpU8ƺlyp)]=ԈUuWȉ[O,k^,O0{D `$cd=yg;{lĮsB+{ bѭ)wsvDq|0@L@(+j _s3g'X;o<D4o^n$ -_]GR$ʑ6ǒׇJTfL&p>|K7+HaWVN!ֶaLB;g]IzL)J'dj D a=\Zwc"aqA^J |9GCE& En3ĺ c'f ӱ".W_M^SyI)etd #Ʀf UUU2;gO{~|(2 c)Zw^P˩kUmAdR/) LU9k?W { XVNÆoR]}'_,MwQh\}7^0@,@\Vw0?>&h;\nrV3Š8P,_!{١3w6iI:V]wT\oAU\/>T8p)NU ukAW7I$$c>;!!u3PasT LA{`Gj 8,{e. -T}} =\q*z{>U']8] ju[/Hn^񥩥xR,[(@> P 6+P;ywN]+W,FYN?.+٘^;2&<1`abxPHP/![tGHCp_9猪9.PĺN VLJxz "ma0BY\Nk:zL8c%gFqrU1-(5ǟӋy/YeQW)}L?;KɰH$j<6z/oƧS&2cSB9/H*Ƅf1cu4ZN)_Γ"rqX+.r,ptiZ܈ë/F80e*=ޭ 'ܼ8Wa zZ{@h_Co^6@nq];}, mйHKh6_Iv)ϞOʯ<,*/u<3 !O:e7vP-r&~7Z\UTҙ x%p0odIG<1!f7^u~aXFP02}0/3.\ xR)tBpuP3![pElPYy{nTJ{ B+NIFfL~nӋS,~Iވ!$Bܭ/϶Dǣ  |\w%fsN;Vf 8P0=y%0.Df@05Vf ÿD$8ܸ>Nj_v0a>xl/e}Z'b*\OuYx}߷*TJ{ $XH0꫏\Olmjw14~y!Bqg10I@^D|f'SW,0%#[8f.oyC>cQ>`( 8 :A{hk>(=T8P0![c[P?Ee䰊"V^:.6>p;-fRS$. %8}Kirr3bJQ}+c8́KE_:sFS,N~GL:6aWl]?$ G49w<ʵ0f- 6w3{\*?Uτ<"޽SpRY~'b%kuo 1Мlȼd<+$o~D}^>\{ZǓ+ή7C)vxɃvW|hogX ΠMS*_ﶮ^/:9* pρO۹a @˿rzHOŶ aE*RKP1_!Y$(uWwD7µ̯oM|P1/D*͗C+ `;X!O`~ 1:ܜ.p $ng%<ܐtJ?XpZߡ@'wû+ۊ|n!_ ‘[fO |jP@!\v_BYax~gu&])*Ms+:3c_IT.~K1Wqjr{/7իS~ˈ*mTcs\jE&k< rE/g͞L9nO/NT.'O=Up zm|s}o- 7UӜu8P0_! J$Z^X|gaR0jV  |ȴyAl@lw@r¢p1"rrBɢIPkq;`@TwloY+0^52_`"I7Qmhk3*AC2<ewQ> S7q\fp^4~Sz[t(o>{{sz*2'˟>j.5԰zdG\q7w*Ǯ#7մE;V禅( ڊ`)@$ /@f tރ{2v K0pJy8P@!L}?NvcTsfSf}Ʃj5t|}_j?Iϗ o\_|"-TL(`Jr-@A% ]]/(s n86]~VI-\SEL'o\)qm,W0jnp :U\4)3P-k-\Ph`k9?4׬|D9:&o6n`.< :1~7 LV:;,LEaǕ65}[ƃ>P~W3}|uv2jAQ>TϩsUQ? yiqGܔ 5% $P@@"]LKP4_!L}HlIt^yκ:\9CC?(Kÿn7yljC~}VԜ2-m!m7]@~ uCv[6.=h5)vVaZm4*D.;0I.9wz̺𻴋}m7" ZeW*o[SӿW^8~!+G6-"nAKuR֖KR7v^=҃^L>heQ ct^yί@0r{kgBch|.UjJJI{a nI1 iʮVJ&. '%Bc[hשȍY%VuK"!IW 'V|tr8[|&%1Qz|% R'wuKs%\&̡,֮n_Jnj ۀ ׭;8\mmu:&{1P._! ١ Hhw~j.1-3Z?9?> e+9}uR[/"ǰU(.=FznS8XBDS'HnnەF+Z9aeFTZ59m'F"x^&VTUNA~DmU| YX}zTTpV=TD8{=\Ĵks\h.IsOFA .2r+_$n]EwbJ1L@T"D JqYqIn-bź|z\ىڐr=n>ܐzԫ 0kP-!+ Q)L+|TI+鸫nǏ$ʑ<~knMYZM!"J4t?Jtc1an+hkb[*0:Ȓ43A Ҵ[ZR0dmR|]3 |ʋ22󹚷h`huH0њ1i]DS#KP;Kg^!O/?$Q&\7Wsѻ͈#|J RDFx0:f FAy/v}+s|9I8|QFn# b\+'Nl;%- vuDsoz*&T%iP~>|8PD?!L(/H1Z^_^gV3oq ;r9,9kss:1!reɅ 6/*eglxɻ \r7Dj;I\8Oj1Ou^71p"0Ic􉥼N~!1c&DT $7Ϩ%8P\s}/0pnb)89.AIqbl10 Q7 %Q`K{-$Hxz͑?Wu.m[ 6eC[8]qwҪpc4LMP_'[8U*Tbj2|;4=sg_q[||@Ge u=ܒкBI ^ĆۡHy}_] I(:ZD8`yvuء ^o:^ _7(ȴd1=/5qY@$‰@0P2.̤ev\f/`u?SC[~@o:>YP)!{C$3j7U͒*\ğ~RXSԹr7#CbMd4kqv<PϲE"[B4 ) s{'zzT.@2ޱD,)Vn҉-e?lRPQ:ƴټ ?XR0\UEȘiҗ8suu<^gC.a焝[uXD *߈[KYlW;M+VQ엕TU]Uug\m^{}[X^L {9jLOB y2"YcP+!Pd#Fqf7>?3o(ڜV/-*NOC.GzػɖfBZ\tQb<aGEAmxpO1a E Uăv%D;X+0794 (PDc犊s|n$-6cI3Z9^,V1g -^P/KYSN8?ʳy4P-(<ӼtkJ?_6EJSS=v"7rO} bQV΁hpP4!ߟNZ A`iVk5^^)||JL,&BC1YWXwN\p{zFQDRG*g:udܲ}5/ \MS*g?@b2@2~v3A}_,T:jy=')v4$ ycꡱƾFJ TVUnGl֖e ~k'{F}l`>W*}Υsٵ R#pdBR֙zn=zԦfYVHRSJiX, @!I?"@$]ė@D ]=|xĚڹjXiv_ǧ4_zf'pSF ((M Dt\&QzIP7![ s3SƸwLu9V~vz=_~?h/2x V,9q%+SI{=me00c4Qj`'@1LT{$^aó+kS:L`6e\V/Eכּvi` Sx|K:7y眑wZ^V˫`Z(Dx`JZ~qp 'vլ\ŗ(-$, G!2Ogk&:+w;NuW>PKaUO%}d5ƀ3Qh-EÞIRU(07A\;,@9hB&B76\UU&Yt ~;G~d(wϣdݗ=~osv;8J`W]=ֲkDBYekpP4!]2a23WܺrN#Ldc;.P(r/0:sԆEE}\J+3倅2dQ#h9騂b:$H*$Ogg:xfuܺrN#Lg/SW'uo etTK4e1p@g${e͜Lu{H^5l`E~*viDx /}K  9d$c`NAbN3C 2x$[5iukZ P2!frĵo9vj9RGI-2t]B*-~FEMWO6%#6xGlGTUZE 7CRoD,0  ֭Mn 0|@EOSHFa\&㙨D{Hd(z`2GcSr7WN"1.c+Ըwsә3[J_:ʮb 0=_5j#]G'#cLO` 4z}2d^_hH0^<^l1P@d df]~XS>źYgjf8Ė:Et:{nW 8`ԏP7!p-B*{W.7/u^|n߷iA*[[#s @~P{A4/VLA"hڵai#E%*#c܏amKOabm^ۧO-Vd8셝ߊO͂mP8Wgf~d@Kc'@"gKP`NhX D V,qY|#"Yg>"Y_7u[oӋP;mMxFT& **)cNsdxl`Ϳ`{}`Գ~3YH;@q0 4$ _ > fPBX6S@L؜m3kC&F\z*cjϗ D>.)1O$/'{ (l>Wx]ހ:u/'/S.D/F|i@xx-QQvtˈ`lA#_#2z)X+dJȞ?ma; #O9}NnIfU]\LgU5Ir|`u> Bx5DzW >CK2^^ \ɻWƴƳ&_cub p N߭:9-> ľ485Dlb*%}ZiFe-[pP0!~T]dW ~|]޳wθ޷J}UT|4 ^Ȝ_c%\^U8:RDMh\ ХG%.ⳈMGsnoh0ml lvk9.y~]|l|6~rG9w ʴpEˀ93C΢zq`sayO_%7oJe5efNkyqD(/ϋIRoL?/WyL֮3oAQ#+| y^mkF0*fB\1,EZA>fկHR0&ں` @){,WQNP-?!U[$)aL5ݼ\e^k.krq?`V(RP( KPg[P1")YTA[.3FgommxaDR"!Ew4Z} +d A6b`K j^_07D-#Tt< oӋe^'*k=%JOa@nA%Pe8b!tu8P/!x?UeA kHbĔy*k5qO*lîW"#Q.D*q1|!/iZ&Q:z?|v^v }ۺjҾGoU!rtO2mzjxAOdD .R(w(@n~4 y@wO+LBSB>];ˋX5Ӈ0%\Ϳ 6x9j~GgS4#CKxHŠՑNu8w}g^NyÐ008N0*0߹z{0`PdbwP1!pT\RB~7^qJ$oQ.Ia dɭ =; &eb,83y8ne<]*(^h0W'JiCS Ӫp<U\>;a`}~t'ҎnDuiXWwGE՛4뎢v\F>8sBD?O@3J5(ޟgFjȳ!Kҳrx 펮L^RN R^L eD pH_OؚO%̠P),8;U}7Ptk4x(,tVq kmʪ<?،hZ{GNz &6,vIđ"bY+*]MF0vMv }wL z`D \j[ "=| 8}!`hdNz&& /[ hX 7~5tq0i0Ξi+Q~UWǚUVώTo𪷼7 ]-kwɥ)zbVDՠ7$@Z(]+y}P+>'/~ 2<gC=ML^p V7ۑӻ8^{xY& /-b6Qy2ƞ^P7_ ,3TFw<=Nxʯ.U\"|^^} d\&17hH4!z'@nߧF6K⸹5^ɜ' {8Ԓ6osP] /rp.|5 n "/@K\8xC{òKЀUFy4nZak"`߰ת]Da @O뻒%9IuR\]GjsjRV}~-㯭~(Aӏakb*p2+GT^\8[`6q.?wRC=QPXO ;e5z}?/4v}B+ k:Ɉ>skW*@U t![F}z/,=O PyqK;:~q}yF&m9k^OKe8+JGP; +bwo+z}^klu}{k>F`"4;kWu;F dэGf׷fC99i虬ɱ{`|SZ0! T,ۯjq4L"cV> 5bpmմ_V*nOw"wȞ&L}M@?P&iȞj4Wfsfی|ߘ uHHmr9%] :WEPh pX ZgC-5U9FuQjJKH@& +oh/垙?(rARb2 #,p9DO¹3/Kj%.~3൫('oY[N2LeӸz۾ѫD~v¬>.Y$G|؇ uX zN4P0!Ll_U+M16[%#rRb:Xkʣw~cqBt<['Ԓʌd7p@Bde hE A>r"Hvp,FnBӷT[ZҳH:vZFJL /ԄlYsȃ7\SVQN*Xii 4t(/B}^ow͍l3c@׊aLXJI{fo^D<'Xtʱx>dy9S?ۮHN^Ib$ZkNTW{%-5n8g0lفP)!{oP%5nnZdZMܬk_ Oa.P;~CBfB02v2H$\h#GѾ+(r6ӪTRPvc" 3AMh@nGA2 3,Kq !:k8ܔ|HR8Y/R+[B1e 䬝3@ A6{ #2}Ȑ \bBDTMLIۭB5r]-)+ה @ &KP.!ژUNgu9suZo^^F%qZA-:D1m(815F\!փ3BS7ZZd2W1)VGrނI3fcrAPQxs1P dkg,EOZAMHDmJW4+=vzD\.3+53@XȄ-W-}UςXσ 42@@۬֊i6yyikDXr?(=NUgV)LwI,;igo !/߸[@6A0JjL<JFϋP4!?Z@[z3ej8U/`owsjkeBY|I[!Sgβ/ 0mDn蚺(͇~\n91x$^Sh=dil2 ;%I@Q{ $6bhD]B  ~P}S88d{c$|:N>*G*5tl :H []V2QSpѾFD9ݭIרD~I= Fqnɪ]605ZwS槏 C>QWnuP#"Ўh  tK&]o n\]zBO.J!8r;E@a pP5?! [,'1Y%K3ofU*p\҈ҒM)ӈ=qBkdR\+ KV[mF'OYh|v>=x^y+촌`neIBz-vD v%ʭ|P:p}P0 NaP|%0ϩ$g7]q*ն:ڥ1.|-m~_Aqz+6W]Ila`i,l; IRej]"VpvFE]t 8Ah8"Vj}Cc O VwLO3)SNm-.l fv^֯:S~yn4}+?3sO3oyIt Qw0,B^Us! 7!JyP1!z\nU1|7Qh%'?k#&@|&H Xr|ZD]x PY%fj㽞l1f)]1 -1ۂ.[zy>/}NSe~Df{|껭An3M=Qst#c*/2$ԋEPTLU1iW4D2$'snHuq"?]IS:UU-$'2P<尨=7|$I99K=w x)e<N0 1 'A͋)1v1<`!_B=JسIVpKC!Ɣ҆pP3?![)jKfk5ED*IKMΫOPe1*>}?oowCaaIWvCJnO00)3!"NQ9%r' )G ?˭w&^^.'C1 *I`+bנVj " IUsɸ/έR&sBt2pw.='A3>628;q^I I]qҢ$JU( 3nVޏLOv!9}Ѫs2/~;eˎU>H:}]{ox`.c7rUffsH9c9q 5_aX2w̎{P1!Ƿ[$U1P7urU&jYwuIKO\̂9!0#dB YV{7-ш˹ 'p>M:mD_TWcG(j<3/˓'\ޢU%U^F{^}|ve,/T.WF{ 7ٿ9)+֗7v uAwBm%פ<26173,E,CX@vJU)ȰߋtPhELP)4P1!?Q\; |uXd]nF.X_AY0n}@jYѱ>63!Mk~"JIl4Q.NxJ^2f`0VKyȳ?N{)Vcj&o%[z?͏MMH:|[wjK  o1:5y=>m/$'}ЙO_CV +ڴ!ڕ'2WYbu= #,@0׏ ǯeRt7Ç߲_[1;A}JСo,mt aն\D=9 .'y.A-==LЙ$ˊ+Y&WbrG (Rg H*]L}| ~> M~n'oN,Ȁnξ#&m _{iOBqv,Ԏ|vq/]: 8PTZZ]snI2620v\dGiZpfC>RA+FI<6dp.1 >㫥(NSgN;Ƥz(`rDTUau֕~xJ3? ڹ x+tyN,9 6+0v<`u= ISii ޑ^u.wz+8ufq\'}c0p8_3)d߇Q0xE[e2+yvzZdnf lrKdtoP(!{&"$BjVU7"*Yx5*׎MHP5!(-2><;Ծ޳kT?IȠg ID.mӳ0[6t+KȍKs(Zjـg KQ ׫%R%uY8DڞQp~)Qܕ.Q.YzcDZpb lwU@4G=t@%ԩKk׊Wk$A5f!$3w*yE@8kK^ip_Tv_ <`i9~KYwz}dN鼠IdSZz[u~-u*S4T?`O>-r'1D2 }z[6e_q}(@n= iHho8hKN6@J%(nc803,(3P4Lavc57.107.100B62w heu[<4d4*U⭚8p fqD]>b;$Dr4@2t:픷K@`iGs^r@8g@cY۫GR* RcpQ D{f6kp9WhQP籜9P Ip/zv{2p^ I2 OȀ`(W/K^0qTS#PP3?!! Jgso3e8¦Bq2ْ+\ j*c#³;GlA֦g R:1j0$wSO˼"@?BȑZvv*#_+%ҖL7#Fm1xF \ }6+^қL/'Jj>1#5[@,C)5b]U fXU֮;A՜5Ë ]*UÝ74 gIBTȲW=N7u|𩭐L x`Cs rf=|rbM~Twai; |e* #c#uu/?Ty|pFA#(D w*1T~8dz ӊ=P3! FB,Jz[ˑJ%TU?.|.3YdTV @|~u[8dDZ&`eyؑr$4YA v/{`] bwBL OfٮzJ~n\=wRݫYj|'EQKķ U;=L n6[ׇ'Ʈg{!ieuQ=b\e%JK*Kϯǝ3p`Mx1"7W׎,]jZo@,Ĺ˨M@ignfmJEW(4Nd4 %•]+M|7^ˆ x@x)\[RXhpP1_!+w}SY$6[8;Y+zPأ|[֫C|90@c3GaΑЗW I.2n&Q[Ve2WY/?+^ɪq]ᚸ mmpӖ`ψHE#hPڜ'n`wѴ:XlK>8X&X$wH 4Q)tKtNlt 2?hYAN6 A5ܛ5Κ.V<ʯ%;^o>+|>epvfTIQuG7NBLDFAmj^yٳ NHʜY+H1SeC4fs!M?Ig4iVTr;^QB1Y}''^nqmG^p5͕K'3]_:ݝ@CŋIc~z> _3譮+QZΰ4@i_TC\/m>g^kyGlPF!L=鈛5ni|j:˹OtǷV]U3|.Ext_?4 Q(B0s\vhĜฃlhD;JUd1P Z+A-*M>̰oJϏdJFf;J?]C ;t.ђ$фD.zܓ-7-%7tHG`s\xJ! |92[jڜ6{ a%_ëkT%c)DV q-C.tg(e"u:$=^KEU` 3H5;fnLԺ]\k/A4 ~{-rpa GA7qShqu Wi<3]W޷|]|^=#UD.Yɾj! n%&4zج%3[gFxuko|o< jPC!LZD-&6k6k5ڔޭwj*ǫ\]9,\!oGK_/E(qTc-!a$KmĆ%+F.u,0fCm5$dz%8r )66{>- l×= FJ^^lf|7l儔R2>m ҿE4TQE *Z*;B4/E<]:tF[D`ھuZӁp0tIVq3>HJ+y/ |GqwF!`{'V():Q]\G (ZKEh#c)S1)i/z{j2>zOsۆXǂC@@e{&UY wf58yc*iǞf!0+׭r)k큟`C[rDe w|==¸"SbgE;YENCT7?@yc+qݠ[Q{ 67P)!{U( 2D: *fjwyORR]_?Xug6))79 A@dH/"s~'e'"JFjb:s]>d6ڄKvNOko w ꅔe}v|Cc@O@s:S4BVM B{O~7wt%+Y-U ǻc Nh,.*y=*㈸F#W+cY aJ! & Rdmv^Vϩ u`T*,׀;qIP*!UDNc`tI³6UAtx])k?jD:6.%I^`P?Z21bå3[^eKJB4P  z]3ɗ/ !J"3[ɔwE<_jm<% m5y[.Ib ̃4hD^8V:WutO. 8aBo,;̝T=oɽ)hwoZ tjWRXNewg 4FE>Ɨc^G|@qRPntZ+ӰpP.!?UY\TjeMjUu ^^\kwu/*'O>ܱG-Rr0N!iK9 }QfY#ti-jZޥ*S 9nDAw;Z,XY^{:'6}ѠCz_j\+/K_=nokрaxZ\@UKY= fЈ"|/y*OWu2ˈ뱈IYߜd;MD,l @8y0xzNӾ;zA?yG!3򾛶sAA0KSA]u."o!UKؘ}XpP0!_}RYRBd`t&=&EX/rTyw/HXEsOnQb7˽}25.ձe1v'-(gJ\sxEAVsЮBٷ {Зn7{D bpȴox/=>#(}(%N"Y)%tcA5 ˮ1QS4?i/{ '|Qe7cڰ[S9" oyL6k*j{3Ȏn2H+K{c8AW'ժݟRGmvumI$xb#AjqU(r%K"*FcàAP (ORY<Ա!߄ "wvap|WՠNcbe,zBݳ1n?P ֓4@pډv}wUQybP0FBלoeR1V5on,nOYa5&㞋aU>qA5rYWF{Ia(ZtDm#'3Dqs ^/ pÜ*QHP-!oTءL4瞫z^XJiQ]J |Jq&DB(m0  W;EF4`2;@ÂA;ҹbigo2]@'sa,PUva~o?_U I|[#&JaۨFJǯDBuJ+ m!|n)TH?u0{Y R!8uKĉ/ !2ң3ںl\?ȩy`1eSAܧiYD}yh#Lt;u} ?#`y ۧ{5+ Mjf$$6 n.xP0!`PZhZ{}*n7)Rȫnm䡰HUwRY?>{M+@2"IyNSҏHPkTfN$"GObN2 P*J@>e:n^ww|Z*p5MKdmVb\ ~CUkKذ\u/7eZۍ([XN¿jUfZ@W0DTA1#Be JɵI#nArמ&F_>}p&kp[J:fh`Z閥֡DžkZgJpp4Ơp97{W/)@mgCoXP>!L6?&jjl;ri^l;cnk埪ONbڐ{|ŶXykvqYLxԚc?uzuaem' RLs$ERL٭i#ݶUdȕN2&o|N^:0bvCU4ˇtIr6I-qMB 'qUAu+F5@vyN8 :f`r+ ͜N[šFft#@qh-Za}Lb-@"<NN\EO&1A᭑y`>|כ*P};rc>C<&'$$B  U{haW/֐Q FP>(n2sM:YCy_/,kONtC@P(!{Y&*)`$'[wodm꒑$p"2,-$X$s`ھdY,ƙydjxwSb?IhԅXIЦ;{!@m-[ѐЎ$$)ELS|/5gʊׂO9]dd2ީn}\ wpNp-Aa+^1`; ? ¸NKˊީ)M]9Aˢa>O: pP5_!-ۙp45{{~eq|gU"F^HXpzxlmK2pY >XVvį%U-7juxXFp4d 1*>&;CF=ԏwel3I(絵2ȴOMVhH=|Rp㻕zwWʁ sXݎS!(TI钩 uF.PN7)4p@D^1.[uONo,KU=*5#kkZU] 5{{~a׾#/$Tk8j׍qR"qxRP>!aB^&+N͌3xÄC#B" ༴~)8d! #H `В髦9:t߀P5!YVRixsǷy8s{׍jJv/Y{-6JЉ?sL;(|k% }A`#Gy5 Lm4jZH "=t!lh(L*ԓLR })O @PB \/)+G;+7b1;7 xP=״85֖ I=:;>dc^4L#(2qRTLz V@g "rjcK bd8a/vhB VY DC E;` PӅˈ4z\4[}"O(7㵟(ɺzH' hͤ$ݏXū?} x8P4!!L*/Yg]ʋI(*^F$p5I+'yS0%cWhujٱGjro"E~za|0!ߚE);_(-p!4U|\+\u]¬ZdBgrKORXKUicaFhZ.Q~'JKgJ:& V![cg:]&IDR5~ N7Z`i!e^d*L:CV'#}WR(cQ>ٌŐfI[CdwJTᚫq`F^YOK䏭Ea^\.2`Hq؉k҉:xeă} /U4cP1!+[*Buy4U&ȕ*Uŵ_ rX,A E'A= 1qI;>J![fu泀Ӏu]wkÝQ:_ s+2I~PF!L;f[ES]Ty#ǐyK:#S#HRi:8f7rj!x4RHےמ$g+렗~Cd-!ur'B سRsӂ FJe&6EUI=ΞC>m&X'i K$ € (̕zEVbnxa8_)8( ۢ៨wR+q>?i/ͻ~^cn cX⽯ 1 ?X~CXeǬ@Q@_8Q jr ( y_5 =hE1&^]y4?/xdjeZHglsP:EܮZ+|EwkkǐyK:}|L*R9eoIqie6GWcA d%vV ρoBu_ "CP~3-IcĀ̟rm>>>*g+䥷3W] HSUUp`HK SUP@&P6?!5I JD)iR歪IS}e^Tp#`^*(dX#eBF L$9Ehz7wD#a4 UF}x,9QPa&Xn8@&f*K4~f~7:KrB_j \HbpY}M_>VS{2ZsK_n8KqvfTswf.}\I(x+|tU?Oz:o-LCtaH;}nT@?UV$ީzUk8N?{ntP{. "D !6_Q"]01"{N^&arw}c[I`@%)PeX޵/TP8?!ڡT !Fnu]YS"4Dɞpf %JƾӑnH˞5Qc +;C$a\sGe056s)I {;M2]RȒA=sv:n=@/ʜr;qUh2Zfҍ`)?2&]>oR䓢yL&J:-̜CjD1LY ׫g˶*)WkR]Y E*(vgx#HZfzU!N1c6ߺmc@@R%Erk>7vHh xQ|F|} \,O7츁,'HjѨ179޹-GOP6?!oSi+Ă6>~0V7y[urK*dtT'_ߑW^ސ`Aj!z11: },kXS)cOxCCgL ӱފ ;  #T-Һ(0!_qht! \(- ERui>ۃ7k#^_J˗[5p/ee-'>u'[urK4~Ƭ ^ͭ0-$]G tؠV1KS5HW ixQM^Ghֹ_Ykst=Cy4 Ri)#_ؔqSP6!0)Zک=n3Z(}51=/\2v%rBx&Ē盺t++Ӯ8_GWtkYQyneB]`79|B Þa^;\|Kl<>Oe^@vtcR*Np^ܙtD/Uk}rzGWHߗ*FFˎJ Y?mFa{zuMjG 8)rkt/ b:RZS_P0!}[)hcW%I[^%ַr\>#IHameF٥!+o ӡ1[zt1X#3?feƳ#gJ󥸨Bgif&TDߔSoOx2Fi[[YwS" ut =rZzO I mѬͥO%?Z^K0r lZjpD"IjSª󊒷%zr]kw+Q}Ak\uRׁ}wV8@πlLT9B#[,PȆ ߪh6Tg-R{ Rp X ٫_sU4\P2!)V"&k{|{qYBewS LpI,ބ"EcY̼qge"{VF\3jvן7"#J*YOS*Nd.*J}X5c[L9#1YP&͊f+גvtF^QhoyCt%.ҽ5x*NO.NEk?ou~^ : :̓w'Ǽgޯ*Wz?''곱%桌 ـ9Ô0֘*XF~v:Oɠb&a.j dc!ɑ5>*Qm;y d-0æ 4eӤS] P.!?ؒX:ӽ ˙)U*$NQ/=C%_܎~K٦x{ETwVF#DӁJ^EEH #008Z4"ߛ E[pr9x\KuLAk矶<,/>_@tE`sA'?OGhWJʅhTg4$wEwyĨ˙)U*$M;O|yC"d8叧fΌ.v$ 9[/pwn`iJFSB;N0,"Ujhqe1twY6Е٥:%N f0jELrP2!?~T%aƋUϙKߝҪUMk\io  7-h0i_Q' X@Gg[g2_V).0$08JTo9_ʎEӔV&Dz0Ϫx@vNpwT\o1r6\d+!k•:L_~ bnr\*.@;`ury;ޫAt)=ˊ&ht nA;빘U;mbDH!ך^j^ҪUMk Rt=CSrhlW&F_qyg,aCDrk.`RuoyA I;H,"j\H'8P3! \p޷u\5:EԪIU+N? ֕PARo wF eρ8^R60,ҹNB{^CmOS&3zE\f.j{fE)\B"`\  X`3{K]au%faTMj|gg OXL .|ui TIU+N?Cg "_ő>Gr)jWdVч`amtJ'g,Gfv4YdCsR?D}t*5V wWn|170uzpNxrlfkS!^;;UKӏP2! rF8=/DVYɚ@uS)l6'ה(6ptV^i>PYʬV2Ky+*wj 9 QtEsگr:Py6W+;z'2WԎ35]x-D\9p}Fϴd.gd E=I^NKgJ!R8)7^k#Yy3TH:7b))4^?f9:m\1@Rm Z8+!2.ECX 79q\z ? |b6ۖ z'3yv}?ـ8Ђ͋r'%w"Pf3۬B?@1WR_h֒ޣ-P0!cVKJZAi.X:XC^\*~TҖ\v:J0CAvoh q-v?v<^jpzQyeNjVO_ :1էtEBpDzGmNyw|| A-$'8OKh顩A#23Kj)GB#E 2,N6>"؊C>$)dZK ,f.gZ8z,hyP``\u&G@aP̺@"\cԬSY54ym! c3D%6% (&-塠}^{Пgv^\7 ;(5`CI4`}Y{q^& BP2! ~[a*sU5MV:w*T  ] F^ؚ!R8Bڐr<%ư-Bz)Cb_\H*EZ9ai'5-Y+uTF*ZԿB3)wxbEjV8;uÅ:bnҊ Ȝe'r>xp4= ks! si*iN SPFUʓzkvlQOy˘:ٖj(l>nH 3|&ΜJ VE  Gb:,#;B^Uua TBP6{= ba>Urt{Ap(5[fZHP}\'-'u~\P/!+ckZhI'O>~Һyr^i\ɬn`kyur@mWJTlUCT:JsnMV_lg ēQ` VM@@LUyM_7_'9{1 uA3 J~LK lZoU++O^a1љ-a:iZF!ysra*Tz5Y@90H(ePXo͸> jo>PUX, (ޘP=OA>磻Nəau.JK-0ae4w]EEDPEI>dcELZlkxPA?!L6 ?YMlՊ:r_חC3%_<^UcګM\&R( ptsNtPE+|B7dȁ0<࣓ܖx0,0n@ lK-דS'^j2HФVJUnYYk.r&a"pZ'~!,FuE?2qN9?wX(#OGXșLz@X㒘8%~ʂ޹w)GC&WnnCe<B:" `9UgPlO=G'FQ➿GeHkqRnXk{' 3MF13- aMV0q6gpSF}'χwV?S4.os*+*^/ V4@ ; -B^մWStnq UY|m|N.۪JyȂ` qsvP.! XL4 Bs.{95YTI1!Tt;FytUܹ*2'`w"`)ҔޯGk 0s_ryk׶j_bw\hOR^'X*g6#5UYN@)\pfoz=_ 纂QVՒRMo;%,)0RQU w _me+( RN;Rw's-M,?.Ym~HoYPW!UZD ;* CY_%[8P4?!!r85}}yyDd㜗ʒjb/IzP7䴠g3Y)E8c/9Bbݭͼ#)/.]wfzfěqGOZM-H'][f4 3XRc)a3ч gb{]Ĥ(ĸi)šs7oUuG%LZړ2 k d:?5K$d"uuo|TFN9zܩ&87ݸsRikͱ>mSbQ3 \P态?#%h@"J?AJ icu([h%03ZA[Nr MI~+2ǻ))P8!ZU;jjyUꮮqyTU$^BIa&bcӖh IYW_qx SL ^Ipj]rn~]^ōDžU"ΠVSR"v|wWN|S@29Nn6faXSũJW8P1?! M}iS2_ߝKޤ.suxrRf3rS_g2N芃?Clb3-uO 1{hI\skQji=񄱌WI?WLe5"^p5;$@]5_9{_K29GFT_ԧ&瓓Dsequ9'tĔ͑7RlZ;uv+BfpUֲ/PSʼqz3Q?0y{FP`K6N84ɤ_\^\o{%\fϛϓ ;9}Շ_meҮ8D Kp  oqv]w]\BՉ% agJcg5@,;2(8P6?! -YG98 w+M&Fg#0Say9ϵb\7#;ܶ^(:/;u\ iM8 5S͆W xs–(3@0xpoA(^1RV@ .7$ -*JKT9 +),$@^MN!!t*ʶ{ (x3g&!'/V-]BN3soXtTH4ʫT5mWu\:ݥiZ6u{v#奪\bGv8 3HYgr+gUWH5 VN]܋Bڠ'nA9Z횜yrTopDDH @X5u\ J%2ފֈVjO;)o-"t|Mq6Tּb bay|&MiڢYo}nQKO9ԅWkyWh t8Mu[\^\28yuyM0DpaBٹ5ZZX=)4qБ3dCͽƗhcuPug>0e!TM@@p9\ȹ .NXsF/&o>Ibxz7u&!!:q-5cP1![_U!g 9swuWR]\*4֯#̖Cr$P%D9Vx|`aU1*| Hw VsiR^iؒ" sևδ_,BO}5[ :8=|<=dwf q @-s 11>Ψ 0=/{ g1+'=֗P3!YU`jsk?25rks㺕RTy@_l*ckаmus̄Q:{8\@lMw;M~p\I=}2m DŽP8g#|J \sKQ E JإW&j3S|v$+U}{~ os φu:*PV-fpM~~~xU8Mn|wRWu?rt8D!%3/gq̽O%U@l t ϯ <^ut}0 .ߍjOZ $@e x<'cj#nzD5/(x_dN{8mP1! P)9zW阽n\TVڪ3&ׁ?l[#xm,5*\a *!8Rx>ڍ (Σ,qȑNKp,;(Jy79.[MW+JHHcKaBqyHjith_u}~ߞ1L̴֞=ZЮIֆ38M~'s|s/^73Uʁ@̪s{4ć9'| (PKH/gs&XMybь2gDMC2TџUq ѭĬ+9xwS ]h3<@N_2tXtFl@ –P/!CU).k^:~""2t*cZ.[MK.oDT/.qO0 Un U8 |.(+/"OX#3W}7WwSv^Imwu<3M0_a`}n,tξ#Rh\9.erGN FZ6 \ミ(.|3:moaMK BXڶ)EVM_5ZyeveqĖ`iAe6tJ @Q#1N& r h<; Ci$3܀yx.F"`8UͫjYVSe-ETp4rv B^J9 xY/{ޟw(Tbkn*^.Iati.Zq겸2Wk%IjɪD 7ze_`;QQy >zZd;_n=6A |حzyӊ,Zt ;8 @r 04N PMFP,!+C߷TZ)TBРĈ|uyxRf&_ g /pO<0%8Z@^v_{-576ڢ??@9wg%U#3=Ó`P-r‚u@a`[1Gh}|ٍymRZbW=sH)-tz$ XîSOcOgM8B"Њ4&5}^^-&sĚ~eu7i  ( s5 Tcܳka(n?}m 8 P ApYT@{&hwPG L]!13ef\ڝ|RU ֯V=_9}:͐w|DF0Cx3+?I+j~tu-\̒n JؙS~`1em9e]HOaB`oŅgk͌' +S-ρ. & .rj19= a oCB ît}Wفmk'EH9!cB\҇Yn8-ip܄THYZ-M䝘%6[$2󍩓_΃F*jwXH(T>`vZZ[3 lD7}}%4]Wp-]\y~F]뱓!R_#jYa4D5#o'ayٲIX(_o F~_V_(ӳ{$B|%7gwfXG.rPxY9HMy'j4Auאal Q{8[4/_pu=P(!{ ϽZ)Kn US2G ֱ}-1h d-b@ v[D wvmt EV1X˭a'Eu*dAGHܜ6쩽~K|px+HdE4;L4OAQiƅl cU5մ-z,hh:I|:%ۅUq%M$VX@` 93v:ؚx؎Vy>^DCR W&S 5ǀ+au+bt8В 4fxbY\Y88P*! Wh] B!HZTiUWO= |DC #h-rAP$Xn.D}:U;48ƩEˇ9=SɅqHHhJ6 _y7B*=e|u3~4*`-to3h-P3sp%򷺼#h\b-BvoRj[ҩ2qoGUCm Pe#3%h4vvЄxpf}qMQ^1@ @P9=gD}\}YgP*! ɻV BcАt"77o7k˭nTES&^qrzaO#8Ŷyqʳ|{Iw@2E"@`/ڳF=Oj\VUŊU`ĿbԴ^|g7+Ox^)Kgw/*̃~3Qk'l2FC0HCD$s-uQOt{;e -<ݚ%8 T/Ȝiv7i@kڃ[3vT(e7J#۾WlŦ oeN``(\P1?!?VZ!;ϊ񚔩.dRWnQ*BeqݞΔq6o7PrI3\+N [具 e**og0{K{;.&+=i ]$֯Miц U`S?2StZIedfdH.Tc"/^%Ё@1x|=x q㽺VV9lP Lx|UןU\S|JL%q?`8"pd^QIu O -6Tuy$<΁:ᐁ8zJcQ=~ I ՁWl^3*GkSPI"FSʂ GE7hJd008P-!UY ;TȓvJ {]9#(MP}tI /p$x'D5D&@(;qMZFkk~F 5vuc8bAjF!\|]Bit%8$"@ Z"_(\0J%ݚPq!fn_oۊ2$ݫRF^WqPH:2|]6C+1˻6}Ҹ-iAK U;5K=s;@sYc>c5 SqZyPSy1&`Lވ< `XK  hpP/! {TZ!:]o4S8U ޻zcH ̆d)>$gsֺs)%V@=h%trTqJ )'(ND)PcJ9# -4njUI6r;x3nζ#zKjK6: 8@x`s)LZtB6xP1! Rک3&.7Τ}|qP)/:2<ƷWūU/3_S`}]>K|p+nFbh jXFp 3R",H'U,Fp8㿐AWSwȈ g]P7QKƗ f1$dx$Zugyo\T%.f,7s85a‹Dihҗt|е3"[aS£<3Eݿz;J:pT?Vs߳ :%,uvFqD^J*`OH 3UbP c9bjMn&gNU4 o%}\:G=rB?^Qi  "SaJ) ygwwR?!w-um{ RU~nLa%r2rZV6$d z\'HAZ|԰yVs?) !*!X(Z@Ȼؐ;eW<,WTBe30.KԮ)P 7qNNBKHW_P; 8Fk)SS wQZ[>Hc\8QmG}&OQ `Gw>"k}*Fãfс ^m@c``vWwV;:J[:znc !1Hw|$=$ڠp0I_4麷6OP&if+/lGӏz~ݾh1|Od߂ԙ8h̻,3D\y!֪">L* -Vj|u# $lu5C_8 _ZI@$Rb D1N1 q{AyMd]8bSh:Gi}UUѬ(+nEi:g_ Ծ$ﭮ@%uBr[TEU5vP/  46Аt$=BVgs+mLRD|u) DUi.(Ha$ AO *gkUp5_e_:iccNU=p E{nxJ T!k嬂enA٨y8ݟʷ0.awg`+<)MWmit(EhVjE]8ZWx`]hVIA=(ΧyX@Y\fҪ19}xϻzJUkyUy&cI/'H1uJ jL|cb7QJ%,sAnX(C-z!ژB"}ϜUN2*%^)s?3 s7|XMQBC@"W5`BTzҝ~)\ǥ^sm;ˌxTl\rb9x/Bodp Mh|5/P.! ,Tjc^>kYEK_V$~l%5U`pUDY.:@ v󰐽M$f ۵͓ Fqle\cQ8=__lEE\CMfvr\Fu(bqP/ GP. JTzڭ 8N)=@М@5'+zh֬-5A>GL%1ҵ+LxIeh. 9пy79g[6тW _\D-EJ c j5T$\"g &qYjDUsyR .웟 Xh;>ynSSE`Zwj {)BfZ2pP4?!cXL fpVYMlq۝'}^kЇcW!˃2?DŢ@+?Enhb7hz궭HVsMfPCUs:"ȳ}[1 j0 uK @q [O4b3<lNVb%ެ*@V-3>U zOo'B jcSUmB@XS+ݫnty_I^CkB@ B0~^.[Bu{lFӲ/ZuD 28@*41\Ζy '8z[~ @==XU }>@kK4!LsYEP5!{QXil铻8WT⩪uWl߿?acQY,sh9̅  'qowW(~ loSVP] VJl,f>b6geF$Vx75}C"i5GNΛZ11dF+,+K >WڟlAҌon@N/l L[I&VڢR93F(/~;nꦪUvoW&@;#wGfjDc֛8Hg-s]1s |.NDp\qE&2l Uh;fw,m5lz@1֝MZd䲵 Zg|nJQ|i@?,@Jjʝ`[EzP1?!IV[f738DnTRnjR3Y+U{} NfB:L=Lk!=*Ӷuk|@x_ zZ`1+lc]Rcj7' })z4~mcj\MKrd3aS)~{h73Ϡ4@y8`T!?0:S% "S "/ 1rr3Y+U{}87,.'2Θ"<]`֥7E<9xbPzݪgYڀ?2<%KYDN'lWW{au \8^u)[V\oҲ2_ހ% `D :Ð^nP2!Pbc"7|JD˕9ixݴ|RW,cpfS4: ƽ33{벍A%b$l^dhƘBqPtopVje.# ΒL'`;!)FFt_("'V+Ǡ3?~WD˕9ixPdU"1|`N ɟ۸EmiX-Gjr VWxP^r*=#fӔK iu1r5W"{'keŸR@%2𞥐P2!_P L{ɬur$牋tk?_uOt.v$9|CC ENX6ięO\jTq{ވQ٘Kz[wi݈_VḧLߞpsTPwBՌG~0x+ 7%)@YojP (V8 0L&Rt(Hp) !2D/Vi\z֑%Itk!f$U1eX_M.ss EaT27 }\.G ͐/T,D֭_YQC[ww7@V0|_u^|@9w}j~HHP0!ThfL)֪%]|ehs~,|nbK ϡfJ^>6MA8U>hwpAX"R@6k߈ Tf.tA P3ݪDVCaA"iq俏\xB$oD˰31tRεup{ e'ӒۅZ.d-K;Eï1=DzUzMLt ^5<}!YjwS4rۋ O:M@O7~=vpP0!O[YRS,!IheʺPu?߿ǃ %O V70qeT,2t=7u,{<wWy76cАT|3kҢ7J'Zs`z(im_Ma mᒔyyRqY<"Xs,!Iz][.U҇lmO7`p7fxc\GiaQxRG/x7~iBINY[Ui@/8ar0 <ː_兀{L! ۽c@pP-_!~S*g B&R>ҒZ[?¥b"AjͩA{7zAQ-E .^?n:{~h*F4 [БGSÝhoҫg:*f/.@/Bd/|8@`uxTF.*"%D#N1ZJbe$&W C} ݯWVRS8֪9*86iTBHS Yי(&&wB$Pws@ 7೧@*>AѱOFtaұ<ѾrQ9吝gLzYa)@P8 Q¢1D!⹻NUo*-%W¿^_-UU`ۓAV 󔴾t>~h,~kgiYyPݚ~>ufh X^!KyUĮnkNy9ÔrIZ鑾Xw% Gmx,{ |0/t\zW;1.1_2~=)+B Fe$4^,=޷Yr7_iYSd26Bt:OGTBnP S" ~Ƶ@ x)m~J$iWo@2h@ ;puKΚaܖ j1ϫ@ і v@%v>yP- e IP@ (jAloٹ{e]򺻗wk7$-÷-nL!-Lc [!93=&8e[#.&0wnb4^x nYB*:OF~{|dg'0g:㸟<>] d ucIq3eg6Pٽ,ֳgY<7/=7ǮzHAvv؇w~xQf6@\nW'!U xeLqB?WǬnH5`^$ #Pu-H:/13gUN6vq >s  jt9J;D B8O0&~Uzc⴦\yVGRWQK ȸQ= ۝`bWyFv5оMP̵(*HZ\JCP1 *Dda&4GY9]qYubUƦo/?`7IB15:gE 8Lz@OE Q, ?4kFJ7]]-=v0^ z1gɁQXo͍d#f⠲‡ '0.h3ʗҡPj߃Z06;ȃWm8'))rb cLl#=+Yr.5gW޳ہ9$3&-k8I8=p[@rTRU=fZT3{ ,`v8yx/,^U9OV&^uC~ģg9WlQ3+^;]y ?OXѿ,Po.Gs'P*! mT\ 59^zou%/*Jm`ԖN8p*<;C? z$R1YTwUqtC2tBDBM5͖qpB)hpN‚{q9N`ct`qm}1$c99ݬJ+®tXp<>hs(tނ}L{Ly8BEBfsYN_{$%/*<8.E5Q5ZhFHE>OaWusYrv펕T o8@vHzf P-! YBLΫ5?4)iyZ3:OmqWFmθae>o\K&⃓}:+MU#& Hͥ7$ !Iڸ R1H¤Q閔Dge; 9GMsrSR/#΁pPˈ.}HSg[alLO¨f$5}MH x@,SmUx:RcP' LDx.Aye+2ӧ?SW޹fnjJƮLJE ƚ)nʊ Bq1k%Tv4K܄\J"Ք$'%-R/ D X ϟʜJ1?@^iXJuͪvk$Wz]w+ "# BР B!8ʼzE5-<ΦMgLPf@M 5C*"Sٛ=ۑʬc~~ #ge ,d2~6FBkY"!1Q`@8P,!U!,X E5&M$rJ2[ڸ޽ (9Cg[Mi/n$E'Tv3ݲ<,* +=Bl:Z O[zw]y_~Pj;aGo3G\UL*oB+zÃQm]7A%-L.n DHkR(V$WOY>n|SK{W׿B=R8bE|:m9?ntАq;4?F-m$wuS'ֽws@_ %vJ>#O&bRE~Jy8P.?! UѬfFϡ3D.i3d][֕u|?tu ROr7B=xū\%B&ԉƀk̎bǸT%xs'bYNh> D]DJW]wHT~w<|4Vx_E8t :5һn@Ld#؃MSMBM !u8N5Υ%-WWZ>tblGIEm4ʮ">c;ٟY@ G@-JS Ja-r1{h|Y^nqj;HIJjF;pZ[>o`lg2D ]@6(2VsP.?!TX!ieqUSϷWPd]_?{ZfTPdF,G\}r射",1\8%Cئ&(xkpn[NZGRơdփ=!Ne0OO{@F@vr_8h@.< 7pg2v#> 6t^HE*EÅۃoX{-A U1[:ܫު+K7kiIшݶ|ȕ 8? I5*YDL+#Kz$/x *--!+ZT Np'7&#Tks@ 1 @LP.!;Ta<>ZFq)yyyxIޯonW@`6-!=Je.^<-Q w/wD ਸM0R3ǽ\aDNZbREgd!%d^9s/1z,tƻ+b`  R#9y .g1X! ߍL4z, xj%Xw27nf&;S"(\-ۙ}Vj)yyyxI޹`=-/Q>,e/Mgkf C_=g{ F( ȮUbh5~\́)1Q'V hlRNT P.!kR! 51hxߔ7ZAZɖ>}eʳGyMV_MCH<l1|LG¡sxv3>F˰IY,O_ՓBN0ت= T`:V +=7ΰy@?MmHHtrf_j[4>1B'@pu(*jB*V fqYuLonsVV[=?#M"'4a$%rAKVcT)/Sǻ ^xnMkZq{t+(ł*b8#Bkdq8r8H2/KP3!a[a(' 4;^ߣ뾪}ejS# -UvըBFOWW<5-юEDgƄ&`S_V4 2lVŕYCAS= k~$5ǯWxL˂dgwJ-4 =>:/tR[ E!(x8MDTI2u/̒YD69=W.*R:F`QƤOr[ʄM@0O@~snUi0&R.GEd[p7=ԗ7ٟ ;J: ]_>3oA!𳸰)|r@ѫwLs&AaS"Dz=j2}zuSf|: DWDÏ;f&a2 /$@i@5U#z1(Iۚ6_קw߃ /rlPHPEM{P;-C}N }4 ~ֵ߯fP)!+),vu<檪qwQE߻뫮?Lk@Z?GLUsՔ'Ä];DABIϠ0:Ei{L2 )VK]ɞWW ;&]l׎Zj~hgϿ[֮wЗDeJFVQ]$ltw~=j-} rHS^wȰ* J2Xwȑcqm -^dÜ7i/x٨ }ۢPXإ;5{Q\08~|@8P:!LloPY+M 1 ~xG.*|uveOn*psߗ?N/j,Lo;|wA *hu'ZjbxMmry:o<eg)\ق\z[-l?u@?S+ M+lŠ%IK_wc*25E OI,뚡)h@v!˂ҝA9ϵN=i ``<ܬxYD Hw(R ʈ52$W3ӯPAFGxوo1F|KW l_߷s#N&˟n8`)0TVLjkjP}@#tiZ迉O;Fsf{᧭\f0(-ebi(l-  7NCVvD0gPP)!{SRowڨ%)uViJG k oc@WN١\I =F*e|cJ,?N>l"E֕E}V\Epd /xUq`N`z< X5 se8]2ޅДӰil=PO yͺjTXD$x>|9u.)K{8+*v?If+*m&5j Z9Jơjhߏ $aErju8u@KA@T{X aP*?![%zƹWm'*#|퀤"yla,`N&ZTtHlG/.%\ۍM;+2GC5u.i]lc].lY|7^A*_'Ry472v4[RsŨ5[{0x&VQÊz5>kq8 ,m(T  c s8/-ISj +cHFPVL궂//}I#VWɷZр =SOwQ"އ ō.P7 +B PC4s㼴ޛJq3D 'v mTQ$o_ л} raL|QjzsPb4rѣ[ߚ gM2t [_N3vݺb#/^и2};ln&IOSN) zxq 4#vZ~{)Ti-=fjQmsX\%㩕eq*IdRgTC))5}o.uePV< aH[)kstS~֯qʈOxk:m}ω`3B5=o$P E6̡I! gS!x' t}c)ZDyywD D X|^Yj{R(ۥޏuP2? LEf-(Y1rG'U'5>sNsozAl%Gʙ3=vRދ%جa0#tP\K"}.[D:ur(&4vƭ(E&塬c%qXvN4'C<3Vɑ տҎ!eo5r,61Go1 K9ٍp6!j;_c© :HUc CѐtLRmw=<}szͥf"溔; 4Qٿ9HT[x9ε 5v]x7<04=6= Lz>"wu]#K@׾ <$H*R !5.Z&=rY-6u]<%yvC5jiWP' { `bB!2Awֻ{[Ʊ$_ k,ZO3OZ;p@YAA8DtgNϖm Z ݆(\e*!? cW)@ )x`؄$:C!hDZk}s^T7xRx-1׷i{zģ~gl:haa^ '+ 9`6Y<[s )yZ/?>E hL\3w;y~X`U c ?BP(?!XԌU0B!ИtM175]mg<^6TiOCͣD$Ea39P>i3ʚ8A\.QE 옮DtF}t h&sBuCdw]޹)ޔ@'c#cR1 9kiÄtfkUw ڜ[v%HLvHaAa[0PgH@ n>AqEgsLmUHLs (,B|@%#Âz:D u)ѥvE/"?KP_ e| &POP+!,߿Vạ 6RLyVBɉ*r ם kŝhɃz|U,b\rk JOFJP! FgZ+QJ#ۜJKO-C|~?V^j\OU9ٖWU޴߅J օk\תS56b^'#$ u4գ$N: Ȋ(NbeE^7y3׍bɉ*rŁS%4A4)\O.Lɝ€v_qZj`Yɵ˪jBm}ShM) (߇b4$Q ~RP1!PZaLeQyW3J#wDEuY?C5H%> ҋUd`wpP{Gt"M[Q?ʐսZe:JP3:Eӧ]:~#B{=x3"!4~%|\+1.'h &`@^1U?3"Hb5r1iOT @ke}<]/0crS^ΗM% A\"|/u*]*ѻ"۬m0$a;wCX>ZcᓥDs ͍<*@'VƋpiX|Ff$aqS7yO9<-;ućOk9)V!x9ߩL/hn`=$Ȉe)`P2! Uة$q*Ekvjj_x]&itMd}JEڥW82gXޥE D) .t3F*;!WJ: rRG IWQV4Z+q^RkE/X WfۅKJ4 3~̫.@'%,2x+; /T'^lP HJi/4e:Yx & (Ƴπ>?ܧI3kAkNq^QP=Tg(g]0ϟOwTʵqM%O]105vW 覮*{[7 =:`3VkDKD'=P*! ,VF"MDz#i2LJoS.R$c@VŊR82X67m@bBcMuO?c$,S/0gƃ$}d;%á1ńlIo*\-u |گM50lr2͉pLv<9C>O +,T$"hDZE0D^-rP/ O-*0-w҄be[jƸז#%d"qIՀf<7Os}xvT`|uS׀=<P2_! P[;h~^[6u*^gE\? +F68Nb3Fו`bgL|!4-n hZۘuv0-.aYjWqt<Հ[7xGzE)ٞ+Tկ}_t]MsOϴ=&XsuB%Že>A[HOd*vC]]>n5TZղ6^봐/ zׯ3u^q)h1t(*,P#yn2=J+UR[YO 8%8[~tþWMo6ظj`jpb-buY3ƛ~/yneݖCla9t O5sUZcrv@.ej.YUJ8h >t.; IqR&c4vjpP3_!T\ BμɿT 75:_@K~!$fVMfD'q],~3W&z|8ç  ܀#)V>1XaDM0iFs#K9_Jok6CQ6)=̰{==`x*X9Ô\yU(e7[(ieu)~R3#vRBL5ןUoRUa&f[kj0_ajx;׍69,LUиٝN Q"ƇmU2Jmk5>γ̖(̜JfR G Ј(%.' ek]P0!BSک,S3Bw>=};wyyu_0H~a.┉c 3ٓW(-ByqD> FB:XCsdnכt v)OTնvX=֫DNS_ktO&@}7GO^Y.8So? 4X%zODv6k-)DE^7}pRmTwA/0&K9 䭰#c%8 ?ZMDNע-*xW)Yj}jڕCI|H{VzShC~ G)̞[@ED8q aN?saRQRL\ᤁK즮 ='rPP0_! WQ ʓk㯘ޫPEx|fW8`@Uga=qk)N^y8G;Р\J75a!f^&KW91xkQ10ҭ_.>X u{E 'b*勡T>,9An< ߃8L'+,ipO^|/Es"<}ʾ3USL3l xފX+3d|J?,!(Vۑ0\\HRF]-W(|R}YI!N>Ë|U:1({ 'w8_|! ۘ3PhP.!oN*S]\ުO7*UԹWަ\al1tNs(7\n&Hhb2?|v]$\ܮJ~Ml\>h_Nvb2z꩏aJ{~ELUp &%ss0n `\W@\ uwaX1q\'N) fֆ(e7S4֡x߷rM[qRʿ\&2k`M/0 ENv9c#uֈF[Z1W#=CgԲ.jwʅ3'lP0>Qa@SWy`/zP0! &TZi,9 b!7qvq*FeQ0A9XR!5ǙLu8[p 1a}yhUX$pzăuR|V4J(Q ]oJeaV^Rn[̕Ѵ㫵D.M]!su#*ϰ@ u71ZZ,Y?]^ЁF _%r^ =/ @iK*iDF1hD:!EgsgvUk.jì xf?x$6ƉڝRl>7wuM9 yGRBM NK<3\_gʇ! `1`o\P/_!Q22UzV[L2l&0~hLFIO4-/=o9žWLJMm41B*ZJ^^UQpL68b^D)Ң0lYXoAt`\ GUn:-xCWI6@~`>ppP/!+ (SƝ B!BTߞT/3x{y[~  zVTIXq Xe\w'J}K#:8s(F|eO>YD?HJƷmM jsFPg--N@]b|00wh<*`GkՀ1SG[dAG@D:/87zߞ%T׮zw}kdG0@1Z72=,;VB ݕ~d,NeWV J|T?gH,Ýi&Ggzema^; "3e#(FF֞UӮ:o޼y @}<[$i,M 0, 6U/}RJX:tNeq81(1GJIi;:ꔚj2I2087Lc5Sc}F܁@ťaYH]1u0tEQ׵NʑbYk&~CX@P|Ȥe'4(+EڱK<ѲR{e*?P)!{UXYH&á2R3Yzɒ%Eԩ0{Jk\Rd~BJeT&YY'yuRc}+U`V;~uM^(ƢqfbEOG5qǗ.77 ]cnb*8v&sMdik`|WJHpDZ!ER7ATKD3}rnS2.ɒnϟM"`\pa/vKk" -7ի1>@w Yg DP-! VfBШ&M˩WVQ *xOo))VP~&P|,p AՔ xDِcv4Ϗrj0exFa8̅@2gr5l-1ZD\p9СHeWEu`'Z3j7x IuЄNF!0 .\.abD 2g9dAi]t )O\Ez)SlKwTx ߻2Ԅau.zú[^ IePn!Ӣ*$HTJ/NUY2I@D{^!H\NUԟ\)H8iLpm];TO16piRoXr2C:/"+;>yTu8`Mw{lIp 0Jvp `8P.?!VSa(BJD%Fc3]J7R+Iç|Jlf<\<]8/]IH.c3{kk֭><|Sv[ObMS\e^L%+2R5M-X&pPPڈG)IeƯɎ\潾F#8| 2wpe !}f t͕D.tV2)=ծ)' F#YX֢Mszէu_LyJsVC^Y9 WjJ\(w|(KִfïwadR<i*5üVU{5yeZI@YY2)a WGAFN:c8^#e4o Y,ӀP'!+Sي2DZ&be{T˼5w+Oy{ϻğhla]٥f7DI0y#y3J7f}ظ\F` J&Ǧ ԀVS /MD쩢/Ww|\MJ# q]FCwTc\8 =>|;5hE~ m)2*g]ǽV}D@QX Y{hD@sJu}Ay0j L7d{~!ZO )#-\b@O  P;_!L6?+U՘͖_·ok>?^S)享it]?bPzq5bMH2ʡc+YR6 qId%YbPDM%SʄyTē$ہ0 z8;xj%3 Ao??ƎO;u|?Oj?WiҮ&@Ւn&c52IoX ;A!~殌tp%}V&< `N9Lv] ~~?OU]UE#X-8[ۯeהi||^\\!Uh2/ }U~p%в{ RiXFF8 EuF|;^}UyK>֣gP,!{ }|Z5H6 ǡF/%\*.*N=4˓-A\2ۋFf$#4kE`sE8ny%5isH)yb6r:Yl[V~SA@- + ˡZxjJFWJʳ:xoZU)^u9ϝ{NօDپGQUyܲ1kax7E2U"W=5!Nb DRYDNC6Ls*`jYf%89r[w׀P.!GKUtV2hH)Luoxnk%]9CyXn N YQQJ&sD4 I}(nI޷gH*]q i\67T;| G2[awdfř Yo&zw[N‚mHg7|/M )ؑWR 6~W{Rf].z.4[[NjdC(C0:_D,"6H!!UpS9VڕyIY/|@EYkbhUbyqY4R(<'29^致P,?! o,WQ &š!hD:BVuˉTFAA"C=|eg%d Op~N/=`6.IXQJH& y@4zfDFշ?b xvﴏL)f7r88PA!LRQd]9:Ugڸ7>w:]wRMw8y+VEt?b63m,1x09ZԜD| E"25 mUcډ/slk~O Qw|u]u/cfrL.H(W\fK ġXsO4 48cE5*.υAȫH5h`~i#@wA.,lȏuN@ t})0[á[;HzJ*5w^Sw3pg3껴KޗLXST ˣL{oigߟZY Jd_7t7H: Z6ネp߽]t'>bEUo}fC{P𚾾gl^+̊] 9=-Qv.ϔțV>PC> PP'!{TWو}  И%&*̿unQmFsÀhKwrZ=J1~O+Lb|@ Ia6"']4{5dPj ǺKq|oP%M*>.SU5\ŢZD Q7o!s\"%*žb{?FUCz?ﴯt׏ 'Ru1Eh D!Јt&IUuwKuZ*֦_Fde=f&%5k_4ȶ:ba rEh#@!Hʣ\`|P.!T(j q jn{ve%BeʺR\?Kjm:&|rCLY>S+E@244 7!:D@bo_z8ZILP( mL. ]6$Pv,dAڗ{@&dݟ39/V#SqseCS hѨ |%E{(ەܭ="*,R%\"eU15WVdIPr:("]6=G:Zs_䏞A&$FtCWz,ؽǀTwʒ<=pwk]Ihsu1I =}O2KsNz#\tjn(K͐-̮F;CJozL5>\K-DH|`PH F)v3 K!DY^Y*U󨛸RN4)ٖM!<&)̀Jd)OP'3CaJJYeԄbe| ,FO0^dHP1_!S`y "p"5UM/ęyw\N|Zي(Fng񀅈Ƌ5~O-uq@~(6*T [ 2a?.CN[ؔc)j9lvV6a!kK1hmDq>7wU`J||~oM +ƌjtvj-*ل_eG"nO)ʖI yTiSL &\bi,T9,=>%W @^'\&Ǧ:4e~N-OY P.! NȮ|P[RS*קRVd3N); p1F+:hPtS2p:Zf!;FH:mZ8OS_s5S&-P6 Tr5-hoӽrmr7z֤ 9rY<}?@{ OOs:$T ~ Sȿ,l*(-G FЈt"'H8Ͻ{z,eЮ3NX|\:5"^Z7ci@! YPk8[С#,{RړD),/ь P*!1QYԔD; R!V_?\=%^/7ˣO:U]]M7?úD9mcZ?5w.!$+qjX։Tr'kv;9jžvWwó)b\rECg(ᜲ${ ў"\;F#B[Dו*at֕8%p>5Uz|oQ1r3pWM$މRmgN0(gkhY 4Ok}nDag& @hT-P,!SЮr) TAW[{=^d%g?^?4FpC3W;͟O]qç'bݞ*_ )Iyqa2D ¨w S YwRE_&?:?["!@iJV'2ۇ!mՖeP^"%j\4&^dz뿎G\ڴ +^~ g8#5]8\Z1C)9#LsEÊ`\{0Qe}eHȎ.`)6:?Vyv@P'! VC} Ba M 5-<wRxqs@r!F9+cjgze!i!jP{.81Z 1ww[xQQ S2oq9N}v|B Hӕ/ Kr'<|t7m>A7g¹DZvp7sTmM1zs+t(\#)Lc:C/*& 8P+! QV 'a|ݠ*nd]kwEp<~zklC"흁tt3Uc((?6)V$#,z//EBWӒYM@wp)LK4TNJ] AUĂ4u򦂓-XYs@A~H=d_/c7\YjU7rI*Uu SԐ++:-69Mcz(*)K:7G")VPH gH@pP4! ~\(je}2Jzw̕Wמx~iƁyU}}!ѣjo,WV[@=wmm (iOu]I[*J"ԭFa9}F/@<`|~y'!09w4YD#`P.?! ][)Jcw\k*!&Bqmg|[TLk˷j6Ηo2W`G݋!Hs@%wȔ@wqܿF69`M?sEB|C}5Ӿ=4ĵ+fCuR8ܸ}#,F6uorLû M}E@CƗClCQp%}Y[\$kTBUqWoTC.LE&de:@ 'g)bn0O?\6(kx++8}@ /w7a%m_$3#qȠϬi97bg@Duw~ZD4R'7ޙ6j飦3/ߩ.ߜ7T3 XR^JՕQ6FnORk*a4>^nƽcΆ冖 $y`fa!tӨ~3v!~}cVΨyQfܼ w7iȐ?y_s{3ھ}O醙oaՍ #Rxll/}';9x4a@ybi7r\Cf*CP3 f 2hLz' 9W2L &Lo?>Xq=Cwqy|'k̷ey*{ݮےՔ0΋: 4Z$ :0yEU:F5U|Ϊÿ]됦caA40 n7#G"~.{W`u9.LXaϝqr ym? tMaбZ%oIjn#Tn;Oagt`EI~wf3F[+ V4VGhʯyKBw+9\--~U2[ȎLdERRKq2(6'`"T@\‚u}=ۃ[lß:2r@ozq@ 8P)! Wˆp:Z&|t.WLBVt ,3#weSg01{I䮕^#\ qbYa8v>S2w^plv_ >⸸ [\4)k~osd 껽 Ind8{ZޔYXZ&RG $t"ákDu.d|$G`y &@z&H-f%fx кus~xMc_'DSx{-|i2s6P-!SXL]/`IQ"2D?0pXbJ:s=2f`fm;~z] j+xnԦQF$]Sp]6bҩъE_)+uq{+Q"SP-b.K V~xzxpˀ nMl2 yV{`Iȑ"UEqGAQ i&n^f7#-gp^%rA #n^gܫ7yhqk:]`6p%#f=>"fXyaQP_TVx |tu#_%ˁ["5P1)*?x$F6P Dx%3lh;ؙLjLM{ x{ )O2ll{txRuw⬱lG7!-GFk'{X>=8-XvJ:u~SV%`/i׽Ժwj+y܎ϘrHq*Tni02Q+X EmQ(3(@k4AµsH _˄ߗSc4- sNqtb-N $XpVg8dS1ˎp^4E7V87 {\K-hvlE62]i;h J$ݹq]Vİن 8yZ^o+5$*U.滚)-^apDuU0g|aJ#qu*iIUqY FbcdYHgs:}4 zPh0Aƃx)ỵ%氺4_2pŐXĖ⥔P,! VZW IRȕ VMoU.B` ]qY 2FH tO0>*i2ޅ6|+w5JV< 1\D {Jf̚j/en jzJz2 )pq8P.![T[51ǽWYu CT+-?lQ^%yo'^CCdjo+:=X8"]BCi{mxޘ;UVb-klFQtD vuxANB6=OMp׿IӺOKzTM_3 c6e Rz@(lXj)̤ iu7jB5%j@p$E 0\*cGҜp>ŋu;H=!Ϯ9RTjĜ(.. JNڵ Dt\7둽`aMC_۟S"rw3$\8P/!]۠F㷷۪U\1p⧷pH!^ͩ*yIՑYqᣌU '<ǽ,fϣ1> Z=Y"َǣE#-=A6 =jtʐ( \(g0Ö.F>5o#}J2R]/[ \[S'.S 50Žl{6tVZO&ie1'|sUt-UszÊ? F0<@VkiQhoTo,S{V|XT=V\l0qg:1hu (:1Xj@< $f};Ią#5RKzy:hD~cxU]RTLN_ay$ va=ua}tp*S3G6rE:@Y _LS{mt!26\[8P@!Ll+FV`sf;suϜIeCߟ@<9ab-$ ]#`-#Uoi҃VrkZAΊMdZ ]G\w7| ;dD1+oaF!X3%n,+a]<ɕPդ1`jhZѴl,D;\tS ZPb}Mڈ9*wY Di jݎ!ŝ;Q7#ee^aUt *B!vV,TVYoN w~#SfQh5YK*jwF#sp!ĭ%ivHu;`tL[YJi|/9|nB^7 nW$}l[cX1K$`}?^pP'!{ Q/XI3R|w\\/v%*p˾ln RaW="f=1c&i3n7{;]XE?8D V+ {kuMVe~jtLT oVS%@PU= Vq|klJkwֿX3t__SDWtlO{aWދG_UE-<[׶L/#[ؔx~?,? A0H%b@3gEvSJ/I`Ik'DP P3![! Jk5S5qKT2qƿu4E 6~" S9=dLeގ3~Ճ9z3%h%\*#srn0mi*,F:+ơjA}qVdڷdTj3J ]U}_ ᠭnMj ]LvJ-B4DksP_ɢvD$ֆ@4DB'yFʦgevMFKgzd(+ASe2zw>A)6œ{b @W nGd8P2_!Д2aX(5ezp3k*Xe?aHdlScCmBMuHA3˪>qM-(\k}7eBidKՏmxtR;$D"UVIt0\%YYm ,^KB8N#m{/Qbmh;]^[[i|sKݜYƻ(]MĐaB2׼P5d"U/ש3`Bw4+BS^{_w\UIN2˧>.cx1z>;w3mw# ~}Ohs)zXf/Цdt?KY0pǀCܲzB 6ΚbP.!+ { TA|{U*viT&_`͙JPbmϸQGF^5[(z)ʒcrkeI#߼&\TL<BdpqE՗cVjyK+A:Dٮg+âlu2Qnrz`>RB -X W_.P㵯+Mڡ5ުZ |HG{nA`! \X43zT&9mUºBրops\B-Y2Yb&3 l37Z@t]7YFj}9!pNm"Z|PN!LƔM[\7~u~x;>ۻ\wzm}n緐Gh`m y%"s-rrfsq8,Q]p5AUGl ;+0BĨ;* YlT& c1ė qwE1 Td\wW>Sh|bXQaU='z_8>/~.=&^GG ضp}[Ȕ |?6#,*˺sGs]hcW)!#n I9y+6XJ0TmyֹU6Rq]ʓn.Ye _2};YOLiǠQ:|8Pc;epX-7.ձygL@ 09<_]?%T>֚AŠ>fB=B $UݚQR"b%VinT1ޯ_J=:Tz*ؽA`ILX}k95hsqx=vt/Aю=Ʌ@D2zIiF_7g/ݺ#Mf^#l'eP+?!{HV"BxSJf*u?*G%&U#[g1g}5=ro{^,߷êHtjsH=Zs)(5Vub]:fiVyy\ɧ=@KaIyvƀ>~y{ݚ*07`(7lK,F AKg U$lvNI5&%Dn-uJU Ҩݑ~=SMX'?YD_O'`;u\G:P0!Tةr<D3k+3X$UeJn9 a>)Zz[%=R)GSskx7똺鹌Ym]Rs{w}_ó410F&s}؎ɉ*.Uoz7*gn`OʁʬyA7@N ,T{smQ*ټa,\/PJN-HOeSO`X8w@|^\M["؀Iy7RAC5y>C;(-ܽF^y9Vُ4:,\rCa jMhp^/w*YyUYh3hz?rZ i<69G"Rcq^Y2vJh5#"֛M;U,+mal ]% ^so׈Ogޭqπd{$"pP3! \4Msz/yJ+oSJ WQ\ͱz@ *L E&117+ńkIp/Pem!#yn+8+^P1! YJ# mNu⣞"R%^BQ @d _mtU6eX횱Kڙh]a^ݼDL3]r\&hpKuq<&C`w]uuɐVE9u9Qx" & 5=VrHǍVYK9ikaJ9=:غ$[[;%|2qlc]E7+qc׮ݭ1*Bhj6G׌sJ^DZ55@\p3jI]r{bͲ(s!S`|$8Ny`0cYTq"tNn2ȝ4e]* {鵊^ Kw~&c{/4RJ|$/Y9uSP1! -n0+T믝TUzܓ6VOJTzBCN-*7ATBސ71,(E.2V$p‹ݍ*1CL!uKyk2~,+Qmݾcp*Me禨Xz\r 7pxާ4c捬6x@]n'xS?Vť~iKLݍ"rF(mTmxϯw{{ E]^wI?}U0zl*Lf0E@/5߾ke21ca H[~72tN!8'քP#LQZz'P/! JTsY ;RRʮz}dԺo;ݪd{&Q0+90τ)& W7֟z >(pbpѰY۾mASkGFT/Jy-D^X/WC9^﩯O Sso<&h!؃ˊܤZUQ.sD3T@m)Q\Ն je*iqG G5_5Fk޼hʒ4QP9?s4a4?8PmTd:+I<0߭,I?NNzU=\Rg02t &C pDMu8Sր,Ў43МrAC>48[]NmxUkX-ISC^?)Q?o)L_xϿrIW l|{H 3QP*-K܅Sp98~pWJx9FRWzHOS%j'5q \uoA:= ېB\/;fy, <)UeP1?! T5I׎'Zˉn.jP^p *т'c"B܉.{sXsQ!Żw}1Ft Wh@'}d-OM#Ӗ[kr9X5 ]Aw .Bw _8u@7Jyܗ N'' x|%I`6WI @ xhB$0E))o oZ˫;fN[n$q wŌM2N UlArt7x\@=Tq5kφb4۞19r:~Ruq* Yz8`+P |jV]pp0J-%=BQ%pP0!T\Y |Pxַϵ28>Z\̦r4cq1c(h%tiڣA N4b,-\jtgF48 S*.蟅'WTD⨱@azTD;nhKr |&ݶo~KdfhHfijom IZşQ®U~\TZ5a_^k|]trz\ @MF8P =0$鑗cߎ. zWVIFz8;<+SrgӜ2}xhNz7C|-9pہi>:ꞵX+ˢ8YQ#F` vmENb\M_88@l, pcuwcW^ò1ws-=}D_a( W#y5JO{גּ_:} t{ujơ+mjIv R)cCKl(뙔V#>RL~z{foNEIFRM==ErLYD؀P,!+/]VXE2O*{/.U|jZ$E/L8mkuPu=^@(ՎYm>_:rGYP(_!{ ӫXh"0c96j%UD%RNvΈf<\ oX *, XHTy޻/|1ڤwA Z ֊_п㿭?`*ᠾ>.W'E, _ -k~ ћ/¨@ѶΜ!(lH$!GD뛘xr"KʒyzTfU(HDKZ7;xY.$߿ yxtm͠^j5nJU-dX2AһVy\ՀFxJQ%Їݼ7YGB$Ј:$R2ʹL,UսFfSE 7TȈA=y"zJrD#%@b\2#9Cw'R`5}C*#"[[DÙEFYW+*#H&f*j/.vDJ+6qYmF<"d4a8r)zVg\D:_͏b/B̢`"RȨ?JJP)>?G3 eV#MP8h5ґݷ@^*dp7ubN[ٞs /Bd XN]qZ·0`nJ`rQ KsUR!g!UPJke{;2?z4H/ϋSO~68hY@ a JwB1# n1buQ(-4RI@ k%T9Nf#[ۖ`.qLa߈7\6s@P0! U[`G R$"$Wo-Rk Rnߜ ׂIֲ}.WzXS/u"MÎT$BTոs[f&p0M:cw=Uv0 lȆ5 *h6 }S1`ēxzein*ي`&tJ7=4Sbd3x0jq̎B't>~◗7r.=VߜH bB j> 5R,p5e&p,RRlA<:󣭺w1 pQD/QrIҿ]lV<'u9 bhYdz0+*Z<1)Ì:h榡sשh *8B־!s[:X2Sϱ@m-ߖJ { hnp$]DayNKˍ.s3U4W*zl!R^Jqf.RO^=i:h07XpNt$F ;A ߕA7kTMMRJlw s2 j%ǹti;8 f&S*o[Q4,NF|Id7xCۆxʤ9pPP1?! Q(6!Stf4D3 :=T 3w]Uojz7R/]k bb7@7#>}imߗZ ̰pP0! wS\#A B"ЉWƸ+URTo|v~V`xH7:K9ʏ)T+[#i @Ç>{.q:'O<;7_{gZz,ڴj[=/ħ]?cShu_ frp RR!P^:ܧBUaXڹ) )Ek|{ ԥԕ*+[??l LGUglc%yP6 +: ¨Рt*.j*5It˕tۿ|1ʦ8otwwGWnYëЅu6yD2lrQMǤ$G??,`4.9~,!rC~ߔ|&kPcH۲p {KEA׺K4I@_RJ㲀~?%{oBvM.rLJj mThHF Bn5Z3ELo dwkF %#[@8SB@!^R/PP܁SȲ膨5OK1e_t#m h sO5٥a󆣔`H;sq!vn2'Wfz{.tisr@9)I柀P._ Ld|^6ZꃮhL{<ֹ{~o?ӻt\+Ļ9{cCݶEQTVv@0L @+ 4]kӔJaUM(7LH6Y#ܮN={;BF~DP@%%q8B@凙HX3P7\8-_vepy4&6 ǡ 脉j.ӿ;nUW+Vc=ˇj_~DR79/ۣdVkc.^FL r:~Oq&!|[2ɔ{<6ݿov<4 U;#cfYe=pP, {dc I`H B"7s5RJݴ%Ts}F"qWxj_I޸CﻋЮꊛ7 )oƬ9ZL16ef`a+YG{ -c;vY]Y8WJTX{t`W܉*@R᛿z1YT"zIѪ~ydoYyqUoֲߗowQ{Sx6_2h&>(& xH!FcHy}e3(^ ZCQ:l۔^9^6>xϑtQр) s9P/! M*VYVVi#ɖ<%*Z>M`=G* vH֘J+s-Y,Zjkjt4kJ!3L~d3 ZXϺO:WSJ~0'9g\Gwnn[s|N 6ߚ<0ރ6m5# ^WW}B"ѫUZj%븒T\gʩQ)d3`.<(`le B:5ԹFDifc;?QH9F!Yu9/Ǟ3On%L>Aє9 X 43PpP/!#>U١4WjWUt$BҪTP{MF]]IBbX B5t$*5LDn'H.m~9w"I?Ywjo=->g$%i[AQy B 'F $:+D V^u%m ).ÚY8ylIpJ(΂x~05Ng'IP4 +: g!%ī]]KީR*W\N?sBYP6{ȍ_ {tax%)-'Fd-cWso{ pC5Lh-J{^Y +%ĭ f6OA2\VZ 2\Sd& D!dKqheY-%yο 4+;oVNr 9(4ܜ pnB1jUN| .gר_CقLӷSK;dӒb/sC5TʹmM#4|Vtɷѿ;AWa9N_S LKhZ@%o8P3 LeAbDj]leWOw:?f5.\nt\[)8ItKtމw>vêjCԎd/``yEӸ_3d [$$&#\]X\rpZ[[ל u%I@ /yl  0yS/4WkJm =n t!iZOM^b&) FEUuq]uRUuJTd_! [-f֠OZek3rJ7M( E +p9ĄeG_:Y1xF5@/Ofσt)8RӆbBF%CzmBLcEc*5av p 7OVΔF P> {rQL\eU]Yutȕ9 /QJoNgP |vMM9Ơ0e*g^<-%YXX̩XQ i+dRS*KtﷱqLj*|kJ@P;+X/࢟ Jv%Eeb6Lc`0\,l#>Ct94aG쵮p+%,רL76c6ZɅEՖywSo{z$ӯw~/Yk@\? "J4fG`0/jȌ _&\[wpHcQ#HB5-<'ih rƞ.!\/ mxO/ZT#(KCKd#.h`ihxr98c@sQUAEV\ǯiLvVWrTƘ1&4A֔s a]rt$=b@*pUP2 , "B*I猼gcU%U$=2@:L| Tbbj:iC:\]ś{ "ag)%(T#un1OB۵+q 3g y-8.a}TroK\؝ 4și ֠[ LQDr1Q@{@ {BĂMJ3TQf/rU?ϐemf7?i(O`8WBLJ U t#MdM۪\DܐP,e_e)2Е{\ sK2ˣC23i7:8q7tWJQW.P(! DUQ"BeQhFVٯ8rScgfiQL*HAXQ1*ء,v4s K@U{Wh( PB7p/wtgP%qS^i^*5S"*"'CT:!#^sjuG-E o#\و!AXzc42F:z~^Qw ? b"`7E8`v?| @ Xr7P,! GS Q‚t&WqU{իF?(ӜɦD WxA<(|!rd_ &v=Fۊ35Ȁc8@q_0#ZIdWB3@Q Y 0L0}bΞC2P+Z-U4RWDjl3%*N|1.,1es0#x#ao%9)ͬ#PBza0M.+4T*` O'^ _y}}H^]0*`,GzP1!{"fR[(5 ƒ18L-Tu$SzoϏ 55RwI*}R_(P>6Z~fdA*`Cf#t~>'*NxrsZӌ|A1׌ ӬL Wq࢛vap`֋(%a p+XP/!O[G&1hR-28I*kƿ~? bo:%BaL>*P d/2Xw ?r(uB[1.Ԥ﮻=\H@:cۊ ^ebddĀK,2bnӼa\j~Z3KB:B7>P"?!ܺS݄ B€T3Je[竉jr:i[X}s`;K "ng\3 籅Ԛ2ژM/2*?4g%AG+,%cJn ?YHKWnqEjh`fݢ B#Иt"/BU]}VzsKyk;ͫKӒE(Q4ZZA q `P-!UY0t[ A?KaY&|-Ͻ,'J ة$F t kfn3,-7[*3IJ`2X'PmiA lR,<}UZmD75 =9FY =?!쵐s&j{! ^Fp:wOLFqD<0ӟLf׃&u!C~Ͽ=L.J%W[3/;}*.Z|>}mwTq'Eσ٨N$R<|fDL.Q#5[ |;>OCLhvߎJz"Ѽ6(tP9c/~Z6Yڀv2pRW{l)` чD%q 1_= vUwq쐦zӑn1X>(yYvV<7UMn),Kӈ~ݾ~wOZUu<_6vTK'b"[z8sqʳ,] bR$x;<f'O"2`J7^%cpP@_!Lƻ SQH}+o.Ɣ̞'qXeǻ(FPV_̚_%,܈Ln2z΃ElD'whWLSVngVS^;䌆\"TpqO31.E*VKBЄεˬ:.ߩ#TqД`%l{f9HuL88AnuQNňs݃>7tLyPD8۬ZrqZWoyj_~sv6I!z:-lP&!{ ۿX,%*BCP,;cm {}3"2Q.P =5U^]y Ĉ%L/ 6yI_KR|mVB^eJ<7]]JOY|0`RQ*fA^LwD9Ywn b~i7 $^fˮ*qyLV^eqFpݮƇ?ܤ@/P*_!ӯV 5VPZJEKly^[7ZN}(S};Y](Ig sM{rt8Df*\-q\Ν-U%\|yQ^Z{@dS(3+(*HxE\T8<hUJЭ-VJ&7d\{ %9`0T,Dž 2(oP3!T\ Vl.jEk?޻t+\;ך%/A*%•@0@ }GӃXz,xVaE+K=#=Hrtq=Za9)-Ӌ@ӝUHzAn+ ۑ5.Kz+쾁 `;'x*CH7h6knvb 8KUtTV@,p#P跱Kp'0yB 1wCTi,tL"0='I]qv}85Ϡ"k{Zc9w8AuPI\. @Rv #t"nQ?nYYyo-J# _PqW4VUg:ԙ)I^du*KLG<>_ drB5lQo%qX=RV`W*K7#:|Ա)'b߸H,On P2! +SYs.Ɓ2Ȯ7eSO$ǿjOd筩7΍_ ?2e^S;(-/k#qـ⁊Z3uj3&zx2i@ƽ&r| <-<#0LJHruHWIgyc Y(%:c( POXTa." R:WbLJk[߷^/s%tRu^X$^4)j.Ś"}0xI+MdPMA?auLja2"B0ӼQ;27 g9wIw^Qusv`ePϞx$P0!S\j$eѲ*\ܮ2]#T Ǐ/_:)#kPbq1v~2`}SMafbYr6MY)mȄs͔[# FCKѭ+~W ]U޹.=z/3|PsR|fOmD7Ӿ:+- Wa#>'h#JjtLW.jWzs<m"=uө1B%Q^!U f.ΏWhJv&יJ$K2JfLʝ%##B/Z/*q.iό ; }t bP1!33SY΃&Fgгϊ&8Y0zz <|H}9wdǘef=% /ӒNoԀ=މC$D;ƌ5!GUc\a:K򨼼~,7Hq95k~Z@ՀtkMSCq6sWVJENiPW7|=85rZTֽ밦ZAɡtDqN|bq놅 O'a(Oq'Sb҂ u3J5ŗjy_d2*0"9"Vэ,KJ#}hGn\}*wg< t|z&OUOO!+nD+(P.! RJC.F2/_RiYe̒WO_/ ]/قr9L p>X& )p~g:˳j`DD{ ;Z_𠘶Yς/Sp9{]jihOdmyG/Y:B+Q}07b@MxJ 3Ug*~^՗{˙%f-O_;<ծnjm_:o0pnD1zuJpA*螮8[xyzxq}} H*t@7xήUsǧb }Kldn*E>[iP,!+ wOQ 3NCh.ejNm&TLT;=y}7`L-I,!!(0S0AC"d"Fi Lp 7?>):7y< w4+Jğ{«𱡖g>-} `2 i0"n^nK*mӽ% 5D:n$ҫMTTLT{ryx&RLVUNݵx,=!?Puց 6A?"*]Ez%\9|2S,P-! R\7sK&\T.nk9#%nU 49cR yePdS{Jdm(7DshͰc@h> "n=<=g[e?CEf! @/dU4s RU#Dϱ!S~ADžDJur2m3`̀6ZXpix󞵗5̺qR|@BsGS|Qυ RQ2@6f;opA[k>1rO a駻Ut؋`U&PM`Vӌ+3$ssês\Z&ɞгi2CP2! /Q\3 uy[ℍo<<ֿXTzPEEy琘déM/ɬa|YrTsɛDU<T ?7EN 0W) ߗ;w,\Ԛ99x|]_%DÃai%7S/=:j-46-H{Ǐq':F3tJ4L2:WEpIN>'ǯlk7u5Zc ډ Ѽ8@ C4\=:Ε@YKgWh>1%}|g4+5;z4[=cwU8`\=HkD jqq7'ϸ ќ6\V 7C5RXVP._!&D_*t,  \n{ 3b=sVvP]8)=pb/vB];~T^^t5gGm 8n+jզ.]JW3SǛˀ jd4YO~jQl;Bfd?Ιq0f>BX֧xSP/!+AR[3+τL!#wwF  2/n̥Aj1ihΝoG d(_L6ɇ霨F37P{qY\_7W^h_^)'a/J")<19̈́KC.*f۾m-;j\_X%8%ͧVg@t3v Im^&U,VBo=޷+w( `"TcgՑ6rmBl[%E`V_f M8H_9@ qnp]jH4%dYq<D}~iN?"#Ɇ$0JtpqvU'M:hg$t`dp:|pM>miBX P:!LNW&%/j~OGhuDvBx".P8 rG#XM¡Cay؅ŝ(( fllH~N?+81ޖ0-L0h5f(I[Um2 ,ٶ2eԞLh`T M,U3Gڸp ǿ&K޷2 }p>*M6M G`j5J8pq) ̫x3B/b`Ƞ&*¤ `3~WÕxK;bu[ß;wh\P1!;XiNY1d+T&X} ?&ټ`RNPjb^zHlG'aYWNMKJ4`5v*[B!1 :>ctàQQ sg h!vhb F9kjyZg ] ֛{W [08 v% 7[5\ckP2?!? '15|Q?i(%k=|sh"fsֽt9eMVrKp3:ǫEl4䖾V;qPa^!wץ3QqD /lt_r̈S%cWХoZlvK+ PwU44rbb"H&`'N$iOD)|][̟gB}:W5WړyNW;\gp]|OQ /{x{P/"qNy&Qf Kv Ps=ݶ{?܀,+L˿J+ _yI n*{Oh {1҅ZFP^tKM^)dJ@JmZRAP.!VT!3́j\tbJ55sӨ;#籼sy>nCkb Bbcmw%a_~Ƀ4h.sˬ!3',;mqYfnfninP7)2 $T*2V+VppȫtrK䁼eŇۈ7FH+*JT]d2Āg^H.]Jwι d"0e䗛e\Q@ŻM).348 6JН$0TDŽR<}ziU}xy*zOʟŨ/otP1!\`$ڙǷ΅5I){]og_J~>uo.}Z N(x\'_,ÒvOMtpl az*HĊzTy~3uMշWz!1)jܧ43|8>;vZxz \2zZ]Lftqe!N)!pOoEY e8mLۊST*%T|W+:>hL?x@t]׼ 1A d \7xK Ng;޽2,_Ͽ,9f,(gv;M@%!q}\!f.gSVFSCP-!VQY)GQ%92Uf^D9ի~9A"RUެx O *|a$\-sЫcM r]/dq49R۞:MۆBƯ-^N2)3j %w6dUXa$@5|ZZ>]O3Lh:.s0h/t8-Ѐ|n QC,SBY{f[5VeKZ㜟@MHB,2*M`ѯX&t(2k^a 5 Qtk<{5[ifSS|uSGtt#$@rf@ /û#SP1!֟ة(,r}U<4Ҫ/zQn./7UEGF'JSa:}:JFY7 K+f`ԫ`!UsR/BEa0"'xݚxNkV;uJ=2J$O[E*KG\n"ul ^\gKG{zDdTMu+{D ڎtyJO-N5#6gA!p[=KJ0yn~%S\e>+r/P2Lavc57.107.100B6ҠEq޷ZJOjW?@CymfKR=t K"g\8oWCa @{]He`d8Ƈ?NB,+$ւMhaJ3#΢[ Pt: Rn6pNfĥu8|W`  a:U \\X!1]r%B?~%Edo:fb7?2@5"r^,0~Q#gNUtwbq>y`F9o_a-v SsFڔ 5;7P2_!U\ 8oueV[Oyi ? 9ٽyXߐFw4Y "։hl(GI>\۟u\.gq҉Q ʣ|5c;IAK_jVPشf0¬кU3USQ O1f@8 @'@Nn", d|?)e%Kd!Lcp<,.վ/YV[꽷́ÐX8goP/ \255xzQb% .rݡkgx,yʨ(tR=6zZ̀~]*NGp-@D,?+RxˁOl-Vhx} +(Si388P/!mP 38j=cRU&4_mO7"gIR83 އtHI!z4o g]T:6gR/)SɥKGjBUM)zXۋ<G UIQSX_Q%.YW~~>*Zq!p<ŏ1eCXnZ!!<eRSW#Ɇ$2y1  *9RyfE.p7;1].4` s7PE!L{h:r`%3WÎW꽵szn|x_#xL+oZsLL:?ꃧH*)k<0U~(//1sWzR?D ?ï}%͵t9#X;!irꮉkӭL5C/cC;vw:+}a(ZvDN= _XAy!BxCEɠ5oi‡|ꒉ xeQ]𮯂̒ hq'}( D$Y]f(Ӈ5UN||W>7Z]\;"3,DߏJSSҴb!@pR% ۃ2&g̀2&mga7%Z~`G!'b( %׆ TjIBPmihCfQ&Ǩ N= @0rxxoiԑvVt8U` 9cF28XPB Lf;sf=O{Nz7 zBZ9C[͘C? Io@BOKEst҆#E΂2&MRu-5:ǎ1Q_:& ZɟW#NNx$)PQQXP]A/ c{vioFyoHG*%*isybP(!{YYr蚩jqMxJJDCTWS^/Wv'a;+hQl6򓕕<&!c= `Gqغ> l%N݇WEQܮ܀EzֺSP:`i! Ok1Qstr iV]뫦 KSm4HB$Јt"W͸))mR?ۼ3f&I͆$8?dqJEU#w(lTYuSh5enȒfxz|ԡuo'HP)!q{RU!DVšPD:J.U&^HSŸJ<ӍGV.aG+If1(%EFK&Ѳ鴑C|(t߼tD  Ah.>&X9;U6+1GpXzk\8Ib-YZVBAXM #Ј"C;j^THUCwMVF LdcrZOIb&^U&,oK ]q0+8>zBcWSB004q DLt| EϹ`n"rȊ:"i(q.1-j{RȺ4;! ,a9E);"G*䐖 XPzC^7Ex^<0|+sWGrc*.1Dz ^kY\*RFM_<?\0kjZd [H)L^Et;kЪuu ՛쨧l)8;;3 hv40uuyGR ɂSe>R"#J+P0!{UZacvB.{e˼EL<3o_@_APUjXE:^@)Md@.xԫS#%bAhA 1 sƪBШqbK(aFMp3cxNӺMTT$34Cmü%W46o800pfh]i[=8G ; 4zfe7XCuɾTQYHv[ReuMS5=[6\̽$Az[,Yk] 0-jH4Y ga5u]|\je%V'pv84pO|Y}<.3f#. 60rVOP1!ͪU\`3]zڲ.L܋ǟp)tzoXq(Ƚ@YAl *3RySF351F҉ Dc86N`Ɩhb~&zv`TT 9tfxWO;8\p.9xJe·tYlY-UD鼑`%[z/w&;G?Q !Mvޓ|g]E[Ҧ|nE{M9NjXjt { [-h L40 6Fqq* H5OD +0Qy޸F]͎4ɺ< lI_ C 04Ik2P1!{T[iJM BcЙ4BMsw5*Y\wMgAt؄ V:"( c ‹PUd `)n@BfZ8ėd8pAu)y) D6o$-߿s{gs~ 4XF3XB?Ȁ ^3nM/E8.>,-A0(P/! RaL2DVؼf5{eȸ %j^Õ۵]9Uww+(8)Dy֨zR 0jj|5d0tE/D |+rzc`D4@CeȡgJf}1I2~4OB/fB|~%\E,vc QhU=֫4mOc^թĐbM B"t-⪷^RekSwXzrY -,\8x upb9^3UDFl*$8~ay/FQD2ay!cqn&cnov<~ U`N=Ba0)P/!+ Sl4&ѡh.㋜rۛU'y &.[!oZ, D$=nJ(2l{r#A.u$dhaGT T SdTtZ>kos}3|J%N6IƨFVQMn П#L/vc<[tӌMrc`fmDUrH(WOYL~8-~m9rAEz!ĕRRڠ.6[@UJ޶=gL }2ҹD@`L> j$mN!woW"8ohA0NaOb,* PA!LŒ"PhOHQY3j;Zӹ8vu.\{z_}޾)t;NkWKԧRJЎFh(bIZ% -ۯn|}/ =!EpRv#UȪ $ UuY̽VjVK0XyemړC1Ѣ8w%gb%v c͗pp乯i<]r37W?1vx72b]sәo@%MUjaU։T A!W: -Ey6jWo-,xI |9T~PDξTZL I$NRzSp<8^j s%'0gL~[00Scnu:i433KZXR:y!,i ~zd@P]B"ɦ]*rf/GB 'qu0(H;prW$Q"WU+T}Eld +˿⌠\]rSbط;}=1Δ%:gL9y=i6`P0!T٨9 U}vJ;ԙjJ Eӳt]A`2b,c0:z[}ЧJyuD-Rs (ѹqB#`#AНȝ!*  4EIHځJ!  O#/z_Ǥ@A"oOKr{XvX_TπJ,[i;\ZNfM s/Bražѩ`l9JsRVq&Z{su5 ]?8)\U|iU'L]!`&zEfXj RWyOCOһ/$J>^C _p1? ֞8 9P.! CTR cvákT7)ZV;~ d޽cg9h9}IJ(n|eƁ࢛{VF1oZ~4ZqP|̉OܑAQ}ϡ\l;lgt贇){}PsU7ݤ%FU}KOqϸMs_E<U\=?̀ƾLkw0^ZV\Xd ǃu "~7xf%PjZ ˹.lSm#!H&RϹ޵<|P"utTE01;l,Xy-#(f4҈4@WS(%P)?!˿lVQ 2%$Ƚ2EJUIZV޵yA[֤H{T! Bbk@7eOKk][ڤ֋ˣ̍P A&=]o >@1}S}ez0Uׯ~+Pv"$ˡDZ w2EJUǭIZRo6Zga|[ͨ@OꀓhG‹į*|D8$vqko&5J0-J)+;YHpP(!Vњv!y{*լZ{8ѯK/3 풴f||iRgH|;W(иBCx_)uP~/v{ ?|&]+"vQRPЫ?9uO_t<=()9\%'um[cʑ5k~ %JjjHJsuV\F+e0bco6_ζҘr S\RopP0!]ٚ"NߥԫXT&q<^~„0hgc{;5nk3.[Щ64=Y6C(31`@ ([v~7ZЭ릺% 'JSSyGH ѷg=^IΚ9!ݯ}cKeQ_x]ԒSA)8>^=/^@f8`M~9ǂ8'EP:ns!UyT&q<^~:_zq~JW+DX.kx]&mK@ pa @,:7eP/?!Q64 #O9PxUTrKn(|L, wj6uԈΕhݵpzfz lYm 9a`1''irX/b(W{I%2{M4!:NK-]ML{1[jiր;ߊqգNSK]et=7Z٤+>ɴT3ՆQGh^K‘!Wb4lG\NHn7~>\¢ ֏aRF}WŪ Rđ%!X(6 vݚ':kp]_׍W Z(2ǃH;GpQvfdmr8 }pӶL'OI'Z*T\^I?K~`1(C  (+r }j6"-p8AI3C|qMm=+ wwx bpQ[Ksj=e*|d, ¾&ccTP-!TYY0F9 aӥ횩WW+Y*굒RFW]qHUg!ZKK{UR$R60J)^_<qnd&`x8=["N- ,w9{ltRNZݖn%6p96p=7}GGU5cNs&WLҞ-k@'g@Wj_Vɪ6(Bl'KVUk$<6)ݢ2)Qđ?1JijEEkK(x@/_|,` le+p9m/r Ӏ=KL(:*}`24nJ o#P-?!UXeCg!'\e+#Q**V70 рt*IqDx W-h9IR]J*1I 'szZr:U_f3b)s育fmTTc*%Uf @q,$SŐ2C F.iFŘ`ss7,L4gO(UsB SNVGXT"U뷵vڰܳ" [``S=\ iH&`9'FSHi[AGZce6ҹ@9Y&& "ڛ`3@<@8P/!+PYY69ྯ ϏUwUuIV GuXgMPSw:ާYxS:L, }JMHqsZ:59O8>.LZ˱:*qϼ]`Q5IYsL?ucDiR?i*xoSn\GwO=}1V_s6=^۸dJS?_ՌT$6qVZ%CJ>07tڃM׶{sqo}_^zg_b*9V>ļؕ1u34h3Mȸ >4$1HI:)PS _]k!2y:;a9c(\ʌBVZO.98}a[W+ YBni)؇+zV|O7\})syz _Ç%NRJqSt# @/j& ?r ſP'!{VPT9!GV3MRc[ ާO4϶@P,_! V!,TIUAR ʖ^4;Ɇeo&ēwW2kܪ*}%^jt;)߱"3uMiEM_k N;/~eVGus||8[ÔÀe4ܱťn=>(?'3Z E S WsQW/qH5WNqBQ7 ֠ltS*3i{x֖!l1,QԜJHD .U*;7L[i15 a;|}egj9@PV!L'/QQfemW6nMZڏߥjsgjTW=ۂx| rݺ3/NmXn #Qd8tse2545¼g~]džr3x~}00x^_3JHz̚/qjgw]%BYT 1UVJ,Ge}FI4ef9q#a5=T֯'Hf |z2A&IԒFywLgm$rfXL^`U©cDGxLƙ"_Tg6bt+4ܱ sdWqAJꌻۯ7YқS~w=_ι_ӽWW_^-s{8=_sԀ5/`ڧ<W"{6e1'$DA<{~||ݏ7 `VG|Oz}~<_}[FnO;xcFռLc#4:)G`]}YB2-|a"|)ME:K\sC\q4񒸷ƕ֠X iܢ"+'RciN8qjW ZSAM Pinz $B@rZm#\ѿsP+_!{OY4"bLe/$TJ$A?o[fiAagYލ;YG\mr?Ş7j9o'$8ռu9$yܚyҍxMM+H(t uew9,CYnkn/"scǂ>?9C_)iQ 'ȦڞpQyQE=d"h! #)w^HuuI.7v/nWdYI2 PtEIdv<6eS`vV[-X$][[9&eS͊_NB2%le$ D-nP._!Saj*e!ɚ Ua.6˧]PYS_,"k'YH!;gS'EcL&i였hy[B`0'FzQJ$*!Ϩ XByGJrP~FN lu:ZF4=t\Gd֠#0@hu9~Sox 'gp?Wb\@S$@Vx$tι]:y@';pI4cs1SV8bmLPuoX!1&ݲ^hi䋒?KqlHT( ~FxI5xP1![`fn|{ߟT. jN*uMw)1>؛#T\ܖ cTV(\t 8 d+舓1bv'e.Ojx2߶uKҸpz[6& 3dJkݖ㹅V{A:=z&= 7Gx&oz(KBLmʮk",d8w{ߵF]]"ldU{x/`qtX=''Xebha)(:"O06 l]Ϋ O"c=*Xۮ)`sB$ oiHGcSW?BT  5vO^P1_!`d1S]iU\Z*[ n]s8OMmb'XZhEP|DZ?6Cg  WK#GfDP&,R]5kyKSφt9+oN](n>N\y(aKY=]|j5`v.MsTk%)\ 9ܵ÷AtBDII1~8Lh͠8`!Ȗ<Xxl aocP1![_aL5 ޕ_^2+XJn_ôuT .3Z17Rm쏊JԅTkX`XNpYLG! ¡*ZV]2 q fA#H$kXO>WK ND\ 6JNuo2'̈́fԫ+u+@ypNy`_1 lJ"+K.uo[ҋV*+:ֿ gEЇpcz1c,<}APdb* }u)H9;z3PDwQKe769x=p7Qv]vr#,,IGH=0( .JzgP2_!~TYE߷mec]$f^?VC,|[ǖH3N)`5Hg͆Ed|4q{et"[t!Z^0"]@j)MU\Lv'IķK|: p ƞu"["rtolh7~,ДwfI b}]A `Z1Mo۶珆Fj2%S<׏Uaq \CĖ`l| NDC▙)R;N_\ٰkڌ KDByw,|S_][~=G't  ELH8P1!R[a%A޵ĮZ.'h.o2c'޴;J5JY ՐR^z!IC Y~/u]uw(?w5Y(lem`/Zs8|mA՚\ S$:^ЄkiS4DxyɳeQ"f7y+n<nQꮲV*[xV-wP0!{RU`H& nx͵g$(3ߎ?ހYְ.nX܂nbHު vEe=ZY:$*iPDK4` GW92Fr}:IYυT0Xa-aSz?`1On=(Rx@@l+H+f C/ysu$E73ߎ?4 .#^`a9 qxVTOs>I`liReR.UIZ1 2v(#=%m+-I.#k B<. .W+Hjx駊"z:L5}6"0qi@`{H%rz kbApP-?!_RSaHUBfx˘DfoE\vW>.}Lr䗳֐"DDcB={dgP"dfW(f+Z]3˗{]tgxQݬrvxk= <8ĝ<h:;xߞ")x~GNӃc V ijZEHf '^/5QW5]́#ˉgjAAQXQ0s& w9.)JPLak`6}xq~l RmkTM<uK$œ phP/?!P`D4"DW^6@؎:R@2>EJPA6f5 v(FiŠRѵ$rnNzUKzEb(>ˑ9yF#{͉b pzOyK'm@ݒ@/4H46q[|}սgJTI]zߟ5}J`KdUרU+%^W H :䢘x6:4qFp@j1B+xHd,y.obc}#zkjdc4Ň[CҎPw@I_4jP^P/!}P EHxEϟEJas8*E^OѫY]De_9K".YImcKr4\2DEtV\- @DI(Nwg%<ٱqVDU]&T] 1!Un6(b5.]H(ꎃTVl`54jeTۦqC鈴˜l-xە :xVھΊkqRU=JPP] Լ4_K68V }M_<4uIȌƍJo#&C^wYadhmMƌm8Skzr9mβO(n,2]67Ino .0XGP1!vN41 ۡ{*2rњ-Mq0~et_-@.Z}#BT=-[n~;7 BD3㢁_HPd S.Qt= j}3zC+ED%`;MQxQ~2t{1ix㚩Oen \rxa |8 uGćtA &wh:6<ՠVي3ؗ=5 ko 쉅D "`0Za{dL-NTθt)O1\=ooNq䌚wkZ2kB=F1nCTBӡ"J5vbKKq|ɿ㬐}8wt~%ӡvkǬ1Gnt `nPz3e`ZR R \[Gz* *yT-ѵ̬&s2H-b(j(J'q=dF#7O?n&sF]nSp_#hwgY9s@pP'!{ Q= -75UJkrdЃCz=WtlW(-ߩ9H!-L1QomJg@0b`*yluA[:QXv/b$ؾɁWг%kyXK|ӗ4.csI=xѨ쨠ʬ@ٿpZqE3޳j Gw0'iylq<۱0L99|Zއ;7؂jMoURZܙ>?SGo>BSURVG&yq492pP2!ajg R.*EkwYrn}A[ Mvmpl-R⨌)LcrY ˜ancYzzXˈxj(Lw w ;tRD h^1vS"f:vb^}6v _˷ w~2uwNQk +J챉{+D=si7|fI2{?#E<}/l%^ sಖc(k[|ٗe=Ak z^} +9bV0M8Kx.MI*\&$~%>~pmͱ-˘@Qˇ= V]YP2! iPGA&j{ozܙ¯r*j$;rPe“\'Nm^SDX/ ځh*f9\FQS\XSaRy,tLFհOrBZ.wIt6ms@#_H7N\կ$kuh |(u+"H!wc߭v~}kIm-/Wjkǿɜ*+|RVO9 ~rpH}ttR/L: 9L  G14b%b,`OfW *d& npiG7t) :P5?! Z)pEA|W|UuwZQU)ZRhk&\ڧf-vYBeO&:d(dL0ôh.w"Z7M9Ip)g/IlTw. u&:g+\~3pZSlݫn=x,+"U$柼cpE 7H6CP mS3Woڭ'iӥFkvр8:W6z^[H6o6wǯmQfS_~9 SEvBUՍAkHyto/Yˈxxc+y6WڥFSyBQ8n1fMy g#S-9_eq'mbi84;|lw^=~]MmL#POTmtSjk7P5! (A'Ǐ7I2%J^yȹ]E!>sS" i jh I#So)ugD"p^p8wjL)36cb]_Waݝ]b&;/C)**qzu6W֧u?Nӵk-ͨ"/eNfRLrm)_OGJeEOy>@ AaHA3xtwU&37H"1YibI<f| 㸚 Ğ,/eQMBw!|^^^ohBP4! 6"BT.'OY\QI@Q,xf@sޢ)f&d Ư',*@6 JV.װZ̷yV= 鵷#lrmZ2ל YMS%m[H&p!J̀F`;@-U+Ջ98Ң|…ƐmQsS7^{&xWhE]ֹ.l.3ک2{K<>=oF*33b&Xt"Č'6vUn$C*Cq~(vOiAԆG yNuZT|{߶Zi sIᘑ9Ϲov"@ITMLW BX٪2'L IyJiyqTK{v4k2} %I;V.w,gJ(}tg:T:h&P2!U]`jsY ^ {&%]J T \:ħ7V5I*^Vk-+5hs8Jj|O0$L\rLrudb 1p/Fq^1sG~4݀3gb[;of`']M@ 2cށʎ+sr@|`%܄g?Q]>,(*-d9(L_q=M*^[|eojIZX Uk6H~xAJdmy20@h1NQ"nŒ[͖v" * X5&h_2E $Y u/:P0! ?P[i59{xiorʹUm9{bDXc@ԭpTd 7y@ %)aX- ؈iE=-O@}'N<883Q=5Q_?YmUVu>(J*,:[c@FI* s6rUJZ0?<ά H" Y|񐅀Rc˜)ƃ7yXoj2qذyY:/(;&MS/`it!l]YUBzޤE^5{yTծj|٘d>eLA&5 Bx>^:?4 N][1iި22MtU&43 }rR^39r1b°n(ss͠h8r1`.6YscK P,!+GO# V*=o]~5_RIS#n6C&@^fu{xZF,ImǐlX\EHqNlN^~7)o@>E}lc)7焕oXQ*ѫqTU&<]`(@b0Ҽ؈rQF^s* М;-_DknUqM˾Z0,o:ـR)a=5SS8HPE?!L QZfIU!5f]u㩧flo?׮xN?T[N* ,F!KV#gN*dLlS+^Wl黄j>S'7mMa.m:/Lh9^پUW`(չluStq.߰L 5E%6DEcv;PFa?:l !?r*}#:)RBiݏ?ds˂,F!ml `cgb nQEb޻_t٘M-?'?8M S"~{&g]~QD>k3r׶uInylkKkZVk=p6ҡ;@2/mQ@v3І|/ `uqȵ,7=H{whIw,in4a(D_NūB=q4|(9N3Q _h;? ř\~#Nl+mpLnٔ{D$aP:_ { Bd \IWxNW~C!@]$1+9gʛxW;f!*):Xf`w4lV]Wc.o \A \I:! B%:4?) ~Rp9gΣq hd-9ᆟ@F{sT&m>YeY5zyE=ZwDŇB,ִ?|s_Yy*htq%DLMsQJدpI]`+Cϸ "L{y :Tƒ4ɬʝ~+Lo-V_c/?rQ1l[' ֚M]=tV7ZgZ wݪ5/1 IÖ!) (2)~1mƉ♣: {w-*x{sP0 3!АtH= Ba!Ui~8Rʴ˫ze?: Mh9펎EڨXƹ78Ob0 YI5B)J>w tPtx:0!a bPETrPwھ~UM 2!Tg[n<.66gsȉJu%` j8BATz.k3鸽*]GWWmZonux8=IȠ]5 ݀m1O0{_X 'fg4P脺D\9at>dR?=R+ba(aY5,O47füx9J;EW{ {AhZMe8lPQN%휊 )(BP+! U] B!ИNKUR%C㌽ΧǷ#:Zzþ 4\'F_HC^֞ l6G@qD@UH+0h[Hcy9#4Bt!XPImyKmehLIt_[A Q脺n{2̕ӌ'Kp#ƴ+rmd4(sMBЉ{ں7 Q?HB?;[gU)V@@t V\AmI C0% PqJaP.! EV[aJ} BЙNu;q˼fQo5Z@1*<лVfxD 18C(sٟ%۴-䡓9: aP{[ |z%v;#yojh[C5]v]Ń[>VS#:~#*OpDnY]qf aTZЈ]qN9ZKFk*޵y sG NW V?yu)-BͽMn@0 YSɂ$JLHd5m|(UZS.hʂCEfqB>Ch.Z8 63+P-!ûUڡ* gг^57tG-Y!uW'b*,5X څo}i9:#`."qP0ԋa;DjI؟ 0A&RIRx@n,M. Re񀦙*vXK !(^2 89㹮2dMUKQ`R8ԟ ҹ; R"!}D,Qg ,^ck8ӛxZAfHP/! >SZhz M|*[LQ5_f5Fn\/^;ėNGl50,cZoH@ *cyya ETW~p1QswEaZ/C`3W0` V3 %y䬢:?1` klSZ uI ƿ3~cE͘~B;ɗ7"`N9f~òRH*hM”9hv@_T^)JZwt bch,w|4or\@ Z<m0hE6GP/! ɨRXRdBfA/}9ĪUw)%Lf_o^߸ 췟Xt!faAwp)V#”]r(OԜ&ks? Jb mp;R25g p,l Ru^Z%/Juв"u՛R||A ov SyGzaQ4K4Vi|Ms]}_7=ҺRJ:f{ʃkԼW;܊AobA-_:fbsg[Iwǯaq)5Wg$+*.%`<.Q sL G^$%B},DMڳP/!p9)4;^gxIK+|z̺ Q\^Ld QG.?0Nff# ~dRpnb^`\<2jwMs53W޶l H ᣊ rg_pUyhϙ8b0y׿6<<]8#fFձ"É,v#ʡ5ׯl<{UWL2][e`aicb{|q1o1v;_\{:wyt -C2bȄ~W%b65Z }bQ@dbEOˬi\QU}xx S<,7HuL_#Ev9'.׮t$K;RR\kC h#Ym1ue׳?_7'MwUWb/v2ǨH" yi,'&vkZn⷏bI>H>DRqHYCplRAkX"n×_,5 Xh- B"АZ5q0{U]sBon00P)!;[ʀU%Ш"=D޼u\dj=ZZ$_J> 5)-O D+B ɴNoj+E]ɤ£4&N~?y2vDZİ׃ 8y y7m؋lrwg4!lp 0g#y0U7X"Рt$- B!Јt>C7ʾh]TGT_W{i1^4u#tG1qnp\ xpGyH5#06mV{e^̿9U }^CV+-WH (P(!bV$(*PD:ǢK܎gK]hb9\ĩ ٛ VpZ } 9t,v)V A_rsںk."E<~SM%?Sl}&_ge -!CLZCD*x7xS$K5 |.ɅÈ݄9'Fu],Պ޶i;4CYG# )9Ҡ}yw uj#]n@fY`CRxXgֺW^P,!T{SRDաh-֒W=^\QTgǟOzDz( ׊5nVD98A^ED6CR89Az @Đ!`oZQ۸ ¥7wpaz !PQ3fx6XHIB*{Д*f3̚>Z@mOw8[Z3 W{Y3q$4t@=& *")%N{~ *P/! ~UCx ̝ݕ-%Dq[tfS2 ~Y苸7ZIJ7_57^c^&Ogn1~f'F`KCySG>>@M$yzST3^LH<P3!kSSEpvŲ@}NEB6>໱Kt`x ހfՊJЖ]FrD΀SEs ;@7H`o%Tm@OpQs,mD!=e߶/K5^_'}nsrKI)K?Wszh@ ?yxH*\4IH+̨SL%#p"/ w4]\ʏo|kP|8rmʉYqJӟB/oE֢Mbp CwJY,&;%D)@K`Oh@O n z wui3{@>P3!-SXL cSۄPTTy=Bke)EġXt\;s܃E#Xe%lxz?2*EQ {$>eN(P!na\$iz,kuLmCT@hq aޣh*8 {dki"U,uK oՐ47X =}pHZ7qs)G!@$&gG8-Q% ˥J`']ͧ#qi>! Z9:=*=saWj5)0?R_.F0SXgeߣ]P'V!`G@2\yfpP4?! m_\RSfP޼xkmT^]K5BL uCNԠ@:j׈@vЌǜzCggz \ C UdXCE;mծ*"bhȁZqp# kH֝N,A %z'IIe9@* 3 7  ?i ofqx$u/.E~s_d_?gU.X+k /U[%3ݓO9, F8H]4"to.Io[;r- ؃4xA2"W[Wh]!L@e$9PwZ@%UqRP1! R[HGшt*=5ZYREJ2۷?=@ɠԊub,8jNP6s%9e&iP:MALJsN݀v_XH.bN}?Ń`~@>`0k VcRM葕mHKA:xV(}ts`Y$!&Wb]֢I-,z܏;J WGenҟ)rS_y_h[axH:P-2 ^~b(ӎ4yp Q!A&i㤭?j\Ĝz_TkHi [Pcl> Qh4b;cĉ(/9p"Do]o{zQyP ` ?b?-xn6/2]r~ʙ -Wb" u-P1! tQ[aU!Bjx'3Re$bU ))Pd Ԕ92w?N7_%eȶCnst !2reK":*l8 oWթZil M #fϧ7ơ^]RF @.5>SnhܱEm,DY/P =D**7ڴjrfp΢roZTU21Wϵ¬B,RbF7轌 xUa|]ݾInQB\z%?KX`),H:s z xהI#9d.o\)\K58%5~+4꠱614`{S8P+!QY'ǡpB'IJMnSuηs<|5 i$ <ƨDY0 % 6cpcRC g3>˺4zƘh;JqM+HjH 7w-o`֎R˚j?2/v/ A`maL(P2t"= E1xNxRMe֓.ܧRX!˄콹MMʶ'04 5B WH<r ʴ|&W-<JU G7%SV?bpP4! |N[Y3,3I޸YI9ɟ{mYq^FuhUAX1ID5Pcnԕ0cѤǙl(3[8fl j7_PނӔ/j.U lEeFzdܲW`n0䌪+Bo&ʷ%\gR`HPV;h @kY+r,><3댺ēKlܨfئ\jUfkOQJ(d)v 04m""HtBb*K& s^DH>Ӭ1~Bװ G zoءB-+Er_hFkwкY@P-!+kP[YF-Bbиz۾5~0Tׇy~zoòiT:dVEzjkю3;_o߀P=!L_YR=v7x?_o\i,=dyﻡ~拻ဒr)"©PXY ѰwIx>kB{_ʫ[vXE50A'-ͣvcˇ.AXv̶ ÿt{$Q2 _DmO-BDz P'!{ ϷThr!kwYrLꮪ\M~?Qm x!|T*SU{!1H@J݅Ļ ]>7\:j*w>q1dcVVj3p$p\8y|5.f| <@#P]v&h+?Etx%}*>9 * +.UiUKɯq)^t3!l\ &cNתpgoZ6@ 8 q`M2P-!Bn9N㛗*V^[Ͽ_̍~FMGLiï쵟9z4voݼ36$%vm X!햵e]cW /v彍6jw Eg9*EB,(QٍDQ2x5'I*LT+q'cx'@EɌ'@'*@'\|Hx qcќZx!SP1!+ ?hD9^۞3EWVaszpap΄Hѱ^%xy.h9w%E9a da(ݖԪ괳yP%7_rV#]az3[S5ͯ$R/vYV`ºTK.~Mi^l969.(%dVT",52/H2F1(l YC !n+\B( m@h'v75}@[Ov%ـ@ (yuʤM[uxPN_!L8ϋ8-]͘擛1xfy;]~s۬s ]jq%IRNXܨ&׈?g>:nFGiJ" wK-Kݤ=x2rf=洶8 #mTx%,/\ [:߉[]s`몿˽v\u"Z*+Y$h&K HBæAnr2rks?SYx-q h0_(,v km)ʖTm;"ЅYًN+1Z*xuǙkzWxn{{@z8p(S0jI)2o 4<(c731sMǚI?^!}/>៥mo6%ƌ.֥;L We9`sDp(7"skѱǾTr~?>Cю B/r6J h~mT3`}4mghf; D`nUVKMluf3gDF,+4C]*=1X8PE?!L6 GA+MͦMK˭gU}]\\ԯӎZgβ1ߪ/nwG5 <Ʈu: $_p2cDFm=5pleĩC79 8gK_J;n1%3PQT y,~UDr)zꂂO=\gT y02$Jy,[='<Z+T-qEIAɯ }0W/~SL!a&#._+뷯K%@wAGt rpt\HhZ͘Pe9qWsRI}n=yRq`Sϰr!=C,ƀ=9>'6ˑĊӭp_rV~I\.J uPG !hSA٨7)*u\Y&KTE\s㚘s f4̦GucVuo׺en;{ᯗ Y*iEb$ *M`E IX^xԴw >7QKF$$WblUj njd vd=<3>IolL '߸C'8wpD,͡z(,וt6\kҭheB[ʫXʜ}~Z+N}/P{\p CP6/"L}um$B1`uȔ8,H-Uwu{7|cjZh?/Xr{ZBJʞ""P1!AT!4hkžxkT]%])6~s,LK;2W,o  0aQL` k &I2^N߄.^uuE.ɭaI4)xEx_2pO %Q-zex@bP0!U!LE1i79ꬺJP.߷}@+Щ7tB'QPChХ2p߯yGc|~=DDCDI[\?x?r־?aߵ8zUa-d X¤WO!}+CtO %`r} P/!SR!,uI (xJɬ+UuUʕ+/ ks]ƫ⋤8o8k(Np]L!"a0Pl͜Q n^q ZվcN`e7!D{Bdž 5 5h ¤Nq U?oNZ'AHIz8 \| C^=.-4+\TlbKd%Li8D—0qnClXj 9r +9;1xHJí#Jjc 'N˄C|qVTLmj$GD꣈; z?^wքvRP hNaPN L7D:Df:5f38.lnYtWH2ҹ̓r}ni?MZ`TPf?~WO@ۘ"T#> rB4>B0~PIlX+ z,VD ˣ{Lic(kdc^ziu>_k~ r4xdAy\IZ4AM:rՆR!Nqnn"B8QRRA ӱv+qBelFhh S9?x)RIh[f;sf.6cǫNuV>|yoHH 2v]]R\,?.=WM+q)+h]6}uuN C6YF3kKRxmښTT8ŕ>'-vEDFMY UB( kdcWƁ臀V6T>i?}zr{V܋bϮ2d&٭hX\!*:N$u<(ʓSW.41-ξPLP+?!{mUSFonF57U^g~e8[}4|Nr5ir!.@,(G4~i(­c5ZL޾:x,1ݬ0$f;՜| TcexE} 翫}M|9˳<~2:h+SK'+=A>> }|xRX*Gt0CoMt*W_=|~Ḅ.^ޜ(Abv[,zjp?aŨ yc2j5CT.4$@P.?!OR)ns}Uk$Œ2⸭wB~3=wى+i?~Oto 8P' U7[21ԙv_^73W Vp2dzsP"qaRc*0 ͏U~hc%^ƣ%' DCdtW3KWl)mo5u*d+]x+ mAٶ[jK7=Xƹ,aDPJ+ zh':  B l%,]4+qL٘*EPS6?lmS|g_zþP.!@oRf})u>y^\Y+*B<9`VJjM Oܦg̞~ =aM/a5. ̌ownȊE!P9h)_'"+<&MjnX0߿ ͳ1=[tΆ% ]&4IHq)m('7o6ļVJ*3TD%uDEC{Q\Ƞ}`~&Vݞk޻e58alo=a94jr/;nx/Bѐ¿ zy``8pZe–_}@P/?!+ S%'~}/wks8? nmNANoDGF8ꅙo?)0?uMD+͞ĝ>_ob)kx Lz,"6#fjxCs/W|-ZJ~-A D{T9[,9[၈3F4AO ։O\<:|@}<@8m5TseqIh3qFPd LF}N"@͍m# p !!2}}\NΗB ـ%/S@;˖ki K VzEPUN+n'P@!LXUưۯjĹ>wǶ}k'<ƨ?<rBzW}LJzmuFRP@vW= zsWvt# ~z D-u! >'ޤrw~~D7Im{ǻ%B3< pPSzeNEYj JǥOc!^Xvo-Q4 ;E9Ϗ,*~Wygyhan5GA;;ϥ5dfnDWJdF8OXb ELvGi~!8,\eMHu }jlus8*~8}Y|T{p@_`z*ho']0`Xd*bݱG^c\tUFO@5sp Plqs\x_N.t0"dy,FYˌVs[eҹEԽCP(!{ v !\ RI"xˬ?=Av@c s"j&R1sMm[!DRGzn{ו# ;wG6'Ɲ.hr3o}T5_}pF^10UY᠟O4NTV曦QbN sY0iqcV9Vfc& {kzUߟʃ VVbbOȖ(H2 `i gR*Mbƶq%=]Z@ nw *NM,Kv3Iz>ߔ%`PP2!`YkynTU.kH:8 ұ͟Þj#B٭e>Ϥ\Ρ)|W)l#JN)"xնMVDgE 65+ ` 8sЂr43 iXϛo@x;9stIVEyKK0i:A2ٶhN{ dp]sNWQEZV < Ǒ5T2\.."\|T'\ÊSŧ<m Ҫt>&N_фϴ_T.n&^X\LOԽXbS4i86BM =uKڞ{8iD\ jkڜ MLRo[ǎJ'=pW8Mܪ-)f7.g0pWppX+0$5Z>9b^ Qe@>{3[UۊtdlL_Wf]:as g`1AQ=щqt rgNXN 3&. i pP4!['D#![/ۚit0`mNwbP,[1ɍ9* UՕS 3RvhKpwAr] ڠZK [lJItI-o Gp =uu8Mzxܸ#nllh=!Wrn 7^ hĆm$Y&٪W/u9kE(T=n Ve0)>3tl8P3! ٩4Bd~LUz˪k/8y\ 8t'1`fbxG,(V0Wu. pj]¦Y-4Q b{!Y@PA-56.~~]ףIW 9rk4nh93zrunYyJy(|ԔkνuޞsƠ@{tw0& mV~5z*eHU)$̤,u Nb׏ 0zvr2WZR {kF﯀oA>P@ C"+fd ^P.! S[$ mwP.j.WY>c` uÞ[ 5}vg`7Yj7~H7y^Ga 8 km<!6HtWǫ~o/P3ݺC %Ӝ\>p\翦v% u9v:Ý] TIrIf#nmv\<,r ԤݪE^[@138 FK2R!9jde\3@nU]Kv DZR"W׼z\=uZ._L2Vo2na$aر] &.^l_{/2WF- Z0h;@ڜDKZ^x^\̠x}4'f/ 90O\EMok:EQ $ c)VN b,ȤJ5Rr1z"6(> P2!  幆БkwYA|hȖ4­f<_+6 v/wH2zYUo?vpb*S)/wc|KivNeu+7gWUZwZݶ/xۮ24d\:aaHvŗ) ȠJ?KD>& VBs^Qټ EVC0p6 ^H#1JǺ$^P.?!kP bc!=u̟^Φ_3eIu~wK tJEcvQ_I*V*T,T:23nCJ 0K1 N[|酉1gsҎO 59>JadV[p$HI͂ylzP:qx+p+B?Ȱs?b`Ԩѭi*qcƒ@{Ib\&[OsS/"^TZ[t [m2C FOJlkȮ?\/CE>Q@*)lO>Ԝ/|^8(oB@Ј۽`1H@P-!+ Q)C _:ߞkUpܨ:+T/uAQ&,mImR_g<ܓaT|W,Rrv|tm ƾiG+GU#)x5K)̽ kQ~_cNnVn`n薌Y;)=5@nn؀GJ\s-QlЉ H%QOm̹I%^TNODy}沩T"|A,GXwx|F=>~QȵJMM%q7wE`rk4HOO PB!LҺ{Of+H5]]s]s/:뙽Tyo=4=myuөYB*NHZ* /u"'pv,ǀm|=XZM:%)eL 76OuO"m<'2\O|qG&S~:sX6'[2ݟ+M96}[ &3EN)ٲB܋y "u柜?f.Tuad~^oYyz Ty?՛ao>1ɣU;ef2uٳ]i]W^zKs}'o|gobA+w#]-(Պ5`N'}AD!nܐYE:z_^47~Vތ|K@~gru4[qZ<|2"qqSz !VŨظ8SIv,c[yOU/PEE̖ $(P)!{ XX4J= D!Йt*HiU%DO{A ۳ѫ~KA.Ƞ"K xNwiPN|&+Enfke-G*%׭zyuqƶ:gA1,Π77FU ~3Zp ufX7+HChD^-.{*J^I+ܒ _#E%[&iy]q~לBa)4^vu%G,zs  0=tS@05V9usҭփNzOw]dv>F]_ ƚUk8xD9ݓHX p P2!tVZ HЙtIIW|kUʶ^PrKs Xm^)<ӹkaZMafWt%A i-lBl0K@t6A[{(*pXJѢ N?z 0y\p ч)NpMZ9!ɜU^]>GW+@ԁK<5oFHPB O^_ &ރ{ W`JPUfF=nD d7$' Z , :|(ƹm D룘.5$+aQjocde=/ܼI̯MqC}]z[7'5pU(W>A`V⁣pP/! VYhRӡ |f|ku*Uʺyq^q?-"[LDx8Zr@&_ RTi><?t(SNV79&P{M 㪖SJ)0[FUa߶L\]{bՒ%/Z潄Mt@Őfg4.E"_d@L"=s"!xz057&Rlgî{$e˪k|{JcTަFU~tTY"-(teZt' IHCL+X]+0B|9g"Tl4?4u:`ϽJ۱R F(?WY+ZKk7W@8϶*P/_!lTZ% Su]V؛4ʕaS~>r^Q%0 2 ;/a.h?]G9fM)BkI9e{k<)]W "&*aS=()xf"FYP P%ʆUe.D㫊n\jnʰ2d_ 7xX]s!l+6#vU!F4ԄEQ&PXj*Eh|JWU4׳8ܩV7x]}e>֘d75t9"δ}8(WvruE^*+Іn@ cYηڢffZᐸ<@P0_!rSa*99kFytw.i.S螴`8ޕp{o)PJ`А-rFzb3!CA`^YIQFqw^㯇7$:17FV-' ZSM#%BVv+j֋U(Po 1Y!P%}'_AԇL`,{9mT;!O|G2f^o%eWJ,Z iEʳzJm+2^6`l23gu6[' A4dji*o*35ٙ8N ` ܎* 6P/_!WR\ SKʝ2U2S,jO__hm|سEot< D.K X2E ]#Y'fQQ)%t`b`|/W궆8k㊍ eL*)ab0A!]n^](ȗU9k'Rw]&RJ8T$fɨ2 Aw B ɆS6gCcjEO@t4)JRx>ȨR /1,P@!LSD- Us{u6uUq|Oukq5wobND\N;d4^uy[uz GEU"TĖVN?w[CDnʜ+րuQq_/7YLGUeu6-wvǻv&C,g\3Fe趇$[*/,c^kLqc@YDVvCGB"H]e>!M򥇇P)?!{X1 Hz9|>|J&qtj=Mp?QJ Ne3cNv-ž <1Wm *ǔZF O>dM)9*;Oc^vST,e+K2};}Й$, PB#Љt>*s55Rɜn+MS n}H$桃O)d`VtUMtm[鞊t xUM0=PO3yie+ˏDi0SP.! XR`BaЈJ2WYk&J^<:: !W]  co knӋY{U4wWfN$ Q8MCHm  +J Li17Th df@zӸDE|0qo6m3RQ0 Q|P`ˁ2P&+DWoieZɏrqU-^`r\]kVK?u.K 8#-4Ki8vxH=,ӑ [X3np^QZeVZ}&1  ey#eESMf3P:/6Pgwа@;LF<Q |J9CYMSZ}Atg儾ϳҽ#8D P-!oURb)Dm452sEa!*Ey5n#I "\Mci5Rk$k|G#"Xo7^-q™6H\v!\:mN $ԇLz{>;n#T/~FDR)C0=>䄲3it.CAj+~~4~ {O@&Vޑ1Uk/oqj&|S*8lhk8oڸ."lk`I>&#a`FL@QG͉ y6_5C 潥P.!TZB)nYiC_ ޤ3N&L]mEA\FAltsh~ B4%  W))~WbXmnY1DקIL%tB^mɸE@,m9y2 &{1[,e$}Ef (ˁA D *hRe7~~}&HUu_  ڣ J+, S uk[V:+T3 Ѭ4s`ۀ/٤&9)Q>G69§hHy:p1Rs=0c 6a8P,!+i}T4&ˡ4UVG3Q5Qe=$2ZiLUseq%jPa U:\sc j3^] @]DvOn6uw ޑr;}v y :V{\,n7thrn. tRå2 LoMnVRiEGDtrr0wDF('"h9jA\):: Mϵ5vo<^gu}>f|pGAҐW CfL PD!L?RQ>t^^f⣗{x\KcG}`y)V: GI;R._aձaD$$Ux!4[ksWqڲ́ d8(2>nT2Rh&Q(iP" gfcfXg5Gm.659gϭ$mINZP[T(* 3huz0ŜWO_z!?]E]Me E*6bv?2HgzOj1ZjE.Z>j6G0d}h.en2w߾Ə] &4a{:_ݙ jxx.P@gf0ˍ4TOű,]F +H) ey-瘊؋94a,m+P':b/ջ90[( }zy#19;,xP+!{ WSaиt BReܫ1uW&[Uޯ3/ wz-Mk6s9i@ ~#\OW|&v稗W6KZD2Ĭ;Tez!*JTOPWu8EyR:T L,Da A:iH^ @A7=#M6_Ƿ)ݴS@R[oR P/!R c+I!38J\*ԫU=O_bڮ%:e(çQe4!dy8s s6DM9NPj[Mb=3x_ t|@x~NqnV[<˞30?ZwjȪ-`,'c/Q!)Tk;,G!@&g[y.omUk*Ǟ'z5-"ę@:վ +j\ǙcM㈴F躢y`vCҀ&jf_{j4_8}fPhJ"_+KB hb[,9V@P5! Q\'A#yU]f*R_2W_[ BШʾp޶rrap5G~A M26@ZݷvwR!DqÙ -v1/G"Vtm F0j ^"QKgXu;\f±sW!W+"J_J<9:Ė"}tҘ|/"Ap؁ӝ%i>4V:D1L/yWy.Jx׿w7Z*4/12ca0*2YڇdWK$E{TR_ՊINbdk& +rbՖL@u,?׶P1?!%PdBj*㻧\UB$%a2 WAK7k !Ya.1EM!1Qjz%g3 ysHODcf2D _LDl?aj)@ ['Zˢt1% : W>{6*}Wj5ѻWX y\JjִF hm,G"fZnJҪ7\g K0X#( _oAMg1qD/mM"Ci1(PIKm-fz(iT&E\]ڒƥ[K~Tɽ+ g0*FÍWP#!lRP݄аT:+3wRMVRG)>|T/L#VCZ+:{g-SyIa(YR}xK0[]Op W}#ڟu+ǤijHЪSnT|u΁mߩlgIla׮yABbЈ*/9l2SJoxܾS˹o¹5< `%ZC~HWWDc>L?P;dpP*!޿Q؈ Bo:\Mr늴fjg2`t"Q  %3H5lsCn0DHwȑ{^rDKPgm"SC:/p7[x̌l#~kkp)q6}mcŸ2:/kכ6 0K&)*^D3u'72\mVVV[j>s=,B".f_-NN6{DhFܪd*0ȁ`_v@#?@[@P(_! 2\c572Tr+]z*/}c/*w?NJ&/Wp'ŲewT\s~Czqm}?0Mc [eT$i<@<;LkUV\VK /4'@|;W&H>x#|"SP2?!G{UCl0vpUiZ}:Iz_v4?ɆtOE7kY۠BB500}4CE8lFB}qJ&~*ګfs1s"bsg¼K)a?5gѺ/O>HwЬw p]S,-u ^knR^2b֛P_ Ϊp;*N.!n̆DA\K҈3H@ƫQ ]h췺/iu>OG bvxl#{]5-򆁢~٥UIot}$;.|$撳QƄQj8gBg#*\ު:W Jhˆe +9ɊU"$N5vKC\Lո :g$&c>z-_pbnvt5Ya@H [7 Cb ف8n>P2!7SX"ݵw]o!jUZqa}H~bfFEm}ؕ IuE}5Y<|'cg* rķ 4 ht)G ٜG~/u-Ggse^6^?[ފ:Tupy?GG3f>޼W ˻ѫ(mKV1#YW2l%5Ŏtn^wߖBcXqQ asaEA${U]4-zNBWԓf 6Wib6' ]X>좿 '`7 &wCtZP7 2isw7fKܼRK=_cЮ.UTӗSm oPܒLvV[ 7HBcc|T MH=7㦶kDfdcN4cܢ)7Hlxńw?Lv#k\޵k@wl4nЮ2]&{87P=K`&BtXiJNz-W*VoVԺ`=Q4[(S[k@GqIswp ONKTxD!R"BW4!_sK)[9pH)ٴHE❪w*.P^WF2+ <aڟ oi: (fNbHԺDky 8-nO#7[sux59HD*ibP@ tD"fF^\rm=K6V]UMOH3VurFfx'hfi:Ϯa֟Y7{ }`JxӠ]y=y., blXDLuht@p YH`V)B@^ia~NC.g@fQ]X}ߥ1\ξ- NM6: 5*lJ\Sf:reZ.ȯ5fW,q8]S{ *xjNN-FF13**p%b#n 0yfLEhK .T6cNDS3OOt]ALTMua ҥ RFfz6!# [RO\*pW˦70̅΁kmBU>KDI<cGL yiDĈ(ح^L4S$)Cu>X 2r߻o9KpP3 fj!3jwIT܋S?2mŞ3 \&)YScH$"C01o&jUJ=6Ov^J J$TYzsn5׍ |ŁPHBj&HG w|xTLVYX5. pv狫|j7۾_WgIIdF*BhЊ*T\R/& U{x_g*}=wMn)M%VI ްoşvlIvBDvsDT߮{p`K@;oD뾵!2mdf7Üiwdč ťrT 󳺧wq˰4dy(xO}toT[P+!WRj= DИzL1RvL|䌲gih A⽿BzlA2?UD(<͆XVr?e&#B4*XnI+dGl Ǫ` 32,!;07b1g>\8[/|,EA4M6RT(pijUn4uOX͙o"J](7迚V)%?%N\" 4"OS5Eԩ)uR^HƫM0aP|摻%|t{y*z+0:+2E`zF6UU-X>]UWlGF#0Fo?6JzP-! X f~E=k%I{+Li&vaP)k42ZPr>1/.W:,Lm!}2~qc}^4cub+]3zÆ&ag]UHк/aMŧ3exՂ|X Qŗ'E- ն|0f_Vޜ)ab" <R\oU*fL?@PR$5`2 Ta[lV>ʈз".$-wLة}_v9nE8f+ᒪ̧UcrP"%! L:S P.! UR,7ѡ1.7ֲ8Eqβԫ+f̪|@dW& 69~2 쿈u S" [?xOf+8Bhx'-e•X_"ҵWH(}N$VUi_؜qT[KmAo7Bgv[ANT~v~osijfBH©Md!ZDTn\s*\-&W]%j2_Ux|.uG+^iDr)Ck6JI`g@ zC}c->jA1e94m[qKf=<6#LH1WZ}iq{bYxer:>"˽6B{h2|H6m{ T0+^S%I|n19ᩥaO'! Lb @9_p+LvQ%na<Äv5aA:nP@!LٷYbnVj3f]x:IP} m5Aᓘ)E#1Fei/H(knP' N.ƺ0T/9L-m|)wlLp"-Blk5a&?_ ljUx6O(gOOA*qiG`,}#) TQE33)L%q3 qgVݕ#hIVe&E5Subrg55]iSQ+rOuf=?^{ x] 1֡r=iX5zW=<:kw?^Ȁ緎y~Vb#;dURE`MVVX}}pQ .lOQ7]{8 Z9XcRUM1E~F&aT+M-M -*:? 6c$Y8w_#}~=A!9xN$pP6_!L6+yf#e6c,TqGgy>oSB=}UZ=y4y}(S sakwcWkyszULdmו Jͩ,2H7ϖKM&V¦:B's)Bh@C͗j[I` wʻΐY# ~3k_Y-RE&H(PeFaFJ@b% Uԑ})* $ V ܔ%V>9۱V@oփ) ~j6@Pe訆h|=q^<@w㊀{M `cߘGeCU]O"K 'ENʊfs42_aX]@(/P-:P>!L箼fdrM!ӏ2ըZײՃeD;;fhrBDt흺iF WDWҊ,K Qkq==S& +7gXxM5YGZ,QJ'-D$LFh13^]gʿzv@1>/ڊ|ˈjfX.lë;G]c?Wƛmo^;(*çH"w9+Fޒ[έ6 *}KYP+lUE% t~uĝ?yR*54]٫No4SKQytѪ4Lϕ5M&8` +Fg4s2v1TS\IG.eXqpH9('39=qj@ˁӜ@<h\?n6=c7ln3";*q{( ynCP8!LO*:VZX\iU/\k5W|d{~%qV=`bTg:t*+QһTf:*RUn?fg\r4\C&KwJJ&l5e2Oaj>m,L9D #)i%(5iʭ^>Wo_Llb8*`[*nW(su}! `цq#~'3` Xɻӿe^ >Sj Y&L@;;w`=ݟ;P%?!{UYd+ !L!zQrdT"5O$]U*7l daJE!',v%VAѿ=șv\{wEJRr- 4_z'`Vk2wdRIW\ ȷ%++uO'ՙ(LuJ*UDzs*JJJ2@b}[A(RI$K\J+[f$5:),c`,.%Ncwx<9\P&!+mgSb^2\ML%K֪Uռ%]_^QW[.\RB0 H jC ֚d8FE6a3Lzu֥Qw"7Mx;` -[@5ZQbϙ6N<p[I}A/tmZam:%y#]45(И"}Cq3{L(Qح#YCY˭E#\.]}|<\ӿNd ļ 50ڪ##,*\ Rb9J~-e2ZBSYEv(-EfJ"7P8~rap`e|nUsDbc69ǾJnòy (Bċo꺓&Rox_mĖ9OnEHU: ̐ >7jMTɷ Y qh1zAxbQЇ .=^6Ro-+o@xg{.$B--I9%SJV(W#Qr['|1w-v56n{P'χy%P/?!!3u}wJ㙌\Z xIEcC@/ᔧKM1CDPnt d$ [*yD @íp 0Tsuxg[Ȁ7hLJXe^zéiqzq 1α:UI5fp]wJ㙌\Z Șe@^TПtePPS:hN) 滶5zڂD莅wt$ @@ "Rk6\ \A@ZVQ QR[RP3?!X 6>=V8PrJ.Fh+Wr~@֗E1KSaaFGZJV PRƝR]ƥcw5B7z@N(έ˼ňc]@]kh5nw>G}XX^_ظƴq}Xn (8 KPˣ.%PiD˲v:<)Q:<B&\(XIReS$s(g|6XOje%تX4_t #ijq۠.|0/ Qn9~i]0r .I+*`~.hR]Bܣp_p!RN";,P2!Ti0g9\S.]/wRnTCcr}VyIdG(uFoYGT خ' TG1ڙ^̑;1Qcg"BsĄ1lR#0eiFg *@F 7 D07n:Yz1r)w X5]WCOE:@l~8g*-URk媔]E]/wRnT Y>oI;UI<{u6 d&Em]@3`c]!W{=|Lrn]@ 帠 l韲0+ >@ !˥[l}:P3! Zi0IIrR^\ww*U{MiSZ- p 6 +Z}pv8Rq)TL?^v GdCqt?WFdcC,_xzJ\ћ^c1Qw I ޽Y n^0z>{%y( ?%dtmJP3! +ESZL'I{3S81y\kSq (K5M):i'4_W&5 "(68_<ÈT!PL߃J 'XSz^2\G*il ˡQ#~pӠFfԂՌ ΣL48q o>%&&CqNP]T8* t&"I!5-'>;w89랱y\kSqL3lp^a \ʡV* /$C|Ӧ$ zF+%Mޑu̐wc乕ԅ9|q8dJIrgkOnqO@ %@Zh%GZOP1!-S\rk̭Yw^&qի|4;93. it*"Ű2~jګK*WL \(ZLE((iጺJS9Kd&:l_+Ņ JHiH9F 9A 9:R}T'}'U` _2j]M͚7@zvQ0R֬3)MQ_㬖՝>=K܄>Ju ^X/e*b3U8$A# ?B_ C|l @<2# >8@P2!/Qۨ7 6]/^9ju4]dԽP(7"׾FgM_.1&@T!PB8Dp$Wǝ:£PN{D <\\=3ĝ>gK'5KʀH,N#N|;6OK7/ `9P%nm^N^}:L:v#WyK֡Z]J묛! _=Dn6ӧQlxɮgONi)NG$N",mo+(͐D <,ꭅyT 8S7Aj5VjUo}UZ/}VUT6vѺLR[5*/O_y]gFGې!_ ˝b%TX&7r|($_[(jj F6f{fm8ЩF[AA/ՀjsNPDKHP0!bS[Y }uW=U sџiz? -M# Dؤ&hJ\\\!#WsB _(.R$c?S '2cDjaK,"a4yA,uLPmd-H׫G֝./iv^~iV oDwO^^(+OVwT/{ǡ;1CXJ@)ť7#{p7Q n[I8P1! .RܠY ;U%Nx>HV_iv _ϭXy'knU+Z]\߰FӀ>YpKd|QEW)`/0ιfG=Ó"`9ţؠ.J-R@ARo@(_ËO/ KQlsv 7%fU쳬=]Ӗ\S=*C>ǔ)nJWtkm.c.}?&H eg0Ia5\8/%5af(v {n.v :L67H}. k髬:.5 XǨښ*E`@VEn 囲* 26 ox@ P0!R]gVzJgVi7k /\\ٴ 斝 IREΪ#p $9-'d[79GጵE^491!4K͎ :w-6m2Vt'\ya?\3N~sm|4{[^wu6O;.l#5vM]2s˜IqS ܂n ^Uuyq}W 8NyS%t߀=$1lJn0E攔ؠ-T yv"չk0!hєoQJF,O@\@pb@TS-J lL@P*![લ9̻S_w*]θkwLe+6Ɣ`0 o@:w2&VXqĊyЅkG/%'"4[qBhWIĸԧ=ٞ|x4܁0pA++Wӄ"T 2W+5-+B&06.JT*.nTc(;e{1ZzpWD^pqU}Fc%57r|당~ft AOtXk ʷ*9Q/,C`Nu/JDUw~0 mf'7Ɗ$闻[ B_1 iAvw~Og=AħVU7]=8W6cb;Hjsi-gk?\z'/ Nd]" L&LĖ ;gt3鎯ݞ_=?AR6>[8b-FeܦCF\y{CPv|HOcP?_!L6Y+Ml(٧WzMBTrZ]<>-"!,SUUoWA"jnk+!𝯨I^MqIޢRA~i`8xVQg iBVLMR--I+gs0vL6m1]?LuxvgFU~ӭl&z]u%'y2n=^e}OuQQM38ʞN-ՉzgJ.WT+GLN\ х@>EV%6>X4)Fe9fn%lߑ;tΎ 0Vz )Ɯl)!zEGYͰH#/+m  -TܳE~rMWDG>;cmr!}hP3?! T! d>DeЈt*Sz*r[*W=:?POC:nQS車8s޹QcC` \if,`Oqh7v; .HVmA 4$#c![|okp!*)ȿh6<Tucjz\n_ieiï8J 󀀋53{EW]+=:D%A8E:;)WV9ַ܃T')i!`$Gˢht 2Wt[7JqhI~!I0 [=Բ3 P+{ m^C! JP4LN*Vpݞ7MW_=0\ (`zn(Z9P2!{S) R߷*k1/zRb_e欠=r,+N7u%c^;kp|n;BKvHL7uL1E1ܷ|w&BXn>j8%|\ԫ+3b]uM{2zvR(]]B[x^;eS{ҵq\@m5 o DA> v""щl7DJ^+_{:--"ybdԔbEtAݗA;&"rxx 95B_9 W -*$ bA ^v +糗 ^:oCS=JL:XG],zjP2!4_S)Ea_DLZ7J,O6fo7B${K`D^r}f6 fp&swӧ)19MK/|dN9vpwH3u|v.$5q`3c BlDofj14Pt1 h\!aYˍ^<5/Kj{d!Fq|,ZIQeЉ rH |.7ش-+ cF忖(jxk|w7DJX@qپJ1w]yEoYƺds/\v)+'fջ;We LP=:/z0 ܲE_ 2*vSFq4%mpP1!IS[iCSPq8%{|^dy@]E 0մ^_JȤkiz(^dhVT.@1C% /wOta[>A1nA@4xgffؽM-?]6d[lh3B\ha1 ]lNNE yr)3mT)oQHSm5Ut:c( ě:+e^B(jGR1-"faQN;Xo`/)dq"V:g/?bF-*3z]&33\{ ľ;Uبc@n0c)qF,?gӉҺPggP[9o΍ O^!֏jEI7Я1+LilNqЋ|WgE!WapvbHd (Og% Hí4ivojP绚@ͬ}AZWE$B`<>M <>u2yzEVRXE"dt'6#J)<Hوc$ 3zi^C!b3>3Yr ~*P+!{WAOJݻR3IMU^p3\7}2. :I-%(NPN5uD,d,CLσ%ƗseRk  ,vIU71P|mu#wZo P`%)o_iW-B$ѥUg}oYqn癿 LFdQԠĕbME'n4o˶~e;Bw:kd%b­g_ !v&l_ZT -'3ԜNj}XXϐ})ǥmpP+! KpYQȭ B$ЈtH7R)i9Vzgtʨ)bqSb72A D↝Z V9WLg[hsY35 4sFtrU와Z#_e/S3C^vW[.lL{- m  '39*𐈍R(9VguW'ipf%O)&D7YA HD,w^H: fm@dX )%Z-Ŀj= ڤ^,G`l =`+C'(ܖ y3}q:tMP/!Uѡ!B!RMܸ*W^8p#==sDq)}ġ>]|jpV1+BAhsפ .feSGk v-Uj:Y]dx4 oOJ. OtS Z07Xҧs}6]~Q.}JX47]W6jG k)o*Xq1{"@]x/[*{Xh3F=Qa$łƤgkMH{EOUu <5( j_ ţPS\j%WJt6M,rt\6 w@J P/!WY47"m]qǫ+\/.U6 Bz:5تF'0Ш&did*L LR_0$RTH:MvXL\a\ەj!zJ`3*"JF@HV[ >2$1yq&G;m(]1y@ߑ(SP{)pP1! ?S٩T9Tyu-R%jܿǎ@ۊI,BśHeP? IaC"4:5#7@t^eץTB2P?f`w4JҦy+6Bw~+;ex=]BNN$tֈ&uSa?9YjäAQx8zmf%ugJSQOme  W߳3HTk^n_Ǯ?iE @Yb 1cfXlӣp˦N)];&5lyray hʇLwзZ,v ȯKΝg.pHI(vQ,^+u-N`aĜQXjop4Z(gP6 +(+ۡ!+/ƒk#\˔#!߯MO%%uɛyspx#D{J C9BfũLӰ&z .u;BGP_3u3^!#0=o><]; *442GyPz] #Ѝ4O8=E]ƛC'%D[hJ-Xs} tD2PgcPv7uӍ s1\*TW)L]}Siạ̏&B{. L/84Ub$ mm".N ([2M3@N eXY VtbLWSTWu2ql:ƋxCKAHh?jPC77o.p S,:Vӗe~9^P2 Lde,I͘`}k\.}eԒ_ǭ)'kXyů*J|ȶWZdv1=61K 31>o:[ܭ%c+|\S_͔^!p8:}ΒϠ٥a,L(_bW1z R{eU^!p=94RF{ď5Wf6=Bt&- B#^kuzE]8{[q[j2?AATE܄P(=6gH@! kuvp&TǁGCX[1}"Kts邤l YmeGN՗_opP2? {X."KSX<Mb@N҂)2e[2ɨq9|gNޠwHU8 lDX&z{+l ~d sxIZ)3uV$*jָ6 .3gn3 bv/fi|=\P/_! ׿{T[ 4&B1h\&eHJ]]L1#5@~7E=٩|p6YhؔbyIע J^ 30f/WGb?`y+x\enWqh ;%ZB9a/2J[|#{y-? ߅zyL v;#<'.xB!`,3,HxN)7ĥfep3\5:1Lh'ZVLRj_gzwɜ#&6+ni, \۹x^Ąbe ,XD "&j iP+! E~S(i L'KQRf%F*\q_?XJ}MAŶʗQ-AG tׯb(?a"*y{P ޿ !P<%@3iݤ5g+(*[hOS N5ҴњY§"0A^(*]?aKS5~i,W8_:rGXۥ˺2D7CnOޗH3RrW,7$ͽ q %"/aiR:" *+t JG0F`.o~Wt@2^\'j!LL%m  P0! oRRt3Lb$8dך zty[,>QbS=ApH2aҤsZ)nm T~B#%yz+4I-TSK0iau`($@ U}@0iph`%ғQ} n Nmt$"p^'~g7\]!*ӆIy˿Y~}ؕ7ۙe Q7KZ/&Y/'B3B5 CP,l;^ Kq{ $P4! {~HQ[`Y#JwZd".Yz>pM!U_J.'VKIU@e kbFRPe5<.&{/G, s˂uPOPΌߌ*`Ş[n#m/h( `pA;^97G `;@V.^Im }=Ƶ>y `/{ LͭQa&Y 3pD>"5is&\EW8S=( 5)Y\,DUBMD_\vIp+amU4;#c]| 5ߟbYp~P-! !HYD%pNo|dJ#uy֤7<.+gMzgW+XdQ"01iqXLnQaZU3(rjy0é%4}k)k݃-" zV8(tf;Nb,#o`$a% VS_@v >LXm$p|7ǎȕyGϭI?gc%FLؠ%0([|Q(! @VT:1Բc;#'€PgLT@1WqT4BP/?! ëP!M!1ǵWN"5~uX)DHWR06F!Ǟ:Zԩ3˔&C|$˲p޳)' ʽ"g{4?a 0Xr>+(lXV@1W{*/FXh`?贂R#9Yh-bZ`F2LFxIί-Ro??$Sms64o&`1JF,sqХ+䙊4(10[ɦJD)#ue)Tg3Cye+/*~ OΧP.!WmP[a(GBf^2z\>>d?'6f^[4)‰lVAڀc8d꽉';<."_#UsΧ<樢 :M Az~ʇ;a%E7R'˵SJѳͥͯGV!'8_Հ1 XV pahNPUK/.KTe\&o#3uNR^Bd\?פw`ҙF[Sd7TLqaC7>5}p@@@=hFhgID$2GA~>W9EQ2 d0U/ҘHe{?fd*<}P)!+ PGfzuJT\Yu `!Q@m4]$RP=UQ lN%pi rF8@%͋.t^uFcD̆B='?/jgǿS ;h`#u?49iVbd\"Y旽MZU%k|Kk1bч:޻J]E`|9G06+Qz&Ga +< u`D+0A 2/<_ja@jkw?NPG!Lu `MZd1ms{lۛi߯=~sl$reK{)Xse:/(!,퀖їFY+.x~;BZ(0,.^M֭Sk%ү_BM_gB%\}u0 (!j슝n~)h@⏺ qf/NBWyG{v2Q ۆ,&\ @˄p'́:#|8P1!+ Y)D0F({_v*\A%WX"gWl#4+c7@ } (\xBClNǓVm;Arw*BόQ-6ot"\9r l=HmA@`e=4Si ^ .lDUD_|6n軩 ~ pܗ2D?f9 kAkPߝXW\˕3ۻĪtƺ䄧jj!ƦHUQ:>!r;<Wyxgrsy-=oiᅼq 4g(41֌Hv%:({%%5oO {P0kD[PH!L6cY+MMbCrOzq'ӆq_uSHOmdjB%z6ք:/WWeͽCq&S&QG˧Ah(-ɞ0ؒeX}_ZTwNs<\yLYq s֖Ij,F倓y*RB(M9rŧƒns2v[L(痏 4ݼٹ࿷ΑYbj}.uXTגQgȉV=֜A5 P5sm\&̶F6֙ ;G>OˋRKvvp1S֦?KծI-[T\j]T=`sBcX{Y}q B@ /%綖Uңl}d:{ N'(YyhMF`Լdy /+Vڝ Tb\*}"AE 2ylA*QmE$o ` 06\CKH8r"T{g9cL)UUWK\^3\P-!{o?X2$BTQWt*ԓ[e/-ׇ@oCbbͷ0aGJL4wr3Cq^[t{?=lq(宺k+E.5AnYFFF}Y-g+\Oǖ11(y'輠gGmpbZ[b!0LJVʹK{w5 zÖ )Hd2R[.vmTDj6{\3P01 Tj1ՃFkT3-wa&w"ҧAYDZ1R5lZMSIp9D _8P4?! WZ T!諸ɚyTJEw3tgEX"4[8r ipNƼʭCBBʻ̼7s|sIx[x_^4B']C]׷7KX_-PJ?QeS'ka8哆'OG|UMeZ+X K _L,{}W^Tk!%f{UK\TR+sP]ފYw,`Z:Q0sy!B,s24Qt YiBq(U=lsE®U31Uyq,]cwZ~g}VWD|W~BIh輢X %t Sami4am|3NP.!4V١t7 䯯_i)Lj:Ti]%`' j/wphur$)Ԁa_QJfp 0P{N8Ч+wi^ZM֯U 6L*mJFS2~]X7uw$Om‹-@,)}nA<9qsX (jH=m6xVi)Lj.T8Po0cytX (F.dmPh]Z;lDY-Y0j %c#G6IxڹfQVEƦbnhTDP/! U!RF2B*Uqi*ĕ*71U pBVNh @|řLـ 8H+r\̓孎U%?_=_J~W>-}gX߂^PF5鮁\B c B$.W[$V\N\}xnk8Nj,tea('귌[[GY:T:$Lgnֳ2zR];{ՑpIk,Ҧ @'MFiPʊu%38֐Dέ0:Lz8Tb%DCM!bY/µ к [1ڌucb=H H0Vsnut/s h%Z00P0!GSۘr?Wk/Vֺm^B/>C3¨ 73Yc W\dWJ% 4bRwj>o]0Tdl(SD}_ AGSDVbı~nF%Ϟ/_)=^yW|\@`/`Wv@Nz.o`3nI3e0&@0c /7}ٮjx9}?zklʂRҳ1܆fM[POGG8Me -٥<!&ݮ9x ˟-)J I+]F=ьX1+?,+n<(l@i2rhغ?BSBGP5! sR\l52ՕFu^ޚb疹: 7nP'T|#Wki.*{d r H\d1^'9 9Q<(<*qP4_Lavc57.107.100B6sؤ\LC>F$ЈR)5TMgOGyう _ᐕu.{xxe(YqV(88c-9 BȓW>M`~DqE}X #eQ t ("Ǟ}N|X4yMhNjKeUDbZ To- {+-G <:ɢP&-ƹY*]KTMgOK?1y:2ӛp۔FI DNCGc&Nj}TiS k5|H:["~ @ /q ϒ) F]=CpP.?![h) ߞj3Q%%"._?q 㤓HLPA 1kjlrLz6w|6wq~&.='?ud\ n֔vn$LvAxʺB5r\5F*& ]hۓ5kK6\:|y% p2kRƀ{X 5hG>o|nR @ jqnsxoLU=!AL0hũD& &uˈg]l֗PL5w}1 vKSn,! ݓIT~Nǖ,xsP)?!+ fSQa ̂:[r,"wsuz۾?џ!=%*MRhz ׇl9|GqUDu8tk \r ]UG5(Fs&)o0 aIS+;dӶ꺽FXI]4 o8xb!j4[iOM2a|: FJ;ۼ3kf<0]q8}ӔpWix ar`kPu"2wmmT 9ІpP8_!L6+Mq-ڗ/k_~5sECǍN pEq-Z"Aˍ˞ J>΁9;-_|89.+3(;:tWv*O/V06xa3Il7I}}cnPdq" Sݩ K5[R r:/}Wu@Vq<=CϿF{mR}òbzC] |Y]/cMWw0Y\ g•^]&Xݽ3՚4?3O55>rަơRU4P-!{_[T'"ozEu9*f~<}?&EKgt2V/qdaś)ėcKI,5hߜCW̢66#F:GW6]&@%*-~/nkvUgeW}x}HKޤ t>+Dx4c,%TAL; aWgOo\Nn{{jw`\lUl+O9Sy@(>ilrSG̭ n򥚡hb{,˼2˗}C>g&\  jhP()@hkgP,!ͭR]SI [ߗUybΔJKo~+^1zZcM:N$[wOh,6g'W=A;V`n`7ߐ22fac<$<(u#erOgjrxe{̠ηHP.8S͘2Bl @?BF q hR`=n^Nv>ydg%7Imv gN] 6'"]~F,K$:J(Rǫ&*__uhF4L[fZ_Cv cg Z=Q0^9@)m"#_>`s$‘E~?;ilӢFAn]#&u;% ,:$RXF_AQڂs@Lgm$*Lgc:eiS/4WĥBq:8A8KPE_!L<;YfSH5Q5ݗ7 뻞zsIߵ/ϵ&i)hQ霥.ͱhJdr+a)(kN$tQ2e$A&J)Պ\mj嫧qL# W1QZks^Fa c fɲ{Kf+owG9~Kr3ea+] lx?Α]ަuVbsdTzV:Lj*F.}o'7-yO뭌Rd.LapQluq*}| <aK 0Fw^% ۏʼ{~};<"܇~id;$8<2T+^Xco>e3/-1ɉG#uqd^dM7l4Of/T~VS tެ2S6eٙ\0Fz{mF3ܼ#}g-}-Ky.e _ª75%0ߴBP0!Lڟ%C՘ԡ)jtkW`ϵ닇Fsk'B_F޾!_OFA{em;n"=t4m rBmZ()2 4\RKŞiU5izHpK1FJ1ܩK QI m vEB([) ' .` }AH-&Ќa` ֏~@ȗ)`LBGf/ㄓ]{|qqH [fMp+q@Rߜ_/چճ5yf'N_H7BmԌ) 40f߀ ,6[r-8c>RP(!{YAYPFS1DqjsRRdzoi-y}:6!_)GZ&I + rQ4Wi" J7)ȆBO6c%Q.U78+]8cRS*Bq 0}4sC1,gU1KBފW,[@̟>ّ?%VE! ʵ+JU%/wyNs8wS] ]9Wc+_0lGe@ @y<8X9w}?1P,!RY!)2J$ZU{.OaM8ͯ}¥Qvh6ۀ殲.CNQԯM՝5jt#0(6tfJ́I3kH5@ݦjs^JO[ޣ1uf3~w|!_mN1+mȞϞ w^-A=: QʁJ.hjcX{ZHzx_3$*Tޒd ׏*'M6,"@ɟuLn8;e*jKs '^2|MkC>~^wО9HEҸ1S.\ !e@'F] sBc<nĦAzRCJi*QWeZJ/Ʒ?s ri 3:juxaf&fWimjlY8ߥ:bd'Jx1֞P^PP[NT܈@of`"eb޲)Z5P1!wUJ#+ֲU5+}]JLRx瞓VǡCyCOM0,rN 4 _mHH䣃͚NlG`īQD2a>/9.|JcXRkU4"dBt,jv_h"@#^W~( 41296:-BGbD!R=j5*u*2Kˏ:.>:@:b O듎0`!? lcN.:2U` VC|SgEy~G.aM %_b111/@ )VHSP2?! Q\(Kޙ\N9UEJZoo0F/`Woj|x"KT՜F`SX~c#Ƭ1X1x #Bjq" SI1#Lu0FJ3VP+X6Y` `JdVM#}P cMԻRsFۚ+l)J$p+qTVR%RMS=Ru=JTctaya9H^0jyη yi1|rRH2(nr&_;dMŀe H\: ,:چ^UB\ ?{$S"oz|EcL^P/_! +VTC+L\*UrTOj?Իv/L( #` zC͐G‹\3+dM™Z z#ZQY(3#ru_u6ӎ. '}TgO:TW=7Zϥ{/ K(Hd%+ nP@#gT4!YlW&JY8P?72J'kkR24& (+$UP[5:e %~hS5!dl?1H _|( Ɗ"Zhs괌#d oAaP0!?T*4!kLT z_<_L kݜdCGrX]WRLಏSzBdUExEfr!pp@S2ׄO1M^ZnR2eЯ{tbm`Q:ܑyPnk`ċ/C k{ߎN ǫBLb̮!O?SJ45J.xھ?oN0krEZM c_z깓Q2pI&zUdj#*s"@tV K91ZCWղ͈T1 nȓǀ,&\!s&~P2! {U`S#e"/2QHJOO@~^Gw&e2Ro>0Whf*Z@e9Y{J';0x5nIN}'Д^\3WxI`}mgwfuѯg7TzT v`u|Uв\ᗲ޵~4 TzB/ [Ox`McMxOLfCp!L%p|N+5yVG7q!*?{?ʠ0נgLJULQ$d^Ksc g/U#2L $1OFPtkU 5*0+ڋ 1D+ˡ H.Zk8λQ)WuVlowl'$Ul\/}j,NK'x|8:g`C9F,ޗ 3Xaj ܍?zMR7e\M+|rjn*\un;nǷq_%m=6) ̂ $'zD@JtlhKf dCh9\tL%q ~Wǭlq3TJ%x5P@yyhn86՗Sd)Ǩ,rqmj%E)7M9L־VHpϏ\v5y{ 8bw)\ {◨ܵX.$ vg z*CnOP1!9UC}mJ.UkndW{UJ%>HٿS9.0o tb'>+z~U66%)"MKc5)}͇7~ӃapNȊ 52=|sH}_vƴA@3q%XҳDBYWmZф9ĭȓo]t*TBp77ǎ*R\Ȯ'wW\w@=p5NCƪ6]5x$Ӷbl,JWHo⇆FNVs۞qº9:"=H/Ǯ+) G D WDG/GbP/?!U).cq S;hy/'"oYY<҇ȑ{_,Ԋ:~a9ӑ8? ܓro8:!ӈPb)J7Z>]??,naL.]cp qkeG'COv@xP-iiv}&L^#2jdb a 7[>׽OiJjUtS7lSaQraB0A[yZA&Sx;rX %; !7y7_yw*TMk}w~Z%K 3ʖ?ndm zgu@A s8IFq(L͉J%s+sJJzD K > P5aae+gtрB%'P1! q;P C fZ2櫮z3ҎC[ 冧?Ex\/Q 3OBG26I9 ն}'Nn6M@8^WzqW{l4z)X| g&.-d갺'@ wDAI.;hT X so#$˨TWUzkdÜMAhK,4ܰMĻkWXF`[OFp .&F}+} ɽ fzo;NT LMM0ujX>@sz_0KЀ#re760/4P0!wyU\ CNϡ }&jHcֿoÑ~}z}Q^>An\"㒨c v`Qp[zQ-}&bfvIv5F@>n`owHrnu7_Ӯ"WЙf=:x( RA`=018]_mQ΄zʖilxK&ƬQ.YMU7xH>R%k qZ~~>%hgI267Rd*x3nBצ "'LęWHC|%kHFdDA%hJl tKbj-@1 ={:V<vf4] - #pP6 +jШ"- ҪMWRUU2q/5skf;lDTݧZ38'=BEG5%3JSȴm ՛f.b<㏫SScܵ:z'疀q4R>7P(h4r~ov2Pb )"=Џ?ֽBXiVB$i]lZw̚RUuR<8̠AyV5SRQiOO~i(f]sCFք,F7yswشֵ;[BcO0C!:zL61/OC"Bw' 7-5"d_[6Vл"/{o:vTW?=#RƋpP< "nLU$ZS[!}3|FƦ G R>ţ 2U$dJI-r^(TV[+{ĆWF$K;xazGoOdrxa?uե4Oޞ.OL:+΋:9rrg=;v$DGپK kc܆1d=Y;,lXڽӧtw̿Woθsr%>,Jڍ)Nօ|lVP~0!~c,ZK;uzl;d(ǮSbuvۏ:Q^H7}@'T_CT|3m̷*!>o}vZ`Y+̠_}_Yj_<~i)"W>eJ"dT<:w^P.  D. D }SZzoL so6!"YV [X|!I6Q:yU+߁"uߟO- (;^{;oΜ[+K; 篓; <ϑFSyZ=!GЈ"= Un.^EL:TK{Jo{'0)Ln'3=Xve;\YЂNGxot-Lc&|LV1UX9huM(YG+٣}?4 1L*ʍ7~ΏbyhLߤsnpP-?! Q_oW,PJBcЈ"- "V>y\]IWC}?{vȊ֫BZ\(`pYQ!YK̆D-(I馁FBBrKFR(whBeMQËְ&2 n:`G10W-FD+M Df{#/Wa?ǚO'S D0mMdQX&ID^D^y̒箪$!4 Sv.>tKgCOCd'q鎤NP(7Bˮ?qxwic'ȯu=1BcPy?>T`P+!+`WSY(nHJDED˥Iuk_,pgioKv|ZdQ@Hp]"rS^Uzܪ5ږ@_5Wrm@=/p4D~H,!r;.݉oy[ϻL# {SN7G n';F Enᬑ-\"1=B"t>- *;HJDED˧I hl?%DX& w~Z,3[|&ox颍(Ah$xVHJfD$B"+|8ryVS1`/H^f]e#f,}P,! UZl 3h:71RۜdҮkyo M##Hj1 rt)F j\XkI̽6O(Fp|UjA3XY"JA:nE9Mѻ7 K߱(6YD'Ǜ#m4\E] <-H1DZãs}[sUu J|5oz+ta$!χ}p־sAi ~2Q)\&TuxR6qU:Ԣ(3[ήˤ_inkhOv72"BX%hP-!MxVZ4ǡhL! .uU$L5o:Ժ2w>g7_M_uUAG򲰋ND.! -Ӧ /%%}$'gu9 pԩfKDUo!0־ivpRyKOOҎ~+aEay.Kb,z8Ol[*Z!,D)D"Љ<:6yJL|L5y#sjrJlf9IY@ߛI)ɥ $8h-$>$ietpA5pe92p]xN.&ȞP+?!uVةPfKЙ4(geYR9yq~? "sйCfez@9En"#Kрez% "T1Plj$GүJ1:dAdw@h@'@9[ !X?nʼn*Om&xw:>N=&ye DT:D:E JmVD*_VPcŦ:dyOcYzVk@% %cP)n8;cG\ `Xٯ=/4*| DeP/?!ŧQ\T1}z%o7\R-&qS0GS|'vcxr# "K< e6ꬨ!HA>=,2| xӸ/_uEtY2ɔG!#0*0%|Qm >"m`N jT%-rۥ4QbweHX0Vsӹ;V!KZ!Uk$E"~W*DyU\b/)6%T  %٤~.c۟ȞyZ D~.Ʊrx 1IP g(YTF(P0!ϏlSiL%nǡ uq92Lj*]p7ӣt#ifx<ܮU,KjFQr[AQH|NbDM2 v ̬ ) ZD%CH}BfUReiT-r81!R\ Q (XPc 0FoB/1puN{ݹ aPHbFl|C6[C7yZfExtJUsٚ*M.۩_1Jv:衦(>DhnȊuGrqᬵHyB,TfwT :˰p`:8W< R,VzEo#lJ]eEAQaq(>/7 @P-!>S)u&ӡhQaxGgkی;<y&};o7"iOdk9cs dŷV p!-k1.ẘTRzǎQWe<{q:㹚"fWl*-hAe2`˄?dZ&Hœ Q x4Dz渴axH='UAQ_?B%62a\~` 89a8*e;BBg :|2{"ƱrY 3O=~ʿ+=H'%J[8TLa=|@F׀P.!+;tRڡ2'soWYdҼwySa|y%-ͰOSzo#j^`Z fzP'!{XX2LcDAИt$-Dqβ2䩒gd#K2>*NM[.H'/i6QV.p?{oB5.\<|q-CRH.45_&IS]:~P2iLG>ȿbL]!5C#;4 nH 5 8lٙIx$kJGR릁5ԧӑZ\:?t? ^]0z tJ" d=ۀP-?!?WH8 '$淬Q&^k$R5X Pl.g)>nX b8fr ^R߉U^y;I[l >&p |@0JeZ(f ;Аf}Q'Gh5VVƔb:)*KZ .<>UvIxB^זDb/ k%dЉ4"&qΪXvVkw}2~-h5:Mtsm" pP+! {VS\T6BhDI>-{]IBi4!9󃺍1}F.FɃI5e:8a ZP`?JOQE'8NJs#<2foi$uF5e fzF+ Ӎۇ3 s*d#4 <#C@ 5ƨۃ5J34ˡL*Lu^WRPeH[^v?۵\^HE24?1uTîZCkx5fTv]%BW§=X" v" ~tD}&,v)>^8d`.P/! G~VmX%||giDQ1vUA1;:@b !TP1+1i( %}Ӄ8 .$B_~> ܼ1_m' ".3-<+.N+]*Q8 V ,!u;3VN)4uNK#rߗ ʽK{/Ų6iKd:J1_l:T" 4)B&\޹k82dVye! 0J캈4#yՉXj P1! TY),Z#檼MƦV@}N}G6=R43%;Z~Bzj{U\c*;.nф"\As鱐6s ;t"uU*fo!6!.*KΔam:.1ucľ$B$-w"p9m?I@~&l6JYG3Ȗ;y8TYQjh#o.ljoj@}_7)8U';?@0J`ۛErE"bI!BR$K#Y)gy"FqU*Ėɦ< |nR͋;lC yQ=CP(!CYh;%I2VRRM?`)?up]j:lҵpɥK!( u T,R N `&,8qMvrf8&92Dݵ.yD <@826F`B4"Y,jWaQ{(? ҢHڒ:[hs-8hj>?s ?0_pAUW?ڮnVIRLU|X1"0`r"/3%rqO*;A[` ލL߮A'P.!+3ةm%Pi)iwT%yZkCNTne4ԠRL J@I>׬f>R $8B^2):=oKM0S3RjE p$G@1n>xA_.)izRUˮaR܌b3>}mm&$_*f>CBsz;竻rqu H́t"Ujs9pX+Yh8#%Y~B߶ԥ*J* {5l {OӟQATsd bc ppzk׀pU,Q;YjF( DRPF!Lnom{miZV]ָտ:|w}.zpv>GFE)dx _@ Vyq#By+$)@c׊ I\QJ2K*|. 'pDN|k1r ᅧ9;OHѫI.c6؜o\ܸ$v0x>DhɜdF~@Zg0ǂL m̂ƅ(t{*QC nOggX0b{_y01i,ySq$˜mcN^&*ҵR;ʚ:W?o}.z ,TRC9Q$.]]n9S#ģTZ[pF|Uk؜D&IT銆>([<._G/OƑ}iRdƢI98WHprdcUP-!{fX ; i!.krIt*&ZHfƫ? E9PtϣV8u i.[i  dQM²[_ATC ̰T^R輖d>!U9^3̸X:ʊGUiPw 哄"PgNǖNV`vO\-=&mzDZDd ٣ۄ:>g gN5(Z,VT*&ZHfƫ? oBQh>tN#;RD9?V[qHI`ɋw3U;J m6uJ#N> m鸀z$4HP-!uآ ,ȿ.eU֪W*Tɚ7I([Xd}%K0LNpԿ #Y!Չ"`^.Mz]*ftΎ^yHa'EvjbN4^38&Qե9G-6>K,x)F(ޕa/;Ս2'xQ>yuP|fn9ftKb8E "UTUcYbU\5?O}8h7㞳rlkVq/~W?2^ pS1/gzcyYL$kIKwP/!9X[xJ%$L-y S1lP5y x1!X9#z9 [4e}'~FlY`}+N*PqYA dF&ʵU|J{S%6i SF9W)24p$jbm?.[[&{hl %.VATC_ac$zCZ^1oCPOp~+w~nL9pIh?[H~Z0T8P*!+(PZ'Bq BTqަ_xg7ɲ_V㕷bB0xhSUB :PČT)duC':qIŗWĜ&%ge>Fv꣥uUҾx {x f@ >BC#z BTqަ_x6'-Q 05wnQO|>r;}x\iⲸ\su\,h7zF]V|:lD#k4AYQ_G ؛]T7x~Bϧ[`"w:*)r;nh~ˋ ;v7#xwK .8aqRJfkABې nk6z[~>b g..8pd;gMm ee/*Oc}kB*f޷UcLk)n*3Qe;:Wav=/uGkҵx68sF4Oui LԌ]wr[I]m!*˩fM!A *|)cDO:Iat(twj tqF&ZcHpx -/^(^i+Sn `vPYP6 $C %it"ᒵWs5+:3߯.x`pw\Z!g*uN9q|bc`0>taqfy{(]:(<<?QWqC@ Cϻcs[AA$ ax@:yZw=Ubb#EHVi2Z]|m5ު'AGqj}m0QPGQ:0BBۮF$T` LFz50̕^tcE]*8jq1̬Zp23f?`v~bR'g`7 tn:@:< OpPE %Dzq)\^fu{ӝS}9w 2P 0꟟N](TlyUjJiUo NyL:""38Z+kƖ N50DVjPLD /sR‰ REYe[mn*-^jڼh +'K]z9q??7{Bcf%v:xw5sx=vyV޹A!_Ǥކ䰳'{^1Rd XG[Ʊ~XZ1ߥF)ma ՉɼeKFvkD,sgMx*-]ɓ&:Ig5HЖ:39 CU7F^ :Al-¨|$$KmwuryQxy>a>4(?+a<ś<~?nB}ͤ?zP7 fB"= lѕVTBj30ᖸ}mJ,<ϲL }qk)Zp^Rȩ3nJ5 5 ( 8 8RPed%k.f4:V)()C@#$;:=jH;sj~|&[ϦfhDiWH6DNr]p B)ɽ(W"ZHJj?>>/Nt[M5CݻOD"\%Kg=r>u=ϧqcHdm$)9-4eDjmu>/k{ޛvBAבs?tqQNa1a7bn?=z&$c{.}зs8RIj0?KNxٰ.P.!V[aJTRUą+8Sarztc"ZrB 29 ?@exVsň)0'jtweJ2LXlb/]+Qeԕ=8_F;Cp~[O ꬬ߲iG7pN#dH#؋~k^}-үR2_[9Q2+ Sΰs6iC^+w*Ui*!yJ.'[ }(tA|[YCo'pޟvB(p4p4"nsxsh@PQAnP2!V` ~stiVR#[Ϸ0%0C kTF^~ DCL)Y8/D"=x$c9U5wXMm;s@\6t9oﴜ@q))KO"P1U_w8ouw5O8 y8ţm G,ڔ?r^L;jtGG2iy q'~yu-2ǥ8UHJ8ɔ)!Z<@Sh0+l QgYT((sЕ&?GTcjAWfNl=EMULwi]{PQ BsH 2I)dP2! UZ(#l!#DTZ%R5||{*:ZoStT4MAךmQxRZS)NrҥZg>9@3f (yT, 4Zaǘ›oJ^3{Ã]A7K cV]m}laa;XC9P6Tɘ 3ϓJa@x'bA_D LB.\b̎#[YRz5]ZoP +8gN @Z`6+;{v\Zt̨,Z8 R/AZƢZo=VUvs냻+g__O'Mh^P"P.!jwUZ!VAgU/!2꽻IwKO!EKjgR]>:$Bk$9G9mnsE v9~2DK8!ՀQeA;PT@}!ʶwoN V2͠+?wI<g8᫦vL2zA/8SBm3Ꮮ I̪DXrߟ8ԵU/!2꽻I"}oWzZ8is tAh }gƨ ۹=Yx֞w!iu`f1zIhdF F3bƟe Y j+JFP >SԹ?fے+h-s 'w 5J[8P0!R] Bkб7ʹR^\O{Kc\Yԕz ?C/@xŠ,KQKA*b<T>!nS^-T@6hrelBA aA1̤s)*|.KuoQ15$v&B.Ex!0=caC4Yi,XMX󯼨ڎ^ndSDs2$CR:[,iPT<Dr1献+47"gk fk~BGؑ睜84(bV?Z~YH[[tmjQe\79']wMH5ꥍO2Ѵe>o[؛9=8lJdN P0?!R`u."Љ[٫yG |dgymg{*i SB{&a%T{F+; o.G4.co1S(]4{tž, 2 U 9-15`hg^3 ]"b]U";7 ,ZAPG]> R==a9A>n U2D:K|-W[Sz|qZ'|7Ց11iÝ0ژ 9:Fb3ќM*:#f p=Q'9mΧ*Mp8?:P0!῿R[!TBx|vJ{l_5Asza@ԊQDee&R@ M^V}T IKLKuw"y(޲:%"*A229{UٲCd֡UoSOie{]h͇tM3y͜M螪l.t8opq~Q/Ta.['KT4xotJTj* `7Z#B!Q,eT-I< xw'QJ47<F81,qp܀0!!G(B3/Іc,Uόsε6HИ* 0R+P0! zoR[!lSvZVWTfjTMbk'M^~a n:arq1R/:\͛jR}HŮsU7qalg rr=:❃D7zWU=dDLmub{pK&"KB+!rP' 퍈[gG,W bz`NۧX%2`˅.>$0ThEz jݢwIMdנ[XyߖI' ѹZe\Xe 4t<#A,`N:(x!<_ҵJHDuw|7X #f(NƳEjiL ǟ:D$DY)}cP-!лQa)nE5"|aZp&= J'R/"% tTgL4e#T N `+ QgK0Ԛbz'b%] |l6uQb:ۗ=dT1L5e8Ȧן7z/%iPEFµ?﭅2쟳Dǚd~p}/I)cR\Or-)0-'1BlGRg~j{{V˸S/dXȳi iÂp[ kiV@,P1!cPةp mxߚWRVI7tZUaK$ܜYiҠz ,9@q⁖!ynPأartOK~qݬ$%n%I:P:b-& 3i`obma'#ly@0L-&0E N-7X@.OK9„ۭ[ZՖ~ZP񎇈d5Ptn|ZӡmD"^<.ʒn5~ބ'ik؅EK\#lfif`ʧԔ;?@BwܥKLF̛zC7`1|G|@5  2)HP1!L\)`:׺nI&jު(y$CrԺZyc~[p,``9 Bad 昪}v9q5dt(h-p~"Jʨ@2DRxۜD ҁVb-űlf;^H-*sabJ z# (rGO.)8;,睝 Dt6>-֐7j zp#B#&Kgze6Ԯ)d Aꨀ+M&mhXNDo7̭n\27aIj:36~X-!gmn8+|,mU)'rJ5x>CnBdu$zf ‚B@oAuQ[CC:Ǻ=cE)F3t`f}G/C@ U7gAjf.МHm1ene ǃR(QlwDzE|:&y|x\K)ńj&;nIo۱ m̗k7aZ44j7ihݔ7!= $@ ,@8P1!-Y?T)NS,Cy?O=3[y*uWbWu|PFS۸"~N>l H/")ʕ/]C0XcUI)["㎩5Dρ)e׊ߩjm O}l6Nӯ} gi}w;{F}s3喔ΩIe_Cg=s$126Wid `K\+n <2sX6\@C{C ݏB$>(LDЗpo%(BԊwe@=.?0;wFҦ/_YmÈ{MGzieno?@3R5R8MY"BY ڧL-)r_$~I a)eGPfN12sEl,BrMb|@ǸF"x c&\%M8yoV 7rkҤ @|z`f"pP2!"S]fr#n\IZUiWo^sY#&AWt8u2{y|)_lKT`nd$O\D<*DĴG4,pԤWcJ y[zɖnPgJ@g= =@P'P4! ,R]N q񪒫KI?o+A'(/{E76kTG2,g~C&Sw6lu9{U~@: UAJ2'PDT퉆wcQ7;QYVsskKm$Pg_z+|QD7Mf}59ǕqBQZNKd$aH+8-P)1c]֎,xErvl{}~Dk r~g ;>|lH8g]>j)\Z Z:P3! ~O]= EH: ޵5Ξ}auxo= mh*V^%/Y&fr@z65g"1i BH{rQ-+MUG-uKtW)<^ HVLa(S}0^{zW!-<ߘzGR\&"Aw&M$\ʿx~OK6َ>“AX=)mZAС7l􋿾AzB|$xI$BeDx0/׀Zr/>eMW=t p~G_ P0_!?Q]b- DBx5ʮ<5k_mOSzO\|vR%i-HL|:[? GU"3Ps%Hc ( —)-Yc~y08a8\ ~jAj ɨ3u{V~):x0{3- c$!i議gAB%OsZy濟|jUd?\LfO~vz㞰+=gL|- SL>νLx{Jl`ooxU$S 4vd9[ `1gc}ws0n8j]^ h}Ts\b$o/Vr@v v;|֑re.H@+-9dq+!9Q*Ql?$4ŅtHDC^h r+E*@'Mzu P2!:/ MܨQf">n7=W~Uu%*A~}WP^ejqR6_yIܓ|ֹIMG_褱UG{p 4cWJ6\oc2._,$"]}_ǐ=pYYb@{q pwWm =Te u2^qDs( Qg@-#'%eci)(_X췰pݲ%3E>'ʖ2شc?T}GG6>Rj+zǶKf*<ݧ}l+e-&eŮoQUQ&Ͼm֦Wv:ra*#ݬJ,^;~ 21\s¿x 臢oJBLƟ5zi?JzֺNEu+k2eN"+ ʰFU= 7lsv+2 eH;hdq (3U`Fhu|߶kmW>Ӎ5Ƕq[myNQpEiɯ# S$1@\db1*u`j緖UeWZ}mVhQb@l#Oƾ-p2&H(ǣeJFӆ ЖMER zTϔHBxErЭbW.ELI$4<e^fp@(^]\lJ_P*!{ f @W&@D:A6nszj$=2_n+l\hK0ƹy۬Ѱu`xo=n&zv{ dv,͋=ƣW wzro&'&j)>Y^E:ED:'ߩ+sZtO<|q\'MXiԖy7ywS™Z@nq.Q5μa+%P-澟5g-"IlmW=a/YD{3G,`> \ KP+! H0V,VrHa 4NVuE[wmp@9[t QFnsJrnF" o˚Uד{qANu5"!C _M'IEtawi.ѝ%{Z.A0MlX4#14HWU`Ӏ- c Aqhz/D'~-Vt}v8N`2\ >C@W̌Y`S#YFfd-Ӡ \p\TeiwU~aD̊25֐ ]3n\+Nr-BȘEP/! VZDa 4D s%WI)vW2.: Gں8uFǤ#0Ȑ#F 9G.JaM# ¢t}VZ|VBM]ʮKO;WR!h9uۢa oWq_\PsAz^7ॼ P}?]ԧ)x   D- B)4&=Cw׾6kMwBfLOP9>^ZoMdE NL_EP2^U)(?e#Ph.B*Y=T._4 TI3MT,ء(LZJCwTMim?ѵ]Y\ & jC9!`^2 =(gP0_!Ɂ`S$J -јBM㶳|U2.%eZ?^{ Q{oIKΨ˶Jf-Zg"-@U!`nu A|)$ ׅEg.VdQR[C'9"bs) ?yAi_ϙPΖVsO͉D?AN#1PF#BcЈt"YwsWwk'zy?= .+s2=)hdQo$hӪA7sӢJtC v\[RR2bYw -B0+,$pt$z]+4`X@EbOYgaQPH转[^y\P1_! h.! RѤ;2茚'=NyԕfP-L8 ֠0aEqbw_ی3 ^2O$'Nv@:qN(0ą~J;!Pֳr~}=8{*8k{Mqx0HQA-QN.%G\%9jx,nTY NȏC:#*:s$UF_ۮnRYT =ӈ<56dy*.wa.xG+ߌ*`0P*KzS`P0!ЀAQ$#Db 4JKIUퟺΨ+kXbY`dPMd\ YlN҅3Y "tVuHyİ<=X(W "щҖ`GI_pk\zU>63|5K'6nxӔ׎/AFİӘ%V!*|Ͻsr|I!aJljQH濨FcX߻xtha} _^]bp#fRU@ă P/?!PҬ,J %ƒи&=B"=_Ľ(|bZ@\?lP.! Z/P\0ãQh:56uV%ԫQ5?|~PPzhDbO14gOeVX?dWr&A8K4Md~ʐ( I`9P5Q;pIjDôt1E{ lq_( dLm k)Ƅpt"Ow;_1b]etok|ֶ +]4 (Tr`9E? 㝅ݛѳc|yFm(<&0t !#bD=(gF@ ?BWZjJj_ {+6(+unw0Nu8"Z<`P-!P\ X %M{sEEgU{ Ffj/-T`Zdb*fby)yH ɐ5o(#YT4$E 3XVĥ,l(%ߘLӠef5@RHZe$h/P}C_-T>ێq*@`61  ɀ&- Bch翅_ZڮbH>~@ث P)hPD?!LZ3ZdM|j^}~X.o_7ϷYЃ7GW m KY)0[ohB>BIWkh+zu'/8ttIz轮=elj9Mj*h$ORt{Di؍ܾ)o'?/[- ( 7@DJ%lqcVM45?lZibwܛ9>ީ, sx x&'Br\uߏ-s@ײַђ7 hh8) F8$)$ Ï|IWNܤ(a #&35 &[ 4osu*Kx7m\ewr@]q7|`Ie)@6V} m?dZ\bnDG H''?_?Z$s7TP뼁 .}U*%2P9 Ll9&4LQ eoZ^|8o9Nzx*>6ʳzLfRE<[rG#=k/yl[7BR:0 ]kyTeq"%b2_/j ZƇZ'04Z:LZ&:!3ET4bywqrc\YM&sxDq8+nSmɳwtͬG1Blk'_߮%=竢N0a!tcy e`t>2'SX~C.aVś%!1lJAʯ^s2!:{$!mP}:ʣD/9hFx ؁މ]?lS).ɩXk#ȹ:/OqAP"_!{nU"I- R!<]䮻xƿ&y5d*A/U]ek?%[lEqoAcBʟMk By!aAEb iO $Ac40DW%u£zhUz-_qZmheK\h%h;wp[S mx9cSaRU1X֊ /u"$Ȗ_] jK`SF% AI P+_!C@TR( F"ЉtKR7⋩*KҪjxޠ<=y"K9dCK,w kvUV'ڀJE Pڟ\o|z\U"_+R.Z,{qKv#wE=W,jԀ)%8%!(RBɀBM/D:F5RIWS&> jtjx|K;IH&&Ɇuܓ*Fn4٦:f%5}E|bjP- DW&]YTz}fkI&"Pׅk:#il>2՗qfF[>Ti@#&0`D$@wsḵ~SC]cDn3MU}j\M Z1bW" 31 U|!lP-_! ؐtRز6 գ"Mf|+T \s7/>1Q K¸~ŹږZGݒݲ7ȿTRl,B:]E&,jH#&G ,Td6IB҅E3(I\M0_ `e)3!(0PªwFPhT' HZ MIŚ1d Y]!gh:"'zZo(εջ.A6zW ݣkL'g,J\Ϟlō=nƌ8) WUBYplyUc#QbL4 AkǴ HLfBgdv]L´MXljPJ=JzZ P1 C,Wd7"JoKw5pE5BHGH:Q:^K&|vN"<-;v\wrH)z3 -UXBݝNIMgKMЯKЊ2@xc$57YKh&&;<+L R/80뇘 "ReB-֓UjwQ2ە?]?PCHx#$:ɴNhm0K/t8eW 9ֺw0 KA!Ȉj)Ͻ73ur]ܛیf, Bk3<IT4"5\O9!0FVW3aI*Km2_t7}Eu]Txs$VF#>11xB#: F7iaa{iSV7|1zV1XTBzjۿq2g=.@g;4塦Mi̠537ffK_oǿ|e>}_>={mOϟwfW3{Le rV83dOf\0,B5:m#]ahH ;K/wP'6/C R@Bgzc ,; 8tj|fghڔ8H٩x}"m:{2ZJO7h TGƔb9HGE:.`P) BBi:CF|u&JβdB$G#Q xaW,Nf)r9CHE;̛E "tW1Zuׂy6bz7I3WxP~nL0L}3ؿ@=NW3آÐ-C0T:'&[*ʩ=5qJՃ2"+?c _XhU 3Lj3dY@R< bm(P5U'a0Q^ aB)/G>g9vm^9l1 tޚP/! RZ} $pdw%=3^oA{38D*>f1 I6hQ@-v^ 92ZjrkPͅF64?9Ύu;#; 8/h1[nĮ¤@iz]/Hdr _DŽw?Ho@zZm2ѡ& G2}wW9y+5-$%) \2bet3&x&,"rr)OQՕ6Հ7vXiYr#)EWk xU@];0(00~sP.!QS09#Fdp"- ߯OZwJ7yfɁcbX>,aGIvC:gR$=z)R,R͹bon[+ +` "PCqaYhĐ"Q 5W:>gRb >`(Vj< AH̊#BA ǎ-5?_%Go9Ad@h 0$箴zR t5a8pjجsN@b)o[,F |+Ǭz6ddUtC:}`H,K̜P0!w.{@PRWB "}2TT7}z]s WDj~M 3[(uh\*\>=<'q))d hK-]g";f86 Oh@㸰Gc@7X/=y@"\K B"qxH:&cosj__ǿ?O`\Uy)\2 "o@+% p#Ik$ک[0D~83R ls K =:Dd(,> $v gP/?!@O\R$͢!%o՞sDMU/?ai|:\0B$FWOG|@œQ)R6C4i\}mR[NKEto5rBr <2VhRAp d>O}{ <:DSf+M!"*#âRW78HTx~ ̧ Oy$ !=ޤ^XjgÎP̘f;h;B=oN!8B!PWa*1R@qiIl4a[6!K |A8ϨiTDpP0!8iNrGQh:<84r5z!Q%)Ğ,W`{=fd56TA„Bj8iB25v7 QxX8畕jY;1%q9S5_\V 4wck+0VJaJL#"Fywo}fV:Y,,ݯ`*Th~ d>EdhD-F/a1\Y['(z j {Jc\i~rgfrVB.'D8l@ĠJڠD mݼL̒vpP0?!{nOZ2$G1hKo8߶DɜJ+plй Ӫ.Se9 neNuST17)4vrSIuwEUOе"Qynj|n#Ve@V /._3` }ndn&/1X'[`)8B$pLZ 8&L.xy~v5ˡYFVzt8Uy&m !ņ򉂲18X4X%̋>K$YS}}2ʦ"Q,H+GWTAO=tx<_ܧ-JP.!NBl9+C$HD6!5Sw/׳.=s~['U6?<'1(K+$ir^REUUAtRZMѧ:i~ye8ud"y6+`.C-mhQ?x,G]@ڶ5cQ P(6kY': L6"p:&:מf^[.=tg8/C7  RAz0PET{ڠ\ٱRB;w˃Z8@ه.ji!G9+;? p =Ai^tzdbn+;P,! N\!3ɗW)/5Tչy?_2.͌JǑ3HjYcHLL$4?Bd'#R &Cgv$j$ ϩ͎@ (y^~,+?n@ap:H-xpv2 ǡ1Lš zUN+r^j}ǟ_޿C`;ǹu4&\ Hb_&1Z*.;(:^}.80X6͑tz_F'@1ߑK@a= ۔~P-!MMr Biеwt/S)M29K¦S80XADLfXJd]j7Zߥjv{rd_r#i\P')@ky0vk:@ Su# , ح,ʔLiBSzw+Y/Ͽ~cg`'wLͭdXJnـp'͔{;n'kDNGFiLjF5{5 Az27?OK@RZ>$)L.@0 j2|pP.? Иt* s\מUje]ޫ;U>4@۴ &4| ́{t#o0Yҗtm4W1sasE$N1)F*IC;quzM*dgQϼHhjnXCT6`e+ K5%KhDN C!U;N*]m#/?7?0ږ0,oi&XCJ2+XShld@6:Ѫgt|$:*ѳ݂8aq;Vq9<@xD?`°~¾ To) bBP8_ d0FW~>rJy2Lyo}zx$ZUֺZם/m>'N嶉ǩ 9PTfYeYeT,[S $ -@FNvE4r("|_":QGTtQC<,Q<(}Bf.Or:)&@qtL1Rex] 8Yea -5P LP. *lѢ4hDj_?zoZjeT㟎5T)!za<27\'U'֝Qqa.eǗ̅7 yQPݨZLÿ0YuS1ihixїDtP\y[瑛 P ba9AlMX ^i0W(VS9)ņ!Tz#NDjZRs!Ok~8W|P6y/b|8ko٘M3mXwZI\3;N4-F1r@V4To"iuPב2Ɔs0,M̬ ^l@W/F a ;>;8ZmP-_!eQ)HE&DhO~_yWnuڡ^=|qƿ{ WQ,7[~VD.l]G)\M= !(hjPK:JE} 0y.C9ڊ8Hv߬/?b⧇ϰ .0d T9*(y ~nwFBt&Ǣ^p[zjΪS rZ򱫘gq)3`pRJxTη_eh4 Sʦ8a'#Yp#\'M 9wWOTzItx0.r`pP/ ZM }u\T++qEat.,\:QI%xR:5 w̩HW8?V'"C<Z9 =Q~|Dqﹰ.@ 7AA8)o׌@ +P#c@?ʑHXPXU`F7VfT˕y5ߗ1){~"x0tumW4Pm!ث 6κz!]Bk@TkiCs&j]V@PPJ{`+9L/4~P1GH%3IP5? %2xL5[C.RկIm_iѫ{.g{^1ܝ J:@ ;<<=<"3=[ϸ}#m? 톏|vӯ.eqPFÿNtr6^0""Db d?50p!]seF=Z5ces ǹF%1Ū awXY{"PhgAkȟM:RETweWHhbFNu6(Hj`g?Ū0z\~?'to==۝xpP%_  { !hHZ1Ӟ;Xw8jRW3u]!\!CIM )S Nʋl?IoŶϚi梳aSI)Wt'Z©B<ɐ)yFyͣ'w@O3nj(8D!.Ӟ;teuj_À2U{ԞȈJ-He[/'tT0S S!F^̱ 9Ƒ$v*=A2U.^RS"rxv`JTMV^?w9{ul^PC}wA!z9߇  Q.ĆX@ߧ _Xa.*hЫ б$"- B!ЈLgZu}s3o9j|y_Hvr.4{-.b] H풸k㰬HR';# xq%~ϑP{s4Qs8=@Żvv%}Bv#R C"_EaˆR@'U%,pLg@>y,8fSP/! R,G DeЈ"כtI2C*p ןΙ n Et xd2L=}tV@f=)qDl4# 7' x]Su\6CY7_^7tmF;m A.lFdX) tLYhPijBP8BZ'>oy3.9R]wGuW[d]ss$ǥRUg\(c˵&ˠFM+Z()y1Y)8YēSwtPJߗ xLUVS,uc;Ah ~xpg4@P1! 8BQNCxu\3MDLo_?xGȵ!.hqFcYVWHCd*A`ptw!,8V*69"c d]Rmw+cqcp;9&z6Fp{u#g@ XhQ 4הҢWEy0G+dl%$PD>sמiu0[#^' ?F=_ u𓶊:Ly&m˧ 3 WL g%]=5*j4fNccGMNg:`D#mY// (gLԠiŀs 7cL4O  ~8P0!KQ[(g FeNV8:Nz)eZd5.&g^ǁ|FFn `Q^_=bZ3dG]~%g<CTFgi᥈Viiq}\ޯmP>t!V CR8>,S sو.nB+PV*7t6DLK&QT B%;|랻Z_>~+wLg??ָwP460(sPH;TLKVn=v`2\i6c=U:7CV|ga]*] o}vƧ/|:MsͰ~X\=2hP.!ObOZኍB%Ј_7IwUUr$Ư|onvw7*¼cwRNi£[n$u LA| %G9pT9^vguw1Wr}u5NѝZ˱ >^ :p $L D~%'TJ"Ј:>DE~5Tٝ-7)1: +JTms3L̸e+M.8ʽW' =Ϋ~>_wx {$) z"P-!ƦO ͡hF^R]f\WYZ?̈́ Xg/+j-)e茂1.)K.Ļ@q>IS9޻Ki0,9 P࢓ \Jh'$vIE$Q&&F}s$ $.)tmЍ@e yէǴ2ta 4BGh_U^Y4%]T͵?Ψkm8J3 K:=Ƃ^"[$؞, G,Kv(uɝ&,b_ùNUIJR{,aX-pA,? h q ĀP,! PZؔ:D$ /]pϏ!2Kʛoֽ_)?|f\x,նc ƿɰ/f^[}L)[{D0$0rSP(CDqXaT~Q/qe4iA6H[/3 ?)ݟK- D;}D\ZD#V+0 \-8S%d!. NlZc7 ~;zJeBsnKg\:Qmڀт<$k$2}VFVf,W#zBPC/޵ 矹y%LH_x_P9B&g0vػNVfՀc!И6+{@/:=KKqҁAKc 3Xee:V];6^O , ~PppιP,!ǀOZ4+ ptFMQ\W*)iGm7ǩ:Q:j5Ms˚96[w \ ]δGem<FƋ[9?:⬤&ŏoh03 r*#T/ivUW! qD  cgZ|G4; Jc AT:&$|y3'7rzz3>s-%pBO{ې uzs (#-!|B?P?FWf+|37d:'F 7 Jq;B_9L44vwC>N]wP1?! }gM lA JeЈ"-2yY! 3k;cȉ>8]2x@CmHH(-2$5!sO_x#&ɭ Րi sȅRdD%J3CSیwwLJy*`qtmJ$%3I5vRVԳ$XqkK=Z@ݎU4"Dwy;"ex>X/L _O±11IX&gAYB:={ƽӹ5m;*% w1.hUI^ @"Ϣ<?ל LjP.?! NU+2D{d{rA.n1,"sXřiEv G+LFÕCi]W ڮ}zL-&c[5=5S_AHyl}xnY K9t5ivjKR!=;h, . iէqF V?lD'I"޽y3ʨL5u L; G>Ŗ7ރ6 t{ujRPZIC,8y0 yy& MTc$Oh;5/!Ue` <(fR*Akr2'P,!  LdBfп>zoYCgn3yFeՐyJ-:.h0K8Jj*(yMadjYAη?GDk=Ur|+2=3 ¦Eu3}a:|4۰mZ+2dR  Gm(RD\smui!_noX\C*zSϿfv.^K ꋸNRtD7KQ =}MFꫩje4 _~qff "!ABA+szj͌ `y0gh X9xP(!+{/Np$3 BAКBG{ޭ*ZKLkߝ#0X*u\A:=ҜW3%2#$?.;|U$J*X)g6KOO=,{ ;i~ozǧ O76ល:$h>;;=ZC'@矶5@'..BĚK /su~jq1E2 r7@b$e SAbaVS=otPJ冁oTd`0PC?!LlQA+MXD&8]ٮY |o>>.N>!>$+>beՠ#y$84"Zd+w7/<WRh=B|G E][r/3XqM{sb$7 ځMDH$WJC\w7wg/OhzΗMptD7F$!z"B}a#=Y c`X("RyQ,/A '_L~ޟ_C/UU l`ƏFުSÞAOKҠV7y(6RyY7rZ|A?h%7 %{pNj7Ce:^&CU<ܞw:2wi<7_X#<>\ف\4r:]𐵣1Il=}6UaYis0_F^^oTՠP%!{ dU 6B$qhD:!&[ISzUjQrV_Z=_0%US\w ElD% F`{LWR8\]~ps Lԓ!$jb *J O#/,pC-,X 8y63ɰ"c"=D!pt>"%JU*j3?ƫ>XzWd(vZWՇh C 9tԅ9I̗sL h}¦@?@Ґ.$pP.?!pU[(Fe$kzߴA/hcև&LNkQ7#Xں$hr&uOi'95W 4bfl5$@Q"L@Սqv)CɿHz,-+:=\sh.Q;ցnJ@eNtɶ>uu~ qeh5P!D-äp_qe_eW@ *vt{k?KDBFSUsKYaTd"vkµ9_ևwwY0I i?o4bFǞT0ca8P.!ZٿU[(Y!E28W ԘgN?U07$qWcꘆ_1|fbբr LAn3?nCrp\%_彿:YsU=[ma_G׬TJa+{ *f'? wp{} -ӢbxDA.Y`S,B$lE\gNP h-X1=ҢjV wZ*apƺ@V7cJV.% 0paf4Ǭ&"8ahsbVVr'6xƆѰiC(0pP/?! SZ 7>DЉtƮ*\ˊm̔UU MRdj.1Ky@kE<ّWQǵiK_7KG. 6vv p?mҡg-ܻq_MYLQzKHe/ CS"JD)ˡ0DR-B5.e̸y_ڀ2F)l8̑V/S b׬: Pr_ -76'& L'j`C>/hU%{^5-^)j P1! ,_[(G)Bg"+y\^IRMFjwx+Rnw7ȦSw7-1FZCbzX$]f<Բ+T5@~p?~1c $N+"A82:">6 . ט4jtSA<>T?^PfqakiaGi\(Mvw(-+2JfOY *d)Jep<>>o;*I(N>?uDbBWc j?Y=CwwħTBsuq03 @6sneσ{ w#L of92W Kd)Qq|zษizn7WCyu(GiR"f6"˔25`&w)uQ燎㾼h0.*(n E kn#*"@+r琇 `P3!KzS\6E2ϵs{_=6nm}?_r__T^&|yH6NS4{"Zj꫋YD^'7ˋ.K8Ɲgif{KL?Xae (/>O|Ϣ*Pe|W .8िx`i4gf XmЬ*g%b~#jMal kd-סS%m\ĕ3Z.O$*$jx}?5 E=PӅO:;Idp|YRgrZf{s+Jŀ*R,nZ*gcJ.,+HD9hP 唀$EY6 @KP.! ?. Si*3:Eh.ZgթU7?SgCLTFE[ʶKp R ુVW){.g(rU㝚Ppe(Bpb^l?]]w $?W`{:bR>["a0Ә_lV R&Mâ!'nSYթU3__5?_^iT/C.:s@tT]@Z.8 P:WpP.! }nR)R3.ǡk|5M\\=kYv.m Smns=羽ZET JlM2[> `?^-uF(âH$ Y7u㏷:nw.[d <;`jxl=S^>8#Ӓ)mЅ(B2>[}TIZ犩g[^| ENYl_9]@|Ue$>T9Tm @MJ/ jTeD(ьĴ-rO@ܫCO'Q`GqYDa.e^$&~(׀P.?!!zo!RnC&͡ǍRMnUk]޶Wgwq_ \-ӀE3Cv?Ar.fWsO8$o$ DjTѹO^0ߜ) x?jOy>uVWEَ9'70(SXE]t {R<9ңbJS !J Ih:N9e55}4=xۯ!BV (GszИ+}BIB}Nʂ֠Gw(r>9G=^4W \$b@]H+3  ֚yP/!i-R[)NC^E su}$}?DO{cpUb#i 6Mθy3J.2r]B]27\c#drKn0F F%s rՖ0k?F3A7m,]T1mg+8A.)m8cxfM=S? j:U%hЉ>"\{_wo4n*gߦzeH1՜dߐ H2E?UGRz^UBy֦  1UΆv`N|wb#S_~Z y@XG S@a+( 8P-!+uT)C6ӡ!)oFNv{OǼlSߩi *1 Kn&̋ay!B1@Zj0I.qm Go|5P=̫Ӷ*{8VS-En^@~ڣu7~ Itx _GKH HekސLf^ʚHhDy|)jMoJ^gU_*#õqbfoQu)⻒RÐ% U\z,Źi:p8scaHʞ)FyO; އ.P(`P?!L " OH|^KS1ʻ1w>uz_jv诔ުӾy㾜C&٭!%M4WUò,B7&`Qn H_Aa&P/tј==fE}sz\0ʭ4 i-N~ 6hkh<NHc Rכ[ IE-nB> 9Ӛ..mb@Sp1U̱Qown{vw:txNq ʟ`BMWM0َsZ?<xX=ses_ -+nfj!{v }aqW_oWE}x~3owy[ ͲO~58w 'LkX:ژ)(| qh;Xv99'C؛TXˣvSZrU(>0U>Y._LXX('/=UN!VFޜhpP,!{ @VDкDЉt"=ɦR۹G%K!#buR^mbp*DSWDy: m &#}v |@Wl2`+*5WL¥@ ta ly7``K3c.QhD:Czgu.Y5^گז_pZ) |&ӄUAHԁ2-K.أ.qQ!Q$7AX P" =xSwR:pN1qM\.pwwɭuuug7LY6 ZpP/!*VAt 2DZ*n*TTt2LTtwۀ]_zKyEL40qr{͐:)KX`i'ڀ-R0SR4+RF.xs]$e\X4BC(5W`s[n8^&˄GkJT1L')|Sоú.h5\ X郲J1.E蛮zDoU%*J˿oWlC?0(τsI$OFh[nw/tDX6I]w+*-sX{\Sk Z*tHoAա.w g~/ב9M@ #0y=l'&d)PpP.!TBz6qKIM=؍\wJ  :ҠarEwx5YuC]x$q<Gڜz'=3H'ѫJdRxl;c~gG ejl#ԮS5ư)XoS+t,'ţDz&qog\%]$㯏zZ: KԢ-mP`j)UeMe¿]a{FJLSj`(왚GUI(lȒZu_[=n-6w|9Nbk M cs Xd؍K%`3P1?! eU Eh:Cu멹\ERJ*]}9_I@npȨ@Λܲ W:|82%eD֑cR?H 齭Vlkq5iY ١R`4 jjxW0RClD` APLJ @S:[8셅 eh"=D"?μY|Ugu =uwoqן1h2W }nN@۹`z,z40 ^|S7Y {8bXQ3(}}^l.ZΩ)6723Q<ڼ=0FkgP0_! EHWZt6DШL5WYHˤjJ׿ $|)0!L4ìT4ݴ1WK}f)ZnhIH`LyMw^r55b23`K3QYDo9SJ6'v浘ĖY+&|>Q0MܻI7I %LҘS-ŢhD:!kUSq3\6_۟`:F؞.=N! ]˟h+D㓃rڝ.=8GTl+rĤ_i re1Gpp8ҿ q'n;>2;x_B*?q=䎳 PEH88H/<$| P.! !(@T[(dЈ"=#Uy9)Ƹ_301@(ҫOj,a` '^k vZ{  2`, (`P-?! xSZ49 Bh:Gd8HPdy_w_C?E]A[#N j Dw4dtdt?e@DMUNTV˜8ޅSZ4{pwn,J>)Jq}&inWj$ CF_ǫR etB-yexgcU#z_3䈫\ J8i LE떩Jd!ŘR.-ۅU0c )h6`yA$a"(4VE̅~/8@O%d԰o`_P-! ܀RZଲeЙtEjkx:C#z+@\ڣWA:PɅs=!yoUqXu[cZk5KP$`/J\grl[AR]hx+jB^-$RÙl+ GO'i¸`.0MgDH%`OLg&]"5W{kWr.fo{Cu$B#Mنt]e3=|zW#,Wi(61(]d*T4TS=~3$ Pf$8+tqɂec^!H -  ,:P-! ֹS$VBeЉ4k3|V_~Z,Ҋw/=R3\a|O3VQorDA?w0V]ܕRa*%Uw ]ҸLͬ5Ib@X/l`jH B$t>oΓ*iSUŭy&YwKߍ UHMo*>gD4${ E/'u Hk2:&Z{P $'ޖ-ǰ*ٹo=~]*~W A\PyJg/A L6TҩaT1)pw/1Y-AЈt^[jUw$n<.yMTm4i͖Yr|rt? R.Fv_|/ʏ~ܲf  ±T`%t PH='jOq%@XCn;v[4| fim P;?!LlZ(:6j n_'jnHWVh} n(ɲFuЗF@ Df2fQA"u6:e5mvǩS`nVK-mt1/:[uTDPN Oͥp`G5pū;"V!h70#p9#0h;/A=t*TGsAoŨSg?KtB9w;D|ъH5!{U6^ǿMw뛐n9N=#4V>m1A` US;) hHT>? *SQҮ_,n4jF8c44p|cI L'H ݠj/T$ԃ 0@XeLRVîio[XFaF&it$L.Xga] pKtƝpP*!{ZVf"C :%^jf9VY5UJ]w;Dcre7#B{A+tvZv_/0# .Іj%%emźVI%B44SQXtˍ5gWBx4L^ hQHZ"hyo||]Z:}M%8C0SfQ <%9QzݺkA]cV:~rb?8ϏO.2KK*eթ[C 8eϊX?ytk" MC|>bkeO P+?! VV@Zfq&WΊ,Q 0ra!~?c*ʦ2ťR` ƞ1n'aCOSFRBwUkM\G"3u8WVUԴ LD:s]}wCNuT,Ւ w\Y$$J$O7zsh5CouNXTe$h+ExaX7hnse} o ߽3SP,! A;TP&rˡij.|eԕEi/㌺?N4y?ᩇe6M)^5yVESv ЙưIWcBanDr5 ӟ:B;>?^}f>~ tߺS)eu|%08 "AbH ԏbD`RIФ8}s"{wR2(3!4?41]ڕK%c"DYϚT %~75HKd%tw N3t:bdFN5QSU\){f亜Oly@,4"$~ p@]ShW@խOJP cӹ!,6kM&S[cZdDDb@Pಓ6ɣ O]H:ݥ^qޜ\o'yJza1cʋmH''apah9hjIH ȆQz*ut//Qnօ^ C= >墅iZڸ/FLd54ezapݠ?ч+^me"- `%eu0B"BrC.G ޵=Ϛ]xֿzOjG Rԇԩ_[v"lKҾ8 Rʽy&$lzA}O 0V@(YG@݌t=![(J2r2` xǹ[ xA CNgJ`wP,! "Oڡ.FBdP'|W:f._jk ہ3\> >ͮ"FCV ϑw%AJŌ3 )ys1{AyFy,.qov-#qlYÍ S?6~'7]xͿ0o9Ft$VDZ!ӿ2z[ղ5[~~?N ѣ5GaEdkiBT [=Pp/FDgRNC]R`1 㪂%UKrH <P2EqG (&O8iyeX/?UšFK_˧P.! ?&Rک0TG1脚!s7&r;/]|?Y}P*p=$q篹U/TFm0iL0 n$Q ȣt>ETC$4Tg 갴1Hr@g8!)#)Q+M+O6Pp!AfQKD,B 21ҾjehЀ.L8i"Uϵx :|x)@c@8 p/jjc‘BdHLI Zh}LUOյ_0opXFx i`'lG;gwwf.VSGl8'aCTؼ&ojD ky^fOȔ<8JžXrLGOz8rf$W9.z\CRhUy7KSu<\s濳q:ǽ#tk,'Ռhu .DBlP+! PتL2D#Љ4"=st]\P]]׾/@s@D7i8=XefܽY(曁 ѡq+6z'C[>Qx1 rhAد dL-kJ '~Qʂ=HnDdB \"= á!:xSw3vλ֛rP;W4 `:Ѡoi]~ \^ 7]P?\u@ϗU6'`` 7`w$w@Gbv F $ mk 7[ǀP!?! kFcR١m F#os ^y^]>x%IW/Z0GSYdKs4RYDH^!>10r⠢Ӏ36 5*01;tNugnܻ|fшb- H7:Ցfymyt̒\2PE>r@owȰ"x2 Hb^SB!(.r5䓨r6 K2@UP+!kR!EB!D 7.ޱb.\J7quubޤGgYu=;?F IS˼g3;ZV jNv[敯.ƆB,80h.5Z U $!()(e0Sh5ξUNwE{Ñ[do◉=zkߢg=Դ)B(Ј: BzYuf=SVoW~FK&.1,ȨeZCqP w\UDq=Cf'AO%AW`scP/!R[LK$w}].a}qZVtm|d^9_}{U6g34Sj|r0*8D\ErKڋݎlH&ָ5f01m+q_yp=0@y&ftx~Q/5 DyuSƖhNdiI u@MA>'@t7O 7z3 Cjy-.C4{񦷪\\ ⴭLo:Ias@3e4L1c@;Uw+1ܰtxODZOSTwϷ]Lj;GcJ$ ` P/!+ 3SX,7 kcުU7k1y/̦j\_!TwS}So o,XNv*qU)bM[,ܕPk5bSIkom7cynW z+y'X*^ їh@.ꋸ#"0$ VAGۋdA(Wo)x IM㪙ڦ2`x|,ǒ Yh+ Љ4~w5m;q.V5?, ;AVK.hАl$zw*@ pbv[ݢ a )T^E3539-lLdU{:ӓxapy 'P8P.!#Ȱ"UR$+Bb"eoۜWϳ3FG2: ѽYKܸnuZ9Ζ|K8~4ӰXI0*=>IoFcoJ7x3c/xkC"O5*w\m>ch]/r*xB3bwDnq*XB"]n2qk$犼Ҫ%>5οf.ɀ4)tL'TҾRQYg(BЉt$ٙLLR_VGw,/,Xr[Z2FpE4LDӚ;Evxq㾋RmFPA4CXDw¶" olKtZ5 e:]T̯5HV`+ _~b+{:7,"=ի9~:ONsp.e1$h&U꟢{Uɒ"P#/PP~4bҵi$P_ P`a @"XlEKz:h;t3 "шtBW:o?HʹIn_ZGL?Px| NuoёnJmqյl;ZJZڈ+Zd9Q$am/W }}>'Gl|5f\]޵*q2iۑ,ax(@,0S0 3h:BZV&M*n_=T[uΙUx_˽uC )D3V#Dw"ٓ 2٠;I\Xh?Kv /V +XTB|z%3YUXw:|G@v 0</vw.P/!$?S!f ˡ1hD:^]S\qZ<ڼ>eo\ky9h;w{(;7>BVYآOTzYF2EaG12C<q9,<1`|%77+f)JDBUW{O833D.^U(=NUg舷+^0ퟮCz{\-4h:!G/qV83OOOan #R&x:5ePbn1A7r&R6xC`nr(PdF0P|g>>XYf3pcݶ5eN!@& 8P.!kT[Gs>A.zP{A-(\ǦRF$@5Фgf)i{ÔPJ}.Qt1$okiTNހq8ݑYvܙg0nL3qUAYe袖Tpv; ~FO$h25f\!h^!%^>N9]]]E޸5!֫g1̃8@'?WYm!,B[R3\wg9_{ʧd;2aÊ}VC==%Z֘FkDJ*ʾ kW˟1 EWmr^.ˢd=[+-tņh0IPL^'W»*UqU)ν @v3{Tʥ_:DD~L9^b;hDBX<ܚ>qCY:=jP/*ȻۓU"rN%NQ(M+n@dH]b.( ^X流ׯ&>kO'2G!.,d"DjYs(VBۡ$>|^w_|\UuUդ3{%A;$םP]Ƴdq]MM)yUII0d%nrEZ{ 6UOjoxv$ڕs[4L<0gs2@O;j8VnP%! LXC$ǡ L{=ԘV<%r* #K'(:qJ;DDDDBOD6P.!_V44 C _^[f=2>msKy=PT}r|L0ӄ&DQoQWĩ'q6'Xßfge4!~.M>%z6 @sRq6BEoQ8:Ğ& (| <+’ `#K%x#<ݑшȯGZ&Խ"%5jc]?"Bl24ELC}z]TL\%p@ oNMA`M3`@guTD tvw|K㍒ehoP1!TܨLs+U}n٫ղA2Kmkѧ*ahjtnL/}wLouAhfҝȐ11\DΨnE dKps 2*XJ$# Np浈:Rު$=)]X"ۨ+Fȩ:YN8Ni[XqsUk1 7K<:Bu0L #Srb$"UW{j[$w- 䔡7; @Bi^ 'NZ40ahCԈ,fLA| 1@:; 8KnZ Ilƈ֬18Zqk Uvf P5!OܨC,L%~39*EAgPɒLi$𡵥+/uk;"ZY{Gyd69&{,F)e cʒu(1@PeћfHbf . ˁ.ay眅MjTVxa%G(Mɀ`R>a 0[jm5 T+S %br*0;LG׌y$"{I3$>&D-kroBTd˧Ԯe`p١ kC еj5 g.qkte#vzs3 Nml@ մۭQP 2D88P1! ,lPR jCh!h]KY*rJ OpltYyLR\ .S:ϖ5TR$HGEM`:f3`ʋߴy0 8- FJTu ^FN==NOAj ^q=0qkHklorZ}NXyPqWH=Է(,Beшt"&;ue].TOsQywq)3ש,uÚlYN4Ґ4?Ks߆D% Hк\B7D*oI,(nZrwK(" @ Wo`^ P1!}0R\3+L"]g[iV zꮿ~> lB=32im7%8c0$Fw Uo$gsNo=>f,b-Qǘ1=$Qn訌DȵPLKYxZ ILsstSVj`kkԃ&)rM"$\TgyB*IBV^ )7[Xl%p^- B]cߴnKzxu?g0R646;CŮfGڱ!c p8dQ@c? Y PV5LbᎣ&.A  $[t( כt_kS@$(P2! +F0S\AD"Йt"&Mgϵ)Zx zAؔz-o(a!mѾӵ[0ao! n8]Za|l!D[J.uXürRUwʊYˬ*1jqp{?nv d)?5pB{A;=Kn:)}Z-7F)MшDZYsq{t~?PP3(з$& !TqhA.vim >z[vclU6paDD+D9$N5H-E|l1`U5L@@b)@ lP0! l}R]jC+͢וWιHx?Ex ,xKbqrbURJʧaJp!a<PĴyƮ5&KONq++Nva1g Kq |G'ś>Sw\\k9M\VͿ֯UO ODnz;ڟBkKkOkWI"QrkGgZC0H^yr/8Ϛyc 嗬Ameyxw7A~bDAoR,a`|N X=4J7{K,‰|ju L+Rlcus8( TP.!YRjCGQhD:V{v{ዒeqToORj5Ayz*}c: NnPbQS:0-OfsiU8=*/̊0x1tkc ]cgovd1.y7#g0=7 T;D@6+ .LT-R"C[u$˙<?rȟTiLÇiM0>HnCp!( np/4ǁ8h%J^~'_ <#Kbo12 Z0=)?~ϢHTeƚnP3?! 3DP= FBswepɬgOi~?ߪA~Z]ekkHV'FZ8_c7)o?M-'ޣhy)c .P7$=ӓY -Nش~Z@tC7˽N^h3K6;a}-J 5RX47 kx& KS.ϵ{0._u(){MK@V辆V|$?dpɬ~9|7sM@Prlh#s tq5q]HxP@F5[7voZ!Je]W:Ibl׉>~n9V,Z*g9UL5-@ KNZ P]$t%%|P-?!-Q] 3*Mx|g狦{LD  5(mP=j5}ۘɾE¬2D0?e `+|| kiY\F9kJ 3a;#R2v/}_Dt]Pw@P/_! =U\3A B"5ǯWS<.CݜdT;tGJi+\ㆲXˏƅĀGsxQ͇B NV㸆An1h[$rio U|sPgP{MXߟJl%| E/ݟ Ծu{HbpA,JZ?/cQrs&=CxSYlU:ҥLin?W7,Z @H=[^Ҕ<]eu[e<8bfG"HTB =40]+63dgQ]v8K# ô7Wu2 NP/K WmnP1?! .IT\nC&ѡ"8⸩Uy|g,^J9VaCUR«^l/._Ii{8jآv\|x]LZ7W]6x@8Pn9h$`]wlp؞ʿ.6P jɖS! %P~gc֪p@J.V;k2F"X MشSR$TFMU+YO~׷PKߌUGT#u׋Va-A=]g%G9j1Ӆp QE%,6ʋT\>f2$g1jW h :SJ`K L TVd7P.! S(UfE+\s8o--JG'k ٵ@O5z5 88H') r. !e3 (3 SZk*N^9sJlHfЙ4&/ Ţkϙ%T^ߖw+ =ydә%KLs=3N̹p ߂O[7Y43 j+'9nmb_A~OEe@e_K/ƀ%.p7P1ax Cr(MΟAy5]ԫ\sT|P1! S[)NC$~czxwP+/_櫏S87+V"O-F2?L]7\\Oq\C)Ź;@徆q?R_$(ċvތxunM{Ŝ#&B첿^%DNam`+>hq1ڿ#~te~^$c%duuMk;5Bp:AI\|L.*V^_%Wgd";kLÆ3iM`b/ "-M(9[`"8 I7&[i/bT4EG%q"Hc@uƼu%P+!+ ?-TYBB(]*oZsUG *~_!:%1zwu,/6 ^+G0O'S-,? wVDrͷ2ԿnknhӧK^/Y3k[jlsVU |:TI s~J?|.h|-%dz{V`Ȑ%dL`Huq\lS|x}.*Оxb  Z˛6ҁyu#lV`OP@!L#O,sUH_Z}? /@gb !ZdH_sẽ~QEG`$I]`& SYRN@8D!|^8I'ʭ1@nY<*4ņ)\ @MakAg!: Y&4(lMbtr._#\Bzb~]I)/V]7OU5lQuUu7*þ D6G6k6[>lɧϟ:P/8w2)_q)nZ:.~fi:a`߿\t1kz %$c)_,M`-%v<+M'.^:}vŦo%?O$n  :M@0DJыxZXŤH|!K:mϬF/ɭ9q\$ɛoPYlw79=ӀP,!{X@#CD:Eq=:^ZRQt/ ,3 rՉ$sv(sSYsˑ@j_R%"Z8ȑ3V D ֽN V&׮dA-8Ջ0g.H6X6,MGǫi.žG|T߭oU iIe(υrvF&Ȳ9&uMY%(ަ&y#?535rlǶn( ˆH ( &@bRnFvXp<"'b%žP.!'Y¬0VLp:׿glV15@ }S0~xC9Phdq֢n%_nH@Hrݥ&M~F1m;J1MIg5W6@w=X%AN5^b?8Za$K,>"D_5uێ58V1\iGD8p[%{ZZ]VU;'O/@8P6cA|`:לP5L&? o+g|}§[Q<2@8P0! @VؔU3 "tB+zφ^k\I ΝW]@2;`Ql9ӭ(sjZP t,'d?_?"6ɪrdk$( C)@}[Gt=\g;x"ۑYYx6oD@I@; Hecs笲w]޴@|~[f!СJ8EhD:w]wrqJRG}_޿4= Dץ1k$P4rx^ St(& rk=hBkSLܸV-ciVsW }(L4=SDpE>Y{>&_+*[޺zlj /,K]p@;_eP,!+_/pR F!Uʜgj`W 'kV,=my j VHKJmݺl,t yP@!LWxOZ;eMMTt>*N{WZqT ;|T8[{2 `@?v ]]`D`7|}$ˇ 6 <-N BC?3>(HGc45EpY.iP@E28 [\Iۀcs[pË4W륳ߑY.-S\/jzI\}ݽ?t;9p_:=;31 %UTYI1{U6l|^x`IS!~oZg\϶E&jZDUi!`"BB) F=%e7]#B6~j!>R񵐬KZpϧ>(a1!iEgS xy9Xz$~, ]&b1'P :h"mQnȿhvx;&7s9ij7T\P'!{DY :8wryB_7?#(Ipg)² %~A/齀UfUeLicO=XזHl:vTZ+`T>p"v0 #$}YvF#t>529^:ki8=@DX8-7-B=m(2aUȫV/+.eψ0=$_ 䡀׉( w5G׳DT3]K( w^ [ V9N"+2Rp$[P)! V:ɺ1:ߵm}.*$>!t+U o[&6'no1%*3o3OHZPTR]'qEt tPh$ll)ߏh.Kfl|<1fff`tVPuthx4v%zaАt"-Cs{|DJe貪g_ s6ջK|m[8òCYx^$;=L{6e _o&P,!mR&4Ba ĺCox*$6ҫ__)^ډHc6"U2*d5+k,,$KNvYeA18AZڐK m9WJTRk-Z$ Afww|UĿ82d-HLJL.C=yk:VOiUx֟/ԣ:.a>5cH Il٥͙ = Zfjbj)ӥ[dN@+z]OL'x nHjP7v Tݲ*&aj ];w6Qw(P.!LJS(1FCUW=eI&jZ2WOX^[:A (coPNOl}umt)\_i̬>Mj PlFLV)N4Ǔ ғnҋQ7x1s]T&gJ{JW!| y}2 /y)kSalGАUw7Zw3Q3U+8)ݫ^hZ,(s$e͹v r߃㖟j^*f?0W-2@AY=rXkA87cex@Qs7I0nՋw5C:UߓW$\P5 C!k3nJqUmEZTաaO|yk֎E,Dª;pxg8o>-*/!d5BT'ԣR^-y)Wi1P+Jv_c-[ ݶr ي@joLeouZ{C]]+5s7s>{?Xc#IեKu\S" cM8ܕ[RҮ*޴k(o$U|6 N&Om>;]u(Jn9 9 XYrh_fVƭ3mA:ZwuRkXI[Iw42_P  t"a4 O66ܜSFGqT7=LqOFWnvY+=wEU bFuO6+I_P9Ww RWSuw}]V!}_  i~kx_R1tm= {N *?(Le M"t\3f-tTً9޳y}*u֙}}K |W{1*TwfZkM zUq{VE#2>b_W|F?x4bQU=I< JWPam΅-rf,x/Ϊؾ&+ |vY0Qc RYq0q!uPwx}&8F)Ui# m&:4c*uqre8yVM _ D D8D5IS:qUZmPŲBs`@OtQ(c>Pm [9> cX?>Y`1 ,S+뚐/e|_p`P/R{P1![/Q\R#ϡ Q;N9s%Ԫe̙P839[ܧjLկXY\1 / -)ZA>'bQ b yjRy\J6ýEiA\͡d^B>z4֎sR3?ݟ*u= FxbѝQ@2m̙oxKC\ƮDL2Xq]u45kh ݜ}NSu- M"[%p EMD5˾.Ϗv?m~P1!>zP&HЉtf_UMə?_cRr^#$b^SMam|h`;c:2!g70>NN"I)NkH+~uf\+@548JN 2 J܌j~'|V/7{[JY@~'Ý+KjCOρ GXƨ!7P.! t@SZ! C8Lz|<}5y7w?{i0 G [ $4I 8@v! d3Ҏ*/Bjš]y@LR\Kd1?dξȎHPu1|f 1}.,# z9:ʮ {ԀAX&9ŤNs^>Wh}s?8s@ǂ{`88$?Ui6`CpWM8P0!H/`PܤK f8ߏY jxڿ[J2#ШB-cY,T[B/L, vVN‹DX\Y%5iRpF:zŬl{*p^3xUrQ//_}b/v׃eD@5*@b'ŀ3BL IbLvK‚8Y wz>|cN+s:̈CbԽ.%)!2*WNNTvP1Ma\vVcK6'q\2 Xx? eLmC2aYIPP1Lavc57.107.100B6[P- 3s^dj8\_<@$}| p1J##e  Pf3qaǼpdAAm"c0(,ޖQU ?ݗTؾlE~/pFeDۏycr@ gyu̩d >+8]L7(DVF% LBa:o2n su{jδiTV4p\2xTq^0JtFgPbqҾƄ'!w ?w2Dx Qk?0|@k6p@%5CT#1y@d3em:P.?!{Or$G1i碷]s]EI7~ޚ">Ŋ,1sT`)cQٹZqN'C[ EzZ&*q'W]fXarcܴ-qxYDNsEPʑA50ovh<& D@v[P+TRXM.U[EI?uVXJ.b `1Be'u+& Ş3iuxB,`/TXV.V ss[DcBPF+&R^wەdéLEh6"X3R8P,!N%"I B!ТRΖR">o_lBu%@RRN&8r&LL̓Nc5g{aOouSӞB0)FSe951a/Pn7UMN0 @W|Ai, 3ٌ"q)R[_(hJ4"Ah(Y1BcHZZk.|iRR\^@5̠ykB q7TQBĵ\(p10h9,E<3)Xۜww -) %e ܯ n Q> o(>s"!ܑV?PP&?!߀Rء,jBЙB] 3]?z]޽SX  +眰EQJYͽ2pPc!68 ߧ{|6 րBxjCO:~O@Of%gfm-0iDbЉ^B^SG:Uk{޾}Su?[最!A"gb]ΪTeUU[@Gh*Etj.bB kE/>P-! U6.F(JU~ؕƿ+1br]Y!cooӱ$"&|C@!b2;\O@s?p>S14gXQn]pf 1;D'1C>lLבxܤ`7C|"$Ɖcp"դQAhCrn79BN6Z潟߆^πC1Dך+) 7tjuZ8ꭉ\kʄHlUZ8GNw$Jt{юJ^ 1o^ // @pP2! 3QFW>l[TI'?!c8rO W+ܱ} x 4mc#br`y/O@%6ͱC>Z[(dfLɈf:hlPv`#4h8Ֆ |Ŝ 9pf svU?  INс4mkrL;>Lm-9xlj- RQ8ćMlE{VmN@K} L$xxPs{}Fq4^i|::>ӈq1x.)_)+H `P$t8P5! 8TJSd]iT~=c[z_FB5JMº?S2u{UU$7]_u 8||ŵEzC{ڥB(踦ilFEOM*a)Z=8V⍬%HmQ)P3Bu3^;ˆ G,AaX 9>d/[^Hc^WA8pp T%)O|$*e޳ƦuPa0H}j}DžN 37o j$ÿ ,Z|ҚA?C;%p2IVWȻ;`$]k`u=DC%/ 9t`< F$3Is(o`v/ƨtO: ܹiݶͫ/?-c#v!<ߞom{m׳~z5˕ _֯= ?1cs3 .P=8"G ,ǩR|ڃ?168%M3lF$} \P &pB8b5 P—Mg4?\1[a(X) y7Q`5r{`W]gVޏrC |}yG-CqPA!Lҧ@SQ(횺Z6٫.jZq3ۮKg׋ֽK<i7BjڞW~ֆz1߀}| ]*#oE>t?k>${i?5TJlTt{xs;?lV 9Ak2R㯸Q"CPLn~~$ 5 MmioQgn&pI_;lvHATx -'G 5o5iCEMZh+Zʮww7+wsV#nBq?Cx"AU *ei.KY+ 7Uj.ulMY]]q#0fIj9Ը"@jS]!0Q2}?/7e{6tr?8%S{ h#Q&Vh+b[^IsB9i!&0V/ܤƏP.!{ @@W"&HB$Јt3[L⥑{8r׷58A &s{s3E0KC<&n"*_@$G"s{c"q6qxde#Z;Цn%B'~\P;Y ,}K"M$pˎhT jukB#TK8T|/p ڙ^̃؊M'Gf\{ڒuqq>7=OIߥqu@Xq t &6Vd./^eNklʦ[2.e<_}}Iʕ;}iy%cPQftJβ5b39,}& +a} 9t h?8P/!|WvB#Љ4"\8yŪuh W}O?n2ς:;CyAB@uOɭ$)@vMʆbeeqۘ(P0_! ɖNU B#ИtM\s{V2&zEo\rRjk3w/609r: 1V;Ы҇Ģc-\h}[. .HP .,@1:oTIAJC\)_4VB3QXָiq䖄2YpL +@8>_d0O Ӽ }UآLE0DZ'][랦|o;Zou/9"U kpPؚxn09b#P!1Ma/Kxma1 ^A%SQJT)1GyWϛK)|XfcY\LJ!&/ XM} Z/ )\ =ZtP.!_TZ f B2Z%u1r~UTT_o? LߤLa)8J-Hq`w`"V67ĜdkBۤF518MEs4vf!Z H0ن!֙]D29?wqL %ITN `$QePЬ%.EDNqβ]RVw?oBwrrt:0sr ˴icYRTJ&tDDS~rb[$ҭv.5o'E󓫒 Nڣu T"݌DŮ@K35a҄.co0cP,!UT)J!:'~r~լ2Y!*/z=RKm⤶8磭3"р' ϱ nLZ_kn3n.ϨɟKAĝGlxbLUC) 8r$YvAf^&j\SצBC0zMu^ӿ9Uj^8d2e6g?㐪I zl͈*Y9ҁ4dY;[܍?WsSPj4=.O6q,8)"z N51H*!rHHZɩF`5?> AQ^"J x@P/!SZNGeo5׋b*\U3ˁP-,^6$T8gS^:]BQg)9۩1%p'gE߲(W1=45leӀkaY<*`v(0kvV|[h~J9t|@95~\Y Rݐ驎RL*iqHá1脾 O99*M1.9_d*?rfr1eh_Ogc>"<1~}&lM˒LRyTIciv urXm(B?١D+t%^Q~,KNVaL'.hP1! :r@RX,D"I-Y{wEW[9/zhT@JF@],2j9GEOwJEm9aiS3Dk@FUBV ɛBZո##}F"$K='foQ ĝ>*2 7zJ`0N0>k2 Q!b=B$9יȼj=sT ri-*"FjFW]f I43a'nj2 ec,x[W3?BST/g4VyA T&flP:d%f58|` BsВܣ()|bpP/?! wSZd %Јb#▫_.%k5^ISN'BJx@TYx`JVr m t*94TL1%#ª!q nGdMO+!v`2K{&/ @d!V=F%Frye:&A@̋ ChU ߹M )իgj$lCQN-BDxƱV7l]oR3MuVzHVH׭ПD` HoYch-Ohh\HH魋I$<& [ARζv Dyi IFo0S E@m .V0⾲Sa4JrA`8P-!˿P6ˢoJkzfʾ|oV|Juh}7K=b5'2/wjD 7WB3o{gD wp ٥ :H`;Ԫr:(%'W_"񧚔5ѥ&zRP=/5`sN74JO@ @'cϰDĚ!EoOI?U+[,>?:fzR}))h<⥬LڅQ{PP KUȋb{Lȏo6YOn* 'OCMǦmLJr@| 'R,}HVcP.! QZa ƱyΫJp^Xz'@NDc.^;*ԉ W=G~NEUV2b翽V}oe/WED<PUuޖDĥ,/L( cT$-P.Ỳ $&;wg o5*aw4uk~ @Qp ꇪc\P,!@QZ$TDc7n77x[/4M`b /E؋/QS0dW$^QH$nb]O\=rq޽RXףUy7Ux#R8Mu.ƊV̡WI rN^R։u)oA>s^L" oе1 wE b.no)ƪ(T>!kqVZe]_w+&v~P?/3*hĺpVAF'CψVˉzlqO#"#:K`\jT-nr|EY>\ %Cq2'3QZbpP-!cPv^mua2k^:j)}yNT 4qYa^cO؁LP~*N1woW;9h1)$e=i[㛲 S.'WX3>WӰi5qZ{K7e/:q`AjEY. jUhlzpr*:k2>ja nToJg8ݞQgBn bL/7'JثVdEKi1飾Ⱥ0&at8DTi:5]7gMܔ Ѩ r+O[-zQH&) Kp{h `p xƔJP1_ B mнfBЁz⿏ޥe P X Yc"Xg!b0L`̮*< `_4@IUQ'lQnyXr AAv3 T)~pk|w\G C=Xvb Ʀ&( !0aƼn!򵧏қb^1kocׯbj@2ۼa,ʲDo?W  r)<RtzhB0b6~PYjc>fԌ]׶gS8#H{~}<ǟ}|Q; ~xAHKlѭmoP5x>2S^t$` kمzܳ/#?> YnNwҰvAvxiw+nW9\?߻4?1<lnnx vARBh6d@jcvvo?IY_Xʢ]@\g/CDˮnu%f'>NFNLta _'"?,?J I.P-! U 7EH)wμypBU7OοafʿæhF%IkMB󎯘R' Lt)KgzWU2{%~@Ew 9+3AS Gz+yAqauQSq` 6A/<f/(?pĨt+F"qhD=z֣^<%;g*Z~Gp/j-TD oӹULp 9و)6.1Ŵҩ-c Z0Cld*9:yߔ)hGR't>\з{O_EUZ|_G,L;撛3 d>wB ^Ti[b\* S"o&7yYW?F[T5Oh$g- 8hӨ3a [R4W~vܷC~p`Q8N2TuYns-@ELY kq$-ҙ?ZP/!`ӽZV[)*c+S&&jdQVRW ~VF^z̰%Ċ/ix8[vSkkH',m\ /vlS0TJu Tsc=祽EJb*TCQus ~Nl@GXah$({F,z@ɯ?NߝiZj˄IpD:H!|/t":swųd;o.s2)~LSƧ2,|h1Z}Xі͏[LT$5q&x){+ 1a~wB6@2 =S?78wJ3P.! O[T`c+աN%ߝ%5t䯯=WU~',bY -vbQ`[otj$[R`tte B(qNX[uw̴{^9"jPO$pVf0C?@>6P0!v~]U\(k}s.y7|+N?ʁʧA3COʭsi̦̍R@PC}7P I闣veulzgi{5eO;TjU?Α%~pTjQXD 'qX+DOqQF.3*Y`r.{BZմ])mZIs \&o+R]ىWS|<TbNѝ$&5j7G$Al+7k"`1j9r7 &X-) m~6.S,c4'rgapխ rN!HY@N_y  ,ỵ$ P3?!۞T\hC.DkixB]~;UA&OƗV?(f r j(LOJe=KnMR<]WGBO8绤{q}F\10#+]0/3v]'8nU BU8ueP*7߽N z- X/5i# vc*iwǏi={T뺿~o{wPD["Z ~j5/0x1ʥoNf4+z\r&+ȯE{:̘: KRa/^+ qDHJ?Gm}o67u0ϷkU<aV]v4gi1P2!CJR[i*Q*GhDN"au/i_|_44BVa1ugDCwQۯ bp7^YT`NiyBN p׃/ɧ^`U|7A0D3գ#鈾ʲAQ!& }_m uPՄ/ǎk8Iq9/q o9.Jȕ_:OoU(7$5+ P2!D@T)JS+SkrZWg~??eKEDtm*s2MO&ߓEA)zPn짔r*2G8bn<%,%BT2ɓj"71WFVƱjb^'LA?(逪= V0 `9m;WicMŠ1TF_âmsޱR6_O z4Gb{a?.Bi2r^Љ7qe% jG4$)Bm$h`c% 7G^GdVk@+WmRA ?U@5;y)xX(uBʼI|7# \!sS$^Ew"Xyq@Lo14ODpP,!z?U\(ԬgVN*ԕҿ21~^%T}cXi8ۨuzrL"<5"[P^ 67R܆%4ڨZz |Vڸ#(U>4@ ɳLg% fV8U5Z'j_n+}UeIY__JʠŖʭ0[/HsV#JqRpnzRܰRs4l΃D!z}SG9laru6*|4=~D^8$ ^d<+GP-! ߏmS A:AАtN:7>߼Pqd;+}(z.EH6Ra4#w ,pnMxt%w j1apLy]{/D50܋[Jz;89~GZX 8zeiK)|W*zu`[5pk7|Uu5޹o+uZpEzͰ(BbӡQE ފlSN) o*yI)l? 8_-"¢%l #ҢbЈ=9p}v3:[p.-n }wI U@z:5d=? GP(!+ C SiQ6ŢD!/tܶY-ӟ?S GG5T-1[l +c':*$vp82nBnɗ11a 30%U'mgg+9>֗Tze떏茺B!)77}cso>?~9Ib cϬ]mM /i`3 mT.\<=4Oyl Bx 轄 L0||㓯<@ty{7?:?pPD!L6 _tPYM͘]NY4%<߳~|@uZ,3֮?{风Nx܇}7U>#bM~ Dž%v͹)@Zg `ue;JP]1 W6Z64/AVL.9`h8B,AaITOcB^GNc%fq<gwf1Ӭp_o)$.JghWPod c\>q٥"F=SXE_-OoJggqɢGd w%vq>j56;/6==+G^޶Ӑ ;@-epX(dy]8&(*;K\ ۛ â X]sTAUXӕRsI,\ub4%MZEseh% s>RuHdd8э@l4F"*JPev&XFDc|NDp>Ν*4P,!{eYB1D:-YRRwq$,mv?(*)dε?Lp:3u=JH˼Tc#l.<ܒEu%)E *b˒gUT`2xWҿ̕ 2cOo.`ɪRFO a }Yd2 o8vA(@gP1?!.#WZBeшtUZg1zUvU㺵SsU{VmE"P/"0qx\5!S8KoȫCUpHD5~tb]t32,c؀Uv ltipjwI*8BXs*yE:)ǧ*Gl=[Uh_Ƌ)cԚ3Eh\|::w=f lTWdEDPGcVG?bpEOn̴W5kYF@}u6OJ&dN{n 3I-n<v! o7NtV1 E_0@ӷ0|P0! hPUZ̈ DaЉtMU3UWj|sϷkmWOY(X zecM agzfj忺+(˺ܷ/&S /9<xċ\sLzwhRw</ImU&Xzát"-뎹_\Jure߇:0[-K|jIo+2%]Dw$ ٓ!Ƶ'<T8U+ .܄UMu<!$P+!'TT E1hD:!8o8sDZ??t68:ȸ&dAF$c^5x8G/2?5"ǻ9$wn9Wj _ oM?) o)<KQ[b` b_7` c8h:A8o=/֪toڿ1t2ݻO/BxceiKguwBjMj˖tA@ Nj1W#U@GZ-1 W &7prka[$. Ff/lP.?! KW>Sf&t"D^VěK-Y:Y,1(ajG5XVi,<& Þyƌ];.6eHs)4EUftwz&KMXt% Dž- "Z.6 <^􅣊1;ﺦD3&"F`<Q"= B!Љ4)ֲ9b%>Kic:Ϸ Z! 3(\ ]_U0w' +NlV`â Â# 9\$?JfMgNlz;~ 'g5M&4cnP.! g5U[ f BЈt&M 45\S/Y*.?U4lݜd9z'Xq+ی[hJH28=*1N@۫Γ$""({"f_ՇB Va6 !dqx.Eܾj/\"e" f;4U"2H0:P lJ$p.6!5빪̌P;9mxs^xd skZnPsS%b3{e~+./tGUUHy9$UqviJ0((g:p?MGb @soe2P+!+vS 5 FL&o_nTUԫy|JgƠˡ/ñ"e3-]GbB"k.AEjPX$aD#Y7Z #vaf* I B0&~Otc-}?-`7*W1C&L|T(z5á2h>Dӭ޻ΧuV^O_ui}v瘀P~I[p*GkQr0pkʢ;l&.;mB#uY0ͬWӣ25Zwd'ѣ1Vk{[P@!L&OR)mH ٍj\]5yxּ}tWu5%r=?ᬫQS(RD) > A] Qb唓8kUy:IuDzOop #^(7KY7oq7 ]ZLsj *7E a2c"WEPޒN)MVwx3A댱KblVYB/ݽВC!yM(u {M^k_=qߟ?/|~WLnY5t>eB?)?!H}%J.XHgl&"GF4O $X{[tGzS?u>'r}x6Dȃ>aϽGG=簇`Ϲ X}w Mdtۂ,6E&^&3RKيZ뾵4ÀP+!{V:a "И"DU *8FvwSWX. <3O,ƕ;`n+X h K1hi.򽸈bdi[nϮGx[5P dzڋTaf~7GYa?^ `D:g_;Ϋ]x뿎u氳ØUtG}Uwa7u^9efNPҔ2_*sP &F  r1)ijB:s(KW9 _OcяKP+!ò VJɡDIxwU#5+OnV`=:u/,Nldu@T;XC9f>x=z{s ZZ` Ja@0P+r ob@e"B>Ñ9 ye3F!=??Qr}'#N  @ b*аt0-Ihܧ3>%y?/.ߏ5a6`9tз 8I'ӊjnx$=R+Im"4&(e@F(1EbW,{djٗoMz'vP m2< YP30 P.?!QTЌ6D%Јl]URJUcV~>z7l*5&ߤ1W' يu("~@);ȑs\ahcb/K3$.!ߗ^Ѻ7fcltƙx*rǗ-@OX F^*MTb B#ЈtB-5WS;կ\D۫I|vx֧';23$Rf)RZ9%\7-8Ih`V \|W0diځcU@57˚RLPu3ufFEqjT =5 `XwGo @c1 8P/!{VJ(=B!ЉOrjsveׯ8+'F2ҋ!'ռ(M{ ekN#T0Qa(FVsE+F)fo2ZbM_mx`ד9rԂ᝟f]7"ӹ9scP |HW+ V^hD:!NM亗hwno^H{ լ'.+^aPۂ&_i}&+{kuYp-4m~Щ<0U_uJΛ咂-{jWlf^0f@j" )3jTf`w*P6 )PZ +BaFMeMeH +qpsϿ௞/M:$t-paP;53h,Mћnz'ڽeL79j3B˼vOqiO%E$JuD@~3ڷKT{޿NC[ `]tM(0tP= rBgs2VU/ko8?_W>|~/4#Oq=29=Qm.<;*+{-ubXL0ܘ KgXϔ'ڒX}ܳH}N|0Jp 91΅21j]c2LyoD|=UsUuy=1q絝{?<[tS&6A65S߫F6UٍET6bz<TqPc/Bk UB<'S (. M7d9D$dq-P52`5%oS*W@9K;.r_U`)R|2Lk{:)Luo<]3?lxFw< %3GZv* tgkHDɭ5J Xcq5-JJ* 'F[:1HP* K\ZC DJg]β]Jݼܺu[?Mt{㞍N} ܁V:Q"N*ds.zib=WS cu !:4eDB)sY3)st iVWSU`2kշ0z`ڔ 7KاL¡Ш%dĽTy{/omX}V/FZ7Y.* b Ap Nt u] Wڶ L@@`wسdM_K`H1wf[|G/P1!SYd Љ4+}Gus.+~sݞk$&La;Q+iYjDA~×F2c 1a sVIR,Y)3e1 a4*o EJzuW27Dxg MgD w$ 2iEl\f; )[Y]\ݥegUoSJd&\ qΎ4t{o<9y͒M ZVtwքYh>xm NMחa1V$U8j\;9P(_g P5@xAj2P0_! {-@Q[!!Ј&ߘffW+Xk.=#W8o_L`8QH&B31Ho"Nw׭wp:x$UX֑" [R3aJ3fZ23A}2+3w>#z,Ay?sNdGH ]=DPX %u R3j"oP,_!/@Q[r#HшZWz5Ϊ캉xӉSlC܈kf*p2t,`N6mV Fmn8o&>aS7~+iykLYZk|/J@@nt`.o9wwP)/B` ,mr X1a#BaWzVnڡ/q? Ԡ9֋)"&\˥NY" KRc+Q4yjJZ@gNYF6+=7@@`P0?! @O)AdQhH: U^w]8q9|wXr $xtS&ճ5')JE f$sh@ݤb,6*s=EhDVO'b±ԚKpq*7nbjT\T @c/#U9Bb_|529ԅ@;Tjn@Һ y$'퐙AB!|" J﫫eUֳ^֑O>x \Q[$]xG!4 ]f? }IJlBVX$vkWfDeqYeyZ⤶V@z} ܂^ Lzo 0ZypP-! @O[r#Beы\*]$~?]ցywF rp!$g lЧfUh(#J^4KG t м3_ߎHNE_uF9XXʫs=vA#%H14$ [sϞ+ɥ]$=_ftF?v bƣiqssd5>`s+![mNNsg. 6 _M3qZN>9H/P 2 P;}(P,!M[%5"јZ&̜o[]ԭµ 2NJƵL/O*Fs"xqqa(GE0m@H.إ 92aN0a (pbf>xxbw*vkj1W`4b/?"7x4*?ձ m](r#G7'r)wRµl=cfޔ ifcM!\gÌh42FǓ1D }s9 / = Wu0̻`^sROԸ^}P-?! ޻MM B"W漳QojL/?hqc6LUYYBR=;]",ziE4wkFD·&dj QYt__f Ͳs PEjvHD1K#H>; ܺ]~T2WOU؁7lcK4*3#äJ`R`)!MM:IxR]7^Ѝ[$juZY#`b %WC8;ho300pP&! *SRaj6ɡQ&xmsٮhDxcȄ`Hs&m80gEGq2 0Ah#j5V9G,"2 s9Fj}7:9[@ lR1:YkqD:"}o5Kskv3<_|䫊 z|헚-|<\|-4ޏt<_eVҿ5 @Qw UQY"'XQwP+! Rpt31hH:B!Ч3m;yq%)n>uuX?5 hYfn_}ApPpr(J4ERN|'Af߽ ( OB!( qK7P3PT/1GNx#|HSARmn3пFETs5WMWGﻰܪZgaT氎),j  e"Ţ mqw"㋬Tq?[*Ў9¤%wlKB5Gm΄6@] Զ,ݍi ҐO5C_T,R@-*RP.?!.P[hVlҥ~==}Z*wy^~^d> Xex߽w+jO W/[Kۮf9F݃N5L?G]-k &=-nM"TI w9T;Ad@b[mоo Uj^:*X\2QvA8-en~B-¬w?,TcU3!!Әlh˼Wݤz'Sk'E\f=\'f""ҦOr>GtKP0! V(& ^3A*^{V<`MfLu+_H60ˤv!нs4ogaVjY4.5 P0t!tR(>u[^А+:a7ca|(5?s@TEP F^aW zEȥ*³*oVT5sMs'nV0:B^!-]FпR: Q{`P9 W)[.]#̟ɟ0[ʪ⣽Pg+$N UxY ).=K(1#$08󍥭Fa&~bduB[?79H\z =e5yup:Xx$3S1[^]>E3>_p#  ZQeOXJY 3.%]M~{W$%d@ح:BՂ0 Lʖܽ~cCOhuB Ԧ&Nel"[2.5 }\d;8pU ~֙Nf c߭tgf;ݘ#tZv>q9)y䵉YJP> & $RzRZU&ր;7)W[-(@Vߕ@qzv oB{mc:U \Ģ/V5,B"7t9nfetS*"O`܀KtKPr=cW۶i`ǿWhU' OM݀H.OV= a4i+$n5Ⱥz{][f(1Q*|iyn=g 7^*2h (>A '[hN+:E*t.~Pq7O"]`.λكMuhVyÞ4ypޘj-D!҈tIy_^9䪼 3Tx|VPu 9jԊyMܞ zIZ<6dT4(B"PDP0êx)@Ϸ99(\)Q,*hx9DP.! VPB!҈t7uS%\R󤧘߷^5t] Ub,S Sw[e]U= GO@6jXfVK J%lcN,M*򑮳{Yb9)6̣Kڧ:qf}+ru(aeIXIpƪ"|1EiQ})zw ´ <#/? O a _ s Q]U7n3[%2o|~}dho}[R-V:;*{,._! L¦SQ%@2##U .T֓S >IMBYx):alF>p=ɀqDo.I+uhNQA`v_UQppP0?!^H(WYf-B"Ҿ2ӊZM/q_ R7\##LdDs"t_d,G'#(UUϗj )ʶiVϛ% Wav,;%SD0@-Ja϶1y?o `k"Јt"mĎ6E(?j)@$Y=wt9kua6[a3*v} *3o_0Ziad4.")uNjajՄ%+5kнx+.3rV~4: }OX*GY=dvdtzbO8P.!ΥAVTH-B$ҸkN2)Y/-:? 6=J(uT1$%$g UEKvj#gGND23?60B 5fm#+ ޘm W>K}-o&GS5vf\Ŋ;`t\ce4 ּxs57"k2#dUA[WR۱y)36*4DGn;K} K⺦ƺ3[{qkSjmqn53ݹL:詮 ?Y_Z%]BtO8pƴ8˧cjFZXҷqx sźaaa43bigۀP,! UXD>ۡ W){L]=o;  ޷7O/grb՜|)PZ5i$la a٬K0\ub; ͕,_VQ t:˫Bz O 7U҄~(7\2Mq8-6P?F|g>r(iγރ]nlw\p/eдfG&ɖmzTƝ$SC L,<M ֝ԅ&SE_:fEW&-ߩpe̵̒vߤb?e)/JP*!_V} Uq/#5Z"mG|OjJ_lnS!yP\1)>;WJ:)eJ~;eY4 ^[o5Š)D-wq&k{K3j\b1P XF?%#v{a]`(Tз%;c)Q݀VP(B'K&jT}S4v~|jtBf.ac2^ qDU[F)x;I|}ou}pՖ䮒oOc؈D|rV7<=+c7n'rFG FD3p7P,!MTةTNC4wr.7#5&pt㬸-Aę{™DSN@b/@OZw!O \Zط3$LjqHͳwUƵq;$mSP iH쫫3J).:LF_RityPt˰3e'p/E2eh򀩢DPjmǢq5;cFkzL 5>2Ywtv-!&8':"V -~h!Z (ݱƛI;2 R}"D6O>C "+nmUĕ'zxY" ‹>  ` 8P3_!a۾@SۨR!R\YU!2I>߻9 Do <˞9E",NrjuZ` T>qUW Q4)b@0C:"0 D #]fBmYPh[y@KUayK@ ]u{@ݟTypFҖ[!OI!XDšZߴrQ WO;N~;~^%F5@Now*B(Q51%#WTCe5;jh/o9W̩áT|(+y6rYC_-Ws|)YS NZRj`2\thnS7 @pP+!ɍS]B!Јt)|2RZYOڪ}]MY EglI Yy-b,3!Lz`}p:'r.>Ѓ, 8]%UJN}Uy4^  ]&e cg;&Y^GJ3l fAm.ӧrҘCD!K٭f\qS,qYW3 ݈%!E|NW829 )*p^4QSP]qu28)G_޵-Zj\[[) Э%+\شO@T9XHt_߷IWeFJ@jZ]--L5vW  _rΤ#!pP.?!]PXjLC(㙗e֨.Tg7}JG=ƿ)9 t94k8tPKK .uEh,˽ʿ>)_Ezq_m Z*#m5_w1jG5"/S!^}kwV|7qV'OqKCՂW Y|Wo$Aӌ&\/Rq)J {/]"S)S `hJZe@ 4K)(mg &;L#̢|l\F}'l'%;Mh˜2U:cmP0?!IxS SajNu/8u/[+P lqölb-+Ȉ\k۵*xU";\[K!K?:m-d1SQԓ_JGjhjn)TBq/4)u-*esq2Л_zy ZTXԳH30P2!+ HRisyyU]f-W: nLO,7Z ܶ#/jUTc/N(q͜`?ݚO|My㕫$;TMc~EF1@#,$BYˀܵ4AX"UrJGr1TͺGQ#N9qw*Cu= E7?'ڴIh0&ةZJTYu%檪8\y犓jh@X6E`Gף`/ o{+;KEڴ]A Dܼ %@G8Q7_;޷foWcKM1L|)WK fOO`&]{Yv1.% qP:!Lf+H1^Y>ǵܯ?9:{eKng[EZoXD xS(KM$p$".荮mWn2}&&Mܝ5slpˍS`Jd/ e(u] 2 ²@YnvP2{#Q}fpʴ^ w/}V cp|d?P۵{WQ+.tz{"b(  Po /DpP@!L6 PYdMX+:5WϏ~z=[{z޿oO3FhoCq5V(SYl4dqwAkAQo6/ 'g?l= qȔRB(jK.䕀G7Wq Y`jĪ=h,Jbm8(NmՍ5h:2ubr PONA$ 4ud( s,e~P:XdR}&Uke4_peT4c<|TS}2258}<7ߓ>|~@8"VT wZƐ|NBAuڧtdG$>޼2謱`9L.M=L@VNF'/ÐH= ǐ ˰-cC l$f8#f o# H";jNK'j 8E1Eɬxwז3#M7P(!{}HT0jCh1&;sJ{H}=>u uY_~F0`S={%q0uGׂQ3|gqQc# PA.:sw+o[OP0OR c |T0u6áZ^! ;*HrOoYbz4HW2D'X ul5@8ף2u$Vi21 -=(צg7 0FP]_=a P-!=R۠GBhMwyr4I?ˠ Ymzsj9 H̨7cƸG]baS1NڨyRY _>%5FbZ+̱d73DWSfE Gkc@co@Pn'jZ^lX A]-D.[}E0yĥBzE"шxZGrqu}}oU+JZwݪ?ҠC-=ߞQƽM)Vu~V,߯$e53nN{S[0T44/4<8L+̞@8犋v( J|*@dIb/h P0! pR[5.Dgt-w2 Yw?S΂'o>D2$VY]$s< rH96!ze4j1XkGRZYk^$N|~mCM%+8vW^P]I_Ӽ9-+Ȑ7]B02]=wh5yNe<4 \xA vBJ)&7Gh]UroIP[ۯw7s` nV" T<HLNR81½1x\NˈH/>R끇% e`"y`Z5Ş|wM HJ< IF6 Z2N07ZGP1?! dOQ[ S+ѣsSNW+~ƷdwZjX$}8+ͽ𮃕I7JUXÔUM!]} Az酹kZː:A0(龢Lwզ'pJY?uJ8)/Lu 층l XNUtǤRr] bZ~w{^u3[\S%g3:^ďJ0r\۴aJTM:[}ql6wOOѕ\G2G2ه+,@mrh)KDcJ,Ē@W%q}W @ݳRD<Yy-*]d)|P/! ~O)NS+O4Ϭsr^$L޵9M_@%{\g4>0>id}RܧfKSQ=$]G*s~̳y0M,! dӤ̚F:ZIDI-ػF+ IZw b,4LK}c5 +m&Jep|DEo]%5uy+ۿM05)&95qǹ rs$1}ABe<\ûptYAO1pQ@ȗd.wVCweh . B@? k;rqn@\|`1!%\:J@"cP0?! ^Q[)NS+Oһx1X_:~]~L<]f4͓j h^LuKR\` ^1[Kϑ 3pp: 5C^ڙѕQ끶|]lk e9R bv# ~Zš$1/ +5&3xtTu^<˔~|3w$; ,98Y@=gb޹,H] l("E|IQV#5~,~v)zhk;}pݖΆL˝!"Ѣ  _Q^;d1Y1@ BV@ןm+L"}n9SL6GP0! =Oݕ= B!{ß7SzFkqIϢYqbRR0ț`ZUr3Fozv@[608~+yڍFPuWLkݳxjO4&J=; lZ`FEf\O` Gl`q.#7H8݇>o/zн˯_6K&#d/rVdrEvp@ˮ˧D_u, krŠnX!>G~`*ٮҫQ 5`ap" 4t| +D-@o7[P1! `Oݕf׶^JTVV/|q,7YӝӸxܳg"{5Oh1Jk86W@OUD`O%Ex? |ZC9;[˼*\W~RbX`MbChhWNPV  ó EKku#*~TrT&_3/z[{oԟszUKMtb\3C"YI& :"(8 [gz/ؕčja|fkPg# Ui^PQmJuf,T/M b5&$҇jXSD4au}]:N:Z@|Ͱow kN^ς;y@W 2` P-P/! DMG`O]B#{eUCJGm__Oh |w+nGqZNW/7H;PƧ\tћhk-t 3~RCY<ՋSJOOsOJ(Ǔ3P(L1& +& 4sB@R81 @(2Ja1}33T TFpWzzނz7YR?'I_'@Sj|Dգ1]Wy jb8F #8vEb8QD"1rLGȇcDc4N&-IGqX`BޕV6eqzk}LV(+hh2xJ^jxP0! j[O)N3~xkӾ7ǎRZ_ooκ5@M.U.Ͼ\Zwa:zirw!9:Fb 0KU<p$Tywi+Ś$Rdl;4(JcM| h0az:d{"7QWx L#f~'E zM-EԬ\_&)qP>tTTv(x?$fHcaw\AqelRd2ϰlQ#tjmYܴCOq: p $>kN _n?H.4pP/! I8M)f} ϡOx湜Wwloʐ"/V\l?:p[!?S0Q>{jQ8Bd?EU/O!"LϜډƒ# J@"u^,_\9* ,߀< @Чxe]7r߹ne5P<5s7l*̞#HW϶-K{~*q#_+g`y߯%\-i!ip cLIJ?hk^$g0vGYM@ b_r$:@VC&L[Nr "wxPR @xyP/! 4O[)J3.աUZmqZ}~T]#Sh"3BK%wL#ņ=ӯmvS(.8F$- Ul!]"e7 赟 9 eD Iw42{6 O ICqFZ&(Bdr뷶7܈_DyW!m'ox!߸Yx?,іs,4GK_bBXǠ 4n]1OqEFCEY3jQx4$dvtc2Q~~sqz.>`|P!!+ Q@RQfDaшtG]=˗Nڻ)7ޓ:@,Igp,=w>^7}*^EeRB&Xκs>_|[7" ?]O4JpF^ɢ1D:šw3˗>yī6}6aο = >δqC L5hkM#3-n:J %:t'O}ϗ~?L7PD!LlO-M5nfT}VN߼5ۭoBx{ZEU@ (V%Yխ@&3b5kǚt10+jku`xv?? !#WڻԗaeW{ehf@|nJ#c4˙Fa2clׅ0d; Ɉ,ܜ:yde /CAasso$AI{p_mV X1~3rkY駮{SD&$^ (mTfv^> =ͦteYr'͚ \)Ggk/ߜ kn {{84sg1D X}q図ı.D?h o'b.>ѦOU~on\ @p43XN["Ji*j}UTB{f7_6xЮH0){7ɇgеͺ8½4h{k9,#ub?2}'㔍8VLsb8P+!{ Rؒ&á1t&]fo:roǏ /j<sUFfI۱~-18y{er'N#Qr+ծt|'Sl㞦2() q ){ydL=:)d {}ízj3u&rPLZ B!(b|MyFDܵ{;xߏJQe0Zpvt_xP0_! ^P m bȌ%k+fzwU=o= /)O/03WRd"=cRwL5*dk%k_Ⱥ9.B(aph:):}IFU,1\@/c/ >͋Vl@ef.ZV,iKcnG@$2mG~{Zt2`P(9.á.!CI|;y*zU~?|Yh+I;9)((RmrltPX,Ph 9˟SHJD!p[@_4j7 S)x)_Fڀ;?;PK hExP-! ԯO ]C$и_?MzU]V35z_pZ\䏛 emLgaum,E"cS-k]>PXh)řL{PW-2.DspӼ YM+(^Ddq7e c5hLcc包4)#l\Q@P6f0yUl218OiSk/b l*q5 XWbkw|?hR}o DWKWzJbШl$[+5UUUǥu_gqrž^#frud/ 2e KL#StsYAȈ9f`fu&a>yd {X תڨ z ]p@+*h1\8P0_! Z@N ґ#GhT̊n?/_?oͱ?iԊ5˜!v֨΅w,3,0ÌgsU7^& ^@B1 cF)Iaq&_8[@!}GB! f7:DCX0c8`-Դ% l"Jdt&)ɢI]U߯j:Yp߯<=qx =@Re3UXU"G nFC29ڻ%Hs(i?@[HذÆMoʜ n0}m)`Iv\@R/B(1`n,01XxP0!W_L]%bI D"7\{Jjk~?WUCw3w~d9=r+1;]HRϞj1FXk~ r2! >jݯ@|o'\Pao H(Xjsp)  1mIL$37JלWY_ׯ?=@ R1n7=W (8~|m;Z G R= zp}QH( bP ;7&Vk/'g_ށN. e/'gVcEQQk҈|1 n}2W5G'RFHks0O^ϸrt@VYs{Ò~w0aw)B\XyD+Ve7 *XL'9W~_S5Z??Ƕ_(szPX u G0*),[/+n)Qw0'&VҠVXR?РH)S0X$L  +T@7P.! wdL[ 9f͢0XB7ZIJgq:uu :i52H;(@bHP:ws%fv#OD S`U`wcg ߠ$,(\.{y/yqވ,iJd.RaVg@Q~36Ct0D97^nIJ<~͚ <"I4i1pVG c5Oh]Íxy xh纘~AY9XUqk4"h@1%G˄0o0 2DSrR&a7P1_!LDK\4IPBfPלzu5^S?,v-;eDZoWr4@e{τ `n>&r>w aEIqL&4~y䳰UP,!zJ29B!Ѧq_Ҫ&䊱Cm@ xC/)C'J ٖPR(E֞-rNO: ߨx9THqq@+`\H2e_kK :Jh[&z( b7+l>GEw_̝m*O^?XQ٩;܍Cyea^y^K1/KȣSa|NOvɿrd8H S[bsr m>Ɇ8q?rx杞- $pP-!0@J\%&Y HGk5j^xǷw6^[a98$ ŮόZ>@Zn>iCp `!4B@Fz O3ӴdySn4Xg 0s ~ |`C@l3{x=r n(`ఔ Zj@w1"E?R؃Ln-Dm޸,u?pLsP7Zmdqa pw5~wA)U.yӔ@@wUb~!}@ t=8ѐl zpP1!J%&WBH\Ϊ~wwVV_x"due]8hfL1sA\hs LGWU/\+.hslb ߵtTbiν'ƿ3,N LÚD~;B_ >ϫ7w8QHWRRG[dEaИLЮT_?~>r_. ?? pit)rgJ;s.%+ΤK ǡwCJrW4%p߬l./|z|@.+6w蘲;oM9X_,,L?.[LUP-! sI%Uˡ@:gs^+xTwU{6ӭsȴ#ZS? _"\(W;mheqcntl&̹Z$7?͗z=`:~>ӽ5n% y5\dpDnD"@\g{ᄑ^W~x+i]c AJrC]\Q#@iYp֙Fq>9?9Q.@UhVX}WAr>S4n 3/ WcBPh<ӏy?x= Xuv\Fqcpߠ@4,e9zηLk㞜n 8\т[Sxhn&JX`9#H *xu /0 OČ/ƷP.!_5PMdK $LoLkx?.4 4t QF4$j1n~vۊ'3e$x!@Z Jpb14?۞ LC ^YhKD` (LջnH>  >` R Ȁ/ePey6"ABcp.BT\*[_?նOL7*а|F ./cFchX .zGs7 G*Y)yV 97j,N4 0E HJ_G[<'D*hgiP/?!O[s#Iq޼uyo.Omz?l0O[|) 5O}&<;M(# tEp%h&Wܾ*fY"R|=}Ʋ/( ^ԚN"b ^e 5*= I%c<"KLv#|$-\ۻ%q\kz^ck/o%PSrfgg#ϣ7Ȳy{Q^ӻUK ڼtR%e7Ye05u8k`}au 8 <>08[@ 3@N[r$H"=ė]ԾnJܓ~(lf4iֿяXJƽi2l+0҂4D|8&"ƟA6fEdz8*SWChC<3 xbV @PttLC7~7 $Ԥ\#Gy{myvtY(,2p)TFFͯ%%F zREeU,%h / lݨV]haFQE4`[; } L@9}8\VPtuʴaa28D~)ywm[_;\<ʼnY=A9J#O{h1ҰVڀg \'[/ lP=r'/wfм a,q` }P-!Ka2("5^|WUqkwtǟӯ-f^Wg:0@#;0H]B,qOoE%PChS=7`k#/GL@} `p8 ݎ-F<&LRc 1,࣠ppB*[1V6wb."),SU^V5dӏϯ=c´37M~0y9$fCEQiOe.@B1)XTG F1o]/o)!+6Hԁ^s$b\bpP)! ;PT 3.ӤW\U7ߖ]𨕪Oj_?P1OuUZ?:5> Av?ù}`0$3]1‹_?οh]hiI'qH+<Sy9\\ #IBYNitP%;<< r!Է"bSǠZ)5:rR3xP09=g%9La@ y5ۀ^ oXqJlI4((L!B눊] ?~tNk SnTKd])Zڔy9P:C9j梙 xhNZTz=%<@H0 (?t$G8P.! ~Nݍj9 uW\{7\1$M3өr/hVm%Q"_e퓙 \UM4$B<)Y_GQ3j%9?H}|HyX%Ji's5Sm!wU\PJ$lN!xS;oHO܊ƚނ?u,|ۃ 3JpSZ|۩HzO85);E,$,,]ZEՋ`_ rǝwx9z~P-2 , !:l`51(PP/?!ƕQ`ңY^=ܽV^~ssUn6=}-j֗-z%?9йث*IYcJ>$V.Z%dε&w{sN?^8:&o#Zv| a[ b}b%DA~0qޝ}LZl A7jRc=*m[$M S"#._vZ٬uL~ss۽mPil7y=[1޵^edniu4GwG h m 4sN1Y* W %@2p8¤NQP0! TQ)c:R~~=y˹.xW? Zr/l>+T&?gFb;S'TA (,Z(mD)m![5ߓP䞫=K_XG##\T+;De,Z)al}%΀<@_ od3X~E7]yT% vVlZ!|:my'z.k2_5kn' jɵsix*ے@.z a hyF("Z ΰK@8<Dc4j-(\gC4c|^|`\ %CnX@(Xh+6BL~P?!L̸e?`OQh<_lո=.uuW|~٥>qQO!fwCݼ0叡YϾ1`pրҺQEHՅk#hHyuySMnnW{qGw\qs7OŢGuhv*) c5T$DLD!ZV;~G1;HKn aVۈn1ϝ<>_KTK!OVdMMEfd4c ˆTPܪ 3.[͵F>ʿtqB $VAgYrާ*R38P+?!{UZ* áD[OlsI{^WY~@3 (uJ &%ce RYJUe9J:S[HLC멍k6DIZCw!sf O@Y.Wg[p }?O%И:t.{fߔ$xq (z[Ds< !mXTzf n g:7&cw Ldoo׎'] $HgT;KJ0^ەdc' >XbGU> =Kֻ쑫5O&cp6u`4vL 4ea}~a{ӴP rCGJ9Pxi V7¢Y u?>γg$P L;i Z% }"t s$"I"77Ri[??3?mOGLj qzL∠/ ~pL7%.EN Vim4t9; Ԍۣ8@ ~m*>dH4@L<[`R«;cذIP0! @O\ "Pݫ)^Yf3_<_"Em, ”=`Ȫi(UmIYAW94]Lu"˛0 Z5R1]=LdF;%20`~̹߫D.C(,j<$~T@@P [K?O9ۄNdhDR9W·sU]oQx(s%1'}Zv&(i¢^I/VLa\rZUOC/rFjg"O@ 0qUW3"X@X+?n(v6\P.! N\Y B(wgxޫ6oO˩Pg&mRDifaՖL|෉J˳$z75*m`!(pe% ˮޜ[IOC*35=\%m 7w@\O:7 GX_'$/#dYtFM}+3Txޫ}eur֤sDpL\7ss#Û=y:@ Ѭ׌{Lyud Wr\_~c[slw`92s@+(ZPP/! o|@N\%Z!B"+Sy^]Jɪ窭9vd?_u|$So/VVQ3N/B̸WPQh/Ʌ[18=R139z]ԩJpges&ۿ_׀4j84j-_Qk!aSsPnrQk xYP1)‚ F J"@yD @WK/_9 jBi'˃ys&6JH+Km>AnnxcP1_! r@LR] Ѣz5~;w޼}ef<5_g?(Q#[BLىi9΀|e]\,b8PGnf`N W&nM68gWAd qb;*+7Հ|@&֤@ ]@ Ҁ0/(ebl3l$~+w5??[ux2ׯ?'ůb/^)3E4?lr8Jz1"q)W/7 g_cXۂʝe4$&y/P` R@ 5~beDAR 7NqPj*)2)%pP/_! DLZ.Cto_ǿekwyJ͝|4zn5W+Zv5QPoyU@7-w'ߍu)AWvt_LWG1 ty/C `v@2"cؤ Kz0.v.Hg:CeS,Bcp`: ˾Yry)UFI>~?05~lC Vmc8P *?% Vxz 5qVhH)w@3i ktu` w^! _}˚\Z%囀(Wبu_-ћޓH2ֵP1! QALZ&!Рt.\1Y$ު2eY;_UW5n>@zK{v%"j7sW pPHs@tʛXO y-řѕ*Jj؀?#ߛ0c_!h`A^H[@H|o@}g/5:op*DgE)h1ۥ{e$B#&4}sJId-'O~?pw~1$_H?H03S2`6:7 ]/=pk+\!٧5aWz+Nnpnh'&! 2{@,2kE*CP B 3DD*_3e !P/! brK%m"w^վ}w3\WY?۠,γrYdO}Qi^9w hBaӏi7A/M]l|F9ag-ob}|`+ 2 S~+ [ lQ=$ _qҥ ψl60[Z\&eS$BcpX: W;-Iwx?9gR)%YP7+Xki+.\}<7k,[x"8&jq+jV/pO12d }}YJLK,x9M+YtN'm&,3vT ,8vl_)ȳVZoR˄Kq#J(cz1W)+h 1[ZڄgûFUIcȁ★ %@:25Wp_q.rn&5Ue .e8 /   D~{uce%xȽ&J108P-!I%&W1! LrQGE( @+NYq A?6S#j5R[pH A&)d- Hba9u㉾}^TܵN.˅o-6(C,QAF\(DyIOL'[>MkwҩkŔ)`c}g0 W W_qT!-eVa7Ft α.xP)!+ٻIna+ȢшtDx?~3]+ߎs>_77O̯'cv"HԜƝg3.(F1G\p".4]CBIul*0V /$x)P++xZĻ. SdVzPY$F3B#p|$-D-%yTT+;睿jMgztݼ:w[f$ eL+$_/TEXfQ(a9XSG*L;>`g>Ĝ@VvސbP=!L=(IZVHRN`w!MF=g!T5*4h4Wy =!x-mse6T"6GtZ0,KH qD `Gk6*&%>lWqɚXeq}zׯ-O;hn5gHFZ";h>FUS.6\!`n)huD`6-{p"&9LL4gF *|sryHԀ T9cШt-Ǥ*w/%~sק $w٨B% ӴIB3tSc_Ds_o^lxT/؈P\@+f)P'@n&vwYwo=J@P+! @U[ 6ep"]wMw̜ux7ҬO@ǧշ |яP.)NV҇*\)ОѿknUСP@%PrG }j`Q[%)U?Qİ@{`[Zx&eO)TTf= J1hD>=#4nwYW%h???_i|",U1;KKm0TudG'$k$ 9 ^J9 zɏW<{r+O`1y@G P+_! {uT4h#K!3qt\ Tƹ<~mT r]1$2<"5KnyB-n 8Qđ:P,^юUG>X;UWՎI)nϕ>Dn9{g]Y"<  :'uVU #)UGWzVvݠcW\G3S`'x 28t6e3.9Ɣv<D"ɹeUKnT_|zQf}; V}☄›,2~P "VSeu“,)\E;\Q=T|_)GdیE0·Xko@ݠ!Y,3)G{^k 1 4@) ZP.! ~NReFhUkޙnQto_@?V17~?^OG5>L)&quJq-(FC2K57*W(XUO®[N(mmIDž6% WVԉs wA&.;U]ăgv$kS4RǡqDǙ{5M7u,GkjFԲ+)Ħ&2U:˲^oHN÷ P$oU9CYJR̷ mHesǡl(!P-2 7y@켱w:DOP-?!FCQ(5!HmRTZeq(cGj_L8lQ$NJO^=@fXȄՏf2{1Ix?]|u"U7SWw >FvDS0XZp1){Ε#ĶM>  LAΉu_?-{ߠ_{z&j o_Uīܿtn9e5QQ Ha*a,cA 9@lOS*|P2! RrQ*ϡH)nxQno3y|Kyu] nk@`UHոZGn{R\Kow921*âE,)j5+Qq8Jh62܂l,hmiw%k񥖰kJ0'D%"'Z 9# D LkD_uZW#Nv }  i7x)-u(B& f*Y2}߽4%PO0{TҫATI1w߮.(/SXϢBA-v^B;-D-EIoqT2iۭc{7\3=\;`O(8~1 q @*3xP-! ZyQ(3.D)9u⩿;뙍x릕kz8bɉnSR: ;vƛmsq՛4eڃb1;UfE@}qS|x?j@IP~r3W{DJ!qE-4Z@%1x M.K U%AdB= Ǣ^*Jk{5pb, L^ußR8u1R>(9]#FeV$n"8hɭ_*5r{{"2,s @ GJ3hP0_! ?OR)R3.ӡ1hU3W^.s>Z߮?[P2J_y2zwSz.S zz.EU#M~?8"@_X#6 BL0 C6FwtF|>Ec,- ^IB{}!(, C&IjD%3 D9;G|Yr”VBJ2c&iRs~s_x߮4(2@vaΨCSD)1?U״f\iW|  +t>6+1\=[#0ǛO|Qgt` .17#Ϡ3'<jjYEl)Dz!-VduDcKj@cx|^+1@֠pg 6ǒ"F ;?DoټIiJGz!E۞$np2 RH誎{v]0Y a  N(bɚ1@}DvÚ~TP0! N`- O٪Cvu|fxRs]~2PE};jF{1^X.3`xu ! ?#ыLlVb;f3A7.?ۭwR׉>{ޥ{~?eJSf4ƝlQ}/\ՁD\D F"ݥatgeVȧwcr.S,j+XUAN|1MėrA(L Ϣi9q0p<̍WMBj gjZ~pAF(Ɠ$8-36L:oc\KgmX D\P,? I!ЈtF"- S|nBXN}jk>kSzR]9,u(-;or*tg ӂ'7ETpoqǨʕ4Ż*sJ)!ZӖH|mYNU^,c1`LxʦW ˲SeC01OU ^?'@m r7viR#؅I0$0KS./s_[P6م_cu'at,bzhQ18.G!fQVh|gمz/E|o]K4~w?&e}0}M߼I'ƂZ3Mc^+(J/wj']Vr0*qnj| Hš)&- EqhDZD(ۿj=]_Wj)(MXU1~k6]cYiH{N ' |@ כ6t\!_};_P/!{}tP\ 9!8&=ֺ3|fǎ~>gXBGP\l_~kj&M8.("A{}8\e BՁqt*H(v9" W5R/(2Ϡ$4 o+Krg4g)aŠܖ%B#茚"Oewq|oPzߞk~ҿn0J.FRC+Dlc%7 ; {{6=}t[ :sGwZ[K‘:Xq2/ws@_@'W}Rׅh`ee&o@$P1!n@N\ S$H5\jQUx_@ PUx*ln7$@$ ¥ 2lREH_JPq,*$ >,|Y3w`1o_ ͌=a(Os;@Ӣmp%C@_y1 @;#TpR} d*=\W=U0'?X1}dB!0&7rgSJ0h9y)xGXQËj7>tLgnmre˞wܴ8? J3S ]A6KRN$8/I&=P1! }@Mܝ Ih_~\;%-~5_P,b:FT% ЕU/K,S@rW(`+@-ʕU53k\MOeFO\ѭ @5z&o̼2@s@Z}r0I*-& >-$$ '4$áP&KB\~wԝ<a$[s!x81.:-4blXNkOji ~bejў e}j8T ޟDu 4ej_I>P;P yP2!7Lr#к9u2J^+Yo??gԉ kЫ%dhBP%xX(j2?W#G|`@^U`;1Gf<`bdP[arUkn0[c:8wD2r#B16 C1X> B^>6{>ْbk3IƒXH-!M-}_׆ c7+;:U]W=s}1٠xH6Lo<' ew06Kִݗ>Vr l?>$mV6ifkvrSSvupɊA@6RX?& ?Ҧ%_da %Хm Bd&=sNLDŽ8%j9ENPDՏfϙNT"[*jn|x|6*XL@]H_Lxdbr0P/S 7 xbS;oO*'P.!JBlSC"B!Ѳޫ{Lԩ9ߚ38E=Mbxo-x6W;f!*kɸ[.O7Wm}Vp&`߲N*B ί?g@ )^_t ޒ UiKɅ)l:BШLOs}|I7;󾷯Q_/΀ kߛ BS9ڶ0N]lLnn-hbe @g8㐀<_  Հz'h=`p /J5BqӞZs}P =`5d-Tnv Z.ed\P0_!t5JZ6U3Iw;|g1fEV@-#-kSu@K:8a@./5owzVc#o@G8ub^d@^+E@('+ؤ"'@lղɀ n i` v\7:L-"4wL΅Z Bct, DUW{=}^L ޶?/oSo}_nx^YCW LWL&3W^Ykq:wW`1h?sq%%-?7#u !X`7fP/?!1quJs @P:4g^>}UUEq@X5G`Iߚ磌w|||Uy; < @d÷{qKea|V# +r( X~Q5X y/$˃OhFeV6pxP+!>tJ[&lDҚ|~&|j/ǵ_3pY"j*eFS$e8sʙ@tVI~W͑jOϻW;jA@yr@w@*wpȭ( ݾWwQ+ ꄘvXΡ-̰+[%G7CQhUw7߫T)~=OÁ`(u!⾄ ޷Bфi-/߶/JJ7]Wt@YEƤr rTN`bU";X@e pP+! aIZ:D+w^/9yUe z;hp4nNm{˟t"@FVњ9[d'2ogxy-}TmJ`{| ms1"s +6 8g\9~?1A ?[>_;YkG'lSX\Iơа&++qVW' @pPF 3n^ KTǭk('T>K< EdY5J9S4X ̒A(@}<`~ J&3KakXP)!+ ;ALBlFŢ e_|o?uֿO Vhd{ x Z8#I TV!v9:o L6@\{4@ۃϋϾ `MA7H|w cXjCZKt"-ڹ{]X;g_?_qg+3w4<!L6wwvO&dNeٛMve뗁Ju`H =kW~T B\?oqBQ{eG}S)ck t# yR479 k s̹ج?R(rG*!YyTxh/vZ y-8=(W= `{_xC9в,1zǖn圍~WV*+Zv~֭pY* t b|d!P-_!{hRؒЈt. BfMI7Z1._\[|?_?_H) lйLd %+yA o*Հ0ifiHD@ V=ؙhv8͠PxKkiԀ[0o}oa c5ұǴŖ q(bqv#EH:$YyoY_2_oquu_ >k1&4} V:m ۉ[jrO TSdVMY^/9e 38=G#E)m/E^e5 1W|938P0!Uo@N\; )й|.vsJ*꿞:\B b; nNDD[GhG2U.ݥ3$pHx(UJՌ4zeyYi F_H-i_IaC?H =aY m { < (%|~=<wr[ P4%a(D-#fu|dW[mεo?tFw%HmӁ{8l/G2S$WH/rZ1P0!|oQ=!И&k/ງ7?z|QUYMm1PSʪP?S8V)n[0{D~!8N"ENcuѨ0Rr*wyJ3\a,͠lo,bڀ4}?pX. t AP ӎ |(V>a uAu矸pґjJjN<40$"? BЈ]kYzݳUu_5!/U Sc8c)2y١Z[ G/58cmiakt\.pµ¾#<#Gn\Z7l'LpOf'kee ?aH_ky8^]ܵv9n:P-! @KܥV$PYy&ɿ99k{ jjQQ3#a(WMƌ$FU(@#{\ {UyNT#/忑̬dKUy"J^6ɀj_}X+`SYϬ#, AHhO$Cڕwɰ!577Mߝw?Y"MhZE RILcnrČyg2 ל'lkiڙʩX2˧g?AjTT(*H ^.X@:t**q?mP-!K[&%ȣѲkn}/ӯ,!g;d8 ! x鱌=87aGݸ_?g?|?P?+C=riXmeעRy~+ӺX91@ 1, JlYd128D~FZu^ϵMo;zJ^#ԑ*04v7,ë}yKdkWGz:}Ѭcn[Nryxj^Xl"NBy_'70CGhX U LN_*pP._!Mr%gu~:;떦g=W?>=~`7sH=haIzW\~ nC@4Qe?=b#RyvG?!fޭP^ =O:$7ҁ1=L9(׾{ 3dl[ls{δ1f$G3vt婙WχP_$=`H@c /R>;Lln8=*,3꽧d6VZ[/v 8nXw.YvAo=g8P0!@Iv.a0LV"BМǞS\܌󏜍g@`o2~$u&?:ԔM쀣,!S@ `A,bc@gƑ -V`N(^ DNA߈H1 V s;f,;pc[T)YB#Hg:fʌowYUqJv$O?j9Q& ){tD͂X$Ѐ28yE!٩0@?UZc@n-64 0IȂ/C P(!O[#Fġi<|O}f}fwqEkoo|? H'{}H? ҟ0Yl6M̟dqLTIw׳ڭ2"R(=cV\h OJ~ @̀Ec1lF]ExD ~>&:L;n(𿞽} xwB|,0@m܈.HeS>IGY;{߿ 2o^'%)GoY +RSy#xpP,_! bͽRZ)'BDZ!Rg8榛g>v?t rVFΑws17ѩSr^szϛBZ'͌HU#&f,mYq~B:GĎL|1ԈSm4d}%w@tZO!uJv8l5=38Dz&AѾA'\%$,s1.Uz 85zL3 L@䠽P/?! OP)Jq"CйMf]U䕫V??k߯F)C+ bocOyQ͌hY[ןjG0 N{+odG,>ö*f/i@$ n9d9Zlo_@D-@hnJWD93Zt4БUȎ} 6"" tT 6>qm뿿:ViZ?kinßkh5_%6k5 UW7v<72sjx'}+yk) 4 DjfP-! QX 7zfy[%L珿g+Ǵms-Ol1Qֲ}dqnEa飛B)kpڂKhm憤ϧF༡/3lhL q vRUK8C Z;[zJDg"C8x> z]s/&J>3}W|w4djd ҤgNhiR+USSH4x@@Pw{4|/6XK_]MDVpP4_ *T)HhР"] znuk22 .yw$ӜyBނ279|A5]iH%ƵJy΅Ι)p7ch]s[dg1_q-=Wkvø.m^b:,n/Oޚ@-tS$B*5I%{׾'Oz?f"}U}yލ,Y|kn"Wiv$}xroϋhN'<*jD&k]#,p4k}gD s, (J?@Ez yD_",&0! xP&f4f&I'[Zxn~{|w<%>}?YڮuCi dؚvˇN,+jDc"c>=?2xP!)1ܡ2/8H G\Q} b4Z%N{u|g15ѐO^vd{5)#P$K`q( P2<(^n @Øx#ra6vL:&p\ZP0 ;PdpD:!Z$֫[UI뙕?M?j1˳aB0%tB衡r(4[pq427e oLtj?P-Lv82YkVS\n1AYh*1ǿm'uo:,K0)Ů qLB3hJ8V4q۞ǿdR4j bzR&TEq6Nf|7߫:V4,"}\΀.T@aFLc~E$]CDP$w19xiEQ@ -VRn. uLpP/! eTZ.aDdpL:!fη^Ӿ7rȬ;5O?;=ܻV]}" DlUl) 2J\ <ש/!':KB šUǸ@:'_l9q1AӚT ol'\b>' xK""OӶG%\w( d:CUw;i޲ϟ|M?:tl,F16\ 2L !‹qàS@UҖ yկa,C,p9D(kuGEBt; 2 ցo0q\I4##Dz P.! OQܠ1$B#pL%\u>.VqU3ky޳>?̀ij0oTGU+qˊ{)'\; wrOB/j͔Xb \sX"hE)P߆Jn X2k¤;2'ɴJ`<2<``gBQYt'8Bdp<"6_:*xX;k+={wϏdmyҴu8~z$oQa&[*%$YIPV(!vUil\c3uw30 ھs&܃_%R|@FU8P-! ~O #Be=yo8Lq?q?x ^6Fe^*qE7J  & =ExVVwwwj9џYڊwel4j =n{Hgܵx9`ɴ8[O ` n@@ Ac̒E2h]d{Mi^qs3JٍXL/<}ǦAw'D؆:"V!dP~[P0a#EP he,C= v(?A6 2iFfP3! ܂@O ] E!28Di;ήeIx׏6aO#롆Eyg%j !x:5W`a* S93qXRX?[Y 52hzg7 q9X+`h,/ u|`@N|L'ШLV%1gߙ]29̹Y{yu[O\ځ"n~I e DniYHSz %O:@_WR662D`ۈPw`1KPـ<  Wd܇lgmy9BdqhLJ-&^LI㙝ï6?_ei@¼24rz]z8Jl5+c5rkp׮͔r~vZ:}V>)!uRo(1`BR_dG!;A1Daq,@]4ݚ~f85|7"+<% ׼R g?wpBJ4"7E>y[ ׾v׵D\\kBYtB fT@|rK+};\-DU¥cs;fἁlpct>s%@d@aٰ5 xV_@+bP2! TK.c$ϡ{NW8??k7@BȻkz!jcu'E:P G9ߧ;R"B-uIeȪKn]X*&]ZI,`SC+z!(zg #^2drM<5{3Jup_8i6MHB R$pt"M UrnJ6aKX >tGBN>N?7\W]Xz mim_s6/H+ngnMH.X4wk-U`F2U.tR@{x@PP*ct1wѰtS,bBJ4&7He|d]TY t? <~Ϣc.؈#ZFW9q]'\58wt!4T@cPm ~0=` cR, ~`1P;VoNЇGZ/5k'#_P1! 7uJ)qB"7*׏_ܺy5~?q*UsulݪAlRsDyz&>PsIL4ƌB.rzC2Zg=6Sʥ9kgWiޏ_( ,*$@{.0 *cUUCH\`ڇcx~h $K BРLh&nU}g^+3}@hS6rdYɈޔ'`b8u(֢UpXtzg/8Ǩ>5Z_wa )}=ZPCX? z<5?9@ H\wi8) p_mg81*AtP3!U*aJvYLuml__[R^4mM'dߖи*S|jQLJkx~y+^[ɐ/vku} H oc( 07@$ -XR"cN:pb? @nدYp=/YkTB䀈t*6|{{矯(Ӟ7^3Ӈ?'ڞ2P1֜k5tsjUzBtr~yXݰۡ[s~~oK#dx>ʹ,H;ao)ɐ 'L2-*@^@@`Nq,eY*%P" P0! IIؔW D![ez=R18+5f|*cACubMtZcY5"V7+u@^ǝ `Diҙ^%h<bpuc5 X EW,Tc00 RG@۝[]NUIeLaڞ"+HTM]~86wwqyo6+<0=w?9eUe+QȮ&ds e2T#<G(r+ yvE" ۚINvݏScMP/![ KmsC<\TқΪ%CNX'ts)mb2(_&K %ڻrk9ߟ|77Jy_EiGԆ誠/WĂ5.ep+2@++ iUbB3&JUS3/S_0/UkS󌭮bb\BUGo5M{wΟEF)_vcU I fQUgssCt:\ fZɝhpP"ׯ^>OpF@;Ãn&\B3)OD7-UpP-!Y/I'Z!Q~:\3]{}^WW`sZ׷_&REP6a|0&{)  t`0 T3<Bу*%TT䘹g`0w6S!qi؛L@\“LV ţ1t*_on8.q^:|(eEw84Rܳ0QK/} o\qSoǕQ8CPkR.tT2z? ;sZ7 mDsg7m|I #re pi}'P)!+ €IB!iH.x[} rW߷1R6t,u@'qѹtVw\g4kc|xM>YgtٹEYyHSu 4@Z`@VE^y6@zBR#;'nNeJ-z\miVs_s>3)Q?cCUZA~7mquL49#qVf15D7i`@ Á~>`a*2/>5l P=!Lƭ`jJX `&qnw?26Z>oˁ/\i!$B[VKg8ՙ."Ӣ[@E$ZGIq}^n{rb1ԙ5;k: P(_!{ +:mW[! 76gѐ]szTV[?v =X,gѭY1fDF J-{W@w(R7EHftU1 J,e&U4 T9PtgS dS΀ @ w0pP+!&o~VX5.!D:%yMYwΑu)P^|׵PL$|,T4> DSCy]l*]EyK#cRJ@e">w@_@ uWYwE%7kq/&p+~K̀@GKK1\H2xn+\޼usu)Oio\k@ _MjiLZAWE%mJ1CuAc/_=rI0As\喤fu!~_WFc@ %@+Gw-(xhP0! ?S\A+Gh/gbU~?w7gXGvojnx8WIӊ!)7#'TGv{'T@$|rtDBTSBUz2t( ?Pbx;ǰ ΞYS<16NSM'íT(,Bd<+\w[:UGw7?pe~X^잤iHcWcZb)M&Ȭ Bx-@$c9'1d# P\0k E3 9TP05U+Hz'{ዐ&lU x @T~y>P0?! `0ZT,5 #Јb^Yyfjg>vk?f_J ƳJ^B| W [ DMp '`*VyGeIl0܂W !ѹ}_:\r<3Ϗh)غߠ%MG`^ZKbd 8kwi\KLp_L+bnsTPZQkpɑymz@x ) */꤄8>6XpzxP-?! &{nS]WFsĿϞuV8w vyP1'i5FP=g5-_N=g)#JK].>@q#VP"tSga e#ז<3{:~_.04}#dHez P_#vJ @ӶjKe!#ШMo s!Hj9~*hh2Vp{Z1'*Sȳ$Krz7ޝlv̝:T ,RAVZ\@%4 A7UGlPJA+^ٻ+>yO>߫JJ yrno49t +"72= _"` ,>5 P   ~gB,r @Y{2Ip"/EL]@kcy&P3! $=~S"7B$Јt)FUiF{͝O[@;`SF樎>KI$<:VxjV9GkIox8RBq׮ϵL:$ ^鰺EV/R,%mXgH=ԥ"mAz^!EsaL7B!Ј\vYUCw?<=7b9JqKvㄬ`g 8ܤ@!:~ڍ)]Tj<:V>jt(d`/^ߋdYe<[=WN砺fewnR:U R8;JVQR=BbgP/! 80S jSFGWU|o]׏5Χ.)g&w0%Ǎa7$A o)+6HƢ`R]*Q3ovxq=UcG3bNFqp|2A%51^#4':g .n ~H2D"[fx|s==lyw '1d/Ns*a+25 +y@LΝBjñ,OW/bǣ/K0:'Umt  :hۂH`8zG~~~U+ҝeoco RXC襺" ~ 0N 40 nvP,!>SY Q*O9Y*ɨu};q>d 乂R69U,9(8,y$}k(&'#۟n60c= SG Q8A.Wu_KnzW,8/,K0Jg=V^AWQ p'@pPܠM ǣ *v꺮7~S% }I} yV[Q(SDnta 炫I8`gMD 6;Y./`HdDc;P-!W/P(E |Զ˫+n??}t.gipm#gXˁYV^uK 9[ZٝP(_%Ȅ]#zB @7B <ڍ7-?e ůSP' mXv84Zzl[ p `Q~]D)Dzɡ[Ƹhe%5z_\kP-Kd~<u8Sq:,Kb|_HA*tx᭣WB l~ `Y kh -ߙw0P@vJ th+3)J kT՟2* ǡ4>oz:]Mg_]I>#{74vLϲ~q$[daxwaΫ%y'xlط{qk 5x9HN=/`x4B3,@ y˔%ʯp˃ѣP1 BBd4B8ǚƪD٩E?l!ᓰNE7=lkxd"Ue:l0<2ۭ㫇MG%Ss?v'/sw{%ö:S>Ww*}QtlR'}.9J6 u@4{9(4yRJ?@64cӼ6uTbE)& ^)&.oR1 rrӭ`FPx ۽sɧ f^4TtoN(L~ 9IGMe(OَqyHC$Y{iFa SF&%di 5uX }hr09&YpP9_ eJC4޲r'W޸UuѸ@D*J2]VV^0$dxU~g1oC=W69 .Q[J٭h(i{u|]δ7t&/T>@ qۇO1:~9':C#"wci3e!H0ٝb_4ܾduu?5w~{>rOk|FSJꂝc!(.$DeϧP {zɼ8kfҰwۢha&S5҈65@VPw3vɥc!C0\!v2snW;ҫj؈4ƹ_w;nh ↷陵8]-qJ=$Hax}xx͊'½]8P9 BBLaB"ʽ{T5Ǭ߷dmEE+وZΧhĴ ZU.%]Ý/1$ o2vԿUB C 6tT,G7m uk:o@e0Ih1 IKŖYUݤwey?AKпhE|>'vb4ykog=ǀax:m (- ,2ǯ^\G?$uCV#~ 0@TXfrT}!UՃ_A݋,1C{.*J.OJMTM-뢋*HppfVB@0!x~LT( kā'|) yd8a8OGo%q(]xz1eX]F7<P- VáREs[TﮗӎeD?xv;epZ~zdKGCʋ-Qeh ϰmE¸JߟOZ ˅!S \usڕÇ'2^:7 5 uvbTLZ pD:!!Mc|V%^?~?teFAF"wѕDj Q%Cͽxfo O 'S;Pћr&SzҔQ@}\| Bu{¿8P,?!Q\ jErhDu9wuQV<::?RVʀTU4"),T=L'(braKotS01F rphC+JA(~SR=  @@?g"ݘr[;L[ C"1hd^Bo NuQVuog? #;rɆWP >*'=;W3XI$&j@BI_3)01F[Ac%+)Skm']7&ȀnL"htxP1Lavc57.107.100B6[:4" $D:37:;<+ґ^@"9JƜ8mɈdnr ` \"'(@4 98z7yd4}͒ڒ9L.+W=wZ{ ]ArsC]k`EY}ou1F5:l* JqUBB%َW?t_\&lRK @3/([ A`L/a@_}O0.@xgti@g ąU 9b b(иDV$DW9sߟ>czuǿO:wO+kqeX YeGXhXD?,i61*wkNSRn{GZ]EK17di` @gHLBjn-y#asxP/! L[tyD""o~We[TwG?(؄IcBu ~M%%Ho"0/q/+"e찙Vgl )fOȋV5;p[TP)u_'7v=4 ~n ˳n221l:BШDz̽zVo}~w ? `O+c:+n6$S #aƬYt}2JS.NΡT \~Y\n7pޕ3Nc4N{rGQ]i=Dr"b~M91[),a9iȫ, q]/_ @`铉y rX) G<Ӫ?]YoP-! )!J['-D-Ͽ񹭒RCrygzc#8X4?@%-$ãq}g5㏉T3W^ @r%,/z 9zBK6JUyeekN]|XFf&V@G}-/?ߥӖ`4@0g ^0P 8P0! Yrm$=ecw<YdeBcsNUy= . 'y70u(ujNJ( d i 1W PP!!+ܡKhJ.I1hDZ!^ƫV}s?zjq}g.+nc6TTomkZߢV>KL4hB_l@l) V;VTybQDZE:7^ݽko~_[g@^y} i^|~}z*[hF)33)3fO)PD?!LlV8DFP&(]bsW<>__]UPL#b&ikibzIY4Ջy>vHJG׭5尨+rbs#Z?eVy~b Oǻv%w=YKr#Yuyq'Zkzx뵲`}8V~P0_!iQ[ns!D%Nwf$K4s7O_4Q@)Sݪ%DJ%Ƞ:bbGs8`0IOhF22W '9V$߱Wq.:]o .}@ +<`o>_#\Pr3pdB-Sמ:+~r.3N]~ )Ɍhf`F>(W,<4H`#Vhq[/bso'8g6T0`)@.dˀɂl s/\Et4@P/! >QB,9-BchL:E2hh)}8|}yy?s޽/8IU GuRx z8\9Uj `\L:$w;s c J'>'~<~$f{+v4fZ'V+ cD^Cw:Τ*?/-x<:g&eL| >>V{hJG+0$lo*z~e$JQLDq6 +ji^ n.8`cB5>&cX$JP[R< 9* Y' Z|P1! mxoR[,!(Dz 7eH/|K|wS0e+Bؤ=nGc9G\R/R1*k*g) >ԢfGNVuߑ׉ F~}m |yMҨ[ѝtٲhv",dU|8>Pʦ*zVc"/ aђ>oˌ署=W~?ooO} V1Ә>0`QQΠYd(H;5:A~{ք城w9^F"30NQUA:/O/XٌB݀2(d VǰJ_$--T ^P,! ǹNF; B$nc}dq•k W?7P,EiVcQuqSgVˋ/i/OE@5!|OC冴Y}.snא VHkt3s2z @Y?{Nsl|DO[1 Xezj|jN{~?L* 7^{v4!wQH$|d1mfVzBf&y10[18iٖwc@T¬'l8a`xURpZ>CB P.! mMbGBAЩuuJtGLy(j;e0{g7$#ohs ϻD2r#|z˭- gy_ry!h/ iUV@Q53a%x>g=sZUyמfn_O6SamHE{(aJʔ,s ^3ULύiG'اALqфVHe&8.3ǚH/@ (Lg:Ce_?A,zJ QzKP.! yP[r a8Dz'L侫lֽg ??iC1Ifrp犊(i@`7/J^|ƈfv5yogRYhyG@EW@bLc$eX/g8#XeYDK>&/K.Z]}2/D53T` ֈހIH+[-tS 9v3Z-6"Y&GpH:s~9Zֹzg7T ۰ZOFd_:B_k>e:7j f$0~۴SFBY ~r4Cъ,fnz`Vaqv_o P-! {L[%I!1hHJU$|jUoW1??޾=_ʠ פbcmg&̓p ,tMH($QF, , ǢWEKㄅ 38 ۠QK"\a{h{Ϛ @J1uu6q+|'tcL[&(|LOwSޮc*I+zI*r# 6;R$ [7o'ގToR3 /Ը“;3ϙD_Ґ3ۍ H0@uљ>P.!w;L[%D*yϷ|Ieeoӿ`! M7#D(Ÿj9)Z 0b LOgk;@n/1!i0he zd+P - ~% g|r h{0 S8<9٫9C(fTU?\ KD£иD~=CUg}VM/#3_Nzh OlGWc\VWA|LgKߎ}oMhZV@22|E g` (j +WJ\P,?!ck_O)1F(D75uܾ:n]ϏlvL@F#ZvyRک!Һd*͠Pfb.Z=@ >8P9kjp"|kX&!/7y_:J-ӘnN?jPH4J=g9|uq+8=uolj@^Lf gr`XbfP|j!lU-yus0R [6_;nK@ۘ )QÀP-_!,P]fWf9t5w$2uu5*v -;QJũ7Tq5R9]~5T2 T=,)cQET:04 wx[tߝ }lX$3{?BW QL^@`7ee$kTBЈ\kԺI,G^y?#JTd5owp-~Տ7vhIC>Jخ]HҞOǏvw/p@@4"+:( ζƜYSb5Ͷ:I^qfMQ|,F@%x d'*L?dڠOIB ;p6+=kQ>6iU)>7'[߳*oMnK|{ϯ?u;3CɅ47Pq`(iljcg0a8%Tc`$J Mg+{"zV#` X ); c@pP,?!+-PfB&А\olP}zgkjpD9kksGjբb g~*Uʷc8(>kQho.e (Wl>=A\hHhxXׯߴϓ?/PEFq GRHxfMɈAhfM Bg|:&osSWB[Y YX}i8z;C(eZ6, =A"@T%[P]w 8X>uYR9K~喕@Qہ1d4}x e\,ѠFp&uY@j*lUX.O7&C6S<ڞM؆^|ܦi[44(Q.,(PظEP+!{ զsẑ& H*j\ H02j֒` 8 _e yP;+ÚpP/?! O\Ў3%!ЉtO:ә&MQ&n>|]@h\{ytIehGP"3HE@)07N{]DLUԻy) D1zNRLh䃨Ma޾5FQ0̈́_Q7Dho;0qTt@"hۈ_ c氙$&Ic1>s{&M)$s;?n/-^W 5dQC!fA>:9õMUf 1T'C2Va*l:s> (8@z4~#7+=b;@8P.! _O m L&;_J矽[vss?_w;J)8 NIHNF:gↈ:&#|^(9[yA6Xisp|>y<50e~`֙=Lj, а@WTvu?)%;v ~bLV#C1xtJ{+~"jYg?7?^5Mvsr!n)[n3|hr1zSjfbTHKulQK))coؽ@@́p{8TNH=X&\xM @(98P4_! ,YOܥG@'T*.fVqѣJS71z<+ nEP3x4 qM1DZ&]iVo34xTgΏ4nacjS,`d[-ZM_~VcܛK=%qi(Z-m.>zd\UEb" %4D|d@ X]穞4> {~Y{Hh(P cdLjDWUW[8g ܝw8qĎBFFl٣0"Q5,3 5x :hjwx^Of.r{篬sN]^ҩ_!o ۃmR=kh$N2A::JnuX4fU\2ߍMcqW_XAU/mN \?ŖpǏ>0,{ c el#eTu w F9tjH )VL'2s9$ޫ}q85S쁔tkPf+ -!LumxEz_Ip31E&tbN _l>|R6N@\2_^ o\ ϟhh dm2BfhiP/!L[&MFs3\UH%wVWce8n A%%< ]TюN7{,1:MOJk!źbtV@H136ܣWdad4@/ 9 ]\0X ="~XidptűE:&"QhX.~Z~f3R|WߕF9}?yqb0piǁaEɏ2̵nBW:.Pw U%1!z/ dʣ}ép `vAq<tG:ݻ;P3! tIZ n]z[4FSC:E)3pl쑋kߛ _euQwJf S#2S|D Xj>ӪYJIW`@%}=%9<@xy9\ 20r441ˍ\l~e:$#ۊG"Z01Xt2HE`Nw:*F{ FO,"Tg3&@jYX^ Lm,cVu_O߄r>;%D `j},y6 Og`zyH4\*}*R_sD5c6{#%P.!KZEkfj~Ͼ>d35+Y+ֹGEG)9m+^jS4kfQOQgiJs9/V(1z@ݠX*+,`9&5@ju?, Kcbh%9ITl&]׏Ts|J[TZ=+a"Q h`ɂRy)yDSDߝ(~Uk'yR&r}HAy y` $wO?p ♅i~W++–ʻx]qp|P1! 9KmsFֹ~?:Ԋz]~8s7ϛk3 9ͧ*hB cYt;Ιiőɟggr™>*8m*/tp HHaڹǷd`[@3Ws+e #ـwL(Mk:IIMJ[ B!`M|ܭ.^O_k5vtޜ'1Nu/sn3`>:y|1[ǶO'R5# @ 1@|@ \ oY|9` ,"3xsR k{գ+å/+II/ cP-?!iuÀJZd+8뚚[jϏ_W5+[`i'uЁ:X`Vӂ ݖMFq3zLcaw#c]MI 1' %tYy @uܾ"LiVD*.*1/WuU/_3C8߀+ JZ&áQt,Ʒ>TJfS\0bPW 4Ǎ J?5 KPI]n"hv?wec픔I`/Nj~lr X n# t Ґ1 U/p8=wpP+_!+;IrE6Bt.n<~ǷZXqߞޚ9uiRfy|<nB+ؙ@Ҝ?DV.˻X`N)^|o޿e,mhPϮ^ "$/@3H H!@笁!^QГYf_DbЈ\>L2 DP\ӥfzuVXayeZՄ' 8\b5:PPߝT0Q,r9@%ڇ%z %ՒTP^ ;ih*|+wP1ьFW /:X d7cBoJ>[d6j3~y߂>|kLi7"yH<"Ħi ;?،>Z@STG!xy]xfo*Lw9үZ7U5Ypnw25uW .3P-c}44"f0Ӊƴk e^bQV E܈IԌ%ކBg)[<_ODPnJ, S+mp>Fln\ŲrJ[]ηBpwOVw%Ī6H}(VJC1%K@bfԒi&>@_uQ^b᭧sq%4?'B@̀8IP P3!LG P),G'9|kqwTcϯ}jA6:o=}y>Ƙ ub c++N d*#N·fsljÈy\S{7SI8H)zV@ol:+k'Y?d0)!,"9|z׳=MoUݝ?lܑܱ4!aW>|XӿR] {Ɔl5Nt_¡ a9QJ^d&k>L{ Ř~ۼ.$FP,cz'D ) >W>A&0χIw]^&{ d"CP-!} Q\`a+ǡ͸]&m\duM)MU1)toƚ.<൞qMCz!ǽr㸟fq|Rv{B5ay<͕-A\`]=>9q8l^xO1G…3d zyR0󡠸? 2D-#z6RoTd箿Z3p_Jhc`)h'-!C^?!nS.>~0E.ÅU"9Q_$p5|qq,0^2ƕvL,5'zbTE6@1' ϺW<LP,_! ҝGP)*W #Ј)u^M`q=_iubXVm˶Tit8 c9ߺ)'Rj՟9ap3T_iRKœ4w9| c*FD`UUzK~01Dq b[WfW5e+a @D%  LzHJ\oʷ|eq?9> yX0U-C+Տ%ʴDh a#@pT/?=\<|h^к I!=:Nާ'F$Xݪ%k*I"CexHxW[b"h~ hP1! ^ P\`Ɨ UZ7zY]^m2]_u=u`q^?No hvG[v#ܚ:U``s޽3NJ{ə<[ vؑzI5)BDB 8B4*_0>ɞTC Xvr_bN N)D2Epz h`r $\#u[)*c+GxtUuթQ{uOJĥ>*nW"ɀdKzXYY\mʦILTNA6gL]WkS;&oan&8wˉP`+ D 5x&j*s?돿y.)Nw-=܊.6D\U(6(1y^ߺe~YuC ۤ[g{c 딉t=UH[ `^+ԬND9Xn#Wt~'%f6iهl ܜn{yYlLzW̍U,zL#/}3@,1퐶M1k0 ]0cppt'U1r*J2~ 7qhV%'+P8˘N(3{!9Ggq5į9PE-4z`yb{/i\ls$8Ga Ë=1]@JL<  ~ Q48َP,! g@N)*C9ZSBRoNCVM,iG-?sAdPL+P}eh1(m`SZ).RQA}&׬Npɠbw @4:T #h(#0ɠصӲvEMR(n`1{!JUl'{,Q9X$LҬSCLbekz߿| [Bm5 ,i(nB%+ GU].Hjrt"B[5 HE09xhV{](l6ei2G@ [ Ӧ3b$A٧Ny"P.! pgL[).3BB&qW[s=矶{??UM`${߿( X6Qd|dӸ,wTȋtNT",5_3:s 1w;3fyd Rj•}s- e@dj+} n+mE3i`HRTUB♜ξo7A˓GGztnd aP8MUº]Y0I^ v@K ,D$CsrtQ H7bԕm 梽 (9;)0OM\(P/! {M\n1sqnJ׼9PA ۔D{L@r ▩!d~9k,y_U1j:>=fEudX` dPW\/ÉVtOba`Dp q֐! b5Jp[eZlKՔ5R!>:' d"DI+lPL*NYs8Z?5~eU=[DPie%ɦ xP[` &;[N»+~X %H:3ƑRH)b͵t ٶu9PSP0!s{J)*)!nq\$Wy*}S?4I?qȧ=8жRo;GYa:ؼrc-M{i4 ۘ4LJ2J-L@ꮂ7_26MlR+.̀bu$,.XFBT5$An<~|}{}EƸ̔2f ºP %0B&qǚNnwWRWOǷ~P5# Wݝ<%&}ær% j?5o3\DhtW+eRL iNNYB]KF:H/ьz)7ɞe`@_I޼WRܫ)Arӻ;E{ r$6U(a+F{@5'oK:Do!MJ<ʰ ywiu J] 7&%-,JM9FBCuiubv-txAֶ3 J2LPg޿_IC8nԙPnRlr6vA F2Ċr!1fig9 UFvwӎBtnjfaaMf0ڂ" >@jPNX"#3O* 5u@"^>|]P.!c߾GZ5A!Szsu/̭xw7y}INj@o\琞UN4Dp1FSo9Qڿ$DLT 1_&r|YtH|iqD)<:RTmc]-&a`#`QsT@hp@j(ȃB'}4Qw1@8 u VHI#V ۮoJOue_6FY/<`w Kn_)&!;GO>:R0`T$Z& E)7J}-VW^'m#gk "P @$1b]m8XFWVqamPs@B/P-!Pv>F u(E?On{wNx>/{vBlwU^3s߱\ kQykۦNu\P ^ő54 D[uhBbXiM6\ L_L 1VwdUJJ*` 5L~` @1 Cb?oMX^:ƭuk0TIghheJ6y@|*ou;2ʢ蘨8X<# QHPT\Hԙ;Qߔ(Gt}Q2W vKXuÿyDp=Ɛ'YV66bm ճ97ns@P/!HGUHY晬{.?oοynMBPjK3q)y2ٕQ *ů,ԬL+j`|reݙն|b;Z^nr Qcqֻ5 (2 Ս0H -y~4v>+ ^2c!7;8tVSҍ03e,T&Wȝ˻#;ۧ~ ˑ)]|!Gà}bB "q0e/VDU 8}a<&:9D9Pq4ndC#mGJ*W+g)g]@c8g8 z0`Ŵx6upt`P-_!goF\ r#Vfg=3oTeՁ2$ҫ ) g}qd4fCW DU4(0XLe7߹~Qz!=h;'q@~[_SVП^2EBYd/dpdj,#d ݰűzKY0ָ%-{nF[ ; BB3LnWLDoqIRf M)syȎ3%$gmH@j5 Cf{7DN&)&`o!:/#xxEBZthW|^|P-! mF\\85KoY<ڿTJ.?/O^[JEftx~N 춴>yU,ciy&[P5SLޏ^i q`k` UP+47Zݶ)O)k6t#MaGV=&Rk=uPe*¹'1FV\g؏4ͩ4Ρ4&+z_*k"P)CMmHi f9UθBYF%F蛉=7NQ:ǠC@pU`mN=MNM b~9A? -٩ "*XpJ K t*/P.!=}F\ u c}RiLWXGyh]Iaq1]k4$>mr!VG0AptVFJIAv@J.7%otLW?ebYl Ψ=[K0:,*Рu",&+ G6e+u7qF\R5JϋL^09怊>zFJ^FĬ^*!*`B^rpc mul bKc?~' λ{a?t; <}v tl2a͗T P3! tYynpFml9 F0\U2獪+4.ӯo_xǘPHI8ﭶ^P+!w9A[I l=+Y]_ֳ?&KȬ]̞w DF% $X= ?EdICFlJeq/qha.4 ߗܔ$Y{z9QDY6/4nscZ|M{Njr,4ZzGZ_|j=^+mwL}6gCq@!,V,)>ǚ̡=u}+&{I?|H 9ν#fҖ 1Bbg͋8܃0r8#< yz+*XHgܴNT/D\a 6tw.Ś)x,DZY#gK`HJu7ܯK# OmP0!ß?E[t) DN3+c޷O~$=d*C  Dȶ+xDz\o]or*U|MA *8~Kf:S~S 5IzDh Ȭ._Af&96Gtt=ڑ }kԲ@A-zx JP 4ߢ]ZGD ]L+]O%Jz럗"JJJRgMq ƋJW"ƋVLIktlPN1|ؤae -[E| Q5 &TԈO_{p蒈ZG;뇪D^ [h6HVtT<`VQGˀP/?!"V?`A[ ))n_u.oUEJ 2O-NDi`[~\>G$IX fD@"p_$U0~7/3@$ʶ(H gA`s!V9L+9Ttӎm2S'SR!^F!Z^[eT%ʸggkƆdoKxj gXTb3һo+8ȗ|OӟUeX D{5q.ǻƲ{S;e▊ b]wn^f#O4d")s4 x*[K"4$ДfÉ:3_Bu;Rr͚הj¼`YP-!C׷F[t'DUoUWp?ݬTށAc$ޢ&F\#11π#HJS7Fu )UQQW9)z NiϷǨE/f NZ {aa}r&Mez ks)-ispX%ŮIlXZԦN>qE|;CF[uczV{L-bA3@ ?q-)@ -fzROd^>R"W <8K!E9p;}9wtC&AMh_KӊߦhicS?XQbE.e"lE?][q_lg>P/!9@%**aWU t9{JPjV.:ΠMiC4q/ .KF;>NJs\~}U^݄Zƌr4- (H'5 0 / i7G+F;_COd)[bg^kr,STkbZh}ǰhda"ZL%9HSqlM@gא\J,I_5n8exX~$$1WCBh"PBG{c Y|u#D^5a܎?_ m*>S,h[ֵ1kπP0! RuA[ rXD={dbә}^<{ZܕP*1zVj$L*hȒfXu qzvݦHN vRyw:" ,Te7z2ھ` VIss(*!HÂ-yN|hXk1)+Q##y/,j '*pHײQ)KD~Je&"+srIx޷Rso֩7%F*sދ ˜Eh`OD "%1XaWmnmpqjKVS/ҞPN.T'(6H=f| =.Sk:S 㖠Nz mnNR~kޜ]pϳF|Pm g蹩n#ę" rz FtQPW;DS-u,Q*8@u s>^ ŞjulN:'-6&+E:SZ ȰLDO#˼(˹wTEۼm e dyE˔dGe;NhE_/@Bh,M).Ƹx*3? , `12˽HIА*;a>ؐ `CemU *G&Y91jG^gz0,xP0!@ۥFRFG1(޿l޹i}[&<\3mOlE Sڵ%36E!!_*6% ~cjW\ouˣbLn}ѲEBmS,^JZ4-=.jYY}^|!R 3npVH LNHt)/.MF+?~*%mKF;@; A|J*'}햼ϊf>2IU"sL.86Vz<;_k, O#`9&!@w>W|x6T oʛ v䨲95e:ڵ٪8d.M~vMs5ࡪX)`x-9JD;_\8qiQ@q$z16M&,NO*w 3HjǔI]V2@މ`ݤzPũ+:'Z-X}u6C `ĜIvBRO4ocdU`cRт i %jKǻW`@[\.)9RF:JȊ؉0 -D\ S[xx8NpKWnz0.gr"a @ ,s3a͕(-+ tR E]J3\O>ɆNv5mCd!P/_! :F[FbRFTcɯ}\d(muUYuHvRɢ$O$p5DF51̋csjvŽ#Z*`h]kڂ}(ً'g 8"D6JW>{2GY)a`bX4#a$Z"-+6IВO7mO5ksP.! j?ۤW/s2v7󜸭NYP~wv8痮\"HG` XG"•x2F@(Grjg:k|ƥ 2ȧ 1|=~P Ԏg'_e!j{2N5*taΤIg:HW|,Zp'$cx%&W*@ayDM)&|uS~mg?V~k,M ?L|E@B{\uKR{qL,%j]\qXy|5ע3RxDsW`:RAZzN }L%”_wdS%H 1r77A]xP._! c0A[Bߟjo*ˬ^YވA 5t"NhytZ pb\LWֵn j~Ch ʄ^w@c/a'3R|WV_^߬{[>F*Ƒ,Vu+(Fvf"BORl^lب^V<>V]gLx-DHK}|GW`9l@02k*e(PK|}EJNo?J43}:thc.,~7 x4flGmZ}-5⻲}p{_')rXƈ!j;P-! gD%#s]snϝ{ǶbS^Θ:F*$F*c2*;_(g9c92dmL3ѥ=Ybx4ag oejա-:ۊr\;Mh4*Zeb5!a" c1WRSfaS~cd(E[wXd$4Yu b%U!ia90*6PmkKDuՎnڼ8-zb"y8`*kP/!Ʒ@[n[ 3x+e_~jS/3RgmaJFϠ,010껠s*Ë' ז J}Č5'3q9Lt*Tc !(btmSH)Z* /D1yQ~ Yi?[ vb8Ă i(Хs Cnj`-H a߶cfi]RiTJTe6* 31ǯ9/I&0Vxڹ&q֩Z授Vxf6 } M.!=j w[XW> IwD02`!4*JX `$34^YqgjP.!,w_A[RkzӻiE L3grD@#muw jh۲̉wl"b[_e xJ˹pRY}`<2mbpVf=*b~5`P8а0ӏԗ`sPXىgbs*X.ױlLCnS'=S} oIܚ[yE < ƗDQ+T0RF H0p(G)@B poF._kӮ y\m̓0'o6YŮpVKbN}3)[ 鳕l8?5P/_! 80F[2BHW}-cܩ\*kqH-@d hePUB+2ǏoB un皑]k"*.G% e3 /:5Xd†fu X%U\@RxFu# u鈊֒bsUl":]Ř]ҕ b!Y!Z\M48*ˮHڱ`[]b+n?ʚϲfkߥ(Kau֪ "^eiQ Ւ <#I tbydkWV8't"E,]Qc|;\WWIF(L̸\0>rbÃӖts[􅑕`P.! 3A[Ćg$Jw<3IȕyV:X~8.ਹI\ H0]6)ҙT*So7ӄ7bj7+IVI-u4^TW;Ql 2@ɧ)8Ur&K/?O ^g֕/9Ru8\ˬR;ICGlC@dBʭ|}iu2f%^UT~ڎI B`E(+8-m()3| 2AX,/KP;f1QL;pafI;Kօ}\ۏ 햙F7aP1!>0A[R5;5w9ꪲMV?9밮n5RP\YSDƨ _u oI圴Y%ӁcW5} |%xa+g<üрH9"GpD8 -J2J&m7 )QÃx;F?3f>gP-K!2["FLeBKhh% d" @Fs&JȖ% }-*J3i̒UTshP 1 ԗ(R:XW;^Tͳ2Ģ< F N,g:/˭ e5;Cmޢ1AlSXb@_b'WS҆R7%~,5)=[8P0! w?d ㏰Fy[n򯛼U[T 옇wga3ieNh 'RQPSU#_v Oo!YJ&XTBkB'BA X Yci<{(f]sz^/8%ş qaIvg0~R1A[M:Z*˦HmPS 8ei 4"ATz?~:;wnʷ^e]^4,qU]XwP(OZ@2M 'gƥG81FG nއBIBX̘vX0!w?< 9< !!#+o]DC *+38nҍS*@ 4=ˎnޘ_P/! ;$Vj~2߾xUydʼ`>麀լז9I}hd垦ѳ~2sx+t7.TR1*.+[!5CV*n@ ^(F(2P||({6RǴ%fՃ>@,11҇#ܜJAnlTXH_Ϋ>e{Jg25ZbaCؗymdcR:Ed5ڊ 8gu=5#XҪi|41mx'6Qu3Z" L)I-?l$i&)ʱ-< yWЭ!kwP-!@(O_cu|xsUtMܥzނq5mDƥrkFv3px,s10\&iR*[4@#7G;<X]Zr*0e[دRFf=]}ӷB,l셫$3m!ȡklo>Ta% (>Y+~{[))EJXp{C**DS5=BK@J3HsoVU䔽ځqߍVWD~>k֙ؤ|_!#Ɇ r[U<92jFR\p?:,prD%Pi.ʹR.߹s0 FBf`=N_Jjq㲇guKq<,DGS龶[wj*rZPId],B U[P/! iA[:")X.g>uUz\ǟ?]Ą(S=\ї}Y<|6fK50cMTtt!Z!PoJ%Hii`^'33]o)K=uS ,GR0Vd]ݞ/hl $wk/A/TQ :0(b5lxD/)+L|λʽܛYsṔq{TDZ`/]lK ~!3p̋`)@!k+*&+YJ.)ȑQ(^WJ^C1]X;(}) ԉ뒹q-X5JNڇ4fP+! A[aIEoEqןM&Kr~k4]E"?SꡀHhn+Wl_]%w#MԢA/%$L2>Q?Zإ>'qh=PHBE#^ eO4PqףEh#@"K+Hb hoiPϥ`h _e}okώ& 2[w/a $O, 8y)2qU.Lz?*W jW Z1>N"I"6bXc#[G=J0~@wE-lTQW2י(½DP4?!2@5*,*]T&yskUK*PA7Cj @#6-/[%8A_6m\tm/WHV!Eo7E5IKR"4BkgLܪ8ǥI2suL~k TNb2+ ZSɷqh+-eR-;"RGmY,_"rlMy c qqʆXM BL$TL᪥RHi^dDxC cIPʗ G'v>v;i5~`w@V g*WzL& H, X,٣D)#Oz*J[z;!zFs-0 9$ sބ()@uoOɄ]T=qP/! @ZbEA;׍jsWϳ{sTJڧ\hbR5 ode+ؚ&,ؔ1ZuDޒ~/tX6h| t_wXPz rnpqʿL1}d`G!!!0 'Ł'a!c )&P}rȅ&p\]fx\O}Ry)ʼ) jH V810۰8Gs¯U#_kN6׻ F^x2P_*p>žUÈJftBjLIp̈$j73 +03WJ{$74Q!$JRʆ؈q~"d}e8^K%{<9GϝoRp23ʺ$`FΨkؚbTEㅳ7Ԭ r hTIs+hF{ۖXG(;y>;b]T|E53zRȠwmµt0zs]guF9P2! WY@[TBg+2'J jfWb@9Q-T"IA>6z סz},)lj~tP balkwǿ"€/f)}{p;Zen}DƚLߚ7C-]ܥr}Áx4F{kU(vTС4F"1W<][{#6^b1s|l5"=#do*ohޅ1dڮ)3wu&$3ZLE-܈dyAޟ29  ֘o :Po6ʏr4n[J|P͝r X]DP-!z@[ #uwO/yW*Q&UN;<QeUBQFtN! d‹GO&]˭c-޴+mӯFq^Y}]Y?>ů6/jl_^24/9 R[כ4Շk[idѿ=1K<*E/W׽L~̺W2X1BtDJy0B)^'p0װҢ"2a#BY)$uiA9[)6bvg>Oʙ'64$+e)]tǂJYG':j׉`㓶ClOw`ÀP(!w?CfG&\dY*&]IIVjn1}j()`SwX"XޣD@KR"بQRR`0suJ IAhi޳,u34"7c 3q:|]f!;R񎚾$4S$_vn=+s?ύo%7L"Dy%ojOՒeԘTT FN@m3*9T}XP\MMLPaNZl!+ E8%.dnW~{Idֱ߯3LJwy~+6U:}VzP3! g|[$K.G_w^|YUPd]MPoRS\QKF8lVg1T?󩘬X]~]fwbXN{7υÖ "X rs*eԳzc@*`w!R2@eA;ŇA ^׳,li.dQAE-lRR O|«AcnF)#$" S׵L5rןUT*"z(hpҘUw>F#2kQxrVl;C:^̳Fѕ93՚皜Iyd7c 晻4U?[A@oܴvj&D;~,cd]kM >Dx[HR\}VANhw[/NtP)!A[2*cKNzYD Bh?2atQ b7"`k?@mHT/)+;#[:N OGh2IF${.İ~WhKja sepr\jM >]!|@v CF2*`*TK*ѬՎLBCJq9FS .E;$VtKƧvS$RhBR}˘0V =%t/Ы̤4d^v+g(pNqdI)$WtpA8P3! C1@d34N/~WW&\J^5X|9i+&M舞Bގ]BXE+nz zssgDėQCqËQP_c O^#q hSv8k:J4O|*) SI_9yX6bր$7=>qgbPOI^6`²-B2[b0bP6,jʕ7ҮLXVn<ʸXz\P >E EN@(} yW/ "^\16%~\0 JM[xܾ\ +i0bfQfaWPږ.)5 hֳ.uDkojbn-Wןr۫U|\%ΧRd;"6zU=8zkΉn%z[P(!d? VnL9k˕0%Dʋ! dW85 *!Xyz1+K:ǥn`#ML1'@࡙JF+nbA6H6塦mA"tyK8b*6 ,:?zn&,%lwx}*`J ? O\^_aqhh((S&'js׬^'Pw9APBXjdž`ix{(;)b :3Is{/ 4!cBes)7y`ng iUPvPFP3_! <[hRb|o濟M*)%b^e:7᥎){VJDT[WԨ:Y<\[#$sgq4(&-嬷٧)β|i2Vдb*[,ߡ۽-#8]m .4kJ :S{;tnh)l\1`D&3ABY]IpY cdE$-AO8W;˪IR`zQY r\snrX =:Gfo-Mz 04Cbe+[bKa^a?uj%.bWKLnA c1_3 v()*P5! 8s?Zp$-~?:޹;=nS~yrBA\{M?Hrdfz(]&8g8h JnsS0e3|0&i_*&9 UP}cW&5,Lcb%%g7~ I%kHҕ 3_na`l%g$c' yozMIICeA Ë$)DooY~ܦn)]V}i*1*e)-sH`p*"WB"hnXgdB:X( p]Be+kIh˔&;9WzEg&,Ho_oB,ޓ8ҋ["l%IaR@E..P/! aA[L 㽥{}|mR|{ʕ2RRTY΀Z,(ф4B/Ktl*]Sl`Ɔ ?g{4 gE¼pH-Jڴ$b{rRʵWO4-\twx)YDwF$:v?Z^?KH:sLq  o y`{aDBYDQ֯z^IRJd`+>tz:hmf <SU:ACۋh7e`0T+ /2~ /N-,rǹji ڟQ̱3 N6N;ƒGf:2ZMߚ< QjpP(!?&E^̯i(bJP}2T4!lav9`-0eUim|~qFcS>}3Ҩ6Rpf`qOm녵/-wf;"(NNGZx7?¬C7Urwu2bJPm54S4*<{:p yn_W_,#LL92#ZT a3E X"Jʠ|'1lzJQӄ1S~hrdYFCN֐0Ȏʚ}ɍF58p.}8F Y &U^_`Py6(9J/=Խ=-ԤtyL틫Ȫt.:TTX֢3)rh}[%.6+\fU~@L75'jclfVHX+*;`穩STVW!)I^g{{JF -煙1`KamyqF[$B$v^7`T ZP0! U?<[ -ӌn-U~>ԝ#!K%hMZ$YڐUǙx8h&QWC^G{t-ϕliA@ ;o`CBl%d64@U+ڧFHl)o&WgDKP)_!?duo4tUl}wVFgm3u>kOԫ @Q<÷@FW;m:s,=rs{("2Wuo4teӹ!]``XӠ)~{U4}m7+nv Aj$3(GY[HMurIbM$Z7왹)Yl  R}؁ڒה胀P0?!~c5(H|/z³UQRSPډJ@JӞ#cwN>uGtyc#*r"F*.2#zO#dZGzE ʬ _eZ KЭwhVEwZxNLu$,}VϓNP1?!>U钽Bm4-Jk8:\8eP9(#q._L4Sc6niC&'̗lΊ榈|;,"!~.5aSEd͎b{sE,\(2G+n8hְ=NP1! غ?X(Ҋ G=^|*a *6#ZmҌpDw@R}>=>WN~y "P`!8 J f86ŰG+BVq`Qz%seHu@CuUlb*H!ο^M?]{sEu?qb"\cןo9YT*U:@8SN57;ifoW?~kh04X|9-GdGTݰT3m+Uw ,)jλ?FJN#o#򉿊nьUL,%X^M] ۸wIR\:{N[gG\&8K8>OeMJcCt9KL',;76(xq}˭MV&]gb&TR.CkuhP(җJ:Bg@4'` rw]9QȰn#N6M2ԋ%*&lD.9M [XhMhFCm6 G}P0! ?;AR ǿ3k0l^Y$ }gdT0*mOxG܉侼>篩!\(î`Tݰ_roɱLZ0n<}fJoqh릒E\ƱzvC90eږ=䅷:΅2s?.ZXL&Gavu<`*:*uߏ<W϶{J@=#vK!\eR.ӲC+T9}-T#yg'$IB4sba;<=P\KVwu5JQ[TEWnv#)9ҶgrWόA;=IB :9x M{) fZNKvE5_M2 p–+ȼfX *}kR<5Lf41\(vn_lǢ4+˲ͷ^ Vp^ 5{7 A^'UR(#T]"n("˻JSѧg&I3d=4B MYdQ8=Mw' %9L!+z{Q%YbUBq3yP _!6( H Jw"TAY:o,}25Jl$@qU,Ol 햦@bI,s=ow"@h9ؖ5aҠsuperagent-8.0.5/test/node/fixtures/test.png000066400000000000000000000002371434246777100211640ustar00rootroot00000000000000PNG  IHDR PX pHYs  tIME 4=iTXtCommentCreated with GIMPd.eIDATcd_Ā01#UvIENDB`superagent-8.0.5/test/node/fixtures/user.html000066400000000000000000000000151434246777100213350ustar00rootroot00000000000000

name

superagent-8.0.5/test/node/fixtures/user.json000066400000000000000000000000171434246777100213440ustar00rootroot00000000000000{"name":"tobi"}superagent-8.0.5/test/node/fixtures/user.txt000066400000000000000000000000041434246777100212060ustar00rootroot00000000000000Tobisuperagent-8.0.5/test/node/flags.js000066400000000000000000000064421434246777100172640ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); describe('flags', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('with 4xx response', () => { it('should set res.error and res.clientError', (done) => { request.get(`${base}/notfound`).end((error, res) => { assert(error); assert(!res.ok, 'response should not be ok'); assert(res.error, 'response should be an error'); assert(res.clientError, 'response should be a client error'); assert(!res.serverError, 'response should not be a server error'); done(); }); }); }); describe('with 5xx response', () => { it('should set res.error and res.serverError', (done) => { request.get(`${base}/error`).end((error, res) => { assert(error); assert(!res.ok, 'response should not be ok'); assert(!res.notFound, 'response should not be notFound'); assert(res.error, 'response should be an error'); assert(!res.clientError, 'response should not be a client error'); assert(res.serverError, 'response should be a server error'); done(); }); }); }); describe('with 404 Not Found', () => { it('should res.notFound', (done) => { request.get(`${base}/notfound`).end((error, res) => { assert(error); assert(res.notFound, 'response should be .notFound'); done(); }); }); }); describe('with 400 Bad Request', () => { it('should set req.badRequest', (done) => { request.get(`${base}/bad-request`).end((error, res) => { assert(error); assert(res.badRequest, 'response should be .badRequest'); done(); }); }); }); describe('with 401 Bad Request', () => { it('should set res.unauthorized', (done) => { request.get(`${base}/unauthorized`).end((error, res) => { assert(error); assert(res.unauthorized, 'response should be .unauthorized'); done(); }); }); }); describe('with 406 Not Acceptable', () => { it('should set res.notAcceptable', (done) => { request.get(`${base}/not-acceptable`).end((error, res) => { assert(error); assert(res.notAcceptable, 'response should be .notAcceptable'); done(); }); }); }); describe('with 204 No Content', () => { it('should set res.noContent', (done) => { request.get(`${base}/no-content`).end((error, res) => { assert(!error); assert(res.noContent, 'response should be .noContent'); done(); }); }); }); describe('with 201 Created', () => { it('should set res.created', (done) => { request.post(`${base}/created`).end((error, res) => { assert(!error); assert(res.created, 'response should be .created'); done(); }); }); }); describe('with 422 Unprocessable Entity', () => { it('should set res.unprocessableEntity', (done) => { request.post(`${base}/unprocessable-entity`).end((error, res) => { assert(error); assert( res.unprocessableEntity, 'response should be .unprocessableEntity' ); done(); }); }); }); }); superagent-8.0.5/test/node/form.js000066400000000000000000000027531434246777100171340ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); describe('Merging objects', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); it("Don't mix Buffer and JSON", () => { assert.throws(() => { request .post('/echo') .send(Buffer.from('some buffer')) .send({ allowed: false }); }); }); }); describe('req.send(String)', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); it('should default to "form"', (done) => { request .post(`${base}/echo`) .send('user[name]=tj') .send('user[email]=tj@vision-media.ca') .end((error, res) => { res.header['content-type'].should.equal( 'application/x-www-form-urlencoded' ); res.body.should.eql({ user: { name: 'tj', email: 'tj@vision-media.ca' } }); done(); }); }); }); describe('res.body', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('application/x-www-form-urlencoded', () => { it('should parse the body', (done) => { request.get(`${base}/form-data`).end((error, res) => { res.text.should.equal('pet[name]=manny'); res.body.should.eql({ pet: { name: 'manny' } }); done(); }); }); }); }); superagent-8.0.5/test/node/http2.js000066400000000000000000000016341434246777100172270ustar00rootroot00000000000000'use strict'; if (!process.env.HTTP2_TEST) { return; } const assert = require('assert'); const url = require('url'); const request = require('../..'); const getSetup = require('../support/setup'); describe('request.get().http2()', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); it('should preserve the encoding of the url', (done) => { request .get(`${base}/url?a=(b%29`) .http2() .end((error, res) => { assert.equal('/url?a=(b%29', res.text); done(); }); }); it('should format the url', () => request .get(url.parse(`${base}/login`)) .http2() .then((res) => { assert(res.ok); })); it.skip('should default to http', () => request .get('localhost:5000/login') .http2() .then((res) => { assert.equal(res.status, 200); })); }); superagent-8.0.5/test/node/https.js000066400000000000000000000156161434246777100173350ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const url = require('url'); const https = require('https'); const fs = require('fs'); const express = require('../support/express'); const request = require('../support/client'); const app = express(); const ca = fs.readFileSync(`${__dirname}/fixtures/ca.cert.pem`); const key = fs.readFileSync(`${__dirname}/fixtures/key.pem`); const pfx = fs.readFileSync(`${__dirname}/fixtures/cert.pfx`); const cert = fs.readFileSync(`${__dirname}/fixtures/cert.pem`); const passpfx = fs.readFileSync(`${__dirname}/fixtures/passcert.pfx`); /* openssl genrsa -out ca.key.pem 2048 openssl req -x509 -new -nodes -key ca.key.pem -sha256 -days 5000 -out ca.cert.pem # specify CN = CA openssl genrsa -out key.pem 2048 openssl req -new -key key.pem -out cert.csr # specify CN = localhost openssl x509 -req -in cert.csr -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -out cert.pem -days 5000 -sha256 openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.pfx # empty password openssl pkcs12 -export -in cert.pem -inkey key.pem -out passcert.pfx # password test */ let http2; if (process.env.HTTP2_TEST) { http2 = require('http2'); } let server; app.get('/', (request_, res) => { res.send('Safe and secure!'); }); // WARNING: this .listen() boilerplate is slightly different from most tests // due to HTTPS. Do not copy/paste without examination. const base = 'https://localhost'; let testEndpoint; describe('https', () => { describe('certificate authority', () => { before(function listen(done) { server = process.env.HTTP2_TEST ? http2.createSecureServer( { key, cert }, app ) : https.createServer( { key, cert }, app ); server.listen(0, function listening() { testEndpoint = `${base}:${server.address().port}`; done(); }); }); after(() => { if (server) server.close(); }); describe('request', () => { it('should give a good response', (done) => { request .get(testEndpoint) .ca(ca) .end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); it('should reject unauthorized response', () => { return request .get(testEndpoint) .trustLocalhost(false) .then( () => { throw new Error('Allows MITM'); }, () => {} ); }); it('should not reject unauthorized response', () => { return request .get(testEndpoint) .disableTLSCerts() .then(({ status }) => { assert.strictEqual(status, 200); }); }); it('should trust localhost unauthorized response', () => { return request.get(testEndpoint).trustLocalhost(true); }); it('should trust overriden localhost unauthorized response', () => { return request .get(`https://example.com:${server.address().port}`) .connect('127.0.0.1') .trustLocalhost(); }); }); describe('.agent', () => { it('should be able to make multiple requests without redefining the certificate', (done) => { const agent = request.agent({ ca }); agent.get(testEndpoint).end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); agent.get(url.parse(testEndpoint)).end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); }); }); }); describe.skip('client certificates', () => { before(function listen(done) { server = process.env.HTTP2_TEST ? http2.createSecureServer( { ca, key, cert, requestCert: true, rejectUnauthorized: true }, app ) : https.createServer( { ca, key, cert, requestCert: true, rejectUnauthorized: true }, app ); server.listen(0, function listening() { testEndpoint = `${base}:${server.address().port}`; done(); }); }); after(() => { if (server) server.close(); }); describe('request', () => { it('should give a good response with client certificates and CA', (done) => { request .get(testEndpoint) .ca(ca) .key(key) .cert(cert) .end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); it('should give a good response with client pfx', (done) => { request .get(testEndpoint) .pfx(pfx) .end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); it('should give a good response with client pfx with passphrase', (done) => { request .get(testEndpoint) .pfx({ pfx: passpfx, passphrase: 'test' }) .end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); }); describe('.agent', () => { it('should be able to make multiple requests without redefining the certificates', (done) => { const agent = request.agent({ ca, key, cert }); agent.get(testEndpoint).end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); agent.get(url.parse(testEndpoint)).end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); }); it('should be able to make multiple requests without redefining pfx', (done) => { const agent = request.agent({ pfx }); agent.get(testEndpoint).end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); agent.get(url.parse(testEndpoint)).end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); }); }); }); }); superagent-8.0.5/test/node/image.js000066400000000000000000000030121434246777100172400ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const request = require('../support/client'); const getSetup = require('../support/setup'); const img = fs.readFileSync(`${__dirname}/fixtures/test.png`); describe('res.body', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('image/png', () => { it('should parse the body', (done) => { request.get(`${base}/image`).end((error, res) => { res.type.should.equal('image/png'); Buffer.isBuffer(res.body).should.be.true(); (res.body.length - img.length).should.equal(0); done(); }); }); }); describe('application/octet-stream', () => { it('should parse the body', (done) => { request .get(`${base}/image-as-octets`) .buffer(true) // that's tech debt :( .end((error, res) => { res.type.should.equal('application/octet-stream'); Buffer.isBuffer(res.body).should.be.true(); (res.body.length - img.length).should.equal(0); done(); }); }); }); describe('application/octet-stream', () => { it('should parse the body (using responseType)', (done) => { request .get(`${base}/image-as-octets`) .responseType('blob') .end((error, res) => { res.type.should.equal('application/octet-stream'); Buffer.isBuffer(res.body).should.be.true(); (res.body.length - img.length).should.equal(0); done(); }); }); }); }); superagent-8.0.5/test/node/incoming-multipart.js000066400000000000000000000032121434246777100220020ustar00rootroot00000000000000// var request = require('../support/client') // , express = require('express') // , assert = require('assert') // , app = express() // , fs = require('fs'); // app.get('/', function(req, res){ // res.set('Content-Type', 'multipart/form-data; boundary=awesome'); // // res.write('\r\n'); TODO: formidable bug // res.write('--awesome\r\n'); // res.write('Content-Disposition: attachment; name="image"; filename="something.png"\r\n'); // res.write('Content-Type: image/png\r\n'); // res.write('\r\n'); // res.write('some data'); // res.write('\r\n--awesome\r\n'); // res.write('Content-Disposition: form-data; name="name"\r\n'); // res.write('Content-Type: text/plain\r\n'); // res.write('\r\n'); // res.write('tobi'); // res.write('\r\n--awesome--'); // setTimeout(function(){ // TODO: lolnode... // res.end(); // }, 1000); // }); // var base = 'http://localhost' // var server; // before(function listen(done) { // server = app.listen(0, function listening() { // base += ':' + server.address().port; // done(); // }); // }); // describe('request multipart/form-data', function(){ // describe('req.body', function(){ // it('should be populated with fields', function(done){ // request.get(base, function(err, res){ // if (err) return done(err); // res.status.should.equal(200); // res.body.should.eql({ name: 'tobi' }); // res.files.image.name.should.equal('something.png'); // res.files.image.type.should.equal('image/png'); // assert.equal(null, res.text, 'res.text should be empty for multipart'); // done(); // }); // }) // }) // }) superagent-8.0.5/test/node/inflate.js000066400000000000000000000100611434246777100176020ustar00rootroot00000000000000'use strict'; require('should'); require('should-http'); const assert = require('assert'); const zlib = require('zlib'); let http = require('http'); const getPort = require('get-port'); const express = require('../support/express'); const request = require('../support/client'); if (process.env.HTTP2_TEST) { http = require('http2'); } const app = express(); const subject = 'some long long long long string'; let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); getPort().then((port) => { server = server.listen(port, function listening() { base += `:${server.address().port}`; done(); }); }); }); app.get('/binary', (request_, res) => { zlib.deflate(subject, (error, buf) => { res.set('Content-Encoding', 'gzip'); res.send(buf); }); }); app.get('/corrupt', (request_, res) => { res.set('Content-Encoding', 'gzip'); res.send('blah'); }); app.get('/nocontent', (request_, res, next) => { res.statusCode = 204; res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); res.send(''); }); app.get('/', (request_, res, next) => { zlib.deflate(subject, (error, buf) => { res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); res.send(buf); }); }); app.get('/junk', (request_, res) => { zlib.deflate(subject, (error, buf) => { res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); res.write(buf); res.end(' 0 junk'); }); }); app.get('/chopped', (request_, res) => { zlib.deflate(`${subject}123456`, (error, buf) => { res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); res.send(buf.slice(0, -1)); }); }); describe('zlib', () => { it('should deflate the content', (done) => { request.get(base).end((error, res) => { res.should.have.status(200); res.text.should.equal(subject); res.headers['content-length'].should.be.below(subject.length); done(); }); }); it('should protect from zip bombs', (done) => { request .get(base) .buffer(true) .maxResponseSize(1) .end((error, res) => { try { assert.equal('Maximum response size reached', error && error.message); done(); } catch (err) { done(err); } }); }); it('should ignore trailing junk', (done) => { request.get(`${base}/junk`).end((error, res) => { res.should.have.status(200); res.text.should.equal(subject); done(); }); }); it('should ignore missing data', (done) => { request.get(`${base}/chopped`).end((error, res) => { assert.equal(undefined, error); res.should.have.status(200); res.text.should.startWith(subject); done(); }); }); it('should handle corrupted responses', (done) => { request.get(`${base}/corrupt`).end((error, res) => { assert(error, 'missing error'); assert(!res, 'response should not be defined'); done(); }); }); it('should handle no content with gzip header', (done) => { request.get(`${base}/nocontent`).end((error, res) => { assert.ifError(error); assert(res); res.should.have.status(204); res.text.should.equal(''); res.headers.should.not.have.property('content-length'); done(); }); }); describe('without encoding set', () => { it('should buffer if asked', () => { return request .get(`${base}/binary`) .buffer(true) .then((res) => { res.should.have.status(200); assert(res.headers['content-length']); assert(res.body.byteLength); assert.equal(subject, res.body.toString()); }); }); it('should emit buffers', (done) => { request.get(`${base}/binary`).end((error, res) => { res.should.have.status(200); res.headers['content-length'].should.be.below(subject.length); res.on('data', (chunk) => { chunk.should.have.length(subject.length); }); res.on('end', done); }); }); }); }); superagent-8.0.5/test/node/lookup.js000066400000000000000000000011711434246777100174730ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const dns = require('dns'); const request = require('../support/client'); const getSetup = require('../support/setup'); let base = null; function myLookup(hostname, options, callback) { dns.lookup(hostname, options, callback); } describe('req.lookup()', () => { before(async () => { const setup = await getSetup(); base = setup.uri; }); it('should set a custom lookup', (done) => { const r = request.get(`${base}/ok`).lookup(myLookup); assert(r.lookup() === myLookup); r.then((res) => { res.text.should.equal('ok'); done(); }); }); }); superagent-8.0.5/test/node/multipart.js000066400000000000000000000174421434246777100202130ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const fs = require('fs'); const path = require('path'); const should = require('should'); const getPort = require('get-port'); const request = require('../support/client'); const getSetup = require('../support/setup'); const IS_WINDOWS = require('os').platform() === 'win32'; function read(file) { return fs.readFileSync(file, 'utf8'); } function getFullPath(filename) { if (!IS_WINDOWS) { return filename; } const fullPath = path.join(__dirname, '../../', filename); return fullPath; } describe('Multipart', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('#field(name, value)', () => { it('should set a multipart field value', () => { const request_ = request.post(`${base}/echo`); request_.field('user[name]', 'tobi'); request_.field('user[age]', '2'); request_.field('user[species]', 'ferret'); return request_.then((res) => { res.body['user[name]'].should.equal('tobi'); res.body['user[age]'].should.equal('2'); res.body['user[species]'].should.equal('ferret'); }); }); it('should work with file attachments', () => { const request_ = request.post(`${base}/echo`); request_.field('name', 'Tobi'); request_.attach('document', 'test/node/fixtures/user.html'); request_.field('species', 'ferret'); return request_.then((res) => { res.body.name.should.equal('Tobi'); res.body.species.should.equal('ferret'); const html = res.files.document; html.originalFilename.should.equal('user.html'); html.mimetype.should.equal('text/html'); read(html.filepath).should.equal('

name

'); }); }); }); describe('#attach(name, path)', () => { it('should attach a file', () => { const request_ = request.post(`${base}/echo`); request_.attach('one', 'test/node/fixtures/user.html'); request_.attach('two', 'test/node/fixtures/user.json'); request_.attach('three', 'test/node/fixtures/user.txt'); return request_.then((res) => { const html = res.files.one; const json = res.files.two; const text = res.files.three; html.originalFilename.should.equal('user.html'); html.mimetype.should.equal('text/html'); read(html.filepath).should.equal('

name

'); json.originalFilename.should.equal('user.json'); json.mimetype.should.equal('application/json'); read(json.filepath).should.equal('{"name":"tobi"}'); text.originalFilename.should.equal('user.txt'); text.mimetype.should.equal('text/plain'); read(text.filepath).should.equal('Tobi'); }); }); describe('when a file does not exist', () => { it('should fail the request with an error', (done) => { const request_ = request.post(`${base}/echo`); request_.attach('name', 'foo'); // request_.attach('name2', 'bar'); // request_.attach('name3', 'baz'); request_.end((error, res) => { assert.ok(Boolean(error), 'Request should have failed.'); error.code.should.equal('ENOENT'); error.message.should.containEql('ENOENT'); if (IS_WINDOWS) { error.path .toLowerCase() .should.equal(getFullPath('foo').toLowerCase()); } else { error.path.should.equal(getFullPath('foo')); } done(); }); }); it('promise should fail', () => { return request .post(`${base}/echo`) .field({ a: 1, b: 2 }) .attach('c', 'does-not-exist.txt') .then( (res) => assert.fail('It should not allow this'), (err) => { err.code.should.equal('ENOENT'); if (IS_WINDOWS) { err.path .toLowerCase() .should.equal( getFullPath('does-not-exist.txt').toLowerCase() ); } else { err.path.should.equal(getFullPath('does-not-exist.txt')); } } ); }); it('should report ENOENT via the callback', (done) => { request .post(`${base}/echo`) .attach('name', 'file-does-not-exist') .end((error, res) => { assert.ok(Boolean(error), 'Request should have failed'); error.code.should.equal('ENOENT'); done(); }); }); it('should report ENOENT via Promise', () => { return request .post(`${base}/echo`) .attach('name', 'file-does-not-exist') .then( (res) => assert.fail('Request should have failed'), (err) => err.code.should.equal('ENOENT') ); }); }); }); describe('#attach(name, path, filename)', () => { it('should use the custom filename', () => request .post(`${base}/echo`) .attach('document', 'test/node/fixtures/user.html', 'doc.html') .then((res) => { const html = res.files.document; html.originalFilename.should.equal('doc.html'); html.mimetype.should.equal('text/html'); read(html.filepath).should.equal('

name

'); })); it('should fire progress event', (done) => { let loaded = 0; let total = 0; let uploadEventWasFired = false; request .post(`${base}/echo`) .attach('document', 'test/node/fixtures/user.html') .on('progress', (event) => { total = event.total; loaded = event.loaded; if (event.direction === 'upload') { uploadEventWasFired = true; } }) .end((error, res) => { if (error) return done(error); const html = res.files.document; html.originalFilename.should.equal('user.html'); html.mimetype.should.equal('text/html'); read(html.filepath).should.equal('

name

'); total.should.equal(223); loaded.should.equal(223); uploadEventWasFired.should.equal(true); done(); }); }); it('filesystem errors should be caught', (done) => { request .post(`${base}/echo`) .attach('filedata', 'test/node/fixtures/non-existent-file.ext') .end((error, res) => { assert.ok(Boolean(error), 'Request should have failed.'); error.code.should.equal('ENOENT'); if (IS_WINDOWS) { error.path .toLowerCase() .should.equal( getFullPath( 'test/node/fixtures/non-existent-file.ext' ).toLowerCase() ); } else { error.path.should.equal( getFullPath('test/node/fixtures/non-existent-file.ext') ); } done(); }); }); }); describe('#field(name, val)', () => { it('should set a multipart field value', (done) => { request .post(`${base}/echo`) .field('first-name', 'foo') .field('last-name', 'bar') .end((error, res) => { if (error) done(error); res.should.be.ok(); res.body['first-name'].should.equal('foo'); res.body['last-name'].should.equal('bar'); done(); }); }); }); describe('#field(object)', () => { it('should set multiple multipart fields', (done) => { request .post(`${base}/echo`) .field({ 'first-name': 'foo', 'last-name': 'bar' }) .end((error, res) => { if (error) done(error); res.should.be.ok(); res.body['first-name'].should.equal('foo'); res.body['last-name'].should.equal('bar'); done(); }); }); }); }); superagent-8.0.5/test/node/network-error.js000066400000000000000000000013741434246777100210070ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const net = require('net'); const request = require('../support/client'); const express = require('../support/express'); function getFreePort(fn) { const server = net.createServer(); server.listen(0, () => { const { port } = server.address(); server.close(() => { fn(port); }); }); } describe('with network error', () => { before(function (done) { // connecting to a free port // will trigger a connection refused getFreePort((port) => { this.port = port; done(); }); }); it('should error', function (done) { request.get(`http://localhost:${this.port}/`).end((error, res) => { assert(error, 'expected an error'); done(); }); }); }); superagent-8.0.5/test/node/not-modified.js000066400000000000000000000015071434246777100205430ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const getSetup = require('../support/setup'); describe('request', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('not modified', () => { let ts; it('should start with 200', (done) => { request.get(`${base}/if-mod`).end((error, res) => { res.should.have.status(200); res.text.should.match(/^\d+$/); ts = Number(res.text); done(); }); }); it('should then be 304', (done) => { request .get(`${base}/if-mod`) .set('If-Modified-Since', new Date(ts).toUTCString()) .end((error, res) => { res.should.have.status(304); // res.text.should.be.empty done(); }); }); }); }); superagent-8.0.5/test/node/parsers.js000066400000000000000000000041051434246777100176410ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); const doesntWorkInHttp2 = !process.env.HTTP2_TEST; describe('req.parse(fn)', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); it('should take precedence over default parsers', (done) => { request .get(`${base}/manny`) .parse(request.parse['application/json']) .end((error, res) => { assert(res.ok); assert.equal('{"name":"manny"}', res.text); assert.equal('manny', res.body.name); done(); }); }); it('should be the only parser', () => request .get(`${base}/image`) .buffer(false) .parse((res, fn) => { res.on('data', () => {}); }) .then((res) => { assert(res.ok); assert.strictEqual(res.text, undefined); res.body.should.eql({}); })); it('should emit error if parser throws', (done) => { request .get(`${base}/manny`) .parse(() => { throw new Error('I am broken'); }) .on('error', (error) => { error.message.should.equal('I am broken'); done(); }) .end(); }); it('should emit error if parser returns an error', (done) => { request .get(`${base}/manny`) .parse((res, fn) => { fn(new Error('I am broken')); }) .on('error', (error) => { error.message.should.equal('I am broken'); done(); }) .end(); }); if (doesntWorkInHttp2) it('should not emit error on chunked json', (done) => { request.get(`${base}/chunked-json`).end((error) => { assert.ifError(error); done(); }); }); if (doesntWorkInHttp2) it('should not emit error on aborted chunked json', (done) => { const request_ = request.get(`${base}/chunked-json`); request_.end((error) => { assert.ifError(error); done(); }); setTimeout(() => { request_.abort(); }, 50); }); }); superagent-8.0.5/test/node/pipe-redirect.js000066400000000000000000000017441434246777100207240ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const request = require('../support/client'); const getSetup = require('../support/setup'); describe('pipe on redirect', () => { let setup; let base; const destinationPath = 'test/node/fixtures/pipe.txt'; before(async () => { setup = await getSetup(); base = setup.uri; }); after((done) => { // Remove tmp file fs.unlink(destinationPath, done); }); it('should follow Location', (done) => { const stream = fs.createWriteStream(destinationPath); const redirects = []; const request_ = request .get(base) .on('redirect', (res) => { redirects.push(res.headers.location); }) .connect({ inapplicable: 'should be ignored' }); stream.on('finish', () => { redirects.should.eql(['/movies', '/movies/all', '/movies/all/0']); fs.readFileSync(destinationPath, 'utf8').should.eql('first movie page'); done(); }); request_.pipe(stream); }); }); superagent-8.0.5/test/node/pipe.js000066400000000000000000000072311434246777100171220ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const express = require('../support/express'); const app = express(); const fs = require('fs'); const bodyParser = require('body-parser'); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } app.use(bodyParser.json()); app.get('/', (request_, res) => { fs.createReadStream('test/node/fixtures/user.json').pipe(res); }); app.get('/redirect', (request_, res) => { res.set('Location', '/').sendStatus(302); }); app.get('/badRedirectNoLocation', (request_, res) => { res.set('Location', '').sendStatus(302); }); app.post('/', (request_, res) => { if (process.env.HTTP2_TEST) { // body-parser does not support http2 yet. // This section can be remove after body-parser supporting http2. res.set('content-type', 'application/json'); request_.pipe(res); } else { res.send(request_.body); } }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('request pipe', () => { const destinationPath = 'test/node/fixtures/tmp.json'; after(function removeTmpfile(done) { fs.unlink(destinationPath, done); }); it('should act as a writable stream', (done) => { const request_ = request.post(base); const stream = fs.createReadStream('test/node/fixtures/user.json'); request_.type('json'); request_.on('response', (res) => { res.body.should.eql({ name: 'tobi' }); done(); }); stream.pipe(request_); }); it('end() stops piping', (done) => { const stream = fs.createWriteStream(destinationPath); request.get(base).end((error, res) => { try { res.pipe(stream); return done(new Error('Did not prevent nonsense pipe')); } catch { /* expected error */ } done(); }); }); it('should act as a readable stream', (done) => { const stream = fs.createWriteStream(destinationPath); let responseCalled = false; const request_ = request.get(base); request_.type('json'); request_.on('response', (res) => { res.status.should.eql(200); responseCalled = true; }); stream.on('finish', () => { JSON.parse(fs.readFileSync(destinationPath)).should.eql({ name: 'tobi' }); responseCalled.should.be.true(); done(); }); request_.pipe(stream); }); it('should follow redirects', (done) => { const stream = fs.createWriteStream(destinationPath); let responseCalled = false; const request_ = request.get(base + '/redirect'); request_.type('json'); request_.on('response', (res) => { res.status.should.eql(200); responseCalled = true; }); stream.on('finish', () => { JSON.parse(fs.readFileSync(destinationPath)).should.eql({ name: 'tobi' }); responseCalled.should.be.true(); done(); }); request_.pipe(stream); }); it('should not throw on bad redirects', (done) => { const stream = fs.createWriteStream(destinationPath); let responseCalled = false; let errorCalled = false; const request_ = request.get(base + '/badRedirectNoLocation'); request_.type('json'); request_.on('response', (res) => { responseCalled = true; }); request_.on('error', (error) => { error.message.should.eql('No location header for redirect'); errorCalled = true; stream.end(); }); stream.on('finish', () => { responseCalled.should.be.false(); errorCalled.should.be.true(); done(); }); request_.pipe(stream); }); }); superagent-8.0.5/test/node/query.js000066400000000000000000000132551434246777100173350ustar00rootroot00000000000000'use strict'; let http = require('http'); const assert = require('assert'); const fs = require('fs'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); if (process.env.HTTP2_TEST) { http = require('http2'); } app.get('/raw-query', (request_, res) => { res.status(200).send(request_.url.slice(request_.url.indexOf('?') + 1)); }); app.get('/', (request_, res) => { res.status(200).send(request_.query); }); app.delete('/url', (request_, res) => { res.status(200).send(request_.url); }); app.delete('/', (request_, res) => { res.status(200).send(request_.query); }); app.put('/', (request_, res) => { res.status(200).send(request_.query); }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('req.query(String)', () => { // This is no longer true as of qs v3.0.0 (https://github.com/ljharb/qs/commit/0c6f2a6318c94f6226d3cf7fe36094e9685042b6) // it('should supply uri malformed error to the callback') it('should support passing in a string', (done) => { request .del(base) .query('name=t%F6bi') .end((error, res) => { res.body.should.eql({ name: 't%F6bi' }); done(); }); }); it('should work with url query-string and string for query', (done) => { request .del(`${base}/?name=tobi`) .query('age=2%20') .end((error, res) => { res.body.should.eql({ name: 'tobi', age: '2 ' }); done(); }); }); it('should support compound elements in a string', (done) => { request .del(base) .query('name=t%F6bi&age=2') .end((error, res) => { res.body.should.eql({ name: 't%F6bi', age: '2' }); done(); }); }); it('should work when called multiple times with a string', (done) => { request .del(base) .query('name=t%F6bi') .query('age=2%F6') .end((error, res) => { res.body.should.eql({ name: 't%F6bi', age: '2%F6' }); done(); }); }); it('should work with normal `query` object and query string', (done) => { request .del(base) .query('name=t%F6bi') .query({ age: '2' }) .end((error, res) => { res.body.should.eql({ name: 't%F6bi', age: '2' }); done(); }); }); it('should not encode raw backticks, but leave encoded ones as is', () => { return Promise.all([ request .get(`${base}/raw-query`) .query('name=`t%60bi`&age`=2') .then((res) => { res.text.should.eql('name=`t%60bi`&age`=2'); }), request.get(base + '/raw-query?`age%60`=2%60`').then((res) => { res.text.should.eql('`age%60`=2%60`'); }), request .get(`${base}/raw-query`) .query('name=`t%60bi`') .query('age`=2') .then((res) => { res.text.should.eql('name=`t%60bi`&age`=2'); }) ]); }); }); describe('req.query(Object)', () => { it('should construct the query-string', (done) => { request .del(base) .query({ name: 'tobi' }) .query({ order: 'asc' }) .query({ limit: ['1', '2'] }) .end((error, res) => { res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] }); done(); }); }); // See commit message for the reasoning here. it('should encode raw backticks', (done) => { request .get(`${base}/raw-query`) .query({ name: '`tobi`' }) .query({ 'orde%60r': null }) .query({ '`limit`': ['%602`'] }) .end((error, res) => { res.text.should.eql('name=%60tobi%60&orde%2560r&%60limit%60=%25602%60'); done(); }); }); it('should not error on dates', (done) => { const date = new Date(0); request .del(base) .query({ at: date }) .end((error, res) => { assert.equal(date.toISOString(), res.body.at); done(); }); }); it('should work after setting header fields', (done) => { request .del(base) .set('Foo', 'bar') .set('Bar', 'baz') .query({ name: 'tobi' }) .query({ order: 'asc' }) .query({ limit: ['1', '2'] }) .end((error, res) => { res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] }); done(); }); }); it('should append to the original query-string', (done) => { request .del(`${base}/?name=tobi`) .query({ order: 'asc' }) .end((error, res) => { res.body.should.eql({ name: 'tobi', order: 'asc' }); done(); }); }); it('should retain the original query-string', (done) => { request.del(`${base}/?name=tobi`).end((error, res) => { res.body.should.eql({ name: 'tobi' }); done(); }); }); it('should keep only keys with null querystring values', (done) => { request .del(`${base}/url`) .query({ nil: null }) .end((error, res) => { res.text.should.equal('/url?nil'); done(); }); }); it('query-string should be sent on pipe', (done) => { const request_ = request.put(`${base}/?name=tobi`); const stream = fs.createReadStream('test/node/fixtures/user.json'); request_.on('response', (res) => { res.body.should.eql({ name: 'tobi' }); done(); }); request_.on('error', (err) => { done(err); }); stream.on('error', (err) => { done(err); }); // wait until stream is valid before piping stream.on('open', () => { // wait until request_ is ready before piping setTimeout(() => { stream.pipe(request_); }, 10); }); }); }); superagent-8.0.5/test/node/redirects-other-host.js000066400000000000000000000143531434246777100222460ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); const app2 = express(); const should = require('should'); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); let base2 = 'http://localhost'; let server2; before(function listen(done) { server2 = http.createServer(app2); server2 = server2.listen(0, function listening() { base2 += `:${server2.address().port}`; done(); }); }); app.all('/test-301', (request_, res) => { res.redirect(301, `${base2}/`); }); app.all('/test-302', (request_, res) => { res.redirect(302, `${base2}/`); }); app.all('/test-303', (request_, res) => { res.redirect(303, `${base2}/`); }); app.all('/test-307', (request_, res) => { res.redirect(307, `${base2}/`); }); app.all('/test-308', (request_, res) => { res.redirect(308, `${base2}/`); }); app2.all('/', (request_, res) => { res.send(request_.method); }); describe('request.get', () => { describe('on 301 redirect', () => { it('should follow Location with a GET request', (done) => { const request_ = request.get(`${base}/test-301`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 302 redirect', () => { it('should follow Location with a GET request', (done) => { const request_ = request.get(`${base}/test-302`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 303 redirect', () => { it('should follow Location with a GET request', (done) => { const request_ = request.get(`${base}/test-303`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 307 redirect', () => { it('should follow Location with a GET request', (done) => { const request_ = request.get(`${base}/test-307`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 308 redirect', () => { it('should follow Location with a GET request', (done) => { const request_ = request.get(`${base}/test-308`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); }); describe('request.post', () => { describe('on 301 redirect', () => { it('should follow Location with a GET request', (done) => { const request_ = request.post(`${base}/test-301`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 302 redirect', () => { it('should follow Location with a GET request', (done) => { const request_ = request.post(`${base}/test-302`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 303 redirect', () => { it('should follow Location with a GET request', (done) => { const request_ = request.post(`${base}/test-303`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 307 redirect', () => { it('should follow Location with a POST request', (done) => { const request_ = request.post(`${base}/test-307`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('POST'); done(); }); }); }); describe('on 308 redirect', () => { it('should follow Location with a POST request', (done) => { const request_ = request.post(`${base}/test-308`).redirects(1); request_.end((error, res) => { const headers = request_.req.getHeaders ? request_.req.getHeaders() : request_.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('POST'); done(); }); }); }); }); superagent-8.0.5/test/node/redirects.js000066400000000000000000000225071434246777100201540ustar00rootroot00000000000000'use strict'; const URL = require('url'); const assert = require('assert'); const getSetup = require('../support/setup'); const request = require('../support/client'); describe('request', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); describe('on redirect', () => { it('should merge cookies if agent is used', (done) => { request .agent() .get(`${base}/cookie-redirect`) .set('Cookie', 'orig=1; replaced=not') .end((error, res) => { try { assert.ifError(error); assert(/orig=1/.test(res.text), 'orig=1/.test'); assert(/replaced=yes/.test(res.text), 'replaced=yes/.test'); assert(/from-redir=1/.test(res.text), 'from-redir=1'); done(); } catch (err) { done(err); } }); }); it('should not merge cookies if agent is not used', (done) => { request .get(`${base}/cookie-redirect`) .set('Cookie', 'orig=1; replaced=not') .end((error, res) => { try { assert.ifError(error); assert(/orig=1/.test(res.text), '/orig=1'); assert(/replaced=not/.test(res.text), '/replaced=not'); assert(!/replaced=yes/.test(res.text), '!/replaced=yes'); assert(!/from-redir/.test(res.text), '!/from-redir'); done(); } catch (err) { done(err); } }); }); it('should have previously set cookie for subsquent requests when agent is used', (done) => { const agent = request.agent(); agent.get(`${base}/set-cookie`).end((error) => { assert.ifError(error); agent .get(`${base}/show-cookies`) .set({ Cookie: 'orig=1' }) .end((error, res) => { try { assert.ifError(error); assert(/orig=1/.test(res.text), 'orig=1/.test'); assert(/persist=123/.test(res.text), 'persist=123'); done(); } catch (err) { done(err); } }); }); }); it('should follow Location', (done) => { const redirects = []; request .get(base) .on('redirect', (res) => { redirects.push(res.headers.location); }) .end((error, res) => { try { const array = ['/movies', '/movies/all', '/movies/all/0']; redirects.should.eql(array); res.text.should.equal('first movie page'); done(); } catch (err) { done(err); } }); }); it('should follow Location with IP override', () => { const redirects = []; const url = URL.parse(base); return request .get(`http://redir.example.com:${url.port || '80'}${url.pathname}`) .connect({ '*': url.hostname }) .on('redirect', (res) => { redirects.push(res.headers.location); }) .then((res) => { const array = ['/movies', '/movies/all', '/movies/all/0']; redirects.should.eql(array); res.text.should.equal('first movie page'); }); }); it('should follow Location with IP:port override', () => { const redirects = []; const url = URL.parse(base); return request .get(`http://redir.example.com:9999${url.pathname}`) .connect({ '*': { host: url.hostname, port: url.port || 80 } }) .on('redirect', (res) => { redirects.push(res.headers.location); }) .then((res) => { const array = ['/movies', '/movies/all', '/movies/all/0']; redirects.should.eql(array); res.text.should.equal('first movie page'); }); }); it('should not follow on HEAD by default', () => { const redirects = []; return request .head(base) .ok(() => true) .on('redirect', (res) => { redirects.push(res.headers.location); }) .then((res) => { redirects.should.eql([]); res.status.should.equal(302); }); }); it('should follow on HEAD when redirects are set', (done) => { const redirects = []; request .head(base) .redirects(10) .on('redirect', (res) => { redirects.push(res.headers.location); }) .end((error, res) => { try { const array = []; array.push('/movies', '/movies/all', '/movies/all/0'); redirects.should.eql(array); assert(!res.text); done(); } catch (err) { done(err); } }); }); it('should remove Content-* fields', (done) => { request .post(`${base}/header`) .type('txt') .set('X-Foo', 'bar') .set('X-Bar', 'baz') .send('hey') .end((error, res) => { try { assert(res.body); res.body.should.have.property('x-foo', 'bar'); res.body.should.have.property('x-bar', 'baz'); res.body.should.not.have.property('content-type'); res.body.should.not.have.property('content-length'); res.body.should.not.have.property('transfer-encoding'); done(); } catch (err) { done(err); } }); }); it('should retain cookies', (done) => { request .get(`${base}/header`) .set('Cookie', 'foo=bar;') .end((error, res) => { try { assert(res.body); res.body.should.have.property('cookie', 'foo=bar;'); done(); } catch (err) { done(err); } }); }); it('should not resend query parameters', (done) => { const redirects = []; const query = []; request .get(`${base}/?foo=bar`) .on('redirect', (res) => { query.push(res.headers.query); redirects.push(res.headers.location); }) .end((error, res) => { try { const array = []; array.push('/movies', '/movies/all', '/movies/all/0'); redirects.should.eql(array); res.text.should.equal('first movie page'); query.should.eql(['{"foo":"bar"}', '{}', '{}']); res.headers.query.should.eql('{}'); done(); } catch (err) { done(err); } }); }); it('should handle no location header', (done) => { request.get(`${base}/bad-redirect`).end((error, res) => { try { error.message.should.equal('No location header for redirect'); done(); } catch (err) { done(err); } }); }); describe('when relative', () => { it('should redirect to a sibling path', (done) => { const redirects = []; request .get(`${base}/relative`) .on('redirect', (res) => { redirects.push(res.headers.location); }) .end((error, res) => { try { redirects.should.eql(['tobi']); res.text.should.equal('tobi'); done(); } catch (err) { done(err); } }); }); it('should redirect to a parent path', (done) => { const redirects = []; request .get(`${base}/relative/sub`) .on('redirect', (res) => { redirects.push(res.headers.location); }) .end((error, res) => { try { redirects.should.eql(['../tobi']); res.text.should.equal('tobi'); done(); } catch (err) { done(err); } }); }); }); }); describe('req.redirects(n)', () => { it('should alter the default number of redirects to follow', (done) => { const redirects = []; request .get(base) .redirects(2) .on('redirect', (res) => { redirects.push(res.headers.location); }) .end((error, res) => { try { const array = []; assert(res.redirect, 'res.redirect'); array.push('/movies', '/movies/all'); redirects.should.eql(array); res.text.should.match(/Moved Temporarily|Found/); done(); } catch (err) { done(err); } }); }); }); describe('on POST', () => { it('should redirect as GET', () => { const redirects = []; return request .post(`${base}/movie`) .send({ name: 'Tobi' }) .redirects(2) .on('redirect', (res) => { redirects.push(res.headers.location); }) .then((res) => { redirects.should.eql(['/movies/all/0']); res.text.should.equal('first movie page'); }); }); it('using multipart/form-data should redirect as GET', () => { const redirects = []; request .post(`${base}/movie`) .type('form') .field('name', 'Tobi') .redirects(2) .on('redirect', (res) => { redirects.push(res.headers.location); }) .then((res) => { redirects.should.eql(['/movies/all/0']); res.text.should.equal('first movie page'); }); }); }); }); superagent-8.0.5/test/node/response-readable-stream.js000066400000000000000000000026311434246777100230500ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const express = require('../support/express'); const app = express(); const fs = require('fs'); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } app.get('/', (request_, res) => { fs.createReadStream('test/node/fixtures/user.json').pipe(res); }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('response', () => { it('should act as a readable stream', (done) => { const request_ = request.get(base).buffer(false); request_.end((error, res) => { if (error) return done(error); let trackEndEvent = 0; let trackCloseEvent = 0; res.on('end', () => { trackEndEvent++; trackEndEvent.should.equal(1); if (!process.env.HTTP2_TEST) { trackCloseEvent.should.equal(0); // close should not have been called } done(); }); res.on('close', () => { trackCloseEvent++; }); setTimeout(() => { (() => { res.pause(); }).should.not.throw(); (() => { res.resume(); }).should.not.throw(); (() => { res.destroy(); }).should.not.throw(); }, 50); }); }); }); superagent-8.0.5/test/node/serialize.js000066400000000000000000000012001434246777100201420ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); describe('req.serialize(fn)', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); it('should take precedence over default parsers', (done) => { request .post(`${base}/echo`) .send({ foo: 123 }) .serialize(() => '{"bar":456}') .end((error, res) => { assert.ifError(error); assert.equal('{"bar":456}', res.text); assert.equal(456, res.body.bar); done(); }); }); }); superagent-8.0.5/test/node/set-host.js000066400000000000000000000021561434246777100177340ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const express = require('../support/express'); const app = express(); const http = require('http'); const assert = require('assert'); describe('request.get().set()', () => { if (process.env.HTTP2_TEST) { return; // request object doesn't look the same } let server; after(function exitServer() { if (typeof server.close === 'function') { server.close(); } else { server.destroy(); } }); it('should set host header after get()', (done) => { app.get('/', (request_, res) => { assert.equal(request_.hostname, 'example.com'); res.end(); }); server = http.createServer(app); server.listen(0, function listening() { request .get(`http://localhost:${server.address().port}`) .set('host', 'example.com') .then(() => { return request .get(`http://example.com:${server.address().port}`) .connect({ 'example.com': 'localhost', '*': 'fail' }); }) .then(() => done(), done); }); }); }); superagent-8.0.5/test/node/toError.js000066400000000000000000000017051434246777100176210ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } app.get('/', (request_, res) => { res.status(400).send('invalid json'); }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('res.toError()', () => { it('should return an Error', (done) => { request.get(base).end((err, res) => { const error = res.toError(); assert.equal(error.status, 400); assert.equal(error.method, 'GET'); assert.equal(error.path, '/'); assert.equal(error.message, 'cannot GET / (400)'); assert.equal(error.text, 'invalid json'); done(); }); }); }); superagent-8.0.5/test/node/unix-sockets.js000066400000000000000000000057521434246777100206270ustar00rootroot00000000000000'use strict'; const assert = require('assert'); let http = require('http'); let https = require('https'); const os = require('os'); const fs = require('fs'); const express = require('../support/express'); const request = require('../support/client'); const app = express(); const key = fs.readFileSync(`${__dirname}/fixtures/key.pem`); const cert = fs.readFileSync(`${__dirname}/fixtures/cert.pem`); const cacert = fs.readFileSync(`${__dirname}/fixtures/ca.cert.pem`); const httpSockPath = [os.tmpdir(), 'superagent-http.sock'].join('/'); const httpsSockPath = [os.tmpdir(), 'superagent-https.sock'].join('/'); let httpServer; let httpsServer; if (process.env.HTTP2_TEST) { http = https = require('http2'); } app.get('/', (request_, res) => { res.send('root ok!'); }); app.get('/request/path', (request_, res) => { res.send('request path ok!'); }); describe('[unix-sockets] http', () => { if (process.platform === 'win32') { return; } before((done) => { if (fs.existsSync(httpSockPath) === true) { // try unlink if sock file exists fs.unlinkSync(httpSockPath); } httpServer = http.createServer(app); httpServer.listen(httpSockPath, done); }); const base = `http+unix://${httpSockPath.replace(/\//g, '%2F')}`; describe('request', () => { it('path: / (root)', (done) => { request.get(`${base}/`).end((error, res) => { assert(res.ok); assert.strictEqual('root ok!', res.text); done(); }); }); it('path: /request/path', (done) => { request.get(`${base}/request/path`).end((error, res) => { assert(res.ok); assert.strictEqual('request path ok!', res.text); done(); }); }); }); after(() => { if (typeof httpServer.close === 'function') { httpServer.close(); } else httpServer.destroy(); }); }); describe('[unix-sockets] https', () => { if (process.platform === 'win32') { return; } before((done) => { if (fs.existsSync(httpsSockPath) === true) { // try unlink if sock file exists fs.unlinkSync(httpsSockPath); } httpsServer = process.env.HTTP2_TEST ? https.createSecureServer({ key, cert }, app) : https.createServer({ key, cert }, app); httpsServer.listen(httpsSockPath, done); }); const base = `https+unix://${httpsSockPath.replace(/\//g, '%2F')}`; describe('request', () => { it('path: / (root)', (done) => { request .get(`${base}/`) .ca(cacert) .end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('root ok!', res.text); done(); }); }); it('path: /request/path', (done) => { request .get(`${base}/request/path`) .ca(cacert) .end((error, res) => { assert.ifError(error); assert(res.ok); assert.strictEqual('request path ok!', res.text); done(); }); }); }); after((done) => { httpsServer.close(done); }); }); superagent-8.0.5/test/node/user-agent.js000066400000000000000000000007111434246777100202330ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); describe('req.get()', () => { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); it('should not set a default user-agent', () => request.get(`${base}/ua`).then((res) => { assert(res.headers); assert(!res.headers['user-agent']); })); }); superagent-8.0.5/test/node/utils.js000066400000000000000000000024661434246777100173320ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const utils = process.env.OLD_NODE_TEST === '1' ? // eslint-disable-next-line node/no-missing-require require('../../../utils') : require('../../lib/utils'); describe('utils.type(str)', () => { it('should return the mime type', () => { utils .type('application/json; charset=utf-8') .should.equal('application/json'); utils.type('application/json').should.equal('application/json'); }); }); describe('utils.params(str)', () => { it('should return the field parameters', () => { const object = utils.params('application/json; charset=utf-8; foo = bar'); object.charset.should.equal('utf-8'); object.foo.should.equal('bar'); utils.params('application/json').should.eql({}); }); }); describe('utils.parseLinks(str)', () => { it('should parse links', () => { const string_ = '; rel="next", ; rel="last"'; const returnValue = utils.parseLinks(string_); returnValue.next.should.equal( 'https://api.github.com/repos/visionmedia/mocha/issues?page=2' ); returnValue.last.should.equal( 'https://api.github.com/repos/visionmedia/mocha/issues?page=5' ); }); }); superagent-8.0.5/test/redirects.js000066400000000000000000000070601434246777100172240ustar00rootroot00000000000000const assert = require('assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); describe('request', function () { let setup; let base; let isMSIE; before(async () => { setup = await getSetup(); base = setup.uri; isMSIE = !setup.NODE && /Trident\//.test(navigator.userAgent); }); this.timeout(20_000); describe('on redirect', () => { it('should retain header fields', (done) => { request .get(`${base}/header`) .set('X-Foo', 'bar') .end((error, res) => { try { assert(res.body); res.body.should.have.property('x-foo', 'bar'); done(); } catch (err) { done(err); } }); }); it('should preserve timeout across redirects', (done) => { request .get(`${base}/movies/random`) .timeout(250) .end((error, res) => { try { assert(error instanceof Error, 'expected an error'); error.should.have.property('timeout', 250); done(); } catch (err) { done(err); } }); }); it('should successfully redirect after retry on error', (done) => { const id = Math.random() * 1_000_000 * Date.now(); request .get(`${base}/error/redirect/${id}`) .retry(2) .end((error, res) => { assert(res.ok, 'response should be ok'); assert(res.text, 'first movie page'); done(); }); }); it('should preserve retries across redirects', (done) => { const id = Math.random() * 1_000_000 * Date.now(); request .get(`${base}/error/redirect-error${id}`) .retry(2) .end((error, res) => { assert(error, 'expected an error'); assert.equal(2, error.retries, 'expected an error with .retries'); assert.equal(500, error.status, 'expected an error status of 500'); done(); }); }); }); describe('on 303', () => { it('should redirect with same method', (done) => { request .put(`${base}/redirect-303`) .send({ msg: 'hello' }) .redirects(1) .on('redirect', (res) => { res.headers.location.should.equal('/reply-method'); }) .end((error, res) => { if (error) { done(error); return; } res.text.should.equal('method=get'); done(); }); }); }); describe('on 307', () => { it('should redirect with same method', (done) => { if (isMSIE) return done(); // IE9 broken request .put(`${base}/redirect-307`) .send({ msg: 'hello' }) .redirects(1) .on('redirect', (res) => { res.headers.location.should.equal('/reply-method'); }) .end((error, res) => { if (error) { done(error); return; } res.text.should.equal('method=put'); done(); }); }); }); describe('on 308', () => { it('should redirect with same method', (done) => { if (isMSIE) return done(); // IE9 broken request .put(`${base}/redirect-308`) .send({ msg: 'hello' }) .redirects(1) .on('redirect', (res) => { res.headers.location.should.equal('/reply-method'); }) .end((error, res) => { if (error) { done(error); return; } res.text.should.equal('method=put'); done(); }); }); }); }); superagent-8.0.5/test/request.js000066400000000000000000000557031434246777100167370ustar00rootroot00000000000000const fs = require('fs'); const assert = require('assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); const binData = fs.readFileSync(`${__dirname}/node/fixtures/test.aac`); describe('request', function () { let setup; let uri; before(async () => { setup = await getSetup(); uri = setup.uri; }); this.timeout(20_000); it('Request inheritance', () => { assert(request.get(`${uri}/`) instanceof request.Request); }); it('request() simple GET without callback', (next) => { request('GET', 'test/test.request.js').end(); next(); }); it('request() simple GET', (next) => { request('GET', `${uri}/ok`).end((error, res) => { try { assert(res instanceof request.Response, 'respond with Response'); assert(res.ok, 'response should be ok'); assert(res.text, 'res.text'); next(); } catch (err) { next(err); } }); }); it('request() simple HEAD', (next) => { request.head(`${uri}/ok`).end((error, res) => { try { assert(res instanceof request.Response, 'respond with Response'); assert(res.ok, 'response should be ok'); assert(!res.text, 'res.text'); next(); } catch (err) { next(err); } }); }); it('request() GET 5xx', (next) => { request('GET', `${uri}/error`).end((error, res) => { try { assert(error); assert.equal(error.message, 'Internal Server Error'); assert(!res.ok, 'response should not be ok'); assert(res.error, 'response should be an error'); assert(!res.clientError, 'response should not be a client error'); assert(res.serverError, 'response should be a server error'); next(); } catch (err) { next(err); } }); }); it('request() GET 4xx', (next) => { request('GET', `${uri}/notfound`).end((error, res) => { try { assert(error); assert.equal(error.message, 'Not Found'); assert(!res.ok, 'response should not be ok'); assert(res.error, 'response should be an error'); assert(res.clientError, 'response should be a client error'); assert(!res.serverError, 'response should not be a server error'); next(); } catch (err) { next(err); } }); }); it('request() GET 404 Not Found', (next) => { request('GET', `${uri}/notfound`).end((error, res) => { try { assert(error); assert(res.notFound, 'response should be .notFound'); next(); } catch (err) { next(err); } }); }); it('request() GET 400 Bad Request', (next) => { request('GET', `${uri}/bad-request`).end((error, res) => { try { assert(error); assert(res.badRequest, 'response should be .badRequest'); next(); } catch (err) { next(err); } }); }); it('request() GET 401 Bad Request', (next) => { request('GET', `${uri}/unauthorized`).end((error, res) => { try { assert(error); assert(res.unauthorized, 'response should be .unauthorized'); next(); } catch (err) { next(err); } }); }); it('request() GET 406 Not Acceptable', (next) => { request('GET', `${uri}/not-acceptable`).end((error, res) => { try { assert(error); assert(res.notAcceptable, 'response should be .notAcceptable'); next(); } catch (err) { next(err); } }); }); it('request() GET 204 No Content', (next) => { request('GET', `${uri}/no-content`).end((error, res) => { try { assert.ifError(error); assert(res.noContent, 'response should be .noContent'); next(); } catch (err) { next(err); } }); }); it('request() DELETE 204 No Content', (next) => { request('DELETE', `${uri}/no-content`).end((error, res) => { try { assert.ifError(error); assert(res.noContent, 'response should be .noContent'); next(); } catch (err) { next(err); } }); }); it('request() header parsing', (next) => { request('GET', `${uri}/notfound`).end((error, res) => { try { assert(error); assert.equal('text/html; charset=utf-8', res.header['content-type']); assert.equal('Express', res.header['x-powered-by']); next(); } catch (err) { next(err); } }); }); it('request() .status', (next) => { request('GET', `${uri}/notfound`).end((error, res) => { try { assert(error); assert.equal(404, res.status, 'response .status'); assert.equal(4, res.statusType, 'response .statusType'); next(); } catch (err) { next(err); } }); }); it('get()', (next) => { request.get(`${uri}/notfound`).end((error, res) => { try { assert(error); assert.equal(404, res.status, 'response .status'); assert.equal(4, res.statusType, 'response .statusType'); next(); } catch (err) { next(err); } }); }); it('put()', (next) => { request.put(`${uri}/user/12`).end((error, res) => { try { assert.equal('updated', res.text, 'response text'); next(); } catch (err) { next(err); } }); }); it('put().send()', (next) => { request .put(`${uri}/user/13/body`) .send({ user: 'new' }) .end((error, res) => { try { assert.equal('received new', res.text, 'response text'); next(); } catch (err) { next(err); } }); }); it('post()', (next) => { request.post(`${uri}/user`).end((error, res) => { try { assert.equal('created', res.text, 'response text'); next(); } catch (err) { next(err); } }); }); it('del()', (next) => { request.del(`${uri}/user/12`).end((error, res) => { try { assert.equal('deleted', res.text, 'response text'); next(); } catch (err) { next(err); } }); }); it('delete()', (next) => { request.delete(`${uri}/user/12`).end((error, res) => { try { assert.equal('deleted', res.text, 'response text'); next(); } catch (err) { next(err); } }); }); it('post() data', (next) => { request .post(`${uri}/todo/item`) .type('application/octet-stream') .send('tobi') .end((error, res) => { try { assert.equal('added "tobi"', res.text, 'response text'); next(); } catch (err) { next(err); } }); }); it('request .type()', (next) => { request .post(`${uri}/user/12/pet`) .type('urlencoded') .send('pet=tobi') .end((error, res) => { try { assert.equal('added pet "tobi"', res.text, 'response text'); next(); } catch (err) { next(err); } }); }); it('request .type() with alias', (next) => { request .post(`${uri}/user/12/pet`) .type('application/x-www-form-urlencoded') .send('pet=tobi') .end((error, res) => { try { assert.equal('added pet "tobi"', res.text, 'response text'); next(); } catch (err) { next(err); } }); }); it('request .get() with no data or callback', (next) => { request.get(`${uri}/echo-header/content-type`); next(); }); it('request .send() with no data only', (next) => { request.post(`${uri}/user/5/pet`).type('urlencoded').send('pet=tobi'); next(); }); it('request .send() with callback only', (next) => { request .get(`${uri}/echo-header/accept`) .set('Accept', 'foo/bar') .end((error, res) => { try { assert.equal('foo/bar', res.text); next(); } catch (err) { next(err); } }); }); it('request .accept() with json', (next) => { request .get(`${uri}/echo-header/accept`) .accept('json') .end((error, res) => { try { assert.equal('application/json', res.text); next(); } catch (err) { next(err); } }); }); it('request .accept() with application/json', (next) => { request .get(`${uri}/echo-header/accept`) .accept('application/json') .end((error, res) => { try { assert.equal('application/json', res.text); next(); } catch (err) { next(err); } }); }); it('request .accept() with xml', (next) => { request .get(`${uri}/echo-header/accept`) .accept('xml') .end((error, res) => { try { // We can't depend on mime module to be consistent with this assert(res.text == 'application/xml' || res.text == 'text/xml'); next(); } catch (err) { next(err); } }); }); it('request .accept() with application/xml', (next) => { request .get(`${uri}/echo-header/accept`) .accept('application/xml') .end((error, res) => { try { assert.equal('application/xml', res.text); next(); } catch (err) { next(err); } }); }); // FIXME: ie6 will POST rather than GET here due to data(), // but I'm not 100% sure why. Newer IEs are OK. it('request .end()', (next) => { request .put(`${uri}/echo-header/content-type`) .set('Content-Type', 'text/plain') .send('wahoo') .end((error, res) => { try { assert.equal('text/plain', res.text); next(); } catch (err) { next(err); } }); }); it('request .send()', (next) => { request .put(`${uri}/echo-header/content-type`) .set('Content-Type', 'text/plain') .send('wahoo') .end((error, res) => { try { assert.equal('text/plain', res.text); next(); } catch (err) { next(err); } }); }); it('request .set()', (next) => { request .put(`${uri}/echo-header/content-type`) .set('Content-Type', 'text/plain') .send('wahoo') .end((error, res) => { try { assert.equal('text/plain', res.text); next(); } catch (err) { next(err); } }); }); it('request .set(object)', (next) => { request .put(`${uri}/echo-header/content-type`) .set({ 'Content-Type': 'text/plain' }) .send('wahoo') .end((error, res) => { try { assert.equal('text/plain', res.text); next(); } catch (err) { next(err); } }); }); it('POST urlencoded', (next) => { request .post(`${uri}/pet`) .type('urlencoded') .send({ name: 'Manny', species: 'cat' }) .end((error, res) => { try { assert.equal('added Manny the cat', res.text); next(); } catch (err) { next(err); } }); }); it('POST json', (next) => { request .post(`${uri}/pet`) .type('json') .send({ name: 'Manny', species: 'cat' }) .end((error, res) => { try { assert.equal('added Manny the cat', res.text); next(); } catch (err) { next(err); } }); }); it('POST json array', (next) => { request .post(`${uri}/echo`) .send([1, 2, 3]) .end((error, res) => { try { assert.equal( 'application/json', res.header['content-type'].split(';')[0] ); assert.equal('[1,2,3]', res.text); next(); } catch (err) { next(err); } }); }); it('POST json default', (next) => { request .post(`${uri}/pet`) .send({ name: 'Manny', species: 'cat' }) .end((error, res) => { try { assert.equal('added Manny the cat', res.text); next(); } catch (err) { next(err); } }); }); it('POST json contentType charset', (next) => { request .post(`${uri}/echo`) .set('Content-Type', 'application/json; charset=UTF-8') .send({ data: ['data1', 'data2'] }) .end((error, res) => { try { assert.equal('{"data":["data1","data2"]}', res.text); next(); } catch (err) { next(err); } }); }); it('POST json contentType vendor', (next) => { request .post(`${uri}/echo`) .set('Content-Type', 'application/vnd.example+json') .send({ data: ['data1', 'data2'] }) .end((error, res) => { try { assert.equal('{"data":["data1","data2"]}', res.text); next(); } catch (err) { next(err); } }); }); it('POST multiple .send() calls', (next) => { request .post(`${uri}/pet`) .send({ name: 'Manny' }) .send({ species: 'cat' }) .end((error, res) => { try { assert.equal('added Manny the cat', res.text); next(); } catch (err) { next(err); } }); }); it('POST multiple .send() strings', (next) => { request .post(`${uri}/echo`) .send('user[name]=tj') .send('user[email]=tj@vision-media.ca') .end((error, res) => { try { assert.equal( 'application/x-www-form-urlencoded', res.header['content-type'].split(';')[0] ); assert.equal( res.text, 'user[name]=tj&user[email]=tj@vision-media.ca' ); next(); } catch (err) { next(err); } }); }); it('POST with no data', (next) => { request .post(`${uri}/empty-body`) .send() .end((error, res) => { try { assert.ifError(error); assert(res.noContent, 'response should be .noContent'); next(); } catch (err) { next(err); } }); }); it('GET .type', (next) => { request.get(`${uri}/pets`).end((error, res) => { try { assert.equal('application/json', res.type); next(); } catch (err) { next(err); } }); }); it('GET Content-Type params', (next) => { request.get(`${uri}/text`).end((error, res) => { try { assert.equal('utf-8', res.charset); next(); } catch (err) { next(err); } }); }); it('GET json', (next) => { request.get(`${uri}/pets`).end((error, res) => { try { assert.deepEqual(res.body, ['tobi', 'loki', 'jane']); next(); } catch (err) { next(err); } }); }); it('GET json-seq', (next) => { request .get(`${uri}/json-seq`) .buffer() .end((error, res) => { try { assert.ifError(error); assert.deepEqual(res.text, '\u001E{"id":1}\n\u001E{"id":2}\n'); next(); } catch (err) { next(err); } }); }); it('GET binary data', (next) => { request .get(`${uri}/binary-data`) .buffer() .end((error, res) => { try { assert.ifError(error); assert.deepEqual(res.body, binData); next(); } catch (err) { next(err); } }); }); it('GET x-www-form-urlencoded', (next) => { request.get(`${uri}/foo`).end((error, res) => { try { assert.deepEqual(res.body, { foo: 'bar' }); next(); } catch (err) { next(err); } }); }); it('GET shorthand', (next) => { request.get(`${uri}/foo`, (error, res) => { try { assert.equal('foo=bar', res.text); next(); } catch (err) { next(err); } }); }); it('POST shorthand', (next) => { request.post(`${uri}/user/0/pet`, { pet: 'tobi' }, (error, res) => { try { assert.equal('added pet "tobi"', res.text); next(); } catch (err) { next(err); } }); }); it('POST shorthand without callback', (next) => { request.post(`${uri}/user/0/pet`, { pet: 'tobi' }).end((error, res) => { try { assert.equal('added pet "tobi"', res.text); next(); } catch (err) { next(err); } }); }); it('GET querystring object with array', (next) => { request .get(`${uri}/querystring`) .query({ val: ['a', 'b', 'c'] }) .end((error, res) => { try { assert.deepEqual(res.body, { val: ['a', 'b', 'c'] }); next(); } catch (err) { next(err); } }); }); it('GET querystring object with array and primitives', (next) => { request .get(`${uri}/querystring`) .query({ array: ['a', 'b', 'c'], string: 'foo', number: 10 }) .end((error, res) => { try { assert.deepEqual(res.body, { array: ['a', 'b', 'c'], string: 'foo', number: 10 }); next(); } catch (err) { next(err); } }); }); it('GET querystring object with two arrays', (next) => { request .get(`${uri}/querystring`) .query({ array1: ['a', 'b', 'c'], array2: [1, 2, 3] }) .end((error, res) => { try { assert.deepEqual(res.body, { array1: ['a', 'b', 'c'], array2: [1, 2, 3] }); next(); } catch (err) { next(err); } }); }); it('GET querystring object', (next) => { request .get(`${uri}/querystring`) .query({ search: 'Manny' }) .end((error, res) => { try { assert.deepEqual(res.body, { search: 'Manny' }); next(); } catch (err) { next(err); } }); }); it('GET querystring append original', (next) => { request .get(`${uri}/querystring?search=Manny`) .query({ range: '1..5' }) .end((error, res) => { try { assert.deepEqual(res.body, { search: 'Manny', range: '1..5' }); next(); } catch (err) { next(err); } }); }); it('GET querystring multiple objects', (next) => { request .get(`${uri}/querystring`) .query({ search: 'Manny' }) .query({ range: '1..5' }) .query({ order: 'desc' }) .end((error, res) => { try { assert.deepEqual(res.body, { search: 'Manny', range: '1..5', order: 'desc' }); next(); } catch (err) { next(err); } }); }); it('GET querystring with strings', (next) => { request .get(`${uri}/querystring`) .query('search=Manny') .query('range=1..5') .query('order=desc') .end((error, res) => { try { assert.deepEqual(res.body, { search: 'Manny', range: '1..5', order: 'desc' }); next(); } catch (err) { next(err); } }); }); it('GET querystring with strings and objects', (next) => { request .get(`${uri}/querystring`) .query('search=Manny') .query({ order: 'desc', range: '1..5' }) .end((error, res) => { try { assert.deepEqual(res.body, { search: 'Manny', range: '1..5', order: 'desc' }); next(); } catch (err) { next(err); } }); }); it('GET shorthand payload goes to querystring', (next) => { request.get( `${uri}/querystring`, { foo: 'FOO', bar: 'BAR' }, (error, res) => { try { assert.deepEqual(res.body, { foo: 'FOO', bar: 'BAR' }); next(); } catch (err) { next(err); } } ); }); it('HEAD shorthand payload goes to querystring', (next) => { request.head( `${uri}/querystring-in-header`, { foo: 'FOO', bar: 'BAR' }, (error, res) => { try { assert.deepEqual(JSON.parse(res.headers.query), { foo: 'FOO', bar: 'BAR' }); next(); } catch (err) { next(err); } } ); }); it('request(method, url)', (next) => { request('GET', `${uri}/foo`).end((error, res) => { try { assert.equal('bar', res.body.foo); next(); } catch (err) { next(err); } }); }); it('request(url)', (next) => { request(`${uri}/foo`).end((error, res) => { try { assert.equal('bar', res.body.foo); next(); } catch (err) { next(err); } }); }); it('request(url, fn)', (next) => { request(`${uri}/foo`, (error, res) => { try { assert.equal('bar', res.body.foo); next(); } catch (err) { next(err); } }); }); it('req.timeout(ms)', (next) => { const request_ = request.get(`${uri}/delay/3000`).timeout(1000); request_.end((error, res) => { try { assert(error, 'error missing'); assert.equal(1000, error.timeout, 'err.timeout missing'); assert.equal( 'Timeout of 1000ms exceeded', error.message, 'err.message incorrect' ); assert.equal(null, res); assert(request_.timedout, true); next(); } catch (err) { next(err); } }); }); it('req.timeout(ms) with redirect', (next) => { const request_ = request.get(`${uri}/delay/const`).timeout(1000); request_.end((error, res) => { try { assert(error, 'error missing'); assert.equal(1000, error.timeout, 'err.timeout missing'); assert.equal( 'Timeout of 1000ms exceeded', error.message, 'err.message incorrect' ); assert.equal(null, res); assert(request_.timedout, true); next(); } catch (err) { next(err); } }); }); it('request event', (next) => { request .get(`${uri}/foo`) .on('request', (request_) => { try { assert.equal(`${uri}/foo`, request_.url); next(); } catch (err) { next(err); } }) .end(); }); it('response event', (next) => { request .get(`${uri}/foo`) .on('response', (res) => { try { assert.equal('bar', res.body.foo); next(); } catch (err) { next(err); } }) .end(); }); it('response should set statusCode', (next) => { request.get(`${uri}/ok`, (error, res) => { try { assert.strictEqual(res.statusCode, 200); next(); } catch (err) { next(err); } }); }); it('req.toJSON()', (next) => { request.get(`${uri}/ok`).end((error, res) => { try { const index = (res.request || res.req).toJSON(); for (const property of ['url', 'method', 'data', 'headers']) { assert(index.hasOwnProperty(property)); } next(); } catch (err) { next(err); } }); }); }); superagent-8.0.5/test/retry.js000066400000000000000000000170471434246777100164130ustar00rootroot00000000000000const assert = require('assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); function uniqid() { return Math.random() * 10_000_000; } describe('.retry(count)', function () { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); this.timeout(15_000); it('should not retry if passed "0"', (done) => { request .get(`${base}/error`) .retry(0) .end((error, res) => { try { assert(error, 'expected an error'); assert.equal( undefined, error.retries, 'expected an error without .retries' ); assert.equal(500, error.status, 'expected an error status of 500'); done(); } catch (err) { done(err); } }); }); it('should not retry if passed an invalid number', (done) => { request .get(`${base}/error`) .retry(-2) .end((error, res) => { try { assert(error, 'expected an error'); assert.equal( undefined, error.retries, 'expected an error without .retries' ); assert.equal(500, error.status, 'expected an error status of 500'); done(); } catch (err) { done(err); } }); }); it('should not retry if passed undefined', (done) => { request .get(`${base}/error`) .retry(undefined) .end((error, res) => { try { assert(error, 'expected an error'); assert.equal( undefined, error.retries, 'expected an error without .retries' ); assert.equal(500, error.status, 'expected an error status of 500'); done(); } catch (err) { done(err); } }); }); it('should handle server error after repeat attempt', (done) => { request .get(`${base}/error`) .retry(2) .end((error, res) => { try { assert(error, 'expected an error'); assert.equal(2, error.retries, 'expected an error with .retries'); assert.equal(500, error.status, 'expected an error status of 500'); done(); } catch (err) { done(err); } }); }); it('should retry if passed nothing', (done) => { request .get(`${base}/error`) .retry() .end((error, res) => { try { assert(error, 'expected an error'); assert.equal(1, error.retries, 'expected an error with .retries'); assert.equal(500, error.status, 'expected an error status of 500'); done(); } catch (err) { done(err); } }); }); it('should retry if passed "true"', (done) => { request .get(`${base}/error`) .retry(true) .end((error, res) => { try { assert(error, 'expected an error'); assert.equal(1, error.retries, 'expected an error with .retries'); assert.equal(500, error.status, 'expected an error status of 500'); done(); } catch (err) { done(err); } }); }); it('should handle successful request after repeat attempt from server error', (done) => { request .get(`${base}/error/ok/${uniqid()}`) .query({ qs: 'present' }) .retry(2) .end((error, res) => { try { assert.ifError(error); assert(res.ok, 'response should be ok'); assert(res.text, 'res.text'); done(); } catch (err) { done(err); } }); }); it('should handle server timeout error after repeat attempt', (done) => { request .get(`${base}/delay/400`) .timeout(200) .retry(2) .end((error, res) => { try { assert(error, 'expected an error'); assert.equal(2, error.retries, 'expected an error with .retries'); assert.equal( 'number', typeof error.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', error.code, 'expected abort error code'); done(); } catch (err) { done(err); } }); }); it('should handle successful request after repeat attempt from server timeout', (done) => { const url = `/delay/1200/ok/${uniqid()}?built=in`; request .get(base + url) .query('string=ified') .query({ json: 'ed' }) .timeout(600) .retry(2) .end((error, res) => { try { assert.ifError(error); assert(res.ok, 'response should be ok'); assert.equal(res.text, `ok = ${url}&string=ified&json=ed`); done(); } catch (err) { done(err); } }); }); it('should handle successful request after repeat attempt from server timeout when using .then(fulfill, reject)', (done) => { const url = `/delay/1200/ok/${uniqid()}?built=in`; request .get(base + url) .query('string=ified') .query({ json: 'ed' }) .timeout(600) .retry(1) .then((res, error) => { try { assert.ifError(error); assert(res.ok, 'response should be ok'); assert.equal(res.text, `ok = ${url}&string=ified&json=ed`); done(); } catch (err) { done(err); } }); }); it('should correctly abort a retry attempt', (done) => { let aborted = false; const request_ = request.get(`${base}/delay/400`).timeout(200).retry(2); request_.end((error, res) => { try { assert(false, 'should not complete the request'); } catch (err) { done(err); } }); request_.on('abort', () => { aborted = true; }); setTimeout(() => { request_.abort(); setTimeout(() => { try { assert(aborted, 'should be aborted'); done(); } catch (err) { done(err); } }, 150); }, 150); }); it('should correctly retain header fields', (done) => { request .get(`${base}/error/ok/${uniqid()}`) .query({ qs: 'present' }) .retry(2) .set('X-Foo', 'bar') .end((error, res) => { try { assert.ifError(error); assert(res.body); res.body.should.have.property('x-foo', 'bar'); done(); } catch (err) { done(err); } }); }); it('should not retry on 4xx responses', (done) => { request .get(`${base}/bad-request`) .retry(2) .end((error, res) => { try { assert(error, 'expected an error'); assert.equal(0, error.retries, 'expected an error with 0 .retries'); assert.equal(400, error.status, 'expected an error status of 400'); done(); } catch (err) { done(err); } }); }); it('should execute callback on retry if passed', (done) => { let callbackCallCount = 0; function retryCallback(request) { callbackCallCount++; } request .get(`${base}/error`) .retry(2, retryCallback) .end((error, res) => { try { assert(error, 'expected an error'); assert.equal(2, error.retries, 'expected an error with .retries'); assert.equal(500, error.status, 'expected an error status of 500'); assert.equal( 2, callbackCallCount, 'expected the callback to be called on each retry' ); done(); } catch (err) { done(err); } }); }); }); superagent-8.0.5/test/support/000077500000000000000000000000001434246777100164135ustar00rootroot00000000000000superagent-8.0.5/test/support/blank.js000066400000000000000000000000001434246777100200260ustar00rootroot00000000000000superagent-8.0.5/test/support/client.js000066400000000000000000000002001434246777100202170ustar00rootroot00000000000000const request = require('../..'); if (process.env.HTTP2_TEST) { request.http2 = true; } exports = module.exports = request; superagent-8.0.5/test/support/express/000077500000000000000000000000001434246777100201045ustar00rootroot00000000000000superagent-8.0.5/test/support/express/index.js000066400000000000000000000015311434246777100215510ustar00rootroot00000000000000const process = require('process'); const express = require('express'); let http2Request; let http2Res; if (process.env.HTTP2_TEST) { const http2 = require('http2'); const requestDecorator = require('./requestDecorator'); const resDecorator = require('./responseDecorator'); http2Request = requestDecorator( Object.create(http2.Http2ServerRequest.prototype) ); http2Res = resDecorator(Object.create(http2.Http2ServerResponse.prototype)); } function createApp() { const app = express(); if (process.env.HTTP2_TEST) { app.request = Object.create(http2Request, { app: { configurable: true, enumerable: true, writable: true, value: app } }); app.response = Object.create(http2Res, { app: { configurable: true, enumerable: true, writable: true, value: app } }); } return app; } module.exports = createApp; superagent-8.0.5/test/support/express/requestDecorator.js000066400000000000000000000301741434246777100240020ustar00rootroot00000000000000/*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ 'use strict'; /** * Module dependencies. * @private */ const { isIP } = require('net'); const accepts = require('accepts'); const typeis = require('type-is'); const fresh = require('fresh'); const parseRange = require('range-parser'); const parse = require('parseurl'); const proxyaddr = require('proxy-addr'); /** * Request prototype. * @public */ /** * Module exports. * @public */ module.exports = setMethods; function setMethods(request) { /** * Return request header. * * The `Referrer` header field is special-cased, * both `Referrer` and `Referer` are interchangeable. * * Examples: * * req.get('Content-Type'); * // => "text/plain" * * req.get('content-type'); * // => "text/plain" * * req.get('Something'); * // => undefined * * Aliased as `req.header()`. * * @param {String} name * @return {String} * @public */ request.get = request.header = function header(name) { if (!name) { throw new TypeError('name argument is required to req.get'); } if (typeof name !== 'string') { throw new TypeError('name must be a string to req.get'); } const lc = name.toLowerCase(); switch (lc) { case 'referer': case 'referrer': return this.headers.referrer || this.headers.referer; default: return this.headers[lc]; } }; /** * To do: update docs. * * Check if the given `type(s)` is acceptable, returning * the best match when true, otherwise `undefined`, in which * case you should respond with 406 "Not Acceptable". * * The `type` value may be a single MIME type string * such as "application/json", an extension name * such as "json", a comma-delimited list such as "json, html, text/plain", * an argument list such as `"json", "html", "text/plain"`, * or an array `["json", "html", "text/plain"]`. When a list * or array is given, the _best_ match, if any is returned. * * Examples: * * // Accept: text/html * req.accepts('html'); * // => "html" * * // Accept: text/*, application/json * req.accepts('html'); * // => "html" * req.accepts('text/html'); * // => "text/html" * req.accepts('json, text'); * // => "json" * req.accepts('application/json'); * // => "application/json" * * // Accept: text/*, application/json * req.accepts('image/png'); * req.accepts('png'); * // => undefined * * // Accept: text/*;q=.5, application/json * req.accepts(['html', 'json']); * req.accepts('html', 'json'); * req.accepts('html, json'); * // => "json" * * @param {String|Array} type(s) * @return {String|Array|Boolean} * @public */ request.accepts = function () { const accept = accepts(this); return accept.types.apply(accept, arguments); }; /** * Check if the given `encoding`s are accepted. * * @param {String} ...encoding * @return {String|Array} * @public */ request.acceptsEncodings = function () { const accept = accepts(this); return accept.encodings.apply(accept, arguments); }; /** * Check if the given `charset`s are acceptable, * otherwise you should respond with 406 "Not Acceptable". * * @param {String} ...charset * @return {String|Array} * @public */ request.acceptsCharsets = function () { const accept = accepts(this); return accept.charsets.apply(accept, arguments); }; /** * Check if the given `lang`s are acceptable, * otherwise you should respond with 406 "Not Acceptable". * * @param {String} ...lang * @return {String|Array} * @public */ request.acceptsLanguages = function () { const accept = accepts(this); return accept.languages.apply(accept, arguments); }; /** * Parse Range header field, capping to the given `size`. * * Unspecified ranges such as "0-" require knowledge of your resource length. In * the case of a byte range this is of course the total number of bytes. If the * Range header field is not given `undefined` is returned, `-1` when unsatisfiable, * and `-2` when syntactically invalid. * * When ranges are returned, the array has a "type" property which is the type of * range that is required (most commonly, "bytes"). Each array element is an object * with a "start" and "end" property for the portion of the range. * * The "combine" option can be set to `true` and overlapping & adjacent ranges * will be combined into a single range. * * NOTE: remember that ranges are inclusive, so for example "Range: users=0-3" * should respond with 4 users when available, not 3. * * @param {number} size * @param {object} [options] * @param {boolean} [options.combine=false] * @return {number|array} * @public */ request.range = function range(size, options) { const range = this.get('Range'); if (!range) return; return parseRange(size, range, options); }; /** * Parse the query string of `req.url`. * * This uses the "query parser" setting to parse the raw * string into an object. * * @return {String} * @api public */ defineGetter(request, 'query', function query() { const queryparse = this.app.get('query parser fn'); if (!queryparse) { // parsing is disabled return Object.create(null); } const querystring = parse(this).query; return queryparse(querystring); }); /** * Check if the incoming request contains the "Content-Type" * header field, and it contains the give mime `type`. * * Examples: * * // With Content-Type: text/html; charset=utf-8 * req.is('html'); * req.is('text/html'); * req.is('text/*'); * // => true * * // When Content-Type is application/json * req.is('json'); * req.is('application/json'); * req.is('application/*'); * // => true * * req.is('html'); * // => false * * @param {String|Array} types... * @return {String|false|null} * @public */ request.is = function is(types) { let array = types; // support flattened arguments if (!Array.isArray(types)) { array = Array.from({ length: arguments.length }); for (let i = 0; i < array.length; i++) { array[i] = arguments[i]; } } return typeis(this, array); }; /** * Return the protocol string "http" or "https" * when requested with TLS. When the "trust proxy" * setting trusts the socket address, the * "X-Forwarded-Proto" header field will be trusted * and used if present. * * If you're running behind a reverse proxy that * supplies https for you this may be enabled. * * @return {String} * @public */ defineGetter(request, 'protocol', function protocol() { const proto = this.connection.encrypted ? 'https' : 'http'; const trust = this.app.get('trust proxy fn'); if (!trust(this.connection.remoteAddress, 0)) { return proto; } // Note: X-Forwarded-Proto is normally only ever a // single value, but this is to be safe. const header = this.get('X-Forwarded-Proto') || proto; const index = header.indexOf(','); return index !== -1 ? header.slice(0, index).trim() : header.trim(); }); /** * Short-hand for: * * req.protocol === 'https' * * @return {Boolean} * @public */ defineGetter(request, 'secure', function secure() { return this.protocol === 'https'; }); /** * Return the remote address from the trusted proxy. * * The is the remote address on the socket unless * "trust proxy" is set. * * @return {String} * @public */ defineGetter(request, 'ip', function ip() { const trust = this.app.get('trust proxy fn'); return proxyaddr(this, trust); }); /** * When "trust proxy" is set, trusted proxy addresses + client. * * For example if the value were "client, proxy1, proxy2" * you would receive the array `["client", "proxy1", "proxy2"]` * where "proxy2" is the furthest down-stream and "proxy1" and * "proxy2" were trusted. * * @return {Array} * @public */ defineGetter(request, 'ips', function ips() { const trust = this.app.get('trust proxy fn'); const addrs = proxyaddr.all(this, trust); // reverse the order (to farthest -> closest) // and remove socket address addrs.reverse().pop(); return addrs; }); /** * Return subdomains as an array. * * Subdomains are the dot-separated parts of the host before the main domain of * the app. By default, the domain of the app is assumed to be the last two * parts of the host. This can be changed by setting "subdomain offset". * * For example, if the domain is "tobi.ferrets.example.com": * If "subdomain offset" is not set, req.subdomains is `["ferrets", "tobi"]`. * If "subdomain offset" is 3, req.subdomains is `["tobi"]`. * * @return {Array} * @public */ defineGetter(request, 'subdomains', function subdomains() { const { hostname } = this; if (!hostname) return []; const offset = this.app.get('subdomain offset'); const subdomains = !isIP(hostname) ? hostname.split('.').reverse() : [hostname]; return subdomains.slice(offset); }); /** * Short-hand for `url.parse(req.url).pathname`. * * @return {String} * @public */ defineGetter(request, 'path', function path() { return parse(this).pathname; }); /** * Parse the "Host" header field to a host. * * When the "trust proxy" setting trusts the socket * address, the "X-Forwarded-Host" header field will * be trusted. * * @return {String} * @public */ defineGetter(request, 'host', function host() { const trust = this.app.get('trust proxy fn'); let value = this.get('X-Forwarded-Host'); if (!value || !trust(this.connection.remoteAddress, 0)) { value = this.get('Host'); } return value || undefined; }); /** * Parse the "Host" header field to a hostname. * * When the "trust proxy" setting trusts the socket * address, the "X-Forwarded-Host" header field will * be trusted. * * @return {String} * @api public */ defineGetter(request, 'hostname', function hostname() { const { host } = this; if (!host) return; // IPv6 literal support const offset = host[0] === '[' ? host.indexOf(']') + 1 : 0; const index = host.indexOf(':', offset); return index !== -1 ? host.slice(0, index) : host; }); /** * Check if the request is fresh, aka * Last-Modified and/or the ETag * still match. * * @return {Boolean} * @public */ defineGetter(request, 'fresh', function () { const { method } = this; const { res } = this; const status = res.statusCode; // GET or HEAD for weak freshness validation only if (method !== 'GET' && method !== 'HEAD') return false; // 2xx or 304 as per rfc2616 14.26 if ((status >= 200 && status < 300) || status === 304) { return fresh(this.headers, { etag: res.get('ETag'), 'last-modified': res.get('Last-Modified') }); } return false; }); /** * Check if the request is stale, aka * "Last-Modified" and / or the "ETag" for the * resource has changed. * * @return {Boolean} * @public */ defineGetter(request, 'stale', function stale() { return !this.fresh; }); /** * Check if the request was an _XMLHttpRequest_. * * @return {Boolean} * @public */ defineGetter(request, 'xhr', function xhr() { const value = this.get('X-Requested-With') || ''; return value.toLowerCase() === 'xmlhttprequest'; }); return request; } /** * Helper function for creating a getter on an object. * * @param {Object} obj * @param {String} name * @param {Function} getter * @private */ function defineGetter(object, name, getter) { Object.defineProperty(object, name, { configurable: true, enumerable: true, get: getter }); } superagent-8.0.5/test/support/express/responseDecorator.js000066400000000000000000000601571434246777100241540ustar00rootroot00000000000000/*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ 'use strict'; /** * Module dependencies. * @private */ const path = require('path'); const { Buffer } = require('safe-buffer'); const contentDisposition = require('content-disposition'); const encodeUrl = require('encodeurl'); const escapeHtml = require('escape-html'); const onFinished = require('on-finished'); const pathIsAbsolute = require('path-is-absolute'); const statuses = require('statuses'); const merge = require('utils-merge'); const { sign } = require('cookie-signature'); const cookie = require('cookie'); const send = require('send'); const { normalizeType } = require('./utils'); const { normalizeTypes } = require('./utils'); const { setCharset } = require('./utils'); const { extname } = path; const { mime } = send; const { resolve } = path; const vary = require('vary'); /** * Module exports. * @public */ module.exports = setMethods; function setMethods(res) { /** * Module variables. * @private */ const charsetRegExp = /;\s*charset\s*=/; /** * Set status `code`. * * @param {Number} code * @return {ServerResponse} * @public */ res.status = function status(code) { this.statusCode = code; return this; }; /** * Set Link header field with the given `links`. * * Examples: * * res.links({ * next: 'http://api.example.com/users?page=2', * last: 'http://api.example.com/users?page=5' * }); * * @param {Object} links * @return {ServerResponse} * @public */ res.links = function (links) { let link = this.get('Link') || ''; if (link) link += ', '; return this.set( 'Link', link + Object.keys(links) .map((rel) => { return '<' + links[rel] + '>; rel="' + rel + '"'; }) .join(', ') ); }; /** * Send a response. * * Examples: * * res.send(Buffer.from('wahoo')); * res.send({ some: 'json' }); * res.send('

some html

'); * * @param {string|number|boolean|object|Buffer} body * @public */ res.send = function send(body) { let chunk = body; let encoding; const { req } = this; let type; // settings const { app } = this; switch (typeof chunk) { // string defaulting to html case 'string': if (!this.get('Content-Type')) { this.type('html'); } break; case 'boolean': case 'number': case 'object': if (chunk === null) { chunk = ''; } else if (Buffer.isBuffer(chunk)) { if (!this.get('Content-Type')) { this.type('bin'); } } else { return this.json(chunk); } break; } // write strings in utf-8 if (typeof chunk === 'string') { encoding = 'utf8'; type = this.get('Content-Type'); // reflect this in content-type if (typeof type === 'string') { this.set('Content-Type', setCharset(type, 'utf-8')); } } // determine if ETag should be generated const etagFn = app.get('etag fn'); const generateETag = !this.get('ETag') && typeof etagFn === 'function'; // populate Content-Length let length_; if (chunk !== undefined) { if (Buffer.isBuffer(chunk)) { // get length of Buffer length_ = chunk.length; } else if (!generateETag && chunk.length < 1000) { // just calculate length when no ETag + small chunk length_ = Buffer.byteLength(chunk, encoding); } else { // convert chunk to Buffer and calculate chunk = Buffer.from(chunk, encoding); encoding = undefined; length_ = chunk.length; } this.set('Content-Length', length_); } // populate ETag let etag; if ( generateETag && length_ !== undefined && (etag = etagFn(chunk, encoding)) ) { this.set('ETag', etag); } // freshness if (req.fresh) this.statusCode = 304; // strip irrelevant headers if (this.statusCode === 204 || this.statusCode === 304) { this.removeHeader('Content-Type'); this.removeHeader('Content-Length'); this.removeHeader('Transfer-Encoding'); chunk = ''; } if (req.method === 'HEAD') { // skip body for HEAD this.end(); } else { // respond this.end(chunk, encoding); } return this; }; /** * Send JSON response. * * Examples: * * res.json(null); * res.json({ user: 'tj' }); * * @param {string|number|boolean|object} obj * @public */ res.json = function json(object) { // settings const { app } = this; const escape = app.get('json escape'); const replacer = app.get('json replacer'); const spaces = app.get('json spaces'); const body = stringify(object, replacer, spaces, escape); // content-type if (!this.get('Content-Type')) { this.set('Content-Type', 'application/json'); } return this.send(body); }; /** * Send JSON response with JSONP callback support. * * Examples: * * res.jsonp(null); * res.jsonp({ user: 'tj' }); * * @param {string|number|boolean|object} obj * @public */ res.jsonp = function jsonp(object) { // settings const { app } = this; const escape = app.get('json escape'); const replacer = app.get('json replacer'); const spaces = app.get('json spaces'); let body = stringify(object, replacer, spaces, escape); let callback = this.req.query[app.get('jsonp callback name')]; // content-type if (!this.get('Content-Type')) { this.set('X-Content-Type-Options', 'nosniff'); this.set('Content-Type', 'application/json'); } // fixup callback if (Array.isArray(callback)) { callback = callback[0]; } // jsonp if (typeof callback === 'string' && callback.length > 0) { this.set('X-Content-Type-Options', 'nosniff'); this.set('Content-Type', 'text/javascript'); // restrict callback charset callback = callback.replace(/[^[\]\w$.]/g, ''); // replace chars not allowed in JavaScript that are in JSON body = body.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); // the /**/ is a specific security mitigation for "Rosetta Flash JSONP abuse" // the typeof check is just to reduce client error noise body = '/**/ typeof ' + callback + " === 'function' && " + callback + '(' + body + ');'; } return this.send(body); }; /** * Send given HTTP status code. * * Sets the response status to `statusCode` and the body of the * response to the standard description from node's http.STATUS_CODES * or the statusCode number if no description. * * Examples: * * res.sendStatus(200); * * @param {number} statusCode * @public */ res.sendStatus = function sendStatus(statusCode) { const body = statuses(statusCode) || String(statusCode); this.statusCode = statusCode; this.type('txt'); return this.send(body); }; /** * Transfer the file at the given `path`. * * Automatically sets the _Content-Type_ response header field. * The callback `callback(err)` is invoked when the transfer is complete * or when an error occurs. Be sure to check `res.sentHeader` * if you wish to attempt responding, as the header and some data * may have already been transferred. * * Options: * * - `maxAge` defaulting to 0 (can be string converted by `ms`) * - `root` root directory for relative filenames * - `headers` object of headers to serve with file * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them * * Other options are passed along to `send`. * * Examples: * * The following example illustrates how `res.sendFile()` may * be used as an alternative for the `static()` middleware for * dynamic situations. The code backing `res.sendFile()` is actually * the same code, so HTTP cache support etc is identical. * * app.get('/user/:uid/photos/:file', function(req, res){ * var uid = req.params.uid * , file = req.params.file; * * req.user.mayViewFilesFrom(uid, function(yes){ * if (yes) { * res.sendFile('/uploads/' + uid + '/' + file); * } else { * res.send(403, 'Sorry! you cant see that.'); * } * }); * }); * * @public */ res.sendFile = function sendFile(path, options, callback) { let done = callback; const { req } = this; const res = this; const { next } = req; let options_ = options || {}; if (!path) { throw new TypeError('path argument is required to res.sendFile'); } // support function as second arg if (typeof options === 'function') { done = options; options_ = {}; } if (!options_.root && !pathIsAbsolute(path)) { throw new TypeError( 'path must be absolute or specify root to res.sendFile' ); } // create file stream const pathname = encodeURI(path); const file = send(req, pathname, options_); // transfer sendfile(res, file, options_, (error) => { if (done) return done(error); if (error && error.code === 'EISDIR') return next(); // next() all but write errors if (error && error.code !== 'ECONNABORTED' && error.syscall !== 'write') { next(error); } }); }; /** * Transfer the file at the given `path` as an attachment. * * Optionally providing an alternate attachment `filename`, * and optional callback `callback(err)`. The callback is invoked * when the data transfer is complete, or when an error has * ocurred. Be sure to check `res.headersSent` if you plan to respond. * * Optionally providing an `options` object to use with `res.sendFile()`. * This function will set the `Content-Disposition` header, overriding * any `Content-Disposition` header passed as header options in order * to set the attachment and filename. * * This method uses `res.sendFile()`. * * @public */ res.download = function download(path, filename, options, callback) { let done = callback; let name = filename; let options_ = options || null; // support function as second or third arg if (typeof filename === 'function') { done = filename; name = null; options_ = null; } else if (typeof options === 'function') { done = options; options_ = null; } // set Content-Disposition when file is sent const headers = { 'Content-Disposition': contentDisposition(name || path) }; // merge user-provided headers if (options_ && options_.headers) { const keys = Object.keys(options_.headers); for (const key of keys) { if (key.toLowerCase() !== 'content-disposition') { headers[key] = options_.headers[key]; } } } // merge user-provided options options_ = Object.create(options_); options_.headers = headers; // Resolve the full path for sendFile const fullPath = resolve(path); // send file return this.sendFile(fullPath, options_, done); }; /** * Set _Content-Type_ response header with `type` through `mime.lookup()` * when it does not contain "/", or set the Content-Type to `type` otherwise. * * Examples: * * res.type('.html'); * res.type('html'); * res.type('json'); * res.type('application/json'); * res.type('png'); * * @param {String} type * @return {ServerResponse} for chaining * @public */ res.contentType = res.type = function contentType(type) { const ct = !type.includes('/') ? mime.lookup(type) : type; return this.set('Content-Type', ct); }; /** * Respond to the Acceptable formats using an `obj` * of mime-type callbacks. * * This method uses `req.accepted`, an array of * acceptable types ordered by their quality values. * When "Accept" is not present the _first_ callback * is invoked, otherwise the first match is used. When * no match is performed the server responds with * 406 "Not Acceptable". * * Content-Type is set for you, however if you choose * you may alter this within the callback using `res.type()` * or `res.set('Content-Type', ...)`. * * res.format({ * 'text/plain': function(){ * res.send('hey'); * }, * * 'text/html': function(){ * res.send('

hey

'); * }, * * 'appliation/json': function(){ * res.send({ message: 'hey' }); * } * }); * * In addition to canonicalized MIME types you may * also use extnames mapped to these types: * * res.format({ * text: function(){ * res.send('hey'); * }, * * html: function(){ * res.send('

hey

'); * }, * * json: function(){ * res.send({ message: 'hey' }); * } * }); * * By default Express passes an `Error` * with a `.status` of 406 to `next(err)` * if a match is not made. If you provide * a `.default` callback it will be invoked * instead. * * @param {Object} obj * @return {ServerResponse} for chaining * @public */ res.format = function (object) { const { req } = this; const { next } = req; const fn = object.default; if (fn) delete object.default; const keys = Object.keys(object); const key = keys.length > 0 ? req.accepts(keys) : false; this.vary('Accept'); if (key) { this.set('Content-Type', normalizeType(key).value); object[key](req, this, next); } else if (fn) { fn(); } else { const error = new Error('Not Acceptable'); error.status = error.statusCode = 406; error.types = normalizeTypes(keys).map((o) => { return o.value; }); next(error); } return this; }; /** * Set _Content-Disposition_ header to _attachment_ with optional `filename`. * * @param {String} filename * @return {ServerResponse} * @public */ res.attachment = function attachment(filename) { if (filename) { this.type(extname(filename)); } this.set('Content-Disposition', contentDisposition(filename)); return this; }; /** * Append additional header `field` with value `val`. * * Example: * * res.append('Link', ['', '']); * res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly'); * res.append('Warning', '199 Miscellaneous warning'); * * @param {String} field * @param {String|Array} val * @return {ServerResponse} for chaining * @public */ res.append = function append(field, value_) { const previous = this.get(field); let value = value_; if (previous) { // concat the new and prev vals value = Array.isArray(previous) ? previous.concat(value_) : Array.isArray(value_) ? [previous].concat(value_) : [previous, value_]; } return this.set(field, value); }; /** * Set header `field` to `val`, or pass * an object of header fields. * * Examples: * * res.set('Foo', ['bar', 'baz']); * res.set('Accept', 'application/json'); * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' }); * * Aliased as `res.header()`. * * @param {String|Object} field * @param {String|Array} val * @return {ServerResponse} for chaining * @public */ res.set = res.header = function header(field, value_) { if (arguments.length === 2) { let value = Array.isArray(value_) ? value_.map(String) : String(value_); // add charset to content-type if (field.toLowerCase() === 'content-type') { if (Array.isArray(value)) { throw new TypeError('Content-Type cannot be set to an Array'); } if (!charsetRegExp.test(value)) { const charset = mime.charsets.lookup(value.split(';')[0]); if (charset) value += '; charset=' + charset.toLowerCase(); } } this.setHeader(field, value); } else { for (const key in field) { this.set(key, field[key]); } } return this; }; /** * Get value for header `field`. * * @param {String} field * @return {String} * @public */ res.get = function (field) { return this.getHeader(field); }; /** * Clear cookie `name`. * * @param {String} name * @param {Object} [options] * @return {ServerResponse} for chaining * @public */ res.clearCookie = function clearCookie(name, options) { const options_ = merge({ expires: new Date(1), path: '/' }, options); return this.cookie(name, '', options_); }; /** * Set cookie `name` to `value`, with the given `options`. * * Options: * * - `maxAge` max-age in milliseconds, converted to `expires` * - `signed` sign the cookie * - `path` defaults to "/" * * Examples: * * // "Remember Me" for 15 minutes * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); * * // save as above * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) * * @param {String} name * @param {String|Object} value * @param {Object} [options] * @return {ServerResponse} for chaining * @public */ res.cookie = function (name, value, options) { const options_ = merge({}, options); const { secret } = this.req; const { signed } = options_; if (signed && !secret) { throw new Error('cookieParser("secret") required for signed cookies'); } let value_ = typeof value === 'object' ? 'j:' + JSON.stringify(value) : String(value); if (signed) { value_ = 's:' + sign(value_, secret); } if ('maxAge' in options_) { options_.expires = new Date(Date.now() + options_.maxAge); options_.maxAge /= 1000; } if (options_.path == null) { options_.path = '/'; } this.append('Set-Cookie', cookie.serialize(name, String(value_), options_)); return this; }; /** * Set the location header to `url`. * * The given `url` can also be "back", which redirects * to the _Referrer_ or _Referer_ headers or "/". * * Examples: * * res.location('/foo/bar').; * res.location('http://example.com'); * res.location('../login'); * * @param {String} url * @return {ServerResponse} for chaining * @public */ res.location = function location(url) { let loc = url; // "back" is an alias for the referrer if (url === 'back') { loc = this.req.get('Referrer') || '/'; } // set location return this.set('Location', encodeUrl(loc)); }; /** * Redirect to the given `url` with optional response `status` * defaulting to 302. * * The resulting `url` is determined by `res.location()`, so * it will play nicely with mounted apps, relative paths, * `"back"` etc. * * Examples: * * res.redirect('/foo/bar'); * res.redirect('http://example.com'); * res.redirect(301, 'http://example.com'); * res.redirect('../login'); // /blog/post/1 -> /blog/login * * @public */ res.redirect = function redirect(url) { let address = url; let body; let status = 302; // allow status / url if (arguments.length === 2) { status = arguments[0]; address = arguments[1]; } // Set location header address = this.location(address).get('Location'); // Support text/{plain,html} by default this.format({ text() { body = statuses(status) + '. Redirecting to ' + address; }, html() { const u = escapeHtml(address); body = '
'; }, default() { body = ''; } }); // Respond this.statusCode = status; this.set('Content-Length', Buffer.byteLength(body)); if (this.req.method === 'HEAD') { this.end(); } else { this.end(body); } }; /** * Add `field` to Vary. If already present in the Vary set, then * this call is simply ignored. * * @param {Array|String} field * @return {ServerResponse} for chaining * @public */ res.vary = function (field) { vary(this, field); return this; }; /** * Render `view` with the given `options` and optional callback `fn`. * When a callback function is given a response will _not_ be made * automatically, otherwise a response of _200_ and _text/html_ is given. * * Options: * * - `cache` boolean hinting to the engine it should cache * - `filename` filename of the view being rendered * * @public */ res.render = function render(view, options, callback) { const { app } = this.req; let done = callback; let options_ = options || {}; const { req } = this; const self = this; // support callback function as second arg if (typeof options === 'function') { done = options; options_ = {}; } // merge res.locals options_._locals = self.locals; // default callback to respond done = done || function (error, string_) { if (error) return req.next(error); self.send(string_); }; // render app.render(view, options_, done); }; // pipe the send file stream function sendfile(res, file, options, callback) { let done = false; let streaming; // request aborted function onaborted() { if (done) return; done = true; const error = new Error('Request aborted'); error.code = 'ECONNABORTED'; callback(error); } // directory function ondirectory() { if (done) return; done = true; const error = new Error('EISDIR, read'); error.code = 'EISDIR'; callback(error); } // errors function onerror(error) { if (done) return; done = true; callback(error); } // ended function onend() { if (done) return; done = true; callback(); } // file function onfile() { streaming = false; } // finished function onfinish(error) { if (error && error.code === 'ECONNRESET') return onaborted(); if (error) return onerror(error); if (done) return; setImmediate(() => { if (streaming !== false && !done) { onaborted(); return; } if (done) return; done = true; callback(); }); } // streaming function onstream() { streaming = true; } file.on('directory', ondirectory); file.on('end', onend); file.on('error', onerror); file.on('file', onfile); file.on('stream', onstream); if (options.headers) { // set headers on successful transfer file.on('headers', function headers(res) { const object = options.headers; const keys = Object.keys(object); for (const k of keys) { res.setHeader(k, object[k]); } }); } // pipe file.pipe(res); onFinished(res, onfinish); } return res; } /** * Stringify JSON, like JSON.stringify, but v8 optimized, with the * ability to escape characters that can trigger HTML sniffing. * * @param {*} value * @param {function} replaces * @param {number} spaces * @param {boolean} escape * @returns {string} * @private */ function stringify(value, replacer, spaces, escape) { // v8 checks arguments.length for optimizing simple call // https://bugs.chromium.org/p/v8/issues/detail?id=4730 let json = replacer || spaces ? JSON.stringify(value, replacer, spaces) : JSON.stringify(value); if (escape) { json = json.replace(/[<>&]/g, (c) => { switch (c.charCodeAt(0)) { case 0x3c: return '\\u003c'; case 0x3e: return '\\u003e'; case 0x26: return '\\u0026'; default: return c; } }); } return json; } superagent-8.0.5/test/support/express/utils.js000066400000000000000000000120601434246777100216010ustar00rootroot00000000000000/*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ 'use strict'; /** * Module dependencies. * @api private */ const querystring = require('querystring'); const { Buffer } = require('safe-buffer'); const contentType = require('content-type'); const { mime } = require('send'); const etag = require('etag'); const proxyaddr = require('proxy-addr'); const qs = require('qs'); let isHttp2Supported = true; /** * Test for http2 support * @api private */ try { require('http2'); } catch { isHttp2Supported = false; } /** * Return strong ETag for `body`. * * @param {String|Buffer} body * @param {String} [encoding] * @return {String} * @api private */ exports.etag = createETagGenerator({ weak: false }); /** * Return weak ETag for `body`. * * @param {String|Buffer} body * @param {String} [encoding] * @return {String} * @api private */ exports.wetag = createETagGenerator({ weak: true }); /** * Normalize the given `type`, for example "html" becomes "text/html". * * @param {String} type * @return {Object} * @api private */ exports.normalizeType = function (type) { return ~type.indexOf('/') ? acceptParameters(type) : { value: mime.lookup(type), params: {} }; }; /** * Normalize `types`, for example "html" becomes "text/html". * * @param {Array} types * @return {Array} * @api private */ exports.normalizeTypes = function (types) { const returnValue = []; for (const element of types) { returnValue.push(exports.normalizeType(element)); } return returnValue; }; /** * Parse accept params `str` returning an * object with `.value`, `.quality` and `.params`. * also includes `.originalIndex` for stable sorting * * @param {String} str * @return {Object} * @api private */ function acceptParameters(string_, index) { const parts = string_.split(/ *; */); const returnValue = { value: parts[0], quality: 1, params: {}, originalIndex: index }; for (let i = 1; i < parts.length; ++i) { const pms = parts[i].split(/ *= */); if (pms[0] === 'q') { returnValue.quality = Number.parseFloat(pms[1]); } else { returnValue.params[pms[0]] = pms[1]; } } return returnValue; } /** * Compile "etag" value to function. * * @param {Boolean|String|Function} val * @return {Function} * @api private */ exports.compileETag = function (value) { let fn; if (typeof value === 'function') { return value; } switch (value) { case true: fn = exports.wetag; break; case false: break; case 'strong': fn = exports.etag; break; case 'weak': fn = exports.wetag; break; default: throw new TypeError('unknown value for etag function: ' + value); } return fn; }; /** * Compile "query parser" value to function. * * @param {String|Function} val * @return {Function} * @api private */ exports.compileQueryParser = function compileQueryParser(value) { let fn; if (typeof value === 'function') { return value; } switch (value) { case true: fn = querystring.parse; break; case false: break; case 'extended': fn = parseExtendedQueryString; break; case 'simple': fn = querystring.parse; break; default: throw new TypeError('unknown value for query parser function: ' + value); } return fn; }; /** * Compile "proxy trust" value to function. * * @param {Boolean|String|Number|Array|Function} val * @return {Function} * @api private */ exports.compileTrust = function (value) { if (typeof value === 'function') return value; if (value === true) { // Support plain true/false return function () { return true; }; } if (typeof value === 'number') { // Support trusting hop count return function (a, i) { return i < value; }; } if (typeof value === 'string') { // Support comma-separated values value = value.split(/ *, */); } return proxyaddr.compile(value || []); }; /** * Flag for http2 support */ exports.isHttp2Supported = isHttp2Supported; /** * Set the charset in a given Content-Type string. * * @param {String} type * @param {String} charset * @return {String} * @api private */ exports.setCharset = function setCharset(type, charset) { if (!type || !charset) { return type; } // parse type const parsed = contentType.parse(type); // set charset parsed.parameters.charset = charset; // format type return contentType.format(parsed); }; /** * Create an ETag generator function, generating ETags with * the given options. * * @param {object} options * @return {function} * @private */ function createETagGenerator(options) { return function generateETag(body, encoding) { const buf = !Buffer.isBuffer(body) ? Buffer.from(body, encoding) : body; return etag(buf, options); }; } /** * Parse an extended query string with qs. * * @return {Object} * @private */ function parseExtendedQueryString(string_) { return qs.parse(string_, { allowPrototypes: true }); } superagent-8.0.5/test/support/server.js000066400000000000000000000335001434246777100202600ustar00rootroot00000000000000const fs = require('fs'); const path = require('path'); let http = require('http'); const multer = require('multer'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const basicAuth = require('basic-auth-connect'); const express = require('./express'); let isPseudoHeader; if (process.env.HTTP2_TEST) { http = require('http2'); const { HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_SCHEME, HTTP2_HEADER_STATUS } = http.constants; isPseudoHeader = function (name) { switch (name) { case HTTP2_HEADER_STATUS: // :status case HTTP2_HEADER_METHOD: // :method case HTTP2_HEADER_PATH: // :path case HTTP2_HEADER_AUTHORITY: // :authority case HTTP2_HEADER_SCHEME: // :scheme return true; default: return false; } }; } const app = express(); app.use((request, res, next) => { res.set('Cache-Control', 'no-cache, no-store'); next(); }); app.all('/url', (request, res) => { res.send(request.url); }); app.all('/echo', (request, res) => { const { headers } = request; if (process.env.HTTP2_TEST) { for (const name of Object.keys(headers)) { if (isPseudoHeader(name)) { delete headers[name]; } } } res.writeHead(200, headers); request.pipe(res); }); let uniq = 0; app.all('/unique', (request, res) => { res.send(`never the same ${uniq++}`); }); app.use(bodyParser.urlencoded({ extended: true })); app.use(multer().none()); app.all('/formecho', (request, res) => { if ( !/application\/x-www-form-urlencoded|multipart\/form-data/.test( request.headers['content-type'] ) ) { return res.status(400).end('wrong type'); } res.json(request.body); }); app.use(bodyParser.json()); app.use(cookieParser()); app.use('/xdomain', (request, res, next) => { if (!request.get('Origin')) return next(); res.set('Access-Control-Allow-Origin', request.get('Origin')); res.set('Access-Control-Allow-Credentials', 'true'); res.set('Access-Control-Allow-Methods', 'POST'); res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type'); if (request.method == 'OPTIONS') return res.send(200); next(); }); app.get('/xdomain', (request, res) => { res.send('tobi'); }); app.get('/login', (request, res) => { res.status(200).send('
'); }); app.get('/json', (request, res) => { res.status(200).json({ name: 'manny' }); }); app.get('/json-hal', (request, res) => { res.set('content-type', 'application/hal+json'); res.send({ name: 'hal 5000' }); }); app.get('/ok', (request, res) => { res.send('ok'); }); app.get('/foo', (request, res) => { res .header('Content-Type', 'application/x-www-form-urlencoded') .send('foo=bar'); }); app.get('/form-data', (request, res) => { res.header('Content-Type', 'application/x-www-form-urlencoded'); res.send('pet[name]=manny'); }); app.post('/movie', (request, res) => { res.redirect('/movies/all/0'); }); app.get('/', (request, res) => { res.set('QUERY', JSON.stringify(request.query)); res.redirect('/movies'); }); app.get('/movies', (request, res) => { res.set('QUERY', JSON.stringify(request.query)); res.redirect('/movies/all'); }); app.get('/movies/all', (request, res) => { res.set('QUERY', JSON.stringify(request.query)); res.redirect('/movies/all/0'); }); app.get('/movies/all/0', (request, res) => { res.set('QUERY', JSON.stringify(request.query)); res.status(200).send('first movie page'); }); app.get('/movies/random', (request, res) => { res.redirect('/movie/4'); }); app.get('/movie/4', (request, res) => { setTimeout(() => { res.send('not-so-random movie'); }, 1000); }); app.get('/links', (request, res) => { res.header( 'Link', '; rel="next"' ); res.end(); }); app.get('/xml', (request, res) => { res.type('xml'); res.status(200).send(''); }); app.get('/custom', (request, res) => { res.type('application/x-custom'); res.status(200).send('custom stuff'); }); app.put('/user/:id', (request, res) => { res.send('updated'); }); app.put('/user/:id/body', (request, res) => { res.send(`received ${request.body.user}`); }); app.patch('/user/:id', (request, res) => { res.send('updated'); }); app.post('/user/:id/pet', (request, res) => { res.send(`added pet "${request.body.pet}"`); }); app.post('/user', (request, res) => { res.send('created'); }); app.delete('/user/:id', (request, res) => { res.send('deleted'); }); app.post('/todo/item', (request, res) => { let buf = ''; request.on('data', (chunk) => { buf += chunk; }); request.on('end', () => { res.send(`added "${buf}"`); }); }); app.get('/delay/const', (request, res) => { res.redirect('/delay/3000'); }); app.get('/delay/zip', (request, res) => { res.writeHead(200, { 'Content-Type': 'text/plain', 'Content-Encoding': 'gzip' }); setTimeout(() => { res.end(); }, 10_000); }); app.get('/delay/json', (request, res) => { res.writeHead(200, { 'Content-Type': 'application/json' }); setTimeout(() => { res.end(); }, 10_000); }); let slowBodyCallback; app.get('/delay/slowbody', (request, res) => { res.writeHead(200, { 'Content-Type': 'application/octet-stream' }); // Send lots of garbage data to overflow all buffers along the way, // so that the browser gets some data before the request is done const initialDataSent = new Promise((resolve) => { res.write(new Buffer.alloc(4000), () => { res.write(new Buffer.alloc(16_000)); resolve(); }); }); // Make sure sending of request body takes over 1s, // so that the test can't pass by accident. const minimumTime = new Promise((resolve) => { setTimeout(resolve, 1001); }); new Promise((resolve) => { // Waiting full 10 seconds for the test would be too annoying, // so the remote callback is a hack to push the test forward slowBodyCallback = resolve; setTimeout(resolve, 10_000); }) .then(() => Promise.all([initialDataSent, minimumTime])) .then(() => { res.end('bye'); }); }); app.get('/delay/slowbody/finish', (request, res) => { if (slowBodyCallback) slowBodyCallback(); res.sendStatus(204); }); app.get('/delay/:ms', (request, res) => { const ms = Math.trunc(request.params.ms); setTimeout(() => { res.sendStatus(200); }, ms); }); app.get('/querystring', (request, res) => { res.send(request.query); }); app.get('/querystring-in-header', (request, res) => { res.set('query', JSON.stringify(request.query)); res.send(); }); app.all('/echo-header/:field', (request, res) => { res.send(request.headers[request.params.field]); }); app.get('/echo-headers', (request, res) => { res.json(request.headers); }); app.post('/pet', (request, res) => { res.send(`added ${request.body.name} the ${request.body.species}`); }); app.get('/pets', (request, res) => { res.send(['tobi', 'loki', 'jane']); }); app.get('/json-seq', (request, res) => { res .set('content-type', 'application/json-seq') .send('\u001E{"id":1}\n\u001E{"id":2}\n'); }); app.get('/invalid-json', (request, res) => { res.set('content-type', 'application/json'); // sample invalid json taken from https://github.com/swagger-api/swagger-ui/issues/1354 res.send( ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}" ); }); app.get('/invalid-json-forbidden', (request, res) => { res.set('content-type', 'application/json'); res.status(403).send('Forbidden'); }); app.get('/text', (request, res) => { res.send('just some text'); }); app.get('/basic-auth', basicAuth('tobi', 'learnboost'), (request, res) => { res.end('you win!'); }); app.get('/basic-auth/again', basicAuth('tobi', ''), (request, res) => { res.end('you win again!'); }); app.post('/auth', basicAuth('foo', 'bar'), (request, res) => { const auth = request.headers.authorization; const parts = auth.split(' '); const credentials = Buffer.from(parts[1], 'base64').toString().split(':'); const user = credentials[0]; const pass = credentials[1]; res.send({ user, pass }); }); app.get('/error', (request, res) => { res.status(500).send('boom'); }); app.get('/unauthorized', (request, res) => { res.sendStatus(401); }); app.get('/bad-request', (request, res) => { res.sendStatus(400); }); app.get('/not-acceptable', (request, res) => { res.sendStatus(406); }); app.get('/no-content', (request, res) => { res.sendStatus(204); }); app.delete('/no-content', (request, res) => { res.set('content-type', 'application/json'); res.sendStatus(204); }); app.post('/created', (request, res) => { res.status(201).send('created'); }); app.post('/unprocessable-entity', (request, res) => { res.status(422).send('unprocessable entity'); }); app.get('/arraybuffer', (request, res) => { const content = new ArrayBuffer(1000); res.set('Content-Type', 'application/vnd.superagent'); res.send(content); }); app.get('/arraybuffer-unauthorized', (request, res) => { res.set('Content-Type', 'application/json'); res .status(401) .send('{"message":"Authorization has been denied for this request."}'); }); app.post('/empty-body', bodyParser.text(), (request, res) => { if ( typeof request.body === 'object' && Object.keys(request.body).length === 0 ) { res.sendStatus(204); } else { res.sendStatus(400); } }); app.get('/collection-json', (request, res) => { res.set('content-type', 'application/vnd.collection+json'); res.send({ name: 'chewbacca' }); }); app.get('/invalid-json', (request, res) => { res.set('content-type', 'application/json'); // sample invalid json taken from https://github.com/swagger-api/swagger-ui/issues/1354 res.send( ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}" ); }); app.options('/options/echo/body', bodyParser.json(), (request, res) => { res.send(request.body); }); app.get('/cookie-redirect', (request, res) => { res.set('Set-Cookie', 'replaced=yes'); res.append('Set-Cookie', 'from-redir=1', true); res.redirect(303, '/show-cookies'); }); app.get('/set-cookie', (request, res) => { res.cookie('persist', '123'); res.send('ok'); }); app.get('/show-cookies', (request, res) => { res.set('content-type', 'text/plain'); res.send(request.headers.cookie); }); app.put('/redirect-303', (request, res) => { res.redirect(303, '/reply-method'); }); app.put('/redirect-307', (request, res) => { res.redirect(307, '/reply-method'); }); app.put('/redirect-308', (request, res) => { res.redirect(308, '/reply-method'); }); app.all('/reply-method', (request, res) => { res.send(`method=${request.method.toLowerCase()}`); }); app.get('/tobi', (request, res) => { res.send('tobi'); }); app.get('/relative', (request, res) => { res.redirect('tobi'); }); app.get('/relative/sub', (request, res) => { res.redirect('../tobi'); }); app.get('/header', (request, res) => { res.redirect('/header/2'); }); app.post('/header', (request, res) => { res.redirect('/header/2'); }); app.get('/header/2', (request, res) => { res.send(request.headers); }); app.get('/bad-redirect', (request, res) => { res.status(307).end(); }); app.all('/ua', (request, res) => { const { headers } = request; if (process.env.HTTP2_TEST) { for (const name of Object.keys(headers)) { if (isPseudoHeader(name)) { delete headers[name]; } } } res.writeHead(200, headers); request.pipe(res); }); app.get('/manny', (request, res) => { res.status(200).json({ name: 'manny' }); }); function serveImageWithType(res, type) { const img = fs.readFileSync(`${__dirname}/../node/fixtures/test.png`); res.writeHead(200, { 'Content-Type': type }); res.end(img, 'binary'); } app.get('/image', (request, res) => { serveImageWithType(res, 'image/png'); }); app.get('/image-as-octets', (request, res) => { serveImageWithType(res, 'application/octet-stream'); }); app.get('/binary-data', (request, res) => { const binData = fs.readFileSync(`${__dirname}/../node/fixtures/test.aac`); res.writeHead(200, { 'Content-type': 'audio/aac' }); res.end(binData, 'binary'); }); app.get('/chunked-json', (request, res) => { res.set('content-type', 'application/json'); res.set('Transfer-Encoding', 'chunked'); let chunk = 0; const interval = setInterval(() => { chunk++; if (chunk === 1) res.write(`{ "name_${chunk}": "`); if (chunk > 1) res.write(`value_${chunk}", "name_${chunk}": "`); if (chunk === 10) { clearInterval(interval); res.write(`value_${chunk}"}`); res.end(); } }, 10); }); app.get('/if-mod', (request, res) => { if (request.header('if-modified-since')) { res.status(304).end(); } else { res.send(`${Date.now()}`); } }); const called = {}; app.get('/error/ok/:id', (request, res) => { if (request.query.qs != 'present') { return res.status(400).end('query string lost'); } const { id } = request.params; if (!called[id]) { called[id] = true; res.status(500).send('boom'); } else { res.send(request.headers); delete called[id]; } }); app.get('/delay/:ms/ok/:id', (request, res) => { const { id } = request.params; if (!called[id]) { called[id] = true; const ms = Math.trunc(request.params.ms); setTimeout(() => { res.sendStatus(200); }, ms); } else { res.send(`ok = ${request.url}`); delete called[id]; } }); app.get('/error/redirect/:id', (request, res) => { const { id } = request.params; if (!called[id]) { called[id] = true; res.status(500).send('boom'); } else { res.redirect('/movies'); delete called[id]; } }); app.get('/error/redirect-error:id', (request, res) => { const { id } = request.params; if (!called[id]) { called[id] = true; res.status(500).send('boom'); } else { res.redirect('/error'); delete called[id]; } }); const server = http.createServer(app); server.listen(process.env.ZUUL_PORT); superagent-8.0.5/test/support/setup.js000066400000000000000000000012621434246777100201120ustar00rootroot00000000000000require('should'); require('should-http'); const getPort = require('get-port'); let NODE; let uri; async function getSetup() { if (NODE && uri) { return { NODE, uri }; } NODE = true; if (typeof window !== 'undefined') { NODE = false; uri = `//${window.location.host}`; } else { try { const port = await getPort(); // check that another call to the function hasn't set the uri already if (!uri) { process.env.ZUUL_PORT = port; uri = `http://localhost:${process.env.ZUUL_PORT}`; require('./server'); } } catch (err) { console.error(err); } } return { NODE, uri }; } module.exports = getSetup; superagent-8.0.5/test/timeout.js000066400000000000000000000075771434246777100167430ustar00rootroot00000000000000const assert = require('assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); describe('.timeout(ms)', function () { let setup; let base; before(async () => { setup = await getSetup(); base = setup.uri; }); this.timeout(15_000); describe('when timeout is exceeded', () => { it('should error', (done) => { request .get(`${base}/delay/500`) .timeout(150) .end((error, res) => { assert(error, 'expected an error'); assert.equal( 'number', typeof error.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', error.code, 'expected abort error code'); done(); }); }); it('should error in promise interface ', (done) => { request .get(`${base}/delay/500`) .timeout(150) .catch((err) => { assert(err, 'expected an error'); assert.equal( 'number', typeof err.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); done(); }); }); it('should handle gzip timeout', (done) => { request .get(`${base}/delay/zip`) .timeout(150) .end((error, res) => { assert(error, 'expected an error'); assert.equal( 'number', typeof error.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', error.code, 'expected abort error code'); done(); }); }); it('should handle buffer timeout', (done) => { request .get(`${base}/delay/json`) .buffer(true) .timeout(150) .end((error, res) => { assert(error, 'expected an error'); assert.equal( 'number', typeof error.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', error.code, 'expected abort error code'); done(); }); }); it('should error on deadline', (done) => { request .get(`${base}/delay/500`) .timeout({ deadline: 150 }) .end((error, res) => { assert(error, 'expected an error'); assert.equal( 'number', typeof error.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', error.code, 'expected abort error code'); done(); }); }); it('should support setting individual options', (done) => { request .get(`${base}/delay/500`) .timeout({ deadline: 10 }) .timeout({ response: 99_999 }) .end((error, res) => { assert(error, 'expected an error'); assert.equal('ECONNABORTED', error.code, 'expected abort error code'); assert.equal('ETIME', error.errno); done(); }); }); it('should error on response', (done) => { request .get(`${base}/delay/500`) .timeout({ response: 150 }) .end((error, res) => { assert(error, 'expected an error'); assert.equal( 'number', typeof error.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', error.code, 'expected abort error code'); assert.equal('ETIMEDOUT', error.errno); done(); }); }); it('should accept slow body with fast response', (done) => { request .get(`${base}/delay/slowbody`) .timeout({ response: 1000 }) .on('progress', () => { // This only makes the test faster without relying on arbitrary timeouts request.get(`${base}/delay/slowbody/finish`).end(); }) .end(done); }); }); }); superagent-8.0.5/test/use.js000066400000000000000000000043511434246777100160340ustar00rootroot00000000000000const assert = require('assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); describe('request', function () { let setup; let uri; before(async function () { setup = await getSetup(); uri = setup.uri; }); this.timeout(20_000); describe('use', () => { it('should use plugin success', (done) => { const now = `${Date.now()}`; function uuid(request_) { request_.set('X-UUID', now); return request_; } function prefix(request_) { request_.url = uri + request_.url; return request_; } request .get('/echo') .use(uuid) .use(prefix) .end((error, res) => { assert.strictEqual(res.statusCode, 200); assert.equal(res.get('X-UUID'), now); done(); }); }); }); }); describe('subclass', () => { let OriginalRequest; beforeEach(() => { OriginalRequest = request.Request; }); afterEach(() => { request.Request = OriginalRequest; }); it('should be an instance of Request', () => { const request_ = request.get('/'); assert(request_ instanceof request.Request); }); it('should use patched subclass', () => { assert(OriginalRequest); let constructorCalled; let sendCalled; function NewRequest(...args) { constructorCalled = true; OriginalRequest.apply(this, args); } NewRequest.prototype = Object.create(OriginalRequest.prototype); NewRequest.prototype.send = function () { sendCalled = true; return this; }; request.Request = NewRequest; const request_ = request.get('/').send(); assert(constructorCalled); assert(sendCalled); assert(request_ instanceof NewRequest); assert(request_ instanceof OriginalRequest); }); it('should use patched subclass in agent too', () => { if (!request.agent) return; // Node-only function NewRequest(...args) { OriginalRequest.apply(this, args); } NewRequest.prototype = Object.create(OriginalRequest.prototype); request.Request = NewRequest; const request_ = request.agent().del('/'); assert(request_ instanceof NewRequest); assert(request_ instanceof OriginalRequest); }); });

' + statuses(status) + '. Redirecting to ' + u + '