pax_global_header00006660000000000000000000000064140475344250014522gustar00rootroot0000000000000052 comment=34f7aacf27d17666a95c16c6a30ed987872b8ecc terkelg-tiny-glob-d507af8/000077500000000000000000000000001404753442500155015ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/.editorconfig000066400000000000000000000002231404753442500201530ustar00rootroot00000000000000root = true [*] charset = utf-8 end_of_line = lf trim_trailing_whitespace = true insert_final_newline = true indent_style = space indent_size = 2 terkelg-tiny-glob-d507af8/.github/000077500000000000000000000000001404753442500170415ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/.github/workflows/000077500000000000000000000000001404753442500210765ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/.github/workflows/ci.yml000066400000000000000000000013231404753442500222130ustar00rootroot00000000000000name: CI on: push: branches: - '**' tags-ignore: - '**' pull_request: branches: - 'master' jobs: test: name: Node.js v${{ matrix.nodejs }} runs-on: ubuntu-latest strategy: matrix: nodejs: [8, 10, 12, 14] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.nodejs }} - name: (env) cache uses: actions/cache@v2 with: path: ~/.npm key: ${{ runner.os }}-${{ matrix.nodejs }}-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.os }}-${{ matrix.nodejs }}- - name: Install run: npm ci - name: Run Tests run: npm test terkelg-tiny-glob-d507af8/.gitignore000066400000000000000000000000441404753442500174670ustar00rootroot00000000000000node_modules .DS_Store *.lock *.log terkelg-tiny-glob-d507af8/bench/000077500000000000000000000000001404753442500165605ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/assert.js000066400000000000000000000006661404753442500204270ustar00rootroot00000000000000const assert = require('assert'); const { promisify } = require('util'); const { order } = require('../test/helpers'); const glob = promisify(require('glob')); const fast = require('fast-glob'); const tiny = require('../'); let prev; module.exports = async function (str, opts) { let fn, tmp; for (fn of [glob, fast, tiny]) { tmp = await fn(str, opts).then(order); prev && assert.deepEqual(tmp, prev); prev = tmp; } } terkelg-tiny-glob-d507af8/bench/index.js000066400000000000000000000017661404753442500202370ustar00rootroot00000000000000const Table = require('cli-table2'); const { Suite } = require('benchmark'); const assert = require('./assert'); const { sync } = require('glob'); const fg = require('fast-glob'); const curr = require('../'); const cwd = __dirname; const pattern = 'test/*.js'; const head = ['Name', 'Mean time', 'Ops/sec', 'Diff']; async function onStart() { await assert(pattern, { cwd }); } new Suite({ onStart, onComplete }) .add('glob', () => sync(pattern, { cwd })) .add('fast-glob', () => fg(pattern, { cwd })) .add('tiny-glob', () => curr(pattern, { cwd })) .on('cycle', e => console.log(String(e.target))) .run({ async:true }); function onComplete() { console.log('Fastest is ' + this.filter('fastest').map('name')); let prev, diff; const tbl = new Table({ head }); this.forEach(el => { diff = prev ? (((el.hz - prev) * 100 / prev).toFixed(2) + '% faster') : 'N/A'; tbl.push([el.name, el.stats.mean, el.hz.toLocaleString(), diff]) prev = el.hz; }); console.log(tbl.toString()); } terkelg-tiny-glob-d507af8/bench/package.json000066400000000000000000000002061404753442500210440ustar00rootroot00000000000000{ "devDependencies": { "benchmark": "^2.1.4", "cli-table2": "^0.2.0", "fast-glob": "^2.2.0", "glob": "^7.1.2" } } terkelg-tiny-glob-d507af8/bench/test/000077500000000000000000000000001404753442500175375ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/a.js000066400000000000000000000000001404753442500203030ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/a.md000066400000000000000000000000001404753442500202670ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/b.js000066400000000000000000000000001404753442500203040ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/b.md000066400000000000000000000000001404753442500202700ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/c.js000066400000000000000000000000001404753442500203050ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/dirA/000077500000000000000000000000001404753442500204165ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/dirA/aa.js000066400000000000000000000000001404753442500213230ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/dirA/aa.md000066400000000000000000000000001404753442500213070ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/dirA/bb.js000066400000000000000000000000001404753442500213250ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/dirA/bb.md000066400000000000000000000000001404753442500213110ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/bench/test/dirA/cc.js000066400000000000000000000000001404753442500213270ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/index.d.ts000066400000000000000000000003501404753442500174000ustar00rootroot00000000000000type Options = { cwd?: string; dot?: boolean; absolute?: boolean; filesOnly?: boolean; flush?: boolean; }; type FilePath = string; declare function glob(str: string, opts?: Options): Promise; export = glob; terkelg-tiny-glob-d507af8/index.js000066400000000000000000000050231404753442500171460ustar00rootroot00000000000000const fs = require('fs'); const globrex = require('globrex'); const { promisify } = require('util'); const globalyzer = require('globalyzer'); const { join, resolve, relative } = require('path'); const isHidden = /(^|[\\\/])\.[^\\\/\.]/g; const readdir = promisify(fs.readdir); const stat = promisify(fs.stat); let CACHE = {}; async function walk(output, prefix, lexer, opts, dirname='', level=0) { const rgx = lexer.segments[level]; const dir = resolve(opts.cwd, prefix, dirname); const files = await readdir(dir); const { dot, filesOnly } = opts; let i=0, len=files.length, file; let fullpath, relpath, stats, isMatch; for (; i < len; i++) { fullpath = join(dir, file=files[i]); relpath = dirname ? join(dirname, file) : file; if (!dot && isHidden.test(relpath)) continue; isMatch = lexer.regex.test(relpath); if ((stats=CACHE[relpath]) === void 0) { CACHE[relpath] = stats = fs.lstatSync(fullpath); } if (!stats.isDirectory()) { isMatch && output.push(relative(opts.cwd, fullpath)); continue; } if (rgx && !rgx.test(file)) continue; !filesOnly && isMatch && output.push(join(prefix, relpath)); await walk(output, prefix, lexer, opts, relpath, rgx && rgx.toString() !== lexer.globstar && level + 1); } } /** * Find files using bash-like globbing. * All paths are normalized compared to node-glob. * @param {String} str Glob string * @param {String} [options.cwd='.'] Current working directory * @param {Boolean} [options.dot=false] Include dotfile matches * @param {Boolean} [options.absolute=false] Return absolute paths * @param {Boolean} [options.filesOnly=false] Do not include folders if true * @param {Boolean} [options.flush=false] Reset cache object * @returns {Array} array containing matching files */ module.exports = async function (str, opts={}) { if (!str) return []; let glob = globalyzer(str); opts.cwd = opts.cwd || '.'; if (!glob.isGlob) { try { let resolved = resolve(opts.cwd, str); let dirent = await stat(resolved); if (opts.filesOnly && !dirent.isFile()) return []; return opts.absolute ? [resolved] : [str]; } catch (err) { if (err.code != 'ENOENT') throw err; return []; } } if (opts.flush) CACHE = {}; let matches = []; const { path } = globrex(glob.glob, { filepath:true, globstar:true, extended:true }); path.globstar = path.globstar.toString(); await walk(matches, glob.base, path, opts, '.', 0); return opts.absolute ? matches.map(x => resolve(opts.cwd, x)) : matches; }; terkelg-tiny-glob-d507af8/license000066400000000000000000000020471404753442500170510ustar00rootroot00000000000000MIT License Copyright (c) 2018 Terkel 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. terkelg-tiny-glob-d507af8/package-lock.json000066400000000000000000001031431404753442500207170ustar00rootroot00000000000000{ "name": "tiny-glob", "version": "0.2.9", "lockfileVersion": 1, "requires": true, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "array-filter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", "dev": true }, "available-typed-arrays": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", "dev": true, "requires": { "array-filter": "^1.0.0" } }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "buffer-shims": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", "dev": true }, "call-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.0" } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "deep-equal": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.4.tgz", "integrity": "sha512-BUfaXrVoCfgkOQY/b09QdO9L3XNoF2XH0A3aY9IQwQL/ZjLOe8FQgCNVl1wiolhsFo8kFdO9zdPViCPbmaJA5w==", "dev": true, "requires": { "es-abstract": "^1.18.0-next.1", "es-get-iterator": "^1.1.0", "is-arguments": "^1.0.4", "is-date-object": "^1.0.2", "is-regex": "^1.1.1", "isarray": "^2.0.5", "object-is": "^1.1.3", "object-keys": "^1.1.1", "object.assign": "^4.1.1", "regexp.prototype.flags": "^1.3.0", "side-channel": "^1.0.3", "which-boxed-primitive": "^1.0.1", "which-collection": "^1.0.1", "which-typed-array": "^1.1.2" }, "dependencies": { "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { "object-keys": "^1.0.12" } }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, "dotignore": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", "dev": true, "requires": { "minimatch": "^3.0.4" } }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "es-abstract": { "version": "1.18.0-next.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", "is-negative-zero": "^2.0.0", "is-regex": "^1.1.1", "object-inspect": "^1.8.0", "object-keys": "^1.1.1", "object.assign": "^4.1.1", "string.prototype.trimend": "^1.0.1", "string.prototype.trimstart": "^1.0.1" } }, "es-get-iterator": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.1.tgz", "integrity": "sha512-qorBw8Y7B15DVLaJWy6WdEV/ZkieBcu6QCq/xzWzGOKJqgG1j754vXRfZ3NY7HSShneqU43mPB4OkQBTkvHhFw==", "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.1", "has-symbols": "^1.0.1", "is-arguments": "^1.0.4", "is-map": "^2.0.1", "is-set": "^2.0.1", "is-string": "^1.0.5", "isarray": "^2.0.5" }, "dependencies": { "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" } }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { "is-callable": "^1.1.3" } }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "get-intrinsic": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" } }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" }, "globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "is-arguments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", "dev": true }, "is-bigint": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz", "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==", "dev": true }, "is-boolean-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", "dev": true }, "is-callable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true }, "is-core-module": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-finite": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "dev": true }, "is-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", "dev": true }, "is-negative-zero": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", "dev": true }, "is-number-object": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", "dev": true }, "is-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { "has-symbols": "^1.0.1" } }, "is-set": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", "dev": true }, "is-string": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", "dev": true }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { "has-symbols": "^1.0.1" } }, "is-typed-array": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", "dev": true, "requires": { "available-typed-arrays": "^1.0.0", "es-abstract": "^1.17.4", "foreach": "^2.0.5", "has-symbols": "^1.0.1" }, "dependencies": { "es-abstract": { "version": "1.17.7", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", "is-regex": "^1.1.1", "object-inspect": "^1.8.0", "object-keys": "^1.1.1", "object.assign": "^4.1.1", "string.prototype.trimend": "^1.0.1", "string.prototype.trimstart": "^1.0.1" } } } }, "is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true }, "is-weakset": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", "dev": true }, "object-is": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1" } }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "parse-ms": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "plur": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", "dev": true }, "pretty-ms": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", "dev": true, "requires": { "is-finite": "^1.0.1", "parse-ms": "^1.0.0", "plur": "^1.0.0" } }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, "re-emitter": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/re-emitter/-/re-emitter-1.1.3.tgz", "integrity": "sha1-+p4xn/3u6zWycpbvDz03TawvUqc=", "dev": true }, "readable-stream": { "version": "2.2.9", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", "dev": true, "requires": { "buffer-shims": "~1.0.0", "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "~1.0.0", "process-nextick-args": "~1.0.6", "string_decoder": "~1.0.0", "util-deprecate": "~1.0.1" } }, "regexp.prototype.flags": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" }, "dependencies": { "es-abstract": { "version": "1.17.7", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", "is-regex": "^1.1.1", "object-inspect": "^1.8.0", "object-keys": "^1.1.1", "object.assign": "^4.1.1", "string.prototype.trimend": "^1.0.1", "string.prototype.trimstart": "^1.0.1" } } } }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "resolve": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "requires": { "is-core-module": "^2.1.0", "path-parse": "^1.0.6" } }, "resumer": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", "dev": true, "requires": { "through": "~2.3.4" } }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "side-channel": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", "dev": true, "requires": { "es-abstract": "^1.18.0-next.0", "object-inspect": "^1.8.0" } }, "split": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", "dev": true, "requires": { "through": "2" } }, "string.prototype.trim": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.2.tgz", "integrity": "sha512-b5yrbl3BXIjHau9Prk7U0RRYcUYdN4wGSVaqoBQS50CCE3KBuYU0TYRNPFCP7aVoNMX87HKThdMRVIP3giclKg==", "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.0" } }, "string.prototype.trimend": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1" } }, "string.prototype.trimstart": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, "tap-out": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tap-out/-/tap-out-2.1.0.tgz", "integrity": "sha512-LJE+TBoVbOWhwdz4+FQk40nmbIuxJLqaGvj3WauQw3NYYU5TdjoV3C0x/yq37YAvVyi+oeBXmWnxWSjJ7IEyUw==", "dev": true, "requires": { "re-emitter": "1.1.3", "readable-stream": "2.2.9", "split": "1.0.0", "trim": "0.0.1" } }, "tap-spec": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/tap-spec/-/tap-spec-5.0.0.tgz", "integrity": "sha512-zMDVJiE5I6Y4XGjlueGXJIX2YIkbDN44broZlnypT38Hj/czfOXrszHNNJBF/DXR8n+x6gbfSx68x04kIEHdrw==", "dev": true, "requires": { "chalk": "^1.0.0", "duplexer": "^0.1.1", "figures": "^1.4.0", "lodash": "^4.17.10", "pretty-ms": "^2.1.0", "repeat-string": "^1.5.2", "tap-out": "^2.1.0", "through2": "^2.0.0" } }, "tape": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/tape/-/tape-5.0.1.tgz", "integrity": "sha512-wVsOl2shKPcjdJdc8a+PwacvrOdJZJ57cLUXlxW4TQ2R6aihXwG0m0bKm4mA4wjtQNTaLMCrYNEb4f9fjHKUYQ==", "dev": true, "requires": { "deep-equal": "^2.0.3", "defined": "^1.0.0", "dotignore": "^0.1.2", "for-each": "^0.3.3", "function-bind": "^1.1.1", "glob": "^7.1.6", "has": "^1.0.3", "inherits": "^2.0.4", "is-regex": "^1.0.5", "minimist": "^1.2.5", "object-inspect": "^1.7.0", "object-is": "^1.1.2", "object.assign": "^4.1.0", "resolve": "^1.17.0", "resumer": "^0.0.0", "string.prototype.trim": "^1.2.1", "through": "^2.3.8" } }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" }, "dependencies": { "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "which-boxed-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz", "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==", "dev": true, "requires": { "is-bigint": "^1.0.0", "is-boolean-object": "^1.0.0", "is-number-object": "^1.0.3", "is-string": "^1.0.4", "is-symbol": "^1.0.2" } }, "which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "requires": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" } }, "which-typed-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", "dev": true, "requires": { "available-typed-arrays": "^1.0.2", "es-abstract": "^1.17.5", "foreach": "^2.0.5", "function-bind": "^1.1.1", "has-symbols": "^1.0.1", "is-typed-array": "^1.1.3" }, "dependencies": { "es-abstract": { "version": "1.17.7", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", "is-regex": "^1.1.1", "object-inspect": "^1.8.0", "object-keys": "^1.1.1", "object.assign": "^4.1.1", "string.prototype.trimend": "^1.0.1", "string.prototype.trimstart": "^1.0.1" } } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true } } } terkelg-tiny-glob-d507af8/package.json000066400000000000000000000012741404753442500177730ustar00rootroot00000000000000{ "name": "tiny-glob", "version": "0.2.9", "description": "Tiny and extremely fast globbing", "repository": "terkelg/tiny-glob", "types": "index.d.ts", "license": "MIT", "author": { "name": "Terkel Gjervig", "email": "terkel@terkel.com", "url": "https://terkel.com" }, "files": [ "*.js", "*.d.ts" ], "scripts": { "bench": "node bench", "test": "tape test/*.js | tap-spec" }, "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" }, "devDependencies": { "tap-spec": "^5.0.0", "tape": "^5.0.1" }, "keywords": [ "glob", "globbing", "patterns", "wildcard", "pattern-matching", "expansion" ] } terkelg-tiny-glob-d507af8/readme.md000066400000000000000000000113601404753442500172610ustar00rootroot00000000000000

Tiny Glob

tiny glob

version CI downloads install size

Tiny and extremely fast library to match files and folders using glob patterns.


"Globs" is the common name for a specific type of pattern used to match files and folders. It's the patterns you type when you do stuff like `ls *.js` in your shell or put `src/*` in a `.gitignore` file. When used to match filenames, it's sometimes called a "wildcard". ## Install ``` npm install tiny-glob ``` ## Core Features - 🔥 **extremely fast:** ~350% faster than [node-glob](https://github.com/isaacs/node-glob) and ~230% faster than [fast-glob](https://github.com/mrmlnc/fast-glob) - 💪 **powerful:** supports advanced globbing patterns (`ExtGlob`) - 📦 **tiny**: only ~45 LOC with 2 small dependencies - 👫 **friendly**: simple and easy to use api - 🎭 **cross-platform**: supports both unix and windows ## Usage ```js const glob = require('tiny-glob'); (async function(){ let files = await glob('src/*/*.{js,md}'); // => [ ... ] array of matching files })(); ``` ## API ### glob(str, options) Type: `function`
Returns: `Array` Return array of matching files and folders This function is `async` and returns a promise. #### str Type: `String` The glob pattern to match against. > **OBS**: Please only use forward-slashes in glob expressions. Even on [windows](#windows) #### options.cwd Type: `String`
Default: `'.'` Change default working directory. #### options.dot Type: `Boolean`
Default: `false` Allow patterns to match filenames or directories that begin with a period (`.`). #### options.absolute Type: `Boolean`
Default: `false` Return matches as absolute paths. #### options.filesOnly Type: `Boolean`
Default: `false` Skip directories and return matched files only. #### options.flush Type: `Boolean`
Default: `false` Flush the internal cache object. ## Windows Though Windows may use `/`, `\`, or `\\` as path separators, you can **only** use forward-slashes (`/`) when specifying glob expressions. Any back-slashes (`\`) will be interpreted as escape characters instead of path separators. This is common across many glob-based modules; see [`node-glob`](https://github.com/isaacs/node-glob#windows) for corroboration. ## Benchmarks ``` glob x 13,405 ops/sec ±1.80% (85 runs sampled) fast-glob x 25,745 ops/sec ±2.76% (59 runs sampled) tiny-glob x 102,658 ops/sec ±0.79% (91 runs sampled) Fastest is tiny-glob ┌───────────┬─────────────────────────┬─────────────┬────────────────â”� │ Name │ Mean time │ Ops/sec │ Diff │ ├───────────┼─────────────────────────┼─────────────┼────────────────┤ │ glob │ 0.00007459990597268128 │ 13,404.843 │ N/A │ ├───────────┼─────────────────────────┼─────────────┼────────────────┤ │ fast-glob │ 0.000038842529587611705 │ 25,744.976 │ 92.06% faster │ ├───────────┼─────────────────────────┼─────────────┼────────────────┤ │ tiny-glob │ 0.00000974110141018254 │ 102,657.796 │ 298.75% faster │ └───────────┴─────────────────────────┴─────────────┴────────────────┘ ``` ## Advanced Globbing Learn more about advanced globbing - [Greg's Wiki](https://mywiki.wooledge.org/glob) - [Bash Extended Globbing](https://www.linuxjournal.com/content/bash-extended-globbing) ## License MIT © [Terkel Gjervig](https://terkel.com) terkelg-tiny-glob-d507af8/sync.d.ts000066400000000000000000000003371404753442500172520ustar00rootroot00000000000000type Options = { cwd?: string; dot?: boolean; absolute?: boolean; filesOnly?: boolean; flush?: boolean; }; type FilePath = string; declare function glob(str: string, opts?: Options): FilePath[]; export = glob; terkelg-tiny-glob-d507af8/sync.js000066400000000000000000000046171404753442500170230ustar00rootroot00000000000000const fs = require('fs'); const globrex = require('globrex'); const globalyzer = require('globalyzer'); const { join, resolve, relative } = require('path'); const isHidden = /(^|[\\\/])\.[^\\\/\.]/g; let CACHE = {}; function walk(output, prefix, lexer, opts, dirname='', level=0) { const rgx = lexer.segments[level]; const dir = resolve(opts.cwd, prefix, dirname); const files = fs.readdirSync(dir); const { dot, filesOnly } = opts; let i=0, len=files.length, file; let fullpath, relpath, stats, isMatch; for (; i < len; i++) { fullpath = join(dir, file=files[i]); relpath = dirname ? join(dirname, file) : file; if (!dot && isHidden.test(relpath)) continue; isMatch = lexer.regex.test(relpath); if ((stats=CACHE[relpath]) === void 0) { CACHE[relpath] = stats = fs.lstatSync(fullpath); } if (!stats.isDirectory()) { isMatch && output.push(relative(opts.cwd, fullpath)); continue; } if (rgx && !rgx.test(file)) continue; !filesOnly && isMatch && output.push(join(prefix, relpath)); walk(output, prefix, lexer, opts, relpath, rgx && rgx.toString() !== lexer.globstar && level + 1); } } /** * Find files using bash-like globbing. * All paths are normalized compared to node-glob. * @param {String} str Glob string * @param {String} [options.cwd='.'] Current working directory * @param {Boolean} [options.dot=false] Include dotfile matches * @param {Boolean} [options.absolute=false] Return absolute paths * @param {Boolean} [options.filesOnly=false] Do not include folders if true * @param {Boolean} [options.flush=false] Reset cache object * @returns {Array} array containing matching files */ module.exports = function (str, opts={}) { if (!str) return []; let glob = globalyzer(str); opts.cwd = opts.cwd || '.'; if (!glob.isGlob) { try { let resolved = resolve(opts.cwd, str); let dirent = fs.statSync(resolved); if (opts.filesOnly && !dirent.isFile()) return []; return opts.absolute ? [resolved] : [str]; } catch (err) { if (err.code != 'ENOENT') throw err; return []; } } if (opts.flush) CACHE = {}; let matches = []; const { path } = globrex(glob.glob, { filepath:true, globstar:true, extended:true }); path.globstar = path.globstar.toString(); walk(matches, glob.base, path, opts, '.', 0); return opts.absolute ? matches.map(x => resolve(opts.cwd, x)) : matches; }; terkelg-tiny-glob-d507af8/test/000077500000000000000000000000001404753442500164605ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/000077500000000000000000000000001404753442500203315ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/.a-hidden.txt000066400000000000000000000000001404753442500226070ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/a.js000066400000000000000000000000001404753442500210750ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/a.mp3000066400000000000000000000000001404753442500211600ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/a.txt000066400000000000000000000000001404753442500213000ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/b.js000066400000000000000000000000001404753442500210760ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/b.txt000066400000000000000000000000001404753442500213010ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/deep/000077500000000000000000000000001404753442500212465ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/deep/a/000077500000000000000000000000001404753442500214665ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/deep/a/e000066400000000000000000000000001404753442500216230ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/deep/b/000077500000000000000000000000001404753442500214675ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/deep/b/c/000077500000000000000000000000001404753442500217115ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/deep/b/c/d000066400000000000000000000000001404753442500220450ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/ond/000077500000000000000000000000001404753442500211115ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/ond/.b-hidden.txt000066400000000000000000000000001404753442500233700ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/ond/a.txt000066400000000000000000000000001404753442500220600ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/000077500000000000000000000000001404753442500211125ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/a.js000066400000000000000000000000001404753442500216560ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/a.md000066400000000000000000000000001404753442500216420ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/a.txt000066400000000000000000000000001404753442500220610ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/b.txt000066400000000000000000000000001404753442500220620ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/child/000077500000000000000000000000001404753442500221755ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/child/a.js000066400000000000000000000000001404753442500227410ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/child/a.md000066400000000000000000000000001404753442500227250ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/one/child/a.txt000066400000000000000000000000001404753442500231440ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/two/000077500000000000000000000000001404753442500211425ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/fixtures/two/a.txt000066400000000000000000000000001404753442500221110ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/glob.js000066400000000000000000000122141404753442500177410ustar00rootroot00000000000000const test = require('tape'); const { join, resolve } = require('path'); const { order, unixify } = require('./helpers'); const glob = require('../'); const cwd = join(__dirname, 'fixtures'); function isMatch(t, str, opts, arr) { arr = arr.map(unixify); return glob(str, opts).then(order).then(val => { t.same(val, arr); }); } test('glob: standard', async t => { t.plan(2); t.is(typeof glob, 'function', 'consturctor is a typeof function'); t.true(Array.isArray(await glob('')), 'returns array'); }); test('glob: glob', async t => { t.plan(14); t.same(await glob(''), []); t.same(await glob('.'), ['.']); t.same(await glob('./'), ['./']); await isMatch(t, 'test/fixtures', {}, ['test/fixtures']); // Ideal: test/fixtures/../fixture etc await isMatch(t, 'test/fixtures/../*', {}, [ 'test/fixtures', 'test/glob.js', 'test/helpers' ]); await isMatch(t, 'test/fixtures/*', {}, [ 'test/fixtures/a.js', 'test/fixtures/a.mp3', 'test/fixtures/a.txt', 'test/fixtures/b.js', 'test/fixtures/b.txt', 'test/fixtures/deep', 'test/fixtures/ond', 'test/fixtures/one', 'test/fixtures/two' ]); await isMatch(t, 'test/*.{js,txt}', {}, [ 'test/glob.js' ]); await isMatch(t, './test/*.{js,txt}', {}, [ 'test/glob.js' ]); // Ideal: ../[parent]/test/fixtures/a.mp3 await isMatch(t, '../tiny-glob/**/*.{mp3}', {}, ['test/fixtures/a.mp3']); await isMatch(t, 'test/fixtures/**/*.{mp3}', {}, ['test/fixtures/a.mp3']); await isMatch(t, 'tes[tp]/fixtures/**/*.{mp3}', {}, ['test/fixtures/a.mp3']); await isMatch(t, 'test/fixtures/**/a.js', {}, [ 'test/fixtures/a.js', 'test/fixtures/one/a.js', 'test/fixtures/one/child/a.js' ]); await isMatch(t, 'test/fixtures/**/b.{js,txt}', {}, [ 'test/fixtures/b.js', 'test/fixtures/b.txt', 'test/fixtures/one/b.txt' ]); await isMatch(t, '**/*.{txt,js}', { cwd }, [ 'a.js', 'a.txt', 'b.js', 'b.txt', 'ond/a.txt', 'one/a.js', 'one/a.txt', 'one/b.txt', 'one/child/a.js', 'one/child/a.txt', 'two/a.txt' ]); }); test("glob: path dosen't exist (without glob)", async t => { t.plan(1); await isMatch(t, 'z.js', { cwd }, [ ]); }); test('glob: options.cwd', async t => { t.plan(2); let dir = join(cwd, 'one', 'child'); await isMatch(t, '../*', { cwd:dir }, [ '../a.js', '../a.md', '../a.txt', '../b.txt', '../child' ]); // Ideal: ../child/a.js etc await isMatch(t, '../child/*', { cwd:dir }, [ 'a.js', 'a.md', 'a.txt' ]); }); test('glob: options.cwd (without glob)', async t => { t.plan(1); let dir = join(cwd, 'one', 'child'); await isMatch(t, '../child/a.js', { cwd:dir }, [ '../child/a.js' ]); }); test('glob: options.cwd (absolute)', async t => { t.plan(2); let dir = resolve(cwd, 'one', 'child'); let opts = { cwd:dir, absolute:true }; await isMatch(t, '../*', opts, [ resolve(dir, '../a.js'), resolve(dir, '../a.md'), resolve(dir, '../a.txt'), resolve(dir, '../b.txt'), resolve(dir) ]); // Ideal: ../child/a.js etc await isMatch(t, '../child/*', opts, [ resolve(dir, 'a.js'), resolve(dir, 'a.md'), resolve(dir, 'a.txt') ]); }); test('glob: options.dot', async t => { t.plan(2); await isMatch(t, 'test/fixtures/*.txt', { dot:true }, [ 'test/fixtures/.a-hidden.txt', 'test/fixtures/a.txt', 'test/fixtures/b.txt' ]); await isMatch(t, 'test/fixtures/*.txt', { dot:false }, [ 'test/fixtures/a.txt', 'test/fixtures/b.txt' ]); }); test('glob: options.absolute', async t => { t.plan(2); await isMatch(t, 'test/fixtures/*.txt', { absolute:true }, [ resolve('test/fixtures/a.txt'), resolve('test/fixtures/b.txt') ]); let dir = join(cwd, 'one', 'child'); await isMatch(t, '../*', { cwd:dir, absolute:true }, [ resolve(dir, '../a.js'), resolve(dir, '../a.md'), resolve(dir, '../a.txt'), resolve(dir, '../b.txt'), resolve(dir) ]); }); test('glob: options.absolute (without glob)', async t => { t.plan(1); let dir = join(cwd, 'one', 'child'); await isMatch(t, '../child/a.js', { cwd:dir, absolute:true }, [ resolve(dir, '../child/a.js') ]); }); test('glob: options.filesOnly', async t => { t.plan(2); await isMatch(t, 'test/fixtures/*', { filesOnly:true }, [ //'test/fixtures/.a-hidden.txt', 'test/fixtures/a.js', 'test/fixtures/a.mp3', 'test/fixtures/a.txt', 'test/fixtures/b.js', 'test/fixtures/b.txt' ]); await isMatch(t, 'test/fixtures/*', { filesOnly:false }, [ 'test/fixtures/a.js', 'test/fixtures/a.mp3', 'test/fixtures/a.txt', 'test/fixtures/b.js', 'test/fixtures/b.txt', 'test/fixtures/deep', 'test/fixtures/ond', 'test/fixtures/one', 'test/fixtures/two' ]); }); test('glob: options.filesOnly (without glob)', async t => { t.plan(2); await isMatch(t, 'test/fixtures/one', { filesOnly:true }, []); await isMatch(t, 'test/fixtures/one', { filesOnly:false }, [ 'test/fixtures/one', ]); }); test('glob: deep match with higher level siblings', async t => { t.plan(1); await isMatch(t, 'test/fixtures/deep/*/c/d', {}, [ 'test/fixtures/deep/b/c/d' ]); }); terkelg-tiny-glob-d507af8/test/helpers/000077500000000000000000000000001404753442500201225ustar00rootroot00000000000000terkelg-tiny-glob-d507af8/test/helpers/index.js000066400000000000000000000005251404753442500215710ustar00rootroot00000000000000const isWin = process.platform === 'win32'; // unixify path for cross-platform testing function unixify(str) { return isWin ? str.replace(/\\/g, '/') : str; } function toIgnore(str) { return !str.includes('.DS_Store'); } function order(arr) { return arr.filter(toIgnore).map(unixify).sort(); } module.exports = { unixify, order }; terkelg-tiny-glob-d507af8/tiny-glob.png000066400000000000000000000311041404753442500201120ustar00rootroot00000000000000‰PNG  IHDRè€8­¢UPLTEYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLŠYLйê†tRNS�ÿà€x ðc°š&>Vjy†” •‹qeQ<( pÂèîÑ­…_2\˜ÖþûЙ]!3ƒ—O `60N„Þ÷X-@P¼1C�*7váÃÕßnÙJóìf³zoÓH B²#ŠÔ=¿¦øuü‚RíÈÆõž?Éý¤,ÜFTô®bmåë½Û‰Ÿ+d;Ũª:Wò"éïÀ�Kú�£Œ¹}g’%â[5G‡äö^Ø)|çrÏwµ¸ùZ¬;Òs –¡ºæ.8‘Ý~¶¥LË×tñˆh›·±»¯$S/�œa9ÊÁ'©4ÇiÄ«Ú{´¢DÎA§êUMÌ“IŽYlEkãæò0w-óIDATxìÓ‡‘Â@°µïLΘLÿuÒß€ß õ ðkº¾ì¯¢¢¢¢¢¢C…è€è€è€è€è€è€è ºè : : : : : :LÁÿP6=Ìû²…è0¢¢C>ÑÑ!Ÿè€è�Ot@tÈ': :äò‰ˆùDD‡|¢¢C>ÑÑ!Ÿè€è�Ot@tø2Ñ—«²uƒ¢¢¢¢¢C�è€è€è€è€è€èP$: : : : : : :Ô‰Îf»Ûާî<Žã¥»·ûãùz7ø°wŽM_ ÇØ|ƒC[\ ÛÊMHp)ÓâfÅ}®Hç¸3_™»»o°çîîîMrïïþò»ÉùüÕ|ã¹G¡g‡†uÕjÜ„GÕ´YóÏŸÑ¢%DºÇZµnÓ6ŸÉ´kß¡#|$ ]:unÇÔUîÒµrˆ(ôî…z = M�‰ŠÕ9ë LW¯æ½û ]= ÐV:Úê‹Ü£ÐûÑB%¤¡*MµCŠú ™'Dz1ƒaãlZ;âYè ½Û¹çÑÂ�þ1¤!>”ö†ÁÆpÚ¤ç1Œ¤±Q=Sqvö‡Þ­ÚhZjÛ;�ÔÇ0-`a,m�ƒ¸ÀL©œí¡�ÍL˜ˆ”MjJ{�a®x-åO†GºBŸÒ–™: ©šN{çÃÜ´u!ü¡Ðz÷‹œ‹/)Bjª—Ð^›A[…ð†BWè3g1P³§!5Íi¯ŒÍ¡¥¹ á …®ÐÎcÐjÔGJæÓÞ˜Z˜ ¥E…îIè—^F¦Ç�Šf´w9 Õ§­+ Ý�Я,¥‹'!Kho) �LKËb…îCèñÎteöB$×g9­­€¡•´´ ¢Ð}½h5Ýi¶É�@k‰µ02™¶ÖAº¡OšJ—&¬GR—ÐÚ¹Š–®†(tBŸt ݺv’ºŽÖÆÂÈõ´4¢Ð£zŸkèÚÔ"$s­]Ü b£i§` D¡G>ô–SéÞ HêjZ»:ÑÒTˆB�|èñE ÕH¦­]Õì5QèÑ }Aïó¶wÓÍH¢å-öߤ6Ò·‚vn­ QèÑ }ƒÁí¨…k‹�ÄFZÛ„´Mº˜vº ºB¿Z\̰�$6—ÑÖmHÛ´t"L¡+ôÅÖ�¡é5 IÜN[Ë‹�®;hg%¢L¡+ôÛLeˆîD=h­ÒÕŒvîB”)t…~p7CÕI̦­{�¦-´TQ¦Ðú8l-e¨ÚnCÅzÓÖö8Ò³ƒv6 ÒºB/ŒaÈj¢bÅËhk'Ò³šv– ÒºBß5†a;o*vmíFzöÐÊÞ}ˆ4…®Ð÷ßÊеFŶ\LKÂ�h¹!Sè Ýâ¨ØjÚ:êDËDˆBWèÿg*6�¶î s¢å¾"ˆBWèÿçz$1„–®s¢åˆBWèÿ¯l *v%mÝâDK_ˆBWèGñ*¶m;-5 o¢åAˆBWèG3ÛùÇÇ„7ÑÒ¢ÐúQuDÅÖö¢�Ä–°&ZJZAºB?ª‡�D-Z:-¬‰–‡! ]¡]c$Ñ—– k¢¥D¡+ô£+؇$.¤�ò…áL´ÔèQè ýf"‰®´t(œ‰–Z…®Ð�ÏX‹ £�GÙhy ¢Ðú±<Ždž �Ò'Øh¹,Qè ýXû�ÄúRÚéÆDËS…®Ð�m’yšvž c¢åfˆBWè6Ÿ/;H;M‹ÝO´ �(t…^�ë‘Ô³´3ÈýDËi…®Ðí�ÙD;O;Ÿhéµ¢ÐzO"™ØJZy.æz¢å:ˆBWèzI�§�\O´ŒD…D¡+ôúHjßM´2ÝñDK“"THºBɽH+/9žh Qè Ýþ©²­ù´Ò×íDKOH(*ÝM4W^)/ç\è%5n­QÎ ½‚¼B+O9�hiɨÊ4Wö²)ôDÛW/©ßcs �wúk/?Tî¯Ûï–Û§¸ÇöÁ‡ÿºBßSkfü¯n­_gžC âoÐÊ4‡-‰îðžBWè½]ÃÑ�\I{HÅq´ò¦Ã‰–Wà;…®Ðßz»;Ž­Ï<Ú[‹t«AsN´ô†ßºB/yq=*v<­UG*ÓFþ;Î&ZÞz^Sè }Î¥a|ËžHEÇ|Úx×ÙDË{ð™BWè%/!¹øû´T)ù€6>t6ÑRSè }t]¤¤Õ[´óR2…6 >r4Ñ2,)t…þÆÍHÑ%´Ó©™@M´l„¿ºBŸ°©zrV8ËchãcG-Ÿ@§ÐÃïØM+…HͤY´Ð+ÏÉD˵ð–BWèÛ7# à oÓÆ§N&ZÆÀW ]¡�:Œ´'ôûKha‘‹‰–‹«@2G¡‡»x$œÐÑœÞ*v0Ñr=|¥ÐúgHS½�B¿€6&:˜hy žRè ý¥<¤éþ�Bǃ´Ð>ø‰–[Šá)…®Ð'"msC ý‹´pK,ð‰–JˆQèa=ìlRè}–ÓÂ�O´ „ŸºB/ëˆôM )tt¦…ÁAO´L€§ºB?Þ +ô/Ð\å 'Z.�ŸºB/ß »Ã ×ÑB‹`O£Kl†ŸºBŸUC ýË´Ð9؉–;á)…®ÐûÂD£ÐBÇWhnh°-‡à'…®Ð¿Š¨‡Þ�¾äDËM“à'…®Ð—D>ô–Mh®Z�-óà'…®Ðç6Œ|èxŠæ9ÑÒ~Rè ýëˆ~è­ÊhîÁM´TŽÃO ]¡÷ö tÜNsKƒ›hé ?)t…^¾Ï‡Ð¿Is×7Ѳ~Rè }|sh,±6¨‰–oÁS ]¡ßåGè½i®fP-߆§ºBoàGèÅËhll@'Y”¯‡ŸºB/yÒ�Ð1ŽÆÊó‚™hyžRè ýAxúš‹š‹øM� O)t…þ™/¡cu0›ˆ}Êhhy1<¥Ðz#oB?LcËâA…þÑ^û·½KCÏÂ[ ]¡×§ÐQ‹¦Æá^¥¡Öð–BWè]¼ ýRûé/Ñ̨ó"é�¬¢Ð©Ð}ý“|š˜¬¤‰7�eú>…îAèK‰¼�häxd…~ºB÷!ô+hä±+h"ÿrd…¾I¡ûzü šþ}šX�l£Ð�Wè>„ŽwiâÂÙ4q²�Bÿ�B÷"ô¼[šÒnÈ6 ½ôI…îCèÌÐüQ$—ÑF…îEèÕ Ë�EÒŽ6Qè^„Ž�’=1D‘ü˜6ò*t/Bÿ C²‘$hå…îEè˜ÀpD6Rè¼Q¡{zM†âuD“|@;M'+tBrðÑ$?¥¥Ç*tBÇÛ AÁÏMr„¶,Tè„þ�º÷9D”T£µv߈~è ×Ó½™ˆ(©I{Ë7E?t…~�›U%#„~)ê¡+tü˜®=�¨’� ÄÞÎk#ºB?ƒ®�ƒ¨’<¤W­ž‘]¡×þ9Ýú¢KÎc`t~¡(²¡+tt¦[߇D׳ Ò[?uæä˜B�dèï”Ñ¥üÉ�躇�+;ðì«GªÞÛèÛ…c5ºkU›G'*ô(„Ž‹èÒ…�»›î*ôH„þ]*„DØó9ºBÇWèÎ܆�+•3¡+ôCtg$Ҟ͙ÐzËûèÌ�H›‘3¡+tIäNè ½>vÄåNè ½¨2ƒUâ‰êçLè ç2P ÞX•;¡+ôõs¤šo,\ž3¡+t´a€zíƒø£0wBWèë ‹ >y8gBWèÀàL„øäK5r&t…þKæ¾"ˆW:äLè =öƒr Ä3µr%t…ŽS”¾ÏôùU®„®ÐŽb0ÚA¼ÓqyŽ„®ÐñkãTˆzìÍ‘Ðú׈’V�,É�Ð:a†x©u"7BWè„z?íHäDè =>‚öjô�øZzA.„®Ð±”öjA¼õ›Q¹ºBïö­=ñWÏí9ºBÇÚz)ñØæ¯ä@è }Z>-U…x­e%…žý¡c,-Ý ñ\ý[zÖ‡>ˆv†@¼÷¥z¶‡J+§! ÈŽY =»CÇ»´Ñk!²�¬í’PèYz^SZ¸YBoPèÙ:¦ÓÂHd ™8[¡gqèÕ4Öd²ˆt] Ð³6t|Lc¿Ev‘ä+ô, }>�õD¶‘O¦ÿ\¡geèhFCÍ�…¤øÓ±e = C¯ICO ;ÉGcV(ôl ýÉå4’莬%U]×T¡gUèÛ–ÑÈ+Èjûæñ–*ô¬ }&ÍüYOŠZüþ‡C =B@#o=‰Ü y/,ùí#Ã]LO?ÉÂ!¤¡ÿIZd[è§ÓÌgÈ)ÒrëÄ%ãž^¼`Ï\Í[/}ëëGNí‰hè/ÒL]ä(ÙöQõžóGöï?³°°ðÊþ¿ì×og�5Eˆ4…žWƒF†Å!â …~Íl„ˆ7z;šù"¾Pè hæZˆxC¡/¦™»!â …^'ŸFÊ«@Ä }5Í\_(ô�ù4óD<¡Ðãhæ–bˆ8 ÐÇEé¬çJˆˆ†í,|‰…^�ÛZJCUha²Ÿ(ô†ÍhhºøA¡�¥©sºøA¡½JS‰wºxA¡·¼ˆÆî„B—ŒRèÓÚTA Z ¡¹C ]2K¡á-KbHæŠ=4wÓ$….¥Ð¾E²Yÿ8*Òê6Ú˜….¥Ð—òoü´Dzö©Q´r�B—ŒRèñü‡ÊçnÁÑôè2—vF@¡KF)ô‰ü·Ä€škð_þ¦ÒJZ{B¡Kf)ôWøßï÷{n=¼³ß/ï>«ùù @Ù….¥Ð¿–Oçn‡B—ŒR迦{ßTè’Q }ß(:÷(tÉ(…>žî}ªÐ%£zl%�kSè’Q ý—to?ºd”B–Î]¶M¡KF)ôƒtï (tÉ(…þ4�Sè’Q }})�ë….¥ÐŸ s�ã ]2J¡Ç†Ñµü�Pè’Q ½+�«….™¥ÐWеYkºd–Bï›ý/­)tQèµèÚŠ¸B—ÌRèí¥c¥¡Ð%³ú¹tí4(tÉ,…¾­2ûºd˜Bÿ”Ž=·E¡K¦)ô¯Ò­’ùPè’a ý0{ ]2M¡ßF·®�+tÉ4…¾¦�zpºdšBG§–Ý….™¦Ð·í¡Ko=….§ÐëÑ¥²Ÿ@¡Kæ)ô!N;? ]2O¡w¢C‰®Pè ýºSV ]"@¡o)§3{wA¡K(ô»è̬Pè ½å2ºòR(t‰…~ˆ®|u ºDƒBŸMG~] ….Ñ Ð{Ð�Q; ]úítâêO Ð%*úæ2:P2£ ]"C¡7lŸÏÀ=þMDˆB…œó+«ôÍmPè- ±ýç1@‹.Gä(tQè@ËF£� ßD$)tQè@·j·0³û!²º(tàÉãFÐÒ+Ï\¡‹Bb¯½’Oc£º\ЍSè¢ÐÿjrçÊ4ò­w÷Á ]:oÐåçLÓ„»êÀ ]ú_Åœ2‚©*ð€‡•+tQèuyáÏc2¥ÎúÑ$ü™½ûpŒªÊâ8þË�@¶Øh‚…:Ø ,%„Lp……ŒÔ•( ˆ¡,BB�@@!ØÂRF‘k0ACË*iÒŀݕb¡)½o¯‚Ì̹ïÍ›ûî瀴ï´{Î{áÊ„n˜Ðÿf攞[ êñ\ÒÛ¼<õ¦f^„;ºaBÿ»¼òLJ]vlG¹OržéŸór¹_¼1ü’гj"ì™Ð zø3¡&tÄnÄÞöÚO‰‰'üÕ×&|öU´ ]­”MYK^OLlú·pbâëKZlJqAè‘•¾~½Wƒ¿:™˜˜0ð…h„ˆ‘VaXãQÈÿ7éúû"®YiB—)úìðï>\ÜgD!)wDÿŽ•iZ£Š†¡×Ú_µÎòA=øÆ?ðàŒ«�o‚�ŒØÎ“Ë•âŒxç²nñ&ô x³Þ:±¼ýñf÷+¯©‘¬Kè¾�Uox…¿*³ùƵca=£hʉ£éôSás“wùLè(Iüü¹¾ L½·ÔÞö¡—|¹¦ýâY:cH4,d̼¨\>4ââãy8§úQAŠ×3ôʉW<âa�JíkP?|C/¹èÝz D‡mo͆%Œ¢“«Ó”‰'âr¤ Cß~ÿòB íÙ2) C÷ýö†z \ÜŽµÉ0Tû`Ë ,ø2Ú„~^ÊÜL5V|Xìspèã"¯þ‘Áš7y …’»SêÐäƒ&ôs)¹¿Uzej dž^ÿçàe)QoGKŠä5D264¡ÿ_£…TîÃ*‡Eè%gPìÝb $�DU2ÇšÐÿKìýƒh�ñW–wbèÛð_j.›D%FÞCªßÍTiEƒ$ú?}õdYZÇó`‚óB�Á´oBU<ïC¢K6UÛ�eBÿ›í1¹´Ø3‰>‡…þ"þå…lª”?7F°’ªæS½ÂÒÉ&ô.1©´Á‚DŸ£B�À?½Z–Š=ò5ŒàTzŽÖøf»ËC¯ug.m²à´“BŸŒ¿+ÙAõ<3Š`áTZ%£)þê>—†YÚè�JÎ ý1üÍk¥h‰ºÀÔØÅ´Ò /°Ø�¡_Ò†öJ=Vâ”пÃ_]SH‹ôhëƒ�]mh­m)¸Ó�¡G½KûeÞê�Ð/¼´ÐŽÊ0ðÇ|ZmwÚ÷…ž·,Ÿ!Ñü!G„ÞEÛh©ë£`øË·Š6hRàºÐ³0TâÖ'9 ô¬”gi±ÞÝ`øÇ»�þ¡ûÚö`åÌ}è·åÐrq½`ø#úAZÀ„¾ée†VÙWCz>m�>Æ…U~–0¡ïÏdȽ_d}èNPÆ…¤äP=º¯S:àú‡4 Ý”„šË©ž =m+�aÒíB7¥!ïAªgB�ZGÇXèŠÐ9¿Â¸…ê™Ð[N¤ƒlIvCèéwÁ8¯Ç¨ž ½W>å“4„Îüq0Σ—‡Ê™Ð§§Óaí‚ÐÙ; Æ9eeP9zU:O»Á.�7§À8‡ØuT΄މN´r» Bç£>¿´ƒÊ™Ð'Ó™ÞÜî‚Ðy5Œ_ø=•3¡/£S5ì‚Ð ïÆÿ1Ê j&ôét®v£õ�í*ÃøÞ署 ½i:ì�4ýCç0þÇzªfB¯XHGû$YÿÐ9ÿÅè’OÅLèÛ;Òᶸ ôR±øc/3¡�- ã-Ô?t΀ño½¨˜ Ýû ÃÀZýC÷üÆ?E·¡b&ôÉ “nÓ>tîöÁ"æ“8zgÃÂ3ñÚ‡ÎÚ0þ®dÕ2¡ÏïÍ0q±þ¡�¨Œ¿1NP-zÒŸ6>Õ>t®Â_3㨖 }ÃGf}íC/ ØHµLèY=Föj:/‡�ƒTÊ„žw€aåiíCÏ8c2Õ2¡?Æð2©–±é<þ•2¡ïÌ`˜ }è½cávè– ý †�®º‡Îáp»ë©” } ÃOAMÝC/•wûšJ™ÐóÖ1 µÕ=t&Âݾ R&ôkŽ:¦éúj¸Zlªåyåûr/Ý1#æùæ�dº/ô”´ÂŠÝ[�ˆˆ¸âÑw—ާ뺧 ÜìK*thÍw·§à¿E¶¼é½¥7…>—ª züš×Rð_6 é´ºËßêÐËöyéO5m”püÓ߯Šég†f”z—ªT?Vœ„sŠlzCœ[B�-K•<­ÛNÀ¹$'[A¥> eèÛîo˜„ÿæÝµ>'�*½™÷š™N5Ú ‹Ç¯ˆ½f©;B_H…&Þ1ç—Ôù •%Ä YèÍ›á\j½]@…à^›©ÄŠ‹’p¾Ä\zÑ<*3èéx\Àmur©Ìå¡ =5& çå›Ò‡ÊÜ÷jNê¤ÁyÃÇkúfªrèÒšðÃü÷Õ¯xÙúÞJøu½ÚP‘ê5áV³ëQ®úø©Ësš‡ž´’jx®ˆ„ŸZÞLEÖÛúˆ»pAEW¥S�)p«¡”«;~Ë{OïÐ;S�•Kà¿ä¹©Tbe’Ý¡o ô[a^»Ë?� ¤WE Æe6ÔGp¶jzÞ!Š Eð¼ï(èϦл{¸¯ëQj*Üh(eÖ#HåSu }?ÅVAbv]J�²'ô²ƒŒ=”ún´‘"#¢¬u ýsJ}ìƒHV_J}kKè_"(yG)” I‘õZ%�†¡ÿH¡j3!ô4¥®¶#ôï}ήt Ã…2)Q6Á[­_èÛ)•±w(4Ò†Ð=w#X·Pè~¸ÏhŠÜ�^ú…^•B?@ng_ÊäV±>ô5Ú }åÿ·ë$P¤!’«kú}”é» ”¡P{ËC÷TBðž¤Ì½pŸ3¡ü‰Å躯:ezB…èV”yÃòЀÀ q©— ×ùœÓ ÒK·Ð³(Óq6”h@™Ö–‡^/Ræ¸N9J´„Hdºf¡o¦Ì¨‘·’"=â-ýˆ|F™“p�›)°Á ™þš…þEÆGB‘ï(³ÄâЗAæ(EÃuÆS „>Ô,ôº¹ª¤”¥ÈýÖ†žþdNQdܦ %æBh‘^¡Ç§R$ ÊDPäEkC¿Bµ¾LJ ·2ô«!÷ %n‚ËÜH�G!v‡V¡÷¥Ä~(•M‰V†¾rÓ(±.sŒ»T§ÐgR"µ²“¶ž°2ôÙ�»‹÷Àeb(pÄNêúo(±jSb�…¡—‚Q”ø.³F–€ØZ�B?B‰§  |zgž…¡¿ |ã)°.SŽ—A,A§Ð/¢Äz(ö#r- ýN¨ÐÇ®Ñ<úˆ½¦Sè¿£Ä(ö %ªXúB¨°˜7›Ð ¡¡N¡?I‰,(ö!%&Xú«PaJ™Ðð¤ ýl¡D{Œ¯Yú�Ð�€T7¡ „®îÅd_¨v’ Ö…~7T¨M�²&ô×)ôîΚÕjèÔã*C…J”€Ë\B‰=ÊæÍñZT«èÔÐ#Cÿ8Ö.S‘ÏCê¨^¡ L„jG(±ßºÐC…q( —)O‰³�š¤Sè?S ×ņ9u2®TèL�Žp™*™™¨SèwR¢>›F‰Ï¬ }?TXD�•p›ñ”8 ™ÓZ…Þ˜¯A±-”øÊºÐkC…õxn³”/B¦ŒV¡ßO‰ÚP,‡ñNßGŸJ�gá6å(q( "å´ ýUJ4†b‡(ÐÖ…~%Tx‚Ûà6ŸS¤"$|™Z…Þ™÷A­ú”heaè9Páz ¼·N‘{ q7µ } %ª9êtí{ C¯¼qxnÓ•"Õ’!p™^¡W¦H”ºœ, �õC>w nS‹2ŸB ¿^¡ã%.‚R}(ÑÓÊÐÛCî$%†Âu2)2Á‹¢f¡C‰G¡RZ*%†YúFÈÍ D1\'‡2-´Uº…þ3%Ê&C¡EI°2ô>�;J‰ùp�©”Ù‡`åµÒ-ô?Qä4ú�"µ¬ =5Rc<ÈõÂušR&µ‚t˜º…žH‘¨“G‰‰°2t6 ñÚeÜg…îCp| l }¨Mƒ,·Q¤Ce(ó4E–[úK�úYø7ëB)4A¹–¶…žhÓÕë}ã)²Ê ÈTkCß ™è ”8*G¡R³„š£Â$ô/à¿ï)òˆŠ,¡Ì­Ö†Î#�9L‘ép¡ª”úA˜Ë0 ýgøï*Ê$B‘û(³ÝâзAf/E–À…RlÖ¬0\BÿþkD™þ>(q7eªÁâÐÓçC"ÊC O¸PRuJeÜ�U¾—áúRøo …C‰æ”ɶ:t¾‰«(2 ®ôÅF F@|Ù ›Ð;"÷R¦I<hO¡á–‡~¨Á›A‘l¸RÊ úJ>¥úÐå÷3¾“B“!W´’BŸY:«"x=)s\©–GEé·Áioè§m»ÆS# „ØUá³>ôC³¬ú”©wúˆ T+†Ÿ¼ïÑæÐl;ÝNéA¡›kB¨›‡B[`}è¼Ázœ2¹Ep§2T¡ðŒþ=’áúSÀÇ”š™ÑoR*ÑŽÐ Ë#8ã(´.õÕxg>.ìÈDÚz±ü…¬¿ÎPl$òšË¬lGèìîC0â (tÜêªÑ¡S~ÝCO�ö‡>‡"¿�ÿæ{(Õc êPl/l �m‹èSàVe¨Ê¼eUp~•¶ä2¡Eû^»ÿ™b™Í$;þr‹l ½GCn¨ú,î±ÓCe:\Ü- çRå¦Ö”„^…"qQðßtÊ�˜ʇìŒX›BçÊê³”j÷z—*Í‹iPécOë×éÏõ(#”yþ+É¥\æÊ*°v…Îî5˜Á¯Pl=Üë0Uëpà‡{ªn~ºêïÞØ÷IʉB¯N™áðßV*°á4ç­CÚÛ:³½Äèu”Ë‚{Ew¤ó B/ Lútøm-U¨w? òܲ•×ÆÐ¹&�Ò×¥Ü�p³'õ½;¥bÆÀOIm¨DöX¤ßY*Ñ v†Îr)ðW‹VT`#Ül~ªÖ¡ÿL±ñS?ƒR�íá¿”©*‘;ÓÞÐùÑ&ø'qĤR•îp½>‡^doè©VÆŽƒñKÞßÌíOµžƒ t™ê3Š}ø¥’k®£B·Âõ^×8tœµ5tl£r¥žß“øÙØ%>x\ƒ«ží@å^„.·â©-¼ø�ƒ]çæ¤R¥I)0Fjzs{Cÿ6•Ö¨7±Ô_m EFBº\ὫŸŠèYúÄ–Ÿ[÷¦rWF �¾¡_eo踓áÈSCºó¥Î` Ð7ôWm½VÃÐhz6;ûjz ›CÇ\†Ÿ¸.º‡ÞyLÛн}m=ºÃN'hzsè$ù]CGsõ¡ë6—P7Y÷Ð  •nÚþÚþdwèÀ0Ó š‡žÍDèz‚í63;2¬|ÝC¯ͤ´Ó4ôøv‡ŽONÚÌÖ=ô­ÐNqºž¡ãeÛCÇû é¡yèõÊC@?«4 ýŒý¡Ï.۱º‡~ JZ®gè]ìÝR&>ª©{è½Ç@@G3Wh:n¶?t¼.t�€ž–äjúïBºï†ƒôס{èöA@SoiúWéö‡Ž*ëVA÷Ð ¿…€¶6ê:–‡ t”ïMÇËöiúeÐWÒbCoŠÐQ±�÷\tý{/4Vs¹†¡'¿ŠÐÑ”Î6h4t}ümÐZÊnýBÇeÊC×`'0ó[hú[Ð\Ú7ú…>¦oHBÇF:׆fÐ>ô/  ½´þÚ…Ž�¡ Ÿ;·ó–Ð>ô£ñÐ_ʳڅ~p|hB÷ÝIgÊïíC¯~Dô—ò-¶á}{CGéЄß1:цŠÐ>ôÜŸ ¤¿¤«h©Ü®Gl½òÙЄ4¦ódÖ€þ¡7€œþ¾K¥…nÅM6‡ŽÃ¡ ëé4oÎ�þ¡ßÃæÑ2ßUí/‡*tÜšKGYÚú‡~±†_êw§E¸ÌöÐw– UèèÖ‘²º ô}�†Ÿ¼=Si…áÐÓöÐq2d¡c{ã˜ú‡¾Õtˆ]T.w‘èZ”‚б/d¡cìV:C�‹ýCßV�0⧦R­Þ?!d¡}²Ðá[˜JXy7\úû^Èøì{ª´ô6„.t윲Ð�~Õrå"ºÐë6¡=Žù0Ã÷Ö *ó^T„~7‚TcCèBÇèm ­¾ßùÂÐïœ0‘6ð”�”ÊeªS‰j‰€’Ð"XòC:ðåx†PŸY@(CÍ2i¹üka+²çxÊ] E¡ÏAкæ‡0tD=ËP)ÜãEhCß J³ŒÙë[Q¦u1 *ô(¯å¤†ß[™ ‰‘ßB‘HÉ�mûJZjùAÈy'¯cð4ÂÿªªÐÑb¥öNÁ9{9ÔÿýNw}…_ó ƒ÷(_Nº0õ³´ØòÀ‰¡ÝFQ¥wfÁ°–ot¥Š×þ¾êÛ¥K_õFéÒ{NÕ>2î¶h\Przèïk_ü¬„·ƒµ_z“þ¨{ñ­3a„‡Ùù¸ÚKë7üÃwÛ¤óú.ØqGí¬ÑäsõHÜÜ×>&”ÈÐi•ºw~us`Éå3M6ª;�bEÏ ƒþº¶#¿¾»¸÷F?Z#ìÚÿݯ½öê[ \¯øÇQ`_Þ‰Á¨‡Óé*\7éµ+“$"�